summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/Graphics
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:49:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:49:04 +0000
commit16f504a9dca3fe3b70568f67b7d41241ae485288 (patch)
treec60f36ada0496ba928b7161059ba5ab1ab224f9d /src/VBox/Devices/Graphics
parentInitial commit. (diff)
downloadvirtualbox-16f504a9dca3fe3b70568f67b7d41241ae485288.tar.xz
virtualbox-16f504a9dca3fe3b70568f67b7d41241ae485288.zip
Adding upstream version 7.0.6-dfsg.upstream/7.0.6-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/Devices/Graphics')
-rw-r--r--src/VBox/Devices/Graphics/.scm-settings88
-rw-r--r--src/VBox/Devices/Graphics/BIOS/BUGS3
-rw-r--r--src/VBox/Devices/Graphics/BIOS/COPYING504
-rw-r--r--src/VBox/Devices/Graphics/BIOS/ChangeLog1212
-rw-r--r--src/VBox/Devices/Graphics/BIOS/Makefile.kmk201
-rw-r--r--src/VBox/Devices/Graphics/BIOS/README214
-rw-r--r--src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm9247
-rw-r--r--src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum1
-rw-r--r--src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm8701
-rw-r--r--src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum1
-rw-r--r--src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm9405
-rw-r--r--src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum1
-rw-r--r--src/VBox/Devices/Graphics/BIOS/inlines.h180
-rw-r--r--src/VBox/Devices/Graphics/BIOS/makefile48
-rw-r--r--src/VBox/Devices/Graphics/BIOS/ose_logo.bmpbin0 -> 630 bytes
-rw-r--r--src/VBox/Devices/Graphics/BIOS/tests/testbios.c353
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vbe.c816
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vbe.h117
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt237
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vberom.asm951
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vbetables-gen.c245
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgabios.c2805
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgabios.h68
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgadefs.h78
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgadefs.inc58
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgafonts.h878
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgarom.asm1102
-rw-r--r--src/VBox/Devices/Graphics/BIOS/vgatables.h625
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp7580
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA-internal.h301
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA.cpp7014
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA.h669
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h67
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m947
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-dx11.cpp9902
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-savedstate.cpp454
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp2862
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h87
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp3327
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-glHlp.cpp768
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.cpp428
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.h443
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-hlp.cpp466
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp1935
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h1446
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp8022
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp1290
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp1740
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-d3d9.cpp1247
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp6473
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp1806
-rw-r--r--src/VBox/Devices/Graphics/DevVGA-SVGA3d.h689
-rw-r--r--src/VBox/Devices/Graphics/DevVGA.cpp7501
-rw-r--r--src/VBox/Devices/Graphics/DevVGA.h793
-rw-r--r--src/VBox/Devices/Graphics/DevVGAModes.h45
-rw-r--r--src/VBox/Devices/Graphics/DevVGASavedState.h88
-rw-r--r--src/VBox/Devices/Graphics/DevVGATmpl.h582
-rw-r--r--src/VBox/Devices/Graphics/DevVGA_VBVA.cpp2884
-rw-r--r--src/VBox/Devices/Graphics/DevVGA_VDMA.cpp373
-rw-r--r--src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp1702
-rw-r--r--src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h122
-rw-r--r--src/VBox/Devices/Graphics/HGSMI/Makefile.kup0
-rw-r--r--src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp61
-rw-r--r--src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h40
-rw-r--r--src/VBox/Devices/Graphics/Makefile.kup0
-rw-r--r--src/VBox/Devices/Graphics/VBoxSVGA3D.def49
-rw-r--r--src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def39
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/Makefile.kup0
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/directx.c2672
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/glsl_shader.c5608
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/Makefile.kup0
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c534
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h1282
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h1154
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h2047
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h381
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h131
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h246
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h491
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h357
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h355
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h9725
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/shader.c2523
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/shader_sm1.c707
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/shader_sm4.c444
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/shaderapi.c804
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/shaderlib.h110
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/stateblock.c99
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/utils.c158
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/vboxext.h177
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in669
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h460
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl88
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h92
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h247
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl38
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl590
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl558
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h290
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h110
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl327
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl250
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h41
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h63
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl142
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl68
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h275
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl96
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h62
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl336
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl249
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h57
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl117
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h333
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h83
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl666
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl1074
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h333
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h92
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h59
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl426
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl97
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h90
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h80
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h214
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h118
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h66
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl71
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl241
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h5183
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh220
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h851
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl223
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h34
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/config.h1273
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in1412
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h1275
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl257
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl117
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl1050
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h139
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h139
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h98
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h323
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h447
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl82
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h137
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h719
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h1577
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl1611
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl135
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h866
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h57
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h242
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl2010
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl1268
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h217
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h1162
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h295
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h1222
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h2134
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h404
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h1595
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h442
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl648
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h132
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h529
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h533
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h475
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h4711
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h112
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h1368
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl152
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h65
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h417
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h514
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h441
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h483
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl1307
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h1066
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h381
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h358
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h195
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl84
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h1543
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl38
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl75
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl740
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h160
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h92
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h47
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h38
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h88
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh41
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h392
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h80
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h44
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h182
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h151
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h207
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h155
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h407
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h59
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h415
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h127
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h33
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h46
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h34
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h1361
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h59
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h436
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h2740
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h1079
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl97
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h64
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl46
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h115
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl745
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h71
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h114
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h79
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h875
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl599
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h2511
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h254
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl214
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h233
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h212
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h116
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h219
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h173
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h119
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h43
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h87
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h38
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h308
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h775
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h918
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h1743
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h246
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl420
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl76
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h367
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h1282
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h1010
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h518
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h268
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h201
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h176
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h112
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h69
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h1211
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h101
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h63
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h137
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl1420
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl833
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h164
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h308
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl465
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h153
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h93
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl159
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl157
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h54
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl87
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h103
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h80
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h251
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl1055
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h181
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h272
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h310
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h50
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h142
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl365
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl210
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h74
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h69
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h767
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h753
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h108
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h462
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h78
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h44
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h176
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h114
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h285
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h169
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h40
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl450
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl137
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl143
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h461
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/http.h75
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl201
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h51
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h50
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl788
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl78
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h445
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h62
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h42
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl129
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h239
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h80
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h1409
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h587
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl308
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl1123
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h69
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl133
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl93
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h123
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h128
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h171
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h254
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h254
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h269
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h37
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h151
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h75
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h29
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h153
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h487
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h49
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h44
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h79
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h327
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h91
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h71
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h107
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h93
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h102
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h51
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h64
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h254
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h123
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h1332
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h90
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h824
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h286
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h130
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h196
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h69
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h38
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl78
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl215
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h142
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl1346
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h40
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl766
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl67
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h480
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl259
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h508
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl193
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h2531
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h74
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h801
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h168
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h143
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl249
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl1533
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl101
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h36
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl147
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h434
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h3105
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl311
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl18564
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h719
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h290
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl103
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl1018
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h335
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h189
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl402
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h78
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h46
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h63
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h140
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h248
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h85
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h59
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h1
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h50
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h87
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h50
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h158
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h184
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h49
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h90
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h99
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h174
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h90
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h132
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h37
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h126
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h140
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h42
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h63
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h272
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h301
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h156
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h42
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h201
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h86
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h82
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h1
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h88
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h162
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h2
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h478
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h92
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h197
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h1773
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl366
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl3576
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h563
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl3431
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h33
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h76
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h231
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h190
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl421
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl479
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h89
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h229
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h214
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h194
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h181
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h133
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h288
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h66
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h92
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h403
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h480
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h1229
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h5205
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl1651
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h511
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h10438
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl2531
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl54
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h169
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl1343
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl83
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h141
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h179
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl305
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h772
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h458
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl85
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h83
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h988
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h3645
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl967
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl74
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h255
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h120
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl47
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h257
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h272
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h153
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h1027
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl464
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h82
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl832
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h127
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h547
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h128
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h121
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h121
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h121
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h121
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl285
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl187
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h526
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h41
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h38
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h84
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h42
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h67
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h1088
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl142
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h139
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x277
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl51
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl39
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl86
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl45
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h93
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h211
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h635
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h241
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h786
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h394
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h175
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl67
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl76
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl83
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h105
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h249
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h54
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h33
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h130
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h67
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/security.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h56
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl136
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h114
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl60
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h1873
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl613
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h39
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h670
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl573
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h248
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h1775
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h1135
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl3408
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl171
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h33
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h49
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h304
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h254
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h755
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h1682
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h258
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl62
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h67
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h842
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in1
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl440
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h190
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h35
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl40
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h42
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h85
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h1077
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h277
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h202
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h378
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl320
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h193
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl61
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h1279
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl444
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h57
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl235
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h1849
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl190
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl524
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h95
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h30
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl158
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl100
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h221
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl89
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl155
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h5449
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl2172
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h116
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h304
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h289
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h217
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h49
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h37
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h182
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h1953
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h175
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl533
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl490
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h1748
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h687
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl671
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl1130
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl37
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h199
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h42
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h36
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl137
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl137
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h2825
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl1041
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl330
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h416
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h303
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h4589
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h425
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h666
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h116
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h1448
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl97
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h297
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h375
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl131
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h282
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h291
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl106
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl104
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h208
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h243
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h822
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h2197
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h484
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h351
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h205
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h151
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h5828
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h669
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl380
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h654
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h320
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h5081
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h2862
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h943
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h152
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h572
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h178
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc129
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h9726
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl79
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h629
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h297
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h966
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h71
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h2952
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h141
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h3809
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h593
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h1739
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h143
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h480
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h653
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h416
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h896
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h43
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h5525
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh459
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h79
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h195
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h54
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h89
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h164
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h46
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h64
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h1057
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h768
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h1822
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h425
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl207
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h797
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h139
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h2708
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h633
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h4043
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh1351
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h74
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h69
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl245
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl52
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl395
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h250
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h167
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl116
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h122
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h293
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h63
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h217
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h39
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h53
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h58
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h187
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h767
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl848
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl1359
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h359
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h248
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h29
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl847
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h214
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl77
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h39
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl304
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h55
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h4576
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/wined3d_private.h3479
-rw-r--r--src/VBox/Devices/Graphics/shaderlib/winoverride.h46
-rw-r--r--src/VBox/Devices/Graphics/shaders/Makefile.kmk50
-rw-r--r--src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl75
-rw-r--r--src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.ps.h169
-rw-r--r--src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.vs.h249
-rw-r--r--src/VBox/Devices/Graphics/svgadump/Makefile.kup0
-rw-r--r--src/VBox/Devices/Graphics/svgadump/svga_dump.c2815
-rw-r--r--src/VBox/Devices/Graphics/svgadump/svga_dump.h39
-rw-r--r--src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c639
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_glext/glext.h12905
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_glext/glxext.h957
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_glext/khrplatform.h314
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_glext/wglext.h848
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/VGPU10ShaderTokens.h819
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/includeCheck.h0
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_caps.h111
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_cmd.h2279
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_devcaps.h510
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_dx.h2077
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_limits.h130
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_reg.h51
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_shaderdefs.h518
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_surfacedefs.h1687
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga3d_types.h2000
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga_escape.h90
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga_overlay.h200
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga_reg.h2264
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/svga_types.h55
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_begin.h35
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_end.h35
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_begin.h0
-rw-r--r--src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_end.h0
777 files changed, 513896 insertions, 0 deletions
diff --git a/src/VBox/Devices/Graphics/.scm-settings b/src/VBox/Devices/Graphics/.scm-settings
new file mode 100644
index 00000000..547112e5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/.scm-settings
@@ -0,0 +1,88 @@
+# $Id: .scm-settings $
+## @file
+# Source code massager settings for graphics.
+#
+
+#
+# Copyright (C) 2017-2022 Oracle and/or its affiliates.
+#
+# This file is part of VirtualBox base platform packages, as
+# available from https://www.virtualbox.org.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation, in version 3 of the
+# License.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses>.
+#
+# SPDX-License-Identifier: GPL-3.0-only
+#
+
+
+/BIOS/vbe.c: --external-copyright --lgpl-disclaimer
+/BIOS/vbe.h: --external-copyright --lgpl-disclaimer
+/BIOS/vberom.asm: --external-copyright --lgpl-disclaimer
+/BIOS/vbetables-gen.c: --external-copyright
+/BIOS/vgabios.c: --external-copyright --lgpl-disclaimer
+/BIOS/vgabios.h: --external-copyright
+/BIOS/vgadefs.h: --external-copyright
+/BIOS/vgadefs.inc: --external-copyright
+/BIOS/vgafonts.h: --external-copyright
+/BIOS/vgarom.asm: --external-copyright --lgpl-disclaimer
+/BIOS/vgatables.h: --external-copyright
+/BIOS/tests/testbios.c: --external-copyright
+
+--filter-out-files /BIOS/BUGS
+--filter-out-files /BIOS/ChangeLog
+--filter-out-files /BIOS/makefile
+--filter-out-files /BIOS/Notes
+--filter-out-files /BIOS/README
+--filter-out-files /BIOS/TODO
+--filter-out-files /BIOS/vbe_display_api.txt
+--filter-out-files /BIOS/VBoxVgaBiosAlternative*.asm
+--filter-out-files /BIOS/VBoxVgaBiosAlternative*.md5sum
+
+
+/shaderlib/*: --external-copyright --lgpl-disclaimer --no-convert-tabs --no-fix-todos --no-strip-trailing-blanks
+/shaderlib/wine/include/*.idl: --treat-as .h --no-fix-header-guards
+/shaderlib/wine/include/*.rh: --treat-as .h --no-fix-header-guards
+/shaderlib/wine/include/*.h.in: --treat-as .h --no-fix-header-guards
+/shaderlib/wine/include/*-h.in: --treat-as .h --no-fix-header-guards
+/shaderlib/wine/include/*.inl: --treat-as .h --no-fix-header-guards
+/shaderlib/wine/include/*.x: --treat-as .h --no-fix-header-guards
+/shaderlib/wine/include/Makefile.in: --treat-as Makefile
+/shaderlib/wine/include/*.h: --no-fix-header-guards
+/shaderlib/libWineStub/include/*.h: --no-fix-header-guards
+/shaderlib/libWineStub/include/wine/*.h: --no-fix-header-guards
+/shaderlib/wine/vbox/libWineStub/include/*.h: --no-fix-header-guards
+/shaderlib/wine/vbox/libWineStub/include/wine/*.h: --no-fix-header-guards
+
+/shaderlib/shaderapi.c: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/shaderlib.h: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/utils.c: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/vboxext.h: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/wine/vbox/VBoxDbgGl.c: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/wine/vbox/VBoxDbgGl.h: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/wine/vbox/VBoxWineEx.h: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+/shaderlib/winoverride.h: --no-external-copyright --no-lgpl-disclaimer --convert-tabs --fix-todos --strip-trailing-blanks
+
+/shaders/*.h: --external-copyright --no-fix-header-guards --dont-set-svn-keywords --no-strip-trailing-blanks
+/shaders/*.hlsl: --treat-as .cpp
+
+--filter-out-dirs "/svgadump/."
+
+/vmsvga_glext/*.h: --external-copyright --no-convert-tabs --no-strip-trailing-blanks
+/vmsvga_include/includeCheck.h: --external-copyright --no-fix-header-guards
+/vmsvga_include/svga*.h: --external-copyright --no-fix-header-guards --no-convert-tabs --no-strip-trailing-blanks --dont-set-svn-keywords --no-page-restrictions
+/vmsvga_include/vmware*.h: --external-copyright --no-fix-header-guards --no-convert-tabs --no-strip-trailing-blanks --dont-set-svn-keywords
+/vmsvga_include/VGPU*.h: --external-copyright --no-fix-header-guards --no-convert-tabs --no-strip-trailing-blanks --dont-set-svn-keywords
+/vmsvga_include/vmsvga*.h: --no-fix-header-guards
+
+/DevVGATmpl.h: --no-fix-header-guards
diff --git a/src/VBox/Devices/Graphics/BIOS/BUGS b/src/VBox/Devices/Graphics/BIOS/BUGS
new file mode 100644
index 00000000..25f88aa0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/BUGS
@@ -0,0 +1,3 @@
+Not all the functions have been implemented yet.
+
+Please report any bugs to <cbothamy@free.fr>
diff --git a/src/VBox/Devices/Graphics/BIOS/COPYING b/src/VBox/Devices/Graphics/BIOS/COPYING
new file mode 100644
index 00000000..223ede7d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/COPYING
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/src/VBox/Devices/Graphics/BIOS/ChangeLog b/src/VBox/Devices/Graphics/BIOS/ChangeLog
new file mode 100644
index 00000000..4b88fab1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/ChangeLog
@@ -0,0 +1,1212 @@
+2006-08-19 09:39 vruppert
+
+ * vbe.c (1.58):
+
+ - improved VGA compatible setup for VBE modes (disable CGA and Hercules
+ compatible memory layout)
+
+2006-08-18 20:39 vruppert
+
+ * vbe.c (1.57):
+
+ - improved VGA compatible setup for >=8bpp VBE modes (CRTC doubleword mode and
+ GRDC shift register setting added)
+ - now using symbolic name for CRTC address register
+
+2006-08-15 20:42 vruppert
+
+ * vbe.c (1.56), vbetables-gen.c (1.4):
+
+ - init 4bpp VBE modes by a temporary switch to VGA mode 0x6A
+ - all 4bpp VBE modes now enabled
+
+2006-08-14 20:24 vruppert
+
+ * vbe.c (1.55):
+
+ - VGA compatible setup for VBE modes improved (Bochs hack can be removed now)
+
+2006-08-12 07:51 vruppert
+
+ * .cvsignore (1.1):
+
+ - .cvsignore added for auto-generated file
+
+2006-08-12 07:47 vruppert
+
+ * vbe.c (1.54), vbe.h (1.27), vbe_display_api.txt (1.13), vbetables-gen.c (1.3):
+
+ - cleaned up VBE memory size definitions (removed duplicate defines, main
+ definition now in vbetables-gen.c)
+
+2006-08-09 21:28 vruppert
+
+ * vbetables.h (1.30):
+
+ - removed auto-generated file
+
+2006-08-09 21:26 vruppert
+
+ * vbe.c (1.53), vbe.h (1.26), vbe_display_api.txt (1.12), vbetables-gen.c (1.2),
+ vbetables.h (1.29):
+
+ - VBE video memory increased to 8 MB
+ - VBE dispi ID changed to B0C4
+ - documentation update
+
+2006-07-11 08:03 vruppert
+
+ * Makefile (1.18), vbetables-gen.c (1.1), vbetables.h (1.28):
+
+ - generate vbetables.h dynamicly
+ * initial patch from the qemu project by Fabrice Bellard
+ * only add modes that fit in video memory (still 4 MB)
+ * several other fixes (e.g. 4 bpp specific stuff, number of pages)
+
+2006-07-10 07:47 vruppert
+
+ * vgabios.c (1.66):
+
+ - biosfn_scroll(): check variable 'i' for underflowing when scrolling downwards
+ to avoid screen corruption
+
+2006-07-10 07:47 vruppert
+
+ * vbe.c (1.52):
+
+ - VBE set bank functions failure handling added
+ - VBE get/set logical scan line length fixes for the 4bpp mode
+
+2006-07-08 13:27 vruppert
+
+ * vbe.c (1.51), vbetables.h (1.27):
+
+ - added special case for the 4 bpp when setting VBE display start
+ - VBE mode table fixes
+
+2006-07-07 13:30 vruppert
+
+ * clext.c (1.12):
+
+ - bank pointer must be set to 0 after a mode set
+
+2006-06-21 16:58 vruppert
+
+ * vbe.c (1.50), vbetables.h (1.26):
+
+ - improved VBE display capabilities check (X resulution checked now)
+ - removed obsolete defines (LFB always available, always generate dynamic list)
+ - CR/LF to LF fixes
+
+2006-06-18 15:22 vruppert
+
+ * clext.c (1.11), vbe.c (1.49), vbe.h (1.25), vbetables.h (1.25), vgabios.c
+ (1.65):
+
+ - applied patch from the qemu project (Fabrice Bellard)
+ * Cirrus SVGA now supports the "no clear" bit when switching to Cirrus or
+ VESA mode
+ * Bochs VBE protected mode interface improved
+ * save/restore video state support for Bochs VBE and standard VGA added
+ * Bochs VBE prepared for more modi
+
+2006-03-25 10:19 vruppert
+
+ * clext.c (1.10), vgabios.c (1.64), vgatables.h (1.10):
+
+ - applied patch from Fabrice Bellard
+ * added minimal support for the video parameter table (VPT)
+ * added Cirrus SVGA mode 0x7b (1600x1200x8)
+
+2005-12-26 19:50 vruppert
+
+ * vbe.c (1.48), vgabios.c (1.63):
+
+ - Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com)
+
+2005-12-26 19:50 vruppert
+
+ * biossums.c (1.3):
+
+ - biossums utility now supports VGABIOS sizes up to 64 kBytes
+
+2005-09-21 18:45 vruppert
+
+ * vgatables.h (1.9):
+
+ - mode 0x11: all color planes must be enabled in this 2-color VGA mode
+
+2005-08-30 18:41 vruppert
+
+ * biossums.c (1.2):
+
+ - missing license text added in biossums.c
+
+2005-07-02 18:39 vruppert
+
+ * vgabios.c (1.62):
+
+ - BIOS configuration word usually reports initial mode 80x25 color text
+ - vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the
+ cursor row value
+
+2005-05-24 16:50 vruppert
+
+ * vbe.c (1.47), vgabios.c (1.61):
+
+ - output to the vgabios info port can be disabled now. It is still enabled by
+ default and always possible in debug mode. (based on a patch from Alex Beregszaszi)
+
+2005-05-20 16:06 vruppert
+
+ * vbe.c (1.46), vgabios.c (1.60):
+
+ - fixed return value for the default case in the VBE section (non-debug mode)
+ - removed unused macros HALT and PANIC_PORT
+
+2005-03-07 20:39 vruppert
+
+ * README (1.9):
+
+ - updates for 0.5a release
+
+2005-03-06 13:06 vruppert
+
+ * Makefile (1.17):
+
+ - vgabios files with cirrus support added to release target
+
+2005-03-06 12:24 vruppert
+
+ * Makefile (1.16):
+
+ - cross compilation support added (patch from Alex Beregszaszi)
+
+2005-03-05 13:03 vruppert
+
+ * BUGS (1.3), README (1.8), TODO (1.11):
+
+ - documentation updates
+
+2004-12-04 15:26 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.61), VGABIOS-lgpl-latest.cirrus.bin
+ (1.13), VGABIOS-lgpl-latest.cirrus.debug.bin (1.13),
+ VGABIOS-lgpl-latest.debug.bin (1.61), clext.c (1.9):
+
+ - Cirrus extension: support for 1280x1024x15 and 1280x1024x16 modes added (patch
+ from Fabrice Bellard)
+
+2004-08-08 16:53 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.60), VGABIOS-lgpl-latest.cirrus.bin (1.12),
+ VGABIOS-lgpl-latest.cirrus.debug.bin (1.12),
+ VGABIOS-lgpl-latest.debug.bin (1.60), clext.c (1.8):
+
+ - use single bank mode for VBE
+ - enable 16k granularity for VBE only
+
+2004-07-30 19:33 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.59), VGABIOS-lgpl-latest.cirrus.bin (1.11),
+ VGABIOS-lgpl-latest.cirrus.debug.bin (1.11),
+ VGABIOS-lgpl-latest.debug.bin (1.59), clext.c (1.7):
+
+ - cirrus init: set standard vga mode and reset bitblt
+
+2004-07-22 18:38 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.58), VGABIOS-lgpl-latest.cirrus.bin (1.10),
+ VGABIOS-lgpl-latest.cirrus.debug.bin (1.10),
+ VGABIOS-lgpl-latest.debug.bin (1.58), clext.c (1.6), vbe.c (1.45),
+ vbetables.h (1.24):
+
+ - cirrus extension: tables for mode 1280x1024x8 added
+ - vbe: dispi_set_xres() and dispi_set_virt_width() now modify vga compatible
+ registers
+ - vbe: mode list entry for mode 800x600x4 fixed
+
+2004-07-18 20:23 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.57), VGABIOS-lgpl-latest.cirrus.bin (1.9),
+ VGABIOS-lgpl-latest.cirrus.debug.bin (1.9),
+ VGABIOS-lgpl-latest.debug.bin (1.57), vgabios.c (1.59), vgatables.h (1.8):
+
+ - disable CRTC write protection before setting new values
+ - CRTC line for mode 0x6a fixed
+
+2004-07-07 16:08 vruppert
+
+ * Makefile (1.15), VGABIOS-lgpl-latest.bin (1.56),
+ VGABIOS-lgpl-latest.cirrus.bin (1.8), VGABIOS-lgpl-latest.cirrus.debug.bin (1.8),
+ VGABIOS-lgpl-latest.debug.bin (1.56), biossums.c (1.1), clext.c (1.5):
+
+ - biossums utility for the Bochs BIOS adapted for the LGPL'd VGABIOS
+ - VESA3 PMINFO checksum calculated in the source
+ - 24 bpp mode entries fixed (patch from Fabrice Bellard)
+
+2004-06-25 18:28 vruppert
+
+ * VGABIOS-lgpl-latest.cirrus.bin (1.7), VGABIOS-lgpl-latest.cirrus.debug.bin (1.7),
+ clext.c (1.4):
+
+ - 4MB memory probe added (patch from Fabrice Bellard)
+
+2004-06-25 17:31 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.55), VGABIOS-lgpl-latest.cirrus.bin (1.6),
+ VGABIOS-lgpl-latest.cirrus.debug.bin (1.6),
+ VGABIOS-lgpl-latest.debug.bin (1.55), clext.c (1.3):
+
+ - fixed value of sequencer reset register in cirrus mode table
+ - fixed possible overflow error if cirrus start address is >256k
+
+2004-06-23 21:11 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.54), VGABIOS-lgpl-latest.cirrus.bin (1.5),
+ VGABIOS-lgpl-latest.cirrus.debug.bin (1.5),
+ VGABIOS-lgpl-latest.debug.bin (1.54), clext.c (1.2):
+
+ - applied new patch for the cirrus extension from suzu
+ * enable VESA LFB support if a Cirrus PCI adapter is detected
+ * prepared VBE3 protected mode info block (test case required)
+ - added VBE functions 4F06h and 4F07h
+ - some bugfixes
+
+2004-06-17 18:57 vruppert
+
+ * Makefile (1.14), VGABIOS-lgpl-latest.bin (1.53),
+ VGABIOS-lgpl-latest.cirrus.bin (1.2), VGABIOS-lgpl-latest.cirrus.debug.bin (1.2),
+ VGABIOS-lgpl-latest.debug.bin (1.53):
+
+ - fixed makefile targets for the binaries with cirrus extension
+
+2004-06-16 21:11 vruppert
+
+ * Makefile (1.13), VGABIOS-lgpl-latest.bin (1.52),
+ VGABIOS-lgpl-latest.cirrus.bin (1.1), VGABIOS-lgpl-latest.cirrus.debug.bin (1.1),
+ VGABIOS-lgpl-latest.debug.bin (1.52), clext.c (1.1), vgabios.c (1.58):
+
+ - applied suzu's cirrus extension patch. Cirrus SVGA detection, most of the
+ cirrus-specific modes and some basic VBE features are present now.
+
+2004-05-31 21:15 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.51), VGABIOS-lgpl-latest.debug.bin (1.51),
+ vgabios.c (1.57):
+
+ - write character in planar graphics modes: sequencer map mask must be 0x0f and
+ bit operation must be 'replace' if bit 7 of attribute is clear
+ - read/write pixel in planar graphics modes: bit mask setup simplified
+
+2004-05-11 18:08 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.50), VGABIOS-lgpl-latest.debug.bin (1.50),
+ vgabios.c (1.56):
+
+ - biosfn_select_vert_res rewritten in assembler
+ - scroll text in planar graphics modes: attribute for blank line fixed
+ - write character in planar graphics modes: graphics controller values fixed
+
+2004-05-09 20:32 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.49), VGABIOS-lgpl-latest.debug.bin (1.49),
+ vbe.c (1.44), vbe.h (1.24), vgabios.c (1.55):
+
+ - VBE init code and some dispi ioport functions rewritten in assembler
+ - text scroll functions for CGA graphics modes added
+ - scroll text in graphics modes: attribute for blank line fixed
+
+2004-05-08 16:06 vruppert
+
+ * BUGS (1.2), README (1.7), TODO (1.10), VGABIOS-lgpl-latest.bin (1.48),
+ VGABIOS-lgpl-latest.debug.bin (1.48), vbe.c (1.43), vbe.h (1.23),
+ vbe_display_api.txt (1.11), vgabios.c (1.54):
+
+ - VBE internal functions dispi_set_enable and dispi_set_bank now called both from C
+ and asm code
+ - VBE function 0x03 rewritten in assembler
+ - VBE function 0x08 cleaned up
+ - text output and scroll functions for graphics modes rewritten using case
+ structures
+ - documentation and comments updated
+
+2004-05-06 21:18 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.47), VGABIOS-lgpl-latest.debug.bin (1.47),
+ vbe.c (1.42), vbe.h (1.22), vgabios.c (1.53):
+
+ - VBE functions 0x05, 0x06, 0x07 and some dispi ioport functions rewritten in
+ assembler
+ - VBE functions 0x06 and 0x07: get functions now supported, 15 bpp bug fixed
+
+2004-05-05 19:24 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.46), VGABIOS-lgpl-latest.debug.bin (1.46),
+ vbe.c (1.41), vbe.h (1.21), vbe_display_api.txt (1.10), vgabios.c (1.52):
+
+ - 8 bit DAC capability flag set
+ - vbe_biosfn_set_get_dac_palette_format implemented
+ - VBE api description updated
+ - C definitions from header files now used assembler code
+
+2004-05-02 17:27 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.45), VGABIOS-lgpl-latest.debug.bin (1.45),
+ vgabios.c (1.51):
+
+ - text scroll functions for PLANAR1/PLANAR4 graphics modes added
+ - function biosfn_get_ega_info rewritten in assembler
+ - read/write graphics pixel functions rewritten using a case structure
+
+2004-05-01 16:03 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.44), VGABIOS-lgpl-latest.debug.bin (1.44),
+ vgabios.c (1.50):
+
+ - biosfn_enable_cursor_emulation rewritten in assembler
+ - remap of the cursor shape depends on modeset control bit 0
+ - text output in PLANAR4 modes now supports attribute bit 7 (XOR with background)
+
+2004-04-25 20:13 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.43), VGABIOS-lgpl-latest.debug.bin (1.43),
+ vgabios.c (1.49), vgatables.h (1.7):
+
+ - table entries for vga mode 0x0f fixed (PLANAR2 exists on EGA only)
+ - function release_font_access now supports the monochrome text mode
+ - PLANAR1 modes now supported in text output functions and read/write pixel
+ - function AH=0x12/BL=0x32 rewritten in assembler
+
+2004-04-25 08:45 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.42), VGABIOS-lgpl-latest.debug.bin (1.42),
+ vgabios.c (1.48):
+
+ - block address calculation in font functions fixed
+ - functions AX=0x1103, AH=0x12/BL=0x31 and AH=0x12/BL=0x33 rewritten in assembler
+
+2004-04-24 09:59 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.41), VGABIOS-lgpl-latest.debug.bin (1.41),
+ vgabios.c (1.47):
+
+ - read/write graphics pixel for PLANAR4 modes added
+ - CGA specific functions (group AH = 0x0B) implemented
+
+2004-04-23 14:34 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.40), VGABIOS-lgpl-latest.debug.bin (1.40),
+ vgabios.c (1.46):
+
+ - remaining palette and dac read/write functions (except gray scale summing)
+ rewritten in assembler
+
+2004-04-18 13:43 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.39), VGABIOS-lgpl-latest.debug.bin (1.39),
+ vgabios.c (1.45):
+
+ - some palette and dac read/write functions rewritten in assembler
+ - main int10 debug message now works with assembler functions, too
+
+2004-04-18 09:15 japj
+
+ * vbe.c (1.40):
+
+ updated my email address + put vgabios url in the bios copyright string
+ (instead of my old email address)
+
+2004-04-17 07:18 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.38), VGABIOS-lgpl-latest.debug.bin (1.38),
+ vgabios.c (1.44):
+
+ - biosfn_set_video_mode: don't load DAC registers if default palette loading is
+ disabled. Perform gray scale summing if enabled.
+ - biosfn_perform_gray_scale_summing: switch between DAC read and write mode is
+ required to make this function work. Maximum DAC value always set to 0x3f.
+
+2004-04-08 17:50 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.37), VGABIOS-lgpl-latest.debug.bin (1.37),
+ vgabios.c (1.43):
+
+ - write character function for the LINEAR8 mode
+ - get_font_access() and release_font_access() rewritten in assembler
+ - fixed wrong variable name in the init code
+
+2004-04-06 19:31 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.36), VGABIOS-lgpl-latest.debug.bin (1.36),
+ vgabios.c (1.42):
+
+ - init functions rewitten in assembler
+ - function biosfn_set_display_code rewritten in assembler
+
+2004-04-05 19:40 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.35), VGABIOS-lgpl-latest.debug.bin (1.35),
+ vgabios.c (1.41):
+
+ - functions biosfn_get_video_mode() and biosfn_read_display_code() rewritten
+ in assembler
+
+2004-04-04 18:20 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.34), VGABIOS-lgpl-latest.debug.bin (1.34),
+ vgabios.c (1.40):
+
+ - write character function for CGA modes added
+ - read/write graphics pixel for CGA and LINEAR8 modes added
+
+2004-02-23 21:08 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.33), VGABIOS-lgpl-latest.debug.bin (1.33),
+ vbe.c (1.39):
+
+ - dispi_get_max_bpp(): restore the original value of the vbe enable register
+
+2004-02-22 14:17 vruppert
+
+ * README (1.6), vbe.c (1.38), vbe.h (1.20), vbe_display_api.txt (1.9),
+ VGABIOS-lgpl-latest.bin (1.32), VGABIOS-lgpl-latest.debug.bin (1.32):
+
+ - new function dispi_get_max_bpp() returns the bpp capabilities of the Bochs gui
+ - create the mode list depending on the supported bpp capability
+ - unused stuff removed
+ - documentation updated
+
+2004-02-21 18:20 vruppert
+
+ * vbe.c (1.37), vbe.h (1.19), vbetables.h (1.23),
+ VGABIOS-lgpl-latest.bin (1.31), VGABIOS-lgpl-latest.debug.bin (1.31):
+
+ - dynamicly genarated vbe mode_info list works now
+
+2003-11-17 21:04 vruppert
+
+ * vbe.c (1.36), vbetables.h (1.22), vgabios.c (1.39), vgatables.h (1.6),
+ VGABIOS-lgpl-latest.bin (1.30), VGABIOS-lgpl-latest.debug.bin (1.30):
+
+ - new VBE presence flag stored at unused BDA address 0xB9
+ - VBE init code rewritten
+ - added BIOS TTY flag for VBE mode 0x0102 (TODO: scrolling)
+ - vgabios_init_func: load and activate text font already done by set_video_mode
+ - function biosfn_get_all_palette_reg() fixed
+
+2003-11-06 00:26 cbothamy
+
+ * README (1.5):
+
+ - add changes for 0.4c release
+
+2003-11-06 00:22 cbothamy
+
+ * VGABIOS-lgpl-latest.bin (1.29), VGABIOS-lgpl-latest.debug.bin
+ (1.29):
+
+ - compile vgabios.c rev1.38
+
+2003-11-06 00:21 cbothamy
+
+ * vgabios.c (1.38):
+
+ - activate char table after loading it when setting a text video
+ mode
+
+2003-11-06 00:19 cbothamy
+
+ * Makefile (1.12):
+
+ - when making a release, remove unwanted files first, and exclude
+ CVS from the tarball
+
+2003-11-04 22:50 cbothamy
+
+ * ChangeLog (1.20, v0_4b):
+
+ - update ChangeLog for 0.4b release
+
+2003-11-04 22:49 cbothamy
+
+ * README (1.4, v0_4b):
+
+ - update Changes for 0.4b release
+
+2003-11-04 20:26 vruppert
+
+ * vgabios.c (1.37), VGABIOS-lgpl-latest.bin (1.28),
+ VGABIOS-lgpl-latest.debug.bin (1.28) (utags: v0_4b):
+
+ - biosfn_get_font_info(): character height must be returned in CX
+
+2003-11-03 21:57 vruppert
+
+ * vbe.c (1.35, v0_4b), vgabios.c (1.36), VGABIOS-lgpl-latest.bin
+ (1.27), VGABIOS-lgpl-latest.debug.bin (1.27):
+
+ - the 'noclearmem' flag is not stored in the 'current video mode'
+ register (0040h:0049h) - VBE also stores the 'noclear' flag in
+ the 'video control' register (0040h:0087h)
+
+2003-10-05 10:06 vruppert
+
+ * vbe.h (1.18, v0_4b), vbe_display_api.txt (1.8, v0_4b),
+ VGABIOS-lgpl-latest.bin (1.26), VGABIOS-lgpl-latest.debug.bin
+ (1.26):
+
+ - changed VBE i/o registers to 0x01CE/CF (suggestion from Daniel
+ Gimpelevich)
+
+2003-08-18 18:38 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.25), VGABIOS-lgpl-latest.debug.bin
+ (1.25), vgabios.c (1.35):
+
+ - wrong offsets to the character tables (INT 0x1F/0x43) fixed
+ (underscore added) - functions accessing the CRT controller
+ optimized using a local variable 'crtc_addr'
+
+2003-08-17 15:46 cbothamy
+
+ * ChangeLog (1.19, v0_4a):
+
+ - ChangeLog is now automatically generated by running "cvs2cl -r
+ -t -P -S" - update ChangeLog for 0.4a release
+
+2003-08-17 15:44 cbothamy
+
+ * README (1.3, v0_4a):
+
+ - added the old ChangeLog in the HOSTORY section of the README
+ file - update History for 0.4a release, with a summary of Changes
+
+2003-08-17 15:24 cbothamy
+
+ * Makefile (1.11, v0_4b, v0_4a):
+
+ - fix Makefile for "release" target
+
+2003-08-16 01:49 cbothamy
+
+ * Makefile (1.10), README (1.2), VGABIOS-lgpl-latest.bin (1.24,
+ v0_4a), VGABIOS-lgpl-latest.debug.bin (1.24, v0_4a), vgabios.c
+ (1.34, v0_4a):
+
+ - update the Makefile for releases - remove references to old
+ plex86 website - update the Makefile so it build
+ VGABIOS-lgpl-latest.bin and VGABIOS-lgpl-latest.debug.bin
+
+2003-08-07 18:17 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.23), VGABIOS-lgpl-latest.debug.bin
+ (1.23):
+
+ - current VBE mode now stored in BDA (unused address 0xBA)
+
+2003-08-07 17:54 vruppert
+
+ * vbe.c (1.34), vgatables.h (1.5, v0_4b) (utags: v0_4a):
+
+ - current VBE mode now stored in BDA (unused address 0xBA)
+
+2003-07-20 18:05 vruppert
+
+ * vgabios.c (1.33), VGABIOS-lgpl-latest.bin (1.22),
+ VGABIOS-lgpl-latest.debug.bin (1.22):
+
+ - fixed a few functions accessing the attribute controller
+
+2003-07-19 09:33 vruppert
+
+ * vgabios.c (1.32), VGABIOS-lgpl-latest.bin (1.21),
+ VGABIOS-lgpl-latest.debug.bin (1.21):
+
+ - re-enable video after programming the attribute controller -
+ biosfn_set_all_palette_reg(): number of palette registers fixed
+
+2003-07-16 22:32 vruppert
+
+ * ChangeLog (1.18), vbe.c (1.33), vbe.h (1.17, v0_4a),
+ vbe_display_api.txt (1.7, v0_4a), vgabios.c (1.31),
+ VGABIOS-lgpl-latest.bin (1.20), VGABIOS-lgpl-latest.debug.bin
+ (1.20):
+
+ - LFB flag now stored in the register VBE_DISPI_INDEX_ENABLE -
+ release date in Changelog fixed - release date of VBE BIOS 0.6
+ was the same as VGA BIOS 0.3b - year changed in copyright
+ messages
+
+2003-07-15 12:40 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.19), VGABIOS-lgpl-latest.debug.bin
+ (1.19):
+
+ - new function dispi_get_bpp() - function
+ vbe_biosfn_set_get_logical_scan_line_length() fixed for >8bpp -
+ number of image pages of all VBE modes fixed
+
+2003-07-15 12:35 vruppert
+
+ * vbe.c (1.32), vbetables.h (1.21, v0_4b, v0_4a):
+
+ - new function dispi_get_bpp() - function
+ vbe_biosfn_set_get_logical_scan_line_length() fixed for >8bpp -
+ number of image pages of all VBE modes fixed
+
+2003-07-14 19:45 vruppert
+
+ * vbe_display_api.txt (1.6):
+
+ - description of VBE_DISPI_ interface 0xb0c2 added
+
+2003-07-10 19:07 vruppert
+
+ * vbe.c (1.31), vbetables.h (1.20), VGABIOS-lgpl-latest.bin (1.18),
+ VGABIOS-lgpl-latest.debug.bin (1.18):
+
+ - 15 bpp VBE modes added - "Bochs own" mode 0x142 (640x480x32bpp)
+ added
+
+2003-07-01 19:00 vruppert
+
+ * vbe.c (1.30), vbe.h (1.16), vbetables.h (1.19),
+ VGABIOS-lgpl-latest.bin (1.17), VGABIOS-lgpl-latest.debug.bin
+ (1.17):
+
+ - VBE preserve display memory feature implemented - VBE mode
+ entries 0x117 and 0x118 added
+
+2003-06-30 21:27 vruppert
+
+ * vbe.c (1.29), vbe.h (1.15), vbetables.h (1.18),
+ VGABIOS-lgpl-latest.bin (1.16), VGABIOS-lgpl-latest.debug.bin
+ (1.16):
+
+ - VBE mode info blocks of modes with >8bpp enabled - VBE modes
+ with 24 bpp: bytes per scanline fixed - vbe_biosfn_set_mode() now
+ supports >8bpp - VBE will be enabled with new VBE_DISPI_ID2
+ (0xB0C2)
+
+2003-06-29 12:53 vruppert
+
+ * vbetables.h (1.17), VGABIOS-lgpl-latest.bin (1.15),
+ VGABIOS-lgpl-latest.debug.bin (1.15):
+
+ - duplicate lines with VBE_MODE_ATTRIBUTE_GRAPHICS_MODE removed -
+ VBE mode info items of currently unsupported modes fixed
+
+2003-06-15 21:19 vruppert
+
+ * vgabios.c (1.30), VGABIOS-lgpl-latest.bin (1.14),
+ VGABIOS-lgpl-latest.debug.bin (1.14):
+
+ - function write_gfx_char() rewritten
+
+2003-04-26 09:27 vruppert
+
+ * VGABIOS-lgpl-latest.debug.bin (1.13):
+
+ - added missing VBE function dispi_get_bank() - added missing
+ return codes for VBE function 4F05h - memory size is always
+ reported in VBE function 4F00h - fixed scan line length for VBE
+ mode 0102h - fixed function set_active_page() for graphics modes
+ - fixed the page sizes of some VGA modes
+
+2003-04-26 09:22 vruppert
+
+ * vbe.c (1.28), vbetables.h (1.16), vgabios.c (1.29), vgatables.h
+ (1.4), VGABIOS-lgpl-latest.bin (1.13):
+
+ - added missing VBE function dispi_get_bank() - added missing
+ return codes for VBE function 4F05h - memory size is always
+ reported in VBE function 4F00h - fixed scan line length for VBE
+ mode 0102h - fixed function set_active_page() for graphics modes
+ - fixed the page sizes of some VGA modes
+
+2003-04-20 09:51 vruppert
+
+ * vgabios.c (1.28), vgatables.h (1.3), VGABIOS-lgpl-latest.bin
+ (1.12), VGABIOS-lgpl-latest.debug.bin (1.12):
+
+ - function write_gfx_char() now supports different font sizes -
+ some entries of the static functionality table fixed
+
+2003-04-18 09:23 vruppert
+
+ * vbe.c (1.27), vbe.h (1.14), vbetables.h (1.15):
+
+ - applied patch #1331 * new function dispi_set_bank_farcall()
+ * VBE mode info item WinFuncPtr points to the new function if the
+ flag VBE_WINDOW_ATTRIBUTE_RELOCATABLE is set * flag
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE added
+
+2003-02-11 20:17 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.11), VGABIOS-lgpl-latest.debug.bin
+ (1.11), vbe.c (1.26), vbetables.h (1.14):
+
+ - VBE mode search rewritten * improved function
+ mode_info_find_mode() is now used by the VBE functions 0x4F01
+ and 0x4F02 * removed all mode list entries with the LFB bit
+ set. LFB detection is now present in the function
+ mode_info_find_mode()
+
+2003-02-09 20:59 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.10), VGABIOS-lgpl-latest.debug.bin
+ (1.10), vgabios.c (1.27):
+
+ - function write_gfx_char(): memory address now calculated in
+ this function; background color is always black - function
+ biosfn_write_char_attr(): the count parameter is now used in
+ graphics modes too - function biosfn_write_char_only() works
+ the same way as function biosfn_write_char_attr() in graphics
+ mode - copying charmap data optimized using memcpyb()
+
+2003-02-09 11:36 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.9), VGABIOS-lgpl-latest.debug.bin
+ (1.9):
+
+ - VESA mode 0x102 added (uses existing SVGA mode 0x6a) - all VESA
+ modes with the LFB flag set removed from the list (Linux doesn't
+ like mode numbers > 0x07ff)
+
+2003-02-09 11:02 vruppert
+
+ * vbe.c (1.25), vbe.h (1.13), vbetables.h (1.13):
+
+ - VESA mode 0x102 added (uses existing SVGA mode 0x6a) - all VESA
+ modes with the LFB flag set removed from the list (Linux doesn't
+ like mode numbers > 0x07ff)
+
+2003-02-08 13:04 vruppert
+
+ * vbe.c (1.24), vgabios.c (1.26):
+
+ - vbe_biosfn_return_current_mode() now returns the active
+ standard VGA mode TODO: return VESA mode if enabled -
+ biosfn_set_video_mode() now clears the screen in CGA mode
+ correctly - write character functions are now working in all
+ PLANAR4 graphics modes - added stubs for unimplemented features
+ in graphics modes
+
+2003-02-04 22:19 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.8), VGABIOS-lgpl-latest.debug.bin
+ (1.8):
+
+ - set video mode: clear vga memory in graphics mode - set video
+ mode: load default font in text mode - write character
+ implemented for graphics mode 0x12
+
+2003-02-04 22:06 vruppert
+
+ * vgabios.c (1.25):
+
+ - set video mode: clear vga memory in graphics mode - set video
+ mode: load default font in text mode - write character
+ implemented for graphics mode 0x12
+
+2003-01-21 19:30 vruppert
+
+ * vgabios.c (1.24):
+
+ - remap the cursor size if the char height is > 8 and the new
+ values are < 8
+
+2003-01-20 18:24 cbothamy
+
+ * Makefile (1.9):
+
+ - fix so make -j2 does not overwrite temp files
+
+2003-01-19 12:35 vruppert
+
+ * vgabios.c (1.23):
+
+ - function set_scan_lines() recalculates the number of rows and
+ the page size - new values for char height, text rows and page
+ size are stored in the BIOS data segment - asm helper function
+ idiv_u added
+
+2003-01-15 18:49 cbothamy
+
+ * VGABIOS-lgpl-latest.bin (1.7), VGABIOS-lgpl-latest.debug.bin
+ (1.7):
+
+ - compile vgabios rev 1.22
+
+2003-01-15 18:49 cbothamy
+
+ * vgabios.c (1.22):
+
+ - fix bug found by ams : a 8bits index value was compared to
+ 0x100 in some cases in biosfn_set_all_dac_reg,
+ biosfn_read_all_dac_reg, biosfn_perform_gray_scale_summing
+
+2003-01-15 17:34 cbothamy
+
+ * Makefile (1.8):
+
+ - fix symbol table file names, discovered by ams
+
+2003-01-04 21:20 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.6), VGABIOS-lgpl-latest.debug.bin
+ (1.6), vgabios.c (1.21):
+
+ - biosfn_set_video_mode(): reset attribute controller flip-flop
+ before setting up the controller's registers (bug found with
+ amidiag)
+
+2003-01-04 09:50 vruppert
+
+ * vbe.c (1.23):
+
+ - VBE function 0x00 returns VBE 1.x compatible information if no
+ VBE signature is present
+
+2003-01-01 12:44 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.5), VGABIOS-lgpl-latest.debug.bin
+ (1.5):
+
+ - SVGA mode 0x6A (800x600x4) added to the list of graphics modes
+
+2002-12-31 18:07 vruppert
+
+ * vgatables.h (1.2):
+
+ - SVGA mode 0x6A (800x600x4) added to the list of graphics modes
+
+2002-11-23 10:38 cbothamy
+
+ * ChangeLog (1.17, v0_3b):
+
+ - fix changelog for 0.3b release
+
+2002-10-20 17:12 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.4), VGABIOS-lgpl-latest.debug.bin
+ (1.4), vgabios.c (1.20) (utags: v0_3b):
+
+ - new function set_scan_lines() for the font size change (patch
+ from Hartmut Birr) - cursor shape start and end must be updated
+ in set_scan_lines() - set_scan_lines() is called by the functions
+ 0x1110, 0x1111, 0x1112 and 0x1114 after copying the font data
+
+2002-10-04 08:20 vruppert
+
+ * VGABIOS-lgpl-latest.bin (1.3), VGABIOS-lgpl-latest.debug.bin
+ (1.3), vgabios.c (1.19):
+
+ - biosfn_set_single_dac_reg(): the red value is stored in DH
+
+2002-09-19 19:05 cbothamy
+
+ * VGABIOS-lgpl-latest.bin (1.2), VGABIOS-lgpl-latest.debug.bin
+ (1.2):
+
+ - updated with latest changes
+
+2002-09-19 19:03 cbothamy
+
+ * ChangeLog (1.16), Makefile (1.7, v0_3b), vbe.c (1.22, v0_3b),
+ vgabios.c (1.18), vgabios.h (1.3, v0_4b, v0_4a, v0_3b):
+
+ - updated the Makefile - removed display of copyrights. -
+ changed the Copyright string to "LGPL VGABios developers"
+
+2002-09-08 21:14 vruppert
+
+ * vgabios.c (1.17):
+
+ - set the cursor shape depending on the current font height -
+ clear BL before calling int 0x10 function 0x1103 in
+ vgabios_init_func
+
+2002-08-23 22:58 cbothamy
+
+ * vbe.c (1.21), vbetables.h (1.12, v0_3b):
+
+ - added lfb-mode numbers (patch from mathis)
+
+2002-07-21 21:57 japj
+
+ * vbe.c (1.20), vgabios.c (1.16):
+
+ gcc2/3 preprocessing fix
+
+2002-05-18 16:55 cbothamy
+
+ * vgabios.c (1.15):
+
+ - include patch from Volker that adds some text font functions
+
+2002-05-01 23:13 japj
+
+ * VGABIOS-lgpl-latest.bin (1.1), VGABIOS-lgpl-latest.debug.bin
+ (1.1):
+
+ adding latest bin & debug bin of the vgabios
+
+2002-04-29 14:50 japj
+
+ * ChangeLog (1.15), vbe.c (1.19), vbe.h (1.12, v0_3b), vbetables.h
+ (1.11), vgabios.c (1.14):
+
+ - applying hw scrolling/multibuffering patch
+
+2002-04-25 21:59 japj
+
+ * Makefile (1.6), vbe.c (1.18), vgabios.c (1.13):
+
+ - reverting #asm/##asm & endasm patch (does not work with with
+ cygwin)
+
+2002-04-19 19:38 japj
+
+ * Makefile (1.5), vbe.c (1.17), vgabios.c (1.12):
+
+ - fixing preprocessing of vgabios with latest gcc (from Mandrake
+ 8.2)
+
+2002-04-08 23:44 japj
+
+ * ChangeLog (1.14), vbe_display_api.txt (1.5, v0_3b):
+
+ - preparing docs for new DISPI interface (for hardware scrolling)
+
+2002-04-03 19:06 japj
+
+ * ChangeLog (1.13), TODO (1.9, v0_4b, v0_4a, v0_3b), vbe.c (1.16):
+
+ - defaulting LFB on + updated changelog & todo
+
+2002-04-03 00:38 cbothamy
+
+ * vbe.c (1.15), vgabios.c (1.11):
+
+ - changed the logging ports to 0x500 -> 0x502
+
+2002-03-14 17:54 japj
+
+ * vbe.c (1.14):
+
+ - vbetables.h is dependant upon some defines (VBE_HAVE_LFB), so
+ put the include *after* the define
+
+2002-03-13 21:47 japj
+
+ * ChangeLog (1.12), TODO (1.8), vbe.c (1.13), vbetables.h (1.10),
+ vgabios.c (1.10):
+
+ - made LFB dependant upon define - not implement vbe functions
+ return failure - updated todo & docs for things after bochs 1.4
+
+2002-03-13 19:46 japj
+
+ * vbe.h (1.11), vbe_display_api.txt (1.4):
+
+ - added max video memory + documented what is in the 0xb0c0
+ interface
+
+2002-03-12 02:33 cbothamy
+
+ * ChangeLog (1.11), Makefile (1.4):
+
+ - updated for 0.3a. Merged vgabios.bin and vbebios.bin
+
+2002-03-10 21:36 japj
+
+ * ChangeLog (1.10), vbetables.h (1.9):
+
+ - added LFB modes for testing with vbe-lfb patch in Bochs
+
+2002-03-10 17:42 japj
+
+ * vbe.c (1.12, v0_3a):
+
+ - show people when they do NOT have VBE support available
+
+2002-03-10 17:36 japj
+
+ * TODO (1.7, v0_3a), vbe.c (1.11), vbe.h (1.10, v0_3a), vgabios.c
+ (1.9, v0_3a):
+
+ - cleanup of vbe internal functions (set 8bpp mode is now
+ dependant on ModeInfo content instead of hardcoded functions)
+
+2002-03-10 17:20 cbothamy
+
+ * ChangeLog (1.9, v0_3a), TODO (1.6):
+
+ - updated for 0.3a
+
+2002-03-10 17:19 cbothamy
+
+ * vbe.c (1.10), vbe.h (1.9):
+
+ - added vbe_has_vbe_display function that detects an attached vbe
+ display
+
+2002-03-10 17:12 cbothamy
+
+ * vgabios.c (1.8):
+
+ - vbe calls are done only if a vbe display is detected
+
+2002-03-10 11:25 japj
+
+ * vbe.h (1.8), vbe_display_api.txt (1.3, v0_3a):
+
+ - preparing for LFB support
+
+2002-03-09 14:25 japj
+
+ * vgabios.c (1.7):
+
+ - fixing initial cursor shape to _ instead of -
+
+2002-03-08 23:08 japj
+
+ * ChangeLog (1.8), TODO (1.5), vbe.c (1.9), vbe.h (1.7), vgabios.c
+ (1.6):
+
+ - updating vbe code to new API
+
+2002-03-08 21:48 japj
+
+ * vbe.c (1.8), vbe.h (1.6), vbetables.h (1.8, v0_3a):
+
+ - updating vbe code with #defines from API
+
+2002-03-08 21:31 japj
+
+ * vbe_display_api.txt (1.2):
+
+ - adding some text about how banks work
+
+2002-03-08 21:09 japj
+
+ * ChangeLog (1.7), vbe_display_api.txt (1.1):
+
+ - adding vbe_display_api documentation
+
+2002-03-07 21:36 japj
+
+ * ChangeLog (1.6), vbe.c (1.7), vbetables.h (1.7):
+
+ - added 1024x768xbpp support - some more cleanups/comments
+
+2002-03-06 21:55 japj
+
+ * ChangeLog (1.5), TODO (1.4), vbe.c (1.6), vbetables.h (1.6),
+ vgabios.c (1.5):
+
+ - updated changelog with new modi - added 640x480x8 (Mandrake
+ Installer can use this!) - added pre VBE2 compatible 'detection'
+ - fixed problem when normal vga set mode wouldn't disable vbe
+ mode
+
+2002-03-06 20:59 japj
+
+ * TODO (1.3), vbe.c (1.5), vbe.h (1.5), vbetables.h (1.5),
+ vgabios.c (1.4):
+
+ - adding 640x400x8 and 800x600x8 vbe support (this depends
+ HEAVILY on my bochs vga code patch - japj)
+
+2002-03-06 18:00 japj
+
+ * vbe.c (1.4), vbe.h (1.4), vbetables.h (1.4):
+
+ - implemented banked & lfb support for 320x200x8bpp (some fixes
+ for vbetest program not displaying anything)
+
+2002-03-05 20:25 japj
+
+ * Makefile (1.3, v0_3a):
+
+ for vbe debug bios: - print debugging information in assembly
+ output - print source code in assembly output
+
+2002-03-01 19:39 japj
+
+ * ChangeLog (1.4), TODO (1.2), vbe.c (1.3), vbe.h (1.3),
+ vbetables.h (1.3):
+
+ - added vbe support for 320x200x8 using the standard vgamode
+ (0x13)
+
+2002-02-19 00:29 japj
+
+ * ChangeLog (1.3):
+
+ - updating ChangeLog with lfbprof
+
+2002-02-18 23:26 japj
+
+ * tests/lfbprof/: lfbprof.c (1.2), lfbprof.h (1.2) (utags: v0_3a,
+ v0_3b, v0_4a, v0_4b):
+
+ - fixed unsigned short for mode list (-1 != 0xffff otherwise) -
+ fixed LfbMapRealPointer macro mask problem (some modes were
+ skipped) - added some extra 'debugging' printf's
+
+2002-02-18 23:07 japj
+
+ * tests/lfbprof/: Makefile (1.1, v0_4b, v0_4a, v0_3b, v0_3a),
+ lfbprof.c (1.1), lfbprof.h (1.1):
+
+ - Adding lfbprof testprogram (for vbe testing purposes) It
+ needs to be compiled with the Watcom C Compiler
+
+2002-02-18 18:48 japj
+
+ * vbe.c (1.2), vbe.h (1.2):
+
+ - cosmetic updates to vbe.c/h + added bunch of FIXMEs for work
+ that needs to be done
+
+2002-02-18 18:34 japj
+
+ * vbetables.h (1.2):
+
+ - cosmetic updates in vbetables.h
+
+2002-02-18 18:32 japj
+
+ * ChangeLog (1.2):
+
+ updated changelog with merge of vbebios 0.2
+
+2002-02-18 18:07 japj
+
+ * vgabios.c (1.3):
+
+ - small cosmetic cleanup in vgabios vbe code + added FIXMEs
+
+2002-02-18 17:55 japj
+
+ * Makefile (1.2), dataseghack (1.2, v0_4b, v0_4a, v0_3b, v0_3a),
+ vbe.c (1.1), vbe.h (1.1), vbetables.h (1.1), vgabios.c (1.2),
+ vgabios.h (1.2, v0_3a):
+
+ - merging with vbebios 0.2 release
+
+2002-02-18 11:31 cbothamy
+
+ * BUGS (1.1, v0_4b, v0_4a, v0_3b, v0_3a), COPYING (1.1, v0_4b,
+ v0_4a, v0_3b, v0_3a), ChangeLog (1.1), Makefile (1.1), Notes
+ (1.1, v0_4b, v0_4a, v0_3b, v0_3a), README (1.1, v0_3b, v0_3a),
+ TODO (1.1), dataseghack (1.1), vgabios.c (1.1), vgabios.h (1.1),
+ vgafonts.h (1.1, v0_4b, v0_4a, v0_3b, v0_3a), vgatables.h (1.1,
+ v0_3b, v0_3a), tests/testbios.c (1.1, v0_4b, v0_4a, v0_3b,
+ v0_3a):
+
+ - initial import
+
diff --git a/src/VBox/Devices/Graphics/BIOS/Makefile.kmk b/src/VBox/Devices/Graphics/BIOS/Makefile.kmk
new file mode 100644
index 00000000..460e6c37
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/Makefile.kmk
@@ -0,0 +1,201 @@
+# $Id: Makefile.kmk $
+## @file
+# Sub-Makefile for the New VGA BIOS ROM.
+#
+
+#
+# Copyright (C) 2012-2022 Oracle and/or its affiliates.
+#
+# This file is part of VirtualBox base platform packages, as
+# available from https://www.virtualbox.org.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation, in version 3 of the
+# License.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses>.
+#
+# SPDX-License-Identifier: GPL-3.0-only
+#
+
+SUB_DEPTH = ../../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+
+ifdef VBOX_WITH_OPEN_WATCOM
+
+ #
+ # VBoxVgaBios - The VGA BIOS.
+ #
+ MISCBINS += VBoxVgaBios386
+ VBoxVgaBios386_TEMPLATE = VBoxBios
+ VBoxVgaBios386_ASFLAGS = -0
+ VBoxVgaBios386_CFLAGS = -3
+ VBoxVgaBios386_DEFS = VBE VBOX_BIOS_CPU=80386
+ VBoxVgaBios386_INCS = $(VBOX_GRAPHICS_INCS)
+ VBoxVgaBios386_SOURCES = \
+ vgarom.asm \
+ vberom.asm \
+ vgabios.c \
+ vbe.c
+ VBoxVgaBios386_LDFLAGS = \
+ output raw offset=0xC0000 \
+ order \
+ clname CODE \
+ segment VGAROM segaddr=0xC000 \
+ segment _TEXT segaddr=0xC000 offset=0x9F0 \
+ segment VBE32 segaddr=0xC000 offset=0x4640 \
+ clname DATA \
+ segment _DATA segaddr=0xC000 offset=0x4780 \
+
+ MISCBINS += VBoxVgaBios286
+ VBoxVgaBios286_EXTENDS = VBoxVgaBios386
+ VBoxVgaBios286_CFLAGS = -2
+ VBoxVgaBios286_DEFS = $(filter-out VBOX_BIOS_CPU=80386,$(VBoxVgaBios386_DEFS)) VBOX_BIOS_CPU=80286
+
+ MISCBINS += VBoxVgaBios8086
+ VBoxVgaBios8086_EXTENDS = VBoxVgaBios386
+ VBoxVgaBios8086_CFLAGS = -0
+ VBoxVgaBios8086_DEFS = $(filter-out VBOX_BIOS_CPU=80386,$(VBoxVgaBios386_DEFS)) VBOX_BIOS_CPU=8086
+
+ #
+ # Updates the alternative source file.
+ #
+ define def_VBoxVgaBiosUpdateAltSource
+ $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).asm +| $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).md5sum: \
+ $$$$(VBoxVgaBios$(1)_1_TARGET) \
+ $$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
+ $$(VBOX_VBOXCMP)
+ if1of ($$(KBUILD_TYPE), release)
+ $$(VBOX_MAKE_ALTERNATIVE_SOURCE) \
+ --bios-image $$< \
+ --bios-map $$(basename $$<).map \
+ --bios-sym $$(basename $$<).sym \
+ --bios-type vga \
+ --output $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm
+ $$(QUIET)$$(TOOL_YASM_AS) -f bin \
+ -o $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).bin \
+ -l $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).lst \
+ $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm
+ $$(VBOX_VBOXCMP) $$< $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).bin
+ $$(CP) --changed -- $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm $$(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative$(1).asm
+ $$(REDIRECT) -C $$(dir $$(VBoxVgaBios$(1)_1_TARGET)) -- \
+ $$(MD5SUM_EXT) -bo $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).md5sum $$(notdir $$(VBoxVgaBios$(1)_1_TARGET))
+ $$(CP) --changed -- $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).md5sum $$(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative$(1).md5sum
+ $$(RM) -f -- $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).asm \
+ $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).bin \
+ $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).lst \
+ $$(VBoxVgaBios$(1)_0_OUTDIR)/VBoxVgaBiosAlternative$(1).md5sum
+ else
+ $$(QUIET)$$(ECHO) "Fatal error: Can only update VBoxVgaBiosAlternative$(1).asm/md5sum with a release build."
+ $$(QUIET)exit 1
+ endif
+ endef
+
+ $(evalcall2 def_VBoxVgaBiosUpdateAltSource,386)
+ $(evalcall2 def_VBoxVgaBiosUpdateAltSource,286)
+ $(evalcall2 def_VBoxVgaBiosUpdateAltSource,8086)
+
+ update-vgabios-source: \
+ $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative386.asm \
+ $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative286.asm \
+ $(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative8086.asm
+
+endif # VBOX_WITH_OPEN_WATCOM
+
+
+#
+# The library containing the VGA BIOS image.
+#
+LIBRARIES += VgaBiosBin
+VgaBiosBin_TEMPLATE = VBOXR3
+VgaBiosBin_DEFS = IN_VBOXDD2
+VgaBiosBin_SOURCES =
+VgaBiosBin_DEPS = $(VgaBiosBin_0_OUTDIR)/vbetables.h
+VgaBiosBin_CLEAN = $(VgaBiosBin_0_OUTDIR)/vbetables.h
+
+define def_VBoxVgaBiosBin
+ VgaBiosBin_SOURCES += $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c
+ VgaBiosBin_CLEAN += $$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c
+ ifdef VBOX_WITH_OPEN_WATCOM
+ $$$$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c: $$$$(VBoxVgaBios$(1)_1_TARGET) $$(VBOX_BIN2C) | $$$$(dir $$$$@)
+ $$(call MSG_TOOL,bin2c,VgaBiosBin,$$<,$$@)
+ $$(QUIET)$$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary$(1) $$< $$@
+ else
+ VgaBiosBin_CLEAN += $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom
+
+ $$$$(VgaBiosBin_0_OUTDIR)/VgaBiosBin$(1).c + $$$$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom: \
+ $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).asm \
+ $$(PATH_SUB_CURRENT)/VBoxVgaBiosAlternative$(1).md5sum \
+ $$(VBOX_BIN2C) | $$$$(dir $$$$@)
+ $$(call MSG_TOOL,bin2c,VgaBiosBin,$$<,$$@)
+ $$(QUIET)$$(TOOL_YASM_AS) -f bin -o $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom $$<
+ $$(QUIET)$$(REDIRECT) -C $$(VgaBiosBin_0_OUTDIR) -- \
+ $$(MD5SUM_EXT) -c $$(basename $$<).md5sum
+ $$(QUIET)$$(VBOX_BIN2C) -min 32 -max 36 -mask 0x0fff -ascii -export VgaBiosBinary$(1) $$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom $$@
+ $$(QUIET)$$(RM) -f -- $$$$(VgaBiosBin_0_OUTDIR)/VBoxVgaBios$(1).rom
+ endif
+endef
+$(evalcall2 def_VBoxVgaBiosBin,386)
+$(evalcall2 def_VBoxVgaBiosBin,286)
+$(evalcall2 def_VBoxVgaBiosBin,8086)
+
+
+# Rule for making the vbetables.h that DevVGA uses.
+$$(VgaBiosBin_0_OUTDIR)/vbetables.h: $(MAKEFILE_CURRENT) $$(vbetables-gen_1_TARGET) | $$(dir $$@)
+ $(QUIET)$(REDIRECT) -wo $@ -- $(vbetables-gen_1_TARGET)
+
+
+#
+# The VBE tables.
+#
+BLDPROGS += vbetables-gen
+vbetables-gen_TEMPLATE = VBoxBldProg
+vbetables-gen_SOURCES = vbetables-gen.c
+vbetables-gen_CLEAN = $(vbetables-gen)
+
+
+#
+# The VGA BIOS Logo.
+#
+LIBRARIES += VgaDefBiosLogo
+VgaDefBiosLogo_TEMPLATE = VBOXR3
+VgaDefBiosLogo_INCS = $(VBOX_PATH_DEVICES_SRC)
+VgaDefBiosLogo_SOURCES = $(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogo.c
+VgaDefBiosLogo_CLEAN = $(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogo.c
+ifndef VBOX_OSE
+VgaDefBiosLogo_SOURCES += $(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogoNY.c
+VgaDefBiosLogo_CLEAN += $(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogoNY.c
+endif
+
+# Rule for making the bios logo.
+$$(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogo.c: $(VBOX_BRAND_BIOS_LOGO) $(VBOX_BIN2C) | $$(dir $$@)
+ $(call MSG_TOOL,bin2c,VgaDefBiosLogo,$<,$@)
+ $(QUIET)$(VBOX_BIN2C) VgaDefBiosLogo $< $@
+
+# Rule for making the bios logo.
+$$(VgaDefBiosLogo_0_OUTDIR)/VgaDefBiosLogoNY.c: $(PATH_ROOT)/src/VBox/Devices/Graphics/BIOS/puel_logo_ny.bmp $(VBOX_BIN2C) | $$(dir $$@)
+ $(call MSG_TOOL,bin2c,VgaDefBiosLogoNY,$<,$@)
+ $(QUIET)$(VBOX_BIN2C) VgaDefBiosLogoNY $< $@
+
+
+ifdef VBOX_WITH_OPEN_WATCOM
+ #
+ # Install the symbol file for the BIOS.
+ #
+ INSTALLS += VBoxVgaBiosSym
+ VBoxVgaBiosSym_TEMPLATE = VBoxDbgSyms
+ VBoxVgaBiosSym_SOURCES = \
+ $(basename $(VBoxVgaBios386_1_TARGET)).sym \
+ $(basename $(VBoxVgaBios286_1_TARGET)).sym \
+ $(basename $(VBoxVgaBios8086_1_TARGET)).sym
+endif
+
+include $(FILE_KBUILD_SUB_FOOTER)
diff --git a/src/VBox/Devices/Graphics/BIOS/README b/src/VBox/Devices/Graphics/BIOS/README
new file mode 100644
index 00000000..3b585e66
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/README
@@ -0,0 +1,214 @@
+Plex86/Bochs VGABios
+--------------------
+
+The goal of this project is to have a LGPL'd Video Bios in plex86,
+Bochs and qemu.
+This VGA Bios is very specific to the emulated VGA card.
+It is NOT meant to drive a physical vga card.
+
+
+Cirrus SVGA extension
+---------------------
+
+The Cirrus SVGA extension is designed for the Cirrus emulation in Bochs and
+qemu. The initial patch for the Cirrus extension has been written by Makoto
+Suzuki (suzu).
+
+
+Install
+-------
+To compile the VGA Bios you will need :
+- gcc
+- bcc
+- as86
+- ld86
+
+Untar the archive, and type make. You should get a "VGABIOS-lgpl-latest.bin"
+file. Alternatively, you can use the binary file "VGABIOS-lgpl-latest.bin",
+i have compiled for you.
+
+Edit your plex86/bochs conf file, and modify the load-rom command in the
+VGA BIOS section, to point to the new vgabios image file.
+
+
+Debugging
+---------
+You can get a very basic debugging system: messages printed by the vgabios.
+You have to register the "unmapped" device driver in plex86 or bochs, and make
+sure it grabs port 0xfff0.
+
+Comment the #undef DEBUG at the beginning of vgabios.c.
+You can then use the "printf" function in the bios.
+
+
+Testing
+-------
+Look at the "testvga.c" file in the archive. This is a minimal Turbo C 2.0
+source file that calls a few int10 functions. Feel free to modify it to suit
+your needs.
+
+
+Copyright and License
+---------------------
+This program has been written by Christophe Bothamy
+It is protected by the GNU Lesser Public License, which you should
+have received a copy of along with this package.
+
+
+Reverse Engineering
+-------------------
+The VGA Bios has been written without reverse-engineering any existing Bios.
+
+
+Acknowledgment
+--------------
+The source code contains code ripped from rombios.c of plex86, written
+by Kevin Lawton <kevin2001@yahoo.com>
+
+The source code contains fonts from fntcol16.zip (c) by Joseph Gil avalable at :
+ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+These fonts are public domain
+
+The source code is based on information taken from :
+- Kevin Lawton's vga card emulation for bochs/plex86
+- Ralf Brown's interrupts list avalaible at
+ http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+- Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+- Michael Abrash's Graphics Programming Black Book
+- Francois Gervais' book "programmation des cartes graphiques cga-ega-vga"
+ edited by sybex
+- DOSEMU 1.0.1 source code for several tables values and formulas
+
+
+Feedback
+--------
+Please report any bugs, comments, patches for this VGA Bios to info@vruppert.de
+You can find the latest release at : http://www.nongnu.org/vgabios/
+For any information on bochs, visit the website http://bochs.sourceforge.net/
+For any information on qemu, visit the website http://fabrice.bellard.free.fr/qemu/
+
+
+History
+-------
+vgabios-0.6a : Aug 19 2006
+ - Volker
+ . added minimal support for the video parameter table (VPT)
+ . Cirrus SVGA now supports the "no clear" bit in Cirrus and VESA mode
+ . Bochs VBE protected mode interface improved
+ . save/restore video state support for Bochs VBE and standard VGA added
+ . generate vbetables.h dynamicly
+ . VBE video memory increased to 8 MB (VBE dispi ID changed to B0C4)
+ . lots of 4bpp VBE fixes (all 4bpp VBE modes now enabled)
+ . VGA compatible setup for VBE modes added
+
+vgabios-0.5d : Dec 29 2005
+ - Volker
+ . Bochs VBE protected mode interface added (based on a patch by malc@pulsesoft.com)
+ . biossums utility now supports VGABIOS sizes up to 64 kBytes
+ . VGA mode 0x11: all color planes must be enabled in this 2-color VGA mode
+
+vgabios-0.5c : Jul 07 2005
+ - Volker
+ . BIOS configuration word usually reports initial mode 80x25 color text
+ . vgabios function 0x0e (write teletype): linefeed (0x0a) only increments the
+ cursor row value
+
+vgabios-0.5b : May 24 2005
+ - Volker
+ . fixed return value for the default case in the VBE section (non-debug mode)
+ . removed unused stuff
+
+vgabios-0.5a : Mar 07 2005
+ - Volker
+ . Cirrus SVGA extension (initial patches from Makoto Suzuki, improvements
+ from Fabrice Bellard)
+ . vgabios image size is now exactly 32k with a checksum
+ . a lot of vgabios and vbe functions rewritten in assembler
+ . dynamicly generated VBE mode info list
+ . write character function for CGA and LINEAR8 modes
+ . read/write graphics pixel for some graphics modes
+ . text scroll feature for some graphics modes
+ . VBE 8-bit DAC support
+
+vgabios-0.4c : Nov 06 2003
+ - Christophe
+ . fix font problem on initial screen of NT4 Loader
+
+vgabios-0.4b : Nov 04 2003
+ - Volker
+ . fix offset of character tables
+ . optimizations of CRT controller accesses
+ . VBE i/o registers changed to 0x01CE/CF
+ (suggestion from Daniel Gimpelevich)
+ . "noclear" flag stored in BIOS area
+ . fix character height returned by get_font_info function
+
+vgabios-0.4a : Aug 17 2003
+ - Volker
+ . VBE mode search rewritten (VBE modes with LFB bit removed)
+ . many bugfixes and optimizations
+ . write character function implemented for graphics modes
+ . support for 15bpp, 16bpp, 24bpp and 32bpp VBE modes added
+ . SVGA mode 0x6A added
+ . VBE modes 0x102, 0x117, 0x118 and 0x142 (Bochs specific)
+
+vgabios-0.3b : Nov 23 2002
+ - Christophe
+ . added lfb-mode numbers (patch from mathis)
+ . updated the Makefile
+ . removed display of copyrights.
+ . changed the Copyright string to "LGPL VGABios developers"
+ - Volker
+ . set the cursor shape depending on the current font height
+ . clear BL before calling int 0x10 function 0x1103 in vgabios_init_func
+ . added some text font functions
+ - Jeroen
+ . Forced to new DISPI (0xb0c1) interface (requires latest bochs vbe code)
+ . Added multibuffering support
+ . Added new DISPI interface for: virt width, height, x offset, y offset
+ . Added LFB modes (to be used with the vbe-lfb patch in bochs)
+ see VBE_HAVE_LFB in vbe.c (currently default enabled)
+ . updated TODO & docs for changes after bochs 1.4
+
+vgabios-0.3a : Mar 10 2002
+ - Christophe
+ . Fixed bug in function ah=13
+ - Jeroen
+ . updated vbebios implementation to new api
+ . added vbe_display_api documentation
+ . added 640x400x8, 640x480x8, 800x600x8, 1024x768
+ (>640x480 needs a special bochs patch atm)
+ . added 320x200x8 vbe support (uses the standard 320x200x8 vga mode to
+ display, this allows for testing & having something on screen as well,
+ at least until bochs host side display is up & running)
+ . adding lfbprof (vbe) testprogram (+some small fixes to it)
+ . merging with vbebios 0.2
+
+vgabios-0.2b : Nov 19 2001
+ - Christophe
+ . Fixed bug in function ah=13
+
+vgabios-0.2a : Nov 09 2001
+ - Christophe
+ . Included bugfix from techt@pikeonline.net about grayscale summing
+ . Added the "IBM" string at org 0x1e as Bart Oldeman suggested
+ . Fixed DS and ES that where inverted in the int10 parameters list!
+ . The following have been implemented :
+ - function ax=1a00, ax=1a01, ah=1b
+ - function ax=1130
+ . Added debug messages for unimplemented/unknown functions
+ Must be compiled with DEBUG defined. The output is trapped
+ by the unknown-ioport driver of plex/bochs (port 0xfff0 is used)
+
+vgabios-0.1a : May 8 2001
+ - Christophe
+ . First release. The work has been focused only on text mode.
+ . The following have been implemented :
+ - inits
+ - int 10 handler
+ - functions ah=00, ah=01, ah=02, ah=03, ah=05, ah=06, ah=07, ah=08
+ ah=09, ah=0a, ah=0e, ah=0f, ax=1000, ax=1001, ax=1002, ax=1003
+ ax=1007, ax=1008, ax=1009, ax=1010, ax=1012, ax=1013, ax=1015
+ ax=1017, ax=1018, ax=1019, ax=101a, ax=101b, ah=12 bl=10,
+ ah=12 bl=30, ah=12 bl=31, ah=12 bl=32, ah=12 bl=33, ah=12 bl=34
+ ah=13
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
new file mode 100644
index 00000000..471e4105
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.asm
@@ -0,0 +1,9247 @@
+; $Id: VBoxVgaBiosAlternative286.asm $
+;; @file
+; Auto Generated source file. Do not edit.
+;
+
+;
+; Source file: vgarom.asm
+;
+; ============================================================================================
+;
+; Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; ============================================================================================
+;
+; This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+; You can NOT drive any physical vga card with it.
+;
+; ============================================================================================
+;
+
+;
+; Source file: vberom.asm
+;
+; ============================================================================================
+;
+; Copyright (C) 2002 Jeroen Janssen
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; ============================================================================================
+;
+; This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+; You can NOT drive any physical vga card with it.
+;
+; ============================================================================================
+;
+; This VBE Bios is based on information taken from :
+; - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;
+; ============================================================================================
+
+;
+; Source file: vgabios.c
+;
+; // ============================================================================================
+;
+; vgabios.c
+;
+; // ============================================================================================
+; //
+; // Copyright (C) 2001,2002 the LGPL VGABios developers Team
+; //
+; // This library is free software; you can redistribute it and/or
+; // modify it under the terms of the GNU Lesser General Public
+; // License as published by the Free Software Foundation; either
+; // version 2 of the License, or (at your option) any later version.
+; //
+; // This library is distributed in the hope that it will be useful,
+; // but WITHOUT ANY WARRANTY; without even the implied warranty of
+; // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; // Lesser General Public License for more details.
+; //
+; // You should have received a copy of the GNU Lesser General Public
+; // License along with this library; if not, write to the Free Software
+; // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+; //
+; // ============================================================================================
+; //
+; // This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+; // You can NOT drive any physical vga card with it.
+; //
+; // ============================================================================================
+; //
+; // This file contains code ripped from :
+; // - rombios.c of plex86
+; //
+; // This VGA Bios contains fonts from :
+; // - fntcol16.zip (c) by Joseph Gil avalable at :
+; // ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+; // These fonts are public domain
+; //
+; // This VGA Bios is based on information taken from :
+; // - Kevin Lawton's vga card emulation for bochs/plex86
+; // - Ralf Brown's interrupts list available at http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+; // - Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+; // - Michael Abrash's Graphics Programming Black Book
+; // - Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" edited by sybex
+; // - DOSEMU 1.0.1 source code for several tables values and formulas
+; //
+; // Thanks for patches, comments and ideas to :
+; // - techt@pikeonline.net
+; //
+; // ============================================================================================
+
+;
+; Source file: vbe.c
+;
+; // ============================================================================================
+; //
+; // Copyright (C) 2002 Jeroen Janssen
+; //
+; // This library is free software; you can redistribute it and/or
+; // modify it under the terms of the GNU Lesser General Public
+; // License as published by the Free Software Foundation; either
+; // version 2 of the License, or (at your option) any later version.
+; //
+; // This library is distributed in the hope that it will be useful,
+; // but WITHOUT ANY WARRANTY; without even the implied warranty of
+; // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; // Lesser General Public License for more details.
+; //
+; // You should have received a copy of the GNU Lesser General Public
+; // License along with this library; if not, write to the Free Software
+; // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+; //
+; // ============================================================================================
+; //
+; // This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+; // You can NOT drive any physical vga card with it.
+; //
+; // ============================================================================================
+; //
+; // This VBE Bios is based on information taken from :
+; // - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+; //
+; // ============================================================================================
+
+;
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+;
+
+
+
+
+
+section VGAROM progbits vstart=0x0 align=1 ; size=0x8fa class=CODE group=AUTO
+ ; disGetNextSymbol 0xc0000 LB 0x8fa -> off=0x28 cb=0000000000000548 uValue=00000000000c0028 'vgabios_int10_handler'
+ db 055h, 0aah, 040h, 0ebh, 01dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 049h, 042h
+ db 04dh, 000h, 00eh, 01fh, 0fch, 0e9h, 03dh, 00ah
+vgabios_int10_handler: ; 0xc0028 LB 0x548
+ pushfw ; 9c ; 0xc0028 vgarom.asm:91
+ cmp ah, 00fh ; 80 fc 0f ; 0xc0029 vgarom.asm:104
+ jne short 00034h ; 75 06 ; 0xc002c vgarom.asm:105
+ call 0017dh ; e8 4c 01 ; 0xc002e vgarom.asm:106
+ jmp near 000edh ; e9 b9 00 ; 0xc0031 vgarom.asm:107
+ cmp ah, 01ah ; 80 fc 1a ; 0xc0034 vgarom.asm:109
+ jne short 0003fh ; 75 06 ; 0xc0037 vgarom.asm:110
+ call 00532h ; e8 f6 04 ; 0xc0039 vgarom.asm:111
+ jmp near 000edh ; e9 ae 00 ; 0xc003c vgarom.asm:112
+ cmp ah, 00bh ; 80 fc 0b ; 0xc003f vgarom.asm:114
+ jne short 0004ah ; 75 06 ; 0xc0042 vgarom.asm:115
+ call 000efh ; e8 a8 00 ; 0xc0044 vgarom.asm:116
+ jmp near 000edh ; e9 a3 00 ; 0xc0047 vgarom.asm:117
+ cmp ax, 01103h ; 3d 03 11 ; 0xc004a vgarom.asm:119
+ jne short 00055h ; 75 06 ; 0xc004d vgarom.asm:120
+ call 00429h ; e8 d7 03 ; 0xc004f vgarom.asm:121
+ jmp near 000edh ; e9 98 00 ; 0xc0052 vgarom.asm:122
+ cmp ah, 012h ; 80 fc 12 ; 0xc0055 vgarom.asm:124
+ jne short 00097h ; 75 3d ; 0xc0058 vgarom.asm:125
+ cmp bl, 010h ; 80 fb 10 ; 0xc005a vgarom.asm:126
+ jne short 00065h ; 75 06 ; 0xc005d vgarom.asm:127
+ call 00436h ; e8 d4 03 ; 0xc005f vgarom.asm:128
+ jmp near 000edh ; e9 88 00 ; 0xc0062 vgarom.asm:129
+ cmp bl, 030h ; 80 fb 30 ; 0xc0065 vgarom.asm:131
+ jne short 0006fh ; 75 05 ; 0xc0068 vgarom.asm:132
+ call 00459h ; e8 ec 03 ; 0xc006a vgarom.asm:133
+ jmp short 000edh ; eb 7e ; 0xc006d vgarom.asm:134
+ cmp bl, 031h ; 80 fb 31 ; 0xc006f vgarom.asm:136
+ jne short 00079h ; 75 05 ; 0xc0072 vgarom.asm:137
+ call 004ach ; e8 35 04 ; 0xc0074 vgarom.asm:138
+ jmp short 000edh ; eb 74 ; 0xc0077 vgarom.asm:139
+ cmp bl, 032h ; 80 fb 32 ; 0xc0079 vgarom.asm:141
+ jne short 00083h ; 75 05 ; 0xc007c vgarom.asm:142
+ call 004ceh ; e8 4d 04 ; 0xc007e vgarom.asm:143
+ jmp short 000edh ; eb 6a ; 0xc0081 vgarom.asm:144
+ cmp bl, 033h ; 80 fb 33 ; 0xc0083 vgarom.asm:146
+ jne short 0008dh ; 75 05 ; 0xc0086 vgarom.asm:147
+ call 004ech ; e8 61 04 ; 0xc0088 vgarom.asm:148
+ jmp short 000edh ; eb 60 ; 0xc008b vgarom.asm:149
+ cmp bl, 034h ; 80 fb 34 ; 0xc008d vgarom.asm:151
+ jne short 000e1h ; 75 4f ; 0xc0090 vgarom.asm:152
+ call 00510h ; e8 7b 04 ; 0xc0092 vgarom.asm:153
+ jmp short 000edh ; eb 56 ; 0xc0095 vgarom.asm:154
+ cmp ax, 0101bh ; 3d 1b 10 ; 0xc0097 vgarom.asm:156
+ je short 000e1h ; 74 45 ; 0xc009a vgarom.asm:157
+ cmp ah, 010h ; 80 fc 10 ; 0xc009c vgarom.asm:158
+ jne short 000a6h ; 75 05 ; 0xc009f vgarom.asm:162
+ call 001a4h ; e8 00 01 ; 0xc00a1 vgarom.asm:164
+ jmp short 000edh ; eb 47 ; 0xc00a4 vgarom.asm:165
+ cmp ah, 04fh ; 80 fc 4f ; 0xc00a6 vgarom.asm:168
+ jne short 000e1h ; 75 36 ; 0xc00a9 vgarom.asm:169
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc00ab vgarom.asm:170
+ jne short 000b4h ; 75 05 ; 0xc00ad vgarom.asm:171
+ call 007d2h ; e8 20 07 ; 0xc00af vgarom.asm:172
+ jmp short 000edh ; eb 39 ; 0xc00b2 vgarom.asm:173
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc00b4 vgarom.asm:175
+ jne short 000bdh ; 75 05 ; 0xc00b6 vgarom.asm:176
+ call 007f7h ; e8 3c 07 ; 0xc00b8 vgarom.asm:177
+ jmp short 000edh ; eb 30 ; 0xc00bb vgarom.asm:178
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc00bd vgarom.asm:180
+ jne short 000c6h ; 75 05 ; 0xc00bf vgarom.asm:181
+ call 00824h ; e8 60 07 ; 0xc00c1 vgarom.asm:182
+ jmp short 000edh ; eb 27 ; 0xc00c4 vgarom.asm:183
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc00c6 vgarom.asm:185
+ jne short 000cfh ; 75 05 ; 0xc00c8 vgarom.asm:186
+ call 00858h ; e8 8b 07 ; 0xc00ca vgarom.asm:187
+ jmp short 000edh ; eb 1e ; 0xc00cd vgarom.asm:188
+ cmp AL, strict byte 009h ; 3c 09 ; 0xc00cf vgarom.asm:190
+ jne short 000d8h ; 75 05 ; 0xc00d1 vgarom.asm:191
+ call 0088fh ; e8 b9 07 ; 0xc00d3 vgarom.asm:192
+ jmp short 000edh ; eb 15 ; 0xc00d6 vgarom.asm:193
+ cmp AL, strict byte 00ah ; 3c 0a ; 0xc00d8 vgarom.asm:195
+ jne short 000e1h ; 75 05 ; 0xc00da vgarom.asm:196
+ call 008e6h ; e8 07 08 ; 0xc00dc vgarom.asm:197
+ jmp short 000edh ; eb 0c ; 0xc00df vgarom.asm:198
+ push ES ; 06 ; 0xc00e1 vgarom.asm:202
+ push DS ; 1e ; 0xc00e2 vgarom.asm:203
+ pushaw ; 60 ; 0xc00e3 vgarom.asm:107
+ push CS ; 0e ; 0xc00e4 vgarom.asm:207
+ pop DS ; 1f ; 0xc00e5 vgarom.asm:208
+ cld ; fc ; 0xc00e6 vgarom.asm:209
+ call 038d9h ; e8 ef 37 ; 0xc00e7 vgarom.asm:210
+ popaw ; 61 ; 0xc00ea vgarom.asm:124
+ pop DS ; 1f ; 0xc00eb vgarom.asm:213
+ pop ES ; 07 ; 0xc00ec vgarom.asm:214
+ popfw ; 9d ; 0xc00ed vgarom.asm:216
+ iret ; cf ; 0xc00ee vgarom.asm:217
+ cmp bh, 000h ; 80 ff 00 ; 0xc00ef vgarom.asm:222
+ je short 000fah ; 74 06 ; 0xc00f2 vgarom.asm:223
+ cmp bh, 001h ; 80 ff 01 ; 0xc00f4 vgarom.asm:224
+ je short 0014bh ; 74 52 ; 0xc00f7 vgarom.asm:225
+ retn ; c3 ; 0xc00f9 vgarom.asm:229
+ push ax ; 50 ; 0xc00fa vgarom.asm:231
+ push bx ; 53 ; 0xc00fb vgarom.asm:232
+ push cx ; 51 ; 0xc00fc vgarom.asm:233
+ push dx ; 52 ; 0xc00fd vgarom.asm:234
+ push DS ; 1e ; 0xc00fe vgarom.asm:235
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc00ff vgarom.asm:236
+ mov ds, dx ; 8e da ; 0xc0102 vgarom.asm:237
+ mov dx, 003dah ; ba da 03 ; 0xc0104 vgarom.asm:238
+ in AL, DX ; ec ; 0xc0107 vgarom.asm:239
+ cmp byte [word 00049h], 003h ; 80 3e 49 00 03 ; 0xc0108 vgarom.asm:240
+ jbe short 0013eh ; 76 2f ; 0xc010d vgarom.asm:241
+ mov dx, 003c0h ; ba c0 03 ; 0xc010f vgarom.asm:242
+ mov AL, strict byte 000h ; b0 00 ; 0xc0112 vgarom.asm:243
+ out DX, AL ; ee ; 0xc0114 vgarom.asm:244
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0115 vgarom.asm:245
+ and AL, strict byte 00fh ; 24 0f ; 0xc0117 vgarom.asm:246
+ test AL, strict byte 008h ; a8 08 ; 0xc0119 vgarom.asm:247
+ je short 0011fh ; 74 02 ; 0xc011b vgarom.asm:248
+ add AL, strict byte 008h ; 04 08 ; 0xc011d vgarom.asm:249
+ out DX, AL ; ee ; 0xc011f vgarom.asm:251
+ mov CL, strict byte 001h ; b1 01 ; 0xc0120 vgarom.asm:252
+ and bl, 010h ; 80 e3 10 ; 0xc0122 vgarom.asm:253
+ mov dx, 003c0h ; ba c0 03 ; 0xc0125 vgarom.asm:255
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc0128 vgarom.asm:256
+ out DX, AL ; ee ; 0xc012a vgarom.asm:257
+ mov dx, 003c1h ; ba c1 03 ; 0xc012b vgarom.asm:258
+ in AL, DX ; ec ; 0xc012e vgarom.asm:259
+ and AL, strict byte 0efh ; 24 ef ; 0xc012f vgarom.asm:260
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc0131 vgarom.asm:261
+ mov dx, 003c0h ; ba c0 03 ; 0xc0133 vgarom.asm:262
+ out DX, AL ; ee ; 0xc0136 vgarom.asm:263
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc0137 vgarom.asm:264
+ cmp cl, 004h ; 80 f9 04 ; 0xc0139 vgarom.asm:265
+ jne short 00125h ; 75 e7 ; 0xc013c vgarom.asm:266
+ mov AL, strict byte 020h ; b0 20 ; 0xc013e vgarom.asm:268
+ out DX, AL ; ee ; 0xc0140 vgarom.asm:269
+ mov dx, 003dah ; ba da 03 ; 0xc0141 vgarom.asm:271
+ in AL, DX ; ec ; 0xc0144 vgarom.asm:272
+ pop DS ; 1f ; 0xc0145 vgarom.asm:274
+ pop dx ; 5a ; 0xc0146 vgarom.asm:275
+ pop cx ; 59 ; 0xc0147 vgarom.asm:276
+ pop bx ; 5b ; 0xc0148 vgarom.asm:277
+ pop ax ; 58 ; 0xc0149 vgarom.asm:278
+ retn ; c3 ; 0xc014a vgarom.asm:279
+ push ax ; 50 ; 0xc014b vgarom.asm:281
+ push bx ; 53 ; 0xc014c vgarom.asm:282
+ push cx ; 51 ; 0xc014d vgarom.asm:283
+ push dx ; 52 ; 0xc014e vgarom.asm:284
+ mov dx, 003dah ; ba da 03 ; 0xc014f vgarom.asm:285
+ in AL, DX ; ec ; 0xc0152 vgarom.asm:286
+ mov CL, strict byte 001h ; b1 01 ; 0xc0153 vgarom.asm:287
+ and bl, 001h ; 80 e3 01 ; 0xc0155 vgarom.asm:288
+ mov dx, 003c0h ; ba c0 03 ; 0xc0158 vgarom.asm:290
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc015b vgarom.asm:291
+ out DX, AL ; ee ; 0xc015d vgarom.asm:292
+ mov dx, 003c1h ; ba c1 03 ; 0xc015e vgarom.asm:293
+ in AL, DX ; ec ; 0xc0161 vgarom.asm:294
+ and AL, strict byte 0feh ; 24 fe ; 0xc0162 vgarom.asm:295
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc0164 vgarom.asm:296
+ mov dx, 003c0h ; ba c0 03 ; 0xc0166 vgarom.asm:297
+ out DX, AL ; ee ; 0xc0169 vgarom.asm:298
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc016a vgarom.asm:299
+ cmp cl, 004h ; 80 f9 04 ; 0xc016c vgarom.asm:300
+ jne short 00158h ; 75 e7 ; 0xc016f vgarom.asm:301
+ mov AL, strict byte 020h ; b0 20 ; 0xc0171 vgarom.asm:302
+ out DX, AL ; ee ; 0xc0173 vgarom.asm:303
+ mov dx, 003dah ; ba da 03 ; 0xc0174 vgarom.asm:305
+ in AL, DX ; ec ; 0xc0177 vgarom.asm:306
+ pop dx ; 5a ; 0xc0178 vgarom.asm:308
+ pop cx ; 59 ; 0xc0179 vgarom.asm:309
+ pop bx ; 5b ; 0xc017a vgarom.asm:310
+ pop ax ; 58 ; 0xc017b vgarom.asm:311
+ retn ; c3 ; 0xc017c vgarom.asm:312
+ push DS ; 1e ; 0xc017d vgarom.asm:317
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc017e vgarom.asm:318
+ mov ds, ax ; 8e d8 ; 0xc0181 vgarom.asm:319
+ push bx ; 53 ; 0xc0183 vgarom.asm:320
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc0184 vgarom.asm:321
+ mov al, byte [bx] ; 8a 07 ; 0xc0187 vgarom.asm:322
+ pop bx ; 5b ; 0xc0189 vgarom.asm:323
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc018a vgarom.asm:324
+ push bx ; 53 ; 0xc018c vgarom.asm:325
+ mov bx, 00087h ; bb 87 00 ; 0xc018d vgarom.asm:326
+ mov ah, byte [bx] ; 8a 27 ; 0xc0190 vgarom.asm:327
+ and ah, 080h ; 80 e4 80 ; 0xc0192 vgarom.asm:328
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0195 vgarom.asm:329
+ mov al, byte [bx] ; 8a 07 ; 0xc0198 vgarom.asm:330
+ db 00ah, 0c4h
+ ; or al, ah ; 0a c4 ; 0xc019a vgarom.asm:331
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc019c vgarom.asm:332
+ mov ah, byte [bx] ; 8a 27 ; 0xc019f vgarom.asm:333
+ pop bx ; 5b ; 0xc01a1 vgarom.asm:334
+ pop DS ; 1f ; 0xc01a2 vgarom.asm:335
+ retn ; c3 ; 0xc01a3 vgarom.asm:336
+ cmp AL, strict byte 000h ; 3c 00 ; 0xc01a4 vgarom.asm:341
+ jne short 001aah ; 75 02 ; 0xc01a6 vgarom.asm:342
+ jmp short 0020bh ; eb 61 ; 0xc01a8 vgarom.asm:343
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc01aa vgarom.asm:345
+ jne short 001b0h ; 75 02 ; 0xc01ac vgarom.asm:346
+ jmp short 00229h ; eb 79 ; 0xc01ae vgarom.asm:347
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc01b0 vgarom.asm:349
+ jne short 001b6h ; 75 02 ; 0xc01b2 vgarom.asm:350
+ jmp short 00231h ; eb 7b ; 0xc01b4 vgarom.asm:351
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc01b6 vgarom.asm:353
+ jne short 001bdh ; 75 03 ; 0xc01b8 vgarom.asm:354
+ jmp near 00262h ; e9 a5 00 ; 0xc01ba vgarom.asm:355
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc01bd vgarom.asm:357
+ jne short 001c4h ; 75 03 ; 0xc01bf vgarom.asm:358
+ jmp near 0028ch ; e9 c8 00 ; 0xc01c1 vgarom.asm:359
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc01c4 vgarom.asm:361
+ jne short 001cbh ; 75 03 ; 0xc01c6 vgarom.asm:362
+ jmp near 002b4h ; e9 e9 00 ; 0xc01c8 vgarom.asm:363
+ cmp AL, strict byte 009h ; 3c 09 ; 0xc01cb vgarom.asm:365
+ jne short 001d2h ; 75 03 ; 0xc01cd vgarom.asm:366
+ jmp near 002c2h ; e9 f0 00 ; 0xc01cf vgarom.asm:367
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc01d2 vgarom.asm:369
+ jne short 001d9h ; 75 03 ; 0xc01d4 vgarom.asm:370
+ jmp near 00307h ; e9 2e 01 ; 0xc01d6 vgarom.asm:371
+ cmp AL, strict byte 012h ; 3c 12 ; 0xc01d9 vgarom.asm:373
+ jne short 001e0h ; 75 03 ; 0xc01db vgarom.asm:374
+ jmp near 00320h ; e9 40 01 ; 0xc01dd vgarom.asm:375
+ cmp AL, strict byte 013h ; 3c 13 ; 0xc01e0 vgarom.asm:377
+ jne short 001e7h ; 75 03 ; 0xc01e2 vgarom.asm:378
+ jmp near 00348h ; e9 61 01 ; 0xc01e4 vgarom.asm:379
+ cmp AL, strict byte 015h ; 3c 15 ; 0xc01e7 vgarom.asm:381
+ jne short 001eeh ; 75 03 ; 0xc01e9 vgarom.asm:382
+ jmp near 0038fh ; e9 a1 01 ; 0xc01eb vgarom.asm:383
+ cmp AL, strict byte 017h ; 3c 17 ; 0xc01ee vgarom.asm:385
+ jne short 001f5h ; 75 03 ; 0xc01f0 vgarom.asm:386
+ jmp near 003aah ; e9 b5 01 ; 0xc01f2 vgarom.asm:387
+ cmp AL, strict byte 018h ; 3c 18 ; 0xc01f5 vgarom.asm:389
+ jne short 001fch ; 75 03 ; 0xc01f7 vgarom.asm:390
+ jmp near 003d2h ; e9 d6 01 ; 0xc01f9 vgarom.asm:391
+ cmp AL, strict byte 019h ; 3c 19 ; 0xc01fc vgarom.asm:393
+ jne short 00203h ; 75 03 ; 0xc01fe vgarom.asm:394
+ jmp near 003ddh ; e9 da 01 ; 0xc0200 vgarom.asm:395
+ cmp AL, strict byte 01ah ; 3c 1a ; 0xc0203 vgarom.asm:397
+ jne short 0020ah ; 75 03 ; 0xc0205 vgarom.asm:398
+ jmp near 003e8h ; e9 de 01 ; 0xc0207 vgarom.asm:399
+ retn ; c3 ; 0xc020a vgarom.asm:404
+ cmp bl, 014h ; 80 fb 14 ; 0xc020b vgarom.asm:407
+ jnbe short 00228h ; 77 18 ; 0xc020e vgarom.asm:408
+ push ax ; 50 ; 0xc0210 vgarom.asm:409
+ push dx ; 52 ; 0xc0211 vgarom.asm:410
+ mov dx, 003dah ; ba da 03 ; 0xc0212 vgarom.asm:411
+ in AL, DX ; ec ; 0xc0215 vgarom.asm:412
+ mov dx, 003c0h ; ba c0 03 ; 0xc0216 vgarom.asm:413
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0219 vgarom.asm:414
+ out DX, AL ; ee ; 0xc021b vgarom.asm:415
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc021c vgarom.asm:416
+ out DX, AL ; ee ; 0xc021e vgarom.asm:417
+ mov AL, strict byte 020h ; b0 20 ; 0xc021f vgarom.asm:418
+ out DX, AL ; ee ; 0xc0221 vgarom.asm:419
+ mov dx, 003dah ; ba da 03 ; 0xc0222 vgarom.asm:421
+ in AL, DX ; ec ; 0xc0225 vgarom.asm:422
+ pop dx ; 5a ; 0xc0226 vgarom.asm:424
+ pop ax ; 58 ; 0xc0227 vgarom.asm:425
+ retn ; c3 ; 0xc0228 vgarom.asm:427
+ push bx ; 53 ; 0xc0229 vgarom.asm:432
+ mov BL, strict byte 011h ; b3 11 ; 0xc022a vgarom.asm:433
+ call 0020bh ; e8 dc ff ; 0xc022c vgarom.asm:434
+ pop bx ; 5b ; 0xc022f vgarom.asm:435
+ retn ; c3 ; 0xc0230 vgarom.asm:436
+ push ax ; 50 ; 0xc0231 vgarom.asm:441
+ push bx ; 53 ; 0xc0232 vgarom.asm:442
+ push cx ; 51 ; 0xc0233 vgarom.asm:443
+ push dx ; 52 ; 0xc0234 vgarom.asm:444
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc0235 vgarom.asm:445
+ mov dx, 003dah ; ba da 03 ; 0xc0237 vgarom.asm:446
+ in AL, DX ; ec ; 0xc023a vgarom.asm:447
+ mov CL, strict byte 000h ; b1 00 ; 0xc023b vgarom.asm:448
+ mov dx, 003c0h ; ba c0 03 ; 0xc023d vgarom.asm:449
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc0240 vgarom.asm:451
+ out DX, AL ; ee ; 0xc0242 vgarom.asm:452
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0243 vgarom.asm:453
+ out DX, AL ; ee ; 0xc0246 vgarom.asm:454
+ inc bx ; 43 ; 0xc0247 vgarom.asm:455
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc0248 vgarom.asm:456
+ cmp cl, 010h ; 80 f9 10 ; 0xc024a vgarom.asm:457
+ jne short 00240h ; 75 f1 ; 0xc024d vgarom.asm:458
+ mov AL, strict byte 011h ; b0 11 ; 0xc024f vgarom.asm:459
+ out DX, AL ; ee ; 0xc0251 vgarom.asm:460
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0252 vgarom.asm:461
+ out DX, AL ; ee ; 0xc0255 vgarom.asm:462
+ mov AL, strict byte 020h ; b0 20 ; 0xc0256 vgarom.asm:463
+ out DX, AL ; ee ; 0xc0258 vgarom.asm:464
+ mov dx, 003dah ; ba da 03 ; 0xc0259 vgarom.asm:466
+ in AL, DX ; ec ; 0xc025c vgarom.asm:467
+ pop dx ; 5a ; 0xc025d vgarom.asm:469
+ pop cx ; 59 ; 0xc025e vgarom.asm:470
+ pop bx ; 5b ; 0xc025f vgarom.asm:471
+ pop ax ; 58 ; 0xc0260 vgarom.asm:472
+ retn ; c3 ; 0xc0261 vgarom.asm:473
+ push ax ; 50 ; 0xc0262 vgarom.asm:478
+ push bx ; 53 ; 0xc0263 vgarom.asm:479
+ push dx ; 52 ; 0xc0264 vgarom.asm:480
+ mov dx, 003dah ; ba da 03 ; 0xc0265 vgarom.asm:481
+ in AL, DX ; ec ; 0xc0268 vgarom.asm:482
+ mov dx, 003c0h ; ba c0 03 ; 0xc0269 vgarom.asm:483
+ mov AL, strict byte 010h ; b0 10 ; 0xc026c vgarom.asm:484
+ out DX, AL ; ee ; 0xc026e vgarom.asm:485
+ mov dx, 003c1h ; ba c1 03 ; 0xc026f vgarom.asm:486
+ in AL, DX ; ec ; 0xc0272 vgarom.asm:487
+ and AL, strict byte 0f7h ; 24 f7 ; 0xc0273 vgarom.asm:488
+ and bl, 001h ; 80 e3 01 ; 0xc0275 vgarom.asm:489
+ sal bl, 003h ; c0 e3 03 ; 0xc0278 vgarom.asm:491
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc027b vgarom.asm:497
+ mov dx, 003c0h ; ba c0 03 ; 0xc027d vgarom.asm:498
+ out DX, AL ; ee ; 0xc0280 vgarom.asm:499
+ mov AL, strict byte 020h ; b0 20 ; 0xc0281 vgarom.asm:500
+ out DX, AL ; ee ; 0xc0283 vgarom.asm:501
+ mov dx, 003dah ; ba da 03 ; 0xc0284 vgarom.asm:503
+ in AL, DX ; ec ; 0xc0287 vgarom.asm:504
+ pop dx ; 5a ; 0xc0288 vgarom.asm:506
+ pop bx ; 5b ; 0xc0289 vgarom.asm:507
+ pop ax ; 58 ; 0xc028a vgarom.asm:508
+ retn ; c3 ; 0xc028b vgarom.asm:509
+ cmp bl, 014h ; 80 fb 14 ; 0xc028c vgarom.asm:514
+ jnbe short 002b3h ; 77 22 ; 0xc028f vgarom.asm:515
+ push ax ; 50 ; 0xc0291 vgarom.asm:516
+ push dx ; 52 ; 0xc0292 vgarom.asm:517
+ mov dx, 003dah ; ba da 03 ; 0xc0293 vgarom.asm:518
+ in AL, DX ; ec ; 0xc0296 vgarom.asm:519
+ mov dx, 003c0h ; ba c0 03 ; 0xc0297 vgarom.asm:520
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc029a vgarom.asm:521
+ out DX, AL ; ee ; 0xc029c vgarom.asm:522
+ mov dx, 003c1h ; ba c1 03 ; 0xc029d vgarom.asm:523
+ in AL, DX ; ec ; 0xc02a0 vgarom.asm:524
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc02a1 vgarom.asm:525
+ mov dx, 003dah ; ba da 03 ; 0xc02a3 vgarom.asm:526
+ in AL, DX ; ec ; 0xc02a6 vgarom.asm:527
+ mov dx, 003c0h ; ba c0 03 ; 0xc02a7 vgarom.asm:528
+ mov AL, strict byte 020h ; b0 20 ; 0xc02aa vgarom.asm:529
+ out DX, AL ; ee ; 0xc02ac vgarom.asm:530
+ mov dx, 003dah ; ba da 03 ; 0xc02ad vgarom.asm:532
+ in AL, DX ; ec ; 0xc02b0 vgarom.asm:533
+ pop dx ; 5a ; 0xc02b1 vgarom.asm:535
+ pop ax ; 58 ; 0xc02b2 vgarom.asm:536
+ retn ; c3 ; 0xc02b3 vgarom.asm:538
+ push ax ; 50 ; 0xc02b4 vgarom.asm:543
+ push bx ; 53 ; 0xc02b5 vgarom.asm:544
+ mov BL, strict byte 011h ; b3 11 ; 0xc02b6 vgarom.asm:545
+ call 0028ch ; e8 d1 ff ; 0xc02b8 vgarom.asm:546
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc02bb vgarom.asm:547
+ pop bx ; 5b ; 0xc02bd vgarom.asm:548
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc02be vgarom.asm:549
+ pop ax ; 58 ; 0xc02c0 vgarom.asm:550
+ retn ; c3 ; 0xc02c1 vgarom.asm:551
+ push ax ; 50 ; 0xc02c2 vgarom.asm:556
+ push bx ; 53 ; 0xc02c3 vgarom.asm:557
+ push cx ; 51 ; 0xc02c4 vgarom.asm:558
+ push dx ; 52 ; 0xc02c5 vgarom.asm:559
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc02c6 vgarom.asm:560
+ mov CL, strict byte 000h ; b1 00 ; 0xc02c8 vgarom.asm:561
+ mov dx, 003dah ; ba da 03 ; 0xc02ca vgarom.asm:563
+ in AL, DX ; ec ; 0xc02cd vgarom.asm:564
+ mov dx, 003c0h ; ba c0 03 ; 0xc02ce vgarom.asm:565
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc02d1 vgarom.asm:566
+ out DX, AL ; ee ; 0xc02d3 vgarom.asm:567
+ mov dx, 003c1h ; ba c1 03 ; 0xc02d4 vgarom.asm:568
+ in AL, DX ; ec ; 0xc02d7 vgarom.asm:569
+ mov byte [es:bx], al ; 26 88 07 ; 0xc02d8 vgarom.asm:570
+ inc bx ; 43 ; 0xc02db vgarom.asm:571
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc02dc vgarom.asm:572
+ cmp cl, 010h ; 80 f9 10 ; 0xc02de vgarom.asm:573
+ jne short 002cah ; 75 e7 ; 0xc02e1 vgarom.asm:574
+ mov dx, 003dah ; ba da 03 ; 0xc02e3 vgarom.asm:575
+ in AL, DX ; ec ; 0xc02e6 vgarom.asm:576
+ mov dx, 003c0h ; ba c0 03 ; 0xc02e7 vgarom.asm:577
+ mov AL, strict byte 011h ; b0 11 ; 0xc02ea vgarom.asm:578
+ out DX, AL ; ee ; 0xc02ec vgarom.asm:579
+ mov dx, 003c1h ; ba c1 03 ; 0xc02ed vgarom.asm:580
+ in AL, DX ; ec ; 0xc02f0 vgarom.asm:581
+ mov byte [es:bx], al ; 26 88 07 ; 0xc02f1 vgarom.asm:582
+ mov dx, 003dah ; ba da 03 ; 0xc02f4 vgarom.asm:583
+ in AL, DX ; ec ; 0xc02f7 vgarom.asm:584
+ mov dx, 003c0h ; ba c0 03 ; 0xc02f8 vgarom.asm:585
+ mov AL, strict byte 020h ; b0 20 ; 0xc02fb vgarom.asm:586
+ out DX, AL ; ee ; 0xc02fd vgarom.asm:587
+ mov dx, 003dah ; ba da 03 ; 0xc02fe vgarom.asm:589
+ in AL, DX ; ec ; 0xc0301 vgarom.asm:590
+ pop dx ; 5a ; 0xc0302 vgarom.asm:592
+ pop cx ; 59 ; 0xc0303 vgarom.asm:593
+ pop bx ; 5b ; 0xc0304 vgarom.asm:594
+ pop ax ; 58 ; 0xc0305 vgarom.asm:595
+ retn ; c3 ; 0xc0306 vgarom.asm:596
+ push ax ; 50 ; 0xc0307 vgarom.asm:601
+ push dx ; 52 ; 0xc0308 vgarom.asm:602
+ mov dx, 003c8h ; ba c8 03 ; 0xc0309 vgarom.asm:603
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc030c vgarom.asm:604
+ out DX, AL ; ee ; 0xc030e vgarom.asm:605
+ mov dx, 003c9h ; ba c9 03 ; 0xc030f vgarom.asm:606
+ pop ax ; 58 ; 0xc0312 vgarom.asm:607
+ push ax ; 50 ; 0xc0313 vgarom.asm:608
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc0314 vgarom.asm:609
+ out DX, AL ; ee ; 0xc0316 vgarom.asm:610
+ db 08ah, 0c5h
+ ; mov al, ch ; 8a c5 ; 0xc0317 vgarom.asm:611
+ out DX, AL ; ee ; 0xc0319 vgarom.asm:612
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc031a vgarom.asm:613
+ out DX, AL ; ee ; 0xc031c vgarom.asm:614
+ pop dx ; 5a ; 0xc031d vgarom.asm:615
+ pop ax ; 58 ; 0xc031e vgarom.asm:616
+ retn ; c3 ; 0xc031f vgarom.asm:617
+ push ax ; 50 ; 0xc0320 vgarom.asm:622
+ push bx ; 53 ; 0xc0321 vgarom.asm:623
+ push cx ; 51 ; 0xc0322 vgarom.asm:624
+ push dx ; 52 ; 0xc0323 vgarom.asm:625
+ mov dx, 003c8h ; ba c8 03 ; 0xc0324 vgarom.asm:626
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0327 vgarom.asm:627
+ out DX, AL ; ee ; 0xc0329 vgarom.asm:628
+ pop dx ; 5a ; 0xc032a vgarom.asm:629
+ push dx ; 52 ; 0xc032b vgarom.asm:630
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc032c vgarom.asm:631
+ mov dx, 003c9h ; ba c9 03 ; 0xc032e vgarom.asm:632
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0331 vgarom.asm:634
+ out DX, AL ; ee ; 0xc0334 vgarom.asm:635
+ inc bx ; 43 ; 0xc0335 vgarom.asm:636
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0336 vgarom.asm:637
+ out DX, AL ; ee ; 0xc0339 vgarom.asm:638
+ inc bx ; 43 ; 0xc033a vgarom.asm:639
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc033b vgarom.asm:640
+ out DX, AL ; ee ; 0xc033e vgarom.asm:641
+ inc bx ; 43 ; 0xc033f vgarom.asm:642
+ dec cx ; 49 ; 0xc0340 vgarom.asm:643
+ jne short 00331h ; 75 ee ; 0xc0341 vgarom.asm:644
+ pop dx ; 5a ; 0xc0343 vgarom.asm:645
+ pop cx ; 59 ; 0xc0344 vgarom.asm:646
+ pop bx ; 5b ; 0xc0345 vgarom.asm:647
+ pop ax ; 58 ; 0xc0346 vgarom.asm:648
+ retn ; c3 ; 0xc0347 vgarom.asm:649
+ push ax ; 50 ; 0xc0348 vgarom.asm:654
+ push bx ; 53 ; 0xc0349 vgarom.asm:655
+ push dx ; 52 ; 0xc034a vgarom.asm:656
+ mov dx, 003dah ; ba da 03 ; 0xc034b vgarom.asm:657
+ in AL, DX ; ec ; 0xc034e vgarom.asm:658
+ mov dx, 003c0h ; ba c0 03 ; 0xc034f vgarom.asm:659
+ mov AL, strict byte 010h ; b0 10 ; 0xc0352 vgarom.asm:660
+ out DX, AL ; ee ; 0xc0354 vgarom.asm:661
+ mov dx, 003c1h ; ba c1 03 ; 0xc0355 vgarom.asm:662
+ in AL, DX ; ec ; 0xc0358 vgarom.asm:663
+ and bl, 001h ; 80 e3 01 ; 0xc0359 vgarom.asm:664
+ jne short 0036bh ; 75 0d ; 0xc035c vgarom.asm:665
+ and AL, strict byte 07fh ; 24 7f ; 0xc035e vgarom.asm:666
+ sal bh, 007h ; c0 e7 07 ; 0xc0360 vgarom.asm:668
+ db 00ah, 0c7h
+ ; or al, bh ; 0a c7 ; 0xc0363 vgarom.asm:678
+ mov dx, 003c0h ; ba c0 03 ; 0xc0365 vgarom.asm:679
+ out DX, AL ; ee ; 0xc0368 vgarom.asm:680
+ jmp short 00384h ; eb 19 ; 0xc0369 vgarom.asm:681
+ push ax ; 50 ; 0xc036b vgarom.asm:683
+ mov dx, 003dah ; ba da 03 ; 0xc036c vgarom.asm:684
+ in AL, DX ; ec ; 0xc036f vgarom.asm:685
+ mov dx, 003c0h ; ba c0 03 ; 0xc0370 vgarom.asm:686
+ mov AL, strict byte 014h ; b0 14 ; 0xc0373 vgarom.asm:687
+ out DX, AL ; ee ; 0xc0375 vgarom.asm:688
+ pop ax ; 58 ; 0xc0376 vgarom.asm:689
+ and AL, strict byte 080h ; 24 80 ; 0xc0377 vgarom.asm:690
+ jne short 0037eh ; 75 03 ; 0xc0379 vgarom.asm:691
+ sal bh, 002h ; c0 e7 02 ; 0xc037b vgarom.asm:693
+ and bh, 00fh ; 80 e7 0f ; 0xc037e vgarom.asm:699
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc0381 vgarom.asm:700
+ out DX, AL ; ee ; 0xc0383 vgarom.asm:701
+ mov AL, strict byte 020h ; b0 20 ; 0xc0384 vgarom.asm:703
+ out DX, AL ; ee ; 0xc0386 vgarom.asm:704
+ mov dx, 003dah ; ba da 03 ; 0xc0387 vgarom.asm:706
+ in AL, DX ; ec ; 0xc038a vgarom.asm:707
+ pop dx ; 5a ; 0xc038b vgarom.asm:709
+ pop bx ; 5b ; 0xc038c vgarom.asm:710
+ pop ax ; 58 ; 0xc038d vgarom.asm:711
+ retn ; c3 ; 0xc038e vgarom.asm:712
+ push ax ; 50 ; 0xc038f vgarom.asm:717
+ push dx ; 52 ; 0xc0390 vgarom.asm:718
+ mov dx, 003c7h ; ba c7 03 ; 0xc0391 vgarom.asm:719
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0394 vgarom.asm:720
+ out DX, AL ; ee ; 0xc0396 vgarom.asm:721
+ pop ax ; 58 ; 0xc0397 vgarom.asm:722
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc0398 vgarom.asm:723
+ mov dx, 003c9h ; ba c9 03 ; 0xc039a vgarom.asm:724
+ in AL, DX ; ec ; 0xc039d vgarom.asm:725
+ xchg al, ah ; 86 e0 ; 0xc039e vgarom.asm:726
+ push ax ; 50 ; 0xc03a0 vgarom.asm:727
+ in AL, DX ; ec ; 0xc03a1 vgarom.asm:728
+ db 08ah, 0e8h
+ ; mov ch, al ; 8a e8 ; 0xc03a2 vgarom.asm:729
+ in AL, DX ; ec ; 0xc03a4 vgarom.asm:730
+ db 08ah, 0c8h
+ ; mov cl, al ; 8a c8 ; 0xc03a5 vgarom.asm:731
+ pop dx ; 5a ; 0xc03a7 vgarom.asm:732
+ pop ax ; 58 ; 0xc03a8 vgarom.asm:733
+ retn ; c3 ; 0xc03a9 vgarom.asm:734
+ push ax ; 50 ; 0xc03aa vgarom.asm:739
+ push bx ; 53 ; 0xc03ab vgarom.asm:740
+ push cx ; 51 ; 0xc03ac vgarom.asm:741
+ push dx ; 52 ; 0xc03ad vgarom.asm:742
+ mov dx, 003c7h ; ba c7 03 ; 0xc03ae vgarom.asm:743
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03b1 vgarom.asm:744
+ out DX, AL ; ee ; 0xc03b3 vgarom.asm:745
+ pop dx ; 5a ; 0xc03b4 vgarom.asm:746
+ push dx ; 52 ; 0xc03b5 vgarom.asm:747
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc03b6 vgarom.asm:748
+ mov dx, 003c9h ; ba c9 03 ; 0xc03b8 vgarom.asm:749
+ in AL, DX ; ec ; 0xc03bb vgarom.asm:751
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03bc vgarom.asm:752
+ inc bx ; 43 ; 0xc03bf vgarom.asm:753
+ in AL, DX ; ec ; 0xc03c0 vgarom.asm:754
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03c1 vgarom.asm:755
+ inc bx ; 43 ; 0xc03c4 vgarom.asm:756
+ in AL, DX ; ec ; 0xc03c5 vgarom.asm:757
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03c6 vgarom.asm:758
+ inc bx ; 43 ; 0xc03c9 vgarom.asm:759
+ dec cx ; 49 ; 0xc03ca vgarom.asm:760
+ jne short 003bbh ; 75 ee ; 0xc03cb vgarom.asm:761
+ pop dx ; 5a ; 0xc03cd vgarom.asm:762
+ pop cx ; 59 ; 0xc03ce vgarom.asm:763
+ pop bx ; 5b ; 0xc03cf vgarom.asm:764
+ pop ax ; 58 ; 0xc03d0 vgarom.asm:765
+ retn ; c3 ; 0xc03d1 vgarom.asm:766
+ push ax ; 50 ; 0xc03d2 vgarom.asm:771
+ push dx ; 52 ; 0xc03d3 vgarom.asm:772
+ mov dx, 003c6h ; ba c6 03 ; 0xc03d4 vgarom.asm:773
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03d7 vgarom.asm:774
+ out DX, AL ; ee ; 0xc03d9 vgarom.asm:775
+ pop dx ; 5a ; 0xc03da vgarom.asm:776
+ pop ax ; 58 ; 0xc03db vgarom.asm:777
+ retn ; c3 ; 0xc03dc vgarom.asm:778
+ push ax ; 50 ; 0xc03dd vgarom.asm:783
+ push dx ; 52 ; 0xc03de vgarom.asm:784
+ mov dx, 003c6h ; ba c6 03 ; 0xc03df vgarom.asm:785
+ in AL, DX ; ec ; 0xc03e2 vgarom.asm:786
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc03e3 vgarom.asm:787
+ pop dx ; 5a ; 0xc03e5 vgarom.asm:788
+ pop ax ; 58 ; 0xc03e6 vgarom.asm:789
+ retn ; c3 ; 0xc03e7 vgarom.asm:790
+ push ax ; 50 ; 0xc03e8 vgarom.asm:795
+ push dx ; 52 ; 0xc03e9 vgarom.asm:796
+ mov dx, 003dah ; ba da 03 ; 0xc03ea vgarom.asm:797
+ in AL, DX ; ec ; 0xc03ed vgarom.asm:798
+ mov dx, 003c0h ; ba c0 03 ; 0xc03ee vgarom.asm:799
+ mov AL, strict byte 010h ; b0 10 ; 0xc03f1 vgarom.asm:800
+ out DX, AL ; ee ; 0xc03f3 vgarom.asm:801
+ mov dx, 003c1h ; ba c1 03 ; 0xc03f4 vgarom.asm:802
+ in AL, DX ; ec ; 0xc03f7 vgarom.asm:803
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc03f8 vgarom.asm:804
+ shr bl, 007h ; c0 eb 07 ; 0xc03fa vgarom.asm:806
+ mov dx, 003dah ; ba da 03 ; 0xc03fd vgarom.asm:816
+ in AL, DX ; ec ; 0xc0400 vgarom.asm:817
+ mov dx, 003c0h ; ba c0 03 ; 0xc0401 vgarom.asm:818
+ mov AL, strict byte 014h ; b0 14 ; 0xc0404 vgarom.asm:819
+ out DX, AL ; ee ; 0xc0406 vgarom.asm:820
+ mov dx, 003c1h ; ba c1 03 ; 0xc0407 vgarom.asm:821
+ in AL, DX ; ec ; 0xc040a vgarom.asm:822
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc040b vgarom.asm:823
+ and bh, 00fh ; 80 e7 0f ; 0xc040d vgarom.asm:824
+ test bl, 001h ; f6 c3 01 ; 0xc0410 vgarom.asm:825
+ jne short 00418h ; 75 03 ; 0xc0413 vgarom.asm:826
+ shr bh, 002h ; c0 ef 02 ; 0xc0415 vgarom.asm:828
+ mov dx, 003dah ; ba da 03 ; 0xc0418 vgarom.asm:834
+ in AL, DX ; ec ; 0xc041b vgarom.asm:835
+ mov dx, 003c0h ; ba c0 03 ; 0xc041c vgarom.asm:836
+ mov AL, strict byte 020h ; b0 20 ; 0xc041f vgarom.asm:837
+ out DX, AL ; ee ; 0xc0421 vgarom.asm:838
+ mov dx, 003dah ; ba da 03 ; 0xc0422 vgarom.asm:840
+ in AL, DX ; ec ; 0xc0425 vgarom.asm:841
+ pop dx ; 5a ; 0xc0426 vgarom.asm:843
+ pop ax ; 58 ; 0xc0427 vgarom.asm:844
+ retn ; c3 ; 0xc0428 vgarom.asm:845
+ push ax ; 50 ; 0xc0429 vgarom.asm:850
+ push dx ; 52 ; 0xc042a vgarom.asm:851
+ mov dx, 003c4h ; ba c4 03 ; 0xc042b vgarom.asm:852
+ db 08ah, 0e3h
+ ; mov ah, bl ; 8a e3 ; 0xc042e vgarom.asm:853
+ mov AL, strict byte 003h ; b0 03 ; 0xc0430 vgarom.asm:854
+ out DX, ax ; ef ; 0xc0432 vgarom.asm:855
+ pop dx ; 5a ; 0xc0433 vgarom.asm:856
+ pop ax ; 58 ; 0xc0434 vgarom.asm:857
+ retn ; c3 ; 0xc0435 vgarom.asm:858
+ push DS ; 1e ; 0xc0436 vgarom.asm:863
+ push ax ; 50 ; 0xc0437 vgarom.asm:864
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0438 vgarom.asm:865
+ mov ds, ax ; 8e d8 ; 0xc043b vgarom.asm:866
+ db 032h, 0edh
+ ; xor ch, ch ; 32 ed ; 0xc043d vgarom.asm:867
+ mov bx, 00088h ; bb 88 00 ; 0xc043f vgarom.asm:868
+ mov cl, byte [bx] ; 8a 0f ; 0xc0442 vgarom.asm:869
+ and cl, 00fh ; 80 e1 0f ; 0xc0444 vgarom.asm:870
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc0447 vgarom.asm:871
+ mov ax, word [bx] ; 8b 07 ; 0xc044a vgarom.asm:872
+ mov bx, strict word 00003h ; bb 03 00 ; 0xc044c vgarom.asm:873
+ cmp ax, 003b4h ; 3d b4 03 ; 0xc044f vgarom.asm:874
+ jne short 00456h ; 75 02 ; 0xc0452 vgarom.asm:875
+ mov BH, strict byte 001h ; b7 01 ; 0xc0454 vgarom.asm:876
+ pop ax ; 58 ; 0xc0456 vgarom.asm:878
+ pop DS ; 1f ; 0xc0457 vgarom.asm:879
+ retn ; c3 ; 0xc0458 vgarom.asm:880
+ push DS ; 1e ; 0xc0459 vgarom.asm:888
+ push bx ; 53 ; 0xc045a vgarom.asm:889
+ push dx ; 52 ; 0xc045b vgarom.asm:890
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc045c vgarom.asm:891
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc045e vgarom.asm:892
+ mov ds, ax ; 8e d8 ; 0xc0461 vgarom.asm:893
+ mov bx, 00089h ; bb 89 00 ; 0xc0463 vgarom.asm:894
+ mov al, byte [bx] ; 8a 07 ; 0xc0466 vgarom.asm:895
+ mov bx, 00088h ; bb 88 00 ; 0xc0468 vgarom.asm:896
+ mov ah, byte [bx] ; 8a 27 ; 0xc046b vgarom.asm:897
+ cmp dl, 001h ; 80 fa 01 ; 0xc046d vgarom.asm:898
+ je short 00487h ; 74 15 ; 0xc0470 vgarom.asm:899
+ jc short 00491h ; 72 1d ; 0xc0472 vgarom.asm:900
+ cmp dl, 002h ; 80 fa 02 ; 0xc0474 vgarom.asm:901
+ je short 0047bh ; 74 02 ; 0xc0477 vgarom.asm:902
+ jmp short 004a5h ; eb 2a ; 0xc0479 vgarom.asm:912
+ and AL, strict byte 07fh ; 24 7f ; 0xc047b vgarom.asm:918
+ or AL, strict byte 010h ; 0c 10 ; 0xc047d vgarom.asm:919
+ and ah, 0f0h ; 80 e4 f0 ; 0xc047f vgarom.asm:920
+ or ah, 009h ; 80 cc 09 ; 0xc0482 vgarom.asm:921
+ jne short 0049bh ; 75 14 ; 0xc0485 vgarom.asm:922
+ and AL, strict byte 06fh ; 24 6f ; 0xc0487 vgarom.asm:928
+ and ah, 0f0h ; 80 e4 f0 ; 0xc0489 vgarom.asm:929
+ or ah, 009h ; 80 cc 09 ; 0xc048c vgarom.asm:930
+ jne short 0049bh ; 75 0a ; 0xc048f vgarom.asm:931
+ and AL, strict byte 0efh ; 24 ef ; 0xc0491 vgarom.asm:937
+ or AL, strict byte 080h ; 0c 80 ; 0xc0493 vgarom.asm:938
+ and ah, 0f0h ; 80 e4 f0 ; 0xc0495 vgarom.asm:939
+ or ah, 008h ; 80 cc 08 ; 0xc0498 vgarom.asm:940
+ mov bx, 00089h ; bb 89 00 ; 0xc049b vgarom.asm:942
+ mov byte [bx], al ; 88 07 ; 0xc049e vgarom.asm:943
+ mov bx, 00088h ; bb 88 00 ; 0xc04a0 vgarom.asm:944
+ mov byte [bx], ah ; 88 27 ; 0xc04a3 vgarom.asm:945
+ mov ax, 01212h ; b8 12 12 ; 0xc04a5 vgarom.asm:947
+ pop dx ; 5a ; 0xc04a8 vgarom.asm:948
+ pop bx ; 5b ; 0xc04a9 vgarom.asm:949
+ pop DS ; 1f ; 0xc04aa vgarom.asm:950
+ retn ; c3 ; 0xc04ab vgarom.asm:951
+ push DS ; 1e ; 0xc04ac vgarom.asm:960
+ push bx ; 53 ; 0xc04ad vgarom.asm:961
+ push dx ; 52 ; 0xc04ae vgarom.asm:962
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc04af vgarom.asm:963
+ and dl, 001h ; 80 e2 01 ; 0xc04b1 vgarom.asm:964
+ sal dl, 003h ; c0 e2 03 ; 0xc04b4 vgarom.asm:966
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc04b7 vgarom.asm:972
+ mov ds, ax ; 8e d8 ; 0xc04ba vgarom.asm:973
+ mov bx, 00089h ; bb 89 00 ; 0xc04bc vgarom.asm:974
+ mov al, byte [bx] ; 8a 07 ; 0xc04bf vgarom.asm:975
+ and AL, strict byte 0f7h ; 24 f7 ; 0xc04c1 vgarom.asm:976
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc04c3 vgarom.asm:977
+ mov byte [bx], al ; 88 07 ; 0xc04c5 vgarom.asm:978
+ mov ax, 01212h ; b8 12 12 ; 0xc04c7 vgarom.asm:979
+ pop dx ; 5a ; 0xc04ca vgarom.asm:980
+ pop bx ; 5b ; 0xc04cb vgarom.asm:981
+ pop DS ; 1f ; 0xc04cc vgarom.asm:982
+ retn ; c3 ; 0xc04cd vgarom.asm:983
+ push bx ; 53 ; 0xc04ce vgarom.asm:987
+ push dx ; 52 ; 0xc04cf vgarom.asm:988
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc04d0 vgarom.asm:989
+ and bl, 001h ; 80 e3 01 ; 0xc04d2 vgarom.asm:990
+ xor bl, 001h ; 80 f3 01 ; 0xc04d5 vgarom.asm:991
+ sal bl, 1 ; d0 e3 ; 0xc04d8 vgarom.asm:992
+ mov dx, 003cch ; ba cc 03 ; 0xc04da vgarom.asm:993
+ in AL, DX ; ec ; 0xc04dd vgarom.asm:994
+ and AL, strict byte 0fdh ; 24 fd ; 0xc04de vgarom.asm:995
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc04e0 vgarom.asm:996
+ mov dx, 003c2h ; ba c2 03 ; 0xc04e2 vgarom.asm:997
+ out DX, AL ; ee ; 0xc04e5 vgarom.asm:998
+ mov ax, 01212h ; b8 12 12 ; 0xc04e6 vgarom.asm:999
+ pop dx ; 5a ; 0xc04e9 vgarom.asm:1000
+ pop bx ; 5b ; 0xc04ea vgarom.asm:1001
+ retn ; c3 ; 0xc04eb vgarom.asm:1002
+ push DS ; 1e ; 0xc04ec vgarom.asm:1006
+ push bx ; 53 ; 0xc04ed vgarom.asm:1007
+ push dx ; 52 ; 0xc04ee vgarom.asm:1008
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc04ef vgarom.asm:1009
+ and dl, 001h ; 80 e2 01 ; 0xc04f1 vgarom.asm:1010
+ xor dl, 001h ; 80 f2 01 ; 0xc04f4 vgarom.asm:1011
+ sal dl, 1 ; d0 e2 ; 0xc04f7 vgarom.asm:1012
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc04f9 vgarom.asm:1013
+ mov ds, ax ; 8e d8 ; 0xc04fc vgarom.asm:1014
+ mov bx, 00089h ; bb 89 00 ; 0xc04fe vgarom.asm:1015
+ mov al, byte [bx] ; 8a 07 ; 0xc0501 vgarom.asm:1016
+ and AL, strict byte 0fdh ; 24 fd ; 0xc0503 vgarom.asm:1017
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc0505 vgarom.asm:1018
+ mov byte [bx], al ; 88 07 ; 0xc0507 vgarom.asm:1019
+ mov ax, 01212h ; b8 12 12 ; 0xc0509 vgarom.asm:1020
+ pop dx ; 5a ; 0xc050c vgarom.asm:1021
+ pop bx ; 5b ; 0xc050d vgarom.asm:1022
+ pop DS ; 1f ; 0xc050e vgarom.asm:1023
+ retn ; c3 ; 0xc050f vgarom.asm:1024
+ push DS ; 1e ; 0xc0510 vgarom.asm:1028
+ push bx ; 53 ; 0xc0511 vgarom.asm:1029
+ push dx ; 52 ; 0xc0512 vgarom.asm:1030
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc0513 vgarom.asm:1031
+ and dl, 001h ; 80 e2 01 ; 0xc0515 vgarom.asm:1032
+ xor dl, 001h ; 80 f2 01 ; 0xc0518 vgarom.asm:1033
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc051b vgarom.asm:1034
+ mov ds, ax ; 8e d8 ; 0xc051e vgarom.asm:1035
+ mov bx, 00089h ; bb 89 00 ; 0xc0520 vgarom.asm:1036
+ mov al, byte [bx] ; 8a 07 ; 0xc0523 vgarom.asm:1037
+ and AL, strict byte 0feh ; 24 fe ; 0xc0525 vgarom.asm:1038
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc0527 vgarom.asm:1039
+ mov byte [bx], al ; 88 07 ; 0xc0529 vgarom.asm:1040
+ mov ax, 01212h ; b8 12 12 ; 0xc052b vgarom.asm:1041
+ pop dx ; 5a ; 0xc052e vgarom.asm:1042
+ pop bx ; 5b ; 0xc052f vgarom.asm:1043
+ pop DS ; 1f ; 0xc0530 vgarom.asm:1044
+ retn ; c3 ; 0xc0531 vgarom.asm:1045
+ cmp AL, strict byte 000h ; 3c 00 ; 0xc0532 vgarom.asm:1050
+ je short 0053bh ; 74 05 ; 0xc0534 vgarom.asm:1051
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc0536 vgarom.asm:1052
+ je short 00550h ; 74 16 ; 0xc0538 vgarom.asm:1053
+ retn ; c3 ; 0xc053a vgarom.asm:1057
+ push DS ; 1e ; 0xc053b vgarom.asm:1059
+ push ax ; 50 ; 0xc053c vgarom.asm:1060
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc053d vgarom.asm:1061
+ mov ds, ax ; 8e d8 ; 0xc0540 vgarom.asm:1062
+ mov bx, 0008ah ; bb 8a 00 ; 0xc0542 vgarom.asm:1063
+ mov al, byte [bx] ; 8a 07 ; 0xc0545 vgarom.asm:1064
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc0547 vgarom.asm:1065
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc0549 vgarom.asm:1066
+ pop ax ; 58 ; 0xc054b vgarom.asm:1067
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc054c vgarom.asm:1068
+ pop DS ; 1f ; 0xc054e vgarom.asm:1069
+ retn ; c3 ; 0xc054f vgarom.asm:1070
+ push DS ; 1e ; 0xc0550 vgarom.asm:1072
+ push ax ; 50 ; 0xc0551 vgarom.asm:1073
+ push bx ; 53 ; 0xc0552 vgarom.asm:1074
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0553 vgarom.asm:1075
+ mov ds, ax ; 8e d8 ; 0xc0556 vgarom.asm:1076
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc0558 vgarom.asm:1077
+ mov bx, 0008ah ; bb 8a 00 ; 0xc055a vgarom.asm:1078
+ mov byte [bx], al ; 88 07 ; 0xc055d vgarom.asm:1079
+ pop bx ; 5b ; 0xc055f vgarom.asm:1089
+ pop ax ; 58 ; 0xc0560 vgarom.asm:1090
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc0561 vgarom.asm:1091
+ pop DS ; 1f ; 0xc0563 vgarom.asm:1092
+ retn ; c3 ; 0xc0564 vgarom.asm:1093
+ times 0xb db 0
+ ; disGetNextSymbol 0xc0570 LB 0x38a -> off=0x0 cb=0000000000000007 uValue=00000000000c0570 'do_out_dx_ax'
+do_out_dx_ax: ; 0xc0570 LB 0x7
+ xchg ah, al ; 86 c4 ; 0xc0570 vberom.asm:69
+ out DX, AL ; ee ; 0xc0572 vberom.asm:70
+ xchg ah, al ; 86 c4 ; 0xc0573 vberom.asm:71
+ out DX, AL ; ee ; 0xc0575 vberom.asm:72
+ retn ; c3 ; 0xc0576 vberom.asm:73
+ ; disGetNextSymbol 0xc0577 LB 0x383 -> off=0x0 cb=0000000000000040 uValue=00000000000c0577 'do_in_ax_dx'
+do_in_ax_dx: ; 0xc0577 LB 0x40
+ in AL, DX ; ec ; 0xc0577 vberom.asm:76
+ xchg ah, al ; 86 c4 ; 0xc0578 vberom.asm:77
+ in AL, DX ; ec ; 0xc057a vberom.asm:78
+ retn ; c3 ; 0xc057b vberom.asm:79
+ push ax ; 50 ; 0xc057c vberom.asm:90
+ push dx ; 52 ; 0xc057d vberom.asm:91
+ mov dx, 003dah ; ba da 03 ; 0xc057e vberom.asm:92
+ in AL, DX ; ec ; 0xc0581 vberom.asm:94
+ test AL, strict byte 008h ; a8 08 ; 0xc0582 vberom.asm:95
+ je short 00581h ; 74 fb ; 0xc0584 vberom.asm:96
+ pop dx ; 5a ; 0xc0586 vberom.asm:97
+ pop ax ; 58 ; 0xc0587 vberom.asm:98
+ retn ; c3 ; 0xc0588 vberom.asm:99
+ push ax ; 50 ; 0xc0589 vberom.asm:102
+ push dx ; 52 ; 0xc058a vberom.asm:103
+ mov dx, 003dah ; ba da 03 ; 0xc058b vberom.asm:104
+ in AL, DX ; ec ; 0xc058e vberom.asm:106
+ test AL, strict byte 008h ; a8 08 ; 0xc058f vberom.asm:107
+ jne short 0058eh ; 75 fb ; 0xc0591 vberom.asm:108
+ pop dx ; 5a ; 0xc0593 vberom.asm:109
+ pop ax ; 58 ; 0xc0594 vberom.asm:110
+ retn ; c3 ; 0xc0595 vberom.asm:111
+ push dx ; 52 ; 0xc0596 vberom.asm:116
+ mov dx, 001ceh ; ba ce 01 ; 0xc0597 vberom.asm:117
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc059a vberom.asm:118
+ call 00570h ; e8 d0 ff ; 0xc059d vberom.asm:119
+ mov dx, 001cfh ; ba cf 01 ; 0xc05a0 vberom.asm:120
+ call 00577h ; e8 d1 ff ; 0xc05a3 vberom.asm:121
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc05a6 vberom.asm:122
+ jbe short 005b5h ; 76 0b ; 0xc05a8 vberom.asm:123
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc05aa vberom.asm:124
+ shr ah, 003h ; c0 ec 03 ; 0xc05ac vberom.asm:126
+ test AL, strict byte 007h ; a8 07 ; 0xc05af vberom.asm:132
+ je short 005b5h ; 74 02 ; 0xc05b1 vberom.asm:133
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc05b3 vberom.asm:134
+ pop dx ; 5a ; 0xc05b5 vberom.asm:136
+ retn ; c3 ; 0xc05b6 vberom.asm:137
+ ; disGetNextSymbol 0xc05b7 LB 0x343 -> off=0x0 cb=0000000000000026 uValue=00000000000c05b7 '_dispi_get_max_bpp'
+_dispi_get_max_bpp: ; 0xc05b7 LB 0x26
+ push dx ; 52 ; 0xc05b7 vberom.asm:142
+ push bx ; 53 ; 0xc05b8 vberom.asm:143
+ call 005f1h ; e8 35 00 ; 0xc05b9 vberom.asm:144
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc05bc vberom.asm:145
+ or ax, strict byte 00002h ; 83 c8 02 ; 0xc05be vberom.asm:146
+ call 005ddh ; e8 19 00 ; 0xc05c1 vberom.asm:147
+ mov dx, 001ceh ; ba ce 01 ; 0xc05c4 vberom.asm:148
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc05c7 vberom.asm:149
+ call 00570h ; e8 a3 ff ; 0xc05ca vberom.asm:150
+ mov dx, 001cfh ; ba cf 01 ; 0xc05cd vberom.asm:151
+ call 00577h ; e8 a4 ff ; 0xc05d0 vberom.asm:152
+ push ax ; 50 ; 0xc05d3 vberom.asm:153
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc05d4 vberom.asm:154
+ call 005ddh ; e8 04 00 ; 0xc05d6 vberom.asm:155
+ pop ax ; 58 ; 0xc05d9 vberom.asm:156
+ pop bx ; 5b ; 0xc05da vberom.asm:157
+ pop dx ; 5a ; 0xc05db vberom.asm:158
+ retn ; c3 ; 0xc05dc vberom.asm:159
+ ; disGetNextSymbol 0xc05dd LB 0x31d -> off=0x0 cb=0000000000000026 uValue=00000000000c05dd 'dispi_set_enable_'
+dispi_set_enable_: ; 0xc05dd LB 0x26
+ push dx ; 52 ; 0xc05dd vberom.asm:162
+ push ax ; 50 ; 0xc05de vberom.asm:163
+ mov dx, 001ceh ; ba ce 01 ; 0xc05df vberom.asm:164
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc05e2 vberom.asm:165
+ call 00570h ; e8 88 ff ; 0xc05e5 vberom.asm:166
+ pop ax ; 58 ; 0xc05e8 vberom.asm:167
+ mov dx, 001cfh ; ba cf 01 ; 0xc05e9 vberom.asm:168
+ call 00570h ; e8 81 ff ; 0xc05ec vberom.asm:169
+ pop dx ; 5a ; 0xc05ef vberom.asm:170
+ retn ; c3 ; 0xc05f0 vberom.asm:171
+ push dx ; 52 ; 0xc05f1 vberom.asm:174
+ mov dx, 001ceh ; ba ce 01 ; 0xc05f2 vberom.asm:175
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc05f5 vberom.asm:176
+ call 00570h ; e8 75 ff ; 0xc05f8 vberom.asm:177
+ mov dx, 001cfh ; ba cf 01 ; 0xc05fb vberom.asm:178
+ call 00577h ; e8 76 ff ; 0xc05fe vberom.asm:179
+ pop dx ; 5a ; 0xc0601 vberom.asm:180
+ retn ; c3 ; 0xc0602 vberom.asm:181
+ ; disGetNextSymbol 0xc0603 LB 0x2f7 -> off=0x0 cb=0000000000000026 uValue=00000000000c0603 'dispi_set_bank_'
+dispi_set_bank_: ; 0xc0603 LB 0x26
+ push dx ; 52 ; 0xc0603 vberom.asm:184
+ push ax ; 50 ; 0xc0604 vberom.asm:185
+ mov dx, 001ceh ; ba ce 01 ; 0xc0605 vberom.asm:186
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0608 vberom.asm:187
+ call 00570h ; e8 62 ff ; 0xc060b vberom.asm:188
+ pop ax ; 58 ; 0xc060e vberom.asm:189
+ mov dx, 001cfh ; ba cf 01 ; 0xc060f vberom.asm:190
+ call 00570h ; e8 5b ff ; 0xc0612 vberom.asm:191
+ pop dx ; 5a ; 0xc0615 vberom.asm:192
+ retn ; c3 ; 0xc0616 vberom.asm:193
+ push dx ; 52 ; 0xc0617 vberom.asm:196
+ mov dx, 001ceh ; ba ce 01 ; 0xc0618 vberom.asm:197
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc061b vberom.asm:198
+ call 00570h ; e8 4f ff ; 0xc061e vberom.asm:199
+ mov dx, 001cfh ; ba cf 01 ; 0xc0621 vberom.asm:200
+ call 00577h ; e8 50 ff ; 0xc0624 vberom.asm:201
+ pop dx ; 5a ; 0xc0627 vberom.asm:202
+ retn ; c3 ; 0xc0628 vberom.asm:203
+ ; disGetNextSymbol 0xc0629 LB 0x2d1 -> off=0x0 cb=00000000000000a9 uValue=00000000000c0629 '_dispi_set_bank_farcall'
+_dispi_set_bank_farcall: ; 0xc0629 LB 0xa9
+ cmp bx, 00100h ; 81 fb 00 01 ; 0xc0629 vberom.asm:206
+ je short 00653h ; 74 24 ; 0xc062d vberom.asm:207
+ db 00bh, 0dbh
+ ; or bx, bx ; 0b db ; 0xc062f vberom.asm:208
+ jne short 00665h ; 75 32 ; 0xc0631 vberom.asm:209
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0633 vberom.asm:210
+ push dx ; 52 ; 0xc0635 vberom.asm:211
+ push ax ; 50 ; 0xc0636 vberom.asm:212
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0637 vberom.asm:213
+ mov dx, 001ceh ; ba ce 01 ; 0xc063a vberom.asm:214
+ call 00570h ; e8 30 ff ; 0xc063d vberom.asm:215
+ pop ax ; 58 ; 0xc0640 vberom.asm:216
+ mov dx, 001cfh ; ba cf 01 ; 0xc0641 vberom.asm:217
+ call 00570h ; e8 29 ff ; 0xc0644 vberom.asm:218
+ call 00577h ; e8 2d ff ; 0xc0647 vberom.asm:219
+ pop dx ; 5a ; 0xc064a vberom.asm:220
+ db 03bh, 0d0h
+ ; cmp dx, ax ; 3b d0 ; 0xc064b vberom.asm:221
+ jne short 00665h ; 75 16 ; 0xc064d vberom.asm:222
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc064f vberom.asm:223
+ retf ; cb ; 0xc0652 vberom.asm:224
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0653 vberom.asm:226
+ mov dx, 001ceh ; ba ce 01 ; 0xc0656 vberom.asm:227
+ call 00570h ; e8 14 ff ; 0xc0659 vberom.asm:228
+ mov dx, 001cfh ; ba cf 01 ; 0xc065c vberom.asm:229
+ call 00577h ; e8 15 ff ; 0xc065f vberom.asm:230
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0662 vberom.asm:231
+ retf ; cb ; 0xc0664 vberom.asm:232
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0665 vberom.asm:234
+ retf ; cb ; 0xc0668 vberom.asm:235
+ push dx ; 52 ; 0xc0669 vberom.asm:238
+ push ax ; 50 ; 0xc066a vberom.asm:239
+ mov dx, 001ceh ; ba ce 01 ; 0xc066b vberom.asm:240
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc066e vberom.asm:241
+ call 00570h ; e8 fc fe ; 0xc0671 vberom.asm:242
+ pop ax ; 58 ; 0xc0674 vberom.asm:243
+ mov dx, 001cfh ; ba cf 01 ; 0xc0675 vberom.asm:244
+ call 00570h ; e8 f5 fe ; 0xc0678 vberom.asm:245
+ pop dx ; 5a ; 0xc067b vberom.asm:246
+ retn ; c3 ; 0xc067c vberom.asm:247
+ push dx ; 52 ; 0xc067d vberom.asm:250
+ mov dx, 001ceh ; ba ce 01 ; 0xc067e vberom.asm:251
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc0681 vberom.asm:252
+ call 00570h ; e8 e9 fe ; 0xc0684 vberom.asm:253
+ mov dx, 001cfh ; ba cf 01 ; 0xc0687 vberom.asm:254
+ call 00577h ; e8 ea fe ; 0xc068a vberom.asm:255
+ pop dx ; 5a ; 0xc068d vberom.asm:256
+ retn ; c3 ; 0xc068e vberom.asm:257
+ push dx ; 52 ; 0xc068f vberom.asm:260
+ push ax ; 50 ; 0xc0690 vberom.asm:261
+ mov dx, 001ceh ; ba ce 01 ; 0xc0691 vberom.asm:262
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc0694 vberom.asm:263
+ call 00570h ; e8 d6 fe ; 0xc0697 vberom.asm:264
+ pop ax ; 58 ; 0xc069a vberom.asm:265
+ mov dx, 001cfh ; ba cf 01 ; 0xc069b vberom.asm:266
+ call 00570h ; e8 cf fe ; 0xc069e vberom.asm:267
+ pop dx ; 5a ; 0xc06a1 vberom.asm:268
+ retn ; c3 ; 0xc06a2 vberom.asm:269
+ push dx ; 52 ; 0xc06a3 vberom.asm:272
+ mov dx, 001ceh ; ba ce 01 ; 0xc06a4 vberom.asm:273
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc06a7 vberom.asm:274
+ call 00570h ; e8 c3 fe ; 0xc06aa vberom.asm:275
+ mov dx, 001cfh ; ba cf 01 ; 0xc06ad vberom.asm:276
+ call 00577h ; e8 c4 fe ; 0xc06b0 vberom.asm:277
+ pop dx ; 5a ; 0xc06b3 vberom.asm:278
+ retn ; c3 ; 0xc06b4 vberom.asm:279
+ push ax ; 50 ; 0xc06b5 vberom.asm:282
+ push bx ; 53 ; 0xc06b6 vberom.asm:283
+ push dx ; 52 ; 0xc06b7 vberom.asm:284
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc06b8 vberom.asm:285
+ call 00596h ; e8 d9 fe ; 0xc06ba vberom.asm:286
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc06bd vberom.asm:287
+ jnbe short 006c3h ; 77 02 ; 0xc06bf vberom.asm:288
+ shr bx, 1 ; d1 eb ; 0xc06c1 vberom.asm:289
+ shr bx, 003h ; c1 eb 03 ; 0xc06c3 vberom.asm:292
+ mov dx, 003d4h ; ba d4 03 ; 0xc06c6 vberom.asm:298
+ db 08ah, 0e3h
+ ; mov ah, bl ; 8a e3 ; 0xc06c9 vberom.asm:299
+ mov AL, strict byte 013h ; b0 13 ; 0xc06cb vberom.asm:300
+ out DX, ax ; ef ; 0xc06cd vberom.asm:301
+ pop dx ; 5a ; 0xc06ce vberom.asm:302
+ pop bx ; 5b ; 0xc06cf vberom.asm:303
+ pop ax ; 58 ; 0xc06d0 vberom.asm:304
+ retn ; c3 ; 0xc06d1 vberom.asm:305
+ ; disGetNextSymbol 0xc06d2 LB 0x228 -> off=0x0 cb=00000000000000ed uValue=00000000000c06d2 '_vga_compat_setup'
+_vga_compat_setup: ; 0xc06d2 LB 0xed
+ push ax ; 50 ; 0xc06d2 vberom.asm:308
+ push dx ; 52 ; 0xc06d3 vberom.asm:309
+ mov dx, 001ceh ; ba ce 01 ; 0xc06d4 vberom.asm:312
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc06d7 vberom.asm:313
+ call 00570h ; e8 93 fe ; 0xc06da vberom.asm:314
+ mov dx, 001cfh ; ba cf 01 ; 0xc06dd vberom.asm:315
+ call 00577h ; e8 94 fe ; 0xc06e0 vberom.asm:316
+ push ax ; 50 ; 0xc06e3 vberom.asm:317
+ mov dx, 003d4h ; ba d4 03 ; 0xc06e4 vberom.asm:318
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc06e7 vberom.asm:319
+ out DX, ax ; ef ; 0xc06ea vberom.asm:320
+ pop ax ; 58 ; 0xc06eb vberom.asm:321
+ push ax ; 50 ; 0xc06ec vberom.asm:322
+ shr ax, 003h ; c1 e8 03 ; 0xc06ed vberom.asm:324
+ dec ax ; 48 ; 0xc06f0 vberom.asm:330
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc06f1 vberom.asm:331
+ mov AL, strict byte 001h ; b0 01 ; 0xc06f3 vberom.asm:332
+ out DX, ax ; ef ; 0xc06f5 vberom.asm:333
+ pop ax ; 58 ; 0xc06f6 vberom.asm:334
+ call 006b5h ; e8 bb ff ; 0xc06f7 vberom.asm:335
+ mov dx, 001ceh ; ba ce 01 ; 0xc06fa vberom.asm:338
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc06fd vberom.asm:339
+ call 00570h ; e8 6d fe ; 0xc0700 vberom.asm:340
+ mov dx, 001cfh ; ba cf 01 ; 0xc0703 vberom.asm:341
+ call 00577h ; e8 6e fe ; 0xc0706 vberom.asm:342
+ dec ax ; 48 ; 0xc0709 vberom.asm:343
+ push ax ; 50 ; 0xc070a vberom.asm:344
+ mov dx, 003d4h ; ba d4 03 ; 0xc070b vberom.asm:345
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc070e vberom.asm:346
+ mov AL, strict byte 012h ; b0 12 ; 0xc0710 vberom.asm:347
+ out DX, ax ; ef ; 0xc0712 vberom.asm:348
+ pop ax ; 58 ; 0xc0713 vberom.asm:349
+ mov AL, strict byte 007h ; b0 07 ; 0xc0714 vberom.asm:350
+ out DX, AL ; ee ; 0xc0716 vberom.asm:351
+ inc dx ; 42 ; 0xc0717 vberom.asm:352
+ in AL, DX ; ec ; 0xc0718 vberom.asm:353
+ and AL, strict byte 0bdh ; 24 bd ; 0xc0719 vberom.asm:354
+ test ah, 001h ; f6 c4 01 ; 0xc071b vberom.asm:355
+ je short 00722h ; 74 02 ; 0xc071e vberom.asm:356
+ or AL, strict byte 002h ; 0c 02 ; 0xc0720 vberom.asm:357
+ test ah, 002h ; f6 c4 02 ; 0xc0722 vberom.asm:359
+ je short 00729h ; 74 02 ; 0xc0725 vberom.asm:360
+ or AL, strict byte 040h ; 0c 40 ; 0xc0727 vberom.asm:361
+ out DX, AL ; ee ; 0xc0729 vberom.asm:363
+ mov dx, 003d4h ; ba d4 03 ; 0xc072a vberom.asm:366
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc072d vberom.asm:367
+ out DX, AL ; ee ; 0xc0730 vberom.asm:368
+ mov dx, 003d5h ; ba d5 03 ; 0xc0731 vberom.asm:369
+ in AL, DX ; ec ; 0xc0734 vberom.asm:370
+ and AL, strict byte 060h ; 24 60 ; 0xc0735 vberom.asm:371
+ out DX, AL ; ee ; 0xc0737 vberom.asm:372
+ mov dx, 003d4h ; ba d4 03 ; 0xc0738 vberom.asm:373
+ mov AL, strict byte 017h ; b0 17 ; 0xc073b vberom.asm:374
+ out DX, AL ; ee ; 0xc073d vberom.asm:375
+ mov dx, 003d5h ; ba d5 03 ; 0xc073e vberom.asm:376
+ in AL, DX ; ec ; 0xc0741 vberom.asm:377
+ or AL, strict byte 003h ; 0c 03 ; 0xc0742 vberom.asm:378
+ out DX, AL ; ee ; 0xc0744 vberom.asm:379
+ mov dx, 003dah ; ba da 03 ; 0xc0745 vberom.asm:380
+ in AL, DX ; ec ; 0xc0748 vberom.asm:381
+ mov dx, 003c0h ; ba c0 03 ; 0xc0749 vberom.asm:382
+ mov AL, strict byte 010h ; b0 10 ; 0xc074c vberom.asm:383
+ out DX, AL ; ee ; 0xc074e vberom.asm:384
+ mov dx, 003c1h ; ba c1 03 ; 0xc074f vberom.asm:385
+ in AL, DX ; ec ; 0xc0752 vberom.asm:386
+ or AL, strict byte 001h ; 0c 01 ; 0xc0753 vberom.asm:387
+ mov dx, 003c0h ; ba c0 03 ; 0xc0755 vberom.asm:388
+ out DX, AL ; ee ; 0xc0758 vberom.asm:389
+ mov AL, strict byte 020h ; b0 20 ; 0xc0759 vberom.asm:390
+ out DX, AL ; ee ; 0xc075b vberom.asm:391
+ mov dx, 003ceh ; ba ce 03 ; 0xc075c vberom.asm:392
+ mov ax, 00506h ; b8 06 05 ; 0xc075f vberom.asm:393
+ out DX, ax ; ef ; 0xc0762 vberom.asm:394
+ mov dx, 003c4h ; ba c4 03 ; 0xc0763 vberom.asm:395
+ mov ax, 00f02h ; b8 02 0f ; 0xc0766 vberom.asm:396
+ out DX, ax ; ef ; 0xc0769 vberom.asm:397
+ mov dx, 001ceh ; ba ce 01 ; 0xc076a vberom.asm:400
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc076d vberom.asm:401
+ call 00570h ; e8 fd fd ; 0xc0770 vberom.asm:402
+ mov dx, 001cfh ; ba cf 01 ; 0xc0773 vberom.asm:403
+ call 00577h ; e8 fe fd ; 0xc0776 vberom.asm:404
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc0779 vberom.asm:405
+ jc short 007bdh ; 72 40 ; 0xc077b vberom.asm:406
+ mov dx, 003d4h ; ba d4 03 ; 0xc077d vberom.asm:407
+ mov AL, strict byte 014h ; b0 14 ; 0xc0780 vberom.asm:408
+ out DX, AL ; ee ; 0xc0782 vberom.asm:409
+ mov dx, 003d5h ; ba d5 03 ; 0xc0783 vberom.asm:410
+ in AL, DX ; ec ; 0xc0786 vberom.asm:411
+ or AL, strict byte 040h ; 0c 40 ; 0xc0787 vberom.asm:412
+ out DX, AL ; ee ; 0xc0789 vberom.asm:413
+ mov dx, 003dah ; ba da 03 ; 0xc078a vberom.asm:414
+ in AL, DX ; ec ; 0xc078d vberom.asm:415
+ mov dx, 003c0h ; ba c0 03 ; 0xc078e vberom.asm:416
+ mov AL, strict byte 010h ; b0 10 ; 0xc0791 vberom.asm:417
+ out DX, AL ; ee ; 0xc0793 vberom.asm:418
+ mov dx, 003c1h ; ba c1 03 ; 0xc0794 vberom.asm:419
+ in AL, DX ; ec ; 0xc0797 vberom.asm:420
+ or AL, strict byte 040h ; 0c 40 ; 0xc0798 vberom.asm:421
+ mov dx, 003c0h ; ba c0 03 ; 0xc079a vberom.asm:422
+ out DX, AL ; ee ; 0xc079d vberom.asm:423
+ mov AL, strict byte 020h ; b0 20 ; 0xc079e vberom.asm:424
+ out DX, AL ; ee ; 0xc07a0 vberom.asm:425
+ mov dx, 003c4h ; ba c4 03 ; 0xc07a1 vberom.asm:426
+ mov AL, strict byte 004h ; b0 04 ; 0xc07a4 vberom.asm:427
+ out DX, AL ; ee ; 0xc07a6 vberom.asm:428
+ mov dx, 003c5h ; ba c5 03 ; 0xc07a7 vberom.asm:429
+ in AL, DX ; ec ; 0xc07aa vberom.asm:430
+ or AL, strict byte 008h ; 0c 08 ; 0xc07ab vberom.asm:431
+ out DX, AL ; ee ; 0xc07ad vberom.asm:432
+ mov dx, 003ceh ; ba ce 03 ; 0xc07ae vberom.asm:433
+ mov AL, strict byte 005h ; b0 05 ; 0xc07b1 vberom.asm:434
+ out DX, AL ; ee ; 0xc07b3 vberom.asm:435
+ mov dx, 003cfh ; ba cf 03 ; 0xc07b4 vberom.asm:436
+ in AL, DX ; ec ; 0xc07b7 vberom.asm:437
+ and AL, strict byte 09fh ; 24 9f ; 0xc07b8 vberom.asm:438
+ or AL, strict byte 040h ; 0c 40 ; 0xc07ba vberom.asm:439
+ out DX, AL ; ee ; 0xc07bc vberom.asm:440
+ pop dx ; 5a ; 0xc07bd vberom.asm:443
+ pop ax ; 58 ; 0xc07be vberom.asm:444
+ ; disGetNextSymbol 0xc07bf LB 0x13b -> off=0x0 cb=0000000000000013 uValue=00000000000c07bf '_vbe_has_vbe_display'
+_vbe_has_vbe_display: ; 0xc07bf LB 0x13
+ push DS ; 1e ; 0xc07bf vberom.asm:450
+ push bx ; 53 ; 0xc07c0 vberom.asm:451
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc07c1 vberom.asm:452
+ mov ds, ax ; 8e d8 ; 0xc07c4 vberom.asm:453
+ mov bx, 000b9h ; bb b9 00 ; 0xc07c6 vberom.asm:454
+ mov al, byte [bx] ; 8a 07 ; 0xc07c9 vberom.asm:455
+ and AL, strict byte 001h ; 24 01 ; 0xc07cb vberom.asm:456
+ db 032h, 0e4h
+ ; xor ah, ah ; 32 e4 ; 0xc07cd vberom.asm:457
+ pop bx ; 5b ; 0xc07cf vberom.asm:458
+ pop DS ; 1f ; 0xc07d0 vberom.asm:459
+ retn ; c3 ; 0xc07d1 vberom.asm:460
+ ; disGetNextSymbol 0xc07d2 LB 0x128 -> off=0x0 cb=0000000000000025 uValue=00000000000c07d2 'vbe_biosfn_return_current_mode'
+vbe_biosfn_return_current_mode: ; 0xc07d2 LB 0x25
+ push DS ; 1e ; 0xc07d2 vberom.asm:473
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc07d3 vberom.asm:474
+ mov ds, ax ; 8e d8 ; 0xc07d6 vberom.asm:475
+ call 005f1h ; e8 16 fe ; 0xc07d8 vberom.asm:476
+ and ax, strict byte 00001h ; 83 e0 01 ; 0xc07db vberom.asm:477
+ je short 007e9h ; 74 09 ; 0xc07de vberom.asm:478
+ mov bx, 000bah ; bb ba 00 ; 0xc07e0 vberom.asm:479
+ mov ax, word [bx] ; 8b 07 ; 0xc07e3 vberom.asm:480
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc07e5 vberom.asm:481
+ jne short 007f2h ; 75 09 ; 0xc07e7 vberom.asm:482
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc07e9 vberom.asm:484
+ mov al, byte [bx] ; 8a 07 ; 0xc07ec vberom.asm:485
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc07ee vberom.asm:486
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc07f0 vberom.asm:487
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc07f2 vberom.asm:489
+ pop DS ; 1f ; 0xc07f5 vberom.asm:490
+ retn ; c3 ; 0xc07f6 vberom.asm:491
+ ; disGetNextSymbol 0xc07f7 LB 0x103 -> off=0x0 cb=000000000000002d uValue=00000000000c07f7 'vbe_biosfn_display_window_control'
+vbe_biosfn_display_window_control: ; 0xc07f7 LB 0x2d
+ cmp bl, 000h ; 80 fb 00 ; 0xc07f7 vberom.asm:515
+ jne short 00820h ; 75 24 ; 0xc07fa vberom.asm:516
+ cmp bh, 001h ; 80 ff 01 ; 0xc07fc vberom.asm:517
+ je short 00817h ; 74 16 ; 0xc07ff vberom.asm:518
+ jc short 00807h ; 72 04 ; 0xc0801 vberom.asm:519
+ mov ax, 00100h ; b8 00 01 ; 0xc0803 vberom.asm:520
+ retn ; c3 ; 0xc0806 vberom.asm:521
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0807 vberom.asm:523
+ call 00603h ; e8 f7 fd ; 0xc0809 vberom.asm:524
+ call 00617h ; e8 08 fe ; 0xc080c vberom.asm:525
+ db 03bh, 0c2h
+ ; cmp ax, dx ; 3b c2 ; 0xc080f vberom.asm:526
+ jne short 00820h ; 75 0d ; 0xc0811 vberom.asm:527
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0813 vberom.asm:528
+ retn ; c3 ; 0xc0816 vberom.asm:529
+ call 00617h ; e8 fd fd ; 0xc0817 vberom.asm:531
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc081a vberom.asm:532
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc081c vberom.asm:533
+ retn ; c3 ; 0xc081f vberom.asm:534
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0820 vberom.asm:536
+ retn ; c3 ; 0xc0823 vberom.asm:537
+ ; disGetNextSymbol 0xc0824 LB 0xd6 -> off=0x0 cb=0000000000000034 uValue=00000000000c0824 'vbe_biosfn_set_get_display_start'
+vbe_biosfn_set_get_display_start: ; 0xc0824 LB 0x34
+ cmp bl, 080h ; 80 fb 80 ; 0xc0824 vberom.asm:577
+ je short 00834h ; 74 0b ; 0xc0827 vberom.asm:578
+ cmp bl, 001h ; 80 fb 01 ; 0xc0829 vberom.asm:579
+ je short 00848h ; 74 1a ; 0xc082c vberom.asm:580
+ jc short 0083ah ; 72 0a ; 0xc082e vberom.asm:581
+ mov ax, 00100h ; b8 00 01 ; 0xc0830 vberom.asm:582
+ retn ; c3 ; 0xc0833 vberom.asm:583
+ call 00589h ; e8 52 fd ; 0xc0834 vberom.asm:585
+ call 0057ch ; e8 42 fd ; 0xc0837 vberom.asm:586
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1 ; 0xc083a vberom.asm:588
+ call 00669h ; e8 2a fe ; 0xc083c vberom.asm:589
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc083f vberom.asm:590
+ call 0068fh ; e8 4b fe ; 0xc0841 vberom.asm:591
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0844 vberom.asm:592
+ retn ; c3 ; 0xc0847 vberom.asm:593
+ call 0067dh ; e8 32 fe ; 0xc0848 vberom.asm:595
+ db 08bh, 0c8h
+ ; mov cx, ax ; 8b c8 ; 0xc084b vberom.asm:596
+ call 006a3h ; e8 53 fe ; 0xc084d vberom.asm:597
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0850 vberom.asm:598
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc0852 vberom.asm:599
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0854 vberom.asm:600
+ retn ; c3 ; 0xc0857 vberom.asm:601
+ ; disGetNextSymbol 0xc0858 LB 0xa2 -> off=0x0 cb=0000000000000037 uValue=00000000000c0858 'vbe_biosfn_set_get_dac_palette_format'
+vbe_biosfn_set_get_dac_palette_format: ; 0xc0858 LB 0x37
+ cmp bl, 001h ; 80 fb 01 ; 0xc0858 vberom.asm:616
+ je short 0087bh ; 74 1e ; 0xc085b vberom.asm:617
+ jc short 00863h ; 72 04 ; 0xc085d vberom.asm:618
+ mov ax, 00100h ; b8 00 01 ; 0xc085f vberom.asm:619
+ retn ; c3 ; 0xc0862 vberom.asm:620
+ call 005f1h ; e8 8b fd ; 0xc0863 vberom.asm:622
+ cmp bh, 006h ; 80 ff 06 ; 0xc0866 vberom.asm:623
+ je short 00875h ; 74 0a ; 0xc0869 vberom.asm:624
+ cmp bh, 008h ; 80 ff 08 ; 0xc086b vberom.asm:625
+ jne short 0088bh ; 75 1b ; 0xc086e vberom.asm:626
+ or ax, strict byte 00020h ; 83 c8 20 ; 0xc0870 vberom.asm:627
+ jne short 00878h ; 75 03 ; 0xc0873 vberom.asm:628
+ and ax, strict byte 0ffdfh ; 83 e0 df ; 0xc0875 vberom.asm:630
+ call 005ddh ; e8 62 fd ; 0xc0878 vberom.asm:632
+ mov BH, strict byte 006h ; b7 06 ; 0xc087b vberom.asm:634
+ call 005f1h ; e8 71 fd ; 0xc087d vberom.asm:635
+ and ax, strict byte 00020h ; 83 e0 20 ; 0xc0880 vberom.asm:636
+ je short 00887h ; 74 02 ; 0xc0883 vberom.asm:637
+ mov BH, strict byte 008h ; b7 08 ; 0xc0885 vberom.asm:638
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0887 vberom.asm:640
+ retn ; c3 ; 0xc088a vberom.asm:641
+ mov ax, 0014fh ; b8 4f 01 ; 0xc088b vberom.asm:643
+ retn ; c3 ; 0xc088e vberom.asm:644
+ ; disGetNextSymbol 0xc088f LB 0x6b -> off=0x0 cb=0000000000000057 uValue=00000000000c088f 'vbe_biosfn_set_get_palette_data'
+vbe_biosfn_set_get_palette_data: ; 0xc088f LB 0x57
+ test bl, bl ; 84 db ; 0xc088f vberom.asm:683
+ je short 008a2h ; 74 0f ; 0xc0891 vberom.asm:684
+ cmp bl, 001h ; 80 fb 01 ; 0xc0893 vberom.asm:685
+ je short 008c2h ; 74 2a ; 0xc0896 vberom.asm:686
+ cmp bl, 003h ; 80 fb 03 ; 0xc0898 vberom.asm:687
+ jbe short 008e2h ; 76 45 ; 0xc089b vberom.asm:688
+ cmp bl, 080h ; 80 fb 80 ; 0xc089d vberom.asm:689
+ jne short 008deh ; 75 3c ; 0xc08a0 vberom.asm:690
+ pushaw ; 60 ; 0xc08a2 vberom.asm:143
+ push DS ; 1e ; 0xc08a3 vberom.asm:696
+ push ES ; 06 ; 0xc08a4 vberom.asm:697
+ pop DS ; 1f ; 0xc08a5 vberom.asm:698
+ db 08ah, 0c2h
+ ; mov al, dl ; 8a c2 ; 0xc08a6 vberom.asm:699
+ mov dx, 003c8h ; ba c8 03 ; 0xc08a8 vberom.asm:700
+ out DX, AL ; ee ; 0xc08ab vberom.asm:701
+ inc dx ; 42 ; 0xc08ac vberom.asm:702
+ db 08bh, 0f7h
+ ; mov si, di ; 8b f7 ; 0xc08ad vberom.asm:703
+ lodsw ; ad ; 0xc08af vberom.asm:714
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc08b0 vberom.asm:715
+ lodsw ; ad ; 0xc08b2 vberom.asm:716
+ out DX, AL ; ee ; 0xc08b3 vberom.asm:717
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc08b4 vberom.asm:718
+ out DX, AL ; ee ; 0xc08b6 vberom.asm:719
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc08b7 vberom.asm:720
+ out DX, AL ; ee ; 0xc08b9 vberom.asm:721
+ loop 008afh ; e2 f3 ; 0xc08ba vberom.asm:723
+ pop DS ; 1f ; 0xc08bc vberom.asm:724
+ popaw ; 61 ; 0xc08bd vberom.asm:162
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc08be vberom.asm:727
+ retn ; c3 ; 0xc08c1 vberom.asm:728
+ pushaw ; 60 ; 0xc08c2 vberom.asm:143
+ db 08ah, 0c2h
+ ; mov al, dl ; 8a c2 ; 0xc08c3 vberom.asm:732
+ mov dx, 003c7h ; ba c7 03 ; 0xc08c5 vberom.asm:733
+ out DX, AL ; ee ; 0xc08c8 vberom.asm:734
+ add dl, 002h ; 80 c2 02 ; 0xc08c9 vberom.asm:735
+ db 033h, 0dbh
+ ; xor bx, bx ; 33 db ; 0xc08cc vberom.asm:746
+ in AL, DX ; ec ; 0xc08ce vberom.asm:748
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc08cf vberom.asm:749
+ in AL, DX ; ec ; 0xc08d1 vberom.asm:750
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc08d2 vberom.asm:751
+ in AL, DX ; ec ; 0xc08d4 vberom.asm:752
+ stosw ; ab ; 0xc08d5 vberom.asm:753
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc08d6 vberom.asm:754
+ stosw ; ab ; 0xc08d8 vberom.asm:755
+ loop 008ceh ; e2 f3 ; 0xc08d9 vberom.asm:757
+ popaw ; 61 ; 0xc08db vberom.asm:162
+ jmp short 008beh ; eb e0 ; 0xc08dc vberom.asm:759
+ mov ax, 0014fh ; b8 4f 01 ; 0xc08de vberom.asm:762
+ retn ; c3 ; 0xc08e1 vberom.asm:763
+ mov ax, 0024fh ; b8 4f 02 ; 0xc08e2 vberom.asm:765
+ retn ; c3 ; 0xc08e5 vberom.asm:766
+ ; disGetNextSymbol 0xc08e6 LB 0x14 -> off=0x0 cb=0000000000000014 uValue=00000000000c08e6 'vbe_biosfn_return_protected_mode_interface'
+vbe_biosfn_return_protected_mode_interface: ; 0xc08e6 LB 0x14
+ test bl, bl ; 84 db ; 0xc08e6 vberom.asm:780
+ jne short 008f6h ; 75 0c ; 0xc08e8 vberom.asm:781
+ push CS ; 0e ; 0xc08ea vberom.asm:782
+ pop ES ; 07 ; 0xc08eb vberom.asm:783
+ mov di, 04640h ; bf 40 46 ; 0xc08ec vberom.asm:784
+ mov cx, 00115h ; b9 15 01 ; 0xc08ef vberom.asm:785
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc08f2 vberom.asm:786
+ retn ; c3 ; 0xc08f5 vberom.asm:787
+ mov ax, 0014fh ; b8 4f 01 ; 0xc08f6 vberom.asm:789
+ retn ; c3 ; 0xc08f9 vberom.asm:790
+
+ ; Padding 0xf6 bytes at 0xc08fa
+ times 246 db 0
+
+section _TEXT progbits vstart=0x9f0 align=1 ; size=0x3b42 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc09f0 LB 0x3b42 -> off=0x0 cb=000000000000001b uValue=00000000000c09f0 'set_int_vector'
+set_int_vector: ; 0xc09f0 LB 0x1b
+ push dx ; 52 ; 0xc09f0 vgabios.c:87
+ push bp ; 55 ; 0xc09f1
+ mov bp, sp ; 89 e5 ; 0xc09f2
+ mov dx, bx ; 89 da ; 0xc09f4
+ mov bl, al ; 88 c3 ; 0xc09f6 vgabios.c:91
+ xor bh, bh ; 30 ff ; 0xc09f8
+ sal bx, 002h ; c1 e3 02 ; 0xc09fa
+ xor ax, ax ; 31 c0 ; 0xc09fd
+ mov es, ax ; 8e c0 ; 0xc09ff
+ mov word [es:bx], dx ; 26 89 17 ; 0xc0a01
+ mov word [es:bx+002h], cx ; 26 89 4f 02 ; 0xc0a04
+ pop bp ; 5d ; 0xc0a08 vgabios.c:92
+ pop dx ; 5a ; 0xc0a09
+ retn ; c3 ; 0xc0a0a
+ ; disGetNextSymbol 0xc0a0b LB 0x3b27 -> off=0x0 cb=000000000000001c uValue=00000000000c0a0b 'init_vga_card'
+init_vga_card: ; 0xc0a0b LB 0x1c
+ push bp ; 55 ; 0xc0a0b vgabios.c:143
+ mov bp, sp ; 89 e5 ; 0xc0a0c
+ push dx ; 52 ; 0xc0a0e
+ mov AL, strict byte 0c3h ; b0 c3 ; 0xc0a0f vgabios.c:146
+ mov dx, 003c2h ; ba c2 03 ; 0xc0a11
+ out DX, AL ; ee ; 0xc0a14
+ mov AL, strict byte 004h ; b0 04 ; 0xc0a15 vgabios.c:149
+ mov dx, 003c4h ; ba c4 03 ; 0xc0a17
+ out DX, AL ; ee ; 0xc0a1a
+ mov AL, strict byte 002h ; b0 02 ; 0xc0a1b vgabios.c:150
+ mov dx, 003c5h ; ba c5 03 ; 0xc0a1d
+ out DX, AL ; ee ; 0xc0a20
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc0a21 vgabios.c:155
+ pop dx ; 5a ; 0xc0a24
+ pop bp ; 5d ; 0xc0a25
+ retn ; c3 ; 0xc0a26
+ ; disGetNextSymbol 0xc0a27 LB 0x3b0b -> off=0x0 cb=000000000000003e uValue=00000000000c0a27 'init_bios_area'
+init_bios_area: ; 0xc0a27 LB 0x3e
+ push bx ; 53 ; 0xc0a27 vgabios.c:221
+ push bp ; 55 ; 0xc0a28
+ mov bp, sp ; 89 e5 ; 0xc0a29
+ xor bx, bx ; 31 db ; 0xc0a2b vgabios.c:225
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0a2d
+ mov es, ax ; 8e c0 ; 0xc0a30
+ mov al, byte [es:bx+010h] ; 26 8a 47 10 ; 0xc0a32 vgabios.c:228
+ and AL, strict byte 0cfh ; 24 cf ; 0xc0a36
+ or AL, strict byte 020h ; 0c 20 ; 0xc0a38
+ mov byte [es:bx+010h], al ; 26 88 47 10 ; 0xc0a3a
+ mov byte [es:bx+00085h], 010h ; 26 c6 87 85 00 10 ; 0xc0a3e vgabios.c:232
+ mov word [es:bx+00087h], 0f960h ; 26 c7 87 87 00 60 f9 ; 0xc0a44 vgabios.c:234
+ mov byte [es:bx+00089h], 051h ; 26 c6 87 89 00 51 ; 0xc0a4b vgabios.c:238
+ mov byte [es:bx+065h], 009h ; 26 c6 47 65 09 ; 0xc0a51 vgabios.c:240
+ mov word [es:bx+000a8h], 05550h ; 26 c7 87 a8 00 50 55 ; 0xc0a56 vgabios.c:242
+ mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5d
+ pop bp ; 5d ; 0xc0a62 vgabios.c:243
+ pop bx ; 5b ; 0xc0a63
+ retn ; c3 ; 0xc0a64
+ ; disGetNextSymbol 0xc0a65 LB 0x3acd -> off=0x0 cb=0000000000000031 uValue=00000000000c0a65 'vgabios_init_func'
+vgabios_init_func: ; 0xc0a65 LB 0x31
+ inc bp ; 45 ; 0xc0a65 vgabios.c:250
+ push bp ; 55 ; 0xc0a66
+ mov bp, sp ; 89 e5 ; 0xc0a67
+ call 00a0bh ; e8 9f ff ; 0xc0a69 vgabios.c:252
+ call 00a27h ; e8 b8 ff ; 0xc0a6c vgabios.c:253
+ call 03each ; e8 3a 34 ; 0xc0a6f vgabios.c:255
+ mov bx, strict word 00028h ; bb 28 00 ; 0xc0a72 vgabios.c:257
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0a75
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc0a78
+ call 009f0h ; e8 72 ff ; 0xc0a7b
+ mov bx, strict word 00028h ; bb 28 00 ; 0xc0a7e vgabios.c:258
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0a81
+ mov ax, strict word 0006dh ; b8 6d 00 ; 0xc0a84
+ call 009f0h ; e8 66 ff ; 0xc0a87
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc0a8a vgabios.c:284
+ db 032h, 0e4h
+ ; xor ah, ah ; 32 e4 ; 0xc0a8d
+ int 010h ; cd 10 ; 0xc0a8f
+ mov sp, bp ; 89 ec ; 0xc0a91 vgabios.c:287
+ pop bp ; 5d ; 0xc0a93
+ dec bp ; 4d ; 0xc0a94
+ retf ; cb ; 0xc0a95
+ ; disGetNextSymbol 0xc0a96 LB 0x3a9c -> off=0x0 cb=0000000000000040 uValue=00000000000c0a96 'vga_get_cursor_pos'
+vga_get_cursor_pos: ; 0xc0a96 LB 0x40
+ push si ; 56 ; 0xc0a96 vgabios.c:356
+ push di ; 57 ; 0xc0a97
+ push bp ; 55 ; 0xc0a98
+ mov bp, sp ; 89 e5 ; 0xc0a99
+ mov si, dx ; 89 d6 ; 0xc0a9b
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc0a9d vgabios.c:358
+ jbe short 00aafh ; 76 0e ; 0xc0a9f
+ push SS ; 16 ; 0xc0aa1 vgabios.c:359
+ pop ES ; 07 ; 0xc0aa2
+ mov word [es:si], strict word 00000h ; 26 c7 04 00 00 ; 0xc0aa3
+ mov word [es:bx], strict word 00000h ; 26 c7 07 00 00 ; 0xc0aa8 vgabios.c:360
+ jmp short 00ad2h ; eb 23 ; 0xc0aad vgabios.c:361
+ mov di, strict word 00060h ; bf 60 00 ; 0xc0aaf vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc0ab2
+ mov es, dx ; 8e c2 ; 0xc0ab5
+ mov di, word [es:di] ; 26 8b 3d ; 0xc0ab7
+ push SS ; 16 ; 0xc0aba vgabios.c:58
+ pop ES ; 07 ; 0xc0abb
+ mov word [es:si], di ; 26 89 3c ; 0xc0abc
+ xor ah, ah ; 30 e4 ; 0xc0abf vgabios.c:364
+ mov si, ax ; 89 c6 ; 0xc0ac1
+ add si, ax ; 01 c6 ; 0xc0ac3
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc0ac5
+ mov es, dx ; 8e c2 ; 0xc0ac8 vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc0aca
+ push SS ; 16 ; 0xc0acd vgabios.c:58
+ pop ES ; 07 ; 0xc0ace
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0acf
+ pop bp ; 5d ; 0xc0ad2 vgabios.c:366
+ pop di ; 5f ; 0xc0ad3
+ pop si ; 5e ; 0xc0ad4
+ retn ; c3 ; 0xc0ad5
+ ; disGetNextSymbol 0xc0ad6 LB 0x3a5c -> off=0x0 cb=000000000000005e uValue=00000000000c0ad6 'vga_find_glyph'
+vga_find_glyph: ; 0xc0ad6 LB 0x5e
+ push bp ; 55 ; 0xc0ad6 vgabios.c:369
+ mov bp, sp ; 89 e5 ; 0xc0ad7
+ push si ; 56 ; 0xc0ad9
+ push di ; 57 ; 0xc0ada
+ push ax ; 50 ; 0xc0adb
+ push ax ; 50 ; 0xc0adc
+ push dx ; 52 ; 0xc0add
+ push bx ; 53 ; 0xc0ade
+ mov bl, cl ; 88 cb ; 0xc0adf
+ mov word [bp-006h], strict word 00000h ; c7 46 fa 00 00 ; 0xc0ae1 vgabios.c:371
+ dec word [bp+004h] ; ff 4e 04 ; 0xc0ae6 vgabios.c:373
+ cmp word [bp+004h], strict byte 0ffffh ; 83 7e 04 ff ; 0xc0ae9
+ je short 00b28h ; 74 39 ; 0xc0aed
+ mov cl, byte [bp+006h] ; 8a 4e 06 ; 0xc0aef vgabios.c:374
+ xor ch, ch ; 30 ed ; 0xc0af2
+ mov dx, ss ; 8c d2 ; 0xc0af4
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc0af6
+ mov di, word [bp-008h] ; 8b 7e f8 ; 0xc0af9
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc0afc
+ push DS ; 1e ; 0xc0aff
+ mov ds, dx ; 8e da ; 0xc0b00
+ rep cmpsb ; f3 a6 ; 0xc0b02
+ pop DS ; 1f ; 0xc0b04
+ mov ax, strict word 00000h ; b8 00 00 ; 0xc0b05
+ je short 00b0ch ; 74 02 ; 0xc0b08
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc0b0a
+ test ax, ax ; 85 c0 ; 0xc0b0c
+ jne short 00b1ch ; 75 0c ; 0xc0b0e
+ mov al, bl ; 88 d8 ; 0xc0b10 vgabios.c:375
+ xor ah, ah ; 30 e4 ; 0xc0b12
+ or ah, 080h ; 80 cc 80 ; 0xc0b14
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0b17
+ jmp short 00b28h ; eb 0c ; 0xc0b1a vgabios.c:376
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc0b1c vgabios.c:378
+ xor ah, ah ; 30 e4 ; 0xc0b1f
+ add word [bp-008h], ax ; 01 46 f8 ; 0xc0b21
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc0b24 vgabios.c:379
+ jmp short 00ae6h ; eb be ; 0xc0b26 vgabios.c:380
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc0b28 vgabios.c:382
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0b2b
+ pop di ; 5f ; 0xc0b2e
+ pop si ; 5e ; 0xc0b2f
+ pop bp ; 5d ; 0xc0b30
+ retn 00004h ; c2 04 00 ; 0xc0b31
+ ; disGetNextSymbol 0xc0b34 LB 0x39fe -> off=0x0 cb=0000000000000046 uValue=00000000000c0b34 'vga_read_glyph_planar'
+vga_read_glyph_planar: ; 0xc0b34 LB 0x46
+ push bp ; 55 ; 0xc0b34 vgabios.c:384
+ mov bp, sp ; 89 e5 ; 0xc0b35
+ push si ; 56 ; 0xc0b37
+ push di ; 57 ; 0xc0b38
+ push ax ; 50 ; 0xc0b39
+ push ax ; 50 ; 0xc0b3a
+ mov si, ax ; 89 c6 ; 0xc0b3b
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc0b3d
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc0b40
+ mov bx, cx ; 89 cb ; 0xc0b43
+ mov ax, 00805h ; b8 05 08 ; 0xc0b45 vgabios.c:391
+ mov dx, 003ceh ; ba ce 03 ; 0xc0b48
+ out DX, ax ; ef ; 0xc0b4b
+ dec byte [bp+004h] ; fe 4e 04 ; 0xc0b4c vgabios.c:393
+ cmp byte [bp+004h], 0ffh ; 80 7e 04 ff ; 0xc0b4f
+ je short 00b6ah ; 74 15 ; 0xc0b53
+ mov es, [bp-006h] ; 8e 46 fa ; 0xc0b55 vgabios.c:394
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc0b58
+ not al ; f6 d0 ; 0xc0b5b
+ mov di, bx ; 89 df ; 0xc0b5d
+ inc bx ; 43 ; 0xc0b5f
+ push SS ; 16 ; 0xc0b60
+ pop ES ; 07 ; 0xc0b61
+ mov byte [es:di], al ; 26 88 05 ; 0xc0b62
+ add si, word [bp-008h] ; 03 76 f8 ; 0xc0b65 vgabios.c:395
+ jmp short 00b4ch ; eb e2 ; 0xc0b68 vgabios.c:396
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0b6a vgabios.c:399
+ mov dx, 003ceh ; ba ce 03 ; 0xc0b6d
+ out DX, ax ; ef ; 0xc0b70
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0b71 vgabios.c:400
+ pop di ; 5f ; 0xc0b74
+ pop si ; 5e ; 0xc0b75
+ pop bp ; 5d ; 0xc0b76
+ retn 00002h ; c2 02 00 ; 0xc0b77
+ ; disGetNextSymbol 0xc0b7a LB 0x39b8 -> off=0x0 cb=000000000000002f uValue=00000000000c0b7a 'vga_char_ofs_planar'
+vga_char_ofs_planar: ; 0xc0b7a LB 0x2f
+ push si ; 56 ; 0xc0b7a vgabios.c:402
+ push bp ; 55 ; 0xc0b7b
+ mov bp, sp ; 89 e5 ; 0xc0b7c
+ mov ch, al ; 88 c5 ; 0xc0b7e
+ mov al, dl ; 88 d0 ; 0xc0b80
+ xor ah, ah ; 30 e4 ; 0xc0b82 vgabios.c:406
+ mul bx ; f7 e3 ; 0xc0b84
+ mov bl, byte [bp+006h] ; 8a 5e 06 ; 0xc0b86
+ xor bh, bh ; 30 ff ; 0xc0b89
+ mul bx ; f7 e3 ; 0xc0b8b
+ mov bl, ch ; 88 eb ; 0xc0b8d
+ add bx, ax ; 01 c3 ; 0xc0b8f
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc0b91 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0b94
+ mov es, ax ; 8e c0 ; 0xc0b97
+ mov si, word [es:si] ; 26 8b 34 ; 0xc0b99
+ mov al, cl ; 88 c8 ; 0xc0b9c vgabios.c:58
+ xor ah, ah ; 30 e4 ; 0xc0b9e
+ mul si ; f7 e6 ; 0xc0ba0
+ add ax, bx ; 01 d8 ; 0xc0ba2
+ pop bp ; 5d ; 0xc0ba4 vgabios.c:410
+ pop si ; 5e ; 0xc0ba5
+ retn 00002h ; c2 02 00 ; 0xc0ba6
+ ; disGetNextSymbol 0xc0ba9 LB 0x3989 -> off=0x0 cb=0000000000000040 uValue=00000000000c0ba9 'vga_read_char_planar'
+vga_read_char_planar: ; 0xc0ba9 LB 0x40
+ push bp ; 55 ; 0xc0ba9 vgabios.c:412
+ mov bp, sp ; 89 e5 ; 0xc0baa
+ push cx ; 51 ; 0xc0bac
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc0bad
+ mov byte [bp-004h], bl ; 88 5e fc ; 0xc0bb0 vgabios.c:416
+ mov byte [bp-003h], 000h ; c6 46 fd 00 ; 0xc0bb3
+ push word [bp-004h] ; ff 76 fc ; 0xc0bb7
+ lea cx, [bp-014h] ; 8d 4e ec ; 0xc0bba
+ mov bx, ax ; 89 c3 ; 0xc0bbd
+ mov ax, dx ; 89 d0 ; 0xc0bbf
+ mov dx, 0a000h ; ba 00 a0 ; 0xc0bc1
+ call 00b34h ; e8 6d ff ; 0xc0bc4
+ push word [bp-004h] ; ff 76 fc ; 0xc0bc7 vgabios.c:419
+ push 00100h ; 68 00 01 ; 0xc0bca
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0bcd vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0bd0
+ mov es, ax ; 8e c0 ; 0xc0bd2
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0bd4
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0bd7
+ xor cx, cx ; 31 c9 ; 0xc0bdb vgabios.c:68
+ lea bx, [bp-014h] ; 8d 5e ec ; 0xc0bdd
+ call 00ad6h ; e8 f3 fe ; 0xc0be0
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc0be3 vgabios.c:420
+ pop cx ; 59 ; 0xc0be6
+ pop bp ; 5d ; 0xc0be7
+ retn ; c3 ; 0xc0be8
+ ; disGetNextSymbol 0xc0be9 LB 0x3949 -> off=0x0 cb=0000000000000024 uValue=00000000000c0be9 'vga_char_ofs_linear'
+vga_char_ofs_linear: ; 0xc0be9 LB 0x24
+ enter 00002h, 000h ; c8 02 00 00 ; 0xc0be9 vgabios.c:422
+ mov byte [bp-002h], al ; 88 46 fe ; 0xc0bed
+ mov al, dl ; 88 d0 ; 0xc0bf0 vgabios.c:426
+ xor ah, ah ; 30 e4 ; 0xc0bf2
+ mul bx ; f7 e3 ; 0xc0bf4
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc0bf6
+ xor dh, dh ; 30 f6 ; 0xc0bf9
+ mul dx ; f7 e2 ; 0xc0bfb
+ mov dx, ax ; 89 c2 ; 0xc0bfd
+ mov al, byte [bp-002h] ; 8a 46 fe ; 0xc0bff
+ xor ah, ah ; 30 e4 ; 0xc0c02
+ add ax, dx ; 01 d0 ; 0xc0c04
+ sal ax, 003h ; c1 e0 03 ; 0xc0c06 vgabios.c:427
+ leave ; c9 ; 0xc0c09 vgabios.c:429
+ retn 00002h ; c2 02 00 ; 0xc0c0a
+ ; disGetNextSymbol 0xc0c0d LB 0x3925 -> off=0x0 cb=000000000000004b uValue=00000000000c0c0d 'vga_read_glyph_linear'
+vga_read_glyph_linear: ; 0xc0c0d LB 0x4b
+ push si ; 56 ; 0xc0c0d vgabios.c:431
+ push di ; 57 ; 0xc0c0e
+ enter 00004h, 000h ; c8 04 00 00 ; 0xc0c0f
+ mov si, ax ; 89 c6 ; 0xc0c13
+ mov word [bp-002h], dx ; 89 56 fe ; 0xc0c15
+ mov word [bp-004h], bx ; 89 5e fc ; 0xc0c18
+ mov bx, cx ; 89 cb ; 0xc0c1b
+ dec byte [bp+008h] ; fe 4e 08 ; 0xc0c1d vgabios.c:437
+ cmp byte [bp+008h], 0ffh ; 80 7e 08 ff ; 0xc0c20
+ je short 00c52h ; 74 2c ; 0xc0c24
+ xor dh, dh ; 30 f6 ; 0xc0c26 vgabios.c:438
+ mov DL, strict byte 080h ; b2 80 ; 0xc0c28 vgabios.c:439
+ xor ax, ax ; 31 c0 ; 0xc0c2a vgabios.c:440
+ jmp short 00c33h ; eb 05 ; 0xc0c2c
+ cmp ax, strict word 00008h ; 3d 08 00 ; 0xc0c2e
+ jnl short 00c47h ; 7d 14 ; 0xc0c31
+ mov es, [bp-002h] ; 8e 46 fe ; 0xc0c33 vgabios.c:441
+ mov di, si ; 89 f7 ; 0xc0c36
+ add di, ax ; 01 c7 ; 0xc0c38
+ cmp byte [es:di], 000h ; 26 80 3d 00 ; 0xc0c3a
+ je short 00c42h ; 74 02 ; 0xc0c3e
+ or dh, dl ; 08 d6 ; 0xc0c40 vgabios.c:442
+ shr dl, 1 ; d0 ea ; 0xc0c42 vgabios.c:443
+ inc ax ; 40 ; 0xc0c44 vgabios.c:444
+ jmp short 00c2eh ; eb e7 ; 0xc0c45
+ mov di, bx ; 89 df ; 0xc0c47 vgabios.c:445
+ inc bx ; 43 ; 0xc0c49
+ mov byte [ss:di], dh ; 36 88 35 ; 0xc0c4a
+ add si, word [bp-004h] ; 03 76 fc ; 0xc0c4d vgabios.c:446
+ jmp short 00c1dh ; eb cb ; 0xc0c50 vgabios.c:447
+ leave ; c9 ; 0xc0c52 vgabios.c:448
+ pop di ; 5f ; 0xc0c53
+ pop si ; 5e ; 0xc0c54
+ retn 00002h ; c2 02 00 ; 0xc0c55
+ ; disGetNextSymbol 0xc0c58 LB 0x38da -> off=0x0 cb=0000000000000045 uValue=00000000000c0c58 'vga_read_char_linear'
+vga_read_char_linear: ; 0xc0c58 LB 0x45
+ push bp ; 55 ; 0xc0c58 vgabios.c:450
+ mov bp, sp ; 89 e5 ; 0xc0c59
+ push cx ; 51 ; 0xc0c5b
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc0c5c
+ mov cx, ax ; 89 c1 ; 0xc0c5f
+ mov ax, dx ; 89 d0 ; 0xc0c61
+ mov byte [bp-004h], bl ; 88 5e fc ; 0xc0c63 vgabios.c:454
+ mov byte [bp-003h], 000h ; c6 46 fd 00 ; 0xc0c66
+ push word [bp-004h] ; ff 76 fc ; 0xc0c6a
+ mov bx, cx ; 89 cb ; 0xc0c6d
+ sal bx, 003h ; c1 e3 03 ; 0xc0c6f
+ lea cx, [bp-014h] ; 8d 4e ec ; 0xc0c72
+ mov dx, 0a000h ; ba 00 a0 ; 0xc0c75
+ call 00c0dh ; e8 92 ff ; 0xc0c78
+ push word [bp-004h] ; ff 76 fc ; 0xc0c7b vgabios.c:457
+ push 00100h ; 68 00 01 ; 0xc0c7e
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0c81 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0c84
+ mov es, ax ; 8e c0 ; 0xc0c86
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0c88
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0c8b
+ xor cx, cx ; 31 c9 ; 0xc0c8f vgabios.c:68
+ lea bx, [bp-014h] ; 8d 5e ec ; 0xc0c91
+ call 00ad6h ; e8 3f fe ; 0xc0c94
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc0c97 vgabios.c:458
+ pop cx ; 59 ; 0xc0c9a
+ pop bp ; 5d ; 0xc0c9b
+ retn ; c3 ; 0xc0c9c
+ ; disGetNextSymbol 0xc0c9d LB 0x3895 -> off=0x0 cb=0000000000000035 uValue=00000000000c0c9d 'vga_read_2bpp_char'
+vga_read_2bpp_char: ; 0xc0c9d LB 0x35
+ push bp ; 55 ; 0xc0c9d vgabios.c:460
+ mov bp, sp ; 89 e5 ; 0xc0c9e
+ push bx ; 53 ; 0xc0ca0
+ push cx ; 51 ; 0xc0ca1
+ mov bx, ax ; 89 c3 ; 0xc0ca2
+ mov es, dx ; 8e c2 ; 0xc0ca4
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0ca6 vgabios.c:466
+ mov DH, strict byte 080h ; b6 80 ; 0xc0ca9 vgabios.c:467
+ xor dl, dl ; 30 d2 ; 0xc0cab vgabios.c:468
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0cad vgabios.c:469
+ xchg ah, al ; 86 c4 ; 0xc0cb0
+ xor bx, bx ; 31 db ; 0xc0cb2 vgabios.c:471
+ jmp short 00cbbh ; eb 05 ; 0xc0cb4
+ cmp bx, strict byte 00008h ; 83 fb 08 ; 0xc0cb6
+ jnl short 00cc9h ; 7d 0e ; 0xc0cb9
+ test ax, cx ; 85 c8 ; 0xc0cbb vgabios.c:472
+ je short 00cc1h ; 74 02 ; 0xc0cbd
+ or dl, dh ; 08 f2 ; 0xc0cbf vgabios.c:473
+ shr dh, 1 ; d0 ee ; 0xc0cc1 vgabios.c:474
+ shr cx, 002h ; c1 e9 02 ; 0xc0cc3 vgabios.c:475
+ inc bx ; 43 ; 0xc0cc6 vgabios.c:476
+ jmp short 00cb6h ; eb ed ; 0xc0cc7
+ mov al, dl ; 88 d0 ; 0xc0cc9 vgabios.c:478
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0ccb
+ pop cx ; 59 ; 0xc0cce
+ pop bx ; 5b ; 0xc0ccf
+ pop bp ; 5d ; 0xc0cd0
+ retn ; c3 ; 0xc0cd1
+ ; disGetNextSymbol 0xc0cd2 LB 0x3860 -> off=0x0 cb=0000000000000084 uValue=00000000000c0cd2 'vga_read_glyph_cga'
+vga_read_glyph_cga: ; 0xc0cd2 LB 0x84
+ push bp ; 55 ; 0xc0cd2 vgabios.c:480
+ mov bp, sp ; 89 e5 ; 0xc0cd3
+ push cx ; 51 ; 0xc0cd5
+ push si ; 56 ; 0xc0cd6
+ push di ; 57 ; 0xc0cd7
+ push ax ; 50 ; 0xc0cd8
+ mov si, dx ; 89 d6 ; 0xc0cd9
+ cmp bl, 006h ; 80 fb 06 ; 0xc0cdb vgabios.c:488
+ je short 00d1ah ; 74 3a ; 0xc0cde
+ mov bx, ax ; 89 c3 ; 0xc0ce0 vgabios.c:490
+ add bx, ax ; 01 c3 ; 0xc0ce2
+ mov word [bp-008h], 0b800h ; c7 46 f8 00 b8 ; 0xc0ce4
+ xor cx, cx ; 31 c9 ; 0xc0ce9 vgabios.c:492
+ jmp short 00cf2h ; eb 05 ; 0xc0ceb
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc0ced
+ jnl short 00d4eh ; 7d 5c ; 0xc0cf0
+ mov ax, bx ; 89 d8 ; 0xc0cf2 vgabios.c:493
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc0cf4
+ call 00c9dh ; e8 a3 ff ; 0xc0cf7
+ mov di, si ; 89 f7 ; 0xc0cfa
+ inc si ; 46 ; 0xc0cfc
+ push SS ; 16 ; 0xc0cfd
+ pop ES ; 07 ; 0xc0cfe
+ mov byte [es:di], al ; 26 88 05 ; 0xc0cff
+ lea ax, [bx+02000h] ; 8d 87 00 20 ; 0xc0d02 vgabios.c:494
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc0d06
+ call 00c9dh ; e8 91 ff ; 0xc0d09
+ mov di, si ; 89 f7 ; 0xc0d0c
+ inc si ; 46 ; 0xc0d0e
+ push SS ; 16 ; 0xc0d0f
+ pop ES ; 07 ; 0xc0d10
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d11
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc0d14 vgabios.c:495
+ inc cx ; 41 ; 0xc0d17 vgabios.c:496
+ jmp short 00cedh ; eb d3 ; 0xc0d18
+ mov bx, ax ; 89 c3 ; 0xc0d1a vgabios.c:498
+ mov word [bp-008h], 0b800h ; c7 46 f8 00 b8 ; 0xc0d1c
+ xor cx, cx ; 31 c9 ; 0xc0d21 vgabios.c:499
+ jmp short 00d2ah ; eb 05 ; 0xc0d23
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc0d25
+ jnl short 00d4eh ; 7d 24 ; 0xc0d28
+ mov di, si ; 89 f7 ; 0xc0d2a vgabios.c:500
+ inc si ; 46 ; 0xc0d2c
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc0d2d
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0d30
+ push SS ; 16 ; 0xc0d33
+ pop ES ; 07 ; 0xc0d34
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d35
+ mov di, si ; 89 f7 ; 0xc0d38 vgabios.c:501
+ inc si ; 46 ; 0xc0d3a
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc0d3b
+ mov al, byte [es:bx+02000h] ; 26 8a 87 00 20 ; 0xc0d3e
+ push SS ; 16 ; 0xc0d43
+ pop ES ; 07 ; 0xc0d44
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d45
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc0d48 vgabios.c:502
+ inc cx ; 41 ; 0xc0d4b vgabios.c:503
+ jmp short 00d25h ; eb d7 ; 0xc0d4c
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc0d4e vgabios.c:505
+ pop di ; 5f ; 0xc0d51
+ pop si ; 5e ; 0xc0d52
+ pop cx ; 59 ; 0xc0d53
+ pop bp ; 5d ; 0xc0d54
+ retn ; c3 ; 0xc0d55
+ ; disGetNextSymbol 0xc0d56 LB 0x37dc -> off=0x0 cb=000000000000001a uValue=00000000000c0d56 'vga_char_ofs_cga'
+vga_char_ofs_cga: ; 0xc0d56 LB 0x1a
+ push cx ; 51 ; 0xc0d56 vgabios.c:507
+ push bp ; 55 ; 0xc0d57
+ mov bp, sp ; 89 e5 ; 0xc0d58
+ mov cl, al ; 88 c1 ; 0xc0d5a
+ mov al, dl ; 88 d0 ; 0xc0d5c
+ xor ah, ah ; 30 e4 ; 0xc0d5e vgabios.c:512
+ mul bx ; f7 e3 ; 0xc0d60
+ mov bx, ax ; 89 c3 ; 0xc0d62
+ sal bx, 002h ; c1 e3 02 ; 0xc0d64
+ mov al, cl ; 88 c8 ; 0xc0d67
+ xor ah, ah ; 30 e4 ; 0xc0d69
+ add ax, bx ; 01 d8 ; 0xc0d6b
+ pop bp ; 5d ; 0xc0d6d vgabios.c:513
+ pop cx ; 59 ; 0xc0d6e
+ retn ; c3 ; 0xc0d6f
+ ; disGetNextSymbol 0xc0d70 LB 0x37c2 -> off=0x0 cb=0000000000000066 uValue=00000000000c0d70 'vga_read_char_cga'
+vga_read_char_cga: ; 0xc0d70 LB 0x66
+ push bp ; 55 ; 0xc0d70 vgabios.c:515
+ mov bp, sp ; 89 e5 ; 0xc0d71
+ push bx ; 53 ; 0xc0d73
+ push cx ; 51 ; 0xc0d74
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc0d75
+ mov bl, dl ; 88 d3 ; 0xc0d78 vgabios.c:521
+ xor bh, bh ; 30 ff ; 0xc0d7a
+ lea dx, [bp-00eh] ; 8d 56 f2 ; 0xc0d7c
+ call 00cd2h ; e8 50 ff ; 0xc0d7f
+ push strict byte 00008h ; 6a 08 ; 0xc0d82 vgabios.c:524
+ push 00080h ; 68 80 00 ; 0xc0d84
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0d87 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0d8a
+ mov es, ax ; 8e c0 ; 0xc0d8c
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0d8e
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0d91
+ xor cx, cx ; 31 c9 ; 0xc0d95 vgabios.c:68
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc0d97
+ call 00ad6h ; e8 39 fd ; 0xc0d9a
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0d9d
+ test ah, 080h ; f6 c4 80 ; 0xc0da0 vgabios.c:526
+ jne short 00dcch ; 75 27 ; 0xc0da3
+ mov bx, strict word 0007ch ; bb 7c 00 ; 0xc0da5 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0da8
+ mov es, ax ; 8e c0 ; 0xc0daa
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0dac
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0daf
+ test dx, dx ; 85 d2 ; 0xc0db3 vgabios.c:530
+ jne short 00dbbh ; 75 04 ; 0xc0db5
+ test ax, ax ; 85 c0 ; 0xc0db7
+ je short 00dcch ; 74 11 ; 0xc0db9
+ push strict byte 00008h ; 6a 08 ; 0xc0dbb vgabios.c:531
+ push 00080h ; 68 80 00 ; 0xc0dbd
+ mov cx, 00080h ; b9 80 00 ; 0xc0dc0
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc0dc3
+ call 00ad6h ; e8 0d fd ; 0xc0dc6
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0dc9
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc0dcc vgabios.c:534
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0dcf
+ pop cx ; 59 ; 0xc0dd2
+ pop bx ; 5b ; 0xc0dd3
+ pop bp ; 5d ; 0xc0dd4
+ retn ; c3 ; 0xc0dd5
+ ; disGetNextSymbol 0xc0dd6 LB 0x375c -> off=0x0 cb=0000000000000130 uValue=00000000000c0dd6 'vga_read_char_attr'
+vga_read_char_attr: ; 0xc0dd6 LB 0x130
+ push bp ; 55 ; 0xc0dd6 vgabios.c:536
+ mov bp, sp ; 89 e5 ; 0xc0dd7
+ push bx ; 53 ; 0xc0dd9
+ push cx ; 51 ; 0xc0dda
+ push si ; 56 ; 0xc0ddb
+ push di ; 57 ; 0xc0ddc
+ sub sp, strict byte 00014h ; 83 ec 14 ; 0xc0ddd
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc0de0
+ mov si, dx ; 89 d6 ; 0xc0de3
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0de5 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0de8
+ mov es, ax ; 8e c0 ; 0xc0deb
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0ded
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc0df0 vgabios.c:48
+ xor ah, ah ; 30 e4 ; 0xc0df3 vgabios.c:544
+ call 03819h ; e8 21 2a ; 0xc0df5
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc0df8
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc0dfb vgabios.c:545
+ jne short 00e02h ; 75 03 ; 0xc0dfd
+ jmp near 00efdh ; e9 fb 00 ; 0xc0dff
+ mov cl, byte [bp-00eh] ; 8a 4e f2 ; 0xc0e02 vgabios.c:549
+ xor ch, ch ; 30 ed ; 0xc0e05
+ lea bx, [bp-01ch] ; 8d 5e e4 ; 0xc0e07
+ lea dx, [bp-01ah] ; 8d 56 e6 ; 0xc0e0a
+ mov ax, cx ; 89 c8 ; 0xc0e0d
+ call 00a96h ; e8 84 fc ; 0xc0e0f
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc0e12 vgabios.c:550
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc0e15
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc0e18 vgabios.c:551
+ xor al, al ; 30 c0 ; 0xc0e1b
+ shr ax, 008h ; c1 e8 08 ; 0xc0e1d
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc0e20
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc0e23
+ mov bx, 00084h ; bb 84 00 ; 0xc0e26 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0e29
+ mov es, ax ; 8e c0 ; 0xc0e2c
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0e2e
+ xor ah, ah ; 30 e4 ; 0xc0e31 vgabios.c:48
+ inc ax ; 40 ; 0xc0e33
+ mov word [bp-014h], ax ; 89 46 ec ; 0xc0e34
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc0e37 vgabios.c:57
+ mov di, word [es:di] ; 26 8b 3d ; 0xc0e3a
+ mov word [bp-018h], di ; 89 7e e8 ; 0xc0e3d vgabios.c:58
+ mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc0e40 vgabios.c:557
+ xor bh, bh ; 30 ff ; 0xc0e43
+ sal bx, 003h ; c1 e3 03 ; 0xc0e45
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc0e48
+ jne short 00e7fh ; 75 30 ; 0xc0e4d
+ mov ax, di ; 89 f8 ; 0xc0e4f vgabios.c:559
+ mul word [bp-014h] ; f7 66 ec ; 0xc0e51
+ add ax, ax ; 01 c0 ; 0xc0e54
+ or AL, strict byte 0ffh ; 0c ff ; 0xc0e56
+ inc ax ; 40 ; 0xc0e58
+ mul cx ; f7 e1 ; 0xc0e59
+ mov cx, ax ; 89 c1 ; 0xc0e5b
+ mov al, byte [bp-016h] ; 8a 46 ea ; 0xc0e5d
+ xor ah, ah ; 30 e4 ; 0xc0e60
+ mul di ; f7 e7 ; 0xc0e62
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc0e64
+ xor dh, dh ; 30 f6 ; 0xc0e67
+ mov di, ax ; 89 c7 ; 0xc0e69
+ add di, dx ; 01 d7 ; 0xc0e6b
+ add di, di ; 01 ff ; 0xc0e6d
+ add di, cx ; 01 cf ; 0xc0e6f
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc0e71 vgabios.c:55
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc0e75
+ push SS ; 16 ; 0xc0e78 vgabios.c:58
+ pop ES ; 07 ; 0xc0e79
+ mov word [es:si], ax ; 26 89 04 ; 0xc0e7a
+ jmp short 00dffh ; eb 80 ; 0xc0e7d vgabios.c:561
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc0e7f vgabios.c:562
+ cmp bl, 005h ; 80 fb 05 ; 0xc0e83
+ je short 00ed6h ; 74 4e ; 0xc0e86
+ cmp bl, 002h ; 80 fb 02 ; 0xc0e88
+ jc short 00efdh ; 72 70 ; 0xc0e8b
+ jbe short 00e96h ; 76 07 ; 0xc0e8d
+ cmp bl, 004h ; 80 fb 04 ; 0xc0e8f
+ jbe short 00eafh ; 76 1b ; 0xc0e92
+ jmp short 00efdh ; eb 67 ; 0xc0e94
+ xor dh, dh ; 30 f6 ; 0xc0e96 vgabios.c:565
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc0e98
+ xor ah, ah ; 30 e4 ; 0xc0e9b
+ mov bx, word [bp-018h] ; 8b 5e e8 ; 0xc0e9d
+ call 00d56h ; e8 b3 fe ; 0xc0ea0
+ mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc0ea3 vgabios.c:566
+ xor dh, dh ; 30 f6 ; 0xc0ea6
+ call 00d70h ; e8 c5 fe ; 0xc0ea8
+ xor ah, ah ; 30 e4 ; 0xc0eab
+ jmp short 00e78h ; eb c9 ; 0xc0ead
+ mov bx, 00085h ; bb 85 00 ; 0xc0eaf vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0eb2
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc0eb5 vgabios.c:571
+ mov byte [bp-011h], ch ; 88 6e ef ; 0xc0eb8
+ push word [bp-012h] ; ff 76 ee ; 0xc0ebb
+ xor dh, dh ; 30 f6 ; 0xc0ebe
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc0ec0
+ xor ah, ah ; 30 e4 ; 0xc0ec3
+ mov bx, di ; 89 fb ; 0xc0ec5
+ call 00b7ah ; e8 b0 fc ; 0xc0ec7
+ mov bx, word [bp-012h] ; 8b 5e ee ; 0xc0eca vgabios.c:572
+ mov dx, ax ; 89 c2 ; 0xc0ecd
+ mov ax, di ; 89 f8 ; 0xc0ecf
+ call 00ba9h ; e8 d5 fc ; 0xc0ed1
+ jmp short 00eabh ; eb d5 ; 0xc0ed4
+ mov bx, 00085h ; bb 85 00 ; 0xc0ed6 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0ed9
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc0edc vgabios.c:576
+ mov byte [bp-011h], ch ; 88 6e ef ; 0xc0edf
+ push word [bp-012h] ; ff 76 ee ; 0xc0ee2
+ xor dh, dh ; 30 f6 ; 0xc0ee5
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc0ee7
+ xor ah, ah ; 30 e4 ; 0xc0eea
+ mov bx, di ; 89 fb ; 0xc0eec
+ call 00be9h ; e8 f8 fc ; 0xc0eee
+ mov bx, word [bp-012h] ; 8b 5e ee ; 0xc0ef1 vgabios.c:577
+ mov dx, ax ; 89 c2 ; 0xc0ef4
+ mov ax, di ; 89 f8 ; 0xc0ef6
+ call 00c58h ; e8 5d fd ; 0xc0ef8
+ jmp short 00eabh ; eb ae ; 0xc0efb
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc0efd vgabios.c:586
+ pop di ; 5f ; 0xc0f00
+ pop si ; 5e ; 0xc0f01
+ pop cx ; 59 ; 0xc0f02
+ pop bx ; 5b ; 0xc0f03
+ pop bp ; 5d ; 0xc0f04
+ retn ; c3 ; 0xc0f05
+ ; disGetNextSymbol 0xc0f06 LB 0x362c -> off=0x10 cb=0000000000000083 uValue=00000000000c0f16 'vga_get_font_info'
+ db 02dh, 00fh, 072h, 00fh, 077h, 00fh, 07eh, 00fh, 083h, 00fh, 088h, 00fh, 08dh, 00fh, 092h, 00fh
+vga_get_font_info: ; 0xc0f16 LB 0x83
+ push si ; 56 ; 0xc0f16 vgabios.c:588
+ push di ; 57 ; 0xc0f17
+ push bp ; 55 ; 0xc0f18
+ mov bp, sp ; 89 e5 ; 0xc0f19
+ mov si, dx ; 89 d6 ; 0xc0f1b
+ mov di, bx ; 89 df ; 0xc0f1d
+ cmp ax, strict word 00007h ; 3d 07 00 ; 0xc0f1f vgabios.c:593
+ jnbe short 00f6ch ; 77 48 ; 0xc0f22
+ mov bx, ax ; 89 c3 ; 0xc0f24
+ add bx, ax ; 01 c3 ; 0xc0f26
+ jmp word [cs:bx+00f06h] ; 2e ff a7 06 0f ; 0xc0f28
+ mov bx, strict word 0007ch ; bb 7c 00 ; 0xc0f2d vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0f30
+ mov es, ax ; 8e c0 ; 0xc0f32
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc0f34
+ mov ax, word [es:bx+002h] ; 26 8b 47 02 ; 0xc0f37
+ push SS ; 16 ; 0xc0f3b vgabios.c:596
+ pop ES ; 07 ; 0xc0f3c
+ mov word [es:di], dx ; 26 89 15 ; 0xc0f3d
+ mov word [es:si], ax ; 26 89 04 ; 0xc0f40
+ mov bx, 00085h ; bb 85 00 ; 0xc0f43
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f46
+ mov es, ax ; 8e c0 ; 0xc0f49
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f4b
+ xor ah, ah ; 30 e4 ; 0xc0f4e
+ push SS ; 16 ; 0xc0f50
+ pop ES ; 07 ; 0xc0f51
+ mov bx, cx ; 89 cb ; 0xc0f52
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0f54
+ mov bx, 00084h ; bb 84 00 ; 0xc0f57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f5a
+ mov es, ax ; 8e c0 ; 0xc0f5d
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f5f
+ xor ah, ah ; 30 e4 ; 0xc0f62
+ push SS ; 16 ; 0xc0f64
+ pop ES ; 07 ; 0xc0f65
+ mov bx, word [bp+008h] ; 8b 5e 08 ; 0xc0f66
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0f69
+ pop bp ; 5d ; 0xc0f6c
+ pop di ; 5f ; 0xc0f6d
+ pop si ; 5e ; 0xc0f6e
+ retn 00002h ; c2 02 00 ; 0xc0f6f
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0f72 vgabios.c:67
+ jmp short 00f30h ; eb b9 ; 0xc0f75
+ mov dx, 05d6ch ; ba 6c 5d ; 0xc0f77 vgabios.c:601
+ mov ax, ds ; 8c d8 ; 0xc0f7a
+ jmp short 00f3bh ; eb bd ; 0xc0f7c vgabios.c:602
+ mov dx, 0556ch ; ba 6c 55 ; 0xc0f7e vgabios.c:604
+ jmp short 00f7ah ; eb f7 ; 0xc0f81
+ mov dx, 0596ch ; ba 6c 59 ; 0xc0f83 vgabios.c:607
+ jmp short 00f7ah ; eb f2 ; 0xc0f86
+ mov dx, 07b6ch ; ba 6c 7b ; 0xc0f88 vgabios.c:610
+ jmp short 00f7ah ; eb ed ; 0xc0f8b
+ mov dx, 06b6ch ; ba 6c 6b ; 0xc0f8d vgabios.c:613
+ jmp short 00f7ah ; eb e8 ; 0xc0f90
+ mov dx, 07c99h ; ba 99 7c ; 0xc0f92 vgabios.c:616
+ jmp short 00f7ah ; eb e3 ; 0xc0f95
+ jmp short 00f6ch ; eb d3 ; 0xc0f97 vgabios.c:622
+ ; disGetNextSymbol 0xc0f99 LB 0x3599 -> off=0x0 cb=0000000000000166 uValue=00000000000c0f99 'vga_read_pixel'
+vga_read_pixel: ; 0xc0f99 LB 0x166
+ push bp ; 55 ; 0xc0f99 vgabios.c:635
+ mov bp, sp ; 89 e5 ; 0xc0f9a
+ push si ; 56 ; 0xc0f9c
+ push di ; 57 ; 0xc0f9d
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc0f9e
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc0fa1
+ mov si, dx ; 89 d6 ; 0xc0fa4
+ mov dx, bx ; 89 da ; 0xc0fa6
+ mov word [bp-00ch], cx ; 89 4e f4 ; 0xc0fa8
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0fab vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0fae
+ mov es, ax ; 8e c0 ; 0xc0fb1
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0fb3
+ xor ah, ah ; 30 e4 ; 0xc0fb6 vgabios.c:642
+ call 03819h ; e8 5e 28 ; 0xc0fb8
+ mov ah, al ; 88 c4 ; 0xc0fbb
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc0fbd vgabios.c:643
+ je short 00fcfh ; 74 0e ; 0xc0fbf
+ mov bl, al ; 88 c3 ; 0xc0fc1 vgabios.c:645
+ xor bh, bh ; 30 ff ; 0xc0fc3
+ sal bx, 003h ; c1 e3 03 ; 0xc0fc5
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc0fc8
+ jne short 00fd2h ; 75 03 ; 0xc0fcd
+ jmp near 010f8h ; e9 26 01 ; 0xc0fcf vgabios.c:646
+ mov ch, byte [bx+047b0h] ; 8a af b0 47 ; 0xc0fd2 vgabios.c:649
+ cmp ch, 003h ; 80 fd 03 ; 0xc0fd6
+ jc short 00feah ; 72 0f ; 0xc0fd9
+ jbe short 00ff2h ; 76 15 ; 0xc0fdb
+ cmp ch, 005h ; 80 fd 05 ; 0xc0fdd
+ je short 01029h ; 74 47 ; 0xc0fe0
+ cmp ch, 004h ; 80 fd 04 ; 0xc0fe2
+ je short 00ff2h ; 74 0b ; 0xc0fe5
+ jmp near 010eeh ; e9 04 01 ; 0xc0fe7
+ cmp ch, 002h ; 80 fd 02 ; 0xc0fea
+ je short 01060h ; 74 71 ; 0xc0fed
+ jmp near 010eeh ; e9 fc 00 ; 0xc0fef
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc0ff2 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0ff5
+ mov es, ax ; 8e c0 ; 0xc0ff8
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc0ffa
+ mov ax, dx ; 89 d0 ; 0xc0ffd vgabios.c:58
+ mul bx ; f7 e3 ; 0xc0fff
+ mov bx, si ; 89 f3 ; 0xc1001
+ shr bx, 003h ; c1 eb 03 ; 0xc1003
+ add bx, ax ; 01 c3 ; 0xc1006
+ mov di, strict word 0004ch ; bf 4c 00 ; 0xc1008 vgabios.c:57
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc100b
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc100e vgabios.c:58
+ xor dh, dh ; 30 f6 ; 0xc1011
+ mul dx ; f7 e2 ; 0xc1013
+ add bx, ax ; 01 c3 ; 0xc1015
+ mov cx, si ; 89 f1 ; 0xc1017 vgabios.c:654
+ and cx, strict byte 00007h ; 83 e1 07 ; 0xc1019
+ mov ax, 00080h ; b8 80 00 ; 0xc101c
+ sar ax, CL ; d3 f8 ; 0xc101f
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc1021
+ mov byte [bp-006h], ch ; 88 6e fa ; 0xc1024 vgabios.c:656
+ jmp short 01032h ; eb 09 ; 0xc1027
+ jmp near 010ceh ; e9 a2 00 ; 0xc1029
+ cmp byte [bp-006h], 004h ; 80 7e fa 04 ; 0xc102c
+ jnc short 0105dh ; 73 2b ; 0xc1030
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1032 vgabios.c:657
+ xor ah, ah ; 30 e4 ; 0xc1035
+ sal ax, 008h ; c1 e0 08 ; 0xc1037
+ or AL, strict byte 004h ; 0c 04 ; 0xc103a
+ mov dx, 003ceh ; ba ce 03 ; 0xc103c
+ out DX, ax ; ef ; 0xc103f
+ mov ax, 0a000h ; b8 00 a0 ; 0xc1040 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc1043
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1045
+ and al, byte [bp-008h] ; 22 46 f8 ; 0xc1048 vgabios.c:48
+ test al, al ; 84 c0 ; 0xc104b vgabios.c:659
+ jbe short 01058h ; 76 09 ; 0xc104d
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc104f vgabios.c:660
+ mov AL, strict byte 001h ; b0 01 ; 0xc1052
+ sal al, CL ; d2 e0 ; 0xc1054
+ or ch, al ; 08 c5 ; 0xc1056
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1058 vgabios.c:661
+ jmp short 0102ch ; eb cf ; 0xc105b
+ jmp near 010f0h ; e9 90 00 ; 0xc105d
+ mov cl, byte [bx+047b1h] ; 8a 8f b1 47 ; 0xc1060 vgabios.c:664
+ xor ch, ch ; 30 ed ; 0xc1064
+ mov bx, strict word 00004h ; bb 04 00 ; 0xc1066
+ sub bx, cx ; 29 cb ; 0xc1069
+ mov cx, bx ; 89 d9 ; 0xc106b
+ mov bx, si ; 89 f3 ; 0xc106d
+ shr bx, CL ; d3 eb ; 0xc106f
+ mov cx, bx ; 89 d9 ; 0xc1071
+ mov bx, dx ; 89 d3 ; 0xc1073
+ shr bx, 1 ; d1 eb ; 0xc1075
+ imul bx, bx, strict byte 00050h ; 6b db 50 ; 0xc1077
+ add bx, cx ; 01 cb ; 0xc107a
+ test dl, 001h ; f6 c2 01 ; 0xc107c vgabios.c:665
+ je short 01084h ; 74 03 ; 0xc107f
+ add bh, 020h ; 80 c7 20 ; 0xc1081 vgabios.c:666
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1084 vgabios.c:47
+ mov es, dx ; 8e c2 ; 0xc1087
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1089
+ mov bl, ah ; 88 e3 ; 0xc108c vgabios.c:668
+ xor bh, bh ; 30 ff ; 0xc108e
+ sal bx, 003h ; c1 e3 03 ; 0xc1090
+ cmp byte [bx+047b1h], 002h ; 80 bf b1 47 02 ; 0xc1093
+ jne short 010b5h ; 75 1b ; 0xc1098
+ mov cx, si ; 89 f1 ; 0xc109a vgabios.c:669
+ xor ch, ch ; 30 ed ; 0xc109c
+ and cl, 003h ; 80 e1 03 ; 0xc109e
+ mov dx, strict word 00003h ; ba 03 00 ; 0xc10a1
+ sub dx, cx ; 29 ca ; 0xc10a4
+ mov cx, dx ; 89 d1 ; 0xc10a6
+ add cx, dx ; 01 d1 ; 0xc10a8
+ xor ah, ah ; 30 e4 ; 0xc10aa
+ sar ax, CL ; d3 f8 ; 0xc10ac
+ mov ch, al ; 88 c5 ; 0xc10ae
+ and ch, 003h ; 80 e5 03 ; 0xc10b0
+ jmp short 010f0h ; eb 3b ; 0xc10b3 vgabios.c:670
+ mov cx, si ; 89 f1 ; 0xc10b5 vgabios.c:671
+ xor ch, ch ; 30 ed ; 0xc10b7
+ and cl, 007h ; 80 e1 07 ; 0xc10b9
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc10bc
+ sub dx, cx ; 29 ca ; 0xc10bf
+ mov cx, dx ; 89 d1 ; 0xc10c1
+ xor ah, ah ; 30 e4 ; 0xc10c3
+ sar ax, CL ; d3 f8 ; 0xc10c5
+ mov ch, al ; 88 c5 ; 0xc10c7
+ and ch, 001h ; 80 e5 01 ; 0xc10c9
+ jmp short 010f0h ; eb 22 ; 0xc10cc vgabios.c:672
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc10ce vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc10d1
+ mov es, ax ; 8e c0 ; 0xc10d4
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc10d6
+ sal bx, 003h ; c1 e3 03 ; 0xc10d9 vgabios.c:58
+ mov ax, dx ; 89 d0 ; 0xc10dc
+ mul bx ; f7 e3 ; 0xc10de
+ mov bx, si ; 89 f3 ; 0xc10e0
+ add bx, ax ; 01 c3 ; 0xc10e2
+ mov ax, 0a000h ; b8 00 a0 ; 0xc10e4 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc10e7
+ mov ch, byte [es:bx] ; 26 8a 2f ; 0xc10e9
+ jmp short 010f0h ; eb 02 ; 0xc10ec vgabios.c:676
+ xor ch, ch ; 30 ed ; 0xc10ee vgabios.c:681
+ push SS ; 16 ; 0xc10f0 vgabios.c:683
+ pop ES ; 07 ; 0xc10f1
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc10f2
+ mov byte [es:bx], ch ; 26 88 2f ; 0xc10f5
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc10f8 vgabios.c:684
+ pop di ; 5f ; 0xc10fb
+ pop si ; 5e ; 0xc10fc
+ pop bp ; 5d ; 0xc10fd
+ retn ; c3 ; 0xc10fe
+ ; disGetNextSymbol 0xc10ff LB 0x3433 -> off=0x0 cb=000000000000008d uValue=00000000000c10ff 'biosfn_perform_gray_scale_summing'
+biosfn_perform_gray_scale_summing: ; 0xc10ff LB 0x8d
+ push bp ; 55 ; 0xc10ff vgabios.c:689
+ mov bp, sp ; 89 e5 ; 0xc1100
+ push bx ; 53 ; 0xc1102
+ push cx ; 51 ; 0xc1103
+ push si ; 56 ; 0xc1104
+ push di ; 57 ; 0xc1105
+ push ax ; 50 ; 0xc1106
+ push ax ; 50 ; 0xc1107
+ mov bx, ax ; 89 c3 ; 0xc1108
+ mov di, dx ; 89 d7 ; 0xc110a
+ mov dx, 003dah ; ba da 03 ; 0xc110c vgabios.c:694
+ in AL, DX ; ec ; 0xc110f
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1110
+ xor al, al ; 30 c0 ; 0xc1112 vgabios.c:695
+ mov dx, 003c0h ; ba c0 03 ; 0xc1114
+ out DX, AL ; ee ; 0xc1117
+ xor si, si ; 31 f6 ; 0xc1118 vgabios.c:697
+ cmp si, di ; 39 fe ; 0xc111a
+ jnc short 01171h ; 73 53 ; 0xc111c
+ mov al, bl ; 88 d8 ; 0xc111e vgabios.c:700
+ mov dx, 003c7h ; ba c7 03 ; 0xc1120
+ out DX, AL ; ee ; 0xc1123
+ mov dx, 003c9h ; ba c9 03 ; 0xc1124 vgabios.c:702
+ in AL, DX ; ec ; 0xc1127
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1128
+ mov cx, ax ; 89 c1 ; 0xc112a
+ in AL, DX ; ec ; 0xc112c vgabios.c:703
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc112d
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc112f
+ in AL, DX ; ec ; 0xc1132 vgabios.c:704
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1133
+ xor ch, ch ; 30 ed ; 0xc1135 vgabios.c:707
+ imul cx, cx, strict byte 0004dh ; 6b c9 4d ; 0xc1137
+ mov word [bp-00ah], cx ; 89 4e f6 ; 0xc113a
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc113d
+ xor ch, ch ; 30 ed ; 0xc1140
+ imul cx, cx, 00097h ; 69 c9 97 00 ; 0xc1142
+ add cx, word [bp-00ah] ; 03 4e f6 ; 0xc1146
+ xor ah, ah ; 30 e4 ; 0xc1149
+ imul ax, ax, strict byte 0001ch ; 6b c0 1c ; 0xc114b
+ add cx, ax ; 01 c1 ; 0xc114e
+ add cx, 00080h ; 81 c1 80 00 ; 0xc1150
+ sar cx, 008h ; c1 f9 08 ; 0xc1154
+ cmp cx, strict byte 0003fh ; 83 f9 3f ; 0xc1157 vgabios.c:709
+ jbe short 0115fh ; 76 03 ; 0xc115a
+ mov cx, strict word 0003fh ; b9 3f 00 ; 0xc115c
+ mov al, bl ; 88 d8 ; 0xc115f vgabios.c:712
+ mov dx, 003c8h ; ba c8 03 ; 0xc1161
+ out DX, AL ; ee ; 0xc1164
+ mov al, cl ; 88 c8 ; 0xc1165 vgabios.c:714
+ mov dx, 003c9h ; ba c9 03 ; 0xc1167
+ out DX, AL ; ee ; 0xc116a
+ out DX, AL ; ee ; 0xc116b vgabios.c:715
+ out DX, AL ; ee ; 0xc116c vgabios.c:716
+ inc bx ; 43 ; 0xc116d vgabios.c:717
+ inc si ; 46 ; 0xc116e vgabios.c:718
+ jmp short 0111ah ; eb a9 ; 0xc116f
+ mov dx, 003dah ; ba da 03 ; 0xc1171 vgabios.c:719
+ in AL, DX ; ec ; 0xc1174
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1175
+ mov AL, strict byte 020h ; b0 20 ; 0xc1177 vgabios.c:720
+ mov dx, 003c0h ; ba c0 03 ; 0xc1179
+ out DX, AL ; ee ; 0xc117c
+ mov dx, 003dah ; ba da 03 ; 0xc117d vgabios.c:722
+ in AL, DX ; ec ; 0xc1180
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1181
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc1183 vgabios.c:724
+ pop di ; 5f ; 0xc1186
+ pop si ; 5e ; 0xc1187
+ pop cx ; 59 ; 0xc1188
+ pop bx ; 5b ; 0xc1189
+ pop bp ; 5d ; 0xc118a
+ retn ; c3 ; 0xc118b
+ ; disGetNextSymbol 0xc118c LB 0x33a6 -> off=0x0 cb=0000000000000107 uValue=00000000000c118c 'biosfn_set_cursor_shape'
+biosfn_set_cursor_shape: ; 0xc118c LB 0x107
+ push bp ; 55 ; 0xc118c vgabios.c:727
+ mov bp, sp ; 89 e5 ; 0xc118d
+ push bx ; 53 ; 0xc118f
+ push cx ; 51 ; 0xc1190
+ push si ; 56 ; 0xc1191
+ push ax ; 50 ; 0xc1192
+ push ax ; 50 ; 0xc1193
+ mov bl, al ; 88 c3 ; 0xc1194
+ mov ah, dl ; 88 d4 ; 0xc1196
+ mov dl, al ; 88 c2 ; 0xc1198 vgabios.c:733
+ xor dh, dh ; 30 f6 ; 0xc119a
+ mov cx, dx ; 89 d1 ; 0xc119c
+ sal cx, 008h ; c1 e1 08 ; 0xc119e
+ mov dl, ah ; 88 e2 ; 0xc11a1
+ add dx, cx ; 01 ca ; 0xc11a3
+ mov si, strict word 00060h ; be 60 00 ; 0xc11a5 vgabios.c:62
+ mov cx, strict word 00040h ; b9 40 00 ; 0xc11a8
+ mov es, cx ; 8e c1 ; 0xc11ab
+ mov word [es:si], dx ; 26 89 14 ; 0xc11ad
+ mov si, 00087h ; be 87 00 ; 0xc11b0 vgabios.c:47
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc11b3
+ test dl, 008h ; f6 c2 08 ; 0xc11b6 vgabios.c:48
+ jne short 011f8h ; 75 3d ; 0xc11b9
+ mov dl, al ; 88 c2 ; 0xc11bb vgabios.c:739
+ and dl, 060h ; 80 e2 60 ; 0xc11bd
+ cmp dl, 020h ; 80 fa 20 ; 0xc11c0
+ jne short 011cbh ; 75 06 ; 0xc11c3
+ mov BL, strict byte 01eh ; b3 1e ; 0xc11c5 vgabios.c:741
+ xor ah, ah ; 30 e4 ; 0xc11c7 vgabios.c:742
+ jmp short 011f8h ; eb 2d ; 0xc11c9 vgabios.c:743
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc11cb vgabios.c:47
+ test dl, 001h ; f6 c2 01 ; 0xc11ce vgabios.c:48
+ jne short 0122dh ; 75 5a ; 0xc11d1
+ cmp bl, 020h ; 80 fb 20 ; 0xc11d3
+ jnc short 0122dh ; 73 55 ; 0xc11d6
+ cmp ah, 020h ; 80 fc 20 ; 0xc11d8
+ jnc short 0122dh ; 73 50 ; 0xc11db
+ mov si, 00085h ; be 85 00 ; 0xc11dd vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc11e0
+ mov es, dx ; 8e c2 ; 0xc11e3
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc11e5
+ mov dx, cx ; 89 ca ; 0xc11e8 vgabios.c:58
+ cmp ah, bl ; 38 dc ; 0xc11ea vgabios.c:754
+ jnc short 011fah ; 73 0c ; 0xc11ec
+ test ah, ah ; 84 e4 ; 0xc11ee vgabios.c:756
+ je short 0122dh ; 74 3b ; 0xc11f0
+ xor bl, bl ; 30 db ; 0xc11f2 vgabios.c:757
+ mov ah, cl ; 88 cc ; 0xc11f4 vgabios.c:758
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc11f6
+ jmp short 0122dh ; eb 33 ; 0xc11f8 vgabios.c:760
+ mov byte [bp-008h], ah ; 88 66 f8 ; 0xc11fa vgabios.c:761
+ xor al, al ; 30 c0 ; 0xc11fd
+ mov byte [bp-007h], al ; 88 46 f9 ; 0xc11ff
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc1202
+ mov byte [bp-009h], al ; 88 46 f7 ; 0xc1205
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc1208
+ or si, word [bp-00ah] ; 0b 76 f6 ; 0xc120b
+ cmp si, cx ; 39 ce ; 0xc120e
+ jnc short 0122fh ; 73 1d ; 0xc1210
+ mov byte [bp-00ah], ah ; 88 66 f6 ; 0xc1212
+ mov byte [bp-009h], al ; 88 46 f7 ; 0xc1215
+ mov si, cx ; 89 ce ; 0xc1218
+ dec si ; 4e ; 0xc121a
+ cmp si, word [bp-00ah] ; 3b 76 f6 ; 0xc121b
+ je short 01269h ; 74 49 ; 0xc121e
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc1220
+ mov byte [bp-007h], al ; 88 46 f9 ; 0xc1223
+ dec cx ; 49 ; 0xc1226
+ dec cx ; 49 ; 0xc1227
+ cmp cx, word [bp-008h] ; 3b 4e f8 ; 0xc1228
+ jne short 0122fh ; 75 02 ; 0xc122b
+ jmp short 01269h ; eb 3a ; 0xc122d
+ cmp ah, 003h ; 80 fc 03 ; 0xc122f vgabios.c:763
+ jbe short 01269h ; 76 35 ; 0xc1232
+ mov cl, bl ; 88 d9 ; 0xc1234 vgabios.c:764
+ xor ch, ch ; 30 ed ; 0xc1236
+ mov byte [bp-00ah], ah ; 88 66 f6 ; 0xc1238
+ mov byte [bp-009h], ch ; 88 6e f7 ; 0xc123b
+ mov si, cx ; 89 ce ; 0xc123e
+ inc si ; 46 ; 0xc1240
+ inc si ; 46 ; 0xc1241
+ mov cl, dl ; 88 d1 ; 0xc1242
+ db 0feh, 0c9h
+ ; dec cl ; fe c9 ; 0xc1244
+ cmp si, word [bp-00ah] ; 3b 76 f6 ; 0xc1246
+ jl short 0125eh ; 7c 13 ; 0xc1249
+ sub bl, ah ; 28 e3 ; 0xc124b vgabios.c:766
+ add bl, dl ; 00 d3 ; 0xc124d
+ db 0feh, 0cbh
+ ; dec bl ; fe cb ; 0xc124f
+ mov ah, cl ; 88 cc ; 0xc1251 vgabios.c:767
+ cmp dx, strict byte 0000eh ; 83 fa 0e ; 0xc1253 vgabios.c:768
+ jc short 01269h ; 72 11 ; 0xc1256
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc1258 vgabios.c:770
+ db 0feh, 0cbh
+ ; dec bl ; fe cb ; 0xc125a vgabios.c:771
+ jmp short 01269h ; eb 0b ; 0xc125c vgabios.c:773
+ cmp bl, 002h ; 80 fb 02 ; 0xc125e
+ jbe short 01267h ; 76 04 ; 0xc1261
+ shr dx, 1 ; d1 ea ; 0xc1263 vgabios.c:775
+ mov bl, dl ; 88 d3 ; 0xc1265
+ mov ah, cl ; 88 cc ; 0xc1267 vgabios.c:779
+ mov si, strict word 00063h ; be 63 00 ; 0xc1269 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc126c
+ mov es, dx ; 8e c2 ; 0xc126f
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc1271
+ mov AL, strict byte 00ah ; b0 0a ; 0xc1274 vgabios.c:790
+ mov dx, cx ; 89 ca ; 0xc1276
+ out DX, AL ; ee ; 0xc1278
+ mov si, cx ; 89 ce ; 0xc1279 vgabios.c:791
+ inc si ; 46 ; 0xc127b
+ mov al, bl ; 88 d8 ; 0xc127c
+ mov dx, si ; 89 f2 ; 0xc127e
+ out DX, AL ; ee ; 0xc1280
+ mov AL, strict byte 00bh ; b0 0b ; 0xc1281 vgabios.c:792
+ mov dx, cx ; 89 ca ; 0xc1283
+ out DX, AL ; ee ; 0xc1285
+ mov al, ah ; 88 e0 ; 0xc1286 vgabios.c:793
+ mov dx, si ; 89 f2 ; 0xc1288
+ out DX, AL ; ee ; 0xc128a
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc128b vgabios.c:794
+ pop si ; 5e ; 0xc128e
+ pop cx ; 59 ; 0xc128f
+ pop bx ; 5b ; 0xc1290
+ pop bp ; 5d ; 0xc1291
+ retn ; c3 ; 0xc1292
+ ; disGetNextSymbol 0xc1293 LB 0x329f -> off=0x0 cb=000000000000008f uValue=00000000000c1293 'biosfn_set_cursor_pos'
+biosfn_set_cursor_pos: ; 0xc1293 LB 0x8f
+ push bp ; 55 ; 0xc1293 vgabios.c:797
+ mov bp, sp ; 89 e5 ; 0xc1294
+ push bx ; 53 ; 0xc1296
+ push cx ; 51 ; 0xc1297
+ push si ; 56 ; 0xc1298
+ push di ; 57 ; 0xc1299
+ push ax ; 50 ; 0xc129a
+ mov bl, al ; 88 c3 ; 0xc129b
+ mov cx, dx ; 89 d1 ; 0xc129d
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc129f vgabios.c:803
+ jnbe short 01319h ; 77 76 ; 0xc12a1
+ xor ah, ah ; 30 e4 ; 0xc12a3 vgabios.c:806
+ mov si, ax ; 89 c6 ; 0xc12a5
+ add si, ax ; 01 c6 ; 0xc12a7
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc12a9
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc12ac vgabios.c:62
+ mov es, ax ; 8e c0 ; 0xc12af
+ mov word [es:si], dx ; 26 89 14 ; 0xc12b1
+ mov si, strict word 00062h ; be 62 00 ; 0xc12b4 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc12b7
+ cmp bl, al ; 38 c3 ; 0xc12ba vgabios.c:810
+ jne short 01319h ; 75 5b ; 0xc12bc
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc12be vgabios.c:57
+ mov di, word [es:di] ; 26 8b 3d ; 0xc12c1
+ mov si, 00084h ; be 84 00 ; 0xc12c4 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc12c7
+ xor ah, ah ; 30 e4 ; 0xc12ca vgabios.c:48
+ mov si, ax ; 89 c6 ; 0xc12cc
+ inc si ; 46 ; 0xc12ce
+ mov ax, dx ; 89 d0 ; 0xc12cf vgabios.c:816
+ xor al, dl ; 30 d0 ; 0xc12d1
+ shr ax, 008h ; c1 e8 08 ; 0xc12d3
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc12d6
+ mov ax, di ; 89 f8 ; 0xc12d9 vgabios.c:819
+ mul si ; f7 e6 ; 0xc12db
+ or AL, strict byte 0ffh ; 0c ff ; 0xc12dd
+ xor bh, bh ; 30 ff ; 0xc12df
+ inc ax ; 40 ; 0xc12e1
+ mul bx ; f7 e3 ; 0xc12e2
+ mov bl, cl ; 88 cb ; 0xc12e4
+ mov si, bx ; 89 de ; 0xc12e6
+ add si, ax ; 01 c6 ; 0xc12e8
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc12ea
+ xor ah, ah ; 30 e4 ; 0xc12ed
+ mul di ; f7 e7 ; 0xc12ef
+ add si, ax ; 01 c6 ; 0xc12f1
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc12f3 vgabios.c:57
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc12f6
+ mov AL, strict byte 00eh ; b0 0e ; 0xc12f9 vgabios.c:823
+ mov dx, bx ; 89 da ; 0xc12fb
+ out DX, AL ; ee ; 0xc12fd
+ mov ax, si ; 89 f0 ; 0xc12fe vgabios.c:824
+ xor al, al ; 30 c0 ; 0xc1300
+ shr ax, 008h ; c1 e8 08 ; 0xc1302
+ lea cx, [bx+001h] ; 8d 4f 01 ; 0xc1305
+ mov dx, cx ; 89 ca ; 0xc1308
+ out DX, AL ; ee ; 0xc130a
+ mov AL, strict byte 00fh ; b0 0f ; 0xc130b vgabios.c:825
+ mov dx, bx ; 89 da ; 0xc130d
+ out DX, AL ; ee ; 0xc130f
+ and si, 000ffh ; 81 e6 ff 00 ; 0xc1310 vgabios.c:826
+ mov ax, si ; 89 f0 ; 0xc1314
+ mov dx, cx ; 89 ca ; 0xc1316
+ out DX, AL ; ee ; 0xc1318
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc1319 vgabios.c:828
+ pop di ; 5f ; 0xc131c
+ pop si ; 5e ; 0xc131d
+ pop cx ; 59 ; 0xc131e
+ pop bx ; 5b ; 0xc131f
+ pop bp ; 5d ; 0xc1320
+ retn ; c3 ; 0xc1321
+ ; disGetNextSymbol 0xc1322 LB 0x3210 -> off=0x0 cb=00000000000000d8 uValue=00000000000c1322 'biosfn_set_active_page'
+biosfn_set_active_page: ; 0xc1322 LB 0xd8
+ push bp ; 55 ; 0xc1322 vgabios.c:831
+ mov bp, sp ; 89 e5 ; 0xc1323
+ push bx ; 53 ; 0xc1325
+ push cx ; 51 ; 0xc1326
+ push dx ; 52 ; 0xc1327
+ push si ; 56 ; 0xc1328
+ push di ; 57 ; 0xc1329
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc132a
+ mov cl, al ; 88 c1 ; 0xc132d
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc132f vgabios.c:837
+ jnbe short 01349h ; 77 16 ; 0xc1331
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc1333 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1336
+ mov es, ax ; 8e c0 ; 0xc1339
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc133b
+ xor ah, ah ; 30 e4 ; 0xc133e vgabios.c:841
+ call 03819h ; e8 d6 24 ; 0xc1340
+ mov ch, al ; 88 c5 ; 0xc1343
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1345 vgabios.c:842
+ jne short 0134ch ; 75 03 ; 0xc1347
+ jmp near 013f0h ; e9 a4 00 ; 0xc1349
+ mov al, cl ; 88 c8 ; 0xc134c vgabios.c:845
+ xor ah, ah ; 30 e4 ; 0xc134e
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc1350
+ lea dx, [bp-010h] ; 8d 56 f0 ; 0xc1353
+ call 00a96h ; e8 3d f7 ; 0xc1356
+ mov bl, ch ; 88 eb ; 0xc1359 vgabios.c:847
+ xor bh, bh ; 30 ff ; 0xc135b
+ mov si, bx ; 89 de ; 0xc135d
+ sal si, 003h ; c1 e6 03 ; 0xc135f
+ cmp byte [si+047afh], 000h ; 80 bc af 47 00 ; 0xc1362
+ jne short 013a8h ; 75 3f ; 0xc1367
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1369 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc136c
+ mov es, ax ; 8e c0 ; 0xc136f
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc1371
+ mov bx, 00084h ; bb 84 00 ; 0xc1374 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1377
+ xor ah, ah ; 30 e4 ; 0xc137a vgabios.c:48
+ mov bx, ax ; 89 c3 ; 0xc137c
+ inc bx ; 43 ; 0xc137e
+ mov ax, dx ; 89 d0 ; 0xc137f vgabios.c:854
+ mul bx ; f7 e3 ; 0xc1381
+ mov di, ax ; 89 c7 ; 0xc1383
+ add ax, ax ; 01 c0 ; 0xc1385
+ or AL, strict byte 0ffh ; 0c ff ; 0xc1387
+ mov byte [bp-00ch], cl ; 88 4e f4 ; 0xc1389
+ mov byte [bp-00bh], 000h ; c6 46 f5 00 ; 0xc138c
+ inc ax ; 40 ; 0xc1390
+ mul word [bp-00ch] ; f7 66 f4 ; 0xc1391
+ mov bx, ax ; 89 c3 ; 0xc1394
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc1396 vgabios.c:62
+ mov word [es:si], ax ; 26 89 04 ; 0xc1399
+ or di, 000ffh ; 81 cf ff 00 ; 0xc139c vgabios.c:858
+ lea ax, [di+001h] ; 8d 45 01 ; 0xc13a0
+ mul word [bp-00ch] ; f7 66 f4 ; 0xc13a3
+ jmp short 013b7h ; eb 0f ; 0xc13a6 vgabios.c:860
+ mov bl, byte [bx+0482eh] ; 8a 9f 2e 48 ; 0xc13a8 vgabios.c:862
+ sal bx, 006h ; c1 e3 06 ; 0xc13ac
+ mov al, cl ; 88 c8 ; 0xc13af
+ xor ah, ah ; 30 e4 ; 0xc13b1
+ mul word [bx+04845h] ; f7 a7 45 48 ; 0xc13b3
+ mov bx, ax ; 89 c3 ; 0xc13b7
+ mov si, strict word 00063h ; be 63 00 ; 0xc13b9 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc13bc
+ mov es, ax ; 8e c0 ; 0xc13bf
+ mov si, word [es:si] ; 26 8b 34 ; 0xc13c1
+ mov AL, strict byte 00ch ; b0 0c ; 0xc13c4 vgabios.c:867
+ mov dx, si ; 89 f2 ; 0xc13c6
+ out DX, AL ; ee ; 0xc13c8
+ mov ax, bx ; 89 d8 ; 0xc13c9 vgabios.c:868
+ xor al, bl ; 30 d8 ; 0xc13cb
+ shr ax, 008h ; c1 e8 08 ; 0xc13cd
+ lea di, [si+001h] ; 8d 7c 01 ; 0xc13d0
+ mov dx, di ; 89 fa ; 0xc13d3
+ out DX, AL ; ee ; 0xc13d5
+ mov AL, strict byte 00dh ; b0 0d ; 0xc13d6 vgabios.c:869
+ mov dx, si ; 89 f2 ; 0xc13d8
+ out DX, AL ; ee ; 0xc13da
+ xor bh, bh ; 30 ff ; 0xc13db vgabios.c:870
+ mov ax, bx ; 89 d8 ; 0xc13dd
+ mov dx, di ; 89 fa ; 0xc13df
+ out DX, AL ; ee ; 0xc13e1
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc13e2 vgabios.c:52
+ mov byte [es:bx], cl ; 26 88 0f ; 0xc13e5
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc13e8 vgabios.c:880
+ mov al, cl ; 88 c8 ; 0xc13eb
+ call 01293h ; e8 a3 fe ; 0xc13ed
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc13f0 vgabios.c:881
+ pop di ; 5f ; 0xc13f3
+ pop si ; 5e ; 0xc13f4
+ pop dx ; 5a ; 0xc13f5
+ pop cx ; 59 ; 0xc13f6
+ pop bx ; 5b ; 0xc13f7
+ pop bp ; 5d ; 0xc13f8
+ retn ; c3 ; 0xc13f9
+ ; disGetNextSymbol 0xc13fa LB 0x3138 -> off=0x0 cb=0000000000000045 uValue=00000000000c13fa 'find_vpti'
+find_vpti: ; 0xc13fa LB 0x45
+ push bx ; 53 ; 0xc13fa vgabios.c:916
+ push si ; 56 ; 0xc13fb
+ push bp ; 55 ; 0xc13fc
+ mov bp, sp ; 89 e5 ; 0xc13fd
+ mov bl, al ; 88 c3 ; 0xc13ff vgabios.c:921
+ xor bh, bh ; 30 ff ; 0xc1401
+ mov si, bx ; 89 de ; 0xc1403
+ sal si, 003h ; c1 e6 03 ; 0xc1405
+ cmp byte [si+047afh], 000h ; 80 bc af 47 00 ; 0xc1408
+ jne short 01435h ; 75 26 ; 0xc140d
+ mov si, 00089h ; be 89 00 ; 0xc140f vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1412
+ mov es, ax ; 8e c0 ; 0xc1415
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc1417
+ test AL, strict byte 010h ; a8 10 ; 0xc141a vgabios.c:923
+ je short 01424h ; 74 06 ; 0xc141c
+ mov al, byte [bx+07df5h] ; 8a 87 f5 7d ; 0xc141e vgabios.c:924
+ jmp short 01432h ; eb 0e ; 0xc1422 vgabios.c:925
+ test AL, strict byte 080h ; a8 80 ; 0xc1424
+ je short 0142eh ; 74 06 ; 0xc1426
+ mov al, byte [bx+07de5h] ; 8a 87 e5 7d ; 0xc1428 vgabios.c:926
+ jmp short 01432h ; eb 04 ; 0xc142c vgabios.c:927
+ mov al, byte [bx+07dedh] ; 8a 87 ed 7d ; 0xc142e vgabios.c:928
+ cbw ; 98 ; 0xc1432
+ jmp short 0143bh ; eb 06 ; 0xc1433 vgabios.c:929
+ mov al, byte [bx+0482eh] ; 8a 87 2e 48 ; 0xc1435 vgabios.c:930
+ xor ah, ah ; 30 e4 ; 0xc1439
+ pop bp ; 5d ; 0xc143b vgabios.c:933
+ pop si ; 5e ; 0xc143c
+ pop bx ; 5b ; 0xc143d
+ retn ; c3 ; 0xc143e
+ ; disGetNextSymbol 0xc143f LB 0x30f3 -> off=0x0 cb=00000000000004d5 uValue=00000000000c143f 'biosfn_set_video_mode'
+biosfn_set_video_mode: ; 0xc143f LB 0x4d5
+ push bp ; 55 ; 0xc143f vgabios.c:938
+ mov bp, sp ; 89 e5 ; 0xc1440
+ push bx ; 53 ; 0xc1442
+ push cx ; 51 ; 0xc1443
+ push dx ; 52 ; 0xc1444
+ push si ; 56 ; 0xc1445
+ push di ; 57 ; 0xc1446
+ sub sp, strict byte 00018h ; 83 ec 18 ; 0xc1447
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc144a
+ and AL, strict byte 080h ; 24 80 ; 0xc144d vgabios.c:942
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc144f
+ call 007bfh ; e8 6a f3 ; 0xc1452 vgabios.c:952
+ test ax, ax ; 85 c0 ; 0xc1455
+ je short 01465h ; 74 0c ; 0xc1457
+ mov AL, strict byte 007h ; b0 07 ; 0xc1459 vgabios.c:954
+ mov dx, 003c4h ; ba c4 03 ; 0xc145b
+ out DX, AL ; ee ; 0xc145e
+ xor al, al ; 30 c0 ; 0xc145f vgabios.c:955
+ mov dx, 003c5h ; ba c5 03 ; 0xc1461
+ out DX, AL ; ee ; 0xc1464
+ and byte [bp-010h], 07fh ; 80 66 f0 7f ; 0xc1465 vgabios.c:960
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1469 vgabios.c:966
+ xor ah, ah ; 30 e4 ; 0xc146c
+ call 03819h ; e8 a8 23 ; 0xc146e
+ mov cl, al ; 88 c1 ; 0xc1471
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc1473
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1476 vgabios.c:972
+ je short 014e5h ; 74 6b ; 0xc1478
+ mov bx, 000a8h ; bb a8 00 ; 0xc147a vgabios.c:67
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc147d
+ mov es, ax ; 8e c0 ; 0xc1480
+ mov di, word [es:bx] ; 26 8b 3f ; 0xc1482
+ mov ax, word [es:bx+002h] ; 26 8b 47 02 ; 0xc1485
+ mov bx, di ; 89 fb ; 0xc1489 vgabios.c:68
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc148b
+ xor ch, ch ; 30 ed ; 0xc148e vgabios.c:978
+ mov ax, cx ; 89 c8 ; 0xc1490
+ call 013fah ; e8 65 ff ; 0xc1492
+ mov es, [bp-018h] ; 8e 46 e8 ; 0xc1495 vgabios.c:979
+ mov si, word [es:di] ; 26 8b 35 ; 0xc1498
+ mov dx, word [es:di+002h] ; 26 8b 55 02 ; 0xc149b
+ mov word [bp-01eh], dx ; 89 56 e2 ; 0xc149f
+ xor ah, ah ; 30 e4 ; 0xc14a2 vgabios.c:980
+ sal ax, 006h ; c1 e0 06 ; 0xc14a4
+ add si, ax ; 01 c6 ; 0xc14a7
+ mov di, 00089h ; bf 89 00 ; 0xc14a9 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc14ac
+ mov es, ax ; 8e c0 ; 0xc14af
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc14b1
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc14b4 vgabios.c:48
+ test AL, strict byte 008h ; a8 08 ; 0xc14b7 vgabios.c:997
+ jne short 01501h ; 75 46 ; 0xc14b9
+ mov di, cx ; 89 cf ; 0xc14bb vgabios.c:999
+ sal di, 003h ; c1 e7 03 ; 0xc14bd
+ mov al, byte [di+047b4h] ; 8a 85 b4 47 ; 0xc14c0
+ mov dx, 003c6h ; ba c6 03 ; 0xc14c4
+ out DX, AL ; ee ; 0xc14c7
+ xor al, al ; 30 c0 ; 0xc14c8 vgabios.c:1002
+ mov dx, 003c8h ; ba c8 03 ; 0xc14ca
+ out DX, AL ; ee ; 0xc14cd
+ mov cl, byte [di+047b5h] ; 8a 8d b5 47 ; 0xc14ce vgabios.c:1005
+ cmp cl, 001h ; 80 f9 01 ; 0xc14d2
+ jc short 014e8h ; 72 11 ; 0xc14d5
+ jbe short 014f3h ; 76 1a ; 0xc14d7
+ cmp cl, 003h ; 80 f9 03 ; 0xc14d9
+ je short 01504h ; 74 26 ; 0xc14dc
+ cmp cl, 002h ; 80 f9 02 ; 0xc14de
+ je short 014fah ; 74 17 ; 0xc14e1
+ jmp short 01509h ; eb 24 ; 0xc14e3
+ jmp near 0190ah ; e9 22 04 ; 0xc14e5
+ test cl, cl ; 84 c9 ; 0xc14e8
+ jne short 01509h ; 75 1d ; 0xc14ea
+ mov word [bp-014h], 04fc2h ; c7 46 ec c2 4f ; 0xc14ec vgabios.c:1007
+ jmp short 01509h ; eb 16 ; 0xc14f1 vgabios.c:1008
+ mov word [bp-014h], 05082h ; c7 46 ec 82 50 ; 0xc14f3 vgabios.c:1010
+ jmp short 01509h ; eb 0f ; 0xc14f8 vgabios.c:1011
+ mov word [bp-014h], 05142h ; c7 46 ec 42 51 ; 0xc14fa vgabios.c:1013
+ jmp short 01509h ; eb 08 ; 0xc14ff vgabios.c:1014
+ jmp near 01578h ; e9 74 00 ; 0xc1501
+ mov word [bp-014h], 05202h ; c7 46 ec 02 52 ; 0xc1504 vgabios.c:1016
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1509 vgabios.c:1020
+ xor ah, ah ; 30 e4 ; 0xc150c
+ mov di, ax ; 89 c7 ; 0xc150e
+ sal di, 003h ; c1 e7 03 ; 0xc1510
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc1513
+ jne short 01529h ; 75 0f ; 0xc1518
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc151a vgabios.c:1022
+ cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc151d
+ jne short 01529h ; 75 05 ; 0xc1522
+ mov word [bp-014h], 05082h ; c7 46 ec 82 50 ; 0xc1524 vgabios.c:1023
+ xor cx, cx ; 31 c9 ; 0xc1529 vgabios.c:1026
+ jmp short 0153ch ; eb 0f ; 0xc152b
+ xor al, al ; 30 c0 ; 0xc152d vgabios.c:1033
+ mov dx, 003c9h ; ba c9 03 ; 0xc152f
+ out DX, AL ; ee ; 0xc1532
+ out DX, AL ; ee ; 0xc1533 vgabios.c:1034
+ out DX, AL ; ee ; 0xc1534 vgabios.c:1035
+ inc cx ; 41 ; 0xc1535 vgabios.c:1037
+ cmp cx, 00100h ; 81 f9 00 01 ; 0xc1536
+ jnc short 0156ah ; 73 2e ; 0xc153a
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc153c
+ xor ah, ah ; 30 e4 ; 0xc153f
+ mov di, ax ; 89 c7 ; 0xc1541
+ sal di, 003h ; c1 e7 03 ; 0xc1543
+ mov al, byte [di+047b5h] ; 8a 85 b5 47 ; 0xc1546
+ mov di, ax ; 89 c7 ; 0xc154a
+ mov al, byte [di+0483eh] ; 8a 85 3e 48 ; 0xc154c
+ cmp cx, ax ; 39 c1 ; 0xc1550
+ jnbe short 0152dh ; 77 d9 ; 0xc1552
+ imul di, cx, strict byte 00003h ; 6b f9 03 ; 0xc1554
+ add di, word [bp-014h] ; 03 7e ec ; 0xc1557
+ mov al, byte [di] ; 8a 05 ; 0xc155a
+ mov dx, 003c9h ; ba c9 03 ; 0xc155c
+ out DX, AL ; ee ; 0xc155f
+ mov al, byte [di+001h] ; 8a 45 01 ; 0xc1560
+ out DX, AL ; ee ; 0xc1563
+ mov al, byte [di+002h] ; 8a 45 02 ; 0xc1564
+ out DX, AL ; ee ; 0xc1567
+ jmp short 01535h ; eb cb ; 0xc1568
+ test byte [bp-00ch], 002h ; f6 46 f4 02 ; 0xc156a vgabios.c:1038
+ je short 01578h ; 74 08 ; 0xc156e
+ mov dx, 00100h ; ba 00 01 ; 0xc1570 vgabios.c:1040
+ xor ax, ax ; 31 c0 ; 0xc1573
+ call 010ffh ; e8 87 fb ; 0xc1575
+ mov dx, 003dah ; ba da 03 ; 0xc1578 vgabios.c:1045
+ in AL, DX ; ec ; 0xc157b
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc157c
+ xor cx, cx ; 31 c9 ; 0xc157e vgabios.c:1048
+ jmp short 01587h ; eb 05 ; 0xc1580
+ cmp cx, strict byte 00013h ; 83 f9 13 ; 0xc1582
+ jnbe short 0159ch ; 77 15 ; 0xc1585
+ mov al, cl ; 88 c8 ; 0xc1587 vgabios.c:1049
+ mov dx, 003c0h ; ba c0 03 ; 0xc1589
+ out DX, AL ; ee ; 0xc158c
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc158d vgabios.c:1050
+ mov di, si ; 89 f7 ; 0xc1590
+ add di, cx ; 01 cf ; 0xc1592
+ mov al, byte [es:di+023h] ; 26 8a 45 23 ; 0xc1594
+ out DX, AL ; ee ; 0xc1598
+ inc cx ; 41 ; 0xc1599 vgabios.c:1051
+ jmp short 01582h ; eb e6 ; 0xc159a
+ mov AL, strict byte 014h ; b0 14 ; 0xc159c vgabios.c:1052
+ mov dx, 003c0h ; ba c0 03 ; 0xc159e
+ out DX, AL ; ee ; 0xc15a1
+ xor al, al ; 30 c0 ; 0xc15a2 vgabios.c:1053
+ out DX, AL ; ee ; 0xc15a4
+ mov es, [bp-018h] ; 8e 46 e8 ; 0xc15a5 vgabios.c:1056
+ mov dx, word [es:bx+004h] ; 26 8b 57 04 ; 0xc15a8
+ mov ax, word [es:bx+006h] ; 26 8b 47 06 ; 0xc15ac
+ test ax, ax ; 85 c0 ; 0xc15b0
+ jne short 015b8h ; 75 04 ; 0xc15b2
+ test dx, dx ; 85 d2 ; 0xc15b4
+ je short 015f5h ; 74 3d ; 0xc15b6
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc15b8 vgabios.c:1060
+ xor cx, cx ; 31 c9 ; 0xc15bb vgabios.c:1061
+ jmp short 015c4h ; eb 05 ; 0xc15bd
+ cmp cx, strict byte 00010h ; 83 f9 10 ; 0xc15bf
+ jnc short 015e5h ; 73 21 ; 0xc15c2
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc15c4 vgabios.c:1062
+ mov di, si ; 89 f7 ; 0xc15c7
+ add di, cx ; 01 cf ; 0xc15c9
+ mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc15cb
+ mov word [bp-020h], ax ; 89 46 e0 ; 0xc15ce
+ mov ax, dx ; 89 d0 ; 0xc15d1
+ add ax, cx ; 01 c8 ; 0xc15d3
+ mov word [bp-022h], ax ; 89 46 de ; 0xc15d5
+ mov al, byte [es:di+023h] ; 26 8a 45 23 ; 0xc15d8
+ les di, [bp-022h] ; c4 7e de ; 0xc15dc
+ mov byte [es:di], al ; 26 88 05 ; 0xc15df
+ inc cx ; 41 ; 0xc15e2
+ jmp short 015bfh ; eb da ; 0xc15e3
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc15e5 vgabios.c:1063
+ mov al, byte [es:si+034h] ; 26 8a 44 34 ; 0xc15e8
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc15ec
+ mov di, dx ; 89 d7 ; 0xc15ef
+ mov byte [es:di+010h], al ; 26 88 45 10 ; 0xc15f1
+ xor al, al ; 30 c0 ; 0xc15f5 vgabios.c:1067
+ mov dx, 003c4h ; ba c4 03 ; 0xc15f7
+ out DX, AL ; ee ; 0xc15fa
+ mov AL, strict byte 003h ; b0 03 ; 0xc15fb vgabios.c:1068
+ mov dx, 003c5h ; ba c5 03 ; 0xc15fd
+ out DX, AL ; ee ; 0xc1600
+ mov cx, strict word 00001h ; b9 01 00 ; 0xc1601 vgabios.c:1069
+ jmp short 0160bh ; eb 05 ; 0xc1604
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc1606
+ jnbe short 01623h ; 77 18 ; 0xc1609
+ mov al, cl ; 88 c8 ; 0xc160b vgabios.c:1070
+ mov dx, 003c4h ; ba c4 03 ; 0xc160d
+ out DX, AL ; ee ; 0xc1610
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1611 vgabios.c:1071
+ mov di, si ; 89 f7 ; 0xc1614
+ add di, cx ; 01 cf ; 0xc1616
+ mov al, byte [es:di+004h] ; 26 8a 45 04 ; 0xc1618
+ mov dx, 003c5h ; ba c5 03 ; 0xc161c
+ out DX, AL ; ee ; 0xc161f
+ inc cx ; 41 ; 0xc1620 vgabios.c:1072
+ jmp short 01606h ; eb e3 ; 0xc1621
+ xor cx, cx ; 31 c9 ; 0xc1623 vgabios.c:1075
+ jmp short 0162ch ; eb 05 ; 0xc1625
+ cmp cx, strict byte 00008h ; 83 f9 08 ; 0xc1627
+ jnbe short 01644h ; 77 18 ; 0xc162a
+ mov al, cl ; 88 c8 ; 0xc162c vgabios.c:1076
+ mov dx, 003ceh ; ba ce 03 ; 0xc162e
+ out DX, AL ; ee ; 0xc1631
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1632 vgabios.c:1077
+ mov di, si ; 89 f7 ; 0xc1635
+ add di, cx ; 01 cf ; 0xc1637
+ mov al, byte [es:di+037h] ; 26 8a 45 37 ; 0xc1639
+ mov dx, 003cfh ; ba cf 03 ; 0xc163d
+ out DX, AL ; ee ; 0xc1640
+ inc cx ; 41 ; 0xc1641 vgabios.c:1078
+ jmp short 01627h ; eb e3 ; 0xc1642
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1644 vgabios.c:1081
+ xor ah, ah ; 30 e4 ; 0xc1647
+ mov di, ax ; 89 c7 ; 0xc1649
+ sal di, 003h ; c1 e7 03 ; 0xc164b
+ cmp byte [di+047b0h], 001h ; 80 bd b0 47 01 ; 0xc164e
+ jne short 0165ah ; 75 05 ; 0xc1653
+ mov cx, 003b4h ; b9 b4 03 ; 0xc1655
+ jmp short 0165dh ; eb 03 ; 0xc1658
+ mov cx, 003d4h ; b9 d4 03 ; 0xc165a
+ mov word [bp-016h], cx ; 89 4e ea ; 0xc165d
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1660 vgabios.c:1084
+ mov al, byte [es:si+009h] ; 26 8a 44 09 ; 0xc1663
+ mov dx, 003c2h ; ba c2 03 ; 0xc1667
+ out DX, AL ; ee ; 0xc166a
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc166b vgabios.c:1087
+ mov dx, cx ; 89 ca ; 0xc166e
+ out DX, ax ; ef ; 0xc1670
+ xor cx, cx ; 31 c9 ; 0xc1671 vgabios.c:1089
+ jmp short 0167ah ; eb 05 ; 0xc1673
+ cmp cx, strict byte 00018h ; 83 f9 18 ; 0xc1675
+ jnbe short 01690h ; 77 16 ; 0xc1678
+ mov al, cl ; 88 c8 ; 0xc167a vgabios.c:1090
+ mov dx, word [bp-016h] ; 8b 56 ea ; 0xc167c
+ out DX, AL ; ee ; 0xc167f
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1680 vgabios.c:1091
+ mov di, si ; 89 f7 ; 0xc1683
+ add di, cx ; 01 cf ; 0xc1685
+ inc dx ; 42 ; 0xc1687
+ mov al, byte [es:di+00ah] ; 26 8a 45 0a ; 0xc1688
+ out DX, AL ; ee ; 0xc168c
+ inc cx ; 41 ; 0xc168d vgabios.c:1092
+ jmp short 01675h ; eb e5 ; 0xc168e
+ mov AL, strict byte 020h ; b0 20 ; 0xc1690 vgabios.c:1095
+ mov dx, 003c0h ; ba c0 03 ; 0xc1692
+ out DX, AL ; ee ; 0xc1695
+ mov dx, word [bp-016h] ; 8b 56 ea ; 0xc1696 vgabios.c:1096
+ add dx, strict byte 00006h ; 83 c2 06 ; 0xc1699
+ in AL, DX ; ec ; 0xc169c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc169d
+ cmp byte [bp-00eh], 000h ; 80 7e f2 00 ; 0xc169f vgabios.c:1098
+ jne short 01704h ; 75 5f ; 0xc16a3
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc16a5 vgabios.c:1100
+ xor ah, ah ; 30 e4 ; 0xc16a8
+ mov di, ax ; 89 c7 ; 0xc16aa
+ sal di, 003h ; c1 e7 03 ; 0xc16ac
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc16af
+ jne short 016c8h ; 75 12 ; 0xc16b4
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc16b6 vgabios.c:1102
+ mov cx, 04000h ; b9 00 40 ; 0xc16ba
+ mov ax, 00720h ; b8 20 07 ; 0xc16bd
+ xor di, di ; 31 ff ; 0xc16c0
+ jcxz 016c6h ; e3 02 ; 0xc16c2
+ rep stosw ; f3 ab ; 0xc16c4
+ jmp short 01704h ; eb 3c ; 0xc16c6 vgabios.c:1104
+ cmp byte [bp-010h], 00dh ; 80 7e f0 0d ; 0xc16c8 vgabios.c:1106
+ jnc short 016dfh ; 73 11 ; 0xc16cc
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc16ce vgabios.c:1108
+ mov cx, 04000h ; b9 00 40 ; 0xc16d2
+ xor al, al ; 30 c0 ; 0xc16d5
+ xor di, di ; 31 ff ; 0xc16d7
+ jcxz 016ddh ; e3 02 ; 0xc16d9
+ rep stosw ; f3 ab ; 0xc16db
+ jmp short 01704h ; eb 25 ; 0xc16dd vgabios.c:1110
+ mov AL, strict byte 002h ; b0 02 ; 0xc16df vgabios.c:1112
+ mov dx, 003c4h ; ba c4 03 ; 0xc16e1
+ out DX, AL ; ee ; 0xc16e4
+ mov dx, 003c5h ; ba c5 03 ; 0xc16e5 vgabios.c:1113
+ in AL, DX ; ec ; 0xc16e8
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc16e9
+ mov word [bp-020h], ax ; 89 46 e0 ; 0xc16eb
+ mov AL, strict byte 00fh ; b0 0f ; 0xc16ee vgabios.c:1114
+ out DX, AL ; ee ; 0xc16f0
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc16f1 vgabios.c:1115
+ mov cx, 08000h ; b9 00 80 ; 0xc16f5
+ xor ax, ax ; 31 c0 ; 0xc16f8
+ xor di, di ; 31 ff ; 0xc16fa
+ jcxz 01700h ; e3 02 ; 0xc16fc
+ rep stosw ; f3 ab ; 0xc16fe
+ mov al, byte [bp-020h] ; 8a 46 e0 ; 0xc1700 vgabios.c:1116
+ out DX, AL ; ee ; 0xc1703
+ mov di, strict word 00049h ; bf 49 00 ; 0xc1704 vgabios.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1707
+ mov es, ax ; 8e c0 ; 0xc170a
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc170c
+ mov byte [es:di], al ; 26 88 05 ; 0xc170f
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1712 vgabios.c:1123
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc1715
+ xor ah, ah ; 30 e4 ; 0xc1718
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc171a vgabios.c:62
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc171d
+ mov es, dx ; 8e c2 ; 0xc1720
+ mov word [es:di], ax ; 26 89 05 ; 0xc1722
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1725 vgabios.c:60
+ mov ax, word [es:si+003h] ; 26 8b 44 03 ; 0xc1728
+ mov di, strict word 0004ch ; bf 4c 00 ; 0xc172c vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc172f
+ mov word [es:di], ax ; 26 89 05 ; 0xc1731
+ mov di, strict word 00063h ; bf 63 00 ; 0xc1734 vgabios.c:62
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1737
+ mov word [es:di], ax ; 26 89 05 ; 0xc173a
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc173d vgabios.c:50
+ mov al, byte [es:si+001h] ; 26 8a 44 01 ; 0xc1740
+ mov di, 00084h ; bf 84 00 ; 0xc1744 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc1747
+ mov byte [es:di], al ; 26 88 05 ; 0xc1749
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc174c vgabios.c:1127
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc174f
+ xor ah, ah ; 30 e4 ; 0xc1753
+ mov di, 00085h ; bf 85 00 ; 0xc1755 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc1758
+ mov word [es:di], ax ; 26 89 05 ; 0xc175a
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc175d vgabios.c:1128
+ or AL, strict byte 060h ; 0c 60 ; 0xc1760
+ mov di, 00087h ; bf 87 00 ; 0xc1762 vgabios.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc1765
+ mov di, 00088h ; bf 88 00 ; 0xc1768 vgabios.c:52
+ mov byte [es:di], 0f9h ; 26 c6 05 f9 ; 0xc176b
+ mov di, 0008ah ; bf 8a 00 ; 0xc176f vgabios.c:52
+ mov byte [es:di], 008h ; 26 c6 05 08 ; 0xc1772
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1776 vgabios.c:1134
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc1779
+ jnbe short 017a2h ; 77 25 ; 0xc177b
+ mov di, ax ; 89 c7 ; 0xc177d vgabios.c:1136
+ mov al, byte [di+07dddh] ; 8a 85 dd 7d ; 0xc177f
+ mov di, strict word 00065h ; bf 65 00 ; 0xc1783 vgabios.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc1786
+ cmp byte [bp-010h], 006h ; 80 7e f0 06 ; 0xc1789 vgabios.c:1137
+ jne short 01794h ; 75 05 ; 0xc178d
+ mov ax, strict word 0003fh ; b8 3f 00 ; 0xc178f
+ jmp short 01797h ; eb 03 ; 0xc1792
+ mov ax, strict word 00030h ; b8 30 00 ; 0xc1794
+ mov di, strict word 00066h ; bf 66 00 ; 0xc1797 vgabios.c:52
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc179a
+ mov es, dx ; 8e c2 ; 0xc179d
+ mov byte [es:di], al ; 26 88 05 ; 0xc179f
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc17a2 vgabios.c:1141
+ xor ah, ah ; 30 e4 ; 0xc17a5
+ mov di, ax ; 89 c7 ; 0xc17a7
+ sal di, 003h ; c1 e7 03 ; 0xc17a9
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc17ac
+ jne short 017bch ; 75 09 ; 0xc17b1
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc17b3 vgabios.c:1143
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc17b6
+ call 0118ch ; e8 d0 f9 ; 0xc17b9
+ xor cx, cx ; 31 c9 ; 0xc17bc vgabios.c:1148
+ jmp short 017c5h ; eb 05 ; 0xc17be
+ cmp cx, strict byte 00008h ; 83 f9 08 ; 0xc17c0
+ jnc short 017d1h ; 73 0c ; 0xc17c3
+ mov al, cl ; 88 c8 ; 0xc17c5 vgabios.c:1149
+ xor ah, ah ; 30 e4 ; 0xc17c7
+ xor dx, dx ; 31 d2 ; 0xc17c9
+ call 01293h ; e8 c5 fa ; 0xc17cb
+ inc cx ; 41 ; 0xc17ce
+ jmp short 017c0h ; eb ef ; 0xc17cf
+ xor ax, ax ; 31 c0 ; 0xc17d1 vgabios.c:1152
+ call 01322h ; e8 4c fb ; 0xc17d3
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc17d6 vgabios.c:1155
+ xor ah, ah ; 30 e4 ; 0xc17d9
+ mov di, ax ; 89 c7 ; 0xc17db
+ sal di, 003h ; c1 e7 03 ; 0xc17dd
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc17e0
+ jne short 01851h ; 75 6a ; 0xc17e5
+ mov es, [bp-018h] ; 8e 46 e8 ; 0xc17e7 vgabios.c:1157
+ mov di, word [es:bx+008h] ; 26 8b 7f 08 ; 0xc17ea
+ mov ax, word [es:bx+00ah] ; 26 8b 47 0a ; 0xc17ee
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc17f2
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc17f5 vgabios.c:1159
+ mov bl, byte [es:si+002h] ; 26 8a 5c 02 ; 0xc17f8
+ cmp bl, 00eh ; 80 fb 0e ; 0xc17fc
+ je short 01824h ; 74 23 ; 0xc17ff
+ cmp bl, 008h ; 80 fb 08 ; 0xc1801
+ jne short 01854h ; 75 4e ; 0xc1804
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc1806 vgabios.c:1161
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc1809
+ xor ah, ah ; 30 e4 ; 0xc180d
+ push ax ; 50 ; 0xc180f
+ push strict byte 00000h ; 6a 00 ; 0xc1810
+ push strict byte 00000h ; 6a 00 ; 0xc1812
+ mov cx, 00100h ; b9 00 01 ; 0xc1814
+ mov bx, 0556ch ; bb 6c 55 ; 0xc1817
+ mov dx, 0c000h ; ba 00 c0 ; 0xc181a
+ xor al, al ; 30 c0 ; 0xc181d
+ call 02e1ah ; e8 f8 15 ; 0xc181f
+ jmp short 01879h ; eb 55 ; 0xc1822 vgabios.c:1162
+ mov al, bl ; 88 d8 ; 0xc1824 vgabios.c:1164
+ xor ah, ah ; 30 e4 ; 0xc1826
+ push ax ; 50 ; 0xc1828
+ push strict byte 00000h ; 6a 00 ; 0xc1829
+ push strict byte 00000h ; 6a 00 ; 0xc182b
+ mov cx, 00100h ; b9 00 01 ; 0xc182d
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc1830
+ mov dx, 0c000h ; ba 00 c0 ; 0xc1833
+ xor al, al ; 30 c0 ; 0xc1836
+ call 02e1ah ; e8 df 15 ; 0xc1838
+ cmp byte [bp-010h], 007h ; 80 7e f0 07 ; 0xc183b vgabios.c:1165
+ jne short 01879h ; 75 38 ; 0xc183f
+ mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1841 vgabios.c:1166
+ xor bx, bx ; 31 db ; 0xc1844
+ mov dx, 07b6ch ; ba 6c 7b ; 0xc1846
+ mov ax, 0c000h ; b8 00 c0 ; 0xc1849
+ call 02da5h ; e8 56 15 ; 0xc184c
+ jmp short 01879h ; eb 28 ; 0xc184f vgabios.c:1167
+ jmp near 018d5h ; e9 81 00 ; 0xc1851
+ mov al, bl ; 88 d8 ; 0xc1854 vgabios.c:1169
+ xor ah, ah ; 30 e4 ; 0xc1856
+ push ax ; 50 ; 0xc1858
+ push strict byte 00000h ; 6a 00 ; 0xc1859
+ push strict byte 00000h ; 6a 00 ; 0xc185b
+ mov cx, 00100h ; b9 00 01 ; 0xc185d
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc1860
+ mov dx, 0c000h ; ba 00 c0 ; 0xc1863
+ xor al, al ; 30 c0 ; 0xc1866
+ call 02e1ah ; e8 af 15 ; 0xc1868
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc186b vgabios.c:1170
+ xor bx, bx ; 31 db ; 0xc186e
+ mov dx, 07c99h ; ba 99 7c ; 0xc1870
+ mov ax, 0c000h ; b8 00 c0 ; 0xc1873
+ call 02da5h ; e8 2c 15 ; 0xc1876
+ cmp word [bp-01ch], strict byte 00000h ; 83 7e e4 00 ; 0xc1879 vgabios.c:1172
+ jne short 01883h ; 75 04 ; 0xc187d
+ test di, di ; 85 ff ; 0xc187f
+ je short 018cdh ; 74 4a ; 0xc1881
+ xor cx, cx ; 31 c9 ; 0xc1883 vgabios.c:1177
+ mov es, [bp-01ch] ; 8e 46 e4 ; 0xc1885 vgabios.c:1179
+ mov bx, di ; 89 fb ; 0xc1888
+ add bx, cx ; 01 cb ; 0xc188a
+ mov al, byte [es:bx+00bh] ; 26 8a 47 0b ; 0xc188c
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1890
+ je short 0189ch ; 74 08 ; 0xc1892
+ cmp al, byte [bp-010h] ; 3a 46 f0 ; 0xc1894 vgabios.c:1181
+ je short 0189ch ; 74 03 ; 0xc1897
+ inc cx ; 41 ; 0xc1899 vgabios.c:1183
+ jmp short 01885h ; eb e9 ; 0xc189a vgabios.c:1184
+ mov es, [bp-01ch] ; 8e 46 e4 ; 0xc189c vgabios.c:1186
+ mov bx, di ; 89 fb ; 0xc189f
+ add bx, cx ; 01 cb ; 0xc18a1
+ mov al, byte [es:bx+00bh] ; 26 8a 47 0b ; 0xc18a3
+ cmp al, byte [bp-010h] ; 3a 46 f0 ; 0xc18a7
+ jne short 018cdh ; 75 21 ; 0xc18aa
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc18ac vgabios.c:1191
+ xor ah, ah ; 30 e4 ; 0xc18af
+ push ax ; 50 ; 0xc18b1
+ mov al, byte [es:di+001h] ; 26 8a 45 01 ; 0xc18b2
+ push ax ; 50 ; 0xc18b6
+ push word [es:di+004h] ; 26 ff 75 04 ; 0xc18b7
+ mov cx, word [es:di+002h] ; 26 8b 4d 02 ; 0xc18bb
+ mov bx, word [es:di+006h] ; 26 8b 5d 06 ; 0xc18bf
+ mov dx, word [es:di+008h] ; 26 8b 55 08 ; 0xc18c3
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc18c7
+ call 02e1ah ; e8 4d 15 ; 0xc18ca
+ xor bl, bl ; 30 db ; 0xc18cd vgabios.c:1195
+ mov AL, strict byte 003h ; b0 03 ; 0xc18cf
+ mov AH, strict byte 011h ; b4 11 ; 0xc18d1
+ int 06dh ; cd 6d ; 0xc18d3
+ mov bx, 0596ch ; bb 6c 59 ; 0xc18d5 vgabios.c:1199
+ mov cx, ds ; 8c d9 ; 0xc18d8
+ mov ax, strict word 0001fh ; b8 1f 00 ; 0xc18da
+ call 009f0h ; e8 10 f1 ; 0xc18dd
+ mov es, [bp-01eh] ; 8e 46 e2 ; 0xc18e0 vgabios.c:1201
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc18e3
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc18e7
+ je short 01905h ; 74 1a ; 0xc18e9
+ cmp AL, strict byte 00eh ; 3c 0e ; 0xc18eb
+ je short 01900h ; 74 11 ; 0xc18ed
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc18ef
+ jne short 0190ah ; 75 17 ; 0xc18f1
+ mov bx, 0556ch ; bb 6c 55 ; 0xc18f3 vgabios.c:1203
+ mov cx, ds ; 8c d9 ; 0xc18f6
+ mov ax, strict word 00043h ; b8 43 00 ; 0xc18f8
+ call 009f0h ; e8 f2 f0 ; 0xc18fb
+ jmp short 0190ah ; eb 0a ; 0xc18fe vgabios.c:1204
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc1900 vgabios.c:1206
+ jmp short 018f6h ; eb f1 ; 0xc1903
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc1905 vgabios.c:1209
+ jmp short 018f6h ; eb ec ; 0xc1908
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc190a vgabios.c:1212
+ pop di ; 5f ; 0xc190d
+ pop si ; 5e ; 0xc190e
+ pop dx ; 5a ; 0xc190f
+ pop cx ; 59 ; 0xc1910
+ pop bx ; 5b ; 0xc1911
+ pop bp ; 5d ; 0xc1912
+ retn ; c3 ; 0xc1913
+ ; disGetNextSymbol 0xc1914 LB 0x2c1e -> off=0x0 cb=000000000000008e uValue=00000000000c1914 'vgamem_copy_pl4'
+vgamem_copy_pl4: ; 0xc1914 LB 0x8e
+ push bp ; 55 ; 0xc1914 vgabios.c:1215
+ mov bp, sp ; 89 e5 ; 0xc1915
+ push si ; 56 ; 0xc1917
+ push di ; 57 ; 0xc1918
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc1919
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc191c
+ mov al, dl ; 88 d0 ; 0xc191f
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc1921
+ mov byte [bp-006h], cl ; 88 4e fa ; 0xc1924
+ xor ah, ah ; 30 e4 ; 0xc1927 vgabios.c:1221
+ mov dl, byte [bp+006h] ; 8a 56 06 ; 0xc1929
+ xor dh, dh ; 30 f6 ; 0xc192c
+ mov cx, dx ; 89 d1 ; 0xc192e
+ imul dx ; f7 ea ; 0xc1930
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc1932
+ xor dh, dh ; 30 f6 ; 0xc1935
+ mov si, dx ; 89 d6 ; 0xc1937
+ imul dx ; f7 ea ; 0xc1939
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc193b
+ xor dh, dh ; 30 f6 ; 0xc193e
+ mov bx, dx ; 89 d3 ; 0xc1940
+ add ax, dx ; 01 d0 ; 0xc1942
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc1944
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1947 vgabios.c:1222
+ xor ah, ah ; 30 e4 ; 0xc194a
+ imul cx ; f7 e9 ; 0xc194c
+ imul si ; f7 ee ; 0xc194e
+ add ax, bx ; 01 d8 ; 0xc1950
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc1952
+ mov ax, 00105h ; b8 05 01 ; 0xc1955 vgabios.c:1223
+ mov dx, 003ceh ; ba ce 03 ; 0xc1958
+ out DX, ax ; ef ; 0xc195b
+ xor bl, bl ; 30 db ; 0xc195c vgabios.c:1224
+ cmp bl, byte [bp+006h] ; 3a 5e 06 ; 0xc195e
+ jnc short 01992h ; 73 2f ; 0xc1961
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1963 vgabios.c:1226
+ xor ah, ah ; 30 e4 ; 0xc1966
+ mov cx, ax ; 89 c1 ; 0xc1968
+ mov al, bl ; 88 d8 ; 0xc196a
+ mov dx, ax ; 89 c2 ; 0xc196c
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc196e
+ mov si, ax ; 89 c6 ; 0xc1971
+ mov ax, dx ; 89 d0 ; 0xc1973
+ imul si ; f7 ee ; 0xc1975
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc1977
+ add si, ax ; 01 c6 ; 0xc197a
+ mov di, word [bp-00ch] ; 8b 7e f4 ; 0xc197c
+ add di, ax ; 01 c7 ; 0xc197f
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1981
+ mov es, dx ; 8e c2 ; 0xc1984
+ jcxz 0198eh ; e3 06 ; 0xc1986
+ push DS ; 1e ; 0xc1988
+ mov ds, dx ; 8e da ; 0xc1989
+ rep movsb ; f3 a4 ; 0xc198b
+ pop DS ; 1f ; 0xc198d
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc198e vgabios.c:1227
+ jmp short 0195eh ; eb cc ; 0xc1990
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1992 vgabios.c:1228
+ mov dx, 003ceh ; ba ce 03 ; 0xc1995
+ out DX, ax ; ef ; 0xc1998
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1999 vgabios.c:1229
+ pop di ; 5f ; 0xc199c
+ pop si ; 5e ; 0xc199d
+ pop bp ; 5d ; 0xc199e
+ retn 00004h ; c2 04 00 ; 0xc199f
+ ; disGetNextSymbol 0xc19a2 LB 0x2b90 -> off=0x0 cb=000000000000007b uValue=00000000000c19a2 'vgamem_fill_pl4'
+vgamem_fill_pl4: ; 0xc19a2 LB 0x7b
+ push bp ; 55 ; 0xc19a2 vgabios.c:1232
+ mov bp, sp ; 89 e5 ; 0xc19a3
+ push si ; 56 ; 0xc19a5
+ push di ; 57 ; 0xc19a6
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc19a7
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc19aa
+ mov al, dl ; 88 d0 ; 0xc19ad
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc19af
+ mov bh, cl ; 88 cf ; 0xc19b2
+ xor ah, ah ; 30 e4 ; 0xc19b4 vgabios.c:1238
+ mov dx, ax ; 89 c2 ; 0xc19b6
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc19b8
+ mov cx, ax ; 89 c1 ; 0xc19bb
+ mov ax, dx ; 89 d0 ; 0xc19bd
+ imul cx ; f7 e9 ; 0xc19bf
+ mov dl, bh ; 88 fa ; 0xc19c1
+ xor dh, dh ; 30 f6 ; 0xc19c3
+ imul dx ; f7 ea ; 0xc19c5
+ mov dx, ax ; 89 c2 ; 0xc19c7
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc19c9
+ xor ah, ah ; 30 e4 ; 0xc19cc
+ add dx, ax ; 01 c2 ; 0xc19ce
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc19d0
+ mov ax, 00205h ; b8 05 02 ; 0xc19d3 vgabios.c:1239
+ mov dx, 003ceh ; ba ce 03 ; 0xc19d6
+ out DX, ax ; ef ; 0xc19d9
+ xor bl, bl ; 30 db ; 0xc19da vgabios.c:1240
+ cmp bl, byte [bp+004h] ; 3a 5e 04 ; 0xc19dc
+ jnc short 01a0dh ; 73 2c ; 0xc19df
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc19e1 vgabios.c:1242
+ xor ch, ch ; 30 ed ; 0xc19e4
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc19e6
+ xor ah, ah ; 30 e4 ; 0xc19e9
+ mov si, ax ; 89 c6 ; 0xc19eb
+ mov al, bl ; 88 d8 ; 0xc19ed
+ mov dx, ax ; 89 c2 ; 0xc19ef
+ mov al, bh ; 88 f8 ; 0xc19f1
+ mov di, ax ; 89 c7 ; 0xc19f3
+ mov ax, dx ; 89 d0 ; 0xc19f5
+ imul di ; f7 ef ; 0xc19f7
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc19f9
+ add di, ax ; 01 c7 ; 0xc19fc
+ mov ax, si ; 89 f0 ; 0xc19fe
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1a00
+ mov es, dx ; 8e c2 ; 0xc1a03
+ jcxz 01a09h ; e3 02 ; 0xc1a05
+ rep stosb ; f3 aa ; 0xc1a07
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc1a09 vgabios.c:1243
+ jmp short 019dch ; eb cf ; 0xc1a0b
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1a0d vgabios.c:1244
+ mov dx, 003ceh ; ba ce 03 ; 0xc1a10
+ out DX, ax ; ef ; 0xc1a13
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1a14 vgabios.c:1245
+ pop di ; 5f ; 0xc1a17
+ pop si ; 5e ; 0xc1a18
+ pop bp ; 5d ; 0xc1a19
+ retn 00004h ; c2 04 00 ; 0xc1a1a
+ ; disGetNextSymbol 0xc1a1d LB 0x2b15 -> off=0x0 cb=00000000000000b6 uValue=00000000000c1a1d 'vgamem_copy_cga'
+vgamem_copy_cga: ; 0xc1a1d LB 0xb6
+ push bp ; 55 ; 0xc1a1d vgabios.c:1248
+ mov bp, sp ; 89 e5 ; 0xc1a1e
+ push si ; 56 ; 0xc1a20
+ push di ; 57 ; 0xc1a21
+ sub sp, strict byte 0000eh ; 83 ec 0e ; 0xc1a22
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc1a25
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc1a28
+ mov byte [bp-00ah], cl ; 88 4e f6 ; 0xc1a2b
+ mov al, dl ; 88 d0 ; 0xc1a2e vgabios.c:1254
+ xor ah, ah ; 30 e4 ; 0xc1a30
+ mov bx, ax ; 89 c3 ; 0xc1a32
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1a34
+ mov si, ax ; 89 c6 ; 0xc1a37
+ mov ax, bx ; 89 d8 ; 0xc1a39
+ imul si ; f7 ee ; 0xc1a3b
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc1a3d
+ mov di, bx ; 89 df ; 0xc1a40
+ imul bx ; f7 eb ; 0xc1a42
+ mov dx, ax ; 89 c2 ; 0xc1a44
+ sar dx, 1 ; d1 fa ; 0xc1a46
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1a48
+ xor ah, ah ; 30 e4 ; 0xc1a4b
+ mov bx, ax ; 89 c3 ; 0xc1a4d
+ add dx, ax ; 01 c2 ; 0xc1a4f
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc1a51
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1a54 vgabios.c:1255
+ imul si ; f7 ee ; 0xc1a57
+ imul di ; f7 ef ; 0xc1a59
+ sar ax, 1 ; d1 f8 ; 0xc1a5b
+ add ax, bx ; 01 d8 ; 0xc1a5d
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc1a5f
+ mov byte [bp-006h], bh ; 88 7e fa ; 0xc1a62 vgabios.c:1256
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1a65
+ xor ah, ah ; 30 e4 ; 0xc1a68
+ cwd ; 99 ; 0xc1a6a
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2 ; 0xc1a6b
+ sar ax, 1 ; d1 f8 ; 0xc1a6d
+ mov bx, ax ; 89 c3 ; 0xc1a6f
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1a71
+ xor ah, ah ; 30 e4 ; 0xc1a74
+ cmp ax, bx ; 39 d8 ; 0xc1a76
+ jnl short 01acah ; 7d 50 ; 0xc1a78
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc1a7a vgabios.c:1258
+ xor bh, bh ; 30 ff ; 0xc1a7d
+ mov word [bp-012h], bx ; 89 5e ee ; 0xc1a7f
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc1a82
+ imul bx ; f7 eb ; 0xc1a85
+ mov bx, ax ; 89 c3 ; 0xc1a87
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc1a89
+ add si, ax ; 01 c6 ; 0xc1a8c
+ mov di, word [bp-010h] ; 8b 7e f0 ; 0xc1a8e
+ add di, ax ; 01 c7 ; 0xc1a91
+ mov cx, word [bp-012h] ; 8b 4e ee ; 0xc1a93
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1a96
+ mov es, dx ; 8e c2 ; 0xc1a99
+ jcxz 01aa3h ; e3 06 ; 0xc1a9b
+ push DS ; 1e ; 0xc1a9d
+ mov ds, dx ; 8e da ; 0xc1a9e
+ rep movsb ; f3 a4 ; 0xc1aa0
+ pop DS ; 1f ; 0xc1aa2
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc1aa3 vgabios.c:1259
+ add si, 02000h ; 81 c6 00 20 ; 0xc1aa6
+ add si, bx ; 01 de ; 0xc1aaa
+ mov di, word [bp-010h] ; 8b 7e f0 ; 0xc1aac
+ add di, 02000h ; 81 c7 00 20 ; 0xc1aaf
+ add di, bx ; 01 df ; 0xc1ab3
+ mov cx, word [bp-012h] ; 8b 4e ee ; 0xc1ab5
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1ab8
+ mov es, dx ; 8e c2 ; 0xc1abb
+ jcxz 01ac5h ; e3 06 ; 0xc1abd
+ push DS ; 1e ; 0xc1abf
+ mov ds, dx ; 8e da ; 0xc1ac0
+ rep movsb ; f3 a4 ; 0xc1ac2
+ pop DS ; 1f ; 0xc1ac4
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1ac5 vgabios.c:1260
+ jmp short 01a65h ; eb 9b ; 0xc1ac8
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1aca vgabios.c:1261
+ pop di ; 5f ; 0xc1acd
+ pop si ; 5e ; 0xc1ace
+ pop bp ; 5d ; 0xc1acf
+ retn 00004h ; c2 04 00 ; 0xc1ad0
+ ; disGetNextSymbol 0xc1ad3 LB 0x2a5f -> off=0x0 cb=0000000000000094 uValue=00000000000c1ad3 'vgamem_fill_cga'
+vgamem_fill_cga: ; 0xc1ad3 LB 0x94
+ push bp ; 55 ; 0xc1ad3 vgabios.c:1264
+ mov bp, sp ; 89 e5 ; 0xc1ad4
+ push si ; 56 ; 0xc1ad6
+ push di ; 57 ; 0xc1ad7
+ sub sp, strict byte 0000ch ; 83 ec 0c ; 0xc1ad8
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc1adb
+ mov al, dl ; 88 d0 ; 0xc1ade
+ mov byte [bp-00ch], bl ; 88 5e f4 ; 0xc1ae0
+ mov byte [bp-008h], cl ; 88 4e f8 ; 0xc1ae3
+ xor ah, ah ; 30 e4 ; 0xc1ae6 vgabios.c:1270
+ mov dx, ax ; 89 c2 ; 0xc1ae8
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1aea
+ mov bx, ax ; 89 c3 ; 0xc1aed
+ mov ax, dx ; 89 d0 ; 0xc1aef
+ imul bx ; f7 eb ; 0xc1af1
+ mov dl, cl ; 88 ca ; 0xc1af3
+ xor dh, dh ; 30 f6 ; 0xc1af5
+ imul dx ; f7 ea ; 0xc1af7
+ mov dx, ax ; 89 c2 ; 0xc1af9
+ sar dx, 1 ; d1 fa ; 0xc1afb
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1afd
+ xor ah, ah ; 30 e4 ; 0xc1b00
+ add dx, ax ; 01 c2 ; 0xc1b02
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc1b04
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc1b07 vgabios.c:1271
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1b0a
+ xor ah, ah ; 30 e4 ; 0xc1b0d
+ cwd ; 99 ; 0xc1b0f
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2 ; 0xc1b10
+ sar ax, 1 ; d1 f8 ; 0xc1b12
+ mov dx, ax ; 89 c2 ; 0xc1b14
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1b16
+ xor ah, ah ; 30 e4 ; 0xc1b19
+ cmp ax, dx ; 39 d0 ; 0xc1b1b
+ jnl short 01b5eh ; 7d 3f ; 0xc1b1d
+ mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc1b1f vgabios.c:1273
+ xor bh, bh ; 30 ff ; 0xc1b22
+ mov dl, byte [bp+006h] ; 8a 56 06 ; 0xc1b24
+ xor dh, dh ; 30 f6 ; 0xc1b27
+ mov si, dx ; 89 d6 ; 0xc1b29
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc1b2b
+ imul dx ; f7 ea ; 0xc1b2e
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc1b30
+ mov di, word [bp-00eh] ; 8b 7e f2 ; 0xc1b33
+ add di, ax ; 01 c7 ; 0xc1b36
+ mov cx, bx ; 89 d9 ; 0xc1b38
+ mov ax, si ; 89 f0 ; 0xc1b3a
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1b3c
+ mov es, dx ; 8e c2 ; 0xc1b3f
+ jcxz 01b45h ; e3 02 ; 0xc1b41
+ rep stosb ; f3 aa ; 0xc1b43
+ mov di, word [bp-00eh] ; 8b 7e f2 ; 0xc1b45 vgabios.c:1274
+ add di, 02000h ; 81 c7 00 20 ; 0xc1b48
+ add di, word [bp-010h] ; 03 7e f0 ; 0xc1b4c
+ mov cx, bx ; 89 d9 ; 0xc1b4f
+ mov ax, si ; 89 f0 ; 0xc1b51
+ mov es, dx ; 8e c2 ; 0xc1b53
+ jcxz 01b59h ; e3 02 ; 0xc1b55
+ rep stosb ; f3 aa ; 0xc1b57
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1b59 vgabios.c:1275
+ jmp short 01b0ah ; eb ac ; 0xc1b5c
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1b5e vgabios.c:1276
+ pop di ; 5f ; 0xc1b61
+ pop si ; 5e ; 0xc1b62
+ pop bp ; 5d ; 0xc1b63
+ retn 00004h ; c2 04 00 ; 0xc1b64
+ ; disGetNextSymbol 0xc1b67 LB 0x29cb -> off=0x0 cb=0000000000000081 uValue=00000000000c1b67 'vgamem_copy_linear'
+vgamem_copy_linear: ; 0xc1b67 LB 0x81
+ push bp ; 55 ; 0xc1b67 vgabios.c:1279
+ mov bp, sp ; 89 e5 ; 0xc1b68
+ push si ; 56 ; 0xc1b6a
+ push di ; 57 ; 0xc1b6b
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc1b6c
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc1b6f
+ mov al, dl ; 88 d0 ; 0xc1b72
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc1b74
+ mov bx, cx ; 89 cb ; 0xc1b77
+ xor ah, ah ; 30 e4 ; 0xc1b79 vgabios.c:1285
+ mov si, ax ; 89 c6 ; 0xc1b7b
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1b7d
+ mov di, ax ; 89 c7 ; 0xc1b80
+ mov ax, si ; 89 f0 ; 0xc1b82
+ imul di ; f7 ef ; 0xc1b84
+ mul word [bp+004h] ; f7 66 04 ; 0xc1b86
+ mov si, ax ; 89 c6 ; 0xc1b89
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1b8b
+ xor ah, ah ; 30 e4 ; 0xc1b8e
+ mov cx, ax ; 89 c1 ; 0xc1b90
+ add si, ax ; 01 c6 ; 0xc1b92
+ sal si, 003h ; c1 e6 03 ; 0xc1b94
+ mov word [bp-00ch], si ; 89 76 f4 ; 0xc1b97
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1b9a vgabios.c:1286
+ imul di ; f7 ef ; 0xc1b9d
+ mul word [bp+004h] ; f7 66 04 ; 0xc1b9f
+ add ax, cx ; 01 c8 ; 0xc1ba2
+ sal ax, 003h ; c1 e0 03 ; 0xc1ba4
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc1ba7
+ sal bx, 003h ; c1 e3 03 ; 0xc1baa vgabios.c:1287
+ sal word [bp+004h], 003h ; c1 66 04 03 ; 0xc1bad vgabios.c:1288
+ mov byte [bp-006h], ch ; 88 6e fa ; 0xc1bb1 vgabios.c:1289
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1bb4
+ cmp al, byte [bp+006h] ; 3a 46 06 ; 0xc1bb7
+ jnc short 01bdfh ; 73 23 ; 0xc1bba
+ xor ah, ah ; 30 e4 ; 0xc1bbc vgabios.c:1291
+ mul word [bp+004h] ; f7 66 04 ; 0xc1bbe
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc1bc1
+ add si, ax ; 01 c6 ; 0xc1bc4
+ mov di, word [bp-00eh] ; 8b 7e f2 ; 0xc1bc6
+ add di, ax ; 01 c7 ; 0xc1bc9
+ mov cx, bx ; 89 d9 ; 0xc1bcb
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1bcd
+ mov es, dx ; 8e c2 ; 0xc1bd0
+ jcxz 01bdah ; e3 06 ; 0xc1bd2
+ push DS ; 1e ; 0xc1bd4
+ mov ds, dx ; 8e da ; 0xc1bd5
+ rep movsb ; f3 a4 ; 0xc1bd7
+ pop DS ; 1f ; 0xc1bd9
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1bda vgabios.c:1292
+ jmp short 01bb4h ; eb d5 ; 0xc1bdd
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1bdf vgabios.c:1293
+ pop di ; 5f ; 0xc1be2
+ pop si ; 5e ; 0xc1be3
+ pop bp ; 5d ; 0xc1be4
+ retn 00004h ; c2 04 00 ; 0xc1be5
+ ; disGetNextSymbol 0xc1be8 LB 0x294a -> off=0x0 cb=000000000000006d uValue=00000000000c1be8 'vgamem_fill_linear'
+vgamem_fill_linear: ; 0xc1be8 LB 0x6d
+ push bp ; 55 ; 0xc1be8 vgabios.c:1296
+ mov bp, sp ; 89 e5 ; 0xc1be9
+ push si ; 56 ; 0xc1beb
+ push di ; 57 ; 0xc1bec
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc1bed
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc1bf0
+ mov al, dl ; 88 d0 ; 0xc1bf3
+ mov si, cx ; 89 ce ; 0xc1bf5
+ xor ah, ah ; 30 e4 ; 0xc1bf7 vgabios.c:1302
+ mov dx, ax ; 89 c2 ; 0xc1bf9
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1bfb
+ mov di, ax ; 89 c7 ; 0xc1bfe
+ mov ax, dx ; 89 d0 ; 0xc1c00
+ imul di ; f7 ef ; 0xc1c02
+ mul cx ; f7 e1 ; 0xc1c04
+ mov dx, ax ; 89 c2 ; 0xc1c06
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1c08
+ xor ah, ah ; 30 e4 ; 0xc1c0b
+ add ax, dx ; 01 d0 ; 0xc1c0d
+ sal ax, 003h ; c1 e0 03 ; 0xc1c0f
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc1c12
+ sal bx, 003h ; c1 e3 03 ; 0xc1c15 vgabios.c:1303
+ sal si, 003h ; c1 e6 03 ; 0xc1c18 vgabios.c:1304
+ mov byte [bp-008h], 000h ; c6 46 f8 00 ; 0xc1c1b vgabios.c:1305
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1c1f
+ cmp al, byte [bp+004h] ; 3a 46 04 ; 0xc1c22
+ jnc short 01c4ch ; 73 25 ; 0xc1c25
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1c27 vgabios.c:1307
+ xor ah, ah ; 30 e4 ; 0xc1c2a
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc1c2c
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1c2f
+ mul si ; f7 e6 ; 0xc1c32
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc1c34
+ add di, ax ; 01 c7 ; 0xc1c37
+ mov cx, bx ; 89 d9 ; 0xc1c39
+ mov ax, word [bp-00ch] ; 8b 46 f4 ; 0xc1c3b
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1c3e
+ mov es, dx ; 8e c2 ; 0xc1c41
+ jcxz 01c47h ; e3 02 ; 0xc1c43
+ rep stosb ; f3 aa ; 0xc1c45
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc1c47 vgabios.c:1308
+ jmp short 01c1fh ; eb d3 ; 0xc1c4a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1c4c vgabios.c:1309
+ pop di ; 5f ; 0xc1c4f
+ pop si ; 5e ; 0xc1c50
+ pop bp ; 5d ; 0xc1c51
+ retn 00004h ; c2 04 00 ; 0xc1c52
+ ; disGetNextSymbol 0xc1c55 LB 0x28dd -> off=0x0 cb=0000000000000688 uValue=00000000000c1c55 'biosfn_scroll'
+biosfn_scroll: ; 0xc1c55 LB 0x688
+ push bp ; 55 ; 0xc1c55 vgabios.c:1312
+ mov bp, sp ; 89 e5 ; 0xc1c56
+ push si ; 56 ; 0xc1c58
+ push di ; 57 ; 0xc1c59
+ sub sp, strict byte 0001eh ; 83 ec 1e ; 0xc1c5a
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc1c5d
+ mov byte [bp-010h], dl ; 88 56 f0 ; 0xc1c60
+ mov byte [bp-00ch], bl ; 88 5e f4 ; 0xc1c63
+ mov byte [bp-008h], cl ; 88 4e f8 ; 0xc1c66
+ cmp bl, byte [bp+004h] ; 3a 5e 04 ; 0xc1c69 vgabios.c:1321
+ jnbe short 01c8ah ; 77 1c ; 0xc1c6c
+ cmp cl, byte [bp+006h] ; 3a 4e 06 ; 0xc1c6e vgabios.c:1322
+ jnbe short 01c8ah ; 77 17 ; 0xc1c71
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc1c73 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1c76
+ mov es, ax ; 8e c0 ; 0xc1c79
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1c7b
+ xor ah, ah ; 30 e4 ; 0xc1c7e vgabios.c:1326
+ call 03819h ; e8 96 1b ; 0xc1c80
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc1c83
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1c86 vgabios.c:1327
+ jne short 01c8dh ; 75 03 ; 0xc1c88
+ jmp near 022d4h ; e9 47 06 ; 0xc1c8a
+ mov bx, 00084h ; bb 84 00 ; 0xc1c8d vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1c90
+ mov es, ax ; 8e c0 ; 0xc1c93
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1c95
+ xor ah, ah ; 30 e4 ; 0xc1c98 vgabios.c:48
+ inc ax ; 40 ; 0xc1c9a
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc1c9b
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1c9e vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc1ca1
+ mov word [bp-01eh], ax ; 89 46 e2 ; 0xc1ca4 vgabios.c:58
+ cmp byte [bp+008h], 0ffh ; 80 7e 08 ff ; 0xc1ca7 vgabios.c:1334
+ jne short 01cb6h ; 75 09 ; 0xc1cab
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc1cad vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1cb0
+ mov byte [bp+008h], al ; 88 46 08 ; 0xc1cb3 vgabios.c:48
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1cb6 vgabios.c:1337
+ xor ah, ah ; 30 e4 ; 0xc1cb9
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc1cbb
+ jc short 01cc8h ; 72 08 ; 0xc1cbe
+ mov al, byte [bp-016h] ; 8a 46 ea ; 0xc1cc0
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc1cc3
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc1cc5
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1cc8 vgabios.c:1338
+ xor ah, ah ; 30 e4 ; 0xc1ccb
+ cmp ax, word [bp-01eh] ; 3b 46 e2 ; 0xc1ccd
+ jc short 01cdah ; 72 08 ; 0xc1cd0
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc1cd2
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc1cd5
+ mov byte [bp+006h], al ; 88 46 06 ; 0xc1cd7
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1cda vgabios.c:1339
+ xor ah, ah ; 30 e4 ; 0xc1cdd
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc1cdf
+ jbe short 01ce7h ; 76 03 ; 0xc1ce2
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc1ce4
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1ce7 vgabios.c:1340
+ sub al, byte [bp-008h] ; 2a 46 f8 ; 0xc1cea
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc1ced
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc1cef
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1cf2 vgabios.c:1342
+ mov byte [bp-01ah], al ; 88 46 e6 ; 0xc1cf5
+ mov byte [bp-019h], 000h ; c6 46 e7 00 ; 0xc1cf8
+ mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1cfc
+ sal bx, 003h ; c1 e3 03 ; 0xc1cff
+ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc1d02
+ dec ax ; 48 ; 0xc1d05
+ mov word [bp-022h], ax ; 89 46 de ; 0xc1d06
+ mov di, word [bp-016h] ; 8b 7e ea ; 0xc1d09
+ dec di ; 4f ; 0xc1d0c
+ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc1d0d
+ mul word [bp-016h] ; f7 66 ea ; 0xc1d10
+ mov cx, ax ; 89 c1 ; 0xc1d13
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc1d15
+ jne short 01d65h ; 75 49 ; 0xc1d1a
+ add ax, ax ; 01 c0 ; 0xc1d1c vgabios.c:1345
+ or AL, strict byte 0ffh ; 0c ff ; 0xc1d1e
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc1d20
+ xor dh, dh ; 30 f6 ; 0xc1d23
+ inc ax ; 40 ; 0xc1d25
+ mul dx ; f7 e2 ; 0xc1d26
+ mov word [bp-020h], ax ; 89 46 e0 ; 0xc1d28
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1d2b vgabios.c:1350
+ jne short 01d68h ; 75 37 ; 0xc1d2f
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1d31
+ jne short 01d68h ; 75 31 ; 0xc1d35
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1d37
+ jne short 01d68h ; 75 2b ; 0xc1d3b
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1d3d
+ xor ah, ah ; 30 e4 ; 0xc1d40
+ cmp ax, di ; 39 f8 ; 0xc1d42
+ jne short 01d68h ; 75 22 ; 0xc1d44
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1d46
+ cmp ax, word [bp-022h] ; 3b 46 de ; 0xc1d49
+ jne short 01d68h ; 75 1a ; 0xc1d4c
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1d4e vgabios.c:1352
+ sal ax, 008h ; c1 e0 08 ; 0xc1d51
+ add ax, strict word 00020h ; 05 20 00 ; 0xc1d54
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1d57
+ mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1d5b
+ jcxz 01d62h ; e3 02 ; 0xc1d5e
+ rep stosw ; f3 ab ; 0xc1d60
+ jmp near 022d4h ; e9 6f 05 ; 0xc1d62 vgabios.c:1354
+ jmp near 01ed8h ; e9 70 01 ; 0xc1d65
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1d68 vgabios.c:1356
+ jne short 01dceh ; 75 60 ; 0xc1d6c
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1d6e vgabios.c:1357
+ xor ah, ah ; 30 e4 ; 0xc1d71
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1d73
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc1d76
+ xor dh, dh ; 30 f6 ; 0xc1d79
+ cmp dx, word [bp-01ch] ; 3b 56 e4 ; 0xc1d7b
+ jc short 01dd0h ; 72 50 ; 0xc1d7e
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1d80 vgabios.c:1359
+ xor ah, ah ; 30 e4 ; 0xc1d83
+ add ax, word [bp-01ch] ; 03 46 e4 ; 0xc1d85
+ cmp ax, dx ; 39 d0 ; 0xc1d88
+ jnbe short 01d92h ; 77 06 ; 0xc1d8a
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1d8c
+ jne short 01dd3h ; 75 41 ; 0xc1d90
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc1d92 vgabios.c:1360
+ xor ch, ch ; 30 ed ; 0xc1d95
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1d97
+ xor ah, ah ; 30 e4 ; 0xc1d9a
+ mov si, ax ; 89 c6 ; 0xc1d9c
+ sal si, 008h ; c1 e6 08 ; 0xc1d9e
+ add si, strict byte 00020h ; 83 c6 20 ; 0xc1da1
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1da4
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1da7
+ mov dx, ax ; 89 c2 ; 0xc1daa
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1dac
+ xor ah, ah ; 30 e4 ; 0xc1daf
+ mov di, ax ; 89 c7 ; 0xc1db1
+ add di, dx ; 01 d7 ; 0xc1db3
+ add di, di ; 01 ff ; 0xc1db5
+ add di, word [bp-020h] ; 03 7e e0 ; 0xc1db7
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1dba
+ xor bh, bh ; 30 ff ; 0xc1dbd
+ sal bx, 003h ; c1 e3 03 ; 0xc1dbf
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1dc2
+ mov ax, si ; 89 f0 ; 0xc1dc6
+ jcxz 01dcch ; e3 02 ; 0xc1dc8
+ rep stosw ; f3 ab ; 0xc1dca
+ jmp short 01e13h ; eb 45 ; 0xc1dcc vgabios.c:1361
+ jmp short 01e19h ; eb 49 ; 0xc1dce
+ jmp near 022d4h ; e9 01 05 ; 0xc1dd0
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc1dd3 vgabios.c:1362
+ xor ch, ch ; 30 ed ; 0xc1dd6
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1dd8
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc1ddb
+ mov byte [bp-018h], dl ; 88 56 e8 ; 0xc1dde
+ mov byte [bp-017h], ch ; 88 6e e9 ; 0xc1de1
+ mov si, ax ; 89 c6 ; 0xc1de4
+ add si, word [bp-018h] ; 03 76 e8 ; 0xc1de6
+ add si, si ; 01 f6 ; 0xc1de9
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1deb
+ xor bh, bh ; 30 ff ; 0xc1dee
+ sal bx, 003h ; c1 e3 03 ; 0xc1df0
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1df3
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1df7
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1dfa
+ add ax, word [bp-018h] ; 03 46 e8 ; 0xc1dfd
+ add ax, ax ; 01 c0 ; 0xc1e00
+ mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1e02
+ add di, ax ; 01 c7 ; 0xc1e05
+ mov dx, bx ; 89 da ; 0xc1e07
+ mov es, bx ; 8e c3 ; 0xc1e09
+ jcxz 01e13h ; e3 06 ; 0xc1e0b
+ push DS ; 1e ; 0xc1e0d
+ mov ds, dx ; 8e da ; 0xc1e0e
+ rep movsw ; f3 a5 ; 0xc1e10
+ pop DS ; 1f ; 0xc1e12
+ inc word [bp-01ch] ; ff 46 e4 ; 0xc1e13 vgabios.c:1363
+ jmp near 01d76h ; e9 5d ff ; 0xc1e16
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1e19 vgabios.c:1366
+ xor ah, ah ; 30 e4 ; 0xc1e1c
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1e1e
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1e21
+ xor ah, ah ; 30 e4 ; 0xc1e24
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc1e26
+ jnbe short 01dd0h ; 77 a5 ; 0xc1e29
+ mov dl, al ; 88 c2 ; 0xc1e2b vgabios.c:1368
+ xor dh, dh ; 30 f6 ; 0xc1e2d
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1e2f
+ add ax, dx ; 01 d0 ; 0xc1e32
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc1e34
+ jnbe short 01e3fh ; 77 06 ; 0xc1e37
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1e39
+ jne short 01e7bh ; 75 3c ; 0xc1e3d
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc1e3f vgabios.c:1369
+ xor ch, ch ; 30 ed ; 0xc1e42
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1e44
+ xor ah, ah ; 30 e4 ; 0xc1e47
+ mov si, ax ; 89 c6 ; 0xc1e49
+ sal si, 008h ; c1 e6 08 ; 0xc1e4b
+ add si, strict byte 00020h ; 83 c6 20 ; 0xc1e4e
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1e51
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1e54
+ mov dx, ax ; 89 c2 ; 0xc1e57
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1e59
+ xor ah, ah ; 30 e4 ; 0xc1e5c
+ add ax, dx ; 01 d0 ; 0xc1e5e
+ add ax, ax ; 01 c0 ; 0xc1e60
+ mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1e62
+ add di, ax ; 01 c7 ; 0xc1e65
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e67
+ xor bh, bh ; 30 ff ; 0xc1e6a
+ sal bx, 003h ; c1 e3 03 ; 0xc1e6c
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1e6f
+ mov ax, si ; 89 f0 ; 0xc1e73
+ jcxz 01e79h ; e3 02 ; 0xc1e75
+ rep stosw ; f3 ab ; 0xc1e77
+ jmp short 01ec8h ; eb 4d ; 0xc1e79 vgabios.c:1370
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1e7b vgabios.c:1371
+ mov byte [bp-018h], al ; 88 46 e8 ; 0xc1e7e
+ mov byte [bp-017h], dh ; 88 76 e9 ; 0xc1e81
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1e84
+ xor ah, ah ; 30 e4 ; 0xc1e87
+ mov dx, word [bp-01ch] ; 8b 56 e4 ; 0xc1e89
+ sub dx, ax ; 29 c2 ; 0xc1e8c
+ mov ax, dx ; 89 d0 ; 0xc1e8e
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1e90
+ mov cl, byte [bp-008h] ; 8a 4e f8 ; 0xc1e93
+ xor ch, ch ; 30 ed ; 0xc1e96
+ mov si, ax ; 89 c6 ; 0xc1e98
+ add si, cx ; 01 ce ; 0xc1e9a
+ add si, si ; 01 f6 ; 0xc1e9c
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e9e
+ xor bh, bh ; 30 ff ; 0xc1ea1
+ sal bx, 003h ; c1 e3 03 ; 0xc1ea3
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1ea6
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc1eaa
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1ead
+ add ax, cx ; 01 c8 ; 0xc1eb0
+ add ax, ax ; 01 c0 ; 0xc1eb2
+ mov di, word [bp-020h] ; 8b 7e e0 ; 0xc1eb4
+ add di, ax ; 01 c7 ; 0xc1eb7
+ mov cx, word [bp-018h] ; 8b 4e e8 ; 0xc1eb9
+ mov dx, bx ; 89 da ; 0xc1ebc
+ mov es, bx ; 8e c3 ; 0xc1ebe
+ jcxz 01ec8h ; e3 06 ; 0xc1ec0
+ push DS ; 1e ; 0xc1ec2
+ mov ds, dx ; 8e da ; 0xc1ec3
+ rep movsw ; f3 a5 ; 0xc1ec5
+ pop DS ; 1f ; 0xc1ec7
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1ec8 vgabios.c:1372
+ xor ah, ah ; 30 e4 ; 0xc1ecb
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc1ecd
+ jc short 01f05h ; 72 33 ; 0xc1ed0
+ dec word [bp-01ch] ; ff 4e e4 ; 0xc1ed2 vgabios.c:1373
+ jmp near 01e21h ; e9 49 ff ; 0xc1ed5
+ mov si, word [bp-01ah] ; 8b 76 e6 ; 0xc1ed8 vgabios.c:1379
+ mov al, byte [si+0482eh] ; 8a 84 2e 48 ; 0xc1edb
+ xor ah, ah ; 30 e4 ; 0xc1edf
+ mov si, ax ; 89 c6 ; 0xc1ee1
+ sal si, 006h ; c1 e6 06 ; 0xc1ee3
+ mov al, byte [si+04844h] ; 8a 84 44 48 ; 0xc1ee6
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1eea
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc1eed vgabios.c:1380
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc1ef1
+ jc short 01f01h ; 72 0c ; 0xc1ef3
+ jbe short 01f08h ; 76 11 ; 0xc1ef5
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc1ef7
+ je short 01f36h ; 74 3b ; 0xc1ef9
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc1efb
+ je short 01f08h ; 74 09 ; 0xc1efd
+ jmp short 01f05h ; eb 04 ; 0xc1eff
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc1f01
+ je short 01f39h ; 74 34 ; 0xc1f03
+ jmp near 022d4h ; e9 cc 03 ; 0xc1f05
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1f08 vgabios.c:1384
+ jne short 01f34h ; 75 26 ; 0xc1f0c
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1f0e
+ jne short 01f76h ; 75 62 ; 0xc1f12
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1f14
+ jne short 01f76h ; 75 5c ; 0xc1f18
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1f1a
+ xor ah, ah ; 30 e4 ; 0xc1f1d
+ mov dx, word [bp-016h] ; 8b 56 ea ; 0xc1f1f
+ dec dx ; 4a ; 0xc1f22
+ cmp ax, dx ; 39 d0 ; 0xc1f23
+ jne short 01f76h ; 75 4f ; 0xc1f25
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1f27
+ xor ah, dh ; 30 f4 ; 0xc1f2a
+ mov dx, word [bp-01eh] ; 8b 56 e2 ; 0xc1f2c
+ dec dx ; 4a ; 0xc1f2f
+ cmp ax, dx ; 39 d0 ; 0xc1f30
+ je short 01f3ch ; 74 08 ; 0xc1f32
+ jmp short 01f76h ; eb 40 ; 0xc1f34
+ jmp near 021ach ; e9 73 02 ; 0xc1f36
+ jmp near 02066h ; e9 2a 01 ; 0xc1f39
+ mov ax, 00205h ; b8 05 02 ; 0xc1f3c vgabios.c:1386
+ mov dx, 003ceh ; ba ce 03 ; 0xc1f3f
+ out DX, ax ; ef ; 0xc1f42
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1f43 vgabios.c:1387
+ mul word [bp-01eh] ; f7 66 e2 ; 0xc1f46
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc1f49
+ xor dh, dh ; 30 f6 ; 0xc1f4c
+ mul dx ; f7 e2 ; 0xc1f4e
+ mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc1f50
+ xor dh, dh ; 30 f6 ; 0xc1f53
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1f55
+ xor bh, bh ; 30 ff ; 0xc1f58
+ sal bx, 003h ; c1 e3 03 ; 0xc1f5a
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1f5d
+ mov cx, ax ; 89 c1 ; 0xc1f61
+ mov ax, dx ; 89 d0 ; 0xc1f63
+ xor di, di ; 31 ff ; 0xc1f65
+ mov es, bx ; 8e c3 ; 0xc1f67
+ jcxz 01f6dh ; e3 02 ; 0xc1f69
+ rep stosb ; f3 aa ; 0xc1f6b
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1f6d vgabios.c:1388
+ mov dx, 003ceh ; ba ce 03 ; 0xc1f70
+ out DX, ax ; ef ; 0xc1f73
+ jmp short 01f05h ; eb 8f ; 0xc1f74 vgabios.c:1390
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1f76 vgabios.c:1392
+ jne short 01ff1h ; 75 75 ; 0xc1f7a
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1f7c vgabios.c:1393
+ xor ah, ah ; 30 e4 ; 0xc1f7f
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1f81
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1f84
+ xor ah, ah ; 30 e4 ; 0xc1f87
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc1f89
+ jc short 01feeh ; 72 60 ; 0xc1f8c
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc1f8e vgabios.c:1395
+ xor dh, dh ; 30 f6 ; 0xc1f91
+ add dx, word [bp-01ch] ; 03 56 e4 ; 0xc1f93
+ cmp dx, ax ; 39 c2 ; 0xc1f96
+ jnbe short 01fa0h ; 77 06 ; 0xc1f98
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1f9a
+ jne short 01fc1h ; 75 21 ; 0xc1f9e
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1fa0 vgabios.c:1396
+ xor ah, ah ; 30 e4 ; 0xc1fa3
+ push ax ; 50 ; 0xc1fa5
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc1fa6
+ push ax ; 50 ; 0xc1fa9
+ mov cl, byte [bp-01eh] ; 8a 4e e2 ; 0xc1faa
+ xor ch, ch ; 30 ed ; 0xc1fad
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc1faf
+ xor bh, bh ; 30 ff ; 0xc1fb2
+ mov dl, byte [bp-01ch] ; 8a 56 e4 ; 0xc1fb4
+ xor dh, dh ; 30 f6 ; 0xc1fb7
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1fb9
+ call 019a2h ; e8 e3 f9 ; 0xc1fbc
+ jmp short 01fe9h ; eb 28 ; 0xc1fbf vgabios.c:1397
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc1fc1 vgabios.c:1398
+ push ax ; 50 ; 0xc1fc4
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc1fc5
+ push ax ; 50 ; 0xc1fc8
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc1fc9
+ xor ch, ch ; 30 ed ; 0xc1fcc
+ mov bl, byte [bp-01ch] ; 8a 5e e4 ; 0xc1fce
+ xor bh, bh ; 30 ff ; 0xc1fd1
+ mov dl, bl ; 88 da ; 0xc1fd3
+ add dl, byte [bp-006h] ; 02 56 fa ; 0xc1fd5
+ xor dh, dh ; 30 f6 ; 0xc1fd8
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1fda
+ mov byte [bp-018h], al ; 88 46 e8 ; 0xc1fdd
+ mov byte [bp-017h], ah ; 88 66 e9 ; 0xc1fe0
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1fe3
+ call 01914h ; e8 2b f9 ; 0xc1fe6
+ inc word [bp-01ch] ; ff 46 e4 ; 0xc1fe9 vgabios.c:1399
+ jmp short 01f84h ; eb 96 ; 0xc1fec
+ jmp near 022d4h ; e9 e3 02 ; 0xc1fee
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1ff1 vgabios.c:1402
+ xor ah, ah ; 30 e4 ; 0xc1ff4
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1ff6
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1ff9
+ xor ah, ah ; 30 e4 ; 0xc1ffc
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc1ffe
+ jnbe short 01feeh ; 77 eb ; 0xc2001
+ mov dl, al ; 88 c2 ; 0xc2003 vgabios.c:1404
+ xor dh, dh ; 30 f6 ; 0xc2005
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2007
+ add ax, dx ; 01 d0 ; 0xc200a
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc200c
+ jnbe short 02017h ; 77 06 ; 0xc200f
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2011
+ jne short 02038h ; 75 21 ; 0xc2015
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2017 vgabios.c:1405
+ xor ah, ah ; 30 e4 ; 0xc201a
+ push ax ; 50 ; 0xc201c
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc201d
+ push ax ; 50 ; 0xc2020
+ mov cl, byte [bp-01eh] ; 8a 4e e2 ; 0xc2021
+ xor ch, ch ; 30 ed ; 0xc2024
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2026
+ xor bh, bh ; 30 ff ; 0xc2029
+ mov dl, byte [bp-01ch] ; 8a 56 e4 ; 0xc202b
+ xor dh, dh ; 30 f6 ; 0xc202e
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2030
+ call 019a2h ; e8 6c f9 ; 0xc2033
+ jmp short 02057h ; eb 1f ; 0xc2036 vgabios.c:1406
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2038 vgabios.c:1407
+ xor ah, ah ; 30 e4 ; 0xc203b
+ push ax ; 50 ; 0xc203d
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc203e
+ push ax ; 50 ; 0xc2041
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc2042
+ xor ch, ch ; 30 ed ; 0xc2045
+ mov bl, byte [bp-01ch] ; 8a 5e e4 ; 0xc2047
+ xor bh, bh ; 30 ff ; 0xc204a
+ mov dl, bl ; 88 da ; 0xc204c
+ sub dl, byte [bp-006h] ; 2a 56 fa ; 0xc204e
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2051
+ call 01914h ; e8 bd f8 ; 0xc2054
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2057 vgabios.c:1408
+ xor ah, ah ; 30 e4 ; 0xc205a
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc205c
+ jc short 020afh ; 72 4e ; 0xc205f
+ dec word [bp-01ch] ; ff 4e e4 ; 0xc2061 vgabios.c:1409
+ jmp short 01ff9h ; eb 93 ; 0xc2064
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc2066 vgabios.c:1414
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc206a
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc206d vgabios.c:1415
+ jne short 020b2h ; 75 3f ; 0xc2071
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc2073
+ jne short 020b2h ; 75 39 ; 0xc2077
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc2079
+ jne short 020b2h ; 75 33 ; 0xc207d
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc207f
+ cmp ax, di ; 39 f8 ; 0xc2082
+ jne short 020b2h ; 75 2c ; 0xc2084
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2086
+ cmp ax, word [bp-022h] ; 3b 46 de ; 0xc2089
+ jne short 020b2h ; 75 24 ; 0xc208c
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc208e vgabios.c:1417
+ xor dh, dh ; 30 f6 ; 0xc2091
+ mov ax, cx ; 89 c8 ; 0xc2093
+ mul dx ; f7 e2 ; 0xc2095
+ mov dl, byte [bp-014h] ; 8a 56 ec ; 0xc2097
+ xor dh, dh ; 30 f6 ; 0xc209a
+ mul dx ; f7 e2 ; 0xc209c
+ mov cx, ax ; 89 c1 ; 0xc209e
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc20a0
+ xor ah, ah ; 30 e4 ; 0xc20a3
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc20a5
+ xor di, di ; 31 ff ; 0xc20a9
+ jcxz 020afh ; e3 02 ; 0xc20ab
+ rep stosb ; f3 aa ; 0xc20ad
+ jmp near 022d4h ; e9 22 02 ; 0xc20af vgabios.c:1419
+ cmp byte [bp-014h], 002h ; 80 7e ec 02 ; 0xc20b2 vgabios.c:1421
+ jne short 020c1h ; 75 09 ; 0xc20b6
+ sal byte [bp-008h], 1 ; d0 66 f8 ; 0xc20b8 vgabios.c:1423
+ sal byte [bp-00ah], 1 ; d0 66 f6 ; 0xc20bb vgabios.c:1424
+ sal word [bp-01eh], 1 ; d1 66 e2 ; 0xc20be vgabios.c:1425
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc20c1 vgabios.c:1428
+ jne short 02130h ; 75 69 ; 0xc20c5
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc20c7 vgabios.c:1429
+ xor ah, ah ; 30 e4 ; 0xc20ca
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc20cc
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc20cf
+ xor ah, ah ; 30 e4 ; 0xc20d2
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc20d4
+ jc short 020afh ; 72 d6 ; 0xc20d7
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc20d9 vgabios.c:1431
+ xor dh, dh ; 30 f6 ; 0xc20dc
+ add dx, word [bp-01ch] ; 03 56 e4 ; 0xc20de
+ cmp dx, ax ; 39 c2 ; 0xc20e1
+ jnbe short 020ebh ; 77 06 ; 0xc20e3
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc20e5
+ jne short 0210ch ; 75 21 ; 0xc20e9
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc20eb vgabios.c:1432
+ xor ah, ah ; 30 e4 ; 0xc20ee
+ push ax ; 50 ; 0xc20f0
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc20f1
+ push ax ; 50 ; 0xc20f4
+ mov cl, byte [bp-01eh] ; 8a 4e e2 ; 0xc20f5
+ xor ch, ch ; 30 ed ; 0xc20f8
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc20fa
+ xor bh, bh ; 30 ff ; 0xc20fd
+ mov dl, byte [bp-01ch] ; 8a 56 e4 ; 0xc20ff
+ xor dh, dh ; 30 f6 ; 0xc2102
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2104
+ call 01ad3h ; e8 c9 f9 ; 0xc2107
+ jmp short 0212bh ; eb 1f ; 0xc210a vgabios.c:1433
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc210c vgabios.c:1434
+ push ax ; 50 ; 0xc210f
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc2110
+ push ax ; 50 ; 0xc2113
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc2114
+ xor ch, ch ; 30 ed ; 0xc2117
+ mov bl, byte [bp-01ch] ; 8a 5e e4 ; 0xc2119
+ xor bh, bh ; 30 ff ; 0xc211c
+ mov dl, bl ; 88 da ; 0xc211e
+ add dl, byte [bp-006h] ; 02 56 fa ; 0xc2120
+ xor dh, dh ; 30 f6 ; 0xc2123
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2125
+ call 01a1dh ; e8 f2 f8 ; 0xc2128
+ inc word [bp-01ch] ; ff 46 e4 ; 0xc212b vgabios.c:1435
+ jmp short 020cfh ; eb 9f ; 0xc212e
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2130 vgabios.c:1438
+ xor ah, ah ; 30 e4 ; 0xc2133
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc2135
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2138
+ xor ah, ah ; 30 e4 ; 0xc213b
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc213d
+ jnbe short 021aah ; 77 68 ; 0xc2140
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc2142 vgabios.c:1440
+ xor dh, dh ; 30 f6 ; 0xc2145
+ add ax, dx ; 01 d0 ; 0xc2147
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc2149
+ jnbe short 02152h ; 77 04 ; 0xc214c
+ test dl, dl ; 84 d2 ; 0xc214e
+ jne short 0217ch ; 75 2a ; 0xc2150
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2152 vgabios.c:1441
+ xor ah, ah ; 30 e4 ; 0xc2155
+ push ax ; 50 ; 0xc2157
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2158
+ push ax ; 50 ; 0xc215b
+ mov cl, byte [bp-01eh] ; 8a 4e e2 ; 0xc215c
+ xor ch, ch ; 30 ed ; 0xc215f
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2161
+ xor bh, bh ; 30 ff ; 0xc2164
+ mov dl, byte [bp-01ch] ; 8a 56 e4 ; 0xc2166
+ xor dh, dh ; 30 f6 ; 0xc2169
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc216b
+ mov byte [bp-018h], al ; 88 46 e8 ; 0xc216e
+ mov byte [bp-017h], ah ; 88 66 e9 ; 0xc2171
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc2174
+ call 01ad3h ; e8 59 f9 ; 0xc2177
+ jmp short 0219bh ; eb 1f ; 0xc217a vgabios.c:1442
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc217c vgabios.c:1443
+ xor ah, ah ; 30 e4 ; 0xc217f
+ push ax ; 50 ; 0xc2181
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc2182
+ push ax ; 50 ; 0xc2185
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc2186
+ xor ch, ch ; 30 ed ; 0xc2189
+ mov bl, byte [bp-01ch] ; 8a 5e e4 ; 0xc218b
+ xor bh, bh ; 30 ff ; 0xc218e
+ mov dl, bl ; 88 da ; 0xc2190
+ sub dl, byte [bp-006h] ; 2a 56 fa ; 0xc2192
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2195
+ call 01a1dh ; e8 82 f8 ; 0xc2198
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc219b vgabios.c:1444
+ xor ah, ah ; 30 e4 ; 0xc219e
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc21a0
+ jc short 021eah ; 72 45 ; 0xc21a3
+ dec word [bp-01ch] ; ff 4e e4 ; 0xc21a5 vgabios.c:1445
+ jmp short 02138h ; eb 8e ; 0xc21a8
+ jmp short 021eah ; eb 3e ; 0xc21aa
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc21ac vgabios.c:1450
+ jne short 021edh ; 75 3b ; 0xc21b0
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc21b2
+ jne short 021edh ; 75 35 ; 0xc21b6
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc21b8
+ jne short 021edh ; 75 2f ; 0xc21bc
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc21be
+ cmp ax, di ; 39 f8 ; 0xc21c1
+ jne short 021edh ; 75 28 ; 0xc21c3
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc21c5
+ cmp ax, word [bp-022h] ; 3b 46 de ; 0xc21c8
+ jne short 021edh ; 75 20 ; 0xc21cb
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc21cd vgabios.c:1452
+ xor dh, dh ; 30 f6 ; 0xc21d0
+ mov ax, cx ; 89 c8 ; 0xc21d2
+ mul dx ; f7 e2 ; 0xc21d4
+ mov cx, ax ; 89 c1 ; 0xc21d6
+ sal cx, 003h ; c1 e1 03 ; 0xc21d8
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc21db
+ xor ah, ah ; 30 e4 ; 0xc21de
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc21e0
+ xor di, di ; 31 ff ; 0xc21e4
+ jcxz 021eah ; e3 02 ; 0xc21e6
+ rep stosb ; f3 aa ; 0xc21e8
+ jmp near 022d4h ; e9 e7 00 ; 0xc21ea vgabios.c:1454
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc21ed vgabios.c:1457
+ jne short 02262h ; 75 6f ; 0xc21f1
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc21f3 vgabios.c:1458
+ xor ah, ah ; 30 e4 ; 0xc21f6
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc21f8
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc21fb
+ xor ah, ah ; 30 e4 ; 0xc21fe
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc2200
+ jc short 021eah ; 72 e5 ; 0xc2203
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc2205 vgabios.c:1460
+ xor dh, dh ; 30 f6 ; 0xc2208
+ add dx, word [bp-01ch] ; 03 56 e4 ; 0xc220a
+ cmp dx, ax ; 39 c2 ; 0xc220d
+ jnbe short 02217h ; 77 06 ; 0xc220f
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2211
+ jne short 02236h ; 75 1f ; 0xc2215
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2217 vgabios.c:1461
+ xor ah, ah ; 30 e4 ; 0xc221a
+ push ax ; 50 ; 0xc221c
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc221d
+ push ax ; 50 ; 0xc2220
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2221
+ xor bh, bh ; 30 ff ; 0xc2224
+ mov dl, byte [bp-01ch] ; 8a 56 e4 ; 0xc2226
+ xor dh, dh ; 30 f6 ; 0xc2229
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc222b
+ mov cx, word [bp-01eh] ; 8b 4e e2 ; 0xc222e
+ call 01be8h ; e8 b4 f9 ; 0xc2231
+ jmp short 0225dh ; eb 27 ; 0xc2234 vgabios.c:1462
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2236 vgabios.c:1463
+ push ax ; 50 ; 0xc2239
+ push word [bp-01eh] ; ff 76 e2 ; 0xc223a
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc223d
+ xor ch, ch ; 30 ed ; 0xc2240
+ mov bl, byte [bp-01ch] ; 8a 5e e4 ; 0xc2242
+ xor bh, bh ; 30 ff ; 0xc2245
+ mov dl, bl ; 88 da ; 0xc2247
+ add dl, byte [bp-006h] ; 02 56 fa ; 0xc2249
+ xor dh, dh ; 30 f6 ; 0xc224c
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc224e
+ mov byte [bp-018h], al ; 88 46 e8 ; 0xc2251
+ mov byte [bp-017h], ah ; 88 66 e9 ; 0xc2254
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc2257
+ call 01b67h ; e8 0a f9 ; 0xc225a
+ inc word [bp-01ch] ; ff 46 e4 ; 0xc225d vgabios.c:1464
+ jmp short 021fbh ; eb 99 ; 0xc2260
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2262 vgabios.c:1467
+ xor ah, ah ; 30 e4 ; 0xc2265
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc2267
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc226a
+ xor ah, ah ; 30 e4 ; 0xc226d
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc226f
+ jnbe short 022d4h ; 77 60 ; 0xc2272
+ mov dl, al ; 88 c2 ; 0xc2274 vgabios.c:1469
+ xor dh, dh ; 30 f6 ; 0xc2276
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2278
+ add ax, dx ; 01 d0 ; 0xc227b
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc227d
+ jnbe short 02288h ; 77 06 ; 0xc2280
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2282
+ jne short 022a7h ; 75 1f ; 0xc2286
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2288 vgabios.c:1470
+ xor ah, ah ; 30 e4 ; 0xc228b
+ push ax ; 50 ; 0xc228d
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc228e
+ push ax ; 50 ; 0xc2291
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2292
+ xor bh, bh ; 30 ff ; 0xc2295
+ mov dl, byte [bp-01ch] ; 8a 56 e4 ; 0xc2297
+ xor dh, dh ; 30 f6 ; 0xc229a
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc229c
+ mov cx, word [bp-01eh] ; 8b 4e e2 ; 0xc229f
+ call 01be8h ; e8 43 f9 ; 0xc22a2
+ jmp short 022c5h ; eb 1e ; 0xc22a5 vgabios.c:1471
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc22a7 vgabios.c:1472
+ xor ah, ah ; 30 e4 ; 0xc22aa
+ push ax ; 50 ; 0xc22ac
+ push word [bp-01eh] ; ff 76 e2 ; 0xc22ad
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc22b0
+ xor ch, ch ; 30 ed ; 0xc22b3
+ mov bl, byte [bp-01ch] ; 8a 5e e4 ; 0xc22b5
+ xor bh, bh ; 30 ff ; 0xc22b8
+ mov dl, bl ; 88 da ; 0xc22ba
+ sub dl, byte [bp-006h] ; 2a 56 fa ; 0xc22bc
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc22bf
+ call 01b67h ; e8 a2 f8 ; 0xc22c2
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc22c5 vgabios.c:1473
+ xor ah, ah ; 30 e4 ; 0xc22c8
+ cmp ax, word [bp-01ch] ; 3b 46 e4 ; 0xc22ca
+ jc short 022d4h ; 72 05 ; 0xc22cd
+ dec word [bp-01ch] ; ff 4e e4 ; 0xc22cf vgabios.c:1474
+ jmp short 0226ah ; eb 96 ; 0xc22d2
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc22d4 vgabios.c:1485
+ pop di ; 5f ; 0xc22d7
+ pop si ; 5e ; 0xc22d8
+ pop bp ; 5d ; 0xc22d9
+ retn 00008h ; c2 08 00 ; 0xc22da
+ ; disGetNextSymbol 0xc22dd LB 0x2255 -> off=0x0 cb=0000000000000111 uValue=00000000000c22dd 'write_gfx_char_pl4'
+write_gfx_char_pl4: ; 0xc22dd LB 0x111
+ push bp ; 55 ; 0xc22dd vgabios.c:1488
+ mov bp, sp ; 89 e5 ; 0xc22de
+ push si ; 56 ; 0xc22e0
+ push di ; 57 ; 0xc22e1
+ sub sp, strict byte 0000eh ; 83 ec 0e ; 0xc22e2
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc22e5
+ mov byte [bp-008h], dl ; 88 56 f8 ; 0xc22e8
+ mov ch, bl ; 88 dd ; 0xc22eb
+ mov al, cl ; 88 c8 ; 0xc22ed
+ mov bx, 0010ch ; bb 0c 01 ; 0xc22ef vgabios.c:67
+ xor dx, dx ; 31 d2 ; 0xc22f2
+ mov es, dx ; 8e c2 ; 0xc22f4
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc22f6
+ mov bx, word [es:bx+002h] ; 26 8b 5f 02 ; 0xc22f9
+ mov word [bp-012h], dx ; 89 56 ee ; 0xc22fd vgabios.c:68
+ mov word [bp-00ch], bx ; 89 5e f4 ; 0xc2300
+ xor ah, ah ; 30 e4 ; 0xc2303 vgabios.c:1497
+ mov bl, byte [bp+006h] ; 8a 5e 06 ; 0xc2305
+ xor bh, bh ; 30 ff ; 0xc2308
+ imul bx ; f7 eb ; 0xc230a
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc230c
+ xor dh, dh ; 30 f6 ; 0xc230f
+ imul dx ; f7 ea ; 0xc2311
+ mov si, ax ; 89 c6 ; 0xc2313
+ mov al, ch ; 88 e8 ; 0xc2315
+ xor ah, ah ; 30 e4 ; 0xc2317
+ add si, ax ; 01 c6 ; 0xc2319
+ mov di, strict word 0004ch ; bf 4c 00 ; 0xc231b vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc231e
+ mov es, ax ; 8e c0 ; 0xc2321
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc2323
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2326 vgabios.c:58
+ xor dh, dh ; 30 f6 ; 0xc2329
+ mul dx ; f7 e2 ; 0xc232b
+ add si, ax ; 01 c6 ; 0xc232d
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc232f vgabios.c:1499
+ xor ah, ah ; 30 e4 ; 0xc2332
+ imul bx ; f7 eb ; 0xc2334
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc2336
+ mov ax, 00f02h ; b8 02 0f ; 0xc2339 vgabios.c:1500
+ mov dx, 003c4h ; ba c4 03 ; 0xc233c
+ out DX, ax ; ef ; 0xc233f
+ mov ax, 00205h ; b8 05 02 ; 0xc2340 vgabios.c:1501
+ mov dx, 003ceh ; ba ce 03 ; 0xc2343
+ out DX, ax ; ef ; 0xc2346
+ test byte [bp-008h], 080h ; f6 46 f8 80 ; 0xc2347 vgabios.c:1502
+ je short 02353h ; 74 06 ; 0xc234b
+ mov ax, 01803h ; b8 03 18 ; 0xc234d vgabios.c:1504
+ out DX, ax ; ef ; 0xc2350
+ jmp short 02357h ; eb 04 ; 0xc2351 vgabios.c:1506
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc2353 vgabios.c:1508
+ out DX, ax ; ef ; 0xc2356
+ xor ch, ch ; 30 ed ; 0xc2357 vgabios.c:1510
+ cmp ch, byte [bp+006h] ; 3a 6e 06 ; 0xc2359
+ jnc short 023d0h ; 73 72 ; 0xc235c
+ mov al, ch ; 88 e8 ; 0xc235e vgabios.c:1512
+ xor ah, ah ; 30 e4 ; 0xc2360
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc2362
+ xor bh, bh ; 30 ff ; 0xc2365
+ imul bx ; f7 eb ; 0xc2367
+ mov bx, si ; 89 f3 ; 0xc2369
+ add bx, ax ; 01 c3 ; 0xc236b
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc236d vgabios.c:1513
+ jmp short 02385h ; eb 12 ; 0xc2371
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2373 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc2376
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc2378
+ inc byte [bp-006h] ; fe 46 fa ; 0xc237c vgabios.c:1526
+ cmp byte [bp-006h], 008h ; 80 7e fa 08 ; 0xc237f
+ jnc short 023d2h ; 73 4d ; 0xc2383
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc2385
+ mov ax, 00080h ; b8 80 00 ; 0xc2388
+ sar ax, CL ; d3 f8 ; 0xc238b
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc238d
+ mov byte [bp-00dh], 000h ; c6 46 f3 00 ; 0xc2390
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2394
+ sal ax, 008h ; c1 e0 08 ; 0xc2397
+ or AL, strict byte 008h ; 0c 08 ; 0xc239a
+ mov dx, 003ceh ; ba ce 03 ; 0xc239c
+ out DX, ax ; ef ; 0xc239f
+ mov dx, bx ; 89 da ; 0xc23a0
+ mov ax, 0a000h ; b8 00 a0 ; 0xc23a2
+ call 03841h ; e8 99 14 ; 0xc23a5
+ mov al, ch ; 88 e8 ; 0xc23a8
+ xor ah, ah ; 30 e4 ; 0xc23aa
+ add ax, word [bp-010h] ; 03 46 f0 ; 0xc23ac
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc23af
+ mov di, word [bp-012h] ; 8b 7e ee ; 0xc23b2
+ add di, ax ; 01 c7 ; 0xc23b5
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc23b7
+ xor ah, ah ; 30 e4 ; 0xc23ba
+ test word [bp-00eh], ax ; 85 46 f2 ; 0xc23bc
+ je short 02373h ; 74 b2 ; 0xc23bf
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc23c1
+ and AL, strict byte 00fh ; 24 0f ; 0xc23c4
+ mov dx, 0a000h ; ba 00 a0 ; 0xc23c6
+ mov es, dx ; 8e c2 ; 0xc23c9
+ mov byte [es:bx], al ; 26 88 07 ; 0xc23cb
+ jmp short 0237ch ; eb ac ; 0xc23ce
+ jmp short 023d6h ; eb 04 ; 0xc23d0
+ db 0feh, 0c5h
+ ; inc ch ; fe c5 ; 0xc23d2 vgabios.c:1527
+ jmp short 02359h ; eb 83 ; 0xc23d4
+ mov ax, 0ff08h ; b8 08 ff ; 0xc23d6 vgabios.c:1528
+ mov dx, 003ceh ; ba ce 03 ; 0xc23d9
+ out DX, ax ; ef ; 0xc23dc
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc23dd vgabios.c:1529
+ out DX, ax ; ef ; 0xc23e0
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc23e1 vgabios.c:1530
+ out DX, ax ; ef ; 0xc23e4
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc23e5 vgabios.c:1531
+ pop di ; 5f ; 0xc23e8
+ pop si ; 5e ; 0xc23e9
+ pop bp ; 5d ; 0xc23ea
+ retn 00006h ; c2 06 00 ; 0xc23eb
+ ; disGetNextSymbol 0xc23ee LB 0x2144 -> off=0x0 cb=0000000000000112 uValue=00000000000c23ee 'write_gfx_char_cga'
+write_gfx_char_cga: ; 0xc23ee LB 0x112
+ push si ; 56 ; 0xc23ee vgabios.c:1534
+ push di ; 57 ; 0xc23ef
+ enter 0000ch, 000h ; c8 0c 00 00 ; 0xc23f0
+ mov bh, al ; 88 c7 ; 0xc23f4
+ mov ch, dl ; 88 d5 ; 0xc23f6
+ mov al, bl ; 88 d8 ; 0xc23f8
+ mov di, 0556ch ; bf 6c 55 ; 0xc23fa vgabios.c:1541
+ xor ah, ah ; 30 e4 ; 0xc23fd vgabios.c:1542
+ mov dl, byte [bp+00ah] ; 8a 56 0a ; 0xc23ff
+ xor dh, dh ; 30 f6 ; 0xc2402
+ imul dx ; f7 ea ; 0xc2404
+ mov dl, cl ; 88 ca ; 0xc2406
+ xor dh, dh ; 30 f6 ; 0xc2408
+ imul dx, dx, 00140h ; 69 d2 40 01 ; 0xc240a
+ add ax, dx ; 01 d0 ; 0xc240e
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc2410
+ mov al, bh ; 88 f8 ; 0xc2413 vgabios.c:1543
+ xor ah, ah ; 30 e4 ; 0xc2415
+ sal ax, 003h ; c1 e0 03 ; 0xc2417
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc241a
+ xor ah, ah ; 30 e4 ; 0xc241d vgabios.c:1544
+ jmp near 0243eh ; e9 1c 00 ; 0xc241f
+ mov dl, ah ; 88 e2 ; 0xc2422 vgabios.c:1559
+ xor dh, dh ; 30 f6 ; 0xc2424
+ add dx, word [bp-00ch] ; 03 56 f4 ; 0xc2426
+ mov si, di ; 89 fe ; 0xc2429
+ add si, dx ; 01 d6 ; 0xc242b
+ mov al, byte [si] ; 8a 04 ; 0xc242d
+ mov dx, 0b800h ; ba 00 b8 ; 0xc242f vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc2432
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2434
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc2437 vgabios.c:1563
+ cmp ah, 008h ; 80 fc 08 ; 0xc2439
+ jnc short 02495h ; 73 57 ; 0xc243c
+ mov dl, ah ; 88 e2 ; 0xc243e
+ xor dh, dh ; 30 f6 ; 0xc2440
+ sar dx, 1 ; d1 fa ; 0xc2442
+ imul dx, dx, strict byte 00050h ; 6b d2 50 ; 0xc2444
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2447
+ add bx, dx ; 01 d3 ; 0xc244a
+ test ah, 001h ; f6 c4 01 ; 0xc244c
+ je short 02454h ; 74 03 ; 0xc244f
+ add bh, 020h ; 80 c7 20 ; 0xc2451
+ mov byte [bp-002h], 080h ; c6 46 fe 80 ; 0xc2454
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc2458
+ jne short 0247ah ; 75 1c ; 0xc245c
+ test ch, 080h ; f6 c5 80 ; 0xc245e
+ je short 02422h ; 74 bf ; 0xc2461
+ mov dx, 0b800h ; ba 00 b8 ; 0xc2463
+ mov es, dx ; 8e c2 ; 0xc2466
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2468
+ mov dl, ah ; 88 e2 ; 0xc246b
+ xor dh, dh ; 30 f6 ; 0xc246d
+ add dx, word [bp-00ch] ; 03 56 f4 ; 0xc246f
+ mov si, di ; 89 fe ; 0xc2472
+ add si, dx ; 01 d6 ; 0xc2474
+ xor al, byte [si] ; 32 04 ; 0xc2476
+ jmp short 0242fh ; eb b5 ; 0xc2478
+ cmp byte [bp-002h], 000h ; 80 7e fe 00 ; 0xc247a vgabios.c:1565
+ jbe short 02437h ; 76 b7 ; 0xc247e
+ test ch, 080h ; f6 c5 80 ; 0xc2480 vgabios.c:1567
+ je short 0248fh ; 74 0a ; 0xc2483
+ mov dx, 0b800h ; ba 00 b8 ; 0xc2485 vgabios.c:47
+ mov es, dx ; 8e c2 ; 0xc2488
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc248a
+ jmp short 02491h ; eb 02 ; 0xc248d vgabios.c:1571
+ xor al, al ; 30 c0 ; 0xc248f vgabios.c:1573
+ xor dl, dl ; 30 d2 ; 0xc2491 vgabios.c:1575
+ jmp short 0249ch ; eb 07 ; 0xc2493
+ jmp short 024fah ; eb 63 ; 0xc2495
+ cmp dl, 004h ; 80 fa 04 ; 0xc2497
+ jnc short 024efh ; 73 53 ; 0xc249a
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc249c vgabios.c:1577
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc249f
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc24a3
+ add si, word [bp-006h] ; 03 76 fa ; 0xc24a6
+ add si, di ; 01 fe ; 0xc24a9
+ mov dh, byte [si] ; 8a 34 ; 0xc24ab
+ mov byte [bp-006h], dh ; 88 76 fa ; 0xc24ad
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc24b0
+ mov dh, byte [bp-002h] ; 8a 76 fe ; 0xc24b4
+ mov byte [bp-00ah], dh ; 88 76 f6 ; 0xc24b7
+ mov byte [bp-009h], 000h ; c6 46 f7 00 ; 0xc24ba
+ mov si, word [bp-006h] ; 8b 76 fa ; 0xc24be
+ test word [bp-00ah], si ; 85 76 f6 ; 0xc24c1
+ je short 024e8h ; 74 22 ; 0xc24c4
+ mov DH, strict byte 003h ; b6 03 ; 0xc24c6 vgabios.c:1578
+ sub dh, dl ; 28 d6 ; 0xc24c8
+ mov cl, ch ; 88 e9 ; 0xc24ca
+ and cl, 003h ; 80 e1 03 ; 0xc24cc
+ mov byte [bp-004h], cl ; 88 4e fc ; 0xc24cf
+ mov cl, dh ; 88 f1 ; 0xc24d2
+ add cl, dh ; 00 f1 ; 0xc24d4
+ mov dh, byte [bp-004h] ; 8a 76 fc ; 0xc24d6
+ sal dh, CL ; d2 e6 ; 0xc24d9
+ mov cl, dh ; 88 f1 ; 0xc24db
+ test ch, 080h ; f6 c5 80 ; 0xc24dd vgabios.c:1579
+ je short 024e6h ; 74 04 ; 0xc24e0
+ xor al, dh ; 30 f0 ; 0xc24e2 vgabios.c:1581
+ jmp short 024e8h ; eb 02 ; 0xc24e4 vgabios.c:1583
+ or al, dh ; 08 f0 ; 0xc24e6 vgabios.c:1585
+ shr byte [bp-002h], 1 ; d0 6e fe ; 0xc24e8 vgabios.c:1588
+ db 0feh, 0c2h
+ ; inc dl ; fe c2 ; 0xc24eb vgabios.c:1589
+ jmp short 02497h ; eb a8 ; 0xc24ed
+ mov dx, 0b800h ; ba 00 b8 ; 0xc24ef vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc24f2
+ mov byte [es:bx], al ; 26 88 07 ; 0xc24f4
+ inc bx ; 43 ; 0xc24f7 vgabios.c:1591
+ jmp short 0247ah ; eb 80 ; 0xc24f8 vgabios.c:1592
+ leave ; c9 ; 0xc24fa vgabios.c:1595
+ pop di ; 5f ; 0xc24fb
+ pop si ; 5e ; 0xc24fc
+ retn 00004h ; c2 04 00 ; 0xc24fd
+ ; disGetNextSymbol 0xc2500 LB 0x2032 -> off=0x0 cb=000000000000009b uValue=00000000000c2500 'write_gfx_char_lin'
+write_gfx_char_lin: ; 0xc2500 LB 0x9b
+ push si ; 56 ; 0xc2500 vgabios.c:1598
+ push di ; 57 ; 0xc2501
+ enter 00008h, 000h ; c8 08 00 00 ; 0xc2502
+ mov bh, al ; 88 c7 ; 0xc2506
+ mov ch, dl ; 88 d5 ; 0xc2508
+ mov al, cl ; 88 c8 ; 0xc250a
+ mov di, 0556ch ; bf 6c 55 ; 0xc250c vgabios.c:1605
+ xor ah, ah ; 30 e4 ; 0xc250f vgabios.c:1606
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2511
+ xor dh, dh ; 30 f6 ; 0xc2514
+ imul dx ; f7 ea ; 0xc2516
+ mov dx, ax ; 89 c2 ; 0xc2518
+ sal dx, 006h ; c1 e2 06 ; 0xc251a
+ mov al, bl ; 88 d8 ; 0xc251d
+ xor ah, ah ; 30 e4 ; 0xc251f
+ sal ax, 003h ; c1 e0 03 ; 0xc2521
+ add ax, dx ; 01 d0 ; 0xc2524
+ mov word [bp-002h], ax ; 89 46 fe ; 0xc2526
+ mov al, bh ; 88 f8 ; 0xc2529 vgabios.c:1607
+ xor ah, ah ; 30 e4 ; 0xc252b
+ sal ax, 003h ; c1 e0 03 ; 0xc252d
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc2530
+ xor bl, bl ; 30 db ; 0xc2533 vgabios.c:1608
+ jmp short 02579h ; eb 42 ; 0xc2535
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc2537 vgabios.c:1612
+ jnc short 02572h ; 73 37 ; 0xc2539
+ xor bh, bh ; 30 ff ; 0xc253b vgabios.c:1614
+ mov dl, bl ; 88 da ; 0xc253d vgabios.c:1615
+ xor dh, dh ; 30 f6 ; 0xc253f
+ add dx, word [bp-006h] ; 03 56 fa ; 0xc2541
+ mov si, di ; 89 fe ; 0xc2544
+ add si, dx ; 01 d6 ; 0xc2546
+ mov dl, byte [si] ; 8a 14 ; 0xc2548
+ mov byte [bp-004h], dl ; 88 56 fc ; 0xc254a
+ mov byte [bp-003h], bh ; 88 7e fd ; 0xc254d
+ mov dl, ah ; 88 e2 ; 0xc2550
+ xor dh, dh ; 30 f6 ; 0xc2552
+ test word [bp-004h], dx ; 85 56 fc ; 0xc2554
+ je short 0255bh ; 74 02 ; 0xc2557
+ mov bh, ch ; 88 ef ; 0xc2559 vgabios.c:1617
+ mov dl, al ; 88 c2 ; 0xc255b vgabios.c:1619
+ xor dh, dh ; 30 f6 ; 0xc255d
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc255f
+ add si, dx ; 01 d6 ; 0xc2562
+ mov dx, 0a000h ; ba 00 a0 ; 0xc2564 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc2567
+ mov byte [es:si], bh ; 26 88 3c ; 0xc2569
+ shr ah, 1 ; d0 ec ; 0xc256c vgabios.c:1620
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc256e vgabios.c:1621
+ jmp short 02537h ; eb c5 ; 0xc2570
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc2572 vgabios.c:1622
+ cmp bl, 008h ; 80 fb 08 ; 0xc2574
+ jnc short 02595h ; 73 1c ; 0xc2577
+ mov al, bl ; 88 d8 ; 0xc2579
+ xor ah, ah ; 30 e4 ; 0xc257b
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc257d
+ xor dh, dh ; 30 f6 ; 0xc2580
+ imul dx ; f7 ea ; 0xc2582
+ sal ax, 003h ; c1 e0 03 ; 0xc2584
+ mov dx, word [bp-002h] ; 8b 56 fe ; 0xc2587
+ add dx, ax ; 01 c2 ; 0xc258a
+ mov word [bp-008h], dx ; 89 56 f8 ; 0xc258c
+ mov AH, strict byte 080h ; b4 80 ; 0xc258f
+ xor al, al ; 30 c0 ; 0xc2591
+ jmp short 0253bh ; eb a6 ; 0xc2593
+ leave ; c9 ; 0xc2595 vgabios.c:1623
+ pop di ; 5f ; 0xc2596
+ pop si ; 5e ; 0xc2597
+ retn 00002h ; c2 02 00 ; 0xc2598
+ ; disGetNextSymbol 0xc259b LB 0x1f97 -> off=0x0 cb=0000000000000187 uValue=00000000000c259b 'biosfn_write_char_attr'
+biosfn_write_char_attr: ; 0xc259b LB 0x187
+ push bp ; 55 ; 0xc259b vgabios.c:1626
+ mov bp, sp ; 89 e5 ; 0xc259c
+ push si ; 56 ; 0xc259e
+ push di ; 57 ; 0xc259f
+ sub sp, strict byte 0001ch ; 83 ec 1c ; 0xc25a0
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc25a3
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc25a6
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc25a9
+ mov si, cx ; 89 ce ; 0xc25ac
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc25ae vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc25b1
+ mov es, ax ; 8e c0 ; 0xc25b4
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc25b6
+ xor ah, ah ; 30 e4 ; 0xc25b9 vgabios.c:1634
+ call 03819h ; e8 5b 12 ; 0xc25bb
+ mov cl, al ; 88 c1 ; 0xc25be
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc25c0
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc25c3 vgabios.c:1635
+ jne short 025cah ; 75 03 ; 0xc25c5
+ jmp near 0271bh ; e9 51 01 ; 0xc25c7
+ mov al, dl ; 88 d0 ; 0xc25ca vgabios.c:1638
+ xor ah, ah ; 30 e4 ; 0xc25cc
+ lea bx, [bp-01eh] ; 8d 5e e2 ; 0xc25ce
+ lea dx, [bp-020h] ; 8d 56 e0 ; 0xc25d1
+ call 00a96h ; e8 bf e4 ; 0xc25d4
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc25d7 vgabios.c:1639
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc25da
+ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc25dd
+ xor al, al ; 30 c0 ; 0xc25e0
+ shr ax, 008h ; c1 e8 08 ; 0xc25e2
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc25e5
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc25e8
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc25eb
+ mov bx, 00084h ; bb 84 00 ; 0xc25ee vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc25f1
+ mov es, ax ; 8e c0 ; 0xc25f4
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc25f6
+ xor ah, ah ; 30 e4 ; 0xc25f9 vgabios.c:48
+ mov dx, ax ; 89 c2 ; 0xc25fb
+ inc dx ; 42 ; 0xc25fd
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc25fe vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc2601
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc2604
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc2607 vgabios.c:58
+ mov bl, cl ; 88 cb ; 0xc260a vgabios.c:1645
+ xor bh, bh ; 30 ff ; 0xc260c
+ mov di, bx ; 89 df ; 0xc260e
+ sal di, 003h ; c1 e7 03 ; 0xc2610
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc2613
+ jne short 02663h ; 75 49 ; 0xc2618
+ mul dx ; f7 e2 ; 0xc261a vgabios.c:1648
+ add ax, ax ; 01 c0 ; 0xc261c
+ or AL, strict byte 0ffh ; 0c ff ; 0xc261e
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc2620
+ xor dh, dh ; 30 f6 ; 0xc2623
+ inc ax ; 40 ; 0xc2625
+ mul dx ; f7 e2 ; 0xc2626
+ mov bx, ax ; 89 c3 ; 0xc2628
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc262a
+ xor ah, ah ; 30 e4 ; 0xc262d
+ mul word [bp-018h] ; f7 66 e8 ; 0xc262f
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2632
+ xor dh, dh ; 30 f6 ; 0xc2635
+ add ax, dx ; 01 d0 ; 0xc2637
+ add ax, ax ; 01 c0 ; 0xc2639
+ mov dx, bx ; 89 da ; 0xc263b
+ add dx, ax ; 01 c2 ; 0xc263d
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc263f vgabios.c:1650
+ xor ah, ah ; 30 e4 ; 0xc2642
+ mov bx, ax ; 89 c3 ; 0xc2644
+ sal bx, 008h ; c1 e3 08 ; 0xc2646
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2649
+ add bx, ax ; 01 c3 ; 0xc264c
+ mov word [bp-020h], bx ; 89 5e e0 ; 0xc264e
+ mov ax, word [bp-020h] ; 8b 46 e0 ; 0xc2651 vgabios.c:1651
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc2654
+ mov cx, si ; 89 f1 ; 0xc2658
+ mov di, dx ; 89 d7 ; 0xc265a
+ jcxz 02660h ; e3 02 ; 0xc265c
+ rep stosw ; f3 ab ; 0xc265e
+ jmp near 0271bh ; e9 b8 00 ; 0xc2660 vgabios.c:1653
+ mov bl, byte [bx+0482eh] ; 8a 9f 2e 48 ; 0xc2663 vgabios.c:1656
+ sal bx, 006h ; c1 e3 06 ; 0xc2667
+ mov al, byte [bx+04844h] ; 8a 87 44 48 ; 0xc266a
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc266e
+ mov al, byte [di+047b1h] ; 8a 85 b1 47 ; 0xc2671 vgabios.c:1657
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc2675
+ dec si ; 4e ; 0xc2678 vgabios.c:1658
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2679
+ je short 026ceh ; 74 50 ; 0xc267c
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc267e vgabios.c:1660
+ xor bh, bh ; 30 ff ; 0xc2681
+ sal bx, 003h ; c1 e3 03 ; 0xc2683
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc2686
+ cmp bl, 003h ; 80 fb 03 ; 0xc268a
+ jc short 0269eh ; 72 0f ; 0xc268d
+ jbe short 026a5h ; 76 14 ; 0xc268f
+ cmp bl, 005h ; 80 fb 05 ; 0xc2691
+ je short 026fah ; 74 64 ; 0xc2694
+ cmp bl, 004h ; 80 fb 04 ; 0xc2696
+ je short 026a9h ; 74 0e ; 0xc2699
+ jmp near 02715h ; e9 77 00 ; 0xc269b
+ cmp bl, 002h ; 80 fb 02 ; 0xc269e
+ je short 026d0h ; 74 2d ; 0xc26a1
+ jmp short 02715h ; eb 70 ; 0xc26a3
+ or byte [bp-006h], 001h ; 80 4e fa 01 ; 0xc26a5 vgabios.c:1663
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc26a9 vgabios.c:1665
+ xor ah, ah ; 30 e4 ; 0xc26ac
+ push ax ; 50 ; 0xc26ae
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc26af
+ push ax ; 50 ; 0xc26b2
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc26b3
+ push ax ; 50 ; 0xc26b6
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc26b7
+ xor ch, ch ; 30 ed ; 0xc26ba
+ mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xc26bc
+ xor bh, bh ; 30 ff ; 0xc26bf
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc26c1
+ xor dh, dh ; 30 f6 ; 0xc26c4
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc26c6
+ call 022ddh ; e8 11 fc ; 0xc26c9
+ jmp short 02715h ; eb 47 ; 0xc26cc vgabios.c:1666
+ jmp short 0271bh ; eb 4b ; 0xc26ce
+ mov al, byte [bp-014h] ; 8a 46 ec ; 0xc26d0 vgabios.c:1668
+ xor ah, ah ; 30 e4 ; 0xc26d3
+ push ax ; 50 ; 0xc26d5
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc26d6
+ push ax ; 50 ; 0xc26d9
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc26da
+ xor ch, ch ; 30 ed ; 0xc26dd
+ mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xc26df
+ xor bh, bh ; 30 ff ; 0xc26e2
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc26e4
+ xor dh, dh ; 30 f6 ; 0xc26e7
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc26e9
+ mov byte [bp-016h], al ; 88 46 ea ; 0xc26ec
+ mov byte [bp-015h], ah ; 88 66 eb ; 0xc26ef
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc26f2
+ call 023eeh ; e8 f6 fc ; 0xc26f5
+ jmp short 02715h ; eb 1b ; 0xc26f8 vgabios.c:1669
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc26fa vgabios.c:1671
+ xor ah, ah ; 30 e4 ; 0xc26fd
+ push ax ; 50 ; 0xc26ff
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc2700
+ xor ch, ch ; 30 ed ; 0xc2703
+ mov bl, byte [bp-008h] ; 8a 5e f8 ; 0xc2705
+ xor bh, bh ; 30 ff ; 0xc2708
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc270a
+ xor dh, dh ; 30 f6 ; 0xc270d
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc270f
+ call 02500h ; e8 eb fd ; 0xc2712
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc2715 vgabios.c:1678
+ jmp near 02678h ; e9 5d ff ; 0xc2718 vgabios.c:1679
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc271b vgabios.c:1681
+ pop di ; 5f ; 0xc271e
+ pop si ; 5e ; 0xc271f
+ pop bp ; 5d ; 0xc2720
+ retn ; c3 ; 0xc2721
+ ; disGetNextSymbol 0xc2722 LB 0x1e10 -> off=0x0 cb=0000000000000181 uValue=00000000000c2722 'biosfn_write_char_only'
+biosfn_write_char_only: ; 0xc2722 LB 0x181
+ push bp ; 55 ; 0xc2722 vgabios.c:1684
+ mov bp, sp ; 89 e5 ; 0xc2723
+ push si ; 56 ; 0xc2725
+ push di ; 57 ; 0xc2726
+ sub sp, strict byte 0001ch ; 83 ec 1c ; 0xc2727
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc272a
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc272d
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc2730
+ mov si, cx ; 89 ce ; 0xc2733
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc2735 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2738
+ mov es, ax ; 8e c0 ; 0xc273b
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc273d
+ xor ah, ah ; 30 e4 ; 0xc2740 vgabios.c:1692
+ call 03819h ; e8 d4 10 ; 0xc2742
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc2745
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc2748
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc274b vgabios.c:1693
+ jne short 02752h ; 75 03 ; 0xc274d
+ jmp near 0289ch ; e9 4a 01 ; 0xc274f
+ mov al, dl ; 88 d0 ; 0xc2752 vgabios.c:1696
+ xor ah, ah ; 30 e4 ; 0xc2754
+ lea bx, [bp-01eh] ; 8d 5e e2 ; 0xc2756
+ lea dx, [bp-020h] ; 8d 56 e0 ; 0xc2759
+ call 00a96h ; e8 37 e3 ; 0xc275c
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc275f vgabios.c:1697
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2762
+ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc2765
+ xor al, al ; 30 c0 ; 0xc2768
+ shr ax, 008h ; c1 e8 08 ; 0xc276a
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc276d
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc2770
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc2773
+ mov bx, 00084h ; bb 84 00 ; 0xc2776 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2779
+ mov es, ax ; 8e c0 ; 0xc277c
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc277e
+ xor ah, ah ; 30 e4 ; 0xc2781 vgabios.c:48
+ mov dx, ax ; 89 c2 ; 0xc2783
+ inc dx ; 42 ; 0xc2785
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2786 vgabios.c:57
+ mov cx, word [es:bx] ; 26 8b 0f ; 0xc2789
+ mov word [bp-01ch], cx ; 89 4e e4 ; 0xc278c vgabios.c:58
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc278f vgabios.c:1703
+ mov bx, ax ; 89 c3 ; 0xc2792
+ sal bx, 003h ; c1 e3 03 ; 0xc2794
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc2797
+ jne short 027e0h ; 75 42 ; 0xc279c
+ mov ax, cx ; 89 c8 ; 0xc279e vgabios.c:1706
+ mul dx ; f7 e2 ; 0xc27a0
+ add ax, ax ; 01 c0 ; 0xc27a2
+ or AL, strict byte 0ffh ; 0c ff ; 0xc27a4
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc27a6
+ xor dh, dh ; 30 f6 ; 0xc27a9
+ inc ax ; 40 ; 0xc27ab
+ mul dx ; f7 e2 ; 0xc27ac
+ mov bx, ax ; 89 c3 ; 0xc27ae
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc27b0
+ xor ah, ah ; 30 e4 ; 0xc27b3
+ mul cx ; f7 e1 ; 0xc27b5
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc27b7
+ xor dh, dh ; 30 f6 ; 0xc27ba
+ add ax, dx ; 01 d0 ; 0xc27bc
+ add ax, ax ; 01 c0 ; 0xc27be
+ add bx, ax ; 01 c3 ; 0xc27c0
+ dec si ; 4e ; 0xc27c2 vgabios.c:1708
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc27c3
+ je short 0274fh ; 74 87 ; 0xc27c6
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc27c8 vgabios.c:1709
+ xor ah, ah ; 30 e4 ; 0xc27cb
+ mov di, ax ; 89 c7 ; 0xc27cd
+ sal di, 003h ; c1 e7 03 ; 0xc27cf
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc27d2 vgabios.c:50
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc27d6 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc27d9
+ inc bx ; 43 ; 0xc27dc vgabios.c:1710
+ inc bx ; 43 ; 0xc27dd
+ jmp short 027c2h ; eb e2 ; 0xc27de vgabios.c:1711
+ mov di, ax ; 89 c7 ; 0xc27e0 vgabios.c:1716
+ mov al, byte [di+0482eh] ; 8a 85 2e 48 ; 0xc27e2
+ mov di, ax ; 89 c7 ; 0xc27e6
+ sal di, 006h ; c1 e7 06 ; 0xc27e8
+ mov al, byte [di+04844h] ; 8a 85 44 48 ; 0xc27eb
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc27ef
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc27f2 vgabios.c:1717
+ mov byte [bp-016h], al ; 88 46 ea ; 0xc27f6
+ dec si ; 4e ; 0xc27f9 vgabios.c:1718
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc27fa
+ je short 0284fh ; 74 50 ; 0xc27fd
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc27ff vgabios.c:1720
+ xor bh, bh ; 30 ff ; 0xc2802
+ sal bx, 003h ; c1 e3 03 ; 0xc2804
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc2807
+ cmp bl, 003h ; 80 fb 03 ; 0xc280b
+ jc short 0281fh ; 72 0f ; 0xc280e
+ jbe short 02826h ; 76 14 ; 0xc2810
+ cmp bl, 005h ; 80 fb 05 ; 0xc2812
+ je short 0287bh ; 74 64 ; 0xc2815
+ cmp bl, 004h ; 80 fb 04 ; 0xc2817
+ je short 0282ah ; 74 0e ; 0xc281a
+ jmp near 02896h ; e9 77 00 ; 0xc281c
+ cmp bl, 002h ; 80 fb 02 ; 0xc281f
+ je short 02851h ; 74 2d ; 0xc2822
+ jmp short 02896h ; eb 70 ; 0xc2824
+ or byte [bp-008h], 001h ; 80 4e f8 01 ; 0xc2826 vgabios.c:1723
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc282a vgabios.c:1725
+ xor ah, ah ; 30 e4 ; 0xc282d
+ push ax ; 50 ; 0xc282f
+ mov al, byte [bp-014h] ; 8a 46 ec ; 0xc2830
+ push ax ; 50 ; 0xc2833
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc2834
+ push ax ; 50 ; 0xc2837
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc2838
+ xor ch, ch ; 30 ed ; 0xc283b
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc283d
+ xor bh, bh ; 30 ff ; 0xc2840
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2842
+ xor dh, dh ; 30 f6 ; 0xc2845
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2847
+ call 022ddh ; e8 90 fa ; 0xc284a
+ jmp short 02896h ; eb 47 ; 0xc284d vgabios.c:1726
+ jmp short 0289ch ; eb 4b ; 0xc284f
+ mov al, byte [bp-016h] ; 8a 46 ea ; 0xc2851 vgabios.c:1728
+ xor ah, ah ; 30 e4 ; 0xc2854
+ push ax ; 50 ; 0xc2856
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc2857
+ push ax ; 50 ; 0xc285a
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc285b
+ xor ch, ch ; 30 ed ; 0xc285e
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2860
+ xor bh, bh ; 30 ff ; 0xc2863
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2865
+ xor dh, dh ; 30 f6 ; 0xc2868
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc286a
+ mov byte [bp-01ah], al ; 88 46 e6 ; 0xc286d
+ mov byte [bp-019h], ah ; 88 66 e7 ; 0xc2870
+ mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc2873
+ call 023eeh ; e8 75 fb ; 0xc2876
+ jmp short 02896h ; eb 1b ; 0xc2879 vgabios.c:1729
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc287b vgabios.c:1731
+ xor ah, ah ; 30 e4 ; 0xc287e
+ push ax ; 50 ; 0xc2880
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc2881
+ xor ch, ch ; 30 ed ; 0xc2884
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2886
+ xor bh, bh ; 30 ff ; 0xc2889
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc288b
+ xor dh, dh ; 30 f6 ; 0xc288e
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2890
+ call 02500h ; e8 6a fc ; 0xc2893
+ inc byte [bp-006h] ; fe 46 fa ; 0xc2896 vgabios.c:1738
+ jmp near 027f9h ; e9 5d ff ; 0xc2899 vgabios.c:1739
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc289c vgabios.c:1741
+ pop di ; 5f ; 0xc289f
+ pop si ; 5e ; 0xc28a0
+ pop bp ; 5d ; 0xc28a1
+ retn ; c3 ; 0xc28a2
+ ; disGetNextSymbol 0xc28a3 LB 0x1c8f -> off=0x0 cb=0000000000000173 uValue=00000000000c28a3 'biosfn_write_pixel'
+biosfn_write_pixel: ; 0xc28a3 LB 0x173
+ push bp ; 55 ; 0xc28a3 vgabios.c:1744
+ mov bp, sp ; 89 e5 ; 0xc28a4
+ push si ; 56 ; 0xc28a6
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc28a7
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc28aa
+ mov byte [bp-004h], dl ; 88 56 fc ; 0xc28ad
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc28b0
+ mov dx, cx ; 89 ca ; 0xc28b3
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc28b5 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc28b8
+ mov es, ax ; 8e c0 ; 0xc28bb
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc28bd
+ xor ah, ah ; 30 e4 ; 0xc28c0 vgabios.c:1751
+ call 03819h ; e8 54 0f ; 0xc28c2
+ mov cl, al ; 88 c1 ; 0xc28c5
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc28c7 vgabios.c:1752
+ je short 028f1h ; 74 26 ; 0xc28c9
+ mov bl, al ; 88 c3 ; 0xc28cb vgabios.c:1753
+ xor bh, bh ; 30 ff ; 0xc28cd
+ sal bx, 003h ; c1 e3 03 ; 0xc28cf
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc28d2
+ je short 028f1h ; 74 18 ; 0xc28d7
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc28d9 vgabios.c:1755
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc28dd
+ jc short 028edh ; 72 0c ; 0xc28df
+ jbe short 028f7h ; 76 14 ; 0xc28e1
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc28e3
+ je short 028f4h ; 74 0d ; 0xc28e5
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc28e7
+ je short 028f7h ; 74 0c ; 0xc28e9
+ jmp short 028f1h ; eb 04 ; 0xc28eb
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc28ed
+ je short 02968h ; 74 77 ; 0xc28ef
+ jmp near 02a10h ; e9 1c 01 ; 0xc28f1
+ jmp near 029eeh ; e9 f7 00 ; 0xc28f4
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc28f7 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc28fa
+ mov es, ax ; 8e c0 ; 0xc28fd
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc28ff
+ mov ax, dx ; 89 d0 ; 0xc2902 vgabios.c:58
+ mul bx ; f7 e3 ; 0xc2904
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2906
+ shr bx, 003h ; c1 eb 03 ; 0xc2909
+ add bx, ax ; 01 c3 ; 0xc290c
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc290e vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc2911
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc2914 vgabios.c:58
+ xor dh, dh ; 30 f6 ; 0xc2917
+ mul dx ; f7 e2 ; 0xc2919
+ add bx, ax ; 01 c3 ; 0xc291b
+ mov cx, word [bp-008h] ; 8b 4e f8 ; 0xc291d vgabios.c:1761
+ and cl, 007h ; 80 e1 07 ; 0xc2920
+ mov ax, 00080h ; b8 80 00 ; 0xc2923
+ sar ax, CL ; d3 f8 ; 0xc2926
+ xor ah, ah ; 30 e4 ; 0xc2928 vgabios.c:1762
+ sal ax, 008h ; c1 e0 08 ; 0xc292a
+ or AL, strict byte 008h ; 0c 08 ; 0xc292d
+ mov dx, 003ceh ; ba ce 03 ; 0xc292f
+ out DX, ax ; ef ; 0xc2932
+ mov ax, 00205h ; b8 05 02 ; 0xc2933 vgabios.c:1763
+ out DX, ax ; ef ; 0xc2936
+ mov dx, bx ; 89 da ; 0xc2937 vgabios.c:1764
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2939
+ call 03841h ; e8 02 0f ; 0xc293c
+ test byte [bp-004h], 080h ; f6 46 fc 80 ; 0xc293f vgabios.c:1765
+ je short 0294ch ; 74 07 ; 0xc2943
+ mov ax, 01803h ; b8 03 18 ; 0xc2945 vgabios.c:1767
+ mov dx, 003ceh ; ba ce 03 ; 0xc2948
+ out DX, ax ; ef ; 0xc294b
+ mov ax, 0a000h ; b8 00 a0 ; 0xc294c vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc294f
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2951
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2954
+ mov ax, 0ff08h ; b8 08 ff ; 0xc2957 vgabios.c:1770
+ mov dx, 003ceh ; ba ce 03 ; 0xc295a
+ out DX, ax ; ef ; 0xc295d
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc295e vgabios.c:1771
+ out DX, ax ; ef ; 0xc2961
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc2962 vgabios.c:1772
+ out DX, ax ; ef ; 0xc2965
+ jmp short 028f1h ; eb 89 ; 0xc2966 vgabios.c:1773
+ mov ax, dx ; 89 d0 ; 0xc2968 vgabios.c:1775
+ shr ax, 1 ; d1 e8 ; 0xc296a
+ imul ax, ax, strict byte 00050h ; 6b c0 50 ; 0xc296c
+ cmp byte [bx+047b1h], 002h ; 80 bf b1 47 02 ; 0xc296f
+ jne short 0297eh ; 75 08 ; 0xc2974
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2976 vgabios.c:1777
+ shr bx, 002h ; c1 eb 02 ; 0xc2979
+ jmp short 02984h ; eb 06 ; 0xc297c vgabios.c:1779
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc297e vgabios.c:1781
+ shr bx, 003h ; c1 eb 03 ; 0xc2981
+ add bx, ax ; 01 c3 ; 0xc2984
+ test dl, 001h ; f6 c2 01 ; 0xc2986 vgabios.c:1783
+ je short 0298eh ; 74 03 ; 0xc2989
+ add bh, 020h ; 80 c7 20 ; 0xc298b
+ mov ax, 0b800h ; b8 00 b8 ; 0xc298e vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc2991
+ mov dl, byte [es:bx] ; 26 8a 17 ; 0xc2993
+ mov al, cl ; 88 c8 ; 0xc2996 vgabios.c:1785
+ xor ah, ah ; 30 e4 ; 0xc2998
+ mov si, ax ; 89 c6 ; 0xc299a
+ sal si, 003h ; c1 e6 03 ; 0xc299c
+ cmp byte [si+047b1h], 002h ; 80 bc b1 47 02 ; 0xc299f
+ jne short 029bfh ; 75 19 ; 0xc29a4
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc29a6 vgabios.c:1787
+ and AL, strict byte 003h ; 24 03 ; 0xc29a9
+ mov AH, strict byte 003h ; b4 03 ; 0xc29ab
+ sub ah, al ; 28 c4 ; 0xc29ad
+ mov cl, ah ; 88 e1 ; 0xc29af
+ add cl, ah ; 00 e1 ; 0xc29b1
+ mov dh, byte [bp-004h] ; 8a 76 fc ; 0xc29b3
+ and dh, 003h ; 80 e6 03 ; 0xc29b6
+ sal dh, CL ; d2 e6 ; 0xc29b9
+ mov AL, strict byte 003h ; b0 03 ; 0xc29bb vgabios.c:1788
+ jmp short 029d2h ; eb 13 ; 0xc29bd vgabios.c:1790
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc29bf vgabios.c:1792
+ and AL, strict byte 007h ; 24 07 ; 0xc29c2
+ mov CL, strict byte 007h ; b1 07 ; 0xc29c4
+ sub cl, al ; 28 c1 ; 0xc29c6
+ mov dh, byte [bp-004h] ; 8a 76 fc ; 0xc29c8
+ and dh, 001h ; 80 e6 01 ; 0xc29cb
+ sal dh, CL ; d2 e6 ; 0xc29ce
+ mov AL, strict byte 001h ; b0 01 ; 0xc29d0 vgabios.c:1793
+ sal al, CL ; d2 e0 ; 0xc29d2
+ test byte [bp-004h], 080h ; f6 46 fc 80 ; 0xc29d4 vgabios.c:1795
+ je short 029deh ; 74 04 ; 0xc29d8
+ xor dl, dh ; 30 f2 ; 0xc29da vgabios.c:1797
+ jmp short 029e4h ; eb 06 ; 0xc29dc vgabios.c:1799
+ not al ; f6 d0 ; 0xc29de vgabios.c:1801
+ and dl, al ; 20 c2 ; 0xc29e0
+ or dl, dh ; 08 f2 ; 0xc29e2 vgabios.c:1802
+ mov ax, 0b800h ; b8 00 b8 ; 0xc29e4 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc29e7
+ mov byte [es:bx], dl ; 26 88 17 ; 0xc29e9
+ jmp short 02a10h ; eb 22 ; 0xc29ec vgabios.c:1805
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc29ee vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc29f1
+ mov es, ax ; 8e c0 ; 0xc29f4
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc29f6
+ sal bx, 003h ; c1 e3 03 ; 0xc29f9 vgabios.c:58
+ mov ax, dx ; 89 d0 ; 0xc29fc
+ mul bx ; f7 e3 ; 0xc29fe
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2a00
+ add bx, ax ; 01 c3 ; 0xc2a03
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2a05 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc2a08
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2a0a
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2a0d
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2a10 vgabios.c:1815
+ pop si ; 5e ; 0xc2a13
+ pop bp ; 5d ; 0xc2a14
+ retn ; c3 ; 0xc2a15
+ ; disGetNextSymbol 0xc2a16 LB 0x1b1c -> off=0x0 cb=0000000000000258 uValue=00000000000c2a16 'biosfn_write_teletype'
+biosfn_write_teletype: ; 0xc2a16 LB 0x258
+ push bp ; 55 ; 0xc2a16 vgabios.c:1818
+ mov bp, sp ; 89 e5 ; 0xc2a17
+ push si ; 56 ; 0xc2a19
+ sub sp, strict byte 00014h ; 83 ec 14 ; 0xc2a1a
+ mov ch, al ; 88 c5 ; 0xc2a1d
+ mov byte [bp-008h], dl ; 88 56 f8 ; 0xc2a1f
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc2a22
+ cmp dl, 0ffh ; 80 fa ff ; 0xc2a25 vgabios.c:1826
+ jne short 02a38h ; 75 0e ; 0xc2a28
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc2a2a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2a2d
+ mov es, ax ; 8e c0 ; 0xc2a30
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2a32
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc2a35 vgabios.c:48
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc2a38 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2a3b
+ mov es, ax ; 8e c0 ; 0xc2a3e
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2a40
+ xor ah, ah ; 30 e4 ; 0xc2a43 vgabios.c:1831
+ call 03819h ; e8 d1 0d ; 0xc2a45
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc2a48
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc2a4b vgabios.c:1832
+ je short 02ab5h ; 74 66 ; 0xc2a4d
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2a4f vgabios.c:1835
+ xor ah, ah ; 30 e4 ; 0xc2a52
+ lea bx, [bp-014h] ; 8d 5e ec ; 0xc2a54
+ lea dx, [bp-016h] ; 8d 56 ea ; 0xc2a57
+ call 00a96h ; e8 39 e0 ; 0xc2a5a
+ mov al, byte [bp-014h] ; 8a 46 ec ; 0xc2a5d vgabios.c:1836
+ mov byte [bp-004h], al ; 88 46 fc ; 0xc2a60
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc2a63
+ xor al, al ; 30 c0 ; 0xc2a66
+ shr ax, 008h ; c1 e8 08 ; 0xc2a68
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2a6b
+ mov bx, 00084h ; bb 84 00 ; 0xc2a6e vgabios.c:47
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc2a71
+ mov es, dx ; 8e c2 ; 0xc2a74
+ mov dl, byte [es:bx] ; 26 8a 17 ; 0xc2a76
+ xor dh, dh ; 30 f6 ; 0xc2a79 vgabios.c:48
+ inc dx ; 42 ; 0xc2a7b
+ mov word [bp-012h], dx ; 89 56 ee ; 0xc2a7c
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2a7f vgabios.c:57
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc2a82
+ mov word [bp-010h], dx ; 89 56 f0 ; 0xc2a85 vgabios.c:58
+ cmp ch, 008h ; 80 fd 08 ; 0xc2a88 vgabios.c:1842
+ jc short 02a9bh ; 72 0e ; 0xc2a8b
+ jbe short 02aa3h ; 76 14 ; 0xc2a8d
+ cmp ch, 00dh ; 80 fd 0d ; 0xc2a8f
+ je short 02ab8h ; 74 24 ; 0xc2a92
+ cmp ch, 00ah ; 80 fd 0a ; 0xc2a94
+ je short 02aaeh ; 74 15 ; 0xc2a97
+ jmp short 02abfh ; eb 24 ; 0xc2a99
+ cmp ch, 007h ; 80 fd 07 ; 0xc2a9b
+ jne short 02abfh ; 75 1f ; 0xc2a9e
+ jmp near 02bc5h ; e9 22 01 ; 0xc2aa0
+ cmp byte [bp-004h], 000h ; 80 7e fc 00 ; 0xc2aa3 vgabios.c:1849
+ jbe short 02abch ; 76 13 ; 0xc2aa7
+ dec byte [bp-004h] ; fe 4e fc ; 0xc2aa9
+ jmp short 02abch ; eb 0e ; 0xc2aac vgabios.c:1850
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc2aae vgabios.c:1853
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2ab0
+ jmp short 02abch ; eb 07 ; 0xc2ab3 vgabios.c:1854
+ jmp near 02c68h ; e9 b0 01 ; 0xc2ab5
+ mov byte [bp-004h], 000h ; c6 46 fc 00 ; 0xc2ab8 vgabios.c:1857
+ jmp near 02bc5h ; e9 06 01 ; 0xc2abc vgabios.c:1858
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2abf vgabios.c:1862
+ xor ah, ah ; 30 e4 ; 0xc2ac2
+ mov bx, ax ; 89 c3 ; 0xc2ac4
+ sal bx, 003h ; c1 e3 03 ; 0xc2ac6
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc2ac9
+ jne short 02b12h ; 75 42 ; 0xc2ace
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2ad0 vgabios.c:1865
+ mul word [bp-012h] ; f7 66 ee ; 0xc2ad3
+ add ax, ax ; 01 c0 ; 0xc2ad6
+ or AL, strict byte 0ffh ; 0c ff ; 0xc2ad8
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2ada
+ xor dh, dh ; 30 f6 ; 0xc2add
+ inc ax ; 40 ; 0xc2adf
+ mul dx ; f7 e2 ; 0xc2ae0
+ mov si, ax ; 89 c6 ; 0xc2ae2
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2ae4
+ xor ah, ah ; 30 e4 ; 0xc2ae7
+ mul word [bp-010h] ; f7 66 f0 ; 0xc2ae9
+ mov dx, ax ; 89 c2 ; 0xc2aec
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2aee
+ xor ah, ah ; 30 e4 ; 0xc2af1
+ add ax, dx ; 01 d0 ; 0xc2af3
+ add ax, ax ; 01 c0 ; 0xc2af5
+ add si, ax ; 01 c6 ; 0xc2af7
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2af9 vgabios.c:50
+ mov byte [es:si], ch ; 26 88 2c ; 0xc2afd vgabios.c:52
+ cmp cl, 003h ; 80 f9 03 ; 0xc2b00 vgabios.c:1870
+ jne short 02b41h ; 75 3c ; 0xc2b03
+ inc si ; 46 ; 0xc2b05 vgabios.c:1871
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2b06 vgabios.c:50
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2b0a
+ mov byte [es:si], al ; 26 88 04 ; 0xc2b0d
+ jmp short 02b41h ; eb 2f ; 0xc2b10 vgabios.c:1873
+ mov si, ax ; 89 c6 ; 0xc2b12 vgabios.c:1876
+ mov al, byte [si+0482eh] ; 8a 84 2e 48 ; 0xc2b14
+ mov si, ax ; 89 c6 ; 0xc2b18
+ sal si, 006h ; c1 e6 06 ; 0xc2b1a
+ mov dl, byte [si+04844h] ; 8a 94 44 48 ; 0xc2b1d
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc2b21 vgabios.c:1877
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc2b25 vgabios.c:1878
+ cmp bl, 003h ; 80 fb 03 ; 0xc2b29
+ jc short 02b3ch ; 72 0e ; 0xc2b2c
+ jbe short 02b43h ; 76 13 ; 0xc2b2e
+ cmp bl, 005h ; 80 fb 05 ; 0xc2b30
+ je short 02b93h ; 74 5e ; 0xc2b33
+ cmp bl, 004h ; 80 fb 04 ; 0xc2b35
+ je short 02b47h ; 74 0d ; 0xc2b38
+ jmp short 02bb2h ; eb 76 ; 0xc2b3a
+ cmp bl, 002h ; 80 fb 02 ; 0xc2b3c
+ je short 02b71h ; 74 30 ; 0xc2b3f
+ jmp short 02bb2h ; eb 6f ; 0xc2b41
+ or byte [bp-00ah], 001h ; 80 4e f6 01 ; 0xc2b43 vgabios.c:1881
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2b47 vgabios.c:1883
+ xor ah, ah ; 30 e4 ; 0xc2b4a
+ push ax ; 50 ; 0xc2b4c
+ mov al, dl ; 88 d0 ; 0xc2b4d
+ push ax ; 50 ; 0xc2b4f
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2b50
+ push ax ; 50 ; 0xc2b53
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2b54
+ mov bl, byte [bp-004h] ; 8a 5e fc ; 0xc2b57
+ xor bh, bh ; 30 ff ; 0xc2b5a
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc2b5c
+ xor dh, dh ; 30 f6 ; 0xc2b5f
+ mov byte [bp-00eh], ch ; 88 6e f2 ; 0xc2b61
+ mov byte [bp-00dh], ah ; 88 66 f3 ; 0xc2b64
+ mov cx, ax ; 89 c1 ; 0xc2b67
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2b69
+ call 022ddh ; e8 6e f7 ; 0xc2b6c
+ jmp short 02bb2h ; eb 41 ; 0xc2b6f vgabios.c:1884
+ push ax ; 50 ; 0xc2b71 vgabios.c:1886
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2b72
+ push ax ; 50 ; 0xc2b75
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2b76
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc2b79
+ mov byte [bp-00dh], ah ; 88 66 f3 ; 0xc2b7c
+ mov bl, byte [bp-004h] ; 8a 5e fc ; 0xc2b7f
+ xor bh, bh ; 30 ff ; 0xc2b82
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc2b84
+ xor dh, dh ; 30 f6 ; 0xc2b87
+ mov al, ch ; 88 e8 ; 0xc2b89
+ mov cx, word [bp-00eh] ; 8b 4e f2 ; 0xc2b8b
+ call 023eeh ; e8 5d f8 ; 0xc2b8e
+ jmp short 02bb2h ; eb 1f ; 0xc2b91 vgabios.c:1887
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2b93 vgabios.c:1889
+ push ax ; 50 ; 0xc2b96
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2b97
+ mov bl, byte [bp-004h] ; 8a 5e fc ; 0xc2b9a
+ xor bh, bh ; 30 ff ; 0xc2b9d
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc2b9f
+ xor dh, dh ; 30 f6 ; 0xc2ba2
+ mov byte [bp-00eh], ch ; 88 6e f2 ; 0xc2ba4
+ mov byte [bp-00dh], ah ; 88 66 f3 ; 0xc2ba7
+ mov cx, ax ; 89 c1 ; 0xc2baa
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2bac
+ call 02500h ; e8 4e f9 ; 0xc2baf
+ inc byte [bp-004h] ; fe 46 fc ; 0xc2bb2 vgabios.c:1897
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2bb5 vgabios.c:1899
+ xor ah, ah ; 30 e4 ; 0xc2bb8
+ cmp ax, word [bp-010h] ; 3b 46 f0 ; 0xc2bba
+ jne short 02bc5h ; 75 06 ; 0xc2bbd
+ mov byte [bp-004h], ah ; 88 66 fc ; 0xc2bbf vgabios.c:1900
+ inc byte [bp-006h] ; fe 46 fa ; 0xc2bc2 vgabios.c:1901
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2bc5 vgabios.c:1906
+ xor ah, ah ; 30 e4 ; 0xc2bc8
+ cmp ax, word [bp-012h] ; 3b 46 ee ; 0xc2bca
+ jne short 02c30h ; 75 61 ; 0xc2bcd
+ mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc2bcf vgabios.c:1908
+ xor bh, bh ; 30 ff ; 0xc2bd2
+ sal bx, 003h ; c1 e3 03 ; 0xc2bd4
+ mov ch, byte [bp-012h] ; 8a 6e ee ; 0xc2bd7
+ db 0feh, 0cdh
+ ; dec ch ; fe cd ; 0xc2bda
+ mov cl, byte [bp-010h] ; 8a 4e f0 ; 0xc2bdc
+ db 0feh, 0c9h
+ ; dec cl ; fe c9 ; 0xc2bdf
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc2be1
+ jne short 02c32h ; 75 4a ; 0xc2be6
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2be8 vgabios.c:1910
+ mul word [bp-012h] ; f7 66 ee ; 0xc2beb
+ add ax, ax ; 01 c0 ; 0xc2bee
+ or AL, strict byte 0ffh ; 0c ff ; 0xc2bf0
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2bf2
+ xor dh, dh ; 30 f6 ; 0xc2bf5
+ inc ax ; 40 ; 0xc2bf7
+ mul dx ; f7 e2 ; 0xc2bf8
+ mov si, ax ; 89 c6 ; 0xc2bfa
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2bfc
+ xor ah, ah ; 30 e4 ; 0xc2bff
+ dec ax ; 48 ; 0xc2c01
+ mul word [bp-010h] ; f7 66 f0 ; 0xc2c02
+ mov dx, ax ; 89 c2 ; 0xc2c05
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2c07
+ xor ah, ah ; 30 e4 ; 0xc2c0a
+ add ax, dx ; 01 d0 ; 0xc2c0c
+ add ax, ax ; 01 c0 ; 0xc2c0e
+ add si, ax ; 01 c6 ; 0xc2c10
+ inc si ; 46 ; 0xc2c12 vgabios.c:1911
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2c13 vgabios.c:45
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc2c17
+ push strict byte 00001h ; 6a 01 ; 0xc2c1a vgabios.c:1912
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c1c
+ xor ah, ah ; 30 e4 ; 0xc2c1f
+ push ax ; 50 ; 0xc2c21
+ mov al, cl ; 88 c8 ; 0xc2c22
+ push ax ; 50 ; 0xc2c24
+ mov al, ch ; 88 e8 ; 0xc2c25
+ push ax ; 50 ; 0xc2c27
+ xor dh, dh ; 30 f6 ; 0xc2c28
+ xor cx, cx ; 31 c9 ; 0xc2c2a
+ xor bx, bx ; 31 db ; 0xc2c2c
+ jmp short 02c44h ; eb 14 ; 0xc2c2e vgabios.c:1914
+ jmp short 02c4dh ; eb 1b ; 0xc2c30
+ push strict byte 00001h ; 6a 01 ; 0xc2c32 vgabios.c:1916
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c34
+ push ax ; 50 ; 0xc2c37
+ mov al, cl ; 88 c8 ; 0xc2c38
+ push ax ; 50 ; 0xc2c3a
+ mov al, ch ; 88 e8 ; 0xc2c3b
+ push ax ; 50 ; 0xc2c3d
+ xor cx, cx ; 31 c9 ; 0xc2c3e
+ xor bx, bx ; 31 db ; 0xc2c40
+ xor dx, dx ; 31 d2 ; 0xc2c42
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc2c44
+ call 01c55h ; e8 0b f0 ; 0xc2c47
+ dec byte [bp-006h] ; fe 4e fa ; 0xc2c4a vgabios.c:1918
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2c4d vgabios.c:1922
+ xor ah, ah ; 30 e4 ; 0xc2c50
+ mov word [bp-014h], ax ; 89 46 ec ; 0xc2c52
+ sal word [bp-014h], 008h ; c1 66 ec 08 ; 0xc2c55
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2c59
+ add word [bp-014h], ax ; 01 46 ec ; 0xc2c5c
+ mov dx, word [bp-014h] ; 8b 56 ec ; 0xc2c5f vgabios.c:1923
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c62
+ call 01293h ; e8 2b e6 ; 0xc2c65
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2c68 vgabios.c:1924
+ pop si ; 5e ; 0xc2c6b
+ pop bp ; 5d ; 0xc2c6c
+ retn ; c3 ; 0xc2c6d
+ ; disGetNextSymbol 0xc2c6e LB 0x18c4 -> off=0x0 cb=0000000000000033 uValue=00000000000c2c6e 'get_font_access'
+get_font_access: ; 0xc2c6e LB 0x33
+ push bp ; 55 ; 0xc2c6e vgabios.c:1927
+ mov bp, sp ; 89 e5 ; 0xc2c6f
+ push dx ; 52 ; 0xc2c71
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc2c72 vgabios.c:1929
+ mov dx, 003ceh ; ba ce 03 ; 0xc2c75
+ out DX, ax ; ef ; 0xc2c78
+ mov AL, strict byte 006h ; b0 06 ; 0xc2c79 vgabios.c:1930
+ out DX, AL ; ee ; 0xc2c7b
+ mov dx, 003cfh ; ba cf 03 ; 0xc2c7c vgabios.c:1931
+ in AL, DX ; ec ; 0xc2c7f
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2c80
+ and ax, strict word 00001h ; 25 01 00 ; 0xc2c82
+ or AL, strict byte 004h ; 0c 04 ; 0xc2c85
+ sal ax, 008h ; c1 e0 08 ; 0xc2c87
+ or AL, strict byte 006h ; 0c 06 ; 0xc2c8a
+ mov dx, 003ceh ; ba ce 03 ; 0xc2c8c
+ out DX, ax ; ef ; 0xc2c8f
+ mov ax, 00402h ; b8 02 04 ; 0xc2c90 vgabios.c:1932
+ mov dx, 003c4h ; ba c4 03 ; 0xc2c93
+ out DX, ax ; ef ; 0xc2c96
+ mov ax, 00604h ; b8 04 06 ; 0xc2c97 vgabios.c:1933
+ out DX, ax ; ef ; 0xc2c9a
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2c9b vgabios.c:1934
+ pop dx ; 5a ; 0xc2c9e
+ pop bp ; 5d ; 0xc2c9f
+ retn ; c3 ; 0xc2ca0
+ ; disGetNextSymbol 0xc2ca1 LB 0x1891 -> off=0x0 cb=0000000000000030 uValue=00000000000c2ca1 'release_font_access'
+release_font_access: ; 0xc2ca1 LB 0x30
+ push bp ; 55 ; 0xc2ca1 vgabios.c:1936
+ mov bp, sp ; 89 e5 ; 0xc2ca2
+ push dx ; 52 ; 0xc2ca4
+ mov dx, 003cch ; ba cc 03 ; 0xc2ca5 vgabios.c:1938
+ in AL, DX ; ec ; 0xc2ca8
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2ca9
+ and ax, strict word 00001h ; 25 01 00 ; 0xc2cab
+ sal ax, 002h ; c1 e0 02 ; 0xc2cae
+ or AL, strict byte 00ah ; 0c 0a ; 0xc2cb1
+ sal ax, 008h ; c1 e0 08 ; 0xc2cb3
+ or AL, strict byte 006h ; 0c 06 ; 0xc2cb6
+ mov dx, 003ceh ; ba ce 03 ; 0xc2cb8
+ out DX, ax ; ef ; 0xc2cbb
+ mov ax, 01005h ; b8 05 10 ; 0xc2cbc vgabios.c:1939
+ out DX, ax ; ef ; 0xc2cbf
+ mov ax, 00302h ; b8 02 03 ; 0xc2cc0 vgabios.c:1940
+ mov dx, 003c4h ; ba c4 03 ; 0xc2cc3
+ out DX, ax ; ef ; 0xc2cc6
+ mov ax, 00204h ; b8 04 02 ; 0xc2cc7 vgabios.c:1941
+ out DX, ax ; ef ; 0xc2cca
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2ccb vgabios.c:1942
+ pop dx ; 5a ; 0xc2cce
+ pop bp ; 5d ; 0xc2ccf
+ retn ; c3 ; 0xc2cd0
+ ; disGetNextSymbol 0xc2cd1 LB 0x1861 -> off=0x0 cb=00000000000000b1 uValue=00000000000c2cd1 'set_scan_lines'
+set_scan_lines: ; 0xc2cd1 LB 0xb1
+ push bp ; 55 ; 0xc2cd1 vgabios.c:1944
+ mov bp, sp ; 89 e5 ; 0xc2cd2
+ push bx ; 53 ; 0xc2cd4
+ push cx ; 51 ; 0xc2cd5
+ push dx ; 52 ; 0xc2cd6
+ push si ; 56 ; 0xc2cd7
+ push di ; 57 ; 0xc2cd8
+ mov bl, al ; 88 c3 ; 0xc2cd9
+ mov si, strict word 00063h ; be 63 00 ; 0xc2cdb vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2cde
+ mov es, ax ; 8e c0 ; 0xc2ce1
+ mov si, word [es:si] ; 26 8b 34 ; 0xc2ce3
+ mov cx, si ; 89 f1 ; 0xc2ce6 vgabios.c:58
+ mov AL, strict byte 009h ; b0 09 ; 0xc2ce8 vgabios.c:1950
+ mov dx, si ; 89 f2 ; 0xc2cea
+ out DX, AL ; ee ; 0xc2cec
+ lea dx, [si+001h] ; 8d 54 01 ; 0xc2ced vgabios.c:1951
+ in AL, DX ; ec ; 0xc2cf0
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2cf1
+ mov ah, al ; 88 c4 ; 0xc2cf3 vgabios.c:1952
+ and ah, 0e0h ; 80 e4 e0 ; 0xc2cf5
+ mov al, bl ; 88 d8 ; 0xc2cf8
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc2cfa
+ or al, ah ; 08 e0 ; 0xc2cfc
+ out DX, AL ; ee ; 0xc2cfe vgabios.c:1953
+ cmp bl, 008h ; 80 fb 08 ; 0xc2cff vgabios.c:1954
+ jne short 02d0ch ; 75 08 ; 0xc2d02
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc2d04 vgabios.c:1956
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc2d07
+ jmp short 02d19h ; eb 0d ; 0xc2d0a vgabios.c:1958
+ mov dl, bl ; 88 da ; 0xc2d0c vgabios.c:1960
+ sub dl, 003h ; 80 ea 03 ; 0xc2d0e
+ xor dh, dh ; 30 f6 ; 0xc2d11
+ mov al, bl ; 88 d8 ; 0xc2d13
+ sub AL, strict byte 004h ; 2c 04 ; 0xc2d15
+ xor ah, ah ; 30 e4 ; 0xc2d17
+ call 0118ch ; e8 70 e4 ; 0xc2d19
+ xor bh, bh ; 30 ff ; 0xc2d1c vgabios.c:1962
+ mov si, 00085h ; be 85 00 ; 0xc2d1e vgabios.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2d21
+ mov es, ax ; 8e c0 ; 0xc2d24
+ mov word [es:si], bx ; 26 89 1c ; 0xc2d26
+ mov AL, strict byte 012h ; b0 12 ; 0xc2d29 vgabios.c:1963
+ mov dx, cx ; 89 ca ; 0xc2d2b
+ out DX, AL ; ee ; 0xc2d2d
+ mov si, cx ; 89 ce ; 0xc2d2e vgabios.c:1964
+ inc si ; 46 ; 0xc2d30
+ mov dx, si ; 89 f2 ; 0xc2d31
+ in AL, DX ; ec ; 0xc2d33
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2d34
+ mov di, ax ; 89 c7 ; 0xc2d36
+ mov AL, strict byte 007h ; b0 07 ; 0xc2d38 vgabios.c:1965
+ mov dx, cx ; 89 ca ; 0xc2d3a
+ out DX, AL ; ee ; 0xc2d3c
+ mov dx, si ; 89 f2 ; 0xc2d3d vgabios.c:1966
+ in AL, DX ; ec ; 0xc2d3f
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2d40
+ mov dl, al ; 88 c2 ; 0xc2d42 vgabios.c:1967
+ and dl, 002h ; 80 e2 02 ; 0xc2d44
+ xor dh, dh ; 30 f6 ; 0xc2d47
+ sal dx, 007h ; c1 e2 07 ; 0xc2d49
+ and AL, strict byte 040h ; 24 40 ; 0xc2d4c
+ xor ah, ah ; 30 e4 ; 0xc2d4e
+ sal ax, 003h ; c1 e0 03 ; 0xc2d50
+ add ax, dx ; 01 d0 ; 0xc2d53
+ inc ax ; 40 ; 0xc2d55
+ add ax, di ; 01 f8 ; 0xc2d56
+ xor dx, dx ; 31 d2 ; 0xc2d58 vgabios.c:1968
+ div bx ; f7 f3 ; 0xc2d5a
+ mov dl, al ; 88 c2 ; 0xc2d5c vgabios.c:1969
+ db 0feh, 0cah
+ ; dec dl ; fe ca ; 0xc2d5e
+ mov si, 00084h ; be 84 00 ; 0xc2d60 vgabios.c:52
+ mov byte [es:si], dl ; 26 88 14 ; 0xc2d63
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc2d66 vgabios.c:57
+ mov dx, word [es:si] ; 26 8b 14 ; 0xc2d69
+ xor ah, ah ; 30 e4 ; 0xc2d6c vgabios.c:1971
+ mul dx ; f7 e2 ; 0xc2d6e
+ add ax, ax ; 01 c0 ; 0xc2d70
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc2d72 vgabios.c:62
+ mov word [es:si], ax ; 26 89 04 ; 0xc2d75
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc2d78 vgabios.c:1972
+ pop di ; 5f ; 0xc2d7b
+ pop si ; 5e ; 0xc2d7c
+ pop dx ; 5a ; 0xc2d7d
+ pop cx ; 59 ; 0xc2d7e
+ pop bx ; 5b ; 0xc2d7f
+ pop bp ; 5d ; 0xc2d80
+ retn ; c3 ; 0xc2d81
+ ; disGetNextSymbol 0xc2d82 LB 0x17b0 -> off=0x0 cb=0000000000000023 uValue=00000000000c2d82 'biosfn_set_font_block'
+biosfn_set_font_block: ; 0xc2d82 LB 0x23
+ push bp ; 55 ; 0xc2d82 vgabios.c:1974
+ mov bp, sp ; 89 e5 ; 0xc2d83
+ push bx ; 53 ; 0xc2d85
+ push dx ; 52 ; 0xc2d86
+ mov bl, al ; 88 c3 ; 0xc2d87
+ mov ax, 00100h ; b8 00 01 ; 0xc2d89 vgabios.c:1976
+ mov dx, 003c4h ; ba c4 03 ; 0xc2d8c
+ out DX, ax ; ef ; 0xc2d8f
+ mov al, bl ; 88 d8 ; 0xc2d90 vgabios.c:1977
+ xor ah, ah ; 30 e4 ; 0xc2d92
+ sal ax, 008h ; c1 e0 08 ; 0xc2d94
+ or AL, strict byte 003h ; 0c 03 ; 0xc2d97
+ out DX, ax ; ef ; 0xc2d99
+ mov ax, 00300h ; b8 00 03 ; 0xc2d9a vgabios.c:1978
+ out DX, ax ; ef ; 0xc2d9d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d9e vgabios.c:1979
+ pop dx ; 5a ; 0xc2da1
+ pop bx ; 5b ; 0xc2da2
+ pop bp ; 5d ; 0xc2da3
+ retn ; c3 ; 0xc2da4
+ ; disGetNextSymbol 0xc2da5 LB 0x178d -> off=0x0 cb=0000000000000075 uValue=00000000000c2da5 'load_text_patch'
+load_text_patch: ; 0xc2da5 LB 0x75
+ push bp ; 55 ; 0xc2da5 vgabios.c:1981
+ mov bp, sp ; 89 e5 ; 0xc2da6
+ push si ; 56 ; 0xc2da8
+ push di ; 57 ; 0xc2da9
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc2daa
+ push ax ; 50 ; 0xc2dad
+ mov byte [bp-006h], cl ; 88 4e fa ; 0xc2dae
+ call 02c6eh ; e8 ba fe ; 0xc2db1 vgabios.c:1986
+ mov al, bl ; 88 d8 ; 0xc2db4 vgabios.c:1988
+ and AL, strict byte 003h ; 24 03 ; 0xc2db6
+ xor ah, ah ; 30 e4 ; 0xc2db8
+ mov cx, ax ; 89 c1 ; 0xc2dba
+ sal cx, 00eh ; c1 e1 0e ; 0xc2dbc
+ mov al, bl ; 88 d8 ; 0xc2dbf
+ and AL, strict byte 004h ; 24 04 ; 0xc2dc1
+ sal ax, 00bh ; c1 e0 0b ; 0xc2dc3
+ add cx, ax ; 01 c1 ; 0xc2dc6
+ mov word [bp-00ah], cx ; 89 4e f6 ; 0xc2dc8
+ mov bx, dx ; 89 d3 ; 0xc2dcb vgabios.c:1989
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2dcd
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc2dd0
+ inc dx ; 42 ; 0xc2dd3 vgabios.c:1990
+ mov word [bp-00ch], dx ; 89 56 f4 ; 0xc2dd4
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc2dd7 vgabios.c:1991
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2dda
+ test al, al ; 84 c0 ; 0xc2ddd
+ je short 02e10h ; 74 2f ; 0xc2ddf
+ xor ah, ah ; 30 e4 ; 0xc2de1 vgabios.c:1992
+ sal ax, 005h ; c1 e0 05 ; 0xc2de3
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc2de6
+ add di, ax ; 01 c7 ; 0xc2de9
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc2deb vgabios.c:1993
+ xor ch, ch ; 30 ed ; 0xc2dee
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc2df0
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc2df3
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2df6
+ mov es, ax ; 8e c0 ; 0xc2df9
+ jcxz 02e03h ; e3 06 ; 0xc2dfb
+ push DS ; 1e ; 0xc2dfd
+ mov ds, dx ; 8e da ; 0xc2dfe
+ rep movsb ; f3 a4 ; 0xc2e00
+ pop DS ; 1f ; 0xc2e02
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2e03 vgabios.c:1994
+ xor ah, ah ; 30 e4 ; 0xc2e06
+ inc ax ; 40 ; 0xc2e08
+ add word [bp-00ch], ax ; 01 46 f4 ; 0xc2e09
+ add bx, ax ; 01 c3 ; 0xc2e0c vgabios.c:1995
+ jmp short 02dd7h ; eb c7 ; 0xc2e0e vgabios.c:1996
+ call 02ca1h ; e8 8e fe ; 0xc2e10 vgabios.c:1998
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2e13 vgabios.c:1999
+ pop di ; 5f ; 0xc2e16
+ pop si ; 5e ; 0xc2e17
+ pop bp ; 5d ; 0xc2e18
+ retn ; c3 ; 0xc2e19
+ ; disGetNextSymbol 0xc2e1a LB 0x1718 -> off=0x0 cb=000000000000007f uValue=00000000000c2e1a 'biosfn_load_text_user_pat'
+biosfn_load_text_user_pat: ; 0xc2e1a LB 0x7f
+ push bp ; 55 ; 0xc2e1a vgabios.c:2001
+ mov bp, sp ; 89 e5 ; 0xc2e1b
+ push si ; 56 ; 0xc2e1d
+ push di ; 57 ; 0xc2e1e
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc2e1f
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2e22
+ mov word [bp-00ch], dx ; 89 56 f4 ; 0xc2e25
+ mov word [bp-00ah], bx ; 89 5e f6 ; 0xc2e28
+ mov word [bp-00eh], cx ; 89 4e f2 ; 0xc2e2b
+ call 02c6eh ; e8 3d fe ; 0xc2e2e vgabios.c:2006
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2e31 vgabios.c:2007
+ and AL, strict byte 003h ; 24 03 ; 0xc2e34
+ xor ah, ah ; 30 e4 ; 0xc2e36
+ mov bx, ax ; 89 c3 ; 0xc2e38
+ sal bx, 00eh ; c1 e3 0e ; 0xc2e3a
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2e3d
+ and AL, strict byte 004h ; 24 04 ; 0xc2e40
+ sal ax, 00bh ; c1 e0 0b ; 0xc2e42
+ add bx, ax ; 01 c3 ; 0xc2e45
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc2e47
+ xor bx, bx ; 31 db ; 0xc2e4a vgabios.c:2008
+ cmp bx, word [bp-00eh] ; 3b 5e f2 ; 0xc2e4c
+ jnc short 02e7fh ; 73 2e ; 0xc2e4f
+ mov cl, byte [bp+008h] ; 8a 4e 08 ; 0xc2e51 vgabios.c:2010
+ xor ch, ch ; 30 ed ; 0xc2e54
+ mov ax, bx ; 89 d8 ; 0xc2e56
+ mul cx ; f7 e1 ; 0xc2e58
+ mov si, word [bp-00ah] ; 8b 76 f6 ; 0xc2e5a
+ add si, ax ; 01 c6 ; 0xc2e5d
+ mov ax, word [bp+004h] ; 8b 46 04 ; 0xc2e5f vgabios.c:2011
+ add ax, bx ; 01 d8 ; 0xc2e62
+ sal ax, 005h ; c1 e0 05 ; 0xc2e64
+ mov di, word [bp-008h] ; 8b 7e f8 ; 0xc2e67
+ add di, ax ; 01 c7 ; 0xc2e6a
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc2e6c vgabios.c:2012
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2e6f
+ mov es, ax ; 8e c0 ; 0xc2e72
+ jcxz 02e7ch ; e3 06 ; 0xc2e74
+ push DS ; 1e ; 0xc2e76
+ mov ds, dx ; 8e da ; 0xc2e77
+ rep movsb ; f3 a4 ; 0xc2e79
+ pop DS ; 1f ; 0xc2e7b
+ inc bx ; 43 ; 0xc2e7c vgabios.c:2013
+ jmp short 02e4ch ; eb cd ; 0xc2e7d
+ call 02ca1h ; e8 1f fe ; 0xc2e7f vgabios.c:2014
+ cmp byte [bp-006h], 010h ; 80 7e fa 10 ; 0xc2e82 vgabios.c:2015
+ jc short 02e90h ; 72 08 ; 0xc2e86
+ mov al, byte [bp+008h] ; 8a 46 08 ; 0xc2e88 vgabios.c:2017
+ xor ah, ah ; 30 e4 ; 0xc2e8b
+ call 02cd1h ; e8 41 fe ; 0xc2e8d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2e90 vgabios.c:2019
+ pop di ; 5f ; 0xc2e93
+ pop si ; 5e ; 0xc2e94
+ pop bp ; 5d ; 0xc2e95
+ retn 00006h ; c2 06 00 ; 0xc2e96
+ ; disGetNextSymbol 0xc2e99 LB 0x1699 -> off=0x0 cb=0000000000000016 uValue=00000000000c2e99 'biosfn_load_gfx_8_8_chars'
+biosfn_load_gfx_8_8_chars: ; 0xc2e99 LB 0x16
+ push bp ; 55 ; 0xc2e99 vgabios.c:2021
+ mov bp, sp ; 89 e5 ; 0xc2e9a
+ push bx ; 53 ; 0xc2e9c
+ push cx ; 51 ; 0xc2e9d
+ mov bx, dx ; 89 d3 ; 0xc2e9e vgabios.c:2023
+ mov cx, ax ; 89 c1 ; 0xc2ea0
+ mov ax, strict word 0001fh ; b8 1f 00 ; 0xc2ea2
+ call 009f0h ; e8 48 db ; 0xc2ea5
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2ea8 vgabios.c:2024
+ pop cx ; 59 ; 0xc2eab
+ pop bx ; 5b ; 0xc2eac
+ pop bp ; 5d ; 0xc2ead
+ retn ; c3 ; 0xc2eae
+ ; disGetNextSymbol 0xc2eaf LB 0x1683 -> off=0x0 cb=000000000000004d uValue=00000000000c2eaf 'set_gfx_font'
+set_gfx_font: ; 0xc2eaf LB 0x4d
+ push bp ; 55 ; 0xc2eaf vgabios.c:2026
+ mov bp, sp ; 89 e5 ; 0xc2eb0
+ push si ; 56 ; 0xc2eb2
+ push di ; 57 ; 0xc2eb3
+ mov si, ax ; 89 c6 ; 0xc2eb4
+ mov ax, dx ; 89 d0 ; 0xc2eb6
+ mov di, bx ; 89 df ; 0xc2eb8
+ mov dl, cl ; 88 ca ; 0xc2eba
+ mov bx, si ; 89 f3 ; 0xc2ebc vgabios.c:2030
+ mov cx, ax ; 89 c1 ; 0xc2ebe
+ mov ax, strict word 00043h ; b8 43 00 ; 0xc2ec0
+ call 009f0h ; e8 2a db ; 0xc2ec3
+ test dl, dl ; 84 d2 ; 0xc2ec6 vgabios.c:2031
+ je short 02edch ; 74 12 ; 0xc2ec8
+ cmp dl, 003h ; 80 fa 03 ; 0xc2eca vgabios.c:2032
+ jbe short 02ed1h ; 76 02 ; 0xc2ecd
+ mov DL, strict byte 002h ; b2 02 ; 0xc2ecf vgabios.c:2033
+ mov bl, dl ; 88 d3 ; 0xc2ed1 vgabios.c:2034
+ xor bh, bh ; 30 ff ; 0xc2ed3
+ mov al, byte [bx+07dfdh] ; 8a 87 fd 7d ; 0xc2ed5
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc2ed9
+ mov bx, 00085h ; bb 85 00 ; 0xc2edc vgabios.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2edf
+ mov es, ax ; 8e c0 ; 0xc2ee2
+ mov word [es:bx], di ; 26 89 3f ; 0xc2ee4
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2ee7 vgabios.c:2039
+ xor ah, ah ; 30 e4 ; 0xc2eea
+ dec ax ; 48 ; 0xc2eec
+ mov bx, 00084h ; bb 84 00 ; 0xc2eed vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc2ef0
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2ef3 vgabios.c:2040
+ pop di ; 5f ; 0xc2ef6
+ pop si ; 5e ; 0xc2ef7
+ pop bp ; 5d ; 0xc2ef8
+ retn 00002h ; c2 02 00 ; 0xc2ef9
+ ; disGetNextSymbol 0xc2efc LB 0x1636 -> off=0x0 cb=000000000000001d uValue=00000000000c2efc 'biosfn_load_gfx_user_chars'
+biosfn_load_gfx_user_chars: ; 0xc2efc LB 0x1d
+ push bp ; 55 ; 0xc2efc vgabios.c:2042
+ mov bp, sp ; 89 e5 ; 0xc2efd
+ push si ; 56 ; 0xc2eff
+ mov si, ax ; 89 c6 ; 0xc2f00
+ mov ax, dx ; 89 d0 ; 0xc2f02
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc2f04 vgabios.c:2045
+ xor dh, dh ; 30 f6 ; 0xc2f07
+ push dx ; 52 ; 0xc2f09
+ xor ch, ch ; 30 ed ; 0xc2f0a
+ mov dx, si ; 89 f2 ; 0xc2f0c
+ call 02eafh ; e8 9e ff ; 0xc2f0e
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2f11 vgabios.c:2046
+ pop si ; 5e ; 0xc2f14
+ pop bp ; 5d ; 0xc2f15
+ retn 00002h ; c2 02 00 ; 0xc2f16
+ ; disGetNextSymbol 0xc2f19 LB 0x1619 -> off=0x0 cb=0000000000000022 uValue=00000000000c2f19 'biosfn_load_gfx_8_14_chars'
+biosfn_load_gfx_8_14_chars: ; 0xc2f19 LB 0x22
+ push bp ; 55 ; 0xc2f19 vgabios.c:2051
+ mov bp, sp ; 89 e5 ; 0xc2f1a
+ push bx ; 53 ; 0xc2f1c
+ push cx ; 51 ; 0xc2f1d
+ mov bl, al ; 88 c3 ; 0xc2f1e
+ mov al, dl ; 88 d0 ; 0xc2f20
+ xor ah, ah ; 30 e4 ; 0xc2f22 vgabios.c:2053
+ push ax ; 50 ; 0xc2f24
+ mov al, bl ; 88 d8 ; 0xc2f25
+ mov cx, ax ; 89 c1 ; 0xc2f27
+ mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2f29
+ mov ax, 05d6ch ; b8 6c 5d ; 0xc2f2c
+ mov dx, ds ; 8c da ; 0xc2f2f
+ call 02eafh ; e8 7b ff ; 0xc2f31
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f34 vgabios.c:2054
+ pop cx ; 59 ; 0xc2f37
+ pop bx ; 5b ; 0xc2f38
+ pop bp ; 5d ; 0xc2f39
+ retn ; c3 ; 0xc2f3a
+ ; disGetNextSymbol 0xc2f3b LB 0x15f7 -> off=0x0 cb=0000000000000022 uValue=00000000000c2f3b 'biosfn_load_gfx_8_8_dd_chars'
+biosfn_load_gfx_8_8_dd_chars: ; 0xc2f3b LB 0x22
+ push bp ; 55 ; 0xc2f3b vgabios.c:2055
+ mov bp, sp ; 89 e5 ; 0xc2f3c
+ push bx ; 53 ; 0xc2f3e
+ push cx ; 51 ; 0xc2f3f
+ mov bl, al ; 88 c3 ; 0xc2f40
+ mov al, dl ; 88 d0 ; 0xc2f42
+ xor ah, ah ; 30 e4 ; 0xc2f44 vgabios.c:2057
+ push ax ; 50 ; 0xc2f46
+ mov al, bl ; 88 d8 ; 0xc2f47
+ mov cx, ax ; 89 c1 ; 0xc2f49
+ mov bx, strict word 00008h ; bb 08 00 ; 0xc2f4b
+ mov ax, 0556ch ; b8 6c 55 ; 0xc2f4e
+ mov dx, ds ; 8c da ; 0xc2f51
+ call 02eafh ; e8 59 ff ; 0xc2f53
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f56 vgabios.c:2058
+ pop cx ; 59 ; 0xc2f59
+ pop bx ; 5b ; 0xc2f5a
+ pop bp ; 5d ; 0xc2f5b
+ retn ; c3 ; 0xc2f5c
+ ; disGetNextSymbol 0xc2f5d LB 0x15d5 -> off=0x0 cb=0000000000000022 uValue=00000000000c2f5d 'biosfn_load_gfx_8_16_chars'
+biosfn_load_gfx_8_16_chars: ; 0xc2f5d LB 0x22
+ push bp ; 55 ; 0xc2f5d vgabios.c:2059
+ mov bp, sp ; 89 e5 ; 0xc2f5e
+ push bx ; 53 ; 0xc2f60
+ push cx ; 51 ; 0xc2f61
+ mov bl, al ; 88 c3 ; 0xc2f62
+ mov al, dl ; 88 d0 ; 0xc2f64
+ xor ah, ah ; 30 e4 ; 0xc2f66 vgabios.c:2061
+ push ax ; 50 ; 0xc2f68
+ mov al, bl ; 88 d8 ; 0xc2f69
+ mov cx, ax ; 89 c1 ; 0xc2f6b
+ mov bx, strict word 00010h ; bb 10 00 ; 0xc2f6d
+ mov ax, 06b6ch ; b8 6c 6b ; 0xc2f70
+ mov dx, ds ; 8c da ; 0xc2f73
+ call 02eafh ; e8 37 ff ; 0xc2f75
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f78 vgabios.c:2062
+ pop cx ; 59 ; 0xc2f7b
+ pop bx ; 5b ; 0xc2f7c
+ pop bp ; 5d ; 0xc2f7d
+ retn ; c3 ; 0xc2f7e
+ ; disGetNextSymbol 0xc2f7f LB 0x15b3 -> off=0x0 cb=0000000000000005 uValue=00000000000c2f7f 'biosfn_alternate_prtsc'
+biosfn_alternate_prtsc: ; 0xc2f7f LB 0x5
+ push bp ; 55 ; 0xc2f7f vgabios.c:2064
+ mov bp, sp ; 89 e5 ; 0xc2f80
+ pop bp ; 5d ; 0xc2f82 vgabios.c:2069
+ retn ; c3 ; 0xc2f83
+ ; disGetNextSymbol 0xc2f84 LB 0x15ae -> off=0x0 cb=0000000000000032 uValue=00000000000c2f84 'biosfn_set_txt_lines'
+biosfn_set_txt_lines: ; 0xc2f84 LB 0x32
+ push bx ; 53 ; 0xc2f84 vgabios.c:2071
+ push si ; 56 ; 0xc2f85
+ push bp ; 55 ; 0xc2f86
+ mov bp, sp ; 89 e5 ; 0xc2f87
+ mov bl, al ; 88 c3 ; 0xc2f89
+ mov si, 00089h ; be 89 00 ; 0xc2f8b vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2f8e
+ mov es, ax ; 8e c0 ; 0xc2f91
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2f93
+ and AL, strict byte 06fh ; 24 6f ; 0xc2f96 vgabios.c:2077
+ cmp bl, 002h ; 80 fb 02 ; 0xc2f98 vgabios.c:2079
+ je short 02fa5h ; 74 08 ; 0xc2f9b
+ test bl, bl ; 84 db ; 0xc2f9d
+ jne short 02fa7h ; 75 06 ; 0xc2f9f
+ or AL, strict byte 080h ; 0c 80 ; 0xc2fa1 vgabios.c:2082
+ jmp short 02fa7h ; eb 02 ; 0xc2fa3 vgabios.c:2083
+ or AL, strict byte 010h ; 0c 10 ; 0xc2fa5 vgabios.c:2085
+ mov bx, 00089h ; bb 89 00 ; 0xc2fa7 vgabios.c:52
+ mov si, strict word 00040h ; be 40 00 ; 0xc2faa
+ mov es, si ; 8e c6 ; 0xc2fad
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2faf
+ pop bp ; 5d ; 0xc2fb2 vgabios.c:2089
+ pop si ; 5e ; 0xc2fb3
+ pop bx ; 5b ; 0xc2fb4
+ retn ; c3 ; 0xc2fb5
+ ; disGetNextSymbol 0xc2fb6 LB 0x157c -> off=0x0 cb=0000000000000005 uValue=00000000000c2fb6 'biosfn_switch_video_interface'
+biosfn_switch_video_interface: ; 0xc2fb6 LB 0x5
+ push bp ; 55 ; 0xc2fb6 vgabios.c:2092
+ mov bp, sp ; 89 e5 ; 0xc2fb7
+ pop bp ; 5d ; 0xc2fb9 vgabios.c:2097
+ retn ; c3 ; 0xc2fba
+ ; disGetNextSymbol 0xc2fbb LB 0x1577 -> off=0x0 cb=0000000000000005 uValue=00000000000c2fbb 'biosfn_enable_video_refresh_control'
+biosfn_enable_video_refresh_control: ; 0xc2fbb LB 0x5
+ push bp ; 55 ; 0xc2fbb vgabios.c:2098
+ mov bp, sp ; 89 e5 ; 0xc2fbc
+ pop bp ; 5d ; 0xc2fbe vgabios.c:2103
+ retn ; c3 ; 0xc2fbf
+ ; disGetNextSymbol 0xc2fc0 LB 0x1572 -> off=0x0 cb=000000000000009d uValue=00000000000c2fc0 'biosfn_write_string'
+biosfn_write_string: ; 0xc2fc0 LB 0x9d
+ push bp ; 55 ; 0xc2fc0 vgabios.c:2106
+ mov bp, sp ; 89 e5 ; 0xc2fc1
+ push si ; 56 ; 0xc2fc3
+ push di ; 57 ; 0xc2fc4
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc2fc5
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2fc8
+ mov byte [bp-008h], dl ; 88 56 f8 ; 0xc2fcb
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc2fce
+ mov si, cx ; 89 ce ; 0xc2fd1
+ mov di, word [bp+00ah] ; 8b 7e 0a ; 0xc2fd3
+ mov al, dl ; 88 d0 ; 0xc2fd6 vgabios.c:2113
+ xor ah, ah ; 30 e4 ; 0xc2fd8
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc2fda
+ lea dx, [bp-00ch] ; 8d 56 f4 ; 0xc2fdd
+ call 00a96h ; e8 b3 da ; 0xc2fe0
+ cmp byte [bp+004h], 0ffh ; 80 7e 04 ff ; 0xc2fe3 vgabios.c:2116
+ jne short 02ffah ; 75 11 ; 0xc2fe7
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2fe9 vgabios.c:2117
+ mov byte [bp+006h], al ; 88 46 06 ; 0xc2fec
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2fef vgabios.c:2118
+ xor al, al ; 30 c0 ; 0xc2ff2
+ shr ax, 008h ; c1 e8 08 ; 0xc2ff4
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc2ff7
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc2ffa vgabios.c:2121
+ xor dh, dh ; 30 f6 ; 0xc2ffd
+ sal dx, 008h ; c1 e2 08 ; 0xc2fff
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc3002
+ xor ah, ah ; 30 e4 ; 0xc3005
+ add dx, ax ; 01 c2 ; 0xc3007
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3009 vgabios.c:2122
+ call 01293h ; e8 84 e2 ; 0xc300c
+ dec si ; 4e ; 0xc300f vgabios.c:2124
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc3010
+ je short 03043h ; 74 2e ; 0xc3013
+ mov bx, di ; 89 fb ; 0xc3015 vgabios.c:2126
+ inc di ; 47 ; 0xc3017
+ mov es, [bp+008h] ; 8e 46 08 ; 0xc3018 vgabios.c:47
+ mov ah, byte [es:bx] ; 26 8a 27 ; 0xc301b
+ test byte [bp-006h], 002h ; f6 46 fa 02 ; 0xc301e vgabios.c:2127
+ je short 0302dh ; 74 09 ; 0xc3022
+ mov bx, di ; 89 fb ; 0xc3024 vgabios.c:2128
+ inc di ; 47 ; 0xc3026
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3027 vgabios.c:47
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc302a vgabios.c:48
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc302d vgabios.c:2130
+ xor bh, bh ; 30 ff ; 0xc3030
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc3032
+ xor dh, dh ; 30 f6 ; 0xc3035
+ mov al, ah ; 88 e0 ; 0xc3037
+ xor ah, ah ; 30 e4 ; 0xc3039
+ mov cx, strict word 00003h ; b9 03 00 ; 0xc303b
+ call 02a16h ; e8 d5 f9 ; 0xc303e
+ jmp short 0300fh ; eb cc ; 0xc3041 vgabios.c:2131
+ test byte [bp-006h], 001h ; f6 46 fa 01 ; 0xc3043 vgabios.c:2134
+ jne short 03054h ; 75 0b ; 0xc3047
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc3049 vgabios.c:2135
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc304c
+ xor ah, ah ; 30 e4 ; 0xc304f
+ call 01293h ; e8 3f e2 ; 0xc3051
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3054 vgabios.c:2136
+ pop di ; 5f ; 0xc3057
+ pop si ; 5e ; 0xc3058
+ pop bp ; 5d ; 0xc3059
+ retn 00008h ; c2 08 00 ; 0xc305a
+ ; disGetNextSymbol 0xc305d LB 0x14d5 -> off=0x0 cb=00000000000001ef uValue=00000000000c305d 'biosfn_read_state_info'
+biosfn_read_state_info: ; 0xc305d LB 0x1ef
+ push bp ; 55 ; 0xc305d vgabios.c:2139
+ mov bp, sp ; 89 e5 ; 0xc305e
+ push cx ; 51 ; 0xc3060
+ push si ; 56 ; 0xc3061
+ push di ; 57 ; 0xc3062
+ push ax ; 50 ; 0xc3063
+ push ax ; 50 ; 0xc3064
+ push dx ; 52 ; 0xc3065
+ mov si, strict word 00049h ; be 49 00 ; 0xc3066 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3069
+ mov es, ax ; 8e c0 ; 0xc306c
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc306e
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc3071 vgabios.c:48
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc3074 vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3077
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc307a vgabios.c:58
+ mov ax, ds ; 8c d8 ; 0xc307d vgabios.c:2150
+ mov es, dx ; 8e c2 ; 0xc307f vgabios.c:72
+ mov word [es:bx], 05502h ; 26 c7 07 02 55 ; 0xc3081
+ mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc3086
+ lea di, [bx+004h] ; 8d 7f 04 ; 0xc308a vgabios.c:2155
+ mov cx, strict word 0001eh ; b9 1e 00 ; 0xc308d
+ mov si, strict word 00049h ; be 49 00 ; 0xc3090
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc3093
+ jcxz 0309eh ; e3 06 ; 0xc3096
+ push DS ; 1e ; 0xc3098
+ mov ds, dx ; 8e da ; 0xc3099
+ rep movsb ; f3 a4 ; 0xc309b
+ pop DS ; 1f ; 0xc309d
+ mov si, 00084h ; be 84 00 ; 0xc309e vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc30a1
+ mov es, ax ; 8e c0 ; 0xc30a4
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc30a6
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc30a9 vgabios.c:48
+ lea si, [bx+022h] ; 8d 77 22 ; 0xc30ab
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc30ae vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc30b1
+ lea di, [bx+023h] ; 8d 7f 23 ; 0xc30b4 vgabios.c:2157
+ mov cx, strict word 00002h ; b9 02 00 ; 0xc30b7
+ mov si, 00085h ; be 85 00 ; 0xc30ba
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc30bd
+ jcxz 030c8h ; e3 06 ; 0xc30c0
+ push DS ; 1e ; 0xc30c2
+ mov ds, dx ; 8e da ; 0xc30c3
+ rep movsb ; f3 a4 ; 0xc30c5
+ pop DS ; 1f ; 0xc30c7
+ mov si, 0008ah ; be 8a 00 ; 0xc30c8 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc30cb
+ mov es, ax ; 8e c0 ; 0xc30ce
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc30d0
+ lea si, [bx+025h] ; 8d 77 25 ; 0xc30d3 vgabios.c:48
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc30d6 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc30d9
+ lea si, [bx+026h] ; 8d 77 26 ; 0xc30dc vgabios.c:2160
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc30df vgabios.c:52
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc30e3 vgabios.c:2161
+ mov word [es:si], strict word 00010h ; 26 c7 04 10 00 ; 0xc30e6 vgabios.c:62
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc30eb vgabios.c:2162
+ mov byte [es:si], 008h ; 26 c6 04 08 ; 0xc30ee vgabios.c:52
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc30f2 vgabios.c:2163
+ mov byte [es:si], 002h ; 26 c6 04 02 ; 0xc30f5 vgabios.c:52
+ lea si, [bx+02bh] ; 8d 77 2b ; 0xc30f9 vgabios.c:2164
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc30fc vgabios.c:52
+ lea si, [bx+02ch] ; 8d 77 2c ; 0xc3100 vgabios.c:2165
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc3103 vgabios.c:52
+ lea si, [bx+02dh] ; 8d 77 2d ; 0xc3107 vgabios.c:2166
+ mov byte [es:si], 021h ; 26 c6 04 21 ; 0xc310a vgabios.c:52
+ lea si, [bx+031h] ; 8d 77 31 ; 0xc310e vgabios.c:2167
+ mov byte [es:si], 003h ; 26 c6 04 03 ; 0xc3111 vgabios.c:52
+ lea si, [bx+032h] ; 8d 77 32 ; 0xc3115 vgabios.c:2168
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc3118 vgabios.c:52
+ mov si, 00089h ; be 89 00 ; 0xc311c vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc311f
+ mov es, ax ; 8e c0 ; 0xc3122
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3124
+ mov dl, al ; 88 c2 ; 0xc3127 vgabios.c:2173
+ and dl, 080h ; 80 e2 80 ; 0xc3129
+ xor dh, dh ; 30 f6 ; 0xc312c
+ sar dx, 006h ; c1 fa 06 ; 0xc312e
+ and AL, strict byte 010h ; 24 10 ; 0xc3131
+ xor ah, ah ; 30 e4 ; 0xc3133
+ sar ax, 004h ; c1 f8 04 ; 0xc3135
+ or ax, dx ; 09 d0 ; 0xc3138
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc313a vgabios.c:2174
+ je short 03150h ; 74 11 ; 0xc313d
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc313f
+ je short 0314ch ; 74 08 ; 0xc3142
+ test ax, ax ; 85 c0 ; 0xc3144
+ jne short 03150h ; 75 08 ; 0xc3146
+ mov AL, strict byte 001h ; b0 01 ; 0xc3148 vgabios.c:2175
+ jmp short 03152h ; eb 06 ; 0xc314a
+ mov AL, strict byte 002h ; b0 02 ; 0xc314c vgabios.c:2176
+ jmp short 03152h ; eb 02 ; 0xc314e
+ xor al, al ; 30 c0 ; 0xc3150 vgabios.c:2178
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc3152 vgabios.c:2180
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc3155 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc3158
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc315b vgabios.c:2183
+ cmp AL, strict byte 00eh ; 3c 0e ; 0xc315e
+ jc short 03181h ; 72 1f ; 0xc3160
+ cmp AL, strict byte 012h ; 3c 12 ; 0xc3162
+ jnbe short 03181h ; 77 1b ; 0xc3164
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3166 vgabios.c:2184
+ test ax, ax ; 85 c0 ; 0xc3169
+ je short 031c3h ; 74 56 ; 0xc316b
+ mov si, ax ; 89 c6 ; 0xc316d vgabios.c:2185
+ shr si, 002h ; c1 ee 02 ; 0xc316f
+ mov ax, 04000h ; b8 00 40 ; 0xc3172
+ xor dx, dx ; 31 d2 ; 0xc3175
+ div si ; f7 f6 ; 0xc3177
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc3179
+ mov byte [es:si], al ; 26 88 04 ; 0xc317c vgabios.c:52
+ jmp short 031c3h ; eb 42 ; 0xc317f vgabios.c:2186
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc3181
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3184
+ cmp AL, strict byte 013h ; 3c 13 ; 0xc3187
+ jne short 0319ch ; 75 11 ; 0xc3189
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc318b vgabios.c:52
+ mov byte [es:si], 001h ; 26 c6 04 01 ; 0xc318e
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc3192 vgabios.c:2188
+ mov word [es:si], 00100h ; 26 c7 04 00 01 ; 0xc3195 vgabios.c:62
+ jmp short 031c3h ; eb 27 ; 0xc319a vgabios.c:2189
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc319c
+ jc short 031c3h ; 72 23 ; 0xc319e
+ cmp AL, strict byte 006h ; 3c 06 ; 0xc31a0
+ jnbe short 031c3h ; 77 1f ; 0xc31a2
+ cmp word [bp-00ah], strict byte 00000h ; 83 7e f6 00 ; 0xc31a4 vgabios.c:2191
+ je short 031b8h ; 74 0e ; 0xc31a8
+ mov ax, 04000h ; b8 00 40 ; 0xc31aa vgabios.c:2192
+ xor dx, dx ; 31 d2 ; 0xc31ad
+ div word [bp-00ah] ; f7 76 f6 ; 0xc31af
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc31b2 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc31b5
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc31b8 vgabios.c:2193
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc31bb vgabios.c:62
+ mov word [es:si], strict word 00004h ; 26 c7 04 04 00 ; 0xc31be
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc31c3 vgabios.c:2195
+ cmp AL, strict byte 006h ; 3c 06 ; 0xc31c6
+ je short 031ceh ; 74 04 ; 0xc31c8
+ cmp AL, strict byte 011h ; 3c 11 ; 0xc31ca
+ jne short 031d9h ; 75 0b ; 0xc31cc
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc31ce vgabios.c:2196
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc31d1 vgabios.c:62
+ mov word [es:si], strict word 00002h ; 26 c7 04 02 00 ; 0xc31d4
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc31d9 vgabios.c:2198
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc31dc
+ jc short 03235h ; 72 55 ; 0xc31de
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc31e0
+ je short 03235h ; 74 51 ; 0xc31e2
+ lea si, [bx+02dh] ; 8d 77 2d ; 0xc31e4 vgabios.c:2199
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc31e7 vgabios.c:52
+ mov byte [es:si], 001h ; 26 c6 04 01 ; 0xc31ea
+ mov si, 00084h ; be 84 00 ; 0xc31ee vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc31f1
+ mov es, ax ; 8e c0 ; 0xc31f4
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc31f6
+ xor ah, ah ; 30 e4 ; 0xc31f9 vgabios.c:48
+ inc ax ; 40 ; 0xc31fb
+ mov si, 00085h ; be 85 00 ; 0xc31fc vgabios.c:47
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc31ff
+ xor dh, dh ; 30 f6 ; 0xc3202 vgabios.c:48
+ imul dx ; f7 ea ; 0xc3204
+ cmp ax, 0015eh ; 3d 5e 01 ; 0xc3206 vgabios.c:2201
+ jc short 03219h ; 72 0e ; 0xc3209
+ jbe short 03222h ; 76 15 ; 0xc320b
+ cmp ax, 001e0h ; 3d e0 01 ; 0xc320d
+ je short 0322ah ; 74 18 ; 0xc3210
+ cmp ax, 00190h ; 3d 90 01 ; 0xc3212
+ je short 03226h ; 74 0f ; 0xc3215
+ jmp short 0322ah ; eb 11 ; 0xc3217
+ cmp ax, 000c8h ; 3d c8 00 ; 0xc3219
+ jne short 0322ah ; 75 0c ; 0xc321c
+ xor al, al ; 30 c0 ; 0xc321e vgabios.c:2202
+ jmp short 0322ch ; eb 0a ; 0xc3220
+ mov AL, strict byte 001h ; b0 01 ; 0xc3222 vgabios.c:2203
+ jmp short 0322ch ; eb 06 ; 0xc3224
+ mov AL, strict byte 002h ; b0 02 ; 0xc3226 vgabios.c:2204
+ jmp short 0322ch ; eb 02 ; 0xc3228
+ mov AL, strict byte 003h ; b0 03 ; 0xc322a vgabios.c:2206
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc322c vgabios.c:2208
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc322f vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc3232
+ lea di, [bx+033h] ; 8d 7f 33 ; 0xc3235 vgabios.c:2211
+ mov cx, strict word 0000dh ; b9 0d 00 ; 0xc3238
+ xor ax, ax ; 31 c0 ; 0xc323b
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc323d
+ jcxz 03244h ; e3 02 ; 0xc3240
+ rep stosb ; f3 aa ; 0xc3242
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc3244 vgabios.c:2212
+ pop di ; 5f ; 0xc3247
+ pop si ; 5e ; 0xc3248
+ pop cx ; 59 ; 0xc3249
+ pop bp ; 5d ; 0xc324a
+ retn ; c3 ; 0xc324b
+ ; disGetNextSymbol 0xc324c LB 0x12e6 -> off=0x0 cb=0000000000000023 uValue=00000000000c324c 'biosfn_read_video_state_size2'
+biosfn_read_video_state_size2: ; 0xc324c LB 0x23
+ push dx ; 52 ; 0xc324c vgabios.c:2215
+ push bp ; 55 ; 0xc324d
+ mov bp, sp ; 89 e5 ; 0xc324e
+ mov dx, ax ; 89 c2 ; 0xc3250
+ xor ax, ax ; 31 c0 ; 0xc3252 vgabios.c:2219
+ test dl, 001h ; f6 c2 01 ; 0xc3254 vgabios.c:2220
+ je short 0325ch ; 74 03 ; 0xc3257
+ mov ax, strict word 00046h ; b8 46 00 ; 0xc3259 vgabios.c:2221
+ test dl, 002h ; f6 c2 02 ; 0xc325c vgabios.c:2223
+ je short 03264h ; 74 03 ; 0xc325f
+ add ax, strict word 0002ah ; 05 2a 00 ; 0xc3261 vgabios.c:2224
+ test dl, 004h ; f6 c2 04 ; 0xc3264 vgabios.c:2226
+ je short 0326ch ; 74 03 ; 0xc3267
+ add ax, 00304h ; 05 04 03 ; 0xc3269 vgabios.c:2227
+ pop bp ; 5d ; 0xc326c vgabios.c:2230
+ pop dx ; 5a ; 0xc326d
+ retn ; c3 ; 0xc326e
+ ; disGetNextSymbol 0xc326f LB 0x12c3 -> off=0x0 cb=0000000000000018 uValue=00000000000c326f 'vga_get_video_state_size'
+vga_get_video_state_size: ; 0xc326f LB 0x18
+ push bp ; 55 ; 0xc326f vgabios.c:2232
+ mov bp, sp ; 89 e5 ; 0xc3270
+ push bx ; 53 ; 0xc3272
+ mov bx, dx ; 89 d3 ; 0xc3273
+ call 0324ch ; e8 d4 ff ; 0xc3275 vgabios.c:2235
+ add ax, strict word 0003fh ; 05 3f 00 ; 0xc3278
+ shr ax, 006h ; c1 e8 06 ; 0xc327b
+ mov word [ss:bx], ax ; 36 89 07 ; 0xc327e
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3281 vgabios.c:2236
+ pop bx ; 5b ; 0xc3284
+ pop bp ; 5d ; 0xc3285
+ retn ; c3 ; 0xc3286
+ ; disGetNextSymbol 0xc3287 LB 0x12ab -> off=0x0 cb=00000000000002d8 uValue=00000000000c3287 'biosfn_save_video_state'
+biosfn_save_video_state: ; 0xc3287 LB 0x2d8
+ push bp ; 55 ; 0xc3287 vgabios.c:2238
+ mov bp, sp ; 89 e5 ; 0xc3288
+ push cx ; 51 ; 0xc328a
+ push si ; 56 ; 0xc328b
+ push di ; 57 ; 0xc328c
+ push ax ; 50 ; 0xc328d
+ push ax ; 50 ; 0xc328e
+ push ax ; 50 ; 0xc328f
+ mov cx, dx ; 89 d1 ; 0xc3290
+ mov si, strict word 00063h ; be 63 00 ; 0xc3292 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3295
+ mov es, ax ; 8e c0 ; 0xc3298
+ mov di, word [es:si] ; 26 8b 3c ; 0xc329a
+ mov si, di ; 89 fe ; 0xc329d vgabios.c:58
+ test byte [bp-00ch], 001h ; f6 46 f4 01 ; 0xc329f vgabios.c:2243
+ je short 0330bh ; 74 66 ; 0xc32a3
+ mov dx, 003c4h ; ba c4 03 ; 0xc32a5 vgabios.c:2244
+ in AL, DX ; ec ; 0xc32a8
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32a9
+ mov es, cx ; 8e c1 ; 0xc32ab vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32ad
+ inc bx ; 43 ; 0xc32b0 vgabios.c:2244
+ mov dx, di ; 89 fa ; 0xc32b1
+ in AL, DX ; ec ; 0xc32b3
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32b4
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32b6 vgabios.c:52
+ inc bx ; 43 ; 0xc32b9 vgabios.c:2245
+ mov dx, 003ceh ; ba ce 03 ; 0xc32ba
+ in AL, DX ; ec ; 0xc32bd
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32be
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32c0 vgabios.c:52
+ inc bx ; 43 ; 0xc32c3 vgabios.c:2246
+ mov dx, 003dah ; ba da 03 ; 0xc32c4
+ in AL, DX ; ec ; 0xc32c7
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32c8
+ mov dx, 003c0h ; ba c0 03 ; 0xc32ca vgabios.c:2248
+ in AL, DX ; ec ; 0xc32cd
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32ce
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc32d0
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc32d3 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32d6
+ inc bx ; 43 ; 0xc32d9 vgabios.c:2249
+ mov dx, 003cah ; ba ca 03 ; 0xc32da
+ in AL, DX ; ec ; 0xc32dd
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32de
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32e0 vgabios.c:52
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc32e3 vgabios.c:2252
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc32e6
+ add bx, ax ; 01 c3 ; 0xc32e9 vgabios.c:2250
+ jmp short 032f3h ; eb 06 ; 0xc32eb
+ cmp word [bp-008h], strict byte 00004h ; 83 7e f8 04 ; 0xc32ed
+ jnbe short 0330eh ; 77 1b ; 0xc32f1
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc32f3 vgabios.c:2253
+ mov dx, 003c4h ; ba c4 03 ; 0xc32f6
+ out DX, AL ; ee ; 0xc32f9
+ mov dx, 003c5h ; ba c5 03 ; 0xc32fa vgabios.c:2254
+ in AL, DX ; ec ; 0xc32fd
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32fe
+ mov es, cx ; 8e c1 ; 0xc3300 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3302
+ inc bx ; 43 ; 0xc3305 vgabios.c:2254
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3306 vgabios.c:2255
+ jmp short 032edh ; eb e2 ; 0xc3309
+ jmp near 033bbh ; e9 ad 00 ; 0xc330b
+ xor al, al ; 30 c0 ; 0xc330e vgabios.c:2256
+ mov dx, 003c4h ; ba c4 03 ; 0xc3310
+ out DX, AL ; ee ; 0xc3313
+ mov dx, 003c5h ; ba c5 03 ; 0xc3314 vgabios.c:2257
+ in AL, DX ; ec ; 0xc3317
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3318
+ mov es, cx ; 8e c1 ; 0xc331a vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc331c
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc331f vgabios.c:2259
+ inc bx ; 43 ; 0xc3324 vgabios.c:2257
+ jmp short 0332dh ; eb 06 ; 0xc3325
+ cmp word [bp-008h], strict byte 00018h ; 83 7e f8 18 ; 0xc3327
+ jnbe short 03344h ; 77 17 ; 0xc332b
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc332d vgabios.c:2260
+ mov dx, si ; 89 f2 ; 0xc3330
+ out DX, AL ; ee ; 0xc3332
+ lea dx, [si+001h] ; 8d 54 01 ; 0xc3333 vgabios.c:2261
+ in AL, DX ; ec ; 0xc3336
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3337
+ mov es, cx ; 8e c1 ; 0xc3339 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc333b
+ inc bx ; 43 ; 0xc333e vgabios.c:2261
+ inc word [bp-008h] ; ff 46 f8 ; 0xc333f vgabios.c:2262
+ jmp short 03327h ; eb e3 ; 0xc3342
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc3344 vgabios.c:2264
+ jmp short 03351h ; eb 06 ; 0xc3349
+ cmp word [bp-008h], strict byte 00013h ; 83 7e f8 13 ; 0xc334b
+ jnbe short 03375h ; 77 24 ; 0xc334f
+ mov dx, 003dah ; ba da 03 ; 0xc3351 vgabios.c:2265
+ in AL, DX ; ec ; 0xc3354
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3355
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3357 vgabios.c:2266
+ and ax, strict word 00020h ; 25 20 00 ; 0xc335a
+ or ax, word [bp-008h] ; 0b 46 f8 ; 0xc335d
+ mov dx, 003c0h ; ba c0 03 ; 0xc3360
+ out DX, AL ; ee ; 0xc3363
+ mov dx, 003c1h ; ba c1 03 ; 0xc3364 vgabios.c:2267
+ in AL, DX ; ec ; 0xc3367
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3368
+ mov es, cx ; 8e c1 ; 0xc336a vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc336c
+ inc bx ; 43 ; 0xc336f vgabios.c:2267
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3370 vgabios.c:2268
+ jmp short 0334bh ; eb d6 ; 0xc3373
+ mov dx, 003dah ; ba da 03 ; 0xc3375 vgabios.c:2269
+ in AL, DX ; ec ; 0xc3378
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3379
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc337b vgabios.c:2271
+ jmp short 03388h ; eb 06 ; 0xc3380
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc3382
+ jnbe short 033a0h ; 77 18 ; 0xc3386
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3388 vgabios.c:2272
+ mov dx, 003ceh ; ba ce 03 ; 0xc338b
+ out DX, AL ; ee ; 0xc338e
+ mov dx, 003cfh ; ba cf 03 ; 0xc338f vgabios.c:2273
+ in AL, DX ; ec ; 0xc3392
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3393
+ mov es, cx ; 8e c1 ; 0xc3395 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3397
+ inc bx ; 43 ; 0xc339a vgabios.c:2273
+ inc word [bp-008h] ; ff 46 f8 ; 0xc339b vgabios.c:2274
+ jmp short 03382h ; eb e2 ; 0xc339e
+ mov es, cx ; 8e c1 ; 0xc33a0 vgabios.c:62
+ mov word [es:bx], si ; 26 89 37 ; 0xc33a2
+ inc bx ; 43 ; 0xc33a5 vgabios.c:2276
+ inc bx ; 43 ; 0xc33a6
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc33a7 vgabios.c:52
+ inc bx ; 43 ; 0xc33ab vgabios.c:2279
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc33ac vgabios.c:52
+ inc bx ; 43 ; 0xc33b0 vgabios.c:2280
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc33b1 vgabios.c:52
+ inc bx ; 43 ; 0xc33b5 vgabios.c:2281
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc33b6 vgabios.c:52
+ inc bx ; 43 ; 0xc33ba vgabios.c:2282
+ test byte [bp-00ch], 002h ; f6 46 f4 02 ; 0xc33bb vgabios.c:2284
+ jne short 033c4h ; 75 03 ; 0xc33bf
+ jmp near 03503h ; e9 3f 01 ; 0xc33c1
+ mov si, strict word 00049h ; be 49 00 ; 0xc33c4 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc33c7
+ mov es, ax ; 8e c0 ; 0xc33ca
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc33cc
+ mov es, cx ; 8e c1 ; 0xc33cf vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc33d1
+ inc bx ; 43 ; 0xc33d4 vgabios.c:2285
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc33d5 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc33d8
+ mov es, ax ; 8e c0 ; 0xc33db
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc33dd
+ mov es, cx ; 8e c1 ; 0xc33e0 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc33e2
+ inc bx ; 43 ; 0xc33e5 vgabios.c:2286
+ inc bx ; 43 ; 0xc33e6
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc33e7 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc33ea
+ mov es, ax ; 8e c0 ; 0xc33ed
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc33ef
+ mov es, cx ; 8e c1 ; 0xc33f2 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc33f4
+ inc bx ; 43 ; 0xc33f7 vgabios.c:2287
+ inc bx ; 43 ; 0xc33f8
+ mov si, strict word 00063h ; be 63 00 ; 0xc33f9 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc33fc
+ mov es, ax ; 8e c0 ; 0xc33ff
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3401
+ mov es, cx ; 8e c1 ; 0xc3404 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3406
+ inc bx ; 43 ; 0xc3409 vgabios.c:2288
+ inc bx ; 43 ; 0xc340a
+ mov si, 00084h ; be 84 00 ; 0xc340b vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc340e
+ mov es, ax ; 8e c0 ; 0xc3411
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3413
+ mov es, cx ; 8e c1 ; 0xc3416 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3418
+ inc bx ; 43 ; 0xc341b vgabios.c:2289
+ mov si, 00085h ; be 85 00 ; 0xc341c vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc341f
+ mov es, ax ; 8e c0 ; 0xc3422
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3424
+ mov es, cx ; 8e c1 ; 0xc3427 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3429
+ inc bx ; 43 ; 0xc342c vgabios.c:2290
+ inc bx ; 43 ; 0xc342d
+ mov si, 00087h ; be 87 00 ; 0xc342e vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3431
+ mov es, ax ; 8e c0 ; 0xc3434
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3436
+ mov es, cx ; 8e c1 ; 0xc3439 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc343b
+ inc bx ; 43 ; 0xc343e vgabios.c:2291
+ mov si, 00088h ; be 88 00 ; 0xc343f vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3442
+ mov es, ax ; 8e c0 ; 0xc3445
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3447
+ mov es, cx ; 8e c1 ; 0xc344a vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc344c
+ inc bx ; 43 ; 0xc344f vgabios.c:2292
+ mov si, 00089h ; be 89 00 ; 0xc3450 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3453
+ mov es, ax ; 8e c0 ; 0xc3456
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3458
+ mov es, cx ; 8e c1 ; 0xc345b vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc345d
+ inc bx ; 43 ; 0xc3460 vgabios.c:2293
+ mov si, strict word 00060h ; be 60 00 ; 0xc3461 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3464
+ mov es, ax ; 8e c0 ; 0xc3467
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3469
+ mov es, cx ; 8e c1 ; 0xc346c vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc346e
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc3471 vgabios.c:2295
+ inc bx ; 43 ; 0xc3476 vgabios.c:2294
+ inc bx ; 43 ; 0xc3477
+ jmp short 03480h ; eb 06 ; 0xc3478
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc347a
+ jnc short 0349ch ; 73 1c ; 0xc347e
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc3480 vgabios.c:2296
+ add si, si ; 01 f6 ; 0xc3483
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc3485
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3488 vgabios.c:57
+ mov es, ax ; 8e c0 ; 0xc348b
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc348d
+ mov es, cx ; 8e c1 ; 0xc3490 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3492
+ inc bx ; 43 ; 0xc3495 vgabios.c:2297
+ inc bx ; 43 ; 0xc3496
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3497 vgabios.c:2298
+ jmp short 0347ah ; eb de ; 0xc349a
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc349c vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc349f
+ mov es, ax ; 8e c0 ; 0xc34a2
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34a4
+ mov es, cx ; 8e c1 ; 0xc34a7 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc34a9
+ inc bx ; 43 ; 0xc34ac vgabios.c:2299
+ inc bx ; 43 ; 0xc34ad
+ mov si, strict word 00062h ; be 62 00 ; 0xc34ae vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc34b1
+ mov es, ax ; 8e c0 ; 0xc34b4
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc34b6
+ mov es, cx ; 8e c1 ; 0xc34b9 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc34bb
+ inc bx ; 43 ; 0xc34be vgabios.c:2300
+ mov si, strict word 0007ch ; be 7c 00 ; 0xc34bf vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc34c2
+ mov es, ax ; 8e c0 ; 0xc34c4
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34c6
+ mov es, cx ; 8e c1 ; 0xc34c9 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc34cb
+ inc bx ; 43 ; 0xc34ce vgabios.c:2302
+ inc bx ; 43 ; 0xc34cf
+ mov si, strict word 0007eh ; be 7e 00 ; 0xc34d0 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc34d3
+ mov es, ax ; 8e c0 ; 0xc34d5
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34d7
+ mov es, cx ; 8e c1 ; 0xc34da vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc34dc
+ inc bx ; 43 ; 0xc34df vgabios.c:2303
+ inc bx ; 43 ; 0xc34e0
+ mov si, 0010ch ; be 0c 01 ; 0xc34e1 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc34e4
+ mov es, ax ; 8e c0 ; 0xc34e6
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34e8
+ mov es, cx ; 8e c1 ; 0xc34eb vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc34ed
+ inc bx ; 43 ; 0xc34f0 vgabios.c:2304
+ inc bx ; 43 ; 0xc34f1
+ mov si, 0010eh ; be 0e 01 ; 0xc34f2 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc34f5
+ mov es, ax ; 8e c0 ; 0xc34f7
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34f9
+ mov es, cx ; 8e c1 ; 0xc34fc vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc34fe
+ inc bx ; 43 ; 0xc3501 vgabios.c:2305
+ inc bx ; 43 ; 0xc3502
+ test byte [bp-00ch], 004h ; f6 46 f4 04 ; 0xc3503 vgabios.c:2307
+ je short 03555h ; 74 4c ; 0xc3507
+ mov dx, 003c7h ; ba c7 03 ; 0xc3509 vgabios.c:2309
+ in AL, DX ; ec ; 0xc350c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc350d
+ mov es, cx ; 8e c1 ; 0xc350f vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3511
+ inc bx ; 43 ; 0xc3514 vgabios.c:2309
+ mov dx, 003c8h ; ba c8 03 ; 0xc3515
+ in AL, DX ; ec ; 0xc3518
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3519
+ mov byte [es:bx], al ; 26 88 07 ; 0xc351b vgabios.c:52
+ inc bx ; 43 ; 0xc351e vgabios.c:2310
+ mov dx, 003c6h ; ba c6 03 ; 0xc351f
+ in AL, DX ; ec ; 0xc3522
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3523
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3525 vgabios.c:52
+ inc bx ; 43 ; 0xc3528 vgabios.c:2311
+ xor al, al ; 30 c0 ; 0xc3529
+ mov dx, 003c8h ; ba c8 03 ; 0xc352b
+ out DX, AL ; ee ; 0xc352e
+ xor ah, ah ; 30 e4 ; 0xc352f vgabios.c:2314
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3531
+ jmp short 0353dh ; eb 07 ; 0xc3534
+ cmp word [bp-008h], 00300h ; 81 7e f8 00 03 ; 0xc3536
+ jnc short 0354eh ; 73 11 ; 0xc353b
+ mov dx, 003c9h ; ba c9 03 ; 0xc353d vgabios.c:2315
+ in AL, DX ; ec ; 0xc3540
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3541
+ mov es, cx ; 8e c1 ; 0xc3543 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3545
+ inc bx ; 43 ; 0xc3548 vgabios.c:2315
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3549 vgabios.c:2316
+ jmp short 03536h ; eb e8 ; 0xc354c
+ mov es, cx ; 8e c1 ; 0xc354e vgabios.c:52
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3550
+ inc bx ; 43 ; 0xc3554 vgabios.c:2317
+ mov ax, bx ; 89 d8 ; 0xc3555 vgabios.c:2320
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc3557
+ pop di ; 5f ; 0xc355a
+ pop si ; 5e ; 0xc355b
+ pop cx ; 59 ; 0xc355c
+ pop bp ; 5d ; 0xc355d
+ retn ; c3 ; 0xc355e
+ ; disGetNextSymbol 0xc355f LB 0xfd3 -> off=0x0 cb=00000000000002ba uValue=00000000000c355f 'biosfn_restore_video_state'
+biosfn_restore_video_state: ; 0xc355f LB 0x2ba
+ push bp ; 55 ; 0xc355f vgabios.c:2322
+ mov bp, sp ; 89 e5 ; 0xc3560
+ push cx ; 51 ; 0xc3562
+ push si ; 56 ; 0xc3563
+ push di ; 57 ; 0xc3564
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc3565
+ push ax ; 50 ; 0xc3568
+ mov cx, dx ; 89 d1 ; 0xc3569
+ test byte [bp-010h], 001h ; f6 46 f0 01 ; 0xc356b vgabios.c:2326
+ je short 035e5h ; 74 74 ; 0xc356f
+ mov dx, 003dah ; ba da 03 ; 0xc3571 vgabios.c:2328
+ in AL, DX ; ec ; 0xc3574
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3575
+ lea si, [bx+040h] ; 8d 77 40 ; 0xc3577 vgabios.c:2330
+ mov es, cx ; 8e c1 ; 0xc357a vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc357c
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc357f vgabios.c:58
+ mov si, bx ; 89 de ; 0xc3582 vgabios.c:2331
+ mov word [bp-008h], strict word 00001h ; c7 46 f8 01 00 ; 0xc3584 vgabios.c:2334
+ add bx, strict byte 00005h ; 83 c3 05 ; 0xc3589 vgabios.c:2332
+ jmp short 03594h ; eb 06 ; 0xc358c
+ cmp word [bp-008h], strict byte 00004h ; 83 7e f8 04 ; 0xc358e
+ jnbe short 035aah ; 77 16 ; 0xc3592
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3594 vgabios.c:2335
+ mov dx, 003c4h ; ba c4 03 ; 0xc3597
+ out DX, AL ; ee ; 0xc359a
+ mov es, cx ; 8e c1 ; 0xc359b vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc359d
+ mov dx, 003c5h ; ba c5 03 ; 0xc35a0 vgabios.c:48
+ out DX, AL ; ee ; 0xc35a3
+ inc bx ; 43 ; 0xc35a4 vgabios.c:2336
+ inc word [bp-008h] ; ff 46 f8 ; 0xc35a5 vgabios.c:2337
+ jmp short 0358eh ; eb e4 ; 0xc35a8
+ xor al, al ; 30 c0 ; 0xc35aa vgabios.c:2338
+ mov dx, 003c4h ; ba c4 03 ; 0xc35ac
+ out DX, AL ; ee ; 0xc35af
+ mov es, cx ; 8e c1 ; 0xc35b0 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc35b2
+ mov dx, 003c5h ; ba c5 03 ; 0xc35b5 vgabios.c:48
+ out DX, AL ; ee ; 0xc35b8
+ inc bx ; 43 ; 0xc35b9 vgabios.c:2339
+ mov dx, 003cch ; ba cc 03 ; 0xc35ba
+ in AL, DX ; ec ; 0xc35bd
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc35be
+ and AL, strict byte 0feh ; 24 fe ; 0xc35c0
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc35c2
+ cmp word [bp-00ch], 003d4h ; 81 7e f4 d4 03 ; 0xc35c5 vgabios.c:2343
+ jne short 035d0h ; 75 04 ; 0xc35ca
+ or byte [bp-00eh], 001h ; 80 4e f2 01 ; 0xc35cc vgabios.c:2344
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc35d0 vgabios.c:2345
+ mov dx, 003c2h ; ba c2 03 ; 0xc35d3
+ out DX, AL ; ee ; 0xc35d6
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc35d7 vgabios.c:2348
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc35da
+ out DX, ax ; ef ; 0xc35dd
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc35de vgabios.c:2350
+ jmp short 035eeh ; eb 09 ; 0xc35e3
+ jmp near 036a8h ; e9 c0 00 ; 0xc35e5
+ cmp word [bp-008h], strict byte 00018h ; 83 7e f8 18 ; 0xc35e8
+ jnbe short 03608h ; 77 1a ; 0xc35ec
+ cmp word [bp-008h], strict byte 00011h ; 83 7e f8 11 ; 0xc35ee vgabios.c:2351
+ je short 03602h ; 74 0e ; 0xc35f2
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc35f4 vgabios.c:2352
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc35f7
+ out DX, AL ; ee ; 0xc35fa
+ mov es, cx ; 8e c1 ; 0xc35fb vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc35fd
+ inc dx ; 42 ; 0xc3600 vgabios.c:48
+ out DX, AL ; ee ; 0xc3601
+ inc bx ; 43 ; 0xc3602 vgabios.c:2355
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3603 vgabios.c:2356
+ jmp short 035e8h ; eb e0 ; 0xc3606
+ mov AL, strict byte 011h ; b0 11 ; 0xc3608 vgabios.c:2358
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc360a
+ out DX, AL ; ee ; 0xc360d
+ lea di, [word bx-00007h] ; 8d bf f9 ff ; 0xc360e vgabios.c:2359
+ mov es, cx ; 8e c1 ; 0xc3612 vgabios.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc3614
+ inc dx ; 42 ; 0xc3617 vgabios.c:48
+ out DX, AL ; ee ; 0xc3618
+ lea di, [si+003h] ; 8d 7c 03 ; 0xc3619 vgabios.c:2362
+ mov dl, byte [es:di] ; 26 8a 15 ; 0xc361c vgabios.c:47
+ xor dh, dh ; 30 f6 ; 0xc361f vgabios.c:48
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc3621
+ mov dx, 003dah ; ba da 03 ; 0xc3624 vgabios.c:2363
+ in AL, DX ; ec ; 0xc3627
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3628
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc362a vgabios.c:2364
+ jmp short 03637h ; eb 06 ; 0xc362f
+ cmp word [bp-008h], strict byte 00013h ; 83 7e f8 13 ; 0xc3631
+ jnbe short 03650h ; 77 19 ; 0xc3635
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3637 vgabios.c:2365
+ and ax, strict word 00020h ; 25 20 00 ; 0xc363a
+ or ax, word [bp-008h] ; 0b 46 f8 ; 0xc363d
+ mov dx, 003c0h ; ba c0 03 ; 0xc3640
+ out DX, AL ; ee ; 0xc3643
+ mov es, cx ; 8e c1 ; 0xc3644 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3646
+ out DX, AL ; ee ; 0xc3649 vgabios.c:48
+ inc bx ; 43 ; 0xc364a vgabios.c:2366
+ inc word [bp-008h] ; ff 46 f8 ; 0xc364b vgabios.c:2367
+ jmp short 03631h ; eb e1 ; 0xc364e
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc3650 vgabios.c:2368
+ mov dx, 003c0h ; ba c0 03 ; 0xc3653
+ out DX, AL ; ee ; 0xc3656
+ mov dx, 003dah ; ba da 03 ; 0xc3657 vgabios.c:2369
+ in AL, DX ; ec ; 0xc365a
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc365b
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc365d vgabios.c:2371
+ jmp short 0366ah ; eb 06 ; 0xc3662
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc3664
+ jnbe short 03680h ; 77 16 ; 0xc3668
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc366a vgabios.c:2372
+ mov dx, 003ceh ; ba ce 03 ; 0xc366d
+ out DX, AL ; ee ; 0xc3670
+ mov es, cx ; 8e c1 ; 0xc3671 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3673
+ mov dx, 003cfh ; ba cf 03 ; 0xc3676 vgabios.c:48
+ out DX, AL ; ee ; 0xc3679
+ inc bx ; 43 ; 0xc367a vgabios.c:2373
+ inc word [bp-008h] ; ff 46 f8 ; 0xc367b vgabios.c:2374
+ jmp short 03664h ; eb e4 ; 0xc367e
+ add bx, strict byte 00006h ; 83 c3 06 ; 0xc3680 vgabios.c:2375
+ mov es, cx ; 8e c1 ; 0xc3683 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3685
+ mov dx, 003c4h ; ba c4 03 ; 0xc3688 vgabios.c:48
+ out DX, AL ; ee ; 0xc368b
+ inc si ; 46 ; 0xc368c vgabios.c:2378
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc368d vgabios.c:47
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc3690 vgabios.c:48
+ out DX, AL ; ee ; 0xc3693
+ inc si ; 46 ; 0xc3694 vgabios.c:2379
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3695 vgabios.c:47
+ mov dx, 003ceh ; ba ce 03 ; 0xc3698 vgabios.c:48
+ out DX, AL ; ee ; 0xc369b
+ inc si ; 46 ; 0xc369c vgabios.c:2380
+ inc si ; 46 ; 0xc369d
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc369e vgabios.c:47
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc36a1 vgabios.c:48
+ add dx, strict byte 00006h ; 83 c2 06 ; 0xc36a4
+ out DX, AL ; ee ; 0xc36a7
+ test byte [bp-010h], 002h ; f6 46 f0 02 ; 0xc36a8 vgabios.c:2384
+ jne short 036b1h ; 75 03 ; 0xc36ac
+ jmp near 037cch ; e9 1b 01 ; 0xc36ae
+ mov es, cx ; 8e c1 ; 0xc36b1 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc36b3
+ mov si, strict word 00049h ; be 49 00 ; 0xc36b6 vgabios.c:52
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc36b9
+ mov es, dx ; 8e c2 ; 0xc36bc
+ mov byte [es:si], al ; 26 88 04 ; 0xc36be
+ inc bx ; 43 ; 0xc36c1 vgabios.c:2385
+ mov es, cx ; 8e c1 ; 0xc36c2 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc36c4
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc36c7 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc36ca
+ mov word [es:si], ax ; 26 89 04 ; 0xc36cc
+ inc bx ; 43 ; 0xc36cf vgabios.c:2386
+ inc bx ; 43 ; 0xc36d0
+ mov es, cx ; 8e c1 ; 0xc36d1 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc36d3
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc36d6 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc36d9
+ mov word [es:si], ax ; 26 89 04 ; 0xc36db
+ inc bx ; 43 ; 0xc36de vgabios.c:2387
+ inc bx ; 43 ; 0xc36df
+ mov es, cx ; 8e c1 ; 0xc36e0 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc36e2
+ mov si, strict word 00063h ; be 63 00 ; 0xc36e5 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc36e8
+ mov word [es:si], ax ; 26 89 04 ; 0xc36ea
+ inc bx ; 43 ; 0xc36ed vgabios.c:2388
+ inc bx ; 43 ; 0xc36ee
+ mov es, cx ; 8e c1 ; 0xc36ef vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc36f1
+ mov si, 00084h ; be 84 00 ; 0xc36f4 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc36f7
+ mov byte [es:si], al ; 26 88 04 ; 0xc36f9
+ inc bx ; 43 ; 0xc36fc vgabios.c:2389
+ mov es, cx ; 8e c1 ; 0xc36fd vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc36ff
+ mov si, 00085h ; be 85 00 ; 0xc3702 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3705
+ mov word [es:si], ax ; 26 89 04 ; 0xc3707
+ inc bx ; 43 ; 0xc370a vgabios.c:2390
+ inc bx ; 43 ; 0xc370b
+ mov es, cx ; 8e c1 ; 0xc370c vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc370e
+ mov si, 00087h ; be 87 00 ; 0xc3711 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3714
+ mov byte [es:si], al ; 26 88 04 ; 0xc3716
+ inc bx ; 43 ; 0xc3719 vgabios.c:2391
+ mov es, cx ; 8e c1 ; 0xc371a vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc371c
+ mov si, 00088h ; be 88 00 ; 0xc371f vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3722
+ mov byte [es:si], al ; 26 88 04 ; 0xc3724
+ inc bx ; 43 ; 0xc3727 vgabios.c:2392
+ mov es, cx ; 8e c1 ; 0xc3728 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc372a
+ mov si, 00089h ; be 89 00 ; 0xc372d vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3730
+ mov byte [es:si], al ; 26 88 04 ; 0xc3732
+ inc bx ; 43 ; 0xc3735 vgabios.c:2393
+ mov es, cx ; 8e c1 ; 0xc3736 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3738
+ mov si, strict word 00060h ; be 60 00 ; 0xc373b vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc373e
+ mov word [es:si], ax ; 26 89 04 ; 0xc3740
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc3743 vgabios.c:2395
+ inc bx ; 43 ; 0xc3748 vgabios.c:2394
+ inc bx ; 43 ; 0xc3749
+ jmp short 03752h ; eb 06 ; 0xc374a
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc374c
+ jnc short 0376eh ; 73 1c ; 0xc3750
+ mov es, cx ; 8e c1 ; 0xc3752 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3754
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc3757 vgabios.c:58
+ add si, si ; 01 f6 ; 0xc375a
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc375c
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc375f vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3762
+ mov word [es:si], ax ; 26 89 04 ; 0xc3764
+ inc bx ; 43 ; 0xc3767 vgabios.c:2397
+ inc bx ; 43 ; 0xc3768
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3769 vgabios.c:2398
+ jmp short 0374ch ; eb de ; 0xc376c
+ mov es, cx ; 8e c1 ; 0xc376e vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3770
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc3773 vgabios.c:62
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc3776
+ mov es, dx ; 8e c2 ; 0xc3779
+ mov word [es:si], ax ; 26 89 04 ; 0xc377b
+ inc bx ; 43 ; 0xc377e vgabios.c:2399
+ inc bx ; 43 ; 0xc377f
+ mov es, cx ; 8e c1 ; 0xc3780 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3782
+ mov si, strict word 00062h ; be 62 00 ; 0xc3785 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3788
+ mov byte [es:si], al ; 26 88 04 ; 0xc378a
+ inc bx ; 43 ; 0xc378d vgabios.c:2400
+ mov es, cx ; 8e c1 ; 0xc378e vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3790
+ mov si, strict word 0007ch ; be 7c 00 ; 0xc3793 vgabios.c:62
+ xor dx, dx ; 31 d2 ; 0xc3796
+ mov es, dx ; 8e c2 ; 0xc3798
+ mov word [es:si], ax ; 26 89 04 ; 0xc379a
+ inc bx ; 43 ; 0xc379d vgabios.c:2402
+ inc bx ; 43 ; 0xc379e
+ mov es, cx ; 8e c1 ; 0xc379f vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37a1
+ mov si, strict word 0007eh ; be 7e 00 ; 0xc37a4 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc37a7
+ mov word [es:si], ax ; 26 89 04 ; 0xc37a9
+ inc bx ; 43 ; 0xc37ac vgabios.c:2403
+ inc bx ; 43 ; 0xc37ad
+ mov es, cx ; 8e c1 ; 0xc37ae vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37b0
+ mov si, 0010ch ; be 0c 01 ; 0xc37b3 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc37b6
+ mov word [es:si], ax ; 26 89 04 ; 0xc37b8
+ inc bx ; 43 ; 0xc37bb vgabios.c:2404
+ inc bx ; 43 ; 0xc37bc
+ mov es, cx ; 8e c1 ; 0xc37bd vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37bf
+ mov si, 0010eh ; be 0e 01 ; 0xc37c2 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc37c5
+ mov word [es:si], ax ; 26 89 04 ; 0xc37c7
+ inc bx ; 43 ; 0xc37ca vgabios.c:2405
+ inc bx ; 43 ; 0xc37cb
+ test byte [bp-010h], 004h ; f6 46 f0 04 ; 0xc37cc vgabios.c:2407
+ je short 0380fh ; 74 3d ; 0xc37d0
+ inc bx ; 43 ; 0xc37d2 vgabios.c:2408
+ mov es, cx ; 8e c1 ; 0xc37d3 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc37d5
+ xor ah, ah ; 30 e4 ; 0xc37d8 vgabios.c:48
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc37da
+ inc bx ; 43 ; 0xc37dd vgabios.c:2409
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc37de vgabios.c:47
+ mov dx, 003c6h ; ba c6 03 ; 0xc37e1 vgabios.c:48
+ out DX, AL ; ee ; 0xc37e4
+ inc bx ; 43 ; 0xc37e5 vgabios.c:2410
+ xor al, al ; 30 c0 ; 0xc37e6
+ mov dx, 003c8h ; ba c8 03 ; 0xc37e8
+ out DX, AL ; ee ; 0xc37eb
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc37ec vgabios.c:2413
+ jmp short 037f8h ; eb 07 ; 0xc37ef
+ cmp word [bp-008h], 00300h ; 81 7e f8 00 03 ; 0xc37f1
+ jnc short 03807h ; 73 0f ; 0xc37f6
+ mov es, cx ; 8e c1 ; 0xc37f8 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc37fa
+ mov dx, 003c9h ; ba c9 03 ; 0xc37fd vgabios.c:48
+ out DX, AL ; ee ; 0xc3800
+ inc bx ; 43 ; 0xc3801 vgabios.c:2414
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3802 vgabios.c:2415
+ jmp short 037f1h ; eb ea ; 0xc3805
+ inc bx ; 43 ; 0xc3807 vgabios.c:2416
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc3808
+ mov dx, 003c8h ; ba c8 03 ; 0xc380b
+ out DX, AL ; ee ; 0xc380e
+ mov ax, bx ; 89 d8 ; 0xc380f vgabios.c:2420
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc3811
+ pop di ; 5f ; 0xc3814
+ pop si ; 5e ; 0xc3815
+ pop cx ; 59 ; 0xc3816
+ pop bp ; 5d ; 0xc3817
+ retn ; c3 ; 0xc3818
+ ; disGetNextSymbol 0xc3819 LB 0xd19 -> off=0x0 cb=0000000000000028 uValue=00000000000c3819 'find_vga_entry'
+find_vga_entry: ; 0xc3819 LB 0x28
+ push bx ; 53 ; 0xc3819 vgabios.c:2429
+ push dx ; 52 ; 0xc381a
+ push bp ; 55 ; 0xc381b
+ mov bp, sp ; 89 e5 ; 0xc381c
+ mov dl, al ; 88 c2 ; 0xc381e
+ mov AH, strict byte 0ffh ; b4 ff ; 0xc3820 vgabios.c:2431
+ xor al, al ; 30 c0 ; 0xc3822 vgabios.c:2432
+ jmp short 0382ch ; eb 06 ; 0xc3824
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc3826 vgabios.c:2433
+ cmp AL, strict byte 00fh ; 3c 0f ; 0xc3828
+ jnbe short 0383bh ; 77 0f ; 0xc382a
+ mov bl, al ; 88 c3 ; 0xc382c
+ xor bh, bh ; 30 ff ; 0xc382e
+ sal bx, 003h ; c1 e3 03 ; 0xc3830
+ cmp dl, byte [bx+047aeh] ; 3a 97 ae 47 ; 0xc3833
+ jne short 03826h ; 75 ed ; 0xc3837
+ mov ah, al ; 88 c4 ; 0xc3839
+ mov al, ah ; 88 e0 ; 0xc383b vgabios.c:2438
+ pop bp ; 5d ; 0xc383d
+ pop dx ; 5a ; 0xc383e
+ pop bx ; 5b ; 0xc383f
+ retn ; c3 ; 0xc3840
+ ; disGetNextSymbol 0xc3841 LB 0xcf1 -> off=0x0 cb=000000000000000e uValue=00000000000c3841 'readx_byte'
+readx_byte: ; 0xc3841 LB 0xe
+ push bx ; 53 ; 0xc3841 vgabios.c:2450
+ push bp ; 55 ; 0xc3842
+ mov bp, sp ; 89 e5 ; 0xc3843
+ mov bx, dx ; 89 d3 ; 0xc3845
+ mov es, ax ; 8e c0 ; 0xc3847 vgabios.c:2452
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3849
+ pop bp ; 5d ; 0xc384c vgabios.c:2453
+ pop bx ; 5b ; 0xc384d
+ retn ; c3 ; 0xc384e
+ ; disGetNextSymbol 0xc384f LB 0xce3 -> off=0x8a cb=000000000000049f uValue=00000000000c38d9 'int10_func'
+ db 056h, 04fh, 01ch, 01bh, 013h, 012h, 011h, 010h, 00eh, 00dh, 00ch, 00ah, 009h, 008h, 007h, 006h
+ db 005h, 004h, 003h, 002h, 001h, 000h, 071h, 03dh, 002h, 039h, 03fh, 039h, 054h, 039h, 064h, 039h
+ db 077h, 039h, 087h, 039h, 091h, 039h, 0d3h, 039h, 007h, 03ah, 018h, 03ah, 03eh, 03ah, 059h, 03ah
+ db 078h, 03ah, 095h, 03ah, 0abh, 03ah, 0b7h, 03ah, 0b0h, 03bh, 034h, 03ch, 061h, 03ch, 076h, 03ch
+ db 0b8h, 03ch, 043h, 03dh, 030h, 024h, 023h, 022h, 021h, 020h, 014h, 012h, 011h, 010h, 004h, 003h
+ db 002h, 001h, 000h, 071h, 03dh, 0d6h, 03ah, 0f4h, 03ah, 00fh, 03bh, 024h, 03bh, 02fh, 03bh, 0d6h
+ db 03ah, 0f4h, 03ah, 00fh, 03bh, 02fh, 03bh, 044h, 03bh, 04fh, 03bh, 06ah, 03bh, 079h, 03bh, 088h
+ db 03bh, 097h, 03bh, 00ah, 009h, 006h, 004h, 002h, 001h, 000h, 035h, 03dh, 0deh, 03ch, 0ech, 03ch
+ db 0fdh, 03ch, 00dh, 03dh, 022h, 03dh, 035h, 03dh, 035h, 03dh
+int10_func: ; 0xc38d9 LB 0x49f
+ push bp ; 55 ; 0xc38d9 vgabios.c:2531
+ mov bp, sp ; 89 e5 ; 0xc38da
+ push si ; 56 ; 0xc38dc
+ push di ; 57 ; 0xc38dd
+ push ax ; 50 ; 0xc38de
+ mov si, word [bp+004h] ; 8b 76 04 ; 0xc38df
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc38e2 vgabios.c:2536
+ shr ax, 008h ; c1 e8 08 ; 0xc38e5
+ cmp ax, strict word 00056h ; 3d 56 00 ; 0xc38e8
+ jnbe short 03951h ; 77 64 ; 0xc38eb
+ push CS ; 0e ; 0xc38ed
+ pop ES ; 07 ; 0xc38ee
+ mov cx, strict word 00017h ; b9 17 00 ; 0xc38ef
+ mov di, 0384fh ; bf 4f 38 ; 0xc38f2
+ repne scasb ; f2 ae ; 0xc38f5
+ sal cx, 1 ; d1 e1 ; 0xc38f7
+ mov di, cx ; 89 cf ; 0xc38f9
+ mov ax, word [cs:di+03865h] ; 2e 8b 85 65 38 ; 0xc38fb
+ jmp ax ; ff e0 ; 0xc3900
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3902 vgabios.c:2539
+ xor ah, ah ; 30 e4 ; 0xc3905
+ call 0143fh ; e8 35 db ; 0xc3907
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc390a vgabios.c:2540
+ and ax, strict word 0007fh ; 25 7f 00 ; 0xc390d
+ cmp ax, strict word 00007h ; 3d 07 00 ; 0xc3910
+ je short 0392ah ; 74 15 ; 0xc3913
+ cmp ax, strict word 00006h ; 3d 06 00 ; 0xc3915
+ je short 03921h ; 74 07 ; 0xc3918
+ cmp ax, strict word 00005h ; 3d 05 00 ; 0xc391a
+ jbe short 0392ah ; 76 0b ; 0xc391d
+ jmp short 03933h ; eb 12 ; 0xc391f
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3921 vgabios.c:2542
+ xor al, al ; 30 c0 ; 0xc3924
+ or AL, strict byte 03fh ; 0c 3f ; 0xc3926
+ jmp short 0393ah ; eb 10 ; 0xc3928 vgabios.c:2543
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc392a vgabios.c:2551
+ xor al, al ; 30 c0 ; 0xc392d
+ or AL, strict byte 030h ; 0c 30 ; 0xc392f
+ jmp short 0393ah ; eb 07 ; 0xc3931
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3933 vgabios.c:2554
+ xor al, al ; 30 c0 ; 0xc3936
+ or AL, strict byte 020h ; 0c 20 ; 0xc3938
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc393a
+ jmp short 03951h ; eb 12 ; 0xc393d vgabios.c:2556
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc393f vgabios.c:2558
+ xor ah, ah ; 30 e4 ; 0xc3942
+ mov dx, ax ; 89 c2 ; 0xc3944
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3946
+ shr ax, 008h ; c1 e8 08 ; 0xc3949
+ xor ah, ah ; 30 e4 ; 0xc394c
+ call 0118ch ; e8 3b d8 ; 0xc394e
+ jmp near 03d71h ; e9 1d 04 ; 0xc3951 vgabios.c:2559
+ mov dx, word [bp+00eh] ; 8b 56 0e ; 0xc3954 vgabios.c:2561
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3957
+ shr ax, 008h ; c1 e8 08 ; 0xc395a
+ xor ah, ah ; 30 e4 ; 0xc395d
+ call 01293h ; e8 31 d9 ; 0xc395f
+ jmp short 03951h ; eb ed ; 0xc3962 vgabios.c:2562
+ lea bx, [bp+00eh] ; 8d 5e 0e ; 0xc3964 vgabios.c:2564
+ lea dx, [bp+010h] ; 8d 56 10 ; 0xc3967
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc396a
+ shr ax, 008h ; c1 e8 08 ; 0xc396d
+ xor ah, ah ; 30 e4 ; 0xc3970
+ call 00a96h ; e8 21 d1 ; 0xc3972
+ jmp short 03951h ; eb da ; 0xc3975 vgabios.c:2565
+ xor ax, ax ; 31 c0 ; 0xc3977 vgabios.c:2571
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc3979
+ mov word [bp+00ch], ax ; 89 46 0c ; 0xc397c vgabios.c:2572
+ mov word [bp+010h], ax ; 89 46 10 ; 0xc397f vgabios.c:2573
+ mov word [bp+00eh], ax ; 89 46 0e ; 0xc3982 vgabios.c:2574
+ jmp short 03951h ; eb ca ; 0xc3985 vgabios.c:2575
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3987 vgabios.c:2577
+ xor ah, ah ; 30 e4 ; 0xc398a
+ call 01322h ; e8 93 d9 ; 0xc398c
+ jmp short 03951h ; eb c0 ; 0xc398f vgabios.c:2578
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc3991 vgabios.c:2580
+ push ax ; 50 ; 0xc3994
+ mov ax, 000ffh ; b8 ff 00 ; 0xc3995
+ push ax ; 50 ; 0xc3998
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3999
+ xor ah, ah ; 30 e4 ; 0xc399c
+ push ax ; 50 ; 0xc399e
+ mov ax, word [bp+00eh] ; 8b 46 0e ; 0xc399f
+ shr ax, 008h ; c1 e8 08 ; 0xc39a2
+ xor ah, ah ; 30 e4 ; 0xc39a5
+ push ax ; 50 ; 0xc39a7
+ mov cl, byte [bp+010h] ; 8a 4e 10 ; 0xc39a8
+ xor ch, ch ; 30 ed ; 0xc39ab
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc39ad
+ shr ax, 008h ; c1 e8 08 ; 0xc39b0
+ xor ah, ah ; 30 e4 ; 0xc39b3
+ mov bx, ax ; 89 c3 ; 0xc39b5
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc39b7
+ shr ax, 008h ; c1 e8 08 ; 0xc39ba
+ xor ah, ah ; 30 e4 ; 0xc39bd
+ mov dx, ax ; 89 c2 ; 0xc39bf
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc39c1
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc39c4
+ mov byte [bp-005h], ch ; 88 6e fb ; 0xc39c7
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc39ca
+ call 01c55h ; e8 85 e2 ; 0xc39cd
+ jmp near 03d71h ; e9 9e 03 ; 0xc39d0 vgabios.c:2581
+ xor ax, ax ; 31 c0 ; 0xc39d3 vgabios.c:2583
+ push ax ; 50 ; 0xc39d5
+ mov ax, 000ffh ; b8 ff 00 ; 0xc39d6
+ push ax ; 50 ; 0xc39d9
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc39da
+ xor ah, ah ; 30 e4 ; 0xc39dd
+ push ax ; 50 ; 0xc39df
+ mov ax, word [bp+00eh] ; 8b 46 0e ; 0xc39e0
+ shr ax, 008h ; c1 e8 08 ; 0xc39e3
+ xor ah, ah ; 30 e4 ; 0xc39e6
+ push ax ; 50 ; 0xc39e8
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc39e9
+ mov cx, ax ; 89 c1 ; 0xc39ec
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc39ee
+ shr ax, 008h ; c1 e8 08 ; 0xc39f1
+ xor ah, ah ; 30 e4 ; 0xc39f4
+ mov bx, ax ; 89 c3 ; 0xc39f6
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc39f8
+ shr ax, 008h ; c1 e8 08 ; 0xc39fb
+ xor ah, ah ; 30 e4 ; 0xc39fe
+ mov dx, ax ; 89 c2 ; 0xc3a00
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a02
+ jmp short 039cdh ; eb c6 ; 0xc3a05
+ lea dx, [bp+012h] ; 8d 56 12 ; 0xc3a07 vgabios.c:2586
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3a0a
+ shr ax, 008h ; c1 e8 08 ; 0xc3a0d
+ xor ah, ah ; 30 e4 ; 0xc3a10
+ call 00dd6h ; e8 c1 d3 ; 0xc3a12
+ jmp near 03d71h ; e9 59 03 ; 0xc3a15 vgabios.c:2587
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3a18 vgabios.c:2589
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3a1b
+ xor ah, ah ; 30 e4 ; 0xc3a1e
+ mov bx, ax ; 89 c3 ; 0xc3a20
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3a22
+ shr ax, 008h ; c1 e8 08 ; 0xc3a25
+ xor ah, ah ; 30 e4 ; 0xc3a28
+ mov dx, ax ; 89 c2 ; 0xc3a2a
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a2c
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc3a2f
+ mov byte [bp-005h], bh ; 88 7e fb ; 0xc3a32
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc3a35
+ call 0259bh ; e8 60 eb ; 0xc3a38
+ jmp near 03d71h ; e9 33 03 ; 0xc3a3b vgabios.c:2590
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3a3e vgabios.c:2592
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3a41
+ xor ah, ah ; 30 e4 ; 0xc3a44
+ mov bx, ax ; 89 c3 ; 0xc3a46
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc3a48
+ shr dx, 008h ; c1 ea 08 ; 0xc3a4b
+ xor dh, dh ; 30 f6 ; 0xc3a4e
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a50
+ call 02722h ; e8 cc ec ; 0xc3a53
+ jmp near 03d71h ; e9 18 03 ; 0xc3a56 vgabios.c:2593
+ mov cx, word [bp+00eh] ; 8b 4e 0e ; 0xc3a59 vgabios.c:2595
+ mov bx, word [bp+010h] ; 8b 5e 10 ; 0xc3a5c
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a5f
+ xor ah, ah ; 30 e4 ; 0xc3a62
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc3a64
+ shr dx, 008h ; c1 ea 08 ; 0xc3a67
+ xor dh, dh ; 30 f6 ; 0xc3a6a
+ mov si, dx ; 89 d6 ; 0xc3a6c
+ mov dx, ax ; 89 c2 ; 0xc3a6e
+ mov ax, si ; 89 f0 ; 0xc3a70
+ call 028a3h ; e8 2e ee ; 0xc3a72
+ jmp near 03d71h ; e9 f9 02 ; 0xc3a75 vgabios.c:2596
+ lea cx, [bp+012h] ; 8d 4e 12 ; 0xc3a78 vgabios.c:2598
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3a7b
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3a7e
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3a81
+ shr ax, 008h ; c1 e8 08 ; 0xc3a84
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc3a87
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3a8a
+ xor ah, ah ; 30 e4 ; 0xc3a8d
+ call 00f99h ; e8 07 d5 ; 0xc3a8f
+ jmp near 03d71h ; e9 dc 02 ; 0xc3a92 vgabios.c:2599
+ mov cx, strict word 00002h ; b9 02 00 ; 0xc3a95 vgabios.c:2607
+ mov bl, byte [bp+00ch] ; 8a 5e 0c ; 0xc3a98
+ xor bh, bh ; 30 ff ; 0xc3a9b
+ mov dx, 000ffh ; ba ff 00 ; 0xc3a9d
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3aa0
+ xor ah, ah ; 30 e4 ; 0xc3aa3
+ call 02a16h ; e8 6e ef ; 0xc3aa5
+ jmp near 03d71h ; e9 c6 02 ; 0xc3aa8 vgabios.c:2608
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3aab vgabios.c:2611
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3aae
+ call 010ffh ; e8 4b d6 ; 0xc3ab1
+ jmp near 03d71h ; e9 ba 02 ; 0xc3ab4 vgabios.c:2612
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3ab7 vgabios.c:2614
+ xor ah, ah ; 30 e4 ; 0xc3aba
+ cmp ax, strict word 00030h ; 3d 30 00 ; 0xc3abc
+ jnbe short 03b2ch ; 77 6b ; 0xc3abf
+ push CS ; 0e ; 0xc3ac1
+ pop ES ; 07 ; 0xc3ac2
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc3ac3
+ mov di, 03893h ; bf 93 38 ; 0xc3ac6
+ repne scasb ; f2 ae ; 0xc3ac9
+ sal cx, 1 ; d1 e1 ; 0xc3acb
+ mov di, cx ; 89 cf ; 0xc3acd
+ mov ax, word [cs:di+038a2h] ; 2e 8b 85 a2 38 ; 0xc3acf
+ jmp ax ; ff e0 ; 0xc3ad4
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3ad6 vgabios.c:2618
+ shr ax, 008h ; c1 e8 08 ; 0xc3ad9
+ xor ah, ah ; 30 e4 ; 0xc3adc
+ push ax ; 50 ; 0xc3ade
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3adf
+ push ax ; 50 ; 0xc3ae2
+ push word [bp+00eh] ; ff 76 0e ; 0xc3ae3
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3ae6
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3ae9
+ mov bx, word [bp+008h] ; 8b 5e 08 ; 0xc3aec
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3aef
+ jmp short 03b0ah ; eb 16 ; 0xc3af2
+ push strict byte 0000eh ; 6a 0e ; 0xc3af4 vgabios.c:2622
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3af6
+ xor ah, ah ; 30 e4 ; 0xc3af9
+ push ax ; 50 ; 0xc3afb
+ push strict byte 00000h ; 6a 00 ; 0xc3afc
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3afe
+ mov cx, 00100h ; b9 00 01 ; 0xc3b01
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc3b04
+ mov dx, 0c000h ; ba 00 c0 ; 0xc3b07
+ call 02e1ah ; e8 0d f3 ; 0xc3b0a
+ jmp short 03b2ch ; eb 1d ; 0xc3b0d
+ push strict byte 00008h ; 6a 08 ; 0xc3b0f vgabios.c:2626
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b11
+ xor ah, ah ; 30 e4 ; 0xc3b14
+ push ax ; 50 ; 0xc3b16
+ push strict byte 00000h ; 6a 00 ; 0xc3b17
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b19
+ mov cx, 00100h ; b9 00 01 ; 0xc3b1c
+ mov bx, 0556ch ; bb 6c 55 ; 0xc3b1f
+ jmp short 03b07h ; eb e3 ; 0xc3b22
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b24 vgabios.c:2629
+ xor ah, ah ; 30 e4 ; 0xc3b27
+ call 02d82h ; e8 56 f2 ; 0xc3b29
+ jmp near 03d71h ; e9 42 02 ; 0xc3b2c vgabios.c:2630
+ push strict byte 00010h ; 6a 10 ; 0xc3b2f vgabios.c:2633
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b31
+ xor ah, ah ; 30 e4 ; 0xc3b34
+ push ax ; 50 ; 0xc3b36
+ push strict byte 00000h ; 6a 00 ; 0xc3b37
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b39
+ mov cx, 00100h ; b9 00 01 ; 0xc3b3c
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc3b3f
+ jmp short 03b07h ; eb c3 ; 0xc3b42
+ mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b44 vgabios.c:2636
+ mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b47
+ call 02e99h ; e8 4c f3 ; 0xc3b4a
+ jmp short 03b2ch ; eb dd ; 0xc3b4d vgabios.c:2637
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3b4f vgabios.c:2639
+ xor ah, ah ; 30 e4 ; 0xc3b52
+ push ax ; 50 ; 0xc3b54
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b55
+ mov bx, word [bp+010h] ; 8b 5e 10 ; 0xc3b58
+ mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b5b
+ mov si, word [bp+016h] ; 8b 76 16 ; 0xc3b5e
+ mov cx, ax ; 89 c1 ; 0xc3b61
+ mov ax, si ; 89 f0 ; 0xc3b63
+ call 02efch ; e8 94 f3 ; 0xc3b65
+ jmp short 03b2ch ; eb c2 ; 0xc3b68 vgabios.c:2640
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3b6a vgabios.c:2642
+ xor ah, ah ; 30 e4 ; 0xc3b6d
+ mov dx, ax ; 89 c2 ; 0xc3b6f
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b71
+ call 02f19h ; e8 a2 f3 ; 0xc3b74
+ jmp short 03b2ch ; eb b3 ; 0xc3b77 vgabios.c:2643
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3b79 vgabios.c:2645
+ xor ah, ah ; 30 e4 ; 0xc3b7c
+ mov dx, ax ; 89 c2 ; 0xc3b7e
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b80
+ call 02f3bh ; e8 b5 f3 ; 0xc3b83
+ jmp short 03b2ch ; eb a4 ; 0xc3b86 vgabios.c:2646
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3b88 vgabios.c:2648
+ xor ah, ah ; 30 e4 ; 0xc3b8b
+ mov dx, ax ; 89 c2 ; 0xc3b8d
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b8f
+ call 02f5dh ; e8 c8 f3 ; 0xc3b92
+ jmp short 03b2ch ; eb 95 ; 0xc3b95 vgabios.c:2649
+ lea ax, [bp+00eh] ; 8d 46 0e ; 0xc3b97 vgabios.c:2651
+ push ax ; 50 ; 0xc3b9a
+ lea cx, [bp+010h] ; 8d 4e 10 ; 0xc3b9b
+ lea bx, [bp+008h] ; 8d 5e 08 ; 0xc3b9e
+ lea dx, [bp+016h] ; 8d 56 16 ; 0xc3ba1
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3ba4
+ shr ax, 008h ; c1 e8 08 ; 0xc3ba7
+ call 00f16h ; e8 69 d3 ; 0xc3baa
+ jmp near 03d71h ; e9 c1 01 ; 0xc3bad vgabios.c:2659
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3bb0 vgabios.c:2661
+ xor ah, ah ; 30 e4 ; 0xc3bb3
+ cmp ax, strict word 00034h ; 3d 34 00 ; 0xc3bb5
+ jc short 03bc9h ; 72 0f ; 0xc3bb8
+ jbe short 03bf4h ; 76 38 ; 0xc3bba
+ cmp ax, strict word 00036h ; 3d 36 00 ; 0xc3bbc
+ je short 03c1ch ; 74 5b ; 0xc3bbf
+ cmp ax, strict word 00035h ; 3d 35 00 ; 0xc3bc1
+ je short 03c1eh ; 74 58 ; 0xc3bc4
+ jmp near 03d71h ; e9 a8 01 ; 0xc3bc6
+ cmp ax, strict word 00030h ; 3d 30 00 ; 0xc3bc9
+ je short 03bd8h ; 74 0a ; 0xc3bcc
+ cmp ax, strict word 00020h ; 3d 20 00 ; 0xc3bce
+ jne short 03c19h ; 75 46 ; 0xc3bd1
+ call 02f7fh ; e8 a9 f3 ; 0xc3bd3 vgabios.c:2664
+ jmp short 03c19h ; eb 41 ; 0xc3bd6 vgabios.c:2665
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3bd8 vgabios.c:2667
+ xor ah, ah ; 30 e4 ; 0xc3bdb
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3bdd
+ jnbe short 03c19h ; 77 37 ; 0xc3be0
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3be2 vgabios.c:2668
+ call 02f84h ; e8 9c f3 ; 0xc3be5
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3be8 vgabios.c:2669
+ xor al, al ; 30 c0 ; 0xc3beb
+ or AL, strict byte 012h ; 0c 12 ; 0xc3bed
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc3bef
+ jmp short 03c19h ; eb 25 ; 0xc3bf2 vgabios.c:2671
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3bf4 vgabios.c:2673
+ xor ah, ah ; 30 e4 ; 0xc3bf7
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3bf9
+ jnc short 03c16h ; 73 18 ; 0xc3bfc
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3bfe vgabios.c:45
+ mov es, ax ; 8e c0 ; 0xc3c01
+ mov si, 00087h ; be 87 00 ; 0xc3c03
+ mov ah, byte [es:si] ; 26 8a 24 ; 0xc3c06 vgabios.c:47
+ and ah, 0feh ; 80 e4 fe ; 0xc3c09 vgabios.c:48
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c0c
+ or al, ah ; 08 e0 ; 0xc3c0f
+ mov byte [es:si], al ; 26 88 04 ; 0xc3c11 vgabios.c:52
+ jmp short 03be8h ; eb d2 ; 0xc3c14
+ mov byte [bp+012h], ah ; 88 66 12 ; 0xc3c16 vgabios.c:2679
+ jmp near 03d71h ; e9 55 01 ; 0xc3c19 vgabios.c:2680
+ jmp short 03c2ch ; eb 0e ; 0xc3c1c
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c1e vgabios.c:2682
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3c21
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3c24
+ call 02fb6h ; e8 8c f3 ; 0xc3c27
+ jmp short 03be8h ; eb bc ; 0xc3c2a
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c2c vgabios.c:2686
+ call 02fbbh ; e8 89 f3 ; 0xc3c2f
+ jmp short 03be8h ; eb b4 ; 0xc3c32
+ push word [bp+008h] ; ff 76 08 ; 0xc3c34 vgabios.c:2696
+ push word [bp+016h] ; ff 76 16 ; 0xc3c37
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3c3a
+ xor ah, ah ; 30 e4 ; 0xc3c3d
+ push ax ; 50 ; 0xc3c3f
+ mov ax, word [bp+00eh] ; 8b 46 0e ; 0xc3c40
+ shr ax, 008h ; c1 e8 08 ; 0xc3c43
+ xor ah, ah ; 30 e4 ; 0xc3c46
+ push ax ; 50 ; 0xc3c48
+ mov bl, byte [bp+00ch] ; 8a 5e 0c ; 0xc3c49
+ xor bh, bh ; 30 ff ; 0xc3c4c
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc3c4e
+ shr dx, 008h ; c1 ea 08 ; 0xc3c51
+ xor dh, dh ; 30 f6 ; 0xc3c54
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c56
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3c59
+ call 02fc0h ; e8 61 f3 ; 0xc3c5c
+ jmp short 03c19h ; eb b8 ; 0xc3c5f vgabios.c:2697
+ mov bx, si ; 89 f3 ; 0xc3c61 vgabios.c:2699
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3c63
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3c66
+ call 0305dh ; e8 f1 f3 ; 0xc3c69
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c6c vgabios.c:2700
+ xor al, al ; 30 c0 ; 0xc3c6f
+ or AL, strict byte 01bh ; 0c 1b ; 0xc3c71
+ jmp near 03befh ; e9 79 ff ; 0xc3c73
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c76 vgabios.c:2703
+ xor ah, ah ; 30 e4 ; 0xc3c79
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3c7b
+ je short 03ca2h ; 74 22 ; 0xc3c7e
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc3c80
+ je short 03c94h ; 74 0f ; 0xc3c83
+ test ax, ax ; 85 c0 ; 0xc3c85
+ jne short 03caeh ; 75 25 ; 0xc3c87
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3c89 vgabios.c:2706
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3c8c
+ call 0326fh ; e8 dd f5 ; 0xc3c8f
+ jmp short 03caeh ; eb 1a ; 0xc3c92 vgabios.c:2707
+ mov bx, word [bp+00ch] ; 8b 5e 0c ; 0xc3c94 vgabios.c:2709
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3c97
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3c9a
+ call 03287h ; e8 e7 f5 ; 0xc3c9d
+ jmp short 03caeh ; eb 0c ; 0xc3ca0 vgabios.c:2710
+ mov bx, word [bp+00ch] ; 8b 5e 0c ; 0xc3ca2 vgabios.c:2712
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3ca5
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3ca8
+ call 0355fh ; e8 b1 f8 ; 0xc3cab
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3cae vgabios.c:2719
+ xor al, al ; 30 c0 ; 0xc3cb1
+ or AL, strict byte 01ch ; 0c 1c ; 0xc3cb3
+ jmp near 03befh ; e9 37 ff ; 0xc3cb5
+ call 007bfh ; e8 04 cb ; 0xc3cb8 vgabios.c:2724
+ test ax, ax ; 85 c0 ; 0xc3cbb
+ je short 03d33h ; 74 74 ; 0xc3cbd
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3cbf vgabios.c:2725
+ xor ah, ah ; 30 e4 ; 0xc3cc2
+ cmp ax, strict word 0000ah ; 3d 0a 00 ; 0xc3cc4
+ jnbe short 03d35h ; 77 6c ; 0xc3cc7
+ push CS ; 0e ; 0xc3cc9
+ pop ES ; 07 ; 0xc3cca
+ mov cx, strict word 00008h ; b9 08 00 ; 0xc3ccb
+ mov di, 038c2h ; bf c2 38 ; 0xc3cce
+ repne scasb ; f2 ae ; 0xc3cd1
+ sal cx, 1 ; d1 e1 ; 0xc3cd3
+ mov di, cx ; 89 cf ; 0xc3cd5
+ mov ax, word [cs:di+038c9h] ; 2e 8b 85 c9 38 ; 0xc3cd7
+ jmp ax ; ff e0 ; 0xc3cdc
+ mov bx, si ; 89 f3 ; 0xc3cde vgabios.c:2728
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3ce0
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3ce3
+ call 03f42h ; e8 59 02 ; 0xc3ce6
+ jmp near 03d71h ; e9 85 00 ; 0xc3ce9 vgabios.c:2729
+ mov cx, si ; 89 f1 ; 0xc3cec vgabios.c:2731
+ mov bx, word [bp+016h] ; 8b 5e 16 ; 0xc3cee
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3cf1
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3cf4
+ call 0406dh ; e8 73 03 ; 0xc3cf7
+ jmp near 03d71h ; e9 74 00 ; 0xc3cfa vgabios.c:2732
+ mov cx, si ; 89 f1 ; 0xc3cfd vgabios.c:2734
+ mov bx, word [bp+016h] ; 8b 5e 16 ; 0xc3cff
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc3d02
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d05
+ call 0410ch ; e8 01 04 ; 0xc3d08
+ jmp short 03d71h ; eb 64 ; 0xc3d0b vgabios.c:2735
+ lea ax, [bp+00ch] ; 8d 46 0c ; 0xc3d0d vgabios.c:2737
+ push ax ; 50 ; 0xc3d10
+ mov cx, word [bp+016h] ; 8b 4e 16 ; 0xc3d11
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3d14
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3d17
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d1a
+ call 042d5h ; e8 b5 05 ; 0xc3d1d
+ jmp short 03d71h ; eb 4f ; 0xc3d20 vgabios.c:2738
+ lea cx, [bp+00eh] ; 8d 4e 0e ; 0xc3d22 vgabios.c:2740
+ lea bx, [bp+010h] ; 8d 5e 10 ; 0xc3d25
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3d28
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d2b
+ call 04361h ; e8 30 06 ; 0xc3d2e
+ jmp short 03d71h ; eb 3e ; 0xc3d31 vgabios.c:2741
+ jmp short 03d3ch ; eb 07 ; 0xc3d33
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d35 vgabios.c:2763
+ jmp short 03d71h ; eb 35 ; 0xc3d3a vgabios.c:2766
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d3c vgabios.c:2768
+ jmp short 03d71h ; eb 2e ; 0xc3d41 vgabios.c:2770
+ call 007bfh ; e8 79 ca ; 0xc3d43 vgabios.c:2772
+ test ax, ax ; 85 c0 ; 0xc3d46
+ je short 03d6ch ; 74 22 ; 0xc3d48
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3d4a vgabios.c:2773
+ xor ah, ah ; 30 e4 ; 0xc3d4d
+ cmp ax, strict word 00042h ; 3d 42 00 ; 0xc3d4f
+ jne short 03d65h ; 75 11 ; 0xc3d52
+ lea cx, [bp+00eh] ; 8d 4e 0e ; 0xc3d54 vgabios.c:2776
+ lea bx, [bp+010h] ; 8d 5e 10 ; 0xc3d57
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3d5a
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d5d
+ call 04440h ; e8 dd 06 ; 0xc3d60
+ jmp short 03d71h ; eb 0c ; 0xc3d63 vgabios.c:2777
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d65 vgabios.c:2779
+ jmp short 03d71h ; eb 05 ; 0xc3d6a vgabios.c:2782
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d6c vgabios.c:2784
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3d71 vgabios.c:2794
+ pop di ; 5f ; 0xc3d74
+ pop si ; 5e ; 0xc3d75
+ pop bp ; 5d ; 0xc3d76
+ retn ; c3 ; 0xc3d77
+ ; disGetNextSymbol 0xc3d78 LB 0x7ba -> off=0x0 cb=000000000000001f uValue=00000000000c3d78 'dispi_set_xres'
+dispi_set_xres: ; 0xc3d78 LB 0x1f
+ push bp ; 55 ; 0xc3d78 vbe.c:100
+ mov bp, sp ; 89 e5 ; 0xc3d79
+ push bx ; 53 ; 0xc3d7b
+ push dx ; 52 ; 0xc3d7c
+ mov bx, ax ; 89 c3 ; 0xc3d7d
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc3d7f vbe.c:105
+ mov dx, 001ceh ; ba ce 01 ; 0xc3d82
+ call 00570h ; e8 e8 c7 ; 0xc3d85
+ mov ax, bx ; 89 d8 ; 0xc3d88 vbe.c:106
+ mov dx, 001cfh ; ba cf 01 ; 0xc3d8a
+ call 00570h ; e8 e0 c7 ; 0xc3d8d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3d90 vbe.c:107
+ pop dx ; 5a ; 0xc3d93
+ pop bx ; 5b ; 0xc3d94
+ pop bp ; 5d ; 0xc3d95
+ retn ; c3 ; 0xc3d96
+ ; disGetNextSymbol 0xc3d97 LB 0x79b -> off=0x0 cb=000000000000001f uValue=00000000000c3d97 'dispi_set_yres'
+dispi_set_yres: ; 0xc3d97 LB 0x1f
+ push bp ; 55 ; 0xc3d97 vbe.c:109
+ mov bp, sp ; 89 e5 ; 0xc3d98
+ push bx ; 53 ; 0xc3d9a
+ push dx ; 52 ; 0xc3d9b
+ mov bx, ax ; 89 c3 ; 0xc3d9c
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc3d9e vbe.c:114
+ mov dx, 001ceh ; ba ce 01 ; 0xc3da1
+ call 00570h ; e8 c9 c7 ; 0xc3da4
+ mov ax, bx ; 89 d8 ; 0xc3da7 vbe.c:115
+ mov dx, 001cfh ; ba cf 01 ; 0xc3da9
+ call 00570h ; e8 c1 c7 ; 0xc3dac
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3daf vbe.c:116
+ pop dx ; 5a ; 0xc3db2
+ pop bx ; 5b ; 0xc3db3
+ pop bp ; 5d ; 0xc3db4
+ retn ; c3 ; 0xc3db5
+ ; disGetNextSymbol 0xc3db6 LB 0x77c -> off=0x0 cb=0000000000000019 uValue=00000000000c3db6 'dispi_get_yres'
+dispi_get_yres: ; 0xc3db6 LB 0x19
+ push bp ; 55 ; 0xc3db6 vbe.c:118
+ mov bp, sp ; 89 e5 ; 0xc3db7
+ push dx ; 52 ; 0xc3db9
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc3dba vbe.c:120
+ mov dx, 001ceh ; ba ce 01 ; 0xc3dbd
+ call 00570h ; e8 ad c7 ; 0xc3dc0
+ mov dx, 001cfh ; ba cf 01 ; 0xc3dc3 vbe.c:121
+ call 00577h ; e8 ae c7 ; 0xc3dc6
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3dc9 vbe.c:122
+ pop dx ; 5a ; 0xc3dcc
+ pop bp ; 5d ; 0xc3dcd
+ retn ; c3 ; 0xc3dce
+ ; disGetNextSymbol 0xc3dcf LB 0x763 -> off=0x0 cb=000000000000001f uValue=00000000000c3dcf 'dispi_set_bpp'
+dispi_set_bpp: ; 0xc3dcf LB 0x1f
+ push bp ; 55 ; 0xc3dcf vbe.c:124
+ mov bp, sp ; 89 e5 ; 0xc3dd0
+ push bx ; 53 ; 0xc3dd2
+ push dx ; 52 ; 0xc3dd3
+ mov bx, ax ; 89 c3 ; 0xc3dd4
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc3dd6 vbe.c:129
+ mov dx, 001ceh ; ba ce 01 ; 0xc3dd9
+ call 00570h ; e8 91 c7 ; 0xc3ddc
+ mov ax, bx ; 89 d8 ; 0xc3ddf vbe.c:130
+ mov dx, 001cfh ; ba cf 01 ; 0xc3de1
+ call 00570h ; e8 89 c7 ; 0xc3de4
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3de7 vbe.c:131
+ pop dx ; 5a ; 0xc3dea
+ pop bx ; 5b ; 0xc3deb
+ pop bp ; 5d ; 0xc3dec
+ retn ; c3 ; 0xc3ded
+ ; disGetNextSymbol 0xc3dee LB 0x744 -> off=0x0 cb=0000000000000019 uValue=00000000000c3dee 'dispi_get_bpp'
+dispi_get_bpp: ; 0xc3dee LB 0x19
+ push bp ; 55 ; 0xc3dee vbe.c:133
+ mov bp, sp ; 89 e5 ; 0xc3def
+ push dx ; 52 ; 0xc3df1
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc3df2 vbe.c:135
+ mov dx, 001ceh ; ba ce 01 ; 0xc3df5
+ call 00570h ; e8 75 c7 ; 0xc3df8
+ mov dx, 001cfh ; ba cf 01 ; 0xc3dfb vbe.c:136
+ call 00577h ; e8 76 c7 ; 0xc3dfe
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e01 vbe.c:137
+ pop dx ; 5a ; 0xc3e04
+ pop bp ; 5d ; 0xc3e05
+ retn ; c3 ; 0xc3e06
+ ; disGetNextSymbol 0xc3e07 LB 0x72b -> off=0x0 cb=000000000000001f uValue=00000000000c3e07 'dispi_set_virt_width'
+dispi_set_virt_width: ; 0xc3e07 LB 0x1f
+ push bp ; 55 ; 0xc3e07 vbe.c:139
+ mov bp, sp ; 89 e5 ; 0xc3e08
+ push bx ; 53 ; 0xc3e0a
+ push dx ; 52 ; 0xc3e0b
+ mov bx, ax ; 89 c3 ; 0xc3e0c
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc3e0e vbe.c:144
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e11
+ call 00570h ; e8 59 c7 ; 0xc3e14
+ mov ax, bx ; 89 d8 ; 0xc3e17 vbe.c:145
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e19
+ call 00570h ; e8 51 c7 ; 0xc3e1c
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3e1f vbe.c:146
+ pop dx ; 5a ; 0xc3e22
+ pop bx ; 5b ; 0xc3e23
+ pop bp ; 5d ; 0xc3e24
+ retn ; c3 ; 0xc3e25
+ ; disGetNextSymbol 0xc3e26 LB 0x70c -> off=0x0 cb=0000000000000019 uValue=00000000000c3e26 'dispi_get_virt_width'
+dispi_get_virt_width: ; 0xc3e26 LB 0x19
+ push bp ; 55 ; 0xc3e26 vbe.c:148
+ mov bp, sp ; 89 e5 ; 0xc3e27
+ push dx ; 52 ; 0xc3e29
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc3e2a vbe.c:150
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e2d
+ call 00570h ; e8 3d c7 ; 0xc3e30
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e33 vbe.c:151
+ call 00577h ; e8 3e c7 ; 0xc3e36
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e39 vbe.c:152
+ pop dx ; 5a ; 0xc3e3c
+ pop bp ; 5d ; 0xc3e3d
+ retn ; c3 ; 0xc3e3e
+ ; disGetNextSymbol 0xc3e3f LB 0x6f3 -> off=0x0 cb=0000000000000019 uValue=00000000000c3e3f 'dispi_get_virt_height'
+dispi_get_virt_height: ; 0xc3e3f LB 0x19
+ push bp ; 55 ; 0xc3e3f vbe.c:154
+ mov bp, sp ; 89 e5 ; 0xc3e40
+ push dx ; 52 ; 0xc3e42
+ mov ax, strict word 00007h ; b8 07 00 ; 0xc3e43 vbe.c:156
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e46
+ call 00570h ; e8 24 c7 ; 0xc3e49
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e4c vbe.c:157
+ call 00577h ; e8 25 c7 ; 0xc3e4f
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e52 vbe.c:158
+ pop dx ; 5a ; 0xc3e55
+ pop bp ; 5d ; 0xc3e56
+ retn ; c3 ; 0xc3e57
+ ; disGetNextSymbol 0xc3e58 LB 0x6da -> off=0x0 cb=0000000000000012 uValue=00000000000c3e58 'in_word'
+in_word: ; 0xc3e58 LB 0x12
+ push bp ; 55 ; 0xc3e58 vbe.c:160
+ mov bp, sp ; 89 e5 ; 0xc3e59
+ push bx ; 53 ; 0xc3e5b
+ mov bx, ax ; 89 c3 ; 0xc3e5c
+ mov ax, dx ; 89 d0 ; 0xc3e5e
+ mov dx, bx ; 89 da ; 0xc3e60 vbe.c:162
+ out DX, ax ; ef ; 0xc3e62
+ in ax, DX ; ed ; 0xc3e63 vbe.c:163
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e64 vbe.c:164
+ pop bx ; 5b ; 0xc3e67
+ pop bp ; 5d ; 0xc3e68
+ retn ; c3 ; 0xc3e69
+ ; disGetNextSymbol 0xc3e6a LB 0x6c8 -> off=0x0 cb=0000000000000014 uValue=00000000000c3e6a 'in_byte'
+in_byte: ; 0xc3e6a LB 0x14
+ push bp ; 55 ; 0xc3e6a vbe.c:166
+ mov bp, sp ; 89 e5 ; 0xc3e6b
+ push bx ; 53 ; 0xc3e6d
+ mov bx, ax ; 89 c3 ; 0xc3e6e
+ mov ax, dx ; 89 d0 ; 0xc3e70
+ mov dx, bx ; 89 da ; 0xc3e72 vbe.c:168
+ out DX, ax ; ef ; 0xc3e74
+ in AL, DX ; ec ; 0xc3e75 vbe.c:169
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3e76
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e78 vbe.c:170
+ pop bx ; 5b ; 0xc3e7b
+ pop bp ; 5d ; 0xc3e7c
+ retn ; c3 ; 0xc3e7d
+ ; disGetNextSymbol 0xc3e7e LB 0x6b4 -> off=0x0 cb=0000000000000014 uValue=00000000000c3e7e 'dispi_get_id'
+dispi_get_id: ; 0xc3e7e LB 0x14
+ push bp ; 55 ; 0xc3e7e vbe.c:173
+ mov bp, sp ; 89 e5 ; 0xc3e7f
+ push dx ; 52 ; 0xc3e81
+ xor ax, ax ; 31 c0 ; 0xc3e82 vbe.c:175
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e84
+ out DX, ax ; ef ; 0xc3e87
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e88 vbe.c:176
+ in ax, DX ; ed ; 0xc3e8b
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e8c vbe.c:177
+ pop dx ; 5a ; 0xc3e8f
+ pop bp ; 5d ; 0xc3e90
+ retn ; c3 ; 0xc3e91
+ ; disGetNextSymbol 0xc3e92 LB 0x6a0 -> off=0x0 cb=000000000000001a uValue=00000000000c3e92 'dispi_set_id'
+dispi_set_id: ; 0xc3e92 LB 0x1a
+ push bp ; 55 ; 0xc3e92 vbe.c:179
+ mov bp, sp ; 89 e5 ; 0xc3e93
+ push bx ; 53 ; 0xc3e95
+ push dx ; 52 ; 0xc3e96
+ mov bx, ax ; 89 c3 ; 0xc3e97
+ xor ax, ax ; 31 c0 ; 0xc3e99 vbe.c:181
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e9b
+ out DX, ax ; ef ; 0xc3e9e
+ mov ax, bx ; 89 d8 ; 0xc3e9f vbe.c:182
+ mov dx, 001cfh ; ba cf 01 ; 0xc3ea1
+ out DX, ax ; ef ; 0xc3ea4
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3ea5 vbe.c:183
+ pop dx ; 5a ; 0xc3ea8
+ pop bx ; 5b ; 0xc3ea9
+ pop bp ; 5d ; 0xc3eaa
+ retn ; c3 ; 0xc3eab
+ ; disGetNextSymbol 0xc3eac LB 0x686 -> off=0x0 cb=000000000000002a uValue=00000000000c3eac 'vbe_init'
+vbe_init: ; 0xc3eac LB 0x2a
+ push bp ; 55 ; 0xc3eac vbe.c:188
+ mov bp, sp ; 89 e5 ; 0xc3ead
+ push bx ; 53 ; 0xc3eaf
+ mov ax, 0b0c0h ; b8 c0 b0 ; 0xc3eb0 vbe.c:190
+ call 03e92h ; e8 dc ff ; 0xc3eb3
+ call 03e7eh ; e8 c5 ff ; 0xc3eb6 vbe.c:191
+ cmp ax, 0b0c0h ; 3d c0 b0 ; 0xc3eb9
+ jne short 03ed0h ; 75 12 ; 0xc3ebc
+ mov bx, 000b9h ; bb b9 00 ; 0xc3ebe vbe.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3ec1
+ mov es, ax ; 8e c0 ; 0xc3ec4
+ mov byte [es:bx], 001h ; 26 c6 07 01 ; 0xc3ec6
+ mov ax, 0b0c4h ; b8 c4 b0 ; 0xc3eca vbe.c:194
+ call 03e92h ; e8 c2 ff ; 0xc3ecd
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3ed0 vbe.c:199
+ pop bx ; 5b ; 0xc3ed3
+ pop bp ; 5d ; 0xc3ed4
+ retn ; c3 ; 0xc3ed5
+ ; disGetNextSymbol 0xc3ed6 LB 0x65c -> off=0x0 cb=000000000000006c uValue=00000000000c3ed6 'mode_info_find_mode'
+mode_info_find_mode: ; 0xc3ed6 LB 0x6c
+ push bp ; 55 ; 0xc3ed6 vbe.c:202
+ mov bp, sp ; 89 e5 ; 0xc3ed7
+ push bx ; 53 ; 0xc3ed9
+ push cx ; 51 ; 0xc3eda
+ push si ; 56 ; 0xc3edb
+ push di ; 57 ; 0xc3edc
+ mov di, ax ; 89 c7 ; 0xc3edd
+ mov si, dx ; 89 d6 ; 0xc3edf
+ xor dx, dx ; 31 d2 ; 0xc3ee1 vbe.c:208
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3ee3
+ call 03e58h ; e8 6f ff ; 0xc3ee6
+ cmp ax, 077cch ; 3d cc 77 ; 0xc3ee9 vbe.c:209
+ jne short 03f37h ; 75 49 ; 0xc3eec
+ test si, si ; 85 f6 ; 0xc3eee vbe.c:213
+ je short 03f05h ; 74 13 ; 0xc3ef0
+ mov ax, strict word 0000bh ; b8 0b 00 ; 0xc3ef2 vbe.c:220
+ mov dx, 001ceh ; ba ce 01 ; 0xc3ef5
+ call 00570h ; e8 75 c6 ; 0xc3ef8
+ mov dx, 001cfh ; ba cf 01 ; 0xc3efb vbe.c:221
+ call 00577h ; e8 76 c6 ; 0xc3efe
+ test ax, ax ; 85 c0 ; 0xc3f01 vbe.c:222
+ je short 03f39h ; 74 34 ; 0xc3f03
+ mov bx, strict word 00004h ; bb 04 00 ; 0xc3f05 vbe.c:226
+ mov dx, bx ; 89 da ; 0xc3f08 vbe.c:232
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f0a
+ call 03e58h ; e8 48 ff ; 0xc3f0d
+ mov cx, ax ; 89 c1 ; 0xc3f10
+ cmp cx, strict byte 0ffffh ; 83 f9 ff ; 0xc3f12 vbe.c:233
+ je short 03f37h ; 74 20 ; 0xc3f15
+ lea dx, [bx+002h] ; 8d 57 02 ; 0xc3f17 vbe.c:235
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f1a
+ call 03e58h ; e8 38 ff ; 0xc3f1d
+ lea dx, [bx+044h] ; 8d 57 44 ; 0xc3f20
+ cmp cx, di ; 39 f9 ; 0xc3f23 vbe.c:237
+ jne short 03f33h ; 75 0c ; 0xc3f25
+ test si, si ; 85 f6 ; 0xc3f27 vbe.c:239
+ jne short 03f2fh ; 75 04 ; 0xc3f29
+ mov ax, bx ; 89 d8 ; 0xc3f2b vbe.c:240
+ jmp short 03f39h ; eb 0a ; 0xc3f2d
+ test AL, strict byte 080h ; a8 80 ; 0xc3f2f vbe.c:241
+ jne short 03f2bh ; 75 f8 ; 0xc3f31
+ mov bx, dx ; 89 d3 ; 0xc3f33 vbe.c:244
+ jmp short 03f0ah ; eb d3 ; 0xc3f35 vbe.c:249
+ xor ax, ax ; 31 c0 ; 0xc3f37 vbe.c:252
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc3f39 vbe.c:253
+ pop di ; 5f ; 0xc3f3c
+ pop si ; 5e ; 0xc3f3d
+ pop cx ; 59 ; 0xc3f3e
+ pop bx ; 5b ; 0xc3f3f
+ pop bp ; 5d ; 0xc3f40
+ retn ; c3 ; 0xc3f41
+ ; disGetNextSymbol 0xc3f42 LB 0x5f0 -> off=0x0 cb=000000000000012b uValue=00000000000c3f42 'vbe_biosfn_return_controller_information'
+vbe_biosfn_return_controller_information: ; 0xc3f42 LB 0x12b
+ push bp ; 55 ; 0xc3f42 vbe.c:284
+ mov bp, sp ; 89 e5 ; 0xc3f43
+ push cx ; 51 ; 0xc3f45
+ push si ; 56 ; 0xc3f46
+ push di ; 57 ; 0xc3f47
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc3f48
+ mov si, ax ; 89 c6 ; 0xc3f4b
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc3f4d
+ mov di, bx ; 89 df ; 0xc3f50
+ mov word [bp-00ch], strict word 00022h ; c7 46 f4 22 00 ; 0xc3f52 vbe.c:289
+ call 005b7h ; e8 5d c6 ; 0xc3f57 vbe.c:292
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc3f5a
+ mov bx, di ; 89 fb ; 0xc3f5d vbe.c:295
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3f5f
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3f62
+ xor dx, dx ; 31 d2 ; 0xc3f65 vbe.c:298
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f67
+ call 03e58h ; e8 eb fe ; 0xc3f6a
+ cmp ax, 077cch ; 3d cc 77 ; 0xc3f6d vbe.c:299
+ je short 03f7ch ; 74 0a ; 0xc3f70
+ push SS ; 16 ; 0xc3f72 vbe.c:301
+ pop ES ; 07 ; 0xc3f73
+ mov word [es:si], 00100h ; 26 c7 04 00 01 ; 0xc3f74
+ jmp near 04065h ; e9 e9 00 ; 0xc3f79 vbe.c:305
+ mov cx, strict word 00004h ; b9 04 00 ; 0xc3f7c vbe.c:307
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc3f7f vbe.c:314
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3f84 vbe.c:322
+ cmp word [es:bx+002h], 03245h ; 26 81 7f 02 45 32 ; 0xc3f87
+ jne short 03f96h ; 75 07 ; 0xc3f8d
+ cmp word [es:bx], 04256h ; 26 81 3f 56 42 ; 0xc3f8f
+ je short 03fa5h ; 74 0f ; 0xc3f94
+ cmp word [es:bx+002h], 04153h ; 26 81 7f 02 53 41 ; 0xc3f96
+ jne short 03faah ; 75 0c ; 0xc3f9c
+ cmp word [es:bx], 04556h ; 26 81 3f 56 45 ; 0xc3f9e
+ jne short 03faah ; 75 05 ; 0xc3fa3
+ mov word [bp-00eh], strict word 00001h ; c7 46 f2 01 00 ; 0xc3fa5 vbe.c:324
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3faa vbe.c:332
+ mov word [es:bx], 04556h ; 26 c7 07 56 45 ; 0xc3fad
+ mov word [es:bx+002h], 04153h ; 26 c7 47 02 53 41 ; 0xc3fb2 vbe.c:334
+ mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3fb8 vbe.c:338
+ mov word [es:bx+006h], 07e02h ; 26 c7 47 06 02 7e ; 0xc3fbe vbe.c:341
+ mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3fc4
+ mov word [es:bx+00ah], strict word 00001h ; 26 c7 47 0a 01 00 ; 0xc3fc8 vbe.c:344
+ mov word [es:bx+00ch], strict word 00000h ; 26 c7 47 0c 00 00 ; 0xc3fce vbe.c:346
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3fd4 vbe.c:350
+ mov word [es:bx+010h], ax ; 26 89 47 10 ; 0xc3fd7
+ lea ax, [di+022h] ; 8d 45 22 ; 0xc3fdb vbe.c:351
+ mov word [es:bx+00eh], ax ; 26 89 47 0e ; 0xc3fde
+ mov dx, strict word 0ffffh ; ba ff ff ; 0xc3fe2 vbe.c:354
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3fe5
+ call 03e58h ; e8 6d fe ; 0xc3fe8
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3feb
+ mov word [es:bx+012h], ax ; 26 89 47 12 ; 0xc3fee
+ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3ff2 vbe.c:356
+ je short 0401ch ; 74 24 ; 0xc3ff6
+ mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3ff8 vbe.c:359
+ mov word [es:bx+016h], 07e17h ; 26 c7 47 16 17 7e ; 0xc3ffe vbe.c:360
+ mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc4004
+ mov word [es:bx+01ah], 07e34h ; 26 c7 47 1a 34 7e ; 0xc4008 vbe.c:361
+ mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc400e
+ mov word [es:bx+01eh], 07e55h ; 26 c7 47 1e 55 7e ; 0xc4012 vbe.c:362
+ mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc4018
+ mov dx, cx ; 89 ca ; 0xc401c vbe.c:369
+ add dx, strict byte 0001bh ; 83 c2 1b ; 0xc401e
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4021
+ call 03e6ah ; e8 43 fe ; 0xc4024
+ xor ah, ah ; 30 e4 ; 0xc4027 vbe.c:370
+ cmp ax, word [bp-010h] ; 3b 46 f0 ; 0xc4029
+ jnbe short 04045h ; 77 17 ; 0xc402c
+ mov dx, cx ; 89 ca ; 0xc402e vbe.c:372
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4030
+ call 03e58h ; e8 22 fe ; 0xc4033
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc4036 vbe.c:376
+ add bx, di ; 01 fb ; 0xc4039
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc403b vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc403e
+ add word [bp-00ch], strict byte 00002h ; 83 46 f4 02 ; 0xc4041 vbe.c:378
+ add cx, strict byte 00044h ; 83 c1 44 ; 0xc4045 vbe.c:380
+ mov dx, cx ; 89 ca ; 0xc4048 vbe.c:381
+ mov ax, 003b6h ; b8 b6 03 ; 0xc404a
+ call 03e58h ; e8 08 fe ; 0xc404d
+ cmp ax, strict word 0ffffh ; 3d ff ff ; 0xc4050 vbe.c:382
+ jne short 0401ch ; 75 c7 ; 0xc4053
+ add di, word [bp-00ch] ; 03 7e f4 ; 0xc4055 vbe.c:385
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc4058 vbe.c:62
+ mov word [es:di], ax ; 26 89 05 ; 0xc405b
+ push SS ; 16 ; 0xc405e vbe.c:386
+ pop ES ; 07 ; 0xc405f
+ mov word [es:si], strict word 0004fh ; 26 c7 04 4f 00 ; 0xc4060
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc4065 vbe.c:387
+ pop di ; 5f ; 0xc4068
+ pop si ; 5e ; 0xc4069
+ pop cx ; 59 ; 0xc406a
+ pop bp ; 5d ; 0xc406b
+ retn ; c3 ; 0xc406c
+ ; disGetNextSymbol 0xc406d LB 0x4c5 -> off=0x0 cb=000000000000009f uValue=00000000000c406d 'vbe_biosfn_return_mode_information'
+vbe_biosfn_return_mode_information: ; 0xc406d LB 0x9f
+ push bp ; 55 ; 0xc406d vbe.c:399
+ mov bp, sp ; 89 e5 ; 0xc406e
+ push si ; 56 ; 0xc4070
+ push di ; 57 ; 0xc4071
+ push ax ; 50 ; 0xc4072
+ push ax ; 50 ; 0xc4073
+ mov ax, dx ; 89 d0 ; 0xc4074
+ mov si, bx ; 89 de ; 0xc4076
+ mov bx, cx ; 89 cb ; 0xc4078
+ test dh, 040h ; f6 c6 40 ; 0xc407a vbe.c:410
+ je short 04084h ; 74 05 ; 0xc407d
+ mov dx, strict word 00001h ; ba 01 00 ; 0xc407f
+ jmp short 04086h ; eb 02 ; 0xc4082
+ xor dx, dx ; 31 d2 ; 0xc4084
+ and ah, 001h ; 80 e4 01 ; 0xc4086 vbe.c:411
+ call 03ed6h ; e8 4a fe ; 0xc4089 vbe.c:413
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc408c
+ test ax, ax ; 85 c0 ; 0xc408f vbe.c:415
+ je short 040fah ; 74 67 ; 0xc4091
+ mov cx, 00100h ; b9 00 01 ; 0xc4093 vbe.c:420
+ xor ax, ax ; 31 c0 ; 0xc4096
+ mov di, bx ; 89 df ; 0xc4098
+ mov es, si ; 8e c6 ; 0xc409a
+ jcxz 040a0h ; e3 02 ; 0xc409c
+ rep stosb ; f3 aa ; 0xc409e
+ xor cx, cx ; 31 c9 ; 0xc40a0 vbe.c:421
+ jmp short 040a9h ; eb 05 ; 0xc40a2
+ cmp cx, strict byte 00042h ; 83 f9 42 ; 0xc40a4
+ jnc short 040c2h ; 73 19 ; 0xc40a7
+ mov dx, word [bp-006h] ; 8b 56 fa ; 0xc40a9 vbe.c:424
+ inc dx ; 42 ; 0xc40ac
+ inc dx ; 42 ; 0xc40ad
+ add dx, cx ; 01 ca ; 0xc40ae
+ mov ax, 003b6h ; b8 b6 03 ; 0xc40b0
+ call 03e6ah ; e8 b4 fd ; 0xc40b3
+ mov di, bx ; 89 df ; 0xc40b6 vbe.c:425
+ add di, cx ; 01 cf ; 0xc40b8
+ mov es, si ; 8e c6 ; 0xc40ba vbe.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc40bc
+ inc cx ; 41 ; 0xc40bf vbe.c:426
+ jmp short 040a4h ; eb e2 ; 0xc40c0
+ lea di, [bx+002h] ; 8d 7f 02 ; 0xc40c2 vbe.c:427
+ mov es, si ; 8e c6 ; 0xc40c5 vbe.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc40c7
+ test AL, strict byte 001h ; a8 01 ; 0xc40ca vbe.c:428
+ je short 040deh ; 74 10 ; 0xc40cc
+ lea di, [bx+00ch] ; 8d 7f 0c ; 0xc40ce vbe.c:429
+ mov word [es:di], 00629h ; 26 c7 05 29 06 ; 0xc40d1 vbe.c:62
+ lea di, [bx+00eh] ; 8d 7f 0e ; 0xc40d6 vbe.c:431
+ mov word [es:di], 0c000h ; 26 c7 05 00 c0 ; 0xc40d9 vbe.c:62
+ mov ax, strict word 0000bh ; b8 0b 00 ; 0xc40de vbe.c:434
+ mov dx, 001ceh ; ba ce 01 ; 0xc40e1
+ call 00570h ; e8 89 c4 ; 0xc40e4
+ mov dx, 001cfh ; ba cf 01 ; 0xc40e7 vbe.c:435
+ call 00577h ; e8 8a c4 ; 0xc40ea
+ add bx, strict byte 0002ah ; 83 c3 2a ; 0xc40ed
+ mov es, si ; 8e c6 ; 0xc40f0 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc40f2
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc40f5 vbe.c:437
+ jmp short 040fdh ; eb 03 ; 0xc40f8 vbe.c:438
+ mov ax, 00100h ; b8 00 01 ; 0xc40fa vbe.c:442
+ push SS ; 16 ; 0xc40fd vbe.c:445
+ pop ES ; 07 ; 0xc40fe
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc40ff
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4102
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc4105 vbe.c:446
+ pop di ; 5f ; 0xc4108
+ pop si ; 5e ; 0xc4109
+ pop bp ; 5d ; 0xc410a
+ retn ; c3 ; 0xc410b
+ ; disGetNextSymbol 0xc410c LB 0x426 -> off=0x0 cb=00000000000000e7 uValue=00000000000c410c 'vbe_biosfn_set_mode'
+vbe_biosfn_set_mode: ; 0xc410c LB 0xe7
+ push bp ; 55 ; 0xc410c vbe.c:458
+ mov bp, sp ; 89 e5 ; 0xc410d
+ push si ; 56 ; 0xc410f
+ push di ; 57 ; 0xc4110
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc4111
+ mov si, ax ; 89 c6 ; 0xc4114
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc4116
+ test byte [bp-009h], 040h ; f6 46 f7 40 ; 0xc4119 vbe.c:466
+ je short 04124h ; 74 05 ; 0xc411d
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc411f
+ jmp short 04126h ; eb 02 ; 0xc4122
+ xor ax, ax ; 31 c0 ; 0xc4124
+ mov dx, ax ; 89 c2 ; 0xc4126
+ test ax, ax ; 85 c0 ; 0xc4128 vbe.c:467
+ je short 0412fh ; 74 03 ; 0xc412a
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc412c
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc412f
+ test byte [bp-009h], 080h ; f6 46 f7 80 ; 0xc4132 vbe.c:468
+ je short 0413dh ; 74 05 ; 0xc4136
+ mov ax, 00080h ; b8 80 00 ; 0xc4138
+ jmp short 0413fh ; eb 02 ; 0xc413b
+ xor ax, ax ; 31 c0 ; 0xc413d
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc413f
+ and byte [bp-009h], 001h ; 80 66 f7 01 ; 0xc4142 vbe.c:470
+ cmp word [bp-00ah], 00100h ; 81 7e f6 00 01 ; 0xc4146 vbe.c:473
+ jnc short 04160h ; 73 13 ; 0xc414b
+ xor ax, ax ; 31 c0 ; 0xc414d vbe.c:477
+ call 005ddh ; e8 8b c4 ; 0xc414f
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc4152 vbe.c:481
+ xor ah, ah ; 30 e4 ; 0xc4155
+ call 0143fh ; e8 e5 d2 ; 0xc4157
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc415a vbe.c:482
+ jmp near 041e7h ; e9 87 00 ; 0xc415d vbe.c:483
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc4160 vbe.c:486
+ call 03ed6h ; e8 70 fd ; 0xc4163
+ mov bx, ax ; 89 c3 ; 0xc4166
+ test ax, ax ; 85 c0 ; 0xc4168 vbe.c:488
+ je short 041e4h ; 74 78 ; 0xc416a
+ lea dx, [bx+014h] ; 8d 57 14 ; 0xc416c vbe.c:493
+ mov ax, 003b6h ; b8 b6 03 ; 0xc416f
+ call 03e58h ; e8 e3 fc ; 0xc4172
+ mov cx, ax ; 89 c1 ; 0xc4175
+ lea dx, [bx+016h] ; 8d 57 16 ; 0xc4177 vbe.c:494
+ mov ax, 003b6h ; b8 b6 03 ; 0xc417a
+ call 03e58h ; e8 d8 fc ; 0xc417d
+ mov di, ax ; 89 c7 ; 0xc4180
+ lea dx, [bx+01bh] ; 8d 57 1b ; 0xc4182 vbe.c:495
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4185
+ call 03e6ah ; e8 df fc ; 0xc4188
+ mov bl, al ; 88 c3 ; 0xc418b
+ mov dl, al ; 88 c2 ; 0xc418d
+ xor ax, ax ; 31 c0 ; 0xc418f vbe.c:503
+ call 005ddh ; e8 49 c4 ; 0xc4191
+ cmp bl, 004h ; 80 fb 04 ; 0xc4194 vbe.c:505
+ jne short 0419fh ; 75 06 ; 0xc4197
+ mov ax, strict word 0006ah ; b8 6a 00 ; 0xc4199 vbe.c:507
+ call 0143fh ; e8 a0 d2 ; 0xc419c
+ mov al, dl ; 88 d0 ; 0xc419f vbe.c:510
+ xor ah, ah ; 30 e4 ; 0xc41a1
+ call 03dcfh ; e8 29 fc ; 0xc41a3
+ mov ax, cx ; 89 c8 ; 0xc41a6 vbe.c:511
+ call 03d78h ; e8 cd fb ; 0xc41a8
+ mov ax, di ; 89 f8 ; 0xc41ab vbe.c:512
+ call 03d97h ; e8 e7 fb ; 0xc41ad
+ xor ax, ax ; 31 c0 ; 0xc41b0 vbe.c:513
+ call 00603h ; e8 4e c4 ; 0xc41b2
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc41b5 vbe.c:514
+ or dl, 001h ; 80 ca 01 ; 0xc41b8
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc41bb
+ xor ah, ah ; 30 e4 ; 0xc41be
+ or al, dl ; 08 d0 ; 0xc41c0
+ call 005ddh ; e8 18 c4 ; 0xc41c2
+ call 006d2h ; e8 0a c5 ; 0xc41c5 vbe.c:515
+ mov bx, 000bah ; bb ba 00 ; 0xc41c8 vbe.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc41cb
+ mov es, ax ; 8e c0 ; 0xc41ce
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc41d0
+ mov word [es:bx], ax ; 26 89 07 ; 0xc41d3
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc41d6 vbe.c:518
+ or AL, strict byte 060h ; 0c 60 ; 0xc41d9
+ mov bx, 00087h ; bb 87 00 ; 0xc41db vbe.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc41de
+ jmp near 0415ah ; e9 76 ff ; 0xc41e1
+ mov ax, 00100h ; b8 00 01 ; 0xc41e4 vbe.c:527
+ push SS ; 16 ; 0xc41e7 vbe.c:531
+ pop ES ; 07 ; 0xc41e8
+ mov word [es:si], ax ; 26 89 04 ; 0xc41e9
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc41ec vbe.c:532
+ pop di ; 5f ; 0xc41ef
+ pop si ; 5e ; 0xc41f0
+ pop bp ; 5d ; 0xc41f1
+ retn ; c3 ; 0xc41f2
+ ; disGetNextSymbol 0xc41f3 LB 0x33f -> off=0x0 cb=0000000000000008 uValue=00000000000c41f3 'vbe_biosfn_read_video_state_size'
+vbe_biosfn_read_video_state_size: ; 0xc41f3 LB 0x8
+ push bp ; 55 ; 0xc41f3 vbe.c:534
+ mov bp, sp ; 89 e5 ; 0xc41f4
+ mov ax, strict word 00012h ; b8 12 00 ; 0xc41f6 vbe.c:537
+ pop bp ; 5d ; 0xc41f9
+ retn ; c3 ; 0xc41fa
+ ; disGetNextSymbol 0xc41fb LB 0x337 -> off=0x0 cb=000000000000004b uValue=00000000000c41fb 'vbe_biosfn_save_video_state'
+vbe_biosfn_save_video_state: ; 0xc41fb LB 0x4b
+ push bp ; 55 ; 0xc41fb vbe.c:539
+ mov bp, sp ; 89 e5 ; 0xc41fc
+ push bx ; 53 ; 0xc41fe
+ push cx ; 51 ; 0xc41ff
+ push si ; 56 ; 0xc4200
+ mov si, ax ; 89 c6 ; 0xc4201
+ mov bx, dx ; 89 d3 ; 0xc4203
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc4205 vbe.c:543
+ mov dx, 001ceh ; ba ce 01 ; 0xc4208
+ out DX, ax ; ef ; 0xc420b
+ mov dx, 001cfh ; ba cf 01 ; 0xc420c vbe.c:544
+ in ax, DX ; ed ; 0xc420f
+ mov es, si ; 8e c6 ; 0xc4210 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4212
+ inc bx ; 43 ; 0xc4215 vbe.c:546
+ inc bx ; 43 ; 0xc4216
+ test AL, strict byte 001h ; a8 01 ; 0xc4217 vbe.c:547
+ je short 0423eh ; 74 23 ; 0xc4219
+ mov cx, strict word 00001h ; b9 01 00 ; 0xc421b vbe.c:549
+ jmp short 04225h ; eb 05 ; 0xc421e
+ cmp cx, strict byte 00009h ; 83 f9 09 ; 0xc4220
+ jnbe short 0423eh ; 77 19 ; 0xc4223
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc4225 vbe.c:550
+ je short 0423bh ; 74 11 ; 0xc4228
+ mov ax, cx ; 89 c8 ; 0xc422a vbe.c:551
+ mov dx, 001ceh ; ba ce 01 ; 0xc422c
+ out DX, ax ; ef ; 0xc422f
+ mov dx, 001cfh ; ba cf 01 ; 0xc4230 vbe.c:552
+ in ax, DX ; ed ; 0xc4233
+ mov es, si ; 8e c6 ; 0xc4234 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4236
+ inc bx ; 43 ; 0xc4239 vbe.c:553
+ inc bx ; 43 ; 0xc423a
+ inc cx ; 41 ; 0xc423b vbe.c:555
+ jmp short 04220h ; eb e2 ; 0xc423c
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc423e vbe.c:556
+ pop si ; 5e ; 0xc4241
+ pop cx ; 59 ; 0xc4242
+ pop bx ; 5b ; 0xc4243
+ pop bp ; 5d ; 0xc4244
+ retn ; c3 ; 0xc4245
+ ; disGetNextSymbol 0xc4246 LB 0x2ec -> off=0x0 cb=000000000000008f uValue=00000000000c4246 'vbe_biosfn_restore_video_state'
+vbe_biosfn_restore_video_state: ; 0xc4246 LB 0x8f
+ push bp ; 55 ; 0xc4246 vbe.c:559
+ mov bp, sp ; 89 e5 ; 0xc4247
+ push bx ; 53 ; 0xc4249
+ push cx ; 51 ; 0xc424a
+ push si ; 56 ; 0xc424b
+ push ax ; 50 ; 0xc424c
+ mov cx, ax ; 89 c1 ; 0xc424d
+ mov bx, dx ; 89 d3 ; 0xc424f
+ mov es, ax ; 8e c0 ; 0xc4251 vbe.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc4253
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc4256
+ inc bx ; 43 ; 0xc4259 vbe.c:564
+ inc bx ; 43 ; 0xc425a
+ test byte [bp-008h], 001h ; f6 46 f8 01 ; 0xc425b vbe.c:566
+ jne short 04271h ; 75 10 ; 0xc425f
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc4261 vbe.c:567
+ mov dx, 001ceh ; ba ce 01 ; 0xc4264
+ out DX, ax ; ef ; 0xc4267
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc4268 vbe.c:568
+ mov dx, 001cfh ; ba cf 01 ; 0xc426b
+ out DX, ax ; ef ; 0xc426e
+ jmp short 042cdh ; eb 5c ; 0xc426f vbe.c:569
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc4271 vbe.c:570
+ mov dx, 001ceh ; ba ce 01 ; 0xc4274
+ out DX, ax ; ef ; 0xc4277
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc4278 vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc427b vbe.c:58
+ out DX, ax ; ef ; 0xc427e
+ inc bx ; 43 ; 0xc427f vbe.c:572
+ inc bx ; 43 ; 0xc4280
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc4281
+ mov dx, 001ceh ; ba ce 01 ; 0xc4284
+ out DX, ax ; ef ; 0xc4287
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc4288 vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc428b vbe.c:58
+ out DX, ax ; ef ; 0xc428e
+ inc bx ; 43 ; 0xc428f vbe.c:575
+ inc bx ; 43 ; 0xc4290
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc4291
+ mov dx, 001ceh ; ba ce 01 ; 0xc4294
+ out DX, ax ; ef ; 0xc4297
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc4298 vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc429b vbe.c:58
+ out DX, ax ; ef ; 0xc429e
+ inc bx ; 43 ; 0xc429f vbe.c:578
+ inc bx ; 43 ; 0xc42a0
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc42a1
+ mov dx, 001ceh ; ba ce 01 ; 0xc42a4
+ out DX, ax ; ef ; 0xc42a7
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc42a8 vbe.c:580
+ mov dx, 001cfh ; ba cf 01 ; 0xc42ab
+ out DX, ax ; ef ; 0xc42ae
+ mov si, strict word 00005h ; be 05 00 ; 0xc42af vbe.c:582
+ jmp short 042b9h ; eb 05 ; 0xc42b2
+ cmp si, strict byte 00009h ; 83 fe 09 ; 0xc42b4
+ jnbe short 042cdh ; 77 14 ; 0xc42b7
+ mov ax, si ; 89 f0 ; 0xc42b9 vbe.c:583
+ mov dx, 001ceh ; ba ce 01 ; 0xc42bb
+ out DX, ax ; ef ; 0xc42be
+ mov es, cx ; 8e c1 ; 0xc42bf vbe.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc42c1
+ mov dx, 001cfh ; ba cf 01 ; 0xc42c4 vbe.c:58
+ out DX, ax ; ef ; 0xc42c7
+ inc bx ; 43 ; 0xc42c8 vbe.c:585
+ inc bx ; 43 ; 0xc42c9
+ inc si ; 46 ; 0xc42ca vbe.c:586
+ jmp short 042b4h ; eb e7 ; 0xc42cb
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc42cd vbe.c:588
+ pop si ; 5e ; 0xc42d0
+ pop cx ; 59 ; 0xc42d1
+ pop bx ; 5b ; 0xc42d2
+ pop bp ; 5d ; 0xc42d3
+ retn ; c3 ; 0xc42d4
+ ; disGetNextSymbol 0xc42d5 LB 0x25d -> off=0x0 cb=000000000000008c uValue=00000000000c42d5 'vbe_biosfn_save_restore_state'
+vbe_biosfn_save_restore_state: ; 0xc42d5 LB 0x8c
+ push bp ; 55 ; 0xc42d5 vbe.c:604
+ mov bp, sp ; 89 e5 ; 0xc42d6
+ push si ; 56 ; 0xc42d8
+ push di ; 57 ; 0xc42d9
+ push ax ; 50 ; 0xc42da
+ mov si, ax ; 89 c6 ; 0xc42db
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc42dd
+ mov ax, bx ; 89 d8 ; 0xc42e0
+ mov bx, word [bp+004h] ; 8b 5e 04 ; 0xc42e2
+ mov di, strict word 0004fh ; bf 4f 00 ; 0xc42e5 vbe.c:609
+ xor ah, ah ; 30 e4 ; 0xc42e8 vbe.c:610
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc42ea
+ je short 04334h ; 74 45 ; 0xc42ed
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc42ef
+ je short 04318h ; 74 24 ; 0xc42f2
+ test ax, ax ; 85 c0 ; 0xc42f4
+ jne short 04350h ; 75 58 ; 0xc42f6
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc42f8 vbe.c:612
+ call 0324ch ; e8 4e ef ; 0xc42fb
+ mov cx, ax ; 89 c1 ; 0xc42fe
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc4300 vbe.c:616
+ je short 0430bh ; 74 05 ; 0xc4304
+ call 041f3h ; e8 ea fe ; 0xc4306 vbe.c:617
+ add ax, cx ; 01 c8 ; 0xc4309
+ add ax, strict word 0003fh ; 05 3f 00 ; 0xc430b vbe.c:618
+ shr ax, 006h ; c1 e8 06 ; 0xc430e
+ push SS ; 16 ; 0xc4311
+ pop ES ; 07 ; 0xc4312
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4313
+ jmp short 04353h ; eb 3b ; 0xc4316 vbe.c:619
+ push SS ; 16 ; 0xc4318 vbe.c:621
+ pop ES ; 07 ; 0xc4319
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc431a
+ mov dx, cx ; 89 ca ; 0xc431d vbe.c:622
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc431f
+ call 03287h ; e8 62 ef ; 0xc4322
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc4325 vbe.c:626
+ je short 04353h ; 74 28 ; 0xc4329
+ mov dx, ax ; 89 c2 ; 0xc432b vbe.c:627
+ mov ax, cx ; 89 c8 ; 0xc432d
+ call 041fbh ; e8 c9 fe ; 0xc432f
+ jmp short 04353h ; eb 1f ; 0xc4332 vbe.c:628
+ push SS ; 16 ; 0xc4334 vbe.c:630
+ pop ES ; 07 ; 0xc4335
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc4336
+ mov dx, cx ; 89 ca ; 0xc4339 vbe.c:631
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc433b
+ call 0355fh ; e8 1e f2 ; 0xc433e
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc4341 vbe.c:635
+ je short 04353h ; 74 0c ; 0xc4345
+ mov dx, ax ; 89 c2 ; 0xc4347 vbe.c:636
+ mov ax, cx ; 89 c8 ; 0xc4349
+ call 04246h ; e8 f8 fe ; 0xc434b
+ jmp short 04353h ; eb 03 ; 0xc434e vbe.c:637
+ mov di, 00100h ; bf 00 01 ; 0xc4350 vbe.c:640
+ push SS ; 16 ; 0xc4353 vbe.c:643
+ pop ES ; 07 ; 0xc4354
+ mov word [es:si], di ; 26 89 3c ; 0xc4355
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc4358 vbe.c:644
+ pop di ; 5f ; 0xc435b
+ pop si ; 5e ; 0xc435c
+ pop bp ; 5d ; 0xc435d
+ retn 00002h ; c2 02 00 ; 0xc435e
+ ; disGetNextSymbol 0xc4361 LB 0x1d1 -> off=0x0 cb=00000000000000df uValue=00000000000c4361 'vbe_biosfn_get_set_scanline_length'
+vbe_biosfn_get_set_scanline_length: ; 0xc4361 LB 0xdf
+ push bp ; 55 ; 0xc4361 vbe.c:665
+ mov bp, sp ; 89 e5 ; 0xc4362
+ push si ; 56 ; 0xc4364
+ push di ; 57 ; 0xc4365
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc4366
+ push ax ; 50 ; 0xc4369
+ mov di, dx ; 89 d7 ; 0xc436a
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc436c
+ mov si, cx ; 89 ce ; 0xc436f
+ call 03deeh ; e8 7a fa ; 0xc4371 vbe.c:674
+ cmp AL, strict byte 00fh ; 3c 0f ; 0xc4374 vbe.c:675
+ jne short 0437dh ; 75 05 ; 0xc4376
+ mov bx, strict word 00010h ; bb 10 00 ; 0xc4378
+ jmp short 04381h ; eb 04 ; 0xc437b
+ xor ah, ah ; 30 e4 ; 0xc437d
+ mov bx, ax ; 89 c3 ; 0xc437f
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc4381
+ call 03e26h ; e8 9f fa ; 0xc4384 vbe.c:676
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc4387
+ mov word [bp-00ch], strict word 0004fh ; c7 46 f4 4f 00 ; 0xc438a vbe.c:677
+ push SS ; 16 ; 0xc438f vbe.c:678
+ pop ES ; 07 ; 0xc4390
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc4391
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc4394
+ mov cl, byte [es:di] ; 26 8a 0d ; 0xc4397 vbe.c:679
+ cmp cl, 002h ; 80 f9 02 ; 0xc439a vbe.c:683
+ je short 043abh ; 74 0c ; 0xc439d
+ cmp cl, 001h ; 80 f9 01 ; 0xc439f
+ je short 043d1h ; 74 2d ; 0xc43a2
+ test cl, cl ; 84 c9 ; 0xc43a4
+ je short 043cch ; 74 24 ; 0xc43a6
+ jmp near 04429h ; e9 7e 00 ; 0xc43a8
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc43ab vbe.c:685
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc43ae
+ jne short 043b7h ; 75 05 ; 0xc43b0
+ sal bx, 003h ; c1 e3 03 ; 0xc43b2 vbe.c:686
+ jmp short 043cch ; eb 15 ; 0xc43b5 vbe.c:687
+ xor ah, ah ; 30 e4 ; 0xc43b7 vbe.c:688
+ cwd ; 99 ; 0xc43b9
+ sal dx, 003h ; c1 e2 03 ; 0xc43ba
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc43bd
+ sar ax, 003h ; c1 f8 03 ; 0xc43bf
+ mov cx, ax ; 89 c1 ; 0xc43c2
+ mov ax, bx ; 89 d8 ; 0xc43c4
+ xor dx, dx ; 31 d2 ; 0xc43c6
+ div cx ; f7 f1 ; 0xc43c8
+ mov bx, ax ; 89 c3 ; 0xc43ca
+ mov ax, bx ; 89 d8 ; 0xc43cc vbe.c:691
+ call 03e07h ; e8 36 fa ; 0xc43ce
+ call 03e26h ; e8 52 fa ; 0xc43d1 vbe.c:694
+ mov cx, ax ; 89 c1 ; 0xc43d4
+ push SS ; 16 ; 0xc43d6 vbe.c:695
+ pop ES ; 07 ; 0xc43d7
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc43d8
+ mov word [es:bx], ax ; 26 89 07 ; 0xc43db
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc43de vbe.c:696
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc43e1
+ jne short 043ech ; 75 07 ; 0xc43e3
+ mov bx, cx ; 89 cb ; 0xc43e5 vbe.c:697
+ shr bx, 003h ; c1 eb 03 ; 0xc43e7
+ jmp short 043ffh ; eb 13 ; 0xc43ea vbe.c:698
+ xor ah, ah ; 30 e4 ; 0xc43ec vbe.c:699
+ cwd ; 99 ; 0xc43ee
+ sal dx, 003h ; c1 e2 03 ; 0xc43ef
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc43f2
+ sar ax, 003h ; c1 f8 03 ; 0xc43f4
+ mov bx, ax ; 89 c3 ; 0xc43f7
+ mov ax, cx ; 89 c8 ; 0xc43f9
+ mul bx ; f7 e3 ; 0xc43fb
+ mov bx, ax ; 89 c3 ; 0xc43fd
+ add bx, strict byte 00003h ; 83 c3 03 ; 0xc43ff vbe.c:700
+ and bl, 0fch ; 80 e3 fc ; 0xc4402
+ push SS ; 16 ; 0xc4405 vbe.c:701
+ pop ES ; 07 ; 0xc4406
+ mov word [es:di], bx ; 26 89 1d ; 0xc4407
+ call 03e3fh ; e8 32 fa ; 0xc440a vbe.c:702
+ push SS ; 16 ; 0xc440d
+ pop ES ; 07 ; 0xc440e
+ mov word [es:si], ax ; 26 89 04 ; 0xc440f
+ call 03db6h ; e8 a1 f9 ; 0xc4412 vbe.c:703
+ push SS ; 16 ; 0xc4415
+ pop ES ; 07 ; 0xc4416
+ cmp ax, word [es:si] ; 26 3b 04 ; 0xc4417
+ jbe short 0442eh ; 76 12 ; 0xc441a
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc441c vbe.c:704
+ call 03e07h ; e8 e5 f9 ; 0xc441f
+ mov word [bp-00ch], 00200h ; c7 46 f4 00 02 ; 0xc4422 vbe.c:705
+ jmp short 0442eh ; eb 05 ; 0xc4427 vbe.c:707
+ mov word [bp-00ch], 00100h ; c7 46 f4 00 01 ; 0xc4429 vbe.c:710
+ push SS ; 16 ; 0xc442e vbe.c:713
+ pop ES ; 07 ; 0xc442f
+ mov ax, word [bp-00ch] ; 8b 46 f4 ; 0xc4430
+ mov bx, word [bp-00eh] ; 8b 5e f2 ; 0xc4433
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4436
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc4439 vbe.c:714
+ pop di ; 5f ; 0xc443c
+ pop si ; 5e ; 0xc443d
+ pop bp ; 5d ; 0xc443e
+ retn ; c3 ; 0xc443f
+ ; disGetNextSymbol 0xc4440 LB 0xf2 -> off=0x0 cb=00000000000000f2 uValue=00000000000c4440 'private_biosfn_custom_mode'
+private_biosfn_custom_mode: ; 0xc4440 LB 0xf2
+ push bp ; 55 ; 0xc4440 vbe.c:740
+ mov bp, sp ; 89 e5 ; 0xc4441
+ push si ; 56 ; 0xc4443
+ push di ; 57 ; 0xc4444
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc4445
+ mov di, ax ; 89 c7 ; 0xc4448
+ mov si, dx ; 89 d6 ; 0xc444a
+ mov dx, cx ; 89 ca ; 0xc444c
+ mov word [bp-00ah], strict word 0004fh ; c7 46 f6 4f 00 ; 0xc444e vbe.c:753
+ push SS ; 16 ; 0xc4453 vbe.c:754
+ pop ES ; 07 ; 0xc4454
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc4455
+ test al, al ; 84 c0 ; 0xc4458 vbe.c:755
+ jne short 0447eh ; 75 22 ; 0xc445a
+ push SS ; 16 ; 0xc445c vbe.c:757
+ pop ES ; 07 ; 0xc445d
+ mov cx, word [es:bx] ; 26 8b 0f ; 0xc445e
+ mov bx, dx ; 89 d3 ; 0xc4461 vbe.c:758
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc4463
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc4466 vbe.c:759
+ shr ax, 008h ; c1 e8 08 ; 0xc4469
+ and ax, strict word 0007fh ; 25 7f 00 ; 0xc446c
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc446f
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc4472 vbe.c:764
+ je short 04486h ; 74 10 ; 0xc4474
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc4476
+ je short 04486h ; 74 0c ; 0xc4478
+ cmp AL, strict byte 020h ; 3c 20 ; 0xc447a
+ je short 04486h ; 74 08 ; 0xc447c
+ mov word [bp-00ah], 00100h ; c7 46 f6 00 01 ; 0xc447e vbe.c:765
+ jmp near 04523h ; e9 9d 00 ; 0xc4483 vbe.c:766
+ push SS ; 16 ; 0xc4486 vbe.c:770
+ pop ES ; 07 ; 0xc4487
+ test byte [es:si+001h], 080h ; 26 f6 44 01 80 ; 0xc4488
+ je short 04494h ; 74 05 ; 0xc448d
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc448f
+ jmp short 04496h ; eb 02 ; 0xc4492
+ xor ax, ax ; 31 c0 ; 0xc4494
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc4496
+ cmp cx, 00280h ; 81 f9 80 02 ; 0xc4499 vbe.c:773
+ jnc short 044a4h ; 73 05 ; 0xc449d
+ mov cx, 00280h ; b9 80 02 ; 0xc449f vbe.c:774
+ jmp short 044adh ; eb 09 ; 0xc44a2 vbe.c:775
+ cmp cx, 00a00h ; 81 f9 00 0a ; 0xc44a4
+ jbe short 044adh ; 76 03 ; 0xc44a8
+ mov cx, 00a00h ; b9 00 0a ; 0xc44aa vbe.c:776
+ cmp bx, 001e0h ; 81 fb e0 01 ; 0xc44ad vbe.c:777
+ jnc short 044b8h ; 73 05 ; 0xc44b1
+ mov bx, 001e0h ; bb e0 01 ; 0xc44b3 vbe.c:778
+ jmp short 044c1h ; eb 09 ; 0xc44b6 vbe.c:779
+ cmp bx, 00780h ; 81 fb 80 07 ; 0xc44b8
+ jbe short 044c1h ; 76 03 ; 0xc44bc
+ mov bx, 00780h ; bb 80 07 ; 0xc44be vbe.c:780
+ mov dx, strict word 0ffffh ; ba ff ff ; 0xc44c1 vbe.c:786
+ mov ax, 003b6h ; b8 b6 03 ; 0xc44c4
+ call 03e58h ; e8 8e f9 ; 0xc44c7
+ mov si, ax ; 89 c6 ; 0xc44ca
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc44cc vbe.c:789
+ xor ah, ah ; 30 e4 ; 0xc44cf
+ cwd ; 99 ; 0xc44d1
+ sal dx, 003h ; c1 e2 03 ; 0xc44d2
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc44d5
+ sar ax, 003h ; c1 f8 03 ; 0xc44d7
+ mov dx, ax ; 89 c2 ; 0xc44da
+ mov ax, cx ; 89 c8 ; 0xc44dc
+ mul dx ; f7 e2 ; 0xc44de
+ add ax, strict word 00003h ; 05 03 00 ; 0xc44e0 vbe.c:790
+ and AL, strict byte 0fch ; 24 fc ; 0xc44e3
+ mov dx, bx ; 89 da ; 0xc44e5 vbe.c:792
+ mul dx ; f7 e2 ; 0xc44e7
+ cmp dx, si ; 39 f2 ; 0xc44e9 vbe.c:794
+ jnbe short 044f3h ; 77 06 ; 0xc44eb
+ jne short 044fah ; 75 0b ; 0xc44ed
+ test ax, ax ; 85 c0 ; 0xc44ef
+ jbe short 044fah ; 76 07 ; 0xc44f1
+ mov word [bp-00ah], 00200h ; c7 46 f6 00 02 ; 0xc44f3 vbe.c:796
+ jmp short 04523h ; eb 29 ; 0xc44f8 vbe.c:797
+ xor ax, ax ; 31 c0 ; 0xc44fa vbe.c:801
+ call 005ddh ; e8 de c0 ; 0xc44fc
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc44ff vbe.c:802
+ xor ah, ah ; 30 e4 ; 0xc4502
+ call 03dcfh ; e8 c8 f8 ; 0xc4504
+ mov ax, cx ; 89 c8 ; 0xc4507 vbe.c:803
+ call 03d78h ; e8 6c f8 ; 0xc4509
+ mov ax, bx ; 89 d8 ; 0xc450c vbe.c:804
+ call 03d97h ; e8 86 f8 ; 0xc450e
+ xor ax, ax ; 31 c0 ; 0xc4511 vbe.c:805
+ call 00603h ; e8 ed c0 ; 0xc4513
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc4516 vbe.c:806
+ or AL, strict byte 001h ; 0c 01 ; 0xc4519
+ xor ah, ah ; 30 e4 ; 0xc451b
+ call 005ddh ; e8 bd c0 ; 0xc451d
+ call 006d2h ; e8 af c1 ; 0xc4520 vbe.c:807
+ push SS ; 16 ; 0xc4523 vbe.c:815
+ pop ES ; 07 ; 0xc4524
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc4525
+ mov word [es:di], ax ; 26 89 05 ; 0xc4528
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc452b vbe.c:816
+ pop di ; 5f ; 0xc452e
+ pop si ; 5e ; 0xc452f
+ pop bp ; 5d ; 0xc4530
+ retn ; c3 ; 0xc4531
+
+ ; Padding 0x10e bytes at 0xc4532
+ times 270 db 0
+
+section VBE32 progbits vstart=0x4640 align=1 ; size=0x115 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc4640 LB 0x115 -> off=0x0 cb=0000000000000114 uValue=00000000000c0000 'vesa_pm_start'
+vesa_pm_start: ; 0xc4640 LB 0x114
+ sbb byte [bx+si], al ; 18 00 ; 0xc4640
+ dec di ; 4f ; 0xc4642
+ add byte [bx+si], dl ; 00 10 ; 0xc4643
+ add word [bx+si], cx ; 01 08 ; 0xc4645
+ add dh, cl ; 00 ce ; 0xc4647
+ add di, cx ; 01 cf ; 0xc4649
+ add di, cx ; 01 cf ; 0xc464b
+ add ax, dx ; 01 d0 ; 0xc464d
+ add word [bp-048fdh], si ; 01 b6 03 b7 ; 0xc464f
+ db 003h, 0ffh
+ ; add di, di ; 03 ff ; 0xc4653
+ db 0ffh
+ db 0ffh
+ jmp word [bp-07dh] ; ff 66 83 ; 0xc4657
+ sti ; fb ; 0xc465a
+ add byte [si+005h], dh ; 00 74 05 ; 0xc465b
+ mov eax, strict dword 066c30100h ; 66 b8 00 01 c3 66 ; 0xc465e vberom.asm:825
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc4664
+ push edx ; 66 52 ; 0xc4666 vberom.asm:829
+ push eax ; 66 50 ; 0xc4668 vberom.asm:830
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc466a vberom.asm:831
+ add ax, 06600h ; 05 00 66 ; 0xc4670
+ out DX, ax ; ef ; 0xc4673
+ pop eax ; 66 58 ; 0xc4674 vberom.asm:834
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc4676 vberom.asm:835
+ in eax, DX ; 66 ed ; 0xc467c vberom.asm:837
+ pop edx ; 66 5a ; 0xc467e vberom.asm:838
+ db 066h, 03bh, 0d0h
+ ; cmp edx, eax ; 66 3b d0 ; 0xc4680 vberom.asm:839
+ jne short 0468ah ; 75 05 ; 0xc4683 vberom.asm:840
+ mov eax, strict dword 066c3004fh ; 66 b8 4f 00 c3 66 ; 0xc4685 vberom.asm:841
+ mov ax, 0014fh ; b8 4f 01 ; 0xc468b
+ retn ; c3 ; 0xc468e vberom.asm:845
+ cmp bl, 080h ; 80 fb 80 ; 0xc468f vberom.asm:847
+ je short 0469eh ; 74 0a ; 0xc4692 vberom.asm:848
+ cmp bl, 000h ; 80 fb 00 ; 0xc4694 vberom.asm:849
+ je short 046aeh ; 74 15 ; 0xc4697 vberom.asm:850
+ mov eax, strict dword 052c30100h ; 66 b8 00 01 c3 52 ; 0xc4699 vberom.asm:851
+ mov edx, strict dword 0a8ec03dah ; 66 ba da 03 ec a8 ; 0xc469f vberom.asm:855
+ or byte [di-005h], dh ; 08 75 fb ; 0xc46a5
+ in AL, DX ; ec ; 0xc46a8 vberom.asm:861
+ test AL, strict byte 008h ; a8 08 ; 0xc46a9 vberom.asm:862
+ je short 046a8h ; 74 fb ; 0xc46ab vberom.asm:863
+ pop dx ; 5a ; 0xc46ad vberom.asm:864
+ push ax ; 50 ; 0xc46ae vberom.asm:868
+ push cx ; 51 ; 0xc46af vberom.asm:869
+ push dx ; 52 ; 0xc46b0 vberom.asm:870
+ push si ; 56 ; 0xc46b1 vberom.asm:871
+ push di ; 57 ; 0xc46b2 vberom.asm:872
+ sal dx, 010h ; c1 e2 10 ; 0xc46b3 vberom.asm:873
+ and cx, strict word 0ffffh ; 81 e1 ff ff ; 0xc46b6 vberom.asm:874
+ add byte [bx+si], al ; 00 00 ; 0xc46ba
+ db 00bh, 0cah
+ ; or cx, dx ; 0b ca ; 0xc46bc vberom.asm:875
+ sal cx, 002h ; c1 e1 02 ; 0xc46be vberom.asm:876
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1 ; 0xc46c1 vberom.asm:877
+ push ax ; 50 ; 0xc46c3 vberom.asm:878
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc46c4 vberom.asm:879
+ push ES ; 06 ; 0xc46ca
+ add byte [bp-011h], ah ; 00 66 ef ; 0xc46cb
+ mov edx, strict dword 0ed6601cfh ; 66 ba cf 01 66 ed ; 0xc46ce vberom.asm:882
+ db 00fh, 0b7h, 0c8h
+ ; movzx cx, ax ; 0f b7 c8 ; 0xc46d4 vberom.asm:884
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc46d7 vberom.asm:885
+ add ax, word [bx+si] ; 03 00 ; 0xc46dd
+ out DX, eax ; 66 ef ; 0xc46df vberom.asm:887
+ mov edx, strict dword 0ed6601cfh ; 66 ba cf 01 66 ed ; 0xc46e1 vberom.asm:888
+ db 00fh, 0b7h, 0f0h
+ ; movzx si, ax ; 0f b7 f0 ; 0xc46e7 vberom.asm:890
+ pop ax ; 58 ; 0xc46ea vberom.asm:891
+ cmp si, strict byte 00004h ; 83 fe 04 ; 0xc46eb vberom.asm:893
+ je short 04707h ; 74 17 ; 0xc46ee vberom.asm:894
+ add si, strict byte 00007h ; 83 c6 07 ; 0xc46f0 vberom.asm:895
+ shr si, 003h ; c1 ee 03 ; 0xc46f3 vberom.asm:896
+ imul cx, si ; 0f af ce ; 0xc46f6 vberom.asm:897
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc46f9 vberom.asm:898
+ div cx ; f7 f1 ; 0xc46fb vberom.asm:899
+ db 08bh, 0f8h
+ ; mov di, ax ; 8b f8 ; 0xc46fd vberom.asm:900
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc46ff vberom.asm:901
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc4701 vberom.asm:902
+ div si ; f7 f6 ; 0xc4703 vberom.asm:903
+ jmp short 04713h ; eb 0c ; 0xc4705 vberom.asm:904
+ shr cx, 1 ; d1 e9 ; 0xc4707 vberom.asm:907
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc4709 vberom.asm:908
+ div cx ; f7 f1 ; 0xc470b vberom.asm:909
+ db 08bh, 0f8h
+ ; mov di, ax ; 8b f8 ; 0xc470d vberom.asm:910
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc470f vberom.asm:911
+ sal ax, 1 ; d1 e0 ; 0xc4711 vberom.asm:912
+ push edx ; 66 52 ; 0xc4713 vberom.asm:915
+ push eax ; 66 50 ; 0xc4715 vberom.asm:916
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc4717 vberom.asm:917
+ or byte [bx+si], al ; 08 00 ; 0xc471d
+ out DX, eax ; 66 ef ; 0xc471f vberom.asm:919
+ pop eax ; 66 58 ; 0xc4721 vberom.asm:920
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc4723 vberom.asm:921
+ pop edx ; 66 5a ; 0xc4729 vberom.asm:923
+ db 066h, 08bh, 0c7h
+ ; mov eax, edi ; 66 8b c7 ; 0xc472b vberom.asm:925
+ push edx ; 66 52 ; 0xc472e vberom.asm:926
+ push eax ; 66 50 ; 0xc4730 vberom.asm:927
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc4732 vberom.asm:928
+ or word [bx+si], ax ; 09 00 ; 0xc4738
+ out DX, eax ; 66 ef ; 0xc473a vberom.asm:930
+ pop eax ; 66 58 ; 0xc473c vberom.asm:931
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc473e vberom.asm:932
+ pop edx ; 66 5a ; 0xc4744 vberom.asm:934
+ pop di ; 5f ; 0xc4746 vberom.asm:936
+ pop si ; 5e ; 0xc4747 vberom.asm:937
+ pop dx ; 5a ; 0xc4748 vberom.asm:938
+ pop cx ; 59 ; 0xc4749 vberom.asm:939
+ pop ax ; 58 ; 0xc474a vberom.asm:940
+ mov eax, strict dword 066c3004fh ; 66 b8 4f 00 c3 66 ; 0xc474b vberom.asm:941
+ mov ax, 0014fh ; b8 4f 01 ; 0xc4751
+ ; disGetNextSymbol 0xc4754 LB 0x1 -> off=0x0 cb=0000000000000001 uValue=0000000000000114 'vesa_pm_end'
+vesa_pm_end: ; 0xc4754 LB 0x1
+ retn ; c3 ; 0xc4754 vberom.asm:946
+
+ ; Padding 0x2b bytes at 0xc4755
+ times 43 db 0
+
+section _DATA progbits vstart=0x4780 align=1 ; size=0x374c class=DATA group=DGROUP
+ ; disGetNextSymbol 0xc4780 LB 0x374c -> off=0x0 cb=000000000000002e uValue=00000000000c0000 '_msg_vga_init'
+_msg_vga_init: ; 0xc4780 LB 0x2e
+ db 'Oracle VM VirtualBox Version 7.0.6 VGA BIOS', 00dh, 00ah, 000h
+ ; disGetNextSymbol 0xc47ae LB 0x371e -> off=0x0 cb=0000000000000080 uValue=00000000000c002e 'vga_modes'
+vga_modes: ; 0xc47ae LB 0x80
+ db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+ db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+ db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
+ db 006h, 001h, 002h, 001h, 000h, 0b8h, 0ffh, 001h, 007h, 000h, 001h, 004h, 000h, 0b0h, 0ffh, 000h
+ db 00dh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h, 00eh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h
+ db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ ; disGetNextSymbol 0xc482e LB 0x369e -> off=0x0 cb=0000000000000010 uValue=00000000000c00ae 'line_to_vpti'
+line_to_vpti: ; 0xc482e LB 0x10
+ db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
+ ; disGetNextSymbol 0xc483e LB 0x368e -> off=0x0 cb=0000000000000004 uValue=00000000000c00be 'dac_regs'
+dac_regs: ; 0xc483e LB 0x4
+ dd 0ff3f3f3fh
+ ; disGetNextSymbol 0xc4842 LB 0x368a -> off=0x0 cb=0000000000000780 uValue=00000000000c00c2 'video_param_table'
+video_param_table: ; 0xc4842 LB 0x780
+ db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 008h, 000h, 010h, 001h, 003h, 000h, 002h, 063h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 008h, 000h, 010h, 001h, 003h, 000h, 002h, 063h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 008h, 000h, 040h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+ db 028h, 018h, 008h, 000h, 040h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+ db 050h, 018h, 008h, 000h, 040h, 001h, 001h, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+ db 0b9h, 0c2h, 0ffh, 000h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h
+ db 017h, 017h, 017h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00dh, 00fh, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 000h, 003h, 000h, 003h, 0a6h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00dh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 000h, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 028h, 018h, 008h, 000h, 020h, 009h, 00fh, 000h, 006h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 018h, 008h, 000h, 040h, 001h, 00fh, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+ db 0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+ db 0bah, 0e3h, 0ffh, 000h, 008h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 008h, 000h, 000h, 000h
+ db 018h, 000h, 000h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+ db 0bah, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 028h, 018h, 00eh, 000h, 008h, 009h, 003h, 000h, 002h, 0a3h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 014h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 00eh, 000h, 008h, 009h, 003h, 000h, 002h, 0a3h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 014h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 001h, 003h, 000h, 002h, 0a3h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 001h, 003h, 000h, 002h, 0a3h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 010h, 000h, 008h, 008h, 003h, 000h, 002h, 067h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+ db 050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 067h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+ db 050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 066h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 00fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 00fh, 0ffh
+ db 050h, 01dh, 010h, 000h, 0a0h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+ db 004h, 0c3h, 0ffh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h
+ db 03fh, 000h, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 01dh, 010h, 000h, 0a0h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+ db 004h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 028h, 018h, 008h, 000h, 020h, 001h, 00fh, 000h, 00eh, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 041h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 040h, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 008h, 009h, 00ah, 00bh, 00ch
+ db 00dh, 00eh, 00fh, 041h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 040h, 005h, 00fh, 0ffh
+ db 064h, 024h, 010h, 000h, 000h, 001h, 00fh, 000h, 006h, 0e3h, 07fh, 063h, 063h, 083h, 06bh, 01bh
+ db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
+ db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ ; disGetNextSymbol 0xc4fc2 LB 0x2f0a -> off=0x0 cb=00000000000000c0 uValue=00000000000c0842 'palette0'
+palette0: ; 0xc4fc2 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5082 LB 0x2e4a -> off=0x0 cb=00000000000000c0 uValue=00000000000c0902 'palette1'
+palette1: ; 0xc5082 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+ db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+ db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+ db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+ db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5142 LB 0x2d8a -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c2 'palette2'
+palette2: ; 0xc5142 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
+ db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
+ db 000h, 015h, 000h, 000h, 015h, 02ah, 000h, 03fh, 000h, 000h, 03fh, 02ah, 02ah, 015h, 000h, 02ah
+ db 015h, 02ah, 02ah, 03fh, 000h, 02ah, 03fh, 02ah, 000h, 015h, 015h, 000h, 015h, 03fh, 000h, 03fh
+ db 015h, 000h, 03fh, 03fh, 02ah, 015h, 015h, 02ah, 015h, 03fh, 02ah, 03fh, 015h, 02ah, 03fh, 03fh
+ db 015h, 000h, 000h, 015h, 000h, 02ah, 015h, 02ah, 000h, 015h, 02ah, 02ah, 03fh, 000h, 000h, 03fh
+ db 000h, 02ah, 03fh, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 000h, 015h, 015h, 000h, 03fh, 015h, 02ah
+ db 015h, 015h, 02ah, 03fh, 03fh, 000h, 015h, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 03fh, 02ah, 03fh
+ db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
+ db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5202 LB 0x2cca -> off=0x0 cb=0000000000000300 uValue=00000000000c0a82 'palette3'
+palette3: ; 0xc5202 LB 0x300
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 005h, 005h, 005h, 008h, 008h, 008h, 00bh, 00bh, 00bh, 00eh, 00eh, 00eh, 011h
+ db 011h, 011h, 014h, 014h, 014h, 018h, 018h, 018h, 01ch, 01ch, 01ch, 020h, 020h, 020h, 024h, 024h
+ db 024h, 028h, 028h, 028h, 02dh, 02dh, 02dh, 032h, 032h, 032h, 038h, 038h, 038h, 03fh, 03fh, 03fh
+ db 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 03fh, 03fh
+ db 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh
+ db 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h
+ db 000h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h
+ db 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh
+ db 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h
+ db 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h
+ db 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh, 01fh, 01fh, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh
+ db 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh
+ db 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03fh, 03fh
+ db 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h
+ db 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh
+ db 02dh, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh
+ db 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h
+ db 01ch, 015h, 000h, 01ch, 01ch, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h
+ db 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h
+ db 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch, 000h, 000h, 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch
+ db 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch
+ db 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 01ch, 01ch
+ db 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h
+ db 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh
+ db 00eh, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh
+ db 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h
+ db 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h
+ db 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah
+ db 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch, 014h, 014h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch
+ db 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch
+ db 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 010h, 010h
+ db 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h
+ db 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h
+ db 000h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h
+ db 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h
+ db 010h, 00eh, 008h, 010h, 010h, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah
+ db 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh
+ db 010h, 008h, 00ch, 010h, 008h, 00ah, 010h, 008h, 008h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h
+ db 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah, 010h
+ db 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 010h, 010h
+ db 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh
+ db 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh
+ db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
+ db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5502 LB 0x29ca -> off=0x0 cb=0000000000000010 uValue=00000000000c0d82 'static_functionality'
+static_functionality: ; 0xc5502 LB 0x10
+ db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5512 LB 0x29ba -> off=0x0 cb=0000000000000024 uValue=00000000000c0d92 '_dcc_table'
+_dcc_table: ; 0xc5512 LB 0x24
+ db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5536 LB 0x2996 -> off=0x0 cb=000000000000001a uValue=00000000000c0db6 '_secondary_save_area'
+_secondary_save_area: ; 0xc5536 LB 0x1a
+ db 01ah, 000h, 012h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5550 LB 0x297c -> off=0x0 cb=000000000000001c uValue=00000000000c0dd0 '_video_save_pointer_table'
+_video_save_pointer_table: ; 0xc5550 LB 0x1c
+ db 042h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc556c LB 0x2960 -> off=0x0 cb=0000000000000800 uValue=00000000000c0dec 'vgafont8'
+vgafont8: ; 0xc556c LB 0x800
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
+ db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
+ db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
+ db 010h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 07ch, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h
+ db 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h
+ db 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 00fh, 007h, 00fh, 07dh, 0cch, 0cch, 0cch, 078h
+ db 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 03fh, 033h, 03fh, 030h, 030h, 070h, 0f0h, 0e0h
+ db 07fh, 063h, 07fh, 063h, 063h, 067h, 0e6h, 0c0h, 099h, 05ah, 03ch, 0e7h, 0e7h, 03ch, 05ah, 099h
+ db 080h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 080h, 000h, 002h, 00eh, 03eh, 0feh, 03eh, 00eh, 002h, 000h
+ db 018h, 03ch, 07eh, 018h, 018h, 07eh, 03ch, 018h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 000h
+ db 07fh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 000h, 03eh, 063h, 038h, 06ch, 06ch, 038h, 0cch, 078h
+ db 000h, 000h, 000h, 000h, 07eh, 07eh, 07eh, 000h, 018h, 03ch, 07eh, 018h, 07eh, 03ch, 018h, 0ffh
+ db 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h
+ db 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h
+ db 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h
+ db 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 000h, 000h, 000h, 0ffh, 0ffh, 07eh, 03ch, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 078h, 078h, 030h, 030h, 000h, 030h, 000h
+ db 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 0feh, 06ch, 06ch, 000h
+ db 030h, 07ch, 0c0h, 078h, 00ch, 0f8h, 030h, 000h, 000h, 0c6h, 0cch, 018h, 030h, 066h, 0c6h, 000h
+ db 038h, 06ch, 038h, 076h, 0dch, 0cch, 076h, 000h, 060h, 060h, 0c0h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 060h, 060h, 030h, 018h, 000h, 060h, 030h, 018h, 018h, 018h, 030h, 060h, 000h
+ db 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 060h, 000h, 000h, 000h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 000h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h
+ db 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 07ch, 000h, 030h, 070h, 030h, 030h, 030h, 030h, 0fch, 000h
+ db 078h, 0cch, 00ch, 038h, 060h, 0cch, 0fch, 000h, 078h, 0cch, 00ch, 038h, 00ch, 0cch, 078h, 000h
+ db 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 01eh, 000h, 0fch, 0c0h, 0f8h, 00ch, 00ch, 0cch, 078h, 000h
+ db 038h, 060h, 0c0h, 0f8h, 0cch, 0cch, 078h, 000h, 0fch, 0cch, 00ch, 018h, 030h, 030h, 030h, 000h
+ db 078h, 0cch, 0cch, 078h, 0cch, 0cch, 078h, 000h, 078h, 0cch, 0cch, 07ch, 00ch, 018h, 070h, 000h
+ db 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 060h
+ db 018h, 030h, 060h, 0c0h, 060h, 030h, 018h, 000h, 000h, 000h, 0fch, 000h, 000h, 0fch, 000h, 000h
+ db 060h, 030h, 018h, 00ch, 018h, 030h, 060h, 000h, 078h, 0cch, 00ch, 018h, 030h, 000h, 030h, 000h
+ db 07ch, 0c6h, 0deh, 0deh, 0deh, 0c0h, 078h, 000h, 030h, 078h, 0cch, 0cch, 0fch, 0cch, 0cch, 000h
+ db 0fch, 066h, 066h, 07ch, 066h, 066h, 0fch, 000h, 03ch, 066h, 0c0h, 0c0h, 0c0h, 066h, 03ch, 000h
+ db 0f8h, 06ch, 066h, 066h, 066h, 06ch, 0f8h, 000h, 0feh, 062h, 068h, 078h, 068h, 062h, 0feh, 000h
+ db 0feh, 062h, 068h, 078h, 068h, 060h, 0f0h, 000h, 03ch, 066h, 0c0h, 0c0h, 0ceh, 066h, 03eh, 000h
+ db 0cch, 0cch, 0cch, 0fch, 0cch, 0cch, 0cch, 000h, 078h, 030h, 030h, 030h, 030h, 030h, 078h, 000h
+ db 01eh, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 0e6h, 066h, 06ch, 078h, 06ch, 066h, 0e6h, 000h
+ db 0f0h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 000h
+ db 0c6h, 0e6h, 0f6h, 0deh, 0ceh, 0c6h, 0c6h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h
+ db 0fch, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 078h, 0cch, 0cch, 0cch, 0dch, 078h, 01ch, 000h
+ db 0fch, 066h, 066h, 07ch, 06ch, 066h, 0e6h, 000h, 078h, 0cch, 0e0h, 070h, 01ch, 0cch, 078h, 000h
+ db 0fch, 0b4h, 030h, 030h, 030h, 030h, 078h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 0fch, 000h
+ db 0cch, 0cch, 0cch, 0cch, 0cch, 078h, 030h, 000h, 0c6h, 0c6h, 0c6h, 0d6h, 0feh, 0eeh, 0c6h, 000h
+ db 0c6h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 030h, 078h, 000h
+ db 0feh, 0c6h, 08ch, 018h, 032h, 066h, 0feh, 000h, 078h, 060h, 060h, 060h, 060h, 060h, 078h, 000h
+ db 0c0h, 060h, 030h, 018h, 00ch, 006h, 002h, 000h, 078h, 018h, 018h, 018h, 018h, 018h, 078h, 000h
+ db 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 076h, 000h
+ db 0e0h, 060h, 060h, 07ch, 066h, 066h, 0dch, 000h, 000h, 000h, 078h, 0cch, 0c0h, 0cch, 078h, 000h
+ db 01ch, 00ch, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+ db 038h, 06ch, 060h, 0f0h, 060h, 060h, 0f0h, 000h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 0f8h
+ db 0e0h, 060h, 06ch, 076h, 066h, 066h, 0e6h, 000h, 030h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 00ch, 000h, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 0e0h, 060h, 066h, 06ch, 078h, 06ch, 0e6h, 000h
+ db 070h, 030h, 030h, 030h, 030h, 030h, 078h, 000h, 000h, 000h, 0cch, 0feh, 0feh, 0d6h, 0c6h, 000h
+ db 000h, 000h, 0f8h, 0cch, 0cch, 0cch, 0cch, 000h, 000h, 000h, 078h, 0cch, 0cch, 0cch, 078h, 000h
+ db 000h, 000h, 0dch, 066h, 066h, 07ch, 060h, 0f0h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 01eh
+ db 000h, 000h, 0dch, 076h, 066h, 060h, 0f0h, 000h, 000h, 000h, 07ch, 0c0h, 078h, 00ch, 0f8h, 000h
+ db 010h, 030h, 07ch, 030h, 030h, 034h, 018h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 000h, 000h, 000h, 0c6h, 0d6h, 0feh, 0feh, 06ch, 000h
+ db 000h, 000h, 0c6h, 06ch, 038h, 06ch, 0c6h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 07ch, 00ch, 0f8h
+ db 000h, 000h, 0fch, 098h, 030h, 064h, 0fch, 000h, 01ch, 030h, 030h, 0e0h, 030h, 030h, 01ch, 000h
+ db 018h, 018h, 018h, 000h, 018h, 018h, 018h, 000h, 0e0h, 030h, 030h, 01ch, 030h, 030h, 0e0h, 000h
+ db 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h
+ db 078h, 0cch, 0c0h, 0cch, 078h, 018h, 00ch, 078h, 000h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 01ch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 07eh, 0c3h, 03ch, 006h, 03eh, 066h, 03fh, 000h
+ db 0cch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 0e0h, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h
+ db 030h, 030h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 000h, 000h, 078h, 0c0h, 0c0h, 078h, 00ch, 038h
+ db 07eh, 0c3h, 03ch, 066h, 07eh, 060h, 03ch, 000h, 0cch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+ db 0e0h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 0cch, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 07ch, 0c6h, 038h, 018h, 018h, 018h, 03ch, 000h, 0e0h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 0c6h, 038h, 06ch, 0c6h, 0feh, 0c6h, 0c6h, 000h, 030h, 030h, 000h, 078h, 0cch, 0fch, 0cch, 000h
+ db 01ch, 000h, 0fch, 060h, 078h, 060h, 0fch, 000h, 000h, 000h, 07fh, 00ch, 07fh, 0cch, 07fh, 000h
+ db 03eh, 06ch, 0cch, 0feh, 0cch, 0cch, 0ceh, 000h, 078h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h
+ db 000h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 0e0h, 000h, 078h, 0cch, 0cch, 078h, 000h
+ db 078h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h, 000h, 0e0h, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 000h, 0cch, 000h, 0cch, 0cch, 07ch, 00ch, 0f8h, 0c3h, 018h, 03ch, 066h, 066h, 03ch, 018h, 000h
+ db 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 018h, 018h, 07eh, 0c0h, 0c0h, 07eh, 018h, 018h
+ db 038h, 06ch, 064h, 0f0h, 060h, 0e6h, 0fch, 000h, 0cch, 0cch, 078h, 0fch, 030h, 0fch, 030h, 030h
+ db 0f8h, 0cch, 0cch, 0fah, 0c6h, 0cfh, 0c6h, 0c7h, 00eh, 01bh, 018h, 03ch, 018h, 018h, 0d8h, 070h
+ db 01ch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 038h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 000h, 01ch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 01ch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 000h, 0f8h, 000h, 0f8h, 0cch, 0cch, 0cch, 000h, 0fch, 000h, 0cch, 0ech, 0fch, 0dch, 0cch, 000h
+ db 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h
+ db 030h, 000h, 030h, 060h, 0c0h, 0cch, 078h, 000h, 000h, 000h, 000h, 0fch, 0c0h, 0c0h, 000h, 000h
+ db 000h, 000h, 000h, 0fch, 00ch, 00ch, 000h, 000h, 0c3h, 0c6h, 0cch, 0deh, 033h, 066h, 0cch, 00fh
+ db 0c3h, 0c6h, 0cch, 0dbh, 037h, 06fh, 0cfh, 003h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 000h
+ db 000h, 033h, 066h, 0cch, 066h, 033h, 000h, 000h, 000h, 0cch, 066h, 033h, 066h, 0cch, 000h, 000h
+ db 022h, 088h, 022h, 088h, 022h, 088h, 022h, 088h, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+ db 0dbh, 077h, 0dbh, 0eeh, 0dbh, 077h, 0dbh, 0eeh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h
+ db 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h
+ db 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h
+ db 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h
+ db 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h
+ db 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h
+ db 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h
+ db 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+ db 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h
+ db 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h
+ db 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 0c8h, 0dch, 076h, 000h, 000h, 078h, 0cch, 0f8h, 0cch, 0f8h, 0c0h, 0c0h
+ db 000h, 0fch, 0cch, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+ db 0fch, 0cch, 060h, 030h, 060h, 0cch, 0fch, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 070h, 000h
+ db 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 0c0h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 000h
+ db 0fch, 030h, 078h, 0cch, 0cch, 078h, 030h, 0fch, 038h, 06ch, 0c6h, 0feh, 0c6h, 06ch, 038h, 000h
+ db 038h, 06ch, 0c6h, 0c6h, 06ch, 06ch, 0eeh, 000h, 01ch, 030h, 018h, 07ch, 0cch, 0cch, 078h, 000h
+ db 000h, 000h, 07eh, 0dbh, 0dbh, 07eh, 000h, 000h, 006h, 00ch, 07eh, 0dbh, 0dbh, 07eh, 060h, 0c0h
+ db 038h, 060h, 0c0h, 0f8h, 0c0h, 060h, 038h, 000h, 078h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 000h
+ db 000h, 0fch, 000h, 0fch, 000h, 0fch, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 0fch, 000h
+ db 060h, 030h, 018h, 030h, 060h, 000h, 0fch, 000h, 018h, 030h, 060h, 030h, 018h, 000h, 0fch, 000h
+ db 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 070h
+ db 030h, 030h, 000h, 0fch, 000h, 030h, 030h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h
+ db 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
+ db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5d6c LB 0x2160 -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ec 'vgafont14'
+vgafont14: ; 0xc5d6c LB 0xe00
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
+ db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
+ db 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch
+ db 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h
+ db 03ch, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 01eh, 00eh, 01ah, 032h
+ db 078h, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 066h, 066h, 03ch, 018h
+ db 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 070h, 0f0h
+ db 0e0h, 000h, 000h, 000h, 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 080h, 0c0h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h, 000h
+ db 002h, 006h, 00eh, 03eh, 0feh, 03eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch
+ db 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h
+ db 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh
+ db 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h
+ db 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 000h
+ db 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 060h
+ db 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h
+ db 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 03ch, 03ch, 03ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 066h, 066h, 066h
+ db 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch
+ db 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h
+ db 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 066h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h, 000h
+ db 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+ db 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+ db 000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h
+ db 006h, 00ch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 006h, 006h
+ db 03ch, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh
+ db 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 07ch, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0c6h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h, 000h, 000h, 018h
+ db 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+ db 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h
+ db 018h, 00ch, 006h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h
+ db 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h, 0fch, 066h
+ db 066h, 066h, 07ch, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h
+ db 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h
+ db 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 062h, 066h
+ db 0feh, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 066h, 03ah, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 01eh, 00ch
+ db 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 0e6h, 066h, 06ch, 06ch
+ db 078h, 06ch, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h
+ db 062h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h
+ db 000h, 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h
+ db 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h, 000h, 000h, 0fch, 066h
+ db 066h, 066h, 07ch, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 060h
+ db 038h, 00ch, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h
+ db 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 07ch, 06ch, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h
+ db 08ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 03ch, 030h, 030h, 030h
+ db 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch
+ db 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch
+ db 03ch, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0e0h, 060h
+ db 060h, 078h, 06ch, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+ db 0c6h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch
+ db 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 006h, 006h
+ db 000h, 00eh, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h, 000h, 000h, 0e0h, 060h, 060h, 066h
+ db 06ch, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0dch, 076h, 066h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+ db 0c6h, 070h, 01ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h
+ db 030h, 036h, 01ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch
+ db 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0feh, 0cch, 018h, 030h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 00eh, 018h, 018h, 018h
+ db 070h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h
+ db 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h, 000h
+ db 0cch, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h
+ db 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 078h
+ db 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 000h, 078h, 00ch, 07ch
+ db 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch
+ db 076h, 000h, 000h, 000h, 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 0cch, 0cch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h
+ db 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 000h, 038h
+ db 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h
+ db 03ch, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h
+ db 000h, 000h, 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h, 000h, 03eh, 06ch
+ db 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 07ch
+ db 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h, 07ch, 0c6h, 0c6h
+ db 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h, 000h, 0c6h
+ db 0c6h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h
+ db 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 018h, 03ch, 066h, 060h
+ db 060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h
+ db 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h
+ db 018h, 000h, 000h, 000h, 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0c6h, 000h
+ db 000h, 000h, 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch
+ db 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h
+ db 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h, 000h, 0cch
+ db 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h
+ db 066h, 066h, 066h, 000h, 000h, 000h, 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h
+ db 0c6h, 000h, 000h, 000h, 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h
+ db 030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h, 030h, 066h
+ db 0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h, 000h, 018h, 018h, 000h, 018h, 018h, 03ch, 03ch, 03ch
+ db 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h
+ db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 055h, 0aah
+ db 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 0ddh, 077h, 0ddh, 077h
+ db 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 036h, 036h
+ db 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0feh
+ db 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h
+ db 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h
+ db 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 0f0h, 0f0h, 0f0h, 0f0h, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+ db 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0fch, 0c6h, 0c6h, 0fch, 0c0h, 0c0h, 040h, 000h, 000h, 000h, 0feh, 0c6h
+ db 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 06ch
+ db 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h
+ db 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h, 000h
+ db 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch
+ db 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h, 000h, 01eh, 030h, 018h, 00ch
+ db 03eh, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh
+ db 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h
+ db 0c0h, 000h, 000h, 000h, 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 030h, 01ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 030h, 018h
+ db 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h, 060h
+ db 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 00ch
+ db 00ch, 0ech, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc6b6c LB 0x1360 -> off=0x0 cb=0000000000001000 uValue=00000000000c23ec 'vgafont16'
+vgafont16: ; 0xc6b6c LB 0x1000
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 01eh, 00eh, 01ah, 032h, 078h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 030h, 070h, 0f0h, 0e0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 080h, 0c0h, 0e0h, 0f0h, 0f8h, 0feh, 0f8h, 0f0h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 002h, 006h, 00eh, 01eh, 03eh, 0feh, 03eh, 01eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h
+ db 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 03ch, 03ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 066h, 066h, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 000h
+ db 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h, 006h, 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 060h, 0c6h, 086h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 030h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0d6h, 0d6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 006h, 006h, 03ch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 006h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 006h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 066h, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h, 066h, 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 0c6h, 066h, 03ah, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01eh, 00ch, 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0e6h, 066h, 066h, 06ch, 078h, 078h, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 06ch, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 060h, 038h, 00ch, 006h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0d6h, 0feh, 0eeh, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 06ch, 07ch, 038h, 038h, 07ch, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 086h, 00ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 03ch, 000h, 000h, 000h, 000h
+ db 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 078h, 06ch, 066h, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c0h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 006h, 006h, 000h, 00eh, 006h, 006h, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 066h, 06ch, 078h, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h, 0d6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 076h, 066h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h, 030h, 030h, 036h, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 0cch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00eh, 018h, 018h, 018h, 070h, 018h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h, 018h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h
+ db 000h, 000h, 0cch, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 00ch, 018h, 030h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0cch, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 0c6h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 060h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03eh, 06ch, 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h
+ db 000h, 0c6h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 018h, 03ch, 066h, 060h, 060h, 060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0cch, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 00ch, 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c0h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h
+ db 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 000h, 018h, 018h, 018h, 03ch, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h
+ db 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+ db 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 078h, 0cch, 0cch, 0cch, 0d8h, 0cch, 0c6h, 0c6h, 0c6h, 0cch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01eh, 030h, 018h, 00ch, 03eh, 066h, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh, 0dbh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h, 0c0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 060h, 030h, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 00fh, 00ch, 00ch, 00ch, 00ch, 00ch, 0ech, 06ch, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7b6c LB 0x360 -> off=0x0 cb=000000000000012d uValue=00000000000c33ec 'vgafont14alt'
+vgafont14alt: ; 0xc7b6c LB 0x12d
+ db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
+ db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
+ db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 04dh, 000h, 000h, 0c3h
+ db 0e7h, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh
+ db 099h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h
+ db 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h
+ db 0dbh, 0dbh, 0ffh, 066h, 066h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 03ch, 066h, 0c3h, 0c3h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h, 030h, 061h
+ db 0c3h, 0ffh, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h, 0ffh, 0dbh, 0dbh, 0dbh
+ db 0dbh, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h
+ db 000h, 000h, 091h, 000h, 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h
+ db 000h, 09bh, 000h, 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h
+ db 09dh, 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 000h, 000h, 000h, 09eh
+ db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
+ db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
+ db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7c99 LB 0x233 -> off=0x0 cb=0000000000000144 uValue=00000000000c3519 'vgafont16alt'
+vgafont16alt: ; 0xc7c99 LB 0x144
+ db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
+ db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
+ db 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh, 099h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch
+ db 000h, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch
+ db 018h, 000h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh
+ db 066h, 066h, 000h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h, 018h, 03ch
+ db 066h, 0c3h, 0c3h, 000h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h
+ db 030h, 060h, 0c1h, 0c3h, 0ffh, 000h, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h
+ db 0ffh, 0dbh, 0dbh, 0dbh, 0dbh, 0dbh, 000h, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h
+ db 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h
+ db 000h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h, 000h, 000h, 000h, 078h, 000h, 000h, 000h
+ db 000h, 000h, 0c3h, 066h, 03ch, 018h, 03ch, 066h, 0c3h, 000h, 000h, 000h, 000h, 091h, 000h, 000h
+ db 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h, 000h, 000h, 09bh, 000h
+ db 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 09dh
+ db 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 09eh, 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 066h, 0f3h, 000h, 000h, 000h
+ db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
+ db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
+ db 006h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7ddd LB 0xef -> off=0x0 cb=0000000000000008 uValue=00000000000c365d '_cga_msr'
+_cga_msr: ; 0xc7ddd LB 0x8
+ db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
+ ; disGetNextSymbol 0xc7de5 LB 0xe7 -> off=0x0 cb=0000000000000008 uValue=00000000000c3665 'line_to_vpti_200'
+line_to_vpti_200: ; 0xc7de5 LB 0x8
+ db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
+ ; disGetNextSymbol 0xc7ded LB 0xdf -> off=0x0 cb=0000000000000008 uValue=00000000000c366d 'line_to_vpti_350'
+line_to_vpti_350: ; 0xc7ded LB 0x8
+ db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
+ ; disGetNextSymbol 0xc7df5 LB 0xd7 -> off=0x0 cb=0000000000000008 uValue=00000000000c3675 'line_to_vpti_400'
+line_to_vpti_400: ; 0xc7df5 LB 0x8
+ db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
+ ; disGetNextSymbol 0xc7dfd LB 0xcf -> off=0x0 cb=0000000000000005 uValue=00000000000c367d 'row_tbl'
+row_tbl: ; 0xc7dfd LB 0x5
+ db 000h, 00eh, 019h, 02bh, 000h
+ ; disGetNextSymbol 0xc7e02 LB 0xca -> off=0x0 cb=0000000000000015 uValue=00000000000c3682 '_vbebios_copyright'
+_vbebios_copyright: ; 0xc7e02 LB 0x15
+ db 'VirtualBox VESA BIOS', 000h
+ ; disGetNextSymbol 0xc7e17 LB 0xb5 -> off=0x0 cb=000000000000001d uValue=00000000000c3697 '_vbebios_vendor_name'
+_vbebios_vendor_name: ; 0xc7e17 LB 0x1d
+ db 'Oracle and/or its affiliates', 000h
+ ; disGetNextSymbol 0xc7e34 LB 0x98 -> off=0x0 cb=0000000000000021 uValue=00000000000c36b4 '_vbebios_product_name'
+_vbebios_product_name: ; 0xc7e34 LB 0x21
+ db 'Oracle VM VirtualBox VBE Adapter', 000h
+ ; disGetNextSymbol 0xc7e55 LB 0x77 -> off=0x0 cb=0000000000000023 uValue=00000000000c36d5 '_vbebios_product_revision'
+_vbebios_product_revision: ; 0xc7e55 LB 0x23
+ db 'Oracle VM VirtualBox Version 7.0.6', 000h
+ ; disGetNextSymbol 0xc7e78 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f8 '_vbebios_info_string'
+_vbebios_info_string: ; 0xc7e78 LB 0x2b
+ db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
+ ; disGetNextSymbol 0xc7ea3 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3723 '_no_vbebios_info_string'
+_no_vbebios_info_string: ; 0xc7ea3 LB 0x29
+ db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
+
+section CONST progbits vstart=0x7ecc align=1 ; size=0x0 class=DATA group=DGROUP
+
+section CONST2 progbits vstart=0x7ecc align=1 ; size=0x0 class=DATA group=DGROUP
+
+ ; Padding 0x134 bytes at 0xc7ecc
+ db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
+ db 065h, 02fh, 073h, 062h, 075h, 072h, 063h, 068h, 069h, 06ch, 02fh, 076h, 062h, 05fh, 073h, 072h
+ db 063h, 02fh, 074h, 072h, 075h, 06eh, 06bh, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h
+ db 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh
+ db 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h
+ db 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 032h, 038h
+ db 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 027h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
new file mode 100644
index 00000000..d8235d2a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative286.md5sum
@@ -0,0 +1 @@
+c9649737f043379653183e6be7d12841 *VBoxVgaBios286.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
new file mode 100644
index 00000000..63369a0e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.asm
@@ -0,0 +1,8701 @@
+; $Id: VBoxVgaBiosAlternative386.asm $
+;; @file
+; Auto Generated source file. Do not edit.
+;
+
+;
+; Source file: vgarom.asm
+;
+; ============================================================================================
+;
+; Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; ============================================================================================
+;
+; This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+; You can NOT drive any physical vga card with it.
+;
+; ============================================================================================
+;
+
+;
+; Source file: vberom.asm
+;
+; ============================================================================================
+;
+; Copyright (C) 2002 Jeroen Janssen
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; ============================================================================================
+;
+; This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+; You can NOT drive any physical vga card with it.
+;
+; ============================================================================================
+;
+; This VBE Bios is based on information taken from :
+; - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;
+; ============================================================================================
+
+;
+; Source file: vgabios.c
+;
+; // ============================================================================================
+;
+; vgabios.c
+;
+; // ============================================================================================
+; //
+; // Copyright (C) 2001,2002 the LGPL VGABios developers Team
+; //
+; // This library is free software; you can redistribute it and/or
+; // modify it under the terms of the GNU Lesser General Public
+; // License as published by the Free Software Foundation; either
+; // version 2 of the License, or (at your option) any later version.
+; //
+; // This library is distributed in the hope that it will be useful,
+; // but WITHOUT ANY WARRANTY; without even the implied warranty of
+; // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; // Lesser General Public License for more details.
+; //
+; // You should have received a copy of the GNU Lesser General Public
+; // License along with this library; if not, write to the Free Software
+; // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+; //
+; // ============================================================================================
+; //
+; // This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+; // You can NOT drive any physical vga card with it.
+; //
+; // ============================================================================================
+; //
+; // This file contains code ripped from :
+; // - rombios.c of plex86
+; //
+; // This VGA Bios contains fonts from :
+; // - fntcol16.zip (c) by Joseph Gil avalable at :
+; // ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+; // These fonts are public domain
+; //
+; // This VGA Bios is based on information taken from :
+; // - Kevin Lawton's vga card emulation for bochs/plex86
+; // - Ralf Brown's interrupts list available at http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+; // - Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+; // - Michael Abrash's Graphics Programming Black Book
+; // - Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" edited by sybex
+; // - DOSEMU 1.0.1 source code for several tables values and formulas
+; //
+; // Thanks for patches, comments and ideas to :
+; // - techt@pikeonline.net
+; //
+; // ============================================================================================
+
+;
+; Source file: vbe.c
+;
+; // ============================================================================================
+; //
+; // Copyright (C) 2002 Jeroen Janssen
+; //
+; // This library is free software; you can redistribute it and/or
+; // modify it under the terms of the GNU Lesser General Public
+; // License as published by the Free Software Foundation; either
+; // version 2 of the License, or (at your option) any later version.
+; //
+; // This library is distributed in the hope that it will be useful,
+; // but WITHOUT ANY WARRANTY; without even the implied warranty of
+; // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; // Lesser General Public License for more details.
+; //
+; // You should have received a copy of the GNU Lesser General Public
+; // License along with this library; if not, write to the Free Software
+; // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+; //
+; // ============================================================================================
+; //
+; // This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+; // You can NOT drive any physical vga card with it.
+; //
+; // ============================================================================================
+; //
+; // This VBE Bios is based on information taken from :
+; // - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+; //
+; // ============================================================================================
+
+;
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+;
+
+
+
+
+
+section VGAROM progbits vstart=0x0 align=1 ; size=0x907 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc0000 LB 0x907 -> off=0x28 cb=0000000000000548 uValue=00000000000c0028 'vgabios_int10_handler'
+ db 055h, 0aah, 040h, 0ebh, 01dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 049h, 042h
+ db 04dh, 000h, 00eh, 01fh, 0fch, 0e9h, 03ch, 00ah
+vgabios_int10_handler: ; 0xc0028 LB 0x548
+ pushfw ; 9c ; 0xc0028 vgarom.asm:91
+ cmp ah, 00fh ; 80 fc 0f ; 0xc0029 vgarom.asm:104
+ jne short 00034h ; 75 06 ; 0xc002c vgarom.asm:105
+ call 0017dh ; e8 4c 01 ; 0xc002e vgarom.asm:106
+ jmp near 000edh ; e9 b9 00 ; 0xc0031 vgarom.asm:107
+ cmp ah, 01ah ; 80 fc 1a ; 0xc0034 vgarom.asm:109
+ jne short 0003fh ; 75 06 ; 0xc0037 vgarom.asm:110
+ call 00532h ; e8 f6 04 ; 0xc0039 vgarom.asm:111
+ jmp near 000edh ; e9 ae 00 ; 0xc003c vgarom.asm:112
+ cmp ah, 00bh ; 80 fc 0b ; 0xc003f vgarom.asm:114
+ jne short 0004ah ; 75 06 ; 0xc0042 vgarom.asm:115
+ call 000efh ; e8 a8 00 ; 0xc0044 vgarom.asm:116
+ jmp near 000edh ; e9 a3 00 ; 0xc0047 vgarom.asm:117
+ cmp ax, 01103h ; 3d 03 11 ; 0xc004a vgarom.asm:119
+ jne short 00055h ; 75 06 ; 0xc004d vgarom.asm:120
+ call 00429h ; e8 d7 03 ; 0xc004f vgarom.asm:121
+ jmp near 000edh ; e9 98 00 ; 0xc0052 vgarom.asm:122
+ cmp ah, 012h ; 80 fc 12 ; 0xc0055 vgarom.asm:124
+ jne short 00097h ; 75 3d ; 0xc0058 vgarom.asm:125
+ cmp bl, 010h ; 80 fb 10 ; 0xc005a vgarom.asm:126
+ jne short 00065h ; 75 06 ; 0xc005d vgarom.asm:127
+ call 00436h ; e8 d4 03 ; 0xc005f vgarom.asm:128
+ jmp near 000edh ; e9 88 00 ; 0xc0062 vgarom.asm:129
+ cmp bl, 030h ; 80 fb 30 ; 0xc0065 vgarom.asm:131
+ jne short 0006fh ; 75 05 ; 0xc0068 vgarom.asm:132
+ call 00459h ; e8 ec 03 ; 0xc006a vgarom.asm:133
+ jmp short 000edh ; eb 7e ; 0xc006d vgarom.asm:134
+ cmp bl, 031h ; 80 fb 31 ; 0xc006f vgarom.asm:136
+ jne short 00079h ; 75 05 ; 0xc0072 vgarom.asm:137
+ call 004ach ; e8 35 04 ; 0xc0074 vgarom.asm:138
+ jmp short 000edh ; eb 74 ; 0xc0077 vgarom.asm:139
+ cmp bl, 032h ; 80 fb 32 ; 0xc0079 vgarom.asm:141
+ jne short 00083h ; 75 05 ; 0xc007c vgarom.asm:142
+ call 004ceh ; e8 4d 04 ; 0xc007e vgarom.asm:143
+ jmp short 000edh ; eb 6a ; 0xc0081 vgarom.asm:144
+ cmp bl, 033h ; 80 fb 33 ; 0xc0083 vgarom.asm:146
+ jne short 0008dh ; 75 05 ; 0xc0086 vgarom.asm:147
+ call 004ech ; e8 61 04 ; 0xc0088 vgarom.asm:148
+ jmp short 000edh ; eb 60 ; 0xc008b vgarom.asm:149
+ cmp bl, 034h ; 80 fb 34 ; 0xc008d vgarom.asm:151
+ jne short 000e1h ; 75 4f ; 0xc0090 vgarom.asm:152
+ call 00510h ; e8 7b 04 ; 0xc0092 vgarom.asm:153
+ jmp short 000edh ; eb 56 ; 0xc0095 vgarom.asm:154
+ cmp ax, 0101bh ; 3d 1b 10 ; 0xc0097 vgarom.asm:156
+ je short 000e1h ; 74 45 ; 0xc009a vgarom.asm:157
+ cmp ah, 010h ; 80 fc 10 ; 0xc009c vgarom.asm:158
+ jne short 000a6h ; 75 05 ; 0xc009f vgarom.asm:162
+ call 001a4h ; e8 00 01 ; 0xc00a1 vgarom.asm:164
+ jmp short 000edh ; eb 47 ; 0xc00a4 vgarom.asm:165
+ cmp ah, 04fh ; 80 fc 4f ; 0xc00a6 vgarom.asm:168
+ jne short 000e1h ; 75 36 ; 0xc00a9 vgarom.asm:169
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc00ab vgarom.asm:170
+ jne short 000b4h ; 75 05 ; 0xc00ad vgarom.asm:171
+ call 007d2h ; e8 20 07 ; 0xc00af vgarom.asm:172
+ jmp short 000edh ; eb 39 ; 0xc00b2 vgarom.asm:173
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc00b4 vgarom.asm:175
+ jne short 000bdh ; 75 05 ; 0xc00b6 vgarom.asm:176
+ call 007f7h ; e8 3c 07 ; 0xc00b8 vgarom.asm:177
+ jmp short 000edh ; eb 30 ; 0xc00bb vgarom.asm:178
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc00bd vgarom.asm:180
+ jne short 000c6h ; 75 05 ; 0xc00bf vgarom.asm:181
+ call 00824h ; e8 60 07 ; 0xc00c1 vgarom.asm:182
+ jmp short 000edh ; eb 27 ; 0xc00c4 vgarom.asm:183
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc00c6 vgarom.asm:185
+ jne short 000cfh ; 75 05 ; 0xc00c8 vgarom.asm:186
+ call 00858h ; e8 8b 07 ; 0xc00ca vgarom.asm:187
+ jmp short 000edh ; eb 1e ; 0xc00cd vgarom.asm:188
+ cmp AL, strict byte 009h ; 3c 09 ; 0xc00cf vgarom.asm:190
+ jne short 000d8h ; 75 05 ; 0xc00d1 vgarom.asm:191
+ call 0088fh ; e8 b9 07 ; 0xc00d3 vgarom.asm:192
+ jmp short 000edh ; eb 15 ; 0xc00d6 vgarom.asm:193
+ cmp AL, strict byte 00ah ; 3c 0a ; 0xc00d8 vgarom.asm:195
+ jne short 000e1h ; 75 05 ; 0xc00da vgarom.asm:196
+ call 008f3h ; e8 14 08 ; 0xc00dc vgarom.asm:197
+ jmp short 000edh ; eb 0c ; 0xc00df vgarom.asm:198
+ push ES ; 06 ; 0xc00e1 vgarom.asm:202
+ push DS ; 1e ; 0xc00e2 vgarom.asm:203
+ pushaw ; 60 ; 0xc00e3 vgarom.asm:107
+ push CS ; 0e ; 0xc00e4 vgarom.asm:207
+ pop DS ; 1f ; 0xc00e5 vgarom.asm:208
+ cld ; fc ; 0xc00e6 vgarom.asm:209
+ call 036ach ; e8 c2 35 ; 0xc00e7 vgarom.asm:210
+ popaw ; 61 ; 0xc00ea vgarom.asm:124
+ pop DS ; 1f ; 0xc00eb vgarom.asm:213
+ pop ES ; 07 ; 0xc00ec vgarom.asm:214
+ popfw ; 9d ; 0xc00ed vgarom.asm:216
+ iret ; cf ; 0xc00ee vgarom.asm:217
+ cmp bh, 000h ; 80 ff 00 ; 0xc00ef vgarom.asm:222
+ je short 000fah ; 74 06 ; 0xc00f2 vgarom.asm:223
+ cmp bh, 001h ; 80 ff 01 ; 0xc00f4 vgarom.asm:224
+ je short 0014bh ; 74 52 ; 0xc00f7 vgarom.asm:225
+ retn ; c3 ; 0xc00f9 vgarom.asm:229
+ push ax ; 50 ; 0xc00fa vgarom.asm:231
+ push bx ; 53 ; 0xc00fb vgarom.asm:232
+ push cx ; 51 ; 0xc00fc vgarom.asm:233
+ push dx ; 52 ; 0xc00fd vgarom.asm:234
+ push DS ; 1e ; 0xc00fe vgarom.asm:235
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc00ff vgarom.asm:236
+ mov ds, dx ; 8e da ; 0xc0102 vgarom.asm:237
+ mov dx, 003dah ; ba da 03 ; 0xc0104 vgarom.asm:238
+ in AL, DX ; ec ; 0xc0107 vgarom.asm:239
+ cmp byte [word 00049h], 003h ; 80 3e 49 00 03 ; 0xc0108 vgarom.asm:240
+ jbe short 0013eh ; 76 2f ; 0xc010d vgarom.asm:241
+ mov dx, 003c0h ; ba c0 03 ; 0xc010f vgarom.asm:242
+ mov AL, strict byte 000h ; b0 00 ; 0xc0112 vgarom.asm:243
+ out DX, AL ; ee ; 0xc0114 vgarom.asm:244
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0115 vgarom.asm:245
+ and AL, strict byte 00fh ; 24 0f ; 0xc0117 vgarom.asm:246
+ test AL, strict byte 008h ; a8 08 ; 0xc0119 vgarom.asm:247
+ je short 0011fh ; 74 02 ; 0xc011b vgarom.asm:248
+ add AL, strict byte 008h ; 04 08 ; 0xc011d vgarom.asm:249
+ out DX, AL ; ee ; 0xc011f vgarom.asm:251
+ mov CL, strict byte 001h ; b1 01 ; 0xc0120 vgarom.asm:252
+ and bl, 010h ; 80 e3 10 ; 0xc0122 vgarom.asm:253
+ mov dx, 003c0h ; ba c0 03 ; 0xc0125 vgarom.asm:255
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc0128 vgarom.asm:256
+ out DX, AL ; ee ; 0xc012a vgarom.asm:257
+ mov dx, 003c1h ; ba c1 03 ; 0xc012b vgarom.asm:258
+ in AL, DX ; ec ; 0xc012e vgarom.asm:259
+ and AL, strict byte 0efh ; 24 ef ; 0xc012f vgarom.asm:260
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc0131 vgarom.asm:261
+ mov dx, 003c0h ; ba c0 03 ; 0xc0133 vgarom.asm:262
+ out DX, AL ; ee ; 0xc0136 vgarom.asm:263
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc0137 vgarom.asm:264
+ cmp cl, 004h ; 80 f9 04 ; 0xc0139 vgarom.asm:265
+ jne short 00125h ; 75 e7 ; 0xc013c vgarom.asm:266
+ mov AL, strict byte 020h ; b0 20 ; 0xc013e vgarom.asm:268
+ out DX, AL ; ee ; 0xc0140 vgarom.asm:269
+ mov dx, 003dah ; ba da 03 ; 0xc0141 vgarom.asm:271
+ in AL, DX ; ec ; 0xc0144 vgarom.asm:272
+ pop DS ; 1f ; 0xc0145 vgarom.asm:274
+ pop dx ; 5a ; 0xc0146 vgarom.asm:275
+ pop cx ; 59 ; 0xc0147 vgarom.asm:276
+ pop bx ; 5b ; 0xc0148 vgarom.asm:277
+ pop ax ; 58 ; 0xc0149 vgarom.asm:278
+ retn ; c3 ; 0xc014a vgarom.asm:279
+ push ax ; 50 ; 0xc014b vgarom.asm:281
+ push bx ; 53 ; 0xc014c vgarom.asm:282
+ push cx ; 51 ; 0xc014d vgarom.asm:283
+ push dx ; 52 ; 0xc014e vgarom.asm:284
+ mov dx, 003dah ; ba da 03 ; 0xc014f vgarom.asm:285
+ in AL, DX ; ec ; 0xc0152 vgarom.asm:286
+ mov CL, strict byte 001h ; b1 01 ; 0xc0153 vgarom.asm:287
+ and bl, 001h ; 80 e3 01 ; 0xc0155 vgarom.asm:288
+ mov dx, 003c0h ; ba c0 03 ; 0xc0158 vgarom.asm:290
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc015b vgarom.asm:291
+ out DX, AL ; ee ; 0xc015d vgarom.asm:292
+ mov dx, 003c1h ; ba c1 03 ; 0xc015e vgarom.asm:293
+ in AL, DX ; ec ; 0xc0161 vgarom.asm:294
+ and AL, strict byte 0feh ; 24 fe ; 0xc0162 vgarom.asm:295
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc0164 vgarom.asm:296
+ mov dx, 003c0h ; ba c0 03 ; 0xc0166 vgarom.asm:297
+ out DX, AL ; ee ; 0xc0169 vgarom.asm:298
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc016a vgarom.asm:299
+ cmp cl, 004h ; 80 f9 04 ; 0xc016c vgarom.asm:300
+ jne short 00158h ; 75 e7 ; 0xc016f vgarom.asm:301
+ mov AL, strict byte 020h ; b0 20 ; 0xc0171 vgarom.asm:302
+ out DX, AL ; ee ; 0xc0173 vgarom.asm:303
+ mov dx, 003dah ; ba da 03 ; 0xc0174 vgarom.asm:305
+ in AL, DX ; ec ; 0xc0177 vgarom.asm:306
+ pop dx ; 5a ; 0xc0178 vgarom.asm:308
+ pop cx ; 59 ; 0xc0179 vgarom.asm:309
+ pop bx ; 5b ; 0xc017a vgarom.asm:310
+ pop ax ; 58 ; 0xc017b vgarom.asm:311
+ retn ; c3 ; 0xc017c vgarom.asm:312
+ push DS ; 1e ; 0xc017d vgarom.asm:317
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc017e vgarom.asm:318
+ mov ds, ax ; 8e d8 ; 0xc0181 vgarom.asm:319
+ push bx ; 53 ; 0xc0183 vgarom.asm:320
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc0184 vgarom.asm:321
+ mov al, byte [bx] ; 8a 07 ; 0xc0187 vgarom.asm:322
+ pop bx ; 5b ; 0xc0189 vgarom.asm:323
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc018a vgarom.asm:324
+ push bx ; 53 ; 0xc018c vgarom.asm:325
+ mov bx, 00087h ; bb 87 00 ; 0xc018d vgarom.asm:326
+ mov ah, byte [bx] ; 8a 27 ; 0xc0190 vgarom.asm:327
+ and ah, 080h ; 80 e4 80 ; 0xc0192 vgarom.asm:328
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0195 vgarom.asm:329
+ mov al, byte [bx] ; 8a 07 ; 0xc0198 vgarom.asm:330
+ db 00ah, 0c4h
+ ; or al, ah ; 0a c4 ; 0xc019a vgarom.asm:331
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc019c vgarom.asm:332
+ mov ah, byte [bx] ; 8a 27 ; 0xc019f vgarom.asm:333
+ pop bx ; 5b ; 0xc01a1 vgarom.asm:334
+ pop DS ; 1f ; 0xc01a2 vgarom.asm:335
+ retn ; c3 ; 0xc01a3 vgarom.asm:336
+ cmp AL, strict byte 000h ; 3c 00 ; 0xc01a4 vgarom.asm:341
+ jne short 001aah ; 75 02 ; 0xc01a6 vgarom.asm:342
+ jmp short 0020bh ; eb 61 ; 0xc01a8 vgarom.asm:343
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc01aa vgarom.asm:345
+ jne short 001b0h ; 75 02 ; 0xc01ac vgarom.asm:346
+ jmp short 00229h ; eb 79 ; 0xc01ae vgarom.asm:347
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc01b0 vgarom.asm:349
+ jne short 001b6h ; 75 02 ; 0xc01b2 vgarom.asm:350
+ jmp short 00231h ; eb 7b ; 0xc01b4 vgarom.asm:351
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc01b6 vgarom.asm:353
+ jne short 001bdh ; 75 03 ; 0xc01b8 vgarom.asm:354
+ jmp near 00262h ; e9 a5 00 ; 0xc01ba vgarom.asm:355
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc01bd vgarom.asm:357
+ jne short 001c4h ; 75 03 ; 0xc01bf vgarom.asm:358
+ jmp near 0028ch ; e9 c8 00 ; 0xc01c1 vgarom.asm:359
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc01c4 vgarom.asm:361
+ jne short 001cbh ; 75 03 ; 0xc01c6 vgarom.asm:362
+ jmp near 002b4h ; e9 e9 00 ; 0xc01c8 vgarom.asm:363
+ cmp AL, strict byte 009h ; 3c 09 ; 0xc01cb vgarom.asm:365
+ jne short 001d2h ; 75 03 ; 0xc01cd vgarom.asm:366
+ jmp near 002c2h ; e9 f0 00 ; 0xc01cf vgarom.asm:367
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc01d2 vgarom.asm:369
+ jne short 001d9h ; 75 03 ; 0xc01d4 vgarom.asm:370
+ jmp near 00307h ; e9 2e 01 ; 0xc01d6 vgarom.asm:371
+ cmp AL, strict byte 012h ; 3c 12 ; 0xc01d9 vgarom.asm:373
+ jne short 001e0h ; 75 03 ; 0xc01db vgarom.asm:374
+ jmp near 00320h ; e9 40 01 ; 0xc01dd vgarom.asm:375
+ cmp AL, strict byte 013h ; 3c 13 ; 0xc01e0 vgarom.asm:377
+ jne short 001e7h ; 75 03 ; 0xc01e2 vgarom.asm:378
+ jmp near 00348h ; e9 61 01 ; 0xc01e4 vgarom.asm:379
+ cmp AL, strict byte 015h ; 3c 15 ; 0xc01e7 vgarom.asm:381
+ jne short 001eeh ; 75 03 ; 0xc01e9 vgarom.asm:382
+ jmp near 0038fh ; e9 a1 01 ; 0xc01eb vgarom.asm:383
+ cmp AL, strict byte 017h ; 3c 17 ; 0xc01ee vgarom.asm:385
+ jne short 001f5h ; 75 03 ; 0xc01f0 vgarom.asm:386
+ jmp near 003aah ; e9 b5 01 ; 0xc01f2 vgarom.asm:387
+ cmp AL, strict byte 018h ; 3c 18 ; 0xc01f5 vgarom.asm:389
+ jne short 001fch ; 75 03 ; 0xc01f7 vgarom.asm:390
+ jmp near 003d2h ; e9 d6 01 ; 0xc01f9 vgarom.asm:391
+ cmp AL, strict byte 019h ; 3c 19 ; 0xc01fc vgarom.asm:393
+ jne short 00203h ; 75 03 ; 0xc01fe vgarom.asm:394
+ jmp near 003ddh ; e9 da 01 ; 0xc0200 vgarom.asm:395
+ cmp AL, strict byte 01ah ; 3c 1a ; 0xc0203 vgarom.asm:397
+ jne short 0020ah ; 75 03 ; 0xc0205 vgarom.asm:398
+ jmp near 003e8h ; e9 de 01 ; 0xc0207 vgarom.asm:399
+ retn ; c3 ; 0xc020a vgarom.asm:404
+ cmp bl, 014h ; 80 fb 14 ; 0xc020b vgarom.asm:407
+ jnbe short 00228h ; 77 18 ; 0xc020e vgarom.asm:408
+ push ax ; 50 ; 0xc0210 vgarom.asm:409
+ push dx ; 52 ; 0xc0211 vgarom.asm:410
+ mov dx, 003dah ; ba da 03 ; 0xc0212 vgarom.asm:411
+ in AL, DX ; ec ; 0xc0215 vgarom.asm:412
+ mov dx, 003c0h ; ba c0 03 ; 0xc0216 vgarom.asm:413
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0219 vgarom.asm:414
+ out DX, AL ; ee ; 0xc021b vgarom.asm:415
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc021c vgarom.asm:416
+ out DX, AL ; ee ; 0xc021e vgarom.asm:417
+ mov AL, strict byte 020h ; b0 20 ; 0xc021f vgarom.asm:418
+ out DX, AL ; ee ; 0xc0221 vgarom.asm:419
+ mov dx, 003dah ; ba da 03 ; 0xc0222 vgarom.asm:421
+ in AL, DX ; ec ; 0xc0225 vgarom.asm:422
+ pop dx ; 5a ; 0xc0226 vgarom.asm:424
+ pop ax ; 58 ; 0xc0227 vgarom.asm:425
+ retn ; c3 ; 0xc0228 vgarom.asm:427
+ push bx ; 53 ; 0xc0229 vgarom.asm:432
+ mov BL, strict byte 011h ; b3 11 ; 0xc022a vgarom.asm:433
+ call 0020bh ; e8 dc ff ; 0xc022c vgarom.asm:434
+ pop bx ; 5b ; 0xc022f vgarom.asm:435
+ retn ; c3 ; 0xc0230 vgarom.asm:436
+ push ax ; 50 ; 0xc0231 vgarom.asm:441
+ push bx ; 53 ; 0xc0232 vgarom.asm:442
+ push cx ; 51 ; 0xc0233 vgarom.asm:443
+ push dx ; 52 ; 0xc0234 vgarom.asm:444
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc0235 vgarom.asm:445
+ mov dx, 003dah ; ba da 03 ; 0xc0237 vgarom.asm:446
+ in AL, DX ; ec ; 0xc023a vgarom.asm:447
+ mov CL, strict byte 000h ; b1 00 ; 0xc023b vgarom.asm:448
+ mov dx, 003c0h ; ba c0 03 ; 0xc023d vgarom.asm:449
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc0240 vgarom.asm:451
+ out DX, AL ; ee ; 0xc0242 vgarom.asm:452
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0243 vgarom.asm:453
+ out DX, AL ; ee ; 0xc0246 vgarom.asm:454
+ inc bx ; 43 ; 0xc0247 vgarom.asm:455
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc0248 vgarom.asm:456
+ cmp cl, 010h ; 80 f9 10 ; 0xc024a vgarom.asm:457
+ jne short 00240h ; 75 f1 ; 0xc024d vgarom.asm:458
+ mov AL, strict byte 011h ; b0 11 ; 0xc024f vgarom.asm:459
+ out DX, AL ; ee ; 0xc0251 vgarom.asm:460
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0252 vgarom.asm:461
+ out DX, AL ; ee ; 0xc0255 vgarom.asm:462
+ mov AL, strict byte 020h ; b0 20 ; 0xc0256 vgarom.asm:463
+ out DX, AL ; ee ; 0xc0258 vgarom.asm:464
+ mov dx, 003dah ; ba da 03 ; 0xc0259 vgarom.asm:466
+ in AL, DX ; ec ; 0xc025c vgarom.asm:467
+ pop dx ; 5a ; 0xc025d vgarom.asm:469
+ pop cx ; 59 ; 0xc025e vgarom.asm:470
+ pop bx ; 5b ; 0xc025f vgarom.asm:471
+ pop ax ; 58 ; 0xc0260 vgarom.asm:472
+ retn ; c3 ; 0xc0261 vgarom.asm:473
+ push ax ; 50 ; 0xc0262 vgarom.asm:478
+ push bx ; 53 ; 0xc0263 vgarom.asm:479
+ push dx ; 52 ; 0xc0264 vgarom.asm:480
+ mov dx, 003dah ; ba da 03 ; 0xc0265 vgarom.asm:481
+ in AL, DX ; ec ; 0xc0268 vgarom.asm:482
+ mov dx, 003c0h ; ba c0 03 ; 0xc0269 vgarom.asm:483
+ mov AL, strict byte 010h ; b0 10 ; 0xc026c vgarom.asm:484
+ out DX, AL ; ee ; 0xc026e vgarom.asm:485
+ mov dx, 003c1h ; ba c1 03 ; 0xc026f vgarom.asm:486
+ in AL, DX ; ec ; 0xc0272 vgarom.asm:487
+ and AL, strict byte 0f7h ; 24 f7 ; 0xc0273 vgarom.asm:488
+ and bl, 001h ; 80 e3 01 ; 0xc0275 vgarom.asm:489
+ sal bl, 003h ; c0 e3 03 ; 0xc0278 vgarom.asm:491
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc027b vgarom.asm:497
+ mov dx, 003c0h ; ba c0 03 ; 0xc027d vgarom.asm:498
+ out DX, AL ; ee ; 0xc0280 vgarom.asm:499
+ mov AL, strict byte 020h ; b0 20 ; 0xc0281 vgarom.asm:500
+ out DX, AL ; ee ; 0xc0283 vgarom.asm:501
+ mov dx, 003dah ; ba da 03 ; 0xc0284 vgarom.asm:503
+ in AL, DX ; ec ; 0xc0287 vgarom.asm:504
+ pop dx ; 5a ; 0xc0288 vgarom.asm:506
+ pop bx ; 5b ; 0xc0289 vgarom.asm:507
+ pop ax ; 58 ; 0xc028a vgarom.asm:508
+ retn ; c3 ; 0xc028b vgarom.asm:509
+ cmp bl, 014h ; 80 fb 14 ; 0xc028c vgarom.asm:514
+ jnbe short 002b3h ; 77 22 ; 0xc028f vgarom.asm:515
+ push ax ; 50 ; 0xc0291 vgarom.asm:516
+ push dx ; 52 ; 0xc0292 vgarom.asm:517
+ mov dx, 003dah ; ba da 03 ; 0xc0293 vgarom.asm:518
+ in AL, DX ; ec ; 0xc0296 vgarom.asm:519
+ mov dx, 003c0h ; ba c0 03 ; 0xc0297 vgarom.asm:520
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc029a vgarom.asm:521
+ out DX, AL ; ee ; 0xc029c vgarom.asm:522
+ mov dx, 003c1h ; ba c1 03 ; 0xc029d vgarom.asm:523
+ in AL, DX ; ec ; 0xc02a0 vgarom.asm:524
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc02a1 vgarom.asm:525
+ mov dx, 003dah ; ba da 03 ; 0xc02a3 vgarom.asm:526
+ in AL, DX ; ec ; 0xc02a6 vgarom.asm:527
+ mov dx, 003c0h ; ba c0 03 ; 0xc02a7 vgarom.asm:528
+ mov AL, strict byte 020h ; b0 20 ; 0xc02aa vgarom.asm:529
+ out DX, AL ; ee ; 0xc02ac vgarom.asm:530
+ mov dx, 003dah ; ba da 03 ; 0xc02ad vgarom.asm:532
+ in AL, DX ; ec ; 0xc02b0 vgarom.asm:533
+ pop dx ; 5a ; 0xc02b1 vgarom.asm:535
+ pop ax ; 58 ; 0xc02b2 vgarom.asm:536
+ retn ; c3 ; 0xc02b3 vgarom.asm:538
+ push ax ; 50 ; 0xc02b4 vgarom.asm:543
+ push bx ; 53 ; 0xc02b5 vgarom.asm:544
+ mov BL, strict byte 011h ; b3 11 ; 0xc02b6 vgarom.asm:545
+ call 0028ch ; e8 d1 ff ; 0xc02b8 vgarom.asm:546
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc02bb vgarom.asm:547
+ pop bx ; 5b ; 0xc02bd vgarom.asm:548
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc02be vgarom.asm:549
+ pop ax ; 58 ; 0xc02c0 vgarom.asm:550
+ retn ; c3 ; 0xc02c1 vgarom.asm:551
+ push ax ; 50 ; 0xc02c2 vgarom.asm:556
+ push bx ; 53 ; 0xc02c3 vgarom.asm:557
+ push cx ; 51 ; 0xc02c4 vgarom.asm:558
+ push dx ; 52 ; 0xc02c5 vgarom.asm:559
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc02c6 vgarom.asm:560
+ mov CL, strict byte 000h ; b1 00 ; 0xc02c8 vgarom.asm:561
+ mov dx, 003dah ; ba da 03 ; 0xc02ca vgarom.asm:563
+ in AL, DX ; ec ; 0xc02cd vgarom.asm:564
+ mov dx, 003c0h ; ba c0 03 ; 0xc02ce vgarom.asm:565
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc02d1 vgarom.asm:566
+ out DX, AL ; ee ; 0xc02d3 vgarom.asm:567
+ mov dx, 003c1h ; ba c1 03 ; 0xc02d4 vgarom.asm:568
+ in AL, DX ; ec ; 0xc02d7 vgarom.asm:569
+ mov byte [es:bx], al ; 26 88 07 ; 0xc02d8 vgarom.asm:570
+ inc bx ; 43 ; 0xc02db vgarom.asm:571
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc02dc vgarom.asm:572
+ cmp cl, 010h ; 80 f9 10 ; 0xc02de vgarom.asm:573
+ jne short 002cah ; 75 e7 ; 0xc02e1 vgarom.asm:574
+ mov dx, 003dah ; ba da 03 ; 0xc02e3 vgarom.asm:575
+ in AL, DX ; ec ; 0xc02e6 vgarom.asm:576
+ mov dx, 003c0h ; ba c0 03 ; 0xc02e7 vgarom.asm:577
+ mov AL, strict byte 011h ; b0 11 ; 0xc02ea vgarom.asm:578
+ out DX, AL ; ee ; 0xc02ec vgarom.asm:579
+ mov dx, 003c1h ; ba c1 03 ; 0xc02ed vgarom.asm:580
+ in AL, DX ; ec ; 0xc02f0 vgarom.asm:581
+ mov byte [es:bx], al ; 26 88 07 ; 0xc02f1 vgarom.asm:582
+ mov dx, 003dah ; ba da 03 ; 0xc02f4 vgarom.asm:583
+ in AL, DX ; ec ; 0xc02f7 vgarom.asm:584
+ mov dx, 003c0h ; ba c0 03 ; 0xc02f8 vgarom.asm:585
+ mov AL, strict byte 020h ; b0 20 ; 0xc02fb vgarom.asm:586
+ out DX, AL ; ee ; 0xc02fd vgarom.asm:587
+ mov dx, 003dah ; ba da 03 ; 0xc02fe vgarom.asm:589
+ in AL, DX ; ec ; 0xc0301 vgarom.asm:590
+ pop dx ; 5a ; 0xc0302 vgarom.asm:592
+ pop cx ; 59 ; 0xc0303 vgarom.asm:593
+ pop bx ; 5b ; 0xc0304 vgarom.asm:594
+ pop ax ; 58 ; 0xc0305 vgarom.asm:595
+ retn ; c3 ; 0xc0306 vgarom.asm:596
+ push ax ; 50 ; 0xc0307 vgarom.asm:601
+ push dx ; 52 ; 0xc0308 vgarom.asm:602
+ mov dx, 003c8h ; ba c8 03 ; 0xc0309 vgarom.asm:603
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc030c vgarom.asm:604
+ out DX, AL ; ee ; 0xc030e vgarom.asm:605
+ mov dx, 003c9h ; ba c9 03 ; 0xc030f vgarom.asm:606
+ pop ax ; 58 ; 0xc0312 vgarom.asm:607
+ push ax ; 50 ; 0xc0313 vgarom.asm:608
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc0314 vgarom.asm:609
+ out DX, AL ; ee ; 0xc0316 vgarom.asm:610
+ db 08ah, 0c5h
+ ; mov al, ch ; 8a c5 ; 0xc0317 vgarom.asm:611
+ out DX, AL ; ee ; 0xc0319 vgarom.asm:612
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc031a vgarom.asm:613
+ out DX, AL ; ee ; 0xc031c vgarom.asm:614
+ pop dx ; 5a ; 0xc031d vgarom.asm:615
+ pop ax ; 58 ; 0xc031e vgarom.asm:616
+ retn ; c3 ; 0xc031f vgarom.asm:617
+ push ax ; 50 ; 0xc0320 vgarom.asm:622
+ push bx ; 53 ; 0xc0321 vgarom.asm:623
+ push cx ; 51 ; 0xc0322 vgarom.asm:624
+ push dx ; 52 ; 0xc0323 vgarom.asm:625
+ mov dx, 003c8h ; ba c8 03 ; 0xc0324 vgarom.asm:626
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0327 vgarom.asm:627
+ out DX, AL ; ee ; 0xc0329 vgarom.asm:628
+ pop dx ; 5a ; 0xc032a vgarom.asm:629
+ push dx ; 52 ; 0xc032b vgarom.asm:630
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc032c vgarom.asm:631
+ mov dx, 003c9h ; ba c9 03 ; 0xc032e vgarom.asm:632
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0331 vgarom.asm:634
+ out DX, AL ; ee ; 0xc0334 vgarom.asm:635
+ inc bx ; 43 ; 0xc0335 vgarom.asm:636
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0336 vgarom.asm:637
+ out DX, AL ; ee ; 0xc0339 vgarom.asm:638
+ inc bx ; 43 ; 0xc033a vgarom.asm:639
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc033b vgarom.asm:640
+ out DX, AL ; ee ; 0xc033e vgarom.asm:641
+ inc bx ; 43 ; 0xc033f vgarom.asm:642
+ dec cx ; 49 ; 0xc0340 vgarom.asm:643
+ jne short 00331h ; 75 ee ; 0xc0341 vgarom.asm:644
+ pop dx ; 5a ; 0xc0343 vgarom.asm:645
+ pop cx ; 59 ; 0xc0344 vgarom.asm:646
+ pop bx ; 5b ; 0xc0345 vgarom.asm:647
+ pop ax ; 58 ; 0xc0346 vgarom.asm:648
+ retn ; c3 ; 0xc0347 vgarom.asm:649
+ push ax ; 50 ; 0xc0348 vgarom.asm:654
+ push bx ; 53 ; 0xc0349 vgarom.asm:655
+ push dx ; 52 ; 0xc034a vgarom.asm:656
+ mov dx, 003dah ; ba da 03 ; 0xc034b vgarom.asm:657
+ in AL, DX ; ec ; 0xc034e vgarom.asm:658
+ mov dx, 003c0h ; ba c0 03 ; 0xc034f vgarom.asm:659
+ mov AL, strict byte 010h ; b0 10 ; 0xc0352 vgarom.asm:660
+ out DX, AL ; ee ; 0xc0354 vgarom.asm:661
+ mov dx, 003c1h ; ba c1 03 ; 0xc0355 vgarom.asm:662
+ in AL, DX ; ec ; 0xc0358 vgarom.asm:663
+ and bl, 001h ; 80 e3 01 ; 0xc0359 vgarom.asm:664
+ jne short 0036bh ; 75 0d ; 0xc035c vgarom.asm:665
+ and AL, strict byte 07fh ; 24 7f ; 0xc035e vgarom.asm:666
+ sal bh, 007h ; c0 e7 07 ; 0xc0360 vgarom.asm:668
+ db 00ah, 0c7h
+ ; or al, bh ; 0a c7 ; 0xc0363 vgarom.asm:678
+ mov dx, 003c0h ; ba c0 03 ; 0xc0365 vgarom.asm:679
+ out DX, AL ; ee ; 0xc0368 vgarom.asm:680
+ jmp short 00384h ; eb 19 ; 0xc0369 vgarom.asm:681
+ push ax ; 50 ; 0xc036b vgarom.asm:683
+ mov dx, 003dah ; ba da 03 ; 0xc036c vgarom.asm:684
+ in AL, DX ; ec ; 0xc036f vgarom.asm:685
+ mov dx, 003c0h ; ba c0 03 ; 0xc0370 vgarom.asm:686
+ mov AL, strict byte 014h ; b0 14 ; 0xc0373 vgarom.asm:687
+ out DX, AL ; ee ; 0xc0375 vgarom.asm:688
+ pop ax ; 58 ; 0xc0376 vgarom.asm:689
+ and AL, strict byte 080h ; 24 80 ; 0xc0377 vgarom.asm:690
+ jne short 0037eh ; 75 03 ; 0xc0379 vgarom.asm:691
+ sal bh, 002h ; c0 e7 02 ; 0xc037b vgarom.asm:693
+ and bh, 00fh ; 80 e7 0f ; 0xc037e vgarom.asm:699
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc0381 vgarom.asm:700
+ out DX, AL ; ee ; 0xc0383 vgarom.asm:701
+ mov AL, strict byte 020h ; b0 20 ; 0xc0384 vgarom.asm:703
+ out DX, AL ; ee ; 0xc0386 vgarom.asm:704
+ mov dx, 003dah ; ba da 03 ; 0xc0387 vgarom.asm:706
+ in AL, DX ; ec ; 0xc038a vgarom.asm:707
+ pop dx ; 5a ; 0xc038b vgarom.asm:709
+ pop bx ; 5b ; 0xc038c vgarom.asm:710
+ pop ax ; 58 ; 0xc038d vgarom.asm:711
+ retn ; c3 ; 0xc038e vgarom.asm:712
+ push ax ; 50 ; 0xc038f vgarom.asm:717
+ push dx ; 52 ; 0xc0390 vgarom.asm:718
+ mov dx, 003c7h ; ba c7 03 ; 0xc0391 vgarom.asm:719
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0394 vgarom.asm:720
+ out DX, AL ; ee ; 0xc0396 vgarom.asm:721
+ pop ax ; 58 ; 0xc0397 vgarom.asm:722
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc0398 vgarom.asm:723
+ mov dx, 003c9h ; ba c9 03 ; 0xc039a vgarom.asm:724
+ in AL, DX ; ec ; 0xc039d vgarom.asm:725
+ xchg al, ah ; 86 e0 ; 0xc039e vgarom.asm:726
+ push ax ; 50 ; 0xc03a0 vgarom.asm:727
+ in AL, DX ; ec ; 0xc03a1 vgarom.asm:728
+ db 08ah, 0e8h
+ ; mov ch, al ; 8a e8 ; 0xc03a2 vgarom.asm:729
+ in AL, DX ; ec ; 0xc03a4 vgarom.asm:730
+ db 08ah, 0c8h
+ ; mov cl, al ; 8a c8 ; 0xc03a5 vgarom.asm:731
+ pop dx ; 5a ; 0xc03a7 vgarom.asm:732
+ pop ax ; 58 ; 0xc03a8 vgarom.asm:733
+ retn ; c3 ; 0xc03a9 vgarom.asm:734
+ push ax ; 50 ; 0xc03aa vgarom.asm:739
+ push bx ; 53 ; 0xc03ab vgarom.asm:740
+ push cx ; 51 ; 0xc03ac vgarom.asm:741
+ push dx ; 52 ; 0xc03ad vgarom.asm:742
+ mov dx, 003c7h ; ba c7 03 ; 0xc03ae vgarom.asm:743
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03b1 vgarom.asm:744
+ out DX, AL ; ee ; 0xc03b3 vgarom.asm:745
+ pop dx ; 5a ; 0xc03b4 vgarom.asm:746
+ push dx ; 52 ; 0xc03b5 vgarom.asm:747
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc03b6 vgarom.asm:748
+ mov dx, 003c9h ; ba c9 03 ; 0xc03b8 vgarom.asm:749
+ in AL, DX ; ec ; 0xc03bb vgarom.asm:751
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03bc vgarom.asm:752
+ inc bx ; 43 ; 0xc03bf vgarom.asm:753
+ in AL, DX ; ec ; 0xc03c0 vgarom.asm:754
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03c1 vgarom.asm:755
+ inc bx ; 43 ; 0xc03c4 vgarom.asm:756
+ in AL, DX ; ec ; 0xc03c5 vgarom.asm:757
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03c6 vgarom.asm:758
+ inc bx ; 43 ; 0xc03c9 vgarom.asm:759
+ dec cx ; 49 ; 0xc03ca vgarom.asm:760
+ jne short 003bbh ; 75 ee ; 0xc03cb vgarom.asm:761
+ pop dx ; 5a ; 0xc03cd vgarom.asm:762
+ pop cx ; 59 ; 0xc03ce vgarom.asm:763
+ pop bx ; 5b ; 0xc03cf vgarom.asm:764
+ pop ax ; 58 ; 0xc03d0 vgarom.asm:765
+ retn ; c3 ; 0xc03d1 vgarom.asm:766
+ push ax ; 50 ; 0xc03d2 vgarom.asm:771
+ push dx ; 52 ; 0xc03d3 vgarom.asm:772
+ mov dx, 003c6h ; ba c6 03 ; 0xc03d4 vgarom.asm:773
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03d7 vgarom.asm:774
+ out DX, AL ; ee ; 0xc03d9 vgarom.asm:775
+ pop dx ; 5a ; 0xc03da vgarom.asm:776
+ pop ax ; 58 ; 0xc03db vgarom.asm:777
+ retn ; c3 ; 0xc03dc vgarom.asm:778
+ push ax ; 50 ; 0xc03dd vgarom.asm:783
+ push dx ; 52 ; 0xc03de vgarom.asm:784
+ mov dx, 003c6h ; ba c6 03 ; 0xc03df vgarom.asm:785
+ in AL, DX ; ec ; 0xc03e2 vgarom.asm:786
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc03e3 vgarom.asm:787
+ pop dx ; 5a ; 0xc03e5 vgarom.asm:788
+ pop ax ; 58 ; 0xc03e6 vgarom.asm:789
+ retn ; c3 ; 0xc03e7 vgarom.asm:790
+ push ax ; 50 ; 0xc03e8 vgarom.asm:795
+ push dx ; 52 ; 0xc03e9 vgarom.asm:796
+ mov dx, 003dah ; ba da 03 ; 0xc03ea vgarom.asm:797
+ in AL, DX ; ec ; 0xc03ed vgarom.asm:798
+ mov dx, 003c0h ; ba c0 03 ; 0xc03ee vgarom.asm:799
+ mov AL, strict byte 010h ; b0 10 ; 0xc03f1 vgarom.asm:800
+ out DX, AL ; ee ; 0xc03f3 vgarom.asm:801
+ mov dx, 003c1h ; ba c1 03 ; 0xc03f4 vgarom.asm:802
+ in AL, DX ; ec ; 0xc03f7 vgarom.asm:803
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc03f8 vgarom.asm:804
+ shr bl, 007h ; c0 eb 07 ; 0xc03fa vgarom.asm:806
+ mov dx, 003dah ; ba da 03 ; 0xc03fd vgarom.asm:816
+ in AL, DX ; ec ; 0xc0400 vgarom.asm:817
+ mov dx, 003c0h ; ba c0 03 ; 0xc0401 vgarom.asm:818
+ mov AL, strict byte 014h ; b0 14 ; 0xc0404 vgarom.asm:819
+ out DX, AL ; ee ; 0xc0406 vgarom.asm:820
+ mov dx, 003c1h ; ba c1 03 ; 0xc0407 vgarom.asm:821
+ in AL, DX ; ec ; 0xc040a vgarom.asm:822
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc040b vgarom.asm:823
+ and bh, 00fh ; 80 e7 0f ; 0xc040d vgarom.asm:824
+ test bl, 001h ; f6 c3 01 ; 0xc0410 vgarom.asm:825
+ jne short 00418h ; 75 03 ; 0xc0413 vgarom.asm:826
+ shr bh, 002h ; c0 ef 02 ; 0xc0415 vgarom.asm:828
+ mov dx, 003dah ; ba da 03 ; 0xc0418 vgarom.asm:834
+ in AL, DX ; ec ; 0xc041b vgarom.asm:835
+ mov dx, 003c0h ; ba c0 03 ; 0xc041c vgarom.asm:836
+ mov AL, strict byte 020h ; b0 20 ; 0xc041f vgarom.asm:837
+ out DX, AL ; ee ; 0xc0421 vgarom.asm:838
+ mov dx, 003dah ; ba da 03 ; 0xc0422 vgarom.asm:840
+ in AL, DX ; ec ; 0xc0425 vgarom.asm:841
+ pop dx ; 5a ; 0xc0426 vgarom.asm:843
+ pop ax ; 58 ; 0xc0427 vgarom.asm:844
+ retn ; c3 ; 0xc0428 vgarom.asm:845
+ push ax ; 50 ; 0xc0429 vgarom.asm:850
+ push dx ; 52 ; 0xc042a vgarom.asm:851
+ mov dx, 003c4h ; ba c4 03 ; 0xc042b vgarom.asm:852
+ db 08ah, 0e3h
+ ; mov ah, bl ; 8a e3 ; 0xc042e vgarom.asm:853
+ mov AL, strict byte 003h ; b0 03 ; 0xc0430 vgarom.asm:854
+ out DX, ax ; ef ; 0xc0432 vgarom.asm:855
+ pop dx ; 5a ; 0xc0433 vgarom.asm:856
+ pop ax ; 58 ; 0xc0434 vgarom.asm:857
+ retn ; c3 ; 0xc0435 vgarom.asm:858
+ push DS ; 1e ; 0xc0436 vgarom.asm:863
+ push ax ; 50 ; 0xc0437 vgarom.asm:864
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0438 vgarom.asm:865
+ mov ds, ax ; 8e d8 ; 0xc043b vgarom.asm:866
+ db 032h, 0edh
+ ; xor ch, ch ; 32 ed ; 0xc043d vgarom.asm:867
+ mov bx, 00088h ; bb 88 00 ; 0xc043f vgarom.asm:868
+ mov cl, byte [bx] ; 8a 0f ; 0xc0442 vgarom.asm:869
+ and cl, 00fh ; 80 e1 0f ; 0xc0444 vgarom.asm:870
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc0447 vgarom.asm:871
+ mov ax, word [bx] ; 8b 07 ; 0xc044a vgarom.asm:872
+ mov bx, strict word 00003h ; bb 03 00 ; 0xc044c vgarom.asm:873
+ cmp ax, 003b4h ; 3d b4 03 ; 0xc044f vgarom.asm:874
+ jne short 00456h ; 75 02 ; 0xc0452 vgarom.asm:875
+ mov BH, strict byte 001h ; b7 01 ; 0xc0454 vgarom.asm:876
+ pop ax ; 58 ; 0xc0456 vgarom.asm:878
+ pop DS ; 1f ; 0xc0457 vgarom.asm:879
+ retn ; c3 ; 0xc0458 vgarom.asm:880
+ push DS ; 1e ; 0xc0459 vgarom.asm:888
+ push bx ; 53 ; 0xc045a vgarom.asm:889
+ push dx ; 52 ; 0xc045b vgarom.asm:890
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc045c vgarom.asm:891
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc045e vgarom.asm:892
+ mov ds, ax ; 8e d8 ; 0xc0461 vgarom.asm:893
+ mov bx, 00089h ; bb 89 00 ; 0xc0463 vgarom.asm:894
+ mov al, byte [bx] ; 8a 07 ; 0xc0466 vgarom.asm:895
+ mov bx, 00088h ; bb 88 00 ; 0xc0468 vgarom.asm:896
+ mov ah, byte [bx] ; 8a 27 ; 0xc046b vgarom.asm:897
+ cmp dl, 001h ; 80 fa 01 ; 0xc046d vgarom.asm:898
+ je short 00487h ; 74 15 ; 0xc0470 vgarom.asm:899
+ jc short 00491h ; 72 1d ; 0xc0472 vgarom.asm:900
+ cmp dl, 002h ; 80 fa 02 ; 0xc0474 vgarom.asm:901
+ je short 0047bh ; 74 02 ; 0xc0477 vgarom.asm:902
+ jmp short 004a5h ; eb 2a ; 0xc0479 vgarom.asm:912
+ and AL, strict byte 07fh ; 24 7f ; 0xc047b vgarom.asm:918
+ or AL, strict byte 010h ; 0c 10 ; 0xc047d vgarom.asm:919
+ and ah, 0f0h ; 80 e4 f0 ; 0xc047f vgarom.asm:920
+ or ah, 009h ; 80 cc 09 ; 0xc0482 vgarom.asm:921
+ jne short 0049bh ; 75 14 ; 0xc0485 vgarom.asm:922
+ and AL, strict byte 06fh ; 24 6f ; 0xc0487 vgarom.asm:928
+ and ah, 0f0h ; 80 e4 f0 ; 0xc0489 vgarom.asm:929
+ or ah, 009h ; 80 cc 09 ; 0xc048c vgarom.asm:930
+ jne short 0049bh ; 75 0a ; 0xc048f vgarom.asm:931
+ and AL, strict byte 0efh ; 24 ef ; 0xc0491 vgarom.asm:937
+ or AL, strict byte 080h ; 0c 80 ; 0xc0493 vgarom.asm:938
+ and ah, 0f0h ; 80 e4 f0 ; 0xc0495 vgarom.asm:939
+ or ah, 008h ; 80 cc 08 ; 0xc0498 vgarom.asm:940
+ mov bx, 00089h ; bb 89 00 ; 0xc049b vgarom.asm:942
+ mov byte [bx], al ; 88 07 ; 0xc049e vgarom.asm:943
+ mov bx, 00088h ; bb 88 00 ; 0xc04a0 vgarom.asm:944
+ mov byte [bx], ah ; 88 27 ; 0xc04a3 vgarom.asm:945
+ mov ax, 01212h ; b8 12 12 ; 0xc04a5 vgarom.asm:947
+ pop dx ; 5a ; 0xc04a8 vgarom.asm:948
+ pop bx ; 5b ; 0xc04a9 vgarom.asm:949
+ pop DS ; 1f ; 0xc04aa vgarom.asm:950
+ retn ; c3 ; 0xc04ab vgarom.asm:951
+ push DS ; 1e ; 0xc04ac vgarom.asm:960
+ push bx ; 53 ; 0xc04ad vgarom.asm:961
+ push dx ; 52 ; 0xc04ae vgarom.asm:962
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc04af vgarom.asm:963
+ and dl, 001h ; 80 e2 01 ; 0xc04b1 vgarom.asm:964
+ sal dl, 003h ; c0 e2 03 ; 0xc04b4 vgarom.asm:966
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc04b7 vgarom.asm:972
+ mov ds, ax ; 8e d8 ; 0xc04ba vgarom.asm:973
+ mov bx, 00089h ; bb 89 00 ; 0xc04bc vgarom.asm:974
+ mov al, byte [bx] ; 8a 07 ; 0xc04bf vgarom.asm:975
+ and AL, strict byte 0f7h ; 24 f7 ; 0xc04c1 vgarom.asm:976
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc04c3 vgarom.asm:977
+ mov byte [bx], al ; 88 07 ; 0xc04c5 vgarom.asm:978
+ mov ax, 01212h ; b8 12 12 ; 0xc04c7 vgarom.asm:979
+ pop dx ; 5a ; 0xc04ca vgarom.asm:980
+ pop bx ; 5b ; 0xc04cb vgarom.asm:981
+ pop DS ; 1f ; 0xc04cc vgarom.asm:982
+ retn ; c3 ; 0xc04cd vgarom.asm:983
+ push bx ; 53 ; 0xc04ce vgarom.asm:987
+ push dx ; 52 ; 0xc04cf vgarom.asm:988
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc04d0 vgarom.asm:989
+ and bl, 001h ; 80 e3 01 ; 0xc04d2 vgarom.asm:990
+ xor bl, 001h ; 80 f3 01 ; 0xc04d5 vgarom.asm:991
+ sal bl, 1 ; d0 e3 ; 0xc04d8 vgarom.asm:992
+ mov dx, 003cch ; ba cc 03 ; 0xc04da vgarom.asm:993
+ in AL, DX ; ec ; 0xc04dd vgarom.asm:994
+ and AL, strict byte 0fdh ; 24 fd ; 0xc04de vgarom.asm:995
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc04e0 vgarom.asm:996
+ mov dx, 003c2h ; ba c2 03 ; 0xc04e2 vgarom.asm:997
+ out DX, AL ; ee ; 0xc04e5 vgarom.asm:998
+ mov ax, 01212h ; b8 12 12 ; 0xc04e6 vgarom.asm:999
+ pop dx ; 5a ; 0xc04e9 vgarom.asm:1000
+ pop bx ; 5b ; 0xc04ea vgarom.asm:1001
+ retn ; c3 ; 0xc04eb vgarom.asm:1002
+ push DS ; 1e ; 0xc04ec vgarom.asm:1006
+ push bx ; 53 ; 0xc04ed vgarom.asm:1007
+ push dx ; 52 ; 0xc04ee vgarom.asm:1008
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc04ef vgarom.asm:1009
+ and dl, 001h ; 80 e2 01 ; 0xc04f1 vgarom.asm:1010
+ xor dl, 001h ; 80 f2 01 ; 0xc04f4 vgarom.asm:1011
+ sal dl, 1 ; d0 e2 ; 0xc04f7 vgarom.asm:1012
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc04f9 vgarom.asm:1013
+ mov ds, ax ; 8e d8 ; 0xc04fc vgarom.asm:1014
+ mov bx, 00089h ; bb 89 00 ; 0xc04fe vgarom.asm:1015
+ mov al, byte [bx] ; 8a 07 ; 0xc0501 vgarom.asm:1016
+ and AL, strict byte 0fdh ; 24 fd ; 0xc0503 vgarom.asm:1017
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc0505 vgarom.asm:1018
+ mov byte [bx], al ; 88 07 ; 0xc0507 vgarom.asm:1019
+ mov ax, 01212h ; b8 12 12 ; 0xc0509 vgarom.asm:1020
+ pop dx ; 5a ; 0xc050c vgarom.asm:1021
+ pop bx ; 5b ; 0xc050d vgarom.asm:1022
+ pop DS ; 1f ; 0xc050e vgarom.asm:1023
+ retn ; c3 ; 0xc050f vgarom.asm:1024
+ push DS ; 1e ; 0xc0510 vgarom.asm:1028
+ push bx ; 53 ; 0xc0511 vgarom.asm:1029
+ push dx ; 52 ; 0xc0512 vgarom.asm:1030
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc0513 vgarom.asm:1031
+ and dl, 001h ; 80 e2 01 ; 0xc0515 vgarom.asm:1032
+ xor dl, 001h ; 80 f2 01 ; 0xc0518 vgarom.asm:1033
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc051b vgarom.asm:1034
+ mov ds, ax ; 8e d8 ; 0xc051e vgarom.asm:1035
+ mov bx, 00089h ; bb 89 00 ; 0xc0520 vgarom.asm:1036
+ mov al, byte [bx] ; 8a 07 ; 0xc0523 vgarom.asm:1037
+ and AL, strict byte 0feh ; 24 fe ; 0xc0525 vgarom.asm:1038
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc0527 vgarom.asm:1039
+ mov byte [bx], al ; 88 07 ; 0xc0529 vgarom.asm:1040
+ mov ax, 01212h ; b8 12 12 ; 0xc052b vgarom.asm:1041
+ pop dx ; 5a ; 0xc052e vgarom.asm:1042
+ pop bx ; 5b ; 0xc052f vgarom.asm:1043
+ pop DS ; 1f ; 0xc0530 vgarom.asm:1044
+ retn ; c3 ; 0xc0531 vgarom.asm:1045
+ cmp AL, strict byte 000h ; 3c 00 ; 0xc0532 vgarom.asm:1050
+ je short 0053bh ; 74 05 ; 0xc0534 vgarom.asm:1051
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc0536 vgarom.asm:1052
+ je short 00550h ; 74 16 ; 0xc0538 vgarom.asm:1053
+ retn ; c3 ; 0xc053a vgarom.asm:1057
+ push DS ; 1e ; 0xc053b vgarom.asm:1059
+ push ax ; 50 ; 0xc053c vgarom.asm:1060
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc053d vgarom.asm:1061
+ mov ds, ax ; 8e d8 ; 0xc0540 vgarom.asm:1062
+ mov bx, 0008ah ; bb 8a 00 ; 0xc0542 vgarom.asm:1063
+ mov al, byte [bx] ; 8a 07 ; 0xc0545 vgarom.asm:1064
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc0547 vgarom.asm:1065
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc0549 vgarom.asm:1066
+ pop ax ; 58 ; 0xc054b vgarom.asm:1067
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc054c vgarom.asm:1068
+ pop DS ; 1f ; 0xc054e vgarom.asm:1069
+ retn ; c3 ; 0xc054f vgarom.asm:1070
+ push DS ; 1e ; 0xc0550 vgarom.asm:1072
+ push ax ; 50 ; 0xc0551 vgarom.asm:1073
+ push bx ; 53 ; 0xc0552 vgarom.asm:1074
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0553 vgarom.asm:1075
+ mov ds, ax ; 8e d8 ; 0xc0556 vgarom.asm:1076
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc0558 vgarom.asm:1077
+ mov bx, 0008ah ; bb 8a 00 ; 0xc055a vgarom.asm:1078
+ mov byte [bx], al ; 88 07 ; 0xc055d vgarom.asm:1079
+ pop bx ; 5b ; 0xc055f vgarom.asm:1089
+ pop ax ; 58 ; 0xc0560 vgarom.asm:1090
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc0561 vgarom.asm:1091
+ pop DS ; 1f ; 0xc0563 vgarom.asm:1092
+ retn ; c3 ; 0xc0564 vgarom.asm:1093
+ times 0xb db 0
+ ; disGetNextSymbol 0xc0570 LB 0x397 -> off=0x0 cb=0000000000000007 uValue=00000000000c0570 'do_out_dx_ax'
+do_out_dx_ax: ; 0xc0570 LB 0x7
+ xchg ah, al ; 86 c4 ; 0xc0570 vberom.asm:69
+ out DX, AL ; ee ; 0xc0572 vberom.asm:70
+ xchg ah, al ; 86 c4 ; 0xc0573 vberom.asm:71
+ out DX, AL ; ee ; 0xc0575 vberom.asm:72
+ retn ; c3 ; 0xc0576 vberom.asm:73
+ ; disGetNextSymbol 0xc0577 LB 0x390 -> off=0x0 cb=0000000000000040 uValue=00000000000c0577 'do_in_ax_dx'
+do_in_ax_dx: ; 0xc0577 LB 0x40
+ in AL, DX ; ec ; 0xc0577 vberom.asm:76
+ xchg ah, al ; 86 c4 ; 0xc0578 vberom.asm:77
+ in AL, DX ; ec ; 0xc057a vberom.asm:78
+ retn ; c3 ; 0xc057b vberom.asm:79
+ push ax ; 50 ; 0xc057c vberom.asm:90
+ push dx ; 52 ; 0xc057d vberom.asm:91
+ mov dx, 003dah ; ba da 03 ; 0xc057e vberom.asm:92
+ in AL, DX ; ec ; 0xc0581 vberom.asm:94
+ test AL, strict byte 008h ; a8 08 ; 0xc0582 vberom.asm:95
+ je short 00581h ; 74 fb ; 0xc0584 vberom.asm:96
+ pop dx ; 5a ; 0xc0586 vberom.asm:97
+ pop ax ; 58 ; 0xc0587 vberom.asm:98
+ retn ; c3 ; 0xc0588 vberom.asm:99
+ push ax ; 50 ; 0xc0589 vberom.asm:102
+ push dx ; 52 ; 0xc058a vberom.asm:103
+ mov dx, 003dah ; ba da 03 ; 0xc058b vberom.asm:104
+ in AL, DX ; ec ; 0xc058e vberom.asm:106
+ test AL, strict byte 008h ; a8 08 ; 0xc058f vberom.asm:107
+ jne short 0058eh ; 75 fb ; 0xc0591 vberom.asm:108
+ pop dx ; 5a ; 0xc0593 vberom.asm:109
+ pop ax ; 58 ; 0xc0594 vberom.asm:110
+ retn ; c3 ; 0xc0595 vberom.asm:111
+ push dx ; 52 ; 0xc0596 vberom.asm:116
+ mov dx, 001ceh ; ba ce 01 ; 0xc0597 vberom.asm:117
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc059a vberom.asm:118
+ call 00570h ; e8 d0 ff ; 0xc059d vberom.asm:119
+ mov dx, 001cfh ; ba cf 01 ; 0xc05a0 vberom.asm:120
+ call 00577h ; e8 d1 ff ; 0xc05a3 vberom.asm:121
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc05a6 vberom.asm:122
+ jbe short 005b5h ; 76 0b ; 0xc05a8 vberom.asm:123
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc05aa vberom.asm:124
+ shr ah, 003h ; c0 ec 03 ; 0xc05ac vberom.asm:126
+ test AL, strict byte 007h ; a8 07 ; 0xc05af vberom.asm:132
+ je short 005b5h ; 74 02 ; 0xc05b1 vberom.asm:133
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc05b3 vberom.asm:134
+ pop dx ; 5a ; 0xc05b5 vberom.asm:136
+ retn ; c3 ; 0xc05b6 vberom.asm:137
+ ; disGetNextSymbol 0xc05b7 LB 0x350 -> off=0x0 cb=0000000000000026 uValue=00000000000c05b7 '_dispi_get_max_bpp'
+_dispi_get_max_bpp: ; 0xc05b7 LB 0x26
+ push dx ; 52 ; 0xc05b7 vberom.asm:142
+ push bx ; 53 ; 0xc05b8 vberom.asm:143
+ call 005f1h ; e8 35 00 ; 0xc05b9 vberom.asm:144
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc05bc vberom.asm:145
+ or ax, strict byte 00002h ; 83 c8 02 ; 0xc05be vberom.asm:146
+ call 005ddh ; e8 19 00 ; 0xc05c1 vberom.asm:147
+ mov dx, 001ceh ; ba ce 01 ; 0xc05c4 vberom.asm:148
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc05c7 vberom.asm:149
+ call 00570h ; e8 a3 ff ; 0xc05ca vberom.asm:150
+ mov dx, 001cfh ; ba cf 01 ; 0xc05cd vberom.asm:151
+ call 00577h ; e8 a4 ff ; 0xc05d0 vberom.asm:152
+ push ax ; 50 ; 0xc05d3 vberom.asm:153
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc05d4 vberom.asm:154
+ call 005ddh ; e8 04 00 ; 0xc05d6 vberom.asm:155
+ pop ax ; 58 ; 0xc05d9 vberom.asm:156
+ pop bx ; 5b ; 0xc05da vberom.asm:157
+ pop dx ; 5a ; 0xc05db vberom.asm:158
+ retn ; c3 ; 0xc05dc vberom.asm:159
+ ; disGetNextSymbol 0xc05dd LB 0x32a -> off=0x0 cb=0000000000000026 uValue=00000000000c05dd 'dispi_set_enable_'
+dispi_set_enable_: ; 0xc05dd LB 0x26
+ push dx ; 52 ; 0xc05dd vberom.asm:162
+ push ax ; 50 ; 0xc05de vberom.asm:163
+ mov dx, 001ceh ; ba ce 01 ; 0xc05df vberom.asm:164
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc05e2 vberom.asm:165
+ call 00570h ; e8 88 ff ; 0xc05e5 vberom.asm:166
+ pop ax ; 58 ; 0xc05e8 vberom.asm:167
+ mov dx, 001cfh ; ba cf 01 ; 0xc05e9 vberom.asm:168
+ call 00570h ; e8 81 ff ; 0xc05ec vberom.asm:169
+ pop dx ; 5a ; 0xc05ef vberom.asm:170
+ retn ; c3 ; 0xc05f0 vberom.asm:171
+ push dx ; 52 ; 0xc05f1 vberom.asm:174
+ mov dx, 001ceh ; ba ce 01 ; 0xc05f2 vberom.asm:175
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc05f5 vberom.asm:176
+ call 00570h ; e8 75 ff ; 0xc05f8 vberom.asm:177
+ mov dx, 001cfh ; ba cf 01 ; 0xc05fb vberom.asm:178
+ call 00577h ; e8 76 ff ; 0xc05fe vberom.asm:179
+ pop dx ; 5a ; 0xc0601 vberom.asm:180
+ retn ; c3 ; 0xc0602 vberom.asm:181
+ ; disGetNextSymbol 0xc0603 LB 0x304 -> off=0x0 cb=0000000000000026 uValue=00000000000c0603 'dispi_set_bank_'
+dispi_set_bank_: ; 0xc0603 LB 0x26
+ push dx ; 52 ; 0xc0603 vberom.asm:184
+ push ax ; 50 ; 0xc0604 vberom.asm:185
+ mov dx, 001ceh ; ba ce 01 ; 0xc0605 vberom.asm:186
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0608 vberom.asm:187
+ call 00570h ; e8 62 ff ; 0xc060b vberom.asm:188
+ pop ax ; 58 ; 0xc060e vberom.asm:189
+ mov dx, 001cfh ; ba cf 01 ; 0xc060f vberom.asm:190
+ call 00570h ; e8 5b ff ; 0xc0612 vberom.asm:191
+ pop dx ; 5a ; 0xc0615 vberom.asm:192
+ retn ; c3 ; 0xc0616 vberom.asm:193
+ push dx ; 52 ; 0xc0617 vberom.asm:196
+ mov dx, 001ceh ; ba ce 01 ; 0xc0618 vberom.asm:197
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc061b vberom.asm:198
+ call 00570h ; e8 4f ff ; 0xc061e vberom.asm:199
+ mov dx, 001cfh ; ba cf 01 ; 0xc0621 vberom.asm:200
+ call 00577h ; e8 50 ff ; 0xc0624 vberom.asm:201
+ pop dx ; 5a ; 0xc0627 vberom.asm:202
+ retn ; c3 ; 0xc0628 vberom.asm:203
+ ; disGetNextSymbol 0xc0629 LB 0x2de -> off=0x0 cb=00000000000000a9 uValue=00000000000c0629 '_dispi_set_bank_farcall'
+_dispi_set_bank_farcall: ; 0xc0629 LB 0xa9
+ cmp bx, 00100h ; 81 fb 00 01 ; 0xc0629 vberom.asm:206
+ je short 00653h ; 74 24 ; 0xc062d vberom.asm:207
+ db 00bh, 0dbh
+ ; or bx, bx ; 0b db ; 0xc062f vberom.asm:208
+ jne short 00665h ; 75 32 ; 0xc0631 vberom.asm:209
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0633 vberom.asm:210
+ push dx ; 52 ; 0xc0635 vberom.asm:211
+ push ax ; 50 ; 0xc0636 vberom.asm:212
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0637 vberom.asm:213
+ mov dx, 001ceh ; ba ce 01 ; 0xc063a vberom.asm:214
+ call 00570h ; e8 30 ff ; 0xc063d vberom.asm:215
+ pop ax ; 58 ; 0xc0640 vberom.asm:216
+ mov dx, 001cfh ; ba cf 01 ; 0xc0641 vberom.asm:217
+ call 00570h ; e8 29 ff ; 0xc0644 vberom.asm:218
+ call 00577h ; e8 2d ff ; 0xc0647 vberom.asm:219
+ pop dx ; 5a ; 0xc064a vberom.asm:220
+ db 03bh, 0d0h
+ ; cmp dx, ax ; 3b d0 ; 0xc064b vberom.asm:221
+ jne short 00665h ; 75 16 ; 0xc064d vberom.asm:222
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc064f vberom.asm:223
+ retf ; cb ; 0xc0652 vberom.asm:224
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0653 vberom.asm:226
+ mov dx, 001ceh ; ba ce 01 ; 0xc0656 vberom.asm:227
+ call 00570h ; e8 14 ff ; 0xc0659 vberom.asm:228
+ mov dx, 001cfh ; ba cf 01 ; 0xc065c vberom.asm:229
+ call 00577h ; e8 15 ff ; 0xc065f vberom.asm:230
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0662 vberom.asm:231
+ retf ; cb ; 0xc0664 vberom.asm:232
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0665 vberom.asm:234
+ retf ; cb ; 0xc0668 vberom.asm:235
+ push dx ; 52 ; 0xc0669 vberom.asm:238
+ push ax ; 50 ; 0xc066a vberom.asm:239
+ mov dx, 001ceh ; ba ce 01 ; 0xc066b vberom.asm:240
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc066e vberom.asm:241
+ call 00570h ; e8 fc fe ; 0xc0671 vberom.asm:242
+ pop ax ; 58 ; 0xc0674 vberom.asm:243
+ mov dx, 001cfh ; ba cf 01 ; 0xc0675 vberom.asm:244
+ call 00570h ; e8 f5 fe ; 0xc0678 vberom.asm:245
+ pop dx ; 5a ; 0xc067b vberom.asm:246
+ retn ; c3 ; 0xc067c vberom.asm:247
+ push dx ; 52 ; 0xc067d vberom.asm:250
+ mov dx, 001ceh ; ba ce 01 ; 0xc067e vberom.asm:251
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc0681 vberom.asm:252
+ call 00570h ; e8 e9 fe ; 0xc0684 vberom.asm:253
+ mov dx, 001cfh ; ba cf 01 ; 0xc0687 vberom.asm:254
+ call 00577h ; e8 ea fe ; 0xc068a vberom.asm:255
+ pop dx ; 5a ; 0xc068d vberom.asm:256
+ retn ; c3 ; 0xc068e vberom.asm:257
+ push dx ; 52 ; 0xc068f vberom.asm:260
+ push ax ; 50 ; 0xc0690 vberom.asm:261
+ mov dx, 001ceh ; ba ce 01 ; 0xc0691 vberom.asm:262
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc0694 vberom.asm:263
+ call 00570h ; e8 d6 fe ; 0xc0697 vberom.asm:264
+ pop ax ; 58 ; 0xc069a vberom.asm:265
+ mov dx, 001cfh ; ba cf 01 ; 0xc069b vberom.asm:266
+ call 00570h ; e8 cf fe ; 0xc069e vberom.asm:267
+ pop dx ; 5a ; 0xc06a1 vberom.asm:268
+ retn ; c3 ; 0xc06a2 vberom.asm:269
+ push dx ; 52 ; 0xc06a3 vberom.asm:272
+ mov dx, 001ceh ; ba ce 01 ; 0xc06a4 vberom.asm:273
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc06a7 vberom.asm:274
+ call 00570h ; e8 c3 fe ; 0xc06aa vberom.asm:275
+ mov dx, 001cfh ; ba cf 01 ; 0xc06ad vberom.asm:276
+ call 00577h ; e8 c4 fe ; 0xc06b0 vberom.asm:277
+ pop dx ; 5a ; 0xc06b3 vberom.asm:278
+ retn ; c3 ; 0xc06b4 vberom.asm:279
+ push ax ; 50 ; 0xc06b5 vberom.asm:282
+ push bx ; 53 ; 0xc06b6 vberom.asm:283
+ push dx ; 52 ; 0xc06b7 vberom.asm:284
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc06b8 vberom.asm:285
+ call 00596h ; e8 d9 fe ; 0xc06ba vberom.asm:286
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc06bd vberom.asm:287
+ jnbe short 006c3h ; 77 02 ; 0xc06bf vberom.asm:288
+ shr bx, 1 ; d1 eb ; 0xc06c1 vberom.asm:289
+ shr bx, 003h ; c1 eb 03 ; 0xc06c3 vberom.asm:292
+ mov dx, 003d4h ; ba d4 03 ; 0xc06c6 vberom.asm:298
+ db 08ah, 0e3h
+ ; mov ah, bl ; 8a e3 ; 0xc06c9 vberom.asm:299
+ mov AL, strict byte 013h ; b0 13 ; 0xc06cb vberom.asm:300
+ out DX, ax ; ef ; 0xc06cd vberom.asm:301
+ pop dx ; 5a ; 0xc06ce vberom.asm:302
+ pop bx ; 5b ; 0xc06cf vberom.asm:303
+ pop ax ; 58 ; 0xc06d0 vberom.asm:304
+ retn ; c3 ; 0xc06d1 vberom.asm:305
+ ; disGetNextSymbol 0xc06d2 LB 0x235 -> off=0x0 cb=00000000000000ed uValue=00000000000c06d2 '_vga_compat_setup'
+_vga_compat_setup: ; 0xc06d2 LB 0xed
+ push ax ; 50 ; 0xc06d2 vberom.asm:308
+ push dx ; 52 ; 0xc06d3 vberom.asm:309
+ mov dx, 001ceh ; ba ce 01 ; 0xc06d4 vberom.asm:312
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc06d7 vberom.asm:313
+ call 00570h ; e8 93 fe ; 0xc06da vberom.asm:314
+ mov dx, 001cfh ; ba cf 01 ; 0xc06dd vberom.asm:315
+ call 00577h ; e8 94 fe ; 0xc06e0 vberom.asm:316
+ push ax ; 50 ; 0xc06e3 vberom.asm:317
+ mov dx, 003d4h ; ba d4 03 ; 0xc06e4 vberom.asm:318
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc06e7 vberom.asm:319
+ out DX, ax ; ef ; 0xc06ea vberom.asm:320
+ pop ax ; 58 ; 0xc06eb vberom.asm:321
+ push ax ; 50 ; 0xc06ec vberom.asm:322
+ shr ax, 003h ; c1 e8 03 ; 0xc06ed vberom.asm:324
+ dec ax ; 48 ; 0xc06f0 vberom.asm:330
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc06f1 vberom.asm:331
+ mov AL, strict byte 001h ; b0 01 ; 0xc06f3 vberom.asm:332
+ out DX, ax ; ef ; 0xc06f5 vberom.asm:333
+ pop ax ; 58 ; 0xc06f6 vberom.asm:334
+ call 006b5h ; e8 bb ff ; 0xc06f7 vberom.asm:335
+ mov dx, 001ceh ; ba ce 01 ; 0xc06fa vberom.asm:338
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc06fd vberom.asm:339
+ call 00570h ; e8 6d fe ; 0xc0700 vberom.asm:340
+ mov dx, 001cfh ; ba cf 01 ; 0xc0703 vberom.asm:341
+ call 00577h ; e8 6e fe ; 0xc0706 vberom.asm:342
+ dec ax ; 48 ; 0xc0709 vberom.asm:343
+ push ax ; 50 ; 0xc070a vberom.asm:344
+ mov dx, 003d4h ; ba d4 03 ; 0xc070b vberom.asm:345
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc070e vberom.asm:346
+ mov AL, strict byte 012h ; b0 12 ; 0xc0710 vberom.asm:347
+ out DX, ax ; ef ; 0xc0712 vberom.asm:348
+ pop ax ; 58 ; 0xc0713 vberom.asm:349
+ mov AL, strict byte 007h ; b0 07 ; 0xc0714 vberom.asm:350
+ out DX, AL ; ee ; 0xc0716 vberom.asm:351
+ inc dx ; 42 ; 0xc0717 vberom.asm:352
+ in AL, DX ; ec ; 0xc0718 vberom.asm:353
+ and AL, strict byte 0bdh ; 24 bd ; 0xc0719 vberom.asm:354
+ test ah, 001h ; f6 c4 01 ; 0xc071b vberom.asm:355
+ je short 00722h ; 74 02 ; 0xc071e vberom.asm:356
+ or AL, strict byte 002h ; 0c 02 ; 0xc0720 vberom.asm:357
+ test ah, 002h ; f6 c4 02 ; 0xc0722 vberom.asm:359
+ je short 00729h ; 74 02 ; 0xc0725 vberom.asm:360
+ or AL, strict byte 040h ; 0c 40 ; 0xc0727 vberom.asm:361
+ out DX, AL ; ee ; 0xc0729 vberom.asm:363
+ mov dx, 003d4h ; ba d4 03 ; 0xc072a vberom.asm:366
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc072d vberom.asm:367
+ out DX, AL ; ee ; 0xc0730 vberom.asm:368
+ mov dx, 003d5h ; ba d5 03 ; 0xc0731 vberom.asm:369
+ in AL, DX ; ec ; 0xc0734 vberom.asm:370
+ and AL, strict byte 060h ; 24 60 ; 0xc0735 vberom.asm:371
+ out DX, AL ; ee ; 0xc0737 vberom.asm:372
+ mov dx, 003d4h ; ba d4 03 ; 0xc0738 vberom.asm:373
+ mov AL, strict byte 017h ; b0 17 ; 0xc073b vberom.asm:374
+ out DX, AL ; ee ; 0xc073d vberom.asm:375
+ mov dx, 003d5h ; ba d5 03 ; 0xc073e vberom.asm:376
+ in AL, DX ; ec ; 0xc0741 vberom.asm:377
+ or AL, strict byte 003h ; 0c 03 ; 0xc0742 vberom.asm:378
+ out DX, AL ; ee ; 0xc0744 vberom.asm:379
+ mov dx, 003dah ; ba da 03 ; 0xc0745 vberom.asm:380
+ in AL, DX ; ec ; 0xc0748 vberom.asm:381
+ mov dx, 003c0h ; ba c0 03 ; 0xc0749 vberom.asm:382
+ mov AL, strict byte 010h ; b0 10 ; 0xc074c vberom.asm:383
+ out DX, AL ; ee ; 0xc074e vberom.asm:384
+ mov dx, 003c1h ; ba c1 03 ; 0xc074f vberom.asm:385
+ in AL, DX ; ec ; 0xc0752 vberom.asm:386
+ or AL, strict byte 001h ; 0c 01 ; 0xc0753 vberom.asm:387
+ mov dx, 003c0h ; ba c0 03 ; 0xc0755 vberom.asm:388
+ out DX, AL ; ee ; 0xc0758 vberom.asm:389
+ mov AL, strict byte 020h ; b0 20 ; 0xc0759 vberom.asm:390
+ out DX, AL ; ee ; 0xc075b vberom.asm:391
+ mov dx, 003ceh ; ba ce 03 ; 0xc075c vberom.asm:392
+ mov ax, 00506h ; b8 06 05 ; 0xc075f vberom.asm:393
+ out DX, ax ; ef ; 0xc0762 vberom.asm:394
+ mov dx, 003c4h ; ba c4 03 ; 0xc0763 vberom.asm:395
+ mov ax, 00f02h ; b8 02 0f ; 0xc0766 vberom.asm:396
+ out DX, ax ; ef ; 0xc0769 vberom.asm:397
+ mov dx, 001ceh ; ba ce 01 ; 0xc076a vberom.asm:400
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc076d vberom.asm:401
+ call 00570h ; e8 fd fd ; 0xc0770 vberom.asm:402
+ mov dx, 001cfh ; ba cf 01 ; 0xc0773 vberom.asm:403
+ call 00577h ; e8 fe fd ; 0xc0776 vberom.asm:404
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc0779 vberom.asm:405
+ jc short 007bdh ; 72 40 ; 0xc077b vberom.asm:406
+ mov dx, 003d4h ; ba d4 03 ; 0xc077d vberom.asm:407
+ mov AL, strict byte 014h ; b0 14 ; 0xc0780 vberom.asm:408
+ out DX, AL ; ee ; 0xc0782 vberom.asm:409
+ mov dx, 003d5h ; ba d5 03 ; 0xc0783 vberom.asm:410
+ in AL, DX ; ec ; 0xc0786 vberom.asm:411
+ or AL, strict byte 040h ; 0c 40 ; 0xc0787 vberom.asm:412
+ out DX, AL ; ee ; 0xc0789 vberom.asm:413
+ mov dx, 003dah ; ba da 03 ; 0xc078a vberom.asm:414
+ in AL, DX ; ec ; 0xc078d vberom.asm:415
+ mov dx, 003c0h ; ba c0 03 ; 0xc078e vberom.asm:416
+ mov AL, strict byte 010h ; b0 10 ; 0xc0791 vberom.asm:417
+ out DX, AL ; ee ; 0xc0793 vberom.asm:418
+ mov dx, 003c1h ; ba c1 03 ; 0xc0794 vberom.asm:419
+ in AL, DX ; ec ; 0xc0797 vberom.asm:420
+ or AL, strict byte 040h ; 0c 40 ; 0xc0798 vberom.asm:421
+ mov dx, 003c0h ; ba c0 03 ; 0xc079a vberom.asm:422
+ out DX, AL ; ee ; 0xc079d vberom.asm:423
+ mov AL, strict byte 020h ; b0 20 ; 0xc079e vberom.asm:424
+ out DX, AL ; ee ; 0xc07a0 vberom.asm:425
+ mov dx, 003c4h ; ba c4 03 ; 0xc07a1 vberom.asm:426
+ mov AL, strict byte 004h ; b0 04 ; 0xc07a4 vberom.asm:427
+ out DX, AL ; ee ; 0xc07a6 vberom.asm:428
+ mov dx, 003c5h ; ba c5 03 ; 0xc07a7 vberom.asm:429
+ in AL, DX ; ec ; 0xc07aa vberom.asm:430
+ or AL, strict byte 008h ; 0c 08 ; 0xc07ab vberom.asm:431
+ out DX, AL ; ee ; 0xc07ad vberom.asm:432
+ mov dx, 003ceh ; ba ce 03 ; 0xc07ae vberom.asm:433
+ mov AL, strict byte 005h ; b0 05 ; 0xc07b1 vberom.asm:434
+ out DX, AL ; ee ; 0xc07b3 vberom.asm:435
+ mov dx, 003cfh ; ba cf 03 ; 0xc07b4 vberom.asm:436
+ in AL, DX ; ec ; 0xc07b7 vberom.asm:437
+ and AL, strict byte 09fh ; 24 9f ; 0xc07b8 vberom.asm:438
+ or AL, strict byte 040h ; 0c 40 ; 0xc07ba vberom.asm:439
+ out DX, AL ; ee ; 0xc07bc vberom.asm:440
+ pop dx ; 5a ; 0xc07bd vberom.asm:443
+ pop ax ; 58 ; 0xc07be vberom.asm:444
+ ; disGetNextSymbol 0xc07bf LB 0x148 -> off=0x0 cb=0000000000000013 uValue=00000000000c07bf '_vbe_has_vbe_display'
+_vbe_has_vbe_display: ; 0xc07bf LB 0x13
+ push DS ; 1e ; 0xc07bf vberom.asm:450
+ push bx ; 53 ; 0xc07c0 vberom.asm:451
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc07c1 vberom.asm:452
+ mov ds, ax ; 8e d8 ; 0xc07c4 vberom.asm:453
+ mov bx, 000b9h ; bb b9 00 ; 0xc07c6 vberom.asm:454
+ mov al, byte [bx] ; 8a 07 ; 0xc07c9 vberom.asm:455
+ and AL, strict byte 001h ; 24 01 ; 0xc07cb vberom.asm:456
+ db 032h, 0e4h
+ ; xor ah, ah ; 32 e4 ; 0xc07cd vberom.asm:457
+ pop bx ; 5b ; 0xc07cf vberom.asm:458
+ pop DS ; 1f ; 0xc07d0 vberom.asm:459
+ retn ; c3 ; 0xc07d1 vberom.asm:460
+ ; disGetNextSymbol 0xc07d2 LB 0x135 -> off=0x0 cb=0000000000000025 uValue=00000000000c07d2 'vbe_biosfn_return_current_mode'
+vbe_biosfn_return_current_mode: ; 0xc07d2 LB 0x25
+ push DS ; 1e ; 0xc07d2 vberom.asm:473
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc07d3 vberom.asm:474
+ mov ds, ax ; 8e d8 ; 0xc07d6 vberom.asm:475
+ call 005f1h ; e8 16 fe ; 0xc07d8 vberom.asm:476
+ and ax, strict byte 00001h ; 83 e0 01 ; 0xc07db vberom.asm:477
+ je short 007e9h ; 74 09 ; 0xc07de vberom.asm:478
+ mov bx, 000bah ; bb ba 00 ; 0xc07e0 vberom.asm:479
+ mov ax, word [bx] ; 8b 07 ; 0xc07e3 vberom.asm:480
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc07e5 vberom.asm:481
+ jne short 007f2h ; 75 09 ; 0xc07e7 vberom.asm:482
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc07e9 vberom.asm:484
+ mov al, byte [bx] ; 8a 07 ; 0xc07ec vberom.asm:485
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc07ee vberom.asm:486
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc07f0 vberom.asm:487
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc07f2 vberom.asm:489
+ pop DS ; 1f ; 0xc07f5 vberom.asm:490
+ retn ; c3 ; 0xc07f6 vberom.asm:491
+ ; disGetNextSymbol 0xc07f7 LB 0x110 -> off=0x0 cb=000000000000002d uValue=00000000000c07f7 'vbe_biosfn_display_window_control'
+vbe_biosfn_display_window_control: ; 0xc07f7 LB 0x2d
+ cmp bl, 000h ; 80 fb 00 ; 0xc07f7 vberom.asm:515
+ jne short 00820h ; 75 24 ; 0xc07fa vberom.asm:516
+ cmp bh, 001h ; 80 ff 01 ; 0xc07fc vberom.asm:517
+ je short 00817h ; 74 16 ; 0xc07ff vberom.asm:518
+ jc short 00807h ; 72 04 ; 0xc0801 vberom.asm:519
+ mov ax, 00100h ; b8 00 01 ; 0xc0803 vberom.asm:520
+ retn ; c3 ; 0xc0806 vberom.asm:521
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0807 vberom.asm:523
+ call 00603h ; e8 f7 fd ; 0xc0809 vberom.asm:524
+ call 00617h ; e8 08 fe ; 0xc080c vberom.asm:525
+ db 03bh, 0c2h
+ ; cmp ax, dx ; 3b c2 ; 0xc080f vberom.asm:526
+ jne short 00820h ; 75 0d ; 0xc0811 vberom.asm:527
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0813 vberom.asm:528
+ retn ; c3 ; 0xc0816 vberom.asm:529
+ call 00617h ; e8 fd fd ; 0xc0817 vberom.asm:531
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc081a vberom.asm:532
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc081c vberom.asm:533
+ retn ; c3 ; 0xc081f vberom.asm:534
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0820 vberom.asm:536
+ retn ; c3 ; 0xc0823 vberom.asm:537
+ ; disGetNextSymbol 0xc0824 LB 0xe3 -> off=0x0 cb=0000000000000034 uValue=00000000000c0824 'vbe_biosfn_set_get_display_start'
+vbe_biosfn_set_get_display_start: ; 0xc0824 LB 0x34
+ cmp bl, 080h ; 80 fb 80 ; 0xc0824 vberom.asm:577
+ je short 00834h ; 74 0b ; 0xc0827 vberom.asm:578
+ cmp bl, 001h ; 80 fb 01 ; 0xc0829 vberom.asm:579
+ je short 00848h ; 74 1a ; 0xc082c vberom.asm:580
+ jc short 0083ah ; 72 0a ; 0xc082e vberom.asm:581
+ mov ax, 00100h ; b8 00 01 ; 0xc0830 vberom.asm:582
+ retn ; c3 ; 0xc0833 vberom.asm:583
+ call 00589h ; e8 52 fd ; 0xc0834 vberom.asm:585
+ call 0057ch ; e8 42 fd ; 0xc0837 vberom.asm:586
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1 ; 0xc083a vberom.asm:588
+ call 00669h ; e8 2a fe ; 0xc083c vberom.asm:589
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc083f vberom.asm:590
+ call 0068fh ; e8 4b fe ; 0xc0841 vberom.asm:591
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0844 vberom.asm:592
+ retn ; c3 ; 0xc0847 vberom.asm:593
+ call 0067dh ; e8 32 fe ; 0xc0848 vberom.asm:595
+ db 08bh, 0c8h
+ ; mov cx, ax ; 8b c8 ; 0xc084b vberom.asm:596
+ call 006a3h ; e8 53 fe ; 0xc084d vberom.asm:597
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0850 vberom.asm:598
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc0852 vberom.asm:599
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0854 vberom.asm:600
+ retn ; c3 ; 0xc0857 vberom.asm:601
+ ; disGetNextSymbol 0xc0858 LB 0xaf -> off=0x0 cb=0000000000000037 uValue=00000000000c0858 'vbe_biosfn_set_get_dac_palette_format'
+vbe_biosfn_set_get_dac_palette_format: ; 0xc0858 LB 0x37
+ cmp bl, 001h ; 80 fb 01 ; 0xc0858 vberom.asm:616
+ je short 0087bh ; 74 1e ; 0xc085b vberom.asm:617
+ jc short 00863h ; 72 04 ; 0xc085d vberom.asm:618
+ mov ax, 00100h ; b8 00 01 ; 0xc085f vberom.asm:619
+ retn ; c3 ; 0xc0862 vberom.asm:620
+ call 005f1h ; e8 8b fd ; 0xc0863 vberom.asm:622
+ cmp bh, 006h ; 80 ff 06 ; 0xc0866 vberom.asm:623
+ je short 00875h ; 74 0a ; 0xc0869 vberom.asm:624
+ cmp bh, 008h ; 80 ff 08 ; 0xc086b vberom.asm:625
+ jne short 0088bh ; 75 1b ; 0xc086e vberom.asm:626
+ or ax, strict byte 00020h ; 83 c8 20 ; 0xc0870 vberom.asm:627
+ jne short 00878h ; 75 03 ; 0xc0873 vberom.asm:628
+ and ax, strict byte 0ffdfh ; 83 e0 df ; 0xc0875 vberom.asm:630
+ call 005ddh ; e8 62 fd ; 0xc0878 vberom.asm:632
+ mov BH, strict byte 006h ; b7 06 ; 0xc087b vberom.asm:634
+ call 005f1h ; e8 71 fd ; 0xc087d vberom.asm:635
+ and ax, strict byte 00020h ; 83 e0 20 ; 0xc0880 vberom.asm:636
+ je short 00887h ; 74 02 ; 0xc0883 vberom.asm:637
+ mov BH, strict byte 008h ; b7 08 ; 0xc0885 vberom.asm:638
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0887 vberom.asm:640
+ retn ; c3 ; 0xc088a vberom.asm:641
+ mov ax, 0014fh ; b8 4f 01 ; 0xc088b vberom.asm:643
+ retn ; c3 ; 0xc088e vberom.asm:644
+ ; disGetNextSymbol 0xc088f LB 0x78 -> off=0x0 cb=0000000000000064 uValue=00000000000c088f 'vbe_biosfn_set_get_palette_data'
+vbe_biosfn_set_get_palette_data: ; 0xc088f LB 0x64
+ test bl, bl ; 84 db ; 0xc088f vberom.asm:683
+ je short 008a2h ; 74 0f ; 0xc0891 vberom.asm:684
+ cmp bl, 001h ; 80 fb 01 ; 0xc0893 vberom.asm:685
+ je short 008cah ; 74 32 ; 0xc0896 vberom.asm:686
+ cmp bl, 003h ; 80 fb 03 ; 0xc0898 vberom.asm:687
+ jbe short 008efh ; 76 52 ; 0xc089b vberom.asm:688
+ cmp bl, 080h ; 80 fb 80 ; 0xc089d vberom.asm:689
+ jne short 008ebh ; 75 49 ; 0xc08a0 vberom.asm:690
+ pushad ; 66 60 ; 0xc08a2 vberom.asm:141
+ push DS ; 1e ; 0xc08a4 vberom.asm:696
+ push ES ; 06 ; 0xc08a5 vberom.asm:697
+ pop DS ; 1f ; 0xc08a6 vberom.asm:698
+ db 08ah, 0c2h
+ ; mov al, dl ; 8a c2 ; 0xc08a7 vberom.asm:699
+ mov dx, 003c8h ; ba c8 03 ; 0xc08a9 vberom.asm:700
+ out DX, AL ; ee ; 0xc08ac vberom.asm:701
+ inc dx ; 42 ; 0xc08ad vberom.asm:702
+ db 08bh, 0f7h
+ ; mov si, di ; 8b f7 ; 0xc08ae vberom.asm:703
+ lodsd ; 66 ad ; 0xc08b0 vberom.asm:706
+ ror eax, 010h ; 66 c1 c8 10 ; 0xc08b2 vberom.asm:707
+ out DX, AL ; ee ; 0xc08b6 vberom.asm:708
+ rol eax, 008h ; 66 c1 c0 08 ; 0xc08b7 vberom.asm:709
+ out DX, AL ; ee ; 0xc08bb vberom.asm:710
+ rol eax, 008h ; 66 c1 c0 08 ; 0xc08bc vberom.asm:711
+ out DX, AL ; ee ; 0xc08c0 vberom.asm:712
+ loop 008b0h ; e2 ed ; 0xc08c1 vberom.asm:723
+ pop DS ; 1f ; 0xc08c3 vberom.asm:724
+ popad ; 66 61 ; 0xc08c4 vberom.asm:160
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc08c6 vberom.asm:727
+ retn ; c3 ; 0xc08c9 vberom.asm:728
+ pushad ; 66 60 ; 0xc08ca vberom.asm:141
+ db 08ah, 0c2h
+ ; mov al, dl ; 8a c2 ; 0xc08cc vberom.asm:732
+ mov dx, 003c7h ; ba c7 03 ; 0xc08ce vberom.asm:733
+ out DX, AL ; ee ; 0xc08d1 vberom.asm:734
+ add dl, 002h ; 80 c2 02 ; 0xc08d2 vberom.asm:735
+ db 066h, 033h, 0c0h
+ ; xor eax, eax ; 66 33 c0 ; 0xc08d5 vberom.asm:738
+ in AL, DX ; ec ; 0xc08d8 vberom.asm:739
+ sal eax, 008h ; 66 c1 e0 08 ; 0xc08d9 vberom.asm:740
+ in AL, DX ; ec ; 0xc08dd vberom.asm:741
+ sal eax, 008h ; 66 c1 e0 08 ; 0xc08de vberom.asm:742
+ in AL, DX ; ec ; 0xc08e2 vberom.asm:743
+ stosd ; 66 ab ; 0xc08e3 vberom.asm:744
+ loop 008d5h ; e2 ee ; 0xc08e5 vberom.asm:757
+ popad ; 66 61 ; 0xc08e7 vberom.asm:160
+ jmp short 008c6h ; eb db ; 0xc08e9 vberom.asm:759
+ mov ax, 0014fh ; b8 4f 01 ; 0xc08eb vberom.asm:762
+ retn ; c3 ; 0xc08ee vberom.asm:763
+ mov ax, 0024fh ; b8 4f 02 ; 0xc08ef vberom.asm:765
+ retn ; c3 ; 0xc08f2 vberom.asm:766
+ ; disGetNextSymbol 0xc08f3 LB 0x14 -> off=0x0 cb=0000000000000014 uValue=00000000000c08f3 'vbe_biosfn_return_protected_mode_interface'
+vbe_biosfn_return_protected_mode_interface: ; 0xc08f3 LB 0x14
+ test bl, bl ; 84 db ; 0xc08f3 vberom.asm:780
+ jne short 00903h ; 75 0c ; 0xc08f5 vberom.asm:781
+ push CS ; 0e ; 0xc08f7 vberom.asm:782
+ pop ES ; 07 ; 0xc08f8 vberom.asm:783
+ mov di, 04640h ; bf 40 46 ; 0xc08f9 vberom.asm:784
+ mov cx, 00115h ; b9 15 01 ; 0xc08fc vberom.asm:785
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc08ff vberom.asm:786
+ retn ; c3 ; 0xc0902 vberom.asm:787
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0903 vberom.asm:789
+ retn ; c3 ; 0xc0906 vberom.asm:790
+
+ ; Padding 0xe9 bytes at 0xc0907
+ times 233 db 0
+
+section _TEXT progbits vstart=0x9f0 align=1 ; size=0x38c9 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc09f0 LB 0x38c9 -> off=0x0 cb=000000000000001a uValue=00000000000c09f0 'set_int_vector'
+set_int_vector: ; 0xc09f0 LB 0x1a
+ push dx ; 52 ; 0xc09f0 vgabios.c:87
+ push bp ; 55 ; 0xc09f1
+ mov bp, sp ; 89 e5 ; 0xc09f2
+ mov dx, bx ; 89 da ; 0xc09f4
+ movzx bx, al ; 0f b6 d8 ; 0xc09f6 vgabios.c:91
+ sal bx, 002h ; c1 e3 02 ; 0xc09f9
+ xor ax, ax ; 31 c0 ; 0xc09fc
+ mov es, ax ; 8e c0 ; 0xc09fe
+ mov word [es:bx], dx ; 26 89 17 ; 0xc0a00
+ mov word [es:bx+002h], cx ; 26 89 4f 02 ; 0xc0a03
+ pop bp ; 5d ; 0xc0a07 vgabios.c:92
+ pop dx ; 5a ; 0xc0a08
+ retn ; c3 ; 0xc0a09
+ ; disGetNextSymbol 0xc0a0a LB 0x38af -> off=0x0 cb=000000000000001c uValue=00000000000c0a0a 'init_vga_card'
+init_vga_card: ; 0xc0a0a LB 0x1c
+ push bp ; 55 ; 0xc0a0a vgabios.c:143
+ mov bp, sp ; 89 e5 ; 0xc0a0b
+ push dx ; 52 ; 0xc0a0d
+ mov AL, strict byte 0c3h ; b0 c3 ; 0xc0a0e vgabios.c:146
+ mov dx, 003c2h ; ba c2 03 ; 0xc0a10
+ out DX, AL ; ee ; 0xc0a13
+ mov AL, strict byte 004h ; b0 04 ; 0xc0a14 vgabios.c:149
+ mov dx, 003c4h ; ba c4 03 ; 0xc0a16
+ out DX, AL ; ee ; 0xc0a19
+ mov AL, strict byte 002h ; b0 02 ; 0xc0a1a vgabios.c:150
+ mov dx, 003c5h ; ba c5 03 ; 0xc0a1c
+ out DX, AL ; ee ; 0xc0a1f
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc0a20 vgabios.c:155
+ pop dx ; 5a ; 0xc0a23
+ pop bp ; 5d ; 0xc0a24
+ retn ; c3 ; 0xc0a25
+ ; disGetNextSymbol 0xc0a26 LB 0x3893 -> off=0x0 cb=000000000000003e uValue=00000000000c0a26 'init_bios_area'
+init_bios_area: ; 0xc0a26 LB 0x3e
+ push bx ; 53 ; 0xc0a26 vgabios.c:221
+ push bp ; 55 ; 0xc0a27
+ mov bp, sp ; 89 e5 ; 0xc0a28
+ xor bx, bx ; 31 db ; 0xc0a2a vgabios.c:225
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0a2c
+ mov es, ax ; 8e c0 ; 0xc0a2f
+ mov al, byte [es:bx+010h] ; 26 8a 47 10 ; 0xc0a31 vgabios.c:228
+ and AL, strict byte 0cfh ; 24 cf ; 0xc0a35
+ or AL, strict byte 020h ; 0c 20 ; 0xc0a37
+ mov byte [es:bx+010h], al ; 26 88 47 10 ; 0xc0a39
+ mov byte [es:bx+00085h], 010h ; 26 c6 87 85 00 10 ; 0xc0a3d vgabios.c:232
+ mov word [es:bx+00087h], 0f960h ; 26 c7 87 87 00 60 f9 ; 0xc0a43 vgabios.c:234
+ mov byte [es:bx+00089h], 051h ; 26 c6 87 89 00 51 ; 0xc0a4a vgabios.c:238
+ mov byte [es:bx+065h], 009h ; 26 c6 47 65 09 ; 0xc0a50 vgabios.c:240
+ mov word [es:bx+000a8h], 05550h ; 26 c7 87 a8 00 50 55 ; 0xc0a55 vgabios.c:242
+ mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5c
+ pop bp ; 5d ; 0xc0a61 vgabios.c:243
+ pop bx ; 5b ; 0xc0a62
+ retn ; c3 ; 0xc0a63
+ ; disGetNextSymbol 0xc0a64 LB 0x3855 -> off=0x0 cb=000000000000002f uValue=00000000000c0a64 'vgabios_init_func'
+vgabios_init_func: ; 0xc0a64 LB 0x2f
+ push bp ; 55 ; 0xc0a64 vgabios.c:250
+ mov bp, sp ; 89 e5 ; 0xc0a65
+ call 00a0ah ; e8 a0 ff ; 0xc0a67 vgabios.c:252
+ call 00a26h ; e8 b9 ff ; 0xc0a6a vgabios.c:253
+ call 03c5ch ; e8 ec 31 ; 0xc0a6d vgabios.c:255
+ mov bx, strict word 00028h ; bb 28 00 ; 0xc0a70 vgabios.c:257
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0a73
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc0a76
+ call 009f0h ; e8 74 ff ; 0xc0a79
+ mov bx, strict word 00028h ; bb 28 00 ; 0xc0a7c vgabios.c:258
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0a7f
+ mov ax, strict word 0006dh ; b8 6d 00 ; 0xc0a82
+ call 009f0h ; e8 68 ff ; 0xc0a85
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc0a88 vgabios.c:284
+ db 032h, 0e4h
+ ; xor ah, ah ; 32 e4 ; 0xc0a8b
+ int 010h ; cd 10 ; 0xc0a8d
+ mov sp, bp ; 89 ec ; 0xc0a8f vgabios.c:287
+ pop bp ; 5d ; 0xc0a91
+ retf ; cb ; 0xc0a92
+ ; disGetNextSymbol 0xc0a93 LB 0x3826 -> off=0x0 cb=000000000000003f uValue=00000000000c0a93 'vga_get_cursor_pos'
+vga_get_cursor_pos: ; 0xc0a93 LB 0x3f
+ push si ; 56 ; 0xc0a93 vgabios.c:356
+ push di ; 57 ; 0xc0a94
+ push bp ; 55 ; 0xc0a95
+ mov bp, sp ; 89 e5 ; 0xc0a96
+ mov si, dx ; 89 d6 ; 0xc0a98
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc0a9a vgabios.c:358
+ jbe short 00aach ; 76 0e ; 0xc0a9c
+ push SS ; 16 ; 0xc0a9e vgabios.c:359
+ pop ES ; 07 ; 0xc0a9f
+ mov word [es:si], strict word 00000h ; 26 c7 04 00 00 ; 0xc0aa0
+ mov word [es:bx], strict word 00000h ; 26 c7 07 00 00 ; 0xc0aa5 vgabios.c:360
+ jmp short 00aceh ; eb 22 ; 0xc0aaa vgabios.c:361
+ mov di, strict word 00060h ; bf 60 00 ; 0xc0aac vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc0aaf
+ mov es, dx ; 8e c2 ; 0xc0ab2
+ mov di, word [es:di] ; 26 8b 3d ; 0xc0ab4
+ push SS ; 16 ; 0xc0ab7 vgabios.c:58
+ pop ES ; 07 ; 0xc0ab8
+ mov word [es:si], di ; 26 89 3c ; 0xc0ab9
+ movzx si, al ; 0f b6 f0 ; 0xc0abc vgabios.c:364
+ add si, si ; 01 f6 ; 0xc0abf
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc0ac1
+ mov es, dx ; 8e c2 ; 0xc0ac4 vgabios.c:57
+ mov si, word [es:si] ; 26 8b 34 ; 0xc0ac6
+ push SS ; 16 ; 0xc0ac9 vgabios.c:58
+ pop ES ; 07 ; 0xc0aca
+ mov word [es:bx], si ; 26 89 37 ; 0xc0acb
+ pop bp ; 5d ; 0xc0ace vgabios.c:366
+ pop di ; 5f ; 0xc0acf
+ pop si ; 5e ; 0xc0ad0
+ retn ; c3 ; 0xc0ad1
+ ; disGetNextSymbol 0xc0ad2 LB 0x37e7 -> off=0x0 cb=000000000000005d uValue=00000000000c0ad2 'vga_find_glyph'
+vga_find_glyph: ; 0xc0ad2 LB 0x5d
+ push bp ; 55 ; 0xc0ad2 vgabios.c:369
+ mov bp, sp ; 89 e5 ; 0xc0ad3
+ push si ; 56 ; 0xc0ad5
+ push di ; 57 ; 0xc0ad6
+ push ax ; 50 ; 0xc0ad7
+ push ax ; 50 ; 0xc0ad8
+ push dx ; 52 ; 0xc0ad9
+ push bx ; 53 ; 0xc0ada
+ mov bl, cl ; 88 cb ; 0xc0adb
+ mov word [bp-006h], strict word 00000h ; c7 46 fa 00 00 ; 0xc0add vgabios.c:371
+ dec word [bp+004h] ; ff 4e 04 ; 0xc0ae2 vgabios.c:373
+ cmp word [bp+004h], strict byte 0ffffh ; 83 7e 04 ff ; 0xc0ae5
+ je short 00b23h ; 74 38 ; 0xc0ae9
+ movzx cx, byte [bp+006h] ; 0f b6 4e 06 ; 0xc0aeb vgabios.c:374
+ mov dx, ss ; 8c d2 ; 0xc0aef
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc0af1
+ mov di, word [bp-008h] ; 8b 7e f8 ; 0xc0af4
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc0af7
+ push DS ; 1e ; 0xc0afa
+ mov ds, dx ; 8e da ; 0xc0afb
+ rep cmpsb ; f3 a6 ; 0xc0afd
+ pop DS ; 1f ; 0xc0aff
+ mov ax, strict word 00000h ; b8 00 00 ; 0xc0b00
+ je near 00b09h ; 0f 84 02 00 ; 0xc0b03
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc0b07
+ test ax, ax ; 85 c0 ; 0xc0b09
+ jne short 00b18h ; 75 0b ; 0xc0b0b
+ movzx ax, bl ; 0f b6 c3 ; 0xc0b0d vgabios.c:375
+ or ah, 080h ; 80 cc 80 ; 0xc0b10
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0b13
+ jmp short 00b23h ; eb 0b ; 0xc0b16 vgabios.c:376
+ movzx ax, byte [bp+006h] ; 0f b6 46 06 ; 0xc0b18 vgabios.c:378
+ add word [bp-008h], ax ; 01 46 f8 ; 0xc0b1c
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc0b1f vgabios.c:379
+ jmp short 00ae2h ; eb bf ; 0xc0b21 vgabios.c:380
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc0b23 vgabios.c:382
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0b26
+ pop di ; 5f ; 0xc0b29
+ pop si ; 5e ; 0xc0b2a
+ pop bp ; 5d ; 0xc0b2b
+ retn 00004h ; c2 04 00 ; 0xc0b2c
+ ; disGetNextSymbol 0xc0b2f LB 0x378a -> off=0x0 cb=0000000000000046 uValue=00000000000c0b2f 'vga_read_glyph_planar'
+vga_read_glyph_planar: ; 0xc0b2f LB 0x46
+ push bp ; 55 ; 0xc0b2f vgabios.c:384
+ mov bp, sp ; 89 e5 ; 0xc0b30
+ push si ; 56 ; 0xc0b32
+ push di ; 57 ; 0xc0b33
+ push ax ; 50 ; 0xc0b34
+ push ax ; 50 ; 0xc0b35
+ mov si, ax ; 89 c6 ; 0xc0b36
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc0b38
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc0b3b
+ mov bx, cx ; 89 cb ; 0xc0b3e
+ mov ax, 00805h ; b8 05 08 ; 0xc0b40 vgabios.c:391
+ mov dx, 003ceh ; ba ce 03 ; 0xc0b43
+ out DX, ax ; ef ; 0xc0b46
+ dec byte [bp+004h] ; fe 4e 04 ; 0xc0b47 vgabios.c:393
+ cmp byte [bp+004h], 0ffh ; 80 7e 04 ff ; 0xc0b4a
+ je short 00b65h ; 74 15 ; 0xc0b4e
+ mov es, [bp-006h] ; 8e 46 fa ; 0xc0b50 vgabios.c:394
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc0b53
+ not al ; f6 d0 ; 0xc0b56
+ mov di, bx ; 89 df ; 0xc0b58
+ inc bx ; 43 ; 0xc0b5a
+ push SS ; 16 ; 0xc0b5b
+ pop ES ; 07 ; 0xc0b5c
+ mov byte [es:di], al ; 26 88 05 ; 0xc0b5d
+ add si, word [bp-008h] ; 03 76 f8 ; 0xc0b60 vgabios.c:395
+ jmp short 00b47h ; eb e2 ; 0xc0b63 vgabios.c:396
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0b65 vgabios.c:399
+ mov dx, 003ceh ; ba ce 03 ; 0xc0b68
+ out DX, ax ; ef ; 0xc0b6b
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0b6c vgabios.c:400
+ pop di ; 5f ; 0xc0b6f
+ pop si ; 5e ; 0xc0b70
+ pop bp ; 5d ; 0xc0b71
+ retn 00002h ; c2 02 00 ; 0xc0b72
+ ; disGetNextSymbol 0xc0b75 LB 0x3744 -> off=0x0 cb=000000000000002a uValue=00000000000c0b75 'vga_char_ofs_planar'
+vga_char_ofs_planar: ; 0xc0b75 LB 0x2a
+ push bp ; 55 ; 0xc0b75 vgabios.c:402
+ mov bp, sp ; 89 e5 ; 0xc0b76
+ xor dh, dh ; 30 f6 ; 0xc0b78 vgabios.c:406
+ imul bx, dx ; 0f af da ; 0xc0b7a
+ movzx dx, byte [bp+004h] ; 0f b6 56 04 ; 0xc0b7d
+ imul bx, dx ; 0f af da ; 0xc0b81
+ xor ah, ah ; 30 e4 ; 0xc0b84
+ add ax, bx ; 01 d8 ; 0xc0b86
+ mov bx, strict word 0004ch ; bb 4c 00 ; 0xc0b88 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc0b8b
+ mov es, dx ; 8e c2 ; 0xc0b8e
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc0b90
+ movzx bx, cl ; 0f b6 d9 ; 0xc0b93 vgabios.c:58
+ imul dx, bx ; 0f af d3 ; 0xc0b96
+ add ax, dx ; 01 d0 ; 0xc0b99
+ pop bp ; 5d ; 0xc0b9b vgabios.c:410
+ retn 00002h ; c2 02 00 ; 0xc0b9c
+ ; disGetNextSymbol 0xc0b9f LB 0x371a -> off=0x0 cb=000000000000003e uValue=00000000000c0b9f 'vga_read_char_planar'
+vga_read_char_planar: ; 0xc0b9f LB 0x3e
+ push bp ; 55 ; 0xc0b9f vgabios.c:412
+ mov bp, sp ; 89 e5 ; 0xc0ba0
+ push cx ; 51 ; 0xc0ba2
+ push si ; 56 ; 0xc0ba3
+ push di ; 57 ; 0xc0ba4
+ sub sp, strict byte 00010h ; 83 ec 10 ; 0xc0ba5
+ mov si, ax ; 89 c6 ; 0xc0ba8
+ mov ax, dx ; 89 d0 ; 0xc0baa
+ movzx di, bl ; 0f b6 fb ; 0xc0bac vgabios.c:416
+ push di ; 57 ; 0xc0baf
+ lea cx, [bp-016h] ; 8d 4e ea ; 0xc0bb0
+ mov bx, si ; 89 f3 ; 0xc0bb3
+ mov dx, 0a000h ; ba 00 a0 ; 0xc0bb5
+ call 00b2fh ; e8 74 ff ; 0xc0bb8
+ push di ; 57 ; 0xc0bbb vgabios.c:419
+ push 00100h ; 68 00 01 ; 0xc0bbc
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0bbf vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0bc2
+ mov es, ax ; 8e c0 ; 0xc0bc4
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0bc6
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0bc9
+ xor cx, cx ; 31 c9 ; 0xc0bcd vgabios.c:68
+ lea bx, [bp-016h] ; 8d 5e ea ; 0xc0bcf
+ call 00ad2h ; e8 fd fe ; 0xc0bd2
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc0bd5 vgabios.c:420
+ pop di ; 5f ; 0xc0bd8
+ pop si ; 5e ; 0xc0bd9
+ pop cx ; 59 ; 0xc0bda
+ pop bp ; 5d ; 0xc0bdb
+ retn ; c3 ; 0xc0bdc
+ ; disGetNextSymbol 0xc0bdd LB 0x36dc -> off=0x0 cb=000000000000001a uValue=00000000000c0bdd 'vga_char_ofs_linear'
+vga_char_ofs_linear: ; 0xc0bdd LB 0x1a
+ push bp ; 55 ; 0xc0bdd vgabios.c:422
+ mov bp, sp ; 89 e5 ; 0xc0bde
+ xor dh, dh ; 30 f6 ; 0xc0be0 vgabios.c:426
+ imul dx, bx ; 0f af d3 ; 0xc0be2
+ movzx bx, byte [bp+004h] ; 0f b6 5e 04 ; 0xc0be5
+ imul bx, dx ; 0f af da ; 0xc0be9
+ xor ah, ah ; 30 e4 ; 0xc0bec
+ add ax, bx ; 01 d8 ; 0xc0bee
+ sal ax, 003h ; c1 e0 03 ; 0xc0bf0 vgabios.c:427
+ pop bp ; 5d ; 0xc0bf3 vgabios.c:429
+ retn 00002h ; c2 02 00 ; 0xc0bf4
+ ; disGetNextSymbol 0xc0bf7 LB 0x36c2 -> off=0x0 cb=000000000000004b uValue=00000000000c0bf7 'vga_read_glyph_linear'
+vga_read_glyph_linear: ; 0xc0bf7 LB 0x4b
+ push si ; 56 ; 0xc0bf7 vgabios.c:431
+ push di ; 57 ; 0xc0bf8
+ enter 00004h, 000h ; c8 04 00 00 ; 0xc0bf9
+ mov si, ax ; 89 c6 ; 0xc0bfd
+ mov word [bp-002h], dx ; 89 56 fe ; 0xc0bff
+ mov word [bp-004h], bx ; 89 5e fc ; 0xc0c02
+ mov bx, cx ; 89 cb ; 0xc0c05
+ dec byte [bp+008h] ; fe 4e 08 ; 0xc0c07 vgabios.c:437
+ cmp byte [bp+008h], 0ffh ; 80 7e 08 ff ; 0xc0c0a
+ je short 00c3ch ; 74 2c ; 0xc0c0e
+ xor dh, dh ; 30 f6 ; 0xc0c10 vgabios.c:438
+ mov DL, strict byte 080h ; b2 80 ; 0xc0c12 vgabios.c:439
+ xor ax, ax ; 31 c0 ; 0xc0c14 vgabios.c:440
+ jmp short 00c1dh ; eb 05 ; 0xc0c16
+ cmp ax, strict word 00008h ; 3d 08 00 ; 0xc0c18
+ jnl short 00c31h ; 7d 14 ; 0xc0c1b
+ mov es, [bp-002h] ; 8e 46 fe ; 0xc0c1d vgabios.c:441
+ mov di, si ; 89 f7 ; 0xc0c20
+ add di, ax ; 01 c7 ; 0xc0c22
+ cmp byte [es:di], 000h ; 26 80 3d 00 ; 0xc0c24
+ je short 00c2ch ; 74 02 ; 0xc0c28
+ or dh, dl ; 08 d6 ; 0xc0c2a vgabios.c:442
+ shr dl, 1 ; d0 ea ; 0xc0c2c vgabios.c:443
+ inc ax ; 40 ; 0xc0c2e vgabios.c:444
+ jmp short 00c18h ; eb e7 ; 0xc0c2f
+ mov di, bx ; 89 df ; 0xc0c31 vgabios.c:445
+ inc bx ; 43 ; 0xc0c33
+ mov byte [ss:di], dh ; 36 88 35 ; 0xc0c34
+ add si, word [bp-004h] ; 03 76 fc ; 0xc0c37 vgabios.c:446
+ jmp short 00c07h ; eb cb ; 0xc0c3a vgabios.c:447
+ leave ; c9 ; 0xc0c3c vgabios.c:448
+ pop di ; 5f ; 0xc0c3d
+ pop si ; 5e ; 0xc0c3e
+ retn 00002h ; c2 02 00 ; 0xc0c3f
+ ; disGetNextSymbol 0xc0c42 LB 0x3677 -> off=0x0 cb=000000000000003f uValue=00000000000c0c42 'vga_read_char_linear'
+vga_read_char_linear: ; 0xc0c42 LB 0x3f
+ push bp ; 55 ; 0xc0c42 vgabios.c:450
+ mov bp, sp ; 89 e5 ; 0xc0c43
+ push cx ; 51 ; 0xc0c45
+ push si ; 56 ; 0xc0c46
+ sub sp, strict byte 00010h ; 83 ec 10 ; 0xc0c47
+ mov cx, ax ; 89 c1 ; 0xc0c4a
+ mov ax, dx ; 89 d0 ; 0xc0c4c
+ movzx si, bl ; 0f b6 f3 ; 0xc0c4e vgabios.c:454
+ push si ; 56 ; 0xc0c51
+ mov bx, cx ; 89 cb ; 0xc0c52
+ sal bx, 003h ; c1 e3 03 ; 0xc0c54
+ lea cx, [bp-014h] ; 8d 4e ec ; 0xc0c57
+ mov dx, 0a000h ; ba 00 a0 ; 0xc0c5a
+ call 00bf7h ; e8 97 ff ; 0xc0c5d
+ push si ; 56 ; 0xc0c60 vgabios.c:457
+ push 00100h ; 68 00 01 ; 0xc0c61
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0c64 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0c67
+ mov es, ax ; 8e c0 ; 0xc0c69
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0c6b
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0c6e
+ xor cx, cx ; 31 c9 ; 0xc0c72 vgabios.c:68
+ lea bx, [bp-014h] ; 8d 5e ec ; 0xc0c74
+ call 00ad2h ; e8 58 fe ; 0xc0c77
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0c7a vgabios.c:458
+ pop si ; 5e ; 0xc0c7d
+ pop cx ; 59 ; 0xc0c7e
+ pop bp ; 5d ; 0xc0c7f
+ retn ; c3 ; 0xc0c80
+ ; disGetNextSymbol 0xc0c81 LB 0x3638 -> off=0x0 cb=0000000000000035 uValue=00000000000c0c81 'vga_read_2bpp_char'
+vga_read_2bpp_char: ; 0xc0c81 LB 0x35
+ push bp ; 55 ; 0xc0c81 vgabios.c:460
+ mov bp, sp ; 89 e5 ; 0xc0c82
+ push bx ; 53 ; 0xc0c84
+ push cx ; 51 ; 0xc0c85
+ mov bx, ax ; 89 c3 ; 0xc0c86
+ mov es, dx ; 8e c2 ; 0xc0c88
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0c8a vgabios.c:466
+ mov DH, strict byte 080h ; b6 80 ; 0xc0c8d vgabios.c:467
+ xor dl, dl ; 30 d2 ; 0xc0c8f vgabios.c:468
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0c91 vgabios.c:469
+ xchg ah, al ; 86 c4 ; 0xc0c94
+ xor bx, bx ; 31 db ; 0xc0c96 vgabios.c:471
+ jmp short 00c9fh ; eb 05 ; 0xc0c98
+ cmp bx, strict byte 00008h ; 83 fb 08 ; 0xc0c9a
+ jnl short 00cadh ; 7d 0e ; 0xc0c9d
+ test ax, cx ; 85 c8 ; 0xc0c9f vgabios.c:472
+ je short 00ca5h ; 74 02 ; 0xc0ca1
+ or dl, dh ; 08 f2 ; 0xc0ca3 vgabios.c:473
+ shr dh, 1 ; d0 ee ; 0xc0ca5 vgabios.c:474
+ shr cx, 002h ; c1 e9 02 ; 0xc0ca7 vgabios.c:475
+ inc bx ; 43 ; 0xc0caa vgabios.c:476
+ jmp short 00c9ah ; eb ed ; 0xc0cab
+ mov al, dl ; 88 d0 ; 0xc0cad vgabios.c:478
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0caf
+ pop cx ; 59 ; 0xc0cb2
+ pop bx ; 5b ; 0xc0cb3
+ pop bp ; 5d ; 0xc0cb4
+ retn ; c3 ; 0xc0cb5
+ ; disGetNextSymbol 0xc0cb6 LB 0x3603 -> off=0x0 cb=0000000000000084 uValue=00000000000c0cb6 'vga_read_glyph_cga'
+vga_read_glyph_cga: ; 0xc0cb6 LB 0x84
+ push bp ; 55 ; 0xc0cb6 vgabios.c:480
+ mov bp, sp ; 89 e5 ; 0xc0cb7
+ push cx ; 51 ; 0xc0cb9
+ push si ; 56 ; 0xc0cba
+ push di ; 57 ; 0xc0cbb
+ push ax ; 50 ; 0xc0cbc
+ mov si, dx ; 89 d6 ; 0xc0cbd
+ cmp bl, 006h ; 80 fb 06 ; 0xc0cbf vgabios.c:488
+ je short 00cfeh ; 74 3a ; 0xc0cc2
+ mov bx, ax ; 89 c3 ; 0xc0cc4 vgabios.c:490
+ add bx, ax ; 01 c3 ; 0xc0cc6
+ mov word [bp-008h], 0b800h ; c7 46 f8 00 b8 ; 0xc0cc8
+ xor cx, cx ; 31 c9 ; 0xc0ccd vgabios.c:492
+ jmp short 00cd6h ; eb 05 ; 0xc0ccf
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc0cd1
+ jnl short 00d32h ; 7d 5c ; 0xc0cd4
+ mov ax, bx ; 89 d8 ; 0xc0cd6 vgabios.c:493
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc0cd8
+ call 00c81h ; e8 a3 ff ; 0xc0cdb
+ mov di, si ; 89 f7 ; 0xc0cde
+ inc si ; 46 ; 0xc0ce0
+ push SS ; 16 ; 0xc0ce1
+ pop ES ; 07 ; 0xc0ce2
+ mov byte [es:di], al ; 26 88 05 ; 0xc0ce3
+ lea ax, [bx+02000h] ; 8d 87 00 20 ; 0xc0ce6 vgabios.c:494
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc0cea
+ call 00c81h ; e8 91 ff ; 0xc0ced
+ mov di, si ; 89 f7 ; 0xc0cf0
+ inc si ; 46 ; 0xc0cf2
+ push SS ; 16 ; 0xc0cf3
+ pop ES ; 07 ; 0xc0cf4
+ mov byte [es:di], al ; 26 88 05 ; 0xc0cf5
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc0cf8 vgabios.c:495
+ inc cx ; 41 ; 0xc0cfb vgabios.c:496
+ jmp short 00cd1h ; eb d3 ; 0xc0cfc
+ mov bx, ax ; 89 c3 ; 0xc0cfe vgabios.c:498
+ mov word [bp-008h], 0b800h ; c7 46 f8 00 b8 ; 0xc0d00
+ xor cx, cx ; 31 c9 ; 0xc0d05 vgabios.c:499
+ jmp short 00d0eh ; eb 05 ; 0xc0d07
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc0d09
+ jnl short 00d32h ; 7d 24 ; 0xc0d0c
+ mov di, si ; 89 f7 ; 0xc0d0e vgabios.c:500
+ inc si ; 46 ; 0xc0d10
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc0d11
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0d14
+ push SS ; 16 ; 0xc0d17
+ pop ES ; 07 ; 0xc0d18
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d19
+ mov di, si ; 89 f7 ; 0xc0d1c vgabios.c:501
+ inc si ; 46 ; 0xc0d1e
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc0d1f
+ mov al, byte [es:bx+02000h] ; 26 8a 87 00 20 ; 0xc0d22
+ push SS ; 16 ; 0xc0d27
+ pop ES ; 07 ; 0xc0d28
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d29
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc0d2c vgabios.c:502
+ inc cx ; 41 ; 0xc0d2f vgabios.c:503
+ jmp short 00d09h ; eb d7 ; 0xc0d30
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc0d32 vgabios.c:505
+ pop di ; 5f ; 0xc0d35
+ pop si ; 5e ; 0xc0d36
+ pop cx ; 59 ; 0xc0d37
+ pop bp ; 5d ; 0xc0d38
+ retn ; c3 ; 0xc0d39
+ ; disGetNextSymbol 0xc0d3a LB 0x357f -> off=0x0 cb=0000000000000011 uValue=00000000000c0d3a 'vga_char_ofs_cga'
+vga_char_ofs_cga: ; 0xc0d3a LB 0x11
+ push bp ; 55 ; 0xc0d3a vgabios.c:507
+ mov bp, sp ; 89 e5 ; 0xc0d3b
+ xor dh, dh ; 30 f6 ; 0xc0d3d vgabios.c:512
+ imul dx, bx ; 0f af d3 ; 0xc0d3f
+ sal dx, 002h ; c1 e2 02 ; 0xc0d42
+ xor ah, ah ; 30 e4 ; 0xc0d45
+ add ax, dx ; 01 d0 ; 0xc0d47
+ pop bp ; 5d ; 0xc0d49 vgabios.c:513
+ retn ; c3 ; 0xc0d4a
+ ; disGetNextSymbol 0xc0d4b LB 0x356e -> off=0x0 cb=0000000000000065 uValue=00000000000c0d4b 'vga_read_char_cga'
+vga_read_char_cga: ; 0xc0d4b LB 0x65
+ push bp ; 55 ; 0xc0d4b vgabios.c:515
+ mov bp, sp ; 89 e5 ; 0xc0d4c
+ push bx ; 53 ; 0xc0d4e
+ push cx ; 51 ; 0xc0d4f
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc0d50
+ movzx bx, dl ; 0f b6 da ; 0xc0d53 vgabios.c:521
+ lea dx, [bp-00eh] ; 8d 56 f2 ; 0xc0d56
+ call 00cb6h ; e8 5a ff ; 0xc0d59
+ push strict byte 00008h ; 6a 08 ; 0xc0d5c vgabios.c:524
+ push 00080h ; 68 80 00 ; 0xc0d5e
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0d61 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0d64
+ mov es, ax ; 8e c0 ; 0xc0d66
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0d68
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0d6b
+ xor cx, cx ; 31 c9 ; 0xc0d6f vgabios.c:68
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc0d71
+ call 00ad2h ; e8 5b fd ; 0xc0d74
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0d77
+ test ah, 080h ; f6 c4 80 ; 0xc0d7a vgabios.c:526
+ jne short 00da6h ; 75 27 ; 0xc0d7d
+ mov bx, strict word 0007ch ; bb 7c 00 ; 0xc0d7f vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0d82
+ mov es, ax ; 8e c0 ; 0xc0d84
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0d86
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0d89
+ test dx, dx ; 85 d2 ; 0xc0d8d vgabios.c:530
+ jne short 00d95h ; 75 04 ; 0xc0d8f
+ test ax, ax ; 85 c0 ; 0xc0d91
+ je short 00da6h ; 74 11 ; 0xc0d93
+ push strict byte 00008h ; 6a 08 ; 0xc0d95 vgabios.c:531
+ push 00080h ; 68 80 00 ; 0xc0d97
+ mov cx, 00080h ; b9 80 00 ; 0xc0d9a
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc0d9d
+ call 00ad2h ; e8 2f fd ; 0xc0da0
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0da3
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc0da6 vgabios.c:534
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0da9
+ pop cx ; 59 ; 0xc0dac
+ pop bx ; 5b ; 0xc0dad
+ pop bp ; 5d ; 0xc0dae
+ retn ; c3 ; 0xc0daf
+ ; disGetNextSymbol 0xc0db0 LB 0x3509 -> off=0x0 cb=0000000000000127 uValue=00000000000c0db0 'vga_read_char_attr'
+vga_read_char_attr: ; 0xc0db0 LB 0x127
+ push bp ; 55 ; 0xc0db0 vgabios.c:536
+ mov bp, sp ; 89 e5 ; 0xc0db1
+ push bx ; 53 ; 0xc0db3
+ push cx ; 51 ; 0xc0db4
+ push si ; 56 ; 0xc0db5
+ push di ; 57 ; 0xc0db6
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc0db7
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc0dba
+ mov si, dx ; 89 d6 ; 0xc0dbd
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0dbf vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0dc2
+ mov es, ax ; 8e c0 ; 0xc0dc5
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0dc7
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc0dca vgabios.c:48
+ xor ah, ah ; 30 e4 ; 0xc0dcd vgabios.c:544
+ call 035edh ; e8 1b 28 ; 0xc0dcf
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc0dd2
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc0dd5 vgabios.c:545
+ je near 00eceh ; 0f 84 f3 00 ; 0xc0dd7
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc0ddb vgabios.c:549
+ lea bx, [bp-018h] ; 8d 5e e8 ; 0xc0ddf
+ lea dx, [bp-01ah] ; 8d 56 e6 ; 0xc0de2
+ mov ax, cx ; 89 c8 ; 0xc0de5
+ call 00a93h ; e8 a9 fc ; 0xc0de7
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc0dea vgabios.c:550
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc0ded
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc0df0 vgabios.c:551
+ xor al, al ; 30 c0 ; 0xc0df3
+ shr ax, 008h ; c1 e8 08 ; 0xc0df5
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc0df8
+ mov bx, 00084h ; bb 84 00 ; 0xc0dfb vgabios.c:47
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc0dfe
+ mov es, dx ; 8e c2 ; 0xc0e01
+ mov dl, byte [es:bx] ; 26 8a 17 ; 0xc0e03
+ xor dh, dh ; 30 f6 ; 0xc0e06 vgabios.c:48
+ inc dx ; 42 ; 0xc0e08
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc0e09 vgabios.c:57
+ mov di, word [es:di] ; 26 8b 3d ; 0xc0e0c
+ mov word [bp-014h], di ; 89 7e ec ; 0xc0e0f vgabios.c:58
+ movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc0e12 vgabios.c:557
+ sal bx, 003h ; c1 e3 03 ; 0xc0e16
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc0e19
+ jne short 00e56h ; 75 36 ; 0xc0e1e
+ imul dx, di ; 0f af d7 ; 0xc0e20 vgabios.c:559
+ add dx, dx ; 01 d2 ; 0xc0e23
+ or dl, 0ffh ; 80 ca ff ; 0xc0e25
+ mov word [bp-016h], dx ; 89 56 ea ; 0xc0e28
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc0e2b
+ mov cx, word [bp-016h] ; 8b 4e ea ; 0xc0e2f
+ inc cx ; 41 ; 0xc0e32
+ imul dx, cx ; 0f af d1 ; 0xc0e33
+ xor ah, ah ; 30 e4 ; 0xc0e36
+ imul di, ax ; 0f af f8 ; 0xc0e38
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc0e3b
+ add ax, di ; 01 f8 ; 0xc0e3f
+ add ax, ax ; 01 c0 ; 0xc0e41
+ mov di, dx ; 89 d7 ; 0xc0e43
+ add di, ax ; 01 c7 ; 0xc0e45
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc0e47 vgabios.c:55
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc0e4b
+ push SS ; 16 ; 0xc0e4e vgabios.c:58
+ pop ES ; 07 ; 0xc0e4f
+ mov word [es:si], ax ; 26 89 04 ; 0xc0e50
+ jmp near 00eceh ; e9 78 00 ; 0xc0e53 vgabios.c:561
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc0e56 vgabios.c:562
+ cmp bl, 005h ; 80 fb 05 ; 0xc0e5a
+ je short 00eaah ; 74 4b ; 0xc0e5d
+ cmp bl, 002h ; 80 fb 02 ; 0xc0e5f
+ jc short 00eceh ; 72 6a ; 0xc0e62
+ jbe short 00e6dh ; 76 07 ; 0xc0e64
+ cmp bl, 004h ; 80 fb 04 ; 0xc0e66
+ jbe short 00e86h ; 76 1b ; 0xc0e69
+ jmp short 00eceh ; eb 61 ; 0xc0e6b
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4 ; 0xc0e6d vgabios.c:565
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc0e71
+ mov bx, word [bp-014h] ; 8b 5e ec ; 0xc0e75
+ call 00d3ah ; e8 bf fe ; 0xc0e78
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0 ; 0xc0e7b vgabios.c:566
+ call 00d4bh ; e8 c9 fe ; 0xc0e7f
+ xor ah, ah ; 30 e4 ; 0xc0e82
+ jmp short 00e4eh ; eb c8 ; 0xc0e84
+ mov bx, 00085h ; bb 85 00 ; 0xc0e86 vgabios.c:57
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc0e89
+ xor dh, dh ; 30 f6 ; 0xc0e8c vgabios.c:571
+ mov word [bp-016h], dx ; 89 56 ea ; 0xc0e8e
+ push dx ; 52 ; 0xc0e91
+ movzx dx, al ; 0f b6 d0 ; 0xc0e92
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc0e95
+ mov bx, di ; 89 fb ; 0xc0e99
+ call 00b75h ; e8 d7 fc ; 0xc0e9b
+ mov bx, word [bp-016h] ; 8b 5e ea ; 0xc0e9e vgabios.c:572
+ mov dx, ax ; 89 c2 ; 0xc0ea1
+ mov ax, di ; 89 f8 ; 0xc0ea3
+ call 00b9fh ; e8 f7 fc ; 0xc0ea5
+ jmp short 00e82h ; eb d8 ; 0xc0ea8
+ mov bx, 00085h ; bb 85 00 ; 0xc0eaa vgabios.c:57
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc0ead
+ xor dh, dh ; 30 f6 ; 0xc0eb0 vgabios.c:576
+ mov word [bp-016h], dx ; 89 56 ea ; 0xc0eb2
+ push dx ; 52 ; 0xc0eb5
+ movzx dx, al ; 0f b6 d0 ; 0xc0eb6
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc0eb9
+ mov bx, di ; 89 fb ; 0xc0ebd
+ call 00bddh ; e8 1b fd ; 0xc0ebf
+ mov bx, word [bp-016h] ; 8b 5e ea ; 0xc0ec2 vgabios.c:577
+ mov dx, ax ; 89 c2 ; 0xc0ec5
+ mov ax, di ; 89 f8 ; 0xc0ec7
+ call 00c42h ; e8 76 fd ; 0xc0ec9
+ jmp short 00e82h ; eb b4 ; 0xc0ecc
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc0ece vgabios.c:586
+ pop di ; 5f ; 0xc0ed1
+ pop si ; 5e ; 0xc0ed2
+ pop cx ; 59 ; 0xc0ed3
+ pop bx ; 5b ; 0xc0ed4
+ pop bp ; 5d ; 0xc0ed5
+ retn ; c3 ; 0xc0ed6
+ ; disGetNextSymbol 0xc0ed7 LB 0x33e2 -> off=0x10 cb=0000000000000083 uValue=00000000000c0ee7 'vga_get_font_info'
+ db 0feh, 00eh, 043h, 00fh, 048h, 00fh, 04fh, 00fh, 054h, 00fh, 059h, 00fh, 05eh, 00fh, 063h, 00fh
+vga_get_font_info: ; 0xc0ee7 LB 0x83
+ push si ; 56 ; 0xc0ee7 vgabios.c:588
+ push di ; 57 ; 0xc0ee8
+ push bp ; 55 ; 0xc0ee9
+ mov bp, sp ; 89 e5 ; 0xc0eea
+ mov di, dx ; 89 d7 ; 0xc0eec
+ mov si, bx ; 89 de ; 0xc0eee
+ cmp ax, strict word 00007h ; 3d 07 00 ; 0xc0ef0 vgabios.c:593
+ jnbe short 00f3dh ; 77 48 ; 0xc0ef3
+ mov bx, ax ; 89 c3 ; 0xc0ef5
+ add bx, ax ; 01 c3 ; 0xc0ef7
+ jmp word [cs:bx+00ed7h] ; 2e ff a7 d7 0e ; 0xc0ef9
+ mov bx, strict word 0007ch ; bb 7c 00 ; 0xc0efe vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0f01
+ mov es, ax ; 8e c0 ; 0xc0f03
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc0f05
+ mov ax, word [es:bx+002h] ; 26 8b 47 02 ; 0xc0f08
+ push SS ; 16 ; 0xc0f0c vgabios.c:596
+ pop ES ; 07 ; 0xc0f0d
+ mov word [es:si], dx ; 26 89 14 ; 0xc0f0e
+ mov word [es:di], ax ; 26 89 05 ; 0xc0f11
+ mov bx, 00085h ; bb 85 00 ; 0xc0f14
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f17
+ mov es, ax ; 8e c0 ; 0xc0f1a
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f1c
+ xor ah, ah ; 30 e4 ; 0xc0f1f
+ push SS ; 16 ; 0xc0f21
+ pop ES ; 07 ; 0xc0f22
+ mov bx, cx ; 89 cb ; 0xc0f23
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0f25
+ mov bx, 00084h ; bb 84 00 ; 0xc0f28
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f2b
+ mov es, ax ; 8e c0 ; 0xc0f2e
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f30
+ xor ah, ah ; 30 e4 ; 0xc0f33
+ push SS ; 16 ; 0xc0f35
+ pop ES ; 07 ; 0xc0f36
+ mov bx, word [bp+008h] ; 8b 5e 08 ; 0xc0f37
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0f3a
+ pop bp ; 5d ; 0xc0f3d
+ pop di ; 5f ; 0xc0f3e
+ pop si ; 5e ; 0xc0f3f
+ retn 00002h ; c2 02 00 ; 0xc0f40
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0f43 vgabios.c:67
+ jmp short 00f01h ; eb b9 ; 0xc0f46
+ mov dx, 05d6ch ; ba 6c 5d ; 0xc0f48 vgabios.c:601
+ mov ax, ds ; 8c d8 ; 0xc0f4b
+ jmp short 00f0ch ; eb bd ; 0xc0f4d vgabios.c:602
+ mov dx, 0556ch ; ba 6c 55 ; 0xc0f4f vgabios.c:604
+ jmp short 00f4bh ; eb f7 ; 0xc0f52
+ mov dx, 0596ch ; ba 6c 59 ; 0xc0f54 vgabios.c:607
+ jmp short 00f4bh ; eb f2 ; 0xc0f57
+ mov dx, 07b6ch ; ba 6c 7b ; 0xc0f59 vgabios.c:610
+ jmp short 00f4bh ; eb ed ; 0xc0f5c
+ mov dx, 06b6ch ; ba 6c 6b ; 0xc0f5e vgabios.c:613
+ jmp short 00f4bh ; eb e8 ; 0xc0f61
+ mov dx, 07c99h ; ba 99 7c ; 0xc0f63 vgabios.c:616
+ jmp short 00f4bh ; eb e3 ; 0xc0f66
+ jmp short 00f3dh ; eb d3 ; 0xc0f68 vgabios.c:622
+ ; disGetNextSymbol 0xc0f6a LB 0x334f -> off=0x0 cb=0000000000000156 uValue=00000000000c0f6a 'vga_read_pixel'
+vga_read_pixel: ; 0xc0f6a LB 0x156
+ push bp ; 55 ; 0xc0f6a vgabios.c:635
+ mov bp, sp ; 89 e5 ; 0xc0f6b
+ push si ; 56 ; 0xc0f6d
+ push di ; 57 ; 0xc0f6e
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc0f6f
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc0f72
+ mov word [bp-00ch], bx ; 89 5e f4 ; 0xc0f75
+ mov si, cx ; 89 ce ; 0xc0f78
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0f7a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f7d
+ mov es, ax ; 8e c0 ; 0xc0f80
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f82
+ xor ah, ah ; 30 e4 ; 0xc0f85 vgabios.c:642
+ call 035edh ; e8 63 26 ; 0xc0f87
+ mov ah, al ; 88 c4 ; 0xc0f8a
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc0f8c vgabios.c:643
+ je near 010b9h ; 0f 84 27 01 ; 0xc0f8e
+ movzx bx, al ; 0f b6 d8 ; 0xc0f92 vgabios.c:645
+ sal bx, 003h ; c1 e3 03 ; 0xc0f95
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc0f98
+ je near 010b9h ; 0f 84 18 01 ; 0xc0f9d
+ mov ch, byte [bx+047b0h] ; 8a af b0 47 ; 0xc0fa1 vgabios.c:649
+ cmp ch, 003h ; 80 fd 03 ; 0xc0fa5
+ jc short 00fbbh ; 72 11 ; 0xc0fa8
+ jbe short 00fc3h ; 76 17 ; 0xc0faa
+ cmp ch, 005h ; 80 fd 05 ; 0xc0fac
+ je near 01092h ; 0f 84 df 00 ; 0xc0faf
+ cmp ch, 004h ; 80 fd 04 ; 0xc0fb3
+ je short 00fc3h ; 74 0b ; 0xc0fb6
+ jmp near 010b2h ; e9 f7 00 ; 0xc0fb8
+ cmp ch, 002h ; 80 fd 02 ; 0xc0fbb
+ je short 0102eh ; 74 6e ; 0xc0fbe
+ jmp near 010b2h ; e9 ef 00 ; 0xc0fc0
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc0fc3 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0fc6
+ mov es, ax ; 8e c0 ; 0xc0fc9
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0fcb
+ imul ax, word [bp-00ch] ; 0f af 46 f4 ; 0xc0fce vgabios.c:58
+ mov bx, dx ; 89 d3 ; 0xc0fd2
+ shr bx, 003h ; c1 eb 03 ; 0xc0fd4
+ add bx, ax ; 01 c3 ; 0xc0fd7
+ mov di, strict word 0004ch ; bf 4c 00 ; 0xc0fd9 vgabios.c:57
+ mov cx, word [es:di] ; 26 8b 0d ; 0xc0fdc
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6 ; 0xc0fdf vgabios.c:58
+ imul ax, cx ; 0f af c1 ; 0xc0fe3
+ add bx, ax ; 01 c3 ; 0xc0fe6
+ mov cl, dl ; 88 d1 ; 0xc0fe8 vgabios.c:654
+ and cl, 007h ; 80 e1 07 ; 0xc0fea
+ mov ax, 00080h ; b8 80 00 ; 0xc0fed
+ sar ax, CL ; d3 f8 ; 0xc0ff0
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc0ff2
+ xor ch, ch ; 30 ed ; 0xc0ff5 vgabios.c:655
+ mov byte [bp-006h], ch ; 88 6e fa ; 0xc0ff7 vgabios.c:656
+ jmp short 01004h ; eb 08 ; 0xc0ffa
+ cmp byte [bp-006h], 004h ; 80 7e fa 04 ; 0xc0ffc
+ jnc near 010b4h ; 0f 83 b0 00 ; 0xc1000
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc1004 vgabios.c:657
+ sal ax, 008h ; c1 e0 08 ; 0xc1008
+ or AL, strict byte 004h ; 0c 04 ; 0xc100b
+ mov dx, 003ceh ; ba ce 03 ; 0xc100d
+ out DX, ax ; ef ; 0xc1010
+ mov ax, 0a000h ; b8 00 a0 ; 0xc1011 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc1014
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1016
+ and al, byte [bp-008h] ; 22 46 f8 ; 0xc1019 vgabios.c:48
+ test al, al ; 84 c0 ; 0xc101c vgabios.c:659
+ jbe short 01029h ; 76 09 ; 0xc101e
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc1020 vgabios.c:660
+ mov AL, strict byte 001h ; b0 01 ; 0xc1023
+ sal al, CL ; d2 e0 ; 0xc1025
+ or ch, al ; 08 c5 ; 0xc1027
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1029 vgabios.c:661
+ jmp short 00ffch ; eb ce ; 0xc102c
+ movzx cx, byte [bx+047b1h] ; 0f b6 8f b1 47 ; 0xc102e vgabios.c:664
+ mov bx, strict word 00004h ; bb 04 00 ; 0xc1033
+ sub bx, cx ; 29 cb ; 0xc1036
+ mov cx, bx ; 89 d9 ; 0xc1038
+ mov bx, dx ; 89 d3 ; 0xc103a
+ shr bx, CL ; d3 eb ; 0xc103c
+ mov cx, bx ; 89 d9 ; 0xc103e
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc1040
+ shr bx, 1 ; d1 eb ; 0xc1043
+ imul bx, bx, strict byte 00050h ; 6b db 50 ; 0xc1045
+ add bx, cx ; 01 cb ; 0xc1048
+ test byte [bp-00ch], 001h ; f6 46 f4 01 ; 0xc104a vgabios.c:665
+ je short 01053h ; 74 03 ; 0xc104e
+ add bh, 020h ; 80 c7 20 ; 0xc1050 vgabios.c:666
+ mov cx, 0b800h ; b9 00 b8 ; 0xc1053 vgabios.c:47
+ mov es, cx ; 8e c1 ; 0xc1056
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1058
+ movzx bx, ah ; 0f b6 dc ; 0xc105b vgabios.c:668
+ sal bx, 003h ; c1 e3 03 ; 0xc105e
+ cmp byte [bx+047b1h], 002h ; 80 bf b1 47 02 ; 0xc1061
+ jne short 0107dh ; 75 15 ; 0xc1066
+ and dx, strict byte 00003h ; 83 e2 03 ; 0xc1068 vgabios.c:669
+ mov cx, strict word 00003h ; b9 03 00 ; 0xc106b
+ sub cx, dx ; 29 d1 ; 0xc106e
+ add cx, cx ; 01 c9 ; 0xc1070
+ xor ah, ah ; 30 e4 ; 0xc1072
+ sar ax, CL ; d3 f8 ; 0xc1074
+ mov ch, al ; 88 c5 ; 0xc1076
+ and ch, 003h ; 80 e5 03 ; 0xc1078
+ jmp short 010b4h ; eb 37 ; 0xc107b vgabios.c:670
+ xor dh, dh ; 30 f6 ; 0xc107d vgabios.c:671
+ and dl, 007h ; 80 e2 07 ; 0xc107f
+ mov cx, strict word 00007h ; b9 07 00 ; 0xc1082
+ sub cx, dx ; 29 d1 ; 0xc1085
+ xor ah, ah ; 30 e4 ; 0xc1087
+ sar ax, CL ; d3 f8 ; 0xc1089
+ mov ch, al ; 88 c5 ; 0xc108b
+ and ch, 001h ; 80 e5 01 ; 0xc108d
+ jmp short 010b4h ; eb 22 ; 0xc1090 vgabios.c:672
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1092 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1095
+ mov es, ax ; 8e c0 ; 0xc1098
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc109a
+ sal ax, 003h ; c1 e0 03 ; 0xc109d vgabios.c:58
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc10a0
+ imul bx, ax ; 0f af d8 ; 0xc10a3
+ add bx, dx ; 01 d3 ; 0xc10a6
+ mov ax, 0a000h ; b8 00 a0 ; 0xc10a8 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc10ab
+ mov ch, byte [es:bx] ; 26 8a 2f ; 0xc10ad
+ jmp short 010b4h ; eb 02 ; 0xc10b0 vgabios.c:676
+ xor ch, ch ; 30 ed ; 0xc10b2 vgabios.c:681
+ push SS ; 16 ; 0xc10b4 vgabios.c:683
+ pop ES ; 07 ; 0xc10b5
+ mov byte [es:si], ch ; 26 88 2c ; 0xc10b6
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc10b9 vgabios.c:684
+ pop di ; 5f ; 0xc10bc
+ pop si ; 5e ; 0xc10bd
+ pop bp ; 5d ; 0xc10be
+ retn ; c3 ; 0xc10bf
+ ; disGetNextSymbol 0xc10c0 LB 0x31f9 -> off=0x0 cb=000000000000008c uValue=00000000000c10c0 'biosfn_perform_gray_scale_summing'
+biosfn_perform_gray_scale_summing: ; 0xc10c0 LB 0x8c
+ push bp ; 55 ; 0xc10c0 vgabios.c:689
+ mov bp, sp ; 89 e5 ; 0xc10c1
+ push bx ; 53 ; 0xc10c3
+ push cx ; 51 ; 0xc10c4
+ push si ; 56 ; 0xc10c5
+ push di ; 57 ; 0xc10c6
+ push ax ; 50 ; 0xc10c7
+ push ax ; 50 ; 0xc10c8
+ mov bx, ax ; 89 c3 ; 0xc10c9
+ mov di, dx ; 89 d7 ; 0xc10cb
+ mov dx, 003dah ; ba da 03 ; 0xc10cd vgabios.c:694
+ in AL, DX ; ec ; 0xc10d0
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc10d1
+ xor al, al ; 30 c0 ; 0xc10d3 vgabios.c:695
+ mov dx, 003c0h ; ba c0 03 ; 0xc10d5
+ out DX, AL ; ee ; 0xc10d8
+ xor si, si ; 31 f6 ; 0xc10d9 vgabios.c:697
+ cmp si, di ; 39 fe ; 0xc10db
+ jnc short 01131h ; 73 52 ; 0xc10dd
+ mov al, bl ; 88 d8 ; 0xc10df vgabios.c:700
+ mov dx, 003c7h ; ba c7 03 ; 0xc10e1
+ out DX, AL ; ee ; 0xc10e4
+ mov dx, 003c9h ; ba c9 03 ; 0xc10e5 vgabios.c:702
+ in AL, DX ; ec ; 0xc10e8
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc10e9
+ mov cx, ax ; 89 c1 ; 0xc10eb
+ in AL, DX ; ec ; 0xc10ed vgabios.c:703
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc10ee
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc10f0
+ in AL, DX ; ec ; 0xc10f3 vgabios.c:704
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc10f4
+ xor ch, ch ; 30 ed ; 0xc10f6 vgabios.c:707
+ imul cx, cx, strict byte 0004dh ; 6b c9 4d ; 0xc10f8
+ mov word [bp-00ah], cx ; 89 4e f6 ; 0xc10fb
+ movzx cx, byte [bp-00ch] ; 0f b6 4e f4 ; 0xc10fe
+ imul cx, cx, 00097h ; 69 c9 97 00 ; 0xc1102
+ add cx, word [bp-00ah] ; 03 4e f6 ; 0xc1106
+ xor ah, ah ; 30 e4 ; 0xc1109
+ imul ax, ax, strict byte 0001ch ; 6b c0 1c ; 0xc110b
+ add cx, ax ; 01 c1 ; 0xc110e
+ add cx, 00080h ; 81 c1 80 00 ; 0xc1110
+ sar cx, 008h ; c1 f9 08 ; 0xc1114
+ cmp cx, strict byte 0003fh ; 83 f9 3f ; 0xc1117 vgabios.c:709
+ jbe short 0111fh ; 76 03 ; 0xc111a
+ mov cx, strict word 0003fh ; b9 3f 00 ; 0xc111c
+ mov al, bl ; 88 d8 ; 0xc111f vgabios.c:712
+ mov dx, 003c8h ; ba c8 03 ; 0xc1121
+ out DX, AL ; ee ; 0xc1124
+ mov al, cl ; 88 c8 ; 0xc1125 vgabios.c:714
+ mov dx, 003c9h ; ba c9 03 ; 0xc1127
+ out DX, AL ; ee ; 0xc112a
+ out DX, AL ; ee ; 0xc112b vgabios.c:715
+ out DX, AL ; ee ; 0xc112c vgabios.c:716
+ inc bx ; 43 ; 0xc112d vgabios.c:717
+ inc si ; 46 ; 0xc112e vgabios.c:718
+ jmp short 010dbh ; eb aa ; 0xc112f
+ mov dx, 003dah ; ba da 03 ; 0xc1131 vgabios.c:719
+ in AL, DX ; ec ; 0xc1134
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1135
+ mov AL, strict byte 020h ; b0 20 ; 0xc1137 vgabios.c:720
+ mov dx, 003c0h ; ba c0 03 ; 0xc1139
+ out DX, AL ; ee ; 0xc113c
+ mov dx, 003dah ; ba da 03 ; 0xc113d vgabios.c:722
+ in AL, DX ; ec ; 0xc1140
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1141
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc1143 vgabios.c:724
+ pop di ; 5f ; 0xc1146
+ pop si ; 5e ; 0xc1147
+ pop cx ; 59 ; 0xc1148
+ pop bx ; 5b ; 0xc1149
+ pop bp ; 5d ; 0xc114a
+ retn ; c3 ; 0xc114b
+ ; disGetNextSymbol 0xc114c LB 0x316d -> off=0x0 cb=00000000000000f6 uValue=00000000000c114c 'biosfn_set_cursor_shape'
+biosfn_set_cursor_shape: ; 0xc114c LB 0xf6
+ push bp ; 55 ; 0xc114c vgabios.c:727
+ mov bp, sp ; 89 e5 ; 0xc114d
+ push bx ; 53 ; 0xc114f
+ push cx ; 51 ; 0xc1150
+ push si ; 56 ; 0xc1151
+ push di ; 57 ; 0xc1152
+ push ax ; 50 ; 0xc1153
+ mov bl, al ; 88 c3 ; 0xc1154
+ mov ah, dl ; 88 d4 ; 0xc1156
+ movzx cx, al ; 0f b6 c8 ; 0xc1158 vgabios.c:733
+ sal cx, 008h ; c1 e1 08 ; 0xc115b
+ movzx dx, ah ; 0f b6 d4 ; 0xc115e
+ add dx, cx ; 01 ca ; 0xc1161
+ mov si, strict word 00060h ; be 60 00 ; 0xc1163 vgabios.c:62
+ mov cx, strict word 00040h ; b9 40 00 ; 0xc1166
+ mov es, cx ; 8e c1 ; 0xc1169
+ mov word [es:si], dx ; 26 89 14 ; 0xc116b
+ mov si, 00087h ; be 87 00 ; 0xc116e vgabios.c:47
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc1171
+ test dl, 008h ; f6 c2 08 ; 0xc1174 vgabios.c:48
+ jne near 01217h ; 0f 85 9c 00 ; 0xc1177
+ mov dl, al ; 88 c2 ; 0xc117b vgabios.c:739
+ and dl, 060h ; 80 e2 60 ; 0xc117d
+ cmp dl, 020h ; 80 fa 20 ; 0xc1180
+ jne short 0118ch ; 75 07 ; 0xc1183
+ mov BL, strict byte 01eh ; b3 1e ; 0xc1185 vgabios.c:741
+ xor ah, ah ; 30 e4 ; 0xc1187 vgabios.c:742
+ jmp near 01217h ; e9 8b 00 ; 0xc1189 vgabios.c:743
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc118c vgabios.c:47
+ test dl, 001h ; f6 c2 01 ; 0xc118f vgabios.c:48
+ jne near 01217h ; 0f 85 81 00 ; 0xc1192
+ cmp bl, 020h ; 80 fb 20 ; 0xc1196
+ jnc near 01217h ; 0f 83 7a 00 ; 0xc1199
+ cmp ah, 020h ; 80 fc 20 ; 0xc119d
+ jnc near 01217h ; 0f 83 73 00 ; 0xc11a0
+ mov si, 00085h ; be 85 00 ; 0xc11a4 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc11a7
+ mov es, dx ; 8e c2 ; 0xc11aa
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc11ac
+ mov dx, cx ; 89 ca ; 0xc11af vgabios.c:58
+ cmp ah, bl ; 38 dc ; 0xc11b1 vgabios.c:754
+ jnc short 011c1h ; 73 0c ; 0xc11b3
+ test ah, ah ; 84 e4 ; 0xc11b5 vgabios.c:756
+ je short 01217h ; 74 5e ; 0xc11b7
+ xor bl, bl ; 30 db ; 0xc11b9 vgabios.c:757
+ mov ah, cl ; 88 cc ; 0xc11bb vgabios.c:758
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc11bd
+ jmp short 01217h ; eb 56 ; 0xc11bf vgabios.c:760
+ movzx si, ah ; 0f b6 f4 ; 0xc11c1 vgabios.c:761
+ mov word [bp-00ah], si ; 89 76 f6 ; 0xc11c4
+ movzx si, bl ; 0f b6 f3 ; 0xc11c7
+ or si, word [bp-00ah] ; 0b 76 f6 ; 0xc11ca
+ cmp si, cx ; 39 ce ; 0xc11cd
+ jnc short 011e4h ; 73 13 ; 0xc11cf
+ movzx di, ah ; 0f b6 fc ; 0xc11d1
+ mov si, cx ; 89 ce ; 0xc11d4
+ dec si ; 4e ; 0xc11d6
+ cmp di, si ; 39 f7 ; 0xc11d7
+ je short 01217h ; 74 3c ; 0xc11d9
+ movzx si, bl ; 0f b6 f3 ; 0xc11db
+ dec cx ; 49 ; 0xc11de
+ dec cx ; 49 ; 0xc11df
+ cmp si, cx ; 39 ce ; 0xc11e0
+ je short 01217h ; 74 33 ; 0xc11e2
+ cmp ah, 003h ; 80 fc 03 ; 0xc11e4 vgabios.c:763
+ jbe short 01217h ; 76 2e ; 0xc11e7
+ movzx si, bl ; 0f b6 f3 ; 0xc11e9 vgabios.c:764
+ movzx di, ah ; 0f b6 fc ; 0xc11ec
+ inc si ; 46 ; 0xc11ef
+ inc si ; 46 ; 0xc11f0
+ mov cl, dl ; 88 d1 ; 0xc11f1
+ db 0feh, 0c9h
+ ; dec cl ; fe c9 ; 0xc11f3
+ cmp di, si ; 39 f7 ; 0xc11f5
+ jnle short 0120ch ; 7f 13 ; 0xc11f7
+ sub bl, ah ; 28 e3 ; 0xc11f9 vgabios.c:766
+ add bl, dl ; 00 d3 ; 0xc11fb
+ db 0feh, 0cbh
+ ; dec bl ; fe cb ; 0xc11fd
+ mov ah, cl ; 88 cc ; 0xc11ff vgabios.c:767
+ cmp dx, strict byte 0000eh ; 83 fa 0e ; 0xc1201 vgabios.c:768
+ jc short 01217h ; 72 11 ; 0xc1204
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc1206 vgabios.c:770
+ db 0feh, 0cbh
+ ; dec bl ; fe cb ; 0xc1208 vgabios.c:771
+ jmp short 01217h ; eb 0b ; 0xc120a vgabios.c:773
+ cmp bl, 002h ; 80 fb 02 ; 0xc120c
+ jbe short 01215h ; 76 04 ; 0xc120f
+ shr dx, 1 ; d1 ea ; 0xc1211 vgabios.c:775
+ mov bl, dl ; 88 d3 ; 0xc1213
+ mov ah, cl ; 88 cc ; 0xc1215 vgabios.c:779
+ mov si, strict word 00063h ; be 63 00 ; 0xc1217 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc121a
+ mov es, dx ; 8e c2 ; 0xc121d
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc121f
+ mov AL, strict byte 00ah ; b0 0a ; 0xc1222 vgabios.c:790
+ mov dx, cx ; 89 ca ; 0xc1224
+ out DX, AL ; ee ; 0xc1226
+ mov si, cx ; 89 ce ; 0xc1227 vgabios.c:791
+ inc si ; 46 ; 0xc1229
+ mov al, bl ; 88 d8 ; 0xc122a
+ mov dx, si ; 89 f2 ; 0xc122c
+ out DX, AL ; ee ; 0xc122e
+ mov AL, strict byte 00bh ; b0 0b ; 0xc122f vgabios.c:792
+ mov dx, cx ; 89 ca ; 0xc1231
+ out DX, AL ; ee ; 0xc1233
+ mov al, ah ; 88 e0 ; 0xc1234 vgabios.c:793
+ mov dx, si ; 89 f2 ; 0xc1236
+ out DX, AL ; ee ; 0xc1238
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc1239 vgabios.c:794
+ pop di ; 5f ; 0xc123c
+ pop si ; 5e ; 0xc123d
+ pop cx ; 59 ; 0xc123e
+ pop bx ; 5b ; 0xc123f
+ pop bp ; 5d ; 0xc1240
+ retn ; c3 ; 0xc1241
+ ; disGetNextSymbol 0xc1242 LB 0x3077 -> off=0x0 cb=0000000000000089 uValue=00000000000c1242 'biosfn_set_cursor_pos'
+biosfn_set_cursor_pos: ; 0xc1242 LB 0x89
+ push bp ; 55 ; 0xc1242 vgabios.c:797
+ mov bp, sp ; 89 e5 ; 0xc1243
+ push bx ; 53 ; 0xc1245
+ push cx ; 51 ; 0xc1246
+ push si ; 56 ; 0xc1247
+ push ax ; 50 ; 0xc1248
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc1249 vgabios.c:803
+ jnbe short 012c3h ; 77 76 ; 0xc124b
+ movzx bx, al ; 0f b6 d8 ; 0xc124d vgabios.c:806
+ add bx, bx ; 01 db ; 0xc1250
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc1252
+ mov cx, strict word 00040h ; b9 40 00 ; 0xc1255 vgabios.c:62
+ mov es, cx ; 8e c1 ; 0xc1258
+ mov word [es:bx], dx ; 26 89 17 ; 0xc125a
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc125d vgabios.c:47
+ mov ah, byte [es:bx] ; 26 8a 27 ; 0xc1260
+ cmp al, ah ; 38 e0 ; 0xc1263 vgabios.c:810
+ jne short 012c3h ; 75 5c ; 0xc1265
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1267 vgabios.c:57
+ mov cx, word [es:bx] ; 26 8b 0f ; 0xc126a
+ mov bx, 00084h ; bb 84 00 ; 0xc126d vgabios.c:47
+ mov ah, byte [es:bx] ; 26 8a 27 ; 0xc1270
+ movzx bx, ah ; 0f b6 dc ; 0xc1273 vgabios.c:48
+ inc bx ; 43 ; 0xc1276
+ mov si, dx ; 89 d6 ; 0xc1277 vgabios.c:816
+ and si, 0ff00h ; 81 e6 00 ff ; 0xc1279
+ shr si, 008h ; c1 ee 08 ; 0xc127d
+ mov word [bp-008h], si ; 89 76 f8 ; 0xc1280
+ imul bx, cx ; 0f af d9 ; 0xc1283 vgabios.c:819
+ or bl, 0ffh ; 80 cb ff ; 0xc1286
+ xor ah, ah ; 30 e4 ; 0xc1289
+ inc bx ; 43 ; 0xc128b
+ imul ax, bx ; 0f af c3 ; 0xc128c
+ movzx si, dl ; 0f b6 f2 ; 0xc128f
+ add si, ax ; 01 c6 ; 0xc1292
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1294
+ imul ax, cx ; 0f af c1 ; 0xc1298
+ add si, ax ; 01 c6 ; 0xc129b
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc129d vgabios.c:57
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc12a0
+ mov AL, strict byte 00eh ; b0 0e ; 0xc12a3 vgabios.c:823
+ mov dx, bx ; 89 da ; 0xc12a5
+ out DX, AL ; ee ; 0xc12a7
+ mov ax, si ; 89 f0 ; 0xc12a8 vgabios.c:824
+ xor al, al ; 30 c0 ; 0xc12aa
+ shr ax, 008h ; c1 e8 08 ; 0xc12ac
+ lea cx, [bx+001h] ; 8d 4f 01 ; 0xc12af
+ mov dx, cx ; 89 ca ; 0xc12b2
+ out DX, AL ; ee ; 0xc12b4
+ mov AL, strict byte 00fh ; b0 0f ; 0xc12b5 vgabios.c:825
+ mov dx, bx ; 89 da ; 0xc12b7
+ out DX, AL ; ee ; 0xc12b9
+ and si, 000ffh ; 81 e6 ff 00 ; 0xc12ba vgabios.c:826
+ mov ax, si ; 89 f0 ; 0xc12be
+ mov dx, cx ; 89 ca ; 0xc12c0
+ out DX, AL ; ee ; 0xc12c2
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc12c3 vgabios.c:828
+ pop si ; 5e ; 0xc12c6
+ pop cx ; 59 ; 0xc12c7
+ pop bx ; 5b ; 0xc12c8
+ pop bp ; 5d ; 0xc12c9
+ retn ; c3 ; 0xc12ca
+ ; disGetNextSymbol 0xc12cb LB 0x2fee -> off=0x0 cb=00000000000000cd uValue=00000000000c12cb 'biosfn_set_active_page'
+biosfn_set_active_page: ; 0xc12cb LB 0xcd
+ push bp ; 55 ; 0xc12cb vgabios.c:831
+ mov bp, sp ; 89 e5 ; 0xc12cc
+ push bx ; 53 ; 0xc12ce
+ push cx ; 51 ; 0xc12cf
+ push dx ; 52 ; 0xc12d0
+ push si ; 56 ; 0xc12d1
+ push di ; 57 ; 0xc12d2
+ push ax ; 50 ; 0xc12d3
+ push ax ; 50 ; 0xc12d4
+ mov cl, al ; 88 c1 ; 0xc12d5
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc12d7 vgabios.c:837
+ jnbe near 0138eh ; 0f 87 b1 00 ; 0xc12d9
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc12dd vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc12e0
+ mov es, ax ; 8e c0 ; 0xc12e3
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc12e5
+ xor ah, ah ; 30 e4 ; 0xc12e8 vgabios.c:841
+ call 035edh ; e8 00 23 ; 0xc12ea
+ mov ch, al ; 88 c5 ; 0xc12ed
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc12ef vgabios.c:842
+ je near 0138eh ; 0f 84 99 00 ; 0xc12f1
+ movzx ax, cl ; 0f b6 c1 ; 0xc12f5 vgabios.c:845
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc12f8
+ lea dx, [bp-00ch] ; 8d 56 f4 ; 0xc12fb
+ call 00a93h ; e8 92 f7 ; 0xc12fe
+ movzx bx, ch ; 0f b6 dd ; 0xc1301 vgabios.c:847
+ mov si, bx ; 89 de ; 0xc1304
+ sal si, 003h ; c1 e6 03 ; 0xc1306
+ cmp byte [si+047afh], 000h ; 80 bc af 47 00 ; 0xc1309
+ jne short 01344h ; 75 34 ; 0xc130e
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1310 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1313
+ mov es, ax ; 8e c0 ; 0xc1316
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc1318
+ mov bx, 00084h ; bb 84 00 ; 0xc131b vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc131e
+ xor ah, ah ; 30 e4 ; 0xc1321 vgabios.c:48
+ inc ax ; 40 ; 0xc1323
+ imul dx, ax ; 0f af d0 ; 0xc1324 vgabios.c:854
+ mov ax, dx ; 89 d0 ; 0xc1327
+ add ax, dx ; 01 d0 ; 0xc1329
+ or AL, strict byte 0ffh ; 0c ff ; 0xc132b
+ mov bx, ax ; 89 c3 ; 0xc132d
+ movzx ax, cl ; 0f b6 c1 ; 0xc132f
+ inc bx ; 43 ; 0xc1332
+ imul bx, ax ; 0f af d8 ; 0xc1333
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc1336 vgabios.c:62
+ mov word [es:si], bx ; 26 89 1c ; 0xc1339
+ or dl, 0ffh ; 80 ca ff ; 0xc133c vgabios.c:858
+ mov bx, dx ; 89 d3 ; 0xc133f
+ inc bx ; 43 ; 0xc1341
+ jmp short 01353h ; eb 0f ; 0xc1342 vgabios.c:860
+ movzx bx, byte [bx+0482eh] ; 0f b6 9f 2e 48 ; 0xc1344 vgabios.c:862
+ sal bx, 006h ; c1 e3 06 ; 0xc1349
+ movzx ax, cl ; 0f b6 c1 ; 0xc134c
+ mov bx, word [bx+04845h] ; 8b 9f 45 48 ; 0xc134f
+ imul bx, ax ; 0f af d8 ; 0xc1353
+ mov si, strict word 00063h ; be 63 00 ; 0xc1356 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1359
+ mov es, ax ; 8e c0 ; 0xc135c
+ mov si, word [es:si] ; 26 8b 34 ; 0xc135e
+ mov AL, strict byte 00ch ; b0 0c ; 0xc1361 vgabios.c:867
+ mov dx, si ; 89 f2 ; 0xc1363
+ out DX, AL ; ee ; 0xc1365
+ mov ax, bx ; 89 d8 ; 0xc1366 vgabios.c:868
+ xor al, bl ; 30 d8 ; 0xc1368
+ shr ax, 008h ; c1 e8 08 ; 0xc136a
+ lea di, [si+001h] ; 8d 7c 01 ; 0xc136d
+ mov dx, di ; 89 fa ; 0xc1370
+ out DX, AL ; ee ; 0xc1372
+ mov AL, strict byte 00dh ; b0 0d ; 0xc1373 vgabios.c:869
+ mov dx, si ; 89 f2 ; 0xc1375
+ out DX, AL ; ee ; 0xc1377
+ xor bh, bh ; 30 ff ; 0xc1378 vgabios.c:870
+ mov ax, bx ; 89 d8 ; 0xc137a
+ mov dx, di ; 89 fa ; 0xc137c
+ out DX, AL ; ee ; 0xc137e
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc137f vgabios.c:52
+ mov byte [es:bx], cl ; 26 88 0f ; 0xc1382
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc1385 vgabios.c:880
+ movzx ax, cl ; 0f b6 c1 ; 0xc1388
+ call 01242h ; e8 b4 fe ; 0xc138b
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc138e vgabios.c:881
+ pop di ; 5f ; 0xc1391
+ pop si ; 5e ; 0xc1392
+ pop dx ; 5a ; 0xc1393
+ pop cx ; 59 ; 0xc1394
+ pop bx ; 5b ; 0xc1395
+ pop bp ; 5d ; 0xc1396
+ retn ; c3 ; 0xc1397
+ ; disGetNextSymbol 0xc1398 LB 0x2f21 -> off=0x0 cb=0000000000000045 uValue=00000000000c1398 'find_vpti'
+find_vpti: ; 0xc1398 LB 0x45
+ push bx ; 53 ; 0xc1398 vgabios.c:916
+ push si ; 56 ; 0xc1399
+ push bp ; 55 ; 0xc139a
+ mov bp, sp ; 89 e5 ; 0xc139b
+ movzx bx, al ; 0f b6 d8 ; 0xc139d vgabios.c:921
+ mov si, bx ; 89 de ; 0xc13a0
+ sal si, 003h ; c1 e6 03 ; 0xc13a2
+ cmp byte [si+047afh], 000h ; 80 bc af 47 00 ; 0xc13a5
+ jne short 013d4h ; 75 28 ; 0xc13aa
+ mov si, 00089h ; be 89 00 ; 0xc13ac vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc13af
+ mov es, ax ; 8e c0 ; 0xc13b2
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc13b4
+ test AL, strict byte 010h ; a8 10 ; 0xc13b7 vgabios.c:923
+ je short 013c2h ; 74 07 ; 0xc13b9
+ movsx ax, byte [bx+07df5h] ; 0f be 87 f5 7d ; 0xc13bb vgabios.c:924
+ jmp short 013d9h ; eb 17 ; 0xc13c0 vgabios.c:925
+ test AL, strict byte 080h ; a8 80 ; 0xc13c2
+ je short 013cdh ; 74 07 ; 0xc13c4
+ movsx ax, byte [bx+07de5h] ; 0f be 87 e5 7d ; 0xc13c6 vgabios.c:926
+ jmp short 013d9h ; eb 0c ; 0xc13cb vgabios.c:927
+ movsx ax, byte [bx+07dedh] ; 0f be 87 ed 7d ; 0xc13cd vgabios.c:928
+ jmp short 013d9h ; eb 05 ; 0xc13d2 vgabios.c:929
+ movzx ax, byte [bx+0482eh] ; 0f b6 87 2e 48 ; 0xc13d4 vgabios.c:930
+ pop bp ; 5d ; 0xc13d9 vgabios.c:933
+ pop si ; 5e ; 0xc13da
+ pop bx ; 5b ; 0xc13db
+ retn ; c3 ; 0xc13dc
+ ; disGetNextSymbol 0xc13dd LB 0x2edc -> off=0x0 cb=00000000000004b2 uValue=00000000000c13dd 'biosfn_set_video_mode'
+biosfn_set_video_mode: ; 0xc13dd LB 0x4b2
+ push bp ; 55 ; 0xc13dd vgabios.c:938
+ mov bp, sp ; 89 e5 ; 0xc13de
+ push bx ; 53 ; 0xc13e0
+ push cx ; 51 ; 0xc13e1
+ push dx ; 52 ; 0xc13e2
+ push si ; 56 ; 0xc13e3
+ push di ; 57 ; 0xc13e4
+ sub sp, strict byte 00016h ; 83 ec 16 ; 0xc13e5
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc13e8
+ and AL, strict byte 080h ; 24 80 ; 0xc13eb vgabios.c:942
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc13ed
+ call 007bfh ; e8 cc f3 ; 0xc13f0 vgabios.c:952
+ test ax, ax ; 85 c0 ; 0xc13f3
+ je short 01403h ; 74 0c ; 0xc13f5
+ mov AL, strict byte 007h ; b0 07 ; 0xc13f7 vgabios.c:954
+ mov dx, 003c4h ; ba c4 03 ; 0xc13f9
+ out DX, AL ; ee ; 0xc13fc
+ xor al, al ; 30 c0 ; 0xc13fd vgabios.c:955
+ mov dx, 003c5h ; ba c5 03 ; 0xc13ff
+ out DX, AL ; ee ; 0xc1402
+ and byte [bp-00eh], 07fh ; 80 66 f2 7f ; 0xc1403 vgabios.c:960
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1407 vgabios.c:966
+ call 035edh ; e8 df 21 ; 0xc140b
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc140e
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1411 vgabios.c:972
+ je near 01885h ; 0f 84 6e 04 ; 0xc1413
+ mov bx, 000a8h ; bb a8 00 ; 0xc1417 vgabios.c:67
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc141a
+ mov es, dx ; 8e c2 ; 0xc141d
+ mov di, word [es:bx] ; 26 8b 3f ; 0xc141f
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc1422
+ mov bx, di ; 89 fb ; 0xc1426 vgabios.c:68
+ mov word [bp-014h], dx ; 89 56 ec ; 0xc1428
+ movzx cx, al ; 0f b6 c8 ; 0xc142b vgabios.c:978
+ mov ax, cx ; 89 c8 ; 0xc142e
+ call 01398h ; e8 65 ff ; 0xc1430
+ mov es, dx ; 8e c2 ; 0xc1433 vgabios.c:979
+ mov si, word [es:di] ; 26 8b 35 ; 0xc1435
+ mov dx, word [es:di+002h] ; 26 8b 55 02 ; 0xc1438
+ mov word [bp-01ah], dx ; 89 56 e6 ; 0xc143c
+ xor ah, ah ; 30 e4 ; 0xc143f vgabios.c:980
+ sal ax, 006h ; c1 e0 06 ; 0xc1441
+ add si, ax ; 01 c6 ; 0xc1444
+ mov di, 00089h ; bf 89 00 ; 0xc1446 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1449
+ mov es, ax ; 8e c0 ; 0xc144c
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc144e
+ mov ah, al ; 88 c4 ; 0xc1451 vgabios.c:48
+ test AL, strict byte 008h ; a8 08 ; 0xc1453 vgabios.c:997
+ jne near 01509h ; 0f 85 b0 00 ; 0xc1455
+ mov di, cx ; 89 cf ; 0xc1459 vgabios.c:999
+ sal di, 003h ; c1 e7 03 ; 0xc145b
+ mov al, byte [di+047b4h] ; 8a 85 b4 47 ; 0xc145e
+ mov dx, 003c6h ; ba c6 03 ; 0xc1462
+ out DX, AL ; ee ; 0xc1465
+ xor al, al ; 30 c0 ; 0xc1466 vgabios.c:1002
+ mov dx, 003c8h ; ba c8 03 ; 0xc1468
+ out DX, AL ; ee ; 0xc146b
+ mov cl, byte [di+047b5h] ; 8a 8d b5 47 ; 0xc146c vgabios.c:1005
+ cmp cl, 001h ; 80 f9 01 ; 0xc1470
+ jc short 01483h ; 72 0e ; 0xc1473
+ jbe short 0148eh ; 76 17 ; 0xc1475
+ cmp cl, 003h ; 80 f9 03 ; 0xc1477
+ je short 0149ch ; 74 20 ; 0xc147a
+ cmp cl, 002h ; 80 f9 02 ; 0xc147c
+ je short 01495h ; 74 14 ; 0xc147f
+ jmp short 014a1h ; eb 1e ; 0xc1481
+ test cl, cl ; 84 c9 ; 0xc1483
+ jne short 014a1h ; 75 1a ; 0xc1485
+ mov word [bp-016h], 04fc2h ; c7 46 ea c2 4f ; 0xc1487 vgabios.c:1007
+ jmp short 014a1h ; eb 13 ; 0xc148c vgabios.c:1008
+ mov word [bp-016h], 05082h ; c7 46 ea 82 50 ; 0xc148e vgabios.c:1010
+ jmp short 014a1h ; eb 0c ; 0xc1493 vgabios.c:1011
+ mov word [bp-016h], 05142h ; c7 46 ea 42 51 ; 0xc1495 vgabios.c:1013
+ jmp short 014a1h ; eb 05 ; 0xc149a vgabios.c:1014
+ mov word [bp-016h], 05202h ; c7 46 ea 02 52 ; 0xc149c vgabios.c:1016
+ movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14a1 vgabios.c:1020
+ sal di, 003h ; c1 e7 03 ; 0xc14a5
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc14a8
+ jne short 014beh ; 75 0f ; 0xc14ad
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc14af vgabios.c:1022
+ cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc14b2
+ jne short 014beh ; 75 05 ; 0xc14b7
+ mov word [bp-016h], 05082h ; c7 46 ea 82 50 ; 0xc14b9 vgabios.c:1023
+ xor cx, cx ; 31 c9 ; 0xc14be vgabios.c:1026
+ jmp short 014d1h ; eb 0f ; 0xc14c0
+ xor al, al ; 30 c0 ; 0xc14c2 vgabios.c:1033
+ mov dx, 003c9h ; ba c9 03 ; 0xc14c4
+ out DX, AL ; ee ; 0xc14c7
+ out DX, AL ; ee ; 0xc14c8 vgabios.c:1034
+ out DX, AL ; ee ; 0xc14c9 vgabios.c:1035
+ inc cx ; 41 ; 0xc14ca vgabios.c:1037
+ cmp cx, 00100h ; 81 f9 00 01 ; 0xc14cb
+ jnc short 014fch ; 73 2b ; 0xc14cf
+ movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc14d1
+ sal di, 003h ; c1 e7 03 ; 0xc14d5
+ movzx di, byte [di+047b5h] ; 0f b6 bd b5 47 ; 0xc14d8
+ movzx di, byte [di+0483eh] ; 0f b6 bd 3e 48 ; 0xc14dd
+ cmp cx, di ; 39 f9 ; 0xc14e2
+ jnbe short 014c2h ; 77 dc ; 0xc14e4
+ imul di, cx, strict byte 00003h ; 6b f9 03 ; 0xc14e6
+ add di, word [bp-016h] ; 03 7e ea ; 0xc14e9
+ mov al, byte [di] ; 8a 05 ; 0xc14ec
+ mov dx, 003c9h ; ba c9 03 ; 0xc14ee
+ out DX, AL ; ee ; 0xc14f1
+ mov al, byte [di+001h] ; 8a 45 01 ; 0xc14f2
+ out DX, AL ; ee ; 0xc14f5
+ mov al, byte [di+002h] ; 8a 45 02 ; 0xc14f6
+ out DX, AL ; ee ; 0xc14f9
+ jmp short 014cah ; eb ce ; 0xc14fa
+ test ah, 002h ; f6 c4 02 ; 0xc14fc vgabios.c:1038
+ je short 01509h ; 74 08 ; 0xc14ff
+ mov dx, 00100h ; ba 00 01 ; 0xc1501 vgabios.c:1040
+ xor ax, ax ; 31 c0 ; 0xc1504
+ call 010c0h ; e8 b7 fb ; 0xc1506
+ mov dx, 003dah ; ba da 03 ; 0xc1509 vgabios.c:1045
+ in AL, DX ; ec ; 0xc150c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc150d
+ xor cx, cx ; 31 c9 ; 0xc150f vgabios.c:1048
+ jmp short 01518h ; eb 05 ; 0xc1511
+ cmp cx, strict byte 00013h ; 83 f9 13 ; 0xc1513
+ jnbe short 0152dh ; 77 15 ; 0xc1516
+ mov al, cl ; 88 c8 ; 0xc1518 vgabios.c:1049
+ mov dx, 003c0h ; ba c0 03 ; 0xc151a
+ out DX, AL ; ee ; 0xc151d
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc151e vgabios.c:1050
+ mov di, si ; 89 f7 ; 0xc1521
+ add di, cx ; 01 cf ; 0xc1523
+ mov al, byte [es:di+023h] ; 26 8a 45 23 ; 0xc1525
+ out DX, AL ; ee ; 0xc1529
+ inc cx ; 41 ; 0xc152a vgabios.c:1051
+ jmp short 01513h ; eb e6 ; 0xc152b
+ mov AL, strict byte 014h ; b0 14 ; 0xc152d vgabios.c:1052
+ mov dx, 003c0h ; ba c0 03 ; 0xc152f
+ out DX, AL ; ee ; 0xc1532
+ xor al, al ; 30 c0 ; 0xc1533 vgabios.c:1053
+ out DX, AL ; ee ; 0xc1535
+ mov es, [bp-014h] ; 8e 46 ec ; 0xc1536 vgabios.c:1056
+ mov dx, word [es:bx+004h] ; 26 8b 57 04 ; 0xc1539
+ mov ax, word [es:bx+006h] ; 26 8b 47 06 ; 0xc153d
+ test ax, ax ; 85 c0 ; 0xc1541
+ jne short 01549h ; 75 04 ; 0xc1543
+ test dx, dx ; 85 d2 ; 0xc1545
+ je short 01589h ; 74 40 ; 0xc1547
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1549 vgabios.c:1060
+ xor cx, cx ; 31 c9 ; 0xc154c vgabios.c:1061
+ jmp short 01555h ; eb 05 ; 0xc154e
+ cmp cx, strict byte 00010h ; 83 f9 10 ; 0xc1550
+ jnc short 01579h ; 73 24 ; 0xc1553
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1555 vgabios.c:1062
+ mov di, si ; 89 f7 ; 0xc1558
+ add di, cx ; 01 cf ; 0xc155a
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc155c
+ mov word [bp-020h], ax ; 89 46 e0 ; 0xc155f
+ mov ax, dx ; 89 d0 ; 0xc1562
+ add ax, cx ; 01 c8 ; 0xc1564
+ mov word [bp-01eh], ax ; 89 46 e2 ; 0xc1566
+ mov al, byte [es:di+023h] ; 26 8a 45 23 ; 0xc1569
+ mov es, [bp-020h] ; 8e 46 e0 ; 0xc156d
+ mov di, word [bp-01eh] ; 8b 7e e2 ; 0xc1570
+ mov byte [es:di], al ; 26 88 05 ; 0xc1573
+ inc cx ; 41 ; 0xc1576
+ jmp short 01550h ; eb d7 ; 0xc1577
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1579 vgabios.c:1063
+ mov al, byte [es:si+034h] ; 26 8a 44 34 ; 0xc157c
+ mov es, [bp-01ch] ; 8e 46 e4 ; 0xc1580
+ mov di, dx ; 89 d7 ; 0xc1583
+ mov byte [es:di+010h], al ; 26 88 45 10 ; 0xc1585
+ xor al, al ; 30 c0 ; 0xc1589 vgabios.c:1067
+ mov dx, 003c4h ; ba c4 03 ; 0xc158b
+ out DX, AL ; ee ; 0xc158e
+ mov AL, strict byte 003h ; b0 03 ; 0xc158f vgabios.c:1068
+ mov dx, 003c5h ; ba c5 03 ; 0xc1591
+ out DX, AL ; ee ; 0xc1594
+ mov cx, strict word 00001h ; b9 01 00 ; 0xc1595 vgabios.c:1069
+ jmp short 0159fh ; eb 05 ; 0xc1598
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc159a
+ jnbe short 015b7h ; 77 18 ; 0xc159d
+ mov al, cl ; 88 c8 ; 0xc159f vgabios.c:1070
+ mov dx, 003c4h ; ba c4 03 ; 0xc15a1
+ out DX, AL ; ee ; 0xc15a4
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc15a5 vgabios.c:1071
+ mov di, si ; 89 f7 ; 0xc15a8
+ add di, cx ; 01 cf ; 0xc15aa
+ mov al, byte [es:di+004h] ; 26 8a 45 04 ; 0xc15ac
+ mov dx, 003c5h ; ba c5 03 ; 0xc15b0
+ out DX, AL ; ee ; 0xc15b3
+ inc cx ; 41 ; 0xc15b4 vgabios.c:1072
+ jmp short 0159ah ; eb e3 ; 0xc15b5
+ xor cx, cx ; 31 c9 ; 0xc15b7 vgabios.c:1075
+ jmp short 015c0h ; eb 05 ; 0xc15b9
+ cmp cx, strict byte 00008h ; 83 f9 08 ; 0xc15bb
+ jnbe short 015d8h ; 77 18 ; 0xc15be
+ mov al, cl ; 88 c8 ; 0xc15c0 vgabios.c:1076
+ mov dx, 003ceh ; ba ce 03 ; 0xc15c2
+ out DX, AL ; ee ; 0xc15c5
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc15c6 vgabios.c:1077
+ mov di, si ; 89 f7 ; 0xc15c9
+ add di, cx ; 01 cf ; 0xc15cb
+ mov al, byte [es:di+037h] ; 26 8a 45 37 ; 0xc15cd
+ mov dx, 003cfh ; ba cf 03 ; 0xc15d1
+ out DX, AL ; ee ; 0xc15d4
+ inc cx ; 41 ; 0xc15d5 vgabios.c:1078
+ jmp short 015bbh ; eb e3 ; 0xc15d6
+ movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc15d8 vgabios.c:1081
+ sal di, 003h ; c1 e7 03 ; 0xc15dc
+ cmp byte [di+047b0h], 001h ; 80 bd b0 47 01 ; 0xc15df
+ jne short 015ebh ; 75 05 ; 0xc15e4
+ mov cx, 003b4h ; b9 b4 03 ; 0xc15e6
+ jmp short 015eeh ; eb 03 ; 0xc15e9
+ mov cx, 003d4h ; b9 d4 03 ; 0xc15eb
+ mov word [bp-018h], cx ; 89 4e e8 ; 0xc15ee
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc15f1 vgabios.c:1084
+ mov al, byte [es:si+009h] ; 26 8a 44 09 ; 0xc15f4
+ mov dx, 003c2h ; ba c2 03 ; 0xc15f8
+ out DX, AL ; ee ; 0xc15fb
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc15fc vgabios.c:1087
+ mov dx, cx ; 89 ca ; 0xc15ff
+ out DX, ax ; ef ; 0xc1601
+ xor cx, cx ; 31 c9 ; 0xc1602 vgabios.c:1089
+ jmp short 0160bh ; eb 05 ; 0xc1604
+ cmp cx, strict byte 00018h ; 83 f9 18 ; 0xc1606
+ jnbe short 01621h ; 77 16 ; 0xc1609
+ mov al, cl ; 88 c8 ; 0xc160b vgabios.c:1090
+ mov dx, word [bp-018h] ; 8b 56 e8 ; 0xc160d
+ out DX, AL ; ee ; 0xc1610
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1611 vgabios.c:1091
+ mov di, si ; 89 f7 ; 0xc1614
+ add di, cx ; 01 cf ; 0xc1616
+ inc dx ; 42 ; 0xc1618
+ mov al, byte [es:di+00ah] ; 26 8a 45 0a ; 0xc1619
+ out DX, AL ; ee ; 0xc161d
+ inc cx ; 41 ; 0xc161e vgabios.c:1092
+ jmp short 01606h ; eb e5 ; 0xc161f
+ mov AL, strict byte 020h ; b0 20 ; 0xc1621 vgabios.c:1095
+ mov dx, 003c0h ; ba c0 03 ; 0xc1623
+ out DX, AL ; ee ; 0xc1626
+ mov dx, word [bp-018h] ; 8b 56 e8 ; 0xc1627 vgabios.c:1096
+ add dx, strict byte 00006h ; 83 c2 06 ; 0xc162a
+ in AL, DX ; ec ; 0xc162d
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc162e
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1630 vgabios.c:1098
+ jne short 01692h ; 75 5c ; 0xc1634
+ movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc1636 vgabios.c:1100
+ sal di, 003h ; c1 e7 03 ; 0xc163a
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc163d
+ jne short 01656h ; 75 12 ; 0xc1642
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc1644 vgabios.c:1102
+ mov cx, 04000h ; b9 00 40 ; 0xc1648
+ mov ax, 00720h ; b8 20 07 ; 0xc164b
+ xor di, di ; 31 ff ; 0xc164e
+ jcxz 01654h ; e3 02 ; 0xc1650
+ rep stosw ; f3 ab ; 0xc1652
+ jmp short 01692h ; eb 3c ; 0xc1654 vgabios.c:1104
+ cmp byte [bp-00eh], 00dh ; 80 7e f2 0d ; 0xc1656 vgabios.c:1106
+ jnc short 0166dh ; 73 11 ; 0xc165a
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc165c vgabios.c:1108
+ mov cx, 04000h ; b9 00 40 ; 0xc1660
+ xor ax, ax ; 31 c0 ; 0xc1663
+ xor di, di ; 31 ff ; 0xc1665
+ jcxz 0166bh ; e3 02 ; 0xc1667
+ rep stosw ; f3 ab ; 0xc1669
+ jmp short 01692h ; eb 25 ; 0xc166b vgabios.c:1110
+ mov AL, strict byte 002h ; b0 02 ; 0xc166d vgabios.c:1112
+ mov dx, 003c4h ; ba c4 03 ; 0xc166f
+ out DX, AL ; ee ; 0xc1672
+ mov dx, 003c5h ; ba c5 03 ; 0xc1673 vgabios.c:1113
+ in AL, DX ; ec ; 0xc1676
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1677
+ mov word [bp-01eh], ax ; 89 46 e2 ; 0xc1679
+ mov AL, strict byte 00fh ; b0 0f ; 0xc167c vgabios.c:1114
+ out DX, AL ; ee ; 0xc167e
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc167f vgabios.c:1115
+ mov cx, 08000h ; b9 00 80 ; 0xc1683
+ xor ax, ax ; 31 c0 ; 0xc1686
+ xor di, di ; 31 ff ; 0xc1688
+ jcxz 0168eh ; e3 02 ; 0xc168a
+ rep stosw ; f3 ab ; 0xc168c
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc168e vgabios.c:1116
+ out DX, AL ; ee ; 0xc1691
+ mov di, strict word 00049h ; bf 49 00 ; 0xc1692 vgabios.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1695
+ mov es, ax ; 8e c0 ; 0xc1698
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc169a
+ mov byte [es:di], al ; 26 88 05 ; 0xc169d
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc16a0 vgabios.c:1123
+ movzx ax, byte [es:si] ; 26 0f b6 04 ; 0xc16a3
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc16a7 vgabios.c:62
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc16aa
+ mov es, dx ; 8e c2 ; 0xc16ad
+ mov word [es:di], ax ; 26 89 05 ; 0xc16af
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc16b2 vgabios.c:60
+ mov ax, word [es:si+003h] ; 26 8b 44 03 ; 0xc16b5
+ mov di, strict word 0004ch ; bf 4c 00 ; 0xc16b9 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc16bc
+ mov word [es:di], ax ; 26 89 05 ; 0xc16be
+ mov di, strict word 00063h ; bf 63 00 ; 0xc16c1 vgabios.c:62
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc16c4
+ mov word [es:di], ax ; 26 89 05 ; 0xc16c7
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc16ca vgabios.c:50
+ mov al, byte [es:si+001h] ; 26 8a 44 01 ; 0xc16cd
+ mov di, 00084h ; bf 84 00 ; 0xc16d1 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc16d4
+ mov byte [es:di], al ; 26 88 05 ; 0xc16d6
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc16d9 vgabios.c:1127
+ movzx ax, byte [es:si+002h] ; 26 0f b6 44 02 ; 0xc16dc
+ mov di, 00085h ; bf 85 00 ; 0xc16e1 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc16e4
+ mov word [es:di], ax ; 26 89 05 ; 0xc16e6
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc16e9 vgabios.c:1128
+ or AL, strict byte 060h ; 0c 60 ; 0xc16ec
+ mov di, 00087h ; bf 87 00 ; 0xc16ee vgabios.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc16f1
+ mov di, 00088h ; bf 88 00 ; 0xc16f4 vgabios.c:52
+ mov byte [es:di], 0f9h ; 26 c6 05 f9 ; 0xc16f7
+ mov di, 0008ah ; bf 8a 00 ; 0xc16fb vgabios.c:52
+ mov byte [es:di], 008h ; 26 c6 05 08 ; 0xc16fe
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc1702 vgabios.c:1134
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc1705
+ jnbe short 0172fh ; 77 26 ; 0xc1707
+ movzx di, al ; 0f b6 f8 ; 0xc1709 vgabios.c:1136
+ mov al, byte [di+07dddh] ; 8a 85 dd 7d ; 0xc170c vgabios.c:50
+ mov di, strict word 00065h ; bf 65 00 ; 0xc1710 vgabios.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc1713
+ cmp byte [bp-00eh], 006h ; 80 7e f2 06 ; 0xc1716 vgabios.c:1137
+ jne short 01721h ; 75 05 ; 0xc171a
+ mov dx, strict word 0003fh ; ba 3f 00 ; 0xc171c
+ jmp short 01724h ; eb 03 ; 0xc171f
+ mov dx, strict word 00030h ; ba 30 00 ; 0xc1721
+ mov di, strict word 00066h ; bf 66 00 ; 0xc1724 vgabios.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1727
+ mov es, ax ; 8e c0 ; 0xc172a
+ mov byte [es:di], dl ; 26 88 15 ; 0xc172c
+ movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc172f vgabios.c:1141
+ sal di, 003h ; c1 e7 03 ; 0xc1733
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc1736
+ jne short 01746h ; 75 09 ; 0xc173b
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc173d vgabios.c:1143
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc1740
+ call 0114ch ; e8 06 fa ; 0xc1743
+ xor cx, cx ; 31 c9 ; 0xc1746 vgabios.c:1148
+ jmp short 0174fh ; eb 05 ; 0xc1748
+ cmp cx, strict byte 00008h ; 83 f9 08 ; 0xc174a
+ jnc short 0175ah ; 73 0b ; 0xc174d
+ movzx ax, cl ; 0f b6 c1 ; 0xc174f vgabios.c:1149
+ xor dx, dx ; 31 d2 ; 0xc1752
+ call 01242h ; e8 eb fa ; 0xc1754
+ inc cx ; 41 ; 0xc1757
+ jmp short 0174ah ; eb f0 ; 0xc1758
+ xor ax, ax ; 31 c0 ; 0xc175a vgabios.c:1152
+ call 012cbh ; e8 6c fb ; 0xc175c
+ movzx di, byte [bp-010h] ; 0f b6 7e f0 ; 0xc175f vgabios.c:1155
+ sal di, 003h ; c1 e7 03 ; 0xc1763
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc1766
+ jne near 01850h ; 0f 85 e1 00 ; 0xc176b
+ mov es, [bp-014h] ; 8e 46 ec ; 0xc176f vgabios.c:1157
+ mov di, word [es:bx+008h] ; 26 8b 7f 08 ; 0xc1772
+ mov ax, word [es:bx+00ah] ; 26 8b 47 0a ; 0xc1776
+ mov word [bp-012h], ax ; 89 46 ee ; 0xc177a
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc177d vgabios.c:1159
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc1780
+ cmp AL, strict byte 00eh ; 3c 0e ; 0xc1784
+ je short 017a8h ; 74 20 ; 0xc1786
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc1788
+ jne short 017d2h ; 75 46 ; 0xc178a
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc178c vgabios.c:1161
+ movzx ax, byte [es:si+002h] ; 26 0f b6 44 02 ; 0xc178f
+ push ax ; 50 ; 0xc1794
+ push dword 000000000h ; 66 6a 00 ; 0xc1795
+ mov cx, 00100h ; b9 00 01 ; 0xc1798
+ mov bx, 0556ch ; bb 6c 55 ; 0xc179b
+ mov dx, 0c000h ; ba 00 c0 ; 0xc179e
+ xor ax, ax ; 31 c0 ; 0xc17a1
+ call 02c0ah ; e8 64 14 ; 0xc17a3
+ jmp short 017f4h ; eb 4c ; 0xc17a6 vgabios.c:1162
+ xor ah, ah ; 30 e4 ; 0xc17a8 vgabios.c:1164
+ push ax ; 50 ; 0xc17aa
+ push dword 000000000h ; 66 6a 00 ; 0xc17ab
+ mov cx, 00100h ; b9 00 01 ; 0xc17ae
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc17b1
+ mov dx, 0c000h ; ba 00 c0 ; 0xc17b4
+ xor al, al ; 30 c0 ; 0xc17b7
+ call 02c0ah ; e8 4e 14 ; 0xc17b9
+ cmp byte [bp-00eh], 007h ; 80 7e f2 07 ; 0xc17bc vgabios.c:1165
+ jne short 017f4h ; 75 32 ; 0xc17c0
+ mov cx, strict word 0000eh ; b9 0e 00 ; 0xc17c2 vgabios.c:1166
+ xor bx, bx ; 31 db ; 0xc17c5
+ mov dx, 07b6ch ; ba 6c 7b ; 0xc17c7
+ mov ax, 0c000h ; b8 00 c0 ; 0xc17ca
+ call 02b95h ; e8 c5 13 ; 0xc17cd
+ jmp short 017f4h ; eb 22 ; 0xc17d0 vgabios.c:1167
+ xor ah, ah ; 30 e4 ; 0xc17d2 vgabios.c:1169
+ push ax ; 50 ; 0xc17d4
+ push dword 000000000h ; 66 6a 00 ; 0xc17d5
+ mov cx, 00100h ; b9 00 01 ; 0xc17d8
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc17db
+ mov dx, 0c000h ; ba 00 c0 ; 0xc17de
+ xor al, al ; 30 c0 ; 0xc17e1
+ call 02c0ah ; e8 24 14 ; 0xc17e3
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc17e6 vgabios.c:1170
+ xor bx, bx ; 31 db ; 0xc17e9
+ mov dx, 07c99h ; ba 99 7c ; 0xc17eb
+ mov ax, 0c000h ; b8 00 c0 ; 0xc17ee
+ call 02b95h ; e8 a1 13 ; 0xc17f1
+ cmp word [bp-012h], strict byte 00000h ; 83 7e ee 00 ; 0xc17f4 vgabios.c:1172
+ jne short 017feh ; 75 04 ; 0xc17f8
+ test di, di ; 85 ff ; 0xc17fa
+ je short 01848h ; 74 4a ; 0xc17fc
+ xor cx, cx ; 31 c9 ; 0xc17fe vgabios.c:1177
+ mov es, [bp-012h] ; 8e 46 ee ; 0xc1800 vgabios.c:1179
+ mov bx, di ; 89 fb ; 0xc1803
+ add bx, cx ; 01 cb ; 0xc1805
+ mov al, byte [es:bx+00bh] ; 26 8a 47 0b ; 0xc1807
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc180b
+ je short 01817h ; 74 08 ; 0xc180d
+ cmp al, byte [bp-00eh] ; 3a 46 f2 ; 0xc180f vgabios.c:1181
+ je short 01817h ; 74 03 ; 0xc1812
+ inc cx ; 41 ; 0xc1814 vgabios.c:1183
+ jmp short 01800h ; eb e9 ; 0xc1815 vgabios.c:1184
+ mov es, [bp-012h] ; 8e 46 ee ; 0xc1817 vgabios.c:1186
+ mov bx, di ; 89 fb ; 0xc181a
+ add bx, cx ; 01 cb ; 0xc181c
+ mov al, byte [es:bx+00bh] ; 26 8a 47 0b ; 0xc181e
+ cmp al, byte [bp-00eh] ; 3a 46 f2 ; 0xc1822
+ jne short 01848h ; 75 21 ; 0xc1825
+ movzx ax, byte [es:di] ; 26 0f b6 05 ; 0xc1827 vgabios.c:1191
+ push ax ; 50 ; 0xc182b
+ movzx ax, byte [es:di+001h] ; 26 0f b6 45 01 ; 0xc182c
+ push ax ; 50 ; 0xc1831
+ push word [es:di+004h] ; 26 ff 75 04 ; 0xc1832
+ mov cx, word [es:di+002h] ; 26 8b 4d 02 ; 0xc1836
+ mov bx, word [es:di+006h] ; 26 8b 5d 06 ; 0xc183a
+ mov dx, word [es:di+008h] ; 26 8b 55 08 ; 0xc183e
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc1842
+ call 02c0ah ; e8 c2 13 ; 0xc1845
+ xor bl, bl ; 30 db ; 0xc1848 vgabios.c:1195
+ mov AL, strict byte 003h ; b0 03 ; 0xc184a
+ mov AH, strict byte 011h ; b4 11 ; 0xc184c
+ int 06dh ; cd 6d ; 0xc184e
+ mov bx, 0596ch ; bb 6c 59 ; 0xc1850 vgabios.c:1199
+ mov cx, ds ; 8c d9 ; 0xc1853
+ mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1855
+ call 009f0h ; e8 95 f1 ; 0xc1858
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc185b vgabios.c:1201
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc185e
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc1862
+ je short 01880h ; 74 1a ; 0xc1864
+ cmp AL, strict byte 00eh ; 3c 0e ; 0xc1866
+ je short 0187bh ; 74 11 ; 0xc1868
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc186a
+ jne short 01885h ; 75 17 ; 0xc186c
+ mov bx, 0556ch ; bb 6c 55 ; 0xc186e vgabios.c:1203
+ mov cx, ds ; 8c d9 ; 0xc1871
+ mov ax, strict word 00043h ; b8 43 00 ; 0xc1873
+ call 009f0h ; e8 77 f1 ; 0xc1876
+ jmp short 01885h ; eb 0a ; 0xc1879 vgabios.c:1204
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc187b vgabios.c:1206
+ jmp short 01871h ; eb f1 ; 0xc187e
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc1880 vgabios.c:1209
+ jmp short 01871h ; eb ec ; 0xc1883
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1885 vgabios.c:1212
+ pop di ; 5f ; 0xc1888
+ pop si ; 5e ; 0xc1889
+ pop dx ; 5a ; 0xc188a
+ pop cx ; 59 ; 0xc188b
+ pop bx ; 5b ; 0xc188c
+ pop bp ; 5d ; 0xc188d
+ retn ; c3 ; 0xc188e
+ ; disGetNextSymbol 0xc188f LB 0x2a2a -> off=0x0 cb=0000000000000075 uValue=00000000000c188f 'vgamem_copy_pl4'
+vgamem_copy_pl4: ; 0xc188f LB 0x75
+ push bp ; 55 ; 0xc188f vgabios.c:1215
+ mov bp, sp ; 89 e5 ; 0xc1890
+ push si ; 56 ; 0xc1892
+ push di ; 57 ; 0xc1893
+ push ax ; 50 ; 0xc1894
+ push ax ; 50 ; 0xc1895
+ mov bh, cl ; 88 cf ; 0xc1896
+ movzx di, dl ; 0f b6 fa ; 0xc1898 vgabios.c:1221
+ movzx cx, byte [bp+006h] ; 0f b6 4e 06 ; 0xc189b
+ imul di, cx ; 0f af f9 ; 0xc189f
+ movzx si, byte [bp+004h] ; 0f b6 76 04 ; 0xc18a2
+ imul di, si ; 0f af fe ; 0xc18a6
+ xor ah, ah ; 30 e4 ; 0xc18a9
+ add di, ax ; 01 c7 ; 0xc18ab
+ mov word [bp-008h], di ; 89 7e f8 ; 0xc18ad
+ movzx di, bl ; 0f b6 fb ; 0xc18b0 vgabios.c:1222
+ imul cx, di ; 0f af cf ; 0xc18b3
+ imul cx, si ; 0f af ce ; 0xc18b6
+ add cx, ax ; 01 c1 ; 0xc18b9
+ mov word [bp-006h], cx ; 89 4e fa ; 0xc18bb
+ mov ax, 00105h ; b8 05 01 ; 0xc18be vgabios.c:1223
+ mov dx, 003ceh ; ba ce 03 ; 0xc18c1
+ out DX, ax ; ef ; 0xc18c4
+ xor bl, bl ; 30 db ; 0xc18c5 vgabios.c:1224
+ cmp bl, byte [bp+006h] ; 3a 5e 06 ; 0xc18c7
+ jnc short 018f4h ; 73 28 ; 0xc18ca
+ movzx cx, bh ; 0f b6 cf ; 0xc18cc vgabios.c:1226
+ movzx si, bl ; 0f b6 f3 ; 0xc18cf
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc18d2
+ imul ax, si ; 0f af c6 ; 0xc18d6
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc18d9
+ add si, ax ; 01 c6 ; 0xc18dc
+ mov di, word [bp-006h] ; 8b 7e fa ; 0xc18de
+ add di, ax ; 01 c7 ; 0xc18e1
+ mov dx, 0a000h ; ba 00 a0 ; 0xc18e3
+ mov es, dx ; 8e c2 ; 0xc18e6
+ jcxz 018f0h ; e3 06 ; 0xc18e8
+ push DS ; 1e ; 0xc18ea
+ mov ds, dx ; 8e da ; 0xc18eb
+ rep movsb ; f3 a4 ; 0xc18ed
+ pop DS ; 1f ; 0xc18ef
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc18f0 vgabios.c:1227
+ jmp short 018c7h ; eb d3 ; 0xc18f2
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc18f4 vgabios.c:1228
+ mov dx, 003ceh ; ba ce 03 ; 0xc18f7
+ out DX, ax ; ef ; 0xc18fa
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc18fb vgabios.c:1229
+ pop di ; 5f ; 0xc18fe
+ pop si ; 5e ; 0xc18ff
+ pop bp ; 5d ; 0xc1900
+ retn 00004h ; c2 04 00 ; 0xc1901
+ ; disGetNextSymbol 0xc1904 LB 0x29b5 -> off=0x0 cb=0000000000000060 uValue=00000000000c1904 'vgamem_fill_pl4'
+vgamem_fill_pl4: ; 0xc1904 LB 0x60
+ push bp ; 55 ; 0xc1904 vgabios.c:1232
+ mov bp, sp ; 89 e5 ; 0xc1905
+ push di ; 57 ; 0xc1907
+ push ax ; 50 ; 0xc1908
+ push ax ; 50 ; 0xc1909
+ mov byte [bp-004h], bl ; 88 5e fc ; 0xc190a
+ mov bh, cl ; 88 cf ; 0xc190d
+ movzx cx, dl ; 0f b6 ca ; 0xc190f vgabios.c:1238
+ movzx dx, byte [bp+004h] ; 0f b6 56 04 ; 0xc1912
+ imul cx, dx ; 0f af ca ; 0xc1916
+ movzx dx, bh ; 0f b6 d7 ; 0xc1919
+ imul dx, cx ; 0f af d1 ; 0xc191c
+ xor ah, ah ; 30 e4 ; 0xc191f
+ add dx, ax ; 01 c2 ; 0xc1921
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc1923
+ mov ax, 00205h ; b8 05 02 ; 0xc1926 vgabios.c:1239
+ mov dx, 003ceh ; ba ce 03 ; 0xc1929
+ out DX, ax ; ef ; 0xc192c
+ xor bl, bl ; 30 db ; 0xc192d vgabios.c:1240
+ cmp bl, byte [bp+004h] ; 3a 5e 04 ; 0xc192f
+ jnc short 01955h ; 73 21 ; 0xc1932
+ movzx cx, byte [bp-004h] ; 0f b6 4e fc ; 0xc1934 vgabios.c:1242
+ movzx ax, byte [bp+006h] ; 0f b6 46 06 ; 0xc1938
+ movzx dx, bl ; 0f b6 d3 ; 0xc193c
+ movzx di, bh ; 0f b6 ff ; 0xc193f
+ imul di, dx ; 0f af fa ; 0xc1942
+ add di, word [bp-006h] ; 03 7e fa ; 0xc1945
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1948
+ mov es, dx ; 8e c2 ; 0xc194b
+ jcxz 01951h ; e3 02 ; 0xc194d
+ rep stosb ; f3 aa ; 0xc194f
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc1951 vgabios.c:1243
+ jmp short 0192fh ; eb da ; 0xc1953
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1955 vgabios.c:1244
+ mov dx, 003ceh ; ba ce 03 ; 0xc1958
+ out DX, ax ; ef ; 0xc195b
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc195c vgabios.c:1245
+ pop di ; 5f ; 0xc195f
+ pop bp ; 5d ; 0xc1960
+ retn 00004h ; c2 04 00 ; 0xc1961
+ ; disGetNextSymbol 0xc1964 LB 0x2955 -> off=0x0 cb=00000000000000a3 uValue=00000000000c1964 'vgamem_copy_cga'
+vgamem_copy_cga: ; 0xc1964 LB 0xa3
+ push bp ; 55 ; 0xc1964 vgabios.c:1248
+ mov bp, sp ; 89 e5 ; 0xc1965
+ push si ; 56 ; 0xc1967
+ push di ; 57 ; 0xc1968
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc1969
+ mov dh, bl ; 88 de ; 0xc196c
+ mov byte [bp-006h], cl ; 88 4e fa ; 0xc196e
+ movzx di, dl ; 0f b6 fa ; 0xc1971 vgabios.c:1254
+ movzx si, byte [bp+006h] ; 0f b6 76 06 ; 0xc1974
+ imul di, si ; 0f af fe ; 0xc1978
+ movzx bx, byte [bp+004h] ; 0f b6 5e 04 ; 0xc197b
+ imul di, bx ; 0f af fb ; 0xc197f
+ sar di, 1 ; d1 ff ; 0xc1982
+ xor ah, ah ; 30 e4 ; 0xc1984
+ add di, ax ; 01 c7 ; 0xc1986
+ mov word [bp-00ch], di ; 89 7e f4 ; 0xc1988
+ movzx dx, dh ; 0f b6 d6 ; 0xc198b vgabios.c:1255
+ imul dx, si ; 0f af d6 ; 0xc198e
+ imul dx, bx ; 0f af d3 ; 0xc1991
+ sar dx, 1 ; d1 fa ; 0xc1994
+ add dx, ax ; 01 c2 ; 0xc1996
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc1998
+ mov byte [bp-008h], ah ; 88 66 f8 ; 0xc199b vgabios.c:1256
+ movzx ax, byte [bp+006h] ; 0f b6 46 06 ; 0xc199e
+ cwd ; 99 ; 0xc19a2
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2 ; 0xc19a3
+ sar ax, 1 ; d1 f8 ; 0xc19a5
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8 ; 0xc19a7
+ cmp bx, ax ; 39 c3 ; 0xc19ab
+ jnl short 019feh ; 7d 4f ; 0xc19ad
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc19af vgabios.c:1258
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc19b3
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc19b6
+ imul bx, ax ; 0f af d8 ; 0xc19ba
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc19bd
+ add si, bx ; 01 de ; 0xc19c0
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc19c2
+ add di, bx ; 01 df ; 0xc19c5
+ mov cx, word [bp-00eh] ; 8b 4e f2 ; 0xc19c7
+ mov dx, 0b800h ; ba 00 b8 ; 0xc19ca
+ mov es, dx ; 8e c2 ; 0xc19cd
+ jcxz 019d7h ; e3 06 ; 0xc19cf
+ push DS ; 1e ; 0xc19d1
+ mov ds, dx ; 8e da ; 0xc19d2
+ rep movsb ; f3 a4 ; 0xc19d4
+ pop DS ; 1f ; 0xc19d6
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc19d7 vgabios.c:1259
+ add si, 02000h ; 81 c6 00 20 ; 0xc19da
+ add si, bx ; 01 de ; 0xc19de
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc19e0
+ add di, 02000h ; 81 c7 00 20 ; 0xc19e3
+ add di, bx ; 01 df ; 0xc19e7
+ mov cx, word [bp-00eh] ; 8b 4e f2 ; 0xc19e9
+ mov dx, 0b800h ; ba 00 b8 ; 0xc19ec
+ mov es, dx ; 8e c2 ; 0xc19ef
+ jcxz 019f9h ; e3 06 ; 0xc19f1
+ push DS ; 1e ; 0xc19f3
+ mov ds, dx ; 8e da ; 0xc19f4
+ rep movsb ; f3 a4 ; 0xc19f6
+ pop DS ; 1f ; 0xc19f8
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc19f9 vgabios.c:1260
+ jmp short 0199eh ; eb a0 ; 0xc19fc
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc19fe vgabios.c:1261
+ pop di ; 5f ; 0xc1a01
+ pop si ; 5e ; 0xc1a02
+ pop bp ; 5d ; 0xc1a03
+ retn 00004h ; c2 04 00 ; 0xc1a04
+ ; disGetNextSymbol 0xc1a07 LB 0x28b2 -> off=0x0 cb=0000000000000081 uValue=00000000000c1a07 'vgamem_fill_cga'
+vgamem_fill_cga: ; 0xc1a07 LB 0x81
+ push bp ; 55 ; 0xc1a07 vgabios.c:1264
+ mov bp, sp ; 89 e5 ; 0xc1a08
+ push si ; 56 ; 0xc1a0a
+ push di ; 57 ; 0xc1a0b
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc1a0c
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc1a0f
+ mov byte [bp-008h], cl ; 88 4e f8 ; 0xc1a12
+ movzx bx, dl ; 0f b6 da ; 0xc1a15 vgabios.c:1270
+ movzx dx, byte [bp+004h] ; 0f b6 56 04 ; 0xc1a18
+ imul bx, dx ; 0f af da ; 0xc1a1c
+ movzx dx, cl ; 0f b6 d1 ; 0xc1a1f
+ imul dx, bx ; 0f af d3 ; 0xc1a22
+ sar dx, 1 ; d1 fa ; 0xc1a25
+ xor ah, ah ; 30 e4 ; 0xc1a27
+ add dx, ax ; 01 c2 ; 0xc1a29
+ mov word [bp-00ch], dx ; 89 56 f4 ; 0xc1a2b
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc1a2e vgabios.c:1271
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1a31
+ cwd ; 99 ; 0xc1a35
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2 ; 0xc1a36
+ sar ax, 1 ; d1 f8 ; 0xc1a38
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc1a3a
+ cmp dx, ax ; 39 c2 ; 0xc1a3e
+ jnl short 01a7fh ; 7d 3d ; 0xc1a40
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6 ; 0xc1a42 vgabios.c:1273
+ movzx bx, byte [bp+006h] ; 0f b6 5e 06 ; 0xc1a46
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1a4a
+ imul dx, ax ; 0f af d0 ; 0xc1a4e
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc1a51
+ mov di, word [bp-00ch] ; 8b 7e f4 ; 0xc1a54
+ add di, dx ; 01 d7 ; 0xc1a57
+ mov cx, si ; 89 f1 ; 0xc1a59
+ mov ax, bx ; 89 d8 ; 0xc1a5b
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1a5d
+ mov es, dx ; 8e c2 ; 0xc1a60
+ jcxz 01a66h ; e3 02 ; 0xc1a62
+ rep stosb ; f3 aa ; 0xc1a64
+ mov di, word [bp-00ch] ; 8b 7e f4 ; 0xc1a66 vgabios.c:1274
+ add di, 02000h ; 81 c7 00 20 ; 0xc1a69
+ add di, word [bp-00eh] ; 03 7e f2 ; 0xc1a6d
+ mov cx, si ; 89 f1 ; 0xc1a70
+ mov ax, bx ; 89 d8 ; 0xc1a72
+ mov es, dx ; 8e c2 ; 0xc1a74
+ jcxz 01a7ah ; e3 02 ; 0xc1a76
+ rep stosb ; f3 aa ; 0xc1a78
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1a7a vgabios.c:1275
+ jmp short 01a31h ; eb b2 ; 0xc1a7d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1a7f vgabios.c:1276
+ pop di ; 5f ; 0xc1a82
+ pop si ; 5e ; 0xc1a83
+ pop bp ; 5d ; 0xc1a84
+ retn 00004h ; c2 04 00 ; 0xc1a85
+ ; disGetNextSymbol 0xc1a88 LB 0x2831 -> off=0x0 cb=0000000000000079 uValue=00000000000c1a88 'vgamem_copy_linear'
+vgamem_copy_linear: ; 0xc1a88 LB 0x79
+ push bp ; 55 ; 0xc1a88 vgabios.c:1279
+ mov bp, sp ; 89 e5 ; 0xc1a89
+ push si ; 56 ; 0xc1a8b
+ push di ; 57 ; 0xc1a8c
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc1a8d
+ mov ah, al ; 88 c4 ; 0xc1a90
+ mov al, bl ; 88 d8 ; 0xc1a92
+ mov bx, cx ; 89 cb ; 0xc1a94
+ xor dh, dh ; 30 f6 ; 0xc1a96 vgabios.c:1285
+ movzx di, byte [bp+006h] ; 0f b6 7e 06 ; 0xc1a98
+ imul dx, di ; 0f af d7 ; 0xc1a9c
+ imul dx, word [bp+004h] ; 0f af 56 04 ; 0xc1a9f
+ movzx si, ah ; 0f b6 f4 ; 0xc1aa3
+ add dx, si ; 01 f2 ; 0xc1aa6
+ sal dx, 003h ; c1 e2 03 ; 0xc1aa8
+ mov word [bp-008h], dx ; 89 56 f8 ; 0xc1aab
+ xor ah, ah ; 30 e4 ; 0xc1aae vgabios.c:1286
+ imul ax, di ; 0f af c7 ; 0xc1ab0
+ imul ax, word [bp+004h] ; 0f af 46 04 ; 0xc1ab3
+ add si, ax ; 01 c6 ; 0xc1ab7
+ sal si, 003h ; c1 e6 03 ; 0xc1ab9
+ mov word [bp-00ah], si ; 89 76 f6 ; 0xc1abc
+ sal bx, 003h ; c1 e3 03 ; 0xc1abf vgabios.c:1287
+ sal word [bp+004h], 003h ; c1 66 04 03 ; 0xc1ac2 vgabios.c:1288
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc1ac6 vgabios.c:1289
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1aca
+ cmp al, byte [bp+006h] ; 3a 46 06 ; 0xc1acd
+ jnc short 01af8h ; 73 26 ; 0xc1ad0
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc1ad2 vgabios.c:1291
+ imul ax, word [bp+004h] ; 0f af 46 04 ; 0xc1ad6
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc1ada
+ add si, ax ; 01 c6 ; 0xc1add
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc1adf
+ add di, ax ; 01 c7 ; 0xc1ae2
+ mov cx, bx ; 89 d9 ; 0xc1ae4
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1ae6
+ mov es, dx ; 8e c2 ; 0xc1ae9
+ jcxz 01af3h ; e3 06 ; 0xc1aeb
+ push DS ; 1e ; 0xc1aed
+ mov ds, dx ; 8e da ; 0xc1aee
+ rep movsb ; f3 a4 ; 0xc1af0
+ pop DS ; 1f ; 0xc1af2
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1af3 vgabios.c:1292
+ jmp short 01acah ; eb d2 ; 0xc1af6
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1af8 vgabios.c:1293
+ pop di ; 5f ; 0xc1afb
+ pop si ; 5e ; 0xc1afc
+ pop bp ; 5d ; 0xc1afd
+ retn 00004h ; c2 04 00 ; 0xc1afe
+ ; disGetNextSymbol 0xc1b01 LB 0x27b8 -> off=0x0 cb=000000000000005c uValue=00000000000c1b01 'vgamem_fill_linear'
+vgamem_fill_linear: ; 0xc1b01 LB 0x5c
+ push bp ; 55 ; 0xc1b01 vgabios.c:1296
+ mov bp, sp ; 89 e5 ; 0xc1b02
+ push si ; 56 ; 0xc1b04
+ push di ; 57 ; 0xc1b05
+ push ax ; 50 ; 0xc1b06
+ push ax ; 50 ; 0xc1b07
+ mov si, bx ; 89 de ; 0xc1b08
+ mov bx, cx ; 89 cb ; 0xc1b0a
+ xor dh, dh ; 30 f6 ; 0xc1b0c vgabios.c:1302
+ movzx di, byte [bp+004h] ; 0f b6 7e 04 ; 0xc1b0e
+ imul dx, di ; 0f af d7 ; 0xc1b12
+ imul dx, cx ; 0f af d1 ; 0xc1b15
+ xor ah, ah ; 30 e4 ; 0xc1b18
+ add ax, dx ; 01 d0 ; 0xc1b1a
+ sal ax, 003h ; c1 e0 03 ; 0xc1b1c
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc1b1f
+ sal si, 003h ; c1 e6 03 ; 0xc1b22 vgabios.c:1303
+ sal bx, 003h ; c1 e3 03 ; 0xc1b25 vgabios.c:1304
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc1b28 vgabios.c:1305
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1b2c
+ cmp al, byte [bp+004h] ; 3a 46 04 ; 0xc1b2f
+ jnc short 01b54h ; 73 20 ; 0xc1b32
+ movzx ax, byte [bp+006h] ; 0f b6 46 06 ; 0xc1b34 vgabios.c:1307
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc1b38
+ imul dx, bx ; 0f af d3 ; 0xc1b3c
+ mov di, word [bp-008h] ; 8b 7e f8 ; 0xc1b3f
+ add di, dx ; 01 d7 ; 0xc1b42
+ mov cx, si ; 89 f1 ; 0xc1b44
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1b46
+ mov es, dx ; 8e c2 ; 0xc1b49
+ jcxz 01b4fh ; e3 02 ; 0xc1b4b
+ rep stosb ; f3 aa ; 0xc1b4d
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1b4f vgabios.c:1308
+ jmp short 01b2ch ; eb d8 ; 0xc1b52
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1b54 vgabios.c:1309
+ pop di ; 5f ; 0xc1b57
+ pop si ; 5e ; 0xc1b58
+ pop bp ; 5d ; 0xc1b59
+ retn 00004h ; c2 04 00 ; 0xc1b5a
+ ; disGetNextSymbol 0xc1b5d LB 0x275c -> off=0x0 cb=0000000000000628 uValue=00000000000c1b5d 'biosfn_scroll'
+biosfn_scroll: ; 0xc1b5d LB 0x628
+ push bp ; 55 ; 0xc1b5d vgabios.c:1312
+ mov bp, sp ; 89 e5 ; 0xc1b5e
+ push si ; 56 ; 0xc1b60
+ push di ; 57 ; 0xc1b61
+ sub sp, strict byte 00018h ; 83 ec 18 ; 0xc1b62
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc1b65
+ mov byte [bp-012h], dl ; 88 56 ee ; 0xc1b68
+ mov byte [bp-00ch], bl ; 88 5e f4 ; 0xc1b6b
+ mov byte [bp-010h], cl ; 88 4e f0 ; 0xc1b6e
+ mov dh, byte [bp+006h] ; 8a 76 06 ; 0xc1b71
+ cmp bl, byte [bp+004h] ; 3a 5e 04 ; 0xc1b74 vgabios.c:1321
+ jnbe near 0217ch ; 0f 87 01 06 ; 0xc1b77
+ cmp dh, cl ; 38 ce ; 0xc1b7b vgabios.c:1322
+ jc near 0217ch ; 0f 82 fb 05 ; 0xc1b7d
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc1b81 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1b84
+ mov es, ax ; 8e c0 ; 0xc1b87
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1b89
+ xor ah, ah ; 30 e4 ; 0xc1b8c vgabios.c:1326
+ call 035edh ; e8 5c 1a ; 0xc1b8e
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc1b91
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1b94 vgabios.c:1327
+ je near 0217ch ; 0f 84 e2 05 ; 0xc1b96
+ mov bx, 00084h ; bb 84 00 ; 0xc1b9a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1b9d
+ mov es, ax ; 8e c0 ; 0xc1ba0
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1ba2
+ movzx cx, al ; 0f b6 c8 ; 0xc1ba5 vgabios.c:48
+ inc cx ; 41 ; 0xc1ba8
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1ba9 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc1bac
+ mov word [bp-014h], ax ; 89 46 ec ; 0xc1baf vgabios.c:58
+ cmp byte [bp+008h], 0ffh ; 80 7e 08 ff ; 0xc1bb2 vgabios.c:1334
+ jne short 01bc1h ; 75 09 ; 0xc1bb6
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc1bb8 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1bbb
+ mov byte [bp+008h], al ; 88 46 08 ; 0xc1bbe vgabios.c:48
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1bc1 vgabios.c:1337
+ cmp ax, cx ; 39 c8 ; 0xc1bc5
+ jc short 01bd0h ; 72 07 ; 0xc1bc7
+ mov al, cl ; 88 c8 ; 0xc1bc9
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc1bcb
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc1bcd
+ movzx ax, dh ; 0f b6 c6 ; 0xc1bd0 vgabios.c:1338
+ cmp ax, word [bp-014h] ; 3b 46 ec ; 0xc1bd3
+ jc short 01bddh ; 72 05 ; 0xc1bd6
+ mov dh, byte [bp-014h] ; 8a 76 ec ; 0xc1bd8
+ db 0feh, 0ceh
+ ; dec dh ; fe ce ; 0xc1bdb
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1bdd vgabios.c:1339
+ cmp ax, cx ; 39 c8 ; 0xc1be1
+ jbe short 01be9h ; 76 04 ; 0xc1be3
+ mov byte [bp-008h], 000h ; c6 46 f8 00 ; 0xc1be5
+ mov al, dh ; 88 f0 ; 0xc1be9 vgabios.c:1340
+ sub al, byte [bp-010h] ; 2a 46 f0 ; 0xc1beb
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc1bee
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc1bf0
+ movzx di, byte [bp-006h] ; 0f b6 7e fa ; 0xc1bf3 vgabios.c:1342
+ mov bx, di ; 89 fb ; 0xc1bf7
+ sal bx, 003h ; c1 e3 03 ; 0xc1bf9
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc1bfc
+ dec ax ; 48 ; 0xc1bff
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc1c00
+ mov ax, cx ; 89 c8 ; 0xc1c03
+ dec ax ; 48 ; 0xc1c05
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc1c06
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc1c09
+ imul ax, cx ; 0f af c1 ; 0xc1c0c
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc1c0f
+ jne near 01db3h ; 0f 85 9b 01 ; 0xc1c14
+ mov cx, ax ; 89 c1 ; 0xc1c18 vgabios.c:1345
+ add cx, ax ; 01 c1 ; 0xc1c1a
+ or cl, 0ffh ; 80 c9 ff ; 0xc1c1c
+ movzx si, byte [bp+008h] ; 0f b6 76 08 ; 0xc1c1f
+ inc cx ; 41 ; 0xc1c23
+ imul cx, si ; 0f af ce ; 0xc1c24
+ mov word [bp-01ch], cx ; 89 4e e4 ; 0xc1c27
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1c2a vgabios.c:1350
+ jne short 01c6bh ; 75 3b ; 0xc1c2e
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1c30
+ jne short 01c6bh ; 75 35 ; 0xc1c34
+ cmp byte [bp-010h], 000h ; 80 7e f0 00 ; 0xc1c36
+ jne short 01c6bh ; 75 2f ; 0xc1c3a
+ movzx cx, byte [bp+004h] ; 0f b6 4e 04 ; 0xc1c3c
+ cmp cx, word [bp-016h] ; 3b 4e ea ; 0xc1c40
+ jne short 01c6bh ; 75 26 ; 0xc1c43
+ movzx dx, dh ; 0f b6 d6 ; 0xc1c45
+ cmp dx, word [bp-018h] ; 3b 56 e8 ; 0xc1c48
+ jne short 01c6bh ; 75 1e ; 0xc1c4b
+ movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc1c4d vgabios.c:1352
+ sal dx, 008h ; c1 e2 08 ; 0xc1c51
+ add dx, strict byte 00020h ; 83 c2 20 ; 0xc1c54
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1c57
+ mov cx, ax ; 89 c1 ; 0xc1c5b
+ mov ax, dx ; 89 d0 ; 0xc1c5d
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1c5f
+ mov es, bx ; 8e c3 ; 0xc1c62
+ jcxz 01c68h ; e3 02 ; 0xc1c64
+ rep stosw ; f3 ab ; 0xc1c66
+ jmp near 0217ch ; e9 11 05 ; 0xc1c68 vgabios.c:1354
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1c6b vgabios.c:1356
+ jne near 01d08h ; 0f 85 95 00 ; 0xc1c6f
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1c73 vgabios.c:1357
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc1c77
+ movzx dx, byte [bp+004h] ; 0f b6 56 04 ; 0xc1c7a
+ cmp dx, word [bp-01ah] ; 3b 56 e6 ; 0xc1c7e
+ jc near 0217ch ; 0f 82 f7 04 ; 0xc1c81
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1c85 vgabios.c:1359
+ add ax, word [bp-01ah] ; 03 46 e6 ; 0xc1c89
+ cmp ax, dx ; 39 d0 ; 0xc1c8c
+ jnbe short 01c96h ; 77 06 ; 0xc1c8e
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1c90
+ jne short 01cc9h ; 75 33 ; 0xc1c94
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1c96 vgabios.c:1360
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1c9a
+ sal ax, 008h ; c1 e0 08 ; 0xc1c9e
+ add ax, strict word 00020h ; 05 20 00 ; 0xc1ca1
+ mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1ca4
+ imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1ca7
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0 ; 0xc1cab
+ add dx, bx ; 01 da ; 0xc1caf
+ add dx, dx ; 01 d2 ; 0xc1cb1
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1cb3
+ add di, dx ; 01 d7 ; 0xc1cb6
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cb8
+ sal bx, 003h ; c1 e3 03 ; 0xc1cbc
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1cbf
+ jcxz 01cc7h ; e3 02 ; 0xc1cc3
+ rep stosw ; f3 ab ; 0xc1cc5
+ jmp short 01d02h ; eb 39 ; 0xc1cc7 vgabios.c:1361
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1cc9 vgabios.c:1362
+ mov si, ax ; 89 c6 ; 0xc1ccd
+ imul si, word [bp-014h] ; 0f af 76 ec ; 0xc1ccf
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0 ; 0xc1cd3
+ add si, dx ; 01 d6 ; 0xc1cd7
+ add si, si ; 01 f6 ; 0xc1cd9
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1cdb
+ sal bx, 003h ; c1 e3 03 ; 0xc1cdf
+ mov ax, word [bx+047b2h] ; 8b 87 b2 47 ; 0xc1ce2
+ mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1ce6
+ imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1ce9
+ mov di, dx ; 89 d7 ; 0xc1ced
+ add di, bx ; 01 df ; 0xc1cef
+ add di, di ; 01 ff ; 0xc1cf1
+ add di, word [bp-01ch] ; 03 7e e4 ; 0xc1cf3
+ mov dx, ax ; 89 c2 ; 0xc1cf6
+ mov es, ax ; 8e c0 ; 0xc1cf8
+ jcxz 01d02h ; e3 06 ; 0xc1cfa
+ push DS ; 1e ; 0xc1cfc
+ mov ds, dx ; 8e da ; 0xc1cfd
+ rep movsw ; f3 a5 ; 0xc1cff
+ pop DS ; 1f ; 0xc1d01
+ inc word [bp-01ah] ; ff 46 e6 ; 0xc1d02 vgabios.c:1363
+ jmp near 01c7ah ; e9 72 ff ; 0xc1d05
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1d08 vgabios.c:1366
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc1d0c
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1d0f
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1d13
+ jnbe near 0217ch ; 0f 87 62 04 ; 0xc1d16
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1d1a vgabios.c:1368
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc1d1e
+ add ax, dx ; 01 d0 ; 0xc1d22
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1d24
+ jnbe short 01d2fh ; 77 06 ; 0xc1d27
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1d29
+ jne short 01d62h ; 75 33 ; 0xc1d2d
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1d2f vgabios.c:1369
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1d33
+ sal ax, 008h ; c1 e0 08 ; 0xc1d37
+ add ax, strict word 00020h ; 05 20 00 ; 0xc1d3a
+ mov dx, word [bp-01ah] ; 8b 56 e6 ; 0xc1d3d
+ imul dx, word [bp-014h] ; 0f af 56 ec ; 0xc1d40
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc1d44
+ add dx, bx ; 01 da ; 0xc1d48
+ add dx, dx ; 01 d2 ; 0xc1d4a
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1d4c
+ add di, dx ; 01 d7 ; 0xc1d4f
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d51
+ sal bx, 003h ; c1 e3 03 ; 0xc1d55
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1d58
+ jcxz 01d60h ; e3 02 ; 0xc1d5c
+ rep stosw ; f3 ab ; 0xc1d5e
+ jmp short 01da2h ; eb 40 ; 0xc1d60 vgabios.c:1370
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1d62 vgabios.c:1371
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1d66
+ mov si, word [bp-01ah] ; 8b 76 e6 ; 0xc1d6a
+ sub si, ax ; 29 c6 ; 0xc1d6d
+ imul si, word [bp-014h] ; 0f af 76 ec ; 0xc1d6f
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0 ; 0xc1d73
+ add si, dx ; 01 d6 ; 0xc1d77
+ add si, si ; 01 f6 ; 0xc1d79
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1d7b
+ sal bx, 003h ; c1 e3 03 ; 0xc1d7f
+ mov ax, word [bx+047b2h] ; 8b 87 b2 47 ; 0xc1d82
+ mov bx, word [bp-01ah] ; 8b 5e e6 ; 0xc1d86
+ imul bx, word [bp-014h] ; 0f af 5e ec ; 0xc1d89
+ add dx, bx ; 01 da ; 0xc1d8d
+ add dx, dx ; 01 d2 ; 0xc1d8f
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1d91
+ add di, dx ; 01 d7 ; 0xc1d94
+ mov dx, ax ; 89 c2 ; 0xc1d96
+ mov es, ax ; 8e c0 ; 0xc1d98
+ jcxz 01da2h ; e3 06 ; 0xc1d9a
+ push DS ; 1e ; 0xc1d9c
+ mov ds, dx ; 8e da ; 0xc1d9d
+ rep movsw ; f3 a5 ; 0xc1d9f
+ pop DS ; 1f ; 0xc1da1
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1da2 vgabios.c:1372
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1da6
+ jc near 0217ch ; 0f 82 cf 03 ; 0xc1da9
+ dec word [bp-01ah] ; ff 4e e6 ; 0xc1dad vgabios.c:1373
+ jmp near 01d0fh ; e9 5c ff ; 0xc1db0
+ movzx di, byte [di+0482eh] ; 0f b6 bd 2e 48 ; 0xc1db3 vgabios.c:1379
+ sal di, 006h ; c1 e7 06 ; 0xc1db8
+ mov dl, byte [di+04844h] ; 8a 95 44 48 ; 0xc1dbb
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc1dbf
+ mov dl, byte [bx+047b0h] ; 8a 97 b0 47 ; 0xc1dc2 vgabios.c:1380
+ cmp dl, 003h ; 80 fa 03 ; 0xc1dc6
+ jc short 01ddch ; 72 11 ; 0xc1dc9
+ jbe short 01de6h ; 76 19 ; 0xc1dcb
+ cmp dl, 005h ; 80 fa 05 ; 0xc1dcd
+ je near 0205fh ; 0f 84 8b 02 ; 0xc1dd0
+ cmp dl, 004h ; 80 fa 04 ; 0xc1dd4
+ je short 01de6h ; 74 0d ; 0xc1dd7
+ jmp near 0217ch ; e9 a0 03 ; 0xc1dd9
+ cmp dl, 002h ; 80 fa 02 ; 0xc1ddc
+ je near 01f25h ; 0f 84 42 01 ; 0xc1ddf
+ jmp near 0217ch ; e9 96 03 ; 0xc1de3
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1de6 vgabios.c:1384
+ jne short 01e3eh ; 75 52 ; 0xc1dea
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1dec
+ jne short 01e3eh ; 75 4c ; 0xc1df0
+ cmp byte [bp-010h], 000h ; 80 7e f0 00 ; 0xc1df2
+ jne short 01e3eh ; 75 46 ; 0xc1df6
+ movzx bx, byte [bp+004h] ; 0f b6 5e 04 ; 0xc1df8
+ mov ax, cx ; 89 c8 ; 0xc1dfc
+ dec ax ; 48 ; 0xc1dfe
+ cmp bx, ax ; 39 c3 ; 0xc1dff
+ jne short 01e3eh ; 75 3b ; 0xc1e01
+ movzx ax, dh ; 0f b6 c6 ; 0xc1e03
+ mov dx, word [bp-014h] ; 8b 56 ec ; 0xc1e06
+ dec dx ; 4a ; 0xc1e09
+ cmp ax, dx ; 39 d0 ; 0xc1e0a
+ jne short 01e3eh ; 75 30 ; 0xc1e0c
+ mov ax, 00205h ; b8 05 02 ; 0xc1e0e vgabios.c:1386
+ mov dx, 003ceh ; ba ce 03 ; 0xc1e11
+ out DX, ax ; ef ; 0xc1e14
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc1e15 vgabios.c:1387
+ imul ax, cx ; 0f af c1 ; 0xc1e18
+ movzx cx, byte [bp-00eh] ; 0f b6 4e f2 ; 0xc1e1b
+ imul cx, ax ; 0f af c8 ; 0xc1e1f
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1e22
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc1e26
+ sal bx, 003h ; c1 e3 03 ; 0xc1e2a
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1e2d
+ xor di, di ; 31 ff ; 0xc1e31
+ jcxz 01e37h ; e3 02 ; 0xc1e33
+ rep stosb ; f3 aa ; 0xc1e35
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1e37 vgabios.c:1388
+ out DX, ax ; ef ; 0xc1e3a
+ jmp near 0217ch ; e9 3e 03 ; 0xc1e3b vgabios.c:1390
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1e3e vgabios.c:1392
+ jne short 01eadh ; 75 69 ; 0xc1e42
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1e44 vgabios.c:1393
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc1e48
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1e4b
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1e4f
+ jc near 0217ch ; 0f 82 26 03 ; 0xc1e52
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc1e56 vgabios.c:1395
+ add dx, word [bp-01ah] ; 03 56 e6 ; 0xc1e5a
+ cmp dx, ax ; 39 c2 ; 0xc1e5d
+ jnbe short 01e67h ; 77 06 ; 0xc1e5f
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1e61
+ jne short 01e86h ; 75 1f ; 0xc1e65
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1e67 vgabios.c:1396
+ push ax ; 50 ; 0xc1e6b
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1e6c
+ push ax ; 50 ; 0xc1e70
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc1e71
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc1e75
+ movzx dx, byte [bp-01ah] ; 0f b6 56 e6 ; 0xc1e79
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc1e7d
+ call 01904h ; e8 80 fa ; 0xc1e81
+ jmp short 01ea8h ; eb 22 ; 0xc1e84 vgabios.c:1397
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1e86 vgabios.c:1398
+ push ax ; 50 ; 0xc1e8a
+ movzx ax, byte [bp-014h] ; 0f b6 46 ec ; 0xc1e8b
+ push ax ; 50 ; 0xc1e8f
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1e90
+ movzx bx, byte [bp-01ah] ; 0f b6 5e e6 ; 0xc1e94
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc1e98
+ add al, byte [bp-008h] ; 02 46 f8 ; 0xc1e9b
+ movzx dx, al ; 0f b6 d0 ; 0xc1e9e
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc1ea1
+ call 0188fh ; e8 e7 f9 ; 0xc1ea5
+ inc word [bp-01ah] ; ff 46 e6 ; 0xc1ea8 vgabios.c:1399
+ jmp short 01e4bh ; eb 9e ; 0xc1eab
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1ead vgabios.c:1402
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc1eb1
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1eb4
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1eb8
+ jnbe near 0217ch ; 0f 87 bd 02 ; 0xc1ebb
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4 ; 0xc1ebf vgabios.c:1404
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1ec3
+ add ax, dx ; 01 d0 ; 0xc1ec7
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1ec9
+ jnbe short 01ed4h ; 77 06 ; 0xc1ecc
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1ece
+ jne short 01ef3h ; 75 1f ; 0xc1ed2
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1ed4 vgabios.c:1405
+ push ax ; 50 ; 0xc1ed8
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1ed9
+ push ax ; 50 ; 0xc1edd
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc1ede
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc1ee2
+ movzx dx, byte [bp-01ah] ; 0f b6 56 e6 ; 0xc1ee6
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc1eea
+ call 01904h ; e8 13 fa ; 0xc1eee
+ jmp short 01f15h ; eb 22 ; 0xc1ef1 vgabios.c:1406
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1ef3 vgabios.c:1407
+ push ax ; 50 ; 0xc1ef7
+ movzx ax, byte [bp-014h] ; 0f b6 46 ec ; 0xc1ef8
+ push ax ; 50 ; 0xc1efc
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1efd
+ movzx bx, byte [bp-01ah] ; 0f b6 5e e6 ; 0xc1f01
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc1f05
+ sub al, byte [bp-008h] ; 2a 46 f8 ; 0xc1f08
+ movzx dx, al ; 0f b6 d0 ; 0xc1f0b
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc1f0e
+ call 0188fh ; e8 7a f9 ; 0xc1f12
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1f15 vgabios.c:1408
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1f19
+ jc near 0217ch ; 0f 82 5c 02 ; 0xc1f1c
+ dec word [bp-01ah] ; ff 4e e6 ; 0xc1f20 vgabios.c:1409
+ jmp short 01eb4h ; eb 8f ; 0xc1f23
+ mov dl, byte [bx+047b1h] ; 8a 97 b1 47 ; 0xc1f25 vgabios.c:1414
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1f29 vgabios.c:1415
+ jne short 01f6ah ; 75 3b ; 0xc1f2d
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1f2f
+ jne short 01f6ah ; 75 35 ; 0xc1f33
+ cmp byte [bp-010h], 000h ; 80 7e f0 00 ; 0xc1f35
+ jne short 01f6ah ; 75 2f ; 0xc1f39
+ movzx cx, byte [bp+004h] ; 0f b6 4e 04 ; 0xc1f3b
+ cmp cx, word [bp-016h] ; 3b 4e ea ; 0xc1f3f
+ jne short 01f6ah ; 75 26 ; 0xc1f42
+ movzx cx, dh ; 0f b6 ce ; 0xc1f44
+ cmp cx, word [bp-018h] ; 3b 4e e8 ; 0xc1f47
+ jne short 01f6ah ; 75 1e ; 0xc1f4a
+ movzx cx, byte [bp-00eh] ; 0f b6 4e f2 ; 0xc1f4c vgabios.c:1417
+ imul ax, cx ; 0f af c1 ; 0xc1f50
+ movzx cx, dl ; 0f b6 ca ; 0xc1f53
+ imul cx, ax ; 0f af c8 ; 0xc1f56
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1f59
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1f5d
+ xor di, di ; 31 ff ; 0xc1f61
+ jcxz 01f67h ; e3 02 ; 0xc1f63
+ rep stosb ; f3 aa ; 0xc1f65
+ jmp near 0217ch ; e9 12 02 ; 0xc1f67 vgabios.c:1419
+ cmp dl, 002h ; 80 fa 02 ; 0xc1f6a vgabios.c:1421
+ jne short 01f78h ; 75 09 ; 0xc1f6d
+ sal byte [bp-010h], 1 ; d0 66 f0 ; 0xc1f6f vgabios.c:1423
+ sal byte [bp-00ah], 1 ; d0 66 f6 ; 0xc1f72 vgabios.c:1424
+ sal word [bp-014h], 1 ; d1 66 ec ; 0xc1f75 vgabios.c:1425
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1f78 vgabios.c:1428
+ jne short 01fe7h ; 75 69 ; 0xc1f7c
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1f7e vgabios.c:1429
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc1f82
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1f85
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1f89
+ jc near 0217ch ; 0f 82 ec 01 ; 0xc1f8c
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc1f90 vgabios.c:1431
+ add dx, word [bp-01ah] ; 03 56 e6 ; 0xc1f94
+ cmp dx, ax ; 39 c2 ; 0xc1f97
+ jnbe short 01fa1h ; 77 06 ; 0xc1f99
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1f9b
+ jne short 01fc0h ; 75 1f ; 0xc1f9f
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc1fa1 vgabios.c:1432
+ push ax ; 50 ; 0xc1fa5
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1fa6
+ push ax ; 50 ; 0xc1faa
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc1fab
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc1faf
+ movzx dx, byte [bp-01ah] ; 0f b6 56 e6 ; 0xc1fb3
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc1fb7
+ call 01a07h ; e8 49 fa ; 0xc1fbb
+ jmp short 01fe2h ; eb 22 ; 0xc1fbe vgabios.c:1433
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc1fc0 vgabios.c:1434
+ push ax ; 50 ; 0xc1fc4
+ movzx ax, byte [bp-014h] ; 0f b6 46 ec ; 0xc1fc5
+ push ax ; 50 ; 0xc1fc9
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc1fca
+ movzx bx, byte [bp-01ah] ; 0f b6 5e e6 ; 0xc1fce
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc1fd2
+ add al, byte [bp-008h] ; 02 46 f8 ; 0xc1fd5
+ movzx dx, al ; 0f b6 d0 ; 0xc1fd8
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc1fdb
+ call 01964h ; e8 82 f9 ; 0xc1fdf
+ inc word [bp-01ah] ; ff 46 e6 ; 0xc1fe2 vgabios.c:1435
+ jmp short 01f85h ; eb 9e ; 0xc1fe5
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc1fe7 vgabios.c:1438
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc1feb
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc1fee
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc1ff2
+ jnbe near 0217ch ; 0f 87 83 01 ; 0xc1ff5
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4 ; 0xc1ff9 vgabios.c:1440
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc1ffd
+ add ax, dx ; 01 d0 ; 0xc2001
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc2003
+ jnbe short 0200eh ; 77 06 ; 0xc2006
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc2008
+ jne short 0202dh ; 75 1f ; 0xc200c
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc200e vgabios.c:1441
+ push ax ; 50 ; 0xc2012
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc2013
+ push ax ; 50 ; 0xc2017
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc2018
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc201c
+ movzx dx, byte [bp-01ah] ; 0f b6 56 e6 ; 0xc2020
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2024
+ call 01a07h ; e8 dc f9 ; 0xc2028
+ jmp short 0204fh ; eb 22 ; 0xc202b vgabios.c:1442
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc202d vgabios.c:1443
+ push ax ; 50 ; 0xc2031
+ movzx ax, byte [bp-014h] ; 0f b6 46 ec ; 0xc2032
+ push ax ; 50 ; 0xc2036
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc2037
+ movzx bx, byte [bp-01ah] ; 0f b6 5e e6 ; 0xc203b
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc203f
+ sub al, byte [bp-008h] ; 2a 46 f8 ; 0xc2042
+ movzx dx, al ; 0f b6 d0 ; 0xc2045
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2048
+ call 01964h ; e8 15 f9 ; 0xc204c
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc204f vgabios.c:1444
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc2053
+ jc near 0217ch ; 0f 82 22 01 ; 0xc2056
+ dec word [bp-01ah] ; ff 4e e6 ; 0xc205a vgabios.c:1445
+ jmp short 01feeh ; eb 8f ; 0xc205d
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc205f vgabios.c:1450
+ jne short 0209fh ; 75 3a ; 0xc2063
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc2065
+ jne short 0209fh ; 75 34 ; 0xc2069
+ cmp byte [bp-010h], 000h ; 80 7e f0 00 ; 0xc206b
+ jne short 0209fh ; 75 2e ; 0xc206f
+ movzx cx, byte [bp+004h] ; 0f b6 4e 04 ; 0xc2071
+ cmp cx, word [bp-016h] ; 3b 4e ea ; 0xc2075
+ jne short 0209fh ; 75 25 ; 0xc2078
+ movzx dx, dh ; 0f b6 d6 ; 0xc207a
+ cmp dx, word [bp-018h] ; 3b 56 e8 ; 0xc207d
+ jne short 0209fh ; 75 1d ; 0xc2080
+ movzx dx, byte [bp-00eh] ; 0f b6 56 f2 ; 0xc2082 vgabios.c:1452
+ mov cx, ax ; 89 c1 ; 0xc2086
+ imul cx, dx ; 0f af ca ; 0xc2088
+ sal cx, 003h ; c1 e1 03 ; 0xc208b
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc208e
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2092
+ xor di, di ; 31 ff ; 0xc2096
+ jcxz 0209ch ; e3 02 ; 0xc2098
+ rep stosb ; f3 aa ; 0xc209a
+ jmp near 0217ch ; e9 dd 00 ; 0xc209c vgabios.c:1454
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc209f vgabios.c:1457
+ jne short 0210bh ; 75 66 ; 0xc20a3
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc20a5 vgabios.c:1458
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc20a9
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc20ac
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc20b0
+ jc near 0217ch ; 0f 82 c5 00 ; 0xc20b3
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc20b7 vgabios.c:1460
+ add dx, word [bp-01ah] ; 03 56 e6 ; 0xc20bb
+ cmp dx, ax ; 39 c2 ; 0xc20be
+ jnbe short 020c8h ; 77 06 ; 0xc20c0
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc20c2
+ jne short 020e6h ; 75 1e ; 0xc20c6
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc20c8 vgabios.c:1461
+ push ax ; 50 ; 0xc20cc
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc20cd
+ push ax ; 50 ; 0xc20d1
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc20d2
+ movzx dx, byte [bp-01ah] ; 0f b6 56 e6 ; 0xc20d6
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc20da
+ mov cx, word [bp-014h] ; 8b 4e ec ; 0xc20de
+ call 01b01h ; e8 1d fa ; 0xc20e1
+ jmp short 02106h ; eb 20 ; 0xc20e4 vgabios.c:1462
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc20e6 vgabios.c:1463
+ push ax ; 50 ; 0xc20ea
+ push word [bp-014h] ; ff 76 ec ; 0xc20eb
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc20ee
+ movzx bx, byte [bp-01ah] ; 0f b6 5e e6 ; 0xc20f2
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc20f6
+ add al, byte [bp-008h] ; 02 46 f8 ; 0xc20f9
+ movzx dx, al ; 0f b6 d0 ; 0xc20fc
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc20ff
+ call 01a88h ; e8 82 f9 ; 0xc2103
+ inc word [bp-01ah] ; ff 46 e6 ; 0xc2106 vgabios.c:1464
+ jmp short 020ach ; eb a1 ; 0xc2109
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc210b vgabios.c:1467
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc210f
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc2112
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc2116
+ jnbe short 0217ch ; 77 61 ; 0xc2119
+ movzx dx, byte [bp-00ch] ; 0f b6 56 f4 ; 0xc211b vgabios.c:1469
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc211f
+ add ax, dx ; 01 d0 ; 0xc2123
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc2125
+ jnbe short 02130h ; 77 06 ; 0xc2128
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc212a
+ jne short 0214eh ; 75 1e ; 0xc212e
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc2130 vgabios.c:1470
+ push ax ; 50 ; 0xc2134
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc2135
+ push ax ; 50 ; 0xc2139
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc213a
+ movzx dx, byte [bp-01ah] ; 0f b6 56 e6 ; 0xc213e
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2142
+ mov cx, word [bp-014h] ; 8b 4e ec ; 0xc2146
+ call 01b01h ; e8 b5 f9 ; 0xc2149
+ jmp short 0216eh ; eb 20 ; 0xc214c vgabios.c:1471
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc214e vgabios.c:1472
+ push ax ; 50 ; 0xc2152
+ push word [bp-014h] ; ff 76 ec ; 0xc2153
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc2156
+ movzx bx, byte [bp-01ah] ; 0f b6 5e e6 ; 0xc215a
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc215e
+ sub al, byte [bp-008h] ; 2a 46 f8 ; 0xc2161
+ movzx dx, al ; 0f b6 d0 ; 0xc2164
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2167
+ call 01a88h ; e8 1a f9 ; 0xc216b
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc216e vgabios.c:1473
+ cmp ax, word [bp-01ah] ; 3b 46 e6 ; 0xc2172
+ jc short 0217ch ; 72 05 ; 0xc2175
+ dec word [bp-01ah] ; ff 4e e6 ; 0xc2177 vgabios.c:1474
+ jmp short 02112h ; eb 96 ; 0xc217a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc217c vgabios.c:1485
+ pop di ; 5f ; 0xc217f
+ pop si ; 5e ; 0xc2180
+ pop bp ; 5d ; 0xc2181
+ retn 00008h ; c2 08 00 ; 0xc2182
+ ; disGetNextSymbol 0xc2185 LB 0x2134 -> off=0x0 cb=00000000000000ff uValue=00000000000c2185 'write_gfx_char_pl4'
+write_gfx_char_pl4: ; 0xc2185 LB 0xff
+ push bp ; 55 ; 0xc2185 vgabios.c:1488
+ mov bp, sp ; 89 e5 ; 0xc2186
+ push si ; 56 ; 0xc2188
+ push di ; 57 ; 0xc2189
+ sub sp, strict byte 0000ch ; 83 ec 0c ; 0xc218a
+ mov ah, al ; 88 c4 ; 0xc218d
+ mov byte [bp-008h], dl ; 88 56 f8 ; 0xc218f
+ mov al, bl ; 88 d8 ; 0xc2192
+ mov bx, 0010ch ; bb 0c 01 ; 0xc2194 vgabios.c:67
+ xor si, si ; 31 f6 ; 0xc2197
+ mov es, si ; 8e c6 ; 0xc2199
+ mov si, word [es:bx] ; 26 8b 37 ; 0xc219b
+ mov bx, word [es:bx+002h] ; 26 8b 5f 02 ; 0xc219e
+ mov word [bp-00ch], si ; 89 76 f4 ; 0xc21a2 vgabios.c:68
+ mov word [bp-00ah], bx ; 89 5e f6 ; 0xc21a5
+ movzx bx, cl ; 0f b6 d9 ; 0xc21a8 vgabios.c:1497
+ movzx cx, byte [bp+006h] ; 0f b6 4e 06 ; 0xc21ab
+ imul bx, cx ; 0f af d9 ; 0xc21af
+ movzx si, byte [bp+004h] ; 0f b6 76 04 ; 0xc21b2
+ imul si, bx ; 0f af f3 ; 0xc21b6
+ movzx bx, al ; 0f b6 d8 ; 0xc21b9
+ add si, bx ; 01 de ; 0xc21bc
+ mov bx, strict word 0004ch ; bb 4c 00 ; 0xc21be vgabios.c:57
+ mov di, strict word 00040h ; bf 40 00 ; 0xc21c1
+ mov es, di ; 8e c7 ; 0xc21c4
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc21c6
+ movzx di, byte [bp+008h] ; 0f b6 7e 08 ; 0xc21c9 vgabios.c:58
+ imul bx, di ; 0f af df ; 0xc21cd
+ add si, bx ; 01 de ; 0xc21d0
+ movzx ax, ah ; 0f b6 c4 ; 0xc21d2 vgabios.c:1499
+ imul ax, cx ; 0f af c1 ; 0xc21d5
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc21d8
+ mov ax, 00f02h ; b8 02 0f ; 0xc21db vgabios.c:1500
+ mov dx, 003c4h ; ba c4 03 ; 0xc21de
+ out DX, ax ; ef ; 0xc21e1
+ mov ax, 00205h ; b8 05 02 ; 0xc21e2 vgabios.c:1501
+ mov dx, 003ceh ; ba ce 03 ; 0xc21e5
+ out DX, ax ; ef ; 0xc21e8
+ test byte [bp-008h], 080h ; f6 46 f8 80 ; 0xc21e9 vgabios.c:1502
+ je short 021f5h ; 74 06 ; 0xc21ed
+ mov ax, 01803h ; b8 03 18 ; 0xc21ef vgabios.c:1504
+ out DX, ax ; ef ; 0xc21f2
+ jmp short 021f9h ; eb 04 ; 0xc21f3 vgabios.c:1506
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc21f5 vgabios.c:1508
+ out DX, ax ; ef ; 0xc21f8
+ xor ch, ch ; 30 ed ; 0xc21f9 vgabios.c:1510
+ cmp ch, byte [bp+006h] ; 3a 6e 06 ; 0xc21fb
+ jnc short 0226ch ; 73 6c ; 0xc21fe
+ movzx bx, ch ; 0f b6 dd ; 0xc2200 vgabios.c:1512
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc2203
+ imul bx, ax ; 0f af d8 ; 0xc2207
+ add bx, si ; 01 f3 ; 0xc220a
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc220c vgabios.c:1513
+ jmp short 02224h ; eb 12 ; 0xc2210
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2212 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc2215
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc2217
+ inc byte [bp-006h] ; fe 46 fa ; 0xc221b vgabios.c:1526
+ cmp byte [bp-006h], 008h ; 80 7e fa 08 ; 0xc221e
+ jnc short 02268h ; 73 44 ; 0xc2222
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc2224
+ mov cl, al ; 88 c1 ; 0xc2228
+ mov ax, 00080h ; b8 80 00 ; 0xc222a
+ sar ax, CL ; d3 f8 ; 0xc222d
+ xor ah, ah ; 30 e4 ; 0xc222f
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc2231
+ sal ax, 008h ; c1 e0 08 ; 0xc2234
+ or AL, strict byte 008h ; 0c 08 ; 0xc2237
+ mov dx, 003ceh ; ba ce 03 ; 0xc2239
+ out DX, ax ; ef ; 0xc223c
+ mov dx, bx ; 89 da ; 0xc223d
+ mov ax, 0a000h ; b8 00 a0 ; 0xc223f
+ call 03614h ; e8 cf 13 ; 0xc2242
+ movzx ax, ch ; 0f b6 c5 ; 0xc2245
+ add ax, word [bp-00eh] ; 03 46 f2 ; 0xc2248
+ les di, [bp-00ch] ; c4 7e f4 ; 0xc224b
+ add di, ax ; 01 c7 ; 0xc224e
+ movzx ax, byte [es:di] ; 26 0f b6 05 ; 0xc2250
+ test word [bp-010h], ax ; 85 46 f0 ; 0xc2254
+ je short 02212h ; 74 b9 ; 0xc2257
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2259
+ and AL, strict byte 00fh ; 24 0f ; 0xc225c
+ mov di, 0a000h ; bf 00 a0 ; 0xc225e
+ mov es, di ; 8e c7 ; 0xc2261
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2263
+ jmp short 0221bh ; eb b3 ; 0xc2266
+ db 0feh, 0c5h
+ ; inc ch ; fe c5 ; 0xc2268 vgabios.c:1527
+ jmp short 021fbh ; eb 8f ; 0xc226a
+ mov ax, 0ff08h ; b8 08 ff ; 0xc226c vgabios.c:1528
+ mov dx, 003ceh ; ba ce 03 ; 0xc226f
+ out DX, ax ; ef ; 0xc2272
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc2273 vgabios.c:1529
+ out DX, ax ; ef ; 0xc2276
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc2277 vgabios.c:1530
+ out DX, ax ; ef ; 0xc227a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc227b vgabios.c:1531
+ pop di ; 5f ; 0xc227e
+ pop si ; 5e ; 0xc227f
+ pop bp ; 5d ; 0xc2280
+ retn 00006h ; c2 06 00 ; 0xc2281
+ ; disGetNextSymbol 0xc2284 LB 0x2035 -> off=0x0 cb=00000000000000dd uValue=00000000000c2284 'write_gfx_char_cga'
+write_gfx_char_cga: ; 0xc2284 LB 0xdd
+ push si ; 56 ; 0xc2284 vgabios.c:1534
+ push di ; 57 ; 0xc2285
+ enter 00006h, 000h ; c8 06 00 00 ; 0xc2286
+ mov di, 0556ch ; bf 6c 55 ; 0xc228a vgabios.c:1541
+ xor bh, bh ; 30 ff ; 0xc228d vgabios.c:1542
+ movzx si, byte [bp+00ah] ; 0f b6 76 0a ; 0xc228f
+ imul si, bx ; 0f af f3 ; 0xc2293
+ movzx bx, cl ; 0f b6 d9 ; 0xc2296
+ imul bx, bx, 00140h ; 69 db 40 01 ; 0xc2299
+ add si, bx ; 01 de ; 0xc229d
+ mov word [bp-004h], si ; 89 76 fc ; 0xc229f
+ xor ah, ah ; 30 e4 ; 0xc22a2 vgabios.c:1543
+ sal ax, 003h ; c1 e0 03 ; 0xc22a4
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc22a7
+ xor ah, ah ; 30 e4 ; 0xc22aa vgabios.c:1544
+ jmp near 022cah ; e9 1b 00 ; 0xc22ac
+ movzx si, ah ; 0f b6 f4 ; 0xc22af vgabios.c:1559
+ add si, word [bp-006h] ; 03 76 fa ; 0xc22b2
+ add si, di ; 01 fe ; 0xc22b5
+ mov al, byte [si] ; 8a 04 ; 0xc22b7
+ mov si, 0b800h ; be 00 b8 ; 0xc22b9 vgabios.c:52
+ mov es, si ; 8e c6 ; 0xc22bc
+ mov byte [es:bx], al ; 26 88 07 ; 0xc22be
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc22c1 vgabios.c:1563
+ cmp ah, 008h ; 80 fc 08 ; 0xc22c3
+ jnc near 0235bh ; 0f 83 91 00 ; 0xc22c6
+ movzx bx, ah ; 0f b6 dc ; 0xc22ca
+ sar bx, 1 ; d1 fb ; 0xc22cd
+ imul bx, bx, strict byte 00050h ; 6b db 50 ; 0xc22cf
+ add bx, word [bp-004h] ; 03 5e fc ; 0xc22d2
+ test ah, 001h ; f6 c4 01 ; 0xc22d5
+ je short 022ddh ; 74 03 ; 0xc22d8
+ add bh, 020h ; 80 c7 20 ; 0xc22da
+ mov DH, strict byte 080h ; b6 80 ; 0xc22dd
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc22df
+ jne short 022fdh ; 75 18 ; 0xc22e3
+ test dl, dh ; 84 f2 ; 0xc22e5
+ je short 022afh ; 74 c6 ; 0xc22e7
+ mov si, 0b800h ; be 00 b8 ; 0xc22e9
+ mov es, si ; 8e c6 ; 0xc22ec
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc22ee
+ movzx si, ah ; 0f b6 f4 ; 0xc22f1
+ add si, word [bp-006h] ; 03 76 fa ; 0xc22f4
+ add si, di ; 01 fe ; 0xc22f7
+ xor al, byte [si] ; 32 04 ; 0xc22f9
+ jmp short 022b9h ; eb bc ; 0xc22fb
+ test dh, dh ; 84 f6 ; 0xc22fd vgabios.c:1565
+ jbe short 022c1h ; 76 c0 ; 0xc22ff
+ test dl, 080h ; f6 c2 80 ; 0xc2301 vgabios.c:1567
+ je short 02310h ; 74 0a ; 0xc2304
+ mov si, 0b800h ; be 00 b8 ; 0xc2306 vgabios.c:47
+ mov es, si ; 8e c6 ; 0xc2309
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc230b
+ jmp short 02312h ; eb 02 ; 0xc230e vgabios.c:1571
+ xor al, al ; 30 c0 ; 0xc2310 vgabios.c:1573
+ mov byte [bp-002h], 000h ; c6 46 fe 00 ; 0xc2312 vgabios.c:1575
+ jmp short 02325h ; eb 0d ; 0xc2316
+ or al, ch ; 08 e8 ; 0xc2318 vgabios.c:1585
+ shr dh, 1 ; d0 ee ; 0xc231a vgabios.c:1588
+ inc byte [bp-002h] ; fe 46 fe ; 0xc231c vgabios.c:1589
+ cmp byte [bp-002h], 004h ; 80 7e fe 04 ; 0xc231f
+ jnc short 02350h ; 73 2b ; 0xc2323
+ movzx si, ah ; 0f b6 f4 ; 0xc2325
+ add si, word [bp-006h] ; 03 76 fa ; 0xc2328
+ add si, di ; 01 fe ; 0xc232b
+ movzx si, byte [si] ; 0f b6 34 ; 0xc232d
+ movzx cx, dh ; 0f b6 ce ; 0xc2330
+ test si, cx ; 85 ce ; 0xc2333
+ je short 0231ah ; 74 e3 ; 0xc2335
+ mov CL, strict byte 003h ; b1 03 ; 0xc2337
+ sub cl, byte [bp-002h] ; 2a 4e fe ; 0xc2339
+ mov ch, dl ; 88 d5 ; 0xc233c
+ and ch, 003h ; 80 e5 03 ; 0xc233e
+ add cl, cl ; 00 c9 ; 0xc2341
+ sal ch, CL ; d2 e5 ; 0xc2343
+ mov cl, ch ; 88 e9 ; 0xc2345
+ test dl, 080h ; f6 c2 80 ; 0xc2347
+ je short 02318h ; 74 cc ; 0xc234a
+ xor al, ch ; 30 e8 ; 0xc234c
+ jmp short 0231ah ; eb ca ; 0xc234e
+ mov cx, 0b800h ; b9 00 b8 ; 0xc2350 vgabios.c:52
+ mov es, cx ; 8e c1 ; 0xc2353
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2355
+ inc bx ; 43 ; 0xc2358 vgabios.c:1591
+ jmp short 022fdh ; eb a2 ; 0xc2359 vgabios.c:1592
+ leave ; c9 ; 0xc235b vgabios.c:1595
+ pop di ; 5f ; 0xc235c
+ pop si ; 5e ; 0xc235d
+ retn 00004h ; c2 04 00 ; 0xc235e
+ ; disGetNextSymbol 0xc2361 LB 0x1f58 -> off=0x0 cb=0000000000000085 uValue=00000000000c2361 'write_gfx_char_lin'
+write_gfx_char_lin: ; 0xc2361 LB 0x85
+ push si ; 56 ; 0xc2361 vgabios.c:1598
+ push di ; 57 ; 0xc2362
+ enter 00006h, 000h ; c8 06 00 00 ; 0xc2363
+ mov dh, dl ; 88 d6 ; 0xc2367
+ mov word [bp-002h], 0556ch ; c7 46 fe 6c 55 ; 0xc2369 vgabios.c:1605
+ movzx si, cl ; 0f b6 f1 ; 0xc236e vgabios.c:1606
+ movzx cx, byte [bp+008h] ; 0f b6 4e 08 ; 0xc2371
+ imul cx, si ; 0f af ce ; 0xc2375
+ sal cx, 006h ; c1 e1 06 ; 0xc2378
+ xor bh, bh ; 30 ff ; 0xc237b
+ sal bx, 003h ; c1 e3 03 ; 0xc237d
+ add bx, cx ; 01 cb ; 0xc2380
+ mov word [bp-004h], bx ; 89 5e fc ; 0xc2382
+ xor ah, ah ; 30 e4 ; 0xc2385 vgabios.c:1607
+ mov si, ax ; 89 c6 ; 0xc2387
+ sal si, 003h ; c1 e6 03 ; 0xc2389
+ xor al, al ; 30 c0 ; 0xc238c vgabios.c:1608
+ jmp short 023c5h ; eb 35 ; 0xc238e
+ cmp ah, 008h ; 80 fc 08 ; 0xc2390 vgabios.c:1612
+ jnc short 023bfh ; 73 2a ; 0xc2393
+ xor cl, cl ; 30 c9 ; 0xc2395 vgabios.c:1614
+ movzx bx, al ; 0f b6 d8 ; 0xc2397 vgabios.c:1615
+ add bx, si ; 01 f3 ; 0xc239a
+ add bx, word [bp-002h] ; 03 5e fe ; 0xc239c
+ movzx bx, byte [bx] ; 0f b6 1f ; 0xc239f
+ movzx di, dl ; 0f b6 fa ; 0xc23a2
+ test bx, di ; 85 fb ; 0xc23a5
+ je short 023abh ; 74 02 ; 0xc23a7
+ mov cl, dh ; 88 f1 ; 0xc23a9 vgabios.c:1617
+ movzx bx, ah ; 0f b6 dc ; 0xc23ab vgabios.c:1619
+ add bx, word [bp-006h] ; 03 5e fa ; 0xc23ae
+ mov di, 0a000h ; bf 00 a0 ; 0xc23b1 vgabios.c:52
+ mov es, di ; 8e c7 ; 0xc23b4
+ mov byte [es:bx], cl ; 26 88 0f ; 0xc23b6
+ shr dl, 1 ; d0 ea ; 0xc23b9 vgabios.c:1620
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc23bb vgabios.c:1621
+ jmp short 02390h ; eb d1 ; 0xc23bd
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc23bf vgabios.c:1622
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc23c1
+ jnc short 023e0h ; 73 1b ; 0xc23c3
+ movzx cx, al ; 0f b6 c8 ; 0xc23c5
+ movzx bx, byte [bp+008h] ; 0f b6 5e 08 ; 0xc23c8
+ imul bx, cx ; 0f af d9 ; 0xc23cc
+ sal bx, 003h ; c1 e3 03 ; 0xc23cf
+ mov cx, word [bp-004h] ; 8b 4e fc ; 0xc23d2
+ add cx, bx ; 01 d9 ; 0xc23d5
+ mov word [bp-006h], cx ; 89 4e fa ; 0xc23d7
+ mov DL, strict byte 080h ; b2 80 ; 0xc23da
+ xor ah, ah ; 30 e4 ; 0xc23dc
+ jmp short 02395h ; eb b5 ; 0xc23de
+ leave ; c9 ; 0xc23e0 vgabios.c:1623
+ pop di ; 5f ; 0xc23e1
+ pop si ; 5e ; 0xc23e2
+ retn 00002h ; c2 02 00 ; 0xc23e3
+ ; disGetNextSymbol 0xc23e6 LB 0x1ed3 -> off=0x0 cb=0000000000000165 uValue=00000000000c23e6 'biosfn_write_char_attr'
+biosfn_write_char_attr: ; 0xc23e6 LB 0x165
+ push bp ; 55 ; 0xc23e6 vgabios.c:1626
+ mov bp, sp ; 89 e5 ; 0xc23e7
+ push si ; 56 ; 0xc23e9
+ push di ; 57 ; 0xc23ea
+ sub sp, strict byte 00018h ; 83 ec 18 ; 0xc23eb
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc23ee
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc23f1
+ mov byte [bp-012h], bl ; 88 5e ee ; 0xc23f4
+ mov si, cx ; 89 ce ; 0xc23f7
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc23f9 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc23fc
+ mov es, ax ; 8e c0 ; 0xc23ff
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2401
+ xor ah, ah ; 30 e4 ; 0xc2404 vgabios.c:1634
+ call 035edh ; e8 e4 11 ; 0xc2406
+ mov cl, al ; 88 c1 ; 0xc2409
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc240b
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc240e vgabios.c:1635
+ je near 02544h ; 0f 84 30 01 ; 0xc2410
+ movzx ax, dl ; 0f b6 c2 ; 0xc2414 vgabios.c:1638
+ lea bx, [bp-01ch] ; 8d 5e e4 ; 0xc2417
+ lea dx, [bp-01ah] ; 8d 56 e6 ; 0xc241a
+ call 00a93h ; e8 73 e6 ; 0xc241d
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc2420 vgabios.c:1639
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc2423
+ mov dx, word [bp-01ch] ; 8b 56 e4 ; 0xc2426
+ xor dl, dl ; 30 d2 ; 0xc2429
+ shr dx, 008h ; c1 ea 08 ; 0xc242b
+ mov byte [bp-014h], dl ; 88 56 ec ; 0xc242e
+ mov bx, 00084h ; bb 84 00 ; 0xc2431 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2434
+ mov es, ax ; 8e c0 ; 0xc2437
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2439
+ xor ah, ah ; 30 e4 ; 0xc243c vgabios.c:48
+ inc ax ; 40 ; 0xc243e
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc243f
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2442 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc2445
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc2448 vgabios.c:58
+ movzx bx, cl ; 0f b6 d9 ; 0xc244b vgabios.c:1645
+ mov di, bx ; 89 df ; 0xc244e
+ sal di, 003h ; c1 e7 03 ; 0xc2450
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc2453
+ jne short 024a0h ; 75 46 ; 0xc2458
+ mov bx, word [bp-018h] ; 8b 5e e8 ; 0xc245a vgabios.c:1648
+ imul bx, ax ; 0f af d8 ; 0xc245d
+ add bx, bx ; 01 db ; 0xc2460
+ or bl, 0ffh ; 80 cb ff ; 0xc2462
+ movzx cx, byte [bp-00eh] ; 0f b6 4e f2 ; 0xc2465
+ inc bx ; 43 ; 0xc2469
+ imul bx, cx ; 0f af d9 ; 0xc246a
+ xor dh, dh ; 30 f6 ; 0xc246d
+ imul ax, dx ; 0f af c2 ; 0xc246f
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0 ; 0xc2472
+ add ax, dx ; 01 d0 ; 0xc2476
+ add ax, ax ; 01 c0 ; 0xc2478
+ mov dx, bx ; 89 da ; 0xc247a
+ add dx, ax ; 01 c2 ; 0xc247c
+ movzx ax, byte [bp-012h] ; 0f b6 46 ee ; 0xc247e vgabios.c:1650
+ sal ax, 008h ; c1 e0 08 ; 0xc2482
+ movzx bx, byte [bp-008h] ; 0f b6 5e f8 ; 0xc2485
+ add ax, bx ; 01 d8 ; 0xc2489
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc248b
+ mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc248e vgabios.c:1651
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc2491
+ mov cx, si ; 89 f1 ; 0xc2495
+ mov di, dx ; 89 d7 ; 0xc2497
+ jcxz 0249dh ; e3 02 ; 0xc2499
+ rep stosw ; f3 ab ; 0xc249b
+ jmp near 02544h ; e9 a4 00 ; 0xc249d vgabios.c:1653
+ movzx bx, byte [bx+0482eh] ; 0f b6 9f 2e 48 ; 0xc24a0 vgabios.c:1656
+ sal bx, 006h ; c1 e3 06 ; 0xc24a5
+ mov al, byte [bx+04844h] ; 8a 87 44 48 ; 0xc24a8
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc24ac
+ mov al, byte [di+047b1h] ; 8a 85 b1 47 ; 0xc24af vgabios.c:1657
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc24b3
+ dec si ; 4e ; 0xc24b6 vgabios.c:1658
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc24b7
+ je near 02544h ; 0f 84 86 00 ; 0xc24ba
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc24be vgabios.c:1660
+ sal bx, 003h ; c1 e3 03 ; 0xc24c2
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc24c5
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc24c9
+ jc short 024d9h ; 72 0c ; 0xc24cb
+ jbe short 024dfh ; 76 10 ; 0xc24cd
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc24cf
+ je short 02526h ; 74 53 ; 0xc24d1
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc24d3
+ je short 024e3h ; 74 0c ; 0xc24d5
+ jmp short 0253eh ; eb 65 ; 0xc24d7
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc24d9
+ je short 02507h ; 74 2a ; 0xc24db
+ jmp short 0253eh ; eb 5f ; 0xc24dd
+ or byte [bp-012h], 001h ; 80 4e ee 01 ; 0xc24df vgabios.c:1663
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc24e3 vgabios.c:1665
+ push ax ; 50 ; 0xc24e7
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc24e8
+ push ax ; 50 ; 0xc24ec
+ movzx ax, byte [bp-016h] ; 0f b6 46 ea ; 0xc24ed
+ push ax ; 50 ; 0xc24f1
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc24f2
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc24f6
+ movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc24fa
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc24fe
+ call 02185h ; e8 80 fc ; 0xc2502
+ jmp short 0253eh ; eb 37 ; 0xc2505 vgabios.c:1666
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc2507 vgabios.c:1668
+ push ax ; 50 ; 0xc250b
+ movzx ax, byte [bp-016h] ; 0f b6 46 ea ; 0xc250c
+ push ax ; 50 ; 0xc2510
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc2511
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc2515
+ movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc2519
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc251d
+ call 02284h ; e8 60 fd ; 0xc2521
+ jmp short 0253eh ; eb 18 ; 0xc2524 vgabios.c:1669
+ movzx ax, byte [bp-016h] ; 0f b6 46 ea ; 0xc2526 vgabios.c:1671
+ push ax ; 50 ; 0xc252a
+ movzx cx, byte [bp-014h] ; 0f b6 4e ec ; 0xc252b
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc252f
+ movzx dx, byte [bp-012h] ; 0f b6 56 ee ; 0xc2533
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc2537
+ call 02361h ; e8 23 fe ; 0xc253b
+ inc byte [bp-010h] ; fe 46 f0 ; 0xc253e vgabios.c:1678
+ jmp near 024b6h ; e9 72 ff ; 0xc2541 vgabios.c:1679
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2544 vgabios.c:1681
+ pop di ; 5f ; 0xc2547
+ pop si ; 5e ; 0xc2548
+ pop bp ; 5d ; 0xc2549
+ retn ; c3 ; 0xc254a
+ ; disGetNextSymbol 0xc254b LB 0x1d6e -> off=0x0 cb=0000000000000162 uValue=00000000000c254b 'biosfn_write_char_only'
+biosfn_write_char_only: ; 0xc254b LB 0x162
+ push bp ; 55 ; 0xc254b vgabios.c:1684
+ mov bp, sp ; 89 e5 ; 0xc254c
+ push si ; 56 ; 0xc254e
+ push di ; 57 ; 0xc254f
+ sub sp, strict byte 00016h ; 83 ec 16 ; 0xc2550
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc2553
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc2556
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc2559
+ mov si, cx ; 89 ce ; 0xc255c
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc255e vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2561
+ mov es, ax ; 8e c0 ; 0xc2564
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2566
+ xor ah, ah ; 30 e4 ; 0xc2569 vgabios.c:1692
+ call 035edh ; e8 7f 10 ; 0xc256b
+ mov cl, al ; 88 c1 ; 0xc256e
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc2570
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc2573 vgabios.c:1693
+ je near 026a6h ; 0f 84 2d 01 ; 0xc2575
+ movzx ax, dl ; 0f b6 c2 ; 0xc2579 vgabios.c:1696
+ lea bx, [bp-01ah] ; 8d 5e e6 ; 0xc257c
+ lea dx, [bp-018h] ; 8d 56 e8 ; 0xc257f
+ call 00a93h ; e8 0e e5 ; 0xc2582
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc2585 vgabios.c:1697
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc2588
+ mov dx, word [bp-01ah] ; 8b 56 e6 ; 0xc258b
+ xor dl, dl ; 30 d2 ; 0xc258e
+ shr dx, 008h ; c1 ea 08 ; 0xc2590
+ mov byte [bp-00ah], dl ; 88 56 f6 ; 0xc2593
+ mov bx, 00084h ; bb 84 00 ; 0xc2596 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2599
+ mov es, ax ; 8e c0 ; 0xc259c
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc259e
+ xor ah, ah ; 30 e4 ; 0xc25a1 vgabios.c:48
+ mov di, ax ; 89 c7 ; 0xc25a3
+ inc di ; 47 ; 0xc25a5
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc25a6 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc25a9
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc25ac vgabios.c:58
+ xor ch, ch ; 30 ed ; 0xc25af vgabios.c:1703
+ mov bx, cx ; 89 cb ; 0xc25b1
+ sal bx, 003h ; c1 e3 03 ; 0xc25b3
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc25b6
+ jne short 025fah ; 75 3d ; 0xc25bb
+ imul di, ax ; 0f af f8 ; 0xc25bd vgabios.c:1706
+ add di, di ; 01 ff ; 0xc25c0
+ or di, 000ffh ; 81 cf ff 00 ; 0xc25c2
+ movzx bx, byte [bp-00eh] ; 0f b6 5e f2 ; 0xc25c6
+ inc di ; 47 ; 0xc25ca
+ imul bx, di ; 0f af df ; 0xc25cb
+ xor dh, dh ; 30 f6 ; 0xc25ce
+ imul ax, dx ; 0f af c2 ; 0xc25d0
+ movzx dx, byte [bp-010h] ; 0f b6 56 f0 ; 0xc25d3
+ add ax, dx ; 01 d0 ; 0xc25d7
+ add ax, ax ; 01 c0 ; 0xc25d9
+ add bx, ax ; 01 c3 ; 0xc25db
+ dec si ; 4e ; 0xc25dd vgabios.c:1708
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc25de
+ je near 026a6h ; 0f 84 c1 00 ; 0xc25e1
+ movzx di, byte [bp-012h] ; 0f b6 7e ee ; 0xc25e5 vgabios.c:1709
+ sal di, 003h ; c1 e7 03 ; 0xc25e9
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc25ec vgabios.c:50
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc25f0
+ mov byte [es:bx], al ; 26 88 07 ; 0xc25f3
+ inc bx ; 43 ; 0xc25f6 vgabios.c:1710
+ inc bx ; 43 ; 0xc25f7
+ jmp short 025ddh ; eb e3 ; 0xc25f8 vgabios.c:1711
+ mov di, cx ; 89 cf ; 0xc25fa vgabios.c:1716
+ movzx ax, byte [di+0482eh] ; 0f b6 85 2e 48 ; 0xc25fc
+ mov di, ax ; 89 c7 ; 0xc2601
+ sal di, 006h ; c1 e7 06 ; 0xc2603
+ mov al, byte [di+04844h] ; 8a 85 44 48 ; 0xc2606
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc260a
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc260d vgabios.c:1717
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc2611
+ dec si ; 4e ; 0xc2614 vgabios.c:1718
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2615
+ je near 026a6h ; 0f 84 8a 00 ; 0xc2618
+ movzx bx, byte [bp-012h] ; 0f b6 5e ee ; 0xc261c vgabios.c:1720
+ sal bx, 003h ; c1 e3 03 ; 0xc2620
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc2623
+ cmp bl, 003h ; 80 fb 03 ; 0xc2627
+ jc short 0263ah ; 72 0e ; 0xc262a
+ jbe short 02641h ; 76 13 ; 0xc262c
+ cmp bl, 005h ; 80 fb 05 ; 0xc262e
+ je short 02688h ; 74 55 ; 0xc2631
+ cmp bl, 004h ; 80 fb 04 ; 0xc2633
+ je short 02645h ; 74 0d ; 0xc2636
+ jmp short 026a0h ; eb 66 ; 0xc2638
+ cmp bl, 002h ; 80 fb 02 ; 0xc263a
+ je short 02669h ; 74 2a ; 0xc263d
+ jmp short 026a0h ; eb 5f ; 0xc263f
+ or byte [bp-006h], 001h ; 80 4e fa 01 ; 0xc2641 vgabios.c:1723
+ movzx ax, byte [bp-00eh] ; 0f b6 46 f2 ; 0xc2645 vgabios.c:1725
+ push ax ; 50 ; 0xc2649
+ movzx ax, byte [bp-00ch] ; 0f b6 46 f4 ; 0xc264a
+ push ax ; 50 ; 0xc264e
+ movzx ax, byte [bp-016h] ; 0f b6 46 ea ; 0xc264f
+ push ax ; 50 ; 0xc2653
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc2654
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc2658
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc265c
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc2660
+ call 02185h ; e8 1e fb ; 0xc2664
+ jmp short 026a0h ; eb 37 ; 0xc2667 vgabios.c:1726
+ movzx ax, byte [bp-014h] ; 0f b6 46 ec ; 0xc2669 vgabios.c:1728
+ push ax ; 50 ; 0xc266d
+ movzx ax, byte [bp-016h] ; 0f b6 46 ea ; 0xc266e
+ push ax ; 50 ; 0xc2672
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc2673
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc2677
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc267b
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc267f
+ call 02284h ; e8 fe fb ; 0xc2683
+ jmp short 026a0h ; eb 18 ; 0xc2686 vgabios.c:1729
+ movzx ax, byte [bp-016h] ; 0f b6 46 ea ; 0xc2688 vgabios.c:1731
+ push ax ; 50 ; 0xc268c
+ movzx cx, byte [bp-00ah] ; 0f b6 4e f6 ; 0xc268d
+ movzx bx, byte [bp-010h] ; 0f b6 5e f0 ; 0xc2691
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc2695
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc2699
+ call 02361h ; e8 c1 fc ; 0xc269d
+ inc byte [bp-010h] ; fe 46 f0 ; 0xc26a0 vgabios.c:1738
+ jmp near 02614h ; e9 6e ff ; 0xc26a3 vgabios.c:1739
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc26a6 vgabios.c:1741
+ pop di ; 5f ; 0xc26a9
+ pop si ; 5e ; 0xc26aa
+ pop bp ; 5d ; 0xc26ab
+ retn ; c3 ; 0xc26ac
+ ; disGetNextSymbol 0xc26ad LB 0x1c0c -> off=0x0 cb=0000000000000165 uValue=00000000000c26ad 'biosfn_write_pixel'
+biosfn_write_pixel: ; 0xc26ad LB 0x165
+ push bp ; 55 ; 0xc26ad vgabios.c:1744
+ mov bp, sp ; 89 e5 ; 0xc26ae
+ push si ; 56 ; 0xc26b0
+ push ax ; 50 ; 0xc26b1
+ push ax ; 50 ; 0xc26b2
+ mov byte [bp-004h], al ; 88 46 fc ; 0xc26b3
+ mov byte [bp-006h], dl ; 88 56 fa ; 0xc26b6
+ mov dx, bx ; 89 da ; 0xc26b9
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc26bb vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc26be
+ mov es, ax ; 8e c0 ; 0xc26c1
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc26c3
+ xor ah, ah ; 30 e4 ; 0xc26c6 vgabios.c:1751
+ call 035edh ; e8 22 0f ; 0xc26c8
+ mov ah, al ; 88 c4 ; 0xc26cb
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc26cd vgabios.c:1752
+ je near 027edh ; 0f 84 1a 01 ; 0xc26cf
+ movzx bx, al ; 0f b6 d8 ; 0xc26d3 vgabios.c:1753
+ sal bx, 003h ; c1 e3 03 ; 0xc26d6
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc26d9
+ je near 027edh ; 0f 84 0b 01 ; 0xc26de
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc26e2 vgabios.c:1755
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc26e6
+ jc short 026f9h ; 72 0f ; 0xc26e8
+ jbe short 02700h ; 76 14 ; 0xc26ea
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc26ec
+ je near 027f3h ; 0f 84 01 01 ; 0xc26ee
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc26f2
+ je short 02700h ; 74 0a ; 0xc26f4
+ jmp near 027edh ; e9 f4 00 ; 0xc26f6
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc26f9
+ je short 0276fh ; 74 72 ; 0xc26fb
+ jmp near 027edh ; e9 ed 00 ; 0xc26fd
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2700 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2703
+ mov es, ax ; 8e c0 ; 0xc2706
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc2708
+ imul ax, cx ; 0f af c1 ; 0xc270b vgabios.c:58
+ mov bx, dx ; 89 d3 ; 0xc270e
+ shr bx, 003h ; c1 eb 03 ; 0xc2710
+ add bx, ax ; 01 c3 ; 0xc2713
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc2715 vgabios.c:57
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc2718
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc ; 0xc271b vgabios.c:58
+ imul ax, cx ; 0f af c1 ; 0xc271f
+ add bx, ax ; 01 c3 ; 0xc2722
+ mov cl, dl ; 88 d1 ; 0xc2724 vgabios.c:1761
+ and cl, 007h ; 80 e1 07 ; 0xc2726
+ mov ax, 00080h ; b8 80 00 ; 0xc2729
+ sar ax, CL ; d3 f8 ; 0xc272c
+ xor ah, ah ; 30 e4 ; 0xc272e vgabios.c:1762
+ sal ax, 008h ; c1 e0 08 ; 0xc2730
+ or AL, strict byte 008h ; 0c 08 ; 0xc2733
+ mov dx, 003ceh ; ba ce 03 ; 0xc2735
+ out DX, ax ; ef ; 0xc2738
+ mov ax, 00205h ; b8 05 02 ; 0xc2739 vgabios.c:1763
+ out DX, ax ; ef ; 0xc273c
+ mov dx, bx ; 89 da ; 0xc273d vgabios.c:1764
+ mov ax, 0a000h ; b8 00 a0 ; 0xc273f
+ call 03614h ; e8 cf 0e ; 0xc2742
+ test byte [bp-006h], 080h ; f6 46 fa 80 ; 0xc2745 vgabios.c:1765
+ je short 02752h ; 74 07 ; 0xc2749
+ mov ax, 01803h ; b8 03 18 ; 0xc274b vgabios.c:1767
+ mov dx, 003ceh ; ba ce 03 ; 0xc274e
+ out DX, ax ; ef ; 0xc2751
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2752 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc2755
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2757
+ mov byte [es:bx], al ; 26 88 07 ; 0xc275a
+ mov ax, 0ff08h ; b8 08 ff ; 0xc275d vgabios.c:1770
+ mov dx, 003ceh ; ba ce 03 ; 0xc2760
+ out DX, ax ; ef ; 0xc2763
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc2764 vgabios.c:1771
+ out DX, ax ; ef ; 0xc2767
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc2768 vgabios.c:1772
+ out DX, ax ; ef ; 0xc276b
+ jmp near 027edh ; e9 7e 00 ; 0xc276c vgabios.c:1773
+ mov si, cx ; 89 ce ; 0xc276f vgabios.c:1775
+ shr si, 1 ; d1 ee ; 0xc2771
+ imul si, si, strict byte 00050h ; 6b f6 50 ; 0xc2773
+ cmp al, byte [bx+047b1h] ; 3a 87 b1 47 ; 0xc2776
+ jne short 02783h ; 75 07 ; 0xc277a
+ mov bx, dx ; 89 d3 ; 0xc277c vgabios.c:1777
+ shr bx, 002h ; c1 eb 02 ; 0xc277e
+ jmp short 02788h ; eb 05 ; 0xc2781 vgabios.c:1779
+ mov bx, dx ; 89 d3 ; 0xc2783 vgabios.c:1781
+ shr bx, 003h ; c1 eb 03 ; 0xc2785
+ add bx, si ; 01 f3 ; 0xc2788
+ test cl, 001h ; f6 c1 01 ; 0xc278a vgabios.c:1783
+ je short 02792h ; 74 03 ; 0xc278d
+ add bh, 020h ; 80 c7 20 ; 0xc278f
+ mov cx, 0b800h ; b9 00 b8 ; 0xc2792 vgabios.c:47
+ mov es, cx ; 8e c1 ; 0xc2795
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2797
+ movzx si, ah ; 0f b6 f4 ; 0xc279a vgabios.c:1785
+ sal si, 003h ; c1 e6 03 ; 0xc279d
+ cmp byte [si+047b1h], 002h ; 80 bc b1 47 02 ; 0xc27a0
+ jne short 027beh ; 75 17 ; 0xc27a5
+ mov ah, dl ; 88 d4 ; 0xc27a7 vgabios.c:1787
+ and ah, 003h ; 80 e4 03 ; 0xc27a9
+ mov CL, strict byte 003h ; b1 03 ; 0xc27ac
+ sub cl, ah ; 28 e1 ; 0xc27ae
+ add cl, cl ; 00 c9 ; 0xc27b0
+ mov dh, byte [bp-006h] ; 8a 76 fa ; 0xc27b2
+ and dh, 003h ; 80 e6 03 ; 0xc27b5
+ sal dh, CL ; d2 e6 ; 0xc27b8
+ mov DL, strict byte 003h ; b2 03 ; 0xc27ba vgabios.c:1788
+ jmp short 027d1h ; eb 13 ; 0xc27bc vgabios.c:1790
+ mov ah, dl ; 88 d4 ; 0xc27be vgabios.c:1792
+ and ah, 007h ; 80 e4 07 ; 0xc27c0
+ mov CL, strict byte 007h ; b1 07 ; 0xc27c3
+ sub cl, ah ; 28 e1 ; 0xc27c5
+ mov dh, byte [bp-006h] ; 8a 76 fa ; 0xc27c7
+ and dh, 001h ; 80 e6 01 ; 0xc27ca
+ sal dh, CL ; d2 e6 ; 0xc27cd
+ mov DL, strict byte 001h ; b2 01 ; 0xc27cf vgabios.c:1793
+ sal dl, CL ; d2 e2 ; 0xc27d1
+ test byte [bp-006h], 080h ; f6 46 fa 80 ; 0xc27d3 vgabios.c:1795
+ je short 027ddh ; 74 04 ; 0xc27d7
+ xor al, dh ; 30 f0 ; 0xc27d9 vgabios.c:1797
+ jmp short 027e5h ; eb 08 ; 0xc27db vgabios.c:1799
+ mov ah, dl ; 88 d4 ; 0xc27dd vgabios.c:1801
+ not ah ; f6 d4 ; 0xc27df
+ and al, ah ; 20 e0 ; 0xc27e1
+ or al, dh ; 08 f0 ; 0xc27e3 vgabios.c:1802
+ mov dx, 0b800h ; ba 00 b8 ; 0xc27e5 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc27e8
+ mov byte [es:bx], al ; 26 88 07 ; 0xc27ea
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc27ed vgabios.c:1805
+ pop si ; 5e ; 0xc27f0
+ pop bp ; 5d ; 0xc27f1
+ retn ; c3 ; 0xc27f2
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc27f3 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc27f6
+ mov es, ax ; 8e c0 ; 0xc27f9
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc27fb
+ sal ax, 003h ; c1 e0 03 ; 0xc27fe vgabios.c:58
+ imul ax, cx ; 0f af c1 ; 0xc2801
+ mov bx, dx ; 89 d3 ; 0xc2804
+ add bx, ax ; 01 c3 ; 0xc2806
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2808 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc280b
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc280d
+ jmp short 027eah ; eb d8 ; 0xc2810
+ ; disGetNextSymbol 0xc2812 LB 0x1aa7 -> off=0x0 cb=000000000000024a uValue=00000000000c2812 'biosfn_write_teletype'
+biosfn_write_teletype: ; 0xc2812 LB 0x24a
+ push bp ; 55 ; 0xc2812 vgabios.c:1818
+ mov bp, sp ; 89 e5 ; 0xc2813
+ push si ; 56 ; 0xc2815
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc2816
+ mov ch, al ; 88 c5 ; 0xc2819
+ mov byte [bp-00ah], dl ; 88 56 f6 ; 0xc281b
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc281e
+ cmp dl, 0ffh ; 80 fa ff ; 0xc2821 vgabios.c:1826
+ jne short 02834h ; 75 0e ; 0xc2824
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc2826 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2829
+ mov es, ax ; 8e c0 ; 0xc282c
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc282e
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc2831 vgabios.c:48
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc2834 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2837
+ mov es, ax ; 8e c0 ; 0xc283a
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc283c
+ xor ah, ah ; 30 e4 ; 0xc283f vgabios.c:1831
+ call 035edh ; e8 a9 0d ; 0xc2841
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc2844
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc2847 vgabios.c:1832
+ je near 02a56h ; 0f 84 09 02 ; 0xc2849
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6 ; 0xc284d vgabios.c:1835
+ lea bx, [bp-012h] ; 8d 5e ee ; 0xc2851
+ lea dx, [bp-014h] ; 8d 56 ec ; 0xc2854
+ call 00a93h ; e8 39 e2 ; 0xc2857
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc285a vgabios.c:1836
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc285d
+ mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2860
+ xor al, al ; 30 c0 ; 0xc2863
+ shr ax, 008h ; c1 e8 08 ; 0xc2865
+ mov byte [bp-004h], al ; 88 46 fc ; 0xc2868
+ mov bx, 00084h ; bb 84 00 ; 0xc286b vgabios.c:47
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc286e
+ mov es, dx ; 8e c2 ; 0xc2871
+ mov dl, byte [es:bx] ; 26 8a 17 ; 0xc2873
+ xor dh, dh ; 30 f6 ; 0xc2876 vgabios.c:48
+ inc dx ; 42 ; 0xc2878
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc2879
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc287c vgabios.c:57
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc287f
+ mov word [bp-010h], dx ; 89 56 f0 ; 0xc2882 vgabios.c:58
+ cmp ch, 008h ; 80 fd 08 ; 0xc2885 vgabios.c:1842
+ jc short 02898h ; 72 0e ; 0xc2888
+ jbe short 028a1h ; 76 15 ; 0xc288a
+ cmp ch, 00dh ; 80 fd 0d ; 0xc288c
+ je short 028b7h ; 74 26 ; 0xc288f
+ cmp ch, 00ah ; 80 fd 0a ; 0xc2891
+ je short 028afh ; 74 19 ; 0xc2894
+ jmp short 028beh ; eb 26 ; 0xc2896
+ cmp ch, 007h ; 80 fd 07 ; 0xc2898
+ je near 029b2h ; 0f 84 13 01 ; 0xc289b
+ jmp short 028beh ; eb 1d ; 0xc289f
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc28a1 vgabios.c:1849
+ jbe near 029b2h ; 0f 86 09 01 ; 0xc28a5
+ dec byte [bp-006h] ; fe 4e fa ; 0xc28a9
+ jmp near 029b2h ; e9 03 01 ; 0xc28ac vgabios.c:1850
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc28af vgabios.c:1853
+ mov byte [bp-004h], al ; 88 46 fc ; 0xc28b1
+ jmp near 029b2h ; e9 fb 00 ; 0xc28b4 vgabios.c:1854
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc28b7 vgabios.c:1857
+ jmp near 029b2h ; e9 f4 00 ; 0xc28bb vgabios.c:1858
+ movzx si, byte [bp-00ch] ; 0f b6 76 f4 ; 0xc28be vgabios.c:1862
+ mov bx, si ; 89 f3 ; 0xc28c2
+ sal bx, 003h ; c1 e3 03 ; 0xc28c4
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc28c7
+ jne short 02911h ; 75 43 ; 0xc28cc
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc28ce vgabios.c:1865
+ imul ax, word [bp-00eh] ; 0f af 46 f2 ; 0xc28d1
+ add ax, ax ; 01 c0 ; 0xc28d5
+ or AL, strict byte 0ffh ; 0c ff ; 0xc28d7
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc28d9
+ mov si, ax ; 89 c6 ; 0xc28dd
+ inc si ; 46 ; 0xc28df
+ imul si, dx ; 0f af f2 ; 0xc28e0
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc ; 0xc28e3
+ imul ax, word [bp-010h] ; 0f af 46 f0 ; 0xc28e7
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc28eb
+ add ax, dx ; 01 d0 ; 0xc28ef
+ add ax, ax ; 01 c0 ; 0xc28f1
+ add si, ax ; 01 c6 ; 0xc28f3
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc28f5 vgabios.c:50
+ mov byte [es:si], ch ; 26 88 2c ; 0xc28f9
+ cmp cl, 003h ; 80 f9 03 ; 0xc28fc vgabios.c:1870
+ jne near 0299fh ; 0f 85 9c 00 ; 0xc28ff
+ inc si ; 46 ; 0xc2903 vgabios.c:1871
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2904 vgabios.c:50
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2908
+ mov byte [es:si], al ; 26 88 04 ; 0xc290b
+ jmp near 0299fh ; e9 8e 00 ; 0xc290e vgabios.c:1873
+ movzx si, byte [si+0482eh] ; 0f b6 b4 2e 48 ; 0xc2911 vgabios.c:1876
+ sal si, 006h ; c1 e6 06 ; 0xc2916
+ mov ah, byte [si+04844h] ; 8a a4 44 48 ; 0xc2919
+ mov dl, byte [bx+047b1h] ; 8a 97 b1 47 ; 0xc291d vgabios.c:1877
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc2921 vgabios.c:1878
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc2925
+ jc short 02935h ; 72 0c ; 0xc2927
+ jbe short 0293bh ; 76 10 ; 0xc2929
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc292b
+ je short 02986h ; 74 57 ; 0xc292d
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc292f
+ je short 0293fh ; 74 0c ; 0xc2931
+ jmp short 0299fh ; eb 6a ; 0xc2933
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc2935
+ je short 02965h ; 74 2c ; 0xc2937
+ jmp short 0299fh ; eb 64 ; 0xc2939
+ or byte [bp-008h], 001h ; 80 4e f8 01 ; 0xc293b vgabios.c:1881
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc293f vgabios.c:1883
+ push dx ; 52 ; 0xc2943
+ movzx ax, ah ; 0f b6 c4 ; 0xc2944
+ push ax ; 50 ; 0xc2947
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2948
+ push ax ; 50 ; 0xc294c
+ movzx bx, byte [bp-004h] ; 0f b6 5e fc ; 0xc294d
+ movzx si, byte [bp-006h] ; 0f b6 76 fa ; 0xc2951
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc2955
+ movzx ax, ch ; 0f b6 c5 ; 0xc2959
+ mov cx, bx ; 89 d9 ; 0xc295c
+ mov bx, si ; 89 f3 ; 0xc295e
+ call 02185h ; e8 22 f8 ; 0xc2960
+ jmp short 0299fh ; eb 3a ; 0xc2963 vgabios.c:1884
+ movzx ax, dl ; 0f b6 c2 ; 0xc2965 vgabios.c:1886
+ push ax ; 50 ; 0xc2968
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2969
+ push ax ; 50 ; 0xc296d
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc ; 0xc296e
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc2972
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc2976
+ movzx si, ch ; 0f b6 f5 ; 0xc297a
+ mov cx, ax ; 89 c1 ; 0xc297d
+ mov ax, si ; 89 f0 ; 0xc297f
+ call 02284h ; e8 00 f9 ; 0xc2981
+ jmp short 0299fh ; eb 19 ; 0xc2984 vgabios.c:1887
+ movzx ax, byte [bp-010h] ; 0f b6 46 f0 ; 0xc2986 vgabios.c:1889
+ push ax ; 50 ; 0xc298a
+ movzx si, byte [bp-004h] ; 0f b6 76 fc ; 0xc298b
+ movzx bx, byte [bp-006h] ; 0f b6 5e fa ; 0xc298f
+ movzx dx, byte [bp-008h] ; 0f b6 56 f8 ; 0xc2993
+ movzx ax, ch ; 0f b6 c5 ; 0xc2997
+ mov cx, si ; 89 f1 ; 0xc299a
+ call 02361h ; e8 c2 f9 ; 0xc299c
+ inc byte [bp-006h] ; fe 46 fa ; 0xc299f vgabios.c:1897
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc29a2 vgabios.c:1899
+ cmp ax, word [bp-010h] ; 3b 46 f0 ; 0xc29a6
+ jne short 029b2h ; 75 07 ; 0xc29a9
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc29ab vgabios.c:1900
+ inc byte [bp-004h] ; fe 46 fc ; 0xc29af vgabios.c:1901
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc ; 0xc29b2 vgabios.c:1906
+ cmp ax, word [bp-00eh] ; 3b 46 f2 ; 0xc29b6
+ jne near 02a3ah ; 0f 85 7d 00 ; 0xc29b9
+ movzx bx, byte [bp-00ch] ; 0f b6 5e f4 ; 0xc29bd vgabios.c:1908
+ sal bx, 003h ; c1 e3 03 ; 0xc29c1
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc29c4
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc29c7
+ mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc29c9
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc29cc
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc29ce
+ jne short 02a1dh ; 75 48 ; 0xc29d3
+ mov dx, word [bp-010h] ; 8b 56 f0 ; 0xc29d5 vgabios.c:1910
+ imul dx, word [bp-00eh] ; 0f af 56 f2 ; 0xc29d8
+ add dx, dx ; 01 d2 ; 0xc29dc
+ or dl, 0ffh ; 80 ca ff ; 0xc29de
+ movzx si, byte [bp-00ah] ; 0f b6 76 f6 ; 0xc29e1
+ inc dx ; 42 ; 0xc29e5
+ imul si, dx ; 0f af f2 ; 0xc29e6
+ movzx dx, byte [bp-004h] ; 0f b6 56 fc ; 0xc29e9
+ dec dx ; 4a ; 0xc29ed
+ mov cx, word [bp-010h] ; 8b 4e f0 ; 0xc29ee
+ imul cx, dx ; 0f af ca ; 0xc29f1
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc29f4
+ add dx, cx ; 01 ca ; 0xc29f8
+ add dx, dx ; 01 d2 ; 0xc29fa
+ add si, dx ; 01 d6 ; 0xc29fc
+ inc si ; 46 ; 0xc29fe vgabios.c:1911
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc29ff vgabios.c:45
+ mov bl, byte [es:si] ; 26 8a 1c ; 0xc2a03
+ push strict byte 00001h ; 6a 01 ; 0xc2a06 vgabios.c:1912
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc2a08
+ push dx ; 52 ; 0xc2a0c
+ movzx dx, ah ; 0f b6 d4 ; 0xc2a0d
+ push dx ; 52 ; 0xc2a10
+ xor ah, ah ; 30 e4 ; 0xc2a11
+ push ax ; 50 ; 0xc2a13
+ movzx dx, bl ; 0f b6 d3 ; 0xc2a14
+ xor cx, cx ; 31 c9 ; 0xc2a17
+ xor bx, bx ; 31 db ; 0xc2a19
+ jmp short 02a31h ; eb 14 ; 0xc2a1b vgabios.c:1914
+ push strict byte 00001h ; 6a 01 ; 0xc2a1d vgabios.c:1916
+ movzx dx, byte [bp-00ah] ; 0f b6 56 f6 ; 0xc2a1f
+ push dx ; 52 ; 0xc2a23
+ movzx dx, ah ; 0f b6 d4 ; 0xc2a24
+ push dx ; 52 ; 0xc2a27
+ xor ah, ah ; 30 e4 ; 0xc2a28
+ push ax ; 50 ; 0xc2a2a
+ xor cx, cx ; 31 c9 ; 0xc2a2b
+ xor bx, bx ; 31 db ; 0xc2a2d
+ xor dx, dx ; 31 d2 ; 0xc2a2f
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc2a31
+ call 01b5dh ; e8 26 f1 ; 0xc2a34
+ dec byte [bp-004h] ; fe 4e fc ; 0xc2a37 vgabios.c:1918
+ movzx ax, byte [bp-004h] ; 0f b6 46 fc ; 0xc2a3a vgabios.c:1922
+ mov word [bp-012h], ax ; 89 46 ee ; 0xc2a3e
+ sal word [bp-012h], 008h ; c1 66 ee 08 ; 0xc2a41
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc2a45
+ add word [bp-012h], ax ; 01 46 ee ; 0xc2a49
+ mov dx, word [bp-012h] ; 8b 56 ee ; 0xc2a4c vgabios.c:1923
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6 ; 0xc2a4f
+ call 01242h ; e8 ec e7 ; 0xc2a53
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2a56 vgabios.c:1924
+ pop si ; 5e ; 0xc2a59
+ pop bp ; 5d ; 0xc2a5a
+ retn ; c3 ; 0xc2a5b
+ ; disGetNextSymbol 0xc2a5c LB 0x185d -> off=0x0 cb=0000000000000033 uValue=00000000000c2a5c 'get_font_access'
+get_font_access: ; 0xc2a5c LB 0x33
+ push bp ; 55 ; 0xc2a5c vgabios.c:1927
+ mov bp, sp ; 89 e5 ; 0xc2a5d
+ push dx ; 52 ; 0xc2a5f
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc2a60 vgabios.c:1929
+ mov dx, 003ceh ; ba ce 03 ; 0xc2a63
+ out DX, ax ; ef ; 0xc2a66
+ mov AL, strict byte 006h ; b0 06 ; 0xc2a67 vgabios.c:1930
+ out DX, AL ; ee ; 0xc2a69
+ mov dx, 003cfh ; ba cf 03 ; 0xc2a6a vgabios.c:1931
+ in AL, DX ; ec ; 0xc2a6d
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2a6e
+ and ax, strict word 00001h ; 25 01 00 ; 0xc2a70
+ or AL, strict byte 004h ; 0c 04 ; 0xc2a73
+ sal ax, 008h ; c1 e0 08 ; 0xc2a75
+ or AL, strict byte 006h ; 0c 06 ; 0xc2a78
+ mov dx, 003ceh ; ba ce 03 ; 0xc2a7a
+ out DX, ax ; ef ; 0xc2a7d
+ mov ax, 00402h ; b8 02 04 ; 0xc2a7e vgabios.c:1932
+ mov dx, 003c4h ; ba c4 03 ; 0xc2a81
+ out DX, ax ; ef ; 0xc2a84
+ mov ax, 00604h ; b8 04 06 ; 0xc2a85 vgabios.c:1933
+ out DX, ax ; ef ; 0xc2a88
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2a89 vgabios.c:1934
+ pop dx ; 5a ; 0xc2a8c
+ pop bp ; 5d ; 0xc2a8d
+ retn ; c3 ; 0xc2a8e
+ ; disGetNextSymbol 0xc2a8f LB 0x182a -> off=0x0 cb=0000000000000030 uValue=00000000000c2a8f 'release_font_access'
+release_font_access: ; 0xc2a8f LB 0x30
+ push bp ; 55 ; 0xc2a8f vgabios.c:1936
+ mov bp, sp ; 89 e5 ; 0xc2a90
+ push dx ; 52 ; 0xc2a92
+ mov dx, 003cch ; ba cc 03 ; 0xc2a93 vgabios.c:1938
+ in AL, DX ; ec ; 0xc2a96
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2a97
+ and ax, strict word 00001h ; 25 01 00 ; 0xc2a99
+ sal ax, 002h ; c1 e0 02 ; 0xc2a9c
+ or AL, strict byte 00ah ; 0c 0a ; 0xc2a9f
+ sal ax, 008h ; c1 e0 08 ; 0xc2aa1
+ or AL, strict byte 006h ; 0c 06 ; 0xc2aa4
+ mov dx, 003ceh ; ba ce 03 ; 0xc2aa6
+ out DX, ax ; ef ; 0xc2aa9
+ mov ax, 01005h ; b8 05 10 ; 0xc2aaa vgabios.c:1939
+ out DX, ax ; ef ; 0xc2aad
+ mov ax, 00302h ; b8 02 03 ; 0xc2aae vgabios.c:1940
+ mov dx, 003c4h ; ba c4 03 ; 0xc2ab1
+ out DX, ax ; ef ; 0xc2ab4
+ mov ax, 00204h ; b8 04 02 ; 0xc2ab5 vgabios.c:1941
+ out DX, ax ; ef ; 0xc2ab8
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2ab9 vgabios.c:1942
+ pop dx ; 5a ; 0xc2abc
+ pop bp ; 5d ; 0xc2abd
+ retn ; c3 ; 0xc2abe
+ ; disGetNextSymbol 0xc2abf LB 0x17fa -> off=0x0 cb=00000000000000b4 uValue=00000000000c2abf 'set_scan_lines'
+set_scan_lines: ; 0xc2abf LB 0xb4
+ push bp ; 55 ; 0xc2abf vgabios.c:1944
+ mov bp, sp ; 89 e5 ; 0xc2ac0
+ push bx ; 53 ; 0xc2ac2
+ push cx ; 51 ; 0xc2ac3
+ push dx ; 52 ; 0xc2ac4
+ push si ; 56 ; 0xc2ac5
+ push di ; 57 ; 0xc2ac6
+ mov bl, al ; 88 c3 ; 0xc2ac7
+ mov si, strict word 00063h ; be 63 00 ; 0xc2ac9 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2acc
+ mov es, ax ; 8e c0 ; 0xc2acf
+ mov si, word [es:si] ; 26 8b 34 ; 0xc2ad1
+ mov cx, si ; 89 f1 ; 0xc2ad4 vgabios.c:58
+ mov AL, strict byte 009h ; b0 09 ; 0xc2ad6 vgabios.c:1950
+ mov dx, si ; 89 f2 ; 0xc2ad8
+ out DX, AL ; ee ; 0xc2ada
+ lea dx, [si+001h] ; 8d 54 01 ; 0xc2adb vgabios.c:1951
+ in AL, DX ; ec ; 0xc2ade
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2adf
+ mov ah, al ; 88 c4 ; 0xc2ae1 vgabios.c:1952
+ and ah, 0e0h ; 80 e4 e0 ; 0xc2ae3
+ mov al, bl ; 88 d8 ; 0xc2ae6
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc2ae8
+ or al, ah ; 08 e0 ; 0xc2aea
+ out DX, AL ; ee ; 0xc2aec vgabios.c:1953
+ cmp bl, 008h ; 80 fb 08 ; 0xc2aed vgabios.c:1954
+ jne short 02afah ; 75 08 ; 0xc2af0
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc2af2 vgabios.c:1956
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc2af5
+ jmp short 02b07h ; eb 0d ; 0xc2af8 vgabios.c:1958
+ mov al, bl ; 88 d8 ; 0xc2afa vgabios.c:1960
+ sub AL, strict byte 003h ; 2c 03 ; 0xc2afc
+ movzx dx, al ; 0f b6 d0 ; 0xc2afe
+ mov al, bl ; 88 d8 ; 0xc2b01
+ sub AL, strict byte 004h ; 2c 04 ; 0xc2b03
+ xor ah, ah ; 30 e4 ; 0xc2b05
+ call 0114ch ; e8 42 e6 ; 0xc2b07
+ movzx di, bl ; 0f b6 fb ; 0xc2b0a vgabios.c:1962
+ mov bx, 00085h ; bb 85 00 ; 0xc2b0d vgabios.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2b10
+ mov es, ax ; 8e c0 ; 0xc2b13
+ mov word [es:bx], di ; 26 89 3f ; 0xc2b15
+ mov AL, strict byte 012h ; b0 12 ; 0xc2b18 vgabios.c:1963
+ mov dx, cx ; 89 ca ; 0xc2b1a
+ out DX, AL ; ee ; 0xc2b1c
+ mov bx, cx ; 89 cb ; 0xc2b1d vgabios.c:1964
+ inc bx ; 43 ; 0xc2b1f
+ mov dx, bx ; 89 da ; 0xc2b20
+ in AL, DX ; ec ; 0xc2b22
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2b23
+ mov si, ax ; 89 c6 ; 0xc2b25
+ mov AL, strict byte 007h ; b0 07 ; 0xc2b27 vgabios.c:1965
+ mov dx, cx ; 89 ca ; 0xc2b29
+ out DX, AL ; ee ; 0xc2b2b
+ mov dx, bx ; 89 da ; 0xc2b2c vgabios.c:1966
+ in AL, DX ; ec ; 0xc2b2e
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2b2f
+ mov ah, al ; 88 c4 ; 0xc2b31 vgabios.c:1967
+ and ah, 002h ; 80 e4 02 ; 0xc2b33
+ movzx dx, ah ; 0f b6 d4 ; 0xc2b36
+ sal dx, 007h ; c1 e2 07 ; 0xc2b39
+ and AL, strict byte 040h ; 24 40 ; 0xc2b3c
+ xor ah, ah ; 30 e4 ; 0xc2b3e
+ sal ax, 003h ; c1 e0 03 ; 0xc2b40
+ add ax, dx ; 01 d0 ; 0xc2b43
+ inc ax ; 40 ; 0xc2b45
+ add ax, si ; 01 f0 ; 0xc2b46
+ xor dx, dx ; 31 d2 ; 0xc2b48 vgabios.c:1968
+ div di ; f7 f7 ; 0xc2b4a
+ mov dl, al ; 88 c2 ; 0xc2b4c vgabios.c:1969
+ db 0feh, 0cah
+ ; dec dl ; fe ca ; 0xc2b4e
+ mov bx, 00084h ; bb 84 00 ; 0xc2b50 vgabios.c:52
+ mov byte [es:bx], dl ; 26 88 17 ; 0xc2b53
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2b56 vgabios.c:57
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc2b59
+ xor ah, ah ; 30 e4 ; 0xc2b5c vgabios.c:1971
+ imul dx, ax ; 0f af d0 ; 0xc2b5e
+ add dx, dx ; 01 d2 ; 0xc2b61
+ mov bx, strict word 0004ch ; bb 4c 00 ; 0xc2b63 vgabios.c:62
+ mov word [es:bx], dx ; 26 89 17 ; 0xc2b66
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc2b69 vgabios.c:1972
+ pop di ; 5f ; 0xc2b6c
+ pop si ; 5e ; 0xc2b6d
+ pop dx ; 5a ; 0xc2b6e
+ pop cx ; 59 ; 0xc2b6f
+ pop bx ; 5b ; 0xc2b70
+ pop bp ; 5d ; 0xc2b71
+ retn ; c3 ; 0xc2b72
+ ; disGetNextSymbol 0xc2b73 LB 0x1746 -> off=0x0 cb=0000000000000022 uValue=00000000000c2b73 'biosfn_set_font_block'
+biosfn_set_font_block: ; 0xc2b73 LB 0x22
+ push bp ; 55 ; 0xc2b73 vgabios.c:1974
+ mov bp, sp ; 89 e5 ; 0xc2b74
+ push bx ; 53 ; 0xc2b76
+ push dx ; 52 ; 0xc2b77
+ mov bl, al ; 88 c3 ; 0xc2b78
+ mov ax, 00100h ; b8 00 01 ; 0xc2b7a vgabios.c:1976
+ mov dx, 003c4h ; ba c4 03 ; 0xc2b7d
+ out DX, ax ; ef ; 0xc2b80
+ movzx ax, bl ; 0f b6 c3 ; 0xc2b81 vgabios.c:1977
+ sal ax, 008h ; c1 e0 08 ; 0xc2b84
+ or AL, strict byte 003h ; 0c 03 ; 0xc2b87
+ out DX, ax ; ef ; 0xc2b89
+ mov ax, 00300h ; b8 00 03 ; 0xc2b8a vgabios.c:1978
+ out DX, ax ; ef ; 0xc2b8d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2b8e vgabios.c:1979
+ pop dx ; 5a ; 0xc2b91
+ pop bx ; 5b ; 0xc2b92
+ pop bp ; 5d ; 0xc2b93
+ retn ; c3 ; 0xc2b94
+ ; disGetNextSymbol 0xc2b95 LB 0x1724 -> off=0x0 cb=0000000000000075 uValue=00000000000c2b95 'load_text_patch'
+load_text_patch: ; 0xc2b95 LB 0x75
+ push bp ; 55 ; 0xc2b95 vgabios.c:1981
+ mov bp, sp ; 89 e5 ; 0xc2b96
+ push si ; 56 ; 0xc2b98
+ push di ; 57 ; 0xc2b99
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc2b9a
+ push ax ; 50 ; 0xc2b9d
+ mov byte [bp-006h], cl ; 88 4e fa ; 0xc2b9e
+ call 02a5ch ; e8 b8 fe ; 0xc2ba1 vgabios.c:1986
+ mov al, bl ; 88 d8 ; 0xc2ba4 vgabios.c:1988
+ and AL, strict byte 003h ; 24 03 ; 0xc2ba6
+ movzx cx, al ; 0f b6 c8 ; 0xc2ba8
+ sal cx, 00eh ; c1 e1 0e ; 0xc2bab
+ mov al, bl ; 88 d8 ; 0xc2bae
+ and AL, strict byte 004h ; 24 04 ; 0xc2bb0
+ xor ah, ah ; 30 e4 ; 0xc2bb2
+ sal ax, 00bh ; c1 e0 0b ; 0xc2bb4
+ add cx, ax ; 01 c1 ; 0xc2bb7
+ mov word [bp-00ch], cx ; 89 4e f4 ; 0xc2bb9
+ mov bx, dx ; 89 d3 ; 0xc2bbc vgabios.c:1989
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2bbe
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc2bc1
+ inc dx ; 42 ; 0xc2bc4 vgabios.c:1990
+ mov word [bp-008h], dx ; 89 56 f8 ; 0xc2bc5
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc2bc8 vgabios.c:1991
+ cmp byte [es:bx], 000h ; 26 80 3f 00 ; 0xc2bcb
+ je short 02c00h ; 74 2f ; 0xc2bcf
+ movzx ax, byte [es:bx] ; 26 0f b6 07 ; 0xc2bd1 vgabios.c:1992
+ sal ax, 005h ; c1 e0 05 ; 0xc2bd5
+ mov di, word [bp-00ch] ; 8b 7e f4 ; 0xc2bd8
+ add di, ax ; 01 c7 ; 0xc2bdb
+ movzx cx, byte [bp-006h] ; 0f b6 4e fa ; 0xc2bdd vgabios.c:1993
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc2be1
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc2be4
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2be7
+ mov es, ax ; 8e c0 ; 0xc2bea
+ jcxz 02bf4h ; e3 06 ; 0xc2bec
+ push DS ; 1e ; 0xc2bee
+ mov ds, dx ; 8e da ; 0xc2bef
+ rep movsb ; f3 a4 ; 0xc2bf1
+ pop DS ; 1f ; 0xc2bf3
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc2bf4 vgabios.c:1994
+ inc ax ; 40 ; 0xc2bf8
+ add word [bp-008h], ax ; 01 46 f8 ; 0xc2bf9
+ add bx, ax ; 01 c3 ; 0xc2bfc vgabios.c:1995
+ jmp short 02bc8h ; eb c8 ; 0xc2bfe vgabios.c:1996
+ call 02a8fh ; e8 8c fe ; 0xc2c00 vgabios.c:1998
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2c03 vgabios.c:1999
+ pop di ; 5f ; 0xc2c06
+ pop si ; 5e ; 0xc2c07
+ pop bp ; 5d ; 0xc2c08
+ retn ; c3 ; 0xc2c09
+ ; disGetNextSymbol 0xc2c0a LB 0x16af -> off=0x0 cb=000000000000007c uValue=00000000000c2c0a 'biosfn_load_text_user_pat'
+biosfn_load_text_user_pat: ; 0xc2c0a LB 0x7c
+ push bp ; 55 ; 0xc2c0a vgabios.c:2001
+ mov bp, sp ; 89 e5 ; 0xc2c0b
+ push si ; 56 ; 0xc2c0d
+ push di ; 57 ; 0xc2c0e
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc2c0f
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2c12
+ mov word [bp-00ch], dx ; 89 56 f4 ; 0xc2c15
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc2c18
+ mov word [bp-00ah], cx ; 89 4e f6 ; 0xc2c1b
+ call 02a5ch ; e8 3b fe ; 0xc2c1e vgabios.c:2006
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2c21 vgabios.c:2007
+ and AL, strict byte 003h ; 24 03 ; 0xc2c24
+ xor ah, ah ; 30 e4 ; 0xc2c26
+ mov bx, ax ; 89 c3 ; 0xc2c28
+ sal bx, 00eh ; c1 e3 0e ; 0xc2c2a
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2c2d
+ and AL, strict byte 004h ; 24 04 ; 0xc2c30
+ xor ah, ah ; 30 e4 ; 0xc2c32
+ sal ax, 00bh ; c1 e0 0b ; 0xc2c34
+ add bx, ax ; 01 c3 ; 0xc2c37
+ mov word [bp-00eh], bx ; 89 5e f2 ; 0xc2c39
+ xor bx, bx ; 31 db ; 0xc2c3c vgabios.c:2008
+ cmp bx, word [bp-00ah] ; 3b 5e f6 ; 0xc2c3e
+ jnc short 02c6dh ; 73 2a ; 0xc2c41
+ movzx cx, byte [bp+008h] ; 0f b6 4e 08 ; 0xc2c43 vgabios.c:2010
+ mov si, bx ; 89 de ; 0xc2c47
+ imul si, cx ; 0f af f1 ; 0xc2c49
+ add si, word [bp-008h] ; 03 76 f8 ; 0xc2c4c
+ mov di, word [bp+004h] ; 8b 7e 04 ; 0xc2c4f vgabios.c:2011
+ add di, bx ; 01 df ; 0xc2c52
+ sal di, 005h ; c1 e7 05 ; 0xc2c54
+ add di, word [bp-00eh] ; 03 7e f2 ; 0xc2c57
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc2c5a vgabios.c:2012
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2c5d
+ mov es, ax ; 8e c0 ; 0xc2c60
+ jcxz 02c6ah ; e3 06 ; 0xc2c62
+ push DS ; 1e ; 0xc2c64
+ mov ds, dx ; 8e da ; 0xc2c65
+ rep movsb ; f3 a4 ; 0xc2c67
+ pop DS ; 1f ; 0xc2c69
+ inc bx ; 43 ; 0xc2c6a vgabios.c:2013
+ jmp short 02c3eh ; eb d1 ; 0xc2c6b
+ call 02a8fh ; e8 1f fe ; 0xc2c6d vgabios.c:2014
+ cmp byte [bp-006h], 010h ; 80 7e fa 10 ; 0xc2c70 vgabios.c:2015
+ jc short 02c7dh ; 72 07 ; 0xc2c74
+ movzx ax, byte [bp+008h] ; 0f b6 46 08 ; 0xc2c76 vgabios.c:2017
+ call 02abfh ; e8 42 fe ; 0xc2c7a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2c7d vgabios.c:2019
+ pop di ; 5f ; 0xc2c80
+ pop si ; 5e ; 0xc2c81
+ pop bp ; 5d ; 0xc2c82
+ retn 00006h ; c2 06 00 ; 0xc2c83
+ ; disGetNextSymbol 0xc2c86 LB 0x1633 -> off=0x0 cb=0000000000000016 uValue=00000000000c2c86 'biosfn_load_gfx_8_8_chars'
+biosfn_load_gfx_8_8_chars: ; 0xc2c86 LB 0x16
+ push bp ; 55 ; 0xc2c86 vgabios.c:2021
+ mov bp, sp ; 89 e5 ; 0xc2c87
+ push bx ; 53 ; 0xc2c89
+ push cx ; 51 ; 0xc2c8a
+ mov bx, dx ; 89 d3 ; 0xc2c8b vgabios.c:2023
+ mov cx, ax ; 89 c1 ; 0xc2c8d
+ mov ax, strict word 0001fh ; b8 1f 00 ; 0xc2c8f
+ call 009f0h ; e8 5b dd ; 0xc2c92
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2c95 vgabios.c:2024
+ pop cx ; 59 ; 0xc2c98
+ pop bx ; 5b ; 0xc2c99
+ pop bp ; 5d ; 0xc2c9a
+ retn ; c3 ; 0xc2c9b
+ ; disGetNextSymbol 0xc2c9c LB 0x161d -> off=0x0 cb=0000000000000049 uValue=00000000000c2c9c 'set_gfx_font'
+set_gfx_font: ; 0xc2c9c LB 0x49
+ push bp ; 55 ; 0xc2c9c vgabios.c:2026
+ mov bp, sp ; 89 e5 ; 0xc2c9d
+ push si ; 56 ; 0xc2c9f
+ push di ; 57 ; 0xc2ca0
+ mov si, dx ; 89 d6 ; 0xc2ca1
+ mov di, bx ; 89 df ; 0xc2ca3
+ mov dl, cl ; 88 ca ; 0xc2ca5
+ mov bx, ax ; 89 c3 ; 0xc2ca7 vgabios.c:2030
+ mov cx, si ; 89 f1 ; 0xc2ca9
+ mov ax, strict word 00043h ; b8 43 00 ; 0xc2cab
+ call 009f0h ; e8 3f dd ; 0xc2cae
+ test dl, dl ; 84 d2 ; 0xc2cb1 vgabios.c:2031
+ je short 02cc6h ; 74 11 ; 0xc2cb3
+ cmp dl, 003h ; 80 fa 03 ; 0xc2cb5 vgabios.c:2032
+ jbe short 02cbch ; 76 02 ; 0xc2cb8
+ mov DL, strict byte 002h ; b2 02 ; 0xc2cba vgabios.c:2033
+ movzx bx, dl ; 0f b6 da ; 0xc2cbc vgabios.c:2034
+ mov al, byte [bx+07dfdh] ; 8a 87 fd 7d ; 0xc2cbf
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc2cc3
+ mov bx, 00085h ; bb 85 00 ; 0xc2cc6 vgabios.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2cc9
+ mov es, ax ; 8e c0 ; 0xc2ccc
+ mov word [es:bx], di ; 26 89 3f ; 0xc2cce
+ movzx ax, byte [bp+004h] ; 0f b6 46 04 ; 0xc2cd1 vgabios.c:2039
+ dec ax ; 48 ; 0xc2cd5
+ mov bx, 00084h ; bb 84 00 ; 0xc2cd6 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc2cd9
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2cdc vgabios.c:2040
+ pop di ; 5f ; 0xc2cdf
+ pop si ; 5e ; 0xc2ce0
+ pop bp ; 5d ; 0xc2ce1
+ retn 00002h ; c2 02 00 ; 0xc2ce2
+ ; disGetNextSymbol 0xc2ce5 LB 0x15d4 -> off=0x0 cb=000000000000001c uValue=00000000000c2ce5 'biosfn_load_gfx_user_chars'
+biosfn_load_gfx_user_chars: ; 0xc2ce5 LB 0x1c
+ push bp ; 55 ; 0xc2ce5 vgabios.c:2042
+ mov bp, sp ; 89 e5 ; 0xc2ce6
+ push si ; 56 ; 0xc2ce8
+ mov si, ax ; 89 c6 ; 0xc2ce9
+ mov ax, dx ; 89 d0 ; 0xc2ceb
+ movzx dx, byte [bp+004h] ; 0f b6 56 04 ; 0xc2ced vgabios.c:2045
+ push dx ; 52 ; 0xc2cf1
+ xor ch, ch ; 30 ed ; 0xc2cf2
+ mov dx, si ; 89 f2 ; 0xc2cf4
+ call 02c9ch ; e8 a3 ff ; 0xc2cf6
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2cf9 vgabios.c:2046
+ pop si ; 5e ; 0xc2cfc
+ pop bp ; 5d ; 0xc2cfd
+ retn 00002h ; c2 02 00 ; 0xc2cfe
+ ; disGetNextSymbol 0xc2d01 LB 0x15b8 -> off=0x0 cb=000000000000001e uValue=00000000000c2d01 'biosfn_load_gfx_8_14_chars'
+biosfn_load_gfx_8_14_chars: ; 0xc2d01 LB 0x1e
+ push bp ; 55 ; 0xc2d01 vgabios.c:2051
+ mov bp, sp ; 89 e5 ; 0xc2d02
+ push bx ; 53 ; 0xc2d04
+ push cx ; 51 ; 0xc2d05
+ movzx cx, dl ; 0f b6 ca ; 0xc2d06 vgabios.c:2053
+ push cx ; 51 ; 0xc2d09
+ movzx cx, al ; 0f b6 c8 ; 0xc2d0a
+ mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2d0d
+ mov ax, 05d6ch ; b8 6c 5d ; 0xc2d10
+ mov dx, ds ; 8c da ; 0xc2d13
+ call 02c9ch ; e8 84 ff ; 0xc2d15
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d18 vgabios.c:2054
+ pop cx ; 59 ; 0xc2d1b
+ pop bx ; 5b ; 0xc2d1c
+ pop bp ; 5d ; 0xc2d1d
+ retn ; c3 ; 0xc2d1e
+ ; disGetNextSymbol 0xc2d1f LB 0x159a -> off=0x0 cb=000000000000001e uValue=00000000000c2d1f 'biosfn_load_gfx_8_8_dd_chars'
+biosfn_load_gfx_8_8_dd_chars: ; 0xc2d1f LB 0x1e
+ push bp ; 55 ; 0xc2d1f vgabios.c:2055
+ mov bp, sp ; 89 e5 ; 0xc2d20
+ push bx ; 53 ; 0xc2d22
+ push cx ; 51 ; 0xc2d23
+ movzx cx, dl ; 0f b6 ca ; 0xc2d24 vgabios.c:2057
+ push cx ; 51 ; 0xc2d27
+ movzx cx, al ; 0f b6 c8 ; 0xc2d28
+ mov bx, strict word 00008h ; bb 08 00 ; 0xc2d2b
+ mov ax, 0556ch ; b8 6c 55 ; 0xc2d2e
+ mov dx, ds ; 8c da ; 0xc2d31
+ call 02c9ch ; e8 66 ff ; 0xc2d33
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d36 vgabios.c:2058
+ pop cx ; 59 ; 0xc2d39
+ pop bx ; 5b ; 0xc2d3a
+ pop bp ; 5d ; 0xc2d3b
+ retn ; c3 ; 0xc2d3c
+ ; disGetNextSymbol 0xc2d3d LB 0x157c -> off=0x0 cb=000000000000001e uValue=00000000000c2d3d 'biosfn_load_gfx_8_16_chars'
+biosfn_load_gfx_8_16_chars: ; 0xc2d3d LB 0x1e
+ push bp ; 55 ; 0xc2d3d vgabios.c:2059
+ mov bp, sp ; 89 e5 ; 0xc2d3e
+ push bx ; 53 ; 0xc2d40
+ push cx ; 51 ; 0xc2d41
+ movzx cx, dl ; 0f b6 ca ; 0xc2d42 vgabios.c:2061
+ push cx ; 51 ; 0xc2d45
+ movzx cx, al ; 0f b6 c8 ; 0xc2d46
+ mov bx, strict word 00010h ; bb 10 00 ; 0xc2d49
+ mov ax, 06b6ch ; b8 6c 6b ; 0xc2d4c
+ mov dx, ds ; 8c da ; 0xc2d4f
+ call 02c9ch ; e8 48 ff ; 0xc2d51
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2d54 vgabios.c:2062
+ pop cx ; 59 ; 0xc2d57
+ pop bx ; 5b ; 0xc2d58
+ pop bp ; 5d ; 0xc2d59
+ retn ; c3 ; 0xc2d5a
+ ; disGetNextSymbol 0xc2d5b LB 0x155e -> off=0x0 cb=0000000000000005 uValue=00000000000c2d5b 'biosfn_alternate_prtsc'
+biosfn_alternate_prtsc: ; 0xc2d5b LB 0x5
+ push bp ; 55 ; 0xc2d5b vgabios.c:2064
+ mov bp, sp ; 89 e5 ; 0xc2d5c
+ pop bp ; 5d ; 0xc2d5e vgabios.c:2069
+ retn ; c3 ; 0xc2d5f
+ ; disGetNextSymbol 0xc2d60 LB 0x1559 -> off=0x0 cb=0000000000000032 uValue=00000000000c2d60 'biosfn_set_txt_lines'
+biosfn_set_txt_lines: ; 0xc2d60 LB 0x32
+ push bx ; 53 ; 0xc2d60 vgabios.c:2071
+ push si ; 56 ; 0xc2d61
+ push bp ; 55 ; 0xc2d62
+ mov bp, sp ; 89 e5 ; 0xc2d63
+ mov bl, al ; 88 c3 ; 0xc2d65
+ mov si, 00089h ; be 89 00 ; 0xc2d67 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2d6a
+ mov es, ax ; 8e c0 ; 0xc2d6d
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2d6f
+ and AL, strict byte 06fh ; 24 6f ; 0xc2d72 vgabios.c:2077
+ cmp bl, 002h ; 80 fb 02 ; 0xc2d74 vgabios.c:2079
+ je short 02d81h ; 74 08 ; 0xc2d77
+ test bl, bl ; 84 db ; 0xc2d79
+ jne short 02d83h ; 75 06 ; 0xc2d7b
+ or AL, strict byte 080h ; 0c 80 ; 0xc2d7d vgabios.c:2082
+ jmp short 02d83h ; eb 02 ; 0xc2d7f vgabios.c:2083
+ or AL, strict byte 010h ; 0c 10 ; 0xc2d81 vgabios.c:2085
+ mov bx, 00089h ; bb 89 00 ; 0xc2d83 vgabios.c:52
+ mov si, strict word 00040h ; be 40 00 ; 0xc2d86
+ mov es, si ; 8e c6 ; 0xc2d89
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2d8b
+ pop bp ; 5d ; 0xc2d8e vgabios.c:2089
+ pop si ; 5e ; 0xc2d8f
+ pop bx ; 5b ; 0xc2d90
+ retn ; c3 ; 0xc2d91
+ ; disGetNextSymbol 0xc2d92 LB 0x1527 -> off=0x0 cb=0000000000000005 uValue=00000000000c2d92 'biosfn_switch_video_interface'
+biosfn_switch_video_interface: ; 0xc2d92 LB 0x5
+ push bp ; 55 ; 0xc2d92 vgabios.c:2092
+ mov bp, sp ; 89 e5 ; 0xc2d93
+ pop bp ; 5d ; 0xc2d95 vgabios.c:2097
+ retn ; c3 ; 0xc2d96
+ ; disGetNextSymbol 0xc2d97 LB 0x1522 -> off=0x0 cb=0000000000000005 uValue=00000000000c2d97 'biosfn_enable_video_refresh_control'
+biosfn_enable_video_refresh_control: ; 0xc2d97 LB 0x5
+ push bp ; 55 ; 0xc2d97 vgabios.c:2098
+ mov bp, sp ; 89 e5 ; 0xc2d98
+ pop bp ; 5d ; 0xc2d9a vgabios.c:2103
+ retn ; c3 ; 0xc2d9b
+ ; disGetNextSymbol 0xc2d9c LB 0x151d -> off=0x0 cb=0000000000000096 uValue=00000000000c2d9c 'biosfn_write_string'
+biosfn_write_string: ; 0xc2d9c LB 0x96
+ push bp ; 55 ; 0xc2d9c vgabios.c:2106
+ mov bp, sp ; 89 e5 ; 0xc2d9d
+ push si ; 56 ; 0xc2d9f
+ push di ; 57 ; 0xc2da0
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc2da1
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc2da4
+ mov byte [bp-006h], dl ; 88 56 fa ; 0xc2da7
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc2daa
+ mov si, cx ; 89 ce ; 0xc2dad
+ mov di, word [bp+00ah] ; 8b 7e 0a ; 0xc2daf
+ movzx ax, dl ; 0f b6 c2 ; 0xc2db2 vgabios.c:2113
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc2db5
+ lea dx, [bp-00ch] ; 8d 56 f4 ; 0xc2db8
+ call 00a93h ; e8 d5 dc ; 0xc2dbb
+ cmp byte [bp+004h], 0ffh ; 80 7e 04 ff ; 0xc2dbe vgabios.c:2116
+ jne short 02dd5h ; 75 11 ; 0xc2dc2
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2dc4 vgabios.c:2117
+ mov byte [bp+006h], al ; 88 46 06 ; 0xc2dc7
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2dca vgabios.c:2118
+ xor al, al ; 30 c0 ; 0xc2dcd
+ shr ax, 008h ; c1 e8 08 ; 0xc2dcf
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc2dd2
+ movzx dx, byte [bp+004h] ; 0f b6 56 04 ; 0xc2dd5 vgabios.c:2121
+ sal dx, 008h ; c1 e2 08 ; 0xc2dd9
+ movzx ax, byte [bp+006h] ; 0f b6 46 06 ; 0xc2ddc
+ add dx, ax ; 01 c2 ; 0xc2de0
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc2de2 vgabios.c:2122
+ call 01242h ; e8 59 e4 ; 0xc2de6
+ dec si ; 4e ; 0xc2de9 vgabios.c:2124
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2dea
+ je short 02e19h ; 74 2a ; 0xc2ded
+ mov bx, di ; 89 fb ; 0xc2def vgabios.c:2126
+ inc di ; 47 ; 0xc2df1
+ mov es, [bp+008h] ; 8e 46 08 ; 0xc2df2 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2df5
+ test byte [bp-008h], 002h ; f6 46 f8 02 ; 0xc2df8 vgabios.c:2127
+ je short 02e07h ; 74 09 ; 0xc2dfc
+ mov bx, di ; 89 fb ; 0xc2dfe vgabios.c:2128
+ inc di ; 47 ; 0xc2e00
+ mov ah, byte [es:bx] ; 26 8a 27 ; 0xc2e01 vgabios.c:47
+ mov byte [bp-00ah], ah ; 88 66 f6 ; 0xc2e04 vgabios.c:48
+ movzx bx, byte [bp-00ah] ; 0f b6 5e f6 ; 0xc2e07 vgabios.c:2130
+ movzx dx, byte [bp-006h] ; 0f b6 56 fa ; 0xc2e0b
+ xor ah, ah ; 30 e4 ; 0xc2e0f
+ mov cx, strict word 00003h ; b9 03 00 ; 0xc2e11
+ call 02812h ; e8 fb f9 ; 0xc2e14
+ jmp short 02de9h ; eb d0 ; 0xc2e17 vgabios.c:2131
+ test byte [bp-008h], 001h ; f6 46 f8 01 ; 0xc2e19 vgabios.c:2134
+ jne short 02e29h ; 75 0a ; 0xc2e1d
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc2e1f vgabios.c:2135
+ movzx ax, byte [bp-006h] ; 0f b6 46 fa ; 0xc2e22
+ call 01242h ; e8 19 e4 ; 0xc2e26
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2e29 vgabios.c:2136
+ pop di ; 5f ; 0xc2e2c
+ pop si ; 5e ; 0xc2e2d
+ pop bp ; 5d ; 0xc2e2e
+ retn 00008h ; c2 08 00 ; 0xc2e2f
+ ; disGetNextSymbol 0xc2e32 LB 0x1487 -> off=0x0 cb=00000000000001f2 uValue=00000000000c2e32 'biosfn_read_state_info'
+biosfn_read_state_info: ; 0xc2e32 LB 0x1f2
+ push bp ; 55 ; 0xc2e32 vgabios.c:2139
+ mov bp, sp ; 89 e5 ; 0xc2e33
+ push cx ; 51 ; 0xc2e35
+ push si ; 56 ; 0xc2e36
+ push di ; 57 ; 0xc2e37
+ push ax ; 50 ; 0xc2e38
+ push ax ; 50 ; 0xc2e39
+ push dx ; 52 ; 0xc2e3a
+ mov si, strict word 00049h ; be 49 00 ; 0xc2e3b vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2e3e
+ mov es, ax ; 8e c0 ; 0xc2e41
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2e43
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc2e46 vgabios.c:48
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc2e49 vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc2e4c
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc2e4f vgabios.c:58
+ mov ax, ds ; 8c d8 ; 0xc2e52 vgabios.c:2150
+ mov es, dx ; 8e c2 ; 0xc2e54 vgabios.c:72
+ mov word [es:bx], 05502h ; 26 c7 07 02 55 ; 0xc2e56
+ mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc2e5b
+ lea di, [bx+004h] ; 8d 7f 04 ; 0xc2e5f vgabios.c:2155
+ mov cx, strict word 0001eh ; b9 1e 00 ; 0xc2e62
+ mov si, strict word 00049h ; be 49 00 ; 0xc2e65
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc2e68
+ jcxz 02e73h ; e3 06 ; 0xc2e6b
+ push DS ; 1e ; 0xc2e6d
+ mov ds, dx ; 8e da ; 0xc2e6e
+ rep movsb ; f3 a4 ; 0xc2e70
+ pop DS ; 1f ; 0xc2e72
+ mov si, 00084h ; be 84 00 ; 0xc2e73 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2e76
+ mov es, ax ; 8e c0 ; 0xc2e79
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2e7b
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc2e7e vgabios.c:48
+ lea si, [bx+022h] ; 8d 77 22 ; 0xc2e80
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2e83 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc2e86
+ lea di, [bx+023h] ; 8d 7f 23 ; 0xc2e89 vgabios.c:2157
+ mov cx, strict word 00002h ; b9 02 00 ; 0xc2e8c
+ mov si, 00085h ; be 85 00 ; 0xc2e8f
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc2e92
+ jcxz 02e9dh ; e3 06 ; 0xc2e95
+ push DS ; 1e ; 0xc2e97
+ mov ds, dx ; 8e da ; 0xc2e98
+ rep movsb ; f3 a4 ; 0xc2e9a
+ pop DS ; 1f ; 0xc2e9c
+ mov si, 0008ah ; be 8a 00 ; 0xc2e9d vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2ea0
+ mov es, ax ; 8e c0 ; 0xc2ea3
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2ea5
+ lea si, [bx+025h] ; 8d 77 25 ; 0xc2ea8 vgabios.c:48
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2eab vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc2eae
+ lea si, [bx+026h] ; 8d 77 26 ; 0xc2eb1 vgabios.c:2160
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc2eb4 vgabios.c:52
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc2eb8 vgabios.c:2161
+ mov word [es:si], strict word 00010h ; 26 c7 04 10 00 ; 0xc2ebb vgabios.c:62
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc2ec0 vgabios.c:2162
+ mov byte [es:si], 008h ; 26 c6 04 08 ; 0xc2ec3 vgabios.c:52
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc2ec7 vgabios.c:2163
+ mov byte [es:si], 002h ; 26 c6 04 02 ; 0xc2eca vgabios.c:52
+ lea si, [bx+02bh] ; 8d 77 2b ; 0xc2ece vgabios.c:2164
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc2ed1 vgabios.c:52
+ lea si, [bx+02ch] ; 8d 77 2c ; 0xc2ed5 vgabios.c:2165
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc2ed8 vgabios.c:52
+ lea si, [bx+02dh] ; 8d 77 2d ; 0xc2edc vgabios.c:2166
+ mov byte [es:si], 021h ; 26 c6 04 21 ; 0xc2edf vgabios.c:52
+ lea si, [bx+031h] ; 8d 77 31 ; 0xc2ee3 vgabios.c:2167
+ mov byte [es:si], 003h ; 26 c6 04 03 ; 0xc2ee6 vgabios.c:52
+ lea si, [bx+032h] ; 8d 77 32 ; 0xc2eea vgabios.c:2168
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc2eed vgabios.c:52
+ mov si, 00089h ; be 89 00 ; 0xc2ef1 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2ef4
+ mov es, ax ; 8e c0 ; 0xc2ef7
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2ef9
+ mov ah, al ; 88 c4 ; 0xc2efc vgabios.c:2173
+ and ah, 080h ; 80 e4 80 ; 0xc2efe
+ movzx si, ah ; 0f b6 f4 ; 0xc2f01
+ sar si, 006h ; c1 fe 06 ; 0xc2f04
+ and AL, strict byte 010h ; 24 10 ; 0xc2f07
+ xor ah, ah ; 30 e4 ; 0xc2f09
+ sar ax, 004h ; c1 f8 04 ; 0xc2f0b
+ or ax, si ; 09 f0 ; 0xc2f0e
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc2f10 vgabios.c:2174
+ je short 02f26h ; 74 11 ; 0xc2f13
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc2f15
+ je short 02f22h ; 74 08 ; 0xc2f18
+ test ax, ax ; 85 c0 ; 0xc2f1a
+ jne short 02f26h ; 75 08 ; 0xc2f1c
+ mov AL, strict byte 001h ; b0 01 ; 0xc2f1e vgabios.c:2175
+ jmp short 02f28h ; eb 06 ; 0xc2f20
+ mov AL, strict byte 002h ; b0 02 ; 0xc2f22 vgabios.c:2176
+ jmp short 02f28h ; eb 02 ; 0xc2f24
+ xor al, al ; 30 c0 ; 0xc2f26 vgabios.c:2178
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc2f28 vgabios.c:2180
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2f2b vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc2f2e
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2f31 vgabios.c:2183
+ cmp AL, strict byte 00eh ; 3c 0e ; 0xc2f34
+ jc short 02f57h ; 72 1f ; 0xc2f36
+ cmp AL, strict byte 012h ; 3c 12 ; 0xc2f38
+ jnbe short 02f57h ; 77 1b ; 0xc2f3a
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc2f3c vgabios.c:2184
+ test ax, ax ; 85 c0 ; 0xc2f3f
+ je short 02f99h ; 74 56 ; 0xc2f41
+ mov si, ax ; 89 c6 ; 0xc2f43 vgabios.c:2185
+ shr si, 002h ; c1 ee 02 ; 0xc2f45
+ mov ax, 04000h ; b8 00 40 ; 0xc2f48
+ xor dx, dx ; 31 d2 ; 0xc2f4b
+ div si ; f7 f6 ; 0xc2f4d
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc2f4f
+ mov byte [es:si], al ; 26 88 04 ; 0xc2f52 vgabios.c:52
+ jmp short 02f99h ; eb 42 ; 0xc2f55 vgabios.c:2186
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc2f57
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2f5a
+ cmp AL, strict byte 013h ; 3c 13 ; 0xc2f5d
+ jne short 02f72h ; 75 11 ; 0xc2f5f
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2f61 vgabios.c:52
+ mov byte [es:si], 001h ; 26 c6 04 01 ; 0xc2f64
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc2f68 vgabios.c:2188
+ mov word [es:si], 00100h ; 26 c7 04 00 01 ; 0xc2f6b vgabios.c:62
+ jmp short 02f99h ; eb 27 ; 0xc2f70 vgabios.c:2189
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc2f72
+ jc short 02f99h ; 72 23 ; 0xc2f74
+ cmp AL, strict byte 006h ; 3c 06 ; 0xc2f76
+ jnbe short 02f99h ; 77 1f ; 0xc2f78
+ cmp word [bp-00ah], strict byte 00000h ; 83 7e f6 00 ; 0xc2f7a vgabios.c:2191
+ je short 02f8eh ; 74 0e ; 0xc2f7e
+ mov ax, 04000h ; b8 00 40 ; 0xc2f80 vgabios.c:2192
+ xor dx, dx ; 31 d2 ; 0xc2f83
+ div word [bp-00ah] ; f7 76 f6 ; 0xc2f85
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2f88 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc2f8b
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc2f8e vgabios.c:2193
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2f91 vgabios.c:62
+ mov word [es:si], strict word 00004h ; 26 c7 04 04 00 ; 0xc2f94
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2f99 vgabios.c:2195
+ cmp AL, strict byte 006h ; 3c 06 ; 0xc2f9c
+ je short 02fa4h ; 74 04 ; 0xc2f9e
+ cmp AL, strict byte 011h ; 3c 11 ; 0xc2fa0
+ jne short 02fafh ; 75 0b ; 0xc2fa2
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc2fa4 vgabios.c:2196
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2fa7 vgabios.c:62
+ mov word [es:si], strict word 00002h ; 26 c7 04 02 00 ; 0xc2faa
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2faf vgabios.c:2198
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc2fb2
+ jc short 0300dh ; 72 57 ; 0xc2fb4
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc2fb6
+ je short 0300dh ; 74 53 ; 0xc2fb8
+ lea si, [bx+02dh] ; 8d 77 2d ; 0xc2fba vgabios.c:2199
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc2fbd vgabios.c:52
+ mov byte [es:si], 001h ; 26 c6 04 01 ; 0xc2fc0
+ mov si, 00084h ; be 84 00 ; 0xc2fc4 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2fc7
+ mov es, ax ; 8e c0 ; 0xc2fca
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2fcc
+ movzx di, al ; 0f b6 f8 ; 0xc2fcf vgabios.c:48
+ inc di ; 47 ; 0xc2fd2
+ mov si, 00085h ; be 85 00 ; 0xc2fd3 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc2fd6
+ xor ah, ah ; 30 e4 ; 0xc2fd9 vgabios.c:48
+ imul ax, di ; 0f af c7 ; 0xc2fdb
+ cmp ax, 0015eh ; 3d 5e 01 ; 0xc2fde vgabios.c:2201
+ jc short 02ff1h ; 72 0e ; 0xc2fe1
+ jbe short 02ffah ; 76 15 ; 0xc2fe3
+ cmp ax, 001e0h ; 3d e0 01 ; 0xc2fe5
+ je short 03002h ; 74 18 ; 0xc2fe8
+ cmp ax, 00190h ; 3d 90 01 ; 0xc2fea
+ je short 02ffeh ; 74 0f ; 0xc2fed
+ jmp short 03002h ; eb 11 ; 0xc2fef
+ cmp ax, 000c8h ; 3d c8 00 ; 0xc2ff1
+ jne short 03002h ; 75 0c ; 0xc2ff4
+ xor al, al ; 30 c0 ; 0xc2ff6 vgabios.c:2202
+ jmp short 03004h ; eb 0a ; 0xc2ff8
+ mov AL, strict byte 001h ; b0 01 ; 0xc2ffa vgabios.c:2203
+ jmp short 03004h ; eb 06 ; 0xc2ffc
+ mov AL, strict byte 002h ; b0 02 ; 0xc2ffe vgabios.c:2204
+ jmp short 03004h ; eb 02 ; 0xc3000
+ mov AL, strict byte 003h ; b0 03 ; 0xc3002 vgabios.c:2206
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc3004 vgabios.c:2208
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc3007 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc300a
+ lea di, [bx+033h] ; 8d 7f 33 ; 0xc300d vgabios.c:2211
+ mov cx, strict word 0000dh ; b9 0d 00 ; 0xc3010
+ xor ax, ax ; 31 c0 ; 0xc3013
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc3015
+ jcxz 0301ch ; e3 02 ; 0xc3018
+ rep stosb ; f3 aa ; 0xc301a
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc301c vgabios.c:2212
+ pop di ; 5f ; 0xc301f
+ pop si ; 5e ; 0xc3020
+ pop cx ; 59 ; 0xc3021
+ pop bp ; 5d ; 0xc3022
+ retn ; c3 ; 0xc3023
+ ; disGetNextSymbol 0xc3024 LB 0x1295 -> off=0x0 cb=0000000000000023 uValue=00000000000c3024 'biosfn_read_video_state_size2'
+biosfn_read_video_state_size2: ; 0xc3024 LB 0x23
+ push dx ; 52 ; 0xc3024 vgabios.c:2215
+ push bp ; 55 ; 0xc3025
+ mov bp, sp ; 89 e5 ; 0xc3026
+ mov dx, ax ; 89 c2 ; 0xc3028
+ xor ax, ax ; 31 c0 ; 0xc302a vgabios.c:2219
+ test dl, 001h ; f6 c2 01 ; 0xc302c vgabios.c:2220
+ je short 03034h ; 74 03 ; 0xc302f
+ mov ax, strict word 00046h ; b8 46 00 ; 0xc3031 vgabios.c:2221
+ test dl, 002h ; f6 c2 02 ; 0xc3034 vgabios.c:2223
+ je short 0303ch ; 74 03 ; 0xc3037
+ add ax, strict word 0002ah ; 05 2a 00 ; 0xc3039 vgabios.c:2224
+ test dl, 004h ; f6 c2 04 ; 0xc303c vgabios.c:2226
+ je short 03044h ; 74 03 ; 0xc303f
+ add ax, 00304h ; 05 04 03 ; 0xc3041 vgabios.c:2227
+ pop bp ; 5d ; 0xc3044 vgabios.c:2230
+ pop dx ; 5a ; 0xc3045
+ retn ; c3 ; 0xc3046
+ ; disGetNextSymbol 0xc3047 LB 0x1272 -> off=0x0 cb=0000000000000018 uValue=00000000000c3047 'vga_get_video_state_size'
+vga_get_video_state_size: ; 0xc3047 LB 0x18
+ push bp ; 55 ; 0xc3047 vgabios.c:2232
+ mov bp, sp ; 89 e5 ; 0xc3048
+ push bx ; 53 ; 0xc304a
+ mov bx, dx ; 89 d3 ; 0xc304b
+ call 03024h ; e8 d4 ff ; 0xc304d vgabios.c:2235
+ add ax, strict word 0003fh ; 05 3f 00 ; 0xc3050
+ shr ax, 006h ; c1 e8 06 ; 0xc3053
+ mov word [ss:bx], ax ; 36 89 07 ; 0xc3056
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3059 vgabios.c:2236
+ pop bx ; 5b ; 0xc305c
+ pop bp ; 5d ; 0xc305d
+ retn ; c3 ; 0xc305e
+ ; disGetNextSymbol 0xc305f LB 0x125a -> off=0x0 cb=00000000000002d6 uValue=00000000000c305f 'biosfn_save_video_state'
+biosfn_save_video_state: ; 0xc305f LB 0x2d6
+ push bp ; 55 ; 0xc305f vgabios.c:2238
+ mov bp, sp ; 89 e5 ; 0xc3060
+ push cx ; 51 ; 0xc3062
+ push si ; 56 ; 0xc3063
+ push di ; 57 ; 0xc3064
+ push ax ; 50 ; 0xc3065
+ push ax ; 50 ; 0xc3066
+ push ax ; 50 ; 0xc3067
+ mov cx, dx ; 89 d1 ; 0xc3068
+ mov si, strict word 00063h ; be 63 00 ; 0xc306a vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc306d
+ mov es, ax ; 8e c0 ; 0xc3070
+ mov di, word [es:si] ; 26 8b 3c ; 0xc3072
+ mov si, di ; 89 fe ; 0xc3075 vgabios.c:58
+ test byte [bp-00ch], 001h ; f6 46 f4 01 ; 0xc3077 vgabios.c:2243
+ je near 03192h ; 0f 84 13 01 ; 0xc307b
+ mov dx, 003c4h ; ba c4 03 ; 0xc307f vgabios.c:2244
+ in AL, DX ; ec ; 0xc3082
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3083
+ mov es, cx ; 8e c1 ; 0xc3085 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3087
+ inc bx ; 43 ; 0xc308a vgabios.c:2244
+ mov dx, di ; 89 fa ; 0xc308b
+ in AL, DX ; ec ; 0xc308d
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc308e
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3090 vgabios.c:52
+ inc bx ; 43 ; 0xc3093 vgabios.c:2245
+ mov dx, 003ceh ; ba ce 03 ; 0xc3094
+ in AL, DX ; ec ; 0xc3097
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3098
+ mov byte [es:bx], al ; 26 88 07 ; 0xc309a vgabios.c:52
+ inc bx ; 43 ; 0xc309d vgabios.c:2246
+ mov dx, 003dah ; ba da 03 ; 0xc309e
+ in AL, DX ; ec ; 0xc30a1
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc30a2
+ mov dx, 003c0h ; ba c0 03 ; 0xc30a4 vgabios.c:2248
+ in AL, DX ; ec ; 0xc30a7
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc30a8
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc30aa
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc30ad vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc30b0
+ inc bx ; 43 ; 0xc30b3 vgabios.c:2249
+ mov dx, 003cah ; ba ca 03 ; 0xc30b4
+ in AL, DX ; ec ; 0xc30b7
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc30b8
+ mov byte [es:bx], al ; 26 88 07 ; 0xc30ba vgabios.c:52
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc30bd vgabios.c:2252
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc30c0
+ add bx, ax ; 01 c3 ; 0xc30c3 vgabios.c:2250
+ jmp short 030cdh ; eb 06 ; 0xc30c5
+ cmp word [bp-008h], strict byte 00004h ; 83 7e f8 04 ; 0xc30c7
+ jnbe short 030e5h ; 77 18 ; 0xc30cb
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc30cd vgabios.c:2253
+ mov dx, 003c4h ; ba c4 03 ; 0xc30d0
+ out DX, AL ; ee ; 0xc30d3
+ mov dx, 003c5h ; ba c5 03 ; 0xc30d4 vgabios.c:2254
+ in AL, DX ; ec ; 0xc30d7
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc30d8
+ mov es, cx ; 8e c1 ; 0xc30da vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc30dc
+ inc bx ; 43 ; 0xc30df vgabios.c:2254
+ inc word [bp-008h] ; ff 46 f8 ; 0xc30e0 vgabios.c:2255
+ jmp short 030c7h ; eb e2 ; 0xc30e3
+ xor al, al ; 30 c0 ; 0xc30e5 vgabios.c:2256
+ mov dx, 003c4h ; ba c4 03 ; 0xc30e7
+ out DX, AL ; ee ; 0xc30ea
+ mov dx, 003c5h ; ba c5 03 ; 0xc30eb vgabios.c:2257
+ in AL, DX ; ec ; 0xc30ee
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc30ef
+ mov es, cx ; 8e c1 ; 0xc30f1 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc30f3
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc30f6 vgabios.c:2259
+ inc bx ; 43 ; 0xc30fb vgabios.c:2257
+ jmp short 03104h ; eb 06 ; 0xc30fc
+ cmp word [bp-008h], strict byte 00018h ; 83 7e f8 18 ; 0xc30fe
+ jnbe short 0311bh ; 77 17 ; 0xc3102
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3104 vgabios.c:2260
+ mov dx, si ; 89 f2 ; 0xc3107
+ out DX, AL ; ee ; 0xc3109
+ lea dx, [si+001h] ; 8d 54 01 ; 0xc310a vgabios.c:2261
+ in AL, DX ; ec ; 0xc310d
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc310e
+ mov es, cx ; 8e c1 ; 0xc3110 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3112
+ inc bx ; 43 ; 0xc3115 vgabios.c:2261
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3116 vgabios.c:2262
+ jmp short 030feh ; eb e3 ; 0xc3119
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc311b vgabios.c:2264
+ jmp short 03128h ; eb 06 ; 0xc3120
+ cmp word [bp-008h], strict byte 00013h ; 83 7e f8 13 ; 0xc3122
+ jnbe short 0314ch ; 77 24 ; 0xc3126
+ mov dx, 003dah ; ba da 03 ; 0xc3128 vgabios.c:2265
+ in AL, DX ; ec ; 0xc312b
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc312c
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc312e vgabios.c:2266
+ and ax, strict word 00020h ; 25 20 00 ; 0xc3131
+ or ax, word [bp-008h] ; 0b 46 f8 ; 0xc3134
+ mov dx, 003c0h ; ba c0 03 ; 0xc3137
+ out DX, AL ; ee ; 0xc313a
+ mov dx, 003c1h ; ba c1 03 ; 0xc313b vgabios.c:2267
+ in AL, DX ; ec ; 0xc313e
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc313f
+ mov es, cx ; 8e c1 ; 0xc3141 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3143
+ inc bx ; 43 ; 0xc3146 vgabios.c:2267
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3147 vgabios.c:2268
+ jmp short 03122h ; eb d6 ; 0xc314a
+ mov dx, 003dah ; ba da 03 ; 0xc314c vgabios.c:2269
+ in AL, DX ; ec ; 0xc314f
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3150
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc3152 vgabios.c:2271
+ jmp short 0315fh ; eb 06 ; 0xc3157
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc3159
+ jnbe short 03177h ; 77 18 ; 0xc315d
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc315f vgabios.c:2272
+ mov dx, 003ceh ; ba ce 03 ; 0xc3162
+ out DX, AL ; ee ; 0xc3165
+ mov dx, 003cfh ; ba cf 03 ; 0xc3166 vgabios.c:2273
+ in AL, DX ; ec ; 0xc3169
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc316a
+ mov es, cx ; 8e c1 ; 0xc316c vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc316e
+ inc bx ; 43 ; 0xc3171 vgabios.c:2273
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3172 vgabios.c:2274
+ jmp short 03159h ; eb e2 ; 0xc3175
+ mov es, cx ; 8e c1 ; 0xc3177 vgabios.c:62
+ mov word [es:bx], si ; 26 89 37 ; 0xc3179
+ inc bx ; 43 ; 0xc317c vgabios.c:2276
+ inc bx ; 43 ; 0xc317d
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc317e vgabios.c:52
+ inc bx ; 43 ; 0xc3182 vgabios.c:2279
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3183 vgabios.c:52
+ inc bx ; 43 ; 0xc3187 vgabios.c:2280
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3188 vgabios.c:52
+ inc bx ; 43 ; 0xc318c vgabios.c:2281
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc318d vgabios.c:52
+ inc bx ; 43 ; 0xc3191 vgabios.c:2282
+ test byte [bp-00ch], 002h ; f6 46 f4 02 ; 0xc3192 vgabios.c:2284
+ je near 032d9h ; 0f 84 3f 01 ; 0xc3196
+ mov si, strict word 00049h ; be 49 00 ; 0xc319a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc319d
+ mov es, ax ; 8e c0 ; 0xc31a0
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc31a2
+ mov es, cx ; 8e c1 ; 0xc31a5 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc31a7
+ inc bx ; 43 ; 0xc31aa vgabios.c:2285
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc31ab vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc31ae
+ mov es, ax ; 8e c0 ; 0xc31b1
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc31b3
+ mov es, cx ; 8e c1 ; 0xc31b6 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc31b8
+ inc bx ; 43 ; 0xc31bb vgabios.c:2286
+ inc bx ; 43 ; 0xc31bc
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc31bd vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc31c0
+ mov es, ax ; 8e c0 ; 0xc31c3
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc31c5
+ mov es, cx ; 8e c1 ; 0xc31c8 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc31ca
+ inc bx ; 43 ; 0xc31cd vgabios.c:2287
+ inc bx ; 43 ; 0xc31ce
+ mov si, strict word 00063h ; be 63 00 ; 0xc31cf vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc31d2
+ mov es, ax ; 8e c0 ; 0xc31d5
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc31d7
+ mov es, cx ; 8e c1 ; 0xc31da vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc31dc
+ inc bx ; 43 ; 0xc31df vgabios.c:2288
+ inc bx ; 43 ; 0xc31e0
+ mov si, 00084h ; be 84 00 ; 0xc31e1 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc31e4
+ mov es, ax ; 8e c0 ; 0xc31e7
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc31e9
+ mov es, cx ; 8e c1 ; 0xc31ec vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc31ee
+ inc bx ; 43 ; 0xc31f1 vgabios.c:2289
+ mov si, 00085h ; be 85 00 ; 0xc31f2 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc31f5
+ mov es, ax ; 8e c0 ; 0xc31f8
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc31fa
+ mov es, cx ; 8e c1 ; 0xc31fd vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc31ff
+ inc bx ; 43 ; 0xc3202 vgabios.c:2290
+ inc bx ; 43 ; 0xc3203
+ mov si, 00087h ; be 87 00 ; 0xc3204 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3207
+ mov es, ax ; 8e c0 ; 0xc320a
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc320c
+ mov es, cx ; 8e c1 ; 0xc320f vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3211
+ inc bx ; 43 ; 0xc3214 vgabios.c:2291
+ mov si, 00088h ; be 88 00 ; 0xc3215 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3218
+ mov es, ax ; 8e c0 ; 0xc321b
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc321d
+ mov es, cx ; 8e c1 ; 0xc3220 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3222
+ inc bx ; 43 ; 0xc3225 vgabios.c:2292
+ mov si, 00089h ; be 89 00 ; 0xc3226 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3229
+ mov es, ax ; 8e c0 ; 0xc322c
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc322e
+ mov es, cx ; 8e c1 ; 0xc3231 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3233
+ inc bx ; 43 ; 0xc3236 vgabios.c:2293
+ mov si, strict word 00060h ; be 60 00 ; 0xc3237 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc323a
+ mov es, ax ; 8e c0 ; 0xc323d
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc323f
+ mov es, cx ; 8e c1 ; 0xc3242 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3244
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc3247 vgabios.c:2295
+ inc bx ; 43 ; 0xc324c vgabios.c:2294
+ inc bx ; 43 ; 0xc324d
+ jmp short 03256h ; eb 06 ; 0xc324e
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc3250
+ jnc short 03272h ; 73 1c ; 0xc3254
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc3256 vgabios.c:2296
+ add si, si ; 01 f6 ; 0xc3259
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc325b
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc325e vgabios.c:57
+ mov es, ax ; 8e c0 ; 0xc3261
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3263
+ mov es, cx ; 8e c1 ; 0xc3266 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3268
+ inc bx ; 43 ; 0xc326b vgabios.c:2297
+ inc bx ; 43 ; 0xc326c
+ inc word [bp-008h] ; ff 46 f8 ; 0xc326d vgabios.c:2298
+ jmp short 03250h ; eb de ; 0xc3270
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc3272 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3275
+ mov es, ax ; 8e c0 ; 0xc3278
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc327a
+ mov es, cx ; 8e c1 ; 0xc327d vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc327f
+ inc bx ; 43 ; 0xc3282 vgabios.c:2299
+ inc bx ; 43 ; 0xc3283
+ mov si, strict word 00062h ; be 62 00 ; 0xc3284 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3287
+ mov es, ax ; 8e c0 ; 0xc328a
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc328c
+ mov es, cx ; 8e c1 ; 0xc328f vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3291
+ inc bx ; 43 ; 0xc3294 vgabios.c:2300
+ mov si, strict word 0007ch ; be 7c 00 ; 0xc3295 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc3298
+ mov es, ax ; 8e c0 ; 0xc329a
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc329c
+ mov es, cx ; 8e c1 ; 0xc329f vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc32a1
+ inc bx ; 43 ; 0xc32a4 vgabios.c:2302
+ inc bx ; 43 ; 0xc32a5
+ mov si, strict word 0007eh ; be 7e 00 ; 0xc32a6 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc32a9
+ mov es, ax ; 8e c0 ; 0xc32ab
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc32ad
+ mov es, cx ; 8e c1 ; 0xc32b0 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc32b2
+ inc bx ; 43 ; 0xc32b5 vgabios.c:2303
+ inc bx ; 43 ; 0xc32b6
+ mov si, 0010ch ; be 0c 01 ; 0xc32b7 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc32ba
+ mov es, ax ; 8e c0 ; 0xc32bc
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc32be
+ mov es, cx ; 8e c1 ; 0xc32c1 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc32c3
+ inc bx ; 43 ; 0xc32c6 vgabios.c:2304
+ inc bx ; 43 ; 0xc32c7
+ mov si, 0010eh ; be 0e 01 ; 0xc32c8 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc32cb
+ mov es, ax ; 8e c0 ; 0xc32cd
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc32cf
+ mov es, cx ; 8e c1 ; 0xc32d2 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc32d4
+ inc bx ; 43 ; 0xc32d7 vgabios.c:2305
+ inc bx ; 43 ; 0xc32d8
+ test byte [bp-00ch], 004h ; f6 46 f4 04 ; 0xc32d9 vgabios.c:2307
+ je short 0332bh ; 74 4c ; 0xc32dd
+ mov dx, 003c7h ; ba c7 03 ; 0xc32df vgabios.c:2309
+ in AL, DX ; ec ; 0xc32e2
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32e3
+ mov es, cx ; 8e c1 ; 0xc32e5 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32e7
+ inc bx ; 43 ; 0xc32ea vgabios.c:2309
+ mov dx, 003c8h ; ba c8 03 ; 0xc32eb
+ in AL, DX ; ec ; 0xc32ee
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32ef
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32f1 vgabios.c:52
+ inc bx ; 43 ; 0xc32f4 vgabios.c:2310
+ mov dx, 003c6h ; ba c6 03 ; 0xc32f5
+ in AL, DX ; ec ; 0xc32f8
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc32f9
+ mov byte [es:bx], al ; 26 88 07 ; 0xc32fb vgabios.c:52
+ inc bx ; 43 ; 0xc32fe vgabios.c:2311
+ xor al, al ; 30 c0 ; 0xc32ff
+ mov dx, 003c8h ; ba c8 03 ; 0xc3301
+ out DX, AL ; ee ; 0xc3304
+ xor ah, ah ; 30 e4 ; 0xc3305 vgabios.c:2314
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3307
+ jmp short 03313h ; eb 07 ; 0xc330a
+ cmp word [bp-008h], 00300h ; 81 7e f8 00 03 ; 0xc330c
+ jnc short 03324h ; 73 11 ; 0xc3311
+ mov dx, 003c9h ; ba c9 03 ; 0xc3313 vgabios.c:2315
+ in AL, DX ; ec ; 0xc3316
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3317
+ mov es, cx ; 8e c1 ; 0xc3319 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc331b
+ inc bx ; 43 ; 0xc331e vgabios.c:2315
+ inc word [bp-008h] ; ff 46 f8 ; 0xc331f vgabios.c:2316
+ jmp short 0330ch ; eb e8 ; 0xc3322
+ mov es, cx ; 8e c1 ; 0xc3324 vgabios.c:52
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3326
+ inc bx ; 43 ; 0xc332a vgabios.c:2317
+ mov ax, bx ; 89 d8 ; 0xc332b vgabios.c:2320
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc332d
+ pop di ; 5f ; 0xc3330
+ pop si ; 5e ; 0xc3331
+ pop cx ; 59 ; 0xc3332
+ pop bp ; 5d ; 0xc3333
+ retn ; c3 ; 0xc3334
+ ; disGetNextSymbol 0xc3335 LB 0xf84 -> off=0x0 cb=00000000000002b8 uValue=00000000000c3335 'biosfn_restore_video_state'
+biosfn_restore_video_state: ; 0xc3335 LB 0x2b8
+ push bp ; 55 ; 0xc3335 vgabios.c:2322
+ mov bp, sp ; 89 e5 ; 0xc3336
+ push cx ; 51 ; 0xc3338
+ push si ; 56 ; 0xc3339
+ push di ; 57 ; 0xc333a
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc333b
+ push ax ; 50 ; 0xc333e
+ mov cx, dx ; 89 d1 ; 0xc333f
+ test byte [bp-010h], 001h ; f6 46 f0 01 ; 0xc3341 vgabios.c:2326
+ je near 0347dh ; 0f 84 34 01 ; 0xc3345
+ mov dx, 003dah ; ba da 03 ; 0xc3349 vgabios.c:2328
+ in AL, DX ; ec ; 0xc334c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc334d
+ lea si, [bx+040h] ; 8d 77 40 ; 0xc334f vgabios.c:2330
+ mov es, cx ; 8e c1 ; 0xc3352 vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3354
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc3357 vgabios.c:58
+ mov si, bx ; 89 de ; 0xc335a vgabios.c:2331
+ mov word [bp-00eh], strict word 00001h ; c7 46 f2 01 00 ; 0xc335c vgabios.c:2334
+ add bx, strict byte 00005h ; 83 c3 05 ; 0xc3361 vgabios.c:2332
+ jmp short 0336ch ; eb 06 ; 0xc3364
+ cmp word [bp-00eh], strict byte 00004h ; 83 7e f2 04 ; 0xc3366
+ jnbe short 03382h ; 77 16 ; 0xc336a
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc336c vgabios.c:2335
+ mov dx, 003c4h ; ba c4 03 ; 0xc336f
+ out DX, AL ; ee ; 0xc3372
+ mov es, cx ; 8e c1 ; 0xc3373 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3375
+ mov dx, 003c5h ; ba c5 03 ; 0xc3378 vgabios.c:48
+ out DX, AL ; ee ; 0xc337b
+ inc bx ; 43 ; 0xc337c vgabios.c:2336
+ inc word [bp-00eh] ; ff 46 f2 ; 0xc337d vgabios.c:2337
+ jmp short 03366h ; eb e4 ; 0xc3380
+ xor al, al ; 30 c0 ; 0xc3382 vgabios.c:2338
+ mov dx, 003c4h ; ba c4 03 ; 0xc3384
+ out DX, AL ; ee ; 0xc3387
+ mov es, cx ; 8e c1 ; 0xc3388 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc338a
+ mov dx, 003c5h ; ba c5 03 ; 0xc338d vgabios.c:48
+ out DX, AL ; ee ; 0xc3390
+ inc bx ; 43 ; 0xc3391 vgabios.c:2339
+ mov dx, 003cch ; ba cc 03 ; 0xc3392
+ in AL, DX ; ec ; 0xc3395
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3396
+ and AL, strict byte 0feh ; 24 fe ; 0xc3398
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc339a
+ cmp word [bp-00ah], 003d4h ; 81 7e f6 d4 03 ; 0xc339d vgabios.c:2343
+ jne short 033a8h ; 75 04 ; 0xc33a2
+ or byte [bp-008h], 001h ; 80 4e f8 01 ; 0xc33a4 vgabios.c:2344
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc33a8 vgabios.c:2345
+ mov dx, 003c2h ; ba c2 03 ; 0xc33ab
+ out DX, AL ; ee ; 0xc33ae
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc33af vgabios.c:2348
+ mov dx, word [bp-00ah] ; 8b 56 f6 ; 0xc33b2
+ out DX, ax ; ef ; 0xc33b5
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc33b6 vgabios.c:2350
+ jmp short 033c3h ; eb 06 ; 0xc33bb
+ cmp word [bp-00eh], strict byte 00018h ; 83 7e f2 18 ; 0xc33bd
+ jnbe short 033ddh ; 77 1a ; 0xc33c1
+ cmp word [bp-00eh], strict byte 00011h ; 83 7e f2 11 ; 0xc33c3 vgabios.c:2351
+ je short 033d7h ; 74 0e ; 0xc33c7
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc33c9 vgabios.c:2352
+ mov dx, word [bp-00ah] ; 8b 56 f6 ; 0xc33cc
+ out DX, AL ; ee ; 0xc33cf
+ mov es, cx ; 8e c1 ; 0xc33d0 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc33d2
+ inc dx ; 42 ; 0xc33d5 vgabios.c:48
+ out DX, AL ; ee ; 0xc33d6
+ inc bx ; 43 ; 0xc33d7 vgabios.c:2355
+ inc word [bp-00eh] ; ff 46 f2 ; 0xc33d8 vgabios.c:2356
+ jmp short 033bdh ; eb e0 ; 0xc33db
+ mov AL, strict byte 011h ; b0 11 ; 0xc33dd vgabios.c:2358
+ mov dx, word [bp-00ah] ; 8b 56 f6 ; 0xc33df
+ out DX, AL ; ee ; 0xc33e2
+ lea di, [word bx-00007h] ; 8d bf f9 ff ; 0xc33e3 vgabios.c:2359
+ mov es, cx ; 8e c1 ; 0xc33e7 vgabios.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc33e9
+ inc dx ; 42 ; 0xc33ec vgabios.c:48
+ out DX, AL ; ee ; 0xc33ed
+ lea di, [si+003h] ; 8d 7c 03 ; 0xc33ee vgabios.c:2362
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc33f1 vgabios.c:47
+ xor ah, ah ; 30 e4 ; 0xc33f4 vgabios.c:48
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc33f6
+ mov dx, 003dah ; ba da 03 ; 0xc33f9 vgabios.c:2363
+ in AL, DX ; ec ; 0xc33fc
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc33fd
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc33ff vgabios.c:2364
+ jmp short 0340ch ; eb 06 ; 0xc3404
+ cmp word [bp-00eh], strict byte 00013h ; 83 7e f2 13 ; 0xc3406
+ jnbe short 03425h ; 77 19 ; 0xc340a
+ mov ax, word [bp-00ch] ; 8b 46 f4 ; 0xc340c vgabios.c:2365
+ and ax, strict word 00020h ; 25 20 00 ; 0xc340f
+ or ax, word [bp-00eh] ; 0b 46 f2 ; 0xc3412
+ mov dx, 003c0h ; ba c0 03 ; 0xc3415
+ out DX, AL ; ee ; 0xc3418
+ mov es, cx ; 8e c1 ; 0xc3419 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc341b
+ out DX, AL ; ee ; 0xc341e vgabios.c:48
+ inc bx ; 43 ; 0xc341f vgabios.c:2366
+ inc word [bp-00eh] ; ff 46 f2 ; 0xc3420 vgabios.c:2367
+ jmp short 03406h ; eb e1 ; 0xc3423
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc3425 vgabios.c:2368
+ mov dx, 003c0h ; ba c0 03 ; 0xc3428
+ out DX, AL ; ee ; 0xc342b
+ mov dx, 003dah ; ba da 03 ; 0xc342c vgabios.c:2369
+ in AL, DX ; ec ; 0xc342f
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3430
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc3432 vgabios.c:2371
+ jmp short 0343fh ; eb 06 ; 0xc3437
+ cmp word [bp-00eh], strict byte 00008h ; 83 7e f2 08 ; 0xc3439
+ jnbe short 03455h ; 77 16 ; 0xc343d
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc343f vgabios.c:2372
+ mov dx, 003ceh ; ba ce 03 ; 0xc3442
+ out DX, AL ; ee ; 0xc3445
+ mov es, cx ; 8e c1 ; 0xc3446 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3448
+ mov dx, 003cfh ; ba cf 03 ; 0xc344b vgabios.c:48
+ out DX, AL ; ee ; 0xc344e
+ inc bx ; 43 ; 0xc344f vgabios.c:2373
+ inc word [bp-00eh] ; ff 46 f2 ; 0xc3450 vgabios.c:2374
+ jmp short 03439h ; eb e4 ; 0xc3453
+ add bx, strict byte 00006h ; 83 c3 06 ; 0xc3455 vgabios.c:2375
+ mov es, cx ; 8e c1 ; 0xc3458 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc345a
+ mov dx, 003c4h ; ba c4 03 ; 0xc345d vgabios.c:48
+ out DX, AL ; ee ; 0xc3460
+ inc si ; 46 ; 0xc3461 vgabios.c:2378
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3462 vgabios.c:47
+ mov dx, word [bp-00ah] ; 8b 56 f6 ; 0xc3465 vgabios.c:48
+ out DX, AL ; ee ; 0xc3468
+ inc si ; 46 ; 0xc3469 vgabios.c:2379
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc346a vgabios.c:47
+ mov dx, 003ceh ; ba ce 03 ; 0xc346d vgabios.c:48
+ out DX, AL ; ee ; 0xc3470
+ inc si ; 46 ; 0xc3471 vgabios.c:2380
+ inc si ; 46 ; 0xc3472
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3473 vgabios.c:47
+ mov dx, word [bp-00ah] ; 8b 56 f6 ; 0xc3476 vgabios.c:48
+ add dx, strict byte 00006h ; 83 c2 06 ; 0xc3479
+ out DX, AL ; ee ; 0xc347c
+ test byte [bp-010h], 002h ; f6 46 f0 02 ; 0xc347d vgabios.c:2384
+ je near 035a0h ; 0f 84 1b 01 ; 0xc3481
+ mov es, cx ; 8e c1 ; 0xc3485 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3487
+ mov si, strict word 00049h ; be 49 00 ; 0xc348a vgabios.c:52
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc348d
+ mov es, dx ; 8e c2 ; 0xc3490
+ mov byte [es:si], al ; 26 88 04 ; 0xc3492
+ inc bx ; 43 ; 0xc3495 vgabios.c:2385
+ mov es, cx ; 8e c1 ; 0xc3496 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3498
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc349b vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc349e
+ mov word [es:si], ax ; 26 89 04 ; 0xc34a0
+ inc bx ; 43 ; 0xc34a3 vgabios.c:2386
+ inc bx ; 43 ; 0xc34a4
+ mov es, cx ; 8e c1 ; 0xc34a5 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc34a7
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc34aa vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc34ad
+ mov word [es:si], ax ; 26 89 04 ; 0xc34af
+ inc bx ; 43 ; 0xc34b2 vgabios.c:2387
+ inc bx ; 43 ; 0xc34b3
+ mov es, cx ; 8e c1 ; 0xc34b4 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc34b6
+ mov si, strict word 00063h ; be 63 00 ; 0xc34b9 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc34bc
+ mov word [es:si], ax ; 26 89 04 ; 0xc34be
+ inc bx ; 43 ; 0xc34c1 vgabios.c:2388
+ inc bx ; 43 ; 0xc34c2
+ mov es, cx ; 8e c1 ; 0xc34c3 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc34c5
+ mov si, 00084h ; be 84 00 ; 0xc34c8 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc34cb
+ mov byte [es:si], al ; 26 88 04 ; 0xc34cd
+ inc bx ; 43 ; 0xc34d0 vgabios.c:2389
+ mov es, cx ; 8e c1 ; 0xc34d1 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc34d3
+ mov si, 00085h ; be 85 00 ; 0xc34d6 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc34d9
+ mov word [es:si], ax ; 26 89 04 ; 0xc34db
+ inc bx ; 43 ; 0xc34de vgabios.c:2390
+ inc bx ; 43 ; 0xc34df
+ mov es, cx ; 8e c1 ; 0xc34e0 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc34e2
+ mov si, 00087h ; be 87 00 ; 0xc34e5 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc34e8
+ mov byte [es:si], al ; 26 88 04 ; 0xc34ea
+ inc bx ; 43 ; 0xc34ed vgabios.c:2391
+ mov es, cx ; 8e c1 ; 0xc34ee vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc34f0
+ mov si, 00088h ; be 88 00 ; 0xc34f3 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc34f6
+ mov byte [es:si], al ; 26 88 04 ; 0xc34f8
+ inc bx ; 43 ; 0xc34fb vgabios.c:2392
+ mov es, cx ; 8e c1 ; 0xc34fc vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc34fe
+ mov si, 00089h ; be 89 00 ; 0xc3501 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3504
+ mov byte [es:si], al ; 26 88 04 ; 0xc3506
+ inc bx ; 43 ; 0xc3509 vgabios.c:2393
+ mov es, cx ; 8e c1 ; 0xc350a vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc350c
+ mov si, strict word 00060h ; be 60 00 ; 0xc350f vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3512
+ mov word [es:si], ax ; 26 89 04 ; 0xc3514
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc3517 vgabios.c:2395
+ inc bx ; 43 ; 0xc351c vgabios.c:2394
+ inc bx ; 43 ; 0xc351d
+ jmp short 03526h ; eb 06 ; 0xc351e
+ cmp word [bp-00eh], strict byte 00008h ; 83 7e f2 08 ; 0xc3520
+ jnc short 03542h ; 73 1c ; 0xc3524
+ mov es, cx ; 8e c1 ; 0xc3526 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3528
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc352b vgabios.c:58
+ add si, si ; 01 f6 ; 0xc352e
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc3530
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc3533 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3536
+ mov word [es:si], ax ; 26 89 04 ; 0xc3538
+ inc bx ; 43 ; 0xc353b vgabios.c:2397
+ inc bx ; 43 ; 0xc353c
+ inc word [bp-00eh] ; ff 46 f2 ; 0xc353d vgabios.c:2398
+ jmp short 03520h ; eb de ; 0xc3540
+ mov es, cx ; 8e c1 ; 0xc3542 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3544
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc3547 vgabios.c:62
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc354a
+ mov es, dx ; 8e c2 ; 0xc354d
+ mov word [es:si], ax ; 26 89 04 ; 0xc354f
+ inc bx ; 43 ; 0xc3552 vgabios.c:2399
+ inc bx ; 43 ; 0xc3553
+ mov es, cx ; 8e c1 ; 0xc3554 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3556
+ mov si, strict word 00062h ; be 62 00 ; 0xc3559 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc355c
+ mov byte [es:si], al ; 26 88 04 ; 0xc355e
+ inc bx ; 43 ; 0xc3561 vgabios.c:2400
+ mov es, cx ; 8e c1 ; 0xc3562 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3564
+ mov si, strict word 0007ch ; be 7c 00 ; 0xc3567 vgabios.c:62
+ xor dx, dx ; 31 d2 ; 0xc356a
+ mov es, dx ; 8e c2 ; 0xc356c
+ mov word [es:si], ax ; 26 89 04 ; 0xc356e
+ inc bx ; 43 ; 0xc3571 vgabios.c:2402
+ inc bx ; 43 ; 0xc3572
+ mov es, cx ; 8e c1 ; 0xc3573 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3575
+ mov si, strict word 0007eh ; be 7e 00 ; 0xc3578 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc357b
+ mov word [es:si], ax ; 26 89 04 ; 0xc357d
+ inc bx ; 43 ; 0xc3580 vgabios.c:2403
+ inc bx ; 43 ; 0xc3581
+ mov es, cx ; 8e c1 ; 0xc3582 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3584
+ mov si, 0010ch ; be 0c 01 ; 0xc3587 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc358a
+ mov word [es:si], ax ; 26 89 04 ; 0xc358c
+ inc bx ; 43 ; 0xc358f vgabios.c:2404
+ inc bx ; 43 ; 0xc3590
+ mov es, cx ; 8e c1 ; 0xc3591 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3593
+ mov si, 0010eh ; be 0e 01 ; 0xc3596 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3599
+ mov word [es:si], ax ; 26 89 04 ; 0xc359b
+ inc bx ; 43 ; 0xc359e vgabios.c:2405
+ inc bx ; 43 ; 0xc359f
+ test byte [bp-010h], 004h ; f6 46 f0 04 ; 0xc35a0 vgabios.c:2407
+ je short 035e3h ; 74 3d ; 0xc35a4
+ inc bx ; 43 ; 0xc35a6 vgabios.c:2408
+ mov es, cx ; 8e c1 ; 0xc35a7 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc35a9
+ xor ah, ah ; 30 e4 ; 0xc35ac vgabios.c:48
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc35ae
+ inc bx ; 43 ; 0xc35b1 vgabios.c:2409
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc35b2 vgabios.c:47
+ mov dx, 003c6h ; ba c6 03 ; 0xc35b5 vgabios.c:48
+ out DX, AL ; ee ; 0xc35b8
+ inc bx ; 43 ; 0xc35b9 vgabios.c:2410
+ xor al, al ; 30 c0 ; 0xc35ba
+ mov dx, 003c8h ; ba c8 03 ; 0xc35bc
+ out DX, AL ; ee ; 0xc35bf
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc35c0 vgabios.c:2413
+ jmp short 035cch ; eb 07 ; 0xc35c3
+ cmp word [bp-00eh], 00300h ; 81 7e f2 00 03 ; 0xc35c5
+ jnc short 035dbh ; 73 0f ; 0xc35ca
+ mov es, cx ; 8e c1 ; 0xc35cc vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc35ce
+ mov dx, 003c9h ; ba c9 03 ; 0xc35d1 vgabios.c:48
+ out DX, AL ; ee ; 0xc35d4
+ inc bx ; 43 ; 0xc35d5 vgabios.c:2414
+ inc word [bp-00eh] ; ff 46 f2 ; 0xc35d6 vgabios.c:2415
+ jmp short 035c5h ; eb ea ; 0xc35d9
+ inc bx ; 43 ; 0xc35db vgabios.c:2416
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc35dc
+ mov dx, 003c8h ; ba c8 03 ; 0xc35df
+ out DX, AL ; ee ; 0xc35e2
+ mov ax, bx ; 89 d8 ; 0xc35e3 vgabios.c:2420
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc35e5
+ pop di ; 5f ; 0xc35e8
+ pop si ; 5e ; 0xc35e9
+ pop cx ; 59 ; 0xc35ea
+ pop bp ; 5d ; 0xc35eb
+ retn ; c3 ; 0xc35ec
+ ; disGetNextSymbol 0xc35ed LB 0xccc -> off=0x0 cb=0000000000000027 uValue=00000000000c35ed 'find_vga_entry'
+find_vga_entry: ; 0xc35ed LB 0x27
+ push bx ; 53 ; 0xc35ed vgabios.c:2429
+ push dx ; 52 ; 0xc35ee
+ push bp ; 55 ; 0xc35ef
+ mov bp, sp ; 89 e5 ; 0xc35f0
+ mov dl, al ; 88 c2 ; 0xc35f2
+ mov AH, strict byte 0ffh ; b4 ff ; 0xc35f4 vgabios.c:2431
+ xor al, al ; 30 c0 ; 0xc35f6 vgabios.c:2432
+ jmp short 03600h ; eb 06 ; 0xc35f8
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc35fa vgabios.c:2433
+ cmp AL, strict byte 00fh ; 3c 0f ; 0xc35fc
+ jnbe short 0360eh ; 77 0e ; 0xc35fe
+ movzx bx, al ; 0f b6 d8 ; 0xc3600
+ sal bx, 003h ; c1 e3 03 ; 0xc3603
+ cmp dl, byte [bx+047aeh] ; 3a 97 ae 47 ; 0xc3606
+ jne short 035fah ; 75 ee ; 0xc360a
+ mov ah, al ; 88 c4 ; 0xc360c
+ mov al, ah ; 88 e0 ; 0xc360e vgabios.c:2438
+ pop bp ; 5d ; 0xc3610
+ pop dx ; 5a ; 0xc3611
+ pop bx ; 5b ; 0xc3612
+ retn ; c3 ; 0xc3613
+ ; disGetNextSymbol 0xc3614 LB 0xca5 -> off=0x0 cb=000000000000000e uValue=00000000000c3614 'readx_byte'
+readx_byte: ; 0xc3614 LB 0xe
+ push bx ; 53 ; 0xc3614 vgabios.c:2450
+ push bp ; 55 ; 0xc3615
+ mov bp, sp ; 89 e5 ; 0xc3616
+ mov bx, dx ; 89 d3 ; 0xc3618
+ mov es, ax ; 8e c0 ; 0xc361a vgabios.c:2452
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc361c
+ pop bp ; 5d ; 0xc361f vgabios.c:2453
+ pop bx ; 5b ; 0xc3620
+ retn ; c3 ; 0xc3621
+ ; disGetNextSymbol 0xc3622 LB 0xc97 -> off=0x8a cb=000000000000047c uValue=00000000000c36ac 'int10_func'
+ db 056h, 04fh, 01ch, 01bh, 013h, 012h, 011h, 010h, 00eh, 00dh, 00ch, 00ah, 009h, 008h, 007h, 006h
+ db 005h, 004h, 003h, 002h, 001h, 000h, 021h, 03bh, 0d7h, 036h, 014h, 037h, 028h, 037h, 039h, 037h
+ db 04dh, 037h, 05eh, 037h, 069h, 037h, 0a3h, 037h, 0a7h, 037h, 0b8h, 037h, 0d5h, 037h, 0f2h, 037h
+ db 012h, 038h, 02fh, 038h, 046h, 038h, 052h, 038h, 057h, 039h, 0e4h, 039h, 011h, 03ah, 026h, 03ah
+ db 068h, 03ah, 0f3h, 03ah, 030h, 024h, 023h, 022h, 021h, 020h, 014h, 012h, 011h, 010h, 004h, 003h
+ db 002h, 001h, 000h, 021h, 03bh, 073h, 038h, 093h, 038h, 0afh, 038h, 0c4h, 038h, 0cfh, 038h, 073h
+ db 038h, 093h, 038h, 0afh, 038h, 0cfh, 038h, 0e4h, 038h, 0f0h, 038h, 00bh, 039h, 01ch, 039h, 02dh
+ db 039h, 03eh, 039h, 00ah, 009h, 006h, 004h, 002h, 001h, 000h, 0e5h, 03ah, 090h, 03ah, 09eh, 03ah
+ db 0afh, 03ah, 0bfh, 03ah, 0d4h, 03ah, 0e5h, 03ah, 0e5h, 03ah
+int10_func: ; 0xc36ac LB 0x47c
+ push bp ; 55 ; 0xc36ac vgabios.c:2531
+ mov bp, sp ; 89 e5 ; 0xc36ad
+ push si ; 56 ; 0xc36af
+ push di ; 57 ; 0xc36b0
+ push ax ; 50 ; 0xc36b1
+ mov si, word [bp+004h] ; 8b 76 04 ; 0xc36b2
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc36b5 vgabios.c:2536
+ shr ax, 008h ; c1 e8 08 ; 0xc36b8
+ cmp ax, strict word 00056h ; 3d 56 00 ; 0xc36bb
+ jnbe near 03b21h ; 0f 87 5f 04 ; 0xc36be
+ push CS ; 0e ; 0xc36c2
+ pop ES ; 07 ; 0xc36c3
+ mov cx, strict word 00017h ; b9 17 00 ; 0xc36c4
+ mov di, 03622h ; bf 22 36 ; 0xc36c7
+ repne scasb ; f2 ae ; 0xc36ca
+ sal cx, 1 ; d1 e1 ; 0xc36cc
+ mov di, cx ; 89 cf ; 0xc36ce
+ mov ax, word [cs:di+03638h] ; 2e 8b 85 38 36 ; 0xc36d0
+ jmp ax ; ff e0 ; 0xc36d5
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc36d7 vgabios.c:2539
+ call 013ddh ; e8 ff dc ; 0xc36db
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc36de vgabios.c:2540
+ and ax, strict word 0007fh ; 25 7f 00 ; 0xc36e1
+ cmp ax, strict word 00007h ; 3d 07 00 ; 0xc36e4
+ je short 036feh ; 74 15 ; 0xc36e7
+ cmp ax, strict word 00006h ; 3d 06 00 ; 0xc36e9
+ je short 036f5h ; 74 07 ; 0xc36ec
+ cmp ax, strict word 00005h ; 3d 05 00 ; 0xc36ee
+ jbe short 036feh ; 76 0b ; 0xc36f1
+ jmp short 03707h ; eb 12 ; 0xc36f3
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc36f5 vgabios.c:2542
+ xor al, al ; 30 c0 ; 0xc36f8
+ or AL, strict byte 03fh ; 0c 3f ; 0xc36fa
+ jmp short 0370eh ; eb 10 ; 0xc36fc vgabios.c:2543
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc36fe vgabios.c:2551
+ xor al, al ; 30 c0 ; 0xc3701
+ or AL, strict byte 030h ; 0c 30 ; 0xc3703
+ jmp short 0370eh ; eb 07 ; 0xc3705
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3707 vgabios.c:2554
+ xor al, al ; 30 c0 ; 0xc370a
+ or AL, strict byte 020h ; 0c 20 ; 0xc370c
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc370e
+ jmp near 03b21h ; e9 0d 04 ; 0xc3711 vgabios.c:2556
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc3714 vgabios.c:2558
+ movzx dx, al ; 0f b6 d0 ; 0xc3717
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc371a
+ shr ax, 008h ; c1 e8 08 ; 0xc371d
+ xor ah, ah ; 30 e4 ; 0xc3720
+ call 0114ch ; e8 27 da ; 0xc3722
+ jmp near 03b21h ; e9 f9 03 ; 0xc3725 vgabios.c:2559
+ mov dx, word [bp+00eh] ; 8b 56 0e ; 0xc3728 vgabios.c:2561
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc372b
+ shr ax, 008h ; c1 e8 08 ; 0xc372e
+ xor ah, ah ; 30 e4 ; 0xc3731
+ call 01242h ; e8 0c db ; 0xc3733
+ jmp near 03b21h ; e9 e8 03 ; 0xc3736 vgabios.c:2562
+ lea bx, [bp+00eh] ; 8d 5e 0e ; 0xc3739 vgabios.c:2564
+ lea dx, [bp+010h] ; 8d 56 10 ; 0xc373c
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc373f
+ shr ax, 008h ; c1 e8 08 ; 0xc3742
+ xor ah, ah ; 30 e4 ; 0xc3745
+ call 00a93h ; e8 49 d3 ; 0xc3747
+ jmp near 03b21h ; e9 d4 03 ; 0xc374a vgabios.c:2565
+ xor ax, ax ; 31 c0 ; 0xc374d vgabios.c:2571
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc374f
+ mov word [bp+00ch], ax ; 89 46 0c ; 0xc3752 vgabios.c:2572
+ mov word [bp+010h], ax ; 89 46 10 ; 0xc3755 vgabios.c:2573
+ mov word [bp+00eh], ax ; 89 46 0e ; 0xc3758 vgabios.c:2574
+ jmp near 03b21h ; e9 c3 03 ; 0xc375b vgabios.c:2575
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc375e vgabios.c:2577
+ xor ah, ah ; 30 e4 ; 0xc3761
+ call 012cbh ; e8 65 db ; 0xc3763
+ jmp near 03b21h ; e9 b8 03 ; 0xc3766 vgabios.c:2578
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc3769 vgabios.c:2580
+ push ax ; 50 ; 0xc376c
+ mov ax, 000ffh ; b8 ff 00 ; 0xc376d
+ push ax ; 50 ; 0xc3770
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3771
+ xor ah, ah ; 30 e4 ; 0xc3774
+ push ax ; 50 ; 0xc3776
+ mov ax, word [bp+00eh] ; 8b 46 0e ; 0xc3777
+ shr ax, 008h ; c1 e8 08 ; 0xc377a
+ xor ah, ah ; 30 e4 ; 0xc377d
+ push ax ; 50 ; 0xc377f
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc3780
+ movzx cx, al ; 0f b6 c8 ; 0xc3783
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3786
+ shr ax, 008h ; c1 e8 08 ; 0xc3789
+ movzx bx, al ; 0f b6 d8 ; 0xc378c
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc378f
+ shr ax, 008h ; c1 e8 08 ; 0xc3792
+ movzx dx, al ; 0f b6 d0 ; 0xc3795
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3798
+ xor ah, ah ; 30 e4 ; 0xc379b
+ call 01b5dh ; e8 bd e3 ; 0xc379d
+ jmp near 03b21h ; e9 7e 03 ; 0xc37a0 vgabios.c:2581
+ xor ax, ax ; 31 c0 ; 0xc37a3 vgabios.c:2583
+ jmp short 0376ch ; eb c5 ; 0xc37a5
+ lea dx, [bp+012h] ; 8d 56 12 ; 0xc37a7 vgabios.c:2586
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc37aa
+ shr ax, 008h ; c1 e8 08 ; 0xc37ad
+ xor ah, ah ; 30 e4 ; 0xc37b0
+ call 00db0h ; e8 fb d5 ; 0xc37b2
+ jmp near 03b21h ; e9 69 03 ; 0xc37b5 vgabios.c:2587
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc37b8 vgabios.c:2589
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc37bb
+ movzx bx, al ; 0f b6 d8 ; 0xc37be
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc37c1
+ shr ax, 008h ; c1 e8 08 ; 0xc37c4
+ movzx dx, al ; 0f b6 d0 ; 0xc37c7
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc37ca
+ xor ah, ah ; 30 e4 ; 0xc37cd
+ call 023e6h ; e8 14 ec ; 0xc37cf
+ jmp near 03b21h ; e9 4c 03 ; 0xc37d2 vgabios.c:2590
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc37d5 vgabios.c:2592
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc37d8
+ movzx bx, al ; 0f b6 d8 ; 0xc37db
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc37de
+ shr ax, 008h ; c1 e8 08 ; 0xc37e1
+ movzx dx, al ; 0f b6 d0 ; 0xc37e4
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc37e7
+ xor ah, ah ; 30 e4 ; 0xc37ea
+ call 0254bh ; e8 5c ed ; 0xc37ec
+ jmp near 03b21h ; e9 2f 03 ; 0xc37ef vgabios.c:2593
+ mov cx, word [bp+00eh] ; 8b 4e 0e ; 0xc37f2 vgabios.c:2595
+ mov bx, word [bp+010h] ; 8b 5e 10 ; 0xc37f5
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc37f8
+ movzx dx, al ; 0f b6 d0 ; 0xc37fb
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc37fe
+ shr ax, 008h ; c1 e8 08 ; 0xc3801
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc3804
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3807
+ xor ah, ah ; 30 e4 ; 0xc380a
+ call 026adh ; e8 9e ee ; 0xc380c
+ jmp near 03b21h ; e9 0f 03 ; 0xc380f vgabios.c:2596
+ lea cx, [bp+012h] ; 8d 4e 12 ; 0xc3812 vgabios.c:2598
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3815
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3818
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc381b
+ shr ax, 008h ; c1 e8 08 ; 0xc381e
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc3821
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3824
+ xor ah, ah ; 30 e4 ; 0xc3827
+ call 00f6ah ; e8 3e d7 ; 0xc3829
+ jmp near 03b21h ; e9 f2 02 ; 0xc382c vgabios.c:2599
+ mov cx, strict word 00002h ; b9 02 00 ; 0xc382f vgabios.c:2607
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3832
+ movzx bx, al ; 0f b6 d8 ; 0xc3835
+ mov dx, 000ffh ; ba ff 00 ; 0xc3838
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc383b
+ xor ah, ah ; 30 e4 ; 0xc383e
+ call 02812h ; e8 cf ef ; 0xc3840
+ jmp near 03b21h ; e9 db 02 ; 0xc3843 vgabios.c:2608
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3846 vgabios.c:2611
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3849
+ call 010c0h ; e8 71 d8 ; 0xc384c
+ jmp near 03b21h ; e9 cf 02 ; 0xc384f vgabios.c:2612
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3852 vgabios.c:2614
+ xor ah, ah ; 30 e4 ; 0xc3855
+ cmp ax, strict word 00030h ; 3d 30 00 ; 0xc3857
+ jnbe near 03b21h ; 0f 87 c3 02 ; 0xc385a
+ push CS ; 0e ; 0xc385e
+ pop ES ; 07 ; 0xc385f
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc3860
+ mov di, 03666h ; bf 66 36 ; 0xc3863
+ repne scasb ; f2 ae ; 0xc3866
+ sal cx, 1 ; d1 e1 ; 0xc3868
+ mov di, cx ; 89 cf ; 0xc386a
+ mov ax, word [cs:di+03675h] ; 2e 8b 85 75 36 ; 0xc386c
+ jmp ax ; ff e0 ; 0xc3871
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3873 vgabios.c:2618
+ shr ax, 008h ; c1 e8 08 ; 0xc3876
+ xor ah, ah ; 30 e4 ; 0xc3879
+ push ax ; 50 ; 0xc387b
+ movzx ax, byte [bp+00ch] ; 0f b6 46 0c ; 0xc387c
+ push ax ; 50 ; 0xc3880
+ push word [bp+00eh] ; ff 76 0e ; 0xc3881
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc3884
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3888
+ mov bx, word [bp+008h] ; 8b 5e 08 ; 0xc388b
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc388e
+ jmp short 038a9h ; eb 16 ; 0xc3891
+ push strict byte 0000eh ; 6a 0e ; 0xc3893 vgabios.c:2622
+ movzx ax, byte [bp+00ch] ; 0f b6 46 0c ; 0xc3895
+ push ax ; 50 ; 0xc3899
+ push strict byte 00000h ; 6a 00 ; 0xc389a
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc389c
+ mov cx, 00100h ; b9 00 01 ; 0xc38a0
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc38a3
+ mov dx, 0c000h ; ba 00 c0 ; 0xc38a6
+ call 02c0ah ; e8 5e f3 ; 0xc38a9
+ jmp near 03b21h ; e9 72 02 ; 0xc38ac
+ push strict byte 00008h ; 6a 08 ; 0xc38af vgabios.c:2626
+ movzx ax, byte [bp+00ch] ; 0f b6 46 0c ; 0xc38b1
+ push ax ; 50 ; 0xc38b5
+ push strict byte 00000h ; 6a 00 ; 0xc38b6
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38b8
+ mov cx, 00100h ; b9 00 01 ; 0xc38bc
+ mov bx, 0556ch ; bb 6c 55 ; 0xc38bf
+ jmp short 038a6h ; eb e2 ; 0xc38c2
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc38c4 vgabios.c:2629
+ xor ah, ah ; 30 e4 ; 0xc38c7
+ call 02b73h ; e8 a7 f2 ; 0xc38c9
+ jmp near 03b21h ; e9 52 02 ; 0xc38cc vgabios.c:2630
+ push strict byte 00010h ; 6a 10 ; 0xc38cf vgabios.c:2633
+ movzx ax, byte [bp+00ch] ; 0f b6 46 0c ; 0xc38d1
+ push ax ; 50 ; 0xc38d5
+ push strict byte 00000h ; 6a 00 ; 0xc38d6
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc38d8
+ mov cx, 00100h ; b9 00 01 ; 0xc38dc
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc38df
+ jmp short 038a6h ; eb c2 ; 0xc38e2
+ mov dx, word [bp+008h] ; 8b 56 08 ; 0xc38e4 vgabios.c:2636
+ mov ax, word [bp+016h] ; 8b 46 16 ; 0xc38e7
+ call 02c86h ; e8 99 f3 ; 0xc38ea
+ jmp near 03b21h ; e9 31 02 ; 0xc38ed vgabios.c:2637
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc38f0 vgabios.c:2639
+ xor ah, ah ; 30 e4 ; 0xc38f3
+ push ax ; 50 ; 0xc38f5
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc38f6
+ movzx cx, al ; 0f b6 c8 ; 0xc38f9
+ mov bx, word [bp+010h] ; 8b 5e 10 ; 0xc38fc
+ mov dx, word [bp+008h] ; 8b 56 08 ; 0xc38ff
+ mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3902
+ call 02ce5h ; e8 dd f3 ; 0xc3905
+ jmp near 03b21h ; e9 16 02 ; 0xc3908 vgabios.c:2640
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc390b vgabios.c:2642
+ movzx dx, al ; 0f b6 d0 ; 0xc390e
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3911
+ xor ah, ah ; 30 e4 ; 0xc3914
+ call 02d01h ; e8 e8 f3 ; 0xc3916
+ jmp near 03b21h ; e9 05 02 ; 0xc3919 vgabios.c:2643
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc391c vgabios.c:2645
+ movzx dx, al ; 0f b6 d0 ; 0xc391f
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3922
+ xor ah, ah ; 30 e4 ; 0xc3925
+ call 02d1fh ; e8 f5 f3 ; 0xc3927
+ jmp near 03b21h ; e9 f4 01 ; 0xc392a vgabios.c:2646
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc392d vgabios.c:2648
+ movzx dx, al ; 0f b6 d0 ; 0xc3930
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3933
+ xor ah, ah ; 30 e4 ; 0xc3936
+ call 02d3dh ; e8 02 f4 ; 0xc3938
+ jmp near 03b21h ; e9 e3 01 ; 0xc393b vgabios.c:2649
+ lea ax, [bp+00eh] ; 8d 46 0e ; 0xc393e vgabios.c:2651
+ push ax ; 50 ; 0xc3941
+ lea cx, [bp+010h] ; 8d 4e 10 ; 0xc3942
+ lea bx, [bp+008h] ; 8d 5e 08 ; 0xc3945
+ lea dx, [bp+016h] ; 8d 56 16 ; 0xc3948
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc394b
+ shr ax, 008h ; c1 e8 08 ; 0xc394e
+ call 00ee7h ; e8 93 d5 ; 0xc3951
+ jmp near 03b21h ; e9 ca 01 ; 0xc3954 vgabios.c:2659
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3957 vgabios.c:2661
+ xor ah, ah ; 30 e4 ; 0xc395a
+ cmp ax, strict word 00034h ; 3d 34 00 ; 0xc395c
+ jc short 03970h ; 72 0f ; 0xc395f
+ jbe short 039a3h ; 76 40 ; 0xc3961
+ cmp ax, strict word 00036h ; 3d 36 00 ; 0xc3963
+ je short 039dah ; 74 72 ; 0xc3966
+ cmp ax, strict word 00035h ; 3d 35 00 ; 0xc3968
+ je short 039cbh ; 74 5e ; 0xc396b
+ jmp near 03b21h ; e9 b1 01 ; 0xc396d
+ cmp ax, strict word 00030h ; 3d 30 00 ; 0xc3970
+ je short 03982h ; 74 0d ; 0xc3973
+ cmp ax, strict word 00020h ; 3d 20 00 ; 0xc3975
+ jne near 03b21h ; 0f 85 a5 01 ; 0xc3978
+ call 02d5bh ; e8 dc f3 ; 0xc397c vgabios.c:2664
+ jmp near 03b21h ; e9 9f 01 ; 0xc397f vgabios.c:2665
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3982 vgabios.c:2667
+ xor ah, ah ; 30 e4 ; 0xc3985
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3987
+ jnbe near 03b21h ; 0f 87 93 01 ; 0xc398a
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc398e vgabios.c:2668
+ xor ah, ah ; 30 e4 ; 0xc3991
+ call 02d60h ; e8 ca f3 ; 0xc3993
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3996 vgabios.c:2669
+ xor al, al ; 30 c0 ; 0xc3999
+ or AL, strict byte 012h ; 0c 12 ; 0xc399b
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc399d
+ jmp near 03b21h ; e9 7e 01 ; 0xc39a0 vgabios.c:2671
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc39a3 vgabios.c:2673
+ xor ah, ah ; 30 e4 ; 0xc39a6
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc39a8
+ jnc short 039c5h ; 73 18 ; 0xc39ab
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc39ad vgabios.c:45
+ mov si, 00087h ; be 87 00 ; 0xc39b0
+ mov es, ax ; 8e c0 ; 0xc39b3 vgabios.c:47
+ mov ah, byte [es:si] ; 26 8a 24 ; 0xc39b5
+ and ah, 0feh ; 80 e4 fe ; 0xc39b8 vgabios.c:48
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc39bb
+ or al, ah ; 08 e0 ; 0xc39be
+ mov byte [es:si], al ; 26 88 04 ; 0xc39c0 vgabios.c:52
+ jmp short 03996h ; eb d1 ; 0xc39c3
+ mov byte [bp+012h], ah ; 88 66 12 ; 0xc39c5 vgabios.c:2679
+ jmp near 03b21h ; e9 56 01 ; 0xc39c8 vgabios.c:2680
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc39cb vgabios.c:2682
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc39cf
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc39d2
+ call 02d92h ; e8 ba f3 ; 0xc39d5
+ jmp short 03996h ; eb bc ; 0xc39d8
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc39da vgabios.c:2686
+ xor ah, ah ; 30 e4 ; 0xc39dd
+ call 02d97h ; e8 b5 f3 ; 0xc39df
+ jmp short 03996h ; eb b2 ; 0xc39e2
+ push word [bp+008h] ; ff 76 08 ; 0xc39e4 vgabios.c:2696
+ push word [bp+016h] ; ff 76 16 ; 0xc39e7
+ movzx ax, byte [bp+00eh] ; 0f b6 46 0e ; 0xc39ea
+ push ax ; 50 ; 0xc39ee
+ mov ax, word [bp+00eh] ; 8b 46 0e ; 0xc39ef
+ shr ax, 008h ; c1 e8 08 ; 0xc39f2
+ xor ah, ah ; 30 e4 ; 0xc39f5
+ push ax ; 50 ; 0xc39f7
+ movzx bx, byte [bp+00ch] ; 0f b6 5e 0c ; 0xc39f8
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc39fc
+ shr dx, 008h ; c1 ea 08 ; 0xc39ff
+ xor dh, dh ; 30 f6 ; 0xc3a02
+ movzx ax, byte [bp+012h] ; 0f b6 46 12 ; 0xc3a04
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3a08
+ call 02d9ch ; e8 8e f3 ; 0xc3a0b
+ jmp near 03b21h ; e9 10 01 ; 0xc3a0e vgabios.c:2697
+ mov bx, si ; 89 f3 ; 0xc3a11 vgabios.c:2699
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3a13
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3a16
+ call 02e32h ; e8 16 f4 ; 0xc3a19
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3a1c vgabios.c:2700
+ xor al, al ; 30 c0 ; 0xc3a1f
+ or AL, strict byte 01bh ; 0c 1b ; 0xc3a21
+ jmp near 0399dh ; e9 77 ff ; 0xc3a23
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3a26 vgabios.c:2703
+ xor ah, ah ; 30 e4 ; 0xc3a29
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3a2b
+ je short 03a52h ; 74 22 ; 0xc3a2e
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc3a30
+ je short 03a44h ; 74 0f ; 0xc3a33
+ test ax, ax ; 85 c0 ; 0xc3a35
+ jne short 03a5eh ; 75 25 ; 0xc3a37
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3a39 vgabios.c:2706
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3a3c
+ call 03047h ; e8 05 f6 ; 0xc3a3f
+ jmp short 03a5eh ; eb 1a ; 0xc3a42 vgabios.c:2707
+ mov bx, word [bp+00ch] ; 8b 5e 0c ; 0xc3a44 vgabios.c:2709
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3a47
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3a4a
+ call 0305fh ; e8 0f f6 ; 0xc3a4d
+ jmp short 03a5eh ; eb 0c ; 0xc3a50 vgabios.c:2710
+ mov bx, word [bp+00ch] ; 8b 5e 0c ; 0xc3a52 vgabios.c:2712
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3a55
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3a58
+ call 03335h ; e8 d7 f8 ; 0xc3a5b
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3a5e vgabios.c:2719
+ xor al, al ; 30 c0 ; 0xc3a61
+ or AL, strict byte 01ch ; 0c 1c ; 0xc3a63
+ jmp near 0399dh ; e9 35 ff ; 0xc3a65
+ call 007bfh ; e8 54 cd ; 0xc3a68 vgabios.c:2724
+ test ax, ax ; 85 c0 ; 0xc3a6b
+ je near 03aech ; 0f 84 7b 00 ; 0xc3a6d
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3a71 vgabios.c:2725
+ xor ah, ah ; 30 e4 ; 0xc3a74
+ cmp ax, strict word 0000ah ; 3d 0a 00 ; 0xc3a76
+ jnbe short 03ae5h ; 77 6a ; 0xc3a79
+ push CS ; 0e ; 0xc3a7b
+ pop ES ; 07 ; 0xc3a7c
+ mov cx, strict word 00008h ; b9 08 00 ; 0xc3a7d
+ mov di, 03695h ; bf 95 36 ; 0xc3a80
+ repne scasb ; f2 ae ; 0xc3a83
+ sal cx, 1 ; d1 e1 ; 0xc3a85
+ mov di, cx ; 89 cf ; 0xc3a87
+ mov ax, word [cs:di+0369ch] ; 2e 8b 85 9c 36 ; 0xc3a89
+ jmp ax ; ff e0 ; 0xc3a8e
+ mov bx, si ; 89 f3 ; 0xc3a90 vgabios.c:2728
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3a92
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3a95
+ call 03cf2h ; e8 57 02 ; 0xc3a98
+ jmp near 03b21h ; e9 83 00 ; 0xc3a9b vgabios.c:2729
+ mov cx, si ; 89 f1 ; 0xc3a9e vgabios.c:2731
+ mov bx, word [bp+016h] ; 8b 5e 16 ; 0xc3aa0
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3aa3
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3aa6
+ call 03e17h ; e8 6b 03 ; 0xc3aa9
+ jmp near 03b21h ; e9 72 00 ; 0xc3aac vgabios.c:2732
+ mov cx, si ; 89 f1 ; 0xc3aaf vgabios.c:2734
+ mov bx, word [bp+016h] ; 8b 5e 16 ; 0xc3ab1
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc3ab4
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3ab7
+ call 03eb2h ; e8 f5 03 ; 0xc3aba
+ jmp short 03b21h ; eb 62 ; 0xc3abd vgabios.c:2735
+ lea ax, [bp+00ch] ; 8d 46 0c ; 0xc3abf vgabios.c:2737
+ push ax ; 50 ; 0xc3ac2
+ mov cx, word [bp+016h] ; 8b 4e 16 ; 0xc3ac3
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3ac6
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3ac9
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3acc
+ call 04079h ; e8 a7 05 ; 0xc3acf
+ jmp short 03b21h ; eb 4d ; 0xc3ad2 vgabios.c:2738
+ lea cx, [bp+00eh] ; 8d 4e 0e ; 0xc3ad4 vgabios.c:2740
+ lea bx, [bp+010h] ; 8d 5e 10 ; 0xc3ad7
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3ada
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3add
+ call 04105h ; e8 22 06 ; 0xc3ae0
+ jmp short 03b21h ; eb 3c ; 0xc3ae3 vgabios.c:2741
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3ae5 vgabios.c:2763
+ jmp short 03b21h ; eb 35 ; 0xc3aea vgabios.c:2766
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3aec vgabios.c:2768
+ jmp short 03b21h ; eb 2e ; 0xc3af1 vgabios.c:2770
+ call 007bfh ; e8 c9 cc ; 0xc3af3 vgabios.c:2772
+ test ax, ax ; 85 c0 ; 0xc3af6
+ je short 03b1ch ; 74 22 ; 0xc3af8
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3afa vgabios.c:2773
+ xor ah, ah ; 30 e4 ; 0xc3afd
+ cmp ax, strict word 00042h ; 3d 42 00 ; 0xc3aff
+ jne short 03b15h ; 75 11 ; 0xc3b02
+ lea cx, [bp+00eh] ; 8d 4e 0e ; 0xc3b04 vgabios.c:2776
+ lea bx, [bp+010h] ; 8d 5e 10 ; 0xc3b07
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3b0a
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3b0d
+ call 041d4h ; e8 c1 06 ; 0xc3b10
+ jmp short 03b21h ; eb 0c ; 0xc3b13 vgabios.c:2777
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3b15 vgabios.c:2779
+ jmp short 03b21h ; eb 05 ; 0xc3b1a vgabios.c:2782
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3b1c vgabios.c:2784
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3b21 vgabios.c:2794
+ pop di ; 5f ; 0xc3b24
+ pop si ; 5e ; 0xc3b25
+ pop bp ; 5d ; 0xc3b26
+ retn ; c3 ; 0xc3b27
+ ; disGetNextSymbol 0xc3b28 LB 0x791 -> off=0x0 cb=000000000000001f uValue=00000000000c3b28 'dispi_set_xres'
+dispi_set_xres: ; 0xc3b28 LB 0x1f
+ push bp ; 55 ; 0xc3b28 vbe.c:100
+ mov bp, sp ; 89 e5 ; 0xc3b29
+ push bx ; 53 ; 0xc3b2b
+ push dx ; 52 ; 0xc3b2c
+ mov bx, ax ; 89 c3 ; 0xc3b2d
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc3b2f vbe.c:105
+ mov dx, 001ceh ; ba ce 01 ; 0xc3b32
+ call 00570h ; e8 38 ca ; 0xc3b35
+ mov ax, bx ; 89 d8 ; 0xc3b38 vbe.c:106
+ mov dx, 001cfh ; ba cf 01 ; 0xc3b3a
+ call 00570h ; e8 30 ca ; 0xc3b3d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3b40 vbe.c:107
+ pop dx ; 5a ; 0xc3b43
+ pop bx ; 5b ; 0xc3b44
+ pop bp ; 5d ; 0xc3b45
+ retn ; c3 ; 0xc3b46
+ ; disGetNextSymbol 0xc3b47 LB 0x772 -> off=0x0 cb=000000000000001f uValue=00000000000c3b47 'dispi_set_yres'
+dispi_set_yres: ; 0xc3b47 LB 0x1f
+ push bp ; 55 ; 0xc3b47 vbe.c:109
+ mov bp, sp ; 89 e5 ; 0xc3b48
+ push bx ; 53 ; 0xc3b4a
+ push dx ; 52 ; 0xc3b4b
+ mov bx, ax ; 89 c3 ; 0xc3b4c
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc3b4e vbe.c:114
+ mov dx, 001ceh ; ba ce 01 ; 0xc3b51
+ call 00570h ; e8 19 ca ; 0xc3b54
+ mov ax, bx ; 89 d8 ; 0xc3b57 vbe.c:115
+ mov dx, 001cfh ; ba cf 01 ; 0xc3b59
+ call 00570h ; e8 11 ca ; 0xc3b5c
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3b5f vbe.c:116
+ pop dx ; 5a ; 0xc3b62
+ pop bx ; 5b ; 0xc3b63
+ pop bp ; 5d ; 0xc3b64
+ retn ; c3 ; 0xc3b65
+ ; disGetNextSymbol 0xc3b66 LB 0x753 -> off=0x0 cb=0000000000000019 uValue=00000000000c3b66 'dispi_get_yres'
+dispi_get_yres: ; 0xc3b66 LB 0x19
+ push bp ; 55 ; 0xc3b66 vbe.c:118
+ mov bp, sp ; 89 e5 ; 0xc3b67
+ push dx ; 52 ; 0xc3b69
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc3b6a vbe.c:120
+ mov dx, 001ceh ; ba ce 01 ; 0xc3b6d
+ call 00570h ; e8 fd c9 ; 0xc3b70
+ mov dx, 001cfh ; ba cf 01 ; 0xc3b73 vbe.c:121
+ call 00577h ; e8 fe c9 ; 0xc3b76
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3b79 vbe.c:122
+ pop dx ; 5a ; 0xc3b7c
+ pop bp ; 5d ; 0xc3b7d
+ retn ; c3 ; 0xc3b7e
+ ; disGetNextSymbol 0xc3b7f LB 0x73a -> off=0x0 cb=000000000000001f uValue=00000000000c3b7f 'dispi_set_bpp'
+dispi_set_bpp: ; 0xc3b7f LB 0x1f
+ push bp ; 55 ; 0xc3b7f vbe.c:124
+ mov bp, sp ; 89 e5 ; 0xc3b80
+ push bx ; 53 ; 0xc3b82
+ push dx ; 52 ; 0xc3b83
+ mov bx, ax ; 89 c3 ; 0xc3b84
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc3b86 vbe.c:129
+ mov dx, 001ceh ; ba ce 01 ; 0xc3b89
+ call 00570h ; e8 e1 c9 ; 0xc3b8c
+ mov ax, bx ; 89 d8 ; 0xc3b8f vbe.c:130
+ mov dx, 001cfh ; ba cf 01 ; 0xc3b91
+ call 00570h ; e8 d9 c9 ; 0xc3b94
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3b97 vbe.c:131
+ pop dx ; 5a ; 0xc3b9a
+ pop bx ; 5b ; 0xc3b9b
+ pop bp ; 5d ; 0xc3b9c
+ retn ; c3 ; 0xc3b9d
+ ; disGetNextSymbol 0xc3b9e LB 0x71b -> off=0x0 cb=0000000000000019 uValue=00000000000c3b9e 'dispi_get_bpp'
+dispi_get_bpp: ; 0xc3b9e LB 0x19
+ push bp ; 55 ; 0xc3b9e vbe.c:133
+ mov bp, sp ; 89 e5 ; 0xc3b9f
+ push dx ; 52 ; 0xc3ba1
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc3ba2 vbe.c:135
+ mov dx, 001ceh ; ba ce 01 ; 0xc3ba5
+ call 00570h ; e8 c5 c9 ; 0xc3ba8
+ mov dx, 001cfh ; ba cf 01 ; 0xc3bab vbe.c:136
+ call 00577h ; e8 c6 c9 ; 0xc3bae
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3bb1 vbe.c:137
+ pop dx ; 5a ; 0xc3bb4
+ pop bp ; 5d ; 0xc3bb5
+ retn ; c3 ; 0xc3bb6
+ ; disGetNextSymbol 0xc3bb7 LB 0x702 -> off=0x0 cb=000000000000001f uValue=00000000000c3bb7 'dispi_set_virt_width'
+dispi_set_virt_width: ; 0xc3bb7 LB 0x1f
+ push bp ; 55 ; 0xc3bb7 vbe.c:139
+ mov bp, sp ; 89 e5 ; 0xc3bb8
+ push bx ; 53 ; 0xc3bba
+ push dx ; 52 ; 0xc3bbb
+ mov bx, ax ; 89 c3 ; 0xc3bbc
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc3bbe vbe.c:144
+ mov dx, 001ceh ; ba ce 01 ; 0xc3bc1
+ call 00570h ; e8 a9 c9 ; 0xc3bc4
+ mov ax, bx ; 89 d8 ; 0xc3bc7 vbe.c:145
+ mov dx, 001cfh ; ba cf 01 ; 0xc3bc9
+ call 00570h ; e8 a1 c9 ; 0xc3bcc
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3bcf vbe.c:146
+ pop dx ; 5a ; 0xc3bd2
+ pop bx ; 5b ; 0xc3bd3
+ pop bp ; 5d ; 0xc3bd4
+ retn ; c3 ; 0xc3bd5
+ ; disGetNextSymbol 0xc3bd6 LB 0x6e3 -> off=0x0 cb=0000000000000019 uValue=00000000000c3bd6 'dispi_get_virt_width'
+dispi_get_virt_width: ; 0xc3bd6 LB 0x19
+ push bp ; 55 ; 0xc3bd6 vbe.c:148
+ mov bp, sp ; 89 e5 ; 0xc3bd7
+ push dx ; 52 ; 0xc3bd9
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc3bda vbe.c:150
+ mov dx, 001ceh ; ba ce 01 ; 0xc3bdd
+ call 00570h ; e8 8d c9 ; 0xc3be0
+ mov dx, 001cfh ; ba cf 01 ; 0xc3be3 vbe.c:151
+ call 00577h ; e8 8e c9 ; 0xc3be6
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3be9 vbe.c:152
+ pop dx ; 5a ; 0xc3bec
+ pop bp ; 5d ; 0xc3bed
+ retn ; c3 ; 0xc3bee
+ ; disGetNextSymbol 0xc3bef LB 0x6ca -> off=0x0 cb=0000000000000019 uValue=00000000000c3bef 'dispi_get_virt_height'
+dispi_get_virt_height: ; 0xc3bef LB 0x19
+ push bp ; 55 ; 0xc3bef vbe.c:154
+ mov bp, sp ; 89 e5 ; 0xc3bf0
+ push dx ; 52 ; 0xc3bf2
+ mov ax, strict word 00007h ; b8 07 00 ; 0xc3bf3 vbe.c:156
+ mov dx, 001ceh ; ba ce 01 ; 0xc3bf6
+ call 00570h ; e8 74 c9 ; 0xc3bf9
+ mov dx, 001cfh ; ba cf 01 ; 0xc3bfc vbe.c:157
+ call 00577h ; e8 75 c9 ; 0xc3bff
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3c02 vbe.c:158
+ pop dx ; 5a ; 0xc3c05
+ pop bp ; 5d ; 0xc3c06
+ retn ; c3 ; 0xc3c07
+ ; disGetNextSymbol 0xc3c08 LB 0x6b1 -> off=0x0 cb=0000000000000012 uValue=00000000000c3c08 'in_word'
+in_word: ; 0xc3c08 LB 0x12
+ push bp ; 55 ; 0xc3c08 vbe.c:160
+ mov bp, sp ; 89 e5 ; 0xc3c09
+ push bx ; 53 ; 0xc3c0b
+ mov bx, ax ; 89 c3 ; 0xc3c0c
+ mov ax, dx ; 89 d0 ; 0xc3c0e
+ mov dx, bx ; 89 da ; 0xc3c10 vbe.c:162
+ out DX, ax ; ef ; 0xc3c12
+ in ax, DX ; ed ; 0xc3c13 vbe.c:163
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3c14 vbe.c:164
+ pop bx ; 5b ; 0xc3c17
+ pop bp ; 5d ; 0xc3c18
+ retn ; c3 ; 0xc3c19
+ ; disGetNextSymbol 0xc3c1a LB 0x69f -> off=0x0 cb=0000000000000014 uValue=00000000000c3c1a 'in_byte'
+in_byte: ; 0xc3c1a LB 0x14
+ push bp ; 55 ; 0xc3c1a vbe.c:166
+ mov bp, sp ; 89 e5 ; 0xc3c1b
+ push bx ; 53 ; 0xc3c1d
+ mov bx, ax ; 89 c3 ; 0xc3c1e
+ mov ax, dx ; 89 d0 ; 0xc3c20
+ mov dx, bx ; 89 da ; 0xc3c22 vbe.c:168
+ out DX, ax ; ef ; 0xc3c24
+ in AL, DX ; ec ; 0xc3c25 vbe.c:169
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3c26
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3c28 vbe.c:170
+ pop bx ; 5b ; 0xc3c2b
+ pop bp ; 5d ; 0xc3c2c
+ retn ; c3 ; 0xc3c2d
+ ; disGetNextSymbol 0xc3c2e LB 0x68b -> off=0x0 cb=0000000000000014 uValue=00000000000c3c2e 'dispi_get_id'
+dispi_get_id: ; 0xc3c2e LB 0x14
+ push bp ; 55 ; 0xc3c2e vbe.c:173
+ mov bp, sp ; 89 e5 ; 0xc3c2f
+ push dx ; 52 ; 0xc3c31
+ xor ax, ax ; 31 c0 ; 0xc3c32 vbe.c:175
+ mov dx, 001ceh ; ba ce 01 ; 0xc3c34
+ out DX, ax ; ef ; 0xc3c37
+ mov dx, 001cfh ; ba cf 01 ; 0xc3c38 vbe.c:176
+ in ax, DX ; ed ; 0xc3c3b
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3c3c vbe.c:177
+ pop dx ; 5a ; 0xc3c3f
+ pop bp ; 5d ; 0xc3c40
+ retn ; c3 ; 0xc3c41
+ ; disGetNextSymbol 0xc3c42 LB 0x677 -> off=0x0 cb=000000000000001a uValue=00000000000c3c42 'dispi_set_id'
+dispi_set_id: ; 0xc3c42 LB 0x1a
+ push bp ; 55 ; 0xc3c42 vbe.c:179
+ mov bp, sp ; 89 e5 ; 0xc3c43
+ push bx ; 53 ; 0xc3c45
+ push dx ; 52 ; 0xc3c46
+ mov bx, ax ; 89 c3 ; 0xc3c47
+ xor ax, ax ; 31 c0 ; 0xc3c49 vbe.c:181
+ mov dx, 001ceh ; ba ce 01 ; 0xc3c4b
+ out DX, ax ; ef ; 0xc3c4e
+ mov ax, bx ; 89 d8 ; 0xc3c4f vbe.c:182
+ mov dx, 001cfh ; ba cf 01 ; 0xc3c51
+ out DX, ax ; ef ; 0xc3c54
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3c55 vbe.c:183
+ pop dx ; 5a ; 0xc3c58
+ pop bx ; 5b ; 0xc3c59
+ pop bp ; 5d ; 0xc3c5a
+ retn ; c3 ; 0xc3c5b
+ ; disGetNextSymbol 0xc3c5c LB 0x65d -> off=0x0 cb=000000000000002a uValue=00000000000c3c5c 'vbe_init'
+vbe_init: ; 0xc3c5c LB 0x2a
+ push bp ; 55 ; 0xc3c5c vbe.c:188
+ mov bp, sp ; 89 e5 ; 0xc3c5d
+ push bx ; 53 ; 0xc3c5f
+ mov ax, 0b0c0h ; b8 c0 b0 ; 0xc3c60 vbe.c:190
+ call 03c42h ; e8 dc ff ; 0xc3c63
+ call 03c2eh ; e8 c5 ff ; 0xc3c66 vbe.c:191
+ cmp ax, 0b0c0h ; 3d c0 b0 ; 0xc3c69
+ jne short 03c80h ; 75 12 ; 0xc3c6c
+ mov bx, 000b9h ; bb b9 00 ; 0xc3c6e vbe.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3c71
+ mov es, ax ; 8e c0 ; 0xc3c74
+ mov byte [es:bx], 001h ; 26 c6 07 01 ; 0xc3c76
+ mov ax, 0b0c4h ; b8 c4 b0 ; 0xc3c7a vbe.c:194
+ call 03c42h ; e8 c2 ff ; 0xc3c7d
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3c80 vbe.c:199
+ pop bx ; 5b ; 0xc3c83
+ pop bp ; 5d ; 0xc3c84
+ retn ; c3 ; 0xc3c85
+ ; disGetNextSymbol 0xc3c86 LB 0x633 -> off=0x0 cb=000000000000006c uValue=00000000000c3c86 'mode_info_find_mode'
+mode_info_find_mode: ; 0xc3c86 LB 0x6c
+ push bp ; 55 ; 0xc3c86 vbe.c:202
+ mov bp, sp ; 89 e5 ; 0xc3c87
+ push bx ; 53 ; 0xc3c89
+ push cx ; 51 ; 0xc3c8a
+ push si ; 56 ; 0xc3c8b
+ push di ; 57 ; 0xc3c8c
+ mov di, ax ; 89 c7 ; 0xc3c8d
+ mov si, dx ; 89 d6 ; 0xc3c8f
+ xor dx, dx ; 31 d2 ; 0xc3c91 vbe.c:208
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3c93
+ call 03c08h ; e8 6f ff ; 0xc3c96
+ cmp ax, 077cch ; 3d cc 77 ; 0xc3c99 vbe.c:209
+ jne short 03ce7h ; 75 49 ; 0xc3c9c
+ test si, si ; 85 f6 ; 0xc3c9e vbe.c:213
+ je short 03cb5h ; 74 13 ; 0xc3ca0
+ mov ax, strict word 0000bh ; b8 0b 00 ; 0xc3ca2 vbe.c:220
+ mov dx, 001ceh ; ba ce 01 ; 0xc3ca5
+ call 00570h ; e8 c5 c8 ; 0xc3ca8
+ mov dx, 001cfh ; ba cf 01 ; 0xc3cab vbe.c:221
+ call 00577h ; e8 c6 c8 ; 0xc3cae
+ test ax, ax ; 85 c0 ; 0xc3cb1 vbe.c:222
+ je short 03ce9h ; 74 34 ; 0xc3cb3
+ mov bx, strict word 00004h ; bb 04 00 ; 0xc3cb5 vbe.c:226
+ mov dx, bx ; 89 da ; 0xc3cb8 vbe.c:232
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3cba
+ call 03c08h ; e8 48 ff ; 0xc3cbd
+ mov cx, ax ; 89 c1 ; 0xc3cc0
+ cmp cx, strict byte 0ffffh ; 83 f9 ff ; 0xc3cc2 vbe.c:233
+ je short 03ce7h ; 74 20 ; 0xc3cc5
+ lea dx, [bx+002h] ; 8d 57 02 ; 0xc3cc7 vbe.c:235
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3cca
+ call 03c08h ; e8 38 ff ; 0xc3ccd
+ lea dx, [bx+044h] ; 8d 57 44 ; 0xc3cd0
+ cmp cx, di ; 39 f9 ; 0xc3cd3 vbe.c:237
+ jne short 03ce3h ; 75 0c ; 0xc3cd5
+ test si, si ; 85 f6 ; 0xc3cd7 vbe.c:239
+ jne short 03cdfh ; 75 04 ; 0xc3cd9
+ mov ax, bx ; 89 d8 ; 0xc3cdb vbe.c:240
+ jmp short 03ce9h ; eb 0a ; 0xc3cdd
+ test AL, strict byte 080h ; a8 80 ; 0xc3cdf vbe.c:241
+ jne short 03cdbh ; 75 f8 ; 0xc3ce1
+ mov bx, dx ; 89 d3 ; 0xc3ce3 vbe.c:244
+ jmp short 03cbah ; eb d3 ; 0xc3ce5 vbe.c:249
+ xor ax, ax ; 31 c0 ; 0xc3ce7 vbe.c:252
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc3ce9 vbe.c:253
+ pop di ; 5f ; 0xc3cec
+ pop si ; 5e ; 0xc3ced
+ pop cx ; 59 ; 0xc3cee
+ pop bx ; 5b ; 0xc3cef
+ pop bp ; 5d ; 0xc3cf0
+ retn ; c3 ; 0xc3cf1
+ ; disGetNextSymbol 0xc3cf2 LB 0x5c7 -> off=0x0 cb=0000000000000125 uValue=00000000000c3cf2 'vbe_biosfn_return_controller_information'
+vbe_biosfn_return_controller_information: ; 0xc3cf2 LB 0x125
+ push bp ; 55 ; 0xc3cf2 vbe.c:284
+ mov bp, sp ; 89 e5 ; 0xc3cf3
+ push cx ; 51 ; 0xc3cf5
+ push si ; 56 ; 0xc3cf6
+ push di ; 57 ; 0xc3cf7
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc3cf8
+ mov si, ax ; 89 c6 ; 0xc3cfb
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc3cfd
+ mov di, bx ; 89 df ; 0xc3d00
+ mov word [bp-00ch], strict word 00022h ; c7 46 f4 22 00 ; 0xc3d02 vbe.c:289
+ call 005b7h ; e8 ad c8 ; 0xc3d07 vbe.c:292
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc3d0a
+ mov bx, di ; 89 fb ; 0xc3d0d vbe.c:295
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3d0f
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3d12
+ xor dx, dx ; 31 d2 ; 0xc3d15 vbe.c:298
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3d17
+ call 03c08h ; e8 eb fe ; 0xc3d1a
+ cmp ax, 077cch ; 3d cc 77 ; 0xc3d1d vbe.c:299
+ je short 03d2ch ; 74 0a ; 0xc3d20
+ push SS ; 16 ; 0xc3d22 vbe.c:301
+ pop ES ; 07 ; 0xc3d23
+ mov word [es:si], 00100h ; 26 c7 04 00 01 ; 0xc3d24
+ jmp near 03e0fh ; e9 e3 00 ; 0xc3d29 vbe.c:305
+ mov cx, strict word 00004h ; b9 04 00 ; 0xc3d2c vbe.c:307
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc3d2f vbe.c:314
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3d34 vbe.c:322
+ cmp word [es:bx+002h], 03245h ; 26 81 7f 02 45 32 ; 0xc3d37
+ jne short 03d46h ; 75 07 ; 0xc3d3d
+ cmp word [es:bx], 04256h ; 26 81 3f 56 42 ; 0xc3d3f
+ je short 03d55h ; 74 0f ; 0xc3d44
+ cmp word [es:bx+002h], 04153h ; 26 81 7f 02 53 41 ; 0xc3d46
+ jne short 03d5ah ; 75 0c ; 0xc3d4c
+ cmp word [es:bx], 04556h ; 26 81 3f 56 45 ; 0xc3d4e
+ jne short 03d5ah ; 75 05 ; 0xc3d53
+ mov word [bp-00eh], strict word 00001h ; c7 46 f2 01 00 ; 0xc3d55 vbe.c:324
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3d5a vbe.c:332
+ db 066h, 026h, 0c7h, 007h, 056h, 045h, 053h, 041h
+ ; mov dword [es:bx], strict dword 041534556h ; 66 26 c7 07 56 45 53 41 ; 0xc3d5d
+ mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3d65 vbe.c:338
+ mov word [es:bx+006h], 07e02h ; 26 c7 47 06 02 7e ; 0xc3d6b vbe.c:341
+ mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3d71
+ db 066h, 026h, 0c7h, 047h, 00ah, 001h, 000h, 000h, 000h
+ ; mov dword [es:bx+00ah], strict dword 000000001h ; 66 26 c7 47 0a 01 00 00 00; 0xc3d75 vbe.c:344
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3d7e vbe.c:350
+ mov word [es:bx+010h], ax ; 26 89 47 10 ; 0xc3d81
+ lea ax, [di+022h] ; 8d 45 22 ; 0xc3d85 vbe.c:351
+ mov word [es:bx+00eh], ax ; 26 89 47 0e ; 0xc3d88
+ mov dx, strict word 0ffffh ; ba ff ff ; 0xc3d8c vbe.c:354
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3d8f
+ call 03c08h ; e8 73 fe ; 0xc3d92
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3d95
+ mov word [es:bx+012h], ax ; 26 89 47 12 ; 0xc3d98
+ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc3d9c vbe.c:356
+ je short 03dc6h ; 74 24 ; 0xc3da0
+ mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc3da2 vbe.c:359
+ mov word [es:bx+016h], 07e17h ; 26 c7 47 16 17 7e ; 0xc3da8 vbe.c:360
+ mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc3dae
+ mov word [es:bx+01ah], 07e34h ; 26 c7 47 1a 34 7e ; 0xc3db2 vbe.c:361
+ mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc3db8
+ mov word [es:bx+01eh], 07e55h ; 26 c7 47 1e 55 7e ; 0xc3dbc vbe.c:362
+ mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc3dc2
+ mov dx, cx ; 89 ca ; 0xc3dc6 vbe.c:369
+ add dx, strict byte 0001bh ; 83 c2 1b ; 0xc3dc8
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3dcb
+ call 03c1ah ; e8 49 fe ; 0xc3dce
+ xor ah, ah ; 30 e4 ; 0xc3dd1 vbe.c:370
+ cmp ax, word [bp-010h] ; 3b 46 f0 ; 0xc3dd3
+ jnbe short 03defh ; 77 17 ; 0xc3dd6
+ mov dx, cx ; 89 ca ; 0xc3dd8 vbe.c:372
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3dda
+ call 03c08h ; e8 28 fe ; 0xc3ddd
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc3de0 vbe.c:376
+ add bx, di ; 01 fb ; 0xc3de3
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc3de5 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3de8
+ add word [bp-00ch], strict byte 00002h ; 83 46 f4 02 ; 0xc3deb vbe.c:378
+ add cx, strict byte 00044h ; 83 c1 44 ; 0xc3def vbe.c:380
+ mov dx, cx ; 89 ca ; 0xc3df2 vbe.c:381
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3df4
+ call 03c08h ; e8 0e fe ; 0xc3df7
+ cmp ax, strict word 0ffffh ; 3d ff ff ; 0xc3dfa vbe.c:382
+ jne short 03dc6h ; 75 c7 ; 0xc3dfd
+ add di, word [bp-00ch] ; 03 7e f4 ; 0xc3dff vbe.c:385
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc3e02 vbe.c:62
+ mov word [es:di], ax ; 26 89 05 ; 0xc3e05
+ push SS ; 16 ; 0xc3e08 vbe.c:386
+ pop ES ; 07 ; 0xc3e09
+ mov word [es:si], strict word 0004fh ; 26 c7 04 4f 00 ; 0xc3e0a
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc3e0f vbe.c:387
+ pop di ; 5f ; 0xc3e12
+ pop si ; 5e ; 0xc3e13
+ pop cx ; 59 ; 0xc3e14
+ pop bp ; 5d ; 0xc3e15
+ retn ; c3 ; 0xc3e16
+ ; disGetNextSymbol 0xc3e17 LB 0x4a2 -> off=0x0 cb=000000000000009b uValue=00000000000c3e17 'vbe_biosfn_return_mode_information'
+vbe_biosfn_return_mode_information: ; 0xc3e17 LB 0x9b
+ push bp ; 55 ; 0xc3e17 vbe.c:399
+ mov bp, sp ; 89 e5 ; 0xc3e18
+ push si ; 56 ; 0xc3e1a
+ push di ; 57 ; 0xc3e1b
+ push ax ; 50 ; 0xc3e1c
+ push ax ; 50 ; 0xc3e1d
+ mov ax, dx ; 89 d0 ; 0xc3e1e
+ mov si, bx ; 89 de ; 0xc3e20
+ mov bx, cx ; 89 cb ; 0xc3e22
+ test dh, 040h ; f6 c6 40 ; 0xc3e24 vbe.c:410
+ db 00fh, 095h, 0c2h
+ ; setne dl ; 0f 95 c2 ; 0xc3e27
+ xor dh, dh ; 30 f6 ; 0xc3e2a
+ and ah, 001h ; 80 e4 01 ; 0xc3e2c vbe.c:411
+ call 03c86h ; e8 54 fe ; 0xc3e2f vbe.c:413
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc3e32
+ test ax, ax ; 85 c0 ; 0xc3e35 vbe.c:415
+ je short 03ea0h ; 74 67 ; 0xc3e37
+ mov cx, 00100h ; b9 00 01 ; 0xc3e39 vbe.c:420
+ xor ax, ax ; 31 c0 ; 0xc3e3c
+ mov di, bx ; 89 df ; 0xc3e3e
+ mov es, si ; 8e c6 ; 0xc3e40
+ jcxz 03e46h ; e3 02 ; 0xc3e42
+ rep stosb ; f3 aa ; 0xc3e44
+ xor cx, cx ; 31 c9 ; 0xc3e46 vbe.c:421
+ jmp short 03e4fh ; eb 05 ; 0xc3e48
+ cmp cx, strict byte 00042h ; 83 f9 42 ; 0xc3e4a
+ jnc short 03e68h ; 73 19 ; 0xc3e4d
+ mov dx, word [bp-006h] ; 8b 56 fa ; 0xc3e4f vbe.c:424
+ inc dx ; 42 ; 0xc3e52
+ inc dx ; 42 ; 0xc3e53
+ add dx, cx ; 01 ca ; 0xc3e54
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3e56
+ call 03c1ah ; e8 be fd ; 0xc3e59
+ mov di, bx ; 89 df ; 0xc3e5c vbe.c:425
+ add di, cx ; 01 cf ; 0xc3e5e
+ mov es, si ; 8e c6 ; 0xc3e60 vbe.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc3e62
+ inc cx ; 41 ; 0xc3e65 vbe.c:426
+ jmp short 03e4ah ; eb e2 ; 0xc3e66
+ lea di, [bx+002h] ; 8d 7f 02 ; 0xc3e68 vbe.c:427
+ mov es, si ; 8e c6 ; 0xc3e6b vbe.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc3e6d
+ test AL, strict byte 001h ; a8 01 ; 0xc3e70 vbe.c:428
+ je short 03e84h ; 74 10 ; 0xc3e72
+ lea di, [bx+00ch] ; 8d 7f 0c ; 0xc3e74 vbe.c:429
+ mov word [es:di], 00629h ; 26 c7 05 29 06 ; 0xc3e77 vbe.c:62
+ lea di, [bx+00eh] ; 8d 7f 0e ; 0xc3e7c vbe.c:431
+ mov word [es:di], 0c000h ; 26 c7 05 00 c0 ; 0xc3e7f vbe.c:62
+ mov ax, strict word 0000bh ; b8 0b 00 ; 0xc3e84 vbe.c:434
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e87
+ call 00570h ; e8 e3 c6 ; 0xc3e8a
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e8d vbe.c:435
+ call 00577h ; e8 e4 c6 ; 0xc3e90
+ add bx, strict byte 0002ah ; 83 c3 2a ; 0xc3e93
+ mov es, si ; 8e c6 ; 0xc3e96 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3e98
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc3e9b vbe.c:437
+ jmp short 03ea3h ; eb 03 ; 0xc3e9e vbe.c:438
+ mov ax, 00100h ; b8 00 01 ; 0xc3ea0 vbe.c:442
+ push SS ; 16 ; 0xc3ea3 vbe.c:445
+ pop ES ; 07 ; 0xc3ea4
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc3ea5
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3ea8
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3eab vbe.c:446
+ pop di ; 5f ; 0xc3eae
+ pop si ; 5e ; 0xc3eaf
+ pop bp ; 5d ; 0xc3eb0
+ retn ; c3 ; 0xc3eb1
+ ; disGetNextSymbol 0xc3eb2 LB 0x407 -> off=0x0 cb=00000000000000e5 uValue=00000000000c3eb2 'vbe_biosfn_set_mode'
+vbe_biosfn_set_mode: ; 0xc3eb2 LB 0xe5
+ push bp ; 55 ; 0xc3eb2 vbe.c:458
+ mov bp, sp ; 89 e5 ; 0xc3eb3
+ push si ; 56 ; 0xc3eb5
+ push di ; 57 ; 0xc3eb6
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc3eb7
+ mov si, ax ; 89 c6 ; 0xc3eba
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc3ebc
+ test byte [bp-009h], 040h ; f6 46 f7 40 ; 0xc3ebf vbe.c:466
+ db 00fh, 095h, 0c0h
+ ; setne al ; 0f 95 c0 ; 0xc3ec3
+ movzx dx, al ; 0f b6 d0 ; 0xc3ec6
+ mov ax, dx ; 89 d0 ; 0xc3ec9
+ test dx, dx ; 85 d2 ; 0xc3ecb vbe.c:467
+ je short 03ed2h ; 74 03 ; 0xc3ecd
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc3ecf
+ mov byte [bp-008h], dl ; 88 56 f8 ; 0xc3ed2
+ test byte [bp-009h], 080h ; f6 46 f7 80 ; 0xc3ed5 vbe.c:468
+ je short 03ee0h ; 74 05 ; 0xc3ed9
+ mov dx, 00080h ; ba 80 00 ; 0xc3edb
+ jmp short 03ee2h ; eb 02 ; 0xc3ede
+ xor dx, dx ; 31 d2 ; 0xc3ee0
+ mov byte [bp-006h], dl ; 88 56 fa ; 0xc3ee2
+ and byte [bp-009h], 001h ; 80 66 f7 01 ; 0xc3ee5 vbe.c:470
+ cmp word [bp-00ah], 00100h ; 81 7e f6 00 01 ; 0xc3ee9 vbe.c:473
+ jnc short 03f02h ; 73 12 ; 0xc3eee
+ xor ax, ax ; 31 c0 ; 0xc3ef0 vbe.c:477
+ call 005ddh ; e8 e8 c6 ; 0xc3ef2
+ movzx ax, byte [bp-00ah] ; 0f b6 46 f6 ; 0xc3ef5 vbe.c:481
+ call 013ddh ; e8 e1 d4 ; 0xc3ef9
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc3efc vbe.c:482
+ jmp near 03f8bh ; e9 89 00 ; 0xc3eff vbe.c:483
+ mov dx, ax ; 89 c2 ; 0xc3f02 vbe.c:486
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3f04
+ call 03c86h ; e8 7c fd ; 0xc3f07
+ mov bx, ax ; 89 c3 ; 0xc3f0a
+ test ax, ax ; 85 c0 ; 0xc3f0c vbe.c:488
+ je short 03f88h ; 74 78 ; 0xc3f0e
+ lea dx, [bx+014h] ; 8d 57 14 ; 0xc3f10 vbe.c:493
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f13
+ call 03c08h ; e8 ef fc ; 0xc3f16
+ mov cx, ax ; 89 c1 ; 0xc3f19
+ lea dx, [bx+016h] ; 8d 57 16 ; 0xc3f1b vbe.c:494
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f1e
+ call 03c08h ; e8 e4 fc ; 0xc3f21
+ mov di, ax ; 89 c7 ; 0xc3f24
+ lea dx, [bx+01bh] ; 8d 57 1b ; 0xc3f26 vbe.c:495
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f29
+ call 03c1ah ; e8 eb fc ; 0xc3f2c
+ mov bl, al ; 88 c3 ; 0xc3f2f
+ mov dl, al ; 88 c2 ; 0xc3f31
+ xor ax, ax ; 31 c0 ; 0xc3f33 vbe.c:503
+ call 005ddh ; e8 a5 c6 ; 0xc3f35
+ cmp bl, 004h ; 80 fb 04 ; 0xc3f38 vbe.c:505
+ jne short 03f43h ; 75 06 ; 0xc3f3b
+ mov ax, strict word 0006ah ; b8 6a 00 ; 0xc3f3d vbe.c:507
+ call 013ddh ; e8 9a d4 ; 0xc3f40
+ movzx ax, dl ; 0f b6 c2 ; 0xc3f43 vbe.c:510
+ call 03b7fh ; e8 36 fc ; 0xc3f46
+ mov ax, cx ; 89 c8 ; 0xc3f49 vbe.c:511
+ call 03b28h ; e8 da fb ; 0xc3f4b
+ mov ax, di ; 89 f8 ; 0xc3f4e vbe.c:512
+ call 03b47h ; e8 f4 fb ; 0xc3f50
+ xor ax, ax ; 31 c0 ; 0xc3f53 vbe.c:513
+ call 00603h ; e8 ab c6 ; 0xc3f55
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3f58 vbe.c:514
+ or AL, strict byte 001h ; 0c 01 ; 0xc3f5b
+ movzx dx, al ; 0f b6 d0 ; 0xc3f5d
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc3f60
+ or ax, dx ; 09 d0 ; 0xc3f64
+ call 005ddh ; e8 74 c6 ; 0xc3f66
+ call 006d2h ; e8 66 c7 ; 0xc3f69 vbe.c:515
+ mov bx, 000bah ; bb ba 00 ; 0xc3f6c vbe.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3f6f
+ mov es, ax ; 8e c0 ; 0xc3f72
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3f74
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3f77
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3f7a vbe.c:518
+ or AL, strict byte 060h ; 0c 60 ; 0xc3f7d
+ mov bx, 00087h ; bb 87 00 ; 0xc3f7f vbe.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3f82
+ jmp near 03efch ; e9 74 ff ; 0xc3f85
+ mov ax, 00100h ; b8 00 01 ; 0xc3f88 vbe.c:527
+ push SS ; 16 ; 0xc3f8b vbe.c:531
+ pop ES ; 07 ; 0xc3f8c
+ mov word [es:si], ax ; 26 89 04 ; 0xc3f8d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3f90 vbe.c:532
+ pop di ; 5f ; 0xc3f93
+ pop si ; 5e ; 0xc3f94
+ pop bp ; 5d ; 0xc3f95
+ retn ; c3 ; 0xc3f96
+ ; disGetNextSymbol 0xc3f97 LB 0x322 -> off=0x0 cb=0000000000000008 uValue=00000000000c3f97 'vbe_biosfn_read_video_state_size'
+vbe_biosfn_read_video_state_size: ; 0xc3f97 LB 0x8
+ push bp ; 55 ; 0xc3f97 vbe.c:534
+ mov bp, sp ; 89 e5 ; 0xc3f98
+ mov ax, strict word 00012h ; b8 12 00 ; 0xc3f9a vbe.c:537
+ pop bp ; 5d ; 0xc3f9d
+ retn ; c3 ; 0xc3f9e
+ ; disGetNextSymbol 0xc3f9f LB 0x31a -> off=0x0 cb=000000000000004b uValue=00000000000c3f9f 'vbe_biosfn_save_video_state'
+vbe_biosfn_save_video_state: ; 0xc3f9f LB 0x4b
+ push bp ; 55 ; 0xc3f9f vbe.c:539
+ mov bp, sp ; 89 e5 ; 0xc3fa0
+ push bx ; 53 ; 0xc3fa2
+ push cx ; 51 ; 0xc3fa3
+ push si ; 56 ; 0xc3fa4
+ mov si, ax ; 89 c6 ; 0xc3fa5
+ mov bx, dx ; 89 d3 ; 0xc3fa7
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc3fa9 vbe.c:543
+ mov dx, 001ceh ; ba ce 01 ; 0xc3fac
+ out DX, ax ; ef ; 0xc3faf
+ mov dx, 001cfh ; ba cf 01 ; 0xc3fb0 vbe.c:544
+ in ax, DX ; ed ; 0xc3fb3
+ mov es, si ; 8e c6 ; 0xc3fb4 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3fb6
+ inc bx ; 43 ; 0xc3fb9 vbe.c:546
+ inc bx ; 43 ; 0xc3fba
+ test AL, strict byte 001h ; a8 01 ; 0xc3fbb vbe.c:547
+ je short 03fe2h ; 74 23 ; 0xc3fbd
+ mov cx, strict word 00001h ; b9 01 00 ; 0xc3fbf vbe.c:549
+ jmp short 03fc9h ; eb 05 ; 0xc3fc2
+ cmp cx, strict byte 00009h ; 83 f9 09 ; 0xc3fc4
+ jnbe short 03fe2h ; 77 19 ; 0xc3fc7
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc3fc9 vbe.c:550
+ je short 03fdfh ; 74 11 ; 0xc3fcc
+ mov ax, cx ; 89 c8 ; 0xc3fce vbe.c:551
+ mov dx, 001ceh ; ba ce 01 ; 0xc3fd0
+ out DX, ax ; ef ; 0xc3fd3
+ mov dx, 001cfh ; ba cf 01 ; 0xc3fd4 vbe.c:552
+ in ax, DX ; ed ; 0xc3fd7
+ mov es, si ; 8e c6 ; 0xc3fd8 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3fda
+ inc bx ; 43 ; 0xc3fdd vbe.c:553
+ inc bx ; 43 ; 0xc3fde
+ inc cx ; 41 ; 0xc3fdf vbe.c:555
+ jmp short 03fc4h ; eb e2 ; 0xc3fe0
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc3fe2 vbe.c:556
+ pop si ; 5e ; 0xc3fe5
+ pop cx ; 59 ; 0xc3fe6
+ pop bx ; 5b ; 0xc3fe7
+ pop bp ; 5d ; 0xc3fe8
+ retn ; c3 ; 0xc3fe9
+ ; disGetNextSymbol 0xc3fea LB 0x2cf -> off=0x0 cb=000000000000008f uValue=00000000000c3fea 'vbe_biosfn_restore_video_state'
+vbe_biosfn_restore_video_state: ; 0xc3fea LB 0x8f
+ push bp ; 55 ; 0xc3fea vbe.c:559
+ mov bp, sp ; 89 e5 ; 0xc3feb
+ push bx ; 53 ; 0xc3fed
+ push cx ; 51 ; 0xc3fee
+ push si ; 56 ; 0xc3fef
+ push ax ; 50 ; 0xc3ff0
+ mov cx, ax ; 89 c1 ; 0xc3ff1
+ mov bx, dx ; 89 d3 ; 0xc3ff3
+ mov es, ax ; 8e c0 ; 0xc3ff5 vbe.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3ff7
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3ffa
+ inc bx ; 43 ; 0xc3ffd vbe.c:564
+ inc bx ; 43 ; 0xc3ffe
+ test byte [bp-008h], 001h ; f6 46 f8 01 ; 0xc3fff vbe.c:566
+ jne short 04015h ; 75 10 ; 0xc4003
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc4005 vbe.c:567
+ mov dx, 001ceh ; ba ce 01 ; 0xc4008
+ out DX, ax ; ef ; 0xc400b
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc400c vbe.c:568
+ mov dx, 001cfh ; ba cf 01 ; 0xc400f
+ out DX, ax ; ef ; 0xc4012
+ jmp short 04071h ; eb 5c ; 0xc4013 vbe.c:569
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc4015 vbe.c:570
+ mov dx, 001ceh ; ba ce 01 ; 0xc4018
+ out DX, ax ; ef ; 0xc401b
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc401c vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc401f vbe.c:58
+ out DX, ax ; ef ; 0xc4022
+ inc bx ; 43 ; 0xc4023 vbe.c:572
+ inc bx ; 43 ; 0xc4024
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc4025
+ mov dx, 001ceh ; ba ce 01 ; 0xc4028
+ out DX, ax ; ef ; 0xc402b
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc402c vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc402f vbe.c:58
+ out DX, ax ; ef ; 0xc4032
+ inc bx ; 43 ; 0xc4033 vbe.c:575
+ inc bx ; 43 ; 0xc4034
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc4035
+ mov dx, 001ceh ; ba ce 01 ; 0xc4038
+ out DX, ax ; ef ; 0xc403b
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc403c vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc403f vbe.c:58
+ out DX, ax ; ef ; 0xc4042
+ inc bx ; 43 ; 0xc4043 vbe.c:578
+ inc bx ; 43 ; 0xc4044
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc4045
+ mov dx, 001ceh ; ba ce 01 ; 0xc4048
+ out DX, ax ; ef ; 0xc404b
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc404c vbe.c:580
+ mov dx, 001cfh ; ba cf 01 ; 0xc404f
+ out DX, ax ; ef ; 0xc4052
+ mov si, strict word 00005h ; be 05 00 ; 0xc4053 vbe.c:582
+ jmp short 0405dh ; eb 05 ; 0xc4056
+ cmp si, strict byte 00009h ; 83 fe 09 ; 0xc4058
+ jnbe short 04071h ; 77 14 ; 0xc405b
+ mov ax, si ; 89 f0 ; 0xc405d vbe.c:583
+ mov dx, 001ceh ; ba ce 01 ; 0xc405f
+ out DX, ax ; ef ; 0xc4062
+ mov es, cx ; 8e c1 ; 0xc4063 vbe.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc4065
+ mov dx, 001cfh ; ba cf 01 ; 0xc4068 vbe.c:58
+ out DX, ax ; ef ; 0xc406b
+ inc bx ; 43 ; 0xc406c vbe.c:585
+ inc bx ; 43 ; 0xc406d
+ inc si ; 46 ; 0xc406e vbe.c:586
+ jmp short 04058h ; eb e7 ; 0xc406f
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc4071 vbe.c:588
+ pop si ; 5e ; 0xc4074
+ pop cx ; 59 ; 0xc4075
+ pop bx ; 5b ; 0xc4076
+ pop bp ; 5d ; 0xc4077
+ retn ; c3 ; 0xc4078
+ ; disGetNextSymbol 0xc4079 LB 0x240 -> off=0x0 cb=000000000000008c uValue=00000000000c4079 'vbe_biosfn_save_restore_state'
+vbe_biosfn_save_restore_state: ; 0xc4079 LB 0x8c
+ push bp ; 55 ; 0xc4079 vbe.c:604
+ mov bp, sp ; 89 e5 ; 0xc407a
+ push si ; 56 ; 0xc407c
+ push di ; 57 ; 0xc407d
+ push ax ; 50 ; 0xc407e
+ mov si, ax ; 89 c6 ; 0xc407f
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc4081
+ mov ax, bx ; 89 d8 ; 0xc4084
+ mov bx, word [bp+004h] ; 8b 5e 04 ; 0xc4086
+ mov di, strict word 0004fh ; bf 4f 00 ; 0xc4089 vbe.c:609
+ xor ah, ah ; 30 e4 ; 0xc408c vbe.c:610
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc408e
+ je short 040d8h ; 74 45 ; 0xc4091
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc4093
+ je short 040bch ; 74 24 ; 0xc4096
+ test ax, ax ; 85 c0 ; 0xc4098
+ jne short 040f4h ; 75 58 ; 0xc409a
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc409c vbe.c:612
+ call 03024h ; e8 82 ef ; 0xc409f
+ mov cx, ax ; 89 c1 ; 0xc40a2
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc40a4 vbe.c:616
+ je short 040afh ; 74 05 ; 0xc40a8
+ call 03f97h ; e8 ea fe ; 0xc40aa vbe.c:617
+ add ax, cx ; 01 c8 ; 0xc40ad
+ add ax, strict word 0003fh ; 05 3f 00 ; 0xc40af vbe.c:618
+ shr ax, 006h ; c1 e8 06 ; 0xc40b2
+ push SS ; 16 ; 0xc40b5
+ pop ES ; 07 ; 0xc40b6
+ mov word [es:bx], ax ; 26 89 07 ; 0xc40b7
+ jmp short 040f7h ; eb 3b ; 0xc40ba vbe.c:619
+ push SS ; 16 ; 0xc40bc vbe.c:621
+ pop ES ; 07 ; 0xc40bd
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc40be
+ mov dx, cx ; 89 ca ; 0xc40c1 vbe.c:622
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc40c3
+ call 0305fh ; e8 96 ef ; 0xc40c6
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc40c9 vbe.c:626
+ je short 040f7h ; 74 28 ; 0xc40cd
+ mov dx, ax ; 89 c2 ; 0xc40cf vbe.c:627
+ mov ax, cx ; 89 c8 ; 0xc40d1
+ call 03f9fh ; e8 c9 fe ; 0xc40d3
+ jmp short 040f7h ; eb 1f ; 0xc40d6 vbe.c:628
+ push SS ; 16 ; 0xc40d8 vbe.c:630
+ pop ES ; 07 ; 0xc40d9
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc40da
+ mov dx, cx ; 89 ca ; 0xc40dd vbe.c:631
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc40df
+ call 03335h ; e8 50 f2 ; 0xc40e2
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc40e5 vbe.c:635
+ je short 040f7h ; 74 0c ; 0xc40e9
+ mov dx, ax ; 89 c2 ; 0xc40eb vbe.c:636
+ mov ax, cx ; 89 c8 ; 0xc40ed
+ call 03feah ; e8 f8 fe ; 0xc40ef
+ jmp short 040f7h ; eb 03 ; 0xc40f2 vbe.c:637
+ mov di, 00100h ; bf 00 01 ; 0xc40f4 vbe.c:640
+ push SS ; 16 ; 0xc40f7 vbe.c:643
+ pop ES ; 07 ; 0xc40f8
+ mov word [es:si], di ; 26 89 3c ; 0xc40f9
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc40fc vbe.c:644
+ pop di ; 5f ; 0xc40ff
+ pop si ; 5e ; 0xc4100
+ pop bp ; 5d ; 0xc4101
+ retn 00002h ; c2 02 00 ; 0xc4102
+ ; disGetNextSymbol 0xc4105 LB 0x1b4 -> off=0x0 cb=00000000000000cf uValue=00000000000c4105 'vbe_biosfn_get_set_scanline_length'
+vbe_biosfn_get_set_scanline_length: ; 0xc4105 LB 0xcf
+ push bp ; 55 ; 0xc4105 vbe.c:665
+ mov bp, sp ; 89 e5 ; 0xc4106
+ push si ; 56 ; 0xc4108
+ push di ; 57 ; 0xc4109
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc410a
+ push ax ; 50 ; 0xc410d
+ mov di, dx ; 89 d7 ; 0xc410e
+ mov si, bx ; 89 de ; 0xc4110
+ mov word [bp-008h], cx ; 89 4e f8 ; 0xc4112
+ call 03b9eh ; e8 86 fa ; 0xc4115 vbe.c:674
+ cmp AL, strict byte 00fh ; 3c 0f ; 0xc4118 vbe.c:675
+ jne short 04121h ; 75 05 ; 0xc411a
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc411c
+ jmp short 04124h ; eb 03 ; 0xc411f
+ movzx cx, al ; 0f b6 c8 ; 0xc4121
+ call 03bd6h ; e8 af fa ; 0xc4124 vbe.c:676
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc4127
+ mov word [bp-006h], strict word 0004fh ; c7 46 fa 4f 00 ; 0xc412a vbe.c:677
+ push SS ; 16 ; 0xc412f vbe.c:678
+ pop ES ; 07 ; 0xc4130
+ mov bx, word [es:si] ; 26 8b 1c ; 0xc4131
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc4134 vbe.c:679
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc4137 vbe.c:683
+ je short 04146h ; 74 0b ; 0xc4139
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc413b
+ je short 0416dh ; 74 2e ; 0xc413d
+ test al, al ; 84 c0 ; 0xc413f
+ je short 04168h ; 74 25 ; 0xc4141
+ jmp near 041bdh ; e9 77 00 ; 0xc4143
+ cmp cl, 004h ; 80 f9 04 ; 0xc4146 vbe.c:685
+ jne short 04150h ; 75 05 ; 0xc4149
+ sal bx, 003h ; c1 e3 03 ; 0xc414b vbe.c:686
+ jmp short 04168h ; eb 18 ; 0xc414e vbe.c:687
+ movzx ax, cl ; 0f b6 c1 ; 0xc4150 vbe.c:688
+ cwd ; 99 ; 0xc4153
+ sal dx, 003h ; c1 e2 03 ; 0xc4154
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc4157
+ sar ax, 003h ; c1 f8 03 ; 0xc4159
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc415c
+ mov ax, bx ; 89 d8 ; 0xc415f
+ xor dx, dx ; 31 d2 ; 0xc4161
+ div word [bp-00ch] ; f7 76 f4 ; 0xc4163
+ mov bx, ax ; 89 c3 ; 0xc4166
+ mov ax, bx ; 89 d8 ; 0xc4168 vbe.c:691
+ call 03bb7h ; e8 4a fa ; 0xc416a
+ call 03bd6h ; e8 66 fa ; 0xc416d vbe.c:694
+ mov bx, ax ; 89 c3 ; 0xc4170
+ push SS ; 16 ; 0xc4172 vbe.c:695
+ pop ES ; 07 ; 0xc4173
+ mov word [es:si], ax ; 26 89 04 ; 0xc4174
+ cmp cl, 004h ; 80 f9 04 ; 0xc4177 vbe.c:696
+ jne short 04181h ; 75 05 ; 0xc417a
+ shr bx, 003h ; c1 eb 03 ; 0xc417c vbe.c:697
+ jmp short 04190h ; eb 0f ; 0xc417f vbe.c:698
+ movzx ax, cl ; 0f b6 c1 ; 0xc4181 vbe.c:699
+ cwd ; 99 ; 0xc4184
+ sal dx, 003h ; c1 e2 03 ; 0xc4185
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc4188
+ sar ax, 003h ; c1 f8 03 ; 0xc418a
+ imul bx, ax ; 0f af d8 ; 0xc418d
+ add bx, strict byte 00003h ; 83 c3 03 ; 0xc4190 vbe.c:700
+ and bl, 0fch ; 80 e3 fc ; 0xc4193
+ push SS ; 16 ; 0xc4196 vbe.c:701
+ pop ES ; 07 ; 0xc4197
+ mov word [es:di], bx ; 26 89 1d ; 0xc4198
+ call 03befh ; e8 51 fa ; 0xc419b vbe.c:702
+ push SS ; 16 ; 0xc419e
+ pop ES ; 07 ; 0xc419f
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc41a0
+ mov word [es:bx], ax ; 26 89 07 ; 0xc41a3
+ call 03b66h ; e8 bd f9 ; 0xc41a6 vbe.c:703
+ push SS ; 16 ; 0xc41a9
+ pop ES ; 07 ; 0xc41aa
+ cmp ax, word [es:bx] ; 26 3b 07 ; 0xc41ab
+ jbe short 041c2h ; 76 12 ; 0xc41ae
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc41b0 vbe.c:704
+ call 03bb7h ; e8 01 fa ; 0xc41b3
+ mov word [bp-006h], 00200h ; c7 46 fa 00 02 ; 0xc41b6 vbe.c:705
+ jmp short 041c2h ; eb 05 ; 0xc41bb vbe.c:707
+ mov word [bp-006h], 00100h ; c7 46 fa 00 01 ; 0xc41bd vbe.c:710
+ push SS ; 16 ; 0xc41c2 vbe.c:713
+ pop ES ; 07 ; 0xc41c3
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc41c4
+ mov bx, word [bp-00eh] ; 8b 5e f2 ; 0xc41c7
+ mov word [es:bx], ax ; 26 89 07 ; 0xc41ca
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc41cd vbe.c:714
+ pop di ; 5f ; 0xc41d0
+ pop si ; 5e ; 0xc41d1
+ pop bp ; 5d ; 0xc41d2
+ retn ; c3 ; 0xc41d3
+ ; disGetNextSymbol 0xc41d4 LB 0xe5 -> off=0x0 cb=00000000000000e5 uValue=00000000000c41d4 'private_biosfn_custom_mode'
+private_biosfn_custom_mode: ; 0xc41d4 LB 0xe5
+ push bp ; 55 ; 0xc41d4 vbe.c:740
+ mov bp, sp ; 89 e5 ; 0xc41d5
+ push si ; 56 ; 0xc41d7
+ push di ; 57 ; 0xc41d8
+ push ax ; 50 ; 0xc41d9
+ push ax ; 50 ; 0xc41da
+ push ax ; 50 ; 0xc41db
+ mov si, dx ; 89 d6 ; 0xc41dc
+ mov dx, cx ; 89 ca ; 0xc41de
+ mov di, strict word 0004fh ; bf 4f 00 ; 0xc41e0 vbe.c:753
+ push SS ; 16 ; 0xc41e3 vbe.c:754
+ pop ES ; 07 ; 0xc41e4
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc41e5
+ test al, al ; 84 c0 ; 0xc41e8 vbe.c:755
+ jne short 0420eh ; 75 22 ; 0xc41ea
+ push SS ; 16 ; 0xc41ec vbe.c:757
+ pop ES ; 07 ; 0xc41ed
+ mov cx, word [es:bx] ; 26 8b 0f ; 0xc41ee
+ mov bx, dx ; 89 d3 ; 0xc41f1 vbe.c:758
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc41f3
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc41f6 vbe.c:759
+ shr ax, 008h ; c1 e8 08 ; 0xc41f9
+ and ax, strict word 0007fh ; 25 7f 00 ; 0xc41fc
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc41ff
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc4202 vbe.c:764
+ je short 04214h ; 74 0e ; 0xc4204
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc4206
+ je short 04214h ; 74 0a ; 0xc4208
+ cmp AL, strict byte 020h ; 3c 20 ; 0xc420a
+ je short 04214h ; 74 06 ; 0xc420c
+ mov di, 00100h ; bf 00 01 ; 0xc420e vbe.c:765
+ jmp near 042aah ; e9 96 00 ; 0xc4211 vbe.c:766
+ push SS ; 16 ; 0xc4214 vbe.c:770
+ pop ES ; 07 ; 0xc4215
+ test byte [es:si+001h], 080h ; 26 f6 44 01 80 ; 0xc4216
+ je short 04222h ; 74 05 ; 0xc421b
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc421d
+ jmp short 04224h ; eb 02 ; 0xc4220
+ xor ax, ax ; 31 c0 ; 0xc4222
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc4224
+ cmp cx, 00280h ; 81 f9 80 02 ; 0xc4227 vbe.c:773
+ jnc short 04232h ; 73 05 ; 0xc422b
+ mov cx, 00280h ; b9 80 02 ; 0xc422d vbe.c:774
+ jmp short 0423bh ; eb 09 ; 0xc4230 vbe.c:775
+ cmp cx, 00a00h ; 81 f9 00 0a ; 0xc4232
+ jbe short 0423bh ; 76 03 ; 0xc4236
+ mov cx, 00a00h ; b9 00 0a ; 0xc4238 vbe.c:776
+ cmp bx, 001e0h ; 81 fb e0 01 ; 0xc423b vbe.c:777
+ jnc short 04246h ; 73 05 ; 0xc423f
+ mov bx, 001e0h ; bb e0 01 ; 0xc4241 vbe.c:778
+ jmp short 0424fh ; eb 09 ; 0xc4244 vbe.c:779
+ cmp bx, 00780h ; 81 fb 80 07 ; 0xc4246
+ jbe short 0424fh ; 76 03 ; 0xc424a
+ mov bx, 00780h ; bb 80 07 ; 0xc424c vbe.c:780
+ mov dx, strict word 0ffffh ; ba ff ff ; 0xc424f vbe.c:786
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4252
+ call 03c08h ; e8 b0 f9 ; 0xc4255
+ mov si, ax ; 89 c6 ; 0xc4258
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc425a vbe.c:789
+ cwd ; 99 ; 0xc425e
+ sal dx, 003h ; c1 e2 03 ; 0xc425f
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc4262
+ sar ax, 003h ; c1 f8 03 ; 0xc4264
+ imul ax, cx ; 0f af c1 ; 0xc4267
+ add ax, strict word 00003h ; 05 03 00 ; 0xc426a vbe.c:790
+ and AL, strict byte 0fch ; 24 fc ; 0xc426d
+ mov dx, bx ; 89 da ; 0xc426f vbe.c:792
+ mul dx ; f7 e2 ; 0xc4271
+ cmp dx, si ; 39 f2 ; 0xc4273 vbe.c:794
+ jnbe short 0427dh ; 77 06 ; 0xc4275
+ jne short 04282h ; 75 09 ; 0xc4277
+ test ax, ax ; 85 c0 ; 0xc4279
+ jbe short 04282h ; 76 05 ; 0xc427b
+ mov di, 00200h ; bf 00 02 ; 0xc427d vbe.c:796
+ jmp short 042aah ; eb 28 ; 0xc4280 vbe.c:797
+ xor ax, ax ; 31 c0 ; 0xc4282 vbe.c:801
+ call 005ddh ; e8 56 c3 ; 0xc4284
+ movzx ax, byte [bp-008h] ; 0f b6 46 f8 ; 0xc4287 vbe.c:802
+ call 03b7fh ; e8 f1 f8 ; 0xc428b
+ mov ax, cx ; 89 c8 ; 0xc428e vbe.c:803
+ call 03b28h ; e8 95 f8 ; 0xc4290
+ mov ax, bx ; 89 d8 ; 0xc4293 vbe.c:804
+ call 03b47h ; e8 af f8 ; 0xc4295
+ xor ax, ax ; 31 c0 ; 0xc4298 vbe.c:805
+ call 00603h ; e8 66 c3 ; 0xc429a
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc429d vbe.c:806
+ or AL, strict byte 001h ; 0c 01 ; 0xc42a0
+ xor ah, ah ; 30 e4 ; 0xc42a2
+ call 005ddh ; e8 36 c3 ; 0xc42a4
+ call 006d2h ; e8 28 c4 ; 0xc42a7 vbe.c:807
+ push SS ; 16 ; 0xc42aa vbe.c:815
+ pop ES ; 07 ; 0xc42ab
+ mov bx, word [bp-00ah] ; 8b 5e f6 ; 0xc42ac
+ mov word [es:bx], di ; 26 89 3f ; 0xc42af
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc42b2 vbe.c:816
+ pop di ; 5f ; 0xc42b5
+ pop si ; 5e ; 0xc42b6
+ pop bp ; 5d ; 0xc42b7
+ retn ; c3 ; 0xc42b8
+
+ ; Padding 0x387 bytes at 0xc42b9
+ times 903 db 0
+
+section VBE32 progbits vstart=0x4640 align=1 ; size=0x115 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc4640 LB 0x115 -> off=0x0 cb=0000000000000114 uValue=00000000000c0000 'vesa_pm_start'
+vesa_pm_start: ; 0xc4640 LB 0x114
+ sbb byte [bx+si], al ; 18 00 ; 0xc4640
+ dec di ; 4f ; 0xc4642
+ add byte [bx+si], dl ; 00 10 ; 0xc4643
+ add word [bx+si], cx ; 01 08 ; 0xc4645
+ add dh, cl ; 00 ce ; 0xc4647
+ add di, cx ; 01 cf ; 0xc4649
+ add di, cx ; 01 cf ; 0xc464b
+ add ax, dx ; 01 d0 ; 0xc464d
+ add word [bp-048fdh], si ; 01 b6 03 b7 ; 0xc464f
+ db 003h, 0ffh
+ ; add di, di ; 03 ff ; 0xc4653
+ db 0ffh
+ db 0ffh
+ jmp word [bp-07dh] ; ff 66 83 ; 0xc4657
+ sti ; fb ; 0xc465a
+ add byte [si+005h], dh ; 00 74 05 ; 0xc465b
+ mov eax, strict dword 066c30100h ; 66 b8 00 01 c3 66 ; 0xc465e vberom.asm:825
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc4664
+ push edx ; 66 52 ; 0xc4666 vberom.asm:829
+ push eax ; 66 50 ; 0xc4668 vberom.asm:830
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc466a vberom.asm:831
+ add ax, 06600h ; 05 00 66 ; 0xc4670
+ out DX, ax ; ef ; 0xc4673
+ pop eax ; 66 58 ; 0xc4674 vberom.asm:834
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc4676 vberom.asm:835
+ in eax, DX ; 66 ed ; 0xc467c vberom.asm:837
+ pop edx ; 66 5a ; 0xc467e vberom.asm:838
+ db 066h, 03bh, 0d0h
+ ; cmp edx, eax ; 66 3b d0 ; 0xc4680 vberom.asm:839
+ jne short 0468ah ; 75 05 ; 0xc4683 vberom.asm:840
+ mov eax, strict dword 066c3004fh ; 66 b8 4f 00 c3 66 ; 0xc4685 vberom.asm:841
+ mov ax, 0014fh ; b8 4f 01 ; 0xc468b
+ retn ; c3 ; 0xc468e vberom.asm:845
+ cmp bl, 080h ; 80 fb 80 ; 0xc468f vberom.asm:847
+ je short 0469eh ; 74 0a ; 0xc4692 vberom.asm:848
+ cmp bl, 000h ; 80 fb 00 ; 0xc4694 vberom.asm:849
+ je short 046aeh ; 74 15 ; 0xc4697 vberom.asm:850
+ mov eax, strict dword 052c30100h ; 66 b8 00 01 c3 52 ; 0xc4699 vberom.asm:851
+ mov edx, strict dword 0a8ec03dah ; 66 ba da 03 ec a8 ; 0xc469f vberom.asm:855
+ or byte [di-005h], dh ; 08 75 fb ; 0xc46a5
+ in AL, DX ; ec ; 0xc46a8 vberom.asm:861
+ test AL, strict byte 008h ; a8 08 ; 0xc46a9 vberom.asm:862
+ je short 046a8h ; 74 fb ; 0xc46ab vberom.asm:863
+ pop dx ; 5a ; 0xc46ad vberom.asm:864
+ push ax ; 50 ; 0xc46ae vberom.asm:868
+ push cx ; 51 ; 0xc46af vberom.asm:869
+ push dx ; 52 ; 0xc46b0 vberom.asm:870
+ push si ; 56 ; 0xc46b1 vberom.asm:871
+ push di ; 57 ; 0xc46b2 vberom.asm:872
+ sal dx, 010h ; c1 e2 10 ; 0xc46b3 vberom.asm:873
+ and cx, strict word 0ffffh ; 81 e1 ff ff ; 0xc46b6 vberom.asm:874
+ add byte [bx+si], al ; 00 00 ; 0xc46ba
+ db 00bh, 0cah
+ ; or cx, dx ; 0b ca ; 0xc46bc vberom.asm:875
+ sal cx, 002h ; c1 e1 02 ; 0xc46be vberom.asm:876
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1 ; 0xc46c1 vberom.asm:877
+ push ax ; 50 ; 0xc46c3 vberom.asm:878
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc46c4 vberom.asm:879
+ push ES ; 06 ; 0xc46ca
+ add byte [bp-011h], ah ; 00 66 ef ; 0xc46cb
+ mov edx, strict dword 0ed6601cfh ; 66 ba cf 01 66 ed ; 0xc46ce vberom.asm:882
+ db 00fh, 0b7h, 0c8h
+ ; movzx cx, ax ; 0f b7 c8 ; 0xc46d4 vberom.asm:884
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc46d7 vberom.asm:885
+ add ax, word [bx+si] ; 03 00 ; 0xc46dd
+ out DX, eax ; 66 ef ; 0xc46df vberom.asm:887
+ mov edx, strict dword 0ed6601cfh ; 66 ba cf 01 66 ed ; 0xc46e1 vberom.asm:888
+ db 00fh, 0b7h, 0f0h
+ ; movzx si, ax ; 0f b7 f0 ; 0xc46e7 vberom.asm:890
+ pop ax ; 58 ; 0xc46ea vberom.asm:891
+ cmp si, strict byte 00004h ; 83 fe 04 ; 0xc46eb vberom.asm:893
+ je short 04707h ; 74 17 ; 0xc46ee vberom.asm:894
+ add si, strict byte 00007h ; 83 c6 07 ; 0xc46f0 vberom.asm:895
+ shr si, 003h ; c1 ee 03 ; 0xc46f3 vberom.asm:896
+ imul cx, si ; 0f af ce ; 0xc46f6 vberom.asm:897
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc46f9 vberom.asm:898
+ div cx ; f7 f1 ; 0xc46fb vberom.asm:899
+ db 08bh, 0f8h
+ ; mov di, ax ; 8b f8 ; 0xc46fd vberom.asm:900
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc46ff vberom.asm:901
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc4701 vberom.asm:902
+ div si ; f7 f6 ; 0xc4703 vberom.asm:903
+ jmp short 04713h ; eb 0c ; 0xc4705 vberom.asm:904
+ shr cx, 1 ; d1 e9 ; 0xc4707 vberom.asm:907
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc4709 vberom.asm:908
+ div cx ; f7 f1 ; 0xc470b vberom.asm:909
+ db 08bh, 0f8h
+ ; mov di, ax ; 8b f8 ; 0xc470d vberom.asm:910
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc470f vberom.asm:911
+ sal ax, 1 ; d1 e0 ; 0xc4711 vberom.asm:912
+ push edx ; 66 52 ; 0xc4713 vberom.asm:915
+ push eax ; 66 50 ; 0xc4715 vberom.asm:916
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc4717 vberom.asm:917
+ or byte [bx+si], al ; 08 00 ; 0xc471d
+ out DX, eax ; 66 ef ; 0xc471f vberom.asm:919
+ pop eax ; 66 58 ; 0xc4721 vberom.asm:920
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc4723 vberom.asm:921
+ pop edx ; 66 5a ; 0xc4729 vberom.asm:923
+ db 066h, 08bh, 0c7h
+ ; mov eax, edi ; 66 8b c7 ; 0xc472b vberom.asm:925
+ push edx ; 66 52 ; 0xc472e vberom.asm:926
+ push eax ; 66 50 ; 0xc4730 vberom.asm:927
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc4732 vberom.asm:928
+ or word [bx+si], ax ; 09 00 ; 0xc4738
+ out DX, eax ; 66 ef ; 0xc473a vberom.asm:930
+ pop eax ; 66 58 ; 0xc473c vberom.asm:931
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc473e vberom.asm:932
+ pop edx ; 66 5a ; 0xc4744 vberom.asm:934
+ pop di ; 5f ; 0xc4746 vberom.asm:936
+ pop si ; 5e ; 0xc4747 vberom.asm:937
+ pop dx ; 5a ; 0xc4748 vberom.asm:938
+ pop cx ; 59 ; 0xc4749 vberom.asm:939
+ pop ax ; 58 ; 0xc474a vberom.asm:940
+ mov eax, strict dword 066c3004fh ; 66 b8 4f 00 c3 66 ; 0xc474b vberom.asm:941
+ mov ax, 0014fh ; b8 4f 01 ; 0xc4751
+ ; disGetNextSymbol 0xc4754 LB 0x1 -> off=0x0 cb=0000000000000001 uValue=0000000000000114 'vesa_pm_end'
+vesa_pm_end: ; 0xc4754 LB 0x1
+ retn ; c3 ; 0xc4754 vberom.asm:946
+
+ ; Padding 0x2b bytes at 0xc4755
+ times 43 db 0
+
+section _DATA progbits vstart=0x4780 align=1 ; size=0x374c class=DATA group=DGROUP
+ ; disGetNextSymbol 0xc4780 LB 0x374c -> off=0x0 cb=000000000000002e uValue=00000000000c0000 '_msg_vga_init'
+_msg_vga_init: ; 0xc4780 LB 0x2e
+ db 'Oracle VM VirtualBox Version 7.0.6 VGA BIOS', 00dh, 00ah, 000h
+ ; disGetNextSymbol 0xc47ae LB 0x371e -> off=0x0 cb=0000000000000080 uValue=00000000000c002e 'vga_modes'
+vga_modes: ; 0xc47ae LB 0x80
+ db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+ db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+ db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
+ db 006h, 001h, 002h, 001h, 000h, 0b8h, 0ffh, 001h, 007h, 000h, 001h, 004h, 000h, 0b0h, 0ffh, 000h
+ db 00dh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h, 00eh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h
+ db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ ; disGetNextSymbol 0xc482e LB 0x369e -> off=0x0 cb=0000000000000010 uValue=00000000000c00ae 'line_to_vpti'
+line_to_vpti: ; 0xc482e LB 0x10
+ db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
+ ; disGetNextSymbol 0xc483e LB 0x368e -> off=0x0 cb=0000000000000004 uValue=00000000000c00be 'dac_regs'
+dac_regs: ; 0xc483e LB 0x4
+ dd 0ff3f3f3fh
+ ; disGetNextSymbol 0xc4842 LB 0x368a -> off=0x0 cb=0000000000000780 uValue=00000000000c00c2 'video_param_table'
+video_param_table: ; 0xc4842 LB 0x780
+ db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 008h, 000h, 010h, 001h, 003h, 000h, 002h, 063h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 008h, 000h, 010h, 001h, 003h, 000h, 002h, 063h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 008h, 000h, 040h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+ db 028h, 018h, 008h, 000h, 040h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+ db 050h, 018h, 008h, 000h, 040h, 001h, 001h, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+ db 0b9h, 0c2h, 0ffh, 000h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h
+ db 017h, 017h, 017h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00dh, 00fh, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 000h, 003h, 000h, 003h, 0a6h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00dh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 000h, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 028h, 018h, 008h, 000h, 020h, 009h, 00fh, 000h, 006h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 018h, 008h, 000h, 040h, 001h, 00fh, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+ db 0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+ db 0bah, 0e3h, 0ffh, 000h, 008h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 008h, 000h, 000h, 000h
+ db 018h, 000h, 000h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+ db 0bah, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 028h, 018h, 00eh, 000h, 008h, 009h, 003h, 000h, 002h, 0a3h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 014h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 00eh, 000h, 008h, 009h, 003h, 000h, 002h, 0a3h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 014h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 001h, 003h, 000h, 002h, 0a3h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 001h, 003h, 000h, 002h, 0a3h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 010h, 000h, 008h, 008h, 003h, 000h, 002h, 067h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+ db 050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 067h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+ db 050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 066h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 00fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 00fh, 0ffh
+ db 050h, 01dh, 010h, 000h, 0a0h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+ db 004h, 0c3h, 0ffh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h
+ db 03fh, 000h, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 01dh, 010h, 000h, 0a0h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+ db 004h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 028h, 018h, 008h, 000h, 020h, 001h, 00fh, 000h, 00eh, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 041h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 040h, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 008h, 009h, 00ah, 00bh, 00ch
+ db 00dh, 00eh, 00fh, 041h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 040h, 005h, 00fh, 0ffh
+ db 064h, 024h, 010h, 000h, 000h, 001h, 00fh, 000h, 006h, 0e3h, 07fh, 063h, 063h, 083h, 06bh, 01bh
+ db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
+ db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ ; disGetNextSymbol 0xc4fc2 LB 0x2f0a -> off=0x0 cb=00000000000000c0 uValue=00000000000c0842 'palette0'
+palette0: ; 0xc4fc2 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5082 LB 0x2e4a -> off=0x0 cb=00000000000000c0 uValue=00000000000c0902 'palette1'
+palette1: ; 0xc5082 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+ db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+ db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+ db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+ db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5142 LB 0x2d8a -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c2 'palette2'
+palette2: ; 0xc5142 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
+ db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
+ db 000h, 015h, 000h, 000h, 015h, 02ah, 000h, 03fh, 000h, 000h, 03fh, 02ah, 02ah, 015h, 000h, 02ah
+ db 015h, 02ah, 02ah, 03fh, 000h, 02ah, 03fh, 02ah, 000h, 015h, 015h, 000h, 015h, 03fh, 000h, 03fh
+ db 015h, 000h, 03fh, 03fh, 02ah, 015h, 015h, 02ah, 015h, 03fh, 02ah, 03fh, 015h, 02ah, 03fh, 03fh
+ db 015h, 000h, 000h, 015h, 000h, 02ah, 015h, 02ah, 000h, 015h, 02ah, 02ah, 03fh, 000h, 000h, 03fh
+ db 000h, 02ah, 03fh, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 000h, 015h, 015h, 000h, 03fh, 015h, 02ah
+ db 015h, 015h, 02ah, 03fh, 03fh, 000h, 015h, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 03fh, 02ah, 03fh
+ db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
+ db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5202 LB 0x2cca -> off=0x0 cb=0000000000000300 uValue=00000000000c0a82 'palette3'
+palette3: ; 0xc5202 LB 0x300
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 005h, 005h, 005h, 008h, 008h, 008h, 00bh, 00bh, 00bh, 00eh, 00eh, 00eh, 011h
+ db 011h, 011h, 014h, 014h, 014h, 018h, 018h, 018h, 01ch, 01ch, 01ch, 020h, 020h, 020h, 024h, 024h
+ db 024h, 028h, 028h, 028h, 02dh, 02dh, 02dh, 032h, 032h, 032h, 038h, 038h, 038h, 03fh, 03fh, 03fh
+ db 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 03fh, 03fh
+ db 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh
+ db 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h
+ db 000h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h
+ db 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh
+ db 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h
+ db 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h
+ db 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh, 01fh, 01fh, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh
+ db 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh
+ db 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03fh, 03fh
+ db 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h
+ db 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh
+ db 02dh, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh
+ db 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h
+ db 01ch, 015h, 000h, 01ch, 01ch, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h
+ db 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h
+ db 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch, 000h, 000h, 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch
+ db 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch
+ db 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 01ch, 01ch
+ db 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h
+ db 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh
+ db 00eh, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh
+ db 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h
+ db 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h
+ db 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah
+ db 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch, 014h, 014h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch
+ db 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch
+ db 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 010h, 010h
+ db 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h
+ db 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h
+ db 000h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h
+ db 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h
+ db 010h, 00eh, 008h, 010h, 010h, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah
+ db 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh
+ db 010h, 008h, 00ch, 010h, 008h, 00ah, 010h, 008h, 008h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h
+ db 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah, 010h
+ db 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 010h, 010h
+ db 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh
+ db 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh
+ db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
+ db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5502 LB 0x29ca -> off=0x0 cb=0000000000000010 uValue=00000000000c0d82 'static_functionality'
+static_functionality: ; 0xc5502 LB 0x10
+ db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5512 LB 0x29ba -> off=0x0 cb=0000000000000024 uValue=00000000000c0d92 '_dcc_table'
+_dcc_table: ; 0xc5512 LB 0x24
+ db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5536 LB 0x2996 -> off=0x0 cb=000000000000001a uValue=00000000000c0db6 '_secondary_save_area'
+_secondary_save_area: ; 0xc5536 LB 0x1a
+ db 01ah, 000h, 012h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5550 LB 0x297c -> off=0x0 cb=000000000000001c uValue=00000000000c0dd0 '_video_save_pointer_table'
+_video_save_pointer_table: ; 0xc5550 LB 0x1c
+ db 042h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc556c LB 0x2960 -> off=0x0 cb=0000000000000800 uValue=00000000000c0dec 'vgafont8'
+vgafont8: ; 0xc556c LB 0x800
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
+ db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
+ db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
+ db 010h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 07ch, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h
+ db 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h
+ db 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 00fh, 007h, 00fh, 07dh, 0cch, 0cch, 0cch, 078h
+ db 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 03fh, 033h, 03fh, 030h, 030h, 070h, 0f0h, 0e0h
+ db 07fh, 063h, 07fh, 063h, 063h, 067h, 0e6h, 0c0h, 099h, 05ah, 03ch, 0e7h, 0e7h, 03ch, 05ah, 099h
+ db 080h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 080h, 000h, 002h, 00eh, 03eh, 0feh, 03eh, 00eh, 002h, 000h
+ db 018h, 03ch, 07eh, 018h, 018h, 07eh, 03ch, 018h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 000h
+ db 07fh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 000h, 03eh, 063h, 038h, 06ch, 06ch, 038h, 0cch, 078h
+ db 000h, 000h, 000h, 000h, 07eh, 07eh, 07eh, 000h, 018h, 03ch, 07eh, 018h, 07eh, 03ch, 018h, 0ffh
+ db 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h
+ db 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h
+ db 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h
+ db 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 000h, 000h, 000h, 0ffh, 0ffh, 07eh, 03ch, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 078h, 078h, 030h, 030h, 000h, 030h, 000h
+ db 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 0feh, 06ch, 06ch, 000h
+ db 030h, 07ch, 0c0h, 078h, 00ch, 0f8h, 030h, 000h, 000h, 0c6h, 0cch, 018h, 030h, 066h, 0c6h, 000h
+ db 038h, 06ch, 038h, 076h, 0dch, 0cch, 076h, 000h, 060h, 060h, 0c0h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 060h, 060h, 030h, 018h, 000h, 060h, 030h, 018h, 018h, 018h, 030h, 060h, 000h
+ db 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 060h, 000h, 000h, 000h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 000h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h
+ db 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 07ch, 000h, 030h, 070h, 030h, 030h, 030h, 030h, 0fch, 000h
+ db 078h, 0cch, 00ch, 038h, 060h, 0cch, 0fch, 000h, 078h, 0cch, 00ch, 038h, 00ch, 0cch, 078h, 000h
+ db 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 01eh, 000h, 0fch, 0c0h, 0f8h, 00ch, 00ch, 0cch, 078h, 000h
+ db 038h, 060h, 0c0h, 0f8h, 0cch, 0cch, 078h, 000h, 0fch, 0cch, 00ch, 018h, 030h, 030h, 030h, 000h
+ db 078h, 0cch, 0cch, 078h, 0cch, 0cch, 078h, 000h, 078h, 0cch, 0cch, 07ch, 00ch, 018h, 070h, 000h
+ db 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 060h
+ db 018h, 030h, 060h, 0c0h, 060h, 030h, 018h, 000h, 000h, 000h, 0fch, 000h, 000h, 0fch, 000h, 000h
+ db 060h, 030h, 018h, 00ch, 018h, 030h, 060h, 000h, 078h, 0cch, 00ch, 018h, 030h, 000h, 030h, 000h
+ db 07ch, 0c6h, 0deh, 0deh, 0deh, 0c0h, 078h, 000h, 030h, 078h, 0cch, 0cch, 0fch, 0cch, 0cch, 000h
+ db 0fch, 066h, 066h, 07ch, 066h, 066h, 0fch, 000h, 03ch, 066h, 0c0h, 0c0h, 0c0h, 066h, 03ch, 000h
+ db 0f8h, 06ch, 066h, 066h, 066h, 06ch, 0f8h, 000h, 0feh, 062h, 068h, 078h, 068h, 062h, 0feh, 000h
+ db 0feh, 062h, 068h, 078h, 068h, 060h, 0f0h, 000h, 03ch, 066h, 0c0h, 0c0h, 0ceh, 066h, 03eh, 000h
+ db 0cch, 0cch, 0cch, 0fch, 0cch, 0cch, 0cch, 000h, 078h, 030h, 030h, 030h, 030h, 030h, 078h, 000h
+ db 01eh, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 0e6h, 066h, 06ch, 078h, 06ch, 066h, 0e6h, 000h
+ db 0f0h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 000h
+ db 0c6h, 0e6h, 0f6h, 0deh, 0ceh, 0c6h, 0c6h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h
+ db 0fch, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 078h, 0cch, 0cch, 0cch, 0dch, 078h, 01ch, 000h
+ db 0fch, 066h, 066h, 07ch, 06ch, 066h, 0e6h, 000h, 078h, 0cch, 0e0h, 070h, 01ch, 0cch, 078h, 000h
+ db 0fch, 0b4h, 030h, 030h, 030h, 030h, 078h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 0fch, 000h
+ db 0cch, 0cch, 0cch, 0cch, 0cch, 078h, 030h, 000h, 0c6h, 0c6h, 0c6h, 0d6h, 0feh, 0eeh, 0c6h, 000h
+ db 0c6h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 030h, 078h, 000h
+ db 0feh, 0c6h, 08ch, 018h, 032h, 066h, 0feh, 000h, 078h, 060h, 060h, 060h, 060h, 060h, 078h, 000h
+ db 0c0h, 060h, 030h, 018h, 00ch, 006h, 002h, 000h, 078h, 018h, 018h, 018h, 018h, 018h, 078h, 000h
+ db 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 076h, 000h
+ db 0e0h, 060h, 060h, 07ch, 066h, 066h, 0dch, 000h, 000h, 000h, 078h, 0cch, 0c0h, 0cch, 078h, 000h
+ db 01ch, 00ch, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+ db 038h, 06ch, 060h, 0f0h, 060h, 060h, 0f0h, 000h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 0f8h
+ db 0e0h, 060h, 06ch, 076h, 066h, 066h, 0e6h, 000h, 030h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 00ch, 000h, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 0e0h, 060h, 066h, 06ch, 078h, 06ch, 0e6h, 000h
+ db 070h, 030h, 030h, 030h, 030h, 030h, 078h, 000h, 000h, 000h, 0cch, 0feh, 0feh, 0d6h, 0c6h, 000h
+ db 000h, 000h, 0f8h, 0cch, 0cch, 0cch, 0cch, 000h, 000h, 000h, 078h, 0cch, 0cch, 0cch, 078h, 000h
+ db 000h, 000h, 0dch, 066h, 066h, 07ch, 060h, 0f0h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 01eh
+ db 000h, 000h, 0dch, 076h, 066h, 060h, 0f0h, 000h, 000h, 000h, 07ch, 0c0h, 078h, 00ch, 0f8h, 000h
+ db 010h, 030h, 07ch, 030h, 030h, 034h, 018h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 000h, 000h, 000h, 0c6h, 0d6h, 0feh, 0feh, 06ch, 000h
+ db 000h, 000h, 0c6h, 06ch, 038h, 06ch, 0c6h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 07ch, 00ch, 0f8h
+ db 000h, 000h, 0fch, 098h, 030h, 064h, 0fch, 000h, 01ch, 030h, 030h, 0e0h, 030h, 030h, 01ch, 000h
+ db 018h, 018h, 018h, 000h, 018h, 018h, 018h, 000h, 0e0h, 030h, 030h, 01ch, 030h, 030h, 0e0h, 000h
+ db 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h
+ db 078h, 0cch, 0c0h, 0cch, 078h, 018h, 00ch, 078h, 000h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 01ch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 07eh, 0c3h, 03ch, 006h, 03eh, 066h, 03fh, 000h
+ db 0cch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 0e0h, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h
+ db 030h, 030h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 000h, 000h, 078h, 0c0h, 0c0h, 078h, 00ch, 038h
+ db 07eh, 0c3h, 03ch, 066h, 07eh, 060h, 03ch, 000h, 0cch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+ db 0e0h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 0cch, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 07ch, 0c6h, 038h, 018h, 018h, 018h, 03ch, 000h, 0e0h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 0c6h, 038h, 06ch, 0c6h, 0feh, 0c6h, 0c6h, 000h, 030h, 030h, 000h, 078h, 0cch, 0fch, 0cch, 000h
+ db 01ch, 000h, 0fch, 060h, 078h, 060h, 0fch, 000h, 000h, 000h, 07fh, 00ch, 07fh, 0cch, 07fh, 000h
+ db 03eh, 06ch, 0cch, 0feh, 0cch, 0cch, 0ceh, 000h, 078h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h
+ db 000h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 0e0h, 000h, 078h, 0cch, 0cch, 078h, 000h
+ db 078h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h, 000h, 0e0h, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 000h, 0cch, 000h, 0cch, 0cch, 07ch, 00ch, 0f8h, 0c3h, 018h, 03ch, 066h, 066h, 03ch, 018h, 000h
+ db 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 018h, 018h, 07eh, 0c0h, 0c0h, 07eh, 018h, 018h
+ db 038h, 06ch, 064h, 0f0h, 060h, 0e6h, 0fch, 000h, 0cch, 0cch, 078h, 0fch, 030h, 0fch, 030h, 030h
+ db 0f8h, 0cch, 0cch, 0fah, 0c6h, 0cfh, 0c6h, 0c7h, 00eh, 01bh, 018h, 03ch, 018h, 018h, 0d8h, 070h
+ db 01ch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 038h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 000h, 01ch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 01ch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 000h, 0f8h, 000h, 0f8h, 0cch, 0cch, 0cch, 000h, 0fch, 000h, 0cch, 0ech, 0fch, 0dch, 0cch, 000h
+ db 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h
+ db 030h, 000h, 030h, 060h, 0c0h, 0cch, 078h, 000h, 000h, 000h, 000h, 0fch, 0c0h, 0c0h, 000h, 000h
+ db 000h, 000h, 000h, 0fch, 00ch, 00ch, 000h, 000h, 0c3h, 0c6h, 0cch, 0deh, 033h, 066h, 0cch, 00fh
+ db 0c3h, 0c6h, 0cch, 0dbh, 037h, 06fh, 0cfh, 003h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 000h
+ db 000h, 033h, 066h, 0cch, 066h, 033h, 000h, 000h, 000h, 0cch, 066h, 033h, 066h, 0cch, 000h, 000h
+ db 022h, 088h, 022h, 088h, 022h, 088h, 022h, 088h, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+ db 0dbh, 077h, 0dbh, 0eeh, 0dbh, 077h, 0dbh, 0eeh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h
+ db 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h
+ db 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h
+ db 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h
+ db 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h
+ db 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h
+ db 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h
+ db 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+ db 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h
+ db 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h
+ db 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 0c8h, 0dch, 076h, 000h, 000h, 078h, 0cch, 0f8h, 0cch, 0f8h, 0c0h, 0c0h
+ db 000h, 0fch, 0cch, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+ db 0fch, 0cch, 060h, 030h, 060h, 0cch, 0fch, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 070h, 000h
+ db 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 0c0h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 000h
+ db 0fch, 030h, 078h, 0cch, 0cch, 078h, 030h, 0fch, 038h, 06ch, 0c6h, 0feh, 0c6h, 06ch, 038h, 000h
+ db 038h, 06ch, 0c6h, 0c6h, 06ch, 06ch, 0eeh, 000h, 01ch, 030h, 018h, 07ch, 0cch, 0cch, 078h, 000h
+ db 000h, 000h, 07eh, 0dbh, 0dbh, 07eh, 000h, 000h, 006h, 00ch, 07eh, 0dbh, 0dbh, 07eh, 060h, 0c0h
+ db 038h, 060h, 0c0h, 0f8h, 0c0h, 060h, 038h, 000h, 078h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 000h
+ db 000h, 0fch, 000h, 0fch, 000h, 0fch, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 0fch, 000h
+ db 060h, 030h, 018h, 030h, 060h, 000h, 0fch, 000h, 018h, 030h, 060h, 030h, 018h, 000h, 0fch, 000h
+ db 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 070h
+ db 030h, 030h, 000h, 0fch, 000h, 030h, 030h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h
+ db 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
+ db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5d6c LB 0x2160 -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ec 'vgafont14'
+vgafont14: ; 0xc5d6c LB 0xe00
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
+ db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
+ db 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch
+ db 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h
+ db 03ch, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 01eh, 00eh, 01ah, 032h
+ db 078h, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 066h, 066h, 03ch, 018h
+ db 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 070h, 0f0h
+ db 0e0h, 000h, 000h, 000h, 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 080h, 0c0h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h, 000h
+ db 002h, 006h, 00eh, 03eh, 0feh, 03eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch
+ db 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h
+ db 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh
+ db 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h
+ db 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 000h
+ db 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 060h
+ db 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h
+ db 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 03ch, 03ch, 03ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 066h, 066h, 066h
+ db 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch
+ db 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h
+ db 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 066h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h, 000h
+ db 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+ db 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+ db 000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h
+ db 006h, 00ch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 006h, 006h
+ db 03ch, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh
+ db 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 07ch, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0c6h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h, 000h, 000h, 018h
+ db 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+ db 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h
+ db 018h, 00ch, 006h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h
+ db 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h, 0fch, 066h
+ db 066h, 066h, 07ch, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h
+ db 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h
+ db 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 062h, 066h
+ db 0feh, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 066h, 03ah, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 01eh, 00ch
+ db 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 0e6h, 066h, 06ch, 06ch
+ db 078h, 06ch, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h
+ db 062h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h
+ db 000h, 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h
+ db 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h, 000h, 000h, 0fch, 066h
+ db 066h, 066h, 07ch, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 060h
+ db 038h, 00ch, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h
+ db 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 07ch, 06ch, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h
+ db 08ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 03ch, 030h, 030h, 030h
+ db 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch
+ db 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch
+ db 03ch, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0e0h, 060h
+ db 060h, 078h, 06ch, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+ db 0c6h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch
+ db 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 006h, 006h
+ db 000h, 00eh, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h, 000h, 000h, 0e0h, 060h, 060h, 066h
+ db 06ch, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0dch, 076h, 066h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+ db 0c6h, 070h, 01ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h
+ db 030h, 036h, 01ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch
+ db 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0feh, 0cch, 018h, 030h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 00eh, 018h, 018h, 018h
+ db 070h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h
+ db 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h, 000h
+ db 0cch, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h
+ db 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 078h
+ db 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 000h, 078h, 00ch, 07ch
+ db 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch
+ db 076h, 000h, 000h, 000h, 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 0cch, 0cch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h
+ db 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 000h, 038h
+ db 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h
+ db 03ch, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h
+ db 000h, 000h, 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h, 000h, 03eh, 06ch
+ db 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 07ch
+ db 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h, 07ch, 0c6h, 0c6h
+ db 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h, 000h, 0c6h
+ db 0c6h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h
+ db 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 018h, 03ch, 066h, 060h
+ db 060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h
+ db 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h
+ db 018h, 000h, 000h, 000h, 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0c6h, 000h
+ db 000h, 000h, 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch
+ db 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h
+ db 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h, 000h, 0cch
+ db 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h
+ db 066h, 066h, 066h, 000h, 000h, 000h, 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h
+ db 0c6h, 000h, 000h, 000h, 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h
+ db 030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h, 030h, 066h
+ db 0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h, 000h, 018h, 018h, 000h, 018h, 018h, 03ch, 03ch, 03ch
+ db 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h
+ db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 055h, 0aah
+ db 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 0ddh, 077h, 0ddh, 077h
+ db 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 036h, 036h
+ db 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0feh
+ db 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h
+ db 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h
+ db 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 0f0h, 0f0h, 0f0h, 0f0h, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+ db 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0fch, 0c6h, 0c6h, 0fch, 0c0h, 0c0h, 040h, 000h, 000h, 000h, 0feh, 0c6h
+ db 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 06ch
+ db 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h
+ db 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h, 000h
+ db 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch
+ db 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h, 000h, 01eh, 030h, 018h, 00ch
+ db 03eh, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh
+ db 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h
+ db 0c0h, 000h, 000h, 000h, 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 030h, 01ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 030h, 018h
+ db 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h, 060h
+ db 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 00ch
+ db 00ch, 0ech, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc6b6c LB 0x1360 -> off=0x0 cb=0000000000001000 uValue=00000000000c23ec 'vgafont16'
+vgafont16: ; 0xc6b6c LB 0x1000
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 01eh, 00eh, 01ah, 032h, 078h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 030h, 070h, 0f0h, 0e0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 080h, 0c0h, 0e0h, 0f0h, 0f8h, 0feh, 0f8h, 0f0h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 002h, 006h, 00eh, 01eh, 03eh, 0feh, 03eh, 01eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h
+ db 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 03ch, 03ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 066h, 066h, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 000h
+ db 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h, 006h, 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 060h, 0c6h, 086h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 030h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0d6h, 0d6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 006h, 006h, 03ch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 006h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 006h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 066h, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h, 066h, 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 0c6h, 066h, 03ah, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01eh, 00ch, 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0e6h, 066h, 066h, 06ch, 078h, 078h, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 06ch, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 060h, 038h, 00ch, 006h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0d6h, 0feh, 0eeh, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 06ch, 07ch, 038h, 038h, 07ch, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 086h, 00ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 03ch, 000h, 000h, 000h, 000h
+ db 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 078h, 06ch, 066h, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c0h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 006h, 006h, 000h, 00eh, 006h, 006h, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 066h, 06ch, 078h, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h, 0d6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 076h, 066h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h, 030h, 030h, 036h, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 0cch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00eh, 018h, 018h, 018h, 070h, 018h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h, 018h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h
+ db 000h, 000h, 0cch, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 00ch, 018h, 030h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0cch, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 0c6h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 060h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03eh, 06ch, 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h
+ db 000h, 0c6h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 018h, 03ch, 066h, 060h, 060h, 060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0cch, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 00ch, 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c0h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h
+ db 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 000h, 018h, 018h, 018h, 03ch, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h
+ db 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+ db 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 078h, 0cch, 0cch, 0cch, 0d8h, 0cch, 0c6h, 0c6h, 0c6h, 0cch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01eh, 030h, 018h, 00ch, 03eh, 066h, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh, 0dbh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h, 0c0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 060h, 030h, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 00fh, 00ch, 00ch, 00ch, 00ch, 00ch, 0ech, 06ch, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7b6c LB 0x360 -> off=0x0 cb=000000000000012d uValue=00000000000c33ec 'vgafont14alt'
+vgafont14alt: ; 0xc7b6c LB 0x12d
+ db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
+ db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
+ db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 04dh, 000h, 000h, 0c3h
+ db 0e7h, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh
+ db 099h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h
+ db 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h
+ db 0dbh, 0dbh, 0ffh, 066h, 066h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 03ch, 066h, 0c3h, 0c3h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h, 030h, 061h
+ db 0c3h, 0ffh, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h, 0ffh, 0dbh, 0dbh, 0dbh
+ db 0dbh, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h
+ db 000h, 000h, 091h, 000h, 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h
+ db 000h, 09bh, 000h, 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h
+ db 09dh, 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 000h, 000h, 000h, 09eh
+ db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
+ db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
+ db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7c99 LB 0x233 -> off=0x0 cb=0000000000000144 uValue=00000000000c3519 'vgafont16alt'
+vgafont16alt: ; 0xc7c99 LB 0x144
+ db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
+ db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
+ db 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh, 099h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch
+ db 000h, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch
+ db 018h, 000h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh
+ db 066h, 066h, 000h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h, 018h, 03ch
+ db 066h, 0c3h, 0c3h, 000h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h
+ db 030h, 060h, 0c1h, 0c3h, 0ffh, 000h, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h
+ db 0ffh, 0dbh, 0dbh, 0dbh, 0dbh, 0dbh, 000h, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h
+ db 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h
+ db 000h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h, 000h, 000h, 000h, 078h, 000h, 000h, 000h
+ db 000h, 000h, 0c3h, 066h, 03ch, 018h, 03ch, 066h, 0c3h, 000h, 000h, 000h, 000h, 091h, 000h, 000h
+ db 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h, 000h, 000h, 09bh, 000h
+ db 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 09dh
+ db 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 09eh, 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 066h, 0f3h, 000h, 000h, 000h
+ db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
+ db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
+ db 006h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7ddd LB 0xef -> off=0x0 cb=0000000000000008 uValue=00000000000c365d '_cga_msr'
+_cga_msr: ; 0xc7ddd LB 0x8
+ db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
+ ; disGetNextSymbol 0xc7de5 LB 0xe7 -> off=0x0 cb=0000000000000008 uValue=00000000000c3665 'line_to_vpti_200'
+line_to_vpti_200: ; 0xc7de5 LB 0x8
+ db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
+ ; disGetNextSymbol 0xc7ded LB 0xdf -> off=0x0 cb=0000000000000008 uValue=00000000000c366d 'line_to_vpti_350'
+line_to_vpti_350: ; 0xc7ded LB 0x8
+ db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
+ ; disGetNextSymbol 0xc7df5 LB 0xd7 -> off=0x0 cb=0000000000000008 uValue=00000000000c3675 'line_to_vpti_400'
+line_to_vpti_400: ; 0xc7df5 LB 0x8
+ db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
+ ; disGetNextSymbol 0xc7dfd LB 0xcf -> off=0x0 cb=0000000000000005 uValue=00000000000c367d 'row_tbl'
+row_tbl: ; 0xc7dfd LB 0x5
+ db 000h, 00eh, 019h, 02bh, 000h
+ ; disGetNextSymbol 0xc7e02 LB 0xca -> off=0x0 cb=0000000000000015 uValue=00000000000c3682 '_vbebios_copyright'
+_vbebios_copyright: ; 0xc7e02 LB 0x15
+ db 'VirtualBox VESA BIOS', 000h
+ ; disGetNextSymbol 0xc7e17 LB 0xb5 -> off=0x0 cb=000000000000001d uValue=00000000000c3697 '_vbebios_vendor_name'
+_vbebios_vendor_name: ; 0xc7e17 LB 0x1d
+ db 'Oracle and/or its affiliates', 000h
+ ; disGetNextSymbol 0xc7e34 LB 0x98 -> off=0x0 cb=0000000000000021 uValue=00000000000c36b4 '_vbebios_product_name'
+_vbebios_product_name: ; 0xc7e34 LB 0x21
+ db 'Oracle VM VirtualBox VBE Adapter', 000h
+ ; disGetNextSymbol 0xc7e55 LB 0x77 -> off=0x0 cb=0000000000000023 uValue=00000000000c36d5 '_vbebios_product_revision'
+_vbebios_product_revision: ; 0xc7e55 LB 0x23
+ db 'Oracle VM VirtualBox Version 7.0.6', 000h
+ ; disGetNextSymbol 0xc7e78 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f8 '_vbebios_info_string'
+_vbebios_info_string: ; 0xc7e78 LB 0x2b
+ db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
+ ; disGetNextSymbol 0xc7ea3 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3723 '_no_vbebios_info_string'
+_no_vbebios_info_string: ; 0xc7ea3 LB 0x29
+ db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
+
+section CONST progbits vstart=0x7ecc align=1 ; size=0x0 class=DATA group=DGROUP
+
+section CONST2 progbits vstart=0x7ecc align=1 ; size=0x0 class=DATA group=DGROUP
+
+ ; Padding 0x134 bytes at 0xc7ecc
+ db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
+ db 065h, 02fh, 073h, 062h, 075h, 072h, 063h, 068h, 069h, 06ch, 02fh, 076h, 062h, 05fh, 073h, 072h
+ db 063h, 02fh, 074h, 072h, 075h, 06eh, 06bh, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h
+ db 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh
+ db 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h
+ db 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 033h, 038h
+ db 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 09ch
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
new file mode 100644
index 00000000..985e57d1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative386.md5sum
@@ -0,0 +1 @@
+963ceb67243ead136255f7bd76c49f4a *VBoxVgaBios386.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
new file mode 100644
index 00000000..b386fd0a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.asm
@@ -0,0 +1,9405 @@
+; $Id: VBoxVgaBiosAlternative8086.asm $
+;; @file
+; Auto Generated source file. Do not edit.
+;
+
+;
+; Source file: vgarom.asm
+;
+; ============================================================================================
+;
+; Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; ============================================================================================
+;
+; This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+; You can NOT drive any physical vga card with it.
+;
+; ============================================================================================
+;
+
+;
+; Source file: vberom.asm
+;
+; ============================================================================================
+;
+; Copyright (C) 2002 Jeroen Janssen
+;
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public
+; License along with this library; if not, write to the Free Software
+; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;
+; ============================================================================================
+;
+; This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+; You can NOT drive any physical vga card with it.
+;
+; ============================================================================================
+;
+; This VBE Bios is based on information taken from :
+; - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;
+; ============================================================================================
+
+;
+; Source file: vgabios.c
+;
+; // ============================================================================================
+;
+; vgabios.c
+;
+; // ============================================================================================
+; //
+; // Copyright (C) 2001,2002 the LGPL VGABios developers Team
+; //
+; // This library is free software; you can redistribute it and/or
+; // modify it under the terms of the GNU Lesser General Public
+; // License as published by the Free Software Foundation; either
+; // version 2 of the License, or (at your option) any later version.
+; //
+; // This library is distributed in the hope that it will be useful,
+; // but WITHOUT ANY WARRANTY; without even the implied warranty of
+; // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; // Lesser General Public License for more details.
+; //
+; // You should have received a copy of the GNU Lesser General Public
+; // License along with this library; if not, write to the Free Software
+; // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+; //
+; // ============================================================================================
+; //
+; // This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+; // You can NOT drive any physical vga card with it.
+; //
+; // ============================================================================================
+; //
+; // This file contains code ripped from :
+; // - rombios.c of plex86
+; //
+; // This VGA Bios contains fonts from :
+; // - fntcol16.zip (c) by Joseph Gil avalable at :
+; // ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+; // These fonts are public domain
+; //
+; // This VGA Bios is based on information taken from :
+; // - Kevin Lawton's vga card emulation for bochs/plex86
+; // - Ralf Brown's interrupts list available at http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+; // - Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+; // - Michael Abrash's Graphics Programming Black Book
+; // - Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" edited by sybex
+; // - DOSEMU 1.0.1 source code for several tables values and formulas
+; //
+; // Thanks for patches, comments and ideas to :
+; // - techt@pikeonline.net
+; //
+; // ============================================================================================
+
+;
+; Source file: vbe.c
+;
+; // ============================================================================================
+; //
+; // Copyright (C) 2002 Jeroen Janssen
+; //
+; // This library is free software; you can redistribute it and/or
+; // modify it under the terms of the GNU Lesser General Public
+; // License as published by the Free Software Foundation; either
+; // version 2 of the License, or (at your option) any later version.
+; //
+; // This library is distributed in the hope that it will be useful,
+; // but WITHOUT ANY WARRANTY; without even the implied warranty of
+; // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; // Lesser General Public License for more details.
+; //
+; // You should have received a copy of the GNU Lesser General Public
+; // License along with this library; if not, write to the Free Software
+; // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+; //
+; // ============================================================================================
+; //
+; // This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+; // You can NOT drive any physical vga card with it.
+; //
+; // ============================================================================================
+; //
+; // This VBE Bios is based on information taken from :
+; // - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+; //
+; // ============================================================================================
+
+;
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+;
+
+
+
+
+
+section VGAROM progbits vstart=0x0 align=1 ; size=0x94f class=CODE group=AUTO
+ ; disGetNextSymbol 0xc0000 LB 0x94f -> off=0x28 cb=0000000000000578 uValue=00000000000c0028 'vgabios_int10_handler'
+ db 055h, 0aah, 040h, 0ebh, 01dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 049h, 042h
+ db 04dh, 000h, 00eh, 01fh, 0fch, 0e9h, 03eh, 00ah
+vgabios_int10_handler: ; 0xc0028 LB 0x578
+ pushfw ; 9c ; 0xc0028 vgarom.asm:91
+ cmp ah, 00fh ; 80 fc 0f ; 0xc0029 vgarom.asm:104
+ jne short 00034h ; 75 06 ; 0xc002c vgarom.asm:105
+ call 0018dh ; e8 5c 01 ; 0xc002e vgarom.asm:106
+ jmp near 000fdh ; e9 c9 00 ; 0xc0031 vgarom.asm:107
+ cmp ah, 01ah ; 80 fc 1a ; 0xc0034 vgarom.asm:109
+ jne short 0003fh ; 75 06 ; 0xc0037 vgarom.asm:110
+ call 00560h ; e8 24 05 ; 0xc0039 vgarom.asm:111
+ jmp near 000fdh ; e9 be 00 ; 0xc003c vgarom.asm:112
+ cmp ah, 00bh ; 80 fc 0b ; 0xc003f vgarom.asm:114
+ jne short 0004ah ; 75 06 ; 0xc0042 vgarom.asm:115
+ call 000ffh ; e8 b8 00 ; 0xc0044 vgarom.asm:116
+ jmp near 000fdh ; e9 b3 00 ; 0xc0047 vgarom.asm:117
+ cmp ax, 01103h ; 3d 03 11 ; 0xc004a vgarom.asm:119
+ jne short 00055h ; 75 06 ; 0xc004d vgarom.asm:120
+ call 00454h ; e8 02 04 ; 0xc004f vgarom.asm:121
+ jmp near 000fdh ; e9 a8 00 ; 0xc0052 vgarom.asm:122
+ cmp ah, 012h ; 80 fc 12 ; 0xc0055 vgarom.asm:124
+ jne short 00099h ; 75 3f ; 0xc0058 vgarom.asm:125
+ cmp bl, 010h ; 80 fb 10 ; 0xc005a vgarom.asm:126
+ jne short 00065h ; 75 06 ; 0xc005d vgarom.asm:127
+ call 00461h ; e8 ff 03 ; 0xc005f vgarom.asm:128
+ jmp near 000fdh ; e9 98 00 ; 0xc0062 vgarom.asm:129
+ cmp bl, 030h ; 80 fb 30 ; 0xc0065 vgarom.asm:131
+ jne short 00070h ; 75 06 ; 0xc0068 vgarom.asm:132
+ call 00484h ; e8 17 04 ; 0xc006a vgarom.asm:133
+ jmp near 000fdh ; e9 8d 00 ; 0xc006d vgarom.asm:134
+ cmp bl, 031h ; 80 fb 31 ; 0xc0070 vgarom.asm:136
+ jne short 0007bh ; 75 06 ; 0xc0073 vgarom.asm:137
+ call 004d7h ; e8 5f 04 ; 0xc0075 vgarom.asm:138
+ jmp near 000fdh ; e9 82 00 ; 0xc0078 vgarom.asm:139
+ cmp bl, 032h ; 80 fb 32 ; 0xc007b vgarom.asm:141
+ jne short 00085h ; 75 05 ; 0xc007e vgarom.asm:142
+ call 004fch ; e8 79 04 ; 0xc0080 vgarom.asm:143
+ jmp short 000fdh ; eb 78 ; 0xc0083 vgarom.asm:144
+ cmp bl, 033h ; 80 fb 33 ; 0xc0085 vgarom.asm:146
+ jne short 0008fh ; 75 05 ; 0xc0088 vgarom.asm:147
+ call 0051ah ; e8 8d 04 ; 0xc008a vgarom.asm:148
+ jmp short 000fdh ; eb 6e ; 0xc008d vgarom.asm:149
+ cmp bl, 034h ; 80 fb 34 ; 0xc008f vgarom.asm:151
+ jne short 000e3h ; 75 4f ; 0xc0092 vgarom.asm:152
+ call 0053eh ; e8 a7 04 ; 0xc0094 vgarom.asm:153
+ jmp short 000fdh ; eb 64 ; 0xc0097 vgarom.asm:154
+ cmp ax, 0101bh ; 3d 1b 10 ; 0xc0099 vgarom.asm:156
+ je short 000e3h ; 74 45 ; 0xc009c vgarom.asm:157
+ cmp ah, 010h ; 80 fc 10 ; 0xc009e vgarom.asm:158
+ jne short 000a8h ; 75 05 ; 0xc00a1 vgarom.asm:162
+ call 001b4h ; e8 0e 01 ; 0xc00a3 vgarom.asm:164
+ jmp short 000fdh ; eb 55 ; 0xc00a6 vgarom.asm:165
+ cmp ah, 04fh ; 80 fc 4f ; 0xc00a8 vgarom.asm:168
+ jne short 000e3h ; 75 36 ; 0xc00ab vgarom.asm:169
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc00ad vgarom.asm:170
+ jne short 000b6h ; 75 05 ; 0xc00af vgarom.asm:171
+ call 0080bh ; e8 57 07 ; 0xc00b1 vgarom.asm:172
+ jmp short 000fdh ; eb 47 ; 0xc00b4 vgarom.asm:173
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc00b6 vgarom.asm:175
+ jne short 000bfh ; 75 05 ; 0xc00b8 vgarom.asm:176
+ call 00830h ; e8 73 07 ; 0xc00ba vgarom.asm:177
+ jmp short 000fdh ; eb 3e ; 0xc00bd vgarom.asm:178
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc00bf vgarom.asm:180
+ jne short 000c8h ; 75 05 ; 0xc00c1 vgarom.asm:181
+ call 0085dh ; e8 97 07 ; 0xc00c3 vgarom.asm:182
+ jmp short 000fdh ; eb 35 ; 0xc00c6 vgarom.asm:183
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc00c8 vgarom.asm:185
+ jne short 000d1h ; 75 05 ; 0xc00ca vgarom.asm:186
+ call 00891h ; e8 c2 07 ; 0xc00cc vgarom.asm:187
+ jmp short 000fdh ; eb 2c ; 0xc00cf vgarom.asm:188
+ cmp AL, strict byte 009h ; 3c 09 ; 0xc00d1 vgarom.asm:190
+ jne short 000dah ; 75 05 ; 0xc00d3 vgarom.asm:191
+ call 008c8h ; e8 f0 07 ; 0xc00d5 vgarom.asm:192
+ jmp short 000fdh ; eb 23 ; 0xc00d8 vgarom.asm:193
+ cmp AL, strict byte 00ah ; 3c 0a ; 0xc00da vgarom.asm:195
+ jne short 000e3h ; 75 05 ; 0xc00dc vgarom.asm:196
+ call 0093bh ; e8 5a 08 ; 0xc00de vgarom.asm:197
+ jmp short 000fdh ; eb 1a ; 0xc00e1 vgarom.asm:198
+ push ES ; 06 ; 0xc00e3 vgarom.asm:202
+ push DS ; 1e ; 0xc00e4 vgarom.asm:203
+ push ax ; 50 ; 0xc00e5 vgarom.asm:109
+ push cx ; 51 ; 0xc00e6 vgarom.asm:110
+ push dx ; 52 ; 0xc00e7 vgarom.asm:111
+ push bx ; 53 ; 0xc00e8 vgarom.asm:112
+ push sp ; 54 ; 0xc00e9 vgarom.asm:113
+ push bp ; 55 ; 0xc00ea vgarom.asm:114
+ push si ; 56 ; 0xc00eb vgarom.asm:115
+ push di ; 57 ; 0xc00ec vgarom.asm:116
+ push CS ; 0e ; 0xc00ed vgarom.asm:207
+ pop DS ; 1f ; 0xc00ee vgarom.asm:208
+ cld ; fc ; 0xc00ef vgarom.asm:209
+ call 0394bh ; e8 58 38 ; 0xc00f0 vgarom.asm:210
+ pop di ; 5f ; 0xc00f3 vgarom.asm:126
+ pop si ; 5e ; 0xc00f4 vgarom.asm:127
+ pop bp ; 5d ; 0xc00f5 vgarom.asm:128
+ pop bx ; 5b ; 0xc00f6 vgarom.asm:129
+ pop bx ; 5b ; 0xc00f7 vgarom.asm:130
+ pop dx ; 5a ; 0xc00f8 vgarom.asm:131
+ pop cx ; 59 ; 0xc00f9 vgarom.asm:132
+ pop ax ; 58 ; 0xc00fa vgarom.asm:133
+ pop DS ; 1f ; 0xc00fb vgarom.asm:213
+ pop ES ; 07 ; 0xc00fc vgarom.asm:214
+ popfw ; 9d ; 0xc00fd vgarom.asm:216
+ iret ; cf ; 0xc00fe vgarom.asm:217
+ cmp bh, 000h ; 80 ff 00 ; 0xc00ff vgarom.asm:222
+ je short 0010ah ; 74 06 ; 0xc0102 vgarom.asm:223
+ cmp bh, 001h ; 80 ff 01 ; 0xc0104 vgarom.asm:224
+ je short 0015bh ; 74 52 ; 0xc0107 vgarom.asm:225
+ retn ; c3 ; 0xc0109 vgarom.asm:229
+ push ax ; 50 ; 0xc010a vgarom.asm:231
+ push bx ; 53 ; 0xc010b vgarom.asm:232
+ push cx ; 51 ; 0xc010c vgarom.asm:233
+ push dx ; 52 ; 0xc010d vgarom.asm:234
+ push DS ; 1e ; 0xc010e vgarom.asm:235
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc010f vgarom.asm:236
+ mov ds, dx ; 8e da ; 0xc0112 vgarom.asm:237
+ mov dx, 003dah ; ba da 03 ; 0xc0114 vgarom.asm:238
+ in AL, DX ; ec ; 0xc0117 vgarom.asm:239
+ cmp byte [word 00049h], 003h ; 80 3e 49 00 03 ; 0xc0118 vgarom.asm:240
+ jbe short 0014eh ; 76 2f ; 0xc011d vgarom.asm:241
+ mov dx, 003c0h ; ba c0 03 ; 0xc011f vgarom.asm:242
+ mov AL, strict byte 000h ; b0 00 ; 0xc0122 vgarom.asm:243
+ out DX, AL ; ee ; 0xc0124 vgarom.asm:244
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0125 vgarom.asm:245
+ and AL, strict byte 00fh ; 24 0f ; 0xc0127 vgarom.asm:246
+ test AL, strict byte 008h ; a8 08 ; 0xc0129 vgarom.asm:247
+ je short 0012fh ; 74 02 ; 0xc012b vgarom.asm:248
+ add AL, strict byte 008h ; 04 08 ; 0xc012d vgarom.asm:249
+ out DX, AL ; ee ; 0xc012f vgarom.asm:251
+ mov CL, strict byte 001h ; b1 01 ; 0xc0130 vgarom.asm:252
+ and bl, 010h ; 80 e3 10 ; 0xc0132 vgarom.asm:253
+ mov dx, 003c0h ; ba c0 03 ; 0xc0135 vgarom.asm:255
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc0138 vgarom.asm:256
+ out DX, AL ; ee ; 0xc013a vgarom.asm:257
+ mov dx, 003c1h ; ba c1 03 ; 0xc013b vgarom.asm:258
+ in AL, DX ; ec ; 0xc013e vgarom.asm:259
+ and AL, strict byte 0efh ; 24 ef ; 0xc013f vgarom.asm:260
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc0141 vgarom.asm:261
+ mov dx, 003c0h ; ba c0 03 ; 0xc0143 vgarom.asm:262
+ out DX, AL ; ee ; 0xc0146 vgarom.asm:263
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc0147 vgarom.asm:264
+ cmp cl, 004h ; 80 f9 04 ; 0xc0149 vgarom.asm:265
+ jne short 00135h ; 75 e7 ; 0xc014c vgarom.asm:266
+ mov AL, strict byte 020h ; b0 20 ; 0xc014e vgarom.asm:268
+ out DX, AL ; ee ; 0xc0150 vgarom.asm:269
+ mov dx, 003dah ; ba da 03 ; 0xc0151 vgarom.asm:271
+ in AL, DX ; ec ; 0xc0154 vgarom.asm:272
+ pop DS ; 1f ; 0xc0155 vgarom.asm:274
+ pop dx ; 5a ; 0xc0156 vgarom.asm:275
+ pop cx ; 59 ; 0xc0157 vgarom.asm:276
+ pop bx ; 5b ; 0xc0158 vgarom.asm:277
+ pop ax ; 58 ; 0xc0159 vgarom.asm:278
+ retn ; c3 ; 0xc015a vgarom.asm:279
+ push ax ; 50 ; 0xc015b vgarom.asm:281
+ push bx ; 53 ; 0xc015c vgarom.asm:282
+ push cx ; 51 ; 0xc015d vgarom.asm:283
+ push dx ; 52 ; 0xc015e vgarom.asm:284
+ mov dx, 003dah ; ba da 03 ; 0xc015f vgarom.asm:285
+ in AL, DX ; ec ; 0xc0162 vgarom.asm:286
+ mov CL, strict byte 001h ; b1 01 ; 0xc0163 vgarom.asm:287
+ and bl, 001h ; 80 e3 01 ; 0xc0165 vgarom.asm:288
+ mov dx, 003c0h ; ba c0 03 ; 0xc0168 vgarom.asm:290
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc016b vgarom.asm:291
+ out DX, AL ; ee ; 0xc016d vgarom.asm:292
+ mov dx, 003c1h ; ba c1 03 ; 0xc016e vgarom.asm:293
+ in AL, DX ; ec ; 0xc0171 vgarom.asm:294
+ and AL, strict byte 0feh ; 24 fe ; 0xc0172 vgarom.asm:295
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc0174 vgarom.asm:296
+ mov dx, 003c0h ; ba c0 03 ; 0xc0176 vgarom.asm:297
+ out DX, AL ; ee ; 0xc0179 vgarom.asm:298
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc017a vgarom.asm:299
+ cmp cl, 004h ; 80 f9 04 ; 0xc017c vgarom.asm:300
+ jne short 00168h ; 75 e7 ; 0xc017f vgarom.asm:301
+ mov AL, strict byte 020h ; b0 20 ; 0xc0181 vgarom.asm:302
+ out DX, AL ; ee ; 0xc0183 vgarom.asm:303
+ mov dx, 003dah ; ba da 03 ; 0xc0184 vgarom.asm:305
+ in AL, DX ; ec ; 0xc0187 vgarom.asm:306
+ pop dx ; 5a ; 0xc0188 vgarom.asm:308
+ pop cx ; 59 ; 0xc0189 vgarom.asm:309
+ pop bx ; 5b ; 0xc018a vgarom.asm:310
+ pop ax ; 58 ; 0xc018b vgarom.asm:311
+ retn ; c3 ; 0xc018c vgarom.asm:312
+ push DS ; 1e ; 0xc018d vgarom.asm:317
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc018e vgarom.asm:318
+ mov ds, ax ; 8e d8 ; 0xc0191 vgarom.asm:319
+ push bx ; 53 ; 0xc0193 vgarom.asm:320
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc0194 vgarom.asm:321
+ mov al, byte [bx] ; 8a 07 ; 0xc0197 vgarom.asm:322
+ pop bx ; 5b ; 0xc0199 vgarom.asm:323
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc019a vgarom.asm:324
+ push bx ; 53 ; 0xc019c vgarom.asm:325
+ mov bx, 00087h ; bb 87 00 ; 0xc019d vgarom.asm:326
+ mov ah, byte [bx] ; 8a 27 ; 0xc01a0 vgarom.asm:327
+ and ah, 080h ; 80 e4 80 ; 0xc01a2 vgarom.asm:328
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc01a5 vgarom.asm:329
+ mov al, byte [bx] ; 8a 07 ; 0xc01a8 vgarom.asm:330
+ db 00ah, 0c4h
+ ; or al, ah ; 0a c4 ; 0xc01aa vgarom.asm:331
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc01ac vgarom.asm:332
+ mov ah, byte [bx] ; 8a 27 ; 0xc01af vgarom.asm:333
+ pop bx ; 5b ; 0xc01b1 vgarom.asm:334
+ pop DS ; 1f ; 0xc01b2 vgarom.asm:335
+ retn ; c3 ; 0xc01b3 vgarom.asm:336
+ cmp AL, strict byte 000h ; 3c 00 ; 0xc01b4 vgarom.asm:341
+ jne short 001bah ; 75 02 ; 0xc01b6 vgarom.asm:342
+ jmp short 0021bh ; eb 61 ; 0xc01b8 vgarom.asm:343
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc01ba vgarom.asm:345
+ jne short 001c0h ; 75 02 ; 0xc01bc vgarom.asm:346
+ jmp short 00239h ; eb 79 ; 0xc01be vgarom.asm:347
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc01c0 vgarom.asm:349
+ jne short 001c6h ; 75 02 ; 0xc01c2 vgarom.asm:350
+ jmp short 00241h ; eb 7b ; 0xc01c4 vgarom.asm:351
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc01c6 vgarom.asm:353
+ jne short 001cdh ; 75 03 ; 0xc01c8 vgarom.asm:354
+ jmp near 00272h ; e9 a5 00 ; 0xc01ca vgarom.asm:355
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc01cd vgarom.asm:357
+ jne short 001d4h ; 75 03 ; 0xc01cf vgarom.asm:358
+ jmp near 0029fh ; e9 cb 00 ; 0xc01d1 vgarom.asm:359
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc01d4 vgarom.asm:361
+ jne short 001dbh ; 75 03 ; 0xc01d6 vgarom.asm:362
+ jmp near 002c7h ; e9 ec 00 ; 0xc01d8 vgarom.asm:363
+ cmp AL, strict byte 009h ; 3c 09 ; 0xc01db vgarom.asm:365
+ jne short 001e2h ; 75 03 ; 0xc01dd vgarom.asm:366
+ jmp near 002d5h ; e9 f3 00 ; 0xc01df vgarom.asm:367
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc01e2 vgarom.asm:369
+ jne short 001e9h ; 75 03 ; 0xc01e4 vgarom.asm:370
+ jmp near 0031ah ; e9 31 01 ; 0xc01e6 vgarom.asm:371
+ cmp AL, strict byte 012h ; 3c 12 ; 0xc01e9 vgarom.asm:373
+ jne short 001f0h ; 75 03 ; 0xc01eb vgarom.asm:374
+ jmp near 00333h ; e9 43 01 ; 0xc01ed vgarom.asm:375
+ cmp AL, strict byte 013h ; 3c 13 ; 0xc01f0 vgarom.asm:377
+ jne short 001f7h ; 75 03 ; 0xc01f2 vgarom.asm:378
+ jmp near 0035bh ; e9 64 01 ; 0xc01f4 vgarom.asm:379
+ cmp AL, strict byte 015h ; 3c 15 ; 0xc01f7 vgarom.asm:381
+ jne short 001feh ; 75 03 ; 0xc01f9 vgarom.asm:382
+ jmp near 003aeh ; e9 b0 01 ; 0xc01fb vgarom.asm:383
+ cmp AL, strict byte 017h ; 3c 17 ; 0xc01fe vgarom.asm:385
+ jne short 00205h ; 75 03 ; 0xc0200 vgarom.asm:386
+ jmp near 003c9h ; e9 c4 01 ; 0xc0202 vgarom.asm:387
+ cmp AL, strict byte 018h ; 3c 18 ; 0xc0205 vgarom.asm:389
+ jne short 0020ch ; 75 03 ; 0xc0207 vgarom.asm:390
+ jmp near 003f1h ; e9 e5 01 ; 0xc0209 vgarom.asm:391
+ cmp AL, strict byte 019h ; 3c 19 ; 0xc020c vgarom.asm:393
+ jne short 00213h ; 75 03 ; 0xc020e vgarom.asm:394
+ jmp near 003fch ; e9 e9 01 ; 0xc0210 vgarom.asm:395
+ cmp AL, strict byte 01ah ; 3c 1a ; 0xc0213 vgarom.asm:397
+ jne short 0021ah ; 75 03 ; 0xc0215 vgarom.asm:398
+ jmp near 00407h ; e9 ed 01 ; 0xc0217 vgarom.asm:399
+ retn ; c3 ; 0xc021a vgarom.asm:404
+ cmp bl, 014h ; 80 fb 14 ; 0xc021b vgarom.asm:407
+ jnbe short 00238h ; 77 18 ; 0xc021e vgarom.asm:408
+ push ax ; 50 ; 0xc0220 vgarom.asm:409
+ push dx ; 52 ; 0xc0221 vgarom.asm:410
+ mov dx, 003dah ; ba da 03 ; 0xc0222 vgarom.asm:411
+ in AL, DX ; ec ; 0xc0225 vgarom.asm:412
+ mov dx, 003c0h ; ba c0 03 ; 0xc0226 vgarom.asm:413
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc0229 vgarom.asm:414
+ out DX, AL ; ee ; 0xc022b vgarom.asm:415
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc022c vgarom.asm:416
+ out DX, AL ; ee ; 0xc022e vgarom.asm:417
+ mov AL, strict byte 020h ; b0 20 ; 0xc022f vgarom.asm:418
+ out DX, AL ; ee ; 0xc0231 vgarom.asm:419
+ mov dx, 003dah ; ba da 03 ; 0xc0232 vgarom.asm:421
+ in AL, DX ; ec ; 0xc0235 vgarom.asm:422
+ pop dx ; 5a ; 0xc0236 vgarom.asm:424
+ pop ax ; 58 ; 0xc0237 vgarom.asm:425
+ retn ; c3 ; 0xc0238 vgarom.asm:427
+ push bx ; 53 ; 0xc0239 vgarom.asm:432
+ mov BL, strict byte 011h ; b3 11 ; 0xc023a vgarom.asm:433
+ call 0021bh ; e8 dc ff ; 0xc023c vgarom.asm:434
+ pop bx ; 5b ; 0xc023f vgarom.asm:435
+ retn ; c3 ; 0xc0240 vgarom.asm:436
+ push ax ; 50 ; 0xc0241 vgarom.asm:441
+ push bx ; 53 ; 0xc0242 vgarom.asm:442
+ push cx ; 51 ; 0xc0243 vgarom.asm:443
+ push dx ; 52 ; 0xc0244 vgarom.asm:444
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc0245 vgarom.asm:445
+ mov dx, 003dah ; ba da 03 ; 0xc0247 vgarom.asm:446
+ in AL, DX ; ec ; 0xc024a vgarom.asm:447
+ mov CL, strict byte 000h ; b1 00 ; 0xc024b vgarom.asm:448
+ mov dx, 003c0h ; ba c0 03 ; 0xc024d vgarom.asm:449
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc0250 vgarom.asm:451
+ out DX, AL ; ee ; 0xc0252 vgarom.asm:452
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0253 vgarom.asm:453
+ out DX, AL ; ee ; 0xc0256 vgarom.asm:454
+ inc bx ; 43 ; 0xc0257 vgarom.asm:455
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc0258 vgarom.asm:456
+ cmp cl, 010h ; 80 f9 10 ; 0xc025a vgarom.asm:457
+ jne short 00250h ; 75 f1 ; 0xc025d vgarom.asm:458
+ mov AL, strict byte 011h ; b0 11 ; 0xc025f vgarom.asm:459
+ out DX, AL ; ee ; 0xc0261 vgarom.asm:460
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0262 vgarom.asm:461
+ out DX, AL ; ee ; 0xc0265 vgarom.asm:462
+ mov AL, strict byte 020h ; b0 20 ; 0xc0266 vgarom.asm:463
+ out DX, AL ; ee ; 0xc0268 vgarom.asm:464
+ mov dx, 003dah ; ba da 03 ; 0xc0269 vgarom.asm:466
+ in AL, DX ; ec ; 0xc026c vgarom.asm:467
+ pop dx ; 5a ; 0xc026d vgarom.asm:469
+ pop cx ; 59 ; 0xc026e vgarom.asm:470
+ pop bx ; 5b ; 0xc026f vgarom.asm:471
+ pop ax ; 58 ; 0xc0270 vgarom.asm:472
+ retn ; c3 ; 0xc0271 vgarom.asm:473
+ push ax ; 50 ; 0xc0272 vgarom.asm:478
+ push bx ; 53 ; 0xc0273 vgarom.asm:479
+ push dx ; 52 ; 0xc0274 vgarom.asm:480
+ mov dx, 003dah ; ba da 03 ; 0xc0275 vgarom.asm:481
+ in AL, DX ; ec ; 0xc0278 vgarom.asm:482
+ mov dx, 003c0h ; ba c0 03 ; 0xc0279 vgarom.asm:483
+ mov AL, strict byte 010h ; b0 10 ; 0xc027c vgarom.asm:484
+ out DX, AL ; ee ; 0xc027e vgarom.asm:485
+ mov dx, 003c1h ; ba c1 03 ; 0xc027f vgarom.asm:486
+ in AL, DX ; ec ; 0xc0282 vgarom.asm:487
+ and AL, strict byte 0f7h ; 24 f7 ; 0xc0283 vgarom.asm:488
+ and bl, 001h ; 80 e3 01 ; 0xc0285 vgarom.asm:489
+ sal bl, 1 ; d0 e3 ; 0xc0288 vgarom.asm:493
+ sal bl, 1 ; d0 e3 ; 0xc028a vgarom.asm:494
+ sal bl, 1 ; d0 e3 ; 0xc028c vgarom.asm:495
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc028e vgarom.asm:497
+ mov dx, 003c0h ; ba c0 03 ; 0xc0290 vgarom.asm:498
+ out DX, AL ; ee ; 0xc0293 vgarom.asm:499
+ mov AL, strict byte 020h ; b0 20 ; 0xc0294 vgarom.asm:500
+ out DX, AL ; ee ; 0xc0296 vgarom.asm:501
+ mov dx, 003dah ; ba da 03 ; 0xc0297 vgarom.asm:503
+ in AL, DX ; ec ; 0xc029a vgarom.asm:504
+ pop dx ; 5a ; 0xc029b vgarom.asm:506
+ pop bx ; 5b ; 0xc029c vgarom.asm:507
+ pop ax ; 58 ; 0xc029d vgarom.asm:508
+ retn ; c3 ; 0xc029e vgarom.asm:509
+ cmp bl, 014h ; 80 fb 14 ; 0xc029f vgarom.asm:514
+ jnbe short 002c6h ; 77 22 ; 0xc02a2 vgarom.asm:515
+ push ax ; 50 ; 0xc02a4 vgarom.asm:516
+ push dx ; 52 ; 0xc02a5 vgarom.asm:517
+ mov dx, 003dah ; ba da 03 ; 0xc02a6 vgarom.asm:518
+ in AL, DX ; ec ; 0xc02a9 vgarom.asm:519
+ mov dx, 003c0h ; ba c0 03 ; 0xc02aa vgarom.asm:520
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc02ad vgarom.asm:521
+ out DX, AL ; ee ; 0xc02af vgarom.asm:522
+ mov dx, 003c1h ; ba c1 03 ; 0xc02b0 vgarom.asm:523
+ in AL, DX ; ec ; 0xc02b3 vgarom.asm:524
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc02b4 vgarom.asm:525
+ mov dx, 003dah ; ba da 03 ; 0xc02b6 vgarom.asm:526
+ in AL, DX ; ec ; 0xc02b9 vgarom.asm:527
+ mov dx, 003c0h ; ba c0 03 ; 0xc02ba vgarom.asm:528
+ mov AL, strict byte 020h ; b0 20 ; 0xc02bd vgarom.asm:529
+ out DX, AL ; ee ; 0xc02bf vgarom.asm:530
+ mov dx, 003dah ; ba da 03 ; 0xc02c0 vgarom.asm:532
+ in AL, DX ; ec ; 0xc02c3 vgarom.asm:533
+ pop dx ; 5a ; 0xc02c4 vgarom.asm:535
+ pop ax ; 58 ; 0xc02c5 vgarom.asm:536
+ retn ; c3 ; 0xc02c6 vgarom.asm:538
+ push ax ; 50 ; 0xc02c7 vgarom.asm:543
+ push bx ; 53 ; 0xc02c8 vgarom.asm:544
+ mov BL, strict byte 011h ; b3 11 ; 0xc02c9 vgarom.asm:545
+ call 0029fh ; e8 d1 ff ; 0xc02cb vgarom.asm:546
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc02ce vgarom.asm:547
+ pop bx ; 5b ; 0xc02d0 vgarom.asm:548
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc02d1 vgarom.asm:549
+ pop ax ; 58 ; 0xc02d3 vgarom.asm:550
+ retn ; c3 ; 0xc02d4 vgarom.asm:551
+ push ax ; 50 ; 0xc02d5 vgarom.asm:556
+ push bx ; 53 ; 0xc02d6 vgarom.asm:557
+ push cx ; 51 ; 0xc02d7 vgarom.asm:558
+ push dx ; 52 ; 0xc02d8 vgarom.asm:559
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc02d9 vgarom.asm:560
+ mov CL, strict byte 000h ; b1 00 ; 0xc02db vgarom.asm:561
+ mov dx, 003dah ; ba da 03 ; 0xc02dd vgarom.asm:563
+ in AL, DX ; ec ; 0xc02e0 vgarom.asm:564
+ mov dx, 003c0h ; ba c0 03 ; 0xc02e1 vgarom.asm:565
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc02e4 vgarom.asm:566
+ out DX, AL ; ee ; 0xc02e6 vgarom.asm:567
+ mov dx, 003c1h ; ba c1 03 ; 0xc02e7 vgarom.asm:568
+ in AL, DX ; ec ; 0xc02ea vgarom.asm:569
+ mov byte [es:bx], al ; 26 88 07 ; 0xc02eb vgarom.asm:570
+ inc bx ; 43 ; 0xc02ee vgarom.asm:571
+ db 0feh, 0c1h
+ ; inc cl ; fe c1 ; 0xc02ef vgarom.asm:572
+ cmp cl, 010h ; 80 f9 10 ; 0xc02f1 vgarom.asm:573
+ jne short 002ddh ; 75 e7 ; 0xc02f4 vgarom.asm:574
+ mov dx, 003dah ; ba da 03 ; 0xc02f6 vgarom.asm:575
+ in AL, DX ; ec ; 0xc02f9 vgarom.asm:576
+ mov dx, 003c0h ; ba c0 03 ; 0xc02fa vgarom.asm:577
+ mov AL, strict byte 011h ; b0 11 ; 0xc02fd vgarom.asm:578
+ out DX, AL ; ee ; 0xc02ff vgarom.asm:579
+ mov dx, 003c1h ; ba c1 03 ; 0xc0300 vgarom.asm:580
+ in AL, DX ; ec ; 0xc0303 vgarom.asm:581
+ mov byte [es:bx], al ; 26 88 07 ; 0xc0304 vgarom.asm:582
+ mov dx, 003dah ; ba da 03 ; 0xc0307 vgarom.asm:583
+ in AL, DX ; ec ; 0xc030a vgarom.asm:584
+ mov dx, 003c0h ; ba c0 03 ; 0xc030b vgarom.asm:585
+ mov AL, strict byte 020h ; b0 20 ; 0xc030e vgarom.asm:586
+ out DX, AL ; ee ; 0xc0310 vgarom.asm:587
+ mov dx, 003dah ; ba da 03 ; 0xc0311 vgarom.asm:589
+ in AL, DX ; ec ; 0xc0314 vgarom.asm:590
+ pop dx ; 5a ; 0xc0315 vgarom.asm:592
+ pop cx ; 59 ; 0xc0316 vgarom.asm:593
+ pop bx ; 5b ; 0xc0317 vgarom.asm:594
+ pop ax ; 58 ; 0xc0318 vgarom.asm:595
+ retn ; c3 ; 0xc0319 vgarom.asm:596
+ push ax ; 50 ; 0xc031a vgarom.asm:601
+ push dx ; 52 ; 0xc031b vgarom.asm:602
+ mov dx, 003c8h ; ba c8 03 ; 0xc031c vgarom.asm:603
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc031f vgarom.asm:604
+ out DX, AL ; ee ; 0xc0321 vgarom.asm:605
+ mov dx, 003c9h ; ba c9 03 ; 0xc0322 vgarom.asm:606
+ pop ax ; 58 ; 0xc0325 vgarom.asm:607
+ push ax ; 50 ; 0xc0326 vgarom.asm:608
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc0327 vgarom.asm:609
+ out DX, AL ; ee ; 0xc0329 vgarom.asm:610
+ db 08ah, 0c5h
+ ; mov al, ch ; 8a c5 ; 0xc032a vgarom.asm:611
+ out DX, AL ; ee ; 0xc032c vgarom.asm:612
+ db 08ah, 0c1h
+ ; mov al, cl ; 8a c1 ; 0xc032d vgarom.asm:613
+ out DX, AL ; ee ; 0xc032f vgarom.asm:614
+ pop dx ; 5a ; 0xc0330 vgarom.asm:615
+ pop ax ; 58 ; 0xc0331 vgarom.asm:616
+ retn ; c3 ; 0xc0332 vgarom.asm:617
+ push ax ; 50 ; 0xc0333 vgarom.asm:622
+ push bx ; 53 ; 0xc0334 vgarom.asm:623
+ push cx ; 51 ; 0xc0335 vgarom.asm:624
+ push dx ; 52 ; 0xc0336 vgarom.asm:625
+ mov dx, 003c8h ; ba c8 03 ; 0xc0337 vgarom.asm:626
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc033a vgarom.asm:627
+ out DX, AL ; ee ; 0xc033c vgarom.asm:628
+ pop dx ; 5a ; 0xc033d vgarom.asm:629
+ push dx ; 52 ; 0xc033e vgarom.asm:630
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc033f vgarom.asm:631
+ mov dx, 003c9h ; ba c9 03 ; 0xc0341 vgarom.asm:632
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0344 vgarom.asm:634
+ out DX, AL ; ee ; 0xc0347 vgarom.asm:635
+ inc bx ; 43 ; 0xc0348 vgarom.asm:636
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0349 vgarom.asm:637
+ out DX, AL ; ee ; 0xc034c vgarom.asm:638
+ inc bx ; 43 ; 0xc034d vgarom.asm:639
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc034e vgarom.asm:640
+ out DX, AL ; ee ; 0xc0351 vgarom.asm:641
+ inc bx ; 43 ; 0xc0352 vgarom.asm:642
+ dec cx ; 49 ; 0xc0353 vgarom.asm:643
+ jne short 00344h ; 75 ee ; 0xc0354 vgarom.asm:644
+ pop dx ; 5a ; 0xc0356 vgarom.asm:645
+ pop cx ; 59 ; 0xc0357 vgarom.asm:646
+ pop bx ; 5b ; 0xc0358 vgarom.asm:647
+ pop ax ; 58 ; 0xc0359 vgarom.asm:648
+ retn ; c3 ; 0xc035a vgarom.asm:649
+ push ax ; 50 ; 0xc035b vgarom.asm:654
+ push bx ; 53 ; 0xc035c vgarom.asm:655
+ push dx ; 52 ; 0xc035d vgarom.asm:656
+ mov dx, 003dah ; ba da 03 ; 0xc035e vgarom.asm:657
+ in AL, DX ; ec ; 0xc0361 vgarom.asm:658
+ mov dx, 003c0h ; ba c0 03 ; 0xc0362 vgarom.asm:659
+ mov AL, strict byte 010h ; b0 10 ; 0xc0365 vgarom.asm:660
+ out DX, AL ; ee ; 0xc0367 vgarom.asm:661
+ mov dx, 003c1h ; ba c1 03 ; 0xc0368 vgarom.asm:662
+ in AL, DX ; ec ; 0xc036b vgarom.asm:663
+ and bl, 001h ; 80 e3 01 ; 0xc036c vgarom.asm:664
+ jne short 00389h ; 75 18 ; 0xc036f vgarom.asm:665
+ and AL, strict byte 07fh ; 24 7f ; 0xc0371 vgarom.asm:666
+ sal bh, 1 ; d0 e7 ; 0xc0373 vgarom.asm:670
+ sal bh, 1 ; d0 e7 ; 0xc0375 vgarom.asm:671
+ sal bh, 1 ; d0 e7 ; 0xc0377 vgarom.asm:672
+ sal bh, 1 ; d0 e7 ; 0xc0379 vgarom.asm:673
+ sal bh, 1 ; d0 e7 ; 0xc037b vgarom.asm:674
+ sal bh, 1 ; d0 e7 ; 0xc037d vgarom.asm:675
+ sal bh, 1 ; d0 e7 ; 0xc037f vgarom.asm:676
+ db 00ah, 0c7h
+ ; or al, bh ; 0a c7 ; 0xc0381 vgarom.asm:678
+ mov dx, 003c0h ; ba c0 03 ; 0xc0383 vgarom.asm:679
+ out DX, AL ; ee ; 0xc0386 vgarom.asm:680
+ jmp short 003a3h ; eb 1a ; 0xc0387 vgarom.asm:681
+ push ax ; 50 ; 0xc0389 vgarom.asm:683
+ mov dx, 003dah ; ba da 03 ; 0xc038a vgarom.asm:684
+ in AL, DX ; ec ; 0xc038d vgarom.asm:685
+ mov dx, 003c0h ; ba c0 03 ; 0xc038e vgarom.asm:686
+ mov AL, strict byte 014h ; b0 14 ; 0xc0391 vgarom.asm:687
+ out DX, AL ; ee ; 0xc0393 vgarom.asm:688
+ pop ax ; 58 ; 0xc0394 vgarom.asm:689
+ and AL, strict byte 080h ; 24 80 ; 0xc0395 vgarom.asm:690
+ jne short 0039dh ; 75 04 ; 0xc0397 vgarom.asm:691
+ sal bh, 1 ; d0 e7 ; 0xc0399 vgarom.asm:695
+ sal bh, 1 ; d0 e7 ; 0xc039b vgarom.asm:696
+ and bh, 00fh ; 80 e7 0f ; 0xc039d vgarom.asm:699
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc03a0 vgarom.asm:700
+ out DX, AL ; ee ; 0xc03a2 vgarom.asm:701
+ mov AL, strict byte 020h ; b0 20 ; 0xc03a3 vgarom.asm:703
+ out DX, AL ; ee ; 0xc03a5 vgarom.asm:704
+ mov dx, 003dah ; ba da 03 ; 0xc03a6 vgarom.asm:706
+ in AL, DX ; ec ; 0xc03a9 vgarom.asm:707
+ pop dx ; 5a ; 0xc03aa vgarom.asm:709
+ pop bx ; 5b ; 0xc03ab vgarom.asm:710
+ pop ax ; 58 ; 0xc03ac vgarom.asm:711
+ retn ; c3 ; 0xc03ad vgarom.asm:712
+ push ax ; 50 ; 0xc03ae vgarom.asm:717
+ push dx ; 52 ; 0xc03af vgarom.asm:718
+ mov dx, 003c7h ; ba c7 03 ; 0xc03b0 vgarom.asm:719
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03b3 vgarom.asm:720
+ out DX, AL ; ee ; 0xc03b5 vgarom.asm:721
+ pop ax ; 58 ; 0xc03b6 vgarom.asm:722
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc03b7 vgarom.asm:723
+ mov dx, 003c9h ; ba c9 03 ; 0xc03b9 vgarom.asm:724
+ in AL, DX ; ec ; 0xc03bc vgarom.asm:725
+ xchg al, ah ; 86 e0 ; 0xc03bd vgarom.asm:726
+ push ax ; 50 ; 0xc03bf vgarom.asm:727
+ in AL, DX ; ec ; 0xc03c0 vgarom.asm:728
+ db 08ah, 0e8h
+ ; mov ch, al ; 8a e8 ; 0xc03c1 vgarom.asm:729
+ in AL, DX ; ec ; 0xc03c3 vgarom.asm:730
+ db 08ah, 0c8h
+ ; mov cl, al ; 8a c8 ; 0xc03c4 vgarom.asm:731
+ pop dx ; 5a ; 0xc03c6 vgarom.asm:732
+ pop ax ; 58 ; 0xc03c7 vgarom.asm:733
+ retn ; c3 ; 0xc03c8 vgarom.asm:734
+ push ax ; 50 ; 0xc03c9 vgarom.asm:739
+ push bx ; 53 ; 0xc03ca vgarom.asm:740
+ push cx ; 51 ; 0xc03cb vgarom.asm:741
+ push dx ; 52 ; 0xc03cc vgarom.asm:742
+ mov dx, 003c7h ; ba c7 03 ; 0xc03cd vgarom.asm:743
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03d0 vgarom.asm:744
+ out DX, AL ; ee ; 0xc03d2 vgarom.asm:745
+ pop dx ; 5a ; 0xc03d3 vgarom.asm:746
+ push dx ; 52 ; 0xc03d4 vgarom.asm:747
+ db 08bh, 0dah
+ ; mov bx, dx ; 8b da ; 0xc03d5 vgarom.asm:748
+ mov dx, 003c9h ; ba c9 03 ; 0xc03d7 vgarom.asm:749
+ in AL, DX ; ec ; 0xc03da vgarom.asm:751
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03db vgarom.asm:752
+ inc bx ; 43 ; 0xc03de vgarom.asm:753
+ in AL, DX ; ec ; 0xc03df vgarom.asm:754
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03e0 vgarom.asm:755
+ inc bx ; 43 ; 0xc03e3 vgarom.asm:756
+ in AL, DX ; ec ; 0xc03e4 vgarom.asm:757
+ mov byte [es:bx], al ; 26 88 07 ; 0xc03e5 vgarom.asm:758
+ inc bx ; 43 ; 0xc03e8 vgarom.asm:759
+ dec cx ; 49 ; 0xc03e9 vgarom.asm:760
+ jne short 003dah ; 75 ee ; 0xc03ea vgarom.asm:761
+ pop dx ; 5a ; 0xc03ec vgarom.asm:762
+ pop cx ; 59 ; 0xc03ed vgarom.asm:763
+ pop bx ; 5b ; 0xc03ee vgarom.asm:764
+ pop ax ; 58 ; 0xc03ef vgarom.asm:765
+ retn ; c3 ; 0xc03f0 vgarom.asm:766
+ push ax ; 50 ; 0xc03f1 vgarom.asm:771
+ push dx ; 52 ; 0xc03f2 vgarom.asm:772
+ mov dx, 003c6h ; ba c6 03 ; 0xc03f3 vgarom.asm:773
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc03f6 vgarom.asm:774
+ out DX, AL ; ee ; 0xc03f8 vgarom.asm:775
+ pop dx ; 5a ; 0xc03f9 vgarom.asm:776
+ pop ax ; 58 ; 0xc03fa vgarom.asm:777
+ retn ; c3 ; 0xc03fb vgarom.asm:778
+ push ax ; 50 ; 0xc03fc vgarom.asm:783
+ push dx ; 52 ; 0xc03fd vgarom.asm:784
+ mov dx, 003c6h ; ba c6 03 ; 0xc03fe vgarom.asm:785
+ in AL, DX ; ec ; 0xc0401 vgarom.asm:786
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc0402 vgarom.asm:787
+ pop dx ; 5a ; 0xc0404 vgarom.asm:788
+ pop ax ; 58 ; 0xc0405 vgarom.asm:789
+ retn ; c3 ; 0xc0406 vgarom.asm:790
+ push ax ; 50 ; 0xc0407 vgarom.asm:795
+ push dx ; 52 ; 0xc0408 vgarom.asm:796
+ mov dx, 003dah ; ba da 03 ; 0xc0409 vgarom.asm:797
+ in AL, DX ; ec ; 0xc040c vgarom.asm:798
+ mov dx, 003c0h ; ba c0 03 ; 0xc040d vgarom.asm:799
+ mov AL, strict byte 010h ; b0 10 ; 0xc0410 vgarom.asm:800
+ out DX, AL ; ee ; 0xc0412 vgarom.asm:801
+ mov dx, 003c1h ; ba c1 03 ; 0xc0413 vgarom.asm:802
+ in AL, DX ; ec ; 0xc0416 vgarom.asm:803
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc0417 vgarom.asm:804
+ shr bl, 1 ; d0 eb ; 0xc0419 vgarom.asm:808
+ shr bl, 1 ; d0 eb ; 0xc041b vgarom.asm:809
+ shr bl, 1 ; d0 eb ; 0xc041d vgarom.asm:810
+ shr bl, 1 ; d0 eb ; 0xc041f vgarom.asm:811
+ shr bl, 1 ; d0 eb ; 0xc0421 vgarom.asm:812
+ shr bl, 1 ; d0 eb ; 0xc0423 vgarom.asm:813
+ shr bl, 1 ; d0 eb ; 0xc0425 vgarom.asm:814
+ mov dx, 003dah ; ba da 03 ; 0xc0427 vgarom.asm:816
+ in AL, DX ; ec ; 0xc042a vgarom.asm:817
+ mov dx, 003c0h ; ba c0 03 ; 0xc042b vgarom.asm:818
+ mov AL, strict byte 014h ; b0 14 ; 0xc042e vgarom.asm:819
+ out DX, AL ; ee ; 0xc0430 vgarom.asm:820
+ mov dx, 003c1h ; ba c1 03 ; 0xc0431 vgarom.asm:821
+ in AL, DX ; ec ; 0xc0434 vgarom.asm:822
+ db 08ah, 0f8h
+ ; mov bh, al ; 8a f8 ; 0xc0435 vgarom.asm:823
+ and bh, 00fh ; 80 e7 0f ; 0xc0437 vgarom.asm:824
+ test bl, 001h ; f6 c3 01 ; 0xc043a vgarom.asm:825
+ jne short 00443h ; 75 04 ; 0xc043d vgarom.asm:826
+ shr bh, 1 ; d0 ef ; 0xc043f vgarom.asm:830
+ shr bh, 1 ; d0 ef ; 0xc0441 vgarom.asm:831
+ mov dx, 003dah ; ba da 03 ; 0xc0443 vgarom.asm:834
+ in AL, DX ; ec ; 0xc0446 vgarom.asm:835
+ mov dx, 003c0h ; ba c0 03 ; 0xc0447 vgarom.asm:836
+ mov AL, strict byte 020h ; b0 20 ; 0xc044a vgarom.asm:837
+ out DX, AL ; ee ; 0xc044c vgarom.asm:838
+ mov dx, 003dah ; ba da 03 ; 0xc044d vgarom.asm:840
+ in AL, DX ; ec ; 0xc0450 vgarom.asm:841
+ pop dx ; 5a ; 0xc0451 vgarom.asm:843
+ pop ax ; 58 ; 0xc0452 vgarom.asm:844
+ retn ; c3 ; 0xc0453 vgarom.asm:845
+ push ax ; 50 ; 0xc0454 vgarom.asm:850
+ push dx ; 52 ; 0xc0455 vgarom.asm:851
+ mov dx, 003c4h ; ba c4 03 ; 0xc0456 vgarom.asm:852
+ db 08ah, 0e3h
+ ; mov ah, bl ; 8a e3 ; 0xc0459 vgarom.asm:853
+ mov AL, strict byte 003h ; b0 03 ; 0xc045b vgarom.asm:854
+ out DX, ax ; ef ; 0xc045d vgarom.asm:855
+ pop dx ; 5a ; 0xc045e vgarom.asm:856
+ pop ax ; 58 ; 0xc045f vgarom.asm:857
+ retn ; c3 ; 0xc0460 vgarom.asm:858
+ push DS ; 1e ; 0xc0461 vgarom.asm:863
+ push ax ; 50 ; 0xc0462 vgarom.asm:864
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0463 vgarom.asm:865
+ mov ds, ax ; 8e d8 ; 0xc0466 vgarom.asm:866
+ db 032h, 0edh
+ ; xor ch, ch ; 32 ed ; 0xc0468 vgarom.asm:867
+ mov bx, 00088h ; bb 88 00 ; 0xc046a vgarom.asm:868
+ mov cl, byte [bx] ; 8a 0f ; 0xc046d vgarom.asm:869
+ and cl, 00fh ; 80 e1 0f ; 0xc046f vgarom.asm:870
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc0472 vgarom.asm:871
+ mov ax, word [bx] ; 8b 07 ; 0xc0475 vgarom.asm:872
+ mov bx, strict word 00003h ; bb 03 00 ; 0xc0477 vgarom.asm:873
+ cmp ax, 003b4h ; 3d b4 03 ; 0xc047a vgarom.asm:874
+ jne short 00481h ; 75 02 ; 0xc047d vgarom.asm:875
+ mov BH, strict byte 001h ; b7 01 ; 0xc047f vgarom.asm:876
+ pop ax ; 58 ; 0xc0481 vgarom.asm:878
+ pop DS ; 1f ; 0xc0482 vgarom.asm:879
+ retn ; c3 ; 0xc0483 vgarom.asm:880
+ push DS ; 1e ; 0xc0484 vgarom.asm:888
+ push bx ; 53 ; 0xc0485 vgarom.asm:889
+ push dx ; 52 ; 0xc0486 vgarom.asm:890
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc0487 vgarom.asm:891
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0489 vgarom.asm:892
+ mov ds, ax ; 8e d8 ; 0xc048c vgarom.asm:893
+ mov bx, 00089h ; bb 89 00 ; 0xc048e vgarom.asm:894
+ mov al, byte [bx] ; 8a 07 ; 0xc0491 vgarom.asm:895
+ mov bx, 00088h ; bb 88 00 ; 0xc0493 vgarom.asm:896
+ mov ah, byte [bx] ; 8a 27 ; 0xc0496 vgarom.asm:897
+ cmp dl, 001h ; 80 fa 01 ; 0xc0498 vgarom.asm:898
+ je short 004b2h ; 74 15 ; 0xc049b vgarom.asm:899
+ jc short 004bch ; 72 1d ; 0xc049d vgarom.asm:900
+ cmp dl, 002h ; 80 fa 02 ; 0xc049f vgarom.asm:901
+ je short 004a6h ; 74 02 ; 0xc04a2 vgarom.asm:902
+ jmp short 004d0h ; eb 2a ; 0xc04a4 vgarom.asm:912
+ and AL, strict byte 07fh ; 24 7f ; 0xc04a6 vgarom.asm:918
+ or AL, strict byte 010h ; 0c 10 ; 0xc04a8 vgarom.asm:919
+ and ah, 0f0h ; 80 e4 f0 ; 0xc04aa vgarom.asm:920
+ or ah, 009h ; 80 cc 09 ; 0xc04ad vgarom.asm:921
+ jne short 004c6h ; 75 14 ; 0xc04b0 vgarom.asm:922
+ and AL, strict byte 06fh ; 24 6f ; 0xc04b2 vgarom.asm:928
+ and ah, 0f0h ; 80 e4 f0 ; 0xc04b4 vgarom.asm:929
+ or ah, 009h ; 80 cc 09 ; 0xc04b7 vgarom.asm:930
+ jne short 004c6h ; 75 0a ; 0xc04ba vgarom.asm:931
+ and AL, strict byte 0efh ; 24 ef ; 0xc04bc vgarom.asm:937
+ or AL, strict byte 080h ; 0c 80 ; 0xc04be vgarom.asm:938
+ and ah, 0f0h ; 80 e4 f0 ; 0xc04c0 vgarom.asm:939
+ or ah, 008h ; 80 cc 08 ; 0xc04c3 vgarom.asm:940
+ mov bx, 00089h ; bb 89 00 ; 0xc04c6 vgarom.asm:942
+ mov byte [bx], al ; 88 07 ; 0xc04c9 vgarom.asm:943
+ mov bx, 00088h ; bb 88 00 ; 0xc04cb vgarom.asm:944
+ mov byte [bx], ah ; 88 27 ; 0xc04ce vgarom.asm:945
+ mov ax, 01212h ; b8 12 12 ; 0xc04d0 vgarom.asm:947
+ pop dx ; 5a ; 0xc04d3 vgarom.asm:948
+ pop bx ; 5b ; 0xc04d4 vgarom.asm:949
+ pop DS ; 1f ; 0xc04d5 vgarom.asm:950
+ retn ; c3 ; 0xc04d6 vgarom.asm:951
+ push DS ; 1e ; 0xc04d7 vgarom.asm:960
+ push bx ; 53 ; 0xc04d8 vgarom.asm:961
+ push dx ; 52 ; 0xc04d9 vgarom.asm:962
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc04da vgarom.asm:963
+ and dl, 001h ; 80 e2 01 ; 0xc04dc vgarom.asm:964
+ sal dl, 1 ; d0 e2 ; 0xc04df vgarom.asm:968
+ sal dl, 1 ; d0 e2 ; 0xc04e1 vgarom.asm:969
+ sal dl, 1 ; d0 e2 ; 0xc04e3 vgarom.asm:970
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc04e5 vgarom.asm:972
+ mov ds, ax ; 8e d8 ; 0xc04e8 vgarom.asm:973
+ mov bx, 00089h ; bb 89 00 ; 0xc04ea vgarom.asm:974
+ mov al, byte [bx] ; 8a 07 ; 0xc04ed vgarom.asm:975
+ and AL, strict byte 0f7h ; 24 f7 ; 0xc04ef vgarom.asm:976
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc04f1 vgarom.asm:977
+ mov byte [bx], al ; 88 07 ; 0xc04f3 vgarom.asm:978
+ mov ax, 01212h ; b8 12 12 ; 0xc04f5 vgarom.asm:979
+ pop dx ; 5a ; 0xc04f8 vgarom.asm:980
+ pop bx ; 5b ; 0xc04f9 vgarom.asm:981
+ pop DS ; 1f ; 0xc04fa vgarom.asm:982
+ retn ; c3 ; 0xc04fb vgarom.asm:983
+ push bx ; 53 ; 0xc04fc vgarom.asm:987
+ push dx ; 52 ; 0xc04fd vgarom.asm:988
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc04fe vgarom.asm:989
+ and bl, 001h ; 80 e3 01 ; 0xc0500 vgarom.asm:990
+ xor bl, 001h ; 80 f3 01 ; 0xc0503 vgarom.asm:991
+ sal bl, 1 ; d0 e3 ; 0xc0506 vgarom.asm:992
+ mov dx, 003cch ; ba cc 03 ; 0xc0508 vgarom.asm:993
+ in AL, DX ; ec ; 0xc050b vgarom.asm:994
+ and AL, strict byte 0fdh ; 24 fd ; 0xc050c vgarom.asm:995
+ db 00ah, 0c3h
+ ; or al, bl ; 0a c3 ; 0xc050e vgarom.asm:996
+ mov dx, 003c2h ; ba c2 03 ; 0xc0510 vgarom.asm:997
+ out DX, AL ; ee ; 0xc0513 vgarom.asm:998
+ mov ax, 01212h ; b8 12 12 ; 0xc0514 vgarom.asm:999
+ pop dx ; 5a ; 0xc0517 vgarom.asm:1000
+ pop bx ; 5b ; 0xc0518 vgarom.asm:1001
+ retn ; c3 ; 0xc0519 vgarom.asm:1002
+ push DS ; 1e ; 0xc051a vgarom.asm:1006
+ push bx ; 53 ; 0xc051b vgarom.asm:1007
+ push dx ; 52 ; 0xc051c vgarom.asm:1008
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc051d vgarom.asm:1009
+ and dl, 001h ; 80 e2 01 ; 0xc051f vgarom.asm:1010
+ xor dl, 001h ; 80 f2 01 ; 0xc0522 vgarom.asm:1011
+ sal dl, 1 ; d0 e2 ; 0xc0525 vgarom.asm:1012
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0527 vgarom.asm:1013
+ mov ds, ax ; 8e d8 ; 0xc052a vgarom.asm:1014
+ mov bx, 00089h ; bb 89 00 ; 0xc052c vgarom.asm:1015
+ mov al, byte [bx] ; 8a 07 ; 0xc052f vgarom.asm:1016
+ and AL, strict byte 0fdh ; 24 fd ; 0xc0531 vgarom.asm:1017
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc0533 vgarom.asm:1018
+ mov byte [bx], al ; 88 07 ; 0xc0535 vgarom.asm:1019
+ mov ax, 01212h ; b8 12 12 ; 0xc0537 vgarom.asm:1020
+ pop dx ; 5a ; 0xc053a vgarom.asm:1021
+ pop bx ; 5b ; 0xc053b vgarom.asm:1022
+ pop DS ; 1f ; 0xc053c vgarom.asm:1023
+ retn ; c3 ; 0xc053d vgarom.asm:1024
+ push DS ; 1e ; 0xc053e vgarom.asm:1028
+ push bx ; 53 ; 0xc053f vgarom.asm:1029
+ push dx ; 52 ; 0xc0540 vgarom.asm:1030
+ db 08ah, 0d0h
+ ; mov dl, al ; 8a d0 ; 0xc0541 vgarom.asm:1031
+ and dl, 001h ; 80 e2 01 ; 0xc0543 vgarom.asm:1032
+ xor dl, 001h ; 80 f2 01 ; 0xc0546 vgarom.asm:1033
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0549 vgarom.asm:1034
+ mov ds, ax ; 8e d8 ; 0xc054c vgarom.asm:1035
+ mov bx, 00089h ; bb 89 00 ; 0xc054e vgarom.asm:1036
+ mov al, byte [bx] ; 8a 07 ; 0xc0551 vgarom.asm:1037
+ and AL, strict byte 0feh ; 24 fe ; 0xc0553 vgarom.asm:1038
+ db 00ah, 0c2h
+ ; or al, dl ; 0a c2 ; 0xc0555 vgarom.asm:1039
+ mov byte [bx], al ; 88 07 ; 0xc0557 vgarom.asm:1040
+ mov ax, 01212h ; b8 12 12 ; 0xc0559 vgarom.asm:1041
+ pop dx ; 5a ; 0xc055c vgarom.asm:1042
+ pop bx ; 5b ; 0xc055d vgarom.asm:1043
+ pop DS ; 1f ; 0xc055e vgarom.asm:1044
+ retn ; c3 ; 0xc055f vgarom.asm:1045
+ cmp AL, strict byte 000h ; 3c 00 ; 0xc0560 vgarom.asm:1050
+ je short 00569h ; 74 05 ; 0xc0562 vgarom.asm:1051
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc0564 vgarom.asm:1052
+ je short 0057eh ; 74 16 ; 0xc0566 vgarom.asm:1053
+ retn ; c3 ; 0xc0568 vgarom.asm:1057
+ push DS ; 1e ; 0xc0569 vgarom.asm:1059
+ push ax ; 50 ; 0xc056a vgarom.asm:1060
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc056b vgarom.asm:1061
+ mov ds, ax ; 8e d8 ; 0xc056e vgarom.asm:1062
+ mov bx, 0008ah ; bb 8a 00 ; 0xc0570 vgarom.asm:1063
+ mov al, byte [bx] ; 8a 07 ; 0xc0573 vgarom.asm:1064
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc0575 vgarom.asm:1065
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc0577 vgarom.asm:1066
+ pop ax ; 58 ; 0xc0579 vgarom.asm:1067
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc057a vgarom.asm:1068
+ pop DS ; 1f ; 0xc057c vgarom.asm:1069
+ retn ; c3 ; 0xc057d vgarom.asm:1070
+ push DS ; 1e ; 0xc057e vgarom.asm:1072
+ push ax ; 50 ; 0xc057f vgarom.asm:1073
+ push bx ; 53 ; 0xc0580 vgarom.asm:1074
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0581 vgarom.asm:1075
+ mov ds, ax ; 8e d8 ; 0xc0584 vgarom.asm:1076
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc0586 vgarom.asm:1077
+ mov bx, 0008ah ; bb 8a 00 ; 0xc0588 vgarom.asm:1078
+ mov byte [bx], al ; 88 07 ; 0xc058b vgarom.asm:1079
+ pop bx ; 5b ; 0xc058d vgarom.asm:1089
+ pop ax ; 58 ; 0xc058e vgarom.asm:1090
+ db 08ah, 0c4h
+ ; mov al, ah ; 8a c4 ; 0xc058f vgarom.asm:1091
+ pop DS ; 1f ; 0xc0591 vgarom.asm:1092
+ retn ; c3 ; 0xc0592 vgarom.asm:1093
+ times 0xd db 0
+ ; disGetNextSymbol 0xc05a0 LB 0x3af -> off=0x0 cb=0000000000000007 uValue=00000000000c05a0 'do_out_dx_ax'
+do_out_dx_ax: ; 0xc05a0 LB 0x7
+ xchg ah, al ; 86 c4 ; 0xc05a0 vberom.asm:69
+ out DX, AL ; ee ; 0xc05a2 vberom.asm:70
+ xchg ah, al ; 86 c4 ; 0xc05a3 vberom.asm:71
+ out DX, AL ; ee ; 0xc05a5 vberom.asm:72
+ retn ; c3 ; 0xc05a6 vberom.asm:73
+ ; disGetNextSymbol 0xc05a7 LB 0x3a8 -> off=0x0 cb=0000000000000043 uValue=00000000000c05a7 'do_in_ax_dx'
+do_in_ax_dx: ; 0xc05a7 LB 0x43
+ in AL, DX ; ec ; 0xc05a7 vberom.asm:76
+ xchg ah, al ; 86 c4 ; 0xc05a8 vberom.asm:77
+ in AL, DX ; ec ; 0xc05aa vberom.asm:78
+ retn ; c3 ; 0xc05ab vberom.asm:79
+ push ax ; 50 ; 0xc05ac vberom.asm:90
+ push dx ; 52 ; 0xc05ad vberom.asm:91
+ mov dx, 003dah ; ba da 03 ; 0xc05ae vberom.asm:92
+ in AL, DX ; ec ; 0xc05b1 vberom.asm:94
+ test AL, strict byte 008h ; a8 08 ; 0xc05b2 vberom.asm:95
+ je short 005b1h ; 74 fb ; 0xc05b4 vberom.asm:96
+ pop dx ; 5a ; 0xc05b6 vberom.asm:97
+ pop ax ; 58 ; 0xc05b7 vberom.asm:98
+ retn ; c3 ; 0xc05b8 vberom.asm:99
+ push ax ; 50 ; 0xc05b9 vberom.asm:102
+ push dx ; 52 ; 0xc05ba vberom.asm:103
+ mov dx, 003dah ; ba da 03 ; 0xc05bb vberom.asm:104
+ in AL, DX ; ec ; 0xc05be vberom.asm:106
+ test AL, strict byte 008h ; a8 08 ; 0xc05bf vberom.asm:107
+ jne short 005beh ; 75 fb ; 0xc05c1 vberom.asm:108
+ pop dx ; 5a ; 0xc05c3 vberom.asm:109
+ pop ax ; 58 ; 0xc05c4 vberom.asm:110
+ retn ; c3 ; 0xc05c5 vberom.asm:111
+ push dx ; 52 ; 0xc05c6 vberom.asm:116
+ mov dx, 001ceh ; ba ce 01 ; 0xc05c7 vberom.asm:117
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc05ca vberom.asm:118
+ call 005a0h ; e8 d0 ff ; 0xc05cd vberom.asm:119
+ mov dx, 001cfh ; ba cf 01 ; 0xc05d0 vberom.asm:120
+ call 005a7h ; e8 d1 ff ; 0xc05d3 vberom.asm:121
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc05d6 vberom.asm:122
+ jbe short 005e8h ; 76 0e ; 0xc05d8 vberom.asm:123
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc05da vberom.asm:124
+ shr ah, 1 ; d0 ec ; 0xc05dc vberom.asm:128
+ shr ah, 1 ; d0 ec ; 0xc05de vberom.asm:129
+ shr ah, 1 ; d0 ec ; 0xc05e0 vberom.asm:130
+ test AL, strict byte 007h ; a8 07 ; 0xc05e2 vberom.asm:132
+ je short 005e8h ; 74 02 ; 0xc05e4 vberom.asm:133
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc05e6 vberom.asm:134
+ pop dx ; 5a ; 0xc05e8 vberom.asm:136
+ retn ; c3 ; 0xc05e9 vberom.asm:137
+ ; disGetNextSymbol 0xc05ea LB 0x365 -> off=0x0 cb=0000000000000026 uValue=00000000000c05ea '_dispi_get_max_bpp'
+_dispi_get_max_bpp: ; 0xc05ea LB 0x26
+ push dx ; 52 ; 0xc05ea vberom.asm:142
+ push bx ; 53 ; 0xc05eb vberom.asm:143
+ call 00624h ; e8 35 00 ; 0xc05ec vberom.asm:144
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc05ef vberom.asm:145
+ or ax, strict byte 00002h ; 83 c8 02 ; 0xc05f1 vberom.asm:146
+ call 00610h ; e8 19 00 ; 0xc05f4 vberom.asm:147
+ mov dx, 001ceh ; ba ce 01 ; 0xc05f7 vberom.asm:148
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc05fa vberom.asm:149
+ call 005a0h ; e8 a0 ff ; 0xc05fd vberom.asm:150
+ mov dx, 001cfh ; ba cf 01 ; 0xc0600 vberom.asm:151
+ call 005a7h ; e8 a1 ff ; 0xc0603 vberom.asm:152
+ push ax ; 50 ; 0xc0606 vberom.asm:153
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc0607 vberom.asm:154
+ call 00610h ; e8 04 00 ; 0xc0609 vberom.asm:155
+ pop ax ; 58 ; 0xc060c vberom.asm:156
+ pop bx ; 5b ; 0xc060d vberom.asm:157
+ pop dx ; 5a ; 0xc060e vberom.asm:158
+ retn ; c3 ; 0xc060f vberom.asm:159
+ ; disGetNextSymbol 0xc0610 LB 0x33f -> off=0x0 cb=0000000000000026 uValue=00000000000c0610 'dispi_set_enable_'
+dispi_set_enable_: ; 0xc0610 LB 0x26
+ push dx ; 52 ; 0xc0610 vberom.asm:162
+ push ax ; 50 ; 0xc0611 vberom.asm:163
+ mov dx, 001ceh ; ba ce 01 ; 0xc0612 vberom.asm:164
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc0615 vberom.asm:165
+ call 005a0h ; e8 85 ff ; 0xc0618 vberom.asm:166
+ pop ax ; 58 ; 0xc061b vberom.asm:167
+ mov dx, 001cfh ; ba cf 01 ; 0xc061c vberom.asm:168
+ call 005a0h ; e8 7e ff ; 0xc061f vberom.asm:169
+ pop dx ; 5a ; 0xc0622 vberom.asm:170
+ retn ; c3 ; 0xc0623 vberom.asm:171
+ push dx ; 52 ; 0xc0624 vberom.asm:174
+ mov dx, 001ceh ; ba ce 01 ; 0xc0625 vberom.asm:175
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc0628 vberom.asm:176
+ call 005a0h ; e8 72 ff ; 0xc062b vberom.asm:177
+ mov dx, 001cfh ; ba cf 01 ; 0xc062e vberom.asm:178
+ call 005a7h ; e8 73 ff ; 0xc0631 vberom.asm:179
+ pop dx ; 5a ; 0xc0634 vberom.asm:180
+ retn ; c3 ; 0xc0635 vberom.asm:181
+ ; disGetNextSymbol 0xc0636 LB 0x319 -> off=0x0 cb=0000000000000026 uValue=00000000000c0636 'dispi_set_bank_'
+dispi_set_bank_: ; 0xc0636 LB 0x26
+ push dx ; 52 ; 0xc0636 vberom.asm:184
+ push ax ; 50 ; 0xc0637 vberom.asm:185
+ mov dx, 001ceh ; ba ce 01 ; 0xc0638 vberom.asm:186
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc063b vberom.asm:187
+ call 005a0h ; e8 5f ff ; 0xc063e vberom.asm:188
+ pop ax ; 58 ; 0xc0641 vberom.asm:189
+ mov dx, 001cfh ; ba cf 01 ; 0xc0642 vberom.asm:190
+ call 005a0h ; e8 58 ff ; 0xc0645 vberom.asm:191
+ pop dx ; 5a ; 0xc0648 vberom.asm:192
+ retn ; c3 ; 0xc0649 vberom.asm:193
+ push dx ; 52 ; 0xc064a vberom.asm:196
+ mov dx, 001ceh ; ba ce 01 ; 0xc064b vberom.asm:197
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc064e vberom.asm:198
+ call 005a0h ; e8 4c ff ; 0xc0651 vberom.asm:199
+ mov dx, 001cfh ; ba cf 01 ; 0xc0654 vberom.asm:200
+ call 005a7h ; e8 4d ff ; 0xc0657 vberom.asm:201
+ pop dx ; 5a ; 0xc065a vberom.asm:202
+ retn ; c3 ; 0xc065b vberom.asm:203
+ ; disGetNextSymbol 0xc065c LB 0x2f3 -> off=0x0 cb=00000000000000ac uValue=00000000000c065c '_dispi_set_bank_farcall'
+_dispi_set_bank_farcall: ; 0xc065c LB 0xac
+ cmp bx, 00100h ; 81 fb 00 01 ; 0xc065c vberom.asm:206
+ je short 00686h ; 74 24 ; 0xc0660 vberom.asm:207
+ db 00bh, 0dbh
+ ; or bx, bx ; 0b db ; 0xc0662 vberom.asm:208
+ jne short 00698h ; 75 32 ; 0xc0664 vberom.asm:209
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0666 vberom.asm:210
+ push dx ; 52 ; 0xc0668 vberom.asm:211
+ push ax ; 50 ; 0xc0669 vberom.asm:212
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc066a vberom.asm:213
+ mov dx, 001ceh ; ba ce 01 ; 0xc066d vberom.asm:214
+ call 005a0h ; e8 2d ff ; 0xc0670 vberom.asm:215
+ pop ax ; 58 ; 0xc0673 vberom.asm:216
+ mov dx, 001cfh ; ba cf 01 ; 0xc0674 vberom.asm:217
+ call 005a0h ; e8 26 ff ; 0xc0677 vberom.asm:218
+ call 005a7h ; e8 2a ff ; 0xc067a vberom.asm:219
+ pop dx ; 5a ; 0xc067d vberom.asm:220
+ db 03bh, 0d0h
+ ; cmp dx, ax ; 3b d0 ; 0xc067e vberom.asm:221
+ jne short 00698h ; 75 16 ; 0xc0680 vberom.asm:222
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0682 vberom.asm:223
+ retf ; cb ; 0xc0685 vberom.asm:224
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0686 vberom.asm:226
+ mov dx, 001ceh ; ba ce 01 ; 0xc0689 vberom.asm:227
+ call 005a0h ; e8 11 ff ; 0xc068c vberom.asm:228
+ mov dx, 001cfh ; ba cf 01 ; 0xc068f vberom.asm:229
+ call 005a7h ; e8 12 ff ; 0xc0692 vberom.asm:230
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0695 vberom.asm:231
+ retf ; cb ; 0xc0697 vberom.asm:232
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0698 vberom.asm:234
+ retf ; cb ; 0xc069b vberom.asm:235
+ push dx ; 52 ; 0xc069c vberom.asm:238
+ push ax ; 50 ; 0xc069d vberom.asm:239
+ mov dx, 001ceh ; ba ce 01 ; 0xc069e vberom.asm:240
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc06a1 vberom.asm:241
+ call 005a0h ; e8 f9 fe ; 0xc06a4 vberom.asm:242
+ pop ax ; 58 ; 0xc06a7 vberom.asm:243
+ mov dx, 001cfh ; ba cf 01 ; 0xc06a8 vberom.asm:244
+ call 005a0h ; e8 f2 fe ; 0xc06ab vberom.asm:245
+ pop dx ; 5a ; 0xc06ae vberom.asm:246
+ retn ; c3 ; 0xc06af vberom.asm:247
+ push dx ; 52 ; 0xc06b0 vberom.asm:250
+ mov dx, 001ceh ; ba ce 01 ; 0xc06b1 vberom.asm:251
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc06b4 vberom.asm:252
+ call 005a0h ; e8 e6 fe ; 0xc06b7 vberom.asm:253
+ mov dx, 001cfh ; ba cf 01 ; 0xc06ba vberom.asm:254
+ call 005a7h ; e8 e7 fe ; 0xc06bd vberom.asm:255
+ pop dx ; 5a ; 0xc06c0 vberom.asm:256
+ retn ; c3 ; 0xc06c1 vberom.asm:257
+ push dx ; 52 ; 0xc06c2 vberom.asm:260
+ push ax ; 50 ; 0xc06c3 vberom.asm:261
+ mov dx, 001ceh ; ba ce 01 ; 0xc06c4 vberom.asm:262
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc06c7 vberom.asm:263
+ call 005a0h ; e8 d3 fe ; 0xc06ca vberom.asm:264
+ pop ax ; 58 ; 0xc06cd vberom.asm:265
+ mov dx, 001cfh ; ba cf 01 ; 0xc06ce vberom.asm:266
+ call 005a0h ; e8 cc fe ; 0xc06d1 vberom.asm:267
+ pop dx ; 5a ; 0xc06d4 vberom.asm:268
+ retn ; c3 ; 0xc06d5 vberom.asm:269
+ push dx ; 52 ; 0xc06d6 vberom.asm:272
+ mov dx, 001ceh ; ba ce 01 ; 0xc06d7 vberom.asm:273
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc06da vberom.asm:274
+ call 005a0h ; e8 c0 fe ; 0xc06dd vberom.asm:275
+ mov dx, 001cfh ; ba cf 01 ; 0xc06e0 vberom.asm:276
+ call 005a7h ; e8 c1 fe ; 0xc06e3 vberom.asm:277
+ pop dx ; 5a ; 0xc06e6 vberom.asm:278
+ retn ; c3 ; 0xc06e7 vberom.asm:279
+ push ax ; 50 ; 0xc06e8 vberom.asm:282
+ push bx ; 53 ; 0xc06e9 vberom.asm:283
+ push dx ; 52 ; 0xc06ea vberom.asm:284
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc06eb vberom.asm:285
+ call 005c6h ; e8 d6 fe ; 0xc06ed vberom.asm:286
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc06f0 vberom.asm:287
+ jnbe short 006f6h ; 77 02 ; 0xc06f2 vberom.asm:288
+ shr bx, 1 ; d1 eb ; 0xc06f4 vberom.asm:289
+ shr bx, 1 ; d1 eb ; 0xc06f6 vberom.asm:294
+ shr bx, 1 ; d1 eb ; 0xc06f8 vberom.asm:295
+ shr bx, 1 ; d1 eb ; 0xc06fa vberom.asm:296
+ mov dx, 003d4h ; ba d4 03 ; 0xc06fc vberom.asm:298
+ db 08ah, 0e3h
+ ; mov ah, bl ; 8a e3 ; 0xc06ff vberom.asm:299
+ mov AL, strict byte 013h ; b0 13 ; 0xc0701 vberom.asm:300
+ out DX, ax ; ef ; 0xc0703 vberom.asm:301
+ pop dx ; 5a ; 0xc0704 vberom.asm:302
+ pop bx ; 5b ; 0xc0705 vberom.asm:303
+ pop ax ; 58 ; 0xc0706 vberom.asm:304
+ retn ; c3 ; 0xc0707 vberom.asm:305
+ ; disGetNextSymbol 0xc0708 LB 0x247 -> off=0x0 cb=00000000000000f0 uValue=00000000000c0708 '_vga_compat_setup'
+_vga_compat_setup: ; 0xc0708 LB 0xf0
+ push ax ; 50 ; 0xc0708 vberom.asm:308
+ push dx ; 52 ; 0xc0709 vberom.asm:309
+ mov dx, 001ceh ; ba ce 01 ; 0xc070a vberom.asm:312
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc070d vberom.asm:313
+ call 005a0h ; e8 8d fe ; 0xc0710 vberom.asm:314
+ mov dx, 001cfh ; ba cf 01 ; 0xc0713 vberom.asm:315
+ call 005a7h ; e8 8e fe ; 0xc0716 vberom.asm:316
+ push ax ; 50 ; 0xc0719 vberom.asm:317
+ mov dx, 003d4h ; ba d4 03 ; 0xc071a vberom.asm:318
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc071d vberom.asm:319
+ out DX, ax ; ef ; 0xc0720 vberom.asm:320
+ pop ax ; 58 ; 0xc0721 vberom.asm:321
+ push ax ; 50 ; 0xc0722 vberom.asm:322
+ shr ax, 1 ; d1 e8 ; 0xc0723 vberom.asm:326
+ shr ax, 1 ; d1 e8 ; 0xc0725 vberom.asm:327
+ shr ax, 1 ; d1 e8 ; 0xc0727 vberom.asm:328
+ dec ax ; 48 ; 0xc0729 vberom.asm:330
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc072a vberom.asm:331
+ mov AL, strict byte 001h ; b0 01 ; 0xc072c vberom.asm:332
+ out DX, ax ; ef ; 0xc072e vberom.asm:333
+ pop ax ; 58 ; 0xc072f vberom.asm:334
+ call 006e8h ; e8 b5 ff ; 0xc0730 vberom.asm:335
+ mov dx, 001ceh ; ba ce 01 ; 0xc0733 vberom.asm:338
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc0736 vberom.asm:339
+ call 005a0h ; e8 64 fe ; 0xc0739 vberom.asm:340
+ mov dx, 001cfh ; ba cf 01 ; 0xc073c vberom.asm:341
+ call 005a7h ; e8 65 fe ; 0xc073f vberom.asm:342
+ dec ax ; 48 ; 0xc0742 vberom.asm:343
+ push ax ; 50 ; 0xc0743 vberom.asm:344
+ mov dx, 003d4h ; ba d4 03 ; 0xc0744 vberom.asm:345
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc0747 vberom.asm:346
+ mov AL, strict byte 012h ; b0 12 ; 0xc0749 vberom.asm:347
+ out DX, ax ; ef ; 0xc074b vberom.asm:348
+ pop ax ; 58 ; 0xc074c vberom.asm:349
+ mov AL, strict byte 007h ; b0 07 ; 0xc074d vberom.asm:350
+ out DX, AL ; ee ; 0xc074f vberom.asm:351
+ inc dx ; 42 ; 0xc0750 vberom.asm:352
+ in AL, DX ; ec ; 0xc0751 vberom.asm:353
+ and AL, strict byte 0bdh ; 24 bd ; 0xc0752 vberom.asm:354
+ test ah, 001h ; f6 c4 01 ; 0xc0754 vberom.asm:355
+ je short 0075bh ; 74 02 ; 0xc0757 vberom.asm:356
+ or AL, strict byte 002h ; 0c 02 ; 0xc0759 vberom.asm:357
+ test ah, 002h ; f6 c4 02 ; 0xc075b vberom.asm:359
+ je short 00762h ; 74 02 ; 0xc075e vberom.asm:360
+ or AL, strict byte 040h ; 0c 40 ; 0xc0760 vberom.asm:361
+ out DX, AL ; ee ; 0xc0762 vberom.asm:363
+ mov dx, 003d4h ; ba d4 03 ; 0xc0763 vberom.asm:366
+ mov ax, strict word 00009h ; b8 09 00 ; 0xc0766 vberom.asm:367
+ out DX, AL ; ee ; 0xc0769 vberom.asm:368
+ mov dx, 003d5h ; ba d5 03 ; 0xc076a vberom.asm:369
+ in AL, DX ; ec ; 0xc076d vberom.asm:370
+ and AL, strict byte 060h ; 24 60 ; 0xc076e vberom.asm:371
+ out DX, AL ; ee ; 0xc0770 vberom.asm:372
+ mov dx, 003d4h ; ba d4 03 ; 0xc0771 vberom.asm:373
+ mov AL, strict byte 017h ; b0 17 ; 0xc0774 vberom.asm:374
+ out DX, AL ; ee ; 0xc0776 vberom.asm:375
+ mov dx, 003d5h ; ba d5 03 ; 0xc0777 vberom.asm:376
+ in AL, DX ; ec ; 0xc077a vberom.asm:377
+ or AL, strict byte 003h ; 0c 03 ; 0xc077b vberom.asm:378
+ out DX, AL ; ee ; 0xc077d vberom.asm:379
+ mov dx, 003dah ; ba da 03 ; 0xc077e vberom.asm:380
+ in AL, DX ; ec ; 0xc0781 vberom.asm:381
+ mov dx, 003c0h ; ba c0 03 ; 0xc0782 vberom.asm:382
+ mov AL, strict byte 010h ; b0 10 ; 0xc0785 vberom.asm:383
+ out DX, AL ; ee ; 0xc0787 vberom.asm:384
+ mov dx, 003c1h ; ba c1 03 ; 0xc0788 vberom.asm:385
+ in AL, DX ; ec ; 0xc078b vberom.asm:386
+ or AL, strict byte 001h ; 0c 01 ; 0xc078c vberom.asm:387
+ mov dx, 003c0h ; ba c0 03 ; 0xc078e vberom.asm:388
+ out DX, AL ; ee ; 0xc0791 vberom.asm:389
+ mov AL, strict byte 020h ; b0 20 ; 0xc0792 vberom.asm:390
+ out DX, AL ; ee ; 0xc0794 vberom.asm:391
+ mov dx, 003ceh ; ba ce 03 ; 0xc0795 vberom.asm:392
+ mov ax, 00506h ; b8 06 05 ; 0xc0798 vberom.asm:393
+ out DX, ax ; ef ; 0xc079b vberom.asm:394
+ mov dx, 003c4h ; ba c4 03 ; 0xc079c vberom.asm:395
+ mov ax, 00f02h ; b8 02 0f ; 0xc079f vberom.asm:396
+ out DX, ax ; ef ; 0xc07a2 vberom.asm:397
+ mov dx, 001ceh ; ba ce 01 ; 0xc07a3 vberom.asm:400
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc07a6 vberom.asm:401
+ call 005a0h ; e8 f4 fd ; 0xc07a9 vberom.asm:402
+ mov dx, 001cfh ; ba cf 01 ; 0xc07ac vberom.asm:403
+ call 005a7h ; e8 f5 fd ; 0xc07af vberom.asm:404
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc07b2 vberom.asm:405
+ jc short 007f6h ; 72 40 ; 0xc07b4 vberom.asm:406
+ mov dx, 003d4h ; ba d4 03 ; 0xc07b6 vberom.asm:407
+ mov AL, strict byte 014h ; b0 14 ; 0xc07b9 vberom.asm:408
+ out DX, AL ; ee ; 0xc07bb vberom.asm:409
+ mov dx, 003d5h ; ba d5 03 ; 0xc07bc vberom.asm:410
+ in AL, DX ; ec ; 0xc07bf vberom.asm:411
+ or AL, strict byte 040h ; 0c 40 ; 0xc07c0 vberom.asm:412
+ out DX, AL ; ee ; 0xc07c2 vberom.asm:413
+ mov dx, 003dah ; ba da 03 ; 0xc07c3 vberom.asm:414
+ in AL, DX ; ec ; 0xc07c6 vberom.asm:415
+ mov dx, 003c0h ; ba c0 03 ; 0xc07c7 vberom.asm:416
+ mov AL, strict byte 010h ; b0 10 ; 0xc07ca vberom.asm:417
+ out DX, AL ; ee ; 0xc07cc vberom.asm:418
+ mov dx, 003c1h ; ba c1 03 ; 0xc07cd vberom.asm:419
+ in AL, DX ; ec ; 0xc07d0 vberom.asm:420
+ or AL, strict byte 040h ; 0c 40 ; 0xc07d1 vberom.asm:421
+ mov dx, 003c0h ; ba c0 03 ; 0xc07d3 vberom.asm:422
+ out DX, AL ; ee ; 0xc07d6 vberom.asm:423
+ mov AL, strict byte 020h ; b0 20 ; 0xc07d7 vberom.asm:424
+ out DX, AL ; ee ; 0xc07d9 vberom.asm:425
+ mov dx, 003c4h ; ba c4 03 ; 0xc07da vberom.asm:426
+ mov AL, strict byte 004h ; b0 04 ; 0xc07dd vberom.asm:427
+ out DX, AL ; ee ; 0xc07df vberom.asm:428
+ mov dx, 003c5h ; ba c5 03 ; 0xc07e0 vberom.asm:429
+ in AL, DX ; ec ; 0xc07e3 vberom.asm:430
+ or AL, strict byte 008h ; 0c 08 ; 0xc07e4 vberom.asm:431
+ out DX, AL ; ee ; 0xc07e6 vberom.asm:432
+ mov dx, 003ceh ; ba ce 03 ; 0xc07e7 vberom.asm:433
+ mov AL, strict byte 005h ; b0 05 ; 0xc07ea vberom.asm:434
+ out DX, AL ; ee ; 0xc07ec vberom.asm:435
+ mov dx, 003cfh ; ba cf 03 ; 0xc07ed vberom.asm:436
+ in AL, DX ; ec ; 0xc07f0 vberom.asm:437
+ and AL, strict byte 09fh ; 24 9f ; 0xc07f1 vberom.asm:438
+ or AL, strict byte 040h ; 0c 40 ; 0xc07f3 vberom.asm:439
+ out DX, AL ; ee ; 0xc07f5 vberom.asm:440
+ pop dx ; 5a ; 0xc07f6 vberom.asm:443
+ pop ax ; 58 ; 0xc07f7 vberom.asm:444
+ ; disGetNextSymbol 0xc07f8 LB 0x157 -> off=0x0 cb=0000000000000013 uValue=00000000000c07f8 '_vbe_has_vbe_display'
+_vbe_has_vbe_display: ; 0xc07f8 LB 0x13
+ push DS ; 1e ; 0xc07f8 vberom.asm:450
+ push bx ; 53 ; 0xc07f9 vberom.asm:451
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc07fa vberom.asm:452
+ mov ds, ax ; 8e d8 ; 0xc07fd vberom.asm:453
+ mov bx, 000b9h ; bb b9 00 ; 0xc07ff vberom.asm:454
+ mov al, byte [bx] ; 8a 07 ; 0xc0802 vberom.asm:455
+ and AL, strict byte 001h ; 24 01 ; 0xc0804 vberom.asm:456
+ db 032h, 0e4h
+ ; xor ah, ah ; 32 e4 ; 0xc0806 vberom.asm:457
+ pop bx ; 5b ; 0xc0808 vberom.asm:458
+ pop DS ; 1f ; 0xc0809 vberom.asm:459
+ retn ; c3 ; 0xc080a vberom.asm:460
+ ; disGetNextSymbol 0xc080b LB 0x144 -> off=0x0 cb=0000000000000025 uValue=00000000000c080b 'vbe_biosfn_return_current_mode'
+vbe_biosfn_return_current_mode: ; 0xc080b LB 0x25
+ push DS ; 1e ; 0xc080b vberom.asm:473
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc080c vberom.asm:474
+ mov ds, ax ; 8e d8 ; 0xc080f vberom.asm:475
+ call 00624h ; e8 10 fe ; 0xc0811 vberom.asm:476
+ and ax, strict byte 00001h ; 83 e0 01 ; 0xc0814 vberom.asm:477
+ je short 00822h ; 74 09 ; 0xc0817 vberom.asm:478
+ mov bx, 000bah ; bb ba 00 ; 0xc0819 vberom.asm:479
+ mov ax, word [bx] ; 8b 07 ; 0xc081c vberom.asm:480
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc081e vberom.asm:481
+ jne short 0082bh ; 75 09 ; 0xc0820 vberom.asm:482
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0822 vberom.asm:484
+ mov al, byte [bx] ; 8a 07 ; 0xc0825 vberom.asm:485
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc0827 vberom.asm:486
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc0829 vberom.asm:487
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc082b vberom.asm:489
+ pop DS ; 1f ; 0xc082e vberom.asm:490
+ retn ; c3 ; 0xc082f vberom.asm:491
+ ; disGetNextSymbol 0xc0830 LB 0x11f -> off=0x0 cb=000000000000002d uValue=00000000000c0830 'vbe_biosfn_display_window_control'
+vbe_biosfn_display_window_control: ; 0xc0830 LB 0x2d
+ cmp bl, 000h ; 80 fb 00 ; 0xc0830 vberom.asm:515
+ jne short 00859h ; 75 24 ; 0xc0833 vberom.asm:516
+ cmp bh, 001h ; 80 ff 01 ; 0xc0835 vberom.asm:517
+ je short 00850h ; 74 16 ; 0xc0838 vberom.asm:518
+ jc short 00840h ; 72 04 ; 0xc083a vberom.asm:519
+ mov ax, 00100h ; b8 00 01 ; 0xc083c vberom.asm:520
+ retn ; c3 ; 0xc083f vberom.asm:521
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0840 vberom.asm:523
+ call 00636h ; e8 f1 fd ; 0xc0842 vberom.asm:524
+ call 0064ah ; e8 02 fe ; 0xc0845 vberom.asm:525
+ db 03bh, 0c2h
+ ; cmp ax, dx ; 3b c2 ; 0xc0848 vberom.asm:526
+ jne short 00859h ; 75 0d ; 0xc084a vberom.asm:527
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc084c vberom.asm:528
+ retn ; c3 ; 0xc084f vberom.asm:529
+ call 0064ah ; e8 f7 fd ; 0xc0850 vberom.asm:531
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0853 vberom.asm:532
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0855 vberom.asm:533
+ retn ; c3 ; 0xc0858 vberom.asm:534
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0859 vberom.asm:536
+ retn ; c3 ; 0xc085c vberom.asm:537
+ ; disGetNextSymbol 0xc085d LB 0xf2 -> off=0x0 cb=0000000000000034 uValue=00000000000c085d 'vbe_biosfn_set_get_display_start'
+vbe_biosfn_set_get_display_start: ; 0xc085d LB 0x34
+ cmp bl, 080h ; 80 fb 80 ; 0xc085d vberom.asm:577
+ je short 0086dh ; 74 0b ; 0xc0860 vberom.asm:578
+ cmp bl, 001h ; 80 fb 01 ; 0xc0862 vberom.asm:579
+ je short 00881h ; 74 1a ; 0xc0865 vberom.asm:580
+ jc short 00873h ; 72 0a ; 0xc0867 vberom.asm:581
+ mov ax, 00100h ; b8 00 01 ; 0xc0869 vberom.asm:582
+ retn ; c3 ; 0xc086c vberom.asm:583
+ call 005b9h ; e8 49 fd ; 0xc086d vberom.asm:585
+ call 005ach ; e8 39 fd ; 0xc0870 vberom.asm:586
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1 ; 0xc0873 vberom.asm:588
+ call 0069ch ; e8 24 fe ; 0xc0875 vberom.asm:589
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc0878 vberom.asm:590
+ call 006c2h ; e8 45 fe ; 0xc087a vberom.asm:591
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc087d vberom.asm:592
+ retn ; c3 ; 0xc0880 vberom.asm:593
+ call 006b0h ; e8 2c fe ; 0xc0881 vberom.asm:595
+ db 08bh, 0c8h
+ ; mov cx, ax ; 8b c8 ; 0xc0884 vberom.asm:596
+ call 006d6h ; e8 4d fe ; 0xc0886 vberom.asm:597
+ db 08bh, 0d0h
+ ; mov dx, ax ; 8b d0 ; 0xc0889 vberom.asm:598
+ db 032h, 0ffh
+ ; xor bh, bh ; 32 ff ; 0xc088b vberom.asm:599
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc088d vberom.asm:600
+ retn ; c3 ; 0xc0890 vberom.asm:601
+ ; disGetNextSymbol 0xc0891 LB 0xbe -> off=0x0 cb=0000000000000037 uValue=00000000000c0891 'vbe_biosfn_set_get_dac_palette_format'
+vbe_biosfn_set_get_dac_palette_format: ; 0xc0891 LB 0x37
+ cmp bl, 001h ; 80 fb 01 ; 0xc0891 vberom.asm:616
+ je short 008b4h ; 74 1e ; 0xc0894 vberom.asm:617
+ jc short 0089ch ; 72 04 ; 0xc0896 vberom.asm:618
+ mov ax, 00100h ; b8 00 01 ; 0xc0898 vberom.asm:619
+ retn ; c3 ; 0xc089b vberom.asm:620
+ call 00624h ; e8 85 fd ; 0xc089c vberom.asm:622
+ cmp bh, 006h ; 80 ff 06 ; 0xc089f vberom.asm:623
+ je short 008aeh ; 74 0a ; 0xc08a2 vberom.asm:624
+ cmp bh, 008h ; 80 ff 08 ; 0xc08a4 vberom.asm:625
+ jne short 008c4h ; 75 1b ; 0xc08a7 vberom.asm:626
+ or ax, strict byte 00020h ; 83 c8 20 ; 0xc08a9 vberom.asm:627
+ jne short 008b1h ; 75 03 ; 0xc08ac vberom.asm:628
+ and ax, strict byte 0ffdfh ; 83 e0 df ; 0xc08ae vberom.asm:630
+ call 00610h ; e8 5c fd ; 0xc08b1 vberom.asm:632
+ mov BH, strict byte 006h ; b7 06 ; 0xc08b4 vberom.asm:634
+ call 00624h ; e8 6b fd ; 0xc08b6 vberom.asm:635
+ and ax, strict byte 00020h ; 83 e0 20 ; 0xc08b9 vberom.asm:636
+ je short 008c0h ; 74 02 ; 0xc08bc vberom.asm:637
+ mov BH, strict byte 008h ; b7 08 ; 0xc08be vberom.asm:638
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc08c0 vberom.asm:640
+ retn ; c3 ; 0xc08c3 vberom.asm:641
+ mov ax, 0014fh ; b8 4f 01 ; 0xc08c4 vberom.asm:643
+ retn ; c3 ; 0xc08c7 vberom.asm:644
+ ; disGetNextSymbol 0xc08c8 LB 0x87 -> off=0x0 cb=0000000000000073 uValue=00000000000c08c8 'vbe_biosfn_set_get_palette_data'
+vbe_biosfn_set_get_palette_data: ; 0xc08c8 LB 0x73
+ test bl, bl ; 84 db ; 0xc08c8 vberom.asm:683
+ je short 008dbh ; 74 0f ; 0xc08ca vberom.asm:684
+ cmp bl, 001h ; 80 fb 01 ; 0xc08cc vberom.asm:685
+ je short 00909h ; 74 38 ; 0xc08cf vberom.asm:686
+ cmp bl, 003h ; 80 fb 03 ; 0xc08d1 vberom.asm:687
+ jbe short 00937h ; 76 61 ; 0xc08d4 vberom.asm:688
+ cmp bl, 080h ; 80 fb 80 ; 0xc08d6 vberom.asm:689
+ jne short 00933h ; 75 58 ; 0xc08d9 vberom.asm:690
+ push ax ; 50 ; 0xc08db vberom.asm:145
+ push cx ; 51 ; 0xc08dc vberom.asm:146
+ push dx ; 52 ; 0xc08dd vberom.asm:147
+ push bx ; 53 ; 0xc08de vberom.asm:148
+ push sp ; 54 ; 0xc08df vberom.asm:149
+ push bp ; 55 ; 0xc08e0 vberom.asm:150
+ push si ; 56 ; 0xc08e1 vberom.asm:151
+ push di ; 57 ; 0xc08e2 vberom.asm:152
+ push DS ; 1e ; 0xc08e3 vberom.asm:696
+ push ES ; 06 ; 0xc08e4 vberom.asm:697
+ pop DS ; 1f ; 0xc08e5 vberom.asm:698
+ db 08ah, 0c2h
+ ; mov al, dl ; 8a c2 ; 0xc08e6 vberom.asm:699
+ mov dx, 003c8h ; ba c8 03 ; 0xc08e8 vberom.asm:700
+ out DX, AL ; ee ; 0xc08eb vberom.asm:701
+ inc dx ; 42 ; 0xc08ec vberom.asm:702
+ db 08bh, 0f7h
+ ; mov si, di ; 8b f7 ; 0xc08ed vberom.asm:703
+ lodsw ; ad ; 0xc08ef vberom.asm:714
+ db 08bh, 0d8h
+ ; mov bx, ax ; 8b d8 ; 0xc08f0 vberom.asm:715
+ lodsw ; ad ; 0xc08f2 vberom.asm:716
+ out DX, AL ; ee ; 0xc08f3 vberom.asm:717
+ db 08ah, 0c7h
+ ; mov al, bh ; 8a c7 ; 0xc08f4 vberom.asm:718
+ out DX, AL ; ee ; 0xc08f6 vberom.asm:719
+ db 08ah, 0c3h
+ ; mov al, bl ; 8a c3 ; 0xc08f7 vberom.asm:720
+ out DX, AL ; ee ; 0xc08f9 vberom.asm:721
+ loop 008efh ; e2 f3 ; 0xc08fa vberom.asm:723
+ pop DS ; 1f ; 0xc08fc vberom.asm:724
+ pop di ; 5f ; 0xc08fd vberom.asm:164
+ pop si ; 5e ; 0xc08fe vberom.asm:165
+ pop bp ; 5d ; 0xc08ff vberom.asm:166
+ pop bx ; 5b ; 0xc0900 vberom.asm:167
+ pop bx ; 5b ; 0xc0901 vberom.asm:168
+ pop dx ; 5a ; 0xc0902 vberom.asm:169
+ pop cx ; 59 ; 0xc0903 vberom.asm:170
+ pop ax ; 58 ; 0xc0904 vberom.asm:171
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0905 vberom.asm:727
+ retn ; c3 ; 0xc0908 vberom.asm:728
+ push ax ; 50 ; 0xc0909 vberom.asm:145
+ push cx ; 51 ; 0xc090a vberom.asm:146
+ push dx ; 52 ; 0xc090b vberom.asm:147
+ push bx ; 53 ; 0xc090c vberom.asm:148
+ push sp ; 54 ; 0xc090d vberom.asm:149
+ push bp ; 55 ; 0xc090e vberom.asm:150
+ push si ; 56 ; 0xc090f vberom.asm:151
+ push di ; 57 ; 0xc0910 vberom.asm:152
+ db 08ah, 0c2h
+ ; mov al, dl ; 8a c2 ; 0xc0911 vberom.asm:732
+ mov dx, 003c7h ; ba c7 03 ; 0xc0913 vberom.asm:733
+ out DX, AL ; ee ; 0xc0916 vberom.asm:734
+ add dl, 002h ; 80 c2 02 ; 0xc0917 vberom.asm:735
+ db 033h, 0dbh
+ ; xor bx, bx ; 33 db ; 0xc091a vberom.asm:746
+ in AL, DX ; ec ; 0xc091c vberom.asm:748
+ db 08ah, 0d8h
+ ; mov bl, al ; 8a d8 ; 0xc091d vberom.asm:749
+ in AL, DX ; ec ; 0xc091f vberom.asm:750
+ db 08ah, 0e0h
+ ; mov ah, al ; 8a e0 ; 0xc0920 vberom.asm:751
+ in AL, DX ; ec ; 0xc0922 vberom.asm:752
+ stosw ; ab ; 0xc0923 vberom.asm:753
+ db 08bh, 0c3h
+ ; mov ax, bx ; 8b c3 ; 0xc0924 vberom.asm:754
+ stosw ; ab ; 0xc0926 vberom.asm:755
+ loop 0091ch ; e2 f3 ; 0xc0927 vberom.asm:757
+ pop di ; 5f ; 0xc0929 vberom.asm:164
+ pop si ; 5e ; 0xc092a vberom.asm:165
+ pop bp ; 5d ; 0xc092b vberom.asm:166
+ pop bx ; 5b ; 0xc092c vberom.asm:167
+ pop bx ; 5b ; 0xc092d vberom.asm:168
+ pop dx ; 5a ; 0xc092e vberom.asm:169
+ pop cx ; 59 ; 0xc092f vberom.asm:170
+ pop ax ; 58 ; 0xc0930 vberom.asm:171
+ jmp short 00905h ; eb d2 ; 0xc0931 vberom.asm:759
+ mov ax, 0014fh ; b8 4f 01 ; 0xc0933 vberom.asm:762
+ retn ; c3 ; 0xc0936 vberom.asm:763
+ mov ax, 0024fh ; b8 4f 02 ; 0xc0937 vberom.asm:765
+ retn ; c3 ; 0xc093a vberom.asm:766
+ ; disGetNextSymbol 0xc093b LB 0x14 -> off=0x0 cb=0000000000000014 uValue=00000000000c093b 'vbe_biosfn_return_protected_mode_interface'
+vbe_biosfn_return_protected_mode_interface: ; 0xc093b LB 0x14
+ test bl, bl ; 84 db ; 0xc093b vberom.asm:780
+ jne short 0094bh ; 75 0c ; 0xc093d vberom.asm:781
+ push CS ; 0e ; 0xc093f vberom.asm:782
+ pop ES ; 07 ; 0xc0940 vberom.asm:783
+ mov di, 04640h ; bf 40 46 ; 0xc0941 vberom.asm:784
+ mov cx, 00115h ; b9 15 01 ; 0xc0944 vberom.asm:785
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc0947 vberom.asm:786
+ retn ; c3 ; 0xc094a vberom.asm:787
+ mov ax, 0014fh ; b8 4f 01 ; 0xc094b vberom.asm:789
+ retn ; c3 ; 0xc094e vberom.asm:790
+
+ ; Padding 0xa1 bytes at 0xc094f
+ times 161 db 0
+
+section _TEXT progbits vstart=0x9f0 align=1 ; size=0x3b74 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc09f0 LB 0x3b74 -> off=0x0 cb=000000000000001c uValue=00000000000c09f0 'set_int_vector'
+set_int_vector: ; 0xc09f0 LB 0x1c
+ push dx ; 52 ; 0xc09f0 vgabios.c:87
+ push bp ; 55 ; 0xc09f1
+ mov bp, sp ; 89 e5 ; 0xc09f2
+ mov dx, bx ; 89 da ; 0xc09f4
+ mov bl, al ; 88 c3 ; 0xc09f6 vgabios.c:91
+ xor bh, bh ; 30 ff ; 0xc09f8
+ sal bx, 1 ; d1 e3 ; 0xc09fa
+ sal bx, 1 ; d1 e3 ; 0xc09fc
+ xor ax, ax ; 31 c0 ; 0xc09fe
+ mov es, ax ; 8e c0 ; 0xc0a00
+ mov word [es:bx], dx ; 26 89 17 ; 0xc0a02
+ mov word [es:bx+002h], cx ; 26 89 4f 02 ; 0xc0a05
+ pop bp ; 5d ; 0xc0a09 vgabios.c:92
+ pop dx ; 5a ; 0xc0a0a
+ retn ; c3 ; 0xc0a0b
+ ; disGetNextSymbol 0xc0a0c LB 0x3b58 -> off=0x0 cb=000000000000001c uValue=00000000000c0a0c 'init_vga_card'
+init_vga_card: ; 0xc0a0c LB 0x1c
+ push bp ; 55 ; 0xc0a0c vgabios.c:143
+ mov bp, sp ; 89 e5 ; 0xc0a0d
+ push dx ; 52 ; 0xc0a0f
+ mov AL, strict byte 0c3h ; b0 c3 ; 0xc0a10 vgabios.c:146
+ mov dx, 003c2h ; ba c2 03 ; 0xc0a12
+ out DX, AL ; ee ; 0xc0a15
+ mov AL, strict byte 004h ; b0 04 ; 0xc0a16 vgabios.c:149
+ mov dx, 003c4h ; ba c4 03 ; 0xc0a18
+ out DX, AL ; ee ; 0xc0a1b
+ mov AL, strict byte 002h ; b0 02 ; 0xc0a1c vgabios.c:150
+ mov dx, 003c5h ; ba c5 03 ; 0xc0a1e
+ out DX, AL ; ee ; 0xc0a21
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc0a22 vgabios.c:155
+ pop dx ; 5a ; 0xc0a25
+ pop bp ; 5d ; 0xc0a26
+ retn ; c3 ; 0xc0a27
+ ; disGetNextSymbol 0xc0a28 LB 0x3b3c -> off=0x0 cb=000000000000003e uValue=00000000000c0a28 'init_bios_area'
+init_bios_area: ; 0xc0a28 LB 0x3e
+ push bx ; 53 ; 0xc0a28 vgabios.c:221
+ push bp ; 55 ; 0xc0a29
+ mov bp, sp ; 89 e5 ; 0xc0a2a
+ xor bx, bx ; 31 db ; 0xc0a2c vgabios.c:225
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0a2e
+ mov es, ax ; 8e c0 ; 0xc0a31
+ mov al, byte [es:bx+010h] ; 26 8a 47 10 ; 0xc0a33 vgabios.c:228
+ and AL, strict byte 0cfh ; 24 cf ; 0xc0a37
+ or AL, strict byte 020h ; 0c 20 ; 0xc0a39
+ mov byte [es:bx+010h], al ; 26 88 47 10 ; 0xc0a3b
+ mov byte [es:bx+00085h], 010h ; 26 c6 87 85 00 10 ; 0xc0a3f vgabios.c:232
+ mov word [es:bx+00087h], 0f960h ; 26 c7 87 87 00 60 f9 ; 0xc0a45 vgabios.c:234
+ mov byte [es:bx+00089h], 051h ; 26 c6 87 89 00 51 ; 0xc0a4c vgabios.c:238
+ mov byte [es:bx+065h], 009h ; 26 c6 47 65 09 ; 0xc0a52 vgabios.c:240
+ mov word [es:bx+000a8h], 05550h ; 26 c7 87 a8 00 50 55 ; 0xc0a57 vgabios.c:242
+ mov [es:bx+000aah], ds ; 26 8c 9f aa 00 ; 0xc0a5e
+ pop bp ; 5d ; 0xc0a63 vgabios.c:243
+ pop bx ; 5b ; 0xc0a64
+ retn ; c3 ; 0xc0a65
+ ; disGetNextSymbol 0xc0a66 LB 0x3afe -> off=0x0 cb=0000000000000031 uValue=00000000000c0a66 'vgabios_init_func'
+vgabios_init_func: ; 0xc0a66 LB 0x31
+ inc bp ; 45 ; 0xc0a66 vgabios.c:250
+ push bp ; 55 ; 0xc0a67
+ mov bp, sp ; 89 e5 ; 0xc0a68
+ call 00a0ch ; e8 9f ff ; 0xc0a6a vgabios.c:252
+ call 00a28h ; e8 b8 ff ; 0xc0a6d vgabios.c:253
+ call 03ed5h ; e8 62 34 ; 0xc0a70 vgabios.c:255
+ mov bx, strict word 00028h ; bb 28 00 ; 0xc0a73 vgabios.c:257
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0a76
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc0a79
+ call 009f0h ; e8 71 ff ; 0xc0a7c
+ mov bx, strict word 00028h ; bb 28 00 ; 0xc0a7f vgabios.c:258
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0a82
+ mov ax, strict word 0006dh ; b8 6d 00 ; 0xc0a85
+ call 009f0h ; e8 65 ff ; 0xc0a88
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc0a8b vgabios.c:284
+ db 032h, 0e4h
+ ; xor ah, ah ; 32 e4 ; 0xc0a8e
+ int 010h ; cd 10 ; 0xc0a90
+ mov sp, bp ; 89 ec ; 0xc0a92 vgabios.c:287
+ pop bp ; 5d ; 0xc0a94
+ dec bp ; 4d ; 0xc0a95
+ retf ; cb ; 0xc0a96
+ ; disGetNextSymbol 0xc0a97 LB 0x3acd -> off=0x0 cb=0000000000000040 uValue=00000000000c0a97 'vga_get_cursor_pos'
+vga_get_cursor_pos: ; 0xc0a97 LB 0x40
+ push si ; 56 ; 0xc0a97 vgabios.c:356
+ push di ; 57 ; 0xc0a98
+ push bp ; 55 ; 0xc0a99
+ mov bp, sp ; 89 e5 ; 0xc0a9a
+ mov si, dx ; 89 d6 ; 0xc0a9c
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc0a9e vgabios.c:358
+ jbe short 00ab0h ; 76 0e ; 0xc0aa0
+ push SS ; 16 ; 0xc0aa2 vgabios.c:359
+ pop ES ; 07 ; 0xc0aa3
+ mov word [es:si], strict word 00000h ; 26 c7 04 00 00 ; 0xc0aa4
+ mov word [es:bx], strict word 00000h ; 26 c7 07 00 00 ; 0xc0aa9 vgabios.c:360
+ jmp short 00ad3h ; eb 23 ; 0xc0aae vgabios.c:361
+ mov di, strict word 00060h ; bf 60 00 ; 0xc0ab0 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc0ab3
+ mov es, dx ; 8e c2 ; 0xc0ab6
+ mov di, word [es:di] ; 26 8b 3d ; 0xc0ab8
+ push SS ; 16 ; 0xc0abb vgabios.c:58
+ pop ES ; 07 ; 0xc0abc
+ mov word [es:si], di ; 26 89 3c ; 0xc0abd
+ xor ah, ah ; 30 e4 ; 0xc0ac0 vgabios.c:364
+ mov si, ax ; 89 c6 ; 0xc0ac2
+ sal si, 1 ; d1 e6 ; 0xc0ac4
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc0ac6
+ mov es, dx ; 8e c2 ; 0xc0ac9 vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc0acb
+ push SS ; 16 ; 0xc0ace vgabios.c:58
+ pop ES ; 07 ; 0xc0acf
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0ad0
+ pop bp ; 5d ; 0xc0ad3 vgabios.c:366
+ pop di ; 5f ; 0xc0ad4
+ pop si ; 5e ; 0xc0ad5
+ retn ; c3 ; 0xc0ad6
+ ; disGetNextSymbol 0xc0ad7 LB 0x3a8d -> off=0x0 cb=000000000000005e uValue=00000000000c0ad7 'vga_find_glyph'
+vga_find_glyph: ; 0xc0ad7 LB 0x5e
+ push bp ; 55 ; 0xc0ad7 vgabios.c:369
+ mov bp, sp ; 89 e5 ; 0xc0ad8
+ push si ; 56 ; 0xc0ada
+ push di ; 57 ; 0xc0adb
+ push ax ; 50 ; 0xc0adc
+ push ax ; 50 ; 0xc0add
+ push dx ; 52 ; 0xc0ade
+ push bx ; 53 ; 0xc0adf
+ mov bl, cl ; 88 cb ; 0xc0ae0
+ mov word [bp-006h], strict word 00000h ; c7 46 fa 00 00 ; 0xc0ae2 vgabios.c:371
+ dec word [bp+004h] ; ff 4e 04 ; 0xc0ae7 vgabios.c:373
+ cmp word [bp+004h], strict byte 0ffffh ; 83 7e 04 ff ; 0xc0aea
+ je short 00b29h ; 74 39 ; 0xc0aee
+ mov cl, byte [bp+006h] ; 8a 4e 06 ; 0xc0af0 vgabios.c:374
+ xor ch, ch ; 30 ed ; 0xc0af3
+ mov dx, ss ; 8c d2 ; 0xc0af5
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc0af7
+ mov di, word [bp-008h] ; 8b 7e f8 ; 0xc0afa
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc0afd
+ push DS ; 1e ; 0xc0b00
+ mov ds, dx ; 8e da ; 0xc0b01
+ rep cmpsb ; f3 a6 ; 0xc0b03
+ pop DS ; 1f ; 0xc0b05
+ mov ax, strict word 00000h ; b8 00 00 ; 0xc0b06
+ je short 00b0dh ; 74 02 ; 0xc0b09
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc0b0b
+ test ax, ax ; 85 c0 ; 0xc0b0d
+ jne short 00b1dh ; 75 0c ; 0xc0b0f
+ mov al, bl ; 88 d8 ; 0xc0b11 vgabios.c:375
+ xor ah, ah ; 30 e4 ; 0xc0b13
+ or ah, 080h ; 80 cc 80 ; 0xc0b15
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0b18
+ jmp short 00b29h ; eb 0c ; 0xc0b1b vgabios.c:376
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc0b1d vgabios.c:378
+ xor ah, ah ; 30 e4 ; 0xc0b20
+ add word [bp-008h], ax ; 01 46 f8 ; 0xc0b22
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc0b25 vgabios.c:379
+ jmp short 00ae7h ; eb be ; 0xc0b27 vgabios.c:380
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc0b29 vgabios.c:382
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0b2c
+ pop di ; 5f ; 0xc0b2f
+ pop si ; 5e ; 0xc0b30
+ pop bp ; 5d ; 0xc0b31
+ retn 00004h ; c2 04 00 ; 0xc0b32
+ ; disGetNextSymbol 0xc0b35 LB 0x3a2f -> off=0x0 cb=0000000000000046 uValue=00000000000c0b35 'vga_read_glyph_planar'
+vga_read_glyph_planar: ; 0xc0b35 LB 0x46
+ push bp ; 55 ; 0xc0b35 vgabios.c:384
+ mov bp, sp ; 89 e5 ; 0xc0b36
+ push si ; 56 ; 0xc0b38
+ push di ; 57 ; 0xc0b39
+ push ax ; 50 ; 0xc0b3a
+ push ax ; 50 ; 0xc0b3b
+ mov si, ax ; 89 c6 ; 0xc0b3c
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc0b3e
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc0b41
+ mov bx, cx ; 89 cb ; 0xc0b44
+ mov ax, 00805h ; b8 05 08 ; 0xc0b46 vgabios.c:391
+ mov dx, 003ceh ; ba ce 03 ; 0xc0b49
+ out DX, ax ; ef ; 0xc0b4c
+ dec byte [bp+004h] ; fe 4e 04 ; 0xc0b4d vgabios.c:393
+ cmp byte [bp+004h], 0ffh ; 80 7e 04 ff ; 0xc0b50
+ je short 00b6bh ; 74 15 ; 0xc0b54
+ mov es, [bp-006h] ; 8e 46 fa ; 0xc0b56 vgabios.c:394
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc0b59
+ not al ; f6 d0 ; 0xc0b5c
+ mov di, bx ; 89 df ; 0xc0b5e
+ inc bx ; 43 ; 0xc0b60
+ push SS ; 16 ; 0xc0b61
+ pop ES ; 07 ; 0xc0b62
+ mov byte [es:di], al ; 26 88 05 ; 0xc0b63
+ add si, word [bp-008h] ; 03 76 f8 ; 0xc0b66 vgabios.c:395
+ jmp short 00b4dh ; eb e2 ; 0xc0b69 vgabios.c:396
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc0b6b vgabios.c:399
+ mov dx, 003ceh ; ba ce 03 ; 0xc0b6e
+ out DX, ax ; ef ; 0xc0b71
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0b72 vgabios.c:400
+ pop di ; 5f ; 0xc0b75
+ pop si ; 5e ; 0xc0b76
+ pop bp ; 5d ; 0xc0b77
+ retn 00002h ; c2 02 00 ; 0xc0b78
+ ; disGetNextSymbol 0xc0b7b LB 0x39e9 -> off=0x0 cb=000000000000002f uValue=00000000000c0b7b 'vga_char_ofs_planar'
+vga_char_ofs_planar: ; 0xc0b7b LB 0x2f
+ push si ; 56 ; 0xc0b7b vgabios.c:402
+ push bp ; 55 ; 0xc0b7c
+ mov bp, sp ; 89 e5 ; 0xc0b7d
+ mov ch, al ; 88 c5 ; 0xc0b7f
+ mov al, dl ; 88 d0 ; 0xc0b81
+ xor ah, ah ; 30 e4 ; 0xc0b83 vgabios.c:406
+ mul bx ; f7 e3 ; 0xc0b85
+ mov bl, byte [bp+006h] ; 8a 5e 06 ; 0xc0b87
+ xor bh, bh ; 30 ff ; 0xc0b8a
+ mul bx ; f7 e3 ; 0xc0b8c
+ mov bl, ch ; 88 eb ; 0xc0b8e
+ add bx, ax ; 01 c3 ; 0xc0b90
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc0b92 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0b95
+ mov es, ax ; 8e c0 ; 0xc0b98
+ mov si, word [es:si] ; 26 8b 34 ; 0xc0b9a
+ mov al, cl ; 88 c8 ; 0xc0b9d vgabios.c:58
+ xor ah, ah ; 30 e4 ; 0xc0b9f
+ mul si ; f7 e6 ; 0xc0ba1
+ add ax, bx ; 01 d8 ; 0xc0ba3
+ pop bp ; 5d ; 0xc0ba5 vgabios.c:410
+ pop si ; 5e ; 0xc0ba6
+ retn 00002h ; c2 02 00 ; 0xc0ba7
+ ; disGetNextSymbol 0xc0baa LB 0x39ba -> off=0x0 cb=0000000000000045 uValue=00000000000c0baa 'vga_read_char_planar'
+vga_read_char_planar: ; 0xc0baa LB 0x45
+ push bp ; 55 ; 0xc0baa vgabios.c:412
+ mov bp, sp ; 89 e5 ; 0xc0bab
+ push cx ; 51 ; 0xc0bad
+ push si ; 56 ; 0xc0bae
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc0baf
+ mov si, ax ; 89 c6 ; 0xc0bb2
+ mov ax, dx ; 89 d0 ; 0xc0bb4
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc0bb6 vgabios.c:416
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc0bb9
+ push word [bp-006h] ; ff 76 fa ; 0xc0bbd
+ lea cx, [bp-016h] ; 8d 4e ea ; 0xc0bc0
+ mov bx, si ; 89 f3 ; 0xc0bc3
+ mov dx, 0a000h ; ba 00 a0 ; 0xc0bc5
+ call 00b35h ; e8 6a ff ; 0xc0bc8
+ push word [bp-006h] ; ff 76 fa ; 0xc0bcb vgabios.c:419
+ mov ax, 00100h ; b8 00 01 ; 0xc0bce
+ push ax ; 50 ; 0xc0bd1
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0bd2 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0bd5
+ mov es, ax ; 8e c0 ; 0xc0bd7
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0bd9
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0bdc
+ xor cx, cx ; 31 c9 ; 0xc0be0 vgabios.c:68
+ lea bx, [bp-016h] ; 8d 5e ea ; 0xc0be2
+ call 00ad7h ; e8 ef fe ; 0xc0be5
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0be8 vgabios.c:420
+ pop si ; 5e ; 0xc0beb
+ pop cx ; 59 ; 0xc0bec
+ pop bp ; 5d ; 0xc0bed
+ retn ; c3 ; 0xc0bee
+ ; disGetNextSymbol 0xc0bef LB 0x3975 -> off=0x0 cb=0000000000000027 uValue=00000000000c0bef 'vga_char_ofs_linear'
+vga_char_ofs_linear: ; 0xc0bef LB 0x27
+ push bp ; 55 ; 0xc0bef vgabios.c:422
+ mov bp, sp ; 89 e5 ; 0xc0bf0
+ push ax ; 50 ; 0xc0bf2
+ mov byte [bp-002h], al ; 88 46 fe ; 0xc0bf3
+ mov al, dl ; 88 d0 ; 0xc0bf6 vgabios.c:426
+ xor ah, ah ; 30 e4 ; 0xc0bf8
+ mul bx ; f7 e3 ; 0xc0bfa
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc0bfc
+ xor dh, dh ; 30 f6 ; 0xc0bff
+ mul dx ; f7 e2 ; 0xc0c01
+ mov dx, ax ; 89 c2 ; 0xc0c03
+ mov al, byte [bp-002h] ; 8a 46 fe ; 0xc0c05
+ xor ah, ah ; 30 e4 ; 0xc0c08
+ add ax, dx ; 01 d0 ; 0xc0c0a
+ mov CL, strict byte 003h ; b1 03 ; 0xc0c0c vgabios.c:427
+ sal ax, CL ; d3 e0 ; 0xc0c0e
+ mov sp, bp ; 89 ec ; 0xc0c10 vgabios.c:429
+ pop bp ; 5d ; 0xc0c12
+ retn 00002h ; c2 02 00 ; 0xc0c13
+ ; disGetNextSymbol 0xc0c16 LB 0x394e -> off=0x0 cb=000000000000004e uValue=00000000000c0c16 'vga_read_glyph_linear'
+vga_read_glyph_linear: ; 0xc0c16 LB 0x4e
+ push si ; 56 ; 0xc0c16 vgabios.c:431
+ push di ; 57 ; 0xc0c17
+ push bp ; 55 ; 0xc0c18
+ mov bp, sp ; 89 e5 ; 0xc0c19
+ push ax ; 50 ; 0xc0c1b
+ push ax ; 50 ; 0xc0c1c
+ mov si, ax ; 89 c6 ; 0xc0c1d
+ mov word [bp-002h], dx ; 89 56 fe ; 0xc0c1f
+ mov word [bp-004h], bx ; 89 5e fc ; 0xc0c22
+ mov bx, cx ; 89 cb ; 0xc0c25
+ dec byte [bp+008h] ; fe 4e 08 ; 0xc0c27 vgabios.c:437
+ cmp byte [bp+008h], 0ffh ; 80 7e 08 ff ; 0xc0c2a
+ je short 00c5ch ; 74 2c ; 0xc0c2e
+ xor dh, dh ; 30 f6 ; 0xc0c30 vgabios.c:438
+ mov DL, strict byte 080h ; b2 80 ; 0xc0c32 vgabios.c:439
+ xor ax, ax ; 31 c0 ; 0xc0c34 vgabios.c:440
+ jmp short 00c3dh ; eb 05 ; 0xc0c36
+ cmp ax, strict word 00008h ; 3d 08 00 ; 0xc0c38
+ jnl short 00c51h ; 7d 14 ; 0xc0c3b
+ mov es, [bp-002h] ; 8e 46 fe ; 0xc0c3d vgabios.c:441
+ mov di, si ; 89 f7 ; 0xc0c40
+ add di, ax ; 01 c7 ; 0xc0c42
+ cmp byte [es:di], 000h ; 26 80 3d 00 ; 0xc0c44
+ je short 00c4ch ; 74 02 ; 0xc0c48
+ or dh, dl ; 08 d6 ; 0xc0c4a vgabios.c:442
+ shr dl, 1 ; d0 ea ; 0xc0c4c vgabios.c:443
+ inc ax ; 40 ; 0xc0c4e vgabios.c:444
+ jmp short 00c38h ; eb e7 ; 0xc0c4f
+ mov di, bx ; 89 df ; 0xc0c51 vgabios.c:445
+ inc bx ; 43 ; 0xc0c53
+ mov byte [ss:di], dh ; 36 88 35 ; 0xc0c54
+ add si, word [bp-004h] ; 03 76 fc ; 0xc0c57 vgabios.c:446
+ jmp short 00c27h ; eb cb ; 0xc0c5a vgabios.c:447
+ mov sp, bp ; 89 ec ; 0xc0c5c vgabios.c:448
+ pop bp ; 5d ; 0xc0c5e
+ pop di ; 5f ; 0xc0c5f
+ pop si ; 5e ; 0xc0c60
+ retn 00002h ; c2 02 00 ; 0xc0c61
+ ; disGetNextSymbol 0xc0c64 LB 0x3900 -> off=0x0 cb=0000000000000049 uValue=00000000000c0c64 'vga_read_char_linear'
+vga_read_char_linear: ; 0xc0c64 LB 0x49
+ push bp ; 55 ; 0xc0c64 vgabios.c:450
+ mov bp, sp ; 89 e5 ; 0xc0c65
+ push cx ; 51 ; 0xc0c67
+ push si ; 56 ; 0xc0c68
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc0c69
+ mov si, ax ; 89 c6 ; 0xc0c6c
+ mov ax, dx ; 89 d0 ; 0xc0c6e
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc0c70 vgabios.c:454
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc0c73
+ push word [bp-006h] ; ff 76 fa ; 0xc0c77
+ mov CL, strict byte 003h ; b1 03 ; 0xc0c7a
+ mov bx, si ; 89 f3 ; 0xc0c7c
+ sal bx, CL ; d3 e3 ; 0xc0c7e
+ lea cx, [bp-016h] ; 8d 4e ea ; 0xc0c80
+ mov dx, 0a000h ; ba 00 a0 ; 0xc0c83
+ call 00c16h ; e8 8d ff ; 0xc0c86
+ push word [bp-006h] ; ff 76 fa ; 0xc0c89 vgabios.c:457
+ mov ax, 00100h ; b8 00 01 ; 0xc0c8c
+ push ax ; 50 ; 0xc0c8f
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0c90 vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0c93
+ mov es, ax ; 8e c0 ; 0xc0c95
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0c97
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0c9a
+ xor cx, cx ; 31 c9 ; 0xc0c9e vgabios.c:68
+ lea bx, [bp-016h] ; 8d 5e ea ; 0xc0ca0
+ call 00ad7h ; e8 31 fe ; 0xc0ca3
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0ca6 vgabios.c:458
+ pop si ; 5e ; 0xc0ca9
+ pop cx ; 59 ; 0xc0caa
+ pop bp ; 5d ; 0xc0cab
+ retn ; c3 ; 0xc0cac
+ ; disGetNextSymbol 0xc0cad LB 0x38b7 -> off=0x0 cb=0000000000000036 uValue=00000000000c0cad 'vga_read_2bpp_char'
+vga_read_2bpp_char: ; 0xc0cad LB 0x36
+ push bp ; 55 ; 0xc0cad vgabios.c:460
+ mov bp, sp ; 89 e5 ; 0xc0cae
+ push bx ; 53 ; 0xc0cb0
+ push cx ; 51 ; 0xc0cb1
+ mov bx, ax ; 89 c3 ; 0xc0cb2
+ mov es, dx ; 8e c2 ; 0xc0cb4
+ mov cx, 0c000h ; b9 00 c0 ; 0xc0cb6 vgabios.c:466
+ mov DH, strict byte 080h ; b6 80 ; 0xc0cb9 vgabios.c:467
+ xor dl, dl ; 30 d2 ; 0xc0cbb vgabios.c:468
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0cbd vgabios.c:469
+ xchg ah, al ; 86 c4 ; 0xc0cc0
+ xor bx, bx ; 31 db ; 0xc0cc2 vgabios.c:471
+ jmp short 00ccbh ; eb 05 ; 0xc0cc4
+ cmp bx, strict byte 00008h ; 83 fb 08 ; 0xc0cc6
+ jnl short 00cdah ; 7d 0f ; 0xc0cc9
+ test ax, cx ; 85 c8 ; 0xc0ccb vgabios.c:472
+ je short 00cd1h ; 74 02 ; 0xc0ccd
+ or dl, dh ; 08 f2 ; 0xc0ccf vgabios.c:473
+ shr dh, 1 ; d0 ee ; 0xc0cd1 vgabios.c:474
+ shr cx, 1 ; d1 e9 ; 0xc0cd3 vgabios.c:475
+ shr cx, 1 ; d1 e9 ; 0xc0cd5
+ inc bx ; 43 ; 0xc0cd7 vgabios.c:476
+ jmp short 00cc6h ; eb ec ; 0xc0cd8
+ mov al, dl ; 88 d0 ; 0xc0cda vgabios.c:478
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0cdc
+ pop cx ; 59 ; 0xc0cdf
+ pop bx ; 5b ; 0xc0ce0
+ pop bp ; 5d ; 0xc0ce1
+ retn ; c3 ; 0xc0ce2
+ ; disGetNextSymbol 0xc0ce3 LB 0x3881 -> off=0x0 cb=0000000000000084 uValue=00000000000c0ce3 'vga_read_glyph_cga'
+vga_read_glyph_cga: ; 0xc0ce3 LB 0x84
+ push bp ; 55 ; 0xc0ce3 vgabios.c:480
+ mov bp, sp ; 89 e5 ; 0xc0ce4
+ push cx ; 51 ; 0xc0ce6
+ push si ; 56 ; 0xc0ce7
+ push di ; 57 ; 0xc0ce8
+ push ax ; 50 ; 0xc0ce9
+ mov si, dx ; 89 d6 ; 0xc0cea
+ cmp bl, 006h ; 80 fb 06 ; 0xc0cec vgabios.c:488
+ je short 00d2bh ; 74 3a ; 0xc0cef
+ mov bx, ax ; 89 c3 ; 0xc0cf1 vgabios.c:490
+ sal bx, 1 ; d1 e3 ; 0xc0cf3
+ mov word [bp-008h], 0b800h ; c7 46 f8 00 b8 ; 0xc0cf5
+ xor cx, cx ; 31 c9 ; 0xc0cfa vgabios.c:492
+ jmp short 00d03h ; eb 05 ; 0xc0cfc
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc0cfe
+ jnl short 00d5fh ; 7d 5c ; 0xc0d01
+ mov ax, bx ; 89 d8 ; 0xc0d03 vgabios.c:493
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc0d05
+ call 00cadh ; e8 a2 ff ; 0xc0d08
+ mov di, si ; 89 f7 ; 0xc0d0b
+ inc si ; 46 ; 0xc0d0d
+ push SS ; 16 ; 0xc0d0e
+ pop ES ; 07 ; 0xc0d0f
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d10
+ lea ax, [bx+02000h] ; 8d 87 00 20 ; 0xc0d13 vgabios.c:494
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc0d17
+ call 00cadh ; e8 90 ff ; 0xc0d1a
+ mov di, si ; 89 f7 ; 0xc0d1d
+ inc si ; 46 ; 0xc0d1f
+ push SS ; 16 ; 0xc0d20
+ pop ES ; 07 ; 0xc0d21
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d22
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc0d25 vgabios.c:495
+ inc cx ; 41 ; 0xc0d28 vgabios.c:496
+ jmp short 00cfeh ; eb d3 ; 0xc0d29
+ mov bx, ax ; 89 c3 ; 0xc0d2b vgabios.c:498
+ mov word [bp-008h], 0b800h ; c7 46 f8 00 b8 ; 0xc0d2d
+ xor cx, cx ; 31 c9 ; 0xc0d32 vgabios.c:499
+ jmp short 00d3bh ; eb 05 ; 0xc0d34
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc0d36
+ jnl short 00d5fh ; 7d 24 ; 0xc0d39
+ mov di, si ; 89 f7 ; 0xc0d3b vgabios.c:500
+ inc si ; 46 ; 0xc0d3d
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc0d3e
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0d41
+ push SS ; 16 ; 0xc0d44
+ pop ES ; 07 ; 0xc0d45
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d46
+ mov di, si ; 89 f7 ; 0xc0d49 vgabios.c:501
+ inc si ; 46 ; 0xc0d4b
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc0d4c
+ mov al, byte [es:bx+02000h] ; 26 8a 87 00 20 ; 0xc0d4f
+ push SS ; 16 ; 0xc0d54
+ pop ES ; 07 ; 0xc0d55
+ mov byte [es:di], al ; 26 88 05 ; 0xc0d56
+ add bx, strict byte 00050h ; 83 c3 50 ; 0xc0d59 vgabios.c:502
+ inc cx ; 41 ; 0xc0d5c vgabios.c:503
+ jmp short 00d36h ; eb d7 ; 0xc0d5d
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc0d5f vgabios.c:505
+ pop di ; 5f ; 0xc0d62
+ pop si ; 5e ; 0xc0d63
+ pop cx ; 59 ; 0xc0d64
+ pop bp ; 5d ; 0xc0d65
+ retn ; c3 ; 0xc0d66
+ ; disGetNextSymbol 0xc0d67 LB 0x37fd -> off=0x0 cb=000000000000001b uValue=00000000000c0d67 'vga_char_ofs_cga'
+vga_char_ofs_cga: ; 0xc0d67 LB 0x1b
+ push cx ; 51 ; 0xc0d67 vgabios.c:507
+ push bp ; 55 ; 0xc0d68
+ mov bp, sp ; 89 e5 ; 0xc0d69
+ mov cl, al ; 88 c1 ; 0xc0d6b
+ mov al, dl ; 88 d0 ; 0xc0d6d
+ xor ah, ah ; 30 e4 ; 0xc0d6f vgabios.c:512
+ mul bx ; f7 e3 ; 0xc0d71
+ mov bx, ax ; 89 c3 ; 0xc0d73
+ sal bx, 1 ; d1 e3 ; 0xc0d75
+ sal bx, 1 ; d1 e3 ; 0xc0d77
+ mov al, cl ; 88 c8 ; 0xc0d79
+ xor ah, ah ; 30 e4 ; 0xc0d7b
+ add ax, bx ; 01 d8 ; 0xc0d7d
+ pop bp ; 5d ; 0xc0d7f vgabios.c:513
+ pop cx ; 59 ; 0xc0d80
+ retn ; c3 ; 0xc0d81
+ ; disGetNextSymbol 0xc0d82 LB 0x37e2 -> off=0x0 cb=000000000000006b uValue=00000000000c0d82 'vga_read_char_cga'
+vga_read_char_cga: ; 0xc0d82 LB 0x6b
+ push bp ; 55 ; 0xc0d82 vgabios.c:515
+ mov bp, sp ; 89 e5 ; 0xc0d83
+ push bx ; 53 ; 0xc0d85
+ push cx ; 51 ; 0xc0d86
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc0d87
+ mov bl, dl ; 88 d3 ; 0xc0d8a vgabios.c:521
+ xor bh, bh ; 30 ff ; 0xc0d8c
+ lea dx, [bp-00eh] ; 8d 56 f2 ; 0xc0d8e
+ call 00ce3h ; e8 4f ff ; 0xc0d91
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc0d94 vgabios.c:524
+ push ax ; 50 ; 0xc0d97
+ mov ax, 00080h ; b8 80 00 ; 0xc0d98
+ push ax ; 50 ; 0xc0d9b
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0d9c vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0d9f
+ mov es, ax ; 8e c0 ; 0xc0da1
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0da3
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0da6
+ xor cx, cx ; 31 c9 ; 0xc0daa vgabios.c:68
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc0dac
+ call 00ad7h ; e8 25 fd ; 0xc0daf
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0db2
+ test ah, 080h ; f6 c4 80 ; 0xc0db5 vgabios.c:526
+ jne short 00de3h ; 75 29 ; 0xc0db8
+ mov bx, strict word 0007ch ; bb 7c 00 ; 0xc0dba vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0dbd
+ mov es, ax ; 8e c0 ; 0xc0dbf
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0dc1
+ mov dx, word [es:bx+002h] ; 26 8b 57 02 ; 0xc0dc4
+ test dx, dx ; 85 d2 ; 0xc0dc8 vgabios.c:530
+ jne short 00dd0h ; 75 04 ; 0xc0dca
+ test ax, ax ; 85 c0 ; 0xc0dcc
+ je short 00de3h ; 74 13 ; 0xc0dce
+ mov bx, strict word 00008h ; bb 08 00 ; 0xc0dd0 vgabios.c:531
+ push bx ; 53 ; 0xc0dd3
+ mov bx, 00080h ; bb 80 00 ; 0xc0dd4
+ push bx ; 53 ; 0xc0dd7
+ mov cx, bx ; 89 d9 ; 0xc0dd8
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc0dda
+ call 00ad7h ; e8 f7 fc ; 0xc0ddd
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc0de0
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc0de3 vgabios.c:534
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc0de6
+ pop cx ; 59 ; 0xc0de9
+ pop bx ; 5b ; 0xc0dea
+ pop bp ; 5d ; 0xc0deb
+ retn ; c3 ; 0xc0dec
+ ; disGetNextSymbol 0xc0ded LB 0x3777 -> off=0x0 cb=0000000000000147 uValue=00000000000c0ded 'vga_read_char_attr'
+vga_read_char_attr: ; 0xc0ded LB 0x147
+ push bp ; 55 ; 0xc0ded vgabios.c:536
+ mov bp, sp ; 89 e5 ; 0xc0dee
+ push bx ; 53 ; 0xc0df0
+ push cx ; 51 ; 0xc0df1
+ push si ; 56 ; 0xc0df2
+ push di ; 57 ; 0xc0df3
+ sub sp, strict byte 00012h ; 83 ec 12 ; 0xc0df4
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc0df7
+ mov si, dx ; 89 d6 ; 0xc0dfa
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0dfc vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0dff
+ mov es, ax ; 8e c0 ; 0xc0e02
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0e04
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc0e07 vgabios.c:48
+ xor ah, ah ; 30 e4 ; 0xc0e0a vgabios.c:544
+ call 03888h ; e8 79 2a ; 0xc0e0c
+ mov cl, al ; 88 c1 ; 0xc0e0f
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc0e11 vgabios.c:545
+ jne short 00e18h ; 75 03 ; 0xc0e13
+ jmp near 00f2bh ; e9 13 01 ; 0xc0e15
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc0e18 vgabios.c:549
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc0e1b
+ mov byte [bp-013h], 000h ; c6 46 ed 00 ; 0xc0e1e
+ lea bx, [bp-01ah] ; 8d 5e e6 ; 0xc0e22
+ lea dx, [bp-018h] ; 8d 56 e8 ; 0xc0e25
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc0e28
+ call 00a97h ; e8 69 fc ; 0xc0e2b
+ mov ch, byte [bp-01ah] ; 8a 6e e6 ; 0xc0e2e vgabios.c:550
+ mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc0e31 vgabios.c:551
+ mov al, ah ; 88 e0 ; 0xc0e34
+ xor ah, ah ; 30 e4 ; 0xc0e36
+ mov word [bp-012h], ax ; 89 46 ee ; 0xc0e38
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc0e3b
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc0e3e
+ mov bx, 00084h ; bb 84 00 ; 0xc0e41 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0e44
+ mov es, ax ; 8e c0 ; 0xc0e47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0e49
+ xor ah, ah ; 30 e4 ; 0xc0e4c vgabios.c:48
+ mov dx, ax ; 89 c2 ; 0xc0e4e
+ inc dx ; 42 ; 0xc0e50
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc0e51 vgabios.c:57
+ mov di, word [es:di] ; 26 8b 3d ; 0xc0e54
+ mov word [bp-016h], di ; 89 7e ea ; 0xc0e57 vgabios.c:58
+ mov bl, cl ; 88 cb ; 0xc0e5a vgabios.c:557
+ xor bh, bh ; 30 ff ; 0xc0e5c
+ mov CL, strict byte 003h ; b1 03 ; 0xc0e5e
+ sal bx, CL ; d3 e3 ; 0xc0e60
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc0e62
+ jne short 00e9fh ; 75 36 ; 0xc0e67
+ mov ax, di ; 89 f8 ; 0xc0e69 vgabios.c:559
+ mul dx ; f7 e2 ; 0xc0e6b
+ sal ax, 1 ; d1 e0 ; 0xc0e6d
+ or AL, strict byte 0ffh ; 0c ff ; 0xc0e6f
+ mov dl, byte [bp-00ch] ; 8a 56 f4 ; 0xc0e71
+ xor dh, dh ; 30 f6 ; 0xc0e74
+ inc ax ; 40 ; 0xc0e76
+ mul dx ; f7 e2 ; 0xc0e77
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc0e79
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc0e7c
+ xor ah, ah ; 30 e4 ; 0xc0e7f
+ mul di ; f7 e7 ; 0xc0e81
+ mov dl, ch ; 88 ea ; 0xc0e83
+ xor dh, dh ; 30 f6 ; 0xc0e85
+ add ax, dx ; 01 d0 ; 0xc0e87
+ sal ax, 1 ; d1 e0 ; 0xc0e89
+ mov di, word [bp-010h] ; 8b 7e f0 ; 0xc0e8b
+ add di, ax ; 01 c7 ; 0xc0e8e
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc0e90 vgabios.c:55
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc0e94
+ push SS ; 16 ; 0xc0e97 vgabios.c:58
+ pop ES ; 07 ; 0xc0e98
+ mov word [es:si], ax ; 26 89 04 ; 0xc0e99
+ jmp near 00f2bh ; e9 8c 00 ; 0xc0e9c vgabios.c:561
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc0e9f vgabios.c:562
+ cmp bl, 005h ; 80 fb 05 ; 0xc0ea3
+ je short 00efeh ; 74 56 ; 0xc0ea6
+ cmp bl, 002h ; 80 fb 02 ; 0xc0ea8
+ jc short 00eb4h ; 72 07 ; 0xc0eab
+ jbe short 00eb6h ; 76 07 ; 0xc0ead
+ cmp bl, 004h ; 80 fb 04 ; 0xc0eaf
+ jbe short 00ed1h ; 76 1d ; 0xc0eb2
+ jmp short 00f2bh ; eb 75 ; 0xc0eb4
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc0eb6 vgabios.c:565
+ xor dh, dh ; 30 f6 ; 0xc0eb9
+ mov al, ch ; 88 e8 ; 0xc0ebb
+ xor ah, ah ; 30 e4 ; 0xc0ebd
+ mov bx, word [bp-016h] ; 8b 5e ea ; 0xc0ebf
+ call 00d67h ; e8 a2 fe ; 0xc0ec2
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc0ec5 vgabios.c:566
+ xor dh, dh ; 30 f6 ; 0xc0ec8
+ call 00d82h ; e8 b5 fe ; 0xc0eca
+ xor ah, ah ; 30 e4 ; 0xc0ecd
+ jmp short 00e97h ; eb c6 ; 0xc0ecf
+ mov bx, 00085h ; bb 85 00 ; 0xc0ed1 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0ed4
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc0ed7 vgabios.c:571
+ mov byte [bp-00fh], 000h ; c6 46 f1 00 ; 0xc0eda
+ push word [bp-010h] ; ff 76 f0 ; 0xc0ede
+ mov dl, byte [bp-012h] ; 8a 56 ee ; 0xc0ee1
+ xor dh, dh ; 30 f6 ; 0xc0ee4
+ mov al, ch ; 88 e8 ; 0xc0ee6
+ xor ah, ah ; 30 e4 ; 0xc0ee8
+ mov cx, word [bp-014h] ; 8b 4e ec ; 0xc0eea
+ mov bx, di ; 89 fb ; 0xc0eed
+ call 00b7bh ; e8 89 fc ; 0xc0eef
+ mov bx, word [bp-010h] ; 8b 5e f0 ; 0xc0ef2 vgabios.c:572
+ mov dx, ax ; 89 c2 ; 0xc0ef5
+ mov ax, di ; 89 f8 ; 0xc0ef7
+ call 00baah ; e8 ae fc ; 0xc0ef9
+ jmp short 00ecdh ; eb cf ; 0xc0efc
+ mov bx, 00085h ; bb 85 00 ; 0xc0efe vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc0f01
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc0f04 vgabios.c:576
+ mov byte [bp-00fh], 000h ; c6 46 f1 00 ; 0xc0f07
+ push word [bp-010h] ; ff 76 f0 ; 0xc0f0b
+ mov dl, byte [bp-012h] ; 8a 56 ee ; 0xc0f0e
+ xor dh, dh ; 30 f6 ; 0xc0f11
+ mov al, ch ; 88 e8 ; 0xc0f13
+ xor ah, ah ; 30 e4 ; 0xc0f15
+ mov cx, word [bp-014h] ; 8b 4e ec ; 0xc0f17
+ mov bx, di ; 89 fb ; 0xc0f1a
+ call 00befh ; e8 d0 fc ; 0xc0f1c
+ mov bx, word [bp-010h] ; 8b 5e f0 ; 0xc0f1f vgabios.c:577
+ mov dx, ax ; 89 c2 ; 0xc0f22
+ mov ax, di ; 89 f8 ; 0xc0f24
+ call 00c64h ; e8 3b fd ; 0xc0f26
+ jmp short 00ecdh ; eb a2 ; 0xc0f29
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc0f2b vgabios.c:586
+ pop di ; 5f ; 0xc0f2e
+ pop si ; 5e ; 0xc0f2f
+ pop cx ; 59 ; 0xc0f30
+ pop bx ; 5b ; 0xc0f31
+ pop bp ; 5d ; 0xc0f32
+ retn ; c3 ; 0xc0f33
+ ; disGetNextSymbol 0xc0f34 LB 0x3630 -> off=0x10 cb=0000000000000083 uValue=00000000000c0f44 'vga_get_font_info'
+ db 05bh, 00fh, 0a0h, 00fh, 0a5h, 00fh, 0ach, 00fh, 0b1h, 00fh, 0b6h, 00fh, 0bbh, 00fh, 0c0h, 00fh
+vga_get_font_info: ; 0xc0f44 LB 0x83
+ push si ; 56 ; 0xc0f44 vgabios.c:588
+ push di ; 57 ; 0xc0f45
+ push bp ; 55 ; 0xc0f46
+ mov bp, sp ; 89 e5 ; 0xc0f47
+ mov si, dx ; 89 d6 ; 0xc0f49
+ mov di, bx ; 89 df ; 0xc0f4b
+ cmp ax, strict word 00007h ; 3d 07 00 ; 0xc0f4d vgabios.c:593
+ jnbe short 00f9ah ; 77 48 ; 0xc0f50
+ mov bx, ax ; 89 c3 ; 0xc0f52
+ sal bx, 1 ; d1 e3 ; 0xc0f54
+ jmp word [cs:bx+00f34h] ; 2e ff a7 34 0f ; 0xc0f56
+ mov bx, strict word 0007ch ; bb 7c 00 ; 0xc0f5b vgabios.c:67
+ xor ax, ax ; 31 c0 ; 0xc0f5e
+ mov es, ax ; 8e c0 ; 0xc0f60
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc0f62
+ mov ax, word [es:bx+002h] ; 26 8b 47 02 ; 0xc0f65
+ push SS ; 16 ; 0xc0f69 vgabios.c:596
+ pop ES ; 07 ; 0xc0f6a
+ mov word [es:di], dx ; 26 89 15 ; 0xc0f6b
+ mov word [es:si], ax ; 26 89 04 ; 0xc0f6e
+ mov bx, 00085h ; bb 85 00 ; 0xc0f71
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f74
+ mov es, ax ; 8e c0 ; 0xc0f77
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f79
+ xor ah, ah ; 30 e4 ; 0xc0f7c
+ push SS ; 16 ; 0xc0f7e
+ pop ES ; 07 ; 0xc0f7f
+ mov bx, cx ; 89 cb ; 0xc0f80
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0f82
+ mov bx, 00084h ; bb 84 00 ; 0xc0f85
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0f88
+ mov es, ax ; 8e c0 ; 0xc0f8b
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0f8d
+ xor ah, ah ; 30 e4 ; 0xc0f90
+ push SS ; 16 ; 0xc0f92
+ pop ES ; 07 ; 0xc0f93
+ mov bx, word [bp+008h] ; 8b 5e 08 ; 0xc0f94
+ mov word [es:bx], ax ; 26 89 07 ; 0xc0f97
+ pop bp ; 5d ; 0xc0f9a
+ pop di ; 5f ; 0xc0f9b
+ pop si ; 5e ; 0xc0f9c
+ retn 00002h ; c2 02 00 ; 0xc0f9d
+ mov bx, 0010ch ; bb 0c 01 ; 0xc0fa0 vgabios.c:67
+ jmp short 00f5eh ; eb b9 ; 0xc0fa3
+ mov dx, 05d6ch ; ba 6c 5d ; 0xc0fa5 vgabios.c:601
+ mov ax, ds ; 8c d8 ; 0xc0fa8
+ jmp short 00f69h ; eb bd ; 0xc0faa vgabios.c:602
+ mov dx, 0556ch ; ba 6c 55 ; 0xc0fac vgabios.c:604
+ jmp short 00fa8h ; eb f7 ; 0xc0faf
+ mov dx, 0596ch ; ba 6c 59 ; 0xc0fb1 vgabios.c:607
+ jmp short 00fa8h ; eb f2 ; 0xc0fb4
+ mov dx, 07b6ch ; ba 6c 7b ; 0xc0fb6 vgabios.c:610
+ jmp short 00fa8h ; eb ed ; 0xc0fb9
+ mov dx, 06b6ch ; ba 6c 6b ; 0xc0fbb vgabios.c:613
+ jmp short 00fa8h ; eb e8 ; 0xc0fbe
+ mov dx, 07c99h ; ba 99 7c ; 0xc0fc0 vgabios.c:616
+ jmp short 00fa8h ; eb e3 ; 0xc0fc3
+ jmp short 00f9ah ; eb d3 ; 0xc0fc5 vgabios.c:622
+ ; disGetNextSymbol 0xc0fc7 LB 0x359d -> off=0x0 cb=000000000000016d uValue=00000000000c0fc7 'vga_read_pixel'
+vga_read_pixel: ; 0xc0fc7 LB 0x16d
+ push bp ; 55 ; 0xc0fc7 vgabios.c:635
+ mov bp, sp ; 89 e5 ; 0xc0fc8
+ push si ; 56 ; 0xc0fca
+ push di ; 57 ; 0xc0fcb
+ sub sp, strict byte 0000ch ; 83 ec 0c ; 0xc0fcc
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc0fcf
+ mov si, dx ; 89 d6 ; 0xc0fd2
+ mov word [bp-010h], bx ; 89 5e f0 ; 0xc0fd4
+ mov word [bp-00eh], cx ; 89 4e f2 ; 0xc0fd7
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc0fda vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc0fdd
+ mov es, ax ; 8e c0 ; 0xc0fe0
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc0fe2
+ xor ah, ah ; 30 e4 ; 0xc0fe5 vgabios.c:642
+ call 03888h ; e8 9e 28 ; 0xc0fe7
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc0fea
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc0fed vgabios.c:643
+ je short 01000h ; 74 0f ; 0xc0fef
+ mov bl, al ; 88 c3 ; 0xc0ff1 vgabios.c:645
+ xor bh, bh ; 30 ff ; 0xc0ff3
+ mov CL, strict byte 003h ; b1 03 ; 0xc0ff5
+ sal bx, CL ; d3 e3 ; 0xc0ff7
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc0ff9
+ jne short 01003h ; 75 03 ; 0xc0ffe
+ jmp near 0112dh ; e9 2a 01 ; 0xc1000 vgabios.c:646
+ mov ch, byte [bx+047b0h] ; 8a af b0 47 ; 0xc1003 vgabios.c:649
+ cmp ch, cl ; 38 cd ; 0xc1007
+ jc short 0101ah ; 72 0f ; 0xc1009
+ jbe short 01022h ; 76 15 ; 0xc100b
+ cmp ch, 005h ; 80 fd 05 ; 0xc100d
+ je short 0105bh ; 74 49 ; 0xc1010
+ cmp ch, 004h ; 80 fd 04 ; 0xc1012
+ je short 01022h ; 74 0b ; 0xc1015
+ jmp near 01123h ; e9 09 01 ; 0xc1017
+ cmp ch, 002h ; 80 fd 02 ; 0xc101a
+ je short 0108fh ; 74 70 ; 0xc101d
+ jmp near 01123h ; e9 01 01 ; 0xc101f
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1022 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1025
+ mov es, ax ; 8e c0 ; 0xc1028
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc102a
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc102d vgabios.c:58
+ mul bx ; f7 e3 ; 0xc1030
+ mov CL, strict byte 003h ; b1 03 ; 0xc1032
+ mov bx, si ; 89 f3 ; 0xc1034
+ shr bx, CL ; d3 eb ; 0xc1036
+ add bx, ax ; 01 c3 ; 0xc1038
+ mov di, strict word 0004ch ; bf 4c 00 ; 0xc103a vgabios.c:57
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc103d
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc1040 vgabios.c:58
+ xor ch, ch ; 30 ed ; 0xc1043
+ mul cx ; f7 e1 ; 0xc1045
+ add bx, ax ; 01 c3 ; 0xc1047
+ mov cx, si ; 89 f1 ; 0xc1049 vgabios.c:654
+ and cx, strict byte 00007h ; 83 e1 07 ; 0xc104b
+ mov ax, 00080h ; b8 80 00 ; 0xc104e
+ sar ax, CL ; d3 f8 ; 0xc1051
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc1053
+ mov byte [bp-008h], ch ; 88 6e f8 ; 0xc1056 vgabios.c:656
+ jmp short 01064h ; eb 09 ; 0xc1059
+ jmp near 01103h ; e9 a5 00 ; 0xc105b
+ cmp byte [bp-008h], 004h ; 80 7e f8 04 ; 0xc105e
+ jnc short 0108ch ; 73 28 ; 0xc1062
+ mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc1064 vgabios.c:657
+ xor al, al ; 30 c0 ; 0xc1067
+ or AL, strict byte 004h ; 0c 04 ; 0xc1069
+ mov dx, 003ceh ; ba ce 03 ; 0xc106b
+ out DX, ax ; ef ; 0xc106e
+ mov ax, 0a000h ; b8 00 a0 ; 0xc106f vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc1072
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1074
+ and al, byte [bp-00ah] ; 22 46 f6 ; 0xc1077 vgabios.c:48
+ test al, al ; 84 c0 ; 0xc107a vgabios.c:659
+ jbe short 01087h ; 76 09 ; 0xc107c
+ mov cl, byte [bp-008h] ; 8a 4e f8 ; 0xc107e vgabios.c:660
+ mov AL, strict byte 001h ; b0 01 ; 0xc1081
+ sal al, CL ; d2 e0 ; 0xc1083
+ or ch, al ; 08 c5 ; 0xc1085
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc1087 vgabios.c:661
+ jmp short 0105eh ; eb d2 ; 0xc108a
+ jmp near 01125h ; e9 96 00 ; 0xc108c
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc108f vgabios.c:664
+ xor ah, ah ; 30 e4 ; 0xc1093
+ mov cx, strict word 00004h ; b9 04 00 ; 0xc1095
+ sub cx, ax ; 29 c1 ; 0xc1098
+ mov ax, dx ; 89 d0 ; 0xc109a
+ shr ax, CL ; d3 e8 ; 0xc109c
+ mov cx, ax ; 89 c1 ; 0xc109e
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc10a0
+ shr ax, 1 ; d1 e8 ; 0xc10a3
+ mov bx, strict word 00050h ; bb 50 00 ; 0xc10a5
+ mul bx ; f7 e3 ; 0xc10a8
+ mov bx, cx ; 89 cb ; 0xc10aa
+ add bx, ax ; 01 c3 ; 0xc10ac
+ test byte [bp-010h], 001h ; f6 46 f0 01 ; 0xc10ae vgabios.c:665
+ je short 010b7h ; 74 03 ; 0xc10b2
+ add bh, 020h ; 80 c7 20 ; 0xc10b4 vgabios.c:666
+ mov ax, 0b800h ; b8 00 b8 ; 0xc10b7 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc10ba
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc10bc
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc10bf vgabios.c:668
+ xor bh, bh ; 30 ff ; 0xc10c2
+ mov CL, strict byte 003h ; b1 03 ; 0xc10c4
+ sal bx, CL ; d3 e3 ; 0xc10c6
+ cmp byte [bx+047b1h], 002h ; 80 bf b1 47 02 ; 0xc10c8
+ jne short 010eah ; 75 1b ; 0xc10cd
+ mov cx, si ; 89 f1 ; 0xc10cf vgabios.c:669
+ xor ch, ch ; 30 ed ; 0xc10d1
+ and cl, 003h ; 80 e1 03 ; 0xc10d3
+ mov bx, strict word 00003h ; bb 03 00 ; 0xc10d6
+ sub bx, cx ; 29 cb ; 0xc10d9
+ mov cx, bx ; 89 d9 ; 0xc10db
+ sal cx, 1 ; d1 e1 ; 0xc10dd
+ xor ah, ah ; 30 e4 ; 0xc10df
+ sar ax, CL ; d3 f8 ; 0xc10e1
+ mov ch, al ; 88 c5 ; 0xc10e3
+ and ch, 003h ; 80 e5 03 ; 0xc10e5
+ jmp short 01125h ; eb 3b ; 0xc10e8 vgabios.c:670
+ mov cx, si ; 89 f1 ; 0xc10ea vgabios.c:671
+ xor ch, ch ; 30 ed ; 0xc10ec
+ and cl, 007h ; 80 e1 07 ; 0xc10ee
+ mov bx, strict word 00007h ; bb 07 00 ; 0xc10f1
+ sub bx, cx ; 29 cb ; 0xc10f4
+ mov cx, bx ; 89 d9 ; 0xc10f6
+ xor ah, ah ; 30 e4 ; 0xc10f8
+ sar ax, CL ; d3 f8 ; 0xc10fa
+ mov ch, al ; 88 c5 ; 0xc10fc
+ and ch, 001h ; 80 e5 01 ; 0xc10fe
+ jmp short 01125h ; eb 22 ; 0xc1101 vgabios.c:672
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1103 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1106
+ mov es, ax ; 8e c0 ; 0xc1109
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc110b
+ sal bx, CL ; d3 e3 ; 0xc110e vgabios.c:58
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc1110
+ mul bx ; f7 e3 ; 0xc1113
+ mov bx, si ; 89 f3 ; 0xc1115
+ add bx, ax ; 01 c3 ; 0xc1117
+ mov ax, 0a000h ; b8 00 a0 ; 0xc1119 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc111c
+ mov ch, byte [es:bx] ; 26 8a 2f ; 0xc111e
+ jmp short 01125h ; eb 02 ; 0xc1121 vgabios.c:676
+ xor ch, ch ; 30 ed ; 0xc1123 vgabios.c:681
+ push SS ; 16 ; 0xc1125 vgabios.c:683
+ pop ES ; 07 ; 0xc1126
+ mov bx, word [bp-00eh] ; 8b 5e f2 ; 0xc1127
+ mov byte [es:bx], ch ; 26 88 2f ; 0xc112a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc112d vgabios.c:684
+ pop di ; 5f ; 0xc1130
+ pop si ; 5e ; 0xc1131
+ pop bp ; 5d ; 0xc1132
+ retn ; c3 ; 0xc1133
+ ; disGetNextSymbol 0xc1134 LB 0x3430 -> off=0x0 cb=000000000000009f uValue=00000000000c1134 'biosfn_perform_gray_scale_summing'
+biosfn_perform_gray_scale_summing: ; 0xc1134 LB 0x9f
+ push bp ; 55 ; 0xc1134 vgabios.c:689
+ mov bp, sp ; 89 e5 ; 0xc1135
+ push bx ; 53 ; 0xc1137
+ push cx ; 51 ; 0xc1138
+ push si ; 56 ; 0xc1139
+ push di ; 57 ; 0xc113a
+ push ax ; 50 ; 0xc113b
+ push ax ; 50 ; 0xc113c
+ mov bx, ax ; 89 c3 ; 0xc113d
+ mov di, dx ; 89 d7 ; 0xc113f
+ mov dx, 003dah ; ba da 03 ; 0xc1141 vgabios.c:694
+ in AL, DX ; ec ; 0xc1144
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1145
+ xor al, al ; 30 c0 ; 0xc1147 vgabios.c:695
+ mov dx, 003c0h ; ba c0 03 ; 0xc1149
+ out DX, AL ; ee ; 0xc114c
+ xor si, si ; 31 f6 ; 0xc114d vgabios.c:697
+ cmp si, di ; 39 fe ; 0xc114f
+ jnc short 011b8h ; 73 65 ; 0xc1151
+ mov al, bl ; 88 d8 ; 0xc1153 vgabios.c:700
+ mov dx, 003c7h ; ba c7 03 ; 0xc1155
+ out DX, AL ; ee ; 0xc1158
+ mov dx, 003c9h ; ba c9 03 ; 0xc1159 vgabios.c:702
+ in AL, DX ; ec ; 0xc115c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc115d
+ mov cx, ax ; 89 c1 ; 0xc115f
+ in AL, DX ; ec ; 0xc1161 vgabios.c:703
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1162
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc1164
+ in AL, DX ; ec ; 0xc1167 vgabios.c:704
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1168
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc116a
+ mov al, cl ; 88 c8 ; 0xc116d vgabios.c:707
+ xor ah, ah ; 30 e4 ; 0xc116f
+ mov cx, strict word 0004dh ; b9 4d 00 ; 0xc1171
+ imul cx ; f7 e9 ; 0xc1174
+ mov cx, ax ; 89 c1 ; 0xc1176
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1178
+ xor ah, ah ; 30 e4 ; 0xc117b
+ mov dx, 00097h ; ba 97 00 ; 0xc117d
+ imul dx ; f7 ea ; 0xc1180
+ add cx, ax ; 01 c1 ; 0xc1182
+ mov word [bp-00ah], cx ; 89 4e f6 ; 0xc1184
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc1187
+ xor ch, ch ; 30 ed ; 0xc118a
+ mov ax, cx ; 89 c8 ; 0xc118c
+ mov dx, strict word 0001ch ; ba 1c 00 ; 0xc118e
+ imul dx ; f7 ea ; 0xc1191
+ add ax, word [bp-00ah] ; 03 46 f6 ; 0xc1193
+ add ax, 00080h ; 05 80 00 ; 0xc1196
+ mov al, ah ; 88 e0 ; 0xc1199
+ cbw ; 98 ; 0xc119b
+ mov cx, ax ; 89 c1 ; 0xc119c
+ cmp ax, strict word 0003fh ; 3d 3f 00 ; 0xc119e vgabios.c:709
+ jbe short 011a6h ; 76 03 ; 0xc11a1
+ mov cx, strict word 0003fh ; b9 3f 00 ; 0xc11a3
+ mov al, bl ; 88 d8 ; 0xc11a6 vgabios.c:712
+ mov dx, 003c8h ; ba c8 03 ; 0xc11a8
+ out DX, AL ; ee ; 0xc11ab
+ mov al, cl ; 88 c8 ; 0xc11ac vgabios.c:714
+ mov dx, 003c9h ; ba c9 03 ; 0xc11ae
+ out DX, AL ; ee ; 0xc11b1
+ out DX, AL ; ee ; 0xc11b2 vgabios.c:715
+ out DX, AL ; ee ; 0xc11b3 vgabios.c:716
+ inc bx ; 43 ; 0xc11b4 vgabios.c:717
+ inc si ; 46 ; 0xc11b5 vgabios.c:718
+ jmp short 0114fh ; eb 97 ; 0xc11b6
+ mov dx, 003dah ; ba da 03 ; 0xc11b8 vgabios.c:719
+ in AL, DX ; ec ; 0xc11bb
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc11bc
+ mov AL, strict byte 020h ; b0 20 ; 0xc11be vgabios.c:720
+ mov dx, 003c0h ; ba c0 03 ; 0xc11c0
+ out DX, AL ; ee ; 0xc11c3
+ mov dx, 003dah ; ba da 03 ; 0xc11c4 vgabios.c:722
+ in AL, DX ; ec ; 0xc11c7
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc11c8
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc11ca vgabios.c:724
+ pop di ; 5f ; 0xc11cd
+ pop si ; 5e ; 0xc11ce
+ pop cx ; 59 ; 0xc11cf
+ pop bx ; 5b ; 0xc11d0
+ pop bp ; 5d ; 0xc11d1
+ retn ; c3 ; 0xc11d2
+ ; disGetNextSymbol 0xc11d3 LB 0x3391 -> off=0x0 cb=00000000000000fc uValue=00000000000c11d3 'biosfn_set_cursor_shape'
+biosfn_set_cursor_shape: ; 0xc11d3 LB 0xfc
+ push bp ; 55 ; 0xc11d3 vgabios.c:727
+ mov bp, sp ; 89 e5 ; 0xc11d4
+ push bx ; 53 ; 0xc11d6
+ push cx ; 51 ; 0xc11d7
+ push si ; 56 ; 0xc11d8
+ push ax ; 50 ; 0xc11d9
+ push ax ; 50 ; 0xc11da
+ mov ah, al ; 88 c4 ; 0xc11db
+ mov bl, dl ; 88 d3 ; 0xc11dd
+ mov dh, al ; 88 c6 ; 0xc11df vgabios.c:733
+ mov si, strict word 00060h ; be 60 00 ; 0xc11e1 vgabios.c:62
+ mov cx, strict word 00040h ; b9 40 00 ; 0xc11e4
+ mov es, cx ; 8e c1 ; 0xc11e7
+ mov word [es:si], dx ; 26 89 14 ; 0xc11e9
+ mov si, 00087h ; be 87 00 ; 0xc11ec vgabios.c:47
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc11ef
+ test dl, 008h ; f6 c2 08 ; 0xc11f2 vgabios.c:48
+ jne short 01234h ; 75 3d ; 0xc11f5
+ mov dl, al ; 88 c2 ; 0xc11f7 vgabios.c:739
+ and dl, 060h ; 80 e2 60 ; 0xc11f9
+ cmp dl, 020h ; 80 fa 20 ; 0xc11fc
+ jne short 01207h ; 75 06 ; 0xc11ff
+ mov AH, strict byte 01eh ; b4 1e ; 0xc1201 vgabios.c:741
+ xor bl, bl ; 30 db ; 0xc1203 vgabios.c:742
+ jmp short 01234h ; eb 2d ; 0xc1205 vgabios.c:743
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc1207 vgabios.c:47
+ test dl, 001h ; f6 c2 01 ; 0xc120a vgabios.c:48
+ jne short 01269h ; 75 5a ; 0xc120d
+ cmp ah, 020h ; 80 fc 20 ; 0xc120f
+ jnc short 01269h ; 73 55 ; 0xc1212
+ cmp bl, 020h ; 80 fb 20 ; 0xc1214
+ jnc short 01269h ; 73 50 ; 0xc1217
+ mov si, 00085h ; be 85 00 ; 0xc1219 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc121c
+ mov es, dx ; 8e c2 ; 0xc121f
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc1221
+ mov dx, cx ; 89 ca ; 0xc1224 vgabios.c:58
+ cmp bl, ah ; 38 e3 ; 0xc1226 vgabios.c:754
+ jnc short 01236h ; 73 0c ; 0xc1228
+ test bl, bl ; 84 db ; 0xc122a vgabios.c:756
+ je short 01269h ; 74 3b ; 0xc122c
+ xor ah, ah ; 30 e4 ; 0xc122e vgabios.c:757
+ mov bl, cl ; 88 cb ; 0xc1230 vgabios.c:758
+ db 0feh, 0cbh
+ ; dec bl ; fe cb ; 0xc1232
+ jmp short 01269h ; eb 33 ; 0xc1234 vgabios.c:760
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc1236 vgabios.c:761
+ xor al, al ; 30 c0 ; 0xc1239
+ mov byte [bp-007h], al ; 88 46 f9 ; 0xc123b
+ mov byte [bp-00ah], ah ; 88 66 f6 ; 0xc123e
+ mov byte [bp-009h], al ; 88 46 f7 ; 0xc1241
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc1244
+ or si, word [bp-00ah] ; 0b 76 f6 ; 0xc1247
+ cmp si, cx ; 39 ce ; 0xc124a
+ jnc short 0126bh ; 73 1d ; 0xc124c
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc124e
+ mov byte [bp-007h], al ; 88 46 f9 ; 0xc1251
+ mov si, cx ; 89 ce ; 0xc1254
+ dec si ; 4e ; 0xc1256
+ cmp si, word [bp-008h] ; 3b 76 f8 ; 0xc1257
+ je short 012a5h ; 74 49 ; 0xc125a
+ mov byte [bp-008h], ah ; 88 66 f8 ; 0xc125c
+ mov byte [bp-007h], al ; 88 46 f9 ; 0xc125f
+ dec cx ; 49 ; 0xc1262
+ dec cx ; 49 ; 0xc1263
+ cmp cx, word [bp-008h] ; 3b 4e f8 ; 0xc1264
+ jne short 0126bh ; 75 02 ; 0xc1267
+ jmp short 012a5h ; eb 3a ; 0xc1269
+ cmp bl, 003h ; 80 fb 03 ; 0xc126b vgabios.c:763
+ jbe short 012a5h ; 76 35 ; 0xc126e
+ mov cl, ah ; 88 e1 ; 0xc1270 vgabios.c:764
+ xor ch, ch ; 30 ed ; 0xc1272
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc1274
+ mov byte [bp-007h], ch ; 88 6e f9 ; 0xc1277
+ mov si, cx ; 89 ce ; 0xc127a
+ inc si ; 46 ; 0xc127c
+ inc si ; 46 ; 0xc127d
+ mov cl, dl ; 88 d1 ; 0xc127e
+ db 0feh, 0c9h
+ ; dec cl ; fe c9 ; 0xc1280
+ cmp si, word [bp-008h] ; 3b 76 f8 ; 0xc1282
+ jl short 0129ah ; 7c 13 ; 0xc1285
+ sub ah, bl ; 28 dc ; 0xc1287 vgabios.c:766
+ add ah, dl ; 00 d4 ; 0xc1289
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc128b
+ mov bl, cl ; 88 cb ; 0xc128d vgabios.c:767
+ cmp dx, strict byte 0000eh ; 83 fa 0e ; 0xc128f vgabios.c:768
+ jc short 012a5h ; 72 11 ; 0xc1292
+ db 0feh, 0cbh
+ ; dec bl ; fe cb ; 0xc1294 vgabios.c:770
+ db 0feh, 0cch
+ ; dec ah ; fe cc ; 0xc1296 vgabios.c:771
+ jmp short 012a5h ; eb 0b ; 0xc1298 vgabios.c:773
+ cmp ah, 002h ; 80 fc 02 ; 0xc129a
+ jbe short 012a3h ; 76 04 ; 0xc129d
+ shr dx, 1 ; d1 ea ; 0xc129f vgabios.c:775
+ mov ah, dl ; 88 d4 ; 0xc12a1
+ mov bl, cl ; 88 cb ; 0xc12a3 vgabios.c:779
+ mov si, strict word 00063h ; be 63 00 ; 0xc12a5 vgabios.c:57
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc12a8
+ mov es, dx ; 8e c2 ; 0xc12ab
+ mov cx, word [es:si] ; 26 8b 0c ; 0xc12ad
+ mov AL, strict byte 00ah ; b0 0a ; 0xc12b0 vgabios.c:790
+ mov dx, cx ; 89 ca ; 0xc12b2
+ out DX, AL ; ee ; 0xc12b4
+ mov si, cx ; 89 ce ; 0xc12b5 vgabios.c:791
+ inc si ; 46 ; 0xc12b7
+ mov al, ah ; 88 e0 ; 0xc12b8
+ mov dx, si ; 89 f2 ; 0xc12ba
+ out DX, AL ; ee ; 0xc12bc
+ mov AL, strict byte 00bh ; b0 0b ; 0xc12bd vgabios.c:792
+ mov dx, cx ; 89 ca ; 0xc12bf
+ out DX, AL ; ee ; 0xc12c1
+ mov al, bl ; 88 d8 ; 0xc12c2 vgabios.c:793
+ mov dx, si ; 89 f2 ; 0xc12c4
+ out DX, AL ; ee ; 0xc12c6
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc12c7 vgabios.c:794
+ pop si ; 5e ; 0xc12ca
+ pop cx ; 59 ; 0xc12cb
+ pop bx ; 5b ; 0xc12cc
+ pop bp ; 5d ; 0xc12cd
+ retn ; c3 ; 0xc12ce
+ ; disGetNextSymbol 0xc12cf LB 0x3295 -> off=0x0 cb=000000000000008d uValue=00000000000c12cf 'biosfn_set_cursor_pos'
+biosfn_set_cursor_pos: ; 0xc12cf LB 0x8d
+ push bp ; 55 ; 0xc12cf vgabios.c:797
+ mov bp, sp ; 89 e5 ; 0xc12d0
+ push bx ; 53 ; 0xc12d2
+ push cx ; 51 ; 0xc12d3
+ push si ; 56 ; 0xc12d4
+ push di ; 57 ; 0xc12d5
+ push ax ; 50 ; 0xc12d6
+ mov bl, al ; 88 c3 ; 0xc12d7
+ mov cx, dx ; 89 d1 ; 0xc12d9
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc12db vgabios.c:803
+ jnbe short 01353h ; 77 74 ; 0xc12dd
+ xor ah, ah ; 30 e4 ; 0xc12df vgabios.c:806
+ mov si, ax ; 89 c6 ; 0xc12e1
+ sal si, 1 ; d1 e6 ; 0xc12e3
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc12e5
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc12e8 vgabios.c:62
+ mov es, ax ; 8e c0 ; 0xc12eb
+ mov word [es:si], dx ; 26 89 14 ; 0xc12ed
+ mov si, strict word 00062h ; be 62 00 ; 0xc12f0 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc12f3
+ cmp bl, al ; 38 c3 ; 0xc12f6 vgabios.c:810
+ jne short 01353h ; 75 59 ; 0xc12f8
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc12fa vgabios.c:57
+ mov si, word [es:si] ; 26 8b 34 ; 0xc12fd
+ mov di, 00084h ; bf 84 00 ; 0xc1300 vgabios.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc1303
+ xor ah, ah ; 30 e4 ; 0xc1306 vgabios.c:48
+ mov di, ax ; 89 c7 ; 0xc1308
+ inc di ; 47 ; 0xc130a
+ mov ax, dx ; 89 d0 ; 0xc130b vgabios.c:816
+ mov al, dh ; 88 f0 ; 0xc130d
+ xor ah, dh ; 30 f4 ; 0xc130f
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc1311
+ mov ax, si ; 89 f0 ; 0xc1314 vgabios.c:819
+ mul di ; f7 e7 ; 0xc1316
+ or AL, strict byte 0ffh ; 0c ff ; 0xc1318
+ xor bh, bh ; 30 ff ; 0xc131a
+ inc ax ; 40 ; 0xc131c
+ mul bx ; f7 e3 ; 0xc131d
+ mov bx, ax ; 89 c3 ; 0xc131f
+ mov al, cl ; 88 c8 ; 0xc1321
+ xor ah, ah ; 30 e4 ; 0xc1323
+ add bx, ax ; 01 c3 ; 0xc1325
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1327
+ mul si ; f7 e6 ; 0xc132a
+ mov si, bx ; 89 de ; 0xc132c
+ add si, ax ; 01 c6 ; 0xc132e
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc1330 vgabios.c:57
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc1333
+ mov AL, strict byte 00eh ; b0 0e ; 0xc1336 vgabios.c:823
+ mov dx, bx ; 89 da ; 0xc1338
+ out DX, AL ; ee ; 0xc133a
+ mov ax, si ; 89 f0 ; 0xc133b vgabios.c:824
+ mov al, ah ; 88 e0 ; 0xc133d
+ lea cx, [bx+001h] ; 8d 4f 01 ; 0xc133f
+ mov dx, cx ; 89 ca ; 0xc1342
+ out DX, AL ; ee ; 0xc1344
+ mov AL, strict byte 00fh ; b0 0f ; 0xc1345 vgabios.c:825
+ mov dx, bx ; 89 da ; 0xc1347
+ out DX, AL ; ee ; 0xc1349
+ and si, 000ffh ; 81 e6 ff 00 ; 0xc134a vgabios.c:826
+ mov ax, si ; 89 f0 ; 0xc134e
+ mov dx, cx ; 89 ca ; 0xc1350
+ out DX, AL ; ee ; 0xc1352
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc1353 vgabios.c:828
+ pop di ; 5f ; 0xc1356
+ pop si ; 5e ; 0xc1357
+ pop cx ; 59 ; 0xc1358
+ pop bx ; 5b ; 0xc1359
+ pop bp ; 5d ; 0xc135a
+ retn ; c3 ; 0xc135b
+ ; disGetNextSymbol 0xc135c LB 0x3208 -> off=0x0 cb=00000000000000d5 uValue=00000000000c135c 'biosfn_set_active_page'
+biosfn_set_active_page: ; 0xc135c LB 0xd5
+ push bp ; 55 ; 0xc135c vgabios.c:831
+ mov bp, sp ; 89 e5 ; 0xc135d
+ push bx ; 53 ; 0xc135f
+ push cx ; 51 ; 0xc1360
+ push dx ; 52 ; 0xc1361
+ push si ; 56 ; 0xc1362
+ push di ; 57 ; 0xc1363
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc1364
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc1367
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc136a vgabios.c:837
+ jnbe short 01384h ; 77 16 ; 0xc136c
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc136e vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1371
+ mov es, ax ; 8e c0 ; 0xc1374
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1376
+ xor ah, ah ; 30 e4 ; 0xc1379 vgabios.c:841
+ call 03888h ; e8 0a 25 ; 0xc137b
+ mov cl, al ; 88 c1 ; 0xc137e
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1380 vgabios.c:842
+ jne short 01387h ; 75 03 ; 0xc1382
+ jmp near 01427h ; e9 a0 00 ; 0xc1384
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1387 vgabios.c:845
+ xor ah, ah ; 30 e4 ; 0xc138a
+ lea bx, [bp-010h] ; 8d 5e f0 ; 0xc138c
+ lea dx, [bp-00eh] ; 8d 56 f2 ; 0xc138f
+ call 00a97h ; e8 02 f7 ; 0xc1392
+ mov bl, cl ; 88 cb ; 0xc1395 vgabios.c:847
+ xor bh, bh ; 30 ff ; 0xc1397
+ mov CL, strict byte 003h ; b1 03 ; 0xc1399
+ mov si, bx ; 89 de ; 0xc139b
+ sal si, CL ; d3 e6 ; 0xc139d
+ cmp byte [si+047afh], 000h ; 80 bc af 47 00 ; 0xc139f
+ jne short 013e1h ; 75 3b ; 0xc13a4
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc13a6 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc13a9
+ mov es, ax ; 8e c0 ; 0xc13ac
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc13ae
+ mov bx, 00084h ; bb 84 00 ; 0xc13b1 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc13b4
+ xor ah, ah ; 30 e4 ; 0xc13b7 vgabios.c:48
+ mov bx, ax ; 89 c3 ; 0xc13b9
+ inc bx ; 43 ; 0xc13bb
+ mov ax, dx ; 89 d0 ; 0xc13bc vgabios.c:854
+ mul bx ; f7 e3 ; 0xc13be
+ mov di, ax ; 89 c7 ; 0xc13c0
+ sal ax, 1 ; d1 e0 ; 0xc13c2
+ or AL, strict byte 0ffh ; 0c ff ; 0xc13c4
+ mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc13c6
+ xor bh, bh ; 30 ff ; 0xc13c9
+ inc ax ; 40 ; 0xc13cb
+ mul bx ; f7 e3 ; 0xc13cc
+ mov cx, ax ; 89 c1 ; 0xc13ce
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc13d0 vgabios.c:62
+ mov word [es:si], ax ; 26 89 04 ; 0xc13d3
+ or di, 000ffh ; 81 cf ff 00 ; 0xc13d6 vgabios.c:858
+ lea ax, [di+001h] ; 8d 45 01 ; 0xc13da
+ mul bx ; f7 e3 ; 0xc13dd
+ jmp short 013f2h ; eb 11 ; 0xc13df vgabios.c:860
+ mov bl, byte [bx+0482eh] ; 8a 9f 2e 48 ; 0xc13e1 vgabios.c:862
+ mov CL, strict byte 006h ; b1 06 ; 0xc13e5
+ sal bx, CL ; d3 e3 ; 0xc13e7
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc13e9
+ xor ah, ah ; 30 e4 ; 0xc13ec
+ mul word [bx+04845h] ; f7 a7 45 48 ; 0xc13ee
+ mov cx, ax ; 89 c1 ; 0xc13f2
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc13f4 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc13f7
+ mov es, ax ; 8e c0 ; 0xc13fa
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc13fc
+ mov AL, strict byte 00ch ; b0 0c ; 0xc13ff vgabios.c:867
+ mov dx, bx ; 89 da ; 0xc1401
+ out DX, AL ; ee ; 0xc1403
+ mov al, ch ; 88 e8 ; 0xc1404 vgabios.c:868
+ lea si, [bx+001h] ; 8d 77 01 ; 0xc1406
+ mov dx, si ; 89 f2 ; 0xc1409
+ out DX, AL ; ee ; 0xc140b
+ mov AL, strict byte 00dh ; b0 0d ; 0xc140c vgabios.c:869
+ mov dx, bx ; 89 da ; 0xc140e
+ out DX, AL ; ee ; 0xc1410
+ xor ch, ch ; 30 ed ; 0xc1411 vgabios.c:870
+ mov ax, cx ; 89 c8 ; 0xc1413
+ mov dx, si ; 89 f2 ; 0xc1415
+ out DX, AL ; ee ; 0xc1417
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc1418 vgabios.c:52
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc141b
+ mov byte [es:bx], al ; 26 88 07 ; 0xc141e
+ mov dx, word [bp-010h] ; 8b 56 f0 ; 0xc1421 vgabios.c:880
+ call 012cfh ; e8 a8 fe ; 0xc1424
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1427 vgabios.c:881
+ pop di ; 5f ; 0xc142a
+ pop si ; 5e ; 0xc142b
+ pop dx ; 5a ; 0xc142c
+ pop cx ; 59 ; 0xc142d
+ pop bx ; 5b ; 0xc142e
+ pop bp ; 5d ; 0xc142f
+ retn ; c3 ; 0xc1430
+ ; disGetNextSymbol 0xc1431 LB 0x3133 -> off=0x0 cb=0000000000000048 uValue=00000000000c1431 'find_vpti'
+find_vpti: ; 0xc1431 LB 0x48
+ push bx ; 53 ; 0xc1431 vgabios.c:916
+ push cx ; 51 ; 0xc1432
+ push si ; 56 ; 0xc1433
+ push bp ; 55 ; 0xc1434
+ mov bp, sp ; 89 e5 ; 0xc1435
+ mov bl, al ; 88 c3 ; 0xc1437 vgabios.c:921
+ xor bh, bh ; 30 ff ; 0xc1439
+ mov CL, strict byte 003h ; b1 03 ; 0xc143b
+ mov si, bx ; 89 de ; 0xc143d
+ sal si, CL ; d3 e6 ; 0xc143f
+ cmp byte [si+047afh], 000h ; 80 bc af 47 00 ; 0xc1441
+ jne short 0146eh ; 75 26 ; 0xc1446
+ mov si, 00089h ; be 89 00 ; 0xc1448 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc144b
+ mov es, ax ; 8e c0 ; 0xc144e
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc1450
+ test AL, strict byte 010h ; a8 10 ; 0xc1453 vgabios.c:923
+ je short 0145dh ; 74 06 ; 0xc1455
+ mov al, byte [bx+07df5h] ; 8a 87 f5 7d ; 0xc1457 vgabios.c:924
+ jmp short 0146bh ; eb 0e ; 0xc145b vgabios.c:925
+ test AL, strict byte 080h ; a8 80 ; 0xc145d
+ je short 01467h ; 74 06 ; 0xc145f
+ mov al, byte [bx+07de5h] ; 8a 87 e5 7d ; 0xc1461 vgabios.c:926
+ jmp short 0146bh ; eb 04 ; 0xc1465 vgabios.c:927
+ mov al, byte [bx+07dedh] ; 8a 87 ed 7d ; 0xc1467 vgabios.c:928
+ cbw ; 98 ; 0xc146b
+ jmp short 01474h ; eb 06 ; 0xc146c vgabios.c:929
+ mov al, byte [bx+0482eh] ; 8a 87 2e 48 ; 0xc146e vgabios.c:930
+ xor ah, ah ; 30 e4 ; 0xc1472
+ pop bp ; 5d ; 0xc1474 vgabios.c:933
+ pop si ; 5e ; 0xc1475
+ pop cx ; 59 ; 0xc1476
+ pop bx ; 5b ; 0xc1477
+ retn ; c3 ; 0xc1478
+ ; disGetNextSymbol 0xc1479 LB 0x30eb -> off=0x0 cb=00000000000004e4 uValue=00000000000c1479 'biosfn_set_video_mode'
+biosfn_set_video_mode: ; 0xc1479 LB 0x4e4
+ push bp ; 55 ; 0xc1479 vgabios.c:938
+ mov bp, sp ; 89 e5 ; 0xc147a
+ push bx ; 53 ; 0xc147c
+ push cx ; 51 ; 0xc147d
+ push dx ; 52 ; 0xc147e
+ push si ; 56 ; 0xc147f
+ push di ; 57 ; 0xc1480
+ sub sp, strict byte 00018h ; 83 ec 18 ; 0xc1481
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc1484
+ and AL, strict byte 080h ; 24 80 ; 0xc1487 vgabios.c:942
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1489
+ call 007f8h ; e8 69 f3 ; 0xc148c vgabios.c:952
+ test ax, ax ; 85 c0 ; 0xc148f
+ je short 0149fh ; 74 0c ; 0xc1491
+ mov AL, strict byte 007h ; b0 07 ; 0xc1493 vgabios.c:954
+ mov dx, 003c4h ; ba c4 03 ; 0xc1495
+ out DX, AL ; ee ; 0xc1498
+ xor al, al ; 30 c0 ; 0xc1499 vgabios.c:955
+ mov dx, 003c5h ; ba c5 03 ; 0xc149b
+ out DX, AL ; ee ; 0xc149e
+ and byte [bp-00ch], 07fh ; 80 66 f4 7f ; 0xc149f vgabios.c:960
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc14a3 vgabios.c:966
+ xor ah, ah ; 30 e4 ; 0xc14a6
+ call 03888h ; e8 dd 23 ; 0xc14a8
+ mov dl, al ; 88 c2 ; 0xc14ab
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc14ad
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc14b0 vgabios.c:972
+ je short 01520h ; 74 6c ; 0xc14b2
+ mov si, 000a8h ; be a8 00 ; 0xc14b4 vgabios.c:67
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc14b7
+ mov es, ax ; 8e c0 ; 0xc14ba
+ mov bx, word [es:si] ; 26 8b 1c ; 0xc14bc
+ mov ax, word [es:si+002h] ; 26 8b 44 02 ; 0xc14bf
+ mov word [bp-014h], bx ; 89 5e ec ; 0xc14c3 vgabios.c:68
+ mov word [bp-012h], ax ; 89 46 ee ; 0xc14c6
+ xor dh, dh ; 30 f6 ; 0xc14c9 vgabios.c:978
+ mov ax, dx ; 89 d0 ; 0xc14cb
+ call 01431h ; e8 61 ff ; 0xc14cd
+ mov es, [bp-012h] ; 8e 46 ee ; 0xc14d0 vgabios.c:979
+ mov si, word [es:bx] ; 26 8b 37 ; 0xc14d3
+ mov bx, word [es:bx+002h] ; 26 8b 5f 02 ; 0xc14d6
+ mov word [bp-01ah], bx ; 89 5e e6 ; 0xc14da
+ xor ah, ah ; 30 e4 ; 0xc14dd vgabios.c:980
+ mov CL, strict byte 006h ; b1 06 ; 0xc14df
+ sal ax, CL ; d3 e0 ; 0xc14e1
+ add si, ax ; 01 c6 ; 0xc14e3
+ mov bx, 00089h ; bb 89 00 ; 0xc14e5 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc14e8
+ mov es, ax ; 8e c0 ; 0xc14eb
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc14ed
+ mov ch, al ; 88 c5 ; 0xc14f0 vgabios.c:48
+ test AL, strict byte 008h ; a8 08 ; 0xc14f2 vgabios.c:997
+ jne short 0153ch ; 75 46 ; 0xc14f4
+ mov CL, strict byte 003h ; b1 03 ; 0xc14f6 vgabios.c:999
+ mov bx, dx ; 89 d3 ; 0xc14f8
+ sal bx, CL ; d3 e3 ; 0xc14fa
+ mov al, byte [bx+047b4h] ; 8a 87 b4 47 ; 0xc14fc
+ mov dx, 003c6h ; ba c6 03 ; 0xc1500
+ out DX, AL ; ee ; 0xc1503
+ xor al, al ; 30 c0 ; 0xc1504 vgabios.c:1002
+ mov dx, 003c8h ; ba c8 03 ; 0xc1506
+ out DX, AL ; ee ; 0xc1509
+ mov bl, byte [bx+047b5h] ; 8a 9f b5 47 ; 0xc150a vgabios.c:1005
+ cmp bl, 001h ; 80 fb 01 ; 0xc150e
+ jc short 01523h ; 72 10 ; 0xc1511
+ jbe short 0152eh ; 76 19 ; 0xc1513
+ cmp bl, cl ; 38 cb ; 0xc1515
+ je short 0153fh ; 74 26 ; 0xc1517
+ cmp bl, 002h ; 80 fb 02 ; 0xc1519
+ je short 01535h ; 74 17 ; 0xc151c
+ jmp short 01544h ; eb 24 ; 0xc151e
+ jmp near 01953h ; e9 30 04 ; 0xc1520
+ test bl, bl ; 84 db ; 0xc1523
+ jne short 01544h ; 75 1d ; 0xc1525
+ mov word [bp-016h], 04fc2h ; c7 46 ea c2 4f ; 0xc1527 vgabios.c:1007
+ jmp short 01544h ; eb 16 ; 0xc152c vgabios.c:1008
+ mov word [bp-016h], 05082h ; c7 46 ea 82 50 ; 0xc152e vgabios.c:1010
+ jmp short 01544h ; eb 0f ; 0xc1533 vgabios.c:1011
+ mov word [bp-016h], 05142h ; c7 46 ea 42 51 ; 0xc1535 vgabios.c:1013
+ jmp short 01544h ; eb 08 ; 0xc153a vgabios.c:1014
+ jmp near 015b8h ; e9 79 00 ; 0xc153c
+ mov word [bp-016h], 05202h ; c7 46 ea 02 52 ; 0xc153f vgabios.c:1016
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc1544 vgabios.c:1020
+ xor bh, bh ; 30 ff ; 0xc1547
+ mov CL, strict byte 003h ; b1 03 ; 0xc1549
+ sal bx, CL ; d3 e3 ; 0xc154b
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc154d
+ jne short 01563h ; 75 0f ; 0xc1552
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1554 vgabios.c:1022
+ cmp byte [es:si+002h], 008h ; 26 80 7c 02 08 ; 0xc1557
+ jne short 01563h ; 75 05 ; 0xc155c
+ mov word [bp-016h], 05082h ; c7 46 ea 82 50 ; 0xc155e vgabios.c:1023
+ xor bx, bx ; 31 db ; 0xc1563 vgabios.c:1026
+ jmp short 01576h ; eb 0f ; 0xc1565
+ xor al, al ; 30 c0 ; 0xc1567 vgabios.c:1033
+ mov dx, 003c9h ; ba c9 03 ; 0xc1569
+ out DX, AL ; ee ; 0xc156c
+ out DX, AL ; ee ; 0xc156d vgabios.c:1034
+ out DX, AL ; ee ; 0xc156e vgabios.c:1035
+ inc bx ; 43 ; 0xc156f vgabios.c:1037
+ cmp bx, 00100h ; 81 fb 00 01 ; 0xc1570
+ jnc short 015abh ; 73 35 ; 0xc1574
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1576
+ xor ah, ah ; 30 e4 ; 0xc1579
+ mov CL, strict byte 003h ; b1 03 ; 0xc157b
+ mov di, ax ; 89 c7 ; 0xc157d
+ sal di, CL ; d3 e7 ; 0xc157f
+ mov al, byte [di+047b5h] ; 8a 85 b5 47 ; 0xc1581
+ mov di, ax ; 89 c7 ; 0xc1585
+ mov al, byte [di+0483eh] ; 8a 85 3e 48 ; 0xc1587
+ cmp bx, ax ; 39 c3 ; 0xc158b
+ jnbe short 01567h ; 77 d8 ; 0xc158d
+ mov ax, bx ; 89 d8 ; 0xc158f
+ mov dx, strict word 00003h ; ba 03 00 ; 0xc1591
+ mul dx ; f7 e2 ; 0xc1594
+ mov di, word [bp-016h] ; 8b 7e ea ; 0xc1596
+ add di, ax ; 01 c7 ; 0xc1599
+ mov al, byte [di] ; 8a 05 ; 0xc159b
+ mov dx, 003c9h ; ba c9 03 ; 0xc159d
+ out DX, AL ; ee ; 0xc15a0
+ mov al, byte [di+001h] ; 8a 45 01 ; 0xc15a1
+ out DX, AL ; ee ; 0xc15a4
+ mov al, byte [di+002h] ; 8a 45 02 ; 0xc15a5
+ out DX, AL ; ee ; 0xc15a8
+ jmp short 0156fh ; eb c4 ; 0xc15a9
+ test ch, 002h ; f6 c5 02 ; 0xc15ab vgabios.c:1038
+ je short 015b8h ; 74 08 ; 0xc15ae
+ mov dx, 00100h ; ba 00 01 ; 0xc15b0 vgabios.c:1040
+ xor ax, ax ; 31 c0 ; 0xc15b3
+ call 01134h ; e8 7c fb ; 0xc15b5
+ mov dx, 003dah ; ba da 03 ; 0xc15b8 vgabios.c:1045
+ in AL, DX ; ec ; 0xc15bb
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc15bc
+ xor bx, bx ; 31 db ; 0xc15be vgabios.c:1048
+ jmp short 015c7h ; eb 05 ; 0xc15c0
+ cmp bx, strict byte 00013h ; 83 fb 13 ; 0xc15c2
+ jnbe short 015dch ; 77 15 ; 0xc15c5
+ mov al, bl ; 88 d8 ; 0xc15c7 vgabios.c:1049
+ mov dx, 003c0h ; ba c0 03 ; 0xc15c9
+ out DX, AL ; ee ; 0xc15cc
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc15cd vgabios.c:1050
+ mov di, si ; 89 f7 ; 0xc15d0
+ add di, bx ; 01 df ; 0xc15d2
+ mov al, byte [es:di+023h] ; 26 8a 45 23 ; 0xc15d4
+ out DX, AL ; ee ; 0xc15d8
+ inc bx ; 43 ; 0xc15d9 vgabios.c:1051
+ jmp short 015c2h ; eb e6 ; 0xc15da
+ mov AL, strict byte 014h ; b0 14 ; 0xc15dc vgabios.c:1052
+ mov dx, 003c0h ; ba c0 03 ; 0xc15de
+ out DX, AL ; ee ; 0xc15e1
+ xor al, al ; 30 c0 ; 0xc15e2 vgabios.c:1053
+ out DX, AL ; ee ; 0xc15e4
+ les bx, [bp-014h] ; c4 5e ec ; 0xc15e5 vgabios.c:1056
+ mov dx, word [es:bx+004h] ; 26 8b 57 04 ; 0xc15e8
+ mov ax, word [es:bx+006h] ; 26 8b 47 06 ; 0xc15ec
+ test ax, ax ; 85 c0 ; 0xc15f0
+ jne short 015f8h ; 75 04 ; 0xc15f2
+ test dx, dx ; 85 d2 ; 0xc15f4
+ je short 01634h ; 74 3c ; 0xc15f6
+ mov word [bp-020h], ax ; 89 46 e0 ; 0xc15f8 vgabios.c:1060
+ xor bx, bx ; 31 db ; 0xc15fb vgabios.c:1061
+ jmp short 01604h ; eb 05 ; 0xc15fd
+ cmp bx, strict byte 00010h ; 83 fb 10 ; 0xc15ff
+ jnc short 01624h ; 73 20 ; 0xc1602
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1604 vgabios.c:1062
+ mov di, si ; 89 f7 ; 0xc1607
+ add di, bx ; 01 df ; 0xc1609
+ mov ax, word [bp-020h] ; 8b 46 e0 ; 0xc160b
+ mov word [bp-022h], ax ; 89 46 de ; 0xc160e
+ mov cx, dx ; 89 d1 ; 0xc1611
+ add cx, bx ; 01 d9 ; 0xc1613
+ mov al, byte [es:di+023h] ; 26 8a 45 23 ; 0xc1615
+ mov es, [bp-022h] ; 8e 46 de ; 0xc1619
+ mov di, cx ; 89 cf ; 0xc161c
+ mov byte [es:di], al ; 26 88 05 ; 0xc161e
+ inc bx ; 43 ; 0xc1621
+ jmp short 015ffh ; eb db ; 0xc1622
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1624 vgabios.c:1063
+ mov al, byte [es:si+034h] ; 26 8a 44 34 ; 0xc1627
+ mov es, [bp-020h] ; 8e 46 e0 ; 0xc162b
+ mov bx, dx ; 89 d3 ; 0xc162e
+ mov byte [es:bx+010h], al ; 26 88 47 10 ; 0xc1630
+ xor al, al ; 30 c0 ; 0xc1634 vgabios.c:1067
+ mov dx, 003c4h ; ba c4 03 ; 0xc1636
+ out DX, AL ; ee ; 0xc1639
+ mov AL, strict byte 003h ; b0 03 ; 0xc163a vgabios.c:1068
+ mov dx, 003c5h ; ba c5 03 ; 0xc163c
+ out DX, AL ; ee ; 0xc163f
+ mov bx, strict word 00001h ; bb 01 00 ; 0xc1640 vgabios.c:1069
+ jmp short 0164ah ; eb 05 ; 0xc1643
+ cmp bx, strict byte 00004h ; 83 fb 04 ; 0xc1645
+ jnbe short 01662h ; 77 18 ; 0xc1648
+ mov al, bl ; 88 d8 ; 0xc164a vgabios.c:1070
+ mov dx, 003c4h ; ba c4 03 ; 0xc164c
+ out DX, AL ; ee ; 0xc164f
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1650 vgabios.c:1071
+ mov di, si ; 89 f7 ; 0xc1653
+ add di, bx ; 01 df ; 0xc1655
+ mov al, byte [es:di+004h] ; 26 8a 45 04 ; 0xc1657
+ mov dx, 003c5h ; ba c5 03 ; 0xc165b
+ out DX, AL ; ee ; 0xc165e
+ inc bx ; 43 ; 0xc165f vgabios.c:1072
+ jmp short 01645h ; eb e3 ; 0xc1660
+ xor bx, bx ; 31 db ; 0xc1662 vgabios.c:1075
+ jmp short 0166bh ; eb 05 ; 0xc1664
+ cmp bx, strict byte 00008h ; 83 fb 08 ; 0xc1666
+ jnbe short 01683h ; 77 18 ; 0xc1669
+ mov al, bl ; 88 d8 ; 0xc166b vgabios.c:1076
+ mov dx, 003ceh ; ba ce 03 ; 0xc166d
+ out DX, AL ; ee ; 0xc1670
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1671 vgabios.c:1077
+ mov di, si ; 89 f7 ; 0xc1674
+ add di, bx ; 01 df ; 0xc1676
+ mov al, byte [es:di+037h] ; 26 8a 45 37 ; 0xc1678
+ mov dx, 003cfh ; ba cf 03 ; 0xc167c
+ out DX, AL ; ee ; 0xc167f
+ inc bx ; 43 ; 0xc1680 vgabios.c:1078
+ jmp short 01666h ; eb e3 ; 0xc1681
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc1683 vgabios.c:1081
+ xor bh, bh ; 30 ff ; 0xc1686
+ mov CL, strict byte 003h ; b1 03 ; 0xc1688
+ sal bx, CL ; d3 e3 ; 0xc168a
+ cmp byte [bx+047b0h], 001h ; 80 bf b0 47 01 ; 0xc168c
+ jne short 01698h ; 75 05 ; 0xc1691
+ mov bx, 003b4h ; bb b4 03 ; 0xc1693
+ jmp short 0169bh ; eb 03 ; 0xc1696
+ mov bx, 003d4h ; bb d4 03 ; 0xc1698
+ mov word [bp-018h], bx ; 89 5e e8 ; 0xc169b
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc169e vgabios.c:1084
+ mov al, byte [es:si+009h] ; 26 8a 44 09 ; 0xc16a1
+ mov dx, 003c2h ; ba c2 03 ; 0xc16a5
+ out DX, AL ; ee ; 0xc16a8
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc16a9 vgabios.c:1087
+ mov dx, bx ; 89 da ; 0xc16ac
+ out DX, ax ; ef ; 0xc16ae
+ xor bx, bx ; 31 db ; 0xc16af vgabios.c:1089
+ jmp short 016b8h ; eb 05 ; 0xc16b1
+ cmp bx, strict byte 00018h ; 83 fb 18 ; 0xc16b3
+ jnbe short 016ceh ; 77 16 ; 0xc16b6
+ mov al, bl ; 88 d8 ; 0xc16b8 vgabios.c:1090
+ mov dx, word [bp-018h] ; 8b 56 e8 ; 0xc16ba
+ out DX, AL ; ee ; 0xc16bd
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc16be vgabios.c:1091
+ mov di, si ; 89 f7 ; 0xc16c1
+ add di, bx ; 01 df ; 0xc16c3
+ inc dx ; 42 ; 0xc16c5
+ mov al, byte [es:di+00ah] ; 26 8a 45 0a ; 0xc16c6
+ out DX, AL ; ee ; 0xc16ca
+ inc bx ; 43 ; 0xc16cb vgabios.c:1092
+ jmp short 016b3h ; eb e5 ; 0xc16cc
+ mov AL, strict byte 020h ; b0 20 ; 0xc16ce vgabios.c:1095
+ mov dx, 003c0h ; ba c0 03 ; 0xc16d0
+ out DX, AL ; ee ; 0xc16d3
+ mov dx, word [bp-018h] ; 8b 56 e8 ; 0xc16d4 vgabios.c:1096
+ add dx, strict byte 00006h ; 83 c2 06 ; 0xc16d7
+ in AL, DX ; ec ; 0xc16da
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc16db
+ cmp byte [bp-00eh], 000h ; 80 7e f2 00 ; 0xc16dd vgabios.c:1098
+ jne short 01741h ; 75 5e ; 0xc16e1
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc16e3 vgabios.c:1100
+ xor bh, bh ; 30 ff ; 0xc16e6
+ mov CL, strict byte 003h ; b1 03 ; 0xc16e8
+ sal bx, CL ; d3 e3 ; 0xc16ea
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc16ec
+ jne short 01705h ; 75 12 ; 0xc16f1
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc16f3 vgabios.c:1102
+ mov cx, 04000h ; b9 00 40 ; 0xc16f7
+ mov ax, 00720h ; b8 20 07 ; 0xc16fa
+ xor di, di ; 31 ff ; 0xc16fd
+ jcxz 01703h ; e3 02 ; 0xc16ff
+ rep stosw ; f3 ab ; 0xc1701
+ jmp short 01741h ; eb 3c ; 0xc1703 vgabios.c:1104
+ cmp byte [bp-00ch], 00dh ; 80 7e f4 0d ; 0xc1705 vgabios.c:1106
+ jnc short 0171ch ; 73 11 ; 0xc1709
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc170b vgabios.c:1108
+ mov cx, 04000h ; b9 00 40 ; 0xc170f
+ xor ax, ax ; 31 c0 ; 0xc1712
+ xor di, di ; 31 ff ; 0xc1714
+ jcxz 0171ah ; e3 02 ; 0xc1716
+ rep stosw ; f3 ab ; 0xc1718
+ jmp short 01741h ; eb 25 ; 0xc171a vgabios.c:1110
+ mov AL, strict byte 002h ; b0 02 ; 0xc171c vgabios.c:1112
+ mov dx, 003c4h ; ba c4 03 ; 0xc171e
+ out DX, AL ; ee ; 0xc1721
+ mov dx, 003c5h ; ba c5 03 ; 0xc1722 vgabios.c:1113
+ in AL, DX ; ec ; 0xc1725
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc1726
+ mov word [bp-022h], ax ; 89 46 de ; 0xc1728
+ mov AL, strict byte 00fh ; b0 0f ; 0xc172b vgabios.c:1114
+ out DX, AL ; ee ; 0xc172d
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc172e vgabios.c:1115
+ mov cx, 08000h ; b9 00 80 ; 0xc1732
+ xor ax, ax ; 31 c0 ; 0xc1735
+ xor di, di ; 31 ff ; 0xc1737
+ jcxz 0173dh ; e3 02 ; 0xc1739
+ rep stosw ; f3 ab ; 0xc173b
+ mov al, byte [bp-022h] ; 8a 46 de ; 0xc173d vgabios.c:1116
+ out DX, AL ; ee ; 0xc1740
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc1741 vgabios.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1744
+ mov es, ax ; 8e c0 ; 0xc1747
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1749
+ mov byte [es:bx], al ; 26 88 07 ; 0xc174c
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc174f vgabios.c:1123
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc1752
+ xor ah, ah ; 30 e4 ; 0xc1755
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1757 vgabios.c:62
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc175a
+ mov es, dx ; 8e c2 ; 0xc175d
+ mov word [es:bx], ax ; 26 89 07 ; 0xc175f
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1762 vgabios.c:60
+ mov ax, word [es:si+003h] ; 26 8b 44 03 ; 0xc1765
+ mov bx, strict word 0004ch ; bb 4c 00 ; 0xc1769 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc176c
+ mov word [es:bx], ax ; 26 89 07 ; 0xc176e
+ mov bx, strict word 00063h ; bb 63 00 ; 0xc1771 vgabios.c:62
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1774
+ mov word [es:bx], ax ; 26 89 07 ; 0xc1777
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc177a vgabios.c:50
+ mov al, byte [es:si+001h] ; 26 8a 44 01 ; 0xc177d
+ mov bx, 00084h ; bb 84 00 ; 0xc1781 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc1784
+ mov byte [es:bx], al ; 26 88 07 ; 0xc1786
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1789 vgabios.c:1127
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc178c
+ xor ah, ah ; 30 e4 ; 0xc1790
+ mov bx, 00085h ; bb 85 00 ; 0xc1792 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc1795
+ mov word [es:bx], ax ; 26 89 07 ; 0xc1797
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc179a vgabios.c:1128
+ or AL, strict byte 060h ; 0c 60 ; 0xc179d
+ mov bx, 00087h ; bb 87 00 ; 0xc179f vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc17a2
+ mov bx, 00088h ; bb 88 00 ; 0xc17a5 vgabios.c:52
+ mov byte [es:bx], 0f9h ; 26 c6 07 f9 ; 0xc17a8
+ mov bx, 0008ah ; bb 8a 00 ; 0xc17ac vgabios.c:52
+ mov byte [es:bx], 008h ; 26 c6 07 08 ; 0xc17af
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc17b3 vgabios.c:1134
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc17b6
+ jnbe short 017e1h ; 77 27 ; 0xc17b8
+ mov bl, al ; 88 c3 ; 0xc17ba vgabios.c:1136
+ xor bh, bh ; 30 ff ; 0xc17bc
+ mov al, byte [bx+07dddh] ; 8a 87 dd 7d ; 0xc17be vgabios.c:50
+ mov bx, strict word 00065h ; bb 65 00 ; 0xc17c2 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc17c5
+ cmp byte [bp-00ch], 006h ; 80 7e f4 06 ; 0xc17c8 vgabios.c:1137
+ jne short 017d3h ; 75 05 ; 0xc17cc
+ mov ax, strict word 0003fh ; b8 3f 00 ; 0xc17ce
+ jmp short 017d6h ; eb 03 ; 0xc17d1
+ mov ax, strict word 00030h ; b8 30 00 ; 0xc17d3
+ mov bx, strict word 00066h ; bb 66 00 ; 0xc17d6 vgabios.c:52
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc17d9
+ mov es, dx ; 8e c2 ; 0xc17dc
+ mov byte [es:bx], al ; 26 88 07 ; 0xc17de
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc17e1 vgabios.c:1141
+ xor bh, bh ; 30 ff ; 0xc17e4
+ mov CL, strict byte 003h ; b1 03 ; 0xc17e6
+ sal bx, CL ; d3 e3 ; 0xc17e8
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc17ea
+ jne short 017fah ; 75 09 ; 0xc17ef
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc17f1 vgabios.c:1143
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc17f4
+ call 011d3h ; e8 d9 f9 ; 0xc17f7
+ xor bx, bx ; 31 db ; 0xc17fa vgabios.c:1148
+ jmp short 01803h ; eb 05 ; 0xc17fc
+ cmp bx, strict byte 00008h ; 83 fb 08 ; 0xc17fe
+ jnc short 0180fh ; 73 0c ; 0xc1801
+ mov al, bl ; 88 d8 ; 0xc1803 vgabios.c:1149
+ xor ah, ah ; 30 e4 ; 0xc1805
+ xor dx, dx ; 31 d2 ; 0xc1807
+ call 012cfh ; e8 c3 fa ; 0xc1809
+ inc bx ; 43 ; 0xc180c
+ jmp short 017feh ; eb ef ; 0xc180d
+ xor ax, ax ; 31 c0 ; 0xc180f vgabios.c:1152
+ call 0135ch ; e8 48 fb ; 0xc1811
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc1814 vgabios.c:1155
+ xor bh, bh ; 30 ff ; 0xc1817
+ mov CL, strict byte 003h ; b1 03 ; 0xc1819
+ sal bx, CL ; d3 e3 ; 0xc181b
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc181d
+ jne short 01892h ; 75 6e ; 0xc1822
+ les bx, [bp-014h] ; c4 5e ec ; 0xc1824 vgabios.c:1157
+ mov bx, word [es:bx+008h] ; 26 8b 5f 08 ; 0xc1827
+ mov word [bp-01eh], bx ; 89 5e e2 ; 0xc182b
+ mov bx, word [bp-014h] ; 8b 5e ec ; 0xc182e
+ mov ax, word [es:bx+00ah] ; 26 8b 47 0a ; 0xc1831
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1835
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1838 vgabios.c:1159
+ mov bl, byte [es:si+002h] ; 26 8a 5c 02 ; 0xc183b
+ cmp bl, 00eh ; 80 fb 0e ; 0xc183f
+ je short 01865h ; 74 21 ; 0xc1842
+ cmp bl, 008h ; 80 fb 08 ; 0xc1844
+ jne short 01895h ; 75 4c ; 0xc1847
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1849 vgabios.c:1161
+ mov al, byte [es:si+002h] ; 26 8a 44 02 ; 0xc184c
+ xor ah, ah ; 30 e4 ; 0xc1850
+ push ax ; 50 ; 0xc1852
+ xor al, al ; 30 c0 ; 0xc1853
+ push ax ; 50 ; 0xc1855
+ push ax ; 50 ; 0xc1856
+ mov cx, 00100h ; b9 00 01 ; 0xc1857
+ mov bx, 0556ch ; bb 6c 55 ; 0xc185a
+ mov dx, 0c000h ; ba 00 c0 ; 0xc185d
+ call 02e8ch ; e8 29 16 ; 0xc1860
+ jmp short 018bah ; eb 55 ; 0xc1863 vgabios.c:1162
+ mov al, bl ; 88 d8 ; 0xc1865 vgabios.c:1164
+ xor ah, ah ; 30 e4 ; 0xc1867
+ push ax ; 50 ; 0xc1869
+ xor al, bl ; 30 d8 ; 0xc186a
+ push ax ; 50 ; 0xc186c
+ xor al, al ; 30 c0 ; 0xc186d
+ push ax ; 50 ; 0xc186f
+ mov cx, 00100h ; b9 00 01 ; 0xc1870
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc1873
+ mov dx, 0c000h ; ba 00 c0 ; 0xc1876
+ call 02e8ch ; e8 10 16 ; 0xc1879
+ cmp byte [bp-00ch], 007h ; 80 7e f4 07 ; 0xc187c vgabios.c:1165
+ jne short 018bah ; 75 38 ; 0xc1880
+ mov cx, strict word 0000eh ; b9 0e 00 ; 0xc1882 vgabios.c:1166
+ xor bx, bx ; 31 db ; 0xc1885
+ mov dx, 07b6ch ; ba 6c 7b ; 0xc1887
+ mov ax, 0c000h ; b8 00 c0 ; 0xc188a
+ call 02e14h ; e8 84 15 ; 0xc188d
+ jmp short 018bah ; eb 28 ; 0xc1890 vgabios.c:1167
+ jmp near 0191bh ; e9 86 00 ; 0xc1892
+ mov al, bl ; 88 d8 ; 0xc1895 vgabios.c:1169
+ xor ah, ah ; 30 e4 ; 0xc1897
+ push ax ; 50 ; 0xc1899
+ xor al, bl ; 30 d8 ; 0xc189a
+ push ax ; 50 ; 0xc189c
+ xor al, al ; 30 c0 ; 0xc189d
+ push ax ; 50 ; 0xc189f
+ mov cx, 00100h ; b9 00 01 ; 0xc18a0
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc18a3
+ mov dx, 0c000h ; ba 00 c0 ; 0xc18a6
+ call 02e8ch ; e8 e0 15 ; 0xc18a9
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc18ac vgabios.c:1170
+ xor bx, bx ; 31 db ; 0xc18af
+ mov dx, 07c99h ; ba 99 7c ; 0xc18b1
+ mov ax, 0c000h ; b8 00 c0 ; 0xc18b4
+ call 02e14h ; e8 5a 15 ; 0xc18b7
+ cmp word [bp-01ch], strict byte 00000h ; 83 7e e4 00 ; 0xc18ba vgabios.c:1172
+ jne short 018c6h ; 75 06 ; 0xc18be
+ cmp word [bp-01eh], strict byte 00000h ; 83 7e e2 00 ; 0xc18c0
+ je short 01913h ; 74 4d ; 0xc18c4
+ xor bx, bx ; 31 db ; 0xc18c6 vgabios.c:1177
+ les di, [bp-01eh] ; c4 7e e2 ; 0xc18c8 vgabios.c:1179
+ add di, bx ; 01 df ; 0xc18cb
+ mov al, byte [es:di+00bh] ; 26 8a 45 0b ; 0xc18cd
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc18d1
+ je short 018ddh ; 74 08 ; 0xc18d3
+ cmp al, byte [bp-00ch] ; 3a 46 f4 ; 0xc18d5 vgabios.c:1181
+ je short 018ddh ; 74 03 ; 0xc18d8
+ inc bx ; 43 ; 0xc18da vgabios.c:1183
+ jmp short 018c8h ; eb eb ; 0xc18db vgabios.c:1184
+ mov es, [bp-01ch] ; 8e 46 e4 ; 0xc18dd vgabios.c:1186
+ add bx, word [bp-01eh] ; 03 5e e2 ; 0xc18e0
+ mov al, byte [es:bx+00bh] ; 26 8a 47 0b ; 0xc18e3
+ cmp al, byte [bp-00ch] ; 3a 46 f4 ; 0xc18e7
+ jne short 01913h ; 75 27 ; 0xc18ea
+ mov bx, word [bp-01eh] ; 8b 5e e2 ; 0xc18ec vgabios.c:1191
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc18ef
+ xor ah, ah ; 30 e4 ; 0xc18f2
+ push ax ; 50 ; 0xc18f4
+ mov al, byte [es:bx+001h] ; 26 8a 47 01 ; 0xc18f5
+ push ax ; 50 ; 0xc18f9
+ push word [es:bx+004h] ; 26 ff 77 04 ; 0xc18fa
+ mov cx, word [es:bx+002h] ; 26 8b 4f 02 ; 0xc18fe
+ mov bx, word [es:bx+006h] ; 26 8b 5f 06 ; 0xc1902
+ mov di, word [bp-01eh] ; 8b 7e e2 ; 0xc1906
+ mov dx, word [es:di+008h] ; 26 8b 55 08 ; 0xc1909
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc190d
+ call 02e8ch ; e8 79 15 ; 0xc1910
+ xor bl, bl ; 30 db ; 0xc1913 vgabios.c:1195
+ mov AL, strict byte 003h ; b0 03 ; 0xc1915
+ mov AH, strict byte 011h ; b4 11 ; 0xc1917
+ int 06dh ; cd 6d ; 0xc1919
+ mov bx, 0596ch ; bb 6c 59 ; 0xc191b vgabios.c:1199
+ mov cx, ds ; 8c d9 ; 0xc191e
+ mov ax, strict word 0001fh ; b8 1f 00 ; 0xc1920
+ call 009f0h ; e8 ca f0 ; 0xc1923
+ mov es, [bp-01ah] ; 8e 46 e6 ; 0xc1926 vgabios.c:1201
+ mov dl, byte [es:si+002h] ; 26 8a 54 02 ; 0xc1929
+ cmp dl, 010h ; 80 fa 10 ; 0xc192d
+ je short 0194eh ; 74 1c ; 0xc1930
+ cmp dl, 00eh ; 80 fa 0e ; 0xc1932
+ je short 01949h ; 74 12 ; 0xc1935
+ cmp dl, 008h ; 80 fa 08 ; 0xc1937
+ jne short 01953h ; 75 17 ; 0xc193a
+ mov bx, 0556ch ; bb 6c 55 ; 0xc193c vgabios.c:1203
+ mov cx, ds ; 8c d9 ; 0xc193f
+ mov ax, strict word 00043h ; b8 43 00 ; 0xc1941
+ call 009f0h ; e8 a9 f0 ; 0xc1944
+ jmp short 01953h ; eb 0a ; 0xc1947 vgabios.c:1204
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc1949 vgabios.c:1206
+ jmp short 0193fh ; eb f1 ; 0xc194c
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc194e vgabios.c:1209
+ jmp short 0193fh ; eb ec ; 0xc1951
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc1953 vgabios.c:1212
+ pop di ; 5f ; 0xc1956
+ pop si ; 5e ; 0xc1957
+ pop dx ; 5a ; 0xc1958
+ pop cx ; 59 ; 0xc1959
+ pop bx ; 5b ; 0xc195a
+ pop bp ; 5d ; 0xc195b
+ retn ; c3 ; 0xc195c
+ ; disGetNextSymbol 0xc195d LB 0x2c07 -> off=0x0 cb=000000000000008e uValue=00000000000c195d 'vgamem_copy_pl4'
+vgamem_copy_pl4: ; 0xc195d LB 0x8e
+ push bp ; 55 ; 0xc195d vgabios.c:1215
+ mov bp, sp ; 89 e5 ; 0xc195e
+ push si ; 56 ; 0xc1960
+ push di ; 57 ; 0xc1961
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc1962
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc1965
+ mov al, dl ; 88 d0 ; 0xc1968
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc196a
+ mov byte [bp-006h], cl ; 88 4e fa ; 0xc196d
+ xor ah, ah ; 30 e4 ; 0xc1970 vgabios.c:1221
+ mov dl, byte [bp+006h] ; 8a 56 06 ; 0xc1972
+ xor dh, dh ; 30 f6 ; 0xc1975
+ mov cx, dx ; 89 d1 ; 0xc1977
+ imul dx ; f7 ea ; 0xc1979
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc197b
+ xor dh, dh ; 30 f6 ; 0xc197e
+ mov si, dx ; 89 d6 ; 0xc1980
+ imul dx ; f7 ea ; 0xc1982
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc1984
+ xor dh, dh ; 30 f6 ; 0xc1987
+ mov bx, dx ; 89 d3 ; 0xc1989
+ add ax, dx ; 01 d0 ; 0xc198b
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc198d
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1990 vgabios.c:1222
+ xor ah, ah ; 30 e4 ; 0xc1993
+ imul cx ; f7 e9 ; 0xc1995
+ imul si ; f7 ee ; 0xc1997
+ add ax, bx ; 01 d8 ; 0xc1999
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc199b
+ mov ax, 00105h ; b8 05 01 ; 0xc199e vgabios.c:1223
+ mov dx, 003ceh ; ba ce 03 ; 0xc19a1
+ out DX, ax ; ef ; 0xc19a4
+ xor bl, bl ; 30 db ; 0xc19a5 vgabios.c:1224
+ cmp bl, byte [bp+006h] ; 3a 5e 06 ; 0xc19a7
+ jnc short 019dbh ; 73 2f ; 0xc19aa
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc19ac vgabios.c:1226
+ xor ah, ah ; 30 e4 ; 0xc19af
+ mov cx, ax ; 89 c1 ; 0xc19b1
+ mov al, bl ; 88 d8 ; 0xc19b3
+ mov dx, ax ; 89 c2 ; 0xc19b5
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc19b7
+ mov si, ax ; 89 c6 ; 0xc19ba
+ mov ax, dx ; 89 d0 ; 0xc19bc
+ imul si ; f7 ee ; 0xc19be
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc19c0
+ add si, ax ; 01 c6 ; 0xc19c3
+ mov di, word [bp-00ch] ; 8b 7e f4 ; 0xc19c5
+ add di, ax ; 01 c7 ; 0xc19c8
+ mov dx, 0a000h ; ba 00 a0 ; 0xc19ca
+ mov es, dx ; 8e c2 ; 0xc19cd
+ jcxz 019d7h ; e3 06 ; 0xc19cf
+ push DS ; 1e ; 0xc19d1
+ mov ds, dx ; 8e da ; 0xc19d2
+ rep movsb ; f3 a4 ; 0xc19d4
+ pop DS ; 1f ; 0xc19d6
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc19d7 vgabios.c:1227
+ jmp short 019a7h ; eb cc ; 0xc19d9
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc19db vgabios.c:1228
+ mov dx, 003ceh ; ba ce 03 ; 0xc19de
+ out DX, ax ; ef ; 0xc19e1
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc19e2 vgabios.c:1229
+ pop di ; 5f ; 0xc19e5
+ pop si ; 5e ; 0xc19e6
+ pop bp ; 5d ; 0xc19e7
+ retn 00004h ; c2 04 00 ; 0xc19e8
+ ; disGetNextSymbol 0xc19eb LB 0x2b79 -> off=0x0 cb=000000000000007b uValue=00000000000c19eb 'vgamem_fill_pl4'
+vgamem_fill_pl4: ; 0xc19eb LB 0x7b
+ push bp ; 55 ; 0xc19eb vgabios.c:1232
+ mov bp, sp ; 89 e5 ; 0xc19ec
+ push si ; 56 ; 0xc19ee
+ push di ; 57 ; 0xc19ef
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc19f0
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc19f3
+ mov al, dl ; 88 d0 ; 0xc19f6
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc19f8
+ mov bh, cl ; 88 cf ; 0xc19fb
+ xor ah, ah ; 30 e4 ; 0xc19fd vgabios.c:1238
+ mov dx, ax ; 89 c2 ; 0xc19ff
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1a01
+ mov cx, ax ; 89 c1 ; 0xc1a04
+ mov ax, dx ; 89 d0 ; 0xc1a06
+ imul cx ; f7 e9 ; 0xc1a08
+ mov dl, bh ; 88 fa ; 0xc1a0a
+ xor dh, dh ; 30 f6 ; 0xc1a0c
+ imul dx ; f7 ea ; 0xc1a0e
+ mov dx, ax ; 89 c2 ; 0xc1a10
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1a12
+ xor ah, ah ; 30 e4 ; 0xc1a15
+ add dx, ax ; 01 c2 ; 0xc1a17
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc1a19
+ mov ax, 00205h ; b8 05 02 ; 0xc1a1c vgabios.c:1239
+ mov dx, 003ceh ; ba ce 03 ; 0xc1a1f
+ out DX, ax ; ef ; 0xc1a22
+ xor bl, bl ; 30 db ; 0xc1a23 vgabios.c:1240
+ cmp bl, byte [bp+004h] ; 3a 5e 04 ; 0xc1a25
+ jnc short 01a56h ; 73 2c ; 0xc1a28
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc1a2a vgabios.c:1242
+ xor ch, ch ; 30 ed ; 0xc1a2d
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1a2f
+ xor ah, ah ; 30 e4 ; 0xc1a32
+ mov si, ax ; 89 c6 ; 0xc1a34
+ mov al, bl ; 88 d8 ; 0xc1a36
+ mov dx, ax ; 89 c2 ; 0xc1a38
+ mov al, bh ; 88 f8 ; 0xc1a3a
+ mov di, ax ; 89 c7 ; 0xc1a3c
+ mov ax, dx ; 89 d0 ; 0xc1a3e
+ imul di ; f7 ef ; 0xc1a40
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc1a42
+ add di, ax ; 01 c7 ; 0xc1a45
+ mov ax, si ; 89 f0 ; 0xc1a47
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1a49
+ mov es, dx ; 8e c2 ; 0xc1a4c
+ jcxz 01a52h ; e3 02 ; 0xc1a4e
+ rep stosb ; f3 aa ; 0xc1a50
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc1a52 vgabios.c:1243
+ jmp short 01a25h ; eb cf ; 0xc1a54
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1a56 vgabios.c:1244
+ mov dx, 003ceh ; ba ce 03 ; 0xc1a59
+ out DX, ax ; ef ; 0xc1a5c
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1a5d vgabios.c:1245
+ pop di ; 5f ; 0xc1a60
+ pop si ; 5e ; 0xc1a61
+ pop bp ; 5d ; 0xc1a62
+ retn 00004h ; c2 04 00 ; 0xc1a63
+ ; disGetNextSymbol 0xc1a66 LB 0x2afe -> off=0x0 cb=00000000000000b6 uValue=00000000000c1a66 'vgamem_copy_cga'
+vgamem_copy_cga: ; 0xc1a66 LB 0xb6
+ push bp ; 55 ; 0xc1a66 vgabios.c:1248
+ mov bp, sp ; 89 e5 ; 0xc1a67
+ push si ; 56 ; 0xc1a69
+ push di ; 57 ; 0xc1a6a
+ sub sp, strict byte 0000eh ; 83 ec 0e ; 0xc1a6b
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc1a6e
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc1a71
+ mov byte [bp-00ah], cl ; 88 4e f6 ; 0xc1a74
+ mov al, dl ; 88 d0 ; 0xc1a77 vgabios.c:1254
+ xor ah, ah ; 30 e4 ; 0xc1a79
+ mov bx, ax ; 89 c3 ; 0xc1a7b
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1a7d
+ mov si, ax ; 89 c6 ; 0xc1a80
+ mov ax, bx ; 89 d8 ; 0xc1a82
+ imul si ; f7 ee ; 0xc1a84
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc1a86
+ mov di, bx ; 89 df ; 0xc1a89
+ imul bx ; f7 eb ; 0xc1a8b
+ mov dx, ax ; 89 c2 ; 0xc1a8d
+ sar dx, 1 ; d1 fa ; 0xc1a8f
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1a91
+ xor ah, ah ; 30 e4 ; 0xc1a94
+ mov bx, ax ; 89 c3 ; 0xc1a96
+ add dx, ax ; 01 c2 ; 0xc1a98
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc1a9a
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1a9d vgabios.c:1255
+ imul si ; f7 ee ; 0xc1aa0
+ imul di ; f7 ef ; 0xc1aa2
+ sar ax, 1 ; d1 f8 ; 0xc1aa4
+ add ax, bx ; 01 d8 ; 0xc1aa6
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc1aa8
+ mov byte [bp-006h], bh ; 88 7e fa ; 0xc1aab vgabios.c:1256
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1aae
+ xor ah, ah ; 30 e4 ; 0xc1ab1
+ cwd ; 99 ; 0xc1ab3
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2 ; 0xc1ab4
+ sar ax, 1 ; d1 f8 ; 0xc1ab6
+ mov bx, ax ; 89 c3 ; 0xc1ab8
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1aba
+ xor ah, ah ; 30 e4 ; 0xc1abd
+ cmp ax, bx ; 39 d8 ; 0xc1abf
+ jnl short 01b13h ; 7d 50 ; 0xc1ac1
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc1ac3 vgabios.c:1258
+ xor bh, bh ; 30 ff ; 0xc1ac6
+ mov word [bp-012h], bx ; 89 5e ee ; 0xc1ac8
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc1acb
+ imul bx ; f7 eb ; 0xc1ace
+ mov bx, ax ; 89 c3 ; 0xc1ad0
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc1ad2
+ add si, ax ; 01 c6 ; 0xc1ad5
+ mov di, word [bp-010h] ; 8b 7e f0 ; 0xc1ad7
+ add di, ax ; 01 c7 ; 0xc1ada
+ mov cx, word [bp-012h] ; 8b 4e ee ; 0xc1adc
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1adf
+ mov es, dx ; 8e c2 ; 0xc1ae2
+ jcxz 01aech ; e3 06 ; 0xc1ae4
+ push DS ; 1e ; 0xc1ae6
+ mov ds, dx ; 8e da ; 0xc1ae7
+ rep movsb ; f3 a4 ; 0xc1ae9
+ pop DS ; 1f ; 0xc1aeb
+ mov si, word [bp-00eh] ; 8b 76 f2 ; 0xc1aec vgabios.c:1259
+ add si, 02000h ; 81 c6 00 20 ; 0xc1aef
+ add si, bx ; 01 de ; 0xc1af3
+ mov di, word [bp-010h] ; 8b 7e f0 ; 0xc1af5
+ add di, 02000h ; 81 c7 00 20 ; 0xc1af8
+ add di, bx ; 01 df ; 0xc1afc
+ mov cx, word [bp-012h] ; 8b 4e ee ; 0xc1afe
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1b01
+ mov es, dx ; 8e c2 ; 0xc1b04
+ jcxz 01b0eh ; e3 06 ; 0xc1b06
+ push DS ; 1e ; 0xc1b08
+ mov ds, dx ; 8e da ; 0xc1b09
+ rep movsb ; f3 a4 ; 0xc1b0b
+ pop DS ; 1f ; 0xc1b0d
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1b0e vgabios.c:1260
+ jmp short 01aaeh ; eb 9b ; 0xc1b11
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1b13 vgabios.c:1261
+ pop di ; 5f ; 0xc1b16
+ pop si ; 5e ; 0xc1b17
+ pop bp ; 5d ; 0xc1b18
+ retn 00004h ; c2 04 00 ; 0xc1b19
+ ; disGetNextSymbol 0xc1b1c LB 0x2a48 -> off=0x0 cb=0000000000000094 uValue=00000000000c1b1c 'vgamem_fill_cga'
+vgamem_fill_cga: ; 0xc1b1c LB 0x94
+ push bp ; 55 ; 0xc1b1c vgabios.c:1264
+ mov bp, sp ; 89 e5 ; 0xc1b1d
+ push si ; 56 ; 0xc1b1f
+ push di ; 57 ; 0xc1b20
+ sub sp, strict byte 0000ch ; 83 ec 0c ; 0xc1b21
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc1b24
+ mov al, dl ; 88 d0 ; 0xc1b27
+ mov byte [bp-00ch], bl ; 88 5e f4 ; 0xc1b29
+ mov byte [bp-008h], cl ; 88 4e f8 ; 0xc1b2c
+ xor ah, ah ; 30 e4 ; 0xc1b2f vgabios.c:1270
+ mov dx, ax ; 89 c2 ; 0xc1b31
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1b33
+ mov bx, ax ; 89 c3 ; 0xc1b36
+ mov ax, dx ; 89 d0 ; 0xc1b38
+ imul bx ; f7 eb ; 0xc1b3a
+ mov dl, cl ; 88 ca ; 0xc1b3c
+ xor dh, dh ; 30 f6 ; 0xc1b3e
+ imul dx ; f7 ea ; 0xc1b40
+ mov dx, ax ; 89 c2 ; 0xc1b42
+ sar dx, 1 ; d1 fa ; 0xc1b44
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1b46
+ xor ah, ah ; 30 e4 ; 0xc1b49
+ add dx, ax ; 01 c2 ; 0xc1b4b
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc1b4d
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc1b50 vgabios.c:1271
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1b53
+ xor ah, ah ; 30 e4 ; 0xc1b56
+ cwd ; 99 ; 0xc1b58
+ db 02bh, 0c2h
+ ; sub ax, dx ; 2b c2 ; 0xc1b59
+ sar ax, 1 ; d1 f8 ; 0xc1b5b
+ mov dx, ax ; 89 c2 ; 0xc1b5d
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1b5f
+ xor ah, ah ; 30 e4 ; 0xc1b62
+ cmp ax, dx ; 39 d0 ; 0xc1b64
+ jnl short 01ba7h ; 7d 3f ; 0xc1b66
+ mov bl, byte [bp-00ch] ; 8a 5e f4 ; 0xc1b68 vgabios.c:1273
+ xor bh, bh ; 30 ff ; 0xc1b6b
+ mov dl, byte [bp+006h] ; 8a 56 06 ; 0xc1b6d
+ xor dh, dh ; 30 f6 ; 0xc1b70
+ mov si, dx ; 89 d6 ; 0xc1b72
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc1b74
+ imul dx ; f7 ea ; 0xc1b77
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc1b79
+ mov di, word [bp-00eh] ; 8b 7e f2 ; 0xc1b7c
+ add di, ax ; 01 c7 ; 0xc1b7f
+ mov cx, bx ; 89 d9 ; 0xc1b81
+ mov ax, si ; 89 f0 ; 0xc1b83
+ mov dx, 0b800h ; ba 00 b8 ; 0xc1b85
+ mov es, dx ; 8e c2 ; 0xc1b88
+ jcxz 01b8eh ; e3 02 ; 0xc1b8a
+ rep stosb ; f3 aa ; 0xc1b8c
+ mov di, word [bp-00eh] ; 8b 7e f2 ; 0xc1b8e vgabios.c:1274
+ add di, 02000h ; 81 c7 00 20 ; 0xc1b91
+ add di, word [bp-010h] ; 03 7e f0 ; 0xc1b95
+ mov cx, bx ; 89 d9 ; 0xc1b98
+ mov ax, si ; 89 f0 ; 0xc1b9a
+ mov es, dx ; 8e c2 ; 0xc1b9c
+ jcxz 01ba2h ; e3 02 ; 0xc1b9e
+ rep stosb ; f3 aa ; 0xc1ba0
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1ba2 vgabios.c:1275
+ jmp short 01b53h ; eb ac ; 0xc1ba5
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1ba7 vgabios.c:1276
+ pop di ; 5f ; 0xc1baa
+ pop si ; 5e ; 0xc1bab
+ pop bp ; 5d ; 0xc1bac
+ retn 00004h ; c2 04 00 ; 0xc1bad
+ ; disGetNextSymbol 0xc1bb0 LB 0x29b4 -> off=0x0 cb=0000000000000083 uValue=00000000000c1bb0 'vgamem_copy_linear'
+vgamem_copy_linear: ; 0xc1bb0 LB 0x83
+ push bp ; 55 ; 0xc1bb0 vgabios.c:1279
+ mov bp, sp ; 89 e5 ; 0xc1bb1
+ push si ; 56 ; 0xc1bb3
+ push di ; 57 ; 0xc1bb4
+ sub sp, strict byte 0000ch ; 83 ec 0c ; 0xc1bb5
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc1bb8
+ mov al, dl ; 88 d0 ; 0xc1bbb
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc1bbd
+ mov bx, cx ; 89 cb ; 0xc1bc0
+ xor ah, ah ; 30 e4 ; 0xc1bc2 vgabios.c:1285
+ mov si, ax ; 89 c6 ; 0xc1bc4
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1bc6
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc1bc9
+ mov ax, si ; 89 f0 ; 0xc1bcc
+ imul word [bp-010h] ; f7 6e f0 ; 0xc1bce
+ mul word [bp+004h] ; f7 66 04 ; 0xc1bd1
+ mov si, ax ; 89 c6 ; 0xc1bd4
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1bd6
+ xor ah, ah ; 30 e4 ; 0xc1bd9
+ mov di, ax ; 89 c7 ; 0xc1bdb
+ add si, ax ; 01 c6 ; 0xc1bdd
+ mov CL, strict byte 003h ; b1 03 ; 0xc1bdf
+ sal si, CL ; d3 e6 ; 0xc1be1
+ mov word [bp-00ch], si ; 89 76 f4 ; 0xc1be3
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1be6 vgabios.c:1286
+ imul word [bp-010h] ; f7 6e f0 ; 0xc1be9
+ mul word [bp+004h] ; f7 66 04 ; 0xc1bec
+ add ax, di ; 01 f8 ; 0xc1bef
+ sal ax, CL ; d3 e0 ; 0xc1bf1
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc1bf3
+ sal bx, CL ; d3 e3 ; 0xc1bf6 vgabios.c:1287
+ sal word [bp+004h], CL ; d3 66 04 ; 0xc1bf8 vgabios.c:1288
+ mov byte [bp-006h], 000h ; c6 46 fa 00 ; 0xc1bfb vgabios.c:1289
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1bff
+ cmp al, byte [bp+006h] ; 3a 46 06 ; 0xc1c02
+ jnc short 01c2ah ; 73 23 ; 0xc1c05
+ xor ah, ah ; 30 e4 ; 0xc1c07 vgabios.c:1291
+ mul word [bp+004h] ; f7 66 04 ; 0xc1c09
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc1c0c
+ add si, ax ; 01 c6 ; 0xc1c0f
+ mov di, word [bp-00eh] ; 8b 7e f2 ; 0xc1c11
+ add di, ax ; 01 c7 ; 0xc1c14
+ mov cx, bx ; 89 d9 ; 0xc1c16
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1c18
+ mov es, dx ; 8e c2 ; 0xc1c1b
+ jcxz 01c25h ; e3 06 ; 0xc1c1d
+ push DS ; 1e ; 0xc1c1f
+ mov ds, dx ; 8e da ; 0xc1c20
+ rep movsb ; f3 a4 ; 0xc1c22
+ pop DS ; 1f ; 0xc1c24
+ inc byte [bp-006h] ; fe 46 fa ; 0xc1c25 vgabios.c:1292
+ jmp short 01bffh ; eb d5 ; 0xc1c28
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1c2a vgabios.c:1293
+ pop di ; 5f ; 0xc1c2d
+ pop si ; 5e ; 0xc1c2e
+ pop bp ; 5d ; 0xc1c2f
+ retn 00004h ; c2 04 00 ; 0xc1c30
+ ; disGetNextSymbol 0xc1c33 LB 0x2931 -> off=0x0 cb=000000000000006c uValue=00000000000c1c33 'vgamem_fill_linear'
+vgamem_fill_linear: ; 0xc1c33 LB 0x6c
+ push bp ; 55 ; 0xc1c33 vgabios.c:1296
+ mov bp, sp ; 89 e5 ; 0xc1c34
+ push si ; 56 ; 0xc1c36
+ push di ; 57 ; 0xc1c37
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc1c38
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc1c3b
+ mov al, dl ; 88 d0 ; 0xc1c3e
+ mov si, cx ; 89 ce ; 0xc1c40
+ xor ah, ah ; 30 e4 ; 0xc1c42 vgabios.c:1302
+ mov dx, ax ; 89 c2 ; 0xc1c44
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1c46
+ mov di, ax ; 89 c7 ; 0xc1c49
+ mov ax, dx ; 89 d0 ; 0xc1c4b
+ imul di ; f7 ef ; 0xc1c4d
+ mul cx ; f7 e1 ; 0xc1c4f
+ mov dx, ax ; 89 c2 ; 0xc1c51
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1c53
+ xor ah, ah ; 30 e4 ; 0xc1c56
+ add ax, dx ; 01 d0 ; 0xc1c58
+ mov CL, strict byte 003h ; b1 03 ; 0xc1c5a
+ sal ax, CL ; d3 e0 ; 0xc1c5c
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc1c5e
+ sal bx, CL ; d3 e3 ; 0xc1c61 vgabios.c:1303
+ sal si, CL ; d3 e6 ; 0xc1c63 vgabios.c:1304
+ mov byte [bp-008h], 000h ; c6 46 f8 00 ; 0xc1c65 vgabios.c:1305
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1c69
+ cmp al, byte [bp+004h] ; 3a 46 04 ; 0xc1c6c
+ jnc short 01c96h ; 73 25 ; 0xc1c6f
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc1c71 vgabios.c:1307
+ xor ah, ah ; 30 e4 ; 0xc1c74
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc1c76
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1c79
+ mul si ; f7 e6 ; 0xc1c7c
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc1c7e
+ add di, ax ; 01 c7 ; 0xc1c81
+ mov cx, bx ; 89 d9 ; 0xc1c83
+ mov ax, word [bp-00ch] ; 8b 46 f4 ; 0xc1c85
+ mov dx, 0a000h ; ba 00 a0 ; 0xc1c88
+ mov es, dx ; 8e c2 ; 0xc1c8b
+ jcxz 01c91h ; e3 02 ; 0xc1c8d
+ rep stosb ; f3 aa ; 0xc1c8f
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc1c91 vgabios.c:1308
+ jmp short 01c69h ; eb d3 ; 0xc1c94
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc1c96 vgabios.c:1309
+ pop di ; 5f ; 0xc1c99
+ pop si ; 5e ; 0xc1c9a
+ pop bp ; 5d ; 0xc1c9b
+ retn 00004h ; c2 04 00 ; 0xc1c9c
+ ; disGetNextSymbol 0xc1c9f LB 0x28c5 -> off=0x0 cb=00000000000006a3 uValue=00000000000c1c9f 'biosfn_scroll'
+biosfn_scroll: ; 0xc1c9f LB 0x6a3
+ push bp ; 55 ; 0xc1c9f vgabios.c:1312
+ mov bp, sp ; 89 e5 ; 0xc1ca0
+ push si ; 56 ; 0xc1ca2
+ push di ; 57 ; 0xc1ca3
+ sub sp, strict byte 00020h ; 83 ec 20 ; 0xc1ca4
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc1ca7
+ mov byte [bp-010h], dl ; 88 56 f0 ; 0xc1caa
+ mov byte [bp-00ch], bl ; 88 5e f4 ; 0xc1cad
+ mov byte [bp-008h], cl ; 88 4e f8 ; 0xc1cb0
+ mov ch, byte [bp+006h] ; 8a 6e 06 ; 0xc1cb3
+ cmp bl, byte [bp+004h] ; 3a 5e 04 ; 0xc1cb6 vgabios.c:1321
+ jnbe short 01cd6h ; 77 1b ; 0xc1cb9
+ cmp ch, cl ; 38 cd ; 0xc1cbb vgabios.c:1322
+ jc short 01cd6h ; 72 17 ; 0xc1cbd
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc1cbf vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1cc2
+ mov es, ax ; 8e c0 ; 0xc1cc5
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1cc7
+ xor ah, ah ; 30 e4 ; 0xc1cca vgabios.c:1326
+ call 03888h ; e8 b9 1b ; 0xc1ccc
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc1ccf
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc1cd2 vgabios.c:1327
+ jne short 01cd9h ; 75 03 ; 0xc1cd4
+ jmp near 02339h ; e9 60 06 ; 0xc1cd6
+ mov bx, 00084h ; bb 84 00 ; 0xc1cd9 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc1cdc
+ mov es, ax ; 8e c0 ; 0xc1cdf
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1ce1
+ xor ah, ah ; 30 e4 ; 0xc1ce4 vgabios.c:48
+ inc ax ; 40 ; 0xc1ce6
+ mov word [bp-024h], ax ; 89 46 dc ; 0xc1ce7
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc1cea vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc1ced
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc1cf0 vgabios.c:58
+ cmp byte [bp+008h], 0ffh ; 80 7e 08 ff ; 0xc1cf3 vgabios.c:1334
+ jne short 01d02h ; 75 09 ; 0xc1cf7
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc1cf9 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc1cfc
+ mov byte [bp+008h], al ; 88 46 08 ; 0xc1cff vgabios.c:48
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1d02 vgabios.c:1337
+ xor ah, ah ; 30 e4 ; 0xc1d05
+ cmp ax, word [bp-024h] ; 3b 46 dc ; 0xc1d07
+ jc short 01d14h ; 72 08 ; 0xc1d0a
+ mov al, byte [bp-024h] ; 8a 46 dc ; 0xc1d0c
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc1d0f
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc1d11
+ mov al, ch ; 88 e8 ; 0xc1d14 vgabios.c:1338
+ xor ah, ah ; 30 e4 ; 0xc1d16
+ cmp ax, word [bp-018h] ; 3b 46 e8 ; 0xc1d18
+ jc short 01d22h ; 72 05 ; 0xc1d1b
+ mov ch, byte [bp-018h] ; 8a 6e e8 ; 0xc1d1d
+ db 0feh, 0cdh
+ ; dec ch ; fe cd ; 0xc1d20
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1d22 vgabios.c:1339
+ xor ah, ah ; 30 e4 ; 0xc1d25
+ cmp ax, word [bp-024h] ; 3b 46 dc ; 0xc1d27
+ jbe short 01d2fh ; 76 03 ; 0xc1d2a
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc1d2c
+ mov al, ch ; 88 e8 ; 0xc1d2f vgabios.c:1340
+ sub al, byte [bp-008h] ; 2a 46 f8 ; 0xc1d31
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc1d34
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc1d36
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1d39 vgabios.c:1342
+ mov byte [bp-01eh], al ; 88 46 e2 ; 0xc1d3c
+ mov byte [bp-01dh], 000h ; c6 46 e3 00 ; 0xc1d3f
+ mov CL, strict byte 003h ; b1 03 ; 0xc1d43
+ mov bx, word [bp-01eh] ; 8b 5e e2 ; 0xc1d45
+ sal bx, CL ; d3 e3 ; 0xc1d48
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1d4a
+ dec ax ; 48 ; 0xc1d4d
+ mov word [bp-020h], ax ; 89 46 e0 ; 0xc1d4e
+ mov ax, word [bp-024h] ; 8b 46 dc ; 0xc1d51
+ dec ax ; 48 ; 0xc1d54
+ mov word [bp-022h], ax ; 89 46 de ; 0xc1d55
+ mov ax, word [bp-018h] ; 8b 46 e8 ; 0xc1d58
+ mul word [bp-024h] ; f7 66 dc ; 0xc1d5b
+ mov di, ax ; 89 c7 ; 0xc1d5e
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc1d60
+ jne short 01db1h ; 75 4a ; 0xc1d65
+ sal ax, 1 ; d1 e0 ; 0xc1d67 vgabios.c:1345
+ or AL, strict byte 0ffh ; 0c ff ; 0xc1d69
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc1d6b
+ xor dh, dh ; 30 f6 ; 0xc1d6e
+ inc ax ; 40 ; 0xc1d70
+ mul dx ; f7 e2 ; 0xc1d71
+ mov word [bp-01ch], ax ; 89 46 e4 ; 0xc1d73
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1d76 vgabios.c:1350
+ jne short 01db4h ; 75 38 ; 0xc1d7a
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1d7c
+ jne short 01db4h ; 75 32 ; 0xc1d80
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1d82
+ jne short 01db4h ; 75 2c ; 0xc1d86
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1d88
+ xor ah, ah ; 30 e4 ; 0xc1d8b
+ cmp ax, word [bp-022h] ; 3b 46 de ; 0xc1d8d
+ jne short 01db4h ; 75 22 ; 0xc1d90
+ mov al, ch ; 88 e8 ; 0xc1d92
+ cmp ax, word [bp-020h] ; 3b 46 e0 ; 0xc1d94
+ jne short 01db4h ; 75 1b ; 0xc1d97
+ mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc1d99 vgabios.c:1352
+ xor al, ch ; 30 e8 ; 0xc1d9c
+ add ax, strict word 00020h ; 05 20 00 ; 0xc1d9e
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1da1
+ mov cx, di ; 89 f9 ; 0xc1da5
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1da7
+ jcxz 01daeh ; e3 02 ; 0xc1daa
+ rep stosw ; f3 ab ; 0xc1dac
+ jmp near 02339h ; e9 88 05 ; 0xc1dae vgabios.c:1354
+ jmp near 01f3eh ; e9 8a 01 ; 0xc1db1
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1db4 vgabios.c:1356
+ jne short 01e1fh ; 75 65 ; 0xc1db8
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1dba vgabios.c:1357
+ xor ah, ah ; 30 e4 ; 0xc1dbd
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc1dbf
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc1dc2
+ xor dh, dh ; 30 f6 ; 0xc1dc5
+ cmp dx, word [bp-016h] ; 3b 56 ea ; 0xc1dc7
+ jc short 01e21h ; 72 55 ; 0xc1dca
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1dcc vgabios.c:1359
+ xor ah, ah ; 30 e4 ; 0xc1dcf
+ add ax, word [bp-016h] ; 03 46 ea ; 0xc1dd1
+ cmp ax, dx ; 39 d0 ; 0xc1dd4
+ jnbe short 01ddeh ; 77 06 ; 0xc1dd6
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1dd8
+ jne short 01e24h ; 75 46 ; 0xc1ddc
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1dde vgabios.c:1360
+ mov byte [bp-01ah], al ; 88 46 e6 ; 0xc1de1
+ xor al, al ; 30 c0 ; 0xc1de4
+ mov byte [bp-019h], al ; 88 46 e7 ; 0xc1de6
+ mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc1de9
+ mov si, ax ; 89 c6 ; 0xc1dec
+ add si, strict byte 00020h ; 83 c6 20 ; 0xc1dee
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1df1
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1df4
+ mov dx, ax ; 89 c2 ; 0xc1df7
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1df9
+ xor ah, ah ; 30 e4 ; 0xc1dfc
+ add ax, dx ; 01 d0 ; 0xc1dfe
+ sal ax, 1 ; d1 e0 ; 0xc1e00
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1e02
+ add di, ax ; 01 c7 ; 0xc1e05
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e07
+ xor bh, bh ; 30 ff ; 0xc1e0a
+ mov CL, strict byte 003h ; b1 03 ; 0xc1e0c
+ sal bx, CL ; d3 e3 ; 0xc1e0e
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc1e10
+ mov cx, word [bp-01ah] ; 8b 4e e6 ; 0xc1e14
+ mov ax, si ; 89 f0 ; 0xc1e17
+ jcxz 01e1dh ; e3 02 ; 0xc1e19
+ rep stosw ; f3 ab ; 0xc1e1b
+ jmp short 01e6dh ; eb 4e ; 0xc1e1d vgabios.c:1361
+ jmp short 01e73h ; eb 52 ; 0xc1e1f
+ jmp near 02339h ; e9 15 05 ; 0xc1e21
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc1e24 vgabios.c:1362
+ mov byte [bp-014h], dl ; 88 56 ec ; 0xc1e27
+ mov byte [bp-013h], dh ; 88 76 ed ; 0xc1e2a
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1e2d
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc1e30
+ mov byte [bp-01ah], dl ; 88 56 e6 ; 0xc1e33
+ mov byte [bp-019h], 000h ; c6 46 e7 00 ; 0xc1e36
+ mov si, ax ; 89 c6 ; 0xc1e3a
+ add si, word [bp-01ah] ; 03 76 e6 ; 0xc1e3c
+ sal si, 1 ; d1 e6 ; 0xc1e3f
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1e41
+ xor bh, bh ; 30 ff ; 0xc1e44
+ mov CL, strict byte 003h ; b1 03 ; 0xc1e46
+ sal bx, CL ; d3 e3 ; 0xc1e48
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1e4a
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1e4e
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1e51
+ add ax, word [bp-01ah] ; 03 46 e6 ; 0xc1e54
+ sal ax, 1 ; d1 e0 ; 0xc1e57
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1e59
+ add di, ax ; 01 c7 ; 0xc1e5c
+ mov cx, word [bp-014h] ; 8b 4e ec ; 0xc1e5e
+ mov dx, bx ; 89 da ; 0xc1e61
+ mov es, bx ; 8e c3 ; 0xc1e63
+ jcxz 01e6dh ; e3 06 ; 0xc1e65
+ push DS ; 1e ; 0xc1e67
+ mov ds, dx ; 8e da ; 0xc1e68
+ rep movsw ; f3 a5 ; 0xc1e6a
+ pop DS ; 1f ; 0xc1e6c
+ inc word [bp-016h] ; ff 46 ea ; 0xc1e6d vgabios.c:1363
+ jmp near 01dc2h ; e9 4f ff ; 0xc1e70
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1e73 vgabios.c:1366
+ xor ah, ah ; 30 e4 ; 0xc1e76
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc1e78
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1e7b
+ xor ah, ah ; 30 e4 ; 0xc1e7e
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc1e80
+ jnbe short 01e21h ; 77 9c ; 0xc1e83
+ mov dl, al ; 88 c2 ; 0xc1e85 vgabios.c:1368
+ xor dh, dh ; 30 f6 ; 0xc1e87
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1e89
+ add ax, dx ; 01 d0 ; 0xc1e8c
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc1e8e
+ jnbe short 01e99h ; 77 06 ; 0xc1e91
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1e93
+ jne short 01ed9h ; 75 40 ; 0xc1e97
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc1e99 vgabios.c:1369
+ xor bh, bh ; 30 ff ; 0xc1e9c
+ mov ah, byte [bp-010h] ; 8a 66 f0 ; 0xc1e9e
+ xor al, al ; 30 c0 ; 0xc1ea1
+ mov si, ax ; 89 c6 ; 0xc1ea3
+ add si, strict byte 00020h ; 83 c6 20 ; 0xc1ea5
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1ea8
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1eab
+ mov dx, ax ; 89 c2 ; 0xc1eae
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc1eb0
+ xor ah, ah ; 30 e4 ; 0xc1eb3
+ add ax, dx ; 01 d0 ; 0xc1eb5
+ sal ax, 1 ; d1 e0 ; 0xc1eb7
+ mov dx, word [bp-01ch] ; 8b 56 e4 ; 0xc1eb9
+ add dx, ax ; 01 c2 ; 0xc1ebc
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc1ebe
+ xor ah, ah ; 30 e4 ; 0xc1ec1
+ mov CL, strict byte 003h ; b1 03 ; 0xc1ec3
+ mov di, ax ; 89 c7 ; 0xc1ec5
+ sal di, CL ; d3 e7 ; 0xc1ec7
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc1ec9
+ mov cx, bx ; 89 d9 ; 0xc1ecd
+ mov ax, si ; 89 f0 ; 0xc1ecf
+ mov di, dx ; 89 d7 ; 0xc1ed1
+ jcxz 01ed7h ; e3 02 ; 0xc1ed3
+ rep stosw ; f3 ab ; 0xc1ed5
+ jmp short 01f2eh ; eb 55 ; 0xc1ed7 vgabios.c:1370
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc1ed9 vgabios.c:1371
+ mov byte [bp-01ah], al ; 88 46 e6 ; 0xc1edc
+ mov byte [bp-019h], dh ; 88 76 e7 ; 0xc1edf
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc1ee2
+ xor ah, ah ; 30 e4 ; 0xc1ee5
+ mov dx, word [bp-016h] ; 8b 56 ea ; 0xc1ee7
+ sub dx, ax ; 29 c2 ; 0xc1eea
+ mov ax, dx ; 89 d0 ; 0xc1eec
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1eee
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc1ef1
+ mov byte [bp-014h], dl ; 88 56 ec ; 0xc1ef4
+ mov byte [bp-013h], 000h ; c6 46 ed 00 ; 0xc1ef7
+ mov si, ax ; 89 c6 ; 0xc1efb
+ add si, word [bp-014h] ; 03 76 ec ; 0xc1efd
+ sal si, 1 ; d1 e6 ; 0xc1f00
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1f02
+ xor bh, bh ; 30 ff ; 0xc1f05
+ mov CL, strict byte 003h ; b1 03 ; 0xc1f07
+ sal bx, CL ; d3 e3 ; 0xc1f09
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1f0b
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc1f0f
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1f12
+ add ax, word [bp-014h] ; 03 46 ec ; 0xc1f15
+ sal ax, 1 ; d1 e0 ; 0xc1f18
+ mov di, word [bp-01ch] ; 8b 7e e4 ; 0xc1f1a
+ add di, ax ; 01 c7 ; 0xc1f1d
+ mov cx, word [bp-01ah] ; 8b 4e e6 ; 0xc1f1f
+ mov dx, bx ; 89 da ; 0xc1f22
+ mov es, bx ; 8e c3 ; 0xc1f24
+ jcxz 01f2eh ; e3 06 ; 0xc1f26
+ push DS ; 1e ; 0xc1f28
+ mov ds, dx ; 8e da ; 0xc1f29
+ rep movsw ; f3 a5 ; 0xc1f2b
+ pop DS ; 1f ; 0xc1f2d
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1f2e vgabios.c:1372
+ xor ah, ah ; 30 e4 ; 0xc1f31
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc1f33
+ jc short 01f6ch ; 72 34 ; 0xc1f36
+ dec word [bp-016h] ; ff 4e ea ; 0xc1f38 vgabios.c:1373
+ jmp near 01e7bh ; e9 3d ff ; 0xc1f3b
+ mov si, word [bp-01eh] ; 8b 76 e2 ; 0xc1f3e vgabios.c:1379
+ mov al, byte [si+0482eh] ; 8a 84 2e 48 ; 0xc1f41
+ xor ah, ah ; 30 e4 ; 0xc1f45
+ mov CL, strict byte 006h ; b1 06 ; 0xc1f47
+ mov si, ax ; 89 c6 ; 0xc1f49
+ sal si, CL ; d3 e6 ; 0xc1f4b
+ mov al, byte [si+04844h] ; 8a 84 44 48 ; 0xc1f4d
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc1f51
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc1f54 vgabios.c:1380
+ cmp AL, strict byte 003h ; 3c 03 ; 0xc1f58
+ jc short 01f68h ; 72 0c ; 0xc1f5a
+ jbe short 01f6fh ; 76 11 ; 0xc1f5c
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc1f5e
+ je short 01f9ch ; 74 3a ; 0xc1f60
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc1f62
+ je short 01f6fh ; 74 09 ; 0xc1f64
+ jmp short 01f6ch ; eb 04 ; 0xc1f66
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc1f68
+ je short 01f9fh ; 74 33 ; 0xc1f6a
+ jmp near 02339h ; e9 ca 03 ; 0xc1f6c
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc1f6f vgabios.c:1384
+ jne short 01f9ah ; 75 25 ; 0xc1f73
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc1f75
+ jne short 01fddh ; 75 62 ; 0xc1f79
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc1f7b
+ jne short 01fddh ; 75 5c ; 0xc1f7f
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1f81
+ xor ah, ah ; 30 e4 ; 0xc1f84
+ mov dx, word [bp-024h] ; 8b 56 dc ; 0xc1f86
+ dec dx ; 4a ; 0xc1f89
+ cmp ax, dx ; 39 d0 ; 0xc1f8a
+ jne short 01fddh ; 75 4f ; 0xc1f8c
+ mov al, ch ; 88 e8 ; 0xc1f8e
+ xor ah, dh ; 30 f4 ; 0xc1f90
+ mov dx, word [bp-018h] ; 8b 56 e8 ; 0xc1f92
+ dec dx ; 4a ; 0xc1f95
+ cmp ax, dx ; 39 d0 ; 0xc1f96
+ je short 01fa2h ; 74 08 ; 0xc1f98
+ jmp short 01fddh ; eb 41 ; 0xc1f9a
+ jmp near 0221dh ; e9 7e 02 ; 0xc1f9c
+ jmp near 020c9h ; e9 27 01 ; 0xc1f9f
+ mov ax, 00205h ; b8 05 02 ; 0xc1fa2 vgabios.c:1386
+ mov dx, 003ceh ; ba ce 03 ; 0xc1fa5
+ out DX, ax ; ef ; 0xc1fa8
+ mov ax, word [bp-024h] ; 8b 46 dc ; 0xc1fa9 vgabios.c:1387
+ mul word [bp-018h] ; f7 66 e8 ; 0xc1fac
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc1faf
+ xor dh, dh ; 30 f6 ; 0xc1fb2
+ mul dx ; f7 e2 ; 0xc1fb4
+ mov dx, ax ; 89 c2 ; 0xc1fb6
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc1fb8
+ xor ah, ah ; 30 e4 ; 0xc1fbb
+ mov bl, byte [bp-012h] ; 8a 5e ee ; 0xc1fbd
+ xor bh, bh ; 30 ff ; 0xc1fc0
+ mov CL, strict byte 003h ; b1 03 ; 0xc1fc2
+ sal bx, CL ; d3 e3 ; 0xc1fc4
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc1fc6
+ mov cx, dx ; 89 d1 ; 0xc1fca
+ xor di, di ; 31 ff ; 0xc1fcc
+ mov es, bx ; 8e c3 ; 0xc1fce
+ jcxz 01fd4h ; e3 02 ; 0xc1fd0
+ rep stosb ; f3 aa ; 0xc1fd2
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc1fd4 vgabios.c:1388
+ mov dx, 003ceh ; ba ce 03 ; 0xc1fd7
+ out DX, ax ; ef ; 0xc1fda
+ jmp short 01f6ch ; eb 8f ; 0xc1fdb vgabios.c:1390
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc1fdd vgabios.c:1392
+ jne short 0204fh ; 75 6c ; 0xc1fe1
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc1fe3 vgabios.c:1393
+ xor ah, ah ; 30 e4 ; 0xc1fe6
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc1fe8
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc1feb
+ xor ah, ah ; 30 e4 ; 0xc1fee
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc1ff0
+ jc short 0204ch ; 72 57 ; 0xc1ff3
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc1ff5 vgabios.c:1395
+ xor dh, dh ; 30 f6 ; 0xc1ff8
+ add dx, word [bp-016h] ; 03 56 ea ; 0xc1ffa
+ cmp dx, ax ; 39 c2 ; 0xc1ffd
+ jnbe short 02007h ; 77 06 ; 0xc1fff
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2001
+ jne short 02028h ; 75 21 ; 0xc2005
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2007 vgabios.c:1396
+ xor ah, ah ; 30 e4 ; 0xc200a
+ push ax ; 50 ; 0xc200c
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc200d
+ push ax ; 50 ; 0xc2010
+ mov cl, byte [bp-018h] ; 8a 4e e8 ; 0xc2011
+ xor ch, ch ; 30 ed ; 0xc2014
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2016
+ xor bh, bh ; 30 ff ; 0xc2019
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc201b
+ xor dh, dh ; 30 f6 ; 0xc201e
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2020
+ call 019ebh ; e8 c5 f9 ; 0xc2023
+ jmp short 02047h ; eb 1f ; 0xc2026 vgabios.c:1397
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2028 vgabios.c:1398
+ push ax ; 50 ; 0xc202b
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc202c
+ push ax ; 50 ; 0xc202f
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc2030
+ xor ch, ch ; 30 ed ; 0xc2033
+ mov bl, byte [bp-016h] ; 8a 5e ea ; 0xc2035
+ xor bh, bh ; 30 ff ; 0xc2038
+ mov dl, bl ; 88 da ; 0xc203a
+ add dl, byte [bp-006h] ; 02 56 fa ; 0xc203c
+ xor dh, dh ; 30 f6 ; 0xc203f
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2041
+ call 0195dh ; e8 16 f9 ; 0xc2044
+ inc word [bp-016h] ; ff 46 ea ; 0xc2047 vgabios.c:1399
+ jmp short 01febh ; eb 9f ; 0xc204a
+ jmp near 02339h ; e9 ea 02 ; 0xc204c
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc204f vgabios.c:1402
+ xor ah, ah ; 30 e4 ; 0xc2052
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc2054
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2057
+ xor ah, ah ; 30 e4 ; 0xc205a
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc205c
+ jnbe short 0204ch ; 77 eb ; 0xc205f
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc2061 vgabios.c:1404
+ xor dh, dh ; 30 f6 ; 0xc2064
+ add ax, dx ; 01 d0 ; 0xc2066
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc2068
+ jnbe short 02071h ; 77 04 ; 0xc206b
+ test dl, dl ; 84 d2 ; 0xc206d
+ jne short 02092h ; 75 21 ; 0xc206f
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2071 vgabios.c:1405
+ xor ah, ah ; 30 e4 ; 0xc2074
+ push ax ; 50 ; 0xc2076
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2077
+ push ax ; 50 ; 0xc207a
+ mov cl, byte [bp-018h] ; 8a 4e e8 ; 0xc207b
+ xor ch, ch ; 30 ed ; 0xc207e
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2080
+ xor bh, bh ; 30 ff ; 0xc2083
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc2085
+ xor dh, dh ; 30 f6 ; 0xc2088
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc208a
+ call 019ebh ; e8 5b f9 ; 0xc208d
+ jmp short 020bah ; eb 28 ; 0xc2090 vgabios.c:1406
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2092 vgabios.c:1407
+ xor ah, ah ; 30 e4 ; 0xc2095
+ push ax ; 50 ; 0xc2097
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc2098
+ push ax ; 50 ; 0xc209b
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc209c
+ xor ch, ch ; 30 ed ; 0xc209f
+ mov bl, byte [bp-016h] ; 8a 5e ea ; 0xc20a1
+ xor bh, bh ; 30 ff ; 0xc20a4
+ mov dl, bl ; 88 da ; 0xc20a6
+ sub dl, byte [bp-006h] ; 2a 56 fa ; 0xc20a8
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc20ab
+ mov byte [bp-01ah], al ; 88 46 e6 ; 0xc20ae
+ mov byte [bp-019h], dh ; 88 76 e7 ; 0xc20b1
+ mov ax, word [bp-01ah] ; 8b 46 e6 ; 0xc20b4
+ call 0195dh ; e8 a3 f8 ; 0xc20b7
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc20ba vgabios.c:1408
+ xor ah, ah ; 30 e4 ; 0xc20bd
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc20bf
+ jc short 02112h ; 72 4e ; 0xc20c2
+ dec word [bp-016h] ; ff 4e ea ; 0xc20c4 vgabios.c:1409
+ jmp short 02057h ; eb 8e ; 0xc20c7
+ mov cl, byte [bx+047b1h] ; 8a 8f b1 47 ; 0xc20c9 vgabios.c:1414
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc20cd vgabios.c:1415
+ jne short 02115h ; 75 42 ; 0xc20d1
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc20d3
+ jne short 02115h ; 75 3c ; 0xc20d7
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc20d9
+ jne short 02115h ; 75 36 ; 0xc20dd
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc20df
+ cmp ax, word [bp-022h] ; 3b 46 de ; 0xc20e2
+ jne short 02115h ; 75 2e ; 0xc20e5
+ mov al, ch ; 88 e8 ; 0xc20e7
+ cmp ax, word [bp-020h] ; 3b 46 e0 ; 0xc20e9
+ jne short 02115h ; 75 27 ; 0xc20ec
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc20ee vgabios.c:1417
+ xor dh, dh ; 30 f6 ; 0xc20f1
+ mov ax, di ; 89 f8 ; 0xc20f3
+ mul dx ; f7 e2 ; 0xc20f5
+ mov dl, cl ; 88 ca ; 0xc20f7
+ xor dh, dh ; 30 f6 ; 0xc20f9
+ mul dx ; f7 e2 ; 0xc20fb
+ mov dl, byte [bp-010h] ; 8a 56 f0 ; 0xc20fd
+ xor dh, dh ; 30 f6 ; 0xc2100
+ mov bx, word [bx+047b2h] ; 8b 9f b2 47 ; 0xc2102
+ mov cx, ax ; 89 c1 ; 0xc2106
+ mov ax, dx ; 89 d0 ; 0xc2108
+ xor di, di ; 31 ff ; 0xc210a
+ mov es, bx ; 8e c3 ; 0xc210c
+ jcxz 02112h ; e3 02 ; 0xc210e
+ rep stosb ; f3 aa ; 0xc2110
+ jmp near 02339h ; e9 24 02 ; 0xc2112 vgabios.c:1419
+ cmp cl, 002h ; 80 f9 02 ; 0xc2115 vgabios.c:1421
+ jne short 02123h ; 75 09 ; 0xc2118
+ sal byte [bp-008h], 1 ; d0 66 f8 ; 0xc211a vgabios.c:1423
+ sal byte [bp-00ah], 1 ; d0 66 f6 ; 0xc211d vgabios.c:1424
+ sal word [bp-018h], 1 ; d1 66 e8 ; 0xc2120 vgabios.c:1425
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc2123 vgabios.c:1428
+ jne short 02192h ; 75 69 ; 0xc2127
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2129 vgabios.c:1429
+ xor ah, ah ; 30 e4 ; 0xc212c
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc212e
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2131
+ xor ah, ah ; 30 e4 ; 0xc2134
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc2136
+ jc short 02112h ; 72 d7 ; 0xc2139
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc213b vgabios.c:1431
+ xor dh, dh ; 30 f6 ; 0xc213e
+ add dx, word [bp-016h] ; 03 56 ea ; 0xc2140
+ cmp dx, ax ; 39 c2 ; 0xc2143
+ jnbe short 0214dh ; 77 06 ; 0xc2145
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2147
+ jne short 0216eh ; 75 21 ; 0xc214b
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc214d vgabios.c:1432
+ xor ah, ah ; 30 e4 ; 0xc2150
+ push ax ; 50 ; 0xc2152
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2153
+ push ax ; 50 ; 0xc2156
+ mov cl, byte [bp-018h] ; 8a 4e e8 ; 0xc2157
+ xor ch, ch ; 30 ed ; 0xc215a
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc215c
+ xor bh, bh ; 30 ff ; 0xc215f
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc2161
+ xor dh, dh ; 30 f6 ; 0xc2164
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2166
+ call 01b1ch ; e8 b0 f9 ; 0xc2169
+ jmp short 0218dh ; eb 1f ; 0xc216c vgabios.c:1433
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc216e vgabios.c:1434
+ push ax ; 50 ; 0xc2171
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc2172
+ push ax ; 50 ; 0xc2175
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc2176
+ xor ch, ch ; 30 ed ; 0xc2179
+ mov bl, byte [bp-016h] ; 8a 5e ea ; 0xc217b
+ xor bh, bh ; 30 ff ; 0xc217e
+ mov dl, bl ; 88 da ; 0xc2180
+ add dl, byte [bp-006h] ; 02 56 fa ; 0xc2182
+ xor dh, dh ; 30 f6 ; 0xc2185
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2187
+ call 01a66h ; e8 d9 f8 ; 0xc218a
+ inc word [bp-016h] ; ff 46 ea ; 0xc218d vgabios.c:1435
+ jmp short 02131h ; eb 9f ; 0xc2190
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2192 vgabios.c:1438
+ xor ah, ah ; 30 e4 ; 0xc2195
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc2197
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc219a
+ xor ah, ah ; 30 e4 ; 0xc219d
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc219f
+ jnbe short 021e2h ; 77 3e ; 0xc21a2
+ mov dl, al ; 88 c2 ; 0xc21a4 vgabios.c:1440
+ xor dh, dh ; 30 f6 ; 0xc21a6
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc21a8
+ add ax, dx ; 01 d0 ; 0xc21ab
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc21ad
+ jnbe short 021b8h ; 77 06 ; 0xc21b0
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc21b2
+ jne short 021e5h ; 75 2d ; 0xc21b6
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc21b8 vgabios.c:1441
+ xor ah, ah ; 30 e4 ; 0xc21bb
+ push ax ; 50 ; 0xc21bd
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc21be
+ push ax ; 50 ; 0xc21c1
+ mov cl, byte [bp-018h] ; 8a 4e e8 ; 0xc21c2
+ xor ch, ch ; 30 ed ; 0xc21c5
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc21c7
+ xor bh, bh ; 30 ff ; 0xc21ca
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc21cc
+ xor dh, dh ; 30 f6 ; 0xc21cf
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc21d1
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc21d4
+ mov byte [bp-013h], ah ; 88 66 ed ; 0xc21d7
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc21da
+ call 01b1ch ; e8 3c f9 ; 0xc21dd
+ jmp short 0220dh ; eb 2b ; 0xc21e0 vgabios.c:1442
+ jmp near 02339h ; e9 54 01 ; 0xc21e2
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc21e5 vgabios.c:1443
+ xor ah, ah ; 30 e4 ; 0xc21e8
+ push ax ; 50 ; 0xc21ea
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc21eb
+ push ax ; 50 ; 0xc21ee
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc21ef
+ xor ch, ch ; 30 ed ; 0xc21f2
+ mov bl, byte [bp-016h] ; 8a 5e ea ; 0xc21f4
+ xor bh, bh ; 30 ff ; 0xc21f7
+ mov dl, bl ; 88 da ; 0xc21f9
+ sub dl, byte [bp-006h] ; 2a 56 fa ; 0xc21fb
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc21fe
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc2201
+ mov byte [bp-013h], dh ; 88 76 ed ; 0xc2204
+ mov ax, word [bp-014h] ; 8b 46 ec ; 0xc2207
+ call 01a66h ; e8 59 f8 ; 0xc220a
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc220d vgabios.c:1444
+ xor ah, ah ; 30 e4 ; 0xc2210
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc2212
+ jc short 0225ch ; 72 45 ; 0xc2215
+ dec word [bp-016h] ; ff 4e ea ; 0xc2217 vgabios.c:1445
+ jmp near 0219ah ; e9 7d ff ; 0xc221a
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc221d vgabios.c:1450
+ jne short 0225fh ; 75 3c ; 0xc2221
+ cmp byte [bp-00ch], 000h ; 80 7e f4 00 ; 0xc2223
+ jne short 0225fh ; 75 36 ; 0xc2227
+ cmp byte [bp-008h], 000h ; 80 7e f8 00 ; 0xc2229
+ jne short 0225fh ; 75 30 ; 0xc222d
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc222f
+ cmp ax, word [bp-022h] ; 3b 46 de ; 0xc2232
+ jne short 0225fh ; 75 28 ; 0xc2235
+ mov al, ch ; 88 e8 ; 0xc2237
+ cmp ax, word [bp-020h] ; 3b 46 e0 ; 0xc2239
+ jne short 0225fh ; 75 21 ; 0xc223c
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc223e vgabios.c:1452
+ xor dh, dh ; 30 f6 ; 0xc2241
+ mov ax, di ; 89 f8 ; 0xc2243
+ mul dx ; f7 e2 ; 0xc2245
+ mov CL, strict byte 003h ; b1 03 ; 0xc2247
+ sal ax, CL ; d3 e0 ; 0xc2249
+ mov cx, ax ; 89 c1 ; 0xc224b
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc224d
+ xor ah, ah ; 30 e4 ; 0xc2250
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2252
+ xor di, di ; 31 ff ; 0xc2256
+ jcxz 0225ch ; e3 02 ; 0xc2258
+ rep stosb ; f3 aa ; 0xc225a
+ jmp near 02339h ; e9 da 00 ; 0xc225c vgabios.c:1454
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc225f vgabios.c:1457
+ jne short 022cbh ; 75 66 ; 0xc2263
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2265 vgabios.c:1458
+ xor ah, ah ; 30 e4 ; 0xc2268
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc226a
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc226d
+ xor ah, ah ; 30 e4 ; 0xc2270
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc2272
+ jc short 0225ch ; 72 e5 ; 0xc2275
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc2277 vgabios.c:1460
+ xor dh, dh ; 30 f6 ; 0xc227a
+ add dx, word [bp-016h] ; 03 56 ea ; 0xc227c
+ cmp dx, ax ; 39 c2 ; 0xc227f
+ jnbe short 02289h ; 77 06 ; 0xc2281
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2283
+ jne short 022a8h ; 75 1f ; 0xc2287
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc2289 vgabios.c:1461
+ xor ah, ah ; 30 e4 ; 0xc228c
+ push ax ; 50 ; 0xc228e
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc228f
+ push ax ; 50 ; 0xc2292
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc2293
+ xor bh, bh ; 30 ff ; 0xc2296
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc2298
+ xor dh, dh ; 30 f6 ; 0xc229b
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc229d
+ mov cx, word [bp-018h] ; 8b 4e e8 ; 0xc22a0
+ call 01c33h ; e8 8d f9 ; 0xc22a3
+ jmp short 022c6h ; eb 1e ; 0xc22a6 vgabios.c:1462
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc22a8 vgabios.c:1463
+ push ax ; 50 ; 0xc22ab
+ push word [bp-018h] ; ff 76 e8 ; 0xc22ac
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc22af
+ xor ch, ch ; 30 ed ; 0xc22b2
+ mov bl, byte [bp-016h] ; 8a 5e ea ; 0xc22b4
+ xor bh, bh ; 30 ff ; 0xc22b7
+ mov dl, bl ; 88 da ; 0xc22b9
+ add dl, byte [bp-006h] ; 02 56 fa ; 0xc22bb
+ xor dh, dh ; 30 f6 ; 0xc22be
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc22c0
+ call 01bb0h ; e8 ea f8 ; 0xc22c3
+ inc word [bp-016h] ; ff 46 ea ; 0xc22c6 vgabios.c:1464
+ jmp short 0226dh ; eb a2 ; 0xc22c9
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc22cb vgabios.c:1467
+ xor ah, ah ; 30 e4 ; 0xc22ce
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc22d0
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc22d3
+ xor ah, ah ; 30 e4 ; 0xc22d6
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc22d8
+ jnbe short 02339h ; 77 5c ; 0xc22db
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc22dd vgabios.c:1469
+ xor dh, dh ; 30 f6 ; 0xc22e0
+ add ax, dx ; 01 d0 ; 0xc22e2
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc22e4
+ jnbe short 022edh ; 77 04 ; 0xc22e7
+ test dl, dl ; 84 d2 ; 0xc22e9
+ jne short 0230ch ; 75 1f ; 0xc22eb
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc22ed vgabios.c:1470
+ xor ah, ah ; 30 e4 ; 0xc22f0
+ push ax ; 50 ; 0xc22f2
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc22f3
+ push ax ; 50 ; 0xc22f6
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc22f7
+ xor bh, bh ; 30 ff ; 0xc22fa
+ mov dl, byte [bp-016h] ; 8a 56 ea ; 0xc22fc
+ xor dh, dh ; 30 f6 ; 0xc22ff
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2301
+ mov cx, word [bp-018h] ; 8b 4e e8 ; 0xc2304
+ call 01c33h ; e8 29 f9 ; 0xc2307
+ jmp short 0232ah ; eb 1e ; 0xc230a vgabios.c:1471
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc230c vgabios.c:1472
+ xor ah, ah ; 30 e4 ; 0xc230f
+ push ax ; 50 ; 0xc2311
+ push word [bp-018h] ; ff 76 e8 ; 0xc2312
+ mov cl, byte [bp-00ah] ; 8a 4e f6 ; 0xc2315
+ xor ch, ch ; 30 ed ; 0xc2318
+ mov bl, byte [bp-016h] ; 8a 5e ea ; 0xc231a
+ xor bh, bh ; 30 ff ; 0xc231d
+ mov dl, bl ; 88 da ; 0xc231f
+ sub dl, byte [bp-006h] ; 2a 56 fa ; 0xc2321
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2324
+ call 01bb0h ; e8 86 f8 ; 0xc2327
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc232a vgabios.c:1473
+ xor ah, ah ; 30 e4 ; 0xc232d
+ cmp ax, word [bp-016h] ; 3b 46 ea ; 0xc232f
+ jc short 02339h ; 72 05 ; 0xc2332
+ dec word [bp-016h] ; ff 4e ea ; 0xc2334 vgabios.c:1474
+ jmp short 022d3h ; eb 9a ; 0xc2337
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2339 vgabios.c:1485
+ pop di ; 5f ; 0xc233c
+ pop si ; 5e ; 0xc233d
+ pop bp ; 5d ; 0xc233e
+ retn 00008h ; c2 08 00 ; 0xc233f
+ ; disGetNextSymbol 0xc2342 LB 0x2222 -> off=0x0 cb=0000000000000112 uValue=00000000000c2342 'write_gfx_char_pl4'
+write_gfx_char_pl4: ; 0xc2342 LB 0x112
+ push bp ; 55 ; 0xc2342 vgabios.c:1488
+ mov bp, sp ; 89 e5 ; 0xc2343
+ push si ; 56 ; 0xc2345
+ push di ; 57 ; 0xc2346
+ sub sp, strict byte 00010h ; 83 ec 10 ; 0xc2347
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc234a
+ mov byte [bp-00ah], dl ; 88 56 f6 ; 0xc234d
+ mov byte [bp-006h], bl ; 88 5e fa ; 0xc2350
+ mov al, cl ; 88 c8 ; 0xc2353
+ mov bx, 0010ch ; bb 0c 01 ; 0xc2355 vgabios.c:67
+ xor cx, cx ; 31 c9 ; 0xc2358
+ mov es, cx ; 8e c1 ; 0xc235a
+ mov cx, word [es:bx] ; 26 8b 0f ; 0xc235c
+ mov bx, word [es:bx+002h] ; 26 8b 5f 02 ; 0xc235f
+ mov word [bp-014h], cx ; 89 4e ec ; 0xc2363 vgabios.c:68
+ mov word [bp-010h], bx ; 89 5e f0 ; 0xc2366
+ xor ah, ah ; 30 e4 ; 0xc2369 vgabios.c:1497
+ mov cl, byte [bp+006h] ; 8a 4e 06 ; 0xc236b
+ xor ch, ch ; 30 ed ; 0xc236e
+ imul cx ; f7 e9 ; 0xc2370
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc2372
+ xor bh, bh ; 30 ff ; 0xc2375
+ imul bx ; f7 eb ; 0xc2377
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2379
+ mov si, bx ; 89 de ; 0xc237c
+ add si, ax ; 01 c6 ; 0xc237e
+ mov bx, strict word 0004ch ; bb 4c 00 ; 0xc2380 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2383
+ mov es, ax ; 8e c0 ; 0xc2386
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc2388
+ mov bl, byte [bp+008h] ; 8a 5e 08 ; 0xc238b vgabios.c:58
+ xor bh, bh ; 30 ff ; 0xc238e
+ mul bx ; f7 e3 ; 0xc2390
+ add si, ax ; 01 c6 ; 0xc2392
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2394 vgabios.c:1499
+ xor ah, ah ; 30 e4 ; 0xc2397
+ imul cx ; f7 e9 ; 0xc2399
+ mov word [bp-012h], ax ; 89 46 ee ; 0xc239b
+ mov ax, 00f02h ; b8 02 0f ; 0xc239e vgabios.c:1500
+ mov dx, 003c4h ; ba c4 03 ; 0xc23a1
+ out DX, ax ; ef ; 0xc23a4
+ mov ax, 00205h ; b8 05 02 ; 0xc23a5 vgabios.c:1501
+ mov dx, 003ceh ; ba ce 03 ; 0xc23a8
+ out DX, ax ; ef ; 0xc23ab
+ test byte [bp-00ah], 080h ; f6 46 f6 80 ; 0xc23ac vgabios.c:1502
+ je short 023b8h ; 74 06 ; 0xc23b0
+ mov ax, 01803h ; b8 03 18 ; 0xc23b2 vgabios.c:1504
+ out DX, ax ; ef ; 0xc23b5
+ jmp short 023bch ; eb 04 ; 0xc23b6 vgabios.c:1506
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc23b8 vgabios.c:1508
+ out DX, ax ; ef ; 0xc23bb
+ xor ch, ch ; 30 ed ; 0xc23bc vgabios.c:1510
+ cmp ch, byte [bp+006h] ; 3a 6e 06 ; 0xc23be
+ jnc short 023d8h ; 73 15 ; 0xc23c1
+ mov al, ch ; 88 e8 ; 0xc23c3 vgabios.c:1512
+ xor ah, ah ; 30 e4 ; 0xc23c5
+ mov bl, byte [bp+004h] ; 8a 5e 04 ; 0xc23c7
+ xor bh, bh ; 30 ff ; 0xc23ca
+ imul bx ; f7 eb ; 0xc23cc
+ mov bx, si ; 89 f3 ; 0xc23ce
+ add bx, ax ; 01 c3 ; 0xc23d0
+ mov byte [bp-008h], 000h ; c6 46 f8 00 ; 0xc23d2 vgabios.c:1513
+ jmp short 023ech ; eb 14 ; 0xc23d6
+ jmp short 0243ch ; eb 62 ; 0xc23d8 vgabios.c:1522
+ mov ax, 0a000h ; b8 00 a0 ; 0xc23da vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc23dd
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc23df
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc23e3 vgabios.c:1526
+ cmp byte [bp-008h], 008h ; 80 7e f8 08 ; 0xc23e6
+ jnc short 02438h ; 73 4c ; 0xc23ea
+ mov cl, byte [bp-008h] ; 8a 4e f8 ; 0xc23ec
+ mov ax, 00080h ; b8 80 00 ; 0xc23ef
+ sar ax, CL ; d3 f8 ; 0xc23f2
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc23f4
+ mov byte [bp-00dh], 000h ; c6 46 f3 00 ; 0xc23f7
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc23fb
+ mov ah, al ; 88 c4 ; 0xc23fe
+ xor al, al ; 30 c0 ; 0xc2400
+ or AL, strict byte 008h ; 0c 08 ; 0xc2402
+ mov dx, 003ceh ; ba ce 03 ; 0xc2404
+ out DX, ax ; ef ; 0xc2407
+ mov dx, bx ; 89 da ; 0xc2408
+ mov ax, 0a000h ; b8 00 a0 ; 0xc240a
+ call 038b3h ; e8 a3 14 ; 0xc240d
+ mov al, ch ; 88 e8 ; 0xc2410
+ xor ah, ah ; 30 e4 ; 0xc2412
+ add ax, word [bp-012h] ; 03 46 ee ; 0xc2414
+ mov es, [bp-010h] ; 8e 46 f0 ; 0xc2417
+ mov di, word [bp-014h] ; 8b 7e ec ; 0xc241a
+ add di, ax ; 01 c7 ; 0xc241d
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc241f
+ xor ah, ah ; 30 e4 ; 0xc2422
+ test word [bp-00eh], ax ; 85 46 f2 ; 0xc2424
+ je short 023dah ; 74 b1 ; 0xc2427
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2429
+ and AL, strict byte 00fh ; 24 0f ; 0xc242c
+ mov di, 0a000h ; bf 00 a0 ; 0xc242e
+ mov es, di ; 8e c7 ; 0xc2431
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2433
+ jmp short 023e3h ; eb ab ; 0xc2436
+ db 0feh, 0c5h
+ ; inc ch ; fe c5 ; 0xc2438 vgabios.c:1527
+ jmp short 023beh ; eb 82 ; 0xc243a
+ mov ax, 0ff08h ; b8 08 ff ; 0xc243c vgabios.c:1528
+ mov dx, 003ceh ; ba ce 03 ; 0xc243f
+ out DX, ax ; ef ; 0xc2442
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc2443 vgabios.c:1529
+ out DX, ax ; ef ; 0xc2446
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc2447 vgabios.c:1530
+ out DX, ax ; ef ; 0xc244a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc244b vgabios.c:1531
+ pop di ; 5f ; 0xc244e
+ pop si ; 5e ; 0xc244f
+ pop bp ; 5d ; 0xc2450
+ retn 00006h ; c2 06 00 ; 0xc2451
+ ; disGetNextSymbol 0xc2454 LB 0x2110 -> off=0x0 cb=0000000000000112 uValue=00000000000c2454 'write_gfx_char_cga'
+write_gfx_char_cga: ; 0xc2454 LB 0x112
+ push si ; 56 ; 0xc2454 vgabios.c:1534
+ push di ; 57 ; 0xc2455
+ push bp ; 55 ; 0xc2456
+ mov bp, sp ; 89 e5 ; 0xc2457
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc2459
+ mov ch, al ; 88 c5 ; 0xc245c
+ mov byte [bp-002h], dl ; 88 56 fe ; 0xc245e
+ mov al, bl ; 88 d8 ; 0xc2461
+ mov si, 0556ch ; be 6c 55 ; 0xc2463 vgabios.c:1541
+ xor ah, ah ; 30 e4 ; 0xc2466 vgabios.c:1542
+ mov bl, byte [bp+00ah] ; 8a 5e 0a ; 0xc2468
+ xor bh, bh ; 30 ff ; 0xc246b
+ imul bx ; f7 eb ; 0xc246d
+ mov bx, ax ; 89 c3 ; 0xc246f
+ mov al, cl ; 88 c8 ; 0xc2471
+ xor ah, ah ; 30 e4 ; 0xc2473
+ mov di, 00140h ; bf 40 01 ; 0xc2475
+ imul di ; f7 ef ; 0xc2478
+ add bx, ax ; 01 c3 ; 0xc247a
+ mov word [bp-004h], bx ; 89 5e fc ; 0xc247c
+ mov al, ch ; 88 e8 ; 0xc247f vgabios.c:1543
+ xor ah, ah ; 30 e4 ; 0xc2481
+ mov CL, strict byte 003h ; b1 03 ; 0xc2483
+ sal ax, CL ; d3 e0 ; 0xc2485
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc2487
+ xor ch, ch ; 30 ed ; 0xc248a vgabios.c:1544
+ jmp near 024abh ; e9 1c 00 ; 0xc248c
+ mov al, ch ; 88 e8 ; 0xc248f vgabios.c:1559
+ xor ah, ah ; 30 e4 ; 0xc2491
+ add ax, word [bp-008h] ; 03 46 f8 ; 0xc2493
+ mov di, si ; 89 f7 ; 0xc2496
+ add di, ax ; 01 c7 ; 0xc2498
+ mov al, byte [di] ; 8a 05 ; 0xc249a
+ mov di, 0b800h ; bf 00 b8 ; 0xc249c vgabios.c:52
+ mov es, di ; 8e c7 ; 0xc249f
+ mov byte [es:bx], al ; 26 88 07 ; 0xc24a1
+ db 0feh, 0c5h
+ ; inc ch ; fe c5 ; 0xc24a4 vgabios.c:1563
+ cmp ch, 008h ; 80 fd 08 ; 0xc24a6
+ jnc short 02503h ; 73 58 ; 0xc24a9
+ mov al, ch ; 88 e8 ; 0xc24ab
+ xor ah, ah ; 30 e4 ; 0xc24ad
+ sar ax, 1 ; d1 f8 ; 0xc24af
+ mov bx, strict word 00050h ; bb 50 00 ; 0xc24b1
+ imul bx ; f7 eb ; 0xc24b4
+ mov bx, word [bp-004h] ; 8b 5e fc ; 0xc24b6
+ add bx, ax ; 01 c3 ; 0xc24b9
+ test ch, 001h ; f6 c5 01 ; 0xc24bb
+ je short 024c3h ; 74 03 ; 0xc24be
+ add bh, 020h ; 80 c7 20 ; 0xc24c0
+ mov DL, strict byte 080h ; b2 80 ; 0xc24c3
+ cmp byte [bp+00ah], 001h ; 80 7e 0a 01 ; 0xc24c5
+ jne short 024e9h ; 75 1e ; 0xc24c9
+ test byte [bp-002h], dl ; 84 56 fe ; 0xc24cb
+ je short 0248fh ; 74 bf ; 0xc24ce
+ mov ax, 0b800h ; b8 00 b8 ; 0xc24d0
+ mov es, ax ; 8e c0 ; 0xc24d3
+ mov dl, byte [es:bx] ; 26 8a 17 ; 0xc24d5
+ mov al, ch ; 88 e8 ; 0xc24d8
+ xor ah, ah ; 30 e4 ; 0xc24da
+ add ax, word [bp-008h] ; 03 46 f8 ; 0xc24dc
+ mov di, si ; 89 f7 ; 0xc24df
+ add di, ax ; 01 c7 ; 0xc24e1
+ mov al, byte [di] ; 8a 05 ; 0xc24e3
+ xor al, dl ; 30 d0 ; 0xc24e5
+ jmp short 0249ch ; eb b3 ; 0xc24e7
+ test dl, dl ; 84 d2 ; 0xc24e9 vgabios.c:1565
+ jbe short 024a4h ; 76 b7 ; 0xc24eb
+ test byte [bp-002h], 080h ; f6 46 fe 80 ; 0xc24ed vgabios.c:1567
+ je short 024fdh ; 74 0a ; 0xc24f1
+ mov ax, 0b800h ; b8 00 b8 ; 0xc24f3 vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc24f6
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc24f8
+ jmp short 024ffh ; eb 02 ; 0xc24fb vgabios.c:1571
+ xor al, al ; 30 c0 ; 0xc24fd vgabios.c:1573
+ xor ah, ah ; 30 e4 ; 0xc24ff vgabios.c:1575
+ jmp short 0250ah ; eb 07 ; 0xc2501
+ jmp short 0255eh ; eb 59 ; 0xc2503
+ cmp ah, 004h ; 80 fc 04 ; 0xc2505
+ jnc short 02553h ; 73 49 ; 0xc2508
+ mov byte [bp-006h], ch ; 88 6e fa ; 0xc250a vgabios.c:1577
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc250d
+ mov di, word [bp-008h] ; 8b 7e f8 ; 0xc2511
+ add di, word [bp-006h] ; 03 7e fa ; 0xc2514
+ add di, si ; 01 f7 ; 0xc2517
+ mov cl, byte [di] ; 8a 0d ; 0xc2519
+ mov byte [bp-00ah], cl ; 88 4e f6 ; 0xc251b
+ mov byte [bp-009h], 000h ; c6 46 f7 00 ; 0xc251e
+ mov byte [bp-006h], dl ; 88 56 fa ; 0xc2522
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc2525
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc2529
+ test word [bp-006h], di ; 85 7e fa ; 0xc252c
+ je short 0254dh ; 74 1c ; 0xc252f
+ mov CL, strict byte 003h ; b1 03 ; 0xc2531 vgabios.c:1578
+ sub cl, ah ; 28 e1 ; 0xc2533
+ mov dh, byte [bp-002h] ; 8a 76 fe ; 0xc2535
+ and dh, 003h ; 80 e6 03 ; 0xc2538
+ sal cl, 1 ; d0 e1 ; 0xc253b
+ sal dh, CL ; d2 e6 ; 0xc253d
+ mov cl, dh ; 88 f1 ; 0xc253f
+ test byte [bp-002h], 080h ; f6 46 fe 80 ; 0xc2541 vgabios.c:1579
+ je short 0254bh ; 74 04 ; 0xc2545
+ xor al, dh ; 30 f0 ; 0xc2547 vgabios.c:1581
+ jmp short 0254dh ; eb 02 ; 0xc2549 vgabios.c:1583
+ or al, dh ; 08 f0 ; 0xc254b vgabios.c:1585
+ shr dl, 1 ; d0 ea ; 0xc254d vgabios.c:1588
+ db 0feh, 0c4h
+ ; inc ah ; fe c4 ; 0xc254f vgabios.c:1589
+ jmp short 02505h ; eb b2 ; 0xc2551
+ mov di, 0b800h ; bf 00 b8 ; 0xc2553 vgabios.c:52
+ mov es, di ; 8e c7 ; 0xc2556
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2558
+ inc bx ; 43 ; 0xc255b vgabios.c:1591
+ jmp short 024e9h ; eb 8b ; 0xc255c vgabios.c:1592
+ mov sp, bp ; 89 ec ; 0xc255e vgabios.c:1595
+ pop bp ; 5d ; 0xc2560
+ pop di ; 5f ; 0xc2561
+ pop si ; 5e ; 0xc2562
+ retn 00004h ; c2 04 00 ; 0xc2563
+ ; disGetNextSymbol 0xc2566 LB 0x1ffe -> off=0x0 cb=00000000000000a1 uValue=00000000000c2566 'write_gfx_char_lin'
+write_gfx_char_lin: ; 0xc2566 LB 0xa1
+ push si ; 56 ; 0xc2566 vgabios.c:1598
+ push di ; 57 ; 0xc2567
+ push bp ; 55 ; 0xc2568
+ mov bp, sp ; 89 e5 ; 0xc2569
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc256b
+ mov bh, al ; 88 c7 ; 0xc256e
+ mov ch, dl ; 88 d5 ; 0xc2570
+ mov al, cl ; 88 c8 ; 0xc2572
+ mov di, 0556ch ; bf 6c 55 ; 0xc2574 vgabios.c:1605
+ xor ah, ah ; 30 e4 ; 0xc2577 vgabios.c:1606
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc2579
+ xor dh, dh ; 30 f6 ; 0xc257c
+ imul dx ; f7 ea ; 0xc257e
+ mov CL, strict byte 006h ; b1 06 ; 0xc2580
+ mov dx, ax ; 89 c2 ; 0xc2582
+ sal dx, CL ; d3 e2 ; 0xc2584
+ mov al, bl ; 88 d8 ; 0xc2586
+ xor ah, ah ; 30 e4 ; 0xc2588
+ mov CL, strict byte 003h ; b1 03 ; 0xc258a
+ sal ax, CL ; d3 e0 ; 0xc258c
+ add ax, dx ; 01 d0 ; 0xc258e
+ mov word [bp-002h], ax ; 89 46 fe ; 0xc2590
+ mov al, bh ; 88 f8 ; 0xc2593 vgabios.c:1607
+ xor ah, ah ; 30 e4 ; 0xc2595
+ sal ax, CL ; d3 e0 ; 0xc2597
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc2599
+ xor bl, bl ; 30 db ; 0xc259c vgabios.c:1608
+ jmp short 025e2h ; eb 42 ; 0xc259e
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc25a0 vgabios.c:1612
+ jnc short 025dbh ; 73 37 ; 0xc25a2
+ xor bh, bh ; 30 ff ; 0xc25a4 vgabios.c:1614
+ mov dl, bl ; 88 da ; 0xc25a6 vgabios.c:1615
+ xor dh, dh ; 30 f6 ; 0xc25a8
+ add dx, word [bp-006h] ; 03 56 fa ; 0xc25aa
+ mov si, di ; 89 fe ; 0xc25ad
+ add si, dx ; 01 d6 ; 0xc25af
+ mov dl, byte [si] ; 8a 14 ; 0xc25b1
+ mov byte [bp-004h], dl ; 88 56 fc ; 0xc25b3
+ mov byte [bp-003h], bh ; 88 7e fd ; 0xc25b6
+ mov dl, ah ; 88 e2 ; 0xc25b9
+ xor dh, dh ; 30 f6 ; 0xc25bb
+ test word [bp-004h], dx ; 85 56 fc ; 0xc25bd
+ je short 025c4h ; 74 02 ; 0xc25c0
+ mov bh, ch ; 88 ef ; 0xc25c2 vgabios.c:1617
+ mov dl, al ; 88 c2 ; 0xc25c4 vgabios.c:1619
+ xor dh, dh ; 30 f6 ; 0xc25c6
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc25c8
+ add si, dx ; 01 d6 ; 0xc25cb
+ mov dx, 0a000h ; ba 00 a0 ; 0xc25cd vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc25d0
+ mov byte [es:si], bh ; 26 88 3c ; 0xc25d2
+ shr ah, 1 ; d0 ec ; 0xc25d5 vgabios.c:1620
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc25d7 vgabios.c:1621
+ jmp short 025a0h ; eb c5 ; 0xc25d9
+ db 0feh, 0c3h
+ ; inc bl ; fe c3 ; 0xc25db vgabios.c:1622
+ cmp bl, 008h ; 80 fb 08 ; 0xc25dd
+ jnc short 025ffh ; 73 1d ; 0xc25e0
+ mov al, bl ; 88 d8 ; 0xc25e2
+ xor ah, ah ; 30 e4 ; 0xc25e4
+ mov dl, byte [bp+008h] ; 8a 56 08 ; 0xc25e6
+ xor dh, dh ; 30 f6 ; 0xc25e9
+ imul dx ; f7 ea ; 0xc25eb
+ mov CL, strict byte 003h ; b1 03 ; 0xc25ed
+ sal ax, CL ; d3 e0 ; 0xc25ef
+ mov dx, word [bp-002h] ; 8b 56 fe ; 0xc25f1
+ add dx, ax ; 01 c2 ; 0xc25f4
+ mov word [bp-008h], dx ; 89 56 f8 ; 0xc25f6
+ mov AH, strict byte 080h ; b4 80 ; 0xc25f9
+ xor al, al ; 30 c0 ; 0xc25fb
+ jmp short 025a4h ; eb a5 ; 0xc25fd
+ mov sp, bp ; 89 ec ; 0xc25ff vgabios.c:1623
+ pop bp ; 5d ; 0xc2601
+ pop di ; 5f ; 0xc2602
+ pop si ; 5e ; 0xc2603
+ retn 00002h ; c2 02 00 ; 0xc2604
+ ; disGetNextSymbol 0xc2607 LB 0x1f5d -> off=0x0 cb=0000000000000172 uValue=00000000000c2607 'biosfn_write_char_attr'
+biosfn_write_char_attr: ; 0xc2607 LB 0x172
+ push bp ; 55 ; 0xc2607 vgabios.c:1626
+ mov bp, sp ; 89 e5 ; 0xc2608
+ push si ; 56 ; 0xc260a
+ push di ; 57 ; 0xc260b
+ sub sp, strict byte 0001ah ; 83 ec 1a ; 0xc260c
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc260f
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc2612
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc2615
+ mov si, cx ; 89 ce ; 0xc2618
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc261a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc261d
+ mov es, ax ; 8e c0 ; 0xc2620
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2622
+ xor ah, ah ; 30 e4 ; 0xc2625 vgabios.c:1634
+ call 03888h ; e8 5e 12 ; 0xc2627
+ mov cl, al ; 88 c1 ; 0xc262a
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc262c
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc262f vgabios.c:1635
+ jne short 02636h ; 75 03 ; 0xc2631
+ jmp near 02772h ; e9 3c 01 ; 0xc2633
+ mov al, dl ; 88 d0 ; 0xc2636 vgabios.c:1638
+ xor ah, ah ; 30 e4 ; 0xc2638
+ lea bx, [bp-01ch] ; 8d 5e e4 ; 0xc263a
+ lea dx, [bp-01eh] ; 8d 56 e2 ; 0xc263d
+ call 00a97h ; e8 54 e4 ; 0xc2640
+ mov al, byte [bp-01ch] ; 8a 46 e4 ; 0xc2643 vgabios.c:1639
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc2646
+ mov ax, word [bp-01ch] ; 8b 46 e4 ; 0xc2649
+ mov al, ah ; 88 e0 ; 0xc264c
+ xor ah, ah ; 30 e4 ; 0xc264e
+ mov word [bp-018h], ax ; 89 46 e8 ; 0xc2650
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc2653
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2656
+ mov bx, 00084h ; bb 84 00 ; 0xc2659 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc265c
+ mov es, ax ; 8e c0 ; 0xc265f
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2661
+ xor ah, ah ; 30 e4 ; 0xc2664 vgabios.c:48
+ mov dx, ax ; 89 c2 ; 0xc2666
+ inc dx ; 42 ; 0xc2668
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2669 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc266c
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc266f
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc2672 vgabios.c:58
+ mov bl, cl ; 88 cb ; 0xc2675 vgabios.c:1645
+ xor bh, bh ; 30 ff ; 0xc2677
+ mov CL, strict byte 003h ; b1 03 ; 0xc2679
+ mov di, bx ; 89 df ; 0xc267b
+ sal di, CL ; d3 e7 ; 0xc267d
+ cmp byte [di+047afh], 000h ; 80 bd af 47 00 ; 0xc267f
+ jne short 026c6h ; 75 40 ; 0xc2684
+ mul dx ; f7 e2 ; 0xc2686 vgabios.c:1648
+ sal ax, 1 ; d1 e0 ; 0xc2688
+ or AL, strict byte 0ffh ; 0c ff ; 0xc268a
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc268c
+ xor dh, dh ; 30 f6 ; 0xc268f
+ inc ax ; 40 ; 0xc2691
+ mul dx ; f7 e2 ; 0xc2692
+ mov bx, ax ; 89 c3 ; 0xc2694
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc2696
+ xor ah, ah ; 30 e4 ; 0xc2699
+ mul word [bp-016h] ; f7 66 ea ; 0xc269b
+ mov dx, ax ; 89 c2 ; 0xc269e
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc26a0
+ xor ah, ah ; 30 e4 ; 0xc26a3
+ add ax, dx ; 01 d0 ; 0xc26a5
+ sal ax, 1 ; d1 e0 ; 0xc26a7
+ add bx, ax ; 01 c3 ; 0xc26a9
+ mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc26ab vgabios.c:1650
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc26ae
+ mov word [bp-01eh], ax ; 89 46 e2 ; 0xc26b1
+ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc26b4 vgabios.c:1651
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc26b7
+ mov cx, si ; 89 f1 ; 0xc26bb
+ mov di, bx ; 89 df ; 0xc26bd
+ jcxz 026c3h ; e3 02 ; 0xc26bf
+ rep stosw ; f3 ab ; 0xc26c1
+ jmp near 02772h ; e9 ac 00 ; 0xc26c3 vgabios.c:1653
+ mov bl, byte [bx+0482eh] ; 8a 9f 2e 48 ; 0xc26c6 vgabios.c:1656
+ mov CL, strict byte 006h ; b1 06 ; 0xc26ca
+ sal bx, CL ; d3 e3 ; 0xc26cc
+ mov al, byte [bx+04844h] ; 8a 87 44 48 ; 0xc26ce
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc26d2
+ mov al, byte [di+047b1h] ; 8a 85 b1 47 ; 0xc26d5 vgabios.c:1657
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc26d9
+ dec si ; 4e ; 0xc26dc vgabios.c:1658
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc26dd
+ je short 0272eh ; 74 4c ; 0xc26e0
+ mov bl, byte [bp-014h] ; 8a 5e ec ; 0xc26e2 vgabios.c:1660
+ xor bh, bh ; 30 ff ; 0xc26e5
+ mov CL, strict byte 003h ; b1 03 ; 0xc26e7
+ sal bx, CL ; d3 e3 ; 0xc26e9
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc26eb
+ cmp al, cl ; 38 c8 ; 0xc26ef
+ jc short 026ffh ; 72 0c ; 0xc26f1
+ jbe short 02705h ; 76 10 ; 0xc26f3
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc26f5
+ je short 02751h ; 74 58 ; 0xc26f7
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc26f9
+ je short 02709h ; 74 0c ; 0xc26fb
+ jmp short 0276ch ; eb 6d ; 0xc26fd
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc26ff
+ je short 02730h ; 74 2d ; 0xc2701
+ jmp short 0276ch ; eb 67 ; 0xc2703
+ or byte [bp-008h], 001h ; 80 4e f8 01 ; 0xc2705 vgabios.c:1663
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2709 vgabios.c:1665
+ xor ah, ah ; 30 e4 ; 0xc270c
+ push ax ; 50 ; 0xc270e
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc270f
+ push ax ; 50 ; 0xc2712
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc2713
+ push ax ; 50 ; 0xc2716
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc2717
+ xor ch, ch ; 30 ed ; 0xc271a
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc271c
+ xor bh, bh ; 30 ff ; 0xc271f
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2721
+ xor dh, dh ; 30 f6 ; 0xc2724
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2726
+ call 02342h ; e8 16 fc ; 0xc2729
+ jmp short 0276ch ; eb 3e ; 0xc272c vgabios.c:1666
+ jmp short 02772h ; eb 42 ; 0xc272e
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc2730 vgabios.c:1668
+ xor ah, ah ; 30 e4 ; 0xc2733
+ push ax ; 50 ; 0xc2735
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc2736
+ push ax ; 50 ; 0xc2739
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc273a
+ xor ch, ch ; 30 ed ; 0xc273d
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc273f
+ xor bh, bh ; 30 ff ; 0xc2742
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2744
+ xor dh, dh ; 30 f6 ; 0xc2747
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2749
+ call 02454h ; e8 05 fd ; 0xc274c
+ jmp short 0276ch ; eb 1b ; 0xc274f vgabios.c:1669
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc2751 vgabios.c:1671
+ xor ah, ah ; 30 e4 ; 0xc2754
+ push ax ; 50 ; 0xc2756
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc2757
+ xor ch, ch ; 30 ed ; 0xc275a
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc275c
+ xor bh, bh ; 30 ff ; 0xc275f
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc2761
+ xor dh, dh ; 30 f6 ; 0xc2764
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2766
+ call 02566h ; e8 fa fd ; 0xc2769
+ inc byte [bp-00ah] ; fe 46 f6 ; 0xc276c vgabios.c:1678
+ jmp near 026dch ; e9 6a ff ; 0xc276f vgabios.c:1679
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2772 vgabios.c:1681
+ pop di ; 5f ; 0xc2775
+ pop si ; 5e ; 0xc2776
+ pop bp ; 5d ; 0xc2777
+ retn ; c3 ; 0xc2778
+ ; disGetNextSymbol 0xc2779 LB 0x1deb -> off=0x0 cb=0000000000000183 uValue=00000000000c2779 'biosfn_write_char_only'
+biosfn_write_char_only: ; 0xc2779 LB 0x183
+ push bp ; 55 ; 0xc2779 vgabios.c:1684
+ mov bp, sp ; 89 e5 ; 0xc277a
+ push si ; 56 ; 0xc277c
+ push di ; 57 ; 0xc277d
+ sub sp, strict byte 0001ah ; 83 ec 1a ; 0xc277e
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc2781
+ mov byte [bp-00eh], dl ; 88 56 f2 ; 0xc2784
+ mov byte [bp-008h], bl ; 88 5e f8 ; 0xc2787
+ mov si, cx ; 89 ce ; 0xc278a
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc278c vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc278f
+ mov es, ax ; 8e c0 ; 0xc2792
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2794
+ xor ah, ah ; 30 e4 ; 0xc2797 vgabios.c:1692
+ call 03888h ; e8 ec 10 ; 0xc2799
+ mov cl, al ; 88 c1 ; 0xc279c
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc279e
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc27a1 vgabios.c:1693
+ jne short 027a8h ; 75 03 ; 0xc27a3
+ jmp near 028f5h ; e9 4d 01 ; 0xc27a5
+ mov al, dl ; 88 d0 ; 0xc27a8 vgabios.c:1696
+ xor ah, ah ; 30 e4 ; 0xc27aa
+ lea bx, [bp-01eh] ; 8d 5e e2 ; 0xc27ac
+ lea dx, [bp-01ch] ; 8d 56 e4 ; 0xc27af
+ call 00a97h ; e8 e2 e2 ; 0xc27b2
+ mov al, byte [bp-01eh] ; 8a 46 e2 ; 0xc27b5 vgabios.c:1697
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc27b8
+ mov ax, word [bp-01eh] ; 8b 46 e2 ; 0xc27bb
+ mov al, ah ; 88 e0 ; 0xc27be
+ xor ah, ah ; 30 e4 ; 0xc27c0
+ mov word [bp-01ah], ax ; 89 46 e6 ; 0xc27c2
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc27c5
+ mov byte [bp-00ch], al ; 88 46 f4 ; 0xc27c8
+ mov bx, 00084h ; bb 84 00 ; 0xc27cb vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc27ce
+ mov es, ax ; 8e c0 ; 0xc27d1
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc27d3
+ xor ah, ah ; 30 e4 ; 0xc27d6 vgabios.c:48
+ mov dx, ax ; 89 c2 ; 0xc27d8
+ inc dx ; 42 ; 0xc27da
+ mov di, strict word 0004ah ; bf 4a 00 ; 0xc27db vgabios.c:57
+ mov di, word [es:di] ; 26 8b 3d ; 0xc27de
+ mov word [bp-018h], di ; 89 7e e8 ; 0xc27e1 vgabios.c:58
+ mov al, cl ; 88 c8 ; 0xc27e4 vgabios.c:1703
+ mov CL, strict byte 003h ; b1 03 ; 0xc27e6
+ mov bx, ax ; 89 c3 ; 0xc27e8
+ sal bx, CL ; d3 e3 ; 0xc27ea
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc27ec
+ jne short 02838h ; 75 45 ; 0xc27f1
+ mov ax, di ; 89 f8 ; 0xc27f3 vgabios.c:1706
+ mul dx ; f7 e2 ; 0xc27f5
+ sal ax, 1 ; d1 e0 ; 0xc27f7
+ or AL, strict byte 0ffh ; 0c ff ; 0xc27f9
+ mov dl, byte [bp-00eh] ; 8a 56 f2 ; 0xc27fb
+ xor dh, dh ; 30 f6 ; 0xc27fe
+ inc ax ; 40 ; 0xc2800
+ mul dx ; f7 e2 ; 0xc2801
+ mov bx, ax ; 89 c3 ; 0xc2803
+ mov al, byte [bp-01ah] ; 8a 46 e6 ; 0xc2805
+ xor ah, ah ; 30 e4 ; 0xc2808
+ mul di ; f7 e7 ; 0xc280a
+ mov dx, ax ; 89 c2 ; 0xc280c
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc280e
+ xor ah, ah ; 30 e4 ; 0xc2811
+ add ax, dx ; 01 d0 ; 0xc2813
+ sal ax, 1 ; d1 e0 ; 0xc2815
+ add bx, ax ; 01 c3 ; 0xc2817
+ dec si ; 4e ; 0xc2819 vgabios.c:1708
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc281a
+ je short 027a5h ; 74 86 ; 0xc281d
+ mov al, byte [bp-010h] ; 8a 46 f0 ; 0xc281f vgabios.c:1709
+ xor ah, ah ; 30 e4 ; 0xc2822
+ mov CL, strict byte 003h ; b1 03 ; 0xc2824
+ mov di, ax ; 89 c7 ; 0xc2826
+ sal di, CL ; d3 e7 ; 0xc2828
+ mov es, [di+047b2h] ; 8e 85 b2 47 ; 0xc282a vgabios.c:50
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc282e vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2831
+ inc bx ; 43 ; 0xc2834 vgabios.c:1710
+ inc bx ; 43 ; 0xc2835
+ jmp short 02819h ; eb e1 ; 0xc2836 vgabios.c:1711
+ mov di, ax ; 89 c7 ; 0xc2838 vgabios.c:1716
+ mov al, byte [di+0482eh] ; 8a 85 2e 48 ; 0xc283a
+ mov CL, strict byte 006h ; b1 06 ; 0xc283e
+ mov di, ax ; 89 c7 ; 0xc2840
+ sal di, CL ; d3 e7 ; 0xc2842
+ mov al, byte [di+04844h] ; 8a 85 44 48 ; 0xc2844
+ mov byte [bp-012h], al ; 88 46 ee ; 0xc2848
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc284b vgabios.c:1717
+ mov byte [bp-014h], al ; 88 46 ec ; 0xc284f
+ dec si ; 4e ; 0xc2852 vgabios.c:1718
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc2853
+ je short 028a8h ; 74 50 ; 0xc2856
+ mov bl, byte [bp-010h] ; 8a 5e f0 ; 0xc2858 vgabios.c:1720
+ xor bh, bh ; 30 ff ; 0xc285b
+ mov CL, strict byte 003h ; b1 03 ; 0xc285d
+ sal bx, CL ; d3 e3 ; 0xc285f
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc2861
+ cmp bl, cl ; 38 cb ; 0xc2865
+ jc short 02878h ; 72 0f ; 0xc2867
+ jbe short 0287fh ; 76 14 ; 0xc2869
+ cmp bl, 005h ; 80 fb 05 ; 0xc286b
+ je short 028d4h ; 74 64 ; 0xc286e
+ cmp bl, 004h ; 80 fb 04 ; 0xc2870
+ je short 02883h ; 74 0e ; 0xc2873
+ jmp near 028efh ; e9 77 00 ; 0xc2875
+ cmp bl, 002h ; 80 fb 02 ; 0xc2878
+ je short 028aah ; 74 2d ; 0xc287b
+ jmp short 028efh ; eb 70 ; 0xc287d
+ or byte [bp-008h], 001h ; 80 4e f8 01 ; 0xc287f vgabios.c:1723
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2883 vgabios.c:1725
+ xor ah, ah ; 30 e4 ; 0xc2886
+ push ax ; 50 ; 0xc2888
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc2889
+ push ax ; 50 ; 0xc288c
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc288d
+ push ax ; 50 ; 0xc2890
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc2891
+ xor ch, ch ; 30 ed ; 0xc2894
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2896
+ xor bh, bh ; 30 ff ; 0xc2899
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc289b
+ xor dh, dh ; 30 f6 ; 0xc289e
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc28a0
+ call 02342h ; e8 9c fa ; 0xc28a3
+ jmp short 028efh ; eb 47 ; 0xc28a6 vgabios.c:1726
+ jmp short 028f5h ; eb 4b ; 0xc28a8
+ mov al, byte [bp-014h] ; 8a 46 ec ; 0xc28aa vgabios.c:1728
+ xor ah, ah ; 30 e4 ; 0xc28ad
+ push ax ; 50 ; 0xc28af
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc28b0
+ push ax ; 50 ; 0xc28b3
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc28b4
+ xor ch, ch ; 30 ed ; 0xc28b7
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc28b9
+ xor bh, bh ; 30 ff ; 0xc28bc
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc28be
+ xor dh, dh ; 30 f6 ; 0xc28c1
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc28c3
+ mov byte [bp-016h], al ; 88 46 ea ; 0xc28c6
+ mov byte [bp-015h], ah ; 88 66 eb ; 0xc28c9
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc28cc
+ call 02454h ; e8 82 fb ; 0xc28cf
+ jmp short 028efh ; eb 1b ; 0xc28d2 vgabios.c:1729
+ mov al, byte [bp-018h] ; 8a 46 e8 ; 0xc28d4 vgabios.c:1731
+ xor ah, ah ; 30 e4 ; 0xc28d7
+ push ax ; 50 ; 0xc28d9
+ mov cl, byte [bp-00ch] ; 8a 4e f4 ; 0xc28da
+ xor ch, ch ; 30 ed ; 0xc28dd
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc28df
+ xor bh, bh ; 30 ff ; 0xc28e2
+ mov dl, byte [bp-008h] ; 8a 56 f8 ; 0xc28e4
+ xor dh, dh ; 30 f6 ; 0xc28e7
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc28e9
+ call 02566h ; e8 77 fc ; 0xc28ec
+ inc byte [bp-006h] ; fe 46 fa ; 0xc28ef vgabios.c:1738
+ jmp near 02852h ; e9 5d ff ; 0xc28f2 vgabios.c:1739
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc28f5 vgabios.c:1741
+ pop di ; 5f ; 0xc28f8
+ pop si ; 5e ; 0xc28f9
+ pop bp ; 5d ; 0xc28fa
+ retn ; c3 ; 0xc28fb
+ ; disGetNextSymbol 0xc28fc LB 0x1c68 -> off=0x0 cb=000000000000017a uValue=00000000000c28fc 'biosfn_write_pixel'
+biosfn_write_pixel: ; 0xc28fc LB 0x17a
+ push bp ; 55 ; 0xc28fc vgabios.c:1744
+ mov bp, sp ; 89 e5 ; 0xc28fd
+ push si ; 56 ; 0xc28ff
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc2900
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2903
+ mov byte [bp-004h], dl ; 88 56 fc ; 0xc2906
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc2909
+ mov word [bp-00ah], cx ; 89 4e f6 ; 0xc290c
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc290f vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2912
+ mov es, ax ; 8e c0 ; 0xc2915
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2917
+ xor ah, ah ; 30 e4 ; 0xc291a vgabios.c:1751
+ call 03888h ; e8 69 0f ; 0xc291c
+ mov ch, al ; 88 c5 ; 0xc291f
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc2921 vgabios.c:1752
+ je short 0294ch ; 74 27 ; 0xc2923
+ mov bl, al ; 88 c3 ; 0xc2925 vgabios.c:1753
+ xor bh, bh ; 30 ff ; 0xc2927
+ mov CL, strict byte 003h ; b1 03 ; 0xc2929
+ sal bx, CL ; d3 e3 ; 0xc292b
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc292d
+ je short 0294ch ; 74 18 ; 0xc2932
+ mov al, byte [bx+047b0h] ; 8a 87 b0 47 ; 0xc2934 vgabios.c:1755
+ cmp al, cl ; 38 c8 ; 0xc2938
+ jc short 02948h ; 72 0c ; 0xc293a
+ jbe short 02952h ; 76 14 ; 0xc293c
+ cmp AL, strict byte 005h ; 3c 05 ; 0xc293e
+ je short 0294fh ; 74 0d ; 0xc2940
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc2942
+ je short 02952h ; 74 0c ; 0xc2944
+ jmp short 0294ch ; eb 04 ; 0xc2946
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc2948
+ je short 029c4h ; 74 78 ; 0xc294a
+ jmp near 02a4fh ; e9 00 01 ; 0xc294c
+ jmp near 02a55h ; e9 03 01 ; 0xc294f
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2952 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2955
+ mov es, ax ; 8e c0 ; 0xc2958
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc295a
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc295d vgabios.c:58
+ mul dx ; f7 e2 ; 0xc2960
+ mov CL, strict byte 003h ; b1 03 ; 0xc2962
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2964
+ shr bx, CL ; d3 eb ; 0xc2967
+ add bx, ax ; 01 c3 ; 0xc2969
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc296b vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc296e
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc2971 vgabios.c:58
+ xor dh, dh ; 30 f6 ; 0xc2974
+ mul dx ; f7 e2 ; 0xc2976
+ add bx, ax ; 01 c3 ; 0xc2978
+ mov cx, word [bp-008h] ; 8b 4e f8 ; 0xc297a vgabios.c:1761
+ and cl, 007h ; 80 e1 07 ; 0xc297d
+ mov ax, 00080h ; b8 80 00 ; 0xc2980
+ sar ax, CL ; d3 f8 ; 0xc2983
+ mov ah, al ; 88 c4 ; 0xc2985 vgabios.c:1762
+ xor al, al ; 30 c0 ; 0xc2987
+ or AL, strict byte 008h ; 0c 08 ; 0xc2989
+ mov dx, 003ceh ; ba ce 03 ; 0xc298b
+ out DX, ax ; ef ; 0xc298e
+ mov ax, 00205h ; b8 05 02 ; 0xc298f vgabios.c:1763
+ out DX, ax ; ef ; 0xc2992
+ mov dx, bx ; 89 da ; 0xc2993 vgabios.c:1764
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2995
+ call 038b3h ; e8 18 0f ; 0xc2998
+ test byte [bp-004h], 080h ; f6 46 fc 80 ; 0xc299b vgabios.c:1765
+ je short 029a8h ; 74 07 ; 0xc299f
+ mov ax, 01803h ; b8 03 18 ; 0xc29a1 vgabios.c:1767
+ mov dx, 003ceh ; ba ce 03 ; 0xc29a4
+ out DX, ax ; ef ; 0xc29a7
+ mov ax, 0a000h ; b8 00 a0 ; 0xc29a8 vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc29ab
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc29ad
+ mov byte [es:bx], al ; 26 88 07 ; 0xc29b0
+ mov ax, 0ff08h ; b8 08 ff ; 0xc29b3 vgabios.c:1770
+ mov dx, 003ceh ; ba ce 03 ; 0xc29b6
+ out DX, ax ; ef ; 0xc29b9
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc29ba vgabios.c:1771
+ out DX, ax ; ef ; 0xc29bd
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc29be vgabios.c:1772
+ out DX, ax ; ef ; 0xc29c1
+ jmp short 0294ch ; eb 88 ; 0xc29c2 vgabios.c:1773
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc29c4 vgabios.c:1775
+ shr ax, 1 ; d1 e8 ; 0xc29c7
+ mov dx, strict word 00050h ; ba 50 00 ; 0xc29c9
+ mul dx ; f7 e2 ; 0xc29cc
+ cmp byte [bx+047b1h], 002h ; 80 bf b1 47 02 ; 0xc29ce
+ jne short 029deh ; 75 09 ; 0xc29d3
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc29d5 vgabios.c:1777
+ shr bx, 1 ; d1 eb ; 0xc29d8
+ shr bx, 1 ; d1 eb ; 0xc29da
+ jmp short 029e3h ; eb 05 ; 0xc29dc vgabios.c:1779
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc29de vgabios.c:1781
+ shr bx, CL ; d3 eb ; 0xc29e1
+ add bx, ax ; 01 c3 ; 0xc29e3
+ test byte [bp-00ah], 001h ; f6 46 f6 01 ; 0xc29e5 vgabios.c:1783
+ je short 029eeh ; 74 03 ; 0xc29e9
+ add bh, 020h ; 80 c7 20 ; 0xc29eb
+ mov ax, 0b800h ; b8 00 b8 ; 0xc29ee vgabios.c:47
+ mov es, ax ; 8e c0 ; 0xc29f1
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc29f3
+ mov dl, ch ; 88 ea ; 0xc29f6 vgabios.c:1785
+ xor dh, dh ; 30 f6 ; 0xc29f8
+ mov CL, strict byte 003h ; b1 03 ; 0xc29fa
+ mov si, dx ; 89 d6 ; 0xc29fc
+ sal si, CL ; d3 e6 ; 0xc29fe
+ cmp byte [si+047b1h], 002h ; 80 bc b1 47 02 ; 0xc2a00
+ jne short 02a21h ; 75 1a ; 0xc2a05
+ mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc2a07 vgabios.c:1787
+ and ah, cl ; 20 cc ; 0xc2a0a
+ mov dl, cl ; 88 ca ; 0xc2a0c
+ sub dl, ah ; 28 e2 ; 0xc2a0e
+ mov ah, dl ; 88 d4 ; 0xc2a10
+ sal ah, 1 ; d0 e4 ; 0xc2a12
+ mov dl, byte [bp-004h] ; 8a 56 fc ; 0xc2a14
+ and dl, cl ; 20 ca ; 0xc2a17
+ mov cl, ah ; 88 e1 ; 0xc2a19
+ sal dl, CL ; d2 e2 ; 0xc2a1b
+ mov AH, strict byte 003h ; b4 03 ; 0xc2a1d vgabios.c:1788
+ jmp short 02a35h ; eb 14 ; 0xc2a1f vgabios.c:1790
+ mov ah, byte [bp-008h] ; 8a 66 f8 ; 0xc2a21 vgabios.c:1792
+ and ah, 007h ; 80 e4 07 ; 0xc2a24
+ mov CL, strict byte 007h ; b1 07 ; 0xc2a27
+ sub cl, ah ; 28 e1 ; 0xc2a29
+ mov dl, byte [bp-004h] ; 8a 56 fc ; 0xc2a2b
+ and dl, 001h ; 80 e2 01 ; 0xc2a2e
+ sal dl, CL ; d2 e2 ; 0xc2a31
+ mov AH, strict byte 001h ; b4 01 ; 0xc2a33 vgabios.c:1793
+ sal ah, CL ; d2 e4 ; 0xc2a35
+ test byte [bp-004h], 080h ; f6 46 fc 80 ; 0xc2a37 vgabios.c:1795
+ je short 02a41h ; 74 04 ; 0xc2a3b
+ xor al, dl ; 30 d0 ; 0xc2a3d vgabios.c:1797
+ jmp short 02a47h ; eb 06 ; 0xc2a3f vgabios.c:1799
+ not ah ; f6 d4 ; 0xc2a41 vgabios.c:1801
+ and al, ah ; 20 e0 ; 0xc2a43
+ or al, dl ; 08 d0 ; 0xc2a45 vgabios.c:1802
+ mov dx, 0b800h ; ba 00 b8 ; 0xc2a47 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc2a4a
+ mov byte [es:bx], al ; 26 88 07 ; 0xc2a4c
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2a4f vgabios.c:1805
+ pop si ; 5e ; 0xc2a52
+ pop bp ; 5d ; 0xc2a53
+ retn ; c3 ; 0xc2a54
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2a55 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2a58
+ mov es, ax ; 8e c0 ; 0xc2a5b
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc2a5d
+ sal dx, CL ; d3 e2 ; 0xc2a60 vgabios.c:58
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc2a62
+ mul dx ; f7 e2 ; 0xc2a65
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc2a67
+ add bx, ax ; 01 c3 ; 0xc2a6a
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2a6c vgabios.c:52
+ mov es, ax ; 8e c0 ; 0xc2a6f
+ mov al, byte [bp-004h] ; 8a 46 fc ; 0xc2a71
+ jmp short 02a4ch ; eb d6 ; 0xc2a74
+ ; disGetNextSymbol 0xc2a76 LB 0x1aee -> off=0x0 cb=0000000000000263 uValue=00000000000c2a76 'biosfn_write_teletype'
+biosfn_write_teletype: ; 0xc2a76 LB 0x263
+ push bp ; 55 ; 0xc2a76 vgabios.c:1818
+ mov bp, sp ; 89 e5 ; 0xc2a77
+ push si ; 56 ; 0xc2a79
+ sub sp, strict byte 00016h ; 83 ec 16 ; 0xc2a7a
+ mov ch, al ; 88 c5 ; 0xc2a7d
+ mov byte [bp-00ah], dl ; 88 56 f6 ; 0xc2a7f
+ mov byte [bp-00ch], bl ; 88 5e f4 ; 0xc2a82
+ mov byte [bp-004h], cl ; 88 4e fc ; 0xc2a85
+ cmp dl, 0ffh ; 80 fa ff ; 0xc2a88 vgabios.c:1826
+ jne short 02a9bh ; 75 0e ; 0xc2a8b
+ mov bx, strict word 00062h ; bb 62 00 ; 0xc2a8d vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2a90
+ mov es, ax ; 8e c0 ; 0xc2a93
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2a95
+ mov byte [bp-00ah], al ; 88 46 f6 ; 0xc2a98 vgabios.c:48
+ mov bx, strict word 00049h ; bb 49 00 ; 0xc2a9b vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2a9e
+ mov es, ax ; 8e c0 ; 0xc2aa1
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2aa3
+ xor ah, ah ; 30 e4 ; 0xc2aa6 vgabios.c:1831
+ call 03888h ; e8 dd 0d ; 0xc2aa8
+ mov byte [bp-00eh], al ; 88 46 f2 ; 0xc2aab
+ cmp AL, strict byte 0ffh ; 3c ff ; 0xc2aae vgabios.c:1832
+ je short 02b17h ; 74 65 ; 0xc2ab0
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2ab2 vgabios.c:1835
+ xor ah, ah ; 30 e4 ; 0xc2ab5
+ lea bx, [bp-016h] ; 8d 5e ea ; 0xc2ab7
+ lea dx, [bp-018h] ; 8d 56 e8 ; 0xc2aba
+ call 00a97h ; e8 d7 df ; 0xc2abd
+ mov al, byte [bp-016h] ; 8a 46 ea ; 0xc2ac0 vgabios.c:1836
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2ac3
+ mov ax, word [bp-016h] ; 8b 46 ea ; 0xc2ac6
+ mov al, ah ; 88 e0 ; 0xc2ac9
+ xor ah, ah ; 30 e4 ; 0xc2acb
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc2acd
+ mov bx, 00084h ; bb 84 00 ; 0xc2ad0 vgabios.c:47
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc2ad3
+ mov es, dx ; 8e c2 ; 0xc2ad6
+ mov dl, byte [es:bx] ; 26 8a 17 ; 0xc2ad8
+ xor dh, dh ; 30 f6 ; 0xc2adb vgabios.c:48
+ inc dx ; 42 ; 0xc2add
+ mov word [bp-014h], dx ; 89 56 ec ; 0xc2ade
+ mov bx, strict word 0004ah ; bb 4a 00 ; 0xc2ae1 vgabios.c:57
+ mov dx, word [es:bx] ; 26 8b 17 ; 0xc2ae4
+ mov word [bp-012h], dx ; 89 56 ee ; 0xc2ae7 vgabios.c:58
+ cmp ch, 008h ; 80 fd 08 ; 0xc2aea vgabios.c:1842
+ jc short 02afdh ; 72 0e ; 0xc2aed
+ jbe short 02b05h ; 76 14 ; 0xc2aef
+ cmp ch, 00dh ; 80 fd 0d ; 0xc2af1
+ je short 02b1ah ; 74 24 ; 0xc2af4
+ cmp ch, 00ah ; 80 fd 0a ; 0xc2af6
+ je short 02b10h ; 74 15 ; 0xc2af9
+ jmp short 02b20h ; eb 23 ; 0xc2afb
+ cmp ch, 007h ; 80 fd 07 ; 0xc2afd
+ jne short 02b20h ; 75 1e ; 0xc2b00
+ jmp near 02c28h ; e9 23 01 ; 0xc2b02
+ cmp byte [bp-006h], 000h ; 80 7e fa 00 ; 0xc2b05 vgabios.c:1849
+ jbe short 02b1dh ; 76 12 ; 0xc2b09
+ dec byte [bp-006h] ; fe 4e fa ; 0xc2b0b
+ jmp short 02b1dh ; eb 0d ; 0xc2b0e vgabios.c:1850
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc2b10 vgabios.c:1853
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc2b12
+ jmp short 02b1dh ; eb 06 ; 0xc2b15 vgabios.c:1854
+ jmp near 02cd3h ; e9 b9 01 ; 0xc2b17
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc2b1a vgabios.c:1857
+ jmp near 02c28h ; e9 08 01 ; 0xc2b1d vgabios.c:1858
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc2b20 vgabios.c:1862
+ xor ah, ah ; 30 e4 ; 0xc2b23
+ mov CL, strict byte 003h ; b1 03 ; 0xc2b25
+ mov bx, ax ; 89 c3 ; 0xc2b27
+ sal bx, CL ; d3 e3 ; 0xc2b29
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc2b2b
+ jne short 02b74h ; 75 42 ; 0xc2b30
+ mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2b32 vgabios.c:1865
+ mul word [bp-014h] ; f7 66 ec ; 0xc2b35
+ sal ax, 1 ; d1 e0 ; 0xc2b38
+ or AL, strict byte 0ffh ; 0c ff ; 0xc2b3a
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc2b3c
+ xor dh, dh ; 30 f6 ; 0xc2b3f
+ inc ax ; 40 ; 0xc2b41
+ mul dx ; f7 e2 ; 0xc2b42
+ mov si, ax ; 89 c6 ; 0xc2b44
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2b46
+ xor ah, ah ; 30 e4 ; 0xc2b49
+ mul word [bp-012h] ; f7 66 ee ; 0xc2b4b
+ mov dx, ax ; 89 c2 ; 0xc2b4e
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2b50
+ xor ah, ah ; 30 e4 ; 0xc2b53
+ add ax, dx ; 01 d0 ; 0xc2b55
+ sal ax, 1 ; d1 e0 ; 0xc2b57
+ add si, ax ; 01 c6 ; 0xc2b59
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2b5b vgabios.c:50
+ mov byte [es:si], ch ; 26 88 2c ; 0xc2b5f vgabios.c:52
+ cmp cl, byte [bp-004h] ; 3a 4e fc ; 0xc2b62 vgabios.c:1870
+ jne short 02ba4h ; 75 3d ; 0xc2b65
+ inc si ; 46 ; 0xc2b67 vgabios.c:1871
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2b68 vgabios.c:50
+ mov al, byte [bp-00ch] ; 8a 46 f4 ; 0xc2b6c
+ mov byte [es:si], al ; 26 88 04 ; 0xc2b6f
+ jmp short 02ba4h ; eb 30 ; 0xc2b72 vgabios.c:1873
+ mov si, ax ; 89 c6 ; 0xc2b74 vgabios.c:1876
+ mov al, byte [si+0482eh] ; 8a 84 2e 48 ; 0xc2b76
+ mov CL, strict byte 006h ; b1 06 ; 0xc2b7a
+ mov si, ax ; 89 c6 ; 0xc2b7c
+ sal si, CL ; d3 e6 ; 0xc2b7e
+ mov dl, byte [si+04844h] ; 8a 94 44 48 ; 0xc2b80
+ mov al, byte [bx+047b1h] ; 8a 87 b1 47 ; 0xc2b84 vgabios.c:1877
+ mov bl, byte [bx+047b0h] ; 8a 9f b0 47 ; 0xc2b88 vgabios.c:1878
+ cmp bl, 003h ; 80 fb 03 ; 0xc2b8c
+ jc short 02b9fh ; 72 0e ; 0xc2b8f
+ jbe short 02ba6h ; 76 13 ; 0xc2b91
+ cmp bl, 005h ; 80 fb 05 ; 0xc2b93
+ je short 02bf6h ; 74 5e ; 0xc2b96
+ cmp bl, 004h ; 80 fb 04 ; 0xc2b98
+ je short 02baah ; 74 0d ; 0xc2b9b
+ jmp short 02c15h ; eb 76 ; 0xc2b9d
+ cmp bl, 002h ; 80 fb 02 ; 0xc2b9f
+ je short 02bd4h ; 74 30 ; 0xc2ba2
+ jmp short 02c15h ; eb 6f ; 0xc2ba4
+ or byte [bp-00ch], 001h ; 80 4e f4 01 ; 0xc2ba6 vgabios.c:1881
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2baa vgabios.c:1883
+ xor ah, ah ; 30 e4 ; 0xc2bad
+ push ax ; 50 ; 0xc2baf
+ mov al, dl ; 88 d0 ; 0xc2bb0
+ push ax ; 50 ; 0xc2bb2
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc2bb3
+ push ax ; 50 ; 0xc2bb6
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2bb7
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2bba
+ xor bh, bh ; 30 ff ; 0xc2bbd
+ mov dl, byte [bp-00ch] ; 8a 56 f4 ; 0xc2bbf
+ xor dh, dh ; 30 f6 ; 0xc2bc2
+ mov byte [bp-010h], ch ; 88 6e f0 ; 0xc2bc4
+ mov byte [bp-00fh], ah ; 88 66 f1 ; 0xc2bc7
+ mov cx, ax ; 89 c1 ; 0xc2bca
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2bcc
+ call 02342h ; e8 70 f7 ; 0xc2bcf
+ jmp short 02c15h ; eb 41 ; 0xc2bd2 vgabios.c:1884
+ push ax ; 50 ; 0xc2bd4 vgabios.c:1886
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc2bd5
+ push ax ; 50 ; 0xc2bd8
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2bd9
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2bdc
+ xor bh, bh ; 30 ff ; 0xc2bdf
+ mov dl, byte [bp-00ch] ; 8a 56 f4 ; 0xc2be1
+ xor dh, dh ; 30 f6 ; 0xc2be4
+ mov byte [bp-010h], ch ; 88 6e f0 ; 0xc2be6
+ mov byte [bp-00fh], ah ; 88 66 f1 ; 0xc2be9
+ mov cx, ax ; 89 c1 ; 0xc2bec
+ mov ax, word [bp-010h] ; 8b 46 f0 ; 0xc2bee
+ call 02454h ; e8 60 f8 ; 0xc2bf1
+ jmp short 02c15h ; eb 1f ; 0xc2bf4 vgabios.c:1887
+ mov al, byte [bp-012h] ; 8a 46 ee ; 0xc2bf6 vgabios.c:1889
+ push ax ; 50 ; 0xc2bf9
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2bfa
+ mov byte [bp-010h], al ; 88 46 f0 ; 0xc2bfd
+ mov byte [bp-00fh], ah ; 88 66 f1 ; 0xc2c00
+ mov bl, byte [bp-006h] ; 8a 5e fa ; 0xc2c03
+ xor bh, bh ; 30 ff ; 0xc2c06
+ mov dl, byte [bp-00ch] ; 8a 56 f4 ; 0xc2c08
+ xor dh, dh ; 30 f6 ; 0xc2c0b
+ mov al, ch ; 88 e8 ; 0xc2c0d
+ mov cx, word [bp-010h] ; 8b 4e f0 ; 0xc2c0f
+ call 02566h ; e8 51 f9 ; 0xc2c12
+ inc byte [bp-006h] ; fe 46 fa ; 0xc2c15 vgabios.c:1897
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2c18 vgabios.c:1899
+ xor ah, ah ; 30 e4 ; 0xc2c1b
+ cmp ax, word [bp-012h] ; 3b 46 ee ; 0xc2c1d
+ jne short 02c28h ; 75 06 ; 0xc2c20
+ mov byte [bp-006h], ah ; 88 66 fa ; 0xc2c22 vgabios.c:1900
+ inc byte [bp-008h] ; fe 46 f8 ; 0xc2c25 vgabios.c:1901
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c28 vgabios.c:1906
+ xor ah, ah ; 30 e4 ; 0xc2c2b
+ cmp ax, word [bp-014h] ; 3b 46 ec ; 0xc2c2d
+ jne short 02c96h ; 75 64 ; 0xc2c30
+ mov bl, byte [bp-00eh] ; 8a 5e f2 ; 0xc2c32 vgabios.c:1908
+ xor bh, bh ; 30 ff ; 0xc2c35
+ mov CL, strict byte 003h ; b1 03 ; 0xc2c37
+ sal bx, CL ; d3 e3 ; 0xc2c39
+ mov cl, byte [bp-014h] ; 8a 4e ec ; 0xc2c3b
+ db 0feh, 0c9h
+ ; dec cl ; fe c9 ; 0xc2c3e
+ mov ch, byte [bp-012h] ; 8a 6e ee ; 0xc2c40
+ db 0feh, 0cdh
+ ; dec ch ; fe cd ; 0xc2c43
+ cmp byte [bx+047afh], 000h ; 80 bf af 47 00 ; 0xc2c45
+ jne short 02c98h ; 75 4c ; 0xc2c4a
+ mov ax, word [bp-012h] ; 8b 46 ee ; 0xc2c4c vgabios.c:1910
+ mul word [bp-014h] ; f7 66 ec ; 0xc2c4f
+ sal ax, 1 ; d1 e0 ; 0xc2c52
+ or AL, strict byte 0ffh ; 0c ff ; 0xc2c54
+ mov dl, byte [bp-00ah] ; 8a 56 f6 ; 0xc2c56
+ xor dh, dh ; 30 f6 ; 0xc2c59
+ inc ax ; 40 ; 0xc2c5b
+ mul dx ; f7 e2 ; 0xc2c5c
+ mov si, ax ; 89 c6 ; 0xc2c5e
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2c60
+ xor ah, ah ; 30 e4 ; 0xc2c63
+ dec ax ; 48 ; 0xc2c65
+ mul word [bp-012h] ; f7 66 ee ; 0xc2c66
+ mov dx, ax ; 89 c2 ; 0xc2c69
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2c6b
+ xor ah, ah ; 30 e4 ; 0xc2c6e
+ add ax, dx ; 01 d0 ; 0xc2c70
+ sal ax, 1 ; d1 e0 ; 0xc2c72
+ add si, ax ; 01 c6 ; 0xc2c74
+ inc si ; 46 ; 0xc2c76 vgabios.c:1911
+ mov es, [bx+047b2h] ; 8e 87 b2 47 ; 0xc2c77 vgabios.c:45
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc2c7b vgabios.c:47
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc2c7e vgabios.c:1912
+ push ax ; 50 ; 0xc2c81
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2c82
+ xor ah, ah ; 30 e4 ; 0xc2c85
+ push ax ; 50 ; 0xc2c87
+ mov al, ch ; 88 e8 ; 0xc2c88
+ push ax ; 50 ; 0xc2c8a
+ mov al, cl ; 88 c8 ; 0xc2c8b
+ push ax ; 50 ; 0xc2c8d
+ xor dh, dh ; 30 f6 ; 0xc2c8e
+ xor cx, cx ; 31 c9 ; 0xc2c90
+ xor bx, bx ; 31 db ; 0xc2c92
+ jmp short 02caeh ; eb 18 ; 0xc2c94 vgabios.c:1914
+ jmp short 02cb7h ; eb 1f ; 0xc2c96
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc2c98 vgabios.c:1916
+ push ax ; 50 ; 0xc2c9b
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2c9c
+ xor ah, ah ; 30 e4 ; 0xc2c9f
+ push ax ; 50 ; 0xc2ca1
+ mov al, ch ; 88 e8 ; 0xc2ca2
+ push ax ; 50 ; 0xc2ca4
+ mov al, cl ; 88 c8 ; 0xc2ca5
+ push ax ; 50 ; 0xc2ca7
+ xor cx, cx ; 31 c9 ; 0xc2ca8
+ xor bx, bx ; 31 db ; 0xc2caa
+ xor dx, dx ; 31 d2 ; 0xc2cac
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc2cae
+ call 01c9fh ; e8 eb ef ; 0xc2cb1
+ dec byte [bp-008h] ; fe 4e f8 ; 0xc2cb4 vgabios.c:1918
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc2cb7 vgabios.c:1922
+ xor ah, ah ; 30 e4 ; 0xc2cba
+ mov word [bp-016h], ax ; 89 46 ea ; 0xc2cbc
+ mov CL, strict byte 008h ; b1 08 ; 0xc2cbf
+ sal word [bp-016h], CL ; d3 66 ea ; 0xc2cc1
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2cc4
+ add word [bp-016h], ax ; 01 46 ea ; 0xc2cc7
+ mov dx, word [bp-016h] ; 8b 56 ea ; 0xc2cca vgabios.c:1923
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc2ccd
+ call 012cfh ; e8 fc e5 ; 0xc2cd0
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2cd3 vgabios.c:1924
+ pop si ; 5e ; 0xc2cd6
+ pop bp ; 5d ; 0xc2cd7
+ retn ; c3 ; 0xc2cd8
+ ; disGetNextSymbol 0xc2cd9 LB 0x188b -> off=0x0 cb=0000000000000035 uValue=00000000000c2cd9 'get_font_access'
+get_font_access: ; 0xc2cd9 LB 0x35
+ push bp ; 55 ; 0xc2cd9 vgabios.c:1927
+ mov bp, sp ; 89 e5 ; 0xc2cda
+ push dx ; 52 ; 0xc2cdc
+ mov ax, strict word 00005h ; b8 05 00 ; 0xc2cdd vgabios.c:1929
+ mov dx, 003ceh ; ba ce 03 ; 0xc2ce0
+ out DX, ax ; ef ; 0xc2ce3
+ mov AL, strict byte 006h ; b0 06 ; 0xc2ce4 vgabios.c:1930
+ out DX, AL ; ee ; 0xc2ce6
+ mov dx, 003cfh ; ba cf 03 ; 0xc2ce7 vgabios.c:1931
+ in AL, DX ; ec ; 0xc2cea
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2ceb
+ mov ah, al ; 88 c4 ; 0xc2ced
+ and ah, 001h ; 80 e4 01 ; 0xc2cef
+ or ah, 004h ; 80 cc 04 ; 0xc2cf2
+ xor al, al ; 30 c0 ; 0xc2cf5
+ or AL, strict byte 006h ; 0c 06 ; 0xc2cf7
+ mov dx, 003ceh ; ba ce 03 ; 0xc2cf9
+ out DX, ax ; ef ; 0xc2cfc
+ mov ax, 00402h ; b8 02 04 ; 0xc2cfd vgabios.c:1932
+ mov dx, 003c4h ; ba c4 03 ; 0xc2d00
+ out DX, ax ; ef ; 0xc2d03
+ mov ax, 00604h ; b8 04 06 ; 0xc2d04 vgabios.c:1933
+ out DX, ax ; ef ; 0xc2d07
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2d08 vgabios.c:1934
+ pop dx ; 5a ; 0xc2d0b
+ pop bp ; 5d ; 0xc2d0c
+ retn ; c3 ; 0xc2d0d
+ ; disGetNextSymbol 0xc2d0e LB 0x1856 -> off=0x0 cb=0000000000000033 uValue=00000000000c2d0e 'release_font_access'
+release_font_access: ; 0xc2d0e LB 0x33
+ push bp ; 55 ; 0xc2d0e vgabios.c:1936
+ mov bp, sp ; 89 e5 ; 0xc2d0f
+ push dx ; 52 ; 0xc2d11
+ mov dx, 003cch ; ba cc 03 ; 0xc2d12 vgabios.c:1938
+ in AL, DX ; ec ; 0xc2d15
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2d16
+ and ax, strict word 00001h ; 25 01 00 ; 0xc2d18
+ sal ax, 1 ; d1 e0 ; 0xc2d1b
+ sal ax, 1 ; d1 e0 ; 0xc2d1d
+ mov ah, al ; 88 c4 ; 0xc2d1f
+ or ah, 00ah ; 80 cc 0a ; 0xc2d21
+ xor al, al ; 30 c0 ; 0xc2d24
+ or AL, strict byte 006h ; 0c 06 ; 0xc2d26
+ mov dx, 003ceh ; ba ce 03 ; 0xc2d28
+ out DX, ax ; ef ; 0xc2d2b
+ mov ax, 01005h ; b8 05 10 ; 0xc2d2c vgabios.c:1939
+ out DX, ax ; ef ; 0xc2d2f
+ mov ax, 00302h ; b8 02 03 ; 0xc2d30 vgabios.c:1940
+ mov dx, 003c4h ; ba c4 03 ; 0xc2d33
+ out DX, ax ; ef ; 0xc2d36
+ mov ax, 00204h ; b8 04 02 ; 0xc2d37 vgabios.c:1941
+ out DX, ax ; ef ; 0xc2d3a
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2d3b vgabios.c:1942
+ pop dx ; 5a ; 0xc2d3e
+ pop bp ; 5d ; 0xc2d3f
+ retn ; c3 ; 0xc2d40
+ ; disGetNextSymbol 0xc2d41 LB 0x1823 -> off=0x0 cb=00000000000000b3 uValue=00000000000c2d41 'set_scan_lines'
+set_scan_lines: ; 0xc2d41 LB 0xb3
+ push bp ; 55 ; 0xc2d41 vgabios.c:1944
+ mov bp, sp ; 89 e5 ; 0xc2d42
+ push bx ; 53 ; 0xc2d44
+ push cx ; 51 ; 0xc2d45
+ push dx ; 52 ; 0xc2d46
+ push si ; 56 ; 0xc2d47
+ push di ; 57 ; 0xc2d48
+ mov bl, al ; 88 c3 ; 0xc2d49
+ mov si, strict word 00063h ; be 63 00 ; 0xc2d4b vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2d4e
+ mov es, ax ; 8e c0 ; 0xc2d51
+ mov si, word [es:si] ; 26 8b 34 ; 0xc2d53
+ mov cx, si ; 89 f1 ; 0xc2d56 vgabios.c:58
+ mov AL, strict byte 009h ; b0 09 ; 0xc2d58 vgabios.c:1950
+ mov dx, si ; 89 f2 ; 0xc2d5a
+ out DX, AL ; ee ; 0xc2d5c
+ lea dx, [si+001h] ; 8d 54 01 ; 0xc2d5d vgabios.c:1951
+ in AL, DX ; ec ; 0xc2d60
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2d61
+ mov ah, al ; 88 c4 ; 0xc2d63 vgabios.c:1952
+ and ah, 0e0h ; 80 e4 e0 ; 0xc2d65
+ mov al, bl ; 88 d8 ; 0xc2d68
+ db 0feh, 0c8h
+ ; dec al ; fe c8 ; 0xc2d6a
+ or al, ah ; 08 e0 ; 0xc2d6c
+ out DX, AL ; ee ; 0xc2d6e vgabios.c:1953
+ cmp bl, 008h ; 80 fb 08 ; 0xc2d6f vgabios.c:1954
+ jne short 02d7ch ; 75 08 ; 0xc2d72
+ mov dx, strict word 00007h ; ba 07 00 ; 0xc2d74 vgabios.c:1956
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc2d77
+ jmp short 02d89h ; eb 0d ; 0xc2d7a vgabios.c:1958
+ mov dl, bl ; 88 da ; 0xc2d7c vgabios.c:1960
+ sub dl, 003h ; 80 ea 03 ; 0xc2d7e
+ xor dh, dh ; 30 f6 ; 0xc2d81
+ mov al, bl ; 88 d8 ; 0xc2d83
+ sub AL, strict byte 004h ; 2c 04 ; 0xc2d85
+ xor ah, ah ; 30 e4 ; 0xc2d87
+ call 011d3h ; e8 47 e4 ; 0xc2d89
+ xor bh, bh ; 30 ff ; 0xc2d8c vgabios.c:1962
+ mov si, 00085h ; be 85 00 ; 0xc2d8e vgabios.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2d91
+ mov es, ax ; 8e c0 ; 0xc2d94
+ mov word [es:si], bx ; 26 89 1c ; 0xc2d96
+ mov AL, strict byte 012h ; b0 12 ; 0xc2d99 vgabios.c:1963
+ mov dx, cx ; 89 ca ; 0xc2d9b
+ out DX, AL ; ee ; 0xc2d9d
+ mov si, cx ; 89 ce ; 0xc2d9e vgabios.c:1964
+ inc si ; 46 ; 0xc2da0
+ mov dx, si ; 89 f2 ; 0xc2da1
+ in AL, DX ; ec ; 0xc2da3
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2da4
+ mov di, ax ; 89 c7 ; 0xc2da6
+ mov AL, strict byte 007h ; b0 07 ; 0xc2da8 vgabios.c:1965
+ mov dx, cx ; 89 ca ; 0xc2daa
+ out DX, AL ; ee ; 0xc2dac
+ mov dx, si ; 89 f2 ; 0xc2dad vgabios.c:1966
+ in AL, DX ; ec ; 0xc2daf
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc2db0
+ mov dl, al ; 88 c2 ; 0xc2db2 vgabios.c:1967
+ and dl, 002h ; 80 e2 02 ; 0xc2db4
+ xor dh, dh ; 30 f6 ; 0xc2db7
+ mov CL, strict byte 007h ; b1 07 ; 0xc2db9
+ sal dx, CL ; d3 e2 ; 0xc2dbb
+ and AL, strict byte 040h ; 24 40 ; 0xc2dbd
+ xor ah, ah ; 30 e4 ; 0xc2dbf
+ mov CL, strict byte 003h ; b1 03 ; 0xc2dc1
+ sal ax, CL ; d3 e0 ; 0xc2dc3
+ add ax, dx ; 01 d0 ; 0xc2dc5
+ inc ax ; 40 ; 0xc2dc7
+ add ax, di ; 01 f8 ; 0xc2dc8
+ xor dx, dx ; 31 d2 ; 0xc2dca vgabios.c:1968
+ div bx ; f7 f3 ; 0xc2dcc
+ mov dl, al ; 88 c2 ; 0xc2dce vgabios.c:1969
+ db 0feh, 0cah
+ ; dec dl ; fe ca ; 0xc2dd0
+ mov si, 00084h ; be 84 00 ; 0xc2dd2 vgabios.c:52
+ mov byte [es:si], dl ; 26 88 14 ; 0xc2dd5
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc2dd8 vgabios.c:57
+ mov dx, word [es:si] ; 26 8b 14 ; 0xc2ddb
+ xor ah, ah ; 30 e4 ; 0xc2dde vgabios.c:1971
+ mul dx ; f7 e2 ; 0xc2de0
+ sal ax, 1 ; d1 e0 ; 0xc2de2
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc2de4 vgabios.c:62
+ mov word [es:si], ax ; 26 89 04 ; 0xc2de7
+ lea sp, [bp-00ah] ; 8d 66 f6 ; 0xc2dea vgabios.c:1972
+ pop di ; 5f ; 0xc2ded
+ pop si ; 5e ; 0xc2dee
+ pop dx ; 5a ; 0xc2def
+ pop cx ; 59 ; 0xc2df0
+ pop bx ; 5b ; 0xc2df1
+ pop bp ; 5d ; 0xc2df2
+ retn ; c3 ; 0xc2df3
+ ; disGetNextSymbol 0xc2df4 LB 0x1770 -> off=0x0 cb=0000000000000020 uValue=00000000000c2df4 'biosfn_set_font_block'
+biosfn_set_font_block: ; 0xc2df4 LB 0x20
+ push bp ; 55 ; 0xc2df4 vgabios.c:1974
+ mov bp, sp ; 89 e5 ; 0xc2df5
+ push bx ; 53 ; 0xc2df7
+ push dx ; 52 ; 0xc2df8
+ mov bl, al ; 88 c3 ; 0xc2df9
+ mov ax, 00100h ; b8 00 01 ; 0xc2dfb vgabios.c:1976
+ mov dx, 003c4h ; ba c4 03 ; 0xc2dfe
+ out DX, ax ; ef ; 0xc2e01
+ mov ah, bl ; 88 dc ; 0xc2e02 vgabios.c:1977
+ xor al, al ; 30 c0 ; 0xc2e04
+ or AL, strict byte 003h ; 0c 03 ; 0xc2e06
+ out DX, ax ; ef ; 0xc2e08
+ mov ax, 00300h ; b8 00 03 ; 0xc2e09 vgabios.c:1978
+ out DX, ax ; ef ; 0xc2e0c
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2e0d vgabios.c:1979
+ pop dx ; 5a ; 0xc2e10
+ pop bx ; 5b ; 0xc2e11
+ pop bp ; 5d ; 0xc2e12
+ retn ; c3 ; 0xc2e13
+ ; disGetNextSymbol 0xc2e14 LB 0x1750 -> off=0x0 cb=0000000000000078 uValue=00000000000c2e14 'load_text_patch'
+load_text_patch: ; 0xc2e14 LB 0x78
+ push bp ; 55 ; 0xc2e14 vgabios.c:1981
+ mov bp, sp ; 89 e5 ; 0xc2e15
+ push si ; 56 ; 0xc2e17
+ push di ; 57 ; 0xc2e18
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc2e19
+ push ax ; 50 ; 0xc2e1c
+ mov byte [bp-006h], cl ; 88 4e fa ; 0xc2e1d
+ call 02cd9h ; e8 b6 fe ; 0xc2e20 vgabios.c:1986
+ mov al, bl ; 88 d8 ; 0xc2e23 vgabios.c:1988
+ and AL, strict byte 003h ; 24 03 ; 0xc2e25
+ xor ah, ah ; 30 e4 ; 0xc2e27
+ mov CL, strict byte 00eh ; b1 0e ; 0xc2e29
+ mov di, ax ; 89 c7 ; 0xc2e2b
+ sal di, CL ; d3 e7 ; 0xc2e2d
+ mov al, bl ; 88 d8 ; 0xc2e2f
+ and AL, strict byte 004h ; 24 04 ; 0xc2e31
+ mov CL, strict byte 00bh ; b1 0b ; 0xc2e33
+ sal ax, CL ; d3 e0 ; 0xc2e35
+ add di, ax ; 01 c7 ; 0xc2e37
+ mov word [bp-00ah], di ; 89 7e f6 ; 0xc2e39
+ mov bx, dx ; 89 d3 ; 0xc2e3c vgabios.c:1989
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc2e3e
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc2e41
+ inc dx ; 42 ; 0xc2e44 vgabios.c:1990
+ mov word [bp-00ch], dx ; 89 56 f4 ; 0xc2e45
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc2e48 vgabios.c:1991
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc2e4b
+ test al, al ; 84 c0 ; 0xc2e4e
+ je short 02e82h ; 74 30 ; 0xc2e50
+ xor ah, ah ; 30 e4 ; 0xc2e52 vgabios.c:1992
+ mov CL, strict byte 005h ; b1 05 ; 0xc2e54
+ sal ax, CL ; d3 e0 ; 0xc2e56
+ mov di, word [bp-00ah] ; 8b 7e f6 ; 0xc2e58
+ add di, ax ; 01 c7 ; 0xc2e5b
+ mov cl, byte [bp-006h] ; 8a 4e fa ; 0xc2e5d vgabios.c:1993
+ xor ch, ch ; 30 ed ; 0xc2e60
+ mov si, word [bp-00ch] ; 8b 76 f4 ; 0xc2e62
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc2e65
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2e68
+ mov es, ax ; 8e c0 ; 0xc2e6b
+ jcxz 02e75h ; e3 06 ; 0xc2e6d
+ push DS ; 1e ; 0xc2e6f
+ mov ds, dx ; 8e da ; 0xc2e70
+ rep movsb ; f3 a4 ; 0xc2e72
+ pop DS ; 1f ; 0xc2e74
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc2e75 vgabios.c:1994
+ xor ah, ah ; 30 e4 ; 0xc2e78
+ inc ax ; 40 ; 0xc2e7a
+ add word [bp-00ch], ax ; 01 46 f4 ; 0xc2e7b
+ add bx, ax ; 01 c3 ; 0xc2e7e vgabios.c:1995
+ jmp short 02e48h ; eb c6 ; 0xc2e80 vgabios.c:1996
+ call 02d0eh ; e8 89 fe ; 0xc2e82 vgabios.c:1998
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2e85 vgabios.c:1999
+ pop di ; 5f ; 0xc2e88
+ pop si ; 5e ; 0xc2e89
+ pop bp ; 5d ; 0xc2e8a
+ retn ; c3 ; 0xc2e8b
+ ; disGetNextSymbol 0xc2e8c LB 0x16d8 -> off=0x0 cb=0000000000000084 uValue=00000000000c2e8c 'biosfn_load_text_user_pat'
+biosfn_load_text_user_pat: ; 0xc2e8c LB 0x84
+ push bp ; 55 ; 0xc2e8c vgabios.c:2001
+ mov bp, sp ; 89 e5 ; 0xc2e8d
+ push si ; 56 ; 0xc2e8f
+ push di ; 57 ; 0xc2e90
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc2e91
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc2e94
+ mov word [bp-00eh], dx ; 89 56 f2 ; 0xc2e97
+ mov word [bp-00ah], bx ; 89 5e f6 ; 0xc2e9a
+ mov word [bp-00ch], cx ; 89 4e f4 ; 0xc2e9d
+ call 02cd9h ; e8 36 fe ; 0xc2ea0 vgabios.c:2006
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2ea3 vgabios.c:2007
+ and AL, strict byte 003h ; 24 03 ; 0xc2ea6
+ xor ah, ah ; 30 e4 ; 0xc2ea8
+ mov CL, strict byte 00eh ; b1 0e ; 0xc2eaa
+ mov bx, ax ; 89 c3 ; 0xc2eac
+ sal bx, CL ; d3 e3 ; 0xc2eae
+ mov al, byte [bp+006h] ; 8a 46 06 ; 0xc2eb0
+ and AL, strict byte 004h ; 24 04 ; 0xc2eb3
+ mov CL, strict byte 00bh ; b1 0b ; 0xc2eb5
+ sal ax, CL ; d3 e0 ; 0xc2eb7
+ add bx, ax ; 01 c3 ; 0xc2eb9
+ mov word [bp-008h], bx ; 89 5e f8 ; 0xc2ebb
+ xor bx, bx ; 31 db ; 0xc2ebe vgabios.c:2008
+ cmp bx, word [bp-00ch] ; 3b 5e f4 ; 0xc2ec0
+ jnc short 02ef6h ; 73 31 ; 0xc2ec3
+ mov al, byte [bp+008h] ; 8a 46 08 ; 0xc2ec5 vgabios.c:2010
+ xor ah, ah ; 30 e4 ; 0xc2ec8
+ mov si, ax ; 89 c6 ; 0xc2eca
+ mov ax, bx ; 89 d8 ; 0xc2ecc
+ mul si ; f7 e6 ; 0xc2ece
+ add ax, word [bp-00ah] ; 03 46 f6 ; 0xc2ed0
+ mov di, word [bp+004h] ; 8b 7e 04 ; 0xc2ed3 vgabios.c:2011
+ add di, bx ; 01 df ; 0xc2ed6
+ mov CL, strict byte 005h ; b1 05 ; 0xc2ed8
+ sal di, CL ; d3 e7 ; 0xc2eda
+ add di, word [bp-008h] ; 03 7e f8 ; 0xc2edc
+ mov cx, si ; 89 f1 ; 0xc2edf vgabios.c:2012
+ mov si, ax ; 89 c6 ; 0xc2ee1
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc2ee3
+ mov ax, 0a000h ; b8 00 a0 ; 0xc2ee6
+ mov es, ax ; 8e c0 ; 0xc2ee9
+ jcxz 02ef3h ; e3 06 ; 0xc2eeb
+ push DS ; 1e ; 0xc2eed
+ mov ds, dx ; 8e da ; 0xc2eee
+ rep movsb ; f3 a4 ; 0xc2ef0
+ pop DS ; 1f ; 0xc2ef2
+ inc bx ; 43 ; 0xc2ef3 vgabios.c:2013
+ jmp short 02ec0h ; eb ca ; 0xc2ef4
+ call 02d0eh ; e8 15 fe ; 0xc2ef6 vgabios.c:2014
+ cmp byte [bp-006h], 010h ; 80 7e fa 10 ; 0xc2ef9 vgabios.c:2015
+ jc short 02f07h ; 72 08 ; 0xc2efd
+ mov al, byte [bp+008h] ; 8a 46 08 ; 0xc2eff vgabios.c:2017
+ xor ah, ah ; 30 e4 ; 0xc2f02
+ call 02d41h ; e8 3a fe ; 0xc2f04
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f07 vgabios.c:2019
+ pop di ; 5f ; 0xc2f0a
+ pop si ; 5e ; 0xc2f0b
+ pop bp ; 5d ; 0xc2f0c
+ retn 00006h ; c2 06 00 ; 0xc2f0d
+ ; disGetNextSymbol 0xc2f10 LB 0x1654 -> off=0x0 cb=0000000000000016 uValue=00000000000c2f10 'biosfn_load_gfx_8_8_chars'
+biosfn_load_gfx_8_8_chars: ; 0xc2f10 LB 0x16
+ push bp ; 55 ; 0xc2f10 vgabios.c:2021
+ mov bp, sp ; 89 e5 ; 0xc2f11
+ push bx ; 53 ; 0xc2f13
+ push cx ; 51 ; 0xc2f14
+ mov bx, dx ; 89 d3 ; 0xc2f15 vgabios.c:2023
+ mov cx, ax ; 89 c1 ; 0xc2f17
+ mov ax, strict word 0001fh ; b8 1f 00 ; 0xc2f19
+ call 009f0h ; e8 d1 da ; 0xc2f1c
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f1f vgabios.c:2024
+ pop cx ; 59 ; 0xc2f22
+ pop bx ; 5b ; 0xc2f23
+ pop bp ; 5d ; 0xc2f24
+ retn ; c3 ; 0xc2f25
+ ; disGetNextSymbol 0xc2f26 LB 0x163e -> off=0x0 cb=000000000000004d uValue=00000000000c2f26 'set_gfx_font'
+set_gfx_font: ; 0xc2f26 LB 0x4d
+ push bp ; 55 ; 0xc2f26 vgabios.c:2026
+ mov bp, sp ; 89 e5 ; 0xc2f27
+ push si ; 56 ; 0xc2f29
+ push di ; 57 ; 0xc2f2a
+ mov si, ax ; 89 c6 ; 0xc2f2b
+ mov ax, dx ; 89 d0 ; 0xc2f2d
+ mov di, bx ; 89 df ; 0xc2f2f
+ mov dl, cl ; 88 ca ; 0xc2f31
+ mov bx, si ; 89 f3 ; 0xc2f33 vgabios.c:2030
+ mov cx, ax ; 89 c1 ; 0xc2f35
+ mov ax, strict word 00043h ; b8 43 00 ; 0xc2f37
+ call 009f0h ; e8 b3 da ; 0xc2f3a
+ test dl, dl ; 84 d2 ; 0xc2f3d vgabios.c:2031
+ je short 02f53h ; 74 12 ; 0xc2f3f
+ cmp dl, 003h ; 80 fa 03 ; 0xc2f41 vgabios.c:2032
+ jbe short 02f48h ; 76 02 ; 0xc2f44
+ mov DL, strict byte 002h ; b2 02 ; 0xc2f46 vgabios.c:2033
+ mov bl, dl ; 88 d3 ; 0xc2f48 vgabios.c:2034
+ xor bh, bh ; 30 ff ; 0xc2f4a
+ mov al, byte [bx+07dfdh] ; 8a 87 fd 7d ; 0xc2f4c
+ mov byte [bp+004h], al ; 88 46 04 ; 0xc2f50
+ mov bx, 00085h ; bb 85 00 ; 0xc2f53 vgabios.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc2f56
+ mov es, ax ; 8e c0 ; 0xc2f59
+ mov word [es:bx], di ; 26 89 3f ; 0xc2f5b
+ mov al, byte [bp+004h] ; 8a 46 04 ; 0xc2f5e vgabios.c:2039
+ xor ah, ah ; 30 e4 ; 0xc2f61
+ dec ax ; 48 ; 0xc2f63
+ mov bx, 00084h ; bb 84 00 ; 0xc2f64 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc2f67
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2f6a vgabios.c:2040
+ pop di ; 5f ; 0xc2f6d
+ pop si ; 5e ; 0xc2f6e
+ pop bp ; 5d ; 0xc2f6f
+ retn 00002h ; c2 02 00 ; 0xc2f70
+ ; disGetNextSymbol 0xc2f73 LB 0x15f1 -> off=0x0 cb=000000000000001d uValue=00000000000c2f73 'biosfn_load_gfx_user_chars'
+biosfn_load_gfx_user_chars: ; 0xc2f73 LB 0x1d
+ push bp ; 55 ; 0xc2f73 vgabios.c:2042
+ mov bp, sp ; 89 e5 ; 0xc2f74
+ push si ; 56 ; 0xc2f76
+ mov si, ax ; 89 c6 ; 0xc2f77
+ mov ax, dx ; 89 d0 ; 0xc2f79
+ mov dl, byte [bp+004h] ; 8a 56 04 ; 0xc2f7b vgabios.c:2045
+ xor dh, dh ; 30 f6 ; 0xc2f7e
+ push dx ; 52 ; 0xc2f80
+ xor ch, ch ; 30 ed ; 0xc2f81
+ mov dx, si ; 89 f2 ; 0xc2f83
+ call 02f26h ; e8 9e ff ; 0xc2f85
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc2f88 vgabios.c:2046
+ pop si ; 5e ; 0xc2f8b
+ pop bp ; 5d ; 0xc2f8c
+ retn 00002h ; c2 02 00 ; 0xc2f8d
+ ; disGetNextSymbol 0xc2f90 LB 0x15d4 -> off=0x0 cb=0000000000000022 uValue=00000000000c2f90 'biosfn_load_gfx_8_14_chars'
+biosfn_load_gfx_8_14_chars: ; 0xc2f90 LB 0x22
+ push bp ; 55 ; 0xc2f90 vgabios.c:2051
+ mov bp, sp ; 89 e5 ; 0xc2f91
+ push bx ; 53 ; 0xc2f93
+ push cx ; 51 ; 0xc2f94
+ mov bl, al ; 88 c3 ; 0xc2f95
+ mov al, dl ; 88 d0 ; 0xc2f97
+ xor ah, ah ; 30 e4 ; 0xc2f99 vgabios.c:2053
+ push ax ; 50 ; 0xc2f9b
+ mov al, bl ; 88 d8 ; 0xc2f9c
+ mov cx, ax ; 89 c1 ; 0xc2f9e
+ mov bx, strict word 0000eh ; bb 0e 00 ; 0xc2fa0
+ mov ax, 05d6ch ; b8 6c 5d ; 0xc2fa3
+ mov dx, ds ; 8c da ; 0xc2fa6
+ call 02f26h ; e8 7b ff ; 0xc2fa8
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fab vgabios.c:2054
+ pop cx ; 59 ; 0xc2fae
+ pop bx ; 5b ; 0xc2faf
+ pop bp ; 5d ; 0xc2fb0
+ retn ; c3 ; 0xc2fb1
+ ; disGetNextSymbol 0xc2fb2 LB 0x15b2 -> off=0x0 cb=0000000000000022 uValue=00000000000c2fb2 'biosfn_load_gfx_8_8_dd_chars'
+biosfn_load_gfx_8_8_dd_chars: ; 0xc2fb2 LB 0x22
+ push bp ; 55 ; 0xc2fb2 vgabios.c:2055
+ mov bp, sp ; 89 e5 ; 0xc2fb3
+ push bx ; 53 ; 0xc2fb5
+ push cx ; 51 ; 0xc2fb6
+ mov bl, al ; 88 c3 ; 0xc2fb7
+ mov al, dl ; 88 d0 ; 0xc2fb9
+ xor ah, ah ; 30 e4 ; 0xc2fbb vgabios.c:2057
+ push ax ; 50 ; 0xc2fbd
+ mov al, bl ; 88 d8 ; 0xc2fbe
+ mov cx, ax ; 89 c1 ; 0xc2fc0
+ mov bx, strict word 00008h ; bb 08 00 ; 0xc2fc2
+ mov ax, 0556ch ; b8 6c 55 ; 0xc2fc5
+ mov dx, ds ; 8c da ; 0xc2fc8
+ call 02f26h ; e8 59 ff ; 0xc2fca
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fcd vgabios.c:2058
+ pop cx ; 59 ; 0xc2fd0
+ pop bx ; 5b ; 0xc2fd1
+ pop bp ; 5d ; 0xc2fd2
+ retn ; c3 ; 0xc2fd3
+ ; disGetNextSymbol 0xc2fd4 LB 0x1590 -> off=0x0 cb=0000000000000022 uValue=00000000000c2fd4 'biosfn_load_gfx_8_16_chars'
+biosfn_load_gfx_8_16_chars: ; 0xc2fd4 LB 0x22
+ push bp ; 55 ; 0xc2fd4 vgabios.c:2059
+ mov bp, sp ; 89 e5 ; 0xc2fd5
+ push bx ; 53 ; 0xc2fd7
+ push cx ; 51 ; 0xc2fd8
+ mov bl, al ; 88 c3 ; 0xc2fd9
+ mov al, dl ; 88 d0 ; 0xc2fdb
+ xor ah, ah ; 30 e4 ; 0xc2fdd vgabios.c:2061
+ push ax ; 50 ; 0xc2fdf
+ mov al, bl ; 88 d8 ; 0xc2fe0
+ mov cx, ax ; 89 c1 ; 0xc2fe2
+ mov bx, strict word 00010h ; bb 10 00 ; 0xc2fe4
+ mov ax, 06b6ch ; b8 6c 6b ; 0xc2fe7
+ mov dx, ds ; 8c da ; 0xc2fea
+ call 02f26h ; e8 37 ff ; 0xc2fec
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc2fef vgabios.c:2062
+ pop cx ; 59 ; 0xc2ff2
+ pop bx ; 5b ; 0xc2ff3
+ pop bp ; 5d ; 0xc2ff4
+ retn ; c3 ; 0xc2ff5
+ ; disGetNextSymbol 0xc2ff6 LB 0x156e -> off=0x0 cb=0000000000000005 uValue=00000000000c2ff6 'biosfn_alternate_prtsc'
+biosfn_alternate_prtsc: ; 0xc2ff6 LB 0x5
+ push bp ; 55 ; 0xc2ff6 vgabios.c:2064
+ mov bp, sp ; 89 e5 ; 0xc2ff7
+ pop bp ; 5d ; 0xc2ff9 vgabios.c:2069
+ retn ; c3 ; 0xc2ffa
+ ; disGetNextSymbol 0xc2ffb LB 0x1569 -> off=0x0 cb=0000000000000032 uValue=00000000000c2ffb 'biosfn_set_txt_lines'
+biosfn_set_txt_lines: ; 0xc2ffb LB 0x32
+ push bx ; 53 ; 0xc2ffb vgabios.c:2071
+ push si ; 56 ; 0xc2ffc
+ push bp ; 55 ; 0xc2ffd
+ mov bp, sp ; 89 e5 ; 0xc2ffe
+ mov bl, al ; 88 c3 ; 0xc3000
+ mov si, 00089h ; be 89 00 ; 0xc3002 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3005
+ mov es, ax ; 8e c0 ; 0xc3008
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc300a
+ and AL, strict byte 06fh ; 24 6f ; 0xc300d vgabios.c:2077
+ cmp bl, 002h ; 80 fb 02 ; 0xc300f vgabios.c:2079
+ je short 0301ch ; 74 08 ; 0xc3012
+ test bl, bl ; 84 db ; 0xc3014
+ jne short 0301eh ; 75 06 ; 0xc3016
+ or AL, strict byte 080h ; 0c 80 ; 0xc3018 vgabios.c:2082
+ jmp short 0301eh ; eb 02 ; 0xc301a vgabios.c:2083
+ or AL, strict byte 010h ; 0c 10 ; 0xc301c vgabios.c:2085
+ mov bx, 00089h ; bb 89 00 ; 0xc301e vgabios.c:52
+ mov si, strict word 00040h ; be 40 00 ; 0xc3021
+ mov es, si ; 8e c6 ; 0xc3024
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3026
+ pop bp ; 5d ; 0xc3029 vgabios.c:2089
+ pop si ; 5e ; 0xc302a
+ pop bx ; 5b ; 0xc302b
+ retn ; c3 ; 0xc302c
+ ; disGetNextSymbol 0xc302d LB 0x1537 -> off=0x0 cb=0000000000000005 uValue=00000000000c302d 'biosfn_switch_video_interface'
+biosfn_switch_video_interface: ; 0xc302d LB 0x5
+ push bp ; 55 ; 0xc302d vgabios.c:2092
+ mov bp, sp ; 89 e5 ; 0xc302e
+ pop bp ; 5d ; 0xc3030 vgabios.c:2097
+ retn ; c3 ; 0xc3031
+ ; disGetNextSymbol 0xc3032 LB 0x1532 -> off=0x0 cb=0000000000000005 uValue=00000000000c3032 'biosfn_enable_video_refresh_control'
+biosfn_enable_video_refresh_control: ; 0xc3032 LB 0x5
+ push bp ; 55 ; 0xc3032 vgabios.c:2098
+ mov bp, sp ; 89 e5 ; 0xc3033
+ pop bp ; 5d ; 0xc3035 vgabios.c:2103
+ retn ; c3 ; 0xc3036
+ ; disGetNextSymbol 0xc3037 LB 0x152d -> off=0x0 cb=000000000000008f uValue=00000000000c3037 'biosfn_write_string'
+biosfn_write_string: ; 0xc3037 LB 0x8f
+ push bp ; 55 ; 0xc3037 vgabios.c:2106
+ mov bp, sp ; 89 e5 ; 0xc3038
+ push si ; 56 ; 0xc303a
+ push di ; 57 ; 0xc303b
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc303c
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc303f
+ mov byte [bp-006h], dl ; 88 56 fa ; 0xc3042
+ mov byte [bp-00ah], bl ; 88 5e f6 ; 0xc3045
+ mov si, cx ; 89 ce ; 0xc3048
+ mov di, word [bp+00ah] ; 8b 7e 0a ; 0xc304a
+ mov al, dl ; 88 d0 ; 0xc304d vgabios.c:2113
+ xor ah, ah ; 30 e4 ; 0xc304f
+ lea bx, [bp-00eh] ; 8d 5e f2 ; 0xc3051
+ lea dx, [bp-00ch] ; 8d 56 f4 ; 0xc3054
+ call 00a97h ; e8 3d da ; 0xc3057
+ cmp byte [bp+004h], 0ffh ; 80 7e 04 ff ; 0xc305a vgabios.c:2116
+ jne short 0306ch ; 75 0c ; 0xc305e
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc3060 vgabios.c:2117
+ mov byte [bp+006h], al ; 88 46 06 ; 0xc3063
+ mov ax, word [bp-00eh] ; 8b 46 f2 ; 0xc3066 vgabios.c:2118
+ mov byte [bp+004h], ah ; 88 66 04 ; 0xc3069
+ mov dh, byte [bp+004h] ; 8a 76 04 ; 0xc306c vgabios.c:2121
+ mov dl, byte [bp+006h] ; 8a 56 06 ; 0xc306f
+ xor ah, ah ; 30 e4 ; 0xc3072
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3074 vgabios.c:2122
+ call 012cfh ; e8 55 e2 ; 0xc3077
+ dec si ; 4e ; 0xc307a vgabios.c:2124
+ cmp si, strict byte 0ffffh ; 83 fe ff ; 0xc307b
+ je short 030ach ; 74 2c ; 0xc307e
+ mov bx, di ; 89 fb ; 0xc3080 vgabios.c:2126
+ inc di ; 47 ; 0xc3082
+ mov es, [bp+008h] ; 8e 46 08 ; 0xc3083 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3086
+ test byte [bp-008h], 002h ; f6 46 f8 02 ; 0xc3089 vgabios.c:2127
+ je short 03098h ; 74 09 ; 0xc308d
+ mov bx, di ; 89 fb ; 0xc308f vgabios.c:2128
+ inc di ; 47 ; 0xc3091
+ mov ah, byte [es:bx] ; 26 8a 27 ; 0xc3092 vgabios.c:47
+ mov byte [bp-00ah], ah ; 88 66 f6 ; 0xc3095 vgabios.c:48
+ mov bl, byte [bp-00ah] ; 8a 5e f6 ; 0xc3098 vgabios.c:2130
+ xor bh, bh ; 30 ff ; 0xc309b
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc309d
+ xor dh, dh ; 30 f6 ; 0xc30a0
+ xor ah, ah ; 30 e4 ; 0xc30a2
+ mov cx, strict word 00003h ; b9 03 00 ; 0xc30a4
+ call 02a76h ; e8 cc f9 ; 0xc30a7
+ jmp short 0307ah ; eb ce ; 0xc30aa vgabios.c:2131
+ test byte [bp-008h], 001h ; f6 46 f8 01 ; 0xc30ac vgabios.c:2134
+ jne short 030bdh ; 75 0b ; 0xc30b0
+ mov dx, word [bp-00eh] ; 8b 56 f2 ; 0xc30b2 vgabios.c:2135
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc30b5
+ xor ah, ah ; 30 e4 ; 0xc30b8
+ call 012cfh ; e8 12 e2 ; 0xc30ba
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc30bd vgabios.c:2136
+ pop di ; 5f ; 0xc30c0
+ pop si ; 5e ; 0xc30c1
+ pop bp ; 5d ; 0xc30c2
+ retn 00008h ; c2 08 00 ; 0xc30c3
+ ; disGetNextSymbol 0xc30c6 LB 0x149e -> off=0x0 cb=00000000000001f2 uValue=00000000000c30c6 'biosfn_read_state_info'
+biosfn_read_state_info: ; 0xc30c6 LB 0x1f2
+ push bp ; 55 ; 0xc30c6 vgabios.c:2139
+ mov bp, sp ; 89 e5 ; 0xc30c7
+ push cx ; 51 ; 0xc30c9
+ push si ; 56 ; 0xc30ca
+ push di ; 57 ; 0xc30cb
+ push ax ; 50 ; 0xc30cc
+ push ax ; 50 ; 0xc30cd
+ push dx ; 52 ; 0xc30ce
+ mov si, strict word 00049h ; be 49 00 ; 0xc30cf vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc30d2
+ mov es, ax ; 8e c0 ; 0xc30d5
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc30d7
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc30da vgabios.c:48
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc30dd vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc30e0
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc30e3 vgabios.c:58
+ mov ax, ds ; 8c d8 ; 0xc30e6 vgabios.c:2150
+ mov es, dx ; 8e c2 ; 0xc30e8 vgabios.c:72
+ mov word [es:bx], 05502h ; 26 c7 07 02 55 ; 0xc30ea
+ mov [es:bx+002h], ds ; 26 8c 5f 02 ; 0xc30ef
+ lea di, [bx+004h] ; 8d 7f 04 ; 0xc30f3 vgabios.c:2155
+ mov cx, strict word 0001eh ; b9 1e 00 ; 0xc30f6
+ mov si, strict word 00049h ; be 49 00 ; 0xc30f9
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc30fc
+ jcxz 03107h ; e3 06 ; 0xc30ff
+ push DS ; 1e ; 0xc3101
+ mov ds, dx ; 8e da ; 0xc3102
+ rep movsb ; f3 a4 ; 0xc3104
+ pop DS ; 1f ; 0xc3106
+ mov si, 00084h ; be 84 00 ; 0xc3107 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc310a
+ mov es, ax ; 8e c0 ; 0xc310d
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc310f
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc3112 vgabios.c:48
+ lea si, [bx+022h] ; 8d 77 22 ; 0xc3114
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc3117 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc311a
+ lea di, [bx+023h] ; 8d 7f 23 ; 0xc311d vgabios.c:2157
+ mov cx, strict word 00002h ; b9 02 00 ; 0xc3120
+ mov si, 00085h ; be 85 00 ; 0xc3123
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc3126
+ jcxz 03131h ; e3 06 ; 0xc3129
+ push DS ; 1e ; 0xc312b
+ mov ds, dx ; 8e da ; 0xc312c
+ rep movsb ; f3 a4 ; 0xc312e
+ pop DS ; 1f ; 0xc3130
+ mov si, 0008ah ; be 8a 00 ; 0xc3131 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3134
+ mov es, ax ; 8e c0 ; 0xc3137
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3139
+ lea si, [bx+025h] ; 8d 77 25 ; 0xc313c vgabios.c:48
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc313f vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc3142
+ lea si, [bx+026h] ; 8d 77 26 ; 0xc3145 vgabios.c:2160
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc3148 vgabios.c:52
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc314c vgabios.c:2161
+ mov word [es:si], strict word 00010h ; 26 c7 04 10 00 ; 0xc314f vgabios.c:62
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc3154 vgabios.c:2162
+ mov byte [es:si], 008h ; 26 c6 04 08 ; 0xc3157 vgabios.c:52
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc315b vgabios.c:2163
+ mov byte [es:si], 002h ; 26 c6 04 02 ; 0xc315e vgabios.c:52
+ lea si, [bx+02bh] ; 8d 77 2b ; 0xc3162 vgabios.c:2164
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc3165 vgabios.c:52
+ lea si, [bx+02ch] ; 8d 77 2c ; 0xc3169 vgabios.c:2165
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc316c vgabios.c:52
+ lea si, [bx+02dh] ; 8d 77 2d ; 0xc3170 vgabios.c:2166
+ mov byte [es:si], 021h ; 26 c6 04 21 ; 0xc3173 vgabios.c:52
+ lea si, [bx+031h] ; 8d 77 31 ; 0xc3177 vgabios.c:2167
+ mov byte [es:si], 003h ; 26 c6 04 03 ; 0xc317a vgabios.c:52
+ lea si, [bx+032h] ; 8d 77 32 ; 0xc317e vgabios.c:2168
+ mov byte [es:si], 000h ; 26 c6 04 00 ; 0xc3181 vgabios.c:52
+ mov si, 00089h ; be 89 00 ; 0xc3185 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3188
+ mov es, ax ; 8e c0 ; 0xc318b
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc318d
+ mov dl, al ; 88 c2 ; 0xc3190 vgabios.c:2173
+ and dl, 080h ; 80 e2 80 ; 0xc3192
+ xor dh, dh ; 30 f6 ; 0xc3195
+ mov CL, strict byte 006h ; b1 06 ; 0xc3197
+ sar dx, CL ; d3 fa ; 0xc3199
+ and AL, strict byte 010h ; 24 10 ; 0xc319b
+ xor ah, ah ; 30 e4 ; 0xc319d
+ mov CL, strict byte 004h ; b1 04 ; 0xc319f
+ sar ax, CL ; d3 f8 ; 0xc31a1
+ or ax, dx ; 09 d0 ; 0xc31a3
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc31a5 vgabios.c:2174
+ je short 031bbh ; 74 11 ; 0xc31a8
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc31aa
+ je short 031b7h ; 74 08 ; 0xc31ad
+ test ax, ax ; 85 c0 ; 0xc31af
+ jne short 031bbh ; 75 08 ; 0xc31b1
+ mov AL, strict byte 001h ; b0 01 ; 0xc31b3 vgabios.c:2175
+ jmp short 031bdh ; eb 06 ; 0xc31b5
+ mov AL, strict byte 002h ; b0 02 ; 0xc31b7 vgabios.c:2176
+ jmp short 031bdh ; eb 02 ; 0xc31b9
+ xor al, al ; 30 c0 ; 0xc31bb vgabios.c:2178
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc31bd vgabios.c:2180
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc31c0 vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc31c3
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc31c6 vgabios.c:2183
+ cmp AL, strict byte 00eh ; 3c 0e ; 0xc31c9
+ jc short 031edh ; 72 20 ; 0xc31cb
+ cmp AL, strict byte 012h ; 3c 12 ; 0xc31cd
+ jnbe short 031edh ; 77 1c ; 0xc31cf
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc31d1 vgabios.c:2184
+ test ax, ax ; 85 c0 ; 0xc31d4
+ je short 0322fh ; 74 57 ; 0xc31d6
+ mov si, ax ; 89 c6 ; 0xc31d8 vgabios.c:2185
+ shr si, 1 ; d1 ee ; 0xc31da
+ shr si, 1 ; d1 ee ; 0xc31dc
+ mov ax, 04000h ; b8 00 40 ; 0xc31de
+ xor dx, dx ; 31 d2 ; 0xc31e1
+ div si ; f7 f6 ; 0xc31e3
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc31e5
+ mov byte [es:si], al ; 26 88 04 ; 0xc31e8 vgabios.c:52
+ jmp short 0322fh ; eb 42 ; 0xc31eb vgabios.c:2186
+ lea si, [bx+029h] ; 8d 77 29 ; 0xc31ed
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc31f0
+ cmp AL, strict byte 013h ; 3c 13 ; 0xc31f3
+ jne short 03208h ; 75 11 ; 0xc31f5
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc31f7 vgabios.c:52
+ mov byte [es:si], 001h ; 26 c6 04 01 ; 0xc31fa
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc31fe vgabios.c:2188
+ mov word [es:si], 00100h ; 26 c7 04 00 01 ; 0xc3201 vgabios.c:62
+ jmp short 0322fh ; eb 27 ; 0xc3206 vgabios.c:2189
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc3208
+ jc short 0322fh ; 72 23 ; 0xc320a
+ cmp AL, strict byte 006h ; 3c 06 ; 0xc320c
+ jnbe short 0322fh ; 77 1f ; 0xc320e
+ cmp word [bp-00ah], strict byte 00000h ; 83 7e f6 00 ; 0xc3210 vgabios.c:2191
+ je short 03224h ; 74 0e ; 0xc3214
+ mov ax, 04000h ; b8 00 40 ; 0xc3216 vgabios.c:2192
+ xor dx, dx ; 31 d2 ; 0xc3219
+ div word [bp-00ah] ; f7 76 f6 ; 0xc321b
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc321e vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc3221
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc3224 vgabios.c:2193
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc3227 vgabios.c:62
+ mov word [es:si], strict word 00004h ; 26 c7 04 04 00 ; 0xc322a
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc322f vgabios.c:2195
+ cmp AL, strict byte 006h ; 3c 06 ; 0xc3232
+ je short 0323ah ; 74 04 ; 0xc3234
+ cmp AL, strict byte 011h ; 3c 11 ; 0xc3236
+ jne short 03245h ; 75 0b ; 0xc3238
+ lea si, [bx+027h] ; 8d 77 27 ; 0xc323a vgabios.c:2196
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc323d vgabios.c:62
+ mov word [es:si], strict word 00002h ; 26 c7 04 02 00 ; 0xc3240
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3245 vgabios.c:2198
+ cmp AL, strict byte 004h ; 3c 04 ; 0xc3248
+ jc short 032a1h ; 72 55 ; 0xc324a
+ cmp AL, strict byte 007h ; 3c 07 ; 0xc324c
+ je short 032a1h ; 74 51 ; 0xc324e
+ lea si, [bx+02dh] ; 8d 77 2d ; 0xc3250 vgabios.c:2199
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc3253 vgabios.c:52
+ mov byte [es:si], 001h ; 26 c6 04 01 ; 0xc3256
+ mov si, 00084h ; be 84 00 ; 0xc325a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc325d
+ mov es, ax ; 8e c0 ; 0xc3260
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3262
+ xor ah, ah ; 30 e4 ; 0xc3265 vgabios.c:48
+ inc ax ; 40 ; 0xc3267
+ mov si, 00085h ; be 85 00 ; 0xc3268 vgabios.c:47
+ mov dl, byte [es:si] ; 26 8a 14 ; 0xc326b
+ xor dh, dh ; 30 f6 ; 0xc326e vgabios.c:48
+ imul dx ; f7 ea ; 0xc3270
+ cmp ax, 0015eh ; 3d 5e 01 ; 0xc3272 vgabios.c:2201
+ jc short 03285h ; 72 0e ; 0xc3275
+ jbe short 0328eh ; 76 15 ; 0xc3277
+ cmp ax, 001e0h ; 3d e0 01 ; 0xc3279
+ je short 03296h ; 74 18 ; 0xc327c
+ cmp ax, 00190h ; 3d 90 01 ; 0xc327e
+ je short 03292h ; 74 0f ; 0xc3281
+ jmp short 03296h ; eb 11 ; 0xc3283
+ cmp ax, 000c8h ; 3d c8 00 ; 0xc3285
+ jne short 03296h ; 75 0c ; 0xc3288
+ xor al, al ; 30 c0 ; 0xc328a vgabios.c:2202
+ jmp short 03298h ; eb 0a ; 0xc328c
+ mov AL, strict byte 001h ; b0 01 ; 0xc328e vgabios.c:2203
+ jmp short 03298h ; eb 06 ; 0xc3290
+ mov AL, strict byte 002h ; b0 02 ; 0xc3292 vgabios.c:2204
+ jmp short 03298h ; eb 02 ; 0xc3294
+ mov AL, strict byte 003h ; b0 03 ; 0xc3296 vgabios.c:2206
+ lea si, [bx+02ah] ; 8d 77 2a ; 0xc3298 vgabios.c:2208
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc329b vgabios.c:52
+ mov byte [es:si], al ; 26 88 04 ; 0xc329e
+ lea di, [bx+033h] ; 8d 7f 33 ; 0xc32a1 vgabios.c:2211
+ mov cx, strict word 0000dh ; b9 0d 00 ; 0xc32a4
+ xor ax, ax ; 31 c0 ; 0xc32a7
+ mov es, [bp-00ch] ; 8e 46 f4 ; 0xc32a9
+ jcxz 032b0h ; e3 02 ; 0xc32ac
+ rep stosb ; f3 aa ; 0xc32ae
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc32b0 vgabios.c:2212
+ pop di ; 5f ; 0xc32b3
+ pop si ; 5e ; 0xc32b4
+ pop cx ; 59 ; 0xc32b5
+ pop bp ; 5d ; 0xc32b6
+ retn ; c3 ; 0xc32b7
+ ; disGetNextSymbol 0xc32b8 LB 0x12ac -> off=0x0 cb=0000000000000023 uValue=00000000000c32b8 'biosfn_read_video_state_size2'
+biosfn_read_video_state_size2: ; 0xc32b8 LB 0x23
+ push dx ; 52 ; 0xc32b8 vgabios.c:2215
+ push bp ; 55 ; 0xc32b9
+ mov bp, sp ; 89 e5 ; 0xc32ba
+ mov dx, ax ; 89 c2 ; 0xc32bc
+ xor ax, ax ; 31 c0 ; 0xc32be vgabios.c:2219
+ test dl, 001h ; f6 c2 01 ; 0xc32c0 vgabios.c:2220
+ je short 032c8h ; 74 03 ; 0xc32c3
+ mov ax, strict word 00046h ; b8 46 00 ; 0xc32c5 vgabios.c:2221
+ test dl, 002h ; f6 c2 02 ; 0xc32c8 vgabios.c:2223
+ je short 032d0h ; 74 03 ; 0xc32cb
+ add ax, strict word 0002ah ; 05 2a 00 ; 0xc32cd vgabios.c:2224
+ test dl, 004h ; f6 c2 04 ; 0xc32d0 vgabios.c:2226
+ je short 032d8h ; 74 03 ; 0xc32d3
+ add ax, 00304h ; 05 04 03 ; 0xc32d5 vgabios.c:2227
+ pop bp ; 5d ; 0xc32d8 vgabios.c:2230
+ pop dx ; 5a ; 0xc32d9
+ retn ; c3 ; 0xc32da
+ ; disGetNextSymbol 0xc32db LB 0x1289 -> off=0x0 cb=000000000000001b uValue=00000000000c32db 'vga_get_video_state_size'
+vga_get_video_state_size: ; 0xc32db LB 0x1b
+ push bp ; 55 ; 0xc32db vgabios.c:2232
+ mov bp, sp ; 89 e5 ; 0xc32dc
+ push bx ; 53 ; 0xc32de
+ push cx ; 51 ; 0xc32df
+ mov bx, dx ; 89 d3 ; 0xc32e0
+ call 032b8h ; e8 d3 ff ; 0xc32e2 vgabios.c:2235
+ add ax, strict word 0003fh ; 05 3f 00 ; 0xc32e5
+ mov CL, strict byte 006h ; b1 06 ; 0xc32e8
+ shr ax, CL ; d3 e8 ; 0xc32ea
+ mov word [ss:bx], ax ; 36 89 07 ; 0xc32ec
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc32ef vgabios.c:2236
+ pop cx ; 59 ; 0xc32f2
+ pop bx ; 5b ; 0xc32f3
+ pop bp ; 5d ; 0xc32f4
+ retn ; c3 ; 0xc32f5
+ ; disGetNextSymbol 0xc32f6 LB 0x126e -> off=0x0 cb=00000000000002d8 uValue=00000000000c32f6 'biosfn_save_video_state'
+biosfn_save_video_state: ; 0xc32f6 LB 0x2d8
+ push bp ; 55 ; 0xc32f6 vgabios.c:2238
+ mov bp, sp ; 89 e5 ; 0xc32f7
+ push cx ; 51 ; 0xc32f9
+ push si ; 56 ; 0xc32fa
+ push di ; 57 ; 0xc32fb
+ push ax ; 50 ; 0xc32fc
+ push ax ; 50 ; 0xc32fd
+ push ax ; 50 ; 0xc32fe
+ mov cx, dx ; 89 d1 ; 0xc32ff
+ mov si, strict word 00063h ; be 63 00 ; 0xc3301 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3304
+ mov es, ax ; 8e c0 ; 0xc3307
+ mov di, word [es:si] ; 26 8b 3c ; 0xc3309
+ mov si, di ; 89 fe ; 0xc330c vgabios.c:58
+ test byte [bp-00ch], 001h ; f6 46 f4 01 ; 0xc330e vgabios.c:2243
+ je short 0337ah ; 74 66 ; 0xc3312
+ mov dx, 003c4h ; ba c4 03 ; 0xc3314 vgabios.c:2244
+ in AL, DX ; ec ; 0xc3317
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3318
+ mov es, cx ; 8e c1 ; 0xc331a vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc331c
+ inc bx ; 43 ; 0xc331f vgabios.c:2244
+ mov dx, di ; 89 fa ; 0xc3320
+ in AL, DX ; ec ; 0xc3322
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3323
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3325 vgabios.c:52
+ inc bx ; 43 ; 0xc3328 vgabios.c:2245
+ mov dx, 003ceh ; ba ce 03 ; 0xc3329
+ in AL, DX ; ec ; 0xc332c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc332d
+ mov byte [es:bx], al ; 26 88 07 ; 0xc332f vgabios.c:52
+ inc bx ; 43 ; 0xc3332 vgabios.c:2246
+ mov dx, 003dah ; ba da 03 ; 0xc3333
+ in AL, DX ; ec ; 0xc3336
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3337
+ mov dx, 003c0h ; ba c0 03 ; 0xc3339 vgabios.c:2248
+ in AL, DX ; ec ; 0xc333c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc333d
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc333f
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc3342 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3345
+ inc bx ; 43 ; 0xc3348 vgabios.c:2249
+ mov dx, 003cah ; ba ca 03 ; 0xc3349
+ in AL, DX ; ec ; 0xc334c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc334d
+ mov byte [es:bx], al ; 26 88 07 ; 0xc334f vgabios.c:52
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc3352 vgabios.c:2252
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3355
+ add bx, ax ; 01 c3 ; 0xc3358 vgabios.c:2250
+ jmp short 03362h ; eb 06 ; 0xc335a
+ cmp word [bp-008h], strict byte 00004h ; 83 7e f8 04 ; 0xc335c
+ jnbe short 0337dh ; 77 1b ; 0xc3360
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3362 vgabios.c:2253
+ mov dx, 003c4h ; ba c4 03 ; 0xc3365
+ out DX, AL ; ee ; 0xc3368
+ mov dx, 003c5h ; ba c5 03 ; 0xc3369 vgabios.c:2254
+ in AL, DX ; ec ; 0xc336c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc336d
+ mov es, cx ; 8e c1 ; 0xc336f vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3371
+ inc bx ; 43 ; 0xc3374 vgabios.c:2254
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3375 vgabios.c:2255
+ jmp short 0335ch ; eb e2 ; 0xc3378
+ jmp near 0342ah ; e9 ad 00 ; 0xc337a
+ xor al, al ; 30 c0 ; 0xc337d vgabios.c:2256
+ mov dx, 003c4h ; ba c4 03 ; 0xc337f
+ out DX, AL ; ee ; 0xc3382
+ mov dx, 003c5h ; ba c5 03 ; 0xc3383 vgabios.c:2257
+ in AL, DX ; ec ; 0xc3386
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3387
+ mov es, cx ; 8e c1 ; 0xc3389 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc338b
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc338e vgabios.c:2259
+ inc bx ; 43 ; 0xc3393 vgabios.c:2257
+ jmp short 0339ch ; eb 06 ; 0xc3394
+ cmp word [bp-008h], strict byte 00018h ; 83 7e f8 18 ; 0xc3396
+ jnbe short 033b3h ; 77 17 ; 0xc339a
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc339c vgabios.c:2260
+ mov dx, si ; 89 f2 ; 0xc339f
+ out DX, AL ; ee ; 0xc33a1
+ lea dx, [si+001h] ; 8d 54 01 ; 0xc33a2 vgabios.c:2261
+ in AL, DX ; ec ; 0xc33a5
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc33a6
+ mov es, cx ; 8e c1 ; 0xc33a8 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc33aa
+ inc bx ; 43 ; 0xc33ad vgabios.c:2261
+ inc word [bp-008h] ; ff 46 f8 ; 0xc33ae vgabios.c:2262
+ jmp short 03396h ; eb e3 ; 0xc33b1
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc33b3 vgabios.c:2264
+ jmp short 033c0h ; eb 06 ; 0xc33b8
+ cmp word [bp-008h], strict byte 00013h ; 83 7e f8 13 ; 0xc33ba
+ jnbe short 033e4h ; 77 24 ; 0xc33be
+ mov dx, 003dah ; ba da 03 ; 0xc33c0 vgabios.c:2265
+ in AL, DX ; ec ; 0xc33c3
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc33c4
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc33c6 vgabios.c:2266
+ and ax, strict word 00020h ; 25 20 00 ; 0xc33c9
+ or ax, word [bp-008h] ; 0b 46 f8 ; 0xc33cc
+ mov dx, 003c0h ; ba c0 03 ; 0xc33cf
+ out DX, AL ; ee ; 0xc33d2
+ mov dx, 003c1h ; ba c1 03 ; 0xc33d3 vgabios.c:2267
+ in AL, DX ; ec ; 0xc33d6
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc33d7
+ mov es, cx ; 8e c1 ; 0xc33d9 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc33db
+ inc bx ; 43 ; 0xc33de vgabios.c:2267
+ inc word [bp-008h] ; ff 46 f8 ; 0xc33df vgabios.c:2268
+ jmp short 033bah ; eb d6 ; 0xc33e2
+ mov dx, 003dah ; ba da 03 ; 0xc33e4 vgabios.c:2269
+ in AL, DX ; ec ; 0xc33e7
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc33e8
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc33ea vgabios.c:2271
+ jmp short 033f7h ; eb 06 ; 0xc33ef
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc33f1
+ jnbe short 0340fh ; 77 18 ; 0xc33f5
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc33f7 vgabios.c:2272
+ mov dx, 003ceh ; ba ce 03 ; 0xc33fa
+ out DX, AL ; ee ; 0xc33fd
+ mov dx, 003cfh ; ba cf 03 ; 0xc33fe vgabios.c:2273
+ in AL, DX ; ec ; 0xc3401
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3402
+ mov es, cx ; 8e c1 ; 0xc3404 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3406
+ inc bx ; 43 ; 0xc3409 vgabios.c:2273
+ inc word [bp-008h] ; ff 46 f8 ; 0xc340a vgabios.c:2274
+ jmp short 033f1h ; eb e2 ; 0xc340d
+ mov es, cx ; 8e c1 ; 0xc340f vgabios.c:62
+ mov word [es:bx], si ; 26 89 37 ; 0xc3411
+ inc bx ; 43 ; 0xc3414 vgabios.c:2276
+ inc bx ; 43 ; 0xc3415
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3416 vgabios.c:52
+ inc bx ; 43 ; 0xc341a vgabios.c:2279
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc341b vgabios.c:52
+ inc bx ; 43 ; 0xc341f vgabios.c:2280
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3420 vgabios.c:52
+ inc bx ; 43 ; 0xc3424 vgabios.c:2281
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc3425 vgabios.c:52
+ inc bx ; 43 ; 0xc3429 vgabios.c:2282
+ test byte [bp-00ch], 002h ; f6 46 f4 02 ; 0xc342a vgabios.c:2284
+ jne short 03433h ; 75 03 ; 0xc342e
+ jmp near 03572h ; e9 3f 01 ; 0xc3430
+ mov si, strict word 00049h ; be 49 00 ; 0xc3433 vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3436
+ mov es, ax ; 8e c0 ; 0xc3439
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc343b
+ mov es, cx ; 8e c1 ; 0xc343e vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3440
+ inc bx ; 43 ; 0xc3443 vgabios.c:2285
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc3444 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3447
+ mov es, ax ; 8e c0 ; 0xc344a
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc344c
+ mov es, cx ; 8e c1 ; 0xc344f vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3451
+ inc bx ; 43 ; 0xc3454 vgabios.c:2286
+ inc bx ; 43 ; 0xc3455
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc3456 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3459
+ mov es, ax ; 8e c0 ; 0xc345c
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc345e
+ mov es, cx ; 8e c1 ; 0xc3461 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3463
+ inc bx ; 43 ; 0xc3466 vgabios.c:2287
+ inc bx ; 43 ; 0xc3467
+ mov si, strict word 00063h ; be 63 00 ; 0xc3468 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc346b
+ mov es, ax ; 8e c0 ; 0xc346e
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3470
+ mov es, cx ; 8e c1 ; 0xc3473 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3475
+ inc bx ; 43 ; 0xc3478 vgabios.c:2288
+ inc bx ; 43 ; 0xc3479
+ mov si, 00084h ; be 84 00 ; 0xc347a vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc347d
+ mov es, ax ; 8e c0 ; 0xc3480
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3482
+ mov es, cx ; 8e c1 ; 0xc3485 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3487
+ inc bx ; 43 ; 0xc348a vgabios.c:2289
+ mov si, 00085h ; be 85 00 ; 0xc348b vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc348e
+ mov es, ax ; 8e c0 ; 0xc3491
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3493
+ mov es, cx ; 8e c1 ; 0xc3496 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3498
+ inc bx ; 43 ; 0xc349b vgabios.c:2290
+ inc bx ; 43 ; 0xc349c
+ mov si, 00087h ; be 87 00 ; 0xc349d vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc34a0
+ mov es, ax ; 8e c0 ; 0xc34a3
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc34a5
+ mov es, cx ; 8e c1 ; 0xc34a8 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc34aa
+ inc bx ; 43 ; 0xc34ad vgabios.c:2291
+ mov si, 00088h ; be 88 00 ; 0xc34ae vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc34b1
+ mov es, ax ; 8e c0 ; 0xc34b4
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc34b6
+ mov es, cx ; 8e c1 ; 0xc34b9 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc34bb
+ inc bx ; 43 ; 0xc34be vgabios.c:2292
+ mov si, 00089h ; be 89 00 ; 0xc34bf vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc34c2
+ mov es, ax ; 8e c0 ; 0xc34c5
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc34c7
+ mov es, cx ; 8e c1 ; 0xc34ca vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc34cc
+ inc bx ; 43 ; 0xc34cf vgabios.c:2293
+ mov si, strict word 00060h ; be 60 00 ; 0xc34d0 vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc34d3
+ mov es, ax ; 8e c0 ; 0xc34d6
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34d8
+ mov es, cx ; 8e c1 ; 0xc34db vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc34dd
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc34e0 vgabios.c:2295
+ inc bx ; 43 ; 0xc34e5 vgabios.c:2294
+ inc bx ; 43 ; 0xc34e6
+ jmp short 034efh ; eb 06 ; 0xc34e7
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc34e9
+ jnc short 0350bh ; 73 1c ; 0xc34ed
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc34ef vgabios.c:2296
+ sal si, 1 ; d1 e6 ; 0xc34f2
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc34f4
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc34f7 vgabios.c:57
+ mov es, ax ; 8e c0 ; 0xc34fa
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc34fc
+ mov es, cx ; 8e c1 ; 0xc34ff vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3501
+ inc bx ; 43 ; 0xc3504 vgabios.c:2297
+ inc bx ; 43 ; 0xc3505
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3506 vgabios.c:2298
+ jmp short 034e9h ; eb de ; 0xc3509
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc350b vgabios.c:57
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc350e
+ mov es, ax ; 8e c0 ; 0xc3511
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3513
+ mov es, cx ; 8e c1 ; 0xc3516 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc3518
+ inc bx ; 43 ; 0xc351b vgabios.c:2299
+ inc bx ; 43 ; 0xc351c
+ mov si, strict word 00062h ; be 62 00 ; 0xc351d vgabios.c:47
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3520
+ mov es, ax ; 8e c0 ; 0xc3523
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3525
+ mov es, cx ; 8e c1 ; 0xc3528 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc352a
+ inc bx ; 43 ; 0xc352d vgabios.c:2300
+ mov si, strict word 0007ch ; be 7c 00 ; 0xc352e vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc3531
+ mov es, ax ; 8e c0 ; 0xc3533
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3535
+ mov es, cx ; 8e c1 ; 0xc3538 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc353a
+ inc bx ; 43 ; 0xc353d vgabios.c:2302
+ inc bx ; 43 ; 0xc353e
+ mov si, strict word 0007eh ; be 7e 00 ; 0xc353f vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc3542
+ mov es, ax ; 8e c0 ; 0xc3544
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3546
+ mov es, cx ; 8e c1 ; 0xc3549 vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc354b
+ inc bx ; 43 ; 0xc354e vgabios.c:2303
+ inc bx ; 43 ; 0xc354f
+ mov si, 0010ch ; be 0c 01 ; 0xc3550 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc3553
+ mov es, ax ; 8e c0 ; 0xc3555
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3557
+ mov es, cx ; 8e c1 ; 0xc355a vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc355c
+ inc bx ; 43 ; 0xc355f vgabios.c:2304
+ inc bx ; 43 ; 0xc3560
+ mov si, 0010eh ; be 0e 01 ; 0xc3561 vgabios.c:57
+ xor ax, ax ; 31 c0 ; 0xc3564
+ mov es, ax ; 8e c0 ; 0xc3566
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc3568
+ mov es, cx ; 8e c1 ; 0xc356b vgabios.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc356d
+ inc bx ; 43 ; 0xc3570 vgabios.c:2305
+ inc bx ; 43 ; 0xc3571
+ test byte [bp-00ch], 004h ; f6 46 f4 04 ; 0xc3572 vgabios.c:2307
+ je short 035c4h ; 74 4c ; 0xc3576
+ mov dx, 003c7h ; ba c7 03 ; 0xc3578 vgabios.c:2309
+ in AL, DX ; ec ; 0xc357b
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc357c
+ mov es, cx ; 8e c1 ; 0xc357e vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3580
+ inc bx ; 43 ; 0xc3583 vgabios.c:2309
+ mov dx, 003c8h ; ba c8 03 ; 0xc3584
+ in AL, DX ; ec ; 0xc3587
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3588
+ mov byte [es:bx], al ; 26 88 07 ; 0xc358a vgabios.c:52
+ inc bx ; 43 ; 0xc358d vgabios.c:2310
+ mov dx, 003c6h ; ba c6 03 ; 0xc358e
+ in AL, DX ; ec ; 0xc3591
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3592
+ mov byte [es:bx], al ; 26 88 07 ; 0xc3594 vgabios.c:52
+ inc bx ; 43 ; 0xc3597 vgabios.c:2311
+ xor al, al ; 30 c0 ; 0xc3598
+ mov dx, 003c8h ; ba c8 03 ; 0xc359a
+ out DX, AL ; ee ; 0xc359d
+ xor ah, ah ; 30 e4 ; 0xc359e vgabios.c:2314
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc35a0
+ jmp short 035ach ; eb 07 ; 0xc35a3
+ cmp word [bp-008h], 00300h ; 81 7e f8 00 03 ; 0xc35a5
+ jnc short 035bdh ; 73 11 ; 0xc35aa
+ mov dx, 003c9h ; ba c9 03 ; 0xc35ac vgabios.c:2315
+ in AL, DX ; ec ; 0xc35af
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc35b0
+ mov es, cx ; 8e c1 ; 0xc35b2 vgabios.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc35b4
+ inc bx ; 43 ; 0xc35b7 vgabios.c:2315
+ inc word [bp-008h] ; ff 46 f8 ; 0xc35b8 vgabios.c:2316
+ jmp short 035a5h ; eb e8 ; 0xc35bb
+ mov es, cx ; 8e c1 ; 0xc35bd vgabios.c:52
+ mov byte [es:bx], 000h ; 26 c6 07 00 ; 0xc35bf
+ inc bx ; 43 ; 0xc35c3 vgabios.c:2317
+ mov ax, bx ; 89 d8 ; 0xc35c4 vgabios.c:2320
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc35c6
+ pop di ; 5f ; 0xc35c9
+ pop si ; 5e ; 0xc35ca
+ pop cx ; 59 ; 0xc35cb
+ pop bp ; 5d ; 0xc35cc
+ retn ; c3 ; 0xc35cd
+ ; disGetNextSymbol 0xc35ce LB 0xf96 -> off=0x0 cb=00000000000002ba uValue=00000000000c35ce 'biosfn_restore_video_state'
+biosfn_restore_video_state: ; 0xc35ce LB 0x2ba
+ push bp ; 55 ; 0xc35ce vgabios.c:2322
+ mov bp, sp ; 89 e5 ; 0xc35cf
+ push cx ; 51 ; 0xc35d1
+ push si ; 56 ; 0xc35d2
+ push di ; 57 ; 0xc35d3
+ sub sp, strict byte 00008h ; 83 ec 08 ; 0xc35d4
+ push ax ; 50 ; 0xc35d7
+ mov cx, dx ; 89 d1 ; 0xc35d8
+ test byte [bp-010h], 001h ; f6 46 f0 01 ; 0xc35da vgabios.c:2326
+ je short 03654h ; 74 74 ; 0xc35de
+ mov dx, 003dah ; ba da 03 ; 0xc35e0 vgabios.c:2328
+ in AL, DX ; ec ; 0xc35e3
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc35e4
+ lea si, [bx+040h] ; 8d 77 40 ; 0xc35e6 vgabios.c:2330
+ mov es, cx ; 8e c1 ; 0xc35e9 vgabios.c:57
+ mov ax, word [es:si] ; 26 8b 04 ; 0xc35eb
+ mov word [bp-00ch], ax ; 89 46 f4 ; 0xc35ee vgabios.c:58
+ mov si, bx ; 89 de ; 0xc35f1 vgabios.c:2331
+ mov word [bp-008h], strict word 00001h ; c7 46 f8 01 00 ; 0xc35f3 vgabios.c:2334
+ add bx, strict byte 00005h ; 83 c3 05 ; 0xc35f8 vgabios.c:2332
+ jmp short 03603h ; eb 06 ; 0xc35fb
+ cmp word [bp-008h], strict byte 00004h ; 83 7e f8 04 ; 0xc35fd
+ jnbe short 03619h ; 77 16 ; 0xc3601
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3603 vgabios.c:2335
+ mov dx, 003c4h ; ba c4 03 ; 0xc3606
+ out DX, AL ; ee ; 0xc3609
+ mov es, cx ; 8e c1 ; 0xc360a vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc360c
+ mov dx, 003c5h ; ba c5 03 ; 0xc360f vgabios.c:48
+ out DX, AL ; ee ; 0xc3612
+ inc bx ; 43 ; 0xc3613 vgabios.c:2336
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3614 vgabios.c:2337
+ jmp short 035fdh ; eb e4 ; 0xc3617
+ xor al, al ; 30 c0 ; 0xc3619 vgabios.c:2338
+ mov dx, 003c4h ; ba c4 03 ; 0xc361b
+ out DX, AL ; ee ; 0xc361e
+ mov es, cx ; 8e c1 ; 0xc361f vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3621
+ mov dx, 003c5h ; ba c5 03 ; 0xc3624 vgabios.c:48
+ out DX, AL ; ee ; 0xc3627
+ inc bx ; 43 ; 0xc3628 vgabios.c:2339
+ mov dx, 003cch ; ba cc 03 ; 0xc3629
+ in AL, DX ; ec ; 0xc362c
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc362d
+ and AL, strict byte 0feh ; 24 fe ; 0xc362f
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc3631
+ cmp word [bp-00ch], 003d4h ; 81 7e f4 d4 03 ; 0xc3634 vgabios.c:2343
+ jne short 0363fh ; 75 04 ; 0xc3639
+ or byte [bp-00eh], 001h ; 80 4e f2 01 ; 0xc363b vgabios.c:2344
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc363f vgabios.c:2345
+ mov dx, 003c2h ; ba c2 03 ; 0xc3642
+ out DX, AL ; ee ; 0xc3645
+ mov ax, strict word 00011h ; b8 11 00 ; 0xc3646 vgabios.c:2348
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc3649
+ out DX, ax ; ef ; 0xc364c
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc364d vgabios.c:2350
+ jmp short 0365dh ; eb 09 ; 0xc3652
+ jmp near 03717h ; e9 c0 00 ; 0xc3654
+ cmp word [bp-008h], strict byte 00018h ; 83 7e f8 18 ; 0xc3657
+ jnbe short 03677h ; 77 1a ; 0xc365b
+ cmp word [bp-008h], strict byte 00011h ; 83 7e f8 11 ; 0xc365d vgabios.c:2351
+ je short 03671h ; 74 0e ; 0xc3661
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc3663 vgabios.c:2352
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc3666
+ out DX, AL ; ee ; 0xc3669
+ mov es, cx ; 8e c1 ; 0xc366a vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc366c
+ inc dx ; 42 ; 0xc366f vgabios.c:48
+ out DX, AL ; ee ; 0xc3670
+ inc bx ; 43 ; 0xc3671 vgabios.c:2355
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3672 vgabios.c:2356
+ jmp short 03657h ; eb e0 ; 0xc3675
+ mov AL, strict byte 011h ; b0 11 ; 0xc3677 vgabios.c:2358
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc3679
+ out DX, AL ; ee ; 0xc367c
+ lea di, [word bx-00007h] ; 8d bf f9 ff ; 0xc367d vgabios.c:2359
+ mov es, cx ; 8e c1 ; 0xc3681 vgabios.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc3683
+ inc dx ; 42 ; 0xc3686 vgabios.c:48
+ out DX, AL ; ee ; 0xc3687
+ lea di, [si+003h] ; 8d 7c 03 ; 0xc3688 vgabios.c:2362
+ mov dl, byte [es:di] ; 26 8a 15 ; 0xc368b vgabios.c:47
+ xor dh, dh ; 30 f6 ; 0xc368e vgabios.c:48
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc3690
+ mov dx, 003dah ; ba da 03 ; 0xc3693 vgabios.c:2363
+ in AL, DX ; ec ; 0xc3696
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3697
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc3699 vgabios.c:2364
+ jmp short 036a6h ; eb 06 ; 0xc369e
+ cmp word [bp-008h], strict byte 00013h ; 83 7e f8 13 ; 0xc36a0
+ jnbe short 036bfh ; 77 19 ; 0xc36a4
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc36a6 vgabios.c:2365
+ and ax, strict word 00020h ; 25 20 00 ; 0xc36a9
+ or ax, word [bp-008h] ; 0b 46 f8 ; 0xc36ac
+ mov dx, 003c0h ; ba c0 03 ; 0xc36af
+ out DX, AL ; ee ; 0xc36b2
+ mov es, cx ; 8e c1 ; 0xc36b3 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc36b5
+ out DX, AL ; ee ; 0xc36b8 vgabios.c:48
+ inc bx ; 43 ; 0xc36b9 vgabios.c:2366
+ inc word [bp-008h] ; ff 46 f8 ; 0xc36ba vgabios.c:2367
+ jmp short 036a0h ; eb e1 ; 0xc36bd
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc36bf vgabios.c:2368
+ mov dx, 003c0h ; ba c0 03 ; 0xc36c2
+ out DX, AL ; ee ; 0xc36c5
+ mov dx, 003dah ; ba da 03 ; 0xc36c6 vgabios.c:2369
+ in AL, DX ; ec ; 0xc36c9
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc36ca
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc36cc vgabios.c:2371
+ jmp short 036d9h ; eb 06 ; 0xc36d1
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc36d3
+ jnbe short 036efh ; 77 16 ; 0xc36d7
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc36d9 vgabios.c:2372
+ mov dx, 003ceh ; ba ce 03 ; 0xc36dc
+ out DX, AL ; ee ; 0xc36df
+ mov es, cx ; 8e c1 ; 0xc36e0 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc36e2
+ mov dx, 003cfh ; ba cf 03 ; 0xc36e5 vgabios.c:48
+ out DX, AL ; ee ; 0xc36e8
+ inc bx ; 43 ; 0xc36e9 vgabios.c:2373
+ inc word [bp-008h] ; ff 46 f8 ; 0xc36ea vgabios.c:2374
+ jmp short 036d3h ; eb e4 ; 0xc36ed
+ add bx, strict byte 00006h ; 83 c3 06 ; 0xc36ef vgabios.c:2375
+ mov es, cx ; 8e c1 ; 0xc36f2 vgabios.c:47
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc36f4
+ mov dx, 003c4h ; ba c4 03 ; 0xc36f7 vgabios.c:48
+ out DX, AL ; ee ; 0xc36fa
+ inc si ; 46 ; 0xc36fb vgabios.c:2378
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc36fc vgabios.c:47
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc36ff vgabios.c:48
+ out DX, AL ; ee ; 0xc3702
+ inc si ; 46 ; 0xc3703 vgabios.c:2379
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc3704 vgabios.c:47
+ mov dx, 003ceh ; ba ce 03 ; 0xc3707 vgabios.c:48
+ out DX, AL ; ee ; 0xc370a
+ inc si ; 46 ; 0xc370b vgabios.c:2380
+ inc si ; 46 ; 0xc370c
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc370d vgabios.c:47
+ mov dx, word [bp-00ch] ; 8b 56 f4 ; 0xc3710 vgabios.c:48
+ add dx, strict byte 00006h ; 83 c2 06 ; 0xc3713
+ out DX, AL ; ee ; 0xc3716
+ test byte [bp-010h], 002h ; f6 46 f0 02 ; 0xc3717 vgabios.c:2384
+ jne short 03720h ; 75 03 ; 0xc371b
+ jmp near 0383bh ; e9 1b 01 ; 0xc371d
+ mov es, cx ; 8e c1 ; 0xc3720 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3722
+ mov si, strict word 00049h ; be 49 00 ; 0xc3725 vgabios.c:52
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc3728
+ mov es, dx ; 8e c2 ; 0xc372b
+ mov byte [es:si], al ; 26 88 04 ; 0xc372d
+ inc bx ; 43 ; 0xc3730 vgabios.c:2385
+ mov es, cx ; 8e c1 ; 0xc3731 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3733
+ mov si, strict word 0004ah ; be 4a 00 ; 0xc3736 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3739
+ mov word [es:si], ax ; 26 89 04 ; 0xc373b
+ inc bx ; 43 ; 0xc373e vgabios.c:2386
+ inc bx ; 43 ; 0xc373f
+ mov es, cx ; 8e c1 ; 0xc3740 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3742
+ mov si, strict word 0004ch ; be 4c 00 ; 0xc3745 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3748
+ mov word [es:si], ax ; 26 89 04 ; 0xc374a
+ inc bx ; 43 ; 0xc374d vgabios.c:2387
+ inc bx ; 43 ; 0xc374e
+ mov es, cx ; 8e c1 ; 0xc374f vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3751
+ mov si, strict word 00063h ; be 63 00 ; 0xc3754 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3757
+ mov word [es:si], ax ; 26 89 04 ; 0xc3759
+ inc bx ; 43 ; 0xc375c vgabios.c:2388
+ inc bx ; 43 ; 0xc375d
+ mov es, cx ; 8e c1 ; 0xc375e vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3760
+ mov si, 00084h ; be 84 00 ; 0xc3763 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3766
+ mov byte [es:si], al ; 26 88 04 ; 0xc3768
+ inc bx ; 43 ; 0xc376b vgabios.c:2389
+ mov es, cx ; 8e c1 ; 0xc376c vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc376e
+ mov si, 00085h ; be 85 00 ; 0xc3771 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3774
+ mov word [es:si], ax ; 26 89 04 ; 0xc3776
+ inc bx ; 43 ; 0xc3779 vgabios.c:2390
+ inc bx ; 43 ; 0xc377a
+ mov es, cx ; 8e c1 ; 0xc377b vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc377d
+ mov si, 00087h ; be 87 00 ; 0xc3780 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3783
+ mov byte [es:si], al ; 26 88 04 ; 0xc3785
+ inc bx ; 43 ; 0xc3788 vgabios.c:2391
+ mov es, cx ; 8e c1 ; 0xc3789 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc378b
+ mov si, 00088h ; be 88 00 ; 0xc378e vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc3791
+ mov byte [es:si], al ; 26 88 04 ; 0xc3793
+ inc bx ; 43 ; 0xc3796 vgabios.c:2392
+ mov es, cx ; 8e c1 ; 0xc3797 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3799
+ mov si, 00089h ; be 89 00 ; 0xc379c vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc379f
+ mov byte [es:si], al ; 26 88 04 ; 0xc37a1
+ inc bx ; 43 ; 0xc37a4 vgabios.c:2393
+ mov es, cx ; 8e c1 ; 0xc37a5 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37a7
+ mov si, strict word 00060h ; be 60 00 ; 0xc37aa vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc37ad
+ mov word [es:si], ax ; 26 89 04 ; 0xc37af
+ mov word [bp-008h], strict word 00000h ; c7 46 f8 00 00 ; 0xc37b2 vgabios.c:2395
+ inc bx ; 43 ; 0xc37b7 vgabios.c:2394
+ inc bx ; 43 ; 0xc37b8
+ jmp short 037c1h ; eb 06 ; 0xc37b9
+ cmp word [bp-008h], strict byte 00008h ; 83 7e f8 08 ; 0xc37bb
+ jnc short 037ddh ; 73 1c ; 0xc37bf
+ mov es, cx ; 8e c1 ; 0xc37c1 vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37c3
+ mov si, word [bp-008h] ; 8b 76 f8 ; 0xc37c6 vgabios.c:58
+ sal si, 1 ; d1 e6 ; 0xc37c9
+ add si, strict byte 00050h ; 83 c6 50 ; 0xc37cb
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc37ce vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc37d1
+ mov word [es:si], ax ; 26 89 04 ; 0xc37d3
+ inc bx ; 43 ; 0xc37d6 vgabios.c:2397
+ inc bx ; 43 ; 0xc37d7
+ inc word [bp-008h] ; ff 46 f8 ; 0xc37d8 vgabios.c:2398
+ jmp short 037bbh ; eb de ; 0xc37db
+ mov es, cx ; 8e c1 ; 0xc37dd vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37df
+ mov si, strict word 0004eh ; be 4e 00 ; 0xc37e2 vgabios.c:62
+ mov dx, strict word 00040h ; ba 40 00 ; 0xc37e5
+ mov es, dx ; 8e c2 ; 0xc37e8
+ mov word [es:si], ax ; 26 89 04 ; 0xc37ea
+ inc bx ; 43 ; 0xc37ed vgabios.c:2399
+ inc bx ; 43 ; 0xc37ee
+ mov es, cx ; 8e c1 ; 0xc37ef vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc37f1
+ mov si, strict word 00062h ; be 62 00 ; 0xc37f4 vgabios.c:52
+ mov es, dx ; 8e c2 ; 0xc37f7
+ mov byte [es:si], al ; 26 88 04 ; 0xc37f9
+ inc bx ; 43 ; 0xc37fc vgabios.c:2400
+ mov es, cx ; 8e c1 ; 0xc37fd vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc37ff
+ mov si, strict word 0007ch ; be 7c 00 ; 0xc3802 vgabios.c:62
+ xor dx, dx ; 31 d2 ; 0xc3805
+ mov es, dx ; 8e c2 ; 0xc3807
+ mov word [es:si], ax ; 26 89 04 ; 0xc3809
+ inc bx ; 43 ; 0xc380c vgabios.c:2402
+ inc bx ; 43 ; 0xc380d
+ mov es, cx ; 8e c1 ; 0xc380e vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc3810
+ mov si, strict word 0007eh ; be 7e 00 ; 0xc3813 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3816
+ mov word [es:si], ax ; 26 89 04 ; 0xc3818
+ inc bx ; 43 ; 0xc381b vgabios.c:2403
+ inc bx ; 43 ; 0xc381c
+ mov es, cx ; 8e c1 ; 0xc381d vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc381f
+ mov si, 0010ch ; be 0c 01 ; 0xc3822 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3825
+ mov word [es:si], ax ; 26 89 04 ; 0xc3827
+ inc bx ; 43 ; 0xc382a vgabios.c:2404
+ inc bx ; 43 ; 0xc382b
+ mov es, cx ; 8e c1 ; 0xc382c vgabios.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc382e
+ mov si, 0010eh ; be 0e 01 ; 0xc3831 vgabios.c:62
+ mov es, dx ; 8e c2 ; 0xc3834
+ mov word [es:si], ax ; 26 89 04 ; 0xc3836
+ inc bx ; 43 ; 0xc3839 vgabios.c:2405
+ inc bx ; 43 ; 0xc383a
+ test byte [bp-010h], 004h ; f6 46 f0 04 ; 0xc383b vgabios.c:2407
+ je short 0387eh ; 74 3d ; 0xc383f
+ inc bx ; 43 ; 0xc3841 vgabios.c:2408
+ mov es, cx ; 8e c1 ; 0xc3842 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3844
+ xor ah, ah ; 30 e4 ; 0xc3847 vgabios.c:48
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc3849
+ inc bx ; 43 ; 0xc384c vgabios.c:2409
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc384d vgabios.c:47
+ mov dx, 003c6h ; ba c6 03 ; 0xc3850 vgabios.c:48
+ out DX, AL ; ee ; 0xc3853
+ inc bx ; 43 ; 0xc3854 vgabios.c:2410
+ xor al, al ; 30 c0 ; 0xc3855
+ mov dx, 003c8h ; ba c8 03 ; 0xc3857
+ out DX, AL ; ee ; 0xc385a
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc385b vgabios.c:2413
+ jmp short 03867h ; eb 07 ; 0xc385e
+ cmp word [bp-008h], 00300h ; 81 7e f8 00 03 ; 0xc3860
+ jnc short 03876h ; 73 0f ; 0xc3865
+ mov es, cx ; 8e c1 ; 0xc3867 vgabios.c:47
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc3869
+ mov dx, 003c9h ; ba c9 03 ; 0xc386c vgabios.c:48
+ out DX, AL ; ee ; 0xc386f
+ inc bx ; 43 ; 0xc3870 vgabios.c:2414
+ inc word [bp-008h] ; ff 46 f8 ; 0xc3871 vgabios.c:2415
+ jmp short 03860h ; eb ea ; 0xc3874
+ inc bx ; 43 ; 0xc3876 vgabios.c:2416
+ mov al, byte [bp-00eh] ; 8a 46 f2 ; 0xc3877
+ mov dx, 003c8h ; ba c8 03 ; 0xc387a
+ out DX, AL ; ee ; 0xc387d
+ mov ax, bx ; 89 d8 ; 0xc387e vgabios.c:2420
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc3880
+ pop di ; 5f ; 0xc3883
+ pop si ; 5e ; 0xc3884
+ pop cx ; 59 ; 0xc3885
+ pop bp ; 5d ; 0xc3886
+ retn ; c3 ; 0xc3887
+ ; disGetNextSymbol 0xc3888 LB 0xcdc -> off=0x0 cb=000000000000002b uValue=00000000000c3888 'find_vga_entry'
+find_vga_entry: ; 0xc3888 LB 0x2b
+ push bx ; 53 ; 0xc3888 vgabios.c:2429
+ push cx ; 51 ; 0xc3889
+ push dx ; 52 ; 0xc388a
+ push bp ; 55 ; 0xc388b
+ mov bp, sp ; 89 e5 ; 0xc388c
+ mov dl, al ; 88 c2 ; 0xc388e
+ mov AH, strict byte 0ffh ; b4 ff ; 0xc3890 vgabios.c:2431
+ xor al, al ; 30 c0 ; 0xc3892 vgabios.c:2432
+ jmp short 0389ch ; eb 06 ; 0xc3894
+ db 0feh, 0c0h
+ ; inc al ; fe c0 ; 0xc3896 vgabios.c:2433
+ cmp AL, strict byte 00fh ; 3c 0f ; 0xc3898
+ jnbe short 038ach ; 77 10 ; 0xc389a
+ mov bl, al ; 88 c3 ; 0xc389c
+ xor bh, bh ; 30 ff ; 0xc389e
+ mov CL, strict byte 003h ; b1 03 ; 0xc38a0
+ sal bx, CL ; d3 e3 ; 0xc38a2
+ cmp dl, byte [bx+047aeh] ; 3a 97 ae 47 ; 0xc38a4
+ jne short 03896h ; 75 ec ; 0xc38a8
+ mov ah, al ; 88 c4 ; 0xc38aa
+ mov al, ah ; 88 e0 ; 0xc38ac vgabios.c:2438
+ pop bp ; 5d ; 0xc38ae
+ pop dx ; 5a ; 0xc38af
+ pop cx ; 59 ; 0xc38b0
+ pop bx ; 5b ; 0xc38b1
+ retn ; c3 ; 0xc38b2
+ ; disGetNextSymbol 0xc38b3 LB 0xcb1 -> off=0x0 cb=000000000000000e uValue=00000000000c38b3 'readx_byte'
+readx_byte: ; 0xc38b3 LB 0xe
+ push bx ; 53 ; 0xc38b3 vgabios.c:2450
+ push bp ; 55 ; 0xc38b4
+ mov bp, sp ; 89 e5 ; 0xc38b5
+ mov bx, dx ; 89 d3 ; 0xc38b7
+ mov es, ax ; 8e c0 ; 0xc38b9 vgabios.c:2452
+ mov al, byte [es:bx] ; 26 8a 07 ; 0xc38bb
+ pop bp ; 5d ; 0xc38be vgabios.c:2453
+ pop bx ; 5b ; 0xc38bf
+ retn ; c3 ; 0xc38c0
+ ; disGetNextSymbol 0xc38c1 LB 0xca3 -> off=0x8a cb=0000000000000456 uValue=00000000000c394b 'int10_func'
+ db 056h, 04fh, 01ch, 01bh, 013h, 012h, 011h, 010h, 00eh, 00dh, 00ch, 00ah, 009h, 008h, 007h, 006h
+ db 005h, 004h, 003h, 002h, 001h, 000h, 09ah, 03dh, 075h, 039h, 0b2h, 039h, 0c1h, 039h, 0cfh, 039h
+ db 0dfh, 039h, 0efh, 039h, 0f9h, 039h, 022h, 03ah, 04bh, 03ah, 059h, 03ah, 06fh, 03ah, 087h, 03ah
+ db 0aah, 03ah, 0beh, 03ah, 0d4h, 03ah, 0e0h, 03ah, 0e2h, 03bh, 068h, 03ch, 08bh, 03ch, 09fh, 03ch
+ db 0e1h, 03ch, 06ch, 03dh, 030h, 024h, 023h, 022h, 021h, 020h, 014h, 012h, 011h, 010h, 004h, 003h
+ db 002h, 001h, 000h, 09ah, 03dh, 0ffh, 03ah, 01ah, 03bh, 038h, 03bh, 050h, 03bh, 05bh, 03bh, 0ffh
+ db 03ah, 01ah, 03bh, 038h, 03bh, 05bh, 03bh, 073h, 03bh, 07eh, 03bh, 097h, 03bh, 0a6h, 03bh, 0b5h
+ db 03bh, 0c2h, 03bh, 00ah, 009h, 006h, 004h, 002h, 001h, 000h, 05eh, 03dh, 007h, 03dh, 015h, 03dh
+ db 026h, 03dh, 036h, 03dh, 04bh, 03dh, 05eh, 03dh, 05eh, 03dh
+int10_func: ; 0xc394b LB 0x456
+ push bp ; 55 ; 0xc394b vgabios.c:2531
+ mov bp, sp ; 89 e5 ; 0xc394c
+ push si ; 56 ; 0xc394e
+ push di ; 57 ; 0xc394f
+ push ax ; 50 ; 0xc3950
+ mov si, word [bp+004h] ; 8b 76 04 ; 0xc3951
+ mov al, byte [bp+013h] ; 8a 46 13 ; 0xc3954 vgabios.c:2536
+ xor ah, ah ; 30 e4 ; 0xc3957
+ mov dx, ax ; 89 c2 ; 0xc3959
+ cmp ax, strict word 00056h ; 3d 56 00 ; 0xc395b
+ jnbe short 039cch ; 77 6c ; 0xc395e
+ push CS ; 0e ; 0xc3960
+ pop ES ; 07 ; 0xc3961
+ mov cx, strict word 00017h ; b9 17 00 ; 0xc3962
+ mov di, 038c1h ; bf c1 38 ; 0xc3965
+ repne scasb ; f2 ae ; 0xc3968
+ sal cx, 1 ; d1 e1 ; 0xc396a
+ mov di, cx ; 89 cf ; 0xc396c
+ mov ax, word [cs:di+038d7h] ; 2e 8b 85 d7 38 ; 0xc396e
+ jmp ax ; ff e0 ; 0xc3973
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3975 vgabios.c:2539
+ xor ah, ah ; 30 e4 ; 0xc3978
+ call 01479h ; e8 fc da ; 0xc397a
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc397d vgabios.c:2540
+ and ax, strict word 0007fh ; 25 7f 00 ; 0xc3980
+ cmp ax, strict word 00007h ; 3d 07 00 ; 0xc3983
+ je short 0399dh ; 74 15 ; 0xc3986
+ cmp ax, strict word 00006h ; 3d 06 00 ; 0xc3988
+ je short 03994h ; 74 07 ; 0xc398b
+ cmp ax, strict word 00005h ; 3d 05 00 ; 0xc398d
+ jbe short 0399dh ; 76 0b ; 0xc3990
+ jmp short 039a6h ; eb 12 ; 0xc3992
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3994 vgabios.c:2542
+ xor al, al ; 30 c0 ; 0xc3997
+ or AL, strict byte 03fh ; 0c 3f ; 0xc3999
+ jmp short 039adh ; eb 10 ; 0xc399b vgabios.c:2543
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc399d vgabios.c:2551
+ xor al, al ; 30 c0 ; 0xc39a0
+ or AL, strict byte 030h ; 0c 30 ; 0xc39a2
+ jmp short 039adh ; eb 07 ; 0xc39a4
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc39a6 vgabios.c:2554
+ xor al, al ; 30 c0 ; 0xc39a9
+ or AL, strict byte 020h ; 0c 20 ; 0xc39ab
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc39ad
+ jmp short 039cch ; eb 1a ; 0xc39b0 vgabios.c:2556
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc39b2 vgabios.c:2558
+ xor ah, ah ; 30 e4 ; 0xc39b5
+ mov dx, ax ; 89 c2 ; 0xc39b7
+ mov al, byte [bp+011h] ; 8a 46 11 ; 0xc39b9
+ call 011d3h ; e8 14 d8 ; 0xc39bc
+ jmp short 039cch ; eb 0b ; 0xc39bf vgabios.c:2559
+ mov dx, word [bp+00eh] ; 8b 56 0e ; 0xc39c1 vgabios.c:2561
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc39c4
+ xor ah, ah ; 30 e4 ; 0xc39c7
+ call 012cfh ; e8 03 d9 ; 0xc39c9
+ jmp near 03d9ah ; e9 cb 03 ; 0xc39cc vgabios.c:2562
+ lea bx, [bp+00eh] ; 8d 5e 0e ; 0xc39cf vgabios.c:2564
+ lea dx, [bp+010h] ; 8d 56 10 ; 0xc39d2
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc39d5
+ xor ah, ah ; 30 e4 ; 0xc39d8
+ call 00a97h ; e8 ba d0 ; 0xc39da
+ jmp short 039cch ; eb ed ; 0xc39dd vgabios.c:2565
+ xor ax, ax ; 31 c0 ; 0xc39df vgabios.c:2571
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc39e1
+ mov word [bp+00ch], ax ; 89 46 0c ; 0xc39e4 vgabios.c:2572
+ mov word [bp+010h], ax ; 89 46 10 ; 0xc39e7 vgabios.c:2573
+ mov word [bp+00eh], ax ; 89 46 0e ; 0xc39ea vgabios.c:2574
+ jmp short 039cch ; eb dd ; 0xc39ed vgabios.c:2575
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc39ef vgabios.c:2577
+ xor ah, ah ; 30 e4 ; 0xc39f2
+ call 0135ch ; e8 65 d9 ; 0xc39f4
+ jmp short 039cch ; eb d3 ; 0xc39f7 vgabios.c:2578
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc39f9 vgabios.c:2580
+ push ax ; 50 ; 0xc39fc
+ mov ax, 000ffh ; b8 ff 00 ; 0xc39fd
+ push ax ; 50 ; 0xc3a00
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3a01
+ xor ah, ah ; 30 e4 ; 0xc3a04
+ push ax ; 50 ; 0xc3a06
+ mov al, byte [bp+00fh] ; 8a 46 0f ; 0xc3a07
+ push ax ; 50 ; 0xc3a0a
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc3a0b
+ mov cx, ax ; 89 c1 ; 0xc3a0e
+ mov bl, byte [bp+011h] ; 8a 5e 11 ; 0xc3a10
+ xor bh, bh ; 30 ff ; 0xc3a13
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3a15
+ mov dx, ax ; 89 c2 ; 0xc3a18
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a1a
+ call 01c9fh ; e8 7f e2 ; 0xc3a1d
+ jmp short 039cch ; eb aa ; 0xc3a20 vgabios.c:2581
+ xor ax, ax ; 31 c0 ; 0xc3a22 vgabios.c:2583
+ push ax ; 50 ; 0xc3a24
+ mov ax, 000ffh ; b8 ff 00 ; 0xc3a25
+ push ax ; 50 ; 0xc3a28
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3a29
+ xor ah, ah ; 30 e4 ; 0xc3a2c
+ push ax ; 50 ; 0xc3a2e
+ mov al, byte [bp+00fh] ; 8a 46 0f ; 0xc3a2f
+ push ax ; 50 ; 0xc3a32
+ mov al, byte [bp+010h] ; 8a 46 10 ; 0xc3a33
+ mov cx, ax ; 89 c1 ; 0xc3a36
+ mov al, byte [bp+011h] ; 8a 46 11 ; 0xc3a38
+ mov bx, ax ; 89 c3 ; 0xc3a3b
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3a3d
+ mov dl, byte [bp+012h] ; 8a 56 12 ; 0xc3a40
+ mov si, dx ; 89 d6 ; 0xc3a43
+ mov dx, ax ; 89 c2 ; 0xc3a45
+ mov ax, si ; 89 f0 ; 0xc3a47
+ jmp short 03a1dh ; eb d2 ; 0xc3a49
+ lea dx, [bp+012h] ; 8d 56 12 ; 0xc3a4b vgabios.c:2586
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3a4e
+ xor ah, ah ; 30 e4 ; 0xc3a51
+ call 00dedh ; e8 97 d3 ; 0xc3a53
+ jmp near 03d9ah ; e9 41 03 ; 0xc3a56 vgabios.c:2587
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3a59 vgabios.c:2589
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3a5c
+ xor ah, ah ; 30 e4 ; 0xc3a5f
+ mov bx, ax ; 89 c3 ; 0xc3a61
+ mov dl, byte [bp+00dh] ; 8a 56 0d ; 0xc3a63
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a66
+ call 02607h ; e8 9b eb ; 0xc3a69
+ jmp near 03d9ah ; e9 2b 03 ; 0xc3a6c vgabios.c:2590
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3a6f vgabios.c:2592
+ mov bl, byte [bp+00ch] ; 8a 5e 0c ; 0xc3a72
+ xor bh, bh ; 30 ff ; 0xc3a75
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3a77
+ xor ah, ah ; 30 e4 ; 0xc3a7a
+ mov dx, ax ; 89 c2 ; 0xc3a7c
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3a7e
+ call 02779h ; e8 f5 ec ; 0xc3a81
+ jmp near 03d9ah ; e9 13 03 ; 0xc3a84 vgabios.c:2593
+ mov cx, word [bp+00eh] ; 8b 4e 0e ; 0xc3a87 vgabios.c:2595
+ mov bx, word [bp+010h] ; 8b 5e 10 ; 0xc3a8a
+ mov dl, byte [bp+012h] ; 8a 56 12 ; 0xc3a8d
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3a90
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc3a93
+ mov byte [bp-005h], dh ; 88 76 fb ; 0xc3a96
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc3a99
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc3a9c
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc3a9f
+ xor ah, ah ; 30 e4 ; 0xc3aa2
+ call 028fch ; e8 55 ee ; 0xc3aa4
+ jmp near 03d9ah ; e9 f0 02 ; 0xc3aa7 vgabios.c:2596
+ lea cx, [bp+012h] ; 8d 4e 12 ; 0xc3aaa vgabios.c:2598
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3aad
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3ab0
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3ab3
+ xor ah, ah ; 30 e4 ; 0xc3ab6
+ call 00fc7h ; e8 0c d5 ; 0xc3ab8
+ jmp near 03d9ah ; e9 dc 02 ; 0xc3abb vgabios.c:2599
+ mov cx, strict word 00002h ; b9 02 00 ; 0xc3abe vgabios.c:2607
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3ac1
+ xor ah, ah ; 30 e4 ; 0xc3ac4
+ mov bx, ax ; 89 c3 ; 0xc3ac6
+ mov dx, 000ffh ; ba ff 00 ; 0xc3ac8
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3acb
+ call 02a76h ; e8 a5 ef ; 0xc3ace
+ jmp near 03d9ah ; e9 c6 02 ; 0xc3ad1 vgabios.c:2608
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3ad4 vgabios.c:2611
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3ad7
+ call 01134h ; e8 57 d6 ; 0xc3ada
+ jmp near 03d9ah ; e9 ba 02 ; 0xc3add vgabios.c:2612
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3ae0 vgabios.c:2614
+ xor ah, ah ; 30 e4 ; 0xc3ae3
+ cmp ax, strict word 00030h ; 3d 30 00 ; 0xc3ae5
+ jnbe short 03b58h ; 77 6e ; 0xc3ae8
+ push CS ; 0e ; 0xc3aea
+ pop ES ; 07 ; 0xc3aeb
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc3aec
+ mov di, 03905h ; bf 05 39 ; 0xc3aef
+ repne scasb ; f2 ae ; 0xc3af2
+ sal cx, 1 ; d1 e1 ; 0xc3af4
+ mov di, cx ; 89 cf ; 0xc3af6
+ mov ax, word [cs:di+03914h] ; 2e 8b 85 14 39 ; 0xc3af8
+ jmp ax ; ff e0 ; 0xc3afd
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3aff vgabios.c:2618
+ xor ah, ah ; 30 e4 ; 0xc3b02
+ push ax ; 50 ; 0xc3b04
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b05
+ push ax ; 50 ; 0xc3b08
+ push word [bp+00eh] ; ff 76 0e ; 0xc3b09
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b0c
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3b0f
+ mov bx, word [bp+008h] ; 8b 5e 08 ; 0xc3b12
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3b15
+ jmp short 03b33h ; eb 19 ; 0xc3b18
+ mov ax, strict word 0000eh ; b8 0e 00 ; 0xc3b1a vgabios.c:2622
+ push ax ; 50 ; 0xc3b1d
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b1e
+ xor ah, ah ; 30 e4 ; 0xc3b21
+ push ax ; 50 ; 0xc3b23
+ xor al, al ; 30 c0 ; 0xc3b24
+ push ax ; 50 ; 0xc3b26
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b27
+ mov cx, 00100h ; b9 00 01 ; 0xc3b2a
+ mov bx, 05d6ch ; bb 6c 5d ; 0xc3b2d
+ mov dx, 0c000h ; ba 00 c0 ; 0xc3b30
+ call 02e8ch ; e8 56 f3 ; 0xc3b33
+ jmp short 03b58h ; eb 20 ; 0xc3b36
+ mov ax, strict word 00008h ; b8 08 00 ; 0xc3b38 vgabios.c:2626
+ push ax ; 50 ; 0xc3b3b
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b3c
+ xor ah, ah ; 30 e4 ; 0xc3b3f
+ push ax ; 50 ; 0xc3b41
+ xor al, al ; 30 c0 ; 0xc3b42
+ push ax ; 50 ; 0xc3b44
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b45
+ mov cx, 00100h ; b9 00 01 ; 0xc3b48
+ mov bx, 0556ch ; bb 6c 55 ; 0xc3b4b
+ jmp short 03b30h ; eb e0 ; 0xc3b4e
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b50 vgabios.c:2629
+ xor ah, ah ; 30 e4 ; 0xc3b53
+ call 02df4h ; e8 9c f2 ; 0xc3b55
+ jmp near 03d9ah ; e9 3f 02 ; 0xc3b58 vgabios.c:2630
+ mov ax, strict word 00010h ; b8 10 00 ; 0xc3b5b vgabios.c:2633
+ push ax ; 50 ; 0xc3b5e
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b5f
+ xor ah, ah ; 30 e4 ; 0xc3b62
+ push ax ; 50 ; 0xc3b64
+ xor al, al ; 30 c0 ; 0xc3b65
+ push ax ; 50 ; 0xc3b67
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3b68
+ mov cx, 00100h ; b9 00 01 ; 0xc3b6b
+ mov bx, 06b6ch ; bb 6c 6b ; 0xc3b6e
+ jmp short 03b30h ; eb bd ; 0xc3b71
+ mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b73 vgabios.c:2636
+ mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b76
+ call 02f10h ; e8 94 f3 ; 0xc3b79
+ jmp short 03b58h ; eb da ; 0xc3b7c vgabios.c:2637
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3b7e vgabios.c:2639
+ xor ah, ah ; 30 e4 ; 0xc3b81
+ push ax ; 50 ; 0xc3b83
+ mov cl, byte [bp+00ch] ; 8a 4e 0c ; 0xc3b84
+ xor ch, ch ; 30 ed ; 0xc3b87
+ mov bx, word [bp+010h] ; 8b 5e 10 ; 0xc3b89
+ mov dx, word [bp+008h] ; 8b 56 08 ; 0xc3b8c
+ mov ax, word [bp+016h] ; 8b 46 16 ; 0xc3b8f
+ call 02f73h ; e8 de f3 ; 0xc3b92
+ jmp short 03b58h ; eb c1 ; 0xc3b95 vgabios.c:2640
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3b97 vgabios.c:2642
+ xor ah, ah ; 30 e4 ; 0xc3b9a
+ mov dx, ax ; 89 c2 ; 0xc3b9c
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3b9e
+ call 02f90h ; e8 ec f3 ; 0xc3ba1
+ jmp short 03b58h ; eb b2 ; 0xc3ba4 vgabios.c:2643
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3ba6 vgabios.c:2645
+ xor ah, ah ; 30 e4 ; 0xc3ba9
+ mov dx, ax ; 89 c2 ; 0xc3bab
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3bad
+ call 02fb2h ; e8 ff f3 ; 0xc3bb0
+ jmp short 03b58h ; eb a3 ; 0xc3bb3 vgabios.c:2646
+ mov dl, byte [bp+00eh] ; 8a 56 0e ; 0xc3bb5 vgabios.c:2648
+ mov al, byte [bp+00ch] ; 8a 46 0c ; 0xc3bb8
+ xor ah, ah ; 30 e4 ; 0xc3bbb
+ call 02fd4h ; e8 14 f4 ; 0xc3bbd
+ jmp short 03b58h ; eb 96 ; 0xc3bc0 vgabios.c:2649
+ lea ax, [bp+00eh] ; 8d 46 0e ; 0xc3bc2 vgabios.c:2651
+ push ax ; 50 ; 0xc3bc5
+ lea cx, [bp+010h] ; 8d 4e 10 ; 0xc3bc6
+ lea bx, [bp+008h] ; 8d 5e 08 ; 0xc3bc9
+ lea dx, [bp+016h] ; 8d 56 16 ; 0xc3bcc
+ mov al, byte [bp+00dh] ; 8a 46 0d ; 0xc3bcf
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc3bd2
+ mov byte [bp-005h], 000h ; c6 46 fb 00 ; 0xc3bd5
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc3bd9
+ call 00f44h ; e8 65 d3 ; 0xc3bdc
+ jmp near 03d9ah ; e9 b8 01 ; 0xc3bdf vgabios.c:2659
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3be2 vgabios.c:2661
+ xor ah, ah ; 30 e4 ; 0xc3be5
+ cmp ax, strict word 00034h ; 3d 34 00 ; 0xc3be7
+ jc short 03bfbh ; 72 0f ; 0xc3bea
+ jbe short 03c26h ; 76 38 ; 0xc3bec
+ cmp ax, strict word 00036h ; 3d 36 00 ; 0xc3bee
+ je short 03c50h ; 74 5d ; 0xc3bf1
+ cmp ax, strict word 00035h ; 3d 35 00 ; 0xc3bf3
+ je short 03c52h ; 74 5a ; 0xc3bf6
+ jmp near 03d9ah ; e9 9f 01 ; 0xc3bf8
+ cmp ax, strict word 00030h ; 3d 30 00 ; 0xc3bfb
+ je short 03c0ah ; 74 0a ; 0xc3bfe
+ cmp ax, strict word 00020h ; 3d 20 00 ; 0xc3c00
+ jne short 03c4dh ; 75 48 ; 0xc3c03
+ call 02ff6h ; e8 ee f3 ; 0xc3c05 vgabios.c:2664
+ jmp short 03c4dh ; eb 43 ; 0xc3c08 vgabios.c:2665
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c0a vgabios.c:2667
+ xor ah, ah ; 30 e4 ; 0xc3c0d
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3c0f
+ jnbe short 03c4dh ; 77 39 ; 0xc3c12
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c14 vgabios.c:2668
+ call 02ffbh ; e8 e1 f3 ; 0xc3c17
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c1a vgabios.c:2669
+ xor al, al ; 30 c0 ; 0xc3c1d
+ or AL, strict byte 012h ; 0c 12 ; 0xc3c1f
+ mov word [bp+012h], ax ; 89 46 12 ; 0xc3c21
+ jmp short 03c4dh ; eb 27 ; 0xc3c24 vgabios.c:2671
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c26 vgabios.c:2673
+ xor ah, ah ; 30 e4 ; 0xc3c29
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3c2b
+ jnc short 03c4ah ; 73 1a ; 0xc3c2e
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3c30 vgabios.c:45
+ mov es, ax ; 8e c0 ; 0xc3c33
+ mov bx, 00087h ; bb 87 00 ; 0xc3c35
+ mov ah, byte [es:bx] ; 26 8a 27 ; 0xc3c38 vgabios.c:47
+ and ah, 0feh ; 80 e4 fe ; 0xc3c3b vgabios.c:48
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c3e
+ or al, ah ; 08 e0 ; 0xc3c41
+ mov si, bx ; 89 de ; 0xc3c43 vgabios.c:50
+ mov byte [es:si], al ; 26 88 04 ; 0xc3c45 vgabios.c:52
+ jmp short 03c1ah ; eb d0 ; 0xc3c48
+ mov byte [bp+012h], ah ; 88 66 12 ; 0xc3c4a vgabios.c:2679
+ jmp near 03d9ah ; e9 4a 01 ; 0xc3c4d vgabios.c:2680
+ jmp short 03c60h ; eb 0e ; 0xc3c50
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c52 vgabios.c:2682
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3c55
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3c58
+ call 0302dh ; e8 cf f3 ; 0xc3c5b
+ jmp short 03c1ah ; eb ba ; 0xc3c5e
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c60 vgabios.c:2686
+ call 03032h ; e8 cc f3 ; 0xc3c63
+ jmp short 03c1ah ; eb b2 ; 0xc3c66
+ push word [bp+008h] ; ff 76 08 ; 0xc3c68 vgabios.c:2696
+ push word [bp+016h] ; ff 76 16 ; 0xc3c6b
+ mov al, byte [bp+00eh] ; 8a 46 0e ; 0xc3c6e
+ xor ah, ah ; 30 e4 ; 0xc3c71
+ push ax ; 50 ; 0xc3c73
+ mov al, byte [bp+00fh] ; 8a 46 0f ; 0xc3c74
+ push ax ; 50 ; 0xc3c77
+ mov bl, byte [bp+00ch] ; 8a 5e 0c ; 0xc3c78
+ xor bh, bh ; 30 ff ; 0xc3c7b
+ mov dl, byte [bp+00dh] ; 8a 56 0d ; 0xc3c7d
+ mov al, byte [bp+012h] ; 8a 46 12 ; 0xc3c80
+ mov cx, word [bp+010h] ; 8b 4e 10 ; 0xc3c83
+ call 03037h ; e8 ae f3 ; 0xc3c86
+ jmp short 03c4dh ; eb c2 ; 0xc3c89 vgabios.c:2697
+ mov bx, si ; 89 f3 ; 0xc3c8b vgabios.c:2699
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3c8d
+ mov ax, word [bp+00ch] ; 8b 46 0c ; 0xc3c90
+ call 030c6h ; e8 30 f4 ; 0xc3c93
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c96 vgabios.c:2700
+ xor al, al ; 30 c0 ; 0xc3c99
+ or AL, strict byte 01bh ; 0c 1b ; 0xc3c9b
+ jmp short 03c21h ; eb 82 ; 0xc3c9d
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3c9f vgabios.c:2703
+ xor ah, ah ; 30 e4 ; 0xc3ca2
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc3ca4
+ je short 03ccbh ; 74 22 ; 0xc3ca7
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc3ca9
+ je short 03cbdh ; 74 0f ; 0xc3cac
+ test ax, ax ; 85 c0 ; 0xc3cae
+ jne short 03cd7h ; 75 25 ; 0xc3cb0
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3cb2 vgabios.c:2706
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3cb5
+ call 032dbh ; e8 20 f6 ; 0xc3cb8
+ jmp short 03cd7h ; eb 1a ; 0xc3cbb vgabios.c:2707
+ mov bx, word [bp+00ch] ; 8b 5e 0c ; 0xc3cbd vgabios.c:2709
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3cc0
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3cc3
+ call 032f6h ; e8 2d f6 ; 0xc3cc6
+ jmp short 03cd7h ; eb 0c ; 0xc3cc9 vgabios.c:2710
+ mov bx, word [bp+00ch] ; 8b 5e 0c ; 0xc3ccb vgabios.c:2712
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3cce
+ mov ax, word [bp+010h] ; 8b 46 10 ; 0xc3cd1
+ call 035ceh ; e8 f7 f8 ; 0xc3cd4
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3cd7 vgabios.c:2719
+ xor al, al ; 30 c0 ; 0xc3cda
+ or AL, strict byte 01ch ; 0c 1c ; 0xc3cdc
+ jmp near 03c21h ; e9 40 ff ; 0xc3cde
+ call 007f8h ; e8 14 cb ; 0xc3ce1 vgabios.c:2724
+ test ax, ax ; 85 c0 ; 0xc3ce4
+ je short 03d5ch ; 74 74 ; 0xc3ce6
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3ce8 vgabios.c:2725
+ xor ah, ah ; 30 e4 ; 0xc3ceb
+ cmp ax, strict word 0000ah ; 3d 0a 00 ; 0xc3ced
+ jnbe short 03d5eh ; 77 6c ; 0xc3cf0
+ push CS ; 0e ; 0xc3cf2
+ pop ES ; 07 ; 0xc3cf3
+ mov cx, strict word 00008h ; b9 08 00 ; 0xc3cf4
+ mov di, 03934h ; bf 34 39 ; 0xc3cf7
+ repne scasb ; f2 ae ; 0xc3cfa
+ sal cx, 1 ; d1 e1 ; 0xc3cfc
+ mov di, cx ; 89 cf ; 0xc3cfe
+ mov ax, word [cs:di+0393bh] ; 2e 8b 85 3b 39 ; 0xc3d00
+ jmp ax ; ff e0 ; 0xc3d05
+ mov bx, si ; 89 f3 ; 0xc3d07 vgabios.c:2728
+ mov dx, word [bp+016h] ; 8b 56 16 ; 0xc3d09
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d0c
+ call 03f6bh ; e8 59 02 ; 0xc3d0f
+ jmp near 03d9ah ; e9 85 00 ; 0xc3d12 vgabios.c:2729
+ mov cx, si ; 89 f1 ; 0xc3d15 vgabios.c:2731
+ mov bx, word [bp+016h] ; 8b 5e 16 ; 0xc3d17
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3d1a
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d1d
+ call 04096h ; e8 73 03 ; 0xc3d20
+ jmp near 03d9ah ; e9 74 00 ; 0xc3d23 vgabios.c:2732
+ mov cx, si ; 89 f1 ; 0xc3d26 vgabios.c:2734
+ mov bx, word [bp+016h] ; 8b 5e 16 ; 0xc3d28
+ mov dx, word [bp+00ch] ; 8b 56 0c ; 0xc3d2b
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d2e
+ call 04135h ; e8 01 04 ; 0xc3d31
+ jmp short 03d9ah ; eb 64 ; 0xc3d34 vgabios.c:2735
+ lea ax, [bp+00ch] ; 8d 46 0c ; 0xc3d36 vgabios.c:2737
+ push ax ; 50 ; 0xc3d39
+ mov cx, word [bp+016h] ; 8b 4e 16 ; 0xc3d3a
+ mov bx, word [bp+00eh] ; 8b 5e 0e ; 0xc3d3d
+ mov dx, word [bp+010h] ; 8b 56 10 ; 0xc3d40
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d43
+ call 042feh ; e8 b5 05 ; 0xc3d46
+ jmp short 03d9ah ; eb 4f ; 0xc3d49 vgabios.c:2738
+ lea cx, [bp+00eh] ; 8d 4e 0e ; 0xc3d4b vgabios.c:2740
+ lea bx, [bp+010h] ; 8d 5e 10 ; 0xc3d4e
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3d51
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d54
+ call 0438bh ; e8 31 06 ; 0xc3d57
+ jmp short 03d9ah ; eb 3e ; 0xc3d5a vgabios.c:2741
+ jmp short 03d65h ; eb 07 ; 0xc3d5c
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d5e vgabios.c:2763
+ jmp short 03d9ah ; eb 35 ; 0xc3d63 vgabios.c:2766
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d65 vgabios.c:2768
+ jmp short 03d9ah ; eb 2e ; 0xc3d6a vgabios.c:2770
+ call 007f8h ; e8 89 ca ; 0xc3d6c vgabios.c:2772
+ test ax, ax ; 85 c0 ; 0xc3d6f
+ je short 03d95h ; 74 22 ; 0xc3d71
+ mov ax, word [bp+012h] ; 8b 46 12 ; 0xc3d73 vgabios.c:2773
+ xor ah, ah ; 30 e4 ; 0xc3d76
+ cmp ax, strict word 00042h ; 3d 42 00 ; 0xc3d78
+ jne short 03d8eh ; 75 11 ; 0xc3d7b
+ lea cx, [bp+00eh] ; 8d 4e 0e ; 0xc3d7d vgabios.c:2776
+ lea bx, [bp+010h] ; 8d 5e 10 ; 0xc3d80
+ lea dx, [bp+00ch] ; 8d 56 0c ; 0xc3d83
+ lea ax, [bp+012h] ; 8d 46 12 ; 0xc3d86
+ call 0446dh ; e8 e1 06 ; 0xc3d89
+ jmp short 03d9ah ; eb 0c ; 0xc3d8c vgabios.c:2777
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d8e vgabios.c:2779
+ jmp short 03d9ah ; eb 05 ; 0xc3d93 vgabios.c:2782
+ mov word [bp+012h], 00100h ; c7 46 12 00 01 ; 0xc3d95 vgabios.c:2784
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3d9a vgabios.c:2794
+ pop di ; 5f ; 0xc3d9d
+ pop si ; 5e ; 0xc3d9e
+ pop bp ; 5d ; 0xc3d9f
+ retn ; c3 ; 0xc3da0
+ ; disGetNextSymbol 0xc3da1 LB 0x7c3 -> off=0x0 cb=000000000000001f uValue=00000000000c3da1 'dispi_set_xres'
+dispi_set_xres: ; 0xc3da1 LB 0x1f
+ push bp ; 55 ; 0xc3da1 vbe.c:100
+ mov bp, sp ; 89 e5 ; 0xc3da2
+ push bx ; 53 ; 0xc3da4
+ push dx ; 52 ; 0xc3da5
+ mov bx, ax ; 89 c3 ; 0xc3da6
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc3da8 vbe.c:105
+ mov dx, 001ceh ; ba ce 01 ; 0xc3dab
+ call 005a0h ; e8 ef c7 ; 0xc3dae
+ mov ax, bx ; 89 d8 ; 0xc3db1 vbe.c:106
+ mov dx, 001cfh ; ba cf 01 ; 0xc3db3
+ call 005a0h ; e8 e7 c7 ; 0xc3db6
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3db9 vbe.c:107
+ pop dx ; 5a ; 0xc3dbc
+ pop bx ; 5b ; 0xc3dbd
+ pop bp ; 5d ; 0xc3dbe
+ retn ; c3 ; 0xc3dbf
+ ; disGetNextSymbol 0xc3dc0 LB 0x7a4 -> off=0x0 cb=000000000000001f uValue=00000000000c3dc0 'dispi_set_yres'
+dispi_set_yres: ; 0xc3dc0 LB 0x1f
+ push bp ; 55 ; 0xc3dc0 vbe.c:109
+ mov bp, sp ; 89 e5 ; 0xc3dc1
+ push bx ; 53 ; 0xc3dc3
+ push dx ; 52 ; 0xc3dc4
+ mov bx, ax ; 89 c3 ; 0xc3dc5
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc3dc7 vbe.c:114
+ mov dx, 001ceh ; ba ce 01 ; 0xc3dca
+ call 005a0h ; e8 d0 c7 ; 0xc3dcd
+ mov ax, bx ; 89 d8 ; 0xc3dd0 vbe.c:115
+ mov dx, 001cfh ; ba cf 01 ; 0xc3dd2
+ call 005a0h ; e8 c8 c7 ; 0xc3dd5
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3dd8 vbe.c:116
+ pop dx ; 5a ; 0xc3ddb
+ pop bx ; 5b ; 0xc3ddc
+ pop bp ; 5d ; 0xc3ddd
+ retn ; c3 ; 0xc3dde
+ ; disGetNextSymbol 0xc3ddf LB 0x785 -> off=0x0 cb=0000000000000019 uValue=00000000000c3ddf 'dispi_get_yres'
+dispi_get_yres: ; 0xc3ddf LB 0x19
+ push bp ; 55 ; 0xc3ddf vbe.c:118
+ mov bp, sp ; 89 e5 ; 0xc3de0
+ push dx ; 52 ; 0xc3de2
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc3de3 vbe.c:120
+ mov dx, 001ceh ; ba ce 01 ; 0xc3de6
+ call 005a0h ; e8 b4 c7 ; 0xc3de9
+ mov dx, 001cfh ; ba cf 01 ; 0xc3dec vbe.c:121
+ call 005a7h ; e8 b5 c7 ; 0xc3def
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3df2 vbe.c:122
+ pop dx ; 5a ; 0xc3df5
+ pop bp ; 5d ; 0xc3df6
+ retn ; c3 ; 0xc3df7
+ ; disGetNextSymbol 0xc3df8 LB 0x76c -> off=0x0 cb=000000000000001f uValue=00000000000c3df8 'dispi_set_bpp'
+dispi_set_bpp: ; 0xc3df8 LB 0x1f
+ push bp ; 55 ; 0xc3df8 vbe.c:124
+ mov bp, sp ; 89 e5 ; 0xc3df9
+ push bx ; 53 ; 0xc3dfb
+ push dx ; 52 ; 0xc3dfc
+ mov bx, ax ; 89 c3 ; 0xc3dfd
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc3dff vbe.c:129
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e02
+ call 005a0h ; e8 98 c7 ; 0xc3e05
+ mov ax, bx ; 89 d8 ; 0xc3e08 vbe.c:130
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e0a
+ call 005a0h ; e8 90 c7 ; 0xc3e0d
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3e10 vbe.c:131
+ pop dx ; 5a ; 0xc3e13
+ pop bx ; 5b ; 0xc3e14
+ pop bp ; 5d ; 0xc3e15
+ retn ; c3 ; 0xc3e16
+ ; disGetNextSymbol 0xc3e17 LB 0x74d -> off=0x0 cb=0000000000000019 uValue=00000000000c3e17 'dispi_get_bpp'
+dispi_get_bpp: ; 0xc3e17 LB 0x19
+ push bp ; 55 ; 0xc3e17 vbe.c:133
+ mov bp, sp ; 89 e5 ; 0xc3e18
+ push dx ; 52 ; 0xc3e1a
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc3e1b vbe.c:135
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e1e
+ call 005a0h ; e8 7c c7 ; 0xc3e21
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e24 vbe.c:136
+ call 005a7h ; e8 7d c7 ; 0xc3e27
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e2a vbe.c:137
+ pop dx ; 5a ; 0xc3e2d
+ pop bp ; 5d ; 0xc3e2e
+ retn ; c3 ; 0xc3e2f
+ ; disGetNextSymbol 0xc3e30 LB 0x734 -> off=0x0 cb=000000000000001f uValue=00000000000c3e30 'dispi_set_virt_width'
+dispi_set_virt_width: ; 0xc3e30 LB 0x1f
+ push bp ; 55 ; 0xc3e30 vbe.c:139
+ mov bp, sp ; 89 e5 ; 0xc3e31
+ push bx ; 53 ; 0xc3e33
+ push dx ; 52 ; 0xc3e34
+ mov bx, ax ; 89 c3 ; 0xc3e35
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc3e37 vbe.c:144
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e3a
+ call 005a0h ; e8 60 c7 ; 0xc3e3d
+ mov ax, bx ; 89 d8 ; 0xc3e40 vbe.c:145
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e42
+ call 005a0h ; e8 58 c7 ; 0xc3e45
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3e48 vbe.c:146
+ pop dx ; 5a ; 0xc3e4b
+ pop bx ; 5b ; 0xc3e4c
+ pop bp ; 5d ; 0xc3e4d
+ retn ; c3 ; 0xc3e4e
+ ; disGetNextSymbol 0xc3e4f LB 0x715 -> off=0x0 cb=0000000000000019 uValue=00000000000c3e4f 'dispi_get_virt_width'
+dispi_get_virt_width: ; 0xc3e4f LB 0x19
+ push bp ; 55 ; 0xc3e4f vbe.c:148
+ mov bp, sp ; 89 e5 ; 0xc3e50
+ push dx ; 52 ; 0xc3e52
+ mov ax, strict word 00006h ; b8 06 00 ; 0xc3e53 vbe.c:150
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e56
+ call 005a0h ; e8 44 c7 ; 0xc3e59
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e5c vbe.c:151
+ call 005a7h ; e8 45 c7 ; 0xc3e5f
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e62 vbe.c:152
+ pop dx ; 5a ; 0xc3e65
+ pop bp ; 5d ; 0xc3e66
+ retn ; c3 ; 0xc3e67
+ ; disGetNextSymbol 0xc3e68 LB 0x6fc -> off=0x0 cb=0000000000000019 uValue=00000000000c3e68 'dispi_get_virt_height'
+dispi_get_virt_height: ; 0xc3e68 LB 0x19
+ push bp ; 55 ; 0xc3e68 vbe.c:154
+ mov bp, sp ; 89 e5 ; 0xc3e69
+ push dx ; 52 ; 0xc3e6b
+ mov ax, strict word 00007h ; b8 07 00 ; 0xc3e6c vbe.c:156
+ mov dx, 001ceh ; ba ce 01 ; 0xc3e6f
+ call 005a0h ; e8 2b c7 ; 0xc3e72
+ mov dx, 001cfh ; ba cf 01 ; 0xc3e75 vbe.c:157
+ call 005a7h ; e8 2c c7 ; 0xc3e78
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e7b vbe.c:158
+ pop dx ; 5a ; 0xc3e7e
+ pop bp ; 5d ; 0xc3e7f
+ retn ; c3 ; 0xc3e80
+ ; disGetNextSymbol 0xc3e81 LB 0x6e3 -> off=0x0 cb=0000000000000012 uValue=00000000000c3e81 'in_word'
+in_word: ; 0xc3e81 LB 0x12
+ push bp ; 55 ; 0xc3e81 vbe.c:160
+ mov bp, sp ; 89 e5 ; 0xc3e82
+ push bx ; 53 ; 0xc3e84
+ mov bx, ax ; 89 c3 ; 0xc3e85
+ mov ax, dx ; 89 d0 ; 0xc3e87
+ mov dx, bx ; 89 da ; 0xc3e89 vbe.c:162
+ out DX, ax ; ef ; 0xc3e8b
+ in ax, DX ; ed ; 0xc3e8c vbe.c:163
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3e8d vbe.c:164
+ pop bx ; 5b ; 0xc3e90
+ pop bp ; 5d ; 0xc3e91
+ retn ; c3 ; 0xc3e92
+ ; disGetNextSymbol 0xc3e93 LB 0x6d1 -> off=0x0 cb=0000000000000014 uValue=00000000000c3e93 'in_byte'
+in_byte: ; 0xc3e93 LB 0x14
+ push bp ; 55 ; 0xc3e93 vbe.c:166
+ mov bp, sp ; 89 e5 ; 0xc3e94
+ push bx ; 53 ; 0xc3e96
+ mov bx, ax ; 89 c3 ; 0xc3e97
+ mov ax, dx ; 89 d0 ; 0xc3e99
+ mov dx, bx ; 89 da ; 0xc3e9b vbe.c:168
+ out DX, ax ; ef ; 0xc3e9d
+ in AL, DX ; ec ; 0xc3e9e vbe.c:169
+ db 02ah, 0e4h
+ ; sub ah, ah ; 2a e4 ; 0xc3e9f
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3ea1 vbe.c:170
+ pop bx ; 5b ; 0xc3ea4
+ pop bp ; 5d ; 0xc3ea5
+ retn ; c3 ; 0xc3ea6
+ ; disGetNextSymbol 0xc3ea7 LB 0x6bd -> off=0x0 cb=0000000000000014 uValue=00000000000c3ea7 'dispi_get_id'
+dispi_get_id: ; 0xc3ea7 LB 0x14
+ push bp ; 55 ; 0xc3ea7 vbe.c:173
+ mov bp, sp ; 89 e5 ; 0xc3ea8
+ push dx ; 52 ; 0xc3eaa
+ xor ax, ax ; 31 c0 ; 0xc3eab vbe.c:175
+ mov dx, 001ceh ; ba ce 01 ; 0xc3ead
+ out DX, ax ; ef ; 0xc3eb0
+ mov dx, 001cfh ; ba cf 01 ; 0xc3eb1 vbe.c:176
+ in ax, DX ; ed ; 0xc3eb4
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3eb5 vbe.c:177
+ pop dx ; 5a ; 0xc3eb8
+ pop bp ; 5d ; 0xc3eb9
+ retn ; c3 ; 0xc3eba
+ ; disGetNextSymbol 0xc3ebb LB 0x6a9 -> off=0x0 cb=000000000000001a uValue=00000000000c3ebb 'dispi_set_id'
+dispi_set_id: ; 0xc3ebb LB 0x1a
+ push bp ; 55 ; 0xc3ebb vbe.c:179
+ mov bp, sp ; 89 e5 ; 0xc3ebc
+ push bx ; 53 ; 0xc3ebe
+ push dx ; 52 ; 0xc3ebf
+ mov bx, ax ; 89 c3 ; 0xc3ec0
+ xor ax, ax ; 31 c0 ; 0xc3ec2 vbe.c:181
+ mov dx, 001ceh ; ba ce 01 ; 0xc3ec4
+ out DX, ax ; ef ; 0xc3ec7
+ mov ax, bx ; 89 d8 ; 0xc3ec8 vbe.c:182
+ mov dx, 001cfh ; ba cf 01 ; 0xc3eca
+ out DX, ax ; ef ; 0xc3ecd
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc3ece vbe.c:183
+ pop dx ; 5a ; 0xc3ed1
+ pop bx ; 5b ; 0xc3ed2
+ pop bp ; 5d ; 0xc3ed3
+ retn ; c3 ; 0xc3ed4
+ ; disGetNextSymbol 0xc3ed5 LB 0x68f -> off=0x0 cb=000000000000002a uValue=00000000000c3ed5 'vbe_init'
+vbe_init: ; 0xc3ed5 LB 0x2a
+ push bp ; 55 ; 0xc3ed5 vbe.c:188
+ mov bp, sp ; 89 e5 ; 0xc3ed6
+ push bx ; 53 ; 0xc3ed8
+ mov ax, 0b0c0h ; b8 c0 b0 ; 0xc3ed9 vbe.c:190
+ call 03ebbh ; e8 dc ff ; 0xc3edc
+ call 03ea7h ; e8 c5 ff ; 0xc3edf vbe.c:191
+ cmp ax, 0b0c0h ; 3d c0 b0 ; 0xc3ee2
+ jne short 03ef9h ; 75 12 ; 0xc3ee5
+ mov bx, 000b9h ; bb b9 00 ; 0xc3ee7 vbe.c:52
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc3eea
+ mov es, ax ; 8e c0 ; 0xc3eed
+ mov byte [es:bx], 001h ; 26 c6 07 01 ; 0xc3eef
+ mov ax, 0b0c4h ; b8 c4 b0 ; 0xc3ef3 vbe.c:194
+ call 03ebbh ; e8 c2 ff ; 0xc3ef6
+ lea sp, [bp-002h] ; 8d 66 fe ; 0xc3ef9 vbe.c:199
+ pop bx ; 5b ; 0xc3efc
+ pop bp ; 5d ; 0xc3efd
+ retn ; c3 ; 0xc3efe
+ ; disGetNextSymbol 0xc3eff LB 0x665 -> off=0x0 cb=000000000000006c uValue=00000000000c3eff 'mode_info_find_mode'
+mode_info_find_mode: ; 0xc3eff LB 0x6c
+ push bp ; 55 ; 0xc3eff vbe.c:202
+ mov bp, sp ; 89 e5 ; 0xc3f00
+ push bx ; 53 ; 0xc3f02
+ push cx ; 51 ; 0xc3f03
+ push si ; 56 ; 0xc3f04
+ push di ; 57 ; 0xc3f05
+ mov di, ax ; 89 c7 ; 0xc3f06
+ mov si, dx ; 89 d6 ; 0xc3f08
+ xor dx, dx ; 31 d2 ; 0xc3f0a vbe.c:208
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f0c
+ call 03e81h ; e8 6f ff ; 0xc3f0f
+ cmp ax, 077cch ; 3d cc 77 ; 0xc3f12 vbe.c:209
+ jne short 03f60h ; 75 49 ; 0xc3f15
+ test si, si ; 85 f6 ; 0xc3f17 vbe.c:213
+ je short 03f2eh ; 74 13 ; 0xc3f19
+ mov ax, strict word 0000bh ; b8 0b 00 ; 0xc3f1b vbe.c:220
+ mov dx, 001ceh ; ba ce 01 ; 0xc3f1e
+ call 005a0h ; e8 7c c6 ; 0xc3f21
+ mov dx, 001cfh ; ba cf 01 ; 0xc3f24 vbe.c:221
+ call 005a7h ; e8 7d c6 ; 0xc3f27
+ test ax, ax ; 85 c0 ; 0xc3f2a vbe.c:222
+ je short 03f62h ; 74 34 ; 0xc3f2c
+ mov bx, strict word 00004h ; bb 04 00 ; 0xc3f2e vbe.c:226
+ mov dx, bx ; 89 da ; 0xc3f31 vbe.c:232
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f33
+ call 03e81h ; e8 48 ff ; 0xc3f36
+ mov cx, ax ; 89 c1 ; 0xc3f39
+ cmp cx, strict byte 0ffffh ; 83 f9 ff ; 0xc3f3b vbe.c:233
+ je short 03f60h ; 74 20 ; 0xc3f3e
+ lea dx, [bx+002h] ; 8d 57 02 ; 0xc3f40 vbe.c:235
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f43
+ call 03e81h ; e8 38 ff ; 0xc3f46
+ lea dx, [bx+044h] ; 8d 57 44 ; 0xc3f49
+ cmp cx, di ; 39 f9 ; 0xc3f4c vbe.c:237
+ jne short 03f5ch ; 75 0c ; 0xc3f4e
+ test si, si ; 85 f6 ; 0xc3f50 vbe.c:239
+ jne short 03f58h ; 75 04 ; 0xc3f52
+ mov ax, bx ; 89 d8 ; 0xc3f54 vbe.c:240
+ jmp short 03f62h ; eb 0a ; 0xc3f56
+ test AL, strict byte 080h ; a8 80 ; 0xc3f58 vbe.c:241
+ jne short 03f54h ; 75 f8 ; 0xc3f5a
+ mov bx, dx ; 89 d3 ; 0xc3f5c vbe.c:244
+ jmp short 03f33h ; eb d3 ; 0xc3f5e vbe.c:249
+ xor ax, ax ; 31 c0 ; 0xc3f60 vbe.c:252
+ lea sp, [bp-008h] ; 8d 66 f8 ; 0xc3f62 vbe.c:253
+ pop di ; 5f ; 0xc3f65
+ pop si ; 5e ; 0xc3f66
+ pop cx ; 59 ; 0xc3f67
+ pop bx ; 5b ; 0xc3f68
+ pop bp ; 5d ; 0xc3f69
+ retn ; c3 ; 0xc3f6a
+ ; disGetNextSymbol 0xc3f6b LB 0x5f9 -> off=0x0 cb=000000000000012b uValue=00000000000c3f6b 'vbe_biosfn_return_controller_information'
+vbe_biosfn_return_controller_information: ; 0xc3f6b LB 0x12b
+ push bp ; 55 ; 0xc3f6b vbe.c:284
+ mov bp, sp ; 89 e5 ; 0xc3f6c
+ push cx ; 51 ; 0xc3f6e
+ push si ; 56 ; 0xc3f6f
+ push di ; 57 ; 0xc3f70
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc3f71
+ mov si, ax ; 89 c6 ; 0xc3f74
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc3f76
+ mov di, bx ; 89 df ; 0xc3f79
+ mov word [bp-00ch], strict word 00022h ; c7 46 f4 22 00 ; 0xc3f7b vbe.c:289
+ call 005eah ; e8 67 c6 ; 0xc3f80 vbe.c:292
+ mov word [bp-010h], ax ; 89 46 f0 ; 0xc3f83
+ mov bx, di ; 89 fb ; 0xc3f86 vbe.c:295
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3f88
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc3f8b
+ xor dx, dx ; 31 d2 ; 0xc3f8e vbe.c:298
+ mov ax, 003b6h ; b8 b6 03 ; 0xc3f90
+ call 03e81h ; e8 eb fe ; 0xc3f93
+ cmp ax, 077cch ; 3d cc 77 ; 0xc3f96 vbe.c:299
+ je short 03fa5h ; 74 0a ; 0xc3f99
+ push SS ; 16 ; 0xc3f9b vbe.c:301
+ pop ES ; 07 ; 0xc3f9c
+ mov word [es:si], 00100h ; 26 c7 04 00 01 ; 0xc3f9d
+ jmp near 0408eh ; e9 e9 00 ; 0xc3fa2 vbe.c:305
+ mov cx, strict word 00004h ; b9 04 00 ; 0xc3fa5 vbe.c:307
+ mov word [bp-00eh], strict word 00000h ; c7 46 f2 00 00 ; 0xc3fa8 vbe.c:314
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3fad vbe.c:322
+ cmp word [es:bx+002h], 03245h ; 26 81 7f 02 45 32 ; 0xc3fb0
+ jne short 03fbfh ; 75 07 ; 0xc3fb6
+ cmp word [es:bx], 04256h ; 26 81 3f 56 42 ; 0xc3fb8
+ je short 03fceh ; 74 0f ; 0xc3fbd
+ cmp word [es:bx+002h], 04153h ; 26 81 7f 02 53 41 ; 0xc3fbf
+ jne short 03fd3h ; 75 0c ; 0xc3fc5
+ cmp word [es:bx], 04556h ; 26 81 3f 56 45 ; 0xc3fc7
+ jne short 03fd3h ; 75 05 ; 0xc3fcc
+ mov word [bp-00eh], strict word 00001h ; c7 46 f2 01 00 ; 0xc3fce vbe.c:324
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc3fd3 vbe.c:332
+ mov word [es:bx], 04556h ; 26 c7 07 56 45 ; 0xc3fd6
+ mov word [es:bx+002h], 04153h ; 26 c7 47 02 53 41 ; 0xc3fdb vbe.c:334
+ mov word [es:bx+004h], 00200h ; 26 c7 47 04 00 02 ; 0xc3fe1 vbe.c:338
+ mov word [es:bx+006h], 07e02h ; 26 c7 47 06 02 7e ; 0xc3fe7 vbe.c:341
+ mov [es:bx+008h], ds ; 26 8c 5f 08 ; 0xc3fed
+ mov word [es:bx+00ah], strict word 00001h ; 26 c7 47 0a 01 00 ; 0xc3ff1 vbe.c:344
+ mov word [es:bx+00ch], strict word 00000h ; 26 c7 47 0c 00 00 ; 0xc3ff7 vbe.c:346
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc3ffd vbe.c:350
+ mov word [es:bx+010h], ax ; 26 89 47 10 ; 0xc4000
+ lea ax, [di+022h] ; 8d 45 22 ; 0xc4004 vbe.c:351
+ mov word [es:bx+00eh], ax ; 26 89 47 0e ; 0xc4007
+ mov dx, strict word 0ffffh ; ba ff ff ; 0xc400b vbe.c:354
+ mov ax, 003b6h ; b8 b6 03 ; 0xc400e
+ call 03e81h ; e8 6d fe ; 0xc4011
+ mov es, [bp-008h] ; 8e 46 f8 ; 0xc4014
+ mov word [es:bx+012h], ax ; 26 89 47 12 ; 0xc4017
+ cmp word [bp-00eh], strict byte 00000h ; 83 7e f2 00 ; 0xc401b vbe.c:356
+ je short 04045h ; 74 24 ; 0xc401f
+ mov word [es:bx+014h], strict word 00003h ; 26 c7 47 14 03 00 ; 0xc4021 vbe.c:359
+ mov word [es:bx+016h], 07e17h ; 26 c7 47 16 17 7e ; 0xc4027 vbe.c:360
+ mov [es:bx+018h], ds ; 26 8c 5f 18 ; 0xc402d
+ mov word [es:bx+01ah], 07e34h ; 26 c7 47 1a 34 7e ; 0xc4031 vbe.c:361
+ mov [es:bx+01ch], ds ; 26 8c 5f 1c ; 0xc4037
+ mov word [es:bx+01eh], 07e55h ; 26 c7 47 1e 55 7e ; 0xc403b vbe.c:362
+ mov [es:bx+020h], ds ; 26 8c 5f 20 ; 0xc4041
+ mov dx, cx ; 89 ca ; 0xc4045 vbe.c:369
+ add dx, strict byte 0001bh ; 83 c2 1b ; 0xc4047
+ mov ax, 003b6h ; b8 b6 03 ; 0xc404a
+ call 03e93h ; e8 43 fe ; 0xc404d
+ xor ah, ah ; 30 e4 ; 0xc4050 vbe.c:370
+ cmp ax, word [bp-010h] ; 3b 46 f0 ; 0xc4052
+ jnbe short 0406eh ; 77 17 ; 0xc4055
+ mov dx, cx ; 89 ca ; 0xc4057 vbe.c:372
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4059
+ call 03e81h ; e8 22 fe ; 0xc405c
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc405f vbe.c:376
+ add bx, di ; 01 fb ; 0xc4062
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc4064 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4067
+ add word [bp-00ch], strict byte 00002h ; 83 46 f4 02 ; 0xc406a vbe.c:378
+ add cx, strict byte 00044h ; 83 c1 44 ; 0xc406e vbe.c:380
+ mov dx, cx ; 89 ca ; 0xc4071 vbe.c:381
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4073
+ call 03e81h ; e8 08 fe ; 0xc4076
+ cmp ax, strict word 0ffffh ; 3d ff ff ; 0xc4079 vbe.c:382
+ jne short 04045h ; 75 c7 ; 0xc407c
+ add di, word [bp-00ch] ; 03 7e f4 ; 0xc407e vbe.c:385
+ mov es, [bp-00ah] ; 8e 46 f6 ; 0xc4081 vbe.c:62
+ mov word [es:di], ax ; 26 89 05 ; 0xc4084
+ push SS ; 16 ; 0xc4087 vbe.c:386
+ pop ES ; 07 ; 0xc4088
+ mov word [es:si], strict word 0004fh ; 26 c7 04 4f 00 ; 0xc4089
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc408e vbe.c:387
+ pop di ; 5f ; 0xc4091
+ pop si ; 5e ; 0xc4092
+ pop cx ; 59 ; 0xc4093
+ pop bp ; 5d ; 0xc4094
+ retn ; c3 ; 0xc4095
+ ; disGetNextSymbol 0xc4096 LB 0x4ce -> off=0x0 cb=000000000000009f uValue=00000000000c4096 'vbe_biosfn_return_mode_information'
+vbe_biosfn_return_mode_information: ; 0xc4096 LB 0x9f
+ push bp ; 55 ; 0xc4096 vbe.c:399
+ mov bp, sp ; 89 e5 ; 0xc4097
+ push si ; 56 ; 0xc4099
+ push di ; 57 ; 0xc409a
+ push ax ; 50 ; 0xc409b
+ push ax ; 50 ; 0xc409c
+ mov ax, dx ; 89 d0 ; 0xc409d
+ mov si, bx ; 89 de ; 0xc409f
+ mov bx, cx ; 89 cb ; 0xc40a1
+ test dh, 040h ; f6 c6 40 ; 0xc40a3 vbe.c:410
+ je short 040adh ; 74 05 ; 0xc40a6
+ mov dx, strict word 00001h ; ba 01 00 ; 0xc40a8
+ jmp short 040afh ; eb 02 ; 0xc40ab
+ xor dx, dx ; 31 d2 ; 0xc40ad
+ and ah, 001h ; 80 e4 01 ; 0xc40af vbe.c:411
+ call 03effh ; e8 4a fe ; 0xc40b2 vbe.c:413
+ mov word [bp-006h], ax ; 89 46 fa ; 0xc40b5
+ test ax, ax ; 85 c0 ; 0xc40b8 vbe.c:415
+ je short 04123h ; 74 67 ; 0xc40ba
+ mov cx, 00100h ; b9 00 01 ; 0xc40bc vbe.c:420
+ xor ax, ax ; 31 c0 ; 0xc40bf
+ mov di, bx ; 89 df ; 0xc40c1
+ mov es, si ; 8e c6 ; 0xc40c3
+ jcxz 040c9h ; e3 02 ; 0xc40c5
+ rep stosb ; f3 aa ; 0xc40c7
+ xor cx, cx ; 31 c9 ; 0xc40c9 vbe.c:421
+ jmp short 040d2h ; eb 05 ; 0xc40cb
+ cmp cx, strict byte 00042h ; 83 f9 42 ; 0xc40cd
+ jnc short 040ebh ; 73 19 ; 0xc40d0
+ mov dx, word [bp-006h] ; 8b 56 fa ; 0xc40d2 vbe.c:424
+ inc dx ; 42 ; 0xc40d5
+ inc dx ; 42 ; 0xc40d6
+ add dx, cx ; 01 ca ; 0xc40d7
+ mov ax, 003b6h ; b8 b6 03 ; 0xc40d9
+ call 03e93h ; e8 b4 fd ; 0xc40dc
+ mov di, bx ; 89 df ; 0xc40df vbe.c:425
+ add di, cx ; 01 cf ; 0xc40e1
+ mov es, si ; 8e c6 ; 0xc40e3 vbe.c:52
+ mov byte [es:di], al ; 26 88 05 ; 0xc40e5
+ inc cx ; 41 ; 0xc40e8 vbe.c:426
+ jmp short 040cdh ; eb e2 ; 0xc40e9
+ lea di, [bx+002h] ; 8d 7f 02 ; 0xc40eb vbe.c:427
+ mov es, si ; 8e c6 ; 0xc40ee vbe.c:47
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc40f0
+ test AL, strict byte 001h ; a8 01 ; 0xc40f3 vbe.c:428
+ je short 04107h ; 74 10 ; 0xc40f5
+ lea di, [bx+00ch] ; 8d 7f 0c ; 0xc40f7 vbe.c:429
+ mov word [es:di], 0065ch ; 26 c7 05 5c 06 ; 0xc40fa vbe.c:62
+ lea di, [bx+00eh] ; 8d 7f 0e ; 0xc40ff vbe.c:431
+ mov word [es:di], 0c000h ; 26 c7 05 00 c0 ; 0xc4102 vbe.c:62
+ mov ax, strict word 0000bh ; b8 0b 00 ; 0xc4107 vbe.c:434
+ mov dx, 001ceh ; ba ce 01 ; 0xc410a
+ call 005a0h ; e8 90 c4 ; 0xc410d
+ mov dx, 001cfh ; ba cf 01 ; 0xc4110 vbe.c:435
+ call 005a7h ; e8 91 c4 ; 0xc4113
+ add bx, strict byte 0002ah ; 83 c3 2a ; 0xc4116
+ mov es, si ; 8e c6 ; 0xc4119 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc411b
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc411e vbe.c:437
+ jmp short 04126h ; eb 03 ; 0xc4121 vbe.c:438
+ mov ax, 00100h ; b8 00 01 ; 0xc4123 vbe.c:442
+ push SS ; 16 ; 0xc4126 vbe.c:445
+ pop ES ; 07 ; 0xc4127
+ mov bx, word [bp-008h] ; 8b 5e f8 ; 0xc4128
+ mov word [es:bx], ax ; 26 89 07 ; 0xc412b
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc412e vbe.c:446
+ pop di ; 5f ; 0xc4131
+ pop si ; 5e ; 0xc4132
+ pop bp ; 5d ; 0xc4133
+ retn ; c3 ; 0xc4134
+ ; disGetNextSymbol 0xc4135 LB 0x42f -> off=0x0 cb=00000000000000e7 uValue=00000000000c4135 'vbe_biosfn_set_mode'
+vbe_biosfn_set_mode: ; 0xc4135 LB 0xe7
+ push bp ; 55 ; 0xc4135 vbe.c:458
+ mov bp, sp ; 89 e5 ; 0xc4136
+ push si ; 56 ; 0xc4138
+ push di ; 57 ; 0xc4139
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc413a
+ mov si, ax ; 89 c6 ; 0xc413d
+ mov word [bp-00ah], dx ; 89 56 f6 ; 0xc413f
+ test byte [bp-009h], 040h ; f6 46 f7 40 ; 0xc4142 vbe.c:466
+ je short 0414dh ; 74 05 ; 0xc4146
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc4148
+ jmp short 0414fh ; eb 02 ; 0xc414b
+ xor ax, ax ; 31 c0 ; 0xc414d
+ mov dx, ax ; 89 c2 ; 0xc414f
+ test ax, ax ; 85 c0 ; 0xc4151 vbe.c:467
+ je short 04158h ; 74 03 ; 0xc4153
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc4155
+ mov byte [bp-008h], al ; 88 46 f8 ; 0xc4158
+ test byte [bp-009h], 080h ; f6 46 f7 80 ; 0xc415b vbe.c:468
+ je short 04166h ; 74 05 ; 0xc415f
+ mov ax, 00080h ; b8 80 00 ; 0xc4161
+ jmp short 04168h ; eb 02 ; 0xc4164
+ xor ax, ax ; 31 c0 ; 0xc4166
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc4168
+ and byte [bp-009h], 001h ; 80 66 f7 01 ; 0xc416b vbe.c:470
+ cmp word [bp-00ah], 00100h ; 81 7e f6 00 01 ; 0xc416f vbe.c:473
+ jnc short 04189h ; 73 13 ; 0xc4174
+ xor ax, ax ; 31 c0 ; 0xc4176 vbe.c:477
+ call 00610h ; e8 95 c4 ; 0xc4178
+ mov al, byte [bp-00ah] ; 8a 46 f6 ; 0xc417b vbe.c:481
+ xor ah, ah ; 30 e4 ; 0xc417e
+ call 01479h ; e8 f6 d2 ; 0xc4180
+ mov ax, strict word 0004fh ; b8 4f 00 ; 0xc4183 vbe.c:482
+ jmp near 04210h ; e9 87 00 ; 0xc4186 vbe.c:483
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc4189 vbe.c:486
+ call 03effh ; e8 70 fd ; 0xc418c
+ mov bx, ax ; 89 c3 ; 0xc418f
+ test ax, ax ; 85 c0 ; 0xc4191 vbe.c:488
+ je short 0420dh ; 74 78 ; 0xc4193
+ lea dx, [bx+014h] ; 8d 57 14 ; 0xc4195 vbe.c:493
+ mov ax, 003b6h ; b8 b6 03 ; 0xc4198
+ call 03e81h ; e8 e3 fc ; 0xc419b
+ mov cx, ax ; 89 c1 ; 0xc419e
+ lea dx, [bx+016h] ; 8d 57 16 ; 0xc41a0 vbe.c:494
+ mov ax, 003b6h ; b8 b6 03 ; 0xc41a3
+ call 03e81h ; e8 d8 fc ; 0xc41a6
+ mov di, ax ; 89 c7 ; 0xc41a9
+ lea dx, [bx+01bh] ; 8d 57 1b ; 0xc41ab vbe.c:495
+ mov ax, 003b6h ; b8 b6 03 ; 0xc41ae
+ call 03e93h ; e8 df fc ; 0xc41b1
+ mov bl, al ; 88 c3 ; 0xc41b4
+ mov dl, al ; 88 c2 ; 0xc41b6
+ xor ax, ax ; 31 c0 ; 0xc41b8 vbe.c:503
+ call 00610h ; e8 53 c4 ; 0xc41ba
+ cmp bl, 004h ; 80 fb 04 ; 0xc41bd vbe.c:505
+ jne short 041c8h ; 75 06 ; 0xc41c0
+ mov ax, strict word 0006ah ; b8 6a 00 ; 0xc41c2 vbe.c:507
+ call 01479h ; e8 b1 d2 ; 0xc41c5
+ mov al, dl ; 88 d0 ; 0xc41c8 vbe.c:510
+ xor ah, ah ; 30 e4 ; 0xc41ca
+ call 03df8h ; e8 29 fc ; 0xc41cc
+ mov ax, cx ; 89 c8 ; 0xc41cf vbe.c:511
+ call 03da1h ; e8 cd fb ; 0xc41d1
+ mov ax, di ; 89 f8 ; 0xc41d4 vbe.c:512
+ call 03dc0h ; e8 e7 fb ; 0xc41d6
+ xor ax, ax ; 31 c0 ; 0xc41d9 vbe.c:513
+ call 00636h ; e8 58 c4 ; 0xc41db
+ mov dl, byte [bp-006h] ; 8a 56 fa ; 0xc41de vbe.c:514
+ or dl, 001h ; 80 ca 01 ; 0xc41e1
+ mov al, byte [bp-008h] ; 8a 46 f8 ; 0xc41e4
+ xor ah, ah ; 30 e4 ; 0xc41e7
+ or al, dl ; 08 d0 ; 0xc41e9
+ call 00610h ; e8 22 c4 ; 0xc41eb
+ call 00708h ; e8 17 c5 ; 0xc41ee vbe.c:515
+ mov bx, 000bah ; bb ba 00 ; 0xc41f1 vbe.c:62
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc41f4
+ mov es, ax ; 8e c0 ; 0xc41f7
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc41f9
+ mov word [es:bx], ax ; 26 89 07 ; 0xc41fc
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc41ff vbe.c:518
+ or AL, strict byte 060h ; 0c 60 ; 0xc4202
+ mov bx, 00087h ; bb 87 00 ; 0xc4204 vbe.c:52
+ mov byte [es:bx], al ; 26 88 07 ; 0xc4207
+ jmp near 04183h ; e9 76 ff ; 0xc420a
+ mov ax, 00100h ; b8 00 01 ; 0xc420d vbe.c:527
+ push SS ; 16 ; 0xc4210 vbe.c:531
+ pop ES ; 07 ; 0xc4211
+ mov word [es:si], ax ; 26 89 04 ; 0xc4212
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc4215 vbe.c:532
+ pop di ; 5f ; 0xc4218
+ pop si ; 5e ; 0xc4219
+ pop bp ; 5d ; 0xc421a
+ retn ; c3 ; 0xc421b
+ ; disGetNextSymbol 0xc421c LB 0x348 -> off=0x0 cb=0000000000000008 uValue=00000000000c421c 'vbe_biosfn_read_video_state_size'
+vbe_biosfn_read_video_state_size: ; 0xc421c LB 0x8
+ push bp ; 55 ; 0xc421c vbe.c:534
+ mov bp, sp ; 89 e5 ; 0xc421d
+ mov ax, strict word 00012h ; b8 12 00 ; 0xc421f vbe.c:537
+ pop bp ; 5d ; 0xc4222
+ retn ; c3 ; 0xc4223
+ ; disGetNextSymbol 0xc4224 LB 0x340 -> off=0x0 cb=000000000000004b uValue=00000000000c4224 'vbe_biosfn_save_video_state'
+vbe_biosfn_save_video_state: ; 0xc4224 LB 0x4b
+ push bp ; 55 ; 0xc4224 vbe.c:539
+ mov bp, sp ; 89 e5 ; 0xc4225
+ push bx ; 53 ; 0xc4227
+ push cx ; 51 ; 0xc4228
+ push si ; 56 ; 0xc4229
+ mov si, ax ; 89 c6 ; 0xc422a
+ mov bx, dx ; 89 d3 ; 0xc422c
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc422e vbe.c:543
+ mov dx, 001ceh ; ba ce 01 ; 0xc4231
+ out DX, ax ; ef ; 0xc4234
+ mov dx, 001cfh ; ba cf 01 ; 0xc4235 vbe.c:544
+ in ax, DX ; ed ; 0xc4238
+ mov es, si ; 8e c6 ; 0xc4239 vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc423b
+ inc bx ; 43 ; 0xc423e vbe.c:546
+ inc bx ; 43 ; 0xc423f
+ test AL, strict byte 001h ; a8 01 ; 0xc4240 vbe.c:547
+ je short 04267h ; 74 23 ; 0xc4242
+ mov cx, strict word 00001h ; b9 01 00 ; 0xc4244 vbe.c:549
+ jmp short 0424eh ; eb 05 ; 0xc4247
+ cmp cx, strict byte 00009h ; 83 f9 09 ; 0xc4249
+ jnbe short 04267h ; 77 19 ; 0xc424c
+ cmp cx, strict byte 00004h ; 83 f9 04 ; 0xc424e vbe.c:550
+ je short 04264h ; 74 11 ; 0xc4251
+ mov ax, cx ; 89 c8 ; 0xc4253 vbe.c:551
+ mov dx, 001ceh ; ba ce 01 ; 0xc4255
+ out DX, ax ; ef ; 0xc4258
+ mov dx, 001cfh ; ba cf 01 ; 0xc4259 vbe.c:552
+ in ax, DX ; ed ; 0xc425c
+ mov es, si ; 8e c6 ; 0xc425d vbe.c:62
+ mov word [es:bx], ax ; 26 89 07 ; 0xc425f
+ inc bx ; 43 ; 0xc4262 vbe.c:553
+ inc bx ; 43 ; 0xc4263
+ inc cx ; 41 ; 0xc4264 vbe.c:555
+ jmp short 04249h ; eb e2 ; 0xc4265
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc4267 vbe.c:556
+ pop si ; 5e ; 0xc426a
+ pop cx ; 59 ; 0xc426b
+ pop bx ; 5b ; 0xc426c
+ pop bp ; 5d ; 0xc426d
+ retn ; c3 ; 0xc426e
+ ; disGetNextSymbol 0xc426f LB 0x2f5 -> off=0x0 cb=000000000000008f uValue=00000000000c426f 'vbe_biosfn_restore_video_state'
+vbe_biosfn_restore_video_state: ; 0xc426f LB 0x8f
+ push bp ; 55 ; 0xc426f vbe.c:559
+ mov bp, sp ; 89 e5 ; 0xc4270
+ push bx ; 53 ; 0xc4272
+ push cx ; 51 ; 0xc4273
+ push si ; 56 ; 0xc4274
+ push ax ; 50 ; 0xc4275
+ mov cx, ax ; 89 c1 ; 0xc4276
+ mov bx, dx ; 89 d3 ; 0xc4278
+ mov es, ax ; 8e c0 ; 0xc427a vbe.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc427c
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc427f
+ inc bx ; 43 ; 0xc4282 vbe.c:564
+ inc bx ; 43 ; 0xc4283
+ test byte [bp-008h], 001h ; f6 46 f8 01 ; 0xc4284 vbe.c:566
+ jne short 0429ah ; 75 10 ; 0xc4288
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc428a vbe.c:567
+ mov dx, 001ceh ; ba ce 01 ; 0xc428d
+ out DX, ax ; ef ; 0xc4290
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc4291 vbe.c:568
+ mov dx, 001cfh ; ba cf 01 ; 0xc4294
+ out DX, ax ; ef ; 0xc4297
+ jmp short 042f6h ; eb 5c ; 0xc4298 vbe.c:569
+ mov ax, strict word 00001h ; b8 01 00 ; 0xc429a vbe.c:570
+ mov dx, 001ceh ; ba ce 01 ; 0xc429d
+ out DX, ax ; ef ; 0xc42a0
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc42a1 vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc42a4 vbe.c:58
+ out DX, ax ; ef ; 0xc42a7
+ inc bx ; 43 ; 0xc42a8 vbe.c:572
+ inc bx ; 43 ; 0xc42a9
+ mov ax, strict word 00002h ; b8 02 00 ; 0xc42aa
+ mov dx, 001ceh ; ba ce 01 ; 0xc42ad
+ out DX, ax ; ef ; 0xc42b0
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc42b1 vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc42b4 vbe.c:58
+ out DX, ax ; ef ; 0xc42b7
+ inc bx ; 43 ; 0xc42b8 vbe.c:575
+ inc bx ; 43 ; 0xc42b9
+ mov ax, strict word 00003h ; b8 03 00 ; 0xc42ba
+ mov dx, 001ceh ; ba ce 01 ; 0xc42bd
+ out DX, ax ; ef ; 0xc42c0
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc42c1 vbe.c:57
+ mov dx, 001cfh ; ba cf 01 ; 0xc42c4 vbe.c:58
+ out DX, ax ; ef ; 0xc42c7
+ inc bx ; 43 ; 0xc42c8 vbe.c:578
+ inc bx ; 43 ; 0xc42c9
+ mov ax, strict word 00004h ; b8 04 00 ; 0xc42ca
+ mov dx, 001ceh ; ba ce 01 ; 0xc42cd
+ out DX, ax ; ef ; 0xc42d0
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc42d1 vbe.c:580
+ mov dx, 001cfh ; ba cf 01 ; 0xc42d4
+ out DX, ax ; ef ; 0xc42d7
+ mov si, strict word 00005h ; be 05 00 ; 0xc42d8 vbe.c:582
+ jmp short 042e2h ; eb 05 ; 0xc42db
+ cmp si, strict byte 00009h ; 83 fe 09 ; 0xc42dd
+ jnbe short 042f6h ; 77 14 ; 0xc42e0
+ mov ax, si ; 89 f0 ; 0xc42e2 vbe.c:583
+ mov dx, 001ceh ; ba ce 01 ; 0xc42e4
+ out DX, ax ; ef ; 0xc42e7
+ mov es, cx ; 8e c1 ; 0xc42e8 vbe.c:57
+ mov ax, word [es:bx] ; 26 8b 07 ; 0xc42ea
+ mov dx, 001cfh ; ba cf 01 ; 0xc42ed vbe.c:58
+ out DX, ax ; ef ; 0xc42f0
+ inc bx ; 43 ; 0xc42f1 vbe.c:585
+ inc bx ; 43 ; 0xc42f2
+ inc si ; 46 ; 0xc42f3 vbe.c:586
+ jmp short 042ddh ; eb e7 ; 0xc42f4
+ lea sp, [bp-006h] ; 8d 66 fa ; 0xc42f6 vbe.c:588
+ pop si ; 5e ; 0xc42f9
+ pop cx ; 59 ; 0xc42fa
+ pop bx ; 5b ; 0xc42fb
+ pop bp ; 5d ; 0xc42fc
+ retn ; c3 ; 0xc42fd
+ ; disGetNextSymbol 0xc42fe LB 0x266 -> off=0x0 cb=000000000000008d uValue=00000000000c42fe 'vbe_biosfn_save_restore_state'
+vbe_biosfn_save_restore_state: ; 0xc42fe LB 0x8d
+ push bp ; 55 ; 0xc42fe vbe.c:604
+ mov bp, sp ; 89 e5 ; 0xc42ff
+ push si ; 56 ; 0xc4301
+ push di ; 57 ; 0xc4302
+ push ax ; 50 ; 0xc4303
+ mov si, ax ; 89 c6 ; 0xc4304
+ mov word [bp-006h], dx ; 89 56 fa ; 0xc4306
+ mov ax, bx ; 89 d8 ; 0xc4309
+ mov bx, word [bp+004h] ; 8b 5e 04 ; 0xc430b
+ mov di, strict word 0004fh ; bf 4f 00 ; 0xc430e vbe.c:609
+ xor ah, ah ; 30 e4 ; 0xc4311 vbe.c:610
+ cmp ax, strict word 00002h ; 3d 02 00 ; 0xc4313
+ je short 0435eh ; 74 46 ; 0xc4316
+ cmp ax, strict word 00001h ; 3d 01 00 ; 0xc4318
+ je short 04342h ; 74 25 ; 0xc431b
+ test ax, ax ; 85 c0 ; 0xc431d
+ jne short 0437ah ; 75 59 ; 0xc431f
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc4321 vbe.c:612
+ call 032b8h ; e8 91 ef ; 0xc4324
+ mov cx, ax ; 89 c1 ; 0xc4327
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc4329 vbe.c:616
+ je short 04334h ; 74 05 ; 0xc432d
+ call 0421ch ; e8 ea fe ; 0xc432f vbe.c:617
+ add ax, cx ; 01 c8 ; 0xc4332
+ add ax, strict word 0003fh ; 05 3f 00 ; 0xc4334 vbe.c:618
+ mov CL, strict byte 006h ; b1 06 ; 0xc4337
+ shr ax, CL ; d3 e8 ; 0xc4339
+ push SS ; 16 ; 0xc433b
+ pop ES ; 07 ; 0xc433c
+ mov word [es:bx], ax ; 26 89 07 ; 0xc433d
+ jmp short 0437dh ; eb 3b ; 0xc4340 vbe.c:619
+ push SS ; 16 ; 0xc4342 vbe.c:621
+ pop ES ; 07 ; 0xc4343
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc4344
+ mov dx, cx ; 89 ca ; 0xc4347 vbe.c:622
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc4349
+ call 032f6h ; e8 a7 ef ; 0xc434c
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc434f vbe.c:626
+ je short 0437dh ; 74 28 ; 0xc4353
+ mov dx, ax ; 89 c2 ; 0xc4355 vbe.c:627
+ mov ax, cx ; 89 c8 ; 0xc4357
+ call 04224h ; e8 c8 fe ; 0xc4359
+ jmp short 0437dh ; eb 1f ; 0xc435c vbe.c:628
+ push SS ; 16 ; 0xc435e vbe.c:630
+ pop ES ; 07 ; 0xc435f
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc4360
+ mov dx, cx ; 89 ca ; 0xc4363 vbe.c:631
+ mov ax, word [bp-006h] ; 8b 46 fa ; 0xc4365
+ call 035ceh ; e8 63 f2 ; 0xc4368
+ test byte [bp-006h], 008h ; f6 46 fa 08 ; 0xc436b vbe.c:635
+ je short 0437dh ; 74 0c ; 0xc436f
+ mov dx, ax ; 89 c2 ; 0xc4371 vbe.c:636
+ mov ax, cx ; 89 c8 ; 0xc4373
+ call 0426fh ; e8 f7 fe ; 0xc4375
+ jmp short 0437dh ; eb 03 ; 0xc4378 vbe.c:637
+ mov di, 00100h ; bf 00 01 ; 0xc437a vbe.c:640
+ push SS ; 16 ; 0xc437d vbe.c:643
+ pop ES ; 07 ; 0xc437e
+ mov word [es:si], di ; 26 89 3c ; 0xc437f
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc4382 vbe.c:644
+ pop di ; 5f ; 0xc4385
+ pop si ; 5e ; 0xc4386
+ pop bp ; 5d ; 0xc4387
+ retn 00002h ; c2 02 00 ; 0xc4388
+ ; disGetNextSymbol 0xc438b LB 0x1d9 -> off=0x0 cb=00000000000000e2 uValue=00000000000c438b 'vbe_biosfn_get_set_scanline_length'
+vbe_biosfn_get_set_scanline_length: ; 0xc438b LB 0xe2
+ push bp ; 55 ; 0xc438b vbe.c:665
+ mov bp, sp ; 89 e5 ; 0xc438c
+ push si ; 56 ; 0xc438e
+ push di ; 57 ; 0xc438f
+ sub sp, strict byte 0000ah ; 83 ec 0a ; 0xc4390
+ push ax ; 50 ; 0xc4393
+ mov di, dx ; 89 d7 ; 0xc4394
+ mov word [bp-006h], bx ; 89 5e fa ; 0xc4396
+ mov si, cx ; 89 ce ; 0xc4399
+ call 03e17h ; e8 79 fa ; 0xc439b vbe.c:674
+ cmp AL, strict byte 00fh ; 3c 0f ; 0xc439e vbe.c:675
+ jne short 043a7h ; 75 05 ; 0xc43a0
+ mov cx, strict word 00010h ; b9 10 00 ; 0xc43a2
+ jmp short 043abh ; eb 04 ; 0xc43a5
+ xor ah, ah ; 30 e4 ; 0xc43a7
+ mov cx, ax ; 89 c1 ; 0xc43a9
+ mov ch, cl ; 88 cd ; 0xc43ab
+ call 03e4fh ; e8 9f fa ; 0xc43ad vbe.c:676
+ mov word [bp-00ah], ax ; 89 46 f6 ; 0xc43b0
+ mov word [bp-00ch], strict word 0004fh ; c7 46 f4 4f 00 ; 0xc43b3 vbe.c:677
+ push SS ; 16 ; 0xc43b8 vbe.c:678
+ pop ES ; 07 ; 0xc43b9
+ mov bx, word [bp-006h] ; 8b 5e fa ; 0xc43ba
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc43bd
+ mov al, byte [es:di] ; 26 8a 05 ; 0xc43c0 vbe.c:679
+ cmp AL, strict byte 002h ; 3c 02 ; 0xc43c3 vbe.c:683
+ je short 043d2h ; 74 0b ; 0xc43c5
+ cmp AL, strict byte 001h ; 3c 01 ; 0xc43c7
+ je short 043fbh ; 74 30 ; 0xc43c9
+ test al, al ; 84 c0 ; 0xc43cb
+ je short 043f6h ; 74 27 ; 0xc43cd
+ jmp near 04456h ; e9 84 00 ; 0xc43cf
+ cmp ch, 004h ; 80 fd 04 ; 0xc43d2 vbe.c:685
+ jne short 043ddh ; 75 06 ; 0xc43d5
+ mov CL, strict byte 003h ; b1 03 ; 0xc43d7 vbe.c:686
+ sal bx, CL ; d3 e3 ; 0xc43d9
+ jmp short 043f6h ; eb 19 ; 0xc43db vbe.c:687
+ mov al, ch ; 88 e8 ; 0xc43dd vbe.c:688
+ xor ah, ah ; 30 e4 ; 0xc43df
+ cwd ; 99 ; 0xc43e1
+ mov CL, strict byte 003h ; b1 03 ; 0xc43e2
+ sal dx, CL ; d3 e2 ; 0xc43e4
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc43e6
+ sar ax, CL ; d3 f8 ; 0xc43e8
+ mov word [bp-00eh], ax ; 89 46 f2 ; 0xc43ea
+ mov ax, bx ; 89 d8 ; 0xc43ed
+ xor dx, dx ; 31 d2 ; 0xc43ef
+ div word [bp-00eh] ; f7 76 f2 ; 0xc43f1
+ mov bx, ax ; 89 c3 ; 0xc43f4
+ mov ax, bx ; 89 d8 ; 0xc43f6 vbe.c:691
+ call 03e30h ; e8 35 fa ; 0xc43f8
+ call 03e4fh ; e8 51 fa ; 0xc43fb vbe.c:694
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc43fe
+ push SS ; 16 ; 0xc4401 vbe.c:695
+ pop ES ; 07 ; 0xc4402
+ mov bx, word [bp-006h] ; 8b 5e fa ; 0xc4403
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4406
+ cmp ch, 004h ; 80 fd 04 ; 0xc4409 vbe.c:696
+ jne short 04416h ; 75 08 ; 0xc440c
+ mov CL, strict byte 003h ; b1 03 ; 0xc440e vbe.c:697
+ mov bx, ax ; 89 c3 ; 0xc4410
+ shr bx, CL ; d3 eb ; 0xc4412
+ jmp short 0442ch ; eb 16 ; 0xc4414 vbe.c:698
+ mov al, ch ; 88 e8 ; 0xc4416 vbe.c:699
+ xor ah, ah ; 30 e4 ; 0xc4418
+ cwd ; 99 ; 0xc441a
+ mov CL, strict byte 003h ; b1 03 ; 0xc441b
+ sal dx, CL ; d3 e2 ; 0xc441d
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc441f
+ sar ax, CL ; d3 f8 ; 0xc4421
+ mov bx, ax ; 89 c3 ; 0xc4423
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc4425
+ mul bx ; f7 e3 ; 0xc4428
+ mov bx, ax ; 89 c3 ; 0xc442a
+ add bx, strict byte 00003h ; 83 c3 03 ; 0xc442c vbe.c:700
+ and bl, 0fch ; 80 e3 fc ; 0xc442f
+ push SS ; 16 ; 0xc4432 vbe.c:701
+ pop ES ; 07 ; 0xc4433
+ mov word [es:di], bx ; 26 89 1d ; 0xc4434
+ call 03e68h ; e8 2e fa ; 0xc4437 vbe.c:702
+ push SS ; 16 ; 0xc443a
+ pop ES ; 07 ; 0xc443b
+ mov word [es:si], ax ; 26 89 04 ; 0xc443c
+ call 03ddfh ; e8 9d f9 ; 0xc443f vbe.c:703
+ push SS ; 16 ; 0xc4442
+ pop ES ; 07 ; 0xc4443
+ cmp ax, word [es:si] ; 26 3b 04 ; 0xc4444
+ jbe short 0445bh ; 76 12 ; 0xc4447
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc4449 vbe.c:704
+ call 03e30h ; e8 e1 f9 ; 0xc444c
+ mov word [bp-00ch], 00200h ; c7 46 f4 00 02 ; 0xc444f vbe.c:705
+ jmp short 0445bh ; eb 05 ; 0xc4454 vbe.c:707
+ mov word [bp-00ch], 00100h ; c7 46 f4 00 01 ; 0xc4456 vbe.c:710
+ push SS ; 16 ; 0xc445b vbe.c:713
+ pop ES ; 07 ; 0xc445c
+ mov ax, word [bp-00ch] ; 8b 46 f4 ; 0xc445d
+ mov bx, word [bp-010h] ; 8b 5e f0 ; 0xc4460
+ mov word [es:bx], ax ; 26 89 07 ; 0xc4463
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc4466 vbe.c:714
+ pop di ; 5f ; 0xc4469
+ pop si ; 5e ; 0xc446a
+ pop bp ; 5d ; 0xc446b
+ retn ; c3 ; 0xc446c
+ ; disGetNextSymbol 0xc446d LB 0xf7 -> off=0x0 cb=00000000000000f7 uValue=00000000000c446d 'private_biosfn_custom_mode'
+private_biosfn_custom_mode: ; 0xc446d LB 0xf7
+ push bp ; 55 ; 0xc446d vbe.c:740
+ mov bp, sp ; 89 e5 ; 0xc446e
+ push si ; 56 ; 0xc4470
+ push di ; 57 ; 0xc4471
+ sub sp, strict byte 00006h ; 83 ec 06 ; 0xc4472
+ push ax ; 50 ; 0xc4475
+ mov si, dx ; 89 d6 ; 0xc4476
+ mov di, cx ; 89 cf ; 0xc4478
+ mov word [bp-00ah], strict word 0004fh ; c7 46 f6 4f 00 ; 0xc447a vbe.c:753
+ push SS ; 16 ; 0xc447f vbe.c:754
+ pop ES ; 07 ; 0xc4480
+ mov al, byte [es:si] ; 26 8a 04 ; 0xc4481
+ test al, al ; 84 c0 ; 0xc4484 vbe.c:755
+ jne short 044a8h ; 75 20 ; 0xc4486
+ push SS ; 16 ; 0xc4488 vbe.c:757
+ pop ES ; 07 ; 0xc4489
+ mov bx, word [es:bx] ; 26 8b 1f ; 0xc448a
+ mov ax, word [es:di] ; 26 8b 05 ; 0xc448d vbe.c:758
+ mov word [bp-008h], ax ; 89 46 f8 ; 0xc4490
+ mov al, byte [es:si+001h] ; 26 8a 44 01 ; 0xc4493 vbe.c:759
+ and ax, strict word 0007fh ; 25 7f 00 ; 0xc4497
+ mov ch, al ; 88 c5 ; 0xc449a
+ cmp AL, strict byte 008h ; 3c 08 ; 0xc449c vbe.c:764
+ je short 044b0h ; 74 10 ; 0xc449e
+ cmp AL, strict byte 010h ; 3c 10 ; 0xc44a0
+ je short 044b0h ; 74 0c ; 0xc44a2
+ cmp AL, strict byte 020h ; 3c 20 ; 0xc44a4
+ je short 044b0h ; 74 08 ; 0xc44a6
+ mov word [bp-00ah], 00100h ; c7 46 f6 00 01 ; 0xc44a8 vbe.c:765
+ jmp near 04552h ; e9 a2 00 ; 0xc44ad vbe.c:766
+ push SS ; 16 ; 0xc44b0 vbe.c:770
+ pop ES ; 07 ; 0xc44b1
+ test byte [es:si+001h], 080h ; 26 f6 44 01 80 ; 0xc44b2
+ je short 044beh ; 74 05 ; 0xc44b7
+ mov ax, strict word 00040h ; b8 40 00 ; 0xc44b9
+ jmp short 044c0h ; eb 02 ; 0xc44bc
+ xor ax, ax ; 31 c0 ; 0xc44be
+ mov byte [bp-006h], al ; 88 46 fa ; 0xc44c0
+ cmp bx, 00280h ; 81 fb 80 02 ; 0xc44c3 vbe.c:773
+ jnc short 044ceh ; 73 05 ; 0xc44c7
+ mov bx, 00280h ; bb 80 02 ; 0xc44c9 vbe.c:774
+ jmp short 044d7h ; eb 09 ; 0xc44cc vbe.c:775
+ cmp bx, 00a00h ; 81 fb 00 0a ; 0xc44ce
+ jbe short 044d7h ; 76 03 ; 0xc44d2
+ mov bx, 00a00h ; bb 00 0a ; 0xc44d4 vbe.c:776
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc44d7 vbe.c:777
+ cmp ax, 001e0h ; 3d e0 01 ; 0xc44da
+ jnc short 044e6h ; 73 07 ; 0xc44dd
+ mov word [bp-008h], 001e0h ; c7 46 f8 e0 01 ; 0xc44df vbe.c:778
+ jmp short 044f0h ; eb 0a ; 0xc44e4 vbe.c:779
+ cmp ax, 00780h ; 3d 80 07 ; 0xc44e6
+ jbe short 044f0h ; 76 05 ; 0xc44e9
+ mov word [bp-008h], 00780h ; c7 46 f8 80 07 ; 0xc44eb vbe.c:780
+ mov dx, strict word 0ffffh ; ba ff ff ; 0xc44f0 vbe.c:786
+ mov ax, 003b6h ; b8 b6 03 ; 0xc44f3
+ call 03e81h ; e8 88 f9 ; 0xc44f6
+ mov si, ax ; 89 c6 ; 0xc44f9
+ mov al, ch ; 88 e8 ; 0xc44fb vbe.c:789
+ xor ah, ah ; 30 e4 ; 0xc44fd
+ cwd ; 99 ; 0xc44ff
+ mov CL, strict byte 003h ; b1 03 ; 0xc4500
+ sal dx, CL ; d3 e2 ; 0xc4502
+ db 01bh, 0c2h
+ ; sbb ax, dx ; 1b c2 ; 0xc4504
+ sar ax, CL ; d3 f8 ; 0xc4506
+ mov dx, ax ; 89 c2 ; 0xc4508
+ mov ax, bx ; 89 d8 ; 0xc450a
+ mul dx ; f7 e2 ; 0xc450c
+ add ax, strict word 00003h ; 05 03 00 ; 0xc450e vbe.c:790
+ and AL, strict byte 0fch ; 24 fc ; 0xc4511
+ mov dx, word [bp-008h] ; 8b 56 f8 ; 0xc4513 vbe.c:792
+ mul dx ; f7 e2 ; 0xc4516
+ cmp dx, si ; 39 f2 ; 0xc4518 vbe.c:794
+ jnbe short 04522h ; 77 06 ; 0xc451a
+ jne short 04529h ; 75 0b ; 0xc451c
+ test ax, ax ; 85 c0 ; 0xc451e
+ jbe short 04529h ; 76 07 ; 0xc4520
+ mov word [bp-00ah], 00200h ; c7 46 f6 00 02 ; 0xc4522 vbe.c:796
+ jmp short 04552h ; eb 29 ; 0xc4527 vbe.c:797
+ xor ax, ax ; 31 c0 ; 0xc4529 vbe.c:801
+ call 00610h ; e8 e2 c0 ; 0xc452b
+ mov al, ch ; 88 e8 ; 0xc452e vbe.c:802
+ xor ah, ah ; 30 e4 ; 0xc4530
+ call 03df8h ; e8 c3 f8 ; 0xc4532
+ mov ax, bx ; 89 d8 ; 0xc4535 vbe.c:803
+ call 03da1h ; e8 67 f8 ; 0xc4537
+ mov ax, word [bp-008h] ; 8b 46 f8 ; 0xc453a vbe.c:804
+ call 03dc0h ; e8 80 f8 ; 0xc453d
+ xor ax, ax ; 31 c0 ; 0xc4540 vbe.c:805
+ call 00636h ; e8 f1 c0 ; 0xc4542
+ mov al, byte [bp-006h] ; 8a 46 fa ; 0xc4545 vbe.c:806
+ or AL, strict byte 001h ; 0c 01 ; 0xc4548
+ xor ah, ah ; 30 e4 ; 0xc454a
+ call 00610h ; e8 c1 c0 ; 0xc454c
+ call 00708h ; e8 b6 c1 ; 0xc454f vbe.c:807
+ push SS ; 16 ; 0xc4552 vbe.c:815
+ pop ES ; 07 ; 0xc4553
+ mov ax, word [bp-00ah] ; 8b 46 f6 ; 0xc4554
+ mov bx, word [bp-00ch] ; 8b 5e f4 ; 0xc4557
+ mov word [es:bx], ax ; 26 89 07 ; 0xc455a
+ lea sp, [bp-004h] ; 8d 66 fc ; 0xc455d vbe.c:816
+ pop di ; 5f ; 0xc4560
+ pop si ; 5e ; 0xc4561
+ pop bp ; 5d ; 0xc4562
+ retn ; c3 ; 0xc4563
+
+ ; Padding 0xdc bytes at 0xc4564
+ times 220 db 0
+
+section VBE32 progbits vstart=0x4640 align=1 ; size=0x115 class=CODE group=AUTO
+ ; disGetNextSymbol 0xc4640 LB 0x115 -> off=0x0 cb=0000000000000114 uValue=00000000000c0000 'vesa_pm_start'
+vesa_pm_start: ; 0xc4640 LB 0x114
+ sbb byte [bx+si], al ; 18 00 ; 0xc4640
+ dec di ; 4f ; 0xc4642
+ add byte [bx+si], dl ; 00 10 ; 0xc4643
+ add word [bx+si], cx ; 01 08 ; 0xc4645
+ add dh, cl ; 00 ce ; 0xc4647
+ add di, cx ; 01 cf ; 0xc4649
+ add di, cx ; 01 cf ; 0xc464b
+ add ax, dx ; 01 d0 ; 0xc464d
+ add word [bp-048fdh], si ; 01 b6 03 b7 ; 0xc464f
+ db 003h, 0ffh
+ ; add di, di ; 03 ff ; 0xc4653
+ db 0ffh
+ db 0ffh
+ jmp word [bp-07dh] ; ff 66 83 ; 0xc4657
+ sti ; fb ; 0xc465a
+ add byte [si+005h], dh ; 00 74 05 ; 0xc465b
+ mov eax, strict dword 066c30100h ; 66 b8 00 01 c3 66 ; 0xc465e vberom.asm:825
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc4664
+ push edx ; 66 52 ; 0xc4666 vberom.asm:829
+ push eax ; 66 50 ; 0xc4668 vberom.asm:830
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc466a vberom.asm:831
+ add ax, 06600h ; 05 00 66 ; 0xc4670
+ out DX, ax ; ef ; 0xc4673
+ pop eax ; 66 58 ; 0xc4674 vberom.asm:834
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc4676 vberom.asm:835
+ in eax, DX ; 66 ed ; 0xc467c vberom.asm:837
+ pop edx ; 66 5a ; 0xc467e vberom.asm:838
+ db 066h, 03bh, 0d0h
+ ; cmp edx, eax ; 66 3b d0 ; 0xc4680 vberom.asm:839
+ jne short 0468ah ; 75 05 ; 0xc4683 vberom.asm:840
+ mov eax, strict dword 066c3004fh ; 66 b8 4f 00 c3 66 ; 0xc4685 vberom.asm:841
+ mov ax, 0014fh ; b8 4f 01 ; 0xc468b
+ retn ; c3 ; 0xc468e vberom.asm:845
+ cmp bl, 080h ; 80 fb 80 ; 0xc468f vberom.asm:847
+ je short 0469eh ; 74 0a ; 0xc4692 vberom.asm:848
+ cmp bl, 000h ; 80 fb 00 ; 0xc4694 vberom.asm:849
+ je short 046aeh ; 74 15 ; 0xc4697 vberom.asm:850
+ mov eax, strict dword 052c30100h ; 66 b8 00 01 c3 52 ; 0xc4699 vberom.asm:851
+ mov edx, strict dword 0a8ec03dah ; 66 ba da 03 ec a8 ; 0xc469f vberom.asm:855
+ or byte [di-005h], dh ; 08 75 fb ; 0xc46a5
+ in AL, DX ; ec ; 0xc46a8 vberom.asm:861
+ test AL, strict byte 008h ; a8 08 ; 0xc46a9 vberom.asm:862
+ je short 046a8h ; 74 fb ; 0xc46ab vberom.asm:863
+ pop dx ; 5a ; 0xc46ad vberom.asm:864
+ push ax ; 50 ; 0xc46ae vberom.asm:868
+ push cx ; 51 ; 0xc46af vberom.asm:869
+ push dx ; 52 ; 0xc46b0 vberom.asm:870
+ push si ; 56 ; 0xc46b1 vberom.asm:871
+ push di ; 57 ; 0xc46b2 vberom.asm:872
+ sal dx, 010h ; c1 e2 10 ; 0xc46b3 vberom.asm:873
+ and cx, strict word 0ffffh ; 81 e1 ff ff ; 0xc46b6 vberom.asm:874
+ add byte [bx+si], al ; 00 00 ; 0xc46ba
+ db 00bh, 0cah
+ ; or cx, dx ; 0b ca ; 0xc46bc vberom.asm:875
+ sal cx, 002h ; c1 e1 02 ; 0xc46be vberom.asm:876
+ db 08bh, 0c1h
+ ; mov ax, cx ; 8b c1 ; 0xc46c1 vberom.asm:877
+ push ax ; 50 ; 0xc46c3 vberom.asm:878
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc46c4 vberom.asm:879
+ push ES ; 06 ; 0xc46ca
+ add byte [bp-011h], ah ; 00 66 ef ; 0xc46cb
+ mov edx, strict dword 0ed6601cfh ; 66 ba cf 01 66 ed ; 0xc46ce vberom.asm:882
+ db 00fh, 0b7h, 0c8h
+ ; movzx cx, ax ; 0f b7 c8 ; 0xc46d4 vberom.asm:884
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc46d7 vberom.asm:885
+ add ax, word [bx+si] ; 03 00 ; 0xc46dd
+ out DX, eax ; 66 ef ; 0xc46df vberom.asm:887
+ mov edx, strict dword 0ed6601cfh ; 66 ba cf 01 66 ed ; 0xc46e1 vberom.asm:888
+ db 00fh, 0b7h, 0f0h
+ ; movzx si, ax ; 0f b7 f0 ; 0xc46e7 vberom.asm:890
+ pop ax ; 58 ; 0xc46ea vberom.asm:891
+ cmp si, strict byte 00004h ; 83 fe 04 ; 0xc46eb vberom.asm:893
+ je short 04707h ; 74 17 ; 0xc46ee vberom.asm:894
+ add si, strict byte 00007h ; 83 c6 07 ; 0xc46f0 vberom.asm:895
+ shr si, 003h ; c1 ee 03 ; 0xc46f3 vberom.asm:896
+ imul cx, si ; 0f af ce ; 0xc46f6 vberom.asm:897
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc46f9 vberom.asm:898
+ div cx ; f7 f1 ; 0xc46fb vberom.asm:899
+ db 08bh, 0f8h
+ ; mov di, ax ; 8b f8 ; 0xc46fd vberom.asm:900
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc46ff vberom.asm:901
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc4701 vberom.asm:902
+ div si ; f7 f6 ; 0xc4703 vberom.asm:903
+ jmp short 04713h ; eb 0c ; 0xc4705 vberom.asm:904
+ shr cx, 1 ; d1 e9 ; 0xc4707 vberom.asm:907
+ db 033h, 0d2h
+ ; xor dx, dx ; 33 d2 ; 0xc4709 vberom.asm:908
+ div cx ; f7 f1 ; 0xc470b vberom.asm:909
+ db 08bh, 0f8h
+ ; mov di, ax ; 8b f8 ; 0xc470d vberom.asm:910
+ db 08bh, 0c2h
+ ; mov ax, dx ; 8b c2 ; 0xc470f vberom.asm:911
+ sal ax, 1 ; d1 e0 ; 0xc4711 vberom.asm:912
+ push edx ; 66 52 ; 0xc4713 vberom.asm:915
+ push eax ; 66 50 ; 0xc4715 vberom.asm:916
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc4717 vberom.asm:917
+ or byte [bx+si], al ; 08 00 ; 0xc471d
+ out DX, eax ; 66 ef ; 0xc471f vberom.asm:919
+ pop eax ; 66 58 ; 0xc4721 vberom.asm:920
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc4723 vberom.asm:921
+ pop edx ; 66 5a ; 0xc4729 vberom.asm:923
+ db 066h, 08bh, 0c7h
+ ; mov eax, edi ; 66 8b c7 ; 0xc472b vberom.asm:925
+ push edx ; 66 52 ; 0xc472e vberom.asm:926
+ push eax ; 66 50 ; 0xc4730 vberom.asm:927
+ mov edx, strict dword 0b86601ceh ; 66 ba ce 01 66 b8 ; 0xc4732 vberom.asm:928
+ or word [bx+si], ax ; 09 00 ; 0xc4738
+ out DX, eax ; 66 ef ; 0xc473a vberom.asm:930
+ pop eax ; 66 58 ; 0xc473c vberom.asm:931
+ mov edx, strict dword 0ef6601cfh ; 66 ba cf 01 66 ef ; 0xc473e vberom.asm:932
+ pop edx ; 66 5a ; 0xc4744 vberom.asm:934
+ pop di ; 5f ; 0xc4746 vberom.asm:936
+ pop si ; 5e ; 0xc4747 vberom.asm:937
+ pop dx ; 5a ; 0xc4748 vberom.asm:938
+ pop cx ; 59 ; 0xc4749 vberom.asm:939
+ pop ax ; 58 ; 0xc474a vberom.asm:940
+ mov eax, strict dword 066c3004fh ; 66 b8 4f 00 c3 66 ; 0xc474b vberom.asm:941
+ mov ax, 0014fh ; b8 4f 01 ; 0xc4751
+ ; disGetNextSymbol 0xc4754 LB 0x1 -> off=0x0 cb=0000000000000001 uValue=0000000000000114 'vesa_pm_end'
+vesa_pm_end: ; 0xc4754 LB 0x1
+ retn ; c3 ; 0xc4754 vberom.asm:946
+
+ ; Padding 0x2b bytes at 0xc4755
+ times 43 db 0
+
+section _DATA progbits vstart=0x4780 align=1 ; size=0x374c class=DATA group=DGROUP
+ ; disGetNextSymbol 0xc4780 LB 0x374c -> off=0x0 cb=000000000000002e uValue=00000000000c0000 '_msg_vga_init'
+_msg_vga_init: ; 0xc4780 LB 0x2e
+ db 'Oracle VM VirtualBox Version 7.0.6 VGA BIOS', 00dh, 00ah, 000h
+ ; disGetNextSymbol 0xc47ae LB 0x371e -> off=0x0 cb=0000000000000080 uValue=00000000000c002e 'vga_modes'
+vga_modes: ; 0xc47ae LB 0x80
+ db 000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+ db 002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
+ db 004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
+ db 006h, 001h, 002h, 001h, 000h, 0b8h, 0ffh, 001h, 007h, 000h, 001h, 004h, 000h, 0b0h, 0ffh, 000h
+ db 00dh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h, 00eh, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 001h
+ db 00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ db 011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ db 013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
+ ; disGetNextSymbol 0xc482e LB 0x369e -> off=0x0 cb=0000000000000010 uValue=00000000000c00ae 'line_to_vpti'
+line_to_vpti: ; 0xc482e LB 0x10
+ db 017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
+ ; disGetNextSymbol 0xc483e LB 0x368e -> off=0x0 cb=0000000000000004 uValue=00000000000c00be 'dac_regs'
+dac_regs: ; 0xc483e LB 0x4
+ dd 0ff3f3f3fh
+ ; disGetNextSymbol 0xc4842 LB 0x368a -> off=0x0 cb=0000000000000780 uValue=00000000000c00c2 'video_param_table'
+video_param_table: ; 0xc4842 LB 0x780
+ db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 008h, 000h, 008h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 008h, 000h, 010h, 001h, 003h, 000h, 002h, 063h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 008h, 000h, 010h, 001h, 003h, 000h, 002h, 063h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 0c7h, 006h, 007h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 008h, 000h, 040h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+ db 028h, 018h, 008h, 000h, 040h, 009h, 003h, 000h, 002h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0a2h, 0ffh, 000h, 013h, 015h, 017h, 002h, 004h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 003h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 00fh, 00fh, 0ffh
+ db 050h, 018h, 008h, 000h, 040h, 001h, 001h, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 0c1h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+ db 0b9h, 0c2h, 0ffh, 000h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h, 017h
+ db 017h, 017h, 017h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00dh, 00fh, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 000h, 003h, 000h, 003h, 0a6h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00dh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 000h, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 028h, 018h, 008h, 000h, 020h, 009h, 00fh, 000h, 006h, 063h, 02dh, 027h, 028h, 090h, 02bh, 080h
+ db 0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 000h, 096h
+ db 0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 018h, 008h, 000h, 040h, 001h, 00fh, 000h, 006h, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 000h, 096h
+ db 0b9h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 010h, 011h, 012h, 013h, 014h
+ db 015h, 016h, 017h, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+ db 0bah, 0e3h, 0ffh, 000h, 008h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 008h, 000h, 000h, 000h
+ db 018h, 000h, 000h, 001h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 018h, 00eh, 000h, 080h, 001h, 00fh, 000h, 006h, 0a3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 00fh, 063h
+ db 0bah, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 028h, 018h, 00eh, 000h, 008h, 009h, 003h, 000h, 002h, 0a3h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 014h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 00eh, 000h, 008h, 009h, 003h, 000h, 002h, 0a3h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 014h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 001h, 003h, 000h, 002h, 0a3h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 050h, 018h, 00eh, 000h, 010h, 001h, 003h, 000h, 002h, 0a3h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04dh, 00bh, 00ch, 000h, 000h, 000h, 000h, 083h, 085h, 05dh, 028h, 01fh, 063h
+ db 0bah, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 008h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 000h, 0ffh
+ db 028h, 018h, 010h, 000h, 008h, 008h, 003h, 000h, 002h, 067h, 02dh, 027h, 028h, 090h, 02bh, 0a0h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 014h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+ db 050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 067h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 01fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 00ch, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00eh, 00fh, 0ffh
+ db 050h, 018h, 010h, 000h, 010h, 000h, 003h, 000h, 002h, 066h, 05fh, 04fh, 050h, 082h, 055h, 081h
+ db 0bfh, 01fh, 000h, 04fh, 00dh, 00eh, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 00fh, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 008h, 008h, 008h, 008h, 008h, 008h, 008h, 010h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 00eh, 000h, 00fh, 008h, 000h, 000h, 000h, 000h, 000h, 010h, 00ah, 00fh, 0ffh
+ db 050h, 01dh, 010h, 000h, 0a0h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+ db 004h, 0c3h, 0ffh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h, 03fh, 000h
+ db 03fh, 000h, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 050h, 01dh, 010h, 000h, 0a0h, 001h, 00fh, 000h, 006h, 0e3h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 00bh, 03eh, 000h, 040h, 000h, 000h, 000h, 000h, 000h, 000h, 0eah, 08ch, 0dfh, 028h, 000h, 0e7h
+ db 004h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ db 028h, 018h, 008h, 000h, 020h, 001h, 00fh, 000h, 00eh, 063h, 05fh, 04fh, 050h, 082h, 054h, 080h
+ db 0bfh, 01fh, 000h, 041h, 000h, 000h, 000h, 000h, 000h, 000h, 09ch, 08eh, 08fh, 028h, 040h, 096h
+ db 0b9h, 0a3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 006h, 007h, 008h, 009h, 00ah, 00bh, 00ch
+ db 00dh, 00eh, 00fh, 041h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 040h, 005h, 00fh, 0ffh
+ db 064h, 024h, 010h, 000h, 000h, 001h, 00fh, 000h, 006h, 0e3h, 07fh, 063h, 063h, 083h, 06bh, 01bh
+ db 072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
+ db 073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
+ db 03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
+ ; disGetNextSymbol 0xc4fc2 LB 0x2f0a -> off=0x0 cb=00000000000000c0 uValue=00000000000c0842 'palette0'
+palette0: ; 0xc4fc2 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
+ db 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ db 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5082 LB 0x2e4a -> off=0x0 cb=00000000000000c0 uValue=00000000000c0902 'palette1'
+palette1: ; 0xc5082 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+ db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+ db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
+ db 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
+ db 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
+ db 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5142 LB 0x2d8a -> off=0x0 cb=00000000000000c0 uValue=00000000000c09c2 'palette2'
+palette2: ; 0xc5142 LB 0xc0
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
+ db 015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
+ db 000h, 015h, 000h, 000h, 015h, 02ah, 000h, 03fh, 000h, 000h, 03fh, 02ah, 02ah, 015h, 000h, 02ah
+ db 015h, 02ah, 02ah, 03fh, 000h, 02ah, 03fh, 02ah, 000h, 015h, 015h, 000h, 015h, 03fh, 000h, 03fh
+ db 015h, 000h, 03fh, 03fh, 02ah, 015h, 015h, 02ah, 015h, 03fh, 02ah, 03fh, 015h, 02ah, 03fh, 03fh
+ db 015h, 000h, 000h, 015h, 000h, 02ah, 015h, 02ah, 000h, 015h, 02ah, 02ah, 03fh, 000h, 000h, 03fh
+ db 000h, 02ah, 03fh, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 000h, 015h, 015h, 000h, 03fh, 015h, 02ah
+ db 015h, 015h, 02ah, 03fh, 03fh, 000h, 015h, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 03fh, 02ah, 03fh
+ db 015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
+ db 015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ ; disGetNextSymbol 0xc5202 LB 0x2cca -> off=0x0 cb=0000000000000300 uValue=00000000000c0a82 'palette3'
+palette3: ; 0xc5202 LB 0x300
+ db 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
+ db 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
+ db 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
+ db 000h, 000h, 000h, 005h, 005h, 005h, 008h, 008h, 008h, 00bh, 00bh, 00bh, 00eh, 00eh, 00eh, 011h
+ db 011h, 011h, 014h, 014h, 014h, 018h, 018h, 018h, 01ch, 01ch, 01ch, 020h, 020h, 020h, 024h, 024h
+ db 024h, 028h, 028h, 028h, 02dh, 02dh, 02dh, 032h, 032h, 032h, 038h, 038h, 038h, 03fh, 03fh, 03fh
+ db 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 03fh, 03fh
+ db 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh
+ db 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h, 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 000h
+ db 000h, 03fh, 000h, 000h, 03fh, 010h, 000h, 03fh, 01fh, 000h, 03fh, 02fh, 000h, 03fh, 03fh, 000h
+ db 02fh, 03fh, 000h, 01fh, 03fh, 000h, 010h, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh
+ db 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h
+ db 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh, 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h
+ db 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh, 01fh, 01fh, 03fh, 01fh, 01fh, 03fh, 027h, 01fh, 03fh
+ db 02fh, 01fh, 03fh, 037h, 01fh, 03fh, 03fh, 01fh, 037h, 03fh, 01fh, 02fh, 03fh, 01fh, 027h, 03fh
+ db 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03fh, 03fh
+ db 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h
+ db 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh, 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 02dh
+ db 02dh, 03fh, 02dh, 02dh, 03fh, 031h, 02dh, 03fh, 036h, 02dh, 03fh, 03ah, 02dh, 03fh, 03fh, 02dh
+ db 03ah, 03fh, 02dh, 036h, 03fh, 02dh, 031h, 03fh, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h
+ db 01ch, 015h, 000h, 01ch, 01ch, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h
+ db 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch, 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h
+ db 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch, 000h, 000h, 01ch, 000h, 000h, 01ch, 007h, 000h, 01ch
+ db 00eh, 000h, 01ch, 015h, 000h, 01ch, 01ch, 000h, 015h, 01ch, 000h, 00eh, 01ch, 000h, 007h, 01ch
+ db 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 01ch, 01ch
+ db 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h
+ db 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh, 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 00eh
+ db 00eh, 01ch, 00eh, 00eh, 01ch, 011h, 00eh, 01ch, 015h, 00eh, 01ch, 018h, 00eh, 01ch, 01ch, 00eh
+ db 018h, 01ch, 00eh, 015h, 01ch, 00eh, 011h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h
+ db 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h
+ db 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch, 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah
+ db 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch, 014h, 014h, 01ch, 014h, 014h, 01ch, 016h, 014h, 01ch
+ db 018h, 014h, 01ch, 01ah, 014h, 01ch, 01ch, 014h, 01ah, 01ch, 014h, 018h, 01ch, 014h, 016h, 01ch
+ db 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 010h, 010h
+ db 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h
+ db 000h, 010h, 00ch, 000h, 010h, 010h, 000h, 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 000h
+ db 000h, 010h, 000h, 000h, 010h, 004h, 000h, 010h, 008h, 000h, 010h, 00ch, 000h, 010h, 010h, 000h
+ db 00ch, 010h, 000h, 008h, 010h, 000h, 004h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h
+ db 010h, 00eh, 008h, 010h, 010h, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah
+ db 010h, 008h, 008h, 010h, 00ah, 008h, 010h, 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh
+ db 010h, 008h, 00ch, 010h, 008h, 00ah, 010h, 008h, 008h, 010h, 008h, 008h, 010h, 00ah, 008h, 010h
+ db 00ch, 008h, 010h, 00eh, 008h, 010h, 010h, 008h, 00eh, 010h, 008h, 00ch, 010h, 008h, 00ah, 010h
+ db 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 010h, 010h
+ db 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh
+ db 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh, 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 00bh
+ db 00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
+ db 00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5502 LB 0x29ca -> off=0x0 cb=0000000000000010 uValue=00000000000c0d82 'static_functionality'
+static_functionality: ; 0xc5502 LB 0x10
+ db 0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5512 LB 0x29ba -> off=0x0 cb=0000000000000024 uValue=00000000000c0d92 '_dcc_table'
+_dcc_table: ; 0xc5512 LB 0x24
+ db 010h, 001h, 007h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5536 LB 0x2996 -> off=0x0 cb=000000000000001a uValue=00000000000c0db6 '_secondary_save_area'
+_secondary_save_area: ; 0xc5536 LB 0x1a
+ db 01ah, 000h, 012h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5550 LB 0x297c -> off=0x0 cb=000000000000001c uValue=00000000000c0dd0 '_video_save_pointer_table'
+_video_save_pointer_table: ; 0xc5550 LB 0x1c
+ db 042h, 048h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 055h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc556c LB 0x2960 -> off=0x0 cb=0000000000000800 uValue=00000000000c0dec 'vgafont8'
+vgafont8: ; 0xc556c LB 0x800
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
+ db 07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
+ db 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
+ db 010h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 07ch, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h
+ db 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h
+ db 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 00fh, 007h, 00fh, 07dh, 0cch, 0cch, 0cch, 078h
+ db 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 03fh, 033h, 03fh, 030h, 030h, 070h, 0f0h, 0e0h
+ db 07fh, 063h, 07fh, 063h, 063h, 067h, 0e6h, 0c0h, 099h, 05ah, 03ch, 0e7h, 0e7h, 03ch, 05ah, 099h
+ db 080h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 080h, 000h, 002h, 00eh, 03eh, 0feh, 03eh, 00eh, 002h, 000h
+ db 018h, 03ch, 07eh, 018h, 018h, 07eh, 03ch, 018h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 000h
+ db 07fh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 000h, 03eh, 063h, 038h, 06ch, 06ch, 038h, 0cch, 078h
+ db 000h, 000h, 000h, 000h, 07eh, 07eh, 07eh, 000h, 018h, 03ch, 07eh, 018h, 07eh, 03ch, 018h, 0ffh
+ db 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h
+ db 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h
+ db 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h
+ db 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 000h, 000h, 000h, 0ffh, 0ffh, 07eh, 03ch, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 078h, 078h, 030h, 030h, 000h, 030h, 000h
+ db 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 0feh, 06ch, 06ch, 000h
+ db 030h, 07ch, 0c0h, 078h, 00ch, 0f8h, 030h, 000h, 000h, 0c6h, 0cch, 018h, 030h, 066h, 0c6h, 000h
+ db 038h, 06ch, 038h, 076h, 0dch, 0cch, 076h, 000h, 060h, 060h, 0c0h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 060h, 060h, 030h, 018h, 000h, 060h, 030h, 018h, 018h, 018h, 030h, 060h, 000h
+ db 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 060h, 000h, 000h, 000h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 030h, 000h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h
+ db 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 07ch, 000h, 030h, 070h, 030h, 030h, 030h, 030h, 0fch, 000h
+ db 078h, 0cch, 00ch, 038h, 060h, 0cch, 0fch, 000h, 078h, 0cch, 00ch, 038h, 00ch, 0cch, 078h, 000h
+ db 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 01eh, 000h, 0fch, 0c0h, 0f8h, 00ch, 00ch, 0cch, 078h, 000h
+ db 038h, 060h, 0c0h, 0f8h, 0cch, 0cch, 078h, 000h, 0fch, 0cch, 00ch, 018h, 030h, 030h, 030h, 000h
+ db 078h, 0cch, 0cch, 078h, 0cch, 0cch, 078h, 000h, 078h, 0cch, 0cch, 07ch, 00ch, 018h, 070h, 000h
+ db 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 000h, 000h, 030h, 030h, 060h
+ db 018h, 030h, 060h, 0c0h, 060h, 030h, 018h, 000h, 000h, 000h, 0fch, 000h, 000h, 0fch, 000h, 000h
+ db 060h, 030h, 018h, 00ch, 018h, 030h, 060h, 000h, 078h, 0cch, 00ch, 018h, 030h, 000h, 030h, 000h
+ db 07ch, 0c6h, 0deh, 0deh, 0deh, 0c0h, 078h, 000h, 030h, 078h, 0cch, 0cch, 0fch, 0cch, 0cch, 000h
+ db 0fch, 066h, 066h, 07ch, 066h, 066h, 0fch, 000h, 03ch, 066h, 0c0h, 0c0h, 0c0h, 066h, 03ch, 000h
+ db 0f8h, 06ch, 066h, 066h, 066h, 06ch, 0f8h, 000h, 0feh, 062h, 068h, 078h, 068h, 062h, 0feh, 000h
+ db 0feh, 062h, 068h, 078h, 068h, 060h, 0f0h, 000h, 03ch, 066h, 0c0h, 0c0h, 0ceh, 066h, 03eh, 000h
+ db 0cch, 0cch, 0cch, 0fch, 0cch, 0cch, 0cch, 000h, 078h, 030h, 030h, 030h, 030h, 030h, 078h, 000h
+ db 01eh, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 0e6h, 066h, 06ch, 078h, 06ch, 066h, 0e6h, 000h
+ db 0f0h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 000h
+ db 0c6h, 0e6h, 0f6h, 0deh, 0ceh, 0c6h, 0c6h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h
+ db 0fch, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 078h, 0cch, 0cch, 0cch, 0dch, 078h, 01ch, 000h
+ db 0fch, 066h, 066h, 07ch, 06ch, 066h, 0e6h, 000h, 078h, 0cch, 0e0h, 070h, 01ch, 0cch, 078h, 000h
+ db 0fch, 0b4h, 030h, 030h, 030h, 030h, 078h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 0fch, 000h
+ db 0cch, 0cch, 0cch, 0cch, 0cch, 078h, 030h, 000h, 0c6h, 0c6h, 0c6h, 0d6h, 0feh, 0eeh, 0c6h, 000h
+ db 0c6h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 030h, 078h, 000h
+ db 0feh, 0c6h, 08ch, 018h, 032h, 066h, 0feh, 000h, 078h, 060h, 060h, 060h, 060h, 060h, 078h, 000h
+ db 0c0h, 060h, 030h, 018h, 00ch, 006h, 002h, 000h, 078h, 018h, 018h, 018h, 018h, 018h, 078h, 000h
+ db 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 076h, 000h
+ db 0e0h, 060h, 060h, 07ch, 066h, 066h, 0dch, 000h, 000h, 000h, 078h, 0cch, 0c0h, 0cch, 078h, 000h
+ db 01ch, 00ch, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+ db 038h, 06ch, 060h, 0f0h, 060h, 060h, 0f0h, 000h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 0f8h
+ db 0e0h, 060h, 06ch, 076h, 066h, 066h, 0e6h, 000h, 030h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 00ch, 000h, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 0e0h, 060h, 066h, 06ch, 078h, 06ch, 0e6h, 000h
+ db 070h, 030h, 030h, 030h, 030h, 030h, 078h, 000h, 000h, 000h, 0cch, 0feh, 0feh, 0d6h, 0c6h, 000h
+ db 000h, 000h, 0f8h, 0cch, 0cch, 0cch, 0cch, 000h, 000h, 000h, 078h, 0cch, 0cch, 0cch, 078h, 000h
+ db 000h, 000h, 0dch, 066h, 066h, 07ch, 060h, 0f0h, 000h, 000h, 076h, 0cch, 0cch, 07ch, 00ch, 01eh
+ db 000h, 000h, 0dch, 076h, 066h, 060h, 0f0h, 000h, 000h, 000h, 07ch, 0c0h, 078h, 00ch, 0f8h, 000h
+ db 010h, 030h, 07ch, 030h, 030h, 034h, 018h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 0cch, 0cch, 0cch, 078h, 030h, 000h, 000h, 000h, 0c6h, 0d6h, 0feh, 0feh, 06ch, 000h
+ db 000h, 000h, 0c6h, 06ch, 038h, 06ch, 0c6h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 07ch, 00ch, 0f8h
+ db 000h, 000h, 0fch, 098h, 030h, 064h, 0fch, 000h, 01ch, 030h, 030h, 0e0h, 030h, 030h, 01ch, 000h
+ db 018h, 018h, 018h, 000h, 018h, 018h, 018h, 000h, 0e0h, 030h, 030h, 01ch, 030h, 030h, 0e0h, 000h
+ db 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h
+ db 078h, 0cch, 0c0h, 0cch, 078h, 018h, 00ch, 078h, 000h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 01ch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 07eh, 0c3h, 03ch, 006h, 03eh, 066h, 03fh, 000h
+ db 0cch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 0e0h, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h
+ db 030h, 030h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 000h, 000h, 078h, 0c0h, 0c0h, 078h, 00ch, 038h
+ db 07eh, 0c3h, 03ch, 066h, 07eh, 060h, 03ch, 000h, 0cch, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h
+ db 0e0h, 000h, 078h, 0cch, 0fch, 0c0h, 078h, 000h, 0cch, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 07ch, 0c6h, 038h, 018h, 018h, 018h, 03ch, 000h, 0e0h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 0c6h, 038h, 06ch, 0c6h, 0feh, 0c6h, 0c6h, 000h, 030h, 030h, 000h, 078h, 0cch, 0fch, 0cch, 000h
+ db 01ch, 000h, 0fch, 060h, 078h, 060h, 0fch, 000h, 000h, 000h, 07fh, 00ch, 07fh, 0cch, 07fh, 000h
+ db 03eh, 06ch, 0cch, 0feh, 0cch, 0cch, 0ceh, 000h, 078h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h
+ db 000h, 0cch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 0e0h, 000h, 078h, 0cch, 0cch, 078h, 000h
+ db 078h, 0cch, 000h, 0cch, 0cch, 0cch, 07eh, 000h, 000h, 0e0h, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 000h, 0cch, 000h, 0cch, 0cch, 07ch, 00ch, 0f8h, 0c3h, 018h, 03ch, 066h, 066h, 03ch, 018h, 000h
+ db 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 018h, 018h, 07eh, 0c0h, 0c0h, 07eh, 018h, 018h
+ db 038h, 06ch, 064h, 0f0h, 060h, 0e6h, 0fch, 000h, 0cch, 0cch, 078h, 0fch, 030h, 0fch, 030h, 030h
+ db 0f8h, 0cch, 0cch, 0fah, 0c6h, 0cfh, 0c6h, 0c7h, 00eh, 01bh, 018h, 03ch, 018h, 018h, 0d8h, 070h
+ db 01ch, 000h, 078h, 00ch, 07ch, 0cch, 07eh, 000h, 038h, 000h, 070h, 030h, 030h, 030h, 078h, 000h
+ db 000h, 01ch, 000h, 078h, 0cch, 0cch, 078h, 000h, 000h, 01ch, 000h, 0cch, 0cch, 0cch, 07eh, 000h
+ db 000h, 0f8h, 000h, 0f8h, 0cch, 0cch, 0cch, 000h, 0fch, 000h, 0cch, 0ech, 0fch, 0dch, 0cch, 000h
+ db 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h
+ db 030h, 000h, 030h, 060h, 0c0h, 0cch, 078h, 000h, 000h, 000h, 000h, 0fch, 0c0h, 0c0h, 000h, 000h
+ db 000h, 000h, 000h, 0fch, 00ch, 00ch, 000h, 000h, 0c3h, 0c6h, 0cch, 0deh, 033h, 066h, 0cch, 00fh
+ db 0c3h, 0c6h, 0cch, 0dbh, 037h, 06fh, 0cfh, 003h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 000h
+ db 000h, 033h, 066h, 0cch, 066h, 033h, 000h, 000h, 000h, 0cch, 066h, 033h, 066h, 0cch, 000h, 000h
+ db 022h, 088h, 022h, 088h, 022h, 088h, 022h, 088h, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+ db 0dbh, 077h, 0dbh, 0eeh, 0dbh, 077h, 0dbh, 0eeh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h
+ db 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h
+ db 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h
+ db 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h
+ db 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h
+ db 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h
+ db 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h
+ db 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+ db 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h
+ db 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h
+ db 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 0c8h, 0dch, 076h, 000h, 000h, 078h, 0cch, 0f8h, 0cch, 0f8h, 0c0h, 0c0h
+ db 000h, 0fch, 0cch, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+ db 0fch, 0cch, 060h, 030h, 060h, 0cch, 0fch, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 070h, 000h
+ db 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 0c0h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 000h
+ db 0fch, 030h, 078h, 0cch, 0cch, 078h, 030h, 0fch, 038h, 06ch, 0c6h, 0feh, 0c6h, 06ch, 038h, 000h
+ db 038h, 06ch, 0c6h, 0c6h, 06ch, 06ch, 0eeh, 000h, 01ch, 030h, 018h, 07ch, 0cch, 0cch, 078h, 000h
+ db 000h, 000h, 07eh, 0dbh, 0dbh, 07eh, 000h, 000h, 006h, 00ch, 07eh, 0dbh, 0dbh, 07eh, 060h, 0c0h
+ db 038h, 060h, 0c0h, 0f8h, 0c0h, 060h, 038h, 000h, 078h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 000h
+ db 000h, 0fch, 000h, 0fch, 000h, 0fch, 000h, 000h, 030h, 030h, 0fch, 030h, 030h, 000h, 0fch, 000h
+ db 060h, 030h, 018h, 030h, 060h, 000h, 0fch, 000h, 018h, 030h, 060h, 030h, 018h, 000h, 0fch, 000h
+ db 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 070h
+ db 030h, 030h, 000h, 0fch, 000h, 030h, 030h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h
+ db 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
+ db 078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc5d6c LB 0x2160 -> off=0x0 cb=0000000000000e00 uValue=00000000000c15ec 'vgafont14'
+vgafont14: ; 0xc5d6c LB 0xe00
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
+ db 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
+ db 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch
+ db 038h, 010h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h
+ db 03ch, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 01eh, 00eh, 01ah, 032h
+ db 078h, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 066h, 066h, 03ch, 018h
+ db 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 070h, 0f0h
+ db 0e0h, 000h, 000h, 000h, 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 080h, 0c0h, 0e0h, 0f8h, 0feh, 0f8h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h, 000h
+ db 002h, 006h, 00eh, 03eh, 0feh, 03eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch
+ db 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h
+ db 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh
+ db 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h
+ db 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 000h
+ db 000h, 000h, 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 030h, 060h
+ db 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h
+ db 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 03ch, 03ch, 03ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 066h, 066h, 066h
+ db 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch
+ db 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h
+ db 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 066h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h, 000h
+ db 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+ db 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+ db 000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0ceh, 0deh, 0f6h, 0e6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h
+ db 006h, 00ch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 006h, 006h
+ db 03ch, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh
+ db 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 07ch, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0c6h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h, 000h, 000h, 018h
+ db 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h
+ db 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h
+ db 018h, 00ch, 006h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h
+ db 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h, 0fch, 066h
+ db 066h, 066h, 07ch, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h
+ db 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h
+ db 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 062h, 066h
+ db 0feh, 000h, 000h, 000h, 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 066h, 03ah, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 01eh, 00ch
+ db 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h, 000h, 0e6h, 066h, 06ch, 06ch
+ db 078h, 06ch, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h
+ db 062h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h
+ db 000h, 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h
+ db 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h, 000h, 000h, 0fch, 066h
+ db 066h, 066h, 07ch, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 060h
+ db 038h, 00ch, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h
+ db 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 07ch, 06ch, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h
+ db 08ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 03ch, 030h, 030h, 030h
+ db 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch
+ db 00eh, 006h, 002h, 000h, 000h, 000h, 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch
+ db 03ch, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0e0h, 060h
+ db 060h, 078h, 06ch, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+ db 0c6h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch
+ db 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 006h, 006h
+ db 000h, 00eh, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h, 000h, 000h, 0e0h, 060h, 060h, 066h
+ db 06ch, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h
+ db 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0dch, 076h, 066h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch
+ db 0c6h, 070h, 01ch, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h
+ db 030h, 036h, 01ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch
+ db 076h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0feh, 0cch, 018h, 030h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h, 00eh, 018h, 018h, 018h
+ db 070h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h
+ db 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h, 000h
+ db 0cch, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h
+ db 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 078h
+ db 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 000h, 078h, 00ch, 07ch
+ db 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch
+ db 076h, 000h, 000h, 000h, 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 0cch, 0cch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h
+ db 000h, 07ch, 0c6h, 0feh, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 000h, 038h
+ db 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h
+ db 03ch, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h
+ db 000h, 000h, 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 066h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h, 000h, 03eh, 06ch
+ db 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 000h, 07ch
+ db 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h, 07ch, 0c6h, 0c6h
+ db 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h
+ db 07ch, 000h, 000h, 000h, 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h
+ db 000h, 000h, 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h, 000h, 0c6h
+ db 0c6h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 000h
+ db 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 018h, 03ch, 066h, 060h
+ db 060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h
+ db 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h
+ db 018h, 000h, 000h, 000h, 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0c6h, 000h
+ db 000h, 000h, 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 00ch
+ db 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h
+ db 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 018h, 030h, 060h, 000h, 0cch
+ db 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h
+ db 066h, 066h, 066h, 000h, 000h, 000h, 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h
+ db 0c6h, 000h, 000h, 000h, 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h
+ db 030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h, 0c0h, 0c0h, 0c6h, 0cch, 0d8h, 030h, 066h
+ db 0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h, 000h, 018h, 018h, 000h, 018h, 018h, 03ch, 03ch, 03ch
+ db 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h
+ db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 055h, 0aah
+ db 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 0ddh, 077h, 0ddh, 077h
+ db 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 036h, 036h
+ db 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0feh
+ db 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h
+ db 018h, 018h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h
+ db 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 0f0h, 0f0h, 0f0h, 0f0h, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+ db 00fh, 00fh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0fch, 0c6h, 0c6h, 0fch, 0c0h, 0c0h, 040h, 000h, 000h, 000h, 0feh, 0c6h
+ db 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 06ch
+ db 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h
+ db 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h, 000h
+ db 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 038h, 06ch
+ db 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h, 000h, 01eh, 030h, 018h, 00ch
+ db 03eh, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh
+ db 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h
+ db 0c0h, 000h, 000h, 000h, 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 030h, 01ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 030h, 018h
+ db 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00ch, 018h, 030h, 060h
+ db 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h
+ db 070h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 00ch
+ db 00ch, 0ech, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc6b6c LB 0x1360 -> off=0x0 cb=0000000000001000 uValue=00000000000c23ec 'vgafont16'
+vgafont16: ; 0xc6b6c LB 0x1000
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 03ch, 03ch, 0e7h, 0e7h, 0e7h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 03ch, 07eh, 0ffh, 0ffh, 07eh, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 018h, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0e7h, 0c3h, 0c3h, 0e7h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 03ch, 066h, 042h, 042h, 066h, 03ch, 000h, 000h, 000h, 000h, 000h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0c3h, 099h, 0bdh, 0bdh, 099h, 0c3h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 01eh, 00eh, 01ah, 032h, 078h, 0cch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 066h, 066h, 066h, 03ch, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03fh, 033h, 03fh, 030h, 030h, 030h, 030h, 070h, 0f0h, 0e0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07fh, 063h, 07fh, 063h, 063h, 063h, 063h, 067h, 0e7h, 0e6h, 0c0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 018h, 018h, 0dbh, 03ch, 0e7h, 03ch, 0dbh, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 080h, 0c0h, 0e0h, 0f0h, 0f8h, 0feh, 0f8h, 0f0h, 0e0h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 002h, 006h, 00eh, 01eh, 03eh, 0feh, 03eh, 01eh, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07fh, 0dbh, 0dbh, 0dbh, 07bh, 01bh, 01bh, 01bh, 01bh, 01bh, 000h, 000h, 000h, 000h
+ db 000h, 07ch, 0c6h, 060h, 038h, 06ch, 0c6h, 0c6h, 06ch, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0feh, 0feh, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 07eh, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 07eh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 018h, 00ch, 0feh, 00ch, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 030h, 060h, 0feh, 060h, 030h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0c0h, 0c0h, 0c0h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 028h, 06ch, 0feh, 06ch, 028h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 038h, 07ch, 07ch, 0feh, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 0feh, 07ch, 07ch, 038h, 038h, 010h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 03ch, 03ch, 03ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 066h, 066h, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 06ch, 06ch, 0feh, 06ch, 06ch, 06ch, 0feh, 06ch, 06ch, 000h, 000h, 000h, 000h
+ db 018h, 018h, 07ch, 0c6h, 0c2h, 0c0h, 07ch, 006h, 006h, 086h, 0c6h, 07ch, 018h, 018h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0c2h, 0c6h, 00ch, 018h, 030h, 060h, 0c6h, 086h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 06ch, 038h, 076h, 0dch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 030h, 030h, 030h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 018h, 030h, 030h, 030h, 030h, 030h, 030h, 018h, 00ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 018h, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 018h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 066h, 03ch, 0ffh, 03ch, 066h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 018h, 030h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 002h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 080h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0d6h, 0d6h, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 038h, 078h, 018h, 018h, 018h, 018h, 018h, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 006h, 00ch, 018h, 030h, 060h, 0c0h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 006h, 006h, 03ch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00ch, 01ch, 03ch, 06ch, 0cch, 0feh, 00ch, 00ch, 00ch, 01eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0fch, 006h, 006h, 006h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 060h, 0c0h, 0c0h, 0fch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 006h, 006h, 00ch, 018h, 030h, 030h, 030h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 07eh, 006h, 006h, 006h, 00ch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 018h, 018h, 030h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 006h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 006h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 000h, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 060h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 060h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 00ch, 018h, 018h, 018h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0deh, 0deh, 0deh, 0dch, 0c0h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 066h, 066h, 066h, 066h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0f8h, 06ch, 066h, 066h, 066h, 066h, 066h, 066h, 06ch, 0f8h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 066h, 062h, 068h, 078h, 068h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0deh, 0c6h, 0c6h, 066h, 03ah, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01eh, 00ch, 00ch, 00ch, 00ch, 00ch, 0cch, 0cch, 0cch, 078h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0e6h, 066h, 066h, 06ch, 078h, 078h, 06ch, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0f0h, 060h, 060h, 060h, 060h, 060h, 060h, 062h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0eeh, 0feh, 0feh, 0d6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0deh, 07ch, 00ch, 00eh, 000h, 000h
+ db 000h, 000h, 0fch, 066h, 066h, 066h, 07ch, 06ch, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07ch, 0c6h, 0c6h, 060h, 038h, 00ch, 006h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 07eh, 07eh, 05ah, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 06ch, 038h, 010h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0d6h, 0d6h, 0d6h, 0feh, 0eeh, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 0c6h, 06ch, 07ch, 038h, 038h, 07ch, 06ch, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 066h, 066h, 03ch, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 086h, 00ch, 018h, 030h, 060h, 0c2h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 030h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 080h, 0c0h, 0e0h, 070h, 038h, 01ch, 00eh, 006h, 002h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 00ch, 03ch, 000h, 000h, 000h, 000h
+ db 010h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h
+ db 030h, 030h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 078h, 06ch, 066h, 066h, 066h, 066h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c0h, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01ch, 00ch, 00ch, 03ch, 06ch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 0cch, 078h, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 06ch, 076h, 066h, 066h, 066h, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 006h, 006h, 000h, 00eh, 006h, 006h, 006h, 006h, 006h, 006h, 066h, 066h, 03ch, 000h
+ db 000h, 000h, 0e0h, 060h, 060h, 066h, 06ch, 078h, 078h, 06ch, 066h, 0e6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ech, 0feh, 0d6h, 0d6h, 0d6h, 0d6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0f0h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0cch, 0cch, 0cch, 0cch, 0cch, 07ch, 00ch, 00ch, 01eh, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0dch, 076h, 066h, 060h, 060h, 060h, 0f0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07ch, 0c6h, 060h, 038h, 00ch, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 010h, 030h, 030h, 0fch, 030h, 030h, 030h, 030h, 036h, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0d6h, 0d6h, 0d6h, 0feh, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 06ch, 038h, 038h, 038h, 06ch, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 0f8h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 0cch, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00eh, 018h, 018h, 018h, 070h, 018h, 018h, 018h, 018h, 00eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 018h, 018h, 000h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 070h, 018h, 018h, 018h, 00eh, 018h, 018h, 018h, 018h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03ch, 066h, 0c2h, 0c0h, 0c0h, 0c0h, 0c2h, 066h, 03ch, 00ch, 006h, 07ch, 000h, 000h
+ db 000h, 000h, 0cch, 000h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 00ch, 018h, 030h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0cch, 000h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 038h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 03ch, 066h, 060h, 060h, 066h, 03ch, 00ch, 006h, 03ch, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0feh, 0c0h, 0c0h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 000h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 03ch, 066h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 0c6h, 000h, 010h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 038h, 06ch, 038h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 018h, 030h, 060h, 000h, 0feh, 066h, 060h, 07ch, 060h, 060h, 066h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0cch, 076h, 036h, 07eh, 0d8h, 0d8h, 06eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 03eh, 06ch, 0cch, 0cch, 0feh, 0cch, 0cch, 0cch, 0cch, 0ceh, 000h, 000h, 000h, 000h
+ db 000h, 010h, 038h, 06ch, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 030h, 078h, 0cch, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 060h, 030h, 018h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0c6h, 000h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07eh, 006h, 00ch, 078h, 000h
+ db 000h, 0c6h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 0c6h, 000h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 018h, 03ch, 066h, 060h, 060h, 060h, 066h, 03ch, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 064h, 060h, 0f0h, 060h, 060h, 060h, 060h, 0e6h, 0fch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 066h, 066h, 03ch, 018h, 07eh, 018h, 07eh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 0f8h, 0cch, 0cch, 0f8h, 0c4h, 0cch, 0deh, 0cch, 0cch, 0cch, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 00eh, 01bh, 018h, 018h, 018h, 07eh, 018h, 018h, 018h, 018h, 018h, 0d8h, 070h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 078h, 00ch, 07ch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 00ch, 018h, 030h, 000h, 038h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 018h, 030h, 060h, 000h, 0cch, 0cch, 0cch, 0cch, 0cch, 0cch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 076h, 0dch, 000h, 0dch, 066h, 066h, 066h, 066h, 066h, 066h, 000h, 000h, 000h, 000h
+ db 076h, 0dch, 000h, 0c6h, 0e6h, 0f6h, 0feh, 0deh, 0ceh, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 03ch, 06ch, 06ch, 03eh, 000h, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 07ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 030h, 030h, 000h, 030h, 030h, 060h, 0c0h, 0c6h, 0c6h, 07ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 006h, 006h, 006h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0dch, 086h, 00ch, 018h, 03eh, 000h, 000h
+ db 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 09eh, 03eh, 006h, 006h, 000h, 000h
+ db 000h, 000h, 018h, 018h, 000h, 018h, 018h, 018h, 03ch, 03ch, 03ch, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 036h, 06ch, 0d8h, 06ch, 036h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0d8h, 06ch, 036h, 06ch, 0d8h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h, 011h, 044h
+ db 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah, 055h, 0aah
+ db 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h, 0ddh, 077h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0feh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0feh, 006h, 0f6h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 0f6h, 006h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0feh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 0f8h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f8h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 03fh, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 037h, 030h, 037h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 0f7h, 000h, 0f7h, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 0ffh, 000h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 03fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 018h, 018h, 018h, 018h, 018h, 01fh, 018h, 01fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 03fh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 036h, 036h, 036h, 036h, 036h, 036h, 036h, 0ffh, 036h, 036h, 036h, 036h, 036h, 036h, 036h, 036h
+ db 018h, 018h, 018h, 018h, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 01fh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh
+ db 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h, 0f0h
+ db 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh, 00fh
+ db 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 0d8h, 0d8h, 0d8h, 0dch, 076h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 078h, 0cch, 0cch, 0cch, 0d8h, 0cch, 0c6h, 0c6h, 0c6h, 0cch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 0feh, 0c6h, 0c6h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 0c0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 0feh, 0c6h, 060h, 030h, 018h, 030h, 060h, 0c6h, 0feh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 0d8h, 0d8h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 066h, 066h, 066h, 066h, 066h, 07ch, 060h, 060h, 0c0h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 076h, 0dch, 018h, 018h, 018h, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07eh, 018h, 03ch, 066h, 066h, 066h, 03ch, 018h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0feh, 0c6h, 0c6h, 06ch, 038h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 038h, 06ch, 0c6h, 0c6h, 0c6h, 06ch, 06ch, 06ch, 06ch, 0eeh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01eh, 030h, 018h, 00ch, 03eh, 066h, 066h, 066h, 066h, 03ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 07eh, 0dbh, 0dbh, 0dbh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 003h, 006h, 07eh, 0dbh, 0dbh, 0f3h, 07eh, 060h, 0c0h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 01ch, 030h, 060h, 060h, 07ch, 060h, 060h, 060h, 030h, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 07ch, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 0c6h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 0feh, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 07eh, 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 030h, 018h, 00ch, 006h, 00ch, 018h, 030h, 000h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 00ch, 018h, 030h, 060h, 030h, 018h, 00ch, 000h, 07eh, 000h, 000h, 000h, 000h
+ db 000h, 000h, 00eh, 01bh, 01bh, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h
+ db 018h, 018h, 018h, 018h, 018h, 018h, 018h, 018h, 0d8h, 0d8h, 0d8h, 070h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 018h, 018h, 000h, 07eh, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 076h, 0dch, 000h, 076h, 0dch, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 038h, 06ch, 06ch, 038h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 00fh, 00ch, 00ch, 00ch, 00ch, 00ch, 0ech, 06ch, 06ch, 03ch, 01ch, 000h, 000h, 000h, 000h
+ db 000h, 0d8h, 06ch, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7b6c LB 0x360 -> off=0x0 cb=000000000000012d uValue=00000000000c33ec 'vgafont14alt'
+vgafont14alt: ; 0xc7b6c LB 0x12d
+ db 01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
+ db 000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
+ db 000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
+ db 000h, 000h, 000h, 000h, 0ffh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 04dh, 000h, 000h, 0c3h
+ db 0e7h, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh
+ db 099h, 018h, 018h, 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h
+ db 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h
+ db 0dbh, 0dbh, 0ffh, 066h, 066h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 03ch, 066h, 0c3h, 0c3h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 018h, 018h, 03ch, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h, 030h, 061h
+ db 0c3h, 0ffh, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h, 0ffh, 0dbh, 0dbh, 0dbh
+ db 0dbh, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h, 000h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h
+ db 000h, 000h, 091h, 000h, 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h
+ db 000h, 09bh, 000h, 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h
+ db 09dh, 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 000h, 000h, 000h, 09eh
+ db 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
+ db 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
+ db 018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7c99 LB 0x233 -> off=0x0 cb=0000000000000144 uValue=00000000000c3519 'vgafont16alt'
+vgafont16alt: ; 0xc7c99 LB 0x144
+ db 01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
+ db 000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
+ db 000h, 000h, 000h, 054h, 000h, 000h, 0ffh, 0dbh, 099h, 018h, 018h, 018h, 018h, 018h, 018h, 03ch
+ db 000h, 000h, 000h, 000h, 056h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch
+ db 018h, 000h, 000h, 000h, 000h, 057h, 000h, 000h, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh
+ db 066h, 066h, 000h, 000h, 000h, 000h, 058h, 000h, 000h, 0c3h, 0c3h, 066h, 03ch, 018h, 018h, 03ch
+ db 066h, 0c3h, 0c3h, 000h, 000h, 000h, 000h, 059h, 000h, 000h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h
+ db 018h, 018h, 018h, 03ch, 000h, 000h, 000h, 000h, 05ah, 000h, 000h, 0ffh, 0c3h, 086h, 00ch, 018h
+ db 030h, 060h, 0c1h, 0c3h, 0ffh, 000h, 000h, 000h, 000h, 06dh, 000h, 000h, 000h, 000h, 000h, 0e6h
+ db 0ffh, 0dbh, 0dbh, 0dbh, 0dbh, 0dbh, 000h, 000h, 000h, 000h, 076h, 000h, 000h, 000h, 000h, 000h
+ db 0c3h, 0c3h, 0c3h, 0c3h, 066h, 03ch, 018h, 000h, 000h, 000h, 000h, 077h, 000h, 000h, 000h, 000h
+ db 000h, 0c3h, 0c3h, 0c3h, 0dbh, 0dbh, 0ffh, 066h, 000h, 000h, 000h, 000h, 078h, 000h, 000h, 000h
+ db 000h, 000h, 0c3h, 066h, 03ch, 018h, 03ch, 066h, 0c3h, 000h, 000h, 000h, 000h, 091h, 000h, 000h
+ db 000h, 000h, 000h, 06eh, 03bh, 01bh, 07eh, 0d8h, 0dch, 077h, 000h, 000h, 000h, 000h, 09bh, 000h
+ db 018h, 018h, 07eh, 0c3h, 0c0h, 0c0h, 0c0h, 0c3h, 07eh, 018h, 018h, 000h, 000h, 000h, 000h, 09dh
+ db 000h, 000h, 0c3h, 066h, 03ch, 018h, 0ffh, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h
+ db 09eh, 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 066h, 0f3h, 000h, 000h, 000h
+ db 000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
+ db 000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
+ db 006h, 000h, 000h, 000h
+ ; disGetNextSymbol 0xc7ddd LB 0xef -> off=0x0 cb=0000000000000008 uValue=00000000000c365d '_cga_msr'
+_cga_msr: ; 0xc7ddd LB 0x8
+ db 02ch, 028h, 02dh, 029h, 02ah, 02eh, 01eh, 029h
+ ; disGetNextSymbol 0xc7de5 LB 0xe7 -> off=0x0 cb=0000000000000008 uValue=00000000000c3665 'line_to_vpti_200'
+line_to_vpti_200: ; 0xc7de5 LB 0x8
+ db 000h, 001h, 002h, 003h, 0ffh, 0ffh, 0ffh, 007h
+ ; disGetNextSymbol 0xc7ded LB 0xdf -> off=0x0 cb=0000000000000008 uValue=00000000000c366d 'line_to_vpti_350'
+line_to_vpti_350: ; 0xc7ded LB 0x8
+ db 013h, 014h, 015h, 016h, 0ffh, 0ffh, 0ffh, 007h
+ ; disGetNextSymbol 0xc7df5 LB 0xd7 -> off=0x0 cb=0000000000000008 uValue=00000000000c3675 'line_to_vpti_400'
+line_to_vpti_400: ; 0xc7df5 LB 0x8
+ db 017h, 017h, 018h, 018h, 0ffh, 0ffh, 0ffh, 019h
+ ; disGetNextSymbol 0xc7dfd LB 0xcf -> off=0x0 cb=0000000000000005 uValue=00000000000c367d 'row_tbl'
+row_tbl: ; 0xc7dfd LB 0x5
+ db 000h, 00eh, 019h, 02bh, 000h
+ ; disGetNextSymbol 0xc7e02 LB 0xca -> off=0x0 cb=0000000000000015 uValue=00000000000c3682 '_vbebios_copyright'
+_vbebios_copyright: ; 0xc7e02 LB 0x15
+ db 'VirtualBox VESA BIOS', 000h
+ ; disGetNextSymbol 0xc7e17 LB 0xb5 -> off=0x0 cb=000000000000001d uValue=00000000000c3697 '_vbebios_vendor_name'
+_vbebios_vendor_name: ; 0xc7e17 LB 0x1d
+ db 'Oracle and/or its affiliates', 000h
+ ; disGetNextSymbol 0xc7e34 LB 0x98 -> off=0x0 cb=0000000000000021 uValue=00000000000c36b4 '_vbebios_product_name'
+_vbebios_product_name: ; 0xc7e34 LB 0x21
+ db 'Oracle VM VirtualBox VBE Adapter', 000h
+ ; disGetNextSymbol 0xc7e55 LB 0x77 -> off=0x0 cb=0000000000000023 uValue=00000000000c36d5 '_vbebios_product_revision'
+_vbebios_product_revision: ; 0xc7e55 LB 0x23
+ db 'Oracle VM VirtualBox Version 7.0.6', 000h
+ ; disGetNextSymbol 0xc7e78 LB 0x54 -> off=0x0 cb=000000000000002b uValue=00000000000c36f8 '_vbebios_info_string'
+_vbebios_info_string: ; 0xc7e78 LB 0x2b
+ db 'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
+ ; disGetNextSymbol 0xc7ea3 LB 0x29 -> off=0x0 cb=0000000000000029 uValue=00000000000c3723 '_no_vbebios_info_string'
+_no_vbebios_info_string: ; 0xc7ea3 LB 0x29
+ db 'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
+
+section CONST progbits vstart=0x7ecc align=1 ; size=0x0 class=DATA group=DGROUP
+
+section CONST2 progbits vstart=0x7ecc align=1 ; size=0x0 class=DATA group=DGROUP
+
+ ; Padding 0x134 bytes at 0xc7ecc
+ db 001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
+ db 065h, 02fh, 073h, 062h, 075h, 072h, 063h, 068h, 069h, 06ch, 02fh, 076h, 062h, 05fh, 073h, 072h
+ db 063h, 02fh, 074h, 072h, 075h, 06eh, 06bh, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h
+ db 078h, 02eh, 061h, 06dh, 064h, 036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh
+ db 06fh, 062h, 06ah, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h
+ db 030h, 038h, 036h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 038h
+ db 030h, 038h, 036h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+ db 000h, 000h, 000h, 066h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
new file mode 100644
index 00000000..8135b83f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative8086.md5sum
@@ -0,0 +1 @@
+183d9c40533de3c3bf005b16c06a2c16 *VBoxVgaBios8086.rom
diff --git a/src/VBox/Devices/Graphics/BIOS/inlines.h b/src/VBox/Devices/Graphics/BIOS/inlines.h
new file mode 100644
index 00000000..9780d431
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/inlines.h
@@ -0,0 +1,180 @@
+/** @file
+ * Inline routines for Watcom C.
+ */
+
+/*
+ * Copyright (C) 2010-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_BIOS_inlines_h
+#define VBOX_INCLUDED_SRC_Graphics_BIOS_inlines_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+extern unsigned inp(unsigned port);
+extern unsigned outp(unsigned port, unsigned value);
+extern unsigned inpw(unsigned port);
+extern unsigned outpw(unsigned port, unsigned value);
+#pragma intrinsic(inp,outp,inpw,outpw)
+#define inb(p) inp(p)
+#define outb(p, v) outp(p, v)
+#define inw(p) inpw(p)
+#define outw(p, v) outpw(p, v)
+
+/* Far byte/word/dword access routines. */
+
+inline uint8_t read_byte(uint16_t seg, uint16_t offset)
+{
+ return( *(seg:>(uint8_t *)offset) );
+}
+
+inline void write_byte(uint16_t seg, uint16_t offset, uint8_t data)
+{
+ *(seg:>(uint8_t *)offset) = data;
+}
+
+inline uint16_t read_word(uint16_t seg, uint16_t offset)
+{
+ return( *(seg:>(uint16_t *)offset) );
+}
+
+inline void write_word(uint16_t seg, uint16_t offset, uint16_t data)
+{
+ *(seg:>(uint16_t *)offset) = data;
+}
+
+inline uint32_t read_dword(uint16_t seg, uint16_t offset)
+{
+ return( *(seg:>(uint32_t *)offset) );
+}
+
+inline void write_dword(uint16_t seg, uint16_t offset, uint32_t data)
+{
+ *(seg:>(uint32_t *)offset) = data;
+}
+
+void int_enable(void);
+#pragma aux int_enable = "sti" modify exact [] nomemory;
+
+void int_disable(void);
+#pragma aux int_disable = "cli" modify exact [] nomemory;
+
+uint16_t int_query(void);
+#pragma aux int_query = \
+ "pushf" \
+ "pop ax" \
+ value [ax] modify exact [ax] nomemory;
+
+void int_restore(uint16_t old_flags);
+#pragma aux int_restore = \
+ "push ax" \
+ "popf" \
+ parm [ax] modify exact [] nomemory;
+
+void halt(void);
+#pragma aux halt = "hlt" modify exact [] nomemory;
+
+void halt_forever(void);
+#pragma aux halt_forever = \
+ "forever:" \
+ "hlt" \
+ "jmp forever" \
+ modify exact [] nomemory aborts;
+
+void rep_movsw(void __far *d, void __far *s, int nwords);
+#pragma aux rep_movsw = \
+ "push ds" \
+ "mov ds, dx" \
+ "rep movsw" \
+ "pop ds" \
+ parm [es di] [dx si] [cx];
+
+int repe_cmpsb(void __far *d, void __far *s, int nbytes);
+#pragma aux repe_cmpsb = \
+ "push ds" \
+ "mov ds, dx" \
+ "repe cmpsb" \
+ "pop ds" \
+ "mov ax, 0" \
+ "jz match" \
+ "inc al" \
+ "match:" \
+ parm [es di] [dx si] [cx] value [ax] modify nomemory;
+
+char __far *rep_insb(char __far *buffer, unsigned nbytes, unsigned port);
+#pragma aux rep_insb = ".286" "rep insb" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
+
+char __far *rep_insw(char __far *buffer, unsigned nwords, unsigned port);
+#pragma aux rep_insw = ".286" "rep insw" parm [es di] [cx] [dx] value [es di] modify exact [cx di];
+
+char __far *rep_outsb(char __far *buffer, unsigned nbytes, unsigned port);
+#pragma aux rep_outsb = ".286" "rep outs dx,byte ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
+
+char __far *rep_outsw(char __far *buffer, unsigned nwords, unsigned port);
+#pragma aux rep_outsw = ".286" "rep outs dx,word ptr es:[si]" parm [es si] [cx] [dx] value [es si] modify exact [cx si];
+
+uint16_t __far swap_16(uint16_t val);
+#pragma aux swap_16 = "xchg ah,al" parm [ax] value [ax] modify exact [ax] nomemory;
+
+uint32_t __far swap_32(uint32_t val);
+#pragma aux swap_32 = \
+ "xchg ah, al" \
+ "xchg dh, dl" \
+ "xchg ax, dx" \
+ parm [dx ax] value [dx ax] modify exact [dx ax] nomemory;
+
+extern void memsetb(uint16_t seg, uint16_t offset, uint16_t value, uint16_t count);
+#pragma aux memsetb = \
+ "jcxz no_copy" \
+ "rep stosb" \
+ "no_copy:" \
+ parm [es] [di] [ax] [cx];
+
+extern void memsetw(uint16_t seg, uint16_t offset, uint16_t value, uint16_t count);
+#pragma aux memsetw = \
+ "jcxz no_copy" \
+ "rep stosw" \
+ "no_copy:" \
+ parm [es] [di] [ax] [cx];
+
+extern void memcpyb(uint16_t dseg, uint16_t doffset, uint16_t sseg, uint16_t soffset, uint16_t count);
+#pragma aux memcpyb = \
+ "jcxz no_copy" \
+ "push ds" \
+ "mov ds, dx" \
+ "rep movsb" \
+ "pop ds" \
+ "no_copy:" \
+ parm [es] [di] [dx] [si] [cx];
+
+extern void memcpyw(uint16_t dseg, uint16_t doffset, uint16_t sseg, uint16_t soffset, uint16_t count);
+#pragma aux memcpyw = \
+ "jcxz no_copy" \
+ "push ds" \
+ "mov ds, dx" \
+ "rep movsw" \
+ "pop ds" \
+ "no_copy:" \
+ parm [es] [di] [dx] [si] [cx];
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_BIOS_inlines_h */
+
diff --git a/src/VBox/Devices/Graphics/BIOS/makefile b/src/VBox/Devices/Graphics/BIOS/makefile
new file mode 100644
index 00000000..0173ae56
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/makefile
@@ -0,0 +1,48 @@
+# Compiler flags:
+# -q no banner
+# -wx max warnings
+# -0 generate 8086 code
+# -ms force small model (default)
+# -s remove runtime stack checks (required)
+# -os optimize for size
+# -zu assume that SS != DS (required)
+# -zl do not emit default library information
+#
+!ifdef __UNIX__
+Q=\"
+!else
+Q="
+!endif
+CFLAGS = -q -3 -wx -zu -zl -s -oas -d1 -ms
+DEFS = -DVBOX -DVBE -DVBOX_VERSION_STRING=$(Q)0.9.90$(Q) -DVBOX_VENDOR=$(Q)Oracle_Corporation$(Q) -DVBOX_PRODUCT=$(Q)Oracle_VM_VirtualBox$(Q) -DVBOX_BIOS_CPU=80386
+#DEFS = -DVBOX -DVBOX_VERSION_STRING=$(Q)0.9$(Q) -DVBOX_VENDOR=$(Q)Oracle$(Q) -DVBOX_PRODUCT=$(Q)VirtualBox$(Q)
+
+AFLAGS = -q -0 -wx
+
+INCLS = -I$(Q)../../../../../include$(Q) -I$(Q)../../../../../include/VBox/Graphics$(Q)
+AINCS = -I$(Q)../../BiosCommonCode$(Q)
+
+.c.obj : .autodepend
+ wcc -fo=.obj $(CFLAGS) $(DEFS) $(INCLS) $<
+
+.asm.obj : .autodepend
+ wasm -fo=.obj $(AFLAGS) $(DEFS) $(AINCS) $<
+
+OBJS = vgarom.obj vberom.obj vgabios.obj vbe.obj
+
+vgabios.rom : vgabios.bin
+ biossums $< $@
+
+vgabios.bin : $(OBJS) $(__MAKEFILES__)
+ wlink name $@ system dos debug all option quiet &
+ option nofarcalls, map, verbose, statics, symfile &
+ output raw offset=0xC0000 order &
+ clname CODE segment VGAROM segaddr=0xC000 &
+ segment _TEXT segaddr=0xC000 offset=0xA00 &
+ segment VBE32 segaddr=0xC000 offset=0x4600 &
+ clname DATA segment _DATA segaddr=0xC000 offset=0x4800 &
+ file { $(OBJS) } disable 1014, 1023, 2120
+
+clean : .symbolic
+ @rm -f *.obj *.err
+ @rm -f vgabios.bin vgabios.rom vgabios.map vgabios.sym
diff --git a/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp b/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp
new file mode 100644
index 00000000..a4d5008d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/ose_logo.bmp
Binary files differ
diff --git a/src/VBox/Devices/Graphics/BIOS/tests/testbios.c b/src/VBox/Devices/Graphics/BIOS/tests/testbios.c
new file mode 100644
index 00000000..92295d1d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/tests/testbios.c
@@ -0,0 +1,353 @@
+/*
+ This is a little turbo C program that executes
+ several int10, and let you inspect the content
+ of the vgabios area
+
+ It is used to test the behavior of the vgabios
+*/
+
+#include <stdio.h>
+#include <dos.h>
+#include <conio.h>
+
+
+typedef unsigned char Bit8u;
+typedef unsigned short Bit16u;
+
+typedef struct
+{Bit8u initial;
+ Bit8u current;
+ Bit16u nbcols;
+ Bit16u regen;
+ Bit16u start;
+ Bit16u curpos[8];
+ Bit8u curtyp;
+ Bit8u curpage;
+ Bit16u crtc;
+ Bit16u msr;
+ Bit16u cgapal;
+ Bit8u nbrows;
+ Bit16u cheight;
+ Bit8u ctl;
+ Bit8u switches;
+ Bit8u modeset;
+ Bit8u dcc;
+ Bit16u vsseg;
+ Bit16u vsoffset;
+} BIOSAREA;
+
+void int10ax0003(struct REGPACK *regs)
+{
+ regs->r_ax=0x0003;
+ intr(0x10,regs);
+}
+
+void int10ax02(struct REGPACK *regs)
+{
+ regs->r_ax=0x0200;
+ regs->r_bx=0x0000;
+ regs->r_dx=0x1710;
+ intr(0x10,regs);
+ printf("We are now at 24/17");
+}
+
+void int10ax03(struct REGPACK *regs)
+{
+ regs->r_ax=0x0300;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+ printf("\nCursor is ax%04x cx%04x dx%04x\n",regs->r_ax,regs->r_cx,regs->r_dx);
+}
+
+void int10ax0501(struct REGPACK *regs)
+{
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x0e61;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+ printf("We are now on page 2");
+}
+
+void int10ax0602(struct REGPACK *regs)
+{
+ regs->r_ax=0x0602;
+ regs->r_bx=0x0700;
+ regs->r_cx=0x0101;
+ regs->r_dx=0x0a0a;
+ intr(0x10,regs);
+ printf("Scrolled 2 up");
+}
+
+void int10ax0702(struct REGPACK *regs)
+{
+ regs->r_ax=0x0702;
+ regs->r_bx=0x0700;
+ regs->r_cx=0x0101;
+ regs->r_dx=0x0a0a;
+ intr(0x10,regs);
+ printf("Scrolled 2 down");
+}
+
+void int10ax08(struct REGPACK *regs)
+{
+ regs->r_ax=0x0800;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+}
+
+void int10ax09(struct REGPACK *regs)
+{
+ char attr;
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ for(attr=0;attr<16;attr++)
+ {printf("%02x ",attr);
+ regs->r_ax=0x0961+attr;
+ regs->r_bx=0x0100+attr;
+ regs->r_cx=0x0016;
+ intr(0x10,regs);
+ printf("\n");
+ }
+}
+
+void int10ax0a(struct REGPACK *regs)
+{
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x0a62;
+ regs->r_bx=0x0101;
+ regs->r_cx=0x0016;
+ intr(0x10,regs);
+}
+
+void int10ax0f(struct REGPACK *regs)
+{
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x0f00;
+ intr(0x10,regs);
+}
+
+void int10ax1b(struct REGPACK *regs)
+{unsigned char table[64];
+ unsigned char far *ptable;
+ int i;
+
+ regs->r_ax=0x0501;
+ intr(0x10,regs);
+ regs->r_ax=0x1b00;
+ regs->r_bx=0x0000;
+ ptable=&table;
+ regs->r_es=FP_SEG(ptable);
+ regs->r_di=FP_OFF(ptable);
+ printf("Read state info in %04x:%04x\n",regs->r_es,regs->r_di);
+ intr(0x10,regs);
+
+ for(i=0;i<64;i++)
+ {if(i%16==0)printf("\n%02x ",i);
+ printf("%02x ",table[i]);
+ }
+ printf("\n");
+}
+
+static unsigned char var[64];
+
+void int10ax13(struct REGPACK *regs)
+{unsigned char far *pvar;
+
+ pvar=&var;
+
+ regs->r_ax=0x1300;
+ regs->r_bx=0x000b;
+ regs->r_dx=0x1010;
+ regs->r_cx=0x0002;
+ regs->r_es=FP_SEG(pvar);
+ regs->r_bp=FP_OFF(pvar);
+ pokeb(regs->r_es,regs->r_bp,'t');
+ pokeb(regs->r_es,regs->r_bp+1,'b');
+ printf("Writing from %04x:%04x\n",regs->r_es,regs->r_bp);
+ intr(0x10,regs);
+
+}
+
+void switch_50(struct REGPACK *regs)
+{
+ regs->r_ax=0x1202;
+ regs->r_bx=0x3000;
+ intr(0x10,regs);
+ regs->r_ax=0x0003;
+ intr(0x10,regs);
+ regs->r_ax=0x1112;
+ regs->r_bx=0x0000;
+ intr(0x10,regs);
+}
+
+char exec_function(struct REGPACK *regs)
+{char c;
+
+ printf("--- Functions --------------------\n");
+ printf("a. int10 ax0003\t");
+ printf("b. int10 ax02\t");
+ printf("c. int10 ax03\t");
+ printf("d. int10 ax0501\n");
+ printf("e. int10 ax0602\t");
+ printf("f. int10 ax0702\t");
+ printf("g. int10 ax08\t");
+ printf("h. int10 ax09\t");
+ printf("i. int10 ax0a\n");
+ printf("j. int10 ax0f\t");
+ printf("k. int10 ax1b\t");
+ printf("l. int10 ax13\n");
+ printf("q. Quit\t");
+ printf("r. switch to 50 lines\n");
+ c=getche();
+
+ switch(c)
+ {case 'a':
+ int10ax0003(regs);
+ break;
+ case 'b':
+ int10ax02(regs);
+ break;
+ case 'c':
+ int10ax03(regs);
+ break;
+ case 'd':
+ int10ax0501(regs);
+ break;
+ case 'e':
+ int10ax0602(regs);
+ break;
+ case 'f':
+ int10ax0702(regs);
+ break;
+ case 'g':
+ int10ax08(regs);
+ break;
+ case 'h':
+ int10ax09(regs);
+ break;
+ case 'i':
+ int10ax0a(regs);
+ break;
+ case 'j':
+ int10ax0f(regs);
+ break;
+ case 'k':
+ int10ax1b(regs);
+ break;
+ case 'l':
+ int10ax13(regs);
+ break;
+ case 'q':
+ break;
+ case 'r':
+ switch_50(regs);
+ break;
+ default:
+ printf("No such function!\n");
+ }
+
+ if(c=='q')return 1;
+ while(kbhit()==0);
+ c=getch();
+
+ return 0;
+}
+
+void read_bios_area(BIOSAREA *biosarea)
+{
+ biosarea->initial=peekb(0x40,0x10);
+ biosarea->current=peekb(0x40,0x49);
+ biosarea->nbcols=peek(0x40,0x4a);
+ biosarea->regen=peek(0x40,0x4c);
+ biosarea->start=peek(0x40,0x4e);
+ biosarea->curpos[0]=peek(0x40,0x50);
+ biosarea->curpos[1]=peek(0x40,0x52);
+ biosarea->curpos[2]=peek(0x40,0x54);
+ biosarea->curpos[3]=peek(0x40,0x56);
+ biosarea->curpos[4]=peek(0x40,0x58);
+ biosarea->curpos[5]=peek(0x40,0x5a);
+ biosarea->curpos[6]=peek(0x40,0x5c);
+ biosarea->curpos[7]=peek(0x40,0x5e);
+ biosarea->curtyp=peek(0x40,0x60);
+ biosarea->curpage=peekb(0x40,0x62);
+ biosarea->crtc=peek(0x40,0x63);
+ biosarea->msr=peekb(0x40,0x65);
+ biosarea->cgapal=peekb(0x40,0x66);
+ biosarea->nbrows=peekb(0x40,0x84);
+ biosarea->cheight=peek(0x40,0x85);
+ biosarea->ctl=peekb(0x40,0x87);
+ biosarea->switches=peekb(0x40,0x88);
+ biosarea->modeset=peekb(0x40,0x89);
+ biosarea->dcc=peekb(0x40,0x8a);
+ biosarea->vsseg=peek(0x40,0xa8);
+ biosarea->vsoffset=peek(0x40,0xaa);
+}
+
+void show_bios_area(BIOSAREA *biosarea)
+{
+ printf("--- BIOS area --------------------\n");
+ printf("initial : %02x\t",biosarea->initial);
+ printf("current : %02x\t",biosarea->current);
+ printf("nbcols : %04x\t",biosarea->nbcols);
+ printf("regen : %04x\t",biosarea->regen);
+ printf("start : %04x\n",biosarea->start);
+ printf("curpos : %04x %04x %04x %04x %04x %04x %04x %04x\n",
+ biosarea->curpos[0], biosarea->curpos[1], biosarea->curpos[2], biosarea->curpos[3],
+ biosarea->curpos[4], biosarea->curpos[5], biosarea->curpos[6], biosarea->curpos[7]);
+ printf("curtyp : %04x\t",biosarea->curtyp);
+ printf("curpage : %02x\t",biosarea->curpage);
+ printf("crtc : %04x\t",biosarea->crtc);
+ printf("msr : %04x\n",biosarea->msr);
+ printf("cgapal : %04x\t",biosarea->cgapal);
+ printf("nbrows-1: %02x\t",biosarea->nbrows);
+ printf("cheight : %04x\t",biosarea->cheight);
+ printf("ctl : %02x\n",biosarea->ctl);
+ printf("switches: %02x\t",biosarea->switches);
+ printf("modeset : %02x\t",biosarea->modeset);
+ printf("dcc : %02x\t",biosarea->dcc);
+ printf("vs : %04x:%04x\n",biosarea->vsseg,biosarea->vsoffset);
+}
+
+void show_regs(struct REGPACK *regs)
+{
+ printf("--- Registers --------------------\n");
+ printf("ax %04x\t",regs->r_ax);
+ printf("bx %04x\t",regs->r_bx);
+ printf("cx %04x\t",regs->r_cx);
+ printf("dx %04x\t",regs->r_dx);
+ printf("ds %04x\t",regs->r_ds);
+ printf("si %04x\t",regs->r_si);
+ printf("es %04x\t",regs->r_es);
+ printf("di %04x\n",regs->r_di);
+}
+
+void reset_videomode()
+{
+ struct REGPACK regs;
+
+ regs.r_ax=0x0003;
+ intr(0x10,&regs);
+}
+
+void main()
+{
+
+ BIOSAREA biosarea;
+ struct REGPACK regs;
+
+ directvideo=0;
+
+ while(1)
+ {
+ read_bios_area(&biosarea);
+
+ reset_videomode();
+ show_bios_area(&biosarea);
+ show_regs(&regs);
+
+ if(exec_function(&regs)!=0)break;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/BIOS/vbe.c b/src/VBox/Devices/Graphics/BIOS/vbe.c
new file mode 100644
index 00000000..066c2cb0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vbe.c
@@ -0,0 +1,816 @@
+// ============================================================================================
+//
+// Copyright (C) 2002 Jeroen Janssen
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// ============================================================================================
+//
+// This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+// You can NOT drive any physical vga card with it.
+//
+// ============================================================================================
+//
+// This VBE Bios is based on information taken from :
+// - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+//
+// ============================================================================================
+
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <inttypes.h>
+#include <stddef.h>
+#include "vbe.h"
+#include "vgadefs.h"
+#include "inlines.h"
+
+// disable VESA/VBE2 check in vbe info
+//#define VBE2_NO_VESA_CHECK
+
+// use bytewise i/o (Longhorn beta issue, not in released Vista)
+#define VBE_BYTEWISE_IO
+
+#ifdef VBE_BYTEWISE_IO
+ extern void do_out_dx_ax();
+ #pragma aux do_out_dx_ax "*";
+ extern void out_w(uint16_t port, uint16_t value);
+ #pragma aux out_w = \
+ "call do_out_dx_ax" \
+ parm [dx] [ax] modify nomemory;
+ extern void do_in_ax_dx();
+ #pragma aux do_in_ax_dx "*";
+ extern uint16_t in_w(uint16_t port);
+ #pragma aux in_w = \
+ "call do_in_ax_dx" \
+ parm [dx] value [ax] modify nomemory;
+#else
+ #define out_w outw
+ #define in_w inw
+#endif
+
+
+/* VESA signatures as integer constants. */
+#define SIG_VBE2 0x32454256 /* 'VBE2' */
+#define SIG_VESA 0x41534556 /* 'VESA' */
+
+
+/* Implemented in assembler. */
+extern void __cdecl vga_compat_setup(void);
+extern void dispi_set_enable(uint16_t enable);
+extern void dispi_set_bank(uint16_t bank);
+extern uint16_t __cdecl dispi_get_max_bpp(void);
+extern void __cdecl dispi_set_bank_farcall(void);
+
+// The current OEM Software Revision of this VBE Bios
+#define VBE_OEM_SOFTWARE_REV 0x0003
+
+// FIXME: 'merge' these (c) etc strings with the vgabios.c strings?
+char vbebios_copyright[] = "VirtualBox VESA BIOS";
+char vbebios_vendor_name[] = VBOX_VENDOR;
+char vbebios_product_name[] = VBOX_PRODUCT " VBE Adapter";
+char vbebios_product_revision[] = VBOX_PRODUCT " Version " VBOX_VERSION_STRING;
+
+char vbebios_info_string[] = "VirtualBox VBE Display Adapter enabled\r\n\r\n";
+char no_vbebios_info_string[] = "No VirtualBox VBE support available!\r\n\r\n";
+
+#ifdef VGA_DEBUG
+char msg_vbe_init[] = "VirtualBox Version " VBOX_VERSION_STRING " VBE Display Adapter\r\n";
+#endif
+
+static void dispi_set_xres(uint16_t xres)
+{
+#ifdef VGA_DEBUG
+ printf("vbe_set_xres: %04x\n", xres);
+#endif
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
+ out_w(VBE_DISPI_IOPORT_DATA, xres);
+}
+
+static void dispi_set_yres(uint16_t yres)
+{
+#ifdef VGA_DEBUG
+ printf("vbe_set_yres: %04x\n", yres);
+#endif
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
+ out_w(VBE_DISPI_IOPORT_DATA, yres);
+}
+
+static uint16_t dispi_get_yres(void)
+{
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
+ return in_w(VBE_DISPI_IOPORT_DATA);
+}
+
+static void dispi_set_bpp(uint16_t bpp)
+{
+#ifdef VGA_DEBUG
+ printf("vbe_set_bpp: %02x\n", bpp);
+#endif
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
+ out_w(VBE_DISPI_IOPORT_DATA, bpp);
+}
+
+static uint16_t dispi_get_bpp(void)
+{
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
+ return in_w(VBE_DISPI_IOPORT_DATA);
+}
+
+static void dispi_set_virt_width(uint16_t vwidth)
+{
+#ifdef VGA_DEBUG
+ printf("vbe_set_virt_width: %04x\n", vwidth);
+#endif
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_VIRT_WIDTH);
+ out_w(VBE_DISPI_IOPORT_DATA, vwidth);
+}
+
+static uint16_t dispi_get_virt_width(void)
+{
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_VIRT_WIDTH);
+ return in_w(VBE_DISPI_IOPORT_DATA);
+}
+
+static uint16_t dispi_get_virt_height(void)
+{
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_VIRT_HEIGHT);
+ return in_w(VBE_DISPI_IOPORT_DATA);
+}
+
+uint16_t in_word(uint16_t port, uint16_t addr)
+{
+ outw(port, addr);
+ return inw(port);
+}
+
+uint8_t in_byte(uint16_t port, uint16_t addr)
+{
+ outw(port, addr);
+ return inb(port);
+}
+
+/* Display "chip" identification helpers. */
+static uint16_t dispi_get_id(void)
+{
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_ID);
+ return inw(VBE_DISPI_IOPORT_DATA);
+}
+
+static void dispi_set_id(uint16_t chip_id)
+{
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_ID);
+ outw(VBE_DISPI_IOPORT_DATA, chip_id);
+}
+
+/* VBE Init - Initialise the VESA BIOS Extension (VBE) support
+ * This function does a sanity check on the host side display code interface.
+ */
+void vbe_init(void)
+{
+ dispi_set_id(VBE_DISPI_ID0);
+ if (dispi_get_id() == VBE_DISPI_ID0) {
+ /* VBE support was detected. */
+ write_byte(BIOSMEM_SEG, BIOSMEM_VBE_FLAG, 1);
+ dispi_set_id(VBE_DISPI_ID4);
+ }
+#ifdef DEBUG_VGA
+ printf(msg_vbe_init);
+#endif
+}
+
+/* Find the offset of the desired mode, given its number. */
+static uint16_t mode_info_find_mode(uint16_t mode, Boolean using_lfb)
+{
+ uint16_t sig, vmode, attrs;
+ uint16_t cur_info_ofs; /* Current offset in mode list. */
+
+ /* Read and check the VBE Extra Data signature. */
+ sig = in_word(VBE_EXTRA_PORT, 0);
+ if (sig != VBEHEADER_MAGIC) {
+#ifdef DEBUG_VGA
+ printf("Signature NOT found! %x\n", sig);
+#endif
+ return 0;
+ }
+
+ /* The LFB may be disabled. If so, LFB modes must not be reported. */
+ if (using_lfb) {
+ uint16_t lfb_addr_hi;
+
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_FB_BASE_HI);
+ lfb_addr_hi = in_w(VBE_DISPI_IOPORT_DATA);
+ if (!lfb_addr_hi) {
+#ifdef DEBUG_VGA
+ printf("LFB disabled, LFB modes unavailable!\n");
+#endif
+ return 0;
+ }
+ }
+
+ cur_info_ofs = sizeof(VBEHeader);
+
+ vmode = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, mode)/*&cur_info->mode*/);
+ while (vmode != VBE_VESA_MODE_END_OF_LIST)
+ {
+ attrs = in_word(VBE_EXTRA_PORT, /*&cur_info->info.ModeAttributes*/cur_info_ofs + offsetof(ModeInfoListItem, info.ModeAttributes) );
+
+ if (vmode == mode)
+ {
+ if (!using_lfb)
+ return cur_info_ofs;
+ else if (attrs & VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE)
+ return cur_info_ofs;
+ else {
+ cur_info_ofs += sizeof(ModeInfoListItem);
+ vmode = in_word(VBE_EXTRA_PORT, /*&cur_info->mode*/cur_info_ofs + offsetof(ModeInfoListItem, mode));
+ }
+ } else {
+ cur_info_ofs += sizeof(ModeInfoListItem);
+ vmode = in_word(VBE_EXTRA_PORT, /*&cur_info->mode*/cur_info_ofs + offsetof(ModeInfoListItem, mode));
+ }
+ }
+ return 0;
+}
+
+#ifndef VBOX
+; VBE Display Info - Display information on screen about the VBE
+
+vbe_display_info:
+ call _vbe_has_vbe_display
+ test ax, ax
+ jz no_vbe_flag
+ mov ax, #0xc000
+ mov ds, ax
+ mov si, #_vbebios_info_string
+ jmp _display_string
+no_vbe_flag:
+ mov ax, #0xc000
+ mov ds, ax
+ mov si, #_no_vbebios_info_string
+ jmp _display_string
+#endif
+
+/** Function 00h - Return VBE Controller Information
+ *
+ * Input:
+ * AX = 4F00h
+ * ES:DI = Pointer to buffer in which to place VbeInfoBlock structure
+ * (VbeSignature should be VBE2 when VBE 2.0 information is desired and
+ * the info block is 512 bytes in size)
+ * Output:
+ * AX = VBE Return Status
+ *
+ */
+void vbe_biosfn_return_controller_information(uint16_t STACK_BASED *AX, uint16_t ES, uint16_t DI)
+{
+ uint16_t status;
+ uint16_t vbe2_info;
+ uint16_t cur_mode = 0;
+ uint16_t cur_ptr=34;
+ uint16_t cur_info_ofs;
+ uint16_t sig, vmode;
+ uint16_t max_bpp = dispi_get_max_bpp();
+ VbeInfoBlock __far *info_block;
+
+ info_block = ES :> (VbeInfoBlock *)DI;
+
+ /* Read VBE Extra Data signature */
+ sig = in_word(VBE_EXTRA_PORT, 0);
+ if (sig != VBEHEADER_MAGIC)
+ {
+ *AX = 0x0100;
+#ifdef DEBUG_VGA
+ printf("Signature NOT found\n");
+#endif
+ return;
+ }
+ cur_info_ofs = sizeof(VBEHeader);
+ status = *AX;
+
+#ifdef VGA_DEBUG
+ printf("VBE vbe_biosfn_return_vbe_info ES%x DI%x AX%x\n",ES,DI,status);
+#endif
+
+ vbe2_info = 0;
+
+ /* Don't use a local copy of VbeInfoBlock on the stack; it's too big.
+ * The Ubuntu 8.04 64 bits splash screen emulator can't handle this.
+ */
+#ifdef VBE2_NO_VESA_CHECK
+#else /* !VBE2_NO_VESA_CHECK */
+ // check for VBE2 signature
+ if (info_block->VbeSignature.Sig32 == SIG_VBE2 || info_block->VbeSignature.Sig32 == SIG_VESA)
+ {
+ vbe2_info = 1;
+#ifdef VGA_DEBUG
+ printf("VBE correct VESA/VBE2 signature found\n");
+#endif
+ }
+#endif /* !VBE2_NO_VESA_CHECK */
+
+ /* VBE Signature - the compiler will optimize this into something sane. */
+ info_block->VbeSignature.SigChr[0] = 'V';
+ info_block->VbeSignature.SigChr[1] = 'E';
+ info_block->VbeSignature.SigChr[2] = 'S';
+ info_block->VbeSignature.SigChr[3] = 'A';
+
+ /* VBE Version supported. */
+ info_block->VbeVersion = 0x0200; /* Version 2.0. */
+
+ /* OEM String. */
+ info_block->OemString.Ptr = &vbebios_copyright;
+
+ /* Capabilities if this implementation. */
+ info_block->Capabilities[0] = VBE_CAPABILITY_8BIT_DAC;
+ info_block->Capabilities[1] = 0;
+ info_block->Capabilities[2] = 0;
+ info_block->Capabilities[3] = 0;
+
+ /* Video mode list pointer (dynamically generated). */
+ info_block->VideoModePtr_Seg = ES;
+ info_block->VideoModePtr_Off = DI + 34;
+
+ /* Total controller memory in 64K units. */
+ info_block->TotalMemory = in_word(VBE_EXTRA_PORT, 0xffff);
+
+ if (vbe2_info)
+ {
+ /* OEM information. */
+ info_block->OemSoftwareRev = VBE_OEM_SOFTWARE_REV;
+ info_block->OemVendorName.Ptr = &vbebios_vendor_name;
+ info_block->OemProductName.Ptr = &vbebios_product_name;
+ info_block->OemProductRev.Ptr = &vbebios_product_revision;
+ }
+
+ do
+ {
+ uint8_t data_b;
+
+ data_b = in_byte(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.BitsPerPixel) /*&cur_info->info.BitsPerPixel*/);
+ if (data_b <= max_bpp)
+ {
+ vmode = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, mode)/*&cur_info->mode*/);
+#ifdef VGA_DEBUG
+ printf("VBE found mode %x => %x\n", vmode, cur_mode);
+#endif
+ write_word(ES, DI + cur_ptr, vmode);
+ cur_mode++;
+ cur_ptr+=2;
+ }
+ cur_info_ofs += sizeof(ModeInfoListItem);
+ vmode = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, mode)/*&cur_info->mode*/);
+ } while (vmode != VBE_VESA_MODE_END_OF_LIST);
+
+ // Add vesa mode list terminator
+ write_word(ES, DI + cur_ptr, vmode);
+ *AX = 0x004F;
+}
+
+/** Function 01h - Return VBE Mode Information
+ *
+ * Input:
+ * AX = 4F01h
+ * CX = Mode Number
+ * ES:DI = Pointer to buffer in which to place ModeInfoBlock structure
+ * Output:
+ * AX = VBE Return Status
+ *
+ */
+void vbe_biosfn_return_mode_information(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t ES, uint16_t DI)
+{
+ uint16_t result = 0x0100;
+ uint16_t cur_info_ofs;
+ Boolean using_lfb;
+ uint8_t win_attr;
+
+#ifdef VGA_DEBUG
+ printf("VBE vbe_biosfn_return_mode_information ES%x DI%x CX%x\n",ES,DI,CX);
+#endif
+
+ using_lfb = ((CX & VBE_MODE_LINEAR_FRAME_BUFFER) == VBE_MODE_LINEAR_FRAME_BUFFER);
+ CX = (CX & 0x1ff);
+
+ cur_info_ofs = mode_info_find_mode(CX, using_lfb);
+
+ if (cur_info_ofs) {
+ uint16_t i;
+#ifdef VGA_DEBUG
+ printf("VBE found mode %x\n",CX);
+#endif
+ memsetb(ES, DI, 0, 256); // The mode info size is fixed
+ for (i = 0; i < sizeof(ModeInfoBlockCompact); i++) {
+ uint8_t b;
+
+ b = in_byte(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info) + i/*(char *)(&(cur_info->info)) + i*/);
+ write_byte(ES, DI + i, b);
+ }
+ win_attr = read_byte(ES, DI + offsetof(ModeInfoBlock, WinAAttributes));
+ if (win_attr & VBE_WINDOW_ATTRIBUTE_RELOCATABLE) {
+ write_word(ES, DI + offsetof(ModeInfoBlock, WinFuncPtr), (uint16_t)(dispi_set_bank_farcall));
+ // If BIOS not at 0xC000 -> boom
+ write_word(ES, DI + offsetof(ModeInfoBlock, WinFuncPtr) + 2, 0xC000);
+ }
+ // Update the LFB physical address which may change at runtime
+ out_w(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_FB_BASE_HI);
+ write_word(ES, DI + offsetof(ModeInfoBlock, PhysBasePtr) + 2, in_w(VBE_DISPI_IOPORT_DATA));
+
+ result = 0x4f;
+ } else {
+#ifdef VGA_DEBUG
+ printf("VBE *NOT* found mode %x\n",CX);
+#endif
+ result = 0x100;
+ }
+
+ *AX = result;
+}
+
+/** Function 02h - Set VBE Mode
+ *
+ * Input:
+ * AX = 4F02h
+ * BX = Desired Mode to set
+ * ES:DI = Pointer to CRTCInfoBlock structure
+ * Output:
+ * AX = VBE Return Status
+ *
+ */
+void vbe_biosfn_set_mode(uint16_t STACK_BASED *AX, uint16_t BX, uint16_t ES, uint16_t DI)
+{
+ uint16_t result;
+ uint16_t cur_info_ofs;
+ Boolean using_lfb;
+ uint8_t no_clear;
+ uint8_t lfb_flag;
+
+ using_lfb = ((BX & VBE_MODE_LINEAR_FRAME_BUFFER) == VBE_MODE_LINEAR_FRAME_BUFFER);
+ lfb_flag = using_lfb ? VBE_DISPI_LFB_ENABLED : 0;
+ no_clear = ((BX & VBE_MODE_PRESERVE_DISPLAY_MEMORY) == VBE_MODE_PRESERVE_DISPLAY_MEMORY) ? VBE_DISPI_NOCLEARMEM : 0;
+
+ BX = (BX & 0x1ff);
+
+ // check for non vesa mode
+ if (BX < VBE_MODE_VESA_DEFINED)
+ {
+ uint8_t mode;
+
+ dispi_set_enable(VBE_DISPI_DISABLED);
+ // call the vgabios in order to set the video mode
+ // this allows for going back to textmode with a VBE call (some applications expect that to work)
+ mode = (BX & 0xff);
+ biosfn_set_video_mode(mode);
+ result = 0x4f;
+ goto leave;
+ }
+
+ cur_info_ofs = mode_info_find_mode(BX, using_lfb);
+
+ if (cur_info_ofs != 0)
+ {
+ uint16_t xres, yres;
+ uint8_t bpp;
+
+ xres = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.XResolution) /*&cur_info->info.XResolution*/);
+ yres = in_word(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.YResolution) /*&cur_info->info.YResolution*/);
+ bpp = in_byte(VBE_EXTRA_PORT, cur_info_ofs + offsetof(ModeInfoListItem, info.BitsPerPixel) /*&cur_info->info.BitsPerPixel*/);
+
+#ifdef VGA_DEBUG
+ printf("VBE found mode %x, setting:\n", BX);
+ printf("\txres%x yres%x bpp%x\n", xres, yres, bpp);
+#endif
+
+ // first disable current mode (when switching between vesa modi)
+ dispi_set_enable(VBE_DISPI_DISABLED);
+
+ if (bpp == 4)
+ {
+ biosfn_set_video_mode(0x6a);
+ }
+
+ dispi_set_bpp(bpp);
+ dispi_set_xres(xres);
+ dispi_set_yres(yres);
+ dispi_set_bank(0);
+ dispi_set_enable(VBE_DISPI_ENABLED | no_clear | lfb_flag);
+ vga_compat_setup();
+
+ write_word(BIOSMEM_SEG,BIOSMEM_VBE_MODE,BX);
+ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60 | no_clear));
+
+ result = 0x4f;
+ }
+ else
+ {
+#ifdef VGA_DEBUG
+ printf("VBE *NOT* found mode %x\n" , BX);
+#endif
+ result = 0x100;
+ }
+
+leave:
+ *AX = result;
+}
+
+uint16_t vbe_biosfn_read_video_state_size(void)
+{
+ return 9 * 2;
+}
+
+void vbe_biosfn_save_video_state(uint16_t ES, uint16_t BX)
+{
+ uint16_t enable, i;
+
+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+ enable = inw(VBE_DISPI_IOPORT_DATA);
+ write_word(ES, BX, enable);
+ BX += 2;
+ if (!(enable & VBE_DISPI_ENABLED))
+ return;
+ for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
+ if (i != VBE_DISPI_INDEX_ENABLE) {
+ outw(VBE_DISPI_IOPORT_INDEX, i);
+ write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));
+ BX += 2;
+ }
+ }
+}
+
+
+void vbe_biosfn_restore_video_state(uint16_t ES, uint16_t BX)
+{
+ uint16_t enable, i;
+
+ enable = read_word(ES, BX);
+ BX += 2;
+
+ if (!(enable & VBE_DISPI_ENABLED)) {
+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+ outw(VBE_DISPI_IOPORT_DATA, enable);
+ } else {
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
+ outw(VBE_DISPI_IOPORT_DATA, enable);
+
+ for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
+ outw(VBE_DISPI_IOPORT_INDEX, i);
+ outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
+ BX += 2;
+ }
+ }
+}
+
+/** Function 04h - Save/Restore State
+ *
+ * Input:
+ * AX = 4F04h
+ * DL = 00h Return Save/Restore State buffer size
+ * 01h Save State
+ * 02h Restore State
+ * CX = Requested states
+ * ES:BX = Pointer to buffer (if DL <> 00h)
+ * Output:
+ * AX = VBE Return Status
+ * BX = Number of 64-byte blocks to hold the state buffer (if DL=00h)
+ *
+ */
+void vbe_biosfn_save_restore_state(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t DX,
+ uint16_t ES, uint16_t STACK_BASED *BX)
+{
+ uint16_t result, val;
+
+ result = 0x004F;
+ switch(GET_DL()) {
+ case 0x00:
+ val = biosfn_read_video_state_size2(CX);
+#ifdef VGA_DEBUG
+ printf("VGA state size=%x\n", val);
+#endif
+ if (CX & 8)
+ val += vbe_biosfn_read_video_state_size();
+ *BX = (val + 63) / 64;
+ break;
+ case 0x01:
+ val = *BX;
+ val = biosfn_save_video_state(CX, ES, val);
+#ifdef VGA_DEBUG
+ printf("VGA save_state offset=%x\n", val);
+#endif
+ if (CX & 8)
+ vbe_biosfn_save_video_state(ES, val);
+ break;
+ case 0x02:
+ val = *BX;
+ val = biosfn_restore_video_state(CX, ES, val);
+#ifdef VGA_DEBUG
+ printf("VGA restore_state offset=%x\n", val);
+#endif
+ if (CX & 8)
+ vbe_biosfn_restore_video_state(ES, val);
+ break;
+ default:
+ // function failed
+ result = 0x100;
+ break;
+ }
+ *AX = result;
+}
+
+/** Function 06h - Set/Get Logical Scan Line Length
+ *
+ * Input:
+ * AX = 4F06h
+ * BL = 00h Set Scan Line Length in Pixels
+ * = 01h Get Scan Line Length
+ * = 02h Set Scan Line Length in Bytes
+ * = 03h Get Maximum Scan Line Length
+ * CX = If BL=00h Desired Width in Pixels
+ * If BL=02h Desired Width in Bytes
+ * (Ignored for Get Functions)
+ *
+ * Output:
+ * AX = VBE Return Status
+ * BX = Bytes Per Scan Line
+ * CX = Actual Pixels Per Scan Line (truncated to
+ * nearest complete pixel)
+ * DX = Maximum Number of Scan Lines
+ */
+void vbe_biosfn_get_set_scanline_length(uint16_t STACK_BASED *AX, uint16_t STACK_BASED *BX,
+ uint16_t STACK_BASED *CX, uint16_t STACK_BASED *DX)
+{
+ uint16_t val;
+ uint16_t result;
+ uint8_t bpp;
+ uint8_t subfn;
+ uint16_t old_vw;
+
+ bpp = dispi_get_bpp();
+ bpp = bpp == 15 ? 16 : bpp;
+ old_vw = dispi_get_virt_width();
+ result = 0x004F;
+ val = *CX;
+ subfn = *BX & 0xFF;
+#ifdef VGA_DEBUG
+ printf("VBE get/set scanline len fn=%x, CX=%x\n", subfn, *CX);
+#endif
+ switch(subfn) {
+ case 0x02:
+ if (bpp == 4)
+ val = val * 8;
+ else
+ val = val / (bpp / 8);
+ /* fall through */
+ case 0x00:
+ dispi_set_virt_width(val);
+ /* fall through */
+ case 0x01:
+ val = dispi_get_virt_width();
+ *CX = val; /* Width in pixels. */
+ if (bpp == 4)
+ val = val / 8;
+ else
+ val = val * (bpp / 8);
+ val = (val + 3) & ~3;
+ *BX = val; /* Bytes per scanline. */
+ *DX = dispi_get_virt_height(); /* Height in lines. */
+ if (*DX < dispi_get_yres()) {
+ dispi_set_virt_width(old_vw);
+ result = 0x200;
+ }
+ break;
+ default:
+ // function failed
+ result = 0x100;
+ break;
+ }
+ *AX = result;
+}
+
+
+/* We would very much like to avoid dragging in the long multiply library
+ * routine, and we really just need to multiply two 16-bit numbers to
+ * obtain a 32-bit result, so...
+ */
+uint32_t mul32_16x16(uint16_t a, uint16_t b);
+#pragma aux mul32_16x16 = \
+ "mul dx" \
+ parm [ax] [dx] modify nomemory;
+
+
+/** Private INT 10h function 5642h - Manage custom video modes using X/Y
+ * resolution and bit depth rather than mode number
+ *
+ * Input:
+ * AX = 5642h ('VB')
+ * BL = 00h Set video mode
+ * BH = If BL=00h Desired bit depth in pixels
+ * CX = If BL=00h Desired width in pixels
+ * DX = If BL=00h Desired height in pixels
+ *
+ * Output:
+ * AX = VBE style return status
+ */
+void private_biosfn_custom_mode(uint16_t STACK_BASED *AX, uint16_t STACK_BASED *BX,
+ uint16_t STACK_BASED *CX, uint16_t STACK_BASED *DX)
+{
+ uint16_t result;
+ uint8_t subfn;
+ uint8_t bpp;
+ uint8_t lfb_flag;
+ uint16_t xres;
+ uint16_t yres;
+ uint16_t line_size;
+ uint32_t vram_size;
+ uint32_t mode_size;
+
+ result = 0x004F;
+ subfn = *BX & 0xFF;
+ switch (subfn) {
+ case 0x00:
+ xres = *CX;
+ yres = *DX;
+ bpp = (*BX >> 8) & 0x7F;
+#ifdef VGA_DEBUG
+ printf("Set custom mode %04x by %04x %xbpp\n", xres, yres, bpp);
+#endif
+ /* Only allow 32/16/8bpp. */
+ if (bpp != 8 && bpp != 16 && bpp != 32) {
+ result = 0x100;
+ break;
+ }
+
+ /* Determine the LFB flag. */
+ lfb_flag = *BX & 0x8000 ? VBE_DISPI_LFB_ENABLED : 0;
+
+ /* Cap the resolution to something not insanely high or low. */
+ if (xres < 640)
+ xres = 640;
+ else if (xres > 2560)
+ xres = 2560;
+ if (yres < 480)
+ yres = 480;
+ else if (yres > 1920)
+ yres = 1920;
+#ifdef VGA_DEBUG
+ printf("Adjusted resolution %04x by %04x\n", xres, yres);
+#endif
+
+ /* Calculate the VRAM size in bytes. */
+ vram_size = (uint32_t)in_word(VBE_EXTRA_PORT, 0xffff) << 16;
+
+ /* Calculate the scanline size in bytes. */
+ line_size = xres * (bpp / 8);
+ line_size = (line_size + 3) & ~3;
+ /* And now the memory required for the mode. */
+ mode_size = mul32_16x16(line_size, yres);
+
+ if (mode_size > vram_size) {
+ /* No can do. Don't have that much VRAM. */
+ result = 0x200;
+ break;
+ }
+
+ /* Mode looks valid, let's get cracking. */
+ dispi_set_enable(VBE_DISPI_DISABLED);
+ dispi_set_bpp(bpp);
+ dispi_set_xres(xres);
+ dispi_set_yres(yres);
+ dispi_set_bank(0);
+ dispi_set_enable(VBE_DISPI_ENABLED | lfb_flag);
+ vga_compat_setup();
+ break;
+
+ default:
+ // unsupported sub-function
+ result = 0x100;
+ break;
+ }
+ *AX = result;
+}
diff --git a/src/VBox/Devices/Graphics/BIOS/vbe.h b/src/VBox/Devices/Graphics/BIOS/vbe.h
new file mode 100644
index 00000000..eb2ea867
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vbe.h
@@ -0,0 +1,117 @@
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_BIOS_vbe_h
+#define VBOX_INCLUDED_SRC_Graphics_BIOS_vbe_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include "vgabios.h"
+
+#include <VBoxVideoVBE.h>
+#include <VBoxVideoVBEPrivate.h>
+
+// DISPI helper function
+//void dispi_set_enable(Boolean enable);
+
+/** VBE int10 API
+ *
+ * See the function descriptions in vbe.c for more information
+ */
+
+/* Far pointer for VBE info block usage. */
+typedef union vbe_ptr {
+ uint32_t Ptr32;
+ void __far *Ptr;
+ union {
+ uint16_t Off;
+ uint16_t Seg;
+ };
+} vbe_ptr;
+
+// The official VBE Information Block
+typedef struct VbeInfoBlock
+{
+ union {
+ uint8_t SigChr[4];
+ uint32_t Sig32;
+ } VbeSignature;
+ uint16_t VbeVersion;
+ vbe_ptr OemString;
+ uint8_t Capabilities[4];
+ uint16_t VideoModePtr_Off;
+ uint16_t VideoModePtr_Seg;
+ uint16_t TotalMemory;
+ uint16_t OemSoftwareRev;
+ vbe_ptr OemVendorName;
+ vbe_ptr OemProductName;
+ vbe_ptr OemProductRev;
+ uint16_t Reserved[111]; // used for dynamically generated mode list
+ uint8_t OemData[256];
+} VbeInfoBlock;
+
+
+typedef struct ModeInfoBlock
+{
+// Mandatory information for all VBE revisions
+ uint16_t ModeAttributes;
+ uint8_t WinAAttributes;
+ uint8_t WinBAttributes;
+ uint16_t WinGranularity;
+ uint16_t WinSize;
+ uint16_t WinASegment;
+ uint16_t WinBSegment;
+ uint32_t WinFuncPtr;
+ uint16_t BytesPerScanLine;
+// Mandatory information for VBE 1.2 and above
+ uint16_t XResolution;
+ uint16_t YResolution;
+ uint8_t XCharSize;
+ uint8_t YCharSize;
+ uint8_t NumberOfPlanes;
+ uint8_t BitsPerPixel;
+ uint8_t NumberOfBanks;
+ uint8_t MemoryModel;
+ uint8_t BankSize;
+ uint8_t NumberOfImagePages;
+ uint8_t Reserved_page;
+// Direct Color fields (required for direct/6 and YUV/7 memory models)
+ uint8_t RedMaskSize;
+ uint8_t RedFieldPosition;
+ uint8_t GreenMaskSize;
+ uint8_t GreenFieldPosition;
+ uint8_t BlueMaskSize;
+ uint8_t BlueFieldPosition;
+ uint8_t RsvdMaskSize;
+ uint8_t RsvdFieldPosition;
+ uint8_t DirectColorModeInfo;
+// Mandatory information for VBE 2.0 and above
+ uint32_t PhysBasePtr;
+ uint32_t OffScreenMemOffset;
+ uint16_t OffScreenMemSize;
+// Mandatory information for VBE 3.0 and above
+ uint16_t LinBytesPerScanLine;
+ uint8_t BnkNumberOfPages;
+ uint8_t LinNumberOfPages;
+ uint8_t LinRedMaskSize;
+ uint8_t LinRedFieldPosition;
+ uint8_t LinGreenMaskSize;
+ uint8_t LinGreenFieldPosition;
+ uint8_t LinBlueMaskSize;
+ uint8_t LinBlueFieldPosition;
+ uint8_t LinRsvdMaskSize;
+ uint8_t LinRsvdFieldPosition;
+ uint32_t MaxPixelClock;
+ uint8_t Reserved[189];
+} ModeInfoBlock;
+
+// VBE Return Status Info
+// AL
+#define VBE_RETURN_STATUS_SUPPORTED 0x4F
+#define VBE_RETURN_STATUS_UNSUPPORTED 0x00
+// AH
+#define VBE_RETURN_STATUS_SUCCESSFULL 0x00
+#define VBE_RETURN_STATUS_FAILED 0x01
+#define VBE_RETURN_STATUS_NOT_SUPPORTED 0x02
+#define VBE_RETURN_STATUS_INVALID 0x03
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_BIOS_vbe_h */
diff --git a/src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt b/src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt
new file mode 100644
index 00000000..ddec277e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vbe_display_api.txt
@@ -0,0 +1,237 @@
+VBE Display API
+-------------------------------------------------------------------------------------------------------------
+ This document is part of the Bochs/VBEBios documentation,
+ it specifies the bochs host <-> vbebios client communication.
+
+ That means, the display code implementation and the vbebios code depend
+ very heavily on each other. As such, this documents needs be synchronised
+ between bochs CVS and the vgabios CVS.
+
+ This document does not describe how the VBEBios implements the VBE2/3 spec.
+ This document does not describe how the Bochs display code will display gfx based upon this spec.
+
+
+API History
+-----------
+0xb0c0 supports the following VBE_DISPI_ interfaces (present in Bochs 1.4):
+ VBE_DISPI_INDEX_ID
+ VBE_DISPI_INDEX_XRES
+ VBE_DISPI_INDEX_YRES
+ VBE_DISPI_INDEX_BPP
+ VBE_DISPI_INDEX_ENABLE
+ VBE_DISPI_INDEX_BANK
+
+ Bpp format supported is:
+ VBE_DISPI_BPP_8
+
+0xb0c1 supports 0xb0c0 VBE_DISPI_ interfaces, additional interfaces (present in Bochs 2.0):
+ VBE_DISPI_INDEX_VIRT_WIDTH
+ VBE_DISPI_INDEX_VIRT_HEIGHT
+ VBE_DISPI_INDEX_X_OFFSET
+ VBE_DISPI_INDEX_Y_OFFSET
+
+0xb0c2 supports 0xb0c1 VBE_DISPI_ interfaces, interfaces updated for
+ additional features (present in Bochs 2.1):
+ VBE_DISPI_INDEX_BPP supports >8bpp color depth (value = bits)
+ VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_NOCLEARMEM and VBE_DISPI_LFB_ENABLED
+ VBE i/o registers changed from 0xFF80/81 to 0x01CE/CF
+
+0xb0c3 supports 0xb0c2 VBE_DISPI_ interfaces, interfaces updated for
+ additional features:
+ VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_GETCAPS and VBE_DISPI_8BIT_DAC
+
+0xb0c4 VBE video memory increased to 8 MB
+
+
+History
+-------
+ Version 0.6 2002 Nov 23 Jeroen Janssen
+ - Added LFB support
+ - Added Virt width, height and x,y offset
+
+ Version 0.5 2002 March 08 Jeroen Janssen
+ - Added documentation about panic behaviour / current limits of the data values.
+ - Changed BPP API (in order to include future (A)RGB formats)
+ - Initial version (based upon extended display text of the vbe bochs display patch)
+
+
+Todo
+----
+ Version 0.6+ [random order]
+ - Add lots of different (A)RGB formats
+
+References
+----------
+ [VBE3] VBE 3 Specification at
+ http://www.vesa.org/vbe3.pdf
+
+ [BOCHS] Bochs Open Source IA-32 Emulator at
+ http://bochs.sourceforge.net
+
+ [VBEBIOS] VBE Bios for Bochs at
+ http://savannah.gnu.org/projects/vgabios/
+
+ [Screenshots] Screenshots of programs using the VBE Bios at
+ http://japj.org/projects/bochs_plex86/screenshots.html
+
+Abbreviations
+-------------
+ VBE Vesa Bios Extension
+ DISPI (Bochs) Display Interface
+ BPP Bits Per Pixel
+ LFB Linear Frame Buffer
+
+
+#defines
+--------
+vbetables-gen.c
+ #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
+
+vbe.h
+ #define VBE_DISPI_BANK_ADDRESS 0xA0000
+ #define VBE_DISPI_BANK_SIZE_KB 64
+
+ #define VBE_DISPI_MAX_XRES 1024
+ #define VBE_DISPI_MAX_YRES 768
+
+ #define VBE_DISPI_IOPORT_INDEX 0x01CE
+ #define VBE_DISPI_IOPORT_DATA 0x01CF
+
+ #define VBE_DISPI_INDEX_ID 0x0
+ #define VBE_DISPI_INDEX_XRES 0x1
+ #define VBE_DISPI_INDEX_YRES 0x2
+ #define VBE_DISPI_INDEX_BPP 0x3
+ #define VBE_DISPI_INDEX_ENABLE 0x4
+ #define VBE_DISPI_INDEX_BANK 0x5
+ #define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
+ #define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
+ #define VBE_DISPI_INDEX_X_OFFSET 0x8
+ #define VBE_DISPI_INDEX_Y_OFFSET 0x9
+
+ #define VBE_DISPI_ID0 0xB0C0
+ #define VBE_DISPI_ID1 0xB0C1
+ #define VBE_DISPI_ID2 0xB0C2
+ #define VBE_DISPI_ID3 0xB0C3
+ #define VBE_DISPI_ID4 0xB0C4
+
+ #define VBE_DISPI_DISABLED 0x00
+ #define VBE_DISPI_ENABLED 0x01
+ #define VBE_DISPI_VBE_ENABLED 0x40
+ #define VBE_DISPI_NOCLEARMEM 0x80
+
+ #define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
+
+API
+---
+ The display api works by using a index (VBE_DISPI_IOPORT_INDEX) and
+ data (VBE_DISPI_IOPORT_DATA) ioport. One writes the index of the parameter to the index port.
+ Next, the parameter value can be read or written.
+
+[0xb0c0]
+ * VBE_DISPI_INDEX_ID : WORD {R,W}
+ This parameter can be used to detect the current display API (both bochs & vbebios).
+ The bios writes VBE_DISPI_ID0 to the dataport and reads it back again.
+ This way, the display code knows the vbebios 'ID' and the vbebios can check if the correct
+ display code is present.
+ As a result, a PANIC can be generated if an incompatible vbebios/display code combination is detected.
+ This panic can be generated from the bochs display code (NOT the bios, see Notes).
+
+ Example values: VBE_DISPI_ID0
+
+ * VBE_DISPI_INDEX_XRES : WORD {R,W}
+ This parameter can be used to read/write the vbe display X resolution (in pixels).
+ It's illegal to set the XRES when the VBE is enabled (display code should generate PANIC).
+
+ If the value written exceeds VBE_DISPI_MAX_XRES, the display code needs to generate a PANIC.
+
+ Example values: 320,640,800,1024
+
+ * VBE_DISPI_INDEX_YRES : WORD {R,W}
+ This parameter can be used to read/write the vbe display Y resolution (in pixels).
+ It's illegal to set the YRES when the VBE is enabled (display code should generate PANIC).
+
+ If the value written exceeds VBE_DISPI_MAX_YRES, the display code needs to generate a PANIC.
+
+ Example values: 200,400,480,600,768
+
+ * VBE_DISPI_INDEX_BPP : WORD {R,W}
+ This parameter can be used to read/write the vbe display BPP.
+ It's illegal to set the BPP when the VBE is enabled (display code should generate PANIC).
+
+ If the value written is an incompatible BPP, the display code needs to generate a PANIC.
+
+ Example values: VBE_DISPI_BPP_8
+
+ * VBE_DISPI_INDEX_ENABLE : WORD {R,W}
+ This parameter can be used to read/write the vbe ENABLED state.
+ If the bios writes VBE_DISPI_ENABLED then the display code will setup a hostside display mode
+ with the current XRES, YRES and BPP settings.
+ If the bios write VBE_DISPI_DISABLED then the display code will switch back to normal vga mode behaviour.
+
+ Example values: VBE_DISPI_ENABLED, VBE_DISPI_DISABLED
+
+ * VBE_DISPI_INDEX_BANK : WORD {R,W}
+ This parameter can be used to read/write the current selected BANK (at 0xA0000).
+ This can be used for switching banks in banked mode.
+
+[0xb0c1]
+ * VBE_DISPI_INDEX_VIRT_WIDTH : WORD {R,W}
+ This parameter can be used to read/write the current virtual width.
+ Upon enabling a mode, this will be set to the current xres
+ Setting this field during enabled mode will result in the virtual width to be changed.
+ Value will be adjusted if current setting is not possible.
+
+ * VBE_DISPI_INDEX_VIRT_HEIGHT : WORD {R}
+ This parameter can be read in order to obtain the current virtual height.
+ This setting will be adjusted after setting a virtual width in order to stay within limit of video memory.
+
+ * VBE_DISPI_INDEX_X_OFFSET : WORD {R,W}
+ The current X offset (in pixels!) of the visible screen part.
+ Writing a new offset will also result in a complete screen refresh.
+
+ * VBE_DISPI_INDEX_Y_OFFSET : WORD {R,W}
+ The current Y offset (in pixels!) of the visible screen part.
+ Writing a new offset will also result in a complete screen refresh.
+
+
+[0xb0c2]
+ * VBE_DISPI_INDEX_BPP : WORD {R,W}
+ The value written is now the number of bits per pixel. A value of 0 is treated
+ the same as 8 for backward compatibilty. These values are supported: 8, 15,
+ 16, 24 and 32. The value of 4 is not yet handled in the VBE code.
+ * VBE_DISPI_INDEX_ENABLE : WORD {R,W}
+ The new flag VBE_DISPI_NOCLEARMEM allows to preserve the VBE video memory.
+ The new flag VBE_DISPI_LFB_ENABLED indicates the usage of the LFB.
+
+[0xb0c3]
+ * VBE_DISPI_INDEX_ENABLE : WORD {R,W}
+ If the new flag VBE_DISPI_GETCAPS is enabled, the xres, yres and bpp registers
+ return the gui capabilities.
+ The new flag VBE_DISPI_8BIT_DAC switches the DAC to 8 bit mode.
+
+[0xb0c4]
+ * VBE_DISPI_TOTAL_VIDEO_MEMORY_MB set to 8 (moved to auto-generated vbetables.h)
+
+Displaying GFX (banked mode)
+--------------
+ What happens is that the total screen is devided in banks of 'VBE_DISPI_BANK_SIZE_KB' KiloByte in size.
+ If you want to set a pixel you can calculate its bank by doing:
+
+ offset = pixel_x + pixel_y * resolution_x;
+ bank = offset / 64 Kb (rounded 1.9999 -> 1)
+
+ bank_pixel_pos = offset - bank * 64Kb
+
+ Now you can set the current bank and put the pixel at VBE_DISPI_BANK_ADDRESS + bank_pixel_pos
+
+Displaying GFX (linear frame buffer mode)
+--------------
+ NOT WRITTEN YET
+
+Notes
+-----
+ * Since the XRES/YRES/BPP may not be written when VBE is enabled, if you want to switch from one VBE mode
+ to another, you will need to disable VBE first.
+
+ * Note when the bios doesn't find a valid DISPI_ID, it can disable the VBE functions. This allows people to
+ use the same bios for both vbe enabled and disabled bochs executables.
diff --git a/src/VBox/Devices/Graphics/BIOS/vberom.asm b/src/VBox/Devices/Graphics/BIOS/vberom.asm
new file mode 100644
index 00000000..374fe34c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vberom.asm
@@ -0,0 +1,951 @@
+;; ============================================================================================
+;;
+;; Copyright (C) 2002 Jeroen Janssen
+;;
+;; This library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public
+;; License as published by the Free Software Foundation; either
+;; version 2 of the License, or (at your option) any later version.
+;;
+;; This library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; Lesser General Public License for more details.
+;;
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with this library; if not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;;
+;; ============================================================================================
+;;
+;; This VBE is part of the VGA Bios specific to the plex86/bochs Emulated VGA card.
+;; You can NOT drive any physical vga card with it.
+;;
+;; ============================================================================================
+;;
+;; This VBE Bios is based on information taken from :
+;; - VESA BIOS EXTENSION (VBE) Core Functions Standard Version 3.0 located at www.vesa.org
+;;
+;; ============================================================================================
+
+
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+
+include vgadefs.inc
+include commondefs.inc
+
+public _vga_compat_setup
+public dispi_set_enable_
+public dispi_set_bank_
+public _dispi_set_bank_farcall
+public _dispi_get_max_bpp
+public _vbe_has_vbe_display
+
+public vbe_biosfn_return_current_mode
+public vbe_biosfn_display_window_control
+public vbe_biosfn_set_get_display_start
+public vbe_biosfn_set_get_dac_palette_format
+public vbe_biosfn_set_get_palette_data
+public vbe_biosfn_return_protected_mode_interface
+
+VGAROM segment public 'CODE'
+
+SET_DEFAULT_CPU
+
+VBE_BYTEWISE_IO EQU 1
+
+;; Bytewise in/out
+ifdef VBE_BYTEWISE_IO
+
+public do_out_dx_ax
+public do_in_ax_dx
+
+do_out_dx_ax:
+ xchg ah, al
+ out dx, al
+ xchg ah, al
+ out dx, al
+ ret
+
+do_in_ax_dx:
+ in al, dx
+ xchg ah, al
+ in al, dx
+ ret
+
+ out_dx_ax EQU call do_out_dx_ax
+ in_ax_dx EQU call do_in_ax_dx
+else
+ out_dx_ax EQU out dx, ax
+ in_ax_dx EQU in ax, dx
+endif
+
+;; Vertical retrace waiting
+wait_vsync:
+ push ax
+ push dx
+ mov dx, 03DAh ; @todo use a symbolic constant!
+wv_loop:
+ in al, dx
+ test al, 8
+ jz wv_loop
+ pop dx
+ pop ax
+ ret
+
+wait_not_vsync:
+ push ax
+ push dx
+ mov dx, 03DAh ; @todo use a symbolic constant!
+wnv_loop:
+ in al, dx
+ test al, 8
+ jnz wnv_loop
+ pop dx
+ pop ax
+ ret
+
+
+; AL = bits per pixel / AH = bytes per pixel
+dispi_get_bpp:
+ push dx
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BPP
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ cmp al, 4
+ jbe get_bpp_noinc
+ mov ah, al
+if VBOX_BIOS_CPU gt 8086
+ shr ah, 3
+else
+ shr ah, 1
+ shr ah, 1
+ shr ah, 1
+endif
+ test al, 07
+ jz get_bpp_noinc
+ inc ah
+get_bpp_noinc:
+ pop dx
+ ret
+
+; get display capabilities
+
+_dispi_get_max_bpp:
+ push dx
+ push bx
+ call dispi_get_enable
+ mov bx, ax
+ or ax, VBE_DISPI_GETCAPS
+ call dispi_set_enable_
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BPP
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ push ax
+ mov ax, bx
+ call dispi_set_enable_
+ pop ax
+ pop bx
+ pop dx
+ ret
+
+dispi_set_enable_:
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_ENABLE
+ out_dx_ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out_dx_ax
+ pop dx
+ ret
+
+dispi_get_enable:
+ push dx
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_ENABLE
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ pop dx
+ ret
+
+dispi_set_bank_:
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BANK
+ out_dx_ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out_dx_ax
+ pop dx
+ ret
+
+dispi_get_bank:
+ push dx
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BANK
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ pop dx
+ ret
+
+_dispi_set_bank_farcall:
+ cmp bx, 0100h
+ je dispi_set_bank_farcall_get
+ or bx,bx
+ jnz dispi_set_bank_farcall_error
+ mov ax, dx
+ push dx
+ push ax
+ mov ax, VBE_DISPI_INDEX_BANK
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ out_dx_ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out_dx_ax
+ in_ax_dx
+ pop dx
+ cmp dx,ax
+ jne dispi_set_bank_farcall_error
+ mov ax, 004Fh
+ retf
+dispi_set_bank_farcall_get:
+ mov ax, VBE_DISPI_INDEX_BANK
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ mov dx,ax
+ retf
+dispi_set_bank_farcall_error:
+ mov ax, 014Fh
+ retf
+
+dispi_set_x_offset:
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_X_OFFSET
+ out_dx_ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out_dx_ax
+ pop dx
+ ret
+
+dispi_get_x_offset:
+ push dx
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_X_OFFSET
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ pop dx
+ ret
+
+dispi_set_y_offset:
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_Y_OFFSET
+ out_dx_ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out_dx_ax
+ pop dx
+ ret
+
+dispi_get_y_offset:
+ push dx
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_Y_OFFSET
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ pop dx
+ ret
+
+vga_set_virt_width:
+ push ax
+ push bx
+ push dx
+ mov bx, ax
+ call dispi_get_bpp
+ cmp al, 4
+ ja set_width_svga
+ shr bx, 1
+set_width_svga:
+if VBOX_BIOS_CPU gt 8086
+ shr bx, 3
+else
+ shr bx, 1
+ shr bx, 1
+ shr bx, 1
+endif
+ mov dx, VGAREG_VGA_CRTC_ADDRESS
+ mov ah, bl
+ mov al, 13h
+ out dx, ax
+ pop dx
+ pop bx
+ pop ax
+ ret
+
+_vga_compat_setup:
+ push ax
+ push dx
+
+ ; set CRT X resolution
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_XRES
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ push ax
+ mov dx, VGAREG_VGA_CRTC_ADDRESS
+ mov ax, 0011h
+ out dx, ax
+ pop ax
+ push ax
+if VBOX_BIOS_CPU gt 8086
+ shr ax, 3
+else
+ shr ax, 1
+ shr ax, 1
+ shr ax, 1
+endif
+ dec ax
+ mov ah, al
+ mov al, 01
+ out dx, ax
+ pop ax
+ call vga_set_virt_width
+
+ ; set CRT Y resolution
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_YRES
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ dec ax
+ push ax
+ mov dx, VGAREG_VGA_CRTC_ADDRESS
+ mov ah, al
+ mov al, 12h
+ out dx, ax
+ pop ax
+ mov al, 07
+ out dx, al
+ inc dx
+ in al, dx
+ and al, 0BDh
+ test ah, 01
+ jz bit8_clear
+ or al, 02
+bit8_clear:
+ test ah, 02
+ jz bit9_clear
+ or al, 40h
+bit9_clear:
+ out dx, al
+
+ ; other settings
+ mov dx, VGAREG_VGA_CRTC_ADDRESS
+ mov ax, 0009
+ out dx, al
+ mov dx, VGAREG_VGA_CRTC_DATA
+ in al, dx
+ and al, 60h ; clear double scan bit and cell height
+ out dx, al
+ mov dx, VGAREG_VGA_CRTC_ADDRESS
+ mov al, 17h
+ out dx, al
+ mov dx, VGAREG_VGA_CRTC_DATA
+ in al, dx
+ or al, 03
+ out dx, al
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 10h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ or al, 01
+ mov dx, VGAREG_ACTL_ADDRESS
+ out dx, al
+ mov al, 20h
+ out dx, al
+ mov dx, VGAREG_GRDC_ADDRESS
+ mov ax, 0506h
+ out dx, ax
+ mov dx, VGAREG_SEQU_ADDRESS
+ mov ax, 0F02h
+ out dx, ax
+
+ ; settings for >= 8bpp
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BPP
+ out_dx_ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in_ax_dx
+ cmp al, 08
+ jb vga_compat_end
+ mov dx, VGAREG_VGA_CRTC_ADDRESS
+ mov al, 14h
+ out dx, al
+ mov dx, VGAREG_VGA_CRTC_DATA
+ in al, dx
+ or al, 40h
+ out dx, al
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 10h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ or al, 40h
+ mov dx, VGAREG_ACTL_ADDRESS
+ out dx, al
+ mov al, 20h
+ out dx, al
+ mov dx, VGAREG_SEQU_ADDRESS
+ mov al, 04
+ out dx, al
+ mov dx, VGAREG_SEQU_DATA
+ in al, dx
+ or al, 08
+ out dx, al
+ mov dx, VGAREG_GRDC_ADDRESS
+ mov al, 05
+ out dx, al
+ mov dx, VGAREG_GRDC_DATA
+ in al, dx
+ and al, 9Fh
+ or al, 40h
+ out dx, al
+
+vga_compat_end:
+ pop dx
+ pop ax
+
+
+; Has VBE display - Returns true if VBE display detected
+
+_vbe_has_vbe_display:
+ push ds
+ push bx
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov bx, BIOSMEM_VBE_FLAG
+ mov al, [bx]
+ and al, 01
+ xor ah, ah
+ pop bx
+ pop ds
+ ret
+
+
+; Function 03h - Return Current VBE Mode
+;
+; Input:
+; AX = 4F03h
+; Output:
+; AX = VBE Return Status
+; BX = Current VBE Mode
+;
+;
+vbe_biosfn_return_current_mode:
+ push ds
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ call dispi_get_enable
+ and ax, VBE_DISPI_ENABLED
+ jz no_vbe_mode
+ mov bx, BIOSMEM_VBE_MODE
+ mov ax, [bx]
+ mov bx, ax
+ jnz vbe_03_ok
+no_vbe_mode:
+ mov bx, BIOSMEM_CURRENT_MODE
+ mov al, [bx]
+ mov bl, al
+ xor bh, bh
+vbe_03_ok:
+ mov ax, 004Fh
+ pop ds
+ ret
+
+
+; Function 05h - Display Window Control
+;
+; Input:
+; AX = 4F05h
+; (16-bit) BH = 00h Set memory window
+; = 01h Get memory window
+; BL = Window number
+; = 00h Window A
+; = 01h Window B
+; DX = Window number in video memory in window
+; granularity units (Set Memory Window only)
+; Note:
+; If this function is called while in a linear frame buffer mode,
+; this function must fail with completion code AH=03h
+;
+; Output:
+; AX = VBE Return Status
+; DX = Window number in window granularity units
+; (Get Memory Window only)
+
+vbe_biosfn_display_window_control:
+ cmp bl, 0
+ jne vbe_05_failed
+ cmp bh, 1
+ je get_display_window
+ jb set_display_window
+ mov ax, 0100h
+ ret
+set_display_window:
+ mov ax, dx
+ call dispi_set_bank_
+ call dispi_get_bank
+ cmp ax, dx
+ jne vbe_05_failed
+ mov ax, 004Fh
+ ret
+get_display_window:
+ call dispi_get_bank
+ mov dx, ax
+ mov ax, 004Fh
+ ret
+vbe_05_failed:
+ mov ax, 014Fh
+ ret
+
+
+; Function 07h - Set/Get Display Start
+;
+; Input(16-bit):
+; AX = 4F07h
+; BH = 00h Reserved and must be 00h
+; BL = 00h Set Display Start
+; = 01h Get Display Start
+; = 02h Schedule Display Start (Alternate)
+; = 03h Schedule Stereoscopic Display Start
+; = 04h Get Scheduled Display Start Status
+; = 05h Enable Stereoscopic Mode
+; = 06h Disable Stereoscopic Mode
+; = 80h Set Display Start during Vertical Retrace
+; = 82h Set Display Start during Vertical Retrace (Alternate)
+; = 83h Set Stereoscopic Display Start during Vertical Retrace
+; ECX = If BL=02h/82h Display Start Address in bytes
+; If BL=03h/83h Left Image Start Address in bytes
+; EDX = If BL=03h/83h Right Image Start Address in bytes
+; CX = If BL=00h/80h First Displayed Pixel In Scan Line
+; DX = If BL=00h/80h First Displayed Scan Line
+;
+; Output:
+; AX = VBE Return Status
+; BH = If BL=01h Reserved and will be 0
+; CX = If BL=01h First Displayed Pixel In Scan Line
+; If BL=04h 0 if flip has not occurred, not 0 if it has
+; DX = If BL=01h First Displayed Scan Line
+;
+; Input(32-bit):
+; BH = 00h Reserved and must be 00h
+; BL = 00h Set Display Start
+; = 80h Set Display Start during Vertical Retrace
+; CX = Bits 0-15 of display start address
+; DX = Bits 16-31 of display start address
+; ES = Selector for memory mapped registers
+;
+vbe_biosfn_set_get_display_start:
+ cmp bl, 80h
+ je set_display_start_wait
+ cmp bl, 1
+ je get_display_start
+ jb set_display_start
+ mov ax, 0100h
+ ret
+set_display_start_wait:
+ call wait_not_vsync
+ call wait_vsync
+set_display_start:
+ mov ax, cx
+ call dispi_set_x_offset
+ mov ax, dx
+ call dispi_set_y_offset
+ mov ax, 004Fh
+ ret
+get_display_start:
+ call dispi_get_x_offset
+ mov cx, ax
+ call dispi_get_y_offset
+ mov dx, ax
+ xor bh, bh
+ mov ax, 004Fh
+ ret
+
+
+; Function 08h - Set/Get Dac Palette Format
+;
+; Input:
+; AX = 4F08h
+; BL = 00h set DAC palette width
+; = 01h get DAC palette width
+; BH = If BL=00h: desired number of bits per primary color
+; Output:
+; AX = VBE Return Status
+; BH = current number of bits per primary color (06h = standard VGA)
+;
+vbe_biosfn_set_get_dac_palette_format:
+ cmp bl, 1
+ je get_dac_palette_format
+ jb set_dac_palette_format
+ mov ax, 0100h
+ ret
+set_dac_palette_format:
+ call dispi_get_enable
+ cmp bh, 6
+ je set_normal_dac
+ cmp bh, 8
+ jne vbe_08_unsupported
+ or ax, VBE_DISPI_8BIT_DAC
+ jnz set_dac_mode
+set_normal_dac:
+ and ax, NOT VBE_DISPI_8BIT_DAC
+set_dac_mode:
+ call dispi_set_enable_
+get_dac_palette_format:
+ mov bh, 6
+ call dispi_get_enable
+ and ax, VBE_DISPI_8BIT_DAC
+ jz vbe_08_ok
+ mov bh, 8
+vbe_08_ok:
+ mov ax, 004Fh
+ ret
+vbe_08_unsupported:
+ mov ax, 014Fh
+ ret
+
+
+; Function 09h - Set/Get Palette Data
+;
+; Input:
+; AX = 4F09h
+; (16-bit) BL = 00h Set palette data
+; = 01h Get palette data
+; = 02h Set secondary palette data
+; = 03h Get secondary palette data
+; = 80h Set palette data during VRetrace
+; CX = Number of entries to update (<= 256)
+; DX = First entry to update
+; ES:DI = Table of palette values
+; Output:
+; AX = VBE Return Status
+;
+; Notes:
+; Secondary palette support is a "future extension".
+; Attempts to set/get it should return status 02h.
+;
+; In VBE 3.0, reading palette data is optional and
+; subfunctions 01h and 03h may return failure.
+;
+; The format of palette entries is as follows:
+;
+; PaletteEntry struc
+; Blue db ? ; Blue channel value (6 or 8 bits)
+; Green db ? ; Green channel value (6 or 8 bits)
+; Red db ? ; Red channel value (6 or 8 bits)
+; Padding db ? ; DWORD alignment byte (unused)
+; PaletteEntry ends
+;
+; Most applications use VGA DAC registers directly to
+; set/get palette in VBE modes. However, subfn 4F09h is
+; required for NonVGA controllers (eg. XGA).
+;
+vbe_biosfn_set_get_palette_data:
+ test bl, bl
+ jz set_palette_data
+ cmp bl, 01
+ je get_palette_data
+ cmp bl, 03
+ jbe vbe_09_nohw
+ cmp bl, 80h
+ jne vbe_09_unsupported
+if 0
+ ; this is where we could wait for vertical retrace
+endif
+set_palette_data:
+ DO_pushad
+ push ds
+ push es
+ pop ds
+ mov al, dl
+ mov dx, VGAREG_DAC_WRITE_ADDRESS
+ out dx, al
+ inc dx
+ mov si, di
+set_pal_loop:
+if VBOX_BIOS_CPU ge 80386
+ lodsd
+ ror eax, 16
+ out dx, al
+ rol eax, 8
+ out dx, al
+ rol eax, 8
+ out dx, al
+else
+ lodsw
+ mov bx, ax
+ lodsw
+ out dx, al
+ mov al, bh
+ out dx, al
+ mov al, bl
+ out dx, al
+endif
+ loop set_pal_loop
+ pop ds
+ DO_popad
+vbe_09_ok:
+ mov ax, 004Fh
+ ret
+
+get_palette_data:
+ DO_pushad
+ mov al, dl
+ mov dx, VGAREG_DAC_READ_ADDRESS
+ out dx, al
+ add dl, 2
+if VBOX_BIOS_CPU ge 80386
+get_pal_loop:
+ xor eax, eax
+ in al, dx
+ shl eax, 8
+ in al, dx
+ shl eax, 8
+ in al, dx
+ stosd
+else
+ xor bx, bx
+get_pal_loop:
+ in al, dx
+ mov bl, al
+ in al, dx
+ mov ah, al
+ in al, dx
+ stosw
+ mov ax, bx
+ stosw
+endif
+ loop get_pal_loop
+ DO_popad
+ jmp vbe_09_ok
+
+vbe_09_unsupported:
+ mov ax, 014Fh
+ ret
+vbe_09_nohw:
+ mov ax, 024Fh
+ ret
+
+
+; Function 0Ah - Return VBE Protected Mode Interface
+;
+; Input: AX = 4F0Ah VBE 2.0 Protected Mode Interface
+; BL = 00h Return protected mode table
+; Output: AX = Status
+; ES = Real Mode Segment of Table
+; DI = Offset of Table
+; CX = Length of Table including protected mode code
+; (for copying purposes)
+;
+vbe_biosfn_return_protected_mode_interface:
+ test bl, bl
+ jnz _fail
+ push cs
+ pop es
+ mov di, offset vesa_pm_start
+ mov cx, vesa_pm_end - vesa_pm_start
+ mov ax, 004Fh
+ ret
+_fail:
+ mov ax, 014fh
+ ret
+
+VGAROM ends
+
+;;
+;; 32-bit VBE interface
+;;
+
+.386
+
+public vesa_pm_start
+public vesa_pm_end
+
+VBE32 segment public use32 'CODE'
+
+ align 2
+
+vesa_pm_start:
+ dw vesa_pm_set_window - vesa_pm_start
+ dw vesa_pm_set_display_start - vesa_pm_start
+ dw vesa_pm_unimplemented - vesa_pm_start
+ dw vesa_pm_io_ports_table - vesa_pm_start
+vesa_pm_io_ports_table:
+ dw VBE_DISPI_IOPORT_INDEX
+ dw VBE_DISPI_IOPORT_INDEX + 1
+ dw VBE_DISPI_IOPORT_DATA
+ dw VBE_DISPI_IOPORT_DATA + 1
+ dw 3B6h
+ dw 3B7h
+ dw 0FFFFh
+ dw 0FFFFh
+
+vesa_pm_set_window:
+ cmp bx, 0
+ je vesa_pm_set_display_window1
+ mov ax, 0100h
+ ret
+vesa_pm_set_display_window1:
+ mov ax, dx
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BANK
+ out dx, ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out dx, ax
+ in ax, dx
+ pop dx
+ cmp dx, ax
+ jne illegal_window
+ mov ax, 004Fh
+ ret
+illegal_window:
+ mov ax, 014Fh
+ ret
+vesa_pm_set_display_start:
+ cmp bl, 80h
+ je vesa_pm_set_display_start1_wait
+ cmp bl, 00
+ je vesa_pm_set_display_start1
+ mov ax, 0100h
+ ret
+vesa_pm_set_display_start1_wait:
+ push edx
+ mov dx, 03DAh ; @todo: use symbolic constant
+wnv_loop_32:
+ in al, dx
+ test al, 8
+ jnz wnv_loop_32
+wv_loop_32:
+ in al, dx
+ test al, 8
+ jz wv_loop_32
+ pop edx
+vesa_pm_set_display_start1:
+; convert offset to (X, Y) coordinate
+; (would be simpler to change Bochs VBE API...)
+ push eax
+ push ecx
+ push edx
+ push esi
+ push edi
+ shl edx, 16
+ and ecx, 0FFFFh
+ or ecx, edx
+ shl ecx, 2
+ mov eax, ecx
+ push eax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_VIRT_WIDTH
+ out dx, ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ movzx ecx, ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_BPP
+ out dx, ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ in ax, dx
+ movzx esi, ax
+ pop eax
+
+ cmp esi, 4
+ jz bpp4_mode
+ add esi, 7
+ shr esi, 3
+ imul ecx, esi
+ xor edx, edx
+ div ecx
+ mov edi, eax
+ mov eax, edx
+ xor edx, edx
+ div esi
+ jmp set_xy_regs
+
+bpp4_mode:
+ shr ecx, 1
+ xor edx, edx
+ div ecx
+ mov edi, eax
+ mov eax, edx
+ shl eax, 1
+
+set_xy_regs:
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_X_OFFSET
+ out dx, ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out dx, ax
+ pop dx
+
+ mov ax, di
+ push dx
+ push ax
+ mov dx, VBE_DISPI_IOPORT_INDEX
+ mov ax, VBE_DISPI_INDEX_Y_OFFSET
+ out dx, ax
+ pop ax
+ mov dx, VBE_DISPI_IOPORT_DATA
+ out dx, ax
+ pop dx
+
+ pop edi
+ pop esi
+ pop edx
+ pop ecx
+ pop eax
+ mov ax, 004fh
+ ret
+
+vesa_pm_unimplemented:
+ mov ax, 014Fh
+ ret
+vesa_pm_end:
+
+VBE32 ends
+
+ end
diff --git a/src/VBox/Devices/Graphics/BIOS/vbetables-gen.c b/src/VBox/Devices/Graphics/BIOS/vbetables-gen.c
new file mode 100644
index 00000000..f572386a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vbetables-gen.c
@@ -0,0 +1,245 @@
+/* Generate the VGABIOS VBE Tables */
+#include <stdlib.h>
+#include <stdio.h>
+
+#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
+
+typedef struct {
+ int width;
+ int height;
+ int depth;
+ int mode;
+} ModeInfo;
+
+ModeInfo modes[] = {
+ /* standard VESA modes */
+{ 640, 400, 8 , 0x100},
+{ 640, 480, 8 , 0x101},
+{ 800, 600, 4 , 0x102},
+{ 800, 600, 8 , 0x103},
+{ 1024, 768, 4 , 0x104},
+{ 1024, 768, 8 , 0x105},
+{ 1280, 1024, 4 , 0x106},
+{ 1280, 1024, 8 , 0x107},
+{ 320, 200, 15 , 0x10D},
+{ 320, 200, 16 , 0x10E},
+{ 320, 200, 24 , 0x10F},
+{ 640, 480, 15 , 0x110},
+{ 640, 480, 16 , 0x111},
+{ 640, 480, 24 , 0x112},
+{ 800, 600, 15 , 0x113},
+{ 800, 600, 16 , 0x114},
+{ 800, 600, 24 , 0x115},
+{ 1024, 768, 15 , 0x116},
+{ 1024, 768, 16 , 0x117},
+{ 1024, 768, 24 , 0x118},
+{ 1280, 1024, 15 , 0x119},
+{ 1280, 1024, 16 , 0x11A},
+{ 1280, 1024, 24 , 0x11B},
+#if 0 /* Ubuntu fails with this */
+{ 1600, 1200, 8 , 0x11C},
+{ 1600, 1200, 15 , 0x11D},
+{ 1600, 1200, 16 , 0x11E},
+{ 1600, 1200, 24 , 0x11F},
+#endif
+
+ /* BOCHS/PLE, 86 'own' mode numbers */
+{ 320, 200, 32 , 0x140},
+{ 640, 400, 32 , 0x141},
+{ 640, 480, 32 , 0x142},
+{ 800, 600, 32 , 0x143},
+{ 1024, 768, 32 , 0x144},
+{ 1280, 1024, 32 , 0x145},
+{ 320, 200, 8 , 0x146},
+{ 1600, 1200, 32 , 0x147},
+{ 1152, 864, 8 , 0x148},
+{ 1152, 864, 15 , 0x149},
+{ 1152, 864, 16 , 0x14a},
+{ 1152, 864, 24 , 0x14b},
+{ 1152, 864, 32 , 0x14c},
+{ 0, },
+};
+
+int main(int argc, char **argv)
+{
+ const ModeInfo *pm;
+ int pages, pitch;
+ int r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
+ const char *str;
+ long vram_size = VBE_DISPI_TOTAL_VIDEO_MEMORY_MB * 1024 * 1024;
+
+ (void)argc; (void)argv;
+
+ printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n\n");
+ printf("#define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB %d\n\n", VBE_DISPI_TOTAL_VIDEO_MEMORY_MB);
+ printf("static ModeInfoListItem mode_info_list[]=\n");
+ printf("{\n");
+ for (pm = modes; pm->mode != 0; pm++) {
+ if (pm->depth == 4)
+ pitch = (pm->width + 7) / 8;
+ else
+ pitch = pm->width * ((pm->depth + 7) / 8);
+ pages = vram_size / (pm->height * pitch);
+ if (pages > 0) {
+ printf("{ 0x%04x, /* %dx%dx%d */\n",
+ pm->mode, pm->width, pm->height, pm->depth);
+ if (pm->depth == 4)
+ printf("{ /*Bit16u ModeAttributes*/ %s,\n",
+ "VBE_MODE_ATTRIBUTE_SUPPORTED | "
+ "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
+ "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
+ "VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT | "
+ "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
+ else
+ printf("{ /*Bit16u ModeAttributes*/ %s,\n",
+ "VBE_MODE_ATTRIBUTE_SUPPORTED | "
+ "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
+ "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
+ "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
+ "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
+ printf("/*Bit8u WinAAttributes*/ %s,\n",
+ "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
+ "VBE_WINDOW_ATTRIBUTE_READABLE | "
+ "VBE_WINDOW_ATTRIBUTE_WRITEABLE");
+
+ printf("/*Bit8u WinBAttributes*/ %d,\n", 0);
+
+ printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
+
+ printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
+
+ printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");
+
+ printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);
+
+ printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);
+
+ printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch);
+
+ /* Mandatory information for VBE 1.2 and above */
+ printf("/*Bit16u XResolution*/ %d,\n", pm->width);
+ printf("/*Bit16u YResolution*/ %d,\n", pm->height);
+ printf("/*Bit8u XCharSize*/ %d,\n", 8);
+ printf("/*Bit8u YCharSize*/ %d,\n", 16);
+ if (pm->depth == 4) {
+ printf("/*Bit8u NumberOfPlanes*/ %d,\n", 4);
+ } else {
+ printf("/*Bit8u NumberOfPlanes*/ %d,\n", 1);
+ }
+ printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth);
+ printf("/*Bit8u NumberOfBanks*/ %d,\n", 1); /* This would only be non-zero for CGA/HGC modes! */
+
+ if (pm->depth == 4)
+ str = "VBE_MEMORYMODEL_PLANAR";
+ else if (pm->depth == 8)
+ str = "VBE_MEMORYMODEL_PACKED_PIXEL";
+ else
+ str = "VBE_MEMORYMODEL_DIRECT_COLOR";
+ printf("/*Bit8u MemoryModel*/ %s,\n", str);
+ printf("/*Bit8u BankSize*/ %d,\n", 0);
+ if (pm->depth == 4)
+ printf("/*Bit8u NumberOfImagePages*/ %d,\n", (pages / 4) - 1);
+ else
+ printf("/*Bit8u NumberOfImagePages*/ %d,\n", pages - 1);
+ printf("/*Bit8u Reserved_page*/ %d,\n", 0);
+
+ /* Direct Color fields (required for direct/6 and YUV/7 memory models) */
+ switch(pm->depth) {
+ case 15:
+ r_size = 5;
+ r_pos = 10;
+ g_size = 5;
+ g_pos = 5;
+ b_size = 5;
+ b_pos = 0;
+ a_size = 1;
+ a_pos = 15;
+ break;
+ case 16:
+ r_size = 5;
+ r_pos = 11;
+ g_size = 6;
+ g_pos = 5;
+ b_size = 5;
+ b_pos = 0;
+ a_size = 0;
+ a_pos = 0;
+ break;
+ case 24:
+ r_size = 8;
+ r_pos = 16;
+ g_size = 8;
+ g_pos = 8;
+ b_size = 8;
+ b_pos = 0;
+ a_size = 0;
+ a_pos = 0;
+ break;
+ case 32:
+ r_size = 8;
+ r_pos = 16;
+ g_size = 8;
+ g_pos = 8;
+ b_size = 8;
+ b_pos = 0;
+ a_size = 8;
+ a_pos = 24;
+ break;
+ default:
+ r_size = 0;
+ r_pos = 0;
+ g_size = 0;
+ g_pos = 0;
+ b_size = 0;
+ b_pos = 0;
+ a_size = 0;
+ a_pos = 0;
+ break;
+ }
+
+ printf("/*Bit8u RedMaskSize*/ %d,\n", r_size);
+ printf("/*Bit8u RedFieldPosition*/ %d,\n", r_pos);
+ printf("/*Bit8u GreenMaskSize*/ %d,\n", g_size);
+ printf("/*Bit8u GreenFieldPosition*/ %d,\n", g_pos);
+ printf("/*Bit8u BlueMaskSize*/ %d,\n", b_size);
+ printf("/*Bit8u BlueFieldPosition*/ %d,\n", b_pos);
+ printf("/*Bit8u RsvdMaskSize*/ %d,\n", a_size);
+ printf("/*Bit8u RsvdFieldPosition*/ %d,\n", a_pos);
+ if (pm->depth == 32)
+ printf("/*Bit8u DirectColorModeInfo*/ %s,\n",
+ "VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE");
+ else
+ printf("/*Bit8u DirectColorModeInfo*/ %s,\n", "0");
+
+ /* Mandatory information for VBE 2.0 and above */
+ if (pm->depth > 4)
+ printf("/*Bit32u PhysBasePtr*/ %s,\n",
+ "0xFFFF0000 /* Filled in at run-time; low word must be zero! */");
+ else
+ printf("/*Bit32u PhysBasePtr*/ %s,\n", "0");
+ printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
+ printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
+ /* Mandatory information for VBE 3.0 and above */
+ printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch);
+ printf("/*Bit8u BnkNumberOfPages*/ %d,\n", 0);
+ printf("/*Bit8u LinNumberOfPages*/ %d,\n", 0);
+ printf("/*Bit8u LinRedMaskSize*/ %d,\n", r_size);
+ printf("/*Bit8u LinRedFieldPosition*/ %d,\n", r_pos);
+ printf("/*Bit8u LinGreenMaskSize*/ %d,\n", g_size);
+ printf("/*Bit8u LinGreenFieldPosition*/ %d,\n", g_pos);
+ printf("/*Bit8u LinBlueMaskSize*/ %d,\n", b_size);
+ printf("/*Bit8u LinBlueFieldPosition*/ %d,\n", b_pos);
+ printf("/*Bit8u LinRsvdMaskSize*/ %d,\n", a_size);
+ printf("/*Bit8u LinRsvdFieldPosition*/ %d,\n", a_pos);
+ printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
+ printf("} },\n");
+ }
+ }
+#ifndef VBOX /* We'll add the terminator ourselves, thank you. */
+ printf("{ VBE_VESA_MODE_END_OF_LIST,\n");
+ printf("{ 0,\n");
+ printf("} },\n");
+#endif
+ printf("};\n");
+ return 0;
+}
diff --git a/src/VBox/Devices/Graphics/BIOS/vgabios.c b/src/VBox/Devices/Graphics/BIOS/vgabios.c
new file mode 100644
index 00000000..7c415481
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgabios.c
@@ -0,0 +1,2805 @@
+// ============================================================================================
+/*
+ * vgabios.c
+ */
+// ============================================================================================
+//
+// Copyright (C) 2001,2002 the LGPL VGABios developers Team
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// ============================================================================================
+//
+// This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+// You can NOT drive any physical vga card with it.
+//
+// ============================================================================================
+//
+// This file contains code ripped from :
+// - rombios.c of plex86
+//
+// This VGA Bios contains fonts from :
+// - fntcol16.zip (c) by Joseph Gil avalable at :
+// ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+// These fonts are public domain
+//
+// This VGA Bios is based on information taken from :
+// - Kevin Lawton's vga card emulation for bochs/plex86
+// - Ralf Brown's interrupts list available at http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
+// - Finn Thogersons' VGADOC4b available at http://home.worldonline.dk/~finth/
+// - Michael Abrash's Graphics Programming Black Book
+// - Francois Gervais' book "programmation des cartes graphiques cga-ega-vga" edited by sybex
+// - DOSEMU 1.0.1 source code for several tables values and formulas
+//
+// Thanks for patches, comments and ideas to :
+// - techt@pikeonline.net
+//
+// ============================================================================================
+
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <inttypes.h>
+#include "vgabios.h"
+
+#ifdef VBE
+#include "vbe.h"
+#endif
+
+#include "inlines.h"
+
+/* Declares */
+extern void vgabios_int10_handler(void);
+#pragma aux vgabios_int10_handler "*";
+
+// Output
+void __cdecl unimplemented(void);
+void __cdecl unknown(void);
+
+static uint8_t find_vga_entry();
+
+extern uint8_t readx_byte(uint16_t seg, uint16_t offset);
+
+#ifdef VBE
+extern uint16_t __cdecl vbe_has_vbe_display(void);
+extern void vbe_init(void);
+#endif
+
+void set_int_vector(uint8_t int_vec, void __far *ptr)
+{
+ void __far * __far *ivt = 0;
+
+ ivt[int_vec] = ptr;
+}
+
+//@todo!!
+#if 0
+
+vgabios_name:
+#ifdef VBOX
+.ascii "VirtualBox VGA BIOS"
+#else
+.ascii "Plex86/Bochs VGABios"
+#endif
+.ascii " "
+.byte 0x00
+
+#ifndef VBOX
+vgabios_version:
+#ifndef VGABIOS_VERS
+.ascii "current-cvs"
+#else
+.ascii VGABIOS_VERS
+#endif
+.ascii " "
+
+vgabios_date:
+.ascii VGABIOS_DATE
+.byte 0x0a,0x0d
+.byte 0x00
+#endif
+
+#ifndef VBOX
+char vgabios_copyright[] = "(C) 2003 the LGPL VGABios developers Team\r\n";
+char vgabios_license[] = "This VGA/VBE Bios is released under the GNU LGPL\r\n\r\n";
+char vgabios_website[] = "Please visit :\r\n" \
+ " . http://www.plex86.org\r\n" \
+ " . http://bochs.sourceforge.net\r\n" \
+ " . http://www.nongnu.org/vgabios\r\n\r\n"
+#endif
+
+#endif
+
+extern void set_mode(int mode);
+#pragma aux set_mode = \
+ "xor ah, ah" \
+ "int 10h" \
+ parm [ax];
+
+char msg_vga_init[] = "Oracle VM VirtualBox Version " VBOX_VERSION_STRING " VGA BIOS\r\n";
+
+/*
+ * Boot time harware inits
+ */
+void init_vga_card(void)
+{
+ /* Switch to color mode and enable CPU access 480 lines. */
+ outb(0x3C2, 0xC3);
+ /* More than 64k 3C4/04. */
+ /// @todo 16-bit write
+ outb(0x3C4, 0x04);
+ outb(0x3C5, 0x02);
+
+#ifdef DEBUG_VGA
+ printf(msg_vga_init);
+#endif
+}
+
+#include "vgatables.h"
+#include "vgadefs.h"
+
+// --------------------------------------------------------------------------------------------
+
+#pragma pack(0)
+
+/* Alphanumeric character set override. */
+typedef struct {
+ uint8_t c_height; /* Bytes/lines per character. */
+ uint8_t cgen_bank; /* Character generator bank. */
+ uint16_t char_num; /* Number of chars defined. */
+ uint16_t char_1st; /* First char code in table. */
+ uint16_t font_ofs; /* Font definition table offset. */
+ uint16_t font_seg; /* Font definition table segment. */
+ uint8_t n_rows; /* Number of text rows shown. */
+ uint8_t modes[1]; /* Applicable modes list, 0xFF terminated. */
+} cso_txt;
+
+/* Graphics character set override. */
+typedef struct {
+ uint8_t c_height; /* Lines per character. */
+ uint16_t c_len; /* Bytes per character. */
+ uint16_t font_ofs; /* Font definition table offset. */
+ uint16_t font_seg; /* Font definition table segment. */
+ uint8_t modes[1]; /* Applicable modes list, 0xFF terminated. */
+} cso_grf;
+
+struct dcc {
+ uint8_t n_ent;
+ uint8_t version;
+ uint8_t max_code;
+ uint8_t reserved;
+ uint16_t dccs[16];
+} dcc_table = {
+ 16,
+ 1,
+ 7,
+ 0
+};
+
+struct ssa {
+ uint16_t size;
+ void __far *dcc;
+ void __far *sacs;
+ void __far *pal;
+ void __far *resvd[3];
+
+} secondary_save_area = {
+ sizeof(struct ssa),
+ &dcc_table
+};
+
+void __far *video_save_pointer_table[7] = {
+ &video_param_table,
+ 0,
+ 0,
+ 0,
+ &secondary_save_area
+};
+
+/*
+ * Boot time bios area inits
+ */
+void init_bios_area(void)
+{
+ uint8_t __far *bda;
+
+ bda = 0x40 :> 0;
+
+ /* Indicate 80x25 color was detected. */
+ bda[BIOSMEM_INITIAL_MODE] = (bda[BIOSMEM_INITIAL_MODE] & 0xcf) | 0x20;
+ /* Just for the first int10 find its children. */
+
+ /* The default char height. */
+ bda[BIOSMEM_CHAR_HEIGHT] = 16;
+ /* Clear the screen. */
+ bda[BIOSMEM_VIDEO_CTL] = 0x60;
+ /* Set the basic screen we have. */
+ bda[BIOSMEM_SWITCHES] = 0xf9;
+ /* Set the basic mode set options. */
+ bda[BIOSMEM_MODESET_CTL] = 0x51;
+ /* Set the default MSR. */
+ bda[BIOSMEM_CURRENT_MSR] = 0x09;
+ /* Initialize the default save area pointer. */
+ *(void __far * __far *)&bda[BIOSMEM_VS_POINTER] = video_save_pointer_table;
+}
+
+// ============================================================================================
+//
+// Init Entry point
+//
+// ============================================================================================
+void __far __cdecl vgabios_init_func(void)
+{
+ init_vga_card();
+ init_bios_area();
+#ifdef VBE
+ vbe_init();
+#endif
+ set_int_vector(0x10, vgabios_int10_handler);
+ set_int_vector(0x6D, vgabios_int10_handler);
+#ifdef CIRRUS
+ cirrus_init();
+#endif
+
+#ifndef VBOX
+ display_splash_screen();
+
+ // init video mode and clear the screen
+ // @@AS: Do not remove this init, because it will break VESA graphics
+ set_mode(3);
+
+ display_info();
+
+#ifdef VBE
+ vbe_display_info();
+#endif
+
+#ifdef CIRRUS
+ cirrus_display_info();
+#endif
+
+#else /* VBOX */
+
+//#ifdef DEBUG_bird
+ /* Init video mode and clear the screen */
+ set_mode(3);
+//#endif
+#endif /* VBOX */
+}
+
+#include "vgafonts.h"
+
+#ifndef VBOX
+// --------------------------------------------------------------------------------------------
+/*
+ * Boot time Splash screen
+ */
+static void display_splash_screen()
+{
+}
+
+// --------------------------------------------------------------------------------------------
+/*
+ * Tell who we are
+ */
+
+static void display_string(void)
+{
+ // Get length of string
+ASM_START
+ mov ax,ds
+ mov es,ax
+ mov di,si
+ xor cx,cx
+ not cx
+ xor al,al
+ cld
+ repne
+ scasb
+ not cx
+ dec cx
+ push cx
+
+ mov ax,#0x0300
+ mov bx,#0x0000
+ int #0x10
+
+ pop cx
+ mov ax,#0x1301
+ mov bx,#0x000b
+ mov bp,si
+ int #0x10
+ASM_END
+}
+
+static void display_info(void)
+{
+ display_string(vgabios_name);
+ display_string(vgabios_version);
+ display_string(vgabios_copyright);
+ display_string(vgabios_license);
+ display_string(vgabios_website);
+}
+
+#endif
+
+// --------------------------------------------------------------------------------------------
+#ifdef VGA_DEBUG
+void __cdecl int10_debugmsg(uint16_t DI, uint16_t SI, uint16_t BP, uint16_t SP, uint16_t BX,
+ uint16_t DX, uint16_t CX, uint16_t AX, uint16_t DS, uint16_t ES, uint16_t FLAGS)
+{
+ /* Function 0Eh is write char and would generate way too much output. */
+ if (GET_AH() != 0x0E)
+ printf("vgabios call ah%02x al%02x bx%04x cx%04x dx%04x\n", GET_AH(), GET_AL(), BX, CX, DX);
+}
+#endif
+
+static void vga_get_cursor_pos(uint8_t page, uint16_t STACK_BASED *scans, uint16_t STACK_BASED *loc)
+{
+ if (page > 7) {
+ *scans = 0;
+ *loc = 0;
+ } else {
+ // FIXME should handle VGA 14/16 lines
+ *scans = read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE);
+ *loc = read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_POS + page * 2);
+ }
+}
+
+/* Look for a glyph bitmap in a given font. */
+static uint16_t vga_find_glyph(uint8_t __far *font, uint8_t STACK_BASED *glyph, uint8_t cp, uint16_t n_glyphs, uint8_t cheight)
+{
+ uint16_t codepoint = 0; /* Zero returned when glyph not found. */
+
+ while (n_glyphs--) {
+ if (!repe_cmpsb(font, glyph, cheight)) {
+ codepoint = cp | 0x8000; /* Found matching glyph! */
+ break;
+ }
+ font += cheight;
+ ++cp; /* Increment code point number. */
+ }
+ return codepoint;
+}
+
+static void vga_read_glyph_planar(uint8_t __far *vptr, uint16_t stride, uint8_t STACK_BASED *glyph, uint8_t cheight)
+{
+ /* Set Mode Register (GR5) to Read Mode 1. Assuming default register
+ * state from our mode set, this does all the hard work for us such that
+ * reading a byte from video memory gives us a bit mask for all eight
+ * pixels, for both 16-color and monochrome modes.
+ */
+ outw(VGAREG_GRDC_ADDRESS, 0x0805);
+
+ while (cheight--) {
+ *glyph++ = ~*vptr;
+ vptr += stride;
+ }
+
+ /* Put GR5 back to Read Mode 0. */
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+}
+
+static uint16_t vga_char_ofs_planar(uint8_t xcurs, uint8_t ycurs, uint16_t nbcols, uint8_t page, uint8_t cheight)
+{
+ uint16_t ofs;
+
+ ofs = ycurs * nbcols * cheight + xcurs;
+ ofs += page * read_word(BIOSMEM_SEG, BIOSMEM_PAGE_SIZE);
+
+ return ofs;
+}
+
+static uint8_t vga_read_char_planar(uint16_t nbcols, uint16_t ofs, uint8_t cheight)
+{
+ uint8_t glyph[16]; /* NB: Don't try taller characters! */
+
+ vga_read_glyph_planar(0xA000 :> (uint8_t *)ofs, nbcols, &glyph, cheight);
+
+ /* Look through font pointed to by INT 43h. */
+ return vga_find_glyph((void __far *)read_dword(0, 0x43 * 4), &glyph, 0, 256, cheight);
+}
+
+static uint16_t vga_char_ofs_linear(uint8_t xcurs, uint8_t ycurs, uint16_t nbcols, uint8_t page, uint8_t cheight)
+{
+ uint16_t ofs;
+
+ ofs = ycurs * nbcols * cheight + xcurs;
+ ofs *= 8;
+ return ofs;
+}
+
+static void vga_read_glyph_linear(uint8_t __far *vptr, uint16_t stride, uint8_t STACK_BASED *glyph, uint8_t cheight)
+{
+ uint8_t bmap, cbit;
+ int i;
+
+ /* Zero pixels are background, everything else foreground. */
+ while (cheight--) {
+ bmap = 0;
+ cbit = 0x80;
+ for (i = 0; i < 8; ++i) {
+ if (vptr[i])
+ bmap |= cbit;
+ cbit >>= 1;
+ }
+ *glyph++ = bmap;
+ vptr += stride;
+ }
+}
+
+static uint8_t vga_read_char_linear(uint16_t nbcols, uint16_t ofs, uint8_t cheight)
+{
+ uint8_t glyph[16]; /* NB: Don't try taller characters! */
+
+ vga_read_glyph_linear(0xA000 :> (uint8_t *)ofs, nbcols * 8, &glyph, cheight);
+
+ /* Look through font pointed to by INT 43h. */
+ return vga_find_glyph((void __far *)read_dword(0, 0x43 * 4), &glyph, 0, 256, cheight);
+}
+
+static uint8_t vga_read_2bpp_char(uint8_t __far *vptr)
+{
+ uint16_t mask, pixb;
+ uint8_t bmap, cbit;
+ int i;
+
+ mask = 0xC000; /* Check two bits at a time to see if they're zero. */
+ cbit = 0x80; /* Go from left to right. */
+ bmap = 0;
+ pixb = swap_16(*((uint16_t __far *)vptr));
+ /* Go through 8 lines/words. */
+ for (i = 0; i < 8; ++i) {
+ if (pixb & mask)
+ bmap |= cbit;
+ cbit >>= 1;
+ mask >>= 2;
+ }
+ return bmap;
+}
+
+static void vga_read_glyph_cga(uint16_t ofs, uint8_t STACK_BASED *glyph, uint8_t mode)
+{
+ int i;
+ uint8_t __far *vptr;
+
+ /* The font size is fixed at 8x8. Stride is always 80 bytes because the
+ * mode is either 80 characters wide at 1bpp or 40 characters at 2bpp.
+ */
+ if (mode != 6) {
+ /* Adjust offset for 2bpp. */
+ vptr = 0xB800 :> (uint8_t *)(ofs * 2);
+ /* For 2bpp modes, we have to extract the bits by hand. */
+ for (i = 0; i < 4; ++i) {
+ *glyph++ = vga_read_2bpp_char(vptr);
+ *glyph++ = vga_read_2bpp_char(vptr + 0x2000);
+ vptr += 80;
+ }
+ } else {
+ vptr = 0xB800 :> (uint8_t *)ofs;
+ for (i = 0; i < 4; ++i) {
+ *glyph++ = vptr[0];
+ *glyph++ = vptr[0x2000];
+ vptr += 80;
+ }
+ }
+}
+
+static uint16_t vga_char_ofs_cga(uint8_t xcurs, uint8_t ycurs, uint16_t nbcols)
+{
+ /* Multiply ony by 8 due to line interleaving. NB: Caller
+ * has to multiply the result for two for 2bpp mode.
+ */
+ return ycurs * nbcols * 4 + xcurs;
+}
+
+static uint8_t vga_read_char_cga(uint16_t ofs, uint8_t mode)
+{
+ uint8_t glyph[8]; /* Char height is hardcoded to 8. */
+ uint16_t found;
+
+ /* Segment would be B000h for mono modes; we don't do those. */
+ vga_read_glyph_cga(ofs, &glyph, mode);
+
+ /* Look through the first half of the font pointed to by INT 43h. */
+ found = vga_find_glyph((void __far *)read_dword(0, 0x43 * 4), &glyph, 0, 128, 8);
+ /* If not found, look for the second half pointed to by INT 1Fh */
+ if (!(found & 0x8000)) {
+ void __far *int1f;
+
+ int1f = (void __far *)read_dword(0, 0x1f * 4);
+ if (int1f) /* If null pointer, skip. */
+ found = vga_find_glyph(int1f, &glyph, 128, 128, 8);
+ }
+ return found;
+}
+
+static void vga_read_char_attr(uint8_t page, uint16_t STACK_BASED *chr_atr)
+{
+ uint8_t xcurs, ycurs, mode, line, cheight;
+ uint16_t nbcols, nbrows, address;
+ uint16_t cursor, dummy, ofs;
+
+ // Get the mode
+ mode = read_byte(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE);
+ line = find_vga_entry(mode);
+ if (line == 0xFF)
+ return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page, &dummy, &cursor);
+ xcurs = cursor & 0x00ff;
+ ycurs = (cursor & 0xff00) >> 8;
+
+ // Get the dimensions
+ nbrows = read_byte(BIOSMEM_SEG, BIOSMEM_NB_ROWS) + 1;
+ nbcols = read_word(BIOSMEM_SEG, BIOSMEM_NB_COLS);
+
+ if (vga_modes[line].class == TEXT) {
+ // Compute the address
+ address = SCREEN_MEM_START(nbcols, nbrows, page) + (xcurs + ycurs * nbcols) * 2;
+ *chr_atr = read_word(vga_modes[line].sstart, address);
+ } else {
+ switch (vga_modes[line].memmodel) {
+ case CGA:
+ /* For CGA graphics, font size is hardcoded at 8x8. */
+ ofs = vga_char_ofs_cga(xcurs, ycurs, nbcols);
+ *chr_atr = vga_read_char_cga(ofs, mode);
+ break;
+ case PLANAR1:
+ case PLANAR4:
+ cheight = read_word(BIOSMEM_SEG, BIOSMEM_CHAR_HEIGHT);
+ ofs = vga_char_ofs_planar(xcurs, ycurs, nbcols, page, cheight);
+ *chr_atr = vga_read_char_planar(nbcols, ofs, cheight);
+ break;
+ case LINEAR8:
+ cheight = read_word(BIOSMEM_SEG, BIOSMEM_CHAR_HEIGHT);
+ ofs = vga_char_ofs_linear(xcurs, ycurs, nbcols, page, cheight);
+ *chr_atr = vga_read_char_linear(nbcols, ofs, cheight);
+ break;
+ default:
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+ break;
+ }
+ }
+}
+
+static void vga_get_font_info (uint16_t func, uint16_t STACK_BASED *u_seg, uint16_t STACK_BASED *u_ofs,
+ uint16_t STACK_BASED *c_height, uint16_t STACK_BASED *max_row)
+{
+ void __far *ptr;
+
+ switch (func) {
+ case 0x00:
+ ptr = (void __far *)read_dword(0x00, 0x1f * 4);
+ break;
+ case 0x01:
+ ptr = (void __far *)read_dword(0x00, 0x43 * 4);
+ break;
+ case 0x02:
+ ptr = vgafont14;
+ break;
+ case 0x03:
+ ptr = vgafont8;
+ break;
+ case 0x04:
+ ptr = vgafont8 + 128 * 8;
+ break;
+ case 0x05:
+ ptr = vgafont14alt;
+ break;
+ case 0x06:
+ ptr = vgafont16;
+ break;
+ case 0x07:
+ ptr = vgafont16alt;
+ break;
+ default:
+#ifdef VGA_DEBUG
+ printf("Get font info subfn(%02x) not implemented\n", func);
+#endif
+ return;
+ }
+ /* Split the far pointer and write it back. */
+ *u_ofs = (uint16_t)ptr;
+ *u_seg = (uint32_t)ptr >> 16;
+
+ /* The character height (effectively bytes per glyph). */
+ *c_height = read_byte(BIOSMEM_SEG, BIOSMEM_CHAR_HEIGHT);
+
+ /* The highest row number. */
+ *max_row = read_byte(BIOSMEM_SEG, BIOSMEM_NB_ROWS);
+}
+
+static void vga_read_pixel(uint8_t page, uint16_t col, uint16_t row, uint16_t STACK_BASED *pixel)
+{
+ uint8_t mode, line, mask, attr, data, i;
+ uint16_t addr;
+
+ /* Determine current mode characteristics. */
+ mode = read_byte(BIOSMEM_SEG, BIOSMEM_CURRENT_MODE);
+ line = find_vga_entry(mode);
+ if (line == 0xFF)
+ return;
+ if (vga_modes[line].class == TEXT)
+ return;
+
+ /* Read data depending on memory model. */
+ switch (vga_modes[line].memmodel) {
+ case PLANAR4:
+ case PLANAR1:
+ addr = col / 8 + row * read_word(BIOSMEM_SEG, BIOSMEM_NB_COLS);
+ addr += read_word(BIOSMEM_SEG, BIOSMEM_PAGE_SIZE) * page;
+ mask = 0x80 >> (col & 0x07);
+ attr = 0x00;
+ for (i = 0; i < 4; i++) {
+ outw(VGAREG_GRDC_ADDRESS, (i << 8) | 0x04);
+ data = read_byte(0xa000,addr) & mask;
+ if (data > 0)
+ attr |= (0x01 << i);
+ }
+ break;
+ case CGA:
+ addr = (col >> (4 - vga_modes[line].pixbits)) + (row >> 1) * 80;
+ if (row & 1)
+ addr += 0x2000;
+ data = read_byte(0xb800, addr);
+ if (vga_modes[line].pixbits == 2)
+ attr = (data >> ((3 - (col & 0x03)) * 2)) & 0x03;
+ else
+ attr = (data >> (7 - (col & 0x07))) & 0x01;
+ break;
+ case LINEAR8:
+ addr = col + row * (read_word(BIOSMEM_SEG, BIOSMEM_NB_COLS) * 8);
+ attr = read_byte(0xa000, addr);
+ break;
+ default:
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+ attr = 0;
+ }
+ *(uint8_t STACK_BASED *)pixel = attr;
+}
+
+
+
+// --------------------------------------------------------------------------------------------
+/*static*/ void biosfn_perform_gray_scale_summing(uint16_t start, uint16_t count)
+{uint8_t r,g,b;
+ uint16_t i;
+ uint16_t index;
+
+ inb(VGAREG_ACTL_RESET);
+ outb(VGAREG_ACTL_ADDRESS,0x00);
+
+ for( index = 0; index < count; index++ )
+ {
+ // set read address and switch to read mode
+ outb(VGAREG_DAC_READ_ADDRESS,start);
+ // get 6-bit wide RGB data values
+ r=inb( VGAREG_DAC_DATA );
+ g=inb( VGAREG_DAC_DATA );
+ b=inb( VGAREG_DAC_DATA );
+
+ // intensity = ( 0.3 * Red ) + ( 0.59 * Green ) + ( 0.11 * Blue )
+ i = ( ( 77*r + 151*g + 28*b ) + 0x80 ) >> 8;
+
+ if(i>0x3f)i=0x3f;
+
+ // set write address and switch to write mode
+ outb(VGAREG_DAC_WRITE_ADDRESS,start);
+ // write new intensity value
+ outb( VGAREG_DAC_DATA, i&0xff );
+ outb( VGAREG_DAC_DATA, i&0xff );
+ outb( VGAREG_DAC_DATA, i&0xff );
+ start++;
+ }
+ inb(VGAREG_ACTL_RESET);
+ outb(VGAREG_ACTL_ADDRESS,0x20);
+#ifdef VBOX
+ inb(VGAREG_ACTL_RESET);
+#endif /* VBOX */
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_cursor_shape(uint8_t CH, uint8_t CL)
+{
+ uint16_t cheight, curs, crtc_addr;
+ int cga_emu;
+
+ /* Unmodified input is stored in the BDA. */
+ curs = (CH << 8) + CL;
+ write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_TYPE, curs);
+
+ /* Check if VGA is active. If not, just write the input to the CRTC. */
+ if (!(read_byte(BIOSMEM_SEG, BIOSMEM_VIDEO_CTL) & 8)) {
+ /* Trying to disable the cursor? */
+ if ((CH & 0x60) == 0x20) {
+ /* Special IBM-compatible value to turn off cursor. */
+ CH = 0x1E;
+ CL = 0;
+ } else {
+ cga_emu = !(read_byte(BIOSMEM_SEG, BIOSMEM_VIDEO_CTL) & 1);
+
+ /* If CGA cursor emulation is on and this is a text mode, adjust.
+ * But if cursor star or end is bigger than 31, don't adjust.
+ */
+ /// @todo Figure out if this is a text mode
+ if (cga_emu /* && text mode*/ && (CH < 32) && (CL < 32)) {
+ cheight = read_word(BIOSMEM_SEG, BIOSMEM_CHAR_HEIGHT);
+
+ /* Is the end lower than start? VGA does not wrap around.*/
+ if (CL < CH) {
+ /* For zero CL (end), leave values unchanged. */
+ if (CL) {
+ CH = 0;
+ CL = cheight - 1;
+ }
+ } else {
+ if (((CL | CH) >= cheight) || ((CL != cheight - 1) && (CH != cheight - 2))) {
+ /* If it's an overbar cursor, don't adjust. */
+ if (CL > 3) {
+ if (CL <= CH + 2) {
+ /* It's it a normal underline style cursor. */
+ CH = CH - CL + cheight - 1;
+ CL = cheight - 1;
+ if (cheight >= 14) {
+ /* Shift up one pixel for normal EGA/VGA fonts. */
+ CL--;
+ CH--;
+ }
+ } else if (CH <= 2) {
+ /* It's a full block cursor. */
+ CL = cheight - 1;
+ } else {
+ /* It's a half block cursor. */
+ CH = cheight / 2;
+ CL = cheight - 1;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // CTRC regs 0x0a and 0x0b
+ crtc_addr = read_word(BIOSMEM_SEG, BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr, 0x0a);
+ outb(crtc_addr + 1, CH);
+ outb(crtc_addr, 0x0b);
+ outb(crtc_addr + 1 ,CL);
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_cursor_pos (uint8_t page, uint16_t cursor)
+{
+ uint8_t xcurs,ycurs,current;
+ uint16_t nbcols,nbrows,address,crtc_addr;
+
+ // Should not happen...
+ if(page>7)return;
+
+ // Bios cursor pos
+ write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*page, cursor);
+
+ // Set the hardware cursor
+ current=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE);
+ if(page==current)
+ {
+ // Get the dimensions
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Calculate the address knowing nbcols nbrows and page num
+ address=SCREEN_IO_START(nbcols,nbrows,page)+xcurs+ycurs*nbcols;
+
+ // CRTC regs 0x0e and 0x0f
+ crtc_addr=read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr,0x0e);
+ outb(crtc_addr+1,(address&0xff00)>>8);
+ outb(crtc_addr,0x0f);
+ outb(crtc_addr+1,address&0x00ff);
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_active_page(uint8_t page)
+{
+ uint16_t cursor,dummy,crtc_addr;
+ uint16_t nbcols,nbrows,address;
+ uint8_t mode,line;
+
+ if(page>7)return;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get pos curs pos for the right page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+
+ if(vga_modes[line].class==TEXT)
+ {
+ // Get the dimensions
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+
+ // Calculate the address knowing nbcols nbrows and page num
+ address=SCREEN_MEM_START(nbcols,nbrows,page);
+ write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START,address);
+
+ // Start address
+ address=SCREEN_IO_START(nbcols,nbrows,page);
+ }
+ else
+ {
+ address = page * video_param_table[line_to_vpti[line]].slength;
+ }
+
+ // CRTC regs 0x0c and 0x0d
+ crtc_addr=read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr,0x0c);
+ outb(crtc_addr+1,(address&0xff00)>>8);
+ outb(crtc_addr,0x0d);
+ outb(crtc_addr+1,address&0x00ff);
+
+ // And change the BIOS page
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE,page);
+
+#ifdef VGA_DEBUG
+ printf("Set active page %02x address %04x\n",page,address);
+#endif
+
+ // Display the cursor, now the page is active
+ biosfn_set_cursor_pos(page,cursor);
+}
+
+/// Recursive BIOS invocation, uses vector 6Dh
+extern void vga_font_set(uint8_t function, uint8_t data);
+#pragma aux vga_font_set = \
+ "mov ah, 11h" \
+ "int 6Dh" \
+ parm [al] [bl];
+
+// ============================================================================================
+//
+// BIOS functions
+//
+// ============================================================================================
+
+/* CGA-compatible MSR (0x3D8) register values for first modes 0-7. */
+uint8_t cga_msr[8] = {
+ 0x2C, 0x28, 0x2D, 0x29, 0x2A, 0x2E, 0x1E, 0x29
+};
+
+/* Convert index in vga_modes[] to index in video_param_table[] for 200-line (CGA) text modes. */
+static int8_t line_to_vpti_200[8] = {
+ 0x00, 0x01, 0x02, 0x03, -1, -1, -1, 0x07
+};
+
+/* Same for 350-line (EGA) text modes. */
+static int8_t line_to_vpti_350[8] = {
+ 0x13, 0x14, 0x15, 0x16, -1, -1, -1, 0x07
+};
+
+/* Same for 400-line (VGA) text modes. */
+static int8_t line_to_vpti_400[8] = {
+ 0x17, 0x17, 0x18, 0x18, -1, -1, -1, 0x19
+};
+
+int find_vpti(uint8_t line)
+{
+ int idx;
+ uint8_t mctl;
+
+ if (vga_modes[line].class == TEXT) {
+ mctl = read_byte(BIOSMEM_SEG, BIOSMEM_MODESET_CTL);
+ if (mctl & 0x10)
+ idx = line_to_vpti_400[line];
+ else if (mctl & 0x80)
+ idx = line_to_vpti_200[line];
+ else
+ idx = line_to_vpti_350[line];
+ } else
+ idx = line_to_vpti[line];
+
+ return idx;
+}
+
+static void biosfn_load_text_user_pat(uint8_t AL, uint16_t ES, uint16_t BP, uint16_t CX, uint16_t DX, uint8_t BL, uint8_t BH);
+static void load_text_patch(uint16_t ES, uint16_t BP, uint8_t BL, uint8_t BH);
+
+void biosfn_set_video_mode(uint8_t mode)
+{// mode: Bit 7 is 1 if no clear screen
+
+ // Should we clear the screen ?
+ uint8_t noclearmem=mode&0x80;
+ uint8_t line,mmask,vpti;
+ uint8_t modeset_ctl;
+ uint8_t *palette;
+ uint16_t i;
+ uint16_t crtc_addr;
+ void __far * __far *save_area;
+ VideoParamTableEntry __far *vpt;
+
+#ifdef VBE
+ if (vbe_has_vbe_display()) {
+ // Force controller into VGA mode
+ outb(VGAREG_SEQU_ADDRESS,7);
+ outb(VGAREG_SEQU_DATA,0x00);
+ }
+#endif // def VBE
+
+ // The real mode
+ mode=mode&0x7f;
+
+ // Display switching is not supported; mono monitors aren't really either,
+ // but requests to set mode 7 are honored.
+
+ // find the entry in the video modes
+ line=find_vga_entry(mode);
+
+#ifdef VGA_DEBUG
+ printf("mode search %02x found line %02x\n",mode,line);
+#endif
+
+ if(line==0xFF)
+ return;
+
+ // Read the save area pointer.
+ save_area = (void __far *)read_dword(BIOSMEM_SEG, BIOSMEM_VS_POINTER);
+
+ vpti = find_vpti(line);
+ vpt = save_area[0];
+ vpt += vpti;
+
+#if 0 // These are unused, but perhaps they shouldn't be?
+ // Read the bios vga control
+ video_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL);
+
+ // Read the bios vga switches
+ vga_switches=read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES);
+#endif
+
+ // Read the bios mode set control
+ modeset_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL);
+
+ // Then we know the number of lines
+// FIXME
+
+ // if palette loading (bit 3 of modeset ctl = 0)
+ if((modeset_ctl&0x08)==0)
+ {// Set the PEL mask
+ outb(VGAREG_PEL_MASK,vga_modes[line].pelmask);
+
+ // Set the whole dac always, from 0
+ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+
+ // From which palette
+ switch(vga_modes[line].dacmodel)
+ {case 0:
+ palette=&palette0[0];
+ break;
+ case 1:
+ palette=&palette1[0];
+ break;
+ case 2:
+ palette=&palette2[0];
+ break;
+ case 3:
+ palette=&palette3[0];
+ break;
+ }
+ // Override for CGA text modes.
+ if(vga_modes[line].class==TEXT)
+ {
+ if(vpt->cheight == 8) // CGA
+ palette=&palette1[0];
+ }
+ // Always 256*3 values
+ for(i=0;i<0x0100;i++)
+ {if(i<=dac_regs[vga_modes[line].dacmodel])
+ {outb(VGAREG_DAC_DATA,palette[(i*3)+0]);
+ outb(VGAREG_DAC_DATA,palette[(i*3)+1]);
+ outb(VGAREG_DAC_DATA,palette[(i*3)+2]);
+ }
+ else
+ {outb(VGAREG_DAC_DATA,0);
+ outb(VGAREG_DAC_DATA,0);
+ outb(VGAREG_DAC_DATA,0);
+ }
+ }
+ if((modeset_ctl&0x02)==0x02)
+ {
+ biosfn_perform_gray_scale_summing(0x00, 0x100);
+ }
+ }
+
+ // Reset Attribute Ctl flip-flop
+ inb(VGAREG_ACTL_RESET);
+
+ // Set Attribute Ctl
+ for(i=0;i<=0x13;i++)
+ {outb(VGAREG_ACTL_ADDRESS,i);
+ outb(VGAREG_ACTL_WRITE_DATA,vpt->actl_regs[i]);
+ }
+ outb(VGAREG_ACTL_ADDRESS,0x14);
+ outb(VGAREG_ACTL_WRITE_DATA,0x00);
+
+ // Save palette into the save area if it exists.
+ if(save_area[1])
+ {
+ uint8_t __far *dyn_save;
+
+ dyn_save = save_area[1];
+ for (i = 0; i < 16; ++i)
+ dyn_save[i] = vpt->actl_regs[i];
+ dyn_save[16] = vpt->actl_regs[17];
+ }
+
+ // Set Sequencer Ctl
+ outb(VGAREG_SEQU_ADDRESS,0);
+ outb(VGAREG_SEQU_DATA,0x03);
+ for(i=1;i<=4;i++)
+ {outb(VGAREG_SEQU_ADDRESS,i);
+ outb(VGAREG_SEQU_DATA,vpt->sequ_regs[i - 1]);
+ }
+
+ // Set Grafx Ctl
+ for(i=0;i<=8;i++)
+ {outb(VGAREG_GRDC_ADDRESS,i);
+ outb(VGAREG_GRDC_DATA,vpt->grdc_regs[i]);
+ }
+
+ // Set CRTC address VGA or MDA
+ crtc_addr=vga_modes[line].memmodel==MTEXT?VGAREG_MDA_CRTC_ADDRESS:VGAREG_VGA_CRTC_ADDRESS;
+
+ // Set the misc register; may change CRTC base!
+ outb(VGAREG_WRITE_MISC_OUTPUT,vpt->miscreg);
+
+ // Disable CRTC write protection
+ outw(crtc_addr,0x0011);
+ // Set CRTC regs
+ for(i=0;i<=0x18;i++)
+ {outb(crtc_addr,i);
+ outb(crtc_addr+1,vpt->crtc_regs[i]);
+ }
+
+ // Enable video
+ outb(VGAREG_ACTL_ADDRESS,0x20);
+ inb(crtc_addr + VGAREG_ACTL_RESET - VGAREG_VGA_CRTC_ADDRESS);
+
+ if(noclearmem==0x00)
+ {
+ if(vga_modes[line].class==TEXT)
+ {
+ memsetw(vga_modes[line].sstart,0,0x0720,0x4000); // 32k
+ }
+ else
+ {
+ if(mode<0x0d)
+ {
+ memsetw(vga_modes[line].sstart,0,0x0000,0x4000); // 32k
+ }
+ else
+ {
+ outb( VGAREG_SEQU_ADDRESS, 0x02 );
+ mmask = inb( VGAREG_SEQU_DATA );
+ outb( VGAREG_SEQU_DATA, 0x0f ); // all planes
+ memsetw(vga_modes[line].sstart,0,0x0000,0x8000); // 64k
+ outb( VGAREG_SEQU_DATA, mmask );
+ }
+ }
+ }
+
+ // Set the BIOS mem
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,mode);
+ write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS,vpt->twidth);
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE,vpt->slength);
+ write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS,crtc_addr);
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS,vpt->theightm1);
+ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,vpt->cheight);
+ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,(0x60|noclearmem));
+ write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES,0xF9);
+
+ // FIXME We nearly have the good tables. to be reworked
+ write_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX,0x08); // 8 is VGA should be ok for now
+
+ if (mode <= 7)
+ {
+ write_byte(BIOSMEM_SEG, BIOSMEM_CURRENT_MSR, cga_msr[mode]); /* Like CGA reg. 0x3D8 */
+ write_byte(BIOSMEM_SEG, BIOSMEM_CURRENT_PAL, mode == 6 ? 0x3F : 0x30); /* Like CGA reg. 0x3D9*/
+ }
+
+ // Set cursor shape
+ if(vga_modes[line].class==TEXT)
+ {
+ biosfn_set_cursor_shape(0x06,0x07);
+ }
+
+ /// @todo Could be optimized to a memset since only BDA needs updating.
+ // Set cursor pos for page 0..7
+ for(i=0;i<8;i++)
+ biosfn_set_cursor_pos(i,0x0000);
+
+ // Set active page 0
+ biosfn_set_active_page(0x00);
+
+ // Write the fonts in memory
+ if(vga_modes[line].class==TEXT)
+ {
+ cso_txt __far *ovr = save_area[2];
+
+ switch (vpt->cheight) {
+ case 8:
+ biosfn_load_text_user_pat(0, 0xC000, (uint16_t)vgafont8, 256, 0, 0, vpt->cheight);
+ break;
+ case 14:
+ biosfn_load_text_user_pat(0, 0xC000, (uint16_t)vgafont14, 256, 0, 0, vpt->cheight);
+ if (mode == 7) /* 350-line EGA modes are 640 wide, only mono EGA mode is 720 wide. */
+ load_text_patch(0xC000, (uint16_t)vgafont14alt, 0, 14);
+ break;
+ default:
+ biosfn_load_text_user_pat(0, 0xC000, (uint16_t)vgafont16, 256, 0, 0, vpt->cheight);
+ load_text_patch(0xC000, (uint16_t)vgafont16alt, 0, 16);
+ }
+ if (ovr)
+ {
+#ifdef VGA_DEBUG
+ printf("Charmap override found, font at %04x:%04x\n", ovr->font_seg, ovr->font_ofs);
+#endif
+ i = 0;
+ // Does the override support current mode?
+ while (ovr->modes[i] != 0xff)
+ {
+ if (ovr->modes[i] == mode)
+ break;
+ ++i;
+ }
+ // If there is a valid font override, apply it.
+ if (ovr->modes[i] == mode)
+ {
+#ifdef VGA_DEBUG
+ printf("Loading override, %04x chars, height %02x\n", ovr->char_num, ovr->c_height);
+#endif
+ biosfn_load_text_user_pat(0x10, ovr->font_seg, ovr->font_ofs, ovr->char_num,
+ ovr->char_1st, ovr->cgen_bank, ovr->c_height);
+ }
+ }
+ vga_font_set(0x03, 0); /* Select font page mode 0. */
+ }
+
+ // Set the ints 0x1F and 0x43
+ set_int_vector(0x1f, vgafont8+128*8);
+
+ switch(vpt->cheight)
+ {case 8:
+ set_int_vector(0x43, vgafont8);
+ break;
+ case 14:
+ set_int_vector(0x43, vgafont14);
+ break;
+ case 16:
+ set_int_vector(0x43, vgafont16);
+ break;
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_copy_pl4(uint8_t xstart, uint8_t ysrc, uint8_t ydest,
+ uint8_t cols, uint8_t nbcols, uint8_t cheight)
+{
+ uint16_t src,dest;
+ uint8_t i;
+
+ src=ysrc*cheight*nbcols+xstart;
+ dest=ydest*cheight*nbcols+xstart;
+ outw(VGAREG_GRDC_ADDRESS, 0x0105);
+ for(i=0;i<cheight;i++)
+ {
+ memcpyb(0xa000,dest+i*nbcols,0xa000,src+i*nbcols,cols);
+ }
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_fill_pl4(uint8_t xstart, uint8_t ystart, uint8_t cols,
+ uint8_t nbcols, uint8_t cheight, uint8_t attr)
+{
+ uint16_t dest;
+ uint8_t i;
+
+ dest=ystart*cheight*nbcols+xstart;
+ outw(VGAREG_GRDC_ADDRESS, 0x0205);
+ for(i=0;i<cheight;i++)
+ {
+ memsetb(0xa000,dest+i*nbcols,attr,cols);
+ }
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_copy_cga(uint8_t xstart, uint8_t ysrc, uint8_t ydest,
+ uint8_t cols, uint8_t nbcols, uint8_t cheight)
+{
+ uint16_t src,dest;
+ uint8_t i;
+
+ src=((ysrc*cheight*nbcols)>>1)+xstart;
+ dest=((ydest*cheight*nbcols)>>1)+xstart;
+ for(i=0;i<cheight/2;i++)
+ {
+ memcpyb(0xb800,dest+i*nbcols,0xb800,src+i*nbcols,cols);
+ memcpyb(0xb800,0x2000+dest+i*nbcols,0xb800,0x2000+src+i*nbcols,cols);
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_fill_cga(uint8_t xstart, uint8_t ystart, uint8_t cols,
+ uint8_t nbcols, uint8_t cheight, uint8_t attr)
+{
+ uint16_t dest;
+ uint8_t i;
+
+ dest=((ystart*cheight*nbcols)>>1)+xstart;
+ for(i=0;i<cheight/2;i++)
+ {
+ memsetb(0xb800,dest+i*nbcols,attr,cols);
+ memsetb(0xb800,0x2000+dest+i*nbcols,attr,cols);
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_copy_linear(uint8_t xstart, uint8_t ysrc, uint8_t ydest,
+ uint16_t cols, uint16_t nbcols, uint8_t cheight)
+{
+ uint16_t src,dest;
+ uint8_t i;
+
+ src=((ysrc*cheight*nbcols)+xstart)*8;
+ dest=((ydest*cheight*nbcols)+xstart)*8;
+ cols*=8;
+ nbcols*=8;
+ for(i=0;i<cheight;i++)
+ {
+ memcpyb(0xa000,dest+i*nbcols,0xa000,src+i*nbcols,cols);
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void vgamem_fill_linear(uint8_t xstart, uint8_t ystart, uint16_t cols,
+ uint16_t nbcols, uint8_t cheight, uint8_t attr)
+{
+ uint16_t dest;
+ uint8_t i;
+
+ dest=((ystart*cheight*nbcols)+xstart)*8;
+ cols*=8;
+ nbcols*=8;
+ for(i=0;i<cheight;i++)
+ {
+ memsetb(0xa000,dest+i*nbcols,attr,cols);
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_scroll(uint8_t nblines, uint8_t attr, uint8_t rul, uint8_t cul,
+ uint8_t rlr, uint8_t clr, uint8_t page, uint8_t dir)
+{
+ // page == 0xFF if current
+
+ uint8_t mode,line,cheight,bpp,cols;
+ uint16_t nbcols,nbrows,i;
+ uint16_t address;
+
+ if(rul>rlr)return;
+ if(cul>clr)return;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ // Get the current page
+ if(page==0xFF)
+ page=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE);
+
+ if(rlr>=nbrows)rlr=nbrows-1;
+ if(clr>=nbcols)clr=nbcols-1;
+ if(nblines>nbrows)nblines=0;
+ cols=clr-cul+1;
+
+ if(vga_modes[line].class==TEXT)
+ {
+ // Compute the address
+ address=SCREEN_MEM_START(nbcols,nbrows,page);
+#ifdef VGA_DEBUG
+ printf("Scroll, address %04x (%04x %04x %02x)\n",address,nbrows,nbcols,page);
+#endif
+
+ if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+ {
+ memsetw(vga_modes[line].sstart,address,(uint16_t)attr*0x100+' ',nbrows*nbcols);
+ }
+ else
+ {// if Scroll up
+ if(dir==SCROLL_UP)
+ {for(i=rul;i<=rlr;i++)
+ {
+ if((i+nblines>rlr)||(nblines==0))
+ memsetw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,(uint16_t)attr*0x100+' ',cols);
+ else
+ memcpyw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,vga_modes[line].sstart,((i+nblines)*nbcols+cul)*2,cols);
+ }
+ }
+ else
+ {for(i=rlr;i>=rul;i--)
+ {
+ if((i<rul+nblines)||(nblines==0))
+ memsetw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,(uint16_t)attr*0x100+' ',cols);
+ else
+ memcpyw(vga_modes[line].sstart,address+(i*nbcols+cul)*2,vga_modes[line].sstart,((i-nblines)*nbcols+cul)*2,cols);
+ if (i>rlr) break;
+ }
+ }
+ }
+ }
+ else
+ {
+ cheight=video_param_table[line_to_vpti[line]].cheight;
+ switch(vga_modes[line].memmodel)
+ {
+ case PLANAR4:
+ case PLANAR1:
+ if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+ {
+ outw(VGAREG_GRDC_ADDRESS, 0x0205);
+ memsetb(vga_modes[line].sstart,0,attr,nbrows*nbcols*cheight);
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+ }
+ else
+ {// if Scroll up
+ if(dir==SCROLL_UP)
+ {for(i=rul;i<=rlr;i++)
+ {
+ if((i+nblines>rlr)||(nblines==0))
+ vgamem_fill_pl4(cul,i,cols,nbcols,cheight,attr);
+ else
+ vgamem_copy_pl4(cul,i+nblines,i,cols,nbcols,cheight);
+ }
+ }
+ else
+ {for(i=rlr;i>=rul;i--)
+ {
+ if((i<rul+nblines)||(nblines==0))
+ vgamem_fill_pl4(cul,i,cols,nbcols,cheight,attr);
+ else
+ vgamem_copy_pl4(cul,i-nblines,i,cols,nbcols,cheight);
+ if (i>rlr) break;
+ }
+ }
+ }
+ break;
+ case CGA:
+ bpp=vga_modes[line].pixbits;
+ if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+ {
+ memsetb(vga_modes[line].sstart,0,attr,nbrows*nbcols*cheight*bpp);
+ }
+ else
+ {
+ if(bpp==2)
+ {
+ cul<<=1;
+ cols<<=1;
+ nbcols<<=1;
+ }
+ // if Scroll up
+ if(dir==SCROLL_UP)
+ {for(i=rul;i<=rlr;i++)
+ {
+ if((i+nblines>rlr)||(nblines==0))
+ vgamem_fill_cga(cul,i,cols,nbcols,cheight,attr);
+ else
+ vgamem_copy_cga(cul,i+nblines,i,cols,nbcols,cheight);
+ }
+ }
+ else
+ {for(i=rlr;i>=rul;i--)
+ {
+ if((i<rul+nblines)||(nblines==0))
+ vgamem_fill_cga(cul,i,cols,nbcols,cheight,attr);
+ else
+ vgamem_copy_cga(cul,i-nblines,i,cols,nbcols,cheight);
+ if (i>rlr) break;
+ }
+ }
+ }
+ break;
+ case LINEAR8:
+ if(nblines==0&&rul==0&&cul==0&&rlr==nbrows-1&&clr==nbcols-1)
+ {
+ memsetb(vga_modes[line].sstart,0,attr,nbrows*nbcols*cheight*8);
+ }
+ else
+ {
+ // if Scroll up
+ if(dir==SCROLL_UP)
+ {for(i=rul;i<=rlr;i++)
+ {
+ if((i+nblines>rlr)||(nblines==0))
+ vgamem_fill_linear(cul,i,cols,nbcols,cheight,attr);
+ else
+ vgamem_copy_linear(cul,i+nblines,i,cols,nbcols,cheight);
+ }
+ }
+ else
+ {for(i=rlr;i>=rul;i--)
+ {
+ if((i<rul+nblines)||(nblines==0))
+ vgamem_fill_linear(cul,i,cols,nbcols,cheight,attr);
+ else
+ vgamem_copy_linear(cul,i-nblines,i,cols,nbcols,cheight);
+ if (i>rlr) break;
+ }
+ }
+ }
+ break;
+#ifdef VGA_DEBUG
+ default:
+ printf("Scroll in graphics mode ");
+ unimplemented();
+#endif
+ }
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void write_gfx_char_pl4(uint8_t car, uint8_t attr, uint8_t xcurs,
+ uint8_t ycurs, uint8_t nbcols, uint8_t cheight, uint8_t page)
+{
+ uint8_t i,j,mask;
+ uint8_t __far *fdata;
+ uint16_t addr,dest,src;
+
+ fdata = (void __far *)read_dword(0x00, 0x43 * 4);
+
+ addr=xcurs+ycurs*cheight*nbcols;
+ addr+=read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE)*page;
+ src = car * cheight;
+ outw(VGAREG_SEQU_ADDRESS, 0x0f02);
+ outw(VGAREG_GRDC_ADDRESS, 0x0205);
+ if(attr&0x80)
+ {
+ outw(VGAREG_GRDC_ADDRESS, 0x1803);
+ }
+ else
+ {
+ outw(VGAREG_GRDC_ADDRESS, 0x0003);
+ }
+ for(i=0;i<cheight;i++)
+ {
+ dest=addr+i*nbcols;
+ for(j=0;j<8;j++)
+ {
+ mask=0x80>>j;
+ outw(VGAREG_GRDC_ADDRESS, (mask << 8) | 0x08);
+ readx_byte(0xa000,dest);
+ if(fdata[src+i]&mask)
+ {
+ write_byte(0xa000,dest,attr&0x0f);
+ }
+ else
+ {
+ write_byte(0xa000,dest,0x00);
+ }
+ }
+ }
+ outw(VGAREG_GRDC_ADDRESS, 0xff08);
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+ outw(VGAREG_GRDC_ADDRESS, 0x0003);
+}
+
+// --------------------------------------------------------------------------------------------
+static void write_gfx_char_cga(uint8_t car, uint8_t attr, uint8_t xcurs,
+ uint8_t ycurs, uint8_t nbcols, uint8_t bpp)
+{
+ uint8_t i,j,mask,data;
+ uint8_t *fdata;
+ uint16_t addr,dest,src;
+
+ fdata = &vgafont8;
+ addr=(xcurs*bpp)+ycurs*320;
+ src = car * 8;
+ for(i=0;i<8;i++)
+ {
+ dest=addr+(i>>1)*80;
+ if (i & 1) dest += 0x2000;
+ mask = 0x80;
+ /* NB: In 1bpp modes, the attribute is ignored, only the XOR flag has meaning. */
+ if (bpp == 1)
+ {
+ if (attr & 0x80)
+ {
+ data = read_byte(0xb800,dest);
+ data ^= fdata[src+i];
+ }
+ else
+ {
+ data = fdata[src+i];
+ }
+ write_byte(0xb800,dest,data);
+ }
+ else
+ {
+ while (mask > 0)
+ {
+ if (attr & 0x80)
+ {
+ data = read_byte(0xb800,dest);
+ }
+ else
+ {
+ data = 0x00;
+ }
+ for(j=0;j<4;j++)
+ {
+ if (fdata[src+i] & mask)
+ {
+ if (attr & 0x80)
+ {
+ data ^= (attr & 0x03) << ((3-j)*2);
+ }
+ else
+ {
+ data |= (attr & 0x03) << ((3-j)*2);
+ }
+ }
+ mask >>= 1;
+ }
+ write_byte(0xb800,dest,data);
+ dest += 1;
+ }
+ }
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void write_gfx_char_lin(uint8_t car, uint8_t attr, uint8_t xcurs,
+ uint8_t ycurs, uint8_t nbcols)
+{
+ uint8_t i,j,mask,data;
+ uint8_t *fdata;
+ uint16_t addr,dest,src;
+
+ fdata = &vgafont8;
+ addr=xcurs*8+ycurs*nbcols*64;
+ src = car * 8;
+ for(i=0;i<8;i++)
+ {
+ dest=addr+i*nbcols*8;
+ mask = 0x80;
+ for(j=0;j<8;j++)
+ {
+ data = 0x00;
+ if (fdata[src+i] & mask)
+ {
+ data = attr;
+ }
+ write_byte(0xa000,dest+j,data);
+ mask >>= 1;
+ }
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_char_attr(uint8_t car, uint8_t page, uint8_t attr, uint16_t count)
+{
+ uint8_t cheight,xcurs,ycurs,mode,line,bpp;
+ uint16_t nbcols,nbrows,address;
+ uint16_t cursor,dummy;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ if(vga_modes[line].class==TEXT)
+ {
+ // Compute the address
+ address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
+
+ dummy=((uint16_t)attr<<8)+car;
+ memsetw(vga_modes[line].sstart,address,dummy,count);
+ }
+ else
+ {
+ // FIXME gfx mode not complete
+ cheight=video_param_table[line_to_vpti[line]].cheight;
+ bpp=vga_modes[line].pixbits;
+ while(count-->0)
+ {
+ switch(vga_modes[line].memmodel)
+ {
+ case PLANAR1:
+ attr |= 0x01; /* Color is ignored in 1bpp modes, always foreground. */
+ case PLANAR4:
+ write_gfx_char_pl4(car,attr,xcurs,ycurs,nbcols,cheight,page);
+ break;
+ case CGA:
+ write_gfx_char_cga(car,attr,xcurs,ycurs,nbcols,bpp);
+ break;
+ case LINEAR8:
+ write_gfx_char_lin(car,attr,xcurs,ycurs,nbcols);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unimplemented();
+#endif
+ }
+ xcurs++;
+ }
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_char_only(uint8_t car, uint8_t page, uint8_t attr, uint16_t count)
+{
+ uint8_t cheight,xcurs,ycurs,mode,line,bpp;
+ uint16_t nbcols,nbrows,address;
+ uint16_t cursor,dummy;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ if(vga_modes[line].class==TEXT)
+ {
+ // Compute the address
+ address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
+
+ while(count-->0)
+ {write_byte(vga_modes[line].sstart,address,car);
+ address+=2;
+ }
+ }
+ else
+ {
+ // FIXME gfx mode not complete
+ cheight=video_param_table[line_to_vpti[line]].cheight;
+ bpp=vga_modes[line].pixbits;
+ while(count-->0)
+ {
+ switch(vga_modes[line].memmodel)
+ {
+ case PLANAR1:
+ attr |= 0x01; /* Color is ignored in 1bpp modes, always foreground. */
+ case PLANAR4:
+ write_gfx_char_pl4(car,attr,xcurs,ycurs,nbcols,cheight,page);
+ break;
+ case CGA:
+ write_gfx_char_cga(car,attr,xcurs,ycurs,nbcols,bpp);
+ break;
+ case LINEAR8:
+ write_gfx_char_lin(car,attr,xcurs,ycurs,nbcols);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unimplemented();
+#endif
+ }
+ xcurs++;
+ }
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_pixel(uint8_t BH, uint8_t AL, uint16_t CX, uint16_t DX)
+{
+ uint8_t mode,line,mask,attr,data;
+ uint16_t addr;
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+ if(vga_modes[line].class==TEXT)return;
+
+ switch(vga_modes[line].memmodel)
+ {
+ case PLANAR4:
+ case PLANAR1:
+ addr = CX/8+DX*read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+ addr += read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE) * BH;
+ mask = 0x80 >> (CX & 0x07);
+ outw(VGAREG_GRDC_ADDRESS, (mask << 8) | 0x08);
+ outw(VGAREG_GRDC_ADDRESS, 0x0205);
+ data = readx_byte(0xa000,addr);
+ if (AL & 0x80)
+ {
+ outw(VGAREG_GRDC_ADDRESS, 0x1803);
+ }
+ write_byte(0xa000,addr,AL);
+ outw(VGAREG_GRDC_ADDRESS, 0xff08);
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+ outw(VGAREG_GRDC_ADDRESS, 0x0003);
+ break;
+ case CGA:
+ if(vga_modes[line].pixbits==2)
+ {
+ addr=(CX>>2)+(DX>>1)*80;
+ }
+ else
+ {
+ addr=(CX>>3)+(DX>>1)*80;
+ }
+ if (DX & 1) addr += 0x2000;
+ data = read_byte(0xb800,addr);
+ if(vga_modes[line].pixbits==2)
+ {
+ attr = (AL & 0x03) << ((3 - (CX & 0x03)) * 2);
+ mask = 0x03 << ((3 - (CX & 0x03)) * 2);
+ }
+ else
+ {
+ attr = (AL & 0x01) << (7 - (CX & 0x07));
+ mask = 0x01 << (7 - (CX & 0x07));
+ }
+ if (AL & 0x80)
+ {
+ data ^= attr;
+ }
+ else
+ {
+ data &= ~mask;
+ data |= attr;
+ }
+ write_byte(0xb800,addr,data);
+ break;
+ case LINEAR8:
+ addr=CX+DX*(read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)*8);
+ write_byte(0xa000,addr,AL);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unimplemented();
+#endif
+ }
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_teletype(uint8_t car, uint8_t page, uint8_t attr, uint8_t flag)
+{// flag = WITH_ATTR / NO_ATTR
+
+ uint8_t cheight,xcurs,ycurs,mode,line,bpp;
+ uint16_t nbcols,nbrows,address;
+ uint16_t cursor,dummy;
+
+ // special case if page is 0xff, use current page
+ if(page==0xff)
+ page=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE);
+
+ // Get the mode
+ mode=read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ line=find_vga_entry(mode);
+ if(line==0xFF)return;
+
+ // Get the cursor pos for the page
+ vga_get_cursor_pos(page,&dummy,&cursor);
+ xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
+
+ // Get the dimensions
+ nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
+ nbcols=read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+
+ switch(car)
+ {
+ case '\a': // ASCII 0x07, BEL
+ //FIXME should beep
+ break;
+
+ case '\b': // ASCII 0x08, BS
+ if(xcurs>0)xcurs--;
+ break;
+
+ case '\n': // ASCII 0x0A, LF
+ ycurs++;
+ break;
+
+ case '\r': // ASCII 0x0D, CR
+ xcurs=0;
+ break;
+
+ default:
+
+ if(vga_modes[line].class==TEXT)
+ {
+ // Compute the address
+ address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
+
+ // Write the char
+ write_byte(vga_modes[line].sstart,address,car);
+
+ if(flag==WITH_ATTR)
+ write_byte(vga_modes[line].sstart,address+1,attr);
+ }
+ else
+ {
+ // FIXME gfx mode not complete
+ cheight=video_param_table[line_to_vpti[line]].cheight;
+ bpp=vga_modes[line].pixbits;
+ switch(vga_modes[line].memmodel)
+ {
+ case PLANAR1:
+ attr |= 0x01; /* Color is ignored in 1bpp modes, always foreground. */
+ case PLANAR4:
+ write_gfx_char_pl4(car,attr,xcurs,ycurs,nbcols,cheight,page);
+ break;
+ case CGA:
+ write_gfx_char_cga(car,attr,xcurs,ycurs,nbcols,bpp);
+ break;
+ case LINEAR8:
+ write_gfx_char_lin(car,attr,xcurs,ycurs,nbcols);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unimplemented();
+#endif
+ }
+ }
+ xcurs++;
+ // Do we need to wrap ?
+ if(xcurs==nbcols)
+ {xcurs=0;
+ ycurs++;
+ }
+ }
+
+ // Do we need to scroll ?
+ if(ycurs==nbrows)
+ {
+ if(vga_modes[line].class==TEXT)
+ {
+ address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+(ycurs-1)*nbcols)*2;
+ attr=read_byte(vga_modes[line].sstart,address+1);
+ biosfn_scroll(0x01,attr,0,0,nbrows-1,nbcols-1,page,SCROLL_UP);
+ }
+ else
+ {
+ biosfn_scroll(0x01,0x00,0,0,nbrows-1,nbcols-1,page,SCROLL_UP);
+ }
+ ycurs-=1;
+ }
+
+ // Set the cursor for the page
+ cursor=ycurs; cursor<<=8; cursor+=xcurs;
+ biosfn_set_cursor_pos(page,cursor);
+}
+
+// --------------------------------------------------------------------------------------------
+static void get_font_access(void)
+{
+ outw(VGAREG_GRDC_ADDRESS, 0x0005);
+ outb(VGAREG_GRDC_ADDRESS, 0x06);
+ outw(VGAREG_GRDC_ADDRESS, (((0x04 | (inb(VGAREG_GRDC_DATA) & 0x01)) << 8) | 0x06));
+ outw(VGAREG_SEQU_ADDRESS, 0x0402);
+ outw(VGAREG_SEQU_ADDRESS, 0x0604);
+}
+
+static void release_font_access(void)
+{
+ outw(VGAREG_GRDC_ADDRESS, (((0x0a | ((inb(VGAREG_READ_MISC_OUTPUT) & 0x01) << 2)) << 8) | 0x06));
+ outw(VGAREG_GRDC_ADDRESS, 0x1005);
+ outw(VGAREG_SEQU_ADDRESS, 0x0302);
+ outw(VGAREG_SEQU_ADDRESS, 0x0204);
+}
+
+static void set_scan_lines(uint8_t lines)
+{
+ uint16_t crtc_addr,cols,vde;
+ uint8_t crtc_r9,ovl,rows;
+
+ crtc_addr = read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
+ outb(crtc_addr, 0x09);
+ crtc_r9 = inb(crtc_addr+1);
+ crtc_r9 = (crtc_r9 & 0xe0) | (lines - 1);
+ outb(crtc_addr+1, crtc_r9);
+ if(lines==8)
+ {
+ biosfn_set_cursor_shape(0x06,0x07);
+ }
+ else
+ {
+ biosfn_set_cursor_shape(lines-4,lines-3);
+ }
+ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, lines);
+ outb(crtc_addr, 0x12);
+ vde = inb(crtc_addr+1);
+ outb(crtc_addr, 0x07);
+ ovl = inb(crtc_addr+1);
+ vde += (((ovl & 0x02) << 7) + ((ovl & 0x40) << 3) + 1);
+ rows = vde / lines;
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, rows-1);
+ cols = read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, rows * cols * 2);
+}
+
+static void biosfn_set_font_block(uint8_t BL)
+{
+ outw(VGAREG_SEQU_ADDRESS, 0x0100);
+ outw(VGAREG_SEQU_ADDRESS, 0x0003 | (BL << 8));
+ outw(VGAREG_SEQU_ADDRESS, 0x0300);
+}
+
+static void load_text_patch(uint16_t ES, uint16_t BP, uint8_t BL, uint8_t BH)
+{
+ uint16_t blockaddr, dest, src;
+ uint8_t __far *pat;
+
+ get_font_access();
+
+ blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
+ pat = ES :> (uint8_t *)BP;
+ src = BP + 1;
+ while (*pat) {
+ dest = blockaddr + *pat * 32;
+ memcpyb(0xA000, dest, ES, src, BH);
+ src += BH + 1;
+ pat += BH + 1;
+ }
+
+ release_font_access();
+}
+
+static void biosfn_load_text_user_pat(uint8_t AL, uint16_t ES, uint16_t BP, uint16_t CX,
+ uint16_t DX, uint8_t BL, uint8_t BH)
+{
+ uint16_t blockaddr,dest,i,src;
+
+ get_font_access();
+ blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
+ for(i=0;i<CX;i++)
+ {
+ src = BP + i * BH;
+ dest = blockaddr + (DX + i) * 32;
+ memcpyb(0xA000, dest, ES, src, BH);
+ }
+ release_font_access();
+ if(AL>=0x10)
+ {
+ set_scan_lines(BH);
+ }
+}
+
+static void biosfn_load_gfx_8_8_chars(uint16_t ES, uint16_t BP)
+{
+ set_int_vector(0x1F, ES:>BP);
+}
+
+static void set_gfx_font(void _far *font, uint16_t cheight, uint8_t row_code, uint8_t rows)
+{
+ static uint8_t row_tbl[] = { 0, 14, 25, 43 };
+
+ set_int_vector(0x43, font);
+ if (row_code) {
+ if (row_code > 3)
+ row_code = 2; /* Default to 25 rows. */
+ rows = row_tbl[row_code];
+ }
+ /* Else 'rows' used as is. */
+
+ write_word(BIOSMEM_SEG, BIOSMEM_CHAR_HEIGHT, cheight);
+ write_word(BIOSMEM_SEG, BIOSMEM_NB_ROWS, rows - 1);
+}
+
+static void biosfn_load_gfx_user_chars(uint16_t ES, uint16_t BP, uint16_t CX,
+ uint8_t BL, uint8_t DL)
+{
+ set_gfx_font(ES:>BP, CX, BL, DL);
+}
+
+/* Some references (RBIL) suggest that only BL is used; that is wrong,
+ * all of these subfunctions will use DL if BL is zero.
+ */
+static void biosfn_load_gfx_8_14_chars(uint8_t BL, uint8_t DL)
+{
+ set_gfx_font(vgafont14, 14, BL, DL);
+}
+static void biosfn_load_gfx_8_8_dd_chars(uint8_t BL, uint8_t DL)
+{
+ set_gfx_font(vgafont8, 8, BL, DL);
+}
+static void biosfn_load_gfx_8_16_chars(uint8_t BL, uint8_t DL)
+{
+ set_gfx_font(vgafont16, 16, BL, DL);
+}
+// --------------------------------------------------------------------------------------------
+static void biosfn_alternate_prtsc(void)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+// --------------------------------------------------------------------------------------------
+static void biosfn_set_txt_lines(uint8_t AL)
+{
+ uint8_t mctl;
+
+ /* Read byte at 40:89. */
+ mctl = read_byte(BIOSMEM_SEG, BIOSMEM_MODESET_CTL);
+ mctl = mctl & 0x6F; /* Clear 400/200 line flags. */
+
+ switch (AL) /* AL was already validated to be in 0-2 range. */
+ {
+ case 0: /* 200 lines. */
+ mctl |= 0x80;
+ break;
+ case 2: /* 400 lines. */
+ mctl |= 0x10;
+ break;
+ }
+ write_byte(BIOSMEM_SEG, BIOSMEM_MODESET_CTL, mctl);
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_switch_video_interface (AL,ES,DX) uint8_t AL;uint16_t ES;uint16_t DX;
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+static void biosfn_enable_video_refresh_control(uint8_t AL)
+{
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_write_string(uint8_t flag, uint8_t page, uint8_t attr, uint16_t count,
+ uint8_t row, uint8_t col, uint16_t seg, uint16_t offset)
+{
+ uint16_t newcurs,oldcurs,dummy;
+ uint8_t car;
+
+ // Read curs info for the page
+ vga_get_cursor_pos(page,&dummy,&oldcurs);
+
+ // if row=0xff special case : use current cursor position
+ if(row==0xff)
+ {col=oldcurs&0x00ff;
+ row=(oldcurs&0xff00)>>8;
+ }
+
+ newcurs=row; newcurs<<=8; newcurs+=col;
+ biosfn_set_cursor_pos(page,newcurs);
+
+ while(count--!=0)
+ {
+ car=read_byte(seg,offset++);
+ if((flag&0x02)!=0)
+ attr=read_byte(seg,offset++);
+
+ biosfn_write_teletype(car,page,attr,WITH_ATTR);
+ }
+
+ // Set back curs pos
+ if((flag&0x01)==0)
+ biosfn_set_cursor_pos(page,oldcurs);
+}
+
+// --------------------------------------------------------------------------------------------
+static void biosfn_read_state_info(uint16_t BX, uint16_t ES, uint16_t DI)
+{
+ uint16_t pg_sz;
+ uint16_t scans;
+ uint8_t mode;
+ uint8_t mctl;
+ uint8_t temp;
+
+ mode = read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE);
+ pg_sz = read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE);
+ // Address of static functionality table
+ write_dword(ES,DI+0x00, (uint32_t)(void __far *)static_functionality);
+
+ // A lot is a straight copy from the BDA. Note that the number
+ // of character rows in the BDA is zero-based but one-based in
+ // the dynamic state area
+ memcpyb(ES,DI+0x04,BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,30);
+ write_byte(ES,DI+0x22,read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1);
+ memcpyb(ES,DI+0x23,BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT,2);
+
+ write_byte(ES,DI+0x25,read_byte(BIOSMEM_SEG,BIOSMEM_DCC_INDEX));
+ write_byte(ES,DI+0x26,0); // Alternate display code
+ write_word(ES,DI+0x27,16); // Number of colors
+ write_byte(ES,DI+0x29,8); // Number of pages
+ write_byte(ES,DI+0x2a,2); // Vertical resolution specifier
+ write_byte(ES,DI+0x2b,0); // Primary font block
+ write_byte(ES,DI+0x2c,0); // Secondary font block
+ write_byte(ES,DI+0x2d,0x21);
+ write_byte(ES,DI+0x31,3); // 256K video RAM
+ write_byte(ES,DI+0x32,0); // Save pointer state information
+
+ mctl = read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL);
+
+ /* Extract and write the vertical resolution specifier bits. */
+ scans = ((mctl & 0x80) >> 6) | ((mctl & 0x10) >> 4);
+ switch (scans) {
+ case 0: temp = 1; break; /* 350 lines */
+ case 1: temp = 2; break; /* 400 lines */
+ default:
+ case 2: temp = 0; break; /* 200 lines */
+ }
+ write_byte(ES,DI+0x2a,temp);
+
+ /* Patch up the data for graphics modes. */
+ if (mode >= 0x0E && mode <= 0x12) {
+ if (pg_sz)
+ write_byte(ES,DI+0x29,16384/(pg_sz >> 2));
+ } else if (mode == 0x13) {
+ write_byte(ES,DI+0x29,1); /* Just one page due to chaining */
+ write_word(ES,DI+0x27,256); /* But 256!! colors!!! */
+ } else if (mode >= 4 && mode <= 6) {
+ /* CGA modes. */
+ if (pg_sz)
+ write_byte(ES,DI+0x29,16384/pg_sz);
+ write_word(ES,DI+0x27,4);
+ }
+ if (mode == 6 || mode == 0x11)
+ write_word(ES,DI+0x27,2); /* 2-color modes. */
+
+ if ((mode >= 4) && (mode != 7)) {
+ write_byte(ES,DI+0x2d,0x01);
+ scans = (read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1) * read_byte(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT);
+ switch (scans) {
+ case 200: temp = 0; break;
+ case 350: temp = 1; break;
+ case 400: temp = 2; break;
+ default:
+ case 480: temp = 3; break;
+ }
+ write_byte(ES,DI+0x2a,temp);
+ }
+
+ memsetb(ES,DI+0x33,0,13);
+}
+
+// --------------------------------------------------------------------------------------------
+uint16_t biosfn_read_video_state_size2(uint16_t state)
+{
+ uint16_t size;
+
+ size = 0;
+ if (state & 1)
+ size += 0x46;
+
+ if (state & 2)
+ size += (5 + 8 + 5) * 2 + 6;
+
+ if (state & 4)
+ size += 3 + 256 * 3 + 1;
+
+ return size;
+}
+
+static void vga_get_video_state_size(uint16_t state, uint16_t STACK_BASED *size)
+{
+ /* The size is the number of 64-byte blocks required to save the state. */
+ *size = (biosfn_read_video_state_size2(state) + 63) / 64;
+}
+
+uint16_t biosfn_save_video_state(uint16_t CX, uint16_t ES, uint16_t BX)
+{
+ uint16_t i, crtc_addr, ar_index;
+
+ crtc_addr = read_word(BIOSMEM_SEG, BIOSMEM_CRTC_ADDRESS);
+ if (CX & 1) {
+ write_byte(ES, BX, inb(VGAREG_SEQU_ADDRESS)); BX++;
+ write_byte(ES, BX, inb(crtc_addr)); BX++;
+ write_byte(ES, BX, inb(VGAREG_GRDC_ADDRESS)); BX++;
+ inb(VGAREG_ACTL_RESET);
+ ar_index = inb(VGAREG_ACTL_ADDRESS);
+ write_byte(ES, BX, ar_index); BX++;
+ write_byte(ES, BX, inb(VGAREG_READ_FEATURE_CTL)); BX++;
+
+ for(i=1;i<=4;i++){
+ outb(VGAREG_SEQU_ADDRESS, i);
+ write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
+ }
+ outb(VGAREG_SEQU_ADDRESS, 0);
+ write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
+
+ for(i=0;i<=0x18;i++) {
+ outb(crtc_addr,i);
+ write_byte(ES, BX, inb(crtc_addr+1)); BX++;
+ }
+
+ for(i=0;i<=0x13;i++) {
+ inb(VGAREG_ACTL_RESET); /* Reads do not toggle flip-flop! */
+ outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
+ write_byte(ES, BX, inb(VGAREG_ACTL_READ_DATA)); BX++;
+ }
+ inb(VGAREG_ACTL_RESET);
+
+ for(i=0;i<=8;i++) {
+ outb(VGAREG_GRDC_ADDRESS,i);
+ write_byte(ES, BX, inb(VGAREG_GRDC_DATA)); BX++;
+ }
+
+ write_word(ES, BX, crtc_addr); BX+= 2;
+
+ /* XXX: read plane latches */
+ write_byte(ES, BX, 0); BX++;
+ write_byte(ES, BX, 0); BX++;
+ write_byte(ES, BX, 0); BX++;
+ write_byte(ES, BX, 0); BX++;
+ }
+ if (CX & 2) {
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE)); BX++;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)); BX += 2;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE)); BX += 2;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS)); BX += 2;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)); BX++;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT)); BX += 2;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL)); BX++;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES)); BX++;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL)); BX++;
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE)); BX += 2;
+ for(i=0;i<8;i++) {
+ write_word(ES, BX, read_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i));
+ BX += 2;
+ }
+ write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START)); BX += 2;
+ write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE)); BX++;
+ /* current font */
+ write_word(ES, BX, read_word(0, 0x1f * 4)); BX += 2;
+ write_word(ES, BX, read_word(0, 0x1f * 4 + 2)); BX += 2;
+ write_word(ES, BX, read_word(0, 0x43 * 4)); BX += 2;
+ write_word(ES, BX, read_word(0, 0x43 * 4 + 2)); BX += 2;
+ }
+ if (CX & 4) {
+ /* XXX: check this */
+ write_byte(ES, BX, inb(VGAREG_DAC_STATE)); BX++; /* read/write mode dac */
+ write_byte(ES, BX, inb(VGAREG_DAC_WRITE_ADDRESS)); BX++; /* pix address */
+ write_byte(ES, BX, inb(VGAREG_PEL_MASK)); BX++;
+ // Set the whole dac always, from 0
+ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+ for(i=0;i<256*3;i++) {
+ write_byte(ES, BX, inb(VGAREG_DAC_DATA)); BX++;
+ }
+ write_byte(ES, BX, 0); BX++; /* color select register */
+ }
+ return BX;
+}
+
+uint16_t biosfn_restore_video_state(uint16_t CX, uint16_t ES, uint16_t BX)
+{
+ uint16_t i, crtc_addr, v, addr1, ar_index;
+
+ if (CX & 1) {
+ // Reset Attribute Ctl flip-flop
+ inb(VGAREG_ACTL_RESET);
+
+ crtc_addr = read_word(ES, BX + 0x40);
+ addr1 = BX;
+ BX += 5;
+
+ for(i=1;i<=4;i++){
+ outb(VGAREG_SEQU_ADDRESS, i);
+ outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
+ }
+ outb(VGAREG_SEQU_ADDRESS, 0);
+ outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
+
+ // select crtc base address
+ v = inb(VGAREG_READ_MISC_OUTPUT) & ~0x01;
+ if (crtc_addr == 0x3d4)
+ v |= 0x01;
+ outb(VGAREG_WRITE_MISC_OUTPUT, v);
+
+ // Disable CRTC write protection
+ outw(crtc_addr,0x0011);
+ // Set CRTC regs
+ for(i=0;i<=0x18;i++) {
+ if (i != 0x11) {
+ outb(crtc_addr,i);
+ outb(crtc_addr+1, read_byte(ES, BX));
+ }
+ BX++;
+ }
+ // enable write protection if needed
+ outb(crtc_addr, 0x11);
+ outb(crtc_addr+1, read_byte(ES, BX - 0x18 + 0x11));
+
+ // Set Attribute Ctl
+ ar_index = read_byte(ES, addr1 + 0x03);
+ inb(VGAREG_ACTL_RESET);
+ for(i=0;i<=0x13;i++) {
+ outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
+ outb(VGAREG_ACTL_WRITE_DATA, read_byte(ES, BX)); BX++;
+ }
+ outb(VGAREG_ACTL_ADDRESS, ar_index);
+ inb(VGAREG_ACTL_RESET);
+
+ for(i=0;i<=8;i++) {
+ outb(VGAREG_GRDC_ADDRESS,i);
+ outb(VGAREG_GRDC_DATA, read_byte(ES, BX)); BX++;
+ }
+ BX += 2; /* crtc_addr */
+ BX += 4; /* plane latches */
+
+ outb(VGAREG_SEQU_ADDRESS, read_byte(ES, addr1)); addr1++;
+ outb(crtc_addr, read_byte(ES, addr1)); addr1++;
+ outb(VGAREG_GRDC_ADDRESS, read_byte(ES, addr1)); addr1++;
+ addr1++;
+ outb(crtc_addr - 0x4 + 0xa, read_byte(ES, addr1)); addr1++;
+ }
+ if (CX & 2) {
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE, read_byte(ES, BX)); BX++;
+ write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS, read_word(ES, BX)); BX += 2;
+ write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, read_word(ES, BX)); BX += 2;
+ write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS, read_word(ES, BX)); BX += 2;
+ write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, read_byte(ES, BX)); BX++;
+ write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, read_word(ES, BX)); BX += 2;
+ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL, read_byte(ES, BX)); BX++;
+ write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES, read_byte(ES, BX)); BX++;
+ write_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL, read_byte(ES, BX)); BX++;
+ write_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE, read_word(ES, BX)); BX += 2;
+ for(i=0;i<8;i++) {
+ write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i, read_word(ES, BX));
+ BX += 2;
+ }
+ write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START, read_word(ES, BX)); BX += 2;
+ write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE, read_byte(ES, BX)); BX++;
+ /* current font */
+ write_word(0, 0x1f * 4, read_word(ES, BX)); BX += 2;
+ write_word(0, 0x1f * 4 + 2, read_word(ES, BX)); BX += 2;
+ write_word(0, 0x43 * 4, read_word(ES, BX)); BX += 2;
+ write_word(0, 0x43 * 4 + 2, read_word(ES, BX)); BX += 2;
+ }
+ if (CX & 4) {
+ BX++;
+ v = read_byte(ES, BX); BX++;
+ outb(VGAREG_PEL_MASK, read_byte(ES, BX)); BX++;
+ // Set the whole dac always, from 0
+ outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
+ for(i=0;i<256*3;i++) {
+ outb(VGAREG_DAC_DATA, read_byte(ES, BX)); BX++;
+ }
+ BX++;
+ outb(VGAREG_DAC_WRITE_ADDRESS, v);
+ }
+ return BX;
+}
+
+// ============================================================================================
+//
+// Video Utils
+//
+// ============================================================================================
+
+// --------------------------------------------------------------------------------------------
+static uint8_t find_vga_entry(uint8_t mode)
+{
+ uint8_t i,line=0xFF;
+ for(i=0;i<=MODE_MAX;i++)
+ if(vga_modes[i].svgamode==mode)
+ {line=i;
+ break;
+ }
+ return line;
+}
+
+/* =========================================================== */
+/*
+ * Misc Utils
+*/
+/* =========================================================== */
+
+/* This function is used for planar VGA memory reads to defeat the
+ * optimizer. We must read exactly one byte, otherwise the screen
+ * may be corrupted.
+ */
+uint8_t readx_byte(uint16_t seg, uint16_t offset)
+{
+ return( *(seg:>(uint8_t *)offset) );
+}
+
+#ifdef VGA_DEBUG
+void __cdecl unimplemented()
+{
+ printf("--> Unimplemented\n");
+}
+
+void __cdecl unknown()
+{
+ printf("--> Unknown int10\n");
+}
+
+#undef VBE_PRINTF_PORT
+#define VBE_PRINTF_PORT 0x504
+
+// --------------------------------------------------------------------------------------------
+void __cdecl printf(char *s, ...)
+{
+ char c;
+ Boolean in_format;
+ unsigned format_width, i;
+ uint16_t arg, digit, nibble;
+ uint16_t STACK_BASED *arg_ptr;
+
+ arg_ptr = (uint16_t STACK_BASED *)&s;
+
+ in_format = 0;
+ format_width = 0;
+
+ while (c = *s) {
+ if (c == '%') {
+ in_format = 1;
+ format_width = 0;
+ } else if (in_format) {
+ if ((c >= '0') && (c <= '9')) {
+ format_width = (format_width * 10) + (c - '0');
+ } else if (c == 'x') {
+ arg_ptr++; // increment to next arg
+ arg = *arg_ptr;
+ if (format_width == 0)
+ format_width = 4;
+ i = 0;
+ digit = format_width - 1;
+ for (i = 0; i < format_width; i++) {
+ nibble = (arg >> (4 * digit)) & 0x000f;
+ if (nibble <= 9)
+ outb(VBE_PRINTF_PORT, nibble + '0');
+ else
+ outb(VBE_PRINTF_PORT, (nibble - 10) + 'A');
+ digit--;
+ }
+ in_format = 0;
+ }
+ //else if (c == 'd') {
+ // in_format = 0;
+ // }
+ } else {
+ outb(VBE_PRINTF_PORT, c);
+ }
+ ++s;
+ }
+}
+#endif
+
+/// @todo rearrange, call only from VBE module?
+extern void vbe_biosfn_return_controller_information(uint16_t STACK_BASED *AX, uint16_t ES, uint16_t DI);
+extern void vbe_biosfn_return_mode_information(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t ES, uint16_t DI);
+extern void vbe_biosfn_set_mode(uint16_t STACK_BASED *AX, uint16_t BX, uint16_t ES, uint16_t DI);
+extern void vbe_biosfn_save_restore_state(uint16_t STACK_BASED *AX, uint16_t CX, uint16_t DX, uint16_t ES, uint16_t STACK_BASED *BX);
+extern void vbe_biosfn_get_set_scanline_length(uint16_t STACK_BASED *AX, uint16_t STACK_BASED *BX, uint16_t STACK_BASED *CX, uint16_t STACK_BASED *DX);
+extern void private_biosfn_custom_mode(uint16_t STACK_BASED *AX, uint16_t STACK_BASED *BX, uint16_t STACK_BASED *CX, uint16_t STACK_BASED *DX);
+
+
+// --------------------------------------------------------------------------------------------
+/*
+ * int10 main dispatcher
+ */
+void __cdecl int10_func(uint16_t DI, uint16_t SI, uint16_t BP, uint16_t SP, uint16_t BX,
+ uint16_t DX, uint16_t CX, uint16_t AX, uint16_t DS, uint16_t ES, uint16_t FLAGS)
+{
+
+ // BIOS functions
+ switch(GET_AH())
+ {
+ case 0x00:
+ biosfn_set_video_mode(GET_AL());
+ switch(GET_AL()&0x7F)
+ {case 6:
+ SET_AL(0x3F);
+ break;
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 7:
+ SET_AL(0x30);
+ break;
+ default:
+ SET_AL(0x20);
+ }
+ break;
+ case 0x01:
+ biosfn_set_cursor_shape(GET_CH(),GET_CL());
+ break;
+ case 0x02:
+ biosfn_set_cursor_pos(GET_BH(),DX);
+ break;
+ case 0x03:
+ vga_get_cursor_pos(GET_BH(), &CX, &DX);
+ break;
+ case 0x04:
+ // Read light pen pos (unimplemented)
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+ AX=0x00;
+ BX=0x00;
+ CX=0x00;
+ DX=0x00;
+ break;
+ case 0x05:
+ biosfn_set_active_page(GET_AL());
+ break;
+ case 0x06:
+ biosfn_scroll(GET_AL(),GET_BH(),GET_CH(),GET_CL(),GET_DH(),GET_DL(),0xFF,SCROLL_UP);
+ break;
+ case 0x07:
+ biosfn_scroll(GET_AL(),GET_BH(),GET_CH(),GET_CL(),GET_DH(),GET_DL(),0xFF,SCROLL_DOWN);
+ break;
+ case 0x08:
+ vga_read_char_attr(GET_BH(), &AX);
+ break;
+ case 0x09:
+ biosfn_write_char_attr(GET_AL(),GET_BH(),GET_BL(),CX);
+ break;
+ case 0x0A:
+ biosfn_write_char_only(GET_AL(),GET_BH(),GET_BL(),CX);
+ break;
+ case 0x0C:
+ biosfn_write_pixel(GET_BH(),GET_AL(),CX,DX);
+ break;
+ case 0x0D:
+ vga_read_pixel(GET_BH(), CX, DX, &AX);
+ break;
+ case 0x0E:
+ // Ralf Brown Interrupt list is WRONG on bh(page)
+ // We do output only on the current page !
+#ifdef VGA_DEBUG
+ printf("write_teletype %02x\n", GET_AL());
+#endif
+
+ biosfn_write_teletype(GET_AL(),0xff,GET_BL(),NO_ATTR);
+ break;
+ case 0x10:
+ // All other functions of group AH=0x10 rewritten in assembler
+ biosfn_perform_gray_scale_summing(BX,CX);
+ break;
+ case 0x11:
+ switch(GET_AL())
+ {
+ case 0x00:
+ case 0x10:
+ biosfn_load_text_user_pat(GET_AL(),ES,BP,CX,DX,GET_BL(),GET_BH());
+ break;
+ case 0x01:
+ case 0x11:
+ biosfn_load_text_user_pat(GET_AL(), 0xC000, (uint16_t)vgafont14, 256, 0, GET_BL(), 14);
+ break;
+ case 0x02:
+ case 0x12:
+ biosfn_load_text_user_pat(GET_AL(), 0xC000, (uint16_t)vgafont8, 256, 0, GET_BL(), 8);
+ break;
+ case 0x03:
+ biosfn_set_font_block(GET_BL());
+ break;
+ case 0x04:
+ case 0x14:
+ biosfn_load_text_user_pat(GET_AL(), 0xC000, (uint16_t)vgafont16, 256, 0, GET_BL(), 16);
+ break;
+ case 0x20:
+ biosfn_load_gfx_8_8_chars(ES,BP);
+ break;
+ case 0x21:
+ biosfn_load_gfx_user_chars(ES,BP,CX,GET_BL(),GET_DL());
+ break;
+ case 0x22:
+ biosfn_load_gfx_8_14_chars(GET_BL(),GET_DL());
+ break;
+ case 0x23:
+ biosfn_load_gfx_8_8_dd_chars(GET_BL(),GET_DL());
+ break;
+ case 0x24:
+ biosfn_load_gfx_8_16_chars(GET_BL(),GET_DL());
+ break;
+ case 0x30:
+ vga_get_font_info(GET_BH(), &ES, &BP, &CX, &DX);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unknown();
+#endif
+ }
+
+ break;
+ case 0x12:
+ switch(GET_BL())
+ {
+ case 0x20:
+ biosfn_alternate_prtsc();
+ break;
+ case 0x30:
+ if (GET_AL() <= 2) {
+ biosfn_set_txt_lines(GET_AL());
+ SET_AL(0x12);
+ }
+ break;
+ case 0x34: /* CGA text cursor emulation control. */
+ if (GET_AL() < 2) {
+ write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL,
+ (read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL) & ~1) | GET_AL());
+ SET_AL(0x12);
+ }
+ else
+ SET_AL(0); /* Invalid argument. */
+ break;
+ case 0x35:
+ biosfn_switch_video_interface(GET_AL(),ES,DX);
+ SET_AL(0x12);
+ break;
+ case 0x36:
+ biosfn_enable_video_refresh_control(GET_AL());
+ SET_AL(0x12);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unknown();
+#endif
+ }
+ break;
+ case 0x13:
+ biosfn_write_string(GET_AL(),GET_BH(),GET_BL(),CX,GET_DH(),GET_DL(),ES,BP);
+ break;
+ case 0x1B:
+ biosfn_read_state_info(BX,ES,DI);
+ SET_AL(0x1B);
+ break;
+ case 0x1C:
+ switch(GET_AL())
+ {
+ case 0x00:
+ vga_get_video_state_size(CX,&BX);
+ break;
+ case 0x01:
+ biosfn_save_video_state(CX,ES,BX);
+ break;
+ case 0x02:
+ biosfn_restore_video_state(CX,ES,BX);
+ break;
+#ifdef VGA_DEBUG
+ default:
+ unknown();
+#endif
+ }
+ SET_AL(0x1C);
+ break;
+
+#ifdef VBE
+ case 0x4f:
+ if (vbe_has_vbe_display()) {
+ switch(GET_AL())
+ {
+ case 0x00:
+ vbe_biosfn_return_controller_information(&AX,ES,DI);
+ break;
+ case 0x01:
+ vbe_biosfn_return_mode_information(&AX,CX,ES,DI);
+ break;
+ case 0x02:
+ vbe_biosfn_set_mode(&AX,BX,ES,DI);
+ break;
+ case 0x04:
+ vbe_biosfn_save_restore_state(&AX, CX, DX, ES, &BX);
+ break;
+ case 0x06:
+ vbe_biosfn_get_set_scanline_length(&AX, &BX, &CX, &DX);
+ break;
+ case 0x09:
+ //FIXME
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+ // function failed
+ AX=0x100;
+ break;
+ case 0x0A:
+ //FIXME
+#ifdef VGA_DEBUG
+ unimplemented();
+#endif
+ // function failed
+ AX=0x100;
+ break;
+ default:
+#ifdef VGA_DEBUG
+ unknown();
+#endif
+ // function failed
+ AX=0x100;
+ }
+ }
+ else {
+ // No VBE display
+ AX=0x0100;
+ }
+ break;
+ case 0x56:
+ if (vbe_has_vbe_display()) {
+ switch(GET_AL())
+ {
+ case 0x42:
+ private_biosfn_custom_mode(&AX,&BX,&CX,&DX);
+ break;
+ default:
+ AX=0x0100;
+ break;
+ }
+ } else {
+ // No VBE display
+ AX=0x0100;
+ }
+ break;
+#endif
+
+#ifdef VGA_DEBUG
+ default:
+ unknown();
+#endif
+ }
+}
+
+#ifdef VBE
+//#include "vbe.c"
+#endif
+
+#ifdef CIRRUS
+#include "clext.c"
+#endif
+
+// --------------------------------------------------------------------------------------------
+
diff --git a/src/VBox/Devices/Graphics/BIOS/vgabios.h b/src/VBox/Devices/Graphics/BIOS/vgabios.h
new file mode 100644
index 00000000..1c545710
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgabios.h
@@ -0,0 +1,68 @@
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_BIOS_vgabios_h
+#define VBOX_INCLUDED_SRC_Graphics_BIOS_vgabios_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* Types */
+//typedef unsigned char Bit8u;
+//typedef unsigned short Bit16u;
+//typedef unsigned long Bit32u;
+typedef unsigned short Boolean;
+
+/* Defines */
+
+#define SET_AL(val8) AX = ((AX & 0xff00) | (val8))
+#define SET_BL(val8) BX = ((BX & 0xff00) | (val8))
+#define SET_CL(val8) CX = ((CX & 0xff00) | (val8))
+#define SET_DL(val8) DX = ((DX & 0xff00) | (val8))
+#define SET_AH(val8) AX = ((AX & 0x00ff) | ((val8) << 8))
+#define SET_BH(val8) BX = ((BX & 0x00ff) | ((val8) << 8))
+#define SET_CH(val8) CX = ((CX & 0x00ff) | ((val8) << 8))
+#define SET_DH(val8) DX = ((DX & 0x00ff) | ((val8) << 8))
+
+#define GET_AL() ( AX & 0x00ff )
+#define GET_BL() ( BX & 0x00ff )
+#define GET_CL() ( CX & 0x00ff )
+#define GET_DL() ( DX & 0x00ff )
+#define GET_AH() ( AX >> 8 )
+#define GET_BH() ( BX >> 8 )
+#define GET_CH() ( CX >> 8 )
+#define GET_DH() ( DX >> 8 )
+
+#define SET_CF() FLAGS |= 0x0001
+#define CLEAR_CF() FLAGS &= 0xfffe
+#define GET_CF() (FLAGS & 0x0001)
+
+#define SET_ZF() FLAGS |= 0x0040
+#define CLEAR_ZF() FLAGS &= 0xffbf
+#define GET_ZF() (FLAGS & 0x0040)
+
+#define SCROLL_DOWN 0
+#define SCROLL_UP 1
+#define NO_ATTR 2
+#define WITH_ATTR 3
+
+#define SCREEN_SIZE(x,y) (((x*y*2)|0x00ff)+1)
+#define SCREEN_MEM_START(x,y,p) ((((x*y*2)|0x00ff)+1)*p)
+#define SCREEN_IO_START(x,y,p) ((((x*y)|0x00ff)+1)*p)
+
+/* Macro for stack-based pointers. */
+#define STACK_BASED _based(_segname("_STACK"))
+
+/* Output. */
+extern void __cdecl printf(char *s, ...);
+
+/* VGA BIOS routines called by VBE. */
+extern void biosfn_set_video_mode(uint8_t mode);
+extern uint16_t biosfn_read_video_state_size2(uint16_t state);
+extern uint16_t biosfn_save_video_state(uint16_t CX, uint16_t ES, uint16_t BX);
+extern uint16_t biosfn_restore_video_state(uint16_t CX, uint16_t ES, uint16_t BX);
+
+/* Allow stand-alone compilation. */
+#ifndef VBOX_VERSION_STRING
+#include <VBox/version.h>
+#endif
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_BIOS_vgabios_h */
diff --git a/src/VBox/Devices/Graphics/BIOS/vgadefs.h b/src/VBox/Devices/Graphics/BIOS/vgadefs.h
new file mode 100644
index 00000000..5ae13ea4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgadefs.h
@@ -0,0 +1,78 @@
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_BIOS_vgadefs_h
+#define VBOX_INCLUDED_SRC_Graphics_BIOS_vgadefs_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/*
+ *
+ * BIOS Memory
+ *
+ */
+#define BIOSMEM_SEG 0x40
+
+#define BIOSMEM_INITIAL_MODE 0x10
+#define BIOSMEM_CURRENT_MODE 0x49
+#define BIOSMEM_NB_COLS 0x4A
+#define BIOSMEM_PAGE_SIZE 0x4C
+#define BIOSMEM_CURRENT_START 0x4E
+#define BIOSMEM_CURSOR_POS 0x50
+#define BIOSMEM_CURSOR_TYPE 0x60
+#define BIOSMEM_CURRENT_PAGE 0x62
+#define BIOSMEM_CRTC_ADDRESS 0x63
+#define BIOSMEM_CURRENT_MSR 0x65
+#define BIOSMEM_CURRENT_PAL 0x66
+#define BIOSMEM_NB_ROWS 0x84
+#define BIOSMEM_CHAR_HEIGHT 0x85
+#define BIOSMEM_VIDEO_CTL 0x87
+#define BIOSMEM_SWITCHES 0x88
+#define BIOSMEM_MODESET_CTL 0x89
+#define BIOSMEM_DCC_INDEX 0x8A
+#define BIOSMEM_VS_POINTER 0xA8
+#define BIOSMEM_VBE_FLAG 0xB9
+#define BIOSMEM_VBE_MODE 0xBA
+
+
+/*
+ *
+ * VGA registers
+ *
+ */
+#define VGAREG_ACTL_ADDRESS 0x3c0
+#define VGAREG_ACTL_WRITE_DATA 0x3c0
+#define VGAREG_ACTL_READ_DATA 0x3c1
+
+#define VGAREG_INPUT_STATUS 0x3c2
+#define VGAREG_WRITE_MISC_OUTPUT 0x3c2
+#define VGAREG_VIDEO_ENABLE 0x3c3
+#define VGAREG_SEQU_ADDRESS 0x3c4
+#define VGAREG_SEQU_DATA 0x3c5
+
+#define VGAREG_PEL_MASK 0x3c6
+#define VGAREG_DAC_STATE 0x3c7
+#define VGAREG_DAC_READ_ADDRESS 0x3c7
+#define VGAREG_DAC_WRITE_ADDRESS 0x3c8
+#define VGAREG_DAC_DATA 0x3c9
+
+#define VGAREG_READ_FEATURE_CTL 0x3ca
+#define VGAREG_READ_MISC_OUTPUT 0x3cc
+
+#define VGAREG_GRDC_ADDRESS 0x3ce
+#define VGAREG_GRDC_DATA 0x3cf
+
+#define VGAREG_MDA_CRTC_ADDRESS 0x3b4
+#define VGAREG_MDA_CRTC_DATA 0x3b5
+#define VGAREG_VGA_CRTC_ADDRESS 0x3d4
+#define VGAREG_VGA_CRTC_DATA 0x3d5
+
+#define VGAREG_MDA_WRITE_FEATURE_CTL 0x3ba
+#define VGAREG_VGA_WRITE_FEATURE_CTL 0x3da
+#define VGAREG_ACTL_RESET 0x3da
+
+#define VGAREG_MDA_MODECTL 0x3b8
+#define VGAREG_CGA_MODECTL 0x3d8
+#define VGAREG_CGA_PALETTE 0x3d9
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_BIOS_vgadefs_h */
+
diff --git a/src/VBox/Devices/Graphics/BIOS/vgadefs.inc b/src/VBox/Devices/Graphics/BIOS/vgadefs.inc
new file mode 100644
index 00000000..ef69fb5e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgadefs.inc
@@ -0,0 +1,58 @@
+VGAREG_ACTL_ADDRESS EQU 3C0h
+VGAREG_ACTL_WRITE_DATA EQU 3C0h
+VGAREG_ACTL_READ_DATA EQU 3C1h
+VGAREG_ACTL_RESET EQU 3DAh
+
+VGAREG_DAC_READ_ADDRESS EQU 3C7h
+VGAREG_DAC_WRITE_ADDRESS EQU 3C8h
+VGAREG_DAC_DATA EQU 3C9h
+
+VGAREG_PEL_MASK EQU 3C6h
+
+VGAREG_SEQU_ADDRESS EQU 3C4h
+VGAREG_SEQU_DATA EQU 3C5h
+
+VGAREG_GRDC_ADDRESS EQU 3CEh
+VGAREG_GRDC_DATA EQU 3CFh
+
+VGAREG_MDA_CRTC_ADDRESS EQU 3B4h
+VGAREG_VGA_CRTC_ADDRESS EQU 3D4h
+VGAREG_VGA_CRTC_DATA EQU 3D5h
+
+
+VGAREG_READ_MISC_OUTPUT EQU 3CCh
+VGAREG_WRITE_MISC_OUTPUT EQU 3C2h
+
+BIOSMEM_SEG EQU 40h
+BIOSMEM_CURRENT_MODE EQU 49h
+BIOSMEM_NB_COLS EQU 4Ah
+BIOSMEM_CURRENT_PAGE EQU 62h
+BIOSMEM_CRTC_ADDRESS EQU 63h
+BIOSMEM_VIDEO_CTL EQU 87h
+BIOSMEM_SWITCHES EQU 88h
+BIOSMEM_MODESET_CTL EQU 89h
+BIOSMEM_DCC_INDEX EQU 8Ah
+
+BIOSMEM_VBE_FLAG EQU 0B9h
+BIOSMEM_VBE_MODE EQU 0BAh
+
+VBE_DISPI_IOPORT_INDEX EQU 1CEh
+VBE_DISPI_IOPORT_DATA EQU 1CFh
+
+VBE_DISPI_INDEX_ID EQU 00h
+VBE_DISPI_INDEX_XRES EQU 01h
+VBE_DISPI_INDEX_YRES EQU 02h
+VBE_DISPI_INDEX_BPP EQU 03h
+VBE_DISPI_INDEX_ENABLE EQU 04h
+VBE_DISPI_INDEX_BANK EQU 05h
+VBE_DISPI_INDEX_VIRT_WIDTH EQU 06h
+VBE_DISPI_INDEX_VIRT_HEIGHT EQU 07h
+VBE_DISPI_INDEX_X_OFFSET EQU 08h
+VBE_DISPI_INDEX_Y_OFFSET EQU 09h
+
+VBE_DISPI_ENABLED EQU 01h
+VBE_DISPI_GETCAPS EQU 02h
+VBE_DISPI_8BIT_DAC EQU 20h
+
+VBE_DISPI_ID0 EQU 0B0C0h
+VBE_DISPI_ID4 EQU 0B0C4h
diff --git a/src/VBox/Devices/Graphics/BIOS/vgafonts.h b/src/VBox/Devices/Graphics/BIOS/vgafonts.h
new file mode 100644
index 00000000..0411a006
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgafonts.h
@@ -0,0 +1,878 @@
+/*
+ * These fonts come from ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
+ * The package is (c) by Joseph Gil
+ * The individual fonts are public domain
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_BIOS_vgafonts_h
+#define VBOX_INCLUDED_SRC_Graphics_BIOS_vgafonts_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+static uint8_t vgafont8[256*8]=
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e,
+ 0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e,
+ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00,
+ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00,
+ 0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c,
+ 0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00,
+ 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff,
+ 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
+ 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, // 10
+ 0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78,
+ 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18,
+ 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0,
+ 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0,
+ 0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99,
+ 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00,
+ 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00,
+ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
+ 0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00, // 20
+ 0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00,
+ 0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff,
+ 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
+ 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00,
+ 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00,
+ 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00,
+ 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00, // 30
+ 0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00,
+ 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00,
+ 0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00,
+ 0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00,
+ 0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00,
+ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00, // 40
+ 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00,
+ 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60,
+ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
+ 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00,
+ 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00,
+ 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00,
+ 0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00, // 50
+ 0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00,
+ 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00,
+ 0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00,
+ 0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00,
+ 0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00,
+ 0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00,
+ 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00,
+ 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60,
+ 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00, // 60
+ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
+ 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00,
+ 0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00,
+ 0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00,
+ 0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00,
+ 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00,
+ 0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00,
+ 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00,
+ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00,
+ 0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00, // 70
+ 0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00,
+ 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00,
+ 0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00,
+ 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00,
+ 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00,
+ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00,
+ 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00,
+ 0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, // 80
+ 0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00,
+ 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00,
+ 0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00,
+ 0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00,
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00,
+ 0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00,
+ 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00,
+ 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00,
+ 0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00, // 90
+ 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00,
+ 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00,
+ 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00,
+ 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00,
+ 0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00,
+ 0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, // 100
+ 0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
+ 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00,
+ 0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78,
+ 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00,
+ 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00,
+ 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, // 110
+ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0,
+ 0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e,
+ 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00,
+ 0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00,
+ 0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00,
+ 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00, // 120
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
+ 0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00,
+ 0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00,
+ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00,
+ 0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00,
+ 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00,
+ 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x18, 0x0c, 0x78,
+ 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x1c, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00, // 130
+ 0x7e, 0xc3, 0x3c, 0x06, 0x3e, 0x66, 0x3f, 0x00,
+ 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0xe0, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
+ 0x00, 0x00, 0x78, 0xc0, 0xc0, 0x78, 0x0c, 0x38,
+ 0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
+ 0xcc, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0xe0, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
+ 0xcc, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x7c, 0xc6, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, // 140
+ 0xe0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00,
+ 0x30, 0x30, 0x00, 0x78, 0xcc, 0xfc, 0xcc, 0x00,
+ 0x1c, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00,
+ 0x00, 0x00, 0x7f, 0x0c, 0x7f, 0xcc, 0x7f, 0x00,
+ 0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00,
+ 0x78, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0xe0, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00, // 150
+ 0x00, 0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
+ 0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x00,
+ 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00,
+ 0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18,
+ 0x38, 0x6c, 0x64, 0xf0, 0x60, 0xe6, 0xfc, 0x00,
+ 0xcc, 0xcc, 0x78, 0xfc, 0x30, 0xfc, 0x30, 0x30,
+ 0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7,
+ 0x0e, 0x1b, 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70,
+ 0x1c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00, // 160
+ 0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
+ 0x00, 0x1c, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
+ 0x00, 0xf8, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0x00,
+ 0xfc, 0x00, 0xcc, 0xec, 0xfc, 0xdc, 0xcc, 0x00,
+ 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00,
+ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00,
+ 0x30, 0x00, 0x30, 0x60, 0xc0, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00, // 170
+ 0xc3, 0xc6, 0xcc, 0xde, 0x33, 0x66, 0xcc, 0x0f,
+ 0xc3, 0xc6, 0xcc, 0xdb, 0x37, 0x6f, 0xcf, 0x03,
+ 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00,
+ 0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00,
+ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
+ 0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0xdb, 0xee,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, // 180
+ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, // 190
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, // 200
+ 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, // 210
+ 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, // 220
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00,
+ 0x00, 0x78, 0xcc, 0xf8, 0xcc, 0xf8, 0xc0, 0xc0,
+ 0x00, 0xfc, 0xcc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
+ 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00,
+ 0xfc, 0xcc, 0x60, 0x30, 0x60, 0xcc, 0xfc, 0x00,
+ 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xc0, // 230
+ 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0xfc, 0x30, 0x78, 0xcc, 0xcc, 0x78, 0x30, 0xfc,
+ 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00,
+ 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00,
+ 0x1c, 0x30, 0x18, 0x7c, 0xcc, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00,
+ 0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0,
+ 0x38, 0x60, 0xc0, 0xf8, 0xc0, 0x60, 0x38, 0x00,
+ 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00,
+ 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, // 240
+ 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0xfc, 0x00,
+ 0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xfc, 0x00,
+ 0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xfc, 0x00,
+ 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70,
+ 0x30, 0x30, 0x00, 0xfc, 0x00, 0x30, 0x30, 0x00,
+ 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00,
+ 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, // 250
+ 0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c,
+ 0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00,
+ 0x70, 0x18, 0x30, 0x60, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static uint8_t vgafont14[256*14]=
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, // 10
+ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, // 20
+ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, // 30
+ 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x66, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, // 40
+ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, // 50
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, // 60
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, // 70
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe6, 0x66, 0x6c, 0x6c, 0x78, 0x6c, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, // 80
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x7c, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, // 90
+ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, // 100
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, // 110
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x70, 0x1c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, // 120
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, // 130
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, // 140
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, // 150
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
+ 0x00, 0xc6, 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, // 160
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, // 170
+ 0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
+ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // 180
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 190
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 200
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, // 210
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 220
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x40, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, // 230
+ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, // 240
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 250
+ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00,
+ 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static uint8_t vgafont16[256*16]=
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, // 10
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, // 20
+ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 30
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 40
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, // 50
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, // 60
+ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, // 70
+ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, // 80
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, // 90
+ 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, // 100
+ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00, // 110
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, // 120
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, // 130
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, // 140
+ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, // 150
+ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
+ 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, // 160
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, // 170
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
+ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
+ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // 180
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 190
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, // 200
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // 210
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 220
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, // 230
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, // 240
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 250
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+static uint8_t vgafont14alt[20*15+1]=
+{
+ 0x1d,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x22,
+ 0x00, 0x63, 0x63, 0x63, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2b,
+ 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x2d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4d,
+ 0x00, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00,
+ 0x54,
+ 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x56,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x57,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00,
+ 0x58,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00,
+ 0x59,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x5a,
+ 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x61, 0xc3, 0xff, 0x00, 0x00, 0x00,
+ 0x6d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00,
+ 0x76,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
+ 0x77,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00,
+ 0x91,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00,
+ 0x9b,
+ 0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x9d,
+ 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x9e,
+ 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00,
+ 0xf1,
+ 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0xf6,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00
+};
+static uint8_t vgafont16alt[19*17+1]=
+{
+ 0x1d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30,
+ 0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x4d,
+ 0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x54,
+ 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x56,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x57,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x58,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x59,
+ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x5a,
+ 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x6d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00,
+ 0x76,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x77,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00,
+ 0x91,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00,
+ 0x9b,
+ 0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x9d,
+ 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x9e,
+ 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
+ 0xab,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00,
+ 0xac,
+ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00,
+ 0x00
+};
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_BIOS_vgafonts_h */
+
diff --git a/src/VBox/Devices/Graphics/BIOS/vgarom.asm b/src/VBox/Devices/Graphics/BIOS/vgarom.asm
new file mode 100644
index 00000000..f5bffcc4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgarom.asm
@@ -0,0 +1,1102 @@
+;; ============================================================================================
+;;
+;; Copyright (C) 2001,2002 the LGPL VGABios developers Team
+;;
+;; This library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public
+;; License as published by the Free Software Foundation; either
+;; version 2 of the License, or (at your option) any later version.
+;;
+;; This library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; Lesser General Public License for more details.
+;;
+;; You should have received a copy of the GNU Lesser General Public
+;; License along with this library; if not, write to the Free Software
+;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;;
+;; ============================================================================================
+;;
+;; This VGA Bios is specific to the plex86/bochs Emulated VGA card.
+;; You can NOT drive any physical vga card with it.
+;;
+;; ============================================================================================
+;;
+
+
+; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+; a choice of LGPL license versions is made available with the language indicating
+; that LGPLv2 or any later version may be used, or where a choice of which version
+; of the LGPL is applied is otherwise unspecified.
+
+include vgadefs.inc
+include commondefs.inc
+
+public vgabios_int10_handler
+
+VGAROM segment public 'CODE'
+
+; Implemented in C
+extrn _int10_func:near
+extrn _vgabios_init_func:near
+
+ifdef VBE
+; Implemented in separate assembly module
+extrn vbe_biosfn_return_current_mode:near
+extrn vbe_biosfn_display_window_control:near
+extrn vbe_biosfn_set_get_display_start:near
+extrn vbe_biosfn_set_get_dac_palette_format:near
+extrn vbe_biosfn_set_get_palette_data:near
+extrn vbe_biosfn_return_protected_mode_interface:near
+endif
+
+ifdef VGA_DEBUG
+extrn _int10_debugmsg:near
+extrn _printf:near
+extrn _unimplemented:near
+extrn _unknown:near
+endif
+
+vgabios_start:
+
+db 055h, 0AAh ; ROM signature, required for expansion ROMs
+db 40h ; ROM module length in units of 512 bytes */
+
+
+vgabios_entry_point:
+
+ jmp vgabios_init
+
+ org 1Eh
+
+ db 'IBM',0
+
+vgabios_init:
+;; We have to set ds to access the right data segment
+ push cs
+ pop ds
+ cld
+ jmp _vgabios_init_func
+
+;;
+;; int10 handled here
+;;
+
+SET_DEFAULT_CPU_286
+
+vgabios_int10_handler:
+ pushf
+ifdef VGA_DEBUG
+ push es
+ push ds
+ DO_pusha
+ push cs
+ pop ds
+ cld
+ call _int10_debugmsg
+ DO_popa
+ pop ds
+ pop es
+endif
+ cmp ah, 0Fh
+ jne int10_test_1A
+ call biosfn_get_video_mode
+ jmp int10_end
+int10_test_1A:
+ cmp ah, 1Ah
+ jne int10_test_0B
+ call biosfn_group_1A
+ jmp int10_end
+int10_test_0B:
+ cmp ah, 0Bh
+ jne int10_test_1103
+ call biosfn_group_0B
+ jmp int10_end
+int10_test_1103:
+ cmp ax, 1103h
+ jne int10_test_12
+ call biosfn_set_text_block_specifier
+ jmp int10_end
+int10_test_12:
+ cmp ah, 12h
+ jne int10_test_101B
+ cmp bl, 10h
+ jne int10_test_BL30
+ call biosfn_get_ega_info
+ jmp int10_end
+int10_test_BL30:
+ cmp bl, 30h
+ jne int10_test_BL31
+ call biosfn_select_vert_res
+ jmp int10_end
+int10_test_BL31:
+ cmp bl, 31h
+ jne int10_test_BL32
+ call biosfn_enable_default_palette_loading
+ jmp int10_end
+int10_test_BL32:
+ cmp bl, 32h
+ jne int10_test_BL33
+ call biosfn_enable_video_addressing
+ jmp int10_end
+int10_test_BL33:
+ cmp bl, 33h
+ jne int10_test_BL34
+ call biosfn_enable_grayscale_summing
+ jmp int10_end
+int10_test_BL34:
+ cmp bl, 34h
+ jne int10_normal
+ call biosfn_enable_cursor_emulation
+ jmp int10_end
+int10_test_101B:
+ cmp ax, 101Bh
+ je int10_normal
+ cmp ah, 10h
+ifndef VBE
+ jne int10_normal
+else
+ jne int10_test_4F
+endif
+ call biosfn_group_10
+ jmp int10_end
+ifdef VBE
+int10_test_4F:
+ cmp ah, 4Fh
+ jne int10_normal
+ cmp al, 3
+ jne int10_test_vbe_05
+ call vbe_biosfn_return_current_mode
+ jmp int10_end
+int10_test_vbe_05:
+ cmp al, 5
+ jne int10_test_vbe_07
+ call vbe_biosfn_display_window_control
+ jmp int10_end
+int10_test_vbe_07:
+ cmp al, 7
+ jne int10_test_vbe_08
+ call vbe_biosfn_set_get_display_start
+ jmp int10_end
+int10_test_vbe_08:
+ cmp al, 8
+ jne int10_test_vbe_09
+ call vbe_biosfn_set_get_dac_palette_format
+ jmp int10_end
+int10_test_vbe_09:
+ cmp al, 9
+ jne int10_test_vbe_0A
+ call vbe_biosfn_set_get_palette_data
+ jmp int10_end
+int10_test_vbe_0A:
+ cmp al, 0Ah
+ jne int10_normal
+ call vbe_biosfn_return_protected_mode_interface
+ jmp int10_end
+endif
+
+int10_normal:
+ push es
+ push ds
+ DO_pusha
+
+;; We have to set ds to access the right data segment
+ push cs
+ pop ds
+ cld
+ call _int10_func
+
+ DO_popa
+ pop ds
+ pop es
+int10_end:
+ popf
+ iret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_group_0B:
+ cmp bh, 0
+ je biosfn_set_border_color
+ cmp bh, 1
+ je biosfn_set_palette
+ifdef VGA_DEBUG
+ call _unknown
+endif
+ ret
+biosfn_set_border_color:
+ push ax
+ push bx
+ push cx
+ push dx
+ push ds
+ mov dx, BIOSMEM_SEG
+ mov ds, dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ cmp byte ptr ds:[BIOSMEM_CURRENT_MODE], 3
+ jbe set_border_done
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 00h
+ out dx, al
+ mov al, bl
+ and al, 0Fh
+ test al, 08h
+ jz set_low_border
+ add al, 08h
+set_low_border:
+ out dx, al
+ mov cl, 1
+ and bl, 10h
+set_intensity_loop:
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, cl
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ and al, 0EFh
+ or al, bl
+ mov dx, VGAREG_ACTL_ADDRESS
+ out dx, al
+ inc cl
+ cmp cl, 4
+ jne set_intensity_loop
+set_border_done:
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop ds
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+biosfn_set_palette:
+ push ax
+ push bx
+ push cx
+ push dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov cl, 01
+ and bl, 01
+set_cga_palette_loop:
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, cl
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ and al, 0FEh
+ or al, bl
+ mov dx, VGAREG_ACTL_ADDRESS
+ out dx, al
+ inc cl
+ cmp cl, 4
+ jne set_cga_palette_loop
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_video_mode:
+ push ds
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ push bx
+ mov bx, BIOSMEM_CURRENT_PAGE
+ mov al, [bx]
+ pop bx
+ mov bh, al
+ push bx
+ mov bx, BIOSMEM_VIDEO_CTL
+ mov ah, [bx]
+ and ah, 80h
+ mov bx, BIOSMEM_CURRENT_MODE
+ mov al, [bx]
+ or al, ah
+ mov bx, BIOSMEM_NB_COLS
+ mov ah, [bx]
+ pop bx
+ pop ds
+ ret
+
+;--------------------------------------------------------------------------------------------
+
+biosfn_group_10:
+ cmp al, 0
+ jne int10_test_1001
+ jmp biosfn_set_single_palette_reg
+int10_test_1001:
+ cmp al, 1
+ jne int10_test_1002
+ jmp biosfn_set_overscan_border_color
+int10_test_1002:
+ cmp al, 2
+ jne int10_test_1003
+ jmp biosfn_set_all_palette_reg
+int10_test_1003:
+ cmp al, 3
+ jne int10_test_1007
+ jmp biosfn_toggle_intensity
+int10_test_1007:
+ cmp al, 7
+ jne int10_test_1008
+ jmp biosfn_get_single_palette_reg
+int10_test_1008:
+ cmp al, 8
+ jne int10_test_1009
+ jmp biosfn_read_overscan_border_color
+int10_test_1009:
+ cmp al, 9
+ jne int10_test_1010
+ jmp biosfn_get_all_palette_reg
+int10_test_1010:
+ cmp al, 10h
+ jne int10_test_1012
+ jmp biosfn_set_single_dac_reg
+int10_test_1012:
+ cmp al, 12h
+ jne int10_test_1013
+ jmp biosfn_set_all_dac_reg
+int10_test_1013:
+ cmp al, 13h
+ jne int10_test_1015
+ jmp biosfn_select_video_dac_color_page
+int10_test_1015:
+ cmp al, 15h
+ jne int10_test_1017
+ jmp biosfn_read_single_dac_reg
+int10_test_1017:
+ cmp al, 17h
+ jne int10_test_1018
+ jmp biosfn_read_all_dac_reg
+int10_test_1018:
+ cmp al, 18h
+ jne int10_test_1019
+ jmp biosfn_set_pel_mask
+int10_test_1019:
+ cmp al, 19h
+ jne int10_test_101A
+ jmp biosfn_read_pel_mask
+int10_test_101A:
+ cmp al, 1Ah
+ jne int10_group_10_unknown
+ jmp biosfn_read_video_dac_state
+int10_group_10_unknown:
+ifdef VGA_DEBUG
+ call _unknown
+endif
+ ret
+
+biosfn_set_single_palette_reg:
+ cmp bl, 14h
+ ja no_actl_reg1
+ push ax
+ push dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, bl
+ out dx, al
+ mov al, bh
+ out dx, al
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop ax
+no_actl_reg1:
+ ret
+
+;--------------------------------------------------------------------------------------------
+
+biosfn_set_overscan_border_color:
+ push bx
+ mov bl, 11h
+ call biosfn_set_single_palette_reg
+ pop bx
+ ret
+
+;--------------------------------------------------------------------------------------------
+
+biosfn_set_all_palette_reg:
+ push ax
+ push bx
+ push cx
+ push dx
+ mov bx, dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov cl, 0
+ mov dx, VGAREG_ACTL_ADDRESS
+set_palette_loop:
+ mov al, cl
+ out dx, al
+ mov al, es:[bx]
+ out dx, al
+ inc bx
+ inc cl
+ cmp cl, 10h
+ jne set_palette_loop
+ mov al, 11h
+ out dx, al
+ mov al, es:[bx]
+ out dx, al
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_toggle_intensity:
+ push ax
+ push bx
+ push dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 10h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ and al, 0F7h
+ and bl, 01
+if VBOX_BIOS_CPU gt 8086
+ shl bl, 3
+else
+ shl bl, 1
+ shl bl, 1
+ shl bl, 1
+endif
+ or al, bl
+ mov dx, VGAREG_ACTL_ADDRESS
+ out dx, al
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_single_palette_reg:
+ cmp bl, 14h
+ ja no_actl_reg2
+ push ax
+ push dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, bl
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ mov bh, al
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop ax
+no_actl_reg2:
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_overscan_border_color:
+ push ax
+ push bx
+ mov bl, 11h
+ call biosfn_get_single_palette_reg
+ mov al, bh
+ pop bx
+ mov bh, al
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_all_palette_reg:
+ push ax
+ push bx
+ push cx
+ push dx
+ mov bx, dx
+ mov cl, 0
+get_palette_loop:
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, cl
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ mov es:[bx], al
+ inc bx
+ inc cl
+ cmp cl, 10h
+ jne get_palette_loop
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 11h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ mov es:[bx], al
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_single_dac_reg:
+ push ax
+ push dx
+ mov dx, VGAREG_DAC_WRITE_ADDRESS
+ mov al, bl
+ out dx, al
+ mov dx, VGAREG_DAC_DATA
+ pop ax
+ push ax
+ mov al, ah
+ out dx, al
+ mov al, ch
+ out dx, al
+ mov al, cl
+ out dx, al
+ pop dx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_all_dac_reg:
+ push ax
+ push bx
+ push cx
+ push dx
+ mov dx, VGAREG_DAC_WRITE_ADDRESS
+ mov al, bl
+ out dx, al
+ pop dx
+ push dx
+ mov bx, dx
+ mov dx, VGAREG_DAC_DATA
+set_dac_loop:
+ mov al, es:[bx]
+ out dx, al
+ inc bx
+ mov al, es:[bx]
+ out dx, al
+ inc bx
+ mov al, es:[bx]
+ out dx, al
+ inc bx
+ dec cx
+ jnz set_dac_loop
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_select_video_dac_color_page:
+ push ax
+ push bx
+ push dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 10h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ and bl, 01
+ jnz set_dac_page
+ and al, 07Fh
+if VBOX_BIOS_CPU gt 8086
+ shl bh, 7
+else
+ shl bh, 1
+ shl bh, 1
+ shl bh, 1
+ shl bh, 1
+ shl bh, 1
+ shl bh, 1
+ shl bh, 1
+endif
+ or al, bh
+ mov dx, VGAREG_ACTL_ADDRESS
+ out dx, al
+ jmp set_actl_normal
+set_dac_page:
+ push ax
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 14h
+ out dx, al
+ pop ax
+ and al, 80h
+ jnz set_dac_16_page
+if VBOX_BIOS_CPU gt 8086
+ shl bh, 2
+else
+ shl bh, 1
+ shl bh, 1
+endif
+set_dac_16_page:
+ and bh, 0Fh
+ mov al, bh
+ out dx, al
+set_actl_normal:
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_single_dac_reg:
+ push ax
+ push dx
+ mov dx, VGAREG_DAC_READ_ADDRESS
+ mov al, bl
+ out dx, al
+ pop ax
+ mov ah, al
+ mov dx, VGAREG_DAC_DATA
+ in al, dx
+ xchg al, ah
+ push ax
+ in al, dx
+ mov ch, al
+ in al, dx
+ mov cl, al
+ pop dx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_all_dac_reg:
+ push ax
+ push bx
+ push cx
+ push dx
+ mov dx, VGAREG_DAC_READ_ADDRESS
+ mov al, bl
+ out dx, al
+ pop dx
+ push dx
+ mov bx, dx
+ mov dx, VGAREG_DAC_DATA
+read_dac_loop:
+ in al, dx
+ mov es:[bx], al
+ inc bx
+ in al, dx
+ mov es:[bx], al
+ inc bx
+ in al, dx
+ mov es:[bx], al
+ inc bx
+ dec cx
+ jnz read_dac_loop
+ pop dx
+ pop cx
+ pop bx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_pel_mask:
+ push ax
+ push dx
+ mov dx, VGAREG_PEL_MASK
+ mov al, bl
+ out dx, al
+ pop dx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_pel_mask:
+ push ax
+ push dx
+ mov dx, VGAREG_PEL_MASK
+ in al, dx
+ mov bl, al
+ pop dx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_read_video_dac_state:
+ push ax
+ push dx
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 10h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ mov bl, al
+if VBOX_BIOS_CPU gt 8086
+ shr bl, 7
+else
+ shr bl, 1
+ shr bl, 1
+ shr bl, 1
+ shr bl, 1
+ shr bl, 1
+ shr bl, 1
+ shr bl, 1
+endif
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 14h
+ out dx, al
+ mov dx, VGAREG_ACTL_READ_DATA
+ in al, dx
+ mov bh, al
+ and bh, 0Fh
+ test bl, 01
+ jnz get_dac_16_page
+if VBOX_BIOS_CPU gt 8086
+ shr bh, 2
+else
+ shr bh, 1
+ shr bh, 1
+endif
+get_dac_16_page:
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+ mov dx, VGAREG_ACTL_ADDRESS
+ mov al, 20h
+ out dx, al
+ifdef VBOX
+ mov dx, VGAREG_ACTL_RESET
+ in al, dx
+endif ; VBOX
+ pop dx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_set_text_block_specifier:
+ push ax
+ push dx
+ mov dx, VGAREG_SEQU_ADDRESS
+ mov ah, bl
+ mov al, 03
+ out dx, ax
+ pop dx
+ pop ax
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_get_ega_info:
+ push ds
+ push ax
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ xor ch, ch
+ mov bx, BIOSMEM_SWITCHES
+ mov cl, [bx]
+ and cl, 0Fh
+ mov bx, BIOSMEM_CRTC_ADDRESS
+ mov ax, [bx]
+ mov bx, 0003h
+ cmp ax, VGAREG_MDA_CRTC_ADDRESS
+ jne mode_ega_color
+ mov bh, 01
+mode_ega_color:
+ pop ax
+ pop ds
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_select_vert_res:
+
+; res : 00 200 lines, 01 350 lines, 02 400 lines
+
+ push ds
+ push bx
+ push dx
+ mov dl, al
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov bx, BIOSMEM_MODESET_CTL
+ mov al, [bx]
+ mov bx, BIOSMEM_SWITCHES
+ mov ah, [bx]
+ cmp dl, 1
+ je vert_res_350
+ jb vert_res_200
+ cmp dl, 2
+ je vert_res_400
+ifdef VGA_DEBUG
+ mov al, dl
+ xor ah, ah
+ push ax
+ mov bx, msg_vert_res
+ push bx
+ call _printf
+ add sp, 4
+endif
+ jmp set_retcode
+vert_res_400:
+
+ ; reset modeset ctl bit 7 and set bit 4
+ ; set switches bit 3-0 to 09
+
+ and al, 07Fh
+ or al, 010h
+ and ah, 0F0h
+ or ah, 009h
+ jnz set_vert_res
+vert_res_350:
+
+ ; reset modeset ctl bit 7 and bit 4
+ ; set switches bit 3-0 to 09
+
+ and al, 06Fh
+ and ah, 0F0h
+ or ah, 009h
+ jnz set_vert_res
+vert_res_200:
+
+ ; set modeset ctl bit 7 and reset bit 4
+ ; set switches bit 3-0 to 08
+
+ and al, 0EFh
+ or al, 080h
+ and ah, 0F0h
+ or ah, 008h
+set_vert_res:
+ mov bx, BIOSMEM_MODESET_CTL
+ mov [bx], al
+ mov bx, BIOSMEM_SWITCHES
+ mov [bx], ah
+set_retcode:
+ mov ax, 1212h
+ pop dx
+ pop bx
+ pop ds
+ ret
+
+ifdef VGA_DEBUG
+msg_vert_res:
+db "Select vert res (%02x) was discarded", 13, 10, 0
+endif
+
+
+biosfn_enable_default_palette_loading:
+ push ds
+ push bx
+ push dx
+ mov dl, al
+ and dl, 01
+if VBOX_BIOS_CPU gt 8086
+ shl dl, 3
+else
+ shl dl, 1
+ shl dl, 1
+ shl dl, 1
+endif
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov bx, BIOSMEM_MODESET_CTL
+ mov al, [bx]
+ and al, 0F7h
+ or al, dl
+ mov [bx], al
+ mov ax, 1212h
+ pop dx
+ pop bx
+ pop ds
+ ret
+
+
+biosfn_enable_video_addressing:
+ push bx
+ push dx
+ mov bl, al
+ and bl, 01
+ xor bl, 01
+ shl bl, 1
+ mov dx, VGAREG_READ_MISC_OUTPUT
+ in al, dx
+ and al, 0FDh
+ or al, bl
+ mov dx, VGAREG_WRITE_MISC_OUTPUT
+ out dx, al
+ mov ax, 1212h
+ pop dx
+ pop bx
+ ret
+
+
+biosfn_enable_grayscale_summing:
+ push ds
+ push bx
+ push dx
+ mov dl, al
+ and dl, 01h
+ xor dl, 01h
+ shl dl, 1
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov bx, BIOSMEM_MODESET_CTL
+ mov al, [bx]
+ and al, 0FDh
+ or al, dl
+ mov [bx], al
+ mov ax, 1212h
+ pop dx
+ pop bx
+ pop ds
+ ret
+
+
+biosfn_enable_cursor_emulation:
+ push ds
+ push bx
+ push dx
+ mov dl, al
+ and dl, 01
+ xor dl, 01
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov bx, BIOSMEM_MODESET_CTL
+ mov al, [bx]
+ and al, 0FEh
+ or al, dl
+ mov [bx], al
+ mov ax, 1212h
+ pop dx
+ pop bx
+ pop ds
+ ret
+
+;;--------------------------------------------------------------------------------------------
+
+biosfn_group_1A:
+ cmp al, 0
+ je biosfn_read_display_code
+ cmp al, 1
+ je biosfn_set_display_code
+ifdef VGA_DEBUG
+ call _unknown
+endif
+ ret
+biosfn_read_display_code:
+ push ds
+ push ax
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov bx, BIOSMEM_DCC_INDEX
+ mov al, [bx]
+ mov bl, al
+ xor bh, bh
+ pop ax
+ mov al, ah
+ pop ds
+ ret
+biosfn_set_display_code:
+ push ds
+ push ax
+ push bx
+ mov ax, BIOSMEM_SEG
+ mov ds, ax
+ mov ax, bx
+ mov bx, BIOSMEM_DCC_INDEX
+ mov [bx], al
+ifdef VGA_DEBUG
+ mov al, ah
+ xor ah, ah
+ push ax
+ mov bx, msg_alt_dcc
+ push bx
+ call _printf
+ add sp, 4
+endif
+ pop bx
+ pop ax
+ mov al, ah
+ pop ds
+ ret
+
+ifdef VGA_DEBUG
+msg_alt_dcc:
+db "Alternate Display code (%02x) was discarded", 13, 10, 0
+endif
+
+VGAROM ends
+
+ end
diff --git a/src/VBox/Devices/Graphics/BIOS/vgatables.h b/src/VBox/Devices/Graphics/BIOS/vgatables.h
new file mode 100644
index 00000000..a5d8e8e6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/BIOS/vgatables.h
@@ -0,0 +1,625 @@
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_BIOS_vgatables_h
+#define VBOX_INCLUDED_SRC_Graphics_BIOS_vgatables_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* Video memory */
+#define VGAMEM_GRAPH 0xA000
+#define VGAMEM_CTEXT 0xB800
+#define VGAMEM_MTEXT 0xB000
+
+/*
+ *
+ * Tables of default values for each mode
+ *
+ */
+#define MODE_MAX 15
+#define TEXT 0x00
+#define GRAPH 0x01
+
+#define CTEXT 0x00
+#define MTEXT 0x01
+#define CGA 0x02
+#define PLANAR1 0x03
+#define PLANAR4 0x04
+#define LINEAR8 0x05
+
+// for SVGA
+#define LINEAR15 0x10
+#define LINEAR16 0x11
+#define LINEAR24 0x12
+#define LINEAR32 0x13
+
+typedef struct
+{uint8_t svgamode;
+ uint8_t class; /* TEXT, GRAPH */
+ uint8_t memmodel; /* CTEXT,MTEXT,CGA,PL1,PL2,PL4,P8,P15,P16,P24,P32 */
+ uint8_t pixbits;
+ uint16_t sstart;
+ uint8_t pelmask;
+ uint8_t dacmodel; /* 0 1 2 3 */
+} VGAMODES;
+
+static VGAMODES vga_modes[MODE_MAX+1]=
+{//mode class model bits sstart pelm dac
+ {0x00, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x01, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x02, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x03, TEXT, CTEXT, 4, 0xB800, 0xFF, 0x02},
+ {0x04, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},
+ {0x05, GRAPH, CGA, 2, 0xB800, 0xFF, 0x01},
+ {0x06, GRAPH, CGA, 1, 0xB800, 0xFF, 0x01},
+ {0x07, TEXT, MTEXT, 4, 0xB000, 0xFF, 0x00},
+ {0x0D, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
+ {0x0E, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x01},
+ {0x0F, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x00},
+ {0x10, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
+ {0x11, GRAPH, PLANAR1, 1, 0xA000, 0xFF, 0x02},
+ {0x12, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02},
+ {0x13, GRAPH, LINEAR8, 8, 0xA000, 0xFF, 0x03},
+ {0x6A, GRAPH, PLANAR4, 4, 0xA000, 0xFF, 0x02}
+};
+
+/* convert index in vga_modes[] to index in video_param_table[] */
+static uint8_t line_to_vpti[MODE_MAX+1]={
+ 0x17, 0x17, 0x18, 0x18, 0x04, 0x05, 0x06, 0x07,
+ 0x0d, 0x0e, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d,
+};
+
+/* Default Palette */
+#define DAC_MAX_MODEL 3
+
+static uint8_t dac_regs[DAC_MAX_MODEL+1]=
+{0x3f,0x3f,0x3f,0xff};
+
+/* standard BIOS Video Parameter Table */
+#pragma pack(push, 1)
+typedef struct {
+ uint8_t twidth;
+ uint8_t theightm1;
+ uint8_t cheight;
+ uint16_t slength;
+ uint8_t sequ_regs[4];
+ uint8_t miscreg;
+ uint8_t crtc_regs[25];
+ uint8_t actl_regs[20];
+ uint8_t grdc_regs[9];
+} VideoParamTableEntry;
+#pragma pack(pop)
+
+static VideoParamTableEntry video_param_table[30] = {
+{
+ /* index=0x00 cga mode 0/1 */
+ 40, 24, 8, 0x0800, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0xc7, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x08, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x01 cga mode 0/1 */
+ 40, 24, 8, 0x0800, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0xc7, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x08, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x02 cga mode 2/3 */
+ 80, 24, 8, 0x1000, /* tw, th-1, ch, slength */
+ 0x01, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0xc7, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x08, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x03 cga mode 2/3 */
+ 80, 24, 8, 0x1000, /* tw, th-1, ch, slength */
+ 0x01, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0xc7, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x08, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x04 vga mode 0x04 */
+ 40, 24, 8, 0x4000, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x05 vga mode 0x05 */
+ 40, 24, 8, 0x4000, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xa2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x13, 0x15, 0x17, 0x02, 0x04, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x03, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0f, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x06 vga mode 0x06 */
+ 80, 24, 8, 0x4000, /* tw, th-1, ch, slength */
+ 0x01, 0x01, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xc2,
+ 0xff, /* crtc_regs */
+ 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x07 ega mode 0x07 */
+ 80, 24, 14, 0x1000, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x03, /* sequ_regs */
+ 0xA6, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0d, 0x63, 0xba, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x08 no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x09 no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0a no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+#if 0
+/* XENIX 2.2 uses mode entries Bh/Ch when loading EGA fonts. If they are
+ * all zeros, fonts can't be set. However, some versions (XENIX 2.2.3b)
+ * end up programming garbage into the fonts. We're better off with
+ * cut off VGA fonts than with complete garbage, so we leave these
+ * mode table entries zeroed.
+ */
+{
+ /* index=0x0b EGA font load fake mode (color) */
+ 80, 24, 8, 0x1000, /* tw, th-1, ch, slength */
+ 0x01, 0x04, 0x00, 0x07, /* sequ_regs */
+ 0x23, /* miscreg */
+ 0x70, 0x4f, 0x5c, 0x2f, 0x5f, 0x07, 0x04, 0x11,
+ 0x00, 0x07, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0xe1, 0x24, 0xc7, 0x28, 0x08, 0xe0, 0xf0, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0c EGA font load fake mode (mono) */
+ 80, 24, 14, 0x1000, /* tw, th-1, ch, slength */
+ 0x01, 0x04, 0x00, 0x07, /* sequ_regs */
+ 0xa6, /* miscreg */
+ 0x60, 0x4f, 0x56, 0x3a, 0x51, 0x60, 0x70, 0x1f,
+ 0x00, 0x0d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x5e, 0x2e, 0x5d, 0x28, 0x0d, 0x5e, 0x6e, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, /* grdc_regs */
+},
+#else
+{
+ /* index=0x0b no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x0c no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+#endif
+{
+ /* index=0x0d vga mode 0x0d */
+ 40, 24, 8, 0x2000, /* tw, th-1, ch, slength */
+ 0x09, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x00, 0x96, 0xb9, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0e vga mode 0x0e */
+ 80, 24, 8, 0x4000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x00, 0x96, 0xb9, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x0f no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x10 no mode defined */
+ 0x00, 0x00, 0x00, 0x0000, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+},
+{
+ /* index=0x11 vga mode 0x0f */
+ 80, 24, 14, 0x8000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x01, 0x00, 0x01, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x12 vga mode 0x10 */
+ 80, 24, 14, 0x8000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x0f, 0x63, 0xba, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x13 ega mode 0/1 */
+ 40, 24, 14, 0x0800, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0x4d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x14, 0x1f, 0x63, 0xba, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x08, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x14 ega mode 0/1 */
+ 40, 24, 14, 0x0800, /* tw, th-1, ch, slength */
+ 0x09, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0x4d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x14, 0x1f, 0x63, 0xba, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x08, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x15 ega mode 2/3 */
+ 80, 24, 14, 0x1000, /* tw, th-1, ch, slength */
+ 0x01, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x1f, 0x63, 0xba, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x08, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x16 ega mode 2/3 */
+ 80, 24, 14, 0x1000, /* tw, th-1, ch, slength */
+ 0x01, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0xa3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4d, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x85, 0x5d, 0x28, 0x1f, 0x63, 0xba, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x08, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x17 vga mode 0x01 */
+ 40, 24, 16, 0x0800, /* tw, th-1, ch, slength */
+ 0x08, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x67, /* miscreg */
+ 0x2d, 0x27, 0x28, 0x90, 0x2b, 0xa0, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x14, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x18 vga mode 0x03 */
+ 80, 24, 16, 0x1000, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x67, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x0c, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x19 vga mode 0x07 */
+ 80, 24, 16, 0x1000, /* tw, th-1, ch, slength */
+ 0x00, 0x03, 0x00, 0x02, /* sequ_regs */
+ 0x66, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
+ 0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x0f, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0e, 0x00, 0x0f, 0x08, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0a, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1a vga mode 0x11 */
+ 80, 29, 16, 0xa000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xc3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
+ 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1b vga mode 0x12 */
+ 80, 29, 16, 0xa000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xea, 0x8c, 0xdf, 0x28, 0x00, 0xe7, 0x04, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1c vga mode 0x13 */
+ 40, 24, 8, 0x2000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x0e, /* sequ_regs */
+ 0x63, /* miscreg */
+ 0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0xbf, 0x1f,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x8e, 0x8f, 0x28, 0x40, 0x96, 0xb9, 0xa3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x41, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+{
+ /* index=0x1d vga mode 0x6a */
+ 100, 36, 16, 0x0000, /* tw, th-1, ch, slength */
+ 0x01, 0x0f, 0x00, 0x06, /* sequ_regs */
+ 0xe3, /* miscreg */
+ 0x7f, 0x63, 0x63, 0x83, 0x6b, 0x1b, 0x72, 0xf0,
+ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x8d, 0x57, 0x32, 0x00, 0x57, 0x73, 0xe3,
+ 0xff, /* crtc_regs */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x01, 0x00, 0x0f, 0x00, /* actl_regs */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0f, 0xff, /* grdc_regs */
+},
+};
+
+/* Mono */
+static uint8_t palette0[63+1][3]=
+{
+ 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
+ 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+ 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+ 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f,
+ 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00,
+ 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+ 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,
+ 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f, 0x3f,0x3f,0x3f
+};
+
+static uint8_t palette1[63+1][3]=
+{
+ 0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+ 0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+ 0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+ 0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+ 0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+ 0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+ 0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+ 0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
+};
+
+static uint8_t palette2[63+1][3]=
+{
+ 0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x2a,0x00, 0x2a,0x2a,0x2a,
+ 0x00,0x00,0x15, 0x00,0x00,0x3f, 0x00,0x2a,0x15, 0x00,0x2a,0x3f, 0x2a,0x00,0x15, 0x2a,0x00,0x3f, 0x2a,0x2a,0x15, 0x2a,0x2a,0x3f,
+ 0x00,0x15,0x00, 0x00,0x15,0x2a, 0x00,0x3f,0x00, 0x00,0x3f,0x2a, 0x2a,0x15,0x00, 0x2a,0x15,0x2a, 0x2a,0x3f,0x00, 0x2a,0x3f,0x2a,
+ 0x00,0x15,0x15, 0x00,0x15,0x3f, 0x00,0x3f,0x15, 0x00,0x3f,0x3f, 0x2a,0x15,0x15, 0x2a,0x15,0x3f, 0x2a,0x3f,0x15, 0x2a,0x3f,0x3f,
+ 0x15,0x00,0x00, 0x15,0x00,0x2a, 0x15,0x2a,0x00, 0x15,0x2a,0x2a, 0x3f,0x00,0x00, 0x3f,0x00,0x2a, 0x3f,0x2a,0x00, 0x3f,0x2a,0x2a,
+ 0x15,0x00,0x15, 0x15,0x00,0x3f, 0x15,0x2a,0x15, 0x15,0x2a,0x3f, 0x3f,0x00,0x15, 0x3f,0x00,0x3f, 0x3f,0x2a,0x15, 0x3f,0x2a,0x3f,
+ 0x15,0x15,0x00, 0x15,0x15,0x2a, 0x15,0x3f,0x00, 0x15,0x3f,0x2a, 0x3f,0x15,0x00, 0x3f,0x15,0x2a, 0x3f,0x3f,0x00, 0x3f,0x3f,0x2a,
+ 0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f
+};
+
+static uint8_t palette3[256][3]=
+{
+ 0x00,0x00,0x00, 0x00,0x00,0x2a, 0x00,0x2a,0x00, 0x00,0x2a,0x2a, 0x2a,0x00,0x00, 0x2a,0x00,0x2a, 0x2a,0x15,0x00, 0x2a,0x2a,0x2a,
+ 0x15,0x15,0x15, 0x15,0x15,0x3f, 0x15,0x3f,0x15, 0x15,0x3f,0x3f, 0x3f,0x15,0x15, 0x3f,0x15,0x3f, 0x3f,0x3f,0x15, 0x3f,0x3f,0x3f,
+ 0x00,0x00,0x00, 0x05,0x05,0x05, 0x08,0x08,0x08, 0x0b,0x0b,0x0b, 0x0e,0x0e,0x0e, 0x11,0x11,0x11, 0x14,0x14,0x14, 0x18,0x18,0x18,
+ 0x1c,0x1c,0x1c, 0x20,0x20,0x20, 0x24,0x24,0x24, 0x28,0x28,0x28, 0x2d,0x2d,0x2d, 0x32,0x32,0x32, 0x38,0x38,0x38, 0x3f,0x3f,0x3f,
+ 0x00,0x00,0x3f, 0x10,0x00,0x3f, 0x1f,0x00,0x3f, 0x2f,0x00,0x3f, 0x3f,0x00,0x3f, 0x3f,0x00,0x2f, 0x3f,0x00,0x1f, 0x3f,0x00,0x10,
+ 0x3f,0x00,0x00, 0x3f,0x10,0x00, 0x3f,0x1f,0x00, 0x3f,0x2f,0x00, 0x3f,0x3f,0x00, 0x2f,0x3f,0x00, 0x1f,0x3f,0x00, 0x10,0x3f,0x00,
+ 0x00,0x3f,0x00, 0x00,0x3f,0x10, 0x00,0x3f,0x1f, 0x00,0x3f,0x2f, 0x00,0x3f,0x3f, 0x00,0x2f,0x3f, 0x00,0x1f,0x3f, 0x00,0x10,0x3f,
+ 0x1f,0x1f,0x3f, 0x27,0x1f,0x3f, 0x2f,0x1f,0x3f, 0x37,0x1f,0x3f, 0x3f,0x1f,0x3f, 0x3f,0x1f,0x37, 0x3f,0x1f,0x2f, 0x3f,0x1f,0x27,
+
+ 0x3f,0x1f,0x1f, 0x3f,0x27,0x1f, 0x3f,0x2f,0x1f, 0x3f,0x37,0x1f, 0x3f,0x3f,0x1f, 0x37,0x3f,0x1f, 0x2f,0x3f,0x1f, 0x27,0x3f,0x1f,
+ 0x1f,0x3f,0x1f, 0x1f,0x3f,0x27, 0x1f,0x3f,0x2f, 0x1f,0x3f,0x37, 0x1f,0x3f,0x3f, 0x1f,0x37,0x3f, 0x1f,0x2f,0x3f, 0x1f,0x27,0x3f,
+ 0x2d,0x2d,0x3f, 0x31,0x2d,0x3f, 0x36,0x2d,0x3f, 0x3a,0x2d,0x3f, 0x3f,0x2d,0x3f, 0x3f,0x2d,0x3a, 0x3f,0x2d,0x36, 0x3f,0x2d,0x31,
+ 0x3f,0x2d,0x2d, 0x3f,0x31,0x2d, 0x3f,0x36,0x2d, 0x3f,0x3a,0x2d, 0x3f,0x3f,0x2d, 0x3a,0x3f,0x2d, 0x36,0x3f,0x2d, 0x31,0x3f,0x2d,
+ 0x2d,0x3f,0x2d, 0x2d,0x3f,0x31, 0x2d,0x3f,0x36, 0x2d,0x3f,0x3a, 0x2d,0x3f,0x3f, 0x2d,0x3a,0x3f, 0x2d,0x36,0x3f, 0x2d,0x31,0x3f,
+ 0x00,0x00,0x1c, 0x07,0x00,0x1c, 0x0e,0x00,0x1c, 0x15,0x00,0x1c, 0x1c,0x00,0x1c, 0x1c,0x00,0x15, 0x1c,0x00,0x0e, 0x1c,0x00,0x07,
+ 0x1c,0x00,0x00, 0x1c,0x07,0x00, 0x1c,0x0e,0x00, 0x1c,0x15,0x00, 0x1c,0x1c,0x00, 0x15,0x1c,0x00, 0x0e,0x1c,0x00, 0x07,0x1c,0x00,
+ 0x00,0x1c,0x00, 0x00,0x1c,0x07, 0x00,0x1c,0x0e, 0x00,0x1c,0x15, 0x00,0x1c,0x1c, 0x00,0x15,0x1c, 0x00,0x0e,0x1c, 0x00,0x07,0x1c,
+
+ 0x0e,0x0e,0x1c, 0x11,0x0e,0x1c, 0x15,0x0e,0x1c, 0x18,0x0e,0x1c, 0x1c,0x0e,0x1c, 0x1c,0x0e,0x18, 0x1c,0x0e,0x15, 0x1c,0x0e,0x11,
+ 0x1c,0x0e,0x0e, 0x1c,0x11,0x0e, 0x1c,0x15,0x0e, 0x1c,0x18,0x0e, 0x1c,0x1c,0x0e, 0x18,0x1c,0x0e, 0x15,0x1c,0x0e, 0x11,0x1c,0x0e,
+ 0x0e,0x1c,0x0e, 0x0e,0x1c,0x11, 0x0e,0x1c,0x15, 0x0e,0x1c,0x18, 0x0e,0x1c,0x1c, 0x0e,0x18,0x1c, 0x0e,0x15,0x1c, 0x0e,0x11,0x1c,
+ 0x14,0x14,0x1c, 0x16,0x14,0x1c, 0x18,0x14,0x1c, 0x1a,0x14,0x1c, 0x1c,0x14,0x1c, 0x1c,0x14,0x1a, 0x1c,0x14,0x18, 0x1c,0x14,0x16,
+ 0x1c,0x14,0x14, 0x1c,0x16,0x14, 0x1c,0x18,0x14, 0x1c,0x1a,0x14, 0x1c,0x1c,0x14, 0x1a,0x1c,0x14, 0x18,0x1c,0x14, 0x16,0x1c,0x14,
+ 0x14,0x1c,0x14, 0x14,0x1c,0x16, 0x14,0x1c,0x18, 0x14,0x1c,0x1a, 0x14,0x1c,0x1c, 0x14,0x1a,0x1c, 0x14,0x18,0x1c, 0x14,0x16,0x1c,
+ 0x00,0x00,0x10, 0x04,0x00,0x10, 0x08,0x00,0x10, 0x0c,0x00,0x10, 0x10,0x00,0x10, 0x10,0x00,0x0c, 0x10,0x00,0x08, 0x10,0x00,0x04,
+ 0x10,0x00,0x00, 0x10,0x04,0x00, 0x10,0x08,0x00, 0x10,0x0c,0x00, 0x10,0x10,0x00, 0x0c,0x10,0x00, 0x08,0x10,0x00, 0x04,0x10,0x00,
+
+ 0x00,0x10,0x00, 0x00,0x10,0x04, 0x00,0x10,0x08, 0x00,0x10,0x0c, 0x00,0x10,0x10, 0x00,0x0c,0x10, 0x00,0x08,0x10, 0x00,0x04,0x10,
+ 0x08,0x08,0x10, 0x0a,0x08,0x10, 0x0c,0x08,0x10, 0x0e,0x08,0x10, 0x10,0x08,0x10, 0x10,0x08,0x0e, 0x10,0x08,0x0c, 0x10,0x08,0x0a,
+ 0x10,0x08,0x08, 0x10,0x0a,0x08, 0x10,0x0c,0x08, 0x10,0x0e,0x08, 0x10,0x10,0x08, 0x0e,0x10,0x08, 0x0c,0x10,0x08, 0x0a,0x10,0x08,
+ 0x08,0x10,0x08, 0x08,0x10,0x0a, 0x08,0x10,0x0c, 0x08,0x10,0x0e, 0x08,0x10,0x10, 0x08,0x0e,0x10, 0x08,0x0c,0x10, 0x08,0x0a,0x10,
+ 0x0b,0x0b,0x10, 0x0c,0x0b,0x10, 0x0d,0x0b,0x10, 0x0f,0x0b,0x10, 0x10,0x0b,0x10, 0x10,0x0b,0x0f, 0x10,0x0b,0x0d, 0x10,0x0b,0x0c,
+ 0x10,0x0b,0x0b, 0x10,0x0c,0x0b, 0x10,0x0d,0x0b, 0x10,0x0f,0x0b, 0x10,0x10,0x0b, 0x0f,0x10,0x0b, 0x0d,0x10,0x0b, 0x0c,0x10,0x0b,
+ 0x0b,0x10,0x0b, 0x0b,0x10,0x0c, 0x0b,0x10,0x0d, 0x0b,0x10,0x0f, 0x0b,0x10,0x10, 0x0b,0x0f,0x10, 0x0b,0x0d,0x10, 0x0b,0x0c,0x10,
+ 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00
+};
+
+static uint8_t static_functionality[0x10]=
+{
+ /* 0 */ 0xff, // All modes supported #1
+ /* 1 */ 0xe0, // All modes supported #2
+ /* 2 */ 0x0f, // All modes supported #3
+ /* 3 */ 0x00, 0x00, 0x00, 0x00, // reserved
+ /* 7 */ 0x07, // 200, 350, 400 scan lines
+ /* 8 */ 0x02, // maximum number of visible charsets in text mode
+ /* 9 */ 0x08, // total number of charset blocks in text mode
+ /* a */ 0xe7, // Change to add new functions
+ /* b */ 0x0c, // Change to add new functions
+ /* c */ 0x00, // reserved
+ /* d */ 0x00, // reserved
+ /* e */ 0x00, // Change to add new functions
+ /* f */ 0x00 // reserved
+};
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_BIOS_vgatables_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
new file mode 100644
index 00000000..58b0759a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
@@ -0,0 +1,7580 @@
+/* $Id: DevVGA-SVGA-cmd.cpp $ */
+/** @file
+ * VMware SVGA device - implementation of VMSVGA commands.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef IN_RING3
+# error "DevVGA-SVGA-cmd.cpp is only for ring-3 code"
+#endif
+
+
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <iprt/mem.h>
+#include <VBox/AssertGuest.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pdmdev.h>
+#include <VBoxVideo.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+/* Should be included after DevVGA.h/DevVGA-SVGA.h to pick all defines. */
+#ifdef VBOX_WITH_VMSVGA3D
+# include "DevVGA-SVGA3d.h"
+#endif
+#include "DevVGA-SVGA-internal.h"
+
+#include <iprt/formats/bmp.h>
+#include <stdio.h>
+
+#if defined(LOG_ENABLED) || defined(VBOX_STRICT)
+# define SVGA_CASE_ID2STR(idx) case idx: return #idx
+
+static const char *vmsvgaFifo3dCmdToString(SVGAFifo3dCmdId enmCmdId)
+{
+ switch (enmCmdId)
+ {
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LEGACY_BASE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_DEFINE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_DESTROY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_STRETCHBLT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_DMA);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_CONTEXT_DEFINE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_CONTEXT_DESTROY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETTRANSFORM);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETZRANGE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETRENDERSTATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETRENDERTARGET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETTEXTURESTATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETMATERIAL);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETLIGHTDATA);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETLIGHTENABLED);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETVIEWPORT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETCLIPPLANE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_CLEAR);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_PRESENT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SHADER_DEFINE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SHADER_DESTROY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_SHADER_CONST);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DRAW_PRIMITIVES);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SETSCISSORRECT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BEGIN_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_END_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_WAIT_FOR_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_PRESENT_READBACK);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_DEFINE_V2);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_GENERATE_MIPMAPS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD4); /* SVGA_3D_CMD_VIDEO_CREATE_DECODER */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD5); /* SVGA_3D_CMD_VIDEO_DESTROY_DECODER */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD6); /* SVGA_3D_CMD_VIDEO_CREATE_PROCESSOR */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD7); /* SVGA_3D_CMD_VIDEO_DESTROY_PROCESSOR */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD8); /* SVGA_3D_CMD_VIDEO_DECODE_START_FRAME */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD9); /* SVGA_3D_CMD_VIDEO_DECODE_RENDER */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD10); /* SVGA_3D_CMD_VIDEO_DECODE_END_FRAME */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD11); /* SVGA_3D_CMD_VIDEO_PROCESS_FRAME */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_ACTIVATE_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEACTIVATE_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SCREEN_DMA);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION); /* SVGA_3D_CMD_DEAD1 */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD2);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD12); /* Old SVGA_3D_CMD_LOGICOPS_BITBLT */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD13); /* Old SVGA_3D_CMD_LOGICOPS_TRANSBLT */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD14); /* Old SVGA_3D_CMD_LOGICOPS_STRETCHBLT */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD15); /* Old SVGA_3D_CMD_LOGICOPS_COLORFILL */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD16); /* Old SVGA_3D_CMD_LOGICOPS_ALPHABLEND */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD17); /* Old SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND */
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_OTABLE_BASE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_READBACK_OTABLE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_MOB);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DESTROY_GB_MOB);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD3);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DESTROY_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BIND_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_COND_BIND_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_UPDATE_GB_IMAGE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_UPDATE_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_READBACK_GB_IMAGE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_READBACK_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_INVALIDATE_GB_IMAGE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_INVALIDATE_GB_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DESTROY_GB_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BIND_GB_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_READBACK_GB_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_INVALIDATE_GB_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DESTROY_GB_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BIND_GB_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_OTABLE_BASE64);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BEGIN_GB_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_END_GB_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_WAIT_FOR_GB_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_NOP);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_ENABLE_GART);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DISABLE_GART);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_MAP_MOB_INTO_GART);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_UNMAP_GART_RANGE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_SCREENTARGET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DESTROY_GB_SCREENTARGET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BIND_GB_SCREENTARGET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_UPDATE_GB_SCREENTARGET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_GB_SCREEN_DMA);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_GB_MOB_FENCE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_SURFACE_V2);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_MOB64);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_REDEFINE_GB_MOB64);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_NOP_ERROR);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_VERTEX_STREAMS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_VERTEX_DECLS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SET_VERTEX_DIVISORS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DRAW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DRAW_INDEXED);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_READBACK_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_INVALIDATE_CONTEXT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SHADER_RESOURCES);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SAMPLERS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW_INDEXED);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW_INSTANCED);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW_AUTO);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_INPUT_LAYOUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_INDEX_BUFFER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_TOPOLOGY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_RENDERTARGETS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_BLEND_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_RASTERIZER_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_QUERY_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BEGIN_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_END_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_READBACK_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_PREDICATION);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SOTARGETS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_VIEWPORTS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SCISSORRECTS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRED_COPY_REGION);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRED_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRESENTBLT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_GENMIPS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_READBACK_SUBRESOURCE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_BLEND_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_BLEND_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_STREAMOUTPUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_COTABLE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_READBACK_COTABLE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BUFFER_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_MOVE_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_ALL_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_READBACK_ALL_QUERY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_MOB_FENCE_64);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_ALL_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_HINT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BUFFER_UPDATE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SCREEN_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED1);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED2);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED3);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED4);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED5);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED6);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED7);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED8);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_GROW_OTABLE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_GROW_COTABLE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_INTRA_SURFACE_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_SURFACE_V3);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_RESOLVE_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRED_RESOLVE_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRED_CONVERT_REGION);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_PRED_CONVERT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_WHOLE_SURFACE_COPY);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_UA_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DESTROY_UA_VIEW);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_UA_VIEWS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DISPATCH);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DISPATCH_INDIRECT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_WRITE_ZERO_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_HINT_ZERO_SURFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LOGICOPS_BITBLT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LOGICOPS_TRANSBLT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LOGICOPS_STRETCHBLT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LOGICOPS_COLORFILL);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LOGICOPS_ALPHABLEND);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED2_1);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED2_2);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DEFINE_GB_SURFACE_V4);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_CS_UA_VIEWS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_MIN_LOD);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED2_3);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_RESERVED2_4);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_SET_SHADER_IFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_STREAMOUTPUT);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_SURFACE_STRETCHBLT_NON_MS_TO_MS);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_DX_BIND_SHADER_IFACE);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_MAX);
+ SVGA_CASE_ID2STR(SVGA_3D_CMD_FUTURE_MAX);
+ }
+ return "UNKNOWN_3D";
+}
+
+/**
+ * FIFO command name lookup
+ *
+ * @returns FIFO command string or "UNKNOWN"
+ * @param u32Cmd FIFO command
+ */
+const char *vmsvgaR3FifoCmdToString(uint32_t u32Cmd)
+{
+ switch (u32Cmd)
+ {
+ SVGA_CASE_ID2STR(SVGA_CMD_INVALID_CMD);
+ SVGA_CASE_ID2STR(SVGA_CMD_UPDATE);
+ SVGA_CASE_ID2STR(SVGA_CMD_RECT_FILL);
+ SVGA_CASE_ID2STR(SVGA_CMD_RECT_COPY);
+ SVGA_CASE_ID2STR(SVGA_CMD_RECT_ROP_COPY);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEFINE_CURSOR);
+ SVGA_CASE_ID2STR(SVGA_CMD_DISPLAY_CURSOR);
+ SVGA_CASE_ID2STR(SVGA_CMD_MOVE_CURSOR);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEFINE_ALPHA_CURSOR);
+ SVGA_CASE_ID2STR(SVGA_CMD_UPDATE_VERBOSE);
+ SVGA_CASE_ID2STR(SVGA_CMD_FRONT_ROP_FILL);
+ SVGA_CASE_ID2STR(SVGA_CMD_FENCE);
+ SVGA_CASE_ID2STR(SVGA_CMD_ESCAPE);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEFINE_SCREEN);
+ SVGA_CASE_ID2STR(SVGA_CMD_DESTROY_SCREEN);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEFINE_GMRFB);
+ SVGA_CASE_ID2STR(SVGA_CMD_BLIT_GMRFB_TO_SCREEN);
+ SVGA_CASE_ID2STR(SVGA_CMD_BLIT_SCREEN_TO_GMRFB);
+ SVGA_CASE_ID2STR(SVGA_CMD_ANNOTATION_FILL);
+ SVGA_CASE_ID2STR(SVGA_CMD_ANNOTATION_COPY);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEFINE_GMR2);
+ SVGA_CASE_ID2STR(SVGA_CMD_REMAP_GMR2);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEAD);
+ SVGA_CASE_ID2STR(SVGA_CMD_DEAD_2);
+ SVGA_CASE_ID2STR(SVGA_CMD_NOP);
+ SVGA_CASE_ID2STR(SVGA_CMD_NOP_ERROR);
+ SVGA_CASE_ID2STR(SVGA_CMD_MAX);
+ default:
+ if ( u32Cmd >= SVGA_3D_CMD_BASE
+ && u32Cmd < SVGA_3D_CMD_MAX)
+ return vmsvgaFifo3dCmdToString((SVGAFifo3dCmdId)u32Cmd);
+ }
+ return "UNKNOWN";
+}
+# undef SVGA_CASE_ID2STR
+#endif /* LOG_ENABLED || VBOX_STRICT */
+
+
+/*
+ *
+ * Guest-Backed Objects (GBO).
+ *
+ */
+
+#ifdef VBOX_WITH_VMSVGA3D
+
+static int vmsvgaR3GboCreate(PVMSVGAR3STATE pSvgaR3State, SVGAMobFormat ptDepth, PPN64 baseAddress, uint32_t sizeInBytes, PVMSVGAGBO pGbo)
+{
+ ASSERT_GUEST_RETURN(sizeInBytes <= _128M, VERR_INVALID_PARAMETER); /** @todo Less than SVGA_REG_MOB_MAX_SIZE */
+
+ /*
+ * The 'baseAddress' is a page number and points to the 'root page' of the GBO.
+ * Content of the root page depends on the ptDepth value:
+ * SVGA3D_MOBFMT_PTDEPTH[64]_0 - the only data page;
+ * SVGA3D_MOBFMT_PTDEPTH[64]_1 - array of page numbers for data pages;
+ * SVGA3D_MOBFMT_PTDEPTH[64]_2 - array of page numbers for SVGA3D_MOBFMT_PTDEPTH[64]_1 pages.
+ * The code below extracts the page addresses of the GBO.
+ */
+
+ /* Verify and normalize the ptDepth value. */
+ bool fGCPhys64; /* Whether the page table contains 64 bit page numbers. */
+ if (RT_LIKELY( ptDepth == SVGA3D_MOBFMT_PTDEPTH64_0
+ || ptDepth == SVGA3D_MOBFMT_PTDEPTH64_1
+ || ptDepth == SVGA3D_MOBFMT_PTDEPTH64_2))
+ fGCPhys64 = true;
+ else if ( ptDepth == SVGA3D_MOBFMT_PTDEPTH_0
+ || ptDepth == SVGA3D_MOBFMT_PTDEPTH_1
+ || ptDepth == SVGA3D_MOBFMT_PTDEPTH_2)
+ {
+ fGCPhys64 = false;
+ /* Shift ptDepth to the SVGA3D_MOBFMT_PTDEPTH64_x range. */
+ ptDepth = (SVGAMobFormat)(ptDepth + SVGA3D_MOBFMT_PTDEPTH64_0 - SVGA3D_MOBFMT_PTDEPTH_0);
+ }
+ else if (ptDepth == SVGA3D_MOBFMT_RANGE)
+ fGCPhys64 = false; /* Does not matter, there is no page table. */
+ else
+ ASSERT_GUEST_FAILED_RETURN(VERR_INVALID_PARAMETER);
+
+ uint32_t const cPPNsPerPage = X86_PAGE_SIZE / (fGCPhys64 ? sizeof(PPN64) : sizeof(PPN));
+
+ pGbo->cbTotal = sizeInBytes;
+ pGbo->cTotalPages = (sizeInBytes + X86_PAGE_SIZE - 1) >> X86_PAGE_SHIFT;
+
+ /* Allocate the maximum amount possible (everything non-continuous) */
+ PVMSVGAGBODESCRIPTOR paDescriptors = (PVMSVGAGBODESCRIPTOR)RTMemAlloc(pGbo->cTotalPages * sizeof(VMSVGAGBODESCRIPTOR));
+ AssertReturn(paDescriptors, VERR_NO_MEMORY);
+
+ int rc = VINF_SUCCESS;
+ if (ptDepth == SVGA3D_MOBFMT_PTDEPTH64_0)
+ {
+ ASSERT_GUEST_STMT_RETURN(pGbo->cTotalPages == 1,
+ RTMemFree(paDescriptors),
+ VERR_INVALID_PARAMETER);
+
+ RTGCPHYS GCPhys = (RTGCPHYS)baseAddress << X86_PAGE_SHIFT;
+ GCPhys &= UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ paDescriptors[0].GCPhys = GCPhys;
+ paDescriptors[0].cPages = 1;
+ }
+ else if (ptDepth == SVGA3D_MOBFMT_PTDEPTH64_1)
+ {
+ ASSERT_GUEST_STMT_RETURN(pGbo->cTotalPages <= cPPNsPerPage,
+ RTMemFree(paDescriptors),
+ VERR_INVALID_PARAMETER);
+
+ /* Read the root page. */
+ uint8_t au8RootPage[X86_PAGE_SIZE];
+ RTGCPHYS GCPhys = (RTGCPHYS)baseAddress << X86_PAGE_SHIFT;
+ rc = PDMDevHlpPCIPhysRead(pSvgaR3State->pDevIns, GCPhys, &au8RootPage, sizeof(au8RootPage));
+ if (RT_SUCCESS(rc))
+ {
+ PPN64 *paPPN64 = (PPN64 *)&au8RootPage[0];
+ PPN *paPPN32 = (PPN *)&au8RootPage[0];
+ for (uint32_t iPPN = 0; iPPN < pGbo->cTotalPages; ++iPPN)
+ {
+ GCPhys = (RTGCPHYS)(fGCPhys64 ? paPPN64[iPPN] : paPPN32[iPPN]) << X86_PAGE_SHIFT;
+ GCPhys &= UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ paDescriptors[iPPN].GCPhys = GCPhys;
+ paDescriptors[iPPN].cPages = 1;
+ }
+ }
+ }
+ else if (ptDepth == SVGA3D_MOBFMT_PTDEPTH64_2)
+ {
+ ASSERT_GUEST_STMT_RETURN(pGbo->cTotalPages <= cPPNsPerPage * cPPNsPerPage,
+ RTMemFree(paDescriptors),
+ VERR_INVALID_PARAMETER);
+
+ /* Read the Level2 root page. */
+ uint8_t au8RootPageLevel2[X86_PAGE_SIZE];
+ RTGCPHYS GCPhys = (RTGCPHYS)baseAddress << X86_PAGE_SHIFT;
+ rc = PDMDevHlpPCIPhysRead(pSvgaR3State->pDevIns, GCPhys, &au8RootPageLevel2, sizeof(au8RootPageLevel2));
+ if (RT_SUCCESS(rc))
+ {
+ uint32_t cPagesLeft = pGbo->cTotalPages;
+
+ PPN64 *paPPN64Level2 = (PPN64 *)&au8RootPageLevel2[0];
+ PPN *paPPN32Level2 = (PPN *)&au8RootPageLevel2[0];
+
+ uint32_t const cPPNsLevel2 = (pGbo->cTotalPages + cPPNsPerPage - 1) / cPPNsPerPage;
+ for (uint32_t iPPNLevel2 = 0; iPPNLevel2 < cPPNsLevel2; ++iPPNLevel2)
+ {
+ /* Read the Level1 root page. */
+ uint8_t au8RootPage[X86_PAGE_SIZE];
+ RTGCPHYS GCPhysLevel1 = (RTGCPHYS)(fGCPhys64 ? paPPN64Level2[iPPNLevel2] : paPPN32Level2[iPPNLevel2]) << X86_PAGE_SHIFT;
+ GCPhys &= UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ rc = PDMDevHlpPCIPhysRead(pSvgaR3State->pDevIns, GCPhysLevel1, &au8RootPage, sizeof(au8RootPage));
+ if (RT_SUCCESS(rc))
+ {
+ PPN64 *paPPN64 = (PPN64 *)&au8RootPage[0];
+ PPN *paPPN32 = (PPN *)&au8RootPage[0];
+
+ uint32_t const cPPNs = RT_MIN(cPagesLeft, cPPNsPerPage);
+ for (uint32_t iPPN = 0; iPPN < cPPNs; ++iPPN)
+ {
+ GCPhys = (RTGCPHYS)(fGCPhys64 ? paPPN64[iPPN] : paPPN32[iPPN]) << X86_PAGE_SHIFT;
+ GCPhys &= UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ paDescriptors[iPPN + iPPNLevel2 * cPPNsPerPage].GCPhys = GCPhys;
+ paDescriptors[iPPN + iPPNLevel2 * cPPNsPerPage].cPages = 1;
+ }
+ cPagesLeft -= cPPNs;
+ }
+ }
+ }
+ }
+ else if (ptDepth == SVGA3D_MOBFMT_RANGE)
+ {
+ RTGCPHYS GCPhys = (RTGCPHYS)baseAddress << X86_PAGE_SHIFT;
+ GCPhys &= UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ paDescriptors[0].GCPhys = GCPhys;
+ paDescriptors[0].cPages = pGbo->cTotalPages;
+ }
+ else
+ {
+ AssertFailed();
+ return VERR_INTERNAL_ERROR; /* ptDepth should be already verified. */
+ }
+
+ /* Compress the descriptors. */
+ if (ptDepth != SVGA3D_MOBFMT_RANGE)
+ {
+ uint32_t iDescriptor = 0;
+ for (uint32_t i = 1; i < pGbo->cTotalPages; ++i)
+ {
+ /* Continuous physical memory? */
+ if (paDescriptors[i].GCPhys == paDescriptors[iDescriptor].GCPhys + paDescriptors[iDescriptor].cPages * X86_PAGE_SIZE)
+ {
+ Assert(paDescriptors[iDescriptor].cPages);
+ paDescriptors[iDescriptor].cPages++;
+ Log5Func(("Page %x GCPhys=%RGp successor\n", i, paDescriptors[i].GCPhys));
+ }
+ else
+ {
+ iDescriptor++;
+ paDescriptors[iDescriptor].GCPhys = paDescriptors[i].GCPhys;
+ paDescriptors[iDescriptor].cPages = 1;
+ Log5Func(("Page %x GCPhys=%RGp\n", i, paDescriptors[iDescriptor].GCPhys));
+ }
+ }
+
+ pGbo->cDescriptors = iDescriptor + 1;
+ Log5Func(("Nr of descriptors %d\n", pGbo->cDescriptors));
+ }
+ else
+ pGbo->cDescriptors = 1;
+
+ if (RT_LIKELY(pGbo->cDescriptors < pGbo->cTotalPages))
+ {
+ pGbo->paDescriptors = (PVMSVGAGBODESCRIPTOR)RTMemRealloc(paDescriptors, pGbo->cDescriptors * sizeof(VMSVGAGBODESCRIPTOR));
+ AssertReturn(pGbo->paDescriptors, VERR_NO_MEMORY);
+ }
+ else
+ pGbo->paDescriptors = paDescriptors;
+
+ pGbo->fGboFlags = 0;
+ pGbo->pvHost = NULL;
+
+ return VINF_SUCCESS;
+}
+
+
+static void vmsvgaR3GboDestroy(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo)
+{
+ RT_NOREF(pSvgaR3State);
+
+ if (RT_LIKELY(VMSVGA_IS_GBO_CREATED(pGbo)))
+ {
+ RTMemFree(pGbo->paDescriptors);
+ RT_ZERO(*pGbo);
+ }
+}
+
+/** @todo static void vmsvgaR3GboWriteProtect(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo, bool fWriteProtect) */
+
+typedef enum VMSVGAGboTransferDirection
+{
+ VMSVGAGboTransferDirection_Read,
+ VMSVGAGboTransferDirection_Write,
+} VMSVGAGboTransferDirection;
+
+static int vmsvgaR3GboTransfer(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo,
+ uint32_t off, void *pvData, uint32_t cbData,
+ VMSVGAGboTransferDirection enmDirection)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ int rc = VINF_SUCCESS;
+ uint8_t *pu8CurrentHost = (uint8_t *)pvData;
+
+ /* Find the right descriptor */
+ PCVMSVGAGBODESCRIPTOR const paDescriptors = pGbo->paDescriptors;
+ uint32_t iDescriptor = 0; /* Index in the descriptor array. */
+ uint32_t offDescriptor = 0; /* GMR offset of the current descriptor. */
+ while (offDescriptor + paDescriptors[iDescriptor].cPages * X86_PAGE_SIZE <= off)
+ {
+ offDescriptor += paDescriptors[iDescriptor].cPages * X86_PAGE_SIZE;
+ AssertReturn(offDescriptor < pGbo->cbTotal, VERR_INTERNAL_ERROR); /* overflow protection */
+ ++iDescriptor;
+ AssertReturn(iDescriptor < pGbo->cDescriptors, VERR_INTERNAL_ERROR);
+ }
+
+ while (cbData)
+ {
+ uint32_t cbToCopy;
+ if (off + cbData <= offDescriptor + paDescriptors[iDescriptor].cPages * X86_PAGE_SIZE)
+ cbToCopy = cbData;
+ else
+ {
+ cbToCopy = (offDescriptor + paDescriptors[iDescriptor].cPages * X86_PAGE_SIZE - off);
+ AssertReturn(cbToCopy <= cbData, VERR_INVALID_PARAMETER);
+ }
+
+ RTGCPHYS const GCPhys = paDescriptors[iDescriptor].GCPhys + off - offDescriptor;
+ Log5Func(("%s phys=%RGp\n", (enmDirection == VMSVGAGboTransferDirection_Read) ? "READ" : "WRITE", GCPhys));
+
+ /*
+ * We are deliberately using the non-PCI version of PDMDevHlpPCIPhys[Read|Write] as the
+ * guest-side VMSVGA driver seems to allocate non-DMA (regular physical) addresses,
+ * see @bugref{9654#c75}.
+ */
+ if (enmDirection == VMSVGAGboTransferDirection_Read)
+ rc = PDMDevHlpPhysRead(pSvgaR3State->pDevIns, GCPhys, pu8CurrentHost, cbToCopy);
+ else
+ rc = PDMDevHlpPhysWrite(pSvgaR3State->pDevIns, GCPhys, pu8CurrentHost, cbToCopy);
+ AssertRCBreak(rc);
+
+ cbData -= cbToCopy;
+ off += cbToCopy;
+ pu8CurrentHost += cbToCopy;
+
+ /* Go to the next descriptor if there's anything left. */
+ if (cbData)
+ {
+ offDescriptor += paDescriptors[iDescriptor].cPages * X86_PAGE_SIZE;
+ AssertReturn(offDescriptor < pGbo->cbTotal, VERR_INTERNAL_ERROR);
+ ++iDescriptor;
+ AssertReturn(iDescriptor < pGbo->cDescriptors, VERR_INTERNAL_ERROR);
+ }
+ }
+ return rc;
+}
+
+
+static int vmsvgaR3GboWrite(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo,
+ uint32_t off, void const *pvData, uint32_t cbData)
+{
+ return vmsvgaR3GboTransfer(pSvgaR3State, pGbo,
+ off, (void *)pvData, cbData,
+ VMSVGAGboTransferDirection_Write);
+}
+
+
+static int vmsvgaR3GboRead(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo,
+ uint32_t off, void *pvData, uint32_t cbData)
+{
+ return vmsvgaR3GboTransfer(pSvgaR3State, pGbo,
+ off, pvData, cbData,
+ VMSVGAGboTransferDirection_Read);
+}
+
+
+static int vmsvgaR3GboBackingStoreCreate(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo, uint32_t cbValid)
+{
+ int rc;
+
+ /* Just reread the data if pvHost has been allocated already. */
+ if (!(pGbo->fGboFlags & VMSVGAGBO_F_HOST_BACKED))
+ pGbo->pvHost = RTMemAllocZ(pGbo->cbTotal);
+
+ if (pGbo->pvHost)
+ {
+ cbValid = RT_MIN(cbValid, pGbo->cbTotal);
+ rc = vmsvgaR3GboRead(pSvgaR3State, pGbo, 0, pGbo->pvHost, cbValid);
+ }
+ else
+ rc = VERR_NO_MEMORY;
+
+ if (RT_SUCCESS(rc))
+ pGbo->fGboFlags |= VMSVGAGBO_F_HOST_BACKED;
+ else
+ {
+ RTMemFree(pGbo->pvHost);
+ pGbo->pvHost = NULL;
+ }
+ return rc;
+}
+
+
+static void vmsvgaR3GboBackingStoreDelete(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo)
+{
+ RT_NOREF(pSvgaR3State);
+ AssertReturnVoid(pGbo->fGboFlags & VMSVGAGBO_F_HOST_BACKED);
+ RTMemFree(pGbo->pvHost);
+ pGbo->pvHost = NULL;
+ pGbo->fGboFlags &= ~VMSVGAGBO_F_HOST_BACKED;
+}
+
+
+static int vmsvgaR3GboBackingStoreWriteToGuest(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo)
+{
+ AssertReturn(pGbo->fGboFlags & VMSVGAGBO_F_HOST_BACKED, VERR_INVALID_STATE);
+ return vmsvgaR3GboWrite(pSvgaR3State, pGbo, 0, pGbo->pvHost, pGbo->cbTotal);
+}
+
+
+static int vmsvgaR3GboBackingStoreReadFromGuest(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGbo)
+{
+ AssertReturn(pGbo->fGboFlags & VMSVGAGBO_F_HOST_BACKED, VERR_INVALID_STATE);
+ return vmsvgaR3GboRead(pSvgaR3State, pGbo, 0, pGbo->pvHost, pGbo->cbTotal);
+}
+
+static int vmsvgaR3GboCopy(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGboDst, uint32_t offDst,
+ PVMSVGAGBO pGboSrc, uint32_t offSrc, uint32_t cbCopy)
+{
+ uint32_t const cbTmpBuf = GUEST_PAGE_SIZE;
+ void *pvTmpBuf = RTMemTmpAlloc(cbTmpBuf);
+ AssertPtrReturn(pvTmpBuf, VERR_NO_MEMORY);
+
+ int rc = VINF_SUCCESS;
+ while (cbCopy > 0)
+ {
+ uint32_t const cbToCopy = RT_MIN(cbTmpBuf, cbCopy);
+
+ rc = vmsvgaR3GboRead(pSvgaR3State, pGboSrc, offSrc, pvTmpBuf, cbToCopy);
+ AssertRCBreak(rc);
+
+ rc = vmsvgaR3GboWrite(pSvgaR3State, pGboDst, offDst, pvTmpBuf, cbToCopy);
+ AssertRCBreak(rc);
+
+ offSrc += cbToCopy;
+ offDst += cbToCopy;
+ cbCopy -= cbToCopy;
+ }
+
+ RTMemTmpFree(pvTmpBuf);
+ return rc;
+}
+
+
+/*
+ *
+ * Object Tables.
+ *
+ */
+
+static int vmsvgaR3OTableSetOrGrow(PVMSVGAR3STATE pSvgaR3State, SVGAOTableType type, PPN64 baseAddress,
+ uint32_t sizeInBytes, uint32 validSizeInBytes, SVGAMobFormat ptDepth, bool fGrow)
+{
+ ASSERT_GUEST_RETURN(type <= RT_ELEMENTS(pSvgaR3State->aGboOTables), VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(sizeInBytes >= validSizeInBytes, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ ASSERT_GUEST_RETURN(pSvgaR3State->aGboOTables[type].cbTotal >= validSizeInBytes, VERR_INVALID_PARAMETER);
+
+ if (sizeInBytes > 0)
+ {
+ /* Create a new guest backed object for the object table. */
+ VMSVGAGBO gbo;
+ int rc = vmsvgaR3GboCreate(pSvgaR3State, ptDepth, baseAddress, sizeInBytes, &gbo);
+ AssertRCReturn(rc, rc);
+
+ /* If the guest sets a new OTable (fGrow == false), then it has already copied the valid data to the new GBO. */
+ if (fGrow && validSizeInBytes)
+ {
+ /* Copy data from old gbo to the new one. */
+ rc = vmsvgaR3GboCopy(pSvgaR3State, &gbo, 0, &pSvgaR3State->aGboOTables[type], 0, validSizeInBytes);
+ AssertRCReturnStmt(rc, vmsvgaR3GboDestroy(pSvgaR3State, &gbo), rc);
+ }
+
+ vmsvgaR3GboDestroy(pSvgaR3State, &pSvgaR3State->aGboOTables[type]);
+ pSvgaR3State->aGboOTables[type] = gbo;
+
+ }
+ else
+ vmsvgaR3GboDestroy(pSvgaR3State, &pSvgaR3State->aGboOTables[type]);
+
+ return VINF_SUCCESS;
+}
+
+
+static int vmsvgaR3OTableVerifyIndex(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGboOTable,
+ uint32_t idx, uint32_t cbEntry)
+{
+ RT_NOREF(pSvgaR3State);
+
+ /* The table must exist and the index must be within the table. */
+ ASSERT_GUEST_RETURN(VMSVGA_IS_GBO_CREATED(pGboOTable), VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(idx < pGboOTable->cbTotal / cbEntry, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ return VINF_SUCCESS;
+}
+
+
+static int vmsvgaR3OTableRead(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGboOTable,
+ uint32_t idx, uint32_t cbEntry,
+ void *pvData, uint32_t cbData)
+{
+ AssertReturn(cbData <= cbEntry, VERR_INVALID_PARAMETER);
+
+ int rc = vmsvgaR3OTableVerifyIndex(pSvgaR3State, pGboOTable, idx, cbEntry);
+ if (RT_SUCCESS(rc))
+ {
+ uint32_t const off = idx * cbEntry;
+ rc = vmsvgaR3GboRead(pSvgaR3State, pGboOTable, off, pvData, cbData);
+ }
+ return rc;
+}
+
+static int vmsvgaR3OTableWrite(PVMSVGAR3STATE pSvgaR3State, PVMSVGAGBO pGboOTable,
+ uint32_t idx, uint32_t cbEntry,
+ void const *pvData, uint32_t cbData)
+{
+ AssertReturn(cbData <= cbEntry, VERR_INVALID_PARAMETER);
+
+ int rc = vmsvgaR3OTableVerifyIndex(pSvgaR3State, pGboOTable, idx, cbEntry);
+ if (RT_SUCCESS(rc))
+ {
+ uint32_t const off = idx * cbEntry;
+ rc = vmsvgaR3GboWrite(pSvgaR3State, pGboOTable, off, pvData, cbData);
+ }
+ return rc;
+}
+
+
+int vmsvgaR3OTableReadSurface(PVMSVGAR3STATE pSvgaR3State, uint32_t sid, SVGAOTableSurfaceEntry *pEntrySurface)
+{
+ return vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, pEntrySurface, sizeof(SVGAOTableSurfaceEntry));
+}
+
+
+/*
+ *
+ * The guest's Memory OBjects (MOB).
+ *
+ */
+
+static int vmsvgaR3MobCreate(PVMSVGAR3STATE pSvgaR3State,
+ SVGAMobFormat ptDepth, PPN64 baseAddress, uint32_t sizeInBytes, SVGAMobId mobid,
+ PVMSVGAMOB pMob)
+{
+ RT_ZERO(*pMob);
+
+ /* Update the entry in the pSvgaR3State->pGboOTableMob. */
+ SVGAOTableMobEntry entry;
+ entry.ptDepth = ptDepth;
+ entry.sizeInBytes = sizeInBytes;
+ entry.base = baseAddress;
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_MOB],
+ mobid, SVGA3D_OTABLE_MOB_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the corresponding GBO. */
+ rc = vmsvgaR3GboCreate(pSvgaR3State, ptDepth, baseAddress, sizeInBytes, &pMob->Gbo);
+ if (RT_SUCCESS(rc))
+ {
+ /* If a mob with this id already exists, then delete it. */
+ PVMSVGAMOB pOldMob = (PVMSVGAMOB)RTAvlU32Remove(&pSvgaR3State->MOBTree, mobid);
+ if (pOldMob)
+ {
+ /* This should not happen. */
+ ASSERT_GUEST_FAILED();
+ RTListNodeRemove(&pOldMob->nodeLRU);
+ vmsvgaR3GboDestroy(pSvgaR3State, &pOldMob->Gbo);
+ RTMemFree(pOldMob);
+ }
+
+ /* Add to the tree of known MOBs and the LRU list. */
+ pMob->Core.Key = mobid;
+ if (RTAvlU32Insert(&pSvgaR3State->MOBTree, &pMob->Core))
+ {
+ RTListPrepend(&pSvgaR3State->MOBLRUList, &pMob->nodeLRU);
+ return VINF_SUCCESS;
+ }
+
+ AssertFailedStmt(rc = VERR_INVALID_STATE);
+ vmsvgaR3GboDestroy(pSvgaR3State, &pMob->Gbo);
+ }
+ }
+
+ return rc;
+}
+
+
+static int vmsvgaR3MobDestroy(PVMSVGAR3STATE pSvgaR3State, SVGAMobId mobid)
+{
+ /* Update the entry in the pSvgaR3State->pGboOTableMob. */
+ SVGAOTableMobEntry entry;
+ RT_ZERO(entry);
+ vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_MOB],
+ mobid, SVGA3D_OTABLE_MOB_ENTRY_SIZE, &entry, sizeof(entry));
+
+ PVMSVGAMOB pMob = (PVMSVGAMOB)RTAvlU32Remove(&pSvgaR3State->MOBTree, mobid);
+ if (pMob)
+ {
+ RTListNodeRemove(&pMob->nodeLRU);
+ vmsvgaR3GboDestroy(pSvgaR3State, &pMob->Gbo);
+ RTMemFree(pMob);
+ return VINF_SUCCESS;
+ }
+
+ return VERR_INVALID_PARAMETER;
+}
+
+
+PVMSVGAMOB vmsvgaR3MobGet(PVMSVGAR3STATE pSvgaR3State, SVGAMobId RT_UNTRUSTED_GUEST mobid)
+{
+ if (mobid == SVGA_ID_INVALID)
+ return NULL;
+
+ PVMSVGAMOB pMob = (PVMSVGAMOB)RTAvlU32Get(&pSvgaR3State->MOBTree, mobid);
+ if (pMob)
+ {
+ /* Move to the head of the LRU list. */
+ RTListNodeRemove(&pMob->nodeLRU);
+ RTListPrepend(&pSvgaR3State->MOBLRUList, &pMob->nodeLRU);
+ }
+ else
+ ASSERT_GUEST_FAILED();
+
+ return pMob;
+}
+
+
+int vmsvgaR3MobWrite(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob,
+ uint32_t off, void const *pvData, uint32_t cbData)
+{
+ return vmsvgaR3GboWrite(pSvgaR3State, &pMob->Gbo, off, pvData, cbData);
+}
+
+
+int vmsvgaR3MobRead(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob,
+ uint32_t off, void *pvData, uint32_t cbData)
+{
+ return vmsvgaR3GboWrite(pSvgaR3State, &pMob->Gbo, off, pvData, cbData);
+}
+
+
+/** Create a host ring-3 pointer to the MOB data.
+ * Current approach is to allocate a host memory buffer and copy the guest MOB data if necessary.
+ * @param pSvgaR3State R3 device state.
+ * @param pMob The MOB.
+ * @param cbValid How many bytes of the guest backing memory contain valid data.
+ * @return VBox status.
+ */
+/** @todo uint32_t cbValid -> uint32_t offStart, uint32_t cbData */
+int vmsvgaR3MobBackingStoreCreate(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob, uint32_t cbValid)
+{
+ AssertReturn(pMob, VERR_INVALID_PARAMETER);
+ return vmsvgaR3GboBackingStoreCreate(pSvgaR3State, &pMob->Gbo, cbValid);
+}
+
+
+void vmsvgaR3MobBackingStoreDelete(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob)
+{
+ if (pMob)
+ vmsvgaR3GboBackingStoreDelete(pSvgaR3State, &pMob->Gbo);
+}
+
+
+int vmsvgaR3MobBackingStoreWriteToGuest(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob)
+{
+ if (pMob)
+ return vmsvgaR3GboBackingStoreWriteToGuest(pSvgaR3State, &pMob->Gbo);
+ return VERR_INVALID_PARAMETER;
+}
+
+
+int vmsvgaR3MobBackingStoreReadFromGuest(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob)
+{
+ if (pMob)
+ return vmsvgaR3GboBackingStoreReadFromGuest(pSvgaR3State, &pMob->Gbo);
+ return VERR_INVALID_PARAMETER;
+}
+
+
+void *vmsvgaR3MobBackingStorePtr(PVMSVGAMOB pMob, uint32_t off)
+{
+ if (pMob && (pMob->Gbo.fGboFlags & VMSVGAGBO_F_HOST_BACKED))
+ {
+ if (off <= pMob->Gbo.cbTotal)
+ return (uint8_t *)pMob->Gbo.pvHost + off;
+ }
+ return NULL;
+}
+
+#endif /* VBOX_WITH_VMSVGA3D */
+
+/*
+ * Screen objects.
+ */
+VMSVGASCREENOBJECT *vmsvgaR3GetScreenObject(PVGASTATECC pThisCC, uint32_t idScreen)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ if ( idScreen < (uint32_t)RT_ELEMENTS(pSVGAState->aScreens)
+ && pSVGAState
+ && pSVGAState->aScreens[idScreen].fDefined)
+ {
+ return &pSVGAState->aScreens[idScreen];
+ }
+ return NULL;
+}
+
+void vmsvgaR3ResetScreens(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+#ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ for (uint32_t idScreen = 0; idScreen < (uint32_t)RT_ELEMENTS(pThisCC->svga.pSvgaR3State->aScreens); ++idScreen)
+ {
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, idScreen);
+ if (pScreen)
+ vmsvga3dDestroyScreen(pThisCC, pScreen);
+ }
+ }
+#else
+ RT_NOREF(pThis, pThisCC);
+#endif
+}
+
+
+/**
+ * Copy a rectangle of pixels within guest VRAM.
+ */
+static void vmsvgaR3RectCopy(PVGASTATECC pThisCC, VMSVGASCREENOBJECT const *pScreen, uint32_t srcX, uint32_t srcY,
+ uint32_t dstX, uint32_t dstY, uint32_t width, uint32_t height, unsigned cbFrameBuffer)
+{
+ if (!width || !height)
+ return; /* Nothing to do, don't even bother. */
+
+ /*
+ * The guest VRAM (aka GFB) is considered to be a bitmap in the format
+ * corresponding to the current display mode.
+ */
+ uint32_t const cbPixel = RT_ALIGN(pScreen->cBpp, 8) / 8;
+ uint32_t const cbScanline = pScreen->cbPitch ? pScreen->cbPitch : width * cbPixel;
+ uint8_t const *pSrc;
+ uint8_t *pDst;
+ unsigned const cbRectWidth = width * cbPixel;
+ unsigned uMaxOffset;
+
+ uMaxOffset = (RT_MAX(srcY, dstY) + height) * cbScanline + (RT_MAX(srcX, dstX) + width) * cbPixel;
+ if (uMaxOffset >= cbFrameBuffer)
+ {
+ Log(("Max offset (%u) too big for framebuffer (%u bytes), ignoring!\n", uMaxOffset, cbFrameBuffer));
+ return; /* Just don't listen to a bad guest. */
+ }
+
+ pSrc = pDst = pThisCC->pbVRam;
+ pSrc += srcY * cbScanline + srcX * cbPixel;
+ pDst += dstY * cbScanline + dstX * cbPixel;
+
+ if (srcY >= dstY)
+ {
+ /* Source below destination, copy top to bottom. */
+ for (; height > 0; height--)
+ {
+ memmove(pDst, pSrc, cbRectWidth);
+ pSrc += cbScanline;
+ pDst += cbScanline;
+ }
+ }
+ else
+ {
+ /* Source above destination, copy bottom to top. */
+ pSrc += cbScanline * (height - 1);
+ pDst += cbScanline * (height - 1);
+ for (; height > 0; height--)
+ {
+ memmove(pDst, pSrc, cbRectWidth);
+ pSrc -= cbScanline;
+ pDst -= cbScanline;
+ }
+ }
+}
+
+
+/**
+ * Common worker for changing the pointer shape.
+ *
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pSVGAState The VMSVGA ring-3 instance data.
+ * @param fAlpha Whether there is alpha or not.
+ * @param xHot Hotspot x coordinate.
+ * @param yHot Hotspot y coordinate.
+ * @param cx Width.
+ * @param cy Height.
+ * @param pbData Heap copy of the cursor data. Consumed.
+ * @param cbData The size of the data.
+ */
+static void vmsvgaR3InstallNewCursor(PVGASTATECC pThisCC, PVMSVGAR3STATE pSVGAState, bool fAlpha,
+ uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy, uint8_t *pbData, uint32_t cbData)
+{
+ LogRel2(("vmsvgaR3InstallNewCursor: cx=%d cy=%d xHot=%d yHot=%d fAlpha=%d cbData=%#x\n", cx, cy, xHot, yHot, fAlpha, cbData));
+#ifdef LOG_ENABLED
+ if (LogIs2Enabled())
+ {
+ uint32_t cbAndLine = RT_ALIGN(cx, 8) / 8;
+ if (!fAlpha)
+ {
+ Log2(("VMSVGA Cursor AND mask (%d,%d):\n", cx, cy));
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ Log2(("%3u:", y));
+ uint8_t const *pbLine = &pbData[y * cbAndLine];
+ for (uint32_t x = 0; x < cx; x += 8)
+ {
+ uint8_t b = pbLine[x / 8];
+ char szByte[12];
+ szByte[0] = b & 0x80 ? '*' : ' '; /* most significant bit first */
+ szByte[1] = b & 0x40 ? '*' : ' ';
+ szByte[2] = b & 0x20 ? '*' : ' ';
+ szByte[3] = b & 0x10 ? '*' : ' ';
+ szByte[4] = b & 0x08 ? '*' : ' ';
+ szByte[5] = b & 0x04 ? '*' : ' ';
+ szByte[6] = b & 0x02 ? '*' : ' ';
+ szByte[7] = b & 0x01 ? '*' : ' ';
+ szByte[8] = '\0';
+ Log2(("%s", szByte));
+ }
+ Log2(("\n"));
+ }
+ }
+
+ Log2(("VMSVGA Cursor XOR mask (%d,%d):\n", cx, cy));
+ uint32_t const *pu32Xor = (uint32_t const *)&pbData[RT_ALIGN_32(cbAndLine * cy, 4)];
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ Log2(("%3u:", y));
+ uint32_t const *pu32Line = &pu32Xor[y * cx];
+ for (uint32_t x = 0; x < cx; x++)
+ Log2((" %08x", pu32Line[x]));
+ Log2(("\n"));
+ }
+ }
+#endif
+
+ int rc = pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv, true /*fVisible*/, fAlpha, xHot, yHot, cx, cy, pbData);
+ AssertRC(rc);
+
+ if (pSVGAState->Cursor.fActive)
+ RTMemFreeZ(pSVGAState->Cursor.pData, pSVGAState->Cursor.cbData);
+
+ pSVGAState->Cursor.fActive = true;
+ pSVGAState->Cursor.xHotspot = xHot;
+ pSVGAState->Cursor.yHotspot = yHot;
+ pSVGAState->Cursor.width = cx;
+ pSVGAState->Cursor.height = cy;
+ pSVGAState->Cursor.cbData = cbData;
+ pSVGAState->Cursor.pData = pbData;
+}
+
+
+#ifdef VBOX_WITH_VMSVGA3D
+
+/*
+ * SVGA_3D_CMD_* handlers.
+ */
+
+
+/** SVGA_3D_CMD_SURFACE_DEFINE 1040, SVGA_3D_CMD_SURFACE_DEFINE_V2 1070
+ *
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param pCmd The VMSVGA command.
+ * @param cMipLevelSizes Number of elements in the paMipLevelSizes array.
+ * @param paMipLevelSizes Arrays of surface sizes for each face and miplevel.
+ */
+static void vmsvga3dCmdDefineSurface(PVGASTATECC pThisCC, SVGA3dCmdDefineSurface_v2 const *pCmd,
+ uint32_t cMipLevelSizes, SVGA3dSize *paMipLevelSizes)
+{
+ ASSERT_GUEST_RETURN_VOID(pCmd->sid < SVGA3D_MAX_SURFACE_IDS);
+ ASSERT_GUEST_RETURN_VOID(cMipLevelSizes >= 1);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Number of faces (cFaces) is specified as the number of the first non-zero elements in the 'face' array.
+ * Since only plain surfaces (cFaces == 1) and cubemaps (cFaces == 6) are supported
+ * (see also SVGA3dCmdDefineSurface definition in svga3d_reg.h), we ignore anything else.
+ */
+ uint32_t cRemainingMipLevels = cMipLevelSizes;
+ uint32_t cFaces = 0;
+ for (uint32_t i = 0; i < SVGA3D_MAX_SURFACE_FACES; ++i)
+ {
+ if (pCmd->face[i].numMipLevels == 0)
+ break;
+
+ /* All SVGA3dSurfaceFace structures must have the same value of numMipLevels field */
+ ASSERT_GUEST_RETURN_VOID(pCmd->face[i].numMipLevels == pCmd->face[0].numMipLevels);
+
+ /* numMipLevels value can't be greater than the number of remaining elements in the paMipLevelSizes array. */
+ ASSERT_GUEST_RETURN_VOID(pCmd->face[i].numMipLevels <= cRemainingMipLevels);
+ cRemainingMipLevels -= pCmd->face[i].numMipLevels;
+
+ ++cFaces;
+ }
+ for (uint32_t i = cFaces; i < SVGA3D_MAX_SURFACE_FACES; ++i)
+ ASSERT_GUEST_RETURN_VOID(pCmd->face[i].numMipLevels == 0);
+
+ /* cFaces must be 6 for a cubemap and 1 otherwise. */
+ ASSERT_GUEST_RETURN_VOID(cFaces == (uint32_t)((pCmd->surfaceFlags & SVGA3D_SURFACE_CUBEMAP) ? 6 : 1));
+
+ /* Sum of face[i].numMipLevels must be equal to cMipLevels. */
+ ASSERT_GUEST_RETURN_VOID(cRemainingMipLevels == 0);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Verify paMipLevelSizes */
+ uint32_t cWidth = paMipLevelSizes[0].width;
+ uint32_t cHeight = paMipLevelSizes[0].height;
+ uint32_t cDepth = paMipLevelSizes[0].depth;
+ for (uint32_t i = 1; i < pCmd->face[0].numMipLevels; ++i)
+ {
+ cWidth >>= 1;
+ if (cWidth == 0) cWidth = 1;
+ cHeight >>= 1;
+ if (cHeight == 0) cHeight = 1;
+ cDepth >>= 1;
+ if (cDepth == 0) cDepth = 1;
+ for (uint32_t iFace = 0; iFace < cFaces; ++iFace)
+ {
+ uint32_t const iMipLevelSize = iFace * pCmd->face[0].numMipLevels + i;
+ ASSERT_GUEST_RETURN_VOID( cWidth == paMipLevelSizes[iMipLevelSize].width
+ && cHeight == paMipLevelSizes[iMipLevelSize].height
+ && cDepth == paMipLevelSizes[iMipLevelSize].depth);
+ }
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Create the surface. */
+ vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
+ pCmd->multisampleCount, pCmd->autogenFilter,
+ pCmd->face[0].numMipLevels, &paMipLevelSizes[0], /* arraySize = */ 0, /* fAllocMipLevels = */ true);
+}
+
+
+/* SVGA_3D_CMD_SET_OTABLE_BASE 1091 */
+static void vmsvga3dCmdSetOTableBase(PVGASTATECC pThisCC, SVGA3dCmdSetOTableBase const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ vmsvgaR3OTableSetOrGrow(pSvgaR3State, pCmd->type, pCmd->baseAddress,
+ pCmd->sizeInBytes, pCmd->validSizeInBytes, pCmd->ptDepth, /*fGrow*/ false);
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_MOB 1093 */
+static void vmsvga3dCmdDefineGBMob(PVGASTATECC pThisCC, SVGA3dCmdDefineGBMob const *pCmd)
+{
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->mobid != SVGA_ID_INVALID); /* The guest should not use this id. */
+
+ /* Maybe just update the OTable and create Gbo when the MOB is actually accessed? */
+ /* Allocate a structure for the MOB. */
+ PVMSVGAMOB pMob = (PVMSVGAMOB)RTMemAllocZ(sizeof(*pMob));
+ AssertPtrReturnVoid(pMob);
+
+ int rc = vmsvgaR3MobCreate(pSvgaR3State, pCmd->ptDepth, pCmd->base, pCmd->sizeInBytes, pCmd->mobid, pMob);
+ if (RT_SUCCESS(rc))
+ {
+ return;
+ }
+
+ AssertFailed();
+
+ RTMemFree(pMob);
+}
+
+
+/* SVGA_3D_CMD_DESTROY_GB_MOB 1094 */
+static void vmsvga3dCmdDestroyGBMob(PVGASTATECC pThisCC, SVGA3dCmdDestroyGBMob const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->mobid != SVGA_ID_INVALID); /* The guest should not use this id. */
+
+ int rc = vmsvgaR3MobDestroy(pSvgaR3State, pCmd->mobid);
+ if (RT_SUCCESS(rc))
+ {
+ return;
+ }
+
+ AssertFailed();
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_SURFACE 1097 */
+static void vmsvga3dCmdDefineGBSurface(PVGASTATECC pThisCC, SVGA3dCmdDefineGBSurface const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
+ SVGAOTableSurfaceEntry entry;
+ RT_ZERO(entry);
+ entry.format = pCmd->format;
+ entry.surface1Flags = pCmd->surfaceFlags;
+ entry.numMipLevels = pCmd->numMipLevels;
+ entry.multisampleCount = pCmd->multisampleCount;
+ entry.autogenFilter = pCmd->autogenFilter;
+ entry.size = pCmd->size;
+ entry.mobid = SVGA_ID_INVALID;
+ // entry.arraySize = 0;
+ // entry.mobPitch = 0;
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the host surface. */
+ vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
+ pCmd->multisampleCount, pCmd->autogenFilter,
+ pCmd->numMipLevels, &pCmd->size, /* arraySize = */ 0, /* fAllocMipLevels = */ false);
+ }
+}
+
+
+/* SVGA_3D_CMD_DESTROY_GB_SURFACE 1098 */
+static void vmsvga3dCmdDestroyGBSurface(PVGASTATECC pThisCC, SVGA3dCmdDestroyGBSurface const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
+ SVGAOTableSurfaceEntry entry;
+ RT_ZERO(entry);
+ entry.mobid = SVGA_ID_INVALID;
+ vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+
+ vmsvga3dSurfaceDestroy(pThisCC, pCmd->sid);
+}
+
+
+/* SVGA_3D_CMD_BIND_GB_SURFACE 1099 */
+static void vmsvga3dCmdBindGBSurface(PVGASTATECC pThisCC, SVGA3dCmdBindGBSurface const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Assign the mobid to the surface. */
+ int rc = VINF_SUCCESS;
+ if (pCmd->mobid != SVGA_ID_INVALID)
+ rc = vmsvgaR3OTableVerifyIndex(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_MOB],
+ pCmd->mobid, SVGA3D_OTABLE_MOB_ENTRY_SIZE);
+ if (RT_SUCCESS(rc))
+ {
+ SVGAOTableSurfaceEntry entry;
+ rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ entry.mobid = pCmd->mobid;
+ rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* */
+ }
+ }
+ }
+}
+
+
+typedef union
+{
+ float f;
+ uint32_t u;
+} Unsigned2Float;
+
+float float16ToFloat(uint16_t f16)
+{
+ /* Format specs from Wiki: [15] = sign, [14:10] = exponent, [9:0] = fraction */
+ uint16_t const f = f16 & 0x3FF;
+ uint16_t const e = (f16 >> 10) & 0x1F;
+ uint16_t const s = (f16 >> 15) & 0x1;
+ Unsigned2Float u2f;
+
+ if (e == 0)
+ {
+ if (f == 0)
+ {
+ /* zero, -0 */
+ u2f.u = (s << 31) | (0 << 23) | 0;
+ return u2f.f;
+ }
+
+ /* subnormal numbers: (-1)^signbit * 2^-14 * 0.significantbits */
+ float const k = 1.0f / 16384.0f; /* 2^-14 */
+ return (s ? -1.0f : 1.0f) * k * (float)f / 1024.0f;
+ }
+
+ if (e == 31)
+ {
+ if (f == 0)
+ {
+ /* +-infinity */
+ u2f.u = (s << 31) | (0xFF << 23) | 0;
+ return u2f.f;
+ }
+
+ /* NaN */
+ u2f.u = (s << 31) | (0xFF << 23) | 1;
+ return u2f.f;
+ }
+
+ /* normalized value: (-1)^signbit * 2^(exponent - 15) * 1.significantbits */
+ /* Build the float, adjusting for exponent bias (float32 bias is 127, float16 is 15)
+ * and number of bits in the fraction (float32 has 23, float16 has 10). */
+ u2f.u = (s << 31) | ((e + 127 - 15) << 23) | (f << (23 - 10));
+ return u2f.f;
+}
+
+
+static int vmsvga3dBmpWrite(const char *pszFilename, VMSVGA3D_MAPPED_SURFACE const *pMap)
+{
+ if ( pMap->cbBlock != 4 && pMap->cbBlock != 1
+ && pMap->format != SVGA3D_R16G16B16A16_FLOAT
+ && pMap->format != SVGA3D_R32G32B32A32_FLOAT)
+ return VERR_NOT_SUPPORTED;
+
+ int const w = pMap->cbRow / pMap->cbBlock;
+ int const h = pMap->cRows;
+
+ const int cbBitmap = pMap->cbRow * pMap->cRows * 4;
+
+ FILE *f = fopen(pszFilename, "wb");
+ if (!f)
+ return VERR_FILE_NOT_FOUND;
+
+ {
+ BMPFILEHDR fileHdr;
+ RT_ZERO(fileHdr);
+ fileHdr.uType = BMP_HDR_MAGIC;
+ fileHdr.cbFileSize = sizeof(BMPFILEHDR) + sizeof(BMPWIN3XINFOHDR) + cbBitmap;
+ fileHdr.offBits = sizeof(BMPFILEHDR) + sizeof(BMPWIN3XINFOHDR);
+
+ BMPWIN3XINFOHDR coreHdr;
+ RT_ZERO(coreHdr);
+ coreHdr.cbSize = sizeof(coreHdr);
+ coreHdr.uWidth = w;
+ coreHdr.uHeight = -h;
+ coreHdr.cPlanes = 1;
+ coreHdr.cBits = 32;
+ coreHdr.cbSizeImage = cbBitmap;
+
+ fwrite(&fileHdr, 1, sizeof(fileHdr), f);
+ fwrite(&coreHdr, 1, sizeof(coreHdr), f);
+ }
+
+ if (pMap->format == SVGA3D_R16G16B16A16_FLOAT)
+ {
+ const uint8_t *s = (uint8_t *)pMap->pvData;
+ for (int32_t y = 0; y < h; ++y)
+ {
+ for (int32_t x = 0; x < w; ++x)
+ {
+ uint16_t const *pu16Pixel = (uint16_t *)(s + x * 8);
+ uint8_t r = (uint8_t)(255.0 * float16ToFloat(pu16Pixel[0]));
+ uint8_t g = (uint8_t)(255.0 * float16ToFloat(pu16Pixel[1]));
+ uint8_t b = (uint8_t)(255.0 * float16ToFloat(pu16Pixel[2]));
+ uint8_t a = (uint8_t)(255.0 * float16ToFloat(pu16Pixel[3]));
+ uint32_t u32Pixel = b + (g << 8) + (r << 16) + (a << 24);
+ fwrite(&u32Pixel, 1, 4, f);
+ }
+
+ s += pMap->cbRowPitch;
+ }
+ }
+ else if (pMap->format == SVGA3D_R32G32B32A32_FLOAT)
+ {
+ const uint8_t *s = (uint8_t *)pMap->pvData;
+ for (int32_t y = 0; y < h; ++y)
+ {
+ for (int32_t x = 0; x < w; ++x)
+ {
+ float const *pPixel = (float *)(s + x * 8);
+ uint8_t r = (uint8_t)(255.0 * pPixel[0]);
+ uint8_t g = (uint8_t)(255.0 * pPixel[1]);
+ uint8_t b = (uint8_t)(255.0 * pPixel[2]);
+ uint8_t a = (uint8_t)(255.0 * pPixel[3]);
+ uint32_t u32Pixel = b + (g << 8) + (r << 16) + (a << 24);
+ fwrite(&u32Pixel, 1, 4, f);
+ }
+
+ s += pMap->cbRowPitch;
+ }
+ }
+ else if (pMap->cbBlock == 4)
+ {
+ const uint8_t *s = (uint8_t *)pMap->pvData;
+ for (uint32_t iRow = 0; iRow < pMap->cRows; ++iRow)
+ {
+ fwrite(s, 1, pMap->cbRow, f);
+
+ s += pMap->cbRowPitch;
+ }
+ }
+ else if (pMap->cbBlock == 1)
+ {
+ const uint8_t *s = (uint8_t *)pMap->pvData;
+ for (uint32_t iRow = 0; iRow < pMap->cRows; ++iRow)
+ {
+ for (int32_t x = 0; x < w; ++x)
+ {
+ uint32_t u32Pixel = s[x];
+ fwrite(&u32Pixel, 1, 4, f);
+ }
+
+ s += pMap->cbRowPitch;
+ }
+ }
+
+ fclose(f);
+
+ return VINF_SUCCESS;
+}
+
+
+void vmsvga3dMapWriteBmpFile(VMSVGA3D_MAPPED_SURFACE const *pMap, char const *pszPrefix)
+{
+ static int idxBitmap = 0;
+ char *pszFilename = RTStrAPrintf2("bmp\\%s%d.bmp", pszPrefix, idxBitmap++);
+ int rc = vmsvga3dBmpWrite(pszFilename, pMap);
+ Log(("WriteBmpFile %s format %d %Rrc\n", pszFilename, pMap->format, rc)); RT_NOREF(rc);
+ RTStrFree(pszFilename);
+}
+
+
+static int vmsvgaR3TransferSurfaceLevel(PVGASTATECC pThisCC,
+ PVMSVGAMOB pMob,
+ SVGA3dSurfaceImageId const *pImage,
+ SVGA3dBox const *pBox,
+ SVGA3dTransferType enmTransfer)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ VMSVGA3D_SURFACE_MAP enmMapType;
+ if (enmTransfer == SVGA3D_WRITE_HOST_VRAM)
+ enmMapType = pBox
+ ? VMSVGA3D_SURFACE_MAP_WRITE
+ : VMSVGA3D_SURFACE_MAP_WRITE_DISCARD;
+ else if (enmTransfer == SVGA3D_READ_HOST_VRAM)
+ enmMapType = VMSVGA3D_SURFACE_MAP_READ;
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+ VMSVGA3D_MAPPED_SURFACE map;
+ int rc = vmsvga3dSurfaceMap(pThisCC, pImage, pBox, enmMapType, &map);
+ if (RT_SUCCESS(rc))
+ {
+ /* Copy mapped surface <-> MOB. */
+ VMSGA3D_BOX_DIMENSIONS dims;
+ rc = vmsvga3dGetBoxDimensions(pThisCC, pImage, pBox, &dims);
+ if (RT_SUCCESS(rc))
+ {
+ for (uint32_t z = 0; z < map.box.d; ++z)
+ {
+ uint8_t *pu8Map = (uint8_t *)map.pvData + z * map.cbDepthPitch;
+ uint32_t offMob = dims.offSubresource + dims.offBox + z * dims.cbDepthPitch;
+
+ for (uint32_t iRow = 0; iRow < map.cRows; ++iRow)
+ {
+ if (enmTransfer == SVGA3D_READ_HOST_VRAM)
+ rc = vmsvgaR3GboWrite(pSvgaR3State, &pMob->Gbo, offMob, pu8Map, dims.cbRow);
+ else
+ rc = vmsvgaR3GboRead(pSvgaR3State, &pMob->Gbo, offMob, pu8Map, dims.cbRow);
+ AssertRCBreak(rc);
+
+ pu8Map += map.cbRowPitch;
+ offMob += dims.cbPitch;
+ }
+ }
+ }
+
+ // vmsvga3dMapWriteBmpFile(&map, "Dynamic");
+
+ bool const fWritten = (enmTransfer == SVGA3D_WRITE_HOST_VRAM);
+ vmsvga3dSurfaceUnmap(pThisCC, pImage, &map, fWritten);
+ }
+
+ return rc;
+}
+
+
+/* SVGA_3D_CMD_UPDATE_GB_IMAGE 1101 */
+static void vmsvga3dCmdUpdateGBImage(PVGASTATECC pThisCC, SVGA3dCmdUpdateGBImage const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ LogFlowFunc(("sid=%u @%u,%u,%u %ux%ux%u\n",
+ pCmd->image.sid, pCmd->box.x, pCmd->box.y, pCmd->box.z, pCmd->box.w, pCmd->box.h, pCmd->box.d));
+
+/*
+ SVGA3dSurfaceFormat format;
+ SVGA3dSurface1Flags surface1Flags;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+ SVGAMobId mobid;
+ uint32 arraySize;
+ uint32 mobPitch;
+ SVGA3dSurface2Flags surface2Flags;
+ uint8 multisamplePattern;
+ uint8 qualityLevel;
+ uint16 bufferByteStride;
+ float minLOD;
+*/
+
+ /* "update a surface from its backing MOB." */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->image.sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entrySurface.mobid);
+ if (pMob)
+ {
+ rc = vmsvgaR3TransferSurfaceLevel(pThisCC, pMob, &pCmd->image, &pCmd->box, SVGA3D_WRITE_HOST_VRAM);
+ AssertRC(rc);
+ }
+ }
+}
+
+
+/* SVGA_3D_CMD_UPDATE_GB_SURFACE 1102 */
+static void vmsvga3dCmdUpdateGBSurface(PVGASTATECC pThisCC, SVGA3dCmdUpdateGBSurface const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ LogFlowFunc(("sid=%u\n",
+ pCmd->sid));
+
+ /* "update a surface from its backing MOB." */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entrySurface.mobid);
+ if (pMob)
+ {
+ uint32 const arraySize = vmsvga3dGetArrayElements(pThisCC, pCmd->sid);
+ for (uint32_t iArray = 0; iArray < arraySize; ++iArray)
+ {
+ for (uint32_t iMipmap = 0; iMipmap < entrySurface.numMipLevels; ++iMipmap)
+ {
+ SVGA3dSurfaceImageId image;
+ image.sid = pCmd->sid;
+ image.face = iArray;
+ image.mipmap = iMipmap;
+
+ rc = vmsvgaR3TransferSurfaceLevel(pThisCC, pMob, &image, /* all pBox = */ NULL, SVGA3D_WRITE_HOST_VRAM);
+ AssertRCBreak(rc);
+ }
+ }
+ }
+ }
+}
+
+
+/* SVGA_3D_CMD_READBACK_GB_IMAGE 1103 */
+static void vmsvga3dCmdReadbackGBImage(PVGASTATECC pThisCC, SVGA3dCmdReadbackGBImage const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ LogFlowFunc(("sid=%u, face=%u, mipmap=%u\n",
+ pCmd->image.sid, pCmd->image.face, pCmd->image.mipmap));
+
+ /* Read a surface to its backing MOB. */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->image.sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entrySurface.mobid);
+ if (pMob)
+ {
+ rc = vmsvgaR3TransferSurfaceLevel(pThisCC, pMob, &pCmd->image, /* all pBox = */ NULL, SVGA3D_READ_HOST_VRAM);
+ AssertRC(rc);
+ }
+ }
+}
+
+
+/* SVGA_3D_CMD_READBACK_GB_SURFACE 1104 */
+static void vmsvga3dCmdReadbackGBSurface(PVGASTATECC pThisCC, SVGA3dCmdReadbackGBSurface const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ LogFlowFunc(("sid=%u\n",
+ pCmd->sid));
+
+ /* Read a surface to its backing MOB. */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entrySurface.mobid);
+ if (pMob)
+ {
+ uint32 const arraySize = vmsvga3dGetArrayElements(pThisCC, pCmd->sid);
+ for (uint32_t iArray = 0; iArray < arraySize; ++iArray)
+ {
+ for (uint32_t iMipmap = 0; iMipmap < entrySurface.numMipLevels; ++iMipmap)
+ {
+ SVGA3dSurfaceImageId image;
+ image.sid = pCmd->sid;
+ image.face = iArray;
+ image.mipmap = iMipmap;
+
+ rc = vmsvgaR3TransferSurfaceLevel(pThisCC, pMob, &image, /* all pBox = */ NULL, SVGA3D_READ_HOST_VRAM);
+ AssertRCBreak(rc);
+ }
+ }
+ }
+ }
+}
+
+
+/* SVGA_3D_CMD_INVALIDATE_GB_IMAGE 1105 */
+static void vmsvga3dCmdInvalidateGBImage(PVGASTATECC pThisCC, SVGA3dCmdInvalidateGBImage const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ vmsvga3dSurfaceInvalidate(pThisCC, pCmd->image.sid, pCmd->image.face, pCmd->image.mipmap);
+}
+
+
+/* SVGA_3D_CMD_INVALIDATE_GB_SURFACE 1106 */
+static void vmsvga3dCmdInvalidateGBSurface(PVGASTATECC pThisCC, SVGA3dCmdInvalidateGBSurface const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ vmsvga3dSurfaceInvalidate(pThisCC, pCmd->sid, SVGA_ID_INVALID, SVGA_ID_INVALID);
+}
+
+
+/* SVGA_3D_CMD_SET_OTABLE_BASE64 1115 */
+static void vmsvga3dCmdSetOTableBase64(PVGASTATECC pThisCC, SVGA3dCmdSetOTableBase64 const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ vmsvgaR3OTableSetOrGrow(pSvgaR3State, pCmd->type, pCmd->baseAddress,
+ pCmd->sizeInBytes, pCmd->validSizeInBytes, pCmd->ptDepth, /*fGrow*/ false);
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_SCREENTARGET 1124 */
+static void vmsvga3dCmdDefineGBScreenTarget(PVGASTATE pThis, PVGASTATECC pThisCC, SVGA3dCmdDefineGBScreenTarget const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->stid < RT_ELEMENTS(pSvgaR3State->aScreens));
+ ASSERT_GUEST_RETURN_VOID(pCmd->width > 0 && pCmd->width <= pThis->svga.u32MaxWidth); /* SVGA_REG_SCREENTARGET_MAX_WIDTH */
+ ASSERT_GUEST_RETURN_VOID(pCmd->height > 0 && pCmd->height <= pThis->svga.u32MaxHeight); /* SVGA_REG_SCREENTARGET_MAX_HEIGHT */
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Update the entry in the pSvgaR3State->pGboOTableScreenTarget. */
+ SVGAOTableScreenTargetEntry entry;
+ RT_ZERO(entry);
+ entry.image.sid = SVGA_ID_INVALID;
+ // entry.image.face = 0;
+ // entry.image.mipmap = 0;
+ entry.width = pCmd->width;
+ entry.height = pCmd->height;
+ entry.xRoot = pCmd->xRoot;
+ entry.yRoot = pCmd->yRoot;
+ entry.flags = pCmd->flags;
+ entry.dpi = pCmd->dpi;
+
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SCREENTARGET],
+ pCmd->stid, SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Screen objects and screen targets are similar, therefore we will use the same for both. */
+ /** @todo Generic screen object/target interface. */
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[pCmd->stid];
+ pScreen->fDefined = true;
+ pScreen->fModified = true;
+ pScreen->fuScreen = SVGA_SCREEN_MUST_BE_SET
+ | (RT_BOOL(pCmd->flags & SVGA_STFLAG_PRIMARY) ? SVGA_SCREEN_IS_PRIMARY : 0);
+ pScreen->idScreen = pCmd->stid;
+
+ pScreen->xOrigin = pCmd->xRoot;
+ pScreen->yOrigin = pCmd->yRoot;
+ pScreen->cWidth = pCmd->width;
+ pScreen->cHeight = pCmd->height;
+ pScreen->offVRAM = 0; /* Not applicable for screen targets, they use either a separate memory buffer or a host window. */
+ pScreen->cbPitch = pCmd->width * 4;
+ pScreen->cBpp = 32;
+
+ if (RT_LIKELY(pThis->svga.f3DEnabled))
+ vmsvga3dDefineScreen(pThis, pThisCC, pScreen);
+
+ if (!pScreen->pHwScreen)
+ {
+ /* System memory buffer. */
+ pScreen->pvScreenBitmap = RTMemAllocZ(pScreen->cHeight * pScreen->cbPitch);
+ }
+
+ pThis->svga.fGFBRegisters = false;
+ vmsvgaR3ChangeMode(pThis, pThisCC);
+ }
+}
+
+
+/* SVGA_3D_CMD_DESTROY_GB_SCREENTARGET 1125 */
+static void vmsvga3dCmdDestroyGBScreenTarget(PVGASTATE pThis, PVGASTATECC pThisCC, SVGA3dCmdDestroyGBScreenTarget const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->stid < RT_ELEMENTS(pSvgaR3State->aScreens));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Update the entry in the pSvgaR3State->pGboOTableScreenTarget. */
+ SVGAOTableScreenTargetEntry entry;
+ RT_ZERO(entry);
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SCREENTARGET],
+ pCmd->stid, SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Screen objects and screen targets are similar, therefore we will use the same for both. */
+ /** @todo Generic screen object/target interface. */
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[pCmd->stid];
+ pScreen->fModified = true;
+ pScreen->fDefined = false;
+ pScreen->idScreen = pCmd->stid;
+
+ if (RT_LIKELY(pThis->svga.f3DEnabled))
+ vmsvga3dDestroyScreen(pThisCC, pScreen);
+
+ vmsvgaR3ChangeMode(pThis, pThisCC);
+
+ RTMemFree(pScreen->pvScreenBitmap);
+ pScreen->pvScreenBitmap = NULL;
+ }
+}
+
+
+/* SVGA_3D_CMD_BIND_GB_SCREENTARGET 1126 */
+static void vmsvga3dCmdBindGBScreenTarget(PVGASTATECC pThisCC, SVGA3dCmdBindGBScreenTarget const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* "Binding a surface to a Screen Target the same as flipping" */
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->stid < RT_ELEMENTS(pSvgaR3State->aScreens));
+ ASSERT_GUEST_RETURN_VOID(pCmd->image.face == 0 && pCmd->image.mipmap == 0);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Assign the surface to the screen target. */
+ int rc = VINF_SUCCESS;
+ if (pCmd->image.sid != SVGA_ID_INVALID)
+ rc = vmsvgaR3OTableVerifyIndex(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->image.sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE);
+ if (RT_SUCCESS(rc))
+ {
+ SVGAOTableScreenTargetEntry entry;
+ rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SCREENTARGET],
+ pCmd->stid, SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ entry.image = pCmd->image;
+ rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SCREENTARGET],
+ pCmd->stid, SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[pCmd->stid];
+ rc = pSvgaR3State->pFuncsGBO->pfnScreenTargetBind(pThisCC, pScreen, pCmd->image.sid);
+ AssertRC(rc);
+ }
+ }
+ }
+}
+
+
+/* SVGA_3D_CMD_UPDATE_GB_SCREENTARGET 1127 */
+static void vmsvga3dCmdUpdateGBScreenTarget(PVGASTATECC pThisCC, SVGA3dCmdUpdateGBScreenTarget const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the screen target from its backing surface. */
+ ASSERT_GUEST_RETURN_VOID(pCmd->stid < RT_ELEMENTS(pSvgaR3State->aScreens));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Get the screen target info. */
+ SVGAOTableScreenTargetEntry entryScreenTarget;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SCREENTARGET],
+ pCmd->stid, SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE, &entryScreenTarget, sizeof(entryScreenTarget));
+ if (RT_SUCCESS(rc))
+ {
+ ASSERT_GUEST_RETURN_VOID(entryScreenTarget.image.face == 0 && entryScreenTarget.image.mipmap == 0);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ if (entryScreenTarget.image.sid != SVGA_ID_INVALID)
+ {
+ SVGAOTableSurfaceEntry entrySurface;
+ rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ entryScreenTarget.image.sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ /* Copy entrySurface.mobid content to the screen target. */
+ if (entrySurface.mobid != SVGA_ID_INVALID)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ SVGA3dRect targetRect = pCmd->rect;
+
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[pCmd->stid];
+ if (pScreen->pHwScreen)
+ {
+ /* Copy the screen target surface to the backend's screen. */
+ pSvgaR3State->pFuncsGBO->pfnScreenTargetUpdate(pThisCC, pScreen, &targetRect);
+ }
+ else
+ {
+ SVGASignedRect r;
+ r.left = pCmd->rect.x;
+ r.top = pCmd->rect.y;
+ r.right = pCmd->rect.x + pCmd->rect.w;
+ r.bottom = pCmd->rect.y + pCmd->rect.h;
+ vmsvga3dScreenUpdate(pThisCC, pCmd->stid, r, entryScreenTarget.image, r, 0, NULL);
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 1134 */
+static void vmsvga3dCmdDefineGBSurface_v2(PVGASTATECC pThisCC, SVGA3dCmdDefineGBSurface_v2 const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
+ SVGAOTableSurfaceEntry entry;
+ RT_ZERO(entry);
+ entry.format = pCmd->format;
+ entry.surface1Flags = pCmd->surfaceFlags;
+ entry.numMipLevels = pCmd->numMipLevels;
+ entry.multisampleCount = pCmd->multisampleCount;
+ entry.autogenFilter = pCmd->autogenFilter;
+ entry.size = pCmd->size;
+ entry.mobid = SVGA_ID_INVALID;
+ entry.arraySize = pCmd->arraySize;
+ // entry.mobPitch = 0;
+ // entry.mobPitch = 0;
+ // entry.surface2Flags = 0;
+ // entry.multisamplePattern = 0;
+ // entry.qualityLevel = 0;
+ // entry.bufferByteStride = 0;
+ // entry.minLOD = 0;
+
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the host surface. */
+ /** @todo SVGAOTableSurfaceEntry as input parameter? */
+ vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
+ pCmd->multisampleCount, pCmd->autogenFilter,
+ pCmd->numMipLevels, &pCmd->size, pCmd->arraySize, /* fAllocMipLevels = */ false);
+ }
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_MOB64 1135 */
+static void vmsvga3dCmdDefineGBMob64(PVGASTATECC pThisCC, SVGA3dCmdDefineGBMob64 const *pCmd)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->mobid != SVGA_ID_INVALID); /* The guest should not use this id. */
+
+ /* Maybe just update the OTable and create Gbo when the MOB is actually accessed? */
+ /* Allocate a structure for the MOB. */
+ PVMSVGAMOB pMob = (PVMSVGAMOB)RTMemAllocZ(sizeof(*pMob));
+ AssertPtrReturnVoid(pMob);
+
+ int rc = vmsvgaR3MobCreate(pSvgaR3State, pCmd->ptDepth, pCmd->base, pCmd->sizeInBytes, pCmd->mobid, pMob);
+ if (RT_SUCCESS(rc))
+ {
+ return;
+ }
+
+ RTMemFree(pMob);
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_CONTEXT 1143 */
+static int vmsvga3dCmdDXDefineContext(PVGASTATECC pThisCC, SVGA3dCmdDXDefineContext const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTable[SVGA_OTABLE_DXCONTEXT]. */
+ SVGAOTableDXContextEntry entry;
+ RT_ZERO(entry);
+ entry.cid = pCmd->cid;
+ entry.mobid = SVGA_ID_INVALID;
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_DXCONTEXT],
+ pCmd->cid, sizeof(SVGAOTableDXContextEntry), &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the host context. */
+ rc = vmsvga3dDXDefineContext(pThisCC, pCmd->cid);
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_CONTEXT 1144 */
+static int vmsvga3dCmdDXDestroyContext(PVGASTATECC pThisCC, SVGA3dCmdDXDestroyContext const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTable[SVGA_OTABLE_DXCONTEXT]. */
+ SVGAOTableDXContextEntry entry;
+ RT_ZERO(entry);
+ vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_DXCONTEXT],
+ pCmd->cid, sizeof(SVGAOTableDXContextEntry), &entry, sizeof(entry));
+
+ return vmsvga3dDXDestroyContext(pThisCC, pCmd->cid);
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_CONTEXT 1145 */
+static int vmsvga3dCmdDXBindContext(PVGASTATECC pThisCC, SVGA3dCmdDXBindContext const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Assign a mobid to a cid. */
+ int rc = VINF_SUCCESS;
+ if (pCmd->mobid != SVGA_ID_INVALID)
+ rc = vmsvgaR3OTableVerifyIndex(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_MOB],
+ pCmd->mobid, SVGA3D_OTABLE_MOB_ENTRY_SIZE);
+ if (RT_SUCCESS(rc))
+ {
+ SVGAOTableDXContextEntry entry;
+ rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_DXCONTEXT],
+ pCmd->cid, sizeof(SVGAOTableDXContextEntry), &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ SVGADXContextMobFormat *pSvgaDXContext = NULL;
+ if (pCmd->mobid != entry.mobid && entry.mobid != SVGA_ID_INVALID)
+ {
+ /* Unbind notification to the DX backend. Copy the context data to the guest backing memory. */
+ pSvgaDXContext = (SVGADXContextMobFormat *)RTMemAlloc(sizeof(SVGADXContextMobFormat));
+ if (pSvgaDXContext)
+ {
+ rc = vmsvga3dDXUnbindContext(pThisCC, pCmd->cid, pSvgaDXContext);
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entry.mobid);
+ if (pMob)
+ {
+ rc = vmsvgaR3GboWrite(pSvgaR3State, &pMob->Gbo, 0, pSvgaDXContext, sizeof(SVGADXContextMobFormat));
+ }
+ }
+
+ RTMemFree(pSvgaDXContext);
+ pSvgaDXContext = NULL;
+ }
+ }
+
+ if (pCmd->mobid != SVGA_ID_INVALID)
+ {
+ /* Bind a new context. Copy existing data from the guest backing memory. */
+ if (pCmd->validContents)
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobid);
+ if (pMob)
+ {
+ pSvgaDXContext = (SVGADXContextMobFormat *)RTMemAlloc(sizeof(SVGADXContextMobFormat));
+ if (pSvgaDXContext)
+ {
+ rc = vmsvgaR3GboRead(pSvgaR3State, &pMob->Gbo, 0, pSvgaDXContext, sizeof(SVGADXContextMobFormat));
+ if (RT_FAILURE(rc))
+ {
+ RTMemFree(pSvgaDXContext);
+ pSvgaDXContext = NULL;
+ }
+ }
+ }
+ }
+
+ rc = vmsvga3dDXBindContext(pThisCC, pCmd->cid, pSvgaDXContext);
+
+ RTMemFree(pSvgaDXContext);
+ }
+
+ /* Update the object table. */
+ entry.mobid = pCmd->mobid;
+ rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_DXCONTEXT],
+ pCmd->cid, sizeof(SVGAOTableDXContextEntry), &entry, sizeof(entry));
+ }
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_READBACK_CONTEXT 1146 */
+static int vmsvga3dCmdDXReadbackContext(PVGASTATECC pThisCC, SVGA3dCmdDXReadbackContext const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* "Request that the device flush the contents back into guest memory." */
+ SVGAOTableDXContextEntry entry;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_DXCONTEXT],
+ pCmd->cid, sizeof(SVGAOTableDXContextEntry), &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ if (entry.mobid != SVGA_ID_INVALID)
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entry.mobid);
+ if (pMob)
+ {
+ /* Get the content. */
+ SVGADXContextMobFormat *pSvgaDXContext = (SVGADXContextMobFormat *)RTMemAlloc(sizeof(SVGADXContextMobFormat));
+ if (pSvgaDXContext)
+ {
+ rc = vmsvga3dDXReadbackContext(pThisCC, pCmd->cid, pSvgaDXContext);
+ if (RT_SUCCESS(rc))
+ rc = vmsvgaR3GboWrite(pSvgaR3State, &pMob->Gbo, 0, pSvgaDXContext, sizeof(SVGADXContextMobFormat));
+
+ RTMemFree(pSvgaDXContext);
+ }
+ else
+ rc = VERR_NO_MEMORY;
+ }
+ }
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_INVALIDATE_CONTEXT 1147 */
+static int vmsvga3dCmdDXInvalidateContext(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXInvalidateContext const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXInvalidateContext(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER 1148 */
+static int vmsvga3dCmdDXSetSingleConstantBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSingleConstantBuffer const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetSingleConstantBuffer(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SHADER_RESOURCES 1149 */
+static int vmsvga3dCmdDXSetShaderResources(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShaderResources const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dShaderResourceViewId const *paShaderResourceViewId = (SVGA3dShaderResourceViewId *)&pCmd[1];
+ uint32_t const cShaderResourceViewId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dShaderResourceViewId);
+ return vmsvga3dDXSetShaderResources(pThisCC, idDXContext, pCmd, cShaderResourceViewId, paShaderResourceViewId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SHADER 1150 */
+static int vmsvga3dCmdDXSetShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShader const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetShader(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SAMPLERS 1151 */
+static int vmsvga3dCmdDXSetSamplers(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSamplers const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dSamplerId const *paSamplerId = (SVGA3dSamplerId *)&pCmd[1];
+ uint32_t const cSamplerId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dSamplerId);
+ return vmsvga3dDXSetSamplers(pThisCC, idDXContext, pCmd, cSamplerId, paSamplerId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW 1152 */
+static int vmsvga3dCmdDXDraw(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDraw const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDraw(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW_INDEXED 1153 */
+static int vmsvga3dCmdDXDrawIndexed(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexed const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDrawIndexed(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW_INSTANCED 1154 */
+static int vmsvga3dCmdDXDrawInstanced(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawInstanced const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDrawInstanced(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED 1155 */
+static int vmsvga3dCmdDXDrawIndexedInstanced(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexedInstanced const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDrawIndexedInstanced(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW_AUTO 1156 */
+static int vmsvga3dCmdDXDrawAuto(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawAuto const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(pCmd, cbCmd);
+ return vmsvga3dDXDrawAuto(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_INPUT_LAYOUT 1157 */
+static int vmsvga3dCmdDXSetInputLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetInputLayout const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetInputLayout(pThisCC, idDXContext, pCmd->elementLayoutId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS 1158 */
+static int vmsvga3dCmdDXSetVertexBuffers(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetVertexBuffers const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dVertexBuffer const *paVertexBuffer = (SVGA3dVertexBuffer *)&pCmd[1];
+ uint32_t const cVertexBuffer = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dVertexBuffer);
+ return vmsvga3dDXSetVertexBuffers(pThisCC, idDXContext, pCmd->startBuffer, cVertexBuffer, paVertexBuffer);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_INDEX_BUFFER 1159 */
+static int vmsvga3dCmdDXSetIndexBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetIndexBuffer const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetIndexBuffer(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_TOPOLOGY 1160 */
+static int vmsvga3dCmdDXSetTopology(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetTopology const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetTopology(pThisCC, idDXContext, pCmd->topology);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_RENDERTARGETS 1161 */
+static int vmsvga3dCmdDXSetRenderTargets(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetRenderTargets const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dRenderTargetViewId const *paRenderTargetViewId = (SVGA3dRenderTargetViewId *)&pCmd[1];
+ uint32_t const cRenderTargetViewId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dRenderTargetViewId);
+ return vmsvga3dDXSetRenderTargets(pThisCC, idDXContext, pCmd->depthStencilViewId, cRenderTargetViewId, paRenderTargetViewId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_BLEND_STATE 1162 */
+static int vmsvga3dCmdDXSetBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetBlendState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetBlendState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE 1163 */
+static int vmsvga3dCmdDXSetDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetDepthStencilState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetDepthStencilState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_RASTERIZER_STATE 1164 */
+static int vmsvga3dCmdDXSetRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetRasterizerState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetRasterizerState(pThisCC, idDXContext, pCmd->rasterizerId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_QUERY 1165 */
+static int vmsvga3dCmdDXDefineQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_QUERY 1166 */
+static int vmsvga3dCmdDXDestroyQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_QUERY 1167 */
+static int vmsvga3dCmdDXBindQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(cbCmd);
+ /* This returns NULL if mob does not exist. If the guest sends a wrong mob id, the current mob will be unbound. */
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobid);
+ return vmsvga3dDXBindQuery(pThisCC, idDXContext, pCmd, pMob);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_QUERY_OFFSET 1168 */
+static int vmsvga3dCmdDXSetQueryOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetQueryOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetQueryOffset(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BEGIN_QUERY 1169 */
+static int vmsvga3dCmdDXBeginQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBeginQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXBeginQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_END_QUERY 1170 */
+static int vmsvga3dCmdDXEndQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXEndQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXEndQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_READBACK_QUERY 1171 */
+static int vmsvga3dCmdDXReadbackQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXReadbackQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_PREDICATION 1172 */
+static int vmsvga3dCmdDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetPredication(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SOTARGETS 1173 */
+static int vmsvga3dCmdDXSetSOTargets(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSOTargets const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dSoTarget const *paSoTarget = (SVGA3dSoTarget *)&pCmd[1];
+ uint32_t const cSoTarget = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dSoTarget);
+ return vmsvga3dDXSetSOTargets(pThisCC, idDXContext, cSoTarget, paSoTarget);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_VIEWPORTS 1174 */
+static int vmsvga3dCmdDXSetViewports(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetViewports const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dViewport const *paViewport = (SVGA3dViewport *)&pCmd[1];
+ uint32_t const cViewport = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dViewport);
+ return vmsvga3dDXSetViewports(pThisCC, idDXContext, cViewport, paViewport);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SCISSORRECTS 1175 */
+static int vmsvga3dCmdDXSetScissorRects(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetScissorRects const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGASignedRect const *paRect = (SVGASignedRect *)&pCmd[1];
+ uint32_t const cRect = (cbCmd - sizeof(*pCmd)) / sizeof(SVGASignedRect);
+ return vmsvga3dDXSetScissorRects(pThisCC, idDXContext, cRect, paRect);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW 1176 */
+static int vmsvga3dCmdDXClearRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearRenderTargetView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXClearRenderTargetView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW 1177 */
+static int vmsvga3dCmdDXClearDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearDepthStencilView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXClearDepthStencilView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRED_COPY_REGION 1178 */
+static int vmsvga3dCmdDXPredCopyRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredCopyRegion const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXPredCopyRegion(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRED_COPY 1179 */
+static int vmsvga3dCmdDXPredCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXPredCopy(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRESENTBLT 1180 */
+static int vmsvga3dCmdDXPresentBlt(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPresentBlt const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXPresentBlt(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_GENMIPS 1181 */
+static int vmsvga3dCmdDXGenMips(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXGenMips const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXGenMips(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE 1182 */
+static int vmsvga3dCmdDXUpdateSubResource(PVGASTATECC pThisCC, SVGA3dCmdDXUpdateSubResource const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(cbCmd);
+
+ LogFlowFunc(("sid=%u, subResource=%u, box=%d,%d,%d %ux%ux%u\n",
+ pCmd->sid, pCmd->subResource, pCmd->box.x, pCmd->box.y, pCmd->box.z, pCmd->box.w, pCmd->box.h, pCmd->box.d));
+
+ /* "Inform the device that the guest-contents have been updated." */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entrySurface.mobid);
+ if (pMob)
+ {
+ uint32 const cSubresource = vmsvga3dGetSubresourceCount(pThisCC, pCmd->sid);
+ ASSERT_GUEST_RETURN(pCmd->subResource < cSubresource, VERR_INVALID_PARAMETER);
+ /* pCmd->box will be verified by the mapping function. */
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /** @todo Mapping functions should use subresource index rather than SVGA3dSurfaceImageId? */
+ SVGA3dSurfaceImageId image;
+ image.sid = pCmd->sid;
+ vmsvga3dCalcMipmapAndFace(entrySurface.numMipLevels, pCmd->subResource, &image.mipmap, &image.face);
+
+ rc = vmsvgaR3TransferSurfaceLevel(pThisCC, pMob, &image, &pCmd->box, SVGA3D_WRITE_HOST_VRAM);
+ AssertRC(rc);
+ }
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_READBACK_SUBRESOURCE 1183 */
+static int vmsvga3dCmdDXReadbackSubResource(PVGASTATECC pThisCC, SVGA3dCmdDXReadbackSubResource const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(cbCmd);
+
+ LogFlowFunc(("sid=%u, subResource=%u\n",
+ pCmd->sid, pCmd->subResource));
+
+ /* "Request the device to flush the dirty contents into the guest." */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, entrySurface.mobid);
+ if (pMob)
+ {
+ uint32 const cSubresource = vmsvga3dGetSubresourceCount(pThisCC, pCmd->sid);
+ ASSERT_GUEST_RETURN(pCmd->subResource < cSubresource, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /** @todo Mapping functions should use subresource index rather than SVGA3dSurfaceImageId? */
+ SVGA3dSurfaceImageId image;
+ image.sid = pCmd->sid;
+ vmsvga3dCalcMipmapAndFace(entrySurface.numMipLevels, pCmd->subResource, &image.mipmap, &image.face);
+
+ rc = vmsvgaR3TransferSurfaceLevel(pThisCC, pMob, &image, /* all pBox = */ NULL, SVGA3D_READ_HOST_VRAM);
+ AssertRC(rc);
+ }
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE 1184 */
+static int vmsvga3dCmdDXInvalidateSubResource(PVGASTATECC pThisCC, SVGA3dCmdDXInvalidateSubResource const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(cbCmd);
+
+ LogFlowFunc(("sid=%u, subResource=%u\n",
+ pCmd->sid, pCmd->subResource));
+
+ /* "Notify the device that the contents can be lost." */
+ SVGAOTableSurfaceEntry entrySurface;
+ int rc = vmsvgaR3OTableRead(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entrySurface, sizeof(entrySurface));
+ if (RT_SUCCESS(rc))
+ {
+ uint32_t iFace;
+ uint32_t iMipmap;
+ vmsvga3dCalcMipmapAndFace(entrySurface.numMipLevels, pCmd->subResource, &iMipmap, &iFace);
+ vmsvga3dSurfaceInvalidate(pThisCC, pCmd->sid, iFace, iMipmap);
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW 1185 */
+static int vmsvga3dCmdDXDefineShaderResourceView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineShaderResourceView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineShaderResourceView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW 1186 */
+static int vmsvga3dCmdDXDestroyShaderResourceView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyShaderResourceView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyShaderResourceView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW 1187 */
+static int vmsvga3dCmdDXDefineRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineRenderTargetView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineRenderTargetView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW 1188 */
+static int vmsvga3dCmdDXDestroyRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyRenderTargetView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyRenderTargetView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW 1189 */
+static int vmsvga3dCmdDXDefineDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ SVGA3dCmdDXDefineDepthStencilView_v2 cmd;
+ cmd.depthStencilViewId = pCmd->depthStencilViewId;
+ cmd.sid = pCmd->sid;
+ cmd.format = pCmd->format;
+ cmd.resourceDimension = pCmd->resourceDimension;
+ cmd.mipSlice = pCmd->mipSlice;
+ cmd.firstArraySlice = pCmd->firstArraySlice;
+ cmd.arraySize = pCmd->arraySize;
+ cmd.flags = 0;
+ return vmsvga3dDXDefineDepthStencilView(pThisCC, idDXContext, &cmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW 1190 */
+static int vmsvga3dCmdDXDestroyDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyDepthStencilView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyDepthStencilView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT 1191 */
+static int vmsvga3dCmdDXDefineElementLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineElementLayout const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dInputElementDesc const *paDesc = (SVGA3dInputElementDesc *)&pCmd[1];
+ uint32_t const cDesc = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dInputElementDesc);
+ return vmsvga3dDXDefineElementLayout(pThisCC, idDXContext, pCmd->elementLayoutId, cDesc, paDesc);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT 1192 */
+static int vmsvga3dCmdDXDestroyElementLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyElementLayout const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyElementLayout(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_BLEND_STATE 1193 */
+static int vmsvga3dCmdDXDefineBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineBlendState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineBlendState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_BLEND_STATE 1194 */
+static int vmsvga3dCmdDXDestroyBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyBlendState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyBlendState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE 1195 */
+static int vmsvga3dCmdDXDefineDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineDepthStencilState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE 1196 */
+static int vmsvga3dCmdDXDestroyDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyDepthStencilState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyDepthStencilState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE 1197 */
+static int vmsvga3dCmdDXDefineRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineRasterizerState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineRasterizerState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE 1198 */
+static int vmsvga3dCmdDXDestroyRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyRasterizerState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyRasterizerState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE 1199 */
+static int vmsvga3dCmdDXDefineSamplerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineSamplerState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineSamplerState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE 1200 */
+static int vmsvga3dCmdDXDestroySamplerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroySamplerState const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroySamplerState(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_SHADER 1201 */
+static int vmsvga3dCmdDXDefineShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineShader const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineShader(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_SHADER 1202 */
+static int vmsvga3dCmdDXDestroyShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyShader const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyShader(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_SHADER 1203 */
+static int vmsvga3dCmdDXBindShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindShader const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(idDXContext, cbCmd);
+ /* This returns NULL if mob does not exist. If the guest sends a wrong mob id, the current mob will be unbound. */
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobid);
+ return vmsvga3dDXBindShader(pThisCC, pCmd, pMob);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT 1204 */
+static int vmsvga3dCmdDXDefineStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutput const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineStreamOutput(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT 1205 */
+static int vmsvga3dCmdDXDestroyStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyStreamOutput const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyStreamOutput(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_STREAMOUTPUT 1206 */
+static int vmsvga3dCmdDXSetStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetStreamOutput const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetStreamOutput(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_COTABLE 1207 */
+static int vmsvga3dCmdDXSetCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXSetCOTable const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ /* This returns NULL if mob does not exist. If the guest sends a wrong mob id, the current mob will be unbound. */
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobid);
+ return vmsvga3dDXSetCOTable(pThisCC, pCmd, pMob);
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_READBACK_COTABLE 1208 */
+static int vmsvga3dCmdDXReadbackCOTable(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackCOTable const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(idDXContext, cbCmd);
+ return vmsvga3dDXReadbackCOTable(pThisCC, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BUFFER_COPY 1209 */
+static int vmsvga3dCmdDXBufferCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBufferCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(idDXContext, cbCmd);
+
+ int rc;
+
+ /** @todo Backend should o the copy is both buffers have a hardware resource. */
+ SVGA3dSurfaceImageId imageBufferSrc;
+ imageBufferSrc.sid = pCmd->src;
+ imageBufferSrc.face = 0;
+ imageBufferSrc.mipmap = 0;
+
+ SVGA3dSurfaceImageId imageBufferDest;
+ imageBufferDest.sid = pCmd->dest;
+ imageBufferDest.face = 0;
+ imageBufferDest.mipmap = 0;
+
+ /*
+ * Map the source buffer.
+ */
+ VMSVGA3D_MAPPED_SURFACE mapBufferSrc;
+ rc = vmsvga3dSurfaceMap(pThisCC, &imageBufferSrc, NULL, VMSVGA3D_SURFACE_MAP_READ, &mapBufferSrc);
+ if (RT_SUCCESS(rc))
+ {
+ /*
+ * Map the destination buffer.
+ */
+ VMSVGA3D_MAPPED_SURFACE mapBufferDest;
+ rc = vmsvga3dSurfaceMap(pThisCC, &imageBufferDest, NULL, VMSVGA3D_SURFACE_MAP_WRITE, &mapBufferDest);
+ if (RT_SUCCESS(rc))
+ {
+ /*
+ * Copy the source buffer to the destination.
+ */
+ uint8_t const *pu8BufferSrc = (uint8_t *)mapBufferSrc.pvData;
+ uint32_t const cbBufferSrc = mapBufferSrc.cbRow;
+
+ uint8_t *pu8BufferDest = (uint8_t *)mapBufferDest.pvData;
+ uint32_t const cbBufferDest = mapBufferDest.cbRow;
+
+ if ( pCmd->srcX < cbBufferSrc
+ && pCmd->width <= cbBufferSrc- pCmd->srcX
+ && pCmd->destX < cbBufferDest
+ && pCmd->width <= cbBufferDest - pCmd->destX)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ memcpy(&pu8BufferDest[pCmd->destX], &pu8BufferSrc[pCmd->srcX], pCmd->width);
+ }
+ else
+ ASSERT_GUEST_FAILED_STMT(rc = VERR_INVALID_PARAMETER);
+
+ vmsvga3dSurfaceUnmap(pThisCC, &imageBufferDest, &mapBufferDest, true);
+ }
+
+ vmsvga3dSurfaceUnmap(pThisCC, &imageBufferSrc, &mapBufferSrc, false);
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER 1210 */
+static int vmsvga3dCmdDXTransferFromBuffer(PVGASTATECC pThisCC, SVGA3dCmdDXTransferFromBuffer const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+
+ /* Plan:
+ * - map the buffer;
+ * - map the surface;
+ * - copy from buffer map to the surface map.
+ */
+
+ int rc;
+
+ SVGA3dSurfaceImageId imageBuffer;
+ imageBuffer.sid = pCmd->srcSid;
+ imageBuffer.face = 0;
+ imageBuffer.mipmap = 0;
+
+ SVGA3dSurfaceImageId imageSurface;
+ imageSurface.sid = pCmd->destSid;
+ rc = vmsvga3dCalcSurfaceMipmapAndFace(pThisCC, pCmd->destSid, pCmd->destSubResource, &imageSurface.mipmap, &imageSurface.face);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Map the buffer.
+ */
+ VMSVGA3D_MAPPED_SURFACE mapBuffer;
+ rc = vmsvga3dSurfaceMap(pThisCC, &imageBuffer, NULL, VMSVGA3D_SURFACE_MAP_READ, &mapBuffer);
+ if (RT_SUCCESS(rc))
+ {
+ /*
+ * Map the surface.
+ */
+ VMSVGA3D_MAPPED_SURFACE mapSurface;
+ rc = vmsvga3dSurfaceMap(pThisCC, &imageSurface, &pCmd->destBox, VMSVGA3D_SURFACE_MAP_WRITE, &mapSurface);
+ if (RT_SUCCESS(rc))
+ {
+ /*
+ * Copy the mapped buffer to the surface. "Raw byte wise transfer"
+ */
+ uint8_t const *pu8Buffer = (uint8_t *)mapBuffer.pvData;
+ uint32_t const cbBuffer = mapBuffer.cbRow;
+
+ if (pCmd->srcOffset <= cbBuffer)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ uint8_t const *pu8BufferBegin = pu8Buffer;
+ uint8_t const *pu8BufferEnd = pu8Buffer + cbBuffer;
+
+ pu8Buffer += pCmd->srcOffset;
+
+ uint8_t *pu8Surface = (uint8_t *)mapSurface.pvData;
+
+ uint32_t const cbRowCopy = RT_MIN(pCmd->srcPitch, mapSurface.cbRow);
+ for (uint32_t z = 0; z < mapSurface.box.d && RT_SUCCESS(rc); ++z)
+ {
+ uint8_t const *pu8BufferRow = pu8Buffer;
+ uint8_t *pu8SurfaceRow = pu8Surface;
+ for (uint32_t iRow = 0; iRow < mapSurface.cRows; ++iRow)
+ {
+ ASSERT_GUEST_STMT_BREAK( (uintptr_t)pu8BufferRow >= (uintptr_t)pu8BufferBegin
+ && (uintptr_t)pu8BufferRow < (uintptr_t)pu8BufferEnd
+ && (uintptr_t)pu8BufferRow < (uintptr_t)(pu8BufferRow + cbRowCopy)
+ && (uintptr_t)(pu8BufferRow + cbRowCopy) > (uintptr_t)pu8BufferBegin
+ && (uintptr_t)(pu8BufferRow + cbRowCopy) <= (uintptr_t)pu8BufferEnd,
+ rc = VERR_INVALID_PARAMETER);
+
+ memcpy(pu8SurfaceRow, pu8BufferRow, cbRowCopy);
+
+ pu8SurfaceRow += mapSurface.cbRowPitch;
+ pu8BufferRow += pCmd->srcPitch;
+ }
+
+ pu8Buffer += pCmd->srcSlicePitch;
+ pu8Surface += mapSurface.cbDepthPitch;
+ }
+ }
+ else
+ ASSERT_GUEST_FAILED_STMT(rc = VERR_INVALID_PARAMETER);
+
+ vmsvga3dSurfaceUnmap(pThisCC, &imageSurface, &mapSurface, true);
+ }
+
+ vmsvga3dSurfaceUnmap(pThisCC, &imageBuffer, &mapBuffer, false);
+ }
+
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK 1211 */
+static int vmsvga3dCmdDXSurfaceCopyAndReadback(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSurfaceCopyAndReadback const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSurfaceCopyAndReadback(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_MOVE_QUERY 1212 */
+static int vmsvga3dCmdDXMoveQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXMoveQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXMoveQuery(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_ALL_QUERY 1213 */
+static int vmsvga3dCmdDXBindAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindAllQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXBindAllQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_READBACK_ALL_QUERY 1214 */
+static int vmsvga3dCmdDXReadbackAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackAllQuery const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXReadbackAllQuery(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER 1215 */
+static int vmsvga3dCmdDXPredTransferFromBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredTransferFromBuffer const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(idDXContext, cbCmd);
+
+ /* This command is executed in a context: "The context is implied from the command buffer header."
+ * However the device design allows to do the transfer without a context, so re-use context-less command handler.
+ */
+ SVGA3dCmdDXTransferFromBuffer cmd;
+ cmd.srcSid = pCmd->srcSid;
+ cmd.srcOffset = pCmd->srcOffset;
+ cmd.srcPitch = pCmd->srcPitch;
+ cmd.srcSlicePitch = pCmd->srcSlicePitch;
+ cmd.destSid = pCmd->destSid;
+ cmd.destSubResource = pCmd->destSubResource;
+ cmd.destBox = pCmd->destBox;
+ return vmsvga3dCmdDXTransferFromBuffer(pThisCC, &cmd, sizeof(cmd));
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_MOB_FENCE_64 1216 */
+static int vmsvga3dCmdDXMobFence64(PVGASTATECC pThisCC, SVGA3dCmdDXMobFence64 const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(cbCmd);
+
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobId);
+ ASSERT_GUEST_RETURN(pMob, VERR_INVALID_PARAMETER);
+
+ int rc = vmsvgaR3MobWrite(pSvgaR3State, pMob, pCmd->mobOffset, &pCmd->value, sizeof(pCmd->value));
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ return VINF_SUCCESS;
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_ALL_SHADER 1217 */
+static int vmsvga3dCmdDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindAllShader const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXBindAllShader(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_HINT 1218 */
+static int vmsvga3dCmdDXHint(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXHint const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXHint(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BUFFER_UPDATE 1219 */
+static int vmsvga3dCmdDXBufferUpdate(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBufferUpdate const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXBufferUpdate(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET 1220 */
+static int vmsvga3dCmdDXSetVSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetVSConstantBufferOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetVSConstantBufferOffset(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET 1221 */
+static int vmsvga3dCmdDXSetPSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPSConstantBufferOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetPSConstantBufferOffset(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET 1222 */
+static int vmsvga3dCmdDXSetGSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetGSConstantBufferOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetGSConstantBufferOffset(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET 1223 */
+static int vmsvga3dCmdDXSetHSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetHSConstantBufferOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetHSConstantBufferOffset(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET 1224 */
+static int vmsvga3dCmdDXSetDSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetDSConstantBufferOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetDSConstantBufferOffset(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET 1225 */
+static int vmsvga3dCmdDXSetCSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSConstantBufferOffset const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetCSConstantBufferOffset(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER 1226 */
+static int vmsvga3dCmdDXCondBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXCondBindAllShader const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXCondBindAllShader(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_SCREEN_COPY 1227 */
+static int vmsvga3dCmdScreenCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdScreenCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dScreenCopy(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_GROW_OTABLE 1236 */
+static int vmsvga3dCmdGrowOTable(PVGASTATECC pThisCC, SVGA3dCmdGrowOTable const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(cbCmd);
+ return vmsvgaR3OTableSetOrGrow(pSvgaR3State, pCmd->type, pCmd->baseAddress,
+ pCmd->sizeInBytes, pCmd->validSizeInBytes, pCmd->ptDepth, /*fGrow*/ true);
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_GROW_COTABLE 1237 */
+static int vmsvga3dCmdDXGrowCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXGrowCOTable const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXGrowCOTable(pThisCC, pCmd);
+#else
+ RT_NOREF(pThisCC, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_INTRA_SURFACE_COPY 1238 */
+static int vmsvga3dCmdIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdIntraSurfaceCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dIntraSurfaceCopy(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 1239 */
+static int vmsvga3dCmdDefineGBSurface_v3(PVGASTATECC pThisCC, SVGA3dCmdDefineGBSurface_v3 const *pCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
+ SVGAOTableSurfaceEntry entry;
+ RT_ZERO(entry);
+ entry.format = pCmd->format;
+ entry.surface1Flags = (uint32_t)(pCmd->surfaceFlags);
+ entry.numMipLevels = pCmd->numMipLevels;
+ entry.multisampleCount = pCmd->multisampleCount;
+ entry.autogenFilter = pCmd->autogenFilter;
+ entry.size = pCmd->size;
+ entry.mobid = SVGA_ID_INVALID;
+ entry.arraySize = pCmd->arraySize;
+ // entry.mobPitch = 0;
+ // entry.mobPitch = 0;
+ entry.surface2Flags = (uint32_t)(pCmd->surfaceFlags >> UINT64_C(32));
+ // entry.multisamplePattern = 0;
+ // entry.qualityLevel = 0;
+ // entry.bufferByteStride = 0;
+ // entry.minLOD = 0;
+
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the host surface. */
+ /** @todo SVGAOTableSurfaceEntry as input parameter? */
+ vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
+ pCmd->multisampleCount, pCmd->autogenFilter,
+ pCmd->numMipLevels, &pCmd->size, pCmd->arraySize, /* fAllocMipLevels = */ false);
+ }
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_RESOLVE_COPY 1240 */
+static int vmsvga3dCmdDXResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXResolveCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXResolveCopy(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRED_RESOLVE_COPY 1241 */
+static int vmsvga3dCmdDXPredResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredResolveCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXPredResolveCopy(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRED_CONVERT_REGION 1242 */
+static int vmsvga3dCmdDXPredConvertRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredConvertRegion const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXPredConvertRegion(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_PRED_CONVERT 1243 */
+static int vmsvga3dCmdDXPredConvert(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredConvert const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXPredConvert(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_WHOLE_SURFACE_COPY 1244 */
+static int vmsvga3dCmdWholeSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdWholeSurfaceCopy const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dWholeSurfaceCopy(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_UA_VIEW 1245 */
+static int vmsvga3dCmdDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineUAView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineUAView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DESTROY_UA_VIEW 1246 */
+static int vmsvga3dCmdDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyUAView const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDestroyUAView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT 1247 */
+static int vmsvga3dCmdDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewUint const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXClearUAViewUint(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT 1248 */
+static int vmsvga3dCmdDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewFloat const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXClearUAViewFloat(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT 1249 */
+static int vmsvga3dCmdDXCopyStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXCopyStructureCount const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXCopyStructureCount(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_UA_VIEWS 1250 */
+static int vmsvga3dCmdDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetUAViews const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dUAViewId const *paUAViewId = (SVGA3dUAViewId *)&pCmd[1];
+ uint32_t const cUAViewId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dUAViewId);
+ return vmsvga3dDXSetUAViews(pThisCC, idDXContext, pCmd, cUAViewId, paUAViewId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT 1251 */
+static int vmsvga3dCmdDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexedInstancedIndirect const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDrawIndexedInstancedIndirect(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT 1252 */
+static int vmsvga3dCmdDXDrawInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawInstancedIndirect const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDrawInstancedIndirect(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DISPATCH 1253 */
+static int vmsvga3dCmdDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDispatch const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDispatch(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DISPATCH_INDIRECT 1254 */
+static int vmsvga3dCmdDXDispatchIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDispatchIndirect const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXDispatchIndirect(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_WRITE_ZERO_SURFACE 1255 */
+static int vmsvga3dCmdWriteZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdWriteZeroSurface const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dWriteZeroSurface(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_HINT_ZERO_SURFACE 1256 */
+static int vmsvga3dCmdHintZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdHintZeroSurface const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dHintZeroSurface(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER 1257 */
+static int vmsvga3dCmdDXTransferToBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXTransferToBuffer const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXTransferToBuffer(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT 1258 */
+static int vmsvga3dCmdDXSetStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetStructureCount const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXSetStructureCount(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_LOGICOPS_BITBLT 1259 */
+static int vmsvga3dCmdLogicOpsBitBlt(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdLogicOpsBitBlt const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dLogicOpsBitBlt(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_LOGICOPS_TRANSBLT 1260 */
+static int vmsvga3dCmdLogicOpsTransBlt(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdLogicOpsTransBlt const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dLogicOpsTransBlt(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_LOGICOPS_STRETCHBLT 1261 */
+static int vmsvga3dCmdLogicOpsStretchBlt(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdLogicOpsStretchBlt const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dLogicOpsStretchBlt(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_LOGICOPS_COLORFILL 1262 */
+static int vmsvga3dCmdLogicOpsColorFill(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdLogicOpsColorFill const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dLogicOpsColorFill(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_LOGICOPS_ALPHABLEND 1263 */
+static int vmsvga3dCmdLogicOpsAlphaBlend(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdLogicOpsAlphaBlend const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dLogicOpsAlphaBlend(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND 1264 */
+static int vmsvga3dCmdLogicOpsClearTypeBlend(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdLogicOpsClearTypeBlend const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dLogicOpsClearTypeBlend(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 1267 */
+static int vmsvga3dCmdDefineGBSurface_v4(PVGASTATECC pThisCC, SVGA3dCmdDefineGBSurface_v4 const *pCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
+ SVGAOTableSurfaceEntry entry;
+ RT_ZERO(entry);
+ entry.format = pCmd->format;
+ entry.surface1Flags = (uint32_t)(pCmd->surfaceFlags);
+ entry.numMipLevels = pCmd->numMipLevels;
+ entry.multisampleCount = pCmd->multisampleCount;
+ entry.autogenFilter = pCmd->autogenFilter;
+ entry.size = pCmd->size;
+ entry.mobid = SVGA_ID_INVALID;
+ entry.arraySize = pCmd->arraySize;
+ // entry.mobPitch = 0;
+ // entry.mobPitch = 0;
+ entry.surface2Flags = (uint32_t)(pCmd->surfaceFlags >> UINT64_C(32));
+ // entry.multisamplePattern = 0;
+ // entry.qualityLevel = 0;
+ entry.bufferByteStride = pCmd->bufferByteStride;
+ // entry.minLOD = 0;
+
+ int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
+ pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the host surface. */
+ /** @todo SVGAOTableSurfaceEntry as input parameter? */
+ vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
+ pCmd->multisampleCount, pCmd->autogenFilter,
+ pCmd->numMipLevels, &pCmd->size, pCmd->arraySize, /* fAllocMipLevels = */ false);
+ }
+ return rc;
+#else
+ RT_NOREF(pThisCC, pCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_CS_UA_VIEWS 1268 */
+static int vmsvga3dCmdDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGA3dUAViewId const *paUAViewId = (SVGA3dUAViewId *)&pCmd[1];
+ uint32_t const cUAViewId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dUAViewId);
+ return vmsvga3dDXSetCSUAViews(pThisCC, idDXContext, pCmd, cUAViewId, paUAViewId);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_MIN_LOD 1269 */
+static int vmsvga3dCmdDXSetMinLOD(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetMinLOD const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetMinLOD(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2 1272 */
+static int vmsvga3dCmdDXDefineDepthStencilView_v2(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilView_v2 const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineDepthStencilView(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB 1273 */
+static int vmsvga3dCmdDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXDefineStreamOutputWithMob(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_SET_SHADER_IFACE 1274 */
+static int vmsvga3dCmdDXSetShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShaderIface const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXSetShaderIface(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_STREAMOUTPUT 1275 */
+static int vmsvga3dCmdDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ RT_NOREF(cbCmd);
+ return vmsvga3dDXBindStreamOutput(pThisCC, idDXContext, pCmd);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_SURFACE_STRETCHBLT_NON_MS_TO_MS 1276 */
+static int vmsvga3dCmdSurfaceStretchBltNonMSToMS(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdSurfaceStretchBltNonMSToMS const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dSurfaceStretchBltNonMSToMS(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_DX_BIND_SHADER_IFACE 1277 */
+static int vmsvga3dCmdDXBindShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindShaderIface const *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ RT_NOREF(pSvgaR3State, pCmd, cbCmd);
+ return vmsvga3dDXBindShaderIface(pThisCC, idDXContext);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/* SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION 1083 */
+static int vmsvga3dCmdVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion *pCmd, uint32_t cbCmd)
+{
+#ifdef VMSVGA3D_DX
+ //DEBUG_BREAKPOINT_TEST();
+ SVGASignedRect const *paRect = (SVGASignedRect *)&pCmd[1];
+ uint32_t const cRect = (cbCmd - sizeof(*pCmd)) / sizeof(SVGASignedRect);
+ return vmsvga3dVBDXClearRenderTargetViewRegion(pThisCC, idDXContext, pCmd, cRect, paRect);
+#else
+ RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
+ return VERR_NOT_SUPPORTED;
+#endif
+}
+
+
+/** @def VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK
+ * Check that the 3D command has at least a_cbMin of payload bytes after the
+ * header. Will break out of the switch if it doesn't.
+ */
+# define VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(a_cbMin) \
+ if (1) { \
+ AssertMsgBreak(cbCmd >= (a_cbMin), ("size=%#x a_cbMin=%#zx\n", cbCmd, (size_t)(a_cbMin))); \
+ RT_UNTRUSTED_VALIDATED_FENCE(); \
+ } else do {} while (0)
+
+# define VMSVGA_3D_CMD_NOTIMPL() \
+ if (1) { \
+ AssertMsgFailed(("Not implemented %d %s\n", enmCmdId, vmsvgaR3FifoCmdToString(enmCmdId))); \
+ } else do {} while (0)
+
+/** SVGA_3D_CMD_* handler.
+ * This function parses the command and calls the corresponding command handler.
+ *
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param idDXContext VGPU10 DX context of the commands or SVGA3D_INVALID_ID if they are not for a specific context.
+ * @param enmCmdId SVGA_3D_CMD_* command identifier.
+ * @param cbCmd Size of the command in bytes.
+ * @param pvCmd Pointer to the command.
+ * @returns VBox status code if an error was detected parsing a command.
+ */
+int vmsvgaR3Process3dCmd(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t idDXContext, SVGAFifo3dCmdId enmCmdId, uint32_t cbCmd, void const *pvCmd)
+{
+ if (enmCmdId > SVGA_3D_CMD_MAX)
+ {
+ LogRelMax(16, ("VMSVGA: unsupported 3D command %d\n", enmCmdId));
+ ASSERT_GUEST_FAILED_RETURN(VERR_NOT_IMPLEMENTED);
+ }
+
+ int rcParse = VINF_SUCCESS;
+ PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ switch (enmCmdId)
+ {
+ case SVGA_3D_CMD_SURFACE_DEFINE:
+ {
+ SVGA3dCmdDefineSurface *pCmd = (SVGA3dCmdDefineSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceDefine);
+
+ SVGA3dCmdDefineSurface_v2 cmd;
+ cmd.sid = pCmd->sid;
+ cmd.surfaceFlags = pCmd->surfaceFlags;
+ cmd.format = pCmd->format;
+ memcpy(cmd.face, pCmd->face, sizeof(cmd.face));
+ cmd.multisampleCount = 0;
+ cmd.autogenFilter = SVGA3D_TEX_FILTER_NONE;
+
+ uint32_t const cMipLevelSizes = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dSize);
+ vmsvga3dCmdDefineSurface(pThisCC, &cmd, cMipLevelSizes, (SVGA3dSize *)(pCmd + 1));
+# ifdef DEBUG_GMR_ACCESS
+ VMR3ReqCallWaitU(PDMDevHlpGetUVM(pDevIns), VMCPUID_ANY, (PFNRT)vmsvgaR3ResetGmrHandlers, 1, pThis);
+# endif
+ break;
+ }
+
+ case SVGA_3D_CMD_SURFACE_DEFINE_V2:
+ {
+ SVGA3dCmdDefineSurface_v2 *pCmd = (SVGA3dCmdDefineSurface_v2 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceDefineV2);
+
+ uint32_t const cMipLevelSizes = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dSize);
+ vmsvga3dCmdDefineSurface(pThisCC, pCmd, cMipLevelSizes, (SVGA3dSize *)(pCmd + 1));
+# ifdef DEBUG_GMR_ACCESS
+ VMR3ReqCallWaitU(PDMDevHlpGetUVM(pDevIns), VMCPUID_ANY, (PFNRT)vmsvgaR3ResetGmrHandlers, 1, pThis);
+# endif
+ break;
+ }
+
+ case SVGA_3D_CMD_SURFACE_DESTROY:
+ {
+ SVGA3dCmdDestroySurface *pCmd = (SVGA3dCmdDestroySurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceDestroy);
+
+ vmsvga3dSurfaceDestroy(pThisCC, pCmd->sid);
+ break;
+ }
+
+ case SVGA_3D_CMD_SURFACE_COPY:
+ {
+ SVGA3dCmdSurfaceCopy *pCmd = (SVGA3dCmdSurfaceCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceCopy);
+
+ uint32_t const cCopyBoxes = (cbCmd - sizeof(pCmd)) / sizeof(SVGA3dCopyBox);
+ vmsvga3dSurfaceCopy(pThisCC, pCmd->dest, pCmd->src, cCopyBoxes, (SVGA3dCopyBox *)(pCmd + 1));
+ break;
+ }
+
+ case SVGA_3D_CMD_SURFACE_STRETCHBLT:
+ {
+ SVGA3dCmdSurfaceStretchBlt *pCmd = (SVGA3dCmdSurfaceStretchBlt *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceStretchBlt);
+
+ vmsvga3dSurfaceStretchBlt(pThis, pThisCC, &pCmd->dest, &pCmd->boxDest,
+ &pCmd->src, &pCmd->boxSrc, pCmd->mode);
+ break;
+ }
+
+ case SVGA_3D_CMD_SURFACE_DMA:
+ {
+ SVGA3dCmdSurfaceDMA *pCmd = (SVGA3dCmdSurfaceDMA *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceDma);
+
+ uint64_t u64NanoTS = 0;
+ if (LogRelIs3Enabled())
+ u64NanoTS = RTTimeNanoTS();
+ uint32_t const cCopyBoxes = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dCopyBox);
+ STAM_PROFILE_START(&pSvgaR3State->StatR3Cmd3dSurfaceDmaProf, a);
+ vmsvga3dSurfaceDMA(pThis, pThisCC, pCmd->guest, pCmd->host, pCmd->transfer,
+ cCopyBoxes, (SVGA3dCopyBox *)(pCmd + 1));
+ STAM_PROFILE_STOP(&pSvgaR3State->StatR3Cmd3dSurfaceDmaProf, a);
+ if (LogRelIs3Enabled())
+ {
+ if (cCopyBoxes)
+ {
+ SVGA3dCopyBox *pFirstBox = (SVGA3dCopyBox *)(pCmd + 1);
+ LogRel3(("VMSVGA: SURFACE_DMA: %d us %d boxes %d,%d %dx%d%s\n",
+ (RTTimeNanoTS() - u64NanoTS) / 1000ULL, cCopyBoxes,
+ pFirstBox->x, pFirstBox->y, pFirstBox->w, pFirstBox->h,
+ pCmd->transfer == SVGA3D_READ_HOST_VRAM ? " readback!!!" : ""));
+ }
+ }
+ break;
+ }
+
+ case SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN:
+ {
+ SVGA3dCmdBlitSurfaceToScreen *pCmd = (SVGA3dCmdBlitSurfaceToScreen *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSurfaceScreen);
+
+ static uint64_t u64FrameStartNanoTS = 0;
+ static uint64_t u64ElapsedPerSecNano = 0;
+ static int cFrames = 0;
+ uint64_t u64NanoTS = 0;
+ if (LogRelIs3Enabled())
+ u64NanoTS = RTTimeNanoTS();
+ uint32_t const cRects = (cbCmd - sizeof(*pCmd)) / sizeof(SVGASignedRect);
+ STAM_REL_PROFILE_START(&pSvgaR3State->StatR3Cmd3dBlitSurfaceToScreenProf, a);
+ vmsvga3dSurfaceBlitToScreen(pThis, pThisCC, pCmd->destScreenId, pCmd->destRect, pCmd->srcImage,
+ pCmd->srcRect, cRects, (SVGASignedRect *)(pCmd + 1));
+ STAM_REL_PROFILE_STOP(&pSvgaR3State->StatR3Cmd3dBlitSurfaceToScreenProf, a);
+ if (LogRelIs3Enabled())
+ {
+ uint64_t u64ElapsedNano = RTTimeNanoTS() - u64NanoTS;
+ u64ElapsedPerSecNano += u64ElapsedNano;
+
+ SVGASignedRect *pFirstRect = cRects ? (SVGASignedRect *)(pCmd + 1) : &pCmd->destRect;
+ LogRel3(("VMSVGA: SURFACE_TO_SCREEN: %d us %d rects %d,%d %dx%d\n",
+ (u64ElapsedNano) / 1000ULL, cRects,
+ pFirstRect->left, pFirstRect->top,
+ pFirstRect->right - pFirstRect->left, pFirstRect->bottom - pFirstRect->top));
+
+ ++cFrames;
+ if (u64NanoTS - u64FrameStartNanoTS >= UINT64_C(1000000000))
+ {
+ LogRel3(("VMSVGA: SURFACE_TO_SCREEN: FPS %d, elapsed %llu us\n",
+ cFrames, u64ElapsedPerSecNano / 1000ULL));
+ u64FrameStartNanoTS = u64NanoTS;
+ cFrames = 0;
+ u64ElapsedPerSecNano = 0;
+ }
+ }
+ break;
+ }
+
+ case SVGA_3D_CMD_CONTEXT_DEFINE:
+ {
+ SVGA3dCmdDefineContext *pCmd = (SVGA3dCmdDefineContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dContextDefine);
+
+ vmsvga3dContextDefine(pThisCC, pCmd->cid);
+ break;
+ }
+
+ case SVGA_3D_CMD_CONTEXT_DESTROY:
+ {
+ SVGA3dCmdDestroyContext *pCmd = (SVGA3dCmdDestroyContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dContextDestroy);
+
+ vmsvga3dContextDestroy(pThisCC, pCmd->cid);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETTRANSFORM:
+ {
+ SVGA3dCmdSetTransform *pCmd = (SVGA3dCmdSetTransform *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetTransform);
+
+ vmsvga3dSetTransform(pThisCC, pCmd->cid, pCmd->type, pCmd->matrix);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETZRANGE:
+ {
+ SVGA3dCmdSetZRange *pCmd = (SVGA3dCmdSetZRange *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetZRange);
+
+ vmsvga3dSetZRange(pThisCC, pCmd->cid, pCmd->zRange);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETRENDERSTATE:
+ {
+ SVGA3dCmdSetRenderState *pCmd = (SVGA3dCmdSetRenderState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetRenderState);
+
+ uint32_t const cRenderStates = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dRenderState);
+ vmsvga3dSetRenderState(pThisCC, pCmd->cid, cRenderStates, (SVGA3dRenderState *)(pCmd + 1));
+ break;
+ }
+
+ case SVGA_3D_CMD_SETRENDERTARGET:
+ {
+ SVGA3dCmdSetRenderTarget *pCmd = (SVGA3dCmdSetRenderTarget *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetRenderTarget);
+
+ vmsvga3dSetRenderTarget(pThisCC, pCmd->cid, pCmd->type, pCmd->target);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETTEXTURESTATE:
+ {
+ SVGA3dCmdSetTextureState *pCmd = (SVGA3dCmdSetTextureState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetTextureState);
+
+ uint32_t const cTextureStates = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dTextureState);
+ vmsvga3dSetTextureState(pThisCC, pCmd->cid, cTextureStates, (SVGA3dTextureState *)(pCmd + 1));
+ break;
+ }
+
+ case SVGA_3D_CMD_SETMATERIAL:
+ {
+ SVGA3dCmdSetMaterial *pCmd = (SVGA3dCmdSetMaterial *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetMaterial);
+
+ vmsvga3dSetMaterial(pThisCC, pCmd->cid, pCmd->face, &pCmd->material);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETLIGHTDATA:
+ {
+ SVGA3dCmdSetLightData *pCmd = (SVGA3dCmdSetLightData *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetLightData);
+
+ vmsvga3dSetLightData(pThisCC, pCmd->cid, pCmd->index, &pCmd->data);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETLIGHTENABLED:
+ {
+ SVGA3dCmdSetLightEnabled *pCmd = (SVGA3dCmdSetLightEnabled *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetLightEnable);
+
+ vmsvga3dSetLightEnabled(pThisCC, pCmd->cid, pCmd->index, pCmd->enabled);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETVIEWPORT:
+ {
+ SVGA3dCmdSetViewport *pCmd = (SVGA3dCmdSetViewport *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetViewPort);
+
+ vmsvga3dSetViewPort(pThisCC, pCmd->cid, &pCmd->rect);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETCLIPPLANE:
+ {
+ SVGA3dCmdSetClipPlane *pCmd = (SVGA3dCmdSetClipPlane *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetClipPlane);
+
+ vmsvga3dSetClipPlane(pThisCC, pCmd->cid, pCmd->index, pCmd->plane);
+ break;
+ }
+
+ case SVGA_3D_CMD_CLEAR:
+ {
+ SVGA3dCmdClear *pCmd = (SVGA3dCmdClear *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dClear);
+
+ uint32_t const cRects = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dRect);
+ vmsvga3dCommandClear(pThisCC, pCmd->cid, pCmd->clearFlag, pCmd->color, pCmd->depth, pCmd->stencil, cRects, (SVGA3dRect *)(pCmd + 1));
+ break;
+ }
+
+ case SVGA_3D_CMD_PRESENT:
+ case SVGA_3D_CMD_PRESENT_READBACK: /** @todo SVGA_3D_CMD_PRESENT_READBACK isn't quite the same as present... */
+ {
+ SVGA3dCmdPresent *pCmd = (SVGA3dCmdPresent *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ if (enmCmdId == SVGA_3D_CMD_PRESENT)
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dPresent);
+ else
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dPresentReadBack);
+
+ uint32_t const cRects = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dCopyRect);
+ STAM_PROFILE_START(&pSvgaR3State->StatR3Cmd3dPresentProf, a);
+ vmsvga3dCommandPresent(pThis, pThisCC, pCmd->sid, cRects, (SVGA3dCopyRect *)(pCmd + 1));
+ STAM_PROFILE_STOP(&pSvgaR3State->StatR3Cmd3dPresentProf, a);
+ break;
+ }
+
+ case SVGA_3D_CMD_SHADER_DEFINE:
+ {
+ SVGA3dCmdDefineShader *pCmd = (SVGA3dCmdDefineShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dShaderDefine);
+
+ uint32_t const cbData = (cbCmd - sizeof(*pCmd));
+ vmsvga3dShaderDefine(pThisCC, pCmd->cid, pCmd->shid, pCmd->type, cbData, (uint32_t *)(pCmd + 1));
+ break;
+ }
+
+ case SVGA_3D_CMD_SHADER_DESTROY:
+ {
+ SVGA3dCmdDestroyShader *pCmd = (SVGA3dCmdDestroyShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dShaderDestroy);
+
+ vmsvga3dShaderDestroy(pThisCC, pCmd->cid, pCmd->shid, pCmd->type);
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_SHADER:
+ {
+ SVGA3dCmdSetShader *pCmd = (SVGA3dCmdSetShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetShader);
+
+ vmsvga3dShaderSet(pThisCC, NULL, pCmd->cid, pCmd->type, pCmd->shid);
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_SHADER_CONST:
+ {
+ SVGA3dCmdSetShaderConst *pCmd = (SVGA3dCmdSetShaderConst *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetShaderConst);
+
+ uint32_t const cRegisters = (cbCmd - sizeof(*pCmd)) / sizeof(pCmd->values) + 1;
+ vmsvga3dShaderSetConst(pThisCC, pCmd->cid, pCmd->reg, pCmd->type, pCmd->ctype, cRegisters, pCmd->values);
+ break;
+ }
+
+ case SVGA_3D_CMD_DRAW_PRIMITIVES:
+ {
+ SVGA3dCmdDrawPrimitives *pCmd = (SVGA3dCmdDrawPrimitives *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dDrawPrimitives);
+
+ ASSERT_GUEST_STMT_BREAK(pCmd->numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, rcParse = VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_STMT_BREAK(pCmd->numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, rcParse = VERR_INVALID_PARAMETER);
+ uint32_t const cbRangesAndVertexDecls = pCmd->numVertexDecls * sizeof(SVGA3dVertexDecl)
+ + pCmd->numRanges * sizeof(SVGA3dPrimitiveRange);
+ ASSERT_GUEST_STMT_BREAK(cbRangesAndVertexDecls <= cbCmd - sizeof(*pCmd), rcParse = VERR_INVALID_PARAMETER);
+
+ uint32_t const cVertexDivisor = (cbCmd - sizeof(*pCmd) - cbRangesAndVertexDecls) / sizeof(uint32_t);
+ ASSERT_GUEST_STMT_BREAK(!cVertexDivisor || cVertexDivisor == pCmd->numVertexDecls, rcParse = VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGA3dVertexDecl *pVertexDecl = (SVGA3dVertexDecl *)(pCmd + 1);
+ SVGA3dPrimitiveRange *pNumRange = (SVGA3dPrimitiveRange *)&pVertexDecl[pCmd->numVertexDecls];
+ SVGA3dVertexDivisor *pVertexDivisor = cVertexDivisor ? (SVGA3dVertexDivisor *)&pNumRange[pCmd->numRanges] : NULL;
+
+ STAM_PROFILE_START(&pSvgaR3State->StatR3Cmd3dDrawPrimitivesProf, a);
+ vmsvga3dDrawPrimitives(pThisCC, pCmd->cid, pCmd->numVertexDecls, pVertexDecl, pCmd->numRanges,
+ pNumRange, cVertexDivisor, pVertexDivisor);
+ STAM_PROFILE_STOP(&pSvgaR3State->StatR3Cmd3dDrawPrimitivesProf, a);
+ break;
+ }
+
+ case SVGA_3D_CMD_SETSCISSORRECT:
+ {
+ SVGA3dCmdSetScissorRect *pCmd = (SVGA3dCmdSetScissorRect *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dSetScissorRect);
+
+ vmsvga3dSetScissorRect(pThisCC, pCmd->cid, &pCmd->rect);
+ break;
+ }
+
+ case SVGA_3D_CMD_BEGIN_QUERY:
+ {
+ SVGA3dCmdBeginQuery *pCmd = (SVGA3dCmdBeginQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dBeginQuery);
+
+ vmsvga3dQueryBegin(pThisCC, pCmd->cid, pCmd->type);
+ break;
+ }
+
+ case SVGA_3D_CMD_END_QUERY:
+ {
+ SVGA3dCmdEndQuery *pCmd = (SVGA3dCmdEndQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dEndQuery);
+
+ vmsvga3dQueryEnd(pThisCC, pCmd->cid, pCmd->type);
+ break;
+ }
+
+ case SVGA_3D_CMD_WAIT_FOR_QUERY:
+ {
+ SVGA3dCmdWaitForQuery *pCmd = (SVGA3dCmdWaitForQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dWaitForQuery);
+
+ vmsvga3dQueryWait(pThisCC, pCmd->cid, pCmd->type, pThis, &pCmd->guestResult);
+ break;
+ }
+
+ case SVGA_3D_CMD_GENERATE_MIPMAPS:
+ {
+ SVGA3dCmdGenerateMipmaps *pCmd = (SVGA3dCmdGenerateMipmaps *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dGenerateMipmaps);
+
+ vmsvga3dGenerateMipmaps(pThisCC, pCmd->sid, pCmd->filter);
+ break;
+ }
+
+ case SVGA_3D_CMD_ACTIVATE_SURFACE:
+ /* context id + surface id? */
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dActivateSurface);
+ break;
+
+ case SVGA_3D_CMD_DEACTIVATE_SURFACE:
+ /* context id + surface id? */
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3Cmd3dDeactivateSurface);
+ break;
+
+ /*
+ *
+ * VPGU10: SVGA_CAP_GBOBJECTS+ commands.
+ *
+ */
+ case SVGA_3D_CMD_SCREEN_DMA:
+ {
+ SVGA3dCmdScreenDMA *pCmd = (SVGA3dCmdScreenDMA *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ /* case SVGA_3D_CMD_DEAD1: New SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION */
+ case SVGA_3D_CMD_DEAD2:
+ case SVGA_3D_CMD_DEAD12: /* Old SVGA_3D_CMD_LOGICOPS_BITBLT */
+ case SVGA_3D_CMD_DEAD13: /* Old SVGA_3D_CMD_LOGICOPS_TRANSBLT */
+ case SVGA_3D_CMD_DEAD14: /* Old SVGA_3D_CMD_LOGICOPS_STRETCHBLT */
+ case SVGA_3D_CMD_DEAD15: /* Old SVGA_3D_CMD_LOGICOPS_COLORFILL */
+ case SVGA_3D_CMD_DEAD16: /* Old SVGA_3D_CMD_LOGICOPS_ALPHABLEND */
+ case SVGA_3D_CMD_DEAD17: /* Old SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND */
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_OTABLE_BASE:
+ {
+ SVGA3dCmdSetOTableBase *pCmd = (SVGA3dCmdSetOTableBase *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdSetOTableBase(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_READBACK_OTABLE:
+ {
+ SVGA3dCmdReadbackOTable *pCmd = (SVGA3dCmdReadbackOTable *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_MOB:
+ {
+ SVGA3dCmdDefineGBMob *pCmd = (SVGA3dCmdDefineGBMob *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDefineGBMob(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DESTROY_GB_MOB:
+ {
+ SVGA3dCmdDestroyGBMob *pCmd = (SVGA3dCmdDestroyGBMob *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDestroyGBMob(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEAD3:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING:
+ {
+ SVGA3dCmdUpdateGBMobMapping *pCmd = (SVGA3dCmdUpdateGBMobMapping *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_SURFACE:
+ {
+ SVGA3dCmdDefineGBSurface *pCmd = (SVGA3dCmdDefineGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDefineGBSurface(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DESTROY_GB_SURFACE:
+ {
+ SVGA3dCmdDestroyGBSurface *pCmd = (SVGA3dCmdDestroyGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDestroyGBSurface(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_BIND_GB_SURFACE:
+ {
+ SVGA3dCmdBindGBSurface *pCmd = (SVGA3dCmdBindGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdBindGBSurface(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_COND_BIND_GB_SURFACE:
+ {
+ SVGA3dCmdCondBindGBSurface *pCmd = (SVGA3dCmdCondBindGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_UPDATE_GB_IMAGE:
+ {
+ SVGA3dCmdUpdateGBImage *pCmd = (SVGA3dCmdUpdateGBImage *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdUpdateGBImage(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_UPDATE_GB_SURFACE:
+ {
+ SVGA3dCmdUpdateGBSurface *pCmd = (SVGA3dCmdUpdateGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdUpdateGBSurface(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_READBACK_GB_IMAGE:
+ {
+ SVGA3dCmdReadbackGBImage *pCmd = (SVGA3dCmdReadbackGBImage *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdReadbackGBImage(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_READBACK_GB_SURFACE:
+ {
+ SVGA3dCmdReadbackGBSurface *pCmd = (SVGA3dCmdReadbackGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdReadbackGBSurface(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_INVALIDATE_GB_IMAGE:
+ {
+ SVGA3dCmdInvalidateGBImage *pCmd = (SVGA3dCmdInvalidateGBImage *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdInvalidateGBImage(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_INVALIDATE_GB_SURFACE:
+ {
+ SVGA3dCmdInvalidateGBSurface *pCmd = (SVGA3dCmdInvalidateGBSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdInvalidateGBSurface(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_CONTEXT:
+ {
+ SVGA3dCmdDefineGBContext *pCmd = (SVGA3dCmdDefineGBContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DESTROY_GB_CONTEXT:
+ {
+ SVGA3dCmdDestroyGBContext *pCmd = (SVGA3dCmdDestroyGBContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_BIND_GB_CONTEXT:
+ {
+ SVGA3dCmdBindGBContext *pCmd = (SVGA3dCmdBindGBContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_READBACK_GB_CONTEXT:
+ {
+ SVGA3dCmdReadbackGBContext *pCmd = (SVGA3dCmdReadbackGBContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_INVALIDATE_GB_CONTEXT:
+ {
+ SVGA3dCmdInvalidateGBContext *pCmd = (SVGA3dCmdInvalidateGBContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_SHADER:
+ {
+ SVGA3dCmdDefineGBShader *pCmd = (SVGA3dCmdDefineGBShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DESTROY_GB_SHADER:
+ {
+ SVGA3dCmdDestroyGBShader *pCmd = (SVGA3dCmdDestroyGBShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_BIND_GB_SHADER:
+ {
+ SVGA3dCmdBindGBShader *pCmd = (SVGA3dCmdBindGBShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_OTABLE_BASE64:
+ {
+ SVGA3dCmdSetOTableBase64 *pCmd = (SVGA3dCmdSetOTableBase64 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdSetOTableBase64(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_BEGIN_GB_QUERY:
+ {
+ SVGA3dCmdBeginGBQuery *pCmd = (SVGA3dCmdBeginGBQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_END_GB_QUERY:
+ {
+ SVGA3dCmdEndGBQuery *pCmd = (SVGA3dCmdEndGBQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_WAIT_FOR_GB_QUERY:
+ {
+ SVGA3dCmdWaitForGBQuery *pCmd = (SVGA3dCmdWaitForGBQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_NOP:
+ {
+ /* Apparently there is nothing to do. */
+ break;
+ }
+
+ case SVGA_3D_CMD_ENABLE_GART:
+ {
+ SVGA3dCmdEnableGart *pCmd = (SVGA3dCmdEnableGart *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DISABLE_GART:
+ {
+ /* No corresponding SVGA3dCmd structure. */
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_MAP_MOB_INTO_GART:
+ {
+ SVGA3dCmdMapMobIntoGart *pCmd = (SVGA3dCmdMapMobIntoGart *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_UNMAP_GART_RANGE:
+ {
+ SVGA3dCmdUnmapGartRange *pCmd = (SVGA3dCmdUnmapGartRange *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_SCREENTARGET:
+ {
+ SVGA3dCmdDefineGBScreenTarget *pCmd = (SVGA3dCmdDefineGBScreenTarget *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDefineGBScreenTarget(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DESTROY_GB_SCREENTARGET:
+ {
+ SVGA3dCmdDestroyGBScreenTarget *pCmd = (SVGA3dCmdDestroyGBScreenTarget *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDestroyGBScreenTarget(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_BIND_GB_SCREENTARGET:
+ {
+ SVGA3dCmdBindGBScreenTarget *pCmd = (SVGA3dCmdBindGBScreenTarget *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdBindGBScreenTarget(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_UPDATE_GB_SCREENTARGET:
+ {
+ SVGA3dCmdUpdateGBScreenTarget *pCmd = (SVGA3dCmdUpdateGBScreenTarget *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdUpdateGBScreenTarget(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL:
+ {
+ SVGA3dCmdReadbackGBImagePartial *pCmd = (SVGA3dCmdReadbackGBImagePartial *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL:
+ {
+ SVGA3dCmdInvalidateGBImagePartial *pCmd = (SVGA3dCmdInvalidateGBImagePartial *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE:
+ {
+ SVGA3dCmdSetGBShaderConstInline *pCmd = (SVGA3dCmdSetGBShaderConstInline *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_GB_SCREEN_DMA:
+ {
+ SVGA3dCmdGBScreenDMA *pCmd = (SVGA3dCmdGBScreenDMA *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH:
+ {
+ SVGA3dCmdBindGBSurfaceWithPitch *pCmd = (SVGA3dCmdBindGBSurfaceWithPitch *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_GB_MOB_FENCE:
+ {
+ SVGA3dCmdGBMobFence *pCmd = (SVGA3dCmdGBMobFence *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_SURFACE_V2:
+ {
+ SVGA3dCmdDefineGBSurface_v2 *pCmd = (SVGA3dCmdDefineGBSurface_v2 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDefineGBSurface_v2(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_MOB64:
+ {
+ SVGA3dCmdDefineGBMob64 *pCmd = (SVGA3dCmdDefineGBMob64 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ vmsvga3dCmdDefineGBMob64(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_REDEFINE_GB_MOB64:
+ {
+ SVGA3dCmdRedefineGBMob64 *pCmd = (SVGA3dCmdRedefineGBMob64 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_NOP_ERROR:
+ {
+ /* Apparently there is nothing to do. */
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_VERTEX_STREAMS:
+ {
+ SVGA3dCmdSetVertexStreams *pCmd = (SVGA3dCmdSetVertexStreams *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_VERTEX_DECLS:
+ {
+ SVGA3dCmdSetVertexDecls *pCmd = (SVGA3dCmdSetVertexDecls *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_SET_VERTEX_DIVISORS:
+ {
+ SVGA3dCmdSetVertexDivisors *pCmd = (SVGA3dCmdSetVertexDivisors *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ VMSVGA_3D_CMD_NOTIMPL(); RT_NOREF(pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DRAW:
+ {
+ /* No corresponding SVGA3dCmd structure. */
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_DRAW_INDEXED:
+ {
+ /* No corresponding SVGA3dCmd structure. */
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_CONTEXT:
+ {
+ SVGA3dCmdDXDefineContext *pCmd = (SVGA3dCmdDXDefineContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineContext(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_CONTEXT:
+ {
+ SVGA3dCmdDXDestroyContext *pCmd = (SVGA3dCmdDXDestroyContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyContext(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_CONTEXT:
+ {
+ SVGA3dCmdDXBindContext *pCmd = (SVGA3dCmdDXBindContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindContext(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_READBACK_CONTEXT:
+ {
+ SVGA3dCmdDXReadbackContext *pCmd = (SVGA3dCmdDXReadbackContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXReadbackContext(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_INVALIDATE_CONTEXT:
+ {
+ SVGA3dCmdDXInvalidateContext *pCmd = (SVGA3dCmdDXInvalidateContext *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXInvalidateContext(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER:
+ {
+ SVGA3dCmdDXSetSingleConstantBuffer *pCmd = (SVGA3dCmdDXSetSingleConstantBuffer *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetSingleConstantBuffer(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SHADER_RESOURCES:
+ {
+ SVGA3dCmdDXSetShaderResources *pCmd = (SVGA3dCmdDXSetShaderResources *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetShaderResources(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SHADER:
+ {
+ SVGA3dCmdDXSetShader *pCmd = (SVGA3dCmdDXSetShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetShader(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SAMPLERS:
+ {
+ SVGA3dCmdDXSetSamplers *pCmd = (SVGA3dCmdDXSetSamplers *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetSamplers(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW:
+ {
+ SVGA3dCmdDXDraw *pCmd = (SVGA3dCmdDXDraw *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDraw(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW_INDEXED:
+ {
+ SVGA3dCmdDXDrawIndexed *pCmd = (SVGA3dCmdDXDrawIndexed *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDrawIndexed(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW_INSTANCED:
+ {
+ SVGA3dCmdDXDrawInstanced *pCmd = (SVGA3dCmdDXDrawInstanced *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDrawInstanced(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED:
+ {
+ SVGA3dCmdDXDrawIndexedInstanced *pCmd = (SVGA3dCmdDXDrawIndexedInstanced *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDrawIndexedInstanced(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW_AUTO:
+ {
+ SVGA3dCmdDXDrawAuto *pCmd = (SVGA3dCmdDXDrawAuto *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDrawAuto(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_INPUT_LAYOUT:
+ {
+ SVGA3dCmdDXSetInputLayout *pCmd = (SVGA3dCmdDXSetInputLayout *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetInputLayout(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS:
+ {
+ SVGA3dCmdDXSetVertexBuffers *pCmd = (SVGA3dCmdDXSetVertexBuffers *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetVertexBuffers(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_INDEX_BUFFER:
+ {
+ SVGA3dCmdDXSetIndexBuffer *pCmd = (SVGA3dCmdDXSetIndexBuffer *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetIndexBuffer(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_TOPOLOGY:
+ {
+ SVGA3dCmdDXSetTopology *pCmd = (SVGA3dCmdDXSetTopology *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetTopology(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_RENDERTARGETS:
+ {
+ SVGA3dCmdDXSetRenderTargets *pCmd = (SVGA3dCmdDXSetRenderTargets *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetRenderTargets(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_BLEND_STATE:
+ {
+ SVGA3dCmdDXSetBlendState *pCmd = (SVGA3dCmdDXSetBlendState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetBlendState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE:
+ {
+ SVGA3dCmdDXSetDepthStencilState *pCmd = (SVGA3dCmdDXSetDepthStencilState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetDepthStencilState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_RASTERIZER_STATE:
+ {
+ SVGA3dCmdDXSetRasterizerState *pCmd = (SVGA3dCmdDXSetRasterizerState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetRasterizerState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_QUERY:
+ {
+ SVGA3dCmdDXDefineQuery *pCmd = (SVGA3dCmdDXDefineQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_QUERY:
+ {
+ SVGA3dCmdDXDestroyQuery *pCmd = (SVGA3dCmdDXDestroyQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_QUERY:
+ {
+ SVGA3dCmdDXBindQuery *pCmd = (SVGA3dCmdDXBindQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_QUERY_OFFSET:
+ {
+ SVGA3dCmdDXSetQueryOffset *pCmd = (SVGA3dCmdDXSetQueryOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetQueryOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BEGIN_QUERY:
+ {
+ SVGA3dCmdDXBeginQuery *pCmd = (SVGA3dCmdDXBeginQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBeginQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_END_QUERY:
+ {
+ SVGA3dCmdDXEndQuery *pCmd = (SVGA3dCmdDXEndQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXEndQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_READBACK_QUERY:
+ {
+ SVGA3dCmdDXReadbackQuery *pCmd = (SVGA3dCmdDXReadbackQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXReadbackQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_PREDICATION:
+ {
+ SVGA3dCmdDXSetPredication *pCmd = (SVGA3dCmdDXSetPredication *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetPredication(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SOTARGETS:
+ {
+ SVGA3dCmdDXSetSOTargets *pCmd = (SVGA3dCmdDXSetSOTargets *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetSOTargets(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_VIEWPORTS:
+ {
+ SVGA3dCmdDXSetViewports *pCmd = (SVGA3dCmdDXSetViewports *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetViewports(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SCISSORRECTS:
+ {
+ SVGA3dCmdDXSetScissorRects *pCmd = (SVGA3dCmdDXSetScissorRects *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetScissorRects(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW:
+ {
+ SVGA3dCmdDXClearRenderTargetView *pCmd = (SVGA3dCmdDXClearRenderTargetView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXClearRenderTargetView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW:
+ {
+ SVGA3dCmdDXClearDepthStencilView *pCmd = (SVGA3dCmdDXClearDepthStencilView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXClearDepthStencilView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRED_COPY_REGION:
+ {
+ SVGA3dCmdDXPredCopyRegion *pCmd = (SVGA3dCmdDXPredCopyRegion *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPredCopyRegion(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRED_COPY:
+ {
+ SVGA3dCmdDXPredCopy *pCmd = (SVGA3dCmdDXPredCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPredCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRESENTBLT:
+ {
+ SVGA3dCmdDXPresentBlt *pCmd = (SVGA3dCmdDXPresentBlt *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPresentBlt(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_GENMIPS:
+ {
+ SVGA3dCmdDXGenMips *pCmd = (SVGA3dCmdDXGenMips *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXGenMips(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE:
+ {
+ SVGA3dCmdDXUpdateSubResource *pCmd = (SVGA3dCmdDXUpdateSubResource *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXUpdateSubResource(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_READBACK_SUBRESOURCE:
+ {
+ SVGA3dCmdDXReadbackSubResource *pCmd = (SVGA3dCmdDXReadbackSubResource *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXReadbackSubResource(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE:
+ {
+ SVGA3dCmdDXInvalidateSubResource *pCmd = (SVGA3dCmdDXInvalidateSubResource *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXInvalidateSubResource(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW:
+ {
+ SVGA3dCmdDXDefineShaderResourceView *pCmd = (SVGA3dCmdDXDefineShaderResourceView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineShaderResourceView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW:
+ {
+ SVGA3dCmdDXDestroyShaderResourceView *pCmd = (SVGA3dCmdDXDestroyShaderResourceView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyShaderResourceView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW:
+ {
+ SVGA3dCmdDXDefineRenderTargetView *pCmd = (SVGA3dCmdDXDefineRenderTargetView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineRenderTargetView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW:
+ {
+ SVGA3dCmdDXDestroyRenderTargetView *pCmd = (SVGA3dCmdDXDestroyRenderTargetView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyRenderTargetView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW:
+ {
+ SVGA3dCmdDXDefineDepthStencilView *pCmd = (SVGA3dCmdDXDefineDepthStencilView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineDepthStencilView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW:
+ {
+ SVGA3dCmdDXDestroyDepthStencilView *pCmd = (SVGA3dCmdDXDestroyDepthStencilView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyDepthStencilView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT:
+ {
+ SVGA3dCmdDXDefineElementLayout *pCmd = (SVGA3dCmdDXDefineElementLayout *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineElementLayout(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT:
+ {
+ SVGA3dCmdDXDestroyElementLayout *pCmd = (SVGA3dCmdDXDestroyElementLayout *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyElementLayout(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_BLEND_STATE:
+ {
+ SVGA3dCmdDXDefineBlendState *pCmd = (SVGA3dCmdDXDefineBlendState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineBlendState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_BLEND_STATE:
+ {
+ SVGA3dCmdDXDestroyBlendState *pCmd = (SVGA3dCmdDXDestroyBlendState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyBlendState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE:
+ {
+ SVGA3dCmdDXDefineDepthStencilState *pCmd = (SVGA3dCmdDXDefineDepthStencilState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineDepthStencilState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE:
+ {
+ SVGA3dCmdDXDestroyDepthStencilState *pCmd = (SVGA3dCmdDXDestroyDepthStencilState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyDepthStencilState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE:
+ {
+ SVGA3dCmdDXDefineRasterizerState *pCmd = (SVGA3dCmdDXDefineRasterizerState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineRasterizerState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE:
+ {
+ SVGA3dCmdDXDestroyRasterizerState *pCmd = (SVGA3dCmdDXDestroyRasterizerState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyRasterizerState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE:
+ {
+ SVGA3dCmdDXDefineSamplerState *pCmd = (SVGA3dCmdDXDefineSamplerState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineSamplerState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE:
+ {
+ SVGA3dCmdDXDestroySamplerState *pCmd = (SVGA3dCmdDXDestroySamplerState *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroySamplerState(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_SHADER:
+ {
+ SVGA3dCmdDXDefineShader *pCmd = (SVGA3dCmdDXDefineShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineShader(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_SHADER:
+ {
+ SVGA3dCmdDXDestroyShader *pCmd = (SVGA3dCmdDXDestroyShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyShader(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_SHADER:
+ {
+ SVGA3dCmdDXBindShader *pCmd = (SVGA3dCmdDXBindShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindShader(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT:
+ {
+ SVGA3dCmdDXDefineStreamOutput *pCmd = (SVGA3dCmdDXDefineStreamOutput *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineStreamOutput(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT:
+ {
+ SVGA3dCmdDXDestroyStreamOutput *pCmd = (SVGA3dCmdDXDestroyStreamOutput *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyStreamOutput(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_STREAMOUTPUT:
+ {
+ SVGA3dCmdDXSetStreamOutput *pCmd = (SVGA3dCmdDXSetStreamOutput *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetStreamOutput(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_COTABLE:
+ {
+ SVGA3dCmdDXSetCOTable *pCmd = (SVGA3dCmdDXSetCOTable *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetCOTable(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_READBACK_COTABLE:
+ {
+ SVGA3dCmdDXReadbackCOTable *pCmd = (SVGA3dCmdDXReadbackCOTable *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXReadbackCOTable(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BUFFER_COPY:
+ {
+ SVGA3dCmdDXBufferCopy *pCmd = (SVGA3dCmdDXBufferCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBufferCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER:
+ {
+ SVGA3dCmdDXTransferFromBuffer *pCmd = (SVGA3dCmdDXTransferFromBuffer *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXTransferFromBuffer(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK:
+ {
+ SVGA3dCmdDXSurfaceCopyAndReadback *pCmd = (SVGA3dCmdDXSurfaceCopyAndReadback *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSurfaceCopyAndReadback(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_MOVE_QUERY:
+ {
+ SVGA3dCmdDXMoveQuery *pCmd = (SVGA3dCmdDXMoveQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXMoveQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_ALL_QUERY:
+ {
+ SVGA3dCmdDXBindAllQuery *pCmd = (SVGA3dCmdDXBindAllQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindAllQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_READBACK_ALL_QUERY:
+ {
+ SVGA3dCmdDXReadbackAllQuery *pCmd = (SVGA3dCmdDXReadbackAllQuery *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXReadbackAllQuery(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER:
+ {
+ SVGA3dCmdDXPredTransferFromBuffer *pCmd = (SVGA3dCmdDXPredTransferFromBuffer *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPredTransferFromBuffer(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_MOB_FENCE_64:
+ {
+ SVGA3dCmdDXMobFence64 *pCmd = (SVGA3dCmdDXMobFence64 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXMobFence64(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_ALL_SHADER:
+ {
+ SVGA3dCmdDXBindAllShader *pCmd = (SVGA3dCmdDXBindAllShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindAllShader(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_HINT:
+ {
+ SVGA3dCmdDXHint *pCmd = (SVGA3dCmdDXHint *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXHint(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BUFFER_UPDATE:
+ {
+ SVGA3dCmdDXBufferUpdate *pCmd = (SVGA3dCmdDXBufferUpdate *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBufferUpdate(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET:
+ {
+ SVGA3dCmdDXSetVSConstantBufferOffset *pCmd = (SVGA3dCmdDXSetVSConstantBufferOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetVSConstantBufferOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET:
+ {
+ SVGA3dCmdDXSetPSConstantBufferOffset *pCmd = (SVGA3dCmdDXSetPSConstantBufferOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetPSConstantBufferOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET:
+ {
+ SVGA3dCmdDXSetGSConstantBufferOffset *pCmd = (SVGA3dCmdDXSetGSConstantBufferOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetGSConstantBufferOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET:
+ {
+ SVGA3dCmdDXSetHSConstantBufferOffset *pCmd = (SVGA3dCmdDXSetHSConstantBufferOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetHSConstantBufferOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET:
+ {
+ SVGA3dCmdDXSetDSConstantBufferOffset *pCmd = (SVGA3dCmdDXSetDSConstantBufferOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetDSConstantBufferOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET:
+ {
+ SVGA3dCmdDXSetCSConstantBufferOffset *pCmd = (SVGA3dCmdDXSetCSConstantBufferOffset *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetCSConstantBufferOffset(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER:
+ {
+ SVGA3dCmdDXCondBindAllShader *pCmd = (SVGA3dCmdDXCondBindAllShader *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXCondBindAllShader(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_SCREEN_COPY:
+ {
+ SVGA3dCmdScreenCopy *pCmd = (SVGA3dCmdScreenCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdScreenCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED1:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED2:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED3:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED4:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED5:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED6:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED7:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED8:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_GROW_OTABLE:
+ {
+ SVGA3dCmdGrowOTable *pCmd = (SVGA3dCmdGrowOTable *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdGrowOTable(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_GROW_COTABLE:
+ {
+ SVGA3dCmdDXGrowCOTable *pCmd = (SVGA3dCmdDXGrowCOTable *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXGrowCOTable(pThisCC, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_INTRA_SURFACE_COPY:
+ {
+ SVGA3dCmdIntraSurfaceCopy *pCmd = (SVGA3dCmdIntraSurfaceCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdIntraSurfaceCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_SURFACE_V3:
+ {
+ SVGA3dCmdDefineGBSurface_v3 *pCmd = (SVGA3dCmdDefineGBSurface_v3 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDefineGBSurface_v3(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_RESOLVE_COPY:
+ {
+ SVGA3dCmdDXResolveCopy *pCmd = (SVGA3dCmdDXResolveCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXResolveCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRED_RESOLVE_COPY:
+ {
+ SVGA3dCmdDXPredResolveCopy *pCmd = (SVGA3dCmdDXPredResolveCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPredResolveCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRED_CONVERT_REGION:
+ {
+ SVGA3dCmdDXPredConvertRegion *pCmd = (SVGA3dCmdDXPredConvertRegion *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPredConvertRegion(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_PRED_CONVERT:
+ {
+ SVGA3dCmdDXPredConvert *pCmd = (SVGA3dCmdDXPredConvert *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXPredConvert(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_WHOLE_SURFACE_COPY:
+ {
+ SVGA3dCmdWholeSurfaceCopy *pCmd = (SVGA3dCmdWholeSurfaceCopy *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdWholeSurfaceCopy(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_UA_VIEW:
+ {
+ SVGA3dCmdDXDefineUAView *pCmd = (SVGA3dCmdDXDefineUAView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineUAView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DESTROY_UA_VIEW:
+ {
+ SVGA3dCmdDXDestroyUAView *pCmd = (SVGA3dCmdDXDestroyUAView *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDestroyUAView(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT:
+ {
+ SVGA3dCmdDXClearUAViewUint *pCmd = (SVGA3dCmdDXClearUAViewUint *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXClearUAViewUint(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT:
+ {
+ SVGA3dCmdDXClearUAViewFloat *pCmd = (SVGA3dCmdDXClearUAViewFloat *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXClearUAViewFloat(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT:
+ {
+ SVGA3dCmdDXCopyStructureCount *pCmd = (SVGA3dCmdDXCopyStructureCount *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXCopyStructureCount(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_UA_VIEWS:
+ {
+ SVGA3dCmdDXSetUAViews *pCmd = (SVGA3dCmdDXSetUAViews *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetUAViews(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT:
+ {
+ SVGA3dCmdDXDrawIndexedInstancedIndirect *pCmd = (SVGA3dCmdDXDrawIndexedInstancedIndirect *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDrawIndexedInstancedIndirect(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT:
+ {
+ SVGA3dCmdDXDrawInstancedIndirect *pCmd = (SVGA3dCmdDXDrawInstancedIndirect *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDrawInstancedIndirect(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DISPATCH:
+ {
+ SVGA3dCmdDXDispatch *pCmd = (SVGA3dCmdDXDispatch *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDispatch(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DISPATCH_INDIRECT:
+ {
+ SVGA3dCmdDXDispatchIndirect *pCmd = (SVGA3dCmdDXDispatchIndirect *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDispatchIndirect(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_WRITE_ZERO_SURFACE:
+ {
+ SVGA3dCmdWriteZeroSurface *pCmd = (SVGA3dCmdWriteZeroSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdWriteZeroSurface(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_HINT_ZERO_SURFACE:
+ {
+ SVGA3dCmdHintZeroSurface *pCmd = (SVGA3dCmdHintZeroSurface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdHintZeroSurface(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER:
+ {
+ SVGA3dCmdDXTransferToBuffer *pCmd = (SVGA3dCmdDXTransferToBuffer *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXTransferToBuffer(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT:
+ {
+ SVGA3dCmdDXSetStructureCount *pCmd = (SVGA3dCmdDXSetStructureCount *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetStructureCount(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_LOGICOPS_BITBLT:
+ {
+ SVGA3dCmdLogicOpsBitBlt *pCmd = (SVGA3dCmdLogicOpsBitBlt *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdLogicOpsBitBlt(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_LOGICOPS_TRANSBLT:
+ {
+ SVGA3dCmdLogicOpsTransBlt *pCmd = (SVGA3dCmdLogicOpsTransBlt *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdLogicOpsTransBlt(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_LOGICOPS_STRETCHBLT:
+ {
+ SVGA3dCmdLogicOpsStretchBlt *pCmd = (SVGA3dCmdLogicOpsStretchBlt *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdLogicOpsStretchBlt(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_LOGICOPS_COLORFILL:
+ {
+ SVGA3dCmdLogicOpsColorFill *pCmd = (SVGA3dCmdLogicOpsColorFill *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdLogicOpsColorFill(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_LOGICOPS_ALPHABLEND:
+ {
+ SVGA3dCmdLogicOpsAlphaBlend *pCmd = (SVGA3dCmdLogicOpsAlphaBlend *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdLogicOpsAlphaBlend(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND:
+ {
+ SVGA3dCmdLogicOpsClearTypeBlend *pCmd = (SVGA3dCmdLogicOpsClearTypeBlend *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdLogicOpsClearTypeBlend(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED2_1:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED2_2:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_DEFINE_GB_SURFACE_V4:
+ {
+ SVGA3dCmdDefineGBSurface_v4 *pCmd = (SVGA3dCmdDefineGBSurface_v4 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDefineGBSurface_v4(pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_CS_UA_VIEWS:
+ {
+ SVGA3dCmdDXSetCSUAViews *pCmd = (SVGA3dCmdDXSetCSUAViews *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetCSUAViews(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_MIN_LOD:
+ {
+ SVGA3dCmdDXSetMinLOD *pCmd = (SVGA3dCmdDXSetMinLOD *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetMinLOD(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED2_3:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_RESERVED2_4:
+ {
+ VMSVGA_3D_CMD_NOTIMPL();
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2:
+ {
+ SVGA3dCmdDXDefineDepthStencilView_v2 *pCmd = (SVGA3dCmdDXDefineDepthStencilView_v2 *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineDepthStencilView_v2(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB:
+ {
+ SVGA3dCmdDXDefineStreamOutputWithMob *pCmd = (SVGA3dCmdDXDefineStreamOutputWithMob *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXDefineStreamOutputWithMob(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_SET_SHADER_IFACE:
+ {
+ SVGA3dCmdDXSetShaderIface *pCmd = (SVGA3dCmdDXSetShaderIface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXSetShaderIface(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_STREAMOUTPUT:
+ {
+ SVGA3dCmdDXBindStreamOutput *pCmd = (SVGA3dCmdDXBindStreamOutput *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindStreamOutput(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_SURFACE_STRETCHBLT_NON_MS_TO_MS:
+ {
+ SVGA3dCmdSurfaceStretchBltNonMSToMS *pCmd = (SVGA3dCmdSurfaceStretchBltNonMSToMS *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdSurfaceStretchBltNonMSToMS(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_DX_BIND_SHADER_IFACE:
+ {
+ SVGA3dCmdDXBindShaderIface *pCmd = (SVGA3dCmdDXBindShaderIface *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdDXBindShaderIface(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ case SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION:
+ {
+ SVGA3dCmdVBDXClearRenderTargetViewRegion *pCmd = (SVGA3dCmdVBDXClearRenderTargetViewRegion *)pvCmd;
+ VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
+ rcParse = vmsvga3dCmdVBDXClearRenderTargetViewRegion(pThisCC, idDXContext, pCmd, cbCmd);
+ break;
+ }
+
+ /* Unsupported commands. */
+ case SVGA_3D_CMD_DEAD4: /* SVGA_3D_CMD_VIDEO_CREATE_DECODER */
+ case SVGA_3D_CMD_DEAD5: /* SVGA_3D_CMD_VIDEO_DESTROY_DECODER */
+ case SVGA_3D_CMD_DEAD6: /* SVGA_3D_CMD_VIDEO_CREATE_PROCESSOR */
+ case SVGA_3D_CMD_DEAD7: /* SVGA_3D_CMD_VIDEO_DESTROY_PROCESSOR */
+ case SVGA_3D_CMD_DEAD8: /* SVGA_3D_CMD_VIDEO_DECODE_START_FRAME */
+ case SVGA_3D_CMD_DEAD9: /* SVGA_3D_CMD_VIDEO_DECODE_RENDER */
+ case SVGA_3D_CMD_DEAD10: /* SVGA_3D_CMD_VIDEO_DECODE_END_FRAME */
+ case SVGA_3D_CMD_DEAD11: /* SVGA_3D_CMD_VIDEO_PROCESS_FRAME */
+ /* Prevent the compiler warning. */
+ case SVGA_3D_CMD_LEGACY_BASE:
+ case SVGA_3D_CMD_MAX:
+ case SVGA_3D_CMD_FUTURE_MAX:
+ /* No 'default' case */
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatFifoUnkCmds);
+ ASSERT_GUEST_MSG_FAILED(("enmCmdId=%d\n", enmCmdId));
+ LogRelMax(16, ("VMSVGA: unsupported 3D command %d\n", enmCmdId));
+ rcParse = VERR_NOT_IMPLEMENTED;
+ break;
+ }
+
+ return VINF_SUCCESS;
+// return rcParse;
+}
+# undef VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK
+#endif /* VBOX_WITH_VMSVGA3D */
+
+
+/*
+ *
+ * Handlers for FIFO commands.
+ *
+ * Every handler takes the following parameters:
+ *
+ * pThis The shared VGA/VMSVGA state.
+ * pThisCC The VGA/VMSVGA state for ring-3.
+ * pCmd The command data.
+ */
+
+
+/* SVGA_CMD_UPDATE */
+void vmsvgaR3CmdUpdate(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdUpdate const *pCmd)
+{
+ RT_NOREF(pThis);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdUpdate);
+ Log(("SVGA_CMD_UPDATE %d,%d %dx%d\n", pCmd->x, pCmd->y, pCmd->width, pCmd->height));
+
+ /** @todo Multiple screens? */
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, 0);
+ if (!pScreen) /* Can happen if screen is not defined (aScreens[idScreen].fDefined == false) yet. */
+ return;
+
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, pCmd->x, pCmd->y, pCmd->width, pCmd->height);
+}
+
+
+/* SVGA_CMD_UPDATE_VERBOSE */
+void vmsvgaR3CmdUpdateVerbose(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdUpdateVerbose const *pCmd)
+{
+ RT_NOREF(pThis);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdUpdateVerbose);
+ Log(("SVGA_CMD_UPDATE_VERBOSE %d,%d %dx%d reason %#x\n", pCmd->x, pCmd->y, pCmd->width, pCmd->height, pCmd->reason));
+
+ /** @todo Multiple screens? */
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, 0);
+ if (!pScreen) /* Can happen if screen is not defined (aScreens[idScreen].fDefined == false) yet. */
+ return;
+
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, pCmd->x, pCmd->y, pCmd->width, pCmd->height);
+}
+
+
+/* SVGA_CMD_RECT_FILL */
+void vmsvgaR3CmdRectFill(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRectFill const *pCmd)
+{
+ RT_NOREF(pThis, pCmd);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdRectFill);
+ Log(("SVGA_CMD_RECT_FILL %08X @ %d,%d (%dx%d)\n", pCmd->pixel, pCmd->destX, pCmd->destY, pCmd->width, pCmd->height));
+ LogRelMax(4, ("VMSVGA: Unsupported SVGA_CMD_RECT_FILL command ignored.\n"));
+}
+
+
+/* SVGA_CMD_RECT_COPY */
+void vmsvgaR3CmdRectCopy(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRectCopy const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdRectCopy);
+ Log(("SVGA_CMD_RECT_COPY %d,%d -> %d,%d %dx%d\n", pCmd->srcX, pCmd->srcY, pCmd->destX, pCmd->destY, pCmd->width, pCmd->height));
+
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, 0);
+ AssertPtrReturnVoid(pScreen);
+
+ /* Check that arguments aren't complete junk. A precise check is done in vmsvgaR3RectCopy(). */
+ ASSERT_GUEST_RETURN_VOID(pCmd->srcX < pThis->svga.u32MaxWidth);
+ ASSERT_GUEST_RETURN_VOID(pCmd->destX < pThis->svga.u32MaxWidth);
+ ASSERT_GUEST_RETURN_VOID(pCmd->width < pThis->svga.u32MaxWidth);
+ ASSERT_GUEST_RETURN_VOID(pCmd->srcY < pThis->svga.u32MaxHeight);
+ ASSERT_GUEST_RETURN_VOID(pCmd->destY < pThis->svga.u32MaxHeight);
+ ASSERT_GUEST_RETURN_VOID(pCmd->height < pThis->svga.u32MaxHeight);
+
+ vmsvgaR3RectCopy(pThisCC, pScreen, pCmd->srcX, pCmd->srcY, pCmd->destX, pCmd->destY,
+ pCmd->width, pCmd->height, pThis->vram_size);
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, pCmd->destX, pCmd->destY, pCmd->width, pCmd->height);
+}
+
+
+/* SVGA_CMD_RECT_ROP_COPY */
+void vmsvgaR3CmdRectRopCopy(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRectRopCopy const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdRectRopCopy);
+ Log(("SVGA_CMD_RECT_ROP_COPY %d,%d -> %d,%d %dx%d ROP %#X\n", pCmd->srcX, pCmd->srcY, pCmd->destX, pCmd->destY, pCmd->width, pCmd->height, pCmd->rop));
+
+ if (pCmd->rop != SVGA_ROP_COPY)
+ {
+ /* We only support the plain copy ROP which makes SVGA_CMD_RECT_ROP_COPY exactly the same
+ * as SVGA_CMD_RECT_COPY. XFree86 4.1.0 and 4.2.0 drivers (driver version 10.4.0 and 10.7.0,
+ * respectively) issue SVGA_CMD_RECT_ROP_COPY when SVGA_CAP_RECT_COPY is present even when
+ * SVGA_CAP_RASTER_OP is not. However, the ROP will always be SVGA_ROP_COPY.
+ */
+ LogRelMax(4, ("VMSVGA: SVGA_CMD_RECT_ROP_COPY %d,%d -> %d,%d (%dx%d) ROP %X unsupported\n",
+ pCmd->srcX, pCmd->srcY, pCmd->destX, pCmd->destY, pCmd->width, pCmd->height, pCmd->rop));
+ return;
+ }
+
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, 0);
+ AssertPtrReturnVoid(pScreen);
+
+ /* Check that arguments aren't complete junk. A precise check is done in vmsvgaR3RectCopy(). */
+ ASSERT_GUEST_RETURN_VOID(pCmd->srcX < pThis->svga.u32MaxWidth);
+ ASSERT_GUEST_RETURN_VOID(pCmd->destX < pThis->svga.u32MaxWidth);
+ ASSERT_GUEST_RETURN_VOID(pCmd->width < pThis->svga.u32MaxWidth);
+ ASSERT_GUEST_RETURN_VOID(pCmd->srcY < pThis->svga.u32MaxHeight);
+ ASSERT_GUEST_RETURN_VOID(pCmd->destY < pThis->svga.u32MaxHeight);
+ ASSERT_GUEST_RETURN_VOID(pCmd->height < pThis->svga.u32MaxHeight);
+
+ vmsvgaR3RectCopy(pThisCC, pScreen, pCmd->srcX, pCmd->srcY, pCmd->destX, pCmd->destY,
+ pCmd->width, pCmd->height, pThis->vram_size);
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, pCmd->destX, pCmd->destY, pCmd->width, pCmd->height);
+}
+
+
+/* SVGA_CMD_DISPLAY_CURSOR */
+void vmsvgaR3CmdDisplayCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDisplayCursor const *pCmd)
+{
+ RT_NOREF(pThis, pCmd);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDisplayCursor);
+ Log(("SVGA_CMD_DISPLAY_CURSOR id=%d state=%d\n", pCmd->id, pCmd->state));
+ LogRelMax(4, ("VMSVGA: Unsupported SVGA_CMD_DISPLAY_CURSOR command ignored.\n"));
+}
+
+
+/* SVGA_CMD_MOVE_CURSOR */
+void vmsvgaR3CmdMoveCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdMoveCursor const *pCmd)
+{
+ RT_NOREF(pThis, pCmd);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdMoveCursor);
+ Log(("SVGA_CMD_MOVE_CURSOR to %d,%d\n", pCmd->pos.x, pCmd->pos.y));
+ LogRelMax(4, ("VMSVGA: Unsupported SVGA_CMD_MOVE_CURSOR command ignored.\n"));
+}
+
+
+/* SVGA_CMD_DEFINE_CURSOR */
+void vmsvgaR3CmdDefineCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineCursor const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineCursor);
+ Log(("SVGA_CMD_DEFINE_CURSOR id=%d size (%dx%d) hotspot (%d,%d) andMaskDepth=%d xorMaskDepth=%d\n",
+ pCmd->id, pCmd->width, pCmd->height, pCmd->hotspotX, pCmd->hotspotY, pCmd->andMaskDepth, pCmd->xorMaskDepth));
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->height < 2048 && pCmd->width < 2048);
+ ASSERT_GUEST_RETURN_VOID(pCmd->andMaskDepth <= 32);
+ ASSERT_GUEST_RETURN_VOID(pCmd->xorMaskDepth <= 32);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const cbSrcAndLine = RT_ALIGN_32(pCmd->width * (pCmd->andMaskDepth + (pCmd->andMaskDepth == 15)), 32) / 8;
+ uint32_t const cbSrcAndMask = cbSrcAndLine * pCmd->height;
+ uint32_t const cbSrcXorLine = RT_ALIGN_32(pCmd->width * (pCmd->xorMaskDepth + (pCmd->xorMaskDepth == 15)), 32) / 8;
+
+ uint8_t const *pbSrcAndMask = (uint8_t const *)(pCmd + 1);
+ uint8_t const *pbSrcXorMask = (uint8_t const *)(pCmd + 1) + cbSrcAndMask;
+
+ uint32_t const cx = pCmd->width;
+ uint32_t const cy = pCmd->height;
+
+ /*
+ * Convert the input to 1-bit AND mask and a 32-bit BRGA XOR mask.
+ * The AND data uses 8-bit aligned scanlines.
+ * The XOR data must be starting on a 32-bit boundrary.
+ */
+ uint32_t cbDstAndLine = RT_ALIGN_32(cx, 8) / 8;
+ uint32_t cbDstAndMask = cbDstAndLine * cy;
+ uint32_t cbDstXorMask = cx * sizeof(uint32_t) * cy;
+ uint32_t cbCopy = RT_ALIGN_32(cbDstAndMask, 4) + cbDstXorMask;
+
+ uint8_t *pbCopy = (uint8_t *)RTMemAlloc(cbCopy);
+ AssertReturnVoid(pbCopy);
+
+ /* Convert the AND mask. */
+ uint8_t *pbDst = pbCopy;
+ uint8_t const *pbSrc = pbSrcAndMask;
+ switch (pCmd->andMaskDepth)
+ {
+ case 1:
+ if (cbSrcAndLine == cbDstAndLine)
+ memcpy(pbDst, pbSrc, cbSrcAndLine * cy);
+ else
+ {
+ Assert(cbSrcAndLine > cbDstAndLine); /* lines are dword alined in source, but only byte in destination. */
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ memcpy(pbDst, pbSrc, cbDstAndLine);
+ pbDst += cbDstAndLine;
+ pbSrc += cbSrcAndLine;
+ }
+ }
+ break;
+ /* Should take the XOR mask into account for the multi-bit AND mask. */
+ case 8:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; )
+ {
+ uint8_t bDst = 0;
+ uint8_t fBit = 0x80;
+ do
+ {
+ uintptr_t const idxPal = pbSrc[x] * 3;
+ if ((( pThis->last_palette[idxPal]
+ | (pThis->last_palette[idxPal] >> 8)
+ | (pThis->last_palette[idxPal] >> 16)) & 0xff) > 0xfc)
+ bDst |= fBit;
+ fBit >>= 1;
+ x++;
+ } while (x < cx && (x & 7));
+ pbDst[(x - 1) / 8] = bDst;
+ }
+ pbDst += cbDstAndLine;
+ pbSrc += cbSrcAndLine;
+ }
+ break;
+ case 15:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; )
+ {
+ uint8_t bDst = 0;
+ uint8_t fBit = 0x80;
+ do
+ {
+ if ((pbSrc[x * 2] | (pbSrc[x * 2 + 1] & 0x7f)) >= 0xfc)
+ bDst |= fBit;
+ fBit >>= 1;
+ x++;
+ } while (x < cx && (x & 7));
+ pbDst[(x - 1) / 8] = bDst;
+ }
+ pbDst += cbDstAndLine;
+ pbSrc += cbSrcAndLine;
+ }
+ break;
+ case 16:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; )
+ {
+ uint8_t bDst = 0;
+ uint8_t fBit = 0x80;
+ do
+ {
+ if ((pbSrc[x * 2] | pbSrc[x * 2 + 1]) >= 0xfc)
+ bDst |= fBit;
+ fBit >>= 1;
+ x++;
+ } while (x < cx && (x & 7));
+ pbDst[(x - 1) / 8] = bDst;
+ }
+ pbDst += cbDstAndLine;
+ pbSrc += cbSrcAndLine;
+ }
+ break;
+ case 24:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; )
+ {
+ uint8_t bDst = 0;
+ uint8_t fBit = 0x80;
+ do
+ {
+ if ((pbSrc[x * 3] | pbSrc[x * 3 + 1] | pbSrc[x * 3 + 2]) >= 0xfc)
+ bDst |= fBit;
+ fBit >>= 1;
+ x++;
+ } while (x < cx && (x & 7));
+ pbDst[(x - 1) / 8] = bDst;
+ }
+ pbDst += cbDstAndLine;
+ pbSrc += cbSrcAndLine;
+ }
+ break;
+ case 32:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; )
+ {
+ uint8_t bDst = 0;
+ uint8_t fBit = 0x80;
+ do
+ {
+ if ((pbSrc[x * 4] | pbSrc[x * 4 + 1] | pbSrc[x * 4 + 2] | pbSrc[x * 4 + 3]) >= 0xfc)
+ bDst |= fBit;
+ fBit >>= 1;
+ x++;
+ } while (x < cx && (x & 7));
+ pbDst[(x - 1) / 8] = bDst;
+ }
+ pbDst += cbDstAndLine;
+ pbSrc += cbSrcAndLine;
+ }
+ break;
+ default:
+ RTMemFreeZ(pbCopy, cbCopy);
+ AssertFailedReturnVoid();
+ }
+
+ /* Convert the XOR mask. */
+ uint32_t *pu32Dst = (uint32_t *)(pbCopy + RT_ALIGN_32(cbDstAndMask, 4));
+ pbSrc = pbSrcXorMask;
+ switch (pCmd->xorMaskDepth)
+ {
+ case 1:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; )
+ {
+ /* most significant bit is the left most one. */
+ uint8_t bSrc = pbSrc[x / 8];
+ do
+ {
+ *pu32Dst++ = bSrc & 0x80 ? UINT32_C(0x00ffffff) : 0;
+ bSrc <<= 1;
+ x++;
+ } while ((x & 7) && x < cx);
+ }
+ pbSrc += cbSrcXorLine;
+ }
+ break;
+ case 8:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; x++)
+ {
+ uint32_t u = pThis->last_palette[pbSrc[x]];
+ *pu32Dst++ = u;//RT_MAKE_U32_FROM_U8(RT_BYTE1(u), RT_BYTE2(u), RT_BYTE3(u), 0);
+ }
+ pbSrc += cbSrcXorLine;
+ }
+ break;
+ case 15: /* Src: RGB-5-5-5 */
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; x++)
+ {
+ uint32_t const uValue = RT_MAKE_U16(pbSrc[x * 2], pbSrc[x * 2 + 1]);
+ *pu32Dst++ = RT_MAKE_U32_FROM_U8(( uValue & 0x1f) << 3,
+ ((uValue >> 5) & 0x1f) << 3,
+ ((uValue >> 10) & 0x1f) << 3, 0);
+ }
+ pbSrc += cbSrcXorLine;
+ }
+ break;
+ case 16: /* Src: RGB-5-6-5 */
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; x++)
+ {
+ uint32_t const uValue = RT_MAKE_U16(pbSrc[x * 2], pbSrc[x * 2 + 1]);
+ *pu32Dst++ = RT_MAKE_U32_FROM_U8(( uValue & 0x1f) << 3,
+ ((uValue >> 5) & 0x3f) << 2,
+ ((uValue >> 11) & 0x1f) << 3, 0);
+ }
+ pbSrc += cbSrcXorLine;
+ }
+ break;
+ case 24:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; x++)
+ *pu32Dst++ = RT_MAKE_U32_FROM_U8(pbSrc[x*3], pbSrc[x*3 + 1], pbSrc[x*3 + 2], 0);
+ pbSrc += cbSrcXorLine;
+ }
+ break;
+ case 32:
+ for (uint32_t y = 0; y < cy; y++)
+ {
+ for (uint32_t x = 0; x < cx; x++)
+ *pu32Dst++ = RT_MAKE_U32_FROM_U8(pbSrc[x*4], pbSrc[x*4 + 1], pbSrc[x*4 + 2], 0);
+ pbSrc += cbSrcXorLine;
+ }
+ break;
+ default:
+ RTMemFreeZ(pbCopy, cbCopy);
+ AssertFailedReturnVoid();
+ }
+
+ /*
+ * Pass it to the frontend/whatever.
+ */
+ vmsvgaR3InstallNewCursor(pThisCC, pSvgaR3State, false /*fAlpha*/, pCmd->hotspotX, pCmd->hotspotY,
+ cx, cy, pbCopy, cbCopy);
+}
+
+
+/* SVGA_CMD_DEFINE_ALPHA_CURSOR */
+void vmsvgaR3CmdDefineAlphaCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineAlphaCursor const *pCmd)
+{
+ RT_NOREF(pThis);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineAlphaCursor);
+ Log(("VMSVGA cmd: SVGA_CMD_DEFINE_ALPHA_CURSOR id=%d size (%dx%d) hotspot (%d,%d)\n", pCmd->id, pCmd->width, pCmd->height, pCmd->hotspotX, pCmd->hotspotY));
+
+ /* Check against a reasonable upper limit to prevent integer overflows in the sanity checks below. */
+ ASSERT_GUEST_RETURN_VOID(pCmd->height < 2048 && pCmd->width < 2048);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* The mouse pointer interface always expects an AND mask followed by the color data (XOR mask). */
+ uint32_t cbAndMask = (pCmd->width + 7) / 8 * pCmd->height; /* size of the AND mask */
+ cbAndMask = ((cbAndMask + 3) & ~3); /* + gap for alignment */
+ uint32_t cbXorMask = pCmd->width * sizeof(uint32_t) * pCmd->height; /* + size of the XOR mask (32-bit BRGA format) */
+ uint32_t cbCursorShape = cbAndMask + cbXorMask;
+
+ uint8_t *pCursorCopy = (uint8_t *)RTMemAlloc(cbCursorShape);
+ AssertPtrReturnVoid(pCursorCopy);
+
+ /* Transparency is defined by the alpha bytes, so make the whole bitmap visible. */
+ memset(pCursorCopy, 0xff, cbAndMask);
+ /* Colour data */
+ memcpy(pCursorCopy + cbAndMask, pCmd + 1, cbXorMask);
+
+ vmsvgaR3InstallNewCursor(pThisCC, pSvgaR3State, true /*fAlpha*/, pCmd->hotspotX, pCmd->hotspotY,
+ pCmd->width, pCmd->height, pCursorCopy, cbCursorShape);
+}
+
+
+/* SVGA_CMD_ESCAPE */
+void vmsvgaR3CmdEscape(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdEscape const *pCmd)
+{
+ RT_NOREF(pThis);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdEscape);
+
+ if (pCmd->nsid == SVGA_ESCAPE_NSID_VMWARE)
+ {
+ ASSERT_GUEST_RETURN_VOID(pCmd->size >= sizeof(uint32_t));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const cmd = *(uint32_t *)(pCmd + 1);
+ Log(("SVGA_CMD_ESCAPE (%#x %#x) VMWARE cmd=%#x\n", pCmd->nsid, pCmd->size, cmd));
+
+ switch (cmd)
+ {
+ case SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS:
+ {
+ SVGAEscapeVideoSetRegs *pVideoCmd = (SVGAEscapeVideoSetRegs *)(pCmd + 1);
+ ASSERT_GUEST_RETURN_VOID(pCmd->size >= sizeof(pVideoCmd->header));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const cRegs = (pCmd->size - sizeof(pVideoCmd->header)) / sizeof(pVideoCmd->items[0]);
+
+ Log(("SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS: stream %#x\n", pVideoCmd->header.streamId));
+ for (uint32_t iReg = 0; iReg < cRegs; iReg++)
+ Log(("SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS: reg %#x val %#x\n", pVideoCmd->items[iReg].registerId, pVideoCmd->items[iReg].value));
+ RT_NOREF_PV(pVideoCmd);
+ break;
+ }
+
+ case SVGA_ESCAPE_VMWARE_VIDEO_FLUSH:
+ {
+ SVGAEscapeVideoFlush *pVideoCmd = (SVGAEscapeVideoFlush *)(pCmd + 1);
+ ASSERT_GUEST_RETURN_VOID(pCmd->size >= sizeof(*pVideoCmd));
+ Log(("SVGA_ESCAPE_VMWARE_VIDEO_FLUSH: stream %#x\n", pVideoCmd->streamId));
+ RT_NOREF_PV(pVideoCmd);
+ break;
+ }
+
+ default:
+ Log(("SVGA_CMD_ESCAPE: Unknown vmware escape: %#x\n", cmd));
+ break;
+ }
+ }
+ else
+ Log(("SVGA_CMD_ESCAPE %#x %#x\n", pCmd->nsid, pCmd->size));
+}
+
+
+/* SVGA_CMD_DEFINE_SCREEN */
+void vmsvgaR3CmdDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineScreen const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineScreen);
+ Log(("SVGA_CMD_DEFINE_SCREEN id=%x flags=%x size=(%d,%d) root=(%d,%d) %d:0x%x 0x%x\n",
+ pCmd->screen.id, pCmd->screen.flags, pCmd->screen.size.width, pCmd->screen.size.height, pCmd->screen.root.x, pCmd->screen.root.y,
+ pCmd->screen.backingStore.ptr.gmrId, pCmd->screen.backingStore.ptr.offset, pCmd->screen.backingStore.pitch));
+
+ uint32_t const idScreen = pCmd->screen.id;
+ ASSERT_GUEST_RETURN_VOID(idScreen < RT_ELEMENTS(pSvgaR3State->aScreens));
+
+ uint32_t const uWidth = pCmd->screen.size.width;
+ ASSERT_GUEST_RETURN_VOID(uWidth <= pThis->svga.u32MaxWidth);
+
+ uint32_t const uHeight = pCmd->screen.size.height;
+ ASSERT_GUEST_RETURN_VOID(uHeight <= pThis->svga.u32MaxHeight);
+
+ uint32_t const cbWidth = uWidth * ((32 + 7) / 8); /** @todo 32? */
+ uint32_t const cbPitch = pCmd->screen.backingStore.pitch ? pCmd->screen.backingStore.pitch : cbWidth;
+ ASSERT_GUEST_RETURN_VOID(cbWidth <= cbPitch);
+
+ uint32_t const uScreenOffset = pCmd->screen.backingStore.ptr.offset;
+ ASSERT_GUEST_RETURN_VOID(uScreenOffset < pThis->vram_size);
+
+ uint32_t const cbVram = pThis->vram_size - uScreenOffset;
+ /* If we have a not zero pitch, then height can't exceed the available VRAM. */
+ ASSERT_GUEST_RETURN_VOID( (uHeight == 0 && cbPitch == 0)
+ || (cbPitch > 0 && uHeight <= cbVram / cbPitch));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[idScreen];
+ pScreen->fDefined = true;
+ pScreen->fModified = true;
+ pScreen->fuScreen = pCmd->screen.flags;
+ pScreen->idScreen = idScreen;
+ if (!RT_BOOL(pCmd->screen.flags & (SVGA_SCREEN_DEACTIVATE | SVGA_SCREEN_BLANKING)))
+ {
+ /* Not blanked. */
+ ASSERT_GUEST_RETURN_VOID(uWidth > 0 && uHeight > 0);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pScreen->xOrigin = pCmd->screen.root.x;
+ pScreen->yOrigin = pCmd->screen.root.y;
+ pScreen->cWidth = uWidth;
+ pScreen->cHeight = uHeight;
+ pScreen->offVRAM = uScreenOffset;
+ pScreen->cbPitch = cbPitch;
+ pScreen->cBpp = 32;
+ }
+ else
+ {
+ /* Screen blanked. Keep old values. */
+ }
+
+ pThis->svga.fGFBRegisters = false;
+ vmsvgaR3ChangeMode(pThis, pThisCC);
+
+#ifdef VBOX_WITH_VMSVGA3D
+ if (RT_LIKELY(pThis->svga.f3DEnabled))
+ vmsvga3dDefineScreen(pThis, pThisCC, pScreen);
+#endif
+}
+
+
+/* SVGA_CMD_DESTROY_SCREEN */
+void vmsvgaR3CmdDestroyScreen(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDestroyScreen const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDestroyScreen);
+ Log(("SVGA_CMD_DESTROY_SCREEN id=%x\n", pCmd->screenId));
+
+ uint32_t const idScreen = pCmd->screenId;
+ ASSERT_GUEST_RETURN_VOID(idScreen < RT_ELEMENTS(pSvgaR3State->aScreens));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[idScreen];
+ pScreen->fModified = true;
+ pScreen->fDefined = false;
+ pScreen->idScreen = idScreen;
+
+#ifdef VBOX_WITH_VMSVGA3D
+ if (RT_LIKELY(pThis->svga.f3DEnabled))
+ vmsvga3dDestroyScreen(pThisCC, pScreen);
+#endif
+ vmsvgaR3ChangeMode(pThis, pThisCC);
+}
+
+
+/* SVGA_CMD_DEFINE_GMRFB */
+void vmsvgaR3CmdDefineGMRFB(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineGMRFB const *pCmd)
+{
+ RT_NOREF(pThis);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineGmrFb);
+ Log(("SVGA_CMD_DEFINE_GMRFB gmr=%x offset=%x bytesPerLine=%x bpp=%d color depth=%d\n",
+ pCmd->ptr.gmrId, pCmd->ptr.offset, pCmd->bytesPerLine, pCmd->format.bitsPerPixel, pCmd->format.colorDepth));
+
+ pSvgaR3State->GMRFB.ptr = pCmd->ptr;
+ pSvgaR3State->GMRFB.bytesPerLine = pCmd->bytesPerLine;
+ pSvgaR3State->GMRFB.format = pCmd->format;
+}
+
+
+/* SVGA_CMD_BLIT_GMRFB_TO_SCREEN */
+void vmsvgaR3CmdBlitGMRFBToScreen(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdBlitGMRFBToScreen const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdBlitGmrFbToScreen);
+ Log(("SVGA_CMD_BLIT_GMRFB_TO_SCREEN src=(%d,%d) dest id=%d (%d,%d)(%d,%d)\n",
+ pCmd->srcOrigin.x, pCmd->srcOrigin.y, pCmd->destScreenId, pCmd->destRect.left, pCmd->destRect.top, pCmd->destRect.right, pCmd->destRect.bottom));
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->destScreenId < RT_ELEMENTS(pSvgaR3State->aScreens));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, pCmd->destScreenId);
+ AssertPtrReturnVoid(pScreen);
+
+ /** @todo Support GMRFB.format.s.bitsPerPixel != pThis->svga.uBpp ? */
+ AssertReturnVoid(pSvgaR3State->GMRFB.format.bitsPerPixel == pScreen->cBpp);
+
+ /* Clip destRect to the screen dimensions. */
+ SVGASignedRect screenRect;
+ screenRect.left = 0;
+ screenRect.top = 0;
+ screenRect.right = pScreen->cWidth;
+ screenRect.bottom = pScreen->cHeight;
+ SVGASignedRect clipRect = pCmd->destRect;
+ vmsvgaR3ClipRect(&screenRect, &clipRect);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const width = clipRect.right - clipRect.left;
+ uint32_t const height = clipRect.bottom - clipRect.top;
+
+ if ( width == 0
+ || height == 0)
+ return; /* Nothing to do. */
+
+ int32_t const srcx = pCmd->srcOrigin.x + (clipRect.left - pCmd->destRect.left);
+ int32_t const srcy = pCmd->srcOrigin.y + (clipRect.top - pCmd->destRect.top);
+
+ /* Copy the defined by GMRFB image to the screen 0 VRAM area.
+ * Prepare parameters for vmsvgaR3GmrTransfer.
+ */
+ AssertReturnVoid(pScreen->offVRAM < pThis->vram_size); /* Paranoia. Ensured by SVGA_CMD_DEFINE_SCREEN. */
+
+ /* Destination: host buffer which describes the screen 0 VRAM.
+ * Important are pbHstBuf and cbHstBuf. offHst and cbHstPitch are verified by vmsvgaR3GmrTransfer.
+ */
+ uint8_t * const pbHstBuf = (uint8_t *)pThisCC->pbVRam + pScreen->offVRAM;
+ uint32_t const cbScanline = pScreen->cbPitch ? pScreen->cbPitch :
+ width * (RT_ALIGN(pScreen->cBpp, 8) / 8);
+ uint32_t cbHstBuf = cbScanline * pScreen->cHeight;
+ if (cbHstBuf > pThis->vram_size - pScreen->offVRAM)
+ cbHstBuf = pThis->vram_size - pScreen->offVRAM; /* Paranoia. */
+ uint32_t const offHst = (clipRect.left * RT_ALIGN(pScreen->cBpp, 8)) / 8
+ + cbScanline * clipRect.top;
+ int32_t const cbHstPitch = cbScanline;
+
+ /* Source: GMRFB. vmsvgaR3GmrTransfer ensures that no memory outside the GMR is read. */
+ SVGAGuestPtr const gstPtr = pSvgaR3State->GMRFB.ptr;
+ uint32_t const offGst = (srcx * RT_ALIGN(pSvgaR3State->GMRFB.format.bitsPerPixel, 8)) / 8
+ + pSvgaR3State->GMRFB.bytesPerLine * srcy;
+ int32_t const cbGstPitch = pSvgaR3State->GMRFB.bytesPerLine;
+
+ int rc = vmsvgaR3GmrTransfer(pThis, pThisCC, SVGA3D_WRITE_HOST_VRAM,
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch,
+ gstPtr, offGst, cbGstPitch,
+ (width * RT_ALIGN(pScreen->cBpp, 8)) / 8, height);
+ AssertRC(rc);
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, clipRect.left, clipRect.top, width, height);
+}
+
+
+/* SVGA_CMD_BLIT_SCREEN_TO_GMRFB */
+void vmsvgaR3CmdBlitScreenToGMRFB(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdBlitScreenToGMRFB const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdBlitScreentoGmrFb);
+ /* Note! This can fetch 3d render results as well!! */
+ Log(("SVGA_CMD_BLIT_SCREEN_TO_GMRFB dest=(%d,%d) src id=%d (%d,%d)(%d,%d)\n",
+ pCmd->destOrigin.x, pCmd->destOrigin.y, pCmd->srcScreenId, pCmd->srcRect.left, pCmd->srcRect.top, pCmd->srcRect.right, pCmd->srcRect.bottom));
+
+ ASSERT_GUEST_RETURN_VOID(pCmd->srcScreenId < RT_ELEMENTS(pSvgaR3State->aScreens));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, pCmd->srcScreenId);
+ AssertPtrReturnVoid(pScreen);
+
+ /** @todo Support GMRFB.format.bitsPerPixel != pThis->svga.uBpp ? */
+ AssertReturnVoid(pSvgaR3State->GMRFB.format.bitsPerPixel == pScreen->cBpp);
+
+ /* Clip destRect to the screen dimensions. */
+ SVGASignedRect screenRect;
+ screenRect.left = 0;
+ screenRect.top = 0;
+ screenRect.right = pScreen->cWidth;
+ screenRect.bottom = pScreen->cHeight;
+ SVGASignedRect clipRect = pCmd->srcRect;
+ vmsvgaR3ClipRect(&screenRect, &clipRect);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const width = clipRect.right - clipRect.left;
+ uint32_t const height = clipRect.bottom - clipRect.top;
+
+ if ( width == 0
+ || height == 0)
+ return; /* Nothing to do. */
+
+ int32_t const dstx = pCmd->destOrigin.x + (clipRect.left - pCmd->srcRect.left);
+ int32_t const dsty = pCmd->destOrigin.y + (clipRect.top - pCmd->srcRect.top);
+
+ /* Copy the defined by GMRFB image to the screen 0 VRAM area.
+ * Prepare parameters for vmsvgaR3GmrTransfer.
+ */
+ AssertReturnVoid(pScreen->offVRAM < pThis->vram_size); /* Paranoia. Ensured by SVGA_CMD_DEFINE_SCREEN. */
+
+ /* Source: host buffer which describes the screen 0 VRAM.
+ * Important are pbHstBuf and cbHstBuf. offHst and cbHstPitch are verified by vmsvgaR3GmrTransfer.
+ */
+ uint8_t * const pbHstBuf = (uint8_t *)pThisCC->pbVRam + pScreen->offVRAM;
+ uint32_t const cbScanline = pScreen->cbPitch ? pScreen->cbPitch :
+ width * (RT_ALIGN(pScreen->cBpp, 8) / 8);
+ uint32_t cbHstBuf = cbScanline * pScreen->cHeight;
+ if (cbHstBuf > pThis->vram_size - pScreen->offVRAM)
+ cbHstBuf = pThis->vram_size - pScreen->offVRAM; /* Paranoia. */
+ uint32_t const offHst = (clipRect.left * RT_ALIGN(pScreen->cBpp, 8)) / 8
+ + cbScanline * clipRect.top;
+ int32_t const cbHstPitch = cbScanline;
+
+ /* Destination: GMRFB. vmsvgaR3GmrTransfer ensures that no memory outside the GMR is read. */
+ SVGAGuestPtr const gstPtr = pSvgaR3State->GMRFB.ptr;
+ uint32_t const offGst = (dstx * RT_ALIGN(pSvgaR3State->GMRFB.format.bitsPerPixel, 8)) / 8
+ + pSvgaR3State->GMRFB.bytesPerLine * dsty;
+ int32_t const cbGstPitch = pSvgaR3State->GMRFB.bytesPerLine;
+
+ int rc = vmsvgaR3GmrTransfer(pThis, pThisCC, SVGA3D_READ_HOST_VRAM,
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch,
+ gstPtr, offGst, cbGstPitch,
+ (width * RT_ALIGN(pScreen->cBpp, 8)) / 8, height);
+ AssertRC(rc);
+}
+
+
+/* SVGA_CMD_ANNOTATION_FILL */
+void vmsvgaR3CmdAnnotationFill(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdAnnotationFill const *pCmd)
+{
+ RT_NOREF(pThis);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdAnnotationFill);
+ Log(("SVGA_CMD_ANNOTATION_FILL red=%x green=%x blue=%x\n", pCmd->color.r, pCmd->color.g, pCmd->color.b));
+
+ pSvgaR3State->colorAnnotation = pCmd->color;
+}
+
+
+/* SVGA_CMD_ANNOTATION_COPY */
+void vmsvgaR3CmdAnnotationCopy(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdAnnotationCopy const *pCmd)
+{
+ RT_NOREF(pThis, pCmd);
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdAnnotationCopy);
+ Log(("SVGA_CMD_ANNOTATION_COPY srcOrigin %d,%d, srcScreenId %u\n", pCmd->srcOrigin.x, pCmd->srcOrigin.y, pCmd->srcScreenId));
+
+ AssertFailed();
+}
+
+
+#ifdef VBOX_WITH_VMSVGA3D
+/* SVGA_CMD_DEFINE_GMR2 */
+void vmsvgaR3CmdDefineGMR2(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineGMR2 const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineGmr2);
+ Log(("SVGA_CMD_DEFINE_GMR2 id=%#x %#x pages\n", pCmd->gmrId, pCmd->numPages));
+
+ /* Validate current GMR id. */
+ ASSERT_GUEST_RETURN_VOID(pCmd->gmrId < pThis->svga.cGMR);
+ ASSERT_GUEST_RETURN_VOID(pCmd->numPages <= VMSVGA_MAX_GMR_PAGES);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ if (!pCmd->numPages)
+ {
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineGmr2Free);
+ vmsvgaR3GmrFree(pThisCC, pCmd->gmrId);
+ }
+ else
+ {
+ PGMR pGMR = &pSvgaR3State->paGMR[pCmd->gmrId];
+ if (pGMR->cMaxPages)
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdDefineGmr2Modify);
+
+ /* Not sure if we should always free the descriptor, but for simplicity
+ we do so if the new size is smaller than the current. */
+ /** @todo always free the descriptor in SVGA_CMD_DEFINE_GMR2? */
+ if (pGMR->cbTotal / X86_PAGE_SIZE > pCmd->numPages)
+ vmsvgaR3GmrFree(pThisCC, pCmd->gmrId);
+
+ pGMR->cMaxPages = pCmd->numPages;
+ /* The rest is done by the REMAP_GMR2 command. */
+ }
+}
+
+
+/* SVGA_CMD_REMAP_GMR2 */
+void vmsvgaR3CmdRemapGMR2(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRemapGMR2 const *pCmd)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdRemapGmr2);
+ Log(("SVGA_CMD_REMAP_GMR2 id=%#x flags=%#x offset=%#x npages=%#x\n", pCmd->gmrId, pCmd->flags, pCmd->offsetPages, pCmd->numPages));
+
+ /* Validate current GMR id and size. */
+ ASSERT_GUEST_RETURN_VOID(pCmd->gmrId < pThis->svga.cGMR);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ PGMR pGMR = &pSvgaR3State->paGMR[pCmd->gmrId];
+ ASSERT_GUEST_RETURN_VOID( (uint64_t)pCmd->offsetPages + pCmd->numPages
+ <= RT_MIN(pGMR->cMaxPages, RT_MIN(VMSVGA_MAX_GMR_PAGES, UINT32_MAX / X86_PAGE_SIZE)));
+ ASSERT_GUEST_RETURN_VOID(!pCmd->offsetPages || pGMR->paDesc); /** @todo */
+
+ if (pCmd->numPages == 0)
+ return;
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Calc new total page count so we can use it instead of cMaxPages for allocations below. */
+ uint32_t const cNewTotalPages = RT_MAX(pGMR->cbTotal >> X86_PAGE_SHIFT, pCmd->offsetPages + pCmd->numPages);
+
+ /*
+ * We flatten the existing descriptors into a page array, overwrite the
+ * pages specified in this command and then recompress the descriptor.
+ */
+ /** @todo Optimize the GMR remap algorithm! */
+
+ /* Save the old page descriptors as an array of page frame numbers (address >> X86_PAGE_SHIFT) */
+ uint64_t *paNewPage64 = NULL;
+ if (pGMR->paDesc)
+ {
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdRemapGmr2Modify);
+
+ paNewPage64 = (uint64_t *)RTMemAllocZ(cNewTotalPages * sizeof(uint64_t));
+ AssertPtrReturnVoid(paNewPage64);
+
+ uint32_t idxPage = 0;
+ for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
+ for (uint32_t j = 0; j < pGMR->paDesc[i].numPages; j++)
+ paNewPage64[idxPage++] = (pGMR->paDesc[i].GCPhys + j * X86_PAGE_SIZE) >> X86_PAGE_SHIFT;
+ AssertReturnVoidStmt(idxPage == pGMR->cbTotal >> X86_PAGE_SHIFT, RTMemFree(paNewPage64));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ }
+
+ /* Free the old GMR if present. */
+ if (pGMR->paDesc)
+ RTMemFree(pGMR->paDesc);
+
+ /* Allocate the maximum amount possible (everything non-continuous) */
+ PVMSVGAGMRDESCRIPTOR paDescs;
+ pGMR->paDesc = paDescs = (PVMSVGAGMRDESCRIPTOR)RTMemAllocZ(cNewTotalPages * sizeof(VMSVGAGMRDESCRIPTOR));
+ AssertReturnVoidStmt(paDescs, RTMemFree(paNewPage64));
+
+ if (pCmd->flags & SVGA_REMAP_GMR2_VIA_GMR)
+ {
+ /** @todo */
+ AssertFailed();
+ pGMR->numDescriptors = 0;
+ }
+ else
+ {
+ uint32_t *paPages32 = (uint32_t *)(pCmd + 1);
+ uint64_t *paPages64 = (uint64_t *)(pCmd + 1);
+ bool fGCPhys64 = RT_BOOL(pCmd->flags & SVGA_REMAP_GMR2_PPN64);
+
+ uint32_t cPages;
+ if (paNewPage64)
+ {
+ /* Overwrite the old page array with the new page values. */
+ if (fGCPhys64)
+ for (uint32_t i = pCmd->offsetPages; i < pCmd->offsetPages + pCmd->numPages; i++)
+ paNewPage64[i] = paPages64[i - pCmd->offsetPages];
+ else
+ for (uint32_t i = pCmd->offsetPages; i < pCmd->offsetPages + pCmd->numPages; i++)
+ paNewPage64[i] = paPages32[i - pCmd->offsetPages];
+
+ /* Use the updated page array instead of the command data. */
+ fGCPhys64 = true;
+ paPages64 = paNewPage64;
+ cPages = cNewTotalPages;
+ }
+ else
+ cPages = pCmd->numPages;
+
+ /* The first page. */
+ /** @todo The 0x00000FFFFFFFFFFF mask limits to 44 bits and should not be
+ * applied to paNewPage64. */
+ RTGCPHYS GCPhys;
+ if (fGCPhys64)
+ GCPhys = (paPages64[0] << X86_PAGE_SHIFT) & UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ else
+ GCPhys = (RTGCPHYS)paPages32[0] << GUEST_PAGE_SHIFT;
+ paDescs[0].GCPhys = GCPhys;
+ paDescs[0].numPages = 1;
+
+ /* Subsequent pages. */
+ uint32_t iDescriptor = 0;
+ for (uint32_t i = 1; i < cPages; i++)
+ {
+ if (pCmd->flags & SVGA_REMAP_GMR2_PPN64)
+ GCPhys = (paPages64[i] << X86_PAGE_SHIFT) & UINT64_C(0x00000FFFFFFFFFFF); /* Seeing rubbish in the top bits with certain linux guests. */
+ else
+ GCPhys = (RTGCPHYS)paPages32[i] << X86_PAGE_SHIFT;
+
+ /* Continuous physical memory? */
+ if (GCPhys == paDescs[iDescriptor].GCPhys + paDescs[iDescriptor].numPages * X86_PAGE_SIZE)
+ {
+ Assert(paDescs[iDescriptor].numPages);
+ paDescs[iDescriptor].numPages++;
+ Log5Func(("Page %x GCPhys=%RGp successor\n", i, GCPhys));
+ }
+ else
+ {
+ iDescriptor++;
+ paDescs[iDescriptor].GCPhys = GCPhys;
+ paDescs[iDescriptor].numPages = 1;
+ Log5Func(("Page %x GCPhys=%RGp\n", i, paDescs[iDescriptor].GCPhys));
+ }
+ }
+
+ pGMR->cbTotal = cNewTotalPages << X86_PAGE_SHIFT;
+ Log5Func(("Nr of descriptors %x; cbTotal=%#x\n", iDescriptor + 1, cNewTotalPages));
+ pGMR->numDescriptors = iDescriptor + 1;
+ }
+
+ if (paNewPage64)
+ RTMemFree(paNewPage64);
+}
+
+
+/**
+ * Free the specified GMR
+ *
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param idGMR GMR id
+ */
+void vmsvgaR3GmrFree(PVGASTATECC pThisCC, uint32_t idGMR)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ /* Free the old descriptor if present. */
+ PGMR pGMR = &pSVGAState->paGMR[idGMR];
+ if ( pGMR->numDescriptors
+ || pGMR->paDesc /* needed till we implement SVGA_REMAP_GMR2_VIA_GMR */)
+ {
+# ifdef DEBUG_GMR_ACCESS
+ VMR3ReqCallWaitU(PDMDevHlpGetUVM(pThisCC->pDevIns), VMCPUID_ANY, (PFNRT)vmsvgaR3DeregisterGmr, 2, pDevIns, idGMR);
+# endif
+
+ Assert(pGMR->paDesc);
+ RTMemFree(pGMR->paDesc);
+ pGMR->paDesc = NULL;
+ pGMR->numDescriptors = 0;
+ pGMR->cbTotal = 0;
+ pGMR->cMaxPages = 0;
+ }
+ Assert(!pGMR->cMaxPages);
+ Assert(!pGMR->cbTotal);
+}
+#endif /* VBOX_WITH_VMSVGA3D */
+
+
+/**
+ * Copy between a GMR and a host memory buffer.
+ *
+ * @returns VBox status code.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param enmTransferType Transfer type (read/write)
+ * @param pbHstBuf Host buffer pointer (valid)
+ * @param cbHstBuf Size of host buffer (valid)
+ * @param offHst Host buffer offset of the first scanline
+ * @param cbHstPitch Destination buffer pitch
+ * @param gstPtr GMR description
+ * @param offGst Guest buffer offset of the first scanline
+ * @param cbGstPitch Guest buffer pitch
+ * @param cbWidth Width in bytes to copy
+ * @param cHeight Number of scanllines to copy
+ */
+int vmsvgaR3GmrTransfer(PVGASTATE pThis, PVGASTATECC pThisCC, const SVGA3dTransferType enmTransferType,
+ uint8_t *pbHstBuf, uint32_t cbHstBuf, uint32_t offHst, int32_t cbHstPitch,
+ SVGAGuestPtr gstPtr, uint32_t offGst, int32_t cbGstPitch,
+ uint32_t cbWidth, uint32_t cHeight)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ PPDMDEVINS pDevIns = pThisCC->pDevIns; /* simpler */
+ int rc;
+
+ LogFunc(("%s host %p size=%d offset %d pitch=%d; guest gmr=%#x:%#x offset=%d pitch=%d cbWidth=%d cHeight=%d\n",
+ enmTransferType == SVGA3D_READ_HOST_VRAM ? "WRITE" : "READ", /* GMR op: READ host VRAM means WRITE GMR */
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch,
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cbWidth, cHeight));
+ AssertReturn(cbWidth && cHeight, VERR_INVALID_PARAMETER);
+
+ PGMR pGMR;
+ uint32_t cbGmr; /* The GMR size in bytes. */
+ if (gstPtr.gmrId == SVGA_GMR_FRAMEBUFFER)
+ {
+ pGMR = NULL;
+ cbGmr = pThis->vram_size;
+ }
+ else
+ {
+ AssertReturn(gstPtr.gmrId < pThis->svga.cGMR, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ pGMR = &pSVGAState->paGMR[gstPtr.gmrId];
+ cbGmr = pGMR->cbTotal;
+ }
+
+ /*
+ * GMR
+ */
+ /* Calculate GMR offset of the data to be copied. */
+ AssertMsgReturn(gstPtr.offset < cbGmr,
+ ("gmr=%#x:%#x offGst=%#x cbGstPitch=%#x cHeight=%#x cbWidth=%#x cbGmr=%#x\n",
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cHeight, cbWidth, cbGmr),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ AssertMsgReturn(offGst < cbGmr - gstPtr.offset,
+ ("gmr=%#x:%#x offGst=%#x cbGstPitch=%#x cHeight=%#x cbWidth=%#x cbGmr=%#x\n",
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cHeight, cbWidth, cbGmr),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ uint32_t const offGmr = offGst + gstPtr.offset; /* Offset in the GMR, where the first scanline is located. */
+
+ /* Verify that cbWidth is less than scanline and fits into the GMR. */
+ uint32_t const cbGmrScanline = cbGstPitch > 0 ? cbGstPitch : -cbGstPitch;
+ AssertMsgReturn(cbGmrScanline != 0,
+ ("gmr=%#x:%#x offGst=%#x cbGstPitch=%#x cHeight=%#x cbWidth=%#x cbGmr=%#x\n",
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cHeight, cbWidth, cbGmr),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ AssertMsgReturn(cbWidth <= cbGmrScanline,
+ ("gmr=%#x:%#x offGst=%#x cbGstPitch=%#x cHeight=%#x cbWidth=%#x cbGmr=%#x\n",
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cHeight, cbWidth, cbGmr),
+ VERR_INVALID_PARAMETER);
+ AssertMsgReturn(cbWidth <= cbGmr - offGmr,
+ ("gmr=%#x:%#x offGst=%#x cbGstPitch=%#x cHeight=%#x cbWidth=%#x cbGmr=%#x\n",
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cHeight, cbWidth, cbGmr),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* How many bytes are available for the data in the GMR. */
+ uint32_t const cbGmrLeft = cbGstPitch > 0 ? cbGmr - offGmr : offGmr + cbWidth;
+
+ /* How many scanlines would fit into the available data. */
+ uint32_t cGmrScanlines = cbGmrLeft / cbGmrScanline;
+ uint32_t const cbGmrLastScanline = cbGmrLeft - cGmrScanlines * cbGmrScanline; /* Slack space. */
+ if (cbWidth <= cbGmrLastScanline)
+ ++cGmrScanlines;
+
+ if (cHeight > cGmrScanlines)
+ cHeight = cGmrScanlines;
+
+ AssertMsgReturn(cHeight > 0,
+ ("gmr=%#x:%#x offGst=%#x cbGstPitch=%#x cHeight=%#x cbWidth=%#x cbGmr=%#x\n",
+ gstPtr.gmrId, gstPtr.offset, offGst, cbGstPitch, cHeight, cbWidth, cbGmr),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Host buffer.
+ */
+ AssertMsgReturn(offHst < cbHstBuf,
+ ("buffer=%p size %d offHst=%d cbHstPitch=%d cHeight=%d cbWidth=%d\n",
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch, cHeight, cbWidth),
+ VERR_INVALID_PARAMETER);
+
+ /* Verify that cbWidth is less than scanline and fits into the buffer. */
+ uint32_t const cbHstScanline = cbHstPitch > 0 ? cbHstPitch : -cbHstPitch;
+ AssertMsgReturn(cbHstScanline != 0,
+ ("buffer=%p size %d offHst=%d cbHstPitch=%d cHeight=%d cbWidth=%d\n",
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch, cHeight, cbWidth),
+ VERR_INVALID_PARAMETER);
+ AssertMsgReturn(cbWidth <= cbHstScanline,
+ ("buffer=%p size %d offHst=%d cbHstPitch=%d cHeight=%d cbWidth=%d\n",
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch, cHeight, cbWidth),
+ VERR_INVALID_PARAMETER);
+ AssertMsgReturn(cbWidth <= cbHstBuf - offHst,
+ ("buffer=%p size %d offHst=%d cbHstPitch=%d cHeight=%d cbWidth=%d\n",
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch, cHeight, cbWidth),
+ VERR_INVALID_PARAMETER);
+
+ /* How many bytes are available for the data in the buffer. */
+ uint32_t const cbHstLeft = cbHstPitch > 0 ? cbHstBuf - offHst : offHst + cbWidth;
+
+ /* How many scanlines would fit into the available data. */
+ uint32_t cHstScanlines = cbHstLeft / cbHstScanline;
+ uint32_t const cbHstLastScanline = cbHstLeft - cHstScanlines * cbHstScanline; /* Slack space. */
+ if (cbWidth <= cbHstLastScanline)
+ ++cHstScanlines;
+
+ if (cHeight > cHstScanlines)
+ cHeight = cHstScanlines;
+
+ AssertMsgReturn(cHeight > 0,
+ ("buffer=%p size %d offHst=%d cbHstPitch=%d cHeight=%d cbWidth=%d\n",
+ pbHstBuf, cbHstBuf, offHst, cbHstPitch, cHeight, cbWidth),
+ VERR_INVALID_PARAMETER);
+
+ uint8_t *pbHst = pbHstBuf + offHst;
+
+ /* Shortcut for the framebuffer. */
+ if (gstPtr.gmrId == SVGA_GMR_FRAMEBUFFER)
+ {
+ uint8_t *pbGst = pThisCC->pbVRam + offGmr;
+
+ uint8_t const *pbSrc;
+ int32_t cbSrcPitch;
+ uint8_t *pbDst;
+ int32_t cbDstPitch;
+
+ if (enmTransferType == SVGA3D_READ_HOST_VRAM)
+ {
+ pbSrc = pbHst;
+ cbSrcPitch = cbHstPitch;
+ pbDst = pbGst;
+ cbDstPitch = cbGstPitch;
+ }
+ else
+ {
+ pbSrc = pbGst;
+ cbSrcPitch = cbGstPitch;
+ pbDst = pbHst;
+ cbDstPitch = cbHstPitch;
+ }
+
+ if ( cbWidth == (uint32_t)cbGstPitch
+ && cbGstPitch == cbHstPitch)
+ {
+ /* Entire scanlines, positive pitch. */
+ memcpy(pbDst, pbSrc, cbWidth * cHeight);
+ }
+ else
+ {
+ for (uint32_t i = 0; i < cHeight; ++i)
+ {
+ memcpy(pbDst, pbSrc, cbWidth);
+
+ pbDst += cbDstPitch;
+ pbSrc += cbSrcPitch;
+ }
+ }
+ return VINF_SUCCESS;
+ }
+
+ AssertPtrReturn(pGMR, VERR_INVALID_PARAMETER);
+ AssertReturn(pGMR->numDescriptors > 0, VERR_INVALID_PARAMETER);
+
+ PVMSVGAGMRDESCRIPTOR const paDesc = pGMR->paDesc; /* Local copy of the pointer. */
+ uint32_t iDesc = 0; /* Index in the descriptor array. */
+ uint32_t offDesc = 0; /* GMR offset of the current descriptor. */
+ uint32_t offGmrScanline = offGmr; /* GMR offset of the scanline which is being copied. */
+ uint8_t *pbHstScanline = pbHst; /* Host address of the scanline which is being copied. */
+ for (uint32_t i = 0; i < cHeight; ++i)
+ {
+ uint32_t cbCurrentWidth = cbWidth;
+ uint32_t offGmrCurrent = offGmrScanline;
+ uint8_t *pbCurrentHost = pbHstScanline;
+
+ /* Find the right descriptor */
+ while (offDesc + paDesc[iDesc].numPages * GUEST_PAGE_SIZE <= offGmrCurrent)
+ {
+ offDesc += paDesc[iDesc].numPages * GUEST_PAGE_SIZE;
+ AssertReturn(offDesc < pGMR->cbTotal, VERR_INTERNAL_ERROR); /* overflow protection */
+ ++iDesc;
+ AssertReturn(iDesc < pGMR->numDescriptors, VERR_INTERNAL_ERROR);
+ }
+
+ while (cbCurrentWidth)
+ {
+ uint32_t cbToCopy;
+
+ if (offGmrCurrent + cbCurrentWidth <= offDesc + paDesc[iDesc].numPages * GUEST_PAGE_SIZE)
+ cbToCopy = cbCurrentWidth;
+ else
+ {
+ cbToCopy = (offDesc + paDesc[iDesc].numPages * GUEST_PAGE_SIZE - offGmrCurrent);
+ AssertReturn(cbToCopy <= cbCurrentWidth, VERR_INVALID_PARAMETER);
+ }
+
+ RTGCPHYS const GCPhys = paDesc[iDesc].GCPhys + offGmrCurrent - offDesc;
+
+ Log5Func(("%s phys=%RGp\n", (enmTransferType == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", GCPhys));
+
+ /*
+ * We are deliberately using the non-PCI version of PDMDevHlpPCIPhys[Read|Write] as the
+ * guest-side VMSVGA driver seems to allocate non-DMA (physical memory) addresses,
+ * see @bugref{9654#c75}.
+ */
+ if (enmTransferType == SVGA3D_WRITE_HOST_VRAM)
+ rc = PDMDevHlpPhysRead(pDevIns, GCPhys, pbCurrentHost, cbToCopy);
+ else
+ rc = PDMDevHlpPhysWrite(pDevIns, GCPhys, pbCurrentHost, cbToCopy);
+ AssertRCBreak(rc);
+
+ cbCurrentWidth -= cbToCopy;
+ offGmrCurrent += cbToCopy;
+ pbCurrentHost += cbToCopy;
+
+ /* Go to the next descriptor if there's anything left. */
+ if (cbCurrentWidth)
+ {
+ offDesc += paDesc[iDesc].numPages * GUEST_PAGE_SIZE;
+ AssertReturn(offDesc < pGMR->cbTotal, VERR_INTERNAL_ERROR);
+ ++iDesc;
+ AssertReturn(iDesc < pGMR->numDescriptors, VERR_INTERNAL_ERROR);
+ }
+ }
+
+ offGmrScanline += cbGstPitch;
+ pbHstScanline += cbHstPitch;
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Unsigned coordinates in pBox. Clip to [0; pSizeSrc), [0; pSizeDest).
+ *
+ * @param pSizeSrc Source surface dimensions.
+ * @param pSizeDest Destination surface dimensions.
+ * @param pBox Coordinates to be clipped.
+ */
+void vmsvgaR3ClipCopyBox(const SVGA3dSize *pSizeSrc, const SVGA3dSize *pSizeDest, SVGA3dCopyBox *pBox)
+{
+ /* Src x, w */
+ if (pBox->srcx > pSizeSrc->width)
+ pBox->srcx = pSizeSrc->width;
+ if (pBox->w > pSizeSrc->width - pBox->srcx)
+ pBox->w = pSizeSrc->width - pBox->srcx;
+
+ /* Src y, h */
+ if (pBox->srcy > pSizeSrc->height)
+ pBox->srcy = pSizeSrc->height;
+ if (pBox->h > pSizeSrc->height - pBox->srcy)
+ pBox->h = pSizeSrc->height - pBox->srcy;
+
+ /* Src z, d */
+ if (pBox->srcz > pSizeSrc->depth)
+ pBox->srcz = pSizeSrc->depth;
+ if (pBox->d > pSizeSrc->depth - pBox->srcz)
+ pBox->d = pSizeSrc->depth - pBox->srcz;
+
+ /* Dest x, w */
+ if (pBox->x > pSizeDest->width)
+ pBox->x = pSizeDest->width;
+ if (pBox->w > pSizeDest->width - pBox->x)
+ pBox->w = pSizeDest->width - pBox->x;
+
+ /* Dest y, h */
+ if (pBox->y > pSizeDest->height)
+ pBox->y = pSizeDest->height;
+ if (pBox->h > pSizeDest->height - pBox->y)
+ pBox->h = pSizeDest->height - pBox->y;
+
+ /* Dest z, d */
+ if (pBox->z > pSizeDest->depth)
+ pBox->z = pSizeDest->depth;
+ if (pBox->d > pSizeDest->depth - pBox->z)
+ pBox->d = pSizeDest->depth - pBox->z;
+}
+
+
+/**
+ * Unsigned coordinates in pBox. Clip to [0; pSize).
+ *
+ * @param pSize Source surface dimensions.
+ * @param pBox Coordinates to be clipped.
+ */
+void vmsvgaR3ClipBox(const SVGA3dSize *pSize, SVGA3dBox *pBox)
+{
+ /* x, w */
+ if (pBox->x > pSize->width)
+ pBox->x = pSize->width;
+ if (pBox->w > pSize->width - pBox->x)
+ pBox->w = pSize->width - pBox->x;
+
+ /* y, h */
+ if (pBox->y > pSize->height)
+ pBox->y = pSize->height;
+ if (pBox->h > pSize->height - pBox->y)
+ pBox->h = pSize->height - pBox->y;
+
+ /* z, d */
+ if (pBox->z > pSize->depth)
+ pBox->z = pSize->depth;
+ if (pBox->d > pSize->depth - pBox->z)
+ pBox->d = pSize->depth - pBox->z;
+}
+
+
+/**
+ * Clip.
+ *
+ * @param pBound Bounding rectangle.
+ * @param pRect Rectangle to be clipped.
+ */
+void vmsvgaR3ClipRect(SVGASignedRect const *pBound, SVGASignedRect *pRect)
+{
+ int32_t left;
+ int32_t top;
+ int32_t right;
+ int32_t bottom;
+
+ /* Right order. */
+ Assert(pBound->left <= pBound->right && pBound->top <= pBound->bottom);
+ if (pRect->left < pRect->right)
+ {
+ left = pRect->left;
+ right = pRect->right;
+ }
+ else
+ {
+ left = pRect->right;
+ right = pRect->left;
+ }
+ if (pRect->top < pRect->bottom)
+ {
+ top = pRect->top;
+ bottom = pRect->bottom;
+ }
+ else
+ {
+ top = pRect->bottom;
+ bottom = pRect->top;
+ }
+
+ if (left < pBound->left)
+ left = pBound->left;
+ if (right < pBound->left)
+ right = pBound->left;
+
+ if (left > pBound->right)
+ left = pBound->right;
+ if (right > pBound->right)
+ right = pBound->right;
+
+ if (top < pBound->top)
+ top = pBound->top;
+ if (bottom < pBound->top)
+ bottom = pBound->top;
+
+ if (top > pBound->bottom)
+ top = pBound->bottom;
+ if (bottom > pBound->bottom)
+ bottom = pBound->bottom;
+
+ pRect->left = left;
+ pRect->right = right;
+ pRect->top = top;
+ pRect->bottom = bottom;
+}
+
+
+/**
+ * Clip.
+ *
+ * @param pBound Bounding rectangle.
+ * @param pRect Rectangle to be clipped.
+ */
+void vmsvgaR3Clip3dRect(SVGA3dRect const *pBound, SVGA3dRect RT_UNTRUSTED_GUEST *pRect)
+{
+ uint32_t const leftBound = pBound->x;
+ uint32_t const rightBound = pBound->x + pBound->w;
+ uint32_t const topBound = pBound->y;
+ uint32_t const bottomBound = pBound->y + pBound->h;
+
+ uint32_t x = pRect->x;
+ uint32_t y = pRect->y;
+ uint32_t w = pRect->w;
+ uint32_t h = pRect->h;
+
+ /* Make sure that right and bottom coordinates can be safely computed. */
+ if (x > rightBound)
+ x = rightBound;
+ if (w > rightBound - x)
+ w = rightBound - x;
+ if (y > bottomBound)
+ y = bottomBound;
+ if (h > bottomBound - y)
+ h = bottomBound - y;
+
+ /* Switch from x, y, w, h to left, top, right, bottom. */
+ uint32_t left = x;
+ uint32_t right = x + w;
+ uint32_t top = y;
+ uint32_t bottom = y + h;
+
+ /* A standard left, right, bottom, top clipping. */
+ if (left < leftBound)
+ left = leftBound;
+ if (right < leftBound)
+ right = leftBound;
+
+ if (left > rightBound)
+ left = rightBound;
+ if (right > rightBound)
+ right = rightBound;
+
+ if (top < topBound)
+ top = topBound;
+ if (bottom < topBound)
+ bottom = topBound;
+
+ if (top > bottomBound)
+ top = bottomBound;
+ if (bottom > bottomBound)
+ bottom = bottomBound;
+
+ /* Back to x, y, w, h representation. */
+ pRect->x = left;
+ pRect->y = top;
+ pRect->w = right - left;
+ pRect->h = bottom - top;
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA-internal.h b/src/VBox/Devices/Graphics/DevVGA-SVGA-internal.h
new file mode 100644
index 00000000..fe834833
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA-internal.h
@@ -0,0 +1,301 @@
+/* $Id: DevVGA-SVGA-internal.h $ */
+/** @file
+ * VMWare SVGA device - internal header for DevVGA-SVGA* source files.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA_internal_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA_internal_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/*
+ * Assert sane compilation environment.
+ */
+#ifndef IN_RING3
+# error "DevVGA-SVGA-internal.h is only for ring-3 code"
+#endif
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+/**
+ * 64-bit GMR descriptor.
+ */
+typedef struct
+{
+ RTGCPHYS GCPhys;
+ uint64_t numPages;
+} VMSVGAGMRDESCRIPTOR, *PVMSVGAGMRDESCRIPTOR;
+
+/**
+ * GMR slot
+ */
+typedef struct
+{
+ uint32_t cMaxPages;
+ uint32_t cbTotal;
+ uint32_t numDescriptors;
+ PVMSVGAGMRDESCRIPTOR paDesc;
+} GMR, *PGMR;
+
+
+typedef struct VMSVGACMDBUF *PVMSVGACMDBUF;
+typedef struct VMSVGACMDBUFCTX *PVMSVGACMDBUFCTX;
+
+/* Command buffer. */
+typedef struct VMSVGACMDBUF
+{
+ RTLISTNODE nodeBuffer;
+ /* Context of the buffer. */
+ PVMSVGACMDBUFCTX pCmdBufCtx;
+ /* PA of the buffer. */
+ RTGCPHYS GCPhysCB;
+ /* A copy of the buffer header. */
+ SVGACBHeader hdr;
+ /* A copy of the commands. Size of the memory buffer is hdr.length */
+ void *pvCommands;
+} VMSVGACMDBUF;
+
+/* Command buffer context. */
+typedef struct VMSVGACMDBUFCTX
+{
+ /* Buffers submitted to processing for the FIFO thread. */
+ RTLISTANCHOR listSubmitted;
+ /* How many buffers in the queue. */
+ uint32_t cSubmitted;
+} VMSVGACMDBUFCTX;
+
+/**
+ * Internal SVGA ring-3 only state.
+ */
+typedef struct VMSVGAR3STATE
+{
+ PPDMDEVINS pDevIns; /* Stored here to use with PDMDevHlp* */
+ GMR *paGMR; // [VMSVGAState::cGMR]
+ struct
+ {
+ SVGAGuestPtr RT_UNTRUSTED_GUEST ptr;
+ uint32_t RT_UNTRUSTED_GUEST bytesPerLine;
+ SVGAGMRImageFormat RT_UNTRUSTED_GUEST format;
+ } GMRFB;
+ struct
+ {
+ bool fActive;
+ uint32_t xHotspot;
+ uint32_t yHotspot;
+ uint32_t width;
+ uint32_t height;
+ uint32_t cbData;
+ void *pData;
+ } Cursor;
+ SVGAColorBGRX colorAnnotation;
+
+# ifdef VMSVGA_USE_EMT_HALT_CODE
+ /** Number of EMTs in BusyDelayedEmts (quicker than scanning the set). */
+ uint32_t volatile cBusyDelayedEmts;
+ /** Set of EMTs that are */
+ VMCPUSET BusyDelayedEmts;
+# else
+ /** Number of EMTs waiting on hBusyDelayedEmts. */
+ uint32_t volatile cBusyDelayedEmts;
+ /** Semaphore that EMTs wait on when reading SVGA_REG_BUSY and the FIFO is
+ * busy (ugly). */
+ RTSEMEVENTMULTI hBusyDelayedEmts;
+# endif
+
+ /** Information about screens. */
+ VMSVGASCREENOBJECT aScreens[64];
+
+ /** Command buffer contexts. */
+ PVMSVGACMDBUFCTX apCmdBufCtxs[SVGA_CB_CONTEXT_MAX];
+ /** The special Device Context for synchronous commands. */
+ VMSVGACMDBUFCTX CmdBufCtxDC;
+ /** Flag which indicates that there are buffers to be processed. */
+ uint32_t volatile fCmdBuf;
+ /** Critical section for accessing the command buffer data. */
+ RTCRITSECT CritSectCmdBuf;
+
+ /** Object Tables: MOBs, etc. see SVGA_OTABLE_* */
+ VMSVGAGBO aGboOTables[SVGA_OTABLE_MAX];
+
+ /** Tree of guest's Memory OBjects. Key is mobid. */
+ AVLU32TREE MOBTree;
+ /** Least Recently Used list of MOBs.
+ * To unmap older MOBs when the guest exceeds SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB (SVGA_REG_GBOBJECT_MEM_SIZE_KB) value. */
+ RTLISTANCHOR MOBLRUList;
+
+# ifdef VBOX_WITH_VMSVGA3D
+# ifdef VMSVGA3D_DX
+ /** DX context of the currently processed command buffer */
+ uint32_t idDXContextCurrent;
+ uint32_t u32Reserved;
+# endif
+ VMSVGA3DBACKENDFUNCS3D *pFuncs3D;
+ VMSVGA3DBACKENDFUNCSVGPU9 *pFuncsVGPU9;
+ VMSVGA3DBACKENDFUNCSMAP *pFuncsMap;
+ VMSVGA3DBACKENDFUNCSGBO *pFuncsGBO;
+ VMSVGA3DBACKENDFUNCSDX *pFuncsDX;
+# endif
+
+ /** Tracks how much time we waste reading SVGA_REG_BUSY with a busy FIFO. */
+ STAMPROFILE StatBusyDelayEmts;
+
+ STAMPROFILE StatR3Cmd3dPresentProf;
+ STAMPROFILE StatR3Cmd3dDrawPrimitivesProf;
+ STAMPROFILE StatR3Cmd3dSurfaceDmaProf;
+ STAMPROFILE StatR3Cmd3dBlitSurfaceToScreenProf;
+ STAMCOUNTER StatR3CmdDefineGmr2;
+ STAMCOUNTER StatR3CmdDefineGmr2Free;
+ STAMCOUNTER StatR3CmdDefineGmr2Modify;
+ STAMCOUNTER StatR3CmdRemapGmr2;
+ STAMCOUNTER StatR3CmdRemapGmr2Modify;
+ STAMCOUNTER StatR3CmdInvalidCmd;
+ STAMCOUNTER StatR3CmdFence;
+ STAMCOUNTER StatR3CmdUpdate;
+ STAMCOUNTER StatR3CmdUpdateVerbose;
+ STAMCOUNTER StatR3CmdDefineCursor;
+ STAMCOUNTER StatR3CmdDefineAlphaCursor;
+ STAMCOUNTER StatR3CmdMoveCursor;
+ STAMCOUNTER StatR3CmdDisplayCursor;
+ STAMCOUNTER StatR3CmdRectFill;
+ STAMCOUNTER StatR3CmdRectCopy;
+ STAMCOUNTER StatR3CmdRectRopCopy;
+ STAMCOUNTER StatR3CmdEscape;
+ STAMCOUNTER StatR3CmdDefineScreen;
+ STAMCOUNTER StatR3CmdDestroyScreen;
+ STAMCOUNTER StatR3CmdDefineGmrFb;
+ STAMCOUNTER StatR3CmdBlitGmrFbToScreen;
+ STAMCOUNTER StatR3CmdBlitScreentoGmrFb;
+ STAMCOUNTER StatR3CmdAnnotationFill;
+ STAMCOUNTER StatR3CmdAnnotationCopy;
+ STAMCOUNTER StatR3Cmd3dSurfaceDefine;
+ STAMCOUNTER StatR3Cmd3dSurfaceDefineV2;
+ STAMCOUNTER StatR3Cmd3dSurfaceDestroy;
+ STAMCOUNTER StatR3Cmd3dSurfaceCopy;
+ STAMCOUNTER StatR3Cmd3dSurfaceStretchBlt;
+ STAMCOUNTER StatR3Cmd3dSurfaceDma;
+ STAMCOUNTER StatR3Cmd3dSurfaceScreen;
+ STAMCOUNTER StatR3Cmd3dContextDefine;
+ STAMCOUNTER StatR3Cmd3dContextDestroy;
+ STAMCOUNTER StatR3Cmd3dSetTransform;
+ STAMCOUNTER StatR3Cmd3dSetZRange;
+ STAMCOUNTER StatR3Cmd3dSetRenderState;
+ STAMCOUNTER StatR3Cmd3dSetRenderTarget;
+ STAMCOUNTER StatR3Cmd3dSetTextureState;
+ STAMCOUNTER StatR3Cmd3dSetMaterial;
+ STAMCOUNTER StatR3Cmd3dSetLightData;
+ STAMCOUNTER StatR3Cmd3dSetLightEnable;
+ STAMCOUNTER StatR3Cmd3dSetViewPort;
+ STAMCOUNTER StatR3Cmd3dSetClipPlane;
+ STAMCOUNTER StatR3Cmd3dClear;
+ STAMCOUNTER StatR3Cmd3dPresent;
+ STAMCOUNTER StatR3Cmd3dPresentReadBack;
+ STAMCOUNTER StatR3Cmd3dShaderDefine;
+ STAMCOUNTER StatR3Cmd3dShaderDestroy;
+ STAMCOUNTER StatR3Cmd3dSetShader;
+ STAMCOUNTER StatR3Cmd3dSetShaderConst;
+ STAMCOUNTER StatR3Cmd3dDrawPrimitives;
+ STAMCOUNTER StatR3Cmd3dSetScissorRect;
+ STAMCOUNTER StatR3Cmd3dBeginQuery;
+ STAMCOUNTER StatR3Cmd3dEndQuery;
+ STAMCOUNTER StatR3Cmd3dWaitForQuery;
+ STAMCOUNTER StatR3Cmd3dGenerateMipmaps;
+ STAMCOUNTER StatR3Cmd3dActivateSurface;
+ STAMCOUNTER StatR3Cmd3dDeactivateSurface;
+
+ STAMCOUNTER StatR3RegConfigDoneWr;
+ STAMCOUNTER StatR3RegGmrDescriptorWr;
+ STAMCOUNTER StatR3RegGmrDescriptorWrErrors;
+ STAMCOUNTER StatR3RegGmrDescriptorWrFree;
+
+ STAMCOUNTER StatFifoCommands;
+ STAMCOUNTER StatFifoErrors;
+ STAMCOUNTER StatFifoUnkCmds;
+ STAMCOUNTER StatFifoTodoTimeout;
+ STAMCOUNTER StatFifoTodoWoken;
+ STAMPROFILE StatFifoStalls;
+ STAMPROFILE StatFifoExtendedSleep;
+# ifdef VMSVGA_USE_FIFO_ACCESS_HANDLER
+ STAMCOUNTER StatFifoAccessHandler;
+# endif
+ STAMCOUNTER StatFifoCursorFetchAgain;
+ STAMCOUNTER StatFifoCursorNoChange;
+ STAMCOUNTER StatFifoCursorPosition;
+ STAMCOUNTER StatFifoCursorVisiblity;
+ STAMCOUNTER StatFifoWatchdogWakeUps;
+} VMSVGAR3STATE, *PVMSVGAR3STATE;
+
+
+/*********************************************************************************************************************************
+* Functions *
+*********************************************************************************************************************************/
+#ifdef DEBUG_GMR_ACCESS
+DECLCALLBACK(int) vmsvgaR3ResetGmrHandlers(PVGASTATE pThis);
+DECLCALLBACK(int) vmsvgaR3DeregisterGmr(PPDMDEVINS pDevIns, uint32_t gmrId);
+#endif
+
+void vmsvgaR3ResetScreens(PVGASTATE pThis, PVGASTATECC pThisCC);
+
+int vmsvgaR3ChangeMode(PVGASTATE pThis, PVGASTATECC pThisCC);
+int vmsvgaR3UpdateScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, int x, int y, int w, int h);
+
+int vmsvgaR3GmrTransfer(PVGASTATE pThis, PVGASTATECC pThisCC, const SVGA3dTransferType enmTransferType,
+ uint8_t *pbHstBuf, uint32_t cbHstBuf, uint32_t offHst, int32_t cbHstPitch,
+ SVGAGuestPtr gstPtr, uint32_t offGst, int32_t cbGstPitch,
+ uint32_t cbWidth, uint32_t cHeight);
+void vmsvgaR3GmrFree(PVGASTATECC pThisCC, uint32_t idGMR);
+
+void vmsvgaR3CmdUpdate(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdUpdate const *pCmd);
+void vmsvgaR3CmdUpdateVerbose(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdUpdateVerbose const *pCmd);
+void vmsvgaR3CmdRectFill(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRectFill const *pCmd);
+void vmsvgaR3CmdRectCopy(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRectCopy const *pCmd);
+void vmsvgaR3CmdRectRopCopy(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRectRopCopy const *pCmd);
+void vmsvgaR3CmdDisplayCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDisplayCursor const *pCmd);
+void vmsvgaR3CmdMoveCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdMoveCursor const *pCmd);
+void vmsvgaR3CmdDefineCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineCursor const *pCmd);
+void vmsvgaR3CmdDefineAlphaCursor(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineAlphaCursor const *pCmd);
+void vmsvgaR3CmdEscape(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdEscape const *pCmd);
+void vmsvgaR3CmdDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineScreen const *pCmd);
+void vmsvgaR3CmdDestroyScreen(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDestroyScreen const *pCmd);
+void vmsvgaR3CmdDefineGMRFB(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineGMRFB const *pCmd);
+void vmsvgaR3CmdBlitGMRFBToScreen(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdBlitGMRFBToScreen const *pCmd);
+void vmsvgaR3CmdBlitScreenToGMRFB(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdBlitScreenToGMRFB const *pCmd);
+void vmsvgaR3CmdAnnotationFill(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdAnnotationFill const *pCmd);
+void vmsvgaR3CmdAnnotationCopy(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdAnnotationCopy const *pCmd);
+
+#ifdef VBOX_WITH_VMSVGA3D
+void vmsvgaR3CmdDefineGMR2(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdDefineGMR2 const *pCmd);
+void vmsvgaR3CmdRemapGMR2(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAFifoCmdRemapGMR2 const *pCmd);
+int vmsvgaR3Process3dCmd(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t idDXContext, SVGAFifo3dCmdId enmCmdId, uint32_t cbCmd, void const *pvCmd);
+#endif
+
+#if defined(LOG_ENABLED) || defined(VBOX_STRICT)
+const char *vmsvgaR3FifoCmdToString(uint32_t u32Cmd);
+#endif
+
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA_internal_h */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
new file mode 100644
index 00000000..dbd6aa44
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
@@ -0,0 +1,7014 @@
+/* $Id: DevVGA-SVGA.cpp $ */
+/** @file
+ * VMware SVGA device.
+ *
+ * Logging levels guidelines for this and related files:
+ * - Log() for normal bits.
+ * - LogFlow() for more info.
+ * - Log2 for hex dump of cursor data.
+ * - Log3 for hex dump of shader code.
+ * - Log4 for hex dumps of 3D data.
+ * - Log5 for info about GMR pages.
+ * - Log6 for DX shaders.
+ * - Log7 for SVGA command dump.
+ * - LogRel for the usual important stuff.
+ * - LogRel2 for cursor.
+ * - LogRel3 for 3D performance data.
+ * - LogRel4 for HW accelerated graphics output.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/** @page pg_dev_vmsvga VMSVGA - VMware SVGA II Device Emulation
+ *
+ * This device emulation was contributed by trivirt AG. It offers an
+ * alternative to our Bochs based VGA graphics and 3d emulations. This is
+ * valuable for Xorg based guests, as there is driver support shipping with Xorg
+ * since it forked from XFree86.
+ *
+ *
+ * @section sec_dev_vmsvga_sdk The VMware SDK
+ *
+ * This is officially deprecated now, however it's still quite useful,
+ * especially for getting the old features working:
+ * http://vmware-svga.sourceforge.net/
+ *
+ * They currently point developers at the following resources.
+ * - http://cgit.freedesktop.org/xorg/driver/xf86-video-vmware/
+ * - http://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/svga/
+ * - http://cgit.freedesktop.org/mesa/vmwgfx/
+ *
+ * @subsection subsec_dev_vmsvga_sdk_results Test results
+ *
+ * Test results:
+ * - 2dmark.img:
+ * + todo
+ * - backdoor-tclo.img:
+ * + todo
+ * - blit-cube.img:
+ * + todo
+ * - bunnies.img:
+ * + todo
+ * - cube.img:
+ * + todo
+ * - cubemark.img:
+ * + todo
+ * - dynamic-vertex-stress.img:
+ * + todo
+ * - dynamic-vertex.img:
+ * + todo
+ * - fence-stress.img:
+ * + todo
+ * - gmr-test.img:
+ * + todo
+ * - half-float-test.img:
+ * + todo
+ * - noscreen-cursor.img:
+ * - The CURSOR I/O and FIFO registers are not implemented, so the mouse
+ * cursor doesn't show. (Hacking the GUI a little, would make the cursor
+ * visible though.)
+ * - Cursor animation via the palette doesn't work.
+ * - During debugging, it turns out that the framebuffer content seems to
+ * be halfways ignore or something (memset(fb, 0xcc, lots)).
+ * - Trouble with way to small FIFO and the 256x256 cursor fails. Need to
+ * grow it 0x10 fold (128KB -> 2MB like in WS10).
+ * - null.img:
+ * + todo
+ * - pong.img:
+ * + todo
+ * - presentReadback.img:
+ * + todo
+ * - resolution-set.img:
+ * + todo
+ * - rt-gamma-test.img:
+ * + todo
+ * - screen-annotation.img:
+ * + todo
+ * - screen-cursor.img:
+ * + todo
+ * - screen-dma-coalesce.img:
+ * + todo
+ * - screen-gmr-discontig.img:
+ * + todo
+ * - screen-gmr-remap.img:
+ * + todo
+ * - screen-multimon.img:
+ * + todo
+ * - screen-present-clip.img:
+ * + todo
+ * - screen-render-test.img:
+ * + todo
+ * - screen-simple.img:
+ * + todo
+ * - screen-text.img:
+ * + todo
+ * - simple-shaders.img:
+ * + todo
+ * - simple_blit.img:
+ * + todo
+ * - tiny-2d-updates.img:
+ * + todo
+ * - video-formats.img:
+ * + todo
+ * - video-sync.img:
+ * + todo
+ *
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+#include <VBox/sup.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#ifdef IN_RING3
+# include <iprt/ctype.h>
+# include <iprt/mem.h>
+# ifdef VBOX_STRICT
+# include <iprt/time.h>
+# endif
+#endif
+
+#include <VBox/AssertGuest.h>
+#include <VBox/VMMDev.h>
+#include <VBoxVideo.h>
+#include <VBox/bioslogo.h>
+
+#ifdef LOG_ENABLED
+#include "svgadump/svga_dump.h"
+#endif
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+/* Should be included after DevVGA.h/DevVGA-SVGA.h to pick all defines. */
+#ifdef VBOX_WITH_VMSVGA3D
+# include "DevVGA-SVGA3d.h"
+# ifdef RT_OS_DARWIN
+# include "DevVGA-SVGA3d-cocoa.h"
+# endif
+# ifdef RT_OS_LINUX
+# ifdef IN_RING3
+# include "DevVGA-SVGA3d-glLdr.h"
+# endif
+# endif
+#endif
+#ifdef IN_RING3
+#include "DevVGA-SVGA-internal.h"
+#endif
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+/**
+ * Macro for checking if a fixed FIFO register is valid according to the
+ * current FIFO configuration.
+ *
+ * @returns true / false.
+ * @param a_iIndex The fifo register index (like SVGA_FIFO_CAPABILITIES).
+ * @param a_offFifoMin A valid SVGA_FIFO_MIN value.
+ */
+#define VMSVGA_IS_VALID_FIFO_REG(a_iIndex, a_offFifoMin) ( ((a_iIndex) + 1) * sizeof(uint32_t) <= (a_offFifoMin) )
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+
+
+/*********************************************************************************************************************************
+* Internal Functions *
+*********************************************************************************************************************************/
+#ifdef IN_RING3
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+static FNPGMPHYSHANDLER vmsvgaR3FifoAccessHandler;
+# endif
+# ifdef DEBUG_GMR_ACCESS
+static FNPGMPHYSHANDLER vmsvgaR3GmrAccessHandler;
+# endif
+#endif
+
+
+/*********************************************************************************************************************************
+* Global Variables *
+*********************************************************************************************************************************/
+#ifdef IN_RING3
+
+/**
+ * SSM descriptor table for the VMSVGAGMRDESCRIPTOR structure.
+ */
+static SSMFIELD const g_aVMSVGAGMRDESCRIPTORFields[] =
+{
+ SSMFIELD_ENTRY_GCPHYS( VMSVGAGMRDESCRIPTOR, GCPhys),
+ SSMFIELD_ENTRY( VMSVGAGMRDESCRIPTOR, numPages),
+ SSMFIELD_ENTRY_TERM()
+};
+
+/**
+ * SSM descriptor table for the GMR structure.
+ */
+static SSMFIELD const g_aGMRFields[] =
+{
+ SSMFIELD_ENTRY( GMR, cMaxPages),
+ SSMFIELD_ENTRY( GMR, cbTotal),
+ SSMFIELD_ENTRY( GMR, numDescriptors),
+ SSMFIELD_ENTRY_IGN_HCPTR( GMR, paDesc),
+ SSMFIELD_ENTRY_TERM()
+};
+
+/**
+ * SSM descriptor table for the VMSVGASCREENOBJECT structure.
+ */
+static SSMFIELD const g_aVMSVGASCREENOBJECTFields[] =
+{
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, fuScreen),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, idScreen),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, xOrigin),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, yOrigin),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, cWidth),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, cHeight),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, offVRAM),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, cbPitch),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, cBpp),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, fDefined),
+ SSMFIELD_ENTRY( VMSVGASCREENOBJECT, fModified),
+ SSMFIELD_ENTRY_VER( VMSVGASCREENOBJECT, cDpi, VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS),
+ SSMFIELD_ENTRY_TERM()
+};
+
+/**
+ * SSM descriptor table for the VMSVGAR3STATE structure.
+ */
+static SSMFIELD const g_aVMSVGAR3STATEFields[] =
+{
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, paGMR),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, GMRFB),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, Cursor.fActive),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, Cursor.xHotspot),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, Cursor.yHotspot),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, Cursor.width),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, Cursor.height),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, Cursor.cbData),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGAR3STATE, Cursor.pData),
+ SSMFIELD_ENTRY( VMSVGAR3STATE, colorAnnotation),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, cBusyDelayedEmts),
+#ifdef VMSVGA_USE_EMT_HALT_CODE
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, BusyDelayedEmts),
+#else
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, hBusyDelayedEmts),
+#endif
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatBusyDelayEmts),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dPresentProf),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dDrawPrimitivesProf),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceDmaProf),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dBlitSurfaceToScreenProf),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineGmr2),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineGmr2Free),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineGmr2Modify),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdRemapGmr2),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdRemapGmr2Modify),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdInvalidCmd),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdFence),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdUpdate),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdUpdateVerbose),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineCursor),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineAlphaCursor),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdMoveCursor),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDisplayCursor),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdRectFill),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdRectCopy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdRectRopCopy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdEscape),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineScreen),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDestroyScreen),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdDefineGmrFb),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdBlitGmrFbToScreen),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdBlitScreentoGmrFb),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdAnnotationFill),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3CmdAnnotationCopy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceDefine),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceDefineV2),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceDestroy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceCopy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceStretchBlt),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceDma),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSurfaceScreen),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dContextDefine),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dContextDestroy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetTransform),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetZRange),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetRenderState),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetRenderTarget),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetTextureState),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetMaterial),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetLightData),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetLightEnable),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetViewPort),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetClipPlane),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dClear),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dPresent),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dPresentReadBack),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dShaderDefine),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dShaderDestroy),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetShader),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetShaderConst),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dDrawPrimitives),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dSetScissorRect),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dBeginQuery),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dEndQuery),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dWaitForQuery),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dGenerateMipmaps),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dActivateSurface),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3Cmd3dDeactivateSurface),
+
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3RegConfigDoneWr),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3RegGmrDescriptorWr),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3RegGmrDescriptorWrErrors),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatR3RegGmrDescriptorWrFree),
+
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoCommands),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoErrors),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoUnkCmds),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoTodoTimeout),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoTodoWoken),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoStalls),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoExtendedSleep),
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoAccessHandler),
+# endif
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoCursorFetchAgain),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoCursorNoChange),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoCursorPosition),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAR3STATE, StatFifoCursorVisiblity),
+
+ SSMFIELD_ENTRY_TERM()
+};
+
+/**
+ * SSM descriptor table for the VGAState.svga structure.
+ */
+static SSMFIELD const g_aVGAStateSVGAFields[] =
+{
+ SSMFIELD_ENTRY_IGN_GCPHYS( VMSVGAState, GCPhysFIFO),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, cbFIFO),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, cbFIFOConfig),
+ SSMFIELD_ENTRY( VMSVGAState, u32SVGAId),
+ SSMFIELD_ENTRY( VMSVGAState, fEnabled),
+ SSMFIELD_ENTRY( VMSVGAState, fConfigured),
+ SSMFIELD_ENTRY( VMSVGAState, fBusy),
+ SSMFIELD_ENTRY( VMSVGAState, fTraces),
+ SSMFIELD_ENTRY( VMSVGAState, u32GuestId),
+ SSMFIELD_ENTRY( VMSVGAState, cScratchRegion),
+ SSMFIELD_ENTRY( VMSVGAState, au32ScratchRegion),
+ SSMFIELD_ENTRY( VMSVGAState, u32IrqStatus),
+ SSMFIELD_ENTRY( VMSVGAState, u32IrqMask),
+ SSMFIELD_ENTRY( VMSVGAState, u32PitchLock),
+ SSMFIELD_ENTRY( VMSVGAState, u32CurrentGMRId),
+ SSMFIELD_ENTRY( VMSVGAState, u32DeviceCaps),
+ SSMFIELD_ENTRY( VMSVGAState, u32IndexReg),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, hFIFORequestSem),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, uLastCursorUpdateCount),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, fFIFOThreadSleeping),
+ SSMFIELD_ENTRY_VER( VMSVGAState, fGFBRegisters, VGA_SAVEDSTATE_VERSION_VMSVGA_SCREENS),
+ SSMFIELD_ENTRY( VMSVGAState, uWidth),
+ SSMFIELD_ENTRY( VMSVGAState, uHeight),
+ SSMFIELD_ENTRY( VMSVGAState, uBpp),
+ SSMFIELD_ENTRY( VMSVGAState, cbScanline),
+ SSMFIELD_ENTRY_VER( VMSVGAState, uScreenOffset, VGA_SAVEDSTATE_VERSION_VMSVGA),
+ SSMFIELD_ENTRY_VER( VMSVGAState, uCursorX, VGA_SAVEDSTATE_VERSION_VMSVGA_CURSOR),
+ SSMFIELD_ENTRY_VER( VMSVGAState, uCursorY, VGA_SAVEDSTATE_VERSION_VMSVGA_CURSOR),
+ SSMFIELD_ENTRY_VER( VMSVGAState, uCursorID, VGA_SAVEDSTATE_VERSION_VMSVGA_CURSOR),
+ SSMFIELD_ENTRY_VER( VMSVGAState, uCursorOn, VGA_SAVEDSTATE_VERSION_VMSVGA_CURSOR),
+ SSMFIELD_ENTRY( VMSVGAState, u32MaxWidth),
+ SSMFIELD_ENTRY( VMSVGAState, u32MaxHeight),
+ SSMFIELD_ENTRY( VMSVGAState, u32ActionFlags),
+ SSMFIELD_ENTRY( VMSVGAState, f3DEnabled),
+ SSMFIELD_ENTRY( VMSVGAState, fVRAMTracking),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, u8FIFOExtCommand),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, fFifoExtCommandWakeup),
+ SSMFIELD_ENTRY_IGNORE( VMSVGAState, cGMR),
+ SSMFIELD_ENTRY_VER( VMSVGAState, au32DevCaps, VGA_SAVEDSTATE_VERSION_VMSVGA_DX),
+ SSMFIELD_ENTRY_VER( VMSVGAState, u32DevCapIndex, VGA_SAVEDSTATE_VERSION_VMSVGA_DX),
+ SSMFIELD_ENTRY_VER( VMSVGAState, u32RegCommandLow, VGA_SAVEDSTATE_VERSION_VMSVGA_DX),
+ SSMFIELD_ENTRY_VER( VMSVGAState, u32RegCommandHigh, VGA_SAVEDSTATE_VERSION_VMSVGA_DX),
+
+ SSMFIELD_ENTRY_TERM()
+};
+#endif /* IN_RING3 */
+
+
+/*********************************************************************************************************************************
+* Internal Functions *
+*********************************************************************************************************************************/
+#ifdef IN_RING3
+static void vmsvgaR3SetTraces(PPDMDEVINS pDevIns, PVGASTATE pThis, bool fTraces);
+static int vmsvgaR3LoadExecFifo(PCPDMDEVHLPR3 pHlp, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM,
+ uint32_t uVersion, uint32_t uPass);
+static int vmsvgaR3SaveExecFifo(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM);
+static void vmsvgaR3CmdBufSubmit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, RTGCPHYS GCPhysCB, SVGACBContext CBCtx);
+static void vmsvgaR3PowerOnDevice(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, bool fLoadState);
+#endif /* IN_RING3 */
+
+
+#define SVGA_CASE_ID2STR(idx) case idx: return #idx
+#if defined(LOG_ENABLED)
+/**
+ * Index register string name lookup
+ *
+ * @returns Index register string or "UNKNOWN"
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param idxReg The index register.
+ */
+static const char *vmsvgaIndexToString(PVGASTATE pThis, uint32_t idxReg)
+{
+ AssertCompile(SVGA_REG_TOP == 77); /* Ensure that the correct headers are used. */
+ switch (idxReg)
+ {
+ SVGA_CASE_ID2STR(SVGA_REG_ID);
+ SVGA_CASE_ID2STR(SVGA_REG_ENABLE);
+ SVGA_CASE_ID2STR(SVGA_REG_WIDTH);
+ SVGA_CASE_ID2STR(SVGA_REG_HEIGHT);
+ SVGA_CASE_ID2STR(SVGA_REG_MAX_WIDTH);
+ SVGA_CASE_ID2STR(SVGA_REG_MAX_HEIGHT);
+ SVGA_CASE_ID2STR(SVGA_REG_DEPTH);
+ SVGA_CASE_ID2STR(SVGA_REG_BITS_PER_PIXEL); /* Current bpp in the guest */
+ SVGA_CASE_ID2STR(SVGA_REG_PSEUDOCOLOR);
+ SVGA_CASE_ID2STR(SVGA_REG_RED_MASK);
+ SVGA_CASE_ID2STR(SVGA_REG_GREEN_MASK);
+ SVGA_CASE_ID2STR(SVGA_REG_BLUE_MASK);
+ SVGA_CASE_ID2STR(SVGA_REG_BYTES_PER_LINE);
+ SVGA_CASE_ID2STR(SVGA_REG_FB_START); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_FB_OFFSET);
+ SVGA_CASE_ID2STR(SVGA_REG_VRAM_SIZE);
+ SVGA_CASE_ID2STR(SVGA_REG_FB_SIZE);
+
+ /* ID 0 implementation only had the above registers, then the palette */
+ SVGA_CASE_ID2STR(SVGA_REG_CAPABILITIES);
+ SVGA_CASE_ID2STR(SVGA_REG_MEM_START); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_MEM_SIZE);
+ SVGA_CASE_ID2STR(SVGA_REG_CONFIG_DONE); /* Set when memory area configured */
+ SVGA_CASE_ID2STR(SVGA_REG_SYNC); /* See "FIFO Synchronization Registers" */
+ SVGA_CASE_ID2STR(SVGA_REG_BUSY); /* See "FIFO Synchronization Registers" */
+ SVGA_CASE_ID2STR(SVGA_REG_GUEST_ID); /* Set guest OS identifier */
+ SVGA_CASE_ID2STR(SVGA_REG_DEAD); /* (Deprecated) SVGA_REG_CURSOR_ID. */
+ SVGA_CASE_ID2STR(SVGA_REG_CURSOR_X); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_CURSOR_Y); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_CURSOR_ON); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_HOST_BITS_PER_PIXEL); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_SCRATCH_SIZE); /* Number of scratch registers */
+ SVGA_CASE_ID2STR(SVGA_REG_MEM_REGS); /* Number of FIFO registers */
+ SVGA_CASE_ID2STR(SVGA_REG_NUM_DISPLAYS); /* (Deprecated) */
+ SVGA_CASE_ID2STR(SVGA_REG_PITCHLOCK); /* Fixed pitch for all modes */
+ SVGA_CASE_ID2STR(SVGA_REG_IRQMASK); /* Interrupt mask */
+
+ /* Legacy multi-monitor support */
+ SVGA_CASE_ID2STR(SVGA_REG_NUM_GUEST_DISPLAYS); /* Number of guest displays in X/Y direction */
+ SVGA_CASE_ID2STR(SVGA_REG_DISPLAY_ID); /* Display ID for the following display attributes */
+ SVGA_CASE_ID2STR(SVGA_REG_DISPLAY_IS_PRIMARY); /* Whether this is a primary display */
+ SVGA_CASE_ID2STR(SVGA_REG_DISPLAY_POSITION_X); /* The display position x */
+ SVGA_CASE_ID2STR(SVGA_REG_DISPLAY_POSITION_Y); /* The display position y */
+ SVGA_CASE_ID2STR(SVGA_REG_DISPLAY_WIDTH); /* The display's width */
+ SVGA_CASE_ID2STR(SVGA_REG_DISPLAY_HEIGHT); /* The display's height */
+
+ SVGA_CASE_ID2STR(SVGA_REG_GMR_ID);
+ SVGA_CASE_ID2STR(SVGA_REG_GMR_DESCRIPTOR);
+ SVGA_CASE_ID2STR(SVGA_REG_GMR_MAX_IDS);
+ SVGA_CASE_ID2STR(SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH);
+
+ SVGA_CASE_ID2STR(SVGA_REG_TRACES); /* Enable trace-based updates even when FIFO is on */
+ SVGA_CASE_ID2STR(SVGA_REG_GMRS_MAX_PAGES); /* Maximum number of 4KB pages for all GMRs */
+ SVGA_CASE_ID2STR(SVGA_REG_MEMORY_SIZE); /* Total dedicated device memory excluding FIFO */
+ SVGA_CASE_ID2STR(SVGA_REG_COMMAND_LOW); /* Lower 32 bits and submits commands */
+ SVGA_CASE_ID2STR(SVGA_REG_COMMAND_HIGH); /* Upper 32 bits of command buffer PA */
+ SVGA_CASE_ID2STR(SVGA_REG_MAX_PRIMARY_BOUNDING_BOX_MEM); /* Max primary memory */
+ SVGA_CASE_ID2STR(SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB); /* Suggested limit on mob mem */
+ SVGA_CASE_ID2STR(SVGA_REG_DEV_CAP); /* Write dev cap index, read value */
+ SVGA_CASE_ID2STR(SVGA_REG_CMD_PREPEND_LOW);
+ SVGA_CASE_ID2STR(SVGA_REG_CMD_PREPEND_HIGH);
+ SVGA_CASE_ID2STR(SVGA_REG_SCREENTARGET_MAX_WIDTH);
+ SVGA_CASE_ID2STR(SVGA_REG_SCREENTARGET_MAX_HEIGHT);
+ SVGA_CASE_ID2STR(SVGA_REG_MOB_MAX_SIZE);
+ SVGA_CASE_ID2STR(SVGA_REG_BLANK_SCREEN_TARGETS);
+ SVGA_CASE_ID2STR(SVGA_REG_CAP2);
+ SVGA_CASE_ID2STR(SVGA_REG_DEVEL_CAP);
+ SVGA_CASE_ID2STR(SVGA_REG_GUEST_DRIVER_ID);
+ SVGA_CASE_ID2STR(SVGA_REG_GUEST_DRIVER_VERSION1);
+ SVGA_CASE_ID2STR(SVGA_REG_GUEST_DRIVER_VERSION2);
+ SVGA_CASE_ID2STR(SVGA_REG_GUEST_DRIVER_VERSION3);
+ SVGA_CASE_ID2STR(SVGA_REG_CURSOR_MOBID);
+ SVGA_CASE_ID2STR(SVGA_REG_CURSOR_MAX_BYTE_SIZE);
+ SVGA_CASE_ID2STR(SVGA_REG_CURSOR_MAX_DIMENSION);
+ SVGA_CASE_ID2STR(SVGA_REG_FIFO_CAPS);
+ SVGA_CASE_ID2STR(SVGA_REG_FENCE);
+ SVGA_CASE_ID2STR(SVGA_REG_RESERVED1);
+ SVGA_CASE_ID2STR(SVGA_REG_RESERVED2);
+ SVGA_CASE_ID2STR(SVGA_REG_RESERVED3);
+ SVGA_CASE_ID2STR(SVGA_REG_RESERVED4);
+ SVGA_CASE_ID2STR(SVGA_REG_RESERVED5);
+ SVGA_CASE_ID2STR(SVGA_REG_SCREENDMA);
+ SVGA_CASE_ID2STR(SVGA_REG_GBOBJECT_MEM_SIZE_KB);
+ SVGA_CASE_ID2STR(SVGA_REG_TOP); /* Must be 1 more than the last register */
+
+ default:
+ if (idxReg - (uint32_t)SVGA_SCRATCH_BASE < pThis->svga.cScratchRegion)
+ return "SVGA_SCRATCH_BASE reg";
+ if (idxReg - (uint32_t)SVGA_PALETTE_BASE < (uint32_t)SVGA_NUM_PALETTE_REGS)
+ return "SVGA_PALETTE_BASE reg";
+ return "UNKNOWN";
+ }
+}
+#endif /* LOG_ENABLED */
+
+#if defined(LOG_ENABLED) || (defined(IN_RING3) && defined(VBOX_WITH_VMSVGA3D))
+static const char *vmsvgaDevCapIndexToString(SVGA3dDevCapIndex idxDevCap)
+{
+ AssertCompile(SVGA3D_DEVCAP_MAX == 260);
+ switch (idxDevCap)
+ {
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_INVALID);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_3D);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_LIGHTS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_TEXTURES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_CLIP_PLANES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_VERTEX_SHADER_VERSION);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_VERTEX_SHADER);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_FRAGMENT_SHADER);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_RENDER_TARGETS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_S23E8_TEXTURES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_S10E5_TEXTURES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_D16_BUFFER_FORMAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_QUERY_TYPES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_POINT_SIZE);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_SHADER_TEXTURES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_VOLUME_EXTENT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_VERTEX_INDEX);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_TEXTURE_OPS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_R5G6B5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_ALPHA8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Z_D16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_DXT1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_DXT2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_DXT3);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_DXT4);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_DXT5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_CxV8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_R_S10E5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_R_S23E8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MISSING62);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_V16U16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_G16R16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_UYVY);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_YUY2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD4); /* SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD5); /* SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD7); /* SVGA3D_DEVCAP_ALPHATOCOVERAGE */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD6); /* SVGA3D_DEVCAP_SUPERSAMPLE */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_AUTOGENMIPMAPS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_NV12);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD10); /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_CONTEXT_IDS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_SURFACE_IDS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Z_DF16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Z_DF24);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_ATI1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_ATI2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD8); /* SVGA3D_DEVCAP_VIDEO_DECODE */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD9); /* SVGA3D_DEVCAP_VIDEO_PROCESS */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_LINE_AA);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_LINE_STIPPLE);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_LINE_WIDTH);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX_AA_LINE_WIDTH);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SURFACEFMT_YV12);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD3); /* Old SVGA3D_DEVCAP_LOGICOPS */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_TS_COLOR_KEY);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXCONTEXT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DEAD11); /* SVGA3D_DEVCAP_MAX_TEXTURE_ARRAY_SIZE */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DX_MAX_VERTEXBUFFERS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DX_MAX_CONSTANT_BUFFERS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DX_PROVOKING_VERTEX);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_X8R8G8B8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A8R8G8B8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R5G6B5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_X1R5G5B5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A1R5G5B5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A4R4G4B4);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_D32);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_D16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_D24S8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_D15S1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_LUMINANCE8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_LUMINANCE4_ALPHA4);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_LUMINANCE16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_LUMINANCE8_ALPHA8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_DXT1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_DXT2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_DXT3);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_DXT4);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_DXT5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BUMPU8V8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BUMPL6V5U5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BUMPX8L8V8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_ARGB_S10E5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_ARGB_S23E8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A2R10G10B10);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_V8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Q8W8V8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_CxV8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_X8L8V8U8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A2W10V10U10);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_ALPHA8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R_S10E5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R_S23E8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_RG_S10E5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_RG_S23E8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BUFFER);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_D24X8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_V16U16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_G16R16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A16B16G16R16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_UYVY);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_YUY2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_NV12);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD2); /* SVGA3D_DEVCAP_DXFMT_AYUV */
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_D32_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_X24_G8_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8_UINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8_SINT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_P8);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8_B8G8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_G8R8_G8B8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_ATI1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC4_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_ATI2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC5_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R10G10B10_XR_BIAS_A2_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_DF16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_DF24);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_Z_D24S8_INT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_YV12);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16G16_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R32_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R8G8_SNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_R16_FLOAT);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_D16_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_A8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC1_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC2_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC3_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC4_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC5_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SM41);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MULTISAMPLE_2X);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MULTISAMPLE_4X);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MS_FULL_QUALITY);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_LOGICOPS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_LOGIC_BLENDOPS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_RESERVED_1);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC6H_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC6H_UF16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC6H_SF16);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC7_TYPELESS);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC7_UNORM);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_DXFMT_BC7_UNORM_SRGB);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_RESERVED_2);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_SM5);
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MULTISAMPLE_8X);
+
+ SVGA_CASE_ID2STR(SVGA3D_DEVCAP_MAX);
+
+ default:
+ break;
+ }
+ return "UNKNOWN";
+}
+#endif /* defined(LOG_ENABLED) || (defined(IN_RING3) && defined(VBOX_WITH_VMSVGA3D)) */
+#undef SVGA_CASE_ID2STR
+
+
+#ifdef IN_RING3
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnSetViewport}
+ */
+DECLCALLBACK(void) vmsvgaR3PortSetViewport(PPDMIDISPLAYPORT pInterface, uint32_t idScreen, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pThisCC->pDevIns, PVGASTATE);
+
+ Log(("vmsvgaPortSetViewPort: screen %d (%d,%d)(%d,%d)\n", idScreen, x, y, cx, cy));
+ VMSVGAVIEWPORT const OldViewport = pThis->svga.viewport;
+
+ /** @todo Test how it interacts with multiple screen objects. */
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, idScreen);
+ uint32_t const uWidth = pScreen ? pScreen->cWidth : 0;
+ uint32_t const uHeight = pScreen ? pScreen->cHeight : 0;
+
+ if (x < uWidth)
+ {
+ pThis->svga.viewport.x = x;
+ pThis->svga.viewport.cx = RT_MIN(cx, uWidth - x);
+ pThis->svga.viewport.xRight = x + pThis->svga.viewport.cx;
+ }
+ else
+ {
+ pThis->svga.viewport.x = uWidth;
+ pThis->svga.viewport.cx = 0;
+ pThis->svga.viewport.xRight = uWidth;
+ }
+ if (y < uHeight)
+ {
+ pThis->svga.viewport.y = y;
+ pThis->svga.viewport.cy = RT_MIN(cy, uHeight - y);
+ pThis->svga.viewport.yLowWC = uHeight - y - pThis->svga.viewport.cy;
+ pThis->svga.viewport.yHighWC = uHeight - y;
+ }
+ else
+ {
+ pThis->svga.viewport.y = uHeight;
+ pThis->svga.viewport.cy = 0;
+ pThis->svga.viewport.yLowWC = 0;
+ pThis->svga.viewport.yHighWC = 0;
+ }
+
+# ifdef VBOX_WITH_VMSVGA3D
+ /*
+ * Now inform the 3D backend.
+ */
+ if (pThis->svga.f3DEnabled)
+ vmsvga3dUpdateHostScreenViewport(pThisCC, idScreen, &OldViewport);
+# else
+ RT_NOREF(OldViewport);
+# endif
+}
+
+
+/**
+ * Updating screen information in API
+ *
+ * @param pThis The The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+void vmsvgaR3VBVAResize(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ int rc;
+
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ for (unsigned iScreen = 0; iScreen < RT_ELEMENTS(pSVGAState->aScreens); ++iScreen)
+ {
+ VMSVGASCREENOBJECT *pScreen = &pSVGAState->aScreens[iScreen];
+ if (!pScreen->fModified)
+ continue;
+
+ pScreen->fModified = false;
+
+ VBVAINFOVIEW view;
+ RT_ZERO(view);
+ view.u32ViewIndex = pScreen->idScreen;
+ // view.u32ViewOffset = 0;
+ view.u32ViewSize = pThis->vram_size;
+ view.u32MaxScreenSize = pThis->vram_size;
+
+ VBVAINFOSCREEN screen;
+ RT_ZERO(screen);
+ screen.u32ViewIndex = pScreen->idScreen;
+
+ if (pScreen->fDefined)
+ {
+ if ( pScreen->cWidth == VMSVGA_VAL_UNINITIALIZED
+ || pScreen->cHeight == VMSVGA_VAL_UNINITIALIZED
+ || pScreen->cBpp == VMSVGA_VAL_UNINITIALIZED)
+ {
+ Assert(pThis->svga.fGFBRegisters);
+ continue;
+ }
+
+ screen.i32OriginX = pScreen->xOrigin;
+ screen.i32OriginY = pScreen->yOrigin;
+ screen.u32StartOffset = pScreen->offVRAM;
+ screen.u32LineSize = pScreen->cbPitch;
+ screen.u32Width = pScreen->cWidth;
+ screen.u32Height = pScreen->cHeight;
+ screen.u16BitsPerPixel = pScreen->cBpp;
+ if (!(pScreen->fuScreen & SVGA_SCREEN_DEACTIVATE))
+ screen.u16Flags = VBVA_SCREEN_F_ACTIVE;
+ if (pScreen->fuScreen & SVGA_SCREEN_BLANKING)
+ screen.u16Flags |= VBVA_SCREEN_F_BLANK2;
+ }
+ else
+ {
+ /* Screen is destroyed. */
+ screen.u16Flags = VBVA_SCREEN_F_DISABLED;
+ }
+
+ void *pvVRAM = pScreen->pvScreenBitmap ? pScreen->pvScreenBitmap : pThisCC->pbVRam;
+ rc = pThisCC->pDrv->pfnVBVAResize(pThisCC->pDrv, &view, &screen, pvVRAM, /*fResetInputMapping=*/ true);
+ AssertRC(rc);
+ }
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnReportMonitorPositions}
+ *
+ * Used to update screen offsets (positions) since appearently vmwgfx fails to
+ * pass correct offsets thru FIFO.
+ */
+DECLCALLBACK(void) vmsvgaR3PortReportMonitorPositions(PPDMIDISPLAYPORT pInterface, uint32_t cPositions, PCRTPOINT paPositions)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pThisCC->pDevIns, PVGASTATE);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ AssertReturnVoid(pSVGAState);
+
+ /* We assume cPositions is the # of outputs Xserver reports and paPositions is (-1, -1) for disabled monitors. */
+ cPositions = RT_MIN(cPositions, RT_ELEMENTS(pSVGAState->aScreens));
+ for (uint32_t i = 0; i < cPositions; ++i)
+ {
+ if ( pSVGAState->aScreens[i].xOrigin == paPositions[i].x
+ && pSVGAState->aScreens[i].yOrigin == paPositions[i].y)
+ continue;
+
+ if (paPositions[i].x == -1)
+ continue;
+ if (paPositions[i].y == -1)
+ continue;
+
+ pSVGAState->aScreens[i].xOrigin = paPositions[i].x;
+ pSVGAState->aScreens[i].yOrigin = paPositions[i].y;
+ pSVGAState->aScreens[i].fModified = true;
+ }
+
+ vmsvgaR3VBVAResize(pThis, pThisCC);
+}
+
+#endif /* IN_RING3 */
+
+/**
+ * Read port register
+ *
+ * @returns VBox status code.
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pu32 Where to store the read value
+ */
+static int vmsvgaReadPort(PPDMDEVINS pDevIns, PVGASTATE pThis, uint32_t *pu32)
+{
+#ifdef IN_RING3
+ PVGASTATER3 pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+#endif
+ int rc = VINF_SUCCESS;
+ *pu32 = 0;
+
+ /* Rough index register validation. */
+ uint32_t idxReg = pThis->svga.u32IndexReg;
+#if !defined(IN_RING3) && defined(VBOX_STRICT)
+ ASSERT_GUEST_MSG_RETURN(idxReg < SVGA_SCRATCH_BASE + pThis->svga.cScratchRegion, ("idxReg=%#x\n", idxReg),
+ VINF_IOM_R3_IOPORT_READ);
+#else
+ ASSERT_GUEST_MSG_STMT_RETURN(idxReg < SVGA_SCRATCH_BASE + pThis->svga.cScratchRegion, ("idxReg=%#x\n", idxReg),
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownRd),
+ VINF_SUCCESS);
+#endif
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* We must adjust the register number if we're in SVGA_ID_0 mode because the PALETTE range moved. */
+ if ( idxReg >= SVGA_REG_ID_0_TOP
+ && pThis->svga.u32SVGAId == SVGA_ID_0)
+ {
+ idxReg += SVGA_PALETTE_BASE - SVGA_REG_ID_0_TOP;
+ Log(("vmsvgaWritePort: SVGA_ID_0 reg adj %#x -> %#x\n", pThis->svga.u32IndexReg, idxReg));
+ }
+
+ switch (idxReg)
+ {
+ case SVGA_REG_ID:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegIdRd);
+ *pu32 = pThis->svga.u32SVGAId;
+ break;
+
+ case SVGA_REG_ENABLE:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegEnableRd);
+ *pu32 = pThis->svga.fEnabled;
+ break;
+
+ case SVGA_REG_WIDTH:
+ {
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegWidthRd);
+ if ( pThis->svga.fEnabled
+ && pThis->svga.uWidth != VMSVGA_VAL_UNINITIALIZED)
+ *pu32 = pThis->svga.uWidth;
+ else
+ {
+#ifndef IN_RING3
+ rc = VINF_IOM_R3_IOPORT_READ;
+#else
+ *pu32 = pThisCC->pDrv->cx;
+#endif
+ }
+ break;
+ }
+
+ case SVGA_REG_HEIGHT:
+ {
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegHeightRd);
+ if ( pThis->svga.fEnabled
+ && pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
+ *pu32 = pThis->svga.uHeight;
+ else
+ {
+#ifndef IN_RING3
+ rc = VINF_IOM_R3_IOPORT_READ;
+#else
+ *pu32 = pThisCC->pDrv->cy;
+#endif
+ }
+ break;
+ }
+
+ case SVGA_REG_MAX_WIDTH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMaxWidthRd);
+ *pu32 = pThis->svga.u32MaxWidth;
+ break;
+
+ case SVGA_REG_MAX_HEIGHT:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMaxHeightRd);
+ *pu32 = pThis->svga.u32MaxHeight;
+ break;
+
+ case SVGA_REG_DEPTH:
+ /* This returns the color depth of the current mode. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDepthRd);
+ switch (pThis->svga.uBpp)
+ {
+ case 15:
+ case 16:
+ case 24:
+ *pu32 = pThis->svga.uBpp;
+ break;
+
+ default:
+ case 32:
+ *pu32 = 24; /* The upper 8 bits are either alpha bits or not used. */
+ break;
+ }
+ break;
+
+ case SVGA_REG_HOST_BITS_PER_PIXEL: /* (Deprecated) */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegHostBitsPerPixelRd);
+ *pu32 = pThis->svga.uHostBpp;
+ break;
+
+ case SVGA_REG_BITS_PER_PIXEL: /* Current bpp in the guest */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegBitsPerPixelRd);
+ *pu32 = pThis->svga.uBpp;
+ break;
+
+ case SVGA_REG_PSEUDOCOLOR:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegPsuedoColorRd);
+ *pu32 = pThis->svga.uBpp == 8; /* See section 6 "Pseudocolor" in svga_interface.txt. */
+ break;
+
+ case SVGA_REG_RED_MASK:
+ case SVGA_REG_GREEN_MASK:
+ case SVGA_REG_BLUE_MASK:
+ {
+ uint32_t uBpp;
+
+ if (pThis->svga.fEnabled)
+ uBpp = pThis->svga.uBpp;
+ else
+ uBpp = pThis->svga.uHostBpp;
+
+ uint32_t u32RedMask, u32GreenMask, u32BlueMask;
+ switch (uBpp)
+ {
+ case 8:
+ u32RedMask = 0x07;
+ u32GreenMask = 0x38;
+ u32BlueMask = 0xc0;
+ break;
+
+ case 15:
+ u32RedMask = 0x0000001f;
+ u32GreenMask = 0x000003e0;
+ u32BlueMask = 0x00007c00;
+ break;
+
+ case 16:
+ u32RedMask = 0x0000001f;
+ u32GreenMask = 0x000007e0;
+ u32BlueMask = 0x0000f800;
+ break;
+
+ case 24:
+ case 32:
+ default:
+ u32RedMask = 0x00ff0000;
+ u32GreenMask = 0x0000ff00;
+ u32BlueMask = 0x000000ff;
+ break;
+ }
+ switch (idxReg)
+ {
+ case SVGA_REG_RED_MASK:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegRedMaskRd);
+ *pu32 = u32RedMask;
+ break;
+
+ case SVGA_REG_GREEN_MASK:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGreenMaskRd);
+ *pu32 = u32GreenMask;
+ break;
+
+ case SVGA_REG_BLUE_MASK:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegBlueMaskRd);
+ *pu32 = u32BlueMask;
+ break;
+ }
+ break;
+ }
+
+ case SVGA_REG_BYTES_PER_LINE:
+ {
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegBytesPerLineRd);
+ if ( pThis->svga.fEnabled
+ && pThis->svga.cbScanline)
+ *pu32 = pThis->svga.cbScanline;
+ else
+ {
+#ifndef IN_RING3
+ rc = VINF_IOM_R3_IOPORT_READ;
+#else
+ *pu32 = pThisCC->pDrv->cbScanline;
+#endif
+ }
+ break;
+ }
+
+ case SVGA_REG_VRAM_SIZE: /* VRAM size */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegVramSizeRd);
+ *pu32 = pThis->vram_size;
+ break;
+
+ case SVGA_REG_FB_START: /* Frame buffer physical address. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegFbStartRd);
+ Assert(pThis->GCPhysVRAM <= 0xffffffff);
+ *pu32 = pThis->GCPhysVRAM;
+ break;
+
+ case SVGA_REG_FB_OFFSET: /* Offset of the frame buffer in VRAM */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegFbOffsetRd);
+ /* Always zero in our case. */
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_FB_SIZE: /* Frame buffer size */
+ {
+#ifndef IN_RING3
+ rc = VINF_IOM_R3_IOPORT_READ;
+#else
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegFbSizeRd);
+
+ /* VMWare testcases want at least 4 MB in case the hardware is disabled. */
+ if ( pThis->svga.fEnabled
+ && pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
+ {
+ /* Hardware enabled; return real framebuffer size .*/
+ *pu32 = (uint32_t)pThis->svga.uHeight * pThis->svga.cbScanline;
+ }
+ else
+ *pu32 = RT_MAX(0x100000, (uint32_t)pThisCC->pDrv->cy * pThisCC->pDrv->cbScanline);
+
+ *pu32 = RT_MIN(pThis->vram_size, *pu32);
+ Log(("h=%d w=%d bpp=%d\n", pThisCC->pDrv->cy, pThisCC->pDrv->cx, pThisCC->pDrv->cBits));
+#endif
+ break;
+ }
+
+ case SVGA_REG_CAPABILITIES:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCapabilitesRd);
+ *pu32 = pThis->svga.u32DeviceCaps;
+ break;
+
+ case SVGA_REG_MEM_START: /* FIFO start */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemStartRd);
+ Assert(pThis->svga.GCPhysFIFO <= 0xffffffff);
+ *pu32 = pThis->svga.GCPhysFIFO;
+ break;
+
+ case SVGA_REG_MEM_SIZE: /* FIFO size */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemSizeRd);
+ *pu32 = pThis->svga.cbFIFO;
+ break;
+
+ case SVGA_REG_CONFIG_DONE: /* Set when memory area configured */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegConfigDoneRd);
+ *pu32 = pThis->svga.fConfigured;
+ break;
+
+ case SVGA_REG_SYNC: /* See "FIFO Synchronization Registers" */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegSyncRd);
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_BUSY: /* See "FIFO Synchronization Registers" */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegBusyRd);
+ if (pThis->svga.fBusy)
+ {
+#ifndef IN_RING3
+ /* Go to ring-3 and halt the CPU. */
+ rc = VINF_IOM_R3_IOPORT_READ;
+ RT_NOREF(pDevIns);
+ break;
+#else /* IN_RING3 */
+# if defined(VMSVGA_USE_EMT_HALT_CODE)
+ /* The guest is basically doing a HLT via the device here, but with
+ a special wake up condition on FIFO completion. */
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ STAM_REL_PROFILE_START(&pSVGAState->StatBusyDelayEmts, EmtDelay);
+ VMCPUID idCpu = PDMDevHlpGetCurrentCpuId(pDevIns);
+ VMCPUSET_ATOMIC_ADD(&pSVGAState->BusyDelayedEmts, idCpu);
+ ASMAtomicIncU32(&pSVGAState->cBusyDelayedEmts);
+ if (pThis->svga.fBusy)
+ {
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect); /* hack around lock order issue. */
+ rc = PDMDevHlpVMWaitForDeviceReady(pDevIns, idCpu);
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+ }
+ ASMAtomicDecU32(&pSVGAState->cBusyDelayedEmts);
+ VMCPUSET_ATOMIC_DEL(&pSVGAState->BusyDelayedEmts, idCpu);
+# else
+
+ /* Delay the EMT a bit so the FIFO and others can get some work done.
+ This used to be a crude 50 ms sleep. The current code tries to be
+ more efficient, but the consept is still very crude. */
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ STAM_REL_PROFILE_START(&pSVGAState->StatBusyDelayEmts, EmtDelay);
+ RTThreadYield();
+ if (pThis->svga.fBusy)
+ {
+ uint32_t cRefs = ASMAtomicIncU32(&pSVGAState->cBusyDelayedEmts);
+
+ if (pThis->svga.fBusy && cRefs == 1)
+ RTSemEventMultiReset(pSVGAState->hBusyDelayedEmts);
+ if (pThis->svga.fBusy)
+ {
+ /** @todo If this code is going to stay, we need to call into the halt/wait
+ * code in VMEmt.cpp here, otherwise all kind of EMT interaction will
+ * suffer when the guest is polling on a busy FIFO. */
+ uint64_t uIgnored1, uIgnored2;
+ uint64_t cNsMaxWait = TMVirtualSyncGetNsToDeadline(PDMDevHlpGetVM(pDevIns), &uIgnored1, &uIgnored2);
+ if (cNsMaxWait >= RT_NS_100US)
+ RTSemEventMultiWaitEx(pSVGAState->hBusyDelayedEmts,
+ RTSEMWAIT_FLAGS_NANOSECS | RTSEMWAIT_FLAGS_RELATIVE | RTSEMWAIT_FLAGS_NORESUME,
+ RT_MIN(cNsMaxWait, RT_NS_10MS));
+ }
+
+ ASMAtomicDecU32(&pSVGAState->cBusyDelayedEmts);
+ }
+ STAM_REL_PROFILE_STOP(&pSVGAState->StatBusyDelayEmts, EmtDelay);
+# endif
+ *pu32 = pThis->svga.fBusy != 0;
+#endif /* IN_RING3 */
+ }
+ else
+ *pu32 = false;
+ break;
+
+ case SVGA_REG_GUEST_ID: /* Set guest OS identifier */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGuestIdRd);
+ *pu32 = pThis->svga.u32GuestId;
+ break;
+
+ case SVGA_REG_SCRATCH_SIZE: /* Number of scratch registers */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegScratchSizeRd);
+ *pu32 = pThis->svga.cScratchRegion;
+ break;
+
+ case SVGA_REG_MEM_REGS: /* Number of FIFO registers */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemRegsRd);
+ *pu32 = SVGA_FIFO_NUM_REGS;
+ break;
+
+ case SVGA_REG_PITCHLOCK: /* Fixed pitch for all modes */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegPitchLockRd);
+ *pu32 = pThis->svga.u32PitchLock;
+ break;
+
+ case SVGA_REG_IRQMASK: /* Interrupt mask */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegIrqMaskRd);
+ *pu32 = pThis->svga.u32IrqMask;
+ break;
+
+ /* See "Guest memory regions" below. */
+ case SVGA_REG_GMR_ID:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrIdRd);
+ *pu32 = pThis->svga.u32CurrentGMRId;
+ break;
+
+ case SVGA_REG_GMR_DESCRIPTOR:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegWriteOnlyRd);
+ /* Write only */
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_GMR_MAX_IDS:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrMaxIdsRd);
+ *pu32 = pThis->svga.cGMR;
+ break;
+
+ case SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrMaxDescriptorLengthRd);
+ *pu32 = VMSVGA_MAX_GMR_PAGES;
+ break;
+
+ case SVGA_REG_TRACES: /* Enable trace-based updates even when FIFO is on */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegTracesRd);
+ *pu32 = pThis->svga.fTraces;
+ break;
+
+ case SVGA_REG_GMRS_MAX_PAGES: /* Maximum number of 4KB pages for all GMRs */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrsMaxPagesRd);
+ *pu32 = VMSVGA_MAX_GMR_PAGES;
+ break;
+
+ case SVGA_REG_MEMORY_SIZE: /* Total dedicated device memory excluding FIFO */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemorySizeRd);
+ *pu32 = VMSVGA_SURFACE_SIZE;
+ break;
+
+ case SVGA_REG_TOP: /* Must be 1 more than the last register */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegTopRd);
+ break;
+
+ /* Mouse cursor support. */
+ case SVGA_REG_DEAD: /* SVGA_REG_CURSOR_ID */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorIdRd);
+ *pu32 = pThis->svga.uCursorID;
+ break;
+
+ case SVGA_REG_CURSOR_X:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorXRd);
+ *pu32 = pThis->svga.uCursorX;
+ break;
+
+ case SVGA_REG_CURSOR_Y:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorYRd);
+ *pu32 = pThis->svga.uCursorY;
+ break;
+
+ case SVGA_REG_CURSOR_ON:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorOnRd);
+ *pu32 = pThis->svga.uCursorOn;
+ break;
+
+ /* Legacy multi-monitor support */
+ case SVGA_REG_NUM_GUEST_DISPLAYS:/* Number of guest displays in X/Y direction */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumGuestDisplaysRd);
+ *pu32 = 1;
+ break;
+
+ case SVGA_REG_DISPLAY_ID: /* Display ID for the following display attributes */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIdRd);
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_DISPLAY_IS_PRIMARY:/* Whether this is a primary display */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIsPrimaryRd);
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_DISPLAY_POSITION_X:/* The display position x */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionXRd);
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_DISPLAY_POSITION_Y:/* The display position y */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionYRd);
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_DISPLAY_WIDTH: /* The display's width */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayWidthRd);
+ *pu32 = pThis->svga.uWidth;
+ break;
+
+ case SVGA_REG_DISPLAY_HEIGHT: /* The display's height */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayHeightRd);
+ *pu32 = pThis->svga.uHeight;
+ break;
+
+ case SVGA_REG_NUM_DISPLAYS: /* (Deprecated) */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumDisplaysRd);
+ /* We must return something sensible here otherwise the Linux driver
+ will take a legacy code path without 3d support. This number also
+ limits how many screens Linux guests will allow. */
+ *pu32 = pThis->cMonitors;
+ break;
+
+ /*
+ * SVGA_CAP_GBOBJECTS+ registers.
+ */
+ case SVGA_REG_COMMAND_LOW:
+ /* Lower 32 bits of command buffer physical address. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCommandLowRd);
+ *pu32 = pThis->svga.u32RegCommandLow;
+ break;
+
+ case SVGA_REG_COMMAND_HIGH:
+ /* Upper 32 bits of command buffer PA. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCommandHighRd);
+ *pu32 = pThis->svga.u32RegCommandHigh;
+ break;
+
+ case SVGA_REG_MAX_PRIMARY_BOUNDING_BOX_MEM:
+ /* Max primary (screen) memory. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMaxPrimBBMemRd);
+ *pu32 = pThis->vram_size; /** @todo Maybe half VRAM? */
+ break;
+
+ case SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB:
+ /* Suggested limit on mob mem (i.e. size of the guest mapped VRAM in KB) */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGBMemSizeRd);
+ *pu32 = pThis->vram_size / 1024;
+ break;
+
+ case SVGA_REG_DEV_CAP:
+ /* Write dev cap index, read value */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDevCapRd);
+ if (pThis->svga.u32DevCapIndex < RT_ELEMENTS(pThis->svga.au32DevCaps))
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ *pu32 = pThis->svga.au32DevCaps[pThis->svga.u32DevCapIndex];
+ }
+ else
+ *pu32 = 0;
+ break;
+
+ case SVGA_REG_CMD_PREPEND_LOW:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCmdPrependLowRd);
+ *pu32 = 0; /* Not supported. */
+ break;
+
+ case SVGA_REG_CMD_PREPEND_HIGH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCmdPrependHighRd);
+ *pu32 = 0; /* Not supported. */
+ break;
+
+ case SVGA_REG_SCREENTARGET_MAX_WIDTH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegScrnTgtMaxWidthRd);
+ *pu32 = pThis->svga.u32MaxWidth;
+ break;
+
+ case SVGA_REG_SCREENTARGET_MAX_HEIGHT:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegScrnTgtMaxHeightRd);
+ *pu32 = pThis->svga.u32MaxHeight;
+ break;
+
+ case SVGA_REG_MOB_MAX_SIZE:
+ /* Essentially the max texture size */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegMobMaxSizeRd);
+ *pu32 = _128M; /** @todo Some actual value. Probably the mapped VRAM size. */
+ break;
+
+ default:
+ {
+ uint32_t offReg;
+ if ((offReg = idxReg - SVGA_SCRATCH_BASE) < pThis->svga.cScratchRegion)
+ {
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegScratchRd);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ *pu32 = pThis->svga.au32ScratchRegion[offReg];
+ }
+ else if ((offReg = idxReg - SVGA_PALETTE_BASE) < (uint32_t)SVGA_NUM_PALETTE_REGS)
+ {
+ /* Note! Using last_palette rather than palette here to preserve the VGA one. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegPaletteRd);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ uint32_t u32 = pThis->last_palette[offReg / 3];
+ switch (offReg % 3)
+ {
+ case 0: *pu32 = (u32 >> 16) & 0xff; break; /* red */
+ case 1: *pu32 = (u32 >> 8) & 0xff; break; /* green */
+ case 2: *pu32 = u32 & 0xff; break; /* blue */
+ }
+ }
+ else
+ {
+#if !defined(IN_RING3) && defined(VBOX_STRICT)
+ rc = VINF_IOM_R3_IOPORT_READ;
+#else
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownRd);
+
+ /* Do not assert. The guest might be reading all registers. */
+ LogFunc(("Unknown reg=%#x\n", idxReg));
+#endif
+ }
+ break;
+ }
+ }
+ LogFlow(("vmsvgaReadPort index=%s (%d) val=%#x rc=%x\n", vmsvgaIndexToString(pThis, idxReg), idxReg, *pu32, rc));
+ return rc;
+}
+
+#ifdef IN_RING3
+/**
+ * Apply the current resolution settings to change the video mode.
+ *
+ * @returns VBox status code.
+ * @param pThis The shared VGA state.
+ * @param pThisCC The ring-3 VGA state.
+ */
+int vmsvgaR3ChangeMode(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ /* Always do changemode on FIFO thread. */
+ Assert(RTThreadSelf() == pThisCC->svga.pFIFOIOThread->Thread);
+
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ pThisCC->pDrv->pfnLFBModeChange(pThisCC->pDrv, true);
+
+ if (pThis->svga.fGFBRegisters)
+ {
+ /* "For backwards compatibility, when the GFB mode registers (WIDTH,
+ * HEIGHT, PITCHLOCK, BITS_PER_PIXEL) are modified, the SVGA device
+ * deletes all screens other than screen #0, and redefines screen
+ * #0 according to the specified mode. Drivers that use
+ * SVGA_CMD_DEFINE_SCREEN should destroy or redefine screen #0."
+ */
+
+ VMSVGASCREENOBJECT *pScreen = &pSVGAState->aScreens[0];
+ pScreen->fDefined = true;
+ pScreen->fModified = true;
+ pScreen->fuScreen = SVGA_SCREEN_MUST_BE_SET | SVGA_SCREEN_IS_PRIMARY;
+ pScreen->idScreen = 0;
+ pScreen->xOrigin = 0;
+ pScreen->yOrigin = 0;
+ pScreen->offVRAM = 0;
+ pScreen->cbPitch = pThis->svga.cbScanline;
+ pScreen->cWidth = pThis->svga.uWidth;
+ pScreen->cHeight = pThis->svga.uHeight;
+ pScreen->cBpp = pThis->svga.uBpp;
+
+ for (unsigned iScreen = 1; iScreen < RT_ELEMENTS(pSVGAState->aScreens); ++iScreen)
+ {
+ /* Delete screen. */
+ pScreen = &pSVGAState->aScreens[iScreen];
+ if (pScreen->fDefined)
+ {
+ pScreen->fModified = true;
+ pScreen->fDefined = false;
+ }
+ }
+ }
+ else
+ {
+ /* "If Screen Objects are supported, they can be used to fully
+ * replace the functionality provided by the framebuffer registers
+ * (SVGA_REG_WIDTH, HEIGHT, etc.) and by SVGA_CAP_DISPLAY_TOPOLOGY."
+ */
+ pThis->svga.uWidth = VMSVGA_VAL_UNINITIALIZED;
+ pThis->svga.uHeight = VMSVGA_VAL_UNINITIALIZED;
+ pThis->svga.uBpp = pThis->svga.uHostBpp;
+ }
+
+ vmsvgaR3VBVAResize(pThis, pThisCC);
+
+ /* Last stuff. For the VGA device screenshot. */
+ pThis->last_bpp = pSVGAState->aScreens[0].cBpp;
+ pThis->last_scr_width = pSVGAState->aScreens[0].cWidth;
+ pThis->last_scr_height = pSVGAState->aScreens[0].cHeight;
+ pThis->last_width = pSVGAState->aScreens[0].cWidth;
+ pThis->last_height = pSVGAState->aScreens[0].cHeight;
+
+ /* vmsvgaPortSetViewPort not called after state load; set sensible defaults. */
+ if ( pThis->svga.viewport.cx == 0
+ && pThis->svga.viewport.cy == 0)
+ {
+ pThis->svga.viewport.cx = pSVGAState->aScreens[0].cWidth;
+ pThis->svga.viewport.xRight = pSVGAState->aScreens[0].cWidth;
+ pThis->svga.viewport.cy = pSVGAState->aScreens[0].cHeight;
+ pThis->svga.viewport.yHighWC = pSVGAState->aScreens[0].cHeight;
+ pThis->svga.viewport.yLowWC = 0;
+ }
+
+ return VINF_SUCCESS;
+}
+
+int vmsvgaR3UpdateScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, int x, int y, int w, int h)
+{
+ ASSERT_GUEST_LOGREL_MSG_RETURN(w > 0 && h > 0,
+ ("vmsvgaR3UpdateScreen: screen %d (%d,%d) %dx%d: Invalid height and/or width supplied.\n",
+ pScreen->idScreen, x, y, w, h),
+ VERR_INVALID_PARAMETER);
+
+ VBVACMDHDR cmd;
+ cmd.x = (int16_t)(pScreen->xOrigin + x);
+ cmd.y = (int16_t)(pScreen->yOrigin + y);
+ cmd.w = (uint16_t)w;
+ cmd.h = (uint16_t)h;
+
+ pThisCC->pDrv->pfnVBVAUpdateBegin(pThisCC->pDrv, pScreen->idScreen);
+ pThisCC->pDrv->pfnVBVAUpdateProcess(pThisCC->pDrv, pScreen->idScreen, &cmd, sizeof(cmd));
+ pThisCC->pDrv->pfnVBVAUpdateEnd(pThisCC->pDrv, pScreen->idScreen,
+ pScreen->xOrigin + x, pScreen->yOrigin + y, w, h);
+
+ return VINF_SUCCESS;
+}
+
+#endif /* IN_RING3 */
+#if defined(IN_RING0) || defined(IN_RING3)
+
+/**
+ * Safely updates the SVGA_FIFO_BUSY register (in shared memory).
+ *
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param fState The busy state.
+ */
+DECLINLINE(void) vmsvgaHCSafeFifoBusyRegUpdate(PVGASTATE pThis, PVGASTATECC pThisCC, bool fState)
+{
+ ASMAtomicWriteU32(&pThisCC->svga.pau32FIFO[SVGA_FIFO_BUSY], fState);
+
+ if (RT_UNLIKELY(fState != (pThis->svga.fBusy != 0)))
+ {
+ /* Race / unfortunately scheduling. Highly unlikly. */
+ uint32_t cLoops = 64;
+ do
+ {
+ ASMNopPause();
+ fState = (pThis->svga.fBusy != 0);
+ ASMAtomicWriteU32(&pThisCC->svga.pau32FIFO[SVGA_FIFO_BUSY], fState != 0);
+ } while (cLoops-- > 0 && fState != (pThis->svga.fBusy != 0));
+ }
+}
+
+
+/**
+ * Update the scanline pitch in response to the guest changing mode
+ * width/bpp.
+ *
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ */
+DECLINLINE(void) vmsvgaHCUpdatePitch(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ uint32_t RT_UNTRUSTED_VOLATILE_GUEST *pFIFO = pThisCC->svga.pau32FIFO;
+ uint32_t uFifoPitchLock = pFIFO[SVGA_FIFO_PITCHLOCK];
+ uint32_t uRegPitchLock = pThis->svga.u32PitchLock;
+ uint32_t uFifoMin = pFIFO[SVGA_FIFO_MIN];
+
+ /* The SVGA_FIFO_PITCHLOCK register is only valid if SVGA_FIFO_MIN points past
+ * it. If SVGA_FIFO_MIN is small, there may well be data at the SVGA_FIFO_PITCHLOCK
+ * location but it has a different meaning.
+ */
+ if ((uFifoMin / sizeof(uint32_t)) <= SVGA_FIFO_PITCHLOCK)
+ uFifoPitchLock = 0;
+
+ /* Sanitize values. */
+ if ((uFifoPitchLock < 200) || (uFifoPitchLock > 32768))
+ uFifoPitchLock = 0;
+ if ((uRegPitchLock < 200) || (uRegPitchLock > 32768))
+ uRegPitchLock = 0;
+
+ /* Prefer the register value to the FIFO value.*/
+ if (uRegPitchLock)
+ pThis->svga.cbScanline = uRegPitchLock;
+ else if (uFifoPitchLock)
+ pThis->svga.cbScanline = uFifoPitchLock;
+ else
+ pThis->svga.cbScanline = (uint32_t)pThis->svga.uWidth * (RT_ALIGN(pThis->svga.uBpp, 8) / 8);
+
+ if ((uFifoMin / sizeof(uint32_t)) <= SVGA_FIFO_PITCHLOCK)
+ pThis->svga.u32PitchLock = pThis->svga.cbScanline;
+}
+
+#endif /* IN_RING0 || IN_RING3 */
+
+#ifdef IN_RING3
+
+/**
+ * Sends cursor position and visibility information from legacy
+ * SVGA registers to the front-end.
+ */
+static void vmsvgaR3RegUpdateCursor(PVGASTATECC pThisCC, PVGASTATE pThis, uint32_t uCursorOn)
+{
+ /*
+ * Writing the X/Y/ID registers does not trigger changes; only writing the
+ * SVGA_REG_CURSOR_ON register does. That minimizes the overhead.
+ * We boldly assume that guests aren't stupid and aren't writing the CURSOR_ON
+ * register if they don't have to.
+ */
+ uint32_t x, y, idScreen;
+ uint32_t fFlags = VBVA_CURSOR_VALID_DATA;
+
+ x = pThis->svga.uCursorX;
+ y = pThis->svga.uCursorY;
+ idScreen = SVGA_ID_INVALID; /* The old register interface is single screen only. */
+
+ /* The original values for SVGA_REG_CURSOR_ON were off (0) and on (1); later, the values
+ * were extended as follows:
+ *
+ * SVGA_CURSOR_ON_HIDE 0
+ * SVGA_CURSOR_ON_SHOW 1
+ * SVGA_CURSOR_ON_REMOVE_FROM_FB 2 - cursor on but not in the framebuffer
+ * SVGA_CURSOR_ON_RESTORE_TO_FB 3 - cursor on, possibly in the framebuffer
+ *
+ * Since we never draw the cursor into the guest's framebuffer, we do not need to
+ * distinguish between the non-zero values but still remember them.
+ */
+ if (RT_BOOL(pThis->svga.uCursorOn) != RT_BOOL(uCursorOn))
+ {
+ LogRel2(("vmsvgaR3RegUpdateCursor: uCursorOn %d prev CursorOn %d (%d,%d)\n", uCursorOn, pThis->svga.uCursorOn, x, y));
+ pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv, RT_BOOL(uCursorOn), false, 0, 0, 0, 0, NULL);
+ }
+ pThis->svga.uCursorOn = uCursorOn;
+ pThisCC->pDrv->pfnVBVAReportCursorPosition(pThisCC->pDrv, fFlags, idScreen, x, y);
+}
+
+#endif /* IN_RING3 */
+
+
+/**
+ * Write port register
+ *
+ * @returns Strict VBox status code.
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param u32 Value to write
+ */
+static VBOXSTRICTRC vmsvgaWritePort(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t u32)
+{
+#ifdef IN_RING3
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+#endif
+ VBOXSTRICTRC rc = VINF_SUCCESS;
+ RT_NOREF(pThisCC);
+
+ /* Rough index register validation. */
+ uint32_t idxReg = pThis->svga.u32IndexReg;
+#if !defined(IN_RING3) && defined(VBOX_STRICT)
+ ASSERT_GUEST_MSG_RETURN(idxReg < SVGA_SCRATCH_BASE + pThis->svga.cScratchRegion, ("idxReg=%#x\n", idxReg),
+ VINF_IOM_R3_IOPORT_WRITE);
+#else
+ ASSERT_GUEST_MSG_STMT_RETURN(idxReg < SVGA_SCRATCH_BASE + pThis->svga.cScratchRegion, ("idxReg=%#x\n", idxReg),
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownWr),
+ VINF_SUCCESS);
+#endif
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* We must adjust the register number if we're in SVGA_ID_0 mode because the PALETTE range moved. */
+ if ( idxReg >= SVGA_REG_ID_0_TOP
+ && pThis->svga.u32SVGAId == SVGA_ID_0)
+ {
+ idxReg += SVGA_PALETTE_BASE - SVGA_REG_ID_0_TOP;
+ Log(("vmsvgaWritePort: SVGA_ID_0 reg adj %#x -> %#x\n", pThis->svga.u32IndexReg, idxReg));
+ }
+#ifdef LOG_ENABLED
+ if (idxReg != SVGA_REG_DEV_CAP)
+ LogFlow(("vmsvgaWritePort index=%s (%d) val=%#x\n", vmsvgaIndexToString(pThis, idxReg), idxReg, u32));
+ else
+ LogFlow(("vmsvgaWritePort index=%s (%d) val=%s (%d)\n", vmsvgaIndexToString(pThis, idxReg), idxReg, vmsvgaDevCapIndexToString((SVGA3dDevCapIndex)u32), u32));
+#endif
+ /* Check if the guest uses legacy registers. See vmsvgaR3ChangeMode */
+ switch (idxReg)
+ {
+ case SVGA_REG_WIDTH:
+ case SVGA_REG_HEIGHT:
+ case SVGA_REG_PITCHLOCK:
+ case SVGA_REG_BITS_PER_PIXEL:
+ pThis->svga.fGFBRegisters = true;
+ break;
+ default:
+ break;
+ }
+
+ switch (idxReg)
+ {
+ case SVGA_REG_ID:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegIdWr);
+ if ( u32 == SVGA_ID_0
+ || u32 == SVGA_ID_1
+ || u32 == SVGA_ID_2)
+ pThis->svga.u32SVGAId = u32;
+ else
+ PDMDevHlpDBGFStop(pDevIns, RT_SRC_POS, "Trying to set SVGA_REG_ID to %#x (%d)\n", u32, u32);
+ break;
+
+ case SVGA_REG_ENABLE:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegEnableWr);
+#ifdef IN_RING3
+ if ( (u32 & SVGA_REG_ENABLE_ENABLE)
+ && pThis->svga.fEnabled == false)
+ {
+ /* Make a backup copy of the first 512kb in order to save font data etc. */
+ /** @todo should probably swap here, rather than copy + zero */
+ memcpy(pThisCC->svga.pbVgaFrameBufferR3, pThisCC->pbVRam, VMSVGA_VGA_FB_BACKUP_SIZE);
+ memset(pThisCC->pbVRam, 0, VMSVGA_VGA_FB_BACKUP_SIZE);
+ }
+
+ pThis->svga.fEnabled = u32;
+ if (pThis->svga.fEnabled)
+ {
+ if ( pThis->svga.uWidth == VMSVGA_VAL_UNINITIALIZED
+ && pThis->svga.uHeight == VMSVGA_VAL_UNINITIALIZED)
+ {
+ /* Keep the current mode. */
+ pThis->svga.uWidth = pThisCC->pDrv->cx;
+ pThis->svga.uHeight = pThisCC->pDrv->cy;
+ pThis->svga.uBpp = (pThisCC->pDrv->cBits + 7) & ~7;
+ vmsvgaHCUpdatePitch(pThis, pThisCC);
+ }
+
+ if ( pThis->svga.uWidth != VMSVGA_VAL_UNINITIALIZED
+ && pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
+ ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
+# ifdef LOG_ENABLED
+ uint32_t *pFIFO = pThisCC->svga.pau32FIFO;
+ Log(("configured=%d busy=%d\n", pThis->svga.fConfigured, pFIFO[SVGA_FIFO_BUSY]));
+ Log(("next %x stop %x\n", pFIFO[SVGA_FIFO_NEXT_CMD], pFIFO[SVGA_FIFO_STOP]));
+# endif
+
+ /* Disable or enable dirty page tracking according to the current fTraces value. */
+ vmsvgaR3SetTraces(pDevIns, pThis, !!pThis->svga.fTraces);
+
+ /* bird: Whatever this is was added to make screenshot work, ask sunlover should explain... */
+ for (uint32_t idScreen = 0; idScreen < pThis->cMonitors; ++idScreen)
+ pThisCC->pDrv->pfnVBVAEnable(pThisCC->pDrv, idScreen, NULL /*pHostFlags*/);
+
+ /* Make the cursor visible again as needed. */
+ if (pSVGAState->Cursor.fActive)
+ pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv, true /*fVisible*/, false, 0, 0, 0, 0, NULL);
+ }
+ else
+ {
+ /* Make sure the cursor is off. */
+ if (pSVGAState->Cursor.fActive)
+ pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv, false /*fVisible*/, false, 0, 0, 0, 0, NULL);
+
+ /* Restore the text mode backup. */
+ memcpy(pThisCC->pbVRam, pThisCC->svga.pbVgaFrameBufferR3, VMSVGA_VGA_FB_BACKUP_SIZE);
+
+ pThisCC->pDrv->pfnLFBModeChange(pThisCC->pDrv, false);
+
+ /* Enable dirty page tracking again when going into legacy mode. */
+ vmsvgaR3SetTraces(pDevIns, pThis, true);
+
+ /* bird: Whatever this is was added to make screenshot work, ask sunlover should explain... */
+ for (uint32_t idScreen = 0; idScreen < pThis->cMonitors; ++idScreen)
+ pThisCC->pDrv->pfnVBVADisable(pThisCC->pDrv, idScreen);
+
+ /* Clear the pitch lock. */
+ pThis->svga.u32PitchLock = 0;
+ }
+#else /* !IN_RING3 */
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif /* !IN_RING3 */
+ break;
+
+ case SVGA_REG_WIDTH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegWidthWr);
+ if (u32 != pThis->svga.uWidth)
+ {
+ if (u32 <= pThis->svga.u32MaxWidth)
+ {
+#if defined(IN_RING3) || defined(IN_RING0)
+ pThis->svga.uWidth = u32;
+ vmsvgaHCUpdatePitch(pThis, pThisCC);
+ if (pThis->svga.fEnabled)
+ ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ }
+ else
+ Log(("SVGA_REG_WIDTH: New value is out of bounds: %u, max %u\n", u32, pThis->svga.u32MaxWidth));
+ }
+ /* else: nop */
+ break;
+
+ case SVGA_REG_HEIGHT:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegHeightWr);
+ if (u32 != pThis->svga.uHeight)
+ {
+ if (u32 <= pThis->svga.u32MaxHeight)
+ {
+ pThis->svga.uHeight = u32;
+ if (pThis->svga.fEnabled)
+ ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
+ }
+ else
+ Log(("SVGA_REG_HEIGHT: New value is out of bounds: %u, max %u\n", u32, pThis->svga.u32MaxHeight));
+ }
+ /* else: nop */
+ break;
+
+ case SVGA_REG_DEPTH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDepthWr);
+ /** @todo read-only?? */
+ break;
+
+ case SVGA_REG_BITS_PER_PIXEL: /* Current bpp in the guest */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegBitsPerPixelWr);
+ if (pThis->svga.uBpp != u32)
+ {
+ if (u32 <= 32)
+ {
+#if defined(IN_RING3) || defined(IN_RING0)
+ pThis->svga.uBpp = u32;
+ vmsvgaHCUpdatePitch(pThis, pThisCC);
+ if (pThis->svga.fEnabled)
+ ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ }
+ else
+ Log(("SVGA_REG_BITS_PER_PIXEL: New value is out of bounds: %u, max 32\n", u32));
+ }
+ /* else: nop */
+ break;
+
+ case SVGA_REG_PSEUDOCOLOR:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegPseudoColorWr);
+ break;
+
+ case SVGA_REG_CONFIG_DONE: /* Set when memory area configured */
+#ifdef IN_RING3
+ STAM_REL_COUNTER_INC(&pSVGAState->StatR3RegConfigDoneWr);
+ pThis->svga.fConfigured = u32;
+ /* Disabling the FIFO enables tracing (dirty page detection) by default. */
+ if (!pThis->svga.fConfigured)
+ pThis->svga.fTraces = true;
+ vmsvgaR3SetTraces(pDevIns, pThis, !!pThis->svga.fTraces);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ break;
+
+ case SVGA_REG_SYNC: /* See "FIFO Synchronization Registers" */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegSyncWr);
+ if ( pThis->svga.fEnabled
+ && pThis->svga.fConfigured)
+ {
+#if defined(IN_RING3) || defined(IN_RING0)
+ Log(("SVGA_REG_SYNC: SVGA_FIFO_BUSY=%d\n", pThisCC->svga.pau32FIFO[SVGA_FIFO_BUSY]));
+ /*
+ * The VMSVGA_BUSY_F_EMT_FORCE flag makes sure we will check if the FIFO is empty
+ * at least once; VMSVGA_BUSY_F_FIFO alone does not ensure that.
+ */
+ ASMAtomicWriteU32(&pThis->svga.fBusy, VMSVGA_BUSY_F_EMT_FORCE | VMSVGA_BUSY_F_FIFO);
+ if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_BUSY, pThisCC->svga.pau32FIFO[SVGA_FIFO_MIN]))
+ vmsvgaHCSafeFifoBusyRegUpdate(pThis, pThisCC, true);
+
+ /* Kick the FIFO thread to start processing commands again. */
+ PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ }
+ /* else nothing to do. */
+ else
+ Log(("Sync ignored enabled=%d configured=%d\n", pThis->svga.fEnabled, pThis->svga.fConfigured));
+
+ break;
+
+ case SVGA_REG_BUSY: /* See "FIFO Synchronization Registers" (read-only) */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegBusyWr);
+ break;
+
+ case SVGA_REG_GUEST_ID: /* Set guest OS identifier */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGuestIdWr);
+ pThis->svga.u32GuestId = u32;
+ break;
+
+ case SVGA_REG_PITCHLOCK: /* Fixed pitch for all modes */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegPitchLockWr);
+ pThis->svga.u32PitchLock = u32;
+ /* Should this also update the FIFO pitch lock? Unclear. */
+ break;
+
+ case SVGA_REG_IRQMASK: /* Interrupt mask */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegIrqMaskWr);
+ pThis->svga.u32IrqMask = u32;
+
+ /* Irq pending after the above change? */
+ if (pThis->svga.u32IrqStatus & u32)
+ {
+ Log(("SVGA_REG_IRQMASK: Trigger interrupt with status %x\n", pThis->svga.u32IrqStatus));
+ PDMDevHlpPCISetIrqNoWait(pDevIns, 0, 1);
+ }
+ else
+ PDMDevHlpPCISetIrqNoWait(pDevIns, 0, 0);
+ break;
+
+ /* Mouse cursor support */
+ case SVGA_REG_DEAD: /* SVGA_REG_CURSOR_ID */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorIdWr);
+ pThis->svga.uCursorID = u32;
+ break;
+
+ case SVGA_REG_CURSOR_X:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorXWr);
+ pThis->svga.uCursorX = u32;
+ break;
+
+ case SVGA_REG_CURSOR_Y:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorYWr);
+ pThis->svga.uCursorY = u32;
+ break;
+
+ case SVGA_REG_CURSOR_ON:
+#ifdef IN_RING3
+ /* The cursor is only updated when SVGA_REG_CURSOR_ON is written. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorOnWr);
+ vmsvgaR3RegUpdateCursor(pThisCC, pThis, u32);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ break;
+
+ /* Legacy multi-monitor support */
+ case SVGA_REG_NUM_GUEST_DISPLAYS:/* Number of guest displays in X/Y direction */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumGuestDisplaysWr);
+ break;
+ case SVGA_REG_DISPLAY_ID: /* Display ID for the following display attributes */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIdWr);
+ break;
+ case SVGA_REG_DISPLAY_IS_PRIMARY:/* Whether this is a primary display */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIsPrimaryWr);
+ break;
+ case SVGA_REG_DISPLAY_POSITION_X:/* The display position x */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionXWr);
+ break;
+ case SVGA_REG_DISPLAY_POSITION_Y:/* The display position y */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionYWr);
+ break;
+ case SVGA_REG_DISPLAY_WIDTH: /* The display's width */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayWidthWr);
+ break;
+ case SVGA_REG_DISPLAY_HEIGHT: /* The display's height */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayHeightWr);
+ break;
+#ifdef VBOX_WITH_VMSVGA3D
+ /* See "Guest memory regions" below. */
+ case SVGA_REG_GMR_ID:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrIdWr);
+ pThis->svga.u32CurrentGMRId = u32;
+ break;
+
+ case SVGA_REG_GMR_DESCRIPTOR:
+# ifndef IN_RING3
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+ break;
+# else /* IN_RING3 */
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatR3RegGmrDescriptorWr);
+
+ /* Validate current GMR id. */
+ uint32_t idGMR = pThis->svga.u32CurrentGMRId;
+ AssertBreak(idGMR < pThis->svga.cGMR);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Free the old GMR if present. */
+ vmsvgaR3GmrFree(pThisCC, idGMR);
+
+ /* Just undefine the GMR? */
+ RTGCPHYS GCPhys = (RTGCPHYS)u32 << GUEST_PAGE_SHIFT;
+ if (GCPhys == 0)
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatR3RegGmrDescriptorWrFree);
+ break;
+ }
+
+
+ /* Never cross a page boundary automatically. */
+ const uint32_t cMaxPages = RT_MIN(VMSVGA_MAX_GMR_PAGES, UINT32_MAX / X86_PAGE_SIZE);
+ uint32_t cPagesTotal = 0;
+ uint32_t iDesc = 0;
+ PVMSVGAGMRDESCRIPTOR paDescs = NULL;
+ uint32_t cLoops = 0;
+ RTGCPHYS GCPhysBase = GCPhys;
+ while ((GCPhys >> GUEST_PAGE_SHIFT) == (GCPhysBase >> GUEST_PAGE_SHIFT))
+ {
+ /* Read descriptor. */
+ SVGAGuestMemDescriptor desc;
+ rc = PDMDevHlpPCIPhysRead(pDevIns, GCPhys, &desc, sizeof(desc));
+ AssertRCBreak(VBOXSTRICTRC_VAL(rc));
+
+ if (desc.numPages != 0)
+ {
+ AssertBreakStmt(desc.numPages <= cMaxPages, rc = VERR_OUT_OF_RANGE);
+ cPagesTotal += desc.numPages;
+ AssertBreakStmt(cPagesTotal <= cMaxPages, rc = VERR_OUT_OF_RANGE);
+
+ if ((iDesc & 15) == 0)
+ {
+ void *pvNew = RTMemRealloc(paDescs, (iDesc + 16) * sizeof(VMSVGAGMRDESCRIPTOR));
+ AssertBreakStmt(pvNew, rc = VERR_NO_MEMORY);
+ paDescs = (PVMSVGAGMRDESCRIPTOR)pvNew;
+ }
+
+ paDescs[iDesc].GCPhys = (RTGCPHYS)desc.ppn << GUEST_PAGE_SHIFT;
+ paDescs[iDesc++].numPages = desc.numPages;
+
+ /* Continue with the next descriptor. */
+ GCPhys += sizeof(desc);
+ }
+ else if (desc.ppn == 0)
+ break; /* terminator */
+ else /* Pointer to the next physical page of descriptors. */
+ GCPhys = GCPhysBase = (RTGCPHYS)desc.ppn << GUEST_PAGE_SHIFT;
+
+ cLoops++;
+ AssertBreakStmt(cLoops < VMSVGA_MAX_GMR_DESC_LOOP_COUNT, rc = VERR_OUT_OF_RANGE);
+ }
+
+ AssertStmt(iDesc > 0 || RT_FAILURE_NP(rc), rc = VERR_OUT_OF_RANGE);
+ if (RT_SUCCESS(rc))
+ {
+ /* Commit the GMR. */
+ pSVGAState->paGMR[idGMR].paDesc = paDescs;
+ pSVGAState->paGMR[idGMR].numDescriptors = iDesc;
+ pSVGAState->paGMR[idGMR].cMaxPages = cPagesTotal;
+ pSVGAState->paGMR[idGMR].cbTotal = cPagesTotal * GUEST_PAGE_SIZE;
+ Assert((pSVGAState->paGMR[idGMR].cbTotal >> GUEST_PAGE_SHIFT) == cPagesTotal);
+ Log(("Defined new gmr %x numDescriptors=%d cbTotal=%x (%#x pages)\n",
+ idGMR, iDesc, pSVGAState->paGMR[idGMR].cbTotal, cPagesTotal));
+ }
+ else
+ {
+ RTMemFree(paDescs);
+ STAM_REL_COUNTER_INC(&pSVGAState->StatR3RegGmrDescriptorWrErrors);
+ }
+ break;
+ }
+# endif /* IN_RING3 */
+#endif // VBOX_WITH_VMSVGA3D
+
+ case SVGA_REG_TRACES: /* Enable trace-based updates even when FIFO is on */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegTracesWr);
+ if (pThis->svga.fTraces == u32)
+ break; /* nothing to do */
+
+#ifdef IN_RING3
+ vmsvgaR3SetTraces(pDevIns, pThis, !!u32);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ break;
+
+ case SVGA_REG_TOP: /* Must be 1 more than the last register */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegTopWr);
+ break;
+
+ case SVGA_REG_NUM_DISPLAYS: /* (Deprecated) */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumDisplaysWr);
+ Log(("Write to deprecated register %x - val %x ignored\n", idxReg, u32));
+ break;
+
+ /*
+ * SVGA_CAP_GBOBJECTS+ registers.
+ */
+ case SVGA_REG_COMMAND_LOW:
+ {
+ /* Lower 32 bits of command buffer physical address and submit the command buffer. */
+#ifdef IN_RING3
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCommandLowWr);
+ pThis->svga.u32RegCommandLow = u32;
+
+ /* "lower 6 bits are used for the SVGACBContext" */
+ RTGCPHYS GCPhysCB = pThis->svga.u32RegCommandHigh;
+ GCPhysCB <<= 32;
+ GCPhysCB |= pThis->svga.u32RegCommandLow & ~SVGA_CB_CONTEXT_MASK;
+ SVGACBContext const CBCtx = (SVGACBContext)(pThis->svga.u32RegCommandLow & SVGA_CB_CONTEXT_MASK);
+ vmsvgaR3CmdBufSubmit(pDevIns, pThis, pThisCC, GCPhysCB, CBCtx);
+#else
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#endif
+ break;
+ }
+
+ case SVGA_REG_COMMAND_HIGH:
+ /* Upper 32 bits of command buffer PA. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCommandHighWr);
+ pThis->svga.u32RegCommandHigh = u32;
+ break;
+
+ case SVGA_REG_DEV_CAP:
+ /* Write dev cap index, read value */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegDevCapWr);
+ pThis->svga.u32DevCapIndex = u32;
+ break;
+
+ case SVGA_REG_CMD_PREPEND_LOW:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCmdPrependLowWr);
+ /* Not supported. */
+ break;
+
+ case SVGA_REG_CMD_PREPEND_HIGH:
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegCmdPrependHighWr);
+ /* Not supported. */
+ break;
+
+ case SVGA_REG_FB_START:
+ case SVGA_REG_MEM_START:
+ case SVGA_REG_HOST_BITS_PER_PIXEL:
+ case SVGA_REG_MAX_WIDTH:
+ case SVGA_REG_MAX_HEIGHT:
+ case SVGA_REG_VRAM_SIZE:
+ case SVGA_REG_FB_SIZE:
+ case SVGA_REG_CAPABILITIES:
+ case SVGA_REG_MEM_SIZE:
+ case SVGA_REG_SCRATCH_SIZE: /* Number of scratch registers */
+ case SVGA_REG_MEM_REGS: /* Number of FIFO registers */
+ case SVGA_REG_BYTES_PER_LINE:
+ case SVGA_REG_FB_OFFSET:
+ case SVGA_REG_RED_MASK:
+ case SVGA_REG_GREEN_MASK:
+ case SVGA_REG_BLUE_MASK:
+ case SVGA_REG_GMRS_MAX_PAGES: /* Maximum number of 4KB pages for all GMRs */
+ case SVGA_REG_MEMORY_SIZE: /* Total dedicated device memory excluding FIFO */
+ case SVGA_REG_GMR_MAX_IDS:
+ case SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH:
+ case SVGA_REG_MAX_PRIMARY_BOUNDING_BOX_MEM:
+ case SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB:
+ case SVGA_REG_SCREENTARGET_MAX_WIDTH:
+ case SVGA_REG_SCREENTARGET_MAX_HEIGHT:
+ case SVGA_REG_MOB_MAX_SIZE:
+ /* Read only - ignore. */
+ Log(("Write to R/O register %x - val %x ignored\n", idxReg, u32));
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegReadOnlyWr);
+ break;
+
+ default:
+ {
+ uint32_t offReg;
+ if ((offReg = idxReg - SVGA_SCRATCH_BASE) < pThis->svga.cScratchRegion)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ pThis->svga.au32ScratchRegion[offReg] = u32;
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegScratchWr);
+ }
+ else if ((offReg = idxReg - SVGA_PALETTE_BASE) < (uint32_t)SVGA_NUM_PALETTE_REGS)
+ {
+ /* Note! Using last_palette rather than palette here to preserve the VGA one.
+ Btw, see rgb_to_pixel32. */
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegPaletteWr);
+ u32 &= 0xff;
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ uint32_t uRgb = pThis->last_palette[offReg / 3];
+ switch (offReg % 3)
+ {
+ case 0: uRgb = (uRgb & UINT32_C(0x0000ffff)) | (u32 << 16); break; /* red */
+ case 1: uRgb = (uRgb & UINT32_C(0x00ff00ff)) | (u32 << 8); break; /* green */
+ case 2: uRgb = (uRgb & UINT32_C(0x00ffff00)) | u32 ; break; /* blue */
+ }
+ pThis->last_palette[offReg / 3] = uRgb;
+ }
+ else
+ {
+#if !defined(IN_RING3) && defined(VBOX_STRICT)
+ rc = VINF_IOM_R3_IOPORT_WRITE;
+#else
+ STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownWr);
+ AssertMsgFailed(("reg=%#x u32=%#x\n", idxReg, u32));
+#endif
+ }
+ break;
+ }
+ }
+ return rc;
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN}
+ */
+DECLCALLBACK(VBOXSTRICTRC) vmsvgaIORead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ RT_NOREF_PV(pvUser);
+
+ /* Only dword accesses. */
+ if (cb == 4)
+ {
+ switch (offPort)
+ {
+ case SVGA_INDEX_PORT:
+ *pu32 = pThis->svga.u32IndexReg;
+ break;
+
+ case SVGA_VALUE_PORT:
+ return vmsvgaReadPort(pDevIns, pThis, pu32);
+
+ case SVGA_BIOS_PORT:
+ Log(("Ignoring BIOS port read\n"));
+ *pu32 = 0;
+ break;
+
+ case SVGA_IRQSTATUS_PORT:
+ LogFlow(("vmsvgaIORead: SVGA_IRQSTATUS_PORT %x\n", pThis->svga.u32IrqStatus));
+ *pu32 = pThis->svga.u32IrqStatus;
+ break;
+
+ default:
+ ASSERT_GUEST_MSG_FAILED(("vmsvgaIORead: Unknown register %u was read from.\n", offPort));
+ *pu32 = UINT32_MAX;
+ break;
+ }
+ }
+ else
+ {
+ Log(("Ignoring non-dword I/O port read at %x cb=%d\n", offPort, cb));
+ *pu32 = UINT32_MAX;
+ }
+ return VINF_SUCCESS;
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT}
+ */
+DECLCALLBACK(VBOXSTRICTRC) vmsvgaIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ RT_NOREF_PV(pvUser);
+
+ /* Only dword accesses. */
+ if (cb == 4)
+ switch (offPort)
+ {
+ case SVGA_INDEX_PORT:
+ pThis->svga.u32IndexReg = u32;
+ break;
+
+ case SVGA_VALUE_PORT:
+ return vmsvgaWritePort(pDevIns, pThis, pThisCC, u32);
+
+ case SVGA_BIOS_PORT:
+ Log(("Ignoring BIOS port write (val=%x)\n", u32));
+ break;
+
+ case SVGA_IRQSTATUS_PORT:
+ LogFlow(("vmsvgaIOWrite SVGA_IRQSTATUS_PORT %x: status %x -> %x\n", u32, pThis->svga.u32IrqStatus, pThis->svga.u32IrqStatus & ~u32));
+ ASMAtomicAndU32(&pThis->svga.u32IrqStatus, ~u32);
+ /* Clear the irq in case all events have been cleared. */
+ if (!(pThis->svga.u32IrqStatus & pThis->svga.u32IrqMask))
+ {
+ Log(("vmsvgaIOWrite SVGA_IRQSTATUS_PORT: clearing IRQ\n"));
+ PDMDevHlpPCISetIrqNoWait(pDevIns, 0, 0);
+ }
+ break;
+
+ default:
+ ASSERT_GUEST_MSG_FAILED(("vmsvgaIOWrite: Unknown register %u was written to, value %#x LB %u.\n", offPort, u32, cb));
+ break;
+ }
+ else
+ Log(("Ignoring non-dword write at %x val=%x cb=%d\n", offPort, u32, cb));
+
+ return VINF_SUCCESS;
+}
+
+#ifdef IN_RING3
+
+# ifdef DEBUG_FIFO_ACCESS
+/**
+ * Handle FIFO memory access.
+ * @returns VBox status code.
+ * @param pVM VM handle.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param GCPhys The access physical address.
+ * @param fWriteAccess Read or write access
+ */
+static int vmsvgaR3DebugFifoAccess(PVM pVM, PVGASTATE pThis, RTGCPHYS GCPhys, bool fWriteAccess)
+{
+ RT_NOREF(pVM);
+ RTGCPHYS GCPhysOffset = GCPhys - pThis->svga.GCPhysFIFO;
+ uint32_t *pFIFO = pThisCC->svga.pau32FIFO;
+
+ switch (GCPhysOffset >> 2)
+ {
+ case SVGA_FIFO_MIN:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_MIN = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_MAX:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_MAX = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_NEXT_CMD:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_NEXT_CMD = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_STOP:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_STOP = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CAPABILITIES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CAPABILITIES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_FLAGS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_FLAGS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_FENCE:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_FENCE = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_HWVERSION:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_HWVERSION = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_PITCHLOCK:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_PITCHLOCK = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CURSOR_ON:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CURSOR_ON = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CURSOR_X:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CURSOR_X = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CURSOR_Y:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CURSOR_Y = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CURSOR_COUNT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CURSOR_COUNT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CURSOR_LAST_UPDATED:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CURSOR_LAST_UPDATED = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_RESERVED:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_RESERVED = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_CURSOR_SCREEN_ID:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_CURSOR_SCREEN_ID = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_DEAD:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_DEAD = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_HWVERSION_REVISED:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_HWVERSION_REVISED = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_3D:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_3D = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_LIGHTS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_LIGHTS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_TEXTURES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_TEXTURES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_CLIP_PLANES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_VERTEX_SHADER_VERSION = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_VERTEX_SHADER:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_VERTEX_SHADER = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_FRAGMENT_SHADER:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_FRAGMENT_SHADER = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_RENDER_TARGETS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_RENDER_TARGETS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_S23E8_TEXTURES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_S23E8_TEXTURES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_S10E5_TEXTURES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_S10E5_TEXTURES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_D16_BUFFER_FORMAT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_QUERY_TYPES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_QUERY_TYPES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_POINT_SIZE:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_POINT_SIZE = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_SHADER_TEXTURES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_VOLUME_EXTENT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_VERTEX_INDEX = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_TEXTURE_OPS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_TEXTURE_OPS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_ALPHA8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Z_D16 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_DXT1 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_DXT2 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_DXT3 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_DXT4 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_DXT5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_CxV8U8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_R_S10E5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_R_S23E8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_V16U16 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_G16R16 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_UYVY = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_YUY2 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_DEAD4: /* SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES */
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_DEAD4 (SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES) = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_DEAD5: /* SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES */
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_DEAD5 (SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES) = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_DEAD7: /* SVGA3D_DEVCAP_ALPHATOCOVERAGE */
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_DEAD7 (SVGA3D_DEVCAP_ALPHATOCOVERAGE) = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_DEAD6: /* SVGA3D_DEVCAP_SUPERSAMPLE */
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_DEAD6 (SVGA3D_DEVCAP_SUPERSAMPLE) = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_AUTOGENMIPMAPS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_NV12:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_NV12 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_DEAD10: /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_DEAD10 (SVGA3D_DEVCAP_SURFACEFMT_AYUV) = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_CONTEXT_IDS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_MAX_SURFACE_IDS = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Z_DF16 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Z_DF24 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_ATI1:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_ATI1 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS + SVGA3D_DEVCAP_SURFACEFMT_ATI2:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS SVGA3D_DEVCAP_SURFACEFMT_ATI2 = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_3D_CAPS_LAST:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_3D_CAPS_LAST = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_GUEST_3D_HWVERSION:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_GUEST_3D_HWVERSION = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_FENCE_GOAL:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_FENCE_GOAL = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ case SVGA_FIFO_BUSY:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s SVGA_FIFO_BUSY = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", pFIFO[GCPhysOffset >> 2]));
+ break;
+ default:
+ Log(("vmsvgaFIFOAccess [0x%x]: %s access at offset %x = %x\n", GCPhysOffset >> 2, (fWriteAccess) ? "WRITE" : "READ", GCPhysOffset, pFIFO[GCPhysOffset >> 2]));
+ break;
+ }
+
+ return VINF_EM_RAW_EMULATE_INSTR;
+}
+# endif /* DEBUG_FIFO_ACCESS */
+
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+/**
+ * HC access handler for the FIFO.
+ *
+ * @returns VINF_SUCCESS if the handler have carried out the operation.
+ * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
+ * @param pVM VM Handle.
+ * @param pVCpu The cross context CPU structure for the calling EMT.
+ * @param GCPhys The physical address the guest is writing to.
+ * @param pvPhys The HC mapping of that address.
+ * @param pvBuf What the guest is reading/writing.
+ * @param cbBuf How much it's reading/writing.
+ * @param enmAccessType The access type.
+ * @param enmOrigin Who is making the access.
+ * @param pvUser User argument.
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vmsvgaR3FifoAccessHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void *pvPhys, void *pvBuf, size_t cbBuf,
+ PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
+{
+ NOREF(pVCpu); NOREF(pvPhys); NOREF(pvBuf); NOREF(cbBuf); NOREF(enmOrigin); NOREF(enmAccessType); NOREF(GCPhys);
+ PVGASTATE pThis = (PVGASTATE)pvUser;
+ AssertPtr(pThis);
+
+# ifdef VMSVGA_USE_FIFO_ACCESS_HANDLER
+ /*
+ * Wake up the FIFO thread as it might have work to do now.
+ */
+ int rc = PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+ AssertLogRelRC(rc);
+# endif
+
+# ifdef DEBUG_FIFO_ACCESS
+ /*
+ * When in debug-fifo-access mode, we do not disable the access handler,
+ * but leave it on as we wish to catch all access.
+ */
+ Assert(GCPhys >= pThis->svga.GCPhysFIFO);
+ rc = vmsvgaR3DebugFifoAccess(pVM, pThis, GCPhys, enmAccessType == PGMACCESSTYPE_WRITE);
+# elif defined(VMSVGA_USE_FIFO_ACCESS_HANDLER)
+ /*
+ * Temporarily disable the access handler now that we've kicked the FIFO thread.
+ */
+ STAM_REL_COUNTER_INC(&pThisCC->svga.pSvgaR3State->StatFifoAccessHandler);
+ rc = PGMHandlerPhysicalPageTempOff(pVM, pThis->svga.GCPhysFIFO, pThis->svga.GCPhysFIFO);
+# endif
+ if (RT_SUCCESS(rc))
+ return VINF_PGM_HANDLER_DO_DEFAULT;
+ AssertMsg(rc <= VINF_SUCCESS, ("rc=%Rrc\n", rc));
+ return rc;
+}
+# endif /* VMSVGA_USE_FIFO_ACCESS_HANDLER || DEBUG_FIFO_ACCESS */
+
+#endif /* IN_RING3 */
+
+#ifdef DEBUG_GMR_ACCESS
+# ifdef IN_RING3
+
+/**
+ * HC access handler for GMRs.
+ *
+ * @returns VINF_SUCCESS if the handler have carried out the operation.
+ * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
+ * @param pVM VM Handle.
+ * @param pVCpu The cross context CPU structure for the calling EMT.
+ * @param GCPhys The physical address the guest is writing to.
+ * @param pvPhys The HC mapping of that address.
+ * @param pvBuf What the guest is reading/writing.
+ * @param cbBuf How much it's reading/writing.
+ * @param enmAccessType The access type.
+ * @param enmOrigin Who is making the access.
+ * @param pvUser User argument.
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vmsvgaR3GmrAccessHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void *pvPhys, void *pvBuf, size_t cbBuf,
+ PGMACCESSTYPE enmAccessType, PGMACCESSORIGIN enmOrigin, void *pvUser)
+{
+ PVGASTATE pThis = (PVGASTATE)pvUser;
+ Assert(pThis);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ NOREF(pVCpu); NOREF(pvPhys); NOREF(pvBuf); NOREF(cbBuf); NOREF(enmAccessType); NOREF(enmOrigin);
+
+ Log(("vmsvgaR3GmrAccessHandler: GMR access to page %RGp\n", GCPhys));
+
+ for (uint32_t i = 0; i < pThis->svga.cGMR; ++i)
+ {
+ PGMR pGMR = &pSVGAState->paGMR[i];
+
+ if (pGMR->numDescriptors)
+ {
+ for (uint32_t j = 0; j < pGMR->numDescriptors; j++)
+ {
+ if ( GCPhys >= pGMR->paDesc[j].GCPhys
+ && GCPhys < pGMR->paDesc[j].GCPhys + pGMR->paDesc[j].numPages * GUEST_PAGE_SIZE)
+ {
+ /*
+ * Turn off the write handler for this particular page and make it R/W.
+ * Then return telling the caller to restart the guest instruction.
+ */
+ int rc = PGMHandlerPhysicalPageTempOff(pVM, pGMR->paDesc[j].GCPhys, GCPhys);
+ AssertRC(rc);
+ return VINF_PGM_HANDLER_DO_DEFAULT;
+ }
+ }
+ }
+ }
+
+ return VINF_PGM_HANDLER_DO_DEFAULT;
+}
+
+/** Callback handler for VMR3ReqCallWaitU */
+static DECLCALLBACK(int) vmsvgaR3RegisterGmr(PPDMDEVINS pDevIns, uint32_t gmrId)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ PGMR pGMR = &pSVGAState->paGMR[gmrId];
+ int rc;
+
+ for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
+ {
+ rc = PDMDevHlpPGMHandlerPhysicalRegister(pDevIns, pGMR->paDesc[i].GCPhys,
+ pGMR->paDesc[i].GCPhys + pGMR->paDesc[i].numPages * GUEST_PAGE_SIZE - 1,
+ pThis->svga.hGmrAccessHandlerType, pThis, NIL_RTR0PTR, NIL_RTRCPTR, "VMSVGA GMR");
+ AssertRC(rc);
+ }
+ return VINF_SUCCESS;
+}
+
+/** Callback handler for VMR3ReqCallWaitU */
+static DECLCALLBACK(int) vmsvgaR3DeregisterGmr(PPDMDEVINS pDevIns, uint32_t gmrId)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ PGMR pGMR = &pSVGAState->paGMR[gmrId];
+
+ for (uint32_t i = 0; i < pGMR->numDescriptors; i++)
+ {
+ int rc = PDMDevHlpPGMHandlerPhysicalDeregister(pDevIns, pGMR->paDesc[i].GCPhys);
+ AssertRC(rc);
+ }
+ return VINF_SUCCESS;
+}
+
+/** Callback handler for VMR3ReqCallWaitU */
+static DECLCALLBACK(int) vmsvgaR3ResetGmrHandlers(PVGASTATE pThis)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ for (uint32_t i = 0; i < pThis->svga.cGMR; ++i)
+ {
+ PGMR pGMR = &pSVGAState->paGMR[i];
+
+ if (pGMR->numDescriptors)
+ {
+ for (uint32_t j = 0; j < pGMR->numDescriptors; j++)
+ {
+ int rc = PDMDevHlpPGMHandlerPhysicalReset(pDevIns, pGMR->paDesc[j].GCPhys);
+ AssertRC(rc);
+ }
+ }
+ }
+ return VINF_SUCCESS;
+}
+
+# endif /* IN_RING3 */
+#endif /* DEBUG_GMR_ACCESS */
+
+/* -=-=-=-=-=- Ring 3 -=-=-=-=-=- */
+
+#ifdef IN_RING3
+
+
+/*
+ *
+ * Command buffer submission.
+ *
+ * Guest submits a buffer by writing to SVGA_REG_COMMAND_LOW register.
+ *
+ * EMT thread appends a command buffer to the context queue (VMSVGACMDBUFCTX::listSubmitted)
+ * and wakes up the FIFO thread.
+ *
+ * FIFO thread fetches the command buffer from the queue, processes the commands and writes
+ * the buffer header back to the guest memory.
+ *
+ * If buffers are preempted, then the EMT thread removes all buffers from the context queue.
+ *
+ */
+
+
+/** Update a command buffer header 'status' and 'errorOffset' fields in the guest memory.
+ *
+ * @param pDevIns The device instance.
+ * @param GCPhysCB Guest physical address of the command buffer header.
+ * @param status Command buffer status (SVGA_CB_STATUS_*).
+ * @param errorOffset Offset to the first byte of the failing command for SVGA_CB_STATUS_COMMAND_ERROR.
+ * errorOffset is ignored if the status is not SVGA_CB_STATUS_COMMAND_ERROR.
+ * @thread FIFO or EMT.
+ */
+static void vmsvgaR3CmdBufWriteStatus(PPDMDEVINS pDevIns, RTGCPHYS GCPhysCB, SVGACBStatus status, uint32_t errorOffset)
+{
+ SVGACBHeader hdr;
+ hdr.status = status;
+ hdr.errorOffset = errorOffset;
+ AssertCompile( RT_OFFSETOF(SVGACBHeader, status) == 0
+ && RT_OFFSETOF(SVGACBHeader, errorOffset) == 4
+ && RT_OFFSETOF(SVGACBHeader, id) == 8);
+ size_t const cbWrite = status == SVGA_CB_STATUS_COMMAND_ERROR
+ ? RT_UOFFSET_AFTER(SVGACBHeader, errorOffset) /* Both 'status' and 'errorOffset' fields. */
+ : RT_UOFFSET_AFTER(SVGACBHeader, status); /* Only 'status' field. */
+ PDMDevHlpPCIPhysWrite(pDevIns, GCPhysCB, &hdr, cbWrite);
+}
+
+
+/** Raise an IRQ.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param u32IrqStatus SVGA_IRQFLAG_* bits.
+ * @thread FIFO or EMT.
+ */
+static void vmsvgaR3CmdBufRaiseIRQ(PPDMDEVINS pDevIns, PVGASTATE pThis, uint32_t u32IrqStatus)
+{
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ if (pThis->svga.u32IrqMask & u32IrqStatus)
+ {
+ LogFunc(("Trigger interrupt with status %#x\n", u32IrqStatus));
+ ASMAtomicOrU32(&pThis->svga.u32IrqStatus, u32IrqStatus);
+ PDMDevHlpPCISetIrq(pDevIns, 0, 1);
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+}
+
+
+/** Allocate a command buffer structure.
+ *
+ * @param pCmdBufCtx The command buffer context which must allocate the buffer.
+ * @return Pointer to the allocated command buffer structure.
+ */
+static PVMSVGACMDBUF vmsvgaR3CmdBufAlloc(PVMSVGACMDBUFCTX pCmdBufCtx)
+{
+ if (!pCmdBufCtx)
+ return NULL;
+
+ PVMSVGACMDBUF pCmdBuf = (PVMSVGACMDBUF)RTMemAllocZ(sizeof(*pCmdBuf));
+ if (pCmdBuf)
+ {
+ // RT_ZERO(pCmdBuf->nodeBuffer);
+ pCmdBuf->pCmdBufCtx = pCmdBufCtx;
+ // pCmdBuf->GCPhysCB = 0;
+ // RT_ZERO(pCmdBuf->hdr);
+ // pCmdBuf->pvCommands = NULL;
+ }
+
+ return pCmdBuf;
+}
+
+
+/** Free a command buffer structure.
+ *
+ * @param pCmdBuf The command buffer pointer.
+ */
+static void vmsvgaR3CmdBufFree(PVMSVGACMDBUF pCmdBuf)
+{
+ if (pCmdBuf)
+ RTMemFree(pCmdBuf->pvCommands);
+ RTMemFree(pCmdBuf);
+}
+
+
+/** Initialize a command buffer context.
+ *
+ * @param pCmdBufCtx The command buffer context.
+ */
+static void vmsvgaR3CmdBufCtxInit(PVMSVGACMDBUFCTX pCmdBufCtx)
+{
+ RTListInit(&pCmdBufCtx->listSubmitted);
+ pCmdBufCtx->cSubmitted = 0;
+}
+
+
+/** Destroy a command buffer context.
+ *
+ * @param pCmdBufCtx The command buffer context pointer.
+ */
+static void vmsvgaR3CmdBufCtxTerm(PVMSVGACMDBUFCTX pCmdBufCtx)
+{
+ if (!pCmdBufCtx)
+ return;
+
+ if (pCmdBufCtx->listSubmitted.pNext)
+ {
+ /* If the list has been initialized. */
+ PVMSVGACMDBUF pIter, pNext;
+ RTListForEachSafe(&pCmdBufCtx->listSubmitted, pIter, pNext, VMSVGACMDBUF, nodeBuffer)
+ {
+ RTListNodeRemove(&pIter->nodeBuffer);
+ --pCmdBufCtx->cSubmitted;
+ vmsvgaR3CmdBufFree(pIter);
+ }
+ }
+ Assert(pCmdBufCtx->cSubmitted == 0);
+ pCmdBufCtx->cSubmitted = 0;
+}
+
+
+/** Handles SVGA_DC_CMD_START_STOP_CONTEXT command.
+ *
+ * @param pSvgaR3State VMSVGA R3 state.
+ * @param pCmd The command data.
+ * @return SVGACBStatus code.
+ * @thread EMT
+ */
+static SVGACBStatus vmsvgaR3CmdBufDCStartStop(PVMSVGAR3STATE pSvgaR3State, SVGADCCmdStartStop const *pCmd)
+{
+ /* Create or destroy a regular command buffer context. */
+ if (pCmd->context >= RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs))
+ return SVGA_CB_STATUS_COMMAND_ERROR;
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACBStatus CBStatus = SVGA_CB_STATUS_COMPLETED;
+
+ int rc = RTCritSectEnter(&pSvgaR3State->CritSectCmdBuf);
+ AssertRC(rc);
+ if (pCmd->enable)
+ {
+ pSvgaR3State->apCmdBufCtxs[pCmd->context] = (PVMSVGACMDBUFCTX)RTMemAlloc(sizeof(VMSVGACMDBUFCTX));
+ if (pSvgaR3State->apCmdBufCtxs[pCmd->context])
+ vmsvgaR3CmdBufCtxInit(pSvgaR3State->apCmdBufCtxs[pCmd->context]);
+ else
+ CBStatus = SVGA_CB_STATUS_QUEUE_FULL;
+ }
+ else
+ {
+ vmsvgaR3CmdBufCtxTerm(pSvgaR3State->apCmdBufCtxs[pCmd->context]);
+ pSvgaR3State->apCmdBufCtxs[pCmd->context] = NULL;
+ }
+ RTCritSectLeave(&pSvgaR3State->CritSectCmdBuf);
+
+ return CBStatus;
+}
+
+
+/** Handles SVGA_DC_CMD_PREEMPT command.
+ *
+ * @param pDevIns The device instance.
+ * @param pSvgaR3State VMSVGA R3 state.
+ * @param pCmd The command data.
+ * @return SVGACBStatus code.
+ * @thread EMT
+ */
+static SVGACBStatus vmsvgaR3CmdBufDCPreempt(PPDMDEVINS pDevIns, PVMSVGAR3STATE pSvgaR3State, SVGADCCmdPreempt const *pCmd)
+{
+ /* Remove buffers from the processing queue of the specified context. */
+ if (pCmd->context >= RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs))
+ return SVGA_CB_STATUS_COMMAND_ERROR;
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ PVMSVGACMDBUFCTX const pCmdBufCtx = pSvgaR3State->apCmdBufCtxs[pCmd->context];
+ RTLISTANCHOR listPreempted;
+
+ int rc = RTCritSectEnter(&pSvgaR3State->CritSectCmdBuf);
+ AssertRC(rc);
+ if (pCmd->ignoreIDZero)
+ {
+ RTListInit(&listPreempted);
+
+ PVMSVGACMDBUF pIter, pNext;
+ RTListForEachSafe(&pCmdBufCtx->listSubmitted, pIter, pNext, VMSVGACMDBUF, nodeBuffer)
+ {
+ if (pIter->hdr.id == 0)
+ continue;
+
+ RTListNodeRemove(&pIter->nodeBuffer);
+ --pCmdBufCtx->cSubmitted;
+ RTListAppend(&listPreempted, &pIter->nodeBuffer);
+ }
+ }
+ else
+ {
+ RTListMove(&listPreempted, &pCmdBufCtx->listSubmitted);
+ pCmdBufCtx->cSubmitted = 0;
+ }
+ RTCritSectLeave(&pSvgaR3State->CritSectCmdBuf);
+
+ PVMSVGACMDBUF pIter, pNext;
+ RTListForEachSafe(&listPreempted, pIter, pNext, VMSVGACMDBUF, nodeBuffer)
+ {
+ RTListNodeRemove(&pIter->nodeBuffer);
+ vmsvgaR3CmdBufWriteStatus(pDevIns, pIter->GCPhysCB, SVGA_CB_STATUS_PREEMPTED, 0);
+ LogFunc(("Preempted %RX64\n", pIter->GCPhysCB));
+ vmsvgaR3CmdBufFree(pIter);
+ }
+
+ return SVGA_CB_STATUS_COMPLETED;
+}
+
+
+/** @def VMSVGA_INC_CMD_SIZE_BREAK
+ * Increments the size of the command cbCmd by a_cbMore.
+ * Checks that the command buffer has at least cbCmd bytes. Will break out of the switch if it doesn't.
+ * Used by vmsvgaR3CmdBufProcessDC and vmsvgaR3CmdBufProcessCommands.
+ */
+#define VMSVGA_INC_CMD_SIZE_BREAK(a_cbMore) \
+ if (1) { \
+ cbCmd += (a_cbMore); \
+ ASSERT_GUEST_MSG_STMT_BREAK(cbRemain >= cbCmd, ("size=%#x remain=%#zx\n", cbCmd, (size_t)cbRemain), CBstatus = SVGA_CB_STATUS_COMMAND_ERROR); \
+ RT_UNTRUSTED_VALIDATED_FENCE(); \
+ } else do {} while (0)
+
+
+/** Processes Device Context command buffer.
+ *
+ * @param pDevIns The device instance.
+ * @param pSvgaR3State VMSVGA R3 state.
+ * @param pvCommands Pointer to the command buffer.
+ * @param cbCommands Size of the command buffer.
+ * @param poffNextCmd Where to store the offset of the first unprocessed command.
+ * @return SVGACBStatus code.
+ * @thread EMT
+ */
+static SVGACBStatus vmsvgaR3CmdBufProcessDC(PPDMDEVINS pDevIns, PVMSVGAR3STATE pSvgaR3State, void const *pvCommands, uint32_t cbCommands, uint32_t *poffNextCmd)
+{
+ SVGACBStatus CBstatus = SVGA_CB_STATUS_COMPLETED;
+
+ uint8_t const *pu8Cmd = (uint8_t *)pvCommands;
+ uint32_t cbRemain = cbCommands;
+ while (cbRemain)
+ {
+ /* Command identifier is a 32 bit value. */
+ if (cbRemain < sizeof(uint32_t))
+ {
+ CBstatus = SVGA_CB_STATUS_COMMAND_ERROR;
+ break;
+ }
+
+ /* Fetch the command id. */
+ uint32_t const cmdId = *(uint32_t *)pu8Cmd;
+ uint32_t cbCmd = sizeof(uint32_t);
+ switch (cmdId)
+ {
+ case SVGA_DC_CMD_NOP:
+ {
+ /* NOP */
+ break;
+ }
+
+ case SVGA_DC_CMD_START_STOP_CONTEXT:
+ {
+ SVGADCCmdStartStop *pCmd = (SVGADCCmdStartStop *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ CBstatus = vmsvgaR3CmdBufDCStartStop(pSvgaR3State, pCmd);
+ break;
+ }
+
+ case SVGA_DC_CMD_PREEMPT:
+ {
+ SVGADCCmdPreempt *pCmd = (SVGADCCmdPreempt *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ CBstatus = vmsvgaR3CmdBufDCPreempt(pDevIns, pSvgaR3State, pCmd);
+ break;
+ }
+
+ default:
+ {
+ /* Unsupported command. */
+ CBstatus = SVGA_CB_STATUS_COMMAND_ERROR;
+ break;
+ }
+ }
+
+ if (CBstatus != SVGA_CB_STATUS_COMPLETED)
+ break;
+
+ pu8Cmd += cbCmd;
+ cbRemain -= cbCmd;
+ }
+
+ Assert(cbRemain <= cbCommands);
+ *poffNextCmd = cbCommands - cbRemain;
+ return CBstatus;
+}
+
+
+/** Submits a device context command buffer for synchronous processing.
+ *
+ * @param pDevIns The device instance.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param ppCmdBuf Pointer to the command buffer pointer.
+ * The function can set the command buffer pointer to NULL to prevent deallocation by the caller.
+ * @param poffNextCmd Where to store the offset of the first unprocessed command.
+ * @return SVGACBStatus code.
+ * @thread EMT
+ */
+static SVGACBStatus vmsvgaR3CmdBufSubmitDC(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PVMSVGACMDBUF *ppCmdBuf, uint32_t *poffNextCmd)
+{
+ /* Synchronously process the device context commands. */
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ return vmsvgaR3CmdBufProcessDC(pDevIns, pSvgaR3State, (*ppCmdBuf)->pvCommands, (*ppCmdBuf)->hdr.length, poffNextCmd);
+}
+
+/** Submits a command buffer for asynchronous processing by the FIFO thread.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param ppCmdBuf Pointer to the command buffer pointer.
+ * The function can set the command buffer pointer to NULL to prevent deallocation by the caller.
+ * @return SVGACBStatus code.
+ * @thread EMT
+ */
+static SVGACBStatus vmsvgaR3CmdBufSubmitCtx(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PVMSVGACMDBUF *ppCmdBuf)
+{
+ /* Command buffer submission. */
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ SVGACBStatus CBstatus = SVGA_CB_STATUS_NONE;
+
+ PVMSVGACMDBUF const pCmdBuf = *ppCmdBuf;
+ PVMSVGACMDBUFCTX const pCmdBufCtx = pCmdBuf->pCmdBufCtx;
+
+ int rc = RTCritSectEnter(&pSvgaR3State->CritSectCmdBuf);
+ AssertRC(rc);
+
+ if (RT_LIKELY(pCmdBufCtx->cSubmitted < SVGA_CB_MAX_QUEUED_PER_CONTEXT))
+ {
+ RTListAppend(&pCmdBufCtx->listSubmitted, &pCmdBuf->nodeBuffer);
+ ++pCmdBufCtx->cSubmitted;
+ *ppCmdBuf = NULL; /* Consume the buffer. */
+ ASMAtomicWriteU32(&pThisCC->svga.pSvgaR3State->fCmdBuf, 1);
+ }
+ else
+ CBstatus = SVGA_CB_STATUS_QUEUE_FULL;
+
+ RTCritSectLeave(&pSvgaR3State->CritSectCmdBuf);
+
+ /* Inform the FIFO thread. */
+ if (*ppCmdBuf == NULL)
+ PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+
+ return CBstatus;
+}
+
+
+/** SVGA_REG_COMMAND_LOW write handler.
+ * Submits a command buffer to the FIFO thread or processes a device context command.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param GCPhysCB Guest physical address of the command buffer header.
+ * @param CBCtx Context the command buffer is submitted to.
+ * @thread EMT
+ */
+static void vmsvgaR3CmdBufSubmit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, RTGCPHYS GCPhysCB, SVGACBContext CBCtx)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ SVGACBStatus CBstatus = SVGA_CB_STATUS_NONE;
+ uint32_t offNextCmd = 0;
+ uint32_t fIRQ = 0;
+
+ /* Get the context if the device has the capability. */
+ PVMSVGACMDBUFCTX pCmdBufCtx = NULL;
+ if (pThis->svga.u32DeviceCaps & SVGA_CAP_COMMAND_BUFFERS)
+ {
+ if (RT_LIKELY(CBCtx < RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs)))
+ pCmdBufCtx = pSvgaR3State->apCmdBufCtxs[CBCtx];
+ else if (CBCtx == SVGA_CB_CONTEXT_DEVICE)
+ pCmdBufCtx = &pSvgaR3State->CmdBufCtxDC;
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ }
+
+ /* Allocate a new command buffer. */
+ PVMSVGACMDBUF pCmdBuf = vmsvgaR3CmdBufAlloc(pCmdBufCtx);
+ if (RT_LIKELY(pCmdBuf))
+ {
+ pCmdBuf->GCPhysCB = GCPhysCB;
+
+ int rc = PDMDevHlpPCIPhysRead(pDevIns, GCPhysCB, &pCmdBuf->hdr, sizeof(pCmdBuf->hdr));
+ if (RT_SUCCESS(rc))
+ {
+ LogFunc(("status %RX32 errorOffset %RX32 id %RX64 flags %RX32 length %RX32 ptr %RX64 offset %RX32 dxContext %RX32 (%RX32 %RX32 %RX32 %RX32 %RX32 %RX32)\n",
+ pCmdBuf->hdr.status,
+ pCmdBuf->hdr.errorOffset,
+ pCmdBuf->hdr.id,
+ pCmdBuf->hdr.flags,
+ pCmdBuf->hdr.length,
+ pCmdBuf->hdr.ptr.pa,
+ pCmdBuf->hdr.offset,
+ pCmdBuf->hdr.dxContext,
+ pCmdBuf->hdr.mustBeZero[0],
+ pCmdBuf->hdr.mustBeZero[1],
+ pCmdBuf->hdr.mustBeZero[2],
+ pCmdBuf->hdr.mustBeZero[3],
+ pCmdBuf->hdr.mustBeZero[4],
+ pCmdBuf->hdr.mustBeZero[5]));
+
+ /* Verify the command buffer header. */
+ if (RT_LIKELY( pCmdBuf->hdr.status == SVGA_CB_STATUS_NONE
+ && (pCmdBuf->hdr.flags & ~(SVGA_CB_FLAG_NO_IRQ | SVGA_CB_FLAG_DX_CONTEXT)) == 0 /* No unexpected flags. */
+ && pCmdBuf->hdr.length <= SVGA_CB_MAX_SIZE))
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Read the command buffer content. */
+ pCmdBuf->pvCommands = RTMemAlloc(pCmdBuf->hdr.length);
+ if (pCmdBuf->pvCommands)
+ {
+ RTGCPHYS const GCPhysCmd = (RTGCPHYS)pCmdBuf->hdr.ptr.pa;
+ rc = PDMDevHlpPCIPhysRead(pDevIns, GCPhysCmd, pCmdBuf->pvCommands, pCmdBuf->hdr.length);
+ if (RT_SUCCESS(rc))
+ {
+ /* Submit the buffer. Device context buffers will be processed synchronously. */
+ if (RT_LIKELY(CBCtx < RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs)))
+ /* This usually processes the CB async and sets pCmbBuf to NULL. */
+ CBstatus = vmsvgaR3CmdBufSubmitCtx(pDevIns, pThis, pThisCC, &pCmdBuf);
+ else
+ CBstatus = vmsvgaR3CmdBufSubmitDC(pDevIns, pThisCC, &pCmdBuf, &offNextCmd);
+ }
+ else
+ {
+ ASSERT_GUEST_MSG_FAILED(("Failed to read commands at %RGp\n", GCPhysCmd));
+ CBstatus = SVGA_CB_STATUS_CB_HEADER_ERROR;
+ fIRQ = SVGA_IRQFLAG_ERROR | SVGA_IRQFLAG_COMMAND_BUFFER;
+ }
+ }
+ else
+ {
+ /* No memory for commands. */
+ CBstatus = SVGA_CB_STATUS_QUEUE_FULL;
+ }
+ }
+ else
+ {
+ ASSERT_GUEST_MSG_FAILED(("Invalid buffer header\n"));
+ CBstatus = SVGA_CB_STATUS_CB_HEADER_ERROR;
+ fIRQ = SVGA_IRQFLAG_ERROR | SVGA_IRQFLAG_COMMAND_BUFFER;
+ }
+ }
+ else
+ {
+ LogFunc(("Failed to read buffer header at %RGp\n", GCPhysCB));
+ ASSERT_GUEST_FAILED();
+ /* Do not attempt to write the status. */
+ }
+
+ /* Free the buffer if pfnCmdBufSubmit did not consume it. */
+ vmsvgaR3CmdBufFree(pCmdBuf);
+ }
+ else
+ {
+ LogFunc(("Can't allocate buffer for context id %#x\n", CBCtx));
+ AssertFailed();
+ CBstatus = SVGA_CB_STATUS_QUEUE_FULL;
+ }
+
+ if (CBstatus != SVGA_CB_STATUS_NONE)
+ {
+ LogFunc(("Write status %#x, offNextCmd %#x, fIRQ %#x\n", CBstatus, offNextCmd, fIRQ));
+ vmsvgaR3CmdBufWriteStatus(pDevIns, GCPhysCB, CBstatus, offNextCmd);
+ if (fIRQ)
+ vmsvgaR3CmdBufRaiseIRQ(pDevIns, pThis, fIRQ);
+ }
+}
+
+
+/** Checks if there are some buffers to be processed.
+ *
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @return true if buffers must be processed.
+ * @thread FIFO
+ */
+static bool vmsvgaR3CmdBufHasWork(PVGASTATECC pThisCC)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ return RT_BOOL(ASMAtomicReadU32(&pSvgaR3State->fCmdBuf));
+}
+
+
+/** Processes a command buffer.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param idDXContext VGPU10 DX context of the commands or SVGA3D_INVALID_ID if they are not for a specific context.
+ * @param pvCommands Pointer to the command buffer.
+ * @param cbCommands Size of the command buffer.
+ * @param poffNextCmd Where to store the offset of the first unprocessed command.
+ * @param pu32IrqStatus Where to store SVGA_IRQFLAG_ if the IRQ is generated by the last command in the buffer.
+ * @return SVGACBStatus code.
+ * @thread FIFO
+ */
+static SVGACBStatus vmsvgaR3CmdBufProcessCommands(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t idDXContext, void const *pvCommands, uint32_t cbCommands, uint32_t *poffNextCmd, uint32_t *pu32IrqStatus)
+{
+# ifndef VBOX_WITH_VMSVGA3D
+ RT_NOREF(idDXContext);
+# endif
+ SVGACBStatus CBstatus = SVGA_CB_STATUS_COMPLETED;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+# ifdef VBOX_WITH_VMSVGA3D
+# ifdef VMSVGA3D_DX
+ /* Commands submitted for the SVGA3D_INVALID_ID context do not affect pipeline. So ignore them. */
+ if (idDXContext != SVGA3D_INVALID_ID)
+ {
+ if (pSvgaR3State->idDXContextCurrent != idDXContext)
+ {
+ LogFlow(("DXCTX: buffer %d->%d\n", pSvgaR3State->idDXContextCurrent, idDXContext));
+ vmsvga3dDXSwitchContext(pThisCC, idDXContext);
+ pSvgaR3State->idDXContextCurrent = idDXContext;
+ }
+ }
+# endif
+# endif
+
+ uint32_t RT_UNTRUSTED_VOLATILE_GUEST * const pFIFO = pThisCC->svga.pau32FIFO;
+
+ uint8_t const *pu8Cmd = (uint8_t *)pvCommands;
+ uint32_t cbRemain = cbCommands;
+ while (cbRemain)
+ {
+ /* Command identifier is a 32 bit value. */
+ if (cbRemain < sizeof(uint32_t))
+ {
+ CBstatus = SVGA_CB_STATUS_COMMAND_ERROR;
+ break;
+ }
+
+ /* Fetch the command id.
+ * 'cmdId' is actually a SVGAFifoCmdId. It is treated as uint32_t in order to avoid a compiler
+ * warning. Because we support some obsolete and deprecated commands, which are not included in
+ * the SVGAFifoCmdId enum in the VMSVGA headers anymore.
+ */
+ uint32_t const cmdId = *(uint32_t *)pu8Cmd;
+ uint32_t cbCmd = sizeof(uint32_t);
+
+ LogFunc(("[cid=%d] %s %d\n", (int32_t)idDXContext, vmsvgaR3FifoCmdToString(cmdId), cmdId));
+# ifdef LOG_ENABLED
+# ifdef VBOX_WITH_VMSVGA3D
+ if (SVGA_3D_CMD_BASE <= cmdId && cmdId < SVGA_3D_CMD_MAX)
+ {
+ SVGA3dCmdHeader const *header = (SVGA3dCmdHeader *)pu8Cmd;
+ svga_dump_command(cmdId, (uint8_t *)&header[1], header->size);
+ }
+ else if (cmdId == SVGA_CMD_FENCE)
+ {
+ Log7(("\tSVGA_CMD_FENCE\n"));
+ Log7(("\t\t0x%08x\n", ((uint32_t *)pu8Cmd)[1]));
+ }
+# endif
+# endif
+
+ /* At the end of the switch cbCmd is equal to the total length of the command including the cmdId.
+ * I.e. pu8Cmd + cbCmd must point to the next command.
+ * However if CBstatus is set to anything but SVGA_CB_STATUS_COMPLETED in the switch, then
+ * the cbCmd value is ignored (and pu8Cmd still points to the failed command).
+ */
+ /** @todo This code is very similar to the FIFO loop command processing. Think about merging. */
+ switch (cmdId)
+ {
+ case SVGA_CMD_INVALID_CMD:
+ {
+ /* Nothing to do. */
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdInvalidCmd);
+ break;
+ }
+
+ case SVGA_CMD_FENCE:
+ {
+ SVGAFifoCmdFence *pCmd = (SVGAFifoCmdFence *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatR3CmdFence);
+ Log(("SVGA_CMD_FENCE %#x\n", pCmd->fence));
+
+ uint32_t const offFifoMin = pFIFO[SVGA_FIFO_MIN];
+ if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_FENCE, offFifoMin))
+ {
+ pFIFO[SVGA_FIFO_FENCE] = pCmd->fence;
+
+ if (pThis->svga.u32IrqMask & SVGA_IRQFLAG_ANY_FENCE)
+ {
+ Log(("any fence irq\n"));
+ *pu32IrqStatus |= SVGA_IRQFLAG_ANY_FENCE;
+ }
+ else if ( VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_FENCE_GOAL, offFifoMin)
+ && (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FENCE_GOAL)
+ && pFIFO[SVGA_FIFO_FENCE_GOAL] == pCmd->fence)
+ {
+ Log(("fence goal reached irq (fence=%#x)\n", pCmd->fence));
+ *pu32IrqStatus |= SVGA_IRQFLAG_FENCE_GOAL;
+ }
+ }
+ else
+ Log(("SVGA_CMD_FENCE is bogus when offFifoMin is %#x!\n", offFifoMin));
+ break;
+ }
+
+ case SVGA_CMD_UPDATE:
+ {
+ SVGAFifoCmdUpdate *pCmd = (SVGAFifoCmdUpdate *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdUpdate(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_UPDATE_VERBOSE:
+ {
+ SVGAFifoCmdUpdateVerbose *pCmd = (SVGAFifoCmdUpdateVerbose *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdUpdateVerbose(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DEFINE_CURSOR:
+ {
+ /* Followed by bitmap data. */
+ SVGAFifoCmdDefineCursor *pCmd = (SVGAFifoCmdDefineCursor *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+
+ /* Figure out the size of the bitmap data. */
+ ASSERT_GUEST_STMT_BREAK(pCmd->height < 2048 && pCmd->width < 2048, CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+ ASSERT_GUEST_STMT_BREAK(pCmd->andMaskDepth <= 32, CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+ ASSERT_GUEST_STMT_BREAK(pCmd->xorMaskDepth <= 32, CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const cbAndLine = RT_ALIGN_32(pCmd->width * (pCmd->andMaskDepth + (pCmd->andMaskDepth == 15)), 32) / 8;
+ uint32_t const cbAndMask = cbAndLine * pCmd->height;
+ uint32_t const cbXorLine = RT_ALIGN_32(pCmd->width * (pCmd->xorMaskDepth + (pCmd->xorMaskDepth == 15)), 32) / 8;
+ uint32_t const cbXorMask = cbXorLine * pCmd->height;
+
+ VMSVGA_INC_CMD_SIZE_BREAK(cbAndMask + cbXorMask);
+ vmsvgaR3CmdDefineCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DEFINE_ALPHA_CURSOR:
+ {
+ /* Followed by bitmap data. */
+ SVGAFifoCmdDefineAlphaCursor *pCmd = (SVGAFifoCmdDefineAlphaCursor *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+
+ /* Figure out the size of the bitmap data. */
+ ASSERT_GUEST_STMT_BREAK(pCmd->height < 2048 && pCmd->width < 2048, CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+
+ VMSVGA_INC_CMD_SIZE_BREAK(pCmd->width * pCmd->height * sizeof(uint32_t)); /* 32-bit BRGA format */
+ vmsvgaR3CmdDefineAlphaCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_MOVE_CURSOR:
+ {
+ /* Deprecated; there should be no driver which *requires* this command. However, if
+ * we do ecncounter this command, it might be useful to not get the FIFO completely out of
+ * alignment.
+ * May be issued by guest if SVGA_CAP_CURSOR_BYPASS is missing.
+ */
+ SVGAFifoCmdMoveCursor *pCmd = (SVGAFifoCmdMoveCursor *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdMoveCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DISPLAY_CURSOR:
+ {
+ /* Deprecated; there should be no driver which *requires* this command. However, if
+ * we do ecncounter this command, it might be useful to not get the FIFO completely out of
+ * alignment.
+ * May be issued by guest if SVGA_CAP_CURSOR_BYPASS is missing.
+ */
+ SVGAFifoCmdDisplayCursor *pCmd = (SVGAFifoCmdDisplayCursor *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdDisplayCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_RECT_FILL:
+ {
+ SVGAFifoCmdRectFill *pCmd = (SVGAFifoCmdRectFill *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdRectFill(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_RECT_COPY:
+ {
+ SVGAFifoCmdRectCopy *pCmd = (SVGAFifoCmdRectCopy *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdRectCopy(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_RECT_ROP_COPY:
+ {
+ SVGAFifoCmdRectRopCopy *pCmd = (SVGAFifoCmdRectRopCopy *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdRectRopCopy(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_ESCAPE:
+ {
+ /* Followed by 'size' bytes of data. */
+ SVGAFifoCmdEscape *pCmd = (SVGAFifoCmdEscape *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+
+ ASSERT_GUEST_STMT_BREAK(pCmd->size < pThis->svga.cbFIFO - sizeof(SVGAFifoCmdEscape), CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGA_INC_CMD_SIZE_BREAK(pCmd->size);
+ vmsvgaR3CmdEscape(pThis, pThisCC, pCmd);
+ break;
+ }
+# ifdef VBOX_WITH_VMSVGA3D
+ case SVGA_CMD_DEFINE_GMR2:
+ {
+ SVGAFifoCmdDefineGMR2 *pCmd = (SVGAFifoCmdDefineGMR2 *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdDefineGMR2(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_REMAP_GMR2:
+ {
+ /* Followed by page descriptors or guest ptr. */
+ SVGAFifoCmdRemapGMR2 *pCmd = (SVGAFifoCmdRemapGMR2 *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+
+ /* Calculate the size of what comes after next and fetch it. */
+ uint32_t cbMore = 0;
+ if (pCmd->flags & SVGA_REMAP_GMR2_VIA_GMR)
+ cbMore = sizeof(SVGAGuestPtr);
+ else
+ {
+ uint32_t const cbPageDesc = (pCmd->flags & SVGA_REMAP_GMR2_PPN64) ? sizeof(uint64_t) : sizeof(uint32_t);
+ if (pCmd->flags & SVGA_REMAP_GMR2_SINGLE_PPN)
+ {
+ cbMore = cbPageDesc;
+ pCmd->numPages = 1;
+ }
+ else
+ {
+ ASSERT_GUEST_STMT_BREAK(pCmd->numPages <= pThis->svga.cbFIFO / cbPageDesc, CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+ cbMore = cbPageDesc * pCmd->numPages;
+ }
+ }
+ VMSVGA_INC_CMD_SIZE_BREAK(cbMore);
+ vmsvgaR3CmdRemapGMR2(pThis, pThisCC, pCmd);
+# ifdef DEBUG_GMR_ACCESS
+ VMR3ReqCallWaitU(PDMDevHlpGetUVM(pDevIns), VMCPUID_ANY, (PFNRT)vmsvgaR3RegisterGmr, 2, pDevIns, pCmd->gmrId);
+# endif
+ break;
+ }
+# endif /* VBOX_WITH_VMSVGA3D */
+ case SVGA_CMD_DEFINE_SCREEN:
+ {
+ /* The size of this command is specified by the guest and depends on capabilities. */
+ SVGAFifoCmdDefineScreen *pCmd = (SVGAFifoCmdDefineScreen *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(pCmd->screen.structSize));
+ ASSERT_GUEST_STMT_BREAK(pCmd->screen.structSize < pThis->svga.cbFIFO, CBstatus = SVGA_CB_STATUS_COMMAND_ERROR);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGA_INC_CMD_SIZE_BREAK(RT_MAX(sizeof(pCmd->screen.structSize), pCmd->screen.structSize) - sizeof(pCmd->screen.structSize));
+ vmsvgaR3CmdDefineScreen(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DESTROY_SCREEN:
+ {
+ SVGAFifoCmdDestroyScreen *pCmd = (SVGAFifoCmdDestroyScreen *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdDestroyScreen(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DEFINE_GMRFB:
+ {
+ SVGAFifoCmdDefineGMRFB *pCmd = (SVGAFifoCmdDefineGMRFB *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdDefineGMRFB(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_BLIT_GMRFB_TO_SCREEN:
+ {
+ SVGAFifoCmdBlitGMRFBToScreen *pCmd = (SVGAFifoCmdBlitGMRFBToScreen *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdBlitGMRFBToScreen(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_BLIT_SCREEN_TO_GMRFB:
+ {
+ SVGAFifoCmdBlitScreenToGMRFB *pCmd = (SVGAFifoCmdBlitScreenToGMRFB *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdBlitScreenToGMRFB(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_ANNOTATION_FILL:
+ {
+ SVGAFifoCmdAnnotationFill *pCmd = (SVGAFifoCmdAnnotationFill *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdAnnotationFill(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_ANNOTATION_COPY:
+ {
+ SVGAFifoCmdAnnotationCopy *pCmd = (SVGAFifoCmdAnnotationCopy *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pCmd));
+ vmsvgaR3CmdAnnotationCopy(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ default:
+ {
+# ifdef VBOX_WITH_VMSVGA3D
+ if ( cmdId >= SVGA_3D_CMD_BASE
+ && cmdId < SVGA_3D_CMD_MAX)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* All 3d commands start with a common header, which defines the identifier and the size
+ * of the command. The identifier has been already read. Fetch the size.
+ */
+ uint32_t const *pcbMore = (uint32_t const *)&pu8Cmd[cbCmd];
+ VMSVGA_INC_CMD_SIZE_BREAK(sizeof(*pcbMore));
+ VMSVGA_INC_CMD_SIZE_BREAK(*pcbMore);
+ if (RT_LIKELY(pThis->svga.f3DEnabled))
+ { /* likely */ }
+ else
+ {
+ LogRelMax(8, ("VMSVGA: 3D disabled, command %d skipped\n", cmdId));
+ break;
+ }
+
+ /* Command data begins after the 32 bit command length. */
+ int rc = vmsvgaR3Process3dCmd(pThis, pThisCC, idDXContext, (SVGAFifo3dCmdId)cmdId, *pcbMore, pcbMore + 1);
+ if (RT_SUCCESS(rc))
+ { /* likely */ }
+ else
+ {
+ CBstatus = SVGA_CB_STATUS_COMMAND_ERROR;
+ break;
+ }
+ }
+ else
+# endif /* VBOX_WITH_VMSVGA3D */
+ {
+ /* Unsupported command. */
+ STAM_REL_COUNTER_INC(&pSvgaR3State->StatFifoUnkCmds);
+ ASSERT_GUEST_MSG_FAILED(("cmdId=%d\n", cmdId));
+ LogRelMax(16, ("VMSVGA: unsupported command %d\n", cmdId));
+ CBstatus = SVGA_CB_STATUS_COMMAND_ERROR;
+ break;
+ }
+ }
+ }
+
+ if (CBstatus != SVGA_CB_STATUS_COMPLETED)
+ break;
+
+ pu8Cmd += cbCmd;
+ cbRemain -= cbCmd;
+
+ /* If this is not the last command in the buffer, then generate IRQ, if required.
+ * This avoids a double call to vmsvgaR3CmdBufRaiseIRQ if FENCE is the last command
+ * in the buffer (usually the case).
+ */
+ if (RT_LIKELY(!(cbRemain && *pu32IrqStatus)))
+ { /* likely */ }
+ else
+ {
+ vmsvgaR3CmdBufRaiseIRQ(pDevIns, pThis, *pu32IrqStatus);
+ *pu32IrqStatus = 0;
+ }
+ }
+
+ Assert(cbRemain <= cbCommands);
+ *poffNextCmd = cbCommands - cbRemain;
+ return CBstatus;
+}
+
+
+/** Process command buffers.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for the current context.
+ * @param pThread Handle of the FIFO thread.
+ * @thread FIFO
+ */
+static void vmsvgaR3CmdBufProcessBuffers(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PPDMTHREAD pThread)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ for (;;)
+ {
+ if (pThread->enmState != PDMTHREADSTATE_RUNNING)
+ break;
+
+ /* See if there is a submitted buffer. */
+ PVMSVGACMDBUF pCmdBuf = NULL;
+
+ int rc = RTCritSectEnter(&pSvgaR3State->CritSectCmdBuf);
+ AssertRC(rc);
+
+ /* It seems that a higher queue index has a higher priority.
+ * See SVGACBContext in svga_reg.h from latest vmwgfx Linux driver.
+ */
+ for (unsigned i = RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs); i > 0; --i)
+ {
+ PVMSVGACMDBUFCTX pCmdBufCtx = pSvgaR3State->apCmdBufCtxs[i - 1];
+ if (pCmdBufCtx)
+ {
+ pCmdBuf = RTListRemoveFirst(&pCmdBufCtx->listSubmitted, VMSVGACMDBUF, nodeBuffer);
+ if (pCmdBuf)
+ {
+ Assert(pCmdBufCtx->cSubmitted > 0);
+ --pCmdBufCtx->cSubmitted;
+ break;
+ }
+ }
+ }
+
+ if (!pCmdBuf)
+ {
+ ASMAtomicWriteU32(&pSvgaR3State->fCmdBuf, 0);
+ RTCritSectLeave(&pSvgaR3State->CritSectCmdBuf);
+ break;
+ }
+
+ RTCritSectLeave(&pSvgaR3State->CritSectCmdBuf);
+
+ SVGACBStatus CBstatus = SVGA_CB_STATUS_NONE;
+ uint32_t offNextCmd = 0;
+ uint32_t u32IrqStatus = 0;
+ uint32_t const idDXContext = RT_BOOL(pCmdBuf->hdr.flags & SVGA_CB_FLAG_DX_CONTEXT)
+ ? pCmdBuf->hdr.dxContext
+ : SVGA3D_INVALID_ID;
+ /* Process one buffer. */
+ CBstatus = vmsvgaR3CmdBufProcessCommands(pDevIns, pThis, pThisCC, idDXContext, pCmdBuf->pvCommands, pCmdBuf->hdr.length, &offNextCmd, &u32IrqStatus);
+
+ if (!RT_BOOL(pCmdBuf->hdr.flags & SVGA_CB_FLAG_NO_IRQ))
+ u32IrqStatus |= SVGA_IRQFLAG_COMMAND_BUFFER;
+ if (CBstatus == SVGA_CB_STATUS_COMMAND_ERROR)
+ u32IrqStatus |= SVGA_IRQFLAG_ERROR;
+
+ vmsvgaR3CmdBufWriteStatus(pDevIns, pCmdBuf->GCPhysCB, CBstatus, offNextCmd);
+ if (u32IrqStatus)
+ vmsvgaR3CmdBufRaiseIRQ(pDevIns, pThis, u32IrqStatus);
+
+ vmsvgaR3CmdBufFree(pCmdBuf);
+ }
+}
+
+
+/**
+ * Worker for vmsvgaR3FifoThread that handles an external command.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+static void vmsvgaR3FifoHandleExtCmd(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ uint8_t uExtCmd = pThis->svga.u8FIFOExtCommand;
+ switch (pThis->svga.u8FIFOExtCommand)
+ {
+ case VMSVGA_FIFO_EXTCMD_RESET:
+ Log(("vmsvgaR3FifoLoop: reset the fifo thread.\n"));
+ Assert(pThisCC->svga.pvFIFOExtCmdParam == NULL);
+
+ vmsvgaR3ResetScreens(pThis, pThisCC);
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ /* The 3d subsystem must be reset from the fifo thread. */
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ pSVGAState->pFuncs3D->pfnReset(pThisCC);
+ }
+# endif
+ break;
+
+ case VMSVGA_FIFO_EXTCMD_POWEROFF:
+ Log(("vmsvgaR3FifoLoop: power off.\n"));
+ Assert(pThisCC->svga.pvFIFOExtCmdParam == NULL);
+
+ /* The screens must be reset on the FIFO thread, because they may use 3D resources. */
+ vmsvgaR3ResetScreens(pThis, pThisCC);
+ break;
+
+ case VMSVGA_FIFO_EXTCMD_TERMINATE:
+ Log(("vmsvgaR3FifoLoop: terminate the fifo thread.\n"));
+ Assert(pThisCC->svga.pvFIFOExtCmdParam == NULL);
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ /* The 3d subsystem must be shut down from the fifo thread. */
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ if (pSVGAState->pFuncs3D && pSVGAState->pFuncs3D->pfnTerminate)
+ pSVGAState->pFuncs3D->pfnTerminate(pThisCC);
+ }
+# endif
+ break;
+
+ case VMSVGA_FIFO_EXTCMD_SAVESTATE:
+ {
+ Log(("vmsvgaR3FifoLoop: VMSVGA_FIFO_EXTCMD_SAVESTATE.\n"));
+ PSSMHANDLE pSSM = (PSSMHANDLE)pThisCC->svga.pvFIFOExtCmdParam;
+ AssertLogRelMsgBreak(RT_VALID_PTR(pSSM), ("pSSM=%p\n", pSSM));
+ vmsvgaR3SaveExecFifo(pDevIns->pHlpR3, pThisCC, pSSM);
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ if (vmsvga3dIsLegacyBackend(pThisCC))
+ vmsvga3dSaveExec(pDevIns, pThisCC, pSSM);
+# ifdef VMSVGA3D_DX
+ else
+ vmsvga3dDXSaveExec(pDevIns, pThisCC, pSSM);
+# endif
+ }
+# endif
+ break;
+ }
+
+ case VMSVGA_FIFO_EXTCMD_LOADSTATE:
+ {
+ Log(("vmsvgaR3FifoLoop: VMSVGA_FIFO_EXTCMD_LOADSTATE.\n"));
+ PVMSVGA_STATE_LOAD pLoadState = (PVMSVGA_STATE_LOAD)pThisCC->svga.pvFIFOExtCmdParam;
+ AssertLogRelMsgBreak(RT_VALID_PTR(pLoadState), ("pLoadState=%p\n", pLoadState));
+ vmsvgaR3LoadExecFifo(pDevIns->pHlpR3, pThis, pThisCC, pLoadState->pSSM, pLoadState->uVersion, pLoadState->uPass);
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ /* The following RT_OS_DARWIN code was in vmsvga3dLoadExec and therefore must be executed before each vmsvga3dLoadExec invocation. */
+# ifndef RT_OS_DARWIN /** @todo r=bird: this is normally done on the EMT, so for DARWIN we do that when loading saved state too now. See DevVGA-SVGA.cpp */
+ /* Must initialize now as the recreation calls below rely on an initialized 3d subsystem. */
+ vmsvgaR3PowerOnDevice(pDevIns, pThis, pThisCC, /*fLoadState=*/ true);
+# endif
+
+ if (vmsvga3dIsLegacyBackend(pThisCC))
+ vmsvga3dLoadExec(pDevIns, pThis, pThisCC, pLoadState->pSSM, pLoadState->uVersion, pLoadState->uPass);
+# ifdef VMSVGA3D_DX
+ else
+ vmsvga3dDXLoadExec(pDevIns, pThis, pThisCC, pLoadState->pSSM, pLoadState->uVersion, pLoadState->uPass);
+# endif
+ }
+# endif
+ break;
+ }
+
+ case VMSVGA_FIFO_EXTCMD_UPDATE_SURFACE_HEAP_BUFFERS:
+ {
+# ifdef VBOX_WITH_VMSVGA3D
+ uint32_t sid = (uint32_t)(uintptr_t)pThisCC->svga.pvFIFOExtCmdParam;
+ Log(("vmsvgaR3FifoLoop: VMSVGA_FIFO_EXTCMD_UPDATE_SURFACE_HEAP_BUFFERS sid=%#x\n", sid));
+ vmsvga3dUpdateHeapBuffersForSurfaces(pThisCC, sid);
+# endif
+ break;
+ }
+
+
+ default:
+ AssertLogRelMsgFailed(("uExtCmd=%#x pvFIFOExtCmdParam=%p\n", uExtCmd, pThisCC->svga.pvFIFOExtCmdParam));
+ break;
+ }
+
+ /*
+ * Signal the end of the external command.
+ */
+ pThisCC->svga.pvFIFOExtCmdParam = NULL;
+ pThis->svga.u8FIFOExtCommand = VMSVGA_FIFO_EXTCMD_NONE;
+ ASMMemoryFence(); /* paranoia^2 */
+ int rc = RTSemEventSignal(pThisCC->svga.hFIFOExtCmdSem);
+ AssertLogRelRC(rc);
+}
+
+/**
+ * Worker for vmsvgaR3Destruct, vmsvgaR3Reset, vmsvgaR3Save and vmsvgaR3Load for
+ * doing a job on the FIFO thread (even when it's officially suspended).
+ *
+ * @returns VBox status code (fully asserted).
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param uExtCmd The command to execute on the FIFO thread.
+ * @param pvParam Pointer to command parameters.
+ * @param cMsWait The time to wait for the command, given in
+ * milliseconds.
+ */
+static int vmsvgaR3RunExtCmdOnFifoThread(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ uint8_t uExtCmd, void *pvParam, RTMSINTERVAL cMsWait)
+{
+ Assert(cMsWait >= RT_MS_1SEC * 5);
+ AssertLogRelMsg(pThis->svga.u8FIFOExtCommand == VMSVGA_FIFO_EXTCMD_NONE,
+ ("old=%d new=%d\n", pThis->svga.u8FIFOExtCommand, uExtCmd));
+
+ int rc;
+ PPDMTHREAD pThread = pThisCC->svga.pFIFOIOThread;
+ PDMTHREADSTATE enmState = pThread->enmState;
+ if (enmState == PDMTHREADSTATE_SUSPENDED)
+ {
+ /*
+ * The thread is suspended, we have to temporarily wake it up so it can
+ * perform the task.
+ * (We ASSUME not racing code here, both wrt thread state and ext commands.)
+ */
+ Log(("vmsvgaR3RunExtCmdOnFifoThread: uExtCmd=%d enmState=SUSPENDED\n", uExtCmd));
+ /* Post the request. */
+ pThis->svga.fFifoExtCommandWakeup = true;
+ pThisCC->svga.pvFIFOExtCmdParam = pvParam;
+ pThis->svga.u8FIFOExtCommand = uExtCmd;
+ ASMMemoryFence(); /* paranoia^3 */
+
+ /* Resume the thread. */
+ rc = PDMDevHlpThreadResume(pDevIns, pThread);
+ AssertLogRelRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ /* Wait. Take care in case the semaphore was already posted (same as below). */
+ rc = RTSemEventWait(pThisCC->svga.hFIFOExtCmdSem, cMsWait);
+ if ( rc == VINF_SUCCESS
+ && pThis->svga.u8FIFOExtCommand == uExtCmd)
+ rc = RTSemEventWait(pThisCC->svga.hFIFOExtCmdSem, cMsWait);
+ AssertLogRelMsg(pThis->svga.u8FIFOExtCommand != uExtCmd || RT_FAILURE_NP(rc),
+ ("%#x %Rrc\n", pThis->svga.u8FIFOExtCommand, rc));
+
+ /* suspend the thread */
+ pThis->svga.fFifoExtCommandWakeup = false;
+ int rc2 = PDMDevHlpThreadSuspend(pDevIns, pThread);
+ AssertLogRelRC(rc2);
+ if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
+ rc = rc2;
+ }
+ pThis->svga.fFifoExtCommandWakeup = false;
+ pThisCC->svga.pvFIFOExtCmdParam = NULL;
+ }
+ else if (enmState == PDMTHREADSTATE_RUNNING)
+ {
+ /*
+ * The thread is running, should only happen during reset and vmsvga3dsfc.
+ * We ASSUME not racing code here, both wrt thread state and ext commands.
+ */
+ Log(("vmsvgaR3RunExtCmdOnFifoThread: uExtCmd=%d enmState=RUNNING\n", uExtCmd));
+ Assert(uExtCmd == VMSVGA_FIFO_EXTCMD_RESET || uExtCmd == VMSVGA_FIFO_EXTCMD_UPDATE_SURFACE_HEAP_BUFFERS || uExtCmd == VMSVGA_FIFO_EXTCMD_POWEROFF);
+
+ /* Post the request. */
+ pThisCC->svga.pvFIFOExtCmdParam = pvParam;
+ pThis->svga.u8FIFOExtCommand = uExtCmd;
+ ASMMemoryFence(); /* paranoia^2 */
+ rc = PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+ AssertLogRelRC(rc);
+
+ /* Wait. Take care in case the semaphore was already posted (same as above). */
+ rc = RTSemEventWait(pThisCC->svga.hFIFOExtCmdSem, cMsWait);
+ if ( rc == VINF_SUCCESS
+ && pThis->svga.u8FIFOExtCommand == uExtCmd)
+ rc = RTSemEventWait(pThisCC->svga.hFIFOExtCmdSem, cMsWait); /* it was already posted, retry the wait. */
+ AssertLogRelMsg(pThis->svga.u8FIFOExtCommand != uExtCmd || RT_FAILURE_NP(rc),
+ ("%#x %Rrc\n", pThis->svga.u8FIFOExtCommand, rc));
+
+ pThisCC->svga.pvFIFOExtCmdParam = NULL;
+ }
+ else
+ {
+ /*
+ * Something is wrong with the thread!
+ */
+ AssertLogRelMsgFailed(("uExtCmd=%d enmState=%d\n", uExtCmd, enmState));
+ rc = VERR_INVALID_STATE;
+ }
+ return rc;
+}
+
+
+/**
+ * Marks the FIFO non-busy, notifying any waiting EMTs.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pSVGAState Pointer to the ring-3 only SVGA state data.
+ * @param offFifoMin The start byte offset of the command FIFO.
+ */
+static void vmsvgaR3FifoSetNotBusy(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PVMSVGAR3STATE pSVGAState, uint32_t offFifoMin)
+{
+ ASMAtomicAndU32(&pThis->svga.fBusy, ~(VMSVGA_BUSY_F_FIFO | VMSVGA_BUSY_F_EMT_FORCE));
+ if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_BUSY, offFifoMin))
+ vmsvgaHCSafeFifoBusyRegUpdate(pThis, pThisCC, pThis->svga.fBusy != 0);
+
+ /* Wake up any waiting EMTs. */
+ if (pSVGAState->cBusyDelayedEmts > 0)
+ {
+# ifdef VMSVGA_USE_EMT_HALT_CODE
+ VMCPUID idCpu = VMCpuSetFindLastPresentInternal(&pSVGAState->BusyDelayedEmts);
+ if (idCpu != NIL_VMCPUID)
+ {
+ PDMDevHlpVMNotifyCpuDeviceReady(pDevIns, idCpu);
+ while (idCpu-- > 0)
+ if (VMCPUSET_IS_PRESENT(&pSVGAState->BusyDelayedEmts, idCpu))
+ PDMDevHlpVMNotifyCpuDeviceReady(pDevIns, idCpu);
+ }
+# else
+ int rc2 = RTSemEventMultiSignal(pSVGAState->hBusyDelayedEmts);
+ AssertRC(rc2);
+# endif
+ }
+}
+
+/**
+ * Reads (more) payload into the command buffer.
+ *
+ * @returns pbBounceBuf on success
+ * @retval (void *)1 if the thread was requested to stop.
+ * @retval NULL on FIFO error.
+ *
+ * @param cbPayloadReq The number of bytes of payload requested.
+ * @param pFIFO The FIFO.
+ * @param offCurrentCmd The FIFO byte offset of the current command.
+ * @param offFifoMin The start byte offset of the command FIFO.
+ * @param offFifoMax The end byte offset of the command FIFO.
+ * @param pbBounceBuf The bounch buffer. Same size as the entire FIFO, so
+ * always sufficient size.
+ * @param pcbAlreadyRead How much payload we've already read into the bounce
+ * buffer. (We will NEVER re-read anything.)
+ * @param pThread The calling PDM thread handle.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pSVGAState Pointer to the ring-3 only SVGA state data. For
+ * statistics collection.
+ * @param pDevIns The device instance.
+ */
+static void *vmsvgaR3FifoGetCmdPayload(uint32_t cbPayloadReq, uint32_t RT_UNTRUSTED_VOLATILE_GUEST *pFIFO,
+ uint32_t offCurrentCmd, uint32_t offFifoMin, uint32_t offFifoMax,
+ uint8_t *pbBounceBuf, uint32_t *pcbAlreadyRead,
+ PPDMTHREAD pThread, PVGASTATE pThis, PVMSVGAR3STATE pSVGAState, PPDMDEVINS pDevIns)
+{
+ Assert(pbBounceBuf);
+ Assert(pcbAlreadyRead);
+ Assert(offFifoMin < offFifoMax);
+ Assert(offCurrentCmd >= offFifoMin && offCurrentCmd < offFifoMax);
+ Assert(offFifoMax <= pThis->svga.cbFIFO);
+
+ /*
+ * Check if the requested payload size has already been satisfied .
+ * .
+ * When called to read more, the caller is responsible for making sure the .
+ * new command size (cbRequsted) never is smaller than what has already .
+ * been read.
+ */
+ uint32_t cbAlreadyRead = *pcbAlreadyRead;
+ if (cbPayloadReq <= cbAlreadyRead)
+ {
+ AssertLogRelReturn(cbPayloadReq == cbAlreadyRead, NULL);
+ return pbBounceBuf;
+ }
+
+ /*
+ * Commands bigger than the fifo buffer are invalid.
+ */
+ uint32_t const cbFifoCmd = offFifoMax - offFifoMin;
+ AssertMsgReturnStmt(cbPayloadReq <= cbFifoCmd, ("cbPayloadReq=%#x cbFifoCmd=%#x\n", cbPayloadReq, cbFifoCmd),
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoErrors),
+ NULL);
+
+ /*
+ * Move offCurrentCmd past the command dword.
+ */
+ offCurrentCmd += sizeof(uint32_t);
+ if (offCurrentCmd >= offFifoMax)
+ offCurrentCmd = offFifoMin;
+
+ /*
+ * Do we have sufficient payload data available already?
+ * The host should not read beyond [SVGA_FIFO_NEXT_CMD], therefore '>=' in the condition below.
+ */
+ uint32_t cbAfter, cbBefore;
+ uint32_t offNextCmd = pFIFO[SVGA_FIFO_NEXT_CMD];
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ if (offNextCmd >= offCurrentCmd)
+ {
+ if (RT_LIKELY(offNextCmd < offFifoMax))
+ cbAfter = offNextCmd - offCurrentCmd;
+ else
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoErrors);
+ LogRelMax(16, ("vmsvgaR3FifoGetCmdPayload: Invalid offNextCmd=%#x (offFifoMin=%#x offFifoMax=%#x)\n",
+ offNextCmd, offFifoMin, offFifoMax));
+ cbAfter = offFifoMax - offCurrentCmd;
+ }
+ cbBefore = 0;
+ }
+ else
+ {
+ cbAfter = offFifoMax - offCurrentCmd;
+ if (offNextCmd >= offFifoMin)
+ cbBefore = offNextCmd - offFifoMin;
+ else
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoErrors);
+ LogRelMax(16, ("vmsvgaR3FifoGetCmdPayload: Invalid offNextCmd=%#x (offFifoMin=%#x offFifoMax=%#x)\n",
+ offNextCmd, offFifoMin, offFifoMax));
+ cbBefore = 0;
+ }
+ }
+ if (cbAfter + cbBefore < cbPayloadReq)
+ {
+ /*
+ * Insufficient, must wait for it to arrive.
+ */
+/** @todo Should clear the busy flag here to maybe encourage the guest to wake us up. */
+ STAM_REL_PROFILE_START(&pSVGAState->StatFifoStalls, Stall);
+ for (uint32_t i = 0;; i++)
+ {
+ if (pThread->enmState != PDMTHREADSTATE_RUNNING)
+ {
+ STAM_REL_PROFILE_STOP(&pSVGAState->StatFifoStalls, Stall);
+ return (void *)(uintptr_t)1;
+ }
+ Log(("Guest still copying (%x vs %x) current %x next %x stop %x loop %u; sleep a bit\n",
+ cbPayloadReq, cbAfter + cbBefore, offCurrentCmd, offNextCmd, pFIFO[SVGA_FIFO_STOP], i));
+
+ PDMDevHlpSUPSemEventWaitNoResume(pDevIns, pThis->svga.hFIFORequestSem, i < 16 ? 1 : 2);
+
+ offNextCmd = pFIFO[SVGA_FIFO_NEXT_CMD];
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ if (offNextCmd >= offCurrentCmd)
+ {
+ cbAfter = RT_MIN(offNextCmd, offFifoMax) - offCurrentCmd;
+ cbBefore = 0;
+ }
+ else
+ {
+ cbAfter = offFifoMax - offCurrentCmd;
+ cbBefore = RT_MAX(offNextCmd, offFifoMin) - offFifoMin;
+ }
+
+ if (cbAfter + cbBefore >= cbPayloadReq)
+ break;
+ }
+ STAM_REL_PROFILE_STOP(&pSVGAState->StatFifoStalls, Stall);
+ }
+
+ /*
+ * Copy out the memory and update what pcbAlreadyRead points to.
+ */
+ if (cbAfter >= cbPayloadReq)
+ memcpy(pbBounceBuf + cbAlreadyRead,
+ (uint8_t *)pFIFO + offCurrentCmd + cbAlreadyRead,
+ cbPayloadReq - cbAlreadyRead);
+ else
+ {
+ LogFlow(("Split data buffer at %x (%u-%u)\n", offCurrentCmd, cbAfter, cbBefore));
+ if (cbAlreadyRead < cbAfter)
+ {
+ memcpy(pbBounceBuf + cbAlreadyRead,
+ (uint8_t *)pFIFO + offCurrentCmd + cbAlreadyRead,
+ cbAfter - cbAlreadyRead);
+ cbAlreadyRead = cbAfter;
+ }
+ memcpy(pbBounceBuf + cbAlreadyRead,
+ (uint8_t *)pFIFO + offFifoMin + cbAlreadyRead - cbAfter,
+ cbPayloadReq - cbAlreadyRead);
+ }
+ *pcbAlreadyRead = cbPayloadReq;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ return pbBounceBuf;
+}
+
+
+/**
+ * Sends cursor position and visibility information from the FIFO to the front-end.
+ * @returns SVGA_FIFO_CURSOR_COUNT value used.
+ */
+static uint32_t
+vmsvgaR3FifoUpdateCursor(PVGASTATECC pThisCC, PVMSVGAR3STATE pSVGAState, uint32_t RT_UNTRUSTED_VOLATILE_GUEST *pFIFO,
+ uint32_t offFifoMin, uint32_t uCursorUpdateCount,
+ uint32_t *pxLast, uint32_t *pyLast, uint32_t *pfLastVisible)
+{
+ /*
+ * Check if the cursor update counter has changed and try get a stable
+ * set of values if it has. This is race-prone, especially consindering
+ * the screen ID, but little we can do about that.
+ */
+ uint32_t x, y, fVisible, idScreen;
+ for (uint32_t i = 0; ; i++)
+ {
+ x = pFIFO[SVGA_FIFO_CURSOR_X];
+ y = pFIFO[SVGA_FIFO_CURSOR_Y];
+ fVisible = pFIFO[SVGA_FIFO_CURSOR_ON];
+ idScreen = VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_CURSOR_SCREEN_ID, offFifoMin)
+ ? pFIFO[SVGA_FIFO_CURSOR_SCREEN_ID] : SVGA_ID_INVALID;
+ if ( uCursorUpdateCount == pFIFO[SVGA_FIFO_CURSOR_COUNT]
+ || i > 3)
+ break;
+ if (i == 0)
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoCursorFetchAgain);
+ ASMNopPause();
+ uCursorUpdateCount = pFIFO[SVGA_FIFO_CURSOR_COUNT];
+ }
+
+ /*
+ * Check if anything has changed, as calling into pDrv is not light-weight.
+ */
+ if ( *pxLast == x
+ && *pyLast == y
+ && (idScreen != SVGA_ID_INVALID || *pfLastVisible == fVisible))
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoCursorNoChange);
+ else
+ {
+ /*
+ * Detected changes.
+ *
+ * We handle global, not per-screen visibility information by sending
+ * pfnVBVAMousePointerShape without shape data.
+ */
+ *pxLast = x;
+ *pyLast = y;
+ uint32_t fFlags = VBVA_CURSOR_VALID_DATA;
+ if (idScreen != SVGA_ID_INVALID)
+ fFlags |= VBVA_CURSOR_SCREEN_RELATIVE;
+ else if (*pfLastVisible != fVisible)
+ {
+ LogRel2(("vmsvgaR3FifoUpdateCursor: fVisible %d fLastVisible %d (%d,%d)\n", fVisible, *pfLastVisible, x, y));
+ *pfLastVisible = fVisible;
+ pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv, RT_BOOL(fVisible), false, 0, 0, 0, 0, NULL);
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoCursorVisiblity);
+ }
+ pThisCC->pDrv->pfnVBVAReportCursorPosition(pThisCC->pDrv, fFlags, idScreen, x, y);
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoCursorPosition);
+ }
+
+ /*
+ * Update done. Signal this to the guest.
+ */
+ pFIFO[SVGA_FIFO_CURSOR_LAST_UPDATED] = uCursorUpdateCount;
+
+ return uCursorUpdateCount;
+}
+
+
+/**
+ * Checks if there is work to be done, either cursor updating or FIFO commands.
+ *
+ * @returns true if pending work, false if not.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param uLastCursorCount The last cursor update counter value.
+ */
+DECLINLINE(bool) vmsvgaR3FifoHasWork(PVGASTATECC pThisCC, uint32_t uLastCursorCount)
+{
+ /* If FIFO does not exist than there is nothing to do. Command buffers also require the enabled FIFO. */
+ uint32_t RT_UNTRUSTED_VOLATILE_GUEST * const pFIFO = pThisCC->svga.pau32FIFO;
+ AssertReturn(pFIFO, false);
+
+ if (vmsvgaR3CmdBufHasWork(pThisCC))
+ return true;
+
+ if (pFIFO[SVGA_FIFO_NEXT_CMD] != pFIFO[SVGA_FIFO_STOP])
+ return true;
+
+ if ( uLastCursorCount != pFIFO[SVGA_FIFO_CURSOR_COUNT]
+ && VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_CURSOR_LAST_UPDATED, pFIFO[SVGA_FIFO_MIN]))
+ return true;
+
+ return false;
+}
+
+
+/**
+ * Called by the VGA refresh timer to wake up the FIFO thread when needed.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+void vmsvgaR3FifoWatchdogTimer(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ /* Caller already checked pThis->svga.fFIFOThreadSleeping, so we only have
+ to recheck it before doing the signalling. */
+ if ( vmsvgaR3FifoHasWork(pThisCC, ASMAtomicReadU32(&pThis->svga.uLastCursorUpdateCount))
+ && pThis->svga.fFIFOThreadSleeping
+ && !ASMAtomicReadBool(&pThis->svga.fBadGuest))
+ {
+ int rc = PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+ AssertRC(rc);
+ STAM_REL_COUNTER_INC(&pThisCC->svga.pSvgaR3State->StatFifoWatchdogWakeUps);
+ }
+}
+
+
+/**
+ * Called by the FIFO thread to process pending actions.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+void vmsvgaR3FifoPendingActions(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ RT_NOREF(pDevIns);
+
+ /* Currently just mode changes. */
+ if (ASMBitTestAndClear(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE_BIT))
+ {
+ vmsvgaR3ChangeMode(pThis, pThisCC);
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThisCC->svga.p3dState != NULL)
+ vmsvga3dChangeMode(pThisCC);
+# endif
+ }
+}
+
+
+/*
+ * These two macros are put outside vmsvgaR3FifoLoop because doxygen gets confused,
+ * even the latest version, and thinks we're documenting vmsvgaR3FifoLoop. Sigh.
+ */
+/** @def VMSVGAFIFO_GET_CMD_BUFFER_BREAK
+ * Macro for shortening calls to vmsvgaR3FifoGetCmdPayload.
+ *
+ * Will break out of the switch on failure.
+ * Will restart and quit the loop if the thread was requested to stop.
+ *
+ * @param a_PtrVar Request variable pointer.
+ * @param a_Type Request typedef (not pointer) for casting.
+ * @param a_cbPayloadReq How much payload to fetch.
+ * @remarks Accesses a bunch of variables in the current scope!
+ */
+# define VMSVGAFIFO_GET_CMD_BUFFER_BREAK(a_PtrVar, a_Type, a_cbPayloadReq) \
+ if (1) { \
+ (a_PtrVar) = (a_Type *)vmsvgaR3FifoGetCmdPayload((a_cbPayloadReq), pFIFO, offCurrentCmd, offFifoMin, offFifoMax, \
+ pbBounceBuf, &cbPayload, pThread, pThis, pSVGAState, pDevIns); \
+ if (RT_UNLIKELY((uintptr_t)(a_PtrVar) < 2)) { if ((uintptr_t)(a_PtrVar) == 1) continue; break; } \
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE(); \
+ } else do {} while (0)
+/* @def VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK
+ * Macro for shortening calls to vmsvgaR3FifoGetCmdPayload for refetching the
+ * buffer after figuring out the actual command size.
+ *
+ * Will break out of the switch on failure.
+ *
+ * @param a_PtrVar Request variable pointer.
+ * @param a_Type Request typedef (not pointer) for casting.
+ * @param a_cbPayloadReq How much payload to fetch.
+ * @remarks Accesses a bunch of variables in the current scope!
+ */
+# define VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(a_PtrVar, a_Type, a_cbPayloadReq) \
+ if (1) { \
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(a_PtrVar, a_Type, a_cbPayloadReq); \
+ } else do {} while (0)
+
+/**
+ * @callback_method_impl{PFNPDMTHREADDEV, The async FIFO handling thread.}
+ */
+static DECLCALLBACK(int) vmsvgaR3FifoLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATER3 pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ int rc;
+
+ if (pThread->enmState == PDMTHREADSTATE_INITIALIZING)
+ return VINF_SUCCESS;
+
+ /*
+ * Special mode where we only execute an external command and the go back
+ * to being suspended. Currently, all ext cmds ends up here, with the reset
+ * one also being eligble for runtime execution further down as well.
+ */
+ if (pThis->svga.fFifoExtCommandWakeup)
+ {
+ vmsvgaR3FifoHandleExtCmd(pDevIns, pThis, pThisCC);
+ while (pThread->enmState == PDMTHREADSTATE_RUNNING)
+ if (pThis->svga.u8FIFOExtCommand == VMSVGA_FIFO_EXTCMD_NONE)
+ PDMDevHlpSUPSemEventWaitNoResume(pDevIns, pThis->svga.hFIFORequestSem, RT_MS_1MIN);
+ else
+ vmsvgaR3FifoHandleExtCmd(pDevIns, pThis, pThisCC);
+ return VINF_SUCCESS;
+ }
+
+
+ /*
+ * Signal the semaphore to make sure we don't wait for 250ms after a
+ * suspend & resume scenario (see vmsvgaR3FifoGetCmdPayload).
+ */
+ PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+
+ /*
+ * Allocate a bounce buffer for command we get from the FIFO.
+ * (All code must return via the end of the function to free this buffer.)
+ */
+ uint8_t *pbBounceBuf = (uint8_t *)RTMemAllocZ(pThis->svga.cbFIFO);
+ AssertReturn(pbBounceBuf, VERR_NO_MEMORY);
+
+ /*
+ * Polling/sleep interval config.
+ *
+ * We wait for an a short interval if the guest has recently given us work
+ * to do, but the interval increases the longer we're kept idle. Once we've
+ * reached the refresh timer interval, we'll switch to extended waits,
+ * depending on it or the guest to kick us into action when needed.
+ *
+ * Should the refresh time go fishing, we'll just continue increasing the
+ * sleep length till we reaches the 250 ms max after about 16 seconds.
+ */
+ RTMSINTERVAL const cMsMinSleep = 16;
+ RTMSINTERVAL const cMsIncSleep = 2;
+ RTMSINTERVAL const cMsMaxSleep = 250;
+ RTMSINTERVAL const cMsExtendedSleep = 15 * RT_MS_1SEC; /* Regular paranoia dictates that this cannot be indefinite. */
+ RTMSINTERVAL cMsSleep = cMsMaxSleep;
+
+ /*
+ * Cursor update state (SVGA_FIFO_CAP_CURSOR_BYPASS_3).
+ *
+ * Initialize with values that will detect an update from the guest.
+ * Make sure that if the guest never updates the cursor position, then the device does not report it.
+ * The guest has to change the value of uLastCursorUpdateCount, when the cursor position is actually updated.
+ * xLastCursor, yLastCursor and fLastCursorVisible are set to report the first update.
+ */
+ uint32_t RT_UNTRUSTED_VOLATILE_GUEST * const pFIFO = pThisCC->svga.pau32FIFO;
+ pThis->svga.uLastCursorUpdateCount = pFIFO[SVGA_FIFO_CURSOR_COUNT];
+ uint32_t xLastCursor = ~pFIFO[SVGA_FIFO_CURSOR_X];
+ uint32_t yLastCursor = ~pFIFO[SVGA_FIFO_CURSOR_Y];
+ uint32_t fLastCursorVisible = ~pFIFO[SVGA_FIFO_CURSOR_ON];
+
+ /*
+ * The FIFO loop.
+ */
+ LogFlow(("vmsvgaR3FifoLoop: started loop\n"));
+ bool fBadOrDisabledFifo = ASMAtomicReadBool(&pThis->svga.fBadGuest);
+ while (pThread->enmState == PDMTHREADSTATE_RUNNING)
+ {
+# if defined(RT_OS_DARWIN) && defined(VBOX_WITH_VMSVGA3D)
+ /*
+ * Should service the run loop every so often.
+ */
+ if (pThis->svga.f3DEnabled)
+ vmsvga3dCocoaServiceRunLoop();
+# endif
+
+ /* First check any pending actions. */
+ vmsvgaR3FifoPendingActions(pDevIns, pThis, pThisCC);
+
+ /*
+ * Unless there's already work pending, go to sleep for a short while.
+ * (See polling/sleep interval config above.)
+ */
+ if ( fBadOrDisabledFifo
+ || !vmsvgaR3FifoHasWork(pThisCC, pThis->svga.uLastCursorUpdateCount))
+ {
+ ASMAtomicWriteBool(&pThis->svga.fFIFOThreadSleeping, true);
+ Assert(pThis->cMilliesRefreshInterval > 0);
+ if (cMsSleep < pThis->cMilliesRefreshInterval)
+ rc = PDMDevHlpSUPSemEventWaitNoResume(pDevIns, pThis->svga.hFIFORequestSem, cMsSleep);
+ else
+ {
+# ifdef VMSVGA_USE_FIFO_ACCESS_HANDLER
+ int rc2 = PDMDevHlpPGMHandlerPhysicalReset(pDevIns, pThis->svga.GCPhysFIFO);
+ AssertRC(rc2); /* No break. Racing EMTs unmapping and remapping the region. */
+# endif
+ if ( !fBadOrDisabledFifo
+ && vmsvgaR3FifoHasWork(pThisCC, pThis->svga.uLastCursorUpdateCount))
+ rc = VINF_SUCCESS;
+ else
+ {
+ STAM_REL_PROFILE_START(&pSVGAState->StatFifoExtendedSleep, Acc);
+ rc = PDMDevHlpSUPSemEventWaitNoResume(pDevIns, pThis->svga.hFIFORequestSem, cMsExtendedSleep);
+ STAM_REL_PROFILE_STOP(&pSVGAState->StatFifoExtendedSleep, Acc);
+ }
+ }
+ ASMAtomicWriteBool(&pThis->svga.fFIFOThreadSleeping, false);
+ AssertBreak(RT_SUCCESS(rc) || rc == VERR_TIMEOUT || rc == VERR_INTERRUPTED);
+ if (pThread->enmState != PDMTHREADSTATE_RUNNING)
+ {
+ LogFlow(("vmsvgaR3FifoLoop: thread state %x\n", pThread->enmState));
+ break;
+ }
+ }
+ else
+ rc = VINF_SUCCESS;
+ fBadOrDisabledFifo = ASMAtomicReadBool(&pThis->svga.fBadGuest);
+ if (rc == VERR_TIMEOUT)
+ {
+ if (!vmsvgaR3FifoHasWork(pThisCC, pThis->svga.uLastCursorUpdateCount))
+ {
+ cMsSleep = RT_MIN(cMsSleep + cMsIncSleep, cMsMaxSleep);
+ continue;
+ }
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoTodoTimeout);
+
+ Log(("vmsvgaR3FifoLoop: timeout\n"));
+ }
+ else if (vmsvgaR3FifoHasWork(pThisCC, pThis->svga.uLastCursorUpdateCount))
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoTodoWoken);
+ cMsSleep = cMsMinSleep;
+
+ Log(("vmsvgaR3FifoLoop: enabled=%d configured=%d busy=%d\n", pThis->svga.fEnabled, pThis->svga.fConfigured, pFIFO[SVGA_FIFO_BUSY]));
+ Log(("vmsvgaR3FifoLoop: min %x max %x\n", pFIFO[SVGA_FIFO_MIN], pFIFO[SVGA_FIFO_MAX]));
+ Log(("vmsvgaR3FifoLoop: next %x stop %x\n", pFIFO[SVGA_FIFO_NEXT_CMD], pFIFO[SVGA_FIFO_STOP]));
+
+ /*
+ * Handle external commands (currently only reset).
+ */
+ if (pThis->svga.u8FIFOExtCommand != VMSVGA_FIFO_EXTCMD_NONE)
+ {
+ vmsvgaR3FifoHandleExtCmd(pDevIns, pThis, pThisCC);
+ continue;
+ }
+
+ /*
+ * If guest misbehaves, then do nothing.
+ */
+ if (ASMAtomicReadBool(&pThis->svga.fBadGuest))
+ {
+ vmsvgaR3FifoSetNotBusy(pDevIns, pThis, pThisCC, pSVGAState, pFIFO[SVGA_FIFO_MIN]);
+ cMsSleep = cMsExtendedSleep;
+ LogRelMax(1, ("VMSVGA: FIFO processing stopped because of the guest misbehavior\n"));
+ continue;
+ }
+
+ /*
+ * The device must be enabled and configured.
+ */
+ if ( !pThis->svga.fEnabled
+ || !pThis->svga.fConfigured)
+ {
+ vmsvgaR3FifoSetNotBusy(pDevIns, pThis, pThisCC, pSVGAState, pFIFO[SVGA_FIFO_MIN]);
+ fBadOrDisabledFifo = true;
+ cMsSleep = cMsMaxSleep; /* cheat */
+ continue;
+ }
+
+ /*
+ * Get and check the min/max values. We ASSUME that they will remain
+ * unchanged while we process requests. A further ASSUMPTION is that
+ * the guest won't mess with SVGA_FIFO_NEXT_CMD while we're busy, so
+ * we don't read it back while in the loop.
+ */
+ uint32_t const offFifoMin = pFIFO[SVGA_FIFO_MIN];
+ uint32_t const offFifoMax = pFIFO[SVGA_FIFO_MAX];
+ uint32_t offCurrentCmd = pFIFO[SVGA_FIFO_STOP];
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ if (RT_UNLIKELY( !VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_STOP, offFifoMin)
+ || offFifoMax <= offFifoMin
+ || offFifoMax > pThis->svga.cbFIFO
+ || (offFifoMax & 3) != 0
+ || (offFifoMin & 3) != 0
+ || offCurrentCmd < offFifoMin
+ || offCurrentCmd > offFifoMax))
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoErrors);
+ LogRelMax(8, ("vmsvgaR3FifoLoop: Bad fifo: min=%#x stop=%#x max=%#x\n", offFifoMin, offCurrentCmd, offFifoMax));
+ vmsvgaR3FifoSetNotBusy(pDevIns, pThis, pThisCC, pSVGAState, offFifoMin);
+ fBadOrDisabledFifo = true;
+ continue;
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ if (RT_UNLIKELY(offCurrentCmd & 3))
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoErrors);
+ LogRelMax(8, ("vmsvgaR3FifoLoop: Misaligned offCurrentCmd=%#x?\n", offCurrentCmd));
+ offCurrentCmd &= ~UINT32_C(3);
+ }
+
+ /*
+ * Update the cursor position before we start on the FIFO commands.
+ */
+ /** @todo do we need to check whether the guest disabled the SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability here? */
+ if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_CURSOR_LAST_UPDATED, offFifoMin))
+ {
+ uint32_t const uCursorUpdateCount = pFIFO[SVGA_FIFO_CURSOR_COUNT];
+ if (uCursorUpdateCount == pThis->svga.uLastCursorUpdateCount)
+ { /* halfways likely */ }
+ else
+ {
+ uint32_t const uNewCount = vmsvgaR3FifoUpdateCursor(pThisCC, pSVGAState, pFIFO, offFifoMin, uCursorUpdateCount,
+ &xLastCursor, &yLastCursor, &fLastCursorVisible);
+ ASMAtomicWriteU32(&pThis->svga.uLastCursorUpdateCount, uNewCount);
+ }
+ }
+
+ /*
+ * Mark the FIFO as busy.
+ */
+ ASMAtomicWriteU32(&pThis->svga.fBusy, VMSVGA_BUSY_F_FIFO); // Clears VMSVGA_BUSY_F_EMT_FORCE!
+ if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_BUSY, offFifoMin))
+ ASMAtomicWriteU32(&pFIFO[SVGA_FIFO_BUSY], true);
+
+ /*
+ * Process all submitted command buffers.
+ */
+ vmsvgaR3CmdBufProcessBuffers(pDevIns, pThis, pThisCC, pThread);
+
+ /*
+ * Execute all queued FIFO commands.
+ * Quit if pending external command or changes in the thread state.
+ */
+ bool fDone = false;
+ while ( !(fDone = (pFIFO[SVGA_FIFO_NEXT_CMD] == offCurrentCmd))
+ && pThread->enmState == PDMTHREADSTATE_RUNNING)
+ {
+ uint32_t cbPayload = 0;
+ uint32_t u32IrqStatus = 0;
+
+ Assert(offCurrentCmd < offFifoMax && offCurrentCmd >= offFifoMin);
+
+ /* First check any pending actions. */
+ vmsvgaR3FifoPendingActions(pDevIns, pThis, pThisCC);
+
+ /* Check for pending external commands (reset). */
+ if (pThis->svga.u8FIFOExtCommand != VMSVGA_FIFO_EXTCMD_NONE)
+ break;
+
+ /*
+ * Process the command.
+ */
+ /* 'enmCmdId' is actually a SVGAFifoCmdId. It is treated as uint32_t in order to avoid a compiler
+ * warning. Because we implement some obsolete and deprecated commands, which are not included in
+ * the SVGAFifoCmdId enum in the VMSVGA headers anymore.
+ */
+ uint32_t const enmCmdId = pFIFO[offCurrentCmd / sizeof(uint32_t)];
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ LogFlow(("vmsvgaR3FifoLoop: FIFO command (iCmd=0x%x) %s %d\n",
+ offCurrentCmd / sizeof(uint32_t), vmsvgaR3FifoCmdToString(enmCmdId), enmCmdId));
+ switch (enmCmdId)
+ {
+ case SVGA_CMD_INVALID_CMD:
+ /* Nothing to do. */
+ STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdInvalidCmd);
+ break;
+
+ case SVGA_CMD_FENCE:
+ {
+ SVGAFifoCmdFence *pCmdFence;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmdFence, SVGAFifoCmdFence, sizeof(*pCmdFence));
+ STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdFence);
+ if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_FENCE, offFifoMin))
+ {
+ Log(("vmsvgaR3FifoLoop: SVGA_CMD_FENCE %#x\n", pCmdFence->fence));
+ pFIFO[SVGA_FIFO_FENCE] = pCmdFence->fence;
+
+ if (pThis->svga.u32IrqMask & SVGA_IRQFLAG_ANY_FENCE)
+ {
+ Log(("vmsvgaR3FifoLoop: any fence irq\n"));
+ u32IrqStatus |= SVGA_IRQFLAG_ANY_FENCE;
+ }
+ else
+ if ( VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_FENCE_GOAL, offFifoMin)
+ && (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FENCE_GOAL)
+ && pFIFO[SVGA_FIFO_FENCE_GOAL] == pCmdFence->fence)
+ {
+ Log(("vmsvgaR3FifoLoop: fence goal reached irq (fence=%#x)\n", pCmdFence->fence));
+ u32IrqStatus |= SVGA_IRQFLAG_FENCE_GOAL;
+ }
+ }
+ else
+ Log(("SVGA_CMD_FENCE is bogus when offFifoMin is %#x!\n", offFifoMin));
+ break;
+ }
+
+ case SVGA_CMD_UPDATE:
+ {
+ SVGAFifoCmdUpdate *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdUpdate, sizeof(*pCmd));
+ vmsvgaR3CmdUpdate(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_UPDATE_VERBOSE:
+ {
+ SVGAFifoCmdUpdateVerbose *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdUpdateVerbose, sizeof(*pCmd));
+ vmsvgaR3CmdUpdateVerbose(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DEFINE_CURSOR:
+ {
+ /* Followed by bitmap data. */
+ SVGAFifoCmdDefineCursor *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineCursor, sizeof(*pCmd));
+
+ /* Figure out the size of the bitmap data. */
+ ASSERT_GUEST_BREAK(pCmd->height < 2048 && pCmd->width < 2048);
+ ASSERT_GUEST_BREAK(pCmd->andMaskDepth <= 32);
+ ASSERT_GUEST_BREAK(pCmd->xorMaskDepth <= 32);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const cbAndLine = RT_ALIGN_32(pCmd->width * (pCmd->andMaskDepth + (pCmd->andMaskDepth == 15)), 32) / 8;
+ uint32_t const cbAndMask = cbAndLine * pCmd->height;
+ uint32_t const cbXorLine = RT_ALIGN_32(pCmd->width * (pCmd->xorMaskDepth + (pCmd->xorMaskDepth == 15)), 32) / 8;
+ uint32_t const cbXorMask = cbXorLine * pCmd->height;
+
+ uint32_t const cbCmd = sizeof(SVGAFifoCmdDefineCursor) + cbAndMask + cbXorMask;
+ VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineCursor, cbCmd);
+ vmsvgaR3CmdDefineCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DEFINE_ALPHA_CURSOR:
+ {
+ /* Followed by bitmap data. */
+ SVGAFifoCmdDefineAlphaCursor *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineAlphaCursor, sizeof(*pCmd));
+
+ /* Figure out the size of the bitmap data. */
+ ASSERT_GUEST_BREAK(pCmd->height < 2048 && pCmd->width < 2048);
+
+ uint32_t const cbCmd = sizeof(SVGAFifoCmdDefineAlphaCursor) + pCmd->width * pCmd->height * sizeof(uint32_t) /* 32-bit BRGA format */;
+ VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineAlphaCursor, cbCmd);
+ vmsvgaR3CmdDefineAlphaCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_MOVE_CURSOR:
+ {
+ /* Deprecated; there should be no driver which *requires* this command. However, if
+ * we do ecncounter this command, it might be useful to not get the FIFO completely out of
+ * alignment.
+ * May be issued by guest if SVGA_CAP_CURSOR_BYPASS is missing.
+ */
+ SVGAFifoCmdMoveCursor *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdMoveCursor, sizeof(*pCmd));
+ vmsvgaR3CmdMoveCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DISPLAY_CURSOR:
+ {
+ /* Deprecated; there should be no driver which *requires* this command. However, if
+ * we do ecncounter this command, it might be useful to not get the FIFO completely out of
+ * alignment.
+ * May be issued by guest if SVGA_CAP_CURSOR_BYPASS is missing.
+ */
+ SVGAFifoCmdDisplayCursor *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDisplayCursor, sizeof(*pCmd));
+ vmsvgaR3CmdDisplayCursor(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_RECT_FILL:
+ {
+ SVGAFifoCmdRectFill *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRectFill, sizeof(*pCmd));
+ vmsvgaR3CmdRectFill(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_RECT_COPY:
+ {
+ SVGAFifoCmdRectCopy *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRectCopy, sizeof(*pCmd));
+ vmsvgaR3CmdRectCopy(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_RECT_ROP_COPY:
+ {
+ SVGAFifoCmdRectRopCopy *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRectRopCopy, sizeof(*pCmd));
+ vmsvgaR3CmdRectRopCopy(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_ESCAPE:
+ {
+ /* Followed by 'size' bytes of data. */
+ SVGAFifoCmdEscape *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdEscape, sizeof(*pCmd));
+
+ ASSERT_GUEST_BREAK(pCmd->size < pThis->svga.cbFIFO - sizeof(SVGAFifoCmdEscape));
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const cbCmd = sizeof(SVGAFifoCmdEscape) + pCmd->size;
+ VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdEscape, cbCmd);
+ vmsvgaR3CmdEscape(pThis, pThisCC, pCmd);
+ break;
+ }
+# ifdef VBOX_WITH_VMSVGA3D
+ case SVGA_CMD_DEFINE_GMR2:
+ {
+ SVGAFifoCmdDefineGMR2 *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineGMR2, sizeof(*pCmd));
+ vmsvgaR3CmdDefineGMR2(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_REMAP_GMR2:
+ {
+ /* Followed by page descriptors or guest ptr. */
+ SVGAFifoCmdRemapGMR2 *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRemapGMR2, sizeof(*pCmd));
+
+ /* Calculate the size of what comes after next and fetch it. */
+ uint32_t cbCmd = sizeof(SVGAFifoCmdRemapGMR2);
+ if (pCmd->flags & SVGA_REMAP_GMR2_VIA_GMR)
+ cbCmd += sizeof(SVGAGuestPtr);
+ else
+ {
+ uint32_t const cbPageDesc = (pCmd->flags & SVGA_REMAP_GMR2_PPN64) ? sizeof(uint64_t) : sizeof(uint32_t);
+ if (pCmd->flags & SVGA_REMAP_GMR2_SINGLE_PPN)
+ {
+ cbCmd += cbPageDesc;
+ pCmd->numPages = 1;
+ }
+ else
+ {
+ ASSERT_GUEST_BREAK(pCmd->numPages <= pThis->svga.cbFIFO / cbPageDesc);
+ cbCmd += cbPageDesc * pCmd->numPages;
+ }
+ }
+ VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRemapGMR2, cbCmd);
+ vmsvgaR3CmdRemapGMR2(pThis, pThisCC, pCmd);
+# ifdef DEBUG_GMR_ACCESS
+ VMR3ReqCallWaitU(PDMDevHlpGetUVM(pDevIns), VMCPUID_ANY, (PFNRT)vmsvgaR3RegisterGmr, 2, pDevIns, pCmd->gmrId);
+# endif
+ break;
+ }
+# endif // VBOX_WITH_VMSVGA3D
+ case SVGA_CMD_DEFINE_SCREEN:
+ {
+ /* The size of this command is specified by the guest and depends on capabilities. */
+ Assert(pFIFO[SVGA_FIFO_CAPABILITIES] & SVGA_FIFO_CAP_SCREEN_OBJECT_2);
+
+ SVGAFifoCmdDefineScreen *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineScreen, sizeof(pCmd->screen.structSize));
+ AssertBreak(pCmd->screen.structSize < pThis->svga.cbFIFO);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ RT_BZERO(&pCmd->screen.id, sizeof(*pCmd) - RT_OFFSETOF(SVGAFifoCmdDefineScreen, screen.id));
+ VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineScreen, RT_MAX(sizeof(pCmd->screen.structSize), pCmd->screen.structSize));
+ vmsvgaR3CmdDefineScreen(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DESTROY_SCREEN:
+ {
+ SVGAFifoCmdDestroyScreen *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDestroyScreen, sizeof(*pCmd));
+ vmsvgaR3CmdDestroyScreen(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_DEFINE_GMRFB:
+ {
+ SVGAFifoCmdDefineGMRFB *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineGMRFB, sizeof(*pCmd));
+ vmsvgaR3CmdDefineGMRFB(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_BLIT_GMRFB_TO_SCREEN:
+ {
+ SVGAFifoCmdBlitGMRFBToScreen *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdBlitGMRFBToScreen, sizeof(*pCmd));
+ vmsvgaR3CmdBlitGMRFBToScreen(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_BLIT_SCREEN_TO_GMRFB:
+ {
+ SVGAFifoCmdBlitScreenToGMRFB *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdBlitScreenToGMRFB, sizeof(*pCmd));
+ vmsvgaR3CmdBlitScreenToGMRFB(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_ANNOTATION_FILL:
+ {
+ SVGAFifoCmdAnnotationFill *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdAnnotationFill, sizeof(*pCmd));
+ vmsvgaR3CmdAnnotationFill(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ case SVGA_CMD_ANNOTATION_COPY:
+ {
+ SVGAFifoCmdAnnotationCopy *pCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdAnnotationCopy, sizeof(*pCmd));
+ vmsvgaR3CmdAnnotationCopy(pThis, pThisCC, pCmd);
+ break;
+ }
+
+ default:
+# ifdef VBOX_WITH_VMSVGA3D
+ if ( (int)enmCmdId >= SVGA_3D_CMD_BASE
+ && (int)enmCmdId < SVGA_3D_CMD_MAX)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* All 3d commands start with a common header, which defines the identifier and the size
+ * of the command. The identifier has been already read from FIFO. Fetch the size.
+ */
+ uint32_t *pcbCmd;
+ VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pcbCmd, uint32_t, sizeof(*pcbCmd));
+ uint32_t const cbCmd = *pcbCmd;
+ AssertBreak(cbCmd < pThis->svga.cbFIFO);
+ uint32_t *pu32Cmd;
+ VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pu32Cmd, uint32_t, sizeof(*pcbCmd) + cbCmd);
+ pu32Cmd++; /* Skip the command size. */
+
+ if (RT_LIKELY(pThis->svga.f3DEnabled))
+ { /* likely */ }
+ else
+ {
+ LogRelMax(8, ("VMSVGA: 3D disabled, command %d skipped\n", enmCmdId));
+ break;
+ }
+
+ vmsvgaR3Process3dCmd(pThis, pThisCC, SVGA3D_INVALID_ID, (SVGAFifo3dCmdId)enmCmdId, cbCmd, pu32Cmd);
+ }
+ else
+# endif // VBOX_WITH_VMSVGA3D
+ {
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoUnkCmds);
+ AssertMsgFailed(("enmCmdId=%d\n", enmCmdId));
+ LogRelMax(16, ("VMSVGA: unsupported command %d\n", enmCmdId));
+ }
+ }
+
+ /* Go to the next slot */
+ Assert(cbPayload + sizeof(uint32_t) <= offFifoMax - offFifoMin);
+ offCurrentCmd += RT_ALIGN_32(cbPayload + sizeof(uint32_t), sizeof(uint32_t));
+ if (offCurrentCmd >= offFifoMax)
+ {
+ offCurrentCmd -= offFifoMax - offFifoMin;
+ Assert(offCurrentCmd >= offFifoMin);
+ Assert(offCurrentCmd < offFifoMax);
+ }
+ ASMAtomicWriteU32(&pFIFO[SVGA_FIFO_STOP], offCurrentCmd);
+ STAM_REL_COUNTER_INC(&pSVGAState->StatFifoCommands);
+
+ /*
+ * Raise IRQ if required. Must enter the critical section here
+ * before making final decisions here, otherwise cubebench and
+ * others may end up waiting forever.
+ */
+ if ( u32IrqStatus
+ || (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FIFO_PROGRESS))
+ {
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ /* FIFO progress might trigger an interrupt. */
+ if (pThis->svga.u32IrqMask & SVGA_IRQFLAG_FIFO_PROGRESS)
+ {
+ Log(("vmsvgaR3FifoLoop: fifo progress irq\n"));
+ u32IrqStatus |= SVGA_IRQFLAG_FIFO_PROGRESS;
+ }
+
+ /* Unmasked IRQ pending? */
+ if (pThis->svga.u32IrqMask & u32IrqStatus)
+ {
+ Log(("vmsvgaR3FifoLoop: Trigger interrupt with status %x\n", u32IrqStatus));
+ ASMAtomicOrU32(&pThis->svga.u32IrqStatus, u32IrqStatus);
+ PDMDevHlpPCISetIrq(pDevIns, 0, 1);
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ }
+ }
+
+ /* If really done, clear the busy flag. */
+ if (fDone)
+ {
+ Log(("vmsvgaR3FifoLoop: emptied the FIFO next=%x stop=%x\n", pFIFO[SVGA_FIFO_NEXT_CMD], offCurrentCmd));
+ vmsvgaR3FifoSetNotBusy(pDevIns, pThis, pThisCC, pSVGAState, offFifoMin);
+ }
+ }
+
+ /*
+ * Free the bounce buffer. (There are no returns above!)
+ */
+ RTMemFree(pbBounceBuf);
+
+ return VINF_SUCCESS;
+}
+
+#undef VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK
+#undef VMSVGAFIFO_GET_CMD_BUFFER_BREAK
+
+/**
+ * @callback_method_impl{PFNPDMTHREADWAKEUPDEV,
+ * Unblock the FIFO I/O thread so it can respond to a state change.}
+ */
+static DECLCALLBACK(int) vmsvgaR3FifoLoopWakeUp(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
+{
+ RT_NOREF(pDevIns);
+ PVGASTATE pThis = (PVGASTATE)pThread->pvUser;
+ Log(("vmsvgaR3FifoLoopWakeUp\n"));
+ return PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+}
+
+/**
+ * Enables or disables dirty page tracking for the framebuffer
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param fTraces Enable/disable traces
+ */
+static void vmsvgaR3SetTraces(PPDMDEVINS pDevIns, PVGASTATE pThis, bool fTraces)
+{
+ if ( (!pThis->svga.fConfigured || !pThis->svga.fEnabled)
+ && !fTraces)
+ {
+ //Assert(pThis->svga.fTraces);
+ Log(("vmsvgaR3SetTraces: *not* allowed to disable dirty page tracking when the device is in legacy mode.\n"));
+ return;
+ }
+
+ pThis->svga.fTraces = fTraces;
+ if (pThis->svga.fTraces)
+ {
+ unsigned cbFrameBuffer = pThis->vram_size;
+
+ Log(("vmsvgaR3SetTraces: enable dirty page handling for the frame buffer only (%x bytes)\n", 0));
+ /** @todo How does this work with screens? */
+ if (pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
+ {
+# ifndef DEBUG_bird /* BB-10.3.1 triggers this as it initializes everything to zero. Better just ignore it. */
+ Assert(pThis->svga.cbScanline);
+# endif
+ /* Hardware enabled; return real framebuffer size .*/
+ cbFrameBuffer = (uint32_t)pThis->svga.uHeight * pThis->svga.cbScanline;
+ cbFrameBuffer = RT_ALIGN(cbFrameBuffer, GUEST_PAGE_SIZE);
+ }
+
+ if (!pThis->svga.fVRAMTracking)
+ {
+ Log(("vmsvgaR3SetTraces: enable frame buffer dirty page tracking. (%x bytes; vram %x)\n", cbFrameBuffer, pThis->vram_size));
+ vgaR3RegisterVRAMHandler(pDevIns, pThis, cbFrameBuffer);
+ pThis->svga.fVRAMTracking = true;
+ }
+ }
+ else
+ {
+ if (pThis->svga.fVRAMTracking)
+ {
+ Log(("vmsvgaR3SetTraces: disable frame buffer dirty page tracking\n"));
+ vgaR3UnregisterVRAMHandler(pDevIns, pThis);
+ pThis->svga.fVRAMTracking = false;
+ }
+ }
+}
+
+/**
+ * @callback_method_impl{FNPCIIOREGIONMAP}
+ */
+DECLCALLBACK(int) vmsvgaR3PciIORegionFifoMapUnmap(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion,
+ RTGCPHYS GCPhysAddress, RTGCPHYS cb, PCIADDRESSSPACE enmType)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ int rc;
+ RT_NOREF(pPciDev);
+ Assert(pPciDev == pDevIns->apPciDevs[0]);
+
+ Log(("vmsvgaR3PciIORegionFifoMapUnmap: iRegion=%d GCPhysAddress=%RGp cb=%RGp enmType=%d\n", iRegion, GCPhysAddress, cb, enmType));
+ AssertReturn( iRegion == pThis->pciRegions.iFIFO
+ && ( enmType == PCI_ADDRESS_SPACE_MEM
+ || (enmType == PCI_ADDRESS_SPACE_MEM_PREFETCH /* got wrong in 6.1.0RC1 */ && pThis->fStateLoaded))
+ , VERR_INTERNAL_ERROR);
+ if (GCPhysAddress != NIL_RTGCPHYS)
+ {
+ /*
+ * Mapping the FIFO RAM.
+ */
+ AssertLogRelMsg(cb == pThis->svga.cbFIFO, ("cb=%#RGp cbFIFO=%#x\n", cb, pThis->svga.cbFIFO));
+ rc = PDMDevHlpMmio2Map(pDevIns, pThis->hMmio2VmSvgaFifo, GCPhysAddress);
+ AssertRC(rc);
+
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+ if (RT_SUCCESS(rc))
+ {
+ rc = PDMDevHlpPGMHandlerPhysicalRegister(pDevIns, GCPhysAddress,
+# ifdef DEBUG_FIFO_ACCESS
+ GCPhysAddress + (pThis->svga.cbFIFO - 1),
+# else
+ GCPhysAddress + GUEST_PAGE_SIZE - 1,
+# endif
+ pThis->svga.hFifoAccessHandlerType, pThis, NIL_RTR0PTR, NIL_RTRCPTR,
+ "VMSVGA FIFO");
+ AssertRC(rc);
+ }
+# endif
+ if (RT_SUCCESS(rc))
+ {
+ pThis->svga.GCPhysFIFO = GCPhysAddress;
+ Log(("vmsvgaR3IORegionMap: GCPhysFIFO=%RGp cbFIFO=%#x\n", GCPhysAddress, pThis->svga.cbFIFO));
+ }
+ rc = VINF_PCI_MAPPING_DONE; /* caller only cares about this status, so it is okay that we overwrite errors here. */
+ }
+ else
+ {
+ Assert(pThis->svga.GCPhysFIFO);
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+ rc = PDMDevHlpPGMHandlerPhysicalDeregister(pDevIns, pThis->svga.GCPhysFIFO);
+ AssertRC(rc);
+# else
+ rc = VINF_SUCCESS;
+# endif
+ pThis->svga.GCPhysFIFO = 0;
+ }
+ return rc;
+}
+
+# ifdef VBOX_WITH_VMSVGA3D
+
+/**
+ * Used by vmsvga3dInfoSurfaceWorker to make the FIFO thread to save one or all
+ * surfaces to VMSVGA3DMIPMAPLEVEL::pSurfaceData heap buffers.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param sid Either UINT32_MAX or the ID of a specific surface. If
+ * UINT32_MAX is used, all surfaces are processed.
+ */
+void vmsvgaR33dSurfaceUpdateHeapBuffersOnFifoThread(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t sid)
+{
+ vmsvgaR3RunExtCmdOnFifoThread(pDevIns, pThis, pThisCC, VMSVGA_FIFO_EXTCMD_UPDATE_SURFACE_HEAP_BUFFERS, (void *)(uintptr_t)sid,
+ sid == UINT32_MAX ? 10 * RT_MS_1SEC : RT_MS_1MIN);
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, "vmsvga3dsfc"}
+ */
+DECLCALLBACK(void) vmsvgaR3Info3dSurface(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ /* There might be a specific surface ID at the start of the
+ arguments, if not show all surfaces. */
+ uint32_t sid = UINT32_MAX;
+ if (pszArgs)
+ pszArgs = RTStrStripL(pszArgs);
+ if (pszArgs && RT_C_IS_DIGIT(*pszArgs))
+ sid = RTStrToUInt32(pszArgs);
+
+ /* Verbose or terse display, we default to verbose. */
+ bool fVerbose = true;
+ if (RTStrIStr(pszArgs, "terse"))
+ fVerbose = false;
+
+ /* The size of the ascii art (x direction, y is 3/4 of x). */
+ uint32_t cxAscii = 80;
+ if (RTStrIStr(pszArgs, "gigantic"))
+ cxAscii = 300;
+ else if (RTStrIStr(pszArgs, "huge"))
+ cxAscii = 180;
+ else if (RTStrIStr(pszArgs, "big"))
+ cxAscii = 132;
+ else if (RTStrIStr(pszArgs, "normal"))
+ cxAscii = 80;
+ else if (RTStrIStr(pszArgs, "medium"))
+ cxAscii = 64;
+ else if (RTStrIStr(pszArgs, "small"))
+ cxAscii = 48;
+ else if (RTStrIStr(pszArgs, "tiny"))
+ cxAscii = 24;
+
+ /* Y invert the image when producing the ASCII art. */
+ bool fInvY = false;
+ if (RTStrIStr(pszArgs, "invy"))
+ fInvY = true;
+
+ vmsvga3dInfoSurfaceWorker(pDevIns, PDMDEVINS_2_DATA(pDevIns, PVGASTATE), PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC),
+ pHlp, sid, fVerbose, cxAscii, fInvY, NULL);
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, "vmsvga3dsurf"}
+ */
+DECLCALLBACK(void) vmsvgaR3Info3dSurfaceBmp(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ /* pszArg = "sid[>dir]"
+ * Writes %dir%/info-S-sidI.bmp, where S - sequential bitmap number, I - decimal surface id.
+ */
+ char *pszBitmapPath = NULL;
+ uint32_t sid = UINT32_MAX;
+ if (pszArgs)
+ pszArgs = RTStrStripL(pszArgs);
+ if (pszArgs && RT_C_IS_DIGIT(*pszArgs))
+ RTStrToUInt32Ex(pszArgs, &pszBitmapPath, 0, &sid);
+ if ( pszBitmapPath
+ && *pszBitmapPath == '>')
+ ++pszBitmapPath;
+
+ const bool fVerbose = true;
+ const uint32_t cxAscii = 0; /* No ASCII */
+ const bool fInvY = false; /* Do not invert. */
+ vmsvga3dInfoSurfaceWorker(pDevIns, PDMDEVINS_2_DATA(pDevIns, PVGASTATE), PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC),
+ pHlp, sid, fVerbose, cxAscii, fInvY, pszBitmapPath);
+}
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, "vmsvga3dctx"}
+ */
+DECLCALLBACK(void) vmsvgaR3Info3dContext(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ /* There might be a specific surface ID at the start of the
+ arguments, if not show all contexts. */
+ uint32_t sid = UINT32_MAX;
+ if (pszArgs)
+ pszArgs = RTStrStripL(pszArgs);
+ if (pszArgs && RT_C_IS_DIGIT(*pszArgs))
+ sid = RTStrToUInt32(pszArgs);
+
+ /* Verbose or terse display, we default to verbose. */
+ bool fVerbose = true;
+ if (RTStrIStr(pszArgs, "terse"))
+ fVerbose = false;
+
+ vmsvga3dInfoContextWorker(PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC), pHlp, sid, fVerbose);
+}
+# endif /* VBOX_WITH_VMSVGA3D */
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, "vmsvga"}
+ */
+static DECLCALLBACK(void) vmsvgaR3Info(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ uint32_t RT_UNTRUSTED_VOLATILE_GUEST *pFIFO = pThisCC->svga.pau32FIFO;
+ RT_NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "Extension enabled: %RTbool\n", pThis->svga.fEnabled);
+ pHlp->pfnPrintf(pHlp, "Configured: %RTbool\n", pThis->svga.fConfigured);
+ pHlp->pfnPrintf(pHlp, "Base I/O port: %#x\n",
+ pThis->hIoPortVmSvga != NIL_IOMIOPORTHANDLE
+ ? PDMDevHlpIoPortGetMappingAddress(pDevIns, pThis->hIoPortVmSvga) : UINT32_MAX);
+ pHlp->pfnPrintf(pHlp, "FIFO address: %RGp\n", pThis->svga.GCPhysFIFO);
+ pHlp->pfnPrintf(pHlp, "FIFO size: %u (%#x)\n", pThis->svga.cbFIFO, pThis->svga.cbFIFO);
+ pHlp->pfnPrintf(pHlp, "FIFO external cmd: %#x\n", pThis->svga.u8FIFOExtCommand);
+ pHlp->pfnPrintf(pHlp, "FIFO extcmd wakeup: %u\n", pThis->svga.fFifoExtCommandWakeup);
+ pHlp->pfnPrintf(pHlp, "FIFO min/max: %u/%u\n", pFIFO[SVGA_FIFO_MIN], pFIFO[SVGA_FIFO_MAX]);
+ pHlp->pfnPrintf(pHlp, "Busy: %#x\n", pThis->svga.fBusy);
+ pHlp->pfnPrintf(pHlp, "Traces: %RTbool (effective: %RTbool)\n", pThis->svga.fTraces, pThis->svga.fVRAMTracking);
+ pHlp->pfnPrintf(pHlp, "Guest ID: %#x (%d)\n", pThis->svga.u32GuestId, pThis->svga.u32GuestId);
+ pHlp->pfnPrintf(pHlp, "IRQ status: %#x\n", pThis->svga.u32IrqStatus);
+ pHlp->pfnPrintf(pHlp, "IRQ mask: %#x\n", pThis->svga.u32IrqMask);
+ pHlp->pfnPrintf(pHlp, "Pitch lock: %#x (FIFO:%#x)\n", pThis->svga.u32PitchLock, pFIFO[SVGA_FIFO_PITCHLOCK]);
+ pHlp->pfnPrintf(pHlp, "Current GMR ID: %#x\n", pThis->svga.u32CurrentGMRId);
+ pHlp->pfnPrintf(pHlp, "Device Capabilites: %#x\n", pThis->svga.u32DeviceCaps);
+ pHlp->pfnPrintf(pHlp, "Index reg: %#x\n", pThis->svga.u32IndexReg);
+ pHlp->pfnPrintf(pHlp, "Action flags: %#x\n", pThis->svga.u32ActionFlags);
+ pHlp->pfnPrintf(pHlp, "Max display size: %ux%u\n", pThis->svga.u32MaxWidth, pThis->svga.u32MaxHeight);
+ pHlp->pfnPrintf(pHlp, "Display size: %ux%u %ubpp\n", pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp);
+ pHlp->pfnPrintf(pHlp, "Scanline: %u (%#x)\n", pThis->svga.cbScanline, pThis->svga.cbScanline);
+ pHlp->pfnPrintf(pHlp, "Viewport position: %ux%u\n", pThis->svga.viewport.x, pThis->svga.viewport.y);
+ pHlp->pfnPrintf(pHlp, "Viewport size: %ux%u\n", pThis->svga.viewport.cx, pThis->svga.viewport.cy);
+
+ pHlp->pfnPrintf(pHlp, "Cursor active: %RTbool\n", pSVGAState->Cursor.fActive);
+ pHlp->pfnPrintf(pHlp, "Cursor hotspot: %ux%u\n", pSVGAState->Cursor.xHotspot, pSVGAState->Cursor.yHotspot);
+ pHlp->pfnPrintf(pHlp, "Cursor size: %ux%u\n", pSVGAState->Cursor.width, pSVGAState->Cursor.height);
+ pHlp->pfnPrintf(pHlp, "Cursor byte size: %u (%#x)\n", pSVGAState->Cursor.cbData, pSVGAState->Cursor.cbData);
+
+ pHlp->pfnPrintf(pHlp, "FIFO cursor: state %u, screen %d\n", pFIFO[SVGA_FIFO_CURSOR_ON], pFIFO[SVGA_FIFO_CURSOR_SCREEN_ID]);
+ pHlp->pfnPrintf(pHlp, "FIFO cursor at: %u,%u\n", pFIFO[SVGA_FIFO_CURSOR_X], pFIFO[SVGA_FIFO_CURSOR_Y]);
+
+ pHlp->pfnPrintf(pHlp, "Legacy cursor: ID %u, state %u\n", pThis->svga.uCursorID, pThis->svga.uCursorOn);
+ pHlp->pfnPrintf(pHlp, "Legacy cursor at: %u,%u\n", pThis->svga.uCursorX, pThis->svga.uCursorY);
+
+# ifdef VBOX_WITH_VMSVGA3D
+ pHlp->pfnPrintf(pHlp, "3D enabled: %RTbool\n", pThis->svga.f3DEnabled);
+# endif
+ if (pThisCC->pDrv)
+ {
+ pHlp->pfnPrintf(pHlp, "Driver mode: %ux%u %ubpp\n", pThisCC->pDrv->cx, pThisCC->pDrv->cy, pThisCC->pDrv->cBits);
+ pHlp->pfnPrintf(pHlp, "Driver pitch: %u (%#x)\n", pThisCC->pDrv->cbScanline, pThisCC->pDrv->cbScanline);
+ }
+
+ /* Dump screen information. */
+ for (unsigned iScreen = 0; iScreen < RT_ELEMENTS(pSVGAState->aScreens); ++iScreen)
+ {
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, iScreen);
+ if (pScreen)
+ {
+ pHlp->pfnPrintf(pHlp, "Screen %u defined (ID %u):\n", iScreen, pScreen->idScreen);
+ pHlp->pfnPrintf(pHlp, " %u x %u x %ubpp @ %u, %u\n", pScreen->cWidth, pScreen->cHeight,
+ pScreen->cBpp, pScreen->xOrigin, pScreen->yOrigin);
+ pHlp->pfnPrintf(pHlp, " Pitch %u bytes, VRAM offset %X\n", pScreen->cbPitch, pScreen->offVRAM);
+ pHlp->pfnPrintf(pHlp, " Flags %X", pScreen->fuScreen);
+ if (pScreen->fuScreen != SVGA_SCREEN_MUST_BE_SET)
+ {
+ pHlp->pfnPrintf(pHlp, " (");
+ if (pScreen->fuScreen & SVGA_SCREEN_IS_PRIMARY)
+ pHlp->pfnPrintf(pHlp, " IS_PRIMARY");
+ if (pScreen->fuScreen & SVGA_SCREEN_FULLSCREEN_HINT)
+ pHlp->pfnPrintf(pHlp, " FULLSCREEN_HINT");
+ if (pScreen->fuScreen & SVGA_SCREEN_DEACTIVATE)
+ pHlp->pfnPrintf(pHlp, " DEACTIVATE");
+ if (pScreen->fuScreen & SVGA_SCREEN_BLANKING)
+ pHlp->pfnPrintf(pHlp, " BLANKING");
+ pHlp->pfnPrintf(pHlp, " )");
+ }
+ pHlp->pfnPrintf(pHlp, ", %smodified\n", pScreen->fModified ? "" : "not ");
+ }
+ }
+
+}
+
+static int vmsvgaR3LoadBufCtx(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, PVMSVGACMDBUFCTX pBufCtx, SVGACBContext CBCtx)
+{
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ uint32_t cSubmitted;
+ int rc = pHlp->pfnSSMGetU32(pSSM, &cSubmitted);
+ AssertLogRelRCReturn(rc, rc);
+
+ for (uint32_t i = 0; i < cSubmitted; ++i)
+ {
+ PVMSVGACMDBUF pCmdBuf = vmsvgaR3CmdBufAlloc(pBufCtx);
+ AssertPtrReturn(pCmdBuf, VERR_NO_MEMORY);
+
+ pHlp->pfnSSMGetGCPhys(pSSM, &pCmdBuf->GCPhysCB);
+
+ uint32_t u32;
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+ AssertReturn(u32 == sizeof(SVGACBHeader), VERR_INVALID_STATE);
+ pHlp->pfnSSMGetMem(pSSM, &pCmdBuf->hdr, sizeof(SVGACBHeader));
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+ AssertReturn(u32 == pCmdBuf->hdr.length, VERR_INVALID_STATE);
+
+ if (pCmdBuf->hdr.length)
+ {
+ pCmdBuf->pvCommands = RTMemAlloc(pCmdBuf->hdr.length);
+ AssertPtrReturn(pCmdBuf->pvCommands, VERR_NO_MEMORY);
+
+ rc = pHlp->pfnSSMGetMem(pSSM, pCmdBuf->pvCommands, pCmdBuf->hdr.length);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (RT_LIKELY(CBCtx < RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs)))
+ {
+ vmsvgaR3CmdBufSubmitCtx(pDevIns, pThis, pThisCC, &pCmdBuf);
+ }
+ else
+ {
+ uint32_t offNextCmd = 0;
+ vmsvgaR3CmdBufSubmitDC(pDevIns, pThisCC, &pCmdBuf, &offNextCmd);
+ }
+
+ /* Free the buffer if CmdBufSubmit* did not consume it. */
+ vmsvgaR3CmdBufFree(pCmdBuf);
+ }
+ return rc;
+}
+
+static int vmsvgaR3LoadCommandBuffers(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ bool f;
+ uint32_t u32;
+
+ /* Device context command buffers. */
+ int rc = vmsvgaR3LoadBufCtx(pDevIns, pThis, pThisCC, pSSM, &pSvgaR3State->CmdBufCtxDC, SVGA_CB_CONTEXT_MAX);
+ AssertLogRelRCReturn(rc, rc);
+
+ /* DX contexts command buffers. */
+ uint32_t cBufCtx;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cBufCtx);
+ AssertLogRelRCReturn(rc, rc);
+ AssertReturn(cBufCtx == RT_ELEMENTS(pSvgaR3State->apCmdBufCtxs), VERR_INVALID_STATE);
+ for (uint32_t j = 0; j < cBufCtx; ++j)
+ {
+ rc = pHlp->pfnSSMGetBool(pSSM, &f);
+ AssertLogRelRCReturn(rc, rc);
+ if (f)
+ {
+ pSvgaR3State->apCmdBufCtxs[j] = (PVMSVGACMDBUFCTX)RTMemAlloc(sizeof(VMSVGACMDBUFCTX));
+ AssertPtrReturn(pSvgaR3State->apCmdBufCtxs[j], VERR_NO_MEMORY);
+ vmsvgaR3CmdBufCtxInit(pSvgaR3State->apCmdBufCtxs[j]);
+
+ rc = vmsvgaR3LoadBufCtx(pDevIns, pThis, pThisCC, pSSM, pSvgaR3State->apCmdBufCtxs[j], (SVGACBContext)j);
+ AssertLogRelRCReturn(rc, rc);
+ }
+ }
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ pSvgaR3State->fCmdBuf = u32;
+ return rc;
+}
+
+static int vmsvgaR3LoadGbo(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, VMSVGAGBO *pGbo)
+{
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+
+ int rc;
+ pHlp->pfnSSMGetU32(pSSM, &pGbo->fGboFlags);
+ pHlp->pfnSSMGetU32(pSSM, &pGbo->cTotalPages);
+ pHlp->pfnSSMGetU32(pSSM, &pGbo->cbTotal);
+ rc = pHlp->pfnSSMGetU32(pSSM, &pGbo->cDescriptors);
+ AssertRCReturn(rc, rc);
+
+ if (pGbo->cDescriptors)
+ {
+ pGbo->paDescriptors = (PVMSVGAGBODESCRIPTOR)RTMemAllocZ(pGbo->cDescriptors * sizeof(VMSVGAGBODESCRIPTOR));
+ AssertPtrReturn(pGbo->paDescriptors, VERR_NO_MEMORY);
+ }
+
+ for (uint32_t iDesc = 0; iDesc < pGbo->cDescriptors; ++iDesc)
+ {
+ PVMSVGAGBODESCRIPTOR pDesc = &pGbo->paDescriptors[iDesc];
+ pHlp->pfnSSMGetGCPhys(pSSM, &pDesc->GCPhys);
+ rc = pHlp->pfnSSMGetU64(pSSM, &pDesc->cPages);
+ }
+
+ if (pGbo->fGboFlags & VMSVGAGBO_F_HOST_BACKED)
+ {
+ pGbo->pvHost = RTMemAlloc(pGbo->cbTotal);
+ AssertPtrReturn(pGbo->pvHost, VERR_NO_MEMORY);
+ rc = pHlp->pfnSSMGetMem(pSSM, pGbo->pvHost, pGbo->cbTotal);
+ }
+
+ return rc;
+}
+
+/**
+ * Portion of VMSVGA state which must be loaded oin the FIFO thread.
+ */
+static int vmsvgaR3LoadExecFifo(PCPDMDEVHLPR3 pHlp, PVGASTATE pThis, PVGASTATECC pThisCC,
+ PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+ RT_NOREF(uPass);
+
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ int rc;
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_SCREENS)
+ {
+ uint32_t cScreens = 0;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cScreens);
+ AssertRCReturn(rc, rc);
+ AssertLogRelMsgReturn(cScreens <= _64K, /* big enough */
+ ("cScreens=%#x\n", cScreens),
+ VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
+
+ for (uint32_t i = 0; i < cScreens; ++i)
+ {
+ VMSVGASCREENOBJECT screen;
+ RT_ZERO(screen);
+
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &screen, sizeof(screen), 0, g_aVMSVGASCREENOBJECTFields, NULL);
+ AssertLogRelRCReturn(rc, rc);
+
+ if (screen.idScreen < RT_ELEMENTS(pSVGAState->aScreens))
+ {
+ VMSVGASCREENOBJECT *pScreen = &pSVGAState->aScreens[screen.idScreen];
+ *pScreen = screen;
+ pScreen->fModified = true;
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_DX)
+ {
+ uint32_t u32;
+ pHlp->pfnSSMGetU32(pSSM, &u32); /* Size of screen bitmap. */
+ AssertLogRelRCReturn(rc, rc);
+ if (u32)
+ {
+ pScreen->pvScreenBitmap = RTMemAlloc(u32);
+ AssertPtrReturn(pScreen->pvScreenBitmap, VERR_NO_MEMORY);
+
+ pHlp->pfnSSMGetMem(pSSM, pScreen->pvScreenBitmap, u32);
+ }
+ }
+ }
+ else
+ {
+ LogRel(("VGA: ignored screen object %d\n", screen.idScreen));
+ }
+ }
+ }
+ else
+ {
+ /* Try to setup at least the first screen. */
+ VMSVGASCREENOBJECT *pScreen = &pSVGAState->aScreens[0];
+ pScreen->fDefined = true;
+ pScreen->fModified = true;
+ pScreen->fuScreen = SVGA_SCREEN_MUST_BE_SET | SVGA_SCREEN_IS_PRIMARY;
+ pScreen->idScreen = 0;
+ pScreen->xOrigin = 0;
+ pScreen->yOrigin = 0;
+ pScreen->offVRAM = pThis->svga.uScreenOffset;
+ pScreen->cbPitch = pThis->svga.cbScanline;
+ pScreen->cWidth = pThis->svga.uWidth;
+ pScreen->cHeight = pThis->svga.uHeight;
+ pScreen->cBpp = pThis->svga.uBpp;
+ }
+
+ return VINF_SUCCESS;
+}
+
+/**
+ * @copydoc FNSSMDEVLOADEXEC
+ */
+int vmsvgaR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+ RT_NOREF(uPass);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+
+ /* Load our part of the VGAState */
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &pThis->svga, sizeof(pThis->svga), 0, g_aVGAStateSVGAFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ /* Load the VGA framebuffer. */
+ AssertCompile(VMSVGA_VGA_FB_BACKUP_SIZE >= _32K);
+ uint32_t cbVgaFramebuffer = _32K;
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_VGA_FB_FIX)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &cbVgaFramebuffer);
+ AssertRCReturn(rc, rc);
+ AssertLogRelMsgReturn(cbVgaFramebuffer <= _4M && cbVgaFramebuffer >= _32K && RT_IS_POWER_OF_TWO(cbVgaFramebuffer),
+ ("cbVgaFramebuffer=%#x - expected 32KB..4MB, power of two\n", cbVgaFramebuffer),
+ VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
+ AssertCompile(VMSVGA_VGA_FB_BACKUP_SIZE <= _4M);
+ AssertCompile(RT_IS_POWER_OF_TWO(VMSVGA_VGA_FB_BACKUP_SIZE));
+ }
+ rc = pHlp->pfnSSMGetMem(pSSM, pThisCC->svga.pbVgaFrameBufferR3, RT_MIN(cbVgaFramebuffer, VMSVGA_VGA_FB_BACKUP_SIZE));
+ AssertRCReturn(rc, rc);
+ if (cbVgaFramebuffer > VMSVGA_VGA_FB_BACKUP_SIZE)
+ pHlp->pfnSSMSkip(pSSM, cbVgaFramebuffer - VMSVGA_VGA_FB_BACKUP_SIZE);
+ else if (cbVgaFramebuffer < VMSVGA_VGA_FB_BACKUP_SIZE)
+ RT_BZERO(&pThisCC->svga.pbVgaFrameBufferR3[cbVgaFramebuffer], VMSVGA_VGA_FB_BACKUP_SIZE - cbVgaFramebuffer);
+
+ /* Load the VMSVGA state. */
+ rc = pHlp->pfnSSMGetStructEx(pSSM, pSVGAState, sizeof(*pSVGAState), 0, g_aVMSVGAR3STATEFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ /* Load the active cursor bitmaps. */
+ if (pSVGAState->Cursor.fActive)
+ {
+ pSVGAState->Cursor.pData = RTMemAlloc(pSVGAState->Cursor.cbData);
+ AssertReturn(pSVGAState->Cursor.pData, VERR_NO_MEMORY);
+
+ rc = pHlp->pfnSSMGetMem(pSSM, pSVGAState->Cursor.pData, pSVGAState->Cursor.cbData);
+ AssertRCReturn(rc, rc);
+ }
+
+ /* Load the GMR state. */
+ uint32_t cGMR = 256; /* Hardcoded in previous saved state versions. */
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_GMR_COUNT)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &cGMR);
+ AssertRCReturn(rc, rc);
+ /* Numbers of GMRs was never less than 256. 1MB is a large arbitrary limit. */
+ AssertLogRelMsgReturn(cGMR <= _1M && cGMR >= 256,
+ ("cGMR=%#x - expected 256B..1MB\n", cGMR),
+ VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
+ }
+
+ if (pThis->svga.cGMR != cGMR)
+ {
+ /* Reallocate GMR array. */
+ Assert(pSVGAState->paGMR != NULL);
+ RTMemFree(pSVGAState->paGMR);
+ pSVGAState->paGMR = (PGMR)RTMemAllocZ(cGMR * sizeof(GMR));
+ AssertReturn(pSVGAState->paGMR, VERR_NO_MEMORY);
+ pThis->svga.cGMR = cGMR;
+ }
+
+ for (uint32_t i = 0; i < cGMR; ++i)
+ {
+ PGMR pGMR = &pSVGAState->paGMR[i];
+
+ rc = pHlp->pfnSSMGetStructEx(pSSM, pGMR, sizeof(*pGMR), 0, g_aGMRFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ if (pGMR->numDescriptors)
+ {
+ Assert(pGMR->cMaxPages || pGMR->cbTotal);
+ pGMR->paDesc = (PVMSVGAGMRDESCRIPTOR)RTMemAllocZ(pGMR->numDescriptors * sizeof(VMSVGAGMRDESCRIPTOR));
+ AssertReturn(pGMR->paDesc, VERR_NO_MEMORY);
+
+ for (uint32_t j = 0; j < pGMR->numDescriptors; ++j)
+ {
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &pGMR->paDesc[j], sizeof(pGMR->paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ }
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_DX)
+ {
+ bool f;
+ uint32_t u32;
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_DX_CMDBUF)
+ {
+ /* Command buffers are saved independently from VGPU10. */
+ rc = pHlp->pfnSSMGetBool(pSSM, &f);
+ AssertLogRelRCReturn(rc, rc);
+ if (f)
+ {
+ rc = vmsvgaR3LoadCommandBuffers(pDevIns, pThis, pThisCC, pSSM);
+ AssertLogRelRCReturn(rc, rc);
+ }
+ }
+
+ rc = pHlp->pfnSSMGetBool(pSSM, &f);
+ AssertLogRelRCReturn(rc, rc);
+ pThis->fVMSVGA10 = f;
+
+ if (pThis->fVMSVGA10)
+ {
+ if (uVersion < VGA_SAVEDSTATE_VERSION_VMSVGA_DX_CMDBUF)
+ {
+ rc = vmsvgaR3LoadCommandBuffers(pDevIns, pThis, pThisCC, pSSM);
+ AssertLogRelRCReturn(rc, rc);
+ }
+
+ /*
+ * OTables GBOs.
+ */
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertLogRelRCReturn(rc, rc);
+ AssertReturn(u32 == SVGA_OTABLE_MAX, VERR_INVALID_STATE);
+ for (int i = 0; i < SVGA_OTABLE_MAX; ++i)
+ {
+ VMSVGAGBO *pGbo = &pSVGAState->aGboOTables[i];
+ rc = vmsvgaR3LoadGbo(pDevIns, pSSM, pGbo);
+ AssertRCReturn(rc, rc);
+ }
+
+ /*
+ * MOBs.
+ */
+ for (;;)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32); /* MOB id. */
+ AssertRCReturn(rc, rc);
+ if (u32 == SVGA_ID_INVALID)
+ break;
+
+ PVMSVGAMOB pMob = (PVMSVGAMOB)RTMemAllocZ(sizeof(*pMob));
+ AssertPtrReturn(pMob, VERR_NO_MEMORY);
+
+ rc = vmsvgaR3LoadGbo(pDevIns, pSSM, &pMob->Gbo);
+ AssertRCReturn(rc, rc);
+
+ pMob->Core.Key = u32;
+ if (RTAvlU32Insert(&pSVGAState->MOBTree, &pMob->Core))
+ RTListPrepend(&pSVGAState->MOBLRUList, &pMob->nodeLRU);
+ else
+ AssertFailedReturn(VERR_NO_MEMORY);
+ }
+
+# ifdef VMSVGA3D_DX
+ if (pThis->svga.f3DEnabled)
+ {
+ pHlp->pfnSSMGetU32(pSSM, &pSVGAState->idDXContextCurrent);
+ }
+# endif
+ }
+ }
+
+# ifdef RT_OS_DARWIN /** @todo r=bird: this is normally done on the EMT, so for DARWIN we do that when loading saved state too now. See DevVGA-SVGA3d-shared.h. */
+ vmsvgaR3PowerOnDevice(pDevIns, pThis, pThisCC, /*fLoadState=*/ true);
+# endif
+
+ VMSVGA_STATE_LOAD LoadState;
+ LoadState.pSSM = pSSM;
+ LoadState.uVersion = uVersion;
+ LoadState.uPass = uPass;
+ rc = vmsvgaR3RunExtCmdOnFifoThread(pDevIns, pThis, pThisCC, VMSVGA_FIFO_EXTCMD_LOADSTATE, &LoadState, RT_INDEFINITE_WAIT);
+ AssertLogRelRCReturn(rc, rc);
+
+ return VINF_SUCCESS;
+}
+
+/**
+ * Reinit the video mode after the state has been loaded.
+ */
+int vmsvgaR3LoadDone(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ /* VMSVGA is working via VBVA interface, therefore it needs to be
+ * enabled on saved state restore. See @bugref{10071#c7}. */
+ if (pThis->svga.fEnabled)
+ {
+ for (uint32_t idScreen = 0; idScreen < pThis->cMonitors; ++idScreen)
+ pThisCC->pDrv->pfnVBVAEnable(pThisCC->pDrv, idScreen, NULL /*pHostFlags*/);
+ }
+
+ /* Set the active cursor. */
+ if (pSVGAState->Cursor.fActive)
+ {
+ /* We don't store the alpha flag, but we can take a guess that if
+ * the old register interface was used, the cursor was B&W.
+ */
+ bool fAlpha = pThis->svga.uCursorOn ? false : true;
+
+ int rc = pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv,
+ true /*fVisible*/,
+ fAlpha,
+ pSVGAState->Cursor.xHotspot,
+ pSVGAState->Cursor.yHotspot,
+ pSVGAState->Cursor.width,
+ pSVGAState->Cursor.height,
+ pSVGAState->Cursor.pData);
+ AssertRC(rc);
+
+ if (pThis->svga.uCursorOn)
+ pThisCC->pDrv->pfnVBVAReportCursorPosition(pThisCC->pDrv, VBVA_CURSOR_VALID_DATA, SVGA_ID_INVALID, pThis->svga.uCursorX, pThis->svga.uCursorY);
+ }
+
+ /* If the VRAM handler should not be registered, we have to explicitly
+ * unregister it here!
+ */
+ if (!pThis->svga.fVRAMTracking)
+ {
+ vgaR3UnregisterVRAMHandler(pDevIns, pThis);
+ }
+
+ /* Let the FIFO thread deal with changing the mode. */
+ ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
+
+ return VINF_SUCCESS;
+}
+
+static int vmsvgaR3SaveBufCtx(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PVMSVGACMDBUFCTX pBufCtx)
+{
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+
+ int rc = pHlp->pfnSSMPutU32(pSSM, pBufCtx->cSubmitted);
+ AssertLogRelRCReturn(rc, rc);
+ if (pBufCtx->cSubmitted)
+ {
+ PVMSVGACMDBUF pIter;
+ RTListForEach(&pBufCtx->listSubmitted, pIter, VMSVGACMDBUF, nodeBuffer)
+ {
+ pHlp->pfnSSMPutGCPhys(pSSM, pIter->GCPhysCB);
+ pHlp->pfnSSMPutU32(pSSM, sizeof(SVGACBHeader));
+ pHlp->pfnSSMPutMem(pSSM, &pIter->hdr, sizeof(SVGACBHeader));
+ pHlp->pfnSSMPutU32(pSSM, pIter->hdr.length);
+ if (pIter->hdr.length)
+ rc = pHlp->pfnSSMPutMem(pSSM, pIter->pvCommands, pIter->hdr.length);
+ AssertLogRelRCReturn(rc, rc);
+ }
+ }
+ return rc;
+}
+
+static int vmsvgaR3SaveGbo(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, VMSVGAGBO *pGbo)
+{
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+
+ int rc;
+ pHlp->pfnSSMPutU32(pSSM, pGbo->fGboFlags);
+ pHlp->pfnSSMPutU32(pSSM, pGbo->cTotalPages);
+ pHlp->pfnSSMPutU32(pSSM, pGbo->cbTotal);
+ rc = pHlp->pfnSSMPutU32(pSSM, pGbo->cDescriptors);
+ for (uint32_t iDesc = 0; iDesc < pGbo->cDescriptors; ++iDesc)
+ {
+ PVMSVGAGBODESCRIPTOR pDesc = &pGbo->paDescriptors[iDesc];
+ pHlp->pfnSSMPutGCPhys(pSSM, pDesc->GCPhys);
+ rc = pHlp->pfnSSMPutU64(pSSM, pDesc->cPages);
+ }
+ if (pGbo->fGboFlags & VMSVGAGBO_F_HOST_BACKED)
+ rc = pHlp->pfnSSMPutMem(pSSM, pGbo->pvHost, pGbo->cbTotal);
+ return rc;
+}
+
+/**
+ * Portion of SVGA state which must be saved in the FIFO thread.
+ */
+static int vmsvgaR3SaveExecFifo(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ int rc;
+
+ /* Save the screen objects. */
+ /* Count defined screen object. */
+ uint32_t cScreens = 0;
+ for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aScreens); ++i)
+ {
+ if (pSVGAState->aScreens[i].fDefined)
+ ++cScreens;
+ }
+
+ rc = pHlp->pfnSSMPutU32(pSSM, cScreens);
+ AssertLogRelRCReturn(rc, rc);
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pSVGAState->aScreens); ++i)
+ {
+ VMSVGASCREENOBJECT *pScreen = &pSVGAState->aScreens[i];
+ if (!pScreen->fDefined)
+ continue;
+
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pScreen, sizeof(*pScreen), 0, g_aVMSVGASCREENOBJECTFields, NULL);
+ AssertLogRelRCReturn(rc, rc);
+
+ /*
+ * VGA_SAVEDSTATE_VERSION_VMSVGA_DX
+ */
+ if (pScreen->pvScreenBitmap)
+ {
+ uint32_t const cbScreenBitmap = pScreen->cHeight * pScreen->cbPitch;
+ pHlp->pfnSSMPutU32(pSSM, cbScreenBitmap);
+ pHlp->pfnSSMPutMem(pSSM, pScreen->pvScreenBitmap, cbScreenBitmap);
+ }
+ else
+ pHlp->pfnSSMPutU32(pSSM, 0);
+ }
+ return VINF_SUCCESS;
+}
+
+/**
+ * @copydoc FNSSMDEVSAVEEXEC
+ */
+int vmsvgaR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+
+ /* Save our part of the VGAState */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, &pThis->svga, sizeof(pThis->svga), 0, g_aVGAStateSVGAFields, NULL);
+ AssertLogRelRCReturn(rc, rc);
+
+ /* Save the framebuffer backup. */
+ rc = pHlp->pfnSSMPutU32(pSSM, VMSVGA_VGA_FB_BACKUP_SIZE);
+ rc = pHlp->pfnSSMPutMem(pSSM, pThisCC->svga.pbVgaFrameBufferR3, VMSVGA_VGA_FB_BACKUP_SIZE);
+ AssertLogRelRCReturn(rc, rc);
+
+ /* Save the VMSVGA state. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pSVGAState, sizeof(*pSVGAState), 0, g_aVMSVGAR3STATEFields, NULL);
+ AssertLogRelRCReturn(rc, rc);
+
+ /* Save the active cursor bitmaps. */
+ if (pSVGAState->Cursor.fActive)
+ {
+ rc = pHlp->pfnSSMPutMem(pSSM, pSVGAState->Cursor.pData, pSVGAState->Cursor.cbData);
+ AssertLogRelRCReturn(rc, rc);
+ }
+
+ /* Save the GMR state */
+ rc = pHlp->pfnSSMPutU32(pSSM, pThis->svga.cGMR);
+ AssertLogRelRCReturn(rc, rc);
+ for (uint32_t i = 0; i < pThis->svga.cGMR; ++i)
+ {
+ PGMR pGMR = &pSVGAState->paGMR[i];
+
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pGMR, sizeof(*pGMR), 0, g_aGMRFields, NULL);
+ AssertLogRelRCReturn(rc, rc);
+
+ for (uint32_t j = 0; j < pGMR->numDescriptors; ++j)
+ {
+ rc = pHlp->pfnSSMPutStructEx(pSSM, &pGMR->paDesc[j], sizeof(pGMR->paDesc[j]), 0, g_aVMSVGAGMRDESCRIPTORFields, NULL);
+ AssertLogRelRCReturn(rc, rc);
+ }
+ }
+
+ /*
+ * VGA_SAVEDSTATE_VERSION_VMSVGA_DX+
+ */
+ if (pThis->svga.u32DeviceCaps & SVGA_CAP_COMMAND_BUFFERS)
+ {
+ rc = pHlp->pfnSSMPutBool(pSSM, true);
+ AssertLogRelRCReturn(rc, rc);
+
+ /* Device context command buffers. */
+ rc = vmsvgaR3SaveBufCtx(pDevIns, pSSM, &pSVGAState->CmdBufCtxDC);
+ AssertRCReturn(rc, rc);
+
+ /* DX contexts command buffers. */
+ rc = pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(pSVGAState->apCmdBufCtxs));
+ AssertLogRelRCReturn(rc, rc);
+ for (unsigned i = 0; i < RT_ELEMENTS(pSVGAState->apCmdBufCtxs); ++i)
+ {
+ if (pSVGAState->apCmdBufCtxs[i])
+ {
+ pHlp->pfnSSMPutBool(pSSM, true);
+ rc = vmsvgaR3SaveBufCtx(pDevIns, pSSM, pSVGAState->apCmdBufCtxs[i]);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ pHlp->pfnSSMPutBool(pSSM, false);
+ }
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pSVGAState->fCmdBuf);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertLogRelRCReturn(rc, rc);
+ }
+
+ rc = pHlp->pfnSSMPutBool(pSSM, pThis->fVMSVGA10);
+ AssertLogRelRCReturn(rc, rc);
+
+ if (pThis->fVMSVGA10)
+ {
+ /*
+ * OTables GBOs.
+ */
+ pHlp->pfnSSMPutU32(pSSM, SVGA_OTABLE_MAX);
+ for (int i = 0; i < SVGA_OTABLE_MAX; ++i)
+ {
+ VMSVGAGBO *pGbo = &pSVGAState->aGboOTables[i];
+ rc = vmsvgaR3SaveGbo(pDevIns, pSSM, pGbo);
+ AssertRCReturn(rc, rc);
+ }
+
+ /*
+ * MOBs.
+ */
+ PVMSVGAMOB pIter;
+ RTListForEach(&pSVGAState->MOBLRUList, pIter, VMSVGAMOB, nodeLRU)
+ {
+ pHlp->pfnSSMPutU32(pSSM, pIter->Core.Key); /* MOB id. */
+ rc = vmsvgaR3SaveGbo(pDevIns, pSSM, &pIter->Gbo);
+ AssertRCReturn(rc, rc);
+ }
+
+ pHlp->pfnSSMPutU32(pSSM, SVGA_ID_INVALID); /* End marker. */
+
+# ifdef VMSVGA3D_DX
+ if (pThis->svga.f3DEnabled)
+ {
+ pHlp->pfnSSMPutU32(pSSM, pSVGAState->idDXContextCurrent);
+ }
+# endif
+ }
+
+ /*
+ * Must save some state (3D in particular) in the FIFO thread.
+ */
+ rc = vmsvgaR3RunExtCmdOnFifoThread(pDevIns, pThis, pThisCC, VMSVGA_FIFO_EXTCMD_SAVESTATE, pSSM, RT_INDEFINITE_WAIT);
+ AssertLogRelRCReturn(rc, rc);
+
+ return VINF_SUCCESS;
+}
+
+/**
+ * Destructor for PVMSVGAR3STATE structure. The structure is not deallocated.
+ *
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The device context.
+ */
+static void vmsvgaR3StateTerm(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+# ifndef VMSVGA_USE_EMT_HALT_CODE
+ if (pSVGAState->hBusyDelayedEmts != NIL_RTSEMEVENTMULTI)
+ {
+ RTSemEventMultiDestroy(pSVGAState->hBusyDelayedEmts);
+ pSVGAState->hBusyDelayedEmts = NIL_RTSEMEVENT;
+ }
+# endif
+
+ if (pSVGAState->Cursor.fActive)
+ {
+ RTMemFreeZ(pSVGAState->Cursor.pData, pSVGAState->Cursor.cbData);
+ pSVGAState->Cursor.pData = NULL;
+ pSVGAState->Cursor.fActive = false;
+ }
+
+ if (pSVGAState->paGMR)
+ {
+ for (unsigned i = 0; i < pThis->svga.cGMR; ++i)
+ if (pSVGAState->paGMR[i].paDesc)
+ RTMemFree(pSVGAState->paGMR[i].paDesc);
+
+ RTMemFree(pSVGAState->paGMR);
+ pSVGAState->paGMR = NULL;
+ }
+
+ if (RTCritSectIsInitialized(&pSVGAState->CritSectCmdBuf))
+ {
+ RTCritSectEnter(&pSVGAState->CritSectCmdBuf);
+ for (unsigned i = 0; i < RT_ELEMENTS(pSVGAState->apCmdBufCtxs); ++i)
+ {
+ vmsvgaR3CmdBufCtxTerm(pSVGAState->apCmdBufCtxs[i]);
+ pSVGAState->apCmdBufCtxs[i] = NULL;
+ }
+ vmsvgaR3CmdBufCtxTerm(&pSVGAState->CmdBufCtxDC);
+ RTCritSectLeave(&pSVGAState->CritSectCmdBuf);
+ RTCritSectDelete(&pSVGAState->CritSectCmdBuf);
+ }
+}
+
+/**
+ * Constructor for PVMSVGAR3STATE structure.
+ *
+ * @returns VBox status code.
+ * @param pDevIns The PDM device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pSVGAState Pointer to the structure. It is already allocated.
+ */
+static int vmsvgaR3StateInit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVMSVGAR3STATE pSVGAState)
+{
+ int rc = VINF_SUCCESS;
+
+ pSVGAState->pDevIns = pDevIns;
+
+ pSVGAState->paGMR = (PGMR)RTMemAllocZ(pThis->svga.cGMR * sizeof(GMR));
+ AssertReturn(pSVGAState->paGMR, VERR_NO_MEMORY);
+
+# ifndef VMSVGA_USE_EMT_HALT_CODE
+ /* Create semaphore for delaying EMTs wait for the FIFO to stop being busy. */
+ rc = RTSemEventMultiCreate(&pSVGAState->hBusyDelayedEmts);
+ AssertRCReturn(rc, rc);
+# endif
+
+ rc = RTCritSectInit(&pSVGAState->CritSectCmdBuf);
+ AssertRCReturn(rc, rc);
+
+ vmsvgaR3CmdBufCtxInit(&pSVGAState->CmdBufCtxDC);
+
+ RTListInit(&pSVGAState->MOBLRUList);
+# ifdef VBOX_WITH_VMSVGA3D
+# ifdef VMSVGA3D_DX
+ pSVGAState->idDXContextCurrent = SVGA3D_INVALID_ID;
+# endif
+# endif
+ return rc;
+}
+
+# ifdef VBOX_WITH_VMSVGA3D
+static void vmsvga3dR3Free3dInterfaces(PVGASTATECC pThisCC)
+{
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ RTMemFree(pSVGAState->pFuncsMap);
+ pSVGAState->pFuncsMap = NULL;
+ RTMemFree(pSVGAState->pFuncsGBO);
+ pSVGAState->pFuncsGBO = NULL;
+ RTMemFree(pSVGAState->pFuncsDX);
+ pSVGAState->pFuncsDX = NULL;
+ RTMemFree(pSVGAState->pFuncsVGPU9);
+ pSVGAState->pFuncsVGPU9 = NULL;
+ RTMemFree(pSVGAState->pFuncs3D);
+ pSVGAState->pFuncs3D = NULL;
+}
+
+/* This structure is used only by vmsvgaR3Init3dInterfaces */
+typedef struct VMSVGA3DINTERFACE
+{
+ char const *pcszName;
+ uint32_t cbFuncs;
+ void **ppvFuncs;
+} VMSVGA3DINTERFACE;
+
+extern VMSVGA3DBACKENDDESC const g_BackendLegacy;
+#if defined(VMSVGA3D_DX_BACKEND)
+extern VMSVGA3DBACKENDDESC const g_BackendDX;
+#endif
+
+/**
+ * Initializes the optional host 3D backend interfaces.
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+static int vmsvgaR3Init3dInterfaces(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+#ifndef VMSVGA3D_DX
+ RT_NOREF(pThis);
+#endif
+
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+#define ENTRY_3D_INTERFACE(a_Name, a_Field) { VMSVGA3D_BACKEND_INTERFACE_NAME_##a_Name, sizeof(VMSVGA3DBACKENDFUNCS##a_Name), (void **)&pSVGAState->a_Field }
+ VMSVGA3DINTERFACE a3dInterface[] =
+ {
+ ENTRY_3D_INTERFACE(3D, pFuncs3D),
+ ENTRY_3D_INTERFACE(VGPU9, pFuncsVGPU9),
+ ENTRY_3D_INTERFACE(DX, pFuncsDX),
+ ENTRY_3D_INTERFACE(MAP, pFuncsMap),
+ ENTRY_3D_INTERFACE(GBO, pFuncsGBO),
+ };
+#undef ENTRY_3D_INTERFACE
+
+ VMSVGA3DBACKENDDESC const *pBackend = NULL;
+#if defined(VMSVGA3D_DX_BACKEND)
+ if (pThis->fVMSVGA10)
+ pBackend = &g_BackendDX;
+ else
+#endif
+ pBackend = &g_BackendLegacy;
+
+ int rc = VINF_SUCCESS;
+ for (uint32_t i = 0; i < RT_ELEMENTS(a3dInterface); ++i)
+ {
+ VMSVGA3DINTERFACE *p = &a3dInterface[i];
+
+ int rc2 = pBackend->pfnQueryInterface(pThisCC, p->pcszName, NULL, p->cbFuncs);
+ if (RT_SUCCESS(rc2))
+ {
+ *p->ppvFuncs = RTMemAllocZ(p->cbFuncs);
+ AssertBreakStmt(*p->ppvFuncs, rc = VERR_NO_MEMORY);
+
+ pBackend->pfnQueryInterface(pThisCC, p->pcszName, *p->ppvFuncs, p->cbFuncs);
+ }
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ /* 3D interface is required. */
+ if (pSVGAState->pFuncs3D)
+ {
+ rc = pSVGAState->pFuncs3D->pfnInit(pDevIns, pThis, pThisCC);
+ if (RT_SUCCESS(rc))
+ return VINF_SUCCESS;
+ }
+ else
+ rc = VERR_NOT_SUPPORTED;
+ }
+
+ vmsvga3dR3Free3dInterfaces(pThisCC);
+ return rc;
+}
+# endif /* VBOX_WITH_VMSVGA3D */
+
+/**
+ * Compute the host capabilities: device and FIFO.
+ * Depends on 3D backend initialization.
+ *
+ * @returns VBox status code.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pu32DeviceCaps Device capabilities (SVGA_CAP_*).
+ * @param pu32FIFOCaps FIFO capabilities (SVGA_FIFO_CAPS_*).
+ */
+static void vmsvgaR3GetCaps(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t *pu32DeviceCaps, uint32_t *pu32FIFOCaps)
+{
+#ifndef VBOX_WITH_VMSVGA3D
+ RT_NOREF(pThisCC);
+#endif
+
+ /* Device caps. */
+ *pu32DeviceCaps = SVGA_CAP_GMR
+ | SVGA_CAP_GMR2
+ | SVGA_CAP_CURSOR
+ | SVGA_CAP_CURSOR_BYPASS
+ | SVGA_CAP_CURSOR_BYPASS_2
+ | SVGA_CAP_EXTENDED_FIFO
+ | SVGA_CAP_IRQMASK
+ | SVGA_CAP_PITCHLOCK
+ | SVGA_CAP_RECT_COPY
+ | SVGA_CAP_TRACES
+ | SVGA_CAP_SCREEN_OBJECT_2
+ | SVGA_CAP_ALPHA_CURSOR;
+
+ *pu32DeviceCaps |= SVGA_CAP_COMMAND_BUFFERS /* Enable register based command buffer submission. */
+// | SVGA_CAP_CMD_BUFFERS_2 /* Support for SVGA_REG_CMD_PREPEND_LOW/HIGH */
+ ;
+
+ /* VGPU10 capabilities. */
+ if (pThis->fVMSVGA10)
+ {
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThisCC->svga.pSvgaR3State->pFuncsGBO)
+ *pu32DeviceCaps |= SVGA_CAP_GBOBJECTS; /* Enable guest-backed objects and surfaces. */
+ if (pThisCC->svga.pSvgaR3State->pFuncsDX)
+ *pu32DeviceCaps |= SVGA_CAP_DX; /* Enable support for DX commands, and command buffers in a mob. */
+# endif
+ }
+
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThisCC->svga.pSvgaR3State->pFuncs3D)
+ *pu32DeviceCaps |= SVGA_CAP_3D;
+# endif
+
+ /* FIFO capabilities. */
+ *pu32FIFOCaps = SVGA_FIFO_CAP_FENCE
+ | SVGA_FIFO_CAP_PITCHLOCK
+ | SVGA_FIFO_CAP_CURSOR_BYPASS_3
+ | SVGA_FIFO_CAP_RESERVE
+ | SVGA_FIFO_CAP_GMR2
+ | SVGA_FIFO_CAP_3D_HWVERSION_REVISED
+ | SVGA_FIFO_CAP_SCREEN_OBJECT_2;
+}
+
+/** Initialize the FIFO on power on and reset.
+ *
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+static void vmsvgaR3InitFIFO(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ RT_BZERO(pThisCC->svga.pau32FIFO, pThis->svga.cbFIFO);
+
+ /* Valid with SVGA_FIFO_CAP_SCREEN_OBJECT_2 */
+ pThisCC->svga.pau32FIFO[SVGA_FIFO_CURSOR_SCREEN_ID] = SVGA_ID_INVALID;
+}
+
+# ifdef VBOX_WITH_VMSVGA3D
+/**
+ * Initializes the host 3D capabilities and writes them to FIFO memory.
+ *
+ * @returns VBox status code.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+static void vmsvgaR3InitFifo3DCaps(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ /* Query the capabilities and store them in the pThis->svga.au32DevCaps array. */
+ bool const fSavedBuffering = RTLogRelSetBuffering(true);
+
+ for (unsigned i = 0; i < RT_ELEMENTS(pThis->svga.au32DevCaps); ++i)
+ {
+ uint32_t val = 0;
+ int rc = vmsvga3dQueryCaps(pThisCC, (SVGA3dDevCapIndex)i, &val);
+ if (RT_SUCCESS(rc))
+ pThis->svga.au32DevCaps[i] = val;
+ else
+ pThis->svga.au32DevCaps[i] = 0;
+
+ /* LogRel the capability value. */
+ if (i < SVGA3D_DEVCAP_MAX)
+ {
+ char const *pszDevCapName = &vmsvgaDevCapIndexToString((SVGA3dDevCapIndex)i)[sizeof("SVGA3D_DEVCAP")];
+ if (RT_SUCCESS(rc))
+ {
+ if ( i == SVGA3D_DEVCAP_MAX_POINT_SIZE
+ || i == SVGA3D_DEVCAP_MAX_LINE_WIDTH
+ || i == SVGA3D_DEVCAP_MAX_AA_LINE_WIDTH)
+ {
+ float const fval = *(float *)&val;
+ LogRel(("VMSVGA3d: cap[%u]=" FLOAT_FMT_STR " {%s}\n", i, FLOAT_FMT_ARGS(fval), pszDevCapName));
+ }
+ else
+ LogRel(("VMSVGA3d: cap[%u]=%#010x {%s}\n", i, val, pszDevCapName));
+ }
+ else
+ LogRel(("VMSVGA3d: cap[%u]=failed rc=%Rrc {%s}\n", i, rc, pszDevCapName));
+ }
+ else
+ LogRel(("VMSVGA3d: new cap[%u]=%#010x rc=%Rrc\n", i, val, rc));
+ }
+
+ RTLogRelSetBuffering(fSavedBuffering);
+
+ /* 3d hardware version; latest and greatest */
+ pThisCC->svga.pau32FIFO[SVGA_FIFO_3D_HWVERSION_REVISED] = SVGA3D_HWVERSION_CURRENT;
+ pThisCC->svga.pau32FIFO[SVGA_FIFO_3D_HWVERSION] = SVGA3D_HWVERSION_CURRENT;
+
+ /* Fill out 3d capabilities up to SVGA3D_DEVCAP_SURFACEFMT_ATI2 in the FIFO memory.
+ * SVGA3D_DEVCAP_SURFACEFMT_ATI2 is the last capabiltiy for pre-SVGA_CAP_GBOBJECTS hardware.
+ * If the VMSVGA device supports SVGA_CAP_GBOBJECTS capability, then the guest has to use SVGA_REG_DEV_CAP
+ * register to query the devcaps. Older guests will still try to read the devcaps from FIFO.
+ */
+ SVGA3dCapsRecord *pCaps;
+ SVGA3dCapPair *pData;
+
+ pCaps = (SVGA3dCapsRecord *)&pThisCC->svga.pau32FIFO[SVGA_FIFO_3D_CAPS];
+ pCaps->header.type = SVGA3DCAPS_RECORD_DEVCAPS;
+ pData = (SVGA3dCapPair *)&pCaps->data;
+
+ AssertCompile(SVGA3D_DEVCAP_DEAD1 == SVGA3D_DEVCAP_SURFACEFMT_ATI2 + 1);
+ for (unsigned i = 0; i < SVGA3D_DEVCAP_DEAD1; ++i)
+ {
+ pData[i][0] = i;
+ pData[i][1] = pThis->svga.au32DevCaps[i];
+ }
+ pCaps->header.length = (sizeof(pCaps->header) + SVGA3D_DEVCAP_DEAD1 * sizeof(SVGA3dCapPair)) / sizeof(uint32_t);
+ pCaps = (SVGA3dCapsRecord *)((uint32_t *)pCaps + pCaps->header.length);
+
+ /* Mark end of record array (a zero word). */
+ pCaps->header.length = 0;
+}
+
+# endif
+
+/**
+ * Resets the SVGA hardware state
+ *
+ * @returns VBox status code.
+ * @param pDevIns The device instance.
+ */
+int vmsvgaR3Reset(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ /* Reset before init? */
+ if (!pSVGAState)
+ return VINF_SUCCESS;
+
+ Log(("vmsvgaR3Reset\n"));
+
+ /* Reset the FIFO processing as well as the 3d state (if we have one). */
+ pThisCC->svga.pau32FIFO[SVGA_FIFO_NEXT_CMD] = pThisCC->svga.pau32FIFO[SVGA_FIFO_STOP] = 0; /** @todo should probably let the FIFO thread do this ... */
+ int rc = vmsvgaR3RunExtCmdOnFifoThread(pDevIns, pThis, pThisCC, VMSVGA_FIFO_EXTCMD_RESET, NULL /*pvParam*/, 10000 /*ms*/);
+
+ /* Reset other stuff. */
+ pThis->svga.cScratchRegion = VMSVGA_SCRATCH_SIZE;
+ RT_ZERO(pThis->svga.au32ScratchRegion);
+
+ ASMAtomicWriteBool(&pThis->svga.fBadGuest, false);
+
+ vmsvgaR3StateTerm(pThis, pThisCC);
+ vmsvgaR3StateInit(pDevIns, pThis, pThisCC->svga.pSvgaR3State);
+
+ RT_BZERO(pThisCC->svga.pbVgaFrameBufferR3, VMSVGA_VGA_FB_BACKUP_SIZE);
+
+ vmsvgaR3InitFIFO(pThis, pThisCC);
+
+ /* Initialize FIFO and register capabilities. */
+ vmsvgaR3GetCaps(pThis, pThisCC, &pThis->svga.u32DeviceCaps, &pThisCC->svga.pau32FIFO[SVGA_FIFO_CAPABILITIES]);
+
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ vmsvgaR3InitFifo3DCaps(pThis, pThisCC);
+# endif
+
+ /* VRAM tracking is enabled by default during bootup. */
+ pThis->svga.fVRAMTracking = true;
+ pThis->svga.fEnabled = false;
+
+ /* Invalidate current settings. */
+ pThis->svga.uWidth = VMSVGA_VAL_UNINITIALIZED;
+ pThis->svga.uHeight = VMSVGA_VAL_UNINITIALIZED;
+ pThis->svga.uBpp = pThis->svga.uHostBpp;
+ pThis->svga.cbScanline = 0;
+ pThis->svga.u32PitchLock = 0;
+
+ return rc;
+}
+
+/**
+ * Cleans up the SVGA hardware state
+ *
+ * @returns VBox status code.
+ * @param pDevIns The device instance.
+ */
+int vmsvgaR3Destruct(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+
+ /*
+ * Ask the FIFO thread to terminate the 3d state and then terminate it.
+ */
+ if (pThisCC->svga.pFIFOIOThread)
+ {
+ int rc = vmsvgaR3RunExtCmdOnFifoThread(pDevIns, pThis, pThisCC, VMSVGA_FIFO_EXTCMD_TERMINATE,
+ NULL /*pvParam*/, 30000 /*ms*/);
+ AssertLogRelRC(rc);
+
+ rc = PDMDevHlpThreadDestroy(pDevIns, pThisCC->svga.pFIFOIOThread, NULL);
+ AssertLogRelRC(rc);
+ pThisCC->svga.pFIFOIOThread = NULL;
+ }
+
+ /*
+ * Destroy the special SVGA state.
+ */
+ if (pThisCC->svga.pSvgaR3State)
+ {
+ vmsvgaR3StateTerm(pThis, pThisCC);
+
+# ifdef VBOX_WITH_VMSVGA3D
+ vmsvga3dR3Free3dInterfaces(pThisCC);
+# endif
+
+ RTMemFree(pThisCC->svga.pSvgaR3State);
+ pThisCC->svga.pSvgaR3State = NULL;
+ }
+
+ /*
+ * Free our resources residing in the VGA state.
+ */
+ if (pThisCC->svga.pbVgaFrameBufferR3)
+ {
+ RTMemFree(pThisCC->svga.pbVgaFrameBufferR3);
+ pThisCC->svga.pbVgaFrameBufferR3 = NULL;
+ }
+ if (pThisCC->svga.hFIFOExtCmdSem != NIL_RTSEMEVENT)
+ {
+ RTSemEventDestroy(pThisCC->svga.hFIFOExtCmdSem);
+ pThisCC->svga.hFIFOExtCmdSem = NIL_RTSEMEVENT;
+ }
+ if (pThis->svga.hFIFORequestSem != NIL_SUPSEMEVENT)
+ {
+ PDMDevHlpSUPSemEventClose(pDevIns, pThis->svga.hFIFORequestSem);
+ pThis->svga.hFIFORequestSem = NIL_SUPSEMEVENT;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(size_t) vmsvga3dFloatFormat(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
+ const char *pszType, void const *pvValue,
+ int cchWidth, int cchPrecision, unsigned fFlags, void *pvUser)
+{
+ RT_NOREF(pszType, cchWidth, cchPrecision, fFlags, pvUser);
+ double const v = *(double *)&pvValue;
+ return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, FLOAT_FMT_STR, FLOAT_FMT_ARGS(v));
+}
+
+/**
+ * Initialize the SVGA hardware state
+ *
+ * @returns VBox status code.
+ * @param pDevIns The device instance.
+ */
+int vmsvgaR3Init(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVMSVGAR3STATE pSVGAState;
+ int rc;
+
+ rc = RTStrFormatTypeRegister("float", vmsvga3dFloatFormat, NULL);
+ AssertMsgReturn(RT_SUCCESS(rc) || rc == VERR_ALREADY_EXISTS, ("%Rrc\n", rc), rc);
+
+ pThis->svga.cScratchRegion = VMSVGA_SCRATCH_SIZE;
+ memset(pThis->svga.au32ScratchRegion, 0, sizeof(pThis->svga.au32ScratchRegion));
+
+ pThis->svga.cGMR = VMSVGA_MAX_GMR_IDS;
+
+ /* Necessary for creating a backup of the text mode frame buffer when switching into svga mode. */
+ pThisCC->svga.pbVgaFrameBufferR3 = (uint8_t *)RTMemAllocZ(VMSVGA_VGA_FB_BACKUP_SIZE);
+ AssertReturn(pThisCC->svga.pbVgaFrameBufferR3, VERR_NO_MEMORY);
+
+ /* Create event semaphore. */
+ rc = PDMDevHlpSUPSemEventCreate(pDevIns, &pThis->svga.hFIFORequestSem);
+ AssertRCReturn(rc, rc);
+
+ /* Create event semaphore. */
+ rc = RTSemEventCreate(&pThisCC->svga.hFIFOExtCmdSem);
+ AssertRCReturn(rc, rc);
+
+ pThisCC->svga.pSvgaR3State = (PVMSVGAR3STATE)RTMemAllocZ(sizeof(VMSVGAR3STATE));
+ AssertReturn(pThisCC->svga.pSvgaR3State, VERR_NO_MEMORY);
+
+ rc = vmsvgaR3StateInit(pDevIns, pThis, pThisCC->svga.pSvgaR3State);
+ AssertMsgRCReturn(rc, ("Failed to create pSvgaR3State.\n"), rc);
+
+ pSVGAState = pThisCC->svga.pSvgaR3State;
+
+ /* VRAM tracking is enabled by default during bootup. */
+ pThis->svga.fVRAMTracking = true;
+
+ /* Set up the host bpp. This value is as a default for the programmable
+ * bpp value. On old implementations, SVGA_REG_HOST_BITS_PER_PIXEL did not
+ * exist and SVGA_REG_BITS_PER_PIXEL was read-only, returning what was later
+ * separated as SVGA_REG_HOST_BITS_PER_PIXEL.
+ *
+ * NB: The driver cBits value is currently constant for the lifetime of the
+ * VM. If that changes, the host bpp logic might need revisiting.
+ */
+ pThis->svga.uHostBpp = (pThisCC->pDrv->cBits + 7) & ~7;
+
+ /* Invalidate current settings. */
+ pThis->svga.uWidth = VMSVGA_VAL_UNINITIALIZED;
+ pThis->svga.uHeight = VMSVGA_VAL_UNINITIALIZED;
+ pThis->svga.uBpp = pThis->svga.uHostBpp;
+ pThis->svga.cbScanline = 0;
+
+ pThis->svga.u32MaxWidth = VBE_DISPI_MAX_XRES;
+ pThis->svga.u32MaxHeight = VBE_DISPI_MAX_YRES;
+ while (pThis->svga.u32MaxWidth * pThis->svga.u32MaxHeight * 4 /* 32 bpp */ > pThis->vram_size)
+ {
+ pThis->svga.u32MaxWidth -= 256;
+ pThis->svga.u32MaxHeight -= 256;
+ }
+ Log(("VMSVGA: Maximum size (%d,%d)\n", pThis->svga.u32MaxWidth, pThis->svga.u32MaxHeight));
+
+# ifdef DEBUG_GMR_ACCESS
+ /* Register the GMR access handler type. */
+ rc = PDMDevHlpPGMHandlerPhysicalTypeRegister(pDevIns, PGMPHYSHANDLERKIND_WRITE, vmsvgaR3GmrAccessHandler,
+ "VMSVGA GMR", &pThis->svga.hGmrAccessHandlerType);
+ AssertRCReturn(rc, rc);
+# endif
+
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+ /* Register the FIFO access handler type. In addition to debugging FIFO
+ access, this is also used to facilitate extended fifo thread sleeps. */
+ rc = PDMDevHlpPGMHandlerPhysicalTypeRegister(pDevIns,
+# ifdef DEBUG_FIFO_ACCESS
+ PGMPHYSHANDLERKIND_ALL,
+# else
+ PGMPHYSHANDLERKIND_WRITE,
+# endif
+ vmsvgaR3FifoAccessHandler,
+ "VMSVGA FIFO", &pThis->svga.hFifoAccessHandlerType);
+ AssertRCReturn(rc, rc);
+# endif
+
+ /* Create the async IO thread. */
+ rc = PDMDevHlpThreadCreate(pDevIns, &pThisCC->svga.pFIFOIOThread, pThis, vmsvgaR3FifoLoop, vmsvgaR3FifoLoopWakeUp, 0,
+ RTTHREADTYPE_IO, "VMSVGA FIFO");
+ if (RT_FAILURE(rc))
+ {
+ AssertMsgFailed(("%s: Async IO Thread creation for FIFO handling failed rc=%d\n", __FUNCTION__, rc));
+ return rc;
+ }
+
+ /*
+ * Statistics.
+ */
+# define REG_CNT(a_pvSample, a_pszName, a_pszDesc) \
+ PDMDevHlpSTAMRegister(pDevIns, (a_pvSample), STAMTYPE_COUNTER, a_pszName, STAMUNIT_OCCURENCES, a_pszDesc)
+# define REG_PRF(a_pvSample, a_pszName, a_pszDesc) \
+ PDMDevHlpSTAMRegister(pDevIns, (a_pvSample), STAMTYPE_PROFILE, a_pszName, STAMUNIT_TICKS_PER_CALL, a_pszDesc)
+# ifdef VBOX_WITH_STATISTICS
+ REG_PRF(&pSVGAState->StatR3Cmd3dDrawPrimitivesProf, "VMSVGA/Cmd/3dDrawPrimitivesProf", "Profiling of SVGA_3D_CMD_DRAW_PRIMITIVES.");
+ REG_PRF(&pSVGAState->StatR3Cmd3dPresentProf, "VMSVGA/Cmd/3dPresentProfBoth", "Profiling of SVGA_3D_CMD_PRESENT and SVGA_3D_CMD_PRESENT_READBACK.");
+ REG_PRF(&pSVGAState->StatR3Cmd3dSurfaceDmaProf, "VMSVGA/Cmd/3dSurfaceDmaProf", "Profiling of SVGA_3D_CMD_SURFACE_DMA.");
+# endif
+ REG_PRF(&pSVGAState->StatR3Cmd3dBlitSurfaceToScreenProf, "VMSVGA/Cmd/3dBlitSurfaceToScreenProf", "Profiling of SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN.");
+ REG_CNT(&pSVGAState->StatR3Cmd3dActivateSurface, "VMSVGA/Cmd/3dActivateSurface", "SVGA_3D_CMD_ACTIVATE_SURFACE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dBeginQuery, "VMSVGA/Cmd/3dBeginQuery", "SVGA_3D_CMD_BEGIN_QUERY");
+ REG_CNT(&pSVGAState->StatR3Cmd3dClear, "VMSVGA/Cmd/3dClear", "SVGA_3D_CMD_CLEAR");
+ REG_CNT(&pSVGAState->StatR3Cmd3dContextDefine, "VMSVGA/Cmd/3dContextDefine", "SVGA_3D_CMD_CONTEXT_DEFINE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dContextDestroy, "VMSVGA/Cmd/3dContextDestroy", "SVGA_3D_CMD_CONTEXT_DESTROY");
+ REG_CNT(&pSVGAState->StatR3Cmd3dDeactivateSurface, "VMSVGA/Cmd/3dDeactivateSurface", "SVGA_3D_CMD_DEACTIVATE_SURFACE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dDrawPrimitives, "VMSVGA/Cmd/3dDrawPrimitives", "SVGA_3D_CMD_DRAW_PRIMITIVES");
+ REG_CNT(&pSVGAState->StatR3Cmd3dEndQuery, "VMSVGA/Cmd/3dEndQuery", "SVGA_3D_CMD_END_QUERY");
+ REG_CNT(&pSVGAState->StatR3Cmd3dGenerateMipmaps, "VMSVGA/Cmd/3dGenerateMipmaps", "SVGA_3D_CMD_GENERATE_MIPMAPS");
+ REG_CNT(&pSVGAState->StatR3Cmd3dPresent, "VMSVGA/Cmd/3dPresent", "SVGA_3D_CMD_PRESENT");
+ REG_CNT(&pSVGAState->StatR3Cmd3dPresentReadBack, "VMSVGA/Cmd/3dPresentReadBack", "SVGA_3D_CMD_PRESENT_READBACK");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetClipPlane, "VMSVGA/Cmd/3dSetClipPlane", "SVGA_3D_CMD_SETCLIPPLANE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetLightData, "VMSVGA/Cmd/3dSetLightData", "SVGA_3D_CMD_SETLIGHTDATA");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetLightEnable, "VMSVGA/Cmd/3dSetLightEnable", "SVGA_3D_CMD_SETLIGHTENABLE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetMaterial, "VMSVGA/Cmd/3dSetMaterial", "SVGA_3D_CMD_SETMATERIAL");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetRenderState, "VMSVGA/Cmd/3dSetRenderState", "SVGA_3D_CMD_SETRENDERSTATE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetRenderTarget, "VMSVGA/Cmd/3dSetRenderTarget", "SVGA_3D_CMD_SETRENDERTARGET");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetScissorRect, "VMSVGA/Cmd/3dSetScissorRect", "SVGA_3D_CMD_SETSCISSORRECT");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetShader, "VMSVGA/Cmd/3dSetShader", "SVGA_3D_CMD_SET_SHADER");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetShaderConst, "VMSVGA/Cmd/3dSetShaderConst", "SVGA_3D_CMD_SET_SHADER_CONST");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetTextureState, "VMSVGA/Cmd/3dSetTextureState", "SVGA_3D_CMD_SETTEXTURESTATE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetTransform, "VMSVGA/Cmd/3dSetTransform", "SVGA_3D_CMD_SETTRANSFORM");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetViewPort, "VMSVGA/Cmd/3dSetViewPort", "SVGA_3D_CMD_SETVIEWPORT");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSetZRange, "VMSVGA/Cmd/3dSetZRange", "SVGA_3D_CMD_SETZRANGE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dShaderDefine, "VMSVGA/Cmd/3dShaderDefine", "SVGA_3D_CMD_SHADER_DEFINE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dShaderDestroy, "VMSVGA/Cmd/3dShaderDestroy", "SVGA_3D_CMD_SHADER_DESTROY");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceCopy, "VMSVGA/Cmd/3dSurfaceCopy", "SVGA_3D_CMD_SURFACE_COPY");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceDefine, "VMSVGA/Cmd/3dSurfaceDefine", "SVGA_3D_CMD_SURFACE_DEFINE");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceDefineV2, "VMSVGA/Cmd/3dSurfaceDefineV2", "SVGA_3D_CMD_SURFACE_DEFINE_V2");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceDestroy, "VMSVGA/Cmd/3dSurfaceDestroy", "SVGA_3D_CMD_SURFACE_DESTROY");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceDma, "VMSVGA/Cmd/3dSurfaceDma", "SVGA_3D_CMD_SURFACE_DMA");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceScreen, "VMSVGA/Cmd/3dSurfaceScreen", "SVGA_3D_CMD_SURFACE_SCREEN");
+ REG_CNT(&pSVGAState->StatR3Cmd3dSurfaceStretchBlt, "VMSVGA/Cmd/3dSurfaceStretchBlt", "SVGA_3D_CMD_SURFACE_STRETCHBLT");
+ REG_CNT(&pSVGAState->StatR3Cmd3dWaitForQuery, "VMSVGA/Cmd/3dWaitForQuery", "SVGA_3D_CMD_WAIT_FOR_QUERY");
+ REG_CNT(&pSVGAState->StatR3CmdAnnotationCopy, "VMSVGA/Cmd/AnnotationCopy", "SVGA_CMD_ANNOTATION_COPY");
+ REG_CNT(&pSVGAState->StatR3CmdAnnotationFill, "VMSVGA/Cmd/AnnotationFill", "SVGA_CMD_ANNOTATION_FILL");
+ REG_CNT(&pSVGAState->StatR3CmdBlitGmrFbToScreen, "VMSVGA/Cmd/BlitGmrFbToScreen", "SVGA_CMD_BLIT_GMRFB_TO_SCREEN");
+ REG_CNT(&pSVGAState->StatR3CmdBlitScreentoGmrFb, "VMSVGA/Cmd/BlitScreentoGmrFb", "SVGA_CMD_BLIT_SCREEN_TO_GMRFB");
+ REG_CNT(&pSVGAState->StatR3CmdDefineAlphaCursor, "VMSVGA/Cmd/DefineAlphaCursor", "SVGA_CMD_DEFINE_ALPHA_CURSOR");
+ REG_CNT(&pSVGAState->StatR3CmdDefineCursor, "VMSVGA/Cmd/DefineCursor", "SVGA_CMD_DEFINE_CURSOR");
+ REG_CNT(&pSVGAState->StatR3CmdMoveCursor, "VMSVGA/Cmd/MoveCursor", "SVGA_CMD_MOVE_CURSOR");
+ REG_CNT(&pSVGAState->StatR3CmdDisplayCursor, "VMSVGA/Cmd/DisplayCursor", "SVGA_CMD_DISPLAY_CURSOR");
+ REG_CNT(&pSVGAState->StatR3CmdRectFill, "VMSVGA/Cmd/RectFill", "SVGA_CMD_RECT_FILL");
+ REG_CNT(&pSVGAState->StatR3CmdRectCopy, "VMSVGA/Cmd/RectCopy", "SVGA_CMD_RECT_COPY");
+ REG_CNT(&pSVGAState->StatR3CmdRectRopCopy, "VMSVGA/Cmd/RectRopCopy", "SVGA_CMD_RECT_ROP_COPY");
+ REG_CNT(&pSVGAState->StatR3CmdDefineGmr2, "VMSVGA/Cmd/DefineGmr2", "SVGA_CMD_DEFINE_GMR2");
+ REG_CNT(&pSVGAState->StatR3CmdDefineGmr2Free, "VMSVGA/Cmd/DefineGmr2/Free", "Number of SVGA_CMD_DEFINE_GMR2 commands that only frees.");
+ REG_CNT(&pSVGAState->StatR3CmdDefineGmr2Modify, "VMSVGA/Cmd/DefineGmr2/Modify", "Number of SVGA_CMD_DEFINE_GMR2 commands that redefines a non-free GMR.");
+ REG_CNT(&pSVGAState->StatR3CmdDefineGmrFb, "VMSVGA/Cmd/DefineGmrFb", "SVGA_CMD_DEFINE_GMRFB");
+ REG_CNT(&pSVGAState->StatR3CmdDefineScreen, "VMSVGA/Cmd/DefineScreen", "SVGA_CMD_DEFINE_SCREEN");
+ REG_CNT(&pSVGAState->StatR3CmdDestroyScreen, "VMSVGA/Cmd/DestroyScreen", "SVGA_CMD_DESTROY_SCREEN");
+ REG_CNT(&pSVGAState->StatR3CmdEscape, "VMSVGA/Cmd/Escape", "SVGA_CMD_ESCAPE");
+ REG_CNT(&pSVGAState->StatR3CmdFence, "VMSVGA/Cmd/Fence", "SVGA_CMD_FENCE");
+ REG_CNT(&pSVGAState->StatR3CmdInvalidCmd, "VMSVGA/Cmd/InvalidCmd", "SVGA_CMD_INVALID_CMD");
+ REG_CNT(&pSVGAState->StatR3CmdRemapGmr2, "VMSVGA/Cmd/RemapGmr2", "SVGA_CMD_REMAP_GMR2");
+ REG_CNT(&pSVGAState->StatR3CmdRemapGmr2Modify, "VMSVGA/Cmd/RemapGmr2/Modify", "Number of SVGA_CMD_REMAP_GMR2 commands that modifies rather than complete the definition of a GMR.");
+ REG_CNT(&pSVGAState->StatR3CmdUpdate, "VMSVGA/Cmd/Update", "SVGA_CMD_UPDATE");
+ REG_CNT(&pSVGAState->StatR3CmdUpdateVerbose, "VMSVGA/Cmd/UpdateVerbose", "SVGA_CMD_UPDATE_VERBOSE");
+
+ REG_CNT(&pSVGAState->StatR3RegConfigDoneWr, "VMSVGA/Reg/ConfigDoneWrite", "SVGA_REG_CONFIG_DONE writes");
+ REG_CNT(&pSVGAState->StatR3RegGmrDescriptorWr, "VMSVGA/Reg/GmrDescriptorWrite", "SVGA_REG_GMR_DESCRIPTOR writes");
+ REG_CNT(&pSVGAState->StatR3RegGmrDescriptorWrErrors, "VMSVGA/Reg/GmrDescriptorWrite/Errors", "Number of erroneous SVGA_REG_GMR_DESCRIPTOR commands.");
+ REG_CNT(&pSVGAState->StatR3RegGmrDescriptorWrFree, "VMSVGA/Reg/GmrDescriptorWrite/Free", "Number of SVGA_REG_GMR_DESCRIPTOR commands only freeing the GMR.");
+ REG_CNT(&pThis->svga.StatRegBitsPerPixelWr, "VMSVGA/Reg/BitsPerPixelWrite", "SVGA_REG_BITS_PER_PIXEL writes.");
+ REG_CNT(&pThis->svga.StatRegBusyWr, "VMSVGA/Reg/BusyWrite", "SVGA_REG_BUSY writes.");
+ REG_CNT(&pThis->svga.StatRegCursorXWr, "VMSVGA/Reg/CursorXWrite", "SVGA_REG_CURSOR_X writes.");
+ REG_CNT(&pThis->svga.StatRegCursorYWr, "VMSVGA/Reg/CursorYWrite", "SVGA_REG_CURSOR_Y writes.");
+ REG_CNT(&pThis->svga.StatRegCursorIdWr, "VMSVGA/Reg/CursorIdWrite", "SVGA_REG_DEAD (SVGA_REG_CURSOR_ID) writes.");
+ REG_CNT(&pThis->svga.StatRegCursorOnWr, "VMSVGA/Reg/CursorOnWrite", "SVGA_REG_CURSOR_ON writes.");
+ REG_CNT(&pThis->svga.StatRegDepthWr, "VMSVGA/Reg/DepthWrite", "SVGA_REG_DEPTH writes.");
+ REG_CNT(&pThis->svga.StatRegDisplayHeightWr, "VMSVGA/Reg/DisplayHeightWrite", "SVGA_REG_DISPLAY_HEIGHT writes.");
+ REG_CNT(&pThis->svga.StatRegDisplayIdWr, "VMSVGA/Reg/DisplayIdWrite", "SVGA_REG_DISPLAY_ID writes.");
+ REG_CNT(&pThis->svga.StatRegDisplayIsPrimaryWr, "VMSVGA/Reg/DisplayIsPrimaryWrite", "SVGA_REG_DISPLAY_IS_PRIMARY writes.");
+ REG_CNT(&pThis->svga.StatRegDisplayPositionXWr, "VMSVGA/Reg/DisplayPositionXWrite", "SVGA_REG_DISPLAY_POSITION_X writes.");
+ REG_CNT(&pThis->svga.StatRegDisplayPositionYWr, "VMSVGA/Reg/DisplayPositionYWrite", "SVGA_REG_DISPLAY_POSITION_Y writes.");
+ REG_CNT(&pThis->svga.StatRegDisplayWidthWr, "VMSVGA/Reg/DisplayWidthWrite", "SVGA_REG_DISPLAY_WIDTH writes.");
+ REG_CNT(&pThis->svga.StatRegEnableWr, "VMSVGA/Reg/EnableWrite", "SVGA_REG_ENABLE writes.");
+ REG_CNT(&pThis->svga.StatRegGmrIdWr, "VMSVGA/Reg/GmrIdWrite", "SVGA_REG_GMR_ID writes.");
+ REG_CNT(&pThis->svga.StatRegGuestIdWr, "VMSVGA/Reg/GuestIdWrite", "SVGA_REG_GUEST_ID writes.");
+ REG_CNT(&pThis->svga.StatRegHeightWr, "VMSVGA/Reg/HeightWrite", "SVGA_REG_HEIGHT writes.");
+ REG_CNT(&pThis->svga.StatRegIdWr, "VMSVGA/Reg/IdWrite", "SVGA_REG_ID writes.");
+ REG_CNT(&pThis->svga.StatRegIrqMaskWr, "VMSVGA/Reg/IrqMaskWrite", "SVGA_REG_IRQMASK writes.");
+ REG_CNT(&pThis->svga.StatRegNumDisplaysWr, "VMSVGA/Reg/NumDisplaysWrite", "SVGA_REG_NUM_DISPLAYS writes.");
+ REG_CNT(&pThis->svga.StatRegNumGuestDisplaysWr, "VMSVGA/Reg/NumGuestDisplaysWrite", "SVGA_REG_NUM_GUEST_DISPLAYS writes.");
+ REG_CNT(&pThis->svga.StatRegPaletteWr, "VMSVGA/Reg/PaletteWrite", "SVGA_PALETTE_XXXX writes.");
+ REG_CNT(&pThis->svga.StatRegPitchLockWr, "VMSVGA/Reg/PitchLockWrite", "SVGA_REG_PITCHLOCK writes.");
+ REG_CNT(&pThis->svga.StatRegPseudoColorWr, "VMSVGA/Reg/PseudoColorWrite", "SVGA_REG_PSEUDOCOLOR writes.");
+ REG_CNT(&pThis->svga.StatRegReadOnlyWr, "VMSVGA/Reg/ReadOnlyWrite", "Read-only SVGA_REG_XXXX writes.");
+ REG_CNT(&pThis->svga.StatRegScratchWr, "VMSVGA/Reg/ScratchWrite", "SVGA_REG_SCRATCH_XXXX writes.");
+ REG_CNT(&pThis->svga.StatRegSyncWr, "VMSVGA/Reg/SyncWrite", "SVGA_REG_SYNC writes.");
+ REG_CNT(&pThis->svga.StatRegTopWr, "VMSVGA/Reg/TopWrite", "SVGA_REG_TOP writes.");
+ REG_CNT(&pThis->svga.StatRegTracesWr, "VMSVGA/Reg/TracesWrite", "SVGA_REG_TRACES writes.");
+ REG_CNT(&pThis->svga.StatRegUnknownWr, "VMSVGA/Reg/UnknownWrite", "Writes to unknown register.");
+ REG_CNT(&pThis->svga.StatRegWidthWr, "VMSVGA/Reg/WidthWrite", "SVGA_REG_WIDTH writes.");
+ REG_CNT(&pThis->svga.StatRegCommandLowWr, "VMSVGA/Reg/CommandLowWrite", "SVGA_REG_COMMAND_LOW writes.");
+ REG_CNT(&pThis->svga.StatRegCommandHighWr, "VMSVGA/Reg/CommandHighWrite", "SVGA_REG_COMMAND_HIGH writes.");
+ REG_CNT(&pThis->svga.StatRegDevCapWr, "VMSVGA/Reg/DevCapWrite", "SVGA_REG_DEV_CAP writes.");
+ REG_CNT(&pThis->svga.StatRegCmdPrependLowWr, "VMSVGA/Reg/CmdPrependLowWrite", "SVGA_REG_CMD_PREPEND_LOW writes.");
+ REG_CNT(&pThis->svga.StatRegCmdPrependHighWr, "VMSVGA/Reg/CmdPrependHighWrite", "SVGA_REG_CMD_PREPEND_HIGH writes.");
+
+ REG_CNT(&pThis->svga.StatRegBitsPerPixelRd, "VMSVGA/Reg/BitsPerPixelRead", "SVGA_REG_BITS_PER_PIXEL reads.");
+ REG_CNT(&pThis->svga.StatRegBlueMaskRd, "VMSVGA/Reg/BlueMaskRead", "SVGA_REG_BLUE_MASK reads.");
+ REG_CNT(&pThis->svga.StatRegBusyRd, "VMSVGA/Reg/BusyRead", "SVGA_REG_BUSY reads.");
+ REG_CNT(&pThis->svga.StatRegBytesPerLineRd, "VMSVGA/Reg/BytesPerLineRead", "SVGA_REG_BYTES_PER_LINE reads.");
+ REG_CNT(&pThis->svga.StatRegCapabilitesRd, "VMSVGA/Reg/CapabilitesRead", "SVGA_REG_CAPABILITIES reads.");
+ REG_CNT(&pThis->svga.StatRegConfigDoneRd, "VMSVGA/Reg/ConfigDoneRead", "SVGA_REG_CONFIG_DONE reads.");
+ REG_CNT(&pThis->svga.StatRegCursorXRd, "VMSVGA/Reg/CursorXRead", "SVGA_REG_CURSOR_X reads.");
+ REG_CNT(&pThis->svga.StatRegCursorYRd, "VMSVGA/Reg/CursorYRead", "SVGA_REG_CURSOR_Y reads.");
+ REG_CNT(&pThis->svga.StatRegCursorIdRd, "VMSVGA/Reg/CursorIdRead", "SVGA_REG_DEAD (SVGA_REG_CURSOR_ID) reads.");
+ REG_CNT(&pThis->svga.StatRegCursorOnRd, "VMSVGA/Reg/CursorOnRead", "SVGA_REG_CURSOR_ON reads.");
+ REG_CNT(&pThis->svga.StatRegDepthRd, "VMSVGA/Reg/DepthRead", "SVGA_REG_DEPTH reads.");
+ REG_CNT(&pThis->svga.StatRegDisplayHeightRd, "VMSVGA/Reg/DisplayHeightRead", "SVGA_REG_DISPLAY_HEIGHT reads.");
+ REG_CNT(&pThis->svga.StatRegDisplayIdRd, "VMSVGA/Reg/DisplayIdRead", "SVGA_REG_DISPLAY_ID reads.");
+ REG_CNT(&pThis->svga.StatRegDisplayIsPrimaryRd, "VMSVGA/Reg/DisplayIsPrimaryRead", "SVGA_REG_DISPLAY_IS_PRIMARY reads.");
+ REG_CNT(&pThis->svga.StatRegDisplayPositionXRd, "VMSVGA/Reg/DisplayPositionXRead", "SVGA_REG_DISPLAY_POSITION_X reads.");
+ REG_CNT(&pThis->svga.StatRegDisplayPositionYRd, "VMSVGA/Reg/DisplayPositionYRead", "SVGA_REG_DISPLAY_POSITION_Y reads.");
+ REG_CNT(&pThis->svga.StatRegDisplayWidthRd, "VMSVGA/Reg/DisplayWidthRead", "SVGA_REG_DISPLAY_WIDTH reads.");
+ REG_CNT(&pThis->svga.StatRegEnableRd, "VMSVGA/Reg/EnableRead", "SVGA_REG_ENABLE reads.");
+ REG_CNT(&pThis->svga.StatRegFbOffsetRd, "VMSVGA/Reg/FbOffsetRead", "SVGA_REG_FB_OFFSET reads.");
+ REG_CNT(&pThis->svga.StatRegFbSizeRd, "VMSVGA/Reg/FbSizeRead", "SVGA_REG_FB_SIZE reads.");
+ REG_CNT(&pThis->svga.StatRegFbStartRd, "VMSVGA/Reg/FbStartRead", "SVGA_REG_FB_START reads.");
+ REG_CNT(&pThis->svga.StatRegGmrIdRd, "VMSVGA/Reg/GmrIdRead", "SVGA_REG_GMR_ID reads.");
+ REG_CNT(&pThis->svga.StatRegGmrMaxDescriptorLengthRd, "VMSVGA/Reg/GmrMaxDescriptorLengthRead", "SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH reads.");
+ REG_CNT(&pThis->svga.StatRegGmrMaxIdsRd, "VMSVGA/Reg/GmrMaxIdsRead", "SVGA_REG_GMR_MAX_IDS reads.");
+ REG_CNT(&pThis->svga.StatRegGmrsMaxPagesRd, "VMSVGA/Reg/GmrsMaxPagesRead", "SVGA_REG_GMRS_MAX_PAGES reads.");
+ REG_CNT(&pThis->svga.StatRegGreenMaskRd, "VMSVGA/Reg/GreenMaskRead", "SVGA_REG_GREEN_MASK reads.");
+ REG_CNT(&pThis->svga.StatRegGuestIdRd, "VMSVGA/Reg/GuestIdRead", "SVGA_REG_GUEST_ID reads.");
+ REG_CNT(&pThis->svga.StatRegHeightRd, "VMSVGA/Reg/HeightRead", "SVGA_REG_HEIGHT reads.");
+ REG_CNT(&pThis->svga.StatRegHostBitsPerPixelRd, "VMSVGA/Reg/HostBitsPerPixelRead", "SVGA_REG_HOST_BITS_PER_PIXEL reads.");
+ REG_CNT(&pThis->svga.StatRegIdRd, "VMSVGA/Reg/IdRead", "SVGA_REG_ID reads.");
+ REG_CNT(&pThis->svga.StatRegIrqMaskRd, "VMSVGA/Reg/IrqMaskRead", "SVGA_REG_IRQ_MASK reads.");
+ REG_CNT(&pThis->svga.StatRegMaxHeightRd, "VMSVGA/Reg/MaxHeightRead", "SVGA_REG_MAX_HEIGHT reads.");
+ REG_CNT(&pThis->svga.StatRegMaxWidthRd, "VMSVGA/Reg/MaxWidthRead", "SVGA_REG_MAX_WIDTH reads.");
+ REG_CNT(&pThis->svga.StatRegMemorySizeRd, "VMSVGA/Reg/MemorySizeRead", "SVGA_REG_MEMORY_SIZE reads.");
+ REG_CNT(&pThis->svga.StatRegMemRegsRd, "VMSVGA/Reg/MemRegsRead", "SVGA_REG_MEM_REGS reads.");
+ REG_CNT(&pThis->svga.StatRegMemSizeRd, "VMSVGA/Reg/MemSizeRead", "SVGA_REG_MEM_SIZE reads.");
+ REG_CNT(&pThis->svga.StatRegMemStartRd, "VMSVGA/Reg/MemStartRead", "SVGA_REG_MEM_START reads.");
+ REG_CNT(&pThis->svga.StatRegNumDisplaysRd, "VMSVGA/Reg/NumDisplaysRead", "SVGA_REG_NUM_DISPLAYS reads.");
+ REG_CNT(&pThis->svga.StatRegNumGuestDisplaysRd, "VMSVGA/Reg/NumGuestDisplaysRead", "SVGA_REG_NUM_GUEST_DISPLAYS reads.");
+ REG_CNT(&pThis->svga.StatRegPaletteRd, "VMSVGA/Reg/PaletteRead", "SVGA_REG_PLAETTE_XXXX reads.");
+ REG_CNT(&pThis->svga.StatRegPitchLockRd, "VMSVGA/Reg/PitchLockRead", "SVGA_REG_PITCHLOCK reads.");
+ REG_CNT(&pThis->svga.StatRegPsuedoColorRd, "VMSVGA/Reg/PsuedoColorRead", "SVGA_REG_PSEUDOCOLOR reads.");
+ REG_CNT(&pThis->svga.StatRegRedMaskRd, "VMSVGA/Reg/RedMaskRead", "SVGA_REG_RED_MASK reads.");
+ REG_CNT(&pThis->svga.StatRegScratchRd, "VMSVGA/Reg/ScratchRead", "SVGA_REG_SCRATCH reads.");
+ REG_CNT(&pThis->svga.StatRegScratchSizeRd, "VMSVGA/Reg/ScratchSizeRead", "SVGA_REG_SCRATCH_SIZE reads.");
+ REG_CNT(&pThis->svga.StatRegSyncRd, "VMSVGA/Reg/SyncRead", "SVGA_REG_SYNC reads.");
+ REG_CNT(&pThis->svga.StatRegTopRd, "VMSVGA/Reg/TopRead", "SVGA_REG_TOP reads.");
+ REG_CNT(&pThis->svga.StatRegTracesRd, "VMSVGA/Reg/TracesRead", "SVGA_REG_TRACES reads.");
+ REG_CNT(&pThis->svga.StatRegUnknownRd, "VMSVGA/Reg/UnknownRead", "SVGA_REG_UNKNOWN reads.");
+ REG_CNT(&pThis->svga.StatRegVramSizeRd, "VMSVGA/Reg/VramSizeRead", "SVGA_REG_VRAM_SIZE reads.");
+ REG_CNT(&pThis->svga.StatRegWidthRd, "VMSVGA/Reg/WidthRead", "SVGA_REG_WIDTH reads.");
+ REG_CNT(&pThis->svga.StatRegWriteOnlyRd, "VMSVGA/Reg/WriteOnlyRead", "Write-only SVGA_REG_XXXX reads.");
+ REG_CNT(&pThis->svga.StatRegCommandLowRd, "VMSVGA/Reg/CommandLowRead", "SVGA_REG_COMMAND_LOW reads.");
+ REG_CNT(&pThis->svga.StatRegCommandHighRd, "VMSVGA/Reg/CommandHighRead", "SVGA_REG_COMMAND_HIGH reads.");
+ REG_CNT(&pThis->svga.StatRegMaxPrimBBMemRd, "VMSVGA/Reg/MaxPrimBBMemRead", "SVGA_REG_MAX_PRIMARY_BOUNDING_BOX_MEM reads.");
+ REG_CNT(&pThis->svga.StatRegGBMemSizeRd, "VMSVGA/Reg/GBMemSizeRead", "SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB reads.");
+ REG_CNT(&pThis->svga.StatRegDevCapRd, "VMSVGA/Reg/DevCapRead", "SVGA_REG_DEV_CAP reads.");
+ REG_CNT(&pThis->svga.StatRegCmdPrependLowRd, "VMSVGA/Reg/CmdPrependLowRead", "SVGA_REG_CMD_PREPEND_LOW reads.");
+ REG_CNT(&pThis->svga.StatRegCmdPrependHighRd, "VMSVGA/Reg/CmdPrependHighRead", "SVGA_REG_CMD_PREPEND_HIGH reads.");
+ REG_CNT(&pThis->svga.StatRegScrnTgtMaxWidthRd, "VMSVGA/Reg/ScrnTgtMaxWidthRead", "SVGA_REG_SCREENTARGET_MAX_WIDTH reads.");
+ REG_CNT(&pThis->svga.StatRegScrnTgtMaxHeightRd, "VMSVGA/Reg/ScrnTgtMaxHeightRead", "SVGA_REG_SCREENTARGET_MAX_HEIGHT reads.");
+ REG_CNT(&pThis->svga.StatRegMobMaxSizeRd, "VMSVGA/Reg/MobMaxSizeRead", "SVGA_REG_MOB_MAX_SIZE reads.");
+
+ REG_PRF(&pSVGAState->StatBusyDelayEmts, "VMSVGA/EmtDelayOnBusyFifo", "Time we've delayed EMTs because of busy FIFO thread.");
+ REG_CNT(&pSVGAState->StatFifoCommands, "VMSVGA/FifoCommands", "FIFO command counter.");
+ REG_CNT(&pSVGAState->StatFifoErrors, "VMSVGA/FifoErrors", "FIFO error counter.");
+ REG_CNT(&pSVGAState->StatFifoUnkCmds, "VMSVGA/FifoUnknownCommands", "FIFO unknown command counter.");
+ REG_CNT(&pSVGAState->StatFifoTodoTimeout, "VMSVGA/FifoTodoTimeout", "Number of times we discovered pending work after a wait timeout.");
+ REG_CNT(&pSVGAState->StatFifoTodoWoken, "VMSVGA/FifoTodoWoken", "Number of times we discovered pending work after being woken up.");
+ REG_PRF(&pSVGAState->StatFifoStalls, "VMSVGA/FifoStalls", "Profiling of FIFO stalls (waiting for guest to finish copying data).");
+ REG_PRF(&pSVGAState->StatFifoExtendedSleep, "VMSVGA/FifoExtendedSleep", "Profiling FIFO sleeps relying on the refresh timer and/or access handler.");
+# if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+ REG_CNT(&pSVGAState->StatFifoAccessHandler, "VMSVGA/FifoAccessHandler", "Number of times the FIFO access handler triggered.");
+# endif
+ REG_CNT(&pSVGAState->StatFifoCursorFetchAgain, "VMSVGA/FifoCursorFetchAgain", "Times the cursor update counter changed while reading.");
+ REG_CNT(&pSVGAState->StatFifoCursorNoChange, "VMSVGA/FifoCursorNoChange", "No cursor position change event though the update counter was modified.");
+ REG_CNT(&pSVGAState->StatFifoCursorPosition, "VMSVGA/FifoCursorPosition", "Cursor position and visibility changes.");
+ REG_CNT(&pSVGAState->StatFifoCursorVisiblity, "VMSVGA/FifoCursorVisiblity", "Cursor visibility changes.");
+ REG_CNT(&pSVGAState->StatFifoWatchdogWakeUps, "VMSVGA/FifoWatchdogWakeUps", "Number of times the FIFO refresh poller/watchdog woke up the FIFO thread.");
+
+# undef REG_CNT
+# undef REG_PRF
+
+ /*
+ * Info handlers.
+ */
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vmsvga", "Basic VMSVGA device state details", vmsvgaR3Info);
+# ifdef VBOX_WITH_VMSVGA3D
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vmsvga3dctx", "VMSVGA 3d context details. Accepts 'terse'.", vmsvgaR3Info3dContext);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vmsvga3dsfc",
+ "VMSVGA 3d surface details. "
+ "Accepts 'terse', 'invy', and one of 'tiny', 'medium', 'normal', 'big', 'huge', or 'gigantic'.",
+ vmsvgaR3Info3dSurface);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vmsvga3dsurf",
+ "VMSVGA 3d surface details and bitmap: "
+ "sid[>dir]",
+ vmsvgaR3Info3dSurfaceBmp);
+# endif
+
+ return VINF_SUCCESS;
+}
+
+/* Initialize 3D backend, set device capabilities and call pfnPowerOn callback of 3D backend.
+ *
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param fLoadState Whether saved state is being loaded.
+ */
+static void vmsvgaR3PowerOnDevice(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, bool fLoadState)
+{
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ /* Load a 3D backend. */
+ int rc = vmsvgaR3Init3dInterfaces(pDevIns, pThis, pThisCC);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: 3D support disabled! (vmsvga3dInit -> %Rrc)\n", rc));
+ pThis->svga.f3DEnabled = false;
+ }
+ }
+# endif
+
+# if defined(VBOX_WITH_VMSVGA3D) && defined(RT_OS_LINUX)
+ if (pThis->svga.f3DEnabled)
+ {
+ /* The FIFO thread may use X API for accelerated screen output. */
+ /* This must be done after backend initialization by vmsvgaR3Init3dInterfaces,
+ * because it dynamically resolves XInitThreads.
+ */
+ XInitThreads();
+ }
+# endif
+
+ if (!fLoadState)
+ {
+ vmsvgaR3InitFIFO(pThis, pThisCC);
+ vmsvgaR3GetCaps(pThis, pThisCC, &pThis->svga.u32DeviceCaps, &pThisCC->svga.pau32FIFO[SVGA_FIFO_CAPABILITIES]);
+ }
+# ifdef DEBUG
+ else
+ {
+ /* If saved state is being loaded then FIFO and caps are already restored. */
+ uint32_t u32DeviceCaps = 0;
+ uint32_t u32FIFOCaps = 0;
+ vmsvgaR3GetCaps(pThis, pThisCC, &u32DeviceCaps, &u32FIFOCaps);
+
+ /* Capabilities should not change normally. */
+ Assert( pThis->svga.u32DeviceCaps == u32DeviceCaps
+ && pThisCC->svga.pau32FIFO[SVGA_FIFO_CAPABILITIES] == u32FIFOCaps);
+ }
+#endif
+
+# ifdef VBOX_WITH_VMSVGA3D
+ if (pThis->svga.f3DEnabled)
+ {
+ PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
+ int rc = pSVGAState->pFuncs3D->pfnPowerOn(pDevIns, pThis, pThisCC);
+ if (RT_SUCCESS(rc))
+ {
+ /* Initialize FIFO 3D capabilities. */
+ vmsvgaR3InitFifo3DCaps(pThis, pThisCC);
+ }
+ else
+ {
+ LogRel(("VMSVGA3d: 3D support disabled! (vmsvga3dPowerOn -> %Rrc)\n", rc));
+ pThis->svga.f3DEnabled = false;
+ }
+ }
+# else /* !VBOX_WITH_VMSVGA3D */
+ RT_NOREF(pDevIns);
+# endif /* !VBOX_WITH_VMSVGA3D */
+}
+
+
+/**
+ * Power On notification.
+ *
+ * @returns VBox status code.
+ * @param pDevIns The device instance data.
+ *
+ * @remarks Caller enters the device critical section.
+ */
+DECLCALLBACK(void) vmsvgaR3PowerOn(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+
+ vmsvgaR3PowerOnDevice(pDevIns, pThis, pThisCC, /*fLoadState=*/ false);
+}
+
+/**
+ * Power Off notification.
+ *
+ * @param pDevIns The device instance data.
+ *
+ * @remarks Caller enters the device critical section.
+ */
+DECLCALLBACK(void) vmsvgaR3PowerOff(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+
+ /*
+ * Notify the FIFO thread.
+ */
+ if (pThisCC->svga.pFIFOIOThread)
+ {
+ /* Hack around a deadlock:
+ * - the caller holds the device critsect;
+ * - FIFO thread may attempt to enter the critsect too (when raising an IRQ).
+ */
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+
+ int rc = vmsvgaR3RunExtCmdOnFifoThread(pDevIns, pThis, pThisCC, VMSVGA_FIFO_EXTCMD_POWEROFF,
+ NULL /*pvParam*/, 30000 /*ms*/);
+ AssertLogRelRC(rc);
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+ }
+}
+
+#endif /* IN_RING3 */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.h b/src/VBox/Devices/Graphics/DevVGA-SVGA.h
new file mode 100644
index 00000000..a69fea48
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.h
@@ -0,0 +1,669 @@
+/* $Id: DevVGA-SVGA.h $ */
+/** @file
+ * VMware SVGA device
+ */
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifndef VBOX_WITH_VMSVGA
+# error "VBOX_WITH_VMSVGA is not defined"
+#endif
+
+#define VMSVGA_USE_EMT_HALT_CODE
+
+#include <VBox/pci.h>
+#include <VBox/vmm/pdmifs.h>
+#include <VBox/vmm/pdmthread.h>
+#include <VBox/vmm/stam.h>
+#ifdef VMSVGA_USE_EMT_HALT_CODE
+# include <VBox/vmm/vmapi.h>
+# include <VBox/vmm/vmcpuset.h>
+#endif
+
+#include <iprt/avl.h>
+#include <iprt/list.h>
+
+
+/*
+ * PCI device IDs.
+ */
+#ifndef PCI_VENDOR_ID_VMWARE
+# define PCI_VENDOR_ID_VMWARE 0x15AD
+#endif
+#ifndef PCI_DEVICE_ID_VMWARE_SVGA2
+# define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
+#endif
+
+/* For "svga_overlay.h" */
+#ifndef TRUE
+# define TRUE 1
+#endif
+#ifndef FALSE
+# define FALSE 0
+#endif
+
+/* VMSVGA headers. */
+#include "vmsvga_headers_begin.h"
+#pragma pack(1) /* VMSVGA structures are '__packed'. */
+#include <svga3d_caps.h>
+#include <svga3d_reg.h>
+#include <svga3d_shaderdefs.h>
+#include <svga_escape.h>
+#include <svga_overlay.h>
+#pragma pack()
+#include "vmsvga_headers_end.h"
+
+/**@def FLOAT_FMT_STR
+ * Format string bits to go with FLOAT_FMT_ARGS. */
+#define FLOAT_FMT_STR "%s%u.%06u"
+/** @def FLOAT_FMT_ARGS
+ * Format arguments for a float value, corresponding to FLOAT_FMT_STR.
+ * @param r The floating point value to format. */
+#define FLOAT_FMT_ARGS(r) (r) >= 0.0f ? "" : "-", (unsigned)RT_ABS(r) \
+ , (unsigned)(RT_ABS((r) - (float)(unsigned)(r)) * 1000000.0f)
+
+/* Deprecated commands. They are not included in the VMSVGA headers anymore. */
+#define SVGA_CMD_RECT_FILL 2
+#define SVGA_CMD_DISPLAY_CURSOR 20
+#define SVGA_CMD_MOVE_CURSOR 21
+
+/*
+ * SVGA_CMD_RECT_FILL --
+ *
+ * Fill a rectangular area in the the GFB, and copy the result
+ * to any screens which intersect it.
+ *
+ * Deprecated?
+ *
+ * Availability:
+ * SVGA_CAP_RECT_FILL
+ */
+
+typedef
+struct {
+ uint32_t pixel;
+ uint32_t destX;
+ uint32_t destY;
+ uint32_t width;
+ uint32_t height;
+} SVGAFifoCmdRectFill;
+
+/*
+ * SVGA_CMD_DISPLAY_CURSOR --
+ *
+ * Turn the cursor on or off.
+ *
+ * Deprecated.
+ *
+ * Availability:
+ * SVGA_CAP_CURSOR?
+ */
+
+typedef
+struct {
+ uint32_t id; // Reserved, must be zero.
+ uint32_t state; // 0=off
+} SVGAFifoCmdDisplayCursor;
+
+/*
+ * SVGA_CMD_MOVE_CURSOR --
+ *
+ * Set the cursor position.
+ *
+ * Deprecated.
+ *
+ * Availability:
+ * SVGA_CAP_CURSOR?
+ */
+
+typedef
+struct {
+ SVGASignedPoint pos;
+} SVGAFifoCmdMoveCursor;
+
+
+/** Default FIFO size. */
+#define VMSVGA_FIFO_SIZE _2M
+/** The old FIFO size. */
+#define VMSVGA_FIFO_SIZE_OLD _128K
+
+/** Default scratch region size. */
+#define VMSVGA_SCRATCH_SIZE 0x100
+/** Surface memory available to the guest. */
+#define VMSVGA_SURFACE_SIZE (512*1024*1024)
+/** Maximum GMR pages. */
+#define VMSVGA_MAX_GMR_PAGES 0x100000
+/** Maximum nr of GMR ids. */
+#define VMSVGA_MAX_GMR_IDS _8K
+/** Maximum number of GMR descriptors. */
+#define VMSVGA_MAX_GMR_DESC_LOOP_COUNT VMSVGA_MAX_GMR_PAGES
+
+#define VMSVGA_VAL_UNINITIALIZED (unsigned)-1
+
+/** For validating X and width values.
+ * The code assumes it's at least an order of magnitude less than UINT32_MAX. */
+#define VMSVGA_MAX_X _1M
+/** For validating Y and height values.
+ * The code assumes it's at least an order of magnitude less than UINT32_MAX. */
+#define VMSVGA_MAX_Y _1M
+
+/* u32ActionFlags */
+#define VMSVGA_ACTION_CHANGEMODE_BIT 0
+#define VMSVGA_ACTION_CHANGEMODE RT_BIT(VMSVGA_ACTION_CHANGEMODE_BIT)
+
+
+#ifdef DEBUG
+/* Enable to log FIFO register accesses. */
+//# define DEBUG_FIFO_ACCESS
+/* Enable to log GMR page accesses. */
+//# define DEBUG_GMR_ACCESS
+#endif
+
+#define VMSVGA_FIFO_EXTCMD_NONE 0
+#define VMSVGA_FIFO_EXTCMD_TERMINATE 1
+#define VMSVGA_FIFO_EXTCMD_SAVESTATE 2
+#define VMSVGA_FIFO_EXTCMD_LOADSTATE 3
+#define VMSVGA_FIFO_EXTCMD_RESET 4
+#define VMSVGA_FIFO_EXTCMD_UPDATE_SURFACE_HEAP_BUFFERS 5
+#define VMSVGA_FIFO_EXTCMD_POWEROFF 6
+
+/** Size of the region to backup when switching into svga mode. */
+#define VMSVGA_VGA_FB_BACKUP_SIZE _512K
+
+/** @def VMSVGA_WITH_VGA_FB_BACKUP
+ * Enables correct VGA MMIO read/write handling when VMSVGA is enabled. It
+ * is SLOW and probably not entirely right, but it helps with getting 3dmark
+ * output and other stuff. */
+#define VMSVGA_WITH_VGA_FB_BACKUP 1
+
+/** @def VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ * defined(VMSVGA_WITH_VGA_FB_BACKUP) && defined(IN_RING3) */
+#if (defined(VMSVGA_WITH_VGA_FB_BACKUP) && defined(IN_RING3)) || defined(DOXYGEN_RUNNING)
+# define VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3 1
+#else
+# undef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+#endif
+
+/** @def VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RZ
+ * defined(VMSVGA_WITH_VGA_FB_BACKUP) && !defined(IN_RING3) */
+#if (defined(VMSVGA_WITH_VGA_FB_BACKUP) && !defined(IN_RING3)) || defined(DOXYGEN_RUNNING)
+# define VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RZ 1
+#else
+# undef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RZ
+#endif
+
+
+typedef struct
+{
+ PSSMHANDLE pSSM;
+ uint32_t uVersion;
+ uint32_t uPass;
+} VMSVGA_STATE_LOAD;
+typedef VMSVGA_STATE_LOAD *PVMSVGA_STATE_LOAD;
+
+/** Host screen viewport.
+ * (4th quadrant with negated Y values - usual Windows and X11 world view.) */
+typedef struct VMSVGAVIEWPORT
+{
+ uint32_t x; /**< x coordinate (left). */
+ uint32_t y; /**< y coordinate (top). */
+ uint32_t cx; /**< width. */
+ uint32_t cy; /**< height. */
+ /** Right side coordinate (exclusive). Same as x + cx. */
+ uint32_t xRight;
+ /** First quadrant low y coordinate.
+ * Same as y + cy - 1 in window coordinates. */
+ uint32_t yLowWC;
+ /** First quadrant high y coordinate (exclusive) - yLowWC + cy.
+ * Same as y - 1 in window coordinates. */
+ uint32_t yHighWC;
+ /** Alignment padding. */
+ uint32_t uAlignment;
+} VMSVGAVIEWPORT;
+
+#ifdef VBOX_WITH_VMSVGA3D
+typedef struct VMSVGAHWSCREEN *PVMSVGAHWSCREEN;
+#endif
+
+/**
+ * Screen object state.
+ */
+typedef struct VMSVGASCREENOBJECT
+{
+ /** SVGA_SCREEN_* flags. */
+ uint32_t fuScreen;
+ /** The screen object id. */
+ uint32_t idScreen;
+ /** The screen dimensions. */
+ int32_t xOrigin;
+ int32_t yOrigin;
+ uint32_t cWidth;
+ uint32_t cHeight;
+ /** Offset of the screen buffer in the guest VRAM. */
+ uint32_t offVRAM;
+ /** Scanline pitch. */
+ uint32_t cbPitch;
+ /** Bits per pixel. */
+ uint32_t cBpp;
+ /** The physical DPI that the guest expects for this screen. Zero, if the guest is not DPI aware. */
+ uint32_t cDpi;
+ bool fDefined;
+ bool fModified;
+ void *pvScreenBitmap;
+#ifdef VBOX_WITH_VMSVGA3D
+ /** Pointer to the HW accelerated (3D) screen data. */
+ R3PTRTYPE(PVMSVGAHWSCREEN) pHwScreen;
+#endif
+} VMSVGASCREENOBJECT;
+
+/** Pointer to the private VMSVGA ring-3 state structure.
+ * @todo Still not entirely satisfired with the type name, but better than
+ * the previous lower/upper case only distinction. */
+typedef struct VMSVGAR3STATE *PVMSVGAR3STATE;
+/** Pointer to the private (implementation specific) VMSVGA3d state. */
+typedef struct VMSVGA3DSTATE *PVMSVGA3DSTATE;
+
+
+/**
+ * The VMSVGA device state.
+ *
+ * This instantatiated as VGASTATE::svga.
+ */
+typedef struct VMSVGAState
+{
+ /** Guest physical address of the FIFO memory range. */
+ RTGCPHYS GCPhysFIFO;
+ /** Size in bytes of the FIFO memory range.
+ * This may be smaller than cbFIFOConfig after restoring an old VM state. */
+ uint32_t cbFIFO;
+ /** The configured FIFO size. */
+ uint32_t cbFIFOConfig;
+ /** SVGA id. */
+ uint32_t u32SVGAId;
+ /** SVGA extensions enabled or not. */
+ uint32_t fEnabled;
+ /** SVGA memory area configured status. */
+ uint32_t fConfigured;
+ /** Device is busy handling FIFO requests (VMSVGA_BUSY_F_FIFO,
+ * VMSVGA_BUSY_F_EMT_FORCE). */
+ uint32_t volatile fBusy;
+#define VMSVGA_BUSY_F_FIFO RT_BIT_32(0) /**< The normal true/false busy FIFO bit. */
+#define VMSVGA_BUSY_F_EMT_FORCE RT_BIT_32(1) /**< Bit preventing race status flickering when EMT kicks the FIFO thread. */
+ /** Traces (dirty page detection) enabled or not. */
+ uint32_t fTraces;
+ /** Guest OS identifier. */
+ uint32_t u32GuestId;
+ /** Scratch region size (VMSVGAState::au32ScratchRegion). */
+ uint32_t cScratchRegion;
+ /** Irq status. */
+ uint32_t u32IrqStatus;
+ /** Irq mask. */
+ uint32_t u32IrqMask;
+ /** Pitch lock. */
+ uint32_t u32PitchLock;
+ /** Current GMR id. (SVGA_REG_GMR_ID) */
+ uint32_t u32CurrentGMRId;
+ /** SVGA device capabilities. */
+ uint32_t u32DeviceCaps;
+ uint32_t Padding0; /* Used to be I/O port base address. */
+ /** Port io index register. */
+ uint32_t u32IndexReg;
+ /** FIFO request semaphore. */
+ SUPSEMEVENT hFIFORequestSem;
+ /** The last seen SVGA_FIFO_CURSOR_COUNT value.
+ * Used by the FIFO thread and its watchdog. */
+ uint32_t uLastCursorUpdateCount;
+ /** Indicates that the FIFO thread is sleeping and might need waking up. */
+ bool volatile fFIFOThreadSleeping;
+ /** The legacy GFB mode registers. If used, they correspond to screen 0. */
+ /** True when the guest modifies the GFB mode registers. */
+ bool fGFBRegisters;
+ /** SVGA 3D overlay enabled or not. */
+ bool f3DOverlayEnabled;
+ /** Indicates that the guest behaves incorrectly. */
+ bool volatile fBadGuest;
+ bool afPadding[4];
+ uint32_t uWidth;
+ uint32_t uHeight;
+ uint32_t uBpp;
+ uint32_t cbScanline;
+ uint32_t uHostBpp;
+ /** Maximum width supported. */
+ uint32_t u32MaxWidth;
+ /** Maximum height supported. */
+ uint32_t u32MaxHeight;
+ /** Viewport rectangle, i.e. what's currently visible of the target host
+ * window. This is usually (0,0)(uWidth,uHeight), but if the window is
+ * shrunk and scrolling applied, both the origin and size may differ. */
+ VMSVGAVIEWPORT viewport;
+ /** Action flags */
+ uint32_t u32ActionFlags;
+ /** SVGA 3d extensions enabled or not. */
+ bool f3DEnabled;
+ /** VRAM page monitoring enabled or not. */
+ bool fVRAMTracking;
+ /** External command to be executed in the FIFO thread. */
+ uint8_t volatile u8FIFOExtCommand;
+ /** Set by vmsvgaR3RunExtCmdOnFifoThread when it temporarily resumes the FIFO
+ * thread and does not want it do anything but the command. */
+ bool volatile fFifoExtCommandWakeup;
+#ifdef DEBUG_GMR_ACCESS
+ /** GMR debug access handler type handle. */
+ PGMPHYSHANDLERTYPE hGmrAccessHandlerType;
+#endif
+#if defined(VMSVGA_USE_FIFO_ACCESS_HANDLER) || defined(DEBUG_FIFO_ACCESS)
+ /** FIFO debug access handler type handle. */
+ PGMPHYSHANDLERTYPE hFifoAccessHandlerType;
+#endif
+ /** Number of GMRs (VMSVGA_MAX_GMR_IDS, count of elements in VMSVGAR3STATE::paGMR array). */
+ uint32_t cGMR;
+ uint32_t uScreenOffset; /* Used only for loading older saved states. */
+
+ /** Legacy cursor state. */
+ uint32_t uCursorX;
+ uint32_t uCursorY;
+ uint32_t uCursorID;
+ uint32_t uCursorOn;
+
+ /** Scratch array.
+ * Putting this at the end since it's big it probably not . */
+ uint32_t au32ScratchRegion[VMSVGA_SCRATCH_SIZE];
+
+ /** Array of SVGA3D_DEVCAP values, which are accessed via SVGA_REG_DEV_CAP. */
+ uint32_t au32DevCaps[SVGA3D_DEVCAP_MAX];
+ /** Index written to the SVGA_REG_DEV_CAP register. */
+ uint32_t u32DevCapIndex;
+ /** Low 32 bit of a command buffer address written to the SVGA_REG_COMMAND_LOW register. */
+ uint32_t u32RegCommandLow;
+ /** High 32 bit of a command buffer address written to the SVGA_REG_COMMAND_HIGH register. */
+ uint32_t u32RegCommandHigh;
+
+ STAMCOUNTER StatRegBitsPerPixelWr;
+ STAMCOUNTER StatRegBusyWr;
+ STAMCOUNTER StatRegCursorXWr;
+ STAMCOUNTER StatRegCursorYWr;
+ STAMCOUNTER StatRegCursorIdWr;
+ STAMCOUNTER StatRegCursorOnWr;
+ STAMCOUNTER StatRegDepthWr;
+ STAMCOUNTER StatRegDisplayHeightWr;
+ STAMCOUNTER StatRegDisplayIdWr;
+ STAMCOUNTER StatRegDisplayIsPrimaryWr;
+ STAMCOUNTER StatRegDisplayPositionXWr;
+ STAMCOUNTER StatRegDisplayPositionYWr;
+ STAMCOUNTER StatRegDisplayWidthWr;
+ STAMCOUNTER StatRegEnableWr;
+ STAMCOUNTER StatRegGmrIdWr;
+ STAMCOUNTER StatRegGuestIdWr;
+ STAMCOUNTER StatRegHeightWr;
+ STAMCOUNTER StatRegIdWr;
+ STAMCOUNTER StatRegIrqMaskWr;
+ STAMCOUNTER StatRegNumDisplaysWr;
+ STAMCOUNTER StatRegNumGuestDisplaysWr;
+ STAMCOUNTER StatRegPaletteWr;
+ STAMCOUNTER StatRegPitchLockWr;
+ STAMCOUNTER StatRegPseudoColorWr;
+ STAMCOUNTER StatRegReadOnlyWr;
+ STAMCOUNTER StatRegScratchWr;
+ STAMCOUNTER StatRegSyncWr;
+ STAMCOUNTER StatRegTopWr;
+ STAMCOUNTER StatRegTracesWr;
+ STAMCOUNTER StatRegUnknownWr;
+ STAMCOUNTER StatRegWidthWr;
+ STAMCOUNTER StatRegCommandLowWr;
+ STAMCOUNTER StatRegCommandHighWr;
+ STAMCOUNTER StatRegDevCapWr;
+ STAMCOUNTER StatRegCmdPrependLowWr;
+ STAMCOUNTER StatRegCmdPrependHighWr;
+
+ STAMCOUNTER StatRegBitsPerPixelRd;
+ STAMCOUNTER StatRegBlueMaskRd;
+ STAMCOUNTER StatRegBusyRd;
+ STAMCOUNTER StatRegBytesPerLineRd;
+ STAMCOUNTER StatRegCapabilitesRd;
+ STAMCOUNTER StatRegConfigDoneRd;
+ STAMCOUNTER StatRegCursorXRd;
+ STAMCOUNTER StatRegCursorYRd;
+ STAMCOUNTER StatRegCursorIdRd;
+ STAMCOUNTER StatRegCursorOnRd;
+ STAMCOUNTER StatRegDepthRd;
+ STAMCOUNTER StatRegDisplayHeightRd;
+ STAMCOUNTER StatRegDisplayIdRd;
+ STAMCOUNTER StatRegDisplayIsPrimaryRd;
+ STAMCOUNTER StatRegDisplayPositionXRd;
+ STAMCOUNTER StatRegDisplayPositionYRd;
+ STAMCOUNTER StatRegDisplayWidthRd;
+ STAMCOUNTER StatRegEnableRd;
+ STAMCOUNTER StatRegFbOffsetRd;
+ STAMCOUNTER StatRegFbSizeRd;
+ STAMCOUNTER StatRegFbStartRd;
+ STAMCOUNTER StatRegGmrIdRd;
+ STAMCOUNTER StatRegGmrMaxDescriptorLengthRd;
+ STAMCOUNTER StatRegGmrMaxIdsRd;
+ STAMCOUNTER StatRegGmrsMaxPagesRd;
+ STAMCOUNTER StatRegGreenMaskRd;
+ STAMCOUNTER StatRegGuestIdRd;
+ STAMCOUNTER StatRegHeightRd;
+ STAMCOUNTER StatRegHostBitsPerPixelRd;
+ STAMCOUNTER StatRegIdRd;
+ STAMCOUNTER StatRegIrqMaskRd;
+ STAMCOUNTER StatRegMaxHeightRd;
+ STAMCOUNTER StatRegMaxWidthRd;
+ STAMCOUNTER StatRegMemorySizeRd;
+ STAMCOUNTER StatRegMemRegsRd;
+ STAMCOUNTER StatRegMemSizeRd;
+ STAMCOUNTER StatRegMemStartRd;
+ STAMCOUNTER StatRegNumDisplaysRd;
+ STAMCOUNTER StatRegNumGuestDisplaysRd;
+ STAMCOUNTER StatRegPaletteRd;
+ STAMCOUNTER StatRegPitchLockRd;
+ STAMCOUNTER StatRegPsuedoColorRd;
+ STAMCOUNTER StatRegRedMaskRd;
+ STAMCOUNTER StatRegScratchRd;
+ STAMCOUNTER StatRegScratchSizeRd;
+ STAMCOUNTER StatRegSyncRd;
+ STAMCOUNTER StatRegTopRd;
+ STAMCOUNTER StatRegTracesRd;
+ STAMCOUNTER StatRegUnknownRd;
+ STAMCOUNTER StatRegVramSizeRd;
+ STAMCOUNTER StatRegWidthRd;
+ STAMCOUNTER StatRegWriteOnlyRd;
+ STAMCOUNTER StatRegCommandLowRd;
+ STAMCOUNTER StatRegCommandHighRd;
+ STAMCOUNTER StatRegMaxPrimBBMemRd;
+ STAMCOUNTER StatRegGBMemSizeRd;
+ STAMCOUNTER StatRegDevCapRd;
+ STAMCOUNTER StatRegCmdPrependLowRd;
+ STAMCOUNTER StatRegCmdPrependHighRd;
+ STAMCOUNTER StatRegScrnTgtMaxWidthRd;
+ STAMCOUNTER StatRegScrnTgtMaxHeightRd;
+ STAMCOUNTER StatRegMobMaxSizeRd;
+} VMSVGAState, VMSVGASTATE;
+
+
+/**
+ * The VMSVGA device state for ring-3
+ *
+ * This instantatiated as VGASTATER3::svga.
+ */
+typedef struct VMSVGASTATER3
+{
+ /** The R3 FIFO pointer. */
+ R3PTRTYPE(uint32_t *) pau32FIFO;
+ /** R3 Opaque pointer to svga state. */
+ R3PTRTYPE(PVMSVGAR3STATE) pSvgaR3State;
+ /** R3 Opaque pointer to 3d state. */
+ R3PTRTYPE(PVMSVGA3DSTATE) p3dState;
+ /** The separate VGA frame buffer in svga mode.
+ * Unlike the the boch-based VGA device implementation, VMSVGA seems to have a
+ * separate frame buffer for VGA and allows concurrent use of both. The SVGA
+ * SDK is making use of this to do VGA text output while testing other things in
+ * SVGA mode, displaying the result by switching back to VGA text mode. So,
+ * when entering SVGA mode we copy the first part of the frame buffer here and
+ * direct VGA accesses here instead. It is copied back when leaving SVGA mode. */
+ R3PTRTYPE(uint8_t *) pbVgaFrameBufferR3;
+ /** R3 Opaque pointer to an external fifo cmd parameter. */
+ R3PTRTYPE(void * volatile) pvFIFOExtCmdParam;
+
+ /** FIFO external command semaphore. */
+ R3PTRTYPE(RTSEMEVENT) hFIFOExtCmdSem;
+ /** FIFO IO Thread. */
+ R3PTRTYPE(PPDMTHREAD) pFIFOIOThread;
+} VMSVGASTATER3;
+
+
+/**
+ * The VMSVGA device state for ring-0
+ *
+ * This instantatiated as VGASTATER0::svga.
+ */
+typedef struct VMSVGASTATER0
+{
+ /** The R0 FIFO pointer.
+ * @note This only points to the _first_ _page_ of the FIFO! */
+ R0PTRTYPE(uint32_t *) pau32FIFO;
+} VMSVGASTATER0;
+
+
+typedef struct VGAState *PVGASTATE;
+typedef struct VGASTATER3 *PVGASTATER3;
+typedef struct VGASTATER0 *PVGASTATER0;
+typedef struct VGASTATERC *PVGASTATERC;
+typedef CTX_SUFF(PVGASTATE) PVGASTATECC;
+
+DECLCALLBACK(int) vmsvgaR3PciIORegionFifoMapUnmap(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion,
+ RTGCPHYS GCPhysAddress, RTGCPHYS cb, PCIADDRESSSPACE enmType);
+DECLCALLBACK(VBOXSTRICTRC) vmsvgaIORead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb);
+DECLCALLBACK(VBOXSTRICTRC) vmsvgaIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb);
+
+DECLCALLBACK(void) vmsvgaR3PortSetViewport(PPDMIDISPLAYPORT pInterface, uint32_t uScreenId,
+ uint32_t x, uint32_t y, uint32_t cx, uint32_t cy);
+DECLCALLBACK(void) vmsvgaR3PortReportMonitorPositions(PPDMIDISPLAYPORT pInterface, uint32_t cPositions, PCRTPOINT paPositions);
+
+int vmsvgaR3Init(PPDMDEVINS pDevIns);
+int vmsvgaR3Reset(PPDMDEVINS pDevIns);
+int vmsvgaR3Destruct(PPDMDEVINS pDevIns);
+int vmsvgaR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
+int vmsvgaR3LoadDone(PPDMDEVINS pDevIns);
+int vmsvgaR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM);
+DECLCALLBACK(void) vmsvgaR3PowerOn(PPDMDEVINS pDevIns);
+DECLCALLBACK(void) vmsvgaR3PowerOff(PPDMDEVINS pDevIns);
+void vmsvgaR3FifoWatchdogTimer(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC);
+
+#ifdef IN_RING3
+VMSVGASCREENOBJECT *vmsvgaR3GetScreenObject(PVGASTATECC pThisCC, uint32_t idScreen);
+int vmsvgaR3UpdateScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, int x, int y, int w, int h);
+#endif
+
+int vmsvgaR3GmrTransfer(PVGASTATE pThis, PVGASTATECC pThisCC, const SVGA3dTransferType enmTransferType,
+ uint8_t *pbHstBuf, uint32_t cbHstBuf, uint32_t offHst, int32_t cbHstPitch,
+ SVGAGuestPtr gstPtr, uint32_t offGst, int32_t cbGstPitch,
+ uint32_t cbWidth, uint32_t cHeight);
+
+void vmsvgaR3ClipCopyBox(const SVGA3dSize *pSizeSrc, const SVGA3dSize *pSizeDest, SVGA3dCopyBox *pBox);
+void vmsvgaR3ClipBox(const SVGA3dSize *pSize, SVGA3dBox *pBox);
+void vmsvgaR3ClipRect(SVGASignedRect const *pBound, SVGASignedRect *pRect);
+void vmsvgaR3Clip3dRect(SVGA3dRect const *pBound, SVGA3dRect RT_UNTRUSTED_GUEST *pRect);
+
+/*
+ * GBO (Guest Backed Object).
+ * A GBO is a list of the guest pages. GBOs are used for VMSVGA MOBs (Memory OBjects)
+ * and Object Tables which the guest shares with the host.
+ *
+ * A GBO is similar to a GMR. Nevertheless I'll create a new code for GBOs in order
+ * to avoid tweaking and possibly breaking existing code. Moreover it will be probably possible to
+ * map the guest pages into the host R3 memory and access them directly.
+ */
+
+/* GBO descriptor. */
+typedef struct VMSVGAGBODESCRIPTOR
+{
+ RTGCPHYS GCPhys;
+ uint64_t cPages;
+} VMSVGAGBODESCRIPTOR, *PVMSVGAGBODESCRIPTOR;
+typedef VMSVGAGBODESCRIPTOR const *PCVMSVGAGBODESCRIPTOR;
+
+/* GBO.
+ */
+typedef struct VMSVGAGBO
+{
+ uint32_t fGboFlags;
+ uint32_t cTotalPages;
+ uint32_t cbTotal;
+ uint32_t cDescriptors;
+ PVMSVGAGBODESCRIPTOR paDescriptors;
+ void *pvHost; /* Pointer to cbTotal bytes on the host if VMSVGAGBO_F_HOST_BACKED is set. */
+} VMSVGAGBO, *PVMSVGAGBO;
+typedef VMSVGAGBO const *PCVMSVGAGBO;
+
+#define VMSVGAGBO_F_OBSOLETE_0x1 0x1
+#define VMSVGAGBO_F_HOST_BACKED 0x2
+
+#define VMSVGA_IS_GBO_CREATED(a_Gbo) ((a_Gbo)->paDescriptors != NULL)
+
+int vmsvgaR3OTableReadSurface(PVMSVGAR3STATE pSvgaR3State, uint32_t sid, SVGAOTableSurfaceEntry *pEntrySurface);
+
+/* MOB is also a GBO.
+ */
+typedef struct VMSVGAMOB
+{
+ AVLU32NODECORE Core; /* Key is the mobid. */
+ RTLISTNODE nodeLRU;
+ VMSVGAGBO Gbo;
+} VMSVGAMOB, *PVMSVGAMOB;
+typedef VMSVGAMOB const *PCVMSVGAMOB;
+
+PVMSVGAMOB vmsvgaR3MobGet(PVMSVGAR3STATE pSvgaR3State, SVGAMobId RT_UNTRUSTED_GUEST mobid);
+int vmsvgaR3MobWrite(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob, uint32_t off, void const *pvData, uint32_t cbData);
+int vmsvgaR3MobRead(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob, uint32_t off, void *pvData, uint32_t cbData);
+int vmsvgaR3MobBackingStoreCreate(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob, uint32_t cbValid);
+void vmsvgaR3MobBackingStoreDelete(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob);
+int vmsvgaR3MobBackingStoreWriteToGuest(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob);
+int vmsvgaR3MobBackingStoreReadFromGuest(PVMSVGAR3STATE pSvgaR3State, PVMSVGAMOB pMob);
+void *vmsvgaR3MobBackingStorePtr(PVMSVGAMOB pMob, uint32_t off);
+
+DECLINLINE(uint32_t) vmsvgaR3MobSize(PVMSVGAMOB pMob)
+{
+ if (pMob)
+ return pMob->Gbo.cbTotal;
+ return 0;
+}
+
+DECLINLINE(uint32_t) vmsvgaR3MobId(PVMSVGAMOB pMob)
+{
+ if (pMob)
+ return pMob->Core.Key;
+ return SVGA_ID_INVALID;
+}
+
+#ifdef DEBUG_sunlover
+#define DEBUG_BREAKPOINT_TEST() do { ASMBreakpoint(); } while (0)
+#else
+#define DEBUG_BREAKPOINT_TEST() do { } while (0)
+#endif
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA_h */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
new file mode 100644
index 00000000..8e48d7a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.h
@@ -0,0 +1,67 @@
+/* $Id: DevVGA-SVGA3d-cocoa.h $ */
+/** @file
+ * VirtualBox OpenGL Cocoa Window System Helper Implementation.
+ */
+
+/*
+ * Copyright (C) 2014-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_cocoa_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_cocoa_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBox/types.h>
+#include <VBox/VBoxCocoa.h>
+
+RT_C_DECLS_BEGIN
+
+#ifndef ___renderspu_cocoa_helper_h
+ADD_COCOA_NATIVE_REF(NSView);
+ADD_COCOA_NATIVE_REF(NSOpenGLContext);
+#endif
+
+#ifdef IN_VMSVGA3DCOCOA
+# define VMSVGA3DCOCOA_DECL(type) DECLEXPORT(type)
+#else
+# define VMSVGA3DCOCOA_DECL(type) DECLIMPORT(type)
+#endif
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaServiceRunLoop(void);
+VMSVGA3DCOCOA_DECL(bool) vmsvga3dCocoaCreateViewAndContext(NativeNSViewRef *ppView, NativeNSOpenGLContextRef *ppCtx,
+ NativeNSViewRef pParentView, uint32_t cx, uint32_t cy,
+ NativeNSOpenGLContextRef pSharedCtx, bool fOtherProfile);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaDestroyViewAndContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewInfo(PCDBGFINFOHLP pHlp, NativeNSViewRef pView);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewSetSize(NativeNSViewRef pView, int w, int h);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewUpdateViewport(NativeNSViewRef pView);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx);
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaSwapBuffers(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx);
+
+int ExplicitlyLoadVBoxSVGA3DObjC(bool fResolveAllImports, PRTERRINFO pErrInfo);
+
+RT_C_DECLS_END
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_cocoa_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
new file mode 100644
index 00000000..001e2890
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-cocoa.m
@@ -0,0 +1,947 @@
+/* $Id: DevVGA-SVGA3d-cocoa.m $ */
+/** @file
+ * VirtualBox OpenGL Cocoa Window System Helper Implementation.
+ *
+ * @remarks Inspired by HostServices/SharedOpenGL/render/renderspu_cocoa_helper.m.
+ */
+
+/*
+ * Copyright (C) 2009-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include "DevVGA-SVGA3d-cocoa.h"
+#import <Cocoa/Cocoa.h>
+#undef PVM /* Stupid namespace pollution from outdated sys/param.h header file. */
+#import <OpenGL/gl.h>
+
+#include <iprt/thread.h>
+#include <iprt/assert.h>
+#include <iprt/string.h>
+#include <VBox/log.h>
+#include <VBox/vmm/dbgf.h>
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+/** @def USE_NSOPENGLVIEW
+ * Define this to experiment with using NSOpenGLView instead
+ * of NSView. There are transparency issues with the former,
+ * so for the time being we're using the latter. */
+#if 0 || DOXYGEN_RUNNING
+# define USE_NSOPENGLVIEW
+#endif
+
+/**@def FLOAT_FMT_STR
+ * Format string bits to go with FLOAT_FMT_ARGS. */
+#define FLOAT_FMT_STR "%d.%06u"
+/** @def FLOAT_FMT_ARGS
+ * Format arguments for a float value, corresponding to FLOAT_FMT_STR.
+ * @param r The floating point value to format. */
+#define FLOAT_FMT_ARGS(r) (int)(r), ((unsigned)(RT_ABS(r) * 1000000) % 1000000U)
+
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+/**
+ * Argument package for doing this on the main thread.
+ */
+@interface VMSVGA3DCreateViewAndContext : NSObject
+{
+@public
+ /* in */
+ NativeNSViewRef pParentView;
+ uint32_t cx;
+ uint32_t cy;
+ NativeNSOpenGLContextRef pSharedCtx;
+ bool fOtherProfile;
+
+ /* out */
+ NativeNSViewRef pView;
+ NativeNSOpenGLContextRef pCtx;
+}
+@end
+
+
+/**
+ * The overlay view.
+ */
+@interface VMSVGA3DOverlayView
+#ifdef USE_NSOPENGLVIEW
+ : NSOpenGLView
+#else
+ : NSView
+#endif
+{
+@private
+ /** This points to the parent view, if there is one. If there isn't a parent
+ * the view will be hidden and never used for displaying stuff. We only have
+ * one visible context per guest screen that is visible to the user and
+ * subject to buffer swapping. */
+ NSView *m_pParentView;
+ /** Indicates that buffers (back+front) needs clearing before use because
+ * the view changed size. There are two buffers, so this is set to two
+ * each time when the view area increases. */
+ uint32_t m_cClears;
+ /** Set if the OpenGL context needs updating after a resize. */
+ bool m_fUpdateCtx;
+
+#ifndef USE_NSOPENGLVIEW
+ /** The OpenGL context associated with this view. */
+ NSOpenGLContext *m_pCtx;
+ /** Number of times we've tried to set the view (shut up noisy NSLog). */
+ uint32_t m_cSetViewAttempts;
+#endif
+
+ /** The desired view position relative to super. */
+ NSPoint m_Pos;
+ /** The desired view size. */
+ NSSize m_Size;
+}
++ (void)createViewAndContext:(VMSVGA3DCreateViewAndContext *)pParams;
+- (id)initWithFrameAndFormat:(NSRect)frame parentView:(NSView*)pparentView pixelFormat:(NSOpenGLPixelFormat *)pFmt;
+- (void)vboxSetPos:(NSPoint)pos;
+- (void)vboxSetSize:(NSSize)size;
+- (void)vboxScheduleCtxUpdate;
+- (void)vboxReshapePerform;
+- (void)vboxReshape;
+- (void)vboxBoundsDidChange:(NSNotification *)pNotification;
+- (void)vboxFrameDidChange:(NSNotification *)pNotification;
+- (void)vboxFrameDidChangeGlobal:(NSNotification *)pNotification;
+- (BOOL)postsFrameChangedNotifications;
+- (void)vboxRemoveFromSuperviewAndHide;
+- (void)vboxUpdateCtxIfNecessary;
+- (void)vboxClearBackBufferIfNecessary;
+- (NSOpenGLContext *)makeCurrentGLContext;
+- (void)restoreSavedGLContext:(NSOpenGLContext *)pSavedCtx;
+
+#ifndef USE_NSOPENGLVIEW
+/* NSOpenGLView fakes: */
+- (void)setOpenGLContext:(NSOpenGLContext *)pCtx;
+- (NSOpenGLContext *)openGLContext;
+- (void)prepareOpenGL;
+
+#endif
+/* Overridden: */
+- (void)viewDidMoveToWindow;
+- (void)viewDidMoveToSuperview;
+- (void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize;
+- (void)drawRect:(NSRect)rect;
+
+@end
+
+
+/********************************************************************************
+*
+* VMSVGA3DOverlayView class implementation
+*
+********************************************************************************/
+@implementation VMSVGA3DOverlayView
+
+
++ (void)createViewAndContext:(VMSVGA3DCreateViewAndContext *)pParams
+{
+ LogFlow(("OvlView createViewAndContext:\n"));
+
+ /*
+ * Create a pixel format.
+ */
+ NSOpenGLPixelFormat *pFmt = nil;
+
+ // Consider to remove it and check if it's harmless.
+ NSOpenGLPixelFormatAttribute attribs[] =
+ {
+ NSOpenGLPFAOpenGLProfile, (NSOpenGLPixelFormatAttribute)0,
+ //NSOpenGLPFAWindow, - obsolete/deprecated, try work without it...
+ NSOpenGLPFAAccelerated,
+ NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFABackingStore,
+ NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute)24,
+ NSOpenGLPFAAlphaSize, (NSOpenGLPixelFormatAttribute)8,
+ NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute)24,
+ 0
+ };
+ attribs[1] = pParams->fOtherProfile ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy;
+ pFmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
+ if (pFmt)
+ {
+ /*
+ * Create a new view.
+ */
+ NSRect Frame;
+ Frame.origin.x = 0;
+ Frame.origin.y = 0;
+ Frame.size.width = pParams->cx < _1M && pParams->cx > 0 ? pParams->cx : 1; /* 'invalid drawable' if 0,0 size? */
+ Frame.size.height = pParams->cy < _1M && pParams->cy > 0 ? pParams->cy : 1;
+ VMSVGA3DOverlayView *pView = [[VMSVGA3DOverlayView alloc] initWithFrameAndFormat:Frame
+ parentView:pParams->pParentView
+ pixelFormat:pFmt];
+ if (pView)
+ {
+ /*
+ * If we have no shared GL context, we use the one that NSOpenGLView create. Otherwise,
+ * we replace it. (If we don't call openGLContext, it won't yet have been instantiated,
+ * so there is no unecessary contexts created here when pSharedCtx != NULL.)
+ */
+ NSOpenGLContext *pCtx;
+#ifdef USE_NSOPENGLVIEW
+ if (!pParams->pSharedCtx)
+ pCtx = [pView openGLContext];
+ else
+#endif
+ {
+ pCtx = [[NSOpenGLContext alloc] initWithFormat:pFmt shareContext: pParams->pSharedCtx];
+ if (pCtx)
+ {
+ [pView setOpenGLContext:pCtx];
+ [pCtx setView:pView];
+#ifdef USE_NSOPENGLVIEW
+ Assert([pCtx view] == pView);
+#endif
+ }
+ }
+ if (pCtx)
+ {
+ /*
+ * Attach the view to the parent if we have one. Otherwise make sure its invisible.
+ */
+ if (pParams->pParentView)
+ [pParams->pParentView addSubview:pView];
+ else
+ [pView setHidden:YES];
+
+ /*
+ * Resize and return.
+ */
+ //[pView vboxSetSize:Frame.size];
+
+ NSOpenGLContext *pSavedCtx = [pView makeCurrentGLContext];
+
+ [pView prepareOpenGL];
+ GLint x;
+ //x = 0; [pCtx setValues:&x forParameter:NSOpenGLCPSwapInterval];
+ //x = 1; [pCtx setValues:&x forParameter:NSOpenGLCPSurfaceOrder];
+ x = 0; [pCtx setValues:&x forParameter:NSOpenGLCPSurfaceOpacity];
+
+ if (pParams->pParentView)
+ [pView setHidden:NO];
+ else
+ [pView setHidden:YES];
+
+ [pView restoreSavedGLContext:pSavedCtx];
+
+ pParams->pView = pView;
+ pParams->pCtx = pCtx;
+ [pCtx retain]; //??
+
+ [pFmt release];
+
+ LogFlow(("OvlView createViewAndContext: returns successfully\n"));
+ return;
+ }
+ [pView release];
+ }
+ [pFmt release];
+ }
+ else
+ AssertFailed();
+
+ LogFlow(("OvlView createViewAndContext: returns failure\n"));
+ return;
+}
+
+- (id)initWithFrameAndFormat:(NSRect) frame parentView:(NSView *)pParentView pixelFormat:(NSOpenGLPixelFormat *)pFmt
+{
+ LogFlow(("OvlView(%p) initWithFrameAndFormat:\n", (void *)self));
+
+ m_pParentView = pParentView;
+ /* Make some reasonable defaults */
+ m_Pos = NSZeroPoint;
+ m_Size = frame.size;
+ m_cClears = 2;
+ m_fUpdateCtx = true;
+
+#ifdef USE_NSOPENGLVIEW
+ self = [super initWithFrame:frame pixelFormat:pFmt];
+#else
+ RT_NOREF(pFmt);
+ m_cSetViewAttempts = 0;
+ m_pCtx = NULL;
+ self = [super initWithFrame:frame];
+#endif
+ if (self)
+ {
+ //self.autoresizingMask = NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin;
+ self.autoresizingMask = NSViewNotSizable;
+
+ /*
+ * Get notifications when we're moved or resized and when we're moved
+ * to a different screen or GPU or when the GL context simply needs updating.
+ */
+ if (pParentView)
+ {
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(vboxBoundsDidChange:)
+ name:NSViewBoundsDidChangeNotification
+ object:self];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(vboxFrameDidChange:)
+ name:NSViewFrameDidChangeNotification
+ object:self];
+ //[[NSNotificationCenter defaultCenter] addObserver:self
+ // selector:@selector(vboxFrameDidChange:)
+ // name:NSViewDidUpdateTrackingAreasNotification
+ // object:self];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(vboxFrameDidChangeGlobal:)
+ name:NSViewGlobalFrameDidChangeNotification
+ object:self];
+ }
+ }
+ LogFlow(("OvlView(%p) initWithFrameAndFormat: returns %p\n", (void *)self, (void *)self));
+ return self;
+}
+
+- (void)dealloc
+{
+ LogFlow(("OvlView(%p) dealloc:\n", (void *)self));
+
+#ifdef USE_NSOPENGLVIEW
+ [[self openGLContext] clearDrawable];
+#else
+ if (m_pCtx)
+ {
+ [m_pCtx clearDrawable];
+ [m_pCtx release];
+ m_pCtx = nil;
+ }
+#endif
+
+ [super dealloc];
+
+ LogFlow(("OvlView(%p) dealloc: returns\n", (void *)self));
+}
+
+
+- (void)vboxSetPos:(NSPoint)pos
+{
+ Log(("OvlView(%p) vboxSetPos: (%d,%d)\n", (void *)self, (int)pos.x, (int)pos.y));
+
+ m_Pos = pos;
+ [self vboxReshape];
+
+ LogFlow(("OvlView(%p) vboxSetPos: returns\n", (void *)self));
+}
+
+
+- (void)vboxSetSize:(NSSize)size
+{
+ Log(("OvlView(%p) vboxSetSize: (%d,%d):\n", (void *)self, (int)size.width, (int)size.height));
+ m_Size = size;
+ [self vboxReshape];
+ LogFlow(("OvlView(%p) vboxSetSize: returns\n", (void *)self));
+}
+
+- (void)vboxScheduleCtxUpdate
+{
+ m_fUpdateCtx = true;
+}
+
+- (void)vboxUpdateCtxIfNecessary
+{
+ if (m_fUpdateCtx)
+ {
+ Log(("OvlView(%p) vboxUpdateCtxIfNecessary: m_fUpdateCtx\n", (void *)self));
+ /* This must be done on the main thread or it will crash with an error. */
+ [[self openGLContext] performSelectorOnMainThread:@selector(update) withObject:nil waitUntilDone:YES];
+ m_fUpdateCtx = false;
+ }
+}
+
+
+- (void)vboxClearBackBufferIfNecessary
+{
+#if 1 /* experiment */
+ if (m_cClears > 0)
+ {
+ Assert(![NSThread isMainThread]);
+ Assert([self openGLContext] == [NSOpenGLContext currentContext]);
+ Log(("OvlView(%p) vboxClearBackBufferIfNecessary: m_cClears=%d\n", (void *)self, m_cClears));
+ m_cClears--;
+
+ /* Clear errors. */
+ GLenum rc;
+ while ((rc = glGetError()) != GL_NO_ERROR)
+ continue;
+
+ /* Save the old buffer setting and make it GL_BACK (shall be GL_BACK already actually). */
+ GLint iOldDrawBuf = GL_BACK;
+ glGetIntegerv(GL_DRAW_BUFFER, &iOldDrawBuf);
+ if (iOldDrawBuf != GL_BACK)
+ glDrawBuffer(GL_BACK);
+ while ((rc = glGetError()) != GL_NO_ERROR)
+ AssertMsgFailed(("rc=%x\n", rc));
+
+ /* Clear the current GL_BACK. */
+ glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT /*|GL_DEPTH_BUFFER_BIT*/ );
+ while ((rc = glGetError()) != GL_NO_ERROR)
+ AssertMsgFailed(("rc=%x\n", rc));
+
+ /* We're back to the orignal back buffer now. Just restore GL_DRAW_BUFFER. */
+ if (iOldDrawBuf != GL_BACK)
+ glDrawBuffer(iOldDrawBuf);
+
+ while ((rc = glGetError()) != GL_NO_ERROR)
+ AssertMsgFailed(("rc=%x\n", rc));
+ }
+#endif
+}
+
+
+
+- (void)vboxReshapePerform
+{
+ /*
+ * Change the size and position if necessary.
+ */
+ NSRect CurFrameRect = [self frame];
+ /** @todo conversions? */
+ if ( m_Pos.x != CurFrameRect.origin.x
+ || m_Pos.y != CurFrameRect.origin.y)
+ {
+ LogFlow(("OvlView(%p) vboxReshapePerform: moving (%d,%d) -> (%d,%d)\n",
+ (void *)self, CurFrameRect.origin.x, CurFrameRect.origin.y, m_Pos.x, m_Pos.y));
+ [self setFrameOrigin:m_Pos];
+ }
+
+ if ( CurFrameRect.size.width != m_Size.width
+ || CurFrameRect.size.height != m_Size.height)
+ {
+ LogFlow(("OvlView(%p) vboxReshapePerform: resizing (%d,%d) -> (%d,%d)\n",
+ (void *)self, CurFrameRect.size.width, CurFrameRect.size.height, m_Size.width, m_Size.height));
+ [self setFrameSize:m_Size];
+
+ /*
+ * Schedule two clears and a context update for now.
+ * Really though, we should just clear any new surface area.
+ */
+ m_cClears = 2;
+ }
+ m_fUpdateCtx = true;
+ LogFlow(("OvlView(%p) vboxReshapePerform: returns\n", self));
+}
+
+
+- (void)vboxReshape
+{
+ LogFlow(("OvlView(%p) vboxReshape:\n", (void *)self));
+
+ /*
+ * Resize the view.
+ */
+ if ([NSThread isMainThread])
+ [self vboxReshapePerform];
+ else
+ {
+ [self performSelectorOnMainThread:@selector(vboxReshapePerform) withObject:nil waitUntilDone:NO];
+ vmsvga3dCocoaServiceRunLoop();
+
+ /*
+ * Try update the opengl context.
+ */
+ [[self openGLContext] update];
+ }
+
+ LogFlow(("OvlView(%p) vboxReshape: returns\n", (void *)self));
+}
+
+/**
+ * This is called when the bounds change.
+ *
+ * We indicate that the FIFO thread must update the GL context.
+ */
+- (void)vboxBoundsDidChange:(NSNotification *)pNotification
+{
+ RT_NOREF(pNotification);
+ LogFlow(("OvlView(%p) vboxBoundsDidChange:\n", (void *)self));
+ self->m_fUpdateCtx = true;
+}
+
+/**
+ * This is called when the frame changes size or position.
+ *
+ * We indicate that the FIFO thread must update the GL context.
+ */
+- (void)vboxFrameDidChange:(NSNotification *)pNotification
+{
+ RT_NOREF(pNotification);
+ LogFlow(("OvlView(%p) vboxFrameDidChange:\n", (void *)self));
+ self->m_fUpdateCtx = true;
+}
+
+/**
+ * This is called when moved to different screen/GPU or/and when the GL context
+ * needs updating.
+ *
+ * We indicate that the FIFO thread must update the GL context.
+ */
+- (void)vboxFrameDidChangeGlobal:(NSNotification *)pNotification
+{
+ RT_NOREF(pNotification);
+ LogFlow(("OvlView(%p) vboxFrameDidChangeGlobal:\n", (void *)self));
+ self->m_fUpdateCtx = true;
+}
+
+/** This enables the vboxFrameDidChange notification. */
+- (BOOL)postsFrameChangedNotifications
+{
+ LogFlow(("OvlView(%p) postsFrameChangedNotifications:\n", (void *)self));
+ return YES;
+}
+
+/**
+ * Removes the view from the parent, if it has one, and makes sure it's hidden.
+ *
+ * This is callbed before destroying it.
+ */
+- (void)vboxRemoveFromSuperviewAndHide
+{
+ LogFlow(("OvlView(%p) vboxRemoveFromSuperviewAndHide:\n", (void *)self));
+ if (m_pParentView)
+ {
+ /*
+ * The removeFromSuperview has been frequently seen to deadlock thing like this:
+ * #0 0x00007fff8db440fa in __psynch_cvwait ()
+ * #1 0x00007fff8d0acfb9 in _pthread_cond_wait ()
+ * #2 0x00007fff8a1bc8f0 in -[NSViewHierarchyLock _lockForWriting:handler:] ()
+ * #3 0x00007fff8a1bc171 in -[NSView removeFromSuperview] ()
+ * #4 0x000000010cffb2bb in -[VMSVGA3DOverlayView vboxRemoveFromSuperviewAndHide] (self=0x10a1da550, _cmd=0x10cffd734) at DevVGA-SVGA3d-cocoa.m:467
+ * #5 0x000000010cffbed3 in vmsvga3dCocoaDestroyViewAndContext (pView=0x10a1da550, pCtx=0x10a1da630) at DevVGA-SVGA3d-cocoa.m:662
+ * (This is from OS X 10.8.5.)
+ */
+ if ([NSThread isMainThread])
+ {
+ LogFlow(("OvlView(%p) vboxRemoveFromSuperviewAndHide: calling removeFromSuperview\n", (void *)self));
+ [self removeFromSuperview];
+ LogFlow(("OvlView(%p) vboxRemoveFromSuperviewAndHide: calling setHidden\n", (void *)self));
+ [self setHidden:YES];
+ LogFlow(("OvlView(%p) vboxRemoveFromSuperviewAndHide: calling setHidden\n", (void *)self));
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ }
+ else
+ {
+ LogFlow(("OvlView(%p) vboxRemoveFromSuperviewAndHide: defering to main thread\n", (void *)self));
+ vmsvga3dCocoaServiceRunLoop();
+ [self performSelectorOnMainThread:@selector(vboxRemoveFromSuperviewAndHide) withObject:nil waitUntilDone:YES];
+ vmsvga3dCocoaServiceRunLoop();
+ LogFlow(("OvlView(%p) vboxRemoveFromSuperviewAndHide: main thread done\n", (void *)self));
+ }
+ }
+}
+
+
+/**
+ * Changes to the OpenGL context associated with the view.
+ * @returns Previous OpenGL context.
+ */
+- (NSOpenGLContext *)makeCurrentGLContext
+{
+ NSOpenGLContext *pSavedCtx = [NSOpenGLContext currentContext];
+
+ /* Always flush before changing. glXMakeCurrent and wglMakeCurrent does this
+ implicitly, seemingly NSOpenGLContext::makeCurrentContext doesn't. */
+ if (pSavedCtx != nil)
+ glFlush();
+
+ [[self openGLContext] makeCurrentContext];
+ return pSavedCtx;
+}
+
+
+/**
+ * Restores the previous OpenGL context after
+ * makeCurrentGLContext.
+ *
+ * @param pSavedCtx The makeCurrentGLContext return value.
+ */
+- (void)restoreSavedGLContext:(NSOpenGLContext *)pSavedCtx
+{
+ /* Always flush before changing. glXMakeCurrent and wglMakeCurrent does this
+ implicitly, seemingly NSOpenGLContext::makeCurrentContext doesn't. */
+ glFlush();
+
+ if (pSavedCtx)
+ [pSavedCtx makeCurrentContext];
+ else
+ [NSOpenGLContext clearCurrentContext];
+}
+
+#ifndef USE_NSOPENGLVIEW
+/*
+ * Faking NSOpenGLView interface.
+ */
+- (void)setOpenGLContext:(NSOpenGLContext *)pCtx
+{
+ if (pCtx != m_pCtx)
+ {
+ if (pCtx)
+ {
+ [pCtx retain];
+ [pCtx setView:self];
+ /*Assert([pCtx view] == self); - setView fails early on, works later... */
+ }
+
+ if (m_pCtx)
+ [m_pCtx release];
+
+ m_pCtx = pCtx;
+
+ if (pCtx)
+ [pCtx update];
+ }
+}
+
+- (NSOpenGLContext *)openGLContext
+{
+ /* Stupid hacks to work around setView failing early. This can get kind of
+ noisy on some OS versions, so shut it up a little bit. */
+ /** @todo use NSOpenGLView for the non-visible contexts. */
+ if (m_pCtx && [m_pCtx view] != self)
+ {
+ m_cSetViewAttempts++;
+ if ( m_pParentView
+ || m_cSetViewAttempts < 64
+ || (m_cSetViewAttempts & (m_cSetViewAttempts < _64K ? 0xfff : 0x7fff)) == 0 )
+ [m_pCtx setView:self];
+ }
+ return m_pCtx;
+}
+
+- (void)prepareOpenGL
+{
+ //[m_pCtx prepareOpenGL];
+}
+#endif /* USE_NSOPENGLVIEW */
+
+/*
+ * Overridden NSOpenGLView / NSView methods:
+ */
+
+/** @todo do we need this? */
+-(void)viewDidMoveToWindow
+{
+ LogFlow(("OvlView(%p) viewDidMoveToWindow: new win: %p\n", (void *)self, (void *)[self window]));
+ [super viewDidMoveToWindow];
+ [self vboxReshape];
+}
+
+-(void)viewDidMoveToSuperview
+{
+ LogFlow(("OvlView(%p) viewDidMoveToSuperview: new view: %p\n", (void *)self, (void *)[self superview]));
+ [super viewDidMoveToSuperview];
+ [self vboxReshape];
+}
+
+-(void)resizeWithOldSuperviewSize:(NSSize)oldBoundsSize
+{
+ LogFlow(("OvlView(%p) resizeWithOldSuperviewSize: %d,%d -> %d,%d\n", (void *)self,
+ (int)oldBoundsSize.width, (int)oldBoundsSize.height, (int)[self bounds].size.width, (int)[self bounds].size.height));
+ [super resizeWithOldSuperviewSize:oldBoundsSize];
+ [self vboxReshape];
+}
+
+- (void)drawRect:(NSRect)rect
+{
+ RT_NOREF(rect);
+// if (m_fClear)
+// {
+// m_fClear = false;
+// [self vboxClearBuffers];
+// }
+}
+
+@end /* VMSVGA3DOverlayView */
+
+@implementation VMSVGA3DCreateViewAndContext
+@end
+
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaServiceRunLoop(void)
+{
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ NSRunLoop *pRunLoop = [NSRunLoop currentRunLoop];
+
+ if ([NSRunLoop mainRunLoop] != pRunLoop)
+ {
+ [pRunLoop runUntilDate:[NSDate distantPast]];
+ }
+
+ [pPool release];
+}
+
+
+/**
+ * Document me later.
+ *
+ * @param ppView
+ * @param ppCtx
+ * @param pParentView The parent view if this is a context we'll be
+ * presenting to.
+ * @param cx
+ * @param cy
+ * @param pSharedCtx
+ * @param fOtherProfile
+ */
+VMSVGA3DCOCOA_DECL(bool) vmsvga3dCocoaCreateViewAndContext(NativeNSViewRef *ppView, NativeNSOpenGLContextRef *ppCtx,
+ NativeNSViewRef pParentView, uint32_t cx, uint32_t cy,
+ NativeNSOpenGLContextRef pSharedCtx, bool fOtherProfile)
+{
+ LogFlow(("vmsvga3dCocoaCreateViewAndContext: pParentView=%d size=%d,%d pSharedCtx=%p fOtherProfile=%RTbool\n",
+ (void *)pParentView, cx, cy, (void *)pSharedCtx, fOtherProfile));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ vmsvga3dCocoaServiceRunLoop();
+
+
+ VMSVGA3DCreateViewAndContext *pParams = [VMSVGA3DCreateViewAndContext alloc];
+ pParams->pParentView = pParentView;
+ pParams->cx = cx;
+ pParams->cy = cy;
+ pParams->pSharedCtx = pSharedCtx;
+ pParams->fOtherProfile = fOtherProfile;
+ pParams->pView = NULL;
+ pParams->pCtx = NULL;
+
+ [VMSVGA3DOverlayView performSelectorOnMainThread:@selector(createViewAndContext:)
+ withObject:pParams
+ waitUntilDone:YES];
+
+ vmsvga3dCocoaServiceRunLoop();
+
+ *ppCtx = pParams->pCtx;
+ *ppView = pParams->pView;
+ bool fRet = *ppCtx != NULL && *ppView != NULL;
+
+ [pParams release];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaDestroyContext: returns %RTbool\n", fRet));
+ return fRet;
+}
+
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaDestroyViewAndContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+ LogFlow(("vmsvga3dCocoaDestroyViewAndContext: pView=%p pCtx=%p\n", (void *)pView, (void *)pCtx));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+ /* The view */
+ VMSVGA3DOverlayView *pOvlView = (VMSVGA3DOverlayView *)pView;
+ [pOvlView vboxRemoveFromSuperviewAndHide];
+
+ Log(("vmsvga3dCocoaDestroyViewAndContext: view %p ref count=%d\n", (void *)pOvlView, [pOvlView retainCount]));
+ [pOvlView release];
+
+ /* The OpenGL context. */
+ Log(("vmsvga3dCocoaDestroyViewAndContext: ctx %p ref count=%d\n", (void *)pCtx, [pCtx retainCount]));
+ [pCtx release];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaDestroyViewAndContext: returns\n"));
+}
+
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewInfo(PCDBGFINFOHLP pHlp, NativeNSViewRef pView)
+{
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ if (pView != nil)
+ {
+ VMSVGA3DOverlayView *pOvlView = (VMSVGA3DOverlayView *)pView;
+
+ NSRect FrameRect = [pOvlView frame];
+ pHlp->pfnPrintf(pHlp, " Frame rect: x=" FLOAT_FMT_STR ", y=" FLOAT_FMT_STR " cx=" FLOAT_FMT_STR ", cy=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(FrameRect.origin.x), FLOAT_FMT_ARGS(FrameRect.origin.y),
+ FLOAT_FMT_ARGS(FrameRect.size.width), FLOAT_FMT_ARGS(FrameRect.size.height));
+ NSRect BoundsRect = [pOvlView bounds];
+ pHlp->pfnPrintf(pHlp, " Bounds rect: x=" FLOAT_FMT_STR ", y=" FLOAT_FMT_STR " cx=" FLOAT_FMT_STR ", cy=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(BoundsRect.origin.x), FLOAT_FMT_ARGS(BoundsRect.origin.y),
+ FLOAT_FMT_ARGS(BoundsRect.size.width), FLOAT_FMT_ARGS(BoundsRect.size.height));
+ NSRect VisibleRect = [pOvlView visibleRect];
+ pHlp->pfnPrintf(pHlp, " Visible rect: x=" FLOAT_FMT_STR ", y=" FLOAT_FMT_STR " cx=" FLOAT_FMT_STR ", cy=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(VisibleRect.origin.x), FLOAT_FMT_ARGS(VisibleRect.origin.y),
+ FLOAT_FMT_ARGS(VisibleRect.size.width), FLOAT_FMT_ARGS(VisibleRect.size.height));
+ pHlp->pfnPrintf(pHlp, " isHidden: %RTbool\n", [pOvlView isHidden] != NO);
+ pHlp->pfnPrintf(pHlp, " canDraw: %RTbool\n", [pOvlView canDraw] != NO);
+ pHlp->pfnPrintf(pHlp, " wantsDefaultClipping: %RTbool\n", [pOvlView wantsDefaultClipping] != NO);
+ pHlp->pfnPrintf(pHlp, " wantsLayer: %RTbool\n", [pOvlView wantsLayer] != NO);
+ if ([pOvlView layer] != nil)
+ pHlp->pfnPrintf(pHlp, " Layer: %p\n", [pOvlView layer] != nil);
+ pHlp->pfnPrintf(pHlp, " isOpaque: %RTbool\n", [pOvlView isOpaque] != NO);
+ pHlp->pfnPrintf(pHlp, " autoresizingMask: %#x\n", [pOvlView autoresizingMask]);
+ pHlp->pfnPrintf(pHlp, " isRotatedOrScaledFromBase: %RTbool\n", [pOvlView isRotatedOrScaledFromBase] != NO);
+
+ NSView *pEnclosingScrollView = [pOvlView enclosingScrollView];
+ NSView *pCurView = [pOvlView superview];
+ uint32_t iLevel;
+ for (iLevel = 1; pCurView && iLevel < 7; iLevel++)
+ {
+ NSView *pNextView = [pCurView superview];
+ pHlp->pfnPrintf(pHlp, " Superview#%u: %p, super=%p\n", iLevel, pCurView, pNextView);
+ FrameRect = [pCurView frame];
+ pHlp->pfnPrintf(pHlp, " Superview#%u frame: x=" FLOAT_FMT_STR ", y=" FLOAT_FMT_STR " cx=" FLOAT_FMT_STR ", cy=" FLOAT_FMT_STR "\n",
+ iLevel,
+ FLOAT_FMT_ARGS(FrameRect.origin.x), FLOAT_FMT_ARGS(FrameRect.origin.y),
+ FLOAT_FMT_ARGS(FrameRect.size.width), FLOAT_FMT_ARGS(FrameRect.size.height));
+ BoundsRect = [pCurView bounds];
+ pHlp->pfnPrintf(pHlp, " Superview#%u bounds: x=" FLOAT_FMT_STR ", y=" FLOAT_FMT_STR " cx=" FLOAT_FMT_STR ", cy=" FLOAT_FMT_STR "\n",
+ iLevel,
+ FLOAT_FMT_ARGS(BoundsRect.origin.x), FLOAT_FMT_ARGS(BoundsRect.origin.y),
+ FLOAT_FMT_ARGS(BoundsRect.size.width), FLOAT_FMT_ARGS(BoundsRect.size.height));
+ if (pEnclosingScrollView == pCurView)
+ pHlp->pfnPrintf(pHlp, " Superview#%u is enclosing scroll view\n", iLevel);
+ if ([pCurView enclosingScrollView])
+ pHlp->pfnPrintf(pHlp, " Superview#%u has an enclosing scroll view: %p\n", [pCurView enclosingScrollView]);
+ pCurView = pNextView;
+ }
+ if (pCurView)
+ pHlp->pfnPrintf(pHlp, " (There are more super views)\n");
+
+ NSWindow *pWindow = [pOvlView window];
+ if (pWindow != nil)
+ {
+ pHlp->pfnPrintf(pHlp, " Window: %p\n", pWindow);
+ FrameRect = [pWindow frame];
+ pHlp->pfnPrintf(pHlp, " Window frame: x=" FLOAT_FMT_STR ", y=" FLOAT_FMT_STR " cx=" FLOAT_FMT_STR ", cy=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(FrameRect.origin.x), FLOAT_FMT_ARGS(FrameRect.origin.y),
+ FLOAT_FMT_ARGS(FrameRect.size.width), FLOAT_FMT_ARGS(FrameRect.size.height));
+ CGFloat rFactor = [pWindow backingScaleFactor];
+ pHlp->pfnPrintf(pHlp, " W.backingScaleFactor: " FLOAT_FMT_STR "\n", FLOAT_FMT_ARGS(rFactor));
+ }
+
+ }
+ [pPool release];
+}
+
+
+/** @note Not currently used. */
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewSetPosition(NativeNSViewRef pView, NativeNSViewRef pParentView, int x, int y)
+{
+ RT_NOREF(pParentView);
+ LogFlow(("vmsvga3dCocoaViewSetPosition: pView=%p pParentView=%p (%d,%d)\n", (void *)pView, (void *)pParentView, x, y));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+
+ [(VMSVGA3DOverlayView *)pView vboxSetPos:NSMakePoint(x, y)];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaViewSetPosition: returns\n"));
+}
+
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewUpdateViewport(NativeNSViewRef pView)
+{
+ LogFlow(("vmsvga3dCocoaViewSetSize: pView=%p\n", (void *)pView));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ VMSVGA3DOverlayView *pOverlayView = (VMSVGA3DOverlayView *)pView;
+
+ /* Possible that we don't actually need to do this (i.e. this API), but right now I'm
+ leaving it to be sure things actually work right when scrolling. */
+ [pOverlayView vboxScheduleCtxUpdate];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaViewSetSize: returns\n"));
+}
+
+
+VMSVGA3DCOCOA_DECL(void) vmsvga3dCocoaViewSetSize(NativeNSViewRef pView, int cx, int cy)
+{
+ LogFlow(("vmsvga3dCocoaViewSetSize: pView=%p (%d,%d)\n", (void *)pView, cx, cy));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ VMSVGA3DOverlayView *pOverlayView = (VMSVGA3DOverlayView *)pView;
+
+ [pOverlayView vboxSetSize:NSMakeSize(cx, cy)];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaViewSetSize: returns\n"));
+}
+
+
+void vmsvga3dCocoaViewMakeCurrentContext(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+ LogFlow(("vmsvga3dCocoaViewMakeCurrentContext: pView=%p, pCtx=%p\n", (void*)pView, (void*)pCtx));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ VMSVGA3DOverlayView *pOverlayView = (VMSVGA3DOverlayView *)pView;
+
+ /* Always flush before flush. glXMakeCurrent and wglMakeCurrent does this
+ implicitly, seemingly NSOpenGLContext::makeCurrentContext doesn't. */
+ if ([NSOpenGLContext currentContext] != 0)
+ glFlush();
+
+ if (pOverlayView)
+ {
+ /* This must be a release assertion as we depend on the setView
+ sideeffect of the openGLContext method call. (hack alert!) */
+ AssertRelease([pOverlayView openGLContext] == pCtx);
+ [pCtx makeCurrentContext];
+ [pOverlayView vboxUpdateCtxIfNecessary];
+ }
+ else
+ [NSOpenGLContext clearCurrentContext];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaViewMakeCurrentContext: returns\n"));
+}
+
+
+void vmsvga3dCocoaSwapBuffers(NativeNSViewRef pView, NativeNSOpenGLContextRef pCtx)
+{
+ LogFlow(("vmsvga3dCocoaSwapBuffers: pView=%p, pCtx=%p\n", (void*)pView, (void*)pCtx));
+ NSAutoreleasePool *pPool = [[NSAutoreleasePool alloc] init];
+ VMSVGA3DOverlayView *pMyView = (VMSVGA3DOverlayView *)pView;
+
+#ifndef USE_NSOPENGLVIEW
+ /* Hack alert! setView fails early on so call openGLContext to try again. */
+ if ([pCtx view] == NULL)
+ [pMyView openGLContext];
+#endif
+
+ Assert(pCtx == [NSOpenGLContext currentContext]);
+ Assert(pCtx == [pMyView openGLContext]);
+ AssertMsg([pCtx view] == pMyView, ("%p != %p\n", (void *)[pCtx view], (void *)pMyView));
+
+ [pCtx flushBuffer];
+ //[pView setNeedsDisplay:YES];
+ vmsvga3dCocoaServiceRunLoop();
+
+ /* If buffer clearing or/and context updates are pending, execute that now. */
+ [pMyView vboxUpdateCtxIfNecessary];
+ [pMyView vboxClearBackBufferIfNecessary];
+
+ [pPool release];
+ LogFlow(("vmsvga3dCocoaSwapBuffers: returns\n"));
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-dx11.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-dx11.cpp
new file mode 100644
index 00000000..0ddc7596
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-dx11.cpp
@@ -0,0 +1,9902 @@
+/* $Id: DevVGA-SVGA3d-dx-dx11.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2020-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/AssertGuest.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/vmm/pgm.h>
+
+#include <iprt/assert.h>
+#include <iprt/avl.h>
+#include <iprt/errcore.h>
+#include <iprt/mem.h>
+
+#include <VBoxVideo.h> /* required by DevVGA.h */
+#include <VBoxVideo3D.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "DevVGA-SVGA3d-internal.h"
+#include "DevVGA-SVGA3d-dx-shader.h"
+
+/* d3d11_1.h has a structure field named 'Status' but Status is defined as int on Linux host */
+#if defined(Status)
+#undef Status
+#endif
+#include <d3d11_1.h>
+
+
+#ifdef RT_OS_WINDOWS
+# define VBOX_D3D11_LIBRARY_NAME "d3d11"
+#else
+# define VBOX_D3D11_LIBRARY_NAME "VBoxDxVk"
+#endif
+
+#define DX_FORCE_SINGLE_DEVICE
+
+/* This is not available on non Windows hosts. */
+#ifndef D3D_RELEASE
+# define D3D_RELEASE(a_Ptr) do { if ((a_Ptr)) (a_Ptr)->Release(); (a_Ptr) = NULL; } while (0)
+#endif
+
+/** Fake ID for the backend DX context. The context creates all shared textures. */
+#define DX_CID_BACKEND UINT32_C(0xfffffffe)
+
+#define D3D_RELEASE_ARRAY(a_Count, a_papArray) do { \
+ for (uint32_t i = 0; i < (a_Count); ++i) \
+ D3D_RELEASE((a_papArray)[i]); \
+} while (0)
+
+typedef struct D3D11BLITTER
+{
+ ID3D11Device *pDevice;
+ ID3D11DeviceContext *pImmediateContext;
+
+ ID3D11VertexShader *pVertexShader;
+ ID3D11PixelShader *pPixelShader;
+ ID3D11SamplerState *pSamplerState;
+ ID3D11RasterizerState *pRasterizerState;
+ ID3D11BlendState *pBlendState;
+} D3D11BLITTER;
+
+typedef struct DXDEVICE
+{
+ ID3D11Device1 *pDevice; /* Device. */
+ ID3D11DeviceContext1 *pImmediateContext; /* Corresponding context. */
+ IDXGIFactory *pDxgiFactory; /* DXGI Factory. */
+ D3D_FEATURE_LEVEL FeatureLevel;
+
+ /* Staging buffer for transfer to surface buffers. */
+ ID3D11Buffer *pStagingBuffer; /* The staging buffer resource. */
+ uint32_t cbStagingBuffer; /* Current size of the staging buffer resource. */
+
+ D3D11BLITTER Blitter; /* Blits one texture to another. */
+} DXDEVICE;
+
+/* Kind of a texture view. */
+typedef enum VMSVGA3DBACKVIEWTYPE
+{
+ VMSVGA3D_VIEWTYPE_NONE = 0,
+ VMSVGA3D_VIEWTYPE_RENDERTARGET = 1,
+ VMSVGA3D_VIEWTYPE_DEPTHSTENCIL = 2,
+ VMSVGA3D_VIEWTYPE_SHADERRESOURCE = 3,
+ VMSVGA3D_VIEWTYPE_UNORDEREDACCESS = 4
+} VMSVGA3DBACKVIEWTYPE;
+
+/* Information about a texture view to track all created views:.
+ * when a surface is invalidated, then all views must deleted;
+ * when a view is deleted, then the view must be unlinked from the surface.
+ */
+typedef struct DXVIEWINFO
+{
+ uint32_t sid; /* Surface which the view was created for. */
+ uint32_t cid; /* DX context which created the view. */
+ uint32_t viewId; /* View id assigned by the guest. */
+ VMSVGA3DBACKVIEWTYPE enmViewType;
+} DXVIEWINFO;
+
+/* Context Object Table element for a texture view. */
+typedef struct DXVIEW
+{
+ uint32_t cid; /* DX context which created the view. */
+ uint32_t sid; /* Surface which the view was created for. */
+ uint32_t viewId; /* View id assigned by the guest. */
+ VMSVGA3DBACKVIEWTYPE enmViewType;
+
+ union
+ {
+ ID3D11View *pView; /* The view object. */
+ ID3D11RenderTargetView *pRenderTargetView;
+ ID3D11DepthStencilView *pDepthStencilView;
+ ID3D11ShaderResourceView *pShaderResourceView;
+ ID3D11UnorderedAccessView *pUnorderedAccessView;
+ } u;
+
+ RTLISTNODE nodeSurfaceView; /* Views are linked to the surface. */
+} DXVIEW;
+
+/* What kind of resource has been created for the VMSVGA3D surface. */
+typedef enum VMSVGA3DBACKRESTYPE
+{
+ VMSVGA3D_RESTYPE_NONE = 0,
+ VMSVGA3D_RESTYPE_SCREEN_TARGET = 1,
+ VMSVGA3D_RESTYPE_TEXTURE_1D = 2,
+ VMSVGA3D_RESTYPE_TEXTURE_2D = 3,
+ VMSVGA3D_RESTYPE_TEXTURE_CUBE = 4,
+ VMSVGA3D_RESTYPE_TEXTURE_3D = 5,
+ VMSVGA3D_RESTYPE_BUFFER = 6,
+} VMSVGA3DBACKRESTYPE;
+
+typedef struct VMSVGA3DBACKENDSURFACE
+{
+ VMSVGA3DBACKRESTYPE enmResType;
+ DXGI_FORMAT enmDxgiFormat;
+ union
+ {
+ ID3D11Resource *pResource;
+ ID3D11Texture1D *pTexture1D;
+ ID3D11Texture2D *pTexture2D;
+ ID3D11Texture3D *pTexture3D;
+ ID3D11Buffer *pBuffer;
+ } u;
+
+ /* For updates from memory. */
+ union /** @todo One per format. */
+ {
+ ID3D11Resource *pResource;
+ ID3D11Texture1D *pTexture1D;
+ ID3D11Texture2D *pTexture2D;
+ ID3D11Texture3D *pTexture3D;
+ } dynamic;
+
+ /* For reading the texture content. */
+ union /** @todo One per format. */
+ {
+ ID3D11Resource *pResource;
+ ID3D11Texture1D *pTexture1D;
+ ID3D11Texture2D *pTexture2D;
+ ID3D11Texture3D *pTexture3D;
+ } staging;
+
+ /* Screen targets are created as shared surfaces. */
+ HANDLE SharedHandle; /* The shared handle of this structure. */
+
+ /* DX context which last rendered to the texture.
+ * This is only for render targets and screen targets, which can be shared between contexts.
+ * The backend context (cid == DX_CID_BACKEND) can also be a drawing context.
+ */
+ uint32_t cidDrawing;
+
+ /** AVL tree containing DXSHAREDTEXTURE structures. */
+ AVLU32TREE SharedTextureTree;
+
+ /* Render target views, depth stencil views and shader resource views created for this texture or buffer. */
+ RTLISTANCHOR listView; /* DXVIEW */
+
+} VMSVGA3DBACKENDSURFACE;
+
+/* "The only resources that can be shared are 2D non-mipmapped textures." */
+typedef struct DXSHAREDTEXTURE
+{
+ AVLU32NODECORE Core; /* Key is context id which opened this texture. */
+ ID3D11Texture2D *pTexture; /* The opened shared texture. */
+ uint32_t sid; /* Surface id. */
+} DXSHAREDTEXTURE;
+
+
+typedef struct VMSVGAHWSCREEN
+{
+ ID3D11Texture2D *pTexture; /* Shared texture for the screen content. Only used as CopyResource target. */
+ IDXGIResource *pDxgiResource; /* Interface of the texture. */
+ IDXGIKeyedMutex *pDXGIKeyedMutex; /* Synchronization interface for the render device. */
+ HANDLE SharedHandle; /* The shared handle of this structure. */
+ uint32_t sidScreenTarget; /* The source surface for this screen. */
+} VMSVGAHWSCREEN;
+
+
+typedef struct DXELEMENTLAYOUT
+{
+ ID3D11InputLayout *pElementLayout;
+ uint32_t cElementDesc;
+ D3D11_INPUT_ELEMENT_DESC aElementDesc[32];
+} DXELEMENTLAYOUT;
+
+typedef struct DXSHADER
+{
+ SVGA3dShaderType enmShaderType;
+ union
+ {
+ ID3D11DeviceChild *pShader; /* All. */
+ ID3D11VertexShader *pVertexShader; /* SVGA3D_SHADERTYPE_VS */
+ ID3D11PixelShader *pPixelShader; /* SVGA3D_SHADERTYPE_PS */
+ ID3D11GeometryShader *pGeometryShader; /* SVGA3D_SHADERTYPE_GS */
+ ID3D11HullShader *pHullShader; /* SVGA3D_SHADERTYPE_HS */
+ ID3D11DomainShader *pDomainShader; /* SVGA3D_SHADERTYPE_DS */
+ ID3D11ComputeShader *pComputeShader; /* SVGA3D_SHADERTYPE_CS */
+ };
+ void *pvDXBC;
+ uint32_t cbDXBC;
+
+ uint32_t soid; /* Stream output declarations for geometry shaders. */
+
+ DXShaderInfo shaderInfo;
+} DXSHADER;
+
+typedef struct DXQUERY
+{
+ union
+ {
+ ID3D11Query *pQuery;
+ ID3D11Predicate *pPredicate;
+ };
+} DXQUERY;
+
+typedef struct DXSTREAMOUTPUT
+{
+ UINT cDeclarationEntry;
+ D3D11_SO_DECLARATION_ENTRY aDeclarationEntry[SVGA3D_MAX_STREAMOUT_DECLS];
+} DXSTREAMOUTPUT;
+
+typedef struct DXBOUNDVERTEXBUFFER
+{
+ ID3D11Buffer *pBuffer;
+ uint32_t stride;
+ uint32_t offset;
+} DXBOUNDVERTEXBUFFER;
+
+typedef struct DXBOUNDINDEXBUFFER
+{
+ ID3D11Buffer *pBuffer;
+ DXGI_FORMAT indexBufferFormat;
+ uint32_t indexBufferOffset;
+} DXBOUNDINDEXBUFFER;
+
+typedef struct DXBOUNDRESOURCES /* Currently bound resources. Mirror SVGADXContextMobFormat structure. */
+{
+ struct
+ {
+ DXBOUNDVERTEXBUFFER vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
+ DXBOUNDINDEXBUFFER indexBuffer;
+ } inputAssembly;
+ struct
+ {
+ ID3D11Buffer *constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
+ } shaderState[SVGA3D_NUM_SHADERTYPE];
+} DXBOUNDRESOURCES;
+
+
+typedef struct VMSVGA3DBACKENDDXCONTEXT
+{
+ DXDEVICE dxDevice; /* DX device interfaces for this context operations. */
+
+ /* Arrays for Context-Object Tables. Number of entries depends on COTable size. */
+ uint32_t cBlendState; /* Number of entries in the papBlendState array. */
+ uint32_t cDepthStencilState; /* papDepthStencilState */
+ uint32_t cSamplerState; /* papSamplerState */
+ uint32_t cRasterizerState; /* papRasterizerState */
+ uint32_t cElementLayout; /* paElementLayout */
+ uint32_t cRenderTargetView; /* paRenderTargetView */
+ uint32_t cDepthStencilView; /* paDepthStencilView */
+ uint32_t cShaderResourceView; /* paShaderResourceView */
+ uint32_t cQuery; /* paQuery */
+ uint32_t cShader; /* paShader */
+ uint32_t cStreamOutput; /* paStreamOutput */
+ uint32_t cUnorderedAccessView; /* paUnorderedAccessView */
+ ID3D11BlendState **papBlendState;
+ ID3D11DepthStencilState **papDepthStencilState;
+ ID3D11SamplerState **papSamplerState;
+ ID3D11RasterizerState **papRasterizerState;
+ DXELEMENTLAYOUT *paElementLayout;
+ DXVIEW *paRenderTargetView;
+ DXVIEW *paDepthStencilView;
+ DXVIEW *paShaderResourceView;
+ DXQUERY *paQuery;
+ DXSHADER *paShader;
+ DXSTREAMOUTPUT *paStreamOutput;
+ DXVIEW *paUnorderedAccessView;
+
+ uint32_t cSOTarget; /* How many SO targets are currently set (SetSOTargets) */
+
+ DXBOUNDRESOURCES resources;
+} VMSVGA3DBACKENDDXCONTEXT;
+
+/* Shader disassembler function. Optional. */
+typedef HRESULT FN_D3D_DISASSEMBLE(LPCVOID pSrcData, SIZE_T SrcDataSize, UINT Flags, LPCSTR szComments, ID3D10Blob **ppDisassembly);
+typedef FN_D3D_DISASSEMBLE *PFN_D3D_DISASSEMBLE;
+
+typedef struct VMSVGA3DBACKEND
+{
+ RTLDRMOD hD3D11;
+ PFN_D3D11_CREATE_DEVICE pfnD3D11CreateDevice;
+
+ RTLDRMOD hD3DCompiler;
+ PFN_D3D_DISASSEMBLE pfnD3DDisassemble;
+
+ DXDEVICE dxDevice; /* Device for the VMSVGA3D context independent operation. */
+
+ DXBOUNDRESOURCES resources; /* What is currently applied to the pipeline. */
+
+ bool fSingleDevice; /* Whether to use one DX device for all guest contexts. */
+
+ /** @todo Here a set of functions which do different job in single and multiple device modes. */
+} VMSVGA3DBACKEND;
+
+
+/* Static function prototypes. */
+static int dxDeviceFlush(DXDEVICE *pDevice);
+static int dxDefineShaderResourceView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId, SVGACOTableDXSRViewEntry const *pEntry);
+static int dxDefineUnorderedAccessView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry);
+static int dxDefineRenderTargetView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGACOTableDXRTViewEntry const *pEntry);
+static int dxDefineDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, SVGACOTableDXDSViewEntry const *pEntry);
+static int dxSetRenderTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext);
+static int dxSetCSUnorderedAccessViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext);
+static DECLCALLBACK(void) vmsvga3dBackSurfaceDestroy(PVGASTATECC pThisCC, bool fClearCOTableEntry, PVMSVGA3DSURFACE pSurface);
+static int dxDestroyShader(DXSHADER *pDXShader);
+static int dxDestroyQuery(DXQUERY *pDXQuery);
+
+static HRESULT BlitInit(D3D11BLITTER *pBlitter, ID3D11Device *pDevice, ID3D11DeviceContext *pImmediateContext);
+static void BlitRelease(D3D11BLITTER *pBlitter);
+
+
+/* This is not available with the DXVK headers for some reason. */
+#ifndef RT_OS_WINDOWS
+typedef enum D3D11_TEXTURECUBE_FACE {
+ D3D11_TEXTURECUBE_FACE_POSITIVE_X,
+ D3D11_TEXTURECUBE_FACE_NEGATIVE_X,
+ D3D11_TEXTURECUBE_FACE_POSITIVE_Y,
+ D3D11_TEXTURECUBE_FACE_NEGATIVE_Y,
+ D3D11_TEXTURECUBE_FACE_POSITIVE_Z,
+ D3D11_TEXTURECUBE_FACE_NEGATIVE_Z
+} D3D11_TEXTURECUBE_FACE;
+#endif
+
+
+DECLINLINE(D3D11_TEXTURECUBE_FACE) vmsvga3dCubemapFaceFromIndex(uint32_t iFace)
+{
+ D3D11_TEXTURECUBE_FACE Face;
+ switch (iFace)
+ {
+ case 0: Face = D3D11_TEXTURECUBE_FACE_POSITIVE_X; break;
+ case 1: Face = D3D11_TEXTURECUBE_FACE_NEGATIVE_X; break;
+ case 2: Face = D3D11_TEXTURECUBE_FACE_POSITIVE_Y; break;
+ case 3: Face = D3D11_TEXTURECUBE_FACE_NEGATIVE_Y; break;
+ case 4: Face = D3D11_TEXTURECUBE_FACE_POSITIVE_Z; break;
+ default:
+ case 5: Face = D3D11_TEXTURECUBE_FACE_NEGATIVE_Z; break;
+ }
+ return Face;
+}
+
+/* This is to workaround issues with X8 formats, because they can't be used in some operations. */
+#define DX_REPLACE_X8_WITH_A8
+static DXGI_FORMAT vmsvgaDXSurfaceFormat2Dxgi(SVGA3dSurfaceFormat format)
+{
+ /* Ensure that correct headers are used.
+ * SVGA3D_AYUV was equal to 45, then replaced with SVGA3D_FORMAT_DEAD2 = 45, and redefined as SVGA3D_AYUV = 152.
+ */
+ AssertCompile(SVGA3D_AYUV == 152);
+
+#define DXGI_FORMAT_ DXGI_FORMAT_UNKNOWN
+ /** @todo More formats. */
+ switch (format)
+ {
+#ifdef DX_REPLACE_X8_WITH_A8
+ case SVGA3D_X8R8G8B8: return DXGI_FORMAT_B8G8R8A8_UNORM;
+#else
+ case SVGA3D_X8R8G8B8: return DXGI_FORMAT_B8G8R8X8_UNORM;
+#endif
+ case SVGA3D_A8R8G8B8: return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case SVGA3D_R5G6B5: return DXGI_FORMAT_B5G6R5_UNORM;
+ case SVGA3D_X1R5G5B5: return DXGI_FORMAT_B5G5R5A1_UNORM;
+ case SVGA3D_A1R5G5B5: return DXGI_FORMAT_B5G5R5A1_UNORM;
+ case SVGA3D_A4R4G4B4: break; // 11.1 return DXGI_FORMAT_B4G4R4A4_UNORM;
+ case SVGA3D_Z_D32: break;
+ case SVGA3D_Z_D16: return DXGI_FORMAT_D16_UNORM;
+ case SVGA3D_Z_D24S8: return DXGI_FORMAT_D24_UNORM_S8_UINT;
+ case SVGA3D_Z_D15S1: break;
+ case SVGA3D_LUMINANCE8: return DXGI_FORMAT_;
+ case SVGA3D_LUMINANCE4_ALPHA4: return DXGI_FORMAT_;
+ case SVGA3D_LUMINANCE16: return DXGI_FORMAT_;
+ case SVGA3D_LUMINANCE8_ALPHA8: return DXGI_FORMAT_;
+ case SVGA3D_DXT1: return DXGI_FORMAT_;
+ case SVGA3D_DXT2: return DXGI_FORMAT_;
+ case SVGA3D_DXT3: return DXGI_FORMAT_;
+ case SVGA3D_DXT4: return DXGI_FORMAT_;
+ case SVGA3D_DXT5: return DXGI_FORMAT_;
+ case SVGA3D_BUMPU8V8: return DXGI_FORMAT_;
+ case SVGA3D_BUMPL6V5U5: return DXGI_FORMAT_;
+ case SVGA3D_BUMPX8L8V8U8: return DXGI_FORMAT_;
+ case SVGA3D_FORMAT_DEAD1: break;
+ case SVGA3D_ARGB_S10E5: return DXGI_FORMAT_;
+ case SVGA3D_ARGB_S23E8: return DXGI_FORMAT_;
+ case SVGA3D_A2R10G10B10: return DXGI_FORMAT_;
+ case SVGA3D_V8U8: return DXGI_FORMAT_;
+ case SVGA3D_Q8W8V8U8: return DXGI_FORMAT_;
+ case SVGA3D_CxV8U8: return DXGI_FORMAT_;
+ case SVGA3D_X8L8V8U8: return DXGI_FORMAT_;
+ case SVGA3D_A2W10V10U10: return DXGI_FORMAT_;
+ case SVGA3D_ALPHA8: return DXGI_FORMAT_;
+ case SVGA3D_R_S10E5: return DXGI_FORMAT_;
+ case SVGA3D_R_S23E8: return DXGI_FORMAT_;
+ case SVGA3D_RG_S10E5: return DXGI_FORMAT_;
+ case SVGA3D_RG_S23E8: return DXGI_FORMAT_;
+ case SVGA3D_BUFFER: return DXGI_FORMAT_;
+ case SVGA3D_Z_D24X8: return DXGI_FORMAT_;
+ case SVGA3D_V16U16: return DXGI_FORMAT_;
+ case SVGA3D_G16R16: return DXGI_FORMAT_;
+ case SVGA3D_A16B16G16R16: return DXGI_FORMAT_;
+ case SVGA3D_UYVY: return DXGI_FORMAT_;
+ case SVGA3D_YUY2: return DXGI_FORMAT_;
+ case SVGA3D_NV12: return DXGI_FORMAT_;
+ case SVGA3D_FORMAT_DEAD2: break; /* Old SVGA3D_AYUV */
+ case SVGA3D_R32G32B32A32_TYPELESS: return DXGI_FORMAT_R32G32B32A32_TYPELESS;
+ case SVGA3D_R32G32B32A32_UINT: return DXGI_FORMAT_R32G32B32A32_UINT;
+ case SVGA3D_R32G32B32A32_SINT: return DXGI_FORMAT_R32G32B32A32_SINT;
+ case SVGA3D_R32G32B32_TYPELESS: return DXGI_FORMAT_R32G32B32_TYPELESS;
+ case SVGA3D_R32G32B32_FLOAT: return DXGI_FORMAT_R32G32B32_FLOAT;
+ case SVGA3D_R32G32B32_UINT: return DXGI_FORMAT_R32G32B32_UINT;
+ case SVGA3D_R32G32B32_SINT: return DXGI_FORMAT_R32G32B32_SINT;
+ case SVGA3D_R16G16B16A16_TYPELESS: return DXGI_FORMAT_R16G16B16A16_TYPELESS;
+ case SVGA3D_R16G16B16A16_UINT: return DXGI_FORMAT_R16G16B16A16_UINT;
+ case SVGA3D_R16G16B16A16_SNORM: return DXGI_FORMAT_R16G16B16A16_SNORM;
+ case SVGA3D_R16G16B16A16_SINT: return DXGI_FORMAT_R16G16B16A16_SINT;
+ case SVGA3D_R32G32_TYPELESS: return DXGI_FORMAT_R32G32_TYPELESS;
+ case SVGA3D_R32G32_UINT: return DXGI_FORMAT_R32G32_UINT;
+ case SVGA3D_R32G32_SINT: return DXGI_FORMAT_R32G32_SINT;
+ case SVGA3D_R32G8X24_TYPELESS: return DXGI_FORMAT_R32G8X24_TYPELESS;
+ case SVGA3D_D32_FLOAT_S8X24_UINT: return DXGI_FORMAT_D32_FLOAT_S8X24_UINT;
+ case SVGA3D_R32_FLOAT_X8X24: return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS;
+ case SVGA3D_X32_G8X24_UINT: return DXGI_FORMAT_X32_TYPELESS_G8X24_UINT;
+ case SVGA3D_R10G10B10A2_TYPELESS: return DXGI_FORMAT_R10G10B10A2_TYPELESS;
+ case SVGA3D_R10G10B10A2_UINT: return DXGI_FORMAT_R10G10B10A2_UINT;
+ case SVGA3D_R11G11B10_FLOAT: return DXGI_FORMAT_R11G11B10_FLOAT;
+ case SVGA3D_R8G8B8A8_TYPELESS: return DXGI_FORMAT_R8G8B8A8_TYPELESS;
+ case SVGA3D_R8G8B8A8_UNORM: return DXGI_FORMAT_R8G8B8A8_UNORM;
+ case SVGA3D_R8G8B8A8_UNORM_SRGB: return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
+ case SVGA3D_R8G8B8A8_UINT: return DXGI_FORMAT_R8G8B8A8_UINT;
+ case SVGA3D_R8G8B8A8_SINT: return DXGI_FORMAT_R8G8B8A8_SINT;
+ case SVGA3D_R16G16_TYPELESS: return DXGI_FORMAT_R16G16_TYPELESS;
+ case SVGA3D_R16G16_UINT: return DXGI_FORMAT_R16G16_UINT;
+ case SVGA3D_R16G16_SINT: return DXGI_FORMAT_R16G16_SINT;
+ case SVGA3D_R32_TYPELESS: return DXGI_FORMAT_R32_TYPELESS;
+ case SVGA3D_D32_FLOAT: return DXGI_FORMAT_D32_FLOAT;
+ case SVGA3D_R32_UINT: return DXGI_FORMAT_R32_UINT;
+ case SVGA3D_R32_SINT: return DXGI_FORMAT_R32_SINT;
+ case SVGA3D_R24G8_TYPELESS: return DXGI_FORMAT_R24G8_TYPELESS;
+ case SVGA3D_D24_UNORM_S8_UINT: return DXGI_FORMAT_D24_UNORM_S8_UINT;
+ case SVGA3D_R24_UNORM_X8: return DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
+ case SVGA3D_X24_G8_UINT: return DXGI_FORMAT_X24_TYPELESS_G8_UINT;
+ case SVGA3D_R8G8_TYPELESS: return DXGI_FORMAT_R8G8_TYPELESS;
+ case SVGA3D_R8G8_UNORM: return DXGI_FORMAT_R8G8_UNORM;
+ case SVGA3D_R8G8_UINT: return DXGI_FORMAT_R8G8_UINT;
+ case SVGA3D_R8G8_SINT: return DXGI_FORMAT_R8G8_SINT;
+ case SVGA3D_R16_TYPELESS: return DXGI_FORMAT_R16_TYPELESS;
+ case SVGA3D_R16_UNORM: return DXGI_FORMAT_R16_UNORM;
+ case SVGA3D_R16_UINT: return DXGI_FORMAT_R16_UINT;
+ case SVGA3D_R16_SNORM: return DXGI_FORMAT_R16_SNORM;
+ case SVGA3D_R16_SINT: return DXGI_FORMAT_R16_SINT;
+ case SVGA3D_R8_TYPELESS: return DXGI_FORMAT_R8_TYPELESS;
+ case SVGA3D_R8_UNORM: return DXGI_FORMAT_R8_UNORM;
+ case SVGA3D_R8_UINT: return DXGI_FORMAT_R8_UINT;
+ case SVGA3D_R8_SNORM: return DXGI_FORMAT_R8_SNORM;
+ case SVGA3D_R8_SINT: return DXGI_FORMAT_R8_SINT;
+ case SVGA3D_P8: break;
+ case SVGA3D_R9G9B9E5_SHAREDEXP: return DXGI_FORMAT_R9G9B9E5_SHAREDEXP;
+ case SVGA3D_R8G8_B8G8_UNORM: return DXGI_FORMAT_R8G8_B8G8_UNORM;
+ case SVGA3D_G8R8_G8B8_UNORM: return DXGI_FORMAT_G8R8_G8B8_UNORM;
+ case SVGA3D_BC1_TYPELESS: return DXGI_FORMAT_BC1_TYPELESS;
+ case SVGA3D_BC1_UNORM_SRGB: return DXGI_FORMAT_BC1_UNORM_SRGB;
+ case SVGA3D_BC2_TYPELESS: return DXGI_FORMAT_BC2_TYPELESS;
+ case SVGA3D_BC2_UNORM_SRGB: return DXGI_FORMAT_BC2_UNORM_SRGB;
+ case SVGA3D_BC3_TYPELESS: return DXGI_FORMAT_BC3_TYPELESS;
+ case SVGA3D_BC3_UNORM_SRGB: return DXGI_FORMAT_BC3_UNORM_SRGB;
+ case SVGA3D_BC4_TYPELESS: return DXGI_FORMAT_BC4_TYPELESS;
+ case SVGA3D_ATI1: break;
+ case SVGA3D_BC4_SNORM: return DXGI_FORMAT_BC4_SNORM;
+ case SVGA3D_BC5_TYPELESS: return DXGI_FORMAT_BC5_TYPELESS;
+ case SVGA3D_ATI2: break;
+ case SVGA3D_BC5_SNORM: return DXGI_FORMAT_BC5_SNORM;
+ case SVGA3D_R10G10B10_XR_BIAS_A2_UNORM: return DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM;
+ case SVGA3D_B8G8R8A8_TYPELESS: return DXGI_FORMAT_B8G8R8A8_TYPELESS;
+ case SVGA3D_B8G8R8A8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
+#ifdef DX_REPLACE_X8_WITH_A8
+ case SVGA3D_B8G8R8X8_TYPELESS: return DXGI_FORMAT_B8G8R8A8_TYPELESS;
+ case SVGA3D_B8G8R8X8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
+#else
+ case SVGA3D_B8G8R8X8_TYPELESS: return DXGI_FORMAT_B8G8R8X8_TYPELESS;
+ case SVGA3D_B8G8R8X8_UNORM_SRGB: return DXGI_FORMAT_B8G8R8X8_UNORM_SRGB;
+#endif
+ case SVGA3D_Z_DF16: break;
+ case SVGA3D_Z_DF24: break;
+ case SVGA3D_Z_D24S8_INT: return DXGI_FORMAT_D24_UNORM_S8_UINT;
+ case SVGA3D_YV12: break;
+ case SVGA3D_R32G32B32A32_FLOAT: return DXGI_FORMAT_R32G32B32A32_FLOAT;
+ case SVGA3D_R16G16B16A16_FLOAT: return DXGI_FORMAT_R16G16B16A16_FLOAT;
+ case SVGA3D_R16G16B16A16_UNORM: return DXGI_FORMAT_R16G16B16A16_UNORM;
+ case SVGA3D_R32G32_FLOAT: return DXGI_FORMAT_R32G32_FLOAT;
+ case SVGA3D_R10G10B10A2_UNORM: return DXGI_FORMAT_R10G10B10A2_UNORM;
+ case SVGA3D_R8G8B8A8_SNORM: return DXGI_FORMAT_R8G8B8A8_SNORM;
+ case SVGA3D_R16G16_FLOAT: return DXGI_FORMAT_R16G16_FLOAT;
+ case SVGA3D_R16G16_UNORM: return DXGI_FORMAT_R16G16_UNORM;
+ case SVGA3D_R16G16_SNORM: return DXGI_FORMAT_R16G16_SNORM;
+ case SVGA3D_R32_FLOAT: return DXGI_FORMAT_R32_FLOAT;
+ case SVGA3D_R8G8_SNORM: return DXGI_FORMAT_R8G8_SNORM;
+ case SVGA3D_R16_FLOAT: return DXGI_FORMAT_R16_FLOAT;
+ case SVGA3D_D16_UNORM: return DXGI_FORMAT_D16_UNORM;
+ case SVGA3D_A8_UNORM: return DXGI_FORMAT_A8_UNORM;
+ case SVGA3D_BC1_UNORM: return DXGI_FORMAT_BC1_UNORM;
+ case SVGA3D_BC2_UNORM: return DXGI_FORMAT_BC2_UNORM;
+ case SVGA3D_BC3_UNORM: return DXGI_FORMAT_BC3_UNORM;
+ case SVGA3D_B5G6R5_UNORM: return DXGI_FORMAT_B5G6R5_UNORM;
+ case SVGA3D_B5G5R5A1_UNORM: return DXGI_FORMAT_B5G5R5A1_UNORM;
+ case SVGA3D_B8G8R8A8_UNORM: return DXGI_FORMAT_B8G8R8A8_UNORM;
+#ifdef DX_REPLACE_X8_WITH_A8
+ case SVGA3D_B8G8R8X8_UNORM: return DXGI_FORMAT_B8G8R8A8_UNORM;
+#else
+ case SVGA3D_B8G8R8X8_UNORM: return DXGI_FORMAT_B8G8R8X8_UNORM;
+#endif
+ case SVGA3D_BC4_UNORM: return DXGI_FORMAT_BC4_UNORM;
+ case SVGA3D_BC5_UNORM: return DXGI_FORMAT_BC5_UNORM;
+
+ case SVGA3D_B4G4R4A4_UNORM: return DXGI_FORMAT_;
+ case SVGA3D_BC6H_TYPELESS: return DXGI_FORMAT_BC6H_TYPELESS;
+ case SVGA3D_BC6H_UF16: return DXGI_FORMAT_BC6H_UF16;
+ case SVGA3D_BC6H_SF16: return DXGI_FORMAT_BC6H_SF16;
+ case SVGA3D_BC7_TYPELESS: return DXGI_FORMAT_BC7_TYPELESS;
+ case SVGA3D_BC7_UNORM: return DXGI_FORMAT_BC7_UNORM;
+ case SVGA3D_BC7_UNORM_SRGB: return DXGI_FORMAT_BC7_UNORM_SRGB;
+ case SVGA3D_AYUV: return DXGI_FORMAT_;
+
+ case SVGA3D_FORMAT_INVALID:
+ case SVGA3D_FORMAT_MAX: break;
+ }
+ // AssertFailed();
+ return DXGI_FORMAT_UNKNOWN;
+#undef DXGI_FORMAT_
+}
+
+
+static SVGA3dSurfaceFormat vmsvgaDXDevCapSurfaceFmt2Format(SVGA3dDevCapIndex enmDevCap)
+{
+ switch (enmDevCap)
+ {
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8: return SVGA3D_X8R8G8B8;
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8: return SVGA3D_A8R8G8B8;
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10: return SVGA3D_A2R10G10B10;
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5: return SVGA3D_X1R5G5B5;
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5: return SVGA3D_A1R5G5B5;
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4: return SVGA3D_A4R4G4B4;
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5: return SVGA3D_R5G6B5;
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16: return SVGA3D_LUMINANCE16;
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8: return SVGA3D_LUMINANCE8_ALPHA8;
+ case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8: return SVGA3D_ALPHA8;
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8: return SVGA3D_LUMINANCE8;
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D16: return SVGA3D_Z_D16;
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8: return SVGA3D_Z_D24S8;
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8: return SVGA3D_Z_D24X8;
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT1: return SVGA3D_DXT1;
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT2: return SVGA3D_DXT2;
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT3: return SVGA3D_DXT3;
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT4: return SVGA3D_DXT4;
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT5: return SVGA3D_DXT5;
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8: return SVGA3D_BUMPX8L8V8U8;
+ case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10: return SVGA3D_A2W10V10U10;
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8: return SVGA3D_BUMPU8V8;
+ case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8: return SVGA3D_Q8W8V8U8;
+ case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8: return SVGA3D_CxV8U8;
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5: return SVGA3D_R_S10E5;
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8: return SVGA3D_R_S23E8;
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5: return SVGA3D_RG_S10E5;
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8: return SVGA3D_RG_S23E8;
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5: return SVGA3D_ARGB_S10E5;
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8: return SVGA3D_ARGB_S23E8;
+ case SVGA3D_DEVCAP_SURFACEFMT_V16U16: return SVGA3D_V16U16;
+ case SVGA3D_DEVCAP_SURFACEFMT_G16R16: return SVGA3D_G16R16;
+ case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16: return SVGA3D_A16B16G16R16;
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY: return SVGA3D_UYVY;
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2: return SVGA3D_YUY2;
+ case SVGA3D_DEVCAP_SURFACEFMT_NV12: return SVGA3D_NV12;
+ case SVGA3D_DEVCAP_DEAD10: return SVGA3D_FORMAT_DEAD2; /* SVGA3D_DEVCAP_SURFACEFMT_AYUV -> SVGA3D_AYUV */
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16: return SVGA3D_Z_DF16;
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24: return SVGA3D_Z_DF24;
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT: return SVGA3D_Z_D24S8_INT;
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI1: return SVGA3D_ATI1;
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI2: return SVGA3D_ATI2;
+ case SVGA3D_DEVCAP_SURFACEFMT_YV12: return SVGA3D_YV12;
+ default:
+ AssertFailed();
+ break;
+ }
+ return SVGA3D_FORMAT_INVALID;
+}
+
+
+static SVGA3dSurfaceFormat vmsvgaDXDevCapDxfmt2Format(SVGA3dDevCapIndex enmDevCap)
+{
+ switch (enmDevCap)
+ {
+ case SVGA3D_DEVCAP_DXFMT_X8R8G8B8: return SVGA3D_X8R8G8B8;
+ case SVGA3D_DEVCAP_DXFMT_A8R8G8B8: return SVGA3D_A8R8G8B8;
+ case SVGA3D_DEVCAP_DXFMT_R5G6B5: return SVGA3D_R5G6B5;
+ case SVGA3D_DEVCAP_DXFMT_X1R5G5B5: return SVGA3D_X1R5G5B5;
+ case SVGA3D_DEVCAP_DXFMT_A1R5G5B5: return SVGA3D_A1R5G5B5;
+ case SVGA3D_DEVCAP_DXFMT_A4R4G4B4: return SVGA3D_A4R4G4B4;
+ case SVGA3D_DEVCAP_DXFMT_Z_D32: return SVGA3D_Z_D32;
+ case SVGA3D_DEVCAP_DXFMT_Z_D16: return SVGA3D_Z_D16;
+ case SVGA3D_DEVCAP_DXFMT_Z_D24S8: return SVGA3D_Z_D24S8;
+ case SVGA3D_DEVCAP_DXFMT_Z_D15S1: return SVGA3D_Z_D15S1;
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE8: return SVGA3D_LUMINANCE8;
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE4_ALPHA4: return SVGA3D_LUMINANCE4_ALPHA4;
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE16: return SVGA3D_LUMINANCE16;
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE8_ALPHA8: return SVGA3D_LUMINANCE8_ALPHA8;
+ case SVGA3D_DEVCAP_DXFMT_DXT1: return SVGA3D_DXT1;
+ case SVGA3D_DEVCAP_DXFMT_DXT2: return SVGA3D_DXT2;
+ case SVGA3D_DEVCAP_DXFMT_DXT3: return SVGA3D_DXT3;
+ case SVGA3D_DEVCAP_DXFMT_DXT4: return SVGA3D_DXT4;
+ case SVGA3D_DEVCAP_DXFMT_DXT5: return SVGA3D_DXT5;
+ case SVGA3D_DEVCAP_DXFMT_BUMPU8V8: return SVGA3D_BUMPU8V8;
+ case SVGA3D_DEVCAP_DXFMT_BUMPL6V5U5: return SVGA3D_BUMPL6V5U5;
+ case SVGA3D_DEVCAP_DXFMT_BUMPX8L8V8U8: return SVGA3D_BUMPX8L8V8U8;
+ case SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD1: return SVGA3D_FORMAT_DEAD1;
+ case SVGA3D_DEVCAP_DXFMT_ARGB_S10E5: return SVGA3D_ARGB_S10E5;
+ case SVGA3D_DEVCAP_DXFMT_ARGB_S23E8: return SVGA3D_ARGB_S23E8;
+ case SVGA3D_DEVCAP_DXFMT_A2R10G10B10: return SVGA3D_A2R10G10B10;
+ case SVGA3D_DEVCAP_DXFMT_V8U8: return SVGA3D_V8U8;
+ case SVGA3D_DEVCAP_DXFMT_Q8W8V8U8: return SVGA3D_Q8W8V8U8;
+ case SVGA3D_DEVCAP_DXFMT_CxV8U8: return SVGA3D_CxV8U8;
+ case SVGA3D_DEVCAP_DXFMT_X8L8V8U8: return SVGA3D_X8L8V8U8;
+ case SVGA3D_DEVCAP_DXFMT_A2W10V10U10: return SVGA3D_A2W10V10U10;
+ case SVGA3D_DEVCAP_DXFMT_ALPHA8: return SVGA3D_ALPHA8;
+ case SVGA3D_DEVCAP_DXFMT_R_S10E5: return SVGA3D_R_S10E5;
+ case SVGA3D_DEVCAP_DXFMT_R_S23E8: return SVGA3D_R_S23E8;
+ case SVGA3D_DEVCAP_DXFMT_RG_S10E5: return SVGA3D_RG_S10E5;
+ case SVGA3D_DEVCAP_DXFMT_RG_S23E8: return SVGA3D_RG_S23E8;
+ case SVGA3D_DEVCAP_DXFMT_BUFFER: return SVGA3D_BUFFER;
+ case SVGA3D_DEVCAP_DXFMT_Z_D24X8: return SVGA3D_Z_D24X8;
+ case SVGA3D_DEVCAP_DXFMT_V16U16: return SVGA3D_V16U16;
+ case SVGA3D_DEVCAP_DXFMT_G16R16: return SVGA3D_G16R16;
+ case SVGA3D_DEVCAP_DXFMT_A16B16G16R16: return SVGA3D_A16B16G16R16;
+ case SVGA3D_DEVCAP_DXFMT_UYVY: return SVGA3D_UYVY;
+ case SVGA3D_DEVCAP_DXFMT_YUY2: return SVGA3D_YUY2;
+ case SVGA3D_DEVCAP_DXFMT_NV12: return SVGA3D_NV12;
+ case SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD2: return SVGA3D_FORMAT_DEAD2; /* SVGA3D_DEVCAP_DXFMT_AYUV -> SVGA3D_AYUV */
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS: return SVGA3D_R32G32B32A32_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT: return SVGA3D_R32G32B32A32_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT: return SVGA3D_R32G32B32A32_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS: return SVGA3D_R32G32B32_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT: return SVGA3D_R32G32B32_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT: return SVGA3D_R32G32B32_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT: return SVGA3D_R32G32B32_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS: return SVGA3D_R16G16B16A16_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT: return SVGA3D_R16G16B16A16_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM: return SVGA3D_R16G16B16A16_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT: return SVGA3D_R16G16B16A16_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS: return SVGA3D_R32G32_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R32G32_UINT: return SVGA3D_R32G32_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R32G32_SINT: return SVGA3D_R32G32_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS: return SVGA3D_R32G8X24_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT: return SVGA3D_D32_FLOAT_S8X24_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24: return SVGA3D_R32_FLOAT_X8X24;
+ case SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT: return SVGA3D_X32_G8X24_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS: return SVGA3D_R10G10B10A2_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT: return SVGA3D_R10G10B10A2_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT: return SVGA3D_R11G11B10_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS: return SVGA3D_R8G8B8A8_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM: return SVGA3D_R8G8B8A8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB: return SVGA3D_R8G8B8A8_UNORM_SRGB;
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT: return SVGA3D_R8G8B8A8_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT: return SVGA3D_R8G8B8A8_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS: return SVGA3D_R16G16_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R16G16_UINT: return SVGA3D_R16G16_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16_SINT: return SVGA3D_R16G16_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R32_TYPELESS: return SVGA3D_R32_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_D32_FLOAT: return SVGA3D_D32_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R32_UINT: return SVGA3D_R32_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R32_SINT: return SVGA3D_R32_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS: return SVGA3D_R24G8_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT: return SVGA3D_D24_UNORM_S8_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8: return SVGA3D_R24_UNORM_X8;
+ case SVGA3D_DEVCAP_DXFMT_X24_G8_UINT: return SVGA3D_X24_G8_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS: return SVGA3D_R8G8_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R8G8_UNORM: return SVGA3D_R8G8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R8G8_UINT: return SVGA3D_R8G8_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R8G8_SINT: return SVGA3D_R8G8_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R16_TYPELESS: return SVGA3D_R16_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R16_UNORM: return SVGA3D_R16_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R16_UINT: return SVGA3D_R16_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R16_SNORM: return SVGA3D_R16_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R16_SINT: return SVGA3D_R16_SINT;
+ case SVGA3D_DEVCAP_DXFMT_R8_TYPELESS: return SVGA3D_R8_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_R8_UNORM: return SVGA3D_R8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R8_UINT: return SVGA3D_R8_UINT;
+ case SVGA3D_DEVCAP_DXFMT_R8_SNORM: return SVGA3D_R8_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R8_SINT: return SVGA3D_R8_SINT;
+ case SVGA3D_DEVCAP_DXFMT_P8: return SVGA3D_P8;
+ case SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP: return SVGA3D_R9G9B9E5_SHAREDEXP;
+ case SVGA3D_DEVCAP_DXFMT_R8G8_B8G8_UNORM: return SVGA3D_R8G8_B8G8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_G8R8_G8B8_UNORM: return SVGA3D_G8R8_G8B8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS: return SVGA3D_BC1_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB: return SVGA3D_BC1_UNORM_SRGB;
+ case SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS: return SVGA3D_BC2_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB: return SVGA3D_BC2_UNORM_SRGB;
+ case SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS: return SVGA3D_BC3_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB: return SVGA3D_BC3_UNORM_SRGB;
+ case SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS: return SVGA3D_BC4_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_ATI1: return SVGA3D_ATI1;
+ case SVGA3D_DEVCAP_DXFMT_BC4_SNORM: return SVGA3D_BC4_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS: return SVGA3D_BC5_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_ATI2: return SVGA3D_ATI2;
+ case SVGA3D_DEVCAP_DXFMT_BC5_SNORM: return SVGA3D_BC5_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10_XR_BIAS_A2_UNORM: return SVGA3D_R10G10B10_XR_BIAS_A2_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS: return SVGA3D_B8G8R8A8_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB: return SVGA3D_B8G8R8A8_UNORM_SRGB;
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS: return SVGA3D_B8G8R8X8_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB: return SVGA3D_B8G8R8X8_UNORM_SRGB;
+ case SVGA3D_DEVCAP_DXFMT_Z_DF16: return SVGA3D_Z_DF16;
+ case SVGA3D_DEVCAP_DXFMT_Z_DF24: return SVGA3D_Z_DF24;
+ case SVGA3D_DEVCAP_DXFMT_Z_D24S8_INT: return SVGA3D_Z_D24S8_INT;
+ case SVGA3D_DEVCAP_DXFMT_YV12: return SVGA3D_YV12;
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT: return SVGA3D_R32G32B32A32_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT: return SVGA3D_R16G16B16A16_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM: return SVGA3D_R16G16B16A16_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT: return SVGA3D_R32G32_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM: return SVGA3D_R10G10B10A2_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM: return SVGA3D_R8G8B8A8_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT: return SVGA3D_R16G16_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R16G16_UNORM: return SVGA3D_R16G16_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_R16G16_SNORM: return SVGA3D_R16G16_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R32_FLOAT: return SVGA3D_R32_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_R8G8_SNORM: return SVGA3D_R8G8_SNORM;
+ case SVGA3D_DEVCAP_DXFMT_R16_FLOAT: return SVGA3D_R16_FLOAT;
+ case SVGA3D_DEVCAP_DXFMT_D16_UNORM: return SVGA3D_D16_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_A8_UNORM: return SVGA3D_A8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC1_UNORM: return SVGA3D_BC1_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC2_UNORM: return SVGA3D_BC2_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC3_UNORM: return SVGA3D_BC3_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM: return SVGA3D_B5G6R5_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM: return SVGA3D_B5G5R5A1_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM: return SVGA3D_B8G8R8A8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM: return SVGA3D_B8G8R8X8_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC4_UNORM: return SVGA3D_BC4_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC5_UNORM: return SVGA3D_BC5_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC6H_TYPELESS: return SVGA3D_BC6H_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_BC6H_UF16: return SVGA3D_BC6H_UF16;
+ case SVGA3D_DEVCAP_DXFMT_BC6H_SF16: return SVGA3D_BC6H_SF16;
+ case SVGA3D_DEVCAP_DXFMT_BC7_TYPELESS: return SVGA3D_BC7_TYPELESS;
+ case SVGA3D_DEVCAP_DXFMT_BC7_UNORM: return SVGA3D_BC7_UNORM;
+ case SVGA3D_DEVCAP_DXFMT_BC7_UNORM_SRGB: return SVGA3D_BC7_UNORM_SRGB;
+ default:
+ AssertFailed();
+ break;
+ }
+ return SVGA3D_FORMAT_INVALID;
+}
+
+
+static int vmsvgaDXCheckFormatSupportPreDX(PVMSVGA3DSTATE pState, SVGA3dSurfaceFormat enmFormat, uint32_t *pu32DevCap)
+{
+ int rc = VINF_SUCCESS;
+
+ *pu32DevCap = 0;
+
+ DXGI_FORMAT const dxgiFormat = vmsvgaDXSurfaceFormat2Dxgi(enmFormat);
+ if (dxgiFormat != DXGI_FORMAT_UNKNOWN)
+ {
+ RT_NOREF(pState);
+ /** @todo Implement */
+ }
+ else
+ rc = VERR_NOT_SUPPORTED;
+ return rc;
+}
+
+static int vmsvgaDXCheckFormatSupport(PVMSVGA3DSTATE pState, SVGA3dSurfaceFormat enmFormat, uint32_t *pu32DevCap)
+{
+ int rc = VINF_SUCCESS;
+
+ *pu32DevCap = 0;
+
+ DXGI_FORMAT const dxgiFormat = vmsvgaDXSurfaceFormat2Dxgi(enmFormat);
+ if (dxgiFormat != DXGI_FORMAT_UNKNOWN)
+ {
+ ID3D11Device *pDevice = pState->pBackend->dxDevice.pDevice;
+ UINT FormatSupport = 0;
+ HRESULT hr = pDevice->CheckFormatSupport(dxgiFormat, &FormatSupport);
+ if (SUCCEEDED(hr))
+ {
+ *pu32DevCap |= SVGA3D_DXFMT_SUPPORTED;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_SHADER_SAMPLE)
+ *pu32DevCap |= SVGA3D_DXFMT_SHADER_SAMPLE;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_RENDER_TARGET)
+ *pu32DevCap |= SVGA3D_DXFMT_COLOR_RENDERTARGET;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_DEPTH_STENCIL)
+ *pu32DevCap |= SVGA3D_DXFMT_DEPTH_RENDERTARGET;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_BLENDABLE)
+ *pu32DevCap |= SVGA3D_DXFMT_BLENDABLE;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_MIP)
+ *pu32DevCap |= SVGA3D_DXFMT_MIPS;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_TEXTURECUBE)
+ *pu32DevCap |= SVGA3D_DXFMT_ARRAY;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_TEXTURE3D)
+ *pu32DevCap |= SVGA3D_DXFMT_VOLUME;
+
+ if (FormatSupport & D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER)
+ *pu32DevCap |= SVGA3D_DXFMT_DX_VERTEX_BUFFER;
+
+ UINT NumQualityLevels;
+ hr = pDevice->CheckMultisampleQualityLevels(dxgiFormat, 2, &NumQualityLevels);
+ if (SUCCEEDED(hr) && NumQualityLevels != 0)
+ *pu32DevCap |= SVGA3D_DXFMT_MULTISAMPLE;
+ }
+ else
+ {
+ LogFunc(("CheckFormatSupport failed for 0x%08x, hr = 0x%08x\n", dxgiFormat, hr));
+ rc = VERR_NOT_SUPPORTED;
+ }
+ }
+ else
+ rc = VERR_NOT_SUPPORTED;
+ return rc;
+}
+
+
+static int dxDeviceCreate(PVMSVGA3DBACKEND pBackend, DXDEVICE *pDXDevice)
+{
+ int rc = VINF_SUCCESS;
+
+ if (pBackend->fSingleDevice && pBackend->dxDevice.pDevice)
+ {
+ pDXDevice->pDevice = pBackend->dxDevice.pDevice;
+ pDXDevice->pDevice->AddRef();
+
+ pDXDevice->pImmediateContext = pBackend->dxDevice.pImmediateContext;
+ pDXDevice->pImmediateContext->AddRef();
+
+ pDXDevice->pDxgiFactory = pBackend->dxDevice.pDxgiFactory;
+ pDXDevice->pDxgiFactory->AddRef();
+
+ pDXDevice->FeatureLevel = pBackend->dxDevice.FeatureLevel;
+
+ pDXDevice->pStagingBuffer = 0;
+ pDXDevice->cbStagingBuffer = 0;
+
+ BlitInit(&pDXDevice->Blitter, pDXDevice->pDevice, pDXDevice->pImmediateContext);
+ return rc;
+ }
+
+ IDXGIAdapter *pAdapter = NULL; /* Default adapter. */
+ static D3D_FEATURE_LEVEL const s_aFeatureLevels[] =
+ {
+ D3D_FEATURE_LEVEL_11_1,
+ D3D_FEATURE_LEVEL_11_0
+ };
+ UINT Flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
+#ifdef DEBUG
+ Flags |= D3D11_CREATE_DEVICE_DEBUG;
+#endif
+
+ ID3D11Device *pDevice = 0;
+ ID3D11DeviceContext *pImmediateContext = 0;
+ HRESULT hr = pBackend->pfnD3D11CreateDevice(pAdapter,
+ D3D_DRIVER_TYPE_HARDWARE,
+ NULL,
+ Flags,
+ s_aFeatureLevels,
+ RT_ELEMENTS(s_aFeatureLevels),
+ D3D11_SDK_VERSION,
+ &pDevice,
+ &pDXDevice->FeatureLevel,
+ &pImmediateContext);
+#ifdef DEBUG
+ if (FAILED(hr))
+ {
+ /* Device creation may fail because _DEBUG flag requires "D3D11 SDK Layers for Windows 10" ("Graphics Tools"):
+ * Settings/System/Apps/Optional features/Add a feature/Graphics Tools
+ * Retry without the flag.
+ */
+ Flags &= ~D3D11_CREATE_DEVICE_DEBUG;
+ hr = pBackend->pfnD3D11CreateDevice(pAdapter,
+ D3D_DRIVER_TYPE_HARDWARE,
+ NULL,
+ Flags,
+ s_aFeatureLevels,
+ RT_ELEMENTS(s_aFeatureLevels),
+ D3D11_SDK_VERSION,
+ &pDevice,
+ &pDXDevice->FeatureLevel,
+ &pImmediateContext);
+ }
+#endif
+
+ if (SUCCEEDED(hr))
+ {
+ LogRel(("VMSVGA: Feature level %#x\n", pDXDevice->FeatureLevel));
+
+ hr = pDevice->QueryInterface(__uuidof(ID3D11Device1), (void**)&pDXDevice->pDevice);
+ AssertReturnStmt(SUCCEEDED(hr),
+ D3D_RELEASE(pImmediateContext); D3D_RELEASE(pDevice),
+ VERR_NOT_SUPPORTED);
+
+ hr = pImmediateContext->QueryInterface(__uuidof(ID3D11DeviceContext1), (void**)&pDXDevice->pImmediateContext);
+ AssertReturnStmt(SUCCEEDED(hr),
+ D3D_RELEASE(pImmediateContext); D3D_RELEASE(pDXDevice->pDevice); D3D_RELEASE(pDevice),
+ VERR_NOT_SUPPORTED);
+
+#ifdef DEBUG
+ /* Break into debugger when DX runtime detects anything unusual. */
+ HRESULT hr2;
+ ID3D11Debug *pDebug = 0;
+ hr2 = pDXDevice->pDevice->QueryInterface(__uuidof(ID3D11Debug), (void**)&pDebug);
+ if (SUCCEEDED(hr2))
+ {
+ ID3D11InfoQueue *pInfoQueue = 0;
+ hr2 = pDebug->QueryInterface(__uuidof(ID3D11InfoQueue), (void**)&pInfoQueue);
+ if (SUCCEEDED(hr2))
+ {
+ pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, true);
+// pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, true);
+// pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_WARNING, true);
+
+ /* No breakpoints for the following messages. */
+ D3D11_MESSAGE_ID saIgnoredMessageIds[] =
+ {
+ /* Message ID: Caused by: */
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH, /* Autogenerated input signatures. */
+ D3D11_MESSAGE_ID_LIVE_DEVICE, /* Live object report. Does not seem to prevent a breakpoint. */
+ (D3D11_MESSAGE_ID)3146081 /*DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET*/, /* U. */
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET, /* U. */
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH, /* U. */
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT, /* P. */
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK, /* S. */
+ };
+
+ D3D11_INFO_QUEUE_FILTER filter;
+ RT_ZERO(filter);
+ filter.DenyList.NumIDs = RT_ELEMENTS(saIgnoredMessageIds);
+ filter.DenyList.pIDList = saIgnoredMessageIds;
+ pInfoQueue->AddStorageFilterEntries(&filter);
+
+ D3D_RELEASE(pInfoQueue);
+ }
+ D3D_RELEASE(pDebug);
+ }
+#endif
+
+ IDXGIDevice *pDxgiDevice = 0;
+ hr = pDXDevice->pDevice->QueryInterface(__uuidof(IDXGIDevice), (void**)&pDxgiDevice);
+ if (SUCCEEDED(hr))
+ {
+ IDXGIAdapter *pDxgiAdapter = 0;
+ hr = pDxgiDevice->GetParent(__uuidof(IDXGIAdapter), (void**)&pDxgiAdapter);
+ if (SUCCEEDED(hr))
+ {
+ hr = pDxgiAdapter->GetParent(__uuidof(IDXGIFactory), (void**)&pDXDevice->pDxgiFactory);
+ D3D_RELEASE(pDxgiAdapter);
+ }
+
+ D3D_RELEASE(pDxgiDevice);
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ BlitInit(&pDXDevice->Blitter, pDXDevice->pDevice, pDXDevice->pImmediateContext);
+ else
+ rc = VERR_NOT_SUPPORTED;
+
+ return rc;
+}
+
+
+static void dxDeviceDestroy(PVMSVGA3DBACKEND pBackend, DXDEVICE *pDevice)
+{
+ RT_NOREF(pBackend);
+
+ BlitRelease(&pDevice->Blitter);
+
+ D3D_RELEASE(pDevice->pStagingBuffer);
+
+ D3D_RELEASE(pDevice->pDxgiFactory);
+ D3D_RELEASE(pDevice->pImmediateContext);
+
+#ifdef DEBUG
+ HRESULT hr2;
+ ID3D11Debug *pDebug = 0;
+ hr2 = pDevice->pDevice->QueryInterface(__uuidof(ID3D11Debug), (void**)&pDebug);
+ if (SUCCEEDED(hr2))
+ {
+ /// @todo Use this to see whether all resources have been properly released.
+ //DEBUG_BREAKPOINT_TEST();
+ //pDebug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL | (D3D11_RLDO_FLAGS)0x4 /*D3D11_RLDO_IGNORE_INTERNAL*/);
+ D3D_RELEASE(pDebug);
+ }
+#endif
+
+ D3D_RELEASE(pDevice->pDevice);
+ RT_ZERO(*pDevice);
+}
+
+
+static void dxViewAddToList(PVGASTATECC pThisCC, DXVIEW *pDXView)
+{
+ LogFunc(("cid = %u, sid = %u, viewId = %u, type = %u\n",
+ pDXView->cid, pDXView->sid, pDXView->viewId, pDXView->enmViewType));
+
+ Assert(pDXView->u.pView); /* Only already created views should be added. Guard against mis-use by callers. */
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pDXView->sid, &pSurface);
+ AssertRCReturnVoid(rc);
+
+ RTListAppend(&pSurface->pBackendSurface->listView, &pDXView->nodeSurfaceView);
+}
+
+
+static void dxViewRemoveFromList(DXVIEW *pDXView)
+{
+ LogFunc(("cid = %u, sid = %u, viewId = %u, type = %u\n",
+ pDXView->cid, pDXView->sid, pDXView->viewId, pDXView->enmViewType));
+ /* pView can be NULL, if COT entry is already empty. */
+ if (pDXView->u.pView)
+ {
+ Assert(pDXView->nodeSurfaceView.pNext && pDXView->nodeSurfaceView.pPrev);
+ RTListNodeRemove(&pDXView->nodeSurfaceView);
+ }
+}
+
+
+static int dxViewDestroy(DXVIEW *pDXView)
+{
+ LogFunc(("cid = %u, sid = %u, viewId = %u, type = %u\n",
+ pDXView->cid, pDXView->sid, pDXView->viewId, pDXView->enmViewType));
+ if (pDXView->u.pView)
+ {
+ D3D_RELEASE(pDXView->u.pView);
+ RTListNodeRemove(&pDXView->nodeSurfaceView);
+ RT_ZERO(*pDXView);
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxViewInit(DXVIEW *pDXView, PVMSVGA3DSURFACE pSurface, VMSVGA3DDXCONTEXT *pDXContext, uint32_t viewId, VMSVGA3DBACKVIEWTYPE enmViewType, ID3D11View *pView)
+{
+ pDXView->cid = pDXContext->cid;
+ pDXView->sid = pSurface->id;
+ pDXView->viewId = viewId;
+ pDXView->enmViewType = enmViewType;
+ pDXView->u.pView = pView;
+ RTListAppend(&pSurface->pBackendSurface->listView, &pDXView->nodeSurfaceView);
+
+ LogFunc(("cid = %u, sid = %u, viewId = %u, type = %u\n",
+ pDXView->cid, pDXView->sid, pDXView->viewId, pDXView->enmViewType));
+
+DXVIEW *pIter, *pNext;
+RTListForEachSafe(&pSurface->pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView)
+{
+ AssertPtr(pNext);
+ LogFunc(("pIter=%p, pNext=%p\n", pIter, pNext));
+}
+
+ return VINF_SUCCESS;
+}
+
+
+DECLINLINE(bool) dxIsSurfaceShareable(PVMSVGA3DSURFACE pSurface)
+{
+ /* It is not expected that volume textures will be shared between contexts. */
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_VOLUME)
+ return false;
+
+ return (pSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET)
+ || (pSurface->f.surfaceFlags & SVGA3D_SURFACE_BIND_RENDER_TARGET);
+}
+
+
+static DXDEVICE *dxDeviceFromCid(uint32_t cid, PVMSVGA3DSTATE pState)
+{
+ if (cid != DX_CID_BACKEND)
+ {
+ if (pState->pBackend->fSingleDevice)
+ return &pState->pBackend->dxDevice;
+
+ VMSVGA3DDXCONTEXT *pDXContext;
+ int rc = vmsvga3dDXContextFromCid(pState, cid, &pDXContext);
+ if (RT_SUCCESS(rc))
+ return &pDXContext->pBackendDXContext->dxDevice;
+ }
+ else
+ return &pState->pBackend->dxDevice;
+
+ AssertFailed();
+ return NULL;
+}
+
+
+static DXDEVICE *dxDeviceFromContext(PVMSVGA3DSTATE p3dState, VMSVGA3DDXCONTEXT *pDXContext)
+{
+ if (pDXContext && !p3dState->pBackend->fSingleDevice)
+ return &pDXContext->pBackendDXContext->dxDevice;
+
+ return &p3dState->pBackend->dxDevice;
+}
+
+
+static int dxDeviceFlush(DXDEVICE *pDevice)
+{
+ /** @todo Should the flush follow the query submission? */
+ pDevice->pImmediateContext->Flush();
+
+ ID3D11Query *pQuery = 0;
+ D3D11_QUERY_DESC qd;
+ RT_ZERO(qd);
+ qd.Query = D3D11_QUERY_EVENT;
+
+ HRESULT hr = pDevice->pDevice->CreateQuery(&qd, &pQuery);
+ Assert(hr == S_OK); RT_NOREF(hr);
+ pDevice->pImmediateContext->End(pQuery);
+
+ BOOL queryData;
+ while (pDevice->pImmediateContext->GetData(pQuery, &queryData, sizeof(queryData), 0) != S_OK)
+ RTThreadYield();
+
+ D3D_RELEASE(pQuery);
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxContextWait(uint32_t cidDrawing, PVMSVGA3DSTATE pState)
+{
+ if (pState->pBackend->fSingleDevice)
+ return VINF_SUCCESS;
+
+ /* Flush cidDrawing context and issue a query. */
+ DXDEVICE *pDXDevice = dxDeviceFromCid(cidDrawing, pState);
+ if (pDXDevice)
+ return dxDeviceFlush(pDXDevice);
+ /* cidDrawing does not exist anymore. */
+ return VINF_SUCCESS;
+}
+
+
+static int dxSurfaceWait(PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface, uint32_t cidRequesting)
+{
+ if (pState->pBackend->fSingleDevice)
+ return VINF_SUCCESS;
+
+ VMSVGA3DBACKENDSURFACE *pBackendSurface = pSurface->pBackendSurface;
+ if (!pBackendSurface)
+ AssertFailedReturn(VERR_INVALID_STATE);
+
+ int rc = VINF_SUCCESS;
+ if (pBackendSurface->cidDrawing != SVGA_ID_INVALID)
+ {
+ if (pBackendSurface->cidDrawing != cidRequesting)
+ {
+ LogFunc(("sid = %u, assoc cid = %u, drawing cid = %u, req cid = %u\n",
+ pSurface->id, pSurface->idAssociatedContext, pBackendSurface->cidDrawing, cidRequesting));
+ Assert(dxIsSurfaceShareable(pSurface));
+ rc = dxContextWait(pBackendSurface->cidDrawing, pState);
+ pBackendSurface->cidDrawing = SVGA_ID_INVALID;
+ }
+ }
+ return rc;
+}
+
+
+static ID3D11Resource *dxResource(PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface, VMSVGA3DDXCONTEXT *pDXContext)
+{
+ VMSVGA3DBACKENDSURFACE *pBackendSurface = pSurface->pBackendSurface;
+ if (!pBackendSurface)
+ AssertFailedReturn(NULL);
+
+ ID3D11Resource *pResource;
+
+ uint32_t const cidRequesting = pDXContext ? pDXContext->cid : DX_CID_BACKEND;
+ if (cidRequesting == pSurface->idAssociatedContext || pState->pBackend->fSingleDevice)
+ pResource = pBackendSurface->u.pResource;
+ else
+ {
+ /*
+ * Context, which as not created the surface, is requesting.
+ */
+ AssertReturn(pDXContext, NULL);
+
+ Assert(dxIsSurfaceShareable(pSurface));
+ Assert(pSurface->idAssociatedContext == DX_CID_BACKEND);
+
+ DXSHAREDTEXTURE *pSharedTexture = (DXSHAREDTEXTURE *)RTAvlU32Get(&pBackendSurface->SharedTextureTree, pDXContext->cid);
+ if (!pSharedTexture)
+ {
+ DXDEVICE *pDevice = dxDeviceFromContext(pState, pDXContext);
+ AssertReturn(pDevice->pDevice, NULL);
+
+ AssertReturn(pBackendSurface->SharedHandle, NULL);
+
+ /* This context has not yet opened the texture. */
+ pSharedTexture = (DXSHAREDTEXTURE *)RTMemAllocZ(sizeof(DXSHAREDTEXTURE));
+ AssertReturn(pSharedTexture, NULL);
+
+ pSharedTexture->Core.Key = pDXContext->cid;
+ bool const fSuccess = RTAvlU32Insert(&pBackendSurface->SharedTextureTree, &pSharedTexture->Core);
+ AssertReturn(fSuccess, NULL);
+
+ HRESULT hr = pDevice->pDevice->OpenSharedResource(pBackendSurface->SharedHandle, __uuidof(ID3D11Texture2D), (void**)&pSharedTexture->pTexture);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ pSharedTexture->sid = pSurface->id;
+ else
+ {
+ RTAvlU32Remove(&pBackendSurface->SharedTextureTree, pDXContext->cid);
+ RTMemFree(pSharedTexture);
+ return NULL;
+ }
+ }
+
+ pResource = pSharedTexture->pTexture;
+ }
+
+ /* Wait for drawing to finish. */
+ dxSurfaceWait(pState, pSurface, cidRequesting);
+
+ return pResource;
+}
+
+
+static uint32_t dxGetRenderTargetViewSid(PVMSVGA3DDXCONTEXT pDXContext, uint32_t renderTargetViewId)
+{
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, SVGA_ID_INVALID);
+
+ SVGACOTableDXRTViewEntry const *pRTViewEntry = &pDXContext->cot.paRTView[renderTargetViewId];
+ return pRTViewEntry->sid;
+}
+
+
+static SVGACOTableDXSRViewEntry const *dxGetShaderResourceViewEntry(PVMSVGA3DDXCONTEXT pDXContext, uint32_t shaderResourceViewId)
+{
+ ASSERT_GUEST_RETURN(shaderResourceViewId < pDXContext->cot.cSRView, NULL);
+
+ SVGACOTableDXSRViewEntry const *pSRViewEntry = &pDXContext->cot.paSRView[shaderResourceViewId];
+ return pSRViewEntry;
+}
+
+
+static SVGACOTableDXUAViewEntry const *dxGetUnorderedAccessViewEntry(PVMSVGA3DDXCONTEXT pDXContext, uint32_t uaViewId)
+{
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, NULL);
+
+ SVGACOTableDXUAViewEntry const *pUAViewEntry = &pDXContext->cot.paUAView[uaViewId];
+ return pUAViewEntry;
+}
+
+
+static SVGACOTableDXDSViewEntry const *dxGetDepthStencilViewEntry(PVMSVGA3DDXCONTEXT pDXContext, uint32_t depthStencilViewId)
+{
+ ASSERT_GUEST_RETURN(depthStencilViewId < pDXContext->cot.cDSView, NULL);
+
+ SVGACOTableDXDSViewEntry const *pDSViewEntry = &pDXContext->cot.paDSView[depthStencilViewId];
+ return pDSViewEntry;
+}
+
+
+static SVGACOTableDXRTViewEntry const *dxGetRenderTargetViewEntry(PVMSVGA3DDXCONTEXT pDXContext, uint32_t renderTargetViewId)
+{
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, NULL);
+
+ SVGACOTableDXRTViewEntry const *pRTViewEntry = &pDXContext->cot.paRTView[renderTargetViewId];
+ return pRTViewEntry;
+}
+
+
+static int dxTrackRenderTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ for (unsigned long i = 0; i < RT_ELEMENTS(pDXContext->svgaDXContext.renderState.renderTargetViewIds); ++i)
+ {
+ uint32_t const renderTargetViewId = pDXContext->svgaDXContext.renderState.renderTargetViewIds[i];
+ if (renderTargetViewId == SVGA_ID_INVALID)
+ continue;
+
+ uint32_t const sid = dxGetRenderTargetViewSid(pDXContext, renderTargetViewId);
+ LogFunc(("[%u] sid = %u, drawing cid = %u\n", i, sid, pDXContext->cid));
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ if (RT_SUCCESS(rc))
+ {
+ AssertContinue(pSurface->pBackendSurface);
+ pSurface->pBackendSurface->cidDrawing = pDXContext->cid;
+ }
+ }
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry, DXSHADER *pDXShader)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
+
+ /* Make D3D11_SO_DECLARATION_ENTRY array from SVGA3dStreamOutputDeclarationEntry. */
+ SVGA3dStreamOutputDeclarationEntry const *paDecls;
+ PVMSVGAMOB pMob = NULL;
+ if (pEntry->usesMob)
+ {
+ pMob = vmsvgaR3MobGet(pSvgaR3State, pEntry->mobid);
+ ASSERT_GUEST_RETURN(pMob, VERR_INVALID_PARAMETER);
+
+ /* Create a memory pointer for the MOB, which is accessible by host. */
+ int rc = vmsvgaR3MobBackingStoreCreate(pSvgaR3State, pMob, vmsvgaR3MobSize(pMob));
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ /* Get pointer to the shader bytecode. This will also verify the offset. */
+ paDecls = (SVGA3dStreamOutputDeclarationEntry const *)vmsvgaR3MobBackingStorePtr(pMob, pEntry->offsetInBytes);
+ AssertReturnStmt(paDecls, vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob), VERR_INTERNAL_ERROR);
+ }
+ else
+ paDecls = &pEntry->decl[0];
+
+ pDXStreamOutput->cDeclarationEntry = pEntry->numOutputStreamEntries;
+ for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
+ {
+ D3D11_SO_DECLARATION_ENTRY *pDst = &pDXStreamOutput->aDeclarationEntry[i];
+ SVGA3dStreamOutputDeclarationEntry const *pSrc = &paDecls[i];
+
+ uint32_t const registerMask = pSrc->registerMask & 0xF;
+ unsigned const iFirstBit = ASMBitFirstSetU32(registerMask);
+ unsigned const iLastBit = ASMBitLastSetU32(registerMask);
+
+ pDst->Stream = pSrc->stream;
+ pDst->SemanticName = NULL; /* Semantic name and index will be taken from the shader output declaration. */
+ pDst->SemanticIndex = 0;
+ pDst->StartComponent = iFirstBit > 0 ? iFirstBit - 1 : 0;
+ pDst->ComponentCount = iFirstBit > 0 ? iLastBit - (iFirstBit - 1) : 0;
+ pDst->OutputSlot = pSrc->outputSlot;
+ }
+
+ uint32_t MaxSemanticIndex = 0;
+ for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
+ {
+ D3D11_SO_DECLARATION_ENTRY *pDeclarationEntry = &pDXStreamOutput->aDeclarationEntry[i];
+ SVGA3dStreamOutputDeclarationEntry const *decl = &paDecls[i];
+
+ /* Find the corresponding register and mask in the GS shader output. */
+ int idxFound = -1;
+ for (uint32_t iOutputEntry = 0; iOutputEntry < pDXShader->shaderInfo.cOutputSignature; ++iOutputEntry)
+ {
+ SVGA3dDXSignatureEntry const *pOutputEntry = &pDXShader->shaderInfo.aOutputSignature[iOutputEntry];
+ if ( pOutputEntry->registerIndex == decl->registerIndex
+ && (decl->registerMask & ~pOutputEntry->mask) == 0) /* SO decl mask is a subset of shader output mask. */
+ {
+ idxFound = iOutputEntry;
+ break;
+ }
+ }
+
+ if (idxFound >= 0)
+ {
+ DXShaderAttributeSemantic const *pOutputSemantic = &pDXShader->shaderInfo.aOutputSemantic[idxFound];
+ pDeclarationEntry->SemanticName = pOutputSemantic->pcszSemanticName;
+ pDeclarationEntry->SemanticIndex = pOutputSemantic->SemanticIndex;
+ MaxSemanticIndex = RT_MAX(MaxSemanticIndex, pOutputSemantic->SemanticIndex);
+ }
+ else
+ AssertFailed();
+ }
+
+ /* A geometry shader may return components of the same register as different attributes:
+ *
+ * Output signature
+ * Name Index Mask Register
+ * ATTRIB 2 xy 2
+ * ATTRIB 3 z 2
+ *
+ * For ATTRIB 3 the stream output declaration expects StartComponent = 0 and ComponentCount = 1
+ * (not StartComponent = 2 and ComponentCount = 1):
+ *
+ * Stream output declaration
+ * SemanticName SemanticIndex StartComponent ComponentCount
+ * ATTRIB 2 0 2
+ * ATTRIB 3 0 1
+ *
+ * Stream output declaration can have multiple entries for the same attribute.
+ * In this case StartComponent is the offset within the attribute.
+ *
+ * Output signature
+ * Name Index Mask Register
+ * ATTRIB 0 xyzw 0
+ *
+ * Stream output declaration
+ * SemanticName SemanticIndex StartComponent ComponentCount
+ * ATTRIB 0 0 1
+ * ATTRIB 0 1 1
+ *
+ * StartComponent has been computed as the component offset in a register:
+ * 'StartComponent = iFirstBit > 0 ? iFirstBit - 1 : 0;'.
+ *
+ * StartComponent must be the offset in an attribute.
+ */
+ for (uint32_t SemanticIndex = 0; SemanticIndex <= MaxSemanticIndex; ++SemanticIndex)
+ {
+ /* Find minimum StartComponent value for this attribute. */
+ uint32_t MinStartComponent = UINT32_MAX;
+ for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
+ {
+ D3D11_SO_DECLARATION_ENTRY *pDeclarationEntry = &pDXStreamOutput->aDeclarationEntry[i];
+ if (pDeclarationEntry->SemanticIndex == SemanticIndex)
+ MinStartComponent = RT_MIN(MinStartComponent, pDeclarationEntry->StartComponent);
+ }
+
+ AssertContinue(MinStartComponent != UINT32_MAX);
+
+ /* Adjust the StartComponent to start from 0 for this attribute. */
+ for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
+ {
+ D3D11_SO_DECLARATION_ENTRY *pDeclarationEntry = &pDXStreamOutput->aDeclarationEntry[i];
+ if (pDeclarationEntry->SemanticIndex == SemanticIndex)
+ pDeclarationEntry->StartComponent -= MinStartComponent;
+ }
+ }
+
+ if (pMob)
+ vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob);
+
+ return VINF_SUCCESS;
+}
+
+static void dxDestroyStreamOutput(DXSTREAMOUTPUT *pDXStreamOutput)
+{
+ RT_ZERO(*pDXStreamOutput);
+}
+
+static D3D11_BLEND dxBlendFactorAlpha(uint8_t svgaBlend)
+{
+ /* "Blend options that end in _COLOR are not allowed." but the guest sometimes sends them. */
+ switch (svgaBlend)
+ {
+ case SVGA3D_BLENDOP_ZERO: return D3D11_BLEND_ZERO;
+ case SVGA3D_BLENDOP_ONE: return D3D11_BLEND_ONE;
+ case SVGA3D_BLENDOP_SRCCOLOR: return D3D11_BLEND_SRC_ALPHA;
+ case SVGA3D_BLENDOP_INVSRCCOLOR: return D3D11_BLEND_INV_SRC_ALPHA;
+ case SVGA3D_BLENDOP_SRCALPHA: return D3D11_BLEND_SRC_ALPHA;
+ case SVGA3D_BLENDOP_INVSRCALPHA: return D3D11_BLEND_INV_SRC_ALPHA;
+ case SVGA3D_BLENDOP_DESTALPHA: return D3D11_BLEND_DEST_ALPHA;
+ case SVGA3D_BLENDOP_INVDESTALPHA: return D3D11_BLEND_INV_DEST_ALPHA;
+ case SVGA3D_BLENDOP_DESTCOLOR: return D3D11_BLEND_DEST_ALPHA;
+ case SVGA3D_BLENDOP_INVDESTCOLOR: return D3D11_BLEND_INV_DEST_ALPHA;
+ case SVGA3D_BLENDOP_SRCALPHASAT: return D3D11_BLEND_SRC_ALPHA_SAT;
+ case SVGA3D_BLENDOP_BLENDFACTOR: return D3D11_BLEND_BLEND_FACTOR;
+ case SVGA3D_BLENDOP_INVBLENDFACTOR: return D3D11_BLEND_INV_BLEND_FACTOR;
+ case SVGA3D_BLENDOP_SRC1COLOR: return D3D11_BLEND_SRC1_ALPHA;
+ case SVGA3D_BLENDOP_INVSRC1COLOR: return D3D11_BLEND_INV_SRC1_ALPHA;
+ case SVGA3D_BLENDOP_SRC1ALPHA: return D3D11_BLEND_SRC1_ALPHA;
+ case SVGA3D_BLENDOP_INVSRC1ALPHA: return D3D11_BLEND_INV_SRC1_ALPHA;
+ case SVGA3D_BLENDOP_BLENDFACTORALPHA: return D3D11_BLEND_BLEND_FACTOR;
+ case SVGA3D_BLENDOP_INVBLENDFACTORALPHA: return D3D11_BLEND_INV_BLEND_FACTOR;
+ default:
+ break;
+ }
+ return D3D11_BLEND_ZERO;
+}
+
+
+static D3D11_BLEND dxBlendFactorColor(uint8_t svgaBlend)
+{
+ switch (svgaBlend)
+ {
+ case SVGA3D_BLENDOP_ZERO: return D3D11_BLEND_ZERO;
+ case SVGA3D_BLENDOP_ONE: return D3D11_BLEND_ONE;
+ case SVGA3D_BLENDOP_SRCCOLOR: return D3D11_BLEND_SRC_COLOR;
+ case SVGA3D_BLENDOP_INVSRCCOLOR: return D3D11_BLEND_INV_SRC_COLOR;
+ case SVGA3D_BLENDOP_SRCALPHA: return D3D11_BLEND_SRC_ALPHA;
+ case SVGA3D_BLENDOP_INVSRCALPHA: return D3D11_BLEND_INV_SRC_ALPHA;
+ case SVGA3D_BLENDOP_DESTALPHA: return D3D11_BLEND_DEST_ALPHA;
+ case SVGA3D_BLENDOP_INVDESTALPHA: return D3D11_BLEND_INV_DEST_ALPHA;
+ case SVGA3D_BLENDOP_DESTCOLOR: return D3D11_BLEND_DEST_COLOR;
+ case SVGA3D_BLENDOP_INVDESTCOLOR: return D3D11_BLEND_INV_DEST_COLOR;
+ case SVGA3D_BLENDOP_SRCALPHASAT: return D3D11_BLEND_SRC_ALPHA_SAT;
+ case SVGA3D_BLENDOP_BLENDFACTOR: return D3D11_BLEND_BLEND_FACTOR;
+ case SVGA3D_BLENDOP_INVBLENDFACTOR: return D3D11_BLEND_INV_BLEND_FACTOR;
+ case SVGA3D_BLENDOP_SRC1COLOR: return D3D11_BLEND_SRC1_COLOR;
+ case SVGA3D_BLENDOP_INVSRC1COLOR: return D3D11_BLEND_INV_SRC1_COLOR;
+ case SVGA3D_BLENDOP_SRC1ALPHA: return D3D11_BLEND_SRC1_ALPHA;
+ case SVGA3D_BLENDOP_INVSRC1ALPHA: return D3D11_BLEND_INV_SRC1_ALPHA;
+ case SVGA3D_BLENDOP_BLENDFACTORALPHA: return D3D11_BLEND_BLEND_FACTOR;
+ case SVGA3D_BLENDOP_INVBLENDFACTORALPHA: return D3D11_BLEND_INV_BLEND_FACTOR;
+ default:
+ break;
+ }
+ return D3D11_BLEND_ZERO;
+}
+
+
+static D3D11_BLEND_OP dxBlendOp(uint8_t svgaBlendEq)
+{
+ return (D3D11_BLEND_OP)svgaBlendEq;
+}
+
+
+/** @todo AssertCompile for types like D3D11_COMPARISON_FUNC and SVGA3dComparisonFunc */
+static HRESULT dxBlendStateCreate(DXDEVICE *pDevice, SVGACOTableDXBlendStateEntry const *pEntry, ID3D11BlendState **pp)
+{
+ D3D11_BLEND_DESC BlendDesc;
+ BlendDesc.AlphaToCoverageEnable = RT_BOOL(pEntry->alphaToCoverageEnable);
+ BlendDesc.IndependentBlendEnable = RT_BOOL(pEntry->independentBlendEnable);
+ for (int i = 0; i < SVGA3D_MAX_RENDER_TARGETS; ++i)
+ {
+ BlendDesc.RenderTarget[i].BlendEnable = RT_BOOL(pEntry->perRT[i].blendEnable);
+ BlendDesc.RenderTarget[i].SrcBlend = dxBlendFactorColor(pEntry->perRT[i].srcBlend);
+ BlendDesc.RenderTarget[i].DestBlend = dxBlendFactorColor(pEntry->perRT[i].destBlend);
+ BlendDesc.RenderTarget[i].BlendOp = dxBlendOp (pEntry->perRT[i].blendOp);
+ BlendDesc.RenderTarget[i].SrcBlendAlpha = dxBlendFactorAlpha(pEntry->perRT[i].srcBlendAlpha);
+ BlendDesc.RenderTarget[i].DestBlendAlpha = dxBlendFactorAlpha(pEntry->perRT[i].destBlendAlpha);
+ BlendDesc.RenderTarget[i].BlendOpAlpha = dxBlendOp (pEntry->perRT[i].blendOpAlpha);
+ BlendDesc.RenderTarget[i].RenderTargetWriteMask = pEntry->perRT[i].renderTargetWriteMask;
+ /** @todo logicOpEnable and logicOp */
+ }
+
+ HRESULT hr = pDevice->pDevice->CreateBlendState(&BlendDesc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxDepthStencilStateCreate(DXDEVICE *pDevice, SVGACOTableDXDepthStencilEntry const *pEntry, ID3D11DepthStencilState **pp)
+{
+ D3D11_DEPTH_STENCIL_DESC desc;
+ desc.DepthEnable = pEntry->depthEnable;
+ desc.DepthWriteMask = (D3D11_DEPTH_WRITE_MASK)pEntry->depthWriteMask;
+ desc.DepthFunc = (D3D11_COMPARISON_FUNC)pEntry->depthFunc;
+ desc.StencilEnable = pEntry->stencilEnable;
+ desc.StencilReadMask = pEntry->stencilReadMask;
+ desc.StencilWriteMask = pEntry->stencilWriteMask;
+ desc.FrontFace.StencilFailOp = (D3D11_STENCIL_OP)pEntry->frontStencilFailOp;
+ desc.FrontFace.StencilDepthFailOp = (D3D11_STENCIL_OP)pEntry->frontStencilDepthFailOp;
+ desc.FrontFace.StencilPassOp = (D3D11_STENCIL_OP)pEntry->frontStencilPassOp;
+ desc.FrontFace.StencilFunc = (D3D11_COMPARISON_FUNC)pEntry->frontStencilFunc;
+ desc.BackFace.StencilFailOp = (D3D11_STENCIL_OP)pEntry->backStencilFailOp;
+ desc.BackFace.StencilDepthFailOp = (D3D11_STENCIL_OP)pEntry->backStencilDepthFailOp;
+ desc.BackFace.StencilPassOp = (D3D11_STENCIL_OP)pEntry->backStencilPassOp;
+ desc.BackFace.StencilFunc = (D3D11_COMPARISON_FUNC)pEntry->backStencilFunc;
+ /** @todo frontEnable, backEnable */
+
+ HRESULT hr = pDevice->pDevice->CreateDepthStencilState(&desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxSamplerStateCreate(DXDEVICE *pDevice, SVGACOTableDXSamplerEntry const *pEntry, ID3D11SamplerState **pp)
+{
+ D3D11_SAMPLER_DESC desc;
+ /* Guest sometimes sends inconsistent (from D3D11 point of view) set of filter flags. */
+ if (pEntry->filter & SVGA3D_FILTER_ANISOTROPIC)
+ desc.Filter = (pEntry->filter & SVGA3D_FILTER_COMPARE)
+ ? D3D11_FILTER_COMPARISON_ANISOTROPIC
+ : D3D11_FILTER_ANISOTROPIC;
+ else
+ desc.Filter = (D3D11_FILTER)pEntry->filter;
+ desc.AddressU = (D3D11_TEXTURE_ADDRESS_MODE)pEntry->addressU;
+ desc.AddressV = (D3D11_TEXTURE_ADDRESS_MODE)pEntry->addressV;
+ desc.AddressW = (D3D11_TEXTURE_ADDRESS_MODE)pEntry->addressW;
+ desc.MipLODBias = pEntry->mipLODBias;
+ desc.MaxAnisotropy = RT_CLAMP(pEntry->maxAnisotropy, 1, 16); /* "Valid values are between 1 and 16" */
+ desc.ComparisonFunc = (D3D11_COMPARISON_FUNC)pEntry->comparisonFunc;
+ desc.BorderColor[0] = pEntry->borderColor.value[0];
+ desc.BorderColor[1] = pEntry->borderColor.value[1];
+ desc.BorderColor[2] = pEntry->borderColor.value[2];
+ desc.BorderColor[3] = pEntry->borderColor.value[3];
+ desc.MinLOD = pEntry->minLOD;
+ desc.MaxLOD = pEntry->maxLOD;
+
+ HRESULT hr = pDevice->pDevice->CreateSamplerState(&desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static D3D11_FILL_MODE dxFillMode(uint8_t svgaFillMode)
+{
+ if (svgaFillMode == SVGA3D_FILLMODE_POINT)
+ return D3D11_FILL_WIREFRAME;
+ return (D3D11_FILL_MODE)svgaFillMode;
+}
+
+
+static HRESULT dxRasterizerStateCreate(DXDEVICE *pDevice, SVGACOTableDXRasterizerStateEntry const *pEntry, ID3D11RasterizerState **pp)
+{
+ D3D11_RASTERIZER_DESC desc;
+ desc.FillMode = dxFillMode(pEntry->fillMode);
+ desc.CullMode = (D3D11_CULL_MODE)pEntry->cullMode;
+ desc.FrontCounterClockwise = pEntry->frontCounterClockwise;
+ /** @todo provokingVertexLast */
+ desc.DepthBias = pEntry->depthBias;
+ desc.DepthBiasClamp = pEntry->depthBiasClamp;
+ desc.SlopeScaledDepthBias = pEntry->slopeScaledDepthBias;
+ desc.DepthClipEnable = pEntry->depthClipEnable;
+ desc.ScissorEnable = pEntry->scissorEnable;
+ desc.MultisampleEnable = pEntry->multisampleEnable;
+ desc.AntialiasedLineEnable = pEntry->antialiasedLineEnable;
+ /** @todo lineWidth lineStippleEnable lineStippleFactor lineStipplePattern forcedSampleCount */
+
+ HRESULT hr = pDevice->pDevice->CreateRasterizerState(&desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxRenderTargetViewCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableDXRTViewEntry const *pEntry, VMSVGA3DSURFACE *pSurface, ID3D11RenderTargetView **pp)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+
+ ID3D11Resource *pResource = dxResource(pThisCC->svga.p3dState, pSurface, pDXContext);
+
+ D3D11_RENDER_TARGET_VIEW_DESC desc;
+ RT_ZERO(desc);
+ desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
+ AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
+ switch (pEntry->resourceDimension)
+ {
+ case SVGA3D_RESOURCE_BUFFER:
+ desc.ViewDimension = D3D11_RTV_DIMENSION_BUFFER;
+ desc.Buffer.FirstElement = pEntry->desc.buffer.firstElement;
+ desc.Buffer.NumElements = pEntry->desc.buffer.numElements;
+ break;
+ case SVGA3D_RESOURCE_TEXTURE1D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE1D;
+ desc.Texture1D.MipSlice = pEntry->desc.tex.mipSlice;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE1DARRAY;
+ desc.Texture1DArray.MipSlice = pEntry->desc.tex.mipSlice;
+ desc.Texture1DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
+ desc.Texture1DArray.ArraySize = pEntry->desc.tex.arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE2D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MipSlice = pEntry->desc.tex.mipSlice;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.MipSlice = pEntry->desc.tex.mipSlice;
+ desc.Texture2DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
+ desc.Texture2DArray.ArraySize = pEntry->desc.tex.arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE3D:
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
+ desc.Texture3D.MipSlice = pEntry->desc.tex3D.mipSlice;
+ desc.Texture3D.FirstWSlice = pEntry->desc.tex3D.firstW;
+ desc.Texture3D.WSize = pEntry->desc.tex3D.wSize;
+ break;
+ case SVGA3D_RESOURCE_TEXTURECUBE:
+ AssertFailed(); /** @todo test. Probably not applicable to a render target view. */
+ desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.MipSlice = pEntry->desc.tex.mipSlice;
+ desc.Texture2DArray.FirstArraySlice = 0;
+ desc.Texture2DArray.ArraySize = 6;
+ break;
+ case SVGA3D_RESOURCE_BUFFEREX:
+ AssertFailed(); /** @todo test. Probably not applicable to a render target view. */
+ desc.ViewDimension = D3D11_RTV_DIMENSION_BUFFER;
+ desc.Buffer.FirstElement = pEntry->desc.buffer.firstElement;
+ desc.Buffer.NumElements = pEntry->desc.buffer.numElements;
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
+ }
+
+ HRESULT hr = pDevice->pDevice->CreateRenderTargetView(pResource, &desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxShaderResourceViewCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableDXSRViewEntry const *pEntry, VMSVGA3DSURFACE *pSurface, ID3D11ShaderResourceView **pp)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+
+ ID3D11Resource *pResource = dxResource(pThisCC->svga.p3dState, pSurface, pDXContext);
+
+ D3D11_SHADER_RESOURCE_VIEW_DESC desc;
+ RT_ZERO(desc);
+ desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
+ AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
+
+ switch (pEntry->resourceDimension)
+ {
+ case SVGA3D_RESOURCE_BUFFER:
+ desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
+ desc.Buffer.FirstElement = pEntry->desc.buffer.firstElement;
+ desc.Buffer.NumElements = pEntry->desc.buffer.numElements;
+ break;
+ case SVGA3D_RESOURCE_TEXTURE1D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1D;
+ desc.Texture1D.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.Texture1D.MipLevels = pEntry->desc.tex.mipLevels;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE1DARRAY;
+ desc.Texture1DArray.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.Texture1DArray.MipLevels = pEntry->desc.tex.mipLevels;
+ desc.Texture1DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
+ desc.Texture1DArray.ArraySize = pEntry->desc.tex.arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE2D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.Texture2D.MipLevels = pEntry->desc.tex.mipLevels;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.Texture2DArray.MipLevels = pEntry->desc.tex.mipLevels;
+ desc.Texture2DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
+ desc.Texture2DArray.ArraySize = pEntry->desc.tex.arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE3D:
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;
+ desc.Texture3D.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.Texture3D.MipLevels = pEntry->desc.tex.mipLevels;
+ break;
+ case SVGA3D_RESOURCE_TEXTURECUBE:
+ if (pSurface->surfaceDesc.numArrayElements <= 6)
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE;
+ desc.TextureCube.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.TextureCube.MipLevels = pEntry->desc.tex.mipLevels;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBEARRAY;
+ desc.TextureCubeArray.MostDetailedMip = pEntry->desc.tex.mostDetailedMip;
+ desc.TextureCubeArray.MipLevels = pEntry->desc.tex.mipLevels;
+ desc.TextureCubeArray.First2DArrayFace = pEntry->desc.tex.firstArraySlice;
+ desc.TextureCubeArray.NumCubes = pEntry->desc.tex.arraySize / 6;
+ }
+ break;
+ case SVGA3D_RESOURCE_BUFFEREX:
+ AssertFailed(); /** @todo test. */
+ desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX;
+ desc.BufferEx.FirstElement = pEntry->desc.bufferex.firstElement;
+ desc.BufferEx.NumElements = pEntry->desc.bufferex.numElements;
+ desc.BufferEx.Flags = pEntry->desc.bufferex.flags;
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
+ }
+
+ HRESULT hr = pDevice->pDevice->CreateShaderResourceView(pResource, &desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxUnorderedAccessViewCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableDXUAViewEntry const *pEntry, VMSVGA3DSURFACE *pSurface, ID3D11UnorderedAccessView **pp)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+
+ ID3D11Resource *pResource = dxResource(pThisCC->svga.p3dState, pSurface, pDXContext);
+
+ D3D11_UNORDERED_ACCESS_VIEW_DESC desc;
+ RT_ZERO(desc);
+ desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
+ AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
+
+ switch (pEntry->resourceDimension)
+ {
+ case SVGA3D_RESOURCE_BUFFER:
+ desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
+ desc.Buffer.FirstElement = pEntry->desc.buffer.firstElement;
+ desc.Buffer.NumElements = pEntry->desc.buffer.numElements;
+ desc.Buffer.Flags = pEntry->desc.buffer.flags;
+ break;
+ case SVGA3D_RESOURCE_TEXTURE1D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE1D;
+ desc.Texture1D.MipSlice = pEntry->desc.tex.mipSlice;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE1DARRAY;
+ desc.Texture1DArray.MipSlice = pEntry->desc.tex.mipSlice;
+ desc.Texture1DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
+ desc.Texture1DArray.ArraySize = pEntry->desc.tex.arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE2D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MipSlice = pEntry->desc.tex.mipSlice;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.MipSlice = pEntry->desc.tex.mipSlice;
+ desc.Texture2DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
+ desc.Texture2DArray.ArraySize = pEntry->desc.tex.arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE3D:
+ desc.Texture3D.MipSlice = pEntry->desc.tex3D.mipSlice;
+ desc.Texture3D.FirstWSlice = pEntry->desc.tex3D.firstW;
+ desc.Texture3D.WSize = pEntry->desc.tex3D.wSize;
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
+ }
+
+ HRESULT hr = pDevice->pDevice->CreateUnorderedAccessView(pResource, &desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxDepthStencilViewCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableDXDSViewEntry const *pEntry, VMSVGA3DSURFACE *pSurface, ID3D11DepthStencilView **pp)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+
+ ID3D11Resource *pResource = dxResource(pThisCC->svga.p3dState, pSurface, pDXContext);
+
+ D3D11_DEPTH_STENCIL_VIEW_DESC desc;
+ RT_ZERO(desc);
+ desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
+ AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
+ desc.Flags = pEntry->flags;
+ switch (pEntry->resourceDimension)
+ {
+ case SVGA3D_RESOURCE_TEXTURE1D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE1D;
+ desc.Texture1D.MipSlice = pEntry->mipSlice;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE1DARRAY;
+ desc.Texture1DArray.MipSlice = pEntry->mipSlice;
+ desc.Texture1DArray.FirstArraySlice = pEntry->firstArraySlice;
+ desc.Texture1DArray.ArraySize = pEntry->arraySize;
+ }
+ break;
+ case SVGA3D_RESOURCE_TEXTURE2D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ {
+ desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
+ desc.Texture2D.MipSlice = pEntry->mipSlice;
+ }
+ else
+ {
+ desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2DARRAY;
+ desc.Texture2DArray.MipSlice = pEntry->mipSlice;
+ desc.Texture2DArray.FirstArraySlice = pEntry->firstArraySlice;
+ desc.Texture2DArray.ArraySize = pEntry->arraySize;
+ }
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
+ }
+
+ HRESULT hr = pDevice->pDevice->CreateDepthStencilView(pResource, &desc, pp);
+ Assert(SUCCEEDED(hr));
+ return hr;
+}
+
+
+static HRESULT dxShaderCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+
+ HRESULT hr = S_OK;
+
+ switch (pDXShader->enmShaderType)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ hr = pDevice->pDevice->CreateVertexShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pVertexShader);
+ Assert(SUCCEEDED(hr));
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ hr = pDevice->pDevice->CreatePixelShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pPixelShader);
+ Assert(SUCCEEDED(hr));
+ break;
+ case SVGA3D_SHADERTYPE_GS:
+ {
+ SVGA3dStreamOutputId const soid = pDXContext->svgaDXContext.streamOut.soid;
+ if (soid == SVGA_ID_INVALID)
+ {
+ hr = pDevice->pDevice->CreateGeometryShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pGeometryShader);
+ Assert(SUCCEEDED(hr));
+ }
+ else
+ {
+ ASSERT_GUEST_RETURN(soid < pDXContext->pBackendDXContext->cStreamOutput, E_INVALIDARG);
+
+ SVGACOTableDXStreamOutputEntry const *pEntry = &pDXContext->cot.paStreamOutput[soid];
+ DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
+
+ hr = pDevice->pDevice->CreateGeometryShaderWithStreamOutput(pDXShader->pvDXBC, pDXShader->cbDXBC,
+ pDXStreamOutput->aDeclarationEntry, pDXStreamOutput->cDeclarationEntry,
+ pEntry->numOutputStreamStrides ? pEntry->streamOutputStrideInBytes : NULL, pEntry->numOutputStreamStrides,
+ pEntry->rasterizedStream,
+ /*pClassLinkage=*/ NULL, &pDXShader->pGeometryShader);
+ AssertBreak(SUCCEEDED(hr));
+
+ pDXShader->soid = soid;
+ }
+ break;
+ }
+ case SVGA3D_SHADERTYPE_HS:
+ hr = pDevice->pDevice->CreateHullShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pHullShader);
+ Assert(SUCCEEDED(hr));
+ break;
+ case SVGA3D_SHADERTYPE_DS:
+ hr = pDevice->pDevice->CreateDomainShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pDomainShader);
+ Assert(SUCCEEDED(hr));
+ break;
+ case SVGA3D_SHADERTYPE_CS:
+ hr = pDevice->pDevice->CreateComputeShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pComputeShader);
+ Assert(SUCCEEDED(hr));
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
+ }
+
+ return hr;
+}
+
+
+static void dxShaderSet(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderType type, DXSHADER *pDXShader)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ pDevice->pImmediateContext->VSSetShader(pDXShader ? pDXShader->pVertexShader : NULL, NULL, 0);
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ pDevice->pImmediateContext->PSSetShader(pDXShader ? pDXShader->pPixelShader : NULL, NULL, 0);
+ break;
+ case SVGA3D_SHADERTYPE_GS:
+ {
+ Assert(!pDXShader || (pDXShader->soid == pDXContext->svgaDXContext.streamOut.soid));
+ pDevice->pImmediateContext->GSSetShader(pDXShader ? pDXShader->pGeometryShader : NULL, NULL, 0);
+ } break;
+ case SVGA3D_SHADERTYPE_HS:
+ pDevice->pImmediateContext->HSSetShader(pDXShader ? pDXShader->pHullShader : NULL, NULL, 0);
+ break;
+ case SVGA3D_SHADERTYPE_DS:
+ pDevice->pImmediateContext->DSSetShader(pDXShader ? pDXShader->pDomainShader : NULL, NULL, 0);
+ break;
+ case SVGA3D_SHADERTYPE_CS:
+ pDevice->pImmediateContext->CSSetShader(pDXShader ? pDXShader->pComputeShader : NULL, NULL, 0);
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN_VOID();
+ }
+}
+
+
+static void dxConstantBufferSet(DXDEVICE *pDevice, uint32_t slot, SVGA3dShaderType type, ID3D11Buffer *pConstantBuffer)
+{
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ pDevice->pImmediateContext->VSSetConstantBuffers(slot, 1, &pConstantBuffer);
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ pDevice->pImmediateContext->PSSetConstantBuffers(slot, 1, &pConstantBuffer);
+ break;
+ case SVGA3D_SHADERTYPE_GS:
+ pDevice->pImmediateContext->GSSetConstantBuffers(slot, 1, &pConstantBuffer);
+ break;
+ case SVGA3D_SHADERTYPE_HS:
+ pDevice->pImmediateContext->HSSetConstantBuffers(slot, 1, &pConstantBuffer);
+ break;
+ case SVGA3D_SHADERTYPE_DS:
+ pDevice->pImmediateContext->DSSetConstantBuffers(slot, 1, &pConstantBuffer);
+ break;
+ case SVGA3D_SHADERTYPE_CS:
+ pDevice->pImmediateContext->CSSetConstantBuffers(slot, 1, &pConstantBuffer);
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN_VOID();
+ }
+}
+
+
+static void dxSamplerSet(DXDEVICE *pDevice, SVGA3dShaderType type, uint32_t startSampler, uint32_t cSampler, ID3D11SamplerState * const *papSampler)
+{
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ pDevice->pImmediateContext->VSSetSamplers(startSampler, cSampler, papSampler);
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ pDevice->pImmediateContext->PSSetSamplers(startSampler, cSampler, papSampler);
+ break;
+ case SVGA3D_SHADERTYPE_GS:
+ pDevice->pImmediateContext->GSSetSamplers(startSampler, cSampler, papSampler);
+ break;
+ case SVGA3D_SHADERTYPE_HS:
+ pDevice->pImmediateContext->HSSetSamplers(startSampler, cSampler, papSampler);
+ break;
+ case SVGA3D_SHADERTYPE_DS:
+ pDevice->pImmediateContext->DSSetSamplers(startSampler, cSampler, papSampler);
+ break;
+ case SVGA3D_SHADERTYPE_CS:
+ pDevice->pImmediateContext->CSSetSamplers(startSampler, cSampler, papSampler);
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN_VOID();
+ }
+}
+
+
+static void dxShaderResourceViewSet(DXDEVICE *pDevice, SVGA3dShaderType type, uint32_t startView, uint32_t cShaderResourceView, ID3D11ShaderResourceView * const *papShaderResourceView)
+{
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ pDevice->pImmediateContext->VSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ pDevice->pImmediateContext->PSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
+ break;
+ case SVGA3D_SHADERTYPE_GS:
+ pDevice->pImmediateContext->GSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
+ break;
+ case SVGA3D_SHADERTYPE_HS:
+ pDevice->pImmediateContext->HSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
+ break;
+ case SVGA3D_SHADERTYPE_DS:
+ pDevice->pImmediateContext->DSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
+ break;
+ case SVGA3D_SHADERTYPE_CS:
+ pDevice->pImmediateContext->CSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN_VOID();
+ }
+}
+
+
+static void dxCSUnorderedAccessViewSet(DXDEVICE *pDevice, uint32_t startView, uint32_t cView, ID3D11UnorderedAccessView * const *papUnorderedAccessView, UINT *pUAVInitialCounts)
+{
+ pDevice->pImmediateContext->CSSetUnorderedAccessViews(startView, cView, papUnorderedAccessView, pUAVInitialCounts);
+}
+
+
+static int dxBackendSurfaceAlloc(PVMSVGA3DBACKENDSURFACE *ppBackendSurface)
+{
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = (PVMSVGA3DBACKENDSURFACE)RTMemAllocZ(sizeof(VMSVGA3DBACKENDSURFACE));
+ AssertPtrReturn(pBackendSurface, VERR_NO_MEMORY);
+ pBackendSurface->cidDrawing = SVGA_ID_INVALID;
+ RTListInit(&pBackendSurface->listView);
+ *ppBackendSurface = pBackendSurface;
+ return VINF_SUCCESS;
+}
+
+
+static HRESULT dxInitSharedHandle(PVMSVGA3DBACKEND pBackend, PVMSVGA3DBACKENDSURFACE pBackendSurface)
+{
+ if (pBackend->fSingleDevice)
+ return S_OK;
+
+ /* Get the shared handle. */
+ IDXGIResource *pDxgiResource = NULL;
+ HRESULT hr = pBackendSurface->u.pResource->QueryInterface(__uuidof(IDXGIResource), (void**)&pDxgiResource);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ hr = pDxgiResource->GetSharedHandle(&pBackendSurface->SharedHandle);
+ Assert(SUCCEEDED(hr));
+ D3D_RELEASE(pDxgiResource);
+ }
+
+ return hr;
+}
+
+
+static int vmsvga3dBackSurfaceCreateScreenTarget(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface)
+{
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = p3dState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ DXDEVICE *pDXDevice = &pBackend->dxDevice;
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Surface must have SCREEN_TARGET flag. */
+ ASSERT_GUEST_RETURN(RT_BOOL(pSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET), VERR_INVALID_PARAMETER);
+
+ if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ AssertFailed(); /* Should the function not be used like that? */
+ vmsvga3dBackSurfaceDestroy(pThisCC, false, pSurface);
+ }
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+ int rc = dxBackendSurfaceAlloc(&pBackendSurface);
+ AssertRCReturn(rc, rc);
+
+ D3D11_TEXTURE2D_DESC td;
+ RT_ZERO(td);
+ td.Width = pSurface->paMipmapLevels[0].mipmapSize.width;
+ td.Height = pSurface->paMipmapLevels[0].mipmapSize.height;
+ Assert(pSurface->cLevels == 1);
+ td.MipLevels = 1;
+ td.ArraySize = 1;
+ td.Format = vmsvgaDXSurfaceFormat2Dxgi(pSurface->format);
+ td.SampleDesc.Count = 1;
+ td.SampleDesc.Quality = 0;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
+ td.CPUAccessFlags = 0;
+ td.MiscFlags = pBackend->fSingleDevice ? 0 : D3D11_RESOURCE_MISC_SHARED;
+
+ HRESULT hr = pDXDevice->pDevice->CreateTexture2D(&td, 0, &pBackendSurface->u.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ /* Map-able texture. */
+ td.Usage = D3D11_USAGE_DYNAMIC;
+ td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, 0, &pBackendSurface->dynamic.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Staging texture. */
+ td.Usage = D3D11_USAGE_STAGING;
+ td.BindFlags = 0; /* No flags allowed. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, 0, &pBackendSurface->staging.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ hr = dxInitSharedHandle(pBackend, pBackendSurface);
+
+ if (SUCCEEDED(hr))
+ {
+ /*
+ * Success.
+ */
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_SCREEN_TARGET;
+ pBackendSurface->enmDxgiFormat = td.Format;
+ pSurface->pBackendSurface = pBackendSurface;
+ pSurface->idAssociatedContext = DX_CID_BACKEND;
+ return VINF_SUCCESS;
+ }
+
+ /* Failure. */
+ D3D_RELEASE(pBackendSurface->staging.pTexture2D);
+ D3D_RELEASE(pBackendSurface->dynamic.pTexture2D);
+ D3D_RELEASE(pBackendSurface->u.pTexture2D);
+ RTMemFree(pBackendSurface);
+ return VERR_NO_MEMORY;
+}
+
+
+static UINT dxBindFlags(SVGA3dSurfaceAllFlags surfaceFlags)
+{
+ /* Catch unimplemented flags. */
+ Assert(!RT_BOOL(surfaceFlags & (SVGA3D_SURFACE_BIND_LOGICOPS | SVGA3D_SURFACE_BIND_RAW_VIEWS)));
+
+ UINT BindFlags = 0;
+
+ if (surfaceFlags & (SVGA3D_SURFACE_BIND_VERTEX_BUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER))
+ BindFlags |= D3D11_BIND_VERTEX_BUFFER;
+ if (surfaceFlags & (SVGA3D_SURFACE_BIND_INDEX_BUFFER | SVGA3D_SURFACE_HINT_INDEXBUFFER))
+ BindFlags |= D3D11_BIND_INDEX_BUFFER;
+ if (surfaceFlags & SVGA3D_SURFACE_BIND_CONSTANT_BUFFER) BindFlags |= D3D11_BIND_CONSTANT_BUFFER;
+ if (surfaceFlags & SVGA3D_SURFACE_BIND_SHADER_RESOURCE) BindFlags |= D3D11_BIND_SHADER_RESOURCE;
+ if (surfaceFlags & SVGA3D_SURFACE_BIND_RENDER_TARGET) BindFlags |= D3D11_BIND_RENDER_TARGET;
+ if (surfaceFlags & SVGA3D_SURFACE_BIND_DEPTH_STENCIL) BindFlags |= D3D11_BIND_DEPTH_STENCIL;
+ if (surfaceFlags & SVGA3D_SURFACE_BIND_STREAM_OUTPUT) BindFlags |= D3D11_BIND_STREAM_OUTPUT;
+ if (surfaceFlags & SVGA3D_SURFACE_BIND_UAVIEW) BindFlags |= D3D11_BIND_UNORDERED_ACCESS;
+
+ return BindFlags;
+}
+
+
+static DXDEVICE *dxSurfaceDevice(PVMSVGA3DSTATE p3dState, PVMSVGA3DSURFACE pSurface, PVMSVGA3DDXCONTEXT pDXContext, UINT *pMiscFlags)
+{
+ if (p3dState->pBackend->fSingleDevice)
+ {
+ *pMiscFlags = 0;
+ return &p3dState->pBackend->dxDevice;
+ }
+
+ if (dxIsSurfaceShareable(pSurface))
+ {
+ *pMiscFlags = D3D11_RESOURCE_MISC_SHARED;
+ return &p3dState->pBackend->dxDevice;
+ }
+
+ *pMiscFlags = 0;
+ return &pDXContext->pBackendDXContext->dxDevice;
+}
+
+
+static DXGI_FORMAT dxGetDxgiTypelessFormat(DXGI_FORMAT dxgiFormat)
+{
+ switch (dxgiFormat)
+ {
+ case DXGI_FORMAT_R32G32B32A32_FLOAT:
+ case DXGI_FORMAT_R32G32B32A32_UINT:
+ case DXGI_FORMAT_R32G32B32A32_SINT:
+ return DXGI_FORMAT_R32G32B32A32_TYPELESS; /* 1 */
+ case DXGI_FORMAT_R32G32B32_FLOAT:
+ case DXGI_FORMAT_R32G32B32_UINT:
+ case DXGI_FORMAT_R32G32B32_SINT:
+ return DXGI_FORMAT_R32G32B32_TYPELESS; /* 5 */
+ case DXGI_FORMAT_R16G16B16A16_FLOAT:
+ case DXGI_FORMAT_R16G16B16A16_UNORM:
+ case DXGI_FORMAT_R16G16B16A16_UINT:
+ case DXGI_FORMAT_R16G16B16A16_SNORM:
+ case DXGI_FORMAT_R16G16B16A16_SINT:
+ return DXGI_FORMAT_R16G16B16A16_TYPELESS; /* 9 */
+ case DXGI_FORMAT_R32G32_FLOAT:
+ case DXGI_FORMAT_R32G32_UINT:
+ case DXGI_FORMAT_R32G32_SINT:
+ return DXGI_FORMAT_R32G32_TYPELESS; /* 15 */
+ case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
+ case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
+ case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
+ return DXGI_FORMAT_R32G8X24_TYPELESS; /* 19 */
+ case DXGI_FORMAT_R10G10B10A2_UNORM:
+ case DXGI_FORMAT_R10G10B10A2_UINT:
+ return DXGI_FORMAT_R10G10B10A2_TYPELESS; /* 23 */
+ case DXGI_FORMAT_R8G8B8A8_UNORM:
+ case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
+ case DXGI_FORMAT_R8G8B8A8_UINT:
+ case DXGI_FORMAT_R8G8B8A8_SNORM:
+ case DXGI_FORMAT_R8G8B8A8_SINT:
+ return DXGI_FORMAT_R8G8B8A8_TYPELESS; /* 27 */
+ case DXGI_FORMAT_R16G16_FLOAT:
+ case DXGI_FORMAT_R16G16_UNORM:
+ case DXGI_FORMAT_R16G16_UINT:
+ case DXGI_FORMAT_R16G16_SNORM:
+ case DXGI_FORMAT_R16G16_SINT:
+ return DXGI_FORMAT_R16G16_TYPELESS; /* 33 */
+ case DXGI_FORMAT_D32_FLOAT:
+ case DXGI_FORMAT_R32_FLOAT:
+ case DXGI_FORMAT_R32_UINT:
+ case DXGI_FORMAT_R32_SINT:
+ return DXGI_FORMAT_R32_TYPELESS; /* 39 */
+ case DXGI_FORMAT_D24_UNORM_S8_UINT:
+ case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
+ case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
+ return DXGI_FORMAT_R24G8_TYPELESS; /* 44 */
+ case DXGI_FORMAT_R8G8_UNORM:
+ case DXGI_FORMAT_R8G8_UINT:
+ case DXGI_FORMAT_R8G8_SNORM:
+ case DXGI_FORMAT_R8G8_SINT:
+ return DXGI_FORMAT_R8G8_TYPELESS; /* 48*/
+ case DXGI_FORMAT_R16_FLOAT:
+ case DXGI_FORMAT_D16_UNORM:
+ case DXGI_FORMAT_R16_UNORM:
+ case DXGI_FORMAT_R16_UINT:
+ case DXGI_FORMAT_R16_SNORM:
+ case DXGI_FORMAT_R16_SINT:
+ return DXGI_FORMAT_R16_TYPELESS; /* 53 */
+ case DXGI_FORMAT_R8_UNORM:
+ case DXGI_FORMAT_R8_UINT:
+ case DXGI_FORMAT_R8_SNORM:
+ case DXGI_FORMAT_R8_SINT:
+ return DXGI_FORMAT_R8_TYPELESS; /* 60*/
+ case DXGI_FORMAT_BC1_UNORM:
+ case DXGI_FORMAT_BC1_UNORM_SRGB:
+ return DXGI_FORMAT_BC1_TYPELESS; /* 70 */
+ case DXGI_FORMAT_BC2_UNORM:
+ case DXGI_FORMAT_BC2_UNORM_SRGB:
+ return DXGI_FORMAT_BC2_TYPELESS; /* 73 */
+ case DXGI_FORMAT_BC3_UNORM:
+ case DXGI_FORMAT_BC3_UNORM_SRGB:
+ return DXGI_FORMAT_BC3_TYPELESS; /* 76 */
+ case DXGI_FORMAT_BC4_UNORM:
+ case DXGI_FORMAT_BC4_SNORM:
+ return DXGI_FORMAT_BC4_TYPELESS; /* 79 */
+ case DXGI_FORMAT_BC5_UNORM:
+ case DXGI_FORMAT_BC5_SNORM:
+ return DXGI_FORMAT_BC5_TYPELESS; /* 82 */
+ case DXGI_FORMAT_B8G8R8A8_UNORM:
+ case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
+ return DXGI_FORMAT_B8G8R8A8_TYPELESS; /* 90 */
+ case DXGI_FORMAT_B8G8R8X8_UNORM:
+ case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
+ return DXGI_FORMAT_B8G8R8X8_TYPELESS; /* 92 */
+ case DXGI_FORMAT_BC6H_UF16:
+ case DXGI_FORMAT_BC6H_SF16:
+ return DXGI_FORMAT_BC6H_TYPELESS; /* 94 */
+ case DXGI_FORMAT_BC7_UNORM:
+ case DXGI_FORMAT_BC7_UNORM_SRGB:
+ return DXGI_FORMAT_BC7_TYPELESS; /* 97 */
+ default:
+ break;
+ }
+
+ return dxgiFormat;
+}
+
+
+static bool dxIsDepthStencilFormat(DXGI_FORMAT dxgiFormat)
+{
+ switch (dxgiFormat)
+ {
+ case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
+ case DXGI_FORMAT_D32_FLOAT:
+ case DXGI_FORMAT_D24_UNORM_S8_UINT:
+ case DXGI_FORMAT_R16_FLOAT:
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+}
+
+
+static int vmsvga3dBackSurfaceCreateTexture(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface)
+{
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = p3dState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ UINT MiscFlags;
+ DXDEVICE *pDXDevice = dxSurfaceDevice(p3dState, pSurface, pDXContext, &MiscFlags);
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ if (pSurface->pBackendSurface != NULL)
+ {
+ AssertFailed(); /** @todo Should the function not be used like that? */
+ vmsvga3dBackSurfaceDestroy(pThisCC, false, pSurface);
+ }
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+ int rc = dxBackendSurfaceAlloc(&pBackendSurface);
+ AssertRCReturn(rc, rc);
+
+ uint32_t const cWidth = pSurface->paMipmapLevels[0].cBlocksX * pSurface->cxBlock;
+ uint32_t const cHeight = pSurface->paMipmapLevels[0].cBlocksY * pSurface->cyBlock;
+ uint32_t const cDepth = pSurface->paMipmapLevels[0].mipmapSize.depth;
+ uint32_t const numMipLevels = pSurface->cLevels;
+
+ DXGI_FORMAT dxgiFormat = vmsvgaDXSurfaceFormat2Dxgi(pSurface->format);
+ AssertReturn(dxgiFormat != DXGI_FORMAT_UNKNOWN, E_FAIL);
+
+ /* Create typeless textures, unless it is a depth/stencil resource,
+ * because D3D11_BIND_DEPTH_STENCIL requires a depth/stencil format.
+ * Always use typeless format for staging/dynamic resources.
+ */
+ DXGI_FORMAT const dxgiFormatTypeless = dxGetDxgiTypelessFormat(dxgiFormat);
+ if (!dxIsDepthStencilFormat(dxgiFormat))
+ dxgiFormat = dxgiFormatTypeless;
+
+ /* Format for staging resource is always the typeless one. */
+ DXGI_FORMAT const dxgiFormatStaging = dxgiFormatTypeless;
+
+ DXGI_FORMAT dxgiFormatDynamic;
+ /* Some drivers do not allow to use depth typeless formats for dynamic resources.
+ * Create a placeholder texture (it does not work with CopySubresource).
+ */
+ /** @todo Implement upload from such textures. */
+ if (dxgiFormatTypeless == DXGI_FORMAT_R24G8_TYPELESS)
+ dxgiFormatDynamic = DXGI_FORMAT_R32_UINT;
+ else if (dxgiFormatTypeless == DXGI_FORMAT_R32G8X24_TYPELESS)
+ dxgiFormatDynamic = DXGI_FORMAT_R32G32_UINT;
+ else
+ dxgiFormatDynamic = dxgiFormatTypeless;
+
+ /*
+ * Create D3D11 texture object.
+ */
+ D3D11_SUBRESOURCE_DATA *paInitialData = NULL;
+ if (pSurface->paMipmapLevels[0].pSurfaceData)
+ {
+ /* Can happen for a non GBO surface or if GBO texture was updated prior to creation of the hardware resource. */
+ uint32_t const cSubresource = numMipLevels * pSurface->surfaceDesc.numArrayElements;
+ paInitialData = (D3D11_SUBRESOURCE_DATA *)RTMemAlloc(cSubresource * sizeof(D3D11_SUBRESOURCE_DATA));
+ AssertPtrReturn(paInitialData, VERR_NO_MEMORY);
+
+ for (uint32_t i = 0; i < cSubresource; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[i];
+ D3D11_SUBRESOURCE_DATA *p = &paInitialData[i];
+ p->pSysMem = pMipmapLevel->pSurfaceData;
+ p->SysMemPitch = pMipmapLevel->cbSurfacePitch;
+ p->SysMemSlicePitch = pMipmapLevel->cbSurfacePlane;
+ }
+ }
+
+ HRESULT hr = S_OK;
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET)
+ {
+ /*
+ * Create the texture in backend device and open for the specified context.
+ */
+ D3D11_TEXTURE2D_DESC td;
+ RT_ZERO(td);
+ td.Width = pSurface->paMipmapLevels[0].mipmapSize.width;
+ td.Height = pSurface->paMipmapLevels[0].mipmapSize.height;
+ Assert(pSurface->cLevels == 1);
+ td.MipLevels = 1;
+ td.ArraySize = 1;
+ td.Format = dxgiFormat;
+ td.SampleDesc.Count = 1;
+ td.SampleDesc.Quality = 0;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
+ td.CPUAccessFlags = 0;
+ td.MiscFlags = MiscFlags;
+
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->u.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ /* Map-able texture. */
+ td.Format = dxgiFormatDynamic;
+ td.Usage = D3D11_USAGE_DYNAMIC;
+ td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->dynamic.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Staging texture. */
+ td.Format = dxgiFormatStaging;
+ td.Usage = D3D11_USAGE_STAGING;
+ td.BindFlags = 0; /* No flags allowed. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->staging.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ hr = dxInitSharedHandle(pBackend, pBackendSurface);
+
+ if (SUCCEEDED(hr))
+ {
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_SCREEN_TARGET;
+ }
+ }
+ else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
+ {
+ Assert(pSurface->cFaces == 6);
+ Assert(cWidth == cHeight);
+ Assert(cDepth == 1);
+//DEBUG_BREAKPOINT_TEST();
+
+ D3D11_TEXTURE2D_DESC td;
+ RT_ZERO(td);
+ td.Width = cWidth;
+ td.Height = cHeight;
+ td.MipLevels = numMipLevels;
+ td.ArraySize = pSurface->surfaceDesc.numArrayElements; /* This is 6 * numCubes */
+ td.Format = dxgiFormat;
+ td.SampleDesc.Count = 1;
+ td.SampleDesc.Quality = 0;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+ td.CPUAccessFlags = 0; /** @todo */
+ td.MiscFlags = MiscFlags | D3D11_RESOURCE_MISC_TEXTURECUBE; /** @todo */
+ if ( numMipLevels > 1
+ && (td.BindFlags & (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET)) == (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET))
+ td.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; /* Required for GenMips. */
+
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->u.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ /* Map-able texture. */
+ td.Format = dxgiFormatDynamic;
+ td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.ArraySize = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.Usage = D3D11_USAGE_DYNAMIC;
+ td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->dynamic.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Staging texture. */
+ td.Format = dxgiFormatStaging;
+ td.Usage = D3D11_USAGE_STAGING;
+ td.BindFlags = 0; /* No flags allowed. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->staging.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ hr = dxInitSharedHandle(pBackend, pBackendSurface);
+
+ if (SUCCEEDED(hr))
+ {
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_TEXTURE_CUBE;
+ }
+ }
+ else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_1D)
+ {
+ /*
+ * 1D texture.
+ */
+ Assert(pSurface->cFaces == 1);
+
+ D3D11_TEXTURE1D_DESC td;
+ RT_ZERO(td);
+ td.Width = cWidth;
+ td.MipLevels = numMipLevels;
+ td.ArraySize = pSurface->surfaceDesc.numArrayElements;
+ td.Format = dxgiFormat;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+ td.CPUAccessFlags = 0;
+ td.MiscFlags = MiscFlags; /** @todo */
+ if ( numMipLevels > 1
+ && (td.BindFlags & (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET)) == (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET))
+ td.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; /* Required for GenMips. */
+
+ hr = pDXDevice->pDevice->CreateTexture1D(&td, paInitialData, &pBackendSurface->u.pTexture1D);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ /* Map-able texture. */
+ td.Format = dxgiFormatDynamic;
+ td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.ArraySize = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.Usage = D3D11_USAGE_DYNAMIC;
+ td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture1D(&td, paInitialData, &pBackendSurface->dynamic.pTexture1D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Staging texture. */
+ td.Format = dxgiFormatStaging;
+ td.Usage = D3D11_USAGE_STAGING;
+ td.BindFlags = 0; /* No flags allowed. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture1D(&td, paInitialData, &pBackendSurface->staging.pTexture1D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ hr = dxInitSharedHandle(pBackend, pBackendSurface);
+
+ if (SUCCEEDED(hr))
+ {
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_TEXTURE_1D;
+ }
+ }
+ else
+ {
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_VOLUME)
+ {
+ /*
+ * Volume texture.
+ */
+ Assert(pSurface->cFaces == 1);
+ Assert(pSurface->surfaceDesc.numArrayElements == 1);
+
+ D3D11_TEXTURE3D_DESC td;
+ RT_ZERO(td);
+ td.Width = cWidth;
+ td.Height = cHeight;
+ td.Depth = cDepth;
+ td.MipLevels = numMipLevels;
+ td.Format = dxgiFormat;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+ td.CPUAccessFlags = 0; /** @todo */
+ td.MiscFlags = MiscFlags; /** @todo */
+ if ( numMipLevels > 1
+ && (td.BindFlags & (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET)) == (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET))
+ td.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; /* Required for GenMips. */
+
+ hr = pDXDevice->pDevice->CreateTexture3D(&td, paInitialData, &pBackendSurface->u.pTexture3D);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ /* Map-able texture. */
+ td.Format = dxgiFormatDynamic;
+ td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.Usage = D3D11_USAGE_DYNAMIC;
+ td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture3D(&td, paInitialData, &pBackendSurface->dynamic.pTexture3D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Staging texture. */
+ td.Format = dxgiFormatStaging;
+ td.Usage = D3D11_USAGE_STAGING;
+ td.BindFlags = 0; /* No flags allowed. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture3D(&td, paInitialData, &pBackendSurface->staging.pTexture3D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ hr = dxInitSharedHandle(pBackend, pBackendSurface);
+
+ if (SUCCEEDED(hr))
+ {
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_TEXTURE_3D;
+ }
+ }
+ else
+ {
+ /*
+ * 2D texture.
+ */
+ Assert(cDepth == 1);
+ Assert(pSurface->cFaces == 1);
+
+ D3D11_TEXTURE2D_DESC td;
+ RT_ZERO(td);
+ td.Width = cWidth;
+ td.Height = cHeight;
+ td.MipLevels = numMipLevels;
+ td.ArraySize = pSurface->surfaceDesc.numArrayElements;
+ td.Format = dxgiFormat;
+ td.SampleDesc.Count = 1;
+ td.SampleDesc.Quality = 0;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+ td.CPUAccessFlags = 0; /** @todo */
+ td.MiscFlags = MiscFlags; /** @todo */
+ if ( numMipLevels > 1
+ && (td.BindFlags & (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET)) == (D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET))
+ td.MiscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; /* Required for GenMips. */
+
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->u.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ /* Map-able texture. */
+ td.Format = dxgiFormatDynamic;
+ td.MipLevels = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.ArraySize = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
+ td.Usage = D3D11_USAGE_DYNAMIC;
+ td.BindFlags = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->dynamic.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* Staging texture. */
+ td.Format = dxgiFormatStaging;
+ td.Usage = D3D11_USAGE_STAGING;
+ td.BindFlags = 0; /* No flags allowed. */
+ td.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
+ td.MiscFlags = 0;
+ hr = pDXDevice->pDevice->CreateTexture2D(&td, paInitialData, &pBackendSurface->staging.pTexture2D);
+ Assert(SUCCEEDED(hr));
+ }
+
+ if (SUCCEEDED(hr))
+ hr = dxInitSharedHandle(pBackend, pBackendSurface);
+
+ if (SUCCEEDED(hr))
+ {
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_TEXTURE_2D;
+ }
+ }
+ }
+
+ if (hr == DXGI_ERROR_DEVICE_REMOVED)
+ {
+ DEBUG_BREAKPOINT_TEST();
+ hr = pDXDevice->pDevice->GetDeviceRemovedReason();
+ }
+
+ Assert(hr == S_OK);
+
+ RTMemFree(paInitialData);
+
+ if (pSurface->autogenFilter != SVGA3D_TEX_FILTER_NONE)
+ {
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /*
+ * Success.
+ */
+ LogFunc(("sid = %u\n", pSurface->id));
+ pBackendSurface->enmDxgiFormat = dxgiFormat;
+ pSurface->pBackendSurface = pBackendSurface;
+ if (p3dState->pBackend->fSingleDevice || RT_BOOL(MiscFlags & D3D11_RESOURCE_MISC_SHARED))
+ pSurface->idAssociatedContext = DX_CID_BACKEND;
+ else
+ pSurface->idAssociatedContext = pDXContext->cid;
+ return VINF_SUCCESS;
+ }
+
+ D3D_RELEASE(pBackendSurface->staging.pResource);
+ D3D_RELEASE(pBackendSurface->dynamic.pResource);
+ D3D_RELEASE(pBackendSurface->u.pResource);
+ RTMemFree(pBackendSurface);
+ return VERR_NO_MEMORY;
+}
+
+
+static int vmsvga3dBackSurfaceCreateBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Buffers should be created as such. */
+ AssertReturn(RT_BOOL(pSurface->f.surfaceFlags & ( SVGA3D_SURFACE_HINT_INDEXBUFFER
+ | SVGA3D_SURFACE_HINT_VERTEXBUFFER
+ | SVGA3D_SURFACE_BIND_VERTEX_BUFFER
+ | SVGA3D_SURFACE_BIND_INDEX_BUFFER
+ )), VERR_INVALID_PARAMETER);
+
+ if (pSurface->pBackendSurface != NULL)
+ {
+ AssertFailed(); /** @todo Should the function not be used like that? */
+ vmsvga3dBackSurfaceDestroy(pThisCC, false, pSurface);
+ }
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ int rc = vmsvga3dMipmapLevel(pSurface, 0, 0, &pMipLevel);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+ rc = dxBackendSurfaceAlloc(&pBackendSurface);
+ AssertRCReturn(rc, rc);
+
+ LogFunc(("sid = %u, size = %u\n", pSurface->id, pMipLevel->cbSurface));
+
+ /* Upload the current data, if any. */
+ D3D11_SUBRESOURCE_DATA *pInitialData = NULL;
+ D3D11_SUBRESOURCE_DATA initialData;
+ if (pMipLevel->pSurfaceData)
+ {
+ initialData.pSysMem = pMipLevel->pSurfaceData;
+ initialData.SysMemPitch = pMipLevel->cbSurface;
+ initialData.SysMemSlicePitch = pMipLevel->cbSurface;
+
+ pInitialData = &initialData;
+ }
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = pMipLevel->cbSurface;
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+
+ HRESULT hr = pDevice->pDevice->CreateBuffer(&bd, pInitialData, &pBackendSurface->u.pBuffer);
+ if (SUCCEEDED(hr))
+ {
+ /*
+ * Success.
+ */
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_BUFFER;
+ pBackendSurface->enmDxgiFormat = DXGI_FORMAT_UNKNOWN;
+ pSurface->pBackendSurface = pBackendSurface;
+ pSurface->idAssociatedContext = pDXContext->cid;
+ return VINF_SUCCESS;
+ }
+
+ /* Failure. */
+ D3D_RELEASE(pBackendSurface->u.pBuffer);
+ RTMemFree(pBackendSurface);
+ return VERR_NO_MEMORY;
+}
+
+
+static int vmsvga3dBackSurfaceCreateSoBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Buffers should be created as such. */
+ AssertReturn(RT_BOOL(pSurface->f.surfaceFlags & SVGA3D_SURFACE_BIND_STREAM_OUTPUT), VERR_INVALID_PARAMETER);
+
+ if (pSurface->pBackendSurface != NULL)
+ {
+ AssertFailed(); /** @todo Should the function not be used like that? */
+ vmsvga3dBackSurfaceDestroy(pThisCC, false, pSurface);
+ }
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+ int rc = dxBackendSurfaceAlloc(&pBackendSurface);
+ AssertRCReturn(rc, rc);
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = pSurface->paMipmapLevels[0].cbSurface;
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+ bd.CPUAccessFlags = 0; /// @todo ? D3D11_CPU_ACCESS_READ;
+ bd.MiscFlags = 0;
+ bd.StructureByteStride = 0;
+
+ HRESULT hr = pDevice->pDevice->CreateBuffer(&bd, 0, &pBackendSurface->u.pBuffer);
+ if (SUCCEEDED(hr))
+ {
+ /*
+ * Success.
+ */
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_BUFFER;
+ pBackendSurface->enmDxgiFormat = DXGI_FORMAT_UNKNOWN;
+ pSurface->pBackendSurface = pBackendSurface;
+ pSurface->idAssociatedContext = pDXContext->cid;
+ return VINF_SUCCESS;
+ }
+
+ /* Failure. */
+ D3D_RELEASE(pBackendSurface->u.pBuffer);
+ RTMemFree(pBackendSurface);
+ return VERR_NO_MEMORY;
+}
+
+#if 0
+static int vmsvga3dBackSurfaceCreateConstantBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface, uint32_t offsetInBytes, uint32_t sizeInBytes)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Buffers should be created as such. */
+ AssertReturn(RT_BOOL(pSurface->f.surfaceFlags & ( SVGA3D_SURFACE_BIND_CONSTANT_BUFFER)), VERR_INVALID_PARAMETER);
+
+ if (pSurface->pBackendSurface != NULL)
+ {
+ AssertFailed(); /** @todo Should the function not be used like that? */
+ vmsvga3dBackSurfaceDestroy(pThisCC, false, pSurface);
+ }
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ int rc = vmsvga3dMipmapLevel(pSurface, 0, 0, &pMipLevel);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN( offsetInBytes < pMipLevel->cbSurface
+ && sizeInBytes <= pMipLevel->cbSurface - offsetInBytes, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+ rc = dxBackendSurfaceAlloc(&pBackendSurface);
+ AssertRCReturn(rc, rc);
+
+ /* Upload the current data, if any. */
+ D3D11_SUBRESOURCE_DATA *pInitialData = NULL;
+ D3D11_SUBRESOURCE_DATA initialData;
+ if (pMipLevel->pSurfaceData)
+ {
+ initialData.pSysMem = (uint8_t *)pMipLevel->pSurfaceData + offsetInBytes;
+ initialData.SysMemPitch = pMipLevel->cbSurface;
+ initialData.SysMemSlicePitch = pMipLevel->cbSurface;
+
+ pInitialData = &initialData;
+
+ // Log(("%.*Rhxd\n", sizeInBytes, initialData.pSysMem));
+ }
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = sizeInBytes;
+ bd.Usage = D3D11_USAGE_DYNAMIC;
+ bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+ bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ bd.MiscFlags = 0;
+ bd.StructureByteStride = 0;
+
+ HRESULT hr = pDevice->pDevice->CreateBuffer(&bd, pInitialData, &pBackendSurface->u.pBuffer);
+ if (SUCCEEDED(hr))
+ {
+ /*
+ * Success.
+ */
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_BUFFER;
+ pBackendSurface->enmDxgiFormat = DXGI_FORMAT_UNKNOWN;
+ pSurface->pBackendSurface = pBackendSurface;
+ pSurface->idAssociatedContext = pDXContext->cid;
+ return VINF_SUCCESS;
+ }
+
+ /* Failure. */
+ D3D_RELEASE(pBackendSurface->u.pBuffer);
+ RTMemFree(pBackendSurface);
+ return VERR_NO_MEMORY;
+}
+#endif
+
+static int vmsvga3dBackSurfaceCreateResource(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ if (pSurface->pBackendSurface != NULL)
+ {
+ AssertFailed(); /** @todo Should the function not be used like that? */
+ vmsvga3dBackSurfaceDestroy(pThisCC, false, pSurface);
+ }
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ int rc = vmsvga3dMipmapLevel(pSurface, 0, 0, &pMipLevel);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+ rc = dxBackendSurfaceAlloc(&pBackendSurface);
+ AssertRCReturn(rc, rc);
+
+ HRESULT hr;
+
+ /*
+ * Figure out the type of the surface.
+ */
+ if (pSurface->format == SVGA3D_BUFFER)
+ {
+ /* Upload the current data, if any. */
+ D3D11_SUBRESOURCE_DATA *pInitialData = NULL;
+ D3D11_SUBRESOURCE_DATA initialData;
+ if (pMipLevel->pSurfaceData)
+ {
+ initialData.pSysMem = pMipLevel->pSurfaceData;
+ initialData.SysMemPitch = pMipLevel->cbSurface;
+ initialData.SysMemSlicePitch = pMipLevel->cbSurface;
+
+ pInitialData = &initialData;
+ }
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = pMipLevel->cbSurface;
+
+ if (pSurface->f.surfaceFlags & (SVGA3D_SURFACE_STAGING_UPLOAD | SVGA3D_SURFACE_STAGING_DOWNLOAD))
+ bd.Usage = D3D11_USAGE_STAGING;
+ else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_DYNAMIC)
+ bd.Usage = D3D11_USAGE_DYNAMIC;
+ else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_STATIC)
+ bd.Usage = pInitialData ? D3D11_USAGE_IMMUTABLE : D3D11_USAGE_DEFAULT; /* Guest will update later. */
+ else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_INDIRECT_UPDATE)
+ bd.Usage = D3D11_USAGE_DEFAULT;
+
+ bd.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
+
+ if (bd.Usage == D3D11_USAGE_STAGING)
+ bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
+ else if (bd.Usage == D3D11_USAGE_DYNAMIC)
+ bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_DRAWINDIRECT_ARGS)
+ bd.MiscFlags |= D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS;
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_BIND_RAW_VIEWS)
+ bd.MiscFlags |= D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS;
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_BUFFER_STRUCTURED)
+ bd.MiscFlags |= D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_RESOURCE_CLAMP)
+ bd.MiscFlags |= D3D11_RESOURCE_MISC_RESOURCE_CLAMP;
+
+ if (bd.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED)
+ {
+ SVGAOTableSurfaceEntry entrySurface;
+ rc = vmsvgaR3OTableReadSurface(pThisCC->svga.pSvgaR3State, pSurface->id, &entrySurface);
+ AssertRCReturn(rc, rc);
+
+ bd.StructureByteStride = entrySurface.bufferByteStride;
+ }
+
+ hr = pDevice->pDevice->CreateBuffer(&bd, pInitialData, &pBackendSurface->u.pBuffer);
+ Assert(SUCCEEDED(hr));
+ if (SUCCEEDED(hr))
+ {
+ pBackendSurface->enmResType = VMSVGA3D_RESTYPE_BUFFER;
+ pBackendSurface->enmDxgiFormat = DXGI_FORMAT_UNKNOWN;
+ }
+ }
+ else
+ {
+ /** @todo Texture. Currently vmsvga3dBackSurfaceCreateTexture is called for textures. */
+ AssertFailed();
+ hr = E_FAIL;
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /*
+ * Success.
+ */
+ pSurface->pBackendSurface = pBackendSurface;
+ pSurface->idAssociatedContext = pDXContext->cid;
+ return VINF_SUCCESS;
+ }
+
+ /* Failure. */
+ RTMemFree(pBackendSurface);
+ return VERR_NO_MEMORY;
+}
+
+
+static int dxStagingBufferRealloc(DXDEVICE *pDXDevice, uint32_t cbRequiredSize)
+{
+ AssertReturn(cbRequiredSize < SVGA3D_MAX_SURFACE_MEM_SIZE, VERR_INVALID_PARAMETER);
+
+ if (RT_LIKELY(cbRequiredSize <= pDXDevice->cbStagingBuffer))
+ return VINF_SUCCESS;
+
+ D3D_RELEASE(pDXDevice->pStagingBuffer);
+
+ uint32_t const cbAlloc = RT_ALIGN_32(cbRequiredSize, _64K);
+
+ D3D11_SUBRESOURCE_DATA *pInitialData = NULL;
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = cbAlloc;
+ bd.Usage = D3D11_USAGE_STAGING;
+ //bd.BindFlags = 0; /* No bind flags are allowed for staging resources. */
+ bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;
+
+ int rc = VINF_SUCCESS;
+ ID3D11Buffer *pBuffer;
+ HRESULT hr = pDXDevice->pDevice->CreateBuffer(&bd, pInitialData, &pBuffer);
+ if (SUCCEEDED(hr))
+ {
+ pDXDevice->pStagingBuffer = pBuffer;
+ pDXDevice->cbStagingBuffer = cbAlloc;
+ }
+ else
+ {
+ pDXDevice->cbStagingBuffer = 0;
+ rc = VERR_NO_MEMORY;
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackInit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ RT_NOREF(pDevIns, pThis);
+
+ int rc;
+#ifdef RT_OS_LINUX /** @todo Remove, this is currently needed for loading the X11 library in order to call XInitThreads(). */
+ rc = glLdrInit(pDevIns);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: Error loading OpenGL library and resolving necessary functions: %Rrc\n", rc));
+ return rc;
+ }
+#endif
+
+ PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)RTMemAllocZ(sizeof(VMSVGA3DSTATE));
+ AssertReturn(pState, VERR_NO_MEMORY);
+ pThisCC->svga.p3dState = pState;
+
+ PVMSVGA3DBACKEND pBackend = (PVMSVGA3DBACKEND)RTMemAllocZ(sizeof(VMSVGA3DBACKEND));
+ AssertReturn(pBackend, VERR_NO_MEMORY);
+ pState->pBackend = pBackend;
+
+ rc = RTLdrLoadSystem(VBOX_D3D11_LIBRARY_NAME, /* fNoUnload = */ true, &pBackend->hD3D11);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ rc = RTLdrGetSymbol(pBackend->hD3D11, "D3D11CreateDevice", (void **)&pBackend->pfnD3D11CreateDevice);
+ AssertRC(rc);
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ /* Failure to load the shader disassembler is ignored. */
+ int rc2 = RTLdrLoadSystem("D3DCompiler_47", /* fNoUnload = */ true, &pBackend->hD3DCompiler);
+ if (RT_SUCCESS(rc2))
+ rc2 = RTLdrGetSymbol(pBackend->hD3DCompiler, "D3DDisassemble", (void **)&pBackend->pfnD3DDisassemble);
+ Log6Func(("Load D3DDisassemble: %Rrc\n", rc2));
+ }
+
+#if !defined(RT_OS_WINDOWS) || defined(DX_FORCE_SINGLE_DEVICE)
+ pBackend->fSingleDevice = true;
+#endif
+
+ LogRelMax(1, ("VMSVGA: Single DX device mode: %s\n", pBackend->fSingleDevice ? "enabled" : "disabled"));
+
+//DEBUG_BREAKPOINT_TEST();
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackPowerOn(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ RT_NOREF(pDevIns, pThis);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ int rc = dxDeviceCreate(pBackend, &pBackend->dxDevice);
+ if (RT_SUCCESS(rc))
+ {
+ IDXGIAdapter *pAdapter = NULL;
+ HRESULT hr = pBackend->dxDevice.pDxgiFactory->EnumAdapters(0, &pAdapter);
+ if (SUCCEEDED(hr))
+ {
+ DXGI_ADAPTER_DESC desc;
+ hr = pAdapter->GetDesc(&desc);
+ if (SUCCEEDED(hr))
+ {
+ char sz[RT_ELEMENTS(desc.Description)];
+ for (unsigned i = 0; i < RT_ELEMENTS(desc.Description); ++i)
+ sz[i] = (char)desc.Description[i];
+ LogRelMax(1, ("VMSVGA: Adapter [%s]\n", sz));
+ }
+
+ pAdapter->Release();
+ }
+ }
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackReset(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ /** @todo This is generic code. Must be moved to in DevVGA-SVGA3d.cpp */
+ /* Destroy all leftover surfaces. */
+ for (uint32_t i = 0; i < pState->cSurfaces; i++)
+ {
+ if (pState->papSurfaces[i]->id != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceDestroy(pThisCC, pState->papSurfaces[i]->id);
+ }
+
+ /* Destroy all leftover DX contexts. */
+ for (uint32_t i = 0; i < pState->cDXContexts; i++)
+ {
+ if (pState->papDXContexts[i]->cid != SVGA3D_INVALID_ID)
+ vmsvga3dDXDestroyContext(pThisCC, pState->papDXContexts[i]->cid);
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackTerminate(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ if (pState->pBackend)
+ {
+ /* Clean up backends. For example release resources from surfaces. */
+ vmsvga3dBackReset(pThisCC);
+
+ dxDeviceDestroy(pState->pBackend, &pState->pBackend->dxDevice);
+
+ RTMemFree(pState->pBackend);
+ pState->pBackend = NULL;
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+/** @todo Such structures must be in VBoxVideo3D.h */
+typedef struct VBOX3DNOTIFYDEFINESCREEN
+{
+ VBOX3DNOTIFY Core;
+ uint32_t cWidth;
+ uint32_t cHeight;
+ int32_t xRoot;
+ int32_t yRoot;
+ uint32_t fPrimary;
+ uint32_t cDpi;
+} VBOX3DNOTIFYDEFINESCREEN;
+
+
+static int vmsvga3dDrvNotifyDefineScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ VBOX3DNOTIFYDEFINESCREEN n;
+ n.Core.enmNotification = VBOX3D_NOTIFY_TYPE_HW_SCREEN_CREATED;
+ n.Core.iDisplay = pScreen->idScreen;
+ n.Core.u32Reserved = 0;
+ n.Core.cbData = sizeof(n) - RT_UOFFSETOF(VBOX3DNOTIFY, au8Data);
+ RT_ZERO(n.Core.au8Data);
+ n.cWidth = pScreen->cWidth;
+ n.cHeight = pScreen->cHeight;
+ n.xRoot = pScreen->xOrigin;
+ n.yRoot = pScreen->yOrigin;
+ n.fPrimary = RT_BOOL(pScreen->fuScreen & SVGA_SCREEN_IS_PRIMARY);
+ n.cDpi = pScreen->cDpi;
+
+ return pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, &n.Core);
+}
+
+
+static int vmsvga3dDrvNotifyDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ VBOX3DNOTIFY n;
+ n.enmNotification = VBOX3D_NOTIFY_TYPE_HW_SCREEN_DESTROYED;
+ n.iDisplay = pScreen->idScreen;
+ n.u32Reserved = 0;
+ n.cbData = sizeof(n) - RT_UOFFSETOF(VBOX3DNOTIFY, au8Data);
+ RT_ZERO(n.au8Data);
+
+ return pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, &n);
+}
+
+
+static int vmsvga3dDrvNotifyBindSurface(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, HANDLE hSharedSurface)
+{
+ VBOX3DNOTIFY n;
+ n.enmNotification = VBOX3D_NOTIFY_TYPE_HW_SCREEN_BIND_SURFACE;
+ n.iDisplay = pScreen->idScreen;
+ n.u32Reserved = 0;
+ n.cbData = sizeof(n) - RT_UOFFSETOF(VBOX3DNOTIFY, au8Data);
+ *(uint64_t *)&n.au8Data[0] = (uint64_t)hSharedSurface;
+
+ return pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, &n);
+}
+
+
+typedef struct VBOX3DNOTIFYUPDATE
+{
+ VBOX3DNOTIFY Core;
+ uint32_t x;
+ uint32_t y;
+ uint32_t w;
+ uint32_t h;
+} VBOX3DNOTIFYUPDATE;
+
+
+static int vmsvga3dDrvNotifyUpdate(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen,
+ uint32_t x, uint32_t y, uint32_t w, uint32_t h)
+{
+ VBOX3DNOTIFYUPDATE n;
+ n.Core.enmNotification = VBOX3D_NOTIFY_TYPE_HW_SCREEN_UPDATE_END;
+ n.Core.iDisplay = pScreen->idScreen;
+ n.Core.u32Reserved = 0;
+ n.Core.cbData = sizeof(n) - RT_UOFFSETOF(VBOX3DNOTIFY, au8Data);
+ RT_ZERO(n.Core.au8Data);
+ n.x = x;
+ n.y = y;
+ n.w = w;
+ n.h = h;
+
+ return pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, &n.Core);
+}
+
+static int vmsvga3dHwScreenCreate(PVMSVGA3DSTATE pState, uint32_t cWidth, uint32_t cHeight, VMSVGAHWSCREEN *p)
+{
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+
+ DXDEVICE *pDXDevice = &pBackend->dxDevice;
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ D3D11_TEXTURE2D_DESC td;
+ RT_ZERO(td);
+ td.Width = cWidth;
+ td.Height = cHeight;
+ td.MipLevels = 1;
+ td.ArraySize = 1;
+ td.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
+ td.SampleDesc.Count = 1;
+ td.SampleDesc.Quality = 0;
+ td.Usage = D3D11_USAGE_DEFAULT;
+ td.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
+ td.CPUAccessFlags = 0;
+ td.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX;
+
+ HRESULT hr = pDXDevice->pDevice->CreateTexture2D(&td, 0, &p->pTexture);
+ if (SUCCEEDED(hr))
+ {
+ /* Get the shared handle. */
+ hr = p->pTexture->QueryInterface(__uuidof(IDXGIResource), (void**)&p->pDxgiResource);
+ if (SUCCEEDED(hr))
+ {
+ hr = p->pDxgiResource->GetSharedHandle(&p->SharedHandle);
+ if (SUCCEEDED(hr))
+ hr = p->pTexture->QueryInterface(__uuidof(IDXGIKeyedMutex), (void**)&p->pDXGIKeyedMutex);
+ }
+ }
+
+ if (SUCCEEDED(hr))
+ return VINF_SUCCESS;
+
+ AssertFailed();
+ return VERR_NOT_SUPPORTED;
+}
+
+
+static void vmsvga3dHwScreenDestroy(PVMSVGA3DSTATE pState, VMSVGAHWSCREEN *p)
+{
+ RT_NOREF(pState);
+ D3D_RELEASE(p->pDXGIKeyedMutex);
+ D3D_RELEASE(p->pDxgiResource);
+ D3D_RELEASE(p->pTexture);
+ p->SharedHandle = 0;
+ p->sidScreenTarget = SVGA_ID_INVALID;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ RT_NOREF(pThis, pThisCC, pScreen);
+
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: screen %u\n", pScreen->idScreen));
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ Assert(pScreen->pHwScreen == NULL);
+
+ VMSVGAHWSCREEN *p = (VMSVGAHWSCREEN *)RTMemAllocZ(sizeof(VMSVGAHWSCREEN));
+ AssertPtrReturn(p, VERR_NO_MEMORY);
+
+ p->sidScreenTarget = SVGA_ID_INVALID;
+
+ int rc = vmsvga3dDrvNotifyDefineScreen(pThisCC, pScreen);
+ if (RT_SUCCESS(rc))
+ {
+ /* The frontend supports the screen. Create the actual resource. */
+ rc = vmsvga3dHwScreenCreate(pState, pScreen->cWidth, pScreen->cHeight, p);
+ if (RT_SUCCESS(rc))
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: created\n"));
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ LogRel(("VMSVGA: Using HW accelerated screen %u\n", pScreen->idScreen));
+ pScreen->pHwScreen = p;
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: %Rrc\n", rc));
+ vmsvga3dHwScreenDestroy(pState, p);
+ RTMemFree(p);
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ vmsvga3dDrvNotifyDestroyScreen(pThisCC, pScreen);
+
+ if (pScreen->pHwScreen)
+ {
+ vmsvga3dHwScreenDestroy(pState, pScreen->pHwScreen);
+ RTMemFree(pScreen->pHwScreen);
+ pScreen->pHwScreen = NULL;
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceBlitToScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen,
+ SVGASignedRect destRect, SVGA3dSurfaceImageId srcImage,
+ SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *paRects)
+{
+ RT_NOREF(pThisCC, pScreen, destRect, srcImage, srcRect, cRects, paRects);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ VMSVGAHWSCREEN *p = pScreen->pHwScreen;
+ AssertReturn(p, VERR_NOT_SUPPORTED);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, srcImage.sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ /** @todo Implement. */
+ AssertFailed();
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
+ VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, pImage->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = pSurface->pBackendSurface;
+ AssertPtrReturn(pBackendSurface, VERR_INVALID_STATE);
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, pImage->face, pImage->mipmap, &pMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ /* A surface is always mapped by the DX context which has created the surface. */
+ DXDEVICE *pDevice = dxDeviceFromCid(pSurface->idAssociatedContext, pState);
+ AssertReturn(pDevice && pDevice->pDevice, VERR_INVALID_STATE);
+
+ SVGA3dBox clipBox;
+ if (pBox)
+ {
+ clipBox = *pBox;
+ vmsvgaR3ClipBox(&pMipLevel->mipmapSize, &clipBox);
+ ASSERT_GUEST_RETURN(clipBox.w && clipBox.h && clipBox.d, VERR_INVALID_PARAMETER);
+ }
+ else
+ {
+ clipBox.x = 0;
+ clipBox.y = 0;
+ clipBox.z = 0;
+ clipBox.w = pMipLevel->mipmapSize.width;
+ clipBox.h = pMipLevel->mipmapSize.height;
+ clipBox.d = pMipLevel->mipmapSize.depth;
+ }
+
+ D3D11_MAP d3d11MapType;
+ switch (enmMapType)
+ {
+ case VMSVGA3D_SURFACE_MAP_READ: d3d11MapType = D3D11_MAP_READ; break;
+ case VMSVGA3D_SURFACE_MAP_WRITE: d3d11MapType = D3D11_MAP_WRITE; break;
+ case VMSVGA3D_SURFACE_MAP_READ_WRITE: d3d11MapType = D3D11_MAP_READ_WRITE; break;
+ case VMSVGA3D_SURFACE_MAP_WRITE_DISCARD: d3d11MapType = D3D11_MAP_WRITE_DISCARD; break;
+ default:
+ AssertFailed();
+ return VERR_INVALID_PARAMETER;
+ }
+
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ RT_ZERO(mappedResource);
+
+ if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_SCREEN_TARGET)
+ {
+ Assert(pImage->face == 0 && pImage->mipmap == 0);
+
+ /* Wait for the surface to finish drawing. */
+ dxSurfaceWait(pState, pSurface, pSurface->idAssociatedContext);
+
+ ID3D11Texture2D *pMappedTexture;
+ if (enmMapType == VMSVGA3D_SURFACE_MAP_READ)
+ {
+ pMappedTexture = pBackendSurface->staging.pTexture2D;
+
+ /* Copy the texture content to the staging texture. */
+ pDevice->pImmediateContext->CopyResource(pBackendSurface->staging.pTexture2D, pBackendSurface->u.pTexture2D);
+ }
+ else if (enmMapType == VMSVGA3D_SURFACE_MAP_WRITE)
+ pMappedTexture = pBackendSurface->staging.pTexture2D;
+ else
+ pMappedTexture = pBackendSurface->dynamic.pTexture2D;
+
+ UINT const Subresource = 0; /* Screen target surfaces have only one subresource. */
+ HRESULT hr = pDevice->pImmediateContext->Map(pMappedTexture, Subresource,
+ d3d11MapType, /* MapFlags = */ 0, &mappedResource);
+ if (SUCCEEDED(hr))
+ vmsvga3dSurfaceMapInit(pMap, enmMapType, &clipBox, pSurface,
+ mappedResource.pData, mappedResource.RowPitch, mappedResource.DepthPitch);
+ else
+ AssertFailedStmt(rc = VERR_NOT_SUPPORTED);
+ }
+ else if ( pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_1D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_2D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_CUBE
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_3D)
+ {
+ dxSurfaceWait(pState, pSurface, pSurface->idAssociatedContext);
+
+ ID3D11Resource *pMappedResource;
+ if (enmMapType == VMSVGA3D_SURFACE_MAP_READ)
+ {
+ pMappedResource = pBackendSurface->staging.pResource;
+
+ /* Copy the texture content to the staging texture.
+ * The requested miplevel of the texture is copied to the miplevel 0 of the staging texture,
+ * because the staging (and dynamic) structures do not have miplevels.
+ * Always copy entire miplevel so all Dst are zero and pSrcBox is NULL, as D3D11 requires.
+ */
+ ID3D11Resource *pDstResource = pMappedResource;
+ UINT DstSubresource = 0;
+ UINT DstX = 0;
+ UINT DstY = 0;
+ UINT DstZ = 0;
+ ID3D11Resource *pSrcResource = pBackendSurface->u.pResource;
+ UINT SrcSubresource = D3D11CalcSubresource(pImage->mipmap, pImage->face, pSurface->cLevels);
+ D3D11_BOX *pSrcBox = NULL;
+ //D3D11_BOX SrcBox;
+ //SrcBox.left = 0;
+ //SrcBox.top = 0;
+ //SrcBox.front = 0;
+ //SrcBox.right = pMipLevel->mipmapSize.width;
+ //SrcBox.bottom = pMipLevel->mipmapSize.height;
+ //SrcBox.back = pMipLevel->mipmapSize.depth;
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, pSrcBox);
+ }
+ else if (enmMapType == VMSVGA3D_SURFACE_MAP_WRITE)
+ pMappedResource = pBackendSurface->staging.pResource;
+ else
+ pMappedResource = pBackendSurface->dynamic.pResource;
+
+ UINT const Subresource = 0; /* Dynamic or staging textures have one subresource. */
+ HRESULT hr = pDevice->pImmediateContext->Map(pMappedResource, Subresource,
+ d3d11MapType, /* MapFlags = */ 0, &mappedResource);
+ if (SUCCEEDED(hr))
+ vmsvga3dSurfaceMapInit(pMap, enmMapType, &clipBox, pSurface,
+ mappedResource.pData, mappedResource.RowPitch, mappedResource.DepthPitch);
+ else
+ AssertFailedStmt(rc = VERR_NOT_SUPPORTED);
+ }
+ else if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_BUFFER)
+ {
+ /* Map the staging buffer. */
+ rc = dxStagingBufferRealloc(pDevice, pMipLevel->cbSurface);
+ if (RT_SUCCESS(rc))
+ {
+ /* The staging buffer does not allow D3D11_MAP_WRITE_DISCARD, so replace it. */
+ if (d3d11MapType == D3D11_MAP_WRITE_DISCARD)
+ d3d11MapType = D3D11_MAP_WRITE;
+
+ if (enmMapType == VMSVGA3D_SURFACE_MAP_READ)
+ {
+ /* Copy from the buffer to the staging buffer. */
+ ID3D11Resource *pDstResource = pDevice->pStagingBuffer;
+ UINT DstSubresource = 0;
+ UINT DstX = clipBox.x;
+ UINT DstY = clipBox.y;
+ UINT DstZ = clipBox.z;
+ ID3D11Resource *pSrcResource = pBackendSurface->u.pResource;
+ UINT SrcSubresource = 0;
+ D3D11_BOX SrcBox;
+ SrcBox.left = clipBox.x;
+ SrcBox.top = clipBox.y;
+ SrcBox.front = clipBox.z;
+ SrcBox.right = clipBox.w;
+ SrcBox.bottom = clipBox.h;
+ SrcBox.back = clipBox.d;
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, &SrcBox);
+ }
+
+ UINT const Subresource = 0; /* Buffers have only one subresource. */
+ HRESULT hr = pDevice->pImmediateContext->Map(pDevice->pStagingBuffer, Subresource,
+ d3d11MapType, /* MapFlags = */ 0, &mappedResource);
+ if (SUCCEEDED(hr))
+ vmsvga3dSurfaceMapInit(pMap, enmMapType, &clipBox, pSurface,
+ mappedResource.pData, mappedResource.RowPitch, mappedResource.DepthPitch);
+ else
+ AssertFailedStmt(rc = VERR_NOT_SUPPORTED);
+ }
+ }
+ else
+ {
+ // UINT D3D11CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels);
+ /** @todo Implement. */
+ AssertFailed();
+ rc = VERR_NOT_IMPLEMENTED;
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, pImage->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ /* The called should not use the function for system memory surfaces. */
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = pSurface->pBackendSurface;
+ AssertReturn(pBackendSurface, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, pImage->face, pImage->mipmap, &pMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ /* A surface is always mapped by the DX context which has created the surface. */
+ DXDEVICE *pDevice = dxDeviceFromCid(pSurface->idAssociatedContext, pState);
+ AssertReturn(pDevice && pDevice->pDevice, VERR_INVALID_STATE);
+
+ if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_SCREEN_TARGET)
+ {
+ ID3D11Texture2D *pMappedTexture;
+ if (pMap->enmMapType == VMSVGA3D_SURFACE_MAP_READ)
+ pMappedTexture = pBackendSurface->staging.pTexture2D;
+ else if (pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE)
+ pMappedTexture = pBackendSurface->staging.pTexture2D;
+ else
+ pMappedTexture = pBackendSurface->dynamic.pTexture2D;
+
+ UINT const Subresource = 0; /* Screen target surfaces have only one subresource. */
+ pDevice->pImmediateContext->Unmap(pMappedTexture, Subresource);
+
+ if ( fWritten
+ && ( pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_READ_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE_DISCARD))
+ {
+ ID3D11Resource *pDstResource = pBackendSurface->u.pTexture2D;
+ UINT DstSubresource = Subresource;
+ UINT DstX = pMap->box.x;
+ UINT DstY = pMap->box.y;
+ UINT DstZ = pMap->box.z;
+ ID3D11Resource *pSrcResource = pMappedTexture;
+ UINT SrcSubresource = Subresource;
+ D3D11_BOX SrcBox;
+ SrcBox.left = pMap->box.x;
+ SrcBox.top = pMap->box.y;
+ SrcBox.front = pMap->box.z;
+ SrcBox.right = pMap->box.x + pMap->box.w;
+ SrcBox.bottom = pMap->box.y + pMap->box.h;
+ SrcBox.back = pMap->box.z + pMap->box.d;
+
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, &SrcBox);
+
+ pBackendSurface->cidDrawing = pSurface->idAssociatedContext;
+ }
+ }
+ else if ( pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_1D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_2D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_CUBE
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_3D)
+ {
+ ID3D11Resource *pMappedResource;
+ if (pMap->enmMapType == VMSVGA3D_SURFACE_MAP_READ)
+ pMappedResource = pBackendSurface->staging.pResource;
+ else if (pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE)
+ pMappedResource = pBackendSurface->staging.pResource;
+ else
+ pMappedResource = pBackendSurface->dynamic.pResource;
+
+ UINT const Subresource = 0; /* Staging or dynamic textures have one subresource. */
+ pDevice->pImmediateContext->Unmap(pMappedResource, Subresource);
+
+ if ( fWritten
+ && ( pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_READ_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE_DISCARD))
+ {
+ /* If entire resource must be copied then use pSrcBox = NULL and dst point (0,0,0)
+ * Because DX11 insists on this for some resource types, for example DEPTH_STENCIL resources.
+ */
+ uint32_t const cWidth0 = pSurface->paMipmapLevels[0].mipmapSize.width;
+ uint32_t const cHeight0 = pSurface->paMipmapLevels[0].mipmapSize.height;
+ uint32_t const cDepth0 = pSurface->paMipmapLevels[0].mipmapSize.depth;
+ /** @todo Entire subresource is always mapped. So find a way to copy it back, important for DEPTH_STENCIL mipmaps. */
+ bool const fEntireResource = pMap->box.x == 0 && pMap->box.y == 0 && pMap->box.z == 0
+ && pMap->box.w == cWidth0 && pMap->box.h == cHeight0 && pMap->box.d == cDepth0;
+
+ ID3D11Resource *pDstResource = pBackendSurface->u.pResource;
+ UINT DstSubresource = D3D11CalcSubresource(pImage->mipmap, pImage->face, pSurface->cLevels);
+ UINT DstX = (pMap->box.x / pSurface->cxBlock) * pSurface->cxBlock;
+ UINT DstY = (pMap->box.y / pSurface->cyBlock) * pSurface->cyBlock;
+ UINT DstZ = pMap->box.z;
+ ID3D11Resource *pSrcResource = pMappedResource;
+ UINT SrcSubresource = Subresource;
+ D3D11_BOX *pSrcBox;
+ D3D11_BOX SrcBox;
+ if (fEntireResource)
+ pSrcBox = NULL;
+ else
+ {
+ uint32_t const cxBlocks = (pMap->box.w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cyBlocks = (pMap->box.h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+
+ SrcBox.left = DstX;
+ SrcBox.top = DstY;
+ SrcBox.front = DstZ;
+ SrcBox.right = DstX + cxBlocks * pSurface->cxBlock;
+ SrcBox.bottom = DstY + cyBlocks * pSurface->cyBlock;
+ SrcBox.back = DstZ + pMap->box.d;
+ pSrcBox = &SrcBox;
+ }
+
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, pSrcBox);
+
+ pBackendSurface->cidDrawing = pSurface->idAssociatedContext;
+ }
+ }
+ else if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_BUFFER)
+ {
+ Log4(("Unmap buffer sid = %u:\n%.*Rhxd\n", pSurface->id, pMap->cbRow, pMap->pvData));
+
+ /* Unmap the staging buffer. */
+ UINT const Subresource = 0; /* Buffers have only one subresource. */
+ pDevice->pImmediateContext->Unmap(pDevice->pStagingBuffer, Subresource);
+
+ /* Copy from the staging buffer to the actual buffer */
+ if ( fWritten
+ && ( pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_READ_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE_DISCARD))
+ {
+ ID3D11Resource *pDstResource = pBackendSurface->u.pResource;
+ UINT DstSubresource = 0;
+ UINT DstX = (pMap->box.x / pSurface->cxBlock) * pSurface->cxBlock;
+ UINT DstY = (pMap->box.y / pSurface->cyBlock) * pSurface->cyBlock;
+ UINT DstZ = pMap->box.z;
+ ID3D11Resource *pSrcResource = pDevice->pStagingBuffer;
+ UINT SrcSubresource = 0;
+ D3D11_BOX SrcBox;
+
+ uint32_t const cxBlocks = (pMap->box.w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cyBlocks = (pMap->box.h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+
+ SrcBox.left = DstX;
+ SrcBox.top = DstY;
+ SrcBox.front = DstZ;
+ SrcBox.right = DstX + cxBlocks * pSurface->cxBlock;
+ SrcBox.bottom = DstY + cyBlocks * pSurface->cyBlock;
+ SrcBox.back = DstZ + pMap->box.d;
+
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, &SrcBox);
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_NOT_IMPLEMENTED;
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dScreenTargetBind(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid)
+{
+ int rc = VINF_SUCCESS;
+
+ PVMSVGA3DSURFACE pSurface;
+ if (sid != SVGA_ID_INVALID)
+ {
+ /* Create the surface if does not yet exist. */
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ /* Create the actual texture. */
+ rc = vmsvga3dBackSurfaceCreateScreenTarget(pThisCC, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ else
+ pSurface = NULL;
+
+ /* Notify the HW accelerated screen if it is used. */
+ VMSVGAHWSCREEN *pHwScreen = pScreen->pHwScreen;
+ if (!pHwScreen)
+ return VINF_SUCCESS;
+
+ /* Same surface -> do nothing. */
+ if (pHwScreen->sidScreenTarget == sid)
+ return VINF_SUCCESS;
+
+ if (sid != SVGA_ID_INVALID)
+ {
+ AssertReturn( pSurface->pBackendSurface
+ && pSurface->pBackendSurface->enmResType == VMSVGA3D_RESTYPE_SCREEN_TARGET, VERR_INVALID_PARAMETER);
+
+ HANDLE const hSharedSurface = pHwScreen->SharedHandle;
+ rc = vmsvga3dDrvNotifyBindSurface(pThisCC, pScreen, hSharedSurface);
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ pHwScreen->sidScreenTarget = sid;
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dScreenTargetUpdate(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect)
+{
+ VMSVGAHWSCREEN *pHwScreen = pScreen->pHwScreen;
+ AssertReturn(pHwScreen, VERR_NOT_SUPPORTED);
+
+ if (pHwScreen->sidScreenTarget == SVGA_ID_INVALID)
+ return VINF_SUCCESS; /* No surface bound. */
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+ AssertReturn(pBackend, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, pHwScreen->sidScreenTarget, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = pSurface->pBackendSurface;
+ AssertReturn(pBackendSurface && pBackendSurface->enmResType == VMSVGA3D_RESTYPE_SCREEN_TARGET, VERR_INVALID_PARAMETER);
+
+ SVGA3dRect boundRect;
+ boundRect.x = 0;
+ boundRect.y = 0;
+ boundRect.w = pSurface->paMipmapLevels[0].mipmapSize.width;
+ boundRect.h = pSurface->paMipmapLevels[0].mipmapSize.height;
+ SVGA3dRect clipRect = *pRect;
+ vmsvgaR3Clip3dRect(&boundRect, &clipRect);
+ ASSERT_GUEST_RETURN(clipRect.w && clipRect.h, VERR_INVALID_PARAMETER);
+
+ /* Wait for the surface to finish drawing. */
+ dxSurfaceWait(pState, pSurface, DX_CID_BACKEND);
+
+ /* Copy the screen texture to the shared surface. */
+ DWORD result = pHwScreen->pDXGIKeyedMutex->AcquireSync(0, 10000);
+ if (result == S_OK)
+ {
+ pBackend->dxDevice.pImmediateContext->CopyResource(pHwScreen->pTexture, pBackendSurface->u.pTexture2D);
+
+ dxDeviceFlush(&pBackend->dxDevice);
+
+ result = pHwScreen->pDXGIKeyedMutex->ReleaseSync(1);
+ }
+ else
+ AssertFailed();
+
+ rc = vmsvga3dDrvNotifyUpdate(pThisCC, pScreen, pRect->x, pRect->y, pRect->w, pRect->h);
+ return rc;
+}
+
+
+/*
+ *
+ * 3D interface.
+ *
+ */
+
+static DECLCALLBACK(int) vmsvga3dBackQueryCaps(PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ int rc = VINF_SUCCESS;
+
+ *pu32Val = 0;
+
+ if (idx3dCaps > SVGA3D_DEVCAP_MAX)
+ {
+ LogRelMax(16, ("VMSVGA: unsupported SVGA3D_DEVCAP %d\n", idx3dCaps));
+ return VERR_NOT_SUPPORTED;
+ }
+
+ D3D_FEATURE_LEVEL const FeatureLevel = pState->pBackend->dxDevice.FeatureLevel;
+
+ /* Most values are taken from:
+ * https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-devices-downlevel-intro
+ *
+ * Shader values are from
+ * https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-models
+ */
+
+ switch (idx3dCaps)
+ {
+ case SVGA3D_DEVCAP_3D:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_LIGHTS:
+ *pu32Val = SVGA3D_NUM_LIGHTS; /* VGPU9. Not applicable to DX11. */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURES:
+ *pu32Val = SVGA3D_NUM_TEXTURE_UNITS; /* VGPU9. Not applicable to DX11. */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+ *pu32Val = SVGA3D_NUM_CLIPPLANES;
+ break;
+
+ case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = SVGA3DVSVERSION_40;
+ else
+ *pu32Val = SVGA3DVSVERSION_30;
+ break;
+
+ case SVGA3D_DEVCAP_VERTEX_SHADER:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = SVGA3DPSVERSION_40;
+ else
+ *pu32Val = SVGA3DPSVERSION_30;
+ break;
+
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_RENDER_TARGETS:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = 8;
+ else
+ *pu32Val = 4;
+ break;
+
+ case SVGA3D_DEVCAP_S23E8_TEXTURES:
+ case SVGA3D_DEVCAP_S10E5_TEXTURES:
+ /* Must be obsolete by now; surface format caps specify the same thing. */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+ /* Obsolete */
+ break;
+
+ /*
+ * 2. The BUFFER_FORMAT capabilities are deprecated, and they always
+ * return TRUE. Even on physical hardware that does not support
+ * these formats natively, the SVGA3D device will provide an emulation
+ * which should be invisible to the guest OS.
+ */
+ case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+ case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+ case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_QUERY_TYPES:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+ AssertCompile(sizeof(uint32_t) == sizeof(float));
+ *(float *)pu32Val = 256.0f; /* VGPU9. Not applicable to DX11. */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+ case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_11_0)
+ *pu32Val = 16384;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = 8192;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_9_3)
+ *pu32Val = 4096;
+ else
+ *pu32Val = 2048;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = 2048;
+ else
+ *pu32Val = 256;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_11_0)
+ *pu32Val = 16384;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_9_3)
+ *pu32Val = 8192;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_9_2)
+ *pu32Val = 2048;
+ else
+ *pu32Val = 128;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_9_2)
+ *pu32Val = D3D11_REQ_MAXANISOTROPY;
+ else
+ *pu32Val = 2; // D3D_FL9_1_DEFAULT_MAX_ANISOTROPY;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = UINT32_MAX;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_9_2)
+ *pu32Val = 1048575; // D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT;
+ else
+ *pu32Val = 65535; // D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = UINT32_MAX;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_9_2)
+ *pu32Val = 1048575;
+ else
+ *pu32Val = 65534;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = UINT32_MAX;
+ else
+ *pu32Val = 512;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = UINT32_MAX;
+ else
+ *pu32Val = 512;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = 4096;
+ else
+ *pu32Val = 32;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = 4096;
+ else
+ *pu32Val = 32;
+ break;
+
+ case SVGA3D_DEVCAP_TEXTURE_OPS:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+ case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+ case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+ case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+ case SVGA3D_DEVCAP_DEAD10: /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI1:
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI2:
+ case SVGA3D_DEVCAP_SURFACEFMT_YV12:
+ {
+ SVGA3dSurfaceFormat const enmFormat = vmsvgaDXDevCapSurfaceFmt2Format(idx3dCaps);
+ rc = vmsvgaDXCheckFormatSupportPreDX(pState, enmFormat, pu32Val);
+ break;
+ }
+
+ case SVGA3D_DEVCAP_MISSING62:
+ /* Unused */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+ if (FeatureLevel >= D3D_FEATURE_LEVEL_10_0)
+ *pu32Val = 8;
+ else if (FeatureLevel >= D3D_FEATURE_LEVEL_9_3)
+ *pu32Val = 4; // D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT
+ else
+ *pu32Val = 1; // D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT
+ break;
+
+ case SVGA3D_DEVCAP_DEAD4: /* SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES */
+ case SVGA3D_DEVCAP_DEAD5: /* SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES */
+ *pu32Val = (1 << (2-1)) | (1 << (4-1)) | (1 << (8-1)); /* 2x, 4x, 8x */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD7: /* SVGA3D_DEVCAP_ALPHATOCOVERAGE */
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD6: /* SVGA3D_DEVCAP_SUPERSAMPLE */
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+ *pu32Val = SVGA3D_MAX_CONTEXT_IDS;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+ *pu32Val = SVGA3D_MAX_SURFACE_IDS;
+ break;
+
+ case SVGA3D_DEVCAP_DEAD1:
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD8: /* SVGA3D_DEVCAP_VIDEO_DECODE */
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD9: /* SVGA3D_DEVCAP_VIDEO_PROCESS */
+ /* Obsolete */
+ break;
+
+ case SVGA3D_DEVCAP_LINE_AA:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_LINE_STIPPLE:
+ *pu32Val = 0; /* DX11 does not seem to support this directly. */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_LINE_WIDTH:
+ AssertCompile(sizeof(uint32_t) == sizeof(float));
+ *(float *)pu32Val = 1.0f;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_AA_LINE_WIDTH:
+ AssertCompile(sizeof(uint32_t) == sizeof(float));
+ *(float *)pu32Val = 1.0f;
+ break;
+
+ case SVGA3D_DEVCAP_DEAD3: /* Old SVGA3D_DEVCAP_LOGICOPS */
+ /* Deprecated. */
+ AssertCompile(SVGA3D_DEVCAP_DEAD3 == 92); /* Newer SVGA headers redefine this. */
+ break;
+
+ case SVGA3D_DEVCAP_TS_COLOR_KEY:
+ *pu32Val = 0; /* DX11 does not seem to support this directly. */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD2:
+ break;
+
+ case SVGA3D_DEVCAP_DXCONTEXT:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_DEAD11: /* SVGA3D_DEVCAP_MAX_TEXTURE_ARRAY_SIZE */
+ *pu32Val = D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
+ break;
+
+ case SVGA3D_DEVCAP_DX_MAX_VERTEXBUFFERS:
+ *pu32Val = D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT;
+ break;
+
+ case SVGA3D_DEVCAP_DX_MAX_CONSTANT_BUFFERS:
+ *pu32Val = D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT;
+ break;
+
+ case SVGA3D_DEVCAP_DX_PROVOKING_VERTEX:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_DXFMT_X8R8G8B8:
+ case SVGA3D_DEVCAP_DXFMT_A8R8G8B8:
+ case SVGA3D_DEVCAP_DXFMT_R5G6B5:
+ case SVGA3D_DEVCAP_DXFMT_X1R5G5B5:
+ case SVGA3D_DEVCAP_DXFMT_A1R5G5B5:
+ case SVGA3D_DEVCAP_DXFMT_A4R4G4B4:
+ case SVGA3D_DEVCAP_DXFMT_Z_D32:
+ case SVGA3D_DEVCAP_DXFMT_Z_D16:
+ case SVGA3D_DEVCAP_DXFMT_Z_D24S8:
+ case SVGA3D_DEVCAP_DXFMT_Z_D15S1:
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE8:
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE4_ALPHA4:
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE16:
+ case SVGA3D_DEVCAP_DXFMT_LUMINANCE8_ALPHA8:
+ case SVGA3D_DEVCAP_DXFMT_DXT1:
+ case SVGA3D_DEVCAP_DXFMT_DXT2:
+ case SVGA3D_DEVCAP_DXFMT_DXT3:
+ case SVGA3D_DEVCAP_DXFMT_DXT4:
+ case SVGA3D_DEVCAP_DXFMT_DXT5:
+ case SVGA3D_DEVCAP_DXFMT_BUMPU8V8:
+ case SVGA3D_DEVCAP_DXFMT_BUMPL6V5U5:
+ case SVGA3D_DEVCAP_DXFMT_BUMPX8L8V8U8:
+ case SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD1:
+ case SVGA3D_DEVCAP_DXFMT_ARGB_S10E5:
+ case SVGA3D_DEVCAP_DXFMT_ARGB_S23E8:
+ case SVGA3D_DEVCAP_DXFMT_A2R10G10B10:
+ case SVGA3D_DEVCAP_DXFMT_V8U8:
+ case SVGA3D_DEVCAP_DXFMT_Q8W8V8U8:
+ case SVGA3D_DEVCAP_DXFMT_CxV8U8:
+ case SVGA3D_DEVCAP_DXFMT_X8L8V8U8:
+ case SVGA3D_DEVCAP_DXFMT_A2W10V10U10:
+ case SVGA3D_DEVCAP_DXFMT_ALPHA8:
+ case SVGA3D_DEVCAP_DXFMT_R_S10E5:
+ case SVGA3D_DEVCAP_DXFMT_R_S23E8:
+ case SVGA3D_DEVCAP_DXFMT_RG_S10E5:
+ case SVGA3D_DEVCAP_DXFMT_RG_S23E8:
+ case SVGA3D_DEVCAP_DXFMT_BUFFER:
+ case SVGA3D_DEVCAP_DXFMT_Z_D24X8:
+ case SVGA3D_DEVCAP_DXFMT_V16U16:
+ case SVGA3D_DEVCAP_DXFMT_G16R16:
+ case SVGA3D_DEVCAP_DXFMT_A16B16G16R16:
+ case SVGA3D_DEVCAP_DXFMT_UYVY:
+ case SVGA3D_DEVCAP_DXFMT_YUY2:
+ case SVGA3D_DEVCAP_DXFMT_NV12:
+ case SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD2: /* SVGA3D_DEVCAP_DXFMT_AYUV */
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R32G32_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R32G32_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24:
+ case SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB:
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R16G16_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R32_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_D32_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R32_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R32_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8:
+ case SVGA3D_DEVCAP_DXFMT_X24_G8_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R8G8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R8G8_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R8G8_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R16_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R16_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R16_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R16_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R16_SINT:
+ case SVGA3D_DEVCAP_DXFMT_R8_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_R8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R8_UINT:
+ case SVGA3D_DEVCAP_DXFMT_R8_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R8_SINT:
+ case SVGA3D_DEVCAP_DXFMT_P8:
+ case SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP:
+ case SVGA3D_DEVCAP_DXFMT_R8G8_B8G8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_G8R8_G8B8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB:
+ case SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB:
+ case SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB:
+ case SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_ATI1:
+ case SVGA3D_DEVCAP_DXFMT_BC4_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_ATI2:
+ case SVGA3D_DEVCAP_DXFMT_BC5_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10_XR_BIAS_A2_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB:
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB:
+ case SVGA3D_DEVCAP_DXFMT_Z_DF16:
+ case SVGA3D_DEVCAP_DXFMT_Z_DF24:
+ case SVGA3D_DEVCAP_DXFMT_Z_D24S8_INT:
+ case SVGA3D_DEVCAP_DXFMT_YV12:
+ case SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R16G16_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_R16G16_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R32_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_R8G8_SNORM:
+ case SVGA3D_DEVCAP_DXFMT_R16_FLOAT:
+ case SVGA3D_DEVCAP_DXFMT_D16_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_A8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC1_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC2_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC3_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC4_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC5_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC6H_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_BC6H_UF16:
+ case SVGA3D_DEVCAP_DXFMT_BC6H_SF16:
+ case SVGA3D_DEVCAP_DXFMT_BC7_TYPELESS:
+ case SVGA3D_DEVCAP_DXFMT_BC7_UNORM:
+ case SVGA3D_DEVCAP_DXFMT_BC7_UNORM_SRGB:
+ {
+ SVGA3dSurfaceFormat const enmFormat = vmsvgaDXDevCapDxfmt2Format(idx3dCaps);
+ rc = vmsvgaDXCheckFormatSupport(pState, enmFormat, pu32Val);
+ break;
+ }
+
+ case SVGA3D_DEVCAP_SM41:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_MULTISAMPLE_2X:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_MULTISAMPLE_4X:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_MS_FULL_QUALITY:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_LOGICOPS:
+ AssertCompile(SVGA3D_DEVCAP_LOGICOPS == 248);
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_LOGIC_BLENDOPS:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_RESERVED_1:
+ break;
+
+ case SVGA3D_DEVCAP_RESERVED_2:
+ break;
+
+ case SVGA3D_DEVCAP_SM5:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_MULTISAMPLE_8X:
+ *pu32Val = 0; /* boolean */
+ break;
+
+ case SVGA3D_DEVCAP_MAX:
+ case SVGA3D_DEVCAP_INVALID:
+ rc = VERR_NOT_SUPPORTED;
+ break;
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackChangeMode(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src,
+ uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
+{
+ RT_NOREF(cCopyBoxes, pBox);
+
+ LogFunc(("src sid %d -> dst sid %d\n", src.sid, dest.sid));
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DBACKEND pBackend = pState->pBackend;
+
+ PVMSVGA3DSURFACE pSrcSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, src.sid, &pSrcSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pDstSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, dest.sid, &pDstSurface);
+ AssertRCReturn(rc, rc);
+
+ LogFunc(("src%s cid %d -> dst%s cid %d\n",
+ pSrcSurface->pBackendSurface ? "" : " sysmem",
+ pSrcSurface ? pSrcSurface->idAssociatedContext : SVGA_ID_INVALID,
+ pDstSurface->pBackendSurface ? "" : " sysmem",
+ pDstSurface ? pDstSurface->idAssociatedContext : SVGA_ID_INVALID));
+
+ //DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ //AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ if (pSrcSurface->pBackendSurface)
+ {
+ if (pDstSurface->pBackendSurface == NULL)
+ {
+ /* Create the target if it can be used as a device context shared resource (render or screen target). */
+ if (pBackend->fSingleDevice || dxIsSurfaceShareable(pDstSurface))
+ {
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, NULL, pDstSurface);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ if (pDstSurface->pBackendSurface)
+ {
+ /* Surface -> Surface. */
+ /* Expect both of them to be shared surfaces created by the backend context. */
+ Assert(pSrcSurface->idAssociatedContext == DX_CID_BACKEND && pDstSurface->idAssociatedContext == DX_CID_BACKEND);
+
+ /* Wait for the source surface to finish drawing. */
+ dxSurfaceWait(pState, pSrcSurface, DX_CID_BACKEND);
+
+ DXDEVICE *pDXDevice = &pBackend->dxDevice;
+
+ /* Clip the box. */
+ PVMSVGA3DMIPMAPLEVEL pSrcMipLevel;
+ rc = vmsvga3dMipmapLevel(pSrcSurface, src.face, src.mipmap, &pSrcMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ PVMSVGA3DMIPMAPLEVEL pDstMipLevel;
+ rc = vmsvga3dMipmapLevel(pDstSurface, dest.face, dest.mipmap, &pDstMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ SVGA3dCopyBox clipBox = *pBox;
+ vmsvgaR3ClipCopyBox(&pSrcMipLevel->mipmapSize, &pDstMipLevel->mipmapSize, &clipBox);
+
+ UINT DstSubresource = vmsvga3dCalcSubresource(dest.mipmap, dest.face, pDstSurface->cLevels);
+ UINT DstX = clipBox.x;
+ UINT DstY = clipBox.y;
+ UINT DstZ = clipBox.z;
+
+ UINT SrcSubresource = vmsvga3dCalcSubresource(src.mipmap, src.face, pSrcSurface->cLevels);
+ D3D11_BOX SrcBox;
+ SrcBox.left = clipBox.srcx;
+ SrcBox.top = clipBox.srcy;
+ SrcBox.front = clipBox.srcz;
+ SrcBox.right = clipBox.srcx + clipBox.w;
+ SrcBox.bottom = clipBox.srcy + clipBox.h;
+ SrcBox.back = clipBox.srcz + clipBox.d;
+
+ Assert(cCopyBoxes == 1); /** @todo */
+
+ ID3D11Resource *pDstResource;
+ ID3D11Resource *pSrcResource;
+ pDstResource = dxResource(pState, pDstSurface, NULL);
+ pSrcResource = dxResource(pState, pSrcSurface, NULL);
+
+ pDXDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, &SrcBox);
+
+ pDstSurface->pBackendSurface->cidDrawing = DX_CID_BACKEND;
+ }
+ else
+ {
+ /* Surface -> Memory. */
+ AssertFailed(); /** @todo implement */
+ }
+ }
+ else
+ {
+ /* Memory -> Surface. */
+ AssertFailed(); /** @todo implement */
+ }
+
+ return rc;
+}
+
+
+static DECLCALLBACK(void) vmsvga3dBackUpdateHostScreenViewport(PVGASTATECC pThisCC, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport)
+{
+ RT_NOREF(pThisCC, idScreen, pOldViewport);
+ /** @todo Scroll the screen content without requiring the guest to redraw. */
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceUpdateHeapBuffers(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface)
+{
+ /** @todo */
+ RT_NOREF(pThisCC, pSurface);
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+/*
+ *
+ * VGPU9 callbacks. Not implemented.
+ *
+ */
+/** @todo later */
+
+/**
+ * Create a new 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ */
+static DECLCALLBACK(int) vmsvga3dBackContextDefine(PVGASTATECC pThisCC, uint32_t cid)
+{
+ RT_NOREF(cid);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+/**
+ * Destroy an existing 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ */
+static DECLCALLBACK(int) vmsvga3dBackContextDestroy(PVGASTATECC pThisCC, uint32_t cid)
+{
+ RT_NOREF(cid);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetTransform(PVGASTATECC pThisCC, uint32_t cid, SVGA3dTransformType type, float matrix[16])
+{
+ RT_NOREF(cid, type, matrix);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetZRange(PVGASTATECC pThisCC, uint32_t cid, SVGA3dZRange zRange)
+{
+ RT_NOREF(cid, zRange);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetRenderState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState)
+{
+ RT_NOREF(cid, cRenderStates, pRenderState);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetRenderTarget(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target)
+{
+ RT_NOREF(cid, type, target);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetTextureState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
+{
+ RT_NOREF(cid, cTextureStates, pTextureState);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetMaterial(PVGASTATECC pThisCC, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial)
+{
+ RT_NOREF(cid, face, pMaterial);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetLightData(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData)
+{
+ RT_NOREF(cid, index, pData);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetLightEnabled(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, uint32_t enabled)
+{
+ RT_NOREF(cid, index, enabled);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetViewPort(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ RT_NOREF(cid, pRect);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetClipPlane(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4])
+{
+ RT_NOREF(cid, index, plane);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackCommandClear(PVGASTATECC pThisCC, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth,
+ uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect)
+{
+ /* From SVGA3D_BeginClear comments:
+ *
+ * Clear is not affected by clipping, depth test, or other
+ * render state which affects the fragment pipeline.
+ *
+ * Therefore this code must ignore the current scissor rect.
+ */
+
+ RT_NOREF(cid, clearFlag, color, depth, stencil, cRects, pRect);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDrawPrimitives(PVGASTATECC pThisCC, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl,
+ uint32_t numRanges, SVGA3dPrimitiveRange *pRange,
+ uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
+{
+ RT_NOREF(cid, numVertexDecls, pVertexDecl, numRanges, pRange, cVertexDivisor, pVertexDivisor);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetScissorRect(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ RT_NOREF(cid, pRect);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackGenerateMipmaps(PVGASTATECC pThisCC, uint32_t sid, SVGA3dTextureFilter filter)
+{
+ RT_NOREF(sid, filter);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackShaderDefine(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type,
+ uint32_t cbData, uint32_t *pShaderData)
+{
+ RT_NOREF(cid, shid, type, cbData, pShaderData);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type)
+{
+ RT_NOREF(cid, shid, type);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackShaderSet(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
+{
+ RT_NOREF(pContext, cid, type, shid);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackShaderSetConst(PVGASTATECC pThisCC, uint32_t cid, uint32_t reg, SVGA3dShaderType type,
+ SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues)
+{
+ RT_NOREF(cid, reg, type, ctype, cRegisters, pValues);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryCreate(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC, pContext);
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryDelete(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC, pContext);
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryBegin(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC, pContext);
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryEnd(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC, pContext);
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryGetData(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels)
+{
+ RT_NOREF(pThisCC, pContext, pu32Pixels);
+ DEBUG_BREAKPOINT_TEST();
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Destroy backend specific surface bits (part of SVGA_3D_CMD_SURFACE_DESTROY).
+ *
+ * @param pThisCC The device context.
+ * @param fClearCOTableEntry Whether to clear the corresponding COTable entry.
+ * @param pSurface The surface being destroyed.
+ */
+static DECLCALLBACK(void) vmsvga3dBackSurfaceDestroy(PVGASTATECC pThisCC, bool fClearCOTableEntry, PVMSVGA3DSURFACE pSurface)
+{
+ RT_NOREF(pThisCC);
+
+ /* The caller should not use the function for system memory surfaces. */
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = pSurface->pBackendSurface;
+ if (!pBackendSurface)
+ return;
+ pSurface->pBackendSurface = NULL;
+
+ LogFunc(("sid=%u\n", pSurface->id));
+
+ /* If any views have been created for this resource, then also release them. */
+ DXVIEW *pIter, *pNext;
+ RTListForEachSafe(&pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView)
+ {
+ LogFunc(("pIter=%p, pNext=%p\n", pIter, pNext));
+
+ /** @todo The common DX code should track the views and clean COTable on a surface destruction. */
+ if (fClearCOTableEntry)
+ {
+ PVMSVGA3DDXCONTEXT pDXContext;
+ int rc = vmsvga3dDXContextFromCid(pThisCC->svga.p3dState, pIter->cid, &pDXContext);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ switch (pIter->enmViewType)
+ {
+ case VMSVGA3D_VIEWTYPE_RENDERTARGET:
+ {
+ SVGACOTableDXRTViewEntry *pEntry = &pDXContext->cot.paRTView[pIter->viewId];
+ RT_ZERO(*pEntry);
+ break;
+ }
+ case VMSVGA3D_VIEWTYPE_DEPTHSTENCIL:
+ {
+ SVGACOTableDXDSViewEntry *pEntry = &pDXContext->cot.paDSView[pIter->viewId];
+ RT_ZERO(*pEntry);
+ break;
+ }
+ case VMSVGA3D_VIEWTYPE_SHADERRESOURCE:
+ {
+ SVGACOTableDXSRViewEntry *pEntry = &pDXContext->cot.paSRView[pIter->viewId];
+ RT_ZERO(*pEntry);
+ break;
+ }
+ case VMSVGA3D_VIEWTYPE_UNORDEREDACCESS:
+ {
+ SVGACOTableDXUAViewEntry *pEntry = &pDXContext->cot.paUAView[pIter->viewId];
+ RT_ZERO(*pEntry);
+ break;
+ }
+ default:
+ AssertFailed();
+ }
+ }
+ }
+
+ dxViewDestroy(pIter);
+ }
+
+ if ( pBackendSurface->enmResType == VMSVGA3D_RESTYPE_SCREEN_TARGET
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_1D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_2D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_CUBE
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_3D)
+ {
+ D3D_RELEASE(pBackendSurface->staging.pResource);
+ D3D_RELEASE(pBackendSurface->dynamic.pResource);
+ D3D_RELEASE(pBackendSurface->u.pResource);
+ }
+ else if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_BUFFER)
+ {
+ D3D_RELEASE(pBackendSurface->u.pBuffer);
+ }
+ else
+ {
+ AssertFailed();
+ }
+
+ RTMemFree(pBackendSurface);
+
+ /* No context has created the surface, because the surface does not exist anymore. */
+ pSurface->idAssociatedContext = SVGA_ID_INVALID;
+}
+
+
+static DECLCALLBACK(void) vmsvga3dBackSurfaceInvalidateImage(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface, uint32_t uFace, uint32_t uMipmap)
+{
+ RT_NOREF(pThisCC, uFace, uMipmap);
+
+ /* The caller should not use the function for system memory surfaces. */
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = pSurface->pBackendSurface;
+ if (!pBackendSurface)
+ return;
+
+ LogFunc(("sid=%u\n", pSurface->id));
+
+ /* The guest uses this to invalidate a buffer. */
+ if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_BUFFER)
+ {
+ Assert(uFace == 0 && uMipmap == 0); /* The caller ensures this. */
+ /** @todo This causes flickering when a buffer is invalidated and re-created right before a draw call. */
+ //vmsvga3dBackSurfaceDestroy(pThisCC, pSurface);
+ }
+ else
+ {
+ /** @todo Delete views that have been created for this mipmap.
+ * For now just delete all views, they will be recte=reated if necessary.
+ */
+ ASSERT_GUEST_FAILED();
+ DXVIEW *pIter, *pNext;
+ RTListForEachSafe(&pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView)
+ {
+ dxViewDestroy(pIter);
+ }
+ }
+}
+
+
+/**
+ * Backend worker for implementing SVGA_3D_CMD_SURFACE_STRETCHBLT.
+ *
+ * @returns VBox status code.
+ * @param pThis The VGA device instance.
+ * @param pState The VMSVGA3d state.
+ * @param pDstSurface The destination host surface.
+ * @param uDstFace The destination face (valid).
+ * @param uDstMipmap The destination mipmap level (valid).
+ * @param pDstBox The destination box.
+ * @param pSrcSurface The source host surface.
+ * @param uSrcFace The destination face (valid).
+ * @param uSrcMipmap The source mimap level (valid).
+ * @param pSrcBox The source box.
+ * @param enmMode The strecht blt mode .
+ * @param pContext The VMSVGA3d context (already current for OGL).
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
+ PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+ PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+ SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThis, pState, pDstSurface, uDstFace, uDstMipmap, pDstBox,
+ pSrcSurface, uSrcFace, uSrcMipmap, pSrcBox, enmMode, pContext);
+
+ AssertFailed();
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Backend worker for implementing SVGA_3D_CMD_SURFACE_DMA that copies one box.
+ *
+ * @returns Failure status code or @a rc.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pState The VMSVGA3d state.
+ * @param pSurface The host surface.
+ * @param pMipLevel Mipmap level. The caller knows it already.
+ * @param uHostFace The host face (valid).
+ * @param uHostMipmap The host mipmap level (valid).
+ * @param GuestPtr The guest pointer.
+ * @param cbGuestPitch The guest pitch.
+ * @param transfer The transfer direction.
+ * @param pBox The box to copy (clipped, valid, except for guest's srcx, srcy, srcz).
+ * @param pContext The context (for OpenGL).
+ * @param rc The current rc for all boxes.
+ * @param iBox The current box number (for Direct 3D).
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVGASTATECC pThisCC, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+ PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+ SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
+ SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox)
+{
+ RT_NOREF(pState, pMipLevel, pContext, iBox);
+
+ /* The called should not use the function for system memory surfaces. */
+ PVMSVGA3DBACKENDSURFACE pBackendSurface = pSurface->pBackendSurface;
+ AssertReturn(pBackendSurface, VERR_INVALID_PARAMETER);
+
+ if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_SCREEN_TARGET)
+ {
+ /** @todo This is generic code and should be in DevVGA-SVGA3d.cpp for backends which support Map/Unmap. */
+ AssertReturn(uHostFace == 0 && uHostMipmap == 0, VERR_INVALID_PARAMETER);
+
+ uint32_t const u32GuestBlockX = pBox->srcx / pSurface->cxBlock;
+ uint32_t const u32GuestBlockY = pBox->srcy / pSurface->cyBlock;
+ Assert(u32GuestBlockX * pSurface->cxBlock == pBox->srcx);
+ Assert(u32GuestBlockY * pSurface->cyBlock == pBox->srcy);
+ uint32_t const cBlocksX = (pBox->w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cBlocksY = (pBox->h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+ AssertMsgReturn(cBlocksX && cBlocksY, ("Empty box %dx%d\n", pBox->w, pBox->h), VERR_INTERNAL_ERROR);
+
+ /* vmsvgaR3GmrTransfer verifies uGuestOffset.
+ * srcx(u32GuestBlockX) and srcy(u32GuestBlockY) have been verified in vmsvga3dSurfaceDMA
+ * to not cause 32 bit overflow when multiplied by cbBlock and cbGuestPitch.
+ */
+ uint64_t const uGuestOffset = u32GuestBlockX * pSurface->cbBlock + u32GuestBlockY * cbGuestPitch;
+ AssertReturn(uGuestOffset < UINT32_MAX, VERR_INVALID_PARAMETER);
+
+ SVGA3dSurfaceImageId image;
+ image.sid = pSurface->id;
+ image.face = uHostFace;
+ image.mipmap = uHostMipmap;
+
+ SVGA3dBox box;
+ box.x = pBox->x;
+ box.y = pBox->y;
+ box.z = 0;
+ box.w = pBox->w;
+ box.h = pBox->h;
+ box.d = 1;
+
+ VMSVGA3D_SURFACE_MAP const enmMap = transfer == SVGA3D_WRITE_HOST_VRAM
+ ? VMSVGA3D_SURFACE_MAP_WRITE
+ : VMSVGA3D_SURFACE_MAP_READ;
+
+ VMSVGA3D_MAPPED_SURFACE map;
+ rc = vmsvga3dBackSurfaceMap(pThisCC, &image, &box, enmMap, &map);
+ if (RT_SUCCESS(rc))
+ {
+ /* Prepare parameters for vmsvgaR3GmrTransfer, which needs the host buffer address, size
+ * and offset of the first scanline.
+ */
+ uint32_t const cbLockedBuf = map.cbRowPitch * cBlocksY;
+ uint8_t *pu8LockedBuf = (uint8_t *)map.pvData;
+ uint32_t const offLockedBuf = 0;
+
+ rc = vmsvgaR3GmrTransfer(pThis,
+ pThisCC,
+ transfer,
+ pu8LockedBuf,
+ cbLockedBuf,
+ offLockedBuf,
+ map.cbRowPitch,
+ GuestPtr,
+ (uint32_t)uGuestOffset,
+ cbGuestPitch,
+ cBlocksX * pSurface->cbBlock,
+ cBlocksY);
+ AssertRC(rc);
+
+ // Log4(("first line:\n%.*Rhxd\n", cBlocksX * pSurface->cbBlock, LockedRect.pBits));
+
+ //vmsvga3dMapWriteBmpFile(&map, "Dynamic");
+
+ vmsvga3dBackSurfaceUnmap(pThisCC, &image, &map, /* fWritten = */ true);
+ }
+#if 0
+ //DEBUG_BREAKPOINT_TEST();
+ rc = vmsvga3dBackSurfaceMap(pThisCC, &image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
+ if (RT_SUCCESS(rc))
+ {
+ vmsvga3dMapWriteBmpFile(&map, "Staging");
+
+ vmsvga3dBackSurfaceUnmap(pThisCC, &image, &map, /* fWritten = */ false);
+ }
+#endif
+ }
+ else if ( pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_1D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_2D
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_CUBE
+ || pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_3D)
+ {
+ /** @todo This is generic code and should be in DevVGA-SVGA3d.cpp for backends which support Map/Unmap. */
+ uint32_t const u32GuestBlockX = pBox->srcx / pSurface->cxBlock;
+ uint32_t const u32GuestBlockY = pBox->srcy / pSurface->cyBlock;
+ Assert(u32GuestBlockX * pSurface->cxBlock == pBox->srcx);
+ Assert(u32GuestBlockY * pSurface->cyBlock == pBox->srcy);
+ uint32_t const cBlocksX = (pBox->w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cBlocksY = (pBox->h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+ AssertMsgReturn(cBlocksX && cBlocksY && pBox->d, ("Empty box %dx%dx%d\n", pBox->w, pBox->h, pBox->d), VERR_INTERNAL_ERROR);
+
+ /* vmsvgaR3GmrTransfer verifies uGuestOffset.
+ * srcx(u32GuestBlockX) and srcy(u32GuestBlockY) have been verified in vmsvga3dSurfaceDMA
+ * to not cause 32 bit overflow when multiplied by cbBlock and cbGuestPitch.
+ */
+ uint64_t uGuestOffset = u32GuestBlockX * pSurface->cbBlock + u32GuestBlockY * cbGuestPitch;
+ AssertReturn(uGuestOffset < UINT32_MAX, VERR_INVALID_PARAMETER);
+
+ /* 3D texture needs additional processing. */
+ ASSERT_GUEST_RETURN( pBox->z < D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
+ && pBox->d <= D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
+ && pBox->d <= D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION - pBox->z,
+ VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN( pBox->srcz < D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
+ && pBox->d <= D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
+ && pBox->d <= D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION - pBox->srcz,
+ VERR_INVALID_PARAMETER);
+
+ uGuestOffset += pBox->srcz * pMipLevel->cbSurfacePlane;
+
+ SVGA3dSurfaceImageId image;
+ image.sid = pSurface->id;
+ image.face = uHostFace;
+ image.mipmap = uHostMipmap;
+
+ SVGA3dBox box;
+ box.x = pBox->x;
+ box.y = pBox->y;
+ box.z = pBox->z;
+ box.w = pBox->w;
+ box.h = pBox->h;
+ box.d = pBox->d;
+
+ VMSVGA3D_SURFACE_MAP const enmMap = transfer == SVGA3D_WRITE_HOST_VRAM
+ ? VMSVGA3D_SURFACE_MAP_WRITE
+ : VMSVGA3D_SURFACE_MAP_READ;
+
+ VMSVGA3D_MAPPED_SURFACE map;
+ rc = vmsvga3dBackSurfaceMap(pThisCC, &image, &box, enmMap, &map);
+ if (RT_SUCCESS(rc))
+ {
+#if 0
+ if (box.w == 250 && box.h == 250 && box.d == 1 && enmMap == VMSVGA3D_SURFACE_MAP_READ)
+ {
+ DEBUG_BREAKPOINT_TEST();
+ vmsvga3dMapWriteBmpFile(&map, "P");
+ }
+#endif
+ /* Prepare parameters for vmsvgaR3GmrTransfer, which needs the host buffer address, size
+ * and offset of the first scanline.
+ */
+ uint32_t cbLockedBuf = map.cbRowPitch * cBlocksY;
+ if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_TEXTURE_3D)
+ cbLockedBuf += map.cbDepthPitch * (pBox->d - 1); /// @todo why map does not compute this for 2D textures
+ uint8_t *pu8LockedBuf = (uint8_t *)map.pvData;
+ uint32_t offLockedBuf = 0;
+
+ for (uint32_t iPlane = 0; iPlane < pBox->d; ++iPlane)
+ {
+ AssertBreak(uGuestOffset < UINT32_MAX);
+
+ rc = vmsvgaR3GmrTransfer(pThis,
+ pThisCC,
+ transfer,
+ pu8LockedBuf,
+ cbLockedBuf,
+ offLockedBuf,
+ map.cbRowPitch,
+ GuestPtr,
+ (uint32_t)uGuestOffset,
+ cbGuestPitch,
+ cBlocksX * pSurface->cbBlock,
+ cBlocksY);
+ AssertRC(rc);
+
+ uGuestOffset += pMipLevel->cbSurfacePlane;
+ offLockedBuf += map.cbDepthPitch;
+ }
+
+ bool const fWritten = (transfer == SVGA3D_WRITE_HOST_VRAM);
+ vmsvga3dBackSurfaceUnmap(pThisCC, &image, &map, fWritten);
+ }
+ }
+ else
+ {
+ AssertMsgFailed(("Unsupported surface type %d\n", pBackendSurface->enmResType));
+ rc = VERR_NOT_IMPLEMENTED;
+ }
+
+ return rc;
+}
+
+
+/**
+ * Create D3D/OpenGL texture object for the specified surface.
+ *
+ * Surfaces are created when needed.
+ *
+ * @param pThisCC The device context.
+ * @param pContext The context.
+ * @param idAssociatedContext Probably the same as pContext->id.
+ * @param pSurface The surface to create the texture for.
+ */
+static DECLCALLBACK(int) vmsvga3dBackCreateTexture(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext,
+ PVMSVGA3DSURFACE pSurface)
+
+{
+ RT_NOREF(pThisCC, pContext, idAssociatedContext, pSurface);
+
+ AssertFailed();
+ return VINF_SUCCESS;
+}
+
+
+/*
+ * DX callbacks.
+ */
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ /* Allocate a backend specific context structure. */
+ PVMSVGA3DBACKENDDXCONTEXT pBackendDXContext = (PVMSVGA3DBACKENDDXCONTEXT)RTMemAllocZ(sizeof(VMSVGA3DBACKENDDXCONTEXT));
+ AssertPtrReturn(pBackendDXContext, VERR_NO_MEMORY);
+ pDXContext->pBackendDXContext = pBackendDXContext;
+
+ LogFunc(("cid %d\n", pDXContext->cid));
+
+ int rc = dxDeviceCreate(pBackend, &pBackendDXContext->dxDevice);
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ LogFunc(("cid %d\n", pDXContext->cid));
+
+ if (pDXContext->pBackendDXContext)
+ {
+ /* Clean up context resources. */
+ VMSVGA3DBACKENDDXCONTEXT *pBackendDXContext = pDXContext->pBackendDXContext;
+
+ for (uint32_t idxShaderState = 0; idxShaderState < RT_ELEMENTS(pBackendDXContext->resources.shaderState); ++idxShaderState)
+ {
+ ID3D11Buffer **papConstantBuffer = &pBackendDXContext->resources.shaderState[idxShaderState].constantBuffers[0];
+ D3D_RELEASE_ARRAY(RT_ELEMENTS(pBackendDXContext->resources.shaderState[idxShaderState].constantBuffers), papConstantBuffer);
+ }
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pBackendDXContext->resources.inputAssembly.vertexBuffers); ++i)
+ {
+ D3D_RELEASE(pBackendDXContext->resources.inputAssembly.vertexBuffers[i].pBuffer);
+ }
+
+ D3D_RELEASE(pBackendDXContext->resources.inputAssembly.indexBuffer.pBuffer);
+
+ if (pBackendDXContext->dxDevice.pImmediateContext)
+ dxDeviceFlush(&pBackendDXContext->dxDevice); /* Make sure that any pending draw calls are finished. */
+
+ if (pBackendDXContext->paRenderTargetView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cRenderTargetView; ++i)
+ D3D_RELEASE(pBackendDXContext->paRenderTargetView[i].u.pRenderTargetView);
+ }
+ if (pBackendDXContext->paDepthStencilView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cDepthStencilView; ++i)
+ D3D_RELEASE(pBackendDXContext->paDepthStencilView[i].u.pDepthStencilView);
+ }
+ if (pBackendDXContext->paShaderResourceView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cShaderResourceView; ++i)
+ D3D_RELEASE(pBackendDXContext->paShaderResourceView[i].u.pShaderResourceView);
+ }
+ if (pBackendDXContext->paElementLayout)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cElementLayout; ++i)
+ D3D_RELEASE(pBackendDXContext->paElementLayout[i].pElementLayout);
+ }
+ if (pBackendDXContext->papBlendState)
+ D3D_RELEASE_ARRAY(pBackendDXContext->cBlendState, pBackendDXContext->papBlendState);
+ if (pBackendDXContext->papDepthStencilState)
+ D3D_RELEASE_ARRAY(pBackendDXContext->cDepthStencilState, pBackendDXContext->papDepthStencilState);
+ if (pBackendDXContext->papRasterizerState)
+ D3D_RELEASE_ARRAY(pBackendDXContext->cRasterizerState, pBackendDXContext->papRasterizerState);
+ if (pBackendDXContext->papSamplerState)
+ D3D_RELEASE_ARRAY(pBackendDXContext->cSamplerState, pBackendDXContext->papSamplerState);
+ if (pBackendDXContext->paQuery)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cQuery; ++i)
+ dxDestroyQuery(&pBackendDXContext->paQuery[i]);
+ }
+ if (pBackendDXContext->paShader)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cShader; ++i)
+ dxDestroyShader(&pBackendDXContext->paShader[i]);
+ }
+ if (pBackendDXContext->paStreamOutput)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cStreamOutput; ++i)
+ dxDestroyStreamOutput(&pBackendDXContext->paStreamOutput[i]);
+ }
+
+ RTMemFreeZ(pBackendDXContext->papBlendState, sizeof(pBackendDXContext->papBlendState[0]) * pBackendDXContext->cBlendState);
+ RTMemFreeZ(pBackendDXContext->papDepthStencilState, sizeof(pBackendDXContext->papDepthStencilState[0]) * pBackendDXContext->cDepthStencilState);
+ RTMemFreeZ(pBackendDXContext->papSamplerState, sizeof(pBackendDXContext->papSamplerState[0]) * pBackendDXContext->cSamplerState);
+ RTMemFreeZ(pBackendDXContext->papRasterizerState, sizeof(pBackendDXContext->papRasterizerState[0]) * pBackendDXContext->cRasterizerState);
+ RTMemFreeZ(pBackendDXContext->paElementLayout, sizeof(pBackendDXContext->paElementLayout[0]) * pBackendDXContext->cElementLayout);
+ RTMemFreeZ(pBackendDXContext->paRenderTargetView, sizeof(pBackendDXContext->paRenderTargetView[0]) * pBackendDXContext->cRenderTargetView);
+ RTMemFreeZ(pBackendDXContext->paDepthStencilView, sizeof(pBackendDXContext->paDepthStencilView[0]) * pBackendDXContext->cDepthStencilView);
+ RTMemFreeZ(pBackendDXContext->paShaderResourceView, sizeof(pBackendDXContext->paShaderResourceView[0]) * pBackendDXContext->cShaderResourceView);
+ RTMemFreeZ(pBackendDXContext->paQuery, sizeof(pBackendDXContext->paQuery[0]) * pBackendDXContext->cQuery);
+ RTMemFreeZ(pBackendDXContext->paShader, sizeof(pBackendDXContext->paShader[0]) * pBackendDXContext->cShader);
+ RTMemFreeZ(pBackendDXContext->paStreamOutput, sizeof(pBackendDXContext->paStreamOutput[0]) * pBackendDXContext->cStreamOutput);
+
+ /* Destroy backend surfaces which belong to this context. */
+ /** @todo The context should have a list of surfaces (and also shared resources). */
+ /** @todo This should not be needed in fSingleDevice mode. */
+ for (uint32_t sid = 0; sid < pThisCC->svga.p3dState->cSurfaces; ++sid)
+ {
+ PVMSVGA3DSURFACE const pSurface = pThisCC->svga.p3dState->papSurfaces[sid];
+ if ( pSurface
+ && pSurface->id == sid)
+ {
+ if (pSurface->idAssociatedContext == pDXContext->cid)
+ {
+ if (pSurface->pBackendSurface)
+ vmsvga3dBackSurfaceDestroy(pThisCC, true, pSurface);
+ }
+ else if (pSurface->idAssociatedContext == DX_CID_BACKEND)
+ {
+ /* May have shared resources in this context. */
+ if (pSurface->pBackendSurface)
+ {
+ DXSHAREDTEXTURE *pSharedTexture = (DXSHAREDTEXTURE *)RTAvlU32Get(&pSurface->pBackendSurface->SharedTextureTree, pDXContext->cid);
+ if (pSharedTexture)
+ {
+ Assert(pSharedTexture->sid == sid);
+ RTAvlU32Remove(&pSurface->pBackendSurface->SharedTextureTree, pDXContext->cid);
+ D3D_RELEASE(pSharedTexture->pTexture);
+ RTMemFreeZ(pSharedTexture, sizeof(*pSharedTexture));
+ }
+ }
+ }
+ }
+ }
+
+ dxDeviceDestroy(pBackend, &pBackendDXContext->dxDevice);
+
+ RTMemFreeZ(pBackendDXContext, sizeof(*pBackendDXContext));
+ pDXContext->pBackendDXContext = NULL;
+ }
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBindContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend, pDXContext);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSwitchContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ if (!pBackend->fSingleDevice)
+ return VINF_NOT_IMPLEMENTED; /* Not required. */
+
+ /* The new context state will be applied by the generic DX code. */
+ RT_NOREF(pDXContext);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXReadbackContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend, pDXContext);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXInvalidateContext(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetSingleConstantBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t slot, SVGA3dShaderType type, SVGA3dSurfaceId sid, uint32_t offsetInBytes, uint32_t sizeInBytes)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ if (sid == SVGA_ID_INVALID)
+ {
+ uint32_t const idxShaderState = type - SVGA3D_SHADERTYPE_MIN;
+ D3D_RELEASE(pDXContext->pBackendDXContext->resources.shaderState[idxShaderState].constantBuffers[slot]);
+ return VINF_SUCCESS;
+ }
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, 0, 0, &pMipLevel);
+ AssertRCReturn(rc, rc);
+
+ uint32_t const cbSurface = pMipLevel->cbSurface;
+ ASSERT_GUEST_RETURN( offsetInBytes < cbSurface
+ && sizeInBytes <= cbSurface - offsetInBytes, VERR_INVALID_PARAMETER);
+
+ /* Constant buffers are created on demand. */
+ Assert(pSurface->pBackendSurface == NULL);
+
+ /* Upload the current data, if any. */
+ D3D11_SUBRESOURCE_DATA *pInitialData = NULL;
+ D3D11_SUBRESOURCE_DATA initialData;
+ if (pMipLevel->pSurfaceData)
+ {
+ initialData.pSysMem = (uint8_t *)pMipLevel->pSurfaceData + offsetInBytes;
+ initialData.SysMemPitch = sizeInBytes;
+ initialData.SysMemSlicePitch = sizeInBytes;
+
+ pInitialData = &initialData;
+
+ // Log(("%.*Rhxd\n", sizeInBytes, initialData.pSysMem));
+ }
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = sizeInBytes;
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+ bd.CPUAccessFlags = 0;
+ bd.MiscFlags = 0;
+ bd.StructureByteStride = 0;
+
+ ID3D11Buffer *pBuffer = 0;
+ HRESULT hr = pDevice->pDevice->CreateBuffer(&bd, pInitialData, &pBuffer);
+ if (SUCCEEDED(hr))
+ {
+ uint32_t const idxShaderState = type - SVGA3D_SHADERTYPE_MIN;
+ ID3D11Buffer **ppOldBuffer = &pDXContext->pBackendDXContext->resources.shaderState[idxShaderState].constantBuffers[slot];
+ LogFunc(("constant buffer: [%u][%u]: sid = %u, %u, %u (%p -> %p)\n",
+ idxShaderState, slot, sid, offsetInBytes, sizeInBytes, *ppOldBuffer, pBuffer));
+ D3D_RELEASE(*ppOldBuffer);
+ *ppOldBuffer = pBuffer;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static int dxSetShaderResources(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderType type)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+//DEBUG_BREAKPOINT_TEST();
+ AssertReturn(type >= SVGA3D_SHADERTYPE_MIN && type < SVGA3D_SHADERTYPE_MAX, VERR_INVALID_PARAMETER);
+ uint32_t const idxShaderState = type - SVGA3D_SHADERTYPE_MIN;
+ uint32_t const *pSRIds = &pDXContext->svgaDXContext.shaderState[idxShaderState].shaderResources[0];
+ ID3D11ShaderResourceView *papShaderResourceView[SVGA3D_DX_MAX_SRVIEWS];
+ for (uint32_t i = 0; i < SVGA3D_DX_MAX_SRVIEWS; ++i)
+ {
+ SVGA3dShaderResourceViewId shaderResourceViewId = pSRIds[i];
+ if (shaderResourceViewId != SVGA3D_INVALID_ID)
+ {
+ ASSERT_GUEST_RETURN(shaderResourceViewId < pDXContext->pBackendDXContext->cShaderResourceView, VERR_INVALID_PARAMETER);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paShaderResourceView[shaderResourceViewId];
+ Assert(pDXView->u.pShaderResourceView);
+ papShaderResourceView[i] = pDXView->u.pShaderResourceView;
+ }
+ else
+ papShaderResourceView[i] = NULL;
+ }
+
+ dxShaderResourceViewSet(pDevice, type, 0, SVGA3D_DX_MAX_SRVIEWS, papShaderResourceView);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetShaderResources(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startView, SVGA3dShaderType type, uint32_t cShaderResourceViewId, SVGA3dShaderResourceViewId const *paShaderResourceViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(startView, type, cShaderResourceViewId, paShaderResourceViewId);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, SVGA3dShaderType type)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(shaderId, type);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetSamplers(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startSampler, SVGA3dShaderType type, uint32_t cSamplerId, SVGA3dSamplerId const *paSamplerId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ ID3D11SamplerState *papSamplerState[SVGA3D_DX_MAX_SAMPLERS];
+ for (uint32_t i = 0; i < cSamplerId; ++i)
+ {
+ SVGA3dSamplerId samplerId = paSamplerId[i];
+ if (samplerId != SVGA3D_INVALID_ID)
+ {
+ ASSERT_GUEST_RETURN(samplerId < pDXContext->pBackendDXContext->cSamplerState, VERR_INVALID_PARAMETER);
+ papSamplerState[i] = pDXContext->pBackendDXContext->papSamplerState[samplerId];
+ }
+ else
+ papSamplerState[i] = NULL;
+ }
+
+ dxSamplerSet(pDevice, type, startSampler, cSamplerId, papSamplerState);
+ return VINF_SUCCESS;
+}
+
+
+static void vboxDXMatchShaderInput(DXSHADER *pDXShader, DXSHADER *pDXShaderPrior)
+{
+ /* For each input generic attribute of the shader find corresponding entry in the prior shader. */
+ for (uint32_t i = 0; i < pDXShader->shaderInfo.cInputSignature; ++i)
+ {
+ SVGA3dDXSignatureEntry const *pSignatureEntry = &pDXShader->shaderInfo.aInputSignature[i];
+ DXShaderAttributeSemantic *pSemantic = &pDXShader->shaderInfo.aInputSemantic[i];
+
+ if (pSignatureEntry->semanticName != SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED)
+ continue;
+
+ int iMatch = -1;
+ for (uint32_t iPrior = 0; iPrior < pDXShaderPrior->shaderInfo.cOutputSignature; ++iPrior)
+ {
+ SVGA3dDXSignatureEntry const *pPriorSignatureEntry = &pDXShaderPrior->shaderInfo.aOutputSignature[iPrior];
+
+ if (pPriorSignatureEntry->semanticName != SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED)
+ continue;
+
+ if (pPriorSignatureEntry->registerIndex == pSignatureEntry->registerIndex)
+ {
+ iMatch = iPrior;
+ if (pPriorSignatureEntry->mask == pSignatureEntry->mask)
+ break; /* Exact match, no need to continue search. */
+ }
+ }
+
+ if (iMatch >= 0)
+ {
+ SVGA3dDXSignatureEntry const *pPriorSignatureEntry = &pDXShaderPrior->shaderInfo.aOutputSignature[iMatch];
+ DXShaderAttributeSemantic const *pPriorSemantic = &pDXShaderPrior->shaderInfo.aOutputSemantic[iMatch];
+
+ Assert(pPriorSignatureEntry->registerIndex == pSignatureEntry->registerIndex);
+ Assert((pPriorSignatureEntry->mask & pSignatureEntry->mask) == pSignatureEntry->mask);
+ RT_NOREF(pPriorSignatureEntry);
+
+ pSemantic->SemanticIndex = pPriorSemantic->SemanticIndex;
+ }
+ }
+}
+
+
+static void vboxDXMatchShaderSignatures(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)
+{
+ SVGA3dShaderId const shaderIdVS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_VS - SVGA3D_SHADERTYPE_MIN].shaderId;
+ SVGA3dShaderId const shaderIdHS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_HS - SVGA3D_SHADERTYPE_MIN].shaderId;
+ SVGA3dShaderId const shaderIdDS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_DS - SVGA3D_SHADERTYPE_MIN].shaderId;
+ SVGA3dShaderId const shaderIdGS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_GS - SVGA3D_SHADERTYPE_MIN].shaderId;
+ SVGA3dShaderId const shaderIdPS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_PS - SVGA3D_SHADERTYPE_MIN].shaderId;
+
+ /* Try to fix the input semantic indices. Output is usually not changed. */
+ switch (pDXShader->enmShaderType)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ {
+ /* Match input to input layout, which sets generic semantic indices to the source registerIndex (dxCreateInputLayout). */
+ for (uint32_t i = 0; i < pDXShader->shaderInfo.cInputSignature; ++i)
+ {
+ SVGA3dDXSignatureEntry const *pSignatureEntry = &pDXShader->shaderInfo.aInputSignature[i];
+ DXShaderAttributeSemantic *pSemantic = &pDXShader->shaderInfo.aInputSemantic[i];
+
+ if (pSignatureEntry->semanticName != SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED)
+ continue;
+
+ pSemantic->SemanticIndex = pSignatureEntry->registerIndex;
+ }
+ break;
+ }
+ case SVGA3D_SHADERTYPE_HS:
+ {
+ /* Input of a HS shader is the output of VS. */
+ DXSHADER *pDXShaderPrior;
+ if (shaderIdVS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdVS];
+ else
+ pDXShaderPrior = NULL;
+
+ if (pDXShaderPrior)
+ vboxDXMatchShaderInput(pDXShader, pDXShaderPrior);
+
+ break;
+ }
+ case SVGA3D_SHADERTYPE_DS:
+ {
+ /* Input of a DS shader is the output of HS. */
+ DXSHADER *pDXShaderPrior;
+ if (shaderIdHS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdHS];
+ else
+ pDXShaderPrior = NULL;
+
+ if (pDXShaderPrior)
+ vboxDXMatchShaderInput(pDXShader, pDXShaderPrior);
+
+ break;
+ }
+ case SVGA3D_SHADERTYPE_GS:
+ {
+ /* Input signature of a GS shader is the output of DS or VS. */
+ DXSHADER *pDXShaderPrior;
+ if (shaderIdDS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdDS];
+ else if (shaderIdVS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdVS];
+ else
+ pDXShaderPrior = NULL;
+
+ if (pDXShaderPrior)
+ {
+ /* If GS shader does not have input signature (Windows guest can do that),
+ * then assign the prior shader signature as GS input.
+ */
+ if (pDXShader->shaderInfo.cInputSignature == 0)
+ {
+ pDXShader->shaderInfo.cInputSignature = pDXShaderPrior->shaderInfo.cOutputSignature;
+ memcpy(pDXShader->shaderInfo.aInputSignature,
+ pDXShaderPrior->shaderInfo.aOutputSignature,
+ pDXShaderPrior->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry));
+ memcpy(pDXShader->shaderInfo.aInputSemantic,
+ pDXShaderPrior->shaderInfo.aOutputSemantic,
+ pDXShaderPrior->shaderInfo.cOutputSignature * sizeof(DXShaderAttributeSemantic));
+ }
+ else
+ vboxDXMatchShaderInput(pDXShader, pDXShaderPrior);
+ }
+
+ /* Output signature of a GS shader is the input of the pixel shader. */
+ if (shaderIdPS != SVGA3D_INVALID_ID)
+ {
+ /* If GS shader does not have output signature (Windows guest can do that),
+ * then assign the PS shader signature as GS output.
+ */
+ if (pDXShader->shaderInfo.cOutputSignature == 0)
+ {
+ DXSHADER const *pDXShaderPosterior = &pDXContext->pBackendDXContext->paShader[shaderIdPS];
+ pDXShader->shaderInfo.cOutputSignature = pDXShaderPosterior->shaderInfo.cInputSignature;
+ memcpy(pDXShader->shaderInfo.aOutputSignature,
+ pDXShaderPosterior->shaderInfo.aInputSignature,
+ pDXShaderPosterior->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry));
+ memcpy(pDXShader->shaderInfo.aOutputSemantic,
+ pDXShaderPosterior->shaderInfo.aInputSemantic,
+ pDXShaderPosterior->shaderInfo.cInputSignature * sizeof(DXShaderAttributeSemantic));
+ }
+ }
+
+ SVGA3dStreamOutputId const soid = pDXContext->svgaDXContext.streamOut.soid;
+ if (soid != SVGA3D_INVALID_ID)
+ {
+ ASSERT_GUEST_RETURN_VOID(soid < pDXContext->pBackendDXContext->cStreamOutput);
+
+ /* Set semantic names and indices for SO declaration entries according to the shader output. */
+ SVGACOTableDXStreamOutputEntry const *pStreamOutputEntry = &pDXContext->cot.paStreamOutput[soid];
+ DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
+
+ if (pDXStreamOutput->cDeclarationEntry == 0)
+ {
+ int rc = dxDefineStreamOutput(pThisCC, pDXContext, soid, pStreamOutputEntry, pDXShader);
+ AssertRCReturnVoid(rc);
+#ifdef LOG_ENABLED
+ Log6(("Stream output declaration:\n\n"));
+ Log6(("Stream SemanticName SemanticIndex StartComponent ComponentCount OutputSlot\n"));
+ Log6(("------ -------------- ------------- -------------- -------------- ----------\n"));
+ for (unsigned i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
+ {
+ D3D11_SO_DECLARATION_ENTRY *p = &pDXStreamOutput->aDeclarationEntry[i];
+ Log6(("%d %-14s %d %d %d %d\n",
+ p->Stream, p->SemanticName, p->SemanticIndex, p->StartComponent, p->ComponentCount, p->OutputSlot));
+ }
+ Log6(("\n"));
+#endif
+
+ }
+ }
+ break;
+ }
+ case SVGA3D_SHADERTYPE_PS:
+ {
+ /* Input of a PS shader is the output of GS, DS or VS. */
+ DXSHADER *pDXShaderPrior;
+ if (shaderIdGS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdGS];
+ else if (shaderIdDS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdDS];
+ else if (shaderIdVS != SVGA3D_INVALID_ID)
+ pDXShaderPrior = &pDXContext->pBackendDXContext->paShader[shaderIdVS];
+ else
+ pDXShaderPrior = NULL;
+
+ if (pDXShaderPrior)
+ vboxDXMatchShaderInput(pDXShader, pDXShaderPrior);
+ break;
+ }
+ default:
+ break;
+ }
+
+ /* Intermediate shaders normally have both input and output signatures. However it is ok if they do not.
+ * Just catch this unusual case in order to see if everything is fine.
+ */
+ Assert( ( pDXShader->enmShaderType == SVGA3D_SHADERTYPE_VS
+ || pDXShader->enmShaderType == SVGA3D_SHADERTYPE_PS
+ || pDXShader->enmShaderType == SVGA3D_SHADERTYPE_CS)
+ || (pDXShader->shaderInfo.cInputSignature && pDXShader->shaderInfo.cOutputSignature));
+}
+
+
+static void vboxDXUpdateVSInputSignature(PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)
+{
+ SVGA3dElementLayoutId const elementLayoutId = pDXContext->svgaDXContext.inputAssembly.layoutId;
+ if (elementLayoutId != SVGA3D_INVALID_ID)
+ {
+ SVGACOTableDXElementLayoutEntry const *pElementLayout = &pDXContext->cot.paElementLayout[elementLayoutId];
+ for (uint32_t i = 0; i < RT_MIN(pElementLayout->numDescs, pDXShader->shaderInfo.cInputSignature); ++i)
+ {
+ SVGA3dInputElementDesc const *pElementDesc = &pElementLayout->descs[i];
+ SVGA3dDXSignatureEntry *pSignatureEntry = &pDXShader->shaderInfo.aInputSignature[i];
+ pSignatureEntry->componentType = DXShaderComponentTypeFromFormat(pElementDesc->format);
+ }
+ }
+}
+
+
+static void dxCreateInputLayout(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId, DXSHADER *pDXShader)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturnVoid(pDevice->pDevice);
+
+ SVGACOTableDXElementLayoutEntry const *pEntry = &pDXContext->cot.paElementLayout[elementLayoutId];
+ DXELEMENTLAYOUT *pDXElementLayout = &pDXContext->pBackendDXContext->paElementLayout[elementLayoutId];
+
+ if (pDXElementLayout->cElementDesc == 0)
+ {
+ /* Semantic name is not interpreted by D3D, therefore arbitrary names can be used
+ * if they are consistent between the element layout and shader input signature.
+ * "In general, data passed between pipeline stages is completely generic and is not uniquely
+ * interpreted by the system; arbitrary semantics are allowed ..."
+ *
+ * However D3D runtime insists that "SemanticName string ("POSITIO1") cannot end with a number."
+ *
+ * System-Value semantics ("SV_*") between shaders require proper names of course.
+ * But they are irrelevant for input attributes.
+ */
+ pDXElementLayout->cElementDesc = pEntry->numDescs;
+ for (uint32_t i = 0; i < pEntry->numDescs; ++i)
+ {
+ D3D11_INPUT_ELEMENT_DESC *pDst = &pDXElementLayout->aElementDesc[i];
+ SVGA3dInputElementDesc const *pSrc = &pEntry->descs[i];
+ pDst->SemanticName = "ATTRIB";
+ pDst->SemanticIndex = pSrc->inputRegister;
+ pDst->Format = vmsvgaDXSurfaceFormat2Dxgi(pSrc->format);
+ Assert(pDst->Format != DXGI_FORMAT_UNKNOWN);
+ pDst->InputSlot = pSrc->inputSlot;
+ pDst->AlignedByteOffset = pSrc->alignedByteOffset;
+ pDst->InputSlotClass = (D3D11_INPUT_CLASSIFICATION)pSrc->inputSlotClass;
+ pDst->InstanceDataStepRate = pSrc->instanceDataStepRate;
+ }
+ }
+
+ HRESULT hr = pDevice->pDevice->CreateInputLayout(pDXElementLayout->aElementDesc,
+ pDXElementLayout->cElementDesc,
+ pDXShader->pvDXBC,
+ pDXShader->cbDXBC,
+ &pDXElementLayout->pElementLayout);
+ Assert(SUCCEEDED(hr)); RT_NOREF(hr);
+}
+
+
+static void dxSetConstantBuffers(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+//DEBUG_BREAKPOINT_TEST();
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ VMSVGA3DBACKENDDXCONTEXT *pBackendDXContext = pDXContext->pBackendDXContext;
+
+ AssertCompile(RT_ELEMENTS(pBackendDXContext->resources.shaderState[0].constantBuffers) == SVGA3D_DX_MAX_CONSTBUFFERS);
+
+ for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE; ++idxShaderState)
+ {
+ SVGA3dShaderType const shaderType = (SVGA3dShaderType)(idxShaderState + SVGA3D_SHADERTYPE_MIN);
+ for (uint32_t idxSlot = 0; idxSlot < SVGA3D_DX_MAX_CONSTBUFFERS; ++idxSlot)
+ {
+ ID3D11Buffer **pBufferContext = &pBackendDXContext->resources.shaderState[idxShaderState].constantBuffers[idxSlot];
+ ID3D11Buffer **pBufferPipeline = &pBackend->resources.shaderState[idxShaderState].constantBuffers[idxSlot];
+ if (*pBufferContext != *pBufferPipeline)
+ {
+ LogFunc(("constant buffer: [%u][%u]: %p -> %p\n",
+ idxShaderState, idxSlot, *pBufferPipeline, *pBufferContext));
+ dxConstantBufferSet(pDXDevice, idxSlot, shaderType, *pBufferContext);
+
+ if (*pBufferContext)
+ (*pBufferContext)->AddRef();
+ D3D_RELEASE(*pBufferPipeline);
+ *pBufferPipeline = *pBufferContext;
+ }
+ }
+ }
+}
+
+static void dxSetVertexBuffers(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+//DEBUG_BREAKPOINT_TEST();
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ VMSVGA3DBACKENDDXCONTEXT *pBackendDXContext = pDXContext->pBackendDXContext;
+
+ AssertCompile(RT_ELEMENTS(pBackendDXContext->resources.inputAssembly.vertexBuffers) == SVGA3D_DX_MAX_VERTEXBUFFERS);
+
+ ID3D11Buffer *paResources[SVGA3D_DX_MAX_VERTEXBUFFERS];
+ UINT paStride[SVGA3D_DX_MAX_VERTEXBUFFERS];
+ UINT paOffset[SVGA3D_DX_MAX_VERTEXBUFFERS];
+
+ int32_t idxMaxSlot = -1;
+ for (uint32_t i = 0; i < SVGA3D_DX_MAX_VERTEXBUFFERS; ++i)
+ {
+ DXBOUNDVERTEXBUFFER *pBufferContext = &pBackendDXContext->resources.inputAssembly.vertexBuffers[i];
+ DXBOUNDVERTEXBUFFER *pBufferPipeline = &pBackend->resources.inputAssembly.vertexBuffers[i];
+ if ( pBufferContext->pBuffer != pBufferPipeline->pBuffer
+ || pBufferContext->stride != pBufferPipeline->stride
+ || pBufferContext->offset != pBufferPipeline->offset)
+ {
+ LogFunc(("vertex buffer: [%u]: sid = %u, %p (stride %d, off %d) -> %p (stride %d, off %d)\n",
+ i, pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].bufferId,
+ pBufferPipeline->pBuffer, pBufferPipeline->stride, pBufferPipeline->offset,
+ pBufferContext->pBuffer, pBufferContext->stride, pBufferContext->offset));
+
+ if (pBufferContext->pBuffer != pBufferPipeline->pBuffer)
+ {
+ if (pBufferContext->pBuffer)
+ pBufferContext->pBuffer->AddRef();
+ D3D_RELEASE(pBufferPipeline->pBuffer);
+ }
+ *pBufferPipeline = *pBufferContext;
+
+ idxMaxSlot = i;
+ }
+#ifdef LOG_ENABLED
+ else if (pBufferContext->pBuffer)
+ {
+ LogFunc(("vertex buffer: [%u]: sid = %u, %p (stride %d, off %d)\n",
+ i, pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].bufferId,
+ pBufferContext->pBuffer, pBufferContext->stride, pBufferContext->offset));
+ }
+#endif
+
+ paResources[i] = pBufferContext->pBuffer;
+ if (pBufferContext->pBuffer)
+ {
+ paStride[i] = pBufferContext->stride;
+ paOffset[i] = pBufferContext->offset;
+ }
+ else
+ {
+ paStride[i] = 0;
+ paOffset[i] = 0;
+ }
+ }
+
+ LogFunc(("idxMaxSlot = %d\n", idxMaxSlot));
+ if (idxMaxSlot >= 0)
+ pDXDevice->pImmediateContext->IASetVertexBuffers(0, idxMaxSlot + 1, paResources, paStride, paOffset);
+}
+
+static void dxSetIndexBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+//DEBUG_BREAKPOINT_TEST();
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ VMSVGA3DBACKENDDXCONTEXT *pBackendDXContext = pDXContext->pBackendDXContext;
+
+ DXBOUNDINDEXBUFFER *pBufferContext = &pBackendDXContext->resources.inputAssembly.indexBuffer;
+ DXBOUNDINDEXBUFFER *pBufferPipeline = &pBackend->resources.inputAssembly.indexBuffer;
+ if ( pBufferContext->pBuffer != pBufferPipeline->pBuffer
+ || pBufferContext->indexBufferOffset != pBufferPipeline->indexBufferOffset
+ || pBufferContext->indexBufferFormat != pBufferPipeline->indexBufferFormat)
+ {
+ LogFunc(("index_buffer: sid = %u, %p -> %p\n",
+ pDXContext->svgaDXContext.inputAssembly.indexBufferSid, pBufferPipeline->pBuffer, pBufferContext->pBuffer));
+
+ if (pBufferContext->pBuffer != pBufferPipeline->pBuffer)
+ {
+ if (pBufferContext->pBuffer)
+ pBufferContext->pBuffer->AddRef();
+ D3D_RELEASE(pBufferPipeline->pBuffer);
+ }
+ *pBufferPipeline = *pBufferContext;
+
+ pDXDevice->pImmediateContext->IASetIndexBuffer(pBufferContext->pBuffer, pBufferContext->indexBufferFormat, pBufferContext->indexBufferOffset);
+ }
+}
+
+static void dxSetupPipeline(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ /* Make sure that any draw operations on shader resource views have finished. */
+ AssertCompile(RT_ELEMENTS(pDXContext->svgaDXContext.shaderState) == SVGA3D_NUM_SHADERTYPE);
+ AssertCompile(RT_ELEMENTS(pDXContext->svgaDXContext.shaderState[0].shaderResources) == SVGA3D_DX_MAX_SRVIEWS);
+
+ int rc;
+
+ /* Unbind render target views because they mught be (re-)used as shader resource views. */
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ pDXDevice->pImmediateContext->OMSetRenderTargetsAndUnorderedAccessViews(0, NULL, NULL, 0, 0, NULL, NULL);
+ for (unsigned i = 0; i < SVGA3D_DX11_1_MAX_UAVIEWS; ++i)
+ {
+ ID3D11UnorderedAccessView *pNullUA = 0;
+ pDXDevice->pImmediateContext->CSSetUnorderedAccessViews(i, 1, &pNullUA, NULL);
+ }
+
+ dxSetConstantBuffers(pThisCC, pDXContext);
+ dxSetVertexBuffers(pThisCC, pDXContext);
+ dxSetIndexBuffer(pThisCC, pDXContext);
+
+ /*
+ * Shader resources
+ */
+
+ /* Make sure that the shader resource views exist. */
+ for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE; ++idxShaderState)
+ {
+ for (uint32_t idxSR = 0; idxSR < SVGA3D_DX_MAX_SRVIEWS; ++idxSR)
+ {
+ SVGA3dShaderResourceViewId const shaderResourceViewId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderResources[idxSR];
+ if (shaderResourceViewId != SVGA3D_INVALID_ID)
+ {
+ ASSERT_GUEST_RETURN_VOID(shaderResourceViewId < pDXContext->pBackendDXContext->cShaderResourceView);
+
+ SVGACOTableDXSRViewEntry const *pSRViewEntry = dxGetShaderResourceViewEntry(pDXContext, shaderResourceViewId);
+ AssertContinue(pSRViewEntry != NULL);
+
+ uint32_t const sid = pSRViewEntry->sid;
+
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ if (RT_FAILURE(rc))
+ {
+ AssertMsgFailed(("sid = %u, rc = %Rrc\n", sid, rc));
+ continue;
+ }
+
+ /* The guest might have invalidated the surface in which case pSurface->pBackendSurface is NULL. */
+ /** @todo This is not needed for "single DX device" mode. */
+ if (pSurface->pBackendSurface)
+ {
+ /* Wait for the surface to finish drawing. */
+ dxSurfaceWait(pThisCC->svga.p3dState, pSurface, pDXContext->cid);
+ }
+
+ /* If a view has not been created yet, do it now. */
+ if (!pDXContext->pBackendDXContext->paShaderResourceView[shaderResourceViewId].u.pView)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ LogFunc(("Re-creating SRV: sid=%u srvid = %u\n", sid, shaderResourceViewId));
+ rc = dxDefineShaderResourceView(pThisCC, pDXContext, shaderResourceViewId, pSRViewEntry);
+ AssertContinue(RT_SUCCESS(rc));
+ }
+
+ LogFunc(("srv[%d][%d] sid = %u, srvid = %u, format = %s(%d)\n", idxShaderState, idxSR, sid, shaderResourceViewId, vmsvgaLookupEnum((int)pSRViewEntry->format, &g_SVGA3dSurfaceFormat2String), pSRViewEntry->format));
+
+#ifdef DUMP_BITMAPS
+ SVGA3dSurfaceImageId image;
+ image.sid = sid;
+ image.face = 0;
+ image.mipmap = 0;
+ VMSVGA3D_MAPPED_SURFACE map;
+ int rc2 = vmsvga3dSurfaceMap(pThisCC, &image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
+ if (RT_SUCCESS(rc2))
+ {
+ vmsvga3dMapWriteBmpFile(&map, "sr-");
+ vmsvga3dSurfaceUnmap(pThisCC, &image, &map, /* fWritten = */ false);
+ }
+ else
+ Log(("Map failed %Rrc\n", rc));
+#endif
+ }
+ }
+
+ /* Set shader resources. */
+ rc = dxSetShaderResources(pThisCC, pDXContext, (SVGA3dShaderType)(idxShaderState + SVGA3D_SHADERTYPE_MIN));
+ AssertRC(rc);
+ }
+
+ /*
+ * Compute shader unordered access views
+ */
+
+ for (uint32_t idxUA = 0; idxUA < SVGA3D_DX11_1_MAX_UAVIEWS; ++idxUA)
+ {
+ SVGA3dUAViewId const uaViewId = pDXContext->svgaDXContext.csuaViewIds[idxUA];
+ if (uaViewId != SVGA3D_INVALID_ID)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ ASSERT_GUEST_RETURN_VOID(uaViewId < pDXContext->pBackendDXContext->cUnorderedAccessView);
+
+ SVGACOTableDXUAViewEntry const *pUAViewEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
+ AssertContinue(pUAViewEntry != NULL);
+
+ uint32_t const sid = pUAViewEntry->sid;
+
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturnVoid(rc);
+
+ /* The guest might have invalidated the surface in which case pSurface->pBackendSurface is NULL. */
+ /** @todo This is not needed for "single DX device" mode. */
+ if (pSurface->pBackendSurface)
+ {
+ /* Wait for the surface to finish drawing. */
+ dxSurfaceWait(pThisCC->svga.p3dState, pSurface, pDXContext->cid);
+ }
+
+ /* If a view has not been created yet, do it now. */
+ if (!pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId].u.pView)
+ {
+ LogFunc(("Re-creating UAV: sid=%u uaid = %u\n", sid, uaViewId));
+ rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pUAViewEntry);
+ AssertContinue(RT_SUCCESS(rc));
+ }
+
+ LogFunc(("csuav[%d] sid = %u, uaid = %u\n", idxUA, sid, uaViewId));
+ }
+ }
+
+ /* Set views. */
+ rc = dxSetCSUnorderedAccessViews(pThisCC, pDXContext);
+ AssertRC(rc);
+
+ /*
+ * Render targets and unordered access views.
+ */
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturnVoid(pDevice->pDevice);
+
+ /* Make sure that the render target views exist. Similar to SRVs. */
+ if (pDXContext->svgaDXContext.renderState.depthStencilViewId != SVGA3D_INVALID_ID)
+ {
+ uint32_t const viewId = pDXContext->svgaDXContext.renderState.depthStencilViewId;
+
+ ASSERT_GUEST_RETURN_VOID(viewId < pDXContext->pBackendDXContext->cDepthStencilView);
+
+ SVGACOTableDXDSViewEntry const *pDSViewEntry = dxGetDepthStencilViewEntry(pDXContext, viewId);
+ AssertReturnVoid(pDSViewEntry != NULL);
+
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pDSViewEntry->sid, &pSurface);
+ AssertRCReturnVoid(rc);
+
+ /* If a view has not been created yet, do it now. */
+ if (!pDXContext->pBackendDXContext->paDepthStencilView[viewId].u.pView)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ LogFunc(("Re-creating DSV: sid=%u dsvid = %u\n", pDSViewEntry->sid, viewId));
+ rc = dxDefineDepthStencilView(pThisCC, pDXContext, viewId, pDSViewEntry);
+ AssertReturnVoid(RT_SUCCESS(rc));
+ }
+
+ LogFunc(("dsv sid = %u, dsvid = %u\n", pDSViewEntry->sid, viewId));
+ }
+
+ for (uint32_t i = 0; i < SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS; ++i)
+ {
+ if (pDXContext->svgaDXContext.renderState.renderTargetViewIds[i] != SVGA3D_INVALID_ID)
+ {
+ uint32_t const viewId = pDXContext->svgaDXContext.renderState.renderTargetViewIds[i];
+
+ ASSERT_GUEST_RETURN_VOID(viewId < pDXContext->pBackendDXContext->cRenderTargetView);
+
+ SVGACOTableDXRTViewEntry const *pRTViewEntry = dxGetRenderTargetViewEntry(pDXContext, viewId);
+ AssertReturnVoid(pRTViewEntry != NULL);
+
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pRTViewEntry->sid, &pSurface);
+ AssertRCReturnVoid(rc);
+
+ /* If a view has not been created yet, do it now. */
+ if (!pDXContext->pBackendDXContext->paRenderTargetView[viewId].u.pView)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ LogFunc(("Re-creating RTV: sid=%u rtvid = %u\n", pRTViewEntry->sid, viewId));
+ rc = dxDefineRenderTargetView(pThisCC, pDXContext, viewId, pRTViewEntry);
+ AssertReturnVoid(RT_SUCCESS(rc));
+ }
+
+ LogFunc(("rtv sid = %u, rtvid = %u, format = %s(%d)\n", pRTViewEntry->sid, viewId, vmsvgaLookupEnum((int)pRTViewEntry->format, &g_SVGA3dSurfaceFormat2String), pRTViewEntry->format));
+ }
+ }
+
+ for (uint32_t idxUA = 0; idxUA < SVGA3D_DX11_1_MAX_UAVIEWS; ++idxUA)
+ {
+ SVGA3dUAViewId const uaViewId = pDXContext->svgaDXContext.uaViewIds[idxUA];
+ if (uaViewId != SVGA3D_INVALID_ID)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ ASSERT_GUEST_RETURN_VOID(uaViewId < pDXContext->pBackendDXContext->cUnorderedAccessView);
+
+ SVGACOTableDXUAViewEntry const *pUAViewEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
+ AssertContinue(pUAViewEntry != NULL);
+
+ uint32_t const sid = pUAViewEntry->sid;
+
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturnVoid(rc);
+
+ /* The guest might have invalidated the surface in which case pSurface->pBackendSurface is NULL. */
+ /** @todo This is not needed for "single DX device" mode. */
+ if (pSurface->pBackendSurface)
+ {
+ /* Wait for the surface to finish drawing. */
+ dxSurfaceWait(pThisCC->svga.p3dState, pSurface, pDXContext->cid);
+ }
+
+ /* If a view has not been created yet, do it now. */
+ if (!pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId].u.pView)
+ {
+ LogFunc(("Re-creating UAV: sid=%u uaid = %u\n", sid, uaViewId));
+ rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pUAViewEntry);
+ AssertContinue(RT_SUCCESS(rc));
+ }
+
+ LogFunc(("uav[%d] sid = %u, uaid = %u\n", idxUA, sid, uaViewId));
+ }
+ }
+
+ /* Set render targets. */
+ rc = dxSetRenderTargets(pThisCC, pDXContext);
+ AssertRC(rc);
+
+ /*
+ * Shaders
+ */
+
+ for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE; ++idxShaderState)
+ {
+ DXSHADER *pDXShader;
+ SVGA3dShaderType const shaderType = (SVGA3dShaderType)(idxShaderState + SVGA3D_SHADERTYPE_MIN);
+ SVGA3dShaderId const shaderId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId;
+
+ if (shaderId != SVGA3D_INVALID_ID)
+ {
+ pDXShader = &pDXContext->pBackendDXContext->paShader[shaderId];
+ if (pDXShader->pShader == NULL)
+ {
+ /* Create a new shader. */
+
+ /* Apply resource types to a pixel shader. */
+ if (shaderType == SVGA3D_SHADERTYPE_PS) /* Others too? */
+ {
+ VGPU10_RESOURCE_DIMENSION aResourceDimension[SVGA3D_DX_MAX_SRVIEWS];
+ RT_ZERO(aResourceDimension);
+ VGPU10_RESOURCE_RETURN_TYPE aResourceReturnType[SVGA3D_DX_MAX_SRVIEWS];
+ RT_ZERO(aResourceReturnType);
+ uint32_t cResources = 0;
+
+ for (uint32_t idxSR = 0; idxSR < SVGA3D_DX_MAX_SRVIEWS; ++idxSR)
+ {
+ SVGA3dShaderResourceViewId const shaderResourceViewId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderResources[idxSR];
+ if (shaderResourceViewId != SVGA3D_INVALID_ID)
+ {
+ SVGACOTableDXSRViewEntry const *pSRViewEntry = dxGetShaderResourceViewEntry(pDXContext, shaderResourceViewId);
+ AssertContinue(pSRViewEntry != NULL);
+
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pSRViewEntry->sid, &pSurface);
+ AssertRCReturnVoid(rc);
+
+ aResourceReturnType[idxSR] = DXShaderResourceReturnTypeFromFormat(pSRViewEntry->format);
+
+ switch (pSRViewEntry->resourceDimension)
+ {
+ case SVGA3D_RESOURCE_BUFFEREX:
+ case SVGA3D_RESOURCE_BUFFER:
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_BUFFER;
+ break;
+ case SVGA3D_RESOURCE_TEXTURE1D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1D;
+ else
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY;
+ break;
+ case SVGA3D_RESOURCE_TEXTURE2D:
+ if (pSurface->surfaceDesc.numArrayElements <= 1)
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
+ else
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY;
+ break;
+ case SVGA3D_RESOURCE_TEXTURE3D:
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE3D;
+ break;
+ case SVGA3D_RESOURCE_TEXTURECUBE:
+ if (pSurface->surfaceDesc.numArrayElements <= 6)
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBE;
+ else
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY;
+ break;
+ default:
+ ASSERT_GUEST_FAILED();
+ aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
+ }
+
+ cResources = idxSR + 1;
+
+ /* Update componentType of the pixel shader output signature to correspond to the bound resources. */
+ if (idxSR < pDXShader->shaderInfo.cOutputSignature)
+ {
+ SVGA3dDXSignatureEntry *pSignatureEntry = &pDXShader->shaderInfo.aOutputSignature[idxSR];
+ pSignatureEntry->componentType = DXShaderComponentTypeFromFormat(pSRViewEntry->format);
+ }
+ }
+ }
+
+ rc = DXShaderUpdateResources(&pDXShader->shaderInfo, aResourceDimension, aResourceReturnType, cResources);
+ AssertRC(rc); /* Ignore rc because the shader will most likely work anyway. */
+ }
+
+ if (shaderType == SVGA3D_SHADERTYPE_VS)
+ {
+ /* Update componentType of the vertex shader input signature to correspond to the input declaration. */
+ vboxDXUpdateVSInputSignature(pDXContext, pDXShader);
+ }
+
+ vboxDXMatchShaderSignatures(pThisCC, pDXContext, pDXShader);
+
+ rc = DXShaderCreateDXBC(&pDXShader->shaderInfo, &pDXShader->pvDXBC, &pDXShader->cbDXBC);
+ if (RT_SUCCESS(rc))
+ {
+#ifdef LOG_ENABLED
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ if (pBackend->pfnD3DDisassemble && LogIs6Enabled())
+ {
+ ID3D10Blob *pBlob = 0;
+ HRESULT hr2 = pBackend->pfnD3DDisassemble(pDXShader->pvDXBC, pDXShader->cbDXBC, 0, NULL, &pBlob);
+ if (SUCCEEDED(hr2) && pBlob && pBlob->GetBufferSize())
+ Log6(("%s\n", pBlob->GetBufferPointer()));
+ else
+ AssertFailed();
+ D3D_RELEASE(pBlob);
+ }
+#endif
+
+ HRESULT hr = dxShaderCreate(pThisCC, pDXContext, pDXShader);
+ if (FAILED(hr))
+ rc = VERR_INVALID_STATE;
+ }
+ }
+
+ LogFunc(("Shader: cid=%u shid=%u type=%d, GuestSignatures %d, %Rrc\n", pDXContext->cid, shaderId, pDXShader->enmShaderType, pDXShader->shaderInfo.fGuestSignatures, rc));
+ }
+ else
+ pDXShader = NULL;
+
+ if (RT_SUCCESS(rc))
+ dxShaderSet(pThisCC, pDXContext, shaderType, pDXShader);
+
+ AssertRC(rc);
+ }
+
+ /*
+ * InputLayout
+ */
+ SVGA3dElementLayoutId const elementLayoutId = pDXContext->svgaDXContext.inputAssembly.layoutId;
+ ID3D11InputLayout *pInputLayout = NULL;
+ if (elementLayoutId != SVGA3D_INVALID_ID)
+ {
+ DXELEMENTLAYOUT *pDXElementLayout = &pDXContext->pBackendDXContext->paElementLayout[elementLayoutId];
+ if (!pDXElementLayout->pElementLayout)
+ {
+ uint32_t const idxShaderState = SVGA3D_SHADERTYPE_VS - SVGA3D_SHADERTYPE_MIN;
+ uint32_t const shid = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId;
+ if (shid < pDXContext->pBackendDXContext->cShader)
+ {
+ DXSHADER *pDXShader = &pDXContext->pBackendDXContext->paShader[shid];
+ if (pDXShader->pvDXBC)
+ dxCreateInputLayout(pThisCC, pDXContext, elementLayoutId, pDXShader);
+ else
+ LogRelMax(16, ("VMSVGA: DX shader bytecode is not available in DXSetInputLayout: shid = %u\n", shid));
+ }
+ else
+ LogRelMax(16, ("VMSVGA: DX shader is not set in DXSetInputLayout: shid = 0x%x\n", shid));
+ }
+
+ pInputLayout = pDXElementLayout->pElementLayout;
+
+ LogFunc(("Input layout id %u\n", elementLayoutId));
+ }
+
+ pDevice->pImmediateContext->IASetInputLayout(pInputLayout);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDraw(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t vertexCount, uint32_t startVertexLocation)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ if (pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN)
+ pDevice->pImmediateContext->Draw(vertexCount, startVertexLocation);
+ else
+ {
+ /*
+ * Emulate SVGA3D_PRIMITIVE_TRIANGLEFAN using an indexed draw of a triangle list.
+ */
+
+ /* Make sure that 16 bit indices are enough. */
+ if (vertexCount > 65535)
+ {
+ LogRelMax(1, ("VMSVGA: ignore Draw(TRIANGLEFAN, %u)\n", vertexCount));
+ return VERR_NOT_SUPPORTED;
+ }
+
+ /* Generate indices. */
+ UINT const IndexCount = 3 * (vertexCount - 2); /* 3_per_triangle * num_triangles */
+ UINT const cbAlloc = IndexCount * sizeof(USHORT);
+ USHORT *paIndices = (USHORT *)RTMemAlloc(cbAlloc);
+ AssertReturn(paIndices, VERR_NO_MEMORY);
+ USHORT iVertex = 1;
+ for (UINT i = 0; i < IndexCount; i+= 3)
+ {
+ paIndices[i] = 0;
+ paIndices[i + 1] = iVertex;
+ ++iVertex;
+ paIndices[i + 2] = iVertex;
+ }
+
+ D3D11_SUBRESOURCE_DATA InitData;
+ InitData.pSysMem = paIndices;
+ InitData.SysMemPitch = cbAlloc;
+ InitData.SysMemSlicePitch = cbAlloc;
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = cbAlloc;
+ bd.Usage = D3D11_USAGE_IMMUTABLE;
+ bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
+ //bd.CPUAccessFlags = 0;
+ //bd.MiscFlags = 0;
+ //bd.StructureByteStride = 0;
+
+ ID3D11Buffer *pIndexBuffer = 0;
+ HRESULT hr = pDevice->pDevice->CreateBuffer(&bd, &InitData, &pIndexBuffer);
+ Assert(SUCCEEDED(hr));RT_NOREF(hr);
+
+ /* Save the current index buffer. */
+ ID3D11Buffer *pSavedIndexBuffer = 0;
+ DXGI_FORMAT SavedFormat = DXGI_FORMAT_UNKNOWN;
+ UINT SavedOffset = 0;
+ pDevice->pImmediateContext->IAGetIndexBuffer(&pSavedIndexBuffer, &SavedFormat, &SavedOffset);
+
+ /* Set up the device state. */
+ pDevice->pImmediateContext->IASetIndexBuffer(pIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
+ pDevice->pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+
+ UINT const StartIndexLocation = 0;
+ INT const BaseVertexLocation = startVertexLocation;
+ pDevice->pImmediateContext->DrawIndexed(IndexCount, StartIndexLocation, BaseVertexLocation);
+
+ /* Restore the device state. */
+ pDevice->pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
+ pDevice->pImmediateContext->IASetIndexBuffer(pSavedIndexBuffer, SavedFormat, SavedOffset);
+ D3D_RELEASE(pSavedIndexBuffer);
+
+ /* Cleanup. */
+ D3D_RELEASE(pIndexBuffer);
+ RTMemFree(paIndices);
+ }
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+static int dxReadBuffer(DXDEVICE *pDevice, ID3D11Buffer *pBuffer, UINT Offset, UINT Bytes, void **ppvData, uint32_t *pcbData)
+{
+ D3D11_BUFFER_DESC desc;
+ RT_ZERO(desc);
+ pBuffer->GetDesc(&desc);
+
+ AssertReturn( Offset < desc.ByteWidth
+ && Bytes <= desc.ByteWidth - Offset, VERR_INVALID_STATE);
+
+ void *pvData = RTMemAlloc(Bytes);
+ if (!pvData)
+ return VERR_NO_MEMORY;
+
+ *ppvData = pvData;
+ *pcbData = Bytes;
+
+ int rc = dxStagingBufferRealloc(pDevice, Bytes);
+ if (RT_SUCCESS(rc))
+ {
+ /* Copy from the buffer to the staging buffer. */
+ ID3D11Resource *pDstResource = pDevice->pStagingBuffer;
+ UINT DstSubresource = 0;
+ UINT DstX = Offset;
+ UINT DstY = 0;
+ UINT DstZ = 0;
+ ID3D11Resource *pSrcResource = pBuffer;
+ UINT SrcSubresource = 0;
+ D3D11_BOX SrcBox;
+ SrcBox.left = 0;
+ SrcBox.top = 0;
+ SrcBox.front = 0;
+ SrcBox.right = Bytes;
+ SrcBox.bottom = 1;
+ SrcBox.back = 1;
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, &SrcBox);
+
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ UINT const Subresource = 0; /* Buffers have only one subresource. */
+ HRESULT hr = pDevice->pImmediateContext->Map(pDevice->pStagingBuffer, Subresource,
+ D3D11_MAP_READ, /* MapFlags = */ 0, &mappedResource);
+ if (SUCCEEDED(hr))
+ {
+ memcpy(pvData, mappedResource.pData, Bytes);
+
+ /* Unmap the staging buffer. */
+ pDevice->pImmediateContext->Unmap(pDevice->pStagingBuffer, Subresource);
+ }
+ else
+ AssertFailedStmt(rc = VERR_NOT_SUPPORTED);
+
+ }
+
+ if (RT_FAILURE(rc))
+ {
+ RTMemFree(*ppvData);
+ *ppvData = NULL;
+ *pcbData = 0;
+ }
+
+ return rc;
+}
+
+
+static int dxDrawIndexedTriangleFan(DXDEVICE *pDevice, uint32_t IndexCountTF, uint32_t StartIndexLocationTF, int32_t BaseVertexLocationTF)
+{
+ /*
+ * Emulate an indexed SVGA3D_PRIMITIVE_TRIANGLEFAN using an indexed draw of triangle list.
+ */
+
+ /* Make sure that 16 bit indices are enough. */
+ if (IndexCountTF > 65535)
+ {
+ LogRelMax(1, ("VMSVGA: ignore DrawIndexed(TRIANGLEFAN, %u)\n", IndexCountTF));
+ return VERR_NOT_SUPPORTED;
+ }
+
+ /* Save the current index buffer. */
+ ID3D11Buffer *pSavedIndexBuffer = 0;
+ DXGI_FORMAT SavedFormat = DXGI_FORMAT_UNKNOWN;
+ UINT SavedOffset = 0;
+ pDevice->pImmediateContext->IAGetIndexBuffer(&pSavedIndexBuffer, &SavedFormat, &SavedOffset);
+
+ AssertReturn( SavedFormat == DXGI_FORMAT_R16_UINT
+ || SavedFormat == DXGI_FORMAT_R32_UINT, VERR_NOT_SUPPORTED);
+
+ /* How many bytes are used by triangle fan indices. */
+ UINT const BytesPerIndexTF = SavedFormat == DXGI_FORMAT_R16_UINT ? 2 : 4;
+ UINT const BytesTF = BytesPerIndexTF * IndexCountTF;
+
+ /* Read the current index buffer content to obtain indices. */
+ void *pvDataTF;
+ uint32_t cbDataTF;
+ int rc = dxReadBuffer(pDevice, pSavedIndexBuffer, StartIndexLocationTF, BytesTF, &pvDataTF, &cbDataTF);
+ AssertRCReturn(rc, rc);
+ AssertReturnStmt(cbDataTF >= BytesPerIndexTF, RTMemFree(pvDataTF), VERR_INVALID_STATE);
+
+ /* Generate indices for triangle list. */
+ UINT const IndexCount = 3 * (IndexCountTF - 2); /* 3_per_triangle * num_triangles */
+ UINT const cbAlloc = IndexCount * sizeof(USHORT);
+ USHORT *paIndices = (USHORT *)RTMemAlloc(cbAlloc);
+ AssertReturnStmt(paIndices, RTMemFree(pvDataTF), VERR_NO_MEMORY);
+
+ USHORT iVertex = 1;
+ if (BytesPerIndexTF == 2)
+ {
+ USHORT *paIndicesTF = (USHORT *)pvDataTF;
+ for (UINT i = 0; i < IndexCount; i+= 3)
+ {
+ paIndices[i] = paIndicesTF[0];
+ AssertBreakStmt(iVertex < IndexCountTF, rc = VERR_INVALID_STATE);
+ paIndices[i + 1] = paIndicesTF[iVertex];
+ ++iVertex;
+ AssertBreakStmt(iVertex < IndexCountTF, rc = VERR_INVALID_STATE);
+ paIndices[i + 2] = paIndicesTF[iVertex];
+ }
+ }
+ else
+ {
+ UINT *paIndicesTF = (UINT *)pvDataTF;
+ for (UINT i = 0; i < IndexCount; i+= 3)
+ {
+ paIndices[i] = paIndicesTF[0];
+ AssertBreakStmt(iVertex < IndexCountTF, rc = VERR_INVALID_STATE);
+ paIndices[i + 1] = paIndicesTF[iVertex];
+ ++iVertex;
+ AssertBreakStmt(iVertex < IndexCountTF, rc = VERR_INVALID_STATE);
+ paIndices[i + 2] = paIndicesTF[iVertex];
+ }
+ }
+
+ D3D11_SUBRESOURCE_DATA InitData;
+ InitData.pSysMem = paIndices;
+ InitData.SysMemPitch = cbAlloc;
+ InitData.SysMemSlicePitch = cbAlloc;
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = cbAlloc;
+ bd.Usage = D3D11_USAGE_IMMUTABLE;
+ bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
+ //bd.CPUAccessFlags = 0;
+ //bd.MiscFlags = 0;
+ //bd.StructureByteStride = 0;
+
+ ID3D11Buffer *pIndexBuffer = 0;
+ HRESULT hr = pDevice->pDevice->CreateBuffer(&bd, &InitData, &pIndexBuffer);
+ Assert(SUCCEEDED(hr));RT_NOREF(hr);
+
+ /* Set up the device state. */
+ pDevice->pImmediateContext->IASetIndexBuffer(pIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
+ pDevice->pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+
+ UINT const StartIndexLocation = 0;
+ INT const BaseVertexLocation = BaseVertexLocationTF;
+ pDevice->pImmediateContext->DrawIndexed(IndexCount, StartIndexLocation, BaseVertexLocation);
+
+ /* Restore the device state. */
+ pDevice->pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
+ pDevice->pImmediateContext->IASetIndexBuffer(pSavedIndexBuffer, SavedFormat, SavedOffset);
+ D3D_RELEASE(pSavedIndexBuffer);
+
+ /* Cleanup. */
+ D3D_RELEASE(pIndexBuffer);
+ RTMemFree(paIndices);
+ RTMemFree(pvDataTF);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDrawIndexed(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t indexCount, uint32_t startIndexLocation, int32_t baseVertexLocation)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ if (pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN)
+ pDevice->pImmediateContext->DrawIndexed(indexCount, startIndexLocation, baseVertexLocation);
+ else
+ {
+ dxDrawIndexedTriangleFan(pDevice, indexCount, startIndexLocation, baseVertexLocation);
+ }
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDrawInstanced(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext,
+ uint32_t vertexCountPerInstance, uint32_t instanceCount, uint32_t startVertexLocation, uint32_t startInstanceLocation)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ Assert(pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN);
+
+ pDevice->pImmediateContext->DrawInstanced(vertexCountPerInstance, instanceCount, startVertexLocation, startInstanceLocation);
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDrawIndexedInstanced(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext,
+ uint32_t indexCountPerInstance, uint32_t instanceCount, uint32_t startIndexLocation, int32_t baseVertexLocation, uint32_t startInstanceLocation)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ Assert(pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN);
+
+ pDevice->pImmediateContext->DrawIndexedInstanced(indexCountPerInstance, instanceCount, startIndexLocation, baseVertexLocation, startInstanceLocation);
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDrawAuto(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ Assert(pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN);
+
+ pDevice->pImmediateContext->DrawAuto();
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetInputLayout(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(elementLayoutId);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetVertexBuffers(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startBuffer, uint32_t cVertexBuffer, SVGA3dVertexBuffer const *paVertexBuffer)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ for (uint32_t i = 0; i < cVertexBuffer; ++i)
+ {
+ uint32_t const idxVertexBuffer = startBuffer + i;
+
+ /* Get corresponding resource. Create the buffer if does not yet exist. */
+ if (paVertexBuffer[i].sid != SVGA_ID_INVALID)
+ {
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, paVertexBuffer[i].sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource and initialize it with the current surface data. */
+ rc = vmsvga3dBackSurfaceCreateBuffer(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+ Assert(pSurface->pBackendSurface->u.pBuffer);
+
+ DXBOUNDVERTEXBUFFER *pBoundBuffer = &pDXContext->pBackendDXContext->resources.inputAssembly.vertexBuffers[idxVertexBuffer];
+ if ( pBoundBuffer->pBuffer != pSurface->pBackendSurface->u.pBuffer
+ || pBoundBuffer->stride != paVertexBuffer[i].stride
+ || pBoundBuffer->offset != paVertexBuffer[i].offset)
+ {
+ LogFunc(("vertex buffer: [%u]: sid = %u, offset %u, stride %u (%p -> %p)\n",
+ idxVertexBuffer, paVertexBuffer[i].sid, paVertexBuffer[i].offset, paVertexBuffer[i].stride, pBoundBuffer->pBuffer, pSurface->pBackendSurface->u.pBuffer));
+
+ if (pBoundBuffer->pBuffer != pSurface->pBackendSurface->u.pBuffer)
+ {
+ D3D_RELEASE(pBoundBuffer->pBuffer);
+ pBoundBuffer->pBuffer = pSurface->pBackendSurface->u.pBuffer;
+ pBoundBuffer->pBuffer->AddRef();
+ }
+ pBoundBuffer->stride = paVertexBuffer[i].stride;
+ pBoundBuffer->offset = paVertexBuffer[i].offset;
+ }
+ }
+ else
+ {
+ DXBOUNDVERTEXBUFFER *pBoundBuffer = &pDXContext->pBackendDXContext->resources.inputAssembly.vertexBuffers[idxVertexBuffer];
+ D3D_RELEASE(pBoundBuffer->pBuffer);
+ pBoundBuffer->stride = 0;
+ pBoundBuffer->offset = 0;
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetIndexBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId sid, SVGA3dSurfaceFormat format, uint32_t offset)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Get corresponding resource. Create the buffer if does not yet exist. */
+ if (sid != SVGA_ID_INVALID)
+ {
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource and initialize it with the current surface data. */
+ rc = vmsvga3dBackSurfaceCreateBuffer(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ DXGI_FORMAT const enmDxgiFormat = vmsvgaDXSurfaceFormat2Dxgi(format);
+ AssertReturn(enmDxgiFormat == DXGI_FORMAT_R16_UINT || enmDxgiFormat == DXGI_FORMAT_R32_UINT, VERR_INVALID_PARAMETER);
+
+ DXBOUNDINDEXBUFFER *pBoundBuffer = &pDXContext->pBackendDXContext->resources.inputAssembly.indexBuffer;
+ if ( pBoundBuffer->pBuffer != pSurface->pBackendSurface->u.pBuffer
+ || pBoundBuffer->indexBufferOffset != offset
+ || pBoundBuffer->indexBufferFormat != enmDxgiFormat)
+ {
+ LogFunc(("index_buffer: sid = %u, offset %u, (%p -> %p)\n",
+ sid, offset, pBoundBuffer->pBuffer, pSurface->pBackendSurface->u.pBuffer));
+
+ if (pBoundBuffer->pBuffer != pSurface->pBackendSurface->u.pBuffer)
+ {
+ D3D_RELEASE(pBoundBuffer->pBuffer);
+ pBoundBuffer->pBuffer = pSurface->pBackendSurface->u.pBuffer;
+ pBoundBuffer->pBuffer->AddRef();
+ }
+ pBoundBuffer->indexBufferOffset = offset;
+ pBoundBuffer->indexBufferFormat = enmDxgiFormat;
+ }
+ }
+ else
+ {
+ DXBOUNDINDEXBUFFER *pBoundBuffer = &pDXContext->pBackendDXContext->resources.inputAssembly.indexBuffer;
+ D3D_RELEASE(pBoundBuffer->pBuffer);
+ pBoundBuffer->indexBufferOffset = 0;
+ pBoundBuffer->indexBufferFormat = DXGI_FORMAT_UNKNOWN;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static D3D11_PRIMITIVE_TOPOLOGY dxTopology(SVGA3dPrimitiveType primitiveType)
+{
+ static D3D11_PRIMITIVE_TOPOLOGY const aD3D11PrimitiveTopology[SVGA3D_PRIMITIVE_MAX] =
+ {
+ D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+ D3D11_PRIMITIVE_TOPOLOGY_POINTLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_LINELIST,
+ D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP, /* SVGA3D_PRIMITIVE_TRIANGLEFAN: No FAN in D3D11. */
+ D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,
+ };
+ return aD3D11PrimitiveTopology[primitiveType];
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetTopology(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dPrimitiveType topology)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ D3D11_PRIMITIVE_TOPOLOGY const enmTopology = dxTopology(topology);
+ pDevice->pImmediateContext->IASetPrimitiveTopology(enmTopology);
+ return VINF_SUCCESS;
+}
+
+
+static int dxSetRenderTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ UINT UAVStartSlot = 0;
+ UINT NumUAVs = 0;
+ ID3D11UnorderedAccessView *apUnorderedAccessViews[SVGA3D_DX11_1_MAX_UAVIEWS];
+ UINT aUAVInitialCounts[SVGA3D_DX11_1_MAX_UAVIEWS];
+ for (uint32_t idxUA = 0; idxUA < SVGA3D_DX11_1_MAX_UAVIEWS; ++idxUA)
+ {
+ SVGA3dUAViewId const uaViewId = pDXContext->svgaDXContext.uaViewIds[idxUA];
+ if (uaViewId != SVGA3D_INVALID_ID)
+ {
+ if (NumUAVs == 0)
+ UAVStartSlot = idxUA;
+ NumUAVs = idxUA - UAVStartSlot + 1;
+ apUnorderedAccessViews[idxUA] = pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId].u.pUnorderedAccessView;
+
+ SVGACOTableDXUAViewEntry const *pEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
+ aUAVInitialCounts[idxUA] = pEntry->structureCount;
+ }
+ else
+ {
+ apUnorderedAccessViews[idxUA] = NULL;
+ aUAVInitialCounts[idxUA] = (UINT)-1;
+ }
+ }
+
+ UINT NumRTVs = 0;
+ ID3D11RenderTargetView *apRenderTargetViews[SVGA3D_MAX_RENDER_TARGETS];
+ RT_ZERO(apRenderTargetViews);
+ for (uint32_t i = 0; i < pDXContext->cRenderTargets; ++i)
+ {
+ SVGA3dRenderTargetViewId const renderTargetViewId = pDXContext->svgaDXContext.renderState.renderTargetViewIds[i];
+ if (renderTargetViewId != SVGA3D_INVALID_ID)
+ {
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->pBackendDXContext->cRenderTargetView, VERR_INVALID_PARAMETER);
+ apRenderTargetViews[i] = pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId].u.pRenderTargetView;
+ ++NumRTVs;
+ }
+ }
+
+ /* RTVs are followed by UAVs. */
+ Assert(NumRTVs <= pDXContext->svgaDXContext.uavSpliceIndex);
+
+ ID3D11DepthStencilView *pDepthStencilView = NULL;
+ SVGA3dDepthStencilViewId const depthStencilViewId = pDXContext->svgaDXContext.renderState.depthStencilViewId;
+ if (depthStencilViewId != SVGA_ID_INVALID)
+ pDepthStencilView = pDXContext->pBackendDXContext->paDepthStencilView[depthStencilViewId].u.pDepthStencilView;
+
+ pDevice->pImmediateContext->OMSetRenderTargetsAndUnorderedAccessViews(NumRTVs,
+ apRenderTargetViews,
+ pDepthStencilView,
+ pDXContext->svgaDXContext.uavSpliceIndex,
+ NumUAVs,
+ apUnorderedAccessViews,
+ aUAVInitialCounts);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetRenderTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, uint32_t cRenderTargetViewId, SVGA3dRenderTargetViewId const *paRenderTargetViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(depthStencilViewId, cRenderTargetViewId, paRenderTargetViewId);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetBlendState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dBlendStateId blendId, float const blendFactor[4], uint32_t sampleMask)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ if (blendId != SVGA3D_INVALID_ID)
+ {
+ ID3D11BlendState *pBlendState = pDXContext->pBackendDXContext->papBlendState[blendId];
+ pDevice->pImmediateContext->OMSetBlendState(pBlendState, blendFactor, sampleMask);
+ }
+ else
+ pDevice->pImmediateContext->OMSetBlendState(NULL, NULL, 0);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetDepthStencilState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId, uint32_t stencilRef)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ if (depthStencilId != SVGA3D_INVALID_ID)
+ {
+ ID3D11DepthStencilState *pDepthStencilState = pDXContext->pBackendDXContext->papDepthStencilState[depthStencilId];
+ pDevice->pImmediateContext->OMSetDepthStencilState(pDepthStencilState, stencilRef);
+ }
+ else
+ pDevice->pImmediateContext->OMSetDepthStencilState(NULL, 0);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetRasterizerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(pBackend);
+
+ if (rasterizerId != SVGA3D_INVALID_ID)
+ {
+ ID3D11RasterizerState *pRasterizerState = pDXContext->pBackendDXContext->papRasterizerState[rasterizerId];
+ pDevice->pImmediateContext->RSSetState(pRasterizerState);
+ }
+ else
+ pDevice->pImmediateContext->RSSetState(NULL);
+
+ return VINF_SUCCESS;
+}
+
+
+typedef struct VGPU10QUERYINFO
+{
+ SVGA3dQueryType svgaQueryType;
+ uint32_t cbDataVMSVGA;
+ D3D11_QUERY dxQueryType;
+ uint32_t cbDataD3D11;
+} VGPU10QUERYINFO;
+
+static VGPU10QUERYINFO const *dxQueryInfo(SVGA3dQueryType type)
+{
+ static VGPU10QUERYINFO const aQueryInfo[SVGA3D_QUERYTYPE_MAX] =
+ {
+ { SVGA3D_QUERYTYPE_OCCLUSION, sizeof(SVGADXOcclusionQueryResult),
+ D3D11_QUERY_OCCLUSION, sizeof(UINT64) },
+ { SVGA3D_QUERYTYPE_TIMESTAMP, sizeof(SVGADXTimestampQueryResult),
+ D3D11_QUERY_TIMESTAMP, sizeof(UINT64) },
+ { SVGA3D_QUERYTYPE_TIMESTAMPDISJOINT, sizeof(SVGADXTimestampDisjointQueryResult),
+ D3D11_QUERY_TIMESTAMP_DISJOINT, sizeof(D3D11_QUERY_DATA_TIMESTAMP_DISJOINT) },
+ { SVGA3D_QUERYTYPE_PIPELINESTATS, sizeof(SVGADXPipelineStatisticsQueryResult),
+ D3D11_QUERY_PIPELINE_STATISTICS, sizeof(D3D11_QUERY_DATA_PIPELINE_STATISTICS) },
+ { SVGA3D_QUERYTYPE_OCCLUSIONPREDICATE, sizeof(SVGADXOcclusionPredicateQueryResult),
+ D3D11_QUERY_OCCLUSION_PREDICATE, sizeof(BOOL) },
+ { SVGA3D_QUERYTYPE_STREAMOUTPUTSTATS, sizeof(SVGADXStreamOutStatisticsQueryResult),
+ D3D11_QUERY_SO_STATISTICS, sizeof(D3D11_QUERY_DATA_SO_STATISTICS) },
+ { SVGA3D_QUERYTYPE_STREAMOVERFLOWPREDICATE, sizeof(SVGADXStreamOutPredicateQueryResult),
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE, sizeof(BOOL) },
+ { SVGA3D_QUERYTYPE_OCCLUSION64, sizeof(SVGADXOcclusion64QueryResult),
+ D3D11_QUERY_OCCLUSION, sizeof(UINT64) },
+ { SVGA3D_QUERYTYPE_SOSTATS_STREAM0, sizeof(SVGADXStreamOutStatisticsQueryResult),
+ D3D11_QUERY_SO_STATISTICS_STREAM0, sizeof(D3D11_QUERY_DATA_SO_STATISTICS) },
+ { SVGA3D_QUERYTYPE_SOSTATS_STREAM1, sizeof(SVGADXStreamOutStatisticsQueryResult),
+ D3D11_QUERY_SO_STATISTICS_STREAM1, sizeof(D3D11_QUERY_DATA_SO_STATISTICS) },
+ { SVGA3D_QUERYTYPE_SOSTATS_STREAM2, sizeof(SVGADXStreamOutStatisticsQueryResult),
+ D3D11_QUERY_SO_STATISTICS_STREAM2, sizeof(D3D11_QUERY_DATA_SO_STATISTICS) },
+ { SVGA3D_QUERYTYPE_SOSTATS_STREAM3, sizeof(SVGADXStreamOutStatisticsQueryResult),
+ D3D11_QUERY_SO_STATISTICS_STREAM3, sizeof(D3D11_QUERY_DATA_SO_STATISTICS) },
+ { SVGA3D_QUERYTYPE_SOP_STREAM0, sizeof(SVGADXStreamOutPredicateQueryResult),
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0, sizeof(BOOL) },
+ { SVGA3D_QUERYTYPE_SOP_STREAM1, sizeof(SVGADXStreamOutPredicateQueryResult),
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1, sizeof(BOOL) },
+ { SVGA3D_QUERYTYPE_SOP_STREAM2, sizeof(SVGADXStreamOutPredicateQueryResult),
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2, sizeof(BOOL) },
+ { SVGA3D_QUERYTYPE_SOP_STREAM3, sizeof(SVGADXStreamOutPredicateQueryResult),
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3, sizeof(BOOL) },
+ };
+
+ ASSERT_GUEST_RETURN(type < RT_ELEMENTS(aQueryInfo), NULL);
+ return &aQueryInfo[type];
+}
+
+static int dxDefineQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, SVGACOTableDXQueryEntry const *pEntry)
+{
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
+ VGPU10QUERYINFO const *pQueryInfo = dxQueryInfo((SVGA3dQueryType)pEntry->type);
+ if (!pQueryInfo)
+ return VERR_INVALID_PARAMETER;
+
+ D3D11_QUERY_DESC desc;
+ desc.Query = pQueryInfo->dxQueryType;
+ desc.MiscFlags = 0;
+ if (pEntry->flags & SVGA3D_DXQUERY_FLAG_PREDICATEHINT)
+ desc.MiscFlags |= (UINT)D3D11_QUERY_MISC_PREDICATEHINT;
+
+ HRESULT hr = pDXDevice->pDevice->CreateQuery(&desc, &pDXQuery->pQuery);
+ AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxDestroyQuery(DXQUERY *pDXQuery)
+{
+ D3D_RELEASE(pDXQuery->pQuery);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, SVGACOTableDXQueryEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxDefineQuery(pThisCC, pDXContext, queryId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
+ dxDestroyQuery(pDXQuery);
+
+ return VINF_SUCCESS;
+}
+
+
+/** @todo queryId makes pDXQuery redundant */
+static int dxBeginQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, DXQUERY *pDXQuery)
+{
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Begin is disabled for some queries. */
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ if (pEntry->type == SVGA3D_QUERYTYPE_TIMESTAMP)
+ return VINF_SUCCESS;
+
+ pDXDevice->pImmediateContext->Begin(pDXQuery->pQuery);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBeginQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
+ int rc = dxBeginQuery(pThisCC, pDXContext, queryId, pDXQuery);
+ return rc;
+}
+
+
+static int dxGetQueryResult(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId,
+ SVGADXQueryResultUnion *pQueryResult, uint32_t *pcbOut)
+{
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ typedef union _DXQUERYRESULT
+ {
+ UINT64 occlusion;
+ UINT64 timestamp;
+ D3D11_QUERY_DATA_TIMESTAMP_DISJOINT timestampDisjoint;
+ D3D11_QUERY_DATA_PIPELINE_STATISTICS pipelineStatistics;
+ BOOL occlusionPredicate;
+ D3D11_QUERY_DATA_SO_STATISTICS soStatistics;
+ BOOL soOverflowPredicate;
+ } DXQUERYRESULT;
+
+ DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ VGPU10QUERYINFO const *pQueryInfo = dxQueryInfo((SVGA3dQueryType)pEntry->type);
+ if (!pQueryInfo)
+ return VERR_INVALID_PARAMETER;
+
+ DXQUERYRESULT dxQueryResult;
+ while (pDXDevice->pImmediateContext->GetData(pDXQuery->pQuery, &dxQueryResult, pQueryInfo->cbDataD3D11, 0) != S_OK)
+ {
+ RTThreadYield();
+ }
+
+ /* Copy back the result. */
+ switch (pEntry->type)
+ {
+ case SVGA3D_QUERYTYPE_OCCLUSION:
+ pQueryResult->occ.samplesRendered = (uint32_t)dxQueryResult.occlusion;
+ break;
+ case SVGA3D_QUERYTYPE_TIMESTAMP:
+ pQueryResult->ts.timestamp = dxQueryResult.timestamp;
+ break;
+ case SVGA3D_QUERYTYPE_TIMESTAMPDISJOINT:
+ pQueryResult->tsDisjoint.realFrequency = dxQueryResult.timestampDisjoint.Frequency;
+ pQueryResult->tsDisjoint.disjoint = dxQueryResult.timestampDisjoint.Disjoint;
+ break;
+ case SVGA3D_QUERYTYPE_PIPELINESTATS:
+ pQueryResult->pipelineStats.inputAssemblyVertices = dxQueryResult.pipelineStatistics.IAVertices;
+ pQueryResult->pipelineStats.inputAssemblyPrimitives = dxQueryResult.pipelineStatistics.IAPrimitives;
+ pQueryResult->pipelineStats.vertexShaderInvocations = dxQueryResult.pipelineStatistics.VSInvocations;
+ pQueryResult->pipelineStats.geometryShaderInvocations = dxQueryResult.pipelineStatistics.GSInvocations;
+ pQueryResult->pipelineStats.geometryShaderPrimitives = dxQueryResult.pipelineStatistics.GSPrimitives;
+ pQueryResult->pipelineStats.clipperInvocations = dxQueryResult.pipelineStatistics.CInvocations;
+ pQueryResult->pipelineStats.clipperPrimitives = dxQueryResult.pipelineStatistics.CPrimitives;
+ pQueryResult->pipelineStats.pixelShaderInvocations = dxQueryResult.pipelineStatistics.PSInvocations;
+ pQueryResult->pipelineStats.hullShaderInvocations = dxQueryResult.pipelineStatistics.HSInvocations;
+ pQueryResult->pipelineStats.domainShaderInvocations = dxQueryResult.pipelineStatistics.DSInvocations;
+ pQueryResult->pipelineStats.computeShaderInvocations = dxQueryResult.pipelineStatistics.CSInvocations;
+ break;
+ case SVGA3D_QUERYTYPE_OCCLUSIONPREDICATE:
+ pQueryResult->occPred.anySamplesRendered = dxQueryResult.occlusionPredicate;
+ break;
+ case SVGA3D_QUERYTYPE_STREAMOUTPUTSTATS:
+ case SVGA3D_QUERYTYPE_SOSTATS_STREAM0:
+ case SVGA3D_QUERYTYPE_SOSTATS_STREAM1:
+ case SVGA3D_QUERYTYPE_SOSTATS_STREAM2:
+ case SVGA3D_QUERYTYPE_SOSTATS_STREAM3:
+ pQueryResult->soStats.numPrimitivesWritten = dxQueryResult.soStatistics.NumPrimitivesWritten;
+ pQueryResult->soStats.numPrimitivesRequired = dxQueryResult.soStatistics.PrimitivesStorageNeeded;
+ break;
+ case SVGA3D_QUERYTYPE_STREAMOVERFLOWPREDICATE:
+ case SVGA3D_QUERYTYPE_SOP_STREAM0:
+ case SVGA3D_QUERYTYPE_SOP_STREAM1:
+ case SVGA3D_QUERYTYPE_SOP_STREAM2:
+ case SVGA3D_QUERYTYPE_SOP_STREAM3:
+ pQueryResult->soPred.overflowed = dxQueryResult.soOverflowPredicate;
+ break;
+ case SVGA3D_QUERYTYPE_OCCLUSION64:
+ pQueryResult->occ64.samplesRendered = dxQueryResult.occlusion;
+ break;
+ }
+
+ *pcbOut = pQueryInfo->cbDataVMSVGA;
+ return VINF_SUCCESS;
+}
+
+static int dxEndQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId,
+ SVGADXQueryResultUnion *pQueryResult, uint32_t *pcbOut)
+{
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
+ pDXDevice->pImmediateContext->End(pDXQuery->pQuery);
+
+ /** @todo Consider issuing QueryEnd and getting data later in FIFO thread loop. */
+ return dxGetQueryResult(pThisCC, pDXContext, queryId, pQueryResult, pcbOut);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXEndQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext,
+ SVGA3dQueryId queryId, SVGADXQueryResultUnion *pQueryResult, uint32_t *pcbOut)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ int rc = dxEndQuery(pThisCC, pDXContext, queryId, pQueryResult, pcbOut);
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetPredication(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, uint32_t predicateValue)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
+
+ if (queryId != SVGA3D_INVALID_ID)
+ {
+ DEBUG_BREAKPOINT_TEST();
+ DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+
+ VGPU10QUERYINFO const *pQueryInfo = dxQueryInfo((SVGA3dQueryType)pEntry->type);
+ if (!pQueryInfo)
+ return VERR_INVALID_PARAMETER;
+
+ D3D_RELEASE(pDXQuery->pQuery);
+
+ D3D11_QUERY_DESC desc;
+ desc.Query = pQueryInfo->dxQueryType;
+ desc.MiscFlags = 0;
+ if (pEntry->flags & SVGA3D_DXQUERY_FLAG_PREDICATEHINT)
+ desc.MiscFlags |= (UINT)D3D11_QUERY_MISC_PREDICATEHINT;
+
+ HRESULT hr = pDXDevice->pDevice->CreatePredicate(&desc, &pDXQuery->pPredicate);
+ AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
+
+ pDXDevice->pImmediateContext->SetPredication(pDXQuery->pPredicate, RT_BOOL(predicateValue));
+ }
+ else
+ pDXDevice->pImmediateContext->SetPredication(NULL, FALSE);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetSOTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cSOTarget, SVGA3dSoTarget const *paSoTarget)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* For each paSoTarget[i]:
+ * If the stream outout buffer object does not exist then create it.
+ * If the surface has been updated by the guest then update the buffer object.
+ * Use SOSetTargets to set the buffers.
+ */
+
+ ID3D11Buffer *paResource[SVGA3D_DX_MAX_SOTARGETS];
+ UINT paOffset[SVGA3D_DX_MAX_SOTARGETS];
+
+ /* Always re-bind all 4 SO targets. They can be NULL. */
+ for (uint32_t i = 0; i < SVGA3D_DX_MAX_SOTARGETS; ++i)
+ {
+ /* Get corresponding resource. Create the buffer if does not yet exist. */
+ if (i < cSOTarget && paSoTarget[i].sid != SVGA_ID_INVALID)
+ {
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, paSoTarget[i].sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ rc = vmsvga3dBackSurfaceCreateSoBuffer(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ /** @todo How paSoTarget[i].sizeInBytes is used? Maybe when the buffer is created? */
+ paResource[i] = pSurface->pBackendSurface->u.pBuffer;
+ paOffset[i] = paSoTarget[i].offset;
+ }
+ else
+ {
+ paResource[i] = NULL;
+ paOffset[i] = 0;
+ }
+ }
+
+ pDevice->pImmediateContext->SOSetTargets(SVGA3D_DX_MAX_SOTARGETS, paResource, paOffset);
+
+ pDXContext->pBackendDXContext->cSOTarget = cSOTarget;
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetViewports(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(pBackend);
+
+ /* D3D11_VIEWPORT is identical to SVGA3dViewport. */
+ D3D11_VIEWPORT *pViewports = (D3D11_VIEWPORT *)paViewport;
+
+ pDevice->pImmediateContext->RSSetViewports(cViewport, pViewports);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetScissorRects(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cRect, SVGASignedRect const *paRect)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* D3D11_RECT is identical to SVGASignedRect. */
+ D3D11_RECT *pRects = (D3D11_RECT *)paRect;
+
+ pDevice->pImmediateContext->RSSetScissorRects(cRect, pRects);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXClearRenderTargetView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGA3dRGBAFloat const *pRGBA)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId];
+ if (!pDXView->u.pRenderTargetView)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ /* (Re-)create the render target view, because a creation of a view is deferred until a draw or a clear call. */
+ SVGACOTableDXRTViewEntry const *pEntry = &pDXContext->cot.paRTView[renderTargetViewId];
+ int rc = dxDefineRenderTargetView(pThisCC, pDXContext, renderTargetViewId, pEntry);
+ AssertRCReturn(rc, rc);
+ }
+ pDevice->pImmediateContext->ClearRenderTargetView(pDXView->u.pRenderTargetView, pRGBA->value);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId,
+ SVGA3dRGBAFloat const *pColor, uint32_t cRect, SVGASignedRect const *paRect)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId];
+ if (!pDXView->u.pRenderTargetView)
+ {
+ /* (Re-)create the render target view, because a creation of a view is deferred until a draw or a clear call. */
+ SVGACOTableDXRTViewEntry const *pEntry = &pDXContext->cot.paRTView[renderTargetViewId];
+ int rc = dxDefineRenderTargetView(pThisCC, pDXContext, renderTargetViewId, pEntry);
+ AssertRCReturn(rc, rc);
+ }
+ pDevice->pImmediateContext->ClearView(pDXView->u.pRenderTargetView, pColor->value, (D3D11_RECT *)paRect, cRect);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXClearDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t flags, SVGA3dDepthStencilViewId depthStencilViewId, float depth, uint8_t stencil)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paDepthStencilView[depthStencilViewId];
+ if (!pDXView->u.pDepthStencilView)
+ {
+//DEBUG_BREAKPOINT_TEST();
+ /* (Re-)create the depth stencil view, because a creation of a view is deferred until a draw or a clear call. */
+ SVGACOTableDXDSViewEntry const *pEntry = &pDXContext->cot.paDSView[depthStencilViewId];
+ int rc = dxDefineDepthStencilView(pThisCC, pDXContext, depthStencilViewId, pEntry);
+ AssertRCReturn(rc, rc);
+ }
+ pDevice->pImmediateContext->ClearDepthStencilView(pDXView->u.pDepthStencilView, flags, depth, stencil);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXPredCopyRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId dstSid, uint32_t dstSubResource, SVGA3dSurfaceId srcSid, uint32_t srcSubResource, SVGA3dCopyBox const *pBox)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSrcSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, srcSid, &pSrcSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pDstSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, dstSid, &pDstSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSrcSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ if (pSrcSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSrcSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSrcSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (pDstSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ if (pSrcSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pDstSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pDstSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ LogFunc(("cid %d: src cid %d%s -> dst cid %d%s\n",
+ pDXContext->cid, pSrcSurface->idAssociatedContext,
+ (pSrcSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : "",
+ pDstSurface->idAssociatedContext,
+ (pDstSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : ""));
+
+ /* Clip the box. */
+ /** @todo Use [src|dst]SubResource to index p[Src|Dst]Surface->paMipmapLevels array directly. */
+ uint32_t iSrcFace;
+ uint32_t iSrcMipmap;
+ vmsvga3dCalcMipmapAndFace(pSrcSurface->cLevels, srcSubResource, &iSrcMipmap, &iSrcFace);
+
+ uint32_t iDstFace;
+ uint32_t iDstMipmap;
+ vmsvga3dCalcMipmapAndFace(pDstSurface->cLevels, dstSubResource, &iDstMipmap, &iDstFace);
+
+ PVMSVGA3DMIPMAPLEVEL pSrcMipLevel;
+ rc = vmsvga3dMipmapLevel(pSrcSurface, iSrcFace, iSrcMipmap, &pSrcMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ PVMSVGA3DMIPMAPLEVEL pDstMipLevel;
+ rc = vmsvga3dMipmapLevel(pDstSurface, iDstFace, iDstMipmap, &pDstMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ SVGA3dCopyBox clipBox = *pBox;
+ vmsvgaR3ClipCopyBox(&pSrcMipLevel->mipmapSize, &pDstMipLevel->mipmapSize, &clipBox);
+
+ UINT DstSubresource = dstSubResource;
+ UINT DstX = clipBox.x;
+ UINT DstY = clipBox.y;
+ UINT DstZ = clipBox.z;
+
+ UINT SrcSubresource = srcSubResource;
+ D3D11_BOX SrcBox;
+ SrcBox.left = clipBox.srcx;
+ SrcBox.top = clipBox.srcy;
+ SrcBox.front = clipBox.srcz;
+ SrcBox.right = clipBox.srcx + clipBox.w;
+ SrcBox.bottom = clipBox.srcy + clipBox.h;
+ SrcBox.back = clipBox.srcz + clipBox.d;
+
+ ID3D11Resource *pDstResource;
+ ID3D11Resource *pSrcResource;
+
+ pDstResource = dxResource(pThisCC->svga.p3dState, pDstSurface, pDXContext);
+ pSrcResource = dxResource(pThisCC->svga.p3dState, pSrcSurface, pDXContext);
+
+ pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
+ pSrcResource, SrcSubresource, &SrcBox);
+
+#ifdef DUMP_BITMAPS
+ SVGA3dSurfaceImageId image;
+ image.sid = pDstSurface->id;
+ image.face = 0;
+ image.mipmap = 0;
+ VMSVGA3D_MAPPED_SURFACE map;
+ int rc2 = vmsvga3dSurfaceMap(pThisCC, &image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
+ if (RT_SUCCESS(rc2))
+ {
+ vmsvga3dMapWriteBmpFile(&map, "copyregion-");
+ vmsvga3dSurfaceUnmap(pThisCC, &image, &map, /* fWritten = */ false);
+ }
+ else
+ Log(("Map failed %Rrc\n", rc));
+#endif
+
+ pDstSurface->pBackendSurface->cidDrawing = pDXContext->cid;
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXPredCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId dstSid, SVGA3dSurfaceId srcSid)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSrcSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, srcSid, &pSrcSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pDstSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, dstSid, &pDstSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSrcSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ if (pSrcSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSrcSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSrcSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (pDstSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ if (pSrcSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pDstSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pDstSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ LogFunc(("cid %d: src cid %d%s -> dst cid %d%s\n",
+ pDXContext->cid, pSrcSurface->idAssociatedContext,
+ (pSrcSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : "",
+ pDstSurface->idAssociatedContext,
+ (pDstSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : ""));
+
+ ID3D11Resource *pDstResource = dxResource(pThisCC->svga.p3dState, pDstSurface, pDXContext);
+ ID3D11Resource *pSrcResource = dxResource(pThisCC->svga.p3dState, pSrcSurface, pDXContext);
+
+ pDevice->pImmediateContext->CopyResource(pDstResource, pSrcResource);
+
+ pDstSurface->pBackendSurface->cidDrawing = pDXContext->cid;
+ return VINF_SUCCESS;
+}
+
+
+#include "shaders/d3d11blitter.hlsl.vs.h"
+#include "shaders/d3d11blitter.hlsl.ps.h"
+
+#define HTEST(stmt) \
+ hr = stmt; \
+ AssertReturn(SUCCEEDED(hr), hr)
+
+
+static void BlitRelease(D3D11BLITTER *pBlitter)
+{
+ D3D_RELEASE(pBlitter->pVertexShader);
+ D3D_RELEASE(pBlitter->pPixelShader);
+ D3D_RELEASE(pBlitter->pSamplerState);
+ D3D_RELEASE(pBlitter->pRasterizerState);
+ D3D_RELEASE(pBlitter->pBlendState);
+ RT_ZERO(*pBlitter);
+}
+
+
+static HRESULT BlitInit(D3D11BLITTER *pBlitter, ID3D11Device *pDevice, ID3D11DeviceContext *pImmediateContext)
+{
+ HRESULT hr;
+
+ RT_ZERO(*pBlitter);
+
+ pBlitter->pDevice = pDevice;
+ pBlitter->pImmediateContext = pImmediateContext;
+
+ HTEST(pBlitter->pDevice->CreateVertexShader(g_vs_blitter, sizeof(g_vs_blitter), NULL, &pBlitter->pVertexShader));
+ HTEST(pBlitter->pDevice->CreatePixelShader(g_ps_blitter, sizeof(g_ps_blitter), NULL, &pBlitter->pPixelShader));
+
+ D3D11_SAMPLER_DESC SamplerDesc;
+ SamplerDesc.Filter = D3D11_FILTER_ANISOTROPIC;
+ SamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
+ SamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
+ SamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
+ SamplerDesc.MipLODBias = 0.0f;
+ SamplerDesc.MaxAnisotropy = 4;
+ SamplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS;
+ SamplerDesc.BorderColor[0] = 0.0f;
+ SamplerDesc.BorderColor[1] = 0.0f;
+ SamplerDesc.BorderColor[2] = 0.0f;
+ SamplerDesc.BorderColor[3] = 0.0f;
+ SamplerDesc.MinLOD = 0.0f;
+ SamplerDesc.MaxLOD = 0.0f;
+ HTEST(pBlitter->pDevice->CreateSamplerState(&SamplerDesc, &pBlitter->pSamplerState));
+
+ D3D11_RASTERIZER_DESC RasterizerDesc;
+ RasterizerDesc.FillMode = D3D11_FILL_SOLID;
+ RasterizerDesc.CullMode = D3D11_CULL_NONE;
+ RasterizerDesc.FrontCounterClockwise = FALSE;
+ RasterizerDesc.DepthBias = 0;
+ RasterizerDesc.DepthBiasClamp = 0.0f;
+ RasterizerDesc.SlopeScaledDepthBias = 0.0f;
+ RasterizerDesc.DepthClipEnable = FALSE;
+ RasterizerDesc.ScissorEnable = FALSE;
+ RasterizerDesc.MultisampleEnable = FALSE;
+ RasterizerDesc.AntialiasedLineEnable = FALSE;
+ HTEST(pBlitter->pDevice->CreateRasterizerState(&RasterizerDesc, &pBlitter->pRasterizerState));
+
+ D3D11_BLEND_DESC BlendDesc;
+ BlendDesc.AlphaToCoverageEnable = FALSE;
+ BlendDesc.IndependentBlendEnable = FALSE;
+ for (unsigned i = 0; i < RT_ELEMENTS(BlendDesc.RenderTarget); ++i)
+ {
+ BlendDesc.RenderTarget[i].BlendEnable = FALSE;
+ BlendDesc.RenderTarget[i].SrcBlend = D3D11_BLEND_SRC_COLOR;
+ BlendDesc.RenderTarget[i].DestBlend = D3D11_BLEND_ZERO;
+ BlendDesc.RenderTarget[i].BlendOp = D3D11_BLEND_OP_ADD;
+ BlendDesc.RenderTarget[i].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
+ BlendDesc.RenderTarget[i].DestBlendAlpha = D3D11_BLEND_ZERO;
+ BlendDesc.RenderTarget[i].BlendOpAlpha = D3D11_BLEND_OP_ADD;
+ BlendDesc.RenderTarget[i].RenderTargetWriteMask = 0xF;
+ }
+ HTEST(pBlitter->pDevice->CreateBlendState(&BlendDesc, &pBlitter->pBlendState));
+
+ return S_OK;
+}
+
+
+static HRESULT BlitFromTexture(D3D11BLITTER *pBlitter, ID3D11RenderTargetView *pDstRenderTargetView,
+ float cDstWidth, float cDstHeight, D3D11_RECT const &rectDst,
+ ID3D11ShaderResourceView *pSrcShaderResourceView)
+{
+ HRESULT hr;
+
+ /*
+ * Save pipeline state.
+ */
+ struct
+ {
+ D3D11_PRIMITIVE_TOPOLOGY Topology;
+ ID3D11InputLayout *pInputLayout;
+ ID3D11Buffer *pConstantBuffer;
+ ID3D11VertexShader *pVertexShader;
+ ID3D11HullShader *pHullShader;
+ ID3D11DomainShader *pDomainShader;
+ ID3D11GeometryShader *pGeometryShader;
+ ID3D11ShaderResourceView *pShaderResourceView;
+ ID3D11PixelShader *pPixelShader;
+ ID3D11SamplerState *pSamplerState;
+ ID3D11RasterizerState *pRasterizerState;
+ ID3D11BlendState *pBlendState;
+ FLOAT BlendFactor[4];
+ UINT SampleMask;
+ ID3D11RenderTargetView *apRenderTargetView[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];
+ ID3D11DepthStencilView *pDepthStencilView;
+ UINT NumViewports;
+ D3D11_VIEWPORT aViewport[D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE];
+ } SavedState;
+
+ pBlitter->pImmediateContext->IAGetPrimitiveTopology(&SavedState.Topology);
+ pBlitter->pImmediateContext->IAGetInputLayout(&SavedState.pInputLayout);
+ pBlitter->pImmediateContext->VSGetConstantBuffers(0, 1, &SavedState.pConstantBuffer);
+ pBlitter->pImmediateContext->VSGetShader(&SavedState.pVertexShader, NULL, NULL);
+ pBlitter->pImmediateContext->HSGetShader(&SavedState.pHullShader, NULL, NULL);
+ pBlitter->pImmediateContext->DSGetShader(&SavedState.pDomainShader, NULL, NULL);
+ pBlitter->pImmediateContext->GSGetShader(&SavedState.pGeometryShader, NULL, NULL);
+ pBlitter->pImmediateContext->PSGetShaderResources(0, 1, &SavedState.pShaderResourceView);
+ pBlitter->pImmediateContext->PSGetShader(&SavedState.pPixelShader, NULL, NULL);
+ pBlitter->pImmediateContext->PSGetSamplers(0, 1, &SavedState.pSamplerState);
+ pBlitter->pImmediateContext->RSGetState(&SavedState.pRasterizerState);
+ pBlitter->pImmediateContext->OMGetBlendState(&SavedState.pBlendState, SavedState.BlendFactor, &SavedState.SampleMask);
+ pBlitter->pImmediateContext->OMGetRenderTargets(RT_ELEMENTS(SavedState.apRenderTargetView), SavedState.apRenderTargetView, &SavedState.pDepthStencilView);
+ SavedState.NumViewports = RT_ELEMENTS(SavedState.aViewport);
+ pBlitter->pImmediateContext->RSGetViewports(&SavedState.NumViewports, &SavedState.aViewport[0]);
+
+ /*
+ * Setup pipeline for the blitter.
+ */
+
+ /* Render target is first.
+ * If the source texture is bound as a render target, then this call will unbind it
+ * and allow to use it as the shader resource.
+ */
+ pBlitter->pImmediateContext->OMSetRenderTargets(1, &pDstRenderTargetView, NULL);
+
+ /* Input assembler. */
+ pBlitter->pImmediateContext->IASetInputLayout(NULL);
+ pBlitter->pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
+
+ /* Constant buffer. */
+ struct
+ {
+ float scaleX;
+ float scaleY;
+ float offsetX;
+ float offsetY;
+ } VSConstantBuffer;
+ VSConstantBuffer.scaleX = (float)(rectDst.right - rectDst.left) / cDstWidth;
+ VSConstantBuffer.scaleY = (float)(rectDst.bottom - rectDst.top) / cDstHeight;
+ VSConstantBuffer.offsetX = (float)(rectDst.right + rectDst.left) / cDstWidth - 1.0f;
+ VSConstantBuffer.offsetY = -((float)(rectDst.bottom + rectDst.top) / cDstHeight - 1.0f);
+
+ D3D11_SUBRESOURCE_DATA initialData;
+ initialData.pSysMem = &VSConstantBuffer;
+ initialData.SysMemPitch = sizeof(VSConstantBuffer);
+ initialData.SysMemSlicePitch = sizeof(VSConstantBuffer);
+
+ D3D11_BUFFER_DESC bd;
+ RT_ZERO(bd);
+ bd.ByteWidth = sizeof(VSConstantBuffer);
+ bd.Usage = D3D11_USAGE_IMMUTABLE;
+ bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+
+ ID3D11Buffer *pConstantBuffer;
+ HTEST(pBlitter->pDevice->CreateBuffer(&bd, &initialData, &pConstantBuffer));
+ pBlitter->pImmediateContext->VSSetConstantBuffers(0, 1, &pConstantBuffer);
+ D3D_RELEASE(pConstantBuffer); /* xSSetConstantBuffers "will hold a reference to the interfaces passed in." */
+
+ /* Vertex shader. */
+ pBlitter->pImmediateContext->VSSetShader(pBlitter->pVertexShader, NULL, 0);
+
+ /* Unused shaders. */
+ pBlitter->pImmediateContext->HSSetShader(NULL, NULL, 0);
+ pBlitter->pImmediateContext->DSSetShader(NULL, NULL, 0);
+ pBlitter->pImmediateContext->GSSetShader(NULL, NULL, 0);
+
+ /* Shader resource view. */
+ pBlitter->pImmediateContext->PSSetShaderResources(0, 1, &pSrcShaderResourceView);
+
+ /* Pixel shader. */
+ pBlitter->pImmediateContext->PSSetShader(pBlitter->pPixelShader, NULL, 0);
+
+ /* Sampler. */
+ pBlitter->pImmediateContext->PSSetSamplers(0, 1, &pBlitter->pSamplerState);
+
+ /* Rasterizer. */
+ pBlitter->pImmediateContext->RSSetState(pBlitter->pRasterizerState);
+
+ /* Blend state. */
+ static FLOAT const BlendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
+ pBlitter->pImmediateContext->OMSetBlendState(pBlitter->pBlendState, BlendFactor, 0xffffffff);
+
+ /* Viewport. */
+ D3D11_VIEWPORT Viewport;
+ Viewport.TopLeftX = 0;
+ Viewport.TopLeftY = 0;
+ Viewport.Width = cDstWidth;
+ Viewport.Height = cDstHeight;
+ Viewport.MinDepth = 0.0f;
+ Viewport.MaxDepth = 1.0f;
+ pBlitter->pImmediateContext->RSSetViewports(1, &Viewport);
+
+ /* Draw. */
+ pBlitter->pImmediateContext->Draw(4, 0);
+
+ /*
+ * Restore pipeline state.
+ */
+ pBlitter->pImmediateContext->IASetPrimitiveTopology(SavedState.Topology);
+ pBlitter->pImmediateContext->IASetInputLayout(SavedState.pInputLayout);
+ D3D_RELEASE(SavedState.pInputLayout);
+ pBlitter->pImmediateContext->VSSetConstantBuffers(0, 1, &SavedState.pConstantBuffer);
+ D3D_RELEASE(SavedState.pConstantBuffer);
+ pBlitter->pImmediateContext->VSSetShader(SavedState.pVertexShader, NULL, 0);
+ D3D_RELEASE(SavedState.pVertexShader);
+
+ pBlitter->pImmediateContext->HSSetShader(SavedState.pHullShader, NULL, 0);
+ D3D_RELEASE(SavedState.pHullShader);
+ pBlitter->pImmediateContext->DSSetShader(SavedState.pDomainShader, NULL, 0);
+ D3D_RELEASE(SavedState.pDomainShader);
+ pBlitter->pImmediateContext->GSSetShader(SavedState.pGeometryShader, NULL, 0);
+ D3D_RELEASE(SavedState.pGeometryShader);
+
+ pBlitter->pImmediateContext->PSSetShaderResources(0, 1, &SavedState.pShaderResourceView);
+ D3D_RELEASE(SavedState.pShaderResourceView);
+ pBlitter->pImmediateContext->PSSetShader(SavedState.pPixelShader, NULL, 0);
+ D3D_RELEASE(SavedState.pPixelShader);
+ pBlitter->pImmediateContext->PSSetSamplers(0, 1, &SavedState.pSamplerState);
+ D3D_RELEASE(SavedState.pSamplerState);
+ pBlitter->pImmediateContext->RSSetState(SavedState.pRasterizerState);
+ D3D_RELEASE(SavedState.pRasterizerState);
+ pBlitter->pImmediateContext->OMSetBlendState(SavedState.pBlendState, SavedState.BlendFactor, SavedState.SampleMask);
+ D3D_RELEASE(SavedState.pBlendState);
+ pBlitter->pImmediateContext->OMSetRenderTargets(RT_ELEMENTS(SavedState.apRenderTargetView), SavedState.apRenderTargetView, SavedState.pDepthStencilView);
+ D3D_RELEASE_ARRAY(RT_ELEMENTS(SavedState.apRenderTargetView), SavedState.apRenderTargetView);
+ D3D_RELEASE(SavedState.pDepthStencilView);
+ pBlitter->pImmediateContext->RSSetViewports(SavedState.NumViewports, &SavedState.aViewport[0]);
+
+ return S_OK;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXPresentBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext,
+ SVGA3dSurfaceId dstSid, uint32_t dstSubResource, SVGA3dBox const *pBoxDst,
+ SVGA3dSurfaceId srcSid, uint32_t srcSubResource, SVGA3dBox const *pBoxSrc,
+ SVGA3dDXPresentBltMode mode)
+{
+ RT_NOREF(mode);
+
+ ASSERT_GUEST_RETURN(pBoxDst->z == 0 && pBoxDst->d == 1, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pBoxSrc->z == 0 && pBoxSrc->d == 1, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSrcSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, srcSid, &pSrcSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pDstSurface;
+ rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, dstSid, &pDstSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSrcSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ if (pSrcSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSrcSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSrcSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (pDstSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource. */
+ if (pSrcSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pDstSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pDstSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ LogFunc(("cid %d: src cid %d%s -> dst cid %d%s\n",
+ pDXContext->cid, pSrcSurface->idAssociatedContext,
+ (pSrcSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : "",
+ pDstSurface->idAssociatedContext,
+ (pDstSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : ""));
+
+ /* Clip the box. */
+ /** @todo Use [src|dst]SubResource to index p[Src|Dst]Surface->paMipmapLevels array directly. */
+ uint32_t iSrcFace;
+ uint32_t iSrcMipmap;
+ vmsvga3dCalcMipmapAndFace(pSrcSurface->cLevels, srcSubResource, &iSrcMipmap, &iSrcFace);
+
+ uint32_t iDstFace;
+ uint32_t iDstMipmap;
+ vmsvga3dCalcMipmapAndFace(pDstSurface->cLevels, dstSubResource, &iDstMipmap, &iDstFace);
+
+ PVMSVGA3DMIPMAPLEVEL pSrcMipLevel;
+ rc = vmsvga3dMipmapLevel(pSrcSurface, iSrcFace, iSrcMipmap, &pSrcMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ PVMSVGA3DMIPMAPLEVEL pDstMipLevel;
+ rc = vmsvga3dMipmapLevel(pDstSurface, iDstFace, iDstMipmap, &pDstMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ SVGA3dBox clipBoxSrc = *pBoxSrc;
+ vmsvgaR3ClipBox(&pSrcMipLevel->mipmapSize, &clipBoxSrc);
+
+ SVGA3dBox clipBoxDst = *pBoxDst;
+ vmsvgaR3ClipBox(&pDstMipLevel->mipmapSize, &clipBoxDst);
+
+ ID3D11Resource *pDstResource = dxResource(pThisCC->svga.p3dState, pDstSurface, pDXContext);
+ ID3D11Resource *pSrcResource = dxResource(pThisCC->svga.p3dState, pSrcSurface, pDXContext);
+
+ D3D11_RENDER_TARGET_VIEW_DESC RTVDesc;
+ RT_ZERO(RTVDesc);
+ RTVDesc.Format = vmsvgaDXSurfaceFormat2Dxgi(pDstSurface->format);;
+ RTVDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
+ RTVDesc.Texture2D.MipSlice = dstSubResource;
+
+ ID3D11RenderTargetView *pDstRenderTargetView;
+ HRESULT hr = pDevice->pDevice->CreateRenderTargetView(pDstResource, &RTVDesc, &pDstRenderTargetView);
+ AssertReturn(SUCCEEDED(hr), VERR_NOT_SUPPORTED);
+
+ D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc;
+ RT_ZERO(SRVDesc);
+ SRVDesc.Format = vmsvgaDXSurfaceFormat2Dxgi(pSrcSurface->format);
+ SRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
+ SRVDesc.Texture2D.MostDetailedMip = srcSubResource;
+ SRVDesc.Texture2D.MipLevels = 1;
+
+ ID3D11ShaderResourceView *pSrcShaderResourceView;
+ hr = pDevice->pDevice->CreateShaderResourceView(pSrcResource, &SRVDesc, &pSrcShaderResourceView);
+ AssertReturnStmt(SUCCEEDED(hr), D3D_RELEASE(pDstRenderTargetView), VERR_NOT_SUPPORTED);
+
+ D3D11_RECT rectDst;
+ rectDst.left = pBoxDst->x;
+ rectDst.top = pBoxDst->y;
+ rectDst.right = pBoxDst->x + pBoxDst->w;
+ rectDst.bottom = pBoxDst->y + pBoxDst->h;
+
+ BlitFromTexture(&pDevice->Blitter, pDstRenderTargetView, (float)pDstMipLevel->mipmapSize.width, (float)pDstMipLevel->mipmapSize.height,
+ rectDst, pSrcShaderResourceView);
+
+ D3D_RELEASE(pSrcShaderResourceView);
+ D3D_RELEASE(pDstRenderTargetView);
+
+ pDstSurface->pBackendSurface->cidDrawing = pDXContext->cid;
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXGenMips(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ ID3D11ShaderResourceView *pShaderResourceView = pDXContext->pBackendDXContext->paShaderResourceView[shaderResourceViewId].u.pShaderResourceView;
+ AssertReturn(pShaderResourceView, VERR_INVALID_STATE);
+
+ SVGACOTableDXSRViewEntry const *pSRViewEntry = dxGetShaderResourceViewEntry(pDXContext, shaderResourceViewId);
+ AssertReturn(pSRViewEntry, VERR_INVALID_STATE);
+
+ uint32_t const sid = pSRViewEntry->sid;
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pSurface->pBackendSurface, VERR_INVALID_STATE);
+
+ pDevice->pImmediateContext->GenerateMips(pShaderResourceView);
+
+ pSurface->pBackendSurface->cidDrawing = pDXContext->cid;
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineShaderResourceView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId, SVGACOTableDXSRViewEntry const *pEntry)
+{
+ /* Get corresponding resource for pEntry->sid. Create the surface if does not yet exist. */
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pEntry->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ ID3D11ShaderResourceView *pShaderResourceView;
+ DXVIEW *pView = &pDXContext->pBackendDXContext->paShaderResourceView[shaderResourceViewId];
+ Assert(pView->u.pView == NULL);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the actual texture or buffer. */
+ /** @todo One function to create all resources from surfaces. */
+ if (pSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSurface);
+
+ AssertRCReturn(rc, rc);
+ }
+
+ HRESULT hr = dxShaderResourceViewCreate(pThisCC, pDXContext, pEntry, pSurface, &pShaderResourceView);
+ AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
+
+ return dxViewInit(pView, pSurface, pDXContext, shaderResourceViewId, VMSVGA3D_VIEWTYPE_SHADERRESOURCE, pShaderResourceView);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineShaderResourceView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId, SVGACOTableDXSRViewEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /** @todo Probably not necessary because SRVs are defined in setupPipeline. */
+ return dxDefineShaderResourceView(pThisCC, pDXContext, shaderResourceViewId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyShaderResourceView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxViewDestroy(&pDXContext->pBackendDXContext->paShaderResourceView[shaderResourceViewId]);
+}
+
+
+static int dxDefineRenderTargetView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGACOTableDXRTViewEntry const *pEntry)
+{
+ /* Get corresponding resource for pEntry->sid. Create the surface if does not yet exist. */
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pEntry->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ DXVIEW *pView = &pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId];
+ Assert(pView->u.pView == NULL);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the actual texture. */
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ ID3D11RenderTargetView *pRenderTargetView;
+ HRESULT hr = dxRenderTargetViewCreate(pThisCC, pDXContext, pEntry, pSurface, &pRenderTargetView);
+ AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
+
+ return dxViewInit(pView, pSurface, pDXContext, renderTargetViewId, VMSVGA3D_VIEWTYPE_RENDERTARGET, pRenderTargetView);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineRenderTargetView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGACOTableDXRTViewEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ return dxDefineRenderTargetView(pThisCC, pDXContext, renderTargetViewId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyRenderTargetView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxViewDestroy(&pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId]);
+}
+
+
+static int dxDefineDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, SVGACOTableDXDSViewEntry const *pEntry)
+{
+ /* Get corresponding resource for pEntry->sid. Create the surface if does not yet exist. */
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pEntry->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ DXVIEW *pView = &pDXContext->pBackendDXContext->paDepthStencilView[depthStencilViewId];
+ Assert(pView->u.pView == NULL);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the actual texture. */
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ ID3D11DepthStencilView *pDepthStencilView;
+ HRESULT hr = dxDepthStencilViewCreate(pThisCC, pDXContext, pEntry, pSurface, &pDepthStencilView);
+ AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
+
+ return dxViewInit(pView, pSurface, pDXContext, depthStencilViewId, VMSVGA3D_VIEWTYPE_DEPTHSTENCIL, pDepthStencilView);
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, SVGACOTableDXDSViewEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ return dxDefineDepthStencilView(pThisCC, pDXContext, depthStencilViewId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxViewDestroy(&pDXContext->pBackendDXContext->paDepthStencilView[depthStencilViewId]);
+}
+
+
+static int dxDefineElementLayout(PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId, SVGACOTableDXElementLayoutEntry const *pEntry)
+{
+ DXELEMENTLAYOUT *pDXElementLayout = &pDXContext->pBackendDXContext->paElementLayout[elementLayoutId];
+ D3D_RELEASE(pDXElementLayout->pElementLayout);
+ pDXElementLayout->cElementDesc = 0;
+ RT_ZERO(pDXElementLayout->aElementDesc);
+
+ RT_NOREF(pEntry);
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxDestroyElementLayout(DXELEMENTLAYOUT *pDXElementLayout)
+{
+ D3D_RELEASE(pDXElementLayout->pElementLayout);
+ pDXElementLayout->cElementDesc = 0;
+ RT_ZERO(pDXElementLayout->aElementDesc);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineElementLayout(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId, SVGACOTableDXElementLayoutEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(pBackend);
+
+ /* Not much can be done here because ID3D11Device::CreateInputLayout requires
+ * a pShaderBytecodeWithInputSignature which is not known at this moment.
+ * InputLayout object will be created in setupPipeline.
+ */
+
+ Assert(elementLayoutId == pEntry->elid);
+
+ return dxDefineElementLayout(pDXContext, elementLayoutId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyElementLayout(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXELEMENTLAYOUT *pDXElementLayout = &pDXContext->pBackendDXContext->paElementLayout[elementLayoutId];
+ dxDestroyElementLayout(pDXElementLayout);
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineBlendState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext,
+ SVGA3dBlendStateId blendId, SVGACOTableDXBlendStateEntry const *pEntry)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ HRESULT hr = dxBlendStateCreate(pDevice, pEntry, &pDXContext->pBackendDXContext->papBlendState[blendId]);
+ if (SUCCEEDED(hr))
+ return VINF_SUCCESS;
+ return VERR_INVALID_STATE;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineBlendState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext,
+ SVGA3dBlendStateId blendId, SVGACOTableDXBlendStateEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxDefineBlendState(pThisCC, pDXContext, blendId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyBlendState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dBlendStateId blendId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ D3D_RELEASE(pDXContext->pBackendDXContext->papBlendState[blendId]);
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineDepthStencilState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId, SVGACOTableDXDepthStencilEntry const *pEntry)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ HRESULT hr = dxDepthStencilStateCreate(pDevice, pEntry, &pDXContext->pBackendDXContext->papDepthStencilState[depthStencilId]);
+ if (SUCCEEDED(hr))
+ return VINF_SUCCESS;
+ return VERR_INVALID_STATE;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineDepthStencilState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId, SVGACOTableDXDepthStencilEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxDefineDepthStencilState(pThisCC, pDXContext, depthStencilId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyDepthStencilState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ D3D_RELEASE(pDXContext->pBackendDXContext->papDepthStencilState[depthStencilId]);
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineRasterizerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId, SVGACOTableDXRasterizerStateEntry const *pEntry)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ HRESULT hr = dxRasterizerStateCreate(pDevice, pEntry, &pDXContext->pBackendDXContext->papRasterizerState[rasterizerId]);
+ if (SUCCEEDED(hr))
+ return VINF_SUCCESS;
+ return VERR_INVALID_STATE;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineRasterizerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId, SVGACOTableDXRasterizerStateEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxDefineRasterizerState(pThisCC, pDXContext, rasterizerId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyRasterizerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ D3D_RELEASE(pDXContext->pBackendDXContext->papRasterizerState[rasterizerId]);
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineSamplerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSamplerId samplerId, SVGACOTableDXSamplerEntry const *pEntry)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ HRESULT hr = dxSamplerStateCreate(pDevice, pEntry, &pDXContext->pBackendDXContext->papSamplerState[samplerId]);
+ if (SUCCEEDED(hr))
+ return VINF_SUCCESS;
+ return VERR_INVALID_STATE;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineSamplerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSamplerId samplerId, SVGACOTableDXSamplerEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxDefineSamplerState(pThisCC, pDXContext, samplerId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroySamplerState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSamplerId samplerId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ D3D_RELEASE(pDXContext->pBackendDXContext->papSamplerState[samplerId]);
+ return VINF_SUCCESS;
+}
+
+
+static int dxDefineShader(PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, SVGACOTableDXShaderEntry const *pEntry)
+{
+ /** @todo A common approach for creation of COTable backend objects: runtime, empty DX COTable, live DX COTable. */
+ DXSHADER *pDXShader = &pDXContext->pBackendDXContext->paShader[shaderId];
+ Assert(pDXShader->enmShaderType == SVGA3D_SHADERTYPE_INVALID);
+
+ /* Init the backend shader structure, if the shader has not been created yet. */
+ pDXShader->enmShaderType = pEntry->type;
+ pDXShader->pShader = NULL;
+ pDXShader->soid = SVGA_ID_INVALID;
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxDestroyShader(DXSHADER *pDXShader)
+{
+ pDXShader->enmShaderType = SVGA3D_SHADERTYPE_INVALID;
+ D3D_RELEASE(pDXShader->pShader);
+ RTMemFree(pDXShader->pvDXBC);
+ pDXShader->pvDXBC = NULL;
+ pDXShader->cbDXBC = 0;
+ pDXShader->soid = SVGA_ID_INVALID;
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, SVGACOTableDXShaderEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxDefineShader(pDXContext, shaderId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXSHADER *pDXShader = &pDXContext->pBackendDXContext->paShader[shaderId];
+ dxDestroyShader(pDXShader);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBindShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, DXShaderInfo const *pShaderInfo)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(pBackend);
+
+ DXSHADER *pDXShader = &pDXContext->pBackendDXContext->paShader[shaderId];
+ if (pDXShader->pvDXBC)
+ {
+ /* New DXBC code and new shader must be created. */
+ D3D_RELEASE(pDXShader->pShader);
+ RTMemFree(pDXShader->pvDXBC);
+ pDXShader->pvDXBC = NULL;
+ pDXShader->cbDXBC = 0;
+ }
+
+ pDXShader->shaderInfo = *pShaderInfo;
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
+ dxDestroyStreamOutput(pDXStreamOutput);
+
+ RT_NOREF(pEntry);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
+ dxDestroyStreamOutput(pDXStreamOutput);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend, pDXContext, soid);
+
+ return VINF_SUCCESS;
+}
+
+
+static int dxCOTableRealloc(void **ppvCOTable, uint32_t *pcCOTable, uint32_t cbEntry, uint32_t cEntries, uint32_t cValidEntries)
+{
+ uint32_t const cCOTableCurrent = *pcCOTable;
+
+ if (*pcCOTable != cEntries)
+ {
+ /* Grow/shrink the array. */
+ if (cEntries)
+ {
+ void *pvNew = RTMemRealloc(*ppvCOTable, cEntries * cbEntry);
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ *ppvCOTable = pvNew;
+ }
+ else
+ {
+ RTMemFree(*ppvCOTable);
+ *ppvCOTable = NULL;
+ }
+
+ *pcCOTable = cEntries;
+ }
+
+ if (*ppvCOTable)
+ {
+ uint32_t const cEntriesToKeep = RT_MIN(cCOTableCurrent, cValidEntries);
+ memset((uint8_t *)(*ppvCOTable) + cEntriesToKeep * cbEntry, 0, (cEntries - cEntriesToKeep) * cbEntry);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetCOTable(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableType type, uint32_t cValidEntries)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ VMSVGA3DBACKENDDXCONTEXT *pBackendDXContext = pDXContext->pBackendDXContext;
+
+ int rc = VINF_SUCCESS;
+
+ /*
+ * 1) Release current backend table, if exists;
+ * 2) Reallocate memory for the new backend table;
+ * 3) If cValidEntries is not zero, then re-define corresponding backend table elements.
+ */
+ switch (type)
+ {
+ case SVGA_COTABLE_RTVIEW:
+ /* Clear current entries. */
+ if (pBackendDXContext->paRenderTargetView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cRenderTargetView; ++i)
+ {
+ DXVIEW *pDXView = &pBackendDXContext->paRenderTargetView[i];
+ if (i < cValidEntries)
+ dxViewRemoveFromList(pDXView); /* Remove from list because DXVIEW array will be reallocated. */
+ else
+ dxViewDestroy(pDXView);
+ }
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paRenderTargetView, &pBackendDXContext->cRenderTargetView,
+ sizeof(pBackendDXContext->paRenderTargetView[0]), pDXContext->cot.cRTView, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXRTViewEntry const *pEntry = &pDXContext->cot.paRTView[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Define views which were not defined yet in backend. */
+ DXVIEW *pDXView = &pBackendDXContext->paRenderTargetView[i];
+ /** @todo Verify that the pEntry content still corresponds to the view. */
+ if (pDXView->u.pView)
+ dxViewAddToList(pThisCC, pDXView);
+ else if (pDXView->enmViewType == VMSVGA3D_VIEWTYPE_NONE)
+ dxDefineRenderTargetView(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_DSVIEW:
+ if (pBackendDXContext->paDepthStencilView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cDepthStencilView; ++i)
+ {
+ DXVIEW *pDXView = &pBackendDXContext->paDepthStencilView[i];
+ if (i < cValidEntries)
+ dxViewRemoveFromList(pDXView); /* Remove from list because DXVIEW array will be reallocated. */
+ else
+ dxViewDestroy(pDXView);
+ }
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paDepthStencilView, &pBackendDXContext->cDepthStencilView,
+ sizeof(pBackendDXContext->paDepthStencilView[0]), pDXContext->cot.cDSView, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXDSViewEntry const *pEntry = &pDXContext->cot.paDSView[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Define views which were not defined yet in backend. */
+ DXVIEW *pDXView = &pBackendDXContext->paDepthStencilView[i];
+ /** @todo Verify that the pEntry content still corresponds to the view. */
+ if (pDXView->u.pView)
+ dxViewAddToList(pThisCC, pDXView);
+ else if (pDXView->enmViewType == VMSVGA3D_VIEWTYPE_NONE)
+ dxDefineDepthStencilView(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_SRVIEW:
+ if (pBackendDXContext->paShaderResourceView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cShaderResourceView; ++i)
+ {
+ DXVIEW *pDXView = &pBackendDXContext->paShaderResourceView[i];
+ if (i < cValidEntries)
+ dxViewRemoveFromList(pDXView); /* Remove from list because DXVIEW array will be reallocated. */
+ else
+ dxViewDestroy(pDXView);
+ }
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paShaderResourceView, &pBackendDXContext->cShaderResourceView,
+ sizeof(pBackendDXContext->paShaderResourceView[0]), pDXContext->cot.cSRView, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXSRViewEntry const *pEntry = &pDXContext->cot.paSRView[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Define views which were not defined yet in backend. */
+ DXVIEW *pDXView = &pBackendDXContext->paShaderResourceView[i];
+ /** @todo Verify that the pEntry content still corresponds to the view. */
+ if (pDXView->u.pView)
+ dxViewAddToList(pThisCC, pDXView);
+ else if (pDXView->enmViewType == VMSVGA3D_VIEWTYPE_NONE)
+ dxDefineShaderResourceView(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_ELEMENTLAYOUT:
+ if (pBackendDXContext->paElementLayout)
+ {
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cElementLayout; ++i)
+ D3D_RELEASE(pBackendDXContext->paElementLayout[i].pElementLayout);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paElementLayout, &pBackendDXContext->cElementLayout,
+ sizeof(pBackendDXContext->paElementLayout[0]), pDXContext->cot.cElementLayout, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXElementLayoutEntry const *pEntry = &pDXContext->cot.paElementLayout[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ dxDefineElementLayout(pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_BLENDSTATE:
+ if (pBackendDXContext->papBlendState)
+ {
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cBlendState; ++i)
+ D3D_RELEASE(pBackendDXContext->papBlendState[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->papBlendState, &pBackendDXContext->cBlendState,
+ sizeof(pBackendDXContext->papBlendState[0]), pDXContext->cot.cBlendState, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXBlendStateEntry const *pEntry = &pDXContext->cot.paBlendState[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ dxDefineBlendState(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_DEPTHSTENCIL:
+ if (pBackendDXContext->papDepthStencilState)
+ {
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cDepthStencilState; ++i)
+ D3D_RELEASE(pBackendDXContext->papDepthStencilState[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->papDepthStencilState, &pBackendDXContext->cDepthStencilState,
+ sizeof(pBackendDXContext->papDepthStencilState[0]), pDXContext->cot.cDepthStencil, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXDepthStencilEntry const *pEntry = &pDXContext->cot.paDepthStencil[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ dxDefineDepthStencilState(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_RASTERIZERSTATE:
+ if (pBackendDXContext->papRasterizerState)
+ {
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cRasterizerState; ++i)
+ D3D_RELEASE(pBackendDXContext->papRasterizerState[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->papRasterizerState, &pBackendDXContext->cRasterizerState,
+ sizeof(pBackendDXContext->papRasterizerState[0]), pDXContext->cot.cRasterizerState, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXRasterizerStateEntry const *pEntry = &pDXContext->cot.paRasterizerState[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ dxDefineRasterizerState(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_SAMPLER:
+ if (pBackendDXContext->papSamplerState)
+ {
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cSamplerState; ++i)
+ D3D_RELEASE(pBackendDXContext->papSamplerState[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->papSamplerState, &pBackendDXContext->cSamplerState,
+ sizeof(pBackendDXContext->papSamplerState[0]), pDXContext->cot.cSampler, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXSamplerEntry const *pEntry = &pDXContext->cot.paSampler[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ dxDefineSamplerState(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_STREAMOUTPUT:
+ if (pBackendDXContext->paStreamOutput)
+ {
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cStreamOutput; ++i)
+ dxDestroyStreamOutput(&pBackendDXContext->paStreamOutput[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paStreamOutput, &pBackendDXContext->cStreamOutput,
+ sizeof(pBackendDXContext->paStreamOutput[0]), pDXContext->cot.cStreamOutput, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXStreamOutputEntry const *pEntry = &pDXContext->cot.paStreamOutput[i];
+ /** @todo The caller must verify the COTable content using same rules as when a new entry is defined. */
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Reset the stream output backend data. It will be re-created when a GS shader with this streamoutput
+ * will be set in setupPipeline.
+ */
+ DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[i];
+ dxDestroyStreamOutput(pDXStreamOutput);
+ }
+ break;
+ case SVGA_COTABLE_DXQUERY:
+ if (pBackendDXContext->paQuery)
+ {
+ /* Destroy the no longer used entries. */
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cQuery; ++i)
+ dxDestroyQuery(&pBackendDXContext->paQuery[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paQuery, &pBackendDXContext->cQuery,
+ sizeof(pBackendDXContext->paQuery[0]), pDXContext->cot.cQuery, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXQueryEntry const *pEntry = &pDXContext->cot.paQuery[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Define queries which were not defined yet in backend. */
+ DXQUERY *pDXQuery = &pBackendDXContext->paQuery[i];
+ if ( pEntry->type != SVGA3D_QUERYTYPE_INVALID
+ && pDXQuery->pQuery == NULL)
+ dxDefineQuery(pThisCC, pDXContext, i, pEntry);
+ else
+ Assert(pEntry->type == SVGA3D_QUERYTYPE_INVALID || pDXQuery->pQuery);
+ }
+ break;
+ case SVGA_COTABLE_DXSHADER:
+ if (pBackendDXContext->paShader)
+ {
+ /* Destroy the no longer used entries. */
+ for (uint32_t i = cValidEntries; i < pBackendDXContext->cShader; ++i)
+ dxDestroyShader(&pBackendDXContext->paShader[i]);
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paShader, &pBackendDXContext->cShader,
+ sizeof(pBackendDXContext->paShader[0]), pDXContext->cot.cShader, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXShaderEntry const *pEntry = &pDXContext->cot.paShader[i];
+ /** @todo The caller must verify the COTable content using same rules as when a new entry is defined. */
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Define shaders which were not defined yet in backend. */
+ DXSHADER *pDXShader = &pBackendDXContext->paShader[i];
+ if ( pEntry->type != SVGA3D_SHADERTYPE_INVALID
+ && pDXShader->enmShaderType == SVGA3D_SHADERTYPE_INVALID)
+ dxDefineShader(pDXContext, i, pEntry);
+ else
+ Assert(pEntry->type == pDXShader->enmShaderType);
+
+ }
+ break;
+ case SVGA_COTABLE_UAVIEW:
+ if (pBackendDXContext->paUnorderedAccessView)
+ {
+ for (uint32_t i = 0; i < pBackendDXContext->cUnorderedAccessView; ++i)
+ {
+ DXVIEW *pDXView = &pBackendDXContext->paUnorderedAccessView[i];
+ if (i < cValidEntries)
+ dxViewRemoveFromList(pDXView); /* Remove from list because DXVIEW array will be reallocated. */
+ else
+ dxViewDestroy(pDXView);
+ }
+ }
+
+ rc = dxCOTableRealloc((void **)&pBackendDXContext->paUnorderedAccessView, &pBackendDXContext->cUnorderedAccessView,
+ sizeof(pBackendDXContext->paUnorderedAccessView[0]), pDXContext->cot.cUAView, cValidEntries);
+ AssertRCBreak(rc);
+
+ for (uint32_t i = 0; i < cValidEntries; ++i)
+ {
+ SVGACOTableDXUAViewEntry const *pEntry = &pDXContext->cot.paUAView[i];
+ if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
+ continue; /* Skip uninitialized entry. */
+
+ /* Define views which were not defined yet in backend. */
+ DXVIEW *pDXView = &pBackendDXContext->paUnorderedAccessView[i];
+ /** @todo Verify that the pEntry content still corresponds to the view. */
+ if (pDXView->u.pView)
+ dxViewAddToList(pThisCC, pDXView);
+ else if (pDXView->enmViewType == VMSVGA3D_VIEWTYPE_NONE)
+ dxDefineUnorderedAccessView(pThisCC, pDXContext, i, pEntry);
+ }
+ break;
+ case SVGA_COTABLE_MAX: break; /* Compiler warning */
+ }
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBufferCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSurfaceCopyAndReadback(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXMoveQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBindAllShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXHint(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBufferUpdate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetVSConstantBufferOffset(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetPSConstantBufferOffset(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetGSConstantBufferOffset(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetHSConstantBufferOffset(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetDSConstantBufferOffset(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetCSConstantBufferOffset(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXCondBindAllShader(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackScreenCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackIntraSurfaceCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXResolveCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXPredResolveCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXPredConvertRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXPredConvert(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackWholeSurfaceCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static int dxDefineUnorderedAccessView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry)
+{
+ /* Get corresponding resource for pEntry->sid. Create the surface if does not yet exist. */
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pEntry->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ ID3D11UnorderedAccessView *pUnorderedAccessView;
+ DXVIEW *pView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
+ Assert(pView->u.pView == NULL);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the actual texture or buffer. */
+ /** @todo One function to create all resources from surfaces. */
+ if (pSurface->format != SVGA3D_BUFFER)
+ rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSurface);
+ else
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSurface);
+
+ AssertRCReturn(rc, rc);
+ }
+
+ HRESULT hr = dxUnorderedAccessViewCreate(pThisCC, pDXContext, pEntry, pSurface, &pUnorderedAccessView);
+ AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
+
+ return dxViewInit(pView, pSurface, pDXContext, uaViewId, VMSVGA3D_VIEWTYPE_UNORDEREDACCESS, pUnorderedAccessView);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDefineUAView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /** @todo Probably not necessary because UAVs are defined in setupPipeline. */
+ return dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pEntry);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDestroyUAView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ return dxViewDestroy(&pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId]);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXClearUAViewUint(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, uint32_t const aValues[4])
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
+ if (!pDXView->u.pUnorderedAccessView)
+ {
+ /* (Re-)create the view, because a creation of a view is deferred until a draw or a clear call. */
+ SVGACOTableDXUAViewEntry const *pEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
+ int rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pEntry);
+ AssertRCReturn(rc, rc);
+ }
+ pDevice->pImmediateContext->ClearUnorderedAccessViewUint(pDXView->u.pUnorderedAccessView, aValues);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXClearUAViewFloat(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, float const aValues[4])
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
+ if (!pDXView->u.pUnorderedAccessView)
+ {
+ /* (Re-)create the view, because a creation of a view is deferred until a draw or a clear call. */
+ SVGACOTableDXUAViewEntry const *pEntry = &pDXContext->cot.paUAView[uaViewId];
+ int rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pEntry);
+ AssertRCReturn(rc, rc);
+ }
+ pDevice->pImmediateContext->ClearUnorderedAccessViewFloat(pDXView->u.pUnorderedAccessView, aValues);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXCopyStructureCount(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId srcUAViewId, SVGA3dSurfaceId destSid, uint32_t destByteOffset)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Get corresponding resource. Create the buffer if does not yet exist. */
+ ID3D11Buffer *pDstBuffer;
+ if (destSid != SVGA3D_INVALID_ID)
+ {
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, destSid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource and initialize it with the current surface data. */
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ pDstBuffer = pSurface->pBackendSurface->u.pBuffer;
+ }
+ else
+ pDstBuffer = NULL;
+
+ ID3D11UnorderedAccessView *pSrcView;
+ if (srcUAViewId != SVGA3D_INVALID_ID)
+ {
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[srcUAViewId];
+ AssertReturn(pDXView->u.pUnorderedAccessView, VERR_INVALID_STATE);
+ pSrcView = pDXView->u.pUnorderedAccessView;
+ }
+ else
+ pSrcView = NULL;
+
+ pDevice->pImmediateContext->CopyStructureCount(pDstBuffer, destByteOffset, pSrcView);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetUAViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t uavSpliceIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(uavSpliceIndex, cUAViewId, paUAViewId);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId argsBufferSid, uint32_t byteOffsetForArgs)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Get corresponding resource. Create the buffer if does not yet exist. */
+ ID3D11Buffer *pBufferForArgs;
+ if (argsBufferSid != SVGA_ID_INVALID)
+ {
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, argsBufferSid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource and initialize it with the current surface data. */
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ pBufferForArgs = pSurface->pBackendSurface->u.pBuffer;
+ }
+ else
+ pBufferForArgs = NULL;
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ Assert(pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN);
+
+ pDevice->pImmediateContext->DrawIndexedInstancedIndirect(pBufferForArgs, byteOffsetForArgs);
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDrawInstancedIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId argsBufferSid, uint32_t byteOffsetForArgs)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ /* Get corresponding resource. Create the buffer if does not yet exist. */
+ ID3D11Buffer *pBufferForArgs;
+ if (argsBufferSid != SVGA_ID_INVALID)
+ {
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, argsBufferSid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->pBackendSurface == NULL)
+ {
+ /* Create the resource and initialize it with the current surface data. */
+ rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ pBufferForArgs = pSurface->pBackendSurface->u.pBuffer;
+ }
+ else
+ pBufferForArgs = NULL;
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ Assert(pDXContext->svgaDXContext.inputAssembly.topology != SVGA3D_PRIMITIVE_TRIANGLEFAN);
+
+ pDevice->pImmediateContext->DrawInstancedIndirect(pBufferForArgs, byteOffsetForArgs);
+
+ /* Note which surfaces are being drawn. */
+ dxTrackRenderTargets(pThisCC, pDXContext);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDispatch(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ dxSetupPipeline(pThisCC, pDXContext);
+
+ pDevice->pImmediateContext->Dispatch(threadGroupCountX, threadGroupCountY, threadGroupCountZ);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXDispatchIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackWriteZeroSurface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackHintZeroSurface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXTransferToBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackLogicOpsBitBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackLogicOpsTransBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackLogicOpsStretchBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackLogicOpsColorFill(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackLogicOpsAlphaBlend(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackLogicOpsClearTypeBlend(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static int dxSetCSUnorderedAccessViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+//DEBUG_BREAKPOINT_TEST();
+ uint32_t const *pUAIds = &pDXContext->svgaDXContext.csuaViewIds[0];
+ ID3D11UnorderedAccessView *papUnorderedAccessView[SVGA3D_DX11_1_MAX_UAVIEWS];
+ UINT aUAVInitialCounts[SVGA3D_DX11_1_MAX_UAVIEWS];
+ for (uint32_t i = 0; i < SVGA3D_DX11_1_MAX_UAVIEWS; ++i)
+ {
+ SVGA3dUAViewId const uaViewId = pUAIds[i];
+ if (uaViewId != SVGA3D_INVALID_ID)
+ {
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->pBackendDXContext->cUnorderedAccessView, VERR_INVALID_PARAMETER);
+
+ DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
+ Assert(pDXView->u.pUnorderedAccessView);
+ papUnorderedAccessView[i] = pDXView->u.pUnorderedAccessView;
+
+ SVGACOTableDXUAViewEntry const *pEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
+ aUAVInitialCounts[i] = pEntry->structureCount;
+ }
+ else
+ {
+ papUnorderedAccessView[i] = NULL;
+ aUAVInitialCounts[i] = (UINT)-1;
+ }
+ }
+
+ dxCSUnorderedAccessViewSet(pDevice, 0, SVGA3D_DX11_1_MAX_UAVIEWS, papUnorderedAccessView, aUAVInitialCounts);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetCSUAViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+ RT_NOREF(pBackend);
+
+ DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
+ AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
+
+ RT_NOREF(startIndex, cUAViewId, paUAViewId);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetMinLOD(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSetShaderIface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceStretchBltNonMSToMS(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXBindShaderIface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
+
+ RT_NOREF(pBackend, pDXContext);
+ AssertFailed(); /** @todo Implement */
+ return VERR_NOT_IMPLEMENTED;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXLoadState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM)
+{
+ RT_NOREF(pThisCC);
+ uint32_t u32;
+ int rc;
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelRCReturn(u32 == pDXContext->pBackendDXContext->cShader, VERR_INVALID_STATE);
+
+ for (uint32_t i = 0; i < pDXContext->pBackendDXContext->cShader; ++i)
+ {
+ DXSHADER *pDXShader = &pDXContext->pBackendDXContext->paShader[i];
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelReturn((SVGA3dShaderType)u32 == pDXShader->enmShaderType, VERR_INVALID_STATE);
+
+ if (pDXShader->enmShaderType == SVGA3D_SHADERTYPE_INVALID)
+ continue;
+
+ pHlp->pfnSSMGetU32(pSSM, &pDXShader->soid);
+
+ pHlp->pfnSSMGetU32(pSSM, &u32);
+ pDXShader->shaderInfo.enmProgramType = (VGPU10_PROGRAM_TYPE)u32;
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cbBytecode);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelReturn(pDXShader->shaderInfo.cbBytecode <= 2 * SVGA3D_MAX_SHADER_MEMORY_BYTES, VERR_INVALID_STATE);
+
+ if (pDXShader->shaderInfo.cbBytecode)
+ {
+ pDXShader->shaderInfo.pvBytecode = RTMemAlloc(pDXShader->shaderInfo.cbBytecode);
+ AssertPtrReturn(pDXShader->shaderInfo.pvBytecode, VERR_NO_MEMORY);
+ pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.pvBytecode, pDXShader->shaderInfo.cbBytecode);
+ }
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cInputSignature);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelReturn(pDXShader->shaderInfo.cInputSignature <= 32, VERR_INVALID_STATE);
+ if (pDXShader->shaderInfo.cInputSignature)
+ pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aInputSignature, pDXShader->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry));
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cOutputSignature);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelReturn(pDXShader->shaderInfo.cOutputSignature <= 32, VERR_INVALID_STATE);
+ if (pDXShader->shaderInfo.cOutputSignature)
+ pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aOutputSignature, pDXShader->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry));
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cPatchConstantSignature);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelReturn(pDXShader->shaderInfo.cPatchConstantSignature <= 32, VERR_INVALID_STATE);
+ if (pDXShader->shaderInfo.cPatchConstantSignature)
+ pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aPatchConstantSignature, pDXShader->shaderInfo.cPatchConstantSignature * sizeof(SVGA3dDXSignatureEntry));
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &pDXShader->shaderInfo.cDclResource);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelReturn(pDXShader->shaderInfo.cDclResource <= SVGA3D_DX_MAX_SRVIEWS, VERR_INVALID_STATE);
+ if (pDXShader->shaderInfo.cDclResource)
+ pHlp->pfnSSMGetMem(pSSM, pDXShader->shaderInfo.aOffDclResource, pDXShader->shaderInfo.cDclResource * sizeof(uint32_t));
+
+ DXShaderGenerateSemantics(&pDXShader->shaderInfo);
+ }
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &pDXContext->pBackendDXContext->cSOTarget);
+ AssertLogRelRCReturn(rc, rc);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackDXSaveState(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM)
+{
+ RT_NOREF(pThisCC);
+ int rc;
+
+ pHlp->pfnSSMPutU32(pSSM, pDXContext->pBackendDXContext->cShader);
+ for (uint32_t i = 0; i < pDXContext->pBackendDXContext->cShader; ++i)
+ {
+ DXSHADER *pDXShader = &pDXContext->pBackendDXContext->paShader[i];
+
+ pHlp->pfnSSMPutU32(pSSM, (uint32_t)pDXShader->enmShaderType);
+ if (pDXShader->enmShaderType == SVGA3D_SHADERTYPE_INVALID)
+ continue;
+
+ pHlp->pfnSSMPutU32(pSSM, pDXShader->soid);
+
+ pHlp->pfnSSMPutU32(pSSM, (uint32_t)pDXShader->shaderInfo.enmProgramType);
+
+ pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cbBytecode);
+ if (pDXShader->shaderInfo.cbBytecode)
+ pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.pvBytecode, pDXShader->shaderInfo.cbBytecode);
+
+ pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cInputSignature);
+ if (pDXShader->shaderInfo.cInputSignature)
+ pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aInputSignature, pDXShader->shaderInfo.cInputSignature * sizeof(SVGA3dDXSignatureEntry));
+
+ pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cOutputSignature);
+ if (pDXShader->shaderInfo.cOutputSignature)
+ pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aOutputSignature, pDXShader->shaderInfo.cOutputSignature * sizeof(SVGA3dDXSignatureEntry));
+
+ pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cPatchConstantSignature);
+ if (pDXShader->shaderInfo.cPatchConstantSignature)
+ pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aPatchConstantSignature, pDXShader->shaderInfo.cPatchConstantSignature * sizeof(SVGA3dDXSignatureEntry));
+
+ pHlp->pfnSSMPutU32(pSSM, pDXShader->shaderInfo.cDclResource);
+ if (pDXShader->shaderInfo.cDclResource)
+ pHlp->pfnSSMPutMem(pSSM, pDXShader->shaderInfo.aOffDclResource, pDXShader->shaderInfo.cDclResource * sizeof(uint32_t));
+ }
+ rc = pHlp->pfnSSMPutU32(pSSM, pDXContext->pBackendDXContext->cSOTarget);
+ AssertLogRelRCReturn(rc, rc);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackQueryInterface(PVGASTATECC pThisCC, char const *pszInterfaceName, void *pvInterfaceFuncs, size_t cbInterfaceFuncs)
+{
+ RT_NOREF(pThisCC);
+
+ int rc = VINF_SUCCESS;
+ if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_DX) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSDX))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCSDX *p = (VMSVGA3DBACKENDFUNCSDX *)pvInterfaceFuncs;
+ p->pfnDXSaveState = vmsvga3dBackDXSaveState;
+ p->pfnDXLoadState = vmsvga3dBackDXLoadState;
+ p->pfnDXDefineContext = vmsvga3dBackDXDefineContext;
+ p->pfnDXDestroyContext = vmsvga3dBackDXDestroyContext;
+ p->pfnDXBindContext = vmsvga3dBackDXBindContext;
+ p->pfnDXSwitchContext = vmsvga3dBackDXSwitchContext;
+ p->pfnDXReadbackContext = vmsvga3dBackDXReadbackContext;
+ p->pfnDXInvalidateContext = vmsvga3dBackDXInvalidateContext;
+ p->pfnDXSetSingleConstantBuffer = vmsvga3dBackDXSetSingleConstantBuffer;
+ p->pfnDXSetShaderResources = vmsvga3dBackDXSetShaderResources;
+ p->pfnDXSetShader = vmsvga3dBackDXSetShader;
+ p->pfnDXSetSamplers = vmsvga3dBackDXSetSamplers;
+ p->pfnDXDraw = vmsvga3dBackDXDraw;
+ p->pfnDXDrawIndexed = vmsvga3dBackDXDrawIndexed;
+ p->pfnDXDrawInstanced = vmsvga3dBackDXDrawInstanced;
+ p->pfnDXDrawIndexedInstanced = vmsvga3dBackDXDrawIndexedInstanced;
+ p->pfnDXDrawAuto = vmsvga3dBackDXDrawAuto;
+ p->pfnDXSetInputLayout = vmsvga3dBackDXSetInputLayout;
+ p->pfnDXSetVertexBuffers = vmsvga3dBackDXSetVertexBuffers;
+ p->pfnDXSetIndexBuffer = vmsvga3dBackDXSetIndexBuffer;
+ p->pfnDXSetTopology = vmsvga3dBackDXSetTopology;
+ p->pfnDXSetRenderTargets = vmsvga3dBackDXSetRenderTargets;
+ p->pfnDXSetBlendState = vmsvga3dBackDXSetBlendState;
+ p->pfnDXSetDepthStencilState = vmsvga3dBackDXSetDepthStencilState;
+ p->pfnDXSetRasterizerState = vmsvga3dBackDXSetRasterizerState;
+ p->pfnDXDefineQuery = vmsvga3dBackDXDefineQuery;
+ p->pfnDXDestroyQuery = vmsvga3dBackDXDestroyQuery;
+ p->pfnDXBeginQuery = vmsvga3dBackDXBeginQuery;
+ p->pfnDXEndQuery = vmsvga3dBackDXEndQuery;
+ p->pfnDXSetPredication = vmsvga3dBackDXSetPredication;
+ p->pfnDXSetSOTargets = vmsvga3dBackDXSetSOTargets;
+ p->pfnDXSetViewports = vmsvga3dBackDXSetViewports;
+ p->pfnDXSetScissorRects = vmsvga3dBackDXSetScissorRects;
+ p->pfnDXClearRenderTargetView = vmsvga3dBackDXClearRenderTargetView;
+ p->pfnDXClearDepthStencilView = vmsvga3dBackDXClearDepthStencilView;
+ p->pfnDXPredCopyRegion = vmsvga3dBackDXPredCopyRegion;
+ p->pfnDXPredCopy = vmsvga3dBackDXPredCopy;
+ p->pfnDXPresentBlt = vmsvga3dBackDXPresentBlt;
+ p->pfnDXGenMips = vmsvga3dBackDXGenMips;
+ p->pfnDXDefineShaderResourceView = vmsvga3dBackDXDefineShaderResourceView;
+ p->pfnDXDestroyShaderResourceView = vmsvga3dBackDXDestroyShaderResourceView;
+ p->pfnDXDefineRenderTargetView = vmsvga3dBackDXDefineRenderTargetView;
+ p->pfnDXDestroyRenderTargetView = vmsvga3dBackDXDestroyRenderTargetView;
+ p->pfnDXDefineDepthStencilView = vmsvga3dBackDXDefineDepthStencilView;
+ p->pfnDXDestroyDepthStencilView = vmsvga3dBackDXDestroyDepthStencilView;
+ p->pfnDXDefineElementLayout = vmsvga3dBackDXDefineElementLayout;
+ p->pfnDXDestroyElementLayout = vmsvga3dBackDXDestroyElementLayout;
+ p->pfnDXDefineBlendState = vmsvga3dBackDXDefineBlendState;
+ p->pfnDXDestroyBlendState = vmsvga3dBackDXDestroyBlendState;
+ p->pfnDXDefineDepthStencilState = vmsvga3dBackDXDefineDepthStencilState;
+ p->pfnDXDestroyDepthStencilState = vmsvga3dBackDXDestroyDepthStencilState;
+ p->pfnDXDefineRasterizerState = vmsvga3dBackDXDefineRasterizerState;
+ p->pfnDXDestroyRasterizerState = vmsvga3dBackDXDestroyRasterizerState;
+ p->pfnDXDefineSamplerState = vmsvga3dBackDXDefineSamplerState;
+ p->pfnDXDestroySamplerState = vmsvga3dBackDXDestroySamplerState;
+ p->pfnDXDefineShader = vmsvga3dBackDXDefineShader;
+ p->pfnDXDestroyShader = vmsvga3dBackDXDestroyShader;
+ p->pfnDXBindShader = vmsvga3dBackDXBindShader;
+ p->pfnDXDefineStreamOutput = vmsvga3dBackDXDefineStreamOutput;
+ p->pfnDXDestroyStreamOutput = vmsvga3dBackDXDestroyStreamOutput;
+ p->pfnDXSetStreamOutput = vmsvga3dBackDXSetStreamOutput;
+ p->pfnDXSetCOTable = vmsvga3dBackDXSetCOTable;
+ p->pfnDXBufferCopy = vmsvga3dBackDXBufferCopy;
+ p->pfnDXSurfaceCopyAndReadback = vmsvga3dBackDXSurfaceCopyAndReadback;
+ p->pfnDXMoveQuery = vmsvga3dBackDXMoveQuery;
+ p->pfnDXBindAllShader = vmsvga3dBackDXBindAllShader;
+ p->pfnDXHint = vmsvga3dBackDXHint;
+ p->pfnDXBufferUpdate = vmsvga3dBackDXBufferUpdate;
+ p->pfnDXSetVSConstantBufferOffset = vmsvga3dBackDXSetVSConstantBufferOffset;
+ p->pfnDXSetPSConstantBufferOffset = vmsvga3dBackDXSetPSConstantBufferOffset;
+ p->pfnDXSetGSConstantBufferOffset = vmsvga3dBackDXSetGSConstantBufferOffset;
+ p->pfnDXSetHSConstantBufferOffset = vmsvga3dBackDXSetHSConstantBufferOffset;
+ p->pfnDXSetDSConstantBufferOffset = vmsvga3dBackDXSetDSConstantBufferOffset;
+ p->pfnDXSetCSConstantBufferOffset = vmsvga3dBackDXSetCSConstantBufferOffset;
+ p->pfnDXCondBindAllShader = vmsvga3dBackDXCondBindAllShader;
+ p->pfnScreenCopy = vmsvga3dBackScreenCopy;
+ p->pfnIntraSurfaceCopy = vmsvga3dBackIntraSurfaceCopy;
+ p->pfnDXResolveCopy = vmsvga3dBackDXResolveCopy;
+ p->pfnDXPredResolveCopy = vmsvga3dBackDXPredResolveCopy;
+ p->pfnDXPredConvertRegion = vmsvga3dBackDXPredConvertRegion;
+ p->pfnDXPredConvert = vmsvga3dBackDXPredConvert;
+ p->pfnWholeSurfaceCopy = vmsvga3dBackWholeSurfaceCopy;
+ p->pfnDXDefineUAView = vmsvga3dBackDXDefineUAView;
+ p->pfnDXDestroyUAView = vmsvga3dBackDXDestroyUAView;
+ p->pfnDXClearUAViewUint = vmsvga3dBackDXClearUAViewUint;
+ p->pfnDXClearUAViewFloat = vmsvga3dBackDXClearUAViewFloat;
+ p->pfnDXCopyStructureCount = vmsvga3dBackDXCopyStructureCount;
+ p->pfnDXSetUAViews = vmsvga3dBackDXSetUAViews;
+ p->pfnDXDrawIndexedInstancedIndirect = vmsvga3dBackDXDrawIndexedInstancedIndirect;
+ p->pfnDXDrawInstancedIndirect = vmsvga3dBackDXDrawInstancedIndirect;
+ p->pfnDXDispatch = vmsvga3dBackDXDispatch;
+ p->pfnDXDispatchIndirect = vmsvga3dBackDXDispatchIndirect;
+ p->pfnWriteZeroSurface = vmsvga3dBackWriteZeroSurface;
+ p->pfnHintZeroSurface = vmsvga3dBackHintZeroSurface;
+ p->pfnDXTransferToBuffer = vmsvga3dBackDXTransferToBuffer;
+ p->pfnLogicOpsBitBlt = vmsvga3dBackLogicOpsBitBlt;
+ p->pfnLogicOpsTransBlt = vmsvga3dBackLogicOpsTransBlt;
+ p->pfnLogicOpsStretchBlt = vmsvga3dBackLogicOpsStretchBlt;
+ p->pfnLogicOpsColorFill = vmsvga3dBackLogicOpsColorFill;
+ p->pfnLogicOpsAlphaBlend = vmsvga3dBackLogicOpsAlphaBlend;
+ p->pfnLogicOpsClearTypeBlend = vmsvga3dBackLogicOpsClearTypeBlend;
+ p->pfnDXSetCSUAViews = vmsvga3dBackDXSetCSUAViews;
+ p->pfnDXSetMinLOD = vmsvga3dBackDXSetMinLOD;
+ p->pfnDXSetShaderIface = vmsvga3dBackDXSetShaderIface;
+ p->pfnSurfaceStretchBltNonMSToMS = vmsvga3dBackSurfaceStretchBltNonMSToMS;
+ p->pfnDXBindShaderIface = vmsvga3dBackDXBindShaderIface;
+ p->pfnVBDXClearRenderTargetViewRegion = vmsvga3dBackVBDXClearRenderTargetViewRegion;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_MAP) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSMAP))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCSMAP *p = (VMSVGA3DBACKENDFUNCSMAP *)pvInterfaceFuncs;
+ p->pfnSurfaceMap = vmsvga3dBackSurfaceMap;
+ p->pfnSurfaceUnmap = vmsvga3dBackSurfaceUnmap;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_GBO) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSGBO))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCSGBO *p = (VMSVGA3DBACKENDFUNCSGBO *)pvInterfaceFuncs;
+ p->pfnScreenTargetBind = vmsvga3dScreenTargetBind;
+ p->pfnScreenTargetUpdate = vmsvga3dScreenTargetUpdate;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_3D) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCS3D))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCS3D *p = (VMSVGA3DBACKENDFUNCS3D *)pvInterfaceFuncs;
+ p->pfnInit = vmsvga3dBackInit;
+ p->pfnPowerOn = vmsvga3dBackPowerOn;
+ p->pfnTerminate = vmsvga3dBackTerminate;
+ p->pfnReset = vmsvga3dBackReset;
+ p->pfnQueryCaps = vmsvga3dBackQueryCaps;
+ p->pfnChangeMode = vmsvga3dBackChangeMode;
+ p->pfnCreateTexture = vmsvga3dBackCreateTexture;
+ p->pfnSurfaceDestroy = vmsvga3dBackSurfaceDestroy;
+ p->pfnSurfaceInvalidateImage = vmsvga3dBackSurfaceInvalidateImage;
+ p->pfnSurfaceCopy = vmsvga3dBackSurfaceCopy;
+ p->pfnSurfaceDMACopyBox = vmsvga3dBackSurfaceDMACopyBox;
+ p->pfnSurfaceStretchBlt = vmsvga3dBackSurfaceStretchBlt;
+ p->pfnUpdateHostScreenViewport = vmsvga3dBackUpdateHostScreenViewport;
+ p->pfnDefineScreen = vmsvga3dBackDefineScreen;
+ p->pfnDestroyScreen = vmsvga3dBackDestroyScreen;
+ p->pfnSurfaceBlitToScreen = vmsvga3dBackSurfaceBlitToScreen;
+ p->pfnSurfaceUpdateHeapBuffers = vmsvga3dBackSurfaceUpdateHeapBuffers;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_VGPU9) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSVGPU9))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCSVGPU9 *p = (VMSVGA3DBACKENDFUNCSVGPU9 *)pvInterfaceFuncs;
+ p->pfnContextDefine = vmsvga3dBackContextDefine;
+ p->pfnContextDestroy = vmsvga3dBackContextDestroy;
+ p->pfnSetTransform = vmsvga3dBackSetTransform;
+ p->pfnSetZRange = vmsvga3dBackSetZRange;
+ p->pfnSetRenderState = vmsvga3dBackSetRenderState;
+ p->pfnSetRenderTarget = vmsvga3dBackSetRenderTarget;
+ p->pfnSetTextureState = vmsvga3dBackSetTextureState;
+ p->pfnSetMaterial = vmsvga3dBackSetMaterial;
+ p->pfnSetLightData = vmsvga3dBackSetLightData;
+ p->pfnSetLightEnabled = vmsvga3dBackSetLightEnabled;
+ p->pfnSetViewPort = vmsvga3dBackSetViewPort;
+ p->pfnSetClipPlane = vmsvga3dBackSetClipPlane;
+ p->pfnCommandClear = vmsvga3dBackCommandClear;
+ p->pfnDrawPrimitives = vmsvga3dBackDrawPrimitives;
+ p->pfnSetScissorRect = vmsvga3dBackSetScissorRect;
+ p->pfnGenerateMipmaps = vmsvga3dBackGenerateMipmaps;
+ p->pfnShaderDefine = vmsvga3dBackShaderDefine;
+ p->pfnShaderDestroy = vmsvga3dBackShaderDestroy;
+ p->pfnShaderSet = vmsvga3dBackShaderSet;
+ p->pfnShaderSetConst = vmsvga3dBackShaderSetConst;
+ p->pfnOcclusionQueryCreate = vmsvga3dBackOcclusionQueryCreate;
+ p->pfnOcclusionQueryDelete = vmsvga3dBackOcclusionQueryDelete;
+ p->pfnOcclusionQueryBegin = vmsvga3dBackOcclusionQueryBegin;
+ p->pfnOcclusionQueryEnd = vmsvga3dBackOcclusionQueryEnd;
+ p->pfnOcclusionQueryGetData = vmsvga3dBackOcclusionQueryGetData;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else
+ rc = VERR_NOT_IMPLEMENTED;
+ return rc;
+}
+
+
+extern VMSVGA3DBACKENDDESC const g_BackendDX =
+{
+ "DX",
+ vmsvga3dBackQueryInterface
+};
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-savedstate.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-savedstate.cpp
new file mode 100644
index 00000000..5aa7d3b9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-savedstate.cpp
@@ -0,0 +1,454 @@
+/* $Id: DevVGA-SVGA3d-dx-savedstate.cpp $ */
+/** @file
+ * DevSVGA3d - VMWare SVGA device, 3D parts - DX backend saved state.
+ */
+
+/*
+ * Copyright (C) 2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/AssertGuest.h>
+#include <iprt/errcore.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pdmdev.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "DevVGA-SVGA3d-internal.h"
+#include "DevVGA-SVGA-internal.h"
+
+/*
+ * Load
+ */
+
+static int vmsvga3dDXLoadSurface(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ int rc;
+
+ uint32_t sid;
+ rc = pHlp->pfnSSMGetU32(pSSM, &sid);
+ AssertRCReturn(rc, rc);
+
+ if (sid == SVGA3D_INVALID_ID)
+ return VINF_SUCCESS;
+
+ /* Define the surface. */
+ SVGAOTableSurfaceEntry entrySurface;
+ rc = vmsvgaR3OTableReadSurface(pThisCC->svga.pSvgaR3State, sid, &entrySurface);
+ AssertRCReturn(rc, rc);
+
+ /** @todo fAllocMipLevels=false and alloc miplevels if there is data to be loaded. */
+ rc = vmsvga3dSurfaceDefine(pThisCC, sid, entrySurface.surface1Flags, entrySurface.format,
+ entrySurface.multisampleCount, entrySurface.autogenFilter,
+ entrySurface.numMipLevels, &entrySurface.size,
+ entrySurface.arraySize,
+ /* fAllocMipLevels = */ true);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pSurface = p3dState->papSurfaces[sid];
+ AssertReturn(pSurface->id == sid, VERR_INTERNAL_ERROR);
+
+ /* Load the surface fields which are not part of SVGAOTableSurfaceEntry. */
+ pHlp->pfnSSMGetU32(pSSM, &pSurface->idAssociatedContext);
+
+ /* Load miplevels data to the surface buffers. */
+ for (uint32_t j = 0; j < pSurface->cLevels * pSurface->surfaceDesc.numArrayElements; j++)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[j];
+
+ /* vmsvga3dSurfaceDefine already allocated the surface data buffer. */
+ Assert(pMipmapLevel->cbSurface);
+ AssertReturn(pMipmapLevel->pSurfaceData, VERR_INTERNAL_ERROR);
+
+ /* Fetch the data present boolean first. */
+ bool fDataPresent;
+ rc = pHlp->pfnSSMGetBool(pSSM, &fDataPresent);
+ AssertRCReturn(rc, rc);
+
+ if (fDataPresent)
+ {
+ rc = pHlp->pfnSSMGetMem(pSSM, pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+
+ pMipmapLevel->fDirty = true;
+ pSurface->fDirty = true;
+ }
+ else
+ pMipmapLevel->fDirty = false;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static int vmsvga3dDXLoadContext(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ uint32_t u32;
+ int rc;
+
+ uint32_t cid;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cid);
+ AssertRCReturn(rc, rc);
+
+ if (cid == SVGA3D_INVALID_ID)
+ return VINF_SUCCESS;
+
+ /* Define the context. */
+ rc = vmsvga3dDXDefineContext(pThisCC, cid);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DDXCONTEXT pDXContext = p3dState->papDXContexts[cid];
+ AssertReturn(pDXContext->cid == cid, VERR_INTERNAL_ERROR);
+
+ /* Load the context. */
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+ AssertReturn(u32 == sizeof(SVGADXContextMobFormat), VERR_INVALID_STATE);
+
+ pHlp->pfnSSMGetMem(pSSM, &pDXContext->svgaDXContext, sizeof(SVGADXContextMobFormat));
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertLogRelRCReturn(rc, rc);
+ AssertReturn(u32 == RT_ELEMENTS(pDXContext->aCOTMobs), VERR_INVALID_STATE);
+
+ for (unsigned i = 0; i < RT_ELEMENTS(pDXContext->aCOTMobs); ++i)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertLogRelRCReturn(rc, rc);
+ pDXContext->aCOTMobs[i] = vmsvgaR3MobGet(pSvgaR3State, u32);
+ Assert(pDXContext->aCOTMobs[i] || u32 == SVGA_ID_INVALID);
+ }
+
+ struct
+ {
+ SVGACOTableType COTableType;
+ uint32_t cbEntry;
+ uint32_t *pcEntries;
+ void **ppaEntries;
+ } cot[] =
+ {
+ {SVGA_COTABLE_RTVIEW, sizeof(SVGACOTableDXRTViewEntry), &pDXContext->cot.cRTView, (void **)&pDXContext->cot.paRTView},
+ {SVGA_COTABLE_DSVIEW, sizeof(SVGACOTableDXDSViewEntry), &pDXContext->cot.cDSView, (void **)&pDXContext->cot.paDSView},
+ {SVGA_COTABLE_SRVIEW, sizeof(SVGACOTableDXSRViewEntry), &pDXContext->cot.cSRView, (void **)&pDXContext->cot.paSRView},
+ {SVGA_COTABLE_ELEMENTLAYOUT, sizeof(SVGACOTableDXElementLayoutEntry), &pDXContext->cot.cElementLayout, (void **)&pDXContext->cot.paElementLayout},
+ {SVGA_COTABLE_BLENDSTATE, sizeof(SVGACOTableDXBlendStateEntry), &pDXContext->cot.cBlendState, (void **)&pDXContext->cot.paBlendState},
+ {SVGA_COTABLE_DEPTHSTENCIL, sizeof(SVGACOTableDXDepthStencilEntry), &pDXContext->cot.cDepthStencil, (void **)&pDXContext->cot.paDepthStencil},
+ {SVGA_COTABLE_RASTERIZERSTATE, sizeof(SVGACOTableDXRasterizerStateEntry), &pDXContext->cot.cRasterizerState, (void **)&pDXContext->cot.paRasterizerState},
+ {SVGA_COTABLE_SAMPLER, sizeof(SVGACOTableDXSamplerEntry), &pDXContext->cot.cSampler, (void **)&pDXContext->cot.paSampler},
+ {SVGA_COTABLE_STREAMOUTPUT, sizeof(SVGACOTableDXStreamOutputEntry), &pDXContext->cot.cStreamOutput, (void **)&pDXContext->cot.paStreamOutput},
+ {SVGA_COTABLE_DXQUERY, sizeof(SVGACOTableDXQueryEntry), &pDXContext->cot.cQuery, (void **)&pDXContext->cot.paQuery},
+ {SVGA_COTABLE_DXSHADER, sizeof(SVGACOTableDXShaderEntry), &pDXContext->cot.cShader, (void **)&pDXContext->cot.paShader},
+ {SVGA_COTABLE_UAVIEW, sizeof(SVGACOTableDXUAViewEntry), &pDXContext->cot.cUAView, (void **)&pDXContext->cot.paUAView},
+ };
+
+ AssertCompile(RT_ELEMENTS(cot) == RT_ELEMENTS(pDXContext->aCOTMobs));
+ for (unsigned i = 0; i < RT_ELEMENTS(cot); ++i)
+ {
+ uint32_t cEntries;
+ pHlp->pfnSSMGetU32(pSSM, &cEntries);
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+ AssertReturn(u32 == cot[i].cbEntry, VERR_INVALID_STATE);
+
+ *cot[i].pcEntries = cEntries;
+ *cot[i].ppaEntries = vmsvgaR3MobBackingStorePtr(pDXContext->aCOTMobs[cot[i].COTableType], 0);
+
+ if (cEntries)
+ {
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetCOTable(pThisCC, pDXContext, cot[i].COTableType, cEntries);
+ AssertLogRelRCReturn(rc, rc);
+ }
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXLoadState(pThisCC, pDXContext, pHlp, pSSM);
+ AssertRCReturn(rc, rc);
+
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dDXLoadExec(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+ RT_NOREF(pThis, uPass);
+
+ if (uVersion < VGA_SAVEDSTATE_VERSION_VMSVGA_DX)
+ AssertFailedReturn(VERR_INVALID_STATE);
+
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ int rc;
+
+ /*
+ * VMSVGA3DSTATE
+ */
+ pHlp->pfnSSMGetU32(pSSM, &p3dState->cSurfaces);
+ rc = pHlp->pfnSSMGetU32(pSSM, &p3dState->cDXContexts);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Surfaces
+ */
+ p3dState->papSurfaces = (PVMSVGA3DSURFACE *)RTMemAlloc(p3dState->cSurfaces * sizeof(PVMSVGA3DSURFACE));
+ AssertReturn(p3dState->papSurfaces, VERR_NO_MEMORY);
+ for (uint32_t i = 0; i < p3dState->cSurfaces; ++i)
+ {
+ p3dState->papSurfaces[i] = (PVMSVGA3DSURFACE)RTMemAllocZ(sizeof(VMSVGA3DSURFACE));
+ AssertPtrReturn(p3dState->papSurfaces[i], VERR_NO_MEMORY);
+ p3dState->papSurfaces[i]->id = SVGA3D_INVALID_ID;
+ }
+
+ for (uint32_t i = 0; i < p3dState->cSurfaces; ++i)
+ {
+ rc = vmsvga3dDXLoadSurface(pHlp, pThisCC, pSSM);
+ AssertRCReturn(rc, rc);
+ }
+
+ /*
+ * DX contexts
+ */
+ p3dState->papDXContexts = (PVMSVGA3DDXCONTEXT *)RTMemAlloc(p3dState->cDXContexts * sizeof(PVMSVGA3DDXCONTEXT));
+ AssertReturn(p3dState->papDXContexts, VERR_NO_MEMORY);
+ for (uint32_t i = 0; i < p3dState->cDXContexts; ++i)
+ {
+ p3dState->papDXContexts[i] = (PVMSVGA3DDXCONTEXT)RTMemAllocZ(sizeof(VMSVGA3DDXCONTEXT));
+ AssertPtrReturn(p3dState->papDXContexts[i], VERR_NO_MEMORY);
+ p3dState->papDXContexts[i]->cid = SVGA3D_INVALID_ID;
+ }
+
+ for (uint32_t i = 0; i < p3dState->cDXContexts; ++i)
+ {
+ rc = vmsvga3dDXLoadContext(pHlp, pThisCC, pSSM);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (pSvgaR3State->idDXContextCurrent != SVGA_ID_INVALID)
+ vmsvga3dDXSwitchContext(pThisCC, pSvgaR3State->idDXContextCurrent);
+
+ return VINF_SUCCESS;
+}
+
+/*
+ * Save
+ */
+
+static int vmsvga3dDXSaveSurface(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM, PVMSVGA3DSURFACE pSurface)
+{
+ RT_NOREF(pThisCC);
+ int rc;
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pSurface->id);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->id == SVGA3D_INVALID_ID)
+ return VINF_SUCCESS;
+
+ /* Save the surface fields which are not part of SVGAOTableSurfaceEntry. */
+ pHlp->pfnSSMPutU32(pSSM, pSurface->idAssociatedContext);
+
+ for (uint32_t iArray = 0; iArray < pSurface->surfaceDesc.numArrayElements; ++iArray)
+ {
+ for (uint32_t iMipmap = 0; iMipmap < pSurface->cLevels; ++iMipmap)
+ {
+ uint32_t idx = iMipmap + iArray * pSurface->cLevels;
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[idx];
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ if (pMipmapLevel->pSurfaceData)
+ {
+ /* Data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, true);
+ AssertRCReturn(rc, rc);
+
+ Assert(pMipmapLevel->cbSurface);
+ rc = pHlp->pfnSSMPutMem(pSSM, pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ /* No data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ else
+ {
+ SVGA3dSurfaceImageId image;
+ image.sid = pSurface->id;
+ image.face = iArray;
+ image.mipmap = iMipmap;
+
+ VMSGA3D_BOX_DIMENSIONS dims;
+ rc = vmsvga3dGetBoxDimensions(pThisCC, &image, NULL, &dims);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_MAPPED_SURFACE map;
+ rc = vmsvga3dSurfaceMap(pThisCC, &image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
+ if (RT_SUCCESS(rc))
+ {
+ /* Save mapped surface data. */
+ pHlp->pfnSSMPutBool(pSSM, true);
+ if (map.cbRow == map.cbRowPitch)
+ {
+ rc = pHlp->pfnSSMPutMem(pSSM, map.pvData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ uint8_t *pu8Map = (uint8_t *)map.pvData;
+ for (uint32_t z = 0; z < map.box.d; ++z)
+ {
+ uint8_t *pu8MapPlane = pu8Map;
+ for (uint32_t y = 0; y < dims.cyBlocks; ++y)
+ {
+ rc = pHlp->pfnSSMPutMem(pSSM, pu8MapPlane, dims.cbRow);
+ AssertRCReturn(rc, rc);
+
+ pu8MapPlane += map.cbRowPitch;
+ }
+ pu8Map += map.cbDepthPitch;
+ }
+ }
+
+ vmsvga3dSurfaceUnmap(pThisCC, &image, &map, false);
+ }
+ else
+ {
+ AssertFailed();
+
+ /* No data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static int vmsvga3dDXSaveContext(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ PVMSVGAR3STATE pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ int rc;
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pDXContext->cid);
+ AssertRCReturn(rc, rc);
+
+ if (pDXContext->cid == SVGA3D_INVALID_ID)
+ return VINF_SUCCESS;
+
+ /* Save the context. */
+ pHlp->pfnSSMPutU32(pSSM, sizeof(SVGADXContextMobFormat));
+ pHlp->pfnSSMPutMem(pSSM, &pDXContext->svgaDXContext, sizeof(SVGADXContextMobFormat));
+
+ rc = pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(pDXContext->aCOTMobs));
+ AssertLogRelRCReturn(rc, rc);
+ for (unsigned i = 0; i < RT_ELEMENTS(pDXContext->aCOTMobs); ++i)
+ {
+ uint32_t const mobId = vmsvgaR3MobId(pDXContext->aCOTMobs[i]);
+ rc = pHlp->pfnSSMPutU32(pSSM, mobId);
+ AssertLogRelRCReturn(rc, rc);
+ }
+
+ struct
+ {
+ uint32_t cEntries;
+ uint32_t cbEntry;
+ void *paEntries;
+ } cot[] =
+ {
+ {pDXContext->cot.cRTView, sizeof(SVGACOTableDXRTViewEntry), pDXContext->cot.paRTView},
+ {pDXContext->cot.cDSView, sizeof(SVGACOTableDXDSViewEntry), pDXContext->cot.paDSView},
+ {pDXContext->cot.cSRView, sizeof(SVGACOTableDXSRViewEntry), pDXContext->cot.paSRView},
+ {pDXContext->cot.cElementLayout, sizeof(SVGACOTableDXElementLayoutEntry), pDXContext->cot.paElementLayout},
+ {pDXContext->cot.cBlendState, sizeof(SVGACOTableDXBlendStateEntry), pDXContext->cot.paBlendState},
+ {pDXContext->cot.cDepthStencil, sizeof(SVGACOTableDXDepthStencilEntry), pDXContext->cot.paDepthStencil},
+ {pDXContext->cot.cRasterizerState, sizeof(SVGACOTableDXRasterizerStateEntry), pDXContext->cot.paRasterizerState},
+ {pDXContext->cot.cSampler, sizeof(SVGACOTableDXSamplerEntry), pDXContext->cot.paSampler},
+ {pDXContext->cot.cStreamOutput, sizeof(SVGACOTableDXStreamOutputEntry), pDXContext->cot.paStreamOutput},
+ {pDXContext->cot.cQuery, sizeof(SVGACOTableDXQueryEntry), pDXContext->cot.paQuery},
+ {pDXContext->cot.cShader, sizeof(SVGACOTableDXShaderEntry), pDXContext->cot.paShader},
+ {pDXContext->cot.cUAView, sizeof(SVGACOTableDXUAViewEntry), pDXContext->cot.paUAView},
+ };
+
+ AssertCompile(RT_ELEMENTS(cot) == RT_ELEMENTS(pDXContext->aCOTMobs));
+ for (unsigned i = 0; i < RT_ELEMENTS(cot); ++i)
+ {
+ pHlp->pfnSSMPutU32(pSSM, cot[i].cEntries);
+ rc = pHlp->pfnSSMPutU32(pSSM, cot[i].cbEntry);
+ AssertLogRelRCReturn(rc, rc);
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSaveState(pThisCC, pDXContext, pHlp, pSSM);
+ AssertRCReturn(rc, rc);
+
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dDXSaveExec(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ int rc;
+
+ /*
+ * VMSVGA3DSTATE
+ */
+ pHlp->pfnSSMPutU32(pSSM, p3dState->cSurfaces);
+ rc = pHlp->pfnSSMPutU32(pSSM, p3dState->cDXContexts);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Surfaces
+ */
+ for (uint32_t sid = 0; sid < p3dState->cSurfaces; ++sid)
+ {
+ rc = vmsvga3dDXSaveSurface(pHlp, pThisCC, pSSM, p3dState->papSurfaces[sid]);
+ AssertRCReturn(rc, rc);
+ }
+
+ /*
+ * DX contexts
+ */
+ for (uint32_t cid = 0; cid < p3dState->cDXContexts; ++cid)
+ {
+ rc = vmsvga3dDXSaveContext(pHlp, pThisCC, pSSM, p3dState->papDXContexts[cid]);
+ AssertRCReturn(rc, rc);
+ }
+
+ return VINF_SUCCESS;
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp
new file mode 100644
index 00000000..ec66ad3a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp
@@ -0,0 +1,2862 @@
+/* $Id: DevVGA-SVGA3d-dx-shader.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device - VGPU10+ (DX) shader utilities.
+ */
+
+/*
+ * Copyright (C) 2020-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/AssertGuest.h>
+#include <VBox/log.h>
+
+#include <iprt/asm.h>
+#include <iprt/md5.h>
+#include <iprt/mem.h>
+#include <iprt/sort.h>
+#include <iprt/string.h>
+
+#include "DevVGA-SVGA3d-dx-shader.h"
+
+#ifdef RT_OS_WINDOWS
+#include <d3d11TokenizedProgramFormat.hpp>
+#else
+#define D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM 2
+#define D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE 3
+#endif
+
+/*
+ *
+ * DXBC shader binary format definitions.
+ *
+ */
+
+/* DXBC container header. */
+typedef struct DXBCHeader
+{
+ uint32_t u32DXBC; /* 0x43425844 = 'D', 'X', 'B', 'C' */
+ uint8_t au8Hash[16]; /* Modified MD5 hash. See dxbcHash. */
+ uint32_t u32Version; /* 1 */
+ uint32_t cbTotal; /* Total size in bytes. Including the header. */
+ uint32_t cBlob; /* Number of entries in aBlobOffset array. */
+ uint32_t aBlobOffset[1]; /* Offsets of blobs from the start of DXBC header. */
+} DXBCHeader;
+
+#define DXBC_MAGIC RT_MAKE_U32_FROM_U8('D', 'X', 'B', 'C')
+
+/* DXBC blob header. */
+typedef struct DXBCBlobHeader
+{
+ uint32_t u32BlobType; /* FourCC code. DXBC_BLOB_TYPE_* */
+ uint32_t cbBlob; /* Size of the blob excluding the blob header. 4 bytes aligned. */
+ /* Followed by the blob's data. */
+} DXBCBlobHeader;
+
+/* DXBC blob types. */
+#define DXBC_BLOB_TYPE_ISGN RT_MAKE_U32_FROM_U8('I', 'S', 'G', 'N')
+#define DXBC_BLOB_TYPE_OSGN RT_MAKE_U32_FROM_U8('O', 'S', 'G', 'N')
+#define DXBC_BLOB_TYPE_PCSG RT_MAKE_U32_FROM_U8('P', 'C', 'S', 'G')
+#define DXBC_BLOB_TYPE_SHDR RT_MAKE_U32_FROM_U8('S', 'H', 'D', 'R')
+/** @todo More... */
+
+/* 'SHDR' blob data format. */
+typedef struct DXBCBlobSHDR
+{
+ VGPU10ProgramToken programToken;
+ uint32_t cToken; /* Number of 32 bit tokens including programToken and cToken. */
+ uint32_t au32Token[1]; /* cToken - 2 number of tokens. */
+} DXBCBlobSHDR;
+
+/* Element of an input or output signature. */
+typedef struct DXBCBlobIOSGNElement
+{
+ uint32_t offElementName; /* Offset of the semantic's name relative to the start of the blob data. */
+ uint32_t idxSemantic; /* Semantic index. */
+ uint32_t enmSystemValue; /* SVGA3dDXSignatureSemanticName */
+ uint32_t enmComponentType; /* 1 - unsigned, 2 - integer, 3 - float. */
+ uint32_t idxRegister; /* Shader register index. Elements must be sorted by register index. */
+ union
+ {
+ struct
+ {
+ uint32_t mask : 8; /* Component mask. Lower 4 bits represent X, Y, Z, W channels. */
+ uint32_t mask2 : 8; /* Which components are used in the shader. */
+ uint32_t pad : 16;
+ } m;
+ uint32_t mask;
+ } u;
+} DXBCBlobIOSGNElement;
+
+/* 'ISGN' and 'OSGN' blob data format. */
+typedef struct DXBCBlobIOSGN
+{
+ uint32_t cElement; /* Number of signature elements. */
+ uint32_t offElement; /* Offset of the first element from the start of the blob. Equals to 8. */
+ DXBCBlobIOSGNElement aElement[1]; /* Signature elements. Size is cElement. */
+ /* Followed by ASCIIZ semantic names. */
+} DXBCBlobIOSGN;
+
+
+/*
+ * VGPU10 shader parser definitions.
+ */
+
+/* Parsed info about an operand index. */
+typedef struct VGPUOperandIndex
+{
+ uint32_t indexRepresentation; /* VGPU10_OPERAND_INDEX_REPRESENTATION */
+ uint64_t iOperandImmediate; /* Needs up to a qword. */
+ struct VGPUOperand *pOperandRelative; /* For VGPU10_OPERAND_INDEX_*RELATIVE */
+} VGPUOperandIndex;
+
+/* Parsed info about an operand. */
+typedef struct VGPUOperand
+{
+ uint32_t numComponents : 2; /* VGPU10_OPERAND_NUM_COMPONENTS */
+ uint32_t selectionMode : 2; /* VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE */
+ uint32_t mask : 4; /* 4-bits X, Y, Z, W mask for VGPU10_OPERAND_4_COMPONENT_MASK_MODE. */
+ uint32_t operandType : 8; /* VGPU10_OPERAND_TYPE */
+ uint32_t indexDimension : 2; /* VGPU10_OPERAND_INDEX_DIMENSION */
+ VGPUOperandIndex aOperandIndex[VGPU10_OPERAND_INDEX_3D]; /* Up to 3. */
+ uint32_t aImm[4]; /* Immediate values for VGPU10_OPERAND_TYPE_IMMEDIATE* */
+ uint32_t cOperandToken; /* Number of tokens in this operand. */
+ uint32_t const *paOperandToken; /* Pointer to operand tokens in the input buffer. */
+} VGPUOperand;
+
+/* Parsed info about an opcode. */
+typedef struct VGPUOpcode
+{
+ uint32_t cOpcodeToken; /* Number of tokens for this operation. */
+ uint32_t opcodeType; /* VGPU10_OPCODE_* */
+ uint32_t opcodeSubtype; /* For example VGPU10_VMWARE_OPCODE_* */
+ uint32_t semanticName; /* SVGA3dDXSignatureSemanticName for system value declarations. */
+ uint32_t cOperand; /* Number of operands for this instruction. */
+ uint32_t aIdxOperand[8]; /* Indices of the instruction operands in the aValOperand array. */
+ /* 8 should be enough for everyone. */
+ VGPUOperand aValOperand[16]; /* Operands including VGPU10_OPERAND_INDEX_*RELATIVE if they are used: */
+ /* Operand1, VGPU10_OPERAND_INDEX_*RELATIVE for Operand1, ... */
+ /* ... */
+ /* OperandN, VGPU10_OPERAND_INDEX_*RELATIVE for OperandN, ... */
+ /* 16 probably should be enough for everyone. */
+ uint32_t const *paOpcodeToken; /* Pointer to opcode tokens in the input buffer. */
+} VGPUOpcode;
+
+typedef struct VGPUOpcodeInfo
+{
+ uint32_t cOperand; /* Number of operands for this opcode. */
+} VGPUOpcodeInfo;
+
+static VGPUOpcodeInfo const g_aOpcodeInfo[] =
+{
+ { 3 }, /* VGPU10_OPCODE_ADD */
+ { 3 }, /* VGPU10_OPCODE_AND */
+ { 0 }, /* VGPU10_OPCODE_BREAK */
+ { 1 }, /* VGPU10_OPCODE_BREAKC */
+ { 1 }, /* VGPU10_OPCODE_CALL */
+ { 2 }, /* VGPU10_OPCODE_CALLC */
+ { 1 }, /* VGPU10_OPCODE_CASE */
+ { 0 }, /* VGPU10_OPCODE_CONTINUE */
+ { 1 }, /* VGPU10_OPCODE_CONTINUEC */
+ { 0 }, /* VGPU10_OPCODE_CUT */
+ { 0 }, /* VGPU10_OPCODE_DEFAULT */
+ { 2 }, /* VGPU10_OPCODE_DERIV_RTX */
+ { 2 }, /* VGPU10_OPCODE_DERIV_RTY */
+ { 1 }, /* VGPU10_OPCODE_DISCARD */
+ { 3 }, /* VGPU10_OPCODE_DIV */
+ { 3 }, /* VGPU10_OPCODE_DP2 */
+ { 3 }, /* VGPU10_OPCODE_DP3 */
+ { 3 }, /* VGPU10_OPCODE_DP4 */
+ { 0 }, /* VGPU10_OPCODE_ELSE */
+ { 0 }, /* VGPU10_OPCODE_EMIT */
+ { 0 }, /* VGPU10_OPCODE_EMITTHENCUT */
+ { 0 }, /* VGPU10_OPCODE_ENDIF */
+ { 0 }, /* VGPU10_OPCODE_ENDLOOP */
+ { 0 }, /* VGPU10_OPCODE_ENDSWITCH */
+ { 3 }, /* VGPU10_OPCODE_EQ */
+ { 2 }, /* VGPU10_OPCODE_EXP */
+ { 2 }, /* VGPU10_OPCODE_FRC */
+ { 2 }, /* VGPU10_OPCODE_FTOI */
+ { 2 }, /* VGPU10_OPCODE_FTOU */
+ { 3 }, /* VGPU10_OPCODE_GE */
+ { 3 }, /* VGPU10_OPCODE_IADD */
+ { 1 }, /* VGPU10_OPCODE_IF */
+ { 3 }, /* VGPU10_OPCODE_IEQ */
+ { 3 }, /* VGPU10_OPCODE_IGE */
+ { 3 }, /* VGPU10_OPCODE_ILT */
+ { 4 }, /* VGPU10_OPCODE_IMAD */
+ { 3 }, /* VGPU10_OPCODE_IMAX */
+ { 3 }, /* VGPU10_OPCODE_IMIN */
+ { 4 }, /* VGPU10_OPCODE_IMUL */
+ { 3 }, /* VGPU10_OPCODE_INE */
+ { 2 }, /* VGPU10_OPCODE_INEG */
+ { 3 }, /* VGPU10_OPCODE_ISHL */
+ { 3 }, /* VGPU10_OPCODE_ISHR */
+ { 2 }, /* VGPU10_OPCODE_ITOF */
+ { 1 }, /* VGPU10_OPCODE_LABEL */
+ { 3 }, /* VGPU10_OPCODE_LD */
+ { 4 }, /* VGPU10_OPCODE_LD_MS */
+ { 2 }, /* VGPU10_OPCODE_LOG */
+ { 0 }, /* VGPU10_OPCODE_LOOP */
+ { 3 }, /* VGPU10_OPCODE_LT */
+ { 4 }, /* VGPU10_OPCODE_MAD */
+ { 3 }, /* VGPU10_OPCODE_MIN */
+ { 3 }, /* VGPU10_OPCODE_MAX */
+ { UINT32_MAX }, /* VGPU10_OPCODE_CUSTOMDATA: special opcode */
+ { 2 }, /* VGPU10_OPCODE_MOV */
+ { 4 }, /* VGPU10_OPCODE_MOVC */
+ { 3 }, /* VGPU10_OPCODE_MUL */
+ { 3 }, /* VGPU10_OPCODE_NE */
+ { 0 }, /* VGPU10_OPCODE_NOP */
+ { 2 }, /* VGPU10_OPCODE_NOT */
+ { 3 }, /* VGPU10_OPCODE_OR */
+ { 3 }, /* VGPU10_OPCODE_RESINFO */
+ { 0 }, /* VGPU10_OPCODE_RET */
+ { 1 }, /* VGPU10_OPCODE_RETC */
+ { 2 }, /* VGPU10_OPCODE_ROUND_NE */
+ { 2 }, /* VGPU10_OPCODE_ROUND_NI */
+ { 2 }, /* VGPU10_OPCODE_ROUND_PI */
+ { 2 }, /* VGPU10_OPCODE_ROUND_Z */
+ { 2 }, /* VGPU10_OPCODE_RSQ */
+ { 4 }, /* VGPU10_OPCODE_SAMPLE */
+ { 5 }, /* VGPU10_OPCODE_SAMPLE_C */
+ { 5 }, /* VGPU10_OPCODE_SAMPLE_C_LZ */
+ { 5 }, /* VGPU10_OPCODE_SAMPLE_L */
+ { 6 }, /* VGPU10_OPCODE_SAMPLE_D */
+ { 5 }, /* VGPU10_OPCODE_SAMPLE_B */
+ { 2 }, /* VGPU10_OPCODE_SQRT */
+ { 1 }, /* VGPU10_OPCODE_SWITCH */
+ { 3 }, /* VGPU10_OPCODE_SINCOS */
+ { 4 }, /* VGPU10_OPCODE_UDIV */
+ { 3 }, /* VGPU10_OPCODE_ULT */
+ { 3 }, /* VGPU10_OPCODE_UGE */
+ { 4 }, /* VGPU10_OPCODE_UMUL */
+ { 4 }, /* VGPU10_OPCODE_UMAD */
+ { 3 }, /* VGPU10_OPCODE_UMAX */
+ { 3 }, /* VGPU10_OPCODE_UMIN */
+ { 3 }, /* VGPU10_OPCODE_USHR */
+ { 2 }, /* VGPU10_OPCODE_UTOF */
+ { 3 }, /* VGPU10_OPCODE_XOR */
+ { 1 }, /* VGPU10_OPCODE_DCL_RESOURCE */
+ { 1 }, /* VGPU10_OPCODE_DCL_CONSTANT_BUFFER */
+ { 1 }, /* VGPU10_OPCODE_DCL_SAMPLER */
+ { 1 }, /* VGPU10_OPCODE_DCL_INDEX_RANGE */
+ { 0 }, /* VGPU10_OPCODE_DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY */
+ { 0 }, /* VGPU10_OPCODE_DCL_GS_INPUT_PRIMITIVE */
+ { 0 }, /* VGPU10_OPCODE_DCL_MAX_OUTPUT_VERTEX_COUNT */
+ { 1 }, /* VGPU10_OPCODE_DCL_INPUT */
+ { 1 }, /* VGPU10_OPCODE_DCL_INPUT_SGV */
+ { 1 }, /* VGPU10_OPCODE_DCL_INPUT_SIV */
+ { 1 }, /* VGPU10_OPCODE_DCL_INPUT_PS */
+ { 1 }, /* VGPU10_OPCODE_DCL_INPUT_PS_SGV */
+ { 1 }, /* VGPU10_OPCODE_DCL_INPUT_PS_SIV */
+ { 1 }, /* VGPU10_OPCODE_DCL_OUTPUT */
+ { 1 }, /* VGPU10_OPCODE_DCL_OUTPUT_SGV */
+ { 1 }, /* VGPU10_OPCODE_DCL_OUTPUT_SIV */
+ { 0 }, /* VGPU10_OPCODE_DCL_TEMPS */
+ { 0 }, /* VGPU10_OPCODE_DCL_INDEXABLE_TEMP */
+ { 0 }, /* VGPU10_OPCODE_DCL_GLOBAL_FLAGS */
+ { UINT32_MAX }, /* VGPU10_OPCODE_VMWARE: special opcode */
+ { 4 }, /* VGPU10_OPCODE_LOD */
+ { 4 }, /* VGPU10_OPCODE_GATHER4 */
+ { 3 }, /* VGPU10_OPCODE_SAMPLE_POS */
+ { 2 }, /* VGPU10_OPCODE_SAMPLE_INFO */
+ { UINT32_MAX }, /* VGPU10_OPCODE_RESERVED1: special opcode */
+ { 0 }, /* VGPU10_OPCODE_HS_DECLS */
+ { 0 }, /* VGPU10_OPCODE_HS_CONTROL_POINT_PHASE */
+ { 0 }, /* VGPU10_OPCODE_HS_FORK_PHASE */
+ { 0 }, /* VGPU10_OPCODE_HS_JOIN_PHASE */
+ { 1 }, /* VGPU10_OPCODE_EMIT_STREAM */
+ { 1 }, /* VGPU10_OPCODE_CUT_STREAM */
+ { 1 }, /* VGPU10_OPCODE_EMITTHENCUT_STREAM */
+ { 1 }, /* VGPU10_OPCODE_INTERFACE_CALL */
+ { 2 }, /* VGPU10_OPCODE_BUFINFO */
+ { 2 }, /* VGPU10_OPCODE_DERIV_RTX_COARSE */
+ { 2 }, /* VGPU10_OPCODE_DERIV_RTX_FINE */
+ { 2 }, /* VGPU10_OPCODE_DERIV_RTY_COARSE */
+ { 2 }, /* VGPU10_OPCODE_DERIV_RTY_FINE */
+ { 5 }, /* VGPU10_OPCODE_GATHER4_C */
+ { 5 }, /* VGPU10_OPCODE_GATHER4_PO */
+ { 6 }, /* VGPU10_OPCODE_GATHER4_PO_C */
+ { 2 }, /* VGPU10_OPCODE_RCP */
+ { 2 }, /* VGPU10_OPCODE_F32TOF16 */
+ { 2 }, /* VGPU10_OPCODE_F16TOF32 */
+ { 4 }, /* VGPU10_OPCODE_UADDC */
+ { 4 }, /* VGPU10_OPCODE_USUBB */
+ { 2 }, /* VGPU10_OPCODE_COUNTBITS */
+ { 2 }, /* VGPU10_OPCODE_FIRSTBIT_HI */
+ { 2 }, /* VGPU10_OPCODE_FIRSTBIT_LO */
+ { 2 }, /* VGPU10_OPCODE_FIRSTBIT_SHI */
+ { 4 }, /* VGPU10_OPCODE_UBFE */
+ { 4 }, /* VGPU10_OPCODE_IBFE */
+ { 5 }, /* VGPU10_OPCODE_BFI */
+ { 2 }, /* VGPU10_OPCODE_BFREV */
+ { 5 }, /* VGPU10_OPCODE_SWAPC */
+ { 1 }, /* VGPU10_OPCODE_DCL_STREAM */
+ { 0 }, /* VGPU10_OPCODE_DCL_FUNCTION_BODY */
+ { 0 }, /* VGPU10_OPCODE_DCL_FUNCTION_TABLE */
+ { 0 }, /* VGPU10_OPCODE_DCL_INTERFACE */
+ { 0 }, /* VGPU10_OPCODE_DCL_INPUT_CONTROL_POINT_COUNT */
+ { 0 }, /* VGPU10_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT */
+ { 0 }, /* VGPU10_OPCODE_DCL_TESS_DOMAIN */
+ { 0 }, /* VGPU10_OPCODE_DCL_TESS_PARTITIONING */
+ { 0 }, /* VGPU10_OPCODE_DCL_TESS_OUTPUT_PRIMITIVE */
+ { 0 }, /* VGPU10_OPCODE_DCL_HS_MAX_TESSFACTOR */
+ { 0 }, /* VGPU10_OPCODE_DCL_HS_FORK_PHASE_INSTANCE_COUNT */
+ { 0 }, /* VGPU10_OPCODE_DCL_HS_JOIN_PHASE_INSTANCE_COUNT */
+ { 0 }, /* VGPU10_OPCODE_DCL_THREAD_GROUP */
+ { 1 }, /* VGPU10_OPCODE_DCL_UAV_TYPED */
+ { 1 }, /* VGPU10_OPCODE_DCL_UAV_RAW */
+ { 1 }, /* VGPU10_OPCODE_DCL_UAV_STRUCTURED */
+ { 1 }, /* VGPU10_OPCODE_DCL_TGSM_RAW */
+ { 1 }, /* VGPU10_OPCODE_DCL_TGSM_STRUCTURED */
+ { 1 }, /* VGPU10_OPCODE_DCL_RESOURCE_RAW */
+ { 1 }, /* VGPU10_OPCODE_DCL_RESOURCE_STRUCTURED */
+ { 3 }, /* VGPU10_OPCODE_LD_UAV_TYPED */
+ { 3 }, /* VGPU10_OPCODE_STORE_UAV_TYPED */
+ { 3 }, /* VGPU10_OPCODE_LD_RAW */
+ { 3 }, /* VGPU10_OPCODE_STORE_RAW */
+ { 4 }, /* VGPU10_OPCODE_LD_STRUCTURED */
+ { 4 }, /* VGPU10_OPCODE_STORE_STRUCTURED */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_AND */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_OR */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_XOR */
+ { 4 }, /* VGPU10_OPCODE_ATOMIC_CMP_STORE */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_IADD */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_IMAX */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_IMIN */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_UMAX */
+ { 3 }, /* VGPU10_OPCODE_ATOMIC_UMIN */
+ { 2 }, /* VGPU10_OPCODE_IMM_ATOMIC_ALLOC */
+ { 2 }, /* VGPU10_OPCODE_IMM_ATOMIC_CONSUME */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_IADD */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_AND */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_OR */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_XOR */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_EXCH */
+ { 5 }, /* VGPU10_OPCODE_IMM_ATOMIC_CMP_EXCH */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_IMAX */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_IMIN */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_UMAX */
+ { 4 }, /* VGPU10_OPCODE_IMM_ATOMIC_UMIN */
+ { 0 }, /* VGPU10_OPCODE_SYNC */
+ { 3 }, /* VGPU10_OPCODE_DADD */
+ { 3 }, /* VGPU10_OPCODE_DMAX */
+ { 3 }, /* VGPU10_OPCODE_DMIN */
+ { 3 }, /* VGPU10_OPCODE_DMUL */
+ { 3 }, /* VGPU10_OPCODE_DEQ */
+ { 3 }, /* VGPU10_OPCODE_DGE */
+ { 3 }, /* VGPU10_OPCODE_DLT */
+ { 3 }, /* VGPU10_OPCODE_DNE */
+ { 2 }, /* VGPU10_OPCODE_DMOV */
+ { 4 }, /* VGPU10_OPCODE_DMOVC */
+ { 2 }, /* VGPU10_OPCODE_DTOF */
+ { 2 }, /* VGPU10_OPCODE_FTOD */
+ { 3 }, /* VGPU10_OPCODE_EVAL_SNAPPED */
+ { 3 }, /* VGPU10_OPCODE_EVAL_SAMPLE_INDEX */
+ { 2 }, /* VGPU10_OPCODE_EVAL_CENTROID */
+ { 0 }, /* VGPU10_OPCODE_DCL_GS_INSTANCE_COUNT */
+ { 0 }, /* VGPU10_OPCODE_ABORT */
+ { 0 }, /* VGPU10_OPCODE_DEBUG_BREAK */
+ { 0 }, /* VGPU10_OPCODE_RESERVED0 */
+ { 3 }, /* VGPU10_OPCODE_DDIV */
+ { 4 }, /* VGPU10_OPCODE_DFMA */
+ { 2 }, /* VGPU10_OPCODE_DRCP */
+ { 4 }, /* VGPU10_OPCODE_MSAD */
+ { 2 }, /* VGPU10_OPCODE_DTOI */
+ { 2 }, /* VGPU10_OPCODE_DTOU */
+ { 2 }, /* VGPU10_OPCODE_ITOD */
+ { 2 }, /* VGPU10_OPCODE_UTOD */
+};
+AssertCompile(RT_ELEMENTS(g_aOpcodeInfo) == VGPU10_NUM_OPCODES);
+
+#ifdef LOG_ENABLED
+/*
+ *
+ * Helpers to translate a VGPU10 shader constant to a string.
+ *
+ */
+
+#define SVGA_CASE_ID2STR(idx) case idx: return #idx
+
+static const char *dxbcOpcodeToString(uint32_t opcodeType)
+{
+ VGPU10_OPCODE_TYPE enm = (VGPU10_OPCODE_TYPE)opcodeType;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ADD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_AND);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_BREAK);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_BREAKC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CALL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CALLC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CASE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CONTINUE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CONTINUEC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CUT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DEFAULT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DERIV_RTX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DERIV_RTY);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DISCARD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DIV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DP2);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DP3);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DP4);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ELSE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EMIT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EMITTHENCUT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ENDIF);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ENDLOOP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ENDSWITCH);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EQ);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EXP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FRC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FTOI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FTOU);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_GE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IADD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IF);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IEQ);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IGE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ILT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMAD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMUL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_INE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_INEG);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ISHL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ISHR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ITOF);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LABEL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LD_MS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LOG);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LOOP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MAD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CUSTOMDATA);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MOV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MOVC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MUL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_NE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_NOP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_NOT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_OR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RESINFO);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RET);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RETC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ROUND_NE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ROUND_NI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ROUND_PI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ROUND_Z);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RSQ);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_C);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_C_LZ);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_L);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_D);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_B);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SQRT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SWITCH);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SINCOS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UDIV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ULT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UGE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UMUL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UMAD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_USHR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UTOF);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_XOR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_RESOURCE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_CONSTANT_BUFFER);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_SAMPLER);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INDEX_RANGE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_GS_INPUT_PRIMITIVE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_MAX_OUTPUT_VERTEX_COUNT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT_SGV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT_SIV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT_PS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT_PS_SGV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT_PS_SIV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_OUTPUT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_OUTPUT_SGV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_OUTPUT_SIV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_TEMPS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INDEXABLE_TEMP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_GLOBAL_FLAGS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_VMWARE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LOD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_GATHER4);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_POS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SAMPLE_INFO);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RESERVED1);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_HS_DECLS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_HS_CONTROL_POINT_PHASE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_HS_FORK_PHASE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_HS_JOIN_PHASE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EMIT_STREAM);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_CUT_STREAM);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EMITTHENCUT_STREAM);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_INTERFACE_CALL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_BUFINFO);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DERIV_RTX_COARSE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DERIV_RTX_FINE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DERIV_RTY_COARSE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DERIV_RTY_FINE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_GATHER4_C);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_GATHER4_PO);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_GATHER4_PO_C);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RCP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_F32TOF16);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_F16TOF32);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UADDC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_USUBB);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_COUNTBITS);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FIRSTBIT_HI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FIRSTBIT_LO);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FIRSTBIT_SHI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UBFE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IBFE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_BFI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_BFREV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SWAPC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_STREAM);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_FUNCTION_BODY);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_FUNCTION_TABLE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INTERFACE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_INPUT_CONTROL_POINT_COUNT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_TESS_DOMAIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_TESS_PARTITIONING);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_TESS_OUTPUT_PRIMITIVE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_HS_MAX_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_HS_FORK_PHASE_INSTANCE_COUNT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_HS_JOIN_PHASE_INSTANCE_COUNT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_THREAD_GROUP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_UAV_TYPED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_UAV_RAW);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_UAV_STRUCTURED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_TGSM_RAW);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_TGSM_STRUCTURED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_RESOURCE_RAW);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_RESOURCE_STRUCTURED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LD_UAV_TYPED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_STORE_UAV_TYPED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LD_RAW);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_STORE_RAW);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_LD_STRUCTURED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_STORE_STRUCTURED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_AND);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_OR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_XOR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_CMP_STORE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_IADD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_IMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_IMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_UMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ATOMIC_UMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_ALLOC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_CONSUME);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_IADD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_AND);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_OR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_XOR);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_EXCH);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_CMP_EXCH);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_IMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_IMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_UMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_IMM_ATOMIC_UMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_SYNC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DADD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DMAX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DMIN);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DMUL);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DEQ);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DGE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DLT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DNE);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DMOV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DMOVC);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DTOF);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_FTOD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EVAL_SNAPPED);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EVAL_SAMPLE_INDEX);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_EVAL_CENTROID);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DCL_GS_INSTANCE_COUNT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ABORT);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DEBUG_BREAK);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_RESERVED0);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DDIV);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DFMA);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DRCP);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_MSAD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DTOI);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_DTOU);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_ITOD);
+ SVGA_CASE_ID2STR(VGPU10_OPCODE_UTOD);
+ SVGA_CASE_ID2STR(VGPU10_NUM_OPCODES);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcShaderTypeToString(uint32_t value)
+{
+ VGPU10_PROGRAM_TYPE enm = (VGPU10_PROGRAM_TYPE)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_PIXEL_SHADER);
+ SVGA_CASE_ID2STR(VGPU10_VERTEX_SHADER);
+ SVGA_CASE_ID2STR(VGPU10_GEOMETRY_SHADER);
+ SVGA_CASE_ID2STR(VGPU10_HULL_SHADER);
+ SVGA_CASE_ID2STR(VGPU10_DOMAIN_SHADER);
+ SVGA_CASE_ID2STR(VGPU10_COMPUTE_SHADER);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcCustomDataClassToString(uint32_t value)
+{
+ VGPU10_CUSTOMDATA_CLASS enm = (VGPU10_CUSTOMDATA_CLASS)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_CUSTOMDATA_COMMENT);
+ SVGA_CASE_ID2STR(VGPU10_CUSTOMDATA_DEBUGINFO);
+ SVGA_CASE_ID2STR(VGPU10_CUSTOMDATA_OPAQUE);
+ SVGA_CASE_ID2STR(VGPU10_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcSystemNameToString(uint32_t value)
+{
+ VGPU10_SYSTEM_NAME enm = (VGPU10_SYSTEM_NAME)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_NAME_UNDEFINED);
+ SVGA_CASE_ID2STR(VGPU10_NAME_POSITION);
+ SVGA_CASE_ID2STR(VGPU10_NAME_CLIP_DISTANCE);
+ SVGA_CASE_ID2STR(VGPU10_NAME_CULL_DISTANCE);
+ SVGA_CASE_ID2STR(VGPU10_NAME_RENDER_TARGET_ARRAY_INDEX);
+ SVGA_CASE_ID2STR(VGPU10_NAME_VIEWPORT_ARRAY_INDEX);
+ SVGA_CASE_ID2STR(VGPU10_NAME_VERTEX_ID);
+ SVGA_CASE_ID2STR(VGPU10_NAME_PRIMITIVE_ID);
+ SVGA_CASE_ID2STR(VGPU10_NAME_INSTANCE_ID);
+ SVGA_CASE_ID2STR(VGPU10_NAME_IS_FRONT_FACE);
+ SVGA_CASE_ID2STR(VGPU10_NAME_SAMPLE_INDEX);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_TRI_INSIDE_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_LINE_DETAIL_TESSFACTOR);
+ SVGA_CASE_ID2STR(VGPU10_NAME_FINAL_LINE_DENSITY_TESSFACTOR);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandTypeToString(uint32_t value)
+{
+ VGPU10_OPERAND_TYPE enm = (VGPU10_OPERAND_TYPE)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_TEMP);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INDEXABLE_TEMP);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_IMMEDIATE32);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_IMMEDIATE64);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_SAMPLER);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_RESOURCE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_CONSTANT_BUFFER);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_IMMEDIATE_CONSTANT_BUFFER);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_LABEL);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_PRIMITIVEID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT_DEPTH);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_NULL);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_RASTERIZER);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT_COVERAGE_MASK);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_STREAM);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_FUNCTION_BODY);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_FUNCTION_TABLE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INTERFACE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_FUNCTION_INPUT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_FUNCTION_OUTPUT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT_CONTROL_POINT_ID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_FORK_INSTANCE_ID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_JOIN_INSTANCE_ID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_CONTROL_POINT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT_CONTROL_POINT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_PATCH_CONSTANT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_DOMAIN_POINT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_THIS_POINTER);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_UAV);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_THREAD_ID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_THREAD_GROUP_ID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_THREAD_ID_IN_GROUP);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_COVERAGE_MASK);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_THREAD_ID_IN_GROUP_FLATTENED);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_INPUT_GS_INSTANCE_ID);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT_DEPTH_GREATER_EQUAL);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_OUTPUT_DEPTH_LESS_EQUAL);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_TYPE_CYCLE_COUNTER);
+ SVGA_CASE_ID2STR(VGPU10_NUM_OPERANDS);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcExtendedOperandTypeToString(uint32_t value)
+{
+ VGPU10_EXTENDED_OPERAND_TYPE enm = (VGPU10_EXTENDED_OPERAND_TYPE)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_EXTENDED_OPERAND_EMPTY);
+ SVGA_CASE_ID2STR(VGPU10_EXTENDED_OPERAND_MODIFIER);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandModifierToString(uint32_t value)
+{
+ VGPU10_OPERAND_MODIFIER enm = (VGPU10_OPERAND_MODIFIER)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_MODIFIER_NONE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_MODIFIER_NEG);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_MODIFIER_ABS);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_MODIFIER_ABSNEG);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandNumComponentsToString(uint32_t value)
+{
+ VGPU10_OPERAND_NUM_COMPONENTS enm = (VGPU10_OPERAND_NUM_COMPONENTS)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_0_COMPONENT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_1_COMPONENT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_4_COMPONENT);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_N_COMPONENT);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandComponentModeToString(uint32_t value)
+{
+ VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE enm = (VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_4_COMPONENT_MASK_MODE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_4_COMPONENT_SWIZZLE_MODE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_4_COMPONENT_SELECT_1_MODE);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandComponentNameToString(uint32_t value)
+{
+ VGPU10_COMPONENT_NAME enm = (VGPU10_COMPONENT_NAME)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_COMPONENT_X);
+ SVGA_CASE_ID2STR(VGPU10_COMPONENT_Y);
+ SVGA_CASE_ID2STR(VGPU10_COMPONENT_Z);
+ SVGA_CASE_ID2STR(VGPU10_COMPONENT_W);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandIndexDimensionToString(uint32_t value)
+{
+ VGPU10_OPERAND_INDEX_DIMENSION enm = (VGPU10_OPERAND_INDEX_DIMENSION)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_0D);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_1D);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_2D);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_3D);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcOperandIndexRepresentationToString(uint32_t value)
+{
+ VGPU10_OPERAND_INDEX_REPRESENTATION enm = (VGPU10_OPERAND_INDEX_REPRESENTATION)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_IMMEDIATE32);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_IMMEDIATE64);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_RELATIVE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE);
+ SVGA_CASE_ID2STR(VGPU10_OPERAND_INDEX_IMMEDIATE64_PLUS_RELATIVE);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcInterpolationModeToString(uint32_t value)
+{
+ VGPU10_INTERPOLATION_MODE enm = (VGPU10_INTERPOLATION_MODE)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_UNDEFINED);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_CONSTANT);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_LINEAR);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_LINEAR_CENTROID);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_LINEAR_SAMPLE);
+ SVGA_CASE_ID2STR(VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcResourceDimensionToString(uint32_t value)
+{
+ VGPU10_RESOURCE_DIMENSION enm = (VGPU10_RESOURCE_DIMENSION)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_UNKNOWN);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_BUFFER);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE1D);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE2D);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE2DMS);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE3D);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURECUBE);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURE2DMSARRAY);
+ SVGA_CASE_ID2STR(VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY);
+ }
+ return NULL;
+}
+
+
+static const char *dxbcVmwareOpcodeTypeToString(uint32_t value)
+{
+ VGPU10_VMWARE_OPCODE_TYPE enm = (VGPU10_VMWARE_OPCODE_TYPE)value;
+ switch (enm)
+ {
+ SVGA_CASE_ID2STR(VGPU10_VMWARE_OPCODE_IDIV);
+ SVGA_CASE_ID2STR(VGPU10_VMWARE_OPCODE_DFRC);
+ SVGA_CASE_ID2STR(VGPU10_VMWARE_OPCODE_DRSQ);
+ SVGA_CASE_ID2STR(VGPU10_VMWARE_NUM_OPCODES);
+ }
+ return NULL;
+}
+
+#endif /* LOG_ENABLED */
+
+/*
+ * MD5 from IPRT (alt-md5.cpp) for DXBC hash calculation.
+ * DXBC hash function uses a different padding for the data, see dxbcHash.
+ * Therefore RTMd5Final is not needed. Two functions have been renamed: dxbcRTMd5Update dxbcRTMd5Init.
+ */
+
+
+/* The four core functions - F1 is optimized somewhat */
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f, w, x, y, z, data, s) \
+ ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
+
+
+/**
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to reflect
+ * the addition of 16 longwords of new data. RTMd5Update blocks the data and
+ * converts bytes into longwords for this routine.
+ */
+static void rtMd5Transform(uint32_t buf[4], uint32_t const in[16])
+{
+ uint32_t a, b, c, d;
+
+ a = buf[0];
+ b = buf[1];
+ c = buf[2];
+ d = buf[3];
+
+ /* fn, w, x, y, z, data, s) */
+ MD5STEP(F1, a, b, c, d, in[ 0] + 0xd76aa478, 7);
+ MD5STEP(F1, d, a, b, c, in[ 1] + 0xe8c7b756, 12);
+ MD5STEP(F1, c, d, a, b, in[ 2] + 0x242070db, 17);
+ MD5STEP(F1, b, c, d, a, in[ 3] + 0xc1bdceee, 22);
+ MD5STEP(F1, a, b, c, d, in[ 4] + 0xf57c0faf, 7);
+ MD5STEP(F1, d, a, b, c, in[ 5] + 0x4787c62a, 12);
+ MD5STEP(F1, c, d, a, b, in[ 6] + 0xa8304613, 17);
+ MD5STEP(F1, b, c, d, a, in[ 7] + 0xfd469501, 22);
+ MD5STEP(F1, a, b, c, d, in[ 8] + 0x698098d8, 7);
+ MD5STEP(F1, d, a, b, c, in[ 9] + 0x8b44f7af, 12);
+ MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+ MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+ MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+ MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+ MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+ MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+ MD5STEP(F2, a, b, c, d, in[ 1] + 0xf61e2562, 5);
+ MD5STEP(F2, d, a, b, c, in[ 6] + 0xc040b340, 9);
+ MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+ MD5STEP(F2, b, c, d, a, in[ 0] + 0xe9b6c7aa, 20);
+ MD5STEP(F2, a, b, c, d, in[ 5] + 0xd62f105d, 5);
+ MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+ MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+ MD5STEP(F2, b, c, d, a, in[ 4] + 0xe7d3fbc8, 20);
+ MD5STEP(F2, a, b, c, d, in[ 9] + 0x21e1cde6, 5);
+ MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+ MD5STEP(F2, c, d, a, b, in[ 3] + 0xf4d50d87, 14);
+ MD5STEP(F2, b, c, d, a, in[ 8] + 0x455a14ed, 20);
+ MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+ MD5STEP(F2, d, a, b, c, in[ 2] + 0xfcefa3f8, 9);
+ MD5STEP(F2, c, d, a, b, in[ 7] + 0x676f02d9, 14);
+ MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+ MD5STEP(F3, a, b, c, d, in[ 5] + 0xfffa3942, 4);
+ MD5STEP(F3, d, a, b, c, in[ 8] + 0x8771f681, 11);
+ MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+ MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+ MD5STEP(F3, a, b, c, d, in[ 1] + 0xa4beea44, 4);
+ MD5STEP(F3, d, a, b, c, in[ 4] + 0x4bdecfa9, 11);
+ MD5STEP(F3, c, d, a, b, in[ 7] + 0xf6bb4b60, 16);
+ MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+ MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+ MD5STEP(F3, d, a, b, c, in[ 0] + 0xeaa127fa, 11);
+ MD5STEP(F3, c, d, a, b, in[ 3] + 0xd4ef3085, 16);
+ MD5STEP(F3, b, c, d, a, in[ 6] + 0x04881d05, 23);
+ MD5STEP(F3, a, b, c, d, in[ 9] + 0xd9d4d039, 4);
+ MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+ MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+ MD5STEP(F3, b, c, d, a, in[ 2] + 0xc4ac5665, 23);
+
+ MD5STEP(F4, a, b, c, d, in[ 0] + 0xf4292244, 6);
+ MD5STEP(F4, d, a, b, c, in[ 7] + 0x432aff97, 10);
+ MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+ MD5STEP(F4, b, c, d, a, in[ 5] + 0xfc93a039, 21);
+ MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+ MD5STEP(F4, d, a, b, c, in[ 3] + 0x8f0ccc92, 10);
+ MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+ MD5STEP(F4, b, c, d, a, in[ 1] + 0x85845dd1, 21);
+ MD5STEP(F4, a, b, c, d, in[ 8] + 0x6fa87e4f, 6);
+ MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+ MD5STEP(F4, c, d, a, b, in[ 6] + 0xa3014314, 15);
+ MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+ MD5STEP(F4, a, b, c, d, in[ 4] + 0xf7537e82, 6);
+ MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+ MD5STEP(F4, c, d, a, b, in[ 2] + 0x2ad7d2bb, 15);
+ MD5STEP(F4, b, c, d, a, in[ 9] + 0xeb86d391, 21);
+
+ buf[0] += a;
+ buf[1] += b;
+ buf[2] += c;
+ buf[3] += d;
+}
+
+
+#ifdef RT_BIG_ENDIAN
+/*
+ * Note: this code is harmless on little-endian machines.
+ */
+static void rtMd5ByteReverse(uint32_t *buf, unsigned int longs)
+{
+ uint32_t t;
+ do
+ {
+ t = *buf;
+ t = RT_LE2H_U32(t);
+ *buf = t;
+ buf++;
+ } while (--longs);
+}
+#else /* little endian - do nothing */
+# define rtMd5ByteReverse(buf, len) do { /* Nothing */ } while (0)
+#endif
+
+
+/*
+ * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+ * initialization constants.
+ */
+static void dxbcRTMd5Init(PRTMD5CONTEXT pCtx)
+{
+ pCtx->AltPrivate.buf[0] = 0x67452301;
+ pCtx->AltPrivate.buf[1] = 0xefcdab89;
+ pCtx->AltPrivate.buf[2] = 0x98badcfe;
+ pCtx->AltPrivate.buf[3] = 0x10325476;
+
+ pCtx->AltPrivate.bits[0] = 0;
+ pCtx->AltPrivate.bits[1] = 0;
+}
+
+
+/*
+ * Update context to reflect the concatenation of another buffer full
+ * of bytes.
+ */
+/** @todo Optimize this, because len is always a multiple of 64. */
+static void dxbcRTMd5Update(PRTMD5CONTEXT pCtx, const void *pvBuf, size_t len)
+{
+ const uint8_t *buf = (const uint8_t *)pvBuf;
+ uint32_t t;
+
+ /* Update bitcount */
+ t = pCtx->AltPrivate.bits[0];
+ if ((pCtx->AltPrivate.bits[0] = t + ((uint32_t) len << 3)) < t)
+ pCtx->AltPrivate.bits[1]++; /* Carry from low to high */
+ pCtx->AltPrivate.bits[1] += (uint32_t)(len >> 29);
+
+ t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+
+ /* Handle any leading odd-sized chunks */
+ if (t)
+ {
+ uint8_t *p = (uint8_t *) pCtx->AltPrivate.in + t;
+
+ t = 64 - t;
+ if (len < t)
+ {
+ memcpy(p, buf, len);
+ return;
+ }
+ memcpy(p, buf, t);
+ rtMd5ByteReverse(pCtx->AltPrivate.in, 16);
+ rtMd5Transform(pCtx->AltPrivate.buf, pCtx->AltPrivate.in);
+ buf += t;
+ len -= t;
+ }
+
+ /* Process data in 64-byte chunks */
+#ifndef RT_BIG_ENDIAN
+ if (!((uintptr_t)buf & 0x3))
+ {
+ while (len >= 64) {
+ rtMd5Transform(pCtx->AltPrivate.buf, (uint32_t const *)buf);
+ buf += 64;
+ len -= 64;
+ }
+ }
+ else
+#endif
+ {
+ while (len >= 64) {
+ memcpy(pCtx->AltPrivate.in, buf, 64);
+ rtMd5ByteReverse(pCtx->AltPrivate.in, 16);
+ rtMd5Transform(pCtx->AltPrivate.buf, pCtx->AltPrivate.in);
+ buf += 64;
+ len -= 64;
+ }
+ }
+
+ /* Handle any remaining bytes of data */
+ memcpy(pCtx->AltPrivate.in, buf, len);
+}
+
+
+static void dxbcHash(void const *pvData, uint32_t cbData, uint8_t pabDigest[RTMD5HASHSIZE])
+{
+ size_t const kBlockSize = 64;
+ uint8_t au8BlockBuffer[kBlockSize];
+
+ static uint8_t const s_au8Padding[kBlockSize] =
+ {
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ };
+
+ RTMD5CONTEXT Ctx;
+ PRTMD5CONTEXT const pCtx = &Ctx;
+ dxbcRTMd5Init(pCtx);
+
+ uint8_t const *pu8Data = (uint8_t *)pvData;
+ size_t cbRemaining = cbData;
+
+ size_t const cbCompleteBlocks = cbData & ~ (kBlockSize - 1);
+ dxbcRTMd5Update(pCtx, pu8Data, cbCompleteBlocks);
+ pu8Data += cbCompleteBlocks;
+ cbRemaining -= cbCompleteBlocks;
+
+ /* Custom padding. */
+ if (cbRemaining >= kBlockSize - 2 * sizeof(uint32_t))
+ {
+ /* Two additional blocks. */
+ memcpy(&au8BlockBuffer[0], pu8Data, cbRemaining);
+ memcpy(&au8BlockBuffer[cbRemaining], s_au8Padding, kBlockSize - cbRemaining);
+ dxbcRTMd5Update(pCtx, au8BlockBuffer, kBlockSize);
+
+ memset(&au8BlockBuffer[sizeof(uint32_t)], 0, kBlockSize - 2 * sizeof(uint32_t));
+ }
+ else
+ {
+ /* One additional block. */
+ memcpy(&au8BlockBuffer[sizeof(uint32_t)], pu8Data, cbRemaining);
+ memcpy(&au8BlockBuffer[sizeof(uint32_t) + cbRemaining], s_au8Padding, kBlockSize - cbRemaining - 2 * sizeof(uint32_t));
+ }
+
+ /* Set the first and last dwords of the last block. */
+ *(uint32_t *)&au8BlockBuffer[0] = cbData << 3;
+ *(uint32_t *)&au8BlockBuffer[kBlockSize - sizeof(uint32_t)] = (cbData << 1) | 1;
+ dxbcRTMd5Update(pCtx, au8BlockBuffer, kBlockSize);
+
+ AssertCompile(sizeof(pCtx->AltPrivate.buf) == RTMD5HASHSIZE);
+ memcpy(pabDigest, pCtx->AltPrivate.buf, RTMD5HASHSIZE);
+}
+
+
+/*
+ *
+ * Shader token reader.
+ *
+ */
+
+typedef struct DXBCTokenReader
+{
+ uint32_t const *pToken; /* Next token to read. */
+ uint32_t cToken; /* How many tokens total. */
+ uint32_t cRemainingToken; /* How many tokens remain. */
+} DXBCTokenReader;
+
+
+#ifdef LOG_ENABLED
+DECLINLINE(uint32_t) dxbcTokenReaderByteOffset(DXBCTokenReader *r)
+{
+ return (r->cToken - r->cRemainingToken) * 4;
+}
+#endif
+
+
+#if 0 // Unused for now
+DECLINLINE(uint32_t) dxbcTokenReaderRemaining(DXBCTokenReader *r)
+{
+ return r->cRemainingToken;
+}
+#endif
+
+
+DECLINLINE(uint32_t const *) dxbcTokenReaderPtr(DXBCTokenReader *r)
+{
+ return r->pToken;
+}
+
+
+DECLINLINE(bool) dxbcTokenReaderCanRead(DXBCTokenReader *r, uint32_t cToken)
+{
+ return cToken <= r->cRemainingToken;
+}
+
+
+DECLINLINE(void) dxbcTokenReaderSkip(DXBCTokenReader *r, uint32_t cToken)
+{
+ AssertReturnVoid(r->cRemainingToken >= cToken);
+ r->cRemainingToken -= cToken;
+ r->pToken += cToken;
+}
+
+
+DECLINLINE(uint32_t) dxbcTokenReaderRead32(DXBCTokenReader *r)
+{
+ AssertReturn(r->cRemainingToken, 0);
+ --r->cRemainingToken;
+ return *(r->pToken++);
+}
+
+
+DECLINLINE(uint64_t) dxbcTokenReaderRead64(DXBCTokenReader *r)
+{
+ uint64_t const u64Low = dxbcTokenReaderRead32(r);
+ uint64_t const u64High = dxbcTokenReaderRead32(r);
+ return u64Low + (u64High << 32);
+}
+
+
+/*
+ *
+ * Byte writer.
+ *
+ */
+
+typedef struct DXBCByteWriter
+{
+ uint8_t *pu8ByteCodeBegin; /* First byte of the buffer. */
+ uint8_t *pu8ByteCodePtr; /* Next byte to be written. */
+ uint32_t cbAllocated; /* How many bytes allocated in the buffer. */
+ uint32_t cbRemaining; /* How many bytes remain in the buffer. */
+ uint32_t cbWritten; /* Offset of first never written byte.
+ * Since the writer allows to jump in the buffer, this field tracks
+ * the upper boundary of the written data.
+ */
+ int32_t rc;
+} DXBCByteWriter;
+
+
+typedef struct DXBCByteWriterState
+{
+ uint32_t off; /* Offset of the next free byte. */
+} DXBCByteWriterState;
+
+
+DECLINLINE(void *) dxbcByteWriterPtr(DXBCByteWriter *w)
+{
+ return w->pu8ByteCodePtr;
+}
+
+
+DECLINLINE(uint32_t) dxbcByteWriterSize(DXBCByteWriter *w)
+{
+ return (uint32_t)(w->pu8ByteCodePtr - w->pu8ByteCodeBegin);
+}
+
+
+static bool dxbcByteWriterRealloc(DXBCByteWriter *w, uint32_t cbNew)
+{
+ void *pvNew = RTMemAllocZ(cbNew);
+ if (!pvNew)
+ {
+ w->rc = VERR_NO_MEMORY;
+ return false;
+ }
+
+ uint32_t const cbCurrent = dxbcByteWriterSize(w);
+ memcpy(pvNew, w->pu8ByteCodeBegin, cbCurrent);
+ RTMemFree(w->pu8ByteCodeBegin);
+
+ w->pu8ByteCodeBegin = (uint8_t *)pvNew;
+ w->pu8ByteCodePtr = w->pu8ByteCodeBegin + cbCurrent;
+ w->cbAllocated = cbNew;
+ w->cbRemaining = cbNew - cbCurrent;
+ return true;
+}
+
+
+DECLINLINE(bool) dxbcByteWriterSetOffset(DXBCByteWriter *w, uint32_t off, DXBCByteWriterState *pSavedWriterState)
+{
+ if (RT_FAILURE(w->rc))
+ return false;
+
+ uint32_t const cbNew = RT_ALIGN_32(off, 1024);
+ uint32_t const cbMax = 2 * SVGA3D_MAX_SHADER_MEMORY_BYTES;
+ AssertReturnStmt(off < cbMax && cbNew < cbMax, w->rc = VERR_INVALID_PARAMETER, false);
+
+ if (cbNew > w->cbAllocated)
+ {
+ if (!dxbcByteWriterRealloc(w, cbNew))
+ return false;
+ }
+
+ pSavedWriterState->off = dxbcByteWriterSize(w);
+
+ w->pu8ByteCodePtr = w->pu8ByteCodeBegin + off;
+ w->cbRemaining = w->cbAllocated - off;
+ return true;
+}
+
+
+DECLINLINE(void) dxbcByteWriterRestore(DXBCByteWriter *w, DXBCByteWriterState *pSavedWriterState)
+{
+ w->pu8ByteCodePtr = w->pu8ByteCodeBegin + pSavedWriterState->off;
+ w->cbRemaining = w->cbAllocated - pSavedWriterState->off;
+}
+
+
+DECLINLINE(void) dxbcByteWriterCommit(DXBCByteWriter *w, uint32_t cbCommit)
+{
+ if (RT_FAILURE(w->rc))
+ return;
+
+ Assert(cbCommit < w->cbRemaining);
+ cbCommit = RT_MIN(cbCommit, w->cbRemaining);
+ w->pu8ByteCodePtr += cbCommit;
+ w->cbRemaining -= cbCommit;
+ w->cbWritten = RT_MAX(w->cbWritten, w->cbAllocated - w->cbRemaining);
+}
+
+
+DECLINLINE(bool) dxbcByteWriterCanWrite(DXBCByteWriter *w, uint32_t cbMore)
+{
+ if (RT_FAILURE(w->rc))
+ return false;
+
+ if (cbMore <= w->cbRemaining)
+ return true;
+
+ /* Do not allow to allocate more than 2 * SVGA3D_MAX_SHADER_MEMORY_BYTES */
+ uint32_t const cbMax = 2 * SVGA3D_MAX_SHADER_MEMORY_BYTES;
+ AssertReturnStmt(cbMore < cbMax && RT_ALIGN_32(cbMore, 4096) <= cbMax - w->cbAllocated, w->rc = VERR_INVALID_PARAMETER, false);
+
+ uint32_t cbNew = w->cbAllocated + RT_ALIGN_32(cbMore, 4096);
+ return dxbcByteWriterRealloc(w, cbNew);
+}
+
+
+DECLINLINE(bool) dxbcByteWriterAddTokens(DXBCByteWriter *w, uint32_t const *paToken, uint32_t cToken)
+{
+ uint32_t const cbWrite = cToken * sizeof(uint32_t);
+ if (dxbcByteWriterCanWrite(w, cbWrite))
+ {
+ memcpy(dxbcByteWriterPtr(w), paToken, cbWrite);
+ dxbcByteWriterCommit(w, cbWrite);
+ return true;
+ }
+
+ AssertFailed();
+ return false;
+}
+
+
+DECLINLINE(bool) dxbcByteWriterInit(DXBCByteWriter *w, uint32_t cbInitial)
+{
+ RT_ZERO(*w);
+ return dxbcByteWriterCanWrite(w, cbInitial);
+}
+
+
+DECLINLINE(void) dxbcByteWriterReset(DXBCByteWriter *w)
+{
+ RTMemFree(w->pu8ByteCodeBegin);
+ RT_ZERO(*w);
+}
+
+
+DECLINLINE(void) dxbcByteWriterFetchData(DXBCByteWriter *w, void **ppv, uint32_t *pcb)
+{
+ *ppv = w->pu8ByteCodeBegin;
+ *pcb = w->cbWritten;
+
+ w->pu8ByteCodeBegin = NULL;
+ dxbcByteWriterReset(w);
+}
+
+
+/*
+ *
+ * VGPU10 shader parser.
+ *
+ */
+
+/* Parse an instruction operand. */
+static int dxbcParseOperand(DXBCTokenReader *r, VGPUOperand *paOperand, uint32_t *pcOperandRemain)
+{
+ ASSERT_GUEST_RETURN(*pcOperandRemain > 0, VERR_NOT_SUPPORTED);
+
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+
+ paOperand->paOperandToken = dxbcTokenReaderPtr(r);
+ paOperand->cOperandToken = 0;
+
+ VGPU10OperandToken0 operand0;
+ operand0.value = dxbcTokenReaderRead32(r);
+
+ Log6((" %s(%d) %s(%d) %s(%d) %s(%d)\n",
+ dxbcOperandNumComponentsToString(operand0.numComponents), operand0.numComponents,
+ dxbcOperandComponentModeToString(operand0.selectionMode), operand0.selectionMode,
+ dxbcOperandTypeToString(operand0.operandType), operand0.operandType,
+ dxbcOperandIndexDimensionToString(operand0.indexDimension), operand0.indexDimension));
+
+ ASSERT_GUEST_RETURN(operand0.numComponents <= VGPU10_OPERAND_4_COMPONENT, VERR_INVALID_PARAMETER);
+ if ( operand0.operandType != VGPU10_OPERAND_TYPE_IMMEDIATE32
+ && operand0.operandType != VGPU10_OPERAND_TYPE_IMMEDIATE64)
+ {
+ if (operand0.numComponents == VGPU10_OPERAND_4_COMPONENT)
+ {
+ ASSERT_GUEST_RETURN(operand0.selectionMode <= VGPU10_OPERAND_4_COMPONENT_SELECT_1_MODE, VERR_INVALID_PARAMETER);
+ switch (operand0.selectionMode)
+ {
+ case VGPU10_OPERAND_4_COMPONENT_MASK_MODE:
+ Log6((" Mask %#x\n", operand0.mask));
+ break;
+ case VGPU10_OPERAND_4_COMPONENT_SWIZZLE_MODE:
+ Log6((" Swizzle %s(%d) %s(%d) %s(%d) %s(%d)\n",
+ dxbcOperandComponentNameToString(operand0.swizzleX), operand0.swizzleX,
+ dxbcOperandComponentNameToString(operand0.swizzleY), operand0.swizzleY,
+ dxbcOperandComponentNameToString(operand0.swizzleZ), operand0.swizzleZ,
+ dxbcOperandComponentNameToString(operand0.swizzleW), operand0.swizzleW));
+ break;
+ case VGPU10_OPERAND_4_COMPONENT_SELECT_1_MODE:
+ Log6((" Select %s(%d)\n",
+ dxbcOperandComponentNameToString(operand0.selectMask), operand0.selectMask));
+ break;
+ default: /* Never happens. */
+ break;
+ }
+ }
+ }
+
+ if (operand0.extended)
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+
+ VGPU10OperandToken1 operand1;
+ operand1.value = dxbcTokenReaderRead32(r);
+
+ Log6((" %s(%d) %s(%d)\n",
+ dxbcExtendedOperandTypeToString(operand1.extendedOperandType), operand1.extendedOperandType,
+ dxbcOperandModifierToString(operand1.operandModifier), operand1.operandModifier));
+ }
+
+ ASSERT_GUEST_RETURN(operand0.operandType < VGPU10_NUM_OPERANDS, VERR_INVALID_PARAMETER);
+
+ if ( operand0.operandType == VGPU10_OPERAND_TYPE_IMMEDIATE32
+ || operand0.operandType == VGPU10_OPERAND_TYPE_IMMEDIATE64)
+ {
+ uint32_t cComponent = 0;
+ if (operand0.numComponents == VGPU10_OPERAND_4_COMPONENT)
+ cComponent = 4;
+ else if (operand0.numComponents == VGPU10_OPERAND_1_COMPONENT)
+ cComponent = 1;
+
+ for (uint32_t i = 0; i < cComponent; ++i)
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ paOperand->aImm[i] = dxbcTokenReaderRead32(r);
+ }
+ }
+
+ paOperand->numComponents = operand0.numComponents;
+ paOperand->selectionMode = operand0.selectionMode;
+ paOperand->mask = operand0.mask;
+ paOperand->operandType = operand0.operandType;
+ paOperand->indexDimension = operand0.indexDimension;
+
+ int rc = VINF_SUCCESS;
+ /* 'indexDimension' tells the number of indices. 'i' is the array index, i.e. i = 0 for 1D, etc. */
+ for (uint32_t i = 0; i < operand0.indexDimension; ++i)
+ {
+ if (i == 0) /* VGPU10_OPERAND_INDEX_1D */
+ paOperand->aOperandIndex[i].indexRepresentation = operand0.index0Representation;
+ else if (i == 1) /* VGPU10_OPERAND_INDEX_2D */
+ paOperand->aOperandIndex[i].indexRepresentation = operand0.index1Representation;
+ else /* VGPU10_OPERAND_INDEX_3D */
+ continue; /* Skip because it is "rarely if ever used" and is not supported by VGPU10. */
+
+ uint32_t const indexRepresentation = paOperand->aOperandIndex[i].indexRepresentation;
+ switch (indexRepresentation)
+ {
+ case VGPU10_OPERAND_INDEX_IMMEDIATE32:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ paOperand->aOperandIndex[i].iOperandImmediate = dxbcTokenReaderRead32(r);
+ break;
+ }
+ case VGPU10_OPERAND_INDEX_IMMEDIATE64:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 2), VERR_INVALID_PARAMETER);
+ paOperand->aOperandIndex[i].iOperandImmediate = dxbcTokenReaderRead64(r);
+ break;
+ }
+ case VGPU10_OPERAND_INDEX_RELATIVE:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ paOperand->aOperandIndex[i].pOperandRelative = &paOperand[1];
+ Log6((" [operand index %d] parsing relative\n", i));
+ rc = dxbcParseOperand(r, &paOperand[1], pcOperandRemain);
+ break;
+ }
+ case VGPU10_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 2), VERR_INVALID_PARAMETER);
+ paOperand->aOperandIndex[i].iOperandImmediate = dxbcTokenReaderRead32(r);
+ paOperand->aOperandIndex[i].pOperandRelative = &paOperand[1];
+ Log6((" [operand index %d] parsing relative\n", i));
+ rc = dxbcParseOperand(r, &paOperand[1], pcOperandRemain);
+ break;
+ }
+ case VGPU10_OPERAND_INDEX_IMMEDIATE64_PLUS_RELATIVE:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 3), VERR_INVALID_PARAMETER);
+ paOperand->aOperandIndex[i].iOperandImmediate = dxbcTokenReaderRead64(r);
+ paOperand->aOperandIndex[i].pOperandRelative = &paOperand[1];
+ Log6((" [operand index %d] parsing relative\n", i));
+ rc = dxbcParseOperand(r, &paOperand[1], pcOperandRemain);
+ break;
+ }
+ default:
+ ASSERT_GUEST_FAILED_RETURN(VERR_INVALID_PARAMETER);
+ }
+ Log6((" [operand index %d] %s(%d): %#llx%s\n",
+ i, dxbcOperandIndexRepresentationToString(indexRepresentation), indexRepresentation,
+ paOperand->aOperandIndex[i].iOperandImmediate, paOperand->aOperandIndex[i].pOperandRelative ? " + relative" : ""));
+ if (RT_FAILURE(rc))
+ break;
+ }
+
+ paOperand->cOperandToken = dxbcTokenReaderPtr(r) - paOperand->paOperandToken;
+
+ *pcOperandRemain -= 1;
+ return VINF_SUCCESS;
+}
+
+
+/* Parse an instruction. */
+static int dxbcParseOpcode(DXBCTokenReader *r, VGPUOpcode *pOpcode)
+{
+ RT_ZERO(*pOpcode);
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+
+ pOpcode->paOpcodeToken = dxbcTokenReaderPtr(r);
+
+ VGPU10OpcodeToken0 opcode;
+ opcode.value = dxbcTokenReaderRead32(r);
+
+ pOpcode->opcodeType = opcode.opcodeType;
+ ASSERT_GUEST_RETURN(pOpcode->opcodeType < VGPU10_NUM_OPCODES, VERR_INVALID_PARAMETER);
+
+ Log6(("[%#x] %s length %d\n",
+ dxbcTokenReaderByteOffset(r) - 4, dxbcOpcodeToString(pOpcode->opcodeType), opcode.instructionLength));
+
+ uint32_t const cOperand = g_aOpcodeInfo[pOpcode->opcodeType].cOperand;
+ if (cOperand != UINT32_MAX)
+ {
+ ASSERT_GUEST_RETURN(cOperand < RT_ELEMENTS(pOpcode->aIdxOperand), VERR_INVALID_PARAMETER);
+
+ pOpcode->cOpcodeToken = opcode.instructionLength;
+ uint32_t cOpcode = 1; /* Opcode token + extended opcode tokens. */
+ if (opcode.extended)
+ {
+ if ( pOpcode->opcodeType == VGPU10_OPCODE_DCL_FUNCTION_BODY
+ || pOpcode->opcodeType == VGPU10_OPCODE_DCL_FUNCTION_TABLE
+ || pOpcode->opcodeType == VGPU10_OPCODE_DCL_INTERFACE
+ || pOpcode->opcodeType == VGPU10_OPCODE_INTERFACE_CALL
+ || pOpcode->opcodeType == VGPU10_OPCODE_DCL_THREAD_GROUP)
+ {
+ /* "next DWORD contains ... the actual instruction length in DWORD since it may not fit into 7 bits" */
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ pOpcode->cOpcodeToken = dxbcTokenReaderRead32(r);
+ ++cOpcode;
+ }
+ else
+ {
+ VGPU10OpcodeToken1 opcode1;
+ do
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ opcode1.value = dxbcTokenReaderRead32(r);
+ ++cOpcode;
+ ASSERT_GUEST( opcode1.opcodeType == VGPU10_EXTENDED_OPCODE_SAMPLE_CONTROLS
+ || opcode1.opcodeType == D3D11_SB_EXTENDED_OPCODE_RESOURCE_DIM
+ || opcode1.opcodeType == D3D11_SB_EXTENDED_OPCODE_RESOURCE_RETURN_TYPE);
+ } while(opcode1.extended);
+ }
+ }
+
+ ASSERT_GUEST_RETURN(pOpcode->cOpcodeToken >= 1 && pOpcode->cOpcodeToken < 256, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, pOpcode->cOpcodeToken - cOpcode), VERR_INVALID_PARAMETER);
+
+#ifdef LOG_ENABLED
+ Log6((" %08X", opcode.value));
+ for (uint32_t i = 1; i < pOpcode->cOpcodeToken; ++i)
+ Log6((" %08X", r->pToken[i - 1]));
+ Log6(("\n"));
+
+ if (pOpcode->opcodeType == VGPU10_OPCODE_DCL_RESOURCE)
+ Log6((" %s\n",
+ dxbcResourceDimensionToString(opcode.resourceDimension)));
+ else
+ Log6((" %s\n",
+ dxbcInterpolationModeToString(opcode.interpolationMode)));
+#endif
+ /* Additional tokens before operands. */
+ switch (pOpcode->opcodeType)
+ {
+ case VGPU10_OPCODE_INTERFACE_CALL:
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* Function index */
+ break;
+
+ default:
+ break;
+ }
+
+ /* Operands. */
+ uint32_t cOperandRemain = RT_ELEMENTS(pOpcode->aValOperand);
+ for (uint32_t i = 0; i < cOperand; ++i)
+ {
+ Log6((" [operand %d]\n", i));
+ uint32_t const idxOperand = RT_ELEMENTS(pOpcode->aValOperand) - cOperandRemain;
+ pOpcode->aIdxOperand[i] = idxOperand;
+ int rc = dxbcParseOperand(r, &pOpcode->aValOperand[idxOperand], &cOperandRemain);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), VERR_INVALID_PARAMETER);
+ }
+
+ pOpcode->cOperand = cOperand;
+
+ /* Additional tokens after operands. */
+ switch (pOpcode->opcodeType)
+ {
+ case VGPU10_OPCODE_DCL_INPUT_SIV:
+ case VGPU10_OPCODE_DCL_INPUT_SGV:
+ case VGPU10_OPCODE_DCL_INPUT_PS_SIV:
+ case VGPU10_OPCODE_DCL_INPUT_PS_SGV:
+ case VGPU10_OPCODE_DCL_OUTPUT_SIV:
+ case VGPU10_OPCODE_DCL_OUTPUT_SGV:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+
+ VGPU10NameToken name;
+ name.value = dxbcTokenReaderRead32(r);
+ Log6((" %s(%d)\n",
+ dxbcSystemNameToString(name.name), name.name));
+ pOpcode->semanticName = name.name;
+ break;
+ }
+ case VGPU10_OPCODE_DCL_RESOURCE:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* ResourceReturnTypeToken */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_TEMPS:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* number of temps */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_INDEXABLE_TEMP:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 3), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 3); /* register index; number of registers; number of components */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_INDEX_RANGE:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* count of registers */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_MAX_OUTPUT_VERTEX_COUNT:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* maximum number of primitives */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_GS_INSTANCE_COUNT:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* number of instances */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_HS_MAX_TESSFACTOR:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* maximum TessFactor */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_HS_FORK_PHASE_INSTANCE_COUNT:
+ case VGPU10_OPCODE_DCL_HS_JOIN_PHASE_INSTANCE_COUNT:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* number of instances of the current fork/join phase program to execute */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_THREAD_GROUP:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 3), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 3); /* Thread Group dimensions as UINT32: x, y, z */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_UAV_TYPED:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* ResourceReturnTypeToken */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_UAV_STRUCTURED:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* byte stride */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_TGSM_RAW:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* element count */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_TGSM_STRUCTURED:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 2), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 2); /* struct byte stride; struct count */
+ break;
+ }
+ case VGPU10_OPCODE_DCL_RESOURCE_STRUCTURED:
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ dxbcTokenReaderSkip(r, 1); /* struct byte stride */
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ else
+ {
+ /* Special opcodes. */
+ if (pOpcode->opcodeType == VGPU10_OPCODE_CUSTOMDATA)
+ {
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, 1), VERR_INVALID_PARAMETER);
+ pOpcode->cOpcodeToken = dxbcTokenReaderRead32(r);
+
+ if (pOpcode->cOpcodeToken < 2)
+ pOpcode->cOpcodeToken = 2;
+ ASSERT_GUEST_RETURN(dxbcTokenReaderCanRead(r, pOpcode->cOpcodeToken - 2), VERR_INVALID_PARAMETER);
+
+#ifdef LOG_ENABLED
+ Log6((" %08X", opcode.value));
+ for (uint32_t i = 1; i < pOpcode->cOpcodeToken; ++i)
+ Log6((" %08X", r->pToken[i - 1]));
+ Log6(("\n"));
+
+ Log6((" %s\n",
+ dxbcCustomDataClassToString(opcode.customDataClass)));
+#endif
+ dxbcTokenReaderSkip(r, pOpcode->cOpcodeToken - 2);
+ }
+ else if (pOpcode->opcodeType == VGPU10_OPCODE_VMWARE)
+ {
+ pOpcode->cOpcodeToken = opcode.instructionLength;
+ pOpcode->opcodeSubtype = opcode.vmwareOpcodeType;
+
+#ifdef LOG_ENABLED
+ Log6((" %08X", opcode.value));
+ for (uint32_t i = 1; i < pOpcode->cOpcodeToken; ++i)
+ Log6((" %08X", r->pToken[i - 1]));
+ Log6(("\n"));
+
+ Log6((" %s(%d)\n",
+ dxbcVmwareOpcodeTypeToString(opcode.vmwareOpcodeType), opcode.vmwareOpcodeType));
+#endif
+
+ if (opcode.vmwareOpcodeType == VGPU10_VMWARE_OPCODE_IDIV)
+ {
+ /* Integer divide. */
+ pOpcode->cOperand = 4; /* dstQuit, dstRem, src0, src1. */
+
+ /* Operands. */
+ uint32_t cOperandRemain = RT_ELEMENTS(pOpcode->aValOperand);
+ for (uint32_t i = 0; i < pOpcode->cOperand; ++i)
+ {
+ Log6((" [operand %d]\n", i));
+ uint32_t const idxOperand = RT_ELEMENTS(pOpcode->aValOperand) - cOperandRemain;
+ pOpcode->aIdxOperand[i] = idxOperand;
+ int rc = dxbcParseOperand(r, &pOpcode->aValOperand[idxOperand], &cOperandRemain);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), VERR_INVALID_PARAMETER);
+ }
+ }
+ //else if (opcode.vmwareOpcodeType == VGPU10_VMWARE_OPCODE_DFRC)
+ //else if (opcode.vmwareOpcodeType == VGPU10_VMWARE_OPCODE_DRSQ)
+ else
+ {
+ /** @todo implement */
+ ASSERT_GUEST_FAILED_RETURN(VERR_INVALID_PARAMETER);
+ }
+ }
+ else
+ ASSERT_GUEST_FAILED_RETURN(VERR_INVALID_PARAMETER);
+
+ // pOpcode->cOperand = 0;
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+typedef struct DXBCOUTPUTCTX
+{
+ VGPU10ProgramToken programToken;
+ uint32_t cToken; /* Number of tokens in the original shader code. */
+
+ uint32_t offSubroutine; /* Current offset where to write subroutines. */
+} DXBCOUTPUTCTX;
+
+
+static void dxbcOutputInit(DXBCOUTPUTCTX *pOutctx, VGPU10ProgramToken const *pProgramToken, uint32_t cToken)
+{
+ RT_ZERO(*pOutctx);
+ pOutctx->programToken = *pProgramToken;
+ pOutctx->cToken = cToken;
+
+ pOutctx->offSubroutine = cToken * 4;
+}
+
+
+static int dxbcEmitVmwareIDIV(DXBCOUTPUTCTX *pOutctx, DXBCByteWriter *w, VGPUOpcode *pOpcode)
+{
+ /* Insert a call and append a subroutne. */
+ VGPU10OpcodeToken0 opcode;
+ VGPU10OperandToken0 operand;
+
+ uint32_t const label = (pOutctx->offSubroutine - dxbcByteWriterSize(w)) / 4;
+
+ /*
+ * Call
+ */
+ opcode.value = 0;
+ opcode.opcodeType = VGPU10_OPCODE_CALL;
+ opcode.instructionLength = 3;
+ dxbcByteWriterAddTokens(w, &opcode.value, 1);
+
+ operand.value = 0;
+ operand.numComponents = VGPU10_OPERAND_1_COMPONENT;
+ operand.operandType = VGPU10_OPERAND_TYPE_LABEL;
+ operand.indexDimension = VGPU10_OPERAND_INDEX_1D;
+ operand.index0Representation = VGPU10_OPERAND_INDEX_IMMEDIATE32;
+ dxbcByteWriterAddTokens(w, &operand.value, 1);
+
+ dxbcByteWriterAddTokens(w, &label, 1);
+
+ opcode.value = 0;
+ opcode.opcodeType = VGPU10_OPCODE_NOP;
+ opcode.instructionLength = 1;
+ for (unsigned i = 0; i < pOpcode->cOpcodeToken - 3; ++i)
+ dxbcByteWriterAddTokens(w, &opcode.value, 1);
+
+ /*
+ * Subroutine.
+ */
+ DXBCByteWriterState savedWriterState;
+ if (!dxbcByteWriterSetOffset(w, pOutctx->offSubroutine, &savedWriterState))
+ return w->rc;
+
+ /* label */
+ opcode.value = 0;
+ opcode.opcodeType = VGPU10_OPCODE_LABEL;
+ opcode.instructionLength = 3;
+ dxbcByteWriterAddTokens(w, &opcode.value, 1);
+
+ operand.value = 0;
+ operand.numComponents = VGPU10_OPERAND_1_COMPONENT;
+ operand.operandType = VGPU10_OPERAND_TYPE_LABEL;
+ operand.indexDimension = VGPU10_OPERAND_INDEX_1D;
+ operand.index0Representation = VGPU10_OPERAND_INDEX_IMMEDIATE32;
+ dxbcByteWriterAddTokens(w, &operand.value, 1);
+ dxbcByteWriterAddTokens(w, &label, 1);
+
+ /* Just output UDIV for now. */
+ opcode.value = 0;
+ opcode.opcodeType = VGPU10_OPCODE_UDIV;
+ opcode.instructionLength = pOpcode->cOpcodeToken;
+ dxbcByteWriterAddTokens(w, &opcode.value, 1);
+ dxbcByteWriterAddTokens(w, &pOpcode->paOpcodeToken[1], pOpcode->cOpcodeToken - 1);
+
+ /* ret */
+ opcode.value = 0;
+ opcode.opcodeType = VGPU10_OPCODE_RET;
+ opcode.instructionLength = 1;
+ dxbcByteWriterAddTokens(w, &opcode.value, 1);
+
+ pOutctx->offSubroutine = dxbcByteWriterSize(w);
+ dxbcByteWriterRestore(w, &savedWriterState);
+
+ return w->rc;
+}
+
+
+static int dxbcOutputOpcode(DXBCOUTPUTCTX *pOutctx, DXBCByteWriter *w, VGPUOpcode *pOpcode)
+{
+#ifdef DEBUG
+ void *pvBegin = dxbcByteWriterPtr(w);
+#endif
+
+ if ( pOutctx->programToken.programType == VGPU10_PIXEL_SHADER
+ && pOpcode->opcodeType == VGPU10_OPCODE_DCL_RESOURCE)
+ {
+ /** @todo This is a workaround. */
+ /* Sometimes the guest (Mesa) created a shader with uninitialized resource dimension.
+ * Use texture 2d because it is what a pixel shader normally uses.
+ */
+ ASSERT_GUEST_RETURN(pOpcode->cOpcodeToken == 4, VERR_INVALID_PARAMETER);
+
+ VGPU10OpcodeToken0 opcode;
+ opcode.value = pOpcode->paOpcodeToken[0];
+ if (opcode.resourceDimension == VGPU10_RESOURCE_DIMENSION_BUFFER)
+ {
+ opcode.resourceDimension = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
+ dxbcByteWriterAddTokens(w, &opcode.value, 1);
+ dxbcByteWriterAddTokens(w, &pOpcode->paOpcodeToken[1], 2);
+ uint32_t const returnType = 0x5555; /* float */
+ dxbcByteWriterAddTokens(w, &returnType, 1);
+ return VINF_SUCCESS;
+ }
+ }
+ else if (pOpcode->opcodeType == VGPU10_OPCODE_VMWARE)
+ {
+ if (pOpcode->opcodeSubtype == VGPU10_VMWARE_OPCODE_IDIV)
+ {
+ return dxbcEmitVmwareIDIV(pOutctx, w, pOpcode);
+ }
+
+ ASSERT_GUEST_FAILED_RETURN(VERR_NOT_SUPPORTED);
+ }
+
+#ifdef DEBUG
+ /* The code above must emit either nothing or everything. */
+ Assert((uintptr_t)pvBegin == (uintptr_t)dxbcByteWriterPtr(w));
+#endif
+
+ /* Just emit the unmodified instruction. */
+ dxbcByteWriterAddTokens(w, pOpcode->paOpcodeToken, pOpcode->cOpcodeToken);
+ return VINF_SUCCESS;
+}
+
+
+static int dxbcOutputFinalize(DXBCOUTPUTCTX *pOutctx, DXBCByteWriter *w)
+{
+ RT_NOREF(pOutctx, w);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) signatureEntryCmp(void const *pvElement1, void const *pvElement2, void *pvUser)
+{
+ SVGA3dDXSignatureEntry const *e1 = (SVGA3dDXSignatureEntry *)pvElement1;
+ SVGA3dDXSignatureEntry const *e2 = (SVGA3dDXSignatureEntry *)pvElement2;
+ RT_NOREF(pvUser);
+
+ if (e1->registerIndex < e2->registerIndex)
+ return -1;
+ if (e1->registerIndex > e2->registerIndex)
+ return 1;
+ if ((e1->mask & 0xf) < (e2->mask & 0xf))
+ return -1;
+ if ((e1->mask & 0xf) > (e2->mask & 0xf))
+ return 1;
+ return 0;
+}
+
+
+static void dxbcGenerateSemantics(DXShaderInfo *pInfo, uint32_t cSignature,
+ SVGA3dDXSignatureEntry const *paSignature,
+ DXShaderAttributeSemantic *paSemantic,
+ uint32_t u32BlobType);
+
+
+/*
+ * Parse and verify the shader byte code. Extract input and output signatures into pInfo.
+ */
+int DXShaderParse(void const *pvShaderCode, uint32_t cbShaderCode, DXShaderInfo *pInfo)
+{
+ if (pInfo)
+ RT_ZERO(*pInfo);
+
+ ASSERT_GUEST_RETURN(cbShaderCode <= SVGA3D_MAX_SHADER_MEMORY_BYTES, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN((cbShaderCode & 0x3) == 0, VERR_INVALID_PARAMETER); /* Aligned to the token size. */
+ ASSERT_GUEST_RETURN(cbShaderCode >= 8, VERR_INVALID_PARAMETER); /* At least program and length tokens. */
+
+ uint32_t const *paToken = (uint32_t *)pvShaderCode;
+
+ VGPU10ProgramToken const *pProgramToken = (VGPU10ProgramToken *)&paToken[0];
+ ASSERT_GUEST_RETURN( pProgramToken->majorVersion >= 4
+ && pProgramToken->programType <= VGPU10_COMPUTE_SHADER, VERR_INVALID_PARAMETER);
+ if (pInfo)
+ pInfo->enmProgramType = (VGPU10_PROGRAM_TYPE)pProgramToken->programType;
+
+ uint32_t const cToken = paToken[1];
+ Log6(("Shader version %d.%d type %s(%d) Length %d\n",
+ pProgramToken->majorVersion, pProgramToken->minorVersion, dxbcShaderTypeToString(pProgramToken->programType), pProgramToken->programType, cToken));
+ ASSERT_GUEST_RETURN(cbShaderCode / 4 >= cToken, VERR_INVALID_PARAMETER); /* Declared length should be less or equal to the actual. */
+
+ /* Write the parsed (and possibly modified) shader to a memory buffer. */
+ DXBCByteWriter dxbcByteWriter;
+ DXBCByteWriter *w = &dxbcByteWriter;
+ if (!dxbcByteWriterInit(w, 4096 + cbShaderCode))
+ return VERR_NO_MEMORY;
+
+ dxbcByteWriterAddTokens(w, paToken, 2);
+
+ DXBCTokenReader parser;
+ RT_ZERO(parser);
+
+ DXBCTokenReader *r = &parser;
+ r->pToken = &paToken[2];
+ r->cToken = r->cRemainingToken = cToken - 2;
+
+ DXBCOUTPUTCTX outctx;
+ dxbcOutputInit(&outctx, pProgramToken, cToken);
+
+ int rc = VINF_SUCCESS;
+ while (dxbcTokenReaderCanRead(r, 1))
+ {
+ uint32_t const offOpcode = dxbcByteWriterSize(w);
+
+ VGPUOpcode opcode;
+ rc = dxbcParseOpcode(r, &opcode);
+ ASSERT_GUEST_STMT_BREAK(RT_SUCCESS(rc), rc = VERR_INVALID_PARAMETER);
+
+ rc = dxbcOutputOpcode(&outctx, w, &opcode);
+ AssertRCBreak(rc);
+
+ if (pInfo)
+ {
+ /* Remember offsets of DCL_RESOURCE instructions. */
+ if ( outctx.programToken.programType == VGPU10_PIXEL_SHADER
+ && opcode.opcodeType == VGPU10_OPCODE_DCL_RESOURCE)
+ {
+ if ( opcode.cOperand == 1
+ && opcode.aValOperand[0].indexDimension == VGPU10_OPERAND_INDEX_1D
+ && opcode.aValOperand[0].aOperandIndex[0].indexRepresentation == VGPU10_OPERAND_INDEX_IMMEDIATE32)
+ {
+ uint32_t const indexResource = opcode.aValOperand[0].aOperandIndex[0].iOperandImmediate;
+ if (indexResource < SVGA3D_DX_MAX_SRVIEWS)
+ {
+ ASSERT_GUEST(pInfo->aOffDclResource[indexResource] == 0);
+ pInfo->aOffDclResource[indexResource] = offOpcode;
+ pInfo->cDclResource = RT_MAX(pInfo->cDclResource, indexResource + 1);
+ }
+ else
+ ASSERT_GUEST_FAILED();
+ }
+ else
+ ASSERT_GUEST_FAILED();
+ }
+
+ /* Fetch signatures. */
+ SVGA3dDXSignatureEntry *pSignatureEntry = NULL;
+ switch (opcode.opcodeType)
+ {
+ case VGPU10_OPCODE_DCL_INPUT:
+ case VGPU10_OPCODE_DCL_INPUT_SIV:
+ //case VGPU10_OPCODE_DCL_INPUT_SGV:
+ case VGPU10_OPCODE_DCL_INPUT_PS:
+ //case VGPU10_OPCODE_DCL_INPUT_PS_SIV:
+ //case VGPU10_OPCODE_DCL_INPUT_PS_SGV:
+ //case VGPU10_OPCODE_DCL_INPUT_CONTROL_POINT_COUNT:
+ ASSERT_GUEST_STMT_BREAK(pInfo->cInputSignature < RT_ELEMENTS(pInfo->aInputSignature), rc = VERR_INVALID_PARAMETER);
+ pSignatureEntry = &pInfo->aInputSignature[pInfo->cInputSignature++];
+ break;
+ case VGPU10_OPCODE_DCL_OUTPUT:
+ case VGPU10_OPCODE_DCL_OUTPUT_SIV:
+ case VGPU10_OPCODE_DCL_OUTPUT_SGV:
+ //case VGPU10_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT:
+ ASSERT_GUEST_STMT_BREAK(pInfo->cOutputSignature < RT_ELEMENTS(pInfo->aOutputSignature), rc = VERR_INVALID_PARAMETER);
+ pSignatureEntry = &pInfo->aOutputSignature[pInfo->cOutputSignature++];
+ break;
+ default:
+ break;
+ }
+
+ if (RT_FAILURE(rc))
+ break;
+
+ if (pSignatureEntry)
+ {
+ ASSERT_GUEST_STMT_BREAK( opcode.aValOperand[0].aOperandIndex[0].indexRepresentation == VGPU10_OPERAND_INDEX_IMMEDIATE32
+ || opcode.aValOperand[0].aOperandIndex[0].indexRepresentation == VGPU10_OPERAND_INDEX_IMMEDIATE64,
+ rc = VERR_NOT_SUPPORTED);
+
+ uint32_t const indexDimension = opcode.aValOperand[0].indexDimension;
+ if (indexDimension == VGPU10_OPERAND_INDEX_0D)
+ {
+ if (opcode.aValOperand[0].operandType == VGPU10_OPERAND_TYPE_INPUT_PRIMITIVEID)
+ {
+ pSignatureEntry->registerIndex = 0;
+ pSignatureEntry->semanticName = SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID;
+ }
+ else if (opcode.aValOperand[0].operandType == VGPU10_OPERAND_TYPE_OUTPUT_DEPTH)
+ {
+ /* oDepth is always last in the signature. Register index is equal to 0xFFFFFFFF. */
+ pSignatureEntry->registerIndex = 0xFFFFFFFF;
+ pSignatureEntry->semanticName = SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED;
+ }
+ else if (opcode.aValOperand[0].operandType <= VGPU10_OPERAND_TYPE_SM50_MAX)
+ {
+ pSignatureEntry->registerIndex = 0;
+ pSignatureEntry->semanticName = opcode.semanticName;
+ }
+ else
+ ASSERT_GUEST_FAILED_STMT_BREAK(rc = VERR_NOT_SUPPORTED);
+ }
+ else
+ {
+ ASSERT_GUEST_STMT_BREAK( indexDimension == VGPU10_OPERAND_INDEX_1D
+ || indexDimension == VGPU10_OPERAND_INDEX_2D
+ || indexDimension == VGPU10_OPERAND_INDEX_3D,
+ rc = VERR_NOT_SUPPORTED);
+ /* The register index seems to be in the highest dimension. */
+ pSignatureEntry->registerIndex = opcode.aValOperand[0].aOperandIndex[indexDimension - VGPU10_OPERAND_INDEX_1D].iOperandImmediate;
+ pSignatureEntry->semanticName = opcode.semanticName;
+ }
+ pSignatureEntry->mask = opcode.aValOperand[0].mask;
+ pSignatureEntry->componentType = SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN; // Will be updated by vboxDXUpdateVSInputSignature
+ pSignatureEntry->minPrecision = SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT;
+ }
+ }
+ }
+
+ if (RT_FAILURE(rc))
+ {
+ return rc;
+ }
+
+ rc = dxbcOutputFinalize(&outctx, w);
+ if (RT_FAILURE(rc))
+ {
+ return rc;
+ }
+
+ dxbcByteWriterFetchData(w, &pInfo->pvBytecode, &pInfo->cbBytecode);
+ uint32_t *pcOutputToken = (uint32_t *)pInfo->pvBytecode + 1;
+ *pcOutputToken = pInfo->cbBytecode / 4;
+
+ /* Sort signatures by register index and mask because the host API need them to be sorted. */
+ if (pInfo->cInputSignature)
+ {
+ RTSortShell(pInfo->aInputSignature, pInfo->cInputSignature, sizeof(pInfo->aInputSignature[0]),
+ signatureEntryCmp, NULL);
+ dxbcGenerateSemantics(pInfo, pInfo->cInputSignature,
+ pInfo->aInputSignature,
+ pInfo->aInputSemantic, DXBC_BLOB_TYPE_ISGN);
+ }
+ if (pInfo->cOutputSignature)
+ {
+ RTSortShell(pInfo->aOutputSignature, pInfo->cOutputSignature, sizeof(pInfo->aOutputSignature[0]),
+ signatureEntryCmp, NULL);
+ dxbcGenerateSemantics(pInfo, pInfo->cOutputSignature,
+ pInfo->aOutputSignature,
+ pInfo->aOutputSemantic, DXBC_BLOB_TYPE_OSGN);
+ }
+ if (pInfo->cPatchConstantSignature)
+ {
+ RTSortShell(pInfo->aPatchConstantSignature, pInfo->cPatchConstantSignature, sizeof(pInfo->aPatchConstantSignature[0]),
+ signatureEntryCmp, NULL);
+ dxbcGenerateSemantics(pInfo, pInfo->cPatchConstantSignature,
+ pInfo->aPatchConstantSignature,
+ pInfo->aPatchConstantSemantic, DXBC_BLOB_TYPE_PCSG);
+ }
+
+#ifdef LOG_ENABLED
+ if (pInfo->cInputSignature)
+ {
+ Log6(("Input signatures:\n"));
+ for (uint32_t i = 0; i < pInfo->cInputSignature; ++i)
+ Log6((" [%u]: %u %u 0x%X, %s %d\n",
+ i, pInfo->aInputSignature[i].registerIndex, pInfo->aInputSignature[i].semanticName, pInfo->aInputSignature[i].mask,
+ pInfo->aInputSemantic[i].pcszSemanticName, pInfo->aInputSemantic[i].SemanticIndex));
+ }
+ if (pInfo->cOutputSignature)
+ {
+ Log6(("Output signatures:\n"));
+ for (uint32_t i = 0; i < pInfo->cOutputSignature; ++i)
+ Log6((" [%u]: %u %u 0x%X, %s %d\n",
+ i, pInfo->aOutputSignature[i].registerIndex, pInfo->aOutputSignature[i].semanticName, pInfo->aOutputSignature[i].mask,
+ pInfo->aOutputSemantic[i].pcszSemanticName, pInfo->aOutputSemantic[i].SemanticIndex));
+ }
+ if (pInfo->cPatchConstantSignature)
+ {
+ Log6(("Patch constant signatures:\n"));
+ for (uint32_t i = 0; i < pInfo->cPatchConstantSignature; ++i)
+ Log6((" [%u]: %u %u 0x%X, %s %d\n",
+ i, pInfo->aPatchConstantSignature[i].registerIndex, pInfo->aPatchConstantSignature[i].semanticName, pInfo->aPatchConstantSignature[i].mask,
+ pInfo->aPatchConstantSemantic[i].pcszSemanticName, pInfo->aPatchConstantSemantic[i].SemanticIndex));
+ }
+#endif
+
+ return VINF_SUCCESS;
+}
+
+void DXShaderGenerateSemantics(DXShaderInfo *pInfo)
+{
+ if (pInfo->cInputSignature)
+ dxbcGenerateSemantics(pInfo, pInfo->cInputSignature,
+ pInfo->aInputSignature,
+ pInfo->aInputSemantic, DXBC_BLOB_TYPE_ISGN);
+ if (pInfo->cOutputSignature)
+ dxbcGenerateSemantics(pInfo, pInfo->cOutputSignature,
+ pInfo->aOutputSignature,
+ pInfo->aOutputSemantic, DXBC_BLOB_TYPE_OSGN);
+ if (pInfo->cPatchConstantSignature)
+ dxbcGenerateSemantics(pInfo, pInfo->cPatchConstantSignature,
+ pInfo->aPatchConstantSignature,
+ pInfo->aPatchConstantSemantic, DXBC_BLOB_TYPE_PCSG);
+}
+
+void DXShaderFree(DXShaderInfo *pInfo)
+{
+ RTMemFree(pInfo->pvBytecode);
+ RT_ZERO(*pInfo);
+}
+
+
+#if 0 // Unused. Replaced with dxbcSemanticInfo.
+static char const *dxbcSemanticName(SVGA3dDXSignatureSemanticName enmSemanticName)
+{
+ /* https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-semantics#system-value-semantics */
+ switch (enmSemanticName)
+ {
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_POSITION: return "SV_Position";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_CLIP_DISTANCE: return "SV_ClipDistance";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_CULL_DISTANCE: return "SV_CullDistance";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_RENDER_TARGET_ARRAY_INDEX: return "SV_RenderTargetArrayIndex";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_VIEWPORT_ARRAY_INDEX: return "SV_ViewportArrayIndex";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_VERTEX_ID: return "SV_VertexID";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID: return "SV_PrimitiveID";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_INSTANCE_ID: return "SV_InstanceID";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_IS_FRONT_FACE: return "SV_IsFrontFace";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_SAMPLE_INDEX: return "SV_SampleIndex";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR: return "SV_FinalQuadUeq0EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR: return "SV_FinalQuadVeq0EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR: return "SV_FinalQuadUeq1EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR: return "SV_FinalQuadVeq1EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR: return "SV_FinalQuadUInsideTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR: return "SV_FinalQuadVInsideTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR: return "SV_FinalTriUeq0EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR: return "SV_FinalTriVeq0EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR: return "SV_FinalTriWeq0EdgeTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_INSIDE_TESSFACTOR: return "SV_FinalTriInsideTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DETAIL_TESSFACTOR: return "SV_FinalLineDetailTessFactor";
+ case SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DENSITY_TESSFACTOR: return "SV_FinalLineDensityTessFactor";
+ default:
+ Assert(enmSemanticName == SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED);
+ break;
+ }
+ /* Generic. Arbitrary name. It does not have any meaning. */
+ return "ATTRIB";
+}
+#endif
+
+
+/* https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-semantics#system-value-semantics
+ * Type:
+ * 0 - undefined
+ * 1 - unsigned int
+ * 2 - signed int
+ * 3 - float
+ */
+typedef struct VGPUSemanticInfo
+{
+ char const *pszName;
+ uint32_t u32Type;
+} VGPUSemanticInfo;
+
+static VGPUSemanticInfo const g_aSemanticInfo[SVGADX_SIGNATURE_SEMANTIC_NAME_MAX] =
+{
+ { "ATTRIB", 0 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED 0
+ { "SV_Position", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_POSITION 1
+ { "SV_ClipDistance", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_CLIP_DISTANCE 2
+ { "SV_CullDistance", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_CULL_DISTANCE 3
+ { "SV_RenderTargetArrayIndex", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_RENDER_TARGET_ARRAY_INDEX 4
+ { "SV_ViewportArrayIndex", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_VIEWPORT_ARRAY_INDEX 5
+ { "SV_VertexID", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_VERTEX_ID 6
+ { "SV_PrimitiveID", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID 7
+ { "SV_InstanceID", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_INSTANCE_ID 8
+ { "SV_IsFrontFace", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_IS_FRONT_FACE 9
+ { "SV_SampleIndex", 1 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_SAMPLE_INDEX 10
+ /** @todo Is this a correct name for all TessFactors? */
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR 11
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR 12
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR 13
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR 14
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR 15
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR 16
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR 17
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR 18
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR 19
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_INSIDE_TESSFACTOR 20
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DETAIL_TESSFACTOR 21
+ { "SV_TessFactor", 3 }, // SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DENSITY_TESSFACTOR 22
+};
+
+static VGPUSemanticInfo const g_SemanticPSOutput =
+ { "SV_TARGET", 3 }; // SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED 0
+
+
+static VGPUSemanticInfo const *dxbcSemanticInfo(DXShaderInfo const *pInfo, SVGA3dDXSignatureSemanticName enmSemanticName, uint32_t u32BlobType)
+{
+ if (enmSemanticName < RT_ELEMENTS(g_aSemanticInfo))
+ {
+ if ( enmSemanticName == 0
+ && pInfo->enmProgramType == VGPU10_PIXEL_SHADER
+ && u32BlobType == DXBC_BLOB_TYPE_OSGN)
+ return &g_SemanticPSOutput;
+ return &g_aSemanticInfo[enmSemanticName];
+ }
+ return &g_aSemanticInfo[0];
+}
+
+
+static void dxbcGenerateSemantics(DXShaderInfo *pInfo, uint32_t cSignature,
+ SVGA3dDXSignatureEntry const *paSignature,
+ DXShaderAttributeSemantic *paSemantic,
+ uint32_t u32BlobType)
+{
+ for (uint32_t iSignatureEntry = 0; iSignatureEntry < cSignature; ++iSignatureEntry)
+ {
+ SVGA3dDXSignatureEntry const *src = &paSignature[iSignatureEntry];
+ DXShaderAttributeSemantic *dst = &paSemantic[iSignatureEntry];
+
+ ASSERT_GUEST_RETURN_VOID(src->semanticName < SVGADX_SIGNATURE_SEMANTIC_NAME_MAX);
+
+ VGPUSemanticInfo const *pSemanticInfo = dxbcSemanticInfo(pInfo, src->semanticName, u32BlobType);
+ dst->pcszSemanticName = pSemanticInfo->pszName;
+ dst->SemanticIndex = 0;
+ for (uint32_t i = 0; i < iSignatureEntry; ++i)
+ {
+ DXShaderAttributeSemantic const *pSemantic = &paSemantic[i];
+ if (RTStrCmp(pSemantic->pcszSemanticName, dst->pcszSemanticName) == 0)
+ ++dst->SemanticIndex;
+ }
+ }
+}
+
+
+static int dxbcCreateIOSGNBlob(DXShaderInfo const *pInfo, DXBCHeader *pHdr, uint32_t u32BlobType, uint32_t cSignature,
+ SVGA3dDXSignatureEntry const *paSignature, DXShaderAttributeSemantic const *paSemantic, DXBCByteWriter *w)
+{
+ RT_NOREF(pInfo);
+ AssertReturn(cSignature <= SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS, VERR_INVALID_PARAMETER);
+
+ uint32_t cbBlob = RT_UOFFSETOF_DYN(DXBCBlobIOSGN, aElement[cSignature]);
+ if (!dxbcByteWriterCanWrite(w, sizeof(DXBCBlobHeader) + cbBlob))
+ return VERR_NO_MEMORY;
+
+ Log6(("Create signature type %c%c%c%c (0x%RX32)\n",
+ RT_BYTE1(u32BlobType), RT_BYTE2(u32BlobType), RT_BYTE3(u32BlobType), RT_BYTE4(u32BlobType), u32BlobType));
+
+ DXBCBlobHeader *pHdrBlob = (DXBCBlobHeader *)dxbcByteWriterPtr(w);
+ pHdrBlob->u32BlobType = u32BlobType;
+ // pHdrBlob->cbBlob = 0;
+
+ DXBCBlobIOSGN *pHdrISGN = (DXBCBlobIOSGN *)&pHdrBlob[1];
+ pHdrISGN->cElement = cSignature;
+ pHdrISGN->offElement = RT_UOFFSETOF(DXBCBlobIOSGN, aElement[0]);
+
+ for (uint32_t iSignatureEntry = 0; iSignatureEntry < cSignature; ++iSignatureEntry)
+ {
+ SVGA3dDXSignatureEntry const *srcEntry = &paSignature[iSignatureEntry];
+ DXShaderAttributeSemantic const *srcSemantic = &paSemantic[iSignatureEntry];
+ DXBCBlobIOSGNElement *dst = &pHdrISGN->aElement[iSignatureEntry];
+
+ dst->offElementName = 0;
+ for (uint32_t i = 0; i < iSignatureEntry; ++i)
+ {
+ DXBCBlobIOSGNElement const *pElement = &pHdrISGN->aElement[i];
+ char const *pszElementName = (char *)pHdrISGN + pElement->offElementName;
+ if (RTStrCmp(pszElementName, srcSemantic->pcszSemanticName) == 0)
+ {
+ dst->offElementName = pElement->offElementName;
+ break;
+ }
+ }
+ dst->idxSemantic = srcSemantic->SemanticIndex;
+ dst->enmSystemValue = srcEntry->semanticName;
+ dst->enmComponentType = srcEntry->componentType;
+ dst->idxRegister = srcEntry->registerIndex;
+ dst->u.mask = srcEntry->mask;
+
+ Log6((" [%u]: %s[%u] sv %u type %u reg %u mask %X\n",
+ iSignatureEntry, srcSemantic->pcszSemanticName, dst->idxSemantic,
+ dst->enmSystemValue, dst->enmComponentType, dst->idxRegister, dst->u.mask));
+
+ if (dst->offElementName == 0)
+ {
+ /* Store the semantic name for this element. */
+ dst->offElementName = cbBlob; /* Offset of the semantic's name relative to the start of the blob (without DXBCBlobHeader). */
+ uint32_t const cbElementName = (uint32_t)strlen(srcSemantic->pcszSemanticName) + 1;
+ if (!dxbcByteWriterCanWrite(w, sizeof(DXBCBlobHeader) + cbBlob + cbElementName))
+ return VERR_NO_MEMORY;
+
+ memcpy((char *)pHdrISGN + dst->offElementName, srcSemantic->pcszSemanticName, cbElementName);
+ cbBlob += cbElementName;
+ }
+ }
+
+ /* Blobs are 4 bytes aligned. Commit the blob data. */
+ cbBlob = RT_ALIGN_32(cbBlob, 4);
+ pHdrBlob->cbBlob = cbBlob;
+ pHdr->cbTotal += cbBlob + sizeof(DXBCBlobHeader);
+ dxbcByteWriterCommit(w, cbBlob + sizeof(DXBCBlobHeader));
+ return VINF_SUCCESS;
+}
+
+
+static int dxbcCreateSHDRBlob(DXBCHeader *pHdr, uint32_t u32BlobType,
+ void const *pvShader, uint32_t cbShader, DXBCByteWriter *w)
+{
+ uint32_t cbBlob = cbShader;
+ if (!dxbcByteWriterCanWrite(w, sizeof(DXBCBlobHeader) + cbBlob))
+ return VERR_NO_MEMORY;
+
+ DXBCBlobHeader *pHdrBlob = (DXBCBlobHeader *)dxbcByteWriterPtr(w);
+ pHdrBlob->u32BlobType = u32BlobType;
+ // pHdrBlob->cbBlob = 0;
+
+ memcpy(&pHdrBlob[1], pvShader, cbShader);
+
+ /* Blobs are 4 bytes aligned. Commit the blob data. */
+ cbBlob = RT_ALIGN_32(cbBlob, 4);
+ pHdrBlob->cbBlob = cbBlob;
+ pHdr->cbTotal += cbBlob + sizeof(DXBCBlobHeader);
+ dxbcByteWriterCommit(w, cbBlob + sizeof(DXBCBlobHeader));
+ return VINF_SUCCESS;
+}
+
+
+/*
+ * Create a DXBC container with signature and shader code data blobs.
+ */
+static int dxbcCreateFromInfo(DXShaderInfo const *pInfo, void const *pvShader, uint32_t cbShader, DXBCByteWriter *w)
+{
+ int rc;
+
+ /* Create a DXBC container with ISGN, OSGN and SHDR blobs. */
+ uint32_t cBlob = 3;
+ if ( pInfo->enmProgramType == VGPU10_HULL_SHADER
+ || pInfo->enmProgramType == VGPU10_DOMAIN_SHADER)
+ ++cBlob;
+
+ uint32_t const cbHdr = RT_UOFFSETOF_DYN(DXBCHeader, aBlobOffset[cBlob]); /* Header with blob offsets. */
+ if (!dxbcByteWriterCanWrite(w, cbHdr))
+ return VERR_NO_MEMORY;
+
+ /* Container header. */
+ DXBCHeader *pHdr = (DXBCHeader *)dxbcByteWriterPtr(w);
+ pHdr->u32DXBC = DXBC_MAGIC;
+ // RT_ZERO(pHdr->au8Hash);
+ pHdr->u32Version = 1;
+ pHdr->cbTotal = cbHdr;
+ pHdr->cBlob = cBlob;
+ //RT_ZERO(pHdr->aBlobOffset);
+ dxbcByteWriterCommit(w, cbHdr);
+
+#ifdef LOG_ENABLED
+ if (pInfo->cInputSignature)
+ {
+ Log6(("Input signatures:\n"));
+ for (uint32_t i = 0; i < pInfo->cInputSignature; ++i)
+ Log6((" [%u]: %u %u 0x%X, %s %d\n",
+ i, pInfo->aInputSignature[i].registerIndex, pInfo->aInputSignature[i].semanticName, pInfo->aInputSignature[i].mask,
+ pInfo->aInputSemantic[i].pcszSemanticName, pInfo->aInputSemantic[i].SemanticIndex));
+ }
+ if (pInfo->cOutputSignature)
+ {
+ Log6(("Output signatures:\n"));
+ for (uint32_t i = 0; i < pInfo->cOutputSignature; ++i)
+ Log6((" [%u]: %u %u 0x%X, %s %d\n",
+ i, pInfo->aOutputSignature[i].registerIndex, pInfo->aOutputSignature[i].semanticName, pInfo->aOutputSignature[i].mask,
+ pInfo->aOutputSemantic[i].pcszSemanticName, pInfo->aOutputSemantic[i].SemanticIndex));
+ }
+ if (pInfo->cPatchConstantSignature)
+ {
+ Log6(("Patch constant signatures:\n"));
+ for (uint32_t i = 0; i < pInfo->cPatchConstantSignature; ++i)
+ Log6((" [%u]: %u %u 0x%X, %s %d\n",
+ i, pInfo->aPatchConstantSignature[i].registerIndex, pInfo->aPatchConstantSignature[i].semanticName, pInfo->aPatchConstantSignature[i].mask,
+ pInfo->aPatchConstantSemantic[i].pcszSemanticName, pInfo->aPatchConstantSemantic[i].SemanticIndex));
+ }
+#endif
+
+ /* Blobs. */
+ uint32_t iBlob = 0;
+
+ pHdr->aBlobOffset[iBlob++] = dxbcByteWriterSize(w);
+ rc = dxbcCreateIOSGNBlob(pInfo, pHdr, DXBC_BLOB_TYPE_ISGN, pInfo->cInputSignature, &pInfo->aInputSignature[0], pInfo->aInputSemantic, w);
+ AssertRCReturn(rc, rc);
+
+ pHdr->aBlobOffset[iBlob++] = dxbcByteWriterSize(w);
+ rc = dxbcCreateIOSGNBlob(pInfo, pHdr, DXBC_BLOB_TYPE_OSGN, pInfo->cOutputSignature, &pInfo->aOutputSignature[0], pInfo->aOutputSemantic, w);
+ AssertRCReturn(rc, rc);
+
+ if ( pInfo->enmProgramType == VGPU10_HULL_SHADER
+ || pInfo->enmProgramType == VGPU10_DOMAIN_SHADER)
+ {
+ pHdr->aBlobOffset[iBlob++] = dxbcByteWriterSize(w);
+ rc = dxbcCreateIOSGNBlob(pInfo, pHdr, DXBC_BLOB_TYPE_PCSG, pInfo->cPatchConstantSignature, &pInfo->aPatchConstantSignature[0], pInfo->aPatchConstantSemantic, w);
+ AssertRCReturn(rc, rc);
+ }
+
+ pHdr->aBlobOffset[iBlob++] = dxbcByteWriterSize(w);
+ rc = dxbcCreateSHDRBlob(pHdr, DXBC_BLOB_TYPE_SHDR, pvShader, cbShader, w);
+ AssertRCReturn(rc, rc);
+
+ Assert(iBlob == cBlob);
+
+ AssertCompile(RT_UOFFSETOF(DXBCHeader, u32Version) == 0x14);
+ dxbcHash(&pHdr->u32Version, pHdr->cbTotal - RT_UOFFSETOF(DXBCHeader, u32Version), pHdr->au8Hash);
+
+ return VINF_SUCCESS;
+}
+
+
+int DXShaderCreateDXBC(DXShaderInfo const *pInfo, void **ppvDXBC, uint32_t *pcbDXBC)
+{
+ /* Build DXBC container. */
+ int rc;
+ DXBCByteWriter dxbcByteWriter;
+ DXBCByteWriter *w = &dxbcByteWriter;
+ if (dxbcByteWriterInit(w, 4096 + pInfo->cbBytecode))
+ {
+ rc = dxbcCreateFromInfo(pInfo, pInfo->pvBytecode, pInfo->cbBytecode, w);
+ if (RT_SUCCESS(rc))
+ dxbcByteWriterFetchData(w, ppvDXBC, pcbDXBC);
+ }
+ else
+ rc = VERR_NO_MEMORY;
+ return rc;
+}
+
+
+static char const *dxbcGetOutputSemanticName(DXShaderInfo const *pInfo, uint32_t idxRegister, uint32_t u32BlobType,
+ uint32_t cSignature, SVGA3dDXSignatureEntry const *paSignature,
+ SVGA3dDXSignatureSemanticName *pSemanticName)
+{
+ for (uint32_t i = 0; i < cSignature; ++i)
+ {
+ SVGA3dDXSignatureEntry const *p = &paSignature[i];
+ if (p->registerIndex == idxRegister)
+ {
+ AssertReturn(p->semanticName < SVGADX_SIGNATURE_SEMANTIC_NAME_MAX, NULL);
+ VGPUSemanticInfo const *pSemanticInfo = dxbcSemanticInfo(pInfo, p->semanticName, u32BlobType);
+ *pSemanticName = p->semanticName;
+ return pSemanticInfo->pszName;
+ }
+ }
+ return NULL;
+}
+
+char const *DXShaderGetOutputSemanticName(DXShaderInfo const *pInfo, uint32_t idxRegister, SVGA3dDXSignatureSemanticName *pSemanticName)
+{
+ return dxbcGetOutputSemanticName(pInfo, idxRegister, DXBC_BLOB_TYPE_OSGN, pInfo->cOutputSignature, &pInfo->aOutputSignature[0], pSemanticName);
+}
+
+VGPU10_RESOURCE_RETURN_TYPE DXShaderResourceReturnTypeFromFormat(SVGA3dSurfaceFormat format)
+{
+ /** @todo This is auto-generated from format names and needs a review. */
+ switch (format)
+ {
+ case SVGA3D_R32G32B32A32_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R32G32B32A32_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R32G32B32_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R32G32B32_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R32G32B32_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R16G16B16A16_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R16G16B16A16_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R16G16B16A16_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R32G32_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R32G32_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_D32_FLOAT_S8X24_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R32_FLOAT_X8X24: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_X32_G8X24_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R10G10B10A2_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R11G11B10_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R8G8B8A8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R8G8B8A8_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R8G8B8A8_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R8G8B8A8_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R16G16_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R16G16_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_D32_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R32_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R32_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_D24_UNORM_S8_UINT: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R24_UNORM_X8: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_X24_G8_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R8G8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R8G8_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R8G8_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R16_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R16_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R16_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R16_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R8_UINT: return VGPU10_RETURN_TYPE_UINT;
+ case SVGA3D_R8_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R8_SINT: return VGPU10_RETURN_TYPE_SINT;
+ case SVGA3D_R8G8_B8G8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_G8R8_G8B8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC1_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC2_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC3_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC4_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_BC5_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R10G10B10_XR_BIAS_A2_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B8G8R8A8_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B8G8R8X8_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R32G32B32A32_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R16G16B16A16_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R16G16B16A16_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R32G32_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R10G10B10A2_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R8G8B8A8_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R16G16_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R16G16_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R16G16_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R32_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_R8G8_SNORM: return VGPU10_RETURN_TYPE_SNORM;
+ case SVGA3D_R16_FLOAT: return VGPU10_RETURN_TYPE_FLOAT;
+ case SVGA3D_D16_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_A8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC1_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC2_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC3_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B5G6R5_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B5G5R5A1_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B8G8R8A8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B8G8R8X8_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC4_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC5_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_B4G4R4A4_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC7_UNORM: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_BC7_UNORM_SRGB: return VGPU10_RETURN_TYPE_UNORM;
+ case SVGA3D_R9G9B9E5_SHAREDEXP: return VGPU10_RETURN_TYPE_FLOAT;
+ default:
+ break;
+ }
+ return VGPU10_RETURN_TYPE_UNORM;
+}
+
+
+SVGA3dDXSignatureRegisterComponentType DXShaderComponentTypeFromFormat(SVGA3dSurfaceFormat format)
+{
+ /** @todo This is auto-generated from format names and needs a review. */
+ switch (format)
+ {
+ case SVGA3D_R32G32B32A32_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R32G32B32A32_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R32G32B32_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R32G32B32_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R32G32B32_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R16G16B16A16_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R16G16B16A16_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16G16B16A16_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R32G32_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R32G32_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_D32_FLOAT_S8X24_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R32_FLOAT_X8X24: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_X32_G8X24_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R10G10B10A2_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R11G11B10_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8G8B8A8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8G8B8A8_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8G8B8A8_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R8G8B8A8_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R16G16_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R16G16_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_D32_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R32_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R32_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_D24_UNORM_S8_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R24_UNORM_X8: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_X24_G8_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R8G8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8G8_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R8G8_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R16_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R16_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8_UINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32;
+ case SVGA3D_R8_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8_SINT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32;
+ case SVGA3D_R8G8_B8G8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_G8R8_G8B8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC1_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC2_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC3_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC4_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC5_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R10G10B10_XR_BIAS_A2_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B8G8R8A8_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B8G8R8X8_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R32G32B32A32_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16G16B16A16_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16G16B16A16_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R32G32_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R10G10B10A2_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8G8B8A8_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16G16_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16G16_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16G16_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R32_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R8G8_SNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R16_FLOAT: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_D16_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_A8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC1_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC2_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC3_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B5G6R5_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B5G5R5A1_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B8G8R8A8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B8G8R8X8_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC4_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC5_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_B4G4R4A4_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC7_UNORM: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_BC7_UNORM_SRGB: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ case SVGA3D_R9G9B9E5_SHAREDEXP: return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+ default:
+ break;
+ }
+ return SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32;
+}
+
+
+int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension,
+ VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources)
+{
+ for (uint32_t i = 0; i < pInfo->cDclResource; ++i)
+ {
+ VGPU10_RESOURCE_DIMENSION const resourceDimension = i < cResources ? paResourceDimension[i] : VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
+ AssertContinue(resourceDimension <= VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY);
+
+ VGPU10_RESOURCE_RETURN_TYPE const resourceReturnType = i < cResources ? paResourceReturnType[i] : VGPU10_RETURN_TYPE_FLOAT;
+ AssertContinue(resourceReturnType <= VGPU10_RETURN_TYPE_MIXED);
+
+ uint32_t const offToken = pInfo->aOffDclResource[i];
+ AssertContinue(offToken < pInfo->cbBytecode);
+ if (offToken == 0) /* nothing at this index */
+ continue;
+
+ uint32_t *paToken = (uint32_t *)((uintptr_t)pInfo->pvBytecode + offToken);
+
+ VGPU10OpcodeToken0 *pOpcode = (VGPU10OpcodeToken0 *)&paToken[0];
+ pOpcode->resourceDimension = resourceDimension;
+ // paToken[1] unmodified
+ // paToken[2] unmodified
+ VGPU10ResourceReturnTypeToken *pReturnTypeToken = (VGPU10ResourceReturnTypeToken *)&paToken[3];
+ pReturnTypeToken->component0 = (uint8_t)resourceReturnType;
+ pReturnTypeToken->component1 = (uint8_t)resourceReturnType;
+ pReturnTypeToken->component2 = (uint8_t)resourceReturnType;
+ pReturnTypeToken->component3 = (uint8_t)resourceReturnType;
+ }
+
+ return VINF_SUCCESS;
+}
+
+#ifdef DXBC_STANDALONE_TEST
+static int dxbcCreateFromBytecode(void const *pvShaderCode, uint32_t cbShaderCode, void **ppvDXBC, uint32_t *pcbDXBC)
+{
+ /* Parse the shader bytecode and create DXBC container with resource, signature and shader bytecode blobs. */
+ DXShaderInfo info;
+ RT_ZERO(info);
+ int rc = DXShaderParse(pvShaderCode, cbShaderCode, &info);
+ if (RT_SUCCESS(rc))
+ rc = DXShaderCreateDXBC(&info, ppvDXBC, pcbDXBC);
+ return rc;
+}
+
+static int parseShaderVM(void const *pvShaderCode, uint32_t cbShaderCode)
+{
+ void *pv = NULL;
+ uint32_t cb = 0;
+ int rc = dxbcCreateFromBytecode(pvShaderCode, cbShaderCode, &pv, &cb);
+ if (RT_SUCCESS(rc))
+ {
+ /* Hexdump DXBC */
+ printf("{\n");
+ uint8_t *pu8 = (uint8_t *)pv;
+ for (uint32_t i = 0; i < cb; ++i)
+ {
+ if ((i % 16) == 0)
+ {
+ if (i > 0)
+ printf(",\n");
+
+ printf(" 0x%02x", pu8[i]);
+ }
+ else
+ {
+ printf(", 0x%02x", pu8[i]);
+ }
+ }
+ printf("\n");
+ printf("};\n");
+
+ RTMemFree(pv);
+ }
+
+ return rc;
+}
+
+static DXBCBlobHeader *dxbcFindBlob(DXBCHeader *pDXBCHeader, uint32_t u32BlobType)
+{
+ uint8_t const *pu8DXBCBegin = (uint8_t *)pDXBCHeader;
+ for (uint32_t i = 0; i < pDXBCHeader->cBlob; ++i)
+ {
+ DXBCBlobHeader *pCurrentBlob = (DXBCBlobHeader *)&pu8DXBCBegin[pDXBCHeader->aBlobOffset[i]];
+ if (pCurrentBlob->u32BlobType == u32BlobType)
+ return pCurrentBlob;
+ }
+ return NULL;
+}
+
+static int dxbcExtractShaderCode(DXBCHeader *pDXBCHeader, void **ppvCode, uint32_t *pcbCode)
+{
+ DXBCBlobHeader *pBlob = dxbcFindBlob(pDXBCHeader, DXBC_BLOB_TYPE_SHDR);
+ AssertReturn(pBlob, VERR_NOT_IMPLEMENTED);
+
+ DXBCBlobSHDR *pSHDR = (DXBCBlobSHDR *)&pBlob[1];
+ *pcbCode = pSHDR->cToken * 4;
+ *ppvCode = RTMemAlloc(*pcbCode);
+ AssertReturn(*ppvCode, VERR_NO_MEMORY);
+
+ memcpy(*ppvCode, pSHDR, *pcbCode);
+ return VINF_SUCCESS;
+}
+
+static int parseShaderDXBC(void const *pvDXBC)
+{
+ DXBCHeader *pDXBCHeader = (DXBCHeader *)pvDXBC;
+ void *pvShaderCode = NULL;
+ uint32_t cbShaderCode = 0;
+ int rc = dxbcExtractShaderCode(pDXBCHeader, &pvShaderCode, &cbShaderCode);
+ if (RT_SUCCESS(rc))
+ {
+ rc = parseShaderVM(pvShaderCode, cbShaderCode);
+ RTMemFree(pvShaderCode);
+ }
+ return rc;
+}
+#endif /* DXBC_STANDALONE_TEST */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h
new file mode 100644
index 00000000..784accec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h
@@ -0,0 +1,87 @@
+/* $Id: DevVGA-SVGA3d-dx-shader.h $ */
+/** @file
+ * DevVGA - VMWare SVGA device - VGPU10+ (DX) shader utilities.
+ */
+
+/*
+ * Copyright (C) 2020-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_dx_shader_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_dx_shader_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifndef VMSVGA3D_DX
+# error "This include file is for VMSVGA3D_DX."
+#endif
+
+#include <iprt/types.h>
+
+#include "vmsvga_headers_begin.h"
+#pragma pack(1) /* VMSVGA structures are '__packed'. */
+#include <svga3d_reg.h>
+#include <VGPU10ShaderTokens.h>
+#pragma pack()
+#include "vmsvga_headers_end.h"
+
+/* SVGA3dDXSignatureRegisterComponentType (D3D10_SB_REGISTER_COMPONENT_TYPE) */
+#define SVGADX_SIGNATURE_REGISTER_COMPONENT_UINT32 1
+#define SVGADX_SIGNATURE_REGISTER_COMPONENT_SINT32 2
+#define SVGADX_SIGNATURE_REGISTER_COMPONENT_FLOAT32 3
+
+typedef struct DXShaderAttributeSemantic
+{
+ const char *pcszSemanticName;
+ uint32_t SemanticIndex;
+} DXShaderAttributeSemantic;
+
+typedef struct DXShaderInfo
+{
+ VGPU10_PROGRAM_TYPE enmProgramType;
+ bool fGuestSignatures : 1;
+ void *pvBytecode;
+ uint32_t cbBytecode;
+ uint32_t cInputSignature;
+ uint32_t cOutputSignature;
+ uint32_t cPatchConstantSignature;
+ uint32_t cDclResource;
+ SVGA3dDXSignatureEntry aInputSignature[32];
+ SVGA3dDXSignatureEntry aOutputSignature[32];
+ SVGA3dDXSignatureEntry aPatchConstantSignature[32];
+ DXShaderAttributeSemantic aInputSemantic[32];
+ DXShaderAttributeSemantic aOutputSemantic[32];
+ DXShaderAttributeSemantic aPatchConstantSemantic[32];
+ uint32_t aOffDclResource[SVGA3D_DX_MAX_SRVIEWS];
+} DXShaderInfo;
+
+int DXShaderParse(void const *pvCode, uint32_t cbCode, DXShaderInfo *pInfo);
+void DXShaderGenerateSemantics(DXShaderInfo *pInfo);
+void DXShaderFree(DXShaderInfo *pInfo);
+int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension,
+ VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources);
+VGPU10_RESOURCE_RETURN_TYPE DXShaderResourceReturnTypeFromFormat(SVGA3dSurfaceFormat format);
+SVGA3dDXSignatureRegisterComponentType DXShaderComponentTypeFromFormat(SVGA3dSurfaceFormat format);
+int DXShaderCreateDXBC(DXShaderInfo const *pInfo, void **ppvDXBC, uint32_t *pcbDXBC);
+char const *DXShaderGetOutputSemanticName(DXShaderInfo const *pInfo, uint32_t idxRegister, SVGA3dDXSignatureSemanticName *pSemanticName);
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_dx_shader_h */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
new file mode 100644
index 00000000..8e4dca4a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
@@ -0,0 +1,3327 @@
+/* $Id: DevVGA-SVGA3d-dx.cpp $ */
+/** @file
+ * DevSVGA3d - VMWare SVGA device, 3D parts - Common code for DX backend interface.
+ */
+
+/*
+ * Copyright (C) 2020-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/AssertGuest.h>
+#include <iprt/errcore.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pdmdev.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "DevVGA-SVGA3d-internal.h"
+#include "DevVGA-SVGA-internal.h"
+
+
+/*
+ * Helpers.
+ */
+
+static int dxMobWrite(PVMSVGAR3STATE pSvgaR3State, SVGAMobId mobid, uint32_t off, void const *pvData, uint32_t cbData)
+{
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, mobid);
+ ASSERT_GUEST_RETURN(pMob, VERR_INVALID_STATE);
+
+ return vmsvgaR3MobWrite(pSvgaR3State, pMob, off, pvData, cbData);
+}
+
+
+/*
+ *
+ * Command handlers.
+ *
+ */
+
+int vmsvga3dDXUnbindContext(PVGASTATECC pThisCC, uint32_t cid, SVGADXContextMobFormat *pSvgaDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ /* Copy the host structure back to the guest memory. */
+ memcpy(pSvgaDXContext, &pDXContext->svgaDXContext, sizeof(*pSvgaDXContext));
+
+ return rc;
+}
+
+
+int vmsvga3dDXSwitchContext(PVGASTATECC pThisCC, uint32_t cid)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSwitchContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ /* Notify the host backend that context is about to be switched. */
+ rc = pSvgaR3State->pFuncsDX->pfnDXSwitchContext(pThisCC, pDXContext);
+ if (rc == VINF_NOT_IMPLEMENTED || RT_FAILURE(rc))
+ return rc;
+
+ /** @todo Keep track of changes in the pipeline and apply only modified state. */
+ /* It is not necessary to restore SVGADXContextMobFormat::shaderState::shaderResources
+ * because they are applied by the backend before each Draw call.
+ */
+ #define DX_STATE_VS 0x00000001
+ #define DX_STATE_PS 0x00000002
+ #define DX_STATE_SAMPLERS 0x00000004
+ #define DX_STATE_INPUTLAYOUT 0x00000008
+ #define DX_STATE_TOPOLOGY 0x00000010
+ #define DX_STATE_BLENDSTATE 0x00000080
+ #define DX_STATE_DEPTHSTENCILSTATE 0x00000100
+ #define DX_STATE_SOTARGETS 0x00000200
+ #define DX_STATE_VIEWPORTS 0x00000400
+ #define DX_STATE_SCISSORRECTS 0x00000800
+ #define DX_STATE_RASTERIZERSTATE 0x00001000
+ #define DX_STATE_RENDERTARGETS 0x00002000
+ #define DX_STATE_GS 0x00004000
+ uint32_t u32TrackedState = 0
+ | DX_STATE_VS
+ | DX_STATE_PS
+ | DX_STATE_SAMPLERS
+ | DX_STATE_INPUTLAYOUT
+ | DX_STATE_TOPOLOGY
+ | DX_STATE_BLENDSTATE
+ | DX_STATE_DEPTHSTENCILSTATE
+ | DX_STATE_SOTARGETS
+ | DX_STATE_VIEWPORTS
+ | DX_STATE_SCISSORRECTS
+ | DX_STATE_RASTERIZERSTATE
+ | DX_STATE_RENDERTARGETS
+ | DX_STATE_GS
+ ;
+
+ LogFunc(("cid = %d, state = 0x%08X\n", cid, u32TrackedState));
+
+ if (u32TrackedState & DX_STATE_VS)
+ {
+ u32TrackedState &= ~DX_STATE_VS;
+
+ SVGA3dShaderType const shaderType = SVGA3D_SHADERTYPE_VS;
+
+ uint32_t const idxShaderState = shaderType - SVGA3D_SHADERTYPE_MIN;
+ SVGA3dShaderId shaderId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContext, shaderId, shaderType);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_PS)
+ {
+ u32TrackedState &= ~DX_STATE_PS;
+
+ SVGA3dShaderType const shaderType = SVGA3D_SHADERTYPE_PS;
+
+ uint32_t const idxShaderState = shaderType - SVGA3D_SHADERTYPE_MIN;
+ SVGA3dShaderId shaderId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContext, shaderId, shaderType);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_GS)
+ {
+ u32TrackedState &= ~DX_STATE_GS;
+
+ SVGA3dShaderType const shaderType = SVGA3D_SHADERTYPE_GS;
+
+ uint32_t const idxShaderState = shaderType - SVGA3D_SHADERTYPE_MIN;
+ SVGA3dShaderId shaderId = pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContext, shaderId, shaderType);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_SAMPLERS)
+ {
+ u32TrackedState &= ~DX_STATE_SAMPLERS;
+
+ for (int i = SVGA3D_SHADERTYPE_MIN; i < SVGA3D_SHADERTYPE_MAX; ++i)
+ {
+ SVGA3dShaderType const shaderType = (SVGA3dShaderType)i;
+ uint32_t const idxShaderState = shaderType - SVGA3D_SHADERTYPE_MIN;
+
+ uint32_t startSampler = 0;
+ uint32_t cSamplerId = SVGA3D_DX_MAX_SAMPLERS;
+ SVGA3dSamplerId *paSamplerId = &pDXContext->svgaDXContext.shaderState[idxShaderState].samplers[0];
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetSamplers(pThisCC, pDXContext, startSampler, shaderType, cSamplerId, paSamplerId);
+ AssertRC(rc);
+ }
+ }
+
+
+ if (u32TrackedState & DX_STATE_INPUTLAYOUT)
+ {
+ u32TrackedState &= ~DX_STATE_INPUTLAYOUT;
+
+ SVGA3dElementLayoutId const elementLayoutId = pDXContext->svgaDXContext.inputAssembly.layoutId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetInputLayout(pThisCC, pDXContext, elementLayoutId);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_TOPOLOGY)
+ {
+ u32TrackedState &= ~DX_STATE_TOPOLOGY;
+
+ SVGA3dPrimitiveType const topology = (SVGA3dPrimitiveType)pDXContext->svgaDXContext.inputAssembly.topology;
+
+ if (topology != SVGA3D_PRIMITIVE_INVALID)
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetTopology(pThisCC, pDXContext, topology);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_BLENDSTATE)
+ {
+ u32TrackedState &= ~DX_STATE_BLENDSTATE;
+
+ SVGA3dBlendStateId const blendId = pDXContext->svgaDXContext.renderState.blendStateId;
+ /* SVGADXContextMobFormat uses uint32_t array to store the blend factors, however they are in fact 32 bit floats. */
+ float const *paBlendFactor = (float *)&pDXContext->svgaDXContext.renderState.blendFactor[0];
+ uint32_t const sampleMask = pDXContext->svgaDXContext.renderState.sampleMask;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetBlendState(pThisCC, pDXContext, blendId, paBlendFactor, sampleMask);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_DEPTHSTENCILSTATE)
+ {
+ u32TrackedState &= ~DX_STATE_DEPTHSTENCILSTATE;
+
+ SVGA3dDepthStencilStateId const depthStencilId = pDXContext->svgaDXContext.renderState.depthStencilStateId;
+ uint32_t const stencilRef = pDXContext->svgaDXContext.renderState.stencilRef;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetDepthStencilState(pThisCC, pDXContext, depthStencilId, stencilRef);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_SOTARGETS)
+ {
+ u32TrackedState &= ~DX_STATE_SOTARGETS;
+
+ uint32_t cSoTarget = SVGA3D_DX_MAX_SOTARGETS;
+ SVGA3dSoTarget aSoTarget[SVGA3D_DX_MAX_SOTARGETS];
+ for (uint32_t i = 0; i < SVGA3D_DX_MAX_SOTARGETS; ++i)
+ {
+ aSoTarget[i].sid = pDXContext->svgaDXContext.streamOut.targets[i];
+ /** @todo Offset is not stored in svgaDXContext. Should it be stored elsewhere by the host? */
+ aSoTarget[i].offset = 0;
+ aSoTarget[i].sizeInBytes = 0;
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetSOTargets(pThisCC, pDXContext, cSoTarget, aSoTarget);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_VIEWPORTS)
+ {
+ u32TrackedState &= ~DX_STATE_VIEWPORTS;
+
+ uint32_t const cViewport = pDXContext->svgaDXContext.numViewports;
+ SVGA3dViewport const *paViewport = &pDXContext->svgaDXContext.viewports[0];
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetViewports(pThisCC, pDXContext, cViewport, paViewport);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_SCISSORRECTS)
+ {
+ u32TrackedState &= ~DX_STATE_SCISSORRECTS;
+
+ uint32_t const cRect = pDXContext->svgaDXContext.numScissorRects;
+ SVGASignedRect const *paRect = &pDXContext->svgaDXContext.scissorRects[0];
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetScissorRects(pThisCC, pDXContext, cRect, paRect);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_RASTERIZERSTATE)
+ {
+ u32TrackedState &= ~DX_STATE_RASTERIZERSTATE;
+
+ SVGA3dRasterizerStateId const rasterizerId = pDXContext->svgaDXContext.renderState.rasterizerStateId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetRasterizerState(pThisCC, pDXContext, rasterizerId);
+ AssertRC(rc);
+ }
+
+
+ if (u32TrackedState & DX_STATE_RENDERTARGETS)
+ {
+ u32TrackedState &= ~DX_STATE_RENDERTARGETS;
+
+ SVGA3dDepthStencilViewId const depthStencilViewId = (SVGA3dDepthStencilViewId)pDXContext->svgaDXContext.renderState.depthStencilViewId;
+ uint32_t const cRenderTargetViewId = SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS;
+ SVGA3dRenderTargetViewId const *paRenderTargetViewId = (SVGA3dRenderTargetViewId *)&pDXContext->svgaDXContext.renderState.renderTargetViewIds[0];
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetRenderTargets(pThisCC, pDXContext, depthStencilViewId, cRenderTargetViewId, paRenderTargetViewId);
+ AssertRC(rc);
+ }
+
+ Assert(u32TrackedState == 0);
+
+ return rc;
+}
+
+
+/**
+ * Create a new 3D DX context.
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id to be created.
+ */
+int vmsvga3dDXDefineContext(PVGASTATECC pThisCC, uint32_t cid)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+
+ LogFunc(("cid %d\n", cid));
+
+ AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+ if (cid >= p3dState->cDXContexts)
+ {
+ /* Grow the array. */
+ uint32_t cNew = RT_ALIGN(cid + 15, 16);
+ void *pvNew = RTMemRealloc(p3dState->papDXContexts, sizeof(p3dState->papDXContexts[0]) * cNew);
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ p3dState->papDXContexts = (PVMSVGA3DDXCONTEXT *)pvNew;
+ while (p3dState->cDXContexts < cNew)
+ {
+ pDXContext = (PVMSVGA3DDXCONTEXT)RTMemAllocZ(sizeof(*pDXContext));
+ AssertReturn(pDXContext, VERR_NO_MEMORY);
+ pDXContext->cid = SVGA3D_INVALID_ID;
+ p3dState->papDXContexts[p3dState->cDXContexts++] = pDXContext;
+ }
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (p3dState->papDXContexts[cid]->cid != SVGA3D_INVALID_ID)
+ vmsvga3dDXDestroyContext(pThisCC, cid);
+
+ pDXContext = p3dState->papDXContexts[cid];
+ memset(pDXContext, 0, sizeof(*pDXContext));
+
+ /* 0xFFFFFFFF (SVGA_ID_INVALID) is a better initial value than 0 for most of svgaDXContext fields. */
+ memset(&pDXContext->svgaDXContext, 0xFF, sizeof(pDXContext->svgaDXContext));
+ pDXContext->svgaDXContext.inputAssembly.topology = SVGA3D_PRIMITIVE_INVALID;
+ pDXContext->svgaDXContext.numViewports = 0;
+ pDXContext->svgaDXContext.numScissorRects = 0;
+ pDXContext->cid = cid;
+
+ /* Init the backend specific data. */
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineContext(pThisCC, pDXContext);
+
+ /* Cleanup on failure. */
+ if (RT_FAILURE(rc))
+ vmsvga3dDXDestroyContext(pThisCC, cid);
+
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyContext(PVGASTATECC pThisCC, uint32_t cid)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyContext(pThisCC, pDXContext);
+
+ RT_ZERO(*pDXContext);
+ pDXContext->cid = SVGA3D_INVALID_ID;
+
+ return rc;
+}
+
+
+int vmsvga3dDXBindContext(PVGASTATECC pThisCC, uint32_t cid, SVGADXContextMobFormat *pSvgaDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ if (pSvgaDXContext)
+ memcpy(&pDXContext->svgaDXContext, pSvgaDXContext, sizeof(*pSvgaDXContext));
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXBindContext(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXReadbackContext(PVGASTATECC pThisCC, uint32_t idDXContext, SVGADXContextMobFormat *pSvgaDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXReadbackContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXReadbackContext(pThisCC, pDXContext);
+ if (RT_SUCCESS(rc))
+ memcpy(pSvgaDXContext, &pDXContext->svgaDXContext, sizeof(*pSvgaDXContext));
+ return rc;
+}
+
+
+int vmsvga3dDXInvalidateContext(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXInvalidateContext, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXInvalidateContext(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetSingleConstantBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSingleConstantBuffer const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetSingleConstantBuffer, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pCmd->slot < SVGA3D_DX_MAX_CONSTBUFFERS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->type >= SVGA3D_SHADERTYPE_MIN && pCmd->type < SVGA3D_SHADERTYPE_MAX, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const idxShaderState = pCmd->type - SVGA3D_SHADERTYPE_MIN;
+ SVGA3dConstantBufferBinding *pCBB = &pDXContext->svgaDXContext.shaderState[idxShaderState].constantBuffers[pCmd->slot];
+ pCBB->sid = pCmd->sid;
+ pCBB->offsetInBytes = pCmd->offsetInBytes;
+ pCBB->sizeInBytes = pCmd->sizeInBytes;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetSingleConstantBuffer(pThisCC, pDXContext, pCmd->slot, pCmd->type, pCmd->sid, pCmd->offsetInBytes, pCmd->sizeInBytes);
+ return rc;
+}
+
+
+int vmsvga3dDXSetShaderResources(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShaderResources const *pCmd, uint32_t cShaderResourceViewId, SVGA3dShaderResourceViewId const *paShaderResourceViewId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetShaderResources, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pCmd->startView < SVGA3D_DX_MAX_SRVIEWS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cShaderResourceViewId <= SVGA3D_DX_MAX_SRVIEWS - pCmd->startView, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->type >= SVGA3D_SHADERTYPE_MIN && pCmd->type < SVGA3D_SHADERTYPE_MAX, VERR_INVALID_PARAMETER);
+ for (uint32_t i = 0; i < cShaderResourceViewId; ++i)
+ ASSERT_GUEST_RETURN( paShaderResourceViewId[i] < pDXContext->cot.cSRView
+ || paShaderResourceViewId[i] == SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const idxShaderState = pCmd->type - SVGA3D_SHADERTYPE_MIN;
+ for (uint32_t i = 0; i < cShaderResourceViewId; ++i)
+ {
+ SVGA3dShaderResourceViewId const shaderResourceViewId = paShaderResourceViewId[i];
+ pDXContext->svgaDXContext.shaderState[idxShaderState].shaderResources[pCmd->startView + i] = shaderResourceViewId;
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetShaderResources(pThisCC, pDXContext, pCmd->startView, pCmd->type, cShaderResourceViewId, paShaderResourceViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXSetShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShader const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetShader, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN( pCmd->shaderId < pDXContext->cot.cShader
+ || pCmd->shaderId == SVGA_ID_INVALID, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->type >= SVGA3D_SHADERTYPE_MIN && pCmd->type < SVGA3D_SHADERTYPE_MAX, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const idxShaderState = pCmd->type - SVGA3D_SHADERTYPE_MIN;
+ pDXContext->svgaDXContext.shaderState[idxShaderState].shaderId = pCmd->shaderId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetShader(pThisCC, pDXContext, pCmd->shaderId, pCmd->type);
+ return rc;
+}
+
+
+int vmsvga3dDXSetSamplers(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSamplers const *pCmd, uint32_t cSamplerId, SVGA3dSamplerId const *paSamplerId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetSamplers, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pCmd->startSampler < SVGA3D_DX_MAX_SAMPLERS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cSamplerId <= SVGA3D_DX_MAX_SAMPLERS - pCmd->startSampler, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->type >= SVGA3D_SHADERTYPE_MIN && pCmd->type < SVGA3D_SHADERTYPE_MAX, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t const idxShaderState = pCmd->type - SVGA3D_SHADERTYPE_MIN;
+ for (uint32_t i = 0; i < cSamplerId; ++i)
+ {
+ SVGA3dSamplerId const samplerId = paSamplerId[i];
+ ASSERT_GUEST_RETURN( samplerId < pDXContext->cot.cSampler
+ || samplerId == SVGA_ID_INVALID, VERR_INVALID_PARAMETER);
+ pDXContext->svgaDXContext.shaderState[idxShaderState].samplers[pCmd->startSampler + i] = samplerId;
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetSamplers(pThisCC, pDXContext, pCmd->startSampler, pCmd->type, cSamplerId, paSamplerId);
+ return rc;
+}
+
+
+#ifdef DUMP_BITMAPS
+static void vmsvga3dDXDrawDumpRenderTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
+{
+ for (uint32_t i = 0; i < SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS; ++i)
+ {
+ if (pDXContext->svgaDXContext.renderState.renderTargetViewIds[i] != SVGA3D_INVALID_ID)
+ {
+ SVGACOTableDXRTViewEntry *pRTViewEntry = &pDXContext->cot.paRTView[pDXContext->svgaDXContext.renderState.renderTargetViewIds[i]];
+ Log(("Dump RT[%u] sid = %u rtvid = %u\n", i, pRTViewEntry->sid, pDXContext->svgaDXContext.renderState.renderTargetViewIds[i]));
+
+ SVGA3dSurfaceImageId image;
+ image.sid = pRTViewEntry->sid;
+ image.face = 0;
+ image.mipmap = 0;
+ VMSVGA3D_MAPPED_SURFACE map;
+ int rc = vmsvga3dSurfaceMap(pThisCC, &image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
+ if (RT_SUCCESS(rc))
+ {
+ vmsvga3dMapWriteBmpFile(&map, "rt-");
+ vmsvga3dSurfaceUnmap(pThisCC, &image, &map, /* fWritten = */ false);
+ }
+ else
+ Log(("Map failed %Rrc\n", rc));
+ }
+ }
+}
+#endif
+
+int vmsvga3dDXDraw(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDraw const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDraw, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDraw(pThisCC, pDXContext, pCmd->vertexCount, pCmd->startVertexLocation);
+#ifdef DUMP_BITMAPS
+ vmsvga3dDXDrawDumpRenderTargets(pThisCC, pDXContext);
+#endif
+ return rc;
+}
+
+
+int vmsvga3dDXDrawIndexed(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexed const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDrawIndexed, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDrawIndexed(pThisCC, pDXContext, pCmd->indexCount, pCmd->startIndexLocation, pCmd->baseVertexLocation);
+#ifdef DUMP_BITMAPS
+ vmsvga3dDXDrawDumpRenderTargets(pThisCC, pDXContext);
+#endif
+ return rc;
+}
+
+
+int vmsvga3dDXDrawInstanced(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawInstanced const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDrawInstanced, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDrawInstanced(pThisCC, pDXContext,
+ pCmd->vertexCountPerInstance, pCmd->instanceCount, pCmd->startVertexLocation, pCmd->startInstanceLocation);
+#ifdef DUMP_BITMAPS
+ vmsvga3dDXDrawDumpRenderTargets(pThisCC, pDXContext);
+#endif
+ return rc;
+}
+
+
+int vmsvga3dDXDrawIndexedInstanced(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexedInstanced const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDrawIndexedInstanced, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDrawIndexedInstanced(pThisCC, pDXContext,
+ pCmd->indexCountPerInstance, pCmd->instanceCount, pCmd->startIndexLocation, pCmd->baseVertexLocation, pCmd->startInstanceLocation);
+#ifdef DUMP_BITMAPS
+ vmsvga3dDXDrawDumpRenderTargets(pThisCC, pDXContext);
+#endif
+ return rc;
+}
+
+
+int vmsvga3dDXDrawAuto(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDrawAuto, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDrawAuto(pThisCC, pDXContext);
+#ifdef DUMP_BITMAPS
+ vmsvga3dDXDrawDumpRenderTargets(pThisCC, pDXContext);
+#endif
+ return rc;
+}
+
+
+int vmsvga3dDXSetInputLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dElementLayoutId elementLayoutId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetInputLayout, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN( elementLayoutId == SVGA3D_INVALID_ID
+ || elementLayoutId < pDXContext->cot.cElementLayout, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.inputAssembly.layoutId = elementLayoutId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetInputLayout(pThisCC, pDXContext, elementLayoutId);
+ return rc;
+}
+
+
+int vmsvga3dDXSetVertexBuffers(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t startBuffer, uint32_t cVertexBuffer, SVGA3dVertexBuffer const *paVertexBuffer)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetVertexBuffers, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(startBuffer < SVGA3D_DX_MAX_VERTEXBUFFERS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cVertexBuffer <= SVGA3D_DX_MAX_VERTEXBUFFERS - startBuffer, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ for (uint32_t i = 0; i < cVertexBuffer; ++i)
+ {
+ uint32_t const idxVertexBuffer = startBuffer + i;
+
+ pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].bufferId = paVertexBuffer[i].sid;
+ pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].stride = paVertexBuffer[i].stride;
+ pDXContext->svgaDXContext.inputAssembly.vertexBuffers[idxVertexBuffer].offset = paVertexBuffer[i].offset;
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetVertexBuffers(pThisCC, pDXContext, startBuffer, cVertexBuffer, paVertexBuffer);
+ return rc;
+}
+
+
+int vmsvga3dDXSetIndexBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetIndexBuffer const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetIndexBuffer, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ pDXContext->svgaDXContext.inputAssembly.indexBufferSid = pCmd->sid;
+ pDXContext->svgaDXContext.inputAssembly.indexBufferOffset = pCmd->offset;
+ pDXContext->svgaDXContext.inputAssembly.indexBufferFormat = pCmd->format;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetIndexBuffer(pThisCC, pDXContext, pCmd->sid, pCmd->format, pCmd->offset);
+ return rc;
+}
+
+
+int vmsvga3dDXSetTopology(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dPrimitiveType topology)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetTopology, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(topology >= SVGA3D_PRIMITIVE_MIN && topology < SVGA3D_PRIMITIVE_MAX, VERR_INVALID_PARAMETER);
+
+ pDXContext->svgaDXContext.inputAssembly.topology = topology;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetTopology(pThisCC, pDXContext, topology);
+ return rc;
+}
+
+
+int vmsvga3dDXSetRenderTargets(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dDepthStencilViewId depthStencilViewId, uint32_t cRenderTargetViewId, SVGA3dRenderTargetViewId const *paRenderTargetViewId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetRenderTargets, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN( depthStencilViewId < pDXContext->cot.cDSView
+ || depthStencilViewId == SVGA_ID_INVALID, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cRenderTargetViewId <= SVGA3D_MAX_RENDER_TARGETS, VERR_INVALID_PARAMETER);
+ for (uint32_t i = 0; i < cRenderTargetViewId; ++i)
+ ASSERT_GUEST_RETURN( paRenderTargetViewId[i] < pDXContext->cot.cRTView
+ || paRenderTargetViewId[i] == SVGA_ID_INVALID, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.renderState.depthStencilViewId = depthStencilViewId;
+ for (uint32_t i = 0; i < cRenderTargetViewId; ++i)
+ pDXContext->svgaDXContext.renderState.renderTargetViewIds[i] = paRenderTargetViewId[i];
+
+ /* Remember how many render target slots must be set. */
+ pDXContext->cRenderTargets = RT_MAX(pDXContext->cRenderTargets, cRenderTargetViewId);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetRenderTargets(pThisCC, pDXContext, depthStencilViewId, cRenderTargetViewId, paRenderTargetViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXSetBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetBlendState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetBlendState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dBlendStateId const blendId = pCmd->blendId;
+
+ ASSERT_GUEST_RETURN( blendId == SVGA3D_INVALID_ID
+ || blendId < pDXContext->cot.cBlendState, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.renderState.blendStateId = blendId;
+ /* SVGADXContextMobFormat uses uint32_t array to store the blend factors, however they are in fact 32 bit floats. */
+ memcpy(pDXContext->svgaDXContext.renderState.blendFactor, pCmd->blendFactor, sizeof(pDXContext->svgaDXContext.renderState.blendFactor));
+ pDXContext->svgaDXContext.renderState.sampleMask = pCmd->sampleMask;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetBlendState(pThisCC, pDXContext, blendId, pCmd->blendFactor, pCmd->sampleMask);
+ return rc;
+}
+
+
+int vmsvga3dDXSetDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetDepthStencilState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetDepthStencilState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dDepthStencilStateId const depthStencilId = pCmd->depthStencilId;
+
+ ASSERT_GUEST_RETURN( depthStencilId == SVGA3D_INVALID_ID
+ || depthStencilId < pDXContext->cot.cDepthStencil, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.renderState.depthStencilStateId = depthStencilId;
+ pDXContext->svgaDXContext.renderState.stencilRef = pCmd->stencilRef;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetDepthStencilState(pThisCC, pDXContext, depthStencilId, pCmd->stencilRef);
+ return rc;
+}
+
+
+int vmsvga3dDXSetRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dRasterizerStateId rasterizerId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetRasterizerState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN( rasterizerId == SVGA3D_INVALID_ID
+ || rasterizerId < pDXContext->cot.cRasterizerState, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.renderState.rasterizerStateId = rasterizerId;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetRasterizerState(pThisCC, pDXContext, rasterizerId);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineQuery, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->type >= SVGA3D_QUERYTYPE_MIN && pCmd->type < SVGA3D_QUERYTYPE_MAX, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Cleanup the current query. */
+ pSvgaR3State->pFuncsDX->pfnDXDestroyQuery(pThisCC, pDXContext, queryId);
+
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ pEntry->type = pCmd->type;
+ pEntry->state = SVGADX_QDSTATE_IDLE;
+ pEntry->flags = pCmd->flags;
+ pEntry->mobid = SVGA_ID_INVALID;
+ pEntry->offset = 0;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineQuery(pThisCC, pDXContext, queryId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyQuery, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pSvgaR3State->pFuncsDX->pfnDXDestroyQuery(pThisCC, pDXContext, queryId);
+
+ /* Cleanup COTable entry.*/
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ pEntry->type = SVGA3D_QUERYTYPE_INVALID;
+ pEntry->state = SVGADX_QDSTATE_INVALID;
+ pEntry->flags = 0;
+ pEntry->mobid = SVGA_ID_INVALID;
+ pEntry->offset = 0;
+
+ return rc;
+}
+
+
+int vmsvga3dDXBindQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindQuery const *pCmd, PVMSVGAMOB pMob)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ pEntry->mobid = vmsvgaR3MobId(pMob);
+
+ return rc;
+}
+
+
+int vmsvga3dDXSetQueryOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetQueryOffset const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ pEntry->offset = pCmd->mobOffset;
+
+ return rc;
+}
+
+
+int vmsvga3dDXBeginQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBeginQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBeginQuery, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ Assert(pEntry->state == SVGADX_QDSTATE_IDLE || pEntry->state == SVGADX_QDSTATE_PENDING || pEntry->state == SVGADX_QDSTATE_FINISHED);
+ if (pEntry->state != SVGADX_QDSTATE_ACTIVE)
+ {
+ rc = pSvgaR3State->pFuncsDX->pfnDXBeginQuery(pThisCC, pDXContext, queryId);
+ if (RT_SUCCESS(rc))
+ {
+ pEntry->state = SVGADX_QDSTATE_ACTIVE;
+
+ /* Update the guest status of the query. */
+ uint32_t const u32 = SVGA3D_QUERYSTATE_PENDING;
+ dxMobWrite(pSvgaR3State, pEntry->mobid, pEntry->offset, &u32, sizeof(u32));
+ }
+ else
+ {
+ uint32_t const u32 = SVGA3D_QUERYSTATE_FAILED;
+ dxMobWrite(pSvgaR3State, pEntry->mobid, pEntry->offset, &u32, sizeof(u32));
+ }
+ }
+ return rc;
+}
+
+
+static int dxEndQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, SVGACOTableDXQueryEntry *pEntry)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+ int rc;
+ Assert(pEntry->state == SVGADX_QDSTATE_ACTIVE);
+ if (pEntry->state == SVGADX_QDSTATE_ACTIVE)
+ {
+ pEntry->state = SVGADX_QDSTATE_PENDING;
+
+ uint32_t u32QueryState;
+ SVGADXQueryResultUnion queryResult;
+ uint32_t cbQuery = 0; /* Actual size of query data returned by backend. */
+ rc = pSvgaR3State->pFuncsDX->pfnDXEndQuery(pThisCC, pDXContext, queryId, &queryResult, &cbQuery);
+ if (RT_SUCCESS(rc))
+ {
+ /* Write the result after SVGA3dQueryState. */
+ dxMobWrite(pSvgaR3State, pEntry->mobid, pEntry->offset + sizeof(uint32_t), &queryResult, cbQuery);
+
+ u32QueryState = SVGA3D_QUERYSTATE_SUCCEEDED;
+ }
+ else
+ u32QueryState = SVGA3D_QUERYSTATE_FAILED;
+
+ dxMobWrite(pSvgaR3State, pEntry->mobid, pEntry->offset, &u32QueryState, sizeof(u32QueryState));
+
+ if (RT_SUCCESS(rc))
+ pEntry->state = SVGADX_QDSTATE_FINISHED;
+ }
+ else
+ rc = VERR_INVALID_STATE;
+
+ return rc;
+}
+
+
+int vmsvga3dDXEndQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXEndQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXEndQuery, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
+ rc = dxEndQuery(pThisCC, pDXContext, queryId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXReadbackQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paQuery, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* The device does not cache queries. So this is a NOP. */
+
+ return rc;
+}
+
+
+int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetPredication, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dQueryId const queryId = pCmd->queryId;
+
+ ASSERT_GUEST_RETURN( queryId == SVGA3D_INVALID_ID
+ || queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetPredication(pThisCC, pDXContext, queryId, pCmd->predicateValue);
+ return rc;
+}
+
+
+int vmsvga3dDXSetSOTargets(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetSOTargets, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(cSoTarget <= SVGA3D_DX_MAX_SOTARGETS, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /** @todo Offset is not stored in svgaDXContext. Should it be stored elsewhere? */
+ for (uint32_t i = 0; i < SVGA3D_DX_MAX_SOTARGETS; ++i)
+ pDXContext->svgaDXContext.streamOut.targets[i] = i < cSoTarget ? paSoTarget[i].sid : SVGA3D_INVALID_ID;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetSOTargets(pThisCC, pDXContext, cSoTarget, paSoTarget);
+ return rc;
+}
+
+
+int vmsvga3dDXSetViewports(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetViewports, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(cViewport <= SVGA3D_DX_MAX_VIEWPORTS, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.numViewports = (uint8_t)cViewport;
+ for (uint32_t i = 0; i < cViewport; ++i)
+ pDXContext->svgaDXContext.viewports[i] = paViewport[i];
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetViewports(pThisCC, pDXContext, cViewport, paViewport);
+ return rc;
+}
+
+
+int vmsvga3dDXSetScissorRects(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cRect, SVGASignedRect const *paRect)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetScissorRects, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(cRect <= SVGA3D_DX_MAX_SCISSORRECTS, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.numScissorRects = (uint8_t)cRect;
+ for (uint32_t i = 0; i < cRect; ++i)
+ pDXContext->svgaDXContext.scissorRects[i] = paRect[i];
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetScissorRects(pThisCC, pDXContext, cRect, paRect);
+ return rc;
+}
+
+
+int vmsvga3dDXClearRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearRenderTargetView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXClearRenderTargetView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dRenderTargetViewId const renderTargetViewId = pCmd->renderTargetViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paRTView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXClearRenderTargetView(pThisCC, pDXContext, renderTargetViewId, &pCmd->rgba);
+ return rc;
+}
+
+
+int vmsvga3dDXClearDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearDepthStencilView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXClearDepthStencilView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dDepthStencilViewId const depthStencilViewId = pCmd->depthStencilViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paDSView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(depthStencilViewId < pDXContext->cot.cDSView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXClearDepthStencilView(pThisCC, pDXContext, pCmd->flags, depthStencilViewId, pCmd->depth, (uint8_t)pCmd->stencil);
+ return rc;
+}
+
+
+int vmsvga3dDXPredCopyRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredCopyRegion const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXPredCopyRegion, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ /** @todo Memcpy if both resources do not have the hardware resource. */
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXPredCopyRegion(pThisCC, pDXContext, pCmd->dstSid, pCmd->dstSubResource, pCmd->srcSid, pCmd->srcSubResource, &pCmd->box);
+ return rc;
+}
+
+
+int vmsvga3dDXPredCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredCopy const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXPredCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXPredCopy(pThisCC, pDXContext, pCmd->dstSid, pCmd->srcSid);
+ return rc;
+}
+
+
+int vmsvga3dDXPresentBlt(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPresentBlt const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXPresentBlt, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXPresentBlt(pThisCC, pDXContext,
+ pCmd->dstSid, pCmd->destSubResource, &pCmd->boxDest,
+ pCmd->srcSid, pCmd->srcSubResource, &pCmd->boxSrc, pCmd->mode);
+ return rc;
+}
+
+
+int vmsvga3dDXGenMips(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXGenMips const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXGenMips, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dShaderResourceViewId const shaderResourceViewId = pCmd->shaderResourceViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paSRView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(shaderResourceViewId < pDXContext->cot.cSRView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXGenMips(pThisCC, pDXContext, shaderResourceViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineShaderResourceView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineShaderResourceView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineShaderResourceView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dShaderResourceViewId const shaderResourceViewId = pCmd->shaderResourceViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paSRView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(shaderResourceViewId < pDXContext->cot.cSRView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXSRViewEntry *pEntry = &pDXContext->cot.paSRView[shaderResourceViewId];
+ pEntry->sid = pCmd->sid;
+ pEntry->format = pCmd->format;
+ pEntry->resourceDimension = pCmd->resourceDimension;
+ pEntry->desc = pCmd->desc;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineShaderResourceView(pThisCC, pDXContext, shaderResourceViewId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyShaderResourceView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyShaderResourceView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyShaderResourceView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dShaderResourceViewId const shaderResourceViewId = pCmd->shaderResourceViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paSRView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(shaderResourceViewId < pDXContext->cot.cSRView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXSRViewEntry *pEntry = &pDXContext->cot.paSRView[shaderResourceViewId];
+ RT_ZERO(*pEntry);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyShaderResourceView(pThisCC, pDXContext, shaderResourceViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineRenderTargetView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineRenderTargetView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dRenderTargetViewId const renderTargetViewId = pCmd->renderTargetViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paRTView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXRTViewEntry *pEntry = &pDXContext->cot.paRTView[renderTargetViewId];
+ pEntry->sid = pCmd->sid;
+ pEntry->format = pCmd->format;
+ pEntry->resourceDimension = pCmd->resourceDimension;
+ pEntry->desc = pCmd->desc;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineRenderTargetView(pThisCC, pDXContext, renderTargetViewId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyRenderTargetView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyRenderTargetView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dRenderTargetViewId const renderTargetViewId = pCmd->renderTargetViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paRTView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXRTViewEntry *pEntry = &pDXContext->cot.paRTView[renderTargetViewId];
+ RT_ZERO(*pEntry);
+
+ for (uint32_t i = 0; i < SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS; ++i)
+ {
+ if (pDXContext->svgaDXContext.renderState.renderTargetViewIds[i] == renderTargetViewId)
+ pDXContext->svgaDXContext.renderState.renderTargetViewIds[i] = SVGA_ID_INVALID;
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyRenderTargetView(pThisCC, pDXContext, renderTargetViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilView_v2 const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineDepthStencilView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dDepthStencilViewId const depthStencilViewId = pCmd->depthStencilViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paDSView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(depthStencilViewId < pDXContext->cot.cDSView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXDSViewEntry *pEntry = &pDXContext->cot.paDSView[depthStencilViewId];
+ pEntry->sid = pCmd->sid;
+ pEntry->format = pCmd->format;
+ pEntry->resourceDimension = pCmd->resourceDimension;
+ pEntry->mipSlice = pCmd->mipSlice;
+ pEntry->firstArraySlice = pCmd->firstArraySlice;
+ pEntry->arraySize = pCmd->arraySize;
+ pEntry->flags = pCmd->flags;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineDepthStencilView(pThisCC, pDXContext, depthStencilViewId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyDepthStencilView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyDepthStencilView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dDepthStencilViewId const depthStencilViewId = pCmd->depthStencilViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paDSView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(depthStencilViewId < pDXContext->cot.cDSView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXDSViewEntry *pEntry = &pDXContext->cot.paDSView[depthStencilViewId];
+ RT_ZERO(*pEntry);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyDepthStencilView(pThisCC, pDXContext, depthStencilViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineElementLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dElementLayoutId elementLayoutId, uint32_t cDesc, SVGA3dInputElementDesc const *paDesc)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineElementLayout, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paElementLayout, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(elementLayoutId < pDXContext->cot.cElementLayout, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXElementLayoutEntry *pEntry = &pDXContext->cot.paElementLayout[elementLayoutId];
+ pEntry->elid = elementLayoutId;
+ pEntry->numDescs = RT_MIN(cDesc, RT_ELEMENTS(pEntry->descs));
+ memcpy(pEntry->descs, paDesc, pEntry->numDescs * sizeof(pEntry->descs[0]));
+
+#ifdef LOG_ENABLED
+ Log6(("Element layout %d: slot off fmt class step reg\n", pEntry->elid));
+ for (uint32_t i = 0; i < pEntry->numDescs; ++i)
+ {
+ Log6((" [%u]: %u 0x%02X %d %u %u %u\n",
+ i,
+ pEntry->descs[i].inputSlot,
+ pEntry->descs[i].alignedByteOffset,
+ pEntry->descs[i].format,
+ pEntry->descs[i].inputSlotClass,
+ pEntry->descs[i].instanceDataStepRate,
+ pEntry->descs[i].inputRegister
+ ));
+ }
+#endif
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineElementLayout(pThisCC, pDXContext, elementLayoutId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyElementLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyElementLayout const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyElementLayout, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dElementLayoutId const elementLayoutId = pCmd->elementLayoutId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paElementLayout, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(elementLayoutId < pDXContext->cot.cElementLayout, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pSvgaR3State->pFuncsDX->pfnDXDestroyElementLayout(pThisCC, pDXContext, elementLayoutId);
+
+ SVGACOTableDXElementLayoutEntry *pEntry = &pDXContext->cot.paElementLayout[elementLayoutId];
+ RT_ZERO(*pEntry);
+ pEntry->elid = SVGA3D_INVALID_ID;
+
+ return rc;
+}
+
+
+int vmsvga3dDXDefineBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineBlendState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineBlendState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dBlendStateId const blendId = pCmd->blendId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paBlendState, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(blendId < pDXContext->cot.cBlendState, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXBlendStateEntry *pEntry = &pDXContext->cot.paBlendState[blendId];
+ pEntry->alphaToCoverageEnable = pCmd->alphaToCoverageEnable;
+ pEntry->independentBlendEnable = pCmd->independentBlendEnable;
+ memcpy(pEntry->perRT, pCmd->perRT, sizeof(pEntry->perRT));
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineBlendState(pThisCC, pDXContext, blendId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyBlendState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyBlendState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dBlendStateId const blendId = pCmd->blendId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paBlendState, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(blendId < pDXContext->cot.cBlendState, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pSvgaR3State->pFuncsDX->pfnDXDestroyBlendState(pThisCC, pDXContext, blendId);
+
+ SVGACOTableDXBlendStateEntry *pEntry = &pDXContext->cot.paBlendState[blendId];
+ RT_ZERO(*pEntry);
+
+ return rc;
+}
+
+
+int vmsvga3dDXDefineDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineDepthStencilState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dDepthStencilStateId const depthStencilId = pCmd->depthStencilId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paDepthStencil, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(depthStencilId < pDXContext->cot.cDepthStencil, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXDepthStencilEntry *pEntry = &pDXContext->cot.paDepthStencil[depthStencilId];
+ pEntry->depthEnable = pCmd->depthEnable;
+ pEntry->depthWriteMask = pCmd->depthWriteMask;
+ pEntry->depthFunc = pCmd->depthFunc;
+ pEntry->stencilEnable = pCmd->stencilEnable;
+ pEntry->frontEnable = pCmd->frontEnable;
+ pEntry->backEnable = pCmd->backEnable;
+ pEntry->stencilReadMask = pCmd->stencilReadMask;
+ pEntry->stencilWriteMask = pCmd->stencilWriteMask;
+
+ pEntry->frontStencilFailOp = pCmd->frontStencilFailOp;
+ pEntry->frontStencilDepthFailOp = pCmd->frontStencilDepthFailOp;
+ pEntry->frontStencilPassOp = pCmd->frontStencilPassOp;
+ pEntry->frontStencilFunc = pCmd->frontStencilFunc;
+
+ pEntry->backStencilFailOp = pCmd->backStencilFailOp;
+ pEntry->backStencilDepthFailOp = pCmd->backStencilDepthFailOp;
+ pEntry->backStencilPassOp = pCmd->backStencilPassOp;
+ pEntry->backStencilFunc = pCmd->backStencilFunc;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineDepthStencilState(pThisCC, pDXContext, depthStencilId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyDepthStencilState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyDepthStencilState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dDepthStencilStateId const depthStencilId = pCmd->depthStencilId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paDepthStencil, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(depthStencilId < pDXContext->cot.cDepthStencil, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pSvgaR3State->pFuncsDX->pfnDXDestroyDepthStencilState(pThisCC, pDXContext, depthStencilId);
+
+ SVGACOTableDXDepthStencilEntry *pEntry = &pDXContext->cot.paDepthStencil[depthStencilId];
+ RT_ZERO(*pEntry);
+
+ return rc;
+}
+
+
+int vmsvga3dDXDefineRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineRasterizerState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineRasterizerState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dRasterizerStateId const rasterizerId = pCmd->rasterizerId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paRasterizerState, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(rasterizerId < pDXContext->cot.cRasterizerState, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXRasterizerStateEntry *pEntry = &pDXContext->cot.paRasterizerState[rasterizerId];
+ pEntry->fillMode = pCmd->fillMode;
+ pEntry->cullMode = pCmd->cullMode;
+ pEntry->frontCounterClockwise = pCmd->frontCounterClockwise;
+ pEntry->provokingVertexLast = pCmd->provokingVertexLast;
+ pEntry->depthBias = pCmd->depthBias;
+ pEntry->depthBiasClamp = pCmd->depthBiasClamp;
+ pEntry->slopeScaledDepthBias = pCmd->slopeScaledDepthBias;
+ pEntry->depthClipEnable = pCmd->depthClipEnable;
+ pEntry->scissorEnable = pCmd->scissorEnable;
+ pEntry->multisampleEnable = pCmd->multisampleEnable;
+ pEntry->antialiasedLineEnable = pCmd->antialiasedLineEnable;
+ pEntry->lineWidth = pCmd->lineWidth;
+ pEntry->lineStippleEnable = pCmd->lineStippleEnable;
+ pEntry->lineStippleFactor = pCmd->lineStippleFactor;
+ pEntry->lineStipplePattern = pCmd->lineStipplePattern;
+ pEntry->forcedSampleCount = 0; /** @todo Not in pCmd. */
+ RT_ZERO(pEntry->mustBeZero);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineRasterizerState(pThisCC, pDXContext, rasterizerId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyRasterizerState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyRasterizerState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dRasterizerStateId const rasterizerId = pCmd->rasterizerId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paRasterizerState, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(rasterizerId < pDXContext->cot.cRasterizerState, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyRasterizerState(pThisCC, pDXContext, rasterizerId);
+
+ SVGACOTableDXRasterizerStateEntry *pEntry = &pDXContext->cot.paRasterizerState[rasterizerId];
+ RT_ZERO(*pEntry);
+
+ return rc;
+}
+
+
+int vmsvga3dDXDefineSamplerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineSamplerState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineSamplerState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dSamplerId const samplerId = pCmd->samplerId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paSampler, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(samplerId < pDXContext->cot.cSampler, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXSamplerEntry *pEntry = &pDXContext->cot.paSampler[samplerId];
+ pEntry->filter = pCmd->filter;
+ pEntry->addressU = pCmd->addressU;
+ pEntry->addressV = pCmd->addressV;
+ pEntry->addressW = pCmd->addressW;
+ pEntry->mipLODBias = pCmd->mipLODBias;
+ pEntry->maxAnisotropy = pCmd->maxAnisotropy;
+ pEntry->comparisonFunc = pCmd->comparisonFunc;
+ pEntry->borderColor = pCmd->borderColor;
+ pEntry->minLOD = pCmd->minLOD;
+ pEntry->maxLOD = pCmd->maxLOD;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineSamplerState(pThisCC, pDXContext, samplerId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroySamplerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroySamplerState const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroySamplerState, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dSamplerId const samplerId = pCmd->samplerId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paSampler, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(samplerId < pDXContext->cot.cSampler, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pSvgaR3State->pFuncsDX->pfnDXDestroySamplerState(pThisCC, pDXContext, samplerId);
+
+ SVGACOTableDXSamplerEntry *pEntry = &pDXContext->cot.paSampler[samplerId];
+ RT_ZERO(*pEntry);
+
+ return rc;
+}
+
+
+int vmsvga3dDXDefineShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineShader const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineShader, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dShaderId const shaderId = pCmd->shaderId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paShader, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(shaderId < pDXContext->cot.cShader, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->type >= SVGA3D_SHADERTYPE_MIN && pCmd->type < SVGA3D_SHADERTYPE_MAX, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->sizeInBytes >= 8, VERR_INVALID_PARAMETER); /* Version Token + Length Token. */
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Cleanup the current shader. */
+ pSvgaR3State->pFuncsDX->pfnDXDestroyShader(pThisCC, pDXContext, shaderId);
+
+ SVGACOTableDXShaderEntry *pEntry = &pDXContext->cot.paShader[shaderId];
+ pEntry->type = pCmd->type;
+ pEntry->sizeInBytes = pCmd->sizeInBytes;
+ pEntry->offsetInBytes = 0;
+ pEntry->mobid = SVGA_ID_INVALID;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineShader(pThisCC, pDXContext, shaderId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyShader const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyShader, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dShaderId const shaderId = pCmd->shaderId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paShader, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(shaderId < pDXContext->cot.cShader, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pSvgaR3State->pFuncsDX->pfnDXDestroyShader(pThisCC, pDXContext, shaderId);
+
+ /* Cleanup COTable entries.*/
+ SVGACOTableDXShaderEntry *pEntry = &pDXContext->cot.paShader[shaderId];
+ pEntry->type = SVGA3D_SHADERTYPE_INVALID;
+ pEntry->sizeInBytes = 0;
+ pEntry->offsetInBytes = 0;
+ pEntry->mobid = SVGA_ID_INVALID;
+
+ /** @todo Destroy shaders on context and backend deletion. */
+ return rc;
+}
+
+
+static int dxBindShader(DXShaderInfo *pShaderInfo, PVMSVGAMOB pMob, SVGACOTableDXShaderEntry const *pEntry, void const *pvShaderBytecode)
+{
+ /* How many bytes the MOB can hold. */
+ uint32_t const cbMob = vmsvgaR3MobSize(pMob) - pEntry->offsetInBytes;
+ ASSERT_GUEST_RETURN(cbMob >= pEntry->sizeInBytes, VERR_INVALID_PARAMETER);
+ AssertReturn(pEntry->sizeInBytes >= 8, VERR_INTERNAL_ERROR); /* Host ensures this in DefineShader. */
+
+ int rc = DXShaderParse(pvShaderBytecode, pEntry->sizeInBytes, pShaderInfo);
+ if (RT_SUCCESS(rc))
+ {
+ /* Get the length of the shader bytecode. */
+ uint32_t const *pau32Token = (uint32_t *)pvShaderBytecode; /* Tokens */
+ uint32_t const cToken = pau32Token[1]; /* Length of the shader in tokens. */
+ ASSERT_GUEST_RETURN(cToken <= pEntry->sizeInBytes / 4, VERR_INVALID_PARAMETER);
+
+ /* Check if the shader contains SVGA3dDXSignatureHeader and signature entries after the bytecode.
+ * If they are not there (Linux guest driver does not provide them), then it is fine
+ * and the signatures generated by DXShaderParse will be used.
+ */
+ uint32_t cbSignaturesAvail = pEntry->sizeInBytes - cToken * 4; /* How many bytes for signatures are available. */
+ if (cbSignaturesAvail >= sizeof(SVGA3dDXSignatureHeader))
+ {
+ cbSignaturesAvail -= sizeof(SVGA3dDXSignatureHeader);
+
+ SVGA3dDXSignatureHeader const *pSignatureHeader = (SVGA3dDXSignatureHeader *)((uint8_t *)pvShaderBytecode + cToken * 4);
+ if (pSignatureHeader->headerVersion == SVGADX_SIGNATURE_HEADER_VERSION_0)
+ {
+ ASSERT_GUEST_RETURN( pSignatureHeader->numInputSignatures <= RT_ELEMENTS(pShaderInfo->aInputSignature)
+ && pSignatureHeader->numOutputSignatures <= RT_ELEMENTS(pShaderInfo->aOutputSignature)
+ && pSignatureHeader->numPatchConstantSignatures <= RT_ELEMENTS(pShaderInfo->aPatchConstantSignature),
+ VERR_INVALID_PARAMETER);
+
+ uint32_t const cSignature = pSignatureHeader->numInputSignatures
+ + pSignatureHeader->numOutputSignatures
+ + pSignatureHeader->numPatchConstantSignatures;
+ uint32_t const cbSignature = cSignature * sizeof(SVGA3dDXSignatureEntry);
+ ASSERT_GUEST_RETURN(cbSignaturesAvail >= cbSignature, VERR_INVALID_PARAMETER);
+
+ /* The shader does not need guesswork. */
+ pShaderInfo->fGuestSignatures = true;
+
+ /* Copy to DXShaderInfo. */
+ uint8_t const *pu8Signatures = (uint8_t *)&pSignatureHeader[1];
+ pShaderInfo->cInputSignature = pSignatureHeader->numInputSignatures;
+ memcpy(pShaderInfo->aInputSignature, pu8Signatures, pSignatureHeader->numInputSignatures * sizeof(SVGA3dDXSignatureEntry));
+
+ pu8Signatures += pSignatureHeader->numInputSignatures * sizeof(SVGA3dDXSignatureEntry);
+ pShaderInfo->cOutputSignature = pSignatureHeader->numOutputSignatures;
+ memcpy(pShaderInfo->aOutputSignature, pu8Signatures, pSignatureHeader->numOutputSignatures * sizeof(SVGA3dDXSignatureEntry));
+
+ pu8Signatures += pSignatureHeader->numOutputSignatures * sizeof(SVGA3dDXSignatureEntry);
+ pShaderInfo->cPatchConstantSignature = pSignatureHeader->numPatchConstantSignatures;
+ memcpy(pShaderInfo->aPatchConstantSignature, pu8Signatures, pSignatureHeader->numPatchConstantSignatures * sizeof(SVGA3dDXSignatureEntry));
+
+ DXShaderGenerateSemantics(pShaderInfo);
+ }
+ }
+ }
+
+ return rc;
+}
+
+
+int vmsvga3dDXBindShader(PVGASTATECC pThisCC, SVGA3dCmdDXBindShader const *pCmd, PVMSVGAMOB pMob)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindShader, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, pCmd->cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pCmd->shid < pDXContext->cot.cShader, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* 'type' and 'sizeInBytes' has been already initialized by DefineShader. */
+ SVGACOTableDXShaderEntry *pEntry = &pDXContext->cot.paShader[pCmd->shid];
+ //pEntry->type;
+ //pEntry->sizeInBytes;
+ pEntry->offsetInBytes = pCmd->offsetInBytes;
+ pEntry->mobid = vmsvgaR3MobId(pMob);
+
+ if (pMob)
+ {
+ /* Bind a mob to the shader. */
+
+ /* Create a memory pointer for the MOB, which is accessible by host. */
+ rc = vmsvgaR3MobBackingStoreCreate(pSvgaR3State, pMob, vmsvgaR3MobSize(pMob));
+ if (RT_SUCCESS(rc))
+ {
+ /* Get pointer to the shader bytecode. This will also verify the offset. */
+ void const *pvShaderBytecode = vmsvgaR3MobBackingStorePtr(pMob, pEntry->offsetInBytes);
+ ASSERT_GUEST_RETURN(pvShaderBytecode, VERR_INVALID_PARAMETER);
+
+ /* Get the shader and optional signatures from the MOB. */
+ DXShaderInfo shaderInfo;
+ RT_ZERO(shaderInfo);
+ rc = dxBindShader(&shaderInfo, pMob, pEntry, pvShaderBytecode);
+ if (RT_SUCCESS(rc))
+ {
+ /* pfnDXBindShader makes a copy of shaderInfo on success. */
+ rc = pSvgaR3State->pFuncsDX->pfnDXBindShader(pThisCC, pDXContext, pCmd->shid, &shaderInfo);
+ }
+ AssertRC(rc);
+
+ /** @todo Backing store is not needed anymore in any case? */
+ if (RT_FAILURE(rc))
+ {
+ DXShaderFree(&shaderInfo);
+
+ vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob);
+ }
+ }
+ }
+ else
+ {
+ /* Unbind. */
+ /** @todo Nothing to do here but release the MOB? */
+ vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob);
+ }
+
+ return rc;
+}
+
+
+int vmsvga3dDXDefineStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutput const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutput, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dStreamOutputId const soid = pCmd->soid;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->numOutputStreamEntries < SVGA3D_MAX_DX10_STREAMOUT_DECLS, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid];
+ pEntry->numOutputStreamEntries = pCmd->numOutputStreamEntries;
+ memcpy(pEntry->decl, pCmd->decl, sizeof(pEntry->decl));
+ memcpy(pEntry->streamOutputStrideInBytes, pCmd->streamOutputStrideInBytes, sizeof(pEntry->streamOutputStrideInBytes));
+ pEntry->rasterizedStream = 0; // Apparently invalid in this command: pCmd->rasterizedStream;
+ pEntry->numOutputStreamStrides = 0;
+ pEntry->mobid = SVGA_ID_INVALID;
+ pEntry->offsetInBytes = 0;
+ pEntry->usesMob = 0;
+ pEntry->pad0 = 0;
+ pEntry->pad1 = 0;
+ RT_ZERO(pEntry->pad2);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutput(pThisCC, pDXContext, soid, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyStreamOutput const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyStreamOutput, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dStreamOutputId const soid = pCmd->soid;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyStreamOutput(pThisCC, pDXContext, soid);
+
+ SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid];
+ RT_ZERO(*pEntry);
+ pEntry->mobid = SVGA_ID_INVALID;
+
+ return rc;
+}
+
+
+int vmsvga3dDXSetStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetStreamOutput const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetStreamOutput, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dStreamOutputId const soid = pCmd->soid;
+
+ ASSERT_GUEST_RETURN( soid == SVGA_ID_INVALID
+ || soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pDXContext->svgaDXContext.streamOut.soid = soid;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetStreamOutput(pThisCC, pDXContext, soid);
+ return rc;
+}
+
+
+static int dxSetOrGrowCOTable(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGAMOB pMob,
+ SVGACOTableType type, uint32_t validSizeInBytes, bool fGrow)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ int rc = VINF_SUCCESS;
+
+ ASSERT_GUEST_RETURN(type < RT_ELEMENTS(pDXContext->aCOTMobs), VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint32_t cbCOT;
+ if (pMob)
+ {
+ /* Bind a new mob to the COTable. */
+ cbCOT = vmsvgaR3MobSize(pMob);
+
+ ASSERT_GUEST_RETURN(validSizeInBytes <= cbCOT, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Create a memory pointer, which is accessible by host. */
+ rc = vmsvgaR3MobBackingStoreCreate(pSvgaR3State, pMob, validSizeInBytes);
+ }
+ else
+ {
+ /* Unbind. */
+ validSizeInBytes = 0;
+ cbCOT = 0;
+ vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pDXContext->aCOTMobs[type]);
+ }
+
+ uint32_t cEntries = 0;
+ uint32_t cValidEntries = 0;
+ if (RT_SUCCESS(rc))
+ {
+ static uint32_t const s_acbEntry[SVGA_COTABLE_MAX] =
+ {
+ sizeof(SVGACOTableDXRTViewEntry),
+ sizeof(SVGACOTableDXDSViewEntry),
+ sizeof(SVGACOTableDXSRViewEntry),
+ sizeof(SVGACOTableDXElementLayoutEntry),
+ sizeof(SVGACOTableDXBlendStateEntry),
+ sizeof(SVGACOTableDXDepthStencilEntry),
+ sizeof(SVGACOTableDXRasterizerStateEntry),
+ sizeof(SVGACOTableDXSamplerEntry),
+ sizeof(SVGACOTableDXStreamOutputEntry),
+ sizeof(SVGACOTableDXQueryEntry),
+ sizeof(SVGACOTableDXShaderEntry),
+ sizeof(SVGACOTableDXUAViewEntry),
+ };
+
+ cEntries = cbCOT / s_acbEntry[type];
+ cValidEntries = validSizeInBytes / s_acbEntry[type];
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ if ( fGrow
+ && pDXContext->aCOTMobs[type]
+ && cValidEntries)
+ {
+ /* Copy entries from the current mob to the new mob. */
+ void const *pvSrc = vmsvgaR3MobBackingStorePtr(pDXContext->aCOTMobs[type], 0);
+ void *pvDst = vmsvgaR3MobBackingStorePtr(pMob, 0);
+ if (pvSrc && pvDst)
+ memcpy(pvDst, pvSrc, validSizeInBytes);
+ else
+ AssertFailedStmt(rc = VERR_INVALID_STATE);
+ }
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ pDXContext->aCOTMobs[type] = pMob;
+
+ void *pvCOT = vmsvgaR3MobBackingStorePtr(pMob, 0);
+ switch (type)
+ {
+ case SVGA_COTABLE_RTVIEW:
+ pDXContext->cot.paRTView = (SVGACOTableDXRTViewEntry *)pvCOT;
+ pDXContext->cot.cRTView = cEntries;
+ break;
+ case SVGA_COTABLE_DSVIEW:
+ pDXContext->cot.paDSView = (SVGACOTableDXDSViewEntry *)pvCOT;
+ pDXContext->cot.cDSView = cEntries;
+ break;
+ case SVGA_COTABLE_SRVIEW:
+ pDXContext->cot.paSRView = (SVGACOTableDXSRViewEntry *)pvCOT;
+ pDXContext->cot.cSRView = cEntries;
+ break;
+ case SVGA_COTABLE_ELEMENTLAYOUT:
+ pDXContext->cot.paElementLayout = (SVGACOTableDXElementLayoutEntry *)pvCOT;
+ pDXContext->cot.cElementLayout = cEntries;
+ break;
+ case SVGA_COTABLE_BLENDSTATE:
+ pDXContext->cot.paBlendState = (SVGACOTableDXBlendStateEntry *)pvCOT;
+ pDXContext->cot.cBlendState = cEntries;
+ break;
+ case SVGA_COTABLE_DEPTHSTENCIL:
+ pDXContext->cot.paDepthStencil = (SVGACOTableDXDepthStencilEntry *)pvCOT;
+ pDXContext->cot.cDepthStencil = cEntries;
+ break;
+ case SVGA_COTABLE_RASTERIZERSTATE:
+ pDXContext->cot.paRasterizerState = (SVGACOTableDXRasterizerStateEntry *)pvCOT;
+ pDXContext->cot.cRasterizerState = cEntries;
+ break;
+ case SVGA_COTABLE_SAMPLER:
+ pDXContext->cot.paSampler = (SVGACOTableDXSamplerEntry *)pvCOT;
+ pDXContext->cot.cSampler = cEntries;
+ break;
+ case SVGA_COTABLE_STREAMOUTPUT:
+ pDXContext->cot.paStreamOutput = (SVGACOTableDXStreamOutputEntry *)pvCOT;
+ pDXContext->cot.cStreamOutput = cEntries;
+ break;
+ case SVGA_COTABLE_DXQUERY:
+ pDXContext->cot.paQuery = (SVGACOTableDXQueryEntry *)pvCOT;
+ pDXContext->cot.cQuery = cEntries;
+ break;
+ case SVGA_COTABLE_DXSHADER:
+ pDXContext->cot.paShader = (SVGACOTableDXShaderEntry *)pvCOT;
+ pDXContext->cot.cShader = cEntries;
+ break;
+ case SVGA_COTABLE_UAVIEW:
+ pDXContext->cot.paUAView = (SVGACOTableDXUAViewEntry *)pvCOT;
+ pDXContext->cot.cUAView = cEntries;
+ break;
+ case SVGA_COTABLE_MAX: break; /* Compiler warning */
+ }
+ }
+ else
+ vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob);
+
+ /* Notify the backend. */
+ if (RT_SUCCESS(rc))
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetCOTable(pThisCC, pDXContext, type, cValidEntries);
+
+ return rc;
+}
+
+
+int vmsvga3dDXSetCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXSetCOTable const *pCmd, PVMSVGAMOB pMob)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetCOTable, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, pCmd->cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ return dxSetOrGrowCOTable(pThisCC, pDXContext, pMob, pCmd->type, pCmd->validSizeInBytes, false);
+}
+
+
+int vmsvga3dDXReadbackCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXReadbackCOTable const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, pCmd->cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ ASSERT_GUEST_RETURN(pCmd->type < RT_ELEMENTS(pDXContext->aCOTMobs), VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ PVMSVGAMOB pMob = pDXContext->aCOTMobs[pCmd->type];
+ rc = vmsvgaR3MobBackingStoreWriteToGuest(pSvgaR3State, pMob);
+ return rc;
+}
+
+
+int vmsvga3dDXBufferCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBufferCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXBufferCopy(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSurfaceCopyAndReadback(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSurfaceCopyAndReadback, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSurfaceCopyAndReadback(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXMoveQuery(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXMoveQuery, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXMoveQuery(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXBindAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindAllQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ RT_NOREF(idDXContext);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, pCmd->cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ for (uint32_t i = 0; i < pDXContext->cot.cQuery; ++i)
+ {
+ SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[i];
+ if (pEntry->type != SVGA3D_QUERYTYPE_INVALID)
+ pEntry->mobid = pCmd->mobid;
+ }
+
+ return rc;
+}
+
+
+int vmsvga3dDXReadbackAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackAllQuery const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ RT_NOREF(idDXContext);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, pCmd->cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ /* "Read back cached states from the device if they exist."
+ * The device does not cache queries. So this is a NOP.
+ */
+ RT_NOREF(pDXContext);
+
+ return rc;
+}
+
+
+int vmsvga3dDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindAllShader, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXBindAllShader(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXHint(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXHint, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXHint(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXBufferUpdate(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBufferUpdate, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXBufferUpdate(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetVSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetVSConstantBufferOffset, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetVSConstantBufferOffset(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetPSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetPSConstantBufferOffset, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetPSConstantBufferOffset(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetGSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetGSConstantBufferOffset, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetGSConstantBufferOffset(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetHSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetHSConstantBufferOffset, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetHSConstantBufferOffset(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetDSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetDSConstantBufferOffset, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetDSConstantBufferOffset(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetCSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetCSConstantBufferOffset, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetCSConstantBufferOffset(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXCondBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXCondBindAllShader, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXCondBindAllShader(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dScreenCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnScreenCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnScreenCopy(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXGrowCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXGrowCOTable const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetCOTable, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, pCmd->cid, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobid);
+ return dxSetOrGrowCOTable(pThisCC, pDXContext, pMob, pCmd->type, pCmd->validSizeInBytes, true);
+}
+
+
+int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnIntraSurfaceCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnIntraSurfaceCopy(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXResolveCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXResolveCopy(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXPredResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXPredResolveCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXPredResolveCopy(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXPredConvertRegion(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXPredConvertRegion, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXPredConvertRegion(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXPredConvert(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXPredConvert, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXPredConvert(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dWholeSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnWholeSurfaceCopy, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnWholeSurfaceCopy(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineUAView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineUAView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXUAViewEntry *pEntry = &pDXContext->cot.paUAView[uaViewId];
+ pEntry->sid = pCmd->sid;
+ pEntry->format = pCmd->format;
+ pEntry->resourceDimension = pCmd->resourceDimension;
+ pEntry->desc = pCmd->desc;
+ pEntry->structureCount = 0;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineUAView(pThisCC, pDXContext, uaViewId, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyUAView const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDestroyUAView, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXUAViewEntry *pEntry = &pDXContext->cot.paUAView[uaViewId];
+ RT_ZERO(*pEntry);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDestroyUAView(pThisCC, pDXContext, uaViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewUint const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXClearUAViewUint, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXClearUAViewUint(pThisCC, pDXContext, uaViewId, pCmd->value.value);
+ return rc;
+}
+
+
+int vmsvga3dDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewFloat const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXClearUAViewFloat, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXClearUAViewFloat(pThisCC, pDXContext, uaViewId, pCmd->value.value);
+ return rc;
+}
+
+
+int vmsvga3dDXCopyStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXCopyStructureCount const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXCopyStructureCount, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dUAViewId const uaViewId = pCmd->srcUAViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXCopyStructureCount(pThisCC, pDXContext, uaViewId, pCmd->destSid, pCmd->destByteOffset);
+ return rc;
+}
+
+
+int vmsvga3dDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetUAViews, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pCmd->uavSpliceIndex <= SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cUAViewId <= SVGA3D_DX11_1_MAX_UAVIEWS, VERR_INVALID_PARAMETER);
+ for (uint32_t i = 0; i < cUAViewId; ++i)
+ ASSERT_GUEST_RETURN( paUAViewId[i] < pDXContext->cot.cUAView
+ || paUAViewId[i] == SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ for (uint32_t i = 0; i < cUAViewId; ++i)
+ {
+ SVGA3dUAViewId const uaViewId = paUAViewId[i];
+ pDXContext->svgaDXContext.uaViewIds[i] = uaViewId;
+ }
+ pDXContext->svgaDXContext.uavSpliceIndex = pCmd->uavSpliceIndex;
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetUAViews(pThisCC, pDXContext, pCmd->uavSpliceIndex, cUAViewId, paUAViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexedInstancedIndirect const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDrawIndexedInstancedIndirect, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDrawIndexedInstancedIndirect(pThisCC, pDXContext, pCmd->argsBufferSid, pCmd->byteOffsetForArgs);
+ return rc;
+}
+
+
+int vmsvga3dDXDrawInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawInstancedIndirect const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDrawInstancedIndirect, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDrawInstancedIndirect(pThisCC, pDXContext, pCmd->argsBufferSid, pCmd->byteOffsetForArgs);
+ return rc;
+}
+
+
+int vmsvga3dDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDispatch const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDispatch, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDispatch(pThisCC, pDXContext, pCmd->threadGroupCountX, pCmd->threadGroupCountY, pCmd->threadGroupCountZ);
+ return rc;
+}
+
+
+int vmsvga3dDXDispatchIndirect(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDispatchIndirect, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDispatchIndirect(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dWriteZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnWriteZeroSurface, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnWriteZeroSurface(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dHintZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnHintZeroSurface, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnHintZeroSurface(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXTransferToBuffer(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXTransferToBuffer, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXTransferToBuffer(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetStructureCount const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXUAViewEntry *pEntry = &pDXContext->cot.paUAView[uaViewId];
+ pEntry->structureCount = pCmd->structureCount;
+
+ return VINF_SUCCESS;
+}
+
+
+int vmsvga3dLogicOpsBitBlt(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnLogicOpsBitBlt, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnLogicOpsBitBlt(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dLogicOpsTransBlt(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnLogicOpsTransBlt, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnLogicOpsTransBlt(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dLogicOpsStretchBlt(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnLogicOpsStretchBlt, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnLogicOpsStretchBlt(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dLogicOpsColorFill(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnLogicOpsColorFill, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnLogicOpsColorFill(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dLogicOpsAlphaBlend(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnLogicOpsAlphaBlend, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnLogicOpsAlphaBlend(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dLogicOpsClearTypeBlend(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnLogicOpsClearTypeBlend, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnLogicOpsClearTypeBlend(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetCSUAViews, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN(pCmd->startIndex < SVGA3D_DX11_1_MAX_UAVIEWS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cUAViewId <= SVGA3D_DX11_1_MAX_UAVIEWS - pCmd->startIndex, VERR_INVALID_PARAMETER);
+ for (uint32_t i = 0; i < cUAViewId; ++i)
+ ASSERT_GUEST_RETURN( paUAViewId[i] < pDXContext->cot.cUAView
+ || paUAViewId[i] == SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ for (uint32_t i = 0; i < cUAViewId; ++i)
+ {
+ SVGA3dUAViewId const uaViewId = paUAViewId[i];
+ pDXContext->svgaDXContext.csuaViewIds[pCmd->startIndex + i] = uaViewId;
+ }
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetCSUAViews(pThisCC, pDXContext, pCmd->startIndex, cUAViewId, paUAViewId);
+ return rc;
+}
+
+
+int vmsvga3dDXSetMinLOD(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetMinLOD, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetMinLOD(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dStreamOutputId const soid = pCmd->soid;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(pCmd->numOutputStreamEntries < SVGA3D_MAX_STREAMOUT_DECLS, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid];
+ pEntry->numOutputStreamEntries = pCmd->numOutputStreamEntries;
+ RT_ZERO(pEntry->decl);
+ memcpy(pEntry->streamOutputStrideInBytes, pCmd->streamOutputStrideInBytes, sizeof(pEntry->streamOutputStrideInBytes));
+ pEntry->rasterizedStream = pCmd->rasterizedStream;
+ pEntry->numOutputStreamStrides = pCmd->numOutputStreamStrides;
+ pEntry->mobid = SVGA_ID_INVALID;
+ pEntry->offsetInBytes = 0;
+ pEntry->usesMob = 1;
+ pEntry->pad0 = 0;
+ pEntry->pad1 = 0;
+ RT_ZERO(pEntry->pad2);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutput(pThisCC, pDXContext, soid, pEntry);
+ return rc;
+}
+
+
+int vmsvga3dDXSetShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXSetShaderIface, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXSetShaderIface(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+ SVGA3dStreamOutputId const soid = pCmd->soid;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid];
+
+ ASSERT_GUEST_RETURN(pCmd->sizeInBytes >= pEntry->numOutputStreamEntries * sizeof(SVGA3dStreamOutputDeclarationEntry), VERR_INVALID_PARAMETER);
+ ASSERT_GUEST(pEntry->usesMob);
+
+ pEntry->mobid = pCmd->mobid;
+ pEntry->offsetInBytes = pCmd->offsetInBytes;
+ pEntry->usesMob = 1;
+
+ return VINF_SUCCESS;
+}
+
+
+int vmsvga3dSurfaceStretchBltNonMSToMS(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnSurfaceStretchBltNonMSToMS, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnSurfaceStretchBltNonMSToMS(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dDXBindShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindShaderIface, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ rc = pSvgaR3State->pFuncsDX->pfnDXBindShaderIface(pThisCC, pDXContext);
+ return rc;
+}
+
+
+int vmsvga3dVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion const *pCmd, uint32_t cRect, SVGASignedRect const *paRect)
+{
+ int rc;
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnVBDXClearRenderTargetViewRegion, VERR_INVALID_STATE);
+ PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
+ AssertReturn(p3dState, VERR_INVALID_STATE);
+
+ PVMSVGA3DDXCONTEXT pDXContext;
+ rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dRenderTargetViewId const renderTargetViewId = pCmd->viewId;
+
+ ASSERT_GUEST_RETURN(pDXContext->cot.paRTView, VERR_INVALID_STATE);
+ ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(cRect <= 65536, VERR_INVALID_PARAMETER); /* Arbitrary limit. */
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ rc = pSvgaR3State->pFuncsDX->pfnVBDXClearRenderTargetViewRegion(pThisCC, pDXContext, renderTargetViewId, &pCmd->color, cRect, paRect);
+ return rc;
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glHlp.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glHlp.cpp
new file mode 100644
index 00000000..82bc29b8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glHlp.cpp
@@ -0,0 +1,768 @@
+/* $Id: DevVGA-SVGA3d-glHlp.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device OpenGL backend
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#ifdef DEBUG_bird
+//# define RTMEM_WRAP_TO_EF_APIS
+#endif
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d-internal.h"
+
+/* Parameters for glVertexAttribPointer. */
+typedef struct VertexAttribDesc
+{
+ GLint size;
+ GLenum type;
+ GLboolean normalized;
+ GLsizei stride;
+ GLsizei offset;
+} VertexAttribDesc;
+
+/* Information about a shader program. */
+typedef struct ShaderProgram
+{
+ GLuint vertexShader; /* Vertex shader name. */
+ GLuint fragmentShader; /* Fragment shader name. */
+ GLuint program; /* Shader program name. */
+ GLint sSourceTex; /* Location of the texture sampler uniform in the shader. */
+ GLint uTexInfo; /* Location of the texture information uniform in the shader. */
+} ShaderProgram;
+
+/* Texture format conversion data.
+ * Uses a fragment (pixel) shader to render a source texture in one format
+ * to the target texture in another format.
+ */
+typedef struct VMSVGA3DFORMATCONVERTER
+{
+ PVMSVGA3DSTATE pState;
+
+ ShaderProgram programYUY2ToRGB; /* From the YUY2 emulated format to the actual RGB texture. */
+ ShaderProgram programYUY2FromRGB; /* From the actual RGB texture to the emulated YUY2 format. */
+ ShaderProgram programUYVYToRGB; /* From the UYVY emulated format to the actual RGB texture. */
+ ShaderProgram programUYVYFromRGB; /* From the actual RGB texture to the emulated UYVY format. */
+
+ GLuint framebuffer; /* Framebuffer object name. */
+
+ GLuint vertexBuffer; /* Vertex attribute buffer. Position + texcoord. */
+} VMSVGA3DFORMATCONVERTER;
+
+/* Parameters for glVertexAttribPointer. */
+static const VertexAttribDesc aVertexAttribs[] =
+{
+ {2, GL_FLOAT, GL_FALSE, 16, 0 }, /* Position. */
+ {2, GL_FLOAT, GL_FALSE, 16, 8 } /* Texcoord. */
+};
+
+/* Triangle fan */
+static float const aAttribData[] =
+{
+ /* positions texcoords */
+ -1.0f, -1.0f, 0.0f, 0.0f,
+ 1.0f, -1.0f, 1.0f, 0.0f,
+ 1.0f, 1.0f, 1.0f, 1.0f,
+ -1.0f, 1.0f, 0.0f, 1.0f
+};
+
+static const GLchar shaderHeaderSource[] =
+{
+ " #version 120\n"
+};
+
+static const GLchar vertexShaderSource[] =
+{
+ " attribute vec2 attrib0;\n"
+ " attribute vec2 attrib1;\n"
+ " void main(void)\n"
+ " {\n"
+ " gl_TexCoord[0].xy = attrib1;\n"
+ " gl_Position = vec4(attrib0.x, attrib0.y, 0.0f, 1.0f);\n"
+ " }\n"
+};
+
+static const GLchar fetchYUY2Source[] =
+{
+ " vec4 fetchYUV(vec4 texColor)\n"
+ " {\n"
+ " return vec4(texColor.b, texColor.g, texColor.r, texColor.a);\n"
+ " }\n"
+};
+
+static const GLchar fetchUYVYSource[] =
+{
+ " vec4 fetchYUV(vec4 texColor)\n"
+ " {\n"
+ " return vec4(texColor.g, texColor.b, texColor.a, texColor.r);\n"
+ " }\n"
+};
+
+static const GLchar YUV2RGBShaderSource[] =
+{
+ " uniform sampler2D sSourceTex;\n"
+ " uniform vec4 uTexInfo;\n"
+ " \n"
+ " const mat3 yuvCoeffs = mat3\n"
+ " (\n"
+ " 1.164383f, 0.0f, 1.596027f, // first column \n"
+ " 1.164383f, -0.391762f, -0.812968f, // second column\n"
+ " 1.164383f, 2.017232f, 0.0f // third column\n"
+ " );\n"
+ " \n"
+ " void main() {\n"
+ " // Input texcoords are in [0;1] range for the target.\n"
+ " vec2 texCoord = gl_TexCoord[0].xy;\n"
+ " // Convert to the target coords in pixels: xPixel = texCoord.x * TextureWidth. \n"
+ " float xTargetPixel = texCoord.x * uTexInfo.x;\n"
+ " // Source texture is half width, i.e. it contains data in pixels [0; width / 2 - 1].\n"
+ " float xSourcePixel = xTargetPixel / 2.0f;\n"
+ " // Remainder is about 0.25 for even pixels and about 0.75 for odd pixels.\n"
+ " float remainder = fract(xSourcePixel);\n"
+ " // Back to the normalized coords: texCoord.x = xPixel / Width.\n"
+ " texCoord.x = xSourcePixel * uTexInfo.z;\n"
+ " vec4 texColor = texture2D(sSourceTex, texCoord);\n"
+ " vec4 y0uy1v = fetchYUV(texColor);\n"
+ " // Get y0 for even x coordinates and y1 for odd ones.\n"
+ " float y = remainder < 0.5f ? y0uy1v.x : y0uy1v.z;\n"
+ " // Make a vector for easier calculation.\n"
+ " vec3 yuv = vec3(y, y0uy1v.y, y0uy1v.w);\n"
+ " yuv -= vec3(0.0627f, 0.502f, 0.502f);\n"
+ " vec3 bgr = yuv * yuvCoeffs;\n"
+ " //vec3 bgr;\n"
+ " //bgr.r = 1.164383 * yuv.x + 1.596027 * yuv.z;\n"
+ " //bgr.g = 1.164383 * yuv.x - 0.391762 * yuv.y - 0.812968 * yuv.z;\n"
+ " //bgr.b = 1.164383 * yuv.x + 2.017232 * yuv.y;\n"
+ " bgr = clamp(bgr, 0.0f, 1.0f);\n"
+ " gl_FragData[0] = vec4(bgr, 1.0f);\n"
+ " }\n"
+};
+
+static const GLchar storeYUY2Source[] =
+{
+ " vec4 storeYUV(float y0, float u, float y1, float v)\n"
+ " {\n"
+ " return vec4(y1, u, y0, v);\n"
+ " }\n"
+};
+
+static const GLchar storeUYVYSource[] =
+{
+ " vec4 storeYUV(float y0, float u, float y1, float v)\n"
+ " {\n"
+ " return vec4(u, y1, v, y0);\n"
+ " }\n"
+};
+
+static const GLchar RGB2YUVShaderSource[] =
+{
+ " uniform sampler2D sSourceTex;\n"
+ " uniform vec4 uTexInfo;\n"
+ " \n"
+ " const mat3 bgrCoeffs = mat3\n"
+ " (\n"
+ " 0.2578f, 0.5039f, 0.0977f, // first column \n"
+ " -0.1484f, -0.2891f, 0.4375f, // second column\n"
+ " 0.4375f, -0.3672f, -0.0703f // third column\n"
+ " );\n"
+ " const vec3 yuvShift = vec3(0.0647f, 0.5039f, 0.5039f);\n"
+ " \n"
+ " void main() {\n"
+ " // Input texcoords are in [0;1] range for the target.\n"
+ " vec2 texCoordDst = gl_TexCoord[0].xy;\n"
+ " // Convert to the target coords in pixels: xPixel = TexCoord.x * TextureWidth.\n"
+ " float xTargetPixel = texCoordDst.x * uTexInfo.x;\n"
+ " vec4 bgraOutputPixel;\n"
+ " if (xTargetPixel < uTexInfo.x / 2.0f)\n"
+ " {\n"
+ " // Target texture is half width, i.e. it contains data in pixels [0; width / 2 - 1].\n"
+ " // Compute the source texture coords for the pixels which will be used to compute the target pixel.\n"
+ " vec2 texCoordSrc = texCoordDst;\n"
+ " texCoordSrc.x *= 2.0f;\n"
+ " // Even pixel. Fetch two BGRA source pixels.\n"
+ " vec4 texColor0 = texture2D(sSourceTex, texCoordSrc);\n"
+ " // Advance one pixel (+ 1/Width)\n"
+ " texCoordSrc.x += uTexInfo.z;\n"
+ " vec4 texColor1 = texture2D(sSourceTex, texCoordSrc);\n"
+ " vec3 yuv0 = texColor0.rgb * bgrCoeffs;\n"
+ " yuv0 += yuvShift;\n"
+ " vec3 yuv1 = texColor1.rgb * bgrCoeffs;\n"
+ " yuv1 += yuvShift;\n"
+ " float y0 = yuv0.r;\n"
+ " float u = (yuv0.g + yuv1.g) / 2.0f;\n"
+ " float y1 = yuv1.r;\n"
+ " float v = (yuv0.b + yuv1.b) / 2.0f;\n"
+ " bgraOutputPixel = storeYUV(y0, u, y1, v);\n"
+ " }\n"
+ " else\n"
+ " {\n"
+ " // [width / 2; width - 1] pixels are not used. Set to something.\n"
+ " bgraOutputPixel = vec4(0.0f, 0.0f, 0.0f, 0.0f);\n"
+ " }\n"
+ " bgraOutputPixel = clamp(bgraOutputPixel, 0.0f, 1.0f);\n"
+ " gl_FragData[0] = bgraOutputPixel;\n"
+ " }\n"
+};
+
+#define GL_CHECK_ERROR() do { \
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext); \
+ if (pContext->lastError != GL_NO_ERROR) \
+ LogRelMax(10, ("VMSVGA: %s (%d): GL error 0x%x\n", __FUNCTION__, __LINE__, pContext->lastError)); \
+} while (0)
+
+/* Compile shaders and link a shader program. */
+static void createShaderProgram(PVMSVGA3DSTATE pState,
+ ShaderProgram *pProgram,
+ int cVertexSources, const GLchar **apszVertexSources,
+ int cFragmentSources, const GLchar **apszFragmentSources)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ /* Everything is done on the shared context. The pState and pContext are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ int success;
+ char szInfoLog[1024];
+
+ /*
+ * VERTEX shader.
+ */
+ pProgram->vertexShader = pState->ext.glCreateShader(GL_VERTEX_SHADER);
+ GL_CHECK_ERROR();
+
+ pState->ext.glShaderSource(pProgram->vertexShader, cVertexSources, apszVertexSources, NULL);
+ GL_CHECK_ERROR();
+
+ pState->ext.glCompileShader(pProgram->vertexShader);
+ GL_CHECK_ERROR();
+
+ pState->ext.glGetShaderiv(pProgram->vertexShader, GL_COMPILE_STATUS, &success);
+ GL_CHECK_ERROR();
+ if (!success)
+ {
+ pState->ext.glGetShaderInfoLog(pProgram->vertexShader, sizeof(szInfoLog), NULL, szInfoLog);
+ GL_CHECK_ERROR();
+ LogRelMax(10, ("VMSVGA: Vertex shader compilation error:\n%s\n", szInfoLog));
+ };
+
+ /*
+ * FRAGMENT shader.
+ */
+ pProgram->fragmentShader = pState->ext.glCreateShader(GL_FRAGMENT_SHADER);
+ GL_CHECK_ERROR();
+
+ pState->ext.glShaderSource(pProgram->fragmentShader, cFragmentSources, apszFragmentSources, NULL);
+ GL_CHECK_ERROR();
+
+ pState->ext.glCompileShader(pProgram->fragmentShader);
+ GL_CHECK_ERROR();
+
+ pState->ext.glGetShaderiv(pProgram->fragmentShader, GL_COMPILE_STATUS, &success);
+ GL_CHECK_ERROR();
+ if (!success)
+ {
+ pState->ext.glGetShaderInfoLog(pProgram->fragmentShader, sizeof(szInfoLog), NULL, szInfoLog);
+ GL_CHECK_ERROR();
+ LogRelMax(10, ("VMSVGA: Fragment shader compilation error:\n%s\n", szInfoLog));
+ };
+
+ /*
+ * Program
+ */
+ pProgram->program = pState->ext.glCreateProgram();
+ GL_CHECK_ERROR();
+
+ pState->ext.glAttachShader(pProgram->program, pProgram->vertexShader);
+ GL_CHECK_ERROR();
+
+ pState->ext.glAttachShader(pProgram->program, pProgram->fragmentShader);
+ GL_CHECK_ERROR();
+
+ pState->ext.glLinkProgram(pProgram->program);
+ GL_CHECK_ERROR();
+
+ pState->ext.glGetProgramiv(pProgram->program, GL_LINK_STATUS, &success);
+ if(!success)
+ {
+ pState->ext.glGetProgramInfoLog(pProgram->program, sizeof(szInfoLog), NULL, szInfoLog);
+ GL_CHECK_ERROR();
+ LogRelMax(10, ("VMSVGA: Shader program link error:\n%s\n", szInfoLog));
+ }
+
+ pProgram->sSourceTex = pState->ext.glGetUniformLocation(pProgram->program, "sSourceTex");
+ GL_CHECK_ERROR();
+
+ pProgram->uTexInfo = pState->ext.glGetUniformLocation(pProgram->program, "uTexInfo");
+ GL_CHECK_ERROR();
+}
+
+/* Delete a shader program and associated shaders. */
+static void deleteShaderProgram(PVMSVGA3DSTATE pState,
+ ShaderProgram *pProgram)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ /* Everything is done on the shared context. The pState and pContext are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ if (pProgram->program)
+ {
+ if (pProgram->vertexShader)
+ {
+ pState->ext.glDetachShader(pProgram->program, pProgram->vertexShader);
+ GL_CHECK_ERROR();
+
+ pState->ext.glDeleteShader(pProgram->vertexShader);
+ GL_CHECK_ERROR();
+ }
+
+ if (pProgram->fragmentShader)
+ {
+ pState->ext.glDetachShader(pProgram->program, pProgram->fragmentShader);
+ GL_CHECK_ERROR();
+
+ pState->ext.glDeleteShader(pProgram->fragmentShader);
+ GL_CHECK_ERROR();
+ }
+
+ pState->ext.glDeleteProgram(pProgram->program);
+ GL_CHECK_ERROR();
+ }
+
+ RT_ZERO(*pProgram);
+}
+
+/* Initialize the format conversion. Allocate and create necessary resources. */
+static void formatConversionInit(PVMSVGA3DSTATE pState)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ PVMSVGA3DFORMATCONVERTER pConv = pState->pConv;
+ AssertReturnVoid(pConv);
+
+ /* The pState and pContext variables are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ pConv->pState = pState;
+
+ /*
+ * Shader programs.
+ */
+ static const GLchar *apszVertexShaderSources[] =
+ {
+ shaderHeaderSource,
+ vertexShaderSource
+ };
+
+ static const GLchar * apszYUY2ToRGBSources[] =
+ {
+ shaderHeaderSource,
+ fetchYUY2Source,
+ YUV2RGBShaderSource
+ };
+
+ static const GLchar *apszUYVYToRGBSources[] =
+ {
+ shaderHeaderSource,
+ fetchUYVYSource,
+ YUV2RGBShaderSource
+ };
+
+ static const GLchar *apszYUY2FromRGBSources[] =
+ {
+ shaderHeaderSource,
+ storeYUY2Source,
+ RGB2YUVShaderSource
+ };
+
+ static const GLchar *apszUYVYFromRGBSources[] =
+ {
+ shaderHeaderSource,
+ storeUYVYSource,
+ RGB2YUVShaderSource
+ };
+
+ createShaderProgram(pState, &pConv->programYUY2ToRGB,
+ RT_ELEMENTS(apszVertexShaderSources), apszVertexShaderSources,
+ RT_ELEMENTS(apszYUY2ToRGBSources), apszYUY2ToRGBSources);
+
+ createShaderProgram(pState, &pConv->programUYVYToRGB,
+ RT_ELEMENTS(apszVertexShaderSources), apszVertexShaderSources,
+ RT_ELEMENTS(apszUYVYToRGBSources), apszUYVYToRGBSources);
+
+ createShaderProgram(pState, &pConv->programYUY2FromRGB,
+ RT_ELEMENTS(apszVertexShaderSources), apszVertexShaderSources,
+ RT_ELEMENTS(apszYUY2FromRGBSources), apszYUY2FromRGBSources);
+
+ createShaderProgram(pState, &pConv->programUYVYFromRGB,
+ RT_ELEMENTS(apszVertexShaderSources), apszVertexShaderSources,
+ RT_ELEMENTS(apszUYVYFromRGBSources), apszUYVYFromRGBSources);
+
+ /*
+ * Create a framebuffer object which is used for rendering to a texture.
+ */
+ pState->ext.glGenFramebuffers(1, &pConv->framebuffer);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, pConv->framebuffer);
+ GL_CHECK_ERROR();
+
+ static GLenum aDrawBuffers[] = { GL_COLOR_ATTACHMENT0 };
+ pState->ext.glDrawBuffers(RT_ELEMENTS(aDrawBuffers), aDrawBuffers);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+ GL_CHECK_ERROR();
+
+ /*
+ * Vertex attribute array.
+ */
+ pState->ext.glGenBuffers(1, &pConv->vertexBuffer);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pConv->vertexBuffer);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBufferData(GL_ARRAY_BUFFER, sizeof(aAttribData), aAttribData, GL_STATIC_DRAW);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+ GL_CHECK_ERROR();
+}
+
+/* Delete everything. */
+static void formatConversionDestroy(PVMSVGA3DSTATE pState)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ PVMSVGA3DFORMATCONVERTER pConv = pState->pConv;
+ AssertReturnVoid(pConv);
+
+ /* The pState and pContext variables are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ if (pConv->framebuffer != 0)
+ {
+ /* The code keeps nothing attached. */
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, pConv->framebuffer);
+ GL_CHECK_ERROR();
+
+ GLint texture = -1;
+ pState->ext.glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &texture);
+ GL_CHECK_ERROR();
+ AssertMsg(texture == 0, ("texture %d\n", texture));
+
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+ GL_CHECK_ERROR();
+
+ pState->ext.glDeleteFramebuffers(1, &pConv->framebuffer);
+ GL_CHECK_ERROR();
+
+ pConv->framebuffer = 0;
+ }
+
+ deleteShaderProgram(pState, &pConv->programUYVYFromRGB);
+ deleteShaderProgram(pState, &pConv->programYUY2FromRGB);
+ deleteShaderProgram(pState, &pConv->programUYVYToRGB);
+ deleteShaderProgram(pState, &pConv->programYUY2ToRGB);
+
+ if (pConv->vertexBuffer)
+ {
+ pState->ext.glDeleteBuffers(1, &pConv->vertexBuffer);
+ GL_CHECK_ERROR();
+
+ pConv->vertexBuffer = 0;
+ }
+
+ pConv->pState = 0;
+}
+
+/* Make use of a shader program for the current context and initialize the program uniforms. */
+static void setShaderProgram(PVMSVGA3DSTATE pState,
+ ShaderProgram *pProgram,
+ uint32_t cWidth,
+ uint32_t cHeight)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ /* Everything is done on the shared context. The pState and pContext are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ pState->ext.glUseProgram(pProgram->program);
+ GL_CHECK_ERROR();
+
+ pState->ext.glUniform1i(pProgram->sSourceTex, 0);
+ GL_CHECK_ERROR();
+
+ float aTextureInfo[4];
+ aTextureInfo[0] = (float)cWidth;
+ aTextureInfo[1] = (float)cHeight;
+ aTextureInfo[2] = 1.0f / (float)cWidth; /* Pixel width in texture coords. */
+ aTextureInfo[3] = 1.0f / (float)cHeight; /* Pixel height in texture coords. */
+
+ pState->ext.glUniform4fv(pProgram->uTexInfo, 1, aTextureInfo);
+ GL_CHECK_ERROR();
+}
+
+/* Attach the texture which must be used as the render target
+ * to the GL_DRAW_FRAMEBUFFER as GL_COLOR_ATTACHMENT0.
+ */
+static void setRenderTarget(PVMSVGA3DSTATE pState,
+ GLuint texture,
+ uint32_t iMipmap)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ PVMSVGA3DFORMATCONVERTER pConv = pState->pConv;
+ AssertReturnVoid(pConv);
+
+ /* Everything is done on the shared context. The pState and pContext are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, pConv->framebuffer);
+ GL_CHECK_ERROR();
+
+ glBindTexture(GL_TEXTURE_2D, texture);
+ GL_CHECK_ERROR();
+
+ pState->ext.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, iMipmap);
+ GL_CHECK_ERROR();
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ GL_CHECK_ERROR();
+
+ Assert(pState->ext.glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
+}
+
+/* Undo what setRenderTarget did. */
+static void unsetRenderTarget(PVMSVGA3DSTATE pState,
+ GLuint texture)
+{
+ AssertReturnVoid(pState->idActiveContext == VMSVGA3D_SHARED_CTX_ID);
+
+ /* Everything is done on the shared context. The pState and pContext are for GL_CHECK_ERROR macro. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+
+ RT_NOREF(texture);
+
+ pState->ext.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+ GL_CHECK_ERROR();
+}
+
+/** Convert one texture to another.
+ *
+ * @param pState The backend.
+ * @param pCurrentContext The current context, which must be restored before returning.
+ * @param pSurface The surface which needs conversion.
+ * @param iMipmap The mipmap level which needs to be converted.
+ * @param fToRGB True for conversion from the intermediate texture emulated format
+ * to the RGB format of the actual texture.
+ * False for conversion from the actual RGB texture to the intermediate texture.
+ */
+static void doRender(PVMSVGA3DSTATE pState,
+ PVMSVGA3DCONTEXT pCurrentContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t iMipmap,
+ bool fToRGB)
+{
+ if (!fToRGB)
+ {
+ /** @todo Disable readback transfers for now. They cause crash in glDrawArrays with Mesa 19.2 after
+ * a previously converted texture is deleted and another texture is being converted.
+ * Such transfer are useless anyway for the emulated YUV formats and the guest should not need them usually.
+ */
+ return;
+ }
+
+ LogFunc(("formatConversion: idActiveContext %u, pConv %p, sid=%u, oglid=%u, oglidEmul=%u, mm=%u, %s\n",
+ pState->idActiveContext, pState->pConv, pSurface->id, pSurface->oglId.texture, pSurface->idEmulated, iMipmap, fToRGB ? "ToRGB" : "FromRGB"));
+
+ PVMSVGA3DFORMATCONVERTER pConv = pState->pConv;
+ AssertReturnVoid(pConv);
+
+ ShaderProgram *pProgram = NULL;
+ GLuint sourceTexture = 0;
+ GLuint targetTexture = 0;
+ if (fToRGB)
+ {
+ if (pSurface->format == SVGA3D_YUY2)
+ {
+ pProgram = &pConv->programYUY2ToRGB;
+ }
+ else if (pSurface->format == SVGA3D_UYVY)
+ {
+ pProgram = &pConv->programUYVYToRGB;
+ }
+ sourceTexture = pSurface->idEmulated;
+ targetTexture = pSurface->oglId.texture;
+ }
+ else
+ {
+ if (pSurface->format == SVGA3D_YUY2)
+ {
+ pProgram = &pConv->programYUY2FromRGB;
+ }
+ else if (pSurface->format == SVGA3D_UYVY)
+ {
+ pProgram = &pConv->programUYVYFromRGB;
+ }
+ sourceTexture = pSurface->oglId.texture;
+ targetTexture = pSurface->idEmulated;
+ }
+
+ AssertReturnVoid(pProgram);
+
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel;
+ int rc = vmsvga3dMipmapLevel(pSurface, 0, iMipmap, &pMipmapLevel);
+ AssertRCReturnVoid(rc);
+
+ uint32_t const cWidth = pMipmapLevel->mipmapSize.width;
+ uint32_t const cHeight = pMipmapLevel->mipmapSize.height;
+
+ /* Use the shared context, where all textures are created. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ setShaderProgram(pState, pProgram, cWidth, cHeight);
+
+ setRenderTarget(pState, targetTexture, iMipmap);
+
+ glViewport(0, 0, cWidth, cHeight);
+ GL_CHECK_ERROR();
+
+ glDisable(GL_DEPTH_TEST);
+ GL_CHECK_ERROR();
+
+ pState->ext.glActiveTexture(GL_TEXTURE0);
+ GL_CHECK_ERROR();
+
+ glBindTexture(GL_TEXTURE_2D, sourceTexture);
+ GL_CHECK_ERROR();
+
+ /* Make sure to set the simplest filter. Otherwise the conversion will not work. */
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ GL_CHECK_ERROR();
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pConv->vertexBuffer);
+ GL_CHECK_ERROR();
+
+ GLuint index;
+ for (index = 0; index < RT_ELEMENTS(aVertexAttribs); ++index)
+ {
+ pState->ext.glEnableVertexAttribArray(index);
+ GL_CHECK_ERROR();
+
+ pState->ext.glVertexAttribPointer(index, aVertexAttribs[index].size, aVertexAttribs[index].type,
+ aVertexAttribs[index].normalized, aVertexAttribs[index].stride,
+ (const GLvoid *)(uintptr_t)aVertexAttribs[index].offset);
+ GL_CHECK_ERROR();
+ }
+
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ GL_CHECK_ERROR();
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+ GL_CHECK_ERROR();
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ GL_CHECK_ERROR();
+
+ unsetRenderTarget(pState, targetTexture);
+
+ pState->ext.glUseProgram(0);
+ GL_CHECK_ERROR();
+
+ for (index = 0; index < RT_ELEMENTS(aVertexAttribs); ++index)
+ {
+ pState->ext.glDisableVertexAttribArray(index);
+ GL_CHECK_ERROR();
+ }
+
+ /* Restore the current context. */
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pCurrentContext);
+}
+
+void FormatConvUpdateTexture(PVMSVGA3DSTATE pState,
+ PVMSVGA3DCONTEXT pCurrentContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t iMipmap)
+{
+ doRender(pState, pCurrentContext, pSurface, iMipmap, true);
+}
+
+void FormatConvReadTexture(PVMSVGA3DSTATE pState,
+ PVMSVGA3DCONTEXT pCurrentContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t iMipmap)
+{
+ doRender(pState, pCurrentContext, pSurface, iMipmap, false);
+}
+
+void vmsvga3dOnSharedContextDefine(PVMSVGA3DSTATE pState)
+{
+ /* Use the shared context, where all textures are created. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /*
+ * Format conversion.
+ */
+ Assert(pState->pConv == NULL);
+
+ pState->pConv = (VMSVGA3DFORMATCONVERTER *)RTMemAllocZ(sizeof(VMSVGA3DFORMATCONVERTER));
+ AssertReturnVoid(pState->pConv);
+
+ formatConversionInit(pState);
+}
+
+void vmsvga3dOnSharedContextDestroy(PVMSVGA3DSTATE pState)
+{
+ /* Use the shared context, where all textures are created. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (pState->pConv)
+ {
+ formatConversionDestroy(pState);
+
+ RTMemFree(pState->pConv);
+ pState->pConv = NULL;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.cpp
new file mode 100644
index 00000000..25e18b56
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.cpp
@@ -0,0 +1,428 @@
+/* $Id: DevVGA-SVGA3d-glLdr.cpp $ */
+/** @file
+ * DevVGA - VMWare SVGA device - 3D part, dynamic loading of GL function.
+ */
+
+/*
+ * Copyright (C) 2018-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#define VMSVGA3D_GL_DEFINE_PFN
+#include "DevVGA-SVGA3d-glLdr.h"
+
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/err.h>
+#include <iprt/assert.h>
+#include <iprt/cdefs.h>
+#include <iprt/ldr.h>
+#include <iprt/log.h>
+
+#ifdef RT_OS_WINDOWS
+# define OGLGETPROCADDRESS MyWinGetProcAddress
+DECLINLINE(PFNRT) MyWinGetProcAddress(const char *pszSymbol)
+{
+ int rc;
+
+ static RTLDRMOD s_hOpenGL32 = NULL;
+ if (s_hOpenGL32 == NULL)
+ {
+ rc = RTLdrLoadSystem("opengl32", /* fNoUnload = */ true, &s_hOpenGL32);
+ if (RT_FAILURE(rc))
+ s_hOpenGL32 = NULL;
+ }
+
+ typedef PROC (WINAPI *PFNWGLGETPROCADDRESS)(LPCSTR);
+ static PFNWGLGETPROCADDRESS s_wglGetProcAddress = NULL;
+ if (s_wglGetProcAddress == NULL)
+ {
+ if (s_hOpenGL32 != NULL)
+ {
+ rc = RTLdrGetSymbol(s_hOpenGL32, "wglGetProcAddress", (void **)&s_wglGetProcAddress);
+ if (RT_FAILURE(rc))
+ s_wglGetProcAddress = NULL;
+ }
+ }
+
+ if (s_wglGetProcAddress)
+ {
+ /* Khronos: [on failure] "some implementations will return other values. 1, 2, and 3 are used, as well as -1". */
+ PFNRT p = (PFNRT)s_wglGetProcAddress(pszSymbol);
+ if (RT_VALID_PTR(p))
+ return p;
+
+ /* Might be an exported symbol. */
+ rc = RTLdrGetSymbol(s_hOpenGL32, pszSymbol, (void **)&p);
+ if (RT_SUCCESS(rc))
+ return p;
+ }
+
+ return 0;
+}
+
+#elif defined(RT_OS_DARWIN)
+# include <dlfcn.h>
+# define OGLGETPROCADDRESS MyNSGLGetProcAddress
+/** Resolves an OpenGL symbol. */
+static void *MyNSGLGetProcAddress(const char *pszSymbol)
+{
+ /* Another copy in shaderapi.c. */
+ static void *s_pvImage = NULL;
+ if (s_pvImage == NULL)
+ s_pvImage = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY);
+ return s_pvImage ? dlsym(s_pvImage, pszSymbol) : NULL;
+}
+
+#else
+# define OGLGETPROCADDRESS MyGLXGetProcAddress
+static PFNRT MyGLXGetProcAddress(const char *pszSymbol)
+{
+ int rc;
+
+ static RTLDRMOD s_hGL = NULL;
+ if (s_hGL == NULL)
+ {
+ static const char s_szLibGL[] = "libGL.so.1";
+ rc = RTLdrLoadEx(s_szLibGL, &s_hGL, RTLDRLOAD_FLAGS_GLOBAL | RTLDRLOAD_FLAGS_NO_UNLOAD, NULL);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: failed to load %s: %Rrc\n", s_szLibGL, rc));
+ s_hGL = NULL;
+ return NULL;
+ }
+ }
+
+ typedef PFNRT (* PFNGLXGETPROCADDRESS)(const GLubyte * procName);
+ static PFNGLXGETPROCADDRESS s_glXGetProcAddress = NULL;
+ if (s_glXGetProcAddress == NULL)
+ {
+ rc = RTLdrGetSymbol(s_hGL, "glXGetProcAddress", (void **)&s_glXGetProcAddress);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: failed to get glXGetProcAddress: %Rrc\n", rc));
+ s_glXGetProcAddress = NULL;
+ return NULL;
+ }
+ }
+
+ PFNRT p = s_glXGetProcAddress((const GLubyte *)pszSymbol);
+ if (RT_VALID_PTR(p))
+ return p;
+
+ /* Might be an exported symbol. */
+ rc = RTLdrGetSymbol(s_hGL, pszSymbol, (void **)&p);
+ if (RT_SUCCESS(rc))
+ return p;
+
+ return NULL;
+}
+
+static PFNRT MyX11GetProcAddress(const char *pszSymbol)
+{
+ int rc;
+
+ static RTLDRMOD s_hX11 = NULL;
+ if (s_hX11 == NULL)
+ {
+ static const char s_szLibX11[] = "libX11.so.6";
+ rc = RTLdrLoadEx(s_szLibX11, &s_hX11, RTLDRLOAD_FLAGS_LOCAL | RTLDRLOAD_FLAGS_NO_UNLOAD, NULL);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: failed to load %s: %Rrc\n", s_szLibX11, rc));
+ s_hX11 = NULL;
+ return NULL;
+ }
+ }
+
+ PFNRT p = NULL;
+ rc = RTLdrGetSymbol(s_hX11, pszSymbol, (void **)&p);
+ if (RT_SUCCESS(rc))
+ return p;
+
+ return NULL;
+}
+
+#define X11GETPROC_(ProcName) do { \
+ *(PFNRT *)&pfn_##ProcName = pfnRet = MyX11GetProcAddress(#ProcName); \
+ if (pfnRet) { /* likely */ } \
+ else \
+ { \
+ AssertLogRelMsg(pfnRet, ("%s missing\n", #ProcName)); \
+ return PDMDevHlpVMSetError(pDevIns, VERR_VGA_GL_SYMBOL_NOT_FOUND, RT_SRC_POS, \
+ "Missing libX11 symbol '%s'\n", #ProcName); \
+ } \
+} while(0)
+#endif
+
+#define GLGETPROC_(ProcName, NameSuffix) do { \
+ *(PFNRT *)&pfn_##ProcName = pfnRet = OGLGETPROCADDRESS(#ProcName NameSuffix); \
+ if (pfnRet) { /* likely */ } \
+ else \
+ { \
+ AssertLogRelMsg(pfnRet, ("%s missing\n", #ProcName NameSuffix)); \
+ return PDMDevHlpVMSetError(pDevIns, VERR_VGA_GL_SYMBOL_NOT_FOUND, RT_SRC_POS, \
+ "Missing OpenGL symbol '%s'\n", #ProcName NameSuffix); \
+ } \
+} while(0)
+
+int glLdrInit(PPDMDEVINS pDevIns)
+{
+ /** @todo r=bird: Perhaps make this template include file driven? See
+ * include/VBox/dbus.h, include/VBox/dbus-calls.h and iprt/runtime-loader.h for
+ * instance. Regardless, it would be would be nice if we could move up the
+ * RTLdrLoadSystem/dlopen bits and have separate error reporting for those,
+ * making use of VERR_VGA_GL_LOAD_FAILURE. I can look into that, but
+ * probably only after the release is out... */
+
+#ifdef RT_OS_WINDOWS
+ pfn_wglCreateContext = 0;
+ pfn_wglDeleteContext = 0;
+ pfn_wglMakeCurrent = 0;
+ pfn_wglShareLists = 0;
+#elif defined(RT_OS_LINUX)
+ pfn_XConfigureWindow = 0;
+ pfn_XCloseDisplay = 0;
+ pfn_XCreateColormap = 0;
+ pfn_XCreatePixmap = 0;
+ pfn_XCreateWindow = 0;
+ pfn_XDefaultRootWindow = 0;
+ pfn_XDestroyWindow = 0;
+ pfn_XFree = 0;
+ pfn_XFreePixmap = 0;
+ pfn_XInitThreads = 0;
+ pfn_XNextEvent = 0;
+ pfn_XOpenDisplay = 0;
+ pfn_XPending = 0;
+ pfn_XSetErrorHandler = 0;
+ pfn_XSync = 0;
+ pfn_XScreenNumberOfScreen = 0;
+ pfn_XMapWindow = 0;
+ pfn_XGetWindowAttributes = 0;
+ pfn_glXGetFBConfigAttrib = 0;
+ pfn_glXGetVisualFromFBConfig = 0;
+ pfn_glXQueryVersion = 0;
+ pfn_glXChooseFBConfig = 0;
+ pfn_glXChooseVisual = 0;
+ pfn_glXCreateContext = 0;
+ pfn_glXCreatePixmap = 0;
+ pfn_glXMakeCurrent = 0;
+ pfn_glXDestroyContext = 0;
+ pfn_glXDestroyPixmap = 0;
+#endif
+ pfn_glAlphaFunc = 0;
+ pfn_glBegin = 0;
+ pfn_glBindTexture = 0;
+ pfn_glBlendColor = 0;
+ pfn_glBlendEquation = 0;
+ pfn_glBlendFunc = 0;
+ pfn_glClear = 0;
+ pfn_glClearColor = 0;
+ pfn_glClearDepth = 0;
+ pfn_glClearStencil = 0;
+ pfn_glClientActiveTexture = 0;
+ pfn_glClipPlane = 0;
+ pfn_glColorMask = 0;
+ pfn_glColorPointer = 0;
+ pfn_glCullFace = 0;
+ pfn_glDeleteTextures = 0;
+ pfn_glDepthFunc = 0;
+ pfn_glDepthMask = 0;
+ pfn_glDepthRange = 0;
+ pfn_glDisable = 0;
+ pfn_glDisableClientState = 0;
+ pfn_glDrawArrays = 0;
+ pfn_glDrawElements = 0;
+ pfn_glEnable = 0;
+ pfn_glEnableClientState = 0;
+ pfn_glEnd = 0;
+ pfn_glFinish = 0;
+ pfn_glFlush = 0;
+ pfn_glFogf = 0;
+ pfn_glFogfv = 0;
+ pfn_glFogi = 0;
+ pfn_glFrontFace = 0;
+ pfn_glGenTextures = 0;
+ pfn_glGetBooleanv = 0;
+ pfn_glGetError = 0;
+ pfn_glGetFloatv = 0;
+ pfn_glGetIntegerv = 0;
+ pfn_glGetString = 0;
+ pfn_glGetTexImage = 0;
+ pfn_glLightModelfv = 0;
+ pfn_glLightf = 0;
+ pfn_glLightfv = 0;
+ pfn_glLineWidth = 0;
+ pfn_glLoadIdentity = 0;
+ pfn_glLoadMatrixf = 0;
+ pfn_glMaterialfv = 0;
+ pfn_glMatrixMode = 0;
+ pfn_glMultMatrixf = 0;
+ pfn_glNormalPointer = 0;
+ pfn_glOrtho = 0;
+ pfn_glPixelStorei = 0;
+ pfn_glPointSize = 0;
+ pfn_glPolygonMode = 0;
+ pfn_glPolygonOffset = 0;
+ pfn_glPopAttrib = 0;
+ pfn_glPopMatrix = 0;
+ pfn_glPushAttrib = 0;
+ pfn_glPushMatrix = 0;
+ pfn_glScissor = 0;
+ pfn_glShadeModel = 0;
+ pfn_glStencilFunc = 0;
+ pfn_glStencilMask = 0;
+ pfn_glStencilOp = 0;
+ pfn_glTexCoord2f = 0;
+ pfn_glTexCoordPointer = 0;
+ pfn_glTexImage2D = 0;
+ pfn_glTexParameterf = 0;
+ pfn_glTexParameterfv = 0;
+ pfn_glTexParameteri = 0;
+ pfn_glTexSubImage2D = 0;
+ pfn_glVertex2i = 0;
+ pfn_glVertexPointer = 0;
+ pfn_glViewport = 0;
+
+ PFNRT pfnRet;
+#ifdef RT_OS_WINDOWS
+ GLGETPROC_(wglCreateContext, "");
+ GLGETPROC_(wglDeleteContext, "");
+ GLGETPROC_(wglMakeCurrent, "");
+ GLGETPROC_(wglShareLists, "");
+#elif defined(RT_OS_LINUX)
+ X11GETPROC_(XConfigureWindow);
+ X11GETPROC_(XCloseDisplay);
+ X11GETPROC_(XCreateColormap);
+ X11GETPROC_(XCreatePixmap);
+ X11GETPROC_(XCreateWindow);
+ X11GETPROC_(XDefaultRootWindow);
+ X11GETPROC_(XDestroyWindow);
+ X11GETPROC_(XFree);
+ X11GETPROC_(XFreePixmap);
+ X11GETPROC_(XInitThreads);
+ X11GETPROC_(XNextEvent);
+ X11GETPROC_(XOpenDisplay);
+ X11GETPROC_(XPending);
+ X11GETPROC_(XSetErrorHandler);
+ X11GETPROC_(XSync);
+ X11GETPROC_(XScreenNumberOfScreen);
+ X11GETPROC_(XMapWindow);
+ X11GETPROC_(XGetWindowAttributes);
+ GLGETPROC_(glXGetFBConfigAttrib, "");
+ GLGETPROC_(glXGetVisualFromFBConfig, "");
+ GLGETPROC_(glXQueryVersion, "");
+ GLGETPROC_(glXChooseFBConfig, "");
+ GLGETPROC_(glXChooseVisual, "");
+ GLGETPROC_(glXCreateContext, "");
+ GLGETPROC_(glXCreatePixmap, "");
+ GLGETPROC_(glXMakeCurrent, "");
+ GLGETPROC_(glXDestroyContext, "");
+ GLGETPROC_(glXDestroyPixmap, "");
+#endif
+ GLGETPROC_(glAlphaFunc, "");
+ GLGETPROC_(glBegin, "");
+ GLGETPROC_(glBindTexture, "");
+ GLGETPROC_(glBlendFunc, "");
+ GLGETPROC_(glClear, "");
+ GLGETPROC_(glClearColor, "");
+ GLGETPROC_(glClearDepth, "");
+ GLGETPROC_(glClearStencil, "");
+ GLGETPROC_(glClipPlane, "");
+ GLGETPROC_(glColorMask, "");
+ GLGETPROC_(glColorPointer, "");
+ GLGETPROC_(glCullFace, "");
+ GLGETPROC_(glDeleteTextures, "");
+ GLGETPROC_(glDepthFunc, "");
+ GLGETPROC_(glDepthMask, "");
+ GLGETPROC_(glDepthRange, "");
+ GLGETPROC_(glDisable, "");
+ GLGETPROC_(glDisableClientState, "");
+ GLGETPROC_(glDrawArrays, "");
+ GLGETPROC_(glDrawElements, "");
+ GLGETPROC_(glEnable, "");
+ GLGETPROC_(glEnableClientState, "");
+ GLGETPROC_(glEnd, "");
+ GLGETPROC_(glFinish, "");
+ GLGETPROC_(glFlush, "");
+ GLGETPROC_(glFogf, "");
+ GLGETPROC_(glFogfv, "");
+ GLGETPROC_(glFogi, "");
+ GLGETPROC_(glFrontFace, "");
+ GLGETPROC_(glGenTextures, "");
+ GLGETPROC_(glGetBooleanv, "");
+ GLGETPROC_(glGetError, "");
+ GLGETPROC_(glGetFloatv, "");
+ GLGETPROC_(glGetIntegerv, "");
+ GLGETPROC_(glGetString, "");
+ GLGETPROC_(glGetTexImage, "");
+ GLGETPROC_(glLightModelfv, "");
+ GLGETPROC_(glLightf, "");
+ GLGETPROC_(glLightfv, "");
+ GLGETPROC_(glLineWidth, "");
+ GLGETPROC_(glLoadIdentity, "");
+ GLGETPROC_(glLoadMatrixf, "");
+ GLGETPROC_(glMaterialfv, "");
+ GLGETPROC_(glMatrixMode, "");
+ GLGETPROC_(glMultMatrixf, "");
+ GLGETPROC_(glNormalPointer, "");
+ GLGETPROC_(glOrtho, "");
+ GLGETPROC_(glPixelStorei, "");
+ GLGETPROC_(glPointSize, "");
+ GLGETPROC_(glPolygonMode, "");
+ GLGETPROC_(glPolygonOffset, "");
+ GLGETPROC_(glPopAttrib, "");
+ GLGETPROC_(glPopMatrix, "");
+ GLGETPROC_(glPushAttrib, "");
+ GLGETPROC_(glPushMatrix, "");
+ GLGETPROC_(glScissor, "");
+ GLGETPROC_(glShadeModel, "");
+ GLGETPROC_(glStencilFunc, "");
+ GLGETPROC_(glStencilMask, "");
+ GLGETPROC_(glStencilOp, "");
+ GLGETPROC_(glTexCoord2f, "");
+ GLGETPROC_(glTexCoordPointer, "");
+ GLGETPROC_(glTexImage2D, "");
+ GLGETPROC_(glTexParameterf, "");
+ GLGETPROC_(glTexParameterfv, "");
+ GLGETPROC_(glTexParameteri, "");
+ GLGETPROC_(glTexSubImage2D, "");
+ GLGETPROC_(glVertex2i, "");
+ GLGETPROC_(glVertexPointer, "");
+ GLGETPROC_(glViewport, "");
+
+#ifdef RT_OS_LINUX
+ XInitThreads();
+#endif
+ return VINF_SUCCESS;
+}
+
+PFNRT glLdrGetProcAddress(const char *pszSymbol)
+{
+ return OGLGETPROCADDRESS(pszSymbol);
+}
+
+int glLdrGetExtFunctions(PPDMDEVINS pDevIns)
+{
+ PFNRT pfnRet;
+ GLGETPROC_(glBlendColor, "");
+ GLGETPROC_(glBlendEquation, "");
+ GLGETPROC_(glClientActiveTexture, "");
+ return VINF_SUCCESS;
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.h
new file mode 100644
index 00000000..27d2ccb7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-glLdr.h
@@ -0,0 +1,443 @@
+/* $Id: DevVGA-SVGA3d-glLdr.h $ */
+/** @file
+ * DevVGA - VMWare SVGA device - 3D part, dynamic loading of GL function.
+ */
+
+/*
+ * Copyright (C) 2018-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_glLdr_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_glLdr_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifndef VMSVGA3D_OPENGL
+# error "This include file is for VMSVGA3D_OPENGL."
+#endif
+
+#include <VBox/types.h>
+
+/** @todo VBOX_VMSVGA3D_GL_HACK_LEVEL is not necessary when dynamic loading is used. */
+
+#ifdef RT_OS_WINDOWS
+# include <iprt/win/windows.h>
+# include <GL/gl.h>
+# include "vmsvga_glext/wglext.h"
+
+#elif defined(RT_OS_DARWIN)
+# include <OpenGL/OpenGL.h>
+# include <OpenGL/gl3.h>
+# include <OpenGL/gl3ext.h>
+# define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
+# include <OpenGL/gl.h>
+# include "DevVGA-SVGA3d-cocoa.h"
+// HACK
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+# define GL_RGBA_S3TC 0x83A2
+# define GL_ALPHA8_EXT 0x803c
+# define GL_LUMINANCE8_EXT 0x8040
+# define GL_LUMINANCE16_EXT 0x8042
+# define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+# define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+# define GL_INT_2_10_10_10_REV 0x8D9F
+
+#else
+# include <X11/Xlib.h>
+# include <X11/Xatom.h>
+# include <GL/gl.h>
+# include <GL/glx.h>
+# define VBOX_VMSVGA3D_GL_HACK_LEVEL 0x103
+#endif
+
+#ifndef __glext_h__
+# undef GL_GLEXT_VERSION /** @todo r=bird: We include GL/glext.h above which also defines this and we'll end up with
+ * a clash if the system one does not use the same header guard as ours. So, I'm wondering
+ * whether this include is really needed, and if it is, whether we should use a unique header
+ * guard macro on it, so we'll have the same problems everywhere... */
+#endif
+#include "vmsvga_glext/glext.h"
+
+
+#ifdef RT_OS_WINDOWS
+# define GLAPIENTRY APIENTRY
+#else
+# define GLAPIENTRY
+#endif
+
+#define GLAPIENTRYP GLAPIENTRY *
+
+#ifdef VMSVGA3D_GL_DEFINE_PFN
+# define GLPFN
+#else
+# define GLPFN extern
+#endif
+
+/** Load OpenGL library and initialize function pointers. */
+int glLdrInit(PPDMDEVINS pDevIns);
+/** Resolve an OpenGL function name. */
+PFNRT glLdrGetProcAddress(const char *pszSymbol);
+/** Get pointers to extension function. They are available on Windows only when OpenGL context is set. */
+int glLdrGetExtFunctions(PPDMDEVINS pDevIns);
+
+/*
+ * All OpenGL function used by VMSVGA backend.
+ */
+
+/*
+ * GL 1.1 functions (exported from OpenGL32 on Windows).
+ */
+GLPFN void (GLAPIENTRYP pfn_glAlphaFunc)(GLenum func, GLclampf ref);
+#define glAlphaFunc pfn_glAlphaFunc
+
+GLPFN void (GLAPIENTRYP pfn_glBegin)(GLenum mode);
+#define glBegin pfn_glBegin
+
+GLPFN void (GLAPIENTRYP pfn_glBindTexture)(GLenum target, GLuint texture);
+#define glBindTexture pfn_glBindTexture
+
+GLPFN void (GLAPIENTRYP pfn_glBlendFunc)(GLenum sfactor, GLenum dfactor);
+#define glBlendFunc pfn_glBlendFunc
+
+GLPFN void (GLAPIENTRYP pfn_glClear)(GLbitfield mask);
+#define glClear pfn_glClear
+
+GLPFN void (GLAPIENTRYP pfn_glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+#define glClearColor pfn_glClearColor
+
+GLPFN void (GLAPIENTRYP pfn_glClearDepth)(GLclampd depth);
+#define glClearDepth pfn_glClearDepth
+
+GLPFN void (GLAPIENTRYP pfn_glClearStencil)(GLint s);
+#define glClearStencil pfn_glClearStencil
+
+GLPFN void (GLAPIENTRYP pfn_glClipPlane)(GLenum plane, const GLdouble *equation);
+#define glClipPlane pfn_glClipPlane
+
+GLPFN void (GLAPIENTRYP pfn_glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#define glColorMask pfn_glColorMask
+
+GLPFN void (GLAPIENTRYP pfn_glColorPointer)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+#define glColorPointer pfn_glColorPointer
+
+GLPFN void (GLAPIENTRYP pfn_glCullFace)(GLenum mode);
+#define glCullFace pfn_glCullFace
+
+GLPFN void (GLAPIENTRYP pfn_glDeleteTextures)(GLsizei n, const GLuint *textures);
+#define glDeleteTextures pfn_glDeleteTextures
+
+GLPFN void (GLAPIENTRYP pfn_glDepthFunc)(GLenum func);
+#define glDepthFunc pfn_glDepthFunc
+
+GLPFN void (GLAPIENTRYP pfn_glDepthMask)(GLboolean flag);
+#define glDepthMask pfn_glDepthMask
+
+GLPFN void (GLAPIENTRYP pfn_glDepthRange)(GLclampd zNear, GLclampd zFar);
+#define glDepthRange pfn_glDepthRange
+
+GLPFN void (GLAPIENTRYP pfn_glDisable)(GLenum cap);
+#define glDisable pfn_glDisable
+
+GLPFN void (GLAPIENTRYP pfn_glDisableClientState)(GLenum array);
+#define glDisableClientState pfn_glDisableClientState
+
+GLPFN void (GLAPIENTRYP pfn_glDrawArrays)(GLenum mode, GLint first, GLsizei count);
+#define glDrawArrays pfn_glDrawArrays
+
+GLPFN void (GLAPIENTRYP pfn_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
+#define glDrawElements pfn_glDrawElements
+
+GLPFN void (GLAPIENTRYP pfn_glEnable)(GLenum cap);
+#define glEnable pfn_glEnable
+
+GLPFN void (GLAPIENTRYP pfn_glEnableClientState)(GLenum array);
+#define glEnableClientState pfn_glEnableClientState
+
+GLPFN void (GLAPIENTRYP pfn_glEnd)(void);
+#define glEnd pfn_glEnd
+
+GLPFN void (GLAPIENTRYP pfn_glFinish)(void);
+#define glFinish pfn_glFinish
+
+GLPFN void (GLAPIENTRYP pfn_glFlush)(void);
+#define glFlush pfn_glFlush
+
+GLPFN void (GLAPIENTRYP pfn_glFogf)(GLenum pname, GLfloat param);
+#define glFogf pfn_glFogf
+
+GLPFN void (GLAPIENTRYP pfn_glFogfv)(GLenum pname, const GLfloat *params);
+#define glFogfv pfn_glFogfv
+
+GLPFN void (GLAPIENTRYP pfn_glFogi)(GLenum pname, GLint param);
+#define glFogi pfn_glFogi
+
+GLPFN void (GLAPIENTRYP pfn_glFrontFace)(GLenum mode);
+#define glFrontFace pfn_glFrontFace
+
+GLPFN void (GLAPIENTRYP pfn_glGenTextures)(GLsizei n, GLuint *textures);
+#define glGenTextures pfn_glGenTextures
+
+GLPFN void (GLAPIENTRYP pfn_glGetBooleanv)(GLenum pname, GLboolean *params);
+#define glGetBooleanv pfn_glGetBooleanv
+
+GLPFN GLenum (GLAPIENTRYP pfn_glGetError)(void);
+#define glGetError pfn_glGetError
+
+GLPFN void (GLAPIENTRYP pfn_glGetFloatv)(GLenum pname, GLfloat *params);
+#define glGetFloatv pfn_glGetFloatv
+
+GLPFN void (GLAPIENTRYP pfn_glGetIntegerv)(GLenum pname, GLint *params);
+#define glGetIntegerv pfn_glGetIntegerv
+
+GLPFN const GLubyte * (GLAPIENTRYP pfn_glGetString)(GLenum name);
+#define glGetString pfn_glGetString
+
+GLPFN void (GLAPIENTRYP pfn_glGetTexImage)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+#define glGetTexImage pfn_glGetTexImage
+
+GLPFN void (GLAPIENTRYP pfn_glLightModelfv)(GLenum pname, const GLfloat *params);
+#define glLightModelfv pfn_glLightModelfv
+
+GLPFN void (GLAPIENTRYP pfn_glLightf)(GLenum light, GLenum pname, GLfloat param);
+#define glLightf pfn_glLightf
+
+GLPFN void (GLAPIENTRYP pfn_glLightfv)(GLenum light, GLenum pname, const GLfloat *params);
+#define glLightfv pfn_glLightfv
+
+GLPFN void (GLAPIENTRYP pfn_glLineWidth)(GLfloat width);
+#define glLineWidth pfn_glLineWidth
+
+GLPFN void (GLAPIENTRYP pfn_glLoadIdentity)(void);
+#define glLoadIdentity pfn_glLoadIdentity
+
+GLPFN void (GLAPIENTRYP pfn_glLoadMatrixf)(const GLfloat *m);
+#define glLoadMatrixf pfn_glLoadMatrixf
+
+GLPFN void (GLAPIENTRYP pfn_glMaterialfv)(GLenum face, GLenum pname, const GLfloat *params);
+#define glMaterialfv pfn_glMaterialfv
+
+GLPFN void (GLAPIENTRYP pfn_glMatrixMode)(GLenum mode);
+#define glMatrixMode pfn_glMatrixMode
+
+GLPFN void (GLAPIENTRYP pfn_glMultMatrixf)(const GLfloat *m);
+#define glMultMatrixf pfn_glMultMatrixf
+
+GLPFN void (GLAPIENTRYP pfn_glNormalPointer)(GLenum type, GLsizei stride, const void *pointer);
+#define glNormalPointer pfn_glNormalPointer
+
+GLPFN void (GLAPIENTRYP pfn_glOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);
+#define glOrtho pfn_glOrtho
+
+GLPFN void (GLAPIENTRYP pfn_glPixelStorei)(GLenum pname, GLint param);
+#define glPixelStorei pfn_glPixelStorei
+
+GLPFN void (GLAPIENTRYP pfn_glPointSize)(GLfloat size);
+#define glPointSize pfn_glPointSize
+
+GLPFN void (GLAPIENTRYP pfn_glPolygonMode)(GLenum face, GLenum mode);
+#define glPolygonMode pfn_glPolygonMode
+
+GLPFN void (GLAPIENTRYP pfn_glPolygonOffset)(GLfloat factor, GLfloat units);
+#define glPolygonOffset pfn_glPolygonOffset
+
+GLPFN void (GLAPIENTRYP pfn_glPopAttrib)(void);
+#define glPopAttrib pfn_glPopAttrib
+
+GLPFN void (GLAPIENTRYP pfn_glPopMatrix)(void);
+#define glPopMatrix pfn_glPopMatrix
+
+GLPFN void (GLAPIENTRYP pfn_glPushAttrib)(GLbitfield mask);
+#define glPushAttrib pfn_glPushAttrib
+
+GLPFN void (GLAPIENTRYP pfn_glPushMatrix)(void);
+#define glPushMatrix pfn_glPushMatrix
+
+GLPFN void (GLAPIENTRYP pfn_glScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
+#define glScissor pfn_glScissor
+
+GLPFN void (GLAPIENTRYP pfn_glShadeModel)(GLenum mode);
+#define glShadeModel pfn_glShadeModel
+
+GLPFN void (GLAPIENTRYP pfn_glStencilFunc)(GLenum func, GLint ref, GLuint mask);
+#define glStencilFunc pfn_glStencilFunc
+
+GLPFN void (GLAPIENTRYP pfn_glStencilMask)(GLuint mask);
+#define glStencilMask pfn_glStencilMask
+
+GLPFN void (GLAPIENTRYP pfn_glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
+#define glStencilOp pfn_glStencilOp
+
+GLPFN void (GLAPIENTRYP pfn_glTexCoord2f)(GLfloat s, GLfloat t);
+#define glTexCoord2f pfn_glTexCoord2f
+
+GLPFN void (GLAPIENTRYP pfn_glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+#define glTexCoordPointer pfn_glTexCoordPointer
+
+GLPFN void (GLAPIENTRYP pfn_glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+#define glTexImage2D pfn_glTexImage2D
+
+GLPFN void (GLAPIENTRYP pfn_glTexParameterf)(GLenum target, GLenum pname, GLfloat param);
+#define glTexParameterf pfn_glTexParameterf
+
+GLPFN void (GLAPIENTRYP pfn_glTexParameterfv)(GLenum target, GLenum pname, const GLfloat *params);
+#define glTexParameterfv pfn_glTexParameterfv
+
+GLPFN void (GLAPIENTRYP pfn_glTexParameteri)(GLenum target, GLenum pname, GLint param);
+#define glTexParameteri pfn_glTexParameteri
+
+GLPFN void (GLAPIENTRYP pfn_glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#define glTexSubImage2D pfn_glTexSubImage2D
+
+GLPFN void (GLAPIENTRYP pfn_glVertex2i)(GLint x, GLint y);
+#define glVertex2i pfn_glVertex2i
+
+GLPFN void (GLAPIENTRYP pfn_glVertexPointer)(GLint size, GLenum type, GLsizei stride, const void *pointer);
+#define glVertexPointer pfn_glVertexPointer
+
+GLPFN void (GLAPIENTRYP pfn_glViewport)(GLint x, GLint y, GLsizei width, GLsizei height);
+#define glViewport pfn_glViewport
+
+/*
+ * Extension functions (not exported from OpenGL32 on Windows).
+ */
+GLPFN void (GLAPIENTRYP pfn_glBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+#define glBlendColor pfn_glBlendColor
+
+GLPFN void (GLAPIENTRYP pfn_glBlendEquation)(GLenum mode);
+#define glBlendEquation pfn_glBlendEquation
+
+GLPFN void (GLAPIENTRYP pfn_glClientActiveTexture)(GLenum texture);
+#define glClientActiveTexture pfn_glClientActiveTexture
+
+#ifdef RT_OS_WINDOWS
+/*
+ * WGL.
+ */
+GLPFN HGLRC (WINAPI *pfn_wglCreateContext)(HDC);
+#define wglCreateContext pfn_wglCreateContext
+
+GLPFN BOOL (WINAPI *pfn_wglDeleteContext)(HGLRC);
+#define wglDeleteContext pfn_wglDeleteContext
+
+GLPFN BOOL (WINAPI *pfn_wglMakeCurrent)(HDC, HGLRC);
+#define wglMakeCurrent pfn_wglMakeCurrent
+
+GLPFN BOOL (WINAPI *pfn_wglShareLists)(HGLRC, HGLRC);
+#define wglShareLists pfn_wglShareLists
+
+#elif defined(RT_OS_LINUX)
+/*
+ * GLX
+ */
+GLPFN int (* pfn_glXGetFBConfigAttrib)(Display * dpy, GLXFBConfig config, int attribute, int * value);
+#define glXGetFBConfigAttrib pfn_glXGetFBConfigAttrib
+
+GLPFN XVisualInfo * (* pfn_glXGetVisualFromFBConfig)(Display * dpy, GLXFBConfig config);
+#define glXGetVisualFromFBConfig pfn_glXGetVisualFromFBConfig
+
+GLPFN Bool (* pfn_glXQueryVersion)(Display * dpy, int * major, int * minor);
+#define glXQueryVersion pfn_glXQueryVersion
+
+GLPFN GLXFBConfig * (* pfn_glXChooseFBConfig)(Display * dpy, int screen, const int * attrib_list, int * nelements);
+#define glXChooseFBConfig pfn_glXChooseFBConfig
+
+GLPFN XVisualInfo* (* pfn_glXChooseVisual)(Display * dpy, int screen, int * attribList);
+#define glXChooseVisual pfn_glXChooseVisual
+
+GLPFN GLXContext (* pfn_glXCreateContext)(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct);
+#define glXCreateContext pfn_glXCreateContext
+
+GLPFN GLXPixmap (* pfn_glXCreatePixmap)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list);
+#define glXCreatePixmap pfn_glXCreatePixmap
+
+GLPFN Bool (* pfn_glXMakeCurrent)(Display * dpy, GLXDrawable drawable, GLXContext ctx);
+#define glXMakeCurrent pfn_glXMakeCurrent
+
+GLPFN void (* pfn_glXDestroyContext)(Display * dpy, GLXContext ctx);
+#define glXDestroyContext pfn_glXDestroyContext
+
+GLPFN void (* pfn_glXDestroyPixmap)(Display * dpy, GLXPixmap Pixmap);
+#define glXDestroyPixmap pfn_glXDestroyPixmap
+
+/*
+ * X11
+ */
+GLPFN int (* pfn_XConfigureWindow)(Display *display, Window w, unsigned value_mask, XWindowChanges *changes);
+#define XConfigureWindow pfn_XConfigureWindow
+
+GLPFN int (* pfn_XCloseDisplay)(Display *display);
+#define XCloseDisplay pfn_XCloseDisplay
+
+GLPFN Colormap (* pfn_XCreateColormap)(Display *display, Window w, Visual *visual, int alloc);
+#define XCreateColormap pfn_XCreateColormap
+
+GLPFN Pixmap (* pfn_XCreatePixmap)(Display *display, Drawable d, unsigned int width, unsigned int height, unsigned int depth);
+#define XCreatePixmap pfn_XCreatePixmap
+
+GLPFN Window (* pfn_XCreateWindow)(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height,
+ unsigned int border_width, int depth, unsigned int window_class, Visual *visual, unsigned long valuemask, XSetWindowAttributes *attributes);
+#define XCreateWindow pfn_XCreateWindow
+
+GLPFN Window (* pfn_XDefaultRootWindow)(Display *display);
+#define XDefaultRootWindow pfn_XDefaultRootWindow
+
+GLPFN int (* pfn_XDestroyWindow)(Display *display, Window w);
+#define XDestroyWindow pfn_XDestroyWindow
+
+GLPFN int (* pfn_XFree)(void *data);
+#define XFree pfn_XFree
+
+GLPFN int (* pfn_XFreePixmap)(Display *display, Pixmap pixmap);
+#define XFreePixmap pfn_XFreePixmap
+
+GLPFN Status (* pfn_XInitThreads)(void);
+#define XInitThreads pfn_XInitThreads
+
+GLPFN int (* pfn_XNextEvent)(Display *display, XEvent *event_return);
+#define XNextEvent pfn_XNextEvent
+
+GLPFN Display *(* pfn_XOpenDisplay)(char *display_name);
+#define XOpenDisplay pfn_XOpenDisplay
+
+GLPFN int (* pfn_XPending)(Display *display);
+#define XPending pfn_XPending
+
+GLPFN int (* (* pfn_XSetErrorHandler)(int (*handler)(Display *, XErrorEvent *)))(Display *, XErrorEvent *);
+#define XSetErrorHandler pfn_XSetErrorHandler
+
+GLPFN int (* pfn_XSync)(Display *display, Bool discard);
+#define XSync pfn_XSync
+
+GLPFN int (* pfn_XScreenNumberOfScreen)(Screen *screen);
+#define XScreenNumberOfScreen pfn_XScreenNumberOfScreen
+
+GLPFN int (* pfn_XMapWindow)(Display *display, Window w);
+#define XMapWindow pfn_XMapWindow
+
+GLPFN Status (* pfn_XGetWindowAttributes)(Display *display, Window w, XWindowAttributes *window_attributes_return);
+#define XGetWindowAttributes pfn_XGetWindowAttributes
+
+#endif
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_glLdr_h */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-hlp.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-hlp.cpp
new file mode 100644
index 00000000..af0061f0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-hlp.cpp
@@ -0,0 +1,466 @@
+/* $Id: DevVGA-SVGA3d-hlp.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device helpers
+ */
+
+/*
+ * Copyright (C) 2020-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/AssertGuest.h>
+
+#ifdef SHADER_VERIFY_STANDALONE
+# include <stdio.h>
+//# define Log3(a) printf a - /** @todo r=bird: This is strictly forbidden. Noone redefines Log macros ever! */
+//# define LogRel(a) printf a - /** @todo r=bird: This is strictly forbidden. Noone redefines Log macros ever! */
+#else
+# include <VBox/log.h>
+#endif
+
+#include <iprt/cdefs.h>
+#include <iprt/errcore.h>
+#include <iprt/types.h>
+#include <iprt/string.h>
+
+#include "DevVGA-SVGA.h"
+
+/** Per shader data is stored in this structure. */
+typedef struct VMSVGA3DSHADERPARSECONTEXT
+{
+ /** Version token. */
+ SVGA3dShaderVersion version;
+
+ SVGA3dShaderOpCodeType currentOpcode;
+ union
+ {
+ SVGA3DOpDclArgs *pDclArgs;
+ } u;
+} VMSVGA3DSHADERPARSECONTEXT;
+
+/** Callback which parses a parameter token.
+ *
+ * @param pCtx The shader data.
+ * @param Op Instruction opcode which the token is used with.
+ * @param Token The parameter token which must be parsed.
+ * @param idxToken Index of the parameter token in the instruction. 0 for the first parameter.
+ *
+ * @return VBox error code.
+ */
+typedef int FNSHADERPARSETOKEN(VMSVGA3DSHADERPARSECONTEXT* pCtx, uint32_t Op, uint32_t Token, uint32_t idxToken);
+typedef FNSHADERPARSETOKEN* PFNSHADERPARSETOKEN;
+
+/** Information about a shader opcode. */
+typedef struct VMSVGA3DSHADERPARSEOP
+{
+ /** Opcode. */
+ SVGA3dShaderOpCodeType Op;
+ /** Maximum number of parameters. */
+ uint32_t Length;
+ /** Pointer to callback, which parse each parameter.
+ * The size is the number of maximum possible parameters: dest + 3 * src
+ */
+ PFNSHADERPARSETOKEN apfnParse[4];
+} VMSVGA3DSHADERPARSEOP;
+
+static int vmsvga3dShaderParseRegOffset(VMSVGA3DSHADERPARSECONTEXT *pCtx,
+ bool fIsSrc,
+ SVGA3dShaderRegType regType,
+ uint32_t off)
+{
+ RT_NOREF(pCtx, fIsSrc);
+
+ switch (regType)
+ {
+ case SVGA3DREG_TEMP:
+ break;
+ case SVGA3DREG_INPUT:
+ break;
+ case SVGA3DREG_CONST:
+ break;
+ case SVGA3DREG_ADDR /* also SVGA3DREG_TEXTURE */:
+ break;
+ case SVGA3DREG_RASTOUT:
+ break;
+ case SVGA3DREG_ATTROUT:
+ break;
+ case SVGA3DREG_TEXCRDOUT /* also SVGA3DREG_OUTPUT */:
+ break;
+ case SVGA3DREG_CONSTINT:
+ break;
+ case SVGA3DREG_COLOROUT:
+ break;
+ case SVGA3DREG_DEPTHOUT:
+ break;
+ case SVGA3DREG_SAMPLER:
+ break;
+ case SVGA3DREG_CONST2:
+ break;
+ case SVGA3DREG_CONST3:
+ break;
+ case SVGA3DREG_CONST4:
+ break;
+ case SVGA3DREG_CONSTBOOL:
+ break;
+ case SVGA3DREG_LOOP:
+ break;
+ case SVGA3DREG_TEMPFLOAT16:
+ break;
+ case SVGA3DREG_MISCTYPE:
+ ASSERT_GUEST_RETURN( off == SVGA3DMISCREG_POSITION
+ || off == SVGA3DMISCREG_FACE, VERR_PARSE_ERROR);
+ break;
+ case SVGA3DREG_LABEL:
+ break;
+ case SVGA3DREG_PREDICATE:
+ break;
+ default:
+ ASSERT_GUEST_FAILED_RETURN(VERR_PARSE_ERROR);
+ }
+
+ return VINF_SUCCESS;
+}
+
+/* Parse a declaration parameter token:
+ * https://docs.microsoft.com/en-us/windows-hardware/drivers/display/dcl-instruction
+ *
+ * See FNSHADERPARSETOKEN.
+ */
+static int vmsvga3dShaderParseDclToken(VMSVGA3DSHADERPARSECONTEXT* pCtx, uint32_t Op, uint32_t Token, uint32_t idxToken)
+{
+ RT_NOREF(pCtx, Op, Token, idxToken);
+ return VINF_SUCCESS;
+}
+
+/* Parse a label (D3DSPR_LABEL) parameter token.
+ *
+ * See FNSHADERPARSETOKEN.
+ */
+static int vmsvga3dShaderParseLabelToken(VMSVGA3DSHADERPARSECONTEXT* pCtx, uint32_t Op, uint32_t Token, uint32_t idxToken)
+{
+ RT_NOREF(pCtx, Op, Token, idxToken);
+ return VINF_SUCCESS;
+}
+
+/* Parse a destination parameter token:
+ * https://docs.microsoft.com/en-us/windows-hardware/drivers/display/destination-parameter-token
+ * See FNSHADERPARSETOKEN.
+ */
+static int vmsvga3dShaderParseDestToken(VMSVGA3DSHADERPARSECONTEXT* pCtx, uint32_t Op, uint32_t Token, uint32_t idxToken)
+{
+ RT_NOREF(pCtx, Op, idxToken);
+
+ SVGA3dShaderDestToken dest;
+ dest.value = Token;
+
+ SVGA3dShaderRegType const regType = (SVGA3dShaderRegType)(dest.type_upper << 3 | dest.type_lower);
+ Log3(("Dest: type %d, r0 %d, shfScale %d, dstMod %d, mask 0x%x, r1 %d, relAddr %d, num %d\n",
+ regType, dest.reserved0, dest.shfScale, dest.dstMod, dest.mask, dest.reserved1, dest.relAddr, dest.num));
+
+ if (pCtx->currentOpcode == SVGA3DOP_DCL && regType == SVGA3DREG_SAMPLER)
+ {
+ if (pCtx->u.pDclArgs->type == SVGA3DSAMP_UNKNOWN)
+ {
+ Log3(("Replacing SVGA3DSAMP_UNKNOWN with SVGA3DSAMP_2D\n"));
+ pCtx->u.pDclArgs->type = SVGA3DSAMP_2D;
+ }
+ }
+
+ return vmsvga3dShaderParseRegOffset(pCtx, false, regType, dest.num);
+}
+
+/* Parse a source parameter token:
+ * https://docs.microsoft.com/en-us/windows-hardware/drivers/display/source-parameter-token
+ * See FNSHADERPARSETOKEN.
+ */
+static int vmsvga3dShaderParseSrcToken(VMSVGA3DSHADERPARSECONTEXT* pCtx, uint32_t Op, uint32_t Token, uint32_t idxToken)
+{
+ RT_NOREF(pCtx, Op, idxToken);
+
+ SVGA3dShaderSrcToken src;
+ src.value = Token;
+
+ SVGA3dShaderRegType const regType = (SVGA3dShaderRegType)(src.type_upper << 3 | src.type_lower);
+ Log3(("Src: type %d, r0 %d, srcMod %d, swizzle 0x%x, r1 %d, relAddr %d, num %d\n",
+ regType, src.reserved0, src.srcMod, src.swizzle, src.reserved1, src.relAddr, src.num));
+
+ return vmsvga3dShaderParseRegOffset(pCtx, true, regType, src.num);
+}
+
+/* Shortcut defines. */
+#define PT_DCL vmsvga3dShaderParseDclToken
+#define PT_LBL vmsvga3dShaderParseLabelToken
+#define PT_DEST vmsvga3dShaderParseDestToken
+#define PT_SRC vmsvga3dShaderParseSrcToken
+
+/* Information about opcodes:
+ * https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/d3d9types/ne-d3d9types-_d3dshader_instruction_opcode_type
+ */
+static const VMSVGA3DSHADERPARSEOP aOps[] =
+{
+ /* Op Length Parameters */
+ /* 00 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 01 */ { SVGA3DOP_MOV, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 02 */ { SVGA3DOP_ADD, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 03 */ { SVGA3DOP_SUB, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 04 */ { SVGA3DOP_MAD, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 05 */ { SVGA3DOP_MUL, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 06 */ { SVGA3DOP_RCP, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 07 */ { SVGA3DOP_RSQ, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 08 */ { SVGA3DOP_DP3, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 09 */ { SVGA3DOP_DP4, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 10 */ { SVGA3DOP_MIN, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 11 */ { SVGA3DOP_MAX, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 12 */ { SVGA3DOP_SLT, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 13 */ { SVGA3DOP_SGE, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 14 */ { SVGA3DOP_EXP, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 15 */ { SVGA3DOP_LOG, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 16 */ { SVGA3DOP_LIT, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 17 */ { SVGA3DOP_DST, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 18 */ { SVGA3DOP_LRP, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 19 */ { SVGA3DOP_FRC, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 20 */ { SVGA3DOP_M4x4, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 21 */ { SVGA3DOP_M4x3, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 22 */ { SVGA3DOP_M3x4, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 23 */ { SVGA3DOP_M3x3, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 24 */ { SVGA3DOP_M3x2, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 25 */ { SVGA3DOP_CALL, 1, { PT_LBL, NULL, NULL, NULL } },
+ /* 26 */ { SVGA3DOP_CALLNZ, 2, { PT_LBL, PT_SRC, NULL, NULL } },
+ /* 27 */ { SVGA3DOP_LOOP, 1, { PT_SRC, NULL, NULL, NULL } },
+ /* 28 */ { SVGA3DOP_RET, 0, { NULL, NULL, NULL, NULL } },
+ /* 29 */ { SVGA3DOP_ENDLOOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 30 */ { SVGA3DOP_LABEL, 1, { PT_LBL, NULL, NULL, NULL } },
+ /* 31 */ { SVGA3DOP_DCL, 2, { PT_DCL, PT_DEST, NULL, NULL } },
+ /* 32 */ { SVGA3DOP_POW, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 33 */ { SVGA3DOP_CRS, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 34 */ { SVGA3DOP_SGN, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 35 */ { SVGA3DOP_ABS, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 36 */ { SVGA3DOP_NRM, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 37 */ { SVGA3DOP_SINCOS, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 38 */ { SVGA3DOP_REP, 1, { PT_SRC, NULL, NULL, NULL } },
+ /* 39 */ { SVGA3DOP_ENDREP, 0, { NULL, NULL, NULL, NULL } },
+ /* 40 */ { SVGA3DOP_IF, 1, { PT_SRC, NULL, NULL, NULL } },
+ /* 41 */ { SVGA3DOP_IFC, 2, { PT_SRC, PT_SRC, NULL, NULL } },
+ /* 42 */ { SVGA3DOP_ELSE, 0, { NULL, NULL, NULL, NULL } },
+ /* 43 */ { SVGA3DOP_ENDIF, 0, { NULL, NULL, NULL, NULL } },
+ /* 44 */ { SVGA3DOP_BREAK, 0, { NULL, NULL, NULL, NULL } },
+ /* 45 */ { SVGA3DOP_BREAKC, 2, { PT_SRC, PT_SRC, NULL, NULL } },
+ /* 46 */ { SVGA3DOP_MOVA, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 47 */ { SVGA3DOP_DEFB, 2, { PT_DEST, NULL, NULL, NULL } },
+ /* 48 */ { SVGA3DOP_DEFI, 5, { PT_DEST, NULL, NULL, NULL } },
+ /* 49 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 50 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 51 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 52 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 53 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 54 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 55 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 56 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 57 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 58 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 59 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 60 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 61 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 62 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 63 */ { SVGA3DOP_NOP, 0, { NULL, NULL, NULL, NULL } },
+ /* 64 */ { SVGA3DOP_TEXCOORD, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 65 */ { SVGA3DOP_TEXKILL, 1, { PT_DEST, NULL, NULL, NULL } },
+ /* 66 */ { SVGA3DOP_TEX, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } }, // pre-1.4 = tex dest, post-1.4 = texld dest, src, src
+ /* 67 */ { SVGA3DOP_TEXBEM, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 68 */ { SVGA3DOP_TEXBEML, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 69 */ { SVGA3DOP_TEXREG2AR, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 70 */ { SVGA3DOP_TEXREG2GB, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 71 */ { SVGA3DOP_TEXM3x2PAD, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 72 */ { SVGA3DOP_TEXM3x2TEX, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 73 */ { SVGA3DOP_TEXM3x3PAD, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 74 */ { SVGA3DOP_TEXM3x3TEX, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 75 */ { SVGA3DOP_RESERVED0, 0, { NULL, NULL, NULL, NULL } },
+ /* 76 */ { SVGA3DOP_TEXM3x3SPEC, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 77 */ { SVGA3DOP_TEXM3x3VSPEC, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 78 */ { SVGA3DOP_EXPP, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 79 */ { SVGA3DOP_LOGP, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 80 */ { SVGA3DOP_CND, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 81 */ { SVGA3DOP_DEF, 5, { PT_DEST, NULL, NULL, NULL } },
+ /* 82 */ { SVGA3DOP_TEXREG2RGB, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 83 */ { SVGA3DOP_TEXDP3TEX, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 84 */ { SVGA3DOP_TEXM3x2DEPTH, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 85 */ { SVGA3DOP_TEXDP3, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 86 */ { SVGA3DOP_TEXM3x3, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 87 */ { SVGA3DOP_TEXDEPTH, 1, { PT_DEST, NULL, NULL, NULL } },
+ /* 88 */ { SVGA3DOP_CMP, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 89 */ { SVGA3DOP_BEM, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 90 */ { SVGA3DOP_DP2ADD, 4, { PT_DEST, PT_SRC, PT_SRC, PT_SRC } },
+ /* 91 */ { SVGA3DOP_DSX, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 92 */ { SVGA3DOP_DSY, 2, { PT_DEST, PT_SRC, NULL, NULL } },
+ /* 93 */ { SVGA3DOP_TEXLDD, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 94 */ { SVGA3DOP_SETP, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 95 */ { SVGA3DOP_TEXLDL, 3, { PT_DEST, PT_SRC, PT_SRC, NULL } },
+ /* 96 */ { SVGA3DOP_BREAKP, 1, { PT_SRC, NULL, NULL, NULL } },
+};
+
+#undef PT_DCL
+#undef PT_LBL
+#undef PT_DEST
+#undef PT_SRC
+
+/* Parse the shader code
+ * https://docs.microsoft.com/en-us/windows-hardware/drivers/display/shader-code-format
+ */
+int vmsvga3dShaderParse(SVGA3dShaderType type, uint32_t cbShaderData, uint32_t* pShaderData)
+{
+ uint32_t *paTokensStart = (uint32_t*)pShaderData;
+ uint32_t const cTokens = cbShaderData / sizeof(uint32_t);
+
+ ASSERT_GUEST_RETURN(cTokens * sizeof(uint32_t) == cbShaderData, VERR_INVALID_PARAMETER);
+
+ /* Need at least the version token and SVGA3DOP_END instruction token. 48KB is an arbitrary limit. */
+ ASSERT_GUEST_RETURN(cTokens >= 2 && cTokens < (48 * _1K) / sizeof(paTokensStart[0]), VERR_INVALID_PARAMETER);
+
+#ifdef LOG_ENABLED
+ Log3(("Shader code:\n"));
+ const uint32_t cTokensPerLine = 8;
+ for (uint32_t iToken = 0; iToken < cTokens; ++iToken)
+ {
+ if ((iToken % cTokensPerLine) == 0)
+ {
+ if (iToken == 0)
+ Log3(("0x%08X,", paTokensStart[iToken]));
+ else
+ Log3(("\n0x%08X,", paTokensStart[iToken]));
+ }
+ else
+ Log3((" 0x%08X,", paTokensStart[iToken]));
+ }
+ Log3(("\n"));
+#endif
+
+ VMSVGA3DSHADERPARSECONTEXT ctx;
+ RT_ZERO(ctx);
+
+ /* "The first token must be a version token." */
+ ctx.version = *(SVGA3dShaderVersion*)paTokensStart;
+ ASSERT_GUEST_RETURN(ctx.version.type == SVGA3D_VS_TYPE
+ || ctx.version.type == SVGA3D_PS_TYPE, VERR_PARSE_ERROR);
+ /* A vertex shader should not be defined with a pixel shader bytecode (and visa versa)*/
+ ASSERT_GUEST_RETURN((ctx.version.type == SVGA3D_VS_TYPE && type == SVGA3D_SHADERTYPE_VS)
+ || (ctx.version.type == SVGA3D_PS_TYPE && type == SVGA3D_SHADERTYPE_PS), VERR_PARSE_ERROR);
+ ASSERT_GUEST_RETURN(ctx.version.major >= 2 && ctx.version.major <= 4, VERR_PARSE_ERROR);
+
+ /* Scan the tokens. Immediately return an error code on any unexpected data. */
+ uint32_t *paTokensEnd = &paTokensStart[cTokens];
+ uint32_t *pToken = &paTokensStart[1]; /* Skip the version token. */
+ bool bEndTokenFound = false;
+ while (pToken < paTokensEnd)
+ {
+ SVGA3dShaderInstToken const token = *(SVGA3dShaderInstToken*)pToken;
+
+ /* Figure out the instruction length, which is how many tokens follow the instruction token. */
+ uint32_t const cInstLen = token.op == SVGA3DOP_COMMENT
+ ? token.comment_size
+ : token.size;
+
+ Log3(("op %d, cInstLen %d\n", token.op, cInstLen));
+
+ /* Must not be greater than the number of remaining tokens. */
+ ASSERT_GUEST_RETURN(cInstLen < (uintptr_t)(paTokensEnd - pToken), VERR_PARSE_ERROR);
+
+ /* Stop parsing if this is the SVGA3DOP_END instruction. */
+ if (token.op == SVGA3DOP_END)
+ {
+ ASSERT_GUEST_RETURN(token.value == 0x0000FFFF, VERR_PARSE_ERROR);
+ bEndTokenFound = true;
+ break;
+ }
+
+ ctx.currentOpcode = (SVGA3dShaderOpCodeType)token.op;
+
+ /* If this instrution is in the aOps table. */
+ if (token.op <= SVGA3DOP_BREAKP)
+ {
+ VMSVGA3DSHADERPARSEOP const* pOp = &aOps[token.op];
+
+ if (ctx.currentOpcode == SVGA3DOP_DCL)
+ ctx.u.pDclArgs = (SVGA3DOpDclArgs *)&pToken[1];
+
+ /* cInstLen can be greater than pOp->Length.
+ * W10 guest sends a vertex shader MUL instruction with length 4.
+ * So figure out the actual number of valid parameters.
+ */
+ uint32_t const cParams = RT_MIN(cInstLen, pOp->Length);
+
+ /* Parse paramater tokens. */
+ uint32_t i;
+ for (i = 0; i < RT_MIN(cParams, RT_ELEMENTS(pOp->apfnParse)); ++i)
+ {
+ if (!pOp->apfnParse[i])
+ continue;
+
+ int rc = pOp->apfnParse[i](&ctx, token.op, pToken[i + 1], i);
+ if (RT_FAILURE(rc))
+ return rc;
+ }
+ }
+ else if (token.op == SVGA3DOP_PHASE
+ || token.op == SVGA3DOP_COMMENT)
+ {
+ }
+ else
+ ASSERT_GUEST_FAILED_RETURN(VERR_PARSE_ERROR);
+
+ /* Next token. */
+ pToken += cInstLen + 1;
+ }
+
+ if (!bEndTokenFound)
+ {
+ ASSERT_GUEST_FAILED_RETURN(VERR_PARSE_ERROR);
+ }
+
+ return VINF_SUCCESS;
+}
+
+void vmsvga3dShaderLogRel(char const *pszMsg, SVGA3dShaderType type, uint32_t cbShaderData, uint32_t const *pShaderData)
+{
+ /* Dump the shader code. */
+ static int scLogged = 0;
+ if (scLogged < 8)
+ {
+ ++scLogged;
+
+ LogRel(("VMSVGA: %s shader: %s:\n", (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", pszMsg));
+ const uint32_t cTokensPerLine = 8;
+ const uint32_t *paTokens = (uint32_t *)pShaderData;
+ const uint32_t cTokens = cbShaderData / sizeof(uint32_t);
+ for (uint32_t iToken = 0; iToken < cTokens; ++iToken)
+ {
+ if ((iToken % cTokensPerLine) == 0)
+ {
+ if (iToken == 0)
+ LogRel(("0x%08X,", paTokens[iToken]));
+ else
+ LogRel(("\n0x%08X,", paTokens[iToken]));
+ }
+ else
+ LogRel((" 0x%08X,", paTokens[iToken]));
+ }
+ LogRel(("\n"));
+ }
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp
new file mode 100644
index 00000000..b78d797b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp
@@ -0,0 +1,1935 @@
+/* $Id: DevVGA-SVGA3d-info.cpp $ */
+/** @file
+ * DevSVGA3d - VMWare SVGA device, 3D parts - Introspection and debugging.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#include <stdio.h>
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+#include <iprt/path.h>
+
+#include <iprt/formats/bmp.h>
+
+#include <VBox/vmm/pgm.h> /* required by DevVGA.h */
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#define VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+#include "DevVGA-SVGA3d-internal.h"
+
+
+/*********************************************************************************************************************************
+* Global Variables *
+*********************************************************************************************************************************/
+/** Enum value to string mappings for SVGA3dSurfaceFormat, prefix "SVGA3D_". */
+static const VMSVGAINFOENUM g_aSVGA3dSurfaceFormats[] =
+{
+ { SVGA3D_FORMAT_INVALID , "FORMAT_INVALID" },
+ { SVGA3D_X8R8G8B8 , "X8R8G8B8" },
+ { SVGA3D_A8R8G8B8 , "A8R8G8B8" },
+ { SVGA3D_R5G6B5 , "R5G6B5" },
+ { SVGA3D_X1R5G5B5 , "X1R5G5B5" },
+ { SVGA3D_A1R5G5B5 , "A1R5G5B5" },
+ { SVGA3D_A4R4G4B4 , "A4R4G4B4" },
+ { SVGA3D_Z_D32 , "Z_D32" },
+ { SVGA3D_Z_D16 , "Z_D16" },
+ { SVGA3D_Z_D24S8 , "Z_D24S8" },
+ { SVGA3D_Z_D15S1 , "Z_D15S1" },
+ { SVGA3D_LUMINANCE8 , "LUMINANCE8" },
+ { SVGA3D_LUMINANCE4_ALPHA4 , "LUMINANCE4_ALPHA4" },
+ { SVGA3D_LUMINANCE16 , "LUMINANCE16" },
+ { SVGA3D_LUMINANCE8_ALPHA8 , "LUMINANCE8_ALPHA8" },
+ { SVGA3D_DXT1 , "DXT1" },
+ { SVGA3D_DXT2 , "DXT2" },
+ { SVGA3D_DXT3 , "DXT3" },
+ { SVGA3D_DXT4 , "DXT4" },
+ { SVGA3D_DXT5 , "DXT5" },
+ { SVGA3D_BUMPU8V8 , "BUMPU8V8" },
+ { SVGA3D_BUMPL6V5U5 , "BUMPL6V5U5" },
+ { SVGA3D_BUMPX8L8V8U8 , "BUMPX8L8V8U8" },
+ { SVGA3D_FORMAT_DEAD1 , "FORMAT_DEAD1" },
+ { SVGA3D_ARGB_S10E5 , "ARGB_S10E5" },
+ { SVGA3D_ARGB_S23E8 , "ARGB_S23E8" },
+ { SVGA3D_A2R10G10B10 , "A2R10G10B10" },
+ { SVGA3D_V8U8 , "V8U8" },
+ { SVGA3D_Q8W8V8U8 , "Q8W8V8U8" },
+ { SVGA3D_CxV8U8 , "CxV8U8" },
+ { SVGA3D_X8L8V8U8 , "X8L8V8U8" },
+ { SVGA3D_A2W10V10U10 , "A2W10V10U10" },
+ { SVGA3D_ALPHA8 , "ALPHA8" },
+ { SVGA3D_R_S10E5 , "R_S10E5" },
+ { SVGA3D_R_S23E8 , "R_S23E8" },
+ { SVGA3D_RG_S10E5 , "RG_S10E5" },
+ { SVGA3D_RG_S23E8 , "RG_S23E8" },
+ { SVGA3D_BUFFER , "BUFFER" },
+ { SVGA3D_Z_D24X8 , "Z_D24X8" },
+ { SVGA3D_V16U16 , "V16U16" },
+ { SVGA3D_G16R16 , "G16R16" },
+ { SVGA3D_A16B16G16R16 , "A16B16G16R16" },
+ { SVGA3D_UYVY , "UYVY" },
+ { SVGA3D_YUY2 , "YUY2" },
+ { SVGA3D_NV12 , "NV12" },
+ { SVGA3D_FORMAT_DEAD2 , "FORMAT_DEAD2" },
+ { SVGA3D_R32G32B32A32_TYPELESS , "R32G32B32A32_TYPELESS" },
+ { SVGA3D_R32G32B32A32_UINT , "R32G32B32A32_UINT" },
+ { SVGA3D_R32G32B32A32_SINT , "R32G32B32A32_SINT" },
+ { SVGA3D_R32G32B32_TYPELESS , "R32G32B32_TYPELESS" },
+ { SVGA3D_R32G32B32_FLOAT , "R32G32B32_FLOAT" },
+ { SVGA3D_R32G32B32_UINT , "R32G32B32_UINT" },
+ { SVGA3D_R32G32B32_SINT , "R32G32B32_SINT" },
+ { SVGA3D_R16G16B16A16_TYPELESS , "R16G16B16A16_TYPELESS" },
+ { SVGA3D_R16G16B16A16_UINT , "R16G16B16A16_UINT" },
+ { SVGA3D_R16G16B16A16_SNORM , "R16G16B16A16_SNORM" },
+ { SVGA3D_R16G16B16A16_SINT , "R16G16B16A16_SINT" },
+ { SVGA3D_R32G32_TYPELESS , "R32G32_TYPELESS" },
+ { SVGA3D_R32G32_UINT , "R32G32_UINT" },
+ { SVGA3D_R32G32_SINT , "R32G32_SINT" },
+ { SVGA3D_R32G8X24_TYPELESS , "R32G8X24_TYPELESS" },
+ { SVGA3D_D32_FLOAT_S8X24_UINT , "D32_FLOAT_S8X24_UINT" },
+ { SVGA3D_R32_FLOAT_X8X24 , "R32_FLOAT_X8X24" },
+ { SVGA3D_X32_G8X24_UINT , "X32_G8X24_UINT" },
+ { SVGA3D_R10G10B10A2_TYPELESS , "R10G10B10A2_TYPELESS" },
+ { SVGA3D_R10G10B10A2_UINT , "R10G10B10A2_UINT" },
+ { SVGA3D_R11G11B10_FLOAT , "R11G11B10_FLOAT" },
+ { SVGA3D_R8G8B8A8_TYPELESS , "R8G8B8A8_TYPELESS" },
+ { SVGA3D_R8G8B8A8_UNORM , "R8G8B8A8_UNORM" },
+ { SVGA3D_R8G8B8A8_UNORM_SRGB , "R8G8B8A8_UNORM_SRGB" },
+ { SVGA3D_R8G8B8A8_UINT , "R8G8B8A8_UINT" },
+ { SVGA3D_R8G8B8A8_SINT , "R8G8B8A8_SINT" },
+ { SVGA3D_R16G16_TYPELESS , "R16G16_TYPELESS" },
+ { SVGA3D_R16G16_UINT , "R16G16_UINT" },
+ { SVGA3D_R16G16_SINT , "R16G16_SINT" },
+ { SVGA3D_R32_TYPELESS , "R32_TYPELESS" },
+ { SVGA3D_D32_FLOAT , "D32_FLOAT" },
+ { SVGA3D_R32_UINT , "R32_UINT" },
+ { SVGA3D_R32_SINT , "R32_SINT" },
+ { SVGA3D_R24G8_TYPELESS , "R24G8_TYPELESS" },
+ { SVGA3D_D24_UNORM_S8_UINT , "D24_UNORM_S8_UINT" },
+ { SVGA3D_R24_UNORM_X8 , "R24_UNORM_X8" },
+ { SVGA3D_X24_G8_UINT , "X24_G8_UINT" },
+ { SVGA3D_R8G8_TYPELESS , "R8G8_TYPELESS" },
+ { SVGA3D_R8G8_UNORM , "R8G8_UNORM" },
+ { SVGA3D_R8G8_UINT , "R8G8_UINT" },
+ { SVGA3D_R8G8_SINT , "R8G8_SINT" },
+ { SVGA3D_R16_TYPELESS , "R16_TYPELESS" },
+ { SVGA3D_R16_UNORM , "R16_UNORM" },
+ { SVGA3D_R16_UINT , "R16_UINT" },
+ { SVGA3D_R16_SNORM , "R16_SNORM" },
+ { SVGA3D_R16_SINT , "R16_SINT" },
+ { SVGA3D_R8_TYPELESS , "R8_TYPELESS" },
+ { SVGA3D_R8_UNORM , "R8_UNORM" },
+ { SVGA3D_R8_UINT , "R8_UINT" },
+ { SVGA3D_R8_SNORM , "R8_SNORM" },
+ { SVGA3D_R8_SINT , "R8_SINT" },
+ { SVGA3D_P8 , "P8" },
+ { SVGA3D_R9G9B9E5_SHAREDEXP , "R9G9B9E5_SHAREDEXP" },
+ { SVGA3D_R8G8_B8G8_UNORM , "R8G8_B8G8_UNORM" },
+ { SVGA3D_G8R8_G8B8_UNORM , "G8R8_G8B8_UNORM" },
+ { SVGA3D_BC1_TYPELESS , "BC1_TYPELESS" },
+ { SVGA3D_BC1_UNORM_SRGB , "BC1_UNORM_SRGB" },
+ { SVGA3D_BC2_TYPELESS , "BC2_TYPELESS" },
+ { SVGA3D_BC2_UNORM_SRGB , "BC2_UNORM_SRGB" },
+ { SVGA3D_BC3_TYPELESS , "BC3_TYPELESS" },
+ { SVGA3D_BC3_UNORM_SRGB , "BC3_UNORM_SRGB" },
+ { SVGA3D_BC4_TYPELESS , "BC4_TYPELESS" },
+ { SVGA3D_ATI1 , "ATI1" },
+ { SVGA3D_BC4_SNORM , "BC4_SNORM" },
+ { SVGA3D_BC5_TYPELESS , "BC5_TYPELESS" },
+ { SVGA3D_ATI2 , "ATI2" },
+ { SVGA3D_BC5_SNORM , "BC5_SNORM" },
+ { SVGA3D_R10G10B10_XR_BIAS_A2_UNORM , "R10G10B10_XR_BIAS_A2_UNORM" },
+ { SVGA3D_B8G8R8A8_TYPELESS , "B8G8R8A8_TYPELESS" },
+ { SVGA3D_B8G8R8A8_UNORM_SRGB , "B8G8R8A8_UNORM_SRGB" },
+ { SVGA3D_B8G8R8X8_TYPELESS , "B8G8R8X8_TYPELESS" },
+ { SVGA3D_B8G8R8X8_UNORM_SRGB , "B8G8R8X8_UNORM_SRGB" },
+ { SVGA3D_Z_DF16 , "Z_DF16" },
+ { SVGA3D_Z_DF24 , "Z_DF24" },
+ { SVGA3D_Z_D24S8_INT , "Z_D24S8_INT" },
+ { SVGA3D_YV12 , "YV12" },
+ { SVGA3D_R32G32B32A32_FLOAT , "R32G32B32A32_FLOAT" },
+ { SVGA3D_R16G16B16A16_FLOAT , "R16G16B16A16_FLOAT" },
+ { SVGA3D_R16G16B16A16_UNORM , "R16G16B16A16_UNORM" },
+ { SVGA3D_R32G32_FLOAT , "R32G32_FLOAT" },
+ { SVGA3D_R10G10B10A2_UNORM , "R10G10B10A2_UNORM" },
+ { SVGA3D_R8G8B8A8_SNORM , "R8G8B8A8_SNORM" },
+ { SVGA3D_R16G16_FLOAT , "R16G16_FLOAT" },
+ { SVGA3D_R16G16_UNORM , "R16G16_UNORM" },
+ { SVGA3D_R16G16_SNORM , "R16G16_SNORM" },
+ { SVGA3D_R32_FLOAT , "R32_FLOAT" },
+ { SVGA3D_R8G8_SNORM , "R8G8_SNORM" },
+ { SVGA3D_R16_FLOAT , "R16_FLOAT" },
+ { SVGA3D_D16_UNORM , "D16_UNORM" },
+ { SVGA3D_A8_UNORM , "A8_UNORM" },
+ { SVGA3D_BC1_UNORM , "BC1_UNORM" },
+ { SVGA3D_BC2_UNORM , "BC2_UNORM" },
+ { SVGA3D_BC3_UNORM , "BC3_UNORM" },
+ { SVGA3D_B5G6R5_UNORM , "B5G6R5_UNORM" },
+ { SVGA3D_B5G5R5A1_UNORM , "B5G5R5A1_UNORM" },
+ { SVGA3D_B8G8R8A8_UNORM , "B8G8R8A8_UNORM" },
+ { SVGA3D_B8G8R8X8_UNORM , "B8G8R8X8_UNORM" },
+ { SVGA3D_BC4_UNORM , "BC4_UNORM" },
+ { SVGA3D_BC5_UNORM , "BC5_UNORM" },
+ { SVGA3D_B4G4R4A4_UNORM , "B4G4R4A4_UNORM" },
+ { SVGA3D_BC6H_TYPELESS , "BC6H_TYPELESS" },
+ { SVGA3D_BC6H_UF16 , "BC6H_UF16" },
+ { SVGA3D_BC6H_SF16 , "BC6H_SF16" },
+ { SVGA3D_BC7_TYPELESS , "BC7_TYPELESS" },
+ { SVGA3D_BC7_UNORM , "BC7_UNORM" },
+ { SVGA3D_BC7_UNORM_SRGB , "BC7_UNORM_SRGB" },
+ { SVGA3D_AYUV , "AYUV" },
+};
+VMSVGAINFOENUMMAP_MAKE(RT_NOTHING, g_SVGA3dSurfaceFormat2String, g_aSVGA3dSurfaceFormats, "SVGA3D_");
+
+/** Values for SVGA3dTextureFilter, prefix SVGA3D_TEX_FILTER_. */
+static const char * const g_apszTexureFilters[] =
+{
+ "NONE",
+ "NEAREST",
+ "LINEAR",
+ "ANISOTROPIC",
+ "FLATCUBIC",
+ "GAUSSIANCUBIC",
+ "PYRAMIDALQUAD",
+ "GAUSSIANQUAD",
+};
+
+/** SVGA3dSurface1Flags values, prefix SVGA3D_SURFACE_. */
+static VMSVGAINFOFLAGS32 const g_aSvga3DSurfaceFlags[] =
+{
+ { SVGA3D_SURFACE_CUBEMAP , "CUBEMAP" },
+ { SVGA3D_SURFACE_HINT_STATIC , "HINT_STATIC" },
+ { SVGA3D_SURFACE_HINT_DYNAMIC , "HINT_DYNAMIC" },
+ { SVGA3D_SURFACE_HINT_INDEXBUFFER , "HINT_INDEXBUFFER" },
+ { SVGA3D_SURFACE_HINT_VERTEXBUFFER , "HINT_VERTEXBUFFER" },
+ { SVGA3D_SURFACE_HINT_TEXTURE , "HINT_TEXTURE" },
+ { SVGA3D_SURFACE_HINT_RENDERTARGET , "HINT_RENDERTARGET" },
+ { SVGA3D_SURFACE_HINT_DEPTHSTENCIL , "HINT_DEPTHSTENCIL" },
+ { SVGA3D_SURFACE_HINT_WRITEONLY , "HINT_WRITEONLY" },
+ { SVGA3D_SURFACE_DEAD2 , "MASKABLE_ANTIALIAS" }, /* SVGA3D_SURFACE_MASKABLE_ANTIALIAS */
+ { SVGA3D_SURFACE_AUTOGENMIPMAPS , "AUTOGENMIPMAPS" },
+};
+
+
+#ifdef VMSVGA3D_DIRECT3D
+
+/** Values for D3DFORMAT, prefix D3DFMT_. */
+static VMSVGAINFOENUM const g_aD3DFormats[] =
+{
+ { D3DFMT_UNKNOWN , "UNKNOWN" },
+ { D3DFMT_R8G8B8 , "R8G8B8" },
+ { D3DFMT_A8R8G8B8 , "A8R8G8B8" },
+ { D3DFMT_X8R8G8B8 , "X8R8G8B8" },
+ { D3DFMT_R5G6B5 , "R5G6B5" },
+ { D3DFMT_X1R5G5B5 , "X1R5G5B5" },
+ { D3DFMT_A1R5G5B5 , "A1R5G5B5" },
+ { D3DFMT_A4R4G4B4 , "A4R4G4B4" },
+ { D3DFMT_R3G3B2 , "R3G3B2" },
+ { D3DFMT_A8 , "A8" },
+ { D3DFMT_A8R3G3B2 , "A8R3G3B2" },
+ { D3DFMT_X4R4G4B4 , "X4R4G4B4" },
+ { D3DFMT_A2B10G10R10 , "A2B10G10R10" },
+ { D3DFMT_A8B8G8R8 , "A8B8G8R8" },
+ { D3DFMT_X8B8G8R8 , "X8B8G8R8" },
+ { D3DFMT_G16R16 , "G16R16" },
+ { D3DFMT_A2R10G10B10 , "A2R10G10B10" },
+ { D3DFMT_A16B16G16R16 , "A16B16G16R16" },
+ { D3DFMT_A8P8 , "A8P8" },
+ { D3DFMT_P8 , "P8" },
+ { D3DFMT_L8 , "L8" },
+ { D3DFMT_A8L8 , "A8L8" },
+ { D3DFMT_A4L4 , "A4L4" },
+ { D3DFMT_V8U8 , "V8U8" },
+ { D3DFMT_L6V5U5 , "L6V5U5" },
+ { D3DFMT_X8L8V8U8 , "X8L8V8U8" },
+ { D3DFMT_Q8W8V8U8 , "Q8W8V8U8" },
+ { D3DFMT_V16U16 , "V16U16" },
+ { D3DFMT_A2W10V10U10 , "A2W10V10U10" },
+ { D3DFMT_D16_LOCKABLE , "D16_LOCKABLE" },
+ { D3DFMT_D32 , "D32" },
+ { D3DFMT_D15S1 , "D15S1" },
+ { D3DFMT_D24S8 , "D24S8" },
+ { D3DFMT_D24X8 , "D24X8" },
+ { D3DFMT_D24X4S4 , "D24X4S4" },
+ { D3DFMT_D16 , "D16" },
+ { D3DFMT_L16 , "L16" },
+ { D3DFMT_D32F_LOCKABLE , "D32F_LOCKABLE" },
+ { D3DFMT_D24FS8 , "D24FS8" },
+ { D3DFMT_VERTEXDATA , "VERTEXDATA" },
+ { D3DFMT_INDEX16 , "INDEX16" },
+ { D3DFMT_INDEX32 , "INDEX32" },
+ { D3DFMT_Q16W16V16U16 , "Q16W16V16U16" },
+ { D3DFMT_R16F , "R16F" },
+ { D3DFMT_G16R16F , "G16R16F" },
+ { D3DFMT_A16B16G16R16F , "A16B16G16R16F" },
+ { D3DFMT_R32F , "R32F" },
+ { D3DFMT_G32R32F , "G32R32F" },
+ { D3DFMT_A32B32G32R32F , "A32B32G32R32F" },
+ { D3DFMT_CxV8U8 , "CxV8U8" },
+ /* Fourcc values, MSB is in the right most char: */
+ { D3DFMT_MULTI2_ARGB8 , "MULTI2_ARGB8" },
+ { D3DFMT_DXT1 , "DXT1" },
+ { D3DFMT_DXT2 , "DXT2" },
+ { D3DFMT_YUY2 , "YUY2" },
+ { D3DFMT_DXT3 , "DXT3" },
+ { D3DFMT_DXT4 , "DXT4" },
+ { D3DFMT_DXT5 , "DXT5" },
+ { D3DFMT_G8R8_G8B8 , "G8R8_G8B8" },
+ { D3DFMT_R8G8_B8G8 , "R8G8_B8G8" },
+ { D3DFMT_UYVY , "UYVY" },
+ { D3DFMT_FORCE_DWORD , "FORCE_DWORD" }, /* UINT32_MAX */
+};
+VMSVGAINFOENUMMAP_MAKE(static, g_D3DFormat2String, g_aD3DFormats, "D3DFMT_");
+
+/** Values for D3DMULTISAMPLE_TYPE, prefix D3DMULTISAMPLE_. */
+static VMSVGAINFOENUM const g_aD3DMultiSampleTypes[] =
+{
+ { D3DMULTISAMPLE_NONE , "NONE" },
+ { D3DMULTISAMPLE_NONMASKABLE , "NONMASKABLE" },
+ { D3DMULTISAMPLE_2_SAMPLES , "2_SAMPLES" },
+ { D3DMULTISAMPLE_3_SAMPLES , "3_SAMPLES" },
+ { D3DMULTISAMPLE_4_SAMPLES , "4_SAMPLES" },
+ { D3DMULTISAMPLE_5_SAMPLES , "5_SAMPLES" },
+ { D3DMULTISAMPLE_6_SAMPLES , "6_SAMPLES" },
+ { D3DMULTISAMPLE_7_SAMPLES , "7_SAMPLES" },
+ { D3DMULTISAMPLE_8_SAMPLES , "8_SAMPLES" },
+ { D3DMULTISAMPLE_9_SAMPLES , "9_SAMPLES" },
+ { D3DMULTISAMPLE_10_SAMPLES , "10_SAMPLES" },
+ { D3DMULTISAMPLE_11_SAMPLES , "11_SAMPLES" },
+ { D3DMULTISAMPLE_12_SAMPLES , "12_SAMPLES" },
+ { D3DMULTISAMPLE_13_SAMPLES , "13_SAMPLES" },
+ { D3DMULTISAMPLE_14_SAMPLES , "14_SAMPLES" },
+ { D3DMULTISAMPLE_15_SAMPLES , "15_SAMPLES" },
+ { D3DMULTISAMPLE_16_SAMPLES , "16_SAMPLES" },
+ { D3DMULTISAMPLE_FORCE_DWORD , "FORCE_DWORD" },
+};
+VMSVGAINFOENUMMAP_MAKE(static, g_D3DMultiSampleType2String, g_aD3DMultiSampleTypes, "D3DMULTISAMPLE_");
+
+/** D3DUSAGE_XXX flag value, prefix D3DUSAGE_. */
+static VMSVGAINFOFLAGS32 const g_aD3DUsageFlags[] =
+{
+ { D3DUSAGE_RENDERTARGET , "RENDERTARGET" },
+ { D3DUSAGE_DEPTHSTENCIL , "DEPTHSTENCIL" },
+ { D3DUSAGE_WRITEONLY , "WRITEONLY" },
+ { D3DUSAGE_SOFTWAREPROCESSING , "SOFTWAREPROCESSING" },
+ { D3DUSAGE_DONOTCLIP , "DONOTCLIP" },
+ { D3DUSAGE_POINTS , "POINTS" },
+ { D3DUSAGE_RTPATCHES , "RTPATCHES" },
+ { D3DUSAGE_NPATCHES , "NPATCHES" },
+ { D3DUSAGE_DYNAMIC , "DYNAMIC" },
+ { D3DUSAGE_AUTOGENMIPMAP , "AUTOGENMIPMAP" },
+ { D3DUSAGE_RESTRICTED_CONTENT , "RESTRICTED_CONTENT" },
+ { D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER , "RESTRICT_SHARED_RESOURCE_DRIVER" },
+ { D3DUSAGE_RESTRICT_SHARED_RESOURCE , "RESTRICT_SHARED_RESOURCE" },
+ { D3DUSAGE_DMAP , "DMAP" },
+ { D3DUSAGE_NONSECURE , "NONSECURE" },
+ { D3DUSAGE_TEXTAPI , "TEXTAPI" },
+};
+
+#endif /* VMSVGA3D_DIRECT3D */
+
+
+void vmsvga3dInfoU32Flags(PCDBGFINFOHLP pHlp, uint32_t fFlags, const char *pszPrefix, PCVMSVGAINFOFLAGS32 paFlags, uint32_t cFlags)
+{
+ for (uint32_t i = 0; i < cFlags; i++)
+ if ((paFlags[i].fFlags & fFlags) == paFlags[i].fFlags)
+ {
+ Assert(paFlags[i].fFlags);
+ pHlp->pfnPrintf(pHlp, " %s%s", pszPrefix, paFlags[i].pszJohnny);
+ fFlags &= ~paFlags[i].fFlags;
+ if (!fFlags)
+ return;
+ }
+ if (fFlags)
+ pHlp->pfnPrintf(pHlp, " UNKNOWN_%#x", fFlags);
+}
+
+
+/**
+ * Worker for vmsvgaR3Info that display details of a host window.
+ *
+ * @param pHlp The output methods.
+ * @param idHostWindow The host window handle/id/whatever.
+ */
+void vmsvga3dInfoHostWindow(PCDBGFINFOHLP pHlp, uint64_t idHostWindow)
+{
+#ifdef RT_OS_WINDOWS
+ HWND hwnd = (HWND)(uintptr_t)idHostWindow;
+ Assert((uintptr_t)hwnd == idHostWindow);
+ if (hwnd != NULL)
+ {
+ WINDOWINFO Info;
+ RT_ZERO(Info);
+ Info.cbSize = sizeof(Info);
+ if (GetWindowInfo(hwnd, &Info))
+ {
+ pHlp->pfnPrintf(pHlp, " Window rect: xLeft=%d, yTop=%d, xRight=%d, yBottom=%d (cx=%d, cy=%d)\n",
+ Info.rcWindow.left, Info.rcWindow.top, Info.rcWindow.right, Info.rcWindow.bottom,
+ Info.rcWindow.right - Info.rcWindow.left, Info.rcWindow.bottom - Info.rcWindow.top);
+ pHlp->pfnPrintf(pHlp, " Client rect: xLeft=%d, yTop=%d, xRight=%d, yBottom=%d (cx=%d, cy=%d)\n",
+ Info.rcClient.left, Info.rcClient.top, Info.rcClient.right, Info.rcClient.bottom,
+ Info.rcClient.right - Info.rcClient.left, Info.rcClient.bottom - Info.rcClient.top);
+ pHlp->pfnPrintf(pHlp, " Style: %#x", Info.dwStyle);
+ static const VMSVGAINFOFLAGS32 g_aStyles[] =
+ {
+ { WS_POPUP , "POPUP" },
+ { WS_CHILD , "CHILD" },
+ { WS_MINIMIZE , "MINIMIZE" },
+ { WS_VISIBLE , "VISIBLE" },
+ { WS_DISABLED , "DISABLED" },
+ { WS_CLIPSIBLINGS , "CLIPSIBLINGS" },
+ { WS_CLIPCHILDREN , "CLIPCHILDREN" },
+ { WS_MAXIMIZE , "MAXIMIZE" },
+ { WS_BORDER , "BORDER" },
+ { WS_DLGFRAME , "DLGFRAME" },
+ { WS_VSCROLL , "VSCROLL" },
+ { WS_HSCROLL , "HSCROLL" },
+ { WS_SYSMENU , "SYSMENU" },
+ { WS_THICKFRAME , "THICKFRAME" },
+ { WS_GROUP , "GROUP" },
+ { WS_TABSTOP , "TABSTOP" },
+ };
+ vmsvga3dInfoU32Flags(pHlp, Info.dwStyle, "", g_aStyles, RT_ELEMENTS(g_aStyles));
+ pHlp->pfnPrintf(pHlp, "\n");
+
+ pHlp->pfnPrintf(pHlp, " ExStyle: %#x", Info.dwExStyle);
+ static const VMSVGAINFOFLAGS32 g_aExStyles[] =
+ {
+ { WS_EX_DLGMODALFRAME, "DLGMODALFRAME" },
+ { 0x00000002, "DRAGDETECT" },
+ { WS_EX_NOPARENTNOTIFY, "NOPARENTNOTIFY" },
+ { WS_EX_TOPMOST, "TOPMOST" },
+ { WS_EX_ACCEPTFILES, "ACCEPTFILES" },
+ { WS_EX_TRANSPARENT, "TRANSPARENT" },
+ { WS_EX_MDICHILD, "MDICHILD" },
+ { WS_EX_TOOLWINDOW, "TOOLWINDOW" },
+ { WS_EX_WINDOWEDGE, "WINDOWEDGE" },
+ { WS_EX_CLIENTEDGE, "CLIENTEDGE" },
+ { WS_EX_CONTEXTHELP, "CONTEXTHELP" },
+ { WS_EX_RIGHT, "RIGHT" },
+ /*{ WS_EX_LEFT, "LEFT" }, = 0 */
+ { WS_EX_RTLREADING, "RTLREADING" },
+ /*{ WS_EX_LTRREADING, "LTRREADING" }, = 0 */
+ { WS_EX_LEFTSCROLLBAR, "LEFTSCROLLBAR" },
+ /*{ WS_EX_RIGHTSCROLLBAR, "RIGHTSCROLLBAR" }, = 0 */
+ { WS_EX_CONTROLPARENT, "CONTROLPARENT" },
+ { WS_EX_STATICEDGE, "STATICEDGE" },
+ { WS_EX_APPWINDOW, "APPWINDOW" },
+ { WS_EX_LAYERED, "LAYERED" },
+ { WS_EX_NOINHERITLAYOUT, "NOINHERITLAYOUT" },
+ { WS_EX_LAYOUTRTL, "LAYOUTRTL" },
+ { WS_EX_COMPOSITED, "COMPOSITED" },
+ { WS_EX_NOACTIVATE, "NOACTIVATE" },
+ };
+ vmsvga3dInfoU32Flags(pHlp, Info.dwExStyle, "", g_aExStyles, RT_ELEMENTS(g_aExStyles));
+ pHlp->pfnPrintf(pHlp, "\n");
+
+ pHlp->pfnPrintf(pHlp, " Window Status: %#x\n", Info.dwWindowStatus);
+ if (Info.cxWindowBorders || Info.cyWindowBorders)
+ pHlp->pfnPrintf(pHlp, " Borders: cx=%u, cy=%u\n", Info.cxWindowBorders, Info.cyWindowBorders);
+ pHlp->pfnPrintf(pHlp, " Window Type: %#x\n", Info.atomWindowType);
+ pHlp->pfnPrintf(pHlp, " Creator Ver: %#x\n", Info.wCreatorVersion);
+ }
+ else
+ pHlp->pfnPrintf(pHlp, " GetWindowInfo: last error %d\n", GetLastError());
+ }
+
+#elif defined(RT_OS_DARWIN)
+ int rc = ExplicitlyLoadVBoxSVGA3DObjC(false /*fResolveAllImports*/, NULL /*pErrInfo*/);
+ if (RT_SUCCESS(rc))
+ vmsvga3dCocoaViewInfo(pHlp, (NativeNSViewRef)(uintptr_t)idHostWindow);
+ else
+ pHlp->pfnPrintf(pHlp, " Windows info: vmsvga3dCocoaViewInfo failed to load (%Rrc)\n", rc);
+
+#else
+ RT_NOREF(idHostWindow);
+ pHlp->pfnPrintf(pHlp, " Windows info: Not implemented on this platform\n");
+#endif
+}
+
+
+/**
+ * Looks up an enum value in a translation table.
+ *
+ * @returns The value name.
+ * @param iValue The value to name.
+ * @param pEnumMap Enum value to string mapping.
+ */
+const char *vmsvgaLookupEnum(int32_t iValue, PCVMSVGAINFOENUMMAP pEnumMap)
+{
+ PCVMSVGAINFOENUM paValues = pEnumMap->paValues;
+
+#ifdef VBOX_STRICT
+ /*
+ * Check that it's really sorted, or the binary lookup won't work right.
+ */
+ if (!*pEnumMap->pfAsserted)
+ {
+ *pEnumMap->pfAsserted = true;
+ for (uint32_t i = 1; i < pEnumMap->cValues; i++)
+ AssertMsg(paValues[i - 1].iValue <= paValues[i].iValue,
+ ("i = %d: %d followed by %d", i, paValues[i - 1].iValue, paValues[i].iValue));
+ }
+#endif
+
+ /*
+ * Binary search
+ */
+ uint32_t iStart = 0;
+ uint32_t iEnd = (uint32_t)pEnumMap->cValues;
+ for (;;)
+ {
+ uint32_t i = iStart + (iEnd - iStart) / 2;
+ if (iValue < paValues[i].iValue)
+ {
+ if (i > iStart)
+ iEnd = i;
+ else
+ break;
+ }
+ else if (iValue > paValues[i].iValue)
+ {
+ i++;
+ if (i < iEnd)
+ iStart = i;
+ else
+ break;
+ }
+ else
+ return paValues[i].pszName;
+ }
+ return NULL;
+}
+
+
+/**
+ * Formats an enum value as a string, sparse mapping table.
+ *
+ * @returns pszBuffer.
+ * @param pszBuffer The output buffer.
+ * @param cbBuffer The size of the output buffer.
+ * @param pszName The variable name, optional.
+ * @param iValue The enum value.
+ * @param fPrefix Whether to prepend the prefix or not.
+ * @param pEnumMap Enum value to string mapping.
+ */
+char *vmsvgaFormatEnumValueEx(char *pszBuffer, size_t cbBuffer, const char *pszName, int32_t iValue,
+ bool fPrefix, PCVMSVGAINFOENUMMAP pEnumMap)
+{
+ const char *pszValueName = vmsvgaLookupEnum(iValue, pEnumMap);
+ const char *pszPrefix = fPrefix ? pEnumMap->pszPrefix : "";
+ if (pszValueName)
+ {
+ if (pszName)
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %s%s (%#x)", pszName, pszPrefix, pszValueName, iValue);
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "%s%s (%#x)", pszPrefix, pszValueName, iValue);
+ return pszBuffer;
+ }
+
+ if (pszName)
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %sUNKNOWN_%d (%#x)", pszName, pszPrefix, iValue, iValue);
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "%sUNKNOWN_%d (%#x)", pszPrefix, iValue, iValue);
+ return pszBuffer;
+}
+
+
+/**
+ * Formats an enum value as a string.
+ *
+ * @returns pszBuffer.
+ * @param pszBuffer The output buffer.
+ * @param cbBuffer The size of the output buffer.
+ * @param pszName The variable name, optional.
+ * @param uValue The enum value.
+ * @param pszPrefix The prefix of the enum values. Empty string if
+ * none. This helps reduce the memory footprint
+ * as well as the source code size.
+ * @param papszValues One to one string mapping of the enum values.
+ * @param cValues The number of values in the mapping.
+ */
+char *vmsvgaFormatEnumValue(char *pszBuffer, size_t cbBuffer, const char *pszName, uint32_t uValue,
+ const char *pszPrefix, const char * const *papszValues, size_t cValues)
+{
+ if (uValue < cValues)
+ {
+ if (pszName)
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %s%s (%#x)", pszName, pszPrefix, papszValues[uValue], uValue);
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "%s%s (%#x)", pszPrefix, papszValues[uValue], uValue);
+ }
+ else
+ {
+ if (pszName)
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %sUNKNOWN_%d (%#x)", pszName, pszPrefix, uValue, uValue);
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "%sUNKNOWN_%d (%#x)", pszPrefix, uValue, uValue);
+ }
+ return pszBuffer;
+}
+
+
+/**
+ * DBGF info printer for vmsvga3dAsciiPrint.
+ *
+ * @param pszLine The line to print.
+ * @param pvUser The debug info helpers.
+ */
+DECLCALLBACK(void) vmsvga3dAsciiPrintlnInfo(const char *pszLine, void *pvUser)
+{
+ PCDBGFINFOHLP pHlp = (PCDBGFINFOHLP)pvUser;
+ pHlp->pfnPrintf(pHlp, ">%s<\n", pszLine);
+}
+
+
+/**
+ * Log printer for vmsvga3dAsciiPrint.
+ *
+ * @param pszLine The line to print.
+ * @param pvUser Ignored.
+ */
+DECLCALLBACK(void) vmsvga3dAsciiPrintlnLog(const char *pszLine, void *pvUser)
+{
+ size_t cch = strlen(pszLine);
+ while (cch > 0 && pszLine[cch - 1] == ' ')
+ cch--;
+ RTLogPrintf("%.*s\n", cch, pszLine);
+ NOREF(pvUser);
+}
+
+
+void vmsvga3dAsciiPrint(PFNVMSVGAASCIIPRINTLN pfnPrintLine, void *pvUser, void const *pvImage, size_t cbImage,
+ uint32_t cx, uint32_t cy, uint32_t cbScanline, SVGA3dSurfaceFormat enmFormat, bool fInvY,
+ uint32_t cchMaxX, uint32_t cchMaxY)
+{
+ RT_NOREF(cbImage);
+
+ /*
+ * Skip stuff we can't or won't need to handle.
+ */
+ if (!cx || !cy || !cchMaxX || !cchMaxY)
+ return;
+ switch (enmFormat)
+ {
+ /* Compressed. */
+ case SVGA3D_DXT1:
+ case SVGA3D_DXT2:
+ case SVGA3D_DXT3:
+ case SVGA3D_DXT4:
+ case SVGA3D_DXT5:
+ return;
+ /* Generic. */
+ case SVGA3D_BUFFER:
+ return;
+ default:
+ break; /* ok */
+ }
+
+ /*
+ * Figure the pixel conversion factors.
+ */
+ uint32_t cxPerChar = cx / cchMaxX + 1;
+ uint32_t cyPerChar = cy / cchMaxY + 1;
+ /** @todo try keep aspect... */
+ uint32_t const cchLine = (cx + cxPerChar - 1) / cxPerChar;
+ uint32_t const cbSrcPixel = vmsvga3dSurfaceFormatSize(enmFormat, NULL, NULL);
+
+ /*
+ * The very simple conversion we're doing in this function is based on
+ * mapping a block of converted pixels to an ASCII character of similar
+ * weigth. We do that by summing up all the 8-bit gray scale pixels in
+ * that block, applying a conversion factor and getting an index into an
+ * array of increasingly weighty characters.
+ */
+ static const char s_szPalette[] = " ..`',:;icodxkO08XNWM";
+ static const uint32_t s_cchPalette = sizeof(s_szPalette) - 1;
+ uint32_t const cPixelsWeightPerChar = cxPerChar * cyPerChar * 256;
+
+ /*
+ * Do the work
+ */
+ uint32_t *pauScanline = (uint32_t *)RTMemTmpAllocZ(sizeof(pauScanline[0]) * cchLine + cchLine + 1);
+ if (!pauScanline)
+ return;
+ char *pszLine = (char *)&pauScanline[cchLine];
+ RTCPTRUNION uSrc;
+ uSrc.pv = pvImage;
+ if (fInvY)
+ uSrc.pu8 += (cy - 1) * cbScanline;
+ uint32_t cyLeft = cy;
+ uint32_t cyLeftInScanline = cyPerChar;
+ bool fHitFormatAssert = false;
+ for (;;)
+ {
+ /*
+ * Process the scanline. This is tedious because of all the
+ * different formats. We generally ignore alpha, unless it's
+ * all we've got to work with.
+ * Color to 8-bit grayscale conversion is done by averaging.
+ */
+#define CONVERT_SCANLINE(a_RdExpr, a_AddExpr) \
+ do { \
+ for (uint32_t xSrc = 0, xDst = 0, cxLeftInChar = cxPerChar; xSrc < cx; xSrc++) \
+ { \
+ a_RdExpr; \
+ pauScanline[xDst] += (a_AddExpr) & 0xff; \
+ Assert(pauScanline[xDst] <= cPixelsWeightPerChar); \
+ if (--cxLeftInChar == 0) \
+ { \
+ xDst++; \
+ cxLeftInChar = cxPerChar; \
+ } \
+ } \
+ } while (0)
+
+ switch (enmFormat)
+ {
+ /* Unsigned RGB and super/subsets. */
+ case SVGA3D_X8R8G8B8:
+ case SVGA3D_A8R8G8B8:
+ CONVERT_SCANLINE(uint32_t const u32Tmp = uSrc.pu32[xSrc],
+ ( ( u32Tmp & 0xff) /* B */
+ + ((u32Tmp >> 8) & 0xff) /* G */
+ + ((u32Tmp >> 16) & 0xff) /* R */) / 3);
+ break;
+ case SVGA3D_R5G6B5:
+ CONVERT_SCANLINE(uint16_t const u16Tmp = uSrc.pu16[xSrc],
+ ( ( u16Tmp & 0x1f) * 8
+ + ((u16Tmp >> 5) & 0x3f) * 4
+ + ( u16Tmp >> 11) * 8 ) / 3 );
+ break;
+ case SVGA3D_X1R5G5B5:
+ case SVGA3D_A1R5G5B5:
+ CONVERT_SCANLINE(uint16_t const u16Tmp = uSrc.pu16[xSrc],
+ ( ( u16Tmp & 0x1f) * 8
+ + ((u16Tmp >> 5) & 0x1f) * 8
+ + ((u16Tmp >> 10) & 0x1f) * 8) / 3 );
+ break;
+ case SVGA3D_A4R4G4B4:
+ CONVERT_SCANLINE(uint16_t const u16Tmp = uSrc.pu16[xSrc],
+ ( ( u16Tmp & 0xf) * 16
+ + ((u16Tmp >> 4) & 0xf) * 16
+ + ((u16Tmp >> 8) & 0xf) * 16) / 3 );
+ break;
+ case SVGA3D_A16B16G16R16:
+ CONVERT_SCANLINE(uint64_t const u64Tmp = uSrc.pu64[xSrc],
+ ( ((u64Tmp >> 8) & 0xff) /* R */
+ + ((u64Tmp >> 24) & 0xff) /* G */
+ + ((u64Tmp >> 40) & 0xff) /* B */ ) / 3);
+ break;
+ case SVGA3D_A2R10G10B10:
+ CONVERT_SCANLINE(uint32_t const u32Tmp = uSrc.pu32[xSrc],
+ ( ( u32Tmp & 0x3ff) /* B */
+ + ((u32Tmp >> 10) & 0x3ff) /* G */
+ + ((u32Tmp >> 20) & 0x3ff) /* R */ ) / (3 * 4));
+ break;
+ case SVGA3D_G16R16:
+ CONVERT_SCANLINE(uint32_t const u32Tmp = uSrc.pu32[xSrc],
+ ( (u32Tmp & 0xffff) /* R */
+ + (u32Tmp >> 16 ) /* G */) / 0x200);
+ break;
+
+ /* Depth. */
+ case SVGA3D_Z_D32:
+ CONVERT_SCANLINE(uint32_t const u32Tmp = ~((uSrc.pu32[xSrc] >> 1) | uSrc.pu32[xSrc]) & UINT32_C(0x44444444),
+ (( u32Tmp >> (2 - 0)) & RT_BIT_32(0))
+ | ((u32Tmp >> ( 6 - 1)) & RT_BIT_32(1))
+ | ((u32Tmp >> (10 - 2)) & RT_BIT_32(2))
+ | ((u32Tmp >> (14 - 3)) & RT_BIT_32(3))
+ | ((u32Tmp >> (18 - 4)) & RT_BIT_32(4))
+ | ((u32Tmp >> (22 - 5)) & RT_BIT_32(5))
+ | ((u32Tmp >> (26 - 6)) & RT_BIT_32(6))
+ | ((u32Tmp >> (30 - 7)) & RT_BIT_32(7)) );
+ break;
+ case SVGA3D_Z_D16:
+ CONVERT_SCANLINE(uint16_t const u16Tmp = ~uSrc.pu16[xSrc],
+ ((u16Tmp >> ( 1 - 0)) & RT_BIT_32(0))
+ | ((u16Tmp >> ( 3 - 1)) & RT_BIT_32(1))
+ | ((u16Tmp >> ( 5 - 2)) & RT_BIT_32(2))
+ | ((u16Tmp >> ( 7 - 3)) & RT_BIT_32(3))
+ | ((u16Tmp >> ( 9 - 4)) & RT_BIT_32(4))
+ | ((u16Tmp >> (11 - 5)) & RT_BIT_32(5))
+ | ((u16Tmp >> (13 - 6)) & RT_BIT_32(6))
+ | ((u16Tmp >> (15 - 7)) & RT_BIT_32(7)) );
+ break;
+ case SVGA3D_Z_D24S8:
+ CONVERT_SCANLINE(uint32_t const u32Tmp = uSrc.pu32[xSrc],
+ ( u32Tmp & 0xff) /* stencile */
+ | ((~u32Tmp >> 18) & 0x3f));
+ break;
+ case SVGA3D_Z_D15S1:
+ CONVERT_SCANLINE(uint16_t const u16Tmp = uSrc.pu16[xSrc],
+ ( (u16Tmp & 0x01) << 7) /* stencile */
+ | ((~u16Tmp >> 8) & 0x7f));
+ break;
+
+ /* Pure alpha. */
+ case SVGA3D_ALPHA8:
+ CONVERT_SCANLINE(RT_NOTHING, uSrc.pu8[xSrc]);
+ break;
+
+ /* Luminance */
+ case SVGA3D_LUMINANCE8:
+ CONVERT_SCANLINE(RT_NOTHING, uSrc.pu8[xSrc]);
+ break;
+ case SVGA3D_LUMINANCE4_ALPHA4:
+ CONVERT_SCANLINE(RT_NOTHING, uSrc.pu8[xSrc] & 0xf0);
+ break;
+ case SVGA3D_LUMINANCE16:
+ CONVERT_SCANLINE(RT_NOTHING, uSrc.pu16[xSrc] >> 8);
+ break;
+ case SVGA3D_LUMINANCE8_ALPHA8:
+ CONVERT_SCANLINE(RT_NOTHING, uSrc.pu16[xSrc] >> 8);
+ break;
+
+ /* Not supported. */
+ case SVGA3D_DXT1:
+ case SVGA3D_DXT2:
+ case SVGA3D_DXT3:
+ case SVGA3D_DXT4:
+ case SVGA3D_DXT5:
+ case SVGA3D_BUFFER:
+ AssertFailedBreak();
+
+ /* Not considered for implementation yet. */
+ case SVGA3D_BUMPU8V8:
+ case SVGA3D_BUMPL6V5U5:
+ case SVGA3D_BUMPX8L8V8U8:
+ case SVGA3D_FORMAT_DEAD1:
+ case SVGA3D_ARGB_S10E5:
+ case SVGA3D_ARGB_S23E8:
+ case SVGA3D_V8U8:
+ case SVGA3D_Q8W8V8U8:
+ case SVGA3D_CxV8U8:
+ case SVGA3D_X8L8V8U8:
+ case SVGA3D_A2W10V10U10:
+ case SVGA3D_R_S10E5:
+ case SVGA3D_R_S23E8:
+ case SVGA3D_RG_S10E5:
+ case SVGA3D_RG_S23E8:
+ case SVGA3D_Z_D24X8:
+ case SVGA3D_V16U16:
+ case SVGA3D_UYVY:
+ case SVGA3D_YUY2:
+ case SVGA3D_NV12:
+ case SVGA3D_FORMAT_DEAD2: /* Old SVGA3D_AYUV */
+ case SVGA3D_ATI1:
+ case SVGA3D_ATI2:
+ case SVGA3D_Z_DF16:
+ case SVGA3D_Z_DF24:
+ case SVGA3D_Z_D24S8_INT:
+ if (!fHitFormatAssert)
+ {
+ AssertMsgFailed(("%s is not implemented\n", vmsvgaLookupEnum((int)enmFormat, &g_SVGA3dSurfaceFormat2String)));
+ fHitFormatAssert = true;
+ }
+ RT_FALL_THRU();
+ default:
+ /* Lazy programmer fallbacks. */
+ if (cbSrcPixel == 4)
+ CONVERT_SCANLINE(uint32_t const u32Tmp = uSrc.pu32[xSrc],
+ ( ( u32Tmp & 0xff)
+ + ((u32Tmp >> 8) & 0xff)
+ + ((u32Tmp >> 16) & 0xff)
+ + ((u32Tmp >> 24) & 0xff) ) / 4);
+ else if (cbSrcPixel == 3)
+ CONVERT_SCANLINE(RT_NOTHING,
+ ( (uint32_t)uSrc.pu8[xSrc * 4]
+ + (uint32_t)uSrc.pu8[xSrc * 4 + 1]
+ + (uint32_t)uSrc.pu8[xSrc * 4 + 2] ) / 3);
+ else if (cbSrcPixel == 2)
+ CONVERT_SCANLINE(uint16_t const u16Tmp = uSrc.pu16[xSrc],
+ ( ( u16Tmp & 0xf)
+ + ((u16Tmp >> 4) & 0xf)
+ + ((u16Tmp >> 8) & 0xf)
+ + ((u16Tmp >> 12) & 0xf) ) * 4 /* mul 16 div 4 */ );
+ else if (cbSrcPixel == 1)
+ CONVERT_SCANLINE(RT_NOTHING, uSrc.pu8[xSrc]);
+ else
+ AssertFailed();
+ break;
+
+ }
+
+ /*
+ * Print we've reached the end of a block in y direction or if we're at
+ * the end of the image.
+ */
+ cyLeft--;
+ if (--cyLeftInScanline == 0 || cyLeft == 0)
+ {
+ for (uint32_t i = 0; i < cchLine; i++)
+ {
+ uint32_t off = pauScanline[i] * s_cchPalette / cPixelsWeightPerChar; Assert(off < s_cchPalette);
+ pszLine[i] = s_szPalette[off < sizeof(s_szPalette) - 1 ? off : sizeof(s_szPalette) - 1];
+ }
+ pszLine[cchLine] = '\0';
+ pfnPrintLine(pszLine, pvUser);
+
+ if (!cyLeft)
+ break;
+ cyLeftInScanline = cyPerChar;
+ RT_BZERO(pauScanline, sizeof(pauScanline[0]) * cchLine);
+ }
+
+ /*
+ * Advance.
+ */
+ if (!fInvY)
+ uSrc.pu8 += cbScanline;
+ else
+ uSrc.pu8 -= cbScanline;
+ }
+}
+
+
+
+/**
+ * Formats a SVGA3dRenderState structure as a string.
+ *
+ * @returns pszBuffer.
+ * @param pszBuffer Output string buffer.
+ * @param cbBuffer Size of output buffer.
+ * @param pRenderState The SVGA3d render state to format.
+ */
+char *vmsvga3dFormatRenderState(char *pszBuffer, size_t cbBuffer, SVGA3dRenderState const *pRenderState)
+{
+ /*
+ * List of render state names with type prefix.
+ *
+ * First char in the name is a type indicator:
+ * - '*' = requires special handling.
+ * - 'f' = SVGA3dbool
+ * - 'd' = uint32_t
+ * - 'r' = float
+ * - 'b' = SVGA3dBlendOp
+ * - 'c' = SVGA3dColor, SVGA3dColorMask
+ * - 'e' = SVGA3dBlendEquation
+ * - 'm' = SVGA3dColorMask
+ * - 'p' = SVGA3dCmpFunc
+ * - 's' = SVGA3dStencilOp
+ * - 'v' = SVGA3dVertexMaterial
+ * - 'w' = SVGA3dWrapFlags
+ */
+ static const char * const s_apszRenderStateNamesAndType[] =
+ {
+ "*" "INVALID", /* invalid */
+ "f" "ZENABLE", /* SVGA3dBool */
+ "f" "ZWRITEENABLE", /* SVGA3dBool */
+ "f" "ALPHATESTENABLE", /* SVGA3dBool */
+ "f" "DITHERENABLE", /* SVGA3dBool */
+ "f" "BLENDENABLE", /* SVGA3dBool */
+ "f" "FOGENABLE", /* SVGA3dBool */
+ "f" "SPECULARENABLE", /* SVGA3dBool */
+ "f" "STENCILENABLE", /* SVGA3dBool */
+ "f" "LIGHTINGENABLE", /* SVGA3dBool */
+ "f" "NORMALIZENORMALS", /* SVGA3dBool */
+ "f" "POINTSPRITEENABLE", /* SVGA3dBool */
+ "f" "POINTSCALEENABLE", /* SVGA3dBool */
+ "x" "STENCILREF", /* uint32_t */
+ "x" "STENCILMASK", /* uint32_t */
+ "x" "STENCILWRITEMASK", /* uint32_t */
+ "r" "FOGSTART", /* float */
+ "r" "FOGEND", /* float */
+ "r" "FOGDENSITY", /* float */
+ "r" "POINTSIZE", /* float */
+ "r" "POINTSIZEMIN", /* float */
+ "r" "POINTSIZEMAX", /* float */
+ "r" "POINTSCALE_A", /* float */
+ "r" "POINTSCALE_B", /* float */
+ "r" "POINTSCALE_C", /* float */
+ "c" "FOGCOLOR", /* SVGA3dColor */
+ "c" "AMBIENT", /* SVGA3dColor */
+ "*" "CLIPPLANEENABLE", /* SVGA3dClipPlanes */
+ "*" "FOGMODE", /* SVGA3dFogMode */
+ "*" "FILLMODE", /* SVGA3dFillMode */
+ "*" "SHADEMODE", /* SVGA3dShadeMode */
+ "*" "LINEPATTERN", /* SVGA3dLinePattern */
+ "b" "SRCBLEND", /* SVGA3dBlendOp */
+ "b" "DSTBLEND", /* SVGA3dBlendOp */
+ "e" "BLENDEQUATION", /* SVGA3dBlendEquation */
+ "*" "CULLMODE", /* SVGA3dFace */
+ "p" "ZFUNC", /* SVGA3dCmpFunc */
+ "p" "ALPHAFUNC", /* SVGA3dCmpFunc */
+ "p" "STENCILFUNC", /* SVGA3dCmpFunc */
+ "s" "STENCILFAIL", /* SVGA3dStencilOp */
+ "s" "STENCILZFAIL", /* SVGA3dStencilOp */
+ "s" "STENCILPASS", /* SVGA3dStencilOp */
+ "r" "ALPHAREF", /* float */
+ "*" "FRONTWINDING", /* SVGA3dFrontWinding */
+ "*" "COORDINATETYPE", /* SVGA3dCoordinateType */
+ "r" "ZBIAS", /* float */
+ "f" "RANGEFOGENABLE", /* SVGA3dBool */
+ "c" "COLORWRITEENABLE", /* SVGA3dColorMask */
+ "f" "VERTEXMATERIALENABLE", /* SVGA3dBool */
+ "v" "DIFFUSEMATERIALSOURCE", /* SVGA3dVertexMaterial */
+ "v" "SPECULARMATERIALSOURCE", /* SVGA3dVertexMaterial */
+ "v" "AMBIENTMATERIALSOURCE", /* SVGA3dVertexMaterial */
+ "v" "EMISSIVEMATERIALSOURCE", /* SVGA3dVertexMaterial */
+ "c" "TEXTUREFACTOR", /* SVGA3dColor */
+ "f" "LOCALVIEWER", /* SVGA3dBool */
+ "f" "SCISSORTESTENABLE", /* SVGA3dBool */
+ "c" "BLENDCOLOR", /* SVGA3dColor */
+ "f" "STENCILENABLE2SIDED", /* SVGA3dBool */
+ "p" "CCWSTENCILFUNC", /* SVGA3dCmpFunc */
+ "s" "CCWSTENCILFAIL", /* SVGA3dStencilOp */
+ "s" "CCWSTENCILZFAIL", /* SVGA3dStencilOp */
+ "s" "CCWSTENCILPASS", /* SVGA3dStencilOp */
+ "*" "VERTEXBLEND", /* SVGA3dVertexBlendFlags */
+ "r" "SLOPESCALEDEPTHBIAS", /* float */
+ "r" "DEPTHBIAS", /* float */
+ "r" "OUTPUTGAMMA", /* float */
+ "f" "ZVISIBLE", /* SVGA3dBool */
+ "f" "LASTPIXEL", /* SVGA3dBool */
+ "f" "CLIPPING", /* SVGA3dBool */
+ "w" "WRAP0", /* SVGA3dWrapFlags */
+ "w" "WRAP1", /* SVGA3dWrapFlags */
+ "w" "WRAP2", /* SVGA3dWrapFlags */
+ "w" "WRAP3", /* SVGA3dWrapFlags */
+ "w" "WRAP4", /* SVGA3dWrapFlags */
+ "w" "WRAP5", /* SVGA3dWrapFlags */
+ "w" "WRAP6", /* SVGA3dWrapFlags */
+ "w" "WRAP7", /* SVGA3dWrapFlags */
+ "w" "WRAP8", /* SVGA3dWrapFlags */
+ "w" "WRAP9", /* SVGA3dWrapFlags */
+ "w" "WRAP10", /* SVGA3dWrapFlags */
+ "w" "WRAP11", /* SVGA3dWrapFlags */
+ "w" "WRAP12", /* SVGA3dWrapFlags */
+ "w" "WRAP13", /* SVGA3dWrapFlags */
+ "w" "WRAP14", /* SVGA3dWrapFlags */
+ "w" "WRAP15", /* SVGA3dWrapFlags */
+ "f" "MULTISAMPLEANTIALIAS", /* SVGA3dBool */
+ "x" "MULTISAMPLEMASK", /* uint32_t */
+ "f" "INDEXEDVERTEXBLENDENABLE", /* SVGA3dBool */
+ "r" "TWEENFACTOR", /* float */
+ "f" "ANTIALIASEDLINEENABLE", /* SVGA3dBool */
+ "c" "COLORWRITEENABLE1", /* SVGA3dColorMask */
+ "c" "COLORWRITEENABLE2", /* SVGA3dColorMask */
+ "c" "COLORWRITEENABLE3", /* SVGA3dColorMask */
+ "f" "SEPARATEALPHABLENDENABLE", /* SVGA3dBool */
+ "b" "SRCBLENDALPHA", /* SVGA3dBlendOp */
+ "b" "DSTBLENDALPHA", /* SVGA3dBlendOp */
+ "e" "BLENDEQUATIONALPHA", /* SVGA3dBlendEquation */
+ "*" "TRANSPARENCYANTIALIAS", /* SVGA3dTransparencyAntialiasType */
+ "r" "LINEWIDTH", /* float */
+ };
+
+ uint32_t iState = pRenderState->state;
+ if (iState != SVGA3D_RS_INVALID)
+ {
+ if (iState < RT_ELEMENTS(s_apszRenderStateNamesAndType))
+ {
+ const char *pszName = s_apszRenderStateNamesAndType[iState];
+ char const chType = *pszName++;
+
+ union
+ {
+ uint32_t u;
+ float r;
+ SVGA3dColorMask Color;
+ } uValue;
+ uValue.u = pRenderState->uintValue;
+
+ switch (chType)
+ {
+ case 'f':
+ if (uValue.u == 0)
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = false", pszName);
+ else if (uValue.u == 1)
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = true", pszName);
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = true (%#x)", pszName, uValue.u);
+ break;
+ case 'x':
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %#x (%d)", pszName, uValue.u, uValue.u);
+ break;
+ case 'r':
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %d.%06u (%#x)",
+ pszName, (int)uValue.r, (unsigned)(uValue.r * 1000000) % 1000000U, uValue.u);
+ break;
+ case 'c': //SVGA3dColor, SVGA3dColorMask
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = RGBA(%d,%d,%d,%d) (%#x)", pszName,
+ uValue.Color.red, uValue.Color.green, uValue.Color.blue, uValue.Color.alpha, uValue.u);
+ break;
+ case 'w': //SVGA3dWrapFlags
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %#x%s", pszName, uValue.u,
+ uValue.u <= SVGA3D_WRAPCOORD_ALL ? " (out of bounds" : "");
+ break;
+ default:
+ AssertFailed(); RT_FALL_THRU();
+ case 'b': //SVGA3dBlendOp
+ case 'e': //SVGA3dBlendEquation
+ case 'p': //SVGA3dCmpFunc
+ case 's': //SVGA3dStencilOp
+ case 'v': //SVGA3dVertexMaterial
+ case '*':
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %#x", pszName, uValue.u);
+ break;
+ }
+ }
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "UNKNOWN_%d_%#x = %#x", iState, iState, pRenderState->uintValue);
+ }
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "INVALID");
+ return pszBuffer;
+}
+
+
+/**
+ * Formats a SVGA3dTextureState structure as a string.
+ *
+ * @returns pszBuffer.
+ * @param pszBuffer Output string buffer.
+ * @param cbBuffer Size of output buffer.
+ * @param pTextureState The SVGA3d texture state to format.
+ */
+char *vmsvga3dFormatTextureState(char *pszBuffer, size_t cbBuffer, SVGA3dTextureState const *pTextureState)
+{
+ static const char * const s_apszTextureStateNamesAndType[] =
+ {
+ "*" "INVALID", /* invalid */
+ "x" "BIND_TEXTURE", /* SVGA3dSurfaceId */
+ "m" "COLOROP", /* SVGA3dTextureCombiner */
+ "a" "COLORARG1", /* SVGA3dTextureArgData */
+ "a" "COLORARG2", /* SVGA3dTextureArgData */
+ "m" "ALPHAOP", /* SVGA3dTextureCombiner */
+ "a" "ALPHAARG1", /* SVGA3dTextureArgData */
+ "a" "ALPHAARG2", /* SVGA3dTextureArgData */
+ "e" "ADDRESSU", /* SVGA3dTextureAddress */
+ "e" "ADDRESSV", /* SVGA3dTextureAddress */
+ "l" "MIPFILTER", /* SVGA3dTextureFilter */
+ "l" "MAGFILTER", /* SVGA3dTextureFilter */
+ "m" "MINFILTER", /* SVGA3dTextureFilter */
+ "c" "BORDERCOLOR", /* SVGA3dColor */
+ "r" "TEXCOORDINDEX", /* uint32_t */
+ "t" "TEXTURETRANSFORMFLAGS", /* SVGA3dTexTransformFlags */
+ "g" "TEXCOORDGEN", /* SVGA3dTextureCoordGen */
+ "r" "BUMPENVMAT00", /* float */
+ "r" "BUMPENVMAT01", /* float */
+ "r" "BUMPENVMAT10", /* float */
+ "r" "BUMPENVMAT11", /* float */
+ "x" "TEXTURE_MIPMAP_LEVEL", /* uint32_t */
+ "r" "TEXTURE_LOD_BIAS", /* float */
+ "x" "TEXTURE_ANISOTROPIC_LEVEL", /* uint32_t */
+ "e" "ADDRESSW", /* SVGA3dTextureAddress */
+ "r" "GAMMA", /* float */
+ "r" "BUMPENVLSCALE", /* float */
+ "r" "BUMPENVLOFFSET", /* float */
+ "a" "COLORARG0", /* SVGA3dTextureArgData */
+ "a" "ALPHAARG0" /* SVGA3dTextureArgData */
+ };
+
+ /*
+ * Format the stage first.
+ */
+ char *pszRet = pszBuffer;
+ size_t cchPrefix = RTStrPrintf(pszBuffer, cbBuffer, "[%u] ", pTextureState->stage);
+ if (cchPrefix < cbBuffer)
+ {
+ cbBuffer -= cchPrefix;
+ pszBuffer += cchPrefix;
+ }
+ else
+ cbBuffer = 0;
+
+ /*
+ * Format the name and value.
+ */
+ uint32_t iName = pTextureState->name;
+ if (iName != SVGA3D_TS_INVALID)
+ {
+ if (iName < RT_ELEMENTS(s_apszTextureStateNamesAndType))
+ {
+ const char *pszName = s_apszTextureStateNamesAndType[iName];
+ char chType = *pszName++;
+
+ union
+ {
+ uint32_t u;
+ float r;
+ SVGA3dColorMask Color;
+ } uValue;
+ uValue.u = pTextureState->value;
+
+ switch (chType)
+ {
+ case 'x':
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %#x (%d)", pszName, uValue.u, uValue.u);
+ break;
+
+ case 'r':
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %d.%06u (%#x)",
+ pszName, (int)uValue.r, (unsigned)(uValue.r * 1000000) % 1000000U, uValue.u);
+ break;
+
+ case 'a': //SVGA3dTextureArgData
+ {
+ static const char * const s_apszValues[] =
+ {
+ "INVALID", "CONSTANT", "PREVIOUS", "DIFFUSE", "TEXTURE", "SPECULAR"
+ };
+ vmsvgaFormatEnumValue(pszBuffer, cbBuffer, pszName, uValue.u,
+ "SVGA3D_TA_", s_apszValues, RT_ELEMENTS(s_apszValues));
+ break;
+ }
+
+ case 'c': //SVGA3dColor, SVGA3dColorMask
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = RGBA(%d,%d,%d,%d) (%#x)", pszName,
+ uValue.Color.red, uValue.Color.green, uValue.Color.blue, uValue.Color.alpha, uValue.u);
+ break;
+
+ case 'e': //SVGA3dTextureAddress
+ {
+ static const char * const s_apszValues[] =
+ {
+ "INVALID", "WRAP", "MIRROR", "CLAMP", "BORDER", "MIRRORONCE", "EDGE",
+ };
+ vmsvgaFormatEnumValue(pszBuffer, cbBuffer, pszName, uValue.u,
+ "SVGA3D_TEX_ADDRESS_", s_apszValues, RT_ELEMENTS(s_apszValues));
+ break;
+ }
+
+ case 'l': //SVGA3dTextureFilter
+ {
+ static const char * const s_apszValues[] =
+ {
+ "NONE", "NEAREST", "LINEAR", "ANISOTROPIC", "FLATCUBIC", "GAUSSIANCUBIC", "PYRAMIDALQUAD", "GAUSSIANQUAD",
+ };
+ vmsvgaFormatEnumValue(pszBuffer, cbBuffer, pszName, uValue.u,
+ "SVGA3D_TEX_FILTER_", s_apszValues, RT_ELEMENTS(s_apszValues));
+ break;
+ }
+
+ case 'g': //SVGA3dTextureCoordGen
+ {
+ static const char * const s_apszValues[] =
+ {
+ "OFF", "EYE_POSITION", "EYE_NORMAL", "REFLECTIONVECTOR", "SPHERE",
+ };
+ vmsvgaFormatEnumValue(pszBuffer, cbBuffer, pszName, uValue.u,
+ "SVGA3D_TEXCOORD_GEN_", s_apszValues, RT_ELEMENTS(s_apszValues));
+ break;
+ }
+
+ case 'm': //SVGA3dTextureCombiner
+ {
+ static const char * const s_apszValues[] =
+ {
+ "INVALID", "DISABLE", "SELECTARG1", "SELECTARG2", "MODULATE", "ADD", "ADDSIGNED", "SUBTRACT",
+ "BLENDTEXTUREALPHA", "BLENDDIFFUSEALPHA", "BLENDCURRENTALPHA", "BLENDFACTORALPHA", "MODULATE2X",
+ "MODULATE4X", "DSDT", "DOTPRODUCT3", "BLENDTEXTUREALPHAPM", "ADDSIGNED2X", "ADDSMOOTH", "PREMODULATE",
+ "MODULATEALPHA_ADDCOLOR", "MODULATECOLOR_ADDALPHA", "MODULATEINVALPHA_ADDCOLOR",
+ "MODULATEINVCOLOR_ADDALPHA", "BUMPENVMAPLUMINANCE", "MULTIPLYADD", "LERP",
+ };
+ vmsvgaFormatEnumValue(pszBuffer, cbBuffer, pszName, uValue.u,
+ "SVGA3D_TC_", s_apszValues, RT_ELEMENTS(s_apszValues));
+ break;
+ }
+
+ default:
+ AssertFailed();
+ RTStrPrintf(pszBuffer, cbBuffer, "%s = %#x\n", pszName, uValue.u);
+ break;
+ }
+ }
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "UNKNOWN_%d_%#x = %#x\n", iName, iName, pTextureState->value);
+ }
+ else
+ RTStrPrintf(pszBuffer, cbBuffer, "INVALID");
+ return pszRet;
+}
+
+
+
+static const char * const g_apszTransformTypes[] =
+{
+ "SVGA3D_TRANSFORM_INVALID",
+ "SVGA3D_TRANSFORM_WORLD",
+ "SVGA3D_TRANSFORM_VIEW",
+ "SVGA3D_TRANSFORM_PROJECTION",
+ "SVGA3D_TRANSFORM_TEXTURE0",
+ "SVGA3D_TRANSFORM_TEXTURE1",
+ "SVGA3D_TRANSFORM_TEXTURE2",
+ "SVGA3D_TRANSFORM_TEXTURE3",
+ "SVGA3D_TRANSFORM_TEXTURE4",
+ "SVGA3D_TRANSFORM_TEXTURE5",
+ "SVGA3D_TRANSFORM_TEXTURE6",
+ "SVGA3D_TRANSFORM_TEXTURE7",
+ "SVGA3D_TRANSFORM_WORLD1",
+ "SVGA3D_TRANSFORM_WORLD2",
+ "SVGA3D_TRANSFORM_WORLD3",
+};
+
+static const char * const g_apszFaces[] =
+{
+ "SVGA3D_FACE_INVALID",
+ "SVGA3D_FACE_NONE",
+ "SVGA3D_FACE_FRONT",
+ "SVGA3D_FACE_BACK",
+ "SVGA3D_FACE_FRONT_BACK",
+};
+
+static const char * const g_apszLightTypes[] =
+{
+ "SVGA3D_LIGHTTYPE_INVALID",
+ "SVGA3D_LIGHTTYPE_POINT",
+ "SVGA3D_LIGHTTYPE_SPOT1",
+ "SVGA3D_LIGHTTYPE_SPOT2",
+ "SVGA3D_LIGHTTYPE_DIRECTIONAL",
+};
+
+static const char * const g_apszRenderTargets[] =
+{
+ "SVGA3D_RT_DEPTH",
+ "SVGA3D_RT_STENCIL",
+ "SVGA3D_RT_COLOR0",
+ "SVGA3D_RT_COLOR1",
+ "SVGA3D_RT_COLOR2",
+ "SVGA3D_RT_COLOR3",
+ "SVGA3D_RT_COLOR4",
+ "SVGA3D_RT_COLOR5",
+ "SVGA3D_RT_COLOR6",
+ "SVGA3D_RT_COLOR7",
+};
+
+static void vmsvga3dInfoContextWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DCONTEXT pContext, bool fVerbose)
+{
+ RT_NOREF(fVerbose);
+ char szTmp[128];
+
+ pHlp->pfnPrintf(pHlp, "*** VMSVGA 3d context %#x (%d) ***\n", pContext->id, pContext->id);
+#ifdef RT_OS_WINDOWS
+ pHlp->pfnPrintf(pHlp, "hwnd: %p\n", pContext->hwnd);
+ if (fVerbose)
+ vmsvga3dInfoHostWindow(pHlp, (uintptr_t)pContext->hwnd);
+# ifdef VMSVGA3D_DIRECT3D
+ pHlp->pfnPrintf(pHlp, "pDevice: %p\n", pContext->pDevice);
+# else
+ pHlp->pfnPrintf(pHlp, "hdc: %p\n", pContext->hdc);
+ pHlp->pfnPrintf(pHlp, "hglrc: %p\n", pContext->hglrc);
+# endif
+
+#elif defined(RT_OS_DARWIN)
+ pHlp->pfnPrintf(pHlp, "cocoaView: %p\n", pContext->cocoaView);
+ if (pContext->cocoaView)
+ vmsvga3dInfoHostWindow(pHlp, (uintptr_t)pContext->cocoaView);
+ pHlp->pfnPrintf(pHlp, "cocoaContext: %p\n", pContext->cocoaContext);
+ if (pContext->fOtherProfile)
+ pHlp->pfnPrintf(pHlp, "fOtherProfile: true\n");
+
+#else
+ pHlp->pfnPrintf(pHlp, "window: %p\n", pContext->window);
+ if (pContext->window)
+ vmsvga3dInfoHostWindow(pHlp, (uintptr_t)pContext->window);
+ pHlp->pfnPrintf(pHlp, "glxContext: %p\n", pContext->glxContext);
+
+#endif
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++)
+ if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
+ pHlp->pfnPrintf(pHlp, "aSidActiveTextures[%u]: %#x\n", i, pContext->aSidActiveTextures[i]);
+
+ pHlp->pfnPrintf(pHlp, "fUpdateFlags: %#x\n", pContext->state.u32UpdateFlags);
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderState); i++)
+ if (pContext->state.aRenderState[i].state != SVGA3D_RS_INVALID)
+ pHlp->pfnPrintf(pHlp, "aRenderState[%3d]: %s\n", i,
+ vmsvga3dFormatRenderState(szTmp, sizeof(szTmp), &pContext->state.aRenderState[i]));
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aTextureStates); i++)
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[i]); j++)
+ if (pContext->state.aTextureStates[i][j].name != SVGA3D_TS_INVALID)
+ pHlp->pfnPrintf(pHlp, "aTextureStates[%3d][%3d]: %s\n", i, j,
+ vmsvga3dFormatTextureState(szTmp, sizeof(szTmp), &pContext->state.aTextureStates[i][j]));
+
+ AssertCompile(RT_ELEMENTS(g_apszTransformTypes) == SVGA3D_TRANSFORM_MAX);
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aTransformState); i++)
+ if (pContext->state.aTransformState[i].fValid)
+ {
+ pHlp->pfnPrintf(pHlp, "aTransformState[%s(%u)]:\n", g_apszTransformTypes[i], i);
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTransformState[i].matrix); j++)
+ pHlp->pfnPrintf(pHlp,
+ (j % 4) == 0 ? " [ " FLOAT_FMT_STR : (j % 4) < 3 ? ", " FLOAT_FMT_STR : ", " FLOAT_FMT_STR "]\n",
+ FLOAT_FMT_ARGS(pContext->state.aTransformState[i].matrix[j]));
+ }
+
+ AssertCompile(RT_ELEMENTS(g_apszFaces) == SVGA3D_FACE_MAX);
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aMaterial); i++)
+ if (pContext->state.aMaterial[i].fValid)
+ {
+ pHlp->pfnPrintf(pHlp, "aTransformState[%s(%u)]: shininess=" FLOAT_FMT_STR "\n",
+ g_apszFaces[i], i, FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.shininess));
+ pHlp->pfnPrintf(pHlp, " diffuse =[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.diffuse[0]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.diffuse[1]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.diffuse[2]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.diffuse[3]));
+ pHlp->pfnPrintf(pHlp, " ambient =[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.ambient[0]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.ambient[1]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.ambient[2]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.ambient[3]));
+ pHlp->pfnPrintf(pHlp, " specular=[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.specular[0]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.specular[1]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.specular[2]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.specular[3]));
+ pHlp->pfnPrintf(pHlp, " emissive=[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.emissive[0]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.emissive[1]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.emissive[2]),
+ FLOAT_FMT_ARGS(pContext->state.aMaterial[i].material.emissive[3]));
+ }
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aClipPlane); i++)
+ if (pContext->state.aClipPlane[i].fValid)
+ pHlp->pfnPrintf(pHlp, "aClipPlane[%#04x]: [ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ i,
+ FLOAT_FMT_ARGS(pContext->state.aClipPlane[i].plane[0]),
+ FLOAT_FMT_ARGS(pContext->state.aClipPlane[i].plane[1]),
+ FLOAT_FMT_ARGS(pContext->state.aClipPlane[i].plane[2]),
+ FLOAT_FMT_ARGS(pContext->state.aClipPlane[i].plane[3]));
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aLightData); i++)
+ if (pContext->state.aLightData[i].fValidData)
+ {
+ pHlp->pfnPrintf(pHlp, "aLightData[%#04x]: enabled=%RTbool inWorldSpace=%RTbool type=%s(%u)\n",
+ i,
+ pContext->state.aLightData[i].fEnabled,
+ pContext->state.aLightData[i].data.inWorldSpace,
+ (uint32_t)pContext->state.aLightData[i].data.type < RT_ELEMENTS(g_apszLightTypes)
+ ? g_apszLightTypes[pContext->state.aLightData[i].data.type] : "UNKNOWN",
+ pContext->state.aLightData[i].data.type);
+ pHlp->pfnPrintf(pHlp, " diffuse =[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.diffuse[0]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.diffuse[1]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.diffuse[2]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.diffuse[3]));
+ pHlp->pfnPrintf(pHlp, " specular =[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.specular[0]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.specular[1]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.specular[2]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.specular[3]));
+ pHlp->pfnPrintf(pHlp, " ambient =[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.ambient[0]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.ambient[1]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.ambient[2]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.ambient[3]));
+ pHlp->pfnPrintf(pHlp, " position =[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.position[0]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.position[1]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.position[2]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.position[3]));
+ pHlp->pfnPrintf(pHlp, " direction=[ " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR " ]\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.direction[0]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.direction[1]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.direction[2]),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.direction[3]));
+ pHlp->pfnPrintf(pHlp, " range=" FLOAT_FMT_STR " falloff=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.range),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.falloff));
+ pHlp->pfnPrintf(pHlp, " attenuation0=" FLOAT_FMT_STR " attenuation1=" FLOAT_FMT_STR " attenuation2=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.attenuation0),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.attenuation1),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.attenuation2));
+ pHlp->pfnPrintf(pHlp, " theta=" FLOAT_FMT_STR " phi=" FLOAT_FMT_STR "\n",
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.theta),
+ FLOAT_FMT_ARGS(pContext->state.aLightData[i].data.phi));
+ }
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); i++)
+ if (pContext->state.aRenderTargets[i] != SVGA3D_INVALID_ID)
+ pHlp->pfnPrintf(pHlp, "aRenderTargets[%s/%u] = %#x (%d)\n",
+ i < RT_ELEMENTS(g_apszRenderTargets) ? g_apszRenderTargets[i] : "UNKNOWN", i,
+ pContext->state.aRenderTargets[i], pContext->state.aRenderTargets[i]);
+
+ pHlp->pfnPrintf(pHlp, "RectScissor: (x,y,cx,cy)=(%u,%u,%u,%u)\n",
+ pContext->state.RectViewPort.x, pContext->state.RectViewPort.y,
+ pContext->state.RectViewPort.w, pContext->state.RectViewPort.h);
+ pHlp->pfnPrintf(pHlp, "zRange: (min,max)=(" FLOAT_FMT_STR ", " FLOAT_FMT_STR ")\n",
+ FLOAT_FMT_ARGS(pContext->state.zRange.min),
+ FLOAT_FMT_ARGS(pContext->state.zRange.max));
+ pHlp->pfnPrintf(pHlp, "fUpdateFlags: %#x\n", pContext->state.u32UpdateFlags);
+ pHlp->pfnPrintf(pHlp, "shidPixel: %#x (%d)\n", pContext->state.shidPixel, pContext->state.shidPixel);
+ pHlp->pfnPrintf(pHlp, "shidVertex: %#x (%d)\n", pContext->state.shidVertex, pContext->state.shidVertex);
+
+ for (uint32_t iWhich = 0; iWhich < 2; iWhich++)
+ {
+ uint32_t cConsts = iWhich == 0 ? pContext->state.cPixelShaderConst : pContext->state.cVertexShaderConst;
+ PVMSVGASHADERCONST paConsts = iWhich == 0 ? pContext->state.paPixelShaderConst : pContext->state.paVertexShaderConst;
+ const char *pszName = iWhich ? "paPixelShaderConst" : "paVertexShaderConst";
+
+ for (uint32_t i = 0; i < cConsts; i++)
+ if (paConsts[i].fValid)
+ {
+ if (paConsts[i].ctype == SVGA3D_CONST_TYPE_FLOAT)
+ pHlp->pfnPrintf(pHlp, "%s[%#x(%u)] = [" FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR "] ctype=FLOAT\n",
+ pszName, i, i,
+ FLOAT_FMT_ARGS(*(float *)&paConsts[i].value[0]), FLOAT_FMT_ARGS(*(float *)&paConsts[i].value[1]),
+ FLOAT_FMT_ARGS(*(float *)&paConsts[i].value[2]), FLOAT_FMT_ARGS(*(float *)&paConsts[i].value[3]));
+ else
+ pHlp->pfnPrintf(pHlp, "%s[%#x(%u)] = [%#x, %#x, %#x, %#x] ctype=%s\n",
+ pszName, i, i,
+ paConsts[i].value[0], paConsts[i].value[1],
+ paConsts[i].value[2], paConsts[i].value[3],
+ paConsts[i].ctype == SVGA3D_CONST_TYPE_INT ? "INT"
+ : paConsts[i].ctype == SVGA3D_CONST_TYPE_BOOL ? "BOOL" : "UNKNOWN");
+ }
+ }
+
+ for (uint32_t iWhich = 0; iWhich < 2; iWhich++)
+ {
+ uint32_t cShaders = iWhich == 0 ? pContext->cPixelShaders : pContext->cVertexShaders;
+ PVMSVGA3DSHADER paShaders = iWhich == 0 ? pContext->paPixelShader : pContext->paVertexShader;
+ const char *pszName = iWhich == 0 ? "paPixelShaders" : "paVertexShaders";
+ for (uint32_t i = 0; i < cShaders; i++)
+ if (paShaders[i].id == i)
+ {
+ pHlp->pfnPrintf(pHlp, "%s[%u]: id=%#x cid=%#x type=%s(%d) cbData=%#x pvData=%p\n",
+ pszName, i,
+ paShaders[i].id,
+ paShaders[i].cid,
+ paShaders[i].type == SVGA3D_SHADERTYPE_VS ? "VS"
+ : paShaders[i].type == SVGA3D_SHADERTYPE_PS ? "PS" : "UNKNOWN",
+ paShaders[i].type,
+ paShaders[i].cbData,
+ paShaders[i].pShaderProgram);
+ }
+ }
+}
+
+
+void vmsvga3dInfoContextWorker(PVGASTATECC pThisCC, PCDBGFINFOHLP pHlp, uint32_t cid, bool fVerbose)
+{
+ /* Warning! This code is currently racing papContexts reallocation! */
+ /* Warning! This code is currently racing papContexts reallocation! */
+ /* Warning! This code is currently racing papContexts reallocation! */
+ VMSVGA3DSTATE volatile *pState = pThisCC->svga.p3dState;
+ if (pState)
+ {
+ /*
+ * Deal with a specific request first.
+ */
+ if (cid != UINT32_MAX)
+ {
+ if (cid < pState->cContexts)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[cid];
+ if (pContext && pContext->id == cid)
+ {
+ vmsvga3dInfoContextWorkerOne(pHlp, pContext, fVerbose);
+ return;
+ }
+ }
+#ifdef VMSVGA3D_OPENGL
+ else if ( cid == VMSVGA3D_SHARED_CTX_ID
+ && pState->SharedCtx.id == cid)
+ {
+ vmsvga3dInfoContextWorkerOne(pHlp, &((PVMSVGA3DSTATE)pState)->SharedCtx, fVerbose);
+ return;
+ }
+#endif
+ pHlp->pfnPrintf(pHlp, "Context ID %#x not found.\n", cid);
+ }
+ else
+ {
+#ifdef VMSVGA3D_OPENGL
+ /*
+ * Dump the shared context.
+ */
+ if (pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ {
+ pHlp->pfnPrintf(pHlp, "Shared context:\n");
+ vmsvga3dInfoContextWorkerOne(pHlp, &((PVMSVGA3DSTATE)pState)->SharedCtx, fVerbose);
+ }
+#endif
+
+ /*
+ * Dump the per-screen contexts.
+ */
+ /** @todo multi screen */
+
+ /*
+ * Dump all.
+ */
+ uint32_t cContexts = pState->cContexts;
+ pHlp->pfnPrintf(pHlp, "cContexts=%d\n", cContexts);
+ for (cid = 0; cid < cContexts; cid++)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[cid];
+ if (pContext && pContext->id == cid)
+ {
+ pHlp->pfnPrintf(pHlp, "\n");
+ vmsvga3dInfoContextWorkerOne(pHlp, pContext, fVerbose);
+ }
+ }
+ }
+ }
+}
+
+
+#ifdef VMSVGA3D_DIRECT3D
+/**
+ * Release all shared surface objects.
+ */
+static DECLCALLBACK(int) vmsvga3dInfoSharedObjectCallback(PAVLU32NODECORE pNode, void *pvUser)
+{
+ PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)pNode;
+ PCDBGFINFOHLP pHlp = (PCDBGFINFOHLP)pvUser;
+
+ pHlp->pfnPrintf(pHlp, "Shared surface: %#x pv=%p\n", pSharedSurface->Core.Key, pSharedSurface->u.pCubeTexture);
+
+ return 0;
+}
+#endif /* VMSVGA3D_DIRECT3D */
+
+static int vmsvga3dInfoBmpWrite(const char *pszFilename, const void *pvBits, int w, int h, uint32_t cbPixel, uint32_t u32Mask)
+{
+ if ( cbPixel != 4
+ && cbPixel != 2
+ && cbPixel != 1)
+ return VERR_NOT_SUPPORTED;
+
+ /* Always write BGRX bitmap for now. */
+ const int cbBitmap = w * h * 4;
+
+ FILE *f = fopen(pszFilename, "wb");
+ if (!f)
+ return VERR_FILE_NOT_FOUND;
+
+#ifdef RT_OS_WINDOWS
+ if (cbPixel == 4)
+ {
+ BMPFILEHDR fileHdr;
+ RT_ZERO(fileHdr);
+ fileHdr.uType = BMP_HDR_MAGIC;
+ fileHdr.cbFileSize = sizeof(fileHdr) + sizeof(BITMAPV4HEADER) + cbBitmap;
+ fileHdr.offBits = sizeof(fileHdr) + sizeof(BITMAPV4HEADER);
+
+ BITMAPV4HEADER hdrV4;
+ RT_ZERO(hdrV4);
+ hdrV4.bV4Size = sizeof(hdrV4);
+ hdrV4.bV4Width = w;
+ hdrV4.bV4Height = -h;
+ hdrV4.bV4Planes = 1;
+ hdrV4.bV4BitCount = 32;
+ hdrV4.bV4V4Compression = BI_BITFIELDS;
+ hdrV4.bV4SizeImage = cbBitmap;
+ hdrV4.bV4XPelsPerMeter = 2835;
+ hdrV4.bV4YPelsPerMeter = 2835;
+ // hdrV4.bV4ClrUsed = 0;
+ // hdrV4.bV4ClrImportant = 0;
+ hdrV4.bV4RedMask = 0x00ff0000;
+ hdrV4.bV4GreenMask = 0x0000ff00;
+ hdrV4.bV4BlueMask = 0x000000ff;
+ hdrV4.bV4AlphaMask = 0xff000000;
+ hdrV4.bV4CSType = LCS_WINDOWS_COLOR_SPACE;
+ // hdrV4.bV4Endpoints = {0};
+ // hdrV4.bV4GammaRed = 0;
+ // hdrV4.bV4GammaGreen = 0;
+ // hdrV4.bV4GammaBlue = 0;
+
+ fwrite(&fileHdr, 1, sizeof(fileHdr), f);
+ fwrite(&hdrV4, 1, sizeof(hdrV4), f);
+ }
+ else
+#endif
+ {
+ BMPFILEHDR fileHdr;
+ RT_ZERO(fileHdr);
+ fileHdr.uType = BMP_HDR_MAGIC;
+ fileHdr.cbFileSize = sizeof(BMPFILEHDR) + sizeof(BMPWIN3XINFOHDR) + cbBitmap;
+ fileHdr.offBits = sizeof(BMPFILEHDR) + sizeof(BMPWIN3XINFOHDR);
+
+ BMPWIN3XINFOHDR coreHdr;
+ RT_ZERO(coreHdr);
+ coreHdr.cbSize = sizeof(coreHdr);
+ coreHdr.uWidth = w;
+ coreHdr.uHeight = -h;
+ coreHdr.cPlanes = 1;
+ coreHdr.cBits = 32;
+ coreHdr.cbSizeImage = cbBitmap;
+
+ fwrite(&fileHdr, 1, sizeof(fileHdr), f);
+ fwrite(&coreHdr, 1, sizeof(coreHdr), f);
+ }
+
+ if (cbPixel == 4)
+ {
+ const uint32_t *s = (uint32_t *)pvBits;
+ int i;
+ for (i = 0; i < w * h; ++i)
+ {
+ const uint32_t u32 = *s++;
+ uint32_t u = u32 & u32Mask;
+ fwrite(&u, 1, 4, f);
+ }
+ }
+ else if (cbPixel == 2)
+ {
+ const uint16_t *s = (uint16_t *)pvBits;
+ int i;
+ for (i = 0; i < w * h; ++i)
+ {
+ const uint16_t u16 = *s++;
+ uint32_t u32 = u16;
+ uint32_t u = u32 & u32Mask;
+ fwrite(&u, 1, 4, f);
+ }
+ }
+ else if (cbPixel == 1)
+ {
+ const uint8_t *s = (uint8_t *)pvBits;
+ int i;
+ for (i = 0; i < w * h; ++i)
+ {
+ const uint8_t u8 = *s++;
+ uint32_t u32 = u8 * 0x10000 + u8 * 0x100 + u8;
+ uint32_t u = u32 & u32Mask;
+ fwrite(&u, 1, 4, f);
+ }
+ }
+
+ fclose(f);
+
+ return VINF_SUCCESS;
+}
+
+void vmsvga3dInfoSurfaceToBitmap(PCDBGFINFOHLP pHlp, PVMSVGA3DSURFACE pSurface,
+ const char *pszPath, const char *pszNamePrefix, const char *pszNameSuffix)
+{
+ static volatile uint32_t sSeq = 0;
+ const uint32_t u32Seq = ASMAtomicIncU32(&sSeq);
+
+ for (uint32_t i = 0; i < pSurface->cLevels; ++i)
+ {
+ if (!pSurface->paMipmapLevels[i].pSurfaceData)
+ continue;
+
+ char szFilepath[4096];
+ RTStrPrintf(szFilepath, sizeof(szFilepath),
+ "%s" RTPATH_SLASH_STR "%s-%u-sid%u-%u%s.bmp",
+ pszPath, pszNamePrefix, u32Seq, pSurface->id, i, pszNameSuffix);
+
+ const uint32_t cbPixel = vmsvga3dSurfaceFormatSize(pSurface->format, NULL, NULL);
+ int rc = vmsvga3dInfoBmpWrite(szFilepath,
+ pSurface->paMipmapLevels[i].pSurfaceData,
+ pSurface->paMipmapLevels[i].mipmapSize.width,
+ pSurface->paMipmapLevels[i].mipmapSize.height,
+ cbPixel, 0xFFFFFFFF);
+ if (RT_SUCCESS(rc))
+ {
+ Log(("Bitmap: %s\n", szFilepath));
+ if (pHlp)
+ pHlp->pfnPrintf(pHlp, "Bitmap: %s\n", szFilepath);
+ }
+ else
+ {
+ Log(("Bitmap: %s %Rrc\n", szFilepath, rc));
+ if (pHlp)
+ pHlp->pfnPrintf(pHlp, "Bitmap: %s %Rrc\n", szFilepath, rc);
+ }
+ }
+
+#if 0
+ /* Alpha channel alone. */
+ RTStrPrintf(szFilepath, sizeof(szFilepath),
+ "%s\\%s-%u-sid%u%s-a.bmp",
+ pszPath, pszNamePrefix, u32Seq, pSurface->id, pszNameSuffix);
+ vmsvga3dInfoBmpWrite(szFilepath,
+ pSurface->paMipmapLevels[0].pSurfaceData,
+ pSurface->paMipmapLevels[0].mipmapSize.width,
+ pSurface->paMipmapLevels[0].mipmapSize.height,
+ cbPixel, 0xFF000000);
+#endif
+}
+
+static void vmsvga3dInfoSurfaceWorkerOne(PCDBGFINFOHLP pHlp, PVMSVGA3DSURFACE pSurface,
+ bool fVerbose, uint32_t cxAscii, bool fInvY)
+{
+ char szTmp[128];
+
+ pHlp->pfnPrintf(pHlp, "*** VMSVGA 3d surface %#x (%d)%s ***\n", pSurface->id, pSurface->id, pSurface->fDirty ? " - dirty" : "");
+ pHlp->pfnPrintf(pHlp, "idAssociatedContext: %#x\n", pSurface->idAssociatedContext);
+ pHlp->pfnPrintf(pHlp, "Format: %s\n",
+ vmsvgaFormatEnumValueEx(szTmp, sizeof(szTmp), NULL, (int)pSurface->format, false, &g_SVGA3dSurfaceFormat2String));
+ pHlp->pfnPrintf(pHlp, "Flags: 0x%RX64", pSurface->f.surfaceFlags);
+ vmsvga3dInfoU32Flags(pHlp, pSurface->f.s.surface1Flags, "SVGA3D_SURFACE_", g_aSvga3DSurfaceFlags, RT_ELEMENTS(g_aSvga3DSurfaceFlags));
+ pHlp->pfnPrintf(pHlp, "\n");
+ if (pSurface->cFaces != 0)
+ pHlp->pfnPrintf(pHlp, "Faces: %u\n", pSurface->cFaces);
+ if (pSurface->cLevels != 0)
+ pHlp->pfnPrintf(pHlp, "Mipmap levels: %u\n", pSurface->cLevels);
+ for (uint32_t iFace = 0; iFace < pSurface->cFaces; iFace++)
+ {
+ uint32_t iMipmap = iFace * pSurface->cLevels;
+ for (uint32_t iLevel = 0; iLevel < pSurface->cLevels; iLevel++, iMipmap++)
+ {
+ pHlp->pfnPrintf(pHlp, "Face #%u, mipmap #%u[%u]:%s cx=%u, cy=%u, cz=%u, cbSurface=%#x, cbPitch=%#x",
+ iFace, iLevel, iMipmap, iMipmap < 10 ? " " : "",
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.width,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.height,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.depth,
+ pSurface->paMipmapLevels[iMipmap].cbSurface,
+ pSurface->paMipmapLevels[iMipmap].cbSurfacePitch);
+ if (pSurface->paMipmapLevels[iMipmap].pSurfaceData)
+ pHlp->pfnPrintf(pHlp, " pvData=%p", pSurface->paMipmapLevels[iMipmap].pSurfaceData);
+ if (pSurface->paMipmapLevels[iMipmap].fDirty)
+ pHlp->pfnPrintf(pHlp, " dirty");
+ pHlp->pfnPrintf(pHlp, "\n");
+ }
+ }
+
+ pHlp->pfnPrintf(pHlp, "cbBlock: %u (%#x)\n", pSurface->cbBlock, pSurface->cbBlock);
+ pHlp->pfnPrintf(pHlp, "Multi-sample count: %u\n", pSurface->multiSampleCount);
+ pHlp->pfnPrintf(pHlp, "Autogen filter: %s\n",
+ vmsvgaFormatEnumValue(szTmp, sizeof(szTmp), NULL, pSurface->autogenFilter,
+ "SVGA3D_TEX_FILTER_", g_apszTexureFilters, RT_ELEMENTS(g_apszTexureFilters)));
+
+#ifdef VMSVGA3D_DIRECT3D
+ pHlp->pfnPrintf(pHlp, "formatD3D: %s\n",
+ vmsvgaFormatEnumValueEx(szTmp, sizeof(szTmp), NULL, pSurface->formatD3D, true, &g_D3DFormat2String));
+ pHlp->pfnPrintf(pHlp, "fUsageD3D: %#x", pSurface->fUsageD3D);
+ vmsvga3dInfoU32Flags(pHlp, pSurface->fUsageD3D, "D3DUSAGE_", g_aD3DUsageFlags, RT_ELEMENTS(g_aD3DUsageFlags));
+ pHlp->pfnPrintf(pHlp, "\n");
+ pHlp->pfnPrintf(pHlp, "multiSampleTypeD3D: %s\n",
+ vmsvgaFormatEnumValueEx(szTmp, sizeof(szTmp), NULL, pSurface->multiSampleTypeD3D,
+ true, &g_D3DMultiSampleType2String));
+ if (pSurface->hSharedObject != NULL)
+ pHlp->pfnPrintf(pHlp, "hSharedObject: %p\n", pSurface->hSharedObject);
+ if (pSurface->pQuery)
+ pHlp->pfnPrintf(pHlp, "pQuery: %p\n", pSurface->pQuery);
+ if (pSurface->u.pSurface)
+ pHlp->pfnPrintf(pHlp, "u.pXxxx: %p\n", pSurface->u.pSurface);
+ if (pSurface->bounce.pTexture)
+ pHlp->pfnPrintf(pHlp, "bounce.pXxxx: %p\n", pSurface->bounce.pTexture);
+ RTAvlU32DoWithAll(&pSurface->pSharedObjectTree, true /*fFromLeft*/, vmsvga3dInfoSharedObjectCallback, (void *)pHlp);
+ pHlp->pfnPrintf(pHlp, "fStencilAsTexture: %RTbool\n", pSurface->fStencilAsTexture);
+
+#elif defined(VMSVGA3D_OPENGL)
+ /** @todo */
+#else
+# error "Build config error."
+#endif
+
+ if (fVerbose)
+ for (uint32_t iFace = 0; iFace < pSurface->cFaces; iFace++)
+ {
+ uint32_t iMipmap = iFace * pSurface->cLevels;
+ for (uint32_t iLevel = 0; iLevel < pSurface->cLevels; iLevel++, iMipmap++)
+ if (pSurface->paMipmapLevels[iMipmap].pSurfaceData)
+ {
+ if (ASMMemIsZero(pSurface->paMipmapLevels[iMipmap].pSurfaceData,
+ pSurface->paMipmapLevels[iMipmap].cbSurface))
+ pHlp->pfnPrintf(pHlp, "--- Face #%u, mipmap #%u[%u]: all zeros ---\n", iFace, iLevel, iMipmap);
+ else
+ {
+ pHlp->pfnPrintf(pHlp, "--- Face #%u, mipmap #%u[%u]: cx=%u, cy=%u, cz=%u ---\n",
+ iFace, iLevel, iMipmap,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.width,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.height,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.depth);
+ vmsvga3dAsciiPrint(vmsvga3dAsciiPrintlnInfo, (void *)pHlp,
+ pSurface->paMipmapLevels[iMipmap].pSurfaceData,
+ pSurface->paMipmapLevels[iMipmap].cbSurface,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.width,
+ pSurface->paMipmapLevels[iMipmap].mipmapSize.height,
+ pSurface->paMipmapLevels[iMipmap].cbSurfacePitch,
+ pSurface->format,
+ fInvY,
+ cxAscii, cxAscii * 3 / 4);
+ }
+ }
+ }
+}
+
+
+void vmsvga3dInfoSurfaceWorker(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PCDBGFINFOHLP pHlp, uint32_t sid,
+ bool fVerbose, uint32_t cxAscii, bool fInvY, const char *pszBitmapPath)
+{
+ /* Warning! This code is currently racing papSurfaces reallocation! */
+ /* Warning! This code is currently racing papSurfaces reallocation! */
+ /* Warning! This code is currently racing papSurfaces reallocation! */
+ VMSVGA3DSTATE volatile *pState = pThisCC->svga.p3dState;
+ if (pState)
+ {
+ /*
+ * Deal with a specific request first.
+ */
+ if (sid != UINT32_MAX)
+ {
+ if (sid < pState->cSurfaces)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ if (pSurface && pSurface->id == sid)
+ {
+ if (fVerbose)
+ vmsvgaR33dSurfaceUpdateHeapBuffersOnFifoThread(pDevIns, pThis, pThisCC, sid);
+ vmsvga3dInfoSurfaceWorkerOne(pHlp, pSurface, fVerbose, cxAscii, fInvY);
+ if (pszBitmapPath && *pszBitmapPath)
+ vmsvga3dInfoSurfaceToBitmap(pHlp, pSurface, pszBitmapPath, "info", "");
+ return;
+ }
+ }
+ pHlp->pfnPrintf(pHlp, "Surface ID %#x not found.\n", sid);
+ }
+ else
+ {
+ /*
+ * Dump all.
+ */
+ if (fVerbose)
+ vmsvgaR33dSurfaceUpdateHeapBuffersOnFifoThread(pDevIns, pThis, pThisCC, UINT32_MAX);
+ uint32_t cSurfaces = pState->cSurfaces;
+ pHlp->pfnPrintf(pHlp, "cSurfaces=%d\n", cSurfaces);
+ for (sid = 0; sid < cSurfaces; sid++)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ if (pSurface && pSurface->id == sid)
+ {
+ pHlp->pfnPrintf(pHlp, "\n");
+ vmsvga3dInfoSurfaceWorkerOne(pHlp, pSurface, fVerbose, cxAscii, fInvY);
+ }
+ }
+ }
+ }
+
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h
new file mode 100644
index 00000000..0826a967
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h
@@ -0,0 +1,1446 @@
+/* $Id: DevVGA-SVGA3d-internal.h $ */
+/** @file
+ * DevVMWare - VMWare SVGA device - 3D part, internal header.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_internal_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_internal_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/*
+ * Assert sane compilation environment.
+ */
+#ifndef IN_RING3
+# error "VMSVGA3D_INCL_INTERNALS is only for ring-3 code"
+#endif
+#ifdef VMSVGA3D_OPENGL
+# if defined(VMSVGA3D_DIRECT3D)
+# error "Both VMSVGA3D_DIRECT3D and VMSVGA3D_OPENGL cannot be defined at the same time."
+# endif
+#elif !defined(VMSVGA3D_DIRECT3D)
+# error "Either VMSVGA3D_OPENGL or VMSVGA3D_DIRECT3D must be defined."
+#endif
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#include "DevVGA-SVGA3d.h"
+
+#if defined(VMSVGA3D_DYNAMIC_LOAD) && defined(VMSVGA3D_OPENGL)
+# include "DevVGA-SVGA3d-glLdr.h"
+#endif
+
+#ifdef RT_OS_WINDOWS
+# include <iprt/win/windows.h>
+# ifdef VMSVGA3D_DIRECT3D
+# include <d3d9.h>
+# include <iprt/avl.h>
+# else
+# include <GL/gl.h>
+# include "vmsvga_glext/wglext.h"
+# endif
+
+#elif defined(RT_OS_DARWIN)
+# include <OpenGL/OpenGL.h>
+# include <OpenGL/gl3.h>
+# include <OpenGL/gl3ext.h>
+# define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
+# include <OpenGL/gl.h>
+# include "DevVGA-SVGA3d-cocoa.h"
+/* work around conflicting definition of GLhandleARB in VMware's glext.h */
+//#define GL_ARB_shader_objects
+// HACK
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+# if 0
+# define GL_RGBA_S3TC 0x83A2
+# define GL_ALPHA8_EXT 0x803c
+# define GL_LUMINANCE8_EXT 0x8040
+# define GL_LUMINANCE16_EXT 0x8042
+# define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+# define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+# define GL_INT_2_10_10_10_REV 0x8D9F
+# endif
+
+#else
+# include <X11/Xlib.h>
+# include <X11/Xatom.h>
+# include <GL/gl.h>
+# include <GL/glx.h>
+# define VBOX_VMSVGA3D_GL_HACK_LEVEL 0x103
+#endif
+
+#ifdef VMSVGA3D_OPENGL
+# ifndef __glext_h__
+# undef GL_GLEXT_VERSION /** @todo r=bird: We include GL/glext.h above which also defines this and we'll end up with
+ * a clash if the system one does not use the same header guard as ours. So, I'm wondering
+ * whether this include is really needed, and if it is, whether we should use a unique header
+ * guard macro on it, so we'll have the same problems everywhere... */
+# endif
+# include "vmsvga_glext/glext.h"
+# include "shaderlib/shaderlib.h"
+#endif
+
+#ifdef VMSVGA3D_DX
+#include "DevVGA-SVGA3d-dx-shader.h"
+#endif
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+#ifdef VMSVGA3D_OPENGL
+/** OpenGL: Create a dedicated context for handling surfaces in, thus
+ * avoiding orphaned surfaces after context destruction.
+ *
+ * This cures, for instance, an assertion on fedora 21 that happens in
+ * vmsvga3dSurfaceStretchBlt if the login screen and the desktop has different
+ * sizes. The context of the login screen seems to have just been destroyed
+ * earlier and I believe the driver/X/whoever is attemting to strech the old
+ * screen content onto the new sized screen.
+ *
+ * @remarks This probably comes at a slight preformance expense, as we currently
+ * switches context when setting up the surface the first time. Not sure
+ * if we really need to, but as this is an experiment, I'm playing it safe.
+ * @remarks The define has been made default, thus should no longer be used.
+ */
+# define VMSVGA3D_OGL_WITH_SHARED_CTX
+/** Fake surface ID for the shared context. */
+# define VMSVGA3D_SHARED_CTX_ID UINT32_C(0xffffeeee)
+
+/** @def VBOX_VMSVGA3D_GL_HACK_LEVEL
+ * Turns out that on Linux gl.h may often define the first 2-4 OpenGL versions
+ * worth of extensions, but missing out on a function pointer of fifteen. This
+ * causes headache for us when we use the function pointers below. This hack
+ * changes the code to call the known problematic functions directly.
+ * The value is ((x)<<16 | (y)) where x and y are taken from the GL_VERSION_x_y.
+ */
+# ifndef VBOX_VMSVGA3D_GL_HACK_LEVEL
+# define VBOX_VMSVGA3D_GL_HACK_LEVEL 0
+# endif
+
+/** Invalid OpenGL ID. */
+# define OPENGL_INVALID_ID 0
+
+# define VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState) \
+ do { (pState)->idActiveContext = OPENGL_INVALID_ID; } while (0)
+
+/** @def VMSVGA3D_SET_CURRENT_CONTEXT
+ * Makes sure the @a pContext is the active OpenGL context.
+ * @parm pState The VMSVGA3d state.
+ * @parm pContext The new context.
+ */
+# ifdef RT_OS_WINDOWS
+# define VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext) \
+ do { \
+ if ((pState)->idActiveContext != (pContext)->id) \
+ { \
+ BOOL fMakeCurrentRc = wglMakeCurrent((pContext)->hdc, (pContext)->hglrc); \
+ Assert(fMakeCurrentRc == TRUE); RT_NOREF_PV(fMakeCurrentRc); \
+ LogFlowFunc(("Changing context: %#x -> %#x\n", (pState)->idActiveContext, (pContext)->id)); \
+ (pState)->idActiveContext = (pContext)->id; \
+ } \
+ } while (0)
+
+# elif defined(RT_OS_DARWIN)
+# define VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext) \
+ do { \
+ if ((pState)->idActiveContext != (pContext)->id) \
+ { \
+ vmsvga3dCocoaViewMakeCurrentContext((pContext)->cocoaView, (pContext)->cocoaContext); \
+ LogFlowFunc(("Changing context: %#x -> %#x\n", (pState)->idActiveContext, (pContext)->id)); \
+ (pState)->idActiveContext = (pContext)->id; \
+ } \
+ } while (0)
+# else
+# define VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext) \
+ do { \
+ if ((pState)->idActiveContext != (pContext)->id) \
+ { \
+ Bool fMakeCurrentRc = glXMakeCurrent((pState)->display, \
+ (pContext)->window, \
+ (pContext)->glxContext); \
+ Assert(fMakeCurrentRc == True); RT_NOREF_PV(fMakeCurrentRc); \
+ LogFlowFunc(("Changing context: %#x -> %#x\n", (pState)->idActiveContext, (pContext)->id)); \
+ (pState)->idActiveContext = (pContext)->id; \
+ } \
+ } while (0)
+# endif
+
+/** @def VMSVGA3D_CLEAR_GL_ERRORS
+ * Clears all pending OpenGL errors.
+ *
+ * If I understood this correctly, OpenGL maintains a bitmask internally and
+ * glGetError gets the next bit (clearing it) from the bitmap and translates it
+ * into a GL_XXX constant value which it then returns. A single OpenGL call can
+ * set more than one bit, and they stick around across calls, from what I
+ * understand.
+ *
+ * So in order to be able to use glGetError to check whether a function
+ * succeeded, we need to call glGetError until all error bits have been cleared.
+ * This macro does that (in all types of builds).
+ *
+ * @sa VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_IS_SUCCESS
+ */
+# define VMSVGA3D_CLEAR_GL_ERRORS() \
+ do { \
+ if (RT_UNLIKELY(glGetError() != GL_NO_ERROR)) /* predict no errors pending */ \
+ { \
+ uint32_t iErrorClearingLoopsLeft = 64; \
+ while (glGetError() != GL_NO_ERROR && iErrorClearingLoopsLeft > 0) \
+ iErrorClearingLoopsLeft--; \
+ } \
+ } while (0)
+
+/** @def VMSVGA3D_GET_LAST_GL_ERROR
+ * Gets the last OpenGL error, stores it in a_pContext->lastError and returns
+ * it.
+ *
+ * @returns Same as glGetError.
+ * @param a_pContext The context to store the error in.
+ *
+ * @sa VMSVGA3D_GL_IS_SUCCESS, VMSVGA3D_GL_COMPLAIN
+ */
+# define VMSVGA3D_GET_GL_ERROR(a_pContext) ((a_pContext)->lastError = glGetError())
+
+/** @def VMSVGA3D_GL_SUCCESS
+ * Checks whether VMSVGA3D_GET_LAST_GL_ERROR() return GL_NO_ERROR.
+ *
+ * Will call glGetError() and store the result in a_pContext->lastError.
+ * Will predict GL_NO_ERROR outcome.
+ *
+ * @returns True on success, false on error.
+ * @parm a_pContext The context to store the error in.
+ *
+ * @sa VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_COMPLAIN
+ */
+# define VMSVGA3D_GL_IS_SUCCESS(a_pContext) RT_LIKELY((((a_pContext)->lastError = glGetError()) == GL_NO_ERROR))
+
+/** @def VMSVGA3D_GL_COMPLAIN
+ * Complains about one or more OpenGL errors (first in a_pContext->lastError).
+ *
+ * Strict builds will trigger an assertion, while other builds will put the
+ * first few occurences in the release log.
+ *
+ * All GL errors will be cleared after invocation. Assumes lastError
+ * is an error, will not check for GL_NO_ERROR.
+ *
+ * @param a_pState The 3D state structure.
+ * @param a_pContext The context that holds the first error.
+ * @param a_LogRelDetails Argument list for LogRel or similar that describes
+ * the operation in greater detail.
+ *
+ * @sa VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_IS_SUCCESS
+ */
+# ifdef VBOX_STRICT
+# define VMSVGA3D_GL_COMPLAIN(a_pState, a_pContext, a_LogRelDetails) \
+ do { \
+ AssertMsg((a_pState)->idActiveContext == (a_pContext)->id, \
+ ("idActiveContext=%#x id=%x\n", (a_pState)->idActiveContext, (a_pContext)->id)); \
+ RTAssertMsg2Weak a_LogRelDetails; \
+ GLenum iNextError; \
+ while ((iNextError = glGetError()) != GL_NO_ERROR) \
+ RTAssertMsg2Weak("next error: %#x\n", iNextError); \
+ AssertMsgFailed(("first error: %#x (idActiveContext=%#x)\n", (a_pContext)->lastError, (a_pContext)->id)); \
+ } while (0)
+# else
+# define VMSVGA3D_GL_COMPLAIN(a_pState, a_pContext, a_LogRelDetails) \
+ do { \
+ LogRelMax(32, ("VMSVGA3d: OpenGL error %#x (idActiveContext=%#x) on line %u ", (a_pContext)->lastError, (a_pContext)->id, __LINE__)); \
+ GLenum iNextError; \
+ while ((iNextError = glGetError()) != GL_NO_ERROR) \
+ LogRelMax(32, (" - also error %#x ", iNextError)); \
+ LogRelMax(32, a_LogRelDetails); \
+ } while (0)
+# endif
+
+/** @def VMSVGA3D_GL_GET_AND_COMPLAIN
+ * Combination of VMSVGA3D_GET_GL_ERROR and VMSVGA3D_GL_COMPLAIN, assuming that
+ * there is a pending error.
+ *
+ * @param a_pState The 3D state structure.
+ * @param a_pContext The context that holds the first error.
+ * @param a_LogRelDetails Argument list for LogRel or similar that describes
+ * the operation in greater detail.
+ *
+ * @sa VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_IS_SUCCESS, VMSVGA3D_GL_COMPLAIN
+ */
+# define VMSVGA3D_GL_GET_AND_COMPLAIN(a_pState, a_pContext, a_LogRelDetails) \
+ do { \
+ VMSVGA3D_GET_GL_ERROR(a_pContext); \
+ VMSVGA3D_GL_COMPLAIN(a_pState, a_pContext, a_LogRelDetails); \
+ } while (0)
+
+/** @def VMSVGA3D_GL_ASSERT_SUCCESS
+ * Asserts that VMSVGA3D_GL_IS_SUCCESS is true, complains if not.
+ *
+ * Uses VMSVGA3D_GL_COMPLAIN for complaining, so check it out wrt to release
+ * logging in non-strict builds.
+ *
+ * @param a_pState The 3D state structure.
+ * @param a_pContext The context that holds the first error.
+ * @param a_LogRelDetails Argument list for LogRel or similar that describes
+ * the operation in greater detail.
+ *
+ * @sa VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_IS_SUCCESS, VMSVGA3D_GL_COMPLAIN
+ */
+# define VMSVGA3D_GL_ASSERT_SUCCESS(a_pState, a_pContext, a_LogRelDetails) \
+ if (VMSVGA3D_GL_IS_SUCCESS(a_pContext)) \
+ { /* likely */ } \
+ else do { \
+ VMSVGA3D_GL_COMPLAIN(a_pState, a_pContext, a_LogRelDetails); \
+ } while (0)
+
+/** @def VMSVGA3D_ASSERT_GL_CALL_EX
+ * Executes the specified OpenGL API call and asserts that it succeeded, variant
+ * with extra logging flexibility.
+ *
+ * ASSUMES no GL errors pending prior to invocation - caller should use
+ * VMSVGA3D_CLEAR_GL_ERRORS if uncertain.
+ *
+ * Uses VMSVGA3D_GL_COMPLAIN for complaining, so check it out wrt to release
+ * logging in non-strict builds.
+ *
+ * @param a_GlCall Expression making an OpenGL call.
+ * @param a_pState The 3D state structure.
+ * @param a_pContext The context that holds the first error.
+ * @param a_LogRelDetails Argument list for LogRel or similar that describes
+ * the operation in greater detail.
+ *
+ * @sa VMSVGA3D_ASSERT_GL_CALL, VMSVGA3D_GL_ASSERT_SUCCESS,
+ * VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_IS_SUCCESS, VMSVGA3D_GL_COMPLAIN
+ */
+# define VMSVGA3D_ASSERT_GL_CALL_EX(a_GlCall, a_pState, a_pContext, a_LogRelDetails) \
+ do { \
+ (a_GlCall); \
+ VMSVGA3D_GL_ASSERT_SUCCESS(a_pState, a_pContext, a_LogRelDetails); \
+ } while (0)
+
+/** @def VMSVGA3D_ASSERT_GL_CALL
+ * Executes the specified OpenGL API call and asserts that it succeeded.
+ *
+ * ASSUMES no GL errors pending prior to invocation - caller should use
+ * VMSVGA3D_CLEAR_GL_ERRORS if uncertain.
+ *
+ * Uses VMSVGA3D_GL_COMPLAIN for complaining, so check it out wrt to release
+ * logging in non-strict builds.
+ *
+ * @param a_GlCall Expression making an OpenGL call.
+ * @param a_pState The 3D state structure.
+ * @param a_pContext The context that holds the first error.
+ *
+ * @sa VMSVGA3D_ASSERT_GL_CALL_EX, VMSVGA3D_GL_ASSERT_SUCCESS,
+ * VMSVGA3D_GET_GL_ERROR, VMSVGA3D_GL_IS_SUCCESS, VMSVGA3D_GL_COMPLAIN
+ */
+# define VMSVGA3D_ASSERT_GL_CALL(a_GlCall, a_pState, a_pContext) \
+ VMSVGA3D_ASSERT_GL_CALL_EX(a_GlCall, a_pState, a_pContext, ("%s\n", #a_GlCall))
+
+
+/** @def VMSVGA3D_CHECK_LAST_ERROR
+ * Checks that the last OpenGL error code indicates success.
+ *
+ * Will assert and return VERR_INTERNAL_ERROR in strict builds, in other
+ * builds it will do nothing and is a NOOP.
+ *
+ * @parm pState The VMSVGA3d state.
+ * @parm pContext The context.
+ *
+ * @todo Replace with proper error handling, it's crazy to return
+ * VERR_INTERNAL_ERROR in strict builds and just barge on ahead in
+ * release builds.
+ */
+/** @todo Rename to VMSVGA3D_CHECK_LAST_ERROR_RETURN */
+# ifdef VBOX_STRICT
+# define VMSVGA3D_CHECK_LAST_ERROR(pState, pContext) do { \
+ Assert((pState)->idActiveContext == (pContext)->id); \
+ (pContext)->lastError = glGetError(); \
+ AssertMsgReturn((pContext)->lastError == GL_NO_ERROR, \
+ ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, (pContext)->lastError), \
+ VERR_INTERNAL_ERROR); \
+ } while (0)
+# else
+# define VMSVGA3D_CHECK_LAST_ERROR(pState, pContext) do { } while (0)
+# endif
+
+/** @def VMSVGA3D_CHECK_LAST_ERROR_WARN
+ * Checks that the last OpenGL error code indicates success.
+ *
+ * Will assert in strict builds, otherwise it's a NOOP.
+ *
+ * @parm pState The VMSVGA3d state.
+ * @parm pContext The new context.
+ */
+# ifdef VBOX_STRICT
+# define VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext) do { \
+ Assert((pState)->idActiveContext == (pContext)->id); \
+ (pContext)->lastError = glGetError(); \
+ AssertMsg((pContext)->lastError == GL_NO_ERROR, ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, (pContext)->lastError)); \
+ } while (0)
+# else
+# define VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext) do { } while (0)
+# endif
+
+#endif /* VMSVGA3D_OPENGL */
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+/**
+ * Mipmap level.
+ */
+typedef struct VMSVGA3DMIPMAPLEVEL
+{
+ /** The mipmap size: width, height and depth. */
+ SVGA3dSize mipmapSize;
+ /** Width in blocks: (width + cxBlock - 1) / cxBlock. SSM: not saved, recalculated on load. */
+ uint32_t cBlocksX;
+ /** Height in blocks: (height + cyBlock - 1) / cyBlock. SSM: not saved, recalculated on load. */
+ uint32_t cBlocksY;
+ /** Number of blocks: cBlocksX * cBlocksY * mipmapSize.depth. SSM: not saved, recalculated on load. */
+ uint32_t cBlocks;
+ /** The scanline/pitch size in bytes: at least cBlocksX * cbBlock. */
+ uint32_t cbSurfacePitch;
+ /** The size (in bytes) of the mipmap plane: cbSurfacePitch * cBlocksY */
+ uint32_t cbSurfacePlane;
+ /** The size (in bytes) of the mipmap data when using the format the surface was
+ * defined with: cbSurfacePlane * mipmapSize.z */
+ uint32_t cbSurface;
+ /** Pointer to the mipmap bytes (cbSurface). Often NULL. If the surface has
+ * been realized in hardware, this may be outdated. */
+ void *pSurfaceData;
+ /** Set if pvSurfaceData contains data not realized in hardware or pushed to the
+ * hardware surface yet. */
+ bool fDirty;
+} VMSVGA3DMIPMAPLEVEL;
+/** Pointer to a mipmap level. */
+typedef VMSVGA3DMIPMAPLEVEL *PVMSVGA3DMIPMAPLEVEL;
+
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGA3DMIPMAPLEVEL structure.
+ */
+static SSMFIELD const g_aVMSVGA3DMIPMAPLEVELFields[] =
+{
+ SSMFIELD_ENTRY( VMSVGA3DMIPMAPLEVEL, mipmapSize),
+ SSMFIELD_ENTRY( VMSVGA3DMIPMAPLEVEL, cbSurface),
+ SSMFIELD_ENTRY( VMSVGA3DMIPMAPLEVEL, cbSurfacePitch),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DMIPMAPLEVEL, pSurfaceData),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DMIPMAPLEVEL, fDirty),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif
+
+typedef struct VMSVGATRANSFORMSTATE
+{
+ bool fValid;
+ float matrix[16];
+} VMSVGATRANSFORMSTATE;
+typedef VMSVGATRANSFORMSTATE *PVMSVGATRANSFORMSTATE;
+
+typedef struct VMSVGAMATERIALSTATE
+{
+ bool fValid;
+ SVGA3dMaterial material;
+} VMSVGAMATERIALSTATE;
+typedef VMSVGAMATERIALSTATE *PVMSVGAMATERIALSTATE;
+
+typedef struct VMSVGACLIPPLANESTATE
+{
+ bool fValid;
+ float plane[4];
+} VMSVGACLIPPLANESTATE;
+typedef VMSVGACLIPPLANESTATE *PVMSVGACLIPPLANESTATE;
+
+typedef struct VMSVGALIGHTSTATE
+{
+ bool fEnabled;
+ bool fValidData;
+ SVGA3dLightData data;
+} VMSVGALIGHTSTATE;
+typedef VMSVGALIGHTSTATE *PVMSVGALIGHTSTATE;
+
+typedef struct VMSVGASHADERCONST
+{
+ bool fValid;
+ SVGA3dShaderConstType ctype;
+ uint32_t value[4];
+} VMSVGASHADERCONST;
+typedef VMSVGASHADERCONST *PVMSVGASHADERCONST;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGASHADERCONST structure.
+ */
+static SSMFIELD const g_aVMSVGASHADERCONSTFields[] =
+{
+ SSMFIELD_ENTRY( VMSVGASHADERCONST, fValid),
+ SSMFIELD_ENTRY( VMSVGASHADERCONST, ctype),
+ SSMFIELD_ENTRY( VMSVGASHADERCONST, value),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif
+
+#ifdef VMSVGA3D_DIRECT3D
+
+/* What kind of Direct3D resource has been created for the VMSVGA3D surface. */
+typedef enum VMSVGA3DD3DRESTYPE
+{
+ VMSVGA3D_D3DRESTYPE_NONE = 0,
+ VMSVGA3D_D3DRESTYPE_SURFACE = 1,
+ VMSVGA3D_D3DRESTYPE_TEXTURE = 2,
+ VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE = 3,
+ VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE = 4,
+ VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER = 5,
+ VMSVGA3D_D3DRESTYPE_INDEX_BUFFER = 6
+} VMSVGA3DD3DRESTYPE;
+
+/**
+ *
+ */
+typedef struct
+{
+ /** Key is context id. */
+ AVLU32NODECORE Core;
+ union
+ {
+ IDirect3DTexture9 *pTexture;
+ IDirect3DCubeTexture9 *pCubeTexture;
+ IDirect3DVolumeTexture9 *pVolumeTexture;
+ } u;
+} VMSVGA3DSHAREDSURFACE;
+typedef VMSVGA3DSHAREDSURFACE *PVMSVGA3DSHAREDSURFACE;
+#endif /* VMSVGA3D_DIRECT3D */
+
+#ifdef VMSVGA3D_OPENGL
+/* What kind of OpenGL resource has been created for the VMSVGA3D surface. */
+typedef enum VMSVGA3DOGLRESTYPE
+{
+ VMSVGA3D_OGLRESTYPE_NONE = 0,
+ VMSVGA3D_OGLRESTYPE_BUFFER = 1,
+ VMSVGA3D_OGLRESTYPE_TEXTURE = 2,
+ VMSVGA3D_OGLRESTYPE_RENDERBUFFER = 3
+} VMSVGA3DOGLRESTYPE;
+#endif
+
+/* The 3D backend surface. The actual structure is 3D API specific. */
+typedef struct VMSVGA3DBACKENDSURFACE *PVMSVGA3DBACKENDSURFACE;
+
+/**
+ * VMSVGA3d surface.
+ */
+typedef struct VMSVGA3DSURFACE
+{
+ PVMSVGA3DBACKENDSURFACE pBackendSurface;
+
+ uint32_t id; /** @todo sid */
+ /* Which context created the corresponding resource.
+ * SVGA_ID_INVALID means that resource has not been created yet.
+ * A resource has been created if VMSVGA3DSURFACE_HAS_HW_SURFACE is true.
+ *
+ */
+ uint32_t idAssociatedContext;
+
+ /** @todo Only numArrayElements field is used currently. The code uses old fields cLevels, etc for anything else. */
+ VMSVGA3D_SURFACE_DESC surfaceDesc;
+
+ union
+ {
+ struct
+ {
+ SVGA3dSurface1Flags surface1Flags;
+ SVGA3dSurface2Flags surface2Flags;
+ } s;
+ SVGA3dSurfaceAllFlags surfaceFlags;
+ } f;
+ SVGA3dSurfaceFormat format;
+#ifdef VMSVGA3D_OPENGL
+ GLint internalFormatGL;
+ GLint formatGL;
+ GLint typeGL;
+ VMSVGA3DOGLRESTYPE enmOGLResType; /* Which resource was created for the surface. */
+ union
+ {
+ GLuint texture;
+ GLuint buffer;
+ GLuint renderbuffer;
+ } oglId;
+ GLenum targetGL; /* GL_TEXTURE_* */
+ GLenum bindingGL; /* GL_TEXTURE_BINDING_* */
+ /* Emulated formats */
+ bool fEmulated; /* Whether the texture format is emulated. */
+ GLuint idEmulated; /* GL name of the intermediate texture. */
+#endif
+ uint32_t cFaces; /* Number of faces: 6 for cubemaps, 1 for everything else. */
+ uint32_t cLevels; /* Number of mipmap levels per face. */
+ PVMSVGA3DMIPMAPLEVEL paMipmapLevels; /* surfaceDesc.numArrayElements * cLevels elements. */
+ uint32_t multiSampleCount;
+ SVGA3dTextureFilter autogenFilter;
+#ifdef VMSVGA3D_DIRECT3D
+ D3DFORMAT formatD3D;
+ DWORD fUsageD3D;
+ D3DMULTISAMPLE_TYPE multiSampleTypeD3D;
+#endif
+
+ uint32_t cbBlock; /* block/pixel size in bytes */
+ /* Dimensions of the surface block, usually 1x1 except for compressed formats. */
+ uint32_t cxBlock; /* Block width in pixels. SSM: not saved, recalculated on load. */
+ uint32_t cyBlock; /* Block height in pixels. SSM: not saved, recalculated on load. */
+#ifdef VMSVGA3D_OPENGL
+ uint32_t cbBlockGL; /* Block size of the OpenGL texture, same as cbBlock for not-emulated formats. */
+#endif
+
+ /* Dirty state; surface was manually updated. */
+ bool fDirty;
+
+#ifdef VMSVGA3D_DIRECT3D
+ /* Handle for shared objects (currently only textures & render targets). */
+ HANDLE hSharedObject;
+ /** Event query inserted after each GPU operation that updates or uses this surface. */
+ IDirect3DQuery9 *pQuery;
+ /** The context id where the query has been created. */
+ uint32_t idQueryContext;
+ /** The type of actually created D3D resource. */
+ VMSVGA3DD3DRESTYPE enmD3DResType;
+ union
+ {
+ IDirect3DSurface9 *pSurface;
+ IDirect3DTexture9 *pTexture;
+ IDirect3DCubeTexture9 *pCubeTexture;
+ IDirect3DVolumeTexture9 *pVolumeTexture;
+ IDirect3DVertexBuffer9 *pVertexBuffer;
+ IDirect3DIndexBuffer9 *pIndexBuffer;
+ } u;
+ union
+ {
+ IDirect3DTexture9 *pTexture;
+ IDirect3DCubeTexture9 *pCubeTexture;
+ IDirect3DVolumeTexture9 *pVolumeTexture;
+ } bounce;
+ /** AVL tree containing VMSVGA3DSHAREDSURFACE structures. */
+ AVLU32TREE pSharedObjectTree;
+ bool fStencilAsTexture;
+ D3DFORMAT d3dfmtRequested;
+ union
+ {
+ IDirect3DTexture9 *pTexture;
+ IDirect3DCubeTexture9 *pCubeTexture;
+ IDirect3DVolumeTexture9 *pVolumeTexture;
+ } emulated;
+#endif
+} VMSVGA3DSURFACE;
+/** Pointer to a 3d surface. */
+typedef VMSVGA3DSURFACE *PVMSVGA3DSURFACE;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGA3DSURFACE structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSURFACEFields[] =
+{
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, id),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, idAssociatedContext),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, f.s.surface1Flags),
+ SSMFIELD_ENTRY_VER( VMSVGA3DSURFACE, f.s.surface2Flags, VGA_SAVEDSTATE_VERSION_VMSVGA_DX_SFLAGS),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, format),
+# ifdef VMSVGA3D_OPENGL
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, internalFormatGL),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, formatGL),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, typeGL),
+# endif
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, cFaces),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, cLevels),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, multiSampleCount),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, autogenFilter),
+ SSMFIELD_ENTRY( VMSVGA3DSURFACE, cbBlock),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif
+
+/** Mask we frequently apply to VMSVGA3DSURFACE::flags for decing what kind
+ * of surface we're dealing. */
+#define VMSVGA3D_SURFACE_HINT_SWITCH_MASK \
+ ( SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER \
+ | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET \
+ | SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_CUBEMAP )
+
+/** @def VMSVGA3DSURFACE_HAS_HW_SURFACE
+ * Checks whether the surface has a host hardware/library surface.
+ * @returns true/false
+ * @param a_pSurface The VMSVGA3d surface.
+ */
+#ifdef VMSVGA3D_DIRECT3D
+# define VMSVGA3DSURFACE_HAS_HW_SURFACE(a_pSurface) ((a_pSurface)->pBackendSurface != NULL || (a_pSurface)->u.pSurface != NULL)
+#else
+# define VMSVGA3DSURFACE_HAS_HW_SURFACE(a_pSurface) ((a_pSurface)->pBackendSurface != NULL || (a_pSurface)->oglId.texture != OPENGL_INVALID_ID)
+#endif
+
+/** @def VMSVGA3DSURFACE_NEEDS_DATA
+ * Checks whether SurfaceDMA transfers must always update pSurfaceData,
+ * even if the surface has a host hardware resource.
+ * @returns true/false
+ * @param a_pSurface The VMSVGA3d surface.
+ */
+#ifdef VMSVGA3D_DIRECT3D
+# define VMSVGA3DSURFACE_NEEDS_DATA(a_pSurface) \
+ ( (a_pSurface)->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER \
+ || (a_pSurface)->enmD3DResType == VMSVGA3D_D3DRESTYPE_INDEX_BUFFER)
+#else
+# define VMSVGA3DSURFACE_NEEDS_DATA(a_pSurface) \
+ ((a_pSurface)->enmOGLResType == VMSVGA3D_OGLRESTYPE_BUFFER)
+#endif
+
+
+typedef struct VMSVGA3DSHADER
+{
+ uint32_t id; /** @todo Rename to shid. */
+ uint32_t cid;
+ SVGA3dShaderType type;
+ uint32_t cbData;
+ void *pShaderProgram;
+ union
+ {
+#ifdef VMSVGA3D_DIRECT3D
+ IDirect3DVertexShader9 *pVertexShader;
+ IDirect3DPixelShader9 *pPixelShader;
+#else
+ void *pVertexShader;
+ void *pPixelShader;
+#endif
+ } u;
+} VMSVGA3DSHADER;
+typedef VMSVGA3DSHADER *PVMSVGA3DSHADER;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGA3DSHADER structure.
+ */
+static SSMFIELD const g_aVMSVGA3DSHADERFields[] =
+{
+ SSMFIELD_ENTRY( VMSVGA3DSHADER, id),
+ SSMFIELD_ENTRY( VMSVGA3DSHADER, cid),
+ SSMFIELD_ENTRY( VMSVGA3DSHADER, type),
+ SSMFIELD_ENTRY( VMSVGA3DSHADER, cbData),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DSHADER, pShaderProgram),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif
+
+/** @name VMSVGA3D_UPDATE_XXX - ...
+ * @{ */
+#define VMSVGA3D_UPDATE_SCISSORRECT RT_BIT_32(0)
+#define VMSVGA3D_UPDATE_ZRANGE RT_BIT_32(1)
+#define VMSVGA3D_UPDATE_VIEWPORT RT_BIT_32(2)
+#define VMSVGA3D_UPDATE_VERTEXSHADER RT_BIT_32(3)
+#define VMSVGA3D_UPDATE_PIXELSHADER RT_BIT_32(4)
+#define VMSVGA3D_UPDATE_TRANSFORM RT_BIT_32(5)
+#define VMSVGA3D_UPDATE_MATERIAL RT_BIT_32(6)
+/** @} */
+
+/* Query states. Mostly used for saved state. */
+typedef enum VMSVGA3DQUERYSTATE
+{
+ VMSVGA3DQUERYSTATE_NULL = 0, /* Not created. */
+ VMSVGA3DQUERYSTATE_SIGNALED = 1, /* Result obtained. The guest may or may not read the result yet. */
+ VMSVGA3DQUERYSTATE_BUILDING = 2, /* In process of collecting data. */
+ VMSVGA3DQUERYSTATE_ISSUED = 3, /* Data collected, but result is not yet obtained. */
+ VMSVGA3DQUERYSTATE_32BIT = 0x7fffffff
+} VMSVGA3DQUERYSTATE;
+AssertCompileSize(VMSVGA3DQUERYSTATE, sizeof(uint32_t));
+
+typedef struct VMSVGA3DQUERY
+{
+#ifdef VMSVGA3D_DIRECT3D
+ IDirect3DQuery9 *pQuery;
+#else /* VMSVGA3D_OPENGL */
+ GLuint idQuery;
+#endif
+ VMSVGA3DQUERYSTATE enmQueryState; /* VMSVGA3DQUERYSTATE_*. State is implicitly _NULL if pQuery is NULL. */
+ uint32_t u32QueryResult; /* Generic result. Enough for all VGPU9 queries. */
+} VMSVGA3DQUERY;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGA3DQUERY structure.
+ */
+static SSMFIELD const g_aVMSVGA3DQUERYFields[] =
+{
+#ifdef VMSVGA3D_DIRECT3D
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DQUERY, pQuery),
+#else /* VMSVGA3D_OPENGL */
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DQUERY, idQuery),
+#endif
+ SSMFIELD_ENTRY( VMSVGA3DQUERY, enmQueryState),
+ SSMFIELD_ENTRY( VMSVGA3DQUERY, u32QueryResult),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif
+
+#ifdef VMSVGA3D_DIRECT3D
+#define VMSVGA3DQUERY_EXISTS(p) ((p)->pQuery && (p)->enmQueryState != VMSVGA3DQUERYSTATE_NULL)
+#else
+#define VMSVGA3DQUERY_EXISTS(p) ((p)->idQuery && (p)->enmQueryState != VMSVGA3DQUERYSTATE_NULL)
+#endif
+
+/**
+ * VMSVGA3d context.
+ */
+typedef struct VMSVGA3DCONTEXT
+{
+ /** @todo Legacy contexts with DX backend. */
+
+ uint32_t id;
+#ifdef RT_OS_WINDOWS
+# ifdef VMSVGA3D_DIRECT3D
+ IDirect3DDevice9Ex *pDevice;
+# else
+ /* Device context of the context window. */
+ HDC hdc;
+ /* OpenGL rendering context handle. */
+ HGLRC hglrc;
+# endif
+ /* Device context window handle. */
+ HWND hwnd;
+#elif defined(RT_OS_DARWIN)
+ /* OpenGL rendering context */
+ NativeNSOpenGLContextRef cocoaContext;
+ NativeNSViewRef cocoaView;
+ bool fOtherProfile;
+#else
+ /** XGL rendering context handle */
+ GLXContext glxContext;
+ /** Device context window handle */
+ Window window;
+#endif
+
+#ifdef VMSVGA3D_OPENGL
+ /* Framebuffer object associated with this context. */
+ GLuint idFramebuffer;
+ /* Read and draw framebuffer objects for various operations. */
+ GLuint idReadFramebuffer;
+ GLuint idDrawFramebuffer;
+ /* Last GL error recorded. */
+ GLenum lastError;
+ void *pShaderContext;
+#endif
+
+ /* Current selected texture surfaces (if any) */
+ uint32_t aSidActiveTextures[SVGA3D_MAX_SAMPLERS];
+ /* Per context pixel and vertex shaders. */
+ uint32_t cPixelShaders;
+ PVMSVGA3DSHADER paPixelShader;
+ uint32_t cVertexShaders;
+ PVMSVGA3DSHADER paVertexShader;
+ /* Keep track of the internal state to be able to recreate the context properly (save/restore, window resize). */
+ struct
+ {
+ /** VMSVGA3D_UPDATE_XXX */
+ uint32_t u32UpdateFlags;
+
+ SVGA3dRenderState aRenderState[SVGA3D_RS_MAX];
+ /* aTextureStates contains both TextureStageStates and SamplerStates, therefore [SVGA3D_MAX_SAMPLERS]. */
+ SVGA3dTextureState aTextureStates[SVGA3D_MAX_SAMPLERS][SVGA3D_TS_MAX];
+ VMSVGATRANSFORMSTATE aTransformState[SVGA3D_TRANSFORM_MAX];
+ VMSVGAMATERIALSTATE aMaterial[SVGA3D_FACE_MAX];
+ /* The aClipPlane array has a wrong (greater) size. Keep it for now because the array is a part of the saved state. */
+ /** @todo Replace SVGA3D_CLIPPLANE_5 with SVGA3D_NUM_CLIPPLANES and increase the saved state version. */
+ VMSVGACLIPPLANESTATE aClipPlane[SVGA3D_CLIPPLANE_5];
+ VMSVGALIGHTSTATE aLightData[SVGA3D_MAX_LIGHTS];
+
+ uint32_t aRenderTargets[SVGA3D_RT_MAX];
+ SVGA3dRect RectScissor;
+ SVGA3dRect RectViewPort;
+ SVGA3dZRange zRange;
+ uint32_t shidPixel;
+ uint32_t shidVertex;
+
+ uint32_t cPixelShaderConst;
+ PVMSVGASHADERCONST paPixelShaderConst;
+ uint32_t cVertexShaderConst;
+ PVMSVGASHADERCONST paVertexShaderConst;
+ } state;
+
+ /* Occlusion query. */
+ VMSVGA3DQUERY occlusion;
+
+#ifdef VMSVGA3D_DIRECT3D
+ /* State which is currently applied to the D3D device. It is recreated as needed and not saved.
+ * The purpose is to remember the currently applied state and do not re-apply it if it has not changed.
+ * Unnecessary state changes are very bad for performance.
+ */
+ struct
+ {
+ /* Vertex declaration. */
+ IDirect3DVertexDeclaration9 *pVertexDecl;
+ uint32_t cVertexElements;
+ D3DVERTEXELEMENT9 aVertexElements[SVGA3D_MAX_VERTEX_ARRAYS + 1];
+ } d3dState;
+#endif
+} VMSVGA3DCONTEXT;
+/** Pointer to a VMSVGA3d context. */
+typedef VMSVGA3DCONTEXT *PVMSVGA3DCONTEXT;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/* Verify that constants did not change for the legacy context saved state data. */
+AssertCompile(SVGA3D_RS_MAX == 99);
+AssertCompile(SVGA3D_TRANSFORM_MAX == 15);
+AssertCompile(SVGA3D_FACE_MAX == 5);
+AssertCompile(SVGA3D_CLIPPLANE_5 == (1 << 5));
+AssertCompile(SVGA3D_MAX_LIGHTS == 32);
+AssertCompile(SVGA3D_RT_MAX == 10);
+
+/**
+ * SSM descriptor table for the VMSVGA3DCONTEXT structure.
+ */
+static SSMFIELD const g_aVMSVGA3DCONTEXTFields[] =
+{
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, id),
+
+# ifdef RT_OS_WINDOWS
+# ifdef VMSVGA3D_DIRECT3D
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DCONTEXT, pDevice),
+# else
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, hdc),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, hglrc),
+# endif
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, hwnd),
+# elif defined(RT_OS_DARWIN)
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, cocoaContext),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, cocoaView),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, fOtherProfile),
+# else
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, glxContext),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, window),
+# endif
+
+#ifdef VMSVGA3D_OPENGL
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, idFramebuffer),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, idReadFramebuffer),
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, idDrawFramebuffer),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, lastError),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DCONTEXT, pShaderContext),
+#endif
+
+ SSMFIELD_ENTRY_IGNORE( VMSVGA3DCONTEXT, aSidActiveTextures),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, cPixelShaders),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DCONTEXT, paPixelShader),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, cVertexShaders),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DCONTEXT, paVertexShader),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.u32UpdateFlags),
+
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.aRenderState),
+ SSMFIELD_ENTRY_OLD( state.aTextureStates,
+ sizeof(SVGA3dTextureState) * /*SVGA3D_MAX_TEXTURE_STAGE=*/ 8 * /*SVGA3D_TS_MAX=*/ 30),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.aTransformState),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.aMaterial),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.aClipPlane),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.aLightData),
+
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.aRenderTargets),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.RectScissor),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.RectViewPort),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.zRange),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.shidPixel),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.shidVertex),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.cPixelShaderConst),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DCONTEXT, state.paPixelShaderConst),
+ SSMFIELD_ENTRY( VMSVGA3DCONTEXT, state.cVertexShaderConst),
+ SSMFIELD_ENTRY_IGN_HCPTR( VMSVGA3DCONTEXT, state.paVertexShaderConst),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif /* VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS */
+
+
+#ifdef VMSVGA3D_DX
+/* The 3D backend DX context. The actual structure is 3D API specific. */
+typedef struct VMSVGA3DBACKENDDXCONTEXT *PVMSVGA3DBACKENDDXCONTEXT;
+
+/**
+ * VMSVGA3D DX context (VGPU10+). DX contexts ids are a separate namespace from legacy context ids.
+ */
+typedef struct VMSVGA3DDXCONTEXT
+{
+ /** The DX context id. */
+ uint32_t cid;
+ /** . */
+ uint32_t u32Reserved;
+ /** . */
+ uint32_t cRenderTargets;
+ /** Backend specific data. */
+ PVMSVGA3DBACKENDDXCONTEXT pBackendDXContext;
+ /** Copy of the guest memory for this context. The guest will be updated on unbind. */
+ SVGADXContextMobFormat svgaDXContext;
+ /* Context-Object Tables bound to this context. */
+ PVMSVGAMOB aCOTMobs[SVGA_COTABLE_MAX];
+ struct
+ {
+ SVGACOTableDXRTViewEntry *paRTView;
+ SVGACOTableDXDSViewEntry *paDSView;
+ SVGACOTableDXSRViewEntry *paSRView;
+ SVGACOTableDXElementLayoutEntry *paElementLayout;
+ SVGACOTableDXBlendStateEntry *paBlendState;
+ SVGACOTableDXDepthStencilEntry *paDepthStencil;
+ SVGACOTableDXRasterizerStateEntry *paRasterizerState;
+ SVGACOTableDXSamplerEntry *paSampler;
+ SVGACOTableDXStreamOutputEntry *paStreamOutput;
+ SVGACOTableDXQueryEntry *paQuery;
+ SVGACOTableDXShaderEntry *paShader;
+ SVGACOTableDXUAViewEntry *paUAView;
+ uint32_t cRTView;
+ uint32_t cDSView;
+ uint32_t cSRView;
+ uint32_t cElementLayout;
+ uint32_t cBlendState;
+ uint32_t cDepthStencil;
+ uint32_t cRasterizerState;
+ uint32_t cSampler;
+ uint32_t cStreamOutput;
+ uint32_t cQuery;
+ uint32_t cShader;
+ uint32_t cUAView;
+ } cot;
+} VMSVGA3DDXCONTEXT;
+/** Pointer to a VMSVGA3D DX context. */
+typedef VMSVGA3DDXCONTEXT *PVMSVGA3DDXCONTEXT;
+#endif /* VMSVGA3D_DX */
+
+
+#ifdef VMSVGA3D_OPENGL
+typedef struct VMSVGA3DFORMATCONVERTER *PVMSVGA3DFORMATCONVERTER;
+#endif
+
+/* The 3D backend. The actual structure is 3D API specific. */
+typedef struct VMSVGA3DBACKEND *PVMSVGA3DBACKEND;
+
+/**
+ * VMSVGA3d state data.
+ *
+ * Allocated on the heap and pointed to by VMSVGAState::p3dState.
+ */
+typedef struct VMSVGA3DSTATE
+{
+ /** Backend specific data. */
+ PVMSVGA3DBACKEND pBackend;
+
+ /** The size of papContexts. */
+ uint32_t cContexts;
+ /** The size of papSurfaces. */
+ uint32_t cSurfaces;
+#ifdef VMSVGA3D_DX
+ /** The size of papDXContexts. */
+ uint32_t cDXContexts;
+ /** Reserved. */
+ uint32_t u32Reserved;
+#endif
+ /** Contexts indexed by ID. Grown as needed. */
+ PVMSVGA3DCONTEXT *papContexts;
+ /** Surfaces indexed by ID. Grown as needed. */
+ PVMSVGA3DSURFACE *papSurfaces;
+#ifdef VMSVGA3D_DX
+ /** DX contexts indexed by ID. Grown as needed. */
+ PVMSVGA3DDXCONTEXT *papDXContexts;
+#endif
+
+#ifdef RT_OS_WINDOWS
+# ifdef VMSVGA3D_DIRECT3D
+ IDirect3D9Ex *pD3D9;
+ D3DCAPS9 caps;
+ bool fSupportedSurfaceINTZ;
+ bool fSupportedSurfaceNULL;
+ bool fSupportedFormatUYVY : 1;
+ bool fSupportedFormatYUY2 : 1;
+ bool fSupportedFormatA8B8G8R8 : 1;
+# endif
+ /** Window Thread. */
+ R3PTRTYPE(RTTHREAD) pWindowThread;
+ DWORD idWindowThread;
+ HMODULE hInstance;
+ /** Window request semaphore. */
+ RTSEMEVENT WndRequestSem;
+#elif defined(RT_OS_DARWIN)
+#else
+ /* The X display */
+ Display *display;
+ R3PTRTYPE(RTTHREAD) pWindowThread;
+ bool bTerminate;
+#endif
+
+#ifdef VMSVGA3D_OPENGL
+ float rsGLVersion;
+ /* Current active context. */
+ uint32_t idActiveContext;
+
+ struct
+ {
+ PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
+ PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
+ PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
+ PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
+ PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
+ PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
+ PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
+ PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
+ PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
+ PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
+ PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
+ PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
+ PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
+ PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
+ PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
+ PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
+ PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
+ PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
+ PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
+ PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
+ PFNGLPOINTPARAMETERFPROC glPointParameterf;
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL < 0x102
+ PFNGLBLENDCOLORPROC glBlendColor;
+ PFNGLBLENDEQUATIONPROC glBlendEquation;
+#endif
+ PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
+ PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
+ PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
+ PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
+ PFNGLBINDBUFFERPROC glBindBuffer;
+ PFNGLDELETEBUFFERSPROC glDeleteBuffers;
+ PFNGLGENBUFFERSPROC glGenBuffers;
+ PFNGLBUFFERDATAPROC glBufferData;
+ PFNGLMAPBUFFERPROC glMapBuffer;
+ PFNGLUNMAPBUFFERPROC glUnmapBuffer;
+ PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
+ PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
+ PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
+ PFNGLFOGCOORDPOINTERPROC glFogCoordPointer;
+ PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
+ PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
+ PFNGLACTIVETEXTUREPROC glActiveTexture;
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL < 0x103
+ PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture;
+#endif
+ PFNGLGETPROGRAMIVARBPROC glGetProgramivARB;
+ PFNGLPROVOKINGVERTEXPROC glProvokingVertex;
+ PFNGLGENQUERIESPROC glGenQueries;
+ PFNGLDELETEQUERIESPROC glDeleteQueries;
+ PFNGLBEGINQUERYPROC glBeginQuery;
+ PFNGLENDQUERYPROC glEndQuery;
+ PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
+ PFNGLTEXIMAGE3DPROC glTexImage3D;
+ PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
+ PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
+ PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
+ PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
+ PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
+ PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
+ PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
+ PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
+ PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
+ PFNGLDRAWBUFFERSPROC glDrawBuffers;
+ PFNGLCREATESHADERPROC glCreateShader;
+ PFNGLSHADERSOURCEPROC glShaderSource;
+ PFNGLCOMPILESHADERPROC glCompileShader;
+ PFNGLGETSHADERIVPROC glGetShaderiv;
+ PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
+ PFNGLCREATEPROGRAMPROC glCreateProgram;
+ PFNGLATTACHSHADERPROC glAttachShader;
+ PFNGLLINKPROGRAMPROC glLinkProgram;
+ PFNGLGETPROGRAMIVPROC glGetProgramiv;
+ PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
+ PFNGLUSEPROGRAMPROC glUseProgram;
+ PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
+ PFNGLUNIFORM1IPROC glUniform1i;
+ PFNGLUNIFORM4FVPROC glUniform4fv;
+ PFNGLDETACHSHADERPROC glDetachShader;
+ PFNGLDELETESHADERPROC glDeleteShader;
+ PFNGLDELETEPROGRAMPROC glDeleteProgram;
+ PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
+ PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
+ PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
+ PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
+ PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
+ PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
+ } ext;
+
+ struct
+ {
+ bool fS3TCSupported : 1;
+ bool fTextureFilterAnisotropicSupported : 1;
+ GLint maxActiveLights;
+ GLint maxTextures;
+ GLint maxClipDistances;
+ GLint maxColorAttachments;
+ GLint maxRectangleTextureSize;
+ GLint maxTextureAnisotropy;
+ GLint maxVertexShaderInstructions;
+ GLint maxFragmentShaderInstructions;
+ GLint maxVertexShaderTemps;
+ GLint maxFragmentShaderTemps;
+ GLfloat flPointSize[2];
+ SVGA3dPixelShaderVersion fragmentShaderVersion;
+ SVGA3dVertexShaderVersion vertexShaderVersion;
+ } caps;
+
+ /** The GL_EXTENSIONS value (space padded) for the default OpenGL profile.
+ * Free with RTStrFree. */
+ R3PTRTYPE(char *) pszExtensions;
+
+ /** The GL_EXTENSIONS value (space padded) for the other OpenGL profile.
+ * Free with RTStrFree.
+ *
+ * This is used to detect shader model version since some implementations
+ * (darwin) hides extensions that have made it into core and probably a
+ * bunch of others when using a OpenGL core profile instead of a legacy one */
+ R3PTRTYPE(char *) pszOtherExtensions;
+ /** The version of the other GL profile. */
+ float rsOtherGLVersion;
+
+ /** Shader talk back interface. */
+ VBOXVMSVGASHADERIF ShaderIf;
+
+# ifdef VMSVGA3D_OPENGL
+ /** The shared context. */
+ VMSVGA3DCONTEXT SharedCtx;
+
+ /** Conversion of emulated formats. Resources are created on the SharedCtx. */
+ PVMSVGA3DFORMATCONVERTER pConv;
+# endif
+#endif /* VMSVGA3D_OPENGL */
+} VMSVGA3DSTATE;
+
+#ifdef VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+/**
+ * SSM descriptor table for the VMSVGA3DSTATE structure.
+ *
+ * @remarks This isn't a complete structure markup, only fields with state.
+ */
+static SSMFIELD const g_aVMSVGA3DSTATEFields[] =
+{
+# ifdef VMSVGA3D_OPENGL
+ SSMFIELD_ENTRY( VMSVGA3DSTATE, rsGLVersion), /** @todo Why are we saving the GL version?? */
+# endif
+ SSMFIELD_ENTRY( VMSVGA3DSTATE, cContexts),
+ SSMFIELD_ENTRY( VMSVGA3DSTATE, cSurfaces),
+ SSMFIELD_ENTRY_TERM()
+};
+#endif /* VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS */
+
+
+#ifdef VMSVGA3D_DIRECT3D
+D3DFORMAT vmsvga3dSurfaceFormat2D3D(SVGA3dSurfaceFormat format);
+D3DMULTISAMPLE_TYPE vmsvga3dMultipeSampleCount2D3D(uint32_t multisampleCount);
+DECLCALLBACK(int) vmsvga3dSharedSurfaceDestroyTree(PAVLU32NODECORE pNode, void *pvParam);
+int vmsvga3dSurfaceFlush(PVMSVGA3DSURFACE pSurface);
+#endif /* VMSVGA3D_DIRECT3D */
+
+
+#ifdef VMSVGA3D_OPENGL
+/** Save and setup everything. */
+# define VMSVGA3D_PARANOID_TEXTURE_PACKING
+
+/** @name VMSVGAPACKPARAMS_* - which packing parameters were set.
+ * @{ */
+# define VMSVGAPACKPARAMS_ALIGNMENT RT_BIT_32(0)
+# define VMSVGAPACKPARAMS_ROW_LENGTH RT_BIT_32(1)
+# define VMSVGAPACKPARAMS_IMAGE_HEIGHT RT_BIT_32(2)
+# define VMSVGAPACKPARAMS_SWAP_BYTES RT_BIT_32(3)
+# define VMSVGAPACKPARAMS_LSB_FIRST RT_BIT_32(4)
+# define VMSVGAPACKPARAMS_SKIP_ROWS RT_BIT_32(5)
+# define VMSVGAPACKPARAMS_SKIP_PIXELS RT_BIT_32(6)
+# define VMSVGAPACKPARAMS_SKIP_IMAGES RT_BIT_32(7)
+/** @} */
+
+/**
+ * Saved texture packing parameters (shared by both pack and unpack).
+ */
+typedef struct VMSVGAPACKPARAMS
+{
+ uint32_t fChanged;
+ GLint iAlignment;
+ GLint cxRow;
+ GLint cyImage;
+# ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ GLboolean fSwapBytes;
+ GLboolean fLsbFirst;
+ GLint cSkipRows;
+ GLint cSkipPixels;
+ GLint cSkipImages;
+# endif
+} VMSVGAPACKPARAMS;
+/** Pointer to saved texture packing parameters. */
+typedef VMSVGAPACKPARAMS *PVMSVGAPACKPARAMS;
+/** Pointer to const saved texture packing parameters. */
+typedef VMSVGAPACKPARAMS const *PCVMSVGAPACKPARAMS;
+
+void vmsvga3dOglSetPackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface,
+ PVMSVGAPACKPARAMS pSave);
+void vmsvga3dOglRestorePackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface,
+ PCVMSVGAPACKPARAMS pSave);
+void vmsvga3dOglSetUnpackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, GLint cxRow, GLint cyImage,
+ PVMSVGAPACKPARAMS pSave);
+void vmsvga3dOglRestoreUnpackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
+ PCVMSVGAPACKPARAMS pSave);
+
+/** @name VMSVGA3D_DEF_CTX_F_XXX - vmsvga3dContextDefineOgl flags.
+ * @{ */
+/** When clear, the context is created using the default OpenGL profile.
+ * When set, it's created using the alternative profile. The latter is only
+ * allowed if the VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE is set. */
+# define VMSVGA3D_DEF_CTX_F_OTHER_PROFILE RT_BIT_32(0)
+/** Defining the shared context. */
+# define VMSVGA3D_DEF_CTX_F_SHARED_CTX RT_BIT_32(1)
+/** Defining the init time context (EMT). */
+# define VMSVGA3D_DEF_CTX_F_INIT RT_BIT_32(2)
+/** @} */
+int vmsvga3dContextDefineOgl(PVGASTATECC pThisCC, uint32_t cid, uint32_t fFlags);
+void vmsvga3dSurfaceFormat2OGL(PVMSVGA3DSURFACE pSurface, SVGA3dSurfaceFormat format);
+
+#endif /* VMSVGA3D_OPENGL */
+
+
+/* DevVGA-SVGA3d-shared.cpp: */
+int vmsvga3dSaveShaderConst(PVMSVGA3DCONTEXT pContext, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype,
+ uint32_t val1, uint32_t val2, uint32_t val3, uint32_t val4);
+
+
+DECLINLINE(int) vmsvga3dContextFromCid(PVMSVGA3DSTATE pState, uint32_t cid, PVMSVGA3DCONTEXT *ppContext)
+{
+ AssertReturn(cid < pState->cContexts, VERR_INVALID_PARAMETER);
+ PVMSVGA3DCONTEXT const pContext = pState->papContexts[cid];
+ if (RT_LIKELY(pContext && pContext->id == cid))
+ {
+ *ppContext = pContext;
+ return VINF_SUCCESS;
+ }
+ LogRelMax(64, ("VMSVGA: unknown cid=%u (%s cid=%u)\n", cid, pContext ? "expected" : "null", pContext ? pContext->id : -1));
+ return VERR_INVALID_PARAMETER;
+}
+
+#ifdef VMSVGA3D_DX
+DECLINLINE(int) vmsvga3dDXContextFromCid(PVMSVGA3DSTATE pState, uint32_t cid, PVMSVGA3DDXCONTEXT *ppDXContext)
+{
+ *ppDXContext = NULL;
+ AssertReturn(cid < pState->cDXContexts, VERR_INVALID_PARAMETER);
+ PVMSVGA3DDXCONTEXT const pDXContext = pState->papDXContexts[cid];
+ if (RT_LIKELY(pDXContext && pDXContext->cid == cid))
+ {
+ *ppDXContext = pDXContext;
+ return VINF_SUCCESS;
+ }
+ LogRelMax(64, ("VMSVGA: unknown DX cid=%u (%s cid=%u)\n", cid, pDXContext ? "expected" : "null", pDXContext ? pDXContext->cid : -1));
+ return VERR_INVALID_PARAMETER;
+}
+#endif
+
+DECLINLINE(int) vmsvga3dSurfaceFromSid(PVMSVGA3DSTATE pState, uint32_t sid, PVMSVGA3DSURFACE *ppSurface)
+{
+ AssertReturn(sid < pState->cSurfaces, VERR_INVALID_PARAMETER);
+ PVMSVGA3DSURFACE const pSurface = pState->papSurfaces[sid];
+ if (RT_LIKELY(pSurface && pSurface->id == sid))
+ {
+ *ppSurface = pSurface;
+ return VINF_SUCCESS;
+ }
+ LogRelMax(64, ("VMSVGA: unknown sid=%u (%s sid=%u)\n", sid, pSurface ? "expected" : "null", pSurface ? pSurface->id : -1));
+ return VERR_INVALID_PARAMETER;
+}
+
+DECLINLINE(int) vmsvga3dMipmapLevel(PVMSVGA3DSURFACE pSurface, uint32_t iArrayElement, uint32_t mipmap,
+ PVMSVGA3DMIPMAPLEVEL *ppMipmapLevel)
+{
+ AssertMsgReturn(iArrayElement < pSurface->surfaceDesc.numArrayElements,
+ ("numArrayElements %d, iArrayElement %d\n", pSurface->surfaceDesc.numArrayElements, iArrayElement),
+ VERR_INVALID_PARAMETER);
+ AssertMsgReturn(mipmap < pSurface->cLevels,
+ ("numMipLevels %d, mipmap %d", pSurface->cLevels, mipmap),
+ VERR_INVALID_PARAMETER);
+
+ *ppMipmapLevel = &pSurface->paMipmapLevels[iArrayElement * pSurface->cLevels + mipmap];
+ return VINF_SUCCESS;
+}
+
+void vmsvga3dInfoSurfaceToBitmap(PCDBGFINFOHLP pHlp, PVMSVGA3DSURFACE pSurface,
+ const char *pszPath, const char *pszNamePrefix, const char *pszNameSuffix);
+
+void vmsvga3dSurfaceMapInit(VMSVGA3D_MAPPED_SURFACE *pMap, VMSVGA3D_SURFACE_MAP enmMapType, SVGA3dBox const *pBox,
+ PVMSVGA3DSURFACE pSurface, void *pvData, uint32_t cbRowPitch, uint32_t cbDepthPitch);
+
+#if defined(RT_OS_WINDOWS)
+#define D3D_RELEASE(ptr) do { \
+ if (ptr) \
+ { \
+ (ptr)->Release(); \
+ (ptr) = 0; \
+ } \
+} while (0)
+#endif
+
+#if defined(VMSVGA3D_DIRECT3D)
+HRESULT D3D9UpdateTexture(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface);
+HRESULT D3D9GetRenderTargetData(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t uFace,
+ uint32_t uMipmap);
+HRESULT D3D9GetSurfaceLevel(PVMSVGA3DSURFACE pSurface,
+ uint32_t uFace,
+ uint32_t uMipmap,
+ bool fBounce,
+ IDirect3DSurface9 **ppD3DSurface);
+D3DFORMAT D3D9GetActualFormat(PVMSVGA3DSTATE pState,
+ D3DFORMAT d3dfmt);
+bool D3D9CheckDeviceFormat(IDirect3D9 *pD3D9,
+ DWORD Usage,
+ D3DRESOURCETYPE RType,
+ D3DFORMAT CheckFormat);
+#endif
+
+#ifdef VMSVGA3D_OPENGL
+void vmsvga3dOnSharedContextDefine(PVMSVGA3DSTATE pState);
+void vmsvga3dOnSharedContextDestroy(PVMSVGA3DSTATE pState);
+
+DECLINLINE(GLuint) GLTextureId(PVMSVGA3DSURFACE pSurface)
+{
+ return pSurface->fEmulated ? pSurface->idEmulated : pSurface->oglId.texture;
+}
+
+void FormatConvUpdateTexture(PVMSVGA3DSTATE pState,
+ PVMSVGA3DCONTEXT pCurrentContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t iMipmap);
+void FormatConvReadTexture(PVMSVGA3DSTATE pState,
+ PVMSVGA3DCONTEXT pCurrentContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t iMipmap);
+#endif
+
+int vmsvga3dShaderParse(SVGA3dShaderType type, uint32_t cbShaderData, uint32_t *pShaderData);
+void vmsvga3dShaderLogRel(char const *pszMsg, SVGA3dShaderType type, uint32_t cbShaderData, uint32_t const *pShaderData);
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_internal_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
new file mode 100644
index 00000000..13ac14bf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
@@ -0,0 +1,8022 @@
+/* $Id: DevVGA-SVGA3d-ogl.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+/* Enable to disassemble defined shaders. (Windows host only) */
+#if defined(RT_OS_WINDOWS) && defined(DEBUG) && 0 /* Disabled as we don't have the DirectX SDK avaible atm. */
+# define DUMP_SHADER_DISASSEMBLY
+#endif
+#ifdef DEBUG_bird
+//# define RTMEM_WRAP_TO_EF_APIS
+#endif
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#define GL_SILENCE_DEPRECATION /* shut up deprecated warnings on darwin (10.15 sdk) */
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+#include <VBox/AssertGuest.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#include <iprt/mem.h>
+
+#include <VBoxVideo.h> /* required by DevVGA.h */
+#include <VBoxVideo3D.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "DevVGA-SVGA3d-internal.h"
+
+#ifdef DUMP_SHADER_DISASSEMBLY
+# include <d3dx9shader.h>
+#endif
+
+#include <stdlib.h>
+#include <math.h>
+#include <float.h> /* FLT_MIN */
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+#ifndef VBOX_VMSVGA3D_DEFAULT_OGL_PROFILE
+# define VBOX_VMSVGA3D_DEFAULT_OGL_PROFILE 1.0
+#endif
+
+#ifdef VMSVGA3D_DYNAMIC_LOAD
+# define OGLGETPROCADDRESS glLdrGetProcAddress
+#else
+#ifdef RT_OS_WINDOWS
+# define OGLGETPROCADDRESS MyWinGetProcAddress
+DECLINLINE(PROC) MyWinGetProcAddress(const char *pszSymbol)
+{
+ /* Khronos: [on failure] "some implementations will return other values. 1, 2, and 3 are used, as well as -1". */
+ PROC p = wglGetProcAddress(pszSymbol);
+ if (RT_VALID_PTR(p))
+ return p;
+ return 0;
+}
+#elif defined(RT_OS_DARWIN)
+# include <dlfcn.h>
+# define OGLGETPROCADDRESS MyNSGLGetProcAddress
+/** Resolves an OpenGL symbol. */
+static void *MyNSGLGetProcAddress(const char *pszSymbol)
+{
+ /* Another copy in shaderapi.c. */
+ static void *s_pvImage = NULL;
+ if (s_pvImage == NULL)
+ s_pvImage = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY);
+ return s_pvImage ? dlsym(s_pvImage, pszSymbol) : NULL;
+}
+
+#else
+# define OGLGETPROCADDRESS(x) glXGetProcAddress((const GLubyte *)x)
+#endif
+#endif
+
+/* Invert y-coordinate for OpenGL's bottom left origin. */
+#define D3D_TO_OGL_Y_COORD(ptrSurface, y_coordinate) (ptrSurface->paMipmapLevels[0].mipmapSize.height - (y_coordinate))
+#define D3D_TO_OGL_Y_COORD_MIPLEVEL(ptrMipLevel, y_coordinate) (ptrMipLevel->size.height - (y_coordinate))
+
+/**
+ * Macro for doing something and then checking for errors during initialization.
+ * Uses AssertLogRelMsg.
+ */
+#define VMSVGA3D_INIT_CHECKED(a_Expr) \
+ do \
+ { \
+ a_Expr; \
+ GLenum iGlError = glGetError(); \
+ AssertLogRelMsg(iGlError == GL_NO_ERROR, ("VMSVGA3d: %s -> %#x\n", #a_Expr, iGlError)); \
+ } while (0)
+
+/**
+ * Macro for doing something and then checking for errors during initialization,
+ * doing the same in the other context when enabled.
+ *
+ * This will try both profiles in dual profile builds. Caller must be in the
+ * default context.
+ *
+ * Uses AssertLogRelMsg to indicate trouble.
+ */
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+# define VMSVGA3D_INIT_CHECKED_BOTH(a_pState, a_pContext, a_pOtherCtx, a_Expr) \
+ do \
+ { \
+ for (uint32_t i = 0; i < 64; i++) if (glGetError() == GL_NO_ERROR) break; Assert(glGetError() == GL_NO_ERROR); \
+ a_Expr; \
+ GLenum iGlError = glGetError(); \
+ if (iGlError != GL_NO_ERROR) \
+ { \
+ VMSVGA3D_SET_CURRENT_CONTEXT(a_pState, a_pOtherCtx); \
+ for (uint32_t i = 0; i < 64; i++) if (glGetError() == GL_NO_ERROR) break; Assert(glGetError() == GL_NO_ERROR); \
+ a_Expr; \
+ GLenum iGlError2 = glGetError(); \
+ AssertLogRelMsg(iGlError2 == GL_NO_ERROR, ("VMSVGA3d: %s -> %#x / %#x\n", #a_Expr, iGlError, iGlError2)); \
+ VMSVGA3D_SET_CURRENT_CONTEXT(a_pState, a_pContext); \
+ } \
+ } while (0)
+#else
+# define VMSVGA3D_INIT_CHECKED_BOTH(a_pState, a_pContext, a_pOtherCtx, a_Expr) VMSVGA3D_INIT_CHECKED(a_Expr)
+#endif
+
+
+/*********************************************************************************************************************************
+* Global Variables *
+*********************************************************************************************************************************/
+/* Define the default light parameters as specified by MSDN. */
+/** @todo move out; fetched from Wine */
+const SVGA3dLightData vmsvga3d_default_light =
+{
+ SVGA3D_LIGHTTYPE_DIRECTIONAL, /* type */
+ false, /* inWorldSpace */
+ { 1.0f, 1.0f, 1.0f, 0.0f }, /* diffuse r,g,b,a */
+ { 0.0f, 0.0f, 0.0f, 0.0f }, /* specular r,g,b,a */
+ { 0.0f, 0.0f, 0.0f, 0.0f }, /* ambient r,g,b,a, */
+ { 0.0f, 0.0f, 0.0f }, /* position x,y,z */
+ { 0.0f, 0.0f, 1.0f }, /* direction x,y,z */
+ 0.0f, /* range */
+ 0.0f, /* falloff */
+ 0.0f, 0.0f, 0.0f, /* attenuation 0,1,2 */
+ 0.0f, /* theta */
+ 0.0f /* phi */
+};
+
+
+/*********************************************************************************************************************************
+* Internal Functions *
+*********************************************************************************************************************************/
+static int vmsvga3dContextDestroyOgl(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid);
+static DECLCALLBACK(int) vmsvga3dBackContextDestroy(PVGASTATECC pThisCC, uint32_t cid);
+static void vmsvgaColor2GLFloatArray(uint32_t color, GLfloat *pRed, GLfloat *pGreen, GLfloat *pBlue, GLfloat *pAlpha);
+static DECLCALLBACK(int) vmsvga3dBackSetLightData(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData);
+static DECLCALLBACK(int) vmsvga3dBackSetClipPlane(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4]);
+static DECLCALLBACK(int) vmsvga3dBackShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type);
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryDelete(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext);
+static DECLCALLBACK(int) vmsvga3dBackCreateTexture(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface);
+
+/* Generated by VBoxDef2LazyLoad from the VBoxSVGA3D.def and VBoxSVGA3DObjC.def files. */
+extern "C" int ExplicitlyLoadVBoxSVGA3D(bool fResolveAllImports, PRTERRINFO pErrInfo);
+
+
+/**
+ * Checks if the given OpenGL extension is supported.
+ *
+ * @returns true if supported, false if not.
+ * @param pState The VMSVGA3d state.
+ * @param rsMinGLVersion The OpenGL version that introduced this feature
+ * into the core.
+ * @param pszWantedExtension The name of the OpenGL extension we want padded
+ * with one space at each end.
+ * @remarks Init time only.
+ */
+static bool vmsvga3dCheckGLExtension(PVMSVGA3DSTATE pState, float rsMinGLVersion, const char *pszWantedExtension)
+{
+ RT_NOREF(rsMinGLVersion);
+ /* check padding. */
+ Assert(pszWantedExtension[0] == ' ');
+ Assert(pszWantedExtension[1] != ' ');
+ Assert(strchr(&pszWantedExtension[1], ' ') + 1 == strchr(pszWantedExtension, '\0'));
+
+ /* Look it up. */
+ bool fRet = false;
+ if (strstr(pState->pszExtensions, pszWantedExtension))
+ fRet = true;
+
+ /* Temporarily. Later start if (rsMinGLVersion != 0.0 && fActualGLVersion >= rsMinGLVersion) return true; */
+#ifdef RT_OS_DARWIN
+ AssertMsg( rsMinGLVersion == 0.0
+ || fRet == (pState->rsGLVersion >= rsMinGLVersion)
+ || VBOX_VMSVGA3D_DEFAULT_OGL_PROFILE == 2.1,
+ ("%s actual:%d min:%d fRet=%d\n",
+ pszWantedExtension, (int)(pState->rsGLVersion * 10), (int)(rsMinGLVersion * 10), fRet));
+#else
+ AssertMsg(rsMinGLVersion == 0.0 || fRet == (pState->rsGLVersion >= rsMinGLVersion),
+ ("%s actual:%d min:%d fRet=%d\n",
+ pszWantedExtension, (int)(pState->rsGLVersion * 10), (int)(rsMinGLVersion * 10), fRet));
+#endif
+ return fRet;
+}
+
+
+/**
+ * Outputs GL_EXTENSIONS list to the release log.
+ */
+static void vmsvga3dLogRelExtensions(const char *pszPrefix, const char *pszExtensions)
+{
+ /* OpenGL 3.0 interface (glGetString(GL_EXTENSIONS) return NULL). */
+ bool fBuffered = RTLogRelSetBuffering(true);
+
+ /*
+ * Determin the column widths first.
+ */
+ size_t acchWidths[4] = { 1, 1, 1, 1 };
+ uint32_t i;
+ const char *psz = pszExtensions;
+ for (i = 0; ; i++)
+ {
+ while (*psz == ' ')
+ psz++;
+ if (!*psz)
+ break;
+
+ const char *pszEnd = strchr(psz, ' ');
+ AssertBreak(pszEnd);
+ size_t cch = pszEnd - psz;
+
+ uint32_t iColumn = i % RT_ELEMENTS(acchWidths);
+ if (acchWidths[iColumn] < cch)
+ acchWidths[iColumn] = cch;
+
+ psz = pszEnd;
+ }
+
+ /*
+ * Output it.
+ */
+ LogRel(("VMSVGA3d: %sOpenGL extensions (%d):", pszPrefix, i));
+ psz = pszExtensions;
+ for (i = 0; ; i++)
+ {
+ while (*psz == ' ')
+ psz++;
+ if (!*psz)
+ break;
+
+ const char *pszEnd = strchr(psz, ' ');
+ AssertBreak(pszEnd);
+ size_t cch = pszEnd - psz;
+
+ uint32_t iColumn = i % RT_ELEMENTS(acchWidths);
+ if (iColumn == 0)
+ LogRel(("\nVMSVGA3d: %-*.*s", acchWidths[iColumn], cch, psz));
+ else if (iColumn != RT_ELEMENTS(acchWidths) - 1)
+ LogRel((" %-*.*s", acchWidths[iColumn], cch, psz));
+ else
+ LogRel((" %.*s", cch, psz));
+
+ psz = pszEnd;
+ }
+
+ RTLogRelSetBuffering(fBuffered);
+ LogRel(("\n"));
+}
+
+/**
+ * Gathers the GL_EXTENSIONS list, storing it as a space padded list at
+ * @a ppszExtensions.
+ *
+ * @returns VINF_SUCCESS or VERR_NO_STR_MEMORY
+ * @param ppszExtensions Pointer to the string pointer. Free with RTStrFree.
+ * @param fGLProfileVersion The OpenGL profile version.
+ */
+static int vmsvga3dGatherExtensions(char **ppszExtensions, float fGLProfileVersion)
+{
+ int rc;
+ *ppszExtensions = NULL;
+
+ /*
+ * Try the old glGetString interface first.
+ */
+ const char *pszExtensions = (const char *)glGetString(GL_EXTENSIONS);
+ if (pszExtensions)
+ {
+ rc = RTStrAAppendExN(ppszExtensions, 3, " ", (size_t)1, pszExtensions, RTSTR_MAX, " ", (size_t)1);
+ AssertLogRelRCReturn(rc, rc);
+ }
+ else
+ {
+ /*
+ * The new interface where each extension string is retrieved separately.
+ * Note! Cannot use VMSVGA3D_INIT_CHECKED_GL_GET_INTEGER_VALUE here because
+ * the above GL_EXTENSIONS error lingers on darwin. sucks.
+ */
+#ifndef GL_NUM_EXTENSIONS
+# define GL_NUM_EXTENSIONS 0x821D
+#endif
+ GLint cExtensions = 1024;
+ glGetIntegerv(GL_NUM_EXTENSIONS, &cExtensions);
+ Assert(cExtensions != 1024);
+
+ PFNGLGETSTRINGIPROC pfnGlGetStringi = (PFNGLGETSTRINGIPROC)OGLGETPROCADDRESS("glGetStringi");
+ AssertLogRelReturn(pfnGlGetStringi, VERR_NOT_SUPPORTED);
+
+ rc = RTStrAAppend(ppszExtensions, " ");
+ for (GLint i = 0; RT_SUCCESS(rc) && i < cExtensions; i++)
+ {
+ const char *pszExt = (const char *)pfnGlGetStringi(GL_EXTENSIONS, i);
+ if (pszExt)
+ rc = RTStrAAppendExN(ppszExtensions, 2, pfnGlGetStringi(GL_EXTENSIONS, i), RTSTR_MAX, " ", (size_t)1);
+ }
+ AssertRCReturn(rc, rc);
+ }
+
+#if 1
+ /*
+ * Add extensions promoted into the core OpenGL profile.
+ */
+ static const struct
+ {
+ float fGLVersion;
+ const char *pszzExtensions;
+ } s_aPromotedExtensions[] =
+ {
+ {
+ 1.1f,
+ " GL_EXT_vertex_array \0"
+ " GL_EXT_polygon_offset \0"
+ " GL_EXT_blend_logic_op \0"
+ " GL_EXT_texture \0"
+ " GL_EXT_copy_texture \0"
+ " GL_EXT_subtexture \0"
+ " GL_EXT_texture_object \0"
+ " GL_ARB_framebuffer_object \0"
+ " GL_ARB_map_buffer_range \0"
+ " GL_ARB_vertex_array_object \0"
+ "\0"
+ },
+ {
+ 1.2f,
+ " EXT_texture3D \0"
+ " EXT_bgra \0"
+ " EXT_packed_pixels \0"
+ " EXT_rescale_normal \0"
+ " EXT_separate_specular_color \0"
+ " SGIS_texture_edge_clamp \0"
+ " SGIS_texture_lod \0"
+ " EXT_draw_range_elements \0"
+ "\0"
+ },
+ {
+ 1.3f,
+ " GL_ARB_texture_compression \0"
+ " GL_ARB_texture_cube_map \0"
+ " GL_ARB_multisample \0"
+ " GL_ARB_multitexture \0"
+ " GL_ARB_texture_env_add \0"
+ " GL_ARB_texture_env_combine \0"
+ " GL_ARB_texture_env_dot3 \0"
+ " GL_ARB_texture_border_clamp \0"
+ " GL_ARB_transpose_matrix \0"
+ "\0"
+ },
+ {
+ 1.5f,
+ " GL_SGIS_generate_mipmap \0"
+ /*" GL_NV_blend_equare \0"*/
+ " GL_ARB_depth_texture \0"
+ " GL_ARB_shadow \0"
+ " GL_EXT_fog_coord \0"
+ " GL_EXT_multi_draw_arrays \0"
+ " GL_ARB_point_parameters \0"
+ " GL_EXT_secondary_color \0"
+ " GL_EXT_blend_func_separate \0"
+ " GL_EXT_stencil_wrap \0"
+ " GL_ARB_texture_env_crossbar \0"
+ " GL_EXT_texture_lod_bias \0"
+ " GL_ARB_texture_mirrored_repeat \0"
+ " GL_ARB_window_pos \0"
+ "\0"
+ },
+ {
+ 1.6f,
+ " GL_ARB_vertex_buffer_object \0"
+ " GL_ARB_occlusion_query \0"
+ " GL_EXT_shadow_funcs \0"
+ },
+ {
+ 2.0f,
+ " GL_ARB_shader_objects \0" /*??*/
+ " GL_ARB_vertex_shader \0" /*??*/
+ " GL_ARB_fragment_shader \0" /*??*/
+ " GL_ARB_shading_language_100 \0" /*??*/
+ " GL_ARB_draw_buffers \0"
+ " GL_ARB_texture_non_power_of_two \0"
+ " GL_ARB_point_sprite \0"
+ " GL_ATI_separate_stencil \0"
+ " GL_EXT_stencil_two_side \0"
+ "\0"
+ },
+ {
+ 2.1f,
+ " GL_ARB_pixel_buffer_object \0"
+ " GL_EXT_texture_sRGB \0"
+ "\0"
+ },
+ {
+ 3.0f,
+ " GL_ARB_framebuffer_object \0"
+ " GL_ARB_map_buffer_range \0"
+ " GL_ARB_vertex_array_object \0"
+ "\0"
+ },
+ {
+ 3.1f,
+ " GL_ARB_copy_buffer \0"
+ " GL_ARB_uniform_buffer_object \0"
+ "\0"
+ },
+ {
+ 3.2f,
+ " GL_ARB_vertex_array_bgra \0"
+ " GL_ARB_draw_elements_base_vertex \0"
+ " GL_ARB_fragment_coord_conventions \0"
+ " GL_ARB_provoking_vertex \0"
+ " GL_ARB_seamless_cube_map \0"
+ " GL_ARB_texture_multisample \0"
+ " GL_ARB_depth_clamp \0"
+ " GL_ARB_sync \0"
+ " GL_ARB_geometry_shader4 \0" /*??*/
+ "\0"
+ },
+ {
+ 3.3f,
+ " GL_ARB_blend_func_extended \0"
+ " GL_ARB_sampler_objects \0"
+ " GL_ARB_explicit_attrib_location \0"
+ " GL_ARB_occlusion_query2 \0"
+ " GL_ARB_shader_bit_encoding \0"
+ " GL_ARB_texture_rgb10_a2ui \0"
+ " GL_ARB_texture_swizzle \0"
+ " GL_ARB_timer_query \0"
+ " GL_ARB_vertex_type_2_10_10_10_rev \0"
+ "\0"
+ },
+ {
+ 4.0f,
+ " GL_ARB_texture_query_lod \0"
+ " GL_ARB_draw_indirect \0"
+ " GL_ARB_gpu_shader5 \0"
+ " GL_ARB_gpu_shader_fp64 \0"
+ " GL_ARB_shader_subroutine \0"
+ " GL_ARB_tessellation_shader \0"
+ " GL_ARB_texture_buffer_object_rgb32 \0"
+ " GL_ARB_texture_cube_map_array \0"
+ " GL_ARB_texture_gather \0"
+ " GL_ARB_transform_feedback2 \0"
+ " GL_ARB_transform_feedback3 \0"
+ "\0"
+ },
+ {
+ 4.1f,
+ " GL_ARB_ES2_compatibility \0"
+ " GL_ARB_get_program_binary \0"
+ " GL_ARB_separate_shader_objects \0"
+ " GL_ARB_shader_precision \0"
+ " GL_ARB_vertex_attrib_64bit \0"
+ " GL_ARB_viewport_array \0"
+ "\0"
+ }
+ };
+
+ uint32_t cPromoted = 0;
+ for (uint32_t i = 0; i < RT_ELEMENTS(s_aPromotedExtensions) && s_aPromotedExtensions[i].fGLVersion <= fGLProfileVersion; i++)
+ {
+ const char *pszExt = s_aPromotedExtensions[i].pszzExtensions;
+ while (*pszExt)
+ {
+# ifdef VBOX_STRICT
+ size_t cchExt = strlen(pszExt);
+ Assert(cchExt > 3);
+ Assert(pszExt[0] == ' ');
+ Assert(pszExt[1] != ' ');
+ Assert(pszExt[cchExt - 2] != ' ');
+ Assert(pszExt[cchExt - 1] == ' ');
+# endif
+
+ if (strstr(*ppszExtensions, pszExt) == NULL)
+ {
+ if (cPromoted++ == 0)
+ {
+ rc = RTStrAAppend(ppszExtensions, " <promoted-extensions:> <promoted-extensions:> <promoted-extensions:> ");
+ AssertRCReturn(rc, rc);
+ }
+
+ rc = RTStrAAppend(ppszExtensions, pszExt);
+ AssertRCReturn(rc, rc);
+ }
+
+ pszExt = strchr(pszExt, '\0') + 1;
+ }
+ }
+#endif
+
+ return VINF_SUCCESS;
+}
+
+/** Check whether this is an Intel GL driver.
+ *
+ * @returns true if this seems to be some Intel graphics.
+ */
+static bool vmsvga3dIsVendorIntel(void)
+{
+ return RTStrNICmp((char *)glGetString(GL_VENDOR), "Intel", 5) == 0;
+}
+
+/**
+ * @interface_method_impl{VBOXVMSVGASHADERIF,pfnSwitchInitProfile}
+ */
+static DECLCALLBACK(void) vmsvga3dShaderIfSwitchInitProfile(PVBOXVMSVGASHADERIF pThis, bool fOtherProfile)
+{
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ PVMSVGA3DSTATE pState = RT_FROM_MEMBER(pThis, VMSVGA3DSTATE, ShaderIf);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pState->papContexts[fOtherProfile ? 2 : 1]);
+#else
+ NOREF(pThis);
+ NOREF(fOtherProfile);
+#endif
+}
+
+
+/**
+ * @interface_method_impl{VBOXVMSVGASHADERIF,pfnGetNextExtension}
+ */
+static DECLCALLBACK(bool) vmsvga3dShaderIfGetNextExtension(PVBOXVMSVGASHADERIF pThis, void **ppvEnumCtx,
+ char *pszBuf, size_t cbBuf, bool fOtherProfile)
+{
+ PVMSVGA3DSTATE pState = RT_FROM_MEMBER(pThis, VMSVGA3DSTATE, ShaderIf);
+ const char *pszCur = *ppvEnumCtx ? (const char *)*ppvEnumCtx
+ : fOtherProfile ? pState->pszOtherExtensions : pState->pszExtensions;
+ while (*pszCur == ' ')
+ pszCur++;
+ if (!*pszCur)
+ return false;
+
+ const char *pszEnd = strchr(pszCur, ' ');
+ AssertReturn(pszEnd, false);
+ size_t cch = pszEnd - pszCur;
+ if (cch < cbBuf)
+ {
+ memcpy(pszBuf, pszCur, cch);
+ pszBuf[cch] = '\0';
+ }
+ else if (cbBuf > 0)
+ {
+ memcpy(pszBuf, "<overflow>", RT_MIN(sizeof("<overflow>"), cbBuf));
+ pszBuf[cbBuf - 1] = '\0';
+ }
+
+ *ppvEnumCtx = (void *)pszEnd;
+ return true;
+}
+
+
+/**
+ * Initializes the VMSVGA3D state during VGA device construction.
+ *
+ * Failure are generally not fatal, 3D support will just be disabled.
+ *
+ * @returns VBox status code.
+ * @param pDevIns The device instance.
+ * @param pThis The shared VGA/VMSVGA state where svga.p3dState will be
+ * modified.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ */
+static DECLCALLBACK(int) vmsvga3dBackInit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ int rc;
+ RT_NOREF(pDevIns, pThis);
+
+ AssertCompile(GL_TRUE == 1);
+ AssertCompile(GL_FALSE == 0);
+
+#ifdef VMSVGA3D_DYNAMIC_LOAD
+ rc = glLdrInit(pDevIns);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: Error loading OpenGL library and resolving necessary functions: %Rrc\n", rc));
+ return rc;
+ }
+#endif
+
+ /*
+ * Load and resolve imports from the external shared libraries.
+ */
+ RTERRINFOSTATIC ErrInfo;
+ rc = ExplicitlyLoadVBoxSVGA3D(true /*fResolveAllImports*/, RTErrInfoInitStatic(&ErrInfo));
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: Error loading VBoxSVGA3D and resolving necessary functions: %Rrc - %s\n", rc, ErrInfo.Core.pszMsg));
+ return rc;
+ }
+#ifdef RT_OS_DARWIN
+ rc = ExplicitlyLoadVBoxSVGA3DObjC(true /*fResolveAllImports*/, RTErrInfoInitStatic(&ErrInfo));
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: Error loading VBoxSVGA3DObjC and resolving necessary functions: %Rrc - %s\n", rc, ErrInfo.Core.pszMsg));
+ return rc;
+ }
+#endif
+
+ /*
+ * Allocate the state.
+ */
+ pThisCC->svga.p3dState = (PVMSVGA3DSTATE)RTMemAllocZ(sizeof(VMSVGA3DSTATE));
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+
+#ifdef RT_OS_WINDOWS
+ /* Create event semaphore and async IO thread. */
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ rc = RTSemEventCreate(&pState->WndRequestSem);
+ if (RT_SUCCESS(rc))
+ {
+ rc = RTThreadCreate(&pState->pWindowThread, vmsvga3dWindowThread, pState->WndRequestSem, 0, RTTHREADTYPE_GUI, 0,
+ "VMSVGA3DWND");
+ if (RT_SUCCESS(rc))
+ return VINF_SUCCESS;
+
+ /* bail out. */
+ LogRel(("VMSVGA3d: RTThreadCreate failed: %Rrc\n", rc));
+ RTSemEventDestroy(pState->WndRequestSem);
+ }
+ else
+ LogRel(("VMSVGA3d: RTSemEventCreate failed: %Rrc\n", rc));
+ RTMemFree(pThisCC->svga.p3dState);
+ pThisCC->svga.p3dState = NULL;
+ return rc;
+#else
+ return VINF_SUCCESS;
+#endif
+}
+
+static int vmsvga3dLoadGLFunctions(PVMSVGA3DSTATE pState)
+{
+ /* A strict approach to get a proc address as recommended by Khronos:
+ * - "If the function is a core OpenGL function, then we need to check the OpenGL version".
+ * - "If the function is an extension, we need to check to see if the extension is supported."
+ */
+
+/* Get a function address, return VERR_NOT_IMPLEMENTED on failure. */
+#define GLGETPROC_(ProcType, ProcName, NameSuffix) do { \
+ pState->ext.ProcName = (ProcType)OGLGETPROCADDRESS(#ProcName NameSuffix); \
+ AssertLogRelMsgReturn(pState->ext.ProcName, (#ProcName NameSuffix " missing"), VERR_NOT_IMPLEMENTED); \
+} while(0)
+
+/* Get an optional function address. LogRel on failure. */
+#define GLGETPROCOPT_(ProcType, ProcName, NameSuffix) do { \
+ pState->ext.ProcName = (ProcType)OGLGETPROCADDRESS(#ProcName NameSuffix); \
+ if (!pState->ext.ProcName) \
+ { \
+ LogRel(("VMSVGA3d: missing optional %s\n", #ProcName NameSuffix)); \
+ AssertFailed(); \
+ } \
+} while(0)
+
+ /* OpenGL 2.0 or earlier core. Do not bother with extensions. */
+ GLGETPROC_(PFNGLGENQUERIESPROC , glGenQueries, "");
+ GLGETPROC_(PFNGLDELETEQUERIESPROC , glDeleteQueries, "");
+ GLGETPROC_(PFNGLBEGINQUERYPROC , glBeginQuery, "");
+ GLGETPROC_(PFNGLENDQUERYPROC , glEndQuery, "");
+ GLGETPROC_(PFNGLGETQUERYOBJECTUIVPROC , glGetQueryObjectuiv, "");
+ GLGETPROC_(PFNGLTEXIMAGE3DPROC , glTexImage3D, "");
+ GLGETPROC_(PFNGLTEXSUBIMAGE3DPROC , glTexSubImage3D, "");
+ GLGETPROC_(PFNGLGETCOMPRESSEDTEXIMAGEPROC , glGetCompressedTexImage, "");
+ GLGETPROC_(PFNGLCOMPRESSEDTEXIMAGE2DPROC , glCompressedTexImage2D, "");
+ GLGETPROC_(PFNGLCOMPRESSEDTEXIMAGE3DPROC , glCompressedTexImage3D, "");
+ GLGETPROC_(PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC , glCompressedTexSubImage2D, "");
+ GLGETPROC_(PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC , glCompressedTexSubImage3D, "");
+ GLGETPROC_(PFNGLPOINTPARAMETERFPROC , glPointParameterf, "");
+ GLGETPROC_(PFNGLBLENDEQUATIONSEPARATEPROC , glBlendEquationSeparate, "");
+ GLGETPROC_(PFNGLBLENDFUNCSEPARATEPROC , glBlendFuncSeparate, "");
+ GLGETPROC_(PFNGLSTENCILOPSEPARATEPROC , glStencilOpSeparate, "");
+ GLGETPROC_(PFNGLSTENCILFUNCSEPARATEPROC , glStencilFuncSeparate, "");
+ GLGETPROC_(PFNGLBINDBUFFERPROC , glBindBuffer, "");
+ GLGETPROC_(PFNGLDELETEBUFFERSPROC , glDeleteBuffers, "");
+ GLGETPROC_(PFNGLGENBUFFERSPROC , glGenBuffers, "");
+ GLGETPROC_(PFNGLBUFFERDATAPROC , glBufferData, "");
+ GLGETPROC_(PFNGLMAPBUFFERPROC , glMapBuffer, "");
+ GLGETPROC_(PFNGLUNMAPBUFFERPROC , glUnmapBuffer, "");
+ GLGETPROC_(PFNGLENABLEVERTEXATTRIBARRAYPROC , glEnableVertexAttribArray, "");
+ GLGETPROC_(PFNGLDISABLEVERTEXATTRIBARRAYPROC , glDisableVertexAttribArray, "");
+ GLGETPROC_(PFNGLVERTEXATTRIBPOINTERPROC , glVertexAttribPointer, "");
+ GLGETPROC_(PFNGLACTIVETEXTUREPROC , glActiveTexture, "");
+ /* glGetProgramivARB determines implementation limits for the program
+ * target (GL_FRAGMENT_PROGRAM_ARB, GL_VERTEX_PROGRAM_ARB).
+ * It differs from glGetProgramiv, which returns a parameter from a program object.
+ */
+ GLGETPROC_(PFNGLGETPROGRAMIVARBPROC , glGetProgramivARB, "");
+ GLGETPROC_(PFNGLFOGCOORDPOINTERPROC , glFogCoordPointer, "");
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL < 0x102
+ GLGETPROC_(PFNGLBLENDCOLORPROC , glBlendColor, "");
+ GLGETPROC_(PFNGLBLENDEQUATIONPROC , glBlendEquation, "");
+#endif
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL < 0x103
+ GLGETPROC_(PFNGLCLIENTACTIVETEXTUREPROC , glClientActiveTexture, "");
+#endif
+ GLGETPROC_(PFNGLDRAWBUFFERSPROC , glDrawBuffers, "");
+ GLGETPROC_(PFNGLCREATESHADERPROC , glCreateShader, "");
+ GLGETPROC_(PFNGLSHADERSOURCEPROC , glShaderSource, "");
+ GLGETPROC_(PFNGLCOMPILESHADERPROC , glCompileShader, "");
+ GLGETPROC_(PFNGLGETSHADERIVPROC , glGetShaderiv, "");
+ GLGETPROC_(PFNGLGETSHADERINFOLOGPROC , glGetShaderInfoLog, "");
+ GLGETPROC_(PFNGLCREATEPROGRAMPROC , glCreateProgram, "");
+ GLGETPROC_(PFNGLATTACHSHADERPROC , glAttachShader, "");
+ GLGETPROC_(PFNGLLINKPROGRAMPROC , glLinkProgram, "");
+ GLGETPROC_(PFNGLGETPROGRAMIVPROC , glGetProgramiv, "");
+ GLGETPROC_(PFNGLGETPROGRAMINFOLOGPROC , glGetProgramInfoLog, "");
+ GLGETPROC_(PFNGLUSEPROGRAMPROC , glUseProgram, "");
+ GLGETPROC_(PFNGLGETUNIFORMLOCATIONPROC , glGetUniformLocation, "");
+ GLGETPROC_(PFNGLUNIFORM1IPROC , glUniform1i, "");
+ GLGETPROC_(PFNGLUNIFORM4FVPROC , glUniform4fv, "");
+ GLGETPROC_(PFNGLDETACHSHADERPROC , glDetachShader, "");
+ GLGETPROC_(PFNGLDELETESHADERPROC , glDeleteShader, "");
+ GLGETPROC_(PFNGLDELETEPROGRAMPROC , glDeleteProgram, "");
+
+ GLGETPROC_(PFNGLVERTEXATTRIB4FVPROC , glVertexAttrib4fv, "");
+ GLGETPROC_(PFNGLVERTEXATTRIB4UBVPROC , glVertexAttrib4ubv, "");
+ GLGETPROC_(PFNGLVERTEXATTRIB4NUBVPROC , glVertexAttrib4Nubv, "");
+ GLGETPROC_(PFNGLVERTEXATTRIB4SVPROC , glVertexAttrib4sv, "");
+ GLGETPROC_(PFNGLVERTEXATTRIB4NSVPROC , glVertexAttrib4Nsv, "");
+ GLGETPROC_(PFNGLVERTEXATTRIB4NUSVPROC , glVertexAttrib4Nusv, "");
+
+ /* OpenGL 3.0 core, GL_ARB_instanced_arrays. Same functions names in the ARB and core specs. */
+ if ( pState->rsGLVersion >= 3.0f
+ || vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_framebuffer_object "))
+ {
+ GLGETPROC_(PFNGLISRENDERBUFFERPROC , glIsRenderbuffer, "");
+ GLGETPROC_(PFNGLBINDRENDERBUFFERPROC , glBindRenderbuffer, "");
+ GLGETPROC_(PFNGLDELETERENDERBUFFERSPROC , glDeleteRenderbuffers, "");
+ GLGETPROC_(PFNGLGENRENDERBUFFERSPROC , glGenRenderbuffers, "");
+ GLGETPROC_(PFNGLRENDERBUFFERSTORAGEPROC , glRenderbufferStorage, "");
+ GLGETPROC_(PFNGLGETRENDERBUFFERPARAMETERIVPROC , glGetRenderbufferParameteriv, "");
+ GLGETPROC_(PFNGLISFRAMEBUFFERPROC , glIsFramebuffer, "");
+ GLGETPROC_(PFNGLBINDFRAMEBUFFERPROC , glBindFramebuffer, "");
+ GLGETPROC_(PFNGLDELETEFRAMEBUFFERSPROC , glDeleteFramebuffers, "");
+ GLGETPROC_(PFNGLGENFRAMEBUFFERSPROC , glGenFramebuffers, "");
+ GLGETPROC_(PFNGLCHECKFRAMEBUFFERSTATUSPROC , glCheckFramebufferStatus, "");
+ GLGETPROC_(PFNGLFRAMEBUFFERTEXTURE1DPROC , glFramebufferTexture1D, "");
+ GLGETPROC_(PFNGLFRAMEBUFFERTEXTURE2DPROC , glFramebufferTexture2D, "");
+ GLGETPROC_(PFNGLFRAMEBUFFERTEXTURE3DPROC , glFramebufferTexture3D, "");
+ GLGETPROC_(PFNGLFRAMEBUFFERRENDERBUFFERPROC , glFramebufferRenderbuffer, "");
+ GLGETPROC_(PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC , glGetFramebufferAttachmentParameteriv, "");
+ GLGETPROC_(PFNGLGENERATEMIPMAPPROC , glGenerateMipmap, "");
+ GLGETPROC_(PFNGLBLITFRAMEBUFFERPROC , glBlitFramebuffer, "");
+ GLGETPROC_(PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC , glRenderbufferStorageMultisample, "");
+ GLGETPROC_(PFNGLFRAMEBUFFERTEXTURELAYERPROC , glFramebufferTextureLayer, "");
+ }
+
+ /* OpenGL 3.1 core, GL_ARB_draw_instanced, GL_EXT_draw_instanced. */
+ if (pState->rsGLVersion >= 3.1f)
+ {
+ GLGETPROC_(PFNGLDRAWARRAYSINSTANCEDPROC , glDrawArraysInstanced, "");
+ GLGETPROC_(PFNGLDRAWELEMENTSINSTANCEDPROC , glDrawElementsInstanced, "");
+ }
+ else if (vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_draw_instanced "))
+ {
+ GLGETPROC_(PFNGLDRAWARRAYSINSTANCEDPROC , glDrawArraysInstanced, "ARB");
+ GLGETPROC_(PFNGLDRAWELEMENTSINSTANCEDPROC , glDrawElementsInstanced, "ARB");
+ }
+ else if (vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_draw_instanced "))
+ {
+ GLGETPROC_(PFNGLDRAWARRAYSINSTANCEDPROC , glDrawArraysInstanced, "EXT");
+ GLGETPROC_(PFNGLDRAWELEMENTSINSTANCEDPROC , glDrawElementsInstanced, "EXT");
+ }
+
+ /* OpenGL 3.2 core, GL_ARB_draw_elements_base_vertex. Same functions names in the ARB and core specs. */
+ if ( pState->rsGLVersion >= 3.2f
+ || vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_draw_elements_base_vertex "))
+ {
+ GLGETPROC_(PFNGLDRAWELEMENTSBASEVERTEXPROC , glDrawElementsBaseVertex, "");
+ GLGETPROC_(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC , glDrawElementsInstancedBaseVertex, "");
+ }
+
+ /* Optional. OpenGL 3.2 core, GL_ARB_provoking_vertex. Same functions names in the ARB and core specs. */
+ if ( pState->rsGLVersion >= 3.2f
+ || vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_provoking_vertex "))
+ {
+ GLGETPROCOPT_(PFNGLPROVOKINGVERTEXPROC , glProvokingVertex, "");
+ }
+
+ /* OpenGL 3.3 core, GL_ARB_instanced_arrays. */
+ if (pState->rsGLVersion >= 3.3f)
+ {
+ GLGETPROC_(PFNGLVERTEXATTRIBDIVISORPROC , glVertexAttribDivisor, "");
+ }
+ else if (vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_instanced_arrays "))
+ {
+ GLGETPROC_(PFNGLVERTEXATTRIBDIVISORARBPROC , glVertexAttribDivisor, "ARB");
+ }
+
+#undef GLGETPROCOPT_
+#undef GLGETPROC_
+
+ return VINF_SUCCESS;
+}
+
+
+DECLINLINE(GLenum) vmsvga3dCubemapFaceFromIndex(uint32_t iFace)
+{
+ GLint Face;
+ switch (iFace)
+ {
+ case 0: Face = GL_TEXTURE_CUBE_MAP_POSITIVE_X; break;
+ case 1: Face = GL_TEXTURE_CUBE_MAP_NEGATIVE_X; break;
+ case 2: Face = GL_TEXTURE_CUBE_MAP_POSITIVE_Y; break;
+ case 3: Face = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y; break;
+ case 4: Face = GL_TEXTURE_CUBE_MAP_POSITIVE_Z; break;
+ default:
+ case 5: Face = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; break;
+ }
+ return Face;
+}
+
+
+/* We must delay window creation until the PowerOn phase. Init is too early and will cause failures. */
+static DECLCALLBACK(int) vmsvga3dBackPowerOn(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+ PVMSVGA3DCONTEXT pContext;
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ PVMSVGA3DCONTEXT pOtherCtx;
+#endif
+ int rc;
+ RT_NOREF(pDevIns, pThis);
+
+ if (pState->rsGLVersion != 0.0)
+ return VINF_SUCCESS; /* already initialized (load state) */
+
+ /*
+ * OpenGL function calls aren't possible without a valid current context, so create a fake one here.
+ */
+ rc = vmsvga3dContextDefineOgl(pThisCC, 1, VMSVGA3D_DEF_CTX_F_INIT);
+ AssertRCReturn(rc, rc);
+
+ pContext = pState->papContexts[1];
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+#ifdef VMSVGA3D_DYNAMIC_LOAD
+ /* Context is set and it is possible now to resolve extension functions. */
+ rc = glLdrGetExtFunctions(pDevIns);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: Error resolving extension functions: %Rrc\n", rc));
+ return rc;
+ }
+#endif
+
+ LogRel(("VMSVGA3d: OpenGL version: %s\n"
+ "VMSVGA3d: OpenGL Vendor: %s\n"
+ "VMSVGA3d: OpenGL Renderer: %s\n"
+ "VMSVGA3d: OpenGL shader language version: %s\n",
+ glGetString(GL_VERSION), glGetString(GL_VENDOR), glGetString(GL_RENDERER),
+ glGetString(GL_SHADING_LANGUAGE_VERSION)));
+
+ rc = vmsvga3dGatherExtensions(&pState->pszExtensions, VBOX_VMSVGA3D_DEFAULT_OGL_PROFILE);
+ AssertRCReturn(rc, rc);
+ vmsvga3dLogRelExtensions("", pState->pszExtensions);
+
+ pState->rsGLVersion = atof((const char *)glGetString(GL_VERSION));
+
+
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ /*
+ * Get the extension list for the alternative profile so we can better
+ * figure out the shader model and stuff.
+ */
+ rc = vmsvga3dContextDefineOgl(pThisCC, 2, VMSVGA3D_DEF_CTX_F_INIT | VMSVGA3D_DEF_CTX_F_OTHER_PROFILE);
+ AssertLogRelRCReturn(rc, rc);
+ pContext = pState->papContexts[1]; /* Array may have been reallocated. */
+
+ pOtherCtx = pState->papContexts[2];
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pOtherCtx);
+
+ LogRel(("VMSVGA3d: Alternative OpenGL version: %s\n"
+ "VMSVGA3d: Alternative OpenGL Vendor: %s\n"
+ "VMSVGA3d: Alternative OpenGL Renderer: %s\n"
+ "VMSVGA3d: Alternative OpenGL shader language version: %s\n",
+ glGetString(GL_VERSION), glGetString(GL_VENDOR), glGetString(GL_RENDERER),
+ glGetString(GL_SHADING_LANGUAGE_VERSION)));
+
+ rc = vmsvga3dGatherExtensions(&pState->pszOtherExtensions, VBOX_VMSVGA3D_OTHER_OGL_PROFILE);
+ AssertRCReturn(rc, rc);
+ vmsvga3dLogRelExtensions("Alternative ", pState->pszOtherExtensions);
+
+ pState->rsOtherGLVersion = atof((const char *)glGetString(GL_VERSION));
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+#else
+ pState->pszOtherExtensions = (char *)"";
+ pState->rsOtherGLVersion = pState->rsGLVersion;
+#endif
+
+ /*
+ * Resolve GL function pointers and store them in pState->ext.
+ */
+ rc = vmsvga3dLoadGLFunctions(pState);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("VMSVGA3d: missing required OpenGL function or extension; aborting\n"));
+ return rc;
+ }
+
+ /*
+ * Initialize the capabilities with sensible defaults.
+ */
+ pState->caps.maxActiveLights = 1;
+ pState->caps.maxTextures = 1;
+ pState->caps.maxClipDistances = 4;
+ pState->caps.maxColorAttachments = 1;
+ pState->caps.maxRectangleTextureSize = 2048;
+ pState->caps.maxTextureAnisotropy = 1;
+ pState->caps.maxVertexShaderInstructions = 1024;
+ pState->caps.maxFragmentShaderInstructions = 1024;
+ pState->caps.vertexShaderVersion = SVGA3DVSVERSION_NONE;
+ pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_NONE;
+ pState->caps.flPointSize[0] = 1;
+ pState->caps.flPointSize[1] = 1;
+
+ /*
+ * Query capabilities
+ */
+ pState->caps.fS3TCSupported = vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_texture_compression_s3tc ");
+ pState->caps.fTextureFilterAnisotropicSupported = vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_texture_filter_anisotropic ");
+
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx, glGetIntegerv(GL_MAX_LIGHTS, &pState->caps.maxActiveLights));
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx, glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &pState->caps.maxTextures));
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE /* The alternative profile has a higher number here (ati/darwin). */
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pOtherCtx);
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pOtherCtx, pContext, glGetIntegerv(GL_MAX_CLIP_DISTANCES, &pState->caps.maxClipDistances));
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+#else
+ VMSVGA3D_INIT_CHECKED(glGetIntegerv(GL_MAX_CLIP_DISTANCES, &pState->caps.maxClipDistances));
+#endif
+ VMSVGA3D_INIT_CHECKED(glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &pState->caps.maxColorAttachments));
+ VMSVGA3D_INIT_CHECKED(glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE, &pState->caps.maxRectangleTextureSize));
+ if (pState->caps.fTextureFilterAnisotropicSupported)
+ VMSVGA3D_INIT_CHECKED(glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &pState->caps.maxTextureAnisotropy));
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx, glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, pState->caps.flPointSize));
+
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx,
+ pState->ext.glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB,
+ &pState->caps.maxFragmentShaderTemps));
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx,
+ pState->ext.glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB,
+ &pState->caps.maxFragmentShaderInstructions));
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx,
+ pState->ext.glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB,
+ &pState->caps.maxVertexShaderTemps));
+ VMSVGA3D_INIT_CHECKED_BOTH(pState, pContext, pOtherCtx,
+ pState->ext.glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB,
+ &pState->caps.maxVertexShaderInstructions));
+
+ /* http://http://www.opengl.org/wiki/Detecting_the_Shader_Model
+ * ARB Assembly Language
+ * These are done through testing the presence of extensions. You should test them in this order:
+ * GL_NV_gpu_program4: SM 4.0 or better.
+ * GL_NV_vertex_program3: SM 3.0 or better.
+ * GL_ARB_fragment_program: SM 2.0 or better.
+ * ATI does not support higher than SM 2.0 functionality in assembly shaders.
+ *
+ */
+ /** @todo distinguish between vertex and pixel shaders??? */
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE /* The alternative profile has a higher number here (ati/darwin). */
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pOtherCtx);
+ const char *pszShadingLanguageVersion = (const char *)glGetString(GL_SHADING_LANGUAGE_VERSION);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+#else
+ const char *pszShadingLanguageVersion = (const char *)glGetString(GL_SHADING_LANGUAGE_VERSION);
+#endif
+ float v = pszShadingLanguageVersion ? atof(pszShadingLanguageVersion) : 0.0f;
+ if ( vmsvga3dCheckGLExtension(pState, 0.0f, " GL_NV_gpu_program4 ")
+ || strstr(pState->pszOtherExtensions, " GL_NV_gpu_program4 "))
+ {
+ pState->caps.vertexShaderVersion = SVGA3DVSVERSION_40;
+ pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_40;
+ }
+ else
+ if ( vmsvga3dCheckGLExtension(pState, 0.0f, " GL_NV_vertex_program3 ")
+ || strstr(pState->pszOtherExtensions, " GL_NV_vertex_program3 ")
+ || vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_shader_texture_lod ") /* Wine claims this suggests SM 3.0 support */
+ || strstr(pState->pszOtherExtensions, " GL_ARB_shader_texture_lod ")
+ )
+ {
+ pState->caps.vertexShaderVersion = SVGA3DVSVERSION_30;
+ pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_30;
+ }
+ else
+ if ( vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_fragment_program ")
+ || strstr(pState->pszOtherExtensions, " GL_ARB_fragment_program "))
+ {
+ pState->caps.vertexShaderVersion = SVGA3DVSVERSION_20;
+ pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_20;
+ }
+ else
+ {
+ LogRel(("VMSVGA3D: WARNING: unknown support for assembly shaders!!\n"));
+ pState->caps.vertexShaderVersion = SVGA3DVSVERSION_11;
+ pState->caps.fragmentShaderVersion = SVGA3DPSVERSION_11;
+ }
+
+ /* Now check the shading language version, in case it indicates a higher supported version. */
+ if (v >= 3.30f)
+ {
+ pState->caps.vertexShaderVersion = RT_MAX(pState->caps.vertexShaderVersion, SVGA3DVSVERSION_40);
+ pState->caps.fragmentShaderVersion = RT_MAX(pState->caps.fragmentShaderVersion, SVGA3DPSVERSION_40);
+ }
+ else
+ if (v >= 1.20f)
+ {
+ pState->caps.vertexShaderVersion = RT_MAX(pState->caps.vertexShaderVersion, SVGA3DVSVERSION_20);
+ pState->caps.fragmentShaderVersion = RT_MAX(pState->caps.fragmentShaderVersion, SVGA3DPSVERSION_20);
+ }
+
+ if ( !vmsvga3dCheckGLExtension(pState, 0.0f, " GL_ARB_vertex_array_bgra ")
+ && !vmsvga3dCheckGLExtension(pState, 0.0f, " GL_EXT_vertex_array_bgra "))
+ {
+ LogRel(("VMSVGA3D: WARNING: Missing required extension GL_ARB_vertex_array_bgra (d3dcolor)!!!\n"));
+ }
+
+ /*
+ * Tweak capabilities.
+ */
+ /* Intel Windows drivers return 31, while the guest expects 32 at least. */
+ if ( pState->caps.maxVertexShaderTemps < 32
+ && vmsvga3dIsVendorIntel())
+ pState->caps.maxVertexShaderTemps = 32;
+
+#if 0
+ SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND = 11,
+ SVGA3D_DEVCAP_QUERY_TYPES = 15,
+ SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING = 16,
+ SVGA3D_DEVCAP_MAX_POINT_SIZE = 17,
+ SVGA3D_DEVCAP_MAX_SHADER_TEXTURES = 18,
+ SVGA3D_DEVCAP_MAX_VOLUME_EXTENT = 21,
+ SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT = 22,
+ SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO = 23,
+ SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY = 24,
+ SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT = 25,
+ SVGA3D_DEVCAP_MAX_VERTEX_INDEX = 26,
+ SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS = 28,
+ SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS = 29,
+ SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS = 30,
+ SVGA3D_DEVCAP_TEXTURE_OPS = 31,
+ SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 = 32,
+ SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 = 33,
+ SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 = 34,
+ SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 = 35,
+ SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 = 36,
+ SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 = 37,
+ SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 = 38,
+ SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16 = 39,
+ SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8 = 40,
+ SVGA3D_DEVCAP_SURFACEFMT_ALPHA8 = 41,
+ SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8 = 42,
+ SVGA3D_DEVCAP_SURFACEFMT_Z_D16 = 43,
+ SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8 = 44,
+ SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8 = 45,
+ SVGA3D_DEVCAP_SURFACEFMT_DXT1 = 46,
+ SVGA3D_DEVCAP_SURFACEFMT_DXT2 = 47,
+ SVGA3D_DEVCAP_SURFACEFMT_DXT3 = 48,
+ SVGA3D_DEVCAP_SURFACEFMT_DXT4 = 49,
+ SVGA3D_DEVCAP_SURFACEFMT_DXT5 = 50,
+ SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8 = 51,
+ SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10 = 52,
+ SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8 = 53,
+ SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8 = 54,
+ SVGA3D_DEVCAP_SURFACEFMT_CxV8U8 = 55,
+ SVGA3D_DEVCAP_SURFACEFMT_R_S10E5 = 56,
+ SVGA3D_DEVCAP_SURFACEFMT_R_S23E8 = 57,
+ SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5 = 58,
+ SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8 = 59,
+ SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5 = 60,
+ SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8 = 61,
+ SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES = 63,
+ SVGA3D_DEVCAP_SURFACEFMT_V16U16 = 65,
+ SVGA3D_DEVCAP_SURFACEFMT_G16R16 = 66,
+ SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16 = 67,
+ SVGA3D_DEVCAP_SURFACEFMT_UYVY = 68,
+ SVGA3D_DEVCAP_SURFACEFMT_YUY2 = 69,
+ SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES = 70,
+ SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES = 71,
+ SVGA3D_DEVCAP_ALPHATOCOVERAGE = 72,
+ SVGA3D_DEVCAP_SUPERSAMPLE = 73,
+ SVGA3D_DEVCAP_AUTOGENMIPMAPS = 74,
+ SVGA3D_DEVCAP_SURFACEFMT_NV12 = 75,
+ SVGA3D_DEVCAP_SURFACEFMT_AYUV = 76,
+ SVGA3D_DEVCAP_SURFACEFMT_Z_DF16 = 79,
+ SVGA3D_DEVCAP_SURFACEFMT_Z_DF24 = 80,
+ SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT = 81,
+ SVGA3D_DEVCAP_SURFACEFMT_ATI1 = 82,
+ SVGA3D_DEVCAP_SURFACEFMT_ATI2 = 83,
+#endif
+
+ LogRel(("VMSVGA3d: Capabilities:\n"));
+ LogRel(("VMSVGA3d: maxActiveLights=%-2d maxTextures=%-2d\n",
+ pState->caps.maxActiveLights, pState->caps.maxTextures));
+ LogRel(("VMSVGA3d: maxClipDistances=%-2d maxColorAttachments=%-2d maxClipDistances=%d\n",
+ pState->caps.maxClipDistances, pState->caps.maxColorAttachments, pState->caps.maxClipDistances));
+ LogRel(("VMSVGA3d: maxColorAttachments=%-2d maxTextureAnisotropy=%-2d maxRectangleTextureSize=%d\n",
+ pState->caps.maxColorAttachments, pState->caps.maxTextureAnisotropy, pState->caps.maxRectangleTextureSize));
+ LogRel(("VMSVGA3d: maxVertexShaderTemps=%-2d maxVertexShaderInstructions=%d maxFragmentShaderInstructions=%d\n",
+ pState->caps.maxVertexShaderTemps, pState->caps.maxVertexShaderInstructions, pState->caps.maxFragmentShaderInstructions));
+ LogRel(("VMSVGA3d: maxFragmentShaderTemps=%d flPointSize={%d.%02u, %d.%02u}\n",
+ pState->caps.maxFragmentShaderTemps,
+ (int)pState->caps.flPointSize[0], (int)(pState->caps.flPointSize[0] * 100) % 100,
+ (int)pState->caps.flPointSize[1], (int)(pState->caps.flPointSize[1] * 100) % 100));
+ LogRel(("VMSVGA3d: fragmentShaderVersion=%-2d vertexShaderVersion=%-2d\n",
+ pState->caps.fragmentShaderVersion, pState->caps.vertexShaderVersion));
+ LogRel(("VMSVGA3d: fS3TCSupported=%-2d fTextureFilterAnisotropicSupported=%d\n",
+ pState->caps.fS3TCSupported, pState->caps.fTextureFilterAnisotropicSupported));
+
+
+ /* Initialize the shader library. */
+ pState->ShaderIf.pfnSwitchInitProfile = vmsvga3dShaderIfSwitchInitProfile;
+ pState->ShaderIf.pfnGetNextExtension = vmsvga3dShaderIfGetNextExtension;
+ rc = ShaderInitLib(&pState->ShaderIf);
+ AssertRC(rc);
+
+ /* Cleanup */
+ rc = vmsvga3dBackContextDestroy(pThisCC, 1);
+ AssertRC(rc);
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ rc = vmsvga3dBackContextDestroy(pThisCC, 2);
+ AssertRC(rc);
+#endif
+
+ if ( pState->rsGLVersion < 3.0
+ && pState->rsOtherGLVersion < 3.0 /* darwin: legacy profile hack */)
+ {
+ LogRel(("VMSVGA3d: unsupported OpenGL version; minimum is 3.0\n"));
+ return VERR_NOT_IMPLEMENTED;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackReset(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+
+ /* Destroy all leftover surfaces. */
+ for (uint32_t i = 0; i < pState->cSurfaces; i++)
+ {
+ if (pState->papSurfaces[i]->id != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceDestroy(pThisCC, pState->papSurfaces[i]->id);
+ }
+
+ /* Destroy all leftover contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ if (pState->papContexts[i]->id != SVGA3D_INVALID_ID)
+ vmsvga3dBackContextDestroy(pThisCC, pState->papContexts[i]->id);
+ }
+
+ if (pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ vmsvga3dContextDestroyOgl(pThisCC, &pState->SharedCtx, VMSVGA3D_SHARED_CTX_ID);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackTerminate(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_WRONG_ORDER);
+ int rc;
+
+ rc = vmsvga3dBackReset(pThisCC);
+ AssertRCReturn(rc, rc);
+
+ /* Terminate the shader library. */
+ rc = ShaderDestroyLib();
+ AssertRC(rc);
+
+#ifdef RT_OS_WINDOWS
+ /* Terminate the window creation thread. */
+ rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_EXIT, 0, 0);
+ AssertRCReturn(rc, rc);
+
+ RTSemEventDestroy(pState->WndRequestSem);
+#elif defined(RT_OS_DARWIN)
+
+#elif defined(RT_OS_LINUX)
+ /* signal to the thread that it is supposed to exit */
+ pState->bTerminate = true;
+ /* wait for it to terminate */
+ rc = RTThreadWait(pState->pWindowThread, 10000, NULL);
+ AssertRC(rc);
+ XCloseDisplay(pState->display);
+#endif
+
+ RTStrFree(pState->pszExtensions);
+ pState->pszExtensions = NULL;
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ RTStrFree(pState->pszOtherExtensions);
+#endif
+ pState->pszOtherExtensions = NULL;
+
+ /* Free all leftover surface states. */
+ for (uint32_t i = 0; i < pState->cSurfaces; i++)
+ {
+ AssertPtr(pState->papSurfaces[i]);
+ RTMemFree(pState->papSurfaces[i]);
+ pState->papSurfaces[i] = NULL;
+ }
+
+ /* Destroy all leftover contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ AssertPtr(pState->papContexts[i]);
+ RTMemFree(pState->papContexts[i]);
+ pState->papContexts[i] = NULL;
+ }
+
+ if (pState->papSurfaces)
+ {
+ RTMemFree(pState->papSurfaces);
+ pState->papSurfaces = NULL;
+ }
+
+ if (pState->papContexts)
+ {
+ RTMemFree(pState->papContexts);
+ pState->papContexts = NULL;
+ }
+
+ pThisCC->svga.p3dState = NULL;
+ RTMemFree(pState);
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(void) vmsvga3dBackUpdateHostScreenViewport(PVGASTATECC pThisCC, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport)
+{
+ /** @todo Move the visible framebuffer content here, don't wait for the guest to
+ * redraw it. */
+
+#ifdef RT_OS_DARWIN
+ RT_NOREF(pOldViewport);
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ if ( pState
+ && idScreen == 0
+ && pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ {
+ vmsvga3dCocoaViewUpdateViewport(pState->SharedCtx.cocoaView);
+ }
+#else
+ RT_NOREF(pThisCC, idScreen, pOldViewport);
+#endif
+}
+
+
+/**
+ * Worker for vmsvga3dBackQueryCaps that figures out supported operations for a
+ * given surface format capability.
+ *
+ * @returns Supported/indented operations (SVGA3DFORMAT_OP_XXX).
+ * @param idx3dCaps The SVGA3D_CAPS_XXX value of the surface format.
+ *
+ * @remarks See fromat_cap_table in svga_format.c (mesa/gallium) for a reference
+ * of implicit guest expectations:
+ * http://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/svga/svga_format.c
+ */
+static uint32_t vmsvga3dGetSurfaceFormatSupport(uint32_t idx3dCaps)
+{
+ uint32_t result = 0;
+
+ /** @todo missing:
+ *
+ * SVGA3DFORMAT_OP_PIXELSIZE
+ */
+
+ switch (idx3dCaps)
+ {
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
+ | SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+ | SVGA3DFORMAT_OP_DISPLAYMODE /* Should not be set for alpha formats. */
+ | SVGA3DFORMAT_OP_3DACCELERATION; /* implies OP_DISPLAYMODE */
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
+ | SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+ | SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET;
+ break;
+ }
+
+ /** @todo check hardware caps! */
+ switch (idx3dCaps)
+ {
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+ case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+ result |= SVGA3DFORMAT_OP_TEXTURE
+ | SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
+ | SVGA3DFORMAT_OP_OFFSCREENPLAIN
+ | SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
+ | SVGA3DFORMAT_OP_VOLUMETEXTURE
+ | SVGA3DFORMAT_OP_CUBETEXTURE
+ | SVGA3DFORMAT_OP_SRGBREAD
+ | SVGA3DFORMAT_OP_SRGBWRITE;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+ result |= SVGA3DFORMAT_OP_ZSTENCIL
+ | SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
+ | SVGA3DFORMAT_OP_TEXTURE /* Necessary for Ubuntu Unity */;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+ result |= SVGA3DFORMAT_OP_TEXTURE
+ | SVGA3DFORMAT_OP_VOLUMETEXTURE
+ | SVGA3DFORMAT_OP_CUBETEXTURE
+ | SVGA3DFORMAT_OP_SRGBREAD;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+ result |= SVGA3DFORMAT_OP_TEXTURE
+ | SVGA3DFORMAT_OP_VOLUMETEXTURE
+ | SVGA3DFORMAT_OP_CUBETEXTURE
+ | SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+ case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+ case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+ result |= SVGA3DFORMAT_OP_TEXTURE
+ | SVGA3DFORMAT_OP_VOLUMETEXTURE
+ | SVGA3DFORMAT_OP_CUBETEXTURE
+ | SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ result |= SVGA3DFORMAT_OP_OFFSCREENPLAIN
+ | SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+ | SVGA3DFORMAT_OP_TEXTURE;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+ case SVGA3D_DEVCAP_DEAD10: /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ break;
+ }
+ Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+
+ return result;
+}
+
+#if 0 /* unused */
+static uint32_t vmsvga3dGetDepthFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps)
+{
+ RT_NOREF(pState3D, idx3dCaps);
+
+ /** @todo test this somehow */
+ uint32_t result = SVGA3DFORMAT_OP_ZSTENCIL | SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH;
+
+ Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+ return result;
+}
+#endif
+
+
+static DECLCALLBACK(int) vmsvga3dBackQueryCaps(PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ int rc = VINF_SUCCESS;
+
+ *pu32Val = 0;
+
+ /*
+ * The capabilities access by current (2015-03-01) linux sources (gallium,
+ * vmwgfx, xorg-video-vmware) are annotated, caps without xref annotations
+ * aren't access.
+ */
+
+ switch (idx3dCaps)
+ {
+ /* Linux: vmwgfx_fifo.c in kmod; only used with SVGA_CAP_GBOBJECTS. */
+ case SVGA3D_DEVCAP_3D:
+ *pu32Val = 1; /* boolean? */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_LIGHTS:
+ *pu32Val = pState->caps.maxActiveLights;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURES:
+ *pu32Val = pState->caps.maxTextures;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+ *pu32Val = pState->caps.maxClipDistances;
+ break;
+
+ /* Linux: svga_screen.c in gallium; 3.0 or later required. */
+ case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+ *pu32Val = pState->caps.vertexShaderVersion;
+ break;
+
+ case SVGA3D_DEVCAP_VERTEX_SHADER:
+ /* boolean? */
+ *pu32Val = (pState->caps.vertexShaderVersion != SVGA3DVSVERSION_NONE);
+ break;
+
+ /* Linux: svga_screen.c in gallium; 3.0 or later required. */
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+ *pu32Val = pState->caps.fragmentShaderVersion;
+ break;
+
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+ /* boolean? */
+ *pu32Val = (pState->caps.fragmentShaderVersion != SVGA3DPSVERSION_NONE);
+ break;
+
+ case SVGA3D_DEVCAP_S23E8_TEXTURES:
+ case SVGA3D_DEVCAP_S10E5_TEXTURES:
+ /* Must be obsolete by now; surface format caps specify the same thing. */
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+ break;
+
+ /*
+ * 2. The BUFFER_FORMAT capabilities are deprecated, and they always
+ * return TRUE. Even on physical hardware that does not support
+ * these formats natively, the SVGA3D device will provide an emulation
+ * which should be invisible to the guest OS.
+ */
+ case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+ case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+ case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_QUERY_TYPES:
+ break;
+
+ case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+ break;
+
+ /* Linux: svga_screen.c in gallium; capped at 80.0, default 1.0. */
+ case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+ AssertCompile(sizeof(uint32_t) == sizeof(float));
+ *(float *)pu32Val = pState->caps.flPointSize[1];
+ break;
+
+ case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+ /** @todo ?? */
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ /* Linux: svga_screen.c in gallium (for PIPE_CAP_MAX_TEXTURE_2D_LEVELS); have default if missing. */
+ case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+ case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+ *pu32Val = pState->caps.maxRectangleTextureSize;
+ break;
+
+ /* Linux: svga_screen.c in gallium (for PIPE_CAP_MAX_TEXTURE_3D_LEVELS); have default if missing. */
+ case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+ //*pu32Val = pCaps->MaxVolumeExtent;
+ *pu32Val = 256;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+ *pu32Val = 32768; /* hardcoded in Wine */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+ //*pu32Val = pCaps->MaxTextureAspectRatio;
+ break;
+
+ /* Linux: svga_screen.c in gallium (for PIPE_CAPF_MAX_TEXTURE_ANISOTROPY); defaults to 4.0. */
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+ *pu32Val = pState->caps.maxTextureAnisotropy;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+ case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+ *pu32Val = 0xFFFFF; /* hardcoded in Wine */
+ break;
+
+ /* Linux: svga_screen.c in gallium (for PIPE_SHADER_VERTEX/PIPE_SHADER_CAP_MAX_INSTRUCTIONS); defaults to 512. */
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+ *pu32Val = pState->caps.maxVertexShaderInstructions;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+ *pu32Val = pState->caps.maxFragmentShaderInstructions;
+ break;
+
+ /* Linux: svga_screen.c in gallium (for PIPE_SHADER_VERTEX/PIPE_SHADER_CAP_MAX_TEMPS); defaults to 32. */
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+ *pu32Val = pState->caps.maxVertexShaderTemps;
+ break;
+
+ /* Linux: svga_screen.c in gallium (for PIPE_SHADER_FRAGMENT/PIPE_SHADER_CAP_MAX_TEMPS); defaults to 32. */
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+ *pu32Val = pState->caps.maxFragmentShaderTemps;
+ break;
+
+ case SVGA3D_DEVCAP_TEXTURE_OPS:
+ break;
+
+ case SVGA3D_DEVCAP_DEAD4: /* SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD5: /* SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD7: /* SVGA3D_DEVCAP_ALPHATOCOVERAGE */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD6: /* SVGA3D_DEVCAP_SUPERSAMPLE */
+ break;
+
+ case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+ //*pu32Val = !!(pCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP);
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+ break;
+
+ case SVGA3D_DEVCAP_MAX_RENDER_TARGETS: /** @todo same thing? */
+ case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+ *pu32Val = pState->caps.maxColorAttachments;
+ break;
+
+ /*
+ * This is the maximum number of SVGA context IDs that the guest
+ * can define using SVGA_3D_CMD_CONTEXT_DEFINE.
+ */
+ case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+ *pu32Val = SVGA3D_MAX_CONTEXT_IDS;
+ break;
+
+ /*
+ * This is the maximum number of SVGA surface IDs that the guest
+ * can define using SVGA_3D_CMD_SURFACE_DEFINE*.
+ */
+ case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+ *pu32Val = SVGA3D_MAX_SURFACE_IDS;
+ break;
+
+#if 0 /* Appeared more recently, not yet implemented. */
+ /* Linux: svga_screen.c in gallium; defaults to FALSE. */
+ case SVGA3D_DEVCAP_LINE_AA:
+ break;
+ /* Linux: svga_screen.c in gallium; defaults to FALSE. */
+ case SVGA3D_DEVCAP_LINE_STIPPLE:
+ break;
+ /* Linux: svga_screen.c in gallium; defaults to 1.0. */
+ case SVGA3D_DEVCAP_MAX_LINE_WIDTH:
+ break;
+ /* Linux: svga_screen.c in gallium; defaults to 1.0. */
+ case SVGA3D_DEVCAP_MAX_AA_LINE_WIDTH:
+ break;
+#endif
+
+ /*
+ * Supported surface formats.
+ * Linux: svga_format.c in gallium, format_cap_table defines implicit expectations.
+ */
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+ case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(idx3dCaps);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+ case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+ case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+ case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+ case SVGA3D_DEVCAP_DEAD10: /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(idx3dCaps);
+ break;
+
+ /* Linux: Not referenced in current sources. */
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI1:
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI2:
+ Log(("CAPS: Unknown CAP %s\n", vmsvga3dGetCapString(idx3dCaps)));
+ rc = VERR_INVALID_PARAMETER;
+ *pu32Val = 0;
+ break;
+
+ default:
+ Log(("CAPS: Unexpected CAP %d\n", idx3dCaps));
+ rc = VERR_INVALID_PARAMETER;
+ break;
+ }
+
+ Log(("CAPS: %s - %x\n", vmsvga3dGetCapString(idx3dCaps), *pu32Val));
+ return rc;
+}
+
+/**
+ * Convert SVGA format value to its OpenGL equivalent
+ *
+ * @remarks Clues to be had in format_texture_info table (wined3d/utils.c) with
+ * help from wined3dformat_from_d3dformat().
+ */
+void vmsvga3dSurfaceFormat2OGL(PVMSVGA3DSURFACE pSurface, SVGA3dSurfaceFormat format)
+{
+#if 0
+#define AssertTestFmt(f) AssertMsgFailed(("Test me - " #f "\n"))
+#else
+#define AssertTestFmt(f) do {} while(0)
+#endif
+ /* Init cbBlockGL for non-emulated formats. */
+ pSurface->cbBlockGL = pSurface->cbBlock;
+
+ switch (format)
+ {
+ case SVGA3D_X8R8G8B8: /* D3DFMT_X8R8G8B8 - WINED3DFMT_B8G8R8X8_UNORM */
+ pSurface->internalFormatGL = GL_RGB8;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+ break;
+ case SVGA3D_A8R8G8B8: /* D3DFMT_A8R8G8B8 - WINED3DFMT_B8G8R8A8_UNORM */
+ pSurface->internalFormatGL = GL_RGBA8;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+ break;
+ case SVGA3D_R5G6B5: /* D3DFMT_R5G6B5 - WINED3DFMT_B5G6R5_UNORM */
+ pSurface->internalFormatGL = GL_RGB5;
+ pSurface->formatGL = GL_RGB;
+ pSurface->typeGL = GL_UNSIGNED_SHORT_5_6_5;
+ AssertTestFmt(SVGA3D_R5G6B5);
+ break;
+ case SVGA3D_X1R5G5B5: /* D3DFMT_X1R5G5B5 - WINED3DFMT_B5G5R5X1_UNORM */
+ pSurface->internalFormatGL = GL_RGB5;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_SHORT_1_5_5_5_REV;
+ AssertTestFmt(SVGA3D_X1R5G5B5);
+ break;
+ case SVGA3D_A1R5G5B5: /* D3DFMT_A1R5G5B5 - WINED3DFMT_B5G5R5A1_UNORM */
+ pSurface->internalFormatGL = GL_RGB5_A1;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_SHORT_1_5_5_5_REV;
+ AssertTestFmt(SVGA3D_A1R5G5B5);
+ break;
+ case SVGA3D_A4R4G4B4: /* D3DFMT_A4R4G4B4 - WINED3DFMT_B4G4R4A4_UNORM */
+ pSurface->internalFormatGL = GL_RGBA4;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_SHORT_4_4_4_4_REV;
+ AssertTestFmt(SVGA3D_A4R4G4B4);
+ break;
+
+ case SVGA3D_R8G8B8A8_UNORM:
+ pSurface->internalFormatGL = GL_RGBA8;
+ pSurface->formatGL = GL_RGBA;
+ pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+ break;
+
+ case SVGA3D_Z_D32: /* D3DFMT_D32 - WINED3DFMT_D32_UNORM */
+ pSurface->internalFormatGL = GL_DEPTH_COMPONENT32;
+ pSurface->formatGL = GL_DEPTH_COMPONENT;
+ pSurface->typeGL = GL_UNSIGNED_INT;
+ break;
+ case SVGA3D_Z_D16: /* D3DFMT_D16 - WINED3DFMT_D16_UNORM */
+ pSurface->internalFormatGL = GL_DEPTH_COMPONENT16; /** @todo Wine suggests GL_DEPTH_COMPONENT24. */
+ pSurface->formatGL = GL_DEPTH_COMPONENT;
+ pSurface->typeGL = GL_UNSIGNED_SHORT;
+ AssertTestFmt(SVGA3D_Z_D16);
+ break;
+ case SVGA3D_Z_D24S8: /* D3DFMT_D24S8 - WINED3DFMT_D24_UNORM_S8_UINT */
+ pSurface->internalFormatGL = GL_DEPTH24_STENCIL8;
+ pSurface->formatGL = GL_DEPTH_STENCIL;
+ pSurface->typeGL = GL_UNSIGNED_INT_24_8;
+ break;
+ case SVGA3D_Z_D15S1: /* D3DFMT_D15S1 - WINED3DFMT_S1_UINT_D15_UNORM */
+ pSurface->internalFormatGL = GL_DEPTH_COMPONENT16; /** @todo ??? */
+ pSurface->formatGL = GL_DEPTH_STENCIL;
+ pSurface->typeGL = GL_UNSIGNED_SHORT;
+ /** @todo Wine sources hints at no hw support for this, so test this one! */
+ AssertTestFmt(SVGA3D_Z_D15S1);
+ break;
+ case SVGA3D_Z_D24X8: /* D3DFMT_D24X8 - WINED3DFMT_X8D24_UNORM */
+ pSurface->internalFormatGL = GL_DEPTH_COMPONENT24;
+ pSurface->formatGL = GL_DEPTH_COMPONENT;
+ pSurface->typeGL = GL_UNSIGNED_INT;
+ AssertTestFmt(SVGA3D_Z_D24X8);
+ break;
+
+ /* Advanced D3D9 depth formats. */
+ case SVGA3D_Z_DF16: /* D3DFMT_DF16? - not supported */
+ pSurface->internalFormatGL = GL_DEPTH_COMPONENT16;
+ pSurface->formatGL = GL_DEPTH_COMPONENT;
+ pSurface->typeGL = GL_HALF_FLOAT;
+ break;
+
+ case SVGA3D_Z_DF24: /* D3DFMT_DF24? - not supported */
+ pSurface->internalFormatGL = GL_DEPTH_COMPONENT24;
+ pSurface->formatGL = GL_DEPTH_COMPONENT;
+ pSurface->typeGL = GL_FLOAT; /* ??? */
+ break;
+
+ case SVGA3D_Z_D24S8_INT: /* D3DFMT_D24S8 */
+ pSurface->internalFormatGL = GL_DEPTH24_STENCIL8;
+ pSurface->formatGL = GL_DEPTH_STENCIL;
+ pSurface->typeGL = GL_UNSIGNED_INT_24_8;
+ break;
+
+ case SVGA3D_DXT1: /* D3DFMT_DXT1 - WINED3DFMT_DXT1 */
+ pSurface->internalFormatGL = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+ pSurface->formatGL = GL_RGBA; /* not used */
+ pSurface->typeGL = GL_UNSIGNED_BYTE; /* not used */
+ break;
+
+ case SVGA3D_DXT2: /* D3DFMT_DXT2 */
+ /* "DXT2 and DXT3 are the same from an API perspective." */
+ RT_FALL_THRU();
+ case SVGA3D_DXT3: /* D3DFMT_DXT3 - WINED3DFMT_DXT3 */
+ pSurface->internalFormatGL = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
+ pSurface->formatGL = GL_RGBA; /* not used */
+ pSurface->typeGL = GL_UNSIGNED_BYTE; /* not used */
+ break;
+
+ case SVGA3D_DXT4: /* D3DFMT_DXT4 */
+ /* "DXT4 and DXT5 are the same from an API perspective." */
+ RT_FALL_THRU();
+ case SVGA3D_DXT5: /* D3DFMT_DXT5 - WINED3DFMT_DXT5 */
+ pSurface->internalFormatGL = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+ pSurface->formatGL = GL_RGBA; /* not used */
+ pSurface->typeGL = GL_UNSIGNED_BYTE; /* not used */
+ break;
+
+ case SVGA3D_LUMINANCE8: /* D3DFMT_? - ? */
+ pSurface->internalFormatGL = GL_LUMINANCE8_EXT;
+ pSurface->formatGL = GL_LUMINANCE;
+ pSurface->typeGL = GL_UNSIGNED_BYTE;
+ break;
+
+ case SVGA3D_LUMINANCE16: /* D3DFMT_? - ? */
+ pSurface->internalFormatGL = GL_LUMINANCE16_EXT;
+ pSurface->formatGL = GL_LUMINANCE;
+ pSurface->typeGL = GL_UNSIGNED_SHORT;
+ break;
+
+ case SVGA3D_LUMINANCE4_ALPHA4: /* D3DFMT_? - ? */
+ pSurface->internalFormatGL = GL_LUMINANCE4_ALPHA4_EXT;
+ pSurface->formatGL = GL_LUMINANCE_ALPHA;
+ pSurface->typeGL = GL_UNSIGNED_BYTE;
+ break;
+
+ case SVGA3D_LUMINANCE8_ALPHA8: /* D3DFMT_? - ? */
+ pSurface->internalFormatGL = GL_LUMINANCE8_ALPHA8_EXT;
+ pSurface->formatGL = GL_LUMINANCE_ALPHA;
+ pSurface->typeGL = GL_UNSIGNED_BYTE; /* unsigned_short causes issues even though this type should be 16-bit */
+ break;
+
+ case SVGA3D_ALPHA8: /* D3DFMT_A8? - WINED3DFMT_A8_UNORM? */
+ pSurface->internalFormatGL = GL_ALPHA8_EXT;
+ pSurface->formatGL = GL_ALPHA;
+ pSurface->typeGL = GL_UNSIGNED_BYTE;
+ break;
+
+#if 0
+
+ /* Bump-map formats */
+ case SVGA3D_BUMPU8V8:
+ return D3DFMT_V8U8;
+ case SVGA3D_BUMPL6V5U5:
+ return D3DFMT_L6V5U5;
+ case SVGA3D_BUMPX8L8V8U8:
+ return D3DFMT_X8L8V8U8;
+ case SVGA3D_FORMAT_DEAD1:
+ /* No corresponding D3D9 equivalent. */
+ AssertFailedReturn(D3DFMT_UNKNOWN);
+ /* signed bump-map formats */
+ case SVGA3D_V8U8:
+ return D3DFMT_V8U8;
+ case SVGA3D_Q8W8V8U8:
+ return D3DFMT_Q8W8V8U8;
+ case SVGA3D_CxV8U8:
+ return D3DFMT_CxV8U8;
+ /* mixed bump-map formats */
+ case SVGA3D_X8L8V8U8:
+ return D3DFMT_X8L8V8U8;
+ case SVGA3D_A2W10V10U10:
+ return D3DFMT_A2W10V10U10;
+#endif
+
+ case SVGA3D_ARGB_S10E5: /* 16-bit floating-point ARGB */ /* D3DFMT_A16B16G16R16F - WINED3DFMT_R16G16B16A16_FLOAT */
+ pSurface->internalFormatGL = GL_RGBA16F;
+ pSurface->formatGL = GL_RGBA;
+#if 0 /* bird: wine uses half float, sounds correct to me... */
+ pSurface->typeGL = GL_FLOAT;
+#else
+ pSurface->typeGL = GL_HALF_FLOAT;
+ AssertTestFmt(SVGA3D_ARGB_S10E5);
+#endif
+ break;
+
+ case SVGA3D_ARGB_S23E8: /* 32-bit floating-point ARGB */ /* D3DFMT_A32B32G32R32F - WINED3DFMT_R32G32B32A32_FLOAT */
+ pSurface->internalFormatGL = GL_RGBA32F;
+ pSurface->formatGL = GL_RGBA;
+ pSurface->typeGL = GL_FLOAT; /* ?? - same as wine, so probably correct */
+ break;
+
+ case SVGA3D_A2R10G10B10: /* D3DFMT_A2R10G10B10 - WINED3DFMT_B10G10R10A2_UNORM */
+ pSurface->internalFormatGL = GL_RGB10_A2; /* ?? - same as wine, so probably correct */
+#if 0 /* bird: Wine uses GL_BGRA instead of GL_RGBA. */
+ pSurface->formatGL = GL_RGBA;
+#else
+ pSurface->formatGL = GL_BGRA;
+#endif
+ pSurface->typeGL = GL_UNSIGNED_INT;
+ AssertTestFmt(SVGA3D_A2R10G10B10);
+ break;
+
+
+ /* Single- and dual-component floating point formats */
+ case SVGA3D_R_S10E5: /* D3DFMT_R16F - WINED3DFMT_R16_FLOAT */
+ pSurface->internalFormatGL = GL_R16F;
+ pSurface->formatGL = GL_RED;
+#if 0 /* bird: wine uses half float, sounds correct to me... */
+ pSurface->typeGL = GL_FLOAT;
+#else
+ pSurface->typeGL = GL_HALF_FLOAT;
+ AssertTestFmt(SVGA3D_R_S10E5);
+#endif
+ break;
+ case SVGA3D_R_S23E8: /* D3DFMT_R32F - WINED3DFMT_R32_FLOAT */
+ pSurface->internalFormatGL = GL_R32F;
+ pSurface->formatGL = GL_RED;
+ pSurface->typeGL = GL_FLOAT;
+ break;
+ case SVGA3D_RG_S10E5: /* D3DFMT_G16R16F - WINED3DFMT_R16G16_FLOAT */
+ pSurface->internalFormatGL = GL_RG16F;
+ pSurface->formatGL = GL_RG;
+#if 0 /* bird: wine uses half float, sounds correct to me... */
+ pSurface->typeGL = GL_FLOAT;
+#else
+ pSurface->typeGL = GL_HALF_FLOAT;
+ AssertTestFmt(SVGA3D_RG_S10E5);
+#endif
+ break;
+ case SVGA3D_RG_S23E8: /* D3DFMT_G32R32F - WINED3DFMT_R32G32_FLOAT */
+ pSurface->internalFormatGL = GL_RG32F;
+ pSurface->formatGL = GL_RG;
+ pSurface->typeGL = GL_FLOAT;
+ break;
+
+ /*
+ * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+ * the most efficient format to use when creating new surfaces
+ * expressly for index or vertex data.
+ */
+ case SVGA3D_BUFFER:
+ pSurface->internalFormatGL = -1;
+ pSurface->formatGL = -1;
+ pSurface->typeGL = -1;
+ break;
+
+#if 0
+ return D3DFMT_UNKNOWN;
+
+ case SVGA3D_V16U16:
+ return D3DFMT_V16U16;
+#endif
+
+ case SVGA3D_G16R16: /* D3DFMT_G16R16 - WINED3DFMT_R16G16_UNORM */
+ pSurface->internalFormatGL = GL_RG16;
+ pSurface->formatGL = GL_RG;
+#if 0 /* bird: Wine uses GL_UNSIGNED_SHORT here. */
+ pSurface->typeGL = GL_UNSIGNED_INT;
+#else
+ pSurface->typeGL = GL_UNSIGNED_SHORT;
+ AssertTestFmt(SVGA3D_G16R16);
+#endif
+ break;
+
+ case SVGA3D_A16B16G16R16: /* D3DFMT_A16B16G16R16 - WINED3DFMT_R16G16B16A16_UNORM */
+ pSurface->internalFormatGL = GL_RGBA16;
+ pSurface->formatGL = GL_RGBA;
+#if 0 /* bird: Wine uses GL_UNSIGNED_SHORT here. */
+ pSurface->typeGL = GL_UNSIGNED_INT; /* ??? */
+#else
+ pSurface->typeGL = GL_UNSIGNED_SHORT;
+ AssertTestFmt(SVGA3D_A16B16G16R16);
+#endif
+ break;
+
+ case SVGA3D_R8G8B8A8_SNORM:
+ pSurface->internalFormatGL = GL_RGB8;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+ AssertTestFmt(SVGA3D_R8G8B8A8_SNORM);
+ break;
+ case SVGA3D_R16G16_UNORM:
+ pSurface->internalFormatGL = GL_RG16;
+ pSurface->formatGL = GL_RG;
+ pSurface->typeGL = GL_UNSIGNED_SHORT;
+ AssertTestFmt(SVGA3D_R16G16_UNORM);
+ break;
+
+ /* Packed Video formats */
+ case SVGA3D_UYVY:
+ case SVGA3D_YUY2:
+ /* Use a BRGA texture to hold the data and convert it to an actual BGRA. */
+ pSurface->fEmulated = true;
+ pSurface->internalFormatGL = GL_RGBA8;
+ pSurface->formatGL = GL_BGRA;
+ pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
+ pSurface->cbBlockGL = 4 * pSurface->cxBlock * pSurface->cyBlock;
+ break;
+
+#if 0
+ /* Planar video formats */
+ case SVGA3D_NV12:
+ return (D3DFORMAT)MAKEFOURCC('N', 'V', '1', '2');
+
+ /* Video format with alpha */
+ case SVGA3D_FORMAT_DEAD2: /* Old SVGA3D_AYUV */
+
+ case SVGA3D_ATI1:
+ case SVGA3D_ATI2:
+ /* Unknown; only in DX10 & 11 */
+ break;
+#endif
+ default:
+ AssertMsgFailed(("Unsupported format %d\n", format));
+ break;
+ }
+#undef AssertTestFmt
+}
+
+
+#if 0
+/**
+ * Convert SVGA multi sample count value to its D3D equivalent
+ */
+D3DMULTISAMPLE_TYPE vmsvga3dMultipeSampleCount2D3D(uint32_t multisampleCount)
+{
+ AssertCompile(D3DMULTISAMPLE_2_SAMPLES == 2);
+ AssertCompile(D3DMULTISAMPLE_16_SAMPLES == 16);
+
+ if (multisampleCount > 16)
+ return D3DMULTISAMPLE_NONE;
+
+ /** @todo exact same mapping as d3d? */
+ return (D3DMULTISAMPLE_TYPE)multisampleCount;
+}
+#endif
+
+/**
+ * Destroy backend specific surface bits (part of SVGA_3D_CMD_SURFACE_DESTROY).
+ *
+ * @param pThisCC The device state.
+ * @param fClearCOTableEntry Not relevant for this backend.
+ * @param pSurface The surface being destroyed.
+ */
+static DECLCALLBACK(void) vmsvga3dBackSurfaceDestroy(PVGASTATECC pThisCC, bool fClearCOTableEntry, PVMSVGA3DSURFACE pSurface)
+{
+ RT_NOREF(fClearCOTableEntry);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturnVoid(pState);
+
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ switch (pSurface->enmOGLResType)
+ {
+ case VMSVGA3D_OGLRESTYPE_BUFFER:
+ Assert(pSurface->oglId.buffer != OPENGL_INVALID_ID);
+ pState->ext.glDeleteBuffers(1, &pSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ break;
+
+ case VMSVGA3D_OGLRESTYPE_TEXTURE:
+ Assert(pSurface->oglId.texture != OPENGL_INVALID_ID);
+ glDeleteTextures(1, &pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ if (pSurface->fEmulated)
+ {
+ if (pSurface->idEmulated)
+ {
+ glDeleteTextures(1, &pSurface->idEmulated);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ }
+ else
+ {
+ Assert(!pSurface->idEmulated);
+ }
+ break;
+
+ case VMSVGA3D_OGLRESTYPE_RENDERBUFFER:
+ Assert(pSurface->oglId.renderbuffer != OPENGL_INVALID_ID);
+ pState->ext.glDeleteRenderbuffers(1, &pSurface->oglId.renderbuffer);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ break;
+
+ default:
+ AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface),
+ ("hint=%#x, type=%d\n",
+ (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK), pSurface->enmOGLResType));
+ break;
+ }
+}
+
+
+static DECLCALLBACK(void) vmsvga3dBackSurfaceInvalidateImage(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface, uint32_t uFace, uint32_t uMipmap)
+{
+ RT_NOREF(pThisCC, pSurface, uFace, uMipmap);
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src,
+ uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
+{
+ int rc;
+
+ LogFunc(("Copy %d boxes from sid=%u face=%u mipmap=%u to sid=%u face=%u mipmap=%u\n",
+ cCopyBoxes, src.sid, src.face, src.mipmap, dest.sid, dest.face, dest.mipmap));
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSurfaceSrc;
+ rc = vmsvga3dSurfaceFromSid(pState, src.sid, &pSurfaceSrc);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pSurfaceDst;
+ rc = vmsvga3dSurfaceFromSid(pState, dest.sid, &pSurfaceDst);
+ AssertRCReturn(rc, rc);
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurfaceSrc))
+ {
+ /* The source surface is still in memory. */
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevelSrc;
+ rc = vmsvga3dMipmapLevel(pSurfaceSrc, src.face, src.mipmap, &pMipmapLevelSrc);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevelDst;
+ rc = vmsvga3dMipmapLevel(pSurfaceDst, dest.face, dest.mipmap, &pMipmapLevelDst);
+ AssertRCReturn(rc, rc);
+
+ /* The copy operation is performed on the shared context. */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Use glTexSubImage to upload the data to the destination texture.
+ * The latter must be an OpenGL texture.
+ */
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurfaceDst))
+ {
+ LogFunc(("dest sid=%u type=0x%x format=%d -> create texture\n", dest.sid, pSurfaceDst->f.s.surface1Flags, pSurfaceDst->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, pContext->id, pSurfaceDst);
+ AssertRCReturn(rc, rc);
+ }
+
+ GLenum target;
+ if (pSurfaceDst->targetGL == GL_TEXTURE_CUBE_MAP)
+ target = vmsvga3dCubemapFaceFromIndex(dest.face);
+ else
+ {
+ AssertMsg(pSurfaceDst->targetGL == GL_TEXTURE_2D, ("Test %#x\n", pSurfaceDst->targetGL));
+ target = pSurfaceDst->targetGL;
+ }
+
+ /* Save the unpacking parameters and set what we need here. */
+ VMSVGAPACKPARAMS SavedParams;
+ vmsvga3dOglSetUnpackParams(pState, pContext,
+ pMipmapLevelSrc->mipmapSize.width,
+ target == GL_TEXTURE_3D ? pMipmapLevelSrc->mipmapSize.height : 0,
+ &SavedParams);
+
+ glBindTexture(pSurfaceDst->targetGL, pSurfaceDst->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ for (uint32_t i = 0; i < cCopyBoxes; ++i)
+ {
+ SVGA3dCopyBox clipBox = pBox[i];
+ vmsvgaR3ClipCopyBox(&pMipmapLevelSrc->mipmapSize, &pMipmapLevelDst->mipmapSize, &clipBox);
+ if ( !clipBox.w
+ || !clipBox.h
+ || !clipBox.d)
+ {
+ LogFunc(("Skipped empty box.\n"));
+ continue;
+ }
+
+ LogFunc(("copy box %d,%d,%d %dx%d to %d,%d,%d\n",
+ clipBox.srcx, clipBox.srcy, clipBox.srcz, clipBox.w, clipBox.h, clipBox.x, clipBox.y, clipBox.z));
+
+ uint32_t const u32BlockX = clipBox.srcx / pSurfaceSrc->cxBlock;
+ uint32_t const u32BlockY = clipBox.srcy / pSurfaceSrc->cyBlock;
+ uint32_t const u32BlockZ = clipBox.srcz;
+ Assert(u32BlockX * pSurfaceSrc->cxBlock == clipBox.srcx);
+ Assert(u32BlockY * pSurfaceSrc->cyBlock == clipBox.srcy);
+
+ uint8_t const *pSrcBits = (uint8_t *)pMipmapLevelSrc->pSurfaceData
+ + pMipmapLevelSrc->cbSurfacePlane * u32BlockZ
+ + pMipmapLevelSrc->cbSurfacePitch * u32BlockY
+ + pSurfaceSrc->cbBlock * u32BlockX;
+
+ if (target == GL_TEXTURE_3D)
+ {
+ if ( pSurfaceDst->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurfaceDst->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurfaceDst->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ uint32_t const cBlocksX = (clipBox.w + pSurfaceSrc->cxBlock - 1) / pSurfaceSrc->cxBlock;
+ uint32_t const cBlocksY = (clipBox.h + pSurfaceSrc->cyBlock - 1) / pSurfaceSrc->cyBlock;
+ uint32_t const imageSize = cBlocksX * cBlocksY * clipBox.d * pSurfaceSrc->cbBlock;
+ pState->ext.glCompressedTexSubImage3D(target, dest.mipmap,
+ clipBox.x, clipBox.y, clipBox.z,
+ clipBox.w, clipBox.h, clipBox.d,
+ pSurfaceSrc->internalFormatGL, (GLsizei)imageSize, pSrcBits);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ else
+ {
+ pState->ext.glTexSubImage3D(target, dest.mipmap,
+ clipBox.x, clipBox.y, clipBox.z,
+ clipBox.w, clipBox.h, clipBox.d,
+ pSurfaceSrc->formatGL, pSurfaceSrc->typeGL, pSrcBits);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ }
+ else
+ {
+ if ( pSurfaceDst->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurfaceDst->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurfaceDst->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ uint32_t const cBlocksX = (clipBox.w + pSurfaceSrc->cxBlock - 1) / pSurfaceSrc->cxBlock;
+ uint32_t const cBlocksY = (clipBox.h + pSurfaceSrc->cyBlock - 1) / pSurfaceSrc->cyBlock;
+ uint32_t const imageSize = cBlocksX * cBlocksY * pSurfaceSrc->cbBlock;
+ pState->ext.glCompressedTexSubImage2D(target, dest.mipmap,
+ clipBox.x, clipBox.y, clipBox.w, clipBox.h,
+ pSurfaceSrc->internalFormatGL, (GLsizei)imageSize, pSrcBits);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ else
+ {
+ glTexSubImage2D(target, dest.mipmap,
+ clipBox.x, clipBox.y, clipBox.w, clipBox.h,
+ pSurfaceSrc->formatGL, pSurfaceSrc->typeGL, pSrcBits);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ }
+ }
+
+ glBindTexture(pSurfaceDst->targetGL, 0);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ vmsvga3dOglRestoreUnpackParams(pState, pContext, &SavedParams);
+
+ return VINF_SUCCESS;
+ }
+
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pThisCC->pDevIns, PVGASTATE);
+ for (uint32_t i = 0; i < cCopyBoxes; i++)
+ {
+ SVGA3dBox destBox, srcBox;
+
+ srcBox.x = pBox[i].srcx;
+ srcBox.y = pBox[i].srcy;
+ srcBox.z = pBox[i].srcz;
+ srcBox.w = pBox[i].w;
+ srcBox.h = pBox[i].h;
+ srcBox.d = pBox[i].d;
+
+ destBox.x = pBox[i].x;
+ destBox.y = pBox[i].y;
+ destBox.z = pBox[i].z;
+ destBox.w = pBox[i].w;
+ destBox.h = pBox[i].h;
+ destBox.d = pBox[i].d;
+
+ /* No stretching is required, therefore use SVGA3D_STRETCH_BLT_POINT which translated to GL_NEAREST. */
+ rc = vmsvga3dSurfaceStretchBlt(pThis, pThisCC, &dest, &destBox, &src, &srcBox, SVGA3D_STRETCH_BLT_POINT);
+ AssertRCReturn(rc, rc);
+ }
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Saves texture unpacking parameters and loads the specified ones.
+ *
+ * @param pState The VMSVGA3D state structure.
+ * @param pContext The active context.
+ * @param cxRow The number of pixels in a row. 0 for the entire width.
+ * @param cyImage The height of the image in pixels. 0 for the entire height.
+ * @param pSave Where to save stuff.
+ */
+void vmsvga3dOglSetUnpackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, GLint cxRow, GLint cyImage,
+ PVMSVGAPACKPARAMS pSave)
+{
+ RT_NOREF(pState);
+
+ /*
+ * Save (ignore errors, setting the defaults we want and avoids restore).
+ */
+ pSave->iAlignment = 1;
+ VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_UNPACK_ALIGNMENT, &pSave->iAlignment), pState, pContext);
+ pSave->cxRow = 0;
+ VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_UNPACK_ROW_LENGTH, &pSave->cxRow), pState, pContext);
+ pSave->cyImage = 0;
+ VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_UNPACK_IMAGE_HEIGHT, &pSave->cyImage), pState, pContext);
+
+#ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ pSave->fSwapBytes = GL_FALSE;
+ glGetBooleanv(GL_UNPACK_SWAP_BYTES, &pSave->fSwapBytes);
+ Assert(pSave->fSwapBytes == GL_FALSE);
+
+ pSave->fLsbFirst = GL_FALSE;
+ glGetBooleanv(GL_UNPACK_LSB_FIRST, &pSave->fLsbFirst);
+ Assert(pSave->fLsbFirst == GL_FALSE);
+
+ pSave->cSkipRows = 0;
+ glGetIntegerv(GL_UNPACK_SKIP_ROWS, &pSave->cSkipRows);
+ Assert(pSave->cSkipRows == 0);
+
+ pSave->cSkipPixels = 0;
+ glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &pSave->cSkipPixels);
+ Assert(pSave->cSkipPixels == 0);
+
+ pSave->cSkipImages = 0;
+ glGetIntegerv(GL_UNPACK_SKIP_IMAGES, &pSave->cSkipImages);
+ Assert(pSave->cSkipImages == 0);
+
+ VMSVGA3D_CLEAR_GL_ERRORS();
+#endif
+
+ /*
+ * Setup unpack.
+ *
+ * Note! We use 1 as alignment here because we currently don't do any
+ * aligning of line pitches anywhere.
+ */
+ pSave->fChanged = 0;
+ if (pSave->iAlignment != 1)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_ALIGNMENT, 1), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_ALIGNMENT;
+ }
+ if (pSave->cxRow != cxRow)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_ROW_LENGTH, cxRow), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_ROW_LENGTH;
+ }
+ if (pSave->cyImage != cyImage)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, cyImage), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_IMAGE_HEIGHT;
+ }
+#ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ if (pSave->fSwapBytes != 0)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_SWAP_BYTES;
+ }
+ if (pSave->fLsbFirst != 0)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_LSB_FIRST;
+ }
+ if (pSave->cSkipRows != 0)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SKIP_ROWS, 0), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_SKIP_ROWS;
+ }
+ if (pSave->cSkipPixels != 0)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_SKIP_PIXELS;
+ }
+ if (pSave->cSkipImages != 0)
+ {
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SKIP_IMAGES, 0), pState, pContext);
+ pSave->fChanged |= VMSVGAPACKPARAMS_SKIP_IMAGES;
+ }
+#endif
+}
+
+
+/**
+ * Restores texture unpacking parameters.
+ *
+ * @param pState The VMSVGA3D state structure.
+ * @param pContext The active context.
+ * @param pSave Where stuff was saved.
+ */
+void vmsvga3dOglRestoreUnpackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext,
+ PCVMSVGAPACKPARAMS pSave)
+{
+ RT_NOREF(pState);
+
+ if (pSave->fChanged & VMSVGAPACKPARAMS_ALIGNMENT)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_ALIGNMENT, pSave->iAlignment), pState, pContext);
+ if (pSave->fChanged & VMSVGAPACKPARAMS_ROW_LENGTH)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_ROW_LENGTH, pSave->cxRow), pState, pContext);
+ if (pSave->fChanged & VMSVGAPACKPARAMS_IMAGE_HEIGHT)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, pSave->cyImage), pState, pContext);
+#ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ if (pSave->fChanged & VMSVGAPACKPARAMS_SWAP_BYTES)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SWAP_BYTES, pSave->fSwapBytes), pState, pContext);
+ if (pSave->fChanged & VMSVGAPACKPARAMS_LSB_FIRST)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_LSB_FIRST, pSave->fLsbFirst), pState, pContext);
+ if (pSave->fChanged & VMSVGAPACKPARAMS_SKIP_ROWS)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SKIP_ROWS, pSave->cSkipRows), pState, pContext);
+ if (pSave->fChanged & VMSVGAPACKPARAMS_SKIP_PIXELS)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SKIP_PIXELS, pSave->cSkipPixels), pState, pContext);
+ if (pSave->fChanged & VMSVGAPACKPARAMS_SKIP_IMAGES)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_UNPACK_SKIP_IMAGES, pSave->cSkipImages), pState, pContext);
+#endif
+}
+
+/**
+ * Create D3D/OpenGL texture object for the specified surface.
+ *
+ * Surfaces are created when needed.
+ *
+ * @param pThisCC The device context.
+ * @param pContext The context.
+ * @param idAssociatedContext Probably the same as pContext->id.
+ * @param pSurface The surface to create the texture for.
+ */
+static DECLCALLBACK(int) vmsvga3dBackCreateTexture(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext,
+ PVMSVGA3DSURFACE pSurface)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+
+ RT_NOREF(idAssociatedContext);
+
+ LogFunc(("sid=%u\n", pSurface->id));
+
+ uint32_t const numMipLevels = pSurface->cLevels;
+
+ /* Fugure out what kind of texture we are creating. */
+ GLenum binding;
+ GLenum target;
+ if (pSurface->f.s.surface1Flags & SVGA3D_SURFACE_CUBEMAP)
+ {
+ Assert(pSurface->cFaces == 6);
+
+ binding = GL_TEXTURE_BINDING_CUBE_MAP;
+ target = GL_TEXTURE_CUBE_MAP;
+ }
+ else
+ {
+ if (pSurface->paMipmapLevels[0].mipmapSize.depth > 1)
+ {
+ binding = GL_TEXTURE_BINDING_3D;
+ target = GL_TEXTURE_3D;
+ }
+ else
+ {
+ Assert(pSurface->cFaces == 1);
+
+ binding = GL_TEXTURE_BINDING_2D;
+ target = GL_TEXTURE_2D;
+ }
+ }
+
+ /* All textures are created in the SharedCtx. */
+ uint32_t idPrevCtx = pState->idActiveContext;
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ glGenTextures(1, &pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ if (pSurface->fEmulated)
+ {
+ glGenTextures(1, &pSurface->idEmulated);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ pSurface->enmOGLResType = VMSVGA3D_OGLRESTYPE_TEXTURE;
+
+ GLint activeTexture = 0;
+ glGetIntegerv(binding, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Must bind texture to the current context in order to change it. */
+ glBindTexture(target, pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Set the unpacking parameters. */
+ VMSVGAPACKPARAMS SavedParams;
+ vmsvga3dOglSetUnpackParams(pState, pContext, 0, 0, &SavedParams);
+
+ /** @todo Set the mip map generation filter settings. */
+
+ /* Set the mipmap base and max level parameters. */
+ glTexParameteri(target, GL_TEXTURE_BASE_LEVEL, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glTexParameteri(target, GL_TEXTURE_MAX_LEVEL, pSurface->cLevels - 1);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ if (pSurface->fDirty)
+ LogFunc(("sync dirty texture\n"));
+
+ /* Always allocate and initialize all mipmap levels; non-initialized mipmap levels used as render targets cause failures. */
+ if (target == GL_TEXTURE_3D)
+ {
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ /* Allocate and initialize texture memory. Passing the zero filled pSurfaceData avoids
+ * exposing random host memory to the guest and helps a with the fedora 21 surface
+ * corruption issues (launchpad, background, search field, login).
+ */
+ PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->paMipmapLevels[i];
+
+ LogFunc(("sync dirty 3D texture mipmap level %d (pitch %x) (dirty %d)\n",
+ i, pMipLevel->cbSurfacePitch, pMipLevel->fDirty));
+
+ if ( pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ pState->ext.glCompressedTexImage3D(GL_TEXTURE_3D,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ pMipLevel->mipmapSize.depth,
+ 0,
+ pMipLevel->cbSurface,
+ pMipLevel->pSurfaceData);
+ }
+ else
+ {
+ pState->ext.glTexImage3D(GL_TEXTURE_3D,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ pMipLevel->mipmapSize.depth,
+ 0, /* border */
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pMipLevel->pSurfaceData);
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pMipLevel->fDirty = false;
+ }
+ }
+ else if (target == GL_TEXTURE_CUBE_MAP)
+ {
+ for (uint32_t iFace = 0; iFace < 6; ++iFace)
+ {
+ GLenum const Face = vmsvga3dCubemapFaceFromIndex(iFace);
+
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->paMipmapLevels[iFace * numMipLevels + i];
+ Assert(pMipLevel->mipmapSize.width == pMipLevel->mipmapSize.height);
+ Assert(pMipLevel->mipmapSize.depth == 1);
+
+ LogFunc(("sync cube texture face %d mipmap level %d (dirty %d)\n",
+ iFace, i, pMipLevel->fDirty));
+
+ if ( pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ pState->ext.glCompressedTexImage2D(Face,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ 0,
+ pMipLevel->cbSurface,
+ pMipLevel->pSurfaceData);
+ }
+ else
+ {
+ glTexImage2D(Face,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ 0,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pMipLevel->pSurfaceData);
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pMipLevel->fDirty = false;
+ }
+ }
+ }
+ else if (target == GL_TEXTURE_2D)
+ {
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ /* Allocate and initialize texture memory. Passing the zero filled pSurfaceData avoids
+ * exposing random host memory to the guest and helps a with the fedora 21 surface
+ * corruption issues (launchpad, background, search field, login).
+ */
+ PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->paMipmapLevels[i];
+ Assert(pMipLevel->mipmapSize.depth == 1);
+
+ LogFunc(("sync dirty texture mipmap level %d (pitch %x) (dirty %d)\n",
+ i, pMipLevel->cbSurfacePitch, pMipLevel->fDirty));
+
+ if ( pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ pState->ext.glCompressedTexImage2D(GL_TEXTURE_2D,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ 0,
+ pMipLevel->cbSurface,
+ pMipLevel->pSurfaceData);
+ }
+ else
+ {
+ glTexImage2D(GL_TEXTURE_2D,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ 0,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ NULL);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ if (pSurface->fEmulated)
+ {
+ /* Bind the emulated texture and init it. */
+ glBindTexture(GL_TEXTURE_2D, pSurface->idEmulated);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glTexImage2D(GL_TEXTURE_2D,
+ i,
+ pSurface->internalFormatGL,
+ pMipLevel->mipmapSize.width,
+ pMipLevel->mipmapSize.height,
+ 0,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ NULL);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+
+ /* Fetch texture data: either to the actual or to the emulated texture.
+ * The pSurfaceData buffer may be smaller than the entire texture
+ * for emulated formats, in which case only part of the texture is synched.
+ */
+ uint32_t cBlocksX = pMipLevel->mipmapSize.width / pSurface->cxBlock;
+ uint32_t cBlocksY = pMipLevel->mipmapSize.height / pSurface->cyBlock;
+ glTexSubImage2D(GL_TEXTURE_2D,
+ i,
+ 0,
+ 0,
+ cBlocksX,
+ cBlocksY,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pMipLevel->pSurfaceData);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ if (pSurface->fEmulated)
+ {
+ /* Update the actual texture using the format converter. */
+ FormatConvUpdateTexture(pState, pContext, pSurface, i);
+
+ /* Rebind the actual texture. */
+ glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ }
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ pMipLevel->fDirty = false;
+ }
+ }
+
+ pSurface->fDirty = false;
+
+ /* Restore unpacking parameters. */
+ vmsvga3dOglRestoreUnpackParams(pState, pContext, &SavedParams);
+
+ /* Restore the old active texture. */
+ glBindTexture(target, activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pSurface->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_TEXTURE;
+ pSurface->targetGL = target;
+ pSurface->bindingGL = binding;
+
+ if (idPrevCtx < pState->cContexts && pState->papContexts[idPrevCtx]->id == idPrevCtx)
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pState->papContexts[idPrevCtx]);
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Backend worker for implementing SVGA_3D_CMD_SURFACE_STRETCHBLT.
+ *
+ * @returns VBox status code.
+ * @param pThis The VGA device instance.
+ * @param pState The VMSVGA3d state.
+ * @param pDstSurface The destination host surface.
+ * @param uDstFace The destination face (valid).
+ * @param uDstMipmap The destination mipmap level (valid).
+ * @param pDstBox The destination box.
+ * @param pSrcSurface The source host surface.
+ * @param uSrcFace The destination face (valid).
+ * @param uSrcMipmap The source mimap level (valid).
+ * @param pSrcBox The source box.
+ * @param enmMode The strecht blt mode .
+ * @param pContext The VMSVGA3d context (already current for OGL).
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
+ PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+ PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+ SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThis);
+
+ AssertReturn( RT_BOOL(pSrcSurface->f.s.surface1Flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
+ == RT_BOOL(pDstSurface->f.s.surface1Flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL), VERR_NOT_IMPLEMENTED);
+
+ GLenum glAttachment = GL_COLOR_ATTACHMENT0;
+ GLbitfield glMask = GL_COLOR_BUFFER_BIT;
+ if (pDstSurface->f.s.surface1Flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
+ {
+ /** @todo Need GL_DEPTH_STENCIL_ATTACHMENT for depth/stencil formats? */
+ glAttachment = GL_DEPTH_ATTACHMENT;
+ glMask = GL_DEPTH_BUFFER_BIT;
+ }
+
+ /* Activate the read and draw framebuffer objects. */
+ pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, pContext->idReadFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, pContext->idDrawFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Bind the source and destination objects to the right place. */
+ GLenum textarget;
+ if (pSrcSurface->targetGL == GL_TEXTURE_CUBE_MAP)
+ textarget = vmsvga3dCubemapFaceFromIndex(uSrcFace);
+ else
+ {
+ /// @todo later AssertMsg(pSrcSurface->targetGL == GL_TEXTURE_2D, ("%#x\n", pSrcSurface->targetGL));
+ textarget = GL_TEXTURE_2D;
+ }
+ pState->ext.glFramebufferTexture2D(GL_READ_FRAMEBUFFER, glAttachment, textarget,
+ pSrcSurface->oglId.texture, uSrcMipmap);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ if (pDstSurface->targetGL == GL_TEXTURE_CUBE_MAP)
+ textarget = vmsvga3dCubemapFaceFromIndex(uDstFace);
+ else
+ {
+ /// @todo later AssertMsg(pDstSurface->targetGL == GL_TEXTURE_2D, ("%#x\n", pDstSurface->targetGL));
+ textarget = GL_TEXTURE_2D;
+ }
+ pState->ext.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, glAttachment, textarget,
+ pDstSurface->oglId.texture, uDstMipmap);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ Log(("src conv. (%d,%d)(%d,%d); dest conv (%d,%d)(%d,%d)\n",
+ pSrcBox->x, D3D_TO_OGL_Y_COORD(pSrcSurface, pSrcBox->y + pSrcBox->h),
+ pSrcBox->x + pSrcBox->w, D3D_TO_OGL_Y_COORD(pSrcSurface, pSrcBox->y),
+ pDstBox->x, D3D_TO_OGL_Y_COORD(pDstSurface, pDstBox->y + pDstBox->h),
+ pDstBox->x + pDstBox->w, D3D_TO_OGL_Y_COORD(pDstSurface, pDstBox->y)));
+
+ pState->ext.glBlitFramebuffer(pSrcBox->x,
+ pSrcBox->y,
+ pSrcBox->x + pSrcBox->w, /* exclusive. */
+ pSrcBox->y + pSrcBox->h,
+ pDstBox->x,
+ pDstBox->y,
+ pDstBox->x + pDstBox->w, /* exclusive. */
+ pDstBox->y + pDstBox->h,
+ glMask,
+ (enmMode == SVGA3D_STRETCH_BLT_POINT) ? GL_NEAREST : GL_LINEAR);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Reset the frame buffer association */
+ pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ return VINF_SUCCESS;
+}
+
+/**
+ * Save texture packing parameters and loads those appropriate for the given
+ * surface.
+ *
+ * @param pState The VMSVGA3D state structure.
+ * @param pContext The active context.
+ * @param pSurface The surface.
+ * @param pSave Where to save stuff.
+ */
+void vmsvga3dOglSetPackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface,
+ PVMSVGAPACKPARAMS pSave)
+{
+ RT_NOREF(pState);
+ /*
+ * Save (ignore errors, setting the defaults we want and avoids restore).
+ */
+ pSave->iAlignment = 1;
+ VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_PACK_ALIGNMENT, &pSave->iAlignment), pState, pContext);
+ pSave->cxRow = 0;
+ VMSVGA3D_ASSERT_GL_CALL(glGetIntegerv(GL_PACK_ROW_LENGTH, &pSave->cxRow), pState, pContext);
+
+#ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ pSave->cyImage = 0;
+ glGetIntegerv(GL_PACK_IMAGE_HEIGHT, &pSave->cyImage);
+ Assert(pSave->cyImage == 0);
+
+ pSave->fSwapBytes = GL_FALSE;
+ glGetBooleanv(GL_PACK_SWAP_BYTES, &pSave->fSwapBytes);
+ Assert(pSave->fSwapBytes == GL_FALSE);
+
+ pSave->fLsbFirst = GL_FALSE;
+ glGetBooleanv(GL_PACK_LSB_FIRST, &pSave->fLsbFirst);
+ Assert(pSave->fLsbFirst == GL_FALSE);
+
+ pSave->cSkipRows = 0;
+ glGetIntegerv(GL_PACK_SKIP_ROWS, &pSave->cSkipRows);
+ Assert(pSave->cSkipRows == 0);
+
+ pSave->cSkipPixels = 0;
+ glGetIntegerv(GL_PACK_SKIP_PIXELS, &pSave->cSkipPixels);
+ Assert(pSave->cSkipPixels == 0);
+
+ pSave->cSkipImages = 0;
+ glGetIntegerv(GL_PACK_SKIP_IMAGES, &pSave->cSkipImages);
+ Assert(pSave->cSkipImages == 0);
+
+ VMSVGA3D_CLEAR_GL_ERRORS();
+#endif
+
+ /*
+ * Setup unpack.
+ *
+ * Note! We use 1 as alignment here because we currently don't do any
+ * aligning of line pitches anywhere.
+ */
+ NOREF(pSurface);
+ if (pSave->iAlignment != 1)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_ALIGNMENT, 1), pState, pContext);
+ if (pSave->cxRow != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_ROW_LENGTH, 0), pState, pContext);
+#ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ if (pSave->cyImage != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0), pState, pContext);
+ if (pSave->fSwapBytes != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SWAP_BYTES, GL_FALSE), pState, pContext);
+ if (pSave->fLsbFirst != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_LSB_FIRST, GL_FALSE), pState, pContext);
+ if (pSave->cSkipRows != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SKIP_ROWS, 0), pState, pContext);
+ if (pSave->cSkipPixels != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SKIP_PIXELS, 0), pState, pContext);
+ if (pSave->cSkipImages != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SKIP_IMAGES, 0), pState, pContext);
+#endif
+}
+
+
+/**
+ * Restores texture packing parameters.
+ *
+ * @param pState The VMSVGA3D state structure.
+ * @param pContext The active context.
+ * @param pSurface The surface.
+ * @param pSave Where stuff was saved.
+ */
+void vmsvga3dOglRestorePackParams(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface,
+ PCVMSVGAPACKPARAMS pSave)
+{
+ RT_NOREF(pState, pSurface);
+ if (pSave->iAlignment != 1)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_ALIGNMENT, pSave->iAlignment), pState, pContext);
+ if (pSave->cxRow != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_ROW_LENGTH, pSave->cxRow), pState, pContext);
+#ifdef VMSVGA3D_PARANOID_TEXTURE_PACKING
+ if (pSave->cyImage != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_IMAGE_HEIGHT, pSave->cyImage), pState, pContext);
+ if (pSave->fSwapBytes != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SWAP_BYTES, pSave->fSwapBytes), pState, pContext);
+ if (pSave->fLsbFirst != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_LSB_FIRST, pSave->fLsbFirst), pState, pContext);
+ if (pSave->cSkipRows != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SKIP_ROWS, pSave->cSkipRows), pState, pContext);
+ if (pSave->cSkipPixels != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SKIP_PIXELS, pSave->cSkipPixels), pState, pContext);
+ if (pSave->cSkipImages != 0)
+ VMSVGA3D_ASSERT_GL_CALL(glPixelStorei(GL_PACK_SKIP_IMAGES, pSave->cSkipImages), pState, pContext);
+#endif
+}
+
+
+/**
+ * Backend worker for implementing SVGA_3D_CMD_SURFACE_DMA that copies one box.
+ *
+ * @returns Failure status code or @a rc.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pState The VMSVGA3d state.
+ * @param pSurface The host surface.
+ * @param pMipLevel Mipmap level. The caller knows it already.
+ * @param uHostFace The host face (valid).
+ * @param uHostMipmap The host mipmap level (valid).
+ * @param GuestPtr The guest pointer.
+ * @param cbGuestPitch The guest pitch.
+ * @param transfer The transfer direction.
+ * @param pBox The box to copy (clipped, valid, except for guest's srcx, srcy, srcz).
+ * @param pContext The context (for OpenGL).
+ * @param rc The current rc for all boxes.
+ * @param iBox The current box number (for Direct 3D).
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVGASTATECC pThisCC, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+ PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+ SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
+ SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox)
+{
+ RT_NOREF(iBox);
+
+ switch (pSurface->enmOGLResType)
+ {
+ case VMSVGA3D_OGLRESTYPE_TEXTURE:
+ {
+ uint32_t cbSurfacePitch;
+ uint8_t *pDoubleBuffer;
+ uint64_t offHst;
+
+ uint32_t const u32HostBlockX = pBox->x / pSurface->cxBlock;
+ uint32_t const u32HostBlockY = pBox->y / pSurface->cyBlock;
+ uint32_t const u32HostZ = pBox->z;
+ Assert(u32HostBlockX * pSurface->cxBlock == pBox->x);
+ Assert(u32HostBlockY * pSurface->cyBlock == pBox->y);
+
+ uint32_t const u32GuestBlockX = pBox->srcx / pSurface->cxBlock;
+ uint32_t const u32GuestBlockY = pBox->srcy / pSurface->cyBlock;
+ uint32_t const u32GuestZ = pBox->srcz / pSurface->cyBlock;
+ Assert(u32GuestBlockX * pSurface->cxBlock == pBox->srcx);
+ Assert(u32GuestBlockY * pSurface->cyBlock == pBox->srcy);
+
+ uint32_t const cBlocksX = (pBox->w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cBlocksY = (pBox->h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+ AssertMsgReturn(cBlocksX && cBlocksY, ("Empty box %dx%d\n", pBox->w, pBox->h), VERR_INTERNAL_ERROR);
+
+ GLenum texImageTarget;
+ if (pSurface->targetGL == GL_TEXTURE_3D)
+ {
+ texImageTarget = GL_TEXTURE_3D;
+ }
+ else if (pSurface->targetGL == GL_TEXTURE_CUBE_MAP)
+ {
+ texImageTarget = vmsvga3dCubemapFaceFromIndex(uHostFace);
+ }
+ else
+ {
+ AssertMsg(pSurface->targetGL == GL_TEXTURE_2D, ("%#x\n", pSurface->targetGL));
+ texImageTarget = GL_TEXTURE_2D;
+ }
+
+ /* The buffer must be large enough to hold entire texture in the OpenGL format. */
+ pDoubleBuffer = (uint8_t *)RTMemAlloc(pSurface->cbBlockGL * pMipLevel->cBlocks);
+ AssertReturn(pDoubleBuffer, VERR_NO_MEMORY);
+
+ if (transfer == SVGA3D_READ_HOST_VRAM)
+ {
+ /* Read the entire texture to the double buffer. */
+ GLint activeTexture;
+
+ /* Must bind texture to the current context in order to read it. */
+ glGetIntegerv(pSurface->bindingGL, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glBindTexture(pSurface->targetGL, GLTextureId(pSurface));
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ if (pSurface->fEmulated)
+ {
+ FormatConvReadTexture(pState, pContext, pSurface, uHostMipmap);
+ }
+
+ /* Set row length and alignment of the input data. */
+ VMSVGAPACKPARAMS SavedParams;
+ vmsvga3dOglSetPackParams(pState, pContext, pSurface, &SavedParams);
+
+ if ( pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ pState->ext.glGetCompressedTexImage(texImageTarget, uHostMipmap, pDoubleBuffer);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ else
+ {
+ glGetTexImage(texImageTarget, uHostMipmap, pSurface->formatGL, pSurface->typeGL, pDoubleBuffer);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+
+ vmsvga3dOglRestorePackParams(pState, pContext, pSurface, &SavedParams);
+
+ /* Restore the old active texture. */
+ glBindTexture(pSurface->targetGL, activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ offHst = u32HostBlockX * pSurface->cbBlock + u32HostBlockY * pMipLevel->cbSurfacePitch + u32HostZ * pMipLevel->cbSurfacePlane;
+ cbSurfacePitch = pMipLevel->cbSurfacePitch;
+ }
+ else
+ {
+ /* The buffer will contain only the copied rectangle. */
+ offHst = 0;
+ cbSurfacePitch = cBlocksX * pSurface->cbBlock;
+ }
+
+ uint64_t offGst = u32GuestBlockX * pSurface->cbBlock + u32GuestBlockY * cbGuestPitch + u32GuestZ * cbGuestPitch * pMipLevel->mipmapSize.height;
+
+ for (uint32_t iPlane = 0; iPlane < pBox->d; ++iPlane)
+ {
+ AssertBreak(offHst < UINT32_MAX);
+ AssertBreak(offGst < UINT32_MAX);
+
+ rc = vmsvgaR3GmrTransfer(pThis,
+ pThisCC,
+ transfer,
+ pDoubleBuffer,
+ pMipLevel->cbSurface,
+ (uint32_t)offHst,
+ cbSurfacePitch,
+ GuestPtr,
+ (uint32_t)offGst,
+ cbGuestPitch,
+ cBlocksX * pSurface->cbBlock,
+ cBlocksY);
+ AssertRC(rc);
+
+ offHst += pMipLevel->cbSurfacePlane;
+ offGst += pMipLevel->mipmapSize.height * cbGuestPitch;
+ }
+
+ /* Update the opengl surface data. */
+ if (transfer == SVGA3D_WRITE_HOST_VRAM)
+ {
+ GLint activeTexture = 0;
+ glGetIntegerv(pSurface->bindingGL, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Must bind texture to the current context in order to change it. */
+ glBindTexture(pSurface->targetGL, GLTextureId(pSurface));
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ LogFunc(("copy texture mipmap level %d (pitch %x)\n", uHostMipmap, pMipLevel->cbSurfacePitch));
+
+ /* Set row length and alignment of the input data. */
+ /* We do not need to set ROW_LENGTH to w here, because the image in pDoubleBuffer is tightly packed. */
+ VMSVGAPACKPARAMS SavedParams;
+ vmsvga3dOglSetUnpackParams(pState, pContext, 0, 0, &SavedParams);
+
+ if (texImageTarget == GL_TEXTURE_3D)
+ {
+ if ( pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ pState->ext.glCompressedTexSubImage3D(texImageTarget,
+ uHostMipmap,
+ pBox->x,
+ pBox->y,
+ pBox->z,
+ pBox->w,
+ pBox->h,
+ pBox->d,
+ pSurface->internalFormatGL,
+ cbSurfacePitch * cBlocksY * pBox->d,
+ pDoubleBuffer);
+ }
+ else
+ {
+ pState->ext.glTexSubImage3D(texImageTarget,
+ uHostMipmap,
+ u32HostBlockX,
+ u32HostBlockY,
+ pBox->z,
+ cBlocksX,
+ cBlocksY,
+ pBox->d,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pDoubleBuffer);
+ }
+ }
+ else
+ {
+ if ( pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
+ || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
+ {
+ pState->ext.glCompressedTexSubImage2D(texImageTarget,
+ uHostMipmap,
+ pBox->x,
+ pBox->y,
+ pBox->w,
+ pBox->h,
+ pSurface->internalFormatGL,
+ cbSurfacePitch * cBlocksY,
+ pDoubleBuffer);
+ }
+ else
+ {
+ glTexSubImage2D(texImageTarget,
+ uHostMipmap,
+ u32HostBlockX,
+ u32HostBlockY,
+ cBlocksX,
+ cBlocksY,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pDoubleBuffer);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ if (pSurface->fEmulated)
+ {
+ /* Convert the texture to the actual texture if necessary */
+ FormatConvUpdateTexture(pState, pContext, pSurface, uHostMipmap);
+ }
+ }
+ }
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Restore old values. */
+ vmsvga3dOglRestoreUnpackParams(pState, pContext, &SavedParams);
+
+ /* Restore the old active texture. */
+ glBindTexture(pSurface->targetGL, activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+
+ Log4(("first line:\n%.*Rhxd\n", cBlocksX * pSurface->cbBlock, pDoubleBuffer));
+
+ /* Free the double buffer. */
+ RTMemFree(pDoubleBuffer);
+ break;
+ }
+
+ case VMSVGA3D_OGLRESTYPE_BUFFER:
+ {
+ /* Buffers are uncompressed. */
+ AssertReturn(pSurface->cxBlock == 1 && pSurface->cyBlock == 1, VERR_INTERNAL_ERROR);
+
+ /* Caller already clipped pBox and buffers are 1-dimensional. */
+ Assert(pBox->y == 0 && pBox->h == 1 && pBox->z == 0 && pBox->d == 1);
+
+ VMSVGA3D_CLEAR_GL_ERRORS();
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pSurface->oglId.buffer);
+ if (VMSVGA3D_GL_IS_SUCCESS(pContext))
+ {
+ GLenum enmGlTransfer = (transfer == SVGA3D_READ_HOST_VRAM) ? GL_READ_ONLY : GL_WRITE_ONLY;
+ uint8_t *pbData = (uint8_t *)pState->ext.glMapBuffer(GL_ARRAY_BUFFER, enmGlTransfer);
+ if (RT_LIKELY(pbData != NULL))
+ {
+#if defined(VBOX_STRICT) && defined(RT_OS_DARWIN)
+ GLint cbStrictBufSize;
+ glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &cbStrictBufSize);
+ Assert(VMSVGA3D_GL_IS_SUCCESS(pContext));
+ AssertMsg(cbStrictBufSize >= (int32_t)pMipLevel->cbSurface,
+ ("cbStrictBufSize=%#x cbSurface=%#x pContext->id=%#x\n", (uint32_t)cbStrictBufSize, pMipLevel->cbSurface, pContext->id));
+#endif
+ Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n",
+ (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_VERTEXBUFFER ? "vertex" :
+ (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_INDEXBUFFER ? "index" : "buffer",
+ pBox->x, pBox->y, pBox->x + pBox->w, pBox->y + pBox->h));
+
+ /* The caller already copied the data to the pMipLevel->pSurfaceData buffer, see VMSVGA3DSURFACE_NEEDS_DATA. */
+ uint32_t const offHst = pBox->x * pSurface->cbBlock;
+ uint32_t const cbWidth = pBox->w * pSurface->cbBlock;
+
+ memcpy(pbData + offHst, (uint8_t *)pMipLevel->pSurfaceData + offHst, cbWidth);
+
+ Log4(("Buffer updated at [0x%x;0x%x):\n%.*Rhxd\n", offHst, offHst + cbWidth, cbWidth, (uint8_t *)pbData + offHst));
+
+ pState->ext.glUnmapBuffer(GL_ARRAY_BUFFER);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ else
+ VMSVGA3D_GL_GET_AND_COMPLAIN(pState, pContext, ("glMapBuffer(GL_ARRAY_BUFFER, %#x) -> NULL\n", enmGlTransfer));
+ }
+ else
+ VMSVGA3D_GL_COMPLAIN(pState, pContext, ("glBindBuffer(GL_ARRAY_BUFFER, %#x)\n", pSurface->oglId.buffer));
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ default:
+ AssertFailed();
+ break;
+ }
+
+ return rc;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackGenerateMipmaps(PVGASTATECC pThisCC, uint32_t sid, SVGA3dTextureFilter filter)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ PVMSVGA3DSURFACE pSurface;
+ int rc = VINF_SUCCESS;
+ PVMSVGA3DCONTEXT pContext;
+ uint32_t cid;
+ GLint activeTexture = 0;
+
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ Assert(filter != SVGA3D_TEX_FILTER_FLATCUBIC);
+ Assert(filter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+ pSurface->autogenFilter = filter;
+
+ LogFunc(("sid=%u filter=%d\n", sid, filter));
+
+ cid = SVGA3D_INVALID_ID;
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (pSurface->oglId.texture == OPENGL_INVALID_ID)
+ {
+ /* Unknown surface type; turn it into a texture. */
+ LogFunc(("unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->f.s.surface1Flags, pSurface->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ /** @todo new filter */
+ AssertFailed();
+ }
+
+ glGetIntegerv(pSurface->bindingGL, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Must bind texture to the current context in order to change it. */
+ glBindTexture(pSurface->targetGL, pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Generate the mip maps. */
+ pState->ext.glGenerateMipmap(pSurface->targetGL);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Restore the old texture. */
+ glBindTexture(pSurface->targetGL, activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ return VINF_SUCCESS;
+}
+
+
+#ifdef RT_OS_LINUX
+/**
+ * X11 event handling thread.
+ *
+ * @returns VINF_SUCCESS (ignored)
+ * @param hThreadSelf thread handle
+ * @param pvUser pointer to pState structure
+ */
+DECLCALLBACK(int) vmsvga3dXEventThread(RTTHREAD hThreadSelf, void *pvUser)
+{
+ RT_NOREF(hThreadSelf);
+ PVMSVGA3DSTATE pState = (PVMSVGA3DSTATE)pvUser;
+ while (!pState->bTerminate)
+ {
+ while (XPending(pState->display) > 0)
+ {
+ XEvent event;
+ XNextEvent(pState->display, &event);
+
+ switch (event.type)
+ {
+ default:
+ break;
+ }
+ }
+ /* sleep for 16ms to not burn too many cycles */
+ RTThreadSleep(16);
+ }
+ return VINF_SUCCESS;
+}
+#endif // RT_OS_LINUX
+
+
+/**
+ * Create a new 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ * @param fFlags VMSVGA3D_DEF_CTX_F_XXX.
+ */
+int vmsvga3dContextDefineOgl(PVGASTATECC pThisCC, uint32_t cid, uint32_t fFlags)
+{
+ int rc;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+
+ AssertReturn(pState, VERR_NO_MEMORY);
+ AssertReturn( cid < SVGA3D_MAX_CONTEXT_IDS
+ || (cid == VMSVGA3D_SHARED_CTX_ID && (fFlags & VMSVGA3D_DEF_CTX_F_SHARED_CTX)), VERR_INVALID_PARAMETER);
+#if !defined(VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE) || !(defined(RT_OS_DARWIN))
+ AssertReturn(!(fFlags & VMSVGA3D_DEF_CTX_F_OTHER_PROFILE), VERR_INTERNAL_ERROR_3);
+#endif
+
+ Log(("vmsvga3dContextDefine id %x\n", cid));
+
+ if (cid == VMSVGA3D_SHARED_CTX_ID)
+ pContext = &pState->SharedCtx;
+ else
+ {
+ if (cid >= pState->cContexts)
+ {
+ /* Grow the array. */
+ uint32_t cNew = RT_ALIGN(cid + 15, 16);
+ void *pvNew = RTMemRealloc(pState->papContexts, sizeof(pState->papContexts[0]) * cNew);
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pState->papContexts = (PVMSVGA3DCONTEXT *)pvNew;
+ while (pState->cContexts < cNew)
+ {
+ pContext = (PVMSVGA3DCONTEXT)RTMemAllocZ(sizeof(*pContext));
+ AssertReturn(pContext, VERR_NO_MEMORY);
+ pContext->id = SVGA3D_INVALID_ID;
+ pState->papContexts[pState->cContexts++] = pContext;
+ }
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (pState->papContexts[cid]->id != SVGA3D_INVALID_ID)
+ vmsvga3dBackContextDestroy(pThisCC, cid);
+
+ pContext = pState->papContexts[cid];
+ }
+
+ /*
+ * Find or create the shared context if needed (necessary for sharing e.g. textures between contexts).
+ */
+ PVMSVGA3DCONTEXT pSharedCtx = NULL;
+ if (!(fFlags & (VMSVGA3D_DEF_CTX_F_INIT | VMSVGA3D_DEF_CTX_F_SHARED_CTX)))
+ {
+ pSharedCtx = &pState->SharedCtx;
+ if (pSharedCtx->id != VMSVGA3D_SHARED_CTX_ID)
+ {
+ rc = vmsvga3dContextDefineOgl(pThisCC, VMSVGA3D_SHARED_CTX_ID, VMSVGA3D_DEF_CTX_F_SHARED_CTX);
+ AssertLogRelRCReturn(rc, rc);
+
+ /* Create resources which use the shared context. */
+ vmsvga3dOnSharedContextDefine(pState);
+ }
+ }
+
+ /*
+ * Initialize the context.
+ */
+ memset(pContext, 0, sizeof(*pContext));
+ pContext->id = cid;
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); i++)
+ pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID;
+
+ pContext->state.shidVertex = SVGA3D_INVALID_ID;
+ pContext->state.shidPixel = SVGA3D_INVALID_ID;
+ pContext->idFramebuffer = OPENGL_INVALID_ID;
+ pContext->idReadFramebuffer = OPENGL_INVALID_ID;
+ pContext->idDrawFramebuffer = OPENGL_INVALID_ID;
+
+ rc = ShaderContextCreate(&pContext->pShaderContext);
+ AssertRCReturn(rc, rc);
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); i++)
+ pContext->state.aRenderTargets[i] = SVGA3D_INVALID_ID;
+
+#ifdef RT_OS_WINDOWS
+ /* Create a context window with minimal 4x4 size. We will never use the swapchain
+ * to present the rendered image. Rendered images from the guest will be copied to
+ * the VMSVGA SCREEN object, which can be either an offscreen render target or
+ * system memory in the guest VRAM.
+ */
+ rc = vmsvga3dContextWindowCreate(pState->hInstance, pState->pWindowThread, pState->WndRequestSem, &pContext->hwnd);
+ AssertRCReturn(rc, rc);
+
+ pContext->hdc = GetDC(pContext->hwnd);
+ AssertMsgReturn(pContext->hdc, ("GetDC %x failed with %d\n", pContext->hwnd, GetLastError()), VERR_INTERNAL_ERROR);
+
+ PIXELFORMATDESCRIPTOR pfd = {
+ sizeof(PIXELFORMATDESCRIPTOR), /* size of this pfd */
+ 1, /* version number */
+ PFD_DRAW_TO_WINDOW | /* support window */
+ PFD_SUPPORT_OPENGL, /* support OpenGL */
+ PFD_TYPE_RGBA, /* RGBA type */
+ 24, /* 24-bit color depth */
+ 0, 0, 0, 0, 0, 0, /* color bits ignored */
+ 8, /* alpha buffer */
+ 0, /* shift bit ignored */
+ 0, /* no accumulation buffer */
+ 0, 0, 0, 0, /* accum bits ignored */
+ 16, /* set depth buffer */
+ 16, /* set stencil buffer */
+ 0, /* no auxiliary buffer */
+ PFD_MAIN_PLANE, /* main layer */
+ 0, /* reserved */
+ 0, 0, 0 /* layer masks ignored */
+ };
+ int pixelFormat;
+ BOOL ret;
+
+ pixelFormat = ChoosePixelFormat(pContext->hdc, &pfd);
+ /** @todo is this really necessary?? */
+ pixelFormat = ChoosePixelFormat(pContext->hdc, &pfd);
+ AssertMsgReturn(pixelFormat != 0, ("ChoosePixelFormat failed with %d\n", GetLastError()), VERR_INTERNAL_ERROR);
+
+ ret = SetPixelFormat(pContext->hdc, pixelFormat, &pfd);
+ AssertMsgReturn(ret == TRUE, ("SetPixelFormat failed with %d\n", GetLastError()), VERR_INTERNAL_ERROR);
+
+ pContext->hglrc = wglCreateContext(pContext->hdc);
+ AssertMsgReturn(pContext->hglrc, ("wglCreateContext %x failed with %d\n", pContext->hdc, GetLastError()), VERR_INTERNAL_ERROR);
+
+ if (pSharedCtx)
+ {
+ ret = wglShareLists(pSharedCtx->hglrc, pContext->hglrc);
+ AssertMsg(ret == TRUE, ("wglShareLists(%p, %p) failed with %d\n", pSharedCtx->hglrc, pContext->hglrc, GetLastError()));
+ }
+
+#elif defined(RT_OS_DARWIN)
+ pContext->fOtherProfile = RT_BOOL(fFlags & VMSVGA3D_DEF_CTX_F_OTHER_PROFILE);
+
+ NativeNSOpenGLContextRef pShareContext = pSharedCtx ? pSharedCtx->cocoaContext : NULL;
+ vmsvga3dCocoaCreateViewAndContext(&pContext->cocoaView, &pContext->cocoaContext,
+ NULL,
+ 4, 4,
+ pShareContext, pContext->fOtherProfile);
+
+#else
+ if (pState->display == NULL)
+ {
+ /* get an X display and make sure we have glX 1.3 */
+ pState->display = XOpenDisplay(0);
+ AssertLogRelMsgReturn(pState->display, ("XOpenDisplay failed"), VERR_INTERNAL_ERROR);
+ int glxMajor, glxMinor;
+ Bool ret = glXQueryVersion(pState->display, &glxMajor, &glxMinor);
+ AssertLogRelMsgReturn(ret && glxMajor == 1 && glxMinor >= 3, ("glX >=1.3 not present"), VERR_INTERNAL_ERROR);
+ /* start our X event handling thread */
+ rc = RTThreadCreate(&pState->pWindowThread, vmsvga3dXEventThread, pState, 0, RTTHREADTYPE_GUI, RTTHREADFLAGS_WAITABLE, "VMSVGA3DXEVENT");
+ AssertLogRelMsgReturn(RT_SUCCESS(rc), ("Async IO Thread creation for 3d window handling failed rc=%Rrc\n", rc), rc);
+ }
+
+ Window defaultRootWindow = XDefaultRootWindow(pState->display);
+ /* Create a small 4x4 window required for GL context. */
+ int attrib[] =
+ {
+ GLX_RGBA,
+ GLX_RED_SIZE, 1,
+ GLX_GREEN_SIZE, 1,
+ GLX_BLUE_SIZE, 1,
+ //GLX_ALPHA_SIZE, 1, this flips the bbos screen
+ GLX_DOUBLEBUFFER,
+ None
+ };
+ XVisualInfo *vi = glXChooseVisual(pState->display, DefaultScreen(pState->display), attrib);
+ AssertLogRelMsgReturn(vi, ("glXChooseVisual failed"), VERR_INTERNAL_ERROR);
+ XSetWindowAttributes swa;
+ swa.colormap = XCreateColormap(pState->display, defaultRootWindow, vi->visual, AllocNone);
+ AssertLogRelMsgReturn(swa.colormap, ("XCreateColormap failed"), VERR_INTERNAL_ERROR);
+ swa.border_pixel = 0;
+ swa.background_pixel = 0;
+ swa.event_mask = StructureNotifyMask;
+ unsigned long flags = CWBorderPixel | CWBackPixel | CWColormap | CWEventMask;
+ pContext->window = XCreateWindow(pState->display, defaultRootWindow,
+ 0, 0, 4, 4,
+ 0, vi->depth, InputOutput,
+ vi->visual, flags, &swa);
+ AssertLogRelMsgReturn(pContext->window, ("XCreateWindow failed"), VERR_INTERNAL_ERROR);
+
+ /* The window is hidden by default and never mapped, because we only render offscreen and never present to it. */
+
+ GLXContext shareContext = pSharedCtx ? pSharedCtx->glxContext : NULL;
+ pContext->glxContext = glXCreateContext(pState->display, vi, shareContext, GL_TRUE);
+ XFree(vi);
+ AssertLogRelMsgReturn(pContext->glxContext, ("glXCreateContext failed"), VERR_INTERNAL_ERROR);
+#endif
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* NULL during the first PowerOn call. */
+ if (pState->ext.glGenFramebuffers)
+ {
+ /* Create a framebuffer object for this context. */
+ pState->ext.glGenFramebuffers(1, &pContext->idFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Bind the object to the framebuffer target. */
+ pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, pContext->idFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Create read and draw framebuffer objects for this context. */
+ pState->ext.glGenFramebuffers(1, &pContext->idReadFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pState->ext.glGenFramebuffers(1, &pContext->idDrawFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ }
+#if 0
+ /** @todo move to shader lib!!! */
+ /* Clear the screen */
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
+ glClearIndex(0);
+ glClearDepth(1);
+ glClearStencil(0xffff);
+ glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
+ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
+ glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
+ if (pState->ext.glProvokingVertex)
+ pState->ext.glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);
+ /** @todo move to shader lib!!! */
+#endif
+ return VINF_SUCCESS;
+}
+
+#if defined(RT_OS_LINUX)
+/*
+ * HW accelerated graphics output.
+ */
+
+/**
+ * VMSVGA3d screen data.
+ *
+ * Allocated on the heap and pointed to by VMSVGASCREENOBJECT::pHwScreen.
+ */
+typedef struct VMSVGAHWSCREEN
+{
+ /* OpenGL context, which is used for the screen updates. */
+ GLXContext glxctx;
+
+ /* The overlay window. */
+ Window xwindow;
+
+ /* The RGBA texture which hold the screen content. */
+ GLuint idScreenTexture;
+
+ /* Read and draw framebuffer objects for copying a surface to the screen texture. */
+ GLuint idReadFramebuffer;
+ GLuint idDrawFramebuffer;
+} VMSVGAHWSCREEN;
+
+/* Send a notification to the UI. */
+#if 0 /* Unused */
+static int vmsvga3dDrvNotifyHwScreen(PVGASTATECC pThisCC, VBOX3D_NOTIFY_TYPE enmNotification,
+ uint32_t idScreen, Pixmap pixmap, void *pvData, size_t cbData)
+{
+ uint8_t au8Buffer[128];
+ AssertLogRelMsgReturn(cbData <= sizeof(au8Buffer) - sizeof(VBOX3DNOTIFY),
+ ("cbData %zu", cbData),
+ VERR_INVALID_PARAMETER);
+
+ VBOX3DNOTIFY *p = (VBOX3DNOTIFY *)&au8Buffer[0];
+ p->enmNotification = enmNotification;
+ p->iDisplay = idScreen;
+ p->u32Reserved = 0;
+ p->cbData = cbData + sizeof(uint64_t);
+ /* au8Data consists of a 64 bit pixmap handle followed by notification specific data. */
+ AssertCompile(sizeof(pixmap) <= sizeof(uint64_t));
+ *(uint64_t *)&p->au8Data[0] = (uint64_t)pixmap;
+ memcpy(&p->au8Data[sizeof(uint64_t)], pvData, cbData);
+
+ int rc = pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, p);
+ return rc;
+}
+#endif /* Unused */
+
+static void vmsvga3dDrvNotifyHwOverlay(PVGASTATECC pThisCC, VBOX3D_NOTIFY_TYPE enmNotification, uint32_t idScreen)
+{
+ uint8_t au8Buffer[128];
+ VBOX3DNOTIFY *p = (VBOX3DNOTIFY *)&au8Buffer[0];
+ p->enmNotification = enmNotification;
+ p->iDisplay = idScreen;
+ p->u32Reserved = 0;
+ p->cbData = sizeof(uint64_t);
+ *(uint64_t *)&p->au8Data[0] = 0;
+
+ pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, p);
+}
+
+/* Get X Window handle of the UI Framebuffer window. */
+static int vmsvga3dDrvQueryWindow(PVGASTATECC pThisCC, uint32_t idScreen, Window *pWindow)
+{
+ uint8_t au8Buffer[128];
+ VBOX3DNOTIFY *p = (VBOX3DNOTIFY *)&au8Buffer[0];
+ p->enmNotification = VBOX3D_NOTIFY_TYPE_HW_OVERLAY_GET_ID;
+ p->iDisplay = idScreen;
+ p->u32Reserved = 0;
+ p->cbData = sizeof(uint64_t);
+ *(uint64_t *)&p->au8Data[0] = 0;
+
+ int rc = pThisCC->pDrv->pfn3DNotifyProcess(pThisCC->pDrv, p);
+ if (RT_SUCCESS(rc))
+ {
+ *pWindow = (Window)*(uint64_t *)&p->au8Data[0];
+ }
+ return rc;
+}
+
+static int ctxErrorHandler(Display *dpy, XErrorEvent *ev)
+{
+ RT_NOREF(dpy);
+ LogRel4(("VMSVGA: XError %d\n", (int)ev->error_code));
+ return 0;
+}
+
+/* Create an overlay X window for the HW accelerated screen. */
+static int vmsvga3dHwScreenCreate(PVMSVGA3DSTATE pState, Window parentWindow, unsigned int cWidth, unsigned int cHeight, VMSVGAHWSCREEN *p)
+{
+ int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(&ctxErrorHandler);
+
+ int rc = VINF_SUCCESS;
+
+ XWindowAttributes parentAttr;
+ if (XGetWindowAttributes(pState->display, parentWindow, &parentAttr) == 0)
+ return VERR_INVALID_PARAMETER;
+
+ int const idxParentScreen = XScreenNumberOfScreen(parentAttr.screen);
+
+ /*
+ * Create a new GL context, which will be used for copying to the screen.
+ */
+
+ /* FBConfig attributes for the overlay window. */
+ static int const aConfigAttribList[] =
+ {
+ GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, // Must support GLX windows
+ GLX_DOUBLEBUFFER, False, // Double buffering had a much lower performance.
+ GLX_RED_SIZE, 8, // True color RGB with 8 bits per channel.
+ GLX_GREEN_SIZE, 8,
+ GLX_BLUE_SIZE, 8,
+ GLX_ALPHA_SIZE, 8,
+ GLX_STENCIL_SIZE, 0, // No stencil buffer
+ GLX_DEPTH_SIZE, 0, // No depth buffer
+ None
+ };
+
+ /* Find a suitable FB config. */
+ int cConfigs = 0;
+ GLXFBConfig *paConfigs = glXChooseFBConfig(pState->display, idxParentScreen, aConfigAttribList, &cConfigs);
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: paConfigs %p cConfigs %d\n", (void *)paConfigs, cConfigs));
+ if (paConfigs)
+ {
+ XVisualInfo *vi = NULL;
+ int i = 0;
+ for (; i < cConfigs; ++i)
+ {
+ /* Use XFree to free the data returned in the previous iteration of this loop. */
+ if (vi)
+ XFree(vi);
+
+ vi = glXGetVisualFromFBConfig(pState->display, paConfigs[i]);
+ if (!vi)
+ continue;
+
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: %p vid %lu screen %d depth %d r %lu g %lu b %lu clrmap %d bitsperrgb %d\n",
+ (void *)vi->visual, vi->visualid, vi->screen, vi->depth,
+ vi->red_mask, vi->green_mask, vi->blue_mask, vi->colormap_size, vi->bits_per_rgb));
+
+ /* Same screen as the parent window. */
+ if (vi->screen != idxParentScreen)
+ continue;
+
+ /* Search for 32 bits per pixel. */
+ if (vi->depth != 32)
+ continue;
+
+ /* 8 bits per color component is enough. */
+ if (vi->bits_per_rgb != 8)
+ continue;
+
+ /* Render to pixmap. */
+ int value = 0;
+ glXGetFBConfigAttrib(pState->display, paConfigs[i], GLX_DRAWABLE_TYPE, &value);
+ if (!(value & GLX_WINDOW_BIT))
+ continue;
+
+ /* This FB config can be used. */
+ break;
+ }
+
+ if (i < cConfigs)
+ {
+ /* Found a suitable config with index i. */
+
+ /* Create an overlay window. */
+ XSetWindowAttributes swa;
+ RT_ZERO(swa);
+
+ swa.colormap = XCreateColormap(pState->display, parentWindow, vi->visual, AllocNone);
+ AssertLogRelMsg(swa.colormap, ("XCreateColormap failed"));
+ swa.border_pixel = 0;
+ swa.background_pixel = 0;
+ swa.event_mask = StructureNotifyMask;
+ swa.override_redirect = 1;
+ unsigned long const swaAttrs = CWBorderPixel | CWBackPixel | CWColormap | CWEventMask | CWOverrideRedirect;
+ p->xwindow = XCreateWindow(pState->display, parentWindow,
+ 0, 0, cWidth, cHeight, 0, vi->depth, InputOutput,
+ vi->visual, swaAttrs, &swa);
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: p->xwindow %ld\n", p->xwindow));
+ if (p->xwindow)
+ {
+
+ p->glxctx = glXCreateContext(pState->display, vi, pState->SharedCtx.glxContext, GL_TRUE);
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: p->glxctx %p\n", (void *)p->glxctx));
+ if (p->glxctx)
+ {
+ XMapWindow(pState->display, p->xwindow);
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: glXCreateContext failed\n"));
+ rc = VERR_NOT_SUPPORTED;
+ }
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: XCreateWindow failed\n"));
+ rc = VERR_NOT_SUPPORTED;
+ }
+
+ XSync(pState->display, False);
+ }
+ else
+ {
+ /* A suitable config is not found. */
+ LogRel4(("VMSVGA: vmsvga3dHwScreenCreate: no FBConfig\n"));
+ rc = VERR_NOT_SUPPORTED;
+ }
+
+ if (vi)
+ XFree(vi);
+
+ /* "Use XFree to free the memory returned by glXChooseFBConfig." */
+ XFree(paConfigs);
+ }
+ else
+ {
+ /* glXChooseFBConfig failed. */
+ rc = VERR_NOT_SUPPORTED;
+ }
+
+ XSetErrorHandler(oldHandler);
+ return rc;
+}
+
+/* Destroy a HW accelerated screen. */
+static void vmsvga3dHwScreenDestroy(PVMSVGA3DSTATE pState, VMSVGAHWSCREEN *p)
+{
+ if (p)
+ {
+ LogRel4(("VMSVGA: vmsvga3dHwScreenDestroy: p->xwindow %ld, ctx %p\n", p->xwindow, (void *)p->glxctx));
+ if (p->glxctx)
+ {
+ /* GLX context is changed here, so other code has to set the appropriate context again. */
+ VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState);
+
+ glXMakeCurrent(pState->display, p->xwindow, p->glxctx);
+
+ /* Clean up OpenGL. */
+ if (p->idReadFramebuffer != OPENGL_INVALID_ID)
+ pState->ext.glDeleteFramebuffers(1, &p->idReadFramebuffer);
+ if (p->idDrawFramebuffer != OPENGL_INVALID_ID)
+ pState->ext.glDeleteFramebuffers(1, &p->idDrawFramebuffer);
+ if (p->idScreenTexture != OPENGL_INVALID_ID)
+ glDeleteTextures(1, &p->idScreenTexture);
+
+ glXMakeCurrent(pState->display, None, NULL);
+
+ glXDestroyContext(pState->display, p->glxctx);
+ }
+
+ if (p->xwindow)
+ XDestroyWindow(pState->display, p->xwindow);
+
+ RT_ZERO(*p);
+ }
+}
+
+#define GLCHECK() \
+ do { \
+ int glErr = glGetError(); \
+ if (glErr != GL_NO_ERROR) LogRel4(("VMSVGA: GL error 0x%x @%d\n", glErr, __LINE__)); \
+ } while(0)
+
+static DECLCALLBACK(int) vmsvga3dBackDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: screen %u\n", pScreen->idScreen));
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NOT_SUPPORTED);
+
+ if (!pThis->svga.f3DOverlayEnabled)
+ return VERR_NOT_SUPPORTED;
+
+ Assert(pScreen->pHwScreen == NULL);
+
+ VMSVGAHWSCREEN *p = (VMSVGAHWSCREEN *)RTMemAllocZ(sizeof(VMSVGAHWSCREEN));
+ AssertPtrReturn(p, VERR_NO_MEMORY);
+
+ /* Query the parent window ID from the UI framebuffer.
+ * If it is there then
+ * the device will create a texture for the screen content and an overlay window to present the screen content.
+ * otherwise
+ * the device will use the guest VRAM system memory for the screen content.
+ */
+ Window parentWindow;
+ int rc = vmsvga3dDrvQueryWindow(pThisCC, pScreen->idScreen, &parentWindow);
+ if (RT_SUCCESS(rc))
+ {
+ /* Create the hardware accelerated screen. */
+ rc = vmsvga3dHwScreenCreate(pState, parentWindow, pScreen->cWidth, pScreen->cHeight, p);
+ if (RT_SUCCESS(rc))
+ {
+ /*
+ * Setup the OpenGL context of the screen. The context will be used to draw on the screen.
+ */
+
+ /* GLX context is changed here, so other code has to set the appropriate context again. */
+ VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState);
+
+ Bool const fSuccess = glXMakeCurrent(pState->display, p->xwindow, p->glxctx);
+ if (fSuccess)
+ {
+ /* Set GL state. */
+ glClearColor(0, 0, 0, 1);
+ glEnable(GL_TEXTURE_2D);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_CULL_FACE);
+
+ /* The RGBA texture which hold the screen content. */
+ glGenTextures(1, &p->idScreenTexture); GLCHECK();
+ glBindTexture(GL_TEXTURE_2D, p->idScreenTexture); GLCHECK();
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); GLCHECK();
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); GLCHECK();
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, pScreen->cWidth, pScreen->cHeight, 0,
+ GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL); GLCHECK();
+
+ /* Create read and draw framebuffer objects for this screen. */
+ pState->ext.glGenFramebuffers(1, &p->idReadFramebuffer); GLCHECK();
+ pState->ext.glGenFramebuffers(1, &p->idDrawFramebuffer); GLCHECK();
+
+ /* Work in screen coordinates. */
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glOrtho(0, pScreen->cWidth, 0, pScreen->cHeight, -1, 1);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+
+ /* Clear the texture. */
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, p->idDrawFramebuffer); GLCHECK();
+ pState->ext.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
+ p->idScreenTexture, 0); GLCHECK();
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); GLCHECK();
+
+ glXMakeCurrent(pState->display, None, NULL);
+
+ XSync(pState->display, False);
+
+ vmsvga3dDrvNotifyHwOverlay(pThisCC, VBOX3D_NOTIFY_TYPE_HW_OVERLAY_CREATED, pScreen->idScreen);
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: failed to set current context\n"));
+ rc = VERR_NOT_SUPPORTED;
+ }
+ }
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: no framebuffer\n"));
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ LogRel(("VMSVGA: Using HW accelerated screen %u\n", pScreen->idScreen));
+ pScreen->pHwScreen = p;
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dBackDefineScreen: %Rrc\n", rc));
+ vmsvga3dHwScreenDestroy(pState, p);
+ RTMemFree(p);
+ }
+
+ return rc;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ LogRel4(("VMSVGA: vmsvga3dBackDestroyScreen: screen %u\n", pScreen->idScreen));
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NOT_SUPPORTED);
+
+ int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(&ctxErrorHandler);
+
+ VMSVGAHWSCREEN *p = pScreen->pHwScreen;
+ if (p)
+ {
+ pScreen->pHwScreen = NULL;
+
+ vmsvga3dDrvNotifyHwOverlay(pThisCC, VBOX3D_NOTIFY_TYPE_HW_OVERLAY_DESTROYED, pScreen->idScreen);
+
+ vmsvga3dHwScreenDestroy(pState, p);
+ RTMemFree(p);
+ }
+
+ XSetErrorHandler(oldHandler);
+
+ return VINF_SUCCESS;
+}
+
+/* Blit a surface to the GLX pixmap. */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceBlitToScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen,
+ SVGASignedRect destRect, SVGA3dSurfaceImageId srcImage,
+ SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *paRects)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NOT_SUPPORTED);
+
+ VMSVGAHWSCREEN *p = pScreen->pHwScreen;
+ AssertReturn(p, VERR_NOT_SUPPORTED);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, srcImage.sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ LogFunc(("src sid=%u flags=0x%x format=%d -> create texture\n", srcImage.sid, pSurface->f.s.surface1Flags, pSurface->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, &pState->SharedCtx, VMSVGA3D_SHARED_CTX_ID, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ AssertReturn(pSurface->enmOGLResType == VMSVGA3D_OGLRESTYPE_TEXTURE, VERR_NOT_SUPPORTED);
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, srcImage.face, srcImage.mipmap, &pMipLevel);
+ AssertRCReturn(rc, rc);
+
+ /** @todo Implement. */
+ RT_NOREF(cRects, paRects);
+
+ /* GLX context is changed here, so other code has to set appropriate context again. */
+ VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState);
+
+ int (*oldHandler)(Display*, XErrorEvent*) = XSetErrorHandler(&ctxErrorHandler);
+
+ Bool fSuccess = glXMakeCurrent(pState->display, p->xwindow, p->glxctx);
+ if (fSuccess)
+ {
+ /* Activate the read and draw framebuffer objects. */
+ pState->ext.glBindFramebuffer(GL_READ_FRAMEBUFFER, p->idReadFramebuffer); GLCHECK();
+ pState->ext.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, p->idDrawFramebuffer); GLCHECK();
+
+ /* Bind the source and destination objects to the right place. */
+ pState->ext.glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
+ pSurface->oglId.texture, 0); GLCHECK();
+ pState->ext.glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
+ p->idScreenTexture, 0); GLCHECK();
+
+ pState->ext.glBlitFramebuffer(srcRect.left,
+ srcRect.top,
+ srcRect.right,
+ srcRect.bottom,
+ destRect.left,
+ destRect.top,
+ destRect.right,
+ destRect.bottom,
+ GL_COLOR_BUFFER_BIT,
+ GL_NEAREST); GLCHECK();
+
+ /* Reset the frame buffer association */
+ pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, 0); GLCHECK();
+
+ /* Update the overlay window. */
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glBindTexture(GL_TEXTURE_2D, p->idScreenTexture); GLCHECK();
+
+ GLint const w = pScreen->cWidth;
+ GLint const h = pScreen->cHeight;
+
+ glBegin(GL_QUADS);
+ glTexCoord2f(0.0f, 0.0f); glVertex2i(0, h);
+ glTexCoord2f(0.0f, 1.0f); glVertex2i(0, 0);
+ glTexCoord2f(1.0f, 1.0f); glVertex2i(w, 0);
+ glTexCoord2f(1.0f, 0.0f); glVertex2i(w, h);
+ glEnd(); GLCHECK();
+
+ glBindTexture(GL_TEXTURE_2D, 0); GLCHECK();
+
+ glXMakeCurrent(pState->display, None, NULL);
+ }
+ else
+ {
+ LogRel4(("VMSVGA: vmsvga3dBackSurfaceBlitToScreen: screen %u, glXMakeCurrent for pixmap failed\n", pScreen->idScreen));
+ }
+
+ XSetErrorHandler(oldHandler);
+
+ return VINF_SUCCESS;
+}
+
+#else /* !RT_OS_LINUX */
+
+static DECLCALLBACK(int) vmsvga3dBackDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ RT_NOREF(pThis, pThisCC, pScreen);
+ return VERR_NOT_IMPLEMENTED;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ RT_NOREF(pThisCC, pScreen);
+ return VERR_NOT_IMPLEMENTED;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceBlitToScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen,
+ SVGASignedRect destRect, SVGA3dSurfaceImageId srcImage,
+ SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *paRects)
+{
+ RT_NOREF(pThisCC, pScreen, destRect, srcImage, srcRect, cRects, paRects);
+ return VERR_NOT_IMPLEMENTED;
+}
+#endif
+
+/**
+ * Create a new 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ */
+static DECLCALLBACK(int) vmsvga3dBackContextDefine(PVGASTATECC pThisCC, uint32_t cid)
+{
+ return vmsvga3dContextDefineOgl(pThisCC, cid, 0/*fFlags*/);
+}
+
+/**
+ * Destroys a 3d context.
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pContext The context to destroy.
+ * @param cid Context id
+ */
+static int vmsvga3dContextDestroyOgl(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ AssertReturn(pContext, VERR_INVALID_PARAMETER);
+ AssertReturn(pContext->id == cid, VERR_INVALID_PARAMETER);
+ Log(("vmsvga3dContextDestroyOgl id %x\n", cid));
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (pContext->id == VMSVGA3D_SHARED_CTX_ID)
+ {
+ /* Delete resources which use the shared context. */
+ vmsvga3dOnSharedContextDestroy(pState);
+ }
+
+ /* Destroy all leftover pixel shaders. */
+ for (uint32_t i = 0; i < pContext->cPixelShaders; i++)
+ {
+ if (pContext->paPixelShader[i].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, pContext->paPixelShader[i].cid, pContext->paPixelShader[i].id, pContext->paPixelShader[i].type);
+ }
+ if (pContext->paPixelShader)
+ RTMemFree(pContext->paPixelShader);
+
+ /* Destroy all leftover vertex shaders. */
+ for (uint32_t i = 0; i < pContext->cVertexShaders; i++)
+ {
+ if (pContext->paVertexShader[i].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, pContext->paVertexShader[i].cid, pContext->paVertexShader[i].id, pContext->paVertexShader[i].type);
+ }
+ if (pContext->paVertexShader)
+ RTMemFree(pContext->paVertexShader);
+
+ if (pContext->state.paVertexShaderConst)
+ RTMemFree(pContext->state.paVertexShaderConst);
+ if (pContext->state.paPixelShaderConst)
+ RTMemFree(pContext->state.paPixelShaderConst);
+
+ if (pContext->pShaderContext)
+ {
+ int rc = ShaderContextDestroy(pContext->pShaderContext);
+ AssertRC(rc);
+ }
+
+ if (pContext->idFramebuffer != OPENGL_INVALID_ID)
+ {
+ /* Unbind the object from the framebuffer target. */
+ pState->ext.glBindFramebuffer(GL_FRAMEBUFFER, 0 /* back buffer */);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pState->ext.glDeleteFramebuffers(1, &pContext->idFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ if (pContext->idReadFramebuffer != OPENGL_INVALID_ID)
+ {
+ pState->ext.glDeleteFramebuffers(1, &pContext->idReadFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ if (pContext->idDrawFramebuffer != OPENGL_INVALID_ID)
+ {
+ pState->ext.glDeleteFramebuffers(1, &pContext->idDrawFramebuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ }
+
+ vmsvga3dBackOcclusionQueryDelete(pThisCC, pContext);
+
+#ifdef RT_OS_WINDOWS
+ wglMakeCurrent(pContext->hdc, NULL);
+ wglDeleteContext(pContext->hglrc);
+ ReleaseDC(pContext->hwnd, pContext->hdc);
+
+ /* Destroy the window we've created. */
+ int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_DESTROYWINDOW, (WPARAM)pContext->hwnd, 0);
+ AssertRC(rc);
+#elif defined(RT_OS_DARWIN)
+ vmsvga3dCocoaDestroyViewAndContext(pContext->cocoaView, pContext->cocoaContext);
+#elif defined(RT_OS_LINUX)
+ glXMakeCurrent(pState->display, None, NULL);
+ glXDestroyContext(pState->display, pContext->glxContext);
+ XDestroyWindow(pState->display, pContext->window);
+#endif
+
+ memset(pContext, 0, sizeof(*pContext));
+ pContext->id = SVGA3D_INVALID_ID;
+
+ VMSVGA3D_CLEAR_CURRENT_CONTEXT(pState);
+ return VINF_SUCCESS;
+}
+
+/**
+ * Destroy an existing 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ */
+static DECLCALLBACK(int) vmsvga3dBackContextDestroy(PVGASTATECC pThisCC, uint32_t cid)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_WRONG_ORDER);
+
+ /*
+ * Resolve the context and hand it to the common worker function.
+ */
+ if ( cid < pState->cContexts
+ && pState->papContexts[cid]->id == cid)
+ return vmsvga3dContextDestroyOgl(pThisCC, pState->papContexts[cid], cid);
+
+ AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+ return VINF_SUCCESS;
+}
+
+/**
+ * Worker for vmsvga3dBackChangeMode that resizes a context.
+ *
+ * @param pState The VMSVGA3d state.
+ * @param pContext The context.
+ */
+static void vmsvga3dChangeModeOneContext(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pState, pContext);
+ /* Do nothing. The window is not used for presenting. */
+}
+
+/* Handle resize */
+static DECLCALLBACK(int) vmsvga3dBackChangeMode(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ /* Resize the shared context too. */
+ if (pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ vmsvga3dChangeModeOneContext(pState, &pState->SharedCtx);
+
+ /* Resize all active contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[i];
+ if (pContext->id != SVGA3D_INVALID_ID)
+ vmsvga3dChangeModeOneContext(pState, pContext);
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetTransform(PVGASTATECC pThisCC, uint32_t cid, SVGA3dTransformType type, float matrix[16])
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ bool fModelViewChanged = false;
+
+ Log(("vmsvga3dSetTransform cid=%u %s\n", cid, vmsvgaTransformToString(type)));
+
+ ASSERT_GUEST_RETURN((unsigned)type < SVGA3D_TRANSFORM_MAX, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Save this matrix for vm state save/restore. */
+ pContext->state.aTransformState[type].fValid = true;
+ memcpy(pContext->state.aTransformState[type].matrix, matrix, sizeof(pContext->state.aTransformState[type].matrix));
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_TRANSFORM;
+
+ Log(("Matrix [%d %d %d %d]\n", (int)(matrix[0] * 10.0), (int)(matrix[1] * 10.0), (int)(matrix[2] * 10.0), (int)(matrix[3] * 10.0)));
+ Log((" [%d %d %d %d]\n", (int)(matrix[4] * 10.0), (int)(matrix[5] * 10.0), (int)(matrix[6] * 10.0), (int)(matrix[7] * 10.0)));
+ Log((" [%d %d %d %d]\n", (int)(matrix[8] * 10.0), (int)(matrix[9] * 10.0), (int)(matrix[10] * 10.0), (int)(matrix[11] * 10.0)));
+ Log((" [%d %d %d %d]\n", (int)(matrix[12] * 10.0), (int)(matrix[13] * 10.0), (int)(matrix[14] * 10.0), (int)(matrix[15] * 10.0)));
+
+ switch (type)
+ {
+ case SVGA3D_TRANSFORM_VIEW:
+ /* View * World = Model View */
+ glMatrixMode(GL_MODELVIEW);
+ glLoadMatrixf(matrix);
+ if (pContext->state.aTransformState[SVGA3D_TRANSFORM_WORLD].fValid)
+ glMultMatrixf(pContext->state.aTransformState[SVGA3D_TRANSFORM_WORLD].matrix);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ fModelViewChanged = true;
+ break;
+
+ case SVGA3D_TRANSFORM_PROJECTION:
+ {
+ rc = ShaderTransformProjection(pContext->state.RectViewPort.w, pContext->state.RectViewPort.h, matrix, false /* fPretransformed */);
+ AssertRCReturn(rc, rc);
+ break;
+ }
+
+ case SVGA3D_TRANSFORM_TEXTURE0:
+ glMatrixMode(GL_TEXTURE);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glLoadMatrixf(matrix);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_TRANSFORM_TEXTURE1:
+ case SVGA3D_TRANSFORM_TEXTURE2:
+ case SVGA3D_TRANSFORM_TEXTURE3:
+ case SVGA3D_TRANSFORM_TEXTURE4:
+ case SVGA3D_TRANSFORM_TEXTURE5:
+ case SVGA3D_TRANSFORM_TEXTURE6:
+ case SVGA3D_TRANSFORM_TEXTURE7:
+ Log(("vmsvga3dSetTransform: unsupported SVGA3D_TRANSFORM_TEXTUREx transform!!\n"));
+ return VERR_INVALID_PARAMETER;
+
+ case SVGA3D_TRANSFORM_WORLD:
+ /* View * World = Model View */
+ glMatrixMode(GL_MODELVIEW);
+ if (pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].fValid)
+ glLoadMatrixf(pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].matrix);
+ else
+ glLoadIdentity();
+ glMultMatrixf(matrix);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ fModelViewChanged = true;
+ break;
+
+ case SVGA3D_TRANSFORM_WORLD1:
+ case SVGA3D_TRANSFORM_WORLD2:
+ case SVGA3D_TRANSFORM_WORLD3:
+ Log(("vmsvga3dSetTransform: unsupported SVGA3D_TRANSFORM_WORLDx transform!!\n"));
+ return VERR_INVALID_PARAMETER;
+
+ default:
+ Log(("vmsvga3dSetTransform: unknown type!!\n"));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ /* Apparently we need to reset the light and clip data after modifying the modelview matrix. */
+ if (fModelViewChanged)
+ {
+ /* Reprogram the clip planes. */
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aClipPlane); j++)
+ {
+ if (pContext->state.aClipPlane[j].fValid == true)
+ vmsvga3dBackSetClipPlane(pThisCC, cid, j, pContext->state.aClipPlane[j].plane);
+ }
+
+ /* Reprogram the light data. */
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aLightData); j++)
+ {
+ if (pContext->state.aLightData[j].fValidData == true)
+ vmsvga3dBackSetLightData(pThisCC, cid, j, &pContext->state.aLightData[j].data);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetZRange(PVGASTATECC pThisCC, uint32_t cid, SVGA3dZRange zRange)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetZRange cid=%u min=%d max=%d\n", cid, (uint32_t)(zRange.min * 100.0), (uint32_t)(zRange.max * 100.0)));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ pContext->state.zRange = zRange;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_ZRANGE;
+
+ if (zRange.min < -1.0)
+ zRange.min = -1.0;
+ if (zRange.max > 1.0)
+ zRange.max = 1.0;
+
+ glDepthRange((GLdouble)zRange.min, (GLdouble)zRange.max);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ return VINF_SUCCESS;
+}
+
+/**
+ * Convert SVGA blend op value to its OpenGL equivalent
+ */
+static GLenum vmsvga3dBlendOp2GL(uint32_t blendOp)
+{
+ switch (blendOp)
+ {
+ case SVGA3D_BLENDOP_ZERO:
+ return GL_ZERO;
+ case SVGA3D_BLENDOP_ONE:
+ return GL_ONE;
+ case SVGA3D_BLENDOP_SRCCOLOR:
+ return GL_SRC_COLOR;
+ case SVGA3D_BLENDOP_INVSRCCOLOR:
+ return GL_ONE_MINUS_SRC_COLOR;
+ case SVGA3D_BLENDOP_SRCALPHA:
+ return GL_SRC_ALPHA;
+ case SVGA3D_BLENDOP_INVSRCALPHA:
+ return GL_ONE_MINUS_SRC_ALPHA;
+ case SVGA3D_BLENDOP_DESTALPHA:
+ return GL_DST_ALPHA;
+ case SVGA3D_BLENDOP_INVDESTALPHA:
+ return GL_ONE_MINUS_DST_ALPHA;
+ case SVGA3D_BLENDOP_DESTCOLOR:
+ return GL_DST_COLOR;
+ case SVGA3D_BLENDOP_INVDESTCOLOR:
+ return GL_ONE_MINUS_DST_COLOR;
+ case SVGA3D_BLENDOP_SRCALPHASAT:
+ return GL_SRC_ALPHA_SATURATE;
+ case SVGA3D_BLENDOP_BLENDFACTOR:
+ return GL_CONSTANT_COLOR;
+ case SVGA3D_BLENDOP_INVBLENDFACTOR:
+ return GL_ONE_MINUS_CONSTANT_COLOR;
+ default:
+ AssertFailed();
+ return GL_ONE;
+ }
+}
+
+static GLenum vmsvga3dBlendEquation2GL(uint32_t blendEq)
+{
+ switch (blendEq)
+ {
+ case SVGA3D_BLENDEQ_ADD:
+ return GL_FUNC_ADD;
+ case SVGA3D_BLENDEQ_SUBTRACT:
+ return GL_FUNC_SUBTRACT;
+ case SVGA3D_BLENDEQ_REVSUBTRACT:
+ return GL_FUNC_REVERSE_SUBTRACT;
+ case SVGA3D_BLENDEQ_MINIMUM:
+ return GL_MIN;
+ case SVGA3D_BLENDEQ_MAXIMUM:
+ return GL_MAX;
+ default:
+ /* SVGA3D_BLENDEQ_INVALID means that the render state has not been set, therefore use default. */
+ AssertMsg(blendEq == SVGA3D_BLENDEQ_INVALID, ("blendEq=%d (%#x)\n", blendEq, blendEq));
+ return GL_FUNC_ADD;
+ }
+}
+
+static GLenum vmsvgaCmpFunc2GL(uint32_t cmpFunc)
+{
+ switch (cmpFunc)
+ {
+ case SVGA3D_CMP_NEVER:
+ return GL_NEVER;
+ case SVGA3D_CMP_LESS:
+ return GL_LESS;
+ case SVGA3D_CMP_EQUAL:
+ return GL_EQUAL;
+ case SVGA3D_CMP_LESSEQUAL:
+ return GL_LEQUAL;
+ case SVGA3D_CMP_GREATER:
+ return GL_GREATER;
+ case SVGA3D_CMP_NOTEQUAL:
+ return GL_NOTEQUAL;
+ case SVGA3D_CMP_GREATEREQUAL:
+ return GL_GEQUAL;
+ case SVGA3D_CMP_ALWAYS:
+ return GL_ALWAYS;
+ default:
+ Assert(cmpFunc == SVGA3D_CMP_INVALID);
+ return GL_LESS;
+ }
+}
+
+static GLenum vmsvgaStencipOp2GL(uint32_t stencilOp)
+{
+ switch (stencilOp)
+ {
+ case SVGA3D_STENCILOP_KEEP:
+ return GL_KEEP;
+ case SVGA3D_STENCILOP_ZERO:
+ return GL_ZERO;
+ case SVGA3D_STENCILOP_REPLACE:
+ return GL_REPLACE;
+ case SVGA3D_STENCILOP_INCRSAT:
+ return GL_INCR_WRAP;
+ case SVGA3D_STENCILOP_DECRSAT:
+ return GL_DECR_WRAP;
+ case SVGA3D_STENCILOP_INVERT:
+ return GL_INVERT;
+ case SVGA3D_STENCILOP_INCR:
+ return GL_INCR;
+ case SVGA3D_STENCILOP_DECR:
+ return GL_DECR;
+ default:
+ Assert(stencilOp == SVGA3D_STENCILOP_INVALID);
+ return GL_KEEP;
+ }
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetRenderState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState)
+{
+ uint32_t val = UINT32_MAX; /* Shut up MSC. */
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetRenderState cid=%u cRenderStates=%d\n", cid, cRenderStates));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ for (unsigned i = 0; i < cRenderStates; i++)
+ {
+ GLenum enableCap = ~(GLenum)0;
+ Log(("vmsvga3dSetRenderState: cid=%u state=%s (%d) val=%x\n", cid, vmsvga3dGetRenderStateName(pRenderState[i].state), pRenderState[i].state, pRenderState[i].uintValue));
+ /* Save the render state for vm state saving. */
+ ASSERT_GUEST_RETURN((unsigned)pRenderState[i].state < SVGA3D_RS_MAX, VERR_INVALID_PARAMETER);
+ pContext->state.aRenderState[pRenderState[i].state] = pRenderState[i];
+
+ switch (pRenderState[i].state)
+ {
+ case SVGA3D_RS_ZENABLE: /* SVGA3dBool */
+ enableCap = GL_DEPTH_TEST;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_ZWRITEENABLE: /* SVGA3dBool */
+ glDepthMask(!!pRenderState[i].uintValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_ALPHATESTENABLE: /* SVGA3dBool */
+ enableCap = GL_ALPHA_TEST;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_DITHERENABLE: /* SVGA3dBool */
+ enableCap = GL_DITHER;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGENABLE: /* SVGA3dBool */
+ enableCap = GL_FOG;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SPECULARENABLE: /* SVGA3dBool */
+ Log(("vmsvga3dSetRenderState: WARNING: not applicable.\n"));
+ break;
+
+ case SVGA3D_RS_LIGHTINGENABLE: /* SVGA3dBool */
+ enableCap = GL_LIGHTING;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_NORMALIZENORMALS: /* SVGA3dBool */
+ /* not applicable */
+ Log(("vmsvga3dSetRenderState: WARNING: not applicable.\n"));
+ break;
+
+ case SVGA3D_RS_POINTSPRITEENABLE: /* SVGA3dBool */
+ enableCap = GL_POINT_SPRITE_ARB;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_POINTSIZE: /* float */
+ /** @todo we need to apply scaling for point sizes below the min or above the max; see Wine) */
+ if (pRenderState[i].floatValue < pState->caps.flPointSize[0])
+ pRenderState[i].floatValue = pState->caps.flPointSize[0];
+ if (pRenderState[i].floatValue > pState->caps.flPointSize[1])
+ pRenderState[i].floatValue = pState->caps.flPointSize[1];
+
+ glPointSize(pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ Log(("SVGA3D_RS_POINTSIZE: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+ break;
+
+ case SVGA3D_RS_POINTSIZEMIN: /* float */
+ pState->ext.glPointParameterf(GL_POINT_SIZE_MIN, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ Log(("SVGA3D_RS_POINTSIZEMIN: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+ break;
+
+ case SVGA3D_RS_POINTSIZEMAX: /* float */
+ pState->ext.glPointParameterf(GL_POINT_SIZE_MAX, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ Log(("SVGA3D_RS_POINTSIZEMAX: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+ break;
+
+ case SVGA3D_RS_POINTSCALEENABLE: /* SVGA3dBool */
+ case SVGA3D_RS_POINTSCALE_A: /* float */
+ case SVGA3D_RS_POINTSCALE_B: /* float */
+ case SVGA3D_RS_POINTSCALE_C: /* float */
+ Log(("vmsvga3dSetRenderState: WARNING: not applicable.\n"));
+ break;
+
+ case SVGA3D_RS_AMBIENT: /* SVGA3dColor */
+ {
+ GLfloat color[4]; /* red, green, blue, alpha */
+
+ vmsvgaColor2GLFloatArray(pRenderState[i].uintValue, &color[0], &color[1], &color[2], &color[3]);
+
+ glLightModelfv(GL_LIGHT_MODEL_AMBIENT, color);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_CLIPPLANEENABLE: /* SVGA3dClipPlanes */
+ {
+ for (uint32_t j = 0; j < SVGA3D_NUM_CLIPPLANES; j++)
+ {
+ if (pRenderState[i].uintValue & RT_BIT(j))
+ glEnable(GL_CLIP_PLANE0 + j);
+ else
+ glDisable(GL_CLIP_PLANE0 + j);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ break;
+ }
+
+ case SVGA3D_RS_FOGCOLOR: /* SVGA3dColor */
+ {
+ GLfloat color[4]; /* red, green, blue, alpha */
+
+ vmsvgaColor2GLFloatArray(pRenderState[i].uintValue, &color[0], &color[1], &color[2], &color[3]);
+
+ glFogfv(GL_FOG_COLOR, color);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_FOGSTART: /* float */
+ glFogf(GL_FOG_START, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_FOGEND: /* float */
+ glFogf(GL_FOG_END, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_FOGDENSITY: /* float */
+ glFogf(GL_FOG_DENSITY, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_RANGEFOGENABLE: /* SVGA3dBool */
+ glFogi(GL_FOG_COORD_SRC, (pRenderState[i].uintValue) ? GL_FOG_COORD : GL_FRAGMENT_DEPTH);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_FOGMODE: /* SVGA3dFogMode */
+ {
+ SVGA3dFogMode mode;
+ mode.uintValue = pRenderState[i].uintValue;
+
+ enableCap = GL_FOG_MODE;
+ switch (mode.function)
+ {
+ case SVGA3D_FOGFUNC_EXP:
+ val = GL_EXP;
+ break;
+ case SVGA3D_FOGFUNC_EXP2:
+ val = GL_EXP2;
+ break;
+ case SVGA3D_FOGFUNC_LINEAR:
+ val = GL_LINEAR;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected fog function %d\n", mode.function), VERR_INTERNAL_ERROR);
+ break;
+ }
+
+ /** @todo how to switch between vertex and pixel fog modes??? */
+ Assert(mode.type == SVGA3D_FOGTYPE_PIXEL);
+#if 0
+ /* The fog type determines the render state. */
+ switch (mode.type)
+ {
+ case SVGA3D_FOGTYPE_VERTEX:
+ renderState = D3DRS_FOGVERTEXMODE;
+ break;
+ case SVGA3D_FOGTYPE_PIXEL:
+ renderState = D3DRS_FOGTABLEMODE;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected fog type %d\n", mode.type), VERR_INTERNAL_ERROR);
+ break;
+ }
+#endif
+
+ /* Set the fog base to depth or range. */
+ switch (mode.base)
+ {
+ case SVGA3D_FOGBASE_DEPTHBASED:
+ glFogi(GL_FOG_COORD_SRC, GL_FRAGMENT_DEPTH);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_FOGBASE_RANGEBASED:
+ glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ default:
+ /* ignore */
+ AssertMsgFailed(("Unexpected fog base %d\n", mode.base));
+ break;
+ }
+ break;
+ }
+
+ case SVGA3D_RS_FILLMODE: /* SVGA3dFillMode */
+ {
+ SVGA3dFillMode mode;
+
+ mode.uintValue = pRenderState[i].uintValue;
+
+ switch (mode.mode)
+ {
+ case SVGA3D_FILLMODE_POINT:
+ val = GL_POINT;
+ break;
+ case SVGA3D_FILLMODE_LINE:
+ val = GL_LINE;
+ break;
+ case SVGA3D_FILLMODE_FILL:
+ val = GL_FILL;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected fill mode %d\n", mode.mode), VERR_INTERNAL_ERROR);
+ break;
+ }
+ /* Only front and back faces. Also recent Mesa guest drivers initialize the 'face' to zero. */
+ ASSERT_GUEST(mode.face == SVGA3D_FACE_FRONT_BACK || mode.face == SVGA3D_FACE_INVALID);
+ glPolygonMode(GL_FRONT_AND_BACK, val);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_SHADEMODE: /* SVGA3dShadeMode */
+ switch (pRenderState[i].uintValue)
+ {
+ case SVGA3D_SHADEMODE_FLAT:
+ val = GL_FLAT;
+ break;
+
+ case SVGA3D_SHADEMODE_SMOOTH:
+ val = GL_SMOOTH;
+ break;
+
+ default:
+ AssertMsgFailedReturn(("Unexpected shade mode %d\n", pRenderState[i].uintValue), VERR_INTERNAL_ERROR);
+ break;
+ }
+
+ glShadeModel(val);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_LINEPATTERN: /* SVGA3dLinePattern */
+ /* No longer supported by d3d; mesagl comments suggest not all backends support it */
+ /** @todo */
+ Log(("WARNING: SVGA3D_RS_LINEPATTERN %x not supported!!\n", pRenderState[i].uintValue));
+ /*
+ renderState = D3DRS_LINEPATTERN;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_ANTIALIASEDLINEENABLE: /* SVGA3dBool */
+ enableCap = GL_LINE_SMOOTH;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_LINEWIDTH: /* float */
+ glLineWidth(pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+ {
+ /* Refresh the blending state based on the new enable setting.
+ * This will take existing states and set them using either glBlend* or glBlend*Separate.
+ */
+ static SVGA3dRenderStateName const saRefreshState[] =
+ {
+ SVGA3D_RS_SRCBLEND,
+ SVGA3D_RS_BLENDEQUATION
+ };
+ SVGA3dRenderState renderstate[RT_ELEMENTS(saRefreshState)];
+ for (uint32_t j = 0; j < RT_ELEMENTS(saRefreshState); ++j)
+ {
+ renderstate[j].state = saRefreshState[j];
+ renderstate[j].uintValue = pContext->state.aRenderState[saRefreshState[j]].uintValue;
+ }
+
+ rc = vmsvga3dBackSetRenderState(pThisCC, cid, 2, renderstate);
+ AssertRCReturn(rc, rc);
+
+ if (pContext->state.aRenderState[SVGA3D_RS_BLENDENABLE].uintValue != 0)
+ continue; /* Ignore if blend is enabled */
+ /* Apply SVGA3D_RS_SEPARATEALPHABLENDENABLE as SVGA3D_RS_BLENDENABLE */
+ } RT_FALL_THRU();
+
+ case SVGA3D_RS_BLENDENABLE: /* SVGA3dBool */
+ enableCap = GL_BLEND;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SRCBLENDALPHA: /* SVGA3dBlendOp */
+ case SVGA3D_RS_DSTBLENDALPHA: /* SVGA3dBlendOp */
+ case SVGA3D_RS_SRCBLEND: /* SVGA3dBlendOp */
+ case SVGA3D_RS_DSTBLEND: /* SVGA3dBlendOp */
+ {
+ GLint srcRGB, srcAlpha, dstRGB, dstAlpha;
+ GLint blendop = vmsvga3dBlendOp2GL(pRenderState[i].uintValue);
+
+ glGetIntegerv(GL_BLEND_SRC_RGB, &srcRGB);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_BLEND_DST_RGB, &dstRGB);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_BLEND_DST_ALPHA, &dstAlpha);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_BLEND_SRC_ALPHA, &srcAlpha);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ switch (pRenderState[i].state)
+ {
+ case SVGA3D_RS_SRCBLEND:
+ srcRGB = blendop;
+ break;
+ case SVGA3D_RS_DSTBLEND:
+ dstRGB = blendop;
+ break;
+ case SVGA3D_RS_SRCBLENDALPHA:
+ srcAlpha = blendop;
+ break;
+ case SVGA3D_RS_DSTBLENDALPHA:
+ dstAlpha = blendop;
+ break;
+ default:
+ /* not possible; shut up gcc */
+ AssertFailed();
+ break;
+ }
+
+ if (pContext->state.aRenderState[SVGA3D_RS_SEPARATEALPHABLENDENABLE].uintValue != 0)
+ pState->ext.glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+ else
+ glBlendFunc(srcRGB, dstRGB);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_BLENDEQUATIONALPHA: /* SVGA3dBlendEquation */
+ case SVGA3D_RS_BLENDEQUATION: /* SVGA3dBlendEquation */
+ if (pContext->state.aRenderState[SVGA3D_RS_SEPARATEALPHABLENDENABLE].uintValue != 0)
+ {
+ GLenum const modeRGB = vmsvga3dBlendEquation2GL(pContext->state.aRenderState[SVGA3D_RS_BLENDEQUATION].uintValue);
+ GLenum const modeAlpha = vmsvga3dBlendEquation2GL(pContext->state.aRenderState[SVGA3D_RS_BLENDEQUATIONALPHA].uintValue);
+ pState->ext.glBlendEquationSeparate(modeRGB, modeAlpha);
+ }
+ else
+ {
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL >= 0x102
+ glBlendEquation(vmsvga3dBlendEquation2GL(pRenderState[i].uintValue));
+#else
+ pState->ext.glBlendEquation(vmsvga3dBlendEquation2GL(pRenderState[i].uintValue));
+#endif
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_BLENDCOLOR: /* SVGA3dColor */
+ {
+ GLfloat red, green, blue, alpha;
+
+ vmsvgaColor2GLFloatArray(pRenderState[i].uintValue, &red, &green, &blue, &alpha);
+
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL >= 0x102
+ glBlendColor(red, green, blue, alpha);
+#else
+ pState->ext.glBlendColor(red, green, blue, alpha);
+#endif
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_CULLMODE: /* SVGA3dFace */
+ {
+ GLenum mode = GL_BACK; /* default for OpenGL */
+
+ switch (pRenderState[i].uintValue)
+ {
+ case SVGA3D_FACE_NONE:
+ break;
+ case SVGA3D_FACE_FRONT:
+ mode = GL_FRONT;
+ break;
+ case SVGA3D_FACE_BACK:
+ mode = GL_BACK;
+ break;
+ case SVGA3D_FACE_FRONT_BACK:
+ mode = GL_FRONT_AND_BACK;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected cull mode %d\n", pRenderState[i].uintValue), VERR_INTERNAL_ERROR);
+ break;
+ }
+ enableCap = GL_CULL_FACE;
+ if (pRenderState[i].uintValue != SVGA3D_FACE_NONE)
+ {
+ glCullFace(mode);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ val = 1;
+ }
+ else
+ val = 0;
+ break;
+ }
+
+ case SVGA3D_RS_ZFUNC: /* SVGA3dCmpFunc */
+ glDepthFunc(vmsvgaCmpFunc2GL(pRenderState[i].uintValue));
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_ALPHAFUNC: /* SVGA3dCmpFunc */
+ {
+ GLclampf ref;
+
+ glGetFloatv(GL_ALPHA_TEST_REF, &ref);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glAlphaFunc(vmsvgaCmpFunc2GL(pRenderState[i].uintValue), ref);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_ALPHAREF: /* float (0.0 .. 1.0) */
+ {
+ GLint func;
+
+ glGetIntegerv(GL_ALPHA_TEST_FUNC, &func);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glAlphaFunc(func, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_STENCILENABLE2SIDED: /* SVGA3dBool */
+ {
+ /* Refresh the stencil state based on the new enable setting.
+ * This will take existing states and set them using either glStencil or glStencil*Separate.
+ */
+ static SVGA3dRenderStateName const saRefreshState[] =
+ {
+ SVGA3D_RS_STENCILFUNC,
+ SVGA3D_RS_STENCILFAIL,
+ SVGA3D_RS_CCWSTENCILFUNC,
+ SVGA3D_RS_CCWSTENCILFAIL
+ };
+ SVGA3dRenderState renderstate[RT_ELEMENTS(saRefreshState)];
+ for (uint32_t j = 0; j < RT_ELEMENTS(saRefreshState); ++j)
+ {
+ renderstate[j].state = saRefreshState[j];
+ renderstate[j].uintValue = pContext->state.aRenderState[saRefreshState[j]].uintValue;
+ }
+
+ rc = vmsvga3dBackSetRenderState(pThisCC, cid, RT_ELEMENTS(renderstate), renderstate);
+ AssertRCReturn(rc, rc);
+
+ if (pContext->state.aRenderState[SVGA3D_RS_STENCILENABLE].uintValue != 0)
+ continue; /* Ignore if stencil is enabled */
+ /* Apply SVGA3D_RS_STENCILENABLE2SIDED as SVGA3D_RS_STENCILENABLE. */
+ } RT_FALL_THRU();
+
+ case SVGA3D_RS_STENCILENABLE: /* SVGA3dBool */
+ enableCap = GL_STENCIL_TEST;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILFUNC: /* SVGA3dCmpFunc */
+ case SVGA3D_RS_STENCILREF: /* uint32_t */
+ case SVGA3D_RS_STENCILMASK: /* uint32_t */
+ {
+ GLint func, ref;
+ GLuint mask;
+
+ /* Query current values to have all parameters for glStencilFunc[Separate]. */
+ glGetIntegerv(GL_STENCIL_FUNC, &func);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint *)&mask);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_REF, &ref);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Update the changed value. */
+ switch (pRenderState[i].state)
+ {
+ case SVGA3D_RS_STENCILFUNC: /* SVGA3dCmpFunc */
+ func = vmsvgaCmpFunc2GL(pRenderState[i].uintValue);
+ break;
+
+ case SVGA3D_RS_STENCILREF: /* uint32_t */
+ ref = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILMASK: /* uint32_t */
+ mask = pRenderState[i].uintValue;
+ break;
+
+ default:
+ /* not possible; shut up gcc */
+ AssertFailed();
+ break;
+ }
+
+ if (pContext->state.aRenderState[SVGA3D_RS_STENCILENABLE2SIDED].uintValue != 0)
+ {
+ pState->ext.glStencilFuncSeparate(GL_FRONT, func, ref, mask);
+ }
+ else
+ {
+ glStencilFunc(func, ref, mask);
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_STENCILWRITEMASK: /* uint32_t */
+ glStencilMask(pRenderState[i].uintValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_STENCILFAIL: /* SVGA3dStencilOp */
+ case SVGA3D_RS_STENCILZFAIL: /* SVGA3dStencilOp */
+ case SVGA3D_RS_STENCILPASS: /* SVGA3dStencilOp */
+ {
+ GLint sfail, dpfail, dppass;
+ GLenum const stencilop = vmsvgaStencipOp2GL(pRenderState[i].uintValue);
+
+ glGetIntegerv(GL_STENCIL_FAIL, &sfail);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &dpfail);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &dppass);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ switch (pRenderState[i].state)
+ {
+ case SVGA3D_RS_STENCILFAIL: /* SVGA3dStencilOp */
+ sfail = stencilop;
+ break;
+ case SVGA3D_RS_STENCILZFAIL: /* SVGA3dStencilOp */
+ dpfail = stencilop;
+ break;
+ case SVGA3D_RS_STENCILPASS: /* SVGA3dStencilOp */
+ dppass = stencilop;
+ break;
+ default:
+ /* not possible; shut up gcc */
+ AssertFailed();
+ break;
+ }
+ if (pContext->state.aRenderState[SVGA3D_RS_STENCILENABLE2SIDED].uintValue != 0)
+ {
+ pState->ext.glStencilOpSeparate(GL_FRONT, sfail, dpfail, dppass);
+ }
+ else
+ {
+ glStencilOp(sfail, dpfail, dppass);
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_CCWSTENCILFUNC: /* SVGA3dCmpFunc */
+ {
+ GLint ref;
+ GLuint mask;
+ GLint const func = vmsvgaCmpFunc2GL(pRenderState[i].uintValue);
+
+ /* GL_STENCIL_VALUE_MASK and GL_STENCIL_REF are the same for both GL_FRONT and GL_BACK. */
+ glGetIntegerv(GL_STENCIL_VALUE_MASK, (GLint *)&mask);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_REF, &ref);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pState->ext.glStencilFuncSeparate(GL_BACK, func, ref, mask);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_CCWSTENCILFAIL: /* SVGA3dStencilOp */
+ case SVGA3D_RS_CCWSTENCILZFAIL: /* SVGA3dStencilOp */
+ case SVGA3D_RS_CCWSTENCILPASS: /* SVGA3dStencilOp */
+ {
+ GLint sfail, dpfail, dppass;
+ GLenum const stencilop = vmsvgaStencipOp2GL(pRenderState[i].uintValue);
+
+ glGetIntegerv(GL_STENCIL_BACK_FAIL, &sfail);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_FAIL, &dpfail);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glGetIntegerv(GL_STENCIL_BACK_PASS_DEPTH_PASS, &dppass);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ switch (pRenderState[i].state)
+ {
+ case SVGA3D_RS_CCWSTENCILFAIL: /* SVGA3dStencilOp */
+ sfail = stencilop;
+ break;
+ case SVGA3D_RS_CCWSTENCILZFAIL: /* SVGA3dStencilOp */
+ dpfail = stencilop;
+ break;
+ case SVGA3D_RS_CCWSTENCILPASS: /* SVGA3dStencilOp */
+ dppass = stencilop;
+ break;
+ default:
+ /* not possible; shut up gcc */
+ AssertFailed();
+ break;
+ }
+ pState->ext.glStencilOpSeparate(GL_BACK, sfail, dpfail, dppass);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_ZBIAS: /* float */
+ /** @todo unknown meaning; depth bias is not identical
+ renderState = D3DRS_DEPTHBIAS;
+ val = pRenderState[i].uintValue;
+ */
+ Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_RS_ZBIAS\n"));
+ break;
+
+ case SVGA3D_RS_DEPTHBIAS: /* float */
+ {
+ GLfloat factor;
+
+ /** @todo not sure if the d3d & ogl definitions are identical. */
+
+ /* Do not change the factor part. */
+ glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &factor);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ glPolygonOffset(factor, pRenderState[i].floatValue);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_SLOPESCALEDEPTHBIAS: /* float */
+ {
+ GLfloat units;
+
+ /** @todo not sure if the d3d & ogl definitions are identical. */
+
+ /* Do not change the factor part. */
+ glGetFloatv(GL_POLYGON_OFFSET_UNITS, &units);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ glPolygonOffset(pRenderState[i].floatValue, units);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_COLORWRITEENABLE: /* SVGA3dColorMask */
+ {
+ GLboolean red, green, blue, alpha;
+ SVGA3dColorMask mask;
+
+ mask.uintValue = pRenderState[i].uintValue;
+
+ red = mask.red;
+ green = mask.green;
+ blue = mask.blue;
+ alpha = mask.alpha;
+
+ glColorMask(red, green, blue, alpha);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_RS_COLORWRITEENABLE1: /* SVGA3dColorMask to D3DCOLORWRITEENABLE_* */
+ case SVGA3D_RS_COLORWRITEENABLE2: /* SVGA3dColorMask to D3DCOLORWRITEENABLE_* */
+ case SVGA3D_RS_COLORWRITEENABLE3: /* SVGA3dColorMask to D3DCOLORWRITEENABLE_* */
+ Log(("vmsvga3dSetRenderState: WARNING SVGA3D_RS_COLORWRITEENABLEx not supported!!\n"));
+ break;
+
+ case SVGA3D_RS_SCISSORTESTENABLE: /* SVGA3dBool */
+ enableCap = GL_SCISSOR_TEST;
+ val = pRenderState[i].uintValue;
+ break;
+
+#if 0
+ case SVGA3D_RS_DIFFUSEMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ AssertCompile(D3DMCS_COLOR2 == SVGA3D_VERTEXMATERIAL_SPECULAR);
+ renderState = D3DRS_DIFFUSEMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ renderState = D3DRS_SPECULARMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_AMBIENTMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ renderState = D3DRS_AMBIENTMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ renderState = D3DRS_EMISSIVEMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+#endif
+
+ case SVGA3D_RS_WRAP3: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP4: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP5: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP6: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP7: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP8: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP9: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP10: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP11: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP12: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP13: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP14: /* SVGA3dWrapFlags */
+ case SVGA3D_RS_WRAP15: /* SVGA3dWrapFlags */
+ Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_WRAPx (x >= 3)\n"));
+ break;
+
+ case SVGA3D_RS_LASTPIXEL: /* SVGA3dBool */
+ case SVGA3D_RS_TWEENFACTOR: /* float */
+ case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
+ case SVGA3D_RS_VERTEXBLEND: /* SVGA3dVertexBlendFlags */
+ Log(("vmsvga3dSetRenderState: WARNING not applicable!!\n"));
+ break;
+
+ case SVGA3D_RS_MULTISAMPLEANTIALIAS: /* SVGA3dBool */
+ enableCap = GL_MULTISAMPLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_MULTISAMPLEMASK: /* uint32_t */
+ Log(("vmsvga3dSetRenderState: WARNING not applicable??!!\n"));
+ break;
+
+ case SVGA3D_RS_COORDINATETYPE: /* SVGA3dCoordinateType */
+ Assert(pRenderState[i].uintValue == SVGA3D_COORDINATE_LEFTHANDED);
+ /** @todo setup a view matrix to scale the world space by -1 in the z-direction for right handed coordinates. */
+ /*
+ renderState = D3DRS_COORDINATETYPE;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_FRONTWINDING: /* SVGA3dFrontWinding */
+ Assert(pRenderState[i].uintValue == SVGA3D_FRONTWINDING_CW);
+ /* Invert the selected mode because of y-inversion (?) */
+ glFrontFace((pRenderState[i].uintValue != SVGA3D_FRONTWINDING_CW) ? GL_CW : GL_CCW);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RS_OUTPUTGAMMA: /* float */
+ //AssertFailed();
+ /*
+ D3DRS_SRGBWRITEENABLE ??
+ renderState = D3DRS_OUTPUTGAMMA;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+#if 0
+
+ case SVGA3D_RS_VERTEXMATERIALENABLE: /* SVGA3dBool */
+ //AssertFailed();
+ renderState = D3DRS_INDEXEDVERTEXBLENDENABLE; /* correct?? */
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_TEXTUREFACTOR: /* SVGA3dColor */
+ renderState = D3DRS_TEXTUREFACTOR;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_LOCALVIEWER: /* SVGA3dBool */
+ renderState = D3DRS_LOCALVIEWER;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_ZVISIBLE: /* SVGA3dBool */
+ AssertFailed();
+ /*
+ renderState = D3DRS_ZVISIBLE;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_CLIPPING: /* SVGA3dBool */
+ renderState = D3DRS_CLIPPING;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP0: /* SVGA3dWrapFlags */
+ glTexParameter GL_TEXTURE_WRAP_S
+ Assert(SVGA3D_WRAPCOORD_3 == D3DWRAPCOORD_3);
+ renderState = D3DRS_WRAP0;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP1: /* SVGA3dWrapFlags */
+ glTexParameter GL_TEXTURE_WRAP_T
+ renderState = D3DRS_WRAP1;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP2: /* SVGA3dWrapFlags */
+ glTexParameter GL_TEXTURE_WRAP_R
+ renderState = D3DRS_WRAP2;
+ val = pRenderState[i].uintValue;
+ break;
+
+
+ case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+ renderState = D3DRS_SEPARATEALPHABLENDENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+
+ case SVGA3D_RS_BLENDEQUATIONALPHA: /* SVGA3dBlendEquation */
+ renderState = D3DRS_BLENDOPALPHA;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_TRANSPARENCYANTIALIAS: /* SVGA3dTransparencyAntialiasType */
+ AssertFailed();
+ /*
+ renderState = D3DRS_TRANSPARENCYANTIALIAS;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+#endif
+ default:
+ AssertFailed();
+ break;
+ }
+
+ if (enableCap != ~(GLenum)0)
+ {
+ if (val)
+ glEnable(enableCap);
+ else
+ glDisable(enableCap);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetRenderTarget(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+
+ AssertReturn(pState, VERR_NO_MEMORY);
+ AssertReturn((unsigned)type < SVGA3D_RT_MAX, VERR_INVALID_PARAMETER);
+
+ LogFunc(("cid=%u type=%x sid=%u\n", cid, type, target.sid));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Save for vm state save/restore. */
+ pContext->state.aRenderTargets[type] = target.sid;
+
+ if (target.sid == SVGA3D_INVALID_ID)
+ {
+ /* Disable render target. */
+ switch (type)
+ {
+ case SVGA3D_RT_DEPTH:
+ case SVGA3D_RT_STENCIL:
+ pState->ext.glFramebufferRenderbuffer(GL_FRAMEBUFFER, (type == SVGA3D_RT_DEPTH) ? GL_DEPTH_ATTACHMENT : GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ case SVGA3D_RT_COLOR0:
+ case SVGA3D_RT_COLOR1:
+ case SVGA3D_RT_COLOR2:
+ case SVGA3D_RT_COLOR3:
+ case SVGA3D_RT_COLOR4:
+ case SVGA3D_RT_COLOR5:
+ case SVGA3D_RT_COLOR6:
+ case SVGA3D_RT_COLOR7:
+ pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + type - SVGA3D_RT_COLOR0, 0, 0, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ return VINF_SUCCESS;
+ }
+
+ PVMSVGA3DSURFACE pRenderTarget;
+ rc = vmsvga3dSurfaceFromSid(pState, target.sid, &pRenderTarget);
+ AssertRCReturn(rc, rc);
+
+ switch (type)
+ {
+ case SVGA3D_RT_DEPTH:
+ case SVGA3D_RT_STENCIL:
+#if 1
+ /* A texture surface can be used as a render target to fill it and later on used as a texture. */
+ if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
+ {
+ LogFunc(("create depth texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n",
+ target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
+ AssertRCReturn(rc, rc);
+ }
+
+ AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
+ Assert(!pRenderTarget->fDirty);
+
+ pRenderTarget->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+
+ pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER,
+ (type == SVGA3D_RT_DEPTH) ? GL_DEPTH_ATTACHMENT : GL_STENCIL_ATTACHMENT,
+ GL_TEXTURE_2D, pRenderTarget->oglId.texture, target.mipmap);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+#else
+ AssertReturn(target.mipmap == 0, VERR_INVALID_PARAMETER);
+ if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
+ {
+ Log(("vmsvga3dSetRenderTarget: create renderbuffer to be used as render target; surface id=%x type=%d format=%d\n", target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->internalFormatGL));
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ pState->ext.glGenRenderbuffers(1, &pRenderTarget->oglId.renderbuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pSurface->enmOGLResType = VMSVGA3D_OGLRESTYPE_RENDERBUFFER;
+
+ pState->ext.glBindRenderbuffer(GL_RENDERBUFFER, pRenderTarget->oglId.renderbuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pState->ext.glRenderbufferStorage(GL_RENDERBUFFER,
+ pRenderTarget->internalFormatGL,
+ pRenderTarget->paMipmapLevels[0].mipmapSize.width,
+ pRenderTarget->paMipmapLevels[0].mipmapSize.height);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pState->ext.glBindRenderbuffer(GL_RENDERBUFFER, OPENGL_INVALID_ID);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pContext = pState->papContexts[cid];
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+ }
+
+ pState->ext.glBindRenderbuffer(GL_RENDERBUFFER, pRenderTarget->oglId.renderbuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ Assert(!pRenderTarget->fDirty);
+ AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
+
+ pRenderTarget->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+
+ pState->ext.glFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ (type == SVGA3D_RT_DEPTH) ? GL_DEPTH_ATTACHMENT : GL_STENCIL_ATTACHMENT,
+ GL_RENDERBUFFER, pRenderTarget->oglId.renderbuffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+#endif
+ break;
+
+ case SVGA3D_RT_COLOR0:
+ case SVGA3D_RT_COLOR1:
+ case SVGA3D_RT_COLOR2:
+ case SVGA3D_RT_COLOR3:
+ case SVGA3D_RT_COLOR4:
+ case SVGA3D_RT_COLOR5:
+ case SVGA3D_RT_COLOR6:
+ case SVGA3D_RT_COLOR7:
+ {
+ /* A texture surface can be used as a render target to fill it and later on used as a texture. */
+ if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
+ {
+ Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
+ AssertRCReturn(rc, rc);
+ }
+
+ AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
+ Assert(!pRenderTarget->fDirty);
+
+ pRenderTarget->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
+
+ GLenum textarget;
+ if (pRenderTarget->f.s.surface1Flags & SVGA3D_SURFACE_CUBEMAP)
+ textarget = vmsvga3dCubemapFaceFromIndex(target.face);
+ else
+ textarget = GL_TEXTURE_2D;
+ pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + type - SVGA3D_RT_COLOR0,
+ textarget, pRenderTarget->oglId.texture, target.mipmap);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+#ifdef DEBUG
+ GLenum status = pState->ext.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+ if (status != GL_FRAMEBUFFER_COMPLETE)
+ Log(("vmsvga3dSetRenderTarget: WARNING: glCheckFramebufferStatus returned %x\n", status));
+#endif
+ /** @todo use glDrawBuffers too? */
+ break;
+ }
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ return VINF_SUCCESS;
+}
+
+#if 0
+/**
+ * Convert SVGA texture combiner value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureCombiner2D3D(uint32_t value)
+{
+ switch (value)
+ {
+ case SVGA3D_TC_DISABLE:
+ return D3DTOP_DISABLE;
+ case SVGA3D_TC_SELECTARG1:
+ return D3DTOP_SELECTARG1;
+ case SVGA3D_TC_SELECTARG2:
+ return D3DTOP_SELECTARG2;
+ case SVGA3D_TC_MODULATE:
+ return D3DTOP_MODULATE;
+ case SVGA3D_TC_ADD:
+ return D3DTOP_ADD;
+ case SVGA3D_TC_ADDSIGNED:
+ return D3DTOP_ADDSIGNED;
+ case SVGA3D_TC_SUBTRACT:
+ return D3DTOP_SUBTRACT;
+ case SVGA3D_TC_BLENDTEXTUREALPHA:
+ return D3DTOP_BLENDTEXTUREALPHA;
+ case SVGA3D_TC_BLENDDIFFUSEALPHA:
+ return D3DTOP_BLENDDIFFUSEALPHA;
+ case SVGA3D_TC_BLENDCURRENTALPHA:
+ return D3DTOP_BLENDCURRENTALPHA;
+ case SVGA3D_TC_BLENDFACTORALPHA:
+ return D3DTOP_BLENDFACTORALPHA;
+ case SVGA3D_TC_MODULATE2X:
+ return D3DTOP_MODULATE2X;
+ case SVGA3D_TC_MODULATE4X:
+ return D3DTOP_MODULATE4X;
+ case SVGA3D_TC_DSDT:
+ AssertFailed(); /** @todo ??? */
+ return D3DTOP_DISABLE;
+ case SVGA3D_TC_DOTPRODUCT3:
+ return D3DTOP_DOTPRODUCT3;
+ case SVGA3D_TC_BLENDTEXTUREALPHAPM:
+ return D3DTOP_BLENDTEXTUREALPHAPM;
+ case SVGA3D_TC_ADDSIGNED2X:
+ return D3DTOP_ADDSIGNED2X;
+ case SVGA3D_TC_ADDSMOOTH:
+ return D3DTOP_ADDSMOOTH;
+ case SVGA3D_TC_PREMODULATE:
+ return D3DTOP_PREMODULATE;
+ case SVGA3D_TC_MODULATEALPHA_ADDCOLOR:
+ return D3DTOP_MODULATEALPHA_ADDCOLOR;
+ case SVGA3D_TC_MODULATECOLOR_ADDALPHA:
+ return D3DTOP_MODULATECOLOR_ADDALPHA;
+ case SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR:
+ return D3DTOP_MODULATEINVALPHA_ADDCOLOR;
+ case SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA:
+ return D3DTOP_MODULATEINVCOLOR_ADDALPHA;
+ case SVGA3D_TC_BUMPENVMAPLUMINANCE:
+ return D3DTOP_BUMPENVMAPLUMINANCE;
+ case SVGA3D_TC_MULTIPLYADD:
+ return D3DTOP_MULTIPLYADD;
+ case SVGA3D_TC_LERP:
+ return D3DTOP_LERP;
+ default:
+ AssertFailed();
+ return D3DTOP_DISABLE;
+ }
+}
+
+/**
+ * Convert SVGA texture arg data value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureArgData2D3D(uint32_t value)
+{
+ switch (value)
+ {
+ case SVGA3D_TA_CONSTANT:
+ return D3DTA_CONSTANT;
+ case SVGA3D_TA_PREVIOUS:
+ return D3DTA_CURRENT; /* current = previous */
+ case SVGA3D_TA_DIFFUSE:
+ return D3DTA_DIFFUSE;
+ case SVGA3D_TA_TEXTURE:
+ return D3DTA_TEXTURE;
+ case SVGA3D_TA_SPECULAR:
+ return D3DTA_SPECULAR;
+ default:
+ AssertFailed();
+ return 0;
+ }
+}
+
+/**
+ * Convert SVGA texture transform flag value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextTransformFlags2D3D(uint32_t value)
+{
+ switch (value)
+ {
+ case SVGA3D_TEX_TRANSFORM_OFF:
+ return D3DTTFF_DISABLE;
+ case SVGA3D_TEX_TRANSFORM_S:
+ return D3DTTFF_COUNT1; /** @todo correct? */
+ case SVGA3D_TEX_TRANSFORM_T:
+ return D3DTTFF_COUNT2; /** @todo correct? */
+ case SVGA3D_TEX_TRANSFORM_R:
+ return D3DTTFF_COUNT3; /** @todo correct? */
+ case SVGA3D_TEX_TRANSFORM_Q:
+ return D3DTTFF_COUNT4; /** @todo correct? */
+ case SVGA3D_TEX_PROJECTED:
+ return D3DTTFF_PROJECTED;
+ default:
+ AssertFailed();
+ return 0;
+ }
+}
+#endif
+
+static GLenum vmsvga3dTextureAddress2OGL(SVGA3dTextureAddress value)
+{
+ switch (value)
+ {
+ case SVGA3D_TEX_ADDRESS_WRAP:
+ return GL_REPEAT;
+ case SVGA3D_TEX_ADDRESS_MIRROR:
+ return GL_MIRRORED_REPEAT;
+ case SVGA3D_TEX_ADDRESS_CLAMP:
+ return GL_CLAMP_TO_EDGE;
+ case SVGA3D_TEX_ADDRESS_BORDER:
+ return GL_CLAMP_TO_BORDER;
+ case SVGA3D_TEX_ADDRESS_MIRRORONCE:
+ AssertFailed();
+ return GL_CLAMP_TO_EDGE_SGIS; /** @todo correct? */
+
+ case SVGA3D_TEX_ADDRESS_EDGE:
+ case SVGA3D_TEX_ADDRESS_INVALID:
+ default:
+ AssertFailed();
+ return GL_REPEAT; /* default */
+ }
+}
+
+static GLenum vmsvga3dTextureFilter2OGL(SVGA3dTextureFilter value)
+{
+ switch (value)
+ {
+ case SVGA3D_TEX_FILTER_NONE:
+ case SVGA3D_TEX_FILTER_LINEAR:
+ case SVGA3D_TEX_FILTER_ANISOTROPIC: /* Anisotropic filtering is controlled by SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL */
+ return GL_LINEAR;
+ case SVGA3D_TEX_FILTER_NEAREST:
+ return GL_NEAREST;
+ case SVGA3D_TEX_FILTER_FLATCUBIC: // Deprecated, not implemented
+ case SVGA3D_TEX_FILTER_GAUSSIANCUBIC: // Deprecated, not implemented
+ case SVGA3D_TEX_FILTER_PYRAMIDALQUAD: // Not currently implemented
+ case SVGA3D_TEX_FILTER_GAUSSIANQUAD: // Not currently implemented
+ default:
+ AssertFailed();
+ return GL_LINEAR; /* default */
+ }
+}
+
+uint32_t vmsvga3dSVGA3dColor2RGBA(SVGA3dColor value)
+{
+ /* flip the red and blue bytes */
+ uint8_t blue = value & 0xff;
+ uint8_t red = (value >> 16) & 0xff;
+ return (value & 0xff00ff00) | red | (blue << 16);
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetTextureState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
+{
+ GLenum val = ~(GLenum)0; /* Shut up MSC. */
+ GLenum currentStage = ~(GLenum)0;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetTextureState %x cTextureState=%d\n", cid, cTextureStates));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Which texture is active for the current stage. Needed to use right OpenGL target when setting parameters. */
+ PVMSVGA3DSURFACE pCurrentTextureSurface = NULL;
+
+ for (uint32_t i = 0; i < cTextureStates; ++i)
+ {
+ GLenum textureType = ~(GLenum)0;
+#if 0
+ GLenum samplerType = ~(GLenum)0;
+#endif
+
+ LogFunc(("cid=%u stage=%d type=%s (%x) val=%x\n",
+ cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
+
+ /* Record the texture state for vm state saving. */
+ if ( pTextureState[i].stage < RT_ELEMENTS(pContext->state.aTextureStates)
+ && (unsigned)pTextureState[i].name < RT_ELEMENTS(pContext->state.aTextureStates[0]))
+ {
+ pContext->state.aTextureStates[pTextureState[i].stage][pTextureState[i].name] = pTextureState[i];
+ }
+
+ /* Activate the right texture unit for subsequent texture state changes. */
+ if (pTextureState[i].stage != currentStage || i == 0)
+ {
+ /** @todo Is this the appropriate limit for all kinds of textures? It is the
+ * size of aSidActiveTextures and for binding/unbinding we cannot exceed it. */
+ if (pTextureState[i].stage < RT_ELEMENTS(pContext->state.aTextureStates))
+ {
+ pState->ext.glActiveTexture(GL_TEXTURE0 + pTextureState[i].stage);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ currentStage = pTextureState[i].stage;
+ }
+ else
+ {
+ AssertMsgFailed(("pTextureState[%d].stage=%#x name=%#x\n", i, pTextureState[i].stage, pTextureState[i].name));
+ continue;
+ }
+
+ if (pContext->aSidActiveTextures[currentStage] != SVGA3D_INVALID_ID)
+ {
+ rc = vmsvga3dSurfaceFromSid(pState, pContext->aSidActiveTextures[currentStage], &pCurrentTextureSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ pCurrentTextureSurface = NULL; /* Make sure that no stale pointer is used. */
+ }
+
+ switch (pTextureState[i].name)
+ {
+ case SVGA3D_TS_BUMPENVMAT00: /* float */
+ case SVGA3D_TS_BUMPENVMAT01: /* float */
+ case SVGA3D_TS_BUMPENVMAT10: /* float */
+ case SVGA3D_TS_BUMPENVMAT11: /* float */
+ case SVGA3D_TS_BUMPENVLSCALE: /* float */
+ case SVGA3D_TS_BUMPENVLOFFSET: /* float */
+ Log(("vmsvga3dSetTextureState: bump mapping texture options not supported!!\n"));
+ break;
+
+ case SVGA3D_TS_COLOROP: /* SVGA3dTextureCombiner */
+ case SVGA3D_TS_COLORARG0: /* SVGA3dTextureArgData */
+ case SVGA3D_TS_COLORARG1: /* SVGA3dTextureArgData */
+ case SVGA3D_TS_COLORARG2: /* SVGA3dTextureArgData */
+ case SVGA3D_TS_ALPHAOP: /* SVGA3dTextureCombiner */
+ case SVGA3D_TS_ALPHAARG0: /* SVGA3dTextureArgData */
+ case SVGA3D_TS_ALPHAARG1: /* SVGA3dTextureArgData */
+ case SVGA3D_TS_ALPHAARG2: /* SVGA3dTextureArgData */
+ /** @todo not used by MesaGL */
+ Log(("vmsvga3dSetTextureState: colorop/alphaop not yet supported!!\n"));
+ break;
+#if 0
+
+ case SVGA3D_TS_TEXCOORDINDEX: /* uint32_t */
+ textureType = D3DTSS_TEXCOORDINDEX;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_TEXTURETRANSFORMFLAGS: /* SVGA3dTexTransformFlags */
+ textureType = D3DTSS_TEXTURETRANSFORMFLAGS;
+ val = vmsvga3dTextTransformFlags2D3D(pTextureState[i].value);
+ break;
+#endif
+
+ case SVGA3D_TS_BIND_TEXTURE: /* SVGA3dSurfaceId */
+ {
+ uint32_t const sid = pTextureState[i].value;
+
+ Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture sid=%u replacing sid=%u\n",
+ currentStage, sid, pContext->aSidActiveTextures[currentStage]));
+
+ /* Only if texture actually changed. */ /// @todo needs testing.
+ if (pContext->aSidActiveTextures[currentStage] != sid)
+ {
+ if (pCurrentTextureSurface)
+ {
+ /* Unselect the currently associated texture. */
+ glBindTexture(pCurrentTextureSurface->targetGL, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ if (currentStage < 8)
+ {
+ /* Necessary for the fixed pipeline. */
+ glDisable(pCurrentTextureSurface->targetGL);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+
+ pCurrentTextureSurface = NULL;
+ }
+
+ if (sid == SVGA3D_INVALID_ID)
+ {
+ Assert(pCurrentTextureSurface == NULL);
+ }
+ else
+ {
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ Log(("SVGA3D_TS_BIND_TEXTURE: stage %d, texture sid=%u (%d,%d) replacing sid=%u\n",
+ currentStage, sid, pSurface->paMipmapLevels[0].mipmapSize.width,
+ pSurface->paMipmapLevels[0].mipmapSize.height, pContext->aSidActiveTextures[currentStage]));
+
+ if (pSurface->oglId.texture == OPENGL_INVALID_ID)
+ {
+ Log(("CreateTexture (%d,%d) levels=%d\n",
+ pSurface->paMipmapLevels[0].mipmapSize.width, pSurface->paMipmapLevels[0].mipmapSize.height, pSurface->cLevels));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ glBindTexture(pSurface->targetGL, pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ if (currentStage < 8)
+ {
+ /* Necessary for the fixed pipeline. */
+ glEnable(pSurface->targetGL);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+
+ /* Remember the currently active texture. */
+ pCurrentTextureSurface = pSurface;
+
+ /* Recreate the texture state as glBindTexture resets them all (sigh). */
+ for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); iStage++)
+ {
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); j++)
+ {
+ SVGA3dTextureState *pTextureStateIter = &pContext->state.aTextureStates[iStage][j];
+
+ if ( pTextureStateIter->name != SVGA3D_TS_INVALID
+ && pTextureStateIter->name != SVGA3D_TS_BIND_TEXTURE)
+ vmsvga3dBackSetTextureState(pThisCC, pContext->id, 1, pTextureStateIter);
+ }
+ }
+ }
+
+ pContext->aSidActiveTextures[currentStage] = sid;
+ }
+
+ /* Finished; continue with the next one. */
+ continue;
+ }
+
+ case SVGA3D_TS_ADDRESSW: /* SVGA3dTextureAddress */
+ textureType = GL_TEXTURE_WRAP_R; /* R = W */
+ val = vmsvga3dTextureAddress2OGL((SVGA3dTextureAddress)pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ADDRESSU: /* SVGA3dTextureAddress */
+ textureType = GL_TEXTURE_WRAP_S; /* S = U */
+ val = vmsvga3dTextureAddress2OGL((SVGA3dTextureAddress)pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ADDRESSV: /* SVGA3dTextureAddress */
+ textureType = GL_TEXTURE_WRAP_T; /* T = V */
+ val = vmsvga3dTextureAddress2OGL((SVGA3dTextureAddress)pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_MIPFILTER: /* SVGA3dTextureFilter */
+ case SVGA3D_TS_MINFILTER: /* SVGA3dTextureFilter */
+ {
+ uint32_t mipFilter = pContext->state.aTextureStates[currentStage][SVGA3D_TS_MIPFILTER].value;
+ uint32_t minFilter = pContext->state.aTextureStates[currentStage][SVGA3D_TS_MINFILTER].value;
+
+ /* If SVGA3D_TS_MIPFILTER is set to NONE, then use SVGA3D_TS_MIPFILTER, otherwise SVGA3D_TS_MIPFILTER enables mipmap minification. */
+ textureType = GL_TEXTURE_MIN_FILTER;
+ if (mipFilter != SVGA3D_TEX_FILTER_NONE)
+ {
+ if (minFilter == SVGA3D_TEX_FILTER_NEAREST)
+ {
+ if (mipFilter == SVGA3D_TEX_FILTER_LINEAR)
+ val = GL_NEAREST_MIPMAP_LINEAR;
+ else
+ val = GL_NEAREST_MIPMAP_NEAREST;
+ }
+ else
+ {
+ if (mipFilter == SVGA3D_TEX_FILTER_LINEAR)
+ val = GL_LINEAR_MIPMAP_LINEAR;
+ else
+ val = GL_LINEAR_MIPMAP_NEAREST;
+ }
+ }
+ else
+ val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)minFilter);
+ break;
+ }
+
+ case SVGA3D_TS_MAGFILTER: /* SVGA3dTextureFilter */
+ textureType = GL_TEXTURE_MAG_FILTER;
+ val = vmsvga3dTextureFilter2OGL((SVGA3dTextureFilter)pTextureState[i].value);
+ Assert(val == GL_NEAREST || val == GL_LINEAR);
+ break;
+
+ case SVGA3D_TS_BORDERCOLOR: /* SVGA3dColor */
+ {
+ GLfloat color[4]; /* red, green, blue, alpha */
+ vmsvgaColor2GLFloatArray(pTextureState[i].value, &color[0], &color[1], &color[2], &color[3]);
+
+ GLenum targetGL;
+ if (pCurrentTextureSurface)
+ targetGL = pCurrentTextureSurface->targetGL;
+ else
+ {
+ /* No texture bound, assume 2D. */
+ targetGL = GL_TEXTURE_2D;
+ }
+
+ glTexParameterfv(targetGL, GL_TEXTURE_BORDER_COLOR, color); /* Identical; default 0.0 identical too */
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_TS_TEXTURE_LOD_BIAS: /* float */
+ {
+ GLenum targetGL;
+ if (pCurrentTextureSurface)
+ targetGL = pCurrentTextureSurface->targetGL;
+ else
+ {
+ /* No texture bound, assume 2D. */
+ targetGL = GL_TEXTURE_2D;
+ }
+
+ glTexParameterf(targetGL, GL_TEXTURE_LOD_BIAS, pTextureState[i].floatValue); /* Identical; default 0.0 identical too */
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL: /* uint32_t */
+ textureType = GL_TEXTURE_BASE_LEVEL;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL: /* uint32_t */
+ if (pState->caps.fTextureFilterAnisotropicSupported)
+ {
+ textureType = GL_TEXTURE_MAX_ANISOTROPY_EXT;
+ val = RT_MIN((GLint)pTextureState[i].value, pState->caps.maxTextureAnisotropy);
+ } /* otherwise ignore. */
+ break;
+
+#if 0
+ case SVGA3D_TS_GAMMA: /* float */
+ samplerType = D3DSAMP_SRGBTEXTURE;
+ /* Boolean in D3D */
+ if (pTextureState[i].floatValue == 1.0f)
+ val = FALSE;
+ else
+ val = TRUE;
+ break;
+#endif
+ /* Internal commands, that don't map directly to the SetTextureStageState API. */
+ case SVGA3D_TS_TEXCOORDGEN: /* SVGA3dTextureCoordGen */
+ AssertFailed();
+ break;
+
+ default:
+ //AssertFailed();
+ break;
+ }
+
+ if (textureType != ~(GLenum)0)
+ {
+ GLenum targetGL;
+ if (pCurrentTextureSurface)
+ targetGL = pCurrentTextureSurface->targetGL;
+ else
+ {
+ /* No texture bound, assume 2D. */
+ targetGL = GL_TEXTURE_2D;
+ }
+
+ switch (pTextureState[i].name)
+ {
+ case SVGA3D_TS_MINFILTER:
+ case SVGA3D_TS_MAGFILTER:
+ {
+ if (pState->caps.fTextureFilterAnisotropicSupported)
+ {
+ uint32_t const anisotropyLevel = (SVGA3dTextureFilter)pTextureState[i].value == SVGA3D_TEX_FILTER_ANISOTROPIC
+ ? RT_MAX(1, pContext->state.aTextureStates[currentStage][SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL].value)
+ : 1;
+ glTexParameteri(targetGL, GL_TEXTURE_MAX_ANISOTROPY_EXT, RT_MIN((GLint)anisotropyLevel, pState->caps.maxTextureAnisotropy));
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ } break;
+
+ default: break;
+ }
+
+ glTexParameteri(targetGL, textureType, val);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetMaterial(PVGASTATECC pThisCC, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u face %d\n", cid, face));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ GLenum oglFace;
+ switch (face)
+ {
+ case SVGA3D_FACE_NONE:
+ case SVGA3D_FACE_FRONT:
+ oglFace = GL_FRONT;
+ break;
+
+ case SVGA3D_FACE_BACK:
+ oglFace = GL_BACK;
+ break;
+
+ case SVGA3D_FACE_FRONT_BACK:
+ oglFace = GL_FRONT_AND_BACK;
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ /* Save for vm state save/restore. */
+ pContext->state.aMaterial[face].fValid = true;
+ pContext->state.aMaterial[face].material = *pMaterial;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_MATERIAL;
+
+ glMaterialfv(oglFace, GL_DIFFUSE, pMaterial->diffuse);
+ glMaterialfv(oglFace, GL_AMBIENT, pMaterial->ambient);
+ glMaterialfv(oglFace, GL_SPECULAR, pMaterial->specular);
+ glMaterialfv(oglFace, GL_EMISSION, pMaterial->emissive);
+ glMaterialfv(oglFace, GL_SHININESS, &pMaterial->shininess);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ return VINF_SUCCESS;
+}
+
+/** @todo Move into separate library as we are using logic from Wine here. */
+static DECLCALLBACK(int) vmsvga3dBackSetLightData(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("vmsvga3dSetLightData cid=%u index=%d type=%d\n", cid, index, pData->type));
+ ASSERT_GUEST_RETURN(index < SVGA3D_MAX_LIGHTS, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Store for vm state save/restore */
+ pContext->state.aLightData[index].fValidData = true;
+ pContext->state.aLightData[index].data = *pData;
+
+ if ( pData->attenuation0 < 0.0f
+ || pData->attenuation1 < 0.0f
+ || pData->attenuation2 < 0.0f)
+ {
+ Log(("vmsvga3dSetLightData: invalid negative attenuation values!!\n"));
+ return VINF_SUCCESS; /* ignore; could crash the GL driver */
+ }
+
+ /* Light settings are affected by the model view in OpenGL, the View transform in direct3d */
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glLoadMatrixf(pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].matrix);
+
+ glLightfv(GL_LIGHT0 + index, GL_DIFFUSE, pData->diffuse);
+ glLightfv(GL_LIGHT0 + index, GL_SPECULAR, pData->specular);
+ glLightfv(GL_LIGHT0 + index, GL_AMBIENT, pData->ambient);
+
+ float QuadAttenuation;
+ if (pData->range * pData->range >= FLT_MIN)
+ QuadAttenuation = 1.4f / (pData->range * pData->range);
+ else
+ QuadAttenuation = 0.0f;
+
+ switch (pData->type)
+ {
+ case SVGA3D_LIGHTTYPE_POINT:
+ {
+ GLfloat position[4];
+
+ position[0] = pData->position[0];
+ position[1] = pData->position[1];
+ position[2] = pData->position[2];
+ position[3] = 1.0f;
+
+ glLightfv(GL_LIGHT0 + index, GL_POSITION, position);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_SPOT_CUTOFF, 180.0f);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Attenuation - Are these right? guessing... */
+ glLightf(GL_LIGHT0 + index, GL_CONSTANT_ATTENUATION, pData->attenuation0);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_LINEAR_ATTENUATION, pData->attenuation1);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_QUADRATIC_ATTENUATION, (QuadAttenuation < pData->attenuation2) ? pData->attenuation2 : QuadAttenuation);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /** @todo range */
+ break;
+ }
+
+ case SVGA3D_LIGHTTYPE_SPOT1:
+ {
+ GLfloat exponent;
+ GLfloat position[4];
+ const GLfloat pi = 4.0f * atanf(1.0f);
+
+ position[0] = pData->position[0];
+ position[1] = pData->position[1];
+ position[2] = pData->position[2];
+ position[3] = 1.0f;
+
+ glLightfv(GL_LIGHT0 + index, GL_POSITION, position);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ position[0] = pData->direction[0];
+ position[1] = pData->direction[1];
+ position[2] = pData->direction[2];
+ position[3] = 1.0f;
+
+ glLightfv(GL_LIGHT0 + index, GL_SPOT_DIRECTION, position);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /*
+ * opengl-ish and d3d-ish spot lights use too different models for the
+ * light "intensity" as a function of the angle towards the main light direction,
+ * so we only can approximate very roughly.
+ * however spot lights are rather rarely used in games (if ever used at all).
+ * furthermore if still used, probably nobody pays attention to such details.
+ */
+ if (pData->falloff == 0)
+ {
+ /* Falloff = 0 is easy, because d3d's and opengl's spot light equations have the
+ * falloff resp. exponent parameter as an exponent, so the spot light lighting
+ * will always be 1.0 for both of them, and we don't have to care for the
+ * rest of the rather complex calculation
+ */
+ exponent = 0.0f;
+ }
+ else
+ {
+ float rho = pData->theta + (pData->phi - pData->theta) / (2 * pData->falloff);
+ if (rho < 0.0001f)
+ rho = 0.0001f;
+ exponent = -0.3f/log(cos(rho/2));
+ }
+ if (exponent > 128.0f)
+ exponent = 128.0f;
+
+ glLightf(GL_LIGHT0 + index, GL_SPOT_EXPONENT, exponent);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_SPOT_CUTOFF, pData->phi * 90.0 / pi);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Attenuation - Are these right? guessing... */
+ glLightf(GL_LIGHT0 + index, GL_CONSTANT_ATTENUATION, pData->attenuation0);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_LINEAR_ATTENUATION, pData->attenuation1);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_QUADRATIC_ATTENUATION, (QuadAttenuation < pData->attenuation2) ? pData->attenuation2 : QuadAttenuation);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /** @todo range */
+ break;
+ }
+
+ case SVGA3D_LIGHTTYPE_DIRECTIONAL:
+ {
+ GLfloat position[4];
+
+ position[0] = -pData->direction[0];
+ position[1] = -pData->direction[1];
+ position[2] = -pData->direction[2];
+ position[3] = 0.0f;
+
+ glLightfv(GL_LIGHT0 + index, GL_POSITION, position); /* Note gl uses w position of 0 for direction! */
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_SPOT_CUTOFF, 180.0f);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glLightf(GL_LIGHT0 + index, GL_SPOT_EXPONENT, 0.0f);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ break;
+ }
+
+ case SVGA3D_LIGHTTYPE_SPOT2:
+ default:
+ Log(("Unsupported light type!!\n"));
+ rc = VERR_INVALID_PARAMETER;
+ break;
+ }
+
+ /* Restore the modelview matrix */
+ glPopMatrix();
+
+ return rc;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetLightEnabled(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, uint32_t enabled)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u %d -> %d\n", cid, index, enabled));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Store for vm state save/restore */
+ if (index < SVGA3D_MAX_LIGHTS)
+ pContext->state.aLightData[index].fEnabled = !!enabled;
+ else
+ AssertFailed();
+
+ if (enabled)
+ {
+ if (index < SVGA3D_MAX_LIGHTS)
+ {
+ /* Load the default settings if none have been set yet. */
+ if (!pContext->state.aLightData[index].fValidData)
+ vmsvga3dBackSetLightData(pThisCC, cid, index, (SVGA3dLightData *)&vmsvga3d_default_light);
+ }
+ glEnable(GL_LIGHT0 + index);
+ }
+ else
+ glDisable(GL_LIGHT0 + index);
+
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetViewPort(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetViewPort cid=%u (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Save for vm state save/restore. */
+ pContext->state.RectViewPort = *pRect;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VIEWPORT;
+
+ /** @todo y-inversion for partial viewport coordinates? */
+ glViewport(pRect->x, pRect->y, pRect->w, pRect->h);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Reset the projection matrix as that relies on the viewport setting. */
+ if (pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].fValid == true)
+ vmsvga3dBackSetTransform(pThisCC, cid, SVGA3D_TRANSFORM_PROJECTION,
+ pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].matrix);
+ else
+ {
+ float matrix[16];
+
+ /* identity matrix if no matrix set. */
+ memset(matrix, 0, sizeof(matrix));
+ matrix[0] = 1.0;
+ matrix[5] = 1.0;
+ matrix[10] = 1.0;
+ matrix[15] = 1.0;
+ vmsvga3dBackSetTransform(pThisCC, cid, SVGA3D_TRANSFORM_PROJECTION, matrix);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetClipPlane(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4])
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ double oglPlane[4];
+
+ Log(("vmsvga3dSetClipPlane cid=%u %d (%d,%d)(%d,%d)\n", cid, index, (unsigned)(plane[0] * 100.0), (unsigned)(plane[1] * 100.0), (unsigned)(plane[2] * 100.0), (unsigned)(plane[3] * 100.0)));
+ AssertReturn(index < SVGA3D_NUM_CLIPPLANES, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Store for vm state save/restore. */
+ pContext->state.aClipPlane[index].fValid = true;
+ memcpy(pContext->state.aClipPlane[index].plane, plane, sizeof(pContext->state.aClipPlane[index].plane));
+
+ /** @todo clip plane affected by model view in OpenGL & view in D3D + vertex shader -> not transformed (see Wine; state.c clipplane) */
+ oglPlane[0] = (double)plane[0];
+ oglPlane[1] = (double)plane[1];
+ oglPlane[2] = (double)plane[2];
+ oglPlane[3] = (double)plane[3];
+
+ glClipPlane(GL_CLIP_PLANE0 + index, oglPlane);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetScissorRect(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetScissorRect cid=%u (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Store for vm state save/restore. */
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_SCISSORRECT;
+ pContext->state.RectScissor = *pRect;
+
+ glScissor(pRect->x, pRect->y, pRect->w, pRect->h);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ return VINF_SUCCESS;
+}
+
+static void vmsvgaColor2GLFloatArray(uint32_t color, GLfloat *pRed, GLfloat *pGreen, GLfloat *pBlue, GLfloat *pAlpha)
+{
+ /* Convert byte color components to float (0-1.0) */
+ *pAlpha = (GLfloat)(color >> 24) / 255.0;
+ *pRed = (GLfloat)((color >> 16) & 0xff) / 255.0;
+ *pGreen = (GLfloat)((color >> 8) & 0xff) / 255.0;
+ *pBlue = (GLfloat)(color & 0xff) / 255.0;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackCommandClear(PVGASTATECC pThisCC, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil,
+ uint32_t cRects, SVGA3dRect *pRect)
+{
+ GLbitfield mask = 0;
+ GLbitfield restoreMask = 0;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ GLboolean fDepthWriteEnabled = GL_FALSE;
+ GLboolean afColorWriteEnabled[4] = { GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE };
+
+ Log(("vmsvga3dCommandClear cid=%u clearFlag=%x color=%x depth=%d stencil=%x cRects=%d\n", cid, clearFlag, color, (uint32_t)(depth * 100.0), stencil, cRects));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (clearFlag & SVGA3D_CLEAR_COLOR)
+ {
+ GLfloat red, green, blue, alpha;
+ vmsvgaColor2GLFloatArray(color, &red, &green, &blue, &alpha);
+
+ /* Set the color clear value. */
+ glClearColor(red, green, blue, alpha);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ mask |= GL_COLOR_BUFFER_BIT;
+
+ /* glClear will not clear the color buffer if writing is disabled. */
+ glGetBooleanv(GL_COLOR_WRITEMASK, afColorWriteEnabled);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ if ( afColorWriteEnabled[0] == GL_FALSE
+ || afColorWriteEnabled[1] == GL_FALSE
+ || afColorWriteEnabled[2] == GL_FALSE
+ || afColorWriteEnabled[3] == GL_FALSE)
+ {
+ glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ restoreMask |= GL_COLOR_BUFFER_BIT;
+ }
+
+ }
+
+ if (clearFlag & SVGA3D_CLEAR_STENCIL)
+ {
+ /** @todo possibly the same problem as with glDepthMask */
+ glClearStencil(stencil);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ mask |= GL_STENCIL_BUFFER_BIT;
+ }
+
+ if (clearFlag & SVGA3D_CLEAR_DEPTH)
+ {
+ glClearDepth((GLdouble)depth);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ mask |= GL_DEPTH_BUFFER_BIT;
+
+ /* glClear will not clear the depth buffer if writing is disabled. */
+ glGetBooleanv(GL_DEPTH_WRITEMASK, &fDepthWriteEnabled);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ if (fDepthWriteEnabled == GL_FALSE)
+ {
+ glDepthMask(GL_TRUE);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ restoreMask |= GL_DEPTH_BUFFER_BIT;
+ }
+ }
+
+ /* Save the current scissor test bit and scissor box. */
+ glPushAttrib(GL_SCISSOR_BIT);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ if (cRects)
+ {
+ glEnable(GL_SCISSOR_TEST);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ for (uint32_t i = 0; i < cRects; ++i)
+ {
+ LogFunc(("rect [%d] %d,%d %dx%d)\n", i, pRect[i].x, pRect[i].y, pRect[i].w, pRect[i].h));
+ glScissor(pRect[i].x, pRect[i].y, pRect[i].w, pRect[i].h);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glClear(mask);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ }
+ else
+ {
+ glDisable(GL_SCISSOR_TEST);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glClear(mask);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+
+ /* Restore the old scissor test bit and box */
+ glPopAttrib();
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Restore the write states. */
+ if (restoreMask & GL_COLOR_BUFFER_BIT)
+ {
+ glColorMask(afColorWriteEnabled[0],
+ afColorWriteEnabled[1],
+ afColorWriteEnabled[2],
+ afColorWriteEnabled[3]);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+
+ if (restoreMask & GL_DEPTH_BUFFER_BIT)
+ {
+ glDepthMask(fDepthWriteEnabled);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+
+ return VINF_SUCCESS;
+}
+
+/* Convert VMWare vertex declaration to its OpenGL equivalent. */
+int vmsvga3dVertexDecl2OGL(SVGA3dVertexArrayIdentity &identity, GLint &size, GLenum &type, GLboolean &normalized, uint32_t &cbAttrib)
+{
+ normalized = GL_FALSE;
+ switch (identity.type)
+ {
+ case SVGA3D_DECLTYPE_FLOAT1:
+ size = 1;
+ type = GL_FLOAT;
+ cbAttrib = sizeof(float);
+ break;
+ case SVGA3D_DECLTYPE_FLOAT2:
+ size = 2;
+ type = GL_FLOAT;
+ cbAttrib = 2 * sizeof(float);
+ break;
+ case SVGA3D_DECLTYPE_FLOAT3:
+ size = 3;
+ type = GL_FLOAT;
+ cbAttrib = 3 * sizeof(float);
+ break;
+ case SVGA3D_DECLTYPE_FLOAT4:
+ size = 4;
+ type = GL_FLOAT;
+ cbAttrib = 4 * sizeof(float);
+ break;
+
+ case SVGA3D_DECLTYPE_D3DCOLOR:
+ size = GL_BGRA; /* @note requires GL_ARB_vertex_array_bgra */
+ type = GL_UNSIGNED_BYTE;
+ normalized = GL_TRUE; /* glVertexAttribPointer fails otherwise */
+ cbAttrib = sizeof(uint32_t);
+ break;
+
+ case SVGA3D_DECLTYPE_UBYTE4N:
+ normalized = GL_TRUE;
+ RT_FALL_THRU();
+ case SVGA3D_DECLTYPE_UBYTE4:
+ size = 4;
+ type = GL_UNSIGNED_BYTE;
+ cbAttrib = sizeof(uint32_t);
+ break;
+
+ case SVGA3D_DECLTYPE_SHORT2N:
+ normalized = GL_TRUE;
+ RT_FALL_THRU();
+ case SVGA3D_DECLTYPE_SHORT2:
+ size = 2;
+ type = GL_SHORT;
+ cbAttrib = 2 * sizeof(uint16_t);
+ break;
+
+ case SVGA3D_DECLTYPE_SHORT4N:
+ normalized = GL_TRUE;
+ RT_FALL_THRU();
+ case SVGA3D_DECLTYPE_SHORT4:
+ size = 4;
+ type = GL_SHORT;
+ cbAttrib = 4 * sizeof(uint16_t);
+ break;
+
+ case SVGA3D_DECLTYPE_USHORT4N:
+ normalized = GL_TRUE;
+ size = 4;
+ type = GL_UNSIGNED_SHORT;
+ cbAttrib = 4 * sizeof(uint16_t);
+ break;
+
+ case SVGA3D_DECLTYPE_USHORT2N:
+ normalized = GL_TRUE;
+ size = 2;
+ type = GL_UNSIGNED_SHORT;
+ cbAttrib = 2 * sizeof(uint16_t);
+ break;
+
+ case SVGA3D_DECLTYPE_UDEC3:
+ size = 3;
+ type = GL_UNSIGNED_INT_2_10_10_10_REV; /** @todo correct? */
+ cbAttrib = sizeof(uint32_t);
+ break;
+
+ case SVGA3D_DECLTYPE_DEC3N:
+ normalized = true;
+ size = 3;
+ type = GL_INT_2_10_10_10_REV; /** @todo correct? */
+ cbAttrib = sizeof(uint32_t);
+ break;
+
+ case SVGA3D_DECLTYPE_FLOAT16_2:
+ size = 2;
+ type = GL_HALF_FLOAT;
+ cbAttrib = 2 * sizeof(uint16_t);
+ break;
+ case SVGA3D_DECLTYPE_FLOAT16_4:
+ size = 4;
+ type = GL_HALF_FLOAT;
+ cbAttrib = 4 * sizeof(uint16_t);
+ break;
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ //pVertexElement->Method = identity.method;
+ //pVertexElement->Usage = identity.usage;
+
+ return VINF_SUCCESS;
+}
+
+static float vmsvga3dFloat16To32(uint16_t f16)
+{
+ /* From Wiki */
+#ifndef INFINITY
+ static uint32_t const sBitsINFINITY = UINT32_C(0x7f800000);
+ #define INFINITY (*(float const *)&sBitsINFINITY)
+#endif
+#ifndef NAN
+ static uint32_t const sBitsNAN = UINT32_C(0x7fc00000);
+ #define NAN (*(float const *)&sBitsNAN)
+#endif
+
+ uint16_t const s = (f16 >> UINT16_C(15)) & UINT16_C(0x1);
+ uint16_t const e = (f16 >> UINT16_C(10)) & UINT16_C(0x1f);
+ uint16_t const m = (f16 ) & UINT16_C(0x3ff);
+
+ float result = s ? 1.0f : -1.0f;
+ if (e == 0)
+ {
+ if (m == 0)
+ result *= 0.0f; /* zero, -0 */
+ else
+ result *= (float)m / 1024.0f / 16384.0f; /* subnormal numbers: sign * 2^-14 * 0.m */
+ }
+ else if (e == 0x1f)
+ {
+ if (m == 0)
+ result *= INFINITY; /* +-infinity */
+ else
+ result = NAN; /* NAN */
+ }
+ else
+ {
+ result *= powf(2.0f, (float)e - 15.0f) * (1.0f + (float)m / 1024.0f); /* sign * 2^(e-15) * 1.m */
+ }
+
+ return result;
+}
+
+/* Set a vertex attribute according to VMSVGA vertex declaration. */
+static int vmsvga3dSetVertexAttrib(PVMSVGA3DSTATE pState, GLuint index, SVGA3dVertexArrayIdentity const *pIdentity, GLvoid const *pv)
+{
+ switch (pIdentity->type)
+ {
+ case SVGA3D_DECLTYPE_FLOAT1:
+ {
+ /* "One-component float expanded to (float, 0, 0, 1)." */
+ GLfloat const *p = (GLfloat *)pv;
+ GLfloat const v[4] = { p[0], 0.0f, 0.0f, 1.0f };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_FLOAT2:
+ {
+ /* "Two-component float expanded to (float, float, 0, 1)." */
+ GLfloat const *p = (GLfloat *)pv;
+ GLfloat const v[4] = { p[0], p[1], 0.0f, 1.0f };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_FLOAT3:
+ {
+ /* "Three-component float expanded to (float, float, float, 1)." */
+ GLfloat const *p = (GLfloat *)pv;
+ GLfloat const v[4] = { p[0], p[1], p[2], 1.0f };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_FLOAT4:
+ pState->ext.glVertexAttrib4fv(index, (GLfloat const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_D3DCOLOR:
+ /** @todo Need to swap bytes? */
+ pState->ext.glVertexAttrib4Nubv(index, (GLubyte const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_UBYTE4:
+ pState->ext.glVertexAttrib4ubv(index, (GLubyte const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_SHORT2:
+ {
+ /* "Two-component, signed short expanded to (value, value, 0, 1)." */
+ GLshort const *p = (GLshort const *)pv;
+ GLshort const v[4] = { p[0], p[1], 0, 1 };
+ pState->ext.glVertexAttrib4sv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_SHORT4:
+ pState->ext.glVertexAttrib4sv(index, (GLshort const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_UBYTE4N:
+ pState->ext.glVertexAttrib4Nubv(index, (GLubyte const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_SHORT2N:
+ {
+ /* "Normalized, two-component, signed short, expanded to (first short/32767.0, second short/32767.0, 0, 1)." */
+ GLshort const *p = (GLshort const *)pv;
+ GLshort const v[4] = { p[0], p[1], 0, 1 };
+ pState->ext.glVertexAttrib4Nsv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_SHORT4N:
+ pState->ext.glVertexAttrib4Nsv(index, (GLshort const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_USHORT2N:
+ {
+ GLushort const *p = (GLushort const *)pv;
+ GLushort const v[4] = { p[0], p[1], 0, 1 };
+ pState->ext.glVertexAttrib4Nusv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_USHORT4N:
+ pState->ext.glVertexAttrib4Nusv(index, (GLushort const *)pv);
+ break;
+ case SVGA3D_DECLTYPE_UDEC3:
+ {
+ /** @todo Test */
+ /* "Three-component, unsigned, 10 10 10 format expanded to (value, value, value, 1)." */
+ uint32_t const u32 = *(uint32_t *)pv;
+ GLfloat const v[4] = { (float)(u32 & 0x3ff), (float)((u32 >> 10) & 0x3ff), (float)((u32 >> 20) & 0x3ff), 1.0f };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_DEC3N:
+ {
+ /** @todo Test */
+ /* "Three-component, signed, 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)." */
+ uint32_t const u32 = *(uint32_t *)pv;
+ GLfloat const v[4] = { (u32 & 0x3ff) / 511.0f, ((u32 >> 10) & 0x3ff) / 511.0f, ((u32 >> 20) & 0x3ff) / 511.0f, 1.0f };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_FLOAT16_2:
+ {
+ /** @todo Test */
+ /* "Two-component, 16-bit, floating point expanded to (value, value, 0, 1)." */
+ uint16_t const *p = (uint16_t *)pv;
+ GLfloat const v[4] = { vmsvga3dFloat16To32(p[0]), vmsvga3dFloat16To32(p[1]), 0.0f, 1.0f };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ case SVGA3D_DECLTYPE_FLOAT16_4:
+ {
+ /** @todo Test */
+ uint16_t const *p = (uint16_t *)pv;
+ GLfloat const v[4] = { vmsvga3dFloat16To32(p[0]), vmsvga3dFloat16To32(p[1]),
+ vmsvga3dFloat16To32(p[2]), vmsvga3dFloat16To32(p[3]) };
+ pState->ext.glVertexAttrib4fv(index, v);
+ break;
+ }
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ return VINF_SUCCESS;
+}
+
+/* Convert VMWare primitive type to its OpenGL equivalent. */
+/* Calculate the vertex count based on the primitive type and nr of primitives. */
+int vmsvga3dPrimitiveType2OGL(SVGA3dPrimitiveType PrimitiveType, GLenum *pMode, uint32_t cPrimitiveCount, uint32_t *pcVertices)
+{
+ switch (PrimitiveType)
+ {
+ case SVGA3D_PRIMITIVE_TRIANGLELIST:
+ *pMode = GL_TRIANGLES;
+ *pcVertices = cPrimitiveCount * 3;
+ break;
+ case SVGA3D_PRIMITIVE_POINTLIST:
+ *pMode = GL_POINTS;
+ *pcVertices = cPrimitiveCount;
+ break;
+ case SVGA3D_PRIMITIVE_LINELIST:
+ *pMode = GL_LINES;
+ *pcVertices = cPrimitiveCount * 2;
+ break;
+ case SVGA3D_PRIMITIVE_LINESTRIP:
+ *pMode = GL_LINE_STRIP;
+ *pcVertices = cPrimitiveCount + 1;
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+ *pMode = GL_TRIANGLE_STRIP;
+ *pcVertices = cPrimitiveCount + 2;
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+ *pMode = GL_TRIANGLE_FAN;
+ *pcVertices = cPrimitiveCount + 2;
+ break;
+ default:
+ return VERR_INVALID_PARAMETER;
+ }
+ return VINF_SUCCESS;
+}
+
+static int vmsvga3dResetTransformMatrices(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ int rc;
+
+ /* Reset the view matrix (also takes the world matrix into account). */
+ if (pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].fValid == true)
+ rc = vmsvga3dBackSetTransform(pThisCC, pContext->id, SVGA3D_TRANSFORM_VIEW,
+ pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].matrix);
+ else
+ {
+ float matrix[16];
+
+ /* identity matrix if no matrix set. */
+ memset(matrix, 0, sizeof(matrix));
+ matrix[0] = 1.0;
+ matrix[5] = 1.0;
+ matrix[10] = 1.0;
+ matrix[15] = 1.0;
+ rc = vmsvga3dBackSetTransform(pThisCC, pContext->id, SVGA3D_TRANSFORM_VIEW, matrix);
+ }
+
+ /* Reset the projection matrix. */
+ if (pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].fValid == true)
+ {
+ rc = vmsvga3dBackSetTransform(pThisCC, pContext->id, SVGA3D_TRANSFORM_PROJECTION, pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].matrix);
+ }
+ else
+ {
+ float matrix[16];
+
+ /* identity matrix if no matrix set. */
+ memset(matrix, 0, sizeof(matrix));
+ matrix[0] = 1.0;
+ matrix[5] = 1.0;
+ matrix[10] = 1.0;
+ matrix[15] = 1.0;
+ rc = vmsvga3dBackSetTransform(pThisCC, pContext->id, SVGA3D_TRANSFORM_PROJECTION, matrix);
+ }
+ AssertRC(rc);
+ return rc;
+}
+
+static int vmsvga3dDrawPrimitivesProcessVertexDecls(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext,
+ uint32_t iVertexDeclBase, uint32_t numVertexDecls,
+ SVGA3dVertexDecl *pVertexDecl,
+ SVGA3dVertexDivisor const *paVertexDivisors)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ unsigned const sidVertex = pVertexDecl[0].array.surfaceId;
+
+ PVMSVGA3DSURFACE pVertexSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sidVertex, &pVertexSurface);
+ AssertRCReturn(rc, rc);
+
+ Log(("vmsvga3dDrawPrimitives: vertex surface sid=%u\n", sidVertex));
+
+ /* Create and/or bind the vertex buffer. */
+ if (pVertexSurface->oglId.buffer == OPENGL_INVALID_ID)
+ {
+ Log(("vmsvga3dDrawPrimitives: create vertex buffer fDirty=%d size=%x bytes\n", pVertexSurface->fDirty, pVertexSurface->paMipmapLevels[0].cbSurface));
+ PVMSVGA3DCONTEXT pSavedCtx = pContext;
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ pState->ext.glGenBuffers(1, &pVertexSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pVertexSurface->enmOGLResType = VMSVGA3D_OGLRESTYPE_BUFFER;
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pVertexSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ Assert(pVertexSurface->fDirty);
+ /** @todo rethink usage dynamic/static */
+ pState->ext.glBufferData(GL_ARRAY_BUFFER, pVertexSurface->paMipmapLevels[0].cbSurface, pVertexSurface->paMipmapLevels[0].pSurfaceData, GL_DYNAMIC_DRAW);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pVertexSurface->paMipmapLevels[0].fDirty = false;
+ pVertexSurface->fDirty = false;
+
+ pVertexSurface->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, OPENGL_INVALID_ID);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pContext = pSavedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+ }
+
+ Assert(pVertexSurface->fDirty == false);
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pVertexSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Setup the vertex declarations. */
+ for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+ {
+ GLint size;
+ GLenum type;
+ GLboolean normalized;
+ uint32_t cbAttrib;
+ GLuint index = iVertexDeclBase + iVertex;
+
+ Log(("vmsvga3dDrawPrimitives: array index %d type=%s (%d) method=%s (%d) usage=%s (%d) usageIndex=%d stride=%d offset=%d\n", index, vmsvgaDeclType2String(pVertexDecl[iVertex].identity.type), pVertexDecl[iVertex].identity.type, vmsvgaDeclMethod2String(pVertexDecl[iVertex].identity.method), pVertexDecl[iVertex].identity.method, vmsvgaDeclUsage2String(pVertexDecl[iVertex].identity.usage), pVertexDecl[iVertex].identity.usage, pVertexDecl[iVertex].identity.usageIndex, pVertexDecl[iVertex].array.stride, pVertexDecl[iVertex].array.offset));
+
+ rc = vmsvga3dVertexDecl2OGL(pVertexDecl[iVertex].identity, size, type, normalized, cbAttrib);
+ AssertRCReturn(rc, rc);
+
+ ASSERT_GUEST_RETURN( pVertexSurface->paMipmapLevels[0].cbSurface >= pVertexDecl[iVertex].array.offset
+ && pVertexSurface->paMipmapLevels[0].cbSurface - pVertexDecl[iVertex].array.offset >= cbAttrib,
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ if (pContext->state.shidVertex != SVGA_ID_INVALID)
+ {
+ /* Use numbered vertex arrays (or attributes) when shaders are active. */
+ if (pVertexDecl[iVertex].array.stride)
+ {
+ pState->ext.glEnableVertexAttribArray(index);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pState->ext.glVertexAttribPointer(index, size, type, normalized, pVertexDecl[iVertex].array.stride,
+ (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ GLuint divisor = paVertexDivisors && paVertexDivisors[index].instanceData ? 1 : 0;
+ pState->ext.glVertexAttribDivisor(index, divisor);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /** @todo case SVGA3D_DECLUSAGE_COLOR: color component order not identical!! test GL_BGRA!! */
+ }
+ else
+ {
+ /*
+ * D3D and OpenGL have a different meaning of value zero for the vertex array stride:
+ * - D3D (VMSVGA): "use a zero stride to tell the runtime not to increment the vertex buffer offset."
+ * - OpenGL: "If stride is 0, the generic vertex attributes are understood to be tightly packed in the array."
+ * VMSVGA uses the D3D semantics.
+ *
+ * Use glVertexAttrib in order to tell OpenGL to reuse the zero stride attributes for each vertex.
+ */
+ pState->ext.glDisableVertexAttribArray(index);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ const GLvoid *v = (uint8_t *)pVertexSurface->paMipmapLevels[0].pSurfaceData + pVertexDecl[iVertex].array.offset;
+ vmsvga3dSetVertexAttrib(pState, index, &pVertexDecl[iVertex].identity, v);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ }
+ }
+ else
+ {
+ if (pVertexDecl[iVertex].array.stride == 0)
+ {
+ /* Zero stride means that the attribute pointer must not be increased.
+ * See comment about stride in vmsvga3dDrawPrimitives.
+ */
+ LogRelMax(8, ("VMSVGA: Warning: zero stride array in fixed function pipeline\n"));
+ AssertFailed();
+ }
+
+ /* Use the predefined selection of vertex streams for the fixed pipeline. */
+ switch (pVertexDecl[iVertex].identity.usage)
+ {
+ case SVGA3D_DECLUSAGE_POSITIONT:
+ case SVGA3D_DECLUSAGE_POSITION:
+ {
+ glEnableClientState(GL_VERTEX_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glVertexPointer(size, type, pVertexDecl[iVertex].array.stride,
+ (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+ case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_BLENDINDICES:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_NORMAL:
+ glEnableClientState(GL_NORMAL_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glNormalPointer(type, pVertexDecl[iVertex].array.stride,
+ (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_PSIZE:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_TEXCOORD:
+ /* Specify the affected texture unit. */
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL >= 0x103
+ glClientActiveTexture(GL_TEXTURE0 + pVertexDecl[iVertex].identity.usageIndex);
+#else
+ pState->ext.glClientActiveTexture(GL_TEXTURE0 + pVertexDecl[iVertex].identity.usageIndex);
+#endif
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glTexCoordPointer(size, type, pVertexDecl[iVertex].array.stride,
+ (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_TANGENT:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_BINORMAL:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_TESSFACTOR:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_COLOR: /** @todo color component order not identical!! test GL_BGRA!! */
+ glEnableClientState(GL_COLOR_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ glColorPointer(size, type, pVertexDecl[iVertex].array.stride,
+ (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_FOG:
+ glEnableClientState(GL_FOG_COORD_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pState->ext.glFogCoordPointer(type, pVertexDecl[iVertex].array.stride,
+ (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_DEPTH:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_SAMPLE:
+ AssertFailed();
+ break;
+ case SVGA3D_DECLUSAGE_MAX: AssertFailed(); break; /* shut up gcc */
+ }
+ }
+
+#ifdef LOG_ENABLED
+ if (pVertexDecl[iVertex].array.stride == 0)
+ Log(("vmsvga3dDrawPrimitives: stride == 0! Can be valid\n"));
+#endif
+ }
+
+ return VINF_SUCCESS;
+}
+
+static int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase,
+ uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+
+ /* Clean up the vertex declarations. */
+ for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+ {
+ if (pVertexDecl[iVertex].identity.usage == SVGA3D_DECLUSAGE_POSITIONT)
+ {
+ /* Reset the transformation matrices in case of a switch back from pretransformed mode. */
+ Log(("vmsvga3dDrawPrimitivesCleanupVertexDecls: reset world and projection matrices after transformation reset (pre-transformed -> transformed)\n"));
+ vmsvga3dResetTransformMatrices(pThisCC, pContext);
+ }
+
+ if (pContext->state.shidVertex != SVGA_ID_INVALID)
+ {
+ /* Use numbered vertex arrays when shaders are active. */
+ pState->ext.glVertexAttribDivisor(iVertexDeclBase + iVertex, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pState->ext.glDisableVertexAttribArray(iVertexDeclBase + iVertex);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ else
+ {
+ /* Use the predefined selection of vertex streams for the fixed pipeline. */
+ switch (pVertexDecl[iVertex].identity.usage)
+ {
+ case SVGA3D_DECLUSAGE_POSITION:
+ case SVGA3D_DECLUSAGE_POSITIONT:
+ glDisableClientState(GL_VERTEX_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+ break;
+ case SVGA3D_DECLUSAGE_BLENDINDICES:
+ break;
+ case SVGA3D_DECLUSAGE_NORMAL:
+ glDisableClientState(GL_NORMAL_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_PSIZE:
+ break;
+ case SVGA3D_DECLUSAGE_TEXCOORD:
+ /* Specify the affected texture unit. */
+#if VBOX_VMSVGA3D_GL_HACK_LEVEL >= 0x103
+ glClientActiveTexture(GL_TEXTURE0 + pVertexDecl[iVertex].identity.usageIndex);
+#else
+ pState->ext.glClientActiveTexture(GL_TEXTURE0 + pVertexDecl[iVertex].identity.usageIndex);
+#endif
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_TANGENT:
+ break;
+ case SVGA3D_DECLUSAGE_BINORMAL:
+ break;
+ case SVGA3D_DECLUSAGE_TESSFACTOR:
+ break;
+ case SVGA3D_DECLUSAGE_COLOR: /** @todo color component order not identical!! */
+ glDisableClientState(GL_COLOR_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_FOG:
+ glDisableClientState(GL_FOG_COORD_ARRAY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ case SVGA3D_DECLUSAGE_DEPTH:
+ break;
+ case SVGA3D_DECLUSAGE_SAMPLE:
+ break;
+ case SVGA3D_DECLUSAGE_MAX: AssertFailed(); break; /* shut up gcc */
+ }
+ }
+ }
+ /* Unbind the vertex buffer after usage. */
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDrawPrimitives(PVGASTATECC pThisCC, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl,
+ uint32_t numRanges, SVGA3dPrimitiveRange *pRange, uint32_t cVertexDivisor,
+ SVGA3dVertexDivisor *pVertexDivisor)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INTERNAL_ERROR);
+ uint32_t iCurrentVertex;
+
+ Log(("vmsvga3dDrawPrimitives cid=%u numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
+
+ /* Caller already check these, but it cannot hurt to check again... */
+ AssertReturn(numVertexDecls && numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, VERR_INVALID_PARAMETER);
+ AssertReturn(numRanges && numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, VERR_INVALID_PARAMETER);
+ AssertReturn(!cVertexDivisor || cVertexDivisor == numVertexDecls, VERR_INVALID_PARAMETER);
+
+ if (!cVertexDivisor)
+ pVertexDivisor = NULL; /* Be sure. */
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /* Check for pretransformed vertex declarations. */
+ for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+ {
+ switch (pVertexDecl[iVertex].identity.usage)
+ {
+ case SVGA3D_DECLUSAGE_POSITIONT:
+ Log(("ShaderSetPositionTransformed: (%d,%d)\n", pContext->state.RectViewPort.w, pContext->state.RectViewPort.h));
+ RT_FALL_THRU();
+ case SVGA3D_DECLUSAGE_POSITION:
+ ShaderSetPositionTransformed(pContext->pShaderContext, pContext->state.RectViewPort.w,
+ pContext->state.RectViewPort.h,
+ pVertexDecl[iVertex].identity.usage == SVGA3D_DECLUSAGE_POSITIONT);
+ break;
+ default: /* Shut up MSC. */ break;
+ }
+ }
+
+ /* Flush any shader changes; after (!) checking the vertex declarations to deal with pre-transformed vertices. */
+ if (pContext->pShaderContext)
+ {
+ uint32_t rtHeight = 0;
+
+ if (pContext->state.aRenderTargets[SVGA3D_RT_COLOR0] != SVGA_ID_INVALID)
+ {
+ PVMSVGA3DSURFACE pRenderTarget;
+ rc = vmsvga3dSurfaceFromSid(pState, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0], &pRenderTarget);
+ AssertRCReturn(rc, rc);
+
+ rtHeight = pRenderTarget->paMipmapLevels[0].mipmapSize.height;
+ }
+
+ ShaderUpdateState(pContext->pShaderContext, rtHeight);
+ }
+
+ /* Try to figure out if instancing is used.
+ * Support simple instancing case with one set of indexed data and one set per-instance data.
+ */
+ uint32_t cInstances = 0;
+ for (uint32_t iVertexDivisor = 0; iVertexDivisor < cVertexDivisor; ++iVertexDivisor)
+ {
+ if (pVertexDivisor[iVertexDivisor].indexedData)
+ {
+ if (cInstances == 0)
+ cInstances = pVertexDivisor[iVertexDivisor].count;
+ else
+ Assert(cInstances == pVertexDivisor[iVertexDivisor].count);
+ }
+ else if (pVertexDivisor[iVertexDivisor].instanceData)
+ {
+ Assert(pVertexDivisor[iVertexDivisor].count == 1);
+ }
+ }
+
+ /* Process all vertex declarations. Each vertex buffer is represented by one stream. */
+ iCurrentVertex = 0;
+ while (iCurrentVertex < numVertexDecls)
+ {
+ uint32_t sidVertex = SVGA_ID_INVALID;
+ uint32_t iVertex;
+
+ for (iVertex = iCurrentVertex; iVertex < numVertexDecls; iVertex++)
+ {
+ if ( sidVertex != SVGA_ID_INVALID
+ && pVertexDecl[iVertex].array.surfaceId != sidVertex
+ )
+ break;
+ sidVertex = pVertexDecl[iVertex].array.surfaceId;
+ }
+
+ rc = vmsvga3dDrawPrimitivesProcessVertexDecls(pThisCC, pContext, iCurrentVertex, iVertex - iCurrentVertex,
+ &pVertexDecl[iCurrentVertex], pVertexDivisor);
+ AssertRCReturn(rc, rc);
+
+ iCurrentVertex = iVertex;
+ }
+
+ /* Now draw the primitives. */
+ for (unsigned iPrimitive = 0; iPrimitive < numRanges; iPrimitive++)
+ {
+ GLenum modeDraw;
+ unsigned const sidIndex = pRange[iPrimitive].indexArray.surfaceId;
+ PVMSVGA3DSURFACE pIndexSurface = NULL;
+ unsigned cVertices;
+
+ Log(("Primitive %d: type %s\n", iPrimitive, vmsvga3dPrimitiveType2String(pRange[iPrimitive].primType)));
+ rc = vmsvga3dPrimitiveType2OGL(pRange[iPrimitive].primType, &modeDraw, pRange[iPrimitive].primitiveCount, &cVertices);
+ if (RT_FAILURE(rc))
+ {
+ AssertRC(rc);
+ goto internal_error;
+ }
+
+ if (sidIndex != SVGA3D_INVALID_ID)
+ {
+ AssertMsg(pRange[iPrimitive].indexWidth == sizeof(uint32_t) || pRange[iPrimitive].indexWidth == sizeof(uint16_t), ("Unsupported primitive width %d\n", pRange[iPrimitive].indexWidth));
+
+ rc = vmsvga3dSurfaceFromSid(pState, sidIndex, &pIndexSurface);
+ if (RT_FAILURE(rc))
+ {
+ AssertRC(rc);
+ goto internal_error;
+ }
+
+ Log(("vmsvga3dDrawPrimitives: index surface sid=%u\n", sidIndex));
+
+ if (pIndexSurface->oglId.buffer == OPENGL_INVALID_ID)
+ {
+ Log(("vmsvga3dDrawPrimitives: create index buffer fDirty=%d size=%x bytes\n", pIndexSurface->fDirty, pIndexSurface->paMipmapLevels[0].cbSurface));
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ pState->ext.glGenBuffers(1, &pIndexSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ pIndexSurface->enmOGLResType = VMSVGA3D_OGLRESTYPE_BUFFER;
+
+ pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pIndexSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ Assert(pIndexSurface->fDirty);
+
+ /** @todo rethink usage dynamic/static */
+ pState->ext.glBufferData(GL_ELEMENT_ARRAY_BUFFER, pIndexSurface->paMipmapLevels[0].cbSurface, pIndexSurface->paMipmapLevels[0].pSurfaceData, GL_DYNAMIC_DRAW);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pIndexSurface->paMipmapLevels[0].fDirty = false;
+ pIndexSurface->fDirty = false;
+
+ pIndexSurface->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+
+ pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, OPENGL_INVALID_ID);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pContext = pState->papContexts[cid];
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+ }
+ Assert(pIndexSurface->fDirty == false);
+
+ pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pIndexSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+
+ if (!pIndexSurface)
+ {
+ /* Render without an index buffer */
+ Log(("DrawPrimitive %d cPrimitives=%d cVertices=%d index index bias=%d cInstances=%d\n", modeDraw, pRange[iPrimitive].primitiveCount, cVertices, pRange[iPrimitive].indexBias, cInstances));
+ if (cInstances == 0)
+ {
+ glDrawArrays(modeDraw, pRange[iPrimitive].indexBias, cVertices);
+ }
+ else
+ {
+ pState->ext.glDrawArraysInstanced(modeDraw, pRange[iPrimitive].indexBias, cVertices, cInstances);
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ else
+ {
+ Assert(pRange[iPrimitive].indexWidth == pRange[iPrimitive].indexArray.stride);
+
+ GLenum indexType;
+ switch (pRange[iPrimitive].indexWidth)
+ {
+ case 1: indexType = GL_UNSIGNED_BYTE; break;
+ case 2: indexType = GL_UNSIGNED_SHORT; break;
+ default: AssertMsgFailed(("indexWidth %d\n", pRange[iPrimitive].indexWidth));
+ RT_FALL_THROUGH();
+ case 4: indexType = GL_UNSIGNED_INT; break;
+ }
+
+ Log(("DrawIndexedPrimitive %d cPrimitives=%d cVertices=%d hint.first=%d hint.last=%d index offset=%d primitivecount=%d index width=%d index bias=%d cInstances=%d\n", modeDraw, pRange[iPrimitive].primitiveCount, cVertices, pVertexDecl[0].rangeHint.first, pVertexDecl[0].rangeHint.last, pRange[iPrimitive].indexArray.offset, pRange[iPrimitive].primitiveCount, pRange[iPrimitive].indexWidth, pRange[iPrimitive].indexBias, cInstances));
+ if (cInstances == 0)
+ {
+ /* Render with an index buffer */
+ if (pRange[iPrimitive].indexBias == 0)
+ glDrawElements(modeDraw,
+ cVertices,
+ indexType,
+ (GLvoid *)(uintptr_t)pRange[iPrimitive].indexArray.offset); /* byte offset in indices buffer */
+ else
+ pState->ext.glDrawElementsBaseVertex(modeDraw,
+ cVertices,
+ indexType,
+ (GLvoid *)(uintptr_t)pRange[iPrimitive].indexArray.offset, /* byte offset in indices buffer */
+ pRange[iPrimitive].indexBias); /* basevertex */
+ }
+ else
+ {
+ /* Render with an index buffer */
+ if (pRange[iPrimitive].indexBias == 0)
+ pState->ext.glDrawElementsInstanced(modeDraw,
+ cVertices,
+ indexType,
+ (GLvoid *)(uintptr_t)pRange[iPrimitive].indexArray.offset, /* byte offset in indices buffer */
+ cInstances);
+ else
+ pState->ext.glDrawElementsInstancedBaseVertex(modeDraw,
+ cVertices,
+ indexType,
+ (GLvoid *)(uintptr_t)pRange[iPrimitive].indexArray.offset, /* byte offset in indices buffer */
+ cInstances,
+ pRange[iPrimitive].indexBias); /* basevertex */
+ }
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ /* Unbind the index buffer after usage. */
+ pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ }
+ }
+
+internal_error:
+
+ /* Deactivate the vertex declarations. */
+ iCurrentVertex = 0;
+ while (iCurrentVertex < numVertexDecls)
+ {
+ uint32_t sidVertex = SVGA_ID_INVALID;
+ uint32_t iVertex;
+
+ for (iVertex = iCurrentVertex; iVertex < numVertexDecls; iVertex++)
+ {
+ if ( sidVertex != SVGA_ID_INVALID
+ && pVertexDecl[iVertex].array.surfaceId != sidVertex
+ )
+ break;
+ sidVertex = pVertexDecl[iVertex].array.surfaceId;
+ }
+
+ rc = vmsvga3dDrawPrimitivesCleanupVertexDecls(pThisCC, pContext, iCurrentVertex,
+ iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
+ AssertRCReturn(rc, rc);
+
+ iCurrentVertex = iVertex;
+ }
+
+#ifdef DEBUG
+ /* Check whether 'activeTexture' on texture unit 'i' matches what we expect. */
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); ++i)
+ {
+ if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
+ {
+ PVMSVGA3DSURFACE pTexture;
+ int rc2 = vmsvga3dSurfaceFromSid(pState, pContext->aSidActiveTextures[i], &pTexture);
+ AssertContinue(RT_SUCCESS(rc2));
+
+ GLint activeTextureUnit = 0;
+ glGetIntegerv(GL_ACTIVE_TEXTURE, &activeTextureUnit);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ pState->ext.glActiveTexture(GL_TEXTURE0 + i);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ GLint activeTexture = 0;
+ glGetIntegerv(pTexture->bindingGL, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ pState->ext.glActiveTexture(activeTextureUnit);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ AssertMsg(pTexture->oglId.texture == (GLuint)activeTexture,
+ ("%d vs %d unit %d (active unit %d) sid=%u\n", pTexture->oglId.texture, activeTexture, i,
+ activeTextureUnit - GL_TEXTURE0, pContext->aSidActiveTextures[i]));
+ }
+ }
+#endif
+
+#if 0
+ /* Dump render target to a bitmap. */
+ if (pContext->state.aRenderTargets[SVGA3D_RT_COLOR0] != SVGA3D_INVALID_ID)
+ {
+ vmsvga3dUpdateHeapBuffersForSurfaces(pThisCC, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0]);
+ PVMSVGA3DSURFACE pSurface;
+ int rc2 = vmsvga3dSurfaceFromSid(pState, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0], &pSurface);
+ if (RT_SUCCESS(rc2))
+ vmsvga3dInfoSurfaceToBitmap(NULL, pSurface, "bmpgl", "rt", "-post");
+# if 0
+ /* Stage 0 texture. */
+ if (pContext->aSidActiveTextures[0] != SVGA3D_INVALID_ID)
+ {
+ vmsvga3dUpdateHeapBuffersForSurfaces(pThisCC, pContext->aSidActiveTextures[0]);
+ rc2 = vmsvga3dSurfaceFromSid(pState, pContext->aSidActiveTextures[0], &pSurface);
+ if (RT_SUCCESS(rc2))
+ vmsvga3dInfoSurfaceToBitmap(NULL, pSurface, "bmpgl", "rt", "-post-tx");
+ }
+# endif
+ }
+#endif
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackShaderDefine(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData)
+{
+ PVMSVGA3DSHADER pShader;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dShaderDefine cid=%u shid=%d type=%s cbData=0x%x\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cbData));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ AssertReturn(shid < SVGA3D_MAX_SHADER_IDS, VERR_INVALID_PARAMETER);
+
+ rc = vmsvga3dShaderParse(type, cbData, pShaderData);
+ if (RT_FAILURE(rc))
+ {
+ AssertRC(rc);
+ vmsvga3dShaderLogRel("Failed to parse", type, cbData, pShaderData);
+ return rc;
+ }
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ if (shid >= pContext->cVertexShaders)
+ {
+ void *pvNew = RTMemRealloc(pContext->paVertexShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pContext->paVertexShader = (PVMSVGA3DSHADER)pvNew;
+ memset(&pContext->paVertexShader[pContext->cVertexShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cVertexShaders));
+ for (uint32_t i = pContext->cVertexShaders; i < shid + 1; i++)
+ pContext->paVertexShader[i].id = SVGA3D_INVALID_ID;
+ pContext->cVertexShaders = shid + 1;
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (pContext->paVertexShader[shid].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, cid, shid, pContext->paVertexShader[shid].type);
+
+ pShader = &pContext->paVertexShader[shid];
+ }
+ else
+ {
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if (shid >= pContext->cPixelShaders)
+ {
+ void *pvNew = RTMemRealloc(pContext->paPixelShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pContext->paPixelShader = (PVMSVGA3DSHADER)pvNew;
+ memset(&pContext->paPixelShader[pContext->cPixelShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cPixelShaders));
+ for (uint32_t i = pContext->cPixelShaders; i < shid + 1; i++)
+ pContext->paPixelShader[i].id = SVGA3D_INVALID_ID;
+ pContext->cPixelShaders = shid + 1;
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (pContext->paPixelShader[shid].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, cid, shid, pContext->paPixelShader[shid].type);
+
+ pShader = &pContext->paPixelShader[shid];
+ }
+
+ memset(pShader, 0, sizeof(*pShader));
+ pShader->id = shid;
+ pShader->cid = cid;
+ pShader->type = type;
+ pShader->cbData = cbData;
+ pShader->pShaderProgram = RTMemAllocZ(cbData);
+ AssertReturn(pShader->pShaderProgram, VERR_NO_MEMORY);
+ memcpy(pShader->pShaderProgram, pShaderData, cbData);
+
+#ifdef DUMP_SHADER_DISASSEMBLY
+ LPD3DXBUFFER pDisassembly;
+ HRESULT hr = D3DXDisassembleShader((const DWORD *)pShaderData, FALSE, NULL, &pDisassembly);
+ if (hr == D3D_OK)
+ {
+ Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
+ pDisassembly->Release();
+ }
+#endif
+
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ rc = ShaderCreateVertexShader(pContext->pShaderContext, (const uint32_t *)pShaderData, cbData, &pShader->u.pVertexShader);
+ AssertRC(rc);
+ break;
+
+ case SVGA3D_SHADERTYPE_PS:
+ rc = ShaderCreatePixelShader(pContext->pShaderContext, (const uint32_t *)pShaderData, cbData, &pShader->u.pPixelShader);
+ AssertRC(rc);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ if (rc != VINF_SUCCESS)
+ {
+ vmsvga3dShaderLogRel("Failed to create", type, cbData, pShaderData);
+
+ RTMemFree(pShader->pShaderProgram);
+ memset(pShader, 0, sizeof(*pShader));
+ pShader->id = SVGA3D_INVALID_ID;
+ }
+
+ return rc;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ PVMSVGA3DSHADER pShader = NULL;
+
+ Log(("vmsvga3dShaderDestroy cid=%u shid=%d type=%s\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL"));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ if ( shid < pContext->cVertexShaders
+ && pContext->paVertexShader[shid].id == shid)
+ {
+ pShader = &pContext->paVertexShader[shid];
+ if (pContext->state.shidVertex == shid)
+ {
+ rc = ShaderSetVertexShader(pContext->pShaderContext, NULL);
+ AssertRC(rc);
+ }
+
+ rc = ShaderDestroyVertexShader(pContext->pShaderContext, pShader->u.pVertexShader);
+ AssertRC(rc);
+ }
+ }
+ else
+ {
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if ( shid < pContext->cPixelShaders
+ && pContext->paPixelShader[shid].id == shid)
+ {
+ pShader = &pContext->paPixelShader[shid];
+ if (pContext->state.shidPixel == shid)
+ {
+ ShaderSetPixelShader(pContext->pShaderContext, NULL);
+ AssertRC(rc);
+ }
+
+ rc = ShaderDestroyPixelShader(pContext->pShaderContext, pShader->u.pPixelShader);
+ AssertRC(rc);
+ }
+ }
+
+ if (pShader)
+ {
+ if (pShader->pShaderProgram)
+ RTMemFree(pShader->pShaderProgram);
+ memset(pShader, 0, sizeof(*pShader));
+ pShader->id = SVGA3D_INVALID_ID;
+ }
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackShaderSet(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ int rc;
+
+ Log(("vmsvga3dShaderSet cid=%u type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid));
+
+ if (!pContext)
+ {
+ rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ }
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ /* Save for vm state save/restore. */
+ pContext->state.shidVertex = shid;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VERTEXSHADER;
+
+ if ( shid < pContext->cVertexShaders
+ && pContext->paVertexShader[shid].id == shid)
+ {
+ PVMSVGA3DSHADER pShader = &pContext->paVertexShader[shid];
+ Assert(type == pShader->type);
+
+ rc = ShaderSetVertexShader(pContext->pShaderContext, pShader->u.pVertexShader);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ if (shid == SVGA_ID_INVALID)
+ {
+ /* Unselect shader. */
+ rc = ShaderSetVertexShader(pContext->pShaderContext, NULL);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ else
+ {
+ /* Save for vm state save/restore. */
+ pContext->state.shidPixel = shid;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_PIXELSHADER;
+
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if ( shid < pContext->cPixelShaders
+ && pContext->paPixelShader[shid].id == shid)
+ {
+ PVMSVGA3DSHADER pShader = &pContext->paPixelShader[shid];
+ Assert(type == pShader->type);
+
+ rc = ShaderSetPixelShader(pContext->pShaderContext, pShader->u.pPixelShader);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ if (shid == SVGA_ID_INVALID)
+ {
+ /* Unselect shader. */
+ rc = ShaderSetPixelShader(pContext->pShaderContext, NULL);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackShaderSetConst(PVGASTATECC pThisCC, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dShaderSetConst cid=%u reg=%x type=%s cregs=%d ctype=%x\n", cid, reg, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cRegisters, ctype));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ for (uint32_t i = 0; i < cRegisters; i++)
+ {
+#ifdef LOG_ENABLED
+ switch (ctype)
+ {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ {
+ float *pValuesF = (float *)pValues;
+ Log(("ConstantF %d: value=" FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR "\n",
+ reg + i, FLOAT_FMT_ARGS(pValuesF[i*4 + 0]), FLOAT_FMT_ARGS(pValuesF[i*4 + 1]), FLOAT_FMT_ARGS(pValuesF[i*4 + 2]), FLOAT_FMT_ARGS(pValuesF[i*4 + 3])));
+ break;
+ }
+
+ case SVGA3D_CONST_TYPE_INT:
+ Log(("ConstantI %d: value=%d, %d, %d, %d\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+ break;
+
+ case SVGA3D_CONST_TYPE_BOOL:
+ Log(("ConstantB %d: value=%d, %d, %d, %d\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+#endif
+ vmsvga3dSaveShaderConst(pContext, reg + i, type, ctype, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]);
+ }
+
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ switch (ctype)
+ {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ rc = ShaderSetVertexShaderConstantF(pContext->pShaderContext, reg, (const float *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_INT:
+ rc = ShaderSetVertexShaderConstantI(pContext->pShaderContext, reg, (const int32_t *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_BOOL:
+ rc = ShaderSetVertexShaderConstantB(pContext->pShaderContext, reg, (const uint8_t *)pValues, cRegisters);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ AssertRCReturn(rc, rc);
+ break;
+
+ case SVGA3D_SHADERTYPE_PS:
+ switch (ctype)
+ {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ rc = ShaderSetPixelShaderConstantF(pContext->pShaderContext, reg, (const float *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_INT:
+ rc = ShaderSetPixelShaderConstantI(pContext->pShaderContext, reg, (const int32_t *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_BOOL:
+ rc = ShaderSetPixelShaderConstantB(pContext->pShaderContext, reg, (const uint8_t *)pValues, cRegisters);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ AssertRCReturn(rc, rc);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryCreate(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState->ext.glGenQueries, VERR_NOT_SUPPORTED);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ GLuint idQuery = 0;
+ pState->ext.glGenQueries(1, &idQuery);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ AssertReturn(idQuery, VERR_INTERNAL_ERROR);
+ pContext->occlusion.idQuery = idQuery;
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryDelete(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState->ext.glDeleteQueries, VERR_NOT_SUPPORTED);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ if (pContext->occlusion.idQuery)
+ {
+ pState->ext.glDeleteQueries(1, &pContext->occlusion.idQuery);
+ }
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryBegin(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState->ext.glBeginQuery, VERR_NOT_SUPPORTED);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ pState->ext.glBeginQuery(GL_ANY_SAMPLES_PASSED, pContext->occlusion.idQuery);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryEnd(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState->ext.glEndQuery, VERR_NOT_SUPPORTED);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ pState->ext.glEndQuery(GL_ANY_SAMPLES_PASSED);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryGetData(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState->ext.glGetQueryObjectuiv, VERR_NOT_SUPPORTED);
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ GLuint pixels = 0;
+ pState->ext.glGetQueryObjectuiv(pContext->occlusion.idQuery, GL_QUERY_RESULT, &pixels);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ *pu32Pixels = (uint32_t)pixels;
+ return VINF_SUCCESS;
+}
+
+/**
+ * Worker for vmsvga3dUpdateHeapBuffersForSurfaces.
+ *
+ * This will allocate heap buffers if necessary, thus increasing the memory
+ * usage of the process.
+ *
+ * @todo Would be interesting to share this code with the saved state code.
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA context.
+ * @param pSurface The surface to refresh the heap buffers for.
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceUpdateHeapBuffers(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ /*
+ * Currently we've got trouble retreving bit for DEPTHSTENCIL
+ * surfaces both for OpenGL and D3D, so skip these here (don't
+ * wast memory on them).
+ */
+ uint32_t const fSwitchFlags = pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
+ if ( fSwitchFlags != SVGA3D_SURFACE_HINT_DEPTHSTENCIL
+ && fSwitchFlags != (SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE))
+ {
+ /*
+ * Change OpenGL context to the one the surface is associated with.
+ */
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ /*
+ * Work thru each mipmap level for each face.
+ */
+ for (uint32_t iFace = 0; iFace < pSurface->cFaces; iFace++)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[iFace * pSurface->cLevels];
+ for (uint32_t i = 0; i < pSurface->cLevels; i++, pMipmapLevel++)
+ {
+ if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ Assert(pMipmapLevel->cbSurface);
+ Assert(pMipmapLevel->cbSurface == pMipmapLevel->cbSurfacePlane * pMipmapLevel->mipmapSize.depth);
+
+ /*
+ * Make sure we've got surface memory buffer.
+ */
+ uint8_t *pbDst = (uint8_t *)pMipmapLevel->pSurfaceData;
+ if (!pbDst)
+ {
+ pMipmapLevel->pSurfaceData = pbDst = (uint8_t *)RTMemAllocZ(pMipmapLevel->cbSurface);
+ AssertReturn(pbDst, VERR_NO_MEMORY);
+ }
+
+ /*
+ * OpenGL specifics.
+ */
+ switch (pSurface->enmOGLResType)
+ {
+ case VMSVGA3D_OGLRESTYPE_TEXTURE:
+ {
+ GLint activeTexture;
+ glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Set row length and alignment of the output data. */
+ VMSVGAPACKPARAMS SavedParams;
+ vmsvga3dOglSetPackParams(pState, pContext, pSurface, &SavedParams);
+
+ glGetTexImage(GL_TEXTURE_2D,
+ i,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pbDst);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ vmsvga3dOglRestorePackParams(pState, pContext, pSurface, &SavedParams);
+
+ /* Restore the old active texture. */
+ glBindTexture(GL_TEXTURE_2D, activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ break;
+ }
+
+ case VMSVGA3D_OGLRESTYPE_BUFFER:
+ {
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ void *pvSrc = pState->ext.glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ if (RT_VALID_PTR(pvSrc))
+ memcpy(pbDst, pvSrc, pMipmapLevel->cbSurface);
+ else
+ AssertPtr(pvSrc);
+
+ pState->ext.glUnmapBuffer(GL_ARRAY_BUFFER);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ break;
+ }
+
+ default:
+ AssertMsgFailed(("%#x\n", fSwitchFlags));
+ }
+ }
+ /* else: There is no data in hardware yet, so whatever we got is already current. */
+ }
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackQueryInterface(PVGASTATECC pThisCC, char const *pszInterfaceName, void *pvInterfaceFuncs, size_t cbInterfaceFuncs)
+{
+ RT_NOREF(pThisCC);
+
+ int rc = VINF_SUCCESS;
+ if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_3D) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCS3D))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCS3D *p = (VMSVGA3DBACKENDFUNCS3D *)pvInterfaceFuncs;
+ p->pfnInit = vmsvga3dBackInit;
+ p->pfnPowerOn = vmsvga3dBackPowerOn;
+ p->pfnTerminate = vmsvga3dBackTerminate;
+ p->pfnReset = vmsvga3dBackReset;
+ p->pfnQueryCaps = vmsvga3dBackQueryCaps;
+ p->pfnChangeMode = vmsvga3dBackChangeMode;
+ p->pfnCreateTexture = vmsvga3dBackCreateTexture;
+ p->pfnSurfaceDestroy = vmsvga3dBackSurfaceDestroy;
+ p->pfnSurfaceInvalidateImage = vmsvga3dBackSurfaceInvalidateImage;
+ p->pfnSurfaceCopy = vmsvga3dBackSurfaceCopy;
+ p->pfnSurfaceDMACopyBox = vmsvga3dBackSurfaceDMACopyBox;
+ p->pfnSurfaceStretchBlt = vmsvga3dBackSurfaceStretchBlt;
+ p->pfnUpdateHostScreenViewport = vmsvga3dBackUpdateHostScreenViewport;
+ p->pfnDefineScreen = vmsvga3dBackDefineScreen;
+ p->pfnDestroyScreen = vmsvga3dBackDestroyScreen;
+ p->pfnSurfaceBlitToScreen = vmsvga3dBackSurfaceBlitToScreen;
+ p->pfnSurfaceUpdateHeapBuffers = vmsvga3dBackSurfaceUpdateHeapBuffers;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_VGPU9) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSVGPU9))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCSVGPU9 *p = (VMSVGA3DBACKENDFUNCSVGPU9 *)pvInterfaceFuncs;
+ p->pfnContextDefine = vmsvga3dBackContextDefine;
+ p->pfnContextDestroy = vmsvga3dBackContextDestroy;
+ p->pfnSetTransform = vmsvga3dBackSetTransform;
+ p->pfnSetZRange = vmsvga3dBackSetZRange;
+ p->pfnSetRenderState = vmsvga3dBackSetRenderState;
+ p->pfnSetRenderTarget = vmsvga3dBackSetRenderTarget;
+ p->pfnSetTextureState = vmsvga3dBackSetTextureState;
+ p->pfnSetMaterial = vmsvga3dBackSetMaterial;
+ p->pfnSetLightData = vmsvga3dBackSetLightData;
+ p->pfnSetLightEnabled = vmsvga3dBackSetLightEnabled;
+ p->pfnSetViewPort = vmsvga3dBackSetViewPort;
+ p->pfnSetClipPlane = vmsvga3dBackSetClipPlane;
+ p->pfnCommandClear = vmsvga3dBackCommandClear;
+ p->pfnDrawPrimitives = vmsvga3dBackDrawPrimitives;
+ p->pfnSetScissorRect = vmsvga3dBackSetScissorRect;
+ p->pfnGenerateMipmaps = vmsvga3dBackGenerateMipmaps;
+ p->pfnShaderDefine = vmsvga3dBackShaderDefine;
+ p->pfnShaderDestroy = vmsvga3dBackShaderDestroy;
+ p->pfnShaderSet = vmsvga3dBackShaderSet;
+ p->pfnShaderSetConst = vmsvga3dBackShaderSetConst;
+ p->pfnOcclusionQueryCreate = vmsvga3dBackOcclusionQueryCreate;
+ p->pfnOcclusionQueryDelete = vmsvga3dBackOcclusionQueryDelete;
+ p->pfnOcclusionQueryBegin = vmsvga3dBackOcclusionQueryBegin;
+ p->pfnOcclusionQueryEnd = vmsvga3dBackOcclusionQueryEnd;
+ p->pfnOcclusionQueryGetData = vmsvga3dBackOcclusionQueryGetData;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else
+ rc = VERR_NOT_IMPLEMENTED;
+ return rc;
+}
+
+
+extern VMSVGA3DBACKENDDESC const g_BackendLegacy =
+{
+ "LEGACY",
+ vmsvga3dBackQueryInterface
+};
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp
new file mode 100644
index 00000000..8f6bd4b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp
@@ -0,0 +1,1290 @@
+/* $Id: DevVGA-SVGA3d-savedstate.cpp $ */
+/** @file
+ * DevSVGA3d - VMWare SVGA device, 3D parts - Saved state and assocated stuff.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <iprt/errcore.h>
+#include <VBox/log.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include <VBox/vmm/pgm.h> /* required by DevVGA.h */
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#define VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+#include "DevVGA-SVGA3d-internal.h"
+
+
+
+/**
+ * Reinitializes an active context.
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pContext The freshly loaded context to reinitialize.
+ */
+static int vmsvga3dLoadReinitContext(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ int rc;
+ uint32_t cid = pContext->id;
+ Assert(cid != SVGA3D_INVALID_ID);
+
+ /* First set the render targets as they change the internal state (reset viewport etc) */
+ Log(("vmsvga3dLoadReinitContext: Recreate render targets BEGIN [cid=%#x]\n", cid));
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aRenderTargets); j++)
+ {
+ if (pContext->state.aRenderTargets[j] != SVGA3D_INVALID_ID)
+ {
+ SVGA3dSurfaceImageId target;
+
+ target.sid = pContext->state.aRenderTargets[j];
+ target.face = 0;
+ target.mipmap = 0;
+ rc = vmsvga3dSetRenderTarget(pThisCC, cid, (SVGA3dRenderTargetType)j, target);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ Log(("vmsvga3dLoadReinitContext: Recreate render targets END\n"));
+
+ /* Recreate the render state */
+ Log(("vmsvga3dLoadReinitContext: Recreate render state BEGIN\n"));
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aRenderState); j++)
+ {
+ SVGA3dRenderState *pRenderState = &pContext->state.aRenderState[j];
+
+ if (pRenderState->state != SVGA3D_RS_INVALID)
+ vmsvga3dSetRenderState(pThisCC, pContext->id, 1, pRenderState);
+ }
+ Log(("vmsvga3dLoadReinitContext: Recreate render state END\n"));
+
+ /* Recreate the texture state */
+ Log(("vmsvga3dLoadReinitContext: Recreate texture state BEGIN\n"));
+ for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); ++iStage)
+ {
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); ++j)
+ {
+ SVGA3dTextureState *pTextureState = &pContext->state.aTextureStates[iStage][j];
+
+ if (pTextureState->name != SVGA3D_TS_INVALID)
+ vmsvga3dSetTextureState(pThisCC, pContext->id, 1, pTextureState);
+ }
+ }
+ Log(("vmsvga3dLoadReinitContext: Recreate texture state END\n"));
+
+ /* Reprogram the clip planes. */
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aClipPlane); j++)
+ {
+ if (pContext->state.aClipPlane[j].fValid == true)
+ vmsvga3dSetClipPlane(pThisCC, cid, j, pContext->state.aClipPlane[j].plane);
+ }
+
+ /* Reprogram the light data. */
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aLightData); j++)
+ {
+ if (pContext->state.aLightData[j].fValidData == true)
+ vmsvga3dSetLightData(pThisCC, cid, j, &pContext->state.aLightData[j].data);
+ if (pContext->state.aLightData[j].fEnabled)
+ vmsvga3dSetLightEnabled(pThisCC, cid, j, true);
+ }
+
+ /* Recreate the transform state. */
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_TRANSFORM)
+ {
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTransformState); j++)
+ {
+ if (pContext->state.aTransformState[j].fValid == true)
+ vmsvga3dSetTransform(pThisCC, cid, (SVGA3dTransformType)j, pContext->state.aTransformState[j].matrix);
+ }
+ }
+
+ /* Reprogram the material data. */
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_MATERIAL)
+ {
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aMaterial); j++)
+ {
+ if (pContext->state.aMaterial[j].fValid == true)
+ vmsvga3dSetMaterial(pThisCC, cid, (SVGA3dFace)j, &pContext->state.aMaterial[j].material);
+ }
+ }
+
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_SCISSORRECT)
+ vmsvga3dSetScissorRect(pThisCC, cid, &pContext->state.RectScissor);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_ZRANGE)
+ vmsvga3dSetZRange(pThisCC, cid, pContext->state.zRange);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
+ vmsvga3dSetViewPort(pThisCC, cid, &pContext->state.RectViewPort);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER)
+ vmsvga3dShaderSet(pThisCC, pContext, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER)
+ vmsvga3dShaderSet(pThisCC, pContext, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
+
+ Log(("vmsvga3dLoadReinitContext: returns [cid=%#x]\n", cid));
+ return VINF_SUCCESS;
+}
+
+static int vmsvga3dLoadVMSVGA3DSURFACEPreMipLevels(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, VMSVGA3DSURFACE *pSurface)
+{
+ struct VMSVGA3DSURFACEPreMipLevels
+ {
+ uint32_t id;
+ uint32_t idAssociatedContext;
+ uint32_t surfaceFlags;
+ SVGA3dSurfaceFormat format;
+#ifdef VMSVGA3D_OPENGL
+ GLint internalFormatGL;
+ GLint formatGL;
+ GLint typeGL;
+#endif
+ SVGA3dSurfaceFace faces[SVGA3D_MAX_SURFACE_FACES];
+ uint32_t cFaces;
+ uint32_t multiSampleCount;
+ SVGA3dTextureFilter autogenFilter;
+ uint32_t cbBlock;
+ };
+
+ static SSMFIELD const s_aVMSVGA3DSURFACEFieldsPreMipLevels[] =
+ {
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, id),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, idAssociatedContext),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, surfaceFlags),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, format),
+#ifdef VMSVGA3D_OPENGL
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, internalFormatGL),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, formatGL),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, typeGL),
+#endif
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, faces),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, cFaces),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, multiSampleCount),
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, autogenFilter),
+#ifdef VMSVGA3D_DIRECT3D
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, format), /* Yes, the 'format' field is duplicated. */
+#endif
+ SSMFIELD_ENTRY(struct VMSVGA3DSURFACEPreMipLevels, cbBlock),
+ SSMFIELD_ENTRY_TERM()
+ };
+
+ struct VMSVGA3DSURFACEPreMipLevels surfacePreMipLevels;
+ int rc = pDevIns->pHlpR3->pfnSSMGetStructEx(pSSM, &surfacePreMipLevels, sizeof(surfacePreMipLevels), 0, s_aVMSVGA3DSURFACEFieldsPreMipLevels, NULL);
+ if (RT_SUCCESS(rc))
+ {
+ pSurface->id = surfacePreMipLevels.id;
+ pSurface->idAssociatedContext = surfacePreMipLevels.idAssociatedContext;
+ pSurface->f.s.surface1Flags = surfacePreMipLevels.surfaceFlags;
+ pSurface->f.s.surface2Flags = 0;
+ pSurface->format = surfacePreMipLevels.format;
+#ifdef VMSVGA3D_OPENGL
+ pSurface->internalFormatGL = surfacePreMipLevels.internalFormatGL;
+ pSurface->formatGL = surfacePreMipLevels.formatGL;
+ pSurface->typeGL = surfacePreMipLevels.typeGL;
+#endif
+ pSurface->cLevels = surfacePreMipLevels.faces[0].numMipLevels;
+ pSurface->cFaces = surfacePreMipLevels.cFaces;
+ pSurface->multiSampleCount = surfacePreMipLevels.multiSampleCount;
+ pSurface->autogenFilter = surfacePreMipLevels.autogenFilter;
+ pSurface->cbBlock = surfacePreMipLevels.cbBlock;
+ }
+ return rc;
+}
+
+
+/*
+ * Load the legacy VMSVGA3DCONTEXT from saved state version VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS (23)
+ * or earlier, i.e. 6.1 or old trunk.
+ *
+ * The saved state incompatibility has been introduced in two revisions:
+ *
+ * - r140506: which makes sure that VMSVGA structures are tightly packed (pragma pack(1)).
+ * This caused all structures which have a member from VMSVGA headers (like VMSVGALIGHTSTATE) to be packed too.
+ * For example the size of aLightData element (VMSVGALIGHTSTATE) is 2 bytes smaller on trunk (118) than on 6.1 (120),
+ * which happens because SVGA3dLightData member offset is 2 on trunk and 4 on 6.1.
+ *
+ * - r141385: new VMSVGA device headers.
+ * SVGA3D_RS_MAX is 99 with new VMSVGA headers, but it was 100 with old headers.
+ * 6.1 always saved 100 entries; trunk before r141385 saved 100 entries; trunk at r141385 saves 99 entries.
+ *
+ * 6.1 saved state version is VGA_SAVEDSTATE_VERSION_VMSVGA_SCREENS (21).
+ * Trunk r141287 introduced VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS (23).
+ *
+ * Both issues has been solved by loading a compatible context structure for saved state
+ * version < VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS.
+ * This means that trunk will not be able to load states created from r140506 to r141385.
+ */
+static int vmsvga3dLoadVMSVGA3DCONTEXT23(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, VMSVGA3DCONTEXT *pContext)
+{
+#pragma pack(1)
+ struct VMSVGA3DCONTEXT23
+ {
+ uint32_t id;
+#ifdef VMSVGA3D_OPENGL
+ uint32_t lastError;
+#endif
+ uint32_t cPixelShaders;
+ uint32_t cVertexShaders;
+ struct
+ {
+ uint32_t u32UpdateFlags;
+ SVGA3dRenderState aRenderState[/*SVGA3D_RS_MAX=*/ 100];
+ SVGA3dTextureState aTextureStates[/*SVGA3D_MAX_TEXTURE_STAGE=*/ 8][/*SVGA3D_TS_MAX=*/ 30];
+ struct
+ {
+ bool fValid;
+ bool pad[3];
+ float matrix[16];
+ } aTransformState[SVGA3D_TRANSFORM_MAX];
+ struct
+ {
+ bool fValid;
+ bool pad[3];
+ SVGA3dMaterial material;
+ } aMaterial[SVGA3D_FACE_MAX];
+ struct
+ {
+ bool fValid;
+ bool pad[3];
+ float plane[4];
+ } aClipPlane[SVGA3D_CLIPPLANE_5];
+ struct
+ {
+ bool fEnabled;
+ bool fValidData;
+ bool pad[2];
+ SVGA3dLightData data;
+ } aLightData[SVGA3D_MAX_LIGHTS];
+ uint32_t aRenderTargets[SVGA3D_RT_MAX];
+ SVGA3dRect RectScissor;
+ SVGA3dRect RectViewPort;
+ SVGA3dZRange zRange;
+ uint32_t shidPixel;
+ uint32_t shidVertex;
+ uint32_t cPixelShaderConst;
+ uint32_t cVertexShaderConst;
+ } state;
+ };
+#pragma pack()
+
+ static SSMFIELD const g_aVMSVGA3DCONTEXT23Fields[] =
+ {
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, id),
+#ifdef VMSVGA3D_OPENGL
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, lastError),
+#endif
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, cPixelShaders),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, cVertexShaders),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.u32UpdateFlags),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aRenderState),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aTextureStates),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aTransformState),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aMaterial),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aClipPlane),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aLightData),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.aRenderTargets),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.RectScissor),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.RectViewPort),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.zRange),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.shidPixel),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.shidVertex),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.cPixelShaderConst),
+ SSMFIELD_ENTRY(VMSVGA3DCONTEXT23, state.cVertexShaderConst),
+ SSMFIELD_ENTRY_TERM()
+ };
+
+ struct VMSVGA3DCONTEXT23 ctx;
+ int rc = pDevIns->pHlpR3->pfnSSMGetStructEx(pSSM, &ctx, sizeof(ctx), 0, g_aVMSVGA3DCONTEXT23Fields, NULL);
+ AssertRCReturn(rc, rc);
+
+ pContext->id = ctx.id;
+#ifdef VMSVGA3D_OPENGL
+ pContext->lastError = (GLenum)ctx.lastError;
+#endif
+
+ pContext->cPixelShaders = ctx.cPixelShaders;
+ pContext->cVertexShaders = ctx.cVertexShaders;
+ pContext->state.u32UpdateFlags = ctx.state.u32UpdateFlags;
+
+ AssertCompile(sizeof(SVGA3dRenderState) == 8);
+ AssertCompile(RT_ELEMENTS(pContext->state.aRenderState) == 99);
+ for (unsigned i = 0; i < RT_ELEMENTS(pContext->state.aRenderState); ++i)
+ pContext->state.aRenderState[i] = ctx.state.aRenderState[i];
+
+ // Skip pContext->state.aTextureStates
+ AssertCompile(sizeof(SVGA3dTextureState) == 12);
+
+ AssertCompile(sizeof(VMSVGATRANSFORMSTATE) == 68);
+ AssertCompile(RT_ELEMENTS(pContext->state.aTransformState) == 15);
+ for (unsigned i = 0; i < RT_ELEMENTS(pContext->state.aTransformState); ++i)
+ {
+ pContext->state.aTransformState[i].fValid = ctx.state.aTransformState[i].fValid;
+ memcpy(pContext->state.aTransformState[i].matrix, ctx.state.aTransformState[i].matrix, sizeof(pContext->state.aTransformState[i].matrix));
+ }
+
+ AssertCompile(sizeof(SVGA3dMaterial) == 68);
+ AssertCompile(RT_ELEMENTS(pContext->state.aMaterial) == 5);
+ for (unsigned i = 0; i < RT_ELEMENTS(pContext->state.aMaterial); ++i)
+ {
+ pContext->state.aMaterial[i].fValid = ctx.state.aMaterial[i].fValid;
+ pContext->state.aMaterial[i].material = ctx.state.aMaterial[i].material;
+ }
+
+ AssertCompile(sizeof(VMSVGACLIPPLANESTATE) == 20);
+ AssertCompile(RT_ELEMENTS(pContext->state.aClipPlane) == (1 << 5));
+ for (unsigned i = 0; i < RT_ELEMENTS(pContext->state.aClipPlane); ++i)
+ {
+ pContext->state.aClipPlane[i].fValid = ctx.state.aClipPlane[i].fValid;
+ memcpy(pContext->state.aClipPlane[i].plane, ctx.state.aClipPlane[i].plane, sizeof(pContext->state.aClipPlane[i].plane));
+ }
+
+ AssertCompile(sizeof(SVGA3dLightData) == 116);
+ AssertCompile(RT_ELEMENTS(pContext->state.aLightData) == 32);
+ for (unsigned i = 0; i < RT_ELEMENTS(pContext->state.aLightData); ++i)
+ {
+ pContext->state.aLightData[i].fEnabled = ctx.state.aLightData[i].fEnabled;
+ pContext->state.aLightData[i].fValidData = ctx.state.aLightData[i].fValidData;
+ pContext->state.aLightData[i].data = ctx.state.aLightData[i].data;
+ }
+
+ AssertCompile(RT_ELEMENTS(pContext->state.aRenderTargets) == 10);
+ memcpy(pContext->state.aRenderTargets, ctx.state.aRenderTargets, SVGA3D_RT_MAX * sizeof(uint32_t));
+
+ AssertCompile(sizeof(SVGA3dRect) == 16);
+ pContext->state.RectScissor = ctx.state.RectScissor;
+ pContext->state.RectViewPort = ctx.state.RectViewPort;
+
+ AssertCompile(sizeof(SVGA3dZRange) == 8);
+ pContext->state.zRange = ctx.state.zRange;
+
+ pContext->state.shidPixel = ctx.state.shidPixel;
+ pContext->state.shidVertex = ctx.state.shidVertex;
+ pContext->state.cPixelShaderConst = ctx.state.cPixelShaderConst;
+ pContext->state.cVertexShaderConst = ctx.state.cVertexShaderConst;
+
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dLoadExec(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+ RT_NOREF(pDevIns, pThis, uPass);
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+ uint32_t cContexts, cSurfaces;
+ LogFlow(("vmsvga3dLoadExec:\n"));
+
+ /* Get the generic 3d state first. */
+ rc = pHlp->pfnSSMGetStructEx(pSSM, pState, sizeof(*pState), 0, g_aVMSVGA3DSTATEFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ cContexts = pState->cContexts;
+ cSurfaces = pState->cSurfaces;
+ pState->cContexts = 0;
+ pState->cSurfaces = 0;
+
+ /* Fetch all active contexts. */
+ for (uint32_t i = 0; i < cContexts; i++)
+ {
+ PVMSVGA3DCONTEXT pContext;
+ uint32_t cid;
+
+ /* Get the context id */
+ rc = pHlp->pfnSSMGetU32(pSSM, &cid);
+ AssertRCReturn(rc, rc);
+
+ if (cid != SVGA3D_INVALID_ID)
+ {
+ uint32_t cPixelShaderConst, cVertexShaderConst, cPixelShaders, cVertexShaders;
+ LogFlow(("vmsvga3dLoadExec: Loading cid=%#x\n", cid));
+
+#ifdef VMSVGA3D_OPENGL
+ if (cid == VMSVGA3D_SHARED_CTX_ID)
+ {
+ i--; /* Not included in cContexts. */
+ pContext = &pState->SharedCtx;
+ if (pContext->id != VMSVGA3D_SHARED_CTX_ID)
+ {
+ /** @todo Separate backend */
+ rc = vmsvga3dContextDefineOgl(pThisCC, VMSVGA3D_SHARED_CTX_ID, VMSVGA3D_DEF_CTX_F_SHARED_CTX);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ else
+#endif
+ {
+ rc = vmsvga3dContextDefine(pThisCC, cid);
+ AssertRCReturn(rc, rc);
+
+ pContext = pState->papContexts[i];
+ }
+ AssertReturn(pContext->id == cid, VERR_INTERNAL_ERROR);
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS)
+ rc = pHlp->pfnSSMGetStructEx(pSSM, pContext, sizeof(*pContext), 0, g_aVMSVGA3DCONTEXTFields, NULL);
+ else
+ rc = vmsvga3dLoadVMSVGA3DCONTEXT23(pDevIns, pSSM, pContext);
+ AssertRCReturn(rc, rc);
+
+ cPixelShaders = pContext->cPixelShaders;
+ cVertexShaders = pContext->cVertexShaders;
+ cPixelShaderConst = pContext->state.cPixelShaderConst;
+ cVertexShaderConst = pContext->state.cVertexShaderConst;
+ pContext->cPixelShaders = 0;
+ pContext->cVertexShaders = 0;
+ pContext->state.cPixelShaderConst = 0;
+ pContext->state.cVertexShaderConst = 0;
+
+ /* Fetch all pixel shaders. */
+ for (uint32_t j = 0; j < cPixelShaders; j++)
+ {
+ VMSVGA3DSHADER shader;
+ uint32_t shid;
+
+ /* Fetch the id first. */
+ rc = pHlp->pfnSSMGetU32(pSSM, &shid);
+ AssertRCReturn(rc, rc);
+
+ if (shid != SVGA3D_INVALID_ID)
+ {
+ uint32_t *pData;
+
+ /* Fetch a copy of the shader struct. */
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &shader, sizeof(shader), 0, g_aVMSVGA3DSHADERFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ pData = (uint32_t *)RTMemAlloc(shader.cbData);
+ AssertReturn(pData, VERR_NO_MEMORY);
+
+ rc = pHlp->pfnSSMGetMem(pSSM, pData, shader.cbData);
+ AssertRCReturn(rc, rc);
+
+ rc = vmsvga3dShaderDefine(pThisCC, cid, shid, shader.type, shader.cbData, pData);
+ AssertRCReturn(rc, rc);
+
+ RTMemFree(pData);
+ }
+ }
+
+ /* Fetch all vertex shaders. */
+ for (uint32_t j = 0; j < cVertexShaders; j++)
+ {
+ VMSVGA3DSHADER shader;
+ uint32_t shid;
+
+ /* Fetch the id first. */
+ rc = pHlp->pfnSSMGetU32(pSSM, &shid);
+ AssertRCReturn(rc, rc);
+
+ if (shid != SVGA3D_INVALID_ID)
+ {
+ uint32_t *pData;
+
+ /* Fetch a copy of the shader struct. */
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &shader, sizeof(shader), 0, g_aVMSVGA3DSHADERFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ pData = (uint32_t *)RTMemAlloc(shader.cbData);
+ AssertReturn(pData, VERR_NO_MEMORY);
+
+ rc = pHlp->pfnSSMGetMem(pSSM, pData, shader.cbData);
+ AssertRCReturn(rc, rc);
+
+ rc = vmsvga3dShaderDefine(pThisCC, cid, shid, shader.type, shader.cbData, pData);
+ AssertRCReturn(rc, rc);
+
+ RTMemFree(pData);
+ }
+ }
+
+ /* Fetch pixel shader constants. */
+ for (uint32_t j = 0; j < cPixelShaderConst; j++)
+ {
+ VMSVGASHADERCONST ShaderConst;
+
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &ShaderConst, sizeof(ShaderConst), 0, g_aVMSVGASHADERCONSTFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ if (ShaderConst.fValid)
+ {
+ rc = vmsvga3dShaderSetConst(pThisCC, cid, j, SVGA3D_SHADERTYPE_PS, ShaderConst.ctype, 1, ShaderConst.value);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* Fetch vertex shader constants. */
+ for (uint32_t j = 0; j < cVertexShaderConst; j++)
+ {
+ VMSVGASHADERCONST ShaderConst;
+
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &ShaderConst, sizeof(ShaderConst), 0, g_aVMSVGASHADERCONSTFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ if (ShaderConst.fValid)
+ {
+ rc = vmsvga3dShaderSetConst(pThisCC, cid, j, SVGA3D_SHADERTYPE_VS, ShaderConst.ctype, 1, ShaderConst.value);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES)
+ {
+ /* Load texture stage and samplers state. */
+
+ /* Number of stages/samplers. */
+ uint32_t cStages;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cStages);
+ AssertRCReturn(rc, rc);
+
+ /* Number of states. */
+ uint32_t cTextureStates;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cTextureStates);
+ AssertRCReturn(rc, rc);
+
+ for (uint32_t iStage = 0; iStage < cStages; ++iStage)
+ {
+ for (uint32_t j = 0; j < cTextureStates; ++j)
+ {
+ SVGA3dTextureState textureState;
+ pHlp->pfnSSMGetU32(pSSM, &textureState.stage);
+ uint32_t u32Name;
+ pHlp->pfnSSMGetU32(pSSM, &u32Name);
+ textureState.name = (SVGA3dTextureStateName)u32Name;
+ rc = pHlp->pfnSSMGetU32(pSSM, &textureState.value);
+ AssertRCReturn(rc, rc);
+
+ if ( iStage < RT_ELEMENTS(pContext->state.aTextureStates)
+ && j < RT_ELEMENTS(pContext->state.aTextureStates[0]))
+ {
+ pContext->state.aTextureStates[iStage][j] = textureState;
+ }
+ }
+ }
+ }
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA)
+ {
+ VMSVGA3DQUERY query;
+ RT_ZERO(query);
+
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &query, sizeof(query), 0, g_aVMSVGA3DQUERYFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ switch (query.enmQueryState)
+ {
+ case VMSVGA3DQUERYSTATE_BUILDING:
+ /* Start collecting data. */
+ vmsvga3dQueryBegin(pThisCC, cid, SVGA3D_QUERYTYPE_OCCLUSION);
+ /* Partial result. */
+ pContext->occlusion.u32QueryResult = query.u32QueryResult;
+ break;
+
+ case VMSVGA3DQUERYSTATE_ISSUED:
+ /* Guest ended the query but did not read result. Result is restored. */
+ query.enmQueryState = VMSVGA3DQUERYSTATE_SIGNALED;
+ RT_FALL_THRU();
+ case VMSVGA3DQUERYSTATE_SIGNALED:
+ /* Create the query object. */
+ vmsvga3dQueryCreate(pThisCC, cid, SVGA3D_QUERYTYPE_OCCLUSION);
+
+ /* Update result and state. */
+ pContext->occlusion.enmQueryState = query.enmQueryState;
+ pContext->occlusion.u32QueryResult = query.u32QueryResult;
+ break;
+
+ default:
+ AssertFailed();
+ RT_FALL_THRU();
+ case VMSVGA3DQUERYSTATE_NULL:
+ RT_ZERO(pContext->occlusion);
+ break;
+ }
+ }
+ }
+ }
+
+#ifdef VMSVGA3D_OPENGL
+ /* Make the shared context the current one. */
+ if (pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, &pState->SharedCtx);
+#endif
+
+ /* Fetch all surfaces. */
+ for (uint32_t i = 0; i < cSurfaces; i++)
+ {
+ uint32_t sid;
+
+ /* Fetch the id first. */
+ rc = pHlp->pfnSSMGetU32(pSSM, &sid);
+ AssertRCReturn(rc, rc);
+
+ if (sid != SVGA3D_INVALID_ID)
+ {
+ VMSVGA3DSURFACE surface;
+ LogFlow(("vmsvga3dLoadExec: Loading sid=%#x\n", sid));
+
+ /* Fetch the surface structure first. */
+ if (RT_LIKELY(uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS))
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &surface, sizeof(surface), 0, g_aVMSVGA3DSURFACEFields, NULL);
+ else
+ rc = vmsvga3dLoadVMSVGA3DSURFACEPreMipLevels(pDevIns, pSSM, &surface);
+ AssertRCReturn(rc, rc);
+
+ {
+ uint32_t cMipLevels = surface.cLevels * surface.cFaces;
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = (PVMSVGA3DMIPMAPLEVEL)RTMemAlloc(cMipLevels * sizeof(VMSVGA3DMIPMAPLEVEL));
+ AssertReturn(pMipmapLevel, VERR_NO_MEMORY);
+ SVGA3dSize *pMipmapLevelSize = (SVGA3dSize *)RTMemAlloc(cMipLevels * sizeof(SVGA3dSize));
+ AssertReturn(pMipmapLevelSize, VERR_NO_MEMORY);
+
+ /* Load the mip map level info. */
+ for (uint32_t face=0; face < surface.cFaces; face++)
+ {
+ for (uint32_t j = 0; j < surface.cLevels; j++)
+ {
+ uint32_t idx = j + face * surface.cLevels;
+ /* Load the mip map level struct. */
+ rc = pHlp->pfnSSMGetStructEx(pSSM, &pMipmapLevel[idx], sizeof(pMipmapLevel[idx]), 0,
+ g_aVMSVGA3DMIPMAPLEVELFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ pMipmapLevelSize[idx] = pMipmapLevel[idx].mipmapSize;
+ }
+ }
+
+ rc = vmsvga3dSurfaceDefine(pThisCC, sid, surface.f.surfaceFlags, surface.format, surface.multiSampleCount,
+ surface.autogenFilter, surface.cLevels, &pMipmapLevelSize[0], /* arraySize = */ 0, /* fAllocMipLevels = */ true);
+ AssertRCReturn(rc, rc);
+
+ RTMemFree(pMipmapLevelSize);
+ RTMemFree(pMipmapLevel);
+ }
+
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ Assert(pSurface->id == sid);
+
+ pSurface->fDirty = false;
+
+ /* Load the mip map level data. */
+ for (uint32_t j = 0; j < pSurface->cLevels * pSurface->cFaces; j++)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[j];
+ bool fDataPresent = false;
+
+ /* vmsvga3dSurfaceDefine already allocated the surface data buffer. */
+ Assert(pMipmapLevel->cbSurface);
+ AssertReturn(pMipmapLevel->pSurfaceData, VERR_INTERNAL_ERROR);
+
+ /* Fetch the data present boolean first. */
+ rc = pHlp->pfnSSMGetBool(pSSM, &fDataPresent);
+ AssertRCReturn(rc, rc);
+
+ Log(("Surface sid=%u: load mipmap level %d with %x bytes data (present=%d).\n", sid, j, pMipmapLevel->cbSurface, fDataPresent));
+
+ if (fDataPresent)
+ {
+ rc = pHlp->pfnSSMGetMem(pSSM, pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+ pMipmapLevel->fDirty = true;
+ pSurface->fDirty = true;
+ }
+ else
+ {
+ pMipmapLevel->fDirty = false;
+ }
+ }
+ }
+ }
+
+#ifdef VMSVGA3D_OPENGL
+ /* Reinitialize the shared context. */
+ LogFlow(("vmsvga3dLoadExec: pState->SharedCtx.id=%#x\n", pState->SharedCtx.id));
+ if (pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ {
+ rc = vmsvga3dLoadReinitContext(pThisCC, &pState->SharedCtx);
+ AssertRCReturn(rc, rc);
+ }
+#endif
+
+ /* Reinitialize all active contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[i];
+ if (pContext->id != SVGA3D_INVALID_ID)
+ {
+ rc = vmsvga3dLoadReinitContext(pThisCC, pContext);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ LogFlow(("vmsvga3dLoadExec: return success\n"));
+ return VINF_SUCCESS;
+}
+
+
+static int vmsvga3dSaveContext(PCPDMDEVHLPR3 pHlp, PVGASTATECC pThisCC, PSSMHANDLE pSSM, PVMSVGA3DCONTEXT pContext)
+{
+ uint32_t cid = pContext->id;
+
+ /* Save the id first. */
+ int rc = pHlp->pfnSSMPutU32(pSSM, cid);
+ AssertRCReturn(rc, rc);
+
+ if (cid != SVGA3D_INVALID_ID)
+ {
+ /* Save a copy of the context structure first. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pContext, sizeof(*pContext), 0, g_aVMSVGA3DCONTEXTFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ /* Save all pixel shaders. */
+ for (uint32_t j = 0; j < pContext->cPixelShaders; j++)
+ {
+ PVMSVGA3DSHADER pShader = &pContext->paPixelShader[j];
+
+ /* Save the id first. */
+ rc = pHlp->pfnSSMPutU32(pSSM, pShader->id);
+ AssertRCReturn(rc, rc);
+
+ if (pShader->id != SVGA3D_INVALID_ID)
+ {
+ uint32_t cbData = pShader->cbData;
+
+ /* Save a copy of the shader struct. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pShader, sizeof(*pShader), 0, g_aVMSVGA3DSHADERFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ Log(("Save pixelshader shid=%d with %x bytes code.\n", pShader->id, cbData));
+ rc = pHlp->pfnSSMPutMem(pSSM, pShader->pShaderProgram, cbData);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* Save all vertex shaders. */
+ for (uint32_t j = 0; j < pContext->cVertexShaders; j++)
+ {
+ PVMSVGA3DSHADER pShader = &pContext->paVertexShader[j];
+
+ /* Save the id first. */
+ rc = pHlp->pfnSSMPutU32(pSSM, pShader->id);
+ AssertRCReturn(rc, rc);
+
+ if (pShader->id != SVGA3D_INVALID_ID)
+ {
+ uint32_t cbData = pShader->cbData;
+
+ /* Save a copy of the shader struct. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pShader, sizeof(*pShader), 0, g_aVMSVGA3DSHADERFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ Log(("Save vertex shader shid=%d with %x bytes code.\n", pShader->id, cbData));
+ /* Fetch the shader code and save it. */
+ rc = pHlp->pfnSSMPutMem(pSSM, pShader->pShaderProgram, cbData);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* Save pixel shader constants. */
+ for (uint32_t j = 0; j < pContext->state.cPixelShaderConst; j++)
+ {
+ rc = pHlp->pfnSSMPutStructEx(pSSM, &pContext->state.paPixelShaderConst[j], sizeof(pContext->state.paPixelShaderConst[j]), 0, g_aVMSVGASHADERCONSTFields, NULL);
+ AssertRCReturn(rc, rc);
+ }
+
+ /* Save vertex shader constants. */
+ for (uint32_t j = 0; j < pContext->state.cVertexShaderConst; j++)
+ {
+ rc = pHlp->pfnSSMPutStructEx(pSSM, &pContext->state.paVertexShaderConst[j], sizeof(pContext->state.paVertexShaderConst[j]), 0, g_aVMSVGASHADERCONSTFields, NULL);
+ AssertRCReturn(rc, rc);
+ }
+
+ /* Save texture stage and samplers state. */
+
+ /* Number of stages/samplers. */
+ rc = pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(pContext->state.aTextureStates));
+ AssertRCReturn(rc, rc);
+
+ /* Number of texture states. */
+ rc = pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(pContext->state.aTextureStates[0]));
+ AssertRCReturn(rc, rc);
+
+ for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); ++iStage)
+ {
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); ++j)
+ {
+ SVGA3dTextureState *pTextureState = &pContext->state.aTextureStates[iStage][j];
+
+ pHlp->pfnSSMPutU32(pSSM, pTextureState->stage);
+ pHlp->pfnSSMPutU32(pSSM, pTextureState->name);
+ rc = pHlp->pfnSSMPutU32(pSSM, pTextureState->value);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* Occlusion query. */
+ if (!VMSVGA3DQUERY_EXISTS(&pContext->occlusion))
+ {
+ pContext->occlusion.enmQueryState = VMSVGA3DQUERYSTATE_NULL;
+ }
+
+ /* Save the current query state, because code below can change it. */
+ VMSVGA3DQUERYSTATE const enmQueryState = pContext->occlusion.enmQueryState;
+ switch (enmQueryState)
+ {
+ case VMSVGA3DQUERYSTATE_BUILDING:
+ /* Stop collecting data. Fetch partial result. Save result. */
+ vmsvga3dQueryEnd(pThisCC, cid, SVGA3D_QUERYTYPE_OCCLUSION);
+ RT_FALL_THRU();
+ case VMSVGA3DQUERYSTATE_ISSUED:
+ /* Fetch result. Save result. */
+ pContext->occlusion.u32QueryResult = 0;
+ vmsvga3dQueryWait(pThisCC, cid, SVGA3D_QUERYTYPE_OCCLUSION, NULL, NULL);
+ RT_FALL_THRU();
+ case VMSVGA3DQUERYSTATE_SIGNALED:
+ /* Save result. Nothing to do here. */
+ break;
+
+ default:
+ AssertFailed();
+ RT_FALL_THRU();
+ case VMSVGA3DQUERYSTATE_NULL:
+ pContext->occlusion.enmQueryState = VMSVGA3DQUERYSTATE_NULL;
+ pContext->occlusion.u32QueryResult = 0;
+ break;
+ }
+
+ /* Restore the current actual state. */
+ pContext->occlusion.enmQueryState = enmQueryState;
+
+ rc = pHlp->pfnSSMPutStructEx(pSSM, &pContext->occlusion, sizeof(pContext->occlusion), 0, g_aVMSVGA3DQUERYFields, NULL);
+ AssertRCReturn(rc, rc);
+ }
+
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dSaveExec(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+
+ /* Save a copy of the generic 3d state first. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pState, sizeof(*pState), 0, g_aVMSVGA3DSTATEFields, NULL);
+ AssertRCReturn(rc, rc);
+
+#ifdef VMSVGA3D_OPENGL
+ /* Save the shared context. */
+ if (pState->SharedCtx.id == VMSVGA3D_SHARED_CTX_ID)
+ {
+ rc = vmsvga3dSaveContext(pHlp, pThisCC, pSSM, &pState->SharedCtx);
+ AssertRCReturn(rc, rc);
+ }
+#endif
+
+ /* Save all active contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ rc = vmsvga3dSaveContext(pHlp, pThisCC, pSSM, pState->papContexts[i]);
+ AssertRCReturn(rc, rc);
+ }
+
+ /* Save all active surfaces. */
+ for (uint32_t sid = 0; sid < pState->cSurfaces; sid++)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+
+ /* Save the id first. */
+ rc = pHlp->pfnSSMPutU32(pSSM, pSurface->id);
+ AssertRCReturn(rc, rc);
+
+ if (pSurface->id != SVGA3D_INVALID_ID)
+ {
+ /* Save a copy of the surface structure first. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pSurface, sizeof(*pSurface), 0, g_aVMSVGA3DSURFACEFields, NULL);
+ AssertRCReturn(rc, rc);
+
+ /* Save the mip map level info. */
+ for (uint32_t face=0; face < pSurface->cFaces; face++)
+ {
+ for (uint32_t i = 0; i < pSurface->cLevels; i++)
+ {
+ uint32_t idx = i + face * pSurface->cLevels;
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[idx];
+
+ /* Save a copy of the mip map level struct. */
+ rc = pHlp->pfnSSMPutStructEx(pSSM, pMipmapLevel, sizeof(*pMipmapLevel), 0, g_aVMSVGA3DMIPMAPLEVELFields, NULL);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* Save the mip map level data. */
+ for (uint32_t face=0; face < pSurface->cFaces; face++)
+ {
+ for (uint32_t i = 0; i < pSurface->cLevels; i++)
+ {
+ uint32_t idx = i + face * pSurface->cLevels;
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[idx];
+
+ Log(("Surface sid=%u: save mipmap level %d with %x bytes data.\n", sid, i, pMipmapLevel->cbSurface));
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ if (pMipmapLevel->fDirty)
+ {
+ /* Data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, true);
+ AssertRCReturn(rc, rc);
+
+ Assert(pMipmapLevel->cbSurface);
+ rc = pHlp->pfnSSMPutMem(pSSM, pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ /* No data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ else if (vmsvga3dIsLegacyBackend(pThisCC))
+ {
+#ifdef VMSVGA3D_DIRECT3D
+ void *pData;
+ bool fRenderTargetTexture = false;
+ bool fTexture = false;
+ bool fSkipSave = false;
+ HRESULT hr;
+
+ Assert(pMipmapLevel->cbSurface);
+ pData = RTMemAllocZ(pMipmapLevel->cbSurface);
+ AssertReturn(pData, VERR_NO_MEMORY);
+
+ switch (pSurface->enmD3DResType)
+ {
+ case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+ case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+ AssertFailed(); /// @todo
+ fSkipSave = true;
+ break;
+ case VMSVGA3D_D3DRESTYPE_SURFACE:
+ case VMSVGA3D_D3DRESTYPE_TEXTURE:
+ {
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
+ {
+ /** @todo unable to easily fetch depth surface data in d3d 9 */
+ fSkipSave = true;
+ break;
+ }
+
+ fTexture = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE);
+ fRenderTargetTexture = fTexture && (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET);
+
+ D3DLOCKED_RECT LockedRect;
+
+ if (fTexture)
+ {
+ if (pSurface->bounce.pTexture)
+ {
+ if ( !pSurface->fDirty
+ && fRenderTargetTexture
+ && i == 0 /* only the first time */)
+ {
+ IDirect3DSurface9 *pSrc, *pDest;
+
+ /** @todo stricter checks for associated context */
+ uint32_t cid = pSurface->idAssociatedContext;
+
+ PVMSVGA3DCONTEXT pContext;
+ rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ hr = pSurface->bounce.pTexture->GetSurfaceLevel(i, &pDest);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pSurface->u.pTexture->GetSurfaceLevel(i, &pSrc);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pSrc->Release();
+ pDest->Release();
+ }
+
+ hr = pSurface->bounce.pTexture->LockRect(i, /* texture level */
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ }
+ else
+ hr = pSurface->u.pTexture->LockRect(i, /* texture level */
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ }
+ else
+ hr = pSurface->u.pSurface->LockRect(&LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Copy the data one line at a time in case the internal pitch is different. */
+ for (uint32_t j = 0; j < pMipmapLevel->cBlocksY; ++j)
+ {
+ uint8_t *pu8Dst = (uint8_t *)pData + j * pMipmapLevel->cbSurfacePitch;
+ const uint8_t *pu8Src = (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch;
+ memcpy(pu8Dst, pu8Src, pMipmapLevel->cbSurfacePitch);
+ }
+
+ if (fTexture)
+ {
+ if (pSurface->bounce.pTexture)
+ {
+ hr = pSurface->bounce.pTexture->UnlockRect(i);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ hr = pSurface->u.pTexture->UnlockRect(i);
+ }
+ else
+ hr = pSurface->u.pSurface->UnlockRect();
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSaveExec: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+ }
+
+ case VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER:
+ case VMSVGA3D_D3DRESTYPE_INDEX_BUFFER:
+ {
+ /* Current type of the buffer. */
+ const bool fVertex = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER);
+
+ uint8_t *pD3DData;
+
+ if (fVertex)
+ hr = pSurface->u.pVertexBuffer->Lock(0, 0, (void **)&pD3DData, D3DLOCK_READONLY);
+ else
+ hr = pSurface->u.pIndexBuffer->Lock(0, 0, (void **)&pD3DData, D3DLOCK_READONLY);
+ AssertMsg(hr == D3D_OK, ("vmsvga3dSaveExec: Lock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+
+ memcpy(pData, pD3DData, pMipmapLevel->cbSurface);
+
+ if (fVertex)
+ hr = pSurface->u.pVertexBuffer->Unlock();
+ else
+ hr = pSurface->u.pIndexBuffer->Unlock();
+ AssertMsg(hr == D3D_OK, ("vmsvga3dSaveExec: Unlock %s failed with %x\n", (fVertex) ? "vertex" : "index", hr));
+ break;
+ }
+
+ default:
+ AssertFailed();
+ break;
+ }
+
+ if (!fSkipSave)
+ {
+ /* Data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, true);
+ AssertRCReturn(rc, rc);
+
+ /* And write the surface data. */
+ rc = pHlp->pfnSSMPutMem(pSSM, pData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ /* No data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertRCReturn(rc, rc);
+ }
+
+ RTMemFree(pData);
+
+#elif defined(VMSVGA3D_OPENGL)
+ void *pData = NULL;
+
+ PVMSVGA3DCONTEXT pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+
+ Assert(pMipmapLevel->cbSurface);
+
+ switch (pSurface->enmOGLResType)
+ {
+ default:
+ AssertFailed();
+ RT_FALL_THRU();
+ case VMSVGA3D_OGLRESTYPE_RENDERBUFFER:
+ /** @todo fetch data from the renderbuffer. Not used currently. */
+ /* No data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertRCReturn(rc, rc);
+ break;
+
+ case VMSVGA3D_OGLRESTYPE_TEXTURE:
+ {
+ GLint activeTexture;
+
+ pData = RTMemAllocZ(pMipmapLevel->cbSurface);
+ AssertReturn(pData, VERR_NO_MEMORY);
+
+ glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ glBindTexture(GL_TEXTURE_2D, pSurface->oglId.texture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ /* Set row length and alignment of the output data. */
+ VMSVGAPACKPARAMS SavedParams;
+ vmsvga3dOglSetPackParams(pState, pContext, pSurface, &SavedParams);
+
+ glGetTexImage(GL_TEXTURE_2D,
+ i,
+ pSurface->formatGL,
+ pSurface->typeGL,
+ pData);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+
+ vmsvga3dOglRestorePackParams(pState, pContext, pSurface, &SavedParams);
+
+ /* Data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, true);
+ AssertRCReturn(rc, rc);
+
+ /* And write the surface data. */
+ rc = pHlp->pfnSSMPutMem(pSSM, pData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+
+ /* Restore the old active texture. */
+ glBindTexture(GL_TEXTURE_2D, activeTexture);
+ VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
+ break;
+ }
+
+ case VMSVGA3D_OGLRESTYPE_BUFFER:
+ {
+ uint8_t *pBufferData;
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, pSurface->oglId.buffer);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pBufferData = (uint8_t *)pState->ext.glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+ Assert(pBufferData);
+
+ /* Data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, true);
+ AssertRCReturn(rc, rc);
+
+ /* And write the surface data. */
+ rc = pHlp->pfnSSMPutMem(pSSM, pBufferData, pMipmapLevel->cbSurface);
+ AssertRCReturn(rc, rc);
+
+ pState->ext.glUnmapBuffer(GL_ARRAY_BUFFER);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ pState->ext.glBindBuffer(GL_ARRAY_BUFFER, 0);
+ VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
+
+ }
+ }
+ if (pData)
+ RTMemFree(pData);
+#else
+#error "Unexpected 3d backend"
+#endif
+ }
+ else
+ {
+ /** @todo DX backend. */
+ Assert(!vmsvga3dIsLegacyBackend(pThisCC));
+
+ /* No data follows */
+ rc = pHlp->pfnSSMPutBool(pSSM, false);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ }
+ }
+ }
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dSaveShaderConst(PVMSVGA3DCONTEXT pContext, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype,
+ uint32_t val1, uint32_t val2, uint32_t val3, uint32_t val4)
+{
+ /* Choose a sane upper limit. */
+ AssertReturn(reg < _32K, VERR_INVALID_PARAMETER);
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ if (pContext->state.cVertexShaderConst <= reg)
+ {
+ pContext->state.paVertexShaderConst = (PVMSVGASHADERCONST)RTMemRealloc(pContext->state.paVertexShaderConst, sizeof(VMSVGASHADERCONST) * (reg + 1));
+ AssertReturn(pContext->state.paVertexShaderConst, VERR_NO_MEMORY);
+ for (uint32_t i = pContext->state.cVertexShaderConst; i < reg + 1; i++)
+ pContext->state.paVertexShaderConst[i].fValid = false;
+ pContext->state.cVertexShaderConst = reg + 1;
+ }
+
+ pContext->state.paVertexShaderConst[reg].fValid = true;
+ pContext->state.paVertexShaderConst[reg].ctype = ctype;
+ pContext->state.paVertexShaderConst[reg].value[0] = val1;
+ pContext->state.paVertexShaderConst[reg].value[1] = val2;
+ pContext->state.paVertexShaderConst[reg].value[2] = val3;
+ pContext->state.paVertexShaderConst[reg].value[3] = val4;
+ }
+ else
+ {
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if (pContext->state.cPixelShaderConst <= reg)
+ {
+ pContext->state.paPixelShaderConst = (PVMSVGASHADERCONST)RTMemRealloc(pContext->state.paPixelShaderConst, sizeof(VMSVGASHADERCONST) * (reg + 1));
+ AssertReturn(pContext->state.paPixelShaderConst, VERR_NO_MEMORY);
+ for (uint32_t i = pContext->state.cPixelShaderConst; i < reg + 1; i++)
+ pContext->state.paPixelShaderConst[i].fValid = false;
+ pContext->state.cPixelShaderConst = reg + 1;
+ }
+
+ pContext->state.paPixelShaderConst[reg].fValid = true;
+ pContext->state.paPixelShaderConst[reg].ctype = ctype;
+ pContext->state.paPixelShaderConst[reg].value[0] = val1;
+ pContext->state.paPixelShaderConst[reg].value[1] = val2;
+ pContext->state.paPixelShaderConst[reg].value[2] = val3;
+ pContext->state.paPixelShaderConst[reg].value[3] = val4;
+ }
+
+ return VINF_SUCCESS;
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
new file mode 100644
index 00000000..6d66b5d4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-shared.cpp
@@ -0,0 +1,1740 @@
+/* $Id: DevVGA-SVGA3d-shared.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <iprt/errcore.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#include <iprt/mem.h>
+#include <iprt/avl.h>
+
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#define VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+#include "DevVGA-SVGA3d-internal.h"
+
+
+#ifdef RT_OS_WINDOWS
+# define VMSVGA3D_WNDCLASSNAME L"VMSVGA3DWNDCLS"
+
+static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+
+/**
+ * Send a message to the async window thread and wait for a reply
+ *
+ * @returns VBox status code.
+ * @param pWindowThread Thread handle
+ * @param WndRequestSem Semaphore handle for waiting
+ * @param msg Message id
+ * @param wParam First parameter
+ * @param lParam Second parameter
+ */
+int vmsvga3dSendThreadMessage(RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ int rc;
+ BOOL ret;
+
+ ret = PostThreadMessage(RTThreadGetNative(pWindowThread), msg, wParam, lParam);
+ AssertMsgReturn(ret, ("PostThreadMessage %x failed with %d\n", RTThreadGetNative(pWindowThread), GetLastError()), VERR_INTERNAL_ERROR);
+
+ rc = RTSemEventWait(WndRequestSem, RT_INDEFINITE_WAIT);
+ Assert(RT_SUCCESS(rc));
+
+ return rc;
+}
+
+/**
+ * The async window handling thread
+ *
+ * @returns VBox status code.
+ * @param hThreadSelf This thread.
+ * @param pvUser Request sempahore handle.
+ */
+DECLCALLBACK(int) vmsvga3dWindowThread(RTTHREAD hThreadSelf, void *pvUser)
+{
+ RT_NOREF(hThreadSelf);
+ RTSEMEVENT WndRequestSem = (RTSEMEVENT)pvUser;
+ WNDCLASSEXW wc;
+
+ /* Register our own window class. */
+ wc.cbSize = sizeof(wc);
+ wc.style = CS_OWNDC;
+ wc.lpfnWndProc = (WNDPROC)vmsvga3dWndProc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = GetModuleHandle("VBoxDD.dll"); /** @todo hardcoded name.. */
+ wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
+ wc.hCursor = LoadCursor(NULL, IDC_ARROW);
+ wc.hbrBackground = NULL;
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = VMSVGA3D_WNDCLASSNAME;
+ wc.hIconSm = NULL;
+
+ if (!RegisterClassExW(&wc))
+ {
+ Log(("RegisterClass failed with %x\n", GetLastError()));
+ return VERR_INTERNAL_ERROR;
+ }
+
+ LogFlow(("vmsvga3dWindowThread: started loop\n"));
+ while (true)
+ {
+ MSG msg;
+ if (GetMessage(&msg, 0, 0, 0))
+ {
+ if (msg.message == WM_VMSVGA3D_EXIT)
+ {
+ /* Signal to the caller that we're done. */
+ RTSemEventSignal(WndRequestSem);
+ break;
+ }
+
+ if (msg.message == WM_VMSVGA3D_WAKEUP)
+ {
+ continue;
+ }
+
+ if (msg.message == WM_VMSVGA3D_CREATEWINDOW)
+ {
+ /* Create a context window with minimal 4x4 size. We will never use the swapchain
+ * to present the rendered image. Rendered images from the guest will be copied to
+ * the VMSVGA SCREEN object, which can be either an offscreen render target or
+ * system memory in the guest VRAM. */
+ HWND *phWnd = (HWND *)msg.wParam;
+ HWND hWnd;
+ *phWnd = hWnd = CreateWindowExW(WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY,
+ VMSVGA3D_WNDCLASSNAME,
+ NULL /*pwszName*/,
+ WS_DISABLED,
+ 0 /*x*/,
+ 0 /*y*/,
+ 4 /*cx*/,
+ 4 /*cy*/,
+ HWND_DESKTOP /*hwndParent*/,
+ NULL /*hMenu*/,
+ (HINSTANCE)msg.lParam /*hInstance*/,
+ NULL /*WM_CREATE param*/);
+ AssertMsg(hWnd, ("CreateWindowEx %ls, WS_EX_NOACTIVATE | WS_EX_NOPARENTNOTIFY, WS_DISABLED, (0,0)(4,4), HWND_DESKTOP hInstance=%p -> error=%x\n",
+ VMSVGA3D_WNDCLASSNAME, msg.lParam, GetLastError()));
+
+#ifdef VBOX_STRICT
+ /* Must have a non-zero client rectangle! */
+ RECT ClientRect;
+ GetClientRect(hWnd, &ClientRect);
+ Assert(ClientRect.right > ClientRect.left);
+ Assert(ClientRect.bottom > ClientRect.top);
+#endif
+
+ /* Signal to the caller that we're done. */
+ RTSemEventSignal(WndRequestSem);
+ continue;
+ }
+
+ if (msg.message == WM_VMSVGA3D_DESTROYWINDOW)
+ {
+ BOOL fRc = DestroyWindow((HWND)msg.wParam);
+ Assert(fRc); NOREF(fRc);
+
+ /* Signal to the caller that we're done. */
+ RTSemEventSignal(WndRequestSem);
+ continue;
+ }
+
+#if 0 /* in case CreateDeviceEx fails again and we want to eliminat wrong-thread. */
+ if (msg.message == WM_VMSVGA3D_CREATE_DEVICE)
+ {
+ VMSVGA3DCREATEDEVICEPARAMS *pParams = (VMSVGA3DCREATEDEVICEPARAMS *)msg.lParam;
+ pParams->hrc = pParams->pState->pD3D9->CreateDeviceEx(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ pParams->pContext->hwnd,
+ D3DCREATE_MULTITHREADED | D3DCREATE_MIXED_VERTEXPROCESSING, //D3DCREATE_HARDWARE_VERTEXPROCESSING,
+ pParams->pPresParams,
+ NULL,
+ &pParams->pContext->pDevice);
+ AssertMsg(pParams->hrc == D3D_OK, ("WM_VMSVGA3D_CREATE_DEVICE: CreateDevice failed with %x\n", pParams->hrc));
+
+ RTSemEventSignal(WndRequestSem);
+ continue;
+ }
+#endif
+
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ else
+ {
+ Log(("GetMessage failed with %x\n", GetLastError()));
+ break;
+ }
+ }
+
+ Log(("vmsvga3dWindowThread: end loop\n"));
+ return VINF_SUCCESS;
+}
+
+/* Window procedure for our top level window overlays. */
+static LONG WINAPI vmsvga3dWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch (uMsg)
+ {
+ case WM_CREATE:
+ {
+ /* Ditch the title bar (caption) to avoid having a zero height
+ client area as that makes IDirect3D9Ex::CreateDeviceEx fail.
+ For the style adjustment to take place, we must apply the
+ SWP_FRAMECHANGED thru SetWindowPos. */
+ LONG flStyle = GetWindowLongW(hwnd, GWL_STYLE);
+ flStyle &= ~(WS_CAPTION /* both titlebar and border. Some paranoia: */ | WS_THICKFRAME | WS_SYSMENU);
+ SetWindowLong(hwnd, GWL_STYLE, flStyle);
+ SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
+ SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
+ break;
+ }
+
+ case WM_CLOSE:
+ Log7(("vmsvga3dWndProc(%p): WM_CLOSE\n", hwnd));
+ break;
+
+ case WM_DESTROY:
+ Log7(("vmsvga3dWndProc(%p): WM_DESTROY\n", hwnd));
+ break;
+
+ case WM_NCHITTEST:
+ Log7(("vmsvga3dWndProc(%p): WM_NCHITTEST\n", hwnd));
+ return HTNOWHERE;
+
+# if 0 /* flicker experiment, no help here. */
+ case WM_PAINT:
+ Log7(("vmsvga3dWndProc(%p): WM_PAINT %p %p\n", hwnd, wParam, lParam));
+ ValidateRect(hwnd, NULL);
+ return 0;
+ case WM_ERASEBKGND:
+ Log7(("vmsvga3dWndProc(%p): WM_ERASEBKGND %p %p\n", hwnd, wParam, lParam));
+ return TRUE;
+ case WM_NCPAINT:
+ Log7(("vmsvga3dWndProc(%p): WM_NCPAINT %p %p\n", hwnd, wParam, lParam));
+ break;
+ case WM_WINDOWPOSCHANGING:
+ {
+ PWINDOWPOS pPos = (PWINDOWPOS)lParam;
+ Log7(("vmsvga3dWndProc(%p): WM_WINDOWPOSCHANGING %p %p pos=(%d,%d) size=(%d,%d) flags=%#x\n",
+ hwnd, wParam, lParam, pPos->x, pPos->y, pPos->cx, pPos->cy, pPos->flags));
+ break;
+ }
+ case WM_WINDOWPOSCHANGED:
+ {
+ PWINDOWPOS pPos = (PWINDOWPOS)lParam;
+ Log7(("vmsvga3dWndProc(%p): WM_WINDOWPOSCHANGED %p %p pos=(%d,%d) size=(%d,%d) flags=%#x\n",
+ hwnd, wParam, lParam, pPos->x, pPos->y, pPos->cx, pPos->cy, pPos->flags));
+ break;
+ }
+ case WM_MOVE:
+ Log7(("vmsvga3dWndProc(%p): WM_MOVE %p %p\n", hwnd, wParam, lParam));
+ break;
+ case WM_SIZE:
+ Log7(("vmsvga3dWndProc(%p): WM_SIZE %p %p\n", hwnd, wParam, lParam));
+ break;
+
+ default:
+ Log7(("vmsvga3dWndProc(%p): %#x %p %p\n", hwnd, uMsg, wParam, lParam));
+# endif
+ }
+ return DefWindowProc(hwnd, uMsg, wParam, lParam);
+}
+
+int vmsvga3dContextWindowCreate(HINSTANCE hInstance, RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, HWND *pHwnd)
+{
+ return vmsvga3dSendThreadMessage(pWindowThread, WndRequestSem, WM_VMSVGA3D_CREATEWINDOW, (WPARAM)pHwnd, (LPARAM)hInstance);
+}
+
+#endif /* RT_OS_WINDOWS */
+
+
+/**
+ * Calculate the size and dimensions of one block.
+ */
+uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format,
+ uint32_t *pcxBlock,
+ uint32_t *pcyBlock)
+{
+ uint32_t u32 = 0;
+ if (!pcxBlock) pcxBlock = &u32;
+ if (!pcyBlock) pcyBlock = &u32;
+
+ switch (format)
+ {
+ case SVGA3D_X8R8G8B8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_A8R8G8B8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R5G6B5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_X1R5G5B5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_A1R5G5B5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_A4R4G4B4:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_Z_D32:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_Z_D16:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_Z_D24S8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_Z_D15S1:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_LUMINANCE8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_LUMINANCE4_ALPHA4:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_LUMINANCE16:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_LUMINANCE8_ALPHA8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_DXT1:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_DXT2:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_DXT3:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_DXT4:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_DXT5:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BUMPU8V8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_BUMPL6V5U5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_BUMPX8L8V8U8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_FORMAT_DEAD1:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 3;
+
+ case SVGA3D_ARGB_S10E5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_ARGB_S23E8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 16;
+
+ case SVGA3D_A2R10G10B10:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_V8U8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_Q8W8V8U8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_CxV8U8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_X8L8V8U8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_A2W10V10U10:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_ALPHA8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_R_S10E5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R_S23E8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_RG_S10E5:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_RG_S23E8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_BUFFER:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_Z_D24X8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_V16U16:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_G16R16:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_A16B16G16R16:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_UYVY:
+ *pcxBlock = 2;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_YUY2:
+ *pcxBlock = 2;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_NV12:
+ *pcxBlock = 2;
+ *pcyBlock = 2;
+ return 6;
+
+ case SVGA3D_FORMAT_DEAD2:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R32G32B32A32_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 16;
+
+ case SVGA3D_R32G32B32A32_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 16;
+
+ case SVGA3D_R32G32B32A32_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 16;
+
+ case SVGA3D_R32G32B32_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 12;
+
+ case SVGA3D_R32G32B32_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 12;
+
+ case SVGA3D_R32G32B32_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 12;
+
+ case SVGA3D_R32G32B32_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 12;
+
+ case SVGA3D_R16G16B16A16_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R16G16B16A16_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R16G16B16A16_SNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R16G16B16A16_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R32G32_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R32G32_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R32G32_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R32G8X24_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_D32_FLOAT_S8X24_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R32_FLOAT_X8X24:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_X32_G8X24_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R10G10B10A2_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R10G10B10A2_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R11G11B10_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8B8A8_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8B8A8_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8B8A8_UNORM_SRGB:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8B8A8_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8B8A8_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R16G16_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R16G16_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R16G16_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R32_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_D32_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R32_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R32_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R24G8_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_D24_UNORM_S8_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R24_UNORM_X8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_X24_G8_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R8G8_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R8G8_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R8G8_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R16_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R16_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R16_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R16_SNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R16_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R8_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_R8_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_R8_UINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_R8_SNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_R8_SINT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_P8:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_R9G9B9E5_SHAREDEXP:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8_B8G8_UNORM:
+ *pcxBlock = 2;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_G8R8_G8B8_UNORM:
+ *pcxBlock = 2;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_BC1_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_BC1_UNORM_SRGB:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_BC2_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC2_UNORM_SRGB:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC3_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC3_UNORM_SRGB:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC4_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_ATI1:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_BC4_SNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_BC5_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_ATI2:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC5_SNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_R10G10B10_XR_BIAS_A2_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_B8G8R8A8_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_B8G8R8A8_UNORM_SRGB:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_B8G8R8X8_TYPELESS:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_B8G8R8X8_UNORM_SRGB:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_Z_DF16:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_Z_DF24:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_Z_D24S8_INT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_YV12:
+ *pcxBlock = 2;
+ *pcyBlock = 2;
+ return 6;
+
+ case SVGA3D_R32G32B32A32_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 16;
+
+ case SVGA3D_R16G16B16A16_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R16G16B16A16_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R32G32_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 8;
+
+ case SVGA3D_R10G10B10A2_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8B8A8_SNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R16G16_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R16G16_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R16G16_SNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R32_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_R8G8_SNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_R16_FLOAT:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_D16_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_A8_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 1;
+
+ case SVGA3D_BC1_UNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_BC2_UNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC3_UNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_B5G6R5_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_B5G5R5A1_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_B8G8R8A8_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_B8G8R8X8_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ case SVGA3D_BC4_UNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 8;
+
+ case SVGA3D_BC5_UNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_B4G4R4A4_UNORM:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 2;
+
+ case SVGA3D_BC6H_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC6H_UF16:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC6H_SF16:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC7_TYPELESS:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC7_UNORM:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_BC7_UNORM_SRGB:
+ *pcxBlock = 4;
+ *pcyBlock = 4;
+ return 16;
+
+ case SVGA3D_AYUV:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ return 4;
+
+ default:
+ *pcxBlock = 1;
+ *pcyBlock = 1;
+ AssertFailedReturn(4);
+ }
+}
+
+#ifdef LOG_ENABLED
+
+const char *vmsvga3dGetCapString(uint32_t idxCap)
+{
+ switch (idxCap)
+ {
+ case SVGA3D_DEVCAP_3D:
+ return "SVGA3D_DEVCAP_3D";
+ case SVGA3D_DEVCAP_MAX_LIGHTS:
+ return "SVGA3D_DEVCAP_MAX_LIGHTS";
+ case SVGA3D_DEVCAP_MAX_TEXTURES:
+ return "SVGA3D_DEVCAP_MAX_TEXTURES";
+ case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+ return "SVGA3D_DEVCAP_MAX_CLIP_PLANES";
+ case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+ return "SVGA3D_DEVCAP_VERTEX_SHADER_VERSION";
+ case SVGA3D_DEVCAP_VERTEX_SHADER:
+ return "SVGA3D_DEVCAP_VERTEX_SHADER";
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+ return "SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION";
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+ return "SVGA3D_DEVCAP_FRAGMENT_SHADER";
+ case SVGA3D_DEVCAP_MAX_RENDER_TARGETS:
+ return "SVGA3D_DEVCAP_MAX_RENDER_TARGETS";
+ case SVGA3D_DEVCAP_S23E8_TEXTURES:
+ return "SVGA3D_DEVCAP_S23E8_TEXTURES";
+ case SVGA3D_DEVCAP_S10E5_TEXTURES:
+ return "SVGA3D_DEVCAP_S10E5_TEXTURES";
+ case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+ return "SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND";
+ case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+ return "SVGA3D_DEVCAP_D16_BUFFER_FORMAT";
+ case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+ return "SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT";
+ case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+ return "SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT";
+ case SVGA3D_DEVCAP_QUERY_TYPES:
+ return "SVGA3D_DEVCAP_QUERY_TYPES";
+ case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+ return "SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING";
+ case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+ return "SVGA3D_DEVCAP_MAX_POINT_SIZE";
+ case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+ return "SVGA3D_DEVCAP_MAX_SHADER_TEXTURES";
+ case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+ return "SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH";
+ case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+ return "SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT";
+ case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+ return "SVGA3D_DEVCAP_MAX_VOLUME_EXTENT";
+ case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+ return "SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT";
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+ return "SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO";
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+ return "SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY";
+ case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+ return "SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT";
+ case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+ return "SVGA3D_DEVCAP_MAX_VERTEX_INDEX";
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+ return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS";
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+ return "SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS";
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+ return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS";
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+ return "SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS";
+ case SVGA3D_DEVCAP_TEXTURE_OPS:
+ return "SVGA3D_DEVCAP_TEXTURE_OPS";
+ case SVGA3D_DEVCAP_DEAD4: /* SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES */
+ return "SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES";
+ case SVGA3D_DEVCAP_DEAD5: /* SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES */
+ return "SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES";
+ case SVGA3D_DEVCAP_DEAD7: /* SVGA3D_DEVCAP_ALPHATOCOVERAGE */
+ return "SVGA3D_DEVCAP_ALPHATOCOVERAGE";
+ case SVGA3D_DEVCAP_DEAD6: /* SVGA3D_DEVCAP_SUPERSAMPLE */
+ return "SVGA3D_DEVCAP_SUPERSAMPLE";
+ case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+ return "SVGA3D_DEVCAP_AUTOGENMIPMAPS";
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+ return "SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES";
+ case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+ return "SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS";
+ case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+ return "SVGA3D_DEVCAP_MAX_CONTEXT_IDS";
+ case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+ return "SVGA3D_DEVCAP_MAX_SURFACE_IDS";
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8";
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8";
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ return "SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10";
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5";
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5";
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ return "SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4";
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_R5G6B5";
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+ return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16";
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8";
+ case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_ALPHA8";
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8";
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Z_D16";
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8";
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8";
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Z_DF16";
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Z_DF24";
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT";
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+ return "SVGA3D_DEVCAP_SURFACEFMT_DXT1";
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+ return "SVGA3D_DEVCAP_SURFACEFMT_DXT2";
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+ return "SVGA3D_DEVCAP_SURFACEFMT_DXT3";
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+ return "SVGA3D_DEVCAP_SURFACEFMT_DXT4";
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_DXT5";
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8";
+ case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+ return "SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10";
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8";
+ case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8";
+ case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_CxV8U8";
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_R_S10E5";
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_R_S23E8";
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5";
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8";
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+ return "SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5";
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+ return "SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8";
+ case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+ return "SVGA3D_DEVCAP_SURFACEFMT_V16U16";
+ case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+ return "SVGA3D_DEVCAP_SURFACEFMT_G16R16";
+ case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+ return "SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16";
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ return "SVGA3D_DEVCAP_SURFACEFMT_UYVY";
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ return "SVGA3D_DEVCAP_SURFACEFMT_YUY2";
+ case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+ return "SVGA3D_DEVCAP_SURFACEFMT_NV12";
+ case SVGA3D_DEVCAP_DEAD10: /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ return "SVGA3D_DEVCAP_SURFACEFMT_AYUV";
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI1:
+ return "SVGA3D_DEVCAP_SURFACEFMT_ATI1";
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI2:
+ return "SVGA3D_DEVCAP_SURFACEFMT_ATI2";
+ default:
+ return "UNEXPECTED";
+ }
+}
+
+const char *vmsvga3dGet3dFormatString(uint32_t format)
+{
+ static char szFormat[1024];
+
+ szFormat[0] = 0;
+
+ if (format & SVGA3DFORMAT_OP_TEXTURE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_TEXTURE\n");
+ if (format & SVGA3DFORMAT_OP_VOLUMETEXTURE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_VOLUMETEXTURE\n");
+ if (format & SVGA3DFORMAT_OP_CUBETEXTURE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_CUBETEXTURE\n");
+ if (format & SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET\n");
+ if (format & SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET\n");
+ if (format & SVGA3DFORMAT_OP_ZSTENCIL)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_ZSTENCIL\n");
+ if (format & SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH\n");
+ if (format & SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET\n");
+ if (format & SVGA3DFORMAT_OP_DISPLAYMODE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_DISPLAYMODE\n");
+ if (format & SVGA3DFORMAT_OP_3DACCELERATION)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_3DACCELERATION\n");
+ if (format & SVGA3DFORMAT_OP_PIXELSIZE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_PIXELSIZE\n");
+ if (format & SVGA3DFORMAT_OP_CONVERT_TO_ARGB)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_CONVERT_TO_ARGB\n");
+ if (format & SVGA3DFORMAT_OP_OFFSCREENPLAIN)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_OFFSCREENPLAIN\n");
+ if (format & SVGA3DFORMAT_OP_SRGBREAD)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_SRGBREAD\n");
+ if (format & SVGA3DFORMAT_OP_BUMPMAP)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_BUMPMAP\n");
+ if (format & SVGA3DFORMAT_OP_DMAP)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_DMAP\n");
+ if (format & SVGA3DFORMAT_OP_NOFILTER)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_NOFILTER\n");
+ if (format & SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB\n");
+ if (format & SVGA3DFORMAT_OP_SRGBWRITE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_SRGBWRITE\n");
+ if (format & SVGA3DFORMAT_OP_NOALPHABLEND)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_NOALPHABLEND\n");
+ if (format & SVGA3DFORMAT_OP_AUTOGENMIPMAP)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_AUTOGENMIPMAP\n");
+ if (format & SVGA3DFORMAT_OP_VERTEXTEXTURE)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_VERTEXTEXTURE\n");
+ if (format & SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP)
+ strcat(szFormat, " - SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP\n");
+ return szFormat;
+}
+
+const char *vmsvga3dGetRenderStateName(uint32_t state)
+{
+ switch (state)
+ {
+ case SVGA3D_RS_ZENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_ZENABLE";
+ case SVGA3D_RS_ZWRITEENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_ZWRITEENABLE";
+ case SVGA3D_RS_ALPHATESTENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_ALPHATESTENABLE";
+ case SVGA3D_RS_DITHERENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_DITHERENABLE";
+ case SVGA3D_RS_BLENDENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_BLENDENABLE";
+ case SVGA3D_RS_FOGENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_FOGENABLE";
+ case SVGA3D_RS_SPECULARENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_SPECULARENABLE";
+ case SVGA3D_RS_STENCILENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_STENCILENABLE";
+ case SVGA3D_RS_LIGHTINGENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_LIGHTINGENABLE";
+ case SVGA3D_RS_NORMALIZENORMALS: /* SVGA3dBool */
+ return "SVGA3D_RS_NORMALIZENORMALS";
+ case SVGA3D_RS_POINTSPRITEENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_POINTSPRITEENABLE";
+ case SVGA3D_RS_POINTSCALEENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_POINTSCALEENABLE";
+ case SVGA3D_RS_STENCILREF: /* uint32_t */
+ return "SVGA3D_RS_STENCILREF";
+ case SVGA3D_RS_STENCILMASK: /* uint32_t */
+ return "SVGA3D_RS_STENCILMASK";
+ case SVGA3D_RS_STENCILWRITEMASK: /* uint32_t */
+ return "SVGA3D_RS_STENCILWRITEMASK";
+ case SVGA3D_RS_POINTSIZE: /* float */
+ return "SVGA3D_RS_POINTSIZE";
+ case SVGA3D_RS_POINTSIZEMIN: /* float */
+ return "SVGA3D_RS_POINTSIZEMIN";
+ case SVGA3D_RS_POINTSIZEMAX: /* float */
+ return "SVGA3D_RS_POINTSIZEMAX";
+ case SVGA3D_RS_POINTSCALE_A: /* float */
+ return "SVGA3D_RS_POINTSCALE_A";
+ case SVGA3D_RS_POINTSCALE_B: /* float */
+ return "SVGA3D_RS_POINTSCALE_B";
+ case SVGA3D_RS_POINTSCALE_C: /* float */
+ return "SVGA3D_RS_POINTSCALE_C";
+ case SVGA3D_RS_AMBIENT: /* SVGA3dColor - identical */
+ return "SVGA3D_RS_AMBIENT";
+ case SVGA3D_RS_CLIPPLANEENABLE: /* SVGA3dClipPlanes - identical */
+ return "SVGA3D_RS_CLIPPLANEENABLE";
+ case SVGA3D_RS_FOGCOLOR: /* SVGA3dColor - identical */
+ return "SVGA3D_RS_FOGCOLOR";
+ case SVGA3D_RS_FOGSTART: /* float */
+ return "SVGA3D_RS_FOGSTART";
+ case SVGA3D_RS_FOGEND: /* float */
+ return "SVGA3D_RS_FOGEND";
+ case SVGA3D_RS_FOGDENSITY: /* float */
+ return "SVGA3D_RS_FOGDENSITY";
+ case SVGA3D_RS_RANGEFOGENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_RANGEFOGENABLE";
+ case SVGA3D_RS_FOGMODE: /* SVGA3dFogMode */
+ return "SVGA3D_RS_FOGMODE";
+ case SVGA3D_RS_FILLMODE: /* SVGA3dFillMode */
+ return "SVGA3D_RS_FILLMODE";
+ case SVGA3D_RS_SHADEMODE: /* SVGA3dShadeMode */
+ return "SVGA3D_RS_SHADEMODE";
+ case SVGA3D_RS_LINEPATTERN: /* SVGA3dLinePattern */
+ return "SVGA3D_RS_LINEPATTERN";
+ case SVGA3D_RS_SRCBLEND: /* SVGA3dBlendOp */
+ return "SVGA3D_RS_SRCBLEND";
+ case SVGA3D_RS_DSTBLEND: /* SVGA3dBlendOp */
+ return "SVGA3D_RS_DSTBLEND";
+ case SVGA3D_RS_BLENDEQUATION: /* SVGA3dBlendEquation */
+ return "SVGA3D_RS_BLENDEQUATION";
+ case SVGA3D_RS_CULLMODE: /* SVGA3dFace */
+ return "SVGA3D_RS_CULLMODE";
+ case SVGA3D_RS_ZFUNC: /* SVGA3dCmpFunc */
+ return "SVGA3D_RS_ZFUNC";
+ case SVGA3D_RS_ALPHAFUNC: /* SVGA3dCmpFunc */
+ return "SVGA3D_RS_ALPHAFUNC";
+ case SVGA3D_RS_STENCILFUNC: /* SVGA3dCmpFunc */
+ return "SVGA3D_RS_STENCILFUNC";
+ case SVGA3D_RS_STENCILFAIL: /* SVGA3dStencilOp */
+ return "SVGA3D_RS_STENCILFAIL";
+ case SVGA3D_RS_STENCILZFAIL: /* SVGA3dStencilOp */
+ return "SVGA3D_RS_STENCILZFAIL";
+ case SVGA3D_RS_STENCILPASS: /* SVGA3dStencilOp */
+ return "SVGA3D_RS_STENCILPASS";
+ case SVGA3D_RS_ALPHAREF: /* float (0.0 .. 1.0) */
+ return "SVGA3D_RS_ALPHAREF";
+ case SVGA3D_RS_FRONTWINDING: /* SVGA3dFrontWinding */
+ return "SVGA3D_RS_FRONTWINDING";
+ case SVGA3D_RS_COORDINATETYPE: /* SVGA3dCoordinateType */
+ return "SVGA3D_RS_COORDINATETYPE";
+ case SVGA3D_RS_ZBIAS: /* float */
+ return "SVGA3D_RS_ZBIAS";
+ case SVGA3D_RS_COLORWRITEENABLE: /* SVGA3dColorMask */
+ return "SVGA3D_RS_COLORWRITEENABLE";
+ case SVGA3D_RS_VERTEXMATERIALENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_VERTEXMATERIALENABLE";
+ case SVGA3D_RS_DIFFUSEMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ return "SVGA3D_RS_DIFFUSEMATERIALSOURCE";
+ case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ return "SVGA3D_RS_SPECULARMATERIALSOURCE";
+ case SVGA3D_RS_AMBIENTMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ return "SVGA3D_RS_AMBIENTMATERIALSOURCE";
+ case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial */
+ return "SVGA3D_RS_EMISSIVEMATERIALSOURCE";
+ case SVGA3D_RS_TEXTUREFACTOR: /* SVGA3dColor */
+ return "SVGA3D_RS_TEXTUREFACTOR";
+ case SVGA3D_RS_LOCALVIEWER: /* SVGA3dBool */
+ return "SVGA3D_RS_LOCALVIEWER";
+ case SVGA3D_RS_SCISSORTESTENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_SCISSORTESTENABLE";
+ case SVGA3D_RS_BLENDCOLOR: /* SVGA3dColor */
+ return "SVGA3D_RS_BLENDCOLOR";
+ case SVGA3D_RS_STENCILENABLE2SIDED: /* SVGA3dBool */
+ return "SVGA3D_RS_STENCILENABLE2SIDED";
+ case SVGA3D_RS_CCWSTENCILFUNC: /* SVGA3dCmpFunc */
+ return "SVGA3D_RS_CCWSTENCILFUNC";
+ case SVGA3D_RS_CCWSTENCILFAIL: /* SVGA3dStencilOp */
+ return "SVGA3D_RS_CCWSTENCILFAIL";
+ case SVGA3D_RS_CCWSTENCILZFAIL: /* SVGA3dStencilOp */
+ return "SVGA3D_RS_CCWSTENCILZFAIL";
+ case SVGA3D_RS_CCWSTENCILPASS: /* SVGA3dStencilOp */
+ return "SVGA3D_RS_CCWSTENCILPASS";
+ case SVGA3D_RS_VERTEXBLEND: /* SVGA3dVertexBlendFlags */
+ return "SVGA3D_RS_VERTEXBLEND";
+ case SVGA3D_RS_SLOPESCALEDEPTHBIAS: /* float */
+ return "SVGA3D_RS_SLOPESCALEDEPTHBIAS";
+ case SVGA3D_RS_DEPTHBIAS: /* float */
+ return "SVGA3D_RS_DEPTHBIAS";
+ case SVGA3D_RS_OUTPUTGAMMA: /* float */
+ return "SVGA3D_RS_OUTPUTGAMMA";
+ case SVGA3D_RS_ZVISIBLE: /* SVGA3dBool */
+ return "SVGA3D_RS_ZVISIBLE";
+ case SVGA3D_RS_LASTPIXEL: /* SVGA3dBool */
+ return "SVGA3D_RS_LASTPIXEL";
+ case SVGA3D_RS_CLIPPING: /* SVGA3dBool */
+ return "SVGA3D_RS_CLIPPING";
+ case SVGA3D_RS_WRAP0: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP0";
+ case SVGA3D_RS_WRAP1: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP1";
+ case SVGA3D_RS_WRAP2: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP2";
+ case SVGA3D_RS_WRAP3: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP3";
+ case SVGA3D_RS_WRAP4: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP4";
+ case SVGA3D_RS_WRAP5: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP5";
+ case SVGA3D_RS_WRAP6: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP6";
+ case SVGA3D_RS_WRAP7: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP7";
+ case SVGA3D_RS_WRAP8: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP8";
+ case SVGA3D_RS_WRAP9: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP9";
+ case SVGA3D_RS_WRAP10: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP10";
+ case SVGA3D_RS_WRAP11: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP11";
+ case SVGA3D_RS_WRAP12: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP12";
+ case SVGA3D_RS_WRAP13: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP13";
+ case SVGA3D_RS_WRAP14: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP14";
+ case SVGA3D_RS_WRAP15: /* SVGA3dWrapFlags */
+ return "SVGA3D_RS_WRAP15";
+ case SVGA3D_RS_MULTISAMPLEANTIALIAS: /* SVGA3dBool */
+ return "SVGA3D_RS_MULTISAMPLEANTIALIAS";
+ case SVGA3D_RS_MULTISAMPLEMASK: /* uint32_t */
+ return "SVGA3D_RS_MULTISAMPLEMASK";
+ case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_INDEXEDVERTEXBLENDENABLE";
+ case SVGA3D_RS_TWEENFACTOR: /* float */
+ return "SVGA3D_RS_TWEENFACTOR";
+ case SVGA3D_RS_ANTIALIASEDLINEENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_ANTIALIASEDLINEENABLE";
+ case SVGA3D_RS_COLORWRITEENABLE1: /* SVGA3dColorMask */
+ return "SVGA3D_RS_COLORWRITEENABLE1";
+ case SVGA3D_RS_COLORWRITEENABLE2: /* SVGA3dColorMask */
+ return "SVGA3D_RS_COLORWRITEENABLE2";
+ case SVGA3D_RS_COLORWRITEENABLE3: /* SVGA3dColorMask */
+ return "SVGA3D_RS_COLORWRITEENABLE3";
+ case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+ return "SVGA3D_RS_SEPARATEALPHABLENDENABLE";
+ case SVGA3D_RS_SRCBLENDALPHA: /* SVGA3dBlendOp */
+ return "SVGA3D_RS_SRCBLENDALPHA";
+ case SVGA3D_RS_DSTBLENDALPHA: /* SVGA3dBlendOp */
+ return "SVGA3D_RS_DSTBLENDALPHA";
+ case SVGA3D_RS_BLENDEQUATIONALPHA: /* SVGA3dBlendEquation */
+ return "SVGA3D_RS_BLENDEQUATIONALPHA";
+ case SVGA3D_RS_TRANSPARENCYANTIALIAS: /* SVGA3dTransparencyAntialiasType */
+ return "SVGA3D_RS_TRANSPARENCYANTIALIAS";
+ case SVGA3D_RS_LINEWIDTH: /* float */
+ return "SVGA3D_RS_LINEWIDTH";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+const char *vmsvga3dTextureStateToString(SVGA3dTextureStateName textureState)
+{
+ switch (textureState)
+ {
+ case SVGA3D_TS_BIND_TEXTURE:
+ return "SVGA3D_TS_BIND_TEXTURE";
+ case SVGA3D_TS_COLOROP:
+ return "SVGA3D_TS_COLOROP";
+ case SVGA3D_TS_COLORARG1:
+ return "SVGA3D_TS_COLORARG1";
+ case SVGA3D_TS_COLORARG2:
+ return "SVGA3D_TS_COLORARG2";
+ case SVGA3D_TS_ALPHAOP:
+ return "SVGA3D_TS_ALPHAOP";
+ case SVGA3D_TS_ALPHAARG1:
+ return "SVGA3D_TS_ALPHAARG1";
+ case SVGA3D_TS_ALPHAARG2:
+ return "SVGA3D_TS_ALPHAARG2";
+ case SVGA3D_TS_ADDRESSU:
+ return "SVGA3D_TS_ADDRESSU";
+ case SVGA3D_TS_ADDRESSV:
+ return "SVGA3D_TS_ADDRESSV";
+ case SVGA3D_TS_MIPFILTER:
+ return "SVGA3D_TS_MIPFILTER";
+ case SVGA3D_TS_MAGFILTER:
+ return "SVGA3D_TS_MAGFILTER";
+ case SVGA3D_TS_MINFILTER:
+ return "SVGA3D_TS_MINFILTER";
+ case SVGA3D_TS_BORDERCOLOR:
+ return "SVGA3D_TS_BORDERCOLOR";
+ case SVGA3D_TS_TEXCOORDINDEX:
+ return "SVGA3D_TS_TEXCOORDINDEX";
+ case SVGA3D_TS_TEXTURETRANSFORMFLAGS:
+ return "SVGA3D_TS_TEXTURETRANSFORMFLAGS";
+ case SVGA3D_TS_TEXCOORDGEN:
+ return "SVGA3D_TS_TEXCOORDGEN";
+ case SVGA3D_TS_BUMPENVMAT00:
+ return "SVGA3D_TS_BUMPENVMAT00";
+ case SVGA3D_TS_BUMPENVMAT01:
+ return "SVGA3D_TS_BUMPENVMAT01";
+ case SVGA3D_TS_BUMPENVMAT10:
+ return "SVGA3D_TS_BUMPENVMAT10";
+ case SVGA3D_TS_BUMPENVMAT11:
+ return "SVGA3D_TS_BUMPENVMAT11";
+ case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:
+ return "SVGA3D_TS_TEXTURE_MIPMAP_LEVEL";
+ case SVGA3D_TS_TEXTURE_LOD_BIAS:
+ return "SVGA3D_TS_TEXTURE_LOD_BIAS";
+ case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL:
+ return "SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL";
+ case SVGA3D_TS_ADDRESSW:
+ return "SVGA3D_TS_ADDRESSW";
+ case SVGA3D_TS_GAMMA:
+ return "SVGA3D_TS_GAMMA";
+ case SVGA3D_TS_BUMPENVLSCALE:
+ return "SVGA3D_TS_BUMPENVLSCALE";
+ case SVGA3D_TS_BUMPENVLOFFSET:
+ return "SVGA3D_TS_BUMPENVLOFFSET";
+ case SVGA3D_TS_COLORARG0:
+ return "SVGA3D_TS_COLORARG0";
+ case SVGA3D_TS_ALPHAARG0:
+ return "SVGA3D_TS_ALPHAARG0";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+const char *vmsvgaTransformToString(SVGA3dTransformType type)
+{
+ switch (type)
+ {
+ case SVGA3D_TRANSFORM_INVALID:
+ return "SVGA3D_TRANSFORM_INVALID";
+ case SVGA3D_TRANSFORM_WORLD:
+ return "SVGA3D_TRANSFORM_WORLD";
+ case SVGA3D_TRANSFORM_VIEW:
+ return "SVGA3D_TRANSFORM_VIEW";
+ case SVGA3D_TRANSFORM_PROJECTION:
+ return "SVGA3D_TRANSFORM_PROJECTION";
+ case SVGA3D_TRANSFORM_TEXTURE0:
+ return "SVGA3D_TRANSFORM_TEXTURE0";
+ case SVGA3D_TRANSFORM_TEXTURE1:
+ return "SVGA3D_TRANSFORM_TEXTURE1";
+ case SVGA3D_TRANSFORM_TEXTURE2:
+ return "SVGA3D_TRANSFORM_TEXTURE2";
+ case SVGA3D_TRANSFORM_TEXTURE3:
+ return "SVGA3D_TRANSFORM_TEXTURE3";
+ case SVGA3D_TRANSFORM_TEXTURE4:
+ return "SVGA3D_TRANSFORM_TEXTURE4";
+ case SVGA3D_TRANSFORM_TEXTURE5:
+ return "SVGA3D_TRANSFORM_TEXTURE5";
+ case SVGA3D_TRANSFORM_TEXTURE6:
+ return "SVGA3D_TRANSFORM_TEXTURE6";
+ case SVGA3D_TRANSFORM_TEXTURE7:
+ return "SVGA3D_TRANSFORM_TEXTURE7";
+ case SVGA3D_TRANSFORM_WORLD1:
+ return "SVGA3D_TRANSFORM_WORLD1";
+ case SVGA3D_TRANSFORM_WORLD2:
+ return "SVGA3D_TRANSFORM_WORLD2";
+ case SVGA3D_TRANSFORM_WORLD3:
+ return "SVGA3D_TRANSFORM_WORLD3";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+const char *vmsvgaDeclUsage2String(SVGA3dDeclUsage usage)
+{
+ switch (usage)
+ {
+ case SVGA3D_DECLUSAGE_POSITION:
+ return "SVGA3D_DECLUSAGE_POSITION";
+ case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+ return "SVGA3D_DECLUSAGE_BLENDWEIGHT";
+ case SVGA3D_DECLUSAGE_BLENDINDICES:
+ return "SVGA3D_DECLUSAGE_BLENDINDICES";
+ case SVGA3D_DECLUSAGE_NORMAL:
+ return "SVGA3D_DECLUSAGE_NORMAL";
+ case SVGA3D_DECLUSAGE_PSIZE:
+ return "SVGA3D_DECLUSAGE_PSIZE";
+ case SVGA3D_DECLUSAGE_TEXCOORD:
+ return "SVGA3D_DECLUSAGE_TEXCOORD";
+ case SVGA3D_DECLUSAGE_TANGENT:
+ return "SVGA3D_DECLUSAGE_TANGENT";
+ case SVGA3D_DECLUSAGE_BINORMAL:
+ return "SVGA3D_DECLUSAGE_BINORMAL";
+ case SVGA3D_DECLUSAGE_TESSFACTOR:
+ return "SVGA3D_DECLUSAGE_TESSFACTOR";
+ case SVGA3D_DECLUSAGE_POSITIONT:
+ return "SVGA3D_DECLUSAGE_POSITIONT";
+ case SVGA3D_DECLUSAGE_COLOR:
+ return "SVGA3D_DECLUSAGE_COLOR";
+ case SVGA3D_DECLUSAGE_FOG:
+ return "SVGA3D_DECLUSAGE_FOG";
+ case SVGA3D_DECLUSAGE_DEPTH:
+ return "SVGA3D_DECLUSAGE_DEPTH";
+ case SVGA3D_DECLUSAGE_SAMPLE:
+ return "SVGA3D_DECLUSAGE_SAMPLE";
+ default:
+ return "UNKNOWN!!";
+ }
+}
+
+const char *vmsvgaDeclMethod2String(SVGA3dDeclMethod method)
+{
+ switch (method)
+ {
+ case SVGA3D_DECLMETHOD_DEFAULT:
+ return "SVGA3D_DECLMETHOD_DEFAULT";
+ case SVGA3D_DECLMETHOD_PARTIALU:
+ return "SVGA3D_DECLMETHOD_PARTIALU";
+ case SVGA3D_DECLMETHOD_PARTIALV:
+ return "SVGA3D_DECLMETHOD_PARTIALV";
+ case SVGA3D_DECLMETHOD_CROSSUV:
+ return "SVGA3D_DECLMETHOD_CROSSUV";
+ case SVGA3D_DECLMETHOD_UV:
+ return "SVGA3D_DECLMETHOD_UV";
+ case SVGA3D_DECLMETHOD_LOOKUP:
+ return "SVGA3D_DECLMETHOD_LOOKUP";
+ case SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED:
+ return "SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED";
+ default:
+ return "UNKNOWN!!";
+ }
+}
+
+const char *vmsvgaDeclType2String(SVGA3dDeclType type)
+{
+ switch (type)
+ {
+ case SVGA3D_DECLTYPE_FLOAT1:
+ return "SVGA3D_DECLTYPE_FLOAT1";
+ case SVGA3D_DECLTYPE_FLOAT2:
+ return "SVGA3D_DECLTYPE_FLOAT2";
+ case SVGA3D_DECLTYPE_FLOAT3:
+ return "SVGA3D_DECLTYPE_FLOAT3";
+ case SVGA3D_DECLTYPE_FLOAT4:
+ return "SVGA3D_DECLTYPE_FLOAT4";
+ case SVGA3D_DECLTYPE_D3DCOLOR:
+ return "SVGA3D_DECLTYPE_D3DCOLOR";
+ case SVGA3D_DECLTYPE_UBYTE4:
+ return "SVGA3D_DECLTYPE_UBYTE4";
+ case SVGA3D_DECLTYPE_SHORT2:
+ return "SVGA3D_DECLTYPE_SHORT2";
+ case SVGA3D_DECLTYPE_SHORT4:
+ return "SVGA3D_DECLTYPE_SHORT4";
+ case SVGA3D_DECLTYPE_UBYTE4N:
+ return "SVGA3D_DECLTYPE_UBYTE4N";
+ case SVGA3D_DECLTYPE_SHORT2N:
+ return "SVGA3D_DECLTYPE_SHORT2N";
+ case SVGA3D_DECLTYPE_SHORT4N:
+ return "SVGA3D_DECLTYPE_SHORT4N";
+ case SVGA3D_DECLTYPE_USHORT2N:
+ return "SVGA3D_DECLTYPE_USHORT2N";
+ case SVGA3D_DECLTYPE_USHORT4N:
+ return "SVGA3D_DECLTYPE_USHORT4N";
+ case SVGA3D_DECLTYPE_UDEC3:
+ return "SVGA3D_DECLTYPE_UDEC3";
+ case SVGA3D_DECLTYPE_DEC3N:
+ return "SVGA3D_DECLTYPE_DEC3N";
+ case SVGA3D_DECLTYPE_FLOAT16_2:
+ return "SVGA3D_DECLTYPE_FLOAT16_2";
+ case SVGA3D_DECLTYPE_FLOAT16_4:
+ return "SVGA3D_DECLTYPE_FLOAT16_4";
+ default:
+ return "UNKNOWN!!";
+ }
+}
+
+const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType)
+{
+ switch (PrimitiveType)
+ {
+ case SVGA3D_PRIMITIVE_TRIANGLELIST:
+ return "SVGA3D_PRIMITIVE_TRIANGLELIST";
+ case SVGA3D_PRIMITIVE_POINTLIST:
+ return "SVGA3D_PRIMITIVE_POINTLIST";
+ case SVGA3D_PRIMITIVE_LINELIST:
+ return "SVGA3D_PRIMITIVE_LINELIST";
+ case SVGA3D_PRIMITIVE_LINESTRIP:
+ return "SVGA3D_PRIMITIVE_LINESTRIP";
+ case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+ return "SVGA3D_PRIMITIVE_TRIANGLESTRIP";
+ case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+ return "SVGA3D_PRIMITIVE_TRIANGLEFAN";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+#endif /* LOG_ENABLED */
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-d3d9.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-d3d9.cpp
new file mode 100644
index 00000000..47d52ef6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-d3d9.cpp
@@ -0,0 +1,1247 @@
+/* $Id: DevVGA-SVGA3d-win-d3d9.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device Direct3D 9 backend.
+ */
+
+/*
+ * Copyright (C) 2019-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+
+#include <iprt/assert.h>
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d-internal.h"
+
+
+typedef enum D3D9TextureType
+{
+ D3D9TextureType_Texture,
+ D3D9TextureType_Bounce,
+ D3D9TextureType_Emulated
+} D3D9TextureType;
+
+DECLINLINE(D3DCUBEMAP_FACES) vmsvga3dCubemapFaceFromIndex(uint32_t iFace)
+{
+ D3DCUBEMAP_FACES Face;
+ switch (iFace)
+ {
+ case 0: Face = D3DCUBEMAP_FACE_POSITIVE_X; break;
+ case 1: Face = D3DCUBEMAP_FACE_NEGATIVE_X; break;
+ case 2: Face = D3DCUBEMAP_FACE_POSITIVE_Y; break;
+ case 3: Face = D3DCUBEMAP_FACE_NEGATIVE_Y; break;
+ case 4: Face = D3DCUBEMAP_FACE_POSITIVE_Z; break;
+ default:
+ case 5: Face = D3DCUBEMAP_FACE_NEGATIVE_Z; break;
+ }
+ return Face;
+}
+
+IDirect3DTexture9 *D3D9GetTexture(PVMSVGA3DSURFACE pSurface,
+ D3D9TextureType enmType)
+{
+ IDirect3DTexture9 *p;
+ switch (enmType)
+ {
+ default: AssertFailed();
+ RT_FALL_THRU();
+ case D3D9TextureType_Texture: p = pSurface->u.pTexture; break;
+ case D3D9TextureType_Bounce: p = pSurface->bounce.pTexture; break;
+ case D3D9TextureType_Emulated: p = pSurface->emulated.pTexture; break;
+ }
+ return p;
+}
+
+IDirect3DCubeTexture9 *D3D9GetCubeTexture(PVMSVGA3DSURFACE pSurface,
+ D3D9TextureType enmType)
+{
+ IDirect3DCubeTexture9 *p;
+ switch (enmType)
+ {
+ default: AssertFailed();
+ RT_FALL_THRU();
+ case D3D9TextureType_Texture: p = pSurface->u.pCubeTexture; break;
+ case D3D9TextureType_Bounce: p = pSurface->bounce.pCubeTexture; break;
+ case D3D9TextureType_Emulated: p = pSurface->emulated.pCubeTexture; break;
+ }
+ return p;
+}
+
+IDirect3DVolumeTexture9 *D3D9GetVolumeTexture(PVMSVGA3DSURFACE pSurface,
+ D3D9TextureType enmType)
+{
+ IDirect3DVolumeTexture9 *p;
+ switch (enmType)
+ {
+ default: AssertFailed();
+ RT_FALL_THRU();
+ case D3D9TextureType_Texture: p = pSurface->u.pVolumeTexture; break;
+ case D3D9TextureType_Bounce: p = pSurface->bounce.pVolumeTexture; break;
+ case D3D9TextureType_Emulated: p = pSurface->emulated.pVolumeTexture; break;
+ }
+ return p;
+}
+
+HRESULT D3D9GetTextureLevel(PVMSVGA3DSURFACE pSurface,
+ D3D9TextureType enmType,
+ uint32_t uFace,
+ uint32_t uMipmap,
+ IDirect3DSurface9 **ppD3DSurface)
+{
+ HRESULT hr;
+
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ {
+ Assert(pSurface->cFaces == 6);
+
+ IDirect3DCubeTexture9 *p = D3D9GetCubeTexture(pSurface, enmType);
+ if (p)
+ {
+ D3DCUBEMAP_FACES const FaceType = vmsvga3dCubemapFaceFromIndex(uFace);
+ hr = p->GetCubeMapSurface(FaceType, uMipmap, ppD3DSurface);
+ AssertMsg(hr == D3D_OK, ("GetCubeMapSurface failed with %x\n", hr));
+ }
+ else
+ {
+ AssertFailed();
+ hr = E_INVALIDARG;
+ }
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ Assert(pSurface->cFaces == 1);
+ Assert(uFace == 0);
+
+ IDirect3DTexture9 *p = D3D9GetTexture(pSurface, enmType);
+ if (p)
+ {
+ hr = p->GetSurfaceLevel(uMipmap, ppD3DSurface);
+ AssertMsg(hr == D3D_OK, ("GetSurfaceLevel failed with %x\n", hr));
+ }
+ else
+ {
+ AssertFailed();
+ hr = E_INVALIDARG;
+ }
+ }
+ else
+ {
+ AssertMsgFailed(("No surface level for type %d\n", pSurface->enmD3DResType));
+ hr = E_INVALIDARG;
+ }
+
+ return hr;
+}
+
+
+static HRESULT d3dCopyToVertexBuffer(IDirect3DVertexBuffer9 *pVB, const void *pvSrc, int cbSrc)
+{
+ HRESULT hr = D3D_OK;
+ void *pvDst = 0;
+ hr = pVB->Lock(0, 0, &pvDst, 0);
+ if (SUCCEEDED(hr))
+ {
+ memcpy(pvDst, pvSrc, cbSrc);
+ hr = pVB->Unlock();
+ }
+ return hr;
+}
+
+struct Vertex
+{
+ float x, y; /* The vertex position. */
+ float u, v; /* Texture coordinates. */
+};
+
+typedef struct D3D9ConversionParameters
+{
+ DWORD const *paVS; /* Vertex shader code. */
+ DWORD const *paPS; /* Pixel shader code. */
+} D3D9ConversionParameters;
+
+/** Select conversion shaders.
+ * @param d3dfmtFrom Source texture format.
+ * @param d3dfmtTo Target texture format.
+ * @param pResult Where the tore pointers to the shader code.
+ */
+static HRESULT d3d9SelectConversion(D3DFORMAT d3dfmtFrom, D3DFORMAT d3dfmtTo,
+ D3D9ConversionParameters *pResult)
+{
+ /*
+ * The shader code has been obtained from the hex listing file (hexdump.txt) produced by fxc HLSL compiler:
+ * fxc.exe /Op /Tfx_2_0 /Fxhexdump.txt shader.fx
+ *
+ * The vertex shader code is the same for all convestion variants.
+ *
+ * For example here is the complete code for aPSCodeSwapRB:
+
+ uniform extern float4 gTextureInfo; // .xy = (width, height) in pixels, .zw = (1/width, 1/height)
+ uniform extern texture gTexSource;
+ sampler sSource = sampler_state
+ {
+ Texture = <gTexSource>;
+ };
+
+ struct VS_INPUT
+ {
+ float2 Position : POSITION; // In pixels.
+ float2 TexCoord : TEXCOORD0;
+ };
+
+ struct VS_OUTPUT
+ {
+ float4 Position : POSITION; // Normalized.
+ float2 TexCoord : TEXCOORD0;
+ };
+
+ VS_OUTPUT VS(VS_INPUT In)
+ {
+ VS_OUTPUT Output;
+
+ // Position is in pixels, i.e [0; width - 1]. Top, left is 0,0.
+ // Convert to the normalized coords in the -1;1 range
+ float4 Position;
+ Position.x = 2.0f * In.Position.x / (gTextureInfo.x - 1.0f) - 1.0f;
+ Position.y = -2.0f * In.Position.y / (gTextureInfo.y - 1.0f) + 1.0f;
+ Position.z = 0.0f; // Not used.
+ Position.w = 1.0f; // It is a point.
+
+ Output.Position = Position;
+ Output.TexCoord = In.TexCoord;
+
+ return Output;
+ }
+
+ struct PS_OUTPUT
+ {
+ float4 Color : COLOR0;
+ };
+
+ PS_OUTPUT PS(VS_OUTPUT In)
+ {
+ PS_OUTPUT Output;
+
+ float2 texCoord = In.TexCoord;
+
+ float4 texColor = tex2D(sSource, texCoord);
+
+ Output.Color = texColor.bgra; // Swizzle rgba -> bgra
+
+ return Output;
+ }
+
+ technique RenderScene
+ {
+ pass P0
+ {
+ VertexShader = compile vs_2_0 VS();
+ PixelShader = compile ps_2_0 PS();
+ }
+ }
+ */
+
+ static DWORD const aVSCode[] =
+ {
+ 0xfffe0200, // vs_2_0
+ 0x05000051, 0xa00f0001, 0xbf800000, 0xc0000000, 0x3f800000, 0x00000000, // def c1, -1, -2, 1, 0
+ 0x0200001f, 0x80000000, 0x900f0000, // dcl_position v0
+ 0x0200001f, 0x80000005, 0x900f0001, // dcl_texcoord v1
+ 0x03000002, 0x80010000, 0x90000000, 0x90000000, // add r0.x, v0.x, v0.x
+ 0x02000001, 0x80010001, 0xa0000001, // mov r1.x, c1.x
+ 0x03000002, 0x80060000, 0x80000001, 0xa0d00000, // add r0.yz, r1.x, c0.xxyw
+ 0x02000006, 0x80020000, 0x80550000, // rcp r0.y, r0.y
+ 0x02000006, 0x80040000, 0x80aa0000, // rcp r0.z, r0.z
+ 0x04000004, 0xc0010000, 0x80000000, 0x80550000, 0xa0000001, // mad oPos.x, r0.x, r0.y, c1.x
+ 0x03000005, 0x80010000, 0x90550000, 0xa0550001, // mul r0.x, v0.y, c1.y
+ 0x04000004, 0xc0020000, 0x80000000, 0x80aa0000, 0xa0aa0001, // mad oPos.y, r0.x, r0.z, c1.z
+ 0x02000001, 0xc00c0000, 0xa0b40001, // mov oPos.zw, c1.xywz
+ 0x02000001, 0xe0030000, 0x90e40001, // mov oT0.xy, v1
+ 0x0000ffff
+ };
+
+ /*
+ * Swap R and B components. Converts D3DFMT_A8R8G8B8 <-> D3DFMT_A8B8G8R8.
+ */
+ static DWORD const aPSCodeSwapRB[] =
+ {
+ 0xffff0200, // ps_2_0
+ 0x0200001f, 0x80000000, 0xb0030000, // dcl t0.xy
+ 0x0200001f, 0x90000000, 0xa00f0800, // dcl_2d s0
+ 0x03000042, 0x800f0000, 0xb0e40000, 0xa0e40800, // texld r0, t0, s0
+ 0x02000001, 0x80090001, 0x80d20000, // mov r1.xw, r0.zxyw
+ 0x02000001, 0x80040001, 0x80000000, // mov r1.z, r0.x
+ 0x02000001, 0x80020001, 0x80550000, // mov r1.y, r0.y
+ 0x02000001, 0x800f0800, 0x80e40001, // mov oC0, r1
+ 0x0000ffff
+ };
+
+ /* YUY2 to RGB:
+
+ // YUY2 if not defined
+ // #define UYVY
+
+ static const float3x3 yuvCoeffs =
+ {
+ 1.164383f, 1.164383f, 1.164383f,
+ 0.0f, -0.391762f, 2.017232f,
+ 1.596027f, -0.812968f, 0.0f
+ };
+
+ PS_OUTPUT PS(VS_OUTPUT In)
+ {
+ PS_OUTPUT Output;
+
+ // 4 bytes of an YUV macropixel contain 2 pixels in X for the target.
+ // I.e. each YUV texture pixel is sampled twice: for both even and odd target pixels.
+
+ // In.TexCoord are in [0;1] range for the target.
+ float2 texCoord = In.TexCoord;
+
+ // Convert to the target coords in pixels: xPixel = TexCoord.x * Width.
+ float xTargetPixel = texCoord.x * gTextureInfo.x;
+
+ // Source texture is half width, i.e. it contains data in pixels [0; width / 2 - 1].
+ float xSourcePixel = xTargetPixel / 2.0f;
+
+ // Remainder is about 0.25 for even pixels and about 0.75 for odd pixels.
+ float remainder = xSourcePixel - trunc(xSourcePixel);
+
+ // Back to the normalized coords: texCoord.x = xPixel / Width.
+ texCoord.x = xSourcePixel * gTextureInfo.z;
+
+ // Fetch YUV
+ float4 texColor = tex2D(sSource, texCoord);
+
+ // Get YUV components.
+ #ifdef UYVY
+ float u = texColor.b;
+ float y0 = texColor.g;
+ float v = texColor.r;
+ float y1 = texColor.a;
+ #else // YUY2
+ float y0 = texColor.b;
+ float u = texColor.g;
+ float y1 = texColor.r;
+ float v = texColor.a;
+ #endif
+
+ // Get y0 for even x coordinates and y1 for odd ones.
+ float y = remainder < 0.5f ? y0 : y1;
+
+ // Make a vector for easier calculation.
+ float3 yuv = float3(y, u, v);
+
+ // Convert YUV to RGB:
+ // https://docs.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering#converting-8-bit-yuv-to-rgb888
+ //
+ // For 8bit [0;255] when Y = [16;235], U,V = [16;239]:
+ //
+ // C = Y - 16
+ // D = U - 128
+ // E = V - 128
+ //
+ // R = 1.164383 * C + 1.596027 * E
+ // G = 1.164383 * C - 0.391762 * D - 0.812968 * E
+ // B = 1.164383 * C + 2.017232 * D
+ //
+ // For shader values [0;1.0] when Y = [16/255;235/255], U,V = [16/255;239/255]:
+ //
+ // C = Y - 0.0627
+ // D = U - 0.5020
+ // E = V - 0.5020
+ //
+ // R = 1.164383 * C + 1.596027 * E
+ // G = 1.164383 * C - 0.391762 * D - 0.812968 * E
+ // B = 1.164383 * C + 2.017232 * D
+ //
+ yuv -= float3(0.0627f, 0.502f, 0.502f);
+ float3 bgr = mul(yuv, yuvCoeffs);
+
+ // Clamp to [0;1]
+ bgr = saturate(bgr);
+
+ // Return RGBA
+ Output.Color = float4(bgr, 1.0f);
+
+ return Output;
+ }
+ */
+ static DWORD const aPSCodeYUY2toRGB[] =
+ {
+ 0xffff0200, // ps_2_0
+ 0x05000051, 0xa00f0001, 0x3f000000, 0x00000000, 0x3f800000, 0xbf000000, // def c1, 0.5, 0, 1, -0.5
+ 0x05000051, 0xa00f0002, 0xbd8068dc, 0xbf008312, 0xbf008312, 0x00000000, // def c2, -0.0627000034, -0.501999974, -0.501999974, 0
+ 0x05000051, 0xa00f0003, 0x3f950a81, 0x00000000, 0x3fcc4a9d, 0x00000000, // def c3, 1.16438305, 0, 1.59602702, 0
+ 0x05000051, 0xa00f0004, 0x3f950a81, 0xbec89507, 0xbf501eac, 0x00000000, // def c4, 1.16438305, -0.391761988, -0.812968016, 0
+ 0x05000051, 0xa00f0005, 0x3f950a81, 0x40011a54, 0x00000000, 0x00000000, // def c5, 1.16438305, 2.01723194, 0, 0
+ 0x0200001f, 0x80000000, 0xb0030000, // dcl t0.xy
+ 0x0200001f, 0x90000000, 0xa00f0800, // dcl_2d s0
+ 0x03000005, 0x80080000, 0xb0000000, 0xa0000000, // mul r0.w, t0.x, c0.x
+ 0x03000005, 0x80010000, 0x80ff0000, 0xa0000001, // mul r0.x, r0.w, c1.x
+ 0x02000013, 0x80020000, 0x80000000, // frc r0.y, r0.x
+ 0x04000058, 0x80040000, 0x81550000, 0xa0550001, 0xa0aa0001, // cmp r0.z, -r0.y, c1.y, c1.z
+ 0x03000002, 0x80020000, 0x80000000, 0x81550000, // add r0.y, r0.x, -r0.y
+ 0x03000005, 0x80010001, 0x80000000, 0xa0aa0000, // mul r1.x, r0.x, c0.z
+ 0x04000058, 0x80010000, 0x80ff0000, 0xa0550001, 0x80aa0000, // cmp r0.x, r0.w, c1.y, r0.z
+ 0x03000002, 0x80010000, 0x80000000, 0x80550000, // add r0.x, r0.x, r0.y
+ 0x04000004, 0x80010000, 0x80ff0000, 0xa0000001, 0x81000000, // mad r0.x, r0.w, c1.x, -r0.x
+ 0x03000002, 0x80010000, 0x80000000, 0xa0ff0001, // add r0.x, r0.x, c1.w
+ 0x02000001, 0x80020001, 0xb0550000, // mov r1.y, t0.y
+ 0x03000042, 0x800f0001, 0x80e40001, 0xa0e40800, // texld r1, r1, s0
+ 0x04000058, 0x80010001, 0x80000000, 0x80000001, 0x80aa0001, // cmp r1.x, r0.x, r1.x, r1.z
+ 0x02000001, 0x80040001, 0x80ff0001, // mov r1.z, r1.w
+ 0x03000002, 0x80070000, 0x80e40001, 0xa0e40002, // add r0.xyz, r1, c2
+ 0x03000008, 0x80110001, 0x80e40000, 0xa0e40003, // dp3_sat r1.x, r0, c3
+ 0x03000008, 0x80120001, 0x80e40000, 0xa0e40004, // dp3_sat r1.y, r0, c4
+ 0x0400005a, 0x80140001, 0x80e40000, 0xa0e40005, 0xa0aa0005, // dp2add_sat r1.z, r0, c5, c5.z
+ 0x02000001, 0x80080001, 0xa0aa0001, // mov r1.w, c1.z
+ 0x02000001, 0x800f0800, 0x80e40001, // mov oC0, r1
+ 0x0000ffff
+ };
+
+ /* UYVY to RGB is same as YUY2 above except for the order of yuv components:
+
+ // YUY2 if not defined
+ #define UYVY
+ ...
+ */
+ static DWORD const aPSCodeUYVYtoRGB[] =
+ {
+ 0xffff0200, // ps_2_0
+ 0x05000051, 0xa00f0001, 0x3f000000, 0x00000000, 0x3f800000, 0xbf000000, // def c1, 0.5, 0, 1, -0.5
+ 0x05000051, 0xa00f0002, 0xbd8068dc, 0xbf008312, 0xbf008312, 0x00000000, // def c2, -0.0627000034, -0.501999974, -0.501999974, 0
+ 0x05000051, 0xa00f0003, 0x3f950a81, 0x00000000, 0x3fcc4a9d, 0x00000000, // def c3, 1.16438305, 0, 1.59602702, 0
+ 0x05000051, 0xa00f0004, 0x3f950a81, 0xbec89507, 0xbf501eac, 0x00000000, // def c4, 1.16438305, -0.391761988, -0.812968016, 0
+ 0x05000051, 0xa00f0005, 0x3f950a81, 0x40011a54, 0x00000000, 0x00000000, // def c5, 1.16438305, 2.01723194, 0, 0
+ 0x0200001f, 0x80000000, 0xb0030000, // dcl t0.xy
+ 0x0200001f, 0x90000000, 0xa00f0800, // dcl_2d s0
+ 0x03000005, 0x80080000, 0xb0000000, 0xa0000000, // mul r0.w, t0.x, c0.x
+ 0x03000005, 0x80010000, 0x80ff0000, 0xa0000001, // mul r0.x, r0.w, c1.x
+ 0x02000013, 0x80020000, 0x80000000, // frc r0.y, r0.x
+ 0x04000058, 0x80040000, 0x81550000, 0xa0550001, 0xa0aa0001, // cmp r0.z, -r0.y, c1.y, c1.z
+ 0x03000002, 0x80020000, 0x80000000, 0x81550000, // add r0.y, r0.x, -r0.y
+ 0x03000005, 0x80010001, 0x80000000, 0xa0aa0000, // mul r1.x, r0.x, c0.z
+ 0x04000058, 0x80010000, 0x80ff0000, 0xa0550001, 0x80aa0000, // cmp r0.x, r0.w, c1.y, r0.z
+ 0x03000002, 0x80010000, 0x80000000, 0x80550000, // add r0.x, r0.x, r0.y
+ 0x04000004, 0x80010000, 0x80ff0000, 0xa0000001, 0x81000000, // mad r0.x, r0.w, c1.x, -r0.x
+ 0x03000002, 0x80010000, 0x80000000, 0xa0ff0001, // add r0.x, r0.x, c1.w
+ 0x02000001, 0x80020001, 0xb0550000, // mov r1.y, t0.y
+ 0x03000042, 0x800f0001, 0x80e40001, 0xa0e40800, // texld r1, r1, s0
+ 0x04000058, 0x80010000, 0x80000000, 0x80ff0001, 0x80550001, // cmp r0.x, r0.x, r1.w, r1.y
+ 0x02000001, 0x80060000, 0x80c90001, // mov r0.yz, r1.yzxw
+ 0x03000002, 0x80070000, 0x80e40000, 0xa0e40002, // add r0.xyz, r0, c2
+ 0x03000008, 0x80110001, 0x80e40000, 0xa0e40003, // dp3_sat r1.x, r0, c3
+ 0x03000008, 0x80120001, 0x80e40000, 0xa0e40004, // dp3_sat r1.y, r0, c4
+ 0x0400005a, 0x80140001, 0x80e40000, 0xa0e40005, 0xa0aa0005, // dp2add_sat r1.z, r0, c5, c5.z
+ 0x02000001, 0x80080001, 0xa0aa0001, // mov r1.w, c1.z
+ 0x02000001, 0x800f0800, 0x80e40001, // mov oC0, r1
+ 0x0000ffff
+ };
+
+ /* RGB to YUY2.
+ * UYVY is not defined.
+
+ static const float3x3 bgrCoeffs =
+ {
+ 0.0977f, 0.4375f, -0.0703f,
+ 0.5039f, -0.2891f, -0.3672f,
+ 0.2578f, -0.1484f, 0.4375f
+ };
+
+ static const float3 yuvShift = { 0.0647f, 0.5039f, 0.5039f };
+
+ PS_OUTPUT PS(VS_OUTPUT In)
+ {
+ PS_OUTPUT Output;
+
+ // 4 bytes of an YUV macropixel contain 2 source pixels in X.
+ // I.e. each YUV texture target pixel is computed from 2 source pixels.
+ // The target texture pixels are located in the [0; width / 2 - 1] range.
+
+ // In.TexCoord are in [0;1] range, applicable both to the source and the target textures.
+ float2 texCoordDst = In.TexCoord;
+
+ // Convert to the target coords in pixels: xPixel = TexCoord.x * Width.
+ float xTargetPixel = texCoordDst.x * gTextureInfo.x;
+
+ float4 bgraOutputPixel;
+ if (xTargetPixel < gTextureInfo.x / 2.0f)
+ {
+ // Target texture is half width, i.e. it contains data in pixels [0; width / 2 - 1].
+ // Compute the source texture coords for the pixels which will be used to compute the target pixel.
+ float2 texCoordSrc = texCoordDst;
+ texCoordSrc.x *= 2.0f;
+
+ // Even pixel. Fetch two BGRA source pixels.
+ float4 texColor0 = tex2D(sSource, texCoordSrc);
+
+ // Advance one pixel (+ 1/Width)
+ texCoordSrc.x += gTextureInfo.z;
+ float4 texColor1 = tex2D(sSource, texCoordSrc);
+
+ // Compute y0, u, y1, v components
+ // https://docs.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering#converting-rgb888-to-yuv-444
+ //
+ // For R,G,B and Y,U,V in [0;255]
+ // Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16
+ // U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128
+ // V = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128
+ //
+ // For r,g,b and y,u,v in [0;1.0]
+ // y = 0.2578 * r + 0.5039 * g + 0.0977 * b + 0.0647
+ // u = -0.1484 * r - 0.2891 * g + 0.4375 * b + 0.5039
+ // v = 0.4375 * r - 0.3672 * g - 0.0703 * b + 0.5039
+
+ float3 yuv0 = mul(texColor0.bgr, bgrCoeffs);
+ yuv0 -= yuvShift;
+
+ float3 yuv1 = mul(texColor1.bgr, bgrCoeffs);
+ yuv1 -= yuvShift;
+
+ float y0 = yuv0.b;
+ float u = (yuv0.g + yuv1.g) / 2.0f;
+ float y1 = yuv1.b;
+ float v = (yuv0.r + yuv1.r) / 2.0f;
+
+ #ifdef UYVY
+ bgraOutputPixel = float4(u, y0, v, y1);
+ #else // YUY2
+ bgraOutputPixel = float4(y0, u, y1, v);
+ #endif
+ }
+ else
+ {
+ // [width / 2; width - 1] pixels are not used. Set to something.
+ bgraOutputPixel = float4(0.0f, 0.0f, 0.0f, 0.0f);
+ }
+
+ // Clamp to [0;1]
+ bgraOutputPixel = saturate(bgraOutputPixel);
+
+ // Return RGBA
+ Output.Color = bgraOutputPixel;
+
+ return Output;
+ }
+ */
+ static DWORD const aPSCodeRGBtoYUY2[] =
+ {
+ 0xffff0200, // ps_2_0
+ 0x05000051, 0xa00f0001, 0xbd84816f, 0xbf00ff97, 0xbf00ff97, 0x00000000, // def c1, -0.0647, -0.503899992, -0.503899992, 0
+ 0x05000051, 0xa00f0002, 0xbe80ff97, 0x00000000, 0xbd04816f, 0x00000000, // def c2, -0.251949996, 0, -0.03235, 0
+ 0x05000051, 0xa00f0003, 0x3dc816f0, 0x3f00ff97, 0x3e83fe5d, 0x00000000, // def c3, 0.0976999998, 0.503899992, 0.257800013, 0
+ 0x05000051, 0xa00f0004, 0x3ee00000, 0xbe9404ea, 0xbe17f62b, 0x00000000, // def c4, 0.4375, -0.289099991, -0.148399994, 0
+ 0x05000051, 0xa00f0005, 0xbd8ff972, 0xbebc01a3, 0x3ee00000, 0x00000000, // def c5, -0.0702999979, -0.367199987, 0.4375, 0
+ 0x05000051, 0xa00f0006, 0x3f000000, 0x40000000, 0x3f800000, 0xbf00ff97, // def c6, 0.5, 2, 1, -0.503899992
+ 0x05000051, 0xa00f0007, 0x3f000000, 0x3f800000, 0x3f000000, 0x00000000, // def c7, 0.5, 1, 0.5, 0
+ 0x0200001f, 0x80000000, 0xb0030000, // dcl t0.xy
+ 0x0200001f, 0x90000000, 0xa00f0800, // dcl_2d s0
+ 0x03000005, 0x80030000, 0xb0e40000, 0xa0c90006, // mul r0.xy, t0, c6.yzxw
+ 0x02000001, 0x80030001, 0xa0e40006, // mov r1.xy, c6
+ 0x04000004, 0x80010002, 0xb0000000, 0x80550001, 0xa0aa0000, // mad r2.x, t0.x, r1.y, c0.z
+ 0x02000001, 0x80020002, 0xb0550000, // mov r2.y, t0.y
+ 0x03000042, 0x800f0000, 0x80e40000, 0xa0e40800, // texld r0, r0, s0
+ 0x03000042, 0x800f0002, 0x80e40002, 0xa0e40800, // texld r2, r2, s0
+ 0x03000005, 0x80080000, 0x80aa0000, 0xa0000003, // mul r0.w, r0.z, c3.x
+ 0x04000004, 0x80080000, 0x80550000, 0xa0550003, 0x80ff0000, // mad r0.w, r0.y, c3.y, r0.w
+ 0x04000004, 0x80010003, 0x80000000, 0xa0aa0003, 0x80ff0000, // mad r3.x, r0.x, c3.z, r0.w
+ 0x03000005, 0x80080000, 0x80aa0000, 0xa0000004, // mul r0.w, r0.z, c4.x
+ 0x04000004, 0x80080000, 0x80550000, 0xa0550004, 0x80ff0000, // mad r0.w, r0.y, c4.y, r0.w
+ 0x04000004, 0x80020003, 0x80000000, 0xa0aa0004, 0x80ff0000, // mad r3.y, r0.x, c4.z, r0.w
+ 0x03000005, 0x80080002, 0x80aa0000, 0xa0000005, // mul r2.w, r0.z, c5.x
+ 0x04000004, 0x80080002, 0x80550000, 0xa0550005, 0x80ff0002, // mad r2.w, r0.y, c5.y, r2.w
+ 0x04000004, 0x80040003, 0x80000000, 0xa0aa0005, 0x80ff0002, // mad r3.z, r0.x, c5.z, r2.w
+ 0x03000002, 0x80070000, 0x80e40003, 0xa0e40001, // add r0.xyz, r3, c1
+ 0x02000001, 0x80080000, 0xa0ff0006, // mov r0.w, c6.w
+ 0x03000005, 0x80080002, 0x80aa0002, 0xa0000003, // mul r2.w, r2.z, c3.x
+ 0x04000004, 0x80080002, 0x80550002, 0xa0550003, 0x80ff0002, // mad r2.w, r2.y, c3.y, r2.w
+ 0x04000004, 0x80040003, 0x80000002, 0xa0aa0003, 0x80ff0002, // mad r3.z, r2.x, c3.z, r2.w
+ 0x03000005, 0x80080002, 0x80aa0002, 0xa0000004, // mul r2.w, r2.z, c4.x
+ 0x04000004, 0x80080002, 0x80550002, 0xa0550004, 0x80ff0002, // mad r2.w, r2.y, c4.y, r2.w
+ 0x04000004, 0x80010003, 0x80000002, 0xa0aa0004, 0x80ff0002, // mad r3.x, r2.x, c4.z, r2.w
+ 0x03000005, 0x80080003, 0x80aa0002, 0xa0000005, // mul r3.w, r2.z, c5.x
+ 0x04000004, 0x80080003, 0x80550002, 0xa0550005, 0x80ff0003, // mad r3.w, r2.y, c5.y, r3.w
+ 0x04000004, 0x80020003, 0x80000002, 0xa0aa0005, 0x80ff0003, // mad r3.y, r2.x, c5.z, r3.w
+ 0x03000002, 0x80050002, 0x80c90000, 0x80e40003, // add r2.xz, r0.yzxw, r3
+ 0x03000002, 0x80020002, 0x80ff0000, 0x80550003, // add r2.y, r0.w, r3.y
+ 0x02000001, 0x80110000, 0x80aa0000, // mov_sat r0.x, r0.z
+ 0x02000001, 0x80070003, 0xa0e40007, // mov r3.xyz, c7
+ 0x04000004, 0x80160000, 0x80d20002, 0x80d20003, 0xa0d20002, // mad_sat r0.yz, r2.zxyw, r3.zxyw, c2.zxyw
+ 0x04000004, 0x80180000, 0x80aa0002, 0x80aa0003, 0xa0aa0002, // mad_sat r0.w, r2.z, r3.z, c2.z
+ 0x03000005, 0x80010001, 0x80000001, 0xa0000000, // mul r1.x, r1.x, c0.x
+ 0x04000004, 0x80010001, 0xb0000000, 0xa0000000, 0x81000001, // mad r1.x, t0.x, c0.x, -r1.x
+ 0x04000058, 0x800f0000, 0x80000001, 0xa0ff0003, 0x80e40000, // cmp r0, r1.x, c3.w, r0
+ 0x02000001, 0x800f0800, 0x80e40000, // mov oC0, r0
+ 0x0000ffff
+ };
+
+ /* RGB to UYVY is same as YUY2 above except for the order of yuv components.
+ * UYVY is defined.
+ */
+ static DWORD const aPSCodeRGBtoUYVY[] =
+ {
+ 0xffff0200, // ps_2_0
+ 0x05000051, 0xa00f0001, 0xbd84816f, 0xbf00ff97, 0xbf00ff97, 0x00000000, // def c1, -0.0647, -0.503899992, -0.503899992, 0
+ 0x05000051, 0xa00f0002, 0xbe80ff97, 0xbd04816f, 0x00000000, 0x00000000, // def c2, -0.251949996, -0.03235, 0, 0
+ 0x05000051, 0xa00f0003, 0x3dc816f0, 0x3f00ff97, 0x3e83fe5d, 0x00000000, // def c3, 0.0976999998, 0.503899992, 0.257800013, 0
+ 0x05000051, 0xa00f0004, 0x3ee00000, 0xbe9404ea, 0xbe17f62b, 0x00000000, // def c4, 0.4375, -0.289099991, -0.148399994, 0
+ 0x05000051, 0xa00f0005, 0xbd8ff972, 0xbebc01a3, 0x3ee00000, 0x00000000, // def c5, -0.0702999979, -0.367199987, 0.4375, 0
+ 0x05000051, 0xa00f0006, 0x3f000000, 0x40000000, 0x3f800000, 0xbf00ff97, // def c6, 0.5, 2, 1, -0.503899992
+ 0x05000051, 0xa00f0007, 0x3f000000, 0x3f000000, 0x3f800000, 0x00000000, // def c7, 0.5, 0.5, 1, 0
+ 0x0200001f, 0x80000000, 0xb0030000, // dcl t0.xy
+ 0x0200001f, 0x90000000, 0xa00f0800, // dcl_2d s0
+ 0x03000005, 0x80030000, 0xb0e40000, 0xa0c90006, // mul r0.xy, t0, c6.yzxw
+ 0x02000001, 0x80030001, 0xa0e40006, // mov r1.xy, c6
+ 0x04000004, 0x80010002, 0xb0000000, 0x80550001, 0xa0aa0000, // mad r2.x, t0.x, r1.y, c0.z
+ 0x02000001, 0x80020002, 0xb0550000, // mov r2.y, t0.y
+ 0x03000042, 0x800f0000, 0x80e40000, 0xa0e40800, // texld r0, r0, s0
+ 0x03000042, 0x800f0002, 0x80e40002, 0xa0e40800, // texld r2, r2, s0
+ 0x03000005, 0x80080000, 0x80aa0000, 0xa0000003, // mul r0.w, r0.z, c3.x
+ 0x04000004, 0x80080000, 0x80550000, 0xa0550003, 0x80ff0000, // mad r0.w, r0.y, c3.y, r0.w
+ 0x04000004, 0x80010003, 0x80000000, 0xa0aa0003, 0x80ff0000, // mad r3.x, r0.x, c3.z, r0.w
+ 0x03000005, 0x80080000, 0x80aa0000, 0xa0000004, // mul r0.w, r0.z, c4.x
+ 0x04000004, 0x80080000, 0x80550000, 0xa0550004, 0x80ff0000, // mad r0.w, r0.y, c4.y, r0.w
+ 0x04000004, 0x80020003, 0x80000000, 0xa0aa0004, 0x80ff0000, // mad r3.y, r0.x, c4.z, r0.w
+ 0x03000005, 0x80080002, 0x80aa0000, 0xa0000005, // mul r2.w, r0.z, c5.x
+ 0x04000004, 0x80080002, 0x80550000, 0xa0550005, 0x80ff0002, // mad r2.w, r0.y, c5.y, r2.w
+ 0x04000004, 0x80040003, 0x80000000, 0xa0aa0005, 0x80ff0002, // mad r3.z, r0.x, c5.z, r2.w
+ 0x03000002, 0x80070000, 0x80e40003, 0xa0e40001, // add r0.xyz, r3, c1
+ 0x02000001, 0x80080000, 0xa0ff0006, // mov r0.w, c6.w
+ 0x03000005, 0x80080002, 0x80aa0002, 0xa0000003, // mul r2.w, r2.z, c3.x
+ 0x04000004, 0x80080002, 0x80550002, 0xa0550003, 0x80ff0002, // mad r2.w, r2.y, c3.y, r2.w
+ 0x04000004, 0x80020003, 0x80000002, 0xa0aa0003, 0x80ff0002, // mad r3.y, r2.x, c3.z, r2.w
+ 0x03000005, 0x80080002, 0x80aa0002, 0xa0000004, // mul r2.w, r2.z, c4.x
+ 0x04000004, 0x80080002, 0x80550002, 0xa0550004, 0x80ff0002, // mad r2.w, r2.y, c4.y, r2.w
+ 0x04000004, 0x80010003, 0x80000002, 0xa0aa0004, 0x80ff0002, // mad r3.x, r2.x, c4.z, r2.w
+ 0x03000005, 0x80080003, 0x80aa0002, 0xa0000005, // mul r3.w, r2.z, c5.x
+ 0x04000004, 0x80080003, 0x80550002, 0xa0550005, 0x80ff0003, // mad r3.w, r2.y, c5.y, r3.w
+ 0x04000004, 0x80040003, 0x80000002, 0xa0aa0005, 0x80ff0003, // mad r3.z, r2.x, c5.z, r3.w
+ 0x03000002, 0x80010002, 0x80550000, 0x80000003, // add r2.x, r0.y, r3.x
+ 0x03000002, 0x80020002, 0x80000000, 0x80550003, // add r2.y, r0.x, r3.y
+ 0x03000002, 0x80040002, 0x80ff0000, 0x80aa0003, // add r2.z, r0.w, r3.z
+ 0x02000001, 0x80120000, 0x80aa0000, // mov_sat r0.y, r0.z
+ 0x02000001, 0x80070003, 0xa0e40007, // mov r3.xyz, c7
+ 0x04000004, 0x80110000, 0x80000002, 0x80000003, 0xa0000002, // mad_sat r0.x, r2.x, r3.x, c2.x
+ 0x04000004, 0x80140000, 0x80550002, 0x80550003, 0xa0550002, // mad_sat r0.z, r2.y, r3.y, c2.y
+ 0x04000004, 0x80180000, 0x80aa0002, 0x80aa0003, 0xa0aa0002, // mad_sat r0.w, r2.z, r3.z, c2.z
+ 0x03000005, 0x80010001, 0x80000001, 0xa0000000, // mul r1.x, r1.x, c0.x
+ 0x04000004, 0x80010001, 0xb0000000, 0xa0000000, 0x81000001, // mad r1.x, t0.x, c0.x, -r1.x
+ 0x04000058, 0x800f0000, 0x80000001, 0xa0ff0003, 0x80e40000, // cmp r0, r1.x, c3.w, r0
+ 0x02000001, 0x800f0800, 0x80e40000, // mov oC0, r0
+ 0x0000ffff
+ };
+
+ switch (d3dfmtFrom)
+ {
+ /*
+ * Emulated to ARGB
+ */
+ case D3DFMT_A8B8G8R8:
+ {
+ if (d3dfmtTo == D3DFMT_A8R8G8B8)
+ {
+ pResult->paVS = aVSCode;
+ pResult->paPS = aPSCodeSwapRB;
+
+ return D3D_OK;
+ }
+ } break;
+ case D3DFMT_UYVY:
+ {
+ if (d3dfmtTo == D3DFMT_A8R8G8B8)
+ {
+ pResult->paVS = aVSCode;
+ pResult->paPS = aPSCodeUYVYtoRGB;
+
+ return D3D_OK;
+ }
+ } break;
+ case D3DFMT_YUY2:
+ {
+ if (d3dfmtTo == D3DFMT_A8R8G8B8)
+ {
+ pResult->paVS = aVSCode;
+ pResult->paPS = aPSCodeYUY2toRGB;
+
+ return D3D_OK;
+ }
+ } break;
+
+ /*
+ * ARGB to emulated.
+ */
+ case D3DFMT_A8R8G8B8:
+ {
+ if (d3dfmtTo == D3DFMT_A8B8G8R8)
+ {
+ pResult->paVS = aVSCode;
+ pResult->paPS = aPSCodeSwapRB;
+
+ return D3D_OK;
+ }
+ else if (d3dfmtTo == D3DFMT_UYVY)
+ {
+ pResult->paVS = aVSCode;
+ pResult->paPS = aPSCodeRGBtoUYVY;
+
+ return D3D_OK;
+ }
+ else if (d3dfmtTo == D3DFMT_YUY2)
+ {
+ pResult->paVS = aVSCode;
+ pResult->paPS = aPSCodeRGBtoYUY2;
+
+ return D3D_OK;
+ }
+ } break;
+
+ default:
+ break;
+ }
+
+ return E_NOTIMPL;
+}
+
+class D3D9Conversion
+{
+ private:
+ IDirect3DDevice9Ex *mpDevice;
+
+ /* State objects. */
+ IDirect3DVertexBuffer9 *mpVB;
+ IDirect3DVertexDeclaration9 *mpVertexDecl;
+ IDirect3DVertexShader9 *mpVS;
+ IDirect3DPixelShader9 *mpPS;
+
+ D3D9ConversionParameters mParameters;
+
+ typedef struct D3DSamplerState
+ {
+ D3DSAMPLERSTATETYPE Type;
+ DWORD Value;
+ } D3DSamplerState;
+
+ /* Saved context. */
+ struct
+ {
+ DWORD dwCull;
+ DWORD dwZEnable;
+ IDirect3DSurface9 *pRT;
+ IDirect3DVertexShader9 *pVS;
+ IDirect3DPixelShader9 *pPS;
+ IDirect3DBaseTexture9 *pTexture;
+ float aVSConstantData[4];
+ float aPSConstantData[4];
+ D3DSamplerState aSamplerState[3];
+ } mSaved;
+
+ void destroyConversion();
+ HRESULT saveContextState();
+ HRESULT restoreContextState(PVMSVGA3DCONTEXT pContext);
+ HRESULT initConversion();
+ HRESULT setConversionState(IDirect3DTexture9 *pSourceTexture,
+ uint32_t cWidth,
+ uint32_t cHeight);
+
+ public:
+ enum Direction
+ {
+ FromEmulated,
+ ToEmulated,
+ };
+
+ D3D9Conversion(IDirect3DDevice9Ex *pDevice);
+ ~D3D9Conversion();
+
+ HRESULT SelectConversion(D3DFORMAT d3dfmtFrom, D3DFORMAT d3dfmtTo);
+ HRESULT ConvertTexture(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface,
+ Direction enmDirection);
+};
+
+D3D9Conversion::D3D9Conversion(IDirect3DDevice9Ex *pDevice)
+ :
+ mpDevice(pDevice),
+ mpVB(0),
+ mpVertexDecl(0),
+ mpVS(0),
+ mpPS(0)
+{
+ mParameters.paVS = 0;
+ mParameters.paPS = 0;
+ mSaved.dwCull = D3DCULL_NONE;
+ mSaved.dwZEnable = D3DZB_FALSE;
+ mSaved.pRT = 0;
+ mSaved.pVS = 0;
+ mSaved.pPS = 0;
+ mSaved.pTexture = 0;
+ RT_ZERO(mSaved.aVSConstantData);
+ RT_ZERO(mSaved.aPSConstantData);
+ mSaved.aSamplerState[0].Type = D3DSAMP_MAGFILTER;
+ mSaved.aSamplerState[0].Value = D3DTEXF_POINT;
+ mSaved.aSamplerState[1].Type = D3DSAMP_MINFILTER;
+ mSaved.aSamplerState[1].Value = D3DTEXF_POINT;
+ mSaved.aSamplerState[2].Type = D3DSAMP_MIPFILTER;
+ mSaved.aSamplerState[2].Value = D3DTEXF_NONE;
+}
+
+D3D9Conversion::~D3D9Conversion()
+{
+ destroyConversion();
+}
+
+void D3D9Conversion::destroyConversion()
+{
+ D3D_RELEASE(mpVertexDecl);
+ D3D_RELEASE(mpVB);
+ D3D_RELEASE(mpVS);
+ D3D_RELEASE(mpPS);
+}
+
+HRESULT D3D9Conversion::saveContextState()
+{
+ /*
+ * This is probably faster than
+ * IDirect3DStateBlock9 *mpStateBlock;
+ * mpDevice->CreateStateBlock(D3DSBT_ALL, &mpStateBlock);
+ */
+ HRESULT hr = mpDevice->GetRenderState(D3DRS_CULLMODE, &mSaved.dwCull);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetRenderState(D3DRS_ZENABLE, &mSaved.dwZEnable);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetRenderTarget(0, &mSaved.pRT);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetVertexShader(&mSaved.pVS);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetPixelShader(&mSaved.pPS);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetTexture(0, &mSaved.pTexture);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetVertexShaderConstantF(0, mSaved.aVSConstantData, 1);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->GetPixelShaderConstantF(0, mSaved.aPSConstantData, 1);
+ AssertReturn(hr == D3D_OK, hr);
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(mSaved.aSamplerState); ++i)
+ {
+ hr = mpDevice->GetSamplerState(0, mSaved.aSamplerState[i].Type, &mSaved.aSamplerState[i].Value);
+ AssertReturn(hr == D3D_OK, hr);
+ }
+
+ return hr;
+}
+
+HRESULT D3D9Conversion::restoreContextState(PVMSVGA3DCONTEXT pContext)
+{
+ HRESULT hr = mpDevice->SetRenderState(D3DRS_CULLMODE, mSaved.dwCull);
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetRenderState(D3DRS_ZENABLE, mSaved.dwZEnable);
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetRenderTarget(0, mSaved.pRT);
+ D3D_RELEASE(mSaved.pRT); /* GetRenderTarget increases the internal reference count. */
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetVertexDeclaration(pContext->d3dState.pVertexDecl);
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetVertexShader(mSaved.pVS);
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetPixelShader(mSaved.pPS);
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetTexture(0, mSaved.pTexture);
+ D3D_RELEASE(mSaved.pTexture); /* GetTexture increases the internal reference count. */
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetVertexShaderConstantF(0, mSaved.aVSConstantData, 1);
+ Assert(hr == D3D_OK);
+
+ hr = mpDevice->SetPixelShaderConstantF(0, mSaved.aPSConstantData, 1);
+ Assert(hr == D3D_OK);
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(mSaved.aSamplerState); ++i)
+ {
+ hr = mpDevice->SetSamplerState(0, mSaved.aSamplerState[i].Type, mSaved.aSamplerState[i].Value);
+ Assert(hr == D3D_OK);
+ }
+
+ return hr;
+}
+
+HRESULT D3D9Conversion::initConversion()
+{
+ static D3DVERTEXELEMENT9 const aVertexElements[] =
+ {
+ {0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
+ {0, 8, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
+ D3DDECL_END()
+ };
+
+ HRESULT hr = mpDevice->CreateVertexDeclaration(aVertexElements, &mpVertexDecl);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->CreateVertexBuffer(6 * sizeof(Vertex),
+ 0, /* D3DUSAGE_* */
+ 0, /* FVF */
+ D3DPOOL_DEFAULT,
+ &mpVB,
+ 0);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->CreateVertexShader(mParameters.paVS, &mpVS);
+ AssertReturn(hr == D3D_OK, hr);
+
+ hr = mpDevice->CreatePixelShader(mParameters.paPS, &mpPS);
+ AssertReturn(hr == D3D_OK, hr);
+
+ return hr;
+}
+
+HRESULT D3D9Conversion::setConversionState(IDirect3DTexture9 *pSourceTexture,
+ uint32_t cWidth,
+ uint32_t cHeight)
+{
+ /* Subtract 0.5 to line up the pixel centers with texels
+ * https://docs.microsoft.com/en-us/windows/win32/direct3d9/directly-mapping-texels-to-pixels
+ */
+ float const xLeft = -0.5f;
+ float const xRight = (float)(cWidth - 1) - 0.5f;
+ float const yTop = -0.5f;
+ float const yBottom = (float)(cHeight - 1) - 0.5f;
+
+ Vertex const aVertices[] =
+ {
+ { xLeft, yTop, 0.0f, 0.0f},
+ { xRight, yTop, 1.0f, 0.0f},
+ { xRight, yBottom, 1.0f, 1.0f},
+
+ { xLeft, yTop, 0.0f, 0.0f},
+ { xRight, yBottom, 1.0f, 1.0f},
+ { xLeft, yBottom, 0.0f, 1.0f},
+ };
+
+ HRESULT hr = d3dCopyToVertexBuffer(mpVB, aVertices, sizeof(aVertices));
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* No need to save the stream source, because vmsvga3dDrawPrimitives always sets it. */
+ hr = mpDevice->SetStreamSource(0, mpVB, 0, sizeof(Vertex));
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Stored in pContext->d3dState.pVertexDecl. */
+ hr = mpDevice->SetVertexDeclaration(mpVertexDecl);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetVertexShader(mpVS);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetPixelShader(mpPS);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetTexture(0, pSourceTexture);
+ AssertReturn(hr == D3D_OK, hr);
+
+ float aTextureInfo[4];
+ aTextureInfo[0] = (float)cWidth;
+ aTextureInfo[1] = (float)cHeight;
+ aTextureInfo[2] = 1.0f / (float)cWidth; /* Pixel width in texture coords. */
+ aTextureInfo[3] = 1.0f / (float)cHeight; /* Pixel height in texture coords. */
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetVertexShaderConstantF(0, aTextureInfo, 1);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetPixelShaderConstantF(0, aTextureInfo, 1);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Saved by saveContextState. */
+ hr = mpDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
+ AssertReturn(hr == D3D_OK, hr);
+ hr = mpDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
+ AssertReturn(hr == D3D_OK, hr);
+ hr = mpDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
+ AssertReturn(hr == D3D_OK, hr);
+
+ return hr;
+}
+
+
+HRESULT D3D9Conversion::SelectConversion(D3DFORMAT d3dfmtFrom, D3DFORMAT d3dfmtTo)
+{
+ /** @todo d3d9SelectConversion should be a member. Move the code here? */
+ HRESULT hr = d3d9SelectConversion(d3dfmtFrom, d3dfmtTo, &mParameters);
+ return hr;
+}
+
+HRESULT D3D9Conversion::ConvertTexture(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface,
+ Direction enmDirection)
+{
+ IDirect3DTexture9 *pSourceTexture;
+ IDirect3DTexture9 *pTargetTexture;
+ D3D9TextureType enmTargetType;
+
+ if (enmDirection == FromEmulated)
+ {
+ pSourceTexture = pSurface->emulated.pTexture;
+ pTargetTexture = pSurface->u.pTexture;
+ enmTargetType = D3D9TextureType_Texture;
+ }
+ else if (enmDirection == ToEmulated)
+ {
+ pSourceTexture = pSurface->u.pTexture;
+ pTargetTexture = pSurface->emulated.pTexture;
+ enmTargetType = D3D9TextureType_Emulated;
+ }
+ else
+ AssertFailedReturn(E_INVALIDARG);
+
+ AssertPtrReturn(pSourceTexture, E_INVALIDARG);
+ AssertPtrReturn(pTargetTexture, E_INVALIDARG);
+
+ HRESULT hr = saveContextState();
+ if (hr == D3D_OK)
+ {
+ hr = initConversion();
+ if (hr == D3D_OK)
+ {
+ uint32_t const cWidth = pSurface->paMipmapLevels[0].mipmapSize.width;
+ uint32_t const cHeight = pSurface->paMipmapLevels[0].mipmapSize.height;
+
+ hr = setConversionState(pSourceTexture, cWidth, cHeight);
+ if (hr == D3D_OK)
+ {
+ hr = mpDevice->BeginScene();
+ Assert(hr == D3D_OK);
+ if (hr == D3D_OK)
+ {
+ for (DWORD iFace = 0; iFace < pSurface->cFaces; ++iFace)
+ {
+ DWORD const cMipLevels = pTargetTexture->GetLevelCount();
+ for (DWORD iMipmap = 0; iMipmap < cMipLevels && hr == D3D_OK; ++iMipmap)
+ {
+ IDirect3DSurface9 *pRT = NULL;
+ hr = D3D9GetTextureLevel(pSurface, enmTargetType, iFace, iMipmap, &pRT);
+ Assert(hr == D3D_OK);
+ if (hr == D3D_OK)
+ {
+ hr = mpDevice->SetRenderTarget(0, pRT);
+ Assert(hr == D3D_OK);
+ if (hr == D3D_OK)
+ {
+ hr = mpDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
+ Assert(hr == D3D_OK);
+ }
+
+ D3D_RELEASE(pRT);
+ }
+ }
+ }
+
+ hr = mpDevice->EndScene();
+ Assert(hr == D3D_OK);
+ }
+ }
+ }
+
+ hr = restoreContextState(pContext);
+ }
+
+ destroyConversion();
+
+ return hr;
+}
+
+
+HRESULT D3D9UpdateTexture(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface)
+{
+ HRESULT hr = S_OK;
+
+ if (pSurface->formatD3D == pSurface->d3dfmtRequested)
+ {
+ hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
+ }
+ else
+ {
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->emulated.pTexture);
+ if (hr == D3D_OK)
+ {
+ D3D9Conversion conv(pContext->pDevice);
+ hr = conv.SelectConversion(pSurface->d3dfmtRequested, pSurface->formatD3D);
+ if (hr == D3D_OK)
+ {
+ hr = conv.ConvertTexture(pContext, pSurface, D3D9Conversion::FromEmulated);
+ }
+ }
+ }
+ else
+ {
+ /** @todo Cubemaps and maybe volume textures. */
+ hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pTexture, pSurface->u.pTexture);
+ }
+ }
+
+ return hr;
+}
+
+HRESULT D3D9GetSurfaceLevel(PVMSVGA3DSURFACE pSurface,
+ uint32_t uFace,
+ uint32_t uMipmap,
+ bool fBounce,
+ IDirect3DSurface9 **ppD3DSurface)
+{
+ HRESULT hr;
+
+ if ( pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ D3D9TextureType enmType;
+ if (fBounce)
+ enmType = D3D9TextureType_Bounce;
+ else if (pSurface->formatD3D != pSurface->d3dfmtRequested)
+ enmType = D3D9TextureType_Emulated;
+ else
+ enmType = D3D9TextureType_Texture;
+
+ hr = D3D9GetTextureLevel(pSurface, enmType, uFace, uMipmap, ppD3DSurface);
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE)
+ {
+ pSurface->u.pSurface->AddRef();
+ *ppD3DSurface = pSurface->u.pSurface;
+ hr = S_OK;
+ }
+ else
+ {
+ AssertMsgFailed(("No surface for type %d\n", pSurface->enmD3DResType));
+ hr = E_INVALIDARG;
+ }
+
+ return hr;
+}
+
+/** Copy the texture content to the bounce texture.
+ */
+HRESULT D3D9GetRenderTargetData(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t uFace,
+ uint32_t uMipmap)
+{
+ HRESULT hr;
+
+ /* Get the corresponding bounce texture surface. */
+ IDirect3DSurface9 *pDst = NULL;
+ hr = D3D9GetSurfaceLevel(pSurface, uFace, uMipmap, true, &pDst);
+ AssertReturn(hr == D3D_OK, hr);
+
+ /* Get the actual texture surface, emulated or actual. */
+ IDirect3DSurface9 *pSrc = NULL;
+ hr = D3D9GetSurfaceLevel(pSurface, uFace, uMipmap, false, &pSrc);
+ AssertReturnStmt(hr == D3D_OK,
+ D3D_RELEASE(pDst), hr);
+
+ Assert(pDst != pSrc);
+
+ if (pSurface->formatD3D == pSurface->d3dfmtRequested)
+ {
+ hr = pContext->pDevice->GetRenderTargetData(pSrc, pDst);
+ AssertMsg(hr == D3D_OK, ("GetRenderTargetData failed with %x\n", hr));
+ }
+ else
+ {
+ D3D9Conversion conv(pContext->pDevice);
+ hr = conv.SelectConversion(pSurface->formatD3D, pSurface->d3dfmtRequested);
+ if (hr == D3D_OK)
+ {
+ hr = conv.ConvertTexture(pContext, pSurface, D3D9Conversion::ToEmulated);
+ }
+
+ if (hr == D3D_OK)
+ {
+ hr = pContext->pDevice->GetRenderTargetData(pSrc, pDst);
+ AssertMsg(hr == D3D_OK, ("GetRenderTargetData failed with %x\n", hr));
+ }
+ }
+
+ D3D_RELEASE(pSrc);
+ D3D_RELEASE(pDst);
+ return hr;
+}
+
+D3DFORMAT D3D9GetActualFormat(PVMSVGA3DSTATE pState, D3DFORMAT d3dfmtRequested)
+{
+ RT_NOREF(pState);
+
+ switch (d3dfmtRequested)
+ {
+ case D3DFMT_UYVY:
+ if (!pState->fSupportedFormatUYVY) return D3DFMT_A8R8G8B8;
+ break;
+ case D3DFMT_YUY2:
+ if (!pState->fSupportedFormatYUY2) return D3DFMT_A8R8G8B8;
+ break;
+ case D3DFMT_A8B8G8R8:
+ if (!pState->fSupportedFormatA8B8G8R8) return D3DFMT_A8R8G8B8;
+ break;
+ default:
+ break;
+ }
+
+ /* Use the requested format. No emulation required. */
+ return d3dfmtRequested;
+}
+
+bool D3D9CheckDeviceFormat(IDirect3D9 *pD3D9, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat)
+{
+ HRESULT hr = pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ D3DFMT_X8R8G8B8, /* assume standard 32-bit display mode */
+ Usage,
+ RType,
+ CheckFormat);
+ return (hr == D3D_OK);
+}
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
new file mode 100644
index 00000000..b39d58d8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
@@ -0,0 +1,6473 @@
+/* $Id: DevVGA-SVGA3d-win.cpp $ */
+/** @file
+ * DevVMWare - VMWare SVGA device
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/version.h>
+#include <VBox/err.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pgm.h>
+#include <VBox/AssertGuest.h>
+
+#include <iprt/assert.h>
+#include <iprt/semaphore.h>
+#include <iprt/uuid.h>
+#include <iprt/mem.h>
+#include <iprt/avl.h>
+
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#include "DevVGA-SVGA3d-internal.h"
+
+/* Enable to disassemble defined shaders. */
+#if defined(DEBUG) && 0 /* Disabled as we don't have the DirectX SDK avaible atm. */
+#define DUMP_SHADER_DISASSEMBLY
+#endif
+
+#ifdef DUMP_SHADER_DISASSEMBLY
+#include <d3dx9shader.h>
+#endif
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+
+#define FOURCC_INTZ (D3DFORMAT)MAKEFOURCC('I', 'N', 'T', 'Z')
+#define FOURCC_NULL (D3DFORMAT)MAKEFOURCC('N', 'U', 'L', 'L')
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+
+typedef struct
+{
+ DWORD Usage;
+ D3DRESOURCETYPE ResourceType;
+ SVGA3dFormatOp FormatOp;
+} VMSVGA3DFORMATSUPPORT;
+
+
+/*********************************************************************************************************************************
+* Global Variables *
+*********************************************************************************************************************************/
+static VMSVGA3DFORMATSUPPORT const g_aFormatSupport[] =
+{
+ {
+ 0,
+ D3DRTYPE_SURFACE,
+ SVGA3DFORMAT_OP_OFFSCREENPLAIN,
+ },
+ {
+ D3DUSAGE_RENDERTARGET,
+ D3DRTYPE_SURFACE,
+ (SVGA3dFormatOp) (SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET | SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET),
+ },
+ {
+ D3DUSAGE_AUTOGENMIPMAP,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_AUTOGENMIPMAP,
+ },
+ {
+ D3DUSAGE_DMAP,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_DMAP,
+ },
+ {
+ 0,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_TEXTURE,
+ },
+ {
+ 0,
+ D3DRTYPE_CUBETEXTURE,
+ SVGA3DFORMAT_OP_CUBETEXTURE,
+ },
+ {
+ 0,
+ D3DRTYPE_VOLUMETEXTURE,
+ SVGA3DFORMAT_OP_VOLUMETEXTURE,
+ },
+ {
+ D3DUSAGE_QUERY_VERTEXTEXTURE,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_VERTEXTEXTURE,
+ },
+ {
+ D3DUSAGE_QUERY_LEGACYBUMPMAP,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_BUMPMAP,
+ },
+ {
+ D3DUSAGE_QUERY_SRGBREAD,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_SRGBREAD,
+ },
+ {
+ D3DUSAGE_QUERY_SRGBWRITE,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_SRGBWRITE,
+ }
+};
+
+static VMSVGA3DFORMATSUPPORT const g_aFeatureReject[] =
+{
+ {
+ D3DUSAGE_QUERY_WRAPANDMIP,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP
+ },
+ {
+ D3DUSAGE_QUERY_FILTER,
+ D3DRTYPE_TEXTURE,
+ SVGA3DFORMAT_OP_NOFILTER
+ },
+ {
+ D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING,
+ D3DRTYPE_TEXTURE, /* ?? */
+ SVGA3DFORMAT_OP_NOALPHABLEND
+ },
+};
+
+
+/*********************************************************************************************************************************
+* Internal Functions *
+*********************************************************************************************************************************/
+static void vmsvgaDumpD3DCaps(D3DCAPS9 *pCaps, D3DADAPTER_IDENTIFIER9 const *pai9);
+static DECLCALLBACK(int) vmsvga3dBackContextDestroy(PVGASTATECC pThisCC, uint32_t cid);
+static DECLCALLBACK(int) vmsvga3dBackSetRenderState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState);
+static DECLCALLBACK(int) vmsvga3dBackSetRenderTarget(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target);
+static DECLCALLBACK(int) vmsvga3dBackSetTextureState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState);
+static DECLCALLBACK(int) vmsvga3dBackSetViewPort(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect);
+static DECLCALLBACK(int) vmsvga3dBackSetScissorRect(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect);
+static DECLCALLBACK(int) vmsvga3dBackShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type);
+static DECLCALLBACK(int) vmsvga3dBackShaderSet(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid);
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryDelete(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext);
+static DECLCALLBACK(int) vmsvga3dBackCreateTexture(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface);
+
+
+DECLINLINE(D3DCUBEMAP_FACES) vmsvga3dCubemapFaceFromIndex(uint32_t iFace)
+{
+ D3DCUBEMAP_FACES Face;
+ switch (iFace)
+ {
+ case 0: Face = D3DCUBEMAP_FACE_POSITIVE_X; break;
+ case 1: Face = D3DCUBEMAP_FACE_NEGATIVE_X; break;
+ case 2: Face = D3DCUBEMAP_FACE_POSITIVE_Y; break;
+ case 3: Face = D3DCUBEMAP_FACE_NEGATIVE_Y; break;
+ case 4: Face = D3DCUBEMAP_FACE_POSITIVE_Z; break;
+ default:
+ case 5: Face = D3DCUBEMAP_FACE_NEGATIVE_Z; break;
+ }
+ return Face;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackInit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ RT_NOREF(pDevIns, pThis);
+
+ PVMSVGA3DSTATE pState;
+ pThisCC->svga.p3dState = pState = (PVMSVGA3DSTATE)RTMemAllocZ(sizeof(VMSVGA3DSTATE));
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+
+ /* Create event semaphore. */
+ int rc = RTSemEventCreate(&pState->WndRequestSem);
+ if (RT_FAILURE(rc))
+ {
+ Log(("%s: Failed to create event semaphore for window handling.\n", __FUNCTION__));
+ return rc;
+ }
+
+ /* Create the async IO thread. */
+ rc = RTThreadCreate(&pState->pWindowThread, vmsvga3dWindowThread, pState->WndRequestSem, 0, RTTHREADTYPE_GUI, 0, "VMSVGA3DWND");
+ if (RT_FAILURE(rc))
+ {
+ AssertMsgFailed(("%s: Async IO Thread creation for 3d window handling failed rc=%d\n", __FUNCTION__, rc));
+ return rc;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackPowerOn(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+ HRESULT hr;
+ RT_NOREF(pDevIns, pThis);
+
+ if (pState->pD3D9)
+ return VINF_SUCCESS; /* already initialized (load state) */
+
+ /* Direct3DCreate9Ex was introduced in Vista, so resolve it dynamically. */
+ typedef HRESULT (WINAPI *PFNDIRECT3DCREATE9EX)(UINT, IDirect3D9Ex **);
+ PFNDIRECT3DCREATE9EX pfnDirect3dCreate9Ex = (PFNDIRECT3DCREATE9EX)RTLdrGetSystemSymbol("d3d9.dll", "Direct3DCreate9Ex");
+ if (!pfnDirect3dCreate9Ex)
+ return PDMDevHlpVMSetError(pDevIns, VERR_SYMBOL_NOT_FOUND, RT_SRC_POS,
+ "vmsvga3d: Unable to locate Direct3DCreate9Ex. This feature requires Vista and later.");
+ hr = pfnDirect3dCreate9Ex(D3D_SDK_VERSION, &pState->pD3D9);
+ AssertReturn(hr == D3D_OK, VERR_INTERNAL_ERROR);
+
+ D3DADAPTER_IDENTIFIER9 ai9;
+ hr = pState->pD3D9->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &ai9);
+ AssertReturnStmt(hr == D3D_OK, D3D_RELEASE(pState->pD3D9), VERR_INTERNAL_ERROR);
+
+ hr = pState->pD3D9->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &pState->caps);
+ AssertReturnStmt(hr == D3D_OK, D3D_RELEASE(pState->pD3D9), VERR_INTERNAL_ERROR);
+
+ vmsvgaDumpD3DCaps(&pState->caps, &ai9);
+
+ if (!D3D9CheckDeviceFormat(pState->pD3D9, 0, D3DRTYPE_TEXTURE, FOURCC_INTZ))
+ {
+ /* INTZ support is essential to support depth surfaces used as textures. */
+ LogRel(("VMSVGA: texture format INTZ not supported!!!\n"));
+ }
+ else
+ pState->fSupportedSurfaceINTZ = true;
+
+ if (!D3D9CheckDeviceFormat(pState->pD3D9, D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, FOURCC_NULL))
+ {
+ /* NULL is a dummy surface which can be used as a render target to save memory. */
+ LogRel(("VMSVGA: surface format NULL not supported!!!\n"));
+ }
+ else
+ pState->fSupportedSurfaceNULL = true;
+
+ /* Check if DX9 depth stencil textures are supported */
+ if (!D3D9CheckDeviceFormat(pState->pD3D9, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_D16))
+ {
+ LogRel(("VMSVGA: texture format D3DFMT_D16 not supported\n"));
+ }
+
+ if (!D3D9CheckDeviceFormat(pState->pD3D9, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_D24X8))
+ {
+ LogRel(("VMSVGA: texture format D3DFMT_D24X8 not supported\n"));
+ }
+
+ if (!D3D9CheckDeviceFormat(pState->pD3D9, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_TEXTURE, D3DFMT_D24S8))
+ {
+ LogRel(("VMSVGA: texture format D3DFMT_D24S8 not supported\n"));
+ }
+
+ /* Check some formats must be emulated. */
+ if (D3D9CheckDeviceFormat(pState->pD3D9, 0, D3DRTYPE_TEXTURE, D3DFMT_UYVY))
+ {
+ /* Native UYVY support has better performance. */
+ LogRel(("VMSVGA: texture format D3DFMT_UYVY supported\n"));
+ pState->fSupportedFormatUYVY = true;
+ }
+
+ if (D3D9CheckDeviceFormat(pState->pD3D9, 0, D3DRTYPE_TEXTURE, D3DFMT_YUY2))
+ {
+ /* Native YUY2 support has better performance. */
+ LogRel(("VMSVGA: texture format D3DFMT_YUY2 supported\n"));
+ pState->fSupportedFormatYUY2 = true;
+ }
+
+ if (D3D9CheckDeviceFormat(pState->pD3D9, D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_A8B8G8R8))
+ {
+ /* Native A8B8G8R8 support is good for OpenGL application in the guest. */
+ LogRel(("VMSVGA: texture format D3DFMT_A8B8G8R8 supported\n"));
+ pState->fSupportedFormatA8B8G8R8 = true;
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackReset(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+
+ /* Destroy all leftover surfaces. */
+ for (uint32_t i = 0; i < pState->cSurfaces; i++)
+ {
+ if (pState->papSurfaces[i]->id != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceDestroy(pThisCC, pState->papSurfaces[i]->id);
+ }
+
+ /* Destroy all leftover contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ if (pState->papContexts[i]->id != SVGA3D_INVALID_ID)
+ vmsvga3dBackContextDestroy(pThisCC, pState->papContexts[i]->id);
+ }
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackTerminate(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pThisCC->svga.p3dState, VERR_NO_MEMORY);
+
+ int rc = vmsvga3dBackReset(pThisCC);
+ AssertRCReturn(rc, rc);
+
+ /* Terminate the window creation thread. */
+ rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_EXIT, 0, 0);
+ AssertRCReturn(rc, rc);
+
+ RTSemEventDestroy(pState->WndRequestSem);
+
+ D3D_RELEASE(pState->pD3D9);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(void) vmsvga3dBackUpdateHostScreenViewport(PVGASTATECC pThisCC, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport)
+{
+ /** @todo Scroll the screen content without requiring the guest to redraw. */
+ RT_NOREF(pThisCC, idScreen, pOldViewport);
+}
+
+static uint32_t vmsvga3dGetSurfaceFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps, D3DFORMAT format)
+{
+ NOREF(idx3dCaps);
+ HRESULT hr;
+ uint32_t result = 0;
+
+ /* Try if the format can be used for the primary display. */
+ hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ format,
+ 0,
+ D3DRTYPE_SURFACE,
+ format);
+
+ for (unsigned i = 0; i < RT_ELEMENTS(g_aFormatSupport); i++)
+ {
+ hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ D3DFMT_X8R8G8B8, /* assume standard 32-bit display mode */
+ g_aFormatSupport[i].Usage,
+ g_aFormatSupport[i].ResourceType,
+ format);
+ if (hr == D3D_OK)
+ result |= g_aFormatSupport[i].FormatOp;
+ }
+
+ /* Check for features only if the format is supported in any form. */
+ if (result)
+ {
+ for (unsigned i = 0; i < RT_ELEMENTS(g_aFeatureReject); i++)
+ {
+ hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ D3DFMT_X8R8G8B8, /* assume standard 32-bit display mode */
+ g_aFeatureReject[i].Usage,
+ g_aFeatureReject[i].ResourceType,
+ format);
+ if (hr != D3D_OK)
+ result |= g_aFeatureReject[i].FormatOp;
+ }
+ }
+
+ /** @todo missing:
+ *
+ * SVGA3DFORMAT_OP_PIXELSIZE
+ */
+
+ switch (idx3dCaps)
+ {
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
+ | SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+ | SVGA3DFORMAT_OP_DISPLAYMODE /* Should not be set for alpha formats. */
+ | SVGA3DFORMAT_OP_3DACCELERATION; /* implies OP_DISPLAYMODE */
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
+ | SVGA3DFORMAT_OP_CONVERT_TO_ARGB
+ | SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET;
+ break;
+ /* These formats can't be used as textures on AMD drivers (Intel works).
+ * Still report them as textures to the guest and emulate them in the device.
+ */
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ result |= SVGA3DFORMAT_OP_TEXTURE;
+ break;
+ }
+ Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+
+ return result;
+}
+
+static uint32_t vmsvga3dGetDepthFormatSupport(PVMSVGA3DSTATE pState3D, uint32_t idx3dCaps, D3DFORMAT format)
+{
+ RT_NOREF(idx3dCaps);
+ HRESULT hr;
+ uint32_t result = 0;
+
+ hr = pState3D->pD3D9->CheckDeviceFormat(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ D3DFMT_X8R8G8B8, /* assume standard 32-bit display mode */
+ D3DUSAGE_DEPTHSTENCIL,
+ D3DRTYPE_SURFACE,
+ format);
+ if (hr == D3D_OK)
+ result = SVGA3DFORMAT_OP_ZSTENCIL
+ | SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
+ | SVGA3DFORMAT_OP_TEXTURE /* Necessary for Ubuntu Unity */;
+
+ Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
+ return result;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackQueryCaps(PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ D3DCAPS9 *pCaps = &pState->caps;
+ int rc = VINF_SUCCESS;
+
+ *pu32Val = 0;
+
+ switch (idx3dCaps)
+ {
+ case SVGA3D_DEVCAP_3D:
+ *pu32Val = 1; /* boolean? */
+ break;
+
+ case SVGA3D_DEVCAP_MAX_LIGHTS:
+ *pu32Val = pCaps->MaxActiveLights;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURES:
+ *pu32Val = pCaps->MaxSimultaneousTextures;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_CLIP_PLANES:
+ *pu32Val = pCaps->MaxUserClipPlanes;
+ break;
+
+ case SVGA3D_DEVCAP_VERTEX_SHADER_VERSION:
+ switch (pCaps->VertexShaderVersion)
+ {
+ case D3DVS_VERSION(1,1):
+ *pu32Val = SVGA3DVSVERSION_11;
+ break;
+ case D3DVS_VERSION(2,0):
+ *pu32Val = SVGA3DVSVERSION_20;
+ break;
+ case D3DVS_VERSION(3,0):
+ *pu32Val = SVGA3DVSVERSION_30;
+ break;
+ case D3DVS_VERSION(4,0):
+ *pu32Val = SVGA3DVSVERSION_40;
+ break;
+ default:
+ LogRel(("VMSVGA: Unsupported vertex shader version %x\n", pCaps->VertexShaderVersion));
+ break;
+ }
+ break;
+
+ case SVGA3D_DEVCAP_VERTEX_SHADER:
+ /* boolean? */
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION:
+ switch (pCaps->PixelShaderVersion)
+ {
+ case D3DPS_VERSION(1,1):
+ *pu32Val = SVGA3DPSVERSION_11;
+ break;
+ case D3DPS_VERSION(1,2):
+ *pu32Val = SVGA3DPSVERSION_12;
+ break;
+ case D3DPS_VERSION(1,3):
+ *pu32Val = SVGA3DPSVERSION_13;
+ break;
+ case D3DPS_VERSION(1,4):
+ *pu32Val = SVGA3DPSVERSION_14;
+ break;
+ case D3DPS_VERSION(2,0):
+ *pu32Val = SVGA3DPSVERSION_20;
+ break;
+ case D3DPS_VERSION(3,0):
+ *pu32Val = SVGA3DPSVERSION_30;
+ break;
+ case D3DPS_VERSION(4,0):
+ *pu32Val = SVGA3DPSVERSION_40;
+ break;
+ default:
+ LogRel(("VMSVGA: Unsupported pixel shader version %x\n", pCaps->PixelShaderVersion));
+ break;
+ }
+ break;
+
+ case SVGA3D_DEVCAP_FRAGMENT_SHADER:
+ /* boolean? */
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_S23E8_TEXTURES:
+ case SVGA3D_DEVCAP_S10E5_TEXTURES:
+ /* Must be obsolete by now; surface format caps specify the same thing. */
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND:
+ break;
+
+ /*
+ * 2. The BUFFER_FORMAT capabilities are deprecated, and they always
+ * return TRUE. Even on physical hardware that does not support
+ * these formats natively, the SVGA3D device will provide an emulation
+ * which should be invisible to the guest OS.
+ */
+ case SVGA3D_DEVCAP_D16_BUFFER_FORMAT:
+ case SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT:
+ case SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT:
+ *pu32Val = 1;
+ break;
+
+ case SVGA3D_DEVCAP_QUERY_TYPES:
+ break;
+
+ case SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING:
+ break;
+
+ case SVGA3D_DEVCAP_MAX_POINT_SIZE:
+ AssertCompile(sizeof(uint32_t) == sizeof(float));
+ *(float *)pu32Val = pCaps->MaxPointSize;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_SHADER_TEXTURES:
+ /** @todo ?? */
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH:
+ *pu32Val = pCaps->MaxTextureWidth;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT:
+ *pu32Val = pCaps->MaxTextureHeight;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT:
+ *pu32Val = pCaps->MaxVolumeExtent;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT:
+ *pu32Val = pCaps->MaxTextureRepeat;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO:
+ *pu32Val = pCaps->MaxTextureAspectRatio;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY:
+ *pu32Val = pCaps->MaxAnisotropy;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT:
+ *pu32Val = pCaps->MaxPrimitiveCount;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_INDEX:
+ *pu32Val = pCaps->MaxVertexIndex;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS:
+ *pu32Val = pCaps->MaxVertexShader30InstructionSlots;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS:
+ *pu32Val = pCaps->MaxPixelShader30InstructionSlots;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS:
+ *pu32Val = pCaps->VS20Caps.NumTemps;
+ break;
+
+ case SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS:
+ *pu32Val = pCaps->PS20Caps.NumTemps;
+ break;
+
+ case SVGA3D_DEVCAP_TEXTURE_OPS:
+ break;
+
+ case SVGA3D_DEVCAP_DEAD4: /* SVGA3D_DEVCAP_MULTISAMPLE_NONMASKABLESAMPLES */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD5: /* SVGA3D_DEVCAP_MULTISAMPLE_MASKABLESAMPLES */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD7: /* SVGA3D_DEVCAP_ALPHATOCOVERAGE */
+ break;
+
+ case SVGA3D_DEVCAP_DEAD6: /* SVGA3D_DEVCAP_SUPERSAMPLE */
+ break;
+
+ case SVGA3D_DEVCAP_AUTOGENMIPMAPS:
+ *pu32Val = !!(pCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP);
+ break;
+
+ case SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES:
+ break;
+
+ case SVGA3D_DEVCAP_MAX_RENDER_TARGETS: /** @todo same thing? */
+ case SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS:
+ *pu32Val = pCaps->NumSimultaneousRTs;
+ break;
+
+ /*
+ * This is the maximum number of SVGA context IDs that the guest
+ * can define using SVGA_3D_CMD_CONTEXT_DEFINE.
+ */
+ case SVGA3D_DEVCAP_MAX_CONTEXT_IDS:
+ *pu32Val = SVGA3D_MAX_CONTEXT_IDS;
+ break;
+
+ /*
+ * This is the maximum number of SVGA surface IDs that the guest
+ * can define using SVGA_3D_CMD_SURFACE_DEFINE*.
+ */
+ case SVGA3D_DEVCAP_MAX_SURFACE_IDS:
+ *pu32Val = SVGA3D_MAX_SURFACE_IDS;
+ break;
+
+ /* Supported surface formats. */
+ case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_X8R8G8B8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A8R8G8B8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A2R10G10B10);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_X1R5G5B5);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A1R5G5B5);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A4R4G4B4);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A4R4G4B4);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_L16);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A8L8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_L8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
+ *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D16);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT: /** @todo not correct */
+ *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D24S8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
+ *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D24X8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
+ /** @todo supposed to be floating-point, but unable to find a match for D3D9... */
+ *pu32Val = 0;
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
+ *pu32Val = vmsvga3dGetDepthFormatSupport(pState, idx3dCaps, D3DFMT_D24FS8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT1);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT2:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT2);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT3);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT4:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT4);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_DXT5);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_X8L8V8U8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A2W10V10U10);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_V8U8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_Q8W8V8U8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_CxV8U8);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_R16F);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_R32F);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_G16R16F);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_G32R32F);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A16B16G16R16F);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A32B32G32R32F);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_V16U16);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_G16R16);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_A16B16G16R16);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_UYVY);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, D3DFMT_YUY2);
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_NV12:
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, (D3DFORMAT)MAKEFOURCC('N', 'V', '1', '2'));
+ break;
+
+ case SVGA3D_DEVCAP_DEAD10: /* SVGA3D_DEVCAP_SURFACEFMT_AYUV */
+ *pu32Val = vmsvga3dGetSurfaceFormatSupport(pState, idx3dCaps, (D3DFORMAT)MAKEFOURCC('A', 'Y', 'U', 'V'));
+ break;
+
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI1:
+ case SVGA3D_DEVCAP_SURFACEFMT_ATI2:
+ /* Unknown; only in DX10 & 11 */
+ Log(("CAPS: Unknown CAP %s\n", vmsvga3dGetCapString(idx3dCaps)));
+ rc = VERR_INVALID_PARAMETER;
+ *pu32Val = 0;
+ break;
+
+ default:
+ Log(("CAPS: Unexpected CAP %d\n", idx3dCaps));
+ rc = VERR_INVALID_PARAMETER;
+ break;
+ }
+#if 0
+ /* Dump of VMWare Player caps (from their log); for debugging purposes */
+ switch (idx3dCaps)
+ {
+ case 0:
+ *pu32Val = 0x00000001;
+ break;
+ case 1:
+ *pu32Val = 0x0000000a;
+ break;
+ case 2:
+ *pu32Val = 0x00000008;
+ break;
+ case 3: *pu32Val = 0x00000006; break;
+ case 4: *pu32Val = 0x00000007; break;
+ case 5: *pu32Val = 0x00000001; break;
+ case 6: *pu32Val = 0x0000000d; break;
+ case 7: *pu32Val = 0x00000001; break;
+ case 8: *pu32Val = 0x00000004; break;
+ case 9: *pu32Val = 0x00000001; break;
+ case 10: *pu32Val = 0x00000001; break;
+ case 11: *pu32Val = 0x00000004; break;
+ case 12: *pu32Val = 0x00000001; break;
+ case 13: *pu32Val = 0x00000001; break;
+ case 14: *pu32Val = 0x00000001; break;
+ case 15: *pu32Val = 0x00000001; break;
+ case 16: *pu32Val = 0x00000001; break;
+ case 17: *pu32Val = (uint32_t)256.000000; break;
+ case 18: *pu32Val = 0x00000014; break;
+ case 19: *pu32Val = 0x00001000; break;
+ case 20: *pu32Val = 0x00001000; break;
+ case 21: *pu32Val = 0x00000800; break;
+ case 22: *pu32Val = 0x00002000; break;
+ case 23: *pu32Val = 0x00000800; break;
+ case 24: *pu32Val = 0x00000010; break;
+ case 25: *pu32Val = 0x000fffff; break;
+ case 26: *pu32Val = 0x00ffffff; break;
+ case 27: *pu32Val = 0xffffffff; break;
+ case 28: *pu32Val = 0xffffffff; break;
+ case 29: *pu32Val = 0x00000020; break;
+ case 30: *pu32Val = 0x00000020; break;
+ case 31: *pu32Val = 0x03ffffff; break;
+ case 32: *pu32Val = 0x0098ec1f; break;
+ case 33: *pu32Val = 0x0098e11f; break;
+ case 34: *pu32Val = 0x0098e01f; break;
+ case 35: *pu32Val = 0x012c2000; break;
+ case 36: *pu32Val = 0x0098e11f; break;
+ case 37: *pu32Val = 0x0090c11f; break;
+ case 38: *pu32Val = 0x0098ec1f; break;
+ case 39: *pu32Val = 0x00804007; break;
+ case 40: *pu32Val = 0x0080c007; break;
+ case 41: *pu32Val = 0x00804007; break;
+ case 42: *pu32Val = 0x0080c007; break;
+ case 43: *pu32Val = 0x000000c1; break;
+ case 44: *pu32Val = 0x000000c1; break;
+ case 45: *pu32Val = 0x000000c1; break;
+ case 46: *pu32Val = 0x00808005; break;
+ case 47: *pu32Val = 0x00808005; break;
+ case 48: *pu32Val = 0x00808005; break;
+ case 49: *pu32Val = 0x00808005; break;
+ case 50: *pu32Val = 0x00808005; break;
+ case 51: *pu32Val = 0x01240000; break;
+ case 52: *pu32Val = 0x00814007; break;
+ case 53: *pu32Val = 0x00814007; break;
+ case 54: *pu32Val = 0x00814007; break;
+ case 55: *pu32Val = 0x01240000; break;
+ case 56: *pu32Val = 0x0080401f; break;
+ case 57: *pu32Val = 0x0080401f; break;
+ case 58: *pu32Val = 0x0080401f; break;
+ case 59: *pu32Val = 0x0080401f; break;
+ case 60: *pu32Val = 0x0080601f; break;
+ case 61: *pu32Val = 0x0080401f; break;
+ case 62: *pu32Val = 0x00000000; break;
+ case 63: *pu32Val = 0x00000004; break;
+ case 64: *pu32Val = 0x00000004; break;
+ case 65: *pu32Val = 0x00814005; break;
+ case 66: *pu32Val = 0x0080401f; break;
+ case 67: *pu32Val = 0x0080601f; break;
+ case 68: *pu32Val = 0x00006009; break;
+ case 69: *pu32Val = 0x00006001; break;
+ case 70: *pu32Val = 0x00000001; break;
+ case 71: *pu32Val = 0x0000000b; break;
+ case 72: *pu32Val = 0x00000001; break;
+ case 73: *pu32Val = 0x00000000; break;
+ case 74: *pu32Val = 0x00000000; break;
+ case 75: *pu32Val = 0x01246000; break;
+ case 76: *pu32Val = 0x00004009; break;
+ case 77: *pu32Val = 0x00000100; break;
+ case 78: *pu32Val = 0x00008000; break;
+ case 79: *pu32Val = 0x000000c1; break;
+ case 80: *pu32Val = 0x01240000; break;
+ case 81: *pu32Val = 0x000000c1; break;
+ case 82: *pu32Val = 0x00800005; break;
+ case 83: *pu32Val = 0x00800005; break;
+ case 84: *pu32Val = 0x00000000; break;
+ case 85: *pu32Val = 0x00000000; break;
+ case 86: *pu32Val = 0x00000000; break;
+ case 87: *pu32Val = 0x00000000; break;
+ case 88: *pu32Val = 0x00000000; break;
+ case 89: *pu32Val = (uint32_t) 0.000000; break;
+ case 90: *pu32Val = (uint32_t) 0.000000; break;
+ case 91: *pu32Val = 0x00006009; break;
+ default:
+// Log(("CAPS: Unexpected CAP %d\n", idx3dCaps));
+// rc = VERR_INVALID_PARAMETER;
+ break;
+ }
+#endif
+ Log(("CAPS: %d=%s - %x\n", idx3dCaps, vmsvga3dGetCapString(idx3dCaps), *pu32Val));
+ return rc;
+}
+
+/**
+ * Convert SVGA format value to its D3D equivalent
+ */
+D3DFORMAT vmsvga3dSurfaceFormat2D3D(SVGA3dSurfaceFormat format)
+{
+ switch (format)
+ {
+ case SVGA3D_X8R8G8B8:
+ return D3DFMT_X8R8G8B8;
+ case SVGA3D_A8R8G8B8:
+ return D3DFMT_A8R8G8B8;
+ case SVGA3D_R5G6B5:
+ return D3DFMT_R5G6B5;
+ case SVGA3D_X1R5G5B5:
+ return D3DFMT_X1R5G5B5;
+ case SVGA3D_A1R5G5B5:
+ return D3DFMT_A1R5G5B5;
+ case SVGA3D_A4R4G4B4:
+ return D3DFMT_A4R4G4B4;
+
+ case SVGA3D_R8G8B8A8_UNORM:
+ return D3DFMT_A8B8G8R8;
+
+ case SVGA3D_Z_D32:
+ return D3DFMT_D32;
+ case SVGA3D_Z_D16:
+ return D3DFMT_D16;
+ case SVGA3D_Z_D24S8_INT: /** @todo not correct */
+ case SVGA3D_Z_D24S8:
+ return D3DFMT_D24S8;
+ case SVGA3D_Z_D15S1:
+ return D3DFMT_D15S1;
+ case SVGA3D_Z_D24X8:
+ return D3DFMT_D24X8;
+ /* Advanced D3D9 depth formats. */
+ case SVGA3D_Z_DF16:
+ /** @todo supposed to be floating-point, but unable to find a match for D3D9... */
+ AssertFailedReturn(D3DFMT_UNKNOWN);
+ case SVGA3D_Z_DF24:
+ return D3DFMT_D24FS8;
+
+ case SVGA3D_LUMINANCE8:
+ return D3DFMT_L8;
+ case SVGA3D_LUMINANCE4_ALPHA4:
+ return D3DFMT_A4L4;
+ case SVGA3D_LUMINANCE16:
+ return D3DFMT_L16;
+ case SVGA3D_LUMINANCE8_ALPHA8:
+ return D3DFMT_A8L8;
+
+ case SVGA3D_DXT1:
+ return D3DFMT_DXT1;
+ case SVGA3D_DXT2:
+ return D3DFMT_DXT2;
+ case SVGA3D_DXT3:
+ return D3DFMT_DXT3;
+ case SVGA3D_DXT4:
+ return D3DFMT_DXT4;
+ case SVGA3D_DXT5:
+ return D3DFMT_DXT5;
+
+ /* Bump-map formats */
+ case SVGA3D_BUMPU8V8:
+ return D3DFMT_V8U8;
+ case SVGA3D_BUMPL6V5U5:
+ return D3DFMT_L6V5U5;
+ case SVGA3D_BUMPX8L8V8U8:
+ return D3DFMT_X8L8V8U8;
+ case SVGA3D_FORMAT_DEAD1:
+ /* No corresponding D3D9 equivalent. */
+ AssertFailedReturn(D3DFMT_UNKNOWN);
+ /* signed bump-map formats */
+ case SVGA3D_V8U8:
+ return D3DFMT_V8U8;
+ case SVGA3D_Q8W8V8U8:
+ return D3DFMT_Q8W8V8U8;
+ case SVGA3D_CxV8U8:
+ return D3DFMT_CxV8U8;
+ /* mixed bump-map formats */
+ case SVGA3D_X8L8V8U8:
+ return D3DFMT_X8L8V8U8;
+ case SVGA3D_A2W10V10U10:
+ return D3DFMT_A2W10V10U10;
+
+ case SVGA3D_ARGB_S10E5: /* 16-bit floating-point ARGB */
+ return D3DFMT_A16B16G16R16F;
+ case SVGA3D_ARGB_S23E8: /* 32-bit floating-point ARGB */
+ return D3DFMT_A32B32G32R32F;
+
+ case SVGA3D_A2R10G10B10:
+ return D3DFMT_A2R10G10B10;
+
+ case SVGA3D_ALPHA8:
+ return D3DFMT_A8;
+
+ /* Single- and dual-component floating point formats */
+ case SVGA3D_R_S10E5:
+ return D3DFMT_R16F;
+ case SVGA3D_R_S23E8:
+ return D3DFMT_R32F;
+ case SVGA3D_RG_S10E5:
+ return D3DFMT_G16R16F;
+ case SVGA3D_RG_S23E8:
+ return D3DFMT_G32R32F;
+
+ /*
+ * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+ * the most efficient format to use when creating new surfaces
+ * expressly for index or vertex data.
+ */
+ case SVGA3D_BUFFER:
+ return D3DFMT_UNKNOWN;
+
+ case SVGA3D_V16U16:
+ return D3DFMT_V16U16;
+
+ case SVGA3D_G16R16:
+ return D3DFMT_G16R16;
+ case SVGA3D_A16B16G16R16:
+ return D3DFMT_A16B16G16R16;
+
+ /* Packed Video formats */
+ case SVGA3D_UYVY:
+ return D3DFMT_UYVY;
+ case SVGA3D_YUY2:
+ return D3DFMT_YUY2;
+
+ /* Planar video formats */
+ case SVGA3D_NV12:
+ return (D3DFORMAT)MAKEFOURCC('N', 'V', '1', '2');
+
+ /* Video format with alpha */
+ case SVGA3D_FORMAT_DEAD2: /* Old SVGA3D_AYUV */
+ return (D3DFORMAT)MAKEFOURCC('A', 'Y', 'U', 'V');
+
+ case SVGA3D_R8G8B8A8_SNORM:
+ return D3DFMT_Q8W8V8U8;
+ case SVGA3D_R16G16_UNORM:
+ return D3DFMT_G16R16;
+
+ case SVGA3D_ATI1:
+ case SVGA3D_ATI2:
+ /* Unknown; only in DX10 & 11 */
+ break;
+
+ case SVGA3D_FORMAT_MAX: /* shut up MSC */
+ case SVGA3D_FORMAT_INVALID:
+ break;
+ default: /** @todo Other formats. Avoid MSC warning for now. */
+ break;
+ }
+ AssertFailedReturn(D3DFMT_UNKNOWN);
+}
+
+/**
+ * Convert SVGA multi sample count value to its D3D equivalent
+ */
+D3DMULTISAMPLE_TYPE vmsvga3dMultipeSampleCount2D3D(uint32_t multisampleCount)
+{
+ AssertCompile(D3DMULTISAMPLE_2_SAMPLES == 2);
+ AssertCompile(D3DMULTISAMPLE_16_SAMPLES == 16);
+
+ if (multisampleCount > 16)
+ return D3DMULTISAMPLE_NONE;
+
+ /** @todo exact same mapping as d3d? */
+ return (D3DMULTISAMPLE_TYPE)multisampleCount;
+}
+
+
+/**
+ * Destroy backend specific surface bits (part of SVGA_3D_CMD_SURFACE_DESTROY).
+ *
+ * @param pThisCC The device state.
+ * @param fClearCOTableEntry Not relevant for this backend.
+ * @param pSurface The surface being destroyed.
+ */
+static DECLCALLBACK(void) vmsvga3dBackSurfaceDestroy(PVGASTATECC pThisCC, bool fClearCOTableEntry, PVMSVGA3DSURFACE pSurface)
+{
+ RT_NOREF(pThisCC, fClearCOTableEntry);
+
+ RTAvlU32Destroy(&pSurface->pSharedObjectTree, vmsvga3dSharedSurfaceDestroyTree, pSurface);
+ Assert(pSurface->pSharedObjectTree == NULL);
+
+ switch (pSurface->enmD3DResType)
+ {
+ case VMSVGA3D_D3DRESTYPE_SURFACE:
+ D3D_RELEASE(pSurface->u.pSurface);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_TEXTURE:
+ D3D_RELEASE(pSurface->u.pTexture);
+ D3D_RELEASE(pSurface->bounce.pTexture);
+ D3D_RELEASE(pSurface->emulated.pTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+ D3D_RELEASE(pSurface->u.pCubeTexture);
+ D3D_RELEASE(pSurface->bounce.pCubeTexture);
+ D3D_RELEASE(pSurface->emulated.pCubeTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+ D3D_RELEASE(pSurface->u.pVolumeTexture);
+ D3D_RELEASE(pSurface->bounce.pVolumeTexture);
+ D3D_RELEASE(pSurface->emulated.pVolumeTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER:
+ D3D_RELEASE(pSurface->u.pVertexBuffer);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_INDEX_BUFFER:
+ D3D_RELEASE(pSurface->u.pIndexBuffer);
+ break;
+
+ default:
+ AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface),
+ ("surfaceFlags=0x%x\n", (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
+ break;
+ }
+
+ D3D_RELEASE(pSurface->pQuery);
+}
+
+
+static DECLCALLBACK(void) vmsvga3dBackSurfaceInvalidateImage(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface, uint32_t uFace, uint32_t uMipmap)
+{
+ RT_NOREF(pThisCC, pSurface, uFace, uMipmap);
+}
+
+
+/*
+ * Release all shared surface objects.
+ */
+DECLCALLBACK(int) vmsvga3dSharedSurfaceDestroyTree(PAVLU32NODECORE pNode, void *pvParam)
+{
+ PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)pNode;
+ PVMSVGA3DSURFACE pSurface = (PVMSVGA3DSURFACE)pvParam;
+
+ switch (pSurface->enmD3DResType)
+ {
+ case VMSVGA3D_D3DRESTYPE_TEXTURE:
+ LogFunc(("release shared texture object for context %d\n", pNode->Key));
+ Assert(pSharedSurface->u.pTexture);
+ D3D_RELEASE(pSharedSurface->u.pTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+ LogFunc(("release shared cube texture object for context %d\n", pNode->Key));
+ Assert(pSharedSurface->u.pCubeTexture);
+ D3D_RELEASE(pSharedSurface->u.pCubeTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+ LogFunc(("release shared volume texture object for context %d\n", pNode->Key));
+ Assert(pSharedSurface->u.pVolumeTexture);
+ D3D_RELEASE(pSharedSurface->u.pVolumeTexture);
+ break;
+
+ default:
+ AssertFailed();
+ break;
+ }
+ RTMemFree(pNode);
+ return 0;
+}
+
+/* Get the shared surface copy or create a new one. */
+static PVMSVGA3DSHAREDSURFACE vmsvga3dSurfaceGetSharedCopy(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface)
+{
+ Assert(pSurface->hSharedObject);
+
+ PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTAvlU32Get(&pSurface->pSharedObjectTree, pContext->id);
+ if (!pSharedSurface)
+ {
+ const uint32_t cWidth = pSurface->paMipmapLevels[0].mipmapSize.width;
+ const uint32_t cHeight = pSurface->paMipmapLevels[0].mipmapSize.height;
+ const uint32_t cDepth = pSurface->paMipmapLevels[0].mipmapSize.depth;
+ const uint32_t numMipLevels = pSurface->cLevels;
+
+ LogFunc(("Create shared %stexture copy d3d (%d,%d,%d) cMip=%d usage %x format %x.\n",
+ pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE ? "volume " :
+ pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE ? "cube " :
+ pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE ? "" : "UNKNOWN!!!",
+ cWidth,
+ cHeight,
+ cDepth,
+ numMipLevels,
+ pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+ pSurface->formatD3D));
+
+ pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTMemAllocZ(sizeof(*pSharedSurface));
+ AssertReturn(pSharedSurface, NULL);
+
+ pSharedSurface->Core.Key = pContext->id;
+ bool ret = RTAvlU32Insert(&pSurface->pSharedObjectTree, &pSharedSurface->Core);
+ AssertReturn(ret, NULL);
+
+ /* Create shadow copy of the original shared texture.
+ * Shared d3d resources require Vista+ and have some restrictions.
+ * D3DUSAGE_RENDERTARGET is required for use as a StretchRect destination.
+ */
+ HRESULT hr;
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+ hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+ cHeight,
+ cDepth,
+ numMipLevels,
+ pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSharedSurface->u.pVolumeTexture,
+ &pSurface->hSharedObject);
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ hr = pContext->pDevice->CreateCubeTexture(cWidth,
+ numMipLevels,
+ pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSharedSurface->u.pCubeTexture,
+ &pSurface->hSharedObject);
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ if (pSurface->fStencilAsTexture)
+ {
+ /* Use the INTZ format for a depth/stencil surface that will be used as a texture */
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ 1, /* mip levels */
+ D3DUSAGE_DEPTHSTENCIL,
+ FOURCC_INTZ,
+ D3DPOOL_DEFAULT,
+ &pSharedSurface->u.pTexture,
+ &pSurface->hSharedObject);
+ }
+ else
+ {
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ numMipLevels,
+ pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSharedSurface->u.pTexture,
+ &pSurface->hSharedObject);
+ }
+ }
+ else
+ hr = E_FAIL;
+
+ if (RT_LIKELY(hr == D3D_OK))
+ {
+ /* Make sure that the created shared copy has the same content as the original. */
+ PVMSVGA3DCONTEXT pAssociatedContext;
+ int rc = vmsvga3dContextFromCid(pState, pSurface->idAssociatedContext, &pAssociatedContext);
+ if (RT_SUCCESS(rc))
+ AssertStmt(pAssociatedContext->pDevice, rc = VERR_INTERNAL_ERROR);
+ if (RT_SUCCESS(rc))
+ {
+ IDirect3DQuery9 *pQuery;
+ hr = pAssociatedContext->pDevice->CreateQuery(D3DQUERYTYPE_EVENT, &pQuery);
+ if (hr == D3D_OK)
+ {
+ hr = pQuery->Issue(D3DISSUE_END);
+ if (hr == D3D_OK)
+ {
+ do
+ {
+ hr = pQuery->GetData(NULL, 0, D3DGETDATA_FLUSH);
+ } while (hr == S_FALSE);
+ }
+
+ D3D_RELEASE(pQuery);
+ }
+ }
+ else
+ AssertMsgFailed(("idAssociatedContext cid=%u, sid=%u\n", pSurface->idAssociatedContext, pSurface->id));
+ }
+ else
+ {
+ AssertMsgFailed(("CreateTexture type %d failed with %x\n", pSurface->enmD3DResType, hr));
+ RTAvlU32Remove(&pSurface->pSharedObjectTree, pContext->id);
+ RTMemFree(pSharedSurface);
+ return NULL;
+ }
+ }
+ return pSharedSurface;
+}
+
+/* Inject a query event into the D3D pipeline so we can check when usage of this surface has finished.
+ * (D3D does not synchronize shared surface usage)
+ */
+static int vmsvga3dSurfaceTrackUsage(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, PVMSVGA3DSURFACE pSurface)
+{
+ RT_NOREF(pState);
+
+ Assert(pSurface->id != SVGA3D_INVALID_ID);
+
+ /* Nothing to do if this surface hasn't been shared. */
+ if (pSurface->pSharedObjectTree == NULL)
+ return VINF_SUCCESS;
+
+ LogFunc(("track usage of sid=%u (cid=%u) for cid=%u, pQuery %p\n", pSurface->id, pSurface->idAssociatedContext, pContext->id, pSurface->pQuery));
+
+ if (pSurface->idQueryContext == pContext->id)
+ {
+ /* Release the previous query object, if any. */
+ D3D_RELEASE(pSurface->pQuery);
+ }
+ else
+ {
+ /* Different context. There must be no pending drawing operations. If there are any, then a flush is missing. */
+ if (pSurface->pQuery)
+ {
+ /* Should not happen. */
+ AssertFailed();
+
+ /* Make sure that all drawing has completed. */
+ vmsvga3dSurfaceFlush(pSurface);
+ }
+ pSurface->idQueryContext = pContext->id;
+ }
+
+ HRESULT hr = pContext->pDevice->CreateQuery(D3DQUERYTYPE_EVENT, &pSurface->pQuery);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: CreateQuery failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pSurface->pQuery->Issue(D3DISSUE_END);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSurfaceTrackUsage: Issue failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Surface ID based version of vmsvga3dSurfaceTrackUsage.
+ *
+ * @returns VBox status code.
+ * @param pState The VMSVGA3d state.
+ * @param pContext The context.
+ * @param sid The surface ID.
+ */
+static int vmsvga3dSurfaceTrackUsageById(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t sid)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ return vmsvga3dSurfaceTrackUsage(pState, pContext, pSurface);
+}
+
+
+/* Wait for all drawing, that uses this surface, to finish. */
+int vmsvga3dSurfaceFlush(PVMSVGA3DSURFACE pSurface)
+{
+ HRESULT hr;
+
+ if (!pSurface->pQuery)
+ {
+ LogFlow(("vmsvga3dSurfaceFlush: no query object\n"));
+ return VINF_SUCCESS; /* nothing to wait for */
+ }
+ Assert(pSurface->pSharedObjectTree);
+
+ Log(("vmsvga3dSurfaceFlush: wait for draw to finish (sid=%u)\n", pSurface->id));
+ while (true)
+ {
+ hr = pSurface->pQuery->GetData(NULL, 0, D3DGETDATA_FLUSH);
+ if (hr != S_FALSE) break;
+
+ RTThreadSleep(1);
+ }
+
+ D3D_RELEASE(pSurface->pQuery);
+
+ AssertMsgReturn(hr == S_OK, ("vmsvga3dSurfaceFinishDrawing: GetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+/** Get IDirect3DSurface9 for the given face and mipmap.
+ */
+int vmsvga3dGetD3DSurface(PVMSVGA3DSTATE pState,
+ PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pSurface,
+ uint32_t face,
+ uint32_t mipmap,
+ bool fLockable,
+ IDirect3DSurface9 **ppD3DSurf)
+{
+ AssertPtrReturn(pSurface->u.pSurface, VERR_INVALID_PARAMETER);
+
+ IDirect3DBaseTexture9 *pTexture;
+ if (fLockable && pSurface->bounce.pTexture)
+ pTexture = pSurface->bounce.pTexture;
+ else
+ pTexture = pSurface->u.pTexture;
+
+ if (pSurface->idAssociatedContext != pContext->id)
+ {
+ AssertMsgReturn(!fLockable,
+ ("Lockable surface must be from the same context (surface cid = %d, req cid = %d)",
+ pSurface->idAssociatedContext, pContext->id),
+ VERR_INVALID_PARAMETER);
+
+ if ( pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ {
+ LogFunc(("using texture sid=%u created for another context (%d vs %d)\n",
+ pSurface->id, pSurface->idAssociatedContext, pContext->id));
+
+ PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pState, pContext, pSurface);
+ AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+ pTexture = pSharedSurface->u.pTexture;
+ }
+ else
+ {
+ AssertMsgFailed(("surface sid=%u created for another context (%d vs %d)\n",
+ pSurface->id, pSurface->idAssociatedContext, pContext->id));
+ }
+ }
+
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ {
+ Assert(pSurface->cFaces == 6);
+
+ IDirect3DCubeTexture9 *p = (IDirect3DCubeTexture9 *)pTexture;
+ D3DCUBEMAP_FACES FaceType = vmsvga3dCubemapFaceFromIndex(face);
+ HRESULT hr = p->GetCubeMapSurface(FaceType, mipmap, ppD3DSurf);
+ AssertMsgReturn(hr == D3D_OK, ("GetCubeMapSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ Assert(pSurface->cFaces == 1);
+ Assert(face == 0);
+
+ IDirect3DTexture9 *p = (IDirect3DTexture9 *)pTexture;
+ HRESULT hr = p->GetSurfaceLevel(mipmap, ppD3DSurf);
+ AssertMsgReturn(hr == D3D_OK, ("GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE)
+ {
+ pSurface->u.pSurface->AddRef();
+ *ppD3DSurf = pSurface->u.pSurface;
+ }
+ else
+ {
+ AssertMsgFailedReturn(("No surface for type %d\n", pSurface->enmD3DResType), VERR_INTERNAL_ERROR);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src,
+ uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ const uint32_t sidSrc = src.sid;
+ const uint32_t sidDest = dest.sid;
+ int rc;
+
+ PVMSVGA3DSURFACE pSurfaceSrc;
+ rc = vmsvga3dSurfaceFromSid(pState, sidSrc, &pSurfaceSrc);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DSURFACE pSurfaceDest;
+ rc = vmsvga3dSurfaceFromSid(pState, sidDest, &pSurfaceDest);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevelSrc;
+ rc = vmsvga3dMipmapLevel(pSurfaceSrc, src.face, src.mipmap, &pMipmapLevelSrc);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevelDest;
+ rc = vmsvga3dMipmapLevel(pSurfaceDest, dest.face, dest.mipmap, &pMipmapLevelDest);
+ AssertRCReturn(rc, rc);
+
+ /* If src is HW and dst is not, then create the dst texture. */
+ if ( pSurfaceSrc->u.pSurface
+ && !pSurfaceDest->u.pSurface
+ && RT_BOOL(pSurfaceDest->f.surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE))
+ {
+ /* Create the destination texture in the same context as the source texture. */
+ uint32_t const cidSrc = pSurfaceSrc->idAssociatedContext;
+
+ PVMSVGA3DCONTEXT pContextSrc;
+ rc = vmsvga3dContextFromCid(pState, cidSrc, &pContextSrc);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContextSrc->pDevice, VERR_INTERNAL_ERROR);
+
+ LogFunc(("sid=%u type=%x format=%d -> create dest texture\n", sidDest, pSurfaceDest->f.s.surface1Flags, pSurfaceDest->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContextSrc, cidSrc, pSurfaceDest);
+ AssertRCReturn(rc, rc);
+ }
+
+ AssertReturn(pSurfaceSrc->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED); /// @todo
+ AssertReturn(pSurfaceDest->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED); /// @todo
+
+ /* Surface copy only makes sense between surfaces with identical layout. */
+ AssertReturn(pSurfaceSrc->cbBlock == pSurfaceDest->cbBlock, VERR_INVALID_PARAMETER);
+ AssertReturn(pSurfaceSrc->cxBlock == pSurfaceDest->cxBlock, VERR_INVALID_PARAMETER);
+ AssertReturn(pSurfaceSrc->cyBlock == pSurfaceDest->cyBlock, VERR_INVALID_PARAMETER);
+
+ if ( pSurfaceSrc->u.pSurface
+ && pSurfaceDest->u.pSurface)
+ {
+ /* Both surfaces in hardware. Use the src context to copy one to another, because the src context may be needed
+ * to copy data from source texture to the source bounce texture. while only the shared hardware surface is required
+ * from the dst context.
+ */
+ uint32_t const cidSrc = pSurfaceSrc->idAssociatedContext;
+
+ PVMSVGA3DCONTEXT pContextSrc;
+ rc = vmsvga3dContextFromCid(pState, cidSrc, &pContextSrc);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContextSrc->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+ vmsvga3dSurfaceFlush(pSurfaceSrc);
+ vmsvga3dSurfaceFlush(pSurfaceDest);
+
+ IDirect3DSurface9 *pSrc;
+ rc = vmsvga3dGetD3DSurface(pState, pContextSrc, pSurfaceSrc, src.face, src.mipmap, false, &pSrc);
+ AssertRCReturn(rc, rc);
+
+ IDirect3DSurface9 *pDest;
+ rc = vmsvga3dGetD3DSurface(pState, pContextSrc, pSurfaceDest, dest.face, dest.mipmap, false, &pDest);
+ AssertRCReturnStmt(rc, D3D_RELEASE(pSrc), rc);
+
+ for (uint32_t i = 0; i < cCopyBoxes; ++i)
+ {
+ SVGA3dCopyBox clipBox = pBox[i];
+ vmsvgaR3ClipCopyBox(&pMipmapLevelSrc->mipmapSize, &pMipmapLevelDest->mipmapSize, &clipBox);
+ if ( !clipBox.w
+ || !clipBox.h
+ || !clipBox.d)
+ {
+ LogFunc(("Skipped empty box.\n"));
+ continue;
+ }
+
+ RECT RectSrc;
+ RectSrc.left = clipBox.srcx;
+ RectSrc.top = clipBox.srcy;
+ RectSrc.right = clipBox.srcx + clipBox.w; /* exclusive */
+ RectSrc.bottom = clipBox.srcy + clipBox.h; /* exclusive */
+
+ RECT RectDest;
+ RectDest.left = clipBox.x;
+ RectDest.top = clipBox.y;
+ RectDest.right = clipBox.x + clipBox.w; /* exclusive */
+ RectDest.bottom = clipBox.y + clipBox.h; /* exclusive */
+
+ LogFunc(("StretchRect copy src sid=%u face=%d mipmap=%d (%d,%d)(%d,%d) to dest sid=%u face=%d mipmap=%d (%d,%d)\n", sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom, sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+
+ if ( sidSrc == sidDest
+ && clipBox.srcx == clipBox.x
+ && clipBox.srcy == clipBox.y)
+ {
+ LogFunc(("redundant copy to the same surface at the same coordinates. Ignore.\n"));
+ continue;
+ }
+ Assert(sidSrc != sidDest);
+ Assert(!clipBox.srcz && !clipBox.z);
+
+ HRESULT hr = pContextSrc->pDevice->StretchRect(pSrc, &RectSrc, pDest, &RectDest, D3DTEXF_NONE);
+ if (hr != D3D_OK)
+ {
+ /* This can happen for compressed texture formats for example. */
+ LogFunc(("StretchRect failed with %x. Try a slow path.\n", hr));
+ if ( pSurfaceSrc->bounce.pTexture
+ && (pSurfaceSrc->fUsageD3D & D3DUSAGE_RENDERTARGET))
+ {
+ /* Copy the source texture mipmap level to the source bounce texture. */
+ hr = D3D9GetRenderTargetData(pContextSrc, pSurfaceSrc, src.face, src.mipmap);
+ AssertMsg(hr == D3D_OK, ("D3D9GetRenderTargetData failed with %x\n", hr));
+ if (hr == D3D_OK)
+ {
+ /* Copy the source bounce texture to the destination surface. */
+ IDirect3DSurface9 *pSrcBounce;
+ rc = vmsvga3dGetD3DSurface(pState, pContextSrc, pSurfaceSrc, src.face, src.mipmap, true, &pSrcBounce);
+ if (RT_SUCCESS(rc))
+ {
+ POINT pointDest;
+ pointDest.x = clipBox.x;
+ pointDest.y = clipBox.y;
+
+ hr = pContextSrc->pDevice->UpdateSurface(pSrcBounce, &RectSrc, pDest, &pointDest);
+ Assert(hr == D3D_OK);
+
+ D3D_RELEASE(pSrcBounce);
+ }
+ else
+ {
+ AssertRC(rc);
+ hr = E_INVALIDARG;
+ }
+ }
+ }
+ else if ( (pSurfaceSrc->fUsageD3D & D3DUSAGE_RENDERTARGET) == 0
+ && (pSurfaceDest->fUsageD3D & D3DUSAGE_RENDERTARGET) == 0)
+ {
+ /* Can lock both. */
+ D3DLOCKED_RECT LockedSrcRect;
+ hr = pSrc->LockRect(&LockedSrcRect, &RectSrc, D3DLOCK_READONLY);
+ Assert(hr == D3D_OK);
+ if (SUCCEEDED(hr))
+ {
+ D3DLOCKED_RECT LockedDestRect;
+ hr = pDest->LockRect(&LockedDestRect, &RectDest, 0);
+ Assert(hr == D3D_OK);
+ if (SUCCEEDED(hr))
+ {
+ uint32_t cBlocksX = (clipBox.w + pSurfaceSrc->cxBlock - 1) / pSurfaceSrc->cxBlock;
+ uint32_t cBlocksY = (clipBox.h + pSurfaceSrc->cyBlock - 1) / pSurfaceSrc->cyBlock;
+
+ uint32_t cbToCopy = cBlocksX * pSurfaceSrc->cbBlock;
+ cbToCopy = RT_MIN(cbToCopy, (uint32_t)RT_ABS(LockedDestRect.Pitch));
+ cbToCopy = RT_MIN(cbToCopy, (uint32_t)RT_ABS(LockedSrcRect.Pitch));
+
+ uint8_t *pu8Dst = (uint8_t *)LockedDestRect.pBits;
+ const uint8_t *pu8Src = (uint8_t *)LockedSrcRect.pBits;
+ for (uint32_t j = 0; j < cBlocksY; ++j)
+ {
+ memcpy(pu8Dst, pu8Src, cbToCopy);
+ pu8Dst += LockedDestRect.Pitch;
+ pu8Src += LockedSrcRect.Pitch;
+ }
+
+ hr = pDest->UnlockRect();
+ Assert(hr == D3D_OK);
+ }
+
+ hr = pSrc->UnlockRect();
+ Assert(hr == D3D_OK);
+ }
+ }
+ }
+ AssertMsgReturnStmt(hr == D3D_OK,
+ ("StretchRect failed with %x\n", hr),
+ D3D_RELEASE(pDest); D3D_RELEASE(pSrc),
+ VERR_INTERNAL_ERROR);
+ }
+
+ D3D_RELEASE(pDest);
+ D3D_RELEASE(pSrc);
+
+ /* Track the StretchRect operation. */
+ vmsvga3dSurfaceTrackUsage(pState, pContextSrc, pSurfaceSrc);
+ vmsvga3dSurfaceTrackUsage(pState, pContextSrc, pSurfaceDest);
+ }
+ else
+ {
+ /* One of the surfaces is in memory.
+ *
+ * Copy from/to memory to/from a HW surface. Or mem->mem.
+ * Use the context of the HW surface, if any.
+ */
+ PVMSVGA3DCONTEXT pContext = NULL;
+ IDirect3DSurface9 *pD3DSurf = NULL;
+
+ if (pSurfaceSrc->u.pSurface)
+ {
+ AssertReturn(!pSurfaceDest->u.pSurface, VERR_INTERNAL_ERROR);
+
+ rc = vmsvga3dContextFromCid(pState, pSurfaceSrc->idAssociatedContext, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pSurfaceSrc, src.face, src.mipmap, true, &pD3DSurf);
+ AssertRCReturn(rc, rc);
+ }
+ else if (pSurfaceDest->u.pSurface)
+ {
+ AssertReturn(!pSurfaceSrc->u.pSurface, VERR_INTERNAL_ERROR);
+
+ rc = vmsvga3dContextFromCid(pState, pSurfaceDest->idAssociatedContext, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pSurfaceDest, dest.face, dest.mipmap, true, &pD3DSurf);
+ AssertRCReturn(rc, rc);
+ }
+
+ for (uint32_t i = 0; i < cCopyBoxes; ++i)
+ {
+ HRESULT hr;
+
+ SVGA3dCopyBox clipBox = pBox[i];
+ vmsvgaR3ClipCopyBox(&pMipmapLevelSrc->mipmapSize, &pMipmapLevelDest->mipmapSize, &clipBox);
+ if ( !clipBox.w
+ || !clipBox.h
+ || !clipBox.d)
+ {
+ LogFunc(("Skipped empty box.\n"));
+ continue;
+ }
+
+ RECT RectSrc;
+ RectSrc.left = clipBox.srcx;
+ RectSrc.top = clipBox.srcy;
+ RectSrc.right = clipBox.srcx + clipBox.w; /* exclusive */
+ RectSrc.bottom = clipBox.srcy + clipBox.h; /* exclusive */
+
+ RECT RectDest;
+ RectDest.left = clipBox.x;
+ RectDest.top = clipBox.y;
+ RectDest.right = clipBox.x + clipBox.w; /* exclusive */
+ RectDest.bottom = clipBox.y + clipBox.h; /* exclusive */
+
+ LogFunc(("(manual) copy sid=%u face=%d mipmap=%d (%d,%d)(%d,%d) to sid=%u face=%d mipmap=%d (%d,%d)\n",
+ sidSrc, src.face, src.mipmap, RectSrc.left, RectSrc.top, RectSrc.right, RectSrc.bottom,
+ sidDest, dest.face, dest.mipmap, pBox[i].x, pBox[i].y));
+
+ Assert(!clipBox.srcz && !clipBox.z);
+
+ uint32_t cBlocksX = (clipBox.w + pSurfaceSrc->cxBlock - 1) / pSurfaceSrc->cxBlock;
+ uint32_t cBlocksY = (clipBox.h + pSurfaceSrc->cyBlock - 1) / pSurfaceSrc->cyBlock;
+
+ D3DLOCKED_RECT LockedSrcRect;
+ if (!pSurfaceSrc->u.pSurface)
+ {
+ uint32_t u32BlockX = clipBox.srcx / pSurfaceSrc->cxBlock;
+ uint32_t u32BlockY = clipBox.srcy / pSurfaceSrc->cyBlock;
+ Assert(u32BlockX * pSurfaceSrc->cxBlock == clipBox.srcx);
+ Assert(u32BlockY * pSurfaceSrc->cyBlock == clipBox.srcy);
+
+ LockedSrcRect.pBits = (uint8_t *)pMipmapLevelSrc->pSurfaceData +
+ pMipmapLevelSrc->cbSurfacePitch * u32BlockY + pSurfaceSrc->cbBlock * u32BlockX;
+ LockedSrcRect.Pitch = pMipmapLevelSrc->cbSurfacePitch;
+ }
+ else
+ {
+ /* Must flush the context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+ vmsvga3dSurfaceFlush(pSurfaceSrc);
+
+ hr = pD3DSurf->LockRect(&LockedSrcRect, &RectSrc, D3DLOCK_READONLY);
+ AssertMsgReturnStmt(hr == D3D_OK, ("LockRect failed with %x\n", hr), D3D_RELEASE(pD3DSurf), VERR_INTERNAL_ERROR);
+ }
+
+ D3DLOCKED_RECT LockedDestRect;
+ if (!pSurfaceDest->u.pSurface)
+ {
+ uint32_t u32BlockX = clipBox.x / pSurfaceDest->cxBlock;
+ uint32_t u32BlockY = clipBox.y / pSurfaceDest->cyBlock;
+ Assert(u32BlockX * pSurfaceDest->cxBlock == clipBox.x);
+ Assert(u32BlockY * pSurfaceDest->cyBlock == clipBox.y);
+
+ LockedDestRect.pBits = (uint8_t *)pMipmapLevelDest->pSurfaceData +
+ pMipmapLevelDest->cbSurfacePitch * u32BlockY + pSurfaceDest->cbBlock * u32BlockX;
+ LockedDestRect.Pitch = pMipmapLevelDest->cbSurfacePitch;
+ pSurfaceDest->fDirty = true;
+ }
+ else
+ {
+ /* Must flush the context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+ vmsvga3dSurfaceFlush(pSurfaceDest);
+
+ hr = pD3DSurf->LockRect(&LockedDestRect, &RectDest, 0);
+ AssertMsgReturnStmt(hr == D3D_OK, ("LockRect failed with %x\n", hr), D3D_RELEASE(pD3DSurf), VERR_INTERNAL_ERROR);
+ }
+
+ uint8_t *pDest = (uint8_t *)LockedDestRect.pBits;
+ const uint8_t *pSrc = (uint8_t *)LockedSrcRect.pBits;
+ for (uint32_t j = 0; j < cBlocksY; ++j)
+ {
+ memcpy(pDest, pSrc, cBlocksX * pSurfaceSrc->cbBlock);
+ pDest += LockedDestRect.Pitch;
+ pSrc += LockedSrcRect.Pitch;
+ }
+
+ if (pD3DSurf)
+ {
+ hr = pD3DSurf->UnlockRect();
+ AssertMsgReturnStmt(hr == D3D_OK, ("Unlock failed with %x\n", hr), D3D_RELEASE(pD3DSurf), VERR_INTERNAL_ERROR);
+ }
+ }
+
+ D3D_RELEASE(pD3DSurf);
+
+ /* If the destination bounce texture has been used, then update the actual destination texture. */
+ if ( pSurfaceDest->u.pTexture
+ && pSurfaceDest->bounce.pTexture
+ && ( pSurfaceDest->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+ || pSurfaceDest->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE))
+ {
+ AssertMsgReturn(pContext, ("Context is NULL\n"), VERR_INTERNAL_ERROR);
+
+ /* Copy the new content to the actual texture object. */
+ HRESULT hr2 = D3D9UpdateTexture(pContext, pSurfaceDest);
+ AssertMsg(hr2 == D3D_OK, ("UpdateTexture failed with %x\n", hr2)); RT_NOREF(hr2);
+
+ /* Track the UpdateTexture operation. */
+ vmsvga3dSurfaceTrackUsage(pState, pContext, pSurfaceDest);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Create D3D/OpenGL texture object for the specified surface.
+ *
+ * Surfaces are created when needed.
+ *
+ * @param pThisCC The device context.
+ * @param pContext The context.
+ * @param idAssociatedContext Probably the same as pContext->id.
+ * @param pSurface The surface to create the texture for.
+ */
+static DECLCALLBACK(int) vmsvga3dBackCreateTexture(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext,
+ PVMSVGA3DSURFACE pSurface)
+
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ HRESULT hr;
+
+ LogFunc(("sid=%u\n", pSurface->id));
+
+ Assert(pSurface->hSharedObject == NULL);
+ Assert(pSurface->u.pTexture == NULL);
+ Assert(pSurface->bounce.pTexture == NULL);
+ Assert(pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_NONE);
+
+ const uint32_t cWidth = pSurface->paMipmapLevels[0].mipmapSize.width;
+ const uint32_t cHeight = pSurface->paMipmapLevels[0].mipmapSize.height;
+ const uint32_t cDepth = pSurface->paMipmapLevels[0].mipmapSize.depth;
+ const uint32_t numMipLevels = pSurface->cLevels;
+
+ /*
+ * Create D3D texture object.
+ */
+ if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
+ {
+ Assert(pSurface->cFaces == 6);
+ Assert(cWidth == cHeight);
+ Assert(cDepth == 1);
+
+ hr = pContext->pDevice->CreateCubeTexture(cWidth,
+ numMipLevels,
+ pSurface->fUsageD3D,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pCubeTexture,
+ &pSurface->hSharedObject);
+ if (hr == D3D_OK)
+ {
+ /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
+ hr = pContext->pDevice->CreateCubeTexture(cWidth,
+ numMipLevels,
+ (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+ pSurface->formatD3D,
+ D3DPOOL_SYSTEMMEM,
+ &pSurface->bounce.pCubeTexture,
+ NULL);
+ AssertMsgReturnStmt(hr == D3D_OK,
+ ("CreateCubeTexture (systemmem) failed with %x\n", hr),
+ D3D_RELEASE(pSurface->u.pCubeTexture),
+ VERR_INTERNAL_ERROR);
+ }
+ else
+ {
+ Log(("Format not accepted -> try old method\n"));
+ /* The format was probably not accepted; fall back to our old mode. */
+ hr = pContext->pDevice->CreateCubeTexture(cWidth,
+ numMipLevels,
+ (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pCubeTexture,
+ &pSurface->hSharedObject);
+ AssertMsgReturn(hr == D3D_OK, ("CreateCubeTexture (fallback) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+
+ pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE;
+ }
+ else if ( pSurface->formatD3D == D3DFMT_D24S8
+ || pSurface->formatD3D == D3DFMT_D24X8
+ || pSurface->formatD3D == D3DFMT_D32
+ || pSurface->formatD3D == D3DFMT_D16)
+ {
+ Assert(pSurface->cFaces == 1);
+ Assert(pSurface->cLevels == 1);
+ Assert(cDepth == 1);
+
+ /* Use the INTZ format for a depth/stencil surface that will be used as a texture */
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ 1, /* mip levels */
+ D3DUSAGE_DEPTHSTENCIL,
+ FOURCC_INTZ,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pTexture,
+ &pSurface->hSharedObject /* might result in poor performance */);
+ if ( hr == D3D_OK
+ && ( pSurface->formatD3D == D3DFMT_D24S8
+ || pSurface->formatD3D == D3DFMT_D24X8))
+ {
+ /* Create another texture object to serve as a bounce buffer as the
+ * D3DFMT_D24S8 and D3DFMT_D24X8 surface can't be locked apparently (from testing).
+ */
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ 1, /* mip levels */
+ D3DUSAGE_DYNAMIC /* Lockable */,
+ FOURCC_INTZ,
+ D3DPOOL_SYSTEMMEM,
+ &pSurface->bounce.pTexture,
+ NULL);
+
+ AssertMsgReturnStmt(hr == D3D_OK,
+ ("CreateTexture (systemmem) failed with %x\n", hr),
+ D3D_RELEASE(pSurface->u.pTexture),
+ VERR_INTERNAL_ERROR);
+ }
+
+ AssertMsgReturn(hr == D3D_OK, ("CreateTexture INTZ failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pSurface->fStencilAsTexture = true;
+ pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_TEXTURE;
+ }
+ else
+ {
+ if (cDepth > 1)
+ {
+ hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+ cHeight,
+ cDepth,
+ numMipLevels,
+ pSurface->fUsageD3D,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pVolumeTexture,
+ &pSurface->hSharedObject);
+ if (hr == D3D_OK)
+ {
+ /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
+ hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+ cHeight,
+ cDepth,
+ numMipLevels,
+ (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+ pSurface->formatD3D,
+ D3DPOOL_SYSTEMMEM,
+ &pSurface->bounce.pVolumeTexture,
+ NULL);
+ AssertMsgReturnStmt(hr == D3D_OK,
+ ("CreateVolumeTexture (systemmem) failed with %x\n", hr),
+ D3D_RELEASE(pSurface->u.pVolumeTexture),
+ VERR_INTERNAL_ERROR);
+ }
+ else
+ {
+ Log(("Format not accepted -> try old method\n"));
+ /* The format was probably not accepted; fall back to our old mode. */
+ hr = pContext->pDevice->CreateVolumeTexture(cWidth,
+ cHeight,
+ cDepth,
+ numMipLevels,
+ (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pVolumeTexture,
+ &pSurface->hSharedObject);
+ AssertMsgReturn(hr == D3D_OK, ("CreateVolumeTexture (fallback) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+
+ pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE;
+ }
+ else
+ {
+ Assert(pSurface->cFaces == 1);
+
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ numMipLevels,
+ pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET /* required for use as a StretchRect destination */,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pTexture,
+ &pSurface->hSharedObject);
+ if (hr == D3D_OK)
+ {
+ /* Create another texture object to serve as a bounce buffer as the above texture surface can't be locked. */
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ numMipLevels,
+ (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+ pSurface->formatD3D,
+ D3DPOOL_SYSTEMMEM,
+ &pSurface->bounce.pTexture,
+ NULL);
+
+ AssertMsgReturn(hr == D3D_OK, ("CreateTexture (systemmem) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ if (pSurface->formatD3D != pSurface->d3dfmtRequested)
+ {
+ /* Create a staging texture/render target for format conversion. */
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ numMipLevels,
+ pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->emulated.pTexture,
+ NULL);
+ AssertMsgReturn(hr == D3D_OK, ("CreateTexture (emulated) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ }
+ else
+ {
+ Log(("Format not accepted (%x) -> try old method\n", hr));
+ /* The format was probably not accepted; fall back to our old mode. */
+ hr = pContext->pDevice->CreateTexture(cWidth,
+ cHeight,
+ numMipLevels,
+ (pSurface->fUsageD3D & ~D3DUSAGE_RENDERTARGET) | D3DUSAGE_DYNAMIC /* Lockable */,
+ pSurface->formatD3D,
+ D3DPOOL_DEFAULT,
+ &pSurface->u.pTexture,
+ &pSurface->hSharedObject /* might result in poor performance */);
+ AssertMsgReturn(hr == D3D_OK, ("CreateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+
+ pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_TEXTURE;
+ }
+ }
+
+ Assert(hr == D3D_OK);
+
+ if (pSurface->autogenFilter != SVGA3D_TEX_FILTER_NONE)
+ {
+ /* Set the mip map generation filter settings. */
+ IDirect3DBaseTexture9 *pBaseTexture;
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+ pBaseTexture = pSurface->u.pVolumeTexture;
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ pBaseTexture = pSurface->u.pCubeTexture;
+ else
+ pBaseTexture = pSurface->u.pTexture;
+ hr = pBaseTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)pSurface->autogenFilter);
+ AssertMsg(hr == D3D_OK, ("vmsvga3dBackCreateTexture: SetAutoGenFilterType failed with %x\n", hr));
+ }
+
+ /*
+ * Always initialize all mipmap levels using the in memory data
+ * to make sure that the just created texture has the up-to-date content.
+ * The OpenGL backend does this too.
+ */
+ Log(("vmsvga3dBackCreateTexture: sync texture\n"));
+
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+ {
+ IDirect3DVolumeTexture9 *pVolumeTexture = pSurface->bounce.pVolumeTexture ?
+ pSurface->bounce.pVolumeTexture :
+ pSurface->u.pVolumeTexture;
+
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ D3DLOCKED_BOX LockedVolume;
+ hr = pVolumeTexture->LockBox(i, &LockedVolume, NULL, D3DLOCK_DISCARD);
+ AssertMsgBreak(hr == D3D_OK, ("LockBox failed with %x\n", hr));
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->paMipmapLevels[i];
+
+ LogFunc(("sync volume texture mipmap level %d (pitch row %x vs %x, slice %x vs %x)\n",
+ i, LockedVolume.RowPitch, pMipLevel->cbSurfacePitch, LockedVolume.SlicePitch, pMipLevel->cbSurfacePlane));
+
+
+ uint8_t *pDst = (uint8_t *)LockedVolume.pBits;
+ const uint8_t *pSrc = (uint8_t *)pMipLevel->pSurfaceData;
+ for (uint32_t d = 0; d < cDepth; ++d)
+ {
+ uint8_t *pRowDst = pDst;
+ const uint8_t *pRowSrc = pSrc;
+ for (uint32_t h = 0; h < pMipLevel->cBlocksY; ++h)
+ {
+ memcpy(pRowDst, pRowSrc, pMipLevel->cbSurfacePitch);
+ pRowDst += LockedVolume.RowPitch;
+ pRowSrc += pMipLevel->cbSurfacePitch;
+ }
+ pDst += LockedVolume.SlicePitch;
+ pSrc += pMipLevel->cbSurfacePlane;
+ }
+
+ hr = pVolumeTexture->UnlockBox(i);
+ AssertMsgBreak(hr == D3D_OK, ("UnlockBox failed with %x\n", hr));
+
+ pMipLevel->fDirty = false;
+ }
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ {
+ IDirect3DCubeTexture9 *pCubeTexture = pSurface->bounce.pCubeTexture ?
+ pSurface->bounce.pCubeTexture :
+ pSurface->u.pCubeTexture;
+
+ for (uint32_t iFace = 0; iFace < 6; ++iFace)
+ {
+ const D3DCUBEMAP_FACES Face = vmsvga3dCubemapFaceFromIndex(iFace);
+
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ D3DLOCKED_RECT LockedRect;
+ hr = pCubeTexture->LockRect(Face,
+ i, /* texture level */
+ &LockedRect,
+ NULL, /* entire texture */
+ 0);
+ AssertMsgBreak(hr == D3D_OK, ("LockRect failed with %x\n", hr));
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->paMipmapLevels[iFace * numMipLevels + i];
+
+ LogFunc(("sync texture face %d mipmap level %d (pitch %x vs %x)\n",
+ iFace, i, LockedRect.Pitch, pMipLevel->cbSurfacePitch));
+
+ uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+ const uint8_t *pSrc = (uint8_t *)pMipLevel->pSurfaceData;
+ for (uint32_t j = 0; j < pMipLevel->cBlocksY; ++j)
+ {
+ memcpy(pDest, pSrc, pMipLevel->cbSurfacePitch);
+
+ pDest += LockedRect.Pitch;
+ pSrc += pMipLevel->cbSurfacePitch;
+ }
+
+ hr = pCubeTexture->UnlockRect(Face, i /* texture level */);
+ AssertMsgBreak(hr == D3D_OK, ("UnlockRect failed with %x\n", hr));
+
+ pMipLevel->fDirty = false;
+ }
+
+ if (hr != D3D_OK)
+ break;
+ }
+
+ if (hr != D3D_OK)
+ {
+ D3D_RELEASE(pSurface->bounce.pCubeTexture);
+ D3D_RELEASE(pSurface->u.pCubeTexture);
+ return VERR_INTERNAL_ERROR;
+ }
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ IDirect3DTexture9 *pTexture;
+ if (pSurface->bounce.pTexture)
+ pTexture = pSurface->bounce.pTexture;
+ else if (pSurface->formatD3D != pSurface->d3dfmtRequested)
+ pTexture = pSurface->emulated.pTexture;
+ else
+ pTexture = pSurface->u.pTexture;
+
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ D3DLOCKED_RECT LockedRect;
+
+ hr = pTexture->LockRect(i, /* texture level */
+ &LockedRect,
+ NULL, /* entire texture */
+ 0);
+
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ LogFunc(("sync texture mipmap level %d (pitch %x vs %x)\n", i, LockedRect.Pitch, pSurface->paMipmapLevels[i].cbSurfacePitch));
+
+ uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+ const uint8_t *pSrc = (uint8_t *)pSurface->paMipmapLevels[i].pSurfaceData;
+ for (uint32_t j = 0; j < pSurface->paMipmapLevels[i].cBlocksY; ++j)
+ {
+ memcpy(pDest, pSrc, pSurface->paMipmapLevels[i].cbSurfacePitch);
+
+ pDest += LockedRect.Pitch;
+ pSrc += pSurface->paMipmapLevels[i].cbSurfacePitch;
+ }
+
+ hr = pTexture->UnlockRect(i /* texture level */);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dBackCreateTexture: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pSurface->paMipmapLevels[i].fDirty = false;
+ }
+ }
+ else
+ {
+ AssertMsgFailedReturn(("enmD3DResType not expected %d\n", pSurface->enmD3DResType), VERR_INTERNAL_ERROR);
+ }
+
+ if (pSurface->bounce.pTexture)
+ {
+ Log(("vmsvga3dBackCreateTexture: sync dirty texture from bounce buffer\n"));
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE)
+ hr = pContext->pDevice->UpdateTexture(pSurface->bounce.pVolumeTexture, pSurface->u.pVolumeTexture);
+ else
+ hr = D3D9UpdateTexture(pContext, pSurface);
+ AssertMsgReturn(hr == D3D_OK, ("UpdateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* We will now use the bounce texture for all memory accesses, so free our surface memory buffer. */
+ for (uint32_t i = 0; i < pSurface->cLevels; i++)
+ {
+ RTMemFree(pSurface->paMipmapLevels[i].pSurfaceData);
+ pSurface->paMipmapLevels[i].pSurfaceData = NULL;
+ }
+
+ /* Track the UpdateTexture operation. */
+ vmsvga3dSurfaceTrackUsage(pState, pContext, pSurface);
+ }
+ pSurface->fDirty = false;
+
+ Assert(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_NONE);
+
+ pSurface->f.surfaceFlags |= SVGA3D_SURFACE_HINT_TEXTURE;
+ pSurface->idAssociatedContext = idAssociatedContext;
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Backend worker for implementing SVGA_3D_CMD_SURFACE_STRETCHBLT.
+ *
+ * @returns VBox status code.
+ * @param pThis The VGA device instance.
+ * @param pState The VMSVGA3d state.
+ * @param pDstSurface The destination host surface.
+ * @param uDstFace The destination face (valid).
+ * @param uDstMipmap The destination mipmap level (valid).
+ * @param pDstBox The destination box.
+ * @param pSrcSurface The source host surface.
+ * @param uSrcFace The destination face (valid).
+ * @param uSrcMipmap The source mimap level (valid).
+ * @param pSrcBox The source box.
+ * @param enmMode The strecht blt mode .
+ * @param pContext The VMSVGA3d context (already current for OGL).
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceStretchBlt(PVGASTATE pThis, PVMSVGA3DSTATE pState,
+ PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+ PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+ SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThis);
+
+ HRESULT hr;
+ int rc;
+
+ AssertReturn(pSrcSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED);
+ AssertReturn(pDstSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED);
+
+ /* Flush the drawing pipeline for this surface as it could be used in a shared context. */
+ vmsvga3dSurfaceFlush(pSrcSurface);
+ vmsvga3dSurfaceFlush(pDstSurface);
+
+ RECT RectSrc;
+ RectSrc.left = pSrcBox->x;
+ RectSrc.top = pSrcBox->y;
+ RectSrc.right = pSrcBox->x + pSrcBox->w; /* exclusive */
+ RectSrc.bottom = pSrcBox->y + pSrcBox->h; /* exclusive */
+ Assert(!pSrcBox->z);
+
+ RECT RectDst;
+ RectDst.left = pDstBox->x;
+ RectDst.top = pDstBox->y;
+ RectDst.right = pDstBox->x + pDstBox->w; /* exclusive */
+ RectDst.bottom = pDstBox->y + pDstBox->h; /* exclusive */
+ Assert(!pDstBox->z);
+
+ IDirect3DSurface9 *pSrc;
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pSrcSurface, uSrcFace, uSrcMipmap, false, &pSrc);
+ AssertRCReturn(rc, rc);
+
+ IDirect3DSurface9 *pDst;
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pDstSurface, uDstFace, uDstMipmap, false, &pDst);
+ AssertRCReturn(rc, rc);
+
+ D3DTEXTUREFILTERTYPE moded3d;
+ switch (enmMode)
+ {
+ case SVGA3D_STRETCH_BLT_POINT:
+ moded3d = D3DTEXF_POINT;
+ break;
+
+ case SVGA3D_STRETCH_BLT_LINEAR:
+ moded3d = D3DTEXF_LINEAR;
+ break;
+
+ default:
+ AssertFailed();
+ moded3d = D3DTEXF_NONE;
+ break;
+ }
+
+ hr = pContext->pDevice->StretchRect(pSrc, &RectSrc, pDst, &RectDst, moded3d);
+
+ D3D_RELEASE(pDst);
+ D3D_RELEASE(pSrc);
+
+ AssertMsgReturn(hr == D3D_OK, ("StretchRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Track the StretchRect operation. */
+ vmsvga3dSurfaceTrackUsage(pState, pContext, pSrcSurface);
+ vmsvga3dSurfaceTrackUsage(pState, pContext, pDstSurface);
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Backend worker for implementing SVGA_3D_CMD_SURFACE_DMA that copies one box.
+ *
+ * @returns Failure status code or @a rc.
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pState The VMSVGA3d state.
+ * @param pSurface The host surface.
+ * @param pMipLevel Mipmap level. The caller knows it already.
+ * @param uHostFace The host face (valid).
+ * @param uHostMipmap The host mipmap level (valid).
+ * @param GuestPtr The guest pointer.
+ * @param cbGuestPitch The guest pitch.
+ * @param transfer The transfer direction.
+ * @param pBox The box to copy (clipped, valid, except for guest's srcx, srcy, srcz).
+ * @param pContext The context (for OpenGL).
+ * @param rc The current rc for all boxes.
+ * @param iBox The current box number (for Direct 3D).
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceDMACopyBox(PVGASTATE pThis, PVGASTATECC pThisCC, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+ PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+ SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
+ SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox)
+{
+ HRESULT hr = D3D_OK;
+ const DWORD dwFlags = transfer == SVGA3D_READ_HOST_VRAM ? D3DLOCK_READONLY : 0;
+
+ AssertReturn(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE, VERR_NOT_IMPLEMENTED);
+
+ const bool fTexture = pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE;
+ if ( pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE
+ || fTexture)
+ {
+ rc = vmsvga3dContextFromCid(pState, pSurface->idAssociatedContext, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Get the surface involved in the transfer. */
+ IDirect3DSurface9 *pSurf;
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pSurface, uHostFace, uHostMipmap, true, &pSurf);
+ AssertRCReturn(rc, rc);
+
+ if (transfer == SVGA3D_READ_HOST_VRAM)
+ {
+ /* Texture data is copied to the host VRAM.
+ * Update the 'bounce' texture if necessary.
+ */
+ if ( fTexture
+ && pSurface->bounce.pTexture
+ && iBox == 0 /* only the first time */)
+ {
+ /** @todo inefficient for VRAM buffers!! */
+ if (RT_BOOL(pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET))
+ {
+ /* Copy the texture mipmap level to the bounce texture. */
+ hr = D3D9GetRenderTargetData(pContext, pSurface, uHostFace, uHostMipmap);
+ AssertMsgReturn(hr == D3D_OK, ("D3D9GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ }
+ }
+
+ uint32_t const u32GuestBlockX = pBox->srcx / pSurface->cxBlock;
+ uint32_t const u32GuestBlockY = pBox->srcy / pSurface->cyBlock;
+ Assert(u32GuestBlockX * pSurface->cxBlock == pBox->srcx);
+ Assert(u32GuestBlockY * pSurface->cyBlock == pBox->srcy);
+ uint32_t const cBlocksX = (pBox->w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cBlocksY = (pBox->h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+ AssertMsgReturn(cBlocksX && cBlocksY, ("Empty box %dx%d\n", pBox->w, pBox->h), VERR_INTERNAL_ERROR);
+
+ /* vmsvgaR3GmrTransfer verifies uGuestOffset.
+ * srcx(u32GuestBlockX) and srcy(u32GuestBlockY) have been verified in vmsvga3dSurfaceDMA
+ * to not cause 32 bit overflow when multiplied by cbBlock and cbGuestPitch.
+ */
+ uint64_t const uGuestOffset = u32GuestBlockX * pSurface->cbBlock + u32GuestBlockY * cbGuestPitch;
+ AssertReturn(uGuestOffset < UINT32_MAX, VERR_INVALID_PARAMETER);
+
+ RECT Rect;
+ Rect.left = pBox->x;
+ Rect.top = pBox->y;
+ Rect.right = pBox->x + pBox->w; /* exclusive */
+ Rect.bottom = pBox->y + pBox->h; /* exclusive */
+
+ D3DLOCKED_RECT LockedRect;
+ hr = pSurf->LockRect(&LockedRect, &Rect, dwFlags);
+ AssertMsgReturn(hr == D3D_OK, ("LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ LogFunc(("Lock sid=%u %s(bounce=%d) memory for rectangle (%d,%d)(%d,%d)\n",
+ pSurface->id, fTexture ? "TEXTURE " : "", RT_BOOL(pSurface->bounce.pTexture),
+ Rect.left, Rect.top, Rect.right, Rect.bottom));
+
+ /* Prepare parameters for vmsvgaR3GmrTransfer, which needs the host buffer address, size
+ * and offset of the first scanline.
+ */
+ uint32_t const cbLockedBuf = RT_ABS(LockedRect.Pitch) * cBlocksY;
+ uint8_t *pu8LockedBuf = (uint8_t *)LockedRect.pBits;
+ if (LockedRect.Pitch < 0)
+ pu8LockedBuf -= cbLockedBuf + LockedRect.Pitch;
+ uint32_t const offLockedBuf = (uint32_t)((uintptr_t)LockedRect.pBits - (uintptr_t)pu8LockedBuf);
+
+ rc = vmsvgaR3GmrTransfer(pThis,
+ pThisCC,
+ transfer,
+ pu8LockedBuf,
+ cbLockedBuf,
+ offLockedBuf,
+ LockedRect.Pitch,
+ GuestPtr,
+ (uint32_t)uGuestOffset,
+ cbGuestPitch,
+ cBlocksX * pSurface->cbBlock,
+ cBlocksY);
+ AssertRC(rc);
+
+ Log4(("first line:\n%.*Rhxd\n", cBlocksX * pSurface->cbBlock, LockedRect.pBits));
+
+ hr = pSurf->UnlockRect();
+
+ D3D_RELEASE(pSurf);
+
+ AssertMsgReturn(hr == D3D_OK, ("UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ if (transfer == SVGA3D_WRITE_HOST_VRAM)
+ {
+ /* Data is copied to the texture. Copy updated 'bounce' texture to the actual if necessary.
+ */
+ /// @todo for the last iBox only.
+ if ( fTexture
+ && pSurface->bounce.pTexture)
+ {
+ LogFunc(("Sync texture from bounce buffer\n"));
+
+ /* Copy the new contents to the actual texture object. */
+ hr = D3D9UpdateTexture(pContext, pSurface);
+ AssertMsgReturn(hr == D3D_OK, ("UpdateTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Track the copy operation. */
+ vmsvga3dSurfaceTrackUsage(pState, pContext, pSurface);
+ }
+ }
+ }
+ else if ( pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_INDEX_BUFFER)
+ {
+ /*
+ * Mesa SVGA driver can use the same buffer either for vertex or index data.
+ * But D3D distinguishes between index and vertex buffer objects.
+ * Therefore it should be possible to switch the buffer type on the fly.
+ *
+ * Always save the data to the memory buffer in pSurface->paMipmapLevels and,
+ * if necessary, recreate the corresponding D3D object with the data.
+ */
+
+ /* Buffers are uncompressed. */
+ AssertReturn(pSurface->cxBlock == 1 && pSurface->cyBlock == 1, VERR_INTERNAL_ERROR);
+
+ /* Caller already clipped pBox and buffers are 1-dimensional. */
+ Assert(pBox->y == 0 && pBox->h == 1 && pBox->z == 0 && pBox->d == 1);
+
+ /* The caller has already updated pMipLevel->pSurfaceData, see VMSVGA3DSURFACE_NEEDS_DATA. */
+
+#ifdef LOG_ENABLED
+ uint32_t const offHst = pBox->x * pSurface->cbBlock;
+ uint32_t const cbWidth = pBox->w * pSurface->cbBlock;
+ Log4(("Buffer updated at [0x%x;0x%x):\n%.*Rhxd\n", offHst, offHst + cbWidth, cbWidth, (uint8_t *)pMipLevel->pSurfaceData + offHst));
+#endif
+
+ /* Do not bother to copy the data to the D3D resource now. vmsvga3dDrawPrimitives will do that.
+ * The SVGA driver may use the same surface for both index and vertex data.
+ */
+
+ /* Make sure that vmsvga3dDrawPrimitives fetches the new data. */
+ pMipLevel->fDirty = true;
+ pSurface->fDirty = true;
+ }
+ else
+ {
+ AssertMsgFailed(("Unsupported surface flags 0x%08X, type %d\n", pSurface->f.s.surface1Flags, pSurface->enmD3DResType));
+ }
+
+ return rc;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackGenerateMipmaps(PVGASTATECC pThisCC, uint32_t sid, SVGA3dTextureFilter filter)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ HRESULT hr;
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pSurface->idAssociatedContext != SVGA3D_INVALID_ID, VERR_INTERNAL_ERROR);
+
+ Assert(filter != SVGA3D_TEX_FILTER_FLATCUBIC);
+ Assert(filter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+ pSurface->autogenFilter = filter;
+
+ Log(("vmsvga3dGenerateMipmaps: sid=%u filter=%d\n", sid, filter));
+
+ if (!pSurface->u.pSurface)
+ {
+ /** @todo stricter checks for associated context */
+ uint32_t const cid = pSurface->idAssociatedContext;
+
+ PVMSVGA3DCONTEXT pContext;
+ rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Unknown surface type; turn it into a texture. */
+ LogFunc(("unknown src surface sid=%u type=%d format=%d -> create texture\n", sid, pSurface->f.s.surface1Flags, pSurface->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ AssertReturn( pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE,
+ VERR_INVALID_PARAMETER);
+
+ hr = pSurface->u.pTexture->SetAutoGenFilterType((D3DTEXTUREFILTERTYPE)filter);
+ AssertMsg(hr == D3D_OK, ("SetAutoGenFilterType failed with %x\n", hr));
+
+ /* Generate the mip maps. */
+ pSurface->u.pTexture->GenerateMipSubLevels();
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Create a new 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ */
+static DECLCALLBACK(int) vmsvga3dBackContextDefine(PVGASTATECC pThisCC, uint32_t cid)
+{
+ int rc;
+ PVMSVGA3DCONTEXT pContext;
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+
+ Log(("vmsvga3dContextDefine id %x\n", cid));
+
+ AssertReturn(pState, VERR_NO_MEMORY);
+ AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+ if (cid >= pState->cContexts)
+ {
+ /* Grow the array. */
+ uint32_t cNew = RT_ALIGN(cid + 15, 16);
+ void *pvNew = RTMemRealloc(pState->papContexts, sizeof(pState->papContexts[0]) * cNew);
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pState->papContexts = (PVMSVGA3DCONTEXT *)pvNew;
+ while (pState->cContexts < cNew)
+ {
+ pContext = (PVMSVGA3DCONTEXT)RTMemAllocZ(sizeof(*pContext));
+ AssertReturn(pContext, VERR_NO_MEMORY);
+ pContext->id = SVGA3D_INVALID_ID;
+ pState->papContexts[pState->cContexts++] = pContext;
+ }
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (pState->papContexts[cid]->id != SVGA3D_INVALID_ID)
+ vmsvga3dBackContextDestroy(pThisCC, cid);
+
+ pContext = pState->papContexts[cid];
+ memset(pContext, 0, sizeof(*pContext));
+ pContext->id = cid;
+ for (uint32_t i = 0; i< RT_ELEMENTS(pContext->aSidActiveTextures); i++)
+ pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID;
+ pContext->state.shidVertex = SVGA3D_INVALID_ID;
+ pContext->state.shidPixel = SVGA3D_INVALID_ID;
+
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); i++)
+ pContext->state.aRenderTargets[i] = SVGA3D_INVALID_ID;
+
+ /* Create a context window with minimal 4x4 size. We will never use the swapchain
+ * to present the rendered image. Rendered images from the guest will be copied to
+ * the VMSVGA SCREEN object, which can be either an offscreen render target or
+ * system memory in the guest VRAM.
+ */
+ rc = vmsvga3dContextWindowCreate(pState->hInstance, pState->pWindowThread, pState->WndRequestSem, &pContext->hwnd);
+ AssertRCReturn(rc, rc);
+
+ /* Changed when the function returns. */
+ D3DPRESENT_PARAMETERS PresParam;
+ PresParam.BackBufferWidth = 0;
+ PresParam.BackBufferHeight = 0;
+ PresParam.BackBufferFormat = D3DFMT_UNKNOWN;
+ PresParam.BackBufferCount = 0;
+
+ PresParam.MultiSampleType = D3DMULTISAMPLE_NONE;
+ PresParam.MultiSampleQuality = 0;
+ PresParam.SwapEffect = D3DSWAPEFFECT_DISCARD;
+ PresParam.hDeviceWindow = pContext->hwnd;
+ PresParam.Windowed = TRUE;
+ PresParam.EnableAutoDepthStencil = FALSE;
+ PresParam.AutoDepthStencilFormat = D3DFMT_UNKNOWN; /* not relevant */
+ PresParam.Flags = 0;
+ PresParam.FullScreen_RefreshRateInHz = 0; /* windowed -> 0 */
+ /** @todo consider using D3DPRESENT_DONOTWAIT so we don't wait for the GPU during Present calls. */
+ PresParam.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
+
+#if 0
+ VMSVGA3DCREATEDEVICEPARAMS Params = { pState, pContext, &PresParam, 0 };
+ rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_CREATE_DEVICE, 0, (LPARAM)&Params);
+ AssertRCReturn(rc, rc);
+ hr = Params.hrc;
+
+#else
+ /** @todo Docs indicates that we should be using
+ * D3DCREATE_HARDWARE_VERTEXPROCESSING with W10 1607 and higher.
+ * https://docs.microsoft.com/en-us/windows/win32/direct3d9/d3dcreate */
+ hr = pState->pD3D9->CreateDeviceEx(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ pContext->hwnd,
+ D3DCREATE_MULTITHREADED | D3DCREATE_MIXED_VERTEXPROCESSING, //D3DCREATE_HARDWARE_VERTEXPROCESSING,
+ &PresParam,
+ NULL,
+ &pContext->pDevice);
+#endif
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dContextDefine: CreateDevice failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ Log(("vmsvga3dContextDefine: Backbuffer (%d,%d) count=%d format=%x\n", PresParam.BackBufferWidth, PresParam.BackBufferHeight, PresParam.BackBufferCount, PresParam.BackBufferFormat));
+ return VINF_SUCCESS;
+}
+
+/**
+ * Destroy an existing 3d context
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param cid Context id
+ */
+static DECLCALLBACK(int) vmsvga3dBackContextDestroy(PVGASTATECC pThisCC, uint32_t cid)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ AssertReturn(cid < SVGA3D_MAX_CONTEXT_IDS, VERR_INVALID_PARAMETER);
+
+ if ( cid < pState->cContexts
+ && pState->papContexts[cid]->id == cid)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[cid];
+
+ Log(("vmsvga3dContextDestroy id %x\n", cid));
+
+ /* Cleanup the device runtime state. */
+ if (pContext->pDevice)
+ pContext->pDevice->SetVertexDeclaration(NULL);
+ D3D_RELEASE(pContext->d3dState.pVertexDecl);
+
+ /* Check for all surfaces that are associated with this context to remove all dependencies */
+ for (uint32_t sid = 0; sid < pState->cSurfaces; sid++)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ if ( pSurface->id == sid
+ && pSurface->idAssociatedContext == cid)
+ {
+ int rc;
+
+ LogFunc(("Remove all dependencies for surface sid=%u\n", sid));
+
+ SVGA3dSurfaceAllFlags const surfaceFlags = pSurface->f.surfaceFlags;
+ SVGA3dSurfaceFormat const format = pSurface->format;
+ uint32_t const multisampleCount = pSurface->multiSampleCount;
+ SVGA3dTextureFilter const autogenFilter = pSurface->autogenFilter;
+ uint32_t const cFaces = pSurface->cFaces;
+ uint32_t const cMipLevels = pSurface->cLevels;
+
+ SVGA3dSize *pMipLevelSize = (SVGA3dSize *)RTMemAllocZ(cMipLevels * cFaces * sizeof(SVGA3dSize));
+ AssertReturn(pMipLevelSize, VERR_NO_MEMORY);
+
+ for (uint32_t face = 0; face < pSurface->cFaces; face++)
+ {
+ for (uint32_t i = 0; i < cMipLevels; i++)
+ {
+ uint32_t idx = i + face * cMipLevels;
+ memcpy(&pMipLevelSize[idx], &pSurface->paMipmapLevels[idx].mipmapSize, sizeof(SVGA3dSize));
+ }
+ }
+
+ /* Recreate the surface with the original settings; destroys the contents, but that seems fairly safe since the context is also destroyed. */
+#ifdef DEBUG_sunlover
+ /** @todo not safe with shared objects */
+ Assert(pSurface->pSharedObjectTree == NULL);
+#endif
+
+ rc = vmsvga3dSurfaceDestroy(pThisCC, sid);
+ AssertRC(rc);
+
+ rc = vmsvga3dSurfaceDefine(pThisCC, sid, surfaceFlags, format, multisampleCount, autogenFilter,
+ cMipLevels, &pMipLevelSize[0], /* arraySize = */ 0, /* fAllocMipLevels = */ true);
+ AssertRC(rc);
+
+ Assert(!pSurface->u.pSurface);
+ }
+ else
+ {
+ /* Check for a shared surface object. */
+ PVMSVGA3DSHAREDSURFACE pSharedSurface = (PVMSVGA3DSHAREDSURFACE)RTAvlU32Get(&pSurface->pSharedObjectTree, cid);
+ if (pSharedSurface)
+ {
+ LogFunc(("Remove shared dependency for surface sid=%u\n", sid));
+
+ switch (pSurface->enmD3DResType)
+ {
+ case VMSVGA3D_D3DRESTYPE_TEXTURE:
+ Assert(pSharedSurface->u.pTexture);
+ D3D_RELEASE(pSharedSurface->u.pTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+ Assert(pSharedSurface->u.pCubeTexture);
+ D3D_RELEASE(pSharedSurface->u.pCubeTexture);
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+ Assert(pSharedSurface->u.pVolumeTexture);
+ D3D_RELEASE(pSharedSurface->u.pVolumeTexture);
+ break;
+
+ default:
+ AssertFailed();
+ break;
+ }
+ RTAvlU32Remove(&pSurface->pSharedObjectTree, cid);
+ RTMemFree(pSharedSurface);
+ }
+ }
+ }
+
+ /* Destroy all leftover pixel shaders. */
+ for (uint32_t i = 0; i < pContext->cPixelShaders; i++)
+ {
+ if (pContext->paPixelShader[i].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, pContext->paPixelShader[i].cid, pContext->paPixelShader[i].id, pContext->paPixelShader[i].type);
+ }
+ if (pContext->paPixelShader)
+ RTMemFree(pContext->paPixelShader);
+
+ /* Destroy all leftover vertex shaders. */
+ for (uint32_t i = 0; i < pContext->cVertexShaders; i++)
+ {
+ if (pContext->paVertexShader[i].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, pContext->paVertexShader[i].cid, pContext->paVertexShader[i].id, pContext->paVertexShader[i].type);
+ }
+ if (pContext->paVertexShader)
+ RTMemFree(pContext->paVertexShader);
+
+ if (pContext->state.paVertexShaderConst)
+ RTMemFree(pContext->state.paVertexShaderConst);
+ if (pContext->state.paPixelShaderConst)
+ RTMemFree(pContext->state.paPixelShaderConst);
+
+ vmsvga3dBackOcclusionQueryDelete(pThisCC, pContext);
+
+ /* Release the D3D device object */
+ D3D_RELEASE(pContext->pDevice);
+
+ /* Destroy the window we've created. */
+ int rc = vmsvga3dSendThreadMessage(pState->pWindowThread, pState->WndRequestSem, WM_VMSVGA3D_DESTROYWINDOW, (WPARAM)pContext->hwnd, 0);
+ AssertRC(rc);
+
+ memset(pContext, 0, sizeof(*pContext));
+ pContext->id = SVGA3D_INVALID_ID;
+ }
+ else
+ AssertFailed();
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ RT_NOREF(pThis, pThisCC, pScreen);
+ return VERR_NOT_IMPLEMENTED;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ RT_NOREF(pThisCC, pScreen);
+ return VERR_NOT_IMPLEMENTED;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSurfaceBlitToScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen,
+ SVGASignedRect destRect, SVGA3dSurfaceImageId srcImage,
+ SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *paRects)
+{
+ RT_NOREF(pThisCC, pScreen, destRect, srcImage, srcRect, cRects, paRects);
+ return VERR_NOT_IMPLEMENTED;
+}
+
+static int vmsvga3dContextTrackUsage(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ /* Inject fences to make sure we can track surface usage in case the client wants to reuse it in another context. */
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); ++i)
+ {
+ if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceTrackUsageById(pState, pContext, pContext->aSidActiveTextures[i]);
+ }
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); ++i)
+ if (pContext->state.aRenderTargets[i] != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceTrackUsageById(pState, pContext, pContext->state.aRenderTargets[i]);
+
+ return VINF_SUCCESS;
+}
+
+/* Handle resize */
+static DECLCALLBACK(int) vmsvga3dBackChangeMode(PVGASTATECC pThisCC)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ /* Resize all active contexts. */
+ for (uint32_t i = 0; i < pState->cContexts; i++)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[i];
+ uint32_t cid = pContext->id;
+
+ if (cid != SVGA3D_INVALID_ID)
+ {
+ D3DPRESENT_PARAMETERS PresParam;
+ D3DVIEWPORT9 viewportOrg;
+ HRESULT hr;
+
+#ifdef VMSVGA3D_DIRECT3D9_RESET
+ /* Sync back all surface data as everything is lost after the Reset. */
+ for (uint32_t sid = 0; sid < pState->cSurfaces; sid++)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ if ( pSurface->id == sid
+ && pSurface->idAssociatedContext == cid
+ && pSurface->u.pSurface)
+ {
+ Log(("vmsvga3dChangeMode: sync back data of surface sid=%u (fDirty=%d)\n", sid, pSurface->fDirty));
+
+ /* Reallocate our surface memory buffers. */
+ for (uint32_t i = 0; i < pSurface->cMipLevels; i++)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[i];
+
+ pMipmapLevel->pSurfaceData = RTMemAllocZ(pMipmapLevel->cbSurface);
+ AssertReturn(pMipmapLevel->pSurfaceData, VERR_NO_MEMORY);
+
+ if (!pSurface->fDirty)
+ {
+ D3DLOCKED_RECT LockedRect;
+
+ if (pSurface->bounce.pTexture)
+ {
+ IDirect3DSurface9 *pSrc, *pDest;
+
+ /** @todo only sync when something was actually rendered (since the last sync) */
+ Log(("vmsvga3dChangeMode: sync bounce buffer (level %d)\n", i));
+ hr = pSurface->bounce.pTexture->GetSurfaceLevel(i, &pDest);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pSurface->u.pTexture->GetSurfaceLevel(i, &pSrc);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pContext->pDevice->GetRenderTargetData(pSrc, pDest);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetRenderTargetData failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ D3D_RELEASE(pSrc);
+ D3D_RELEASE(pDest);
+
+ hr = pSurface->bounce.pTexture->LockRect(i,
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ }
+ else
+ hr = pSurface->u.pTexture->LockRect(i,
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Copy the data one line at a time in case the internal pitch is different. */
+ for (uint32_t j = 0; j < pMipmapLevel->size.height; j++)
+ {
+ memcpy((uint8_t *)pMipmapLevel->pSurfaceData + j * pMipmapLevel->cbSurfacePitch, (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch, pMipmapLevel->cbSurfacePitch);
+ }
+
+ if (pSurface->bounce.pTexture)
+ hr = pSurface->bounce.pTexture->UnlockRect(i);
+ else
+ hr = pSurface->u.pTexture->UnlockRect(i);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ }
+
+
+ switch (pSurface->flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)
+ {
+ case SVGA3D_SURFACE_CUBEMAP:
+ case SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_HINT_TEXTURE:
+ case SVGA3D_SURFACE_CUBEMAP | SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+ D3D_RELEASE(pSurface->u.pCubeTexture);
+ D3D_RELEASE(pSurface->bounce.pCubeTexture);
+ break;
+
+ case SVGA3D_SURFACE_HINT_INDEXBUFFER | SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+ case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+ case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+ if (pSurface->fu32ActualUsageFlags == SVGA3D_SURFACE_HINT_VERTEXBUFFER)
+ D3D_RELEASE(pSurface->u.pVertexBuffer);
+ else if (pSurface->fu32ActualUsageFlags == SVGA3D_SURFACE_HINT_INDEXBUFFER)
+ D3D_RELEASE(pSurface->u.pIndexBuffer);
+ else
+ AssertMsg(pSurface->u.pVertexBuffer == NULL, ("fu32ActualUsageFlags %x\n", pSurface->fu32ActualUsageFlags));
+ break;
+
+ case SVGA3D_SURFACE_HINT_TEXTURE:
+ case SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET:
+ D3D_RELEASE(pSurface->u.pTexture);
+ D3D_RELEASE(pSurface->bounce.pTexture);
+ break;
+
+ case SVGA3D_SURFACE_HINT_RENDERTARGET:
+ case SVGA3D_SURFACE_HINT_DEPTHSTENCIL:
+ if (pSurface->fStencilAsTexture)
+ D3D_RELEASE(pSurface->u.pTexture);
+ else
+ D3D_RELEASE(pSurface->u.pSurface);
+ break;
+
+ default:
+ AssertFailed();
+ break;
+ }
+ RTAvlU32Destroy(&pSurface->pSharedObjectTree, vmsvga3dSharedSurfaceDestroyTree, pSurface);
+ Assert(pSurface->pSharedObjectTree == NULL);
+
+ pSurface->idAssociatedContext = SVGA3D_INVALID_ID;
+ pSurface->hSharedObject = 0;
+ }
+ }
+#endif /* #ifdef VMSVGA3D_DIRECT3D9_RESET */
+
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Cleanup the device runtime state. */
+ pContext->pDevice->SetVertexDeclaration(NULL);
+ D3D_RELEASE(pContext->d3dState.pVertexDecl);
+
+ hr = pContext->pDevice->GetViewport(&viewportOrg);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ Log(("vmsvga3dChangeMode: old viewport settings (%d,%d)(%d,%d) z=%d/%d\n", viewportOrg.X, viewportOrg.Y, viewportOrg.Width, viewportOrg.Height, (uint32_t)(viewportOrg.MinZ * 100.0), (uint32_t)(viewportOrg.MaxZ * 100.0)));
+
+ /* Changed when the function returns. */
+ PresParam.BackBufferWidth = 0;
+ PresParam.BackBufferHeight = 0;
+ PresParam.BackBufferFormat = D3DFMT_UNKNOWN;
+ PresParam.BackBufferCount = 0;
+
+ PresParam.MultiSampleType = D3DMULTISAMPLE_NONE;
+ PresParam.MultiSampleQuality = 0;
+ PresParam.SwapEffect = D3DSWAPEFFECT_DISCARD;
+ PresParam.hDeviceWindow = pContext->hwnd;
+ PresParam.Windowed = TRUE;
+ PresParam.EnableAutoDepthStencil = FALSE;
+ PresParam.AutoDepthStencilFormat = D3DFMT_UNKNOWN; /* not relevant */
+ PresParam.Flags = 0;
+ PresParam.FullScreen_RefreshRateInHz = 0; /* windowed -> 0 */
+ /** @todo consider using D3DPRESENT_DONOTWAIT so we don't wait for the GPU during Present calls. */
+ PresParam.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;;
+
+ /* ResetEx does not trash the device state */
+ hr = pContext->pDevice->ResetEx(&PresParam, NULL);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: Reset failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ Log(("vmsvga3dChangeMode: Backbuffer (%d,%d) count=%d format=%x\n", PresParam.BackBufferWidth, PresParam.BackBufferHeight, PresParam.BackBufferCount, PresParam.BackBufferFormat));
+
+ /* ResetEx changes the viewport; restore it again. */
+ hr = pContext->pDevice->SetViewport(&viewportOrg);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+#ifdef LOG_ENABLED
+ {
+ D3DVIEWPORT9 viewport;
+ hr = pContext->pDevice->GetViewport(&viewport);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dChangeMode: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ Log(("vmsvga3dChangeMode: changed viewport settings (%d,%d)(%d,%d) z=%d/%d\n", viewport.X, viewport.Y, viewport.Width, viewport.Height, (uint32_t)(viewport.MinZ * 100.0), (uint32_t)(viewport.MaxZ * 100.0)));
+ }
+#endif
+
+ /* First set the render targets as they change the internal state (reset viewport etc) */
+ Log(("vmsvga3dChangeMode: Recreate render targets BEGIN\n"));
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aRenderTargets); j++)
+ {
+ if (pContext->state.aRenderTargets[j] != SVGA3D_INVALID_ID)
+ {
+ SVGA3dSurfaceImageId target;
+
+ target.sid = pContext->state.aRenderTargets[j];
+ target.face = 0;
+ target.mipmap = 0;
+ int rc = vmsvga3dBackSetRenderTarget(pThisCC, cid, (SVGA3dRenderTargetType)j, target);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+#ifdef VMSVGA3D_DIRECT3D9_RESET
+ /* Recreate the render state */
+ Log(("vmsvga3dChangeMode: Recreate render state BEGIN\n"));
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderState); i++)
+ {
+ SVGA3dRenderState *pRenderState = &pContext->state.aRenderState[i];
+
+ if (pRenderState->state != SVGA3D_RS_INVALID)
+ vmsvga3dBackSetRenderState(pThisCC, pContext->id, 1, pRenderState);
+ }
+ Log(("vmsvga3dChangeMode: Recreate render state END\n"));
+
+ /* Recreate the texture state */
+ Log(("vmsvga3dChangeMode: Recreate texture state BEGIN\n"));
+ for (uint32_t iStage = 0; iStage < RT_ELEMENTS(pContext->state.aTextureStates); iStage++)
+ {
+ for (uint32_t j = 0; j < RT_ELEMENTS(pContext->state.aTextureStates[0]); j++)
+ {
+ SVGA3dTextureState *pTextureState = &pContext->state.aTextureStates[iStage][j];
+
+ if (pTextureState->name != SVGA3D_RS_INVALID)
+ vmsvga3dBackSetTextureState(pThisCC, pContext->id, 1, pTextureState);
+ }
+ }
+ Log(("vmsvga3dChangeMode: Recreate texture state END\n"));
+
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_SCISSORRECT)
+ vmsvga3dBackSetScissorRect(pThis, cid, &pContext->state.RectScissor);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_ZRANGE)
+ vmsvga3dBackSetZRange(pThisCC, cid, pContext->state.zRange);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
+ vmsvga3dBackSetViewPort(pThis, cid, &pContext->state.RectViewPort);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VERTEXSHADER)
+ vmsvga3dBackShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_VS, pContext->state.shidVertex);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_PIXELSHADER)
+ vmsvga3dBackShaderSet(pThis, pContext, cid, SVGA3D_SHADERTYPE_PS, pContext->state.shidPixel);
+ /** @todo restore more state data */
+#endif /* #ifdef VMSVGA3D_DIRECT3D9_RESET */
+ }
+ }
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetTransform(PVGASTATECC pThisCC, uint32_t cid, SVGA3dTransformType type, float matrix[16])
+{
+ D3DTRANSFORMSTATETYPE d3dState;
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetTransform %x %s\n", cid, vmsvgaTransformToString(type)));
+
+ ASSERT_GUEST_RETURN((unsigned)type < SVGA3D_TRANSFORM_MAX, VERR_INVALID_PARAMETER);
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ switch (type)
+ {
+ case SVGA3D_TRANSFORM_VIEW:
+ d3dState = D3DTS_VIEW;
+ break;
+ case SVGA3D_TRANSFORM_PROJECTION:
+ d3dState = D3DTS_PROJECTION;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE0:
+ d3dState = D3DTS_TEXTURE0;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE1:
+ d3dState = D3DTS_TEXTURE1;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE2:
+ d3dState = D3DTS_TEXTURE2;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE3:
+ d3dState = D3DTS_TEXTURE3;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE4:
+ d3dState = D3DTS_TEXTURE4;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE5:
+ d3dState = D3DTS_TEXTURE5;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE6:
+ d3dState = D3DTS_TEXTURE6;
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE7:
+ d3dState = D3DTS_TEXTURE7;
+ break;
+ case SVGA3D_TRANSFORM_WORLD:
+ d3dState = D3DTS_WORLD;
+ break;
+ case SVGA3D_TRANSFORM_WORLD1:
+ d3dState = D3DTS_WORLD1;
+ break;
+ case SVGA3D_TRANSFORM_WORLD2:
+ d3dState = D3DTS_WORLD2;
+ break;
+ case SVGA3D_TRANSFORM_WORLD3:
+ d3dState = D3DTS_WORLD3;
+ break;
+
+ default:
+ Log(("vmsvga3dSetTransform: unknown type!!\n"));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ /* Save this matrix for vm state save/restore. */
+ pContext->state.aTransformState[type].fValid = true;
+ memcpy(pContext->state.aTransformState[type].matrix, matrix, sizeof(pContext->state.aTransformState[type].matrix));
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_TRANSFORM;
+
+ Log(("Matrix [%d %d %d %d]\n", (int)(matrix[0] * 10.0), (int)(matrix[1] * 10.0), (int)(matrix[2] * 10.0), (int)(matrix[3] * 10.0)));
+ Log((" [%d %d %d %d]\n", (int)(matrix[4] * 10.0), (int)(matrix[5] * 10.0), (int)(matrix[6] * 10.0), (int)(matrix[7] * 10.0)));
+ Log((" [%d %d %d %d]\n", (int)(matrix[8] * 10.0), (int)(matrix[9] * 10.0), (int)(matrix[10] * 10.0), (int)(matrix[11] * 10.0)));
+ Log((" [%d %d %d %d]\n", (int)(matrix[12] * 10.0), (int)(matrix[13] * 10.0), (int)(matrix[14] * 10.0), (int)(matrix[15] * 10.0)));
+ hr = pContext->pDevice->SetTransform(d3dState, (const D3DMATRIX *)matrix);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetTransform: SetTransform failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetZRange(PVGASTATECC pThisCC, uint32_t cid, SVGA3dZRange zRange)
+{
+ D3DVIEWPORT9 viewport;
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetZRange %x min=%d max=%d\n", cid, (uint32_t)(zRange.min * 100.0), (uint32_t)(zRange.max * 100.0)));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ pContext->state.zRange = zRange;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_ZRANGE;
+
+ hr = pContext->pDevice->GetViewport(&viewport);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetZRange: GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ Log(("vmsvga3dSetZRange: old viewport settings (%d,%d)(%d,%d) z=%d/%d\n", viewport.X, viewport.Y, viewport.Width, viewport.Height, (uint32_t)(viewport.MinZ * 100.0), (uint32_t)(viewport.MaxZ * 100.0)));
+ /** @todo convert the depth range from -1-1 to 0-1 although we shouldn't be getting such values in the first place... */
+ if (zRange.min < 0.0)
+ zRange.min = 0.0;
+ if (zRange.max > 1.0)
+ zRange.max = 1.0;
+
+ viewport.MinZ = zRange.min;
+ viewport.MaxZ = zRange.max;
+ hr = pContext->pDevice->SetViewport(&viewport);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetZRange: SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+/**
+ * Convert SVGA blend op value to its D3D equivalent
+ */
+static DWORD vmsvga3dBlendOp2D3D(uint32_t blendOp, DWORD defaultBlendOp)
+{
+ switch (blendOp)
+ {
+ case SVGA3D_BLENDOP_ZERO:
+ return D3DBLEND_ZERO;
+ case SVGA3D_BLENDOP_ONE:
+ return D3DBLEND_ONE;
+ case SVGA3D_BLENDOP_SRCCOLOR:
+ return D3DBLEND_SRCCOLOR;
+ case SVGA3D_BLENDOP_INVSRCCOLOR:
+ return D3DBLEND_INVSRCCOLOR;
+ case SVGA3D_BLENDOP_SRCALPHA:
+ return D3DBLEND_SRCALPHA;
+ case SVGA3D_BLENDOP_INVSRCALPHA:
+ return D3DBLEND_INVSRCALPHA;
+ case SVGA3D_BLENDOP_DESTALPHA:
+ return D3DBLEND_DESTALPHA;
+ case SVGA3D_BLENDOP_INVDESTALPHA:
+ return D3DBLEND_INVDESTALPHA;
+ case SVGA3D_BLENDOP_DESTCOLOR:
+ return D3DBLEND_DESTCOLOR;
+ case SVGA3D_BLENDOP_INVDESTCOLOR:
+ return D3DBLEND_INVDESTCOLOR;
+ case SVGA3D_BLENDOP_SRCALPHASAT:
+ return D3DBLEND_SRCALPHASAT;
+ case SVGA3D_BLENDOP_BLENDFACTOR:
+ return D3DBLEND_BLENDFACTOR;
+ case SVGA3D_BLENDOP_INVBLENDFACTOR:
+ return D3DBLEND_INVBLENDFACTOR;
+ default:
+ AssertFailed();
+ return defaultBlendOp;
+ }
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetRenderState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState)
+{
+ DWORD val = 0; /* Shut up MSC */
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetRenderState cid=%u cRenderStates=%d\n", cid, cRenderStates));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ for (unsigned i = 0; i < cRenderStates; i++)
+ {
+ D3DRENDERSTATETYPE renderState = D3DRS_FORCE_DWORD;
+
+ Log(("vmsvga3dSetRenderState: state=%s (%d) val=%x\n", vmsvga3dGetRenderStateName(pRenderState[i].state), pRenderState[i].state, pRenderState[i].uintValue));
+ /* Save the render state for vm state saving. */
+ ASSERT_GUEST_RETURN((unsigned)pRenderState[i].state < SVGA3D_RS_MAX, VERR_INVALID_PARAMETER);
+ pContext->state.aRenderState[pRenderState[i].state] = pRenderState[i];
+
+ switch (pRenderState[i].state)
+ {
+ case SVGA3D_RS_ZENABLE: /* SVGA3dBool */
+ renderState = D3DRS_ZENABLE;
+ val = pRenderState[i].uintValue;
+ Assert(val == D3DZB_FALSE || val == D3DZB_TRUE);
+ break;
+
+ case SVGA3D_RS_ZWRITEENABLE: /* SVGA3dBool */
+ renderState = D3DRS_ZWRITEENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_ALPHATESTENABLE: /* SVGA3dBool */
+ renderState = D3DRS_ALPHATESTENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_DITHERENABLE: /* SVGA3dBool */
+ renderState = D3DRS_DITHERENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_BLENDENABLE: /* SVGA3dBool */
+ renderState = D3DRS_ALPHABLENDENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGENABLE: /* SVGA3dBool */
+ renderState = D3DRS_FOGENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SPECULARENABLE: /* SVGA3dBool */
+ renderState = D3DRS_SPECULARENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_LIGHTINGENABLE: /* SVGA3dBool */
+ renderState = D3DRS_LIGHTING;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_NORMALIZENORMALS: /* SVGA3dBool */
+ renderState = D3DRS_NORMALIZENORMALS;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_POINTSPRITEENABLE: /* SVGA3dBool */
+ renderState = D3DRS_POINTSPRITEENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_POINTSCALEENABLE: /* SVGA3dBool */
+ renderState = D3DRS_POINTSCALEENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_POINTSIZE: /* float */
+ renderState = D3DRS_POINTSIZE;
+ val = pRenderState[i].uintValue;
+ Log(("SVGA3D_RS_POINTSIZE: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+ break;
+
+ case SVGA3D_RS_POINTSIZEMIN: /* float */
+ renderState = D3DRS_POINTSIZE_MIN;
+ val = pRenderState[i].uintValue;
+ Log(("SVGA3D_RS_POINTSIZEMIN: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+ break;
+
+ case SVGA3D_RS_POINTSIZEMAX: /* float */
+ renderState = D3DRS_POINTSIZE_MAX;
+ val = pRenderState[i].uintValue;
+ Log(("SVGA3D_RS_POINTSIZEMAX: %d\n", (uint32_t) (pRenderState[i].floatValue * 100.0)));
+ break;
+
+ case SVGA3D_RS_POINTSCALE_A: /* float */
+ renderState = D3DRS_POINTSCALE_A;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_POINTSCALE_B: /* float */
+ renderState = D3DRS_POINTSCALE_B;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_POINTSCALE_C: /* float */
+ renderState = D3DRS_POINTSCALE_C;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_AMBIENT: /* SVGA3dColor - identical */
+ renderState = D3DRS_AMBIENT;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CLIPPLANEENABLE: /* SVGA3dClipPlanes - identical */
+ renderState = D3DRS_CLIPPLANEENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGCOLOR: /* SVGA3dColor - identical */
+ renderState = D3DRS_FOGCOLOR;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGSTART: /* float */
+ renderState = D3DRS_FOGSTART;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGEND: /* float */
+ renderState = D3DRS_FOGEND;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGDENSITY: /* float */
+ renderState = D3DRS_FOGDENSITY;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_RANGEFOGENABLE: /* SVGA3dBool */
+ renderState = D3DRS_RANGEFOGENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_FOGMODE: /* SVGA3dFogMode */
+ {
+ SVGA3dFogMode mode;
+ mode.uintValue = pRenderState[i].uintValue;
+
+ switch (mode.function)
+ {
+ case SVGA3D_FOGFUNC_INVALID:
+ val = D3DFOG_NONE;
+ break;
+ case SVGA3D_FOGFUNC_EXP:
+ val = D3DFOG_EXP;
+ break;
+ case SVGA3D_FOGFUNC_EXP2:
+ val = D3DFOG_EXP2;
+ break;
+ case SVGA3D_FOGFUNC_LINEAR:
+ val = D3DFOG_LINEAR;
+ break;
+ case SVGA3D_FOGFUNC_PER_VERTEX: /* unable to find a d3d9 equivalent */
+ AssertMsgFailedReturn(("Unsupported fog function SVGA3D_FOGFUNC_PER_VERTEX\n"), VERR_INTERNAL_ERROR);
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected fog function %d\n", mode.function), VERR_INTERNAL_ERROR);
+ break;
+ }
+
+ /* The fog type determines the render state. */
+ switch (mode.type)
+ {
+ case SVGA3D_FOGTYPE_VERTEX:
+ renderState = D3DRS_FOGVERTEXMODE;
+ break;
+ case SVGA3D_FOGTYPE_PIXEL:
+ renderState = D3DRS_FOGTABLEMODE;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected fog type %d\n", mode.type), VERR_INTERNAL_ERROR);
+ break;
+ }
+
+ /* Set the fog base to depth or range. */
+ switch (mode.base)
+ {
+ case SVGA3D_FOGBASE_DEPTHBASED:
+ hr = pContext->pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, FALSE);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderState: SetRenderState SVGA3D_FOGBASE_DEPTHBASED failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+ case SVGA3D_FOGBASE_RANGEBASED:
+ hr = pContext->pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, TRUE);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderState: SetRenderState SVGA3D_FOGBASE_RANGEBASED failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+ default:
+ /* ignore */
+ AssertMsgFailed(("Unexpected fog base %d\n", mode.base));
+ break;
+ }
+ break;
+ }
+
+ case SVGA3D_RS_FILLMODE: /* SVGA3dFillMode */
+ {
+ SVGA3dFillMode mode;
+
+ mode.uintValue = pRenderState[i].uintValue;
+
+ switch (mode.mode)
+ {
+ case SVGA3D_FILLMODE_POINT:
+ val = D3DFILL_POINT;
+ break;
+ case SVGA3D_FILLMODE_LINE:
+ val = D3DFILL_WIREFRAME;
+ break;
+ case SVGA3D_FILLMODE_FILL:
+ val = D3DFILL_SOLID;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected fill mode %d\n", mode.mode), VERR_INTERNAL_ERROR);
+ break;
+ }
+ /** @todo ignoring face for now. */
+ renderState = D3DRS_FILLMODE;
+ break;
+ }
+
+ case SVGA3D_RS_SHADEMODE: /* SVGA3dShadeMode */
+ renderState = D3DRS_SHADEMODE;
+ AssertCompile(D3DSHADE_FLAT == SVGA3D_SHADEMODE_FLAT);
+ val = pRenderState[i].uintValue; /* SVGA3dShadeMode == D3DSHADEMODE */
+ break;
+
+ case SVGA3D_RS_LINEPATTERN: /* SVGA3dLinePattern */
+ /* No longer supported by d3d; mesagl comments suggest not all backends support it */
+ /** @todo */
+ Log(("WARNING: SVGA3D_RS_LINEPATTERN %x not supported!!\n", pRenderState[i].uintValue));
+ /*
+ renderState = D3DRS_LINEPATTERN;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_SRCBLEND: /* SVGA3dBlendOp */
+ renderState = D3DRS_SRCBLEND;
+ val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ONE /* default */);
+ break;
+
+ case SVGA3D_RS_DSTBLEND: /* SVGA3dBlendOp */
+ renderState = D3DRS_DESTBLEND;
+ val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ZERO /* default */);
+ break;
+
+ case SVGA3D_RS_BLENDEQUATION: /* SVGA3dBlendEquation - identical */
+ AssertCompile(SVGA3D_BLENDEQ_MAXIMUM == D3DBLENDOP_MAX);
+ renderState = D3DRS_BLENDOP;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CULLMODE: /* SVGA3dFace */
+ {
+ switch (pRenderState[i].uintValue)
+ {
+ case SVGA3D_FACE_NONE:
+ val = D3DCULL_NONE;
+ break;
+ case SVGA3D_FACE_FRONT:
+ val = D3DCULL_CW;
+ break;
+ case SVGA3D_FACE_BACK:
+ val = D3DCULL_CCW;
+ break;
+ case SVGA3D_FACE_FRONT_BACK:
+ AssertFailed();
+ val = D3DCULL_CW;
+ break;
+ default:
+ AssertMsgFailedReturn(("Unexpected cull mode %d\n", pRenderState[i].uintValue), VERR_INTERNAL_ERROR);
+ break;
+ }
+ renderState = D3DRS_CULLMODE;
+ break;
+ }
+
+ case SVGA3D_RS_ZFUNC: /* SVGA3dCmpFunc - identical */
+ AssertCompile(SVGA3D_CMP_ALWAYS == D3DCMP_ALWAYS);
+ renderState = D3DRS_ZFUNC;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_ALPHAFUNC: /* SVGA3dCmpFunc - identical */
+ renderState = D3DRS_ALPHAFUNC;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILENABLE: /* SVGA3dBool */
+ renderState = D3DRS_STENCILENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILREF: /* uint32_t */
+ renderState = D3DRS_STENCILREF;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILMASK: /* uint32_t */
+ renderState = D3DRS_STENCILMASK;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILWRITEMASK: /* uint32_t */
+ renderState = D3DRS_STENCILWRITEMASK;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILFUNC: /* SVGA3dCmpFunc - identical */
+ renderState = D3DRS_STENCILFUNC;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILFAIL: /* SVGA3dStencilOp - identical */
+ AssertCompile(D3DSTENCILOP_KEEP == SVGA3D_STENCILOP_KEEP);
+ AssertCompile(D3DSTENCILOP_DECR == SVGA3D_STENCILOP_DECR);
+ renderState = D3DRS_STENCILFAIL;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILZFAIL: /* SVGA3dStencilOp - identical */
+ renderState = D3DRS_STENCILZFAIL;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILPASS: /* SVGA3dStencilOp - identical */
+ renderState = D3DRS_STENCILPASS;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_ALPHAREF: /* float (0.0 .. 1.0) */
+ renderState = D3DRS_ALPHAREF;
+ val = (uint8_t)(pRenderState[i].floatValue * 255.0f); /* D3DRS_ALPHAREF 0..255 */
+ break;
+
+ case SVGA3D_RS_FRONTWINDING: /* SVGA3dFrontWinding */
+ Assert(pRenderState[i].uintValue == SVGA3D_FRONTWINDING_CW);
+ /*
+ renderState = D3DRS_FRONTWINDING; //D3DRS_TWOSIDEDSTENCILMODE
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_COORDINATETYPE: /* SVGA3dCoordinateType */
+ Assert(pRenderState[i].uintValue == SVGA3D_COORDINATE_LEFTHANDED);
+ /** @todo setup a view matrix to scale the world space by -1 in the z-direction for right handed coordinates. */
+ /*
+ renderState = D3DRS_COORDINATETYPE;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_ZBIAS: /* float */
+ /** @todo unknown meaning; depth bias is not identical
+ renderState = D3DRS_DEPTHBIAS;
+ val = pRenderState[i].uintValue;
+ */
+ Log(("vmsvga3dSetRenderState: WARNING unsupported SVGA3D_RS_ZBIAS\n"));
+ break;
+
+ case SVGA3D_RS_SLOPESCALEDEPTHBIAS: /* float */
+ renderState = D3DRS_SLOPESCALEDEPTHBIAS;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_DEPTHBIAS: /* float */
+ renderState = D3DRS_DEPTHBIAS;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_COLORWRITEENABLE: /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+ renderState = D3DRS_COLORWRITEENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_VERTEXMATERIALENABLE: /* SVGA3dBool */
+ //AssertFailed();
+ renderState = D3DRS_INDEXEDVERTEXBLENDENABLE; /* correct?? */
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_DIFFUSEMATERIALSOURCE: /* SVGA3dVertexMaterial - identical */
+ AssertCompile(D3DMCS_COLOR2 == SVGA3D_VERTEXMATERIAL_SPECULAR);
+ renderState = D3DRS_DIFFUSEMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SPECULARMATERIALSOURCE: /* SVGA3dVertexMaterial - identical */
+ renderState = D3DRS_SPECULARMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_AMBIENTMATERIALSOURCE: /* SVGA3dVertexMaterial - identical */
+ renderState = D3DRS_AMBIENTMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_EMISSIVEMATERIALSOURCE: /* SVGA3dVertexMaterial - identical */
+ renderState = D3DRS_EMISSIVEMATERIALSOURCE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_TEXTUREFACTOR: /* SVGA3dColor - identical */
+ renderState = D3DRS_TEXTUREFACTOR;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_LOCALVIEWER: /* SVGA3dBool */
+ renderState = D3DRS_LOCALVIEWER;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SCISSORTESTENABLE: /* SVGA3dBool */
+ renderState = D3DRS_SCISSORTESTENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_BLENDCOLOR: /* SVGA3dColor - identical */
+ renderState = D3DRS_BLENDFACTOR;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_STENCILENABLE2SIDED: /* SVGA3dBool */
+ renderState = D3DRS_TWOSIDEDSTENCILMODE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CCWSTENCILFUNC: /* SVGA3dCmpFunc - identical */
+ renderState = D3DRS_CCW_STENCILFUNC;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CCWSTENCILFAIL: /* SVGA3dStencilOp - identical */
+ renderState = D3DRS_CCW_STENCILFAIL;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CCWSTENCILZFAIL: /* SVGA3dStencilOp - identical */
+ renderState = D3DRS_CCW_STENCILZFAIL;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CCWSTENCILPASS: /* SVGA3dStencilOp - identical */
+ renderState = D3DRS_CCW_STENCILPASS;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_VERTEXBLEND: /* SVGA3dVertexBlendFlags - identical */
+ AssertCompile(SVGA3D_VBLEND_DISABLE == D3DVBF_DISABLE);
+ renderState = D3DRS_VERTEXBLEND;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_OUTPUTGAMMA: /* float */
+ //AssertFailed();
+ /*
+ D3DRS_SRGBWRITEENABLE ??
+ renderState = D3DRS_OUTPUTGAMMA;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_ZVISIBLE: /* SVGA3dBool */
+ AssertFailed();
+ /*
+ renderState = D3DRS_ZVISIBLE;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_LASTPIXEL: /* SVGA3dBool */
+ renderState = D3DRS_LASTPIXEL;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_CLIPPING: /* SVGA3dBool */
+ renderState = D3DRS_CLIPPING;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP0: /* SVGA3dWrapFlags - identical */
+ Assert(SVGA3D_WRAPCOORD_3 == D3DWRAPCOORD_3);
+ renderState = D3DRS_WRAP0;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP1: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP1;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP2: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP2;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP3: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP3;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP4: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP4;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP5: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP5;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP6: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP6;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP7: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP7;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP8: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP8;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP9: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP9;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP10: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP10;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP11: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP11;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP12: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP12;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP13: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP13;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP14: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP14;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_WRAP15: /* SVGA3dWrapFlags - identical */
+ renderState = D3DRS_WRAP15;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_MULTISAMPLEANTIALIAS: /* SVGA3dBool */
+ renderState = D3DRS_MULTISAMPLEANTIALIAS;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_MULTISAMPLEMASK: /* uint32_t */
+ renderState = D3DRS_MULTISAMPLEMASK;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE: /* SVGA3dBool */
+ renderState = D3DRS_INDEXEDVERTEXBLENDENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_TWEENFACTOR: /* float */
+ renderState = D3DRS_TWEENFACTOR;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_ANTIALIASEDLINEENABLE: /* SVGA3dBool */
+ renderState = D3DRS_ANTIALIASEDLINEENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_COLORWRITEENABLE1: /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+ renderState = D3DRS_COLORWRITEENABLE1;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_COLORWRITEENABLE2: /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+ renderState = D3DRS_COLORWRITEENABLE2;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_COLORWRITEENABLE3: /* SVGA3dColorMask - identical to D3DCOLORWRITEENABLE_* */
+ renderState = D3DRS_COLORWRITEENABLE3;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SEPARATEALPHABLENDENABLE: /* SVGA3dBool */
+ renderState = D3DRS_SEPARATEALPHABLENDENABLE;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_SRCBLENDALPHA: /* SVGA3dBlendOp */
+ renderState = D3DRS_SRCBLENDALPHA;
+ val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ONE /* default */);
+ break;
+
+ case SVGA3D_RS_DSTBLENDALPHA: /* SVGA3dBlendOp */
+ renderState = D3DRS_DESTBLENDALPHA;
+ val = vmsvga3dBlendOp2D3D(pRenderState[i].uintValue, D3DBLEND_ZERO /* default */);
+ break;
+
+ case SVGA3D_RS_BLENDEQUATIONALPHA: /* SVGA3dBlendEquation - identical */
+ renderState = D3DRS_BLENDOPALPHA;
+ val = pRenderState[i].uintValue;
+ break;
+
+ case SVGA3D_RS_TRANSPARENCYANTIALIAS: /* SVGA3dTransparencyAntialiasType */
+ AssertFailed();
+ /*
+ renderState = D3DRS_TRANSPARENCYANTIALIAS;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_LINEWIDTH: /* float */
+ AssertFailed();
+ /*
+ renderState = D3DRS_LINEWIDTH;
+ val = pRenderState[i].uintValue;
+ */
+ break;
+
+ case SVGA3D_RS_MAX: /* shut up MSC */
+ case SVGA3D_RS_INVALID:
+ AssertFailedBreak();
+ }
+
+ if (renderState != D3DRS_FORCE_DWORD)
+ {
+ hr = pContext->pDevice->SetRenderState(renderState, val);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderState: SetRenderState failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetRenderTarget(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target)
+{
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+
+ AssertReturn(pState, VERR_NO_MEMORY);
+ AssertReturn((unsigned)type < SVGA3D_RT_MAX, VERR_INVALID_PARAMETER);
+
+ LogFunc(("cid=%u type=%x sid=%u face=%u mipmap=%u\n", cid, type, target.sid, target.face, target.mipmap));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Save for vm state save/restore. */
+ pContext->state.aRenderTargets[type] = target.sid;
+ /** @todo Also save target.face and target.mipmap */
+
+ if (target.sid == SVGA3D_INVALID_ID)
+ {
+ /* Disable render target. */
+ switch (type)
+ {
+ case SVGA3D_RT_DEPTH:
+ hr = pContext->pDevice->SetDepthStencilSurface(NULL);
+ AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+
+ case SVGA3D_RT_STENCIL:
+ /* ignore; correct?? */
+ break;
+
+ case SVGA3D_RT_COLOR0:
+ case SVGA3D_RT_COLOR1:
+ case SVGA3D_RT_COLOR2:
+ case SVGA3D_RT_COLOR3:
+ case SVGA3D_RT_COLOR4:
+ case SVGA3D_RT_COLOR5:
+ case SVGA3D_RT_COLOR6:
+ case SVGA3D_RT_COLOR7:
+ if (pState->fSupportedSurfaceNULL)
+ {
+ /* Create a dummy render target to satisfy D3D. This path is usually taken only to render
+ * into a depth buffer without wishing to update an actual color render target.
+ * The dimensions of the render target must match the dimensions of the depth render target,
+ * which is usually equal to the viewport width and height.
+ */
+ IDirect3DSurface9 *pDummyRenderTarget;
+ hr = pContext->pDevice->CreateRenderTarget(pContext->state.RectViewPort.w,
+ pContext->state.RectViewPort.h,
+ FOURCC_NULL,
+ D3DMULTISAMPLE_NONE,
+ 0,
+ FALSE,
+ &pDummyRenderTarget,
+ NULL);
+
+ AssertMsgReturn(hr == D3D_OK, ("CreateRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pDummyRenderTarget);
+ D3D_RELEASE(pDummyRenderTarget);
+ }
+ else
+ hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, NULL);
+
+ AssertMsgReturn(hr == D3D_OK, ("SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ return VINF_SUCCESS;
+ }
+
+ PVMSVGA3DSURFACE pRenderTarget;
+ rc = vmsvga3dSurfaceFromSid(pState, target.sid, &pRenderTarget);
+ AssertRCReturn(rc, rc);
+
+ switch (type)
+ {
+ case SVGA3D_RT_DEPTH:
+ case SVGA3D_RT_STENCIL:
+ AssertReturn(target.face == 0 && target.mipmap == 0, VERR_INVALID_PARAMETER);
+ if (!pRenderTarget->u.pSurface)
+ {
+ DWORD cQualityLevels = 0;
+
+ /* Query the nr of quality levels for this particular format */
+ if (pRenderTarget->multiSampleTypeD3D != D3DMULTISAMPLE_NONE)
+ {
+ hr = pState->pD3D9->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ pRenderTarget->formatD3D,
+ TRUE, /* Windowed */
+ pRenderTarget->multiSampleTypeD3D,
+ &cQualityLevels);
+ Assert(hr == D3D_OK || hr == D3DERR_NOTAVAILABLE);
+ }
+
+ if ( pState->fSupportedSurfaceINTZ
+ && pRenderTarget->multiSampleTypeD3D == D3DMULTISAMPLE_NONE
+ && ( pRenderTarget->formatD3D == D3DFMT_D24S8
+ || pRenderTarget->formatD3D == D3DFMT_D24X8
+ || pRenderTarget->formatD3D == D3DFMT_D32
+ || pRenderTarget->formatD3D == D3DFMT_D16))
+ {
+ LogFunc(("Creating stencil surface as texture!\n"));
+ int rc2 = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
+ AssertRC(rc2); /* non-fatal, will use CreateDepthStencilSurface */
+ }
+
+ if (!pRenderTarget->fStencilAsTexture)
+ {
+ Assert(!pRenderTarget->u.pSurface);
+
+ LogFunc(("DEPTH/STENCIL; cQualityLevels=%d\n", cQualityLevels));
+ hr = pContext->pDevice->CreateDepthStencilSurface(pRenderTarget->paMipmapLevels[0].mipmapSize.width,
+ pRenderTarget->paMipmapLevels[0].mipmapSize.height,
+ pRenderTarget->formatD3D,
+ pRenderTarget->multiSampleTypeD3D,
+ ((cQualityLevels >= 1) ? cQualityLevels - 1 : 0), /* 0 - (levels-1) */
+ FALSE, /* not discardable */
+ &pRenderTarget->u.pSurface,
+ NULL);
+ AssertMsgReturn(hr == D3D_OK, ("CreateDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ pRenderTarget->enmD3DResType = VMSVGA3D_D3DRESTYPE_SURFACE;
+ }
+
+ pRenderTarget->idAssociatedContext = cid;
+
+#if 0 /* doesn't work */
+ if ( !pRenderTarget->fStencilAsTexture
+ && pRenderTarget->fDirty)
+ {
+ Log(("vmsvga3dSetRenderTarget: sync dirty depth/stencil buffer\n"));
+ Assert(pRenderTarget->cLevels == 1);
+
+ for (uint32_t i = 0; i < pRenderTarget->cLevels; i++)
+ {
+ if (pRenderTarget->paMipmapLevels[i].fDirty)
+ {
+ D3DLOCKED_RECT LockedRect;
+
+ hr = pRenderTarget->u.pSurface->LockRect(&LockedRect,
+ NULL, /* entire surface */
+ 0);
+
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ Log(("vmsvga3dSetRenderTarget: sync dirty texture mipmap level %d (pitch %x vs %x)\n", i, LockedRect.Pitch, pRenderTarget->paMipmapLevels[i].cbSurfacePitch));
+
+ uint8_t *pDest = (uint8_t *)LockedRect.pBits;
+ uint8_t *pSrc = (uint8_t *)pRenderTarget->paMipmapLevels[i].pSurfaceData;
+ for (uint32_t j = 0; j < pRenderTarget->paMipmapLevels[i].size.height; j++)
+ {
+ memcpy(pDest, pSrc, pRenderTarget->paMipmapLevels[i].cbSurfacePitch);
+
+ pDest += LockedRect.Pitch;
+ pSrc += pRenderTarget->paMipmapLevels[i].cbSurfacePitch;
+ }
+
+ hr = pRenderTarget->u.pSurface->UnlockRect();
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetRenderTarget: UnlockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pRenderTarget->paMipmapLevels[i].fDirty = false;
+ }
+ }
+ }
+#endif
+ }
+
+ /** @todo Assert(!pRenderTarget->fDirty); */
+
+ AssertReturn(pRenderTarget->u.pSurface, VERR_INVALID_PARAMETER);
+
+ pRenderTarget->fUsageD3D |= D3DUSAGE_DEPTHSTENCIL;
+ pRenderTarget->f.surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+
+ if (pRenderTarget->fStencilAsTexture)
+ {
+ IDirect3DSurface9 *pStencilSurface;
+
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pRenderTarget, target.face, target.mipmap, /*fLockable=*/ false, &pStencilSurface);
+ AssertRCReturn(rc, rc);
+
+ hr = pContext->pDevice->SetDepthStencilSurface(pStencilSurface);
+ D3D_RELEASE(pStencilSurface);
+ AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ {
+ Assert(pRenderTarget->idAssociatedContext == cid);
+ AssertReturn(pRenderTarget->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE, VERR_INVALID_PARAMETER);
+ hr = pContext->pDevice->SetDepthStencilSurface(pRenderTarget->u.pSurface);
+ AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ break;
+
+ case SVGA3D_RT_COLOR0:
+ case SVGA3D_RT_COLOR1:
+ case SVGA3D_RT_COLOR2:
+ case SVGA3D_RT_COLOR3:
+ case SVGA3D_RT_COLOR4:
+ case SVGA3D_RT_COLOR5:
+ case SVGA3D_RT_COLOR6:
+ case SVGA3D_RT_COLOR7:
+ {
+ IDirect3DSurface9 *pSurface;
+ bool fTexture = false;
+
+ /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+ vmsvga3dSurfaceFlush(pRenderTarget);
+
+ if (pRenderTarget->f.surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE)
+ {
+ fTexture = true;
+
+ /* A texture surface can be used as a render target to fill it and later on used as a texture. */
+ if (!pRenderTarget->u.pTexture)
+ {
+ LogFunc(("Create texture to be used as render target; sid=%u type=%d format=%d -> create texture\n", target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->format));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
+ AssertRCReturn(rc, rc);
+ }
+
+ rc = vmsvga3dGetD3DSurface(pState, pContext, pRenderTarget, target.face, target.mipmap, false, &pSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ AssertReturn(target.face == 0 && target.mipmap == 0, VERR_INVALID_PARAMETER);
+ if (!pRenderTarget->u.pSurface)
+ {
+ DWORD cQualityLevels = 0;
+
+ /* Query the nr of quality levels for this particular format */
+ if (pRenderTarget->multiSampleTypeD3D != D3DMULTISAMPLE_NONE)
+ {
+ hr = pState->pD3D9->CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT,
+ D3DDEVTYPE_HAL,
+ pRenderTarget->formatD3D,
+ TRUE, /* Windowed */
+ pRenderTarget->multiSampleTypeD3D,
+ &cQualityLevels);
+ Assert(hr == D3D_OK || hr == D3DERR_NOTAVAILABLE);
+ }
+
+ LogFunc(("COLOR; cQualityLevels=%d\n", cQualityLevels));
+ LogFunc(("Create rendertarget (%d,%d) formatD3D=%x multisample=%x\n",
+ pRenderTarget->paMipmapLevels[0].mipmapSize.width, pRenderTarget->paMipmapLevels[0].mipmapSize.height, pRenderTarget->formatD3D, pRenderTarget->multiSampleTypeD3D));
+
+ hr = pContext->pDevice->CreateRenderTarget(pRenderTarget->paMipmapLevels[0].mipmapSize.width,
+ pRenderTarget->paMipmapLevels[0].mipmapSize.height,
+ pRenderTarget->formatD3D,
+ pRenderTarget->multiSampleTypeD3D,
+ ((cQualityLevels >= 1) ? cQualityLevels - 1 : 0), /* 0 - (levels-1) */
+ TRUE, /* lockable */
+ &pRenderTarget->u.pSurface,
+ NULL);
+ AssertReturn(hr == D3D_OK, VERR_INTERNAL_ERROR);
+
+ pRenderTarget->idAssociatedContext = cid;
+ pRenderTarget->enmD3DResType = VMSVGA3D_D3DRESTYPE_SURFACE;
+ }
+ else
+ AssertReturn(pRenderTarget->fUsageD3D & D3DUSAGE_RENDERTARGET, VERR_INVALID_PARAMETER);
+
+ Assert(pRenderTarget->idAssociatedContext == cid);
+ AssertMsgReturn(pRenderTarget->enmD3DResType == VMSVGA3D_D3DRESTYPE_SURFACE,
+ ("Invalid render target %#x\n", pRenderTarget->enmD3DResType),
+ VERR_INVALID_PARAMETER);
+ pSurface = pRenderTarget->u.pSurface;
+ }
+
+ AssertReturn(pSurface, VERR_INVALID_PARAMETER);
+ Assert(!pRenderTarget->fDirty);
+
+ pRenderTarget->fUsageD3D |= D3DUSAGE_RENDERTARGET;
+ pRenderTarget->f.surfaceFlags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
+
+ hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pSurface);
+ if (fTexture)
+ D3D_RELEASE(pSurface); /* Release reference to texture level 0 */
+ AssertMsgReturn(hr == D3D_OK, ("SetRenderTarget failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Changing the render target resets the viewport; restore it here. */
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_VIEWPORT)
+ vmsvga3dBackSetViewPort(pThisCC, cid, &pContext->state.RectViewPort);
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_ZRANGE)
+ vmsvga3dBackSetZRange(pThisCC, cid, pContext->state.zRange);
+ /* Changing the render target also resets the scissor rectangle; restore it as well. */
+ if (pContext->state.u32UpdateFlags & VMSVGA3D_UPDATE_SCISSORRECT)
+ vmsvga3dBackSetScissorRect(pThisCC, cid, &pContext->state.RectScissor);
+
+ break;
+ }
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ return VINF_SUCCESS;
+}
+
+/**
+ * Convert SVGA texture combiner value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureCombiner2D3D(uint32_t value)
+{
+ switch (value)
+ {
+ case SVGA3D_TC_DISABLE:
+ return D3DTOP_DISABLE;
+ case SVGA3D_TC_SELECTARG1:
+ return D3DTOP_SELECTARG1;
+ case SVGA3D_TC_SELECTARG2:
+ return D3DTOP_SELECTARG2;
+ case SVGA3D_TC_MODULATE:
+ return D3DTOP_MODULATE;
+ case SVGA3D_TC_ADD:
+ return D3DTOP_ADD;
+ case SVGA3D_TC_ADDSIGNED:
+ return D3DTOP_ADDSIGNED;
+ case SVGA3D_TC_SUBTRACT:
+ return D3DTOP_SUBTRACT;
+ case SVGA3D_TC_BLENDTEXTUREALPHA:
+ return D3DTOP_BLENDTEXTUREALPHA;
+ case SVGA3D_TC_BLENDDIFFUSEALPHA:
+ return D3DTOP_BLENDDIFFUSEALPHA;
+ case SVGA3D_TC_BLENDCURRENTALPHA:
+ return D3DTOP_BLENDCURRENTALPHA;
+ case SVGA3D_TC_BLENDFACTORALPHA:
+ return D3DTOP_BLENDFACTORALPHA;
+ case SVGA3D_TC_MODULATE2X:
+ return D3DTOP_MODULATE2X;
+ case SVGA3D_TC_MODULATE4X:
+ return D3DTOP_MODULATE4X;
+ case SVGA3D_TC_DSDT:
+ AssertFailed(); /** @todo ??? */
+ return D3DTOP_DISABLE;
+ case SVGA3D_TC_DOTPRODUCT3:
+ return D3DTOP_DOTPRODUCT3;
+ case SVGA3D_TC_BLENDTEXTUREALPHAPM:
+ return D3DTOP_BLENDTEXTUREALPHAPM;
+ case SVGA3D_TC_ADDSIGNED2X:
+ return D3DTOP_ADDSIGNED2X;
+ case SVGA3D_TC_ADDSMOOTH:
+ return D3DTOP_ADDSMOOTH;
+ case SVGA3D_TC_PREMODULATE:
+ return D3DTOP_PREMODULATE;
+ case SVGA3D_TC_MODULATEALPHA_ADDCOLOR:
+ return D3DTOP_MODULATEALPHA_ADDCOLOR;
+ case SVGA3D_TC_MODULATECOLOR_ADDALPHA:
+ return D3DTOP_MODULATECOLOR_ADDALPHA;
+ case SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR:
+ return D3DTOP_MODULATEINVALPHA_ADDCOLOR;
+ case SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA:
+ return D3DTOP_MODULATEINVCOLOR_ADDALPHA;
+ case SVGA3D_TC_BUMPENVMAPLUMINANCE:
+ return D3DTOP_BUMPENVMAPLUMINANCE;
+ case SVGA3D_TC_MULTIPLYADD:
+ return D3DTOP_MULTIPLYADD;
+ case SVGA3D_TC_LERP:
+ return D3DTOP_LERP;
+ default:
+ AssertFailed();
+ return D3DTOP_DISABLE;
+ }
+}
+
+/**
+ * Convert SVGA texture arg data value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextureArgData2D3D(uint32_t value)
+{
+ switch (value)
+ {
+ case SVGA3D_TA_CONSTANT:
+ return D3DTA_CONSTANT;
+ case SVGA3D_TA_PREVIOUS:
+ return D3DTA_CURRENT; /* current = previous */
+ case SVGA3D_TA_DIFFUSE:
+ return D3DTA_DIFFUSE;
+ case SVGA3D_TA_TEXTURE:
+ return D3DTA_TEXTURE;
+ case SVGA3D_TA_SPECULAR:
+ return D3DTA_SPECULAR;
+ default:
+ AssertFailed();
+ return D3DTA_DIFFUSE;
+ }
+}
+
+/**
+ * Convert SVGA texture transform flag value to its D3D equivalent
+ */
+static DWORD vmsvga3dTextTransformFlags2D3D(uint32_t value)
+{
+ switch (value)
+ {
+ case SVGA3D_TEX_TRANSFORM_OFF:
+ return D3DTTFF_DISABLE;
+ case SVGA3D_TEX_TRANSFORM_S:
+ return D3DTTFF_COUNT1; /** @todo correct? */
+ case SVGA3D_TEX_TRANSFORM_T:
+ return D3DTTFF_COUNT2; /** @todo correct? */
+ case SVGA3D_TEX_TRANSFORM_R:
+ return D3DTTFF_COUNT3; /** @todo correct? */
+ case SVGA3D_TEX_TRANSFORM_Q:
+ return D3DTTFF_COUNT4; /** @todo correct? */
+ case SVGA3D_TEX_PROJECTED:
+ return D3DTTFF_PROJECTED;
+ default:
+ AssertFailed();
+ return D3DTTFF_DISABLE;
+ }
+}
+
+static DWORD vmsvga3dSamplerIndex2D3D(uint32_t idxSampler)
+{
+ if (idxSampler < SVGA3D_MAX_SAMPLERS_PS)
+ return idxSampler;
+ return (idxSampler - SVGA3D_MAX_SAMPLERS_PS) + D3DDMAPSAMPLER;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetTextureState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
+{
+ DWORD val = 0; /* Shut up MSC */
+ HRESULT hr;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("%x cTextureState=%d\n", cid, cTextureStates));
+
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ for (unsigned i = 0; i < cTextureStates; i++)
+ {
+ LogFunc(("cid=%u stage=%d type=%s (%x) val=%x\n", cid, pTextureState[i].stage, vmsvga3dTextureStateToString(pTextureState[i].name), pTextureState[i].name, pTextureState[i].value));
+
+ if (pTextureState[i].name == SVGA3D_TS_BIND_TEXTURE)
+ {
+ /* Special case: binding a texture to a sampler. Stage is the sampler index. */
+ const uint32_t sid = pTextureState[i].value;
+ const uint32_t idxSampler = pTextureState[i].stage;
+
+ if (RT_UNLIKELY(idxSampler >= SVGA3D_MAX_SAMPLERS))
+ {
+ AssertMsgFailed(("pTextureState[%d]: SVGA3D_TS_BIND_TEXTURE idxSampler=%d, sid=%u\n", i, idxSampler, sid));
+ continue;
+ }
+
+ const DWORD d3dSampler = vmsvga3dSamplerIndex2D3D(idxSampler);
+ if (sid == SVGA3D_INVALID_ID)
+ {
+ LogFunc(("SVGA3D_TS_BIND_TEXTURE: unbind sampler=%d\n", idxSampler));
+
+ pContext->aSidActiveTextures[idxSampler] = SVGA3D_INVALID_ID;
+
+ /* Unselect the currently associated texture. */
+ hr = pContext->pDevice->SetTexture(d3dSampler, NULL);
+ AssertMsgReturn(hr == D3D_OK, ("SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ {
+ PVMSVGA3DSURFACE pSurface;
+ rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ LogFunc(("SVGA3D_TS_BIND_TEXTURE: bind idxSampler=%d, texture sid=%u (%d,%d)\n", idxSampler, sid, pSurface->paMipmapLevels[0].mipmapSize.width, pSurface->paMipmapLevels[0].mipmapSize.height));
+
+ if (!pSurface->u.pTexture)
+ {
+ Assert(pSurface->idAssociatedContext == SVGA3D_INVALID_ID);
+ LogFunc(("CreateTexture (%d,%d) level=%d fUsage=%x format=%x\n", pSurface->paMipmapLevels[0].mipmapSize.width, pSurface->paMipmapLevels[0].mipmapSize.height, pSurface->cLevels, pSurface->fUsageD3D, pSurface->formatD3D));
+ rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pSurface);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ /* Must flush the other context's 3d pipeline to make sure all drawing is complete for the surface we're about to use. */
+ vmsvga3dSurfaceFlush(pSurface);
+ }
+
+ AssertReturn( pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE
+ || pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE,
+ VERR_INVALID_PARAMETER);
+
+ if (pSurface->idAssociatedContext != cid)
+ {
+ LogFunc(("Using texture sid=%u created for another context (%d vs %d)\n", sid, pSurface->idAssociatedContext, cid));
+
+ PVMSVGA3DSHAREDSURFACE pSharedSurface = vmsvga3dSurfaceGetSharedCopy(pState, pContext, pSurface);
+ AssertReturn(pSharedSurface, VERR_INTERNAL_ERROR);
+
+ hr = pContext->pDevice->SetTexture(d3dSampler, pSharedSurface->u.pTexture);
+ }
+ else
+ hr = pContext->pDevice->SetTexture(d3dSampler, pSurface->u.pTexture);
+
+ AssertMsgReturn(hr == D3D_OK, ("SetTexture failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pContext->aSidActiveTextures[idxSampler] = sid;
+ }
+ /* Finished; continue with the next one. */
+ continue;
+ }
+
+ D3DTEXTURESTAGESTATETYPE textureType = D3DTSS_FORCE_DWORD;
+ D3DSAMPLERSTATETYPE samplerType = D3DSAMP_FORCE_DWORD;
+ switch (pTextureState[i].name)
+ {
+ case SVGA3D_TS_COLOROP: /* SVGA3dTextureCombiner */
+ textureType = D3DTSS_COLOROP;
+ val = vmsvga3dTextureCombiner2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_COLORARG0: /* SVGA3dTextureArgData */
+ textureType = D3DTSS_COLORARG0;
+ val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_COLORARG1: /* SVGA3dTextureArgData */
+ textureType = D3DTSS_COLORARG1;
+ val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_COLORARG2: /* SVGA3dTextureArgData */
+ textureType = D3DTSS_COLORARG2;
+ val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ALPHAOP: /* SVGA3dTextureCombiner */
+ textureType = D3DTSS_ALPHAOP;
+ val = vmsvga3dTextureCombiner2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ALPHAARG0: /* SVGA3dTextureArgData */
+ textureType = D3DTSS_ALPHAARG0;
+ val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ALPHAARG1: /* SVGA3dTextureArgData */
+ textureType = D3DTSS_ALPHAARG1;
+ val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ALPHAARG2: /* SVGA3dTextureArgData */
+ textureType = D3DTSS_ALPHAARG2;
+ val = vmsvga3dTextureArgData2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_BUMPENVMAT00: /* float */
+ textureType = D3DTSS_BUMPENVMAT00;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_BUMPENVMAT01: /* float */
+ textureType = D3DTSS_BUMPENVMAT01;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_BUMPENVMAT10: /* float */
+ textureType = D3DTSS_BUMPENVMAT10;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_BUMPENVMAT11: /* float */
+ textureType = D3DTSS_BUMPENVMAT11;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_TEXCOORDINDEX: /* uint32_t */
+ textureType = D3DTSS_TEXCOORDINDEX;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_BUMPENVLSCALE: /* float */
+ textureType = D3DTSS_BUMPENVLSCALE;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_BUMPENVLOFFSET: /* float */
+ textureType = D3DTSS_BUMPENVLOFFSET;
+ val = pTextureState[i].value;
+ break;
+
+ case SVGA3D_TS_TEXTURETRANSFORMFLAGS: /* SVGA3dTexTransformFlags */
+ textureType = D3DTSS_TEXTURETRANSFORMFLAGS;
+ val = vmsvga3dTextTransformFlags2D3D(pTextureState[i].value);
+ break;
+
+ case SVGA3D_TS_ADDRESSW: /* SVGA3dTextureAddress */
+ samplerType = D3DSAMP_ADDRESSW;
+ val = pTextureState[i].value; /* Identical otherwise */
+ Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+ break;
+
+ case SVGA3D_TS_ADDRESSU: /* SVGA3dTextureAddress */
+ samplerType = D3DSAMP_ADDRESSU;
+ val = pTextureState[i].value; /* Identical otherwise */
+ Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+ break;
+
+ case SVGA3D_TS_ADDRESSV: /* SVGA3dTextureAddress */
+ samplerType = D3DSAMP_ADDRESSV;
+ val = pTextureState[i].value; /* Identical otherwise */
+ Assert(pTextureState[i].value != SVGA3D_TEX_ADDRESS_EDGE);
+ break;
+
+ case SVGA3D_TS_MIPFILTER: /* SVGA3dTextureFilter */
+ samplerType = D3DSAMP_MIPFILTER;
+ val = pTextureState[i].value; /* Identical otherwise */
+ Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_FLATCUBIC);
+ Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+ break;
+
+ case SVGA3D_TS_MAGFILTER: /* SVGA3dTextureFilter */
+ samplerType = D3DSAMP_MAGFILTER;
+ val = pTextureState[i].value; /* Identical otherwise */
+ Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_FLATCUBIC);
+ Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+ break;
+
+ case SVGA3D_TS_MINFILTER: /* SVGA3dTextureFilter */
+ samplerType = D3DSAMP_MINFILTER;
+ val = pTextureState[i].value; /* Identical otherwise */
+ Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_FLATCUBIC);
+ Assert(pTextureState[i].value != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+ break;
+
+ case SVGA3D_TS_BORDERCOLOR: /* SVGA3dColor */
+ samplerType = D3DSAMP_BORDERCOLOR;
+ val = pTextureState[i].value; /* Identical */
+ break;
+
+ case SVGA3D_TS_TEXTURE_LOD_BIAS: /* float */
+ samplerType = D3DSAMP_MIPMAPLODBIAS;
+ val = pTextureState[i].value; /* Identical */
+ break;
+
+ case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL: /* uint32_t */
+ samplerType = D3DSAMP_MAXMIPLEVEL;
+ val = pTextureState[i].value; /* Identical?? */
+ break;
+
+ case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL: /* uint32_t */
+ samplerType = D3DSAMP_MAXANISOTROPY;
+ val = pTextureState[i].value; /* Identical?? */
+ break;
+
+ case SVGA3D_TS_GAMMA: /* float */
+ samplerType = D3DSAMP_SRGBTEXTURE;
+ /* Boolean in D3D */
+ if (pTextureState[i].floatValue == 1.0f)
+ val = FALSE;
+ else
+ val = TRUE;
+ break;
+
+ /* Internal commands, that don't map directly to the SetTextureStageState API. */
+ case SVGA3D_TS_TEXCOORDGEN: /* SVGA3dTextureCoordGen */
+ AssertFailed();
+ break;
+
+ case SVGA3D_TS_MAX: /* shut up MSC */
+ case SVGA3D_TS_INVALID:
+ case SVGA3D_TS_BIND_TEXTURE:
+ AssertFailedBreak();
+ default: /** @todo Remaining TSs. Avoid MSC warning for now. */
+ break;
+ }
+
+ const uint32_t currentStage = pTextureState[i].stage;
+ /* Record the texture state for vm state saving. */
+ if ( currentStage < RT_ELEMENTS(pContext->state.aTextureStates)
+ && (unsigned)pTextureState[i].name < RT_ELEMENTS(pContext->state.aTextureStates[0]))
+ {
+ pContext->state.aTextureStates[currentStage][pTextureState[i].name] = pTextureState[i];
+ }
+
+ if (textureType != D3DTSS_FORCE_DWORD)
+ {
+ if (RT_UNLIKELY(currentStage >= SVGA3D_MAX_TEXTURE_STAGES))
+ {
+ AssertMsgFailed(("pTextureState[%d].stage=%#x name=%#x value=%#x\n", i, pTextureState[i].stage, pTextureState[i].name, pTextureState[i].value));
+ continue;
+ }
+
+ hr = pContext->pDevice->SetTextureStageState(currentStage, textureType, val);
+ AssertMsg(hr == D3D_OK, ("SetTextureStageState failed with %x\n", hr));
+ }
+ else if (samplerType != D3DSAMP_FORCE_DWORD)
+ {
+ if (RT_UNLIKELY(currentStage >= SVGA3D_MAX_SAMPLERS))
+ {
+ AssertMsgFailed(("pTextureState[%d].stage=%#x name=%#x value=%#x\n", i, pTextureState[i].stage, pTextureState[i].name, pTextureState[i].value));
+ continue;
+ }
+
+ hr = pContext->pDevice->SetSamplerState(currentStage, samplerType, val);
+ AssertMsg(hr == D3D_OK, ("SetSamplerState failed with %x\n", hr));
+ }
+ else
+ {
+ AssertFailed();
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetMaterial(PVGASTATECC pThisCC, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial)
+{
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u face %d\n", cid, face));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ AssertReturn((unsigned)face < SVGA3D_FACE_MAX, VERR_INVALID_PARAMETER);
+
+ /* Save for vm state save/restore. */
+ pContext->state.aMaterial[face].fValid = true;
+ pContext->state.aMaterial[face].material = *pMaterial;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_MATERIAL;
+
+ /* @note face not used for D3D9 */
+ /** @todo ignore everything except SVGA3D_FACE_NONE? */
+ //Assert(face == SVGA3D_FACE_NONE);
+ if (face != SVGA3D_FACE_NONE)
+ Log(("Unsupported face %d!!\n", face));
+
+ D3DMATERIAL9 material;
+ material.Diffuse.r = pMaterial->diffuse[0];
+ material.Diffuse.g = pMaterial->diffuse[1];
+ material.Diffuse.b = pMaterial->diffuse[2];
+ material.Diffuse.a = pMaterial->diffuse[3];
+ material.Ambient.r = pMaterial->ambient[0];
+ material.Ambient.g = pMaterial->ambient[1];
+ material.Ambient.b = pMaterial->ambient[2];
+ material.Ambient.a = pMaterial->ambient[3];
+ material.Specular.r = pMaterial->specular[0];
+ material.Specular.g = pMaterial->specular[1];
+ material.Specular.b = pMaterial->specular[2];
+ material.Specular.a = pMaterial->specular[3];
+ material.Emissive.r = pMaterial->emissive[0];
+ material.Emissive.g = pMaterial->emissive[1];
+ material.Emissive.b = pMaterial->emissive[2];
+ material.Emissive.a = pMaterial->emissive[3];
+ material.Power = pMaterial->shininess;
+
+ hr = pContext->pDevice->SetMaterial(&material);
+ AssertMsgReturn(hr == D3D_OK, ("SetMaterial failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetLightData(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData)
+{
+ HRESULT hr;
+ D3DLIGHT9 light;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetLightData %x index=%d\n", cid, index));
+ ASSERT_GUEST_RETURN(index < SVGA3D_MAX_LIGHTS, VERR_INVALID_PARAMETER);
+
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ switch (pData->type)
+ {
+ case SVGA3D_LIGHTTYPE_POINT:
+ light.Type = D3DLIGHT_POINT;
+ break;
+
+ case SVGA3D_LIGHTTYPE_SPOT1: /* 1-cone, in degrees */
+ light.Type = D3DLIGHT_SPOT;
+ break;
+
+ case SVGA3D_LIGHTTYPE_DIRECTIONAL:
+ light.Type = D3DLIGHT_DIRECTIONAL;
+ break;
+
+ case SVGA3D_LIGHTTYPE_SPOT2: /* 2-cone, in radians */
+ default:
+ Log(("Unsupported light type!!\n"));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ /* Store for vm state save/restore */
+ pContext->state.aLightData[index].fValidData = true;
+ pContext->state.aLightData[index].data = *pData;
+
+ light.Diffuse.r = pData->diffuse[0];
+ light.Diffuse.g = pData->diffuse[1];
+ light.Diffuse.b = pData->diffuse[2];
+ light.Diffuse.a = pData->diffuse[3];
+ light.Specular.r = pData->specular[0];
+ light.Specular.g = pData->specular[1];
+ light.Specular.b = pData->specular[2];
+ light.Specular.a = pData->specular[3];
+ light.Ambient.r = pData->ambient[0];
+ light.Ambient.g = pData->ambient[1];
+ light.Ambient.b = pData->ambient[2];
+ light.Ambient.a = pData->ambient[3];
+ light.Position.x = pData->position[0];
+ light.Position.y = pData->position[1];
+ light.Position.z = pData->position[2]; /* @note 4th position not available in D3D9 */
+ light.Direction.x = pData->direction[0];
+ light.Direction.y = pData->direction[1];
+ light.Direction.z = pData->direction[2]; /* @note 4th position not available in D3D9 */
+ light.Range = pData->range;
+ light.Falloff = pData->falloff;
+ light.Attenuation0 = pData->attenuation0;
+ light.Attenuation1 = pData->attenuation1;
+ light.Attenuation2 = pData->attenuation2;
+ light.Theta = pData->theta;
+ light.Phi = pData->phi;
+
+ hr = pContext->pDevice->SetLight(index, &light);
+ AssertMsgReturn(hr == D3D_OK, ("SetLight failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetLightEnabled(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, uint32_t enabled)
+{
+ HRESULT hr;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetLightEnabled %x %d -> %d\n", cid, index, enabled));
+ AssertReturn(index < SVGA3D_MAX_LIGHTS, VERR_INVALID_PARAMETER);
+
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Store for vm state save/restore */
+ pContext->state.aLightData[index].fEnabled = !!enabled;
+
+ hr = pContext->pDevice->LightEnable(index, (BOOL)enabled);
+ AssertMsgReturn(hr == D3D_OK, ("LightEnable failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetViewPort(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ HRESULT hr;
+ D3DVIEWPORT9 viewPort;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetViewPort %x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Save for vm state save/restore. */
+ pContext->state.RectViewPort = *pRect;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VIEWPORT;
+
+ hr = pContext->pDevice->GetViewport(&viewPort);
+ AssertMsgReturn(hr == D3D_OK, ("GetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ viewPort.X = pRect->x;
+ viewPort.Y = pRect->y;
+ viewPort.Width = pRect->w;
+ viewPort.Height = pRect->h;
+ /* viewPort.MinZ & MaxZ are not changed from the current setting. */
+
+ hr = pContext->pDevice->SetViewport(&viewPort);
+ AssertMsgReturn(hr == D3D_OK, ("SetViewport failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackSetClipPlane(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4])
+{
+ HRESULT hr;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetClipPlane %x %d (%d,%d)(%d,%d)\n", cid, index, (unsigned)(plane[0] * 100.0), (unsigned)(plane[1] * 100.0), (unsigned)(plane[2] * 100.0), (unsigned)(plane[3] * 100.0)));
+ AssertReturn(index < SVGA3D_NUM_CLIPPLANES, VERR_INVALID_PARAMETER);
+
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Store for vm state save/restore. */
+ pContext->state.aClipPlane[index].fValid = true;
+ memcpy(pContext->state.aClipPlane[index].plane, plane, sizeof(pContext->state.aClipPlane[index].plane));
+
+ hr = pContext->pDevice->SetClipPlane(index, plane);
+ AssertMsgReturn(hr == D3D_OK, ("SetClipPlane failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackCommandClear(PVGASTATECC pThisCC, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth,
+ uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect)
+{
+ /* From SVGA3D_BeginClear comments:
+ *
+ * Clear is not affected by clipping, depth test, or other
+ * render state which affects the fragment pipeline.
+ *
+ * Therefore this code must ignore the current scissor rect.
+ */
+
+ DWORD clearFlagD3D = 0;
+ D3DRECT *pRectD3D = NULL;
+ HRESULT hr;
+ PVMSVGA3DCONTEXT pContext;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dCommandClear %x clearFlag=%x color=%x depth=%d stencil=%x cRects=%d\n", cid, clearFlag, color, (uint32_t)(depth * 100.0), stencil, cRects));
+
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ PVMSVGA3DSURFACE pRT;
+ rc = vmsvga3dSurfaceFromSid(pState, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0], &pRT);
+ AssertRCReturn(rc, rc);
+
+ if (clearFlag & SVGA3D_CLEAR_COLOR)
+ clearFlagD3D |= D3DCLEAR_TARGET;
+ if (clearFlag & SVGA3D_CLEAR_STENCIL)
+ clearFlagD3D |= D3DCLEAR_STENCIL;
+ if (clearFlag & SVGA3D_CLEAR_DEPTH)
+ clearFlagD3D |= D3DCLEAR_ZBUFFER;
+
+ if (cRects)
+ {
+ pRectD3D = (D3DRECT *)RTMemAlloc(sizeof(D3DRECT) * cRects);
+ AssertReturn(pRectD3D, VERR_NO_MEMORY);
+
+ for (unsigned i=0; i < cRects; i++)
+ {
+ Log(("vmsvga3dCommandClear: rect %d (%d,%d)(%d,%d)\n", i, pRect[i].x, pRect[i].y, pRect[i].x + pRect[i].w, pRect[i].y + pRect[i].h));
+ pRectD3D[i].x1 = pRect[i].x;
+ pRectD3D[i].y1 = pRect[i].y;
+ pRectD3D[i].x2 = pRect[i].x + pRect[i].w; /* exclusive */
+ pRectD3D[i].y2 = pRect[i].y + pRect[i].h; /* exclusive */
+ }
+ }
+
+ RECT currentScissorRect;
+ pContext->pDevice->GetScissorRect(&currentScissorRect);
+
+ RECT clearScissorRect;
+ clearScissorRect.left = 0;
+ clearScissorRect.top = 0;
+ clearScissorRect.right = pRT->paMipmapLevels[0].mipmapSize.width;
+ clearScissorRect.bottom = pRT->paMipmapLevels[0].mipmapSize.height;
+ pContext->pDevice->SetScissorRect(&clearScissorRect);
+
+ hr = pContext->pDevice->Clear(cRects, pRectD3D, clearFlagD3D, (D3DCOLOR)color, depth, stencil);
+
+ if (pRectD3D)
+ RTMemFree(pRectD3D);
+
+ pContext->pDevice->SetScissorRect(&currentScissorRect);
+
+ AssertMsgReturn(hr == D3D_OK, ("Clear failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Make sure we can track drawing usage of active render targets. */
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); ++i)
+ if (pContext->state.aRenderTargets[i] != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceTrackUsageById(pState, pContext, pContext->state.aRenderTargets[i]);
+
+ return VINF_SUCCESS;
+}
+
+/* Convert VMWare vertex declaration to its D3D equivalent. */
+static int vmsvga3dVertexDecl2D3D(const SVGA3dVertexArrayIdentity &identity, D3DVERTEXELEMENT9 *pVertexElement)
+{
+ /* usage, method and type are identical; make sure. */
+ AssertCompile(SVGA3D_DECLTYPE_FLOAT1 == D3DDECLTYPE_FLOAT1);
+ AssertCompile(SVGA3D_DECLTYPE_FLOAT16_4 == D3DDECLTYPE_FLOAT16_4);
+ AssertCompile(SVGA3D_DECLMETHOD_DEFAULT == D3DDECLMETHOD_DEFAULT);
+ AssertCompile(SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED == D3DDECLMETHOD_LOOKUPPRESAMPLED);
+ AssertCompile(D3DDECLUSAGE_POSITION == SVGA3D_DECLUSAGE_POSITION);
+ AssertCompile(D3DDECLUSAGE_SAMPLE == SVGA3D_DECLUSAGE_SAMPLE);
+
+ pVertexElement->Stream = 0;
+ pVertexElement->Offset = 0;
+ pVertexElement->Type = identity.type;
+ pVertexElement->Method = identity.method;
+ pVertexElement->Usage = identity.usage;
+ pVertexElement->UsageIndex = identity.usageIndex;
+ return VINF_SUCCESS;
+}
+
+/* Convert VMWare primitive type to its D3D equivalent. */
+static int vmsvga3dPrimitiveType2D3D(SVGA3dPrimitiveType PrimitiveType, D3DPRIMITIVETYPE *pPrimitiveTypeD3D)
+{
+ switch (PrimitiveType)
+ {
+ case SVGA3D_PRIMITIVE_TRIANGLELIST:
+ *pPrimitiveTypeD3D = D3DPT_TRIANGLELIST;
+ break;
+ case SVGA3D_PRIMITIVE_POINTLIST:
+ *pPrimitiveTypeD3D = D3DPT_POINTLIST;
+ break;
+ case SVGA3D_PRIMITIVE_LINELIST:
+ *pPrimitiveTypeD3D = D3DPT_LINELIST;
+ break;
+ case SVGA3D_PRIMITIVE_LINESTRIP:
+ *pPrimitiveTypeD3D = D3DPT_LINESTRIP;
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+ *pPrimitiveTypeD3D = D3DPT_TRIANGLESTRIP;
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+ *pPrimitiveTypeD3D = D3DPT_TRIANGLEFAN;
+ break;
+ default:
+ return VERR_INVALID_PARAMETER;
+ }
+ return VINF_SUCCESS;
+}
+
+
+static int vmsvga3dDrawPrimitivesSyncVertexBuffer(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pVertexSurface)
+{
+ HRESULT hr;
+ if ( pVertexSurface->u.pSurface
+ && pVertexSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER)
+ {
+ /* The buffer object is not an vertex one. Recreate the D3D resource. */
+ AssertReturn(pVertexSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_INDEX_BUFFER, VERR_INVALID_PARAMETER);
+ D3D_RELEASE(pVertexSurface->u.pIndexBuffer);
+ pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+
+ LogFunc(("index -> vertex buffer sid=%u\n", pVertexSurface->id));
+ }
+
+ bool fSync = pVertexSurface->fDirty;
+ if (!pVertexSurface->u.pVertexBuffer)
+ {
+ LogFunc(("Create vertex buffer sid=%u fDirty=%d\n", pVertexSurface->id, pVertexSurface->fDirty));
+
+ const DWORD Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY; /* possible severe performance penalty otherwise (according to d3d debug output */
+ hr = pContext->pDevice->CreateVertexBuffer(pVertexSurface->paMipmapLevels[0].cbSurface,
+ Usage,
+ 0, /* non-FVF */
+ D3DPOOL_DEFAULT,
+ &pVertexSurface->u.pVertexBuffer,
+ NULL);
+ AssertMsgReturn(hr == D3D_OK, ("CreateVertexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER;
+ pVertexSurface->idAssociatedContext = pContext->id;
+ pVertexSurface->f.surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
+ fSync = true;
+ }
+
+ if (fSync)
+ {
+ LogFunc(("sync vertex buffer\n"));
+ Assert(pVertexSurface->u.pVertexBuffer);
+
+ void *pvData;
+ hr = pVertexSurface->u.pVertexBuffer->Lock(0, 0, &pvData, D3DLOCK_DISCARD);
+ AssertMsgReturn(hr == D3D_OK, ("Lock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ memcpy(pvData, pVertexSurface->paMipmapLevels[0].pSurfaceData, pVertexSurface->paMipmapLevels[0].cbSurface);
+
+ hr = pVertexSurface->u.pVertexBuffer->Unlock();
+ AssertMsgReturn(hr == D3D_OK, ("Unlock vertex failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static int vmsvga3dDrawPrimitivesSyncIndexBuffer(PVMSVGA3DCONTEXT pContext,
+ PVMSVGA3DSURFACE pIndexSurface,
+ uint32_t indexWidth)
+{
+ HRESULT hr;
+ if ( pIndexSurface->u.pSurface
+ && pIndexSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_INDEX_BUFFER)
+ {
+ /* The buffer object is not an index one. Must recreate the D3D resource. */
+ AssertReturn(pIndexSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER, VERR_INVALID_PARAMETER);
+ D3D_RELEASE(pIndexSurface->u.pVertexBuffer);
+ pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+
+ LogFunc(("vertex -> index buffer sid=%u\n", pIndexSurface->id));
+ }
+
+ bool fSync = pIndexSurface->fDirty;
+ if (!pIndexSurface->u.pIndexBuffer)
+ {
+ LogFunc(("Create index buffer fDirty=%d\n", pIndexSurface->fDirty));
+
+ const DWORD Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY; /* possible severe performance penalty otherwise (according to d3d debug output */
+ const D3DFORMAT Format = (indexWidth == sizeof(uint16_t)) ? D3DFMT_INDEX16 : D3DFMT_INDEX32;
+ hr = pContext->pDevice->CreateIndexBuffer(pIndexSurface->paMipmapLevels[0].cbSurface,
+ Usage,
+ Format,
+ D3DPOOL_DEFAULT,
+ &pIndexSurface->u.pIndexBuffer,
+ NULL);
+ AssertMsgReturn(hr == D3D_OK, ("CreateIndexBuffer failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_INDEX_BUFFER;
+ pIndexSurface->idAssociatedContext = pContext->id;
+ pIndexSurface->f.surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
+ fSync = true;
+ }
+
+ if (fSync)
+ {
+ LogFunc(("sync index buffer\n"));
+ Assert(pIndexSurface->u.pIndexBuffer);
+
+ void *pvData;
+ hr = pIndexSurface->u.pIndexBuffer->Lock(0, 0, &pvData, D3DLOCK_DISCARD);
+ AssertMsgReturn(hr == D3D_OK, ("Lock index failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ memcpy(pvData, pIndexSurface->paMipmapLevels[0].pSurfaceData, pIndexSurface->paMipmapLevels[0].cbSurface);
+
+ hr = pIndexSurface->u.pIndexBuffer->Unlock();
+ AssertMsgReturn(hr == D3D_OK, ("Unlock index failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static int vmsvga3dDrawPrimitivesProcessVertexDecls(const uint32_t numVertexDecls,
+ const SVGA3dVertexDecl *pVertexDecl,
+ const uint32_t idStream,
+ const uint32_t uVertexMinOffset,
+ const uint32_t uVertexMaxOffset,
+ D3DVERTEXELEMENT9 *pVertexElement)
+{
+ RT_NOREF(uVertexMaxOffset); /* Logging only. */
+ Assert(numVertexDecls);
+
+ /* Create a vertex declaration array */
+ for (uint32_t iVertex = 0; iVertex < numVertexDecls; ++iVertex)
+ {
+ LogFunc(("vertex %d type=%s (%d) method=%s (%d) usage=%s (%d) usageIndex=%d stride=%d offset=%d (%d min=%d max=%d)\n",
+ iVertex,
+ vmsvgaDeclType2String(pVertexDecl[iVertex].identity.type), pVertexDecl[iVertex].identity.type,
+ vmsvgaDeclMethod2String(pVertexDecl[iVertex].identity.method), pVertexDecl[iVertex].identity.method,
+ vmsvgaDeclUsage2String(pVertexDecl[iVertex].identity.usage), pVertexDecl[iVertex].identity.usage,
+ pVertexDecl[iVertex].identity.usageIndex,
+ pVertexDecl[iVertex].array.stride,
+ pVertexDecl[iVertex].array.offset - uVertexMinOffset,
+ pVertexDecl[iVertex].array.offset,
+ uVertexMinOffset, uVertexMaxOffset));
+
+ int rc = vmsvga3dVertexDecl2D3D(pVertexDecl[iVertex].identity, &pVertexElement[iVertex]);
+ AssertRCReturn(rc, rc);
+
+ pVertexElement[iVertex].Stream = idStream;
+ pVertexElement[iVertex].Offset = pVertexDecl[iVertex].array.offset - uVertexMinOffset;
+
+#ifdef LOG_ENABLED
+ if (pVertexDecl[iVertex].array.stride == 0)
+ LogFunc(("stride == 0! Can be valid\n"));
+
+ if (pVertexElement[iVertex].Offset >= pVertexDecl[0].array.stride)
+ LogFunc(("WARNING: offset > stride!!\n"));
+#endif
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackDrawPrimitives(PVGASTATECC pThisCC, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl,
+ uint32_t numRanges, SVGA3dPrimitiveRange *pRange,
+ uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
+{
+ static const D3DVERTEXELEMENT9 sVertexEnd = D3DDECL_END();
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INTERNAL_ERROR);
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ HRESULT hr;
+
+ /* SVGA driver may use the same surface for both index and vertex data. So we can not clear fDirty flag,
+ * after updating a vertex buffer for example, because the same surface might be used for index buffer later.
+ * So keep pointers to all used surfaces in the following two arrays and clear fDirty flag at the end.
+ */
+ PVMSVGA3DSURFACE aVertexSurfaces[SVGA3D_MAX_VERTEX_ARRAYS];
+ PVMSVGA3DSURFACE aIndexSurfaces[SVGA3D_MAX_DRAW_PRIMITIVE_RANGES];
+ RT_ZERO(aVertexSurfaces);
+ RT_ZERO(aIndexSurfaces);
+
+ LogFunc(("cid=%u numVertexDecls=%d numRanges=%d, cVertexDivisor=%d\n", cid, numVertexDecls, numRanges, cVertexDivisor));
+
+ AssertReturn(numVertexDecls && numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS, VERR_INVALID_PARAMETER);
+ AssertReturn(numRanges && numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES, VERR_INVALID_PARAMETER);
+ AssertReturn(!cVertexDivisor || cVertexDivisor == numVertexDecls, VERR_INVALID_PARAMETER);
+
+#if 0
+ /* Dump render target to a bitmap. */
+ if (pContext->state.aRenderTargets[SVGA3D_RT_COLOR0] != SVGA3D_INVALID_ID)
+ {
+ vmsvga3dUpdateHeapBuffersForSurfaces(pThisCC, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0]);
+ PVMSVGA3DSURFACE pSurface;
+ int rc2 = vmsvga3dSurfaceFromSid(pState, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0], &pSurface);
+ if (RT_SUCCESS(rc2))
+ vmsvga3dInfoSurfaceToBitmap(NULL, pSurface, "bmpd3d", "rt", "-pre");
+ }
+ for (int iTex = 0; iTex < SVGA3D_MAX_SAMPLERS_PS; ++iTex)
+ {
+ IDirect3DBaseTexture9 *pBaseTexture = 0;
+ hr = pContext->pDevice->GetTexture(iTex, &pBaseTexture);
+ if (hr == S_OK && pBaseTexture)
+ {
+ D3DSURFACE_DESC surfDesc;
+ RT_ZERO(surfDesc);
+
+ IDirect3DTexture9 *pTexture = (IDirect3DTexture9 *)pBaseTexture;
+ pTexture->GetLevelDesc(0, &surfDesc);
+
+ Log(("Texture[%d]: %dx%d\n",
+ iTex, surfDesc.Width, surfDesc.Height));
+ D3D_RELEASE(pBaseTexture);
+ }
+ }
+#endif
+
+ /*
+ * Process all vertex declarations. Each vertex buffer surface is represented by one stream source id.
+ */
+ D3DVERTEXELEMENT9 aVertexElements[SVGA3D_MAX_VERTEX_ARRAYS + 1];
+
+ uint32_t iCurrentVertex = 0;
+ uint32_t iCurrentStreamId = 0;
+ while (iCurrentVertex < numVertexDecls)
+ {
+ const uint32_t sidVertex = pVertexDecl[iCurrentVertex].array.surfaceId;
+ const uint32_t strideVertex = pVertexDecl[iCurrentVertex].array.stride;
+
+ PVMSVGA3DSURFACE pVertexSurface;
+ rc = vmsvga3dSurfaceFromSid(pState, sidVertex, &pVertexSurface);
+ AssertRCBreak(rc);
+
+ rc = vmsvga3dDrawPrimitivesSyncVertexBuffer(pContext, pVertexSurface);
+ AssertRCBreak(rc);
+
+ uint32_t uVertexMinOffset = UINT32_MAX;
+ uint32_t uVertexMaxOffset = 0;
+
+ uint32_t iVertex;
+ for (iVertex = iCurrentVertex; iVertex < numVertexDecls; ++iVertex)
+ {
+ /* Remember, so we can mark it as not dirty later. */
+ aVertexSurfaces[iVertex] = pVertexSurface;
+
+ /* New surface id -> new stream id. */
+ if (pVertexDecl[iVertex].array.surfaceId != sidVertex)
+ break;
+
+ const uint32_t uVertexOffset = pVertexDecl[iVertex].array.offset;
+ const uint32_t uNewVertexMinOffset = RT_MIN(uVertexMinOffset, uVertexOffset);
+ const uint32_t uNewVertexMaxOffset = RT_MAX(uVertexMaxOffset, uVertexOffset);
+
+ /* We must put vertex declarations that start at a different element in another stream as d3d only handles offsets < stride. */
+ if ( uNewVertexMaxOffset - uNewVertexMinOffset >= strideVertex
+ && strideVertex != 0)
+ break;
+
+ uVertexMinOffset = uNewVertexMinOffset;
+ uVertexMaxOffset = uNewVertexMaxOffset;
+ }
+
+ rc = vmsvga3dDrawPrimitivesProcessVertexDecls(iVertex - iCurrentVertex,
+ &pVertexDecl[iCurrentVertex],
+ iCurrentStreamId,
+ uVertexMinOffset,
+ uVertexMaxOffset,
+ &aVertexElements[iCurrentVertex]);
+ AssertRCBreak(rc);
+
+ LogFunc(("SetStreamSource vertex sid=%u stream %d min offset=%d stride=%d\n",
+ pVertexSurface->id, iCurrentStreamId, uVertexMinOffset, strideVertex));
+
+ hr = pContext->pDevice->SetStreamSource(iCurrentStreamId,
+ pVertexSurface->u.pVertexBuffer,
+ uVertexMinOffset,
+ strideVertex);
+ AssertMsgBreakStmt(hr == D3D_OK, ("SetStreamSource failed with %x\n", hr), rc = VERR_INTERNAL_ERROR);
+
+ if (cVertexDivisor)
+ {
+ LogFunc(("SetStreamSourceFreq[%d]=%x\n", iCurrentStreamId, pVertexDivisor[iCurrentVertex].value));
+ HRESULT hr2 = pContext->pDevice->SetStreamSourceFreq(iCurrentStreamId,
+ pVertexDivisor[iCurrentVertex].value);
+ Assert(SUCCEEDED(hr2)); RT_NOREF(hr2);
+ }
+
+ iCurrentVertex = iVertex;
+ ++iCurrentStreamId;
+ }
+
+ /* iCurrentStreamId is equal to the total number of streams and the value is used for cleanup at the function end. */
+
+ AssertRCReturn(rc, rc);
+
+ /* Mark the end. */
+ memcpy(&aVertexElements[numVertexDecls], &sVertexEnd, sizeof(sVertexEnd));
+
+ /* Check if this context already has the same vertex declaration. */
+ if ( pContext->d3dState.pVertexDecl
+ && pContext->d3dState.cVertexElements == numVertexDecls + 1
+ && memcmp(pContext->d3dState.aVertexElements,
+ aVertexElements,
+ pContext->d3dState.cVertexElements * sizeof(aVertexElements[0])) == 0)
+ {
+ /* Same. */
+ }
+ else
+ {
+ /* Create and set the vertex declaration. */
+ IDirect3DVertexDeclaration9 *pVertexDecl0;
+ hr = pContext->pDevice->CreateVertexDeclaration(&aVertexElements[0], &pVertexDecl0);
+ AssertMsgReturn(hr == D3D_OK, ("CreateVertexDeclaration failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pContext->pDevice->SetVertexDeclaration(pVertexDecl0);
+ AssertMsgReturnStmt(hr == D3D_OK, ("SetVertexDeclaration failed with %x\n", hr),
+ D3D_RELEASE(pVertexDecl0),
+ VERR_INTERNAL_ERROR);
+
+ /* The new vertex declaration has been successfully set. Delete the old one. */
+ D3D_RELEASE(pContext->d3dState.pVertexDecl);
+
+ /* Remember the new vertext declaration. */
+ pContext->d3dState.pVertexDecl = pVertexDecl0;
+ pContext->d3dState.cVertexElements = numVertexDecls + 1;
+ memcpy(pContext->d3dState.aVertexElements,
+ aVertexElements,
+ pContext->d3dState.cVertexElements * sizeof(aVertexElements[0]));
+ }
+
+ /* Begin a scene before rendering anything. */
+ hr = pContext->pDevice->BeginScene();
+ AssertMsgReturn(hr == D3D_OK, ("BeginScene failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Now draw the primitives. */
+ for (uint32_t iPrimitive = 0; iPrimitive < numRanges; ++iPrimitive)
+ {
+ Log(("Primitive %d: type %s\n", iPrimitive, vmsvga3dPrimitiveType2String(pRange[iPrimitive].primType)));
+
+ const uint32_t sidIndex = pRange[iPrimitive].indexArray.surfaceId;
+ PVMSVGA3DSURFACE pIndexSurface = NULL;
+
+ D3DPRIMITIVETYPE PrimitiveTypeD3D;
+ rc = vmsvga3dPrimitiveType2D3D(pRange[iPrimitive].primType, &PrimitiveTypeD3D);
+ AssertRCBreak(rc);
+
+ /* Triangle strips or fans with just one primitive don't make much sense and are identical to triangle lists.
+ * Workaround for NVidia driver crash when encountering some of these.
+ */
+ if ( pRange[iPrimitive].primitiveCount == 1
+ && ( PrimitiveTypeD3D == D3DPT_TRIANGLESTRIP
+ || PrimitiveTypeD3D == D3DPT_TRIANGLEFAN))
+ PrimitiveTypeD3D = D3DPT_TRIANGLELIST;
+
+ if (sidIndex != SVGA3D_INVALID_ID)
+ {
+ AssertMsg(pRange[iPrimitive].indexWidth == sizeof(uint32_t) || pRange[iPrimitive].indexWidth == sizeof(uint16_t),
+ ("Unsupported primitive width %d\n", pRange[iPrimitive].indexWidth));
+
+ rc = vmsvga3dSurfaceFromSid(pState, sidIndex, &pIndexSurface);
+ AssertRCBreak(rc);
+
+ aIndexSurfaces[iPrimitive] = pIndexSurface;
+
+ Log(("vmsvga3dDrawPrimitives: index sid=%u\n", sidIndex));
+
+ rc = vmsvga3dDrawPrimitivesSyncIndexBuffer(pContext, pIndexSurface, pRange[iPrimitive].indexWidth);
+ AssertRCBreak(rc);
+
+ hr = pContext->pDevice->SetIndices(pIndexSurface->u.pIndexBuffer);
+ AssertMsg(hr == D3D_OK, ("SetIndices vertex failed with %x\n", hr));
+ }
+ else
+ {
+ hr = pContext->pDevice->SetIndices(NULL);
+ AssertMsg(hr == D3D_OK, ("SetIndices vertex (NULL) failed with %x\n", hr));
+ }
+
+ const uint32_t strideVertex = pVertexDecl[0].array.stride;
+
+ if (!pIndexSurface)
+ {
+ /* Render without an index buffer */
+ Log(("DrawPrimitive %x primitivecount=%d index index bias=%d stride=%d\n",
+ PrimitiveTypeD3D, pRange[iPrimitive].primitiveCount, pRange[iPrimitive].indexBias, strideVertex));
+
+ hr = pContext->pDevice->DrawPrimitive(PrimitiveTypeD3D,
+ pRange[iPrimitive].indexBias,
+ pRange[iPrimitive].primitiveCount);
+ AssertMsgBreakStmt(hr == D3D_OK, ("DrawPrimitive failed with %x\n", hr), rc = VERR_INTERNAL_ERROR);
+ }
+ else
+ {
+ UINT numVertices;
+ if (pVertexDecl[0].rangeHint.last)
+ {
+ /* Both SVGA3dArrayRangeHint definition and the SVGA driver code imply that 'last' is exclusive,
+ * hence compute the difference.
+ */
+ numVertices = pVertexDecl[0].rangeHint.last - pVertexDecl[0].rangeHint.first;
+ }
+ else
+ {
+ /* Range hint is not provided. */
+ PVMSVGA3DSURFACE pVertexSurface = aVertexSurfaces[0];
+ numVertices = pVertexSurface->paMipmapLevels[0].cbSurface / strideVertex
+ - pVertexDecl[0].array.offset / strideVertex
+ - pVertexDecl[0].rangeHint.first
+ - pRange[iPrimitive].indexBias;
+ }
+
+ /* Render with an index buffer */
+ Log(("DrawIndexedPrimitive %x startindex=%d (indexArray.offset 0x%x) range [%d:%d) numVertices=%d, primitivecount=%d index format=%s index bias=%d stride=%d\n",
+ PrimitiveTypeD3D, pRange[iPrimitive].indexArray.offset / pRange[iPrimitive].indexWidth, pRange[iPrimitive].indexArray.offset,
+ pVertexDecl[0].rangeHint.first, pVertexDecl[0].rangeHint.last, numVertices, pRange[iPrimitive].primitiveCount,
+ (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? "D3DFMT_INDEX16" : "D3DFMT_INDEX32",
+ pRange[iPrimitive].indexBias, strideVertex));
+
+ hr = pContext->pDevice->DrawIndexedPrimitive(PrimitiveTypeD3D,
+ pRange[iPrimitive].indexBias, /* BaseVertexIndex */
+ 0, /* MinVertexIndex */
+ numVertices,
+ pRange[iPrimitive].indexArray.offset / pRange[iPrimitive].indexWidth, /* StartIndex */
+ pRange[iPrimitive].primitiveCount);
+ AssertMsgBreakStmt(hr == D3D_OK, ("DrawIndexedPrimitive failed with %x\n", hr), rc = VERR_INTERNAL_ERROR);
+ }
+ }
+
+ /* End the scene and do some cleanup regardless of the rc. */
+ hr = pContext->pDevice->EndScene();
+ AssertMsgReturn(hr == D3D_OK, ("EndScene failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /* Cleanup. */
+ uint32_t i;
+ /* Clear all streams, because they are set at the beginning of this function anyway.
+ * Now the vertex buffers can be safely deleted/recreated if necessary.
+ */
+ for (i = 0; i < iCurrentStreamId; ++i)
+ {
+ LogFunc(("clear stream %d\n", i));
+ HRESULT hr2 = pContext->pDevice->SetStreamSource(i, NULL, 0, 0);
+ AssertMsg(hr2 == D3D_OK, ("SetStreamSource(%d, NULL) failed with %x\n", i, hr2)); RT_NOREF(hr2);
+ }
+
+ if (cVertexDivisor)
+ {
+ /* "When you are finished rendering the instance data, be sure to reset the vertex stream frequency back..." */
+ for (i = 0; i < iCurrentStreamId; ++i)
+ {
+ LogFunc(("reset stream freq %d\n", i));
+ HRESULT hr2 = pContext->pDevice->SetStreamSourceFreq(i, 1);
+ AssertMsg(hr2 == D3D_OK, ("SetStreamSourceFreq(%d, 1) failed with %x\n", i, hr2)); RT_NOREF(hr2);
+ }
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ for (i = 0; i < numVertexDecls; ++i)
+ {
+ if (aVertexSurfaces[i])
+ {
+ aVertexSurfaces[i]->paMipmapLevels[0].fDirty = false;
+ aVertexSurfaces[i]->fDirty = false;
+ }
+ }
+
+ for (i = 0; i < numRanges; ++i)
+ {
+ if (aIndexSurfaces[i])
+ {
+ aIndexSurfaces[i]->paMipmapLevels[0].fDirty = false;
+ aIndexSurfaces[i]->fDirty = false;
+ }
+ }
+
+ /* Make sure we can track drawing usage of active render targets and textures. */
+ vmsvga3dContextTrackUsage(pThisCC, pContext);
+ }
+
+#if 0
+ /* Dump render target to a bitmap. */
+ if (pContext->state.aRenderTargets[SVGA3D_RT_COLOR0] != SVGA3D_INVALID_ID)
+ {
+ vmsvga3dUpdateHeapBuffersForSurfaces(pThisCC, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0]);
+ PVMSVGA3DSURFACE pSurface;
+ int rc2 = vmsvga3dSurfaceFromSid(pState, pContext->state.aRenderTargets[SVGA3D_RT_COLOR0], &pSurface);
+ if (RT_SUCCESS(rc2))
+ vmsvga3dInfoSurfaceToBitmap(NULL, pSurface, "bmpd3d", "rt", "-post");
+# if 0
+ for (i = 0; i < SVGA3D_MAX_SAMPLERS_PS; ++i)
+ {
+ if (pContext->aSidActiveTextures[i] != SVGA3D_INVALID_ID)
+ {
+ char szSuffix[32];
+ RTStrPrintf2(szSuffix, sizeof(szSuffix), "-tx%d", i);
+ vmsvga3dUpdateHeapBuffersForSurfaces(pThisCC, pContext->aSidActiveTextures[i]);
+ rc2 = vmsvga3dSurfaceFromSid(pState, pContext->aSidActiveTextures[i], &pSurface);
+ if (RT_SUCCESS(rc2))
+ vmsvga3dInfoSurfaceToBitmap(NULL, pSurface, "bmpd3d", "rt", szSuffix);
+ }
+ }
+# endif
+ }
+#endif
+
+ return rc;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackSetScissorRect(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ HRESULT hr;
+ RECT rect;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dSetScissorRect %x (%d,%d)(%d,%d)\n", cid, pRect->x, pRect->y, pRect->w, pRect->h));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ /* Store for vm state save/restore. */
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_SCISSORRECT;
+ pContext->state.RectScissor = *pRect;
+
+ rect.left = pRect->x;
+ rect.top = pRect->y;
+ rect.right = rect.left + pRect->w; /* exclusive */
+ rect.bottom = rect.top + pRect->h; /* exclusive */
+
+ hr = pContext->pDevice->SetScissorRect(&rect);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dSetScissorRect: SetScissorRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackShaderDefine(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type,
+ uint32_t cbData, uint32_t *pShaderData)
+{
+ HRESULT hr;
+ PVMSVGA3DSHADER pShader;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dShaderDefine %x shid=%d type=%s cbData=%d\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", cbData));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ AssertReturn(shid < SVGA3D_MAX_SHADER_IDS, VERR_INVALID_PARAMETER);
+
+ rc = vmsvga3dShaderParse(type, cbData, pShaderData);
+ if (RT_FAILURE(rc))
+ {
+ AssertRC(rc);
+ vmsvga3dShaderLogRel("Failed to parse", type, cbData, pShaderData);
+ return rc;
+ }
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ if (shid >= pContext->cVertexShaders)
+ {
+ void *pvNew = RTMemRealloc(pContext->paVertexShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pContext->paVertexShader = (PVMSVGA3DSHADER)pvNew;
+ memset(&pContext->paVertexShader[pContext->cVertexShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cVertexShaders));
+ for (uint32_t i = pContext->cVertexShaders; i < shid + 1; i++)
+ pContext->paVertexShader[i].id = SVGA3D_INVALID_ID;
+ pContext->cVertexShaders = shid + 1;
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (pContext->paVertexShader[shid].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, cid, shid, pContext->paVertexShader[shid].type);
+
+ pShader = &pContext->paVertexShader[shid];
+ }
+ else
+ {
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if (shid >= pContext->cPixelShaders)
+ {
+ void *pvNew = RTMemRealloc(pContext->paPixelShader, sizeof(VMSVGA3DSHADER) * (shid + 1));
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pContext->paPixelShader = (PVMSVGA3DSHADER)pvNew;
+ memset(&pContext->paPixelShader[pContext->cPixelShaders], 0, sizeof(VMSVGA3DSHADER) * (shid + 1 - pContext->cPixelShaders));
+ for (uint32_t i = pContext->cPixelShaders; i < shid + 1; i++)
+ pContext->paPixelShader[i].id = SVGA3D_INVALID_ID;
+ pContext->cPixelShaders = shid + 1;
+ }
+ /* If one already exists with this id, then destroy it now. */
+ if (pContext->paPixelShader[shid].id != SVGA3D_INVALID_ID)
+ vmsvga3dBackShaderDestroy(pThisCC, cid, shid, pContext->paPixelShader[shid].type);
+
+ pShader = &pContext->paPixelShader[shid];
+ }
+
+ memset(pShader, 0, sizeof(*pShader));
+ pShader->id = shid;
+ pShader->cid = cid;
+ pShader->type = type;
+ pShader->cbData = cbData;
+ pShader->pShaderProgram = RTMemAllocZ(cbData);
+ AssertReturn(pShader->pShaderProgram, VERR_NO_MEMORY);
+ memcpy(pShader->pShaderProgram, pShaderData, cbData);
+
+#ifdef DUMP_SHADER_DISASSEMBLY
+ LPD3DXBUFFER pDisassembly;
+ hr = D3DXDisassembleShader((const DWORD *)pShaderData, FALSE, NULL, &pDisassembly);
+ if (hr == D3D_OK)
+ {
+ Log(("Shader disassembly:\n%s\n", pDisassembly->GetBufferPointer()));
+ D3D_RELEASE(pDisassembly);
+ }
+#endif
+
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ hr = pContext->pDevice->CreateVertexShader((const DWORD *)pShaderData, &pShader->u.pVertexShader);
+ break;
+
+ case SVGA3D_SHADERTYPE_PS:
+ hr = pContext->pDevice->CreatePixelShader((const DWORD *)pShaderData, &pShader->u.pPixelShader);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ if (hr != D3D_OK)
+ {
+ /* Dump the shader code. */
+ vmsvga3dShaderLogRel("Failed to create", type, cbData, pShaderData);
+
+ RTMemFree(pShader->pShaderProgram);
+ memset(pShader, 0, sizeof(*pShader));
+ pShader->id = SVGA3D_INVALID_ID;
+ }
+
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderDefine: CreateVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ PVMSVGA3DSHADER pShader = NULL;
+
+ Log(("vmsvga3dShaderDestroy %x shid=%d type=%s\n", cid, shid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL"));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ if ( shid < pContext->cVertexShaders
+ && pContext->paVertexShader[shid].id == shid)
+ {
+ pShader = &pContext->paVertexShader[shid];
+ D3D_RELEASE(pShader->u.pVertexShader);
+ }
+ }
+ else
+ {
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if ( shid < pContext->cPixelShaders
+ && pContext->paPixelShader[shid].id == shid)
+ {
+ pShader = &pContext->paPixelShader[shid];
+ D3D_RELEASE(pShader->u.pPixelShader);
+ }
+ }
+
+ if (pShader)
+ {
+ if (pShader->pShaderProgram)
+ RTMemFree(pShader->pShaderProgram);
+
+ memset(pShader, 0, sizeof(*pShader));
+ pShader->id = SVGA3D_INVALID_ID;
+ }
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackShaderSet(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+ HRESULT hr;
+
+ Log(("vmsvga3dShaderSet %x type=%s shid=%d\n", cid, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", shid));
+
+ NOREF(pContext);
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ if (type == SVGA3D_SHADERTYPE_VS)
+ {
+ /* Save for vm state save/restore. */
+ pContext->state.shidVertex = shid;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_VERTEXSHADER;
+
+ if ( shid < pContext->cVertexShaders
+ && pContext->paVertexShader[shid].id == shid)
+ {
+ PVMSVGA3DSHADER pShader = &pContext->paVertexShader[shid];
+ Assert(type == pShader->type);
+
+ hr = pContext->pDevice->SetVertexShader(pShader->u.pVertexShader);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ if (shid == SVGA_ID_INVALID)
+ {
+ /* Unselect shader. */
+ hr = pContext->pDevice->SetVertexShader(NULL);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ else
+ {
+ /* Save for vm state save/restore. */
+ pContext->state.shidPixel = shid;
+ pContext->state.u32UpdateFlags |= VMSVGA3D_UPDATE_PIXELSHADER;
+
+ Assert(type == SVGA3D_SHADERTYPE_PS);
+ if ( shid < pContext->cPixelShaders
+ && pContext->paPixelShader[shid].id == shid)
+ {
+ PVMSVGA3DSHADER pShader = &pContext->paPixelShader[shid];
+ Assert(type == pShader->type);
+
+ hr = pContext->pDevice->SetPixelShader(pShader->u.pPixelShader);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ if (shid == SVGA_ID_INVALID)
+ {
+ /* Unselect shader. */
+ hr = pContext->pDevice->SetPixelShader(NULL);
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSet: SetVertex/PixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackShaderSetConst(PVGASTATECC pThisCC, uint32_t cid, uint32_t reg, SVGA3dShaderType type,
+ SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues)
+{
+ HRESULT hr;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ Log(("vmsvga3dShaderSetConst %x reg=%x type=%s ctype=%x\n", cid, reg, (type == SVGA3D_SHADERTYPE_VS) ? "VERTEX" : "PIXEL", ctype));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+ AssertReturn(pContext->pDevice, VERR_INTERNAL_ERROR);
+
+ for (uint32_t i = 0; i < cRegisters; i++)
+ {
+#ifdef LOG_ENABLED
+ switch (ctype)
+ {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ {
+ float *pValuesF = (float *)pValues;
+ Log(("ConstantF %d: value=" FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR ", " FLOAT_FMT_STR "\n",
+ reg + i, FLOAT_FMT_ARGS(pValuesF[i*4 + 0]), FLOAT_FMT_ARGS(pValuesF[i*4 + 1]), FLOAT_FMT_ARGS(pValuesF[i*4 + 2]), FLOAT_FMT_ARGS(pValuesF[i*4 + 3])));
+ break;
+ }
+
+ case SVGA3D_CONST_TYPE_INT:
+ Log(("ConstantI %d: value=%d, %d, %d, %d\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+ break;
+
+ case SVGA3D_CONST_TYPE_BOOL:
+ Log(("ConstantB %d: value=%d, %d, %d, %d\n", reg + i, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]));
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+#endif
+ vmsvga3dSaveShaderConst(pContext, reg + i, type, ctype, pValues[i*4 + 0], pValues[i*4 + 1], pValues[i*4 + 2], pValues[i*4 + 3]);
+ }
+
+ switch (type)
+ {
+ case SVGA3D_SHADERTYPE_VS:
+ switch (ctype)
+ {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ hr = pContext->pDevice->SetVertexShaderConstantF(reg, (const float *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_INT:
+ hr = pContext->pDevice->SetVertexShaderConstantI(reg, (const int *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_BOOL:
+ hr = pContext->pDevice->SetVertexShaderConstantB(reg, (const BOOL *)pValues, cRegisters);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSetConst: SetVertexShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+
+ case SVGA3D_SHADERTYPE_PS:
+ switch (ctype)
+ {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ {
+ hr = pContext->pDevice->SetPixelShaderConstantF(reg, (const float *)pValues, cRegisters);
+ break;
+ }
+
+ case SVGA3D_CONST_TYPE_INT:
+ hr = pContext->pDevice->SetPixelShaderConstantI(reg, (const int *)pValues, cRegisters);
+ break;
+
+ case SVGA3D_CONST_TYPE_BOOL:
+ hr = pContext->pDevice->SetPixelShaderConstantB(reg, (const BOOL *)pValues, cRegisters);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ AssertMsgReturn(hr == D3D_OK, ("vmsvga3dShaderSetConst: SetPixelShader failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+
+ default:
+ AssertFailedReturn(VERR_INVALID_PARAMETER);
+ }
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryCreate(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC);
+ HRESULT hr = pContext->pDevice->CreateQuery(D3DQUERYTYPE_OCCLUSION, &pContext->occlusion.pQuery);
+ AssertMsgReturn(hr == D3D_OK, ("CreateQuery(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryDelete(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC);
+ D3D_RELEASE(pContext->occlusion.pQuery);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryBegin(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC);
+ HRESULT hr = pContext->occlusion.pQuery->Issue(D3DISSUE_BEGIN);
+ AssertMsgReturnStmt(hr == D3D_OK, ("D3DISSUE_BEGIN(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr),
+ D3D_RELEASE(pContext->occlusion.pQuery), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryEnd(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext)
+{
+ RT_NOREF(pThisCC);
+ HRESULT hr = pContext->occlusion.pQuery->Issue(D3DISSUE_END);
+ AssertMsgReturnStmt(hr == D3D_OK, ("D3DISSUE_END(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr),
+ D3D_RELEASE(pContext->occlusion.pQuery), VERR_INTERNAL_ERROR);
+ return VINF_SUCCESS;
+}
+
+static DECLCALLBACK(int) vmsvga3dBackOcclusionQueryGetData(PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels)
+{
+ RT_NOREF(pThisCC);
+ HRESULT hr = D3D_OK;
+ /* Wait until the data becomes available. */
+ DWORD dwPixels = 0;
+ do
+ {
+ hr = pContext->occlusion.pQuery->GetData((void *)&dwPixels, sizeof(DWORD), D3DGETDATA_FLUSH);
+ } while (hr == S_FALSE);
+
+ AssertMsgReturnStmt(hr == D3D_OK, ("GetData(D3DQUERYTYPE_OCCLUSION) failed with %x\n", hr),
+ D3D_RELEASE(pContext->occlusion.pQuery), VERR_INTERNAL_ERROR);
+
+ LogFunc(("Query result: dwPixels %d\n", dwPixels));
+ *pu32Pixels = dwPixels;
+ return VINF_SUCCESS;
+}
+
+static void vmsvgaDumpD3DCaps(D3DCAPS9 *pCaps, D3DADAPTER_IDENTIFIER9 const *pai9)
+{
+ bool const fBufferingSaved = RTLogRelSetBuffering(true /*fBuffered*/);
+
+ LogRel(("\nD3D9 adapter: %s %RX16:%RX16 [%s, version %d.%d.%d.%d]\n",
+ pai9->Description, pai9->VendorId, pai9->DeviceId, pai9->Driver,
+ RT_HI_U16(pai9->DriverVersion.HighPart), RT_LO_U16(pai9->DriverVersion.HighPart),
+ RT_HI_U16(pai9->DriverVersion.LowPart), RT_LO_U16(pai9->DriverVersion.LowPart)));
+
+ LogRel(("\nD3D device caps: DevCaps2:\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_ADAPTIVETESSRTPATCH)
+ LogRel((" - D3DDEVCAPS2_ADAPTIVETESSRTPATCH\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_ADAPTIVETESSNPATCH)
+ LogRel((" - D3DDEVCAPS2_ADAPTIVETESSNPATCH\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES)
+ LogRel((" - D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_DMAPNPATCH)
+ LogRel((" - D3DDEVCAPS2_DMAPNPATCH\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH)
+ LogRel((" - D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_STREAMOFFSET)
+ LogRel((" - D3DDEVCAPS2_STREAMOFFSET\n"));
+ if (pCaps->DevCaps2 & D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET)
+ LogRel((" - D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET\n"));
+
+ LogRel(("\nCaps2:\n"));
+ if (pCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP)
+ LogRel((" - D3DCAPS2_CANAUTOGENMIPMAP\n"));
+ if (pCaps->Caps2 & D3DCAPS2_CANCALIBRATEGAMMA)
+ LogRel((" - D3DCAPS2_CANCALIBRATEGAMMA\n"));
+ if (pCaps->Caps2 & D3DCAPS2_CANSHARERESOURCE)
+ LogRel((" - D3DCAPS2_CANSHARERESOURCE\n"));
+ if (pCaps->Caps2 & D3DCAPS2_CANMANAGERESOURCE)
+ LogRel((" - D3DCAPS2_CANMANAGERESOURCE\n"));
+ if (pCaps->Caps2 & D3DCAPS2_DYNAMICTEXTURES)
+ LogRel((" - D3DCAPS2_DYNAMICTEXTURES\n"));
+ if (pCaps->Caps2 & D3DCAPS2_FULLSCREENGAMMA)
+ LogRel((" - D3DCAPS2_FULLSCREENGAMMA\n"));
+
+ LogRel(("\nCaps3:\n"));
+ if (pCaps->Caps3 & D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD)
+ LogRel((" - D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD\n"));
+ if (pCaps->Caps3 & D3DCAPS3_COPY_TO_VIDMEM)
+ LogRel((" - D3DCAPS3_COPY_TO_VIDMEM\n"));
+ if (pCaps->Caps3 & D3DCAPS3_COPY_TO_SYSTEMMEM)
+ LogRel((" - D3DCAPS3_COPY_TO_SYSTEMMEM\n"));
+ if (pCaps->Caps3 & D3DCAPS3_DXVAHD)
+ LogRel((" - D3DCAPS3_DXVAHD\n"));
+ if (pCaps->Caps3 & D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION)
+ LogRel((" - D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION\n"));
+
+ LogRel(("\nPresentationIntervals:\n"));
+ if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_IMMEDIATE)
+ LogRel((" - D3DPRESENT_INTERVAL_IMMEDIATE\n"));
+ if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_ONE)
+ LogRel((" - D3DPRESENT_INTERVAL_ONE\n"));
+ if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_TWO)
+ LogRel((" - D3DPRESENT_INTERVAL_TWO\n"));
+ if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_THREE)
+ LogRel((" - D3DPRESENT_INTERVAL_THREE\n"));
+ if (pCaps->PresentationIntervals & D3DPRESENT_INTERVAL_FOUR)
+ LogRel((" - D3DPRESENT_INTERVAL_FOUR\n"));
+
+ LogRel(("\nDevcaps:\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_CANBLTSYSTONONLOCAL)
+ LogRel((" - D3DDEVCAPS_CANBLTSYSTONONLOCAL\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_CANRENDERAFTERFLIP)
+ LogRel((" - D3DDEVCAPS_CANRENDERAFTERFLIP\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_DRAWPRIMITIVES2)
+ LogRel((" - D3DDEVCAPS_DRAWPRIMITIVES2\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_DRAWPRIMITIVES2EX)
+ LogRel((" - D3DDEVCAPS_DRAWPRIMITIVES2EX\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_DRAWPRIMTLVERTEX)
+ LogRel((" - D3DDEVCAPS_DRAWPRIMTLVERTEX\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_EXECUTESYSTEMMEMORY)
+ LogRel((" - D3DDEVCAPS_EXECUTESYSTEMMEMORY\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_EXECUTEVIDEOMEMORY)
+ LogRel((" - D3DDEVCAPS_EXECUTEVIDEOMEMORY\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_HWRASTERIZATION)
+ LogRel((" - D3DDEVCAPS_HWRASTERIZATION\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
+ LogRel((" - D3DDEVCAPS_HWTRANSFORMANDLIGHT\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_NPATCHES)
+ LogRel((" - D3DDEVCAPS_NPATCHES\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_PUREDEVICE)
+ LogRel((" - D3DDEVCAPS_PUREDEVICE\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_QUINTICRTPATCHES)
+ LogRel((" - D3DDEVCAPS_QUINTICRTPATCHES\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_RTPATCHES)
+ LogRel((" - D3DDEVCAPS_RTPATCHES\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_RTPATCHHANDLEZERO)
+ LogRel((" - D3DDEVCAPS_RTPATCHHANDLEZERO\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_SEPARATETEXTUREMEMORIES)
+ LogRel((" - D3DDEVCAPS_SEPARATETEXTUREMEMORIES\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_TEXTURENONLOCALVIDMEM)
+ LogRel((" - D3DDEVCAPS_TEXTURENONLOCALVIDMEM\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_TEXTURESYSTEMMEMORY)
+ LogRel((" - D3DDEVCAPS_TEXTURESYSTEMMEMORY\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_TEXTUREVIDEOMEMORY)
+ LogRel((" - D3DDEVCAPS_TEXTUREVIDEOMEMORY\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_TLVERTEXSYSTEMMEMORY)
+ LogRel((" - D3DDEVCAPS_TLVERTEXSYSTEMMEMORY\n"));
+ if (pCaps->DevCaps & D3DDEVCAPS_TLVERTEXVIDEOMEMORY)
+ LogRel((" - D3DDEVCAPS_TLVERTEXVIDEOMEMORY\n"));
+
+ LogRel(("\nTextureCaps:\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_ALPHA)
+ LogRel((" - D3DPTEXTURECAPS_ALPHA\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_ALPHAPALETTE)
+ LogRel((" - D3DPTEXTURECAPS_ALPHAPALETTE\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP)
+ LogRel((" - D3DPTEXTURECAPS_CUBEMAP\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2)
+ LogRel((" - D3DPTEXTURECAPS_CUBEMAP_POW2\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_MIPCUBEMAP)
+ LogRel((" - D3DPTEXTURECAPS_MIPCUBEMAP\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_MIPMAP)
+ LogRel((" - D3DPTEXTURECAPS_MIPMAP\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_MIPVOLUMEMAP)
+ LogRel((" - D3DPTEXTURECAPS_MIPVOLUMEMAP\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL)
+ LogRel((" - D3DPTEXTURECAPS_NONPOW2CONDITIONAL\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_POW2)
+ LogRel((" - D3DPTEXTURECAPS_POW2\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_NOPROJECTEDBUMPENV)
+ LogRel((" - D3DPTEXTURECAPS_NOPROJECTEDBUMPENV\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_PERSPECTIVE)
+ LogRel((" - D3DPTEXTURECAPS_PERSPECTIVE\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_POW2)
+ LogRel((" - D3DPTEXTURECAPS_POW2\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_PROJECTED)
+ LogRel((" - D3DPTEXTURECAPS_PROJECTED\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_SQUAREONLY)
+ LogRel((" - D3DPTEXTURECAPS_SQUAREONLY\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE)
+ LogRel((" - D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP)
+ LogRel((" - D3DPTEXTURECAPS_VOLUMEMAP\n"));
+ if (pCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP_POW2)
+ LogRel((" - D3DPTEXTURECAPS_VOLUMEMAP_POW2\n"));
+
+ LogRel(("\nTextureFilterCaps\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_CONVOLUTIONMONO)
+ LogRel((" - D3DPTFILTERCAPS_CONVOLUTIONMONO\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MAGFPOINT\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MAGFLINEAR\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC)
+ LogRel((" - D3DPTFILTERCAPS_MAGFANISOTROPIC\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MAGFGAUSSIANQUAD\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MINFPOINT\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MINFLINEAR\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC)
+ LogRel((" - D3DPTFILTERCAPS_MINFANISOTROPIC\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFPYRAMIDALQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MINFPYRAMIDALQUAD\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MINFGAUSSIANQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MINFGAUSSIANQUAD\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MIPFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MIPFPOINT\n"));
+ if (pCaps->TextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MIPFLINEAR\n"));
+
+ LogRel(("\nCubeTextureFilterCaps\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_CONVOLUTIONMONO)
+ LogRel((" - D3DPTFILTERCAPS_CONVOLUTIONMONO\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MAGFPOINT\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MAGFLINEAR\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC)
+ LogRel((" - D3DPTFILTERCAPS_MAGFANISOTROPIC\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MAGFGAUSSIANQUAD\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MINFPOINT\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MINFLINEAR\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC)
+ LogRel((" - D3DPTFILTERCAPS_MINFANISOTROPIC\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFPYRAMIDALQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MINFPYRAMIDALQUAD\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MINFGAUSSIANQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MINFGAUSSIANQUAD\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MIPFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MIPFPOINT\n"));
+ if (pCaps->CubeTextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MIPFLINEAR\n"));
+
+ LogRel(("\nVolumeTextureFilterCaps\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_CONVOLUTIONMONO)
+ LogRel((" - D3DPTFILTERCAPS_CONVOLUTIONMONO\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MAGFPOINT\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MAGFLINEAR\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFANISOTROPIC)
+ LogRel((" - D3DPTFILTERCAPS_MAGFANISOTROPIC\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MAGFGAUSSIANQUAD\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MINFPOINT\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MINFLINEAR\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFANISOTROPIC)
+ LogRel((" - D3DPTFILTERCAPS_MINFANISOTROPIC\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFPYRAMIDALQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MINFPYRAMIDALQUAD\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MINFGAUSSIANQUAD)
+ LogRel((" - D3DPTFILTERCAPS_MINFGAUSSIANQUAD\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MIPFPOINT)
+ LogRel((" - D3DPTFILTERCAPS_MIPFPOINT\n"));
+ if (pCaps->VolumeTextureFilterCaps & D3DPTFILTERCAPS_MIPFLINEAR)
+ LogRel((" - D3DPTFILTERCAPS_MIPFLINEAR\n"));
+
+ LogRel(("\nTextureAddressCaps:\n"));
+ if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_BORDER)
+ LogRel((" - D3DPTADDRESSCAPS_BORDER\n"));
+ if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_CLAMP)
+ LogRel((" - D3DPTADDRESSCAPS_CLAMP\n"));
+ if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_INDEPENDENTUV)
+ LogRel((" - D3DPTADDRESSCAPS_INDEPENDENTUV\n"));
+ if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_MIRROR)
+ LogRel((" - D3DPTADDRESSCAPS_MIRROR\n"));
+ if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_MIRRORONCE)
+ LogRel((" - D3DPTADDRESSCAPS_MIRRORONCE\n"));
+ if (pCaps->TextureAddressCaps & D3DPTADDRESSCAPS_WRAP)
+ LogRel((" - D3DPTADDRESSCAPS_WRAP\n"));
+
+ LogRel(("\nTextureOpCaps:\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_DISABLE)
+ LogRel((" - D3DTEXOPCAPS_DISABLE\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_SELECTARG1)
+ LogRel((" - D3DTEXOPCAPS_SELECTARG1\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_SELECTARG2)
+ LogRel((" - D3DTEXOPCAPS_SELECTARG2\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATE)
+ LogRel((" - D3DTEXOPCAPS_MODULATE\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATE2X)
+ LogRel((" - D3DTEXOPCAPS_MODULATE2X\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATE4X)
+ LogRel((" - D3DTEXOPCAPS_MODULATE4X\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADD)
+ LogRel((" - D3DTEXOPCAPS_ADD\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED)
+ LogRel((" - D3DTEXOPCAPS_ADDSIGNED\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADDSIGNED2X)
+ LogRel((" - D3DTEXOPCAPS_ADDSIGNED2X\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_SUBTRACT)
+ LogRel((" - D3DTEXOPCAPS_SUBTRACT\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_ADDSMOOTH)
+ LogRel((" - D3DTEXOPCAPS_ADDSMOOTH\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDDIFFUSEALPHA)
+ LogRel((" - D3DTEXOPCAPS_BLENDDIFFUSEALPHA\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDTEXTUREALPHA)
+ LogRel((" - D3DTEXOPCAPS_BLENDTEXTUREALPHA\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDFACTORALPHA)
+ LogRel((" - D3DTEXOPCAPS_BLENDFACTORALPHA\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDTEXTUREALPHAPM)
+ LogRel((" - D3DTEXOPCAPS_BLENDTEXTUREALPHAPM\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BLENDCURRENTALPHA)
+ LogRel((" - D3DTEXOPCAPS_BLENDCURRENTALPHA\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_PREMODULATE)
+ LogRel((" - D3DTEXOPCAPS_PREMODULATE\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR)
+ LogRel((" - D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA)
+ LogRel((" - D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR)
+ LogRel((" - D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA)
+ LogRel((" - D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAP)
+ LogRel((" - D3DTEXOPCAPS_BUMPENVMAP\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_BUMPENVMAPLUMINANCE)
+ LogRel((" - D3DTEXOPCAPS_BUMPENVMAPLUMINANCE\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_DOTPRODUCT3)
+ LogRel((" - D3DTEXOPCAPS_DOTPRODUCT3\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_MULTIPLYADD)
+ LogRel((" - D3DTEXOPCAPS_MULTIPLYADD\n"));
+ if (pCaps->TextureOpCaps & D3DTEXOPCAPS_LERP)
+ LogRel((" - D3DTEXOPCAPS_LERP\n"));
+
+
+ LogRel(("\n"));
+ LogRel(("PixelShaderVersion: %#x (%u.%u)\n", pCaps->PixelShaderVersion,
+ D3DSHADER_VERSION_MAJOR(pCaps->PixelShaderVersion), D3DSHADER_VERSION_MINOR(pCaps->PixelShaderVersion)));
+ LogRel(("VertexShaderVersion: %#x (%u.%u)\n", pCaps->VertexShaderVersion,
+ D3DSHADER_VERSION_MAJOR(pCaps->VertexShaderVersion), D3DSHADER_VERSION_MINOR(pCaps->VertexShaderVersion)));
+
+ LogRel(("\n"));
+ RTLogRelSetBuffering(fBufferingSaved);
+}
+
+/**
+ * Worker for vmsvga3dUpdateHeapBuffersForSurfaces.
+ *
+ * This will allocate heap buffers if necessary, thus increasing the memory
+ * usage of the process.
+ *
+ * @todo Would be interesting to share this code with the saved state code.
+ *
+ * @returns VBox status code.
+ * @param pThisCC The VGA/VMSVGA context.
+ * @param pSurface The surface to refresh the heap buffers for.
+ */
+static DECLCALLBACK(int) vmsvga3dBackSurfaceUpdateHeapBuffers(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ /*
+ * Currently we've got trouble retreving bit for DEPTHSTENCIL
+ * surfaces both for OpenGL and D3D, so skip these here (don't
+ * wast memory on them).
+ */
+ uint32_t const fSwitchFlags = pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
+ if ( fSwitchFlags != SVGA3D_SURFACE_HINT_DEPTHSTENCIL
+ && fSwitchFlags != (SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE))
+ {
+
+ /*
+ * Work thru each mipmap level for each face.
+ */
+ for (uint32_t iFace = 0; iFace < pSurface->cFaces; iFace++)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[iFace * pSurface->cLevels];
+ for (uint32_t i = 0; i < pSurface->cLevels; i++, pMipmapLevel++)
+ {
+ if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ Assert(pMipmapLevel->cbSurface);
+ Assert(pMipmapLevel->cbSurface == pMipmapLevel->cbSurfacePlane * pMipmapLevel->mipmapSize.depth);
+
+ /*
+ * Make sure we've got surface memory buffer.
+ */
+ uint8_t *pbDst = (uint8_t *)pMipmapLevel->pSurfaceData;
+ if (!pbDst)
+ {
+ pMipmapLevel->pSurfaceData = pbDst = (uint8_t *)RTMemAllocZ(pMipmapLevel->cbSurface);
+ AssertReturn(pbDst, VERR_NO_MEMORY);
+ }
+
+ /*
+ * D3D specifics.
+ */
+ Assert(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_NONE);
+
+ HRESULT hr;
+ switch (pSurface->enmD3DResType)
+ {
+ case VMSVGA3D_D3DRESTYPE_VOLUME_TEXTURE:
+ AssertFailed(); /// @todo
+ break;
+
+ case VMSVGA3D_D3DRESTYPE_SURFACE:
+ case VMSVGA3D_D3DRESTYPE_TEXTURE:
+ case VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE:
+ {
+ /*
+ * Lock the buffer and make it accessible to memcpy.
+ */
+ D3DLOCKED_RECT LockedRect;
+ if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_CUBE_TEXTURE)
+ {
+ hr = pSurface->u.pCubeTexture->LockRect(vmsvga3dCubemapFaceFromIndex(iFace),
+ i, /* texture level */
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ }
+ else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
+ {
+ if (pSurface->bounce.pTexture)
+ {
+ if ( !pSurface->fDirty
+ && RT_BOOL(fSwitchFlags & SVGA3D_SURFACE_HINT_RENDERTARGET))
+ {
+ /** @todo stricter checks for associated context */
+ uint32_t cid = pSurface->idAssociatedContext;
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ IDirect3DSurface9 *pDst = NULL;
+ hr = pSurface->bounce.pTexture->GetSurfaceLevel(i, &pDst);
+ AssertMsgReturn(hr == D3D_OK, ("GetSurfaceLevel failed with %#x\n", hr), VERR_INTERNAL_ERROR);
+
+ IDirect3DSurface9 *pSrc = NULL;
+ hr = pSurface->u.pTexture->GetSurfaceLevel(i, &pSrc);
+ AssertMsgReturn(hr == D3D_OK, ("GetSurfaceLevel failed with %#x\n", hr), VERR_INTERNAL_ERROR);
+
+ hr = pContext->pDevice->GetRenderTargetData(pSrc, pDst);
+ AssertMsgReturn(hr == D3D_OK, ("GetRenderTargetData failed with %#x\n", hr), VERR_INTERNAL_ERROR);
+
+ pSrc->Release();
+ pDst->Release();
+ }
+
+ hr = pSurface->bounce.pTexture->LockRect(i, /* texture level */
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ }
+ else
+ hr = pSurface->u.pTexture->LockRect(i, /* texture level */
+ &LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ }
+ else
+ hr = pSurface->u.pSurface->LockRect(&LockedRect,
+ NULL,
+ D3DLOCK_READONLY);
+ AssertMsgReturn(hr == D3D_OK, ("LockRect failed with %x\n", hr), VERR_INTERNAL_ERROR);
+
+ /*
+ * Copy the data. Take care in case the pitch differs.
+ */
+ if (pMipmapLevel->cbSurfacePitch == (uint32_t)LockedRect.Pitch)
+ memcpy(pbDst, LockedRect.pBits, pMipmapLevel->cbSurface);
+ else
+ for (uint32_t j = 0; j < pMipmapLevel->cBlocksY; j++)
+ memcpy(pbDst + j * pMipmapLevel->cbSurfacePitch,
+ (uint8_t *)LockedRect.pBits + j * LockedRect.Pitch,
+ pMipmapLevel->cbSurfacePitch);
+
+ /*
+ * Release the buffer.
+ */
+ if (fSwitchFlags & SVGA3D_SURFACE_HINT_TEXTURE)
+ {
+ if (pSurface->bounce.pTexture)
+ {
+ hr = pSurface->bounce.pTexture->UnlockRect(i);
+ AssertMsgReturn(hr == D3D_OK, ("UnlockRect failed with %#x\n", hr), VERR_INTERNAL_ERROR);
+ }
+ else
+ hr = pSurface->u.pTexture->UnlockRect(i);
+ }
+ else
+ hr = pSurface->u.pSurface->UnlockRect();
+ AssertMsgReturn(hr == D3D_OK, ("UnlockRect failed with %#x\n", hr), VERR_INTERNAL_ERROR);
+ break;
+ }
+
+ case VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER:
+ case VMSVGA3D_D3DRESTYPE_INDEX_BUFFER:
+ {
+ /* Current type of the buffer. */
+ const bool fVertex = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER);
+
+ void *pvD3DData = NULL;
+ if (fVertex)
+ hr = pSurface->u.pVertexBuffer->Lock(0, 0, &pvD3DData, D3DLOCK_READONLY);
+ else
+ hr = pSurface->u.pIndexBuffer->Lock(0, 0, &pvD3DData, D3DLOCK_READONLY);
+ AssertMsgReturn(hr == D3D_OK, ("Lock %s failed with %x\n", fVertex ? "vertex" : "index", hr), VERR_INTERNAL_ERROR);
+
+ memcpy(pbDst, pvD3DData, pMipmapLevel->cbSurface);
+
+ if (fVertex)
+ hr = pSurface->u.pVertexBuffer->Unlock();
+ else
+ hr = pSurface->u.pIndexBuffer->Unlock();
+ AssertMsg(hr == D3D_OK, ("Unlock %s failed with %x\n", fVertex ? "vertex" : "index", hr));
+ break;
+ }
+
+ default:
+ AssertMsgFailed(("flags %#x, type %d\n", fSwitchFlags, pSurface->enmD3DResType));
+ }
+
+ }
+ /* else: There is no data in hardware yet, so whatever we got is already current. */
+ }
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+static DECLCALLBACK(int) vmsvga3dBackQueryInterface(PVGASTATECC pThisCC, char const *pszInterfaceName, void *pvInterfaceFuncs, size_t cbInterfaceFuncs)
+{
+ RT_NOREF(pThisCC);
+
+ int rc = VINF_SUCCESS;
+ if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_3D) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCS3D))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCS3D *p = (VMSVGA3DBACKENDFUNCS3D *)pvInterfaceFuncs;
+ p->pfnInit = vmsvga3dBackInit;
+ p->pfnPowerOn = vmsvga3dBackPowerOn;
+ p->pfnTerminate = vmsvga3dBackTerminate;
+ p->pfnReset = vmsvga3dBackReset;
+ p->pfnQueryCaps = vmsvga3dBackQueryCaps;
+ p->pfnChangeMode = vmsvga3dBackChangeMode;
+ p->pfnCreateTexture = vmsvga3dBackCreateTexture;
+ p->pfnSurfaceDestroy = vmsvga3dBackSurfaceDestroy;
+ p->pfnSurfaceInvalidateImage = vmsvga3dBackSurfaceInvalidateImage;
+ p->pfnSurfaceCopy = vmsvga3dBackSurfaceCopy;
+ p->pfnSurfaceDMACopyBox = vmsvga3dBackSurfaceDMACopyBox;
+ p->pfnSurfaceStretchBlt = vmsvga3dBackSurfaceStretchBlt;
+ p->pfnUpdateHostScreenViewport = vmsvga3dBackUpdateHostScreenViewport;
+ p->pfnDefineScreen = vmsvga3dBackDefineScreen;
+ p->pfnDestroyScreen = vmsvga3dBackDestroyScreen;
+ p->pfnSurfaceBlitToScreen = vmsvga3dBackSurfaceBlitToScreen;
+ p->pfnSurfaceUpdateHeapBuffers = vmsvga3dBackSurfaceUpdateHeapBuffers;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_VGPU9) == 0)
+ {
+ if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSVGPU9))
+ {
+ if (pvInterfaceFuncs)
+ {
+ VMSVGA3DBACKENDFUNCSVGPU9 *p = (VMSVGA3DBACKENDFUNCSVGPU9 *)pvInterfaceFuncs;
+ p->pfnContextDefine = vmsvga3dBackContextDefine;
+ p->pfnContextDestroy = vmsvga3dBackContextDestroy;
+ p->pfnSetTransform = vmsvga3dBackSetTransform;
+ p->pfnSetZRange = vmsvga3dBackSetZRange;
+ p->pfnSetRenderState = vmsvga3dBackSetRenderState;
+ p->pfnSetRenderTarget = vmsvga3dBackSetRenderTarget;
+ p->pfnSetTextureState = vmsvga3dBackSetTextureState;
+ p->pfnSetMaterial = vmsvga3dBackSetMaterial;
+ p->pfnSetLightData = vmsvga3dBackSetLightData;
+ p->pfnSetLightEnabled = vmsvga3dBackSetLightEnabled;
+ p->pfnSetViewPort = vmsvga3dBackSetViewPort;
+ p->pfnSetClipPlane = vmsvga3dBackSetClipPlane;
+ p->pfnCommandClear = vmsvga3dBackCommandClear;
+ p->pfnDrawPrimitives = vmsvga3dBackDrawPrimitives;
+ p->pfnSetScissorRect = vmsvga3dBackSetScissorRect;
+ p->pfnGenerateMipmaps = vmsvga3dBackGenerateMipmaps;
+ p->pfnShaderDefine = vmsvga3dBackShaderDefine;
+ p->pfnShaderDestroy = vmsvga3dBackShaderDestroy;
+ p->pfnShaderSet = vmsvga3dBackShaderSet;
+ p->pfnShaderSetConst = vmsvga3dBackShaderSetConst;
+ p->pfnOcclusionQueryCreate = vmsvga3dBackOcclusionQueryCreate;
+ p->pfnOcclusionQueryDelete = vmsvga3dBackOcclusionQueryDelete;
+ p->pfnOcclusionQueryBegin = vmsvga3dBackOcclusionQueryBegin;
+ p->pfnOcclusionQueryEnd = vmsvga3dBackOcclusionQueryEnd;
+ p->pfnOcclusionQueryGetData = vmsvga3dBackOcclusionQueryGetData;
+ }
+ }
+ else
+ {
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ }
+ else
+ rc = VERR_NOT_IMPLEMENTED;
+ return rc;
+}
+
+
+extern VMSVGA3DBACKENDDESC const g_BackendLegacy =
+{
+ "LEGACY",
+ vmsvga3dBackQueryInterface
+};
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
new file mode 100644
index 00000000..45e6c317
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
@@ -0,0 +1,1806 @@
+/* $Id: DevVGA-SVGA3d.cpp $ */
+/** @file
+ * DevSVGA3d - VMWare SVGA device, 3D parts - Common core code.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/vmm/pdmdev.h>
+#include <iprt/errcore.h>
+#include <VBox/log.h>
+
+#include <iprt/assert.h>
+#include <iprt/mem.h>
+
+#include <VBox/vmm/pgm.h> /* required by DevVGA.h */
+#include <VBoxVideo.h> /* required by DevVGA.h */
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#include "DevVGA-SVGA.h"
+#include "DevVGA-SVGA3d.h"
+#define VMSVGA3D_INCL_STRUCTURE_DESCRIPTORS
+#include "DevVGA-SVGA3d-internal.h"
+#include "DevVGA-SVGA-internal.h"
+
+
+static int vmsvga3dSurfaceAllocMipLevels(PVMSVGA3DSURFACE pSurface)
+{
+ /* Allocate buffer to hold the surface data until we can move it into a D3D object */
+ for (uint32_t i = 0; i < pSurface->cLevels * pSurface->surfaceDesc.numArrayElements; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[i];
+ AssertReturn(pMipmapLevel->pSurfaceData == NULL, VERR_INVALID_STATE);
+ pMipmapLevel->pSurfaceData = RTMemAllocZ(pMipmapLevel->cbSurface);
+ AssertReturn(pMipmapLevel->pSurfaceData, VERR_NO_MEMORY);
+ }
+ return VINF_SUCCESS;
+}
+
+
+static void vmsvga3dSurfaceFreeMipLevels(PVMSVGA3DSURFACE pSurface)
+{
+ for (uint32_t i = 0; i < pSurface->cLevels * pSurface->surfaceDesc.numArrayElements; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[i];
+ RTMemFreeZ(pMipmapLevel->pSurfaceData, pMipmapLevel->cbSurface);
+ pMipmapLevel->pSurfaceData = NULL;
+ }
+}
+
+
+/**
+ * Implements the SVGA_3D_CMD_SURFACE_DEFINE_V2 and SVGA_3D_CMD_SURFACE_DEFINE
+ * commands (fifo).
+ *
+ * @returns VBox status code (currently ignored).
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param sid The ID of the surface to (re-)define.
+ * @param surfaceFlags .
+ * @param format .
+ * @param multisampleCount .
+ * @param autogenFilter .
+ * @param numMipLevels .
+ * @param pMipLevel0Size .
+ * @param arraySize Number of elements in a texture array.
+ * @param fAllocMipLevels .
+ */
+int vmsvga3dSurfaceDefine(PVGASTATECC pThisCC, uint32_t sid, SVGA3dSurfaceAllFlags surfaceFlags, SVGA3dSurfaceFormat format,
+ uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter,
+ uint32_t numMipLevels, SVGA3dSize const *pMipLevel0Size, uint32_t arraySize, bool fAllocMipLevels)
+{
+ PVMSVGA3DSURFACE pSurface;
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ LogFunc(("sid=%u surfaceFlags=%#x format=%s (%#x) multiSampleCount=%d autogenFilter=%d, numMipLevels=%d size=(%dx%dx%d)\n",
+ sid, surfaceFlags, vmsvgaLookupEnum((int)format, &g_SVGA3dSurfaceFormat2String), format, multisampleCount, autogenFilter,
+ numMipLevels, pMipLevel0Size->width, pMipLevel0Size->height, pMipLevel0Size->depth));
+
+ ASSERT_GUEST_RETURN(sid < SVGA3D_MAX_SURFACE_IDS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(numMipLevels >= 1 && numMipLevels <= SVGA3D_MAX_MIP_LEVELS, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(arraySize <= SVGA3D_MAX_SURFACE_ARRAYSIZE, VERR_INVALID_PARAMETER);
+
+ if (sid >= pState->cSurfaces)
+ {
+ /* Grow the array. */
+ uint32_t cNew = RT_ALIGN(sid + 15, 16);
+ void *pvNew = RTMemRealloc(pState->papSurfaces, sizeof(pState->papSurfaces[0]) * cNew);
+ AssertReturn(pvNew, VERR_NO_MEMORY);
+ pState->papSurfaces = (PVMSVGA3DSURFACE *)pvNew;
+ while (pState->cSurfaces < cNew)
+ {
+ pSurface = (PVMSVGA3DSURFACE)RTMemAllocZ(sizeof(*pSurface));
+ AssertReturn(pSurface, VERR_NO_MEMORY);
+ pSurface->id = SVGA3D_INVALID_ID;
+ pState->papSurfaces[pState->cSurfaces++] = pSurface;
+ }
+ }
+ pSurface = pState->papSurfaces[sid];
+
+ /* If one already exists with this id, then destroy it now. */
+ if (pSurface->id != SVGA3D_INVALID_ID)
+ vmsvga3dSurfaceDestroy(pThisCC, sid);
+
+ RT_ZERO(*pSurface);
+ // pSurface->pBackendSurface = NULL;
+ pSurface->id = SVGA3D_INVALID_ID; /* Keep this value until the surface init completes */
+ pSurface->idAssociatedContext = SVGA3D_INVALID_ID;
+
+ if (arraySize)
+ pSurface->surfaceDesc.numArrayElements = arraySize; /* Also for an array of cubemaps where arraySize = 6 * numCubes. */
+ else if (surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
+ pSurface->surfaceDesc.numArrayElements = SVGA3D_MAX_SURFACE_FACES;
+ else
+ pSurface->surfaceDesc.numArrayElements = 1;
+
+ /** @todo This 'switch' and the surfaceFlags tweaks should not be necessary.
+ * The actual surface type will be figured out when the surface is actually used later.
+ * The backends code must be reviewed for unnecessary dependencies on the surfaceFlags value.
+ */
+ /* The surface type is sort of undefined now, even though the hints and format can help to clear that up.
+ * In some case we'll have to wait until the surface is used to create the D3D object.
+ */
+ switch (format)
+ {
+ case SVGA3D_Z_D32:
+ case SVGA3D_Z_D16:
+ case SVGA3D_Z_D24S8:
+ case SVGA3D_Z_D15S1:
+ case SVGA3D_Z_D24X8:
+ case SVGA3D_Z_DF16:
+ case SVGA3D_Z_DF24:
+ case SVGA3D_Z_D24S8_INT:
+ Assert(surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL);
+ surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
+ break;
+
+ /* Texture compression formats */
+ case SVGA3D_DXT1:
+ case SVGA3D_DXT2:
+ case SVGA3D_DXT3:
+ case SVGA3D_DXT4:
+ case SVGA3D_DXT5:
+ /* Bump-map formats */
+ case SVGA3D_BUMPU8V8:
+ case SVGA3D_BUMPL6V5U5:
+ case SVGA3D_BUMPX8L8V8U8:
+ case SVGA3D_V8U8:
+ case SVGA3D_Q8W8V8U8:
+ case SVGA3D_CxV8U8:
+ case SVGA3D_X8L8V8U8:
+ case SVGA3D_A2W10V10U10:
+ case SVGA3D_V16U16:
+ /* Typical render target formats; we should allow render target buffers to be used as textures. */
+ case SVGA3D_X8R8G8B8:
+ case SVGA3D_A8R8G8B8:
+ case SVGA3D_R5G6B5:
+ case SVGA3D_X1R5G5B5:
+ case SVGA3D_A1R5G5B5:
+ case SVGA3D_A4R4G4B4:
+ Assert(surfaceFlags & (SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_SCREENTARGET));
+ surfaceFlags |= SVGA3D_SURFACE_HINT_TEXTURE;
+ break;
+
+ case SVGA3D_LUMINANCE8:
+ case SVGA3D_LUMINANCE4_ALPHA4:
+ case SVGA3D_LUMINANCE16:
+ case SVGA3D_LUMINANCE8_ALPHA8:
+ case SVGA3D_ARGB_S10E5: /* 16-bit floating-point ARGB */
+ case SVGA3D_ARGB_S23E8: /* 32-bit floating-point ARGB */
+ case SVGA3D_A2R10G10B10:
+ case SVGA3D_ALPHA8:
+ case SVGA3D_R_S10E5:
+ case SVGA3D_R_S23E8:
+ case SVGA3D_RG_S10E5:
+ case SVGA3D_RG_S23E8:
+ case SVGA3D_G16R16:
+ case SVGA3D_A16B16G16R16:
+ case SVGA3D_UYVY:
+ case SVGA3D_YUY2:
+ case SVGA3D_NV12:
+ case SVGA3D_FORMAT_DEAD2: /* Old SVGA3D_AYUV */
+ case SVGA3D_ATI1:
+ case SVGA3D_ATI2:
+ break;
+
+ /*
+ * Any surface can be used as a buffer object, but SVGA3D_BUFFER is
+ * the most efficient format to use when creating new surfaces
+ * expressly for index or vertex data.
+ */
+ case SVGA3D_BUFFER:
+ break;
+
+ default:
+ break;
+ }
+
+ pSurface->f.surfaceFlags = surfaceFlags;
+ pSurface->format = format;
+ /* cFaces is 6 for a cubemaps and 1 otherwise. */
+ pSurface->cFaces = (uint32_t)((surfaceFlags & SVGA3D_SURFACE_CUBEMAP) ? 6 : 1);
+ pSurface->cLevels = numMipLevels;
+ pSurface->multiSampleCount = multisampleCount;
+ pSurface->autogenFilter = autogenFilter;
+ Assert(autogenFilter != SVGA3D_TEX_FILTER_FLATCUBIC);
+ Assert(autogenFilter != SVGA3D_TEX_FILTER_GAUSSIANCUBIC);
+ pSurface->paMipmapLevels = (PVMSVGA3DMIPMAPLEVEL)RTMemAllocZ(numMipLevels * pSurface->surfaceDesc.numArrayElements * sizeof(VMSVGA3DMIPMAPLEVEL));
+ AssertReturn(pSurface->paMipmapLevels, VERR_NO_MEMORY);
+
+ pSurface->cbBlock = vmsvga3dSurfaceFormatSize(format, &pSurface->cxBlock, &pSurface->cyBlock);
+ AssertReturn(pSurface->cbBlock, VERR_INVALID_PARAMETER);
+
+ /** @todo cbMemRemaining = value of SVGA_REG_MOB_MAX_SIZE */
+ uint32_t cbMemRemaining = SVGA3D_MAX_SURFACE_MEM_SIZE; /* Do not allow more than this for a surface. */
+ SVGA3dSize mipmapSize = *pMipLevel0Size;
+ int rc = VINF_SUCCESS;
+
+ for (uint32_t i = 0; i < numMipLevels; ++i)
+ {
+ for (uint32_t iArray = 0; iArray < pSurface->surfaceDesc.numArrayElements; ++iArray)
+ {
+ uint32_t const iMipmap = vmsvga3dCalcSubresource(i, iArray, numMipLevels);
+ LogFunc(("[%d] array %d mip level %d (%d,%d,%d) cbBlock=%#x block %dx%d\n",
+ iMipmap, iArray, i, mipmapSize.width, mipmapSize.height, mipmapSize.depth,
+ pSurface->cbBlock, pSurface->cxBlock, pSurface->cyBlock));
+
+ uint32_t cBlocksX;
+ uint32_t cBlocksY;
+ if (RT_LIKELY(pSurface->cxBlock == 1 && pSurface->cyBlock == 1))
+ {
+ cBlocksX = mipmapSize.width;
+ cBlocksY = mipmapSize.height;
+ }
+ else
+ {
+ cBlocksX = mipmapSize.width / pSurface->cxBlock;
+ if (mipmapSize.width % pSurface->cxBlock)
+ ++cBlocksX;
+ cBlocksY = mipmapSize.height / pSurface->cyBlock;
+ if (mipmapSize.height % pSurface->cyBlock)
+ ++cBlocksY;
+ }
+
+ AssertBreakStmt(cBlocksX > 0 && cBlocksY > 0 && mipmapSize.depth > 0, rc = VERR_INVALID_PARAMETER);
+
+ const uint32_t cMaxBlocksX = cbMemRemaining / pSurface->cbBlock;
+ AssertBreakStmt(cBlocksX < cMaxBlocksX, rc = VERR_INVALID_PARAMETER);
+
+ const uint32_t cbSurfacePitch = pSurface->cbBlock * cBlocksX;
+ LogFunc(("cbSurfacePitch=0x%x\n", cbSurfacePitch));
+
+ const uint32_t cMaxBlocksY = cbMemRemaining / cbSurfacePitch;
+ AssertBreakStmt(cBlocksY < cMaxBlocksY, rc = VERR_INVALID_PARAMETER);
+
+ const uint32_t cbSurfacePlane = cbSurfacePitch * cBlocksY;
+
+ const uint32_t cMaxDepth = cbMemRemaining / cbSurfacePlane;
+ AssertBreakStmt(mipmapSize.depth < cMaxDepth, rc = VERR_INVALID_PARAMETER);
+
+ const uint32_t cbSurface = cbSurfacePlane * mipmapSize.depth;
+
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[iMipmap];
+ pMipmapLevel->mipmapSize = mipmapSize;
+ pMipmapLevel->cBlocksX = cBlocksX;
+ pMipmapLevel->cBlocksY = cBlocksY;
+ pMipmapLevel->cBlocks = cBlocksX * cBlocksY * mipmapSize.depth;
+ pMipmapLevel->cbSurfacePitch = cbSurfacePitch;
+ pMipmapLevel->cbSurfacePlane = cbSurfacePlane;
+ pMipmapLevel->cbSurface = cbSurface;
+ pMipmapLevel->pSurfaceData = NULL;
+
+ cbMemRemaining -= cbSurface;
+ }
+
+ AssertRCBreak(rc);
+
+ mipmapSize.width >>= 1;
+ if (mipmapSize.width == 0) mipmapSize.width = 1;
+ mipmapSize.height >>= 1;
+ if (mipmapSize.height == 0) mipmapSize.height = 1;
+ mipmapSize.depth >>= 1;
+ if (mipmapSize.depth == 0) mipmapSize.depth = 1;
+ }
+
+ AssertLogRelRCReturnStmt(rc, RTMemFree(pSurface->paMipmapLevels), rc);
+
+ /* Compute the size of one array element. */
+ pSurface->surfaceDesc.cbArrayElement = 0;
+ for (uint32_t i = 0; i < pSurface->cLevels; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipLevel = &pSurface->paMipmapLevels[i];
+ pSurface->surfaceDesc.cbArrayElement += pMipLevel->cbSurface;
+ }
+
+ if (vmsvga3dIsLegacyBackend(pThisCC))
+ {
+#ifdef VMSVGA3D_DIRECT3D
+ /* pSurface->hSharedObject = NULL; */
+ /* pSurface->pSharedObjectTree = NULL; */
+ /* Translate the format and usage flags to D3D. */
+ pSurface->d3dfmtRequested = vmsvga3dSurfaceFormat2D3D(format);
+ pSurface->formatD3D = D3D9GetActualFormat(pState, pSurface->d3dfmtRequested);
+ pSurface->multiSampleTypeD3D= vmsvga3dMultipeSampleCount2D3D(multisampleCount);
+ pSurface->fUsageD3D = 0;
+ if (surfaceFlags & SVGA3D_SURFACE_HINT_DYNAMIC)
+ pSurface->fUsageD3D |= D3DUSAGE_DYNAMIC;
+ if (surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET)
+ pSurface->fUsageD3D |= D3DUSAGE_RENDERTARGET;
+ if (surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
+ pSurface->fUsageD3D |= D3DUSAGE_DEPTHSTENCIL;
+ if (surfaceFlags & SVGA3D_SURFACE_HINT_WRITEONLY)
+ pSurface->fUsageD3D |= D3DUSAGE_WRITEONLY;
+ if (surfaceFlags & SVGA3D_SURFACE_AUTOGENMIPMAPS)
+ pSurface->fUsageD3D |= D3DUSAGE_AUTOGENMIPMAP;
+ pSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_NONE;
+ /* pSurface->u.pSurface = NULL; */
+ /* pSurface->bounce.pTexture = NULL; */
+ /* pSurface->emulated.pTexture = NULL; */
+#else
+ /* pSurface->oglId.buffer = OPENGL_INVALID_ID; */
+ /* pSurface->fEmulated = false; */
+ /* pSurface->idEmulated = OPENGL_INVALID_ID; */
+ vmsvga3dSurfaceFormat2OGL(pSurface, format);
+#endif
+ }
+
+#ifdef LOG_ENABLED
+ SVGA3dSurfaceAllFlags const f = surfaceFlags;
+ LogFunc(("surface flags:%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s 0x%RX64\n",
+ (f & SVGA3D_SURFACE_CUBEMAP) ? " CUBEMAP" : "",
+ (f & SVGA3D_SURFACE_HINT_STATIC) ? " HINT_STATIC" : "",
+ (f & SVGA3D_SURFACE_HINT_DYNAMIC) ? " HINT_DYNAMIC" : "",
+ (f & SVGA3D_SURFACE_HINT_INDEXBUFFER) ? " HINT_INDEXBUFFER" : "",
+ (f & SVGA3D_SURFACE_HINT_VERTEXBUFFER) ? " HINT_VERTEXBUFFER" : "",
+ (f & SVGA3D_SURFACE_HINT_TEXTURE) ? " HINT_TEXTURE" : "",
+ (f & SVGA3D_SURFACE_HINT_RENDERTARGET) ? " HINT_RENDERTARGET" : "",
+ (f & SVGA3D_SURFACE_HINT_DEPTHSTENCIL) ? " HINT_DEPTHSTENCIL" : "",
+ (f & SVGA3D_SURFACE_HINT_WRITEONLY) ? " HINT_WRITEONLY" : "",
+ (f & SVGA3D_SURFACE_DEAD2) ? " DEAD2" : "",
+ (f & SVGA3D_SURFACE_AUTOGENMIPMAPS) ? " AUTOGENMIPMAPS" : "",
+ (f & SVGA3D_SURFACE_DEAD1) ? " DEAD1" : "",
+ (f & SVGA3D_SURFACE_MOB_PITCH) ? " MOB_PITCH" : "",
+ (f & SVGA3D_SURFACE_INACTIVE) ? " INACTIVE" : "",
+ (f & SVGA3D_SURFACE_HINT_RT_LOCKABLE) ? " HINT_RT_LOCKABLE" : "",
+ (f & SVGA3D_SURFACE_VOLUME) ? " VOLUME" : "",
+ (f & SVGA3D_SURFACE_SCREENTARGET) ? " SCREENTARGET" : "",
+ (f & SVGA3D_SURFACE_ALIGN16) ? " ALIGN16" : "",
+ (f & SVGA3D_SURFACE_1D) ? " 1D" : "",
+ (f & SVGA3D_SURFACE_ARRAY) ? " ARRAY" : "",
+ (f & SVGA3D_SURFACE_BIND_VERTEX_BUFFER) ? " BIND_VERTEX_BUFFER" : "",
+ (f & SVGA3D_SURFACE_BIND_INDEX_BUFFER) ? " BIND_INDEX_BUFFER" : "",
+ (f & SVGA3D_SURFACE_BIND_CONSTANT_BUFFER) ? " BIND_CONSTANT_BUFFER" : "",
+ (f & SVGA3D_SURFACE_BIND_SHADER_RESOURCE) ? " BIND_SHADER_RESOURCE" : "",
+ (f & SVGA3D_SURFACE_BIND_RENDER_TARGET) ? " BIND_RENDER_TARGET" : "",
+ (f & SVGA3D_SURFACE_BIND_DEPTH_STENCIL) ? " BIND_DEPTH_STENCIL" : "",
+ (f & SVGA3D_SURFACE_BIND_STREAM_OUTPUT) ? " BIND_STREAM_OUTPUT" : "",
+ (f & SVGA3D_SURFACE_STAGING_UPLOAD) ? " STAGING_UPLOAD" : "",
+ (f & SVGA3D_SURFACE_STAGING_DOWNLOAD) ? " STAGING_DOWNLOAD" : "",
+ (f & SVGA3D_SURFACE_HINT_INDIRECT_UPDATE) ? " HINT_INDIRECT_UPDATE" : "",
+ (f & SVGA3D_SURFACE_TRANSFER_FROM_BUFFER) ? " TRANSFER_FROM_BUFFER" : "",
+ (f & SVGA3D_SURFACE_RESERVED1) ? " RESERVED1" : "",
+ (f & SVGA3D_SURFACE_MULTISAMPLE) ? " MULTISAMPLE" : "",
+ (f & SVGA3D_SURFACE_BIND_UAVIEW) ? " BIND_UAVIEW" : "",
+ (f & SVGA3D_SURFACE_TRANSFER_TO_BUFFER) ? " TRANSFER_TO_BUFFER" : "",
+ (f & SVGA3D_SURFACE_BIND_LOGICOPS) ? " BIND_LOGICOPS" : "",
+ (f & SVGA3D_SURFACE_BIND_RAW_VIEWS) ? " BIND_RAW_VIEWS" : "",
+ (f & SVGA3D_SURFACE_BUFFER_STRUCTURED) ? " BUFFER_STRUCTURED" : "",
+ (f & SVGA3D_SURFACE_DRAWINDIRECT_ARGS) ? " DRAWINDIRECT_ARGS" : "",
+ (f & SVGA3D_SURFACE_RESOURCE_CLAMP) ? " RESOURCE_CLAMP" : "",
+ (f & SVGA3D_SURFACE_FLAG_MAX) ? " FLAG_MAX" : "",
+ f & ~(SVGA3D_SURFACE_FLAG_MAX - 1ULL)
+ ));
+#endif
+
+ Assert(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface));
+
+ if (fAllocMipLevels)
+ {
+ rc = vmsvga3dSurfaceAllocMipLevels(pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ pSurface->id = sid;
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Implements the SVGA_3D_CMD_SURFACE_DESTROY command (fifo).
+ *
+ * @returns VBox status code (currently ignored).
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param sid The ID of the surface to destroy.
+ */
+int vmsvga3dSurfaceDestroy(PVGASTATECC pThisCC, uint32_t sid)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ LogFunc(("sid=%u\n", sid));
+
+ /* Check all contexts if this surface is used as a render target or active texture. */
+ for (uint32_t cid = 0; cid < pState->cContexts; cid++)
+ {
+ PVMSVGA3DCONTEXT pContext = pState->papContexts[cid];
+ if (pContext->id == cid)
+ {
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->aSidActiveTextures); ++i)
+ if (pContext->aSidActiveTextures[i] == sid)
+ pContext->aSidActiveTextures[i] = SVGA3D_INVALID_ID;
+ for (uint32_t i = 0; i < RT_ELEMENTS(pContext->state.aRenderTargets); ++i)
+ if (pContext->state.aRenderTargets[i] == sid)
+ pContext->state.aRenderTargets[i] = SVGA3D_INVALID_ID;
+ }
+ }
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ if (pSvgaR3State->pFuncs3D)
+ pSvgaR3State->pFuncs3D->pfnSurfaceDestroy(pThisCC, true, pSurface);
+
+ if (pSurface->paMipmapLevels)
+ {
+ vmsvga3dSurfaceFreeMipLevels(pSurface);
+ RTMemFree(pSurface->paMipmapLevels);
+ }
+
+ memset(pSurface, 0, sizeof(*pSurface));
+ pSurface->id = SVGA3D_INVALID_ID;
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Implements the SVGA_3D_CMD_SURFACE_STRETCHBLT command (fifo).
+ *
+ * @returns VBox status code (currently ignored).
+ * @param pThis The shared VGA/VMSVGA state.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param pDstSfcImg
+ * @param pDstBox
+ * @param pSrcSfcImg
+ * @param pSrcBox
+ * @param enmMode
+ */
+int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pDstSfcImg, SVGA3dBox const *pDstBox,
+ SVGA3dSurfaceImageId const *pSrcSfcImg, SVGA3dBox const *pSrcBox, SVGA3dStretchBltMode enmMode)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ int rc;
+
+ uint32_t const sidSrc = pSrcSfcImg->sid;
+ PVMSVGA3DSURFACE pSrcSurface;
+ rc = vmsvga3dSurfaceFromSid(pState, sidSrc, &pSrcSurface);
+ AssertRCReturn(rc, rc);
+
+ uint32_t const sidDst = pDstSfcImg->sid;
+ PVMSVGA3DSURFACE pDstSurface;
+ rc = vmsvga3dSurfaceFromSid(pState, sidDst, &pDstSurface);
+ AssertRCReturn(rc, rc);
+
+ AssertReturn(pSrcSfcImg->face < pSrcSurface->cFaces, VERR_INVALID_PARAMETER);
+ AssertReturn(pSrcSfcImg->mipmap < pSrcSurface->cLevels, VERR_INVALID_PARAMETER);
+ AssertReturn(pDstSfcImg->face < pDstSurface->cFaces, VERR_INVALID_PARAMETER);
+ AssertReturn(pDstSfcImg->mipmap < pDstSurface->cLevels, VERR_INVALID_PARAMETER);
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+
+ PVMSVGA3DCONTEXT pContext;
+#ifdef VMSVGA3D_OPENGL
+ LogFunc(("src sid=%u (%d,%d)(%d,%d) dest sid=%u (%d,%d)(%d,%d) mode=%x\n",
+ sidSrc, pSrcBox->x, pSrcBox->y, pSrcBox->x + pSrcBox->w, pSrcBox->y + pSrcBox->h,
+ sidDst, pDstBox->x, pDstBox->y, pDstBox->x + pDstBox->w, pDstBox->y + pDstBox->h, enmMode));
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+#else
+ LogFunc(("src sid=%u cid=%u (%d,%d)(%d,%d) dest sid=%u cid=%u (%d,%d)(%d,%d) mode=%x\n",
+ sidSrc, pSrcSurface->idAssociatedContext, pSrcBox->x, pSrcBox->y, pSrcBox->x + pSrcBox->w, pSrcBox->y + pSrcBox->h,
+ sidDst, pDstSurface->idAssociatedContext, pDstBox->x, pDstBox->y, pDstBox->x + pDstBox->w, pDstBox->y + pDstBox->h, enmMode));
+
+ uint32_t cid = pDstSurface->idAssociatedContext;
+ if (cid == SVGA3D_INVALID_ID)
+ cid = pSrcSurface->idAssociatedContext;
+
+ /* At least one of surfaces must be in hardware. */
+ AssertReturn(cid != SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
+
+ rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+#endif
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSrcSurface))
+ {
+ /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
+ LogFunc(("unknown src sid=%u type=%d format=%d -> create texture\n", sidSrc, pSrcSurface->f.s.surface1Flags, pSrcSurface->format));
+ rc = pSvgaR3State->pFuncs3D->pfnCreateTexture(pThisCC, pContext, pContext->id, pSrcSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pDstSurface))
+ {
+ /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
+ LogFunc(("unknown dest sid=%u type=%d format=%d -> create texture\n", sidDst, pDstSurface->f.s.surface1Flags, pDstSurface->format));
+ rc = pSvgaR3State->pFuncs3D->pfnCreateTexture(pThisCC, pContext, pContext->id, pDstSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ PVMSVGA3DMIPMAPLEVEL pSrcMipmapLevel;
+ rc = vmsvga3dMipmapLevel(pSrcSurface, pSrcSfcImg->face, pSrcSfcImg->mipmap, &pSrcMipmapLevel);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DMIPMAPLEVEL pDstMipmapLevel;
+ rc = vmsvga3dMipmapLevel(pDstSurface, pDstSfcImg->face, pDstSfcImg->mipmap, &pDstMipmapLevel);
+ AssertRCReturn(rc, rc);
+
+ SVGA3dBox clipSrcBox = *pSrcBox;
+ SVGA3dBox clipDstBox = *pDstBox;
+ vmsvgaR3ClipBox(&pSrcMipmapLevel->mipmapSize, &clipSrcBox);
+ vmsvgaR3ClipBox(&pDstMipmapLevel->mipmapSize, &clipDstBox);
+
+ return pSvgaR3State->pFuncs3D->pfnSurfaceStretchBlt(pThis, pState,
+ pDstSurface, pDstSfcImg->face, pDstSfcImg->mipmap, &clipDstBox,
+ pSrcSurface, pSrcSfcImg->face, pSrcSfcImg->mipmap, &clipSrcBox,
+ enmMode, pContext);
+}
+
+/**
+ * Implements the SVGA_3D_CMD_SURFACE_DMA command (fifo).
+ *
+ * @returns VBox status code (currently ignored).
+ * @param pThis The shared VGA/VMSVGA instance data.
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param guest .
+ * @param host .
+ * @param transfer .
+ * @param cCopyBoxes .
+ * @param paBoxes .
+ */
+int vmsvga3dSurfaceDMA(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAGuestImage guest, SVGA3dSurfaceImageId host,
+ SVGA3dTransferType transfer, uint32_t cCopyBoxes, SVGA3dCopyBox *paBoxes)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, host.sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ LogFunc(("%sguestptr gmr=%x offset=%x pitch=%x host sid=%u face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n",
+ (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE) ? "TEXTURE " : "",
+ guest.ptr.gmrId, guest.ptr.offset, guest.pitch,
+ host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, host.face, host.mipmap, &pMipLevel);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+
+ PVMSVGA3DCONTEXT pContext = NULL;
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ /*
+ * Not realized in host hardware/library yet, we have to work with
+ * the copy of the data we've got in VMSVGA3DMIMAPLEVEL::pSurfaceData.
+ */
+ if (!pMipLevel->pSurfaceData)
+ {
+ rc = vmsvga3dSurfaceAllocMipLevels(pSurface);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ else if (vmsvga3dIsLegacyBackend(pThisCC))
+ {
+#ifdef VMSVGA3D_DIRECT3D
+ /* Flush the drawing pipeline for this surface as it could be used in a shared context. */
+ vmsvga3dSurfaceFlush(pSurface);
+#else /* VMSVGA3D_OPENGL */
+ pContext = &pState->SharedCtx;
+ VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
+#endif
+ }
+
+ /* SVGA_3D_CMD_SURFACE_DMA:
+ * "define the 'source' in each copyBox as the guest image and the
+ * 'destination' as the host image, regardless of transfer direction."
+ */
+ for (uint32_t i = 0; i < cCopyBoxes; ++i)
+ {
+ Log(("Copy box (%s) %d (%d,%d,%d)(%d,%d,%d) dest (%d,%d)\n",
+ VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface) ? "hw" : "mem",
+ i, paBoxes[i].srcx, paBoxes[i].srcy, paBoxes[i].srcz, paBoxes[i].w, paBoxes[i].h, paBoxes[i].d, paBoxes[i].x, paBoxes[i].y));
+
+ /* Apparently we're supposed to clip it (gmr test sample) */
+
+ /* The copybox's "dest" is coords in the host surface. Verify them against the surface's mipmap size. */
+ SVGA3dBox hostBox;
+ hostBox.x = paBoxes[i].x;
+ hostBox.y = paBoxes[i].y;
+ hostBox.z = paBoxes[i].z;
+ hostBox.w = paBoxes[i].w;
+ hostBox.h = paBoxes[i].h;
+ hostBox.d = paBoxes[i].d;
+ vmsvgaR3ClipBox(&pMipLevel->mipmapSize, &hostBox);
+
+ if ( !hostBox.w
+ || !hostBox.h
+ || !hostBox.d)
+ {
+ Log(("Skip empty box\n"));
+ continue;
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* Adjust the guest, i.e. "src", point.
+ * Do not try to verify them here because vmsvgaR3GmrTransfer takes care of this.
+ */
+ uint32_t const srcx = paBoxes[i].srcx + (hostBox.x - paBoxes[i].x);
+ uint32_t const srcy = paBoxes[i].srcy + (hostBox.y - paBoxes[i].y);
+ uint32_t const srcz = paBoxes[i].srcz + (hostBox.z - paBoxes[i].z);
+
+ /* Calculate offsets of the image blocks for the transfer. */
+ uint32_t u32HostBlockX;
+ uint32_t u32HostBlockY;
+ uint32_t u32GuestBlockX;
+ uint32_t u32GuestBlockY;
+ uint32_t cBlocksX;
+ uint32_t cBlocksY;
+ if (RT_LIKELY(pSurface->cxBlock == 1 && pSurface->cyBlock == 1))
+ {
+ u32HostBlockX = hostBox.x;
+ u32HostBlockY = hostBox.y;
+
+ u32GuestBlockX = srcx;
+ u32GuestBlockY = srcy;
+
+ cBlocksX = hostBox.w;
+ cBlocksY = hostBox.h;
+ }
+ else
+ {
+ /* Pixels to blocks. */
+ u32HostBlockX = hostBox.x / pSurface->cxBlock;
+ u32HostBlockY = hostBox.y / pSurface->cyBlock;
+ Assert(u32HostBlockX * pSurface->cxBlock == hostBox.x);
+ Assert(u32HostBlockY * pSurface->cyBlock == hostBox.y);
+
+ u32GuestBlockX = srcx / pSurface->cxBlock;
+ u32GuestBlockY = srcy / pSurface->cyBlock;
+ Assert(u32GuestBlockX * pSurface->cxBlock == srcx);
+ Assert(u32GuestBlockY * pSurface->cyBlock == srcy);
+
+ cBlocksX = (hostBox.w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ cBlocksY = (hostBox.h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+ }
+
+ uint32_t cbGuestPitch = guest.pitch;
+ if (cbGuestPitch == 0)
+ {
+ /* Host must "assume image is tightly packed". Our surfaces are. */
+ cbGuestPitch = pMipLevel->cbSurfacePitch;
+ }
+ else
+ {
+ /* vmsvgaR3GmrTransfer will verify the value, just check it is sane. */
+ AssertReturn(cbGuestPitch <= SVGA3D_MAX_SURFACE_MEM_SIZE, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ }
+
+ /* srcx, srcy and srcz values are used to calculate the guest offset.
+ * The offset will be verified by vmsvgaR3GmrTransfer, so just check for overflows here.
+ */
+ AssertReturn(srcz < UINT32_MAX / pMipLevel->mipmapSize.height / cbGuestPitch, VERR_INVALID_PARAMETER);
+ AssertReturn(u32GuestBlockY < UINT32_MAX / cbGuestPitch, VERR_INVALID_PARAMETER);
+ AssertReturn(u32GuestBlockX < UINT32_MAX / pSurface->cbBlock, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ if ( !VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface)
+ || VMSVGA3DSURFACE_NEEDS_DATA(pSurface))
+ {
+ uint64_t uGuestOffset = u32GuestBlockX * pSurface->cbBlock +
+ u32GuestBlockY * cbGuestPitch +
+ srcz * pMipLevel->mipmapSize.height * cbGuestPitch;
+ AssertReturn(uGuestOffset < UINT32_MAX, VERR_INVALID_PARAMETER);
+
+ /* vmsvga3dSurfaceDefine verifies the surface dimensions and clipBox is within them. */
+ uint32_t uHostOffset = u32HostBlockX * pSurface->cbBlock +
+ u32HostBlockY * pMipLevel->cbSurfacePitch +
+ hostBox.z * pMipLevel->cbSurfacePlane;
+ AssertReturn(uHostOffset < pMipLevel->cbSurface, VERR_INTERNAL_ERROR);
+
+ for (uint32_t z = 0; z < hostBox.d; ++z)
+ {
+ rc = vmsvgaR3GmrTransfer(pThis,
+ pThisCC,
+ transfer,
+ (uint8_t *)pMipLevel->pSurfaceData,
+ pMipLevel->cbSurface,
+ uHostOffset,
+ (int32_t)pMipLevel->cbSurfacePitch,
+ guest.ptr,
+ (uint32_t)uGuestOffset,
+ cbGuestPitch,
+ cBlocksX * pSurface->cbBlock,
+ cBlocksY);
+ AssertRC(rc);
+
+ Log4(("first line [z=%d] (updated at offset 0x%x):\n%.*Rhxd\n",
+ z, uHostOffset, pMipLevel->cbSurfacePitch, pMipLevel->pSurfaceData));
+
+ uHostOffset += pMipLevel->cbSurfacePlane;
+ uGuestOffset += pMipLevel->mipmapSize.height * cbGuestPitch;
+ AssertReturn(uGuestOffset < UINT32_MAX, VERR_INVALID_PARAMETER);
+ }
+ }
+
+ if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ SVGA3dCopyBox clipBox;
+ clipBox.x = hostBox.x;
+ clipBox.y = hostBox.y;
+ clipBox.z = hostBox.z;
+ clipBox.w = hostBox.w;
+ clipBox.h = hostBox.h;
+ clipBox.d = hostBox.d;
+ clipBox.srcx = srcx;
+ clipBox.srcy = srcy;
+ clipBox.srcz = srcz;
+ rc = pSvgaR3State->pFuncs3D->pfnSurfaceDMACopyBox(pThis, pThisCC, pState, pSurface, pMipLevel, host.face, host.mipmap,
+ guest.ptr, cbGuestPitch, transfer,
+ &clipBox, pContext, rc, i);
+ AssertRC(rc);
+ }
+ }
+
+ if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ pMipLevel->fDirty = true;
+ pSurface->fDirty = true;
+ }
+
+ return rc;
+}
+
+static int vmsvga3dQueryWriteResult(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAGuestPtr const *pGuestResult,
+ SVGA3dQueryState enmState, uint32_t u32Result)
+{
+ SVGA3dQueryResult queryResult;
+ queryResult.totalSize = sizeof(queryResult); /* Set by guest before query is ended. */
+ queryResult.state = enmState; /* Set by host or guest. See SVGA3dQueryState. */
+ queryResult.result32 = u32Result;
+
+ int rc = vmsvgaR3GmrTransfer(pThis, pThisCC, SVGA3D_READ_HOST_VRAM,
+ (uint8_t *)&queryResult, sizeof(queryResult), 0, sizeof(queryResult),
+ *pGuestResult, 0, sizeof(queryResult), sizeof(queryResult), 1);
+ AssertRC(rc);
+ return rc;
+}
+
+/* Used with saved state. */
+int vmsvga3dQueryCreate(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u type=%d\n", cid, type));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+ {
+ VMSVGA3DQUERY *p = &pContext->occlusion;
+ if (!VMSVGA3DQUERY_EXISTS(p))
+ {
+ rc = pSvgaR3State->pFuncsVGPU9->pfnOcclusionQueryCreate(pThisCC, pContext);
+ AssertRCReturn(rc, rc);
+ }
+
+ return VINF_SUCCESS;
+ }
+
+ /* Nothing else for VGPU9. */
+ AssertFailedReturn(VERR_NOT_IMPLEMENTED);
+}
+
+int vmsvga3dQueryBegin(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u type=%d\n", cid, type));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+ {
+ VMSVGA3DQUERY *p = &pContext->occlusion;
+ if (!VMSVGA3DQUERY_EXISTS(p))
+ {
+ /* Lazy creation of the query object. */
+ rc = pSvgaR3State->pFuncsVGPU9->pfnOcclusionQueryCreate(pThisCC, pContext);
+ AssertRCReturn(rc, rc);
+ }
+
+ rc = pSvgaR3State->pFuncsVGPU9->pfnOcclusionQueryBegin(pThisCC, pContext);
+ AssertRCReturn(rc, rc);
+
+ p->enmQueryState = VMSVGA3DQUERYSTATE_BUILDING;
+ p->u32QueryResult = 0;
+
+ return VINF_SUCCESS;
+ }
+
+ /* Nothing else for VGPU9. */
+ AssertFailedReturn(VERR_NOT_IMPLEMENTED);
+}
+
+int vmsvga3dQueryEnd(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u type=%d\n", cid, type));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+ {
+ VMSVGA3DQUERY *p = &pContext->occlusion;
+ Assert(p->enmQueryState == VMSVGA3DQUERYSTATE_BUILDING);
+ AssertMsgReturn(VMSVGA3DQUERY_EXISTS(p), ("Query is NULL\n"), VERR_INTERNAL_ERROR);
+
+ rc = pSvgaR3State->pFuncsVGPU9->pfnOcclusionQueryEnd(pThisCC, pContext);
+ AssertRCReturn(rc, rc);
+
+ p->enmQueryState = VMSVGA3DQUERYSTATE_ISSUED;
+ return VINF_SUCCESS;
+ }
+
+ /* Nothing else for VGPU9. */
+ AssertFailedReturn(VERR_NOT_IMPLEMENTED);
+}
+
+int vmsvga3dQueryWait(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type, PVGASTATE pThis, SVGAGuestPtr const *pGuestResult)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ LogFunc(("cid=%u type=%d guestResult GMR%d:0x%x\n", cid, type, pGuestResult->gmrId, pGuestResult->offset));
+
+ PVMSVGA3DCONTEXT pContext;
+ int rc = vmsvga3dContextFromCid(pState, cid, &pContext);
+ AssertRCReturn(rc, rc);
+
+ if (type == SVGA3D_QUERYTYPE_OCCLUSION)
+ {
+ VMSVGA3DQUERY *p = &pContext->occlusion;
+ if (VMSVGA3DQUERY_EXISTS(p))
+ {
+ if (p->enmQueryState == VMSVGA3DQUERYSTATE_ISSUED)
+ {
+ /* Only if not already in SIGNALED state,
+ * i.e. not a second read from the guest or after restoring saved state.
+ */
+ uint32_t u32Pixels = 0;
+ rc = pSvgaR3State->pFuncsVGPU9->pfnOcclusionQueryGetData(pThisCC, pContext, &u32Pixels);
+ if (RT_SUCCESS(rc))
+ {
+ p->enmQueryState = VMSVGA3DQUERYSTATE_SIGNALED;
+ p->u32QueryResult += u32Pixels; /* += because it might contain partial result from saved state. */
+ }
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ /* pGuestResult can be NULL when saving the state. */
+ if (pGuestResult)
+ {
+ /* Return data to the guest. */
+ vmsvga3dQueryWriteResult(pThis, pThisCC, pGuestResult, SVGA3D_QUERYSTATE_SUCCEEDED, p->u32QueryResult);
+ }
+ return VINF_SUCCESS;
+ }
+ }
+ else
+ {
+ AssertMsgFailed(("GetData Query is NULL\n"));
+ }
+
+ rc = VERR_INTERNAL_ERROR;
+ }
+ else
+ {
+ rc = VERR_NOT_IMPLEMENTED;
+ }
+
+ if (pGuestResult)
+ vmsvga3dQueryWriteResult(pThis, pThisCC, pGuestResult, SVGA3D_QUERYSTATE_FAILED, 0);
+ AssertFailedReturn(rc);
+}
+
+int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t idDstScreen, SVGASignedRect destRect,
+ SVGA3dSurfaceImageId srcImage, SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *pRect)
+{
+ /* Requires SVGA_FIFO_CAP_SCREEN_OBJECT support */
+ LogFunc(("dest=%d (%d,%d)(%d,%d) sid=%u (face=%d, mipmap=%d) (%d,%d)(%d,%d) cRects=%d\n",
+ idDstScreen, destRect.left, destRect.top, destRect.right, destRect.bottom, srcImage.sid, srcImage.face, srcImage.mipmap,
+ srcRect.left, srcRect.top, srcRect.right, srcRect.bottom, cRects));
+ for (uint32_t i = 0; i < cRects; i++)
+ {
+ LogFunc(("clipping rect %d (%d,%d)(%d,%d)\n", i, pRect[i].left, pRect[i].top, pRect[i].right, pRect[i].bottom));
+ }
+
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, idDstScreen);
+ AssertReturn(pScreen, VERR_INTERNAL_ERROR);
+
+ /* vmwgfx driver does not always initialize srcImage.mipmap and srcImage.face. They are assumed to be zero. */
+ SVGA3dSurfaceImageId src;
+ src.sid = srcImage.sid;
+ src.mipmap = 0;
+ src.face = 0;
+
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ if (pScreen->pHwScreen)
+ {
+ /* Use the backend accelerated method, if available. */
+ if (pSvgaR3State->pFuncs3D)
+ {
+ int rc = pSvgaR3State->pFuncs3D->pfnSurfaceBlitToScreen(pThisCC, pScreen, destRect, src, srcRect, cRects, pRect);
+ if (rc == VINF_SUCCESS)
+ {
+ return VINF_SUCCESS;
+ }
+ }
+ }
+
+ if (pSvgaR3State->pFuncsMap)
+ return vmsvga3dScreenUpdate(pThisCC, idDstScreen, destRect, src, srcRect, cRects, pRect);
+
+ /** @todo scaling */
+ AssertReturn(destRect.right - destRect.left == srcRect.right - srcRect.left && destRect.bottom - destRect.top == srcRect.bottom - srcRect.top, VERR_INVALID_PARAMETER);
+
+ SVGA3dCopyBox box;
+ SVGAGuestImage dest;
+
+ box.srcz = 0;
+ box.z = 0;
+ box.d = 1;
+
+ dest.ptr.gmrId = SVGA_GMR_FRAMEBUFFER;
+ dest.ptr.offset = pScreen->offVRAM;
+ dest.pitch = pScreen->cbPitch;
+
+ if (cRects == 0)
+ {
+ /* easy case; no clipping */
+
+ /* SVGA_3D_CMD_SURFACE_DMA:
+ * 'define the "source" in each copyBox as the guest image and the
+ * "destination" as the host image, regardless of transfer direction.'
+ *
+ * Since the BlitToScreen operation transfers from a host surface to the guest VRAM,
+ * it must set the copyBox "source" to the guest destination coords and
+ * the copyBox "destination" to the host surface source coords.
+ */
+ /* Host image. */
+ box.x = srcRect.left;
+ box.y = srcRect.top;
+ box.w = srcRect.right - srcRect.left;
+ box.h = srcRect.bottom - srcRect.top;
+ /* Guest image. */
+ box.srcx = destRect.left;
+ box.srcy = destRect.top;
+
+ int rc = vmsvga3dSurfaceDMA(pThis, pThisCC, dest, src, SVGA3D_READ_HOST_VRAM, 1, &box);
+ AssertRCReturn(rc, rc);
+
+ /* Update the guest image, which is at box.src. */
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, box.srcx, box.srcy, box.w, box.h);
+ }
+ else
+ {
+ /** @todo merge into one SurfaceDMA call */
+ for (uint32_t i = 0; i < cRects; i++)
+ {
+ /* "The clip rectangle coordinates are measured
+ * relative to the top-left corner of destRect."
+ * Therefore they are relative to the top-left corner of srcRect as well.
+ */
+
+ /* Host image. See 'SVGA_3D_CMD_SURFACE_DMA:' comment in the 'if' branch. */
+ box.x = srcRect.left + pRect[i].left;
+ box.y = srcRect.top + pRect[i].top;
+ box.w = pRect[i].right - pRect[i].left;
+ box.h = pRect[i].bottom - pRect[i].top;
+ /* Guest image. The target screen memory is currently in the guest VRAM. */
+ box.srcx = destRect.left + pRect[i].left;
+ box.srcy = destRect.top + pRect[i].top;
+
+ int rc = vmsvga3dSurfaceDMA(pThis, pThisCC, dest, src, SVGA3D_READ_HOST_VRAM, 1, &box);
+ AssertRCReturn(rc, rc);
+
+ /* Update the guest image, which is at box.src. */
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, box.srcx, box.srcy, box.w, box.h);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dScreenUpdate(PVGASTATECC pThisCC, uint32_t idDstScreen, SVGASignedRect const &dstRect,
+ SVGA3dSurfaceImageId const &srcImage, SVGASignedRect const &srcRect,
+ uint32_t cDstClipRects, SVGASignedRect *paDstClipRect)
+{
+ //DEBUG_BREAKPOINT_TEST();
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+
+#ifdef LOG_ENABLED
+ LogFunc(("[%u] %d,%d %d,%d (%dx%d) -> %d,%d %d,%d (%dx%d), %u clip rects\n",
+ idDstScreen, srcRect.left, srcRect.top, srcRect.right, srcRect.bottom,
+ srcRect.right - srcRect.left, srcRect.bottom - srcRect.top,
+ dstRect.left, dstRect.top, dstRect.right, dstRect.bottom,
+ dstRect.right - dstRect.left, dstRect.bottom - dstRect.top, cDstClipRects));
+ for (uint32_t i = 0; i < cDstClipRects; i++)
+ {
+ LogFunc((" [%u] %d,%d %d,%d (%dx%d)\n",
+ i, paDstClipRect[i].left, paDstClipRect[i].top, paDstClipRect[i].right, paDstClipRect[i].bottom,
+ paDstClipRect[i].right - paDstClipRect[i].left, paDstClipRect[i].bottom - paDstClipRect[i].top));
+ }
+#endif
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, srcImage.sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ /* Update the screen from a surface. */
+ ASSERT_GUEST_RETURN(idDstScreen < RT_ELEMENTS(pSvgaR3State->aScreens), VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[idDstScreen];
+
+ if ( srcRect.right <= srcRect.left
+ || srcRect.bottom <= srcRect.top)
+ return VINF_SUCCESS; /* Empty src rect. */
+
+ if ( dstRect.right <= dstRect.left
+ || dstRect.bottom <= dstRect.top)
+ return VINF_SUCCESS; /* Empty dst rect. */
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ ASSERT_GUEST_RETURN( srcRect.right - srcRect.left == dstRect.right - dstRect.left
+ && srcRect.bottom - srcRect.top == dstRect.bottom - dstRect.top,
+ VERR_INVALID_PARAMETER); /* Stretch is not supported. */
+
+ /* Destination box should be within the screen rectangle. */
+ SVGA3dBox dstBox;
+ dstBox.x = dstRect.left;
+ dstBox.y = dstRect.top;
+ dstBox.z = 0;
+ dstBox.w = dstRect.right - dstRect.left;
+ dstBox.h = dstRect.bottom - dstRect.top;
+ dstBox.d = 1;
+
+ SVGA3dSize dstBound;
+ dstBound.width = pScreen->cWidth;
+ dstBound.height = pScreen->cHeight;
+ dstBound.depth = 1;
+
+ vmsvgaR3ClipBox(&dstBound, &dstBox);
+ ASSERT_GUEST_RETURN(dstBox.w > 0 && dstBox.h > 0, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /* All dst clip rects will be clipped by the dst box because
+ * "The clip rectangle coordinates are measured relative to the top-left corner of destRect."
+ * Therefore they are relative to the top-left corner of srcRect as well.
+ */
+ dstBound.width = dstBox.w;
+ dstBound.height = dstBox.h;
+ dstBound.depth = 1;
+
+ SVGA3dBox srcBox; /* SurfaceMap will clip the box as necessary (srcMap.box). */
+ srcBox.x = srcRect.left;
+ srcBox.y = srcRect.top;
+ srcBox.z = 0;
+ srcBox.w = srcRect.right - srcRect.left;
+ srcBox.h = srcRect.bottom - srcRect.top;
+ srcBox.d = 1;
+
+ VMSVGA3D_MAPPED_SURFACE srcMap;
+ rc = vmsvga3dSurfaceMap(pThisCC, &srcImage, &srcBox, VMSVGA3D_SURFACE_MAP_READ, &srcMap);
+ if (RT_SUCCESS(rc))
+ {
+ uint8_t const *pu8Src = (uint8_t *)srcMap.pvData;
+
+ uint32_t const cbDst = pScreen->cHeight * pScreen->cbPitch;
+ uint8_t *pu8Dst;
+ if (pScreen->pvScreenBitmap)
+ pu8Dst = (uint8_t *)pScreen->pvScreenBitmap;
+ else
+ pu8Dst = (uint8_t *)pThisCC->pbVRam + pScreen->offVRAM;
+
+ SVGASignedRect dstClipRect;
+ if (cDstClipRects == 0)
+ {
+ /* Entire source rect "relative to the top-left corner of destRect." */
+ dstClipRect.left = 0;
+ dstClipRect.top = 0;
+ dstClipRect.right = dstBox.w;
+ dstClipRect.bottom = dstBox.h;
+
+ cDstClipRects = 1;
+ paDstClipRect = &dstClipRect;
+ }
+
+ for (uint32_t i = 0; i < cDstClipRects; i++)
+ {
+ SVGASignedRect const *pDstClipRect = &paDstClipRect[i];
+
+ SVGA3dBox box;
+ box.x = pDstClipRect->left;
+ box.y = pDstClipRect->top;
+ box.z = 0;
+ box.w = pDstClipRect->right - pDstClipRect->left;
+ box.h = pDstClipRect->bottom - pDstClipRect->top;
+ box.d = 1;
+
+ vmsvgaR3ClipBox(&dstBound, &box);
+ ASSERT_GUEST_CONTINUE(box.w > 0 && box.h > 0);
+
+ /* 'pu8Src' points to the mapped 'srcRect'. Take the clipping box into account. */
+ uint8_t const *pu8SrcBox = pu8Src
+ + ((box.x + pSurface->cxBlock - 1) / pSurface->cxBlock) * pSurface->cxBlock * pSurface->cbBlock
+ + ((box.y + pSurface->cyBlock - 1) / pSurface->cyBlock) * pSurface->cyBlock * srcMap.cbRowPitch;
+
+ /* The 'box' is actually in the destination coordinates relative to the top-left corner of destRect.
+ * Therefore it is relative to the top-left corner of srcRect as well.
+ */
+ box.x += srcBox.x;
+ box.y += srcBox.y;
+
+ VMSGA3D_BOX_DIMENSIONS srcDims;
+ rc = vmsvga3dGetBoxDimensions(pThisCC, &srcImage, &box, &srcDims);
+ if (RT_SUCCESS(rc))
+ {
+ AssertContinue(srcDims.cyBlocks > 0);
+
+ ASSERT_GUEST_BREAK( srcDims.offBox <= cbDst
+ && pScreen->cbPitch * (srcDims.cyBlocks - 1) + srcDims.cbRow <= cbDst - srcDims.offBox);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ uint8_t *pu8DstBox = pu8Dst + srcDims.offBox;
+
+ if ( pSurface->format == SVGA3D_R8G8B8A8_UNORM
+ || pSurface->format == SVGA3D_R8G8B8A8_UNORM_SRGB)
+ {
+ for (uint32_t iRow = 0; iRow < srcDims.cyBlocks; ++iRow)
+ {
+ for (uint32_t x = 0; x < box.w * 4; x += 4) /* 'x' is a byte index. */
+ {
+ pu8DstBox[x ] = pu8SrcBox[x + 2];
+ pu8DstBox[x + 1] = pu8SrcBox[x + 1];
+ pu8DstBox[x + 2] = pu8SrcBox[x ];
+ pu8DstBox[x + 3] = pu8SrcBox[x + 3];
+ }
+
+ pu8SrcBox += srcMap.cbRowPitch;
+ pu8DstBox += pScreen->cbPitch;
+ }
+ }
+ else
+ {
+ for (uint32_t iRow = 0; iRow < srcDims.cyBlocks; ++iRow)
+ {
+ memcpy(pu8DstBox, pu8SrcBox, srcDims.cbRow);
+
+ pu8SrcBox += srcMap.cbRowPitch;
+ pu8DstBox += pScreen->cbPitch;
+ }
+ }
+ }
+ }
+
+ vmsvga3dSurfaceUnmap(pThisCC, &srcImage, &srcMap, /* fWritten = */ false);
+
+ vmsvgaR3UpdateScreen(pThisCC, pScreen, dstBox.x, dstBox.y, dstBox.w, dstBox.h);
+ }
+
+ return rc;
+}
+
+int vmsvga3dCommandPresent(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t sid, uint32_t cRects, SVGA3dCopyRect *pRect)
+{
+ /* Deprecated according to svga3d_reg.h. */
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_NO_MEMORY);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ /** @todo Detect screen from coords? Or split rect to screens? */
+ VMSVGASCREENOBJECT *pScreen = vmsvgaR3GetScreenObject(pThisCC, 0);
+ AssertReturn(pScreen, VERR_INTERNAL_ERROR);
+
+ /* If there are no recangles specified, just grab a screenful. */
+ SVGA3dCopyRect DummyRect;
+ if (cRects != 0)
+ { /* likely */ }
+ else
+ {
+ /** @todo Find the usecase for this or check what the original device does.
+ * The original code was doing some scaling based on the surface
+ * size... */
+ AssertMsgFailed(("No rects to present. Who is doing that and what do they actually expect?\n"));
+ DummyRect.x = DummyRect.srcx = 0;
+ DummyRect.y = DummyRect.srcy = 0;
+ DummyRect.w = pScreen->cWidth;
+ DummyRect.h = pScreen->cHeight;
+ cRects = 1;
+ pRect = &DummyRect;
+ }
+
+ uint32_t i;
+ for (i = 0; i < cRects; ++i)
+ {
+ uint32_t idDstScreen = 0; /** @todo Use virtual coords: SVGA_ID_INVALID. */
+ SVGASignedRect destRect;
+ destRect.left = pRect[i].x;
+ destRect.top = pRect[i].y;
+ destRect.right = pRect[i].x + pRect[i].w;
+ destRect.bottom = pRect[i].y + pRect[i].h;
+
+ SVGA3dSurfaceImageId src;
+ src.sid = sid;
+ src.face = 0;
+ src.mipmap = 0;
+
+ SVGASignedRect srcRect;
+ srcRect.left = pRect[i].srcx;
+ srcRect.top = pRect[i].srcy;
+ srcRect.right = pRect[i].srcx + pRect[i].w;
+ srcRect.bottom = pRect[i].srcy + pRect[i].h;
+
+ /* Entire rect. */
+ rc = vmsvga3dSurfaceBlitToScreen(pThis, pThisCC, idDstScreen, destRect, src, srcRect, 0, NULL);
+ AssertRCReturn(rc, rc);
+ }
+
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+
+ if (pScreen->pHwScreen)
+ {
+ pSvgaR3State->pFuncs3D->pfnDestroyScreen(pThisCC, pScreen);
+ }
+
+ int rc = pSvgaR3State->pFuncs3D->pfnDefineScreen(pThis, pThisCC, pScreen);
+ if (RT_SUCCESS(rc))
+ {
+ LogRelMax(1, ("VMSVGA: using accelerated graphics output\n"));
+ }
+ return rc;
+}
+
+int vmsvga3dDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+
+ return pSvgaR3State->pFuncs3D->pfnDestroyScreen(pThisCC, pScreen);
+}
+
+int vmsvga3dSurfaceInvalidate(PVGASTATECC pThisCC, uint32_t sid, uint32_t face, uint32_t mipmap)
+{
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturn(pState, VERR_INVALID_STATE);
+
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (face == SVGA_ID_INVALID && mipmap == SVGA_ID_INVALID)
+ {
+ /* This is a notification that "All images can be lost", i.e. the backend surface is not needed anymore. */
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ if (pSvgaR3State->pFuncs3D)
+ pSvgaR3State->pFuncs3D->pfnSurfaceDestroy(pThisCC, false, pSurface);
+
+ for (uint32_t i = 0; i < pSurface->cLevels * pSurface->surfaceDesc.numArrayElements; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[i];
+ pMipmapLevel->fDirty = true;
+ }
+ }
+ else
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, face, mipmap, &pMipmapLevel);
+ AssertRCReturn(rc, rc);
+
+ /* Invalidate views, etc. */
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ if (pSvgaR3State->pFuncs3D)
+ pSvgaR3State->pFuncs3D->pfnSurfaceInvalidateImage(pThisCC, pSurface, face, mipmap);
+
+ pMipmapLevel->fDirty = true;
+ }
+ pSurface->fDirty = true;
+
+ return rc;
+}
+
+
+/*
+ *
+ * 3D
+ *
+ */
+
+int vmsvga3dQueryCaps(PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncs3D->pfnQueryCaps(pThisCC, idx3dCaps, pu32Val);
+}
+
+int vmsvga3dChangeMode(PVGASTATECC pThisCC)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncs3D->pfnChangeMode(pThisCC);
+}
+
+int vmsvga3dSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncs3D, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncs3D->pfnSurfaceCopy(pThisCC, dest, src, cCopyBoxes, pBox);
+}
+
+void vmsvga3dUpdateHostScreenViewport(PVGASTATECC pThisCC, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturnVoid(pSvgaR3State->pFuncs3D);
+ pSvgaR3State->pFuncs3D->pfnUpdateHostScreenViewport(pThisCC, idScreen, pOldViewport);
+}
+
+/**
+ * Updates the heap buffers for all surfaces or one specific one.
+ *
+ * @param pThisCC The VGA/VMSVGA state for ring-3.
+ * @param sid The surface ID, UINT32_MAX if all.
+ * @thread VMSVGAFIFO
+ */
+void vmsvga3dUpdateHeapBuffersForSurfaces(PVGASTATECC pThisCC, uint32_t sid)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturnVoid(pSvgaR3State->pFuncs3D);
+
+ PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
+ AssertReturnVoid(pState);
+
+ if (sid == UINT32_MAX)
+ {
+ uint32_t cSurfaces = pState->cSurfaces;
+ for (sid = 0; sid < cSurfaces; sid++)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ if (pSurface && pSurface->id == sid)
+ pSvgaR3State->pFuncs3D->pfnSurfaceUpdateHeapBuffers(pThisCC, pSurface);
+ }
+ }
+ else if (sid < pState->cSurfaces)
+ {
+ PVMSVGA3DSURFACE pSurface = pState->papSurfaces[sid];
+ if (pSurface && pSurface->id == sid)
+ pSvgaR3State->pFuncs3D->pfnSurfaceUpdateHeapBuffers(pThisCC, pSurface);
+ }
+}
+
+
+/*
+ *
+ * VGPU9
+ *
+ */
+
+int vmsvga3dContextDefine(PVGASTATECC pThisCC, uint32_t cid)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnContextDefine(pThisCC, cid);
+}
+
+int vmsvga3dContextDestroy(PVGASTATECC pThisCC, uint32_t cid)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnContextDestroy(pThisCC, cid);
+}
+
+int vmsvga3dSetTransform(PVGASTATECC pThisCC, uint32_t cid, SVGA3dTransformType type, float matrix[16])
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetTransform(pThisCC, cid, type, matrix);
+}
+
+int vmsvga3dSetZRange(PVGASTATECC pThisCC, uint32_t cid, SVGA3dZRange zRange)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetZRange(pThisCC, cid, zRange);
+}
+
+int vmsvga3dSetRenderState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetRenderState(pThisCC, cid, cRenderStates, pRenderState);
+}
+
+int vmsvga3dSetRenderTarget(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetRenderTarget(pThisCC, cid, type, target);
+}
+
+int vmsvga3dSetTextureState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetTextureState(pThisCC, cid, cTextureStates, pTextureState);
+}
+
+int vmsvga3dSetMaterial(PVGASTATECC pThisCC, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetMaterial(pThisCC, cid, face, pMaterial);
+}
+
+int vmsvga3dSetLightData(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetLightData(pThisCC, cid, index, pData);
+}
+
+int vmsvga3dSetLightEnabled(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, uint32_t enabled)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetLightEnabled(pThisCC, cid, index, enabled);
+}
+
+int vmsvga3dSetViewPort(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetViewPort(pThisCC, cid, pRect);
+}
+
+int vmsvga3dSetClipPlane(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4])
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetClipPlane(pThisCC, cid, index, plane);
+}
+
+int vmsvga3dCommandClear(PVGASTATECC pThisCC, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnCommandClear(pThisCC, cid, clearFlag, color, depth, stencil, cRects, pRect);
+}
+
+int vmsvga3dDrawPrimitives(PVGASTATECC pThisCC, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pNumRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnDrawPrimitives(pThisCC, cid, numVertexDecls, pVertexDecl, numRanges, pNumRange, cVertexDivisor, pVertexDivisor);
+}
+
+int vmsvga3dSetScissorRect(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnSetScissorRect(pThisCC, cid, pRect);
+}
+
+int vmsvga3dGenerateMipmaps(PVGASTATECC pThisCC, uint32_t sid, SVGA3dTextureFilter filter)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnGenerateMipmaps(pThisCC, sid, filter);
+}
+
+int vmsvga3dShaderDefine(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnShaderDefine(pThisCC, cid, shid, type, cbData, pShaderData);
+}
+
+int vmsvga3dShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnShaderDestroy(pThisCC, cid, shid, type);
+}
+
+int vmsvga3dShaderSet(PVGASTATECC pThisCC, struct VMSVGA3DCONTEXT *pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnShaderSet(pThisCC, pContext, cid, type, shid);
+}
+
+int vmsvga3dShaderSetConst(PVGASTATECC pThisCC, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsVGPU9, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsVGPU9->pfnShaderSetConst(pThisCC, cid, reg, type, ctype, cRegisters, pValues);
+}
+
+
+/*
+ *
+ * Map
+ *
+ */
+
+void vmsvga3dSurfaceMapInit(VMSVGA3D_MAPPED_SURFACE *pMap, VMSVGA3D_SURFACE_MAP enmMapType, SVGA3dBox const *pBox,
+ PVMSVGA3DSURFACE pSurface, void *pvData, uint32_t cbRowPitch, uint32_t cbDepthPitch)
+{
+ uint32_t const cxBlocks = (pBox->w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cyBlocks = (pBox->h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+
+ pMap->enmMapType = enmMapType;
+ pMap->format = pSurface->format;
+ pMap->box = *pBox;
+ pMap->cbBlock = pSurface->cbBlock;
+ pMap->cbRow = cxBlocks * pSurface->cbBlock;
+ pMap->cbRowPitch = cbRowPitch;
+ pMap->cRows = cyBlocks;
+ pMap->cbDepthPitch = cbDepthPitch;
+ pMap->pvData = (uint8_t *)pvData
+ + (pBox->x / pSurface->cxBlock) * pSurface->cbBlock
+ + (pBox->y / pSurface->cyBlock) * cbRowPitch
+ + pBox->z * cbDepthPitch;
+}
+
+
+int vmsvga3dSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
+ VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pImage->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsMap, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsMap->pfnSurfaceMap(pThisCC, pImage, pBox, enmMapType, pMap);
+ }
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, pImage->face, pImage->mipmap, &pMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ if (!pMipLevel->pSurfaceData)
+ {
+ rc = vmsvga3dSurfaceAllocMipLevels(pSurface);
+ AssertRCReturn(rc, rc);
+ }
+
+ SVGA3dBox clipBox;
+ if (pBox)
+ {
+ clipBox = *pBox;
+ vmsvgaR3ClipBox(&pMipLevel->mipmapSize, &clipBox);
+ ASSERT_GUEST_RETURN(clipBox.w && clipBox.h && clipBox.d, VERR_INVALID_PARAMETER);
+ }
+ else
+ {
+ clipBox.x = 0;
+ clipBox.y = 0;
+ clipBox.z = 0;
+ clipBox.w = pMipLevel->mipmapSize.width;
+ clipBox.h = pMipLevel->mipmapSize.height;
+ clipBox.d = pMipLevel->mipmapSize.depth;
+ }
+
+ /// @todo Zero the box?
+ //if (enmMapType == VMSVGA3D_SURFACE_MAP_WRITE_DISCARD)
+ // RT_BZERO(.);
+
+ vmsvga3dSurfaceMapInit(pMap, enmMapType, &clipBox, pSurface,
+ pMipLevel->pSurfaceData, pMipLevel->cbSurfacePitch, pMipLevel->cbSurfacePlane);
+
+ LogFunc(("SysMem: sid = %u, pvData %p\n", pImage->sid, pMap->pvData));
+ return VINF_SUCCESS;
+}
+
+int vmsvga3dSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pImage->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
+ {
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ AssertReturn(pSvgaR3State->pFuncsMap, VERR_NOT_IMPLEMENTED);
+ return pSvgaR3State->pFuncsMap->pfnSurfaceUnmap(pThisCC, pImage, pMap, fWritten);
+ }
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, pImage->face, pImage->mipmap, &pMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ if ( fWritten
+ && ( pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_READ_WRITE
+ || pMap->enmMapType == VMSVGA3D_SURFACE_MAP_WRITE_DISCARD))
+ {
+ pMipLevel->fDirty = true;
+ pSurface->fDirty = true;
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+int vmsvga3dCalcSurfaceMipmapAndFace(PVGASTATECC pThisCC, uint32_t sid, uint32_t iSubresource, uint32_t *piMipmap, uint32_t *piFace)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ vmsvga3dCalcMipmapAndFace(pSurface->cLevels, iSubresource, piMipmap, piFace);
+ return VINF_SUCCESS;
+}
+
+
+uint32_t vmsvga3dCalcSubresourceOffset(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pImage->sid, &pSurface);
+ AssertRCReturn(rc, 0);
+
+ ASSERT_GUEST_RETURN(pImage->face < pSurface->surfaceDesc.numArrayElements, 0);
+
+ uint32_t offMipLevel = 0;
+ for (uint32_t i = 0; i < pImage->mipmap; ++i)
+ {
+ PVMSVGA3DMIPMAPLEVEL pMipmapLevel = &pSurface->paMipmapLevels[i];
+ offMipLevel += pMipmapLevel->cbSurface;
+ }
+
+ uint32_t offSubresource = pSurface->surfaceDesc.cbArrayElement * pImage->face + offMipLevel;
+ /** @todo Multisample? */
+ return offSubresource;
+}
+
+
+uint32_t vmsvga3dGetArrayElements(PVGASTATECC pThisCC, SVGA3dSurfaceId sid)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturn(rc, 0);
+
+ return pSurface->surfaceDesc.numArrayElements;
+}
+
+
+uint32_t vmsvga3dGetSubresourceCount(PVGASTATECC pThisCC, SVGA3dSurfaceId sid)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
+ AssertRCReturn(rc, 0);
+
+ return pSurface->surfaceDesc.numArrayElements * pSurface->cLevels;
+}
+
+
+/*
+ * Calculates memory layout of a surface box for memcpy:
+ */
+int vmsvga3dGetBoxDimensions(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
+ VMSGA3D_BOX_DIMENSIONS *pResult)
+{
+ PVMSVGA3DSURFACE pSurface;
+ int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pImage->sid, &pSurface);
+ AssertRCReturn(rc, rc);
+
+ PVMSVGA3DMIPMAPLEVEL pMipLevel;
+ rc = vmsvga3dMipmapLevel(pSurface, pImage->face, pImage->mipmap, &pMipLevel);
+ ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
+
+ /* Clip the box. */
+ SVGA3dBox clipBox;
+ if (pBox)
+ {
+ clipBox = *pBox;
+ vmsvgaR3ClipBox(&pMipLevel->mipmapSize, &clipBox);
+ ASSERT_GUEST_RETURN(clipBox.w && clipBox.h && clipBox.d, VERR_INVALID_PARAMETER);
+ }
+ else
+ {
+ clipBox.x = 0;
+ clipBox.y = 0;
+ clipBox.z = 0;
+ clipBox.w = pMipLevel->mipmapSize.width;
+ clipBox.h = pMipLevel->mipmapSize.height;
+ clipBox.d = pMipLevel->mipmapSize.depth;
+ }
+
+ uint32_t const cBlocksX = (clipBox.w + pSurface->cxBlock - 1) / pSurface->cxBlock;
+ uint32_t const cBlocksY = (clipBox.h + pSurface->cyBlock - 1) / pSurface->cyBlock;
+
+ pResult->offSubresource = vmsvga3dCalcSubresourceOffset(pThisCC, pImage);
+ pResult->offBox = (clipBox.x / pSurface->cxBlock) * pSurface->cbBlock
+ + (clipBox.y / pSurface->cyBlock) * pMipLevel->cbSurfacePitch
+ + clipBox.z * pMipLevel->cbSurfacePlane;
+ pResult->cbRow = cBlocksX * pSurface->cbBlock;
+ pResult->cbPitch = pMipLevel->cbSurfacePitch;
+ pResult->cyBlocks = cBlocksY;
+ pResult->cbDepthPitch = pMipLevel->cbSurfacePlane;
+
+ return VINF_SUCCESS;
+}
+
+
+/*
+ * Whether a legacy 3D backend is used.
+ * The new DX context can be built together with the legacy D3D9 or OpenGL backend.
+ * The actual backend is selected at the VM startup.
+ */
+bool vmsvga3dIsLegacyBackend(PVGASTATECC pThisCC)
+{
+ PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
+ return pSvgaR3State->pFuncsDX == NULL;
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
new file mode 100644
index 00000000..8eae99e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
@@ -0,0 +1,689 @@
+/* $Id: DevVGA-SVGA3d.h $ */
+/** @file
+ * DevVMWare - VMWare SVGA device - 3D part.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBox/AssertGuest.h>
+
+#include "DevVGA-SVGA.h"
+
+
+/** Arbitrary limit */
+#define SVGA3D_MAX_SHADER_IDS 0x800
+/** D3D allows up to 8 texture stages. */
+#define SVGA3D_MAX_TEXTURE_STAGES 8
+/** Samplers: 16 Pixel Shader + 1 Displacement Map + 4 Vertex Shader */
+#define SVGA3D_MAX_SAMPLERS_PS 16
+#define SVGA3D_MAX_SAMPLERS_DMAP 1
+#define SVGA3D_MAX_SAMPLERS_VS 4
+#define SVGA3D_MAX_SAMPLERS (SVGA3D_MAX_SAMPLERS_PS + SVGA3D_MAX_SAMPLERS_DMAP + SVGA3D_MAX_SAMPLERS_VS)
+/** Arbitrary upper limit; seen 8 so far. */
+#define SVGA3D_MAX_LIGHTS 32
+/** Arbitrary upper limit; 2GB enough for 32768x16384*4. */
+#define SVGA3D_MAX_SURFACE_MEM_SIZE 0x80000000
+/** Arbitrary upper limit. [0,15] is enough for 2^15=32768x32768. */
+#define SVGA3D_MAX_MIP_LEVELS 16
+
+
+/** @todo Use this as a parameter for vmsvga3dSurfaceDefine and a field in VMSVGA3DSURFACE instead of a multiple values. */
+/* A surface description provided by the guest. Mostly mirrors SVGA3dCmdDefineGBSurface_v4 */
+typedef struct VMSVGA3D_SURFACE_DESC
+{
+ SVGA3dSurface1Flags surface1Flags;
+ SVGA3dSurface2Flags surface2Flags;
+ SVGA3dSurfaceFormat format;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dMSPattern multisamplePattern;
+ SVGA3dMSQualityLevel qualityLevel;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+ uint32 numArrayElements; /* "Number of array elements for a 1D/2D texture. For cubemap
+ * texture number of faces * array_size."
+ */
+ uint32 cbArrayElement; /* Size of one array element. */
+ uint32 bufferByteStride;
+} VMSVGA3D_SURFACE_DESC;
+
+typedef enum VMSVGA3D_SURFACE_MAP
+{
+ VMSVGA3D_SURFACE_MAP_READ,
+ VMSVGA3D_SURFACE_MAP_WRITE,
+ VMSVGA3D_SURFACE_MAP_READ_WRITE,
+ VMSVGA3D_SURFACE_MAP_WRITE_DISCARD,
+} VMSVGA3D_SURFACE_MAP;
+
+typedef struct VMSVGA3D_MAPPED_SURFACE
+{
+ VMSVGA3D_SURFACE_MAP enmMapType;
+ SVGA3dSurfaceFormat format;
+ SVGA3dBox box;
+ uint32_t cbBlock; /* Size of pixel block, usualy of 1 pixel for uncompressed formats. */
+ uint32_t cbRow; /* Bytes per row. */
+ uint32_t cbRowPitch; /* Bytes between rows. */
+ uint32_t cRows; /* Number of rows. */
+ uint32_t cbDepthPitch; /* Bytes between planes. */
+ void *pvData;
+} VMSVGA3D_MAPPED_SURFACE;
+
+/* Write render targets to bitmaps. */
+//#define DUMP_BITMAPS
+void vmsvga3dMapWriteBmpFile(VMSVGA3D_MAPPED_SURFACE const *pMap, char const *pszPrefix);
+
+/* DevVGA-SVGA.cpp: */
+void vmsvgaR33dSurfaceUpdateHeapBuffersOnFifoThread(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t sid);
+
+
+/* DevVGA-SVGA3d-ogl.cpp & DevVGA-SVGA3d-win.cpp: */
+int vmsvga3dLoadExec(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
+int vmsvga3dSaveExec(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PSSMHANDLE pSSM);
+void vmsvga3dUpdateHostScreenViewport(PVGASTATECC pThisCC, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport);
+int vmsvga3dQueryCaps(PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val);
+
+int vmsvga3dSurfaceDefine(PVGASTATECC pThisCC, uint32_t sid, SVGA3dSurfaceAllFlags surfaceFlags, SVGA3dSurfaceFormat format,
+ uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter,
+ uint32_t cMipLevels, SVGA3dSize const *pMipLevel0Size, uint32_t arraySize, bool fAllocMipLevels);
+int vmsvga3dSurfaceDestroy(PVGASTATECC pThisCC, uint32_t sid);
+int vmsvga3dSurfaceCopy(PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src,
+ uint32_t cCopyBoxes, SVGA3dCopyBox *pBox);
+int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, PVGASTATECC pThisCC,
+ SVGA3dSurfaceImageId const *pDstSfcImg, SVGA3dBox const *pDstBox,
+ SVGA3dSurfaceImageId const *pSrcSfcImg, SVGA3dBox const *pSrcBox, SVGA3dStretchBltMode enmMode);
+int vmsvga3dSurfaceDMA(PVGASTATE pThis, PVGASTATECC pThisCC, SVGAGuestImage guest, SVGA3dSurfaceImageId host, SVGA3dTransferType transfer, uint32_t cCopyBoxes, SVGA3dCopyBox *pBoxes);
+int vmsvga3dSurfaceBlitToScreen(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t dest, SVGASignedRect destRect, SVGA3dSurfaceImageId srcImage, SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *pRect);
+
+int vmsvga3dContextDefine(PVGASTATECC pThisCC, uint32_t cid);
+int vmsvga3dContextDestroy(PVGASTATECC pThisCC, uint32_t cid);
+
+int vmsvga3dChangeMode(PVGASTATECC pThisCC);
+
+int vmsvga3dDefineScreen(PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen);
+int vmsvga3dDestroyScreen(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen);
+
+int vmsvga3dScreenUpdate(PVGASTATECC pThisCC, uint32_t idDstScreen, SVGASignedRect const &dstRect,
+ SVGA3dSurfaceImageId const &srcImage, SVGASignedRect const &srcRect,
+ uint32_t cDstClipRects, SVGASignedRect *paDstClipRect);
+
+int vmsvga3dSetTransform(PVGASTATECC pThisCC, uint32_t cid, SVGA3dTransformType type, float matrix[16]);
+int vmsvga3dSetZRange(PVGASTATECC pThisCC, uint32_t cid, SVGA3dZRange zRange);
+int vmsvga3dSetRenderState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState);
+int vmsvga3dSetRenderTarget(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target);
+int vmsvga3dSetTextureState(PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState);
+int vmsvga3dSetMaterial(PVGASTATECC pThisCC, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial);
+int vmsvga3dSetLightData(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData);
+int vmsvga3dSetLightEnabled(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, uint32_t enabled);
+int vmsvga3dSetViewPort(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect);
+int vmsvga3dSetClipPlane(PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4]);
+int vmsvga3dCommandClear(PVGASTATECC pThisCC, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect);
+int vmsvga3dCommandPresent(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t sid, uint32_t cRects, SVGA3dCopyRect *pRect);
+int vmsvga3dDrawPrimitives(PVGASTATECC pThisCC, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pNumRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor);
+int vmsvga3dSetScissorRect(PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect);
+int vmsvga3dGenerateMipmaps(PVGASTATECC pThisCC, uint32_t sid, SVGA3dTextureFilter filter);
+
+int vmsvga3dShaderDefine(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData);
+int vmsvga3dShaderDestroy(PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type);
+int vmsvga3dShaderSet(PVGASTATECC pThisCC, struct VMSVGA3DCONTEXT *pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid);
+int vmsvga3dShaderSetConst(PVGASTATECC pThisCC, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues);
+
+int vmsvga3dQueryCreate(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type);
+int vmsvga3dQueryBegin(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type);
+int vmsvga3dQueryEnd(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type);
+int vmsvga3dQueryWait(PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type, PVGASTATE pThis, SVGAGuestPtr const *pGuestResult);
+
+int vmsvga3dSurfaceInvalidate(PVGASTATECC pThisCC, uint32_t sid, uint32_t face, uint32_t mipmap);
+
+int vmsvga3dSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
+ VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap);
+int vmsvga3dSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten);
+
+uint32_t vmsvga3dCalcSubresourceOffset(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage);
+
+typedef struct VMSGA3D_BOX_DIMENSIONS
+{
+ uint32_t offSubresource; /* Offset of the miplevel. */
+ uint32_t offBox; /* Offset of the box in the miplevel. */
+ uint32_t cbRow; /* Bytes per row. */
+ int32_t cbPitch; /* Bytes between rows. */
+ uint32_t cyBlocks; /* Number of rows. */
+ uint32_t cbDepthPitch; /* Number of bytes between planes. */
+} VMSGA3D_BOX_DIMENSIONS;
+
+int vmsvga3dGetBoxDimensions(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
+ VMSGA3D_BOX_DIMENSIONS *pResult);
+
+DECLINLINE(void) vmsvga3dCalcMipmapSize(SVGA3dSize const *pSize0, uint32_t iMipmap, SVGA3dSize *pSize)
+{
+ pSize->width = RT_MAX(pSize0->width >> iMipmap, 1);
+ pSize->height = RT_MAX(pSize0->height >> iMipmap, 1);
+ pSize->depth = RT_MAX(pSize0->depth >> iMipmap, 1);
+}
+
+uint32_t vmsvga3dGetArrayElements(PVGASTATECC pThisCC, SVGA3dSurfaceId sid);
+uint32_t vmsvga3dGetSubresourceCount(PVGASTATECC pThisCC, SVGA3dSurfaceId sid);
+
+DECLINLINE(uint32_t) vmsvga3dCalcSubresource(uint32_t iMipLevel, uint32_t iArray, uint32_t cMipLevels)
+{
+ /* Same as in D3D */
+ return iMipLevel + iArray * cMipLevels;
+}
+
+DECLINLINE(void) vmsvga3dCalcMipmapAndFace(uint32_t cMipLevels, uint32_t iSubresource, uint32_t *piMipmap, uint32_t *piFace)
+{
+ if (RT_LIKELY(cMipLevels))
+ {
+ *piFace = iSubresource / cMipLevels;
+ *piMipmap = iSubresource % cMipLevels;
+ }
+ else
+ {
+ ASSERT_GUEST_FAILED();
+ *piFace = 0;
+ *piMipmap = 0;
+ }
+}
+
+int vmsvga3dCalcSurfaceMipmapAndFace(PVGASTATECC pThisCC, uint32_t sid, uint32_t iSubresource, uint32_t *piMipmap, uint32_t *piFace);
+
+
+/* DevVGA-SVGA3d-shared.h: */
+#if defined(RT_OS_WINDOWS) && defined(IN_RING3)
+# include <iprt/win/windows.h>
+
+# define WM_VMSVGA3D_WAKEUP (WM_APP+1)
+# define WM_VMSVGA3D_CREATEWINDOW (WM_APP+2)
+# define WM_VMSVGA3D_DESTROYWINDOW (WM_APP+3)
+# define WM_VMSVGA3D_EXIT (WM_APP+5)
+# if 0
+# define WM_VMSVGA3D_CREATE_DEVICE (WM_APP+6)
+typedef struct VMSVGA3DCREATEDEVICEPARAMS
+{
+ struct VMSVGA3DSTATE *pState;
+ struct VMSVGA3DCONTEXT *pContext;
+ struct _D3DPRESENT_PARAMETERS_ *pPresParams;
+ HRESULT hrc;
+} VMSVGA3DCREATEDEVICEPARAMS;
+# endif
+
+DECLCALLBACK(int) vmsvga3dWindowThread(RTTHREAD ThreadSelf, void *pvUser);
+int vmsvga3dSendThreadMessage(RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, UINT msg, WPARAM wParam, LPARAM lParam);
+int vmsvga3dContextWindowCreate(HINSTANCE hInstance, RTTHREAD pWindowThread, RTSEMEVENT WndRequestSem, HWND *pHwnd);
+
+#endif
+
+void vmsvga3dUpdateHeapBuffersForSurfaces(PVGASTATECC pThisCC, uint32_t sid);
+void vmsvga3dInfoContextWorker(PVGASTATECC pThisCC, PCDBGFINFOHLP pHlp, uint32_t cid, bool fVerbose);
+void vmsvga3dInfoSurfaceWorker(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PCDBGFINFOHLP pHlp, uint32_t sid,
+ bool fVerbose, uint32_t cxAscii, bool fInvY, const char *pszBitmapPath);
+
+/* DevVGA-SVGA3d-shared.cpp: */
+
+/**
+ * Structure for use with vmsvga3dInfoU32Flags.
+ */
+typedef struct VMSVGAINFOFLAGS32
+{
+ /** The flags. */
+ uint32_t fFlags;
+ /** The corresponding mnemonic. */
+ const char *pszJohnny;
+} VMSVGAINFOFLAGS32;
+/** Pointer to a read-only flag translation entry. */
+typedef VMSVGAINFOFLAGS32 const *PCVMSVGAINFOFLAGS32;
+void vmsvga3dInfoU32Flags(PCDBGFINFOHLP pHlp, uint32_t fFlags, const char *pszPrefix, PCVMSVGAINFOFLAGS32 paFlags, uint32_t cFlags);
+
+/**
+ * Structure for use with vmsvgaFormatEnumValueEx and vmsvgaFormatEnumValue.
+ */
+typedef struct VMSVGAINFOENUM
+{
+ /** The enum value. */
+ int32_t iValue;
+ /** The corresponding value name. */
+ const char *pszName;
+} VMSVGAINFOENUM;
+/** Pointer to a read-only enum value translation entry. */
+typedef VMSVGAINFOENUM const *PCVMSVGAINFOENUM;
+/**
+ * Structure for use with vmsvgaFormatEnumValueEx and vmsvgaFormatEnumValue.
+ */
+typedef struct VMSVGAINFOENUMMAP
+{
+ /** Pointer to the value mapping array. */
+ PCVMSVGAINFOENUM paValues;
+ /** The number of value mappings. */
+ size_t cValues;
+ /** The prefix. */
+ const char *pszPrefix;
+#ifdef RT_STRICT
+ /** Indicates whether we've checked that it's sorted or not. */
+ bool *pfAsserted;
+#endif
+} VMSVGAINFOENUMMAP;
+typedef VMSVGAINFOENUMMAP const *PCVMSVGAINFOENUMMAP;
+/** @def VMSVGAINFOENUMMAP_MAKE
+ * Macro for defining a VMSVGAINFOENUMMAP, silently dealing with pfAsserted.
+ *
+ * @param a_Scope The scope. RT_NOTHING or static.
+ * @param a_VarName The variable name for this map.
+ * @param a_aValues The variable name of the value mapping array.
+ * @param a_pszPrefix The value name prefix.
+ */
+#ifdef VBOX_STRICT
+# define VMSVGAINFOENUMMAP_MAKE(a_Scope, a_VarName, a_aValues, a_pszPrefix) \
+ static bool RT_CONCAT(a_VarName,_AssertedSorted) = false; \
+ a_Scope VMSVGAINFOENUMMAP const a_VarName = { \
+ a_aValues, RT_ELEMENTS(a_aValues), a_pszPrefix, &RT_CONCAT(a_VarName,_AssertedSorted) \
+ }
+#else
+# define VMSVGAINFOENUMMAP_MAKE(a_Scope, a_VarName, a_aValues, a_pszPrefix) \
+ a_Scope VMSVGAINFOENUMMAP const a_VarName = { a_aValues, RT_ELEMENTS(a_aValues), a_pszPrefix }
+#endif
+extern VMSVGAINFOENUMMAP const g_SVGA3dSurfaceFormat2String;
+const char *vmsvgaLookupEnum(int32_t iValue, PCVMSVGAINFOENUMMAP pEnumMap);
+char *vmsvgaFormatEnumValueEx(char *pszBuffer, size_t cbBuffer, const char *pszName, int32_t iValue,
+ bool fPrefix, PCVMSVGAINFOENUMMAP pEnumMap);
+char *vmsvgaFormatEnumValue(char *pszBuffer, size_t cbBuffer, const char *pszName, uint32_t uValue,
+ const char *pszPrefix, const char * const *papszValues, size_t cValues);
+
+/**
+ * ASCII "art" scanline printer callback.
+ *
+ * @param pszLine The line to output.
+ * @param pvUser The user argument.
+ */
+typedef DECLCALLBACKTYPE(void, FNVMSVGAASCIIPRINTLN,(const char *pszLine, void *pvUser));
+/** Pointer to an ASCII "art" print line callback. */
+typedef FNVMSVGAASCIIPRINTLN *PFNVMSVGAASCIIPRINTLN;
+void vmsvga3dAsciiPrint(PFNVMSVGAASCIIPRINTLN pfnPrintLine, void *pvUser, void const *pvImage, size_t cbImage,
+ uint32_t cx, uint32_t cy, uint32_t cbScanline, SVGA3dSurfaceFormat enmFormat, bool fInvY,
+ uint32_t cchMaxX, uint32_t cchMaxY);
+DECLCALLBACK(void) vmsvga3dAsciiPrintlnInfo(const char *pszLine, void *pvUser);
+DECLCALLBACK(void) vmsvga3dAsciiPrintlnLog(const char *pszLine, void *pvUser);
+
+char *vmsvga3dFormatRenderState(char *pszBuffer, size_t cbBuffer, SVGA3dRenderState const *pRenderState);
+char *vmsvga3dFormatTextureState(char *pszBuffer, size_t cbBuffer, SVGA3dTextureState const *pTextureState);
+void vmsvga3dInfoHostWindow(PCDBGFINFOHLP pHlp, uint64_t idHostWindow);
+
+uint32_t vmsvga3dSurfaceFormatSize(SVGA3dSurfaceFormat format,
+ uint32_t *pu32BlockWidth,
+ uint32_t *pu32BlockHeight);
+
+#ifdef LOG_ENABLED
+const char *vmsvga3dGetCapString(uint32_t idxCap);
+const char *vmsvga3dGet3dFormatString(uint32_t format);
+const char *vmsvga3dGetRenderStateName(uint32_t state);
+const char *vmsvga3dTextureStateToString(SVGA3dTextureStateName textureState);
+const char *vmsvgaTransformToString(SVGA3dTransformType type);
+const char *vmsvgaDeclUsage2String(SVGA3dDeclUsage usage);
+const char *vmsvgaDeclType2String(SVGA3dDeclType type);
+const char *vmsvgaDeclMethod2String(SVGA3dDeclMethod method);
+const char *vmsvgaSurfaceType2String(SVGA3dSurfaceFormat format);
+const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType);
+#endif
+
+
+/*
+ * Backend interfaces.
+ */
+bool vmsvga3dIsLegacyBackend(PVGASTATECC pThisCC);
+
+typedef struct VMSVGA3DSURFACE *PVMSVGA3DSURFACE;
+typedef struct VMSVGA3DMIPMAPLEVEL *PVMSVGA3DMIPMAPLEVEL;
+typedef struct VMSVGA3DCONTEXT *PVMSVGA3DCONTEXT;
+
+/* Essential 3D backend function. */
+#define VMSVGA3D_BACKEND_INTERFACE_NAME_3D "3D"
+typedef struct
+{
+ DECLCALLBACKMEMBER(int, pfnInit, (PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC));
+ DECLCALLBACKMEMBER(int, pfnPowerOn, (PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC));
+ DECLCALLBACKMEMBER(int, pfnTerminate, (PVGASTATECC pThisCC));
+ DECLCALLBACKMEMBER(int, pfnReset, (PVGASTATECC pThisCC));
+ DECLCALLBACKMEMBER(int, pfnQueryCaps, (PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val));
+ DECLCALLBACKMEMBER(int, pfnChangeMode, (PVGASTATECC pThisCC));
+ DECLCALLBACKMEMBER(int, pfnCreateTexture, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t idAssociatedContext, PVMSVGA3DSURFACE pSurface));
+ DECLCALLBACKMEMBER(void, pfnSurfaceDestroy, (PVGASTATECC pThisCC, bool fClearCOTableEntry, PVMSVGA3DSURFACE pSurface));
+ DECLCALLBACKMEMBER(void, pfnSurfaceInvalidateImage, (PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface, uint32_t uFace, uint32_t uMipmap));
+ DECLCALLBACKMEMBER(int, pfnSurfaceCopy, (PVGASTATECC pThisCC, SVGA3dSurfaceImageId dest, SVGA3dSurfaceImageId src, uint32_t cCopyBoxes, SVGA3dCopyBox *pBox));
+ DECLCALLBACKMEMBER(int, pfnSurfaceDMACopyBox, (PVGASTATE pThis, PVGASTATECC pThisCC, PVMSVGA3DSTATE pState, PVMSVGA3DSURFACE pSurface,
+ PVMSVGA3DMIPMAPLEVEL pMipLevel, uint32_t uHostFace, uint32_t uHostMipmap,
+ SVGAGuestPtr GuestPtr, uint32_t cbGuestPitch, SVGA3dTransferType transfer,
+ SVGA3dCopyBox const *pBox, PVMSVGA3DCONTEXT pContext, int rc, int iBox));
+ DECLCALLBACKMEMBER(int, pfnSurfaceStretchBlt, (PVGASTATE pThis, PVMSVGA3DSTATE pState,
+ PVMSVGA3DSURFACE pDstSurface, uint32_t uDstFace, uint32_t uDstMipmap, SVGA3dBox const *pDstBox,
+ PVMSVGA3DSURFACE pSrcSurface, uint32_t uSrcFace, uint32_t uSrcMipmap, SVGA3dBox const *pSrcBox,
+ SVGA3dStretchBltMode enmMode, PVMSVGA3DCONTEXT pContext));
+ DECLCALLBACKMEMBER(void, pfnUpdateHostScreenViewport, (PVGASTATECC pThisCC, uint32_t idScreen, VMSVGAVIEWPORT const *pOldViewport));
+ /** @todo HW accelerated screen output probably needs a separate interface. */
+ DECLCALLBACKMEMBER(int, pfnDefineScreen, (PVGASTATE pThis, PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen));
+ DECLCALLBACKMEMBER(int, pfnDestroyScreen, (PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen));
+ DECLCALLBACKMEMBER(int, pfnSurfaceBlitToScreen, (PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen,
+ SVGASignedRect destRect, SVGA3dSurfaceImageId srcImage,
+ SVGASignedRect srcRect, uint32_t cRects, SVGASignedRect *paRects));
+ /* Various helpers. */
+ DECLCALLBACKMEMBER(int, pfnSurfaceUpdateHeapBuffers, (PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface));
+} VMSVGA3DBACKENDFUNCS3D;
+
+/* VGPU9 3D */
+#define VMSVGA3D_BACKEND_INTERFACE_NAME_VGPU9 "VGPU9"
+typedef struct
+{
+ DECLCALLBACKMEMBER(int, pfnContextDefine, (PVGASTATECC pThisCC, uint32_t cid));
+ DECLCALLBACKMEMBER(int, pfnContextDestroy, (PVGASTATECC pThisCC, uint32_t cid));
+ DECLCALLBACKMEMBER(int, pfnSetTransform, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dTransformType type, float matrix[16]));
+ DECLCALLBACKMEMBER(int, pfnSetZRange, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dZRange zRange));
+ DECLCALLBACKMEMBER(int, pfnSetRenderState, (PVGASTATECC pThisCC, uint32_t cid, uint32_t cRenderStates, SVGA3dRenderState *pRenderState));
+ DECLCALLBACKMEMBER(int, pfnSetRenderTarget, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dRenderTargetType type, SVGA3dSurfaceImageId target));
+ DECLCALLBACKMEMBER(int, pfnSetTextureState, (PVGASTATECC pThisCC, uint32_t cid, uint32_t cTextureStates, SVGA3dTextureState *pTextureState));
+ DECLCALLBACKMEMBER(int, pfnSetMaterial, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dFace face, SVGA3dMaterial *pMaterial));
+ DECLCALLBACKMEMBER(int, pfnSetLightData, (PVGASTATECC pThisCC, uint32_t cid, uint32_t index, SVGA3dLightData *pData));
+ DECLCALLBACKMEMBER(int, pfnSetLightEnabled, (PVGASTATECC pThisCC, uint32_t cid, uint32_t index, uint32_t enabled));
+ DECLCALLBACKMEMBER(int, pfnSetViewPort, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect));
+ DECLCALLBACKMEMBER(int, pfnSetClipPlane, (PVGASTATECC pThisCC, uint32_t cid, uint32_t index, float plane[4]));
+ DECLCALLBACKMEMBER(int, pfnCommandClear, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dClearFlag clearFlag, uint32_t color, float depth, uint32_t stencil, uint32_t cRects, SVGA3dRect *pRect));
+ DECLCALLBACKMEMBER(int, pfnDrawPrimitives, (PVGASTATECC pThisCC, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pNumRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor));
+ DECLCALLBACKMEMBER(int, pfnSetScissorRect, (PVGASTATECC pThisCC, uint32_t cid, SVGA3dRect *pRect));
+ DECLCALLBACKMEMBER(int, pfnGenerateMipmaps, (PVGASTATECC pThisCC, uint32_t sid, SVGA3dTextureFilter filter));
+ DECLCALLBACKMEMBER(int, pfnShaderDefine, (PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type, uint32_t cbData, uint32_t *pShaderData));
+ DECLCALLBACKMEMBER(int, pfnShaderDestroy, (PVGASTATECC pThisCC, uint32_t cid, uint32_t shid, SVGA3dShaderType type));
+ DECLCALLBACKMEMBER(int, pfnShaderSet, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t cid, SVGA3dShaderType type, uint32_t shid));
+ DECLCALLBACKMEMBER(int, pfnShaderSetConst, (PVGASTATECC pThisCC, uint32_t cid, uint32_t reg, SVGA3dShaderType type, SVGA3dShaderConstType ctype, uint32_t cRegisters, uint32_t *pValues));
+ DECLCALLBACKMEMBER(int, pfnOcclusionQueryCreate, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext));
+ DECLCALLBACKMEMBER(int, pfnOcclusionQueryDelete, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext));
+ DECLCALLBACKMEMBER(int, pfnOcclusionQueryBegin, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext));
+ DECLCALLBACKMEMBER(int, pfnOcclusionQueryEnd, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext));
+ DECLCALLBACKMEMBER(int, pfnOcclusionQueryGetData, (PVGASTATECC pThisCC, PVMSVGA3DCONTEXT pContext, uint32_t *pu32Pixels));
+} VMSVGA3DBACKENDFUNCSVGPU9;
+
+/* Support for Guest-Backed Objects. */
+#define VMSVGA3D_BACKEND_INTERFACE_NAME_GBO "GBO"
+typedef struct
+{
+ DECLCALLBACKMEMBER(int, pfnScreenTargetBind, (PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid));
+ DECLCALLBACKMEMBER(int, pfnScreenTargetUpdate, (PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect));
+} VMSVGA3DBACKENDFUNCSGBO;
+
+#define VMSVGA3D_BACKEND_INTERFACE_NAME_MAP "MAP"
+typedef struct
+{
+ DECLCALLBACKMEMBER(int, pfnSurfaceMap, (PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox, VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap));
+ DECLCALLBACKMEMBER(int, pfnSurfaceUnmap, (PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten));
+} VMSVGA3DBACKENDFUNCSMAP;
+
+typedef struct VMSVGA3DSHADER *PVMSVGA3DSHADER;
+typedef struct VMSVGA3DDXCONTEXT *PVMSVGA3DDXCONTEXT;
+struct DXShaderInfo;
+#define VMSVGA3D_BACKEND_INTERFACE_NAME_DX "DX"
+typedef struct
+{
+ DECLCALLBACKMEMBER(int, pfnDXSaveState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM));
+ DECLCALLBACKMEMBER(int, pfnDXLoadState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM));
+ DECLCALLBACKMEMBER(int, pfnDXDefineContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXBindContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSwitchContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXReadbackContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXInvalidateContext, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetSingleConstantBuffer, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t slot, SVGA3dShaderType type, SVGA3dSurfaceId sid, uint32_t offsetInBytes, uint32_t sizeInBytes));
+ DECLCALLBACKMEMBER(int, pfnDXSetShaderResources, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startView, SVGA3dShaderType type, uint32_t cShaderResourceViewId, SVGA3dShaderResourceViewId const *paShaderResourceViewId));
+ DECLCALLBACKMEMBER(int, pfnDXSetShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, SVGA3dShaderType type));
+ DECLCALLBACKMEMBER(int, pfnDXSetSamplers, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startSampler, SVGA3dShaderType type, uint32_t cSamplerId, SVGA3dSamplerId const *paSamplerId));
+ DECLCALLBACKMEMBER(int, pfnDXDraw, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t vertexCount, uint32_t startVertexLocation));
+ DECLCALLBACKMEMBER(int, pfnDXDrawIndexed, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t indexCount, uint32_t startIndexLocation, int32_t baseVertexLocation));
+ DECLCALLBACKMEMBER(int, pfnDXDrawInstanced, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t vertexCountPerInstance, uint32_t instanceCount, uint32_t startVertexLocation, uint32_t startInstanceLocation));
+ DECLCALLBACKMEMBER(int, pfnDXDrawIndexedInstanced, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t indexCountPerInstance, uint32_t instanceCount, uint32_t startIndexLocation, int32_t baseVertexLocation, uint32_t startInstanceLocation));
+ DECLCALLBACKMEMBER(int, pfnDXDrawAuto, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetInputLayout, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId));
+ DECLCALLBACKMEMBER(int, pfnDXSetVertexBuffers, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startBuffer, uint32_t cVertexBuffer, SVGA3dVertexBuffer const *paVertexBuffer));
+ DECLCALLBACKMEMBER(int, pfnDXSetIndexBuffer, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId sid, SVGA3dSurfaceFormat format, uint32_t offset));
+ DECLCALLBACKMEMBER(int, pfnDXSetTopology, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dPrimitiveType topology));
+ DECLCALLBACKMEMBER(int, pfnDXSetRenderTargets, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, uint32_t cRenderTargetViewId, SVGA3dRenderTargetViewId const *paRenderTargetViewId));
+ DECLCALLBACKMEMBER(int, pfnDXSetBlendState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dBlendStateId blendId, float const blendFactor[4], uint32_t sampleMask));
+ DECLCALLBACKMEMBER(int, pfnDXSetDepthStencilState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId, uint32_t stencilRef));
+ DECLCALLBACKMEMBER(int, pfnDXSetRasterizerState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, SVGACOTableDXQueryEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId));
+ DECLCALLBACKMEMBER(int, pfnDXBeginQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId));
+ DECLCALLBACKMEMBER(int, pfnDXEndQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, SVGADXQueryResultUnion *pQueryResult, uint32_t *pcbOut));
+ DECLCALLBACKMEMBER(int, pfnDXSetPredication, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, uint32_t predicateValue));
+ DECLCALLBACKMEMBER(int, pfnDXSetSOTargets, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget));
+ DECLCALLBACKMEMBER(int, pfnDXSetViewports, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport));
+ DECLCALLBACKMEMBER(int, pfnDXSetScissorRects, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cRect, SVGASignedRect const *paRect));
+ DECLCALLBACKMEMBER(int, pfnDXClearRenderTargetView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGA3dRGBAFloat const *pRGBA));
+ DECLCALLBACKMEMBER(int, pfnDXClearDepthStencilView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t flags, SVGA3dDepthStencilViewId depthStencilViewId, float depth, uint8_t stencil));
+ DECLCALLBACKMEMBER(int, pfnDXPredCopyRegion, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId dstSid, uint32_t dstSubResource, SVGA3dSurfaceId srcSid, uint32_t srcSubResource, SVGA3dCopyBox const *pBox));
+ DECLCALLBACKMEMBER(int, pfnDXPredCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId dstSid, SVGA3dSurfaceId srcSid));
+ DECLCALLBACKMEMBER(int, pfnDXPresentBlt, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId dstSid, uint32_t dstSubResource, SVGA3dBox const *pBoxDst, SVGA3dSurfaceId srcSid, uint32_t srcSubResource, SVGA3dBox const *pBoxSrc, SVGA3dDXPresentBltMode mode));
+ DECLCALLBACKMEMBER(int, pfnDXGenMips, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineShaderResourceView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId, SVGACOTableDXSRViewEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyShaderResourceView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineRenderTargetView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGACOTableDXRTViewEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyRenderTargetView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineDepthStencilView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, SVGACOTableDXDSViewEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyDepthStencilView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineElementLayout, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId, SVGACOTableDXElementLayoutEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyElementLayout, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dElementLayoutId elementLayoutId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineBlendState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dBlendStateId blendId, SVGACOTableDXBlendStateEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyBlendState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dBlendStateId blendId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineDepthStencilState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId, SVGACOTableDXDepthStencilEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyDepthStencilState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilStateId depthStencilId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineRasterizerState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId, SVGACOTableDXRasterizerStateEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyRasterizerState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRasterizerStateId rasterizerId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineSamplerState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSamplerId samplerId, SVGACOTableDXSamplerEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroySamplerState, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSamplerId samplerId));
+ DECLCALLBACKMEMBER(int, pfnDXDefineShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, SVGACOTableDXShaderEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId));
+ DECLCALLBACKMEMBER(int, pfnDXBindShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderId shaderId, DXShaderInfo const *pShaderInfo));
+ DECLCALLBACKMEMBER(int, pfnDXDefineStreamOutput, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyStreamOutput, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid));
+ DECLCALLBACKMEMBER(int, pfnDXSetStreamOutput, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid));
+ DECLCALLBACKMEMBER(int, pfnDXSetCOTable, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableType type, uint32_t cValidEntries));
+ DECLCALLBACKMEMBER(int, pfnDXBufferCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSurfaceCopyAndReadback, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXMoveQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXBindAllShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXHint, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXBufferUpdate, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetVSConstantBufferOffset, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetPSConstantBufferOffset, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetGSConstantBufferOffset, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetHSConstantBufferOffset, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetDSConstantBufferOffset, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetCSConstantBufferOffset, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXCondBindAllShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnScreenCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnIntraSurfaceCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXResolveCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXPredResolveCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXPredConvertRegion, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXPredConvert, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnWholeSurfaceCopy, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXDefineUAView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry));
+ DECLCALLBACKMEMBER(int, pfnDXDestroyUAView, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId));
+ DECLCALLBACKMEMBER(int, pfnDXClearUAViewUint, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, uint32_t const aValues[4]));
+ DECLCALLBACKMEMBER(int, pfnDXClearUAViewFloat, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, float const aValues[4]));
+ DECLCALLBACKMEMBER(int, pfnDXCopyStructureCount, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId srcUAViewId, SVGA3dSurfaceId destSid, uint32_t destByteOffset));
+ DECLCALLBACKMEMBER(int, pfnDXSetUAViews, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t uavSpliceIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId));
+ DECLCALLBACKMEMBER(int, pfnDXDrawIndexedInstancedIndirect, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId argsBufferSid, uint32_t byteOffsetForArgs));
+ DECLCALLBACKMEMBER(int, pfnDXDrawInstancedIndirect, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dSurfaceId argsBufferSid, uint32_t byteOffsetForArgs));
+ DECLCALLBACKMEMBER(int, pfnDXDispatch, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ));
+ DECLCALLBACKMEMBER(int, pfnDXDispatchIndirect, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnWriteZeroSurface, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnHintZeroSurface, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXTransferToBuffer, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnLogicOpsBitBlt, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnLogicOpsTransBlt, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnLogicOpsStretchBlt, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnLogicOpsColorFill, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnLogicOpsAlphaBlend, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnLogicOpsClearTypeBlend, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetCSUAViews, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId));
+ DECLCALLBACKMEMBER(int, pfnDXSetMinLOD, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXSetShaderIface, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnSurfaceStretchBltNonMSToMS, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnDXBindShaderIface, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
+ DECLCALLBACKMEMBER(int, pfnVBDXClearRenderTargetViewRegion, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGA3dRGBAFloat const *pColor, uint32_t cRect, SVGASignedRect const *paRect));
+} VMSVGA3DBACKENDFUNCSDX;
+
+typedef struct VMSVGA3DBACKENDDESC
+{
+ char const *pszName;
+ DECLCALLBACKMEMBER(int, pfnQueryInterface, (PVGASTATECC pThisCC, char const *pszInterfaceName, void *pvInterfaceFuncs, size_t cbInterfaceFuncs));
+} VMSVGA3DBACKENDDESC;
+
+#ifdef VMSVGA3D_DX
+/* Helpers. */
+int vmsvga3dDXUnbindContext(PVGASTATECC pThisCC, uint32_t cid, SVGADXContextMobFormat *pSvgaDXContext);
+int vmsvga3dDXSwitchContext(PVGASTATECC pThisCC, uint32_t cid);
+
+/* Command handlers. */
+int vmsvga3dDXDefineContext(PVGASTATECC pThisCC, uint32_t cid);
+int vmsvga3dDXDestroyContext(PVGASTATECC pThisCC, uint32_t cid);
+int vmsvga3dDXBindContext(PVGASTATECC pThisCC, uint32_t cid, SVGADXContextMobFormat *pSvgaDXContext);
+int vmsvga3dDXReadbackContext(PVGASTATECC pThisCC, uint32_t idDXContext, SVGADXContextMobFormat *pSvgaDXContext);
+int vmsvga3dDXInvalidateContext(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetSingleConstantBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSingleConstantBuffer const *pCmd);
+int vmsvga3dDXSetShaderResources(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShaderResources const *pCmd, uint32_t cShaderResourceViewId, SVGA3dShaderResourceViewId const *paShaderResourceViewId);
+int vmsvga3dDXSetShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetShader const *pCmd);
+int vmsvga3dDXSetSamplers(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetSamplers const *pCmd, uint32_t cSamplerId, SVGA3dSamplerId const *paSamplerId);
+int vmsvga3dDXDraw(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDraw const *pCmd);
+int vmsvga3dDXDrawIndexed(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexed const *pCmd);
+int vmsvga3dDXDrawInstanced(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawInstanced const *pCmd);
+int vmsvga3dDXDrawIndexedInstanced(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexedInstanced const *pCmd);
+int vmsvga3dDXDrawAuto(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetInputLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dElementLayoutId elementLayoutId);
+int vmsvga3dDXSetVertexBuffers(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t startBuffer, uint32_t cVertexBuffer, SVGA3dVertexBuffer const *paVertexBuffer);
+int vmsvga3dDXSetIndexBuffer(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetIndexBuffer const *pCmd);
+int vmsvga3dDXSetTopology(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dPrimitiveType topology);
+int vmsvga3dDXSetRenderTargets(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dDepthStencilViewId depthStencilViewId, uint32_t cRenderTargetViewId, SVGA3dRenderTargetViewId const *paRenderTargetViewId);
+int vmsvga3dDXSetBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetBlendState const *pCmd);
+int vmsvga3dDXSetDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetDepthStencilState const *pCmd);
+int vmsvga3dDXSetRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dRasterizerStateId rasterizerId);
+int vmsvga3dDXDefineQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineQuery const *pCmd);
+int vmsvga3dDXDestroyQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyQuery const *pCmd);
+int vmsvga3dDXBindQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindQuery const *pCmd, PVMSVGAMOB pMob);
+int vmsvga3dDXSetQueryOffset(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetQueryOffset const *pCmd);
+int vmsvga3dDXBeginQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBeginQuery const *pCmd);
+int vmsvga3dDXEndQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXEndQuery const *pCmd);
+int vmsvga3dDXReadbackQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackQuery const *pCmd);
+int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd);
+int vmsvga3dDXSetSOTargets(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget);
+int vmsvga3dDXSetViewports(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport);
+int vmsvga3dDXSetScissorRects(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cRect, SVGASignedRect const *paRect);
+int vmsvga3dDXClearRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearRenderTargetView const *pCmd);
+int vmsvga3dDXClearDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearDepthStencilView const *pCmd);
+int vmsvga3dDXPredCopyRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredCopyRegion const *pCmd);
+int vmsvga3dDXPredCopy(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPredCopy const *pCmd);
+int vmsvga3dDXPresentBlt(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXPresentBlt const *pCmd);
+int vmsvga3dDXGenMips(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXGenMips const *pCmd);
+int vmsvga3dDXDefineShaderResourceView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineShaderResourceView const *pCmd);
+int vmsvga3dDXDestroyShaderResourceView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyShaderResourceView const *pCmd);
+int vmsvga3dDXDefineRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineRenderTargetView const *pCmd);
+int vmsvga3dDXDestroyRenderTargetView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyRenderTargetView const *pCmd);
+int vmsvga3dDXDefineDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilView_v2 const *pCmd);
+int vmsvga3dDXDestroyDepthStencilView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyDepthStencilView const *pCmd);
+int vmsvga3dDXDefineElementLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dElementLayoutId elementLayoutId, uint32_t cDesc, SVGA3dInputElementDesc const *paDesc);
+int vmsvga3dDXDestroyElementLayout(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyElementLayout const *pCmd);
+int vmsvga3dDXDefineBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineBlendState const *pCmd);
+int vmsvga3dDXDestroyBlendState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyBlendState const *pCmd);
+int vmsvga3dDXDefineDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineDepthStencilState const *pCmd);
+int vmsvga3dDXDestroyDepthStencilState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyDepthStencilState const *pCmd);
+int vmsvga3dDXDefineRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineRasterizerState const *pCmd);
+int vmsvga3dDXDestroyRasterizerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyRasterizerState const *pCmd);
+int vmsvga3dDXDefineSamplerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineSamplerState const *pCmd);
+int vmsvga3dDXDestroySamplerState(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroySamplerState const *pCmd);
+int vmsvga3dDXDefineShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineShader const *pCmd);
+int vmsvga3dDXDestroyShader(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyShader const *pCmd);
+int vmsvga3dDXBindShader(PVGASTATECC pThisCC, SVGA3dCmdDXBindShader const *pCmd, PVMSVGAMOB pMob);
+int vmsvga3dDXDefineStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutput const *pCmd);
+int vmsvga3dDXDestroyStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyStreamOutput const *pCmd);
+int vmsvga3dDXSetStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetStreamOutput const *pCmd);
+int vmsvga3dDXSetCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXSetCOTable const *pCmd, PVMSVGAMOB pMob);
+int vmsvga3dDXReadbackCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXReadbackCOTable const *pCmd);
+int vmsvga3dDXBufferCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSurfaceCopyAndReadback(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXMoveQuery(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXBindAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindAllQuery const *pCmd);
+int vmsvga3dDXReadbackAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackAllQuery const *pCmd);
+int vmsvga3dDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXHint(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXBufferUpdate(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetVSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetPSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetGSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetHSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetDSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetCSConstantBufferOffset(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXCondBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dScreenCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXGrowCOTable(PVGASTATECC pThisCC, SVGA3dCmdDXGrowCOTable const *pCmd);
+int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXPredResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXPredConvertRegion(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXPredConvert(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dWholeSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineUAView const *pCmd);
+int vmsvga3dDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyUAView const *pCmd);
+int vmsvga3dDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewUint const *pCmd);
+int vmsvga3dDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewFloat const *pCmd);
+int vmsvga3dDXCopyStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXCopyStructureCount const *pCmd);
+int vmsvga3dDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId);
+int vmsvga3dDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawIndexedInstancedIndirect const *pCmd);
+int vmsvga3dDXDrawInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDrawInstancedIndirect const *pCmd);
+int vmsvga3dDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDispatch const *pCmd);
+int vmsvga3dDXDispatchIndirect(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dWriteZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dHintZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXTransferToBuffer(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetStructureCount const *pCmd);
+int vmsvga3dLogicOpsBitBlt(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dLogicOpsTransBlt(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dLogicOpsStretchBlt(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dLogicOpsColorFill(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dLogicOpsAlphaBlend(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dLogicOpsClearTypeBlend(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId);
+int vmsvga3dDXSetMinLOD(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd);
+int vmsvga3dDXSetShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd);
+int vmsvga3dSurfaceStretchBltNonMSToMS(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXBindShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext);
+int vmsvga3dDXLoadExec(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
+int vmsvga3dDXSaveExec(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PSSMHANDLE pSSM);
+
+int vmsvga3dVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion const *pCmd, uint32_t cRect, SVGASignedRect const *paRect);
+#endif /* VMSVGA3D_DX */
+
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_SVGA3d_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGA.cpp b/src/VBox/Devices/Graphics/DevVGA.cpp
new file mode 100644
index 00000000..3ac3d2d8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA.cpp
@@ -0,0 +1,7501 @@
+/* $Id: DevVGA.cpp $ */
+/** @file
+ * DevVGA - VBox VGA/VESA device.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ * --------------------------------------------------------------------
+ *
+ * This code is based on:
+ *
+ * QEMU VGA Emulator.
+ *
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+
+/* WARNING!!! All defines that affect VGAState should be placed in DevVGA.h !!!
+ * NEVER place them here as this would lead to VGASTATE inconsistency
+ * across different .cpp files !!!
+ */
+
+#ifdef VBOX_WITH_HGSMI
+#define PCIDEV_2_VGASTATE(pPciDev) ((PVGASTATE)((uintptr_t)pPciDev - RT_OFFSETOF(VGASTATE, Dev)))
+#endif /* VBOX_WITH_HGSMI */
+
+/* VGA text mode blinking constants (cursor and blinking chars). */
+#define VGA_BLINK_PERIOD_FULL (RT_NS_100MS * 4) /**< Blink cycle length. */
+#define VGA_BLINK_PERIOD_ON (RT_NS_100MS * 2) /**< How long cursor/text is visible. */
+
+/* EGA compatible switch values (in high nibble).
+ * XENIX 2.1.x/2.2.x is known to rely on the switch values.
+ */
+#define EGA_SWITCHES 0x90 /* Off-on-on-off, high-res color EGA display. */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VGA
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/vmm/pgm.h>
+#include <VBox/AssertGuest.h>
+#ifdef IN_RING3
+# include <iprt/mem.h>
+# include <iprt/ctype.h>
+#endif /* IN_RING3 */
+#include <iprt/assert.h>
+#include <iprt/asm.h>
+#include <iprt/file.h>
+#include <iprt/time.h>
+#include <iprt/string.h>
+#include <iprt/uuid.h>
+
+#include <iprt/formats/bmp.h>
+
+#include <VBox/VMMDev.h>
+#include <VBoxVideo.h>
+#include <VBox/bioslogo.h>
+
+/* should go BEFORE any other DevVGA include to make all DevVGA.h config defines be visible */
+#include "DevVGA.h"
+
+#if defined(IN_RING3) && !defined(VBOX_DEVICE_STRUCT_TESTCASE)
+# include "DevVGAModes.h"
+# include <stdio.h> /* sscan */
+#endif
+
+#include "VBoxDD.h"
+#include "VBoxDD2.h"
+
+#ifdef VBOX_WITH_VMSVGA
+#include "DevVGA-SVGA.h"
+#endif
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+
+/** The BIOS boot menu text position, X. */
+#define LOGO_F12TEXT_X 304
+/** The BIOS boot menu text position, Y. */
+#define LOGO_F12TEXT_Y 460
+
+/** Width of the "Press F12 to select boot device." bitmap.
+ Anything that exceeds the limit of F12BootText below is filled with
+ background. */
+#define LOGO_F12TEXT_WIDTH 286
+/** Height of the boot device selection bitmap, see LOGO_F12TEXT_WIDTH. */
+#define LOGO_F12TEXT_HEIGHT 12
+
+/** The BIOS logo delay time (msec). */
+#define LOGO_DELAY_TIME 2000
+
+#define LOGO_MAX_WIDTH 640
+#define LOGO_MAX_HEIGHT 480
+#define LOGO_MAX_SIZE LOGO_MAX_WIDTH * LOGO_MAX_HEIGHT * 4
+
+
+/*********************************************************************************************************************************
+* Global Variables *
+*********************************************************************************************************************************/
+#ifdef IN_RING3
+/* "Press F12 to select boot device." bitmap. */
+static const uint8_t g_abLogoF12BootText[] =
+{
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x0F, 0x7C,
+ 0xF8, 0xF0, 0x01, 0xE0, 0x81, 0x9F, 0x3F, 0x00, 0x70, 0xF8, 0x00, 0xE0, 0xC3,
+ 0x07, 0x0F, 0x1F, 0x3E, 0x70, 0x00, 0xF0, 0xE1, 0xC3, 0x07, 0x0E, 0x00, 0x6E,
+ 0x7C, 0x60, 0xE0, 0xE1, 0xC3, 0x07, 0xC6, 0x80, 0x81, 0x31, 0x63, 0xC6, 0x00,
+ 0x30, 0x80, 0x61, 0x0C, 0x00, 0x36, 0x63, 0x00, 0x8C, 0x19, 0x83, 0x61, 0xCC,
+ 0x18, 0x36, 0x00, 0xCC, 0x8C, 0x19, 0xC3, 0x06, 0xC0, 0x8C, 0x31, 0x3C, 0x30,
+ 0x8C, 0x19, 0x83, 0x31, 0x60, 0x60, 0x00, 0x0C, 0x18, 0x00, 0x0C, 0x60, 0x18,
+ 0x00, 0x80, 0xC1, 0x18, 0x00, 0x30, 0x06, 0x60, 0x18, 0x30, 0x80, 0x01, 0x00,
+ 0x33, 0x63, 0xC6, 0x30, 0x00, 0x30, 0x63, 0x80, 0x19, 0x0C, 0x03, 0x06, 0x00,
+ 0x0C, 0x18, 0x18, 0xC0, 0x81, 0x03, 0x00, 0x03, 0x18, 0x0C, 0x00, 0x60, 0x30,
+ 0x06, 0x00, 0x87, 0x01, 0x18, 0x06, 0x0C, 0x60, 0x00, 0xC0, 0xCC, 0x98, 0x31,
+ 0x0C, 0x00, 0xCC, 0x18, 0x30, 0x0C, 0xC3, 0x80, 0x01, 0x00, 0x03, 0x66, 0xFE,
+ 0x18, 0x30, 0x00, 0xC0, 0x02, 0x06, 0x06, 0x00, 0x18, 0x8C, 0x01, 0x60, 0xE0,
+ 0x0F, 0x86, 0x3F, 0x03, 0x18, 0x00, 0x30, 0x33, 0x66, 0x0C, 0x03, 0x00, 0x33,
+ 0xFE, 0x0C, 0xC3, 0x30, 0xE0, 0x0F, 0xC0, 0x87, 0x9B, 0x31, 0x63, 0xC6, 0x00,
+ 0xF0, 0x80, 0x01, 0x03, 0x00, 0x06, 0x63, 0x00, 0x8C, 0x19, 0x83, 0x61, 0xCC,
+ 0x18, 0x06, 0x00, 0x6C, 0x8C, 0x19, 0xC3, 0x00, 0x80, 0x8D, 0x31, 0xC3, 0x30,
+ 0x8C, 0x19, 0x03, 0x30, 0xB3, 0xC3, 0x87, 0x0F, 0x1F, 0x00, 0x2C, 0x60, 0x80,
+ 0x01, 0xE0, 0x87, 0x0F, 0x00, 0x3E, 0x7C, 0x60, 0xF0, 0xE1, 0xE3, 0x07, 0x00,
+ 0x0F, 0x3E, 0x7C, 0xFC, 0x00, 0xC0, 0xC3, 0xC7, 0x30, 0x0E, 0x3E, 0x7C, 0x00,
+ 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x1E, 0xC0, 0x00, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0xC0, 0x00, 0x00, 0x00,
+ 0x0C, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xC0, 0x0C, 0x87, 0x31, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x30,
+ 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xF8, 0x83, 0xC1, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00,
+ 0x00, 0x04, 0x00, 0x0E, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+#endif /* IN_RING3 */
+
+#ifndef VBOX_DEVICE_STRUCT_TESTCASE /* Till the end of the file - doesn't count indent wise. */
+
+#ifdef _MSC_VER
+# pragma warning(push)
+# pragma warning(disable:4310 4245) /* Buggy warnings: cast truncates constant value; conversion from 'int' to 'const uint8_t', signed/unsigned mismatch */
+#endif
+
+/* force some bits to zero */
+static const uint8_t sr_mask[8] = {
+ (uint8_t)~0xfc,
+ (uint8_t)~0xc2,
+ (uint8_t)~0xf0,
+ (uint8_t)~0xc0,
+ (uint8_t)~0xf1,
+ (uint8_t)~0xff,
+ (uint8_t)~0xff,
+ (uint8_t)~0x01,
+};
+
+static const uint8_t gr_mask[16] = {
+ (uint8_t)~0xf0, /* 0x00 */
+ (uint8_t)~0xf0, /* 0x01 */
+ (uint8_t)~0xf0, /* 0x02 */
+ (uint8_t)~0xe0, /* 0x03 */
+ (uint8_t)~0xfc, /* 0x04 */
+ (uint8_t)~0x84, /* 0x05 */
+ (uint8_t)~0xf0, /* 0x06 */
+ (uint8_t)~0xf0, /* 0x07 */
+ (uint8_t)~0x00, /* 0x08 */
+ (uint8_t)~0xff, /* 0x09 */
+ (uint8_t)~0xff, /* 0x0a */
+ (uint8_t)~0xff, /* 0x0b */
+ (uint8_t)~0xff, /* 0x0c */
+ (uint8_t)~0xff, /* 0x0d */
+ (uint8_t)~0xff, /* 0x0e */
+ (uint8_t)~0xff, /* 0x0f */
+};
+
+#ifdef _MSC_VER
+# pragma warning(pop)
+#endif
+
+#define cbswap_32(__x) \
+ ((uint32_t)((((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \
+ (((uint32_t)(__x) & (uint32_t)0x0000ff00UL) << 8) | \
+ (((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >> 8) | \
+ (((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) ))
+
+#ifdef WORDS_BIGENDIAN
+# define PAT(x) cbswap_32(x)
+#else
+# define PAT(x) (x)
+#endif
+
+#ifdef WORDS_BIGENDIAN
+# define BIG 1
+#else
+# define BIG 0
+#endif
+
+#ifdef WORDS_BIGENDIAN
+#define GET_PLANE(data, p) (((data) >> (24 - (p) * 8)) & 0xff)
+#else
+#define GET_PLANE(data, p) (((data) >> ((p) * 8)) & 0xff)
+#endif
+
+static const uint32_t mask16[16] = {
+ PAT(0x00000000),
+ PAT(0x000000ff),
+ PAT(0x0000ff00),
+ PAT(0x0000ffff),
+ PAT(0x00ff0000),
+ PAT(0x00ff00ff),
+ PAT(0x00ffff00),
+ PAT(0x00ffffff),
+ PAT(0xff000000),
+ PAT(0xff0000ff),
+ PAT(0xff00ff00),
+ PAT(0xff00ffff),
+ PAT(0xffff0000),
+ PAT(0xffff00ff),
+ PAT(0xffffff00),
+ PAT(0xffffffff),
+};
+
+#undef PAT
+
+#ifdef WORDS_BIGENDIAN
+# define PAT(x) (x)
+#else
+# define PAT(x) cbswap_32(x)
+#endif
+
+#ifdef IN_RING3
+
+static const uint32_t dmask16[16] = {
+ PAT(0x00000000),
+ PAT(0x000000ff),
+ PAT(0x0000ff00),
+ PAT(0x0000ffff),
+ PAT(0x00ff0000),
+ PAT(0x00ff00ff),
+ PAT(0x00ffff00),
+ PAT(0x00ffffff),
+ PAT(0xff000000),
+ PAT(0xff0000ff),
+ PAT(0xff00ff00),
+ PAT(0xff00ffff),
+ PAT(0xffff0000),
+ PAT(0xffff00ff),
+ PAT(0xffffff00),
+ PAT(0xffffffff),
+};
+
+static const uint32_t dmask4[4] = {
+ PAT(0x00000000),
+ PAT(0x0000ffff),
+ PAT(0xffff0000),
+ PAT(0xffffffff),
+};
+
+static uint32_t expand4[256];
+static uint16_t expand2[256];
+static uint8_t expand4to8[16];
+
+#endif /* IN_RING3 */
+
+
+/**
+ * Mark a page in VGA A0000-AFFFF range as remapped.
+ *
+ * @param pThis VGA instance data.
+ * @param offVGAMem The offset within VGA memory.
+ */
+DECLINLINE(void) vgaMarkRemapped(PVGASTATE pThis, RTGCPHYS offVGAMem)
+{
+ AssertMsg(offVGAMem < _64K, ("offVGAMem = %p > 64K\n", offVGAMem));
+ ASMBitSet(&pThis->bmPageMapBitmap, offVGAMem >> GUEST_PAGE_SHIFT);
+ pThis->fRemappedVGA = true;
+}
+
+/**
+ * Checks if a page in VGA A0000-AFFFF range is remapped.
+ *
+ * @returns true if remapped.
+ * @returns false if not remapped (accesses will trap).
+ * @param pThis VGA instance data.
+ * @param offVGAMem The offset within VGA memory.
+ */
+DECLINLINE(bool) vgaIsRemapped(PVGASTATE pThis, RTGCPHYS offVGAMem)
+{
+ AssertMsg(offVGAMem < _64K, ("offVGAMem = %p > 64K\n", offVGAMem));
+ return ASMBitTest(&pThis->bmPageMapBitmap, offVGAMem >> GUEST_PAGE_SHIFT);
+}
+
+/**
+ * Reset page remap tracking bits.
+ *
+ * @param pThis VGA instance data.
+ */
+DECLINLINE(void) vgaResetRemapped(PVGASTATE pThis)
+{
+ pThis->fRemappedVGA = false;
+ ASMBitClearRange(&pThis->bmPageMapBitmap, 0, _64K >> GUEST_PAGE_SHIFT);
+}
+
+/**
+ * Set a VRAM page dirty.
+ *
+ * @param pThis VGA instance data.
+ * @param offVRAM The VRAM offset of the page to set.
+ */
+DECLINLINE(void) vgaR3MarkDirty(PVGASTATE pThis, RTGCPHYS offVRAM)
+{
+ AssertMsg(offVRAM < pThis->vram_size, ("offVRAM = %p, pThis->vram_size = %p\n", offVRAM, pThis->vram_size));
+ ASMBitSet(&pThis->bmDirtyBitmap[0], offVRAM >> GUEST_PAGE_SHIFT);
+ pThis->fHasDirtyBits = true;
+}
+
+#ifdef IN_RING3
+
+/**
+ * Tests if a VRAM page is dirty.
+ *
+ * @returns true if dirty.
+ * @returns false if clean.
+ * @param pThis VGA instance data.
+ * @param offVRAM The VRAM offset of the page to check.
+ */
+DECLINLINE(bool) vgaR3IsDirty(PVGASTATE pThis, RTGCPHYS offVRAM)
+{
+ AssertMsg(offVRAM < pThis->vram_size, ("offVRAM = %p, pThis->vram_size = %p\n", offVRAM, pThis->vram_size));
+ return ASMBitTest(&pThis->bmDirtyBitmap[0], offVRAM >> GUEST_PAGE_SHIFT);
+}
+
+
+/**
+ * Reset dirty flags in a give range.
+ *
+ * @param pThis VGA instance data.
+ * @param offVRAMStart Offset into the VRAM buffer of the first page.
+ * @param offVRAMEnd Offset into the VRAM buffer of the last page - exclusive.
+ */
+DECLINLINE(void) vgaR3ResetDirty(PVGASTATE pThis, RTGCPHYS offVRAMStart, RTGCPHYS offVRAMEnd)
+{
+ Assert(offVRAMStart < pThis->vram_size);
+ Assert(offVRAMEnd <= pThis->vram_size);
+ Assert(offVRAMStart < offVRAMEnd);
+ ASMBitClearRange(&pThis->bmDirtyBitmap[0], offVRAMStart >> GUEST_PAGE_SHIFT, offVRAMEnd >> GUEST_PAGE_SHIFT);
+}
+
+
+/**
+ * Queries the VRAM dirty bits and resets the monitoring.
+ */
+static void vgaR3UpdateDirtyBitsAndResetMonitoring(PPDMDEVINS pDevIns, PVGASTATE pThis)
+{
+ size_t const cbBitmap = RT_ALIGN_Z(RT_MIN(pThis->vram_size, VGA_VRAM_MAX), GUEST_PAGE_SIZE * 64) / GUEST_PAGE_SIZE / 8;
+
+ /*
+ * If we don't have any dirty bits from MMIO accesses, we can just query
+ * straight into the dirty buffer.
+ */
+ if (!pThis->fHasDirtyBits)
+ {
+ int rc = PDMDevHlpMmio2QueryAndResetDirtyBitmap(pDevIns, pThis->hMmio2VRam, pThis->bmDirtyBitmap, cbBitmap);
+ AssertRC(rc);
+ }
+ /*
+ * Otherwise we'll have to query and merge the two.
+ */
+ else
+ {
+ uint64_t bmDirtyPages[VGA_VRAM_MAX / GUEST_PAGE_SIZE / 64]; /* (256 MB VRAM -> 8KB bitmap) */
+ int rc = PDMDevHlpMmio2QueryAndResetDirtyBitmap(pDevIns, pThis->hMmio2VRam, bmDirtyPages, cbBitmap);
+ if (RT_SUCCESS(rc))
+ {
+ /** @todo could use ORPS or VORPS here, I think. */
+ uint64_t *pbmDst = pThis->bmDirtyBitmap;
+ size_t const cTodo = cbBitmap / sizeof(uint64_t);
+
+ /* Do 64 bytes at a time first. */
+ size_t const cTodoFirst = cTodo & ~(size_t)7;
+ size_t idx;
+ for (idx = 0; idx < cTodoFirst; idx += 8)
+ {
+ pbmDst[idx + 0] |= bmDirtyPages[idx + 0];
+ pbmDst[idx + 1] |= bmDirtyPages[idx + 1];
+ pbmDst[idx + 2] |= bmDirtyPages[idx + 2];
+ pbmDst[idx + 3] |= bmDirtyPages[idx + 3];
+ pbmDst[idx + 4] |= bmDirtyPages[idx + 4];
+ pbmDst[idx + 5] |= bmDirtyPages[idx + 5];
+ pbmDst[idx + 6] |= bmDirtyPages[idx + 6];
+ pbmDst[idx + 7] |= bmDirtyPages[idx + 7];
+ }
+
+ /* Then do a mopup of anything remaining. */
+ switch (cTodo - idx)
+ {
+ case 7: pbmDst[idx + 6] |= bmDirtyPages[idx + 6]; RT_FALL_THRU();
+ case 6: pbmDst[idx + 5] |= bmDirtyPages[idx + 5]; RT_FALL_THRU();
+ case 5: pbmDst[idx + 4] |= bmDirtyPages[idx + 4]; RT_FALL_THRU();
+ case 4: pbmDst[idx + 3] |= bmDirtyPages[idx + 3]; RT_FALL_THRU();
+ case 3: pbmDst[idx + 2] |= bmDirtyPages[idx + 2]; RT_FALL_THRU();
+ case 2: pbmDst[idx + 1] |= bmDirtyPages[idx + 1]; RT_FALL_THRU();
+ case 1: pbmDst[idx] |= bmDirtyPages[idx]; break;
+ case 0: break;
+ default: AssertFailedBreak();
+ }
+
+ pThis->fHasDirtyBits = false;
+ }
+ }
+}
+
+#endif /* IN_RING3 */
+
+/* Update the values needed for calculating Vertical Retrace and
+ * Display Enable status bits more or less accurately. The Display Enable
+ * bit is set (indicating *disabled* display signal) when either the
+ * horizontal (hblank) or vertical (vblank) blanking is active. The
+ * Vertical Retrace bit is set when vertical retrace (vsync) is active.
+ * Unless the CRTC is horribly misprogrammed, vsync implies vblank.
+ */
+static void vga_update_retrace_state(PVGASTATE pThis)
+{
+ unsigned htotal_cclks, vtotal_lines, chars_per_sec;
+ unsigned hblank_start_cclk, hblank_end_cclk, hblank_width, hblank_skew_cclks;
+ unsigned vsync_start_line, vsync_end, vsync_width;
+ unsigned vblank_start_line, vblank_end, vblank_width;
+ unsigned char_dots, clock_doubled, clock_index;
+ const int clocks[] = {25175000, 28322000, 25175000, 25175000};
+ vga_retrace_s *r = &pThis->retrace_state;
+
+ /* For horizontal timings, we only care about the blanking start/end. */
+ htotal_cclks = pThis->cr[0x00] + 5;
+ hblank_start_cclk = pThis->cr[0x02];
+ hblank_end_cclk = (pThis->cr[0x03] & 0x1f) + ((pThis->cr[0x05] & 0x80) >> 2);
+ hblank_skew_cclks = (pThis->cr[0x03] >> 5) & 3;
+
+ /* For vertical timings, we need both the blanking start/end... */
+ vtotal_lines = pThis->cr[0x06] + ((pThis->cr[0x07] & 1) << 8) + ((pThis->cr[0x07] & 0x20) << 4) + 2;
+ vblank_start_line = pThis->cr[0x15] + ((pThis->cr[0x07] & 8) << 5) + ((pThis->cr[0x09] & 0x20) << 4);
+ vblank_end = pThis->cr[0x16];
+ /* ... and the vertical retrace (vsync) start/end. */
+ vsync_start_line = pThis->cr[0x10] + ((pThis->cr[0x07] & 4) << 6) + ((pThis->cr[0x07] & 0x80) << 2);
+ vsync_end = pThis->cr[0x11] & 0xf;
+
+ /* Calculate the blanking and sync widths. The way it's implemented in
+ * the VGA with limited-width compare counters is quite a piece of work.
+ */
+ hblank_width = (hblank_end_cclk - hblank_start_cclk) & 0x3f;/* 6 bits */
+ vblank_width = (vblank_end - vblank_start_line) & 0xff; /* 8 bits */
+ vsync_width = (vsync_end - vsync_start_line) & 0xf; /* 4 bits */
+
+ /* Calculate the dot and character clock rates. */
+ clock_doubled = (pThis->sr[0x01] >> 3) & 1; /* Clock doubling bit. */
+ clock_index = (pThis->msr >> 2) & 3;
+ char_dots = (pThis->sr[0x01] & 1) ? 8 : 9; /* 8 or 9 dots per cclk. */
+
+ chars_per_sec = clocks[clock_index] / char_dots;
+ Assert(chars_per_sec); /* Can't possibly be zero. */
+
+ htotal_cclks <<= clock_doubled;
+
+ /* Calculate the number of cclks per entire frame. */
+ r->frame_cclks = vtotal_lines * htotal_cclks;
+ Assert(r->frame_cclks); /* Can't possibly be zero. */
+
+ if (r->v_freq_hz) { /* Could be set to emulate a specific rate. */
+ r->cclk_ns = 1000000000 / (r->frame_cclks * r->v_freq_hz);
+ } else {
+ r->cclk_ns = 1000000000 / chars_per_sec;
+ }
+ Assert(r->cclk_ns);
+ r->frame_ns = r->frame_cclks * r->cclk_ns;
+
+ /* Calculate timings in cclks/lines. Stored but not directly used. */
+ r->hb_start = hblank_start_cclk + hblank_skew_cclks;
+ r->hb_end = hblank_start_cclk + hblank_width + hblank_skew_cclks;
+ r->h_total = htotal_cclks;
+ Assert(r->h_total); /* Can't possibly be zero. */
+
+ r->vb_start = vblank_start_line;
+ r->vb_end = vblank_start_line + vblank_width + 1;
+ r->vs_start = vsync_start_line;
+ r->vs_end = vsync_start_line + vsync_width + 1;
+
+ /* Calculate timings in nanoseconds. For easier comparisons, the frame
+ * is considered to start at the beginning of the vertical and horizontal
+ * blanking period.
+ */
+ r->h_total_ns = htotal_cclks * r->cclk_ns;
+ r->hb_end_ns = hblank_width * r->cclk_ns;
+ r->vb_end_ns = vblank_width * r->h_total_ns;
+ r->vs_start_ns = (r->vs_start - r->vb_start) * r->h_total_ns;
+ r->vs_end_ns = (r->vs_end - r->vb_start) * r->h_total_ns;
+ Assert(r->h_total_ns); /* See h_total. */
+}
+
+static uint8_t vga_retrace(PPDMDEVINS pDevIns, PVGASTATE pThis)
+{
+ vga_retrace_s *r = &pThis->retrace_state;
+
+ if (r->frame_ns) {
+ uint8_t val = pThis->st01 & ~(ST01_V_RETRACE | ST01_DISP_ENABLE);
+ unsigned cur_frame_ns, cur_line_ns;
+ uint64_t time_ns;
+
+ time_ns = PDMDevHlpTMTimeVirtGetNano(pDevIns);
+
+ /* Determine the time within the frame. */
+ cur_frame_ns = time_ns % r->frame_ns;
+
+ /* See if we're in the vertical blanking period... */
+ if (cur_frame_ns < r->vb_end_ns) {
+ val |= ST01_DISP_ENABLE;
+ /* ... and additionally in the vertical sync period. */
+ if (cur_frame_ns >= r->vs_start_ns && cur_frame_ns <= r->vs_end_ns)
+ val |= ST01_V_RETRACE;
+ } else {
+ /* Determine the time within the current scanline. */
+ cur_line_ns = cur_frame_ns % r->h_total_ns;
+ /* See if we're in the horizontal blanking period. */
+ if (cur_line_ns < r->hb_end_ns)
+ val |= ST01_DISP_ENABLE;
+ }
+ return val;
+ } else {
+ return pThis->st01 ^ (ST01_V_RETRACE | ST01_DISP_ENABLE);
+ }
+}
+
+int vga_ioport_invalid(PVGASTATE pThis, uint32_t addr)
+{
+ if (pThis->msr & MSR_COLOR_EMULATION) {
+ /* Color */
+ return (addr >= 0x3b0 && addr <= 0x3bf);
+ } else {
+ /* Monochrome */
+ return (addr >= 0x3d0 && addr <= 0x3df);
+ }
+}
+
+static uint32_t vga_ioport_read(PPDMDEVINS pDevIns, PVGASTATE pThis, uint32_t addr)
+{
+ int val, index;
+
+ /* check port range access depending on color/monochrome mode */
+ if (vga_ioport_invalid(pThis, addr)) {
+ val = 0xff;
+ Log(("VGA: following read ignored\n"));
+ } else {
+ switch(addr) {
+ case 0x3c0:
+ if (pThis->ar_flip_flop == 0) {
+ val = pThis->ar_index;
+ } else {
+ val = 0;
+ }
+ break;
+ case 0x3c1:
+ index = pThis->ar_index & 0x1f;
+ if (index < 21)
+ val = pThis->ar[index];
+ else
+ val = 0;
+ break;
+ case 0x3c2:
+ val = pThis->st00;
+ break;
+ case 0x3c4:
+ val = pThis->sr_index;
+ break;
+ case 0x3c5:
+ val = pThis->sr[pThis->sr_index];
+ Log2(("vga: read SR%x = 0x%02x\n", pThis->sr_index, val));
+ break;
+ case 0x3c7:
+ val = pThis->dac_state;
+ break;
+ case 0x3c8:
+ val = pThis->dac_write_index;
+ break;
+ case 0x3c9:
+ Assert(pThis->dac_sub_index < 3);
+ val = pThis->palette[pThis->dac_read_index * 3 + pThis->dac_sub_index];
+ if (++pThis->dac_sub_index == 3) {
+ pThis->dac_sub_index = 0;
+ pThis->dac_read_index++;
+ }
+ break;
+ case 0x3ca:
+ val = pThis->fcr;
+ break;
+ case 0x3cc:
+ val = pThis->msr;
+ break;
+ case 0x3ce:
+ val = pThis->gr_index;
+ break;
+ case 0x3cf:
+ val = pThis->gr[pThis->gr_index];
+ Log2(("vga: read GR%x = 0x%02x\n", pThis->gr_index, val));
+ break;
+ case 0x3b4:
+ case 0x3d4:
+ val = pThis->cr_index;
+ break;
+ case 0x3b5:
+ case 0x3d5:
+ val = pThis->cr[pThis->cr_index];
+ Log2(("vga: read CR%x = 0x%02x\n", pThis->cr_index, val));
+ break;
+ case 0x3ba:
+ case 0x3da:
+ val = pThis->st01 = vga_retrace(pDevIns, pThis);
+ pThis->ar_flip_flop = 0;
+ break;
+ default:
+ val = 0x00;
+ break;
+ }
+ }
+ Log(("VGA: read addr=0x%04x data=0x%02x\n", addr, val));
+ return val;
+}
+
+static void vga_ioport_write(PPDMDEVINS pDevIns, PVGASTATE pThis, uint32_t addr, uint32_t val)
+{
+ int index;
+
+ Log(("VGA: write addr=0x%04x data=0x%02x\n", addr, val));
+
+ /* check port range access depending on color/monochrome mode */
+ if (vga_ioport_invalid(pThis, addr)) {
+ Log(("VGA: previous write ignored\n"));
+ return;
+ }
+
+ switch(addr) {
+ case 0x3c0:
+ case 0x3c1:
+ if (pThis->ar_flip_flop == 0) {
+ val &= 0x3f;
+ pThis->ar_index = val;
+ } else {
+ index = pThis->ar_index & 0x1f;
+ switch(index) {
+ case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
+ case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
+ pThis->ar[index] = val & 0x3f;
+ break;
+ case 0x10:
+ pThis->ar[index] = val & ~0x10;
+ break;
+ case 0x11:
+ pThis->ar[index] = val;
+ break;
+ case 0x12:
+ pThis->ar[index] = val & ~0xc0;
+ break;
+ case 0x13:
+ pThis->ar[index] = val & ~0xf0;
+ break;
+ case 0x14:
+ pThis->ar[index] = val & ~0xf0;
+ break;
+ default:
+ break;
+ }
+ }
+ pThis->ar_flip_flop ^= 1;
+ break;
+ case 0x3c2:
+ pThis->msr = val & ~0x10;
+ if (pThis->fRealRetrace)
+ vga_update_retrace_state(pThis);
+ /* The two clock select bits also determine which of the four switches
+ * is reflected in bit 4 of Input Status Register 0.
+ * This is EGA compatible behavior. See the IBM EGA Tech Ref.
+ */
+ pThis->st00 = (pThis->st00 & ~0x10) | ((EGA_SWITCHES >> ((val >> 2) & 0x3) & 0x10));
+ break;
+ case 0x3c4:
+ pThis->sr_index = val & 7;
+ break;
+ case 0x3c5:
+ Log2(("vga: write SR%x = 0x%02x\n", pThis->sr_index, val));
+ pThis->sr[pThis->sr_index] = val & sr_mask[pThis->sr_index];
+ /* Allow SR07 to disable VBE. */
+ if (pThis->sr_index == 0x07 && !(val & 1))
+ {
+ pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] = VBE_DISPI_DISABLED;
+ pThis->bank_offset = 0;
+ }
+ if (pThis->fRealRetrace && pThis->sr_index == 0x01)
+ vga_update_retrace_state(pThis);
+#ifndef IN_RC
+ /* The VGA region is (could be) affected by this change; reset all aliases we've created. */
+ if ( pThis->sr_index == 4 /* mode */
+ || pThis->sr_index == 2 /* plane mask */)
+ {
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+ }
+#endif
+ break;
+ case 0x3c7:
+ pThis->dac_read_index = val;
+ pThis->dac_sub_index = 0;
+ pThis->dac_state = 3;
+ break;
+ case 0x3c8:
+ pThis->dac_write_index = val;
+ pThis->dac_sub_index = 0;
+ pThis->dac_state = 0;
+ break;
+ case 0x3c9:
+ Assert(pThis->dac_sub_index < 3);
+ pThis->dac_cache[pThis->dac_sub_index] = val;
+ if (++pThis->dac_sub_index == 3) {
+ memcpy(&pThis->palette[pThis->dac_write_index * 3], pThis->dac_cache, 3);
+ pThis->dac_sub_index = 0;
+ pThis->dac_write_index++;
+ }
+ break;
+ case 0x3ce:
+ pThis->gr_index = val & 0x0f;
+ break;
+ case 0x3cf:
+ Log2(("vga: write GR%x = 0x%02x\n", pThis->gr_index, val));
+ Assert(pThis->gr_index < RT_ELEMENTS(gr_mask));
+ pThis->gr[pThis->gr_index] = val & gr_mask[pThis->gr_index];
+
+#ifndef IN_RC
+ /* The VGA region is (could be) affected by this change; reset all aliases we've created. */
+ if (pThis->gr_index == 6 /* memory map mode */)
+ {
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+ }
+#endif
+ break;
+
+ case 0x3b4:
+ case 0x3d4:
+ pThis->cr_index = val;
+ break;
+ case 0x3b5:
+ case 0x3d5:
+ Log2(("vga: write CR%x = 0x%02x\n", pThis->cr_index, val));
+ /* handle CR0-7 protection */
+ if ((pThis->cr[0x11] & 0x80) && pThis->cr_index <= 7) {
+ /* can always write bit 4 of CR7 */
+ if (pThis->cr_index == 7)
+ pThis->cr[7] = (pThis->cr[7] & ~0x10) | (val & 0x10);
+ return;
+ }
+ pThis->cr[pThis->cr_index] = val;
+
+ if (pThis->fRealRetrace) {
+ /* The following registers are only updated during a mode set. */
+ switch(pThis->cr_index) {
+ case 0x00:
+ case 0x02:
+ case 0x03:
+ case 0x05:
+ case 0x06:
+ case 0x07:
+ case 0x09:
+ case 0x10:
+ case 0x11:
+ case 0x15:
+ case 0x16:
+ vga_update_retrace_state(pThis);
+ break;
+ }
+ }
+ break;
+ case 0x3ba:
+ case 0x3da:
+ pThis->fcr = val & 0x10;
+ break;
+ }
+}
+
+#ifdef CONFIG_BOCHS_VBE
+
+static uint32_t vbe_read_cfg(PVGASTATE pThis)
+{
+ const uint16_t u16Cfg = pThis->vbe_regs[VBE_DISPI_INDEX_CFG];
+ const uint16_t u16Id = u16Cfg & VBE_DISPI_CFG_MASK_ID;
+ const bool fQuerySupport = RT_BOOL(u16Cfg & VBE_DISPI_CFG_MASK_SUPPORT);
+
+ uint32_t val = 0;
+ switch (u16Id)
+ {
+ case VBE_DISPI_CFG_ID_VERSION: val = 1; break;
+ case VBE_DISPI_CFG_ID_VRAM_SIZE: val = pThis->vram_size; break;
+ case VBE_DISPI_CFG_ID_3D: val = pThis->f3DEnabled; break;
+# ifdef VBOX_WITH_VMSVGA
+ case VBE_DISPI_CFG_ID_VMSVGA: val = pThis->fVMSVGAEnabled; break;
+ case VBE_DISPI_CFG_ID_VMSVGA_DX: val = pThis->fVMSVGA10; break;
+# endif
+ default:
+ return 0; /* Not supported. */
+ }
+
+ return fQuerySupport ? 1 : val;
+}
+
+static uint32_t vbe_ioport_read_index(PVGASTATE pThis, uint32_t addr)
+{
+ uint32_t val = pThis->vbe_index;
+ NOREF(addr);
+ return val;
+}
+
+static uint32_t vbe_ioport_read_data(PVGASTATE pThis, uint32_t addr)
+{
+ uint32_t val;
+ NOREF(addr);
+
+ uint16_t const idxVbe = pThis->vbe_index;
+ if (idxVbe < VBE_DISPI_INDEX_NB)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_GETCAPS)
+ {
+ switch (idxVbe)
+ {
+ /* XXX: do not hardcode ? */
+ case VBE_DISPI_INDEX_XRES:
+ val = VBE_DISPI_MAX_XRES;
+ break;
+ case VBE_DISPI_INDEX_YRES:
+ val = VBE_DISPI_MAX_YRES;
+ break;
+ case VBE_DISPI_INDEX_BPP:
+ val = VBE_DISPI_MAX_BPP;
+ break;
+ default:
+ Assert(idxVbe < VBE_DISPI_INDEX_NB);
+ val = pThis->vbe_regs[idxVbe];
+ break;
+ }
+ }
+ else
+ {
+ switch (idxVbe)
+ {
+ case VBE_DISPI_INDEX_VBOX_VIDEO:
+ /* Reading from the port means that the old additions are requesting the number of monitors. */
+ val = 1;
+ break;
+ case VBE_DISPI_INDEX_CFG:
+ val = vbe_read_cfg(pThis);
+ break;
+ default:
+ Assert(idxVbe < VBE_DISPI_INDEX_NB);
+ val = pThis->vbe_regs[idxVbe];
+ break;
+ }
+ }
+ }
+ else
+ val = 0;
+ Log(("VBE: read index=0x%x val=0x%x\n", idxVbe, val));
+ return val;
+}
+
+# define VBE_PITCH_ALIGN 4 /* Align pitch to 32 bits - Qt requires that. */
+
+/* Calculate scanline pitch based on bit depth and width in pixels. */
+static uint32_t calc_line_pitch(uint16_t bpp, uint16_t width)
+{
+ uint32_t pitch, aligned_pitch;
+
+ if (bpp <= 4)
+ pitch = width >> 1;
+ else
+ pitch = width * ((bpp + 7) >> 3);
+
+ /* Align the pitch to some sensible value. */
+ aligned_pitch = (pitch + (VBE_PITCH_ALIGN - 1)) & ~(VBE_PITCH_ALIGN - 1);
+ if (aligned_pitch != pitch)
+ Log(("VBE: Line pitch %d aligned to %d bytes\n", pitch, aligned_pitch));
+
+ return aligned_pitch;
+}
+
+static void recalculate_data(PVGASTATE pThis)
+{
+ uint16_t cBPP = pThis->vbe_regs[VBE_DISPI_INDEX_BPP];
+ uint16_t cVirtWidth = pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH];
+ uint16_t cX = pThis->vbe_regs[VBE_DISPI_INDEX_XRES];
+ if (!cBPP || !cX)
+ return; /* Not enough data has been set yet. */
+ uint32_t cbLinePitch = calc_line_pitch(cBPP, cVirtWidth);
+ if (!cbLinePitch)
+ cbLinePitch = calc_line_pitch(cBPP, cX);
+ if (!cbLinePitch)
+ return;
+ uint32_t cVirtHeight = pThis->vram_size / cbLinePitch;
+ uint16_t offX = pThis->vbe_regs[VBE_DISPI_INDEX_X_OFFSET];
+ uint16_t offY = pThis->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET];
+ uint32_t offStart = cbLinePitch * offY;
+ if (cBPP == 4)
+ offStart += offX >> 1;
+ else
+ offStart += offX * ((cBPP + 7) >> 3);
+ offStart >>= 2;
+ pThis->vbe_line_offset = RT_MIN(cbLinePitch, pThis->vram_size);
+ pThis->vbe_start_addr = RT_MIN(offStart, pThis->vram_size);
+
+ /* The VBE_DISPI_INDEX_VIRT_HEIGHT is used to prevent setting resolution bigger than
+ * the VRAM size permits. It is used instead of VBE_DISPI_INDEX_YRES *only* in case
+ * pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] < pThis->vbe_regs[VBE_DISPI_INDEX_YRES].
+ * Note that VBE_DISPI_INDEX_VIRT_HEIGHT has to be clipped to UINT16_MAX, which happens
+ * with small resolutions and big VRAM. */
+ pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] = cVirtHeight >= UINT16_MAX ? UINT16_MAX : (uint16_t)cVirtHeight;
+}
+
+static void vbe_ioport_write_index(PVGASTATE pThis, uint32_t addr, uint32_t val)
+{
+ pThis->vbe_index = val;
+ NOREF(addr);
+}
+
+static VBOXSTRICTRC vbe_ioport_write_data(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t addr, uint32_t val)
+{
+ uint32_t max_bank;
+ RT_NOREF(pThisCC, addr);
+
+ if (pThis->vbe_index <= VBE_DISPI_INDEX_NB) {
+ bool fRecalculate = false;
+ Log(("VBE: write index=0x%x val=0x%x\n", pThis->vbe_index, val));
+ switch(pThis->vbe_index) {
+ case VBE_DISPI_INDEX_ID:
+ if (val == VBE_DISPI_ID0 ||
+ val == VBE_DISPI_ID1 ||
+ val == VBE_DISPI_ID2 ||
+ val == VBE_DISPI_ID3 ||
+ val == VBE_DISPI_ID4 ||
+ /* VBox extensions. */
+ val == VBE_DISPI_ID_VBOX_VIDEO ||
+ val == VBE_DISPI_ID_ANYX ||
+# ifdef VBOX_WITH_HGSMI
+ val == VBE_DISPI_ID_HGSMI ||
+# endif
+ val == VBE_DISPI_ID_CFG)
+ {
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ }
+ break;
+ case VBE_DISPI_INDEX_XRES:
+ if (val <= VBE_DISPI_MAX_XRES)
+ {
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] = val;
+ fRecalculate = true;
+ }
+ break;
+ case VBE_DISPI_INDEX_YRES:
+ if (val <= VBE_DISPI_MAX_YRES)
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ break;
+ case VBE_DISPI_INDEX_BPP:
+ if (val == 0)
+ val = 8;
+ if (val == 4 || val == 8 || val == 15 ||
+ val == 16 || val == 24 || val == 32) {
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ fRecalculate = true;
+ }
+ break;
+ case VBE_DISPI_INDEX_BANK:
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_BPP] <= 4)
+ max_bank = pThis->vbe_bank_max >> 2; /* Each bank really covers 256K */
+ else
+ max_bank = pThis->vbe_bank_max;
+ /* Old software may pass garbage in the high byte of bank. If the maximum
+ * bank fits into a single byte, toss the high byte the user supplied.
+ */
+ if (max_bank < 0x100)
+ val &= 0xff;
+ if (val > max_bank)
+ val = max_bank;
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ pThis->bank_offset = (val << 16);
+
+# ifndef IN_RC
+ /* The VGA region is (could be) affected by this change; reset all aliases we've created. */
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+# endif
+ break;
+
+ case VBE_DISPI_INDEX_ENABLE:
+# ifndef IN_RING3
+ return VINF_IOM_R3_IOPORT_WRITE;
+# else
+ {
+ if ((val & VBE_DISPI_ENABLED) &&
+ !(pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED)) {
+ int h, shift_control;
+ /* Check the values before we screw up with a resolution which is too big or small. */
+ size_t cb = pThis->vbe_regs[VBE_DISPI_INDEX_XRES];
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_BPP] == 4)
+ cb = pThis->vbe_regs[VBE_DISPI_INDEX_XRES] >> 1;
+ else
+ cb = pThis->vbe_regs[VBE_DISPI_INDEX_XRES] * ((pThis->vbe_regs[VBE_DISPI_INDEX_BPP] + 7) >> 3);
+ cb *= pThis->vbe_regs[VBE_DISPI_INDEX_YRES];
+ uint16_t cVirtWidth = pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH];
+ if (!cVirtWidth)
+ cVirtWidth = pThis->vbe_regs[VBE_DISPI_INDEX_XRES];
+ if ( !cVirtWidth
+ || !pThis->vbe_regs[VBE_DISPI_INDEX_YRES]
+ || cb > pThis->vram_size)
+ {
+ AssertMsgFailed(("VIRT WIDTH=%d YRES=%d cb=%d vram_size=%d\n",
+ pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH], pThis->vbe_regs[VBE_DISPI_INDEX_YRES], cb, pThis->vram_size));
+ return VINF_SUCCESS; /* Note: silent failure like before */
+ }
+
+ /* When VBE interface is enabled, it is reset. */
+ pThis->vbe_regs[VBE_DISPI_INDEX_X_OFFSET] = 0;
+ pThis->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET] = 0;
+ fRecalculate = true;
+
+ /* clear the screen (should be done in BIOS) */
+ if (!(val & VBE_DISPI_NOCLEARMEM)) {
+ uint16_t cY = RT_MIN(pThis->vbe_regs[VBE_DISPI_INDEX_YRES],
+ pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT]);
+ uint16_t cbLinePitch = pThis->vbe_line_offset;
+ memset(pThisCC->pbVRam, 0,
+ cY * cbLinePitch);
+ }
+
+ /* we initialize the VGA graphic mode (should be done
+ in BIOS) */
+ pThis->gr[0x06] = (pThis->gr[0x06] & ~0x0c) | 0x05; /* graphic mode + memory map 1 */
+ pThis->cr[0x17] |= 3; /* no CGA modes */
+ pThis->cr[0x13] = pThis->vbe_line_offset >> 3;
+ /* width */
+ pThis->cr[0x01] = (cVirtWidth >> 3) - 1;
+ /* height (only meaningful if < 1024) */
+ h = pThis->vbe_regs[VBE_DISPI_INDEX_YRES] - 1;
+ pThis->cr[0x12] = h;
+ pThis->cr[0x07] = (pThis->cr[0x07] & ~0x42) |
+ ((h >> 7) & 0x02) | ((h >> 3) & 0x40);
+ /* line compare to 1023 */
+ pThis->cr[0x18] = 0xff;
+ pThis->cr[0x07] |= 0x10;
+ pThis->cr[0x09] |= 0x40;
+
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_BPP] == 4) {
+ shift_control = 0;
+ pThis->sr[0x01] &= ~8; /* no double line */
+ } else {
+ shift_control = 2;
+ pThis->sr[4] |= 0x08; /* set chain 4 mode */
+ pThis->sr[2] |= 0x0f; /* activate all planes */
+ /* Indicate non-VGA mode in SR07. */
+ pThis->sr[7] |= 1;
+ }
+ pThis->gr[0x05] = (pThis->gr[0x05] & ~0x60) | (shift_control << 5);
+ pThis->cr[0x09] &= ~0x9f; /* no double scan */
+ /* sunlover 30.05.2007
+ * The ar_index remains with bit 0x20 cleared after a switch from fullscreen
+ * DOS mode on Windows XP guest. That leads to GMODE_BLANK in vgaR3UpdateDisplay.
+ * But the VBE mode is graphics, so not a blank anymore.
+ */
+ pThis->ar_index |= 0x20;
+ } else {
+ /* XXX: the bios should do that */
+ /* sunlover 21.12.2006
+ * Here is probably more to reset. When this was executed in GC
+ * then the *update* functions could not detect a mode change.
+ * Or may be these update function should take the pThis->vbe_regs[pThis->vbe_index]
+ * into account when detecting a mode change.
+ *
+ * The 'mode reset not detected' problem is now fixed by executing the
+ * VBE_DISPI_INDEX_ENABLE case always in RING3 in order to call the
+ * LFBChange callback.
+ */
+ pThis->bank_offset = 0;
+ }
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ /*
+ * LFB video mode is either disabled or changed. Notify the display
+ * and reset VBVA.
+ */
+ pThisCC->pDrv->pfnLFBModeChange(pThisCC->pDrv, (val & VBE_DISPI_ENABLED) != 0);
+# ifdef VBOX_WITH_HGSMI
+ VBVAOnVBEChanged(pThis, pThisCC);
+# endif
+
+ /* The VGA region is (could be) affected by this change; reset all aliases we've created. */
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+ break;
+ }
+# endif /* IN_RING3 */
+ case VBE_DISPI_INDEX_VIRT_WIDTH:
+ case VBE_DISPI_INDEX_X_OFFSET:
+ case VBE_DISPI_INDEX_Y_OFFSET:
+ {
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ fRecalculate = true;
+ }
+ break;
+ case VBE_DISPI_INDEX_VBOX_VIDEO:
+# ifndef IN_RING3
+ return VINF_IOM_R3_IOPORT_WRITE;
+# else
+ /* Changes in the VGA device are minimal. The device is bypassed. The driver does all work. */
+ if (val == VBOX_VIDEO_DISABLE_ADAPTER_MEMORY)
+ pThisCC->pDrv->pfnProcessAdapterData(pThisCC->pDrv, NULL, 0);
+ else if (val == VBOX_VIDEO_INTERPRET_ADAPTER_MEMORY)
+ pThisCC->pDrv->pfnProcessAdapterData(pThisCC->pDrv, pThisCC->pbVRam, pThis->vram_size);
+ else if ((val & 0xFFFF0000) == VBOX_VIDEO_INTERPRET_DISPLAY_MEMORY_BASE)
+ pThisCC->pDrv->pfnProcessDisplayData(pThisCC->pDrv, pThisCC->pbVRam, val & 0xFFFF);
+# endif /* IN_RING3 */
+ break;
+ case VBE_DISPI_INDEX_CFG:
+ pThis->vbe_regs[pThis->vbe_index] = val;
+ break;
+ default:
+ break;
+ }
+
+ if (fRecalculate)
+ recalculate_data(pThis);
+ }
+ return VINF_SUCCESS;
+}
+
+#endif /* CONFIG_BOCHS_VBE */
+
+/* called for accesses between 0xa0000 and 0xc0000 */
+static uint32_t vga_mem_readb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, RTGCPHYS addr, int *prc)
+{
+ int plane;
+ uint32_t ret;
+
+ Log3(("vga: read [0x%x] -> ", addr));
+
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RZ
+ /* VMSVGA keeps the VGA and SVGA framebuffers separate unlike this boch-based
+ VGA implementation, so we fake it by going to ring-3 and using a heap buffer. */
+ if (!pThis->svga.fEnabled)
+ { /*likely*/ }
+ else
+ {
+ *prc = VINF_IOM_R3_MMIO_READ;
+ return 0;
+ }
+#endif
+
+
+ /* convert to VGA memory offset */
+#ifndef IN_RC
+ RTGCPHYS GCPhys = addr; /* save original address */
+#endif
+ addr &= 0x1ffff;
+
+ int const memory_map_mode = (pThis->gr[6] >> 2) & 3;
+ switch(memory_map_mode) {
+ case 0:
+ break;
+ case 1:
+ if (addr >= 0x10000)
+ return 0xff;
+ addr += pThis->bank_offset;
+ break;
+ case 2:
+ addr -= 0x10000;
+ if (addr >= 0x8000)
+ return 0xff;
+ break;
+ default:
+ case 3:
+ addr -= 0x18000;
+ if (addr >= 0x8000)
+ return 0xff;
+ break;
+ }
+
+ if (pThis->sr[4] & 0x08) {
+ /* chain 4 mode : simplest access */
+#ifndef IN_RC
+ /* If all planes are accessible, then map the page to the frame buffer and make it writable. */
+ if ( (pThis->sr[2] & 3) == 3
+ && !vgaIsRemapped(pThis, GCPhys - 0xa0000)
+ && pThis->GCPhysVRAM)
+ {
+ /** @todo only allow read access (doesn't work now) */
+ STAM_COUNTER_INC(&pThis->StatMapPage);
+ PDMDevHlpMmioMapMmio2Page(pDevIns, pThis->hMmioLegacy, GCPhys - 0xa0000,
+ pThis->hMmio2VRam, addr, X86_PTE_RW | X86_PTE_P);
+ /* Set as dirty as write accesses won't be noticed now. */
+ vgaR3MarkDirty(pThis, addr);
+ vgaMarkRemapped(pThis, GCPhys - 0xa0000);
+ }
+#endif /* !IN_RC */
+ VERIFY_VRAM_READ_OFF_RETURN(pThis, addr, *prc);
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ ret = !pThis->svga.fEnabled ? pThisCC->pbVRam[addr]
+ : addr < VMSVGA_VGA_FB_BACKUP_SIZE ? pThisCC->svga.pbVgaFrameBufferR3[addr] : 0xff;
+#else
+ ret = pThisCC->pbVRam[addr];
+#endif
+ } else if (!(pThis->sr[4] & 0x04)) { /* Host access is controlled by SR4, not GR5! */
+ /* odd/even mode (aka text mode mapping) */
+ plane = (pThis->gr[4] & 2) | (addr & 1);
+ /* See the comment for a similar line in vga_mem_writeb. */
+ RTGCPHYS off = ((addr & ~1) * 4) | plane;
+ VERIFY_VRAM_READ_OFF_RETURN(pThis, off, *prc);
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ ret = !pThis->svga.fEnabled ? pThisCC->pbVRam[off]
+ : off < VMSVGA_VGA_FB_BACKUP_SIZE ? pThisCC->svga.pbVgaFrameBufferR3[off] : 0xff;
+#else
+ ret = pThisCC->pbVRam[off];
+#endif
+ } else {
+ /* standard VGA latched access */
+ VERIFY_VRAM_READ_OFF_RETURN(pThis, addr * 4 + 3, *prc);
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ pThis->latch = !pThis->svga.fEnabled ? ((uint32_t *)pThisCC->pbVRam)[addr]
+ : addr < VMSVGA_VGA_FB_BACKUP_SIZE ? ((uint32_t *)pThisCC->svga.pbVgaFrameBufferR3)[addr] : UINT32_MAX;
+#else
+ pThis->latch = ((uint32_t *)pThisCC->pbVRam)[addr];
+#endif
+ if (!(pThis->gr[5] & 0x08)) {
+ /* read mode 0 */
+ plane = pThis->gr[4];
+ ret = GET_PLANE(pThis->latch, plane);
+ } else {
+ /* read mode 1 */
+ ret = (pThis->latch ^ mask16[pThis->gr[2]]) & mask16[pThis->gr[7]];
+ ret |= ret >> 16;
+ ret |= ret >> 8;
+ ret = (~ret) & 0xff;
+ }
+ }
+ Log3((" 0x%02x\n", ret));
+ return ret;
+}
+
+/**
+ * called for accesses between 0xa0000 and 0xc0000
+ */
+static VBOXSTRICTRC vga_mem_writeb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, RTGCPHYS addr, uint32_t val)
+{
+ int plane, write_mode, b, func_select, mask;
+ uint32_t write_mask, bit_mask, set_mask;
+
+ Log3(("vga: [0x%x] = 0x%02x\n", addr, val));
+
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RZ
+ /* VMSVGA keeps the VGA and SVGA framebuffers separate unlike this boch-based
+ VGA implementation, so we fake it by going to ring-3 and using a heap buffer. */
+ if (!pThis->svga.fEnabled) { /*likely*/ }
+ else return VINF_IOM_R3_MMIO_WRITE;
+#endif
+
+ /* convert to VGA memory offset */
+#ifndef IN_RC
+ RTGCPHYS const GCPhys = addr; /* save original address */
+#endif
+ addr &= 0x1ffff;
+
+ int const memory_map_mode = (pThis->gr[6] >> 2) & 3;
+ switch(memory_map_mode) {
+ case 0:
+ break;
+ case 1:
+ if (addr >= 0x10000)
+ return VINF_SUCCESS;
+ addr += pThis->bank_offset;
+ break;
+ case 2:
+ addr -= 0x10000;
+ if (addr >= 0x8000)
+ return VINF_SUCCESS;
+ break;
+ default:
+ case 3:
+ addr -= 0x18000;
+ if (addr >= 0x8000)
+ return VINF_SUCCESS;
+ break;
+ }
+
+ if (pThis->sr[4] & 0x08) {
+ /* chain 4 mode : simplest access */
+ plane = addr & 3;
+ mask = (1 << plane);
+ if (pThis->sr[2] & mask) {
+#ifndef IN_RC
+ /* If all planes are accessible, then map the page to the frame buffer and make it writable. */
+ if ( (pThis->sr[2] & 3) == 3
+ && !vgaIsRemapped(pThis, GCPhys - 0xa0000)
+ && pThis->GCPhysVRAM)
+ {
+ STAM_COUNTER_INC(&pThis->StatMapPage);
+ PDMDevHlpMmioMapMmio2Page(pDevIns, pThis->hMmioLegacy, GCPhys - 0xa0000,
+ pThis->hMmio2VRam, addr, X86_PTE_RW | X86_PTE_P);
+ vgaMarkRemapped(pThis, GCPhys - 0xa0000);
+ }
+#endif /* !IN_RC */
+
+ VERIFY_VRAM_WRITE_OFF_RETURN(pThis, addr);
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ if (!pThis->svga.fEnabled)
+ pThisCC->pbVRam[addr] = val;
+ else if (addr < VMSVGA_VGA_FB_BACKUP_SIZE)
+ pThisCC->svga.pbVgaFrameBufferR3[addr] = val;
+ else
+ {
+ Log(("vga: chain4: out of vmsvga VGA framebuffer bounds! addr=%#x\n", addr));
+ return VINF_SUCCESS;
+ }
+#else
+ pThisCC->pbVRam[addr] = val;
+#endif
+ Log3(("vga: chain4: [0x%x]\n", addr));
+ pThis->plane_updated |= mask; /* only used to detect font change */
+ vgaR3MarkDirty(pThis, addr);
+ }
+ } else if (!(pThis->sr[4] & 0x04)) { /* Host access is controlled by SR4, not GR5! */
+ /* odd/even mode (aka text mode mapping); GR4 does not affect writes! */
+ plane = addr & 1;
+ mask = (1 << plane);
+ if (pThis->sr[2] & mask) {
+ /* 'addr' is offset in a plane, bit 0 selects the plane.
+ * Mask the bit 0, convert plane index to vram offset,
+ * that is multiply by the number of planes,
+ * and select the plane byte in the vram offset.
+ */
+ addr = ((addr & ~1) * 4) | plane;
+ VERIFY_VRAM_WRITE_OFF_RETURN(pThis, addr);
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ if (!pThis->svga.fEnabled)
+ pThisCC->pbVRam[addr] = val;
+ else if (addr < VMSVGA_VGA_FB_BACKUP_SIZE)
+ pThisCC->svga.pbVgaFrameBufferR3[addr] = val;
+ else
+ {
+ Log(("vga: odd/even: out of vmsvga VGA framebuffer bounds! addr=%#x\n", addr));
+ return VINF_SUCCESS;
+ }
+#else
+ pThisCC->pbVRam[addr] = val;
+#endif
+ Log3(("vga: odd/even: [0x%x]\n", addr));
+ pThis->plane_updated |= mask; /* only used to detect font change */
+ vgaR3MarkDirty(pThis, addr);
+ }
+ } else {
+ /* standard VGA latched access */
+ VERIFY_VRAM_WRITE_OFF_RETURN(pThis, addr * 4 + 3);
+
+ write_mode = pThis->gr[5] & 3;
+ switch(write_mode) {
+ default:
+ case 0:
+ /* rotate */
+ b = pThis->gr[3] & 7;
+ val = ((val >> b) | (val << (8 - b))) & 0xff;
+ val |= val << 8;
+ val |= val << 16;
+
+ /* apply set/reset mask */
+ set_mask = mask16[pThis->gr[1]];
+ val = (val & ~set_mask) | (mask16[pThis->gr[0]] & set_mask);
+ bit_mask = pThis->gr[8];
+ break;
+ case 1:
+ val = pThis->latch;
+ goto do_write;
+ case 2:
+ val = mask16[val & 0x0f];
+ bit_mask = pThis->gr[8];
+ break;
+ case 3:
+ /* rotate */
+ b = pThis->gr[3] & 7;
+ val = (val >> b) | (val << (8 - b));
+
+ bit_mask = pThis->gr[8] & val;
+ val = mask16[pThis->gr[0]];
+ break;
+ }
+
+ /* apply logical operation */
+ func_select = pThis->gr[3] >> 3;
+ switch(func_select) {
+ case 0:
+ default:
+ /* nothing to do */
+ break;
+ case 1:
+ /* and */
+ val &= pThis->latch;
+ break;
+ case 2:
+ /* or */
+ val |= pThis->latch;
+ break;
+ case 3:
+ /* xor */
+ val ^= pThis->latch;
+ break;
+ }
+
+ /* apply bit mask */
+ bit_mask |= bit_mask << 8;
+ bit_mask |= bit_mask << 16;
+ val = (val & bit_mask) | (pThis->latch & ~bit_mask);
+
+ do_write:
+ /* mask data according to sr[2] */
+ mask = pThis->sr[2];
+ pThis->plane_updated |= mask; /* only used to detect font change */
+ write_mask = mask16[mask];
+#ifdef VMSVGA_WITH_VGA_FB_BACKUP_AND_IN_RING3
+ uint32_t *pu32Dst;
+ if (!pThis->svga.fEnabled)
+ pu32Dst = &((uint32_t *)pThisCC->pbVRam)[addr];
+ else if (addr * 4 + 3 < VMSVGA_VGA_FB_BACKUP_SIZE)
+ pu32Dst = &((uint32_t *)pThisCC->svga.pbVgaFrameBufferR3)[addr];
+ else
+ {
+ Log(("vga: latch: out of vmsvga VGA framebuffer bounds! addr=%#x\n", addr));
+ return VINF_SUCCESS;
+ }
+ *pu32Dst = (*pu32Dst & ~write_mask) | (val & write_mask);
+#else
+ ((uint32_t *)pThisCC->pbVRam)[addr] = (((uint32_t *)pThisCC->pbVRam)[addr] & ~write_mask)
+ | (val & write_mask);
+#endif
+ Log3(("vga: latch: [0x%x] mask=0x%08x val=0x%08x\n", addr * 4, write_mask, val));
+ vgaR3MarkDirty(pThis, (addr * 4));
+ }
+
+ return VINF_SUCCESS;
+}
+
+#ifdef IN_RING3
+
+typedef void vga_draw_glyph8_func(uint8_t *d, int linesize,
+ const uint8_t *font_ptr, int h,
+ uint32_t fgcol, uint32_t bgcol,
+ int dscan);
+typedef void vga_draw_glyph9_func(uint8_t *d, int linesize,
+ const uint8_t *font_ptr, int h,
+ uint32_t fgcol, uint32_t bgcol, int dup9);
+typedef void vga_draw_line_func(PVGASTATE pThis, PVGASTATECC pThisCC, uint8_t *pbDst, const uint8_t *pbSrc, int width);
+
+static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g, unsigned b)
+{
+ return ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6);
+}
+
+static inline unsigned int rgb_to_pixel15(unsigned int r, unsigned int g, unsigned b)
+{
+ return ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);
+}
+
+static inline unsigned int rgb_to_pixel16(unsigned int r, unsigned int g, unsigned b)
+{
+ return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);
+}
+
+static inline unsigned int rgb_to_pixel32(unsigned int r, unsigned int g, unsigned b)
+{
+ return (r << 16) | (g << 8) | b;
+}
+
+#define DEPTH 8
+#include "DevVGATmpl.h"
+
+#define DEPTH 15
+#include "DevVGATmpl.h"
+
+#define DEPTH 16
+#include "DevVGATmpl.h"
+
+#define DEPTH 32
+#include "DevVGATmpl.h"
+
+static unsigned int rgb_to_pixel8_dup(unsigned int r, unsigned int g, unsigned b)
+{
+ unsigned int col;
+ col = rgb_to_pixel8(r, g, b);
+ col |= col << 8;
+ col |= col << 16;
+ return col;
+}
+
+static unsigned int rgb_to_pixel15_dup(unsigned int r, unsigned int g, unsigned b)
+{
+ unsigned int col;
+ col = rgb_to_pixel15(r, g, b);
+ col |= col << 16;
+ return col;
+}
+
+static unsigned int rgb_to_pixel16_dup(unsigned int r, unsigned int g, unsigned b)
+{
+ unsigned int col;
+ col = rgb_to_pixel16(r, g, b);
+ col |= col << 16;
+ return col;
+}
+
+static unsigned int rgb_to_pixel32_dup(unsigned int r, unsigned int g, unsigned b)
+{
+ return rgb_to_pixel32(r, g, b);
+}
+
+/** return true if the palette was modified */
+static bool vgaR3UpdatePalette16(PVGASTATE pThis, PVGASTATER3 pThisCC)
+{
+ bool full_update = false;
+ int i;
+ uint32_t v, col, *palette;
+
+ palette = pThis->last_palette;
+ for(i = 0; i < 16; i++) {
+ v = pThis->ar[i];
+ if (pThis->ar[0x10] & 0x80)
+ v = ((pThis->ar[0x14] & 0xf) << 4) | (v & 0xf);
+ else
+ v = ((pThis->ar[0x14] & 0xc) << 4) | (v & 0x3f);
+ v = v * 3;
+ col = pThisCC->rgb_to_pixel(c6_to_8(pThis->palette[v]),
+ c6_to_8(pThis->palette[v + 1]),
+ c6_to_8(pThis->palette[v + 2]));
+ if (col != palette[i]) {
+ full_update = true;
+ palette[i] = col;
+ }
+ }
+ return full_update;
+}
+
+/** return true if the palette was modified */
+static bool vgaR3UpdatePalette256(PVGASTATE pThis, PVGASTATER3 pThisCC)
+{
+ bool full_update = false;
+ int i;
+ uint32_t v, col, *palette;
+ int wide_dac;
+
+ palette = pThis->last_palette;
+ v = 0;
+ wide_dac = (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & (VBE_DISPI_ENABLED | VBE_DISPI_8BIT_DAC))
+ == (VBE_DISPI_ENABLED | VBE_DISPI_8BIT_DAC);
+ for(i = 0; i < 256; i++) {
+ if (wide_dac)
+ col = pThisCC->rgb_to_pixel(pThis->palette[v],
+ pThis->palette[v + 1],
+ pThis->palette[v + 2]);
+ else
+ col = pThisCC->rgb_to_pixel(c6_to_8(pThis->palette[v]),
+ c6_to_8(pThis->palette[v + 1]),
+ c6_to_8(pThis->palette[v + 2]));
+ if (col != palette[i]) {
+ full_update = true;
+ palette[i] = col;
+ }
+ v += 3;
+ }
+ return full_update;
+}
+
+static void vgaR3GetOffsets(PVGASTATE pThis,
+ uint32_t *pline_offset,
+ uint32_t *pstart_addr,
+ uint32_t *pline_compare)
+{
+ uint32_t start_addr, line_offset, line_compare;
+#ifdef CONFIG_BOCHS_VBE
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) {
+ line_offset = pThis->vbe_line_offset;
+ start_addr = pThis->vbe_start_addr;
+ line_compare = 65535;
+ } else
+#endif
+ {
+ /* compute line_offset in bytes */
+ line_offset = pThis->cr[0x13];
+ line_offset <<= 3;
+ if (!(pThis->cr[0x14] & 0x40) && !(pThis->cr[0x17] & 0x40))
+ {
+ /* Word mode. Used for odd/even modes. */
+ line_offset *= 2;
+ }
+
+ /* starting address */
+ start_addr = pThis->cr[0x0d] | (pThis->cr[0x0c] << 8);
+
+ /* line compare */
+ line_compare = pThis->cr[0x18] |
+ ((pThis->cr[0x07] & 0x10) << 4) |
+ ((pThis->cr[0x09] & 0x40) << 3);
+ }
+ *pline_offset = line_offset;
+ *pstart_addr = start_addr;
+ *pline_compare = line_compare;
+}
+
+/** update start_addr and line_offset. Return TRUE if modified */
+static bool vgaR3UpdateBasicParams(PVGASTATE pThis, PVGASTATER3 pThisCC)
+{
+ bool full_update = false;
+ uint32_t start_addr, line_offset, line_compare;
+
+ pThisCC->get_offsets(pThis, &line_offset, &start_addr, &line_compare);
+
+ if (line_offset != pThis->line_offset ||
+ start_addr != pThis->start_addr ||
+ line_compare != pThis->line_compare) {
+ pThis->line_offset = line_offset;
+ pThis->start_addr = start_addr;
+ pThis->line_compare = line_compare;
+ full_update = true;
+ }
+ return full_update;
+}
+
+static inline int vgaR3GetDepthIndex(int depth)
+{
+ switch(depth) {
+ default:
+ case 8:
+ return 0;
+ case 15:
+ return 1;
+ case 16:
+ return 2;
+ case 32:
+ return 3;
+ }
+}
+
+static vga_draw_glyph8_func * const vga_draw_glyph8_table[4] = {
+ vga_draw_glyph8_8,
+ vga_draw_glyph8_16,
+ vga_draw_glyph8_16,
+ vga_draw_glyph8_32,
+};
+
+static vga_draw_glyph8_func * const vga_draw_glyph16_table[4] = {
+ vga_draw_glyph16_8,
+ vga_draw_glyph16_16,
+ vga_draw_glyph16_16,
+ vga_draw_glyph16_32,
+};
+
+static vga_draw_glyph9_func * const vga_draw_glyph9_table[4] = {
+ vga_draw_glyph9_8,
+ vga_draw_glyph9_16,
+ vga_draw_glyph9_16,
+ vga_draw_glyph9_32,
+};
+
+static const uint8_t cursor_glyph[32 * 4] = {
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+};
+
+static const uint8_t empty_glyph[32 * 4] = { 0 };
+
+/**
+ * Text mode update
+ */
+static int vgaR3DrawText(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATER3 pThisCC, bool full_update,
+ bool fFailOnResize, bool reset_dirty, PDMIDISPLAYCONNECTOR *pDrv)
+{
+ int cx, cy, cheight, cw, ch, cattr, height, width, ch_attr;
+ int cx_min, cx_max, linesize, x_incr;
+ int cx_min_upd, cx_max_upd, cy_start;
+ uint32_t offset, fgcol, bgcol, v, cursor_offset;
+ uint8_t *d1, *d, *src, *s1, *dest, *cursor_ptr;
+ const uint8_t *font_ptr, *font_base[2];
+ int dup9, line_offset, depth_index, dscan;
+ uint32_t *palette;
+ uint32_t *ch_attr_ptr;
+ vga_draw_glyph8_func *vga_draw_glyph8;
+ vga_draw_glyph9_func *vga_draw_glyph9;
+ uint64_t time_ns;
+ bool blink_on, chr_blink_flip, cur_blink_flip;
+ bool blink_enabled, blink_do_redraw;
+ int uline_pos;
+ int s_incr;
+
+ full_update |= vgaR3UpdatePalette16(pThis, pThisCC);
+ palette = pThis->last_palette;
+
+ /* compute font data address (in plane 2) */
+ v = pThis->sr[3];
+ offset = (((v >> 4) & 1) | ((v << 1) & 6)) * 8192 * 4 + 2;
+ if (offset != pThis->font_offsets[0]) {
+ pThis->font_offsets[0] = offset;
+ full_update = true;
+ }
+ font_base[0] = pThisCC->pbVRam + offset;
+
+ offset = (((v >> 5) & 1) | ((v >> 1) & 6)) * 8192 * 4 + 2;
+ font_base[1] = pThisCC->pbVRam + offset;
+ if (offset != pThis->font_offsets[1]) {
+ pThis->font_offsets[1] = offset;
+ full_update = true;
+ }
+ if (pThis->plane_updated & (1 << 2)) {
+ /* if the plane 2 was modified since the last display, it
+ indicates the font may have been modified */
+ pThis->plane_updated = 0;
+ full_update = true;
+ }
+
+ /* Underline position */
+ uline_pos = pThis->cr[0x14] & 0x1f;
+ if (uline_pos != pThis->last_uline) {
+ pThis->last_uline = uline_pos;
+ full_update = true;
+ }
+
+ blink_enabled = !!(pThis->ar[0x10] & 0x08); /* Attribute controller blink enable. */
+ if (blink_enabled != pThis->last_blink) {
+ pThis->last_blink = blink_enabled;
+ full_update = true;
+ }
+
+ full_update |= vgaR3UpdateBasicParams(pThis, pThisCC);
+
+ /* Evaluate word/byte mode. Need to count by 4 because text is only in plane 0. */
+ s_incr = pThis->cr[0x17] & 0x40 ? 4 : 8;
+
+ unsigned addr_mask;
+ if (!(pThis->cr[0x17] & 0x40) && !(pThis->cr[0x17] & 0x20))
+ addr_mask = 0xffff; /* Wrap at 64K, for CGA and 64K EGA compatibility. */
+ else
+ addr_mask = 0x3ffff; /* Wrap at 256K, standard VGA. */
+
+ line_offset = pThis->line_offset;
+ s1 = pThisCC->pbVRam + ((pThis->start_addr * s_incr) & addr_mask);
+
+ /* double scanning - not for 9-wide modes */
+ dscan = (pThis->cr[9] >> 7) & 1;
+
+ /* total width & height */
+ cheight = (pThis->cr[9] & 0x1f) + 1;
+ cw = 8;
+ if (!(pThis->sr[1] & 0x01))
+ cw = 9;
+ if (pThis->sr[1] & 0x08)
+ cw = 16; /* NOTE: no 18 pixel wide */
+ x_incr = cw * ((pDrv->cBits + 7) >> 3);
+ width = (pThis->cr[0x01] + 1);
+ if (pThis->cr[0x06] == 100) {
+ /* ugly hack for CGA 160x100x16 - explain me the logic */
+ height = 100;
+ } else {
+ height = pThis->cr[0x12] |
+ ((pThis->cr[0x07] & 0x02) << 7) |
+ ((pThis->cr[0x07] & 0x40) << 3);
+ height = (height + 1) / cheight;
+ }
+ /** @todo r=michaln This conditional is questionable; we should be able
+ * to draw whatver the guest asks for. */
+ if ((height * width) > CH_ATTR_SIZE) {
+ /* better than nothing: exit if transient size is too big */
+ return VINF_SUCCESS;
+ }
+
+ if (width != (int)pThis->last_width || height != (int)pThis->last_height ||
+ cw != pThis->last_cw || cheight != pThis->last_ch) {
+ if (fFailOnResize)
+ {
+ /* The caller does not want to call the pfnResize. */
+ return VERR_TRY_AGAIN;
+ }
+ pThis->last_scr_width = width * cw;
+ pThis->last_scr_height = height * cheight;
+ /* For text modes the direct use of guest VRAM is not implemented, so bpp and cbLine are 0 here. */
+ int rc = pDrv->pfnResize(pDrv, 0, NULL, 0, pThis->last_scr_width, pThis->last_scr_height);
+ pThis->last_width = width;
+ pThis->last_height = height;
+ pThis->last_ch = cheight;
+ pThis->last_cw = cw;
+ full_update = true;
+ if (rc == VINF_VGA_RESIZE_IN_PROGRESS)
+ return rc;
+ AssertRC(rc);
+ }
+ cursor_offset = ((pThis->cr[0x0e] << 8) | pThis->cr[0x0f]) - pThis->start_addr;
+ if (cursor_offset != pThis->cursor_offset ||
+ pThis->cr[0xa] != pThis->cursor_start ||
+ pThis->cr[0xb] != pThis->cursor_end) {
+ /* if the cursor position changed, we update the old and new
+ chars */
+ if (pThis->cursor_offset < CH_ATTR_SIZE)
+ pThis->last_ch_attr[pThis->cursor_offset] = UINT32_MAX;
+ if (cursor_offset < CH_ATTR_SIZE)
+ pThis->last_ch_attr[cursor_offset] = UINT32_MAX;
+ pThis->cursor_offset = cursor_offset;
+ pThis->cursor_start = pThis->cr[0xa];
+ pThis->cursor_end = pThis->cr[0xb];
+ }
+ cursor_ptr = pThisCC->pbVRam + (((pThis->start_addr + cursor_offset) * s_incr) & addr_mask);
+ depth_index = vgaR3GetDepthIndex(pDrv->cBits);
+ if (cw == 16)
+ vga_draw_glyph8 = vga_draw_glyph16_table[depth_index];
+ else
+ vga_draw_glyph8 = vga_draw_glyph8_table[depth_index];
+ vga_draw_glyph9 = vga_draw_glyph9_table[depth_index];
+
+ dest = pDrv->pbData;
+ linesize = pDrv->cbScanline;
+ ch_attr_ptr = pThis->last_ch_attr;
+ cy_start = -1;
+ cx_max_upd = -1;
+ cx_min_upd = width;
+
+ /* Figure out if we're in the visible period of the blink cycle. */
+ time_ns = PDMDevHlpTMTimeVirtGetNano(pDevIns);
+ blink_on = (time_ns % VGA_BLINK_PERIOD_FULL) < VGA_BLINK_PERIOD_ON;
+ chr_blink_flip = false;
+ cur_blink_flip = false;
+ if (pThis->last_chr_blink != blink_on)
+ {
+ /* Currently cursor and characters blink at the same rate, but they might not. */
+ pThis->last_chr_blink = blink_on;
+ pThis->last_cur_blink = blink_on;
+ chr_blink_flip = true;
+ cur_blink_flip = true;
+ }
+
+ for(cy = 0; cy < (height - dscan); cy = cy + (1 << dscan)) {
+ d1 = dest;
+ src = s1;
+ cx_min = width;
+ cx_max = -1;
+ for(cx = 0; cx < width; cx++) {
+ ch_attr = *(uint16_t *)src;
+ /* Figure out if character needs redrawing due to blink state change. */
+ blink_do_redraw = blink_enabled && chr_blink_flip && (ch_attr & 0x8000);
+ if (full_update || ch_attr != (int)*ch_attr_ptr || blink_do_redraw || (src == cursor_ptr && cur_blink_flip)) {
+ if (cx < cx_min)
+ cx_min = cx;
+ if (cx > cx_max)
+ cx_max = cx;
+ if (reset_dirty)
+ *ch_attr_ptr = ch_attr;
+#ifdef WORDS_BIGENDIAN
+ ch = ch_attr >> 8;
+ cattr = ch_attr & 0xff;
+#else
+ ch = ch_attr & 0xff;
+ cattr = ch_attr >> 8;
+#endif
+ font_ptr = font_base[(cattr >> 3) & 1];
+ font_ptr += 32 * 4 * ch;
+ bgcol = palette[cattr >> 4];
+ fgcol = palette[cattr & 0x0f];
+
+ if (blink_enabled && (cattr & 0x80))
+ {
+ bgcol = palette[(cattr >> 4) & 7];
+ if (!blink_on)
+ font_ptr = empty_glyph;
+ }
+
+ if (cw != 9) {
+ if (pThis->fRenderVRAM)
+ vga_draw_glyph8(d1, linesize, font_ptr, cheight, fgcol, bgcol, dscan);
+ } else {
+ dup9 = 0;
+ if (ch >= 0xb0 && ch <= 0xdf && (pThis->ar[0x10] & 0x04))
+ dup9 = 1;
+ if (pThis->fRenderVRAM)
+ vga_draw_glyph9(d1, linesize, font_ptr, cheight, fgcol, bgcol, dup9);
+ }
+
+ /* Underline. Typically turned off by setting it past cell height. */
+ if (((cattr & 0x03) == 1) && (uline_pos < cheight))
+ {
+ int h;
+
+ d = d1 + (linesize * uline_pos << dscan);
+ h = 1;
+
+ if (cw != 9) {
+ if (pThis->fRenderVRAM)
+ vga_draw_glyph8(d, linesize, cursor_glyph, h, fgcol, bgcol, dscan);
+ } else {
+ if (pThis->fRenderVRAM)
+ vga_draw_glyph9(d, linesize, cursor_glyph, h, fgcol, bgcol, 1);
+ }
+ }
+
+ /* Cursor. */
+ if (src == cursor_ptr &&
+ !(pThis->cr[0x0a] & 0x20)) {
+ int line_start, line_last, h;
+
+ /* draw the cursor if within the visible period */
+ if (blink_on) {
+ line_start = pThis->cr[0x0a] & 0x1f;
+ line_last = pThis->cr[0x0b] & 0x1f;
+ /* XXX: check that */
+ if (line_last > cheight - 1)
+ line_last = cheight - 1;
+ if (line_last >= line_start && line_start < cheight) {
+ h = line_last - line_start + 1;
+ d = d1 + (linesize * line_start << dscan);
+ if (cw != 9) {
+ if (pThis->fRenderVRAM)
+ vga_draw_glyph8(d, linesize, cursor_glyph, h, fgcol, bgcol, dscan);
+ } else {
+ if (pThis->fRenderVRAM)
+ vga_draw_glyph9(d, linesize, cursor_glyph, h, fgcol, bgcol, 1);
+ }
+ }
+ }
+ }
+ }
+ d1 += x_incr;
+ src += s_incr; /* Even in text mode, word/byte mode matters. */
+ if (src > (pThisCC->pbVRam + addr_mask))
+ src = pThisCC->pbVRam;
+ ch_attr_ptr++;
+ }
+ if (cx_max != -1) {
+ /* Keep track of the bounding rectangle for updates. */
+ if (cy_start == -1)
+ cy_start = cy;
+ if (cx_min_upd > cx_min)
+ cx_min_upd = cx_min;
+ if (cx_max_upd < cx_max)
+ cx_max_upd = cx_max;
+ } else if (cy_start >= 0) {
+ /* Flush updates to display. */
+ pDrv->pfnUpdateRect(pDrv, cx_min_upd * cw, cy_start * cheight,
+ (cx_max_upd - cx_min_upd + 1) * cw, (cy - cy_start) * cheight);
+ cy_start = -1;
+ cx_max_upd = -1;
+ cx_min_upd = width;
+ }
+
+ dest += linesize * cheight << dscan;
+ s1 += line_offset;
+
+ /* Line compare works in text modes, too. */
+ /** @todo r=michaln This is inaccurate; text should be rendered line by line
+ * and line compare checked after every line. */
+ if ((uint32_t)cy == (pThis->line_compare / cheight))
+ s1 = pThisCC->pbVRam;
+
+ if (s1 > (pThisCC->pbVRam + addr_mask))
+ s1 = s1 - (addr_mask + 1);
+ }
+ if (cy_start >= 0)
+ /* Flush any remaining changes to display. */
+ pDrv->pfnUpdateRect(pDrv, cx_min_upd * cw, cy_start * cheight,
+ (cx_max_upd - cx_min_upd + 1) * cw, (cy - cy_start) * cheight);
+ return VINF_SUCCESS;
+}
+
+enum {
+ VGA_DRAW_LINE2,
+ VGA_DRAW_LINE2D2,
+ VGA_DRAW_LINE4,
+ VGA_DRAW_LINE4D2,
+ VGA_DRAW_LINE8D2,
+ VGA_DRAW_LINE8,
+ VGA_DRAW_LINE15,
+ VGA_DRAW_LINE16,
+ VGA_DRAW_LINE24,
+ VGA_DRAW_LINE32,
+ VGA_DRAW_LINE_NB
+};
+
+static vga_draw_line_func * const vga_draw_line_table[4 * VGA_DRAW_LINE_NB] = {
+ vga_draw_line2_8,
+ vga_draw_line2_16,
+ vga_draw_line2_16,
+ vga_draw_line2_32,
+
+ vga_draw_line2d2_8,
+ vga_draw_line2d2_16,
+ vga_draw_line2d2_16,
+ vga_draw_line2d2_32,
+
+ vga_draw_line4_8,
+ vga_draw_line4_16,
+ vga_draw_line4_16,
+ vga_draw_line4_32,
+
+ vga_draw_line4d2_8,
+ vga_draw_line4d2_16,
+ vga_draw_line4d2_16,
+ vga_draw_line4d2_32,
+
+ vga_draw_line8d2_8,
+ vga_draw_line8d2_16,
+ vga_draw_line8d2_16,
+ vga_draw_line8d2_32,
+
+ vga_draw_line8_8,
+ vga_draw_line8_16,
+ vga_draw_line8_16,
+ vga_draw_line8_32,
+
+ vga_draw_line15_8,
+ vga_draw_line15_15,
+ vga_draw_line15_16,
+ vga_draw_line15_32,
+
+ vga_draw_line16_8,
+ vga_draw_line16_15,
+ vga_draw_line16_16,
+ vga_draw_line16_32,
+
+ vga_draw_line24_8,
+ vga_draw_line24_15,
+ vga_draw_line24_16,
+ vga_draw_line24_32,
+
+ vga_draw_line32_8,
+ vga_draw_line32_15,
+ vga_draw_line32_16,
+ vga_draw_line32_32,
+};
+
+static int vgaR3GetBpp(PVGASTATE pThis)
+{
+ int ret;
+#ifdef CONFIG_BOCHS_VBE
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) {
+ ret = pThis->vbe_regs[VBE_DISPI_INDEX_BPP];
+ } else
+#endif
+ {
+ ret = 0;
+ }
+ return ret;
+}
+
+static void vgaR3GetResolution(PVGASTATE pThis, int *pwidth, int *pheight)
+{
+ int width, height;
+#ifdef CONFIG_BOCHS_VBE
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) {
+ width = pThis->vbe_regs[VBE_DISPI_INDEX_XRES];
+ height = RT_MIN(pThis->vbe_regs[VBE_DISPI_INDEX_YRES],
+ pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT]);
+ } else
+#endif
+ {
+ width = (pThis->cr[0x01] + 1) * 8;
+ height = pThis->cr[0x12] |
+ ((pThis->cr[0x07] & 0x02) << 7) |
+ ((pThis->cr[0x07] & 0x40) << 3);
+ height = (height + 1);
+ }
+ *pwidth = width;
+ *pheight = height;
+}
+
+
+/**
+ * Performs the display driver resizing when in graphics mode.
+ *
+ * This will recalc / update any status data depending on the driver
+ * properties (bit depth mostly).
+ *
+ * @returns VINF_SUCCESS on success.
+ * @returns VINF_VGA_RESIZE_IN_PROGRESS if the operation wasn't complete.
+ * @param pThis Pointer to the shared VGA state.
+ * @param pThisCC Pointer to the ring-3 VGA state.
+ * @param cx The width.
+ * @param cy The height.
+ * @param pDrv The display connector.
+ */
+static int vgaR3ResizeGraphic(PVGASTATE pThis, PVGASTATER3 pThisCC, int cx, int cy, PDMIDISPLAYCONNECTOR *pDrv)
+{
+ const unsigned cBits = pThisCC->get_bpp(pThis);
+
+ int rc;
+ AssertReturn(cx, VERR_INVALID_PARAMETER);
+ AssertReturn(cy, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+
+ if (!pThis->line_offset)
+ return VERR_INTERNAL_ERROR;
+
+#if 0 //def VBOX_WITH_VDMA
+ /** @todo we get a second resize here when VBVA is on, while we actually should not */
+ /* do not do pfnResize in case VBVA is on since all mode changes are performed over VBVA
+ * we are checking for VDMA state here to ensure this code works only for WDDM driver,
+ * although we should avoid calling pfnResize for XPDM as well, since pfnResize is actually an extra resize
+ * event and generally only pfnVBVAxxx calls should be used with HGSMI + VBVA
+ *
+ * The reason for doing this for WDDM driver only now is to avoid regressions of the current code */
+ PVBOXVDMAHOST pVdma = pThisCC->pVdma;
+ if (pVdma && vboxVDMAIsEnabled(pVdma))
+ rc = VINF_SUCCESS;
+ else
+#endif
+ {
+ /* Skip the resize if the values are not valid. */
+ if (pThis->start_addr * 4 + pThis->line_offset * cy < pThis->vram_size)
+ /* Take into account the programmed start address (in DWORDs) of the visible screen. */
+ rc = pDrv->pfnResize(pDrv, cBits, pThisCC->pbVRam + pThis->start_addr * 4, pThis->line_offset, cx, cy);
+ else
+ {
+ /* Change nothing in the VGA state. Lets hope the guest will eventually programm correct values. */
+ return VERR_TRY_AGAIN;
+ }
+ }
+
+ /* last stuff */
+ pThis->last_bpp = cBits;
+ pThis->last_scr_width = cx;
+ pThis->last_scr_height = cy;
+ pThis->last_width = cx;
+ pThis->last_height = cy;
+
+ if (rc == VINF_VGA_RESIZE_IN_PROGRESS)
+ return rc;
+ AssertRC(rc);
+
+ /* update palette */
+ switch (pDrv->cBits)
+ {
+ case 32: pThisCC->rgb_to_pixel = rgb_to_pixel32_dup; break;
+ case 16:
+ default: pThisCC->rgb_to_pixel = rgb_to_pixel16_dup; break;
+ case 15: pThisCC->rgb_to_pixel = rgb_to_pixel15_dup; break;
+ case 8: pThisCC->rgb_to_pixel = rgb_to_pixel8_dup; break;
+ }
+ if (pThis->shift_control == 0)
+ vgaR3UpdatePalette16(pThis, pThisCC);
+ else if (pThis->shift_control == 1)
+ vgaR3UpdatePalette16(pThis, pThisCC);
+ return VINF_SUCCESS;
+}
+
+# ifdef VBOX_WITH_VMSVGA
+
+# if 0 /* unused? */
+int vgaR3UpdateDisplay(PVGASTATE pThis, PVGASTATER3 pThisCC, unsigned xStart, unsigned yStart, unsigned cx, unsigned cy, PDMIDISPLAYCONNECTOR *pDrv)
+{
+ uint32_t v;
+ vga_draw_line_func *vga_draw_line;
+
+ if (!pThis->fRenderVRAM)
+ {
+ pDrv->pfnUpdateRect(pDrv, xStart, yStart, cx, cy);
+ return VINF_SUCCESS;
+ }
+ /** @todo might crash if a blit follows a resolution change very quickly (seen this many times!) */
+
+ if ( pThis->svga.uWidth == VMSVGA_VAL_UNINITIALIZED
+ || pThis->svga.uHeight == VMSVGA_VAL_UNINITIALIZED
+ || pThis->svga.uBpp == VMSVGA_VAL_UNINITIALIZED)
+ {
+ /* Intermediate state; skip redraws. */
+ AssertFailed();
+ return VINF_SUCCESS;
+ }
+
+ uint32_t cBits;
+ switch (pThis->svga.uBpp) {
+ default:
+ case 0:
+ case 8:
+ AssertFailed();
+ return VERR_NOT_IMPLEMENTED;
+ case 15:
+ v = VGA_DRAW_LINE15;
+ cBits = 16;
+ break;
+ case 16:
+ v = VGA_DRAW_LINE16;
+ cBits = 16;
+ break;
+ case 24:
+ v = VGA_DRAW_LINE24;
+ cBits = 24;
+ break;
+ case 32:
+ v = VGA_DRAW_LINE32;
+ cBits = 32;
+ break;
+ }
+ vga_draw_line = vga_draw_line_table[v * 4 + vgaR3GetDepthIndex(pDrv->cBits)];
+
+ uint32_t offSrc = (xStart * cBits) / 8 + pThis->svga.cbScanline * yStart;
+ uint32_t offDst = (xStart * RT_ALIGN(pDrv->cBits, 8)) / 8 + pDrv->cbScanline * yStart;
+
+ uint8_t *pbDst = pDrv->pbData + offDst;
+ uint8_t const *pbSrc = pThisCC->pbVRam + offSrc;
+
+ for (unsigned y = yStart; y < yStart + cy; y++)
+ {
+ vga_draw_line(pThis, pThisCC, pbDst, pbSrc, cx);
+
+ pbDst += pDrv->cbScanline;
+ pbSrc += pThis->svga.cbScanline;
+ }
+ pDrv->pfnUpdateRect(pDrv, xStart, yStart, cx, cy);
+
+ return VINF_SUCCESS;
+}
+# endif
+
+/**
+ * graphic modes
+ */
+static int vmsvgaR3DrawGraphic(PVGASTATE pThis, PVGASTATER3 pThisCC, bool fFullUpdate,
+ bool fFailOnResize, bool reset_dirty, PDMIDISPLAYCONNECTOR *pDrv)
+{
+ RT_NOREF1(fFailOnResize);
+
+ uint32_t const cx = pThis->last_scr_width;
+ uint32_t const cxDisplay = cx;
+ uint32_t const cy = pThis->last_scr_height;
+ uint32_t cBits = pThis->last_bpp;
+
+ if ( cx == VMSVGA_VAL_UNINITIALIZED
+ || cx == 0
+ || cy == VMSVGA_VAL_UNINITIALIZED
+ || cy == 0
+ || cBits == VMSVGA_VAL_UNINITIALIZED
+ || cBits == 0)
+ {
+ /* Intermediate state; skip redraws. */
+ return VINF_SUCCESS;
+ }
+
+ unsigned v;
+ switch (cBits)
+ {
+ case 8:
+ /* Note! experimental, not sure if this really works... */
+ /** @todo fFullUpdate |= vgaR3UpdatePalette256(pThis); - need fFullUpdate but not
+ * copying anything to last_palette. */
+ v = VGA_DRAW_LINE8;
+ break;
+ case 15:
+ v = VGA_DRAW_LINE15;
+ cBits = 16;
+ break;
+ case 16:
+ v = VGA_DRAW_LINE16;
+ break;
+ case 24:
+ v = VGA_DRAW_LINE24;
+ break;
+ case 32:
+ v = VGA_DRAW_LINE32;
+ break;
+ default:
+ case 0:
+ AssertFailed();
+ return VERR_NOT_IMPLEMENTED;
+ }
+ vga_draw_line_func *pfnVgaDrawLine = vga_draw_line_table[v * 4 + vgaR3GetDepthIndex(pDrv->cBits)];
+
+ Assert(!pThisCC->cursor_invalidate);
+ Assert(!pThisCC->cursor_draw_line);
+ //not used// if (pThisCC->cursor_invalidate)
+ //not used// pThisCC->cursor_invalidate(pThis);
+
+ uint8_t *pbDst = pDrv->pbData;
+ uint32_t cbDstScanline = pDrv->cbScanline;
+ uint32_t offSrcStart = 0; /* always start at the beginning of the framebuffer */
+ uint32_t cbScanline = (cx * cBits + 7) / 8; /* The visible width of a scanline. */
+ uint32_t yUpdateRectTop = UINT32_MAX;
+ uint32_t offPageMin = UINT32_MAX;
+ int32_t offPageMax = -1;
+ uint32_t y;
+ for (y = 0; y < cy; y++)
+ {
+ uint32_t offSrcLine = offSrcStart + y * cbScanline;
+ uint32_t offPage0 = offSrcLine & ~(uint32_t)GUEST_PAGE_OFFSET_MASK;
+ uint32_t offPage1 = (offSrcLine + cbScanline - 1) & ~(uint32_t)GUEST_PAGE_OFFSET_MASK;
+ /** @todo r=klaus this assumes that a line is fully covered by 3 pages,
+ * irrespective of alignment. Not guaranteed for high res modes, i.e.
+ * anything wider than 2050 pixels @32bpp. Need to check all pages
+ * between the first and last one. */
+ bool fUpdate = fFullUpdate | vgaR3IsDirty(pThis, offPage0) | vgaR3IsDirty(pThis, offPage1);
+ if (offPage1 - offPage0 > GUEST_PAGE_SIZE)
+ /* if wide line, can use another page */
+ fUpdate |= vgaR3IsDirty(pThis, offPage0 + GUEST_PAGE_SIZE);
+ /* explicit invalidation for the hardware cursor */
+ fUpdate |= (pThis->invalidated_y_table[y >> 5] >> (y & 0x1f)) & 1;
+ if (fUpdate)
+ {
+ if (yUpdateRectTop == UINT32_MAX)
+ yUpdateRectTop = y;
+ if (offPage0 < offPageMin)
+ offPageMin = offPage0;
+ if ((int32_t)offPage1 > offPageMax)
+ offPageMax = offPage1;
+ if (pThis->fRenderVRAM)
+ pfnVgaDrawLine(pThis, pThisCC, pbDst, pThisCC->pbVRam + offSrcLine, cx);
+ //not used// if (pThisCC->cursor_draw_line)
+ //not used// pThisCC->cursor_draw_line(pThis, pbDst, y);
+ }
+ else if (yUpdateRectTop != UINT32_MAX)
+ {
+ /* flush to display */
+ Log(("Flush to display (%d,%d)(%d,%d)\n", 0, yUpdateRectTop, cxDisplay, y - yUpdateRectTop));
+ pDrv->pfnUpdateRect(pDrv, 0, yUpdateRectTop, cxDisplay, y - yUpdateRectTop);
+ yUpdateRectTop = UINT32_MAX;
+ }
+ pbDst += cbDstScanline;
+ }
+ if (yUpdateRectTop != UINT32_MAX)
+ {
+ /* flush to display */
+ Log(("Flush to display (%d,%d)(%d,%d)\n", 0, yUpdateRectTop, cxDisplay, y - yUpdateRectTop));
+ pDrv->pfnUpdateRect(pDrv, 0, yUpdateRectTop, cxDisplay, y - yUpdateRectTop);
+ }
+
+ /* reset modified pages */
+ if (offPageMax != -1 && reset_dirty)
+ vgaR3ResetDirty(pThis, offPageMin, offPageMax + GUEST_PAGE_SIZE);
+ memset(pThis->invalidated_y_table, 0, ((cy + 31) >> 5) * 4);
+
+ return VINF_SUCCESS;
+}
+
+# endif /* VBOX_WITH_VMSVGA */
+
+/**
+ * graphic modes
+ */
+static int vgaR3DrawGraphic(PVGASTATE pThis, PVGASTATER3 pThisCC, bool full_update, bool fFailOnResize, bool reset_dirty,
+ PDMIDISPLAYCONNECTOR *pDrv)
+{
+ int y1, y2, y, page_min, page_max, linesize, y_start, double_scan;
+ int width, height, shift_control, line_offset, page0, page1, bwidth, bits;
+ int disp_width, multi_run;
+ uint8_t *d;
+ uint32_t v, addr1, addr;
+ vga_draw_line_func *pfnVgaDrawLine;
+
+ bool offsets_changed = vgaR3UpdateBasicParams(pThis, pThisCC);
+
+ full_update |= offsets_changed;
+
+ pThisCC->get_resolution(pThis, &width, &height);
+ disp_width = width;
+
+ shift_control = (pThis->gr[0x05] >> 5) & 3;
+ double_scan = (pThis->cr[0x09] >> 7);
+ multi_run = double_scan;
+ if (shift_control != pThis->shift_control ||
+ double_scan != pThis->double_scan) {
+ full_update = true;
+ pThis->shift_control = shift_control;
+ pThis->double_scan = double_scan;
+ }
+
+ if (shift_control == 0) {
+ full_update |= vgaR3UpdatePalette16(pThis, pThisCC);
+ if (pThis->sr[0x01] & 8) {
+ v = VGA_DRAW_LINE4D2;
+ disp_width <<= 1;
+ } else {
+ v = VGA_DRAW_LINE4;
+ }
+ bits = 4;
+ } else if (shift_control == 1) {
+ full_update |= vgaR3UpdatePalette16(pThis, pThisCC);
+ if (pThis->sr[0x01] & 8) {
+ v = VGA_DRAW_LINE2D2;
+ disp_width <<= 1;
+ } else {
+ v = VGA_DRAW_LINE2;
+ }
+ bits = 4;
+ } else {
+ switch(pThisCC->get_bpp(pThis)) {
+ default:
+ case 0:
+ full_update |= vgaR3UpdatePalette256(pThis, pThisCC);
+ v = VGA_DRAW_LINE8D2;
+ bits = 4;
+ break;
+ case 8:
+ full_update |= vgaR3UpdatePalette256(pThis, pThisCC);
+ v = VGA_DRAW_LINE8;
+ bits = 8;
+ break;
+ case 15:
+ v = VGA_DRAW_LINE15;
+ bits = 16;
+ break;
+ case 16:
+ v = VGA_DRAW_LINE16;
+ bits = 16;
+ break;
+ case 24:
+ v = VGA_DRAW_LINE24;
+ bits = 24;
+ break;
+ case 32:
+ v = VGA_DRAW_LINE32;
+ bits = 32;
+ break;
+ }
+ }
+ if ( disp_width != (int)pThis->last_width
+ || height != (int)pThis->last_height
+ || pThisCC->get_bpp(pThis) != (int)pThis->last_bpp
+ || (offsets_changed && !pThis->fRenderVRAM))
+ {
+ if (fFailOnResize)
+ {
+ /* The caller does not want to call the pfnResize. */
+ return VERR_TRY_AGAIN;
+ }
+ int rc = vgaR3ResizeGraphic(pThis, pThisCC, disp_width, height, pDrv);
+ if (rc != VINF_SUCCESS) /* Return any rc, particularly VINF_VGA_RESIZE_IN_PROGRESS, to the caller. */
+ return rc;
+ full_update = true;
+ }
+
+ if (pThis->fRenderVRAM)
+ {
+ /* Do not update the destination buffer if it is not big enough.
+ * Can happen if the resize request was ignored by the driver.
+ * Compare with 'disp_width', because it is what the framebuffer has been resized to.
+ */
+ if ( pDrv->cx != (uint32_t)disp_width
+ || pDrv->cy != (uint32_t)height)
+ {
+ LogRel(("Framebuffer mismatch: vga %dx%d, drv %dx%d!!!\n",
+ disp_width, height,
+ pDrv->cx, pDrv->cy));
+ return VINF_SUCCESS;
+ }
+ }
+
+ pfnVgaDrawLine = vga_draw_line_table[v * 4 + vgaR3GetDepthIndex(pDrv->cBits)];
+
+ if (pThisCC->cursor_invalidate)
+ pThisCC->cursor_invalidate(pThis);
+
+ line_offset = pThis->line_offset;
+#if 0
+ Log(("w=%d h=%d v=%d line_offset=%d cr[0x09]=0x%02x cr[0x17]=0x%02x linecmp=%d sr[0x01]=0x%02x\n",
+ width, height, v, line_offset, pThis->cr[9], pThis->cr[0x17], pThis->line_compare, pThis->sr[0x01]));
+#endif
+ addr1 = (pThis->start_addr * 4);
+ bwidth = (width * bits + 7) / 8; /* The visible width of a scanline. */
+ y_start = -1;
+ page_min = 0x7fffffff;
+ page_max = -1;
+ d = pDrv->pbData;
+ linesize = pDrv->cbScanline;
+
+ if (!(pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED))
+ pThis->vga_addr_mask = 0x3ffff;
+ else
+ pThis->vga_addr_mask = UINT32_MAX;
+
+ y1 = 0;
+ y2 = pThis->cr[0x09] & 0x1F; /* starting row scan count */
+ for(y = 0; y < height; y++) {
+ addr = addr1;
+ /* CGA/MDA compatibility. Note that these addresses are all
+ * shifted left by two compared to VGA specs.
+ */
+ if (!(pThis->cr[0x17] & 1)) {
+ addr = (addr & ~(1 << 15)) | ((y1 & 1) << 15);
+ }
+ if (!(pThis->cr[0x17] & 2)) {
+ addr = (addr & ~(1 << 16)) | ((y1 & 2) << 15);
+ }
+ addr &= pThis->vga_addr_mask;
+ page0 = addr & ~(uint32_t)GUEST_PAGE_OFFSET_MASK;
+ page1 = (addr + bwidth - 1) & ~(uint32_t)GUEST_PAGE_OFFSET_MASK;
+ /** @todo r=klaus this assumes that a line is fully covered by 3 pages,
+ * irrespective of alignment. Not guaranteed for high res modes, i.e.
+ * anything wider than 2050 pixels @32bpp. Need to check all pages
+ * between the first and last one. */
+ bool update = full_update | vgaR3IsDirty(pThis, page0) | vgaR3IsDirty(pThis, page1);
+ if (page1 - page0 > GUEST_PAGE_SIZE) {
+ /* if wide line, can use another page */
+ update |= vgaR3IsDirty(pThis, page0 + GUEST_PAGE_SIZE);
+ }
+ /* explicit invalidation for the hardware cursor */
+ update |= (pThis->invalidated_y_table[y >> 5] >> (y & 0x1f)) & 1;
+ if (update) {
+ if (y_start < 0)
+ y_start = y;
+ if (page0 < page_min)
+ page_min = page0;
+ if (page1 > page_max)
+ page_max = page1;
+ if (pThis->fRenderVRAM)
+ pfnVgaDrawLine(pThis, pThisCC, d, pThisCC->pbVRam + addr, width);
+ if (pThisCC->cursor_draw_line)
+ pThisCC->cursor_draw_line(pThis, d, y);
+ } else {
+ if (y_start >= 0) {
+ /* flush to display */
+ pDrv->pfnUpdateRect(pDrv, 0, y_start, disp_width, y - y_start);
+ y_start = -1;
+ }
+ }
+ if (!multi_run) {
+ y1++;
+ multi_run = double_scan;
+
+ if (y2 == 0) {
+ y2 = pThis->cr[0x09] & 0x1F;
+ addr1 += line_offset;
+ } else {
+ --y2;
+ }
+ } else {
+ multi_run--;
+ }
+ /* line compare acts on the displayed lines */
+ if ((uint32_t)y == pThis->line_compare)
+ addr1 = 0;
+ d += linesize;
+ }
+ if (y_start >= 0) {
+ /* flush to display */
+ pDrv->pfnUpdateRect(pDrv, 0, y_start, disp_width, y - y_start);
+ }
+ /* reset modified pages */
+ if (page_max != -1 && reset_dirty) {
+ vgaR3ResetDirty(pThis, page_min, page_max + GUEST_PAGE_SIZE);
+ }
+ memset(pThis->invalidated_y_table, 0, ((height + 31) >> 5) * 4);
+ return VINF_SUCCESS;
+}
+
+/**
+ * blanked modes
+ */
+static int vgaR3DrawBlank(PVGASTATE pThis, PVGASTATER3 pThisCC, bool full_update,
+ bool fFailOnResize, bool reset_dirty, PDMIDISPLAYCONNECTOR *pDrv)
+{
+ int i, w, val;
+ uint8_t *d;
+ uint32_t cbScanline = pDrv->cbScanline;
+ uint32_t page_min, page_max;
+
+ if (pThis->last_width != 0)
+ {
+ if (fFailOnResize)
+ {
+ /* The caller does not want to call the pfnResize. */
+ return VERR_TRY_AGAIN;
+ }
+ pThis->last_width = 0;
+ pThis->last_height = 0;
+ /* For blanking signal width=0, height=0, bpp=0 and cbLine=0 here.
+ * There is no screen content, which distinguishes it from text mode. */
+ pDrv->pfnResize(pDrv, 0, NULL, 0, 0, 0);
+ }
+ /* reset modified pages, i.e. everything */
+ if (reset_dirty && pThis->last_scr_height > 0)
+ {
+ page_min = (pThis->start_addr * 4) & ~(uint32_t)GUEST_PAGE_OFFSET_MASK;
+ /* round up page_max by one page, as otherwise this can be -GUEST_PAGE_SIZE,
+ * which causes assertion trouble in vgaR3ResetDirty. */
+ page_max = (pThis->start_addr * 4 + pThis->line_offset * pThis->last_scr_height - 1 + GUEST_PAGE_SIZE)
+ & ~(uint32_t)GUEST_PAGE_OFFSET_MASK;
+ vgaR3ResetDirty(pThis, page_min, page_max + GUEST_PAGE_SIZE);
+ }
+ if (pDrv->pbData == pThisCC->pbVRam) /* Do not clear the VRAM itself. */
+ return VINF_SUCCESS;
+ if (!full_update)
+ return VINF_SUCCESS;
+ if (pThis->last_scr_width <= 0 || pThis->last_scr_height <= 0)
+ return VINF_SUCCESS;
+ if (pDrv->cBits == 8)
+ val = pThisCC->rgb_to_pixel(0, 0, 0);
+ else
+ val = 0;
+ w = pThis->last_scr_width * ((pDrv->cBits + 7) >> 3);
+ d = pDrv->pbData;
+ if (pThis->fRenderVRAM)
+ {
+ for(i = 0; i < (int)pThis->last_scr_height; i++) {
+ memset(d, val, w);
+ d += cbScanline;
+ }
+ }
+ pDrv->pfnUpdateRect(pDrv, 0, 0, pThis->last_scr_width, pThis->last_scr_height);
+ return VINF_SUCCESS;
+}
+
+
+#define GMODE_TEXT 0
+#define GMODE_GRAPH 1
+#define GMODE_BLANK 2
+#ifdef VBOX_WITH_VMSVGA
+#define GMODE_SVGA 3
+#endif
+
+/**
+ * Worker for vgaR3PortUpdateDisplay(), vgaR3UpdateDisplayAllInternal() and
+ * vgaR3PortTakeScreenshot().
+ */
+static int vgaR3UpdateDisplay(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATER3 pThisCC, bool fUpdateAll,
+ bool fFailOnResize, bool reset_dirty, PDMIDISPLAYCONNECTOR *pDrv, int32_t *pcur_graphic_mode)
+{
+ int rc = VINF_SUCCESS;
+ int graphic_mode;
+
+ if (pDrv->cBits == 0) {
+ /* nothing to do */
+ } else {
+ switch(pDrv->cBits) {
+ case 8:
+ pThisCC->rgb_to_pixel = rgb_to_pixel8_dup;
+ break;
+ case 15:
+ pThisCC->rgb_to_pixel = rgb_to_pixel15_dup;
+ break;
+ default:
+ case 16:
+ pThisCC->rgb_to_pixel = rgb_to_pixel16_dup;
+ break;
+ case 32:
+ pThisCC->rgb_to_pixel = rgb_to_pixel32_dup;
+ break;
+ }
+
+#ifdef VBOX_WITH_VMSVGA
+ if (pThis->svga.fEnabled) {
+ graphic_mode = GMODE_SVGA;
+ }
+ else
+#endif
+ if (!(pThis->ar_index & 0x20) || (pThis->sr[0x01] & 0x20)) {
+ graphic_mode = GMODE_BLANK;
+ } else {
+ graphic_mode = pThis->gr[6] & 1 ? GMODE_GRAPH : GMODE_TEXT;
+ }
+ bool full_update = fUpdateAll || graphic_mode != *pcur_graphic_mode;
+ if (full_update) {
+ *pcur_graphic_mode = graphic_mode;
+ }
+ switch(graphic_mode) {
+ case GMODE_TEXT:
+ rc = vgaR3DrawText(pDevIns, pThis, pThisCC, full_update, fFailOnResize, reset_dirty, pDrv);
+ break;
+ case GMODE_GRAPH:
+ rc = vgaR3DrawGraphic(pThis, pThisCC, full_update, fFailOnResize, reset_dirty, pDrv);
+ break;
+#ifdef VBOX_WITH_VMSVGA
+ case GMODE_SVGA:
+ rc = vmsvgaR3DrawGraphic(pThis, pThisCC, full_update, fFailOnResize, reset_dirty, pDrv);
+ break;
+#endif
+ case GMODE_BLANK:
+ default:
+ rc = vgaR3DrawBlank(pThis, pThisCC, full_update, fFailOnResize, reset_dirty, pDrv);
+ break;
+ }
+ }
+ return rc;
+}
+
+/**
+ * Worker for vgaR3SaveExec().
+ */
+static void vga_save(PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM, PVGASTATE pThis)
+{
+ int i;
+
+ pHlp->pfnSSMPutU32(pSSM, pThis->latch);
+ pHlp->pfnSSMPutU8(pSSM, pThis->sr_index);
+ pHlp->pfnSSMPutMem(pSSM, pThis->sr, 8);
+ pHlp->pfnSSMPutU8(pSSM, pThis->gr_index);
+ pHlp->pfnSSMPutMem(pSSM, pThis->gr, 16);
+ pHlp->pfnSSMPutU8(pSSM, pThis->ar_index);
+ pHlp->pfnSSMPutMem(pSSM, pThis->ar, 21);
+ pHlp->pfnSSMPutU32(pSSM, pThis->ar_flip_flop);
+ pHlp->pfnSSMPutU8(pSSM, pThis->cr_index);
+ pHlp->pfnSSMPutMem(pSSM, pThis->cr, 256);
+ pHlp->pfnSSMPutU8(pSSM, pThis->msr);
+ pHlp->pfnSSMPutU8(pSSM, pThis->fcr);
+ pHlp->pfnSSMPutU8(pSSM, pThis->st00);
+ pHlp->pfnSSMPutU8(pSSM, pThis->st01);
+
+ pHlp->pfnSSMPutU8(pSSM, pThis->dac_state);
+ pHlp->pfnSSMPutU8(pSSM, pThis->dac_sub_index);
+ pHlp->pfnSSMPutU8(pSSM, pThis->dac_read_index);
+ pHlp->pfnSSMPutU8(pSSM, pThis->dac_write_index);
+ pHlp->pfnSSMPutMem(pSSM, pThis->dac_cache, 3);
+ pHlp->pfnSSMPutMem(pSSM, pThis->palette, 768);
+
+ pHlp->pfnSSMPutU32(pSSM, pThis->bank_offset);
+#ifdef CONFIG_BOCHS_VBE
+ AssertCompile(RT_ELEMENTS(pThis->vbe_regs) < 256);
+ pHlp->pfnSSMPutU8(pSSM, (uint8_t)RT_ELEMENTS(pThis->vbe_regs));
+ pHlp->pfnSSMPutU16(pSSM, pThis->vbe_index);
+ for(i = 0; i < (int)RT_ELEMENTS(pThis->vbe_regs); i++)
+ pHlp->pfnSSMPutU16(pSSM, pThis->vbe_regs[i]);
+ pHlp->pfnSSMPutU32(pSSM, pThis->vbe_start_addr);
+ pHlp->pfnSSMPutU32(pSSM, pThis->vbe_line_offset);
+#else
+ pHlp->pfnSSMPutU8(pSSM, 0);
+#endif
+}
+
+
+/**
+ * Worker for vgaR3LoadExec().
+ */
+static int vga_load(PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM, PVGASTATE pThis, int version_id)
+{
+ int is_vbe, i;
+ uint32_t u32Dummy;
+ uint8_t u8;
+
+ pHlp->pfnSSMGetU32(pSSM, &pThis->latch);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->sr_index);
+ pHlp->pfnSSMGetMem(pSSM, pThis->sr, 8);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->gr_index);
+ pHlp->pfnSSMGetMem(pSSM, pThis->gr, 16);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->ar_index);
+ pHlp->pfnSSMGetMem(pSSM, pThis->ar, 21);
+ pHlp->pfnSSMGetS32(pSSM, &pThis->ar_flip_flop);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->cr_index);
+ pHlp->pfnSSMGetMem(pSSM, pThis->cr, 256);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->msr);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->fcr);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->st00);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->st01);
+
+ pHlp->pfnSSMGetU8(pSSM, &pThis->dac_state);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->dac_sub_index);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->dac_read_index);
+ pHlp->pfnSSMGetU8(pSSM, &pThis->dac_write_index);
+ pHlp->pfnSSMGetMem(pSSM, pThis->dac_cache, 3);
+ pHlp->pfnSSMGetMem(pSSM, pThis->palette, 768);
+
+ pHlp->pfnSSMGetS32(pSSM, &pThis->bank_offset);
+ pHlp->pfnSSMGetU8(pSSM, &u8);
+ is_vbe = !!u8;
+#ifdef CONFIG_BOCHS_VBE
+ if (!is_vbe)
+ {
+ Log(("vga_load: !is_vbe !!\n"));
+ return VERR_SSM_DATA_UNIT_FORMAT_CHANGED;
+ }
+
+ if (u8 == 1)
+ u8 = VBE_DISPI_INDEX_NB_SAVED; /* Used to save so many registers. */
+ if (u8 > RT_ELEMENTS(pThis->vbe_regs))
+ {
+ Log(("vga_load: saved %d, expected %d!!\n", u8, RT_ELEMENTS(pThis->vbe_regs)));
+ return VERR_SSM_DATA_UNIT_FORMAT_CHANGED;
+ }
+
+ pHlp->pfnSSMGetU16(pSSM, &pThis->vbe_index);
+ for(i = 0; i < (int)u8; i++)
+ pHlp->pfnSSMGetU16(pSSM, &pThis->vbe_regs[i]);
+ if (version_id <= VGA_SAVEDSTATE_VERSION_INV_VHEIGHT)
+ recalculate_data(pThis); /* <- re-calculate the pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] since it might be invalid */
+ pHlp->pfnSSMGetU32(pSSM, &pThis->vbe_start_addr);
+ pHlp->pfnSSMGetU32(pSSM, &pThis->vbe_line_offset);
+ if (version_id < 2)
+ pHlp->pfnSSMGetU32(pSSM, &u32Dummy);
+ pThis->vbe_bank_max = (pThis->vram_size >> 16) - 1;
+#else
+ if (is_vbe)
+ {
+ Log(("vga_load: is_vbe !!\n"));
+ return VERR_SSM_DATA_UNIT_FORMAT_CHANGED;
+ }
+#endif
+
+ /* force refresh */
+ pThis->graphic_mode = -1;
+ return 0;
+}
+
+
+/**
+ * Worker for vgaR3Construct().
+ */
+static void vgaR3InitExpand(void)
+{
+ int i, j, v, b;
+
+ for(i = 0;i < 256; i++) {
+ v = 0;
+ for(j = 0; j < 8; j++) {
+ v |= ((i >> j) & 1) << (j * 4);
+ }
+ expand4[i] = v;
+
+ v = 0;
+ for(j = 0; j < 4; j++) {
+ v |= ((i >> (2 * j)) & 3) << (j * 4);
+ }
+ expand2[i] = v;
+ }
+ for(i = 0; i < 16; i++) {
+ v = 0;
+ for(j = 0; j < 4; j++) {
+ b = ((i >> j) & 1);
+ v |= b << (2 * j);
+ v |= b << (2 * j + 1);
+ }
+ expand4to8[i] = v;
+ }
+}
+
+#endif /* IN_RING3 */
+
+
+
+/* -=-=-=-=-=- all contexts -=-=-=-=-=- */
+
+#define VGA_IOPORT_WRITE_PLACEHOLDER(a_uPort, a_cPorts) do {\
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE); \
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo))); \
+ AssertCompile(RT_IS_POWER_OF_TWO(a_cPorts)); \
+ Assert((unsigned)offPort - (unsigned)(a_uPort) < (unsigned)(a_cPorts)); \
+ NOREF(pvUser); \
+ if (cb == 1) \
+ vga_ioport_write(pDevIns, pThis, offPort, u32); \
+ else if (cb == 2) \
+ { \
+ vga_ioport_write(pDevIns, pThis, offPort, u32 & 0xff); \
+ vga_ioport_write(pDevIns, pThis, offPort + 1, u32 >> 8); \
+ } \
+ return VINF_SUCCESS; \
+ } while (0)
+
+#define VGA_IOPORT_READ_PLACEHOLDER(a_uPort, a_cPorts) do {\
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE); \
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo))); \
+ AssertCompile(RT_IS_POWER_OF_TWO(a_cPorts)); \
+ Assert((unsigned)offPort - (unsigned)(a_uPort) < (unsigned)(a_cPorts)); \
+ NOREF(pvUser); \
+ if (cb == 1) \
+ *pu32 = vga_ioport_read(pDevIns, pThis, offPort); \
+ else if (cb == 2) \
+ { \
+ uint32_t u32 = vga_ioport_read(pDevIns, pThis, offPort); \
+ u32 |= vga_ioport_read(pDevIns, pThis, offPort + 1) << 8; \
+ *pu32 = u32; \
+ } \
+ else \
+ return VERR_IOM_IOPORT_UNUSED; \
+ return VINF_SUCCESS; \
+ } while (0)
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3c0-0x3c1 Attribute Controller.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortArWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3c0, 2);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3c0-0x3c1 Attribute Controller.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortArRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3c0, 2);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3c2 Miscellaneous Register.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortMsrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3c2, 1);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3c2 Status register 0.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortSt00Read(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3c2, 1);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3c3 Unused.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortUnusedWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3c3, 1);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3c3 Unused.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortUnusedRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3c3, 1);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3c4-0x3c5 Sequencer.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortSrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3c4, 2);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3c4-0x3c5 Sequencer.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortSrRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3c4, 2);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3c6-0x3c9 DAC.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortDacWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3c6, 4);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3c6-0x3c9 DAC.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortDacRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3c6, 4);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3ca-0x3cd Graphics Position?}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortPosWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3ca, 4);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3ca-0x3cd Graphics Position?}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortPosRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3ca, 4);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3ce-0x3cf Graphics Controller.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortGrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3ce, 2);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3ca-0x3cf Graphics Controller.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortGrRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ VGA_IOPORT_READ_PLACEHOLDER(0x3ce, 2);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3b4-0x3b5 MDA CRT control.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortMdaCrtWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3b4, 2);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3b4-0x3b5 MDA CRT control.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortMdaCrtRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_READ_PLACEHOLDER(0x3b4, 2);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3ba MDA feature/status.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortMdaFcrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3ba, 1);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3ba MDA feature/status.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortMdaStRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_READ_PLACEHOLDER(0x3ba, 1);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3d4-0x3d5 CGA CRT control.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortCgaCrtWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3d4, 2);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3d4-0x3d5 CGA CRT control.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortCgaCrtRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_READ_PLACEHOLDER(0x3d4, 2);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,0x3da CGA feature/status.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortCgaFcrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_WRITE_PLACEHOLDER(0x3da, 1);
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,0x3da CGA feature/status.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortCgaStRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ /** @todo do vga_ioport_invalid here */
+ VGA_IOPORT_READ_PLACEHOLDER(0x3da, 1);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,VBE Data Port OUT handler (0x1ce).}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaIoPortWriteVbeData(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+
+ NOREF(pvUser);
+
+#ifndef IN_RING3
+ /*
+ * This has to be done on the host in order to execute the connector callbacks.
+ */
+ if ( pThis->vbe_index == VBE_DISPI_INDEX_ENABLE
+ || pThis->vbe_index == VBE_DISPI_INDEX_VBOX_VIDEO)
+ {
+ Log(("vgaIoPortWriteVbeData: VBE_DISPI_INDEX_ENABLE - Switching to host...\n"));
+ return VINF_IOM_R3_IOPORT_WRITE;
+ }
+#endif
+#ifdef VBE_BYTEWISE_IO
+ if (cb == 1)
+ {
+ if (!pThis->fWriteVBEData)
+ {
+ if ( (pThis->vbe_index == VBE_DISPI_INDEX_ENABLE)
+ && (u32 & VBE_DISPI_ENABLED))
+ {
+ pThis->fWriteVBEData = false;
+ return vbe_ioport_write_data(pDevIns, pThis, pThisCC, offPort, u32 & 0xFF);
+ }
+
+ pThis->cbWriteVBEData = u32 & 0xFF;
+ pThis->fWriteVBEData = true;
+ return VINF_SUCCESS;
+ }
+
+ u32 = (pThis->cbWriteVBEData << 8) | (u32 & 0xFF);
+ pThis->fWriteVBEData = false;
+ cb = 2;
+ }
+#endif
+ if (cb == 2 || cb == 4)
+ return vbe_ioport_write_data(pDevIns, pThis, pThisCC, offPort, u32);
+ AssertMsgFailed(("vgaIoPortWriteVbeData: offPort=%#x cb=%d u32=%#x\n", offPort, cb, u32));
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,VBE Index Port OUT handler (0x1ce).}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaIoPortWriteVbeIndex(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE); NOREF(pvUser);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+
+#ifdef VBE_BYTEWISE_IO
+ if (cb == 1)
+ {
+ if (!pThis->fWriteVBEIndex)
+ {
+ pThis->cbWriteVBEIndex = u32 & 0x00FF;
+ pThis->fWriteVBEIndex = true;
+ return VINF_SUCCESS;
+ }
+ pThis->fWriteVBEIndex = false;
+ vbe_ioport_write_index(pThis, offPort, (pThis->cbWriteVBEIndex << 8) | (u32 & 0x00FF));
+ return VINF_SUCCESS;
+ }
+#endif
+
+ if (cb == 2)
+ vbe_ioport_write_index(pThis, offPort, u32);
+ else
+ ASSERT_GUEST_MSG_FAILED(("vgaIoPortWriteVbeIndex: offPort=%#x cb=%d u32=%#x\n", offPort, cb, u32));
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,VBE Data Port IN handler (0x1cf).}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaIoPortReadVbeData(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE); NOREF(pvUser);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+
+#ifdef VBE_BYTEWISE_IO
+ if (cb == 1)
+ {
+ if (!pThis->fReadVBEData)
+ {
+ *pu32 = (vbe_ioport_read_data(pThis, offPort) >> 8) & 0xFF;
+ pThis->fReadVBEData = true;
+ return VINF_SUCCESS;
+ }
+ *pu32 = vbe_ioport_read_data(pThis, offPort) & 0xFF;
+ pThis->fReadVBEData = false;
+ return VINF_SUCCESS;
+ }
+#endif
+ if (cb == 2)
+ {
+ *pu32 = vbe_ioport_read_data(pThis, offPort);
+ return VINF_SUCCESS;
+ }
+ if (cb == 4)
+ {
+ if (pThis->vbe_regs[VBE_DISPI_INDEX_ID] == VBE_DISPI_ID_CFG)
+ *pu32 = vbe_ioport_read_data(pThis, offPort); /* New interface. */
+ else
+ *pu32 = pThis->vram_size; /* Quick hack for getting the vram size. */
+ return VINF_SUCCESS;
+ }
+ AssertMsgFailed(("vgaIoPortReadVbeData: offPort=%#x cb=%d\n", offPort, cb));
+ return VERR_IOM_IOPORT_UNUSED;
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,VBE Index Port IN handler (0x1cf).}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaIoPortReadVbeIndex(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ NOREF(pvUser);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+
+#ifdef VBE_BYTEWISE_IO
+ if (cb == 1)
+ {
+ if (!pThis->fReadVBEIndex)
+ {
+ *pu32 = (vbe_ioport_read_index(pThis, offPort) >> 8) & 0xFF;
+ pThis->fReadVBEIndex = true;
+ return VINF_SUCCESS;
+ }
+ *pu32 = vbe_ioport_read_index(pThis, offPort) & 0xFF;
+ pThis->fReadVBEIndex = false;
+ return VINF_SUCCESS;
+ }
+#endif
+ if (cb == 2)
+ {
+ *pu32 = vbe_ioport_read_index(pThis, offPort);
+ return VINF_SUCCESS;
+ }
+ AssertMsgFailed(("vgaIoPortReadVbeIndex: offPort=%#x cb=%d\n", offPort, cb));
+ return VERR_IOM_IOPORT_UNUSED;
+}
+
+#if defined(VBOX_WITH_HGSMI) && defined(IN_RING3)
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,HGSMI OUT handler.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaR3IOPortHgsmiWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+ LogFlowFunc(("offPort=0x%x u32=0x%x cb=%u\n", offPort, u32, cb));
+
+ NOREF(pvUser);
+
+ if (cb == 4)
+ {
+ switch (offPort)
+ {
+ case VGA_PORT_HGSMI_HOST: /* Host */
+ {
+# if defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_WITH_VDMA) || defined(VBOX_WITH_WDDM)
+ if (u32 == HGSMIOFFSET_VOID)
+ {
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSectIRQ, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSectIRQ, rcLock);
+
+ if (pThis->fu32PendingGuestFlags == 0)
+ {
+ PDMDevHlpPCISetIrqNoWait(pDevIns, 0, PDM_IRQ_LEVEL_LOW);
+ HGSMIClearHostGuestFlags(pThisCC->pHGSMI,
+ HGSMIHOSTFLAGS_IRQ
+ | HGSMIHOSTFLAGS_VSYNC
+ | HGSMIHOSTFLAGS_HOTPLUG
+ | HGSMIHOSTFLAGS_CURSOR_CAPABILITIES);
+ }
+ else
+ {
+ HGSMISetHostGuestFlags(pThisCC->pHGSMI, HGSMIHOSTFLAGS_IRQ | pThis->fu32PendingGuestFlags);
+ pThis->fu32PendingGuestFlags = 0;
+ /* Keep the IRQ unchanged. */
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSectIRQ);
+ }
+ else
+# endif
+ {
+ HGSMIHostWrite(pThisCC->pHGSMI, u32);
+ }
+ break;
+ }
+
+ case VGA_PORT_HGSMI_GUEST: /* Guest */
+ HGSMIGuestWrite(pThisCC->pHGSMI, u32);
+ break;
+
+ default:
+# ifdef DEBUG_sunlover
+ AssertMsgFailed(("vgaR3IOPortHgsmiWrite: offPort=%#x cb=%d u32=%#x\n", offPort, cb, u32));
+# endif
+ break;
+ }
+ }
+ else
+ {
+ /** @todo r=bird: According to Ralf Brown, one and two byte accesses to the
+ * 0x3b0-0x3b1 and 0x3b2-0x3b3 I/O port pairs should work the same as
+ * 0x3b4-0x3b5 (MDA CRT control). */
+ Log(("vgaR3IOPortHgsmiWrite: offPort=%#x cb=%d u32=%#x - possible valid MDA CRT access\n", offPort, cb, u32));
+# ifdef DEBUG_sunlover
+ AssertMsgFailed(("vgaR3IOPortHgsmiWrite: offPort=%#x cb=%d u32=%#x\n", offPort, cb, u32));
+# endif
+ STAM_REL_COUNTER_INC(&pThis->StatHgsmiMdaCgaAccesses);
+ }
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,HGSMI IN handler.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaR3IOPortHgmsiRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+ LogFlowFunc(("offPort=0x%x cb=%d\n", offPort, cb));
+
+ NOREF(pvUser);
+
+ VBOXSTRICTRC rc = VINF_SUCCESS;
+ if (cb == 4)
+ {
+ switch (offPort)
+ {
+ case VGA_PORT_HGSMI_HOST: /* Host */
+ *pu32 = HGSMIHostRead(pThisCC->pHGSMI);
+ break;
+ case VGA_PORT_HGSMI_GUEST: /* Guest */
+ *pu32 = HGSMIGuestRead(pThisCC->pHGSMI);
+ break;
+ default:
+ rc = VERR_IOM_IOPORT_UNUSED;
+ break;
+ }
+ }
+ else
+ {
+ /** @todo r=bird: According to Ralf Brown, one and two byte accesses to the
+ * 0x3b0-0x3b1 and 0x3b2-0x3b3 I/O port pairs should work the same as
+ * 0x3b4-0x3b5 (MDA CRT control). */
+ Log(("vgaR3IOPortHgmsiRead: offPort=%#x cb=%d - possible valid MDA CRT access\n", offPort, cb));
+ STAM_REL_COUNTER_INC(&pThis->StatHgsmiMdaCgaAccesses);
+ rc = VERR_IOM_IOPORT_UNUSED;
+ }
+
+ return rc;
+}
+
+#endif /* VBOX_WITH_HGSMI && IN_RING3*/
+
+
+
+
+/* -=-=-=-=-=- All Contexts -=-=-=-=-=- */
+
+/**
+ * @internal. For use inside VGAGCMemoryFillWrite only.
+ * Macro for apply logical operation and bit mask.
+ */
+#define APPLY_LOGICAL_AND_MASK(pThis, val, bit_mask) \
+ /* apply logical operation */ \
+ switch (pThis->gr[3] >> 3)\
+ { \
+ case 0: \
+ default:\
+ /* nothing to do */ \
+ break; \
+ case 1: \
+ /* and */ \
+ val &= pThis->latch; \
+ break; \
+ case 2: \
+ /* or */ \
+ val |= pThis->latch; \
+ break; \
+ case 3: \
+ /* xor */ \
+ val ^= pThis->latch; \
+ break; \
+ } \
+ /* apply bit mask */ \
+ val = (val & bit_mask) | (pThis->latch & ~bit_mask)
+
+/**
+ * Legacy VGA memory (0xa0000 - 0xbffff) write hook, to be called from IOM and from the inside of VGADeviceGC.cpp.
+ * This is the advanced version of vga_mem_writeb function.
+ *
+ * @returns VBox status code.
+ * @param pThis The shared VGA instance data.
+ * @param pThisCC The VGA instance data for the current context.
+ * @param pvUser User argument - ignored.
+ * @param GCPhysAddr Physical address of memory to write.
+ * @param u32Item Data to write, up to 4 bytes.
+ * @param cbItem Size of data Item, only 1/2/4 bytes is allowed for now.
+ * @param cItems Number of data items to write.
+ */
+static int vgaInternalMMIOFill(PVGASTATE pThis, PVGASTATECC pThisCC, void *pvUser, RTGCPHYS GCPhysAddr,
+ uint32_t u32Item, unsigned cbItem, unsigned cItems)
+{
+ uint32_t b;
+ uint32_t write_mask, bit_mask, set_mask;
+ uint32_t aVal[4];
+ unsigned i;
+ NOREF(pvUser);
+
+ for (i = 0; i < cbItem; i++)
+ {
+ aVal[i] = u32Item & 0xff;
+ u32Item >>= 8;
+ }
+
+ /* convert to VGA memory offset */
+ /// @todo add check for the end of region
+ GCPhysAddr &= 0x1ffff;
+ switch((pThis->gr[6] >> 2) & 3) {
+ case 0:
+ break;
+ case 1:
+ if (GCPhysAddr >= 0x10000)
+ return VINF_SUCCESS;
+ GCPhysAddr += pThis->bank_offset;
+ break;
+ case 2:
+ GCPhysAddr -= 0x10000;
+ if (GCPhysAddr >= 0x8000)
+ return VINF_SUCCESS;
+ break;
+ default:
+ case 3:
+ GCPhysAddr -= 0x18000;
+ if (GCPhysAddr >= 0x8000)
+ return VINF_SUCCESS;
+ break;
+ }
+
+ if (pThis->sr[4] & 0x08) {
+ /* chain 4 mode : simplest access */
+ VERIFY_VRAM_WRITE_OFF_RETURN(pThis, GCPhysAddr + cItems * cbItem - 1);
+
+ while (cItems-- > 0)
+ for (i = 0; i < cbItem; i++)
+ {
+ if (pThis->sr[2] & (1 << (GCPhysAddr & 3)))
+ {
+ pThisCC->pbVRam[GCPhysAddr] = aVal[i];
+ vgaR3MarkDirty(pThis, GCPhysAddr);
+ }
+ GCPhysAddr++;
+ }
+ } else if (pThis->gr[5] & 0x10) {
+ /* odd/even mode (aka text mode mapping) */
+ VERIFY_VRAM_WRITE_OFF_RETURN(pThis, (GCPhysAddr + cItems * cbItem) * 4 - 1);
+ while (cItems-- > 0)
+ for (i = 0; i < cbItem; i++)
+ {
+ unsigned plane = GCPhysAddr & 1;
+ if (pThis->sr[2] & (1 << plane)) {
+ RTGCPHYS PhysAddr2 = ((GCPhysAddr & ~1) * 4) | plane;
+ pThisCC->pbVRam[PhysAddr2] = aVal[i];
+ vgaR3MarkDirty(pThis, PhysAddr2);
+ }
+ GCPhysAddr++;
+ }
+ } else {
+ /* standard VGA latched access */
+ VERIFY_VRAM_WRITE_OFF_RETURN(pThis, (GCPhysAddr + cItems * cbItem) * 4 - 1);
+
+ switch(pThis->gr[5] & 3) {
+ default:
+ case 0:
+ /* rotate */
+ b = pThis->gr[3] & 7;
+ bit_mask = pThis->gr[8];
+ bit_mask |= bit_mask << 8;
+ bit_mask |= bit_mask << 16;
+ set_mask = mask16[pThis->gr[1]];
+
+ for (i = 0; i < cbItem; i++)
+ {
+ aVal[i] = ((aVal[i] >> b) | (aVal[i] << (8 - b))) & 0xff;
+ aVal[i] |= aVal[i] << 8;
+ aVal[i] |= aVal[i] << 16;
+
+ /* apply set/reset mask */
+ aVal[i] = (aVal[i] & ~set_mask) | (mask16[pThis->gr[0]] & set_mask);
+
+ APPLY_LOGICAL_AND_MASK(pThis, aVal[i], bit_mask);
+ }
+ break;
+ case 1:
+ for (i = 0; i < cbItem; i++)
+ aVal[i] = pThis->latch;
+ break;
+ case 2:
+ bit_mask = pThis->gr[8];
+ bit_mask |= bit_mask << 8;
+ bit_mask |= bit_mask << 16;
+ for (i = 0; i < cbItem; i++)
+ {
+ aVal[i] = mask16[aVal[i] & 0x0f];
+
+ APPLY_LOGICAL_AND_MASK(pThis, aVal[i], bit_mask);
+ }
+ break;
+ case 3:
+ /* rotate */
+ b = pThis->gr[3] & 7;
+
+ for (i = 0; i < cbItem; i++)
+ {
+ aVal[i] = (aVal[i] >> b) | (aVal[i] << (8 - b));
+ bit_mask = pThis->gr[8] & aVal[i];
+ bit_mask |= bit_mask << 8;
+ bit_mask |= bit_mask << 16;
+ aVal[i] = mask16[pThis->gr[0]];
+
+ APPLY_LOGICAL_AND_MASK(pThis, aVal[i], bit_mask);
+ }
+ break;
+ }
+
+ /* mask data according to sr[2] */
+ write_mask = mask16[pThis->sr[2]];
+
+ /* actually write data */
+ if (cbItem == 1)
+ {
+ /* The most frequently case is 1 byte I/O. */
+ while (cItems-- > 0)
+ {
+ ((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] = (((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] & ~write_mask) | (aVal[0] & write_mask);
+ vgaR3MarkDirty(pThis, GCPhysAddr * 4);
+ GCPhysAddr++;
+ }
+ }
+ else if (cbItem == 2)
+ {
+ /* The second case is 2 bytes I/O. */
+ while (cItems-- > 0)
+ {
+ ((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] = (((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] & ~write_mask) | (aVal[0] & write_mask);
+ vgaR3MarkDirty(pThis, GCPhysAddr * 4);
+ GCPhysAddr++;
+
+ ((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] = (((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] & ~write_mask) | (aVal[1] & write_mask);
+ vgaR3MarkDirty(pThis, GCPhysAddr * 4);
+ GCPhysAddr++;
+ }
+ }
+ else
+ {
+ /* And the rest is 4 bytes. */
+ Assert(cbItem == 4);
+ while (cItems-- > 0)
+ for (i = 0; i < cbItem; i++)
+ {
+ ((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] = (((uint32_t *)pThisCC->pbVRam)[GCPhysAddr] & ~write_mask) | (aVal[i] & write_mask);
+ vgaR3MarkDirty(pThis, GCPhysAddr * 4);
+ GCPhysAddr++;
+ }
+ }
+ }
+ return VINF_SUCCESS;
+}
+
+#undef APPLY_LOGICAL_AND_MASK
+
+/**
+ * @callback_method_impl{FNIOMMMIONEWFILL,
+ * Legacy VGA memory (0xa0000 - 0xbffff) write hook\, to be called from IOM and
+ * from the inside of VGADeviceGC.cpp. This is the advanced version of
+ * vga_mem_writeb function.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vgaMmioFill(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, uint32_t u32Item, unsigned cbItem, unsigned cItems)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+
+ return vgaInternalMMIOFill(pThis, pThisCC, pvUser, off, u32Item, cbItem, cItems);
+}
+
+
+/**
+ * @callback_method_impl{FNIOMMMIONEWREAD,
+ * Legacy VGA memory (0xa0000 - 0xbffff) read hook\, to be called from IOM.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaMmioRead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, void *pv, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ STAM_PROFILE_START(&pThis->CTX_MID_Z(Stat,MemoryRead), a);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+ NOREF(pvUser);
+
+ int rc = VINF_SUCCESS;
+ switch (cb)
+ {
+ case 1:
+ *(uint8_t *)pv = vga_mem_readb(pDevIns, pThis, pThisCC, off, &rc);
+ break;
+ case 2:
+/** @todo This and the wider accesses maybe misbehave when accessing bytes
+ * crossing the 512KB VRAM boundrary if the access is handled in
+ * ring-0 and operating in latched mode. */
+ *(uint16_t *)pv = vga_mem_readb(pDevIns, pThis, pThisCC, off, &rc)
+ | (vga_mem_readb(pDevIns, pThis, pThisCC, off + 1, &rc) << 8);
+ break;
+ case 4:
+ *(uint32_t *)pv = vga_mem_readb(pDevIns, pThis, pThisCC, off, &rc)
+ | (vga_mem_readb(pDevIns, pThis, pThisCC, off + 1, &rc) << 8)
+ | (vga_mem_readb(pDevIns, pThis, pThisCC, off + 2, &rc) << 16)
+ | (vga_mem_readb(pDevIns, pThis, pThisCC, off + 3, &rc) << 24);
+ break;
+
+ case 8:
+ *(uint64_t *)pv = (uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off, &rc)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 1, &rc) << 8)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 2, &rc) << 16)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 3, &rc) << 24)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 4, &rc) << 32)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 5, &rc) << 40)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 6, &rc) << 48)
+ | ((uint64_t)vga_mem_readb(pDevIns, pThis, pThisCC, off + 7, &rc) << 56);
+ break;
+
+ default:
+ {
+ uint8_t *pbData = (uint8_t *)pv;
+ while (cb-- > 0)
+ {
+ *pbData++ = vga_mem_readb(pDevIns, pThis, pThisCC, off++, &rc);
+ if (RT_UNLIKELY(rc != VINF_SUCCESS))
+ break;
+ }
+ }
+ }
+
+ STAM_PROFILE_STOP(&pThis->CTX_MID_Z(Stat,MemoryRead), a);
+ return rc;
+}
+
+/**
+ * @callback_method_impl{FNIOMMMIONEWWRITE,
+ * Legacy VGA memory (0xa0000 - 0xbffff) write hook\, to be called from IOM.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaMmioWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS off, void const *pv, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ uint8_t const *pbSrc = (uint8_t const *)pv;
+ NOREF(pvUser);
+ STAM_PROFILE_START(&pThis->CTX_MID_Z(Stat,MemoryWrite), a);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+
+ VBOXSTRICTRC rc;
+ switch (cb)
+ {
+ case 1:
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off, *pbSrc);
+ break;
+#if 1
+ case 2:
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 0, pbSrc[0]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 1, pbSrc[1]);
+ break;
+ case 4:
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 0, pbSrc[0]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 1, pbSrc[1]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 2, pbSrc[2]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 3, pbSrc[3]);
+ break;
+ case 8:
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 0, pbSrc[0]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 1, pbSrc[1]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 2, pbSrc[2]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 3, pbSrc[3]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 4, pbSrc[4]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 5, pbSrc[5]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 6, pbSrc[6]);
+ if (RT_LIKELY(rc == VINF_SUCCESS))
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off + 7, pbSrc[7]);
+ break;
+#else
+ case 2:
+ rc = vgaMmioFill(pDevIns, off, *(uint16_t *)pv, 2, 1);
+ break;
+ case 4:
+ rc = vgaMmioFill(pDevIns, off, *(uint32_t *)pv, 4, 1);
+ break;
+ case 8:
+ rc = vgaMmioFill(pDevIns, off, *(uint64_t *)pv, 8, 1);
+ break;
+#endif
+ default:
+ rc = VINF_SUCCESS;
+ while (cb-- > 0 && rc == VINF_SUCCESS)
+ rc = vga_mem_writeb(pDevIns, pThis, pThisCC, off++, *pbSrc++);
+ break;
+
+ }
+ STAM_PROFILE_STOP(&pThis->CTX_MID_Z(Stat,MemoryWrite), a);
+ return rc;
+}
+
+
+/* -=-=-=-=-=- All rings: VGA BIOS I/Os -=-=-=-=-=- */
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,
+ * Port I/O Handler for VGA BIOS IN operations.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortReadBios(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ RT_NOREF(pDevIns, pvUser, offPort, pu32, cb);
+ return VERR_IOM_IOPORT_UNUSED;
+}
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,
+ * Port I/O Handler for VGA BIOS IN operations.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC) vgaIoPortWriteBios(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ RT_NOREF2(pDevIns, pvUser);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+ Assert(offPort == 0); RT_NOREF(offPort);
+
+ /*
+ * VGA BIOS char printing.
+ */
+ if (cb == 1)
+ {
+#if 0
+ switch (u32)
+ {
+ case '\r': Log(("vgabios: <return>\n")); break;
+ case '\n': Log(("vgabios: <newline>\n")); break;
+ case '\t': Log(("vgabios: <tab>\n")); break;
+ default:
+ Log(("vgabios: %c\n", u32));
+ }
+#else
+ static int s_fLastWasNotNewline = 0; /* We are only called in a single-threaded way */
+ if (s_fLastWasNotNewline == 0)
+ Log(("vgabios: "));
+ if (u32 != '\r') /* return - is only sent in conjunction with '\n' */
+ Log(("%c", u32));
+ if (u32 == '\n')
+ s_fLastWasNotNewline = 0;
+ else
+ s_fLastWasNotNewline = 1;
+#endif
+ return VINF_SUCCESS;
+ }
+
+ /* not in use. */
+ return VERR_IOM_IOPORT_UNUSED;
+}
+
+
+/* -=-=-=-=-=- Ring 3 -=-=-=-=-=- */
+
+#ifdef IN_RING3
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,
+ * Port I/O Handler for VBE Extra OUT operations.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vbeR3IOPortWriteVbeExtra(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+ RT_NOREF(offPort, pvUser);
+
+ if (cb == 2)
+ {
+ Log(("vbeR3IOPortWriteVbeExtra: addr=%#RX32\n", u32));
+ pThisCC->u16VBEExtraAddress = u32;
+ }
+ else
+ Log(("vbeR3IOPortWriteVbeExtra: Ignoring invalid cb=%d writes to the VBE Extra port!!!\n", cb));
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWIN,
+ * Port I/O Handler for VBE Extra IN operations.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vbeR3IoPortReadVbeExtra(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ Assert(PDMDevHlpCritSectIsOwner(pDevIns, pDevIns->CTX_SUFF(pCritSectRo)));
+ RT_NOREF(offPort, pvUser);
+
+ int rc = VINF_SUCCESS;
+ if (pThisCC->u16VBEExtraAddress == 0xffff)
+ {
+ Log(("vbeR3IoPortReadVbeExtra: Requested number of 64k video banks\n"));
+ *pu32 = pThis->vram_size / _64K;
+ }
+ else if ( pThisCC->u16VBEExtraAddress >= pThisCC->cbVBEExtraData
+ || pThisCC->u16VBEExtraAddress + cb > pThisCC->cbVBEExtraData)
+ {
+ *pu32 = 0;
+ Log(("vbeR3IoPortReadVbeExtra: Requested address is out of VBE data!!! Address=%#x(%d) cbVBEExtraData=%#x(%d)\n",
+ pThisCC->u16VBEExtraAddress, pThisCC->u16VBEExtraAddress, pThisCC->cbVBEExtraData, pThisCC->cbVBEExtraData));
+ }
+ else
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ if (cb == 1)
+ {
+ *pu32 = pThisCC->pbVBEExtraData[pThisCC->u16VBEExtraAddress] & 0xFF;
+
+ Log(("vbeR3IoPortReadVbeExtra: cb=%#x %.*Rhxs\n", cb, cb, pu32));
+ }
+ else if (cb == 2)
+ {
+ *pu32 = pThisCC->pbVBEExtraData[pThisCC->u16VBEExtraAddress]
+ | (uint32_t)pThisCC->pbVBEExtraData[pThisCC->u16VBEExtraAddress + 1] << 8;
+
+ Log(("vbeR3IoPortReadVbeExtra: cb=%#x %.*Rhxs\n", cb, cb, pu32));
+ }
+ else
+ {
+ Log(("vbeR3IoPortReadVbeExtra: Invalid cb=%d read from the VBE Extra port!!!\n", cb));
+ rc = VERR_IOM_IOPORT_UNUSED;
+ }
+ }
+
+ return rc;
+}
+
+
+/**
+ * Parse the logo bitmap data at init time.
+ *
+ * @returns VBox status code.
+ *
+ * @param pThisCC The VGA instance data for ring-3.
+ */
+static int vbeR3ParseBitmap(PVGASTATECC pThisCC)
+{
+ /*
+ * Get bitmap header data
+ */
+ PCLOGOHDR pLogoHdr = (PCLOGOHDR)pThisCC->pbLogo;
+ PBMPFILEHDR pFileHdr = (PBMPFILEHDR)(pThisCC->pbLogo + sizeof(LOGOHDR));
+ PBMPWIN3XINFOHDR pCoreHdr = (PBMPWIN3XINFOHDR)(pThisCC->pbLogo + sizeof(LOGOHDR) + sizeof(BMPFILEHDR));
+
+ if (pFileHdr->uType == BMP_HDR_MAGIC)
+ {
+ switch (pCoreHdr->cbSize)
+ {
+ case BMP_HDR_SIZE_OS21:
+ {
+ PBMPOS2COREHDR pOs2Hdr = (PBMPOS2COREHDR)pCoreHdr;
+ pThisCC->cxLogo = pOs2Hdr->uWidth;
+ pThisCC->cyLogo = pOs2Hdr->uHeight;
+ pThisCC->cLogoPlanes = pOs2Hdr->cPlanes;
+ pThisCC->cLogoBits = pOs2Hdr->cBits;
+ pThisCC->LogoCompression = BMP_COMPRESSION_TYPE_NONE;
+ pThisCC->cLogoUsedColors = 0;
+ break;
+ }
+
+ case BMP_HDR_SIZE_OS22:
+ {
+ PBMPOS2COREHDR2 pOs22Hdr = (PBMPOS2COREHDR2)pCoreHdr;
+ pThisCC->cxLogo = pOs22Hdr->uWidth;
+ pThisCC->cyLogo = pOs22Hdr->uHeight;
+ pThisCC->cLogoPlanes = pOs22Hdr->cPlanes;
+ pThisCC->cLogoBits = pOs22Hdr->cBits;
+ pThisCC->LogoCompression = pOs22Hdr->enmCompression;
+ pThisCC->cLogoUsedColors = pOs22Hdr->cClrUsed;
+ break;
+ }
+
+ case BMP_HDR_SIZE_WIN3X:
+ pThisCC->cxLogo = pCoreHdr->uWidth;
+ pThisCC->cyLogo = pCoreHdr->uHeight;
+ pThisCC->cLogoPlanes = pCoreHdr->cPlanes;
+ pThisCC->cLogoBits = pCoreHdr->cBits;
+ pThisCC->LogoCompression = pCoreHdr->enmCompression;
+ pThisCC->cLogoUsedColors = pCoreHdr->cClrUsed;
+ break;
+
+ default:
+ AssertLogRelMsgFailedReturn(("Unsupported bitmap header size %u.\n", pCoreHdr->cbSize),
+ VERR_INVALID_PARAMETER);
+ break;
+ }
+
+ AssertLogRelMsgReturn(pThisCC->cxLogo <= LOGO_MAX_WIDTH && pThisCC->cyLogo <= LOGO_MAX_HEIGHT,
+ ("Bitmap %ux%u is too big.\n", pThisCC->cxLogo, pThisCC->cyLogo),
+ VERR_INVALID_PARAMETER);
+
+ AssertLogRelMsgReturn(pThisCC->cLogoPlanes == 1,
+ ("Bitmap planes %u != 1.\n", pThisCC->cLogoPlanes),
+ VERR_INVALID_PARAMETER);
+
+ AssertLogRelMsgReturn(pThisCC->cLogoBits == 4 || pThisCC->cLogoBits == 8 || pThisCC->cLogoBits == 24,
+ ("Unsupported %u depth.\n", pThisCC->cLogoBits),
+ VERR_INVALID_PARAMETER);
+
+ AssertLogRelMsgReturn(pThisCC->cLogoUsedColors <= 256,
+ ("Unsupported %u colors.\n", pThisCC->cLogoUsedColors),
+ VERR_INVALID_PARAMETER);
+
+ AssertLogRelMsgReturn(pThisCC->LogoCompression == BMP_COMPRESSION_TYPE_NONE,
+ ("Unsupported %u compression.\n", pThisCC->LogoCompression),
+ VERR_INVALID_PARAMETER);
+
+ AssertLogRelMsgReturn(pLogoHdr->cbLogo > pFileHdr->offBits,
+ ("Wrong bitmap data offset %u, cbLogo=%u.\n", pFileHdr->offBits, pLogoHdr->cbLogo),
+ VERR_INVALID_PARAMETER);
+
+ uint32_t const cbFileData = pLogoHdr->cbLogo - pFileHdr->offBits;
+ uint32_t cbImageData = (uint32_t)pThisCC->cxLogo * pThisCC->cyLogo * pThisCC->cLogoPlanes;
+ if (pThisCC->cLogoBits == 4)
+ cbImageData /= 2;
+ else if (pThisCC->cLogoBits == 24)
+ cbImageData *= 3;
+ AssertLogRelMsgReturn(cbImageData <= cbFileData,
+ ("Wrong BMP header data %u (cbLogo=%u offBits=%u)\n", cbImageData, pFileHdr->offBits, pLogoHdr->cbLogo),
+ VERR_INVALID_PARAMETER);
+
+ AssertLogRelMsgReturn(pLogoHdr->cbLogo == pFileHdr->cbFileSize,
+ ("Wrong bitmap file size %u, cbLogo=%u.\n", pFileHdr->cbFileSize, pLogoHdr->cbLogo),
+ VERR_INVALID_PARAMETER);
+
+ /*
+ * Read bitmap palette
+ */
+ if (!pThisCC->cLogoUsedColors)
+ pThisCC->cLogoPalEntries = 1 << (pThisCC->cLogoPlanes * pThisCC->cLogoBits);
+ else
+ pThisCC->cLogoPalEntries = pThisCC->cLogoUsedColors;
+
+ if (pThisCC->cLogoPalEntries)
+ {
+ const uint8_t *pbPal = pThisCC->pbLogo + sizeof(LOGOHDR) + sizeof(BMPFILEHDR) + pCoreHdr->cbSize; /* ASSUMES Size location (safe) */
+
+ for (uint16_t i = 0; i < pThisCC->cLogoPalEntries; i++)
+ {
+ uint16_t j;
+ uint32_t u32Pal = 0;
+
+ for (j = 0; j < 3; j++)
+ {
+ uint8_t b = *pbPal++;
+ u32Pal <<= 8;
+ u32Pal |= b;
+ }
+
+ pbPal++; /* skip unused byte */
+ pThisCC->au32LogoPalette[i] = u32Pal;
+ }
+ }
+
+ /*
+ * Bitmap data offset
+ */
+ pThisCC->pbLogoBitmap = pThisCC->pbLogo + sizeof(LOGOHDR) + pFileHdr->offBits;
+ }
+ else
+ AssertLogRelMsgFailedReturn(("Not a BMP file.\n"), VERR_INVALID_PARAMETER);
+
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Show logo bitmap data.
+ *
+ * @returns VBox status code.
+ *
+ * @param cBits Logo depth.
+ * @param xLogo Logo X position.
+ * @param yLogo Logo Y position.
+ * @param cxLogo Logo width.
+ * @param cyLogo Logo height.
+ * @param fInverse True if the bitmask is black on white (only for 1bpp)
+ * @param iStep Fade in/fade out step.
+ * @param pu32Palette Palette data.
+ * @param pbSrc Source buffer.
+ * @param pbDst Destination buffer.
+ */
+static void vbeR3ShowBitmap(uint16_t cBits, uint16_t xLogo, uint16_t yLogo, uint16_t cxLogo, uint16_t cyLogo,
+ bool fInverse, uint8_t iStep, const uint32_t *pu32Palette, const uint8_t *pbSrc, uint8_t *pbDst)
+{
+ uint16_t i;
+ size_t cbPadBytes = 0;
+ size_t cbLineDst = LOGO_MAX_WIDTH * 4;
+ uint16_t cyLeft = cyLogo;
+
+ pbDst += xLogo * 4 + yLogo * cbLineDst;
+
+ switch (cBits)
+ {
+ case 1:
+ pbDst += cyLogo * cbLineDst;
+ cbPadBytes = 0;
+ break;
+
+ case 4:
+ if (((cxLogo % 8) == 0) || ((cxLogo % 8) > 6))
+ cbPadBytes = 0;
+ else if ((cxLogo % 8) <= 2)
+ cbPadBytes = 3;
+ else if ((cxLogo % 8) <= 4)
+ cbPadBytes = 2;
+ else
+ cbPadBytes = 1;
+ break;
+
+ case 8:
+ cbPadBytes = ((cxLogo % 4) == 0) ? 0 : (4 - (cxLogo % 4));
+ break;
+
+ case 24:
+ cbPadBytes = cxLogo % 4;
+ break;
+ }
+
+ uint8_t j = 0, c = 0;
+
+ while (cyLeft-- > 0)
+ {
+ uint8_t *pbTmpDst = pbDst;
+
+ if (cBits != 1)
+ j = 0;
+
+ for (i = 0; i < cxLogo; i++)
+ {
+ switch (cBits)
+ {
+ case 1:
+ {
+ if (!j)
+ c = *pbSrc++;
+
+ if (c & 1)
+ {
+ if (fInverse)
+ {
+ *pbTmpDst++ = 0;
+ *pbTmpDst++ = 0;
+ *pbTmpDst++ = 0;
+ pbTmpDst++;
+ }
+ else
+ {
+ uint8_t pix = 0xFF * iStep / LOGO_SHOW_STEPS;
+ *pbTmpDst++ = pix;
+ *pbTmpDst++ = pix;
+ *pbTmpDst++ = pix;
+ pbTmpDst++;
+ }
+ }
+ else
+ pbTmpDst += 4;
+ c >>= 1;
+ j = (j + 1) % 8;
+ break;
+ }
+
+ case 4:
+ {
+ if (!j)
+ c = *pbSrc++;
+
+ uint8_t pix = (c >> 4) & 0xF;
+ c <<= 4;
+
+ uint32_t u32Pal = pu32Palette[pix];
+
+ pix = (u32Pal >> 16) & 0xFF;
+ *pbTmpDst++ = pix * iStep / LOGO_SHOW_STEPS;
+ pix = (u32Pal >> 8) & 0xFF;
+ *pbTmpDst++ = pix * iStep / LOGO_SHOW_STEPS;
+ pix = u32Pal & 0xFF;
+ *pbTmpDst++ = pix * iStep / LOGO_SHOW_STEPS;
+ pbTmpDst++;
+
+ j = (j + 1) % 2;
+ break;
+ }
+
+ case 8:
+ {
+ uint32_t u32Pal = pu32Palette[*pbSrc++];
+
+ uint8_t pix = (u32Pal >> 16) & 0xFF;
+ *pbTmpDst++ = pix * iStep / LOGO_SHOW_STEPS;
+ pix = (u32Pal >> 8) & 0xFF;
+ *pbTmpDst++ = pix * iStep / LOGO_SHOW_STEPS;
+ pix = u32Pal & 0xFF;
+ *pbTmpDst++ = pix * iStep / LOGO_SHOW_STEPS;
+ pbTmpDst++;
+ break;
+ }
+
+ case 24:
+ *pbTmpDst++ = *pbSrc++ * iStep / LOGO_SHOW_STEPS;
+ *pbTmpDst++ = *pbSrc++ * iStep / LOGO_SHOW_STEPS;
+ *pbTmpDst++ = *pbSrc++ * iStep / LOGO_SHOW_STEPS;
+ pbTmpDst++;
+ break;
+ }
+ }
+
+ pbDst -= cbLineDst;
+ pbSrc += cbPadBytes;
+ }
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTNEWOUT,
+ * Port I/O Handler for BIOS Logo OUT operations.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vbeR3IoPortWriteCmdLogo(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t u32, unsigned cb)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ RT_NOREF(pvUser, offPort);
+
+ Log(("vbeR3IoPortWriteCmdLogo: cb=%d u32=%#04x(%#04d) (byte)\n", cb, u32, u32));
+
+ if (cb == 2)
+ {
+ /* Get the logo command */
+ switch (u32 & 0xFF00)
+ {
+ case LOGO_CMD_SET_OFFSET:
+ pThisCC->offLogoData = u32 & 0xFF;
+ break;
+
+ case LOGO_CMD_SHOW_BMP:
+ {
+ uint8_t iStep = u32 & 0xFF;
+ const uint8_t *pbSrc = pThisCC->pbLogoBitmap;
+ uint8_t *pbDst;
+ PCLOGOHDR pLogoHdr = (PCLOGOHDR)pThisCC->pbLogo;
+ uint32_t offDirty = 0;
+ uint16_t xLogo = (LOGO_MAX_WIDTH - pThisCC->cxLogo) / 2;
+ uint16_t yLogo = LOGO_MAX_HEIGHT - (LOGO_MAX_HEIGHT - pThisCC->cyLogo) / 2;
+
+ /* Check VRAM size */
+ if (pThis->vram_size < LOGO_MAX_SIZE)
+ break;
+
+ if (pThis->vram_size >= LOGO_MAX_SIZE * 2)
+ pbDst = pThisCC->pbVRam + LOGO_MAX_SIZE;
+ else
+ pbDst = pThisCC->pbVRam;
+
+ /* Clear screen - except on power on... */
+ if (!pThisCC->fLogoClearScreen)
+ {
+ /* Clear vram */
+ uint32_t *pu32Dst = (uint32_t *)pbDst;
+ for (int i = 0; i < LOGO_MAX_WIDTH; i++)
+ for (int j = 0; j < LOGO_MAX_HEIGHT; j++)
+ *pu32Dst++ = 0;
+ pThisCC->fLogoClearScreen = true;
+ }
+
+ /* Show the bitmap. */
+ vbeR3ShowBitmap(pThisCC->cLogoBits, xLogo, yLogo,
+ pThisCC->cxLogo, pThisCC->cyLogo,
+ false, iStep, &pThisCC->au32LogoPalette[0],
+ pbSrc, pbDst);
+
+ /* Show the 'Press F12...' text. */
+ if (pLogoHdr->fu8ShowBootMenu == 2)
+ vbeR3ShowBitmap(1, LOGO_F12TEXT_X, LOGO_F12TEXT_Y,
+ LOGO_F12TEXT_WIDTH, LOGO_F12TEXT_HEIGHT,
+ pThisCC->fBootMenuInverse, iStep, &pThisCC->au32LogoPalette[0],
+ &g_abLogoF12BootText[0], pbDst);
+
+ /* Blit the offscreen buffer. */
+ if (pThis->vram_size >= LOGO_MAX_SIZE * 2)
+ {
+ uint32_t *pu32TmpDst = (uint32_t *)pThisCC->pbVRam;
+ uint32_t *pu32TmpSrc = (uint32_t *)(pThisCC->pbVRam + LOGO_MAX_SIZE);
+ for (int i = 0; i < LOGO_MAX_WIDTH; i++)
+ {
+ for (int j = 0; j < LOGO_MAX_HEIGHT; j++)
+ *pu32TmpDst++ = *pu32TmpSrc++;
+ }
+ }
+
+ /* Set the dirty flags. */
+ while (offDirty <= LOGO_MAX_SIZE)
+ {
+ vgaR3MarkDirty(pThis, offDirty);
+ offDirty += GUEST_PAGE_SIZE;
+ }
+ break;
+ }
+
+ default:
+ Log(("vbeR3IoPortWriteCmdLogo: invalid command %d\n", u32));
+ pThisCC->LogoCommand = LOGO_CMD_NOP;
+ break;
+ }
+
+ return VINF_SUCCESS;
+ }
+
+ Log(("vbeR3IoPortWriteCmdLogo: Ignoring invalid cb=%d writes to the VBE Extra port!!!\n", cb));
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @callback_method_impl{FNIOMIOPORTIN,
+ * Port I/O Handler for BIOS Logo IN operations.}
+ */
+static DECLCALLBACK(VBOXSTRICTRC)
+vbeR3IoPortReadCmdLogo(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT offPort, uint32_t *pu32, unsigned cb)
+{
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ RT_NOREF(pvUser, offPort);
+
+ if (pThisCC->offLogoData + cb > pThisCC->cbLogo)
+ {
+ Log(("vbeR3IoPortReadCmdLogo: Requested address is out of Logo data!!! offLogoData=%#x(%d) cbLogo=%#x(%d)\n",
+ pThisCC->offLogoData, pThisCC->offLogoData, pThisCC->cbLogo, pThisCC->cbLogo));
+ return VINF_SUCCESS;
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ PCRTUINT64U p = (PCRTUINT64U)&pThisCC->pbLogo[pThisCC->offLogoData];
+ switch (cb)
+ {
+ case 1: *pu32 = p->au8[0]; break;
+ case 2: *pu32 = p->au16[0]; break;
+ case 4: *pu32 = p->au32[0]; break;
+ //case 8: *pu32 = p->au64[0]; break;
+ default: AssertFailed(); break;
+ }
+ Log(("vbeR3IoPortReadCmdLogo: LogoOffset=%#x(%d) cb=%#x %.*Rhxs\n", pThisCC->offLogoData, pThisCC->offLogoData, cb, cb, pu32));
+
+ pThisCC->LogoCommand = LOGO_CMD_NOP;
+ pThisCC->offLogoData += cb;
+
+ return VINF_SUCCESS;
+}
+
+
+/* -=-=-=-=-=- Ring 3: Debug Info Handlers -=-=-=-=-=- */
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV,
+ * Dumps several interesting bits of the VGA state that are difficult to
+ * decode from the registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoState(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ int is_graph, double_scan;
+ int w, h, char_height, char_dots;
+ int val, vfreq_hz, hfreq_hz;
+ vga_retrace_s *r = &pThis->retrace_state;
+ const char *clocks[] = { "25.175 MHz", "28.322 MHz", "External", "Reserved?!" };
+ const char *mem_map[] = { "A000-BFFF", "A000-AFFF", "B000-B7FF", "B800-BFFF" };
+ NOREF(pszArgs);
+
+ is_graph = pThis->gr[6] & 1;
+ char_dots = (pThis->sr[0x01] & 1) ? 8 : 9;
+ double_scan = pThis->cr[9] >> 7;
+ pHlp->pfnPrintf(pHlp, "decoding memory at %s\n", mem_map[(pThis->gr[6] >> 2) & 3]);
+ pHlp->pfnPrintf(pHlp, "Misc status reg. MSR:%02X\n", pThis->msr);
+ pHlp->pfnPrintf(pHlp, "pixel clock: %s\n", clocks[(pThis->msr >> 2) & 3]);
+ pHlp->pfnPrintf(pHlp, "double scanning %s\n", double_scan ? "on" : "off");
+ pHlp->pfnPrintf(pHlp, "double clocking %s\n", pThis->sr[1] & 0x08 ? "on" : "off");
+ val = pThis->cr[0] + 5;
+ pHlp->pfnPrintf(pHlp, "htotal: %d px (%d cclk)\n", val * char_dots, val);
+ val = pThis->cr[6] + ((pThis->cr[7] & 1) << 8) + ((pThis->cr[7] & 0x20) << 4) + 2;
+ pHlp->pfnPrintf(pHlp, "vtotal: %d px\n", val);
+ val = pThis->cr[1] + 1;
+ w = val * char_dots;
+ pHlp->pfnPrintf(pHlp, "hdisp : %d px (%d cclk)\n", w, val);
+ val = pThis->cr[0x12] + ((pThis->cr[7] & 2) << 7) + ((pThis->cr[7] & 0x40) << 4) + 1;
+ h = val;
+ pHlp->pfnPrintf(pHlp, "vdisp : %d px\n", val);
+ val = ((pThis->cr[9] & 0x40) << 3) + ((pThis->cr[7] & 0x10) << 4) + pThis->cr[0x18];
+ pHlp->pfnPrintf(pHlp, "split : %d ln\n", val);
+ val = (pThis->cr[0xc] << 8) + pThis->cr[0xd];
+ pHlp->pfnPrintf(pHlp, "start : %#x\n", val);
+ if (!is_graph)
+ {
+ uint8_t ch_stride;
+
+ ch_stride = pThis->cr[0x17] & 0x40 ? 4 : 8;
+ val = (pThis->cr[9] & 0x1f) + 1;
+ char_height = val;
+ pHlp->pfnPrintf(pHlp, "char height %d\n", val);
+ pHlp->pfnPrintf(pHlp, "text mode %dx%d\n", w / char_dots, h / (char_height << double_scan));
+
+ uint32_t cbLine;
+ uint32_t offStart;
+ uint32_t offCursr;
+ uint32_t uLineCompareIgn;
+ vgaR3GetOffsets(pThis, &cbLine, &offStart, &uLineCompareIgn);
+ if (!cbLine)
+ cbLine = 80 * ch_stride;
+ offStart *= ch_stride;
+ offCursr = ((pThis->cr[0x0e] << 8) | pThis->cr[0x0f]) * ch_stride;
+ pHlp->pfnPrintf(pHlp, "cbLine: %#x\n", cbLine);
+ pHlp->pfnPrintf(pHlp, "offStart: %#x (line %#x)\n", offStart, offStart / cbLine);
+ pHlp->pfnPrintf(pHlp, "offCursr: %#x\n", offCursr);
+ }
+ if (pThis->fRealRetrace)
+ {
+ val = r->hb_start;
+ pHlp->pfnPrintf(pHlp, "hblank start: %d px (%d cclk)\n", val * char_dots, val);
+ val = r->hb_end;
+ pHlp->pfnPrintf(pHlp, "hblank end : %d px (%d cclk)\n", val * char_dots, val);
+ pHlp->pfnPrintf(pHlp, "vblank start: %d px, end: %d px\n", r->vb_start, r->vb_end);
+ pHlp->pfnPrintf(pHlp, "vsync start : %d px, end: %d px\n", r->vs_start, r->vs_end);
+ pHlp->pfnPrintf(pHlp, "cclks per frame: %d\n", r->frame_cclks);
+ pHlp->pfnPrintf(pHlp, "cclk time (ns) : %d\n", r->cclk_ns);
+ if (r->frame_ns && r->h_total_ns) /* Careful in case state is temporarily invalid. */
+ {
+ vfreq_hz = 1000000000 / r->frame_ns;
+ hfreq_hz = 1000000000 / r->h_total_ns;
+ pHlp->pfnPrintf(pHlp, "vfreq: %d Hz, hfreq: %d.%03d kHz\n",
+ vfreq_hz, hfreq_hz / 1000, hfreq_hz % 1000);
+ }
+ }
+ pHlp->pfnPrintf(pHlp, "display refresh interval: %u ms\n", pThis->cMilliesRefreshInterval);
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->svga.fEnabled)
+ pHlp->pfnPrintf(pHlp, pThis->svga.f3DEnabled ? "VMSVGA 3D enabled: %ux%ux%u\n" : "VMSVGA enabled: %ux%ux%u",
+ pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp);
+# endif
+}
+
+
+/**
+ * Prints a separator line.
+ *
+ * @param pHlp Callback functions for doing output.
+ * @param cCols The number of columns.
+ * @param pszTitle The title text, NULL if none.
+ */
+static void vgaR3InfoTextPrintSeparatorLine(PCDBGFINFOHLP pHlp, size_t cCols, const char *pszTitle)
+{
+ if (pszTitle)
+ {
+ size_t cchTitle = strlen(pszTitle);
+ if (cchTitle + 6 >= cCols)
+ {
+ pHlp->pfnPrintf(pHlp, "-- %s --", pszTitle);
+ cCols = 0;
+ }
+ else
+ {
+ size_t cchLeft = (cCols - cchTitle - 2) / 2;
+ cCols -= cchLeft + cchTitle + 2;
+ while (cchLeft-- > 0)
+ pHlp->pfnPrintf(pHlp, "-");
+ pHlp->pfnPrintf(pHlp, " %s ", pszTitle);
+ }
+ }
+
+ while (cCols-- > 0)
+ pHlp->pfnPrintf(pHlp, "-");
+ pHlp->pfnPrintf(pHlp, "\n");
+}
+
+
+/**
+ * Worker for vgaR3InfoText.
+ *
+ * @param pThis The shared VGA state.
+ * @param pThisCC The VGA state for ring-3.
+ * @param pHlp Callback functions for doing output.
+ * @param offStart Where to start dumping (relative to the VRAM).
+ * @param cbLine The source line length (aka line_offset).
+ * @param cCols The number of columns on the screen.
+ * @param cRows The number of rows to dump.
+ * @param iScrBegin The row at which the current screen output starts.
+ * @param iScrEnd The row at which the current screen output end
+ * (exclusive).
+ */
+static void vgaR3InfoTextWorker(PVGASTATE pThis, PVGASTATER3 pThisCC, PCDBGFINFOHLP pHlp,
+ uint32_t offStart, uint32_t cbLine,
+ uint32_t cCols, uint32_t cRows,
+ uint32_t iScrBegin, uint32_t iScrEnd)
+{
+ /* Title, */
+ char szTitle[32];
+ if (iScrBegin || iScrEnd < cRows)
+ RTStrPrintf(szTitle, sizeof(szTitle), "%ux%u (+%u before, +%u after)",
+ cCols, iScrEnd - iScrBegin, iScrBegin, cRows - iScrEnd);
+ else
+ RTStrPrintf(szTitle, sizeof(szTitle), "%ux%u", cCols, iScrEnd - iScrBegin);
+
+ /* Do the dumping. */
+ uint8_t const *pbSrcOuter = pThisCC->pbVRam + offStart;
+ uint8_t const cStride = pThis->cr[0x17] & 0x40 ? 4 : 8;
+ uint32_t iRow;
+ for (iRow = 0; iRow < cRows; iRow++, pbSrcOuter += cbLine)
+ {
+ if ((uintptr_t)(pbSrcOuter + cbLine - pThisCC->pbVRam) > pThis->vram_size) {
+ pHlp->pfnPrintf(pHlp, "The last %u row/rows is/are outside the VRAM.\n", cRows - iRow);
+ break;
+ }
+
+ if (iRow == 0)
+ vgaR3InfoTextPrintSeparatorLine(pHlp, cCols, szTitle);
+ else if (iRow == iScrBegin)
+ vgaR3InfoTextPrintSeparatorLine(pHlp, cCols, "screen start");
+ else if (iRow == iScrEnd)
+ vgaR3InfoTextPrintSeparatorLine(pHlp, cCols, "screen end");
+
+ uint8_t const *pbSrc = pbSrcOuter;
+ for (uint32_t iCol = 0; iCol < cCols; ++iCol)
+ {
+ if (RT_C_IS_PRINT(*pbSrc))
+ pHlp->pfnPrintf(pHlp, "%c", *pbSrc);
+ else
+ pHlp->pfnPrintf(pHlp, ".");
+ pbSrc += cStride; /* chars are spaced 8 or sometimes 4 bytes apart */
+ }
+ pHlp->pfnPrintf(pHlp, "\n");
+ }
+
+ /* Final separator. */
+ vgaR3InfoTextPrintSeparatorLine(pHlp, cCols, NULL);
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV,
+ * Dumps VGA memory formatted as ASCII text\, no attributes. Only looks at
+ * the first page.}
+ */
+static DECLCALLBACK(void) vgaR3InfoText(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+
+ /*
+ * Parse args.
+ */
+ bool fAll = true;
+ if (pszArgs && *pszArgs)
+ {
+ if (!strcmp(pszArgs, "all"))
+ fAll = true;
+ else if (!strcmp(pszArgs, "scr") || !strcmp(pszArgs, "screen"))
+ fAll = false;
+ else
+ {
+ pHlp->pfnPrintf(pHlp, "Invalid argument: '%s'\n", pszArgs);
+ return;
+ }
+ }
+
+ /*
+ * Check that we're in text mode and that the VRAM is accessible.
+ */
+ if (!(pThis->gr[6] & 1))
+ {
+ uint8_t *pbSrc = pThisCC->pbVRam;
+ if (pbSrc)
+ {
+ /*
+ * Figure out the display size and where the text is.
+ *
+ * Note! We're cutting quite a few corners here and this code could
+ * do with some brushing up. Dumping from the start of the
+ * frame buffer is done intentionally so that we're more
+ * likely to obtain the full scrollback of a linux panic.
+ * windbg> .printf "------ start -----\n"; .for (r $t0 = 0; @$t0 < 25; r $t0 = @$t0 + 1) { .for (r $t1 = 0; @$t1 < 80; r $t1 = @$t1 + 1) { .printf "%c", by( (@$t0 * 80 + @$t1) * 8 + 100f0000) }; .printf "\n" }; .printf "------ end -----\n";
+ */
+ uint32_t cbLine;
+ uint32_t offStart;
+ uint32_t uLineCompareIgn;
+ vgaR3GetOffsets(pThis, &cbLine, &offStart, &uLineCompareIgn);
+ if (!cbLine)
+ cbLine = 80 * 8;
+ offStart *= 8;
+
+ uint32_t uVDisp = pThis->cr[0x12] + ((pThis->cr[7] & 2) << 7) + ((pThis->cr[7] & 0x40) << 4) + 1;
+ uint32_t uCharHeight = (pThis->cr[9] & 0x1f) + 1;
+ uint32_t uDblScan = pThis->cr[9] >> 7;
+ uint32_t cScrRows = uVDisp / (uCharHeight << uDblScan);
+ if (cScrRows < 25)
+ cScrRows = 25;
+ uint32_t iScrBegin = offStart / cbLine;
+ uint32_t cRows = iScrBegin + cScrRows;
+ uint32_t cCols = cbLine / 8;
+
+ if (fAll)
+ vgaR3InfoTextWorker(pThis, pThisCC, pHlp, offStart - iScrBegin * cbLine, cbLine,
+ cCols, cRows, iScrBegin, iScrBegin + cScrRows);
+ else
+ vgaR3InfoTextWorker(pThis, pThisCC, pHlp, offStart, cbLine, cCols, cScrRows, 0, cScrRows);
+ }
+ else
+ pHlp->pfnPrintf(pHlp, "VGA memory not available!\n");
+ }
+ else
+ pHlp->pfnPrintf(pHlp, "Not in text mode!\n");
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, Dumps VGA Sequencer registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoSR(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "VGA Sequencer (3C5): SR index 3C4:%02X\n", pThis->sr_index);
+ Assert(sizeof(pThis->sr) >= 8);
+ for (unsigned i = 0; i < 8; ++i)
+ pHlp->pfnPrintf(pHlp, " SR%02X:%02X", i, pThis->sr[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, Dumps VGA CRTC registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoCR(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ unsigned i;
+ NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "VGA CRTC (3D5): CRTC index 3D4:%02X\n", pThis->cr_index);
+ Assert(sizeof(pThis->cr) >= 24);
+ for (i = 0; i < 10; ++i)
+ pHlp->pfnPrintf(pHlp, " CR%02X:%02X", i, pThis->cr[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+ for (i = 10; i < 20; ++i)
+ pHlp->pfnPrintf(pHlp, " CR%02X:%02X", i, pThis->cr[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+ for (i = 20; i < 25; ++i)
+ pHlp->pfnPrintf(pHlp, " CR%02X:%02X", i, pThis->cr[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV,
+ * Dumps VGA Graphics Controller registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoGR(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "VGA Graphics Controller (3CF): GR index 3CE:%02X\n", pThis->gr_index);
+ Assert(sizeof(pThis->gr) >= 9);
+ for (unsigned i = 0; i < 9; ++i)
+ pHlp->pfnPrintf(pHlp, " GR%02X:%02X", i, pThis->gr[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV,
+ * Dumps VGA Attribute Controller registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoAR(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ unsigned i;
+ NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "VGA Attribute Controller (3C0): index reg %02X, flip-flop: %d (%s)\n",
+ pThis->ar_index, pThis->ar_flip_flop, pThis->ar_flip_flop ? "data" : "index" );
+ Assert(sizeof(pThis->ar) >= 0x14);
+ pHlp->pfnPrintf(pHlp, " Palette:");
+ for (i = 0; i < 0x10; ++i)
+ pHlp->pfnPrintf(pHlp, " %02X", pThis->ar[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+ for (i = 0x10; i <= 0x14; ++i)
+ pHlp->pfnPrintf(pHlp, " AR%02X:%02X", i, pThis->ar[i]);
+ pHlp->pfnPrintf(pHlp, "\n");
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, Dumps VGA DAC registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoDAC(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "VGA DAC contents:\n");
+ for (unsigned i = 0; i < 0x100; ++i)
+ pHlp->pfnPrintf(pHlp, " %02X: %02X %02X %02X\n",
+ i, pThis->palette[i*3+0], pThis->palette[i*3+1], pThis->palette[i*3+2]);
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV, Dumps VBE registers.}
+ */
+static DECLCALLBACK(void) vgaR3InfoVBE(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ NOREF(pszArgs);
+
+ pHlp->pfnPrintf(pHlp, "LFB at %RGp\n", pThis->GCPhysVRAM);
+ if (!(pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED))
+ pHlp->pfnPrintf(pHlp, "VBE disabled\n");
+ else
+ {
+ pHlp->pfnPrintf(pHlp, "VBE state (chip ID 0x%04x):\n", pThis->vbe_regs[VBE_DISPI_INDEX_ID]);
+ pHlp->pfnPrintf(pHlp, " Display resolution: %d x %d @ %dbpp\n",
+ pThis->vbe_regs[VBE_DISPI_INDEX_XRES], pThis->vbe_regs[VBE_DISPI_INDEX_YRES],
+ pThis->vbe_regs[VBE_DISPI_INDEX_BPP]);
+ pHlp->pfnPrintf(pHlp, " Virtual resolution: %d x %d\n",
+ pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH], pThis->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT]);
+ pHlp->pfnPrintf(pHlp, " Display start addr: %d, %d\n",
+ pThis->vbe_regs[VBE_DISPI_INDEX_X_OFFSET], pThis->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET]);
+ pHlp->pfnPrintf(pHlp, " Linear scanline pitch: 0x%04x\n", pThis->vbe_line_offset);
+ pHlp->pfnPrintf(pHlp, " Linear display start : 0x%04x\n", pThis->vbe_start_addr);
+ pHlp->pfnPrintf(pHlp, " Selected bank: 0x%04x\n", pThis->vbe_regs[VBE_DISPI_INDEX_BANK]);
+ pHlp->pfnPrintf(pHlp, " DAC: %d-bit\n", pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_8BIT_DAC ? 8 : 6);
+ }
+}
+
+
+/**
+ * @callback_method_impl{FNDBGFHANDLERDEV,
+ * Dumps register state relevant to 16-color planar graphics modes (GR/SR)
+ * in human-readable form.}
+ */
+static DECLCALLBACK(void) vgaR3InfoPlanar(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ NOREF(pszArgs);
+
+ unsigned val1 = (pThis->gr[5] >> 3) & 1;
+ unsigned val2 = pThis->gr[5] & 3;
+ pHlp->pfnPrintf(pHlp, "read mode : %u write mode: %u\n", val1, val2);
+ val1 = pThis->gr[0];
+ val2 = pThis->gr[1];
+ pHlp->pfnPrintf(pHlp, "set/reset data: %02X S/R enable: %02X\n", val1, val2);
+ val1 = pThis->gr[2];
+ val2 = pThis->gr[4] & 3;
+ pHlp->pfnPrintf(pHlp, "color compare : %02X read map : %u\n", val1, val2);
+ val1 = pThis->gr[3] & 7;
+ val2 = (pThis->gr[3] >> 3) & 3;
+ pHlp->pfnPrintf(pHlp, "rotate : %u function : %u\n", val1, val2);
+ val1 = pThis->gr[7];
+ val2 = pThis->gr[8];
+ pHlp->pfnPrintf(pHlp, "don't care : %02X bit mask : %02X\n", val1, val2);
+ val1 = pThis->sr[2];
+ val2 = pThis->sr[4] & 8;
+ pHlp->pfnPrintf(pHlp, "seq plane mask: %02X chain-4 : %s\n", val1, val2 ? "on" : "off");
+}
+
+
+/* -=-=-=-=-=- Ring 3: IBase -=-=-=-=-=- */
+
+/**
+ * @interface_method_impl{PDMIBASE,pfnQueryInterface}
+ */
+static DECLCALLBACK(void *) vgaR3PortQueryInterface(PPDMIBASE pInterface, const char *pszIID)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IBase);
+ PDMIBASE_RETURN_INTERFACE(pszIID, PDMIBASE, &pThisCC->IBase);
+ PDMIBASE_RETURN_INTERFACE(pszIID, PDMIDISPLAYPORT, &pThisCC->IPort);
+# if defined(VBOX_WITH_HGSMI) && defined(VBOX_WITH_VIDEOHWACCEL)
+ PDMIBASE_RETURN_INTERFACE(pszIID, PDMIDISPLAYVBVACALLBACKS, &pThisCC->IVBVACallbacks);
+# endif
+ PDMIBASE_RETURN_INTERFACE(pszIID, PDMILEDPORTS, &pThisCC->ILeds);
+ return NULL;
+}
+
+
+/* -=-=-=-=-=- Ring 3: ILeds -=-=-=-=-=- */
+
+/**
+ * @interface_method_impl{PDMILEDPORTS,pfnQueryStatusLed}
+ */
+static DECLCALLBACK(int) vgaR3PortQueryStatusLed(PPDMILEDPORTS pInterface, unsigned iLUN, PPDMLED *ppLed)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, ILeds);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ switch (iLUN)
+ {
+ /* LUN #0 is the only one for which we have a status LED. */
+ case 0:
+ {
+ *ppLed = &pThis->Led3D;
+ Assert((*ppLed)->u32Magic == PDMLED_MAGIC);
+ return VINF_SUCCESS;
+ }
+
+ default:
+ AssertMsgFailed(("Invalid LUN #%u\n", iLUN));
+ return VERR_PDM_NO_SUCH_LUN;
+ }
+}
+
+
+/* -=-=-=-=-=- Ring 3: Dummy IDisplayConnector -=-=-=-=-=- */
+
+/**
+ * @interface_method_impl{PDMIDISPLAYCONNECTOR,pfnResize}
+ */
+static DECLCALLBACK(int) vgaR3DummyResize(PPDMIDISPLAYCONNECTOR pInterface, uint32_t cBits, void *pvVRAM,
+ uint32_t cbLine, uint32_t cx, uint32_t cy)
+{
+ RT_NOREF(pInterface, cBits, pvVRAM, cbLine, cx, cy);
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYCONNECTOR,pfnUpdateRect}
+ */
+static DECLCALLBACK(void) vgaR3DummyUpdateRect(PPDMIDISPLAYCONNECTOR pInterface, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
+{
+ RT_NOREF(pInterface, x, y, cx, cy);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYCONNECTOR,pfnRefresh}
+ */
+static DECLCALLBACK(void) vgaR3DummyRefresh(PPDMIDISPLAYCONNECTOR pInterface)
+{
+ NOREF(pInterface);
+}
+
+
+/* -=-=-=-=-=- Ring 3: IDisplayPort -=-=-=-=-=- */
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnUpdateDisplay}
+ */
+static DECLCALLBACK(int) vgaR3PortUpdateDisplay(PPDMIDISPLAYPORT pInterface)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ AssertRCReturn(rc, rc);
+
+# ifdef VBOX_WITH_VMSVGA
+ if ( pThis->svga.fEnabled
+ && !pThis->svga.fTraces)
+ {
+ /* Nothing to do as the guest will explicitely update us about frame buffer changes. */
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return VINF_SUCCESS;
+ }
+#endif
+
+# ifndef VBOX_WITH_HGSMI
+ /* This should be called only in non VBVA mode. */
+# else
+ if (VBVAUpdateDisplay(pThis, pThisCC) == VINF_SUCCESS)
+ {
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return VINF_SUCCESS;
+ }
+# endif /* VBOX_WITH_HGSMI */
+
+ STAM_COUNTER_INC(&pThis->StatUpdateDisp);
+
+ if (pThis->GCPhysVRAM != 0 && pThis->GCPhysVRAM != NIL_RTGCPHYS)
+ vgaR3UpdateDirtyBitsAndResetMonitoring(pDevIns, pThis);
+
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+
+ rc = vgaR3UpdateDisplay(pDevIns, pThis, pThisCC, false /*fUpdateAll*/, false /*fFailOnResize*/, true /*reset_dirty*/,
+ pThisCC->pDrv, &pThis->graphic_mode);
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return rc;
+}
+
+
+/**
+ * Internal vgaR3PortUpdateDisplayAll worker called under pThis->CritSect.
+ */
+static int vgaR3UpdateDisplayAllInternal(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, bool fFailOnResize)
+{
+# ifdef VBOX_WITH_VMSVGA
+ if ( !pThis->svga.fEnabled
+ || pThis->svga.fTraces)
+# endif
+ {
+ /* Update the dirty bits. */
+ if (pThis->GCPhysVRAM != 0 && pThis->GCPhysVRAM != NIL_RTGCPHYS)
+ vgaR3UpdateDirtyBitsAndResetMonitoring(pDevIns, pThis);
+ }
+
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+
+ pThis->graphic_mode = -1; /* force full update */
+
+ return vgaR3UpdateDisplay(pDevIns, pThis, pThisCC, true /*fUpdateAll*/, fFailOnResize,
+ true /*reset_dirty*/, pThisCC->pDrv, &pThis->graphic_mode);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnUpdateDisplayAll}
+ */
+static DECLCALLBACK(int) vgaR3PortUpdateDisplayAll(PPDMIDISPLAYPORT pInterface, bool fFailOnResize)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+
+ /* This is called both in VBVA mode and normal modes. */
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayAll\n"));
+# endif /* DEBUG_sunlover */
+
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ AssertRCReturn(rc, rc);
+
+ rc = vgaR3UpdateDisplayAllInternal(pDevIns, pThis, pThisCC, fFailOnResize);
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return rc;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnSetRefreshRate}
+ */
+static DECLCALLBACK(int) vgaR3PortSetRefreshRate(PPDMIDISPLAYPORT pInterface, uint32_t cMilliesInterval)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+
+ /*
+ * Update the interval, notify the VMSVGA FIFO thread if sleeping,
+ * then restart or stop the timer.
+ */
+ ASMAtomicWriteU32(&pThis->cMilliesRefreshInterval, cMilliesInterval);
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->svga.fFIFOThreadSleeping)
+ PDMDevHlpSUPSemEventSignal(pDevIns, pThis->svga.hFIFORequestSem);
+# endif
+
+ if (cMilliesInterval)
+ return PDMDevHlpTimerSetMillies(pDevIns, pThis->hRefreshTimer, cMilliesInterval);
+ return PDMDevHlpTimerStop(pDevIns, pThis->hRefreshTimer);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnQueryVideoMode}
+ */
+static DECLCALLBACK(int) vgaR3PortQueryVideoMode(PPDMIDISPLAYPORT pInterface, uint32_t *pcBits, uint32_t *pcx, uint32_t *pcy)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+
+ AssertReturn(pcBits, VERR_INVALID_PARAMETER);
+
+ *pcBits = vgaR3GetBpp(pThis);
+ if (pcx)
+ *pcx = pThis->last_scr_width;
+ if (pcy)
+ *pcy = pThis->last_scr_height;
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnTakeScreenshot}
+ */
+static DECLCALLBACK(int) vgaR3PortTakeScreenshot(PPDMIDISPLAYPORT pInterface, uint8_t **ppbData, size_t *pcbData,
+ uint32_t *pcx, uint32_t *pcy)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PDMDEV_ASSERT_EMT(pDevIns);
+
+ LogFlow(("vgaR3PortTakeScreenshot: ppbData=%p pcbData=%p pcx=%p pcy=%p\n", ppbData, pcbData, pcx, pcy));
+
+ /*
+ * Validate input.
+ */
+ if (!RT_VALID_PTR(ppbData) || !RT_VALID_PTR(pcbData) || !RT_VALID_PTR(pcx) || !RT_VALID_PTR(pcy))
+ return VERR_INVALID_PARAMETER;
+
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Get screenshot. This function will fail if a resize is required.
+ * So there is not need to do a 'vgaR3UpdateDisplayAllInternal' before taking screenshot.
+ */
+
+ /*
+ * Allocate the buffer for 32 bits per pixel bitmap
+ *
+ * Note! The size can't be zero or greater than the size of the VRAM.
+ * Inconsistent VGA device state can cause the incorrect size values.
+ */
+ size_t cbRequired = pThis->last_scr_width * 4 * pThis->last_scr_height;
+ if (cbRequired && cbRequired <= pThis->vram_size)
+ {
+ uint8_t *pbData = (uint8_t *)RTMemAlloc(cbRequired);
+ if (pbData != NULL)
+ {
+ /*
+ * Only 3 methods, assigned below, will be called during the screenshot update.
+ * All other are already set to NULL.
+ */
+ /* The display connector interface is temporarily replaced with the fake one. */
+ PDMIDISPLAYCONNECTOR Connector;
+ RT_ZERO(Connector);
+ Connector.pbData = pbData;
+ Connector.cBits = 32;
+ Connector.cx = pThis->last_scr_width;
+ Connector.cy = pThis->last_scr_height;
+ Connector.cbScanline = Connector.cx * 4;
+ Connector.pfnRefresh = vgaR3DummyRefresh;
+ Connector.pfnResize = vgaR3DummyResize;
+ Connector.pfnUpdateRect = vgaR3DummyUpdateRect;
+
+ int32_t cur_graphic_mode = -1;
+
+ bool fSavedRenderVRAM = pThis->fRenderVRAM;
+ pThis->fRenderVRAM = true;
+
+ /*
+ * Take the screenshot.
+ *
+ * The second parameter is 'false' because the current display state is being rendered to an
+ * external buffer using a fake connector. That is if display is blanked, we expect a black
+ * screen in the external buffer.
+ * If there is a pending resize, the function will fail.
+ */
+ rc = vgaR3UpdateDisplay(pDevIns, pThis, pThisCC, false /*fUpdateAll*/, true /*fFailOnResize*/,
+ false /*reset_dirty*/, &Connector, &cur_graphic_mode);
+
+ pThis->fRenderVRAM = fSavedRenderVRAM;
+
+ if (rc == VINF_SUCCESS)
+ {
+ /*
+ * Return the result.
+ */
+ *ppbData = pbData;
+ *pcbData = cbRequired;
+ *pcx = Connector.cx;
+ *pcy = Connector.cy;
+ }
+ else
+ {
+ /* If we do not return a success, then the data buffer must be freed. */
+ RTMemFree(pbData);
+ if (RT_SUCCESS_NP(rc))
+ {
+ AssertMsgFailed(("%Rrc\n", rc));
+ rc = VERR_INTERNAL_ERROR_5;
+ }
+ }
+ }
+ else
+ rc = VERR_NO_MEMORY;
+ }
+ else
+ rc = VERR_NOT_SUPPORTED;
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+
+ LogFlow(("vgaR3PortTakeScreenshot: returns %Rrc (cbData=%d cx=%d cy=%d)\n", rc, *pcbData, *pcx, *pcy));
+ return rc;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnFreeScreenshot}
+ */
+static DECLCALLBACK(void) vgaR3PortFreeScreenshot(PPDMIDISPLAYPORT pInterface, uint8_t *pbData)
+{
+ NOREF(pInterface);
+
+ LogFlow(("vgaR3PortFreeScreenshot: pbData=%p\n", pbData));
+
+ RTMemFree(pbData);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnDisplayBlt}
+ */
+static DECLCALLBACK(int) vgaR3PortDisplayBlt(PPDMIDISPLAYPORT pInterface, const void *pvData,
+ uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PDMDEV_ASSERT_EMT(pDevIns);
+ LogFlow(("vgaR3PortDisplayBlt: pvData=%p x=%d y=%d cx=%d cy=%d\n", pvData, x, y, cx, cy));
+
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Validate input.
+ */
+ if ( pvData
+ && x < pThisCC->pDrv->cx
+ && cx <= pThisCC->pDrv->cx
+ && cx + x <= pThisCC->pDrv->cx
+ && y < pThisCC->pDrv->cy
+ && cy <= pThisCC->pDrv->cy
+ && cy + y <= pThisCC->pDrv->cy)
+ {
+ /*
+ * Determine bytes per pixel in the destination buffer.
+ */
+ size_t cbPixelDst = 0;
+ switch (pThisCC->pDrv->cBits)
+ {
+ case 8:
+ cbPixelDst = 1;
+ break;
+ case 15:
+ case 16:
+ cbPixelDst = 2;
+ break;
+ case 24:
+ cbPixelDst = 3;
+ break;
+ case 32:
+ cbPixelDst = 4;
+ break;
+ default:
+ rc = VERR_INVALID_PARAMETER;
+ break;
+ }
+ if (RT_SUCCESS(rc))
+ {
+ /*
+ * The blitting loop.
+ */
+ size_t cbLineSrc = cx * 4; /* 32 bits per pixel. */
+ uint8_t *pbSrc = (uint8_t *)pvData;
+ size_t cbLineDst = pThisCC->pDrv->cbScanline;
+ uint8_t *pbDst = pThisCC->pDrv->pbData + y * cbLineDst + x * cbPixelDst;
+ uint32_t cyLeft = cy;
+ vga_draw_line_func *pfnVgaDrawLine = vga_draw_line_table[VGA_DRAW_LINE32 * 4 + vgaR3GetDepthIndex(pThisCC->pDrv->cBits)];
+ Assert(pfnVgaDrawLine);
+ while (cyLeft-- > 0)
+ {
+ pfnVgaDrawLine(pThis, pThisCC, pbDst, pbSrc, cx);
+ pbDst += cbLineDst;
+ pbSrc += cbLineSrc;
+ }
+
+ /*
+ * Invalidate the area.
+ */
+ pThisCC->pDrv->pfnUpdateRect(pThisCC->pDrv, x, y, cx, cy);
+ }
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+
+ LogFlow(("vgaR3PortDisplayBlt: returns %Rrc\n", rc));
+ return rc;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnUpdateDisplayRect}
+ */
+static DECLCALLBACK(void) vgaR3PortUpdateDisplayRect(PPDMIDISPLAYPORT pInterface, int32_t x, int32_t y, uint32_t cx, uint32_t cy)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ uint32_t v;
+
+ uint32_t cbPixelDst;
+ uint32_t cbLineDst;
+ uint8_t *pbDst;
+
+ uint32_t cbPixelSrc;
+ uint32_t cbLineSrc;
+ uint8_t *pbSrc;
+
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayRect: %d,%d %dx%d\n", x, y, cx, cy));
+# endif /* DEBUG_sunlover */
+
+ Assert(pInterface);
+
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rc);
+
+ /* Check if there is something to do at all. */
+ if (!pThis->fRenderVRAM)
+ {
+ /* The framebuffer uses the guest VRAM directly. */
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayRect: nothing to do fRender is false.\n"));
+# endif /* DEBUG_sunlover */
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return;
+ }
+
+ Assert(pThisCC->pDrv);
+ Assert(pThisCC->pDrv->pbData);
+
+ /* Correct negative x and y coordinates. */
+ if (x < 0)
+ {
+ x += cx; /* Compute xRight which is also the new width. */
+ cx = (x < 0) ? 0 : x;
+ x = 0;
+ }
+
+ if (y < 0)
+ {
+ y += cy; /* Compute yBottom, which is also the new height. */
+ cy = (y < 0) ? 0 : y;
+ y = 0;
+ }
+
+ /* Also check if coords are greater than the display resolution. */
+ if (x + cx > pThisCC->pDrv->cx)
+ {
+ // x < 0 is not possible here
+ cx = pThisCC->pDrv->cx > (uint32_t)x? pThisCC->pDrv->cx - x: 0;
+ }
+
+ if (y + cy > pThisCC->pDrv->cy)
+ {
+ // y < 0 is not possible here
+ cy = pThisCC->pDrv->cy > (uint32_t)y? pThisCC->pDrv->cy - y: 0;
+ }
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayRect: %d,%d %dx%d (corrected coords)\n", x, y, cx, cy));
+# endif
+
+ /* Check if there is something to do at all. */
+ if (cx == 0 || cy == 0)
+ {
+ /* Empty rectangle. */
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayRect: nothing to do: %dx%d\n", cx, cy));
+#endif
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return;
+ }
+
+ /** @todo This method should be made universal and not only for VBVA.
+ * VGA_DRAW_LINE* must be selected and src/dst address calculation
+ * changed.
+ */
+
+ /* Choose the rendering function. */
+ switch(pThisCC->get_bpp(pThis))
+ {
+ default:
+ case 0:
+ /* A LFB mode is already disabled, but the callback is still called
+ * by Display because VBVA buffer is being flushed.
+ * Nothing to do, just return.
+ */
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return;
+ case 8:
+ v = VGA_DRAW_LINE8;
+ break;
+ case 15:
+ v = VGA_DRAW_LINE15;
+ break;
+ case 16:
+ v = VGA_DRAW_LINE16;
+ break;
+ case 24:
+ v = VGA_DRAW_LINE24;
+ break;
+ case 32:
+ v = VGA_DRAW_LINE32;
+ break;
+ }
+
+ vga_draw_line_func *pfnVgaDrawLine = vga_draw_line_table[v * 4 + vgaR3GetDepthIndex(pThisCC->pDrv->cBits)];
+
+ /* Compute source and destination addresses and pitches. */
+ cbPixelDst = (pThisCC->pDrv->cBits + 7) / 8;
+ cbLineDst = pThisCC->pDrv->cbScanline;
+ pbDst = pThisCC->pDrv->pbData + y * cbLineDst + x * cbPixelDst;
+
+ cbPixelSrc = (pThisCC->get_bpp(pThis) + 7) / 8;
+ uint32_t offSrc, u32Dummy;
+ pThisCC->get_offsets(pThis, &cbLineSrc, &offSrc, &u32Dummy);
+
+ /* Assume that rendering is performed only on visible part of VRAM.
+ * This is true because coordinates were verified.
+ */
+ pbSrc = pThisCC->pbVRam;
+ pbSrc += offSrc * 4 + y * cbLineSrc + x * cbPixelSrc;
+
+ /* Render VRAM to framebuffer. */
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayRect: dst: %p, %d, %d. src: %p, %d, %d\n", pbDst, cbLineDst, cbPixelDst, pbSrc, cbLineSrc, cbPixelSrc));
+# endif
+
+ while (cy-- > 0)
+ {
+ pfnVgaDrawLine(pThis, pThisCC, pbDst, pbSrc, cx);
+ pbDst += cbLineDst;
+ pbSrc += cbLineSrc;
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortUpdateDisplayRect: completed.\n"));
+# endif
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnCopyRect}
+ */
+static DECLCALLBACK(int)
+vgaR3PortCopyRect(PPDMIDISPLAYPORT pInterface,
+ uint32_t cx, uint32_t cy,
+ const uint8_t *pbSrc, int32_t xSrc, int32_t ySrc, uint32_t cxSrc, uint32_t cySrc,
+ uint32_t cbSrcLine, uint32_t cSrcBitsPerPixel,
+ uint8_t *pbDst, int32_t xDst, int32_t yDst, uint32_t cxDst, uint32_t cyDst,
+ uint32_t cbDstLine, uint32_t cDstBitsPerPixel)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ uint32_t v;
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortCopyRect: %d,%d %dx%d -> %d,%d\n", xSrc, ySrc, cx, cy, xDst, yDst));
+# endif
+
+ Assert(pInterface);
+ Assert(pThisCC->pDrv);
+
+ int32_t xSrcCorrected = xSrc;
+ int32_t ySrcCorrected = ySrc;
+ uint32_t cxCorrected = cx;
+ uint32_t cyCorrected = cy;
+
+ /* Correct source coordinates to be within the source bitmap. */
+ if (xSrcCorrected < 0)
+ {
+ xSrcCorrected += cxCorrected; /* Compute xRight which is also the new width. */
+ cxCorrected = (xSrcCorrected < 0) ? 0 : xSrcCorrected;
+ xSrcCorrected = 0;
+ }
+
+ if (ySrcCorrected < 0)
+ {
+ ySrcCorrected += cyCorrected; /* Compute yBottom, which is also the new height. */
+ cyCorrected = (ySrcCorrected < 0) ? 0 : ySrcCorrected;
+ ySrcCorrected = 0;
+ }
+
+ /* Also check if coords are greater than the display resolution. */
+ if (xSrcCorrected + cxCorrected > cxSrc)
+ {
+ /* xSrcCorrected < 0 is not possible here */
+ cxCorrected = cxSrc > (uint32_t)xSrcCorrected ? cxSrc - xSrcCorrected : 0;
+ }
+
+ if (ySrcCorrected + cyCorrected > cySrc)
+ {
+ /* y < 0 is not possible here */
+ cyCorrected = cySrc > (uint32_t)ySrcCorrected ? cySrc - ySrcCorrected : 0;
+ }
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortCopyRect: %d,%d %dx%d (corrected coords)\n", xSrcCorrected, ySrcCorrected, cxCorrected, cyCorrected));
+# endif
+
+ /* Check if there is something to do at all. */
+ if (cxCorrected == 0 || cyCorrected == 0)
+ {
+ /* Empty rectangle. */
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaPortUpdateDisplayRectEx: nothing to do: %dx%d\n", cxCorrected, cyCorrected));
+# endif
+ return VINF_SUCCESS;
+ }
+
+ /* Check that the corrected source rectangle is within the destination.
+ * Note: source rectangle is adjusted, but the target must be large enough.
+ */
+ if ( xDst < 0
+ || yDst < 0
+ || xDst + cxCorrected > cxDst
+ || yDst + cyCorrected > cyDst)
+ {
+ return VERR_INVALID_PARAMETER;
+ }
+
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ AssertRCReturn(rc, rc);
+
+ /* This method only works if the VGA device is in a VBE mode or not paused VBVA mode.
+ * VGA modes are reported to the caller by returning VERR_INVALID_STATE.
+ *
+ * If VBE_DISPI_ENABLED is set, then it is a VBE or VBE compatible VBVA mode. Both of them can be handled.
+ *
+ * If VBE_DISPI_ENABLED is clear, then it is either a VGA mode or a VBVA mode set by guest additions
+ * which have VBVACAPS_USE_VBVA_ONLY capability.
+ * When VBE_DISPI_ENABLED is being cleared and VBVACAPS_USE_VBVA_ONLY is not set (i.e. guest wants a VGA mode),
+ * then VBVAOnVBEChanged makes sure that VBVA is paused.
+ * That is a not paused VBVA means that the video mode can be handled even if VBE_DISPI_ENABLED is clear.
+ */
+ if ( (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) == 0
+ && VBVAIsPaused(pThisCC)
+# ifdef VBOX_WITH_VMSVGA
+ && !pThis->svga.fEnabled
+# endif
+ )
+ {
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return VERR_INVALID_STATE;
+ }
+
+ /* Choose the rendering function. */
+ switch (cSrcBitsPerPixel)
+ {
+ default:
+ case 0:
+ /* Nothing to do, just return. */
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return VINF_SUCCESS;
+ case 8:
+ v = VGA_DRAW_LINE8;
+ break;
+ case 15:
+ v = VGA_DRAW_LINE15;
+ break;
+ case 16:
+ v = VGA_DRAW_LINE16;
+ break;
+ case 24:
+ v = VGA_DRAW_LINE24;
+ break;
+ case 32:
+ v = VGA_DRAW_LINE32;
+ break;
+ }
+
+ vga_draw_line_func *pfnVgaDrawLine = vga_draw_line_table[v * 4 + vgaR3GetDepthIndex(cDstBitsPerPixel)];
+
+ /* Compute source and destination addresses and pitches. */
+ uint32_t cbPixelDst = (cDstBitsPerPixel + 7) / 8;
+ uint32_t cbLineDst = cbDstLine;
+ uint8_t *pbDstCur = pbDst + yDst * cbLineDst + xDst * cbPixelDst;
+
+ uint32_t cbPixelSrc = (cSrcBitsPerPixel + 7) / 8;
+ uint32_t cbLineSrc = cbSrcLine;
+ const uint8_t *pbSrcCur = pbSrc + ySrcCorrected * cbLineSrc + xSrcCorrected * cbPixelSrc;
+
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortCopyRect: dst: %p, %d, %d. src: %p, %d, %d\n", pbDstCur, cbLineDst, cbPixelDst, pbSrcCur, cbLineSrc, cbPixelSrc));
+# endif
+
+ while (cyCorrected-- > 0)
+ {
+ pfnVgaDrawLine(pThis, pThisCC, pbDstCur, pbSrcCur, cxCorrected);
+ pbDstCur += cbLineDst;
+ pbSrcCur += cbLineSrc;
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+# ifdef DEBUG_sunlover
+ LogFlow(("vgaR3PortCopyRect: completed.\n"));
+# endif
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnSetRenderVRAM}
+ */
+static DECLCALLBACK(void) vgaR3PortSetRenderVRAM(PPDMIDISPLAYPORT pInterface, bool fRender)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+
+ LogFlow(("vgaR3PortSetRenderVRAM: fRender = %d\n", fRender));
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ pThis->fRenderVRAM = fRender;
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnReportHostCursorCapabilities}
+ */
+static DECLCALLBACK(void) vgaR3PortReportHostCursorCapabilities(PPDMIDISPLAYPORT pInterface, bool fSupportsRenderCursor,
+ bool fSupportsMoveCursor)
+{
+ RT_NOREF(pInterface, fSupportsRenderCursor, fSupportsMoveCursor);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnReportHostCursorPosition}
+ */
+static DECLCALLBACK(void) vgaR3PortReportHostCursorPosition(PPDMIDISPLAYPORT pInterface, uint32_t x, uint32_t y, bool fOutOfRange)
+{
+ RT_NOREF(pInterface, x, y, fOutOfRange);
+}
+
+
+/**
+ * @callback_method_impl{FNTMTIMERDEV, VGA Refresh Timer}
+ */
+static DECLCALLBACK(void) vgaR3TimerRefresh(PPDMDEVINS pDevIns, TMTIMERHANDLE hTimer, void *pvUser)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ RT_NOREF(pvUser);
+
+ if (pThis->fScanLineCfg & VBVASCANLINECFG_ENABLE_VSYNC_IRQ)
+ VBVARaiseIrq(pDevIns, pThis, pThisCC, HGSMIHOSTFLAGS_VSYNC);
+
+ if (pThisCC->pDrv)
+ pThisCC->pDrv->pfnRefresh(pThisCC->pDrv);
+
+ if (pThis->cMilliesRefreshInterval)
+ PDMDevHlpTimerSetMillies(pDevIns, hTimer, pThis->cMilliesRefreshInterval);
+
+# ifdef VBOX_WITH_VIDEOHWACCEL
+ vbvaTimerCb(pDevIns, pThis, pThisCC);
+# endif
+
+# ifdef VBOX_WITH_VMSVGA
+ /*
+ * Call the VMSVGA FIFO poller/watchdog so we can wake up the thread if
+ * there is work to be done.
+ */
+ if (pThis->svga.fFIFOThreadSleeping && pThis->svga.fEnabled && pThis->svga.fConfigured)
+ vmsvgaR3FifoWatchdogTimer(pDevIns, pThis, pThisCC);
+# endif
+}
+
+# ifdef VBOX_WITH_VMSVGA
+
+/**
+ * Helper for VMSVGA.
+ */
+int vgaR3RegisterVRAMHandler(PPDMDEVINS pDevIns, PVGASTATE pThis, uint64_t cbFrameBuffer)
+{
+ Assert(pThis->GCPhysVRAM != 0 && pThis->GCPhysVRAM != NIL_RTGCPHYS);
+ int rc = PDMDevHlpMmio2ControlDirtyPageTracking(pDevIns, pThis->hMmio2VRam, true /*fEnabled*/);
+ RT_NOREF(cbFrameBuffer);
+ AssertRC(rc);
+ return rc;
+}
+
+
+/**
+ * Helper for VMSVGA.
+ */
+int vgaR3UnregisterVRAMHandler(PPDMDEVINS pDevIns, PVGASTATE pThis)
+{
+ Assert(pThis->GCPhysVRAM != 0 && pThis->GCPhysVRAM != NIL_RTGCPHYS);
+ int rc = PDMDevHlpMmio2ControlDirtyPageTracking(pDevIns, pThis->hMmio2VRam, false /*fEnabled*/);
+ AssertRC(rc);
+ return rc;
+}
+
+# endif /* VBOX_WITH_VMSVGA */
+
+
+/* -=-=-=-=-=- Ring 3: PCI Device -=-=-=-=-=- */
+
+/**
+ * @callback_method_impl{FNPCIIOREGIONMAP, Mapping/unmapping the VRAM MMI2 region}
+ */
+static DECLCALLBACK(int) vgaR3PciIORegionVRamMapUnmap(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion,
+ RTGCPHYS GCPhysAddress, RTGCPHYS cb, PCIADDRESSSPACE enmType)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ Log(("vgaR3PciIORegionVRamMapUnmap: iRegion=%d GCPhysAddress=%RGp cb=%RGp enmType=%d\n", iRegion, GCPhysAddress, cb, enmType));
+ RT_NOREF(pPciDev, cb);
+
+# ifdef VBOX_WITH_VMSVGA
+ AssertReturn( iRegion == pThis->pciRegions.iVRAM
+ && ( enmType == PCI_ADDRESS_SPACE_MEM_PREFETCH
+ || (enmType == PCI_ADDRESS_SPACE_MEM && pThis->fVMSVGAEnabled && pThis->fStateLoaded)), VERR_INTERNAL_ERROR);
+# else
+ AssertReturn( iRegion == pThis->pciRegions.iVRAM
+ && enmType == PCI_ADDRESS_SPACE_MEM_PREFETCH, VERR_INTERNAL_ERROR);
+# endif
+
+ Assert(pPciDev == pDevIns->apPciDevs[0]);
+
+ /* Note! We cannot take the device lock here as that would create a lock order
+ problem as the caller has taken the PDM lock prior to calling us. If
+ we did, we will get trouble later when raising interrupts while owning
+ the device lock (e.g. vmsvgaR3FifoLoop). */
+
+ int rc;
+ if (GCPhysAddress != NIL_RTGCPHYS)
+ {
+ /*
+ * Make sure the dirty page tracking state is up to date before mapping it.
+ */
+# ifdef VBOX_WITH_VMSVGA
+ rc = PDMDevHlpMmio2ControlDirtyPageTracking(pDevIns, pThis->hMmio2VRam,
+ !pThis->svga.fEnabled ||(pThis->svga.fEnabled && pThis->svga.fVRAMTracking));
+# else
+ rc = PDMDevHlpMmio2ControlDirtyPageTracking(pDevIns, pThis->hMmio2VRam, true /*fEnabled*/);
+# endif
+ AssertLogRelRC(rc);
+
+ /*
+ * Map the VRAM.
+ */
+ rc = PDMDevHlpMmio2Map(pDevIns, pThis->hMmio2VRam, GCPhysAddress);
+ AssertLogRelRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ pThis->GCPhysVRAM = GCPhysAddress;
+ pThis->vbe_regs[VBE_DISPI_INDEX_FB_BASE_HI] = GCPhysAddress >> 16;
+
+ rc = VINF_PCI_MAPPING_DONE; /* caller doesn't care about any other status, so no problem overwriting error here */
+ }
+ }
+ else
+ {
+ /*
+ * Unmapping of the VRAM in progress (caller will do that).
+ */
+ Assert(pThis->GCPhysVRAM);
+ pThis->GCPhysVRAM = 0;
+ rc = VINF_SUCCESS;
+ /* NB: VBE_DISPI_INDEX_FB_BASE_HI is left unchanged here. */
+ }
+ return rc;
+}
+
+
+# ifdef VBOX_WITH_VMSVGA /* Currently not needed in the non-VMSVGA mode, but keeping it flexible for later. */
+/**
+ * @interface_method_impl{PDMPCIDEV,pfnRegionLoadChangeHookR3}
+ */
+static DECLCALLBACK(int) vgaR3PciRegionLoadChangeHook(PPDMDEVINS pDevIns, PPDMPCIDEV pPciDev, uint32_t iRegion,
+ uint64_t cbRegion, PCIADDRESSSPACE enmType,
+ PFNPCIIOREGIONOLDSETTER pfnOldSetter, PFNPCIIOREGIONSWAP pfnSwapRegions)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ {
+ /*
+ * We messed up BAR order for the hybrid devices in 6.0 (see #9359).
+ * It should have been compatible with the VBox VGA device and had the
+ * VRAM region first and I/O second, but instead the I/O region ended
+ * up first and VRAM second like the VMSVGA device.
+ *
+ * So, we have to detect that here and reconfigure the memory regions.
+ * Region numbers are used in our (and the PCI bus') interfaction with
+ * PGM, so PGM needs to be informed too.
+ */
+ if ( iRegion == 0
+ && iRegion == pThis->pciRegions.iVRAM
+ && (enmType & PCI_ADDRESS_SPACE_IO))
+ {
+ LogRel(("VGA: Detected old BAR config, making adjustments.\n"));
+
+ /* Update the entries. */
+ pThis->pciRegions.iIO = 0;
+ pThis->pciRegions.iVRAM = 1;
+
+ /* Update PGM on the region number change so it won't barf when restoring state. */
+ AssertLogRelReturn(pDevIns->CTX_SUFF(pHlp)->pfnMmio2ChangeRegionNo, VERR_VERSION_MISMATCH);
+ int rc = pDevIns->CTX_SUFF(pHlp)->pfnMmio2ChangeRegionNo(pDevIns, pThis->hMmio2VRam, 1);
+ AssertLogRelRCReturn(rc, rc);
+ /** @todo Update the I/O port too, only currently we don't give a hoot about
+ * the region number in the I/O port registrations so it can wait...
+ * (Only visible in the 'info ioport' output IIRC). */
+
+ /* Update the calling PCI device. */
+ AssertLogRelReturn(pfnSwapRegions, VERR_INTERNAL_ERROR_2);
+ rc = pfnSwapRegions(pPciDev, 0, 1);
+ AssertLogRelRCReturn(rc, rc);
+
+ return rc;
+ }
+
+ /*
+ * The VMSVGA changed the default FIFO size from 128KB to 2MB after 5.1.
+ */
+ if (iRegion == pThis->pciRegions.iFIFO)
+ {
+ /* Make sure it's still 32-bit memory. Ignore fluxtuations in the prefetch flag. */
+ AssertLogRelMsgReturn(!(enmType & (PCI_ADDRESS_SPACE_IO | PCI_ADDRESS_SPACE_BAR64)), ("enmType=%#x\n", enmType),
+ VERR_VGA_UNEXPECTED_PCI_REGION_LOAD_CHANGE);
+
+ /* If the size didn't change we're fine, so just return already. */
+ if (cbRegion == pThis->svga.cbFIFO)
+ return VINF_SUCCESS;
+
+ /* If the size is larger than the current configuration, refuse to load. */
+ AssertLogRelMsgReturn(cbRegion <= pThis->svga.cbFIFOConfig,
+ ("cbRegion=%#RGp cbFIFOConfig=%#x cbFIFO=%#x\n",
+ cbRegion, pThis->svga.cbFIFOConfig, pThis->svga.cbFIFO),
+ VERR_SSM_LOAD_CONFIG_MISMATCH);
+
+ /* Adjust the size down. */
+ int rc = PDMDevHlpMmio2Reduce(pDevIns, pThis->hMmio2VmSvgaFifo, cbRegion);
+ AssertLogRelMsgRCReturn(rc,
+ ("cbRegion=%#RGp cbFIFOConfig=%#x cbFIFO=%#x: %Rrc\n",
+ cbRegion, pThis->svga.cbFIFOConfig, pThis->svga.cbFIFO, rc),
+ rc);
+ pThis->svga.cbFIFO = cbRegion;
+ return rc;
+
+ }
+
+ /*
+ * VRAM used to be non-prefetchable till 6.1.0, so we end up here when restoring
+ * states older than that with 6.1.0 and later. We just have to check that
+ * the size and basic type matches, then return VINF_SUCCESS to ACK it.
+ */
+ if (iRegion == pThis->pciRegions.iVRAM)
+ {
+ /* Make sure it's still 32-bit memory. Ignore fluxtuations in the prefetch flag. */
+ AssertLogRelMsgReturn(!(enmType & (PCI_ADDRESS_SPACE_IO | PCI_ADDRESS_SPACE_BAR64)), ("enmType=%#x\n", enmType),
+ VERR_VGA_UNEXPECTED_PCI_REGION_LOAD_CHANGE);
+ /* The size must be the same. */
+ AssertLogRelMsgReturn(cbRegion == pThis->vram_size,
+ ("cbRegion=%#RGp vram_size=%#x\n", cbRegion, pThis->vram_size),
+ VERR_SSM_LOAD_CONFIG_MISMATCH);
+ return VINF_SUCCESS;
+ }
+
+ /* Emulate callbacks for 5.1 and older saved states by recursion. */
+ if (iRegion == UINT32_MAX)
+ {
+ int rc = vgaR3PciRegionLoadChangeHook(pDevIns, pPciDev, pThis->pciRegions.iFIFO, VMSVGA_FIFO_SIZE_OLD,
+ PCI_ADDRESS_SPACE_MEM, NULL, NULL);
+ if (RT_SUCCESS(rc))
+ rc = pfnOldSetter(pPciDev, pThis->pciRegions.iFIFO, VMSVGA_FIFO_SIZE_OLD, PCI_ADDRESS_SPACE_MEM);
+ return rc;
+ }
+ }
+# endif /* VBOX_WITH_VMSVGA */
+
+ return VERR_VGA_UNEXPECTED_PCI_REGION_LOAD_CHANGE;
+}
+# endif /* VBOX_WITH_VMSVGA */
+
+
+/* -=-=-=-=-=- Ring3: Misc Wrappers & Sidekicks -=-=-=-=-=- */
+
+/**
+ * Saves a important bits of the VGA device config.
+ *
+ * @param pHlp The device helpers (for SSM functions).
+ * @param pThis The shared VGA instance data.
+ * @param pSSM The saved state handle.
+ */
+static void vgaR3SaveConfig(PCPDMDEVHLPR3 pHlp, PVGASTATE pThis, PSSMHANDLE pSSM)
+{
+ pHlp->pfnSSMPutU32(pSSM, pThis->vram_size);
+ pHlp->pfnSSMPutU32(pSSM, pThis->cMonitors);
+}
+
+
+/**
+ * @callback_method_impl{FNSSMDEVLIVEEXEC}
+ */
+static DECLCALLBACK(int) vgaR3LiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ Assert(uPass == 0); NOREF(uPass);
+ vgaR3SaveConfig(pDevIns->pHlpR3, pThis, pSSM);
+ return VINF_SSM_DONT_CALL_AGAIN;
+}
+
+
+/**
+ * @callback_method_impl{FNSSMDEVSAVEPREP}
+ */
+static DECLCALLBACK(int) vgaR3SavePrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+# ifdef VBOX_WITH_VIDEOHWACCEL
+ RT_NOREF(pSSM);
+ return vboxVBVASaveStatePrep(pDevIns);
+# else
+ RT_NOREF(pDevIns, pSSM);
+ return VINF_SUCCESS;
+# endif
+}
+
+
+/**
+ * @callback_method_impl{FNSSMDEVSAVEDONE}
+ */
+static DECLCALLBACK(int) vgaR3SaveDone(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+# ifdef VBOX_WITH_VIDEOHWACCEL
+ RT_NOREF(pSSM);
+ return vboxVBVASaveStateDone(pDevIns);
+# else
+ RT_NOREF(pDevIns, pSSM);
+ return VINF_SUCCESS;
+# endif
+}
+
+
+/**
+ * @callback_method_impl{FNSSMDEVSAVEEXEC}
+ */
+static DECLCALLBACK(int) vgaR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+
+# ifdef VBOX_WITH_VDMA
+ vboxVDMASaveStateExecPrep(pThisCC->pVdma);
+# endif
+
+ vgaR3SaveConfig(pHlp, pThis, pSSM);
+ vga_save(pHlp, pSSM, PDMDEVINS_2_DATA(pDevIns, PVGASTATE));
+
+ VGA_SAVED_STATE_PUT_MARKER(pSSM, 1);
+# ifdef VBOX_WITH_HGSMI
+ pHlp->pfnSSMPutBool(pSSM, true);
+ int rc = vboxVBVASaveStateExec(pDevIns, pSSM);
+# else
+ int rc = pHlp->pfnSSMPutBool(pSSM, false);
+# endif
+
+ AssertRCReturn(rc, rc);
+
+ VGA_SAVED_STATE_PUT_MARKER(pSSM, 3);
+# ifdef VBOX_WITH_VDMA
+ rc = pHlp->pfnSSMPutU32(pSSM, 1);
+ AssertRCReturn(rc, rc);
+ rc = vboxVDMASaveStateExecPerform(pHlp, pThisCC->pVdma, pSSM);
+# else
+ rc = pHlp->pfnSSMPutU32(pSSM, 0);
+# endif
+ AssertRCReturn(rc, rc);
+
+# ifdef VBOX_WITH_VDMA
+ vboxVDMASaveStateExecDone(pThisCC->pVdma);
+# endif
+
+ VGA_SAVED_STATE_PUT_MARKER(pSSM, 5);
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ {
+ rc = vmsvgaR3SaveExec(pDevIns, pSSM);
+ AssertRCReturn(rc, rc);
+ }
+# endif
+ VGA_SAVED_STATE_PUT_MARKER(pSSM, 6);
+
+ return rc;
+}
+
+
+/**
+ * @callback_method_impl{FNSSMDEVLOADPREP}
+ */
+static DECLCALLBACK(int) vgaR3LoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ RT_NOREF(pSSM);
+ pThis->fStateLoaded = true;
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @callback_method_impl{FNSSMDEVLOADEXEC}
+ */
+static DECLCALLBACK(int) vgaR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+
+ pThis->fStateLoaded = true;
+
+ if (uVersion < VGA_SAVEDSTATE_VERSION_ANCIENT || uVersion > VGA_SAVEDSTATE_VERSION)
+ return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
+
+ if (uVersion > VGA_SAVEDSTATE_VERSION_HGSMI)
+ {
+ /* Check the config */
+ uint32_t cbVRam;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cbVRam);
+ AssertRCReturn(rc, rc);
+ if (pThis->vram_size != cbVRam)
+ return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("VRAM size changed: config=%#x state=%#x"), pThis->vram_size, cbVRam);
+
+ uint32_t cMonitors;
+ rc = pHlp->pfnSSMGetU32(pSSM, &cMonitors);
+ AssertRCReturn(rc, rc);
+ if (pThis->cMonitors != cMonitors)
+ return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("Monitor count changed: config=%u state=%u"), pThis->cMonitors, cMonitors);
+ }
+
+ if (uPass == SSM_PASS_FINAL)
+ {
+ rc = vga_load(pHlp, pSSM, pThis, uVersion);
+ if (RT_FAILURE(rc))
+ return rc;
+
+ /*
+ * Restore the HGSMI state, if present.
+ */
+ VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pSSM, uVersion, 1);
+ bool fWithHgsmi = uVersion == VGA_SAVEDSTATE_VERSION_HGSMI;
+ if (uVersion > VGA_SAVEDSTATE_VERSION_HGSMI)
+ {
+ rc = pHlp->pfnSSMGetBool(pSSM, &fWithHgsmi);
+ AssertRCReturn(rc, rc);
+ }
+ if (fWithHgsmi)
+ {
+# ifdef VBOX_WITH_HGSMI
+ rc = vboxVBVALoadStateExec(pDevIns, pSSM, uVersion);
+ AssertRCReturn(rc, rc);
+# else
+ return pHlp->pfnSSMSetCfgError(pSSM, RT_SRC_POS, N_("HGSMI is not compiled in, but it is present in the saved state"));
+# endif
+ }
+
+ VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pSSM, uVersion, 3);
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_3D)
+ {
+ uint32_t u32;
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ if (u32)
+ {
+# ifdef VBOX_WITH_VDMA
+ if (u32 == 1)
+ {
+ rc = vboxVDMASaveLoadExecPerform(pHlp, pThisCC->pVdma, pSSM, uVersion);
+ AssertRCReturn(rc, rc);
+ }
+ else
+# endif
+ {
+ LogRel(("invalid CmdVbva version info\n"));
+ return VERR_VERSION_MISMATCH;
+ }
+ }
+ }
+
+ VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pSSM, uVersion, 5);
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ {
+ rc = vmsvgaR3LoadExec(pDevIns, pSSM, uVersion, uPass);
+ AssertRCReturn(rc, rc);
+ }
+# endif
+ VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pSSM, uVersion, 6);
+ }
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @@callback_method_impl{FNSSMDEVLOADDONE}
+ */
+static DECLCALLBACK(int) vgaR3LoadDone(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ int rc;
+ RT_NOREF(pThisCC, pThis, pSSM);
+
+# ifdef VBOX_WITH_HGSMI
+ rc = vboxVBVALoadStateDone(pDevIns);
+ AssertRCReturn(rc, rc);
+# ifdef VBOX_WITH_VDMA
+ rc = vboxVDMASaveLoadDone(pThisCC->pVdma);
+ AssertRCReturn(rc, rc);
+# endif
+ /* Now update the current VBVA state which depends on VBE registers. vboxVBVALoadStateDone cleared the state. */
+ VBVAOnVBEChanged(pThis, pThisCC);
+# endif
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ {
+ rc = vmsvgaR3LoadDone(pDevIns);
+ AssertRCReturn(rc, rc);
+ }
+# endif
+ return VINF_SUCCESS;
+}
+
+
+/* -=-=-=-=-=- Ring 3: Device callbacks -=-=-=-=-=- */
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnResume}
+ */
+static DECLCALLBACK(void) vgaR3Resume(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ VBVAOnResume(pDevIns, pThis, pThisCC);
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnReset}
+ */
+static DECLCALLBACK(void) vgaR3Reset(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ char *pchStart;
+ char *pchEnd;
+ LogFlow(("vgaReset\n"));
+
+ if (pThisCC->pVdma)
+ vboxVDMAReset(pThisCC->pVdma);
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ vmsvgaR3Reset(pDevIns);
+# endif
+
+# ifdef VBOX_WITH_HGSMI
+ VBVAReset(pDevIns, pThis, pThisCC);
+# endif
+
+
+ /* Clear the VRAM ourselves. */
+ if (pThisCC->pbVRam && pThis->vram_size)
+ memset(pThisCC->pbVRam, 0, pThis->vram_size);
+
+ /*
+ * Zero most of it.
+ *
+ * Unlike vga_reset we're leaving out a few members which we believe
+ * must remain unchanged....
+ */
+ /* 1st part. */
+ pchStart = (char *)&pThis->latch;
+ pchEnd = (char *)&pThis->invalidated_y_table;
+ memset(pchStart, 0, pchEnd - pchStart);
+
+ /* 2nd part. */
+ pchStart = (char *)&pThis->last_palette;
+ pchEnd = (char *)&pThis->u32Marker;
+ memset(pchStart, 0, pchEnd - pchStart);
+
+
+ /*
+ * Restore and re-init some bits.
+ */
+ pThisCC->get_bpp = vgaR3GetBpp;
+ pThisCC->get_offsets = vgaR3GetOffsets;
+ pThisCC->get_resolution = vgaR3GetResolution;
+ pThis->graphic_mode = -1; /* Force full update. */
+# ifdef CONFIG_BOCHS_VBE
+ pThis->vbe_regs[VBE_DISPI_INDEX_ID] = VBE_DISPI_ID0;
+ pThis->vbe_regs[VBE_DISPI_INDEX_VBOX_VIDEO] = 0;
+ pThis->vbe_regs[VBE_DISPI_INDEX_FB_BASE_HI] = pThis->GCPhysVRAM >> 16;
+ pThis->vbe_bank_max = (pThis->vram_size >> 16) - 1;
+# endif /* CONFIG_BOCHS_VBE */
+ pThis->st00 = 0x70; /* Static except for bit 4. */
+
+ /*
+ * Reset the LFB mapping.
+ */
+ if ( ( pDevIns->fRCEnabled
+ || pDevIns->fR0Enabled)
+ && pThis->GCPhysVRAM != 0
+ && pThis->GCPhysVRAM != NIL_RTGCPHYS)
+ {
+ /** @todo r=bird: This used to be a PDMDevHlpPGMHandlerPhysicalReset call.
+ * Not quite sure if it was/is needed. Besides, where do we reset the
+ * dirty bitmap (bmDirtyBitmap)? */
+ int rc = PDMDevHlpMmio2ResetDirtyBitmap(pDevIns, pThis->hMmio2VRam);
+ AssertRC(rc);
+ }
+ if (pThis->fRemappedVGA)
+ {
+ PDMDevHlpMmioResetRegion(pDevIns, pThis->hMmioLegacy);
+ STAM_COUNTER_INC(&pThis->StatMapReset);
+ vgaResetRemapped(pThis);
+ }
+
+ /*
+ * Reset the logo data.
+ */
+ pThisCC->LogoCommand = LOGO_CMD_NOP;
+ pThisCC->offLogoData = 0;
+
+ /* notify port handler */
+ if (pThisCC->pDrv)
+ {
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect); /* hack around lock order issue. */
+
+ pThisCC->pDrv->pfnReset(pThisCC->pDrv);
+ pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv, false, false, 0, 0, 0, 0, NULL);
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_IGNORED);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+ }
+
+ /* Reset latched access mask. */
+ pThis->uMaskLatchAccess = 0x3ff;
+ pThis->cLatchAccesses = 0;
+ pThis->u64LastLatchedAccess = 0;
+ pThis->iMask = 0;
+
+ /* Reset retrace emulation. */
+ memset(&pThis->retrace_state, 0, sizeof(pThis->retrace_state));
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnPowerOn}
+ */
+static DECLCALLBACK(void) vgaR3PowerOn(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ vmsvgaR3PowerOn(pDevIns);
+# endif
+ VBVAOnResume(pDevIns, pThis, pThisCC);
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnPowerOff}
+ */
+static DECLCALLBACK(void) vgaR3PowerOff(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ RT_NOREF(pThis, pThisCC);
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ vmsvgaR3PowerOff(pDevIns);
+# endif
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnRelocate}
+ */
+static DECLCALLBACK(void) vgaR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
+{
+# ifdef VBOX_WITH_RAW_MODE_KEEP
+ if (offDelta)
+ {
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ LogFlow(("vgaRelocate: offDelta = %08X\n", offDelta));
+
+ pThisRC->pbVRam += offDelta;
+ pThis->pDevInsRC = PDMDEVINS_2_RCPTR(pDevIns);
+ }
+# else
+ RT_NOREF(pDevIns, offDelta);
+# endif
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnAttach}
+ *
+ * This is like plugging in the monitor after turning on the PC.
+ */
+static DECLCALLBACK(int) vgaAttach(PPDMDEVINS pDevIns, unsigned iLUN, uint32_t fFlags)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+
+ RT_NOREF(pThis);
+
+ AssertMsgReturn(fFlags & PDM_TACH_FLAGS_NOT_HOT_PLUG,
+ ("VGA device does not support hotplugging\n"),
+ VERR_INVALID_PARAMETER);
+
+ switch (iLUN)
+ {
+ /* LUN #0: Display port. */
+ case 0:
+ {
+ int rc = PDMDevHlpDriverAttach(pDevIns, iLUN, &pThisCC->IBase, &pThisCC->pDrvBase, "Display Port");
+ if (RT_SUCCESS(rc))
+ {
+ pThisCC->pDrv = PDMIBASE_QUERY_INTERFACE(pThisCC->pDrvBase, PDMIDISPLAYCONNECTOR);
+ if (pThisCC->pDrv)
+ {
+ /* pThisCC->pDrv->pbData can be NULL when there is no framebuffer. */
+ if ( pThisCC->pDrv->pfnRefresh
+ && pThisCC->pDrv->pfnResize
+ && pThisCC->pDrv->pfnUpdateRect)
+ rc = VINF_SUCCESS;
+ else
+ {
+ Assert(pThisCC->pDrv->pfnRefresh);
+ Assert(pThisCC->pDrv->pfnResize);
+ Assert(pThisCC->pDrv->pfnUpdateRect);
+ pThisCC->pDrv = NULL;
+ pThisCC->pDrvBase = NULL;
+ rc = VERR_INTERNAL_ERROR;
+ }
+# ifdef VBOX_WITH_VIDEOHWACCEL
+ if(rc == VINF_SUCCESS)
+ {
+ rc = vbvaVHWAConstruct(pDevIns, pThis, pThisCC);
+ if (rc != VERR_NOT_IMPLEMENTED)
+ AssertRC(rc);
+ }
+# endif
+ }
+ else
+ {
+ AssertMsgFailed(("LUN #0 doesn't have a display connector interface! rc=%Rrc\n", rc));
+ pThisCC->pDrvBase = NULL;
+ rc = VERR_PDM_MISSING_INTERFACE;
+ }
+ }
+ else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
+ {
+ Log(("%s/%d: warning: no driver attached to LUN #0!\n", pDevIns->pReg->szName, pDevIns->iInstance));
+ rc = VINF_SUCCESS;
+ }
+ else
+ AssertLogRelMsgFailed(("Failed to attach LUN #0! rc=%Rrc\n", rc));
+ return rc;
+ }
+
+ default:
+ AssertMsgFailed(("Invalid LUN #%d\n", iLUN));
+ return VERR_PDM_NO_SUCH_LUN;
+ }
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnDetach}
+ *
+ * This is like unplugging the monitor while the PC is still running.
+ */
+static DECLCALLBACK(void) vgaDetach(PPDMDEVINS pDevIns, unsigned iLUN, uint32_t fFlags)
+{
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ AssertMsg(fFlags & PDM_TACH_FLAGS_NOT_HOT_PLUG, ("VGA device does not support hotplugging\n"));
+ RT_NOREF(fFlags);
+
+ /*
+ * Reset the interfaces and update the controller state.
+ */
+ switch (iLUN)
+ {
+ /* LUN #0: Display port. */
+ case 0:
+ pThisCC->pDrv = NULL;
+ pThisCC->pDrvBase = NULL;
+ break;
+
+ default:
+ AssertMsgFailed(("Invalid LUN #%d\n", iLUN));
+ break;
+ }
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnDestruct}
+ */
+static DECLCALLBACK(int) vgaR3Destruct(PPDMDEVINS pDevIns)
+{
+ PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ LogFlow(("vgaR3Destruct:\n"));
+
+# ifdef VBOX_WITH_VDMA
+ if (pThisCC->pVdma)
+ vboxVDMADestruct(pThisCC->pVdma);
+# endif
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ vmsvgaR3Destruct(pDevIns);
+# endif
+
+# ifdef VBOX_WITH_HGSMI
+ VBVADestroy(pThisCC);
+# endif
+
+ /*
+ * Free MM heap pointers.
+ */
+ if (pThisCC->pbVBEExtraData)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pbVBEExtraData);
+ pThisCC->pbVBEExtraData = NULL;
+ }
+ if (pThisCC->pbVgaBios)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pbVgaBios);
+ pThisCC->pbVgaBios = NULL;
+ }
+
+ if (pThisCC->pszVgaBiosFile)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pszVgaBiosFile);
+ pThisCC->pszVgaBiosFile = NULL;
+ }
+
+ if (pThisCC->pszLogoFile)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pszLogoFile);
+ pThisCC->pszLogoFile = NULL;
+ }
+
+ if (pThisCC->pbLogo)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pbLogo);
+ pThisCC->pbLogo = NULL;
+ }
+
+# if defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_WITH_VDMA) || defined(VBOX_WITH_WDDM)
+ PDMDevHlpCritSectDelete(pDevIns, &pThis->CritSectIRQ);
+# endif
+ PDMDevHlpCritSectDelete(pDevIns, &pThis->CritSect);
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * Adjust VBE mode information
+ *
+ * Depending on the configured VRAM size, certain parts of VBE mode
+ * information must be updated.
+ *
+ * @param pThis The device instance data.
+ * @param pMode The mode information structure.
+ */
+static void vgaR3AdjustModeInfo(PVGASTATE pThis, ModeInfoListItem *pMode)
+{
+ /* For 4bpp modes, the planes are "stacked" on top of each other. */
+ unsigned bpl = pMode->info.BytesPerScanLine * pMode->info.NumberOfPlanes;
+ /* The "number of image pages" is really the max page index... */
+ unsigned maxPage = pThis->vram_size / (pMode->info.YResolution * bpl) - 1;
+ if (maxPage > 255)
+ maxPage = 255; /* 8-bit value. */
+ pMode->info.NumberOfImagePages = maxPage;
+ pMode->info.LinNumberOfPages = maxPage;
+}
+
+
+/**
+ * @interface_method_impl{PDMDEVREG,pfnConstruct}
+ */
+static DECLCALLBACK(int) vgaR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
+{
+ PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+ unsigned i;
+ uint32_t cCustomModes;
+ uint32_t cyReduction;
+ uint32_t cbPitch;
+ PVBEHEADER pVBEDataHdr;
+ ModeInfoListItem *pCurMode;
+ unsigned cb;
+
+ Assert(iInstance == 0);
+
+ /*
+ * Init static data.
+ */
+ static bool s_fExpandDone = false;
+ if (!s_fExpandDone)
+ {
+ s_fExpandDone = true;
+ vgaR3InitExpand();
+ }
+
+ /*
+ * Validate configuration.
+ */
+ static const char s_szMscWorkaround[] = "VRamSize"
+ "|MonitorCount"
+ "|FadeIn"
+ "|FadeOut"
+ "|LogoTime"
+ "|LogoFile"
+ "|ShowBootMenu"
+ "|BiosRom"
+ "|RealRetrace"
+ "|CustomVideoModes"
+ "|HeightReduction"
+ "|CustomVideoMode1"
+ "|CustomVideoMode2"
+ "|CustomVideoMode3"
+ "|CustomVideoMode4"
+ "|CustomVideoMode5"
+ "|CustomVideoMode6"
+ "|CustomVideoMode7"
+ "|CustomVideoMode8"
+ "|CustomVideoMode9"
+ "|CustomVideoMode10"
+ "|CustomVideoMode11"
+ "|CustomVideoMode12"
+ "|CustomVideoMode13"
+ "|CustomVideoMode14"
+ "|CustomVideoMode15"
+ "|CustomVideoMode16"
+ "|MaxBiosXRes"
+ "|MaxBiosYRes"
+# ifdef VBOX_WITH_VMSVGA
+ "|VMSVGAEnabled"
+ "|VMSVGA10"
+ "|VMSVGAPciId"
+ "|VMSVGAPciBarLayout"
+ "|VMSVGAFifoSize"
+# endif
+# ifdef VBOX_WITH_VMSVGA3D
+ "|VMSVGA3dEnabled"
+ "|VMSVGA3dOverlayEnabled"
+# endif
+ "|SuppressNewYearSplash"
+ "|3DEnabled";
+
+ PDMDEV_VALIDATE_CONFIG_RETURN(pDevIns, s_szMscWorkaround, "");
+
+ /*
+ * Init state data.
+ */
+ rc = pHlp->pfnCFGMQueryU32Def(pCfg, "VRamSize", &pThis->vram_size, VGA_VRAM_DEFAULT);
+ AssertLogRelRCReturn(rc, rc);
+ if (pThis->vram_size > VGA_VRAM_MAX)
+ return PDMDevHlpVMSetError(pDevIns, VERR_INVALID_PARAMETER, RT_SRC_POS,
+ "VRamSize is too large, %#x, max %#x", pThis->vram_size, VGA_VRAM_MAX);
+ if (pThis->vram_size < VGA_VRAM_MIN)
+ return PDMDevHlpVMSetError(pDevIns, VERR_INVALID_PARAMETER, RT_SRC_POS,
+ "VRamSize is too small, %#x, max %#x", pThis->vram_size, VGA_VRAM_MIN);
+ if (pThis->vram_size & (_256K - 1)) /* Make sure there are no partial banks even in planar modes. */
+ return PDMDevHlpVMSetError(pDevIns, VERR_INVALID_PARAMETER, RT_SRC_POS,
+ "VRamSize is not a multiple of 256K (%#x)", pThis->vram_size);
+
+ rc = pHlp->pfnCFGMQueryU32Def(pCfg, "MonitorCount", &pThis->cMonitors, 1);
+ AssertLogRelRCReturn(rc, rc);
+
+ Log(("VGA: VRamSize=%#x fGCenabled=%RTbool fR0Enabled=%RTbool\n", pThis->vram_size, pDevIns->fRCEnabled, pDevIns->fR0Enabled));
+
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "3DEnabled", &pThis->f3DEnabled, false);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VGA: f3DEnabled=%RTbool\n", pThis->f3DEnabled));
+
+# ifdef VBOX_WITH_VMSVGA
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "VMSVGAEnabled", &pThis->fVMSVGAEnabled, false);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VMSVGA: VMSVGAEnabled = %d\n", pThis->fVMSVGAEnabled));
+
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "VMSVGA10", &pThis->fVMSVGA10, true);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VMSVGA: VMSVGA10 = %d\n", pThis->fVMSVGA10));
+
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "VMSVGAPciId", &pThis->fVMSVGAPciId, false);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VMSVGA: VMSVGAPciId = %d\n", pThis->fVMSVGAPciId));
+
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "VMSVGAPciBarLayout", &pThis->fVMSVGAPciBarLayout, pThis->fVMSVGAPciId);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VMSVGA: VMSVGAPciBarLayout = %d\n", pThis->fVMSVGAPciBarLayout));
+
+ rc = pHlp->pfnCFGMQueryU32Def(pCfg, "VMSVGAFifoSize", &pThis->svga.cbFIFO, VMSVGA_FIFO_SIZE);
+ AssertLogRelRCReturn(rc, rc);
+ AssertLogRelMsgReturn(pThis->svga.cbFIFO >= _128K, ("cbFIFO=%#x\n", pThis->svga.cbFIFO), VERR_OUT_OF_RANGE);
+ AssertLogRelMsgReturn(pThis->svga.cbFIFO <= _16M, ("cbFIFO=%#x\n", pThis->svga.cbFIFO), VERR_OUT_OF_RANGE);
+ AssertLogRelMsgReturn(RT_IS_POWER_OF_TWO(pThis->svga.cbFIFO), ("cbFIFO=%#x\n", pThis->svga.cbFIFO), VERR_NOT_POWER_OF_TWO);
+ pThis->svga.cbFIFOConfig = pThis->svga.cbFIFO;
+ Log(("VMSVGA: VMSVGAFifoSize = %#x (%'u)\n", pThis->svga.cbFIFO, pThis->svga.cbFIFO));
+# endif
+# ifdef VBOX_WITH_VMSVGA3D
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "VMSVGA3dEnabled", &pThis->svga.f3DEnabled, false);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VMSVGA: VMSVGA3dEnabled = %d\n", pThis->svga.f3DEnabled));
+
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "VMSVGA3dOverlayEnabled", &pThis->svga.f3DOverlayEnabled, false);
+ AssertLogRelRCReturn(rc, rc);
+ Log(("VMSVGA: VMSVGA3dOverlayEnabled = %d\n", pThis->svga.f3DOverlayEnabled));
+# endif
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAPciBarLayout)
+ {
+ pThis->pciRegions.iIO = 0;
+ pThis->pciRegions.iVRAM = 1;
+ }
+ else
+ {
+ pThis->pciRegions.iVRAM = 0;
+ pThis->pciRegions.iIO = 1;
+ }
+ pThis->pciRegions.iFIFO = 2;
+# else
+ pThis->pciRegions.iVRAM = 0;
+# endif
+
+ pThisCC->pDevIns = pDevIns;
+
+ vgaR3Reset(pDevIns);
+
+ /* The PCI devices configuration. */
+ PPDMPCIDEV pPciDev = pDevIns->apPciDevs[0];
+ PDMPCIDEV_ASSERT_VALID(pDevIns, pPciDev);
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ {
+ /* Extend our VGA device with VMWare SVGA functionality. */
+ if (pThis->fVMSVGAPciId)
+ {
+ PDMPciDevSetVendorId(pPciDev, PCI_VENDOR_ID_VMWARE);
+ PDMPciDevSetDeviceId(pPciDev, PCI_DEVICE_ID_VMWARE_SVGA2);
+ }
+ else
+ {
+ PDMPciDevSetVendorId(pPciDev, 0x80ee); /* PCI vendor, just a free bogus value */
+ PDMPciDevSetDeviceId(pPciDev, 0xbeef);
+ }
+ PDMPciDevSetSubSystemVendorId(pPciDev, PCI_VENDOR_ID_VMWARE);
+ PDMPciDevSetSubSystemId(pPciDev, PCI_DEVICE_ID_VMWARE_SVGA2);
+ }
+ else
+# endif /* VBOX_WITH_VMSVGA */
+ {
+ PDMPciDevSetVendorId(pPciDev, 0x80ee); /* PCI vendor, just a free bogus value */
+ PDMPciDevSetDeviceId(pPciDev, 0xbeef);
+ }
+ PDMPciDevSetClassSub(pPciDev, 0x00); /* VGA controller */
+ PDMPciDevSetClassBase(pPciDev, 0x03);
+ PDMPciDevSetHeaderType(pPciDev, 0x00);
+# if defined(VBOX_WITH_HGSMI) && (defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_WITH_VDMA) || defined(VBOX_WITH_WDDM))
+ PDMPciDevSetInterruptPin(pPciDev, 1);
+# endif
+
+ /* the interfaces. */
+ pThisCC->IBase.pfnQueryInterface = vgaR3PortQueryInterface;
+
+ pThisCC->IPort.pfnUpdateDisplay = vgaR3PortUpdateDisplay;
+ pThisCC->IPort.pfnUpdateDisplayAll = vgaR3PortUpdateDisplayAll;
+ pThisCC->IPort.pfnQueryVideoMode = vgaR3PortQueryVideoMode;
+ pThisCC->IPort.pfnSetRefreshRate = vgaR3PortSetRefreshRate;
+ pThisCC->IPort.pfnTakeScreenshot = vgaR3PortTakeScreenshot;
+ pThisCC->IPort.pfnFreeScreenshot = vgaR3PortFreeScreenshot;
+ pThisCC->IPort.pfnDisplayBlt = vgaR3PortDisplayBlt;
+ pThisCC->IPort.pfnUpdateDisplayRect = vgaR3PortUpdateDisplayRect;
+ pThisCC->IPort.pfnCopyRect = vgaR3PortCopyRect;
+ pThisCC->IPort.pfnSetRenderVRAM = vgaR3PortSetRenderVRAM;
+ pThisCC->IPort.pfnSetViewport = NULL;
+ pThisCC->IPort.pfnReportMonitorPositions = NULL;
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->fVMSVGAEnabled)
+ {
+ pThisCC->IPort.pfnSetViewport = vmsvgaR3PortSetViewport;
+ pThisCC->IPort.pfnReportMonitorPositions = vmsvgaR3PortReportMonitorPositions;
+ }
+# endif
+ pThisCC->IPort.pfnSendModeHint = vbvaR3PortSendModeHint;
+ pThisCC->IPort.pfnReportHostCursorCapabilities = vgaR3PortReportHostCursorCapabilities;
+ pThisCC->IPort.pfnReportHostCursorPosition = vgaR3PortReportHostCursorPosition;
+
+# if defined(VBOX_WITH_HGSMI) && defined(VBOX_WITH_VIDEOHWACCEL)
+ pThisCC->IVBVACallbacks.pfnVHWACommandCompleteAsync = vbvaR3VHWACommandCompleteAsync;
+# endif
+
+ pThisCC->ILeds.pfnQueryStatusLed = vgaR3PortQueryStatusLed;
+ pThis->Led3D.u32Magic = PDMLED_MAGIC;
+
+ /*
+ * We use our own critical section to avoid unncessary pointer indirections
+ * in interface methods (as well as for historical reasons).
+ */
+ rc = PDMDevHlpCritSectInit(pDevIns, &pThis->CritSect, RT_SRC_POS, "VGA#%u", iInstance);
+ AssertRCReturn(rc, rc);
+ rc = PDMDevHlpSetDeviceCritSect(pDevIns, &pThis->CritSect);
+ AssertRCReturn(rc, rc);
+
+# ifdef VBOX_WITH_HGSMI
+ /*
+ * This critical section is used by vgaR3IOPortHgsmiWrite, VBVARaiseIrq and VBVAOnResume
+ * for some IRQ related synchronization.
+ */
+ rc = PDMDevHlpCritSectInit(pDevIns, &pThis->CritSectIRQ, RT_SRC_POS, "VGA#%u_IRQ", iInstance);
+ AssertRCReturn(rc, rc);
+# endif
+
+ /*
+ * PCI device registration.
+ */
+ rc = PDMDevHlpPCIRegister(pDevIns, pPciDev);
+ if (RT_FAILURE(rc))
+ return rc;
+ /*AssertMsg(pThis->Dev.uDevFn == 16 || iInstance != 0, ("pThis->Dev.uDevFn=%d\n", pThis->Dev.uDevFn));*/
+ if (pPciDev->uDevFn != 16 && iInstance == 0)
+ Log(("!!WARNING!!: pThis->dev.uDevFn=%d (ignore if testcase or not started by Main)\n", pPciDev->uDevFn));
+
+# ifdef VBOX_WITH_VMSVGA
+ pThis->hIoPortVmSvga = NIL_IOMIOPORTHANDLE;
+ pThis->hMmio2VmSvgaFifo = NIL_PGMMMIO2HANDLE;
+ if (pThis->fVMSVGAEnabled)
+ {
+ /* Register the io command ports. */
+ rc = PDMDevHlpPCIIORegionCreateIo(pDevIns, pThis->pciRegions.iIO, 0x10, vmsvgaIOWrite, vmsvgaIORead, NULL /*pvUser*/,
+ "VMSVGA", NULL /*paExtDescs*/, &pThis->hIoPortVmSvga);
+ AssertRCReturn(rc, rc);
+
+ rc = PDMDevHlpPCIIORegionCreateMmio2Ex(pDevIns, pThis->pciRegions.iFIFO, pThis->svga.cbFIFO,
+ PCI_ADDRESS_SPACE_MEM, 0 /*fFlags*/, vmsvgaR3PciIORegionFifoMapUnmap,
+ "VMSVGA-FIFO", (void **)&pThisCC->svga.pau32FIFO, &pThis->hMmio2VmSvgaFifo);
+ AssertRCReturn(rc, PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
+ N_("Failed to create VMSVGA FIFO (%u bytes)"), pThis->svga.cbFIFO));
+
+ pPciDev->pfnRegionLoadChangeHookR3 = vgaR3PciRegionLoadChangeHook;
+ }
+# endif /* VBOX_WITH_VMSVGA */
+
+ /*
+ * Allocate VRAM and create a PCI region for it.
+ */
+ rc = PDMDevHlpPCIIORegionCreateMmio2Ex(pDevIns, pThis->pciRegions.iVRAM, pThis->vram_size,
+ PCI_ADDRESS_SPACE_MEM_PREFETCH, PGMPHYS_MMIO2_FLAGS_TRACK_DIRTY_PAGES,
+ vgaR3PciIORegionVRamMapUnmap, "VRam", (void **)&pThisCC->pbVRam, &pThis->hMmio2VRam);
+ AssertLogRelRCReturn(rc, PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
+ N_("Failed to allocate %u bytes of VRAM"), pThis->vram_size));
+
+ /*
+ * Register I/O ports.
+ */
+# define REG_PORT(a_uPort, a_cPorts, a_pfnWrite, a_pfnRead, a_szDesc, a_phIoPort) do { \
+ rc = PDMDevHlpIoPortCreateFlagsAndMap(pDevIns, a_uPort, a_cPorts, IOM_IOPORT_F_ABS, \
+ a_pfnWrite, a_pfnRead, "VGA - " a_szDesc, NULL /*paExtDescs*/, a_phIoPort); \
+ AssertRCReturn(rc, rc); \
+ } while (0)
+ REG_PORT(0x3c0, 2, vgaIoPortArWrite, vgaIoPortArRead, "Attribute Controller", &pThis->hIoPortAr);
+ REG_PORT(0x3c2, 1, vgaIoPortMsrWrite, vgaIoPortSt00Read, "MSR / ST00", &pThis->hIoPortMsrSt00);
+ REG_PORT(0x3c3, 1, vgaIoPortUnusedWrite, vgaIoPortUnusedRead, "0x3c3", &pThis->hIoPort3c3);
+ REG_PORT(0x3c4, 2, vgaIoPortSrWrite, vgaIoPortSrRead, "Sequencer", &pThis->hIoPortSr);
+ REG_PORT(0x3c6, 4, vgaIoPortDacWrite, vgaIoPortDacRead, "DAC", &pThis->hIoPortDac);
+ REG_PORT(0x3ca, 4, vgaIoPortPosWrite, vgaIoPortPosRead, "Graphics Position", /*?*/ &pThis->hIoPortPos);
+ REG_PORT(0x3ce, 2, vgaIoPortGrWrite, vgaIoPortGrRead, "Graphics Controller", &pThis->hIoPortGr);
+
+ /* Note! Ralf Brown lists 0x3b0-0x3b1, 0x3b2-0x3b3 and 0x3b6-0x3b7 as "the same as" 0x3b4-0x3b5. */
+ REG_PORT(0x3b4, 2, vgaIoPortMdaCrtWrite, vgaIoPortMdaCrtRead, "MDA CRT control", &pThis->hIoPortMdaCrt);
+ REG_PORT(0x3ba, 1, vgaIoPortMdaFcrWrite, vgaIoPortMdaStRead, "MDA feature/status", &pThis->hIoPortMdaFcrSt);
+ REG_PORT(0x3d4, 2, vgaIoPortCgaCrtWrite, vgaIoPortCgaCrtRead, "CGA CRT control", &pThis->hIoPortCgaCrt);
+ REG_PORT(0x3da, 1, vgaIoPortCgaFcrWrite, vgaIoPortCgaStRead, "CGA Feature / status", &pThis->hIoPortCgaFcrSt);
+
+# ifdef CONFIG_BOCHS_VBE
+ REG_PORT(0x1ce, 1, vgaIoPortWriteVbeIndex, vgaIoPortReadVbeIndex, "VBE Index", &pThis->hIoPortVbeIndex);
+ REG_PORT(0x1cf, 1, vgaIoPortWriteVbeData, vgaIoPortReadVbeData, "VBE Data", &pThis->hIoPortVbeData);
+# endif /* CONFIG_BOCHS_VBE */
+
+# ifdef VBOX_WITH_HGSMI
+ /* Use reserved VGA IO ports for HGSMI. */
+ REG_PORT(VGA_PORT_HGSMI_HOST, 4, vgaR3IOPortHgsmiWrite, vgaR3IOPortHgmsiRead, "HGSMI host (3b0-3b3)", &pThis->hIoPortHgsmiHost);
+ REG_PORT(VGA_PORT_HGSMI_GUEST, 4, vgaR3IOPortHgsmiWrite, vgaR3IOPortHgmsiRead, "HGSMI guest (3d0-3d3)", &pThis->hIoPortHgsmiGuest);
+# endif /* VBOX_WITH_HGSMI */
+
+# undef REG_PORT
+
+ /* vga bios */
+ rc = PDMDevHlpIoPortCreateAndMap(pDevIns, VBE_PRINTF_PORT, 1 /*cPorts*/, vgaIoPortWriteBios, vgaIoPortReadBios,
+ "VGA BIOS debug/panic", NULL /*paExtDescs*/, &pThis->hIoPortBios);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * The MDA/CGA/EGA/VGA/whatever fixed MMIO area.
+ */
+ rc = PDMDevHlpMmioCreateExAndMap(pDevIns, 0x000a0000, 0x00020000,
+ IOMMMIO_FLAGS_READ_PASSTHRU | IOMMMIO_FLAGS_WRITE_PASSTHRU | IOMMMIO_FLAGS_ABS,
+ NULL /*pPciDev*/, UINT32_MAX /*iPciRegion*/,
+ vgaMmioWrite, vgaMmioRead, vgaMmioFill, NULL /*pvUser*/,
+ "VGA - VGA Video Buffer", &pThis->hMmioLegacy);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Get the VGA BIOS ROM file name.
+ */
+ rc = pHlp->pfnCFGMQueryStringAlloc(pCfg, "BiosRom", &pThisCC->pszVgaBiosFile);
+ if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+ {
+ pThisCC->pszVgaBiosFile = NULL;
+ rc = VINF_SUCCESS;
+ }
+ else if (RT_FAILURE(rc))
+ return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Querying \"BiosRom\" as a string failed"));
+ else if (!*pThisCC->pszVgaBiosFile)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pszVgaBiosFile);
+ pThisCC->pszVgaBiosFile = NULL;
+ }
+
+ /*
+ * Determine the VGA BIOS ROM size, open specified ROM file in the process.
+ */
+ RTFILE FileVgaBios = NIL_RTFILE;
+ if (pThisCC->pszVgaBiosFile)
+ {
+ rc = RTFileOpen(&FileVgaBios, pThisCC->pszVgaBiosFile, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
+ if (RT_SUCCESS(rc))
+ {
+ rc = RTFileQuerySize(FileVgaBios, &pThisCC->cbVgaBios);
+ if (RT_SUCCESS(rc))
+ {
+ if ( RT_ALIGN(pThisCC->cbVgaBios, _4K) != pThisCC->cbVgaBios
+ || pThisCC->cbVgaBios > _64K
+ || pThisCC->cbVgaBios < 16 * _1K)
+ rc = VERR_TOO_MUCH_DATA;
+ }
+ }
+ if (RT_FAILURE(rc))
+ {
+ /*
+ * In case of failure simply fall back to the built-in VGA BIOS ROM.
+ */
+ Log(("vgaConstruct: Failed to open VGA BIOS ROM file '%s', rc=%Rrc!\n", pThisCC->pszVgaBiosFile, rc));
+ RTFileClose(FileVgaBios);
+ FileVgaBios = NIL_RTFILE;
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pszVgaBiosFile);
+ pThisCC->pszVgaBiosFile = NULL;
+ }
+ }
+
+ /*
+ * Attempt to get the VGA BIOS ROM data from file.
+ */
+ if (pThisCC->pszVgaBiosFile)
+ {
+ /*
+ * Allocate buffer for the VGA BIOS ROM data.
+ */
+ pThisCC->pbVgaBios = (uint8_t *)PDMDevHlpMMHeapAlloc(pDevIns, pThisCC->cbVgaBios);
+ if (pThisCC->pbVgaBios)
+ {
+ rc = RTFileRead(FileVgaBios, pThisCC->pbVgaBios, pThisCC->cbVgaBios, NULL);
+ if (RT_FAILURE(rc))
+ {
+ AssertMsgFailed(("RTFileRead(,,%d,NULL) -> %Rrc\n", pThisCC->cbVgaBios, rc));
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pbVgaBios);
+ pThisCC->pbVgaBios = NULL;
+ }
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_NO_MEMORY;
+ }
+ else
+ pThisCC->pbVgaBios = NULL;
+
+ /* cleanup */
+ if (FileVgaBios != NIL_RTFILE)
+ RTFileClose(FileVgaBios);
+
+ /* If we were unable to get the data from file for whatever reason, fall
+ back to the built-in ROM image. */
+ const uint8_t *pbVgaBiosBinary;
+ uint64_t cbVgaBiosBinary;
+ uint32_t fFlags = 0;
+ if (pThisCC->pbVgaBios == NULL)
+ {
+ CPUMMICROARCH enmMicroarch = PDMDevHlpCpuGetGuestMicroarch(pDevIns);
+ if ( enmMicroarch == kCpumMicroarch_Intel_8086
+ || enmMicroarch == kCpumMicroarch_Intel_80186
+ || enmMicroarch == kCpumMicroarch_NEC_V20
+ || enmMicroarch == kCpumMicroarch_NEC_V30)
+ {
+ pbVgaBiosBinary = g_abVgaBiosBinary8086;
+ cbVgaBiosBinary = g_cbVgaBiosBinary8086;
+ LogRel(("VGA: Using the 8086 BIOS image!\n"));
+ }
+ else if (enmMicroarch == kCpumMicroarch_Intel_80286)
+ {
+ pbVgaBiosBinary = g_abVgaBiosBinary286;
+ cbVgaBiosBinary = g_cbVgaBiosBinary286;
+ LogRel(("VGA: Using the 286 BIOS image!\n"));
+ }
+ else
+ {
+ pbVgaBiosBinary = g_abVgaBiosBinary386;
+ cbVgaBiosBinary = g_cbVgaBiosBinary386;
+ LogRel(("VGA: Using the 386+ BIOS image.\n"));
+ }
+ fFlags = PGMPHYS_ROM_FLAGS_PERMANENT_BINARY;
+ }
+ else
+ {
+ pbVgaBiosBinary = pThisCC->pbVgaBios;
+ cbVgaBiosBinary = pThisCC->cbVgaBios;
+ }
+
+ AssertReleaseMsg(cbVgaBiosBinary <= _64K && cbVgaBiosBinary >= 32*_1K, ("cbVgaBiosBinary=%#x\n", cbVgaBiosBinary));
+ AssertReleaseMsg(RT_ALIGN_Z(cbVgaBiosBinary, GUEST_PAGE_SIZE) == cbVgaBiosBinary, ("cbVgaBiosBinary=%#x\n", cbVgaBiosBinary));
+ /* Note! Because of old saved states we'll always register at least 36KB of ROM. */
+ rc = PDMDevHlpROMRegister(pDevIns, 0x000c0000, RT_MAX(cbVgaBiosBinary, 36*_1K), pbVgaBiosBinary, cbVgaBiosBinary,
+ fFlags, "VGA BIOS");
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Saved state.
+ */
+ rc = PDMDevHlpSSMRegisterEx(pDevIns, VGA_SAVEDSTATE_VERSION, sizeof(*pThis), NULL,
+ NULL, vgaR3LiveExec, NULL,
+ vgaR3SavePrep, vgaR3SaveExec, vgaR3SaveDone,
+ vgaR3LoadPrep, vgaR3LoadExec, vgaR3LoadDone);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Create the refresh timer.
+ */
+ rc = PDMDevHlpTimerCreate(pDevIns, TMCLOCK_REAL, vgaR3TimerRefresh, NULL,
+ TMTIMER_FLAGS_NO_CRIT_SECT | TMTIMER_FLAGS_NO_RING0, "VGA Refresh", &pThis->hRefreshTimer);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Attach to the display.
+ */
+ rc = vgaAttach(pDevIns, 0 /* display LUN # */, PDM_TACH_FLAGS_NOT_HOT_PLUG);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Initialize the retrace flag.
+ */
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "RealRetrace", &pThis->fRealRetrace, false);
+ AssertLogRelRCReturn(rc, rc);
+
+ uint16_t maxBiosXRes;
+ rc = pHlp->pfnCFGMQueryU16Def(pCfg, "MaxBiosXRes", &maxBiosXRes, UINT16_MAX);
+ AssertLogRelRCReturn(rc, rc);
+ uint16_t maxBiosYRes;
+ rc = pHlp->pfnCFGMQueryU16Def(pCfg, "MaxBiosYRes", &maxBiosYRes, UINT16_MAX);
+ AssertLogRelRCReturn(rc, rc);
+
+ /*
+ * Compute buffer size for the VBE BIOS Extra Data.
+ */
+ cb = sizeof(mode_info_list) + sizeof(ModeInfoListItem);
+
+ rc = pHlp->pfnCFGMQueryU32(pCfg, "HeightReduction", &cyReduction);
+ if (RT_SUCCESS(rc) && cyReduction)
+ cb *= 2; /* Default mode list will be twice long */
+ else
+ cyReduction = 0;
+
+ rc = pHlp->pfnCFGMQueryU32(pCfg, "CustomVideoModes", &cCustomModes);
+ if (RT_SUCCESS(rc) && cCustomModes)
+ cb += sizeof(ModeInfoListItem) * cCustomModes;
+ else
+ cCustomModes = 0;
+
+ /*
+ * Allocate and initialize buffer for the VBE BIOS Extra Data.
+ */
+ AssertRelease(sizeof(VBEHEADER) + cb < 65536);
+ pThisCC->cbVBEExtraData = (uint16_t)(sizeof(VBEHEADER) + cb);
+ pThisCC->pbVBEExtraData = (uint8_t *)PDMDevHlpMMHeapAllocZ(pDevIns, pThisCC->cbVBEExtraData);
+ if (!pThisCC->pbVBEExtraData)
+ return VERR_NO_MEMORY;
+
+ pVBEDataHdr = (PVBEHEADER)pThisCC->pbVBEExtraData;
+ pVBEDataHdr->u16Signature = VBEHEADER_MAGIC;
+ pVBEDataHdr->cbData = cb;
+
+ pCurMode = (ModeInfoListItem *)(pVBEDataHdr + 1);
+ for (i = 0; i < MODE_INFO_SIZE; i++)
+ {
+ uint32_t pixelWidth, reqSize;
+ if (mode_info_list[i].info.MemoryModel == VBE_MEMORYMODEL_TEXT_MODE)
+ pixelWidth = 2;
+ else
+ pixelWidth = (mode_info_list[i].info.BitsPerPixel +7) / 8;
+ reqSize = mode_info_list[i].info.XResolution
+ * mode_info_list[i].info.YResolution
+ * pixelWidth;
+ if (reqSize >= pThis->vram_size)
+ continue;
+ if (!reqSize)
+ continue;
+ if ( mode_info_list[i].info.XResolution > maxBiosXRes
+ || mode_info_list[i].info.YResolution > maxBiosYRes)
+ continue;
+ *pCurMode = mode_info_list[i];
+ vgaR3AdjustModeInfo(pThis, pCurMode);
+ pCurMode++;
+ }
+
+ /*
+ * Copy default modes with subtracted YResolution.
+ */
+ if (cyReduction)
+ {
+ ModeInfoListItem *pDefMode = mode_info_list;
+ Log(("vgaR3Construct: cyReduction=%u\n", cyReduction));
+ for (i = 0; i < MODE_INFO_SIZE; i++, pDefMode++)
+ {
+ uint32_t pixelWidth, reqSize;
+ if (pDefMode->info.MemoryModel == VBE_MEMORYMODEL_TEXT_MODE)
+ pixelWidth = 2;
+ else
+ pixelWidth = (pDefMode->info.BitsPerPixel + 7) / 8;
+ reqSize = pDefMode->info.XResolution * pDefMode->info.YResolution * pixelWidth;
+ if (reqSize >= pThis->vram_size)
+ continue;
+ if ( pDefMode->info.XResolution > maxBiosXRes
+ || pDefMode->info.YResolution - cyReduction > maxBiosYRes)
+ continue;
+ *pCurMode = *pDefMode;
+ pCurMode->mode += 0x30;
+ pCurMode->info.YResolution -= cyReduction;
+ pCurMode++;
+ }
+ }
+
+
+ /*
+ * Add custom modes.
+ */
+ if (cCustomModes)
+ {
+ uint16_t u16CurMode = VBE_VBOX_MODE_CUSTOM1;
+ for (i = 1; i <= cCustomModes; i++)
+ {
+ char szExtraDataKey[sizeof("CustomVideoModeXX")];
+ char *pszExtraData = NULL;
+
+ /* query and decode the custom mode string. */
+ RTStrPrintf(szExtraDataKey, sizeof(szExtraDataKey), "CustomVideoMode%d", i);
+ rc = pHlp->pfnCFGMQueryStringAlloc(pCfg, szExtraDataKey, &pszExtraData);
+ if (RT_SUCCESS(rc))
+ {
+ ModeInfoListItem *pDefMode = mode_info_list;
+ unsigned int cx, cy, cBits, cParams, j;
+ uint16_t u16DefMode;
+
+ cParams = sscanf(pszExtraData, "%ux%ux%u", &cx, &cy, &cBits);
+ if ( cParams != 3
+ || (cBits != 8 && cBits != 16 && cBits != 24 && cBits != 32))
+ {
+ AssertMsgFailed(("Configuration error: Invalid mode data '%s' for '%s'! cBits=%d\n", pszExtraData, szExtraDataKey, cBits));
+ return VERR_VGA_INVALID_CUSTOM_MODE;
+ }
+ if (!cx || !cy)
+ {
+ AssertMsgFailed(("Configuration error: Invalid mode data '%s' for '%s'! cx=%u, cy=%u\n", pszExtraData, szExtraDataKey, cx, cy));
+ return VERR_VGA_INVALID_CUSTOM_MODE;
+ }
+ cbPitch = calc_line_pitch(cBits, cx);
+ if (cy * cbPitch >= pThis->vram_size)
+ {
+ AssertMsgFailed(("Configuration error: custom video mode %dx%dx%dbits is too large for the virtual video memory of %dMb. Please increase the video memory size.\n",
+ cx, cy, cBits, pThis->vram_size / _1M));
+ return VERR_VGA_INVALID_CUSTOM_MODE;
+ }
+ PDMDevHlpMMHeapFree(pDevIns, pszExtraData);
+
+ /* Use defaults from max@bpp mode. */
+ switch (cBits)
+ {
+ case 8:
+ u16DefMode = VBE_VESA_MODE_1024X768X8;
+ break;
+
+ case 16:
+ u16DefMode = VBE_VESA_MODE_1024X768X565;
+ break;
+
+ case 24:
+ u16DefMode = VBE_VESA_MODE_1024X768X888;
+ break;
+
+ case 32:
+ u16DefMode = VBE_OWN_MODE_1024X768X8888;
+ break;
+
+ default: /* gcc, shut up! */
+ AssertMsgFailed(("gone postal!\n"));
+ continue;
+ }
+
+ /* mode_info_list is not terminated */
+ for (j = 0; j < MODE_INFO_SIZE && pDefMode->mode != u16DefMode; j++)
+ pDefMode++;
+ Assert(j < MODE_INFO_SIZE);
+
+ *pCurMode = *pDefMode;
+ pCurMode->mode = u16CurMode++;
+
+ /* adjust defaults */
+ pCurMode->info.XResolution = cx;
+ pCurMode->info.YResolution = cy;
+ pCurMode->info.BytesPerScanLine = cbPitch;
+ pCurMode->info.LinBytesPerScanLine = cbPitch;
+ vgaR3AdjustModeInfo(pThis, pCurMode);
+
+ /* commit it */
+ pCurMode++;
+ }
+ else if (rc != VERR_CFGM_VALUE_NOT_FOUND)
+ {
+ AssertMsgFailed(("pHlp->pfnCFGMQueryStringAlloc(,'%s',) -> %Rrc\n", szExtraDataKey, rc));
+ return rc;
+ }
+ } /* foreach custom mode key */
+ }
+
+ /*
+ * Add the "End of list" mode.
+ */
+ memset(pCurMode, 0, sizeof(*pCurMode));
+ pCurMode->mode = VBE_VESA_MODE_END_OF_LIST;
+
+ /*
+ * Register I/O Port for the VBE BIOS Extra Data.
+ */
+ rc = PDMDevHlpIoPortCreateAndMap(pDevIns, VBE_EXTRA_PORT, 1 /*cPorts*/, vbeR3IOPortWriteVbeExtra, vbeR3IoPortReadVbeExtra,
+ "VBE BIOS Extra Data", NULL /*paExtDesc*/, &pThis->hIoPortVbeExtra);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Register I/O Port for the BIOS Logo.
+ */
+ rc = PDMDevHlpIoPortCreateAndMap(pDevIns, LOGO_IO_PORT, 1 /*cPorts*/, vbeR3IoPortWriteCmdLogo, vbeR3IoPortReadCmdLogo,
+ "BIOS Logo", NULL /*paExtDesc*/, &pThis->hIoPortCmdLogo);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Register debugger info callbacks.
+ */
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vga", "Display basic VGA state.", vgaR3InfoState);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgatext", "Display VGA memory formatted as text.", vgaR3InfoText);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgacr", "Dump VGA CRTC registers.", vgaR3InfoCR);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgagr", "Dump VGA Graphics Controller registers.", vgaR3InfoGR);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgasr", "Dump VGA Sequencer registers.", vgaR3InfoSR);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgaar", "Dump VGA Attribute Controller registers.", vgaR3InfoAR);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgapl", "Dump planar graphics state.", vgaR3InfoPlanar);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vgadac", "Dump VGA DAC registers.", vgaR3InfoDAC);
+ PDMDevHlpDBGFInfoRegister(pDevIns, "vbe", "Dump VGA VBE registers.", vgaR3InfoVBE);
+
+ /*
+ * Construct the logo header.
+ */
+ LOGOHDR LogoHdr = { LOGO_HDR_MAGIC, 0, 0, 0, 0, 0, 0 };
+
+ rc = pHlp->pfnCFGMQueryU8(pCfg, "FadeIn", &LogoHdr.fu8FadeIn);
+ if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+ LogoHdr.fu8FadeIn = 1;
+ else if (RT_FAILURE(rc))
+ return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Querying \"FadeIn\" as integer failed"));
+
+ rc = pHlp->pfnCFGMQueryU8(pCfg, "FadeOut", &LogoHdr.fu8FadeOut);
+ if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+ LogoHdr.fu8FadeOut = 1;
+ else if (RT_FAILURE(rc))
+ return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Querying \"FadeOut\" as integer failed"));
+
+ rc = pHlp->pfnCFGMQueryU16(pCfg, "LogoTime", &LogoHdr.u16LogoMillies);
+ if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+ LogoHdr.u16LogoMillies = 0;
+ else if (RT_FAILURE(rc))
+ return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Querying \"LogoTime\" as integer failed"));
+
+ rc = pHlp->pfnCFGMQueryU8(pCfg, "ShowBootMenu", &LogoHdr.fu8ShowBootMenu);
+ if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+ LogoHdr.fu8ShowBootMenu = 0;
+ else if (RT_FAILURE(rc))
+ return PDMDEV_SET_ERROR(pDevIns, rc, N_("Configuration error: Querying \"ShowBootMenu\" as integer failed"));
+
+# if defined(DEBUG) && !defined(DEBUG_sunlover) && !defined(DEBUG_michael)
+ /* Disable the logo abd menu if all default settings. */
+ if ( LogoHdr.fu8FadeIn
+ && LogoHdr.fu8FadeOut
+ && LogoHdr.u16LogoMillies == 0
+ && LogoHdr.fu8ShowBootMenu == 2)
+ {
+ LogoHdr.fu8FadeIn = LogoHdr.fu8FadeOut = 0;
+ LogoHdr.u16LogoMillies = 500;
+ }
+# endif
+
+ /* Delay the logo a little bit */
+ if (LogoHdr.fu8FadeIn && LogoHdr.fu8FadeOut && !LogoHdr.u16LogoMillies)
+ LogoHdr.u16LogoMillies = RT_MAX(LogoHdr.u16LogoMillies, LOGO_DELAY_TIME);
+
+ /*
+ * Get the Logo file name.
+ */
+ rc = pHlp->pfnCFGMQueryStringAlloc(pCfg, "LogoFile", &pThisCC->pszLogoFile);
+ if (rc == VERR_CFGM_VALUE_NOT_FOUND)
+ pThisCC->pszLogoFile = NULL;
+ else if (RT_FAILURE(rc))
+ return PDMDEV_SET_ERROR(pDevIns, rc,
+ N_("Configuration error: Querying \"LogoFile\" as a string failed"));
+ else if (!*pThisCC->pszLogoFile)
+ {
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pszLogoFile);
+ pThisCC->pszLogoFile = NULL;
+ }
+
+ /*
+ * Determine the logo size, open any specified logo file in the process.
+ */
+ LogoHdr.cbLogo = g_cbVgaDefBiosLogo;
+ RTFILE FileLogo = NIL_RTFILE;
+ if (pThisCC->pszLogoFile)
+ {
+ rc = RTFileOpen(&FileLogo, pThisCC->pszLogoFile,
+ RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
+ if (RT_SUCCESS(rc))
+ {
+ uint64_t cbFile;
+ rc = RTFileQuerySize(FileLogo, &cbFile);
+ if (RT_SUCCESS(rc))
+ {
+ if (cbFile > 0 && cbFile < 32*_1M)
+ LogoHdr.cbLogo = (uint32_t)cbFile;
+ else
+ rc = VERR_TOO_MUCH_DATA;
+ }
+ }
+ if (RT_FAILURE(rc))
+ {
+ /*
+ * Ignore failure and fall back to the default logo.
+ */
+ LogRel(("vgaR3Construct: Failed to open logo file '%s', rc=%Rrc!\n", pThisCC->pszLogoFile, rc));
+ if (FileLogo != NIL_RTFILE)
+ RTFileClose(FileLogo);
+ FileLogo = NIL_RTFILE;
+ PDMDevHlpMMHeapFree(pDevIns, pThisCC->pszLogoFile);
+ pThisCC->pszLogoFile = NULL;
+ }
+ }
+
+ /*
+ * Disable graphic splash screen if it doesn't fit into VRAM.
+ */
+ if (pThis->vram_size < LOGO_MAX_SIZE)
+ LogoHdr.fu8FadeIn = LogoHdr.fu8FadeOut = LogoHdr.u16LogoMillies = 0;
+
+ /*
+ * Allocate buffer for the logo data.
+ * Let us fall back to default logo on read failure.
+ */
+ pThisCC->cbLogo = LogoHdr.cbLogo;
+ if (g_cbVgaDefBiosLogo)
+ pThisCC->cbLogo = RT_MAX(pThisCC->cbLogo, g_cbVgaDefBiosLogo);
+# ifndef VBOX_OSE
+ if (g_cbVgaDefBiosLogoNY)
+ pThisCC->cbLogo = RT_MAX(pThisCC->cbLogo, g_cbVgaDefBiosLogoNY);
+# endif
+ pThisCC->cbLogo += sizeof(LogoHdr);
+
+ pThisCC->pbLogo = (uint8_t *)PDMDevHlpMMHeapAlloc(pDevIns, pThisCC->cbLogo);
+ if (pThisCC->pbLogo)
+ {
+ /*
+ * Write the logo header.
+ */
+ PLOGOHDR pLogoHdr = (PLOGOHDR)pThisCC->pbLogo;
+ *pLogoHdr = LogoHdr;
+
+ /*
+ * Write the logo bitmap.
+ */
+ if (pThisCC->pszLogoFile)
+ {
+ rc = RTFileRead(FileLogo, pLogoHdr + 1, LogoHdr.cbLogo, NULL);
+ if (RT_SUCCESS(rc))
+ rc = vbeR3ParseBitmap(pThisCC);
+ if (RT_FAILURE(rc))
+ {
+ LogRel(("Error %Rrc reading logo file '%s', using internal logo\n",
+ rc, pThisCC->pszLogoFile));
+ pLogoHdr->cbLogo = LogoHdr.cbLogo = g_cbVgaDefBiosLogo;
+ }
+ }
+ if ( !pThisCC->pszLogoFile
+ || RT_FAILURE(rc))
+ {
+# ifndef VBOX_OSE
+ RTTIMESPEC Now;
+ RTTimeLocalNow(&Now);
+ RTTIME T;
+ RTTimeLocalExplode(&T, &Now);
+ bool fSuppressNewYearSplash = false;
+ rc = pHlp->pfnCFGMQueryBoolDef(pCfg, "SuppressNewYearSplash", &fSuppressNewYearSplash, true);
+ if ( !fSuppressNewYearSplash
+ && (T.u16YearDay > 353 || T.u16YearDay < 10))
+ {
+ pLogoHdr->cbLogo = LogoHdr.cbLogo = g_cbVgaDefBiosLogoNY;
+ memcpy(pLogoHdr + 1, g_abVgaDefBiosLogoNY, LogoHdr.cbLogo);
+ pThisCC->fBootMenuInverse = true;
+ }
+ else
+# endif
+ memcpy(pLogoHdr + 1, g_abVgaDefBiosLogo, LogoHdr.cbLogo);
+ rc = vbeR3ParseBitmap(pThisCC);
+ AssertLogRelMsgReturn(RT_SUCCESS(rc), ("Parsing of internal bitmap failed! vbeR3ParseBitmap() -> %Rrc\n", rc), rc);
+ }
+
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_NO_MEMORY;
+
+ /*
+ * Cleanup.
+ */
+ if (FileLogo != NIL_RTFILE)
+ RTFileClose(FileLogo);
+
+# ifdef VBOX_WITH_HGSMI
+ VBVAInit(pDevIns, pThis, pThisCC);
+# endif
+
+# ifdef VBOX_WITH_VDMA
+ if (rc == VINF_SUCCESS)
+ {
+ rc = vboxVDMAConstruct(pThis, pThisCC, 1024);
+ AssertRC(rc);
+ }
+# endif
+
+# ifdef VBOX_WITH_VMSVGA
+ if ( rc == VINF_SUCCESS
+ && pThis->fVMSVGAEnabled)
+ rc = vmsvgaR3Init(pDevIns);
+# endif
+
+ /*
+ * Statistics.
+ */
+# ifdef VBOX_WITH_STATISTICS
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRZMemoryRead, STAMTYPE_PROFILE, "RZ/MMIO-Read", STAMUNIT_TICKS_PER_CALL, "Profiling of the VGAGCMemoryRead() body.");
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatR3MemoryRead, STAMTYPE_PROFILE, "R3/MMIO-Read", STAMUNIT_TICKS_PER_CALL, "Profiling of the VGAGCMemoryRead() body.");
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatRZMemoryWrite, STAMTYPE_PROFILE, "RZ/MMIO-Write", STAMUNIT_TICKS_PER_CALL, "Profiling of the VGAGCMemoryWrite() body.");
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatR3MemoryWrite, STAMTYPE_PROFILE, "R3/MMIO-Write", STAMUNIT_TICKS_PER_CALL, "Profiling of the VGAGCMemoryWrite() body.");
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMapPage, STAMTYPE_COUNTER, "MapPageCalls", STAMUNIT_OCCURENCES, "Calls to IOMMmioMapMmio2Page.");
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatMapReset, STAMTYPE_COUNTER, "MapPageReset", STAMUNIT_OCCURENCES, "Calls to IOMMmioResetRegion.");
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatUpdateDisp, STAMTYPE_COUNTER, "UpdateDisplay", STAMUNIT_OCCURENCES, "Calls to vgaR3PortUpdateDisplay().");
+# endif
+# ifdef VBOX_WITH_HGSMI
+ PDMDevHlpSTAMRegister(pDevIns, &pThis->StatHgsmiMdaCgaAccesses, STAMTYPE_COUNTER, "HgmsiMdaCgaAccesses", STAMUNIT_OCCURENCES, "Number of non-HGMSI accesses for 03b0-3b3 and 03d0-3d3.");
+# endif
+
+ /* Init latched access mask. */
+ pThis->uMaskLatchAccess = 0x3ff;
+
+ if (RT_SUCCESS(rc))
+ {
+ PPDMIBASE pBase;
+ /*
+ * Attach status driver (optional).
+ */
+ rc = PDMDevHlpDriverAttach(pDevIns, PDM_STATUS_LUN, &pThisCC->IBase, &pBase, "Status Port");
+ if (RT_SUCCESS(rc))
+ pThisCC->pLedsConnector = PDMIBASE_QUERY_INTERFACE(pBase, PDMILEDCONNECTORS);
+ else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
+ {
+ Log(("%s/%d: warning: no driver attached to LUN #0!\n", pDevIns->pReg->szName, pDevIns->iInstance));
+ rc = VINF_SUCCESS;
+ }
+ else
+ {
+ AssertMsgFailed(("Failed to attach to status driver. rc=%Rrc\n", rc));
+ rc = PDMDEV_SET_ERROR(pDevIns, rc, N_("VGA cannot attach to status driver"));
+ }
+ }
+ return rc;
+}
+
+#else /* !IN_RING3 */
+
+/**
+ * @callback_method_impl{PDMDEVREGR0,pfnConstruct}
+ */
+static DECLCALLBACK(int) vgaRZConstruct(PPDMDEVINS pDevIns)
+{
+ PDMDEV_CHECK_VERSIONS_RETURN(pDevIns);
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+
+ int rc = PDMDevHlpSetDeviceCritSect(pDevIns, &pThis->CritSect);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Set I/O port callbacks for this context.
+ * We just copy the ring-3 registration bits and remove the '&' before the handle.
+ */
+# define REG_PORT(a_uPort, a_cPorts, a_pfnWrite, a_pfnRead, a_szDesc, a_hIoPort) do { \
+ rc = PDMDevHlpIoPortSetUpContext(pDevIns, a_hIoPort, a_pfnWrite, a_pfnRead, NULL /*pvUser*/); \
+ AssertRCReturn(rc, rc); \
+ } while (0)
+
+ REG_PORT(0x3c0, 2, vgaIoPortArWrite, vgaIoPortArRead, "Attribute Controller", pThis->hIoPortAr);
+ REG_PORT(0x3c2, 1, vgaIoPortMsrWrite, vgaIoPortSt00Read, "MSR / ST00", pThis->hIoPortMsrSt00);
+ REG_PORT(0x3c3, 1, vgaIoPortUnusedWrite, vgaIoPortUnusedRead, "0x3c3", pThis->hIoPort3c3);
+ REG_PORT(0x3c4, 2, vgaIoPortSrWrite, vgaIoPortSrRead, "Sequencer", pThis->hIoPortSr);
+ REG_PORT(0x3c6, 4, vgaIoPortDacWrite, vgaIoPortDacRead, "DAC", pThis->hIoPortDac);
+ REG_PORT(0x3ca, 4, vgaIoPortPosWrite, vgaIoPortPosRead, "Graphics Position", /*?*/ pThis->hIoPortPos);
+ REG_PORT(0x3ce, 2, vgaIoPortGrWrite, vgaIoPortGrRead, "Graphics Controller", pThis->hIoPortGr);
+
+ REG_PORT(0x3b4, 2, vgaIoPortMdaCrtWrite, vgaIoPortMdaCrtRead, "MDA CRT control", pThis->hIoPortMdaCrt);
+ REG_PORT(0x3ba, 1, vgaIoPortMdaFcrWrite, vgaIoPortMdaStRead, "MDA feature/status", pThis->hIoPortMdaFcrSt);
+ REG_PORT(0x3d4, 2, vgaIoPortCgaCrtWrite, vgaIoPortCgaCrtRead, "CGA CRT control", pThis->hIoPortCgaCrt);
+ REG_PORT(0x3da, 1, vgaIoPortCgaFcrWrite, vgaIoPortCgaStRead, "CGA Feature / status", pThis->hIoPortCgaFcrSt);
+
+# ifdef CONFIG_BOCHS_VBE
+ REG_PORT(0x1ce, 1, vgaIoPortWriteVbeIndex, vgaIoPortReadVbeIndex, "VBE Index", pThis->hIoPortVbeIndex);
+ REG_PORT(0x1cf, 1, vgaIoPortWriteVbeData, vgaIoPortReadVbeData, "VBE Data", pThis->hIoPortVbeData);
+# endif /* CONFIG_BOCHS_VBE */
+
+# undef REG_PORT
+
+ /* BIOS port: */
+ rc = PDMDevHlpIoPortSetUpContext(pDevIns, pThis->hIoPortBios, vgaIoPortWriteBios, vgaIoPortReadBios, NULL /*pvUser*/);
+ AssertRCReturn(rc, rc);
+
+# ifdef VBOX_WITH_VMSVGA
+ if (pThis->hIoPortVmSvga != NIL_IOMIOPORTHANDLE)
+ {
+ AssertReturn(pThis->fVMSVGAEnabled, VERR_INVALID_STATE);
+ rc = PDMDevHlpIoPortSetUpContext(pDevIns, pThis->hIoPortVmSvga, vmsvgaIOWrite, vmsvgaIORead, NULL /*pvUser*/);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ AssertReturn(!pThis->fVMSVGAEnabled, VERR_INVALID_STATE);
+# endif
+
+ /*
+ * MMIO.
+ */
+ rc = PDMDevHlpMmioSetUpContextEx(pDevIns, pThis->hMmioLegacy, vgaMmioWrite, vgaMmioRead, vgaMmioFill, NULL /*pvUser*/);
+ AssertRCReturn(rc, rc);
+
+ /*
+ * Map the start of the VRAM into this context.
+ */
+# if defined(VBOX_WITH_2X_4GB_ADDR_SPACE) || (defined(IN_RING0) && defined(VGA_WITH_PARTIAL_RING0_MAPPING))
+ rc = PDMDevHlpMmio2SetUpContext(pDevIns, pThis->hMmio2VRam, 0 /* off */, VGA_MAPPING_SIZE, (void **)&pThisCC->pbVRam);
+ AssertLogRelMsgRCReturn(rc, ("PDMDevHlpMmio2SetUpContext(,VRAM,0,%#x,) -> %Rrc\n", VGA_MAPPING_SIZE, rc), rc);
+# endif
+
+ /*
+ * Map the first page of the VMSVGA FIFO into this context (not raw-mode).
+ * We currently only access SVGA_FIFO_MIN, SVGA_FIFO_PITCHLOCK, and SVGA_FIFO_BUSY.
+ */
+# if defined(VBOX_WITH_VMSVGA) && !defined(IN_RC)
+ AssertCompile((RT_MAX(SVGA_FIFO_MIN, RT_MAX(SVGA_FIFO_PITCHLOCK, SVGA_FIFO_BUSY)) + 1) * sizeof(uint32_t) < GUEST_PAGE_SIZE);
+ if (pThis->fVMSVGAEnabled)
+ {
+ rc = PDMDevHlpMmio2SetUpContext(pDevIns, pThis->hMmio2VmSvgaFifo, 0 /* off */, GUEST_PAGE_SIZE,
+ (void **)&pThisCC->svga.pau32FIFO);
+ AssertLogRelMsgRCReturn(rc, ("PDMDevHlpMapMMIO2IntoR0(%#x,) -> %Rrc\n", pThis->svga.cbFIFO, rc), rc);
+ }
+ else
+ AssertReturn(pThis->hMmio2VmSvgaFifo == NIL_PGMMMIO2HANDLE, VERR_INVALID_STATE);
+# endif
+
+ return VINF_SUCCESS;
+}
+
+#endif /* !IN_RING3 */
+
+/**
+ * The device registration structure.
+ */
+const PDMDEVREG g_DeviceVga =
+{
+ /* .u32Version = */ PDM_DEVREG_VERSION,
+ /* .uReserved0 = */ 0,
+ /* .szName = */ "vga",
+ /* .fFlags = */ PDM_DEVREG_FLAGS_DEFAULT_BITS | PDM_DEVREG_FLAGS_RZ | PDM_DEVREG_FLAGS_NEW_STYLE,
+ /* .fClass = */ PDM_DEVREG_CLASS_GRAPHICS,
+ /* .cMaxInstances = */ 1,
+ /* .uSharedVersion = */ 42,
+ /* .cbInstanceShared = */ sizeof(VGASTATE),
+ /* .cbInstanceCC = */ sizeof(VGASTATECC),
+ /* .cbInstanceRC = */ sizeof(VGASTATERC),
+ /* .cMaxPciDevices = */ 1,
+ /* .cMaxMsixVectors = */ 0,
+ /* .pszDescription = */ "VGA Adaptor with VESA extensions.",
+#if defined(IN_RING3)
+ /* .pszRCMod = */ "VBoxDDRC.rc",
+ /* .pszR0Mod = */ "VBoxDDR0.r0",
+ /* .pfnConstruct = */ vgaR3Construct,
+ /* .pfnDestruct = */ vgaR3Destruct,
+ /* .pfnRelocate = */ vgaR3Relocate,
+ /* .pfnMemSetup = */ NULL,
+ /* .pfnPowerOn = */ vgaR3PowerOn,
+ /* .pfnReset = */ vgaR3Reset,
+ /* .pfnSuspend = */ NULL,
+ /* .pfnResume = */ vgaR3Resume,
+ /* .pfnAttach = */ vgaAttach,
+ /* .pfnDetach = */ vgaDetach,
+ /* .pfnQueryInterface = */ NULL,
+ /* .pfnInitComplete = */ NULL,
+ /* .pfnPowerOff = */ vgaR3PowerOff,
+ /* .pfnSoftReset = */ NULL,
+ /* .pfnReserved0 = */ NULL,
+ /* .pfnReserved1 = */ NULL,
+ /* .pfnReserved2 = */ NULL,
+ /* .pfnReserved3 = */ NULL,
+ /* .pfnReserved4 = */ NULL,
+ /* .pfnReserved5 = */ NULL,
+ /* .pfnReserved6 = */ NULL,
+ /* .pfnReserved7 = */ NULL,
+#elif defined(IN_RING0)
+ /* .pfnEarlyConstruct = */ NULL,
+ /* .pfnConstruct = */ vgaRZConstruct,
+ /* .pfnDestruct = */ NULL,
+ /* .pfnFinalDestruct = */ NULL,
+ /* .pfnRequest = */ NULL,
+ /* .pfnReserved0 = */ NULL,
+ /* .pfnReserved1 = */ NULL,
+ /* .pfnReserved2 = */ NULL,
+ /* .pfnReserved3 = */ NULL,
+ /* .pfnReserved4 = */ NULL,
+ /* .pfnReserved5 = */ NULL,
+ /* .pfnReserved6 = */ NULL,
+ /* .pfnReserved7 = */ NULL,
+#elif defined(IN_RC)
+ /* .pfnConstruct = */ vgaRZConstruct,
+ /* .pfnReserved0 = */ NULL,
+ /* .pfnReserved1 = */ NULL,
+ /* .pfnReserved2 = */ NULL,
+ /* .pfnReserved3 = */ NULL,
+ /* .pfnReserved4 = */ NULL,
+ /* .pfnReserved5 = */ NULL,
+ /* .pfnReserved6 = */ NULL,
+ /* .pfnReserved7 = */ NULL,
+#else
+# error "Not in IN_RING3, IN_RING0 or IN_RC!"
+#endif
+ /* .u32VersionEnd = */ PDM_DEVREG_VERSION
+};
+
+#endif /* !VBOX_DEVICE_STRUCT_TESTCASE */
+
+/*
+ * Local Variables:
+ * nuke-trailing-whitespace-p:nil
+ * End:
+ */
diff --git a/src/VBox/Devices/Graphics/DevVGA.h b/src/VBox/Devices/Graphics/DevVGA.h
new file mode 100644
index 00000000..acf06bf2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA.h
@@ -0,0 +1,793 @@
+/* $Id: DevVGA.h $ */
+/** @file
+ * DevVGA - VBox VGA/VESA device, internal header.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ * --------------------------------------------------------------------
+ *
+ * This code is based on:
+ *
+ * QEMU internal VGA defines.
+ *
+ * Copyright (c) 2003-2004 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGA_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGA_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBoxVideoVBE.h>
+#include <VBoxVideoVBEPrivate.h>
+
+#ifdef VBOX_WITH_HGSMI
+# include "HGSMI/HGSMIHost.h"
+#endif /* VBOX_WITH_HGSMI */
+#include "DevVGASavedState.h"
+
+#ifdef VBOX_WITH_VMSVGA
+# include "DevVGA-SVGA.h"
+#endif
+
+#include <iprt/list.h>
+
+
+/** Use VBE bytewise I/O. Only needed for Windows Longhorn/Vista betas and backwards compatibility. */
+#define VBE_BYTEWISE_IO
+
+#ifdef VBOX
+/** The default amount of VRAM. */
+# define VGA_VRAM_DEFAULT (_4M)
+/** The maximum amount of VRAM. Limited by VBOX_MAX_ALLOC_PAGE_COUNT. */
+# define VGA_VRAM_MAX (256 * _1M)
+/** The minimum amount of VRAM. */
+# define VGA_VRAM_MIN (_1M)
+#endif
+
+
+/** @name Macros dealing with partial ring-0/raw-mode VRAM mappings.
+ * @{ */
+/** The size of the VGA ring-0 and raw-mode mapping.
+ *
+ * This is supposed to be all the VGA memory accessible to the guest.
+ * The initial value was 256KB but NTAllInOne.iso appears to access more
+ * thus the limit was upped to 512KB.
+ *
+ * @todo Someone with some VGA knowhow should make a better guess at this value.
+ */
+#define VGA_MAPPING_SIZE _512K
+/** Enables partially mapping the VRAM into ring-0 rather than using the ring-3.
+ * The VGA_MAPPING_SIZE define sets the number of bytes that will be mapped. */
+#define VGA_WITH_PARTIAL_RING0_MAPPING
+
+/**
+ * Check buffer if an VRAM offset is within the right range or not.
+ */
+#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) || (defined(IN_RING0) && defined(VGA_WITH_PARTIAL_RING0_MAPPING))
+# define VERIFY_VRAM_WRITE_OFF_RETURN(pThis, off) \
+ do { \
+ if ((off) < VGA_MAPPING_SIZE) \
+ RT_UNTRUSTED_VALIDATED_FENCE(); \
+ else \
+ { \
+ AssertMsgReturn((off) < (pThis)->vram_size, ("%RX32 !< %RX32\n", (uint32_t)(off), (pThis)->vram_size), VINF_SUCCESS); \
+ Log2(("%Rfn[%d]: %RX32 -> R3\n", __PRETTY_FUNCTION__, __LINE__, (off))); \
+ return VINF_IOM_R3_MMIO_WRITE; \
+ } \
+ } while (0)
+#else
+# define VERIFY_VRAM_WRITE_OFF_RETURN(pThis, off) \
+ do { \
+ AssertMsgReturn((off) < (pThis)->vram_size, ("%RX32 !< %RX32\n", (uint32_t)(off), (pThis)->vram_size), VINF_SUCCESS); \
+ RT_UNTRUSTED_VALIDATED_FENCE(); \
+ } while (0)
+#endif
+
+/**
+ * Check buffer if an VRAM offset is within the right range or not.
+ */
+#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0) || (defined(IN_RING0) && defined(VGA_WITH_PARTIAL_RING0_MAPPING))
+# define VERIFY_VRAM_READ_OFF_RETURN(pThis, off, rcVar) \
+ do { \
+ if ((off) < VGA_MAPPING_SIZE) \
+ RT_UNTRUSTED_VALIDATED_FENCE(); \
+ else \
+ { \
+ AssertMsgReturn((off) < (pThis)->vram_size, ("%RX32 !< %RX32\n", (uint32_t)(off), (pThis)->vram_size), 0xff); \
+ Log2(("%Rfn[%d]: %RX32 -> R3\n", __PRETTY_FUNCTION__, __LINE__, (off))); \
+ (rcVar) = VINF_IOM_R3_MMIO_READ; \
+ return 0; \
+ } \
+ } while (0)
+#else
+# define VERIFY_VRAM_READ_OFF_RETURN(pThis, off, rcVar) \
+ do { \
+ AssertMsgReturn((off) < (pThis)->vram_size, ("%RX32 !< %RX32\n", (uint32_t)(off), (pThis)->vram_size), 0xff); \
+ RT_UNTRUSTED_VALIDATED_FENCE(); \
+ NOREF(rcVar); \
+ } while (0)
+#endif
+/** @} */
+
+
+#define MSR_COLOR_EMULATION 0x01
+#define MSR_PAGE_SELECT 0x20
+
+#define ST01_V_RETRACE 0x08
+#define ST01_DISP_ENABLE 0x01
+
+/* bochs VBE support */
+#define CONFIG_BOCHS_VBE
+
+#ifdef CONFIG_BOCHS_VBE
+
+/* Cross reference with <VBoxVideoVBE.h> */
+#define VBE_DISPI_INDEX_NB_SAVED 0xb /* Old number of saved registers (vbe_regs array, see vga_load) */
+#define VBE_DISPI_INDEX_NB 0xd /* Total number of VBE registers */
+
+#define VGA_STATE_COMMON_BOCHS_VBE \
+ uint16_t vbe_index; \
+ uint16_t vbe_regs[VBE_DISPI_INDEX_NB]; \
+ uint16_t alignment[2]; /* pad to 64 bits */ \
+ uint32_t vbe_start_addr; \
+ uint32_t vbe_line_offset; \
+ uint32_t vbe_bank_max;
+
+#else
+
+#define VGA_STATE_COMMON_BOCHS_VBE
+
+#endif /* !CONFIG_BOCHS_VBE */
+
+#define CH_ATTR_SIZE (160 * 100)
+#define VGA_MAX_HEIGHT VBE_DISPI_MAX_YRES
+
+typedef struct vga_retrace_s {
+ unsigned frame_cclks; /* Character clocks per frame. */
+ unsigned frame_ns; /* Frame duration in ns. */
+ unsigned cclk_ns; /* Character clock duration in ns. */
+ unsigned vb_start; /* Vertical blanking start (scanline). */
+ unsigned vb_end; /* Vertical blanking end (scanline). */
+ unsigned vb_end_ns; /* Vertical blanking end time (length) in ns. */
+ unsigned vs_start; /* Vertical sync start (scanline). */
+ unsigned vs_end; /* Vertical sync end (scanline). */
+ unsigned vs_start_ns; /* Vertical sync start time in ns. */
+ unsigned vs_end_ns; /* Vertical sync end time in ns. */
+ unsigned h_total; /* Horizontal total (cclks per scanline). */
+ unsigned h_total_ns; /* Scanline duration in ns. */
+ unsigned hb_start; /* Horizontal blanking start (cclk). */
+ unsigned hb_end; /* Horizontal blanking end (cclk). */
+ unsigned hb_end_ns; /* Horizontal blanking end time (length) in ns. */
+ unsigned v_freq_hz; /* Vertical refresh rate to emulate. */
+} vga_retrace_s;
+
+#ifndef VBOX
+#define VGA_STATE_COMMON \
+ unsigned long vram_offset; \
+ unsigned int vram_size; \
+ uint32_t latch; \
+ uint8_t sr_index; \
+ uint8_t sr[256]; \
+ uint8_t gr_index; \
+ uint8_t gr[256]; \
+ uint8_t ar_index; \
+ uint8_t ar[21]; \
+ int ar_flip_flop; \
+ uint8_t cr_index; \
+ uint8_t cr[256]; /* CRT registers */ \
+ uint8_t msr; /* Misc Output Register */ \
+ uint8_t fcr; /* Feature Control Register */ \
+ uint8_t st00; /* status 0 */ \
+ uint8_t st01; /* status 1 */ \
+ uint8_t dac_state; \
+ uint8_t dac_sub_index; \
+ uint8_t dac_read_index; \
+ uint8_t dac_write_index; \
+ uint8_t dac_cache[3]; /* used when writing */ \
+ uint8_t palette[768]; \
+ int32_t bank_offset; \
+ int (*get_bpp)(struct VGAState *s); \
+ void (*get_offsets)(struct VGAState *s, \
+ uint32_t *pline_offset, \
+ uint32_t *pstart_addr, \
+ uint32_t *pline_compare); \
+ void (*get_resolution)(struct VGAState *s, \
+ int *pwidth, \
+ int *pheight); \
+ VGA_STATE_COMMON_BOCHS_VBE \
+ /* display refresh support */ \
+ DisplayState *ds; \
+ uint32_t font_offsets[2]; \
+ int graphic_mode; \
+ uint8_t shift_control; \
+ uint8_t double_scan; \
+ uint32_t line_offset; \
+ uint32_t line_compare; \
+ uint32_t start_addr; \
+ uint32_t plane_updated; \
+ uint8_t last_cw, last_ch; \
+ uint32_t last_width, last_height; /* in chars or pixels */ \
+ uint32_t last_scr_width, last_scr_height; /* in pixels */ \
+ uint8_t cursor_start, cursor_end; \
+ uint32_t cursor_offset; \
+ unsigned int (*rgb_to_pixel)(unsigned int r, \
+ unsigned int g, unsigned b); \
+ /* hardware mouse cursor support */ \
+ uint32_t invalidated_y_table[VGA_MAX_HEIGHT / 32]; \
+ void (*cursor_invalidate)(struct VGAState *s); \
+ void (*cursor_draw_line)(struct VGAState *s, uint8_t *d, int y); \
+ /* tell for each page if it has been updated since the last time */ \
+ uint32_t last_palette[256]; \
+ uint32_t last_ch_attr[CH_ATTR_SIZE]; /* XXX: make it dynamic */
+
+#else /* VBOX */
+
+/* bird: Since we've changed types, reordered members, done alignment
+ paddings and more, VGA_STATE_COMMON was added directly to the
+ struct to make it more readable and easier to handle. */
+
+struct VGAState;
+typedef int FNGETBPP(struct VGAState *s);
+typedef void FNGETOFFSETS(struct VGAState *s, uint32_t *pline_offset, uint32_t *pstart_addr, uint32_t *pline_compare);
+typedef void FNGETRESOLUTION(struct VGAState *s, int *pwidth, int *pheight);
+typedef unsigned int FNRGBTOPIXEL(unsigned int r, unsigned int g, unsigned b);
+typedef void FNCURSORINVALIDATE(struct VGAState *s);
+typedef void FNCURSORDRAWLINE(struct VGAState *s, uint8_t *d, int y);
+
+#endif /* VBOX */
+
+#ifdef VBOX_WITH_VDMA
+typedef struct VBOXVDMAHOST *PVBOXVDMAHOST;
+#endif
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+#define VBOX_VHWA_MAX_PENDING_COMMANDS 1000
+
+typedef struct _VBOX_VHWA_PENDINGCMD
+{
+ RTLISTNODE Node;
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand;
+} VBOX_VHWA_PENDINGCMD;
+#endif
+
+
+/**
+ * The shared VGA state data.
+ */
+typedef struct VGAState
+{
+ uint32_t vram_size;
+ uint32_t latch;
+ uint8_t sr_index;
+ uint8_t sr[256];
+ uint8_t gr_index;
+ uint8_t gr[256];
+ uint8_t ar_index;
+ uint8_t ar[21];
+ int32_t ar_flip_flop;
+ uint8_t cr_index;
+ uint8_t cr[256]; /* CRT registers */
+ uint8_t msr; /* Misc Output Register */
+ uint8_t fcr; /* Feature Control Register */
+ uint8_t st00; /* status 0 */
+ uint8_t st01; /* status 1 */
+ uint8_t dac_state;
+ uint8_t dac_sub_index;
+ uint8_t dac_read_index;
+ uint8_t dac_write_index;
+ uint8_t dac_cache[3]; /* used when writing */
+ uint8_t palette[768];
+ int32_t bank_offset;
+ VGA_STATE_COMMON_BOCHS_VBE
+ /* display refresh support */
+ uint32_t font_offsets[2];
+ int32_t graphic_mode;
+ uint8_t shift_control;
+ uint8_t double_scan;
+ uint8_t padding1[2];
+ uint32_t line_offset;
+ uint32_t vga_addr_mask;
+ uint32_t padding1a;
+ uint32_t line_compare;
+ uint32_t start_addr;
+ uint32_t plane_updated;
+ uint8_t last_cw, last_ch;
+ uint8_t last_uline; \
+ bool last_blink; \
+ uint32_t last_width, last_height; /* in chars or pixels */
+ uint32_t last_scr_width, last_scr_height; /* in pixels */
+ uint32_t last_bpp;
+ uint8_t cursor_start, cursor_end;
+ bool last_cur_blink, last_chr_blink;
+ uint32_t cursor_offset;
+ /** hardware mouse cursor support */
+ uint32_t invalidated_y_table[VGA_MAX_HEIGHT / 32];
+ /** tell for each page if it has been updated since the last time */
+ uint32_t last_palette[256];
+ uint32_t last_ch_attr[CH_ATTR_SIZE]; /* XXX: make it dynamic */
+
+ /** end-of-common-state-marker */
+ uint32_t u32Marker;
+
+ /** Refresh timer handle - HC. */
+ TMTIMERHANDLE hRefreshTimer;
+
+#ifdef VBOX_WITH_VMSVGA
+ VMSVGASTATE svga;
+#endif
+
+ /** The number of monitors. */
+ uint32_t cMonitors;
+ /** Current refresh timer interval. */
+ uint32_t cMilliesRefreshInterval;
+ /** Bitmap tracking dirty pages. */
+ uint64_t bmDirtyBitmap[VGA_VRAM_MAX / GUEST_PAGE_SIZE / 64];
+ /** Bitmap tracking remapped pages (only needs 16 bits). */
+ uint64_t bmPageMapBitmap;
+
+ /** Flag indicating that there are dirty bits. This is used to optimize the handler resetting. */
+ bool fHasDirtyBits;
+ /** Flag indicating that the VGA memory in the 0xa0000-0xbffff region has been remapped to allow direct access. */
+ bool fRemappedVGA;
+ /** Whether to render the guest VRAM to the framebuffer memory. False only for some LFB modes. */
+ bool fRenderVRAM;
+ /** Whether 3D is enabled for the VM. */
+ bool f3DEnabled;
+ /** Set if state has been restored. */
+ bool fStateLoaded;
+#ifdef VBOX_WITH_VMSVGA
+ /* Whether the SVGA emulation is enabled or not. */
+ bool fVMSVGAEnabled;
+ bool fVMSVGA10;
+ bool fVMSVGAPciId;
+ bool fVMSVGAPciBarLayout;
+ bool Padding4[3];
+#else
+ bool Padding4[4+3];
+#endif
+
+ struct {
+ uint32_t u32Padding1;
+ uint32_t iVRAM;
+#ifdef VBOX_WITH_VMSVGA
+ uint32_t iIO;
+ uint32_t iFIFO;
+#endif
+ } pciRegions;
+
+ /** The physical address the VRAM was assigned. */
+ RTGCPHYS GCPhysVRAM;
+ /** The critical section protect the instance data. */
+ PDMCRITSECT CritSect;
+
+ /* Keep track of ring 0 latched accesses to the VGA MMIO memory. */
+ uint64_t u64LastLatchedAccess;
+ uint32_t cLatchAccesses;
+ uint16_t uMaskLatchAccess;
+ uint16_t iMask;
+
+#ifdef VBE_BYTEWISE_IO
+ /** VBE read/write data/index flags */
+ uint8_t fReadVBEData;
+ uint8_t fWriteVBEData;
+ uint8_t fReadVBEIndex;
+ uint8_t fWriteVBEIndex;
+ /** VBE write data/index one byte buffer */
+ uint8_t cbWriteVBEData;
+ uint8_t cbWriteVBEIndex;
+ /** VBE Extra Data write address one byte buffer */
+ uint8_t cbWriteVBEExtraAddress;
+ uint8_t Padding5;
+#endif
+
+ /** Retrace emulation state */
+ bool fRealRetrace;
+ bool Padding6[HC_ARCH_BITS == 64 ? 7 : 3];
+ vga_retrace_s retrace_state;
+
+#ifdef VBOX_WITH_HGSMI
+ /** Base port in the assigned PCI I/O space. */
+ RTIOPORT IOPortBase;
+# ifdef VBOX_WITH_WDDM
+ uint8_t Padding10[2];
+ /** Specifies guest driver caps, i.e. whether it can handle IRQs from the
+ * adapter, the way it can handle async HGSMI command completion, etc. */
+ uint32_t fGuestCaps;
+ uint32_t fScanLineCfg;
+ uint32_t Padding11;
+# else
+ uint8_t Padding11[14];
+# endif
+
+ /** The critical section serializes the HGSMI IRQ setting/clearing. */
+ PDMCRITSECT CritSectIRQ;
+ /** VBVARaiseIRQ flags which were set when the guest was still processing previous IRQ. */
+ uint32_t fu32PendingGuestFlags;
+ uint32_t Padding12;
+#endif /* VBOX_WITH_HGSMI */
+
+ PDMLED Led3D;
+
+ struct {
+ volatile uint32_t cPending;
+ uint32_t Padding1;
+ union
+ {
+ RTLISTNODE PendingList;
+ /* make sure the structure sized cross different contexts correctly */
+ struct
+ {
+ R3PTRTYPE(void *) dummy1;
+ R3PTRTYPE(void *) dummy2;
+ } dummy;
+ };
+ } pendingVhwaCommands;
+
+ /** The MMIO handle of the legacy graphics buffer/regs at 0xa0000-0xbffff. */
+ PGMMMIO2HANDLE hMmioLegacy;
+
+ /** @name I/O ports for range 0x3c0-3cf.
+ * @{ */
+ IOMIOPORTHANDLE hIoPortAr;
+ IOMIOPORTHANDLE hIoPortMsrSt00;
+ IOMIOPORTHANDLE hIoPort3c3;
+ IOMIOPORTHANDLE hIoPortSr;
+ IOMIOPORTHANDLE hIoPortDac;
+ IOMIOPORTHANDLE hIoPortPos;
+ IOMIOPORTHANDLE hIoPortGr;
+ /** @} */
+
+ /** @name I/O ports for MDA 0x3b0-0x3bf (sparse)
+ * @{ */
+ IOMIOPORTHANDLE hIoPortMdaCrt;
+ IOMIOPORTHANDLE hIoPortMdaFcrSt;
+ /** @} */
+
+ /** @name I/O ports for CGA 0x3d0-0x3df (sparse)
+ * @{ */
+ IOMIOPORTHANDLE hIoPortCgaCrt;
+ IOMIOPORTHANDLE hIoPortCgaFcrSt;
+ /** @} */
+
+#ifdef VBOX_WITH_HGSMI
+ /** @name I/O ports for HGSMI 0x3b0-03b3 and 0x3d0-03d3 (ring-3 only)
+ * @{ */
+ IOMIOPORTHANDLE hIoPortHgsmiHost;
+ IOMIOPORTHANDLE hIoPortHgsmiGuest;
+ /** @} */
+#endif
+
+ /** @name I/O ports for Boch VBE 0x1ce-0x1cf
+ * @{ */
+ IOMIOPORTHANDLE hIoPortVbeIndex;
+ IOMIOPORTHANDLE hIoPortVbeData;
+ /** @} */
+
+ /** The BIOS printf I/O port. */
+ IOMIOPORTHANDLE hIoPortBios;
+ /** The VBE extra data I/O port. */
+ IOMIOPORTHANDLE hIoPortVbeExtra;
+ /** The logo command I/O port. */
+ IOMIOPORTHANDLE hIoPortCmdLogo;
+
+#ifdef VBOX_WITH_VMSVGA
+ /** VMSVGA: I/O port PCI region. */
+ IOMIOPORTHANDLE hIoPortVmSvga;
+ /** VMSVGA: The MMIO2 handle of the FIFO PCI region. */
+ PGMMMIO2HANDLE hMmio2VmSvgaFifo;
+#endif
+ /** The MMIO2 handle of the VRAM. */
+ PGMMMIO2HANDLE hMmio2VRam;
+
+ STAMPROFILE StatRZMemoryRead;
+ STAMPROFILE StatR3MemoryRead;
+ STAMPROFILE StatRZMemoryWrite;
+ STAMPROFILE StatR3MemoryWrite;
+ STAMCOUNTER StatMapPage; /**< Counts IOMMmioMapMmio2Page calls. */
+ STAMCOUNTER StatMapReset; /**< Counts IOMMmioResetRegion calls. */
+ STAMCOUNTER StatUpdateDisp; /**< Counts vgaPortUpdateDisplay calls. */
+#ifdef VBOX_WITH_HGSMI
+ STAMCOUNTER StatHgsmiMdaCgaAccesses;
+#endif
+} VGAState;
+#ifdef VBOX
+/** VGA state. */
+typedef VGAState VGASTATE;
+/** Pointer to the VGA state. */
+typedef VGASTATE *PVGASTATE;
+AssertCompileMemberAlignment(VGASTATE, bank_offset, 8);
+AssertCompileMemberAlignment(VGASTATE, font_offsets, 8);
+AssertCompileMemberAlignment(VGASTATE, last_ch_attr, 8);
+AssertCompileMemberAlignment(VGASTATE, u32Marker, 8);
+AssertCompile(sizeof(uint64_t)/*bmPageMapBitmap*/ >= (_64K / GUEST_PAGE_SIZE / 8));
+#endif
+
+
+/**
+ * The VGA state data for ring-3 context.
+ */
+typedef struct VGASTATER3
+{
+ R3PTRTYPE(uint8_t *) pbVRam;
+ R3PTRTYPE(FNGETBPP *) get_bpp;
+ R3PTRTYPE(FNGETOFFSETS *) get_offsets;
+ R3PTRTYPE(FNGETRESOLUTION *) get_resolution;
+ R3PTRTYPE(FNRGBTOPIXEL *) rgb_to_pixel;
+ R3PTRTYPE(FNCURSORINVALIDATE *) cursor_invalidate;
+ R3PTRTYPE(FNCURSORDRAWLINE *) cursor_draw_line;
+
+ /** Pointer to the device instance.
+ * @note Only for getting our bearings in interface methods. */
+ PPDMDEVINSR3 pDevIns;
+#ifdef VBOX_WITH_HGSMI
+ R3PTRTYPE(PHGSMIINSTANCE) pHGSMI;
+#endif
+#ifdef VBOX_WITH_VDMA
+ R3PTRTYPE(PVBOXVDMAHOST) pVdma;
+#endif
+
+ /** LUN\#0: The display port base interface. */
+ PDMIBASE IBase;
+ /** LUN\#0: The display port interface. */
+ PDMIDISPLAYPORT IPort;
+#ifdef VBOX_WITH_HGSMI
+ /** LUN\#0: VBVA callbacks interface */
+ PDMIDISPLAYVBVACALLBACKS IVBVACallbacks;
+#endif
+ /** Status LUN: Leds interface. */
+ PDMILEDPORTS ILeds;
+
+ /** Pointer to base interface of the driver. */
+ R3PTRTYPE(PPDMIBASE) pDrvBase;
+ /** Pointer to display connector interface of the driver. */
+ R3PTRTYPE(PPDMIDISPLAYCONNECTOR) pDrv;
+
+ /** Status LUN: Partner of ILeds. */
+ R3PTRTYPE(PPDMILEDCONNECTORS) pLedsConnector;
+
+#ifdef VBOX_WITH_VMSVGA
+ /** The VMSVGA ring-3 state. */
+ VMSVGASTATER3 svga;
+#endif
+
+ /** The VGA BIOS ROM data. */
+ R3PTRTYPE(uint8_t *) pbVgaBios;
+ /** The size of the VGA BIOS ROM. */
+ uint64_t cbVgaBios;
+ /** The name of the VGA BIOS ROM file. */
+ R3PTRTYPE(char *) pszVgaBiosFile;
+
+ /** @name Logo data
+ * @{ */
+ /** Current logo data offset. */
+ uint32_t offLogoData;
+ /** The size of the BIOS logo data. */
+ uint32_t cbLogo;
+ /** Current logo command. */
+ uint16_t LogoCommand;
+ /** Bitmap width. */
+ uint16_t cxLogo;
+ /** Bitmap height. */
+ uint16_t cyLogo;
+ /** Bitmap planes. */
+ uint16_t cLogoPlanes;
+ /** Bitmap depth. */
+ uint16_t cLogoBits;
+ /** Bitmap compression. */
+ uint16_t LogoCompression;
+ /** Bitmap colors used. */
+ uint16_t cLogoUsedColors;
+ /** Palette size. */
+ uint16_t cLogoPalEntries;
+ /** Clear screen flag. */
+ uint8_t fLogoClearScreen;
+ bool fBootMenuInverse;
+ uint8_t Padding8[6];
+ /** Palette data. */
+ uint32_t au32LogoPalette[256];
+ /** The BIOS logo data. */
+ R3PTRTYPE(uint8_t *) pbLogo;
+ /** The name of the logo file. */
+ R3PTRTYPE(char *) pszLogoFile;
+ /** Bitmap image data. */
+ R3PTRTYPE(uint8_t *) pbLogoBitmap;
+ /** @} */
+
+ /** @name VBE extra data (modes)
+ * @{ */
+ /** The VBE BIOS extra data. */
+ R3PTRTYPE(uint8_t *) pbVBEExtraData;
+ /** The size of the VBE BIOS extra data. */
+ uint16_t cbVBEExtraData;
+ /** The VBE BIOS current memory address. */
+ uint16_t u16VBEExtraAddress;
+ uint16_t Padding7[2];
+ /** @} */
+
+} VGASTATER3;
+/** Pointer to the ring-3 VGA state. */
+typedef VGASTATER3 *PVGASTATER3;
+
+
+/**
+ * The VGA state data for ring-0 context.
+ */
+typedef struct VGASTATER0
+{
+ /** The R0 vram pointer. */
+ R0PTRTYPE(uint8_t *) pbVRam;
+#ifdef VBOX_WITH_VMSVGA
+ /** The VMSVGA ring-0 state. */
+ VMSVGASTATER0 svga;
+#endif
+} VGASTATER0;
+/** Pointer to the ring-0 VGA state. */
+typedef VGASTATER0 *PVGASTATER0;
+
+
+/**
+ * The VGA state data for raw-mode context.
+ */
+typedef struct VGASTATERC
+{
+ /** Pointer to the RC vram mapping. */
+ RCPTRTYPE(uint8_t *) pbVRam;
+} VGASTATERC;
+/** Pointer to the raw-mode VGA state. */
+typedef VGASTATERC *PVGASTATERC;
+
+
+/** The VGA state for the current context. */
+typedef CTX_SUFF(VGASTATE) VGASTATECC;
+/** Pointer to the VGA state for the current context. */
+typedef CTX_SUFF(PVGASTATE) PVGASTATECC;
+
+
+
+/** VBE Extra Data. */
+typedef VBEHeader VBEHEADER;
+/** Pointer to the VBE Extra Data. */
+typedef VBEHEADER *PVBEHEADER;
+
+#if !defined(VBOX) || defined(IN_RING3)
+static inline int c6_to_8(int v)
+{
+ int b;
+ v &= 0x3f;
+ b = v & 1;
+ return (v << 2) | (b << 1) | b;
+}
+#endif /* !VBOX || IN_RING3 */
+
+
+#ifdef VBOX_WITH_HGSMI
+int VBVAInit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC);
+void VBVADestroy(PVGASTATECC pThisCC);
+int VBVAUpdateDisplay(PVGASTATE pThis, PVGASTATECC pThisCC);
+void VBVAReset(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC);
+void VBVAOnVBEChanged(PVGASTATE pThis, PVGASTATECC pThisCC);
+void VBVAOnResume(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC);
+
+bool VBVAIsPaused(PVGASTATECC pThisCC);
+#ifdef UNUSED_FUNCTION
+bool VBVAIsEnabled(PVGASTATECC pThisCC);
+#endif
+
+void VBVARaiseIrq(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t fFlags);
+
+int VBVAInfoScreen(PVGASTATE pThis, const VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_HOST *pScreen);
+#ifdef UNUSED_FUNCTION
+int VBVAGetInfoViewAndScreen(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t u32ViewIndex,
+ VBVAINFOVIEW *pView, VBVAINFOSCREEN *pScreen);
+#endif
+
+/* @return host-guest flags that were set on reset
+ * this allows the caller to make further cleaning when needed,
+ * e.g. reset the IRQ */
+uint32_t HGSMIReset(PHGSMIINSTANCE pIns);
+
+# ifdef VBOX_WITH_VIDEOHWACCEL
+DECLCALLBACK(int) vbvaR3VHWACommandCompleteAsync(PPDMIDISPLAYVBVACALLBACKS pInterface,
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd);
+int vbvaVHWAConstruct(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC);
+
+void vbvaTimerCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC);
+
+int vboxVBVASaveStatePrep(PPDMDEVINS pDevIns);
+int vboxVBVASaveStateDone(PPDMDEVINS pDevIns);
+# endif
+
+int vboxVBVASaveStateExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM);
+int vboxVBVALoadStateExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t u32Version);
+int vboxVBVALoadStateDone(PPDMDEVINS pDevIns);
+
+DECLCALLBACK(int) vbvaR3PortSendModeHint(PPDMIDISPLAYPORT pInterface, uint32_t cx, uint32_t cy, uint32_t cBPP,
+ uint32_t cDisplay, uint32_t dx, uint32_t dy, uint32_t fEnabled, uint32_t fNotifyGuest);
+
+# ifdef VBOX_WITH_VDMA
+typedef struct VBOXVDMAHOST *PVBOXVDMAHOST;
+int vboxVDMAConstruct(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t cPipeElements);
+void vboxVDMADestruct(PVBOXVDMAHOST pVdma);
+void vboxVDMAReset(PVBOXVDMAHOST pVdma);
+void vboxVDMAControl(PVBOXVDMAHOST pVdma, VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_GUEST *pCmd, uint32_t cbCmd);
+void vboxVDMACommand(PVBOXVDMAHOST pVdma, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_GUEST *pCmd, uint32_t cbCmd);
+int vboxVDMASaveStateExecPrep(struct VBOXVDMAHOST *pVdma);
+int vboxVDMASaveStateExecDone(struct VBOXVDMAHOST *pVdma);
+int vboxVDMASaveStateExecPerform(PCPDMDEVHLPR3 pHlp, struct VBOXVDMAHOST *pVdma, PSSMHANDLE pSSM);
+int vboxVDMASaveLoadExecPerform(PCPDMDEVHLPR3 pHlp, struct VBOXVDMAHOST *pVdma, PSSMHANDLE pSSM, uint32_t u32Version);
+int vboxVDMASaveLoadDone(struct VBOXVDMAHOST *pVdma);
+# endif /* VBOX_WITH_VDMA */
+
+#endif /* VBOX_WITH_HGSMI */
+
+# ifdef VBOX_WITH_VMSVGA
+int vgaR3UnregisterVRAMHandler(PPDMDEVINS pDevIns, PVGASTATE pThis);
+int vgaR3RegisterVRAMHandler(PPDMDEVINS pDevIns, PVGASTATE pThis, uint64_t cbFrameBuffer);
+int vgaR3UpdateDisplay(PVGASTATE pThis, unsigned xStart, unsigned yStart, unsigned width, unsigned height);
+# endif
+
+#ifndef VBOX
+void vga_common_init(VGAState *s, DisplayState *ds, uint8_t *vga_ram_base,
+ unsigned long vga_ram_offset, int vga_ram_size);
+uint32_t vga_mem_readb(void *opaque, target_phys_addr_t addr);
+void vga_mem_writeb(void *opaque, target_phys_addr_t addr, uint32_t val);
+void vga_invalidate_scanlines(VGAState *s, int y1, int y2);
+
+void vga_draw_cursor_line_8(uint8_t *d1, const uint8_t *src1,
+ int poffset, int w,
+ unsigned int color0, unsigned int color1,
+ unsigned int color_xor);
+void vga_draw_cursor_line_16(uint8_t *d1, const uint8_t *src1,
+ int poffset, int w,
+ unsigned int color0, unsigned int color1,
+ unsigned int color_xor);
+void vga_draw_cursor_line_32(uint8_t *d1, const uint8_t *src1,
+ int poffset, int w,
+ unsigned int color0, unsigned int color1,
+ unsigned int color_xor);
+
+extern const uint8_t sr_mask[8];
+extern const uint8_t gr_mask[16];
+#endif /* !VBOX */
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGA_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGAModes.h b/src/VBox/Devices/Graphics/DevVGAModes.h
new file mode 100644
index 00000000..29b5a085
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGAModes.h
@@ -0,0 +1,45 @@
+/* $Id: DevVGAModes.h $ */
+/** @file
+ * DevVGA - VBox VGA/VESA device, VBE modes.
+ *
+ * List of static mode information, containing all "supported" VBE
+ * modes and their 'settings'.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGAModes_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGAModes_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBoxVideoVBE.h>
+#include <VBoxVideoVBEPrivate.h>
+
+#include "vbetables.h"
+
+#define MODE_INFO_SIZE ( sizeof(mode_info_list) / sizeof(ModeInfoListItem) )
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGAModes_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGASavedState.h b/src/VBox/Devices/Graphics/DevVGASavedState.h
new file mode 100644
index 00000000..319163d6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGASavedState.h
@@ -0,0 +1,88 @@
+/* $Id: DevVGASavedState.h $ */
+/** @file
+ * DevVGA - Saved state versions.
+ *
+ * @remarks HGSMI needs this but doesn't want to deal with DevVGA.h, thus this
+ * dedicated header.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_DevVGASavedState_h
+#define VBOX_INCLUDED_SRC_Graphics_DevVGASavedState_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/** Creates an eyecatching marker in the VGA saved state ("<uSub>Marker\n"). */
+#define VGA_SAVED_STATE_MAKE_MARKER(uSub) (UINT64_C(0x0a72656b72614d30) + (uint64_t)(uSub))
+
+/** Puts a marker. Status code is not checked. */
+#define VGA_SAVED_STATE_PUT_MARKER(pSSM, uSub) \
+ do { pHlp->pfnSSMPutU64(pSSM, VGA_SAVED_STATE_MAKE_MARKER(uSub)); } while (0)
+
+/** Retrieves a VGA saved state marker and checks that it matches, if it
+ * doesn't assert/LogRel and return. */
+#define VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pSSM, uVersion, uSub) \
+ do { \
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_MARKERS) \
+ { \
+ uint64_t uMarker; \
+ int rcMarker = pHlp->pfnSSMGetU64(pSSM, &uMarker); \
+ AssertLogRelRCReturn(rcMarker, rcMarker); \
+ AssertLogRelMsgReturn(uMarker == VGA_SAVED_STATE_MAKE_MARKER(uSub), \
+ ("Bad VGA marker: expected %llx, got %llx\n", VGA_SAVED_STATE_MAKE_MARKER(uSub), uMarker), \
+ VERR_SSM_DATA_UNIT_FORMAT_CHANGED); \
+ } \
+ } while (0)
+
+#define VGA_SAVEDSTATE_VERSION 26
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_DX_SFLAGS 26 /* SVGA3dSurfaceAllFlags. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_DX_CMDBUF 25 /* Command buffers capability is not tied to VGPU10 setting. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_DX 24 /* VGPU10. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_MIPLEVELS 23 /* Surface struct with number of miplevels. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_CURSOR 22 /* Legacy cursor registers. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_SCREENS 21 /* Screen objects. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA 20 /* Multiple updates and fixes for VMSVGA saved state. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES 19
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_GMR_COUNT 18
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_VGA_FB_FIX 17
+#define VGA_SAVEDSTATE_VERSION_MARKERS 16
+#define VGA_SAVEDSTATE_VERSION_MODE_HINTS 15
+#define VGA_SAVEDSTATE_VERSION_FIXED_PENDVHWA 14
+#define VGA_SAVEDSTATE_VERSION_3D 13
+#define VGA_SAVEDSTATE_VERSION_HGSMIMA 12 /* HGSMI memory allocator. */
+#define VGA_SAVEDSTATE_VERSION_VMSVGA_2D 10 /* <- internal build with 2d state only */
+#define VGA_SAVEDSTATE_VERSION_WITH_PENDVHWA 10
+#define VGA_SAVEDSTATE_VERSION_INV_GCMDFIFO 8 /* <- states upto and including this version may contain invalid completed Guest Commands fifo entries */
+#define VGA_SAVEDSTATE_VERSION_INV_VHEIGHT 8 /* <- states upto and including this version may contain invalid vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] value */
+#define VGA_SAVEDSTATE_VERSION_WDDM 7
+#define VGA_SAVEDSTATE_VERSION_PRE_WDDM 6
+#define VGA_SAVEDSTATE_VERSION_HOST_HEAP 5
+#define VGA_SAVEDSTATE_VERSION_WITH_CONFIG 4
+#define VGA_SAVEDSTATE_VERSION_HGSMI 3
+#define VGA_SAVEDSTATE_VERSION_PRE_HGSMI 2
+#define VGA_SAVEDSTATE_VERSION_ANCIENT 1
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_DevVGASavedState_h */
+
diff --git a/src/VBox/Devices/Graphics/DevVGATmpl.h b/src/VBox/Devices/Graphics/DevVGATmpl.h
new file mode 100644
index 00000000..03a64774
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGATmpl.h
@@ -0,0 +1,582 @@
+/* $Id: DevVGATmpl.h $ */
+/** @file
+ * DevVGA - VBox VGA/VESA device, code templates.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ * --------------------------------------------------------------------
+ *
+ * This code is based on:
+ *
+ * QEMU VGA Emulator templates
+ *
+ * Copyright (c) 2003 Fabrice Bellard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#if DEPTH == 8
+#define BPP 1
+#define PIXEL_TYPE uint8_t
+#elif DEPTH == 15 || DEPTH == 16
+#define BPP 2
+#define PIXEL_TYPE uint16_t
+#elif DEPTH == 32
+#define BPP 4
+#define PIXEL_TYPE uint32_t
+#else
+#error unsupport depth
+#endif
+
+#if DEPTH != 15
+
+static inline void RT_CONCAT(vga_draw_glyph_line_, DEPTH)(uint8_t *d,
+ int font_data,
+ uint32_t xorcol,
+ uint32_t bgcol,
+ int dscan,
+ int linesize)
+{
+#if BPP == 1
+ ((uint32_t *)d)[0] = (dmask16[(font_data >> 4)] & xorcol) ^ bgcol;
+ ((uint32_t *)d)[1] = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol;
+ if (dscan) {
+ uint8_t *c = d + linesize;
+ ((uint32_t *)c)[0] = ((uint32_t *)d)[0];
+ ((uint32_t *)c)[1] = ((uint32_t *)d)[1];
+ }
+#elif BPP == 2
+ ((uint32_t *)d)[0] = (dmask4[(font_data >> 6)] & xorcol) ^ bgcol;
+ ((uint32_t *)d)[1] = (dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol;
+ ((uint32_t *)d)[2] = (dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol;
+ ((uint32_t *)d)[3] = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol;
+ if (dscan)
+ memcpy(d + linesize, d, 4 * sizeof(uint32_t));
+#else
+ ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[7] = (-((font_data >> 0) & 1) & xorcol) ^ bgcol;
+ if (dscan)
+ memcpy(d + linesize, d, 8 * sizeof(uint32_t));
+#endif
+}
+
+static void RT_CONCAT(vga_draw_glyph8_, DEPTH)(uint8_t *d, int linesize,
+ const uint8_t *font_ptr, int h,
+ uint32_t fgcol, uint32_t bgcol, int dscan)
+{
+ uint32_t xorcol;
+ int font_data;
+
+ xorcol = bgcol ^ fgcol;
+ do {
+ font_data = font_ptr[0];
+ RT_CONCAT(vga_draw_glyph_line_, DEPTH)(d, font_data, xorcol, bgcol, dscan, linesize);
+ font_ptr += 4;
+ d += linesize << dscan;
+ } while (--h);
+}
+
+static void RT_CONCAT(vga_draw_glyph16_, DEPTH)(uint8_t *d, int linesize,
+ const uint8_t *font_ptr, int h,
+ uint32_t fgcol, uint32_t bgcol, int dscan)
+{
+ uint32_t xorcol;
+ int font_data;
+
+ xorcol = bgcol ^ fgcol;
+ do {
+ font_data = font_ptr[0];
+ RT_CONCAT(vga_draw_glyph_line_, DEPTH)(d,
+ expand4to8[font_data >> 4],
+ xorcol, bgcol, dscan, linesize);
+ RT_CONCAT(vga_draw_glyph_line_, DEPTH)(d + 8 * BPP,
+ expand4to8[font_data & 0x0f],
+ xorcol, bgcol, dscan, linesize);
+ font_ptr += 4;
+ d += linesize << dscan;
+ } while (--h);
+}
+
+static void RT_CONCAT(vga_draw_glyph9_, DEPTH)(uint8_t *d, int linesize,
+ const uint8_t *font_ptr, int h,
+ uint32_t fgcol, uint32_t bgcol, int dup9)
+{
+ uint32_t xorcol, v;
+ int font_data;
+
+ xorcol = bgcol ^ fgcol;
+ do {
+ font_data = font_ptr[0];
+#if BPP == 1
+ ((uint32_t *)d)[0] = RT_H2LE_U32((dmask16[(font_data >> 4)] & xorcol) ^ bgcol);
+ v = (dmask16[(font_data >> 0) & 0xf] & xorcol) ^ bgcol;
+ ((uint32_t *)d)[1] = RT_H2LE_U32(v);
+ if (dup9)
+ ((uint8_t *)d)[8] = v >> (24 * (1 - BIG));
+ else
+ ((uint8_t *)d)[8] = bgcol;
+
+#elif BPP == 2
+ ((uint32_t *)d)[0] = RT_H2LE_U32((dmask4[(font_data >> 6)] & xorcol) ^ bgcol);
+ ((uint32_t *)d)[1] = RT_H2LE_U32((dmask4[(font_data >> 4) & 3] & xorcol) ^ bgcol);
+ ((uint32_t *)d)[2] = RT_H2LE_U32((dmask4[(font_data >> 2) & 3] & xorcol) ^ bgcol);
+ v = (dmask4[(font_data >> 0) & 3] & xorcol) ^ bgcol;
+ ((uint32_t *)d)[3] = RT_H2LE_U32(v);
+ if (dup9)
+ ((uint16_t *)d)[8] = v >> (16 * (1 - BIG));
+ else
+ ((uint16_t *)d)[8] = bgcol;
+#else
+ ((uint32_t *)d)[0] = (-((font_data >> 7)) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[1] = (-((font_data >> 6) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[2] = (-((font_data >> 5) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[3] = (-((font_data >> 4) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[4] = (-((font_data >> 3) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[5] = (-((font_data >> 2) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[6] = (-((font_data >> 1) & 1) & xorcol) ^ bgcol;
+ v = (-((font_data >> 0) & 1) & xorcol) ^ bgcol;
+ ((uint32_t *)d)[7] = v;
+ if (dup9)
+ ((uint32_t *)d)[8] = v;
+ else
+ ((uint32_t *)d)[8] = bgcol;
+#endif
+ font_ptr += 4;
+ d += linesize;
+ } while (--h);
+}
+
+/*
+ * 4 color mode
+ */
+static void RT_CONCAT(vga_draw_line2_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ uint32_t plane_mask, *palette, data, v, src_inc, dwb_mode;
+ int x;
+ RT_NOREF(pThisCC);
+
+ palette = s1->last_palette;
+ plane_mask = mask16[s1->ar[0x12] & 0xf];
+ dwb_mode = (s1->cr[0x14] & 0x40) ? 2 : (s1->cr[0x17] & 0x40) ? 0 : 1;
+ src_inc = 4 << dwb_mode;
+ width >>= 3;
+ for(x = 0; x < width; x++) {
+ data = ((uint32_t *)s)[0];
+ data &= plane_mask;
+ v = expand2[GET_PLANE(data, 0)];
+ v |= expand2[GET_PLANE(data, 2)] << 2;
+ ((PIXEL_TYPE *)d)[0] = palette[v >> 12];
+ ((PIXEL_TYPE *)d)[1] = palette[(v >> 8) & 0xf];
+ ((PIXEL_TYPE *)d)[2] = palette[(v >> 4) & 0xf];
+ ((PIXEL_TYPE *)d)[3] = palette[(v >> 0) & 0xf];
+
+ v = expand2[GET_PLANE(data, 1)];
+ v |= expand2[GET_PLANE(data, 3)] << 2;
+ ((PIXEL_TYPE *)d)[4] = palette[v >> 12];
+ ((PIXEL_TYPE *)d)[5] = palette[(v >> 8) & 0xf];
+ ((PIXEL_TYPE *)d)[6] = palette[(v >> 4) & 0xf];
+ ((PIXEL_TYPE *)d)[7] = palette[(v >> 0) & 0xf];
+ d += BPP * 8;
+ s += src_inc;
+ }
+}
+
+#if BPP == 1
+#define PUT_PIXEL2(d, n, v) ((uint16_t *)d)[(n)] = (v)
+#elif BPP == 2
+#define PUT_PIXEL2(d, n, v) ((uint32_t *)d)[(n)] = (v)
+#else
+#define PUT_PIXEL2(d, n, v) \
+((uint32_t *)d)[2*(n)] = ((uint32_t *)d)[2*(n)+1] = (v)
+#endif
+
+/*
+ * 4 color mode, dup2 horizontal
+ */
+static void RT_CONCAT(vga_draw_line2d2_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ uint32_t plane_mask, *palette, data, v, src_inc, dwb_mode;
+ int x;
+ RT_NOREF(pThisCC);
+
+ palette = s1->last_palette;
+ plane_mask = mask16[s1->ar[0x12] & 0xf];
+ dwb_mode = (s1->cr[0x14] & 0x40) ? 2 : (s1->cr[0x17] & 0x40) ? 0 : 1;
+ src_inc = 4 << dwb_mode;
+ width >>= 3;
+ for(x = 0; x < width; x++) {
+ data = ((uint32_t *)s)[0];
+ data &= plane_mask;
+ v = expand2[GET_PLANE(data, 0)];
+ v |= expand2[GET_PLANE(data, 2)] << 2;
+ PUT_PIXEL2(d, 0, palette[v >> 12]);
+ PUT_PIXEL2(d, 1, palette[(v >> 8) & 0xf]);
+ PUT_PIXEL2(d, 2, palette[(v >> 4) & 0xf]);
+ PUT_PIXEL2(d, 3, palette[(v >> 0) & 0xf]);
+
+ v = expand2[GET_PLANE(data, 1)];
+ v |= expand2[GET_PLANE(data, 3)] << 2;
+ PUT_PIXEL2(d, 4, palette[v >> 12]);
+ PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]);
+ PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]);
+ PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]);
+ d += BPP * 16;
+ s += src_inc;
+ }
+}
+
+/*
+ * 16 color mode
+ */
+static void RT_CONCAT(vga_draw_line4_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ uint32_t plane_mask, data, v, *palette, vram_ofs;
+ int x;
+ RT_NOREF(pThisCC);
+
+ vram_ofs = s - pThisCC->pbVRam;
+ palette = s1->last_palette;
+ plane_mask = mask16[s1->ar[0x12] & 0xf];
+ width >>= 3;
+ for(x = 0; x < width; x++) {
+ s = pThisCC->pbVRam + (vram_ofs & s1->vga_addr_mask);
+ data = ((uint32_t *)s)[0];
+ data &= plane_mask;
+ v = expand4[GET_PLANE(data, 0)];
+ v |= expand4[GET_PLANE(data, 1)] << 1;
+ v |= expand4[GET_PLANE(data, 2)] << 2;
+ v |= expand4[GET_PLANE(data, 3)] << 3;
+ ((PIXEL_TYPE *)d)[0] = palette[v >> 28];
+ ((PIXEL_TYPE *)d)[1] = palette[(v >> 24) & 0xf];
+ ((PIXEL_TYPE *)d)[2] = palette[(v >> 20) & 0xf];
+ ((PIXEL_TYPE *)d)[3] = palette[(v >> 16) & 0xf];
+ ((PIXEL_TYPE *)d)[4] = palette[(v >> 12) & 0xf];
+ ((PIXEL_TYPE *)d)[5] = palette[(v >> 8) & 0xf];
+ ((PIXEL_TYPE *)d)[6] = palette[(v >> 4) & 0xf];
+ ((PIXEL_TYPE *)d)[7] = palette[(v >> 0) & 0xf];
+ d += BPP * 8;
+ vram_ofs += 4;
+ }
+}
+
+/*
+ * 16 color mode, dup2 horizontal
+ */
+static void RT_CONCAT(vga_draw_line4d2_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ uint32_t plane_mask, data, v, *palette;
+ int x;
+ RT_NOREF(pThisCC);
+
+ palette = s1->last_palette;
+ plane_mask = mask16[s1->ar[0x12] & 0xf];
+ width >>= 3;
+ for(x = 0; x < width; x++) {
+ data = ((uint32_t *)s)[0];
+ data &= plane_mask;
+ v = expand4[GET_PLANE(data, 0)];
+ v |= expand4[GET_PLANE(data, 1)] << 1;
+ v |= expand4[GET_PLANE(data, 2)] << 2;
+ v |= expand4[GET_PLANE(data, 3)] << 3;
+ PUT_PIXEL2(d, 0, palette[v >> 28]);
+ PUT_PIXEL2(d, 1, palette[(v >> 24) & 0xf]);
+ PUT_PIXEL2(d, 2, palette[(v >> 20) & 0xf]);
+ PUT_PIXEL2(d, 3, palette[(v >> 16) & 0xf]);
+ PUT_PIXEL2(d, 4, palette[(v >> 12) & 0xf]);
+ PUT_PIXEL2(d, 5, palette[(v >> 8) & 0xf]);
+ PUT_PIXEL2(d, 6, palette[(v >> 4) & 0xf]);
+ PUT_PIXEL2(d, 7, palette[(v >> 0) & 0xf]);
+ d += BPP * 16;
+ s += 4;
+ }
+}
+
+/*
+ * 256 color mode, double pixels
+ *
+ * XXX: add plane_mask support (never used in standard VGA modes)
+ */
+static void RT_CONCAT(vga_draw_line8d2_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ uint32_t *palette;
+ int x;
+ RT_NOREF(pThisCC);
+
+ palette = s1->last_palette;
+ width >>= 3;
+ for(x = 0; x < width; x++) {
+ PUT_PIXEL2(d, 0, palette[s[0]]);
+ PUT_PIXEL2(d, 1, palette[s[1]]);
+ PUT_PIXEL2(d, 2, palette[s[2]]);
+ PUT_PIXEL2(d, 3, palette[s[3]]);
+ d += BPP * 8;
+ s += 4;
+ }
+}
+
+/*
+ * standard 256 color mode
+ *
+ * XXX: add plane_mask support (never used in standard VGA modes)
+ */
+static void RT_CONCAT(vga_draw_line8_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ uint32_t *palette;
+ int x;
+ RT_NOREF(pThisCC);
+
+ palette = s1->last_palette;
+ width >>= 3;
+ for(x = 0; x < width; x++) {
+ ((PIXEL_TYPE *)d)[0] = palette[s[0]];
+ ((PIXEL_TYPE *)d)[1] = palette[s[1]];
+ ((PIXEL_TYPE *)d)[2] = palette[s[2]];
+ ((PIXEL_TYPE *)d)[3] = palette[s[3]];
+ ((PIXEL_TYPE *)d)[4] = palette[s[4]];
+ ((PIXEL_TYPE *)d)[5] = palette[s[5]];
+ ((PIXEL_TYPE *)d)[6] = palette[s[6]];
+ ((PIXEL_TYPE *)d)[7] = palette[s[7]];
+ d += BPP * 8;
+ s += 8;
+ }
+}
+
+#endif /* DEPTH != 15 */
+
+
+/* XXX: optimize */
+
+/*
+ * 15 bit color
+ */
+static void RT_CONCAT(vga_draw_line15_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ RT_NOREF(s1, pThisCC);
+#if DEPTH == 15 && defined(WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
+ memcpy(d, s, width * 2);
+#else
+ int w;
+ uint32_t v, r, g, b;
+
+ w = width;
+ do {
+ v = s[0] | (s[1] << 8);
+ r = (v >> 7) & 0xf8;
+ g = (v >> 2) & 0xf8;
+ b = (v << 3) & 0xf8;
+ ((PIXEL_TYPE *)d)[0] = RT_CONCAT(rgb_to_pixel, DEPTH)(r, g, b);
+ s += 2;
+ d += BPP;
+ } while (--w != 0);
+#endif
+}
+
+/*
+ * 16 bit color
+ */
+static void RT_CONCAT(vga_draw_line16_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ RT_NOREF(s1, pThisCC);
+#if DEPTH == 16 && defined(WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
+ memcpy(d, s, width * 2);
+#else
+ int w;
+ uint32_t v, r, g, b;
+
+ w = width;
+ do {
+ v = s[0] | (s[1] << 8);
+ r = (v >> 8) & 0xf8;
+ g = (v >> 3) & 0xfc;
+ b = (v << 3) & 0xf8;
+ ((PIXEL_TYPE *)d)[0] = RT_CONCAT(rgb_to_pixel, DEPTH)(r, g, b);
+ s += 2;
+ d += BPP;
+ } while (--w != 0);
+#endif
+}
+
+/*
+ * 24 bit color
+ */
+static void RT_CONCAT(vga_draw_line24_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ int w;
+ uint32_t r, g, b;
+ RT_NOREF(s1, pThisCC);
+
+ w = width;
+ do {
+#if defined(TARGET_WORDS_BIGENDIAN)
+ r = s[0];
+ g = s[1];
+ b = s[2];
+#else
+ b = s[0];
+ g = s[1];
+ r = s[2];
+#endif
+ ((PIXEL_TYPE *)d)[0] = RT_CONCAT(rgb_to_pixel, DEPTH)(r, g, b);
+ s += 3;
+ d += BPP;
+ } while (--w != 0);
+}
+
+/*
+ * 32 bit color
+ */
+static void RT_CONCAT(vga_draw_line32_, DEPTH)(VGAState *s1, PVGASTATER3 pThisCC, uint8_t *d,
+ const uint8_t *s, int width)
+{
+ RT_NOREF(s1, pThisCC);
+#if DEPTH == 32 && defined(WORDS_BIGENDIAN) == defined(TARGET_WORDS_BIGENDIAN)
+ memcpy(d, s, width * 4);
+#else
+ int w;
+ uint32_t r, g, b;
+
+ w = width;
+ do {
+#if defined(TARGET_WORDS_BIGENDIAN)
+ r = s[1];
+ g = s[2];
+ b = s[3];
+#else
+ b = s[0];
+ g = s[1];
+ r = s[2];
+#endif
+ ((PIXEL_TYPE *)d)[0] = RT_CONCAT(rgb_to_pixel, DEPTH)(r, g, b);
+ s += 4;
+ d += BPP;
+ } while (--w != 0);
+#endif
+}
+
+#if DEPTH != 15
+#ifndef VBOX
+#ifdef VBOX
+static
+#endif/* VBOX */
+void RT_CONCAT(vga_draw_cursor_line_, DEPTH)(uint8_t *d1,
+ const uint8_t *src1,
+ int poffset, int w,
+ unsigned int color0,
+ unsigned int color1,
+ unsigned int color_xor)
+{
+ const uint8_t *plane0, *plane1;
+ int x, b0, b1;
+ uint8_t *d;
+
+ d = d1;
+ plane0 = src1;
+ plane1 = src1 + poffset;
+ for(x = 0; x < w; x++) {
+ b0 = (plane0[x >> 3] >> (7 - (x & 7))) & 1;
+ b1 = (plane1[x >> 3] >> (7 - (x & 7))) & 1;
+#if DEPTH == 8
+ switch(b0 | (b1 << 1)) {
+ case 0:
+ break;
+ case 1:
+ d[0] ^= color_xor;
+ break;
+ case 2:
+ d[0] = color0;
+ break;
+ case 3:
+ d[0] = color1;
+ break;
+ }
+#elif DEPTH == 16
+ switch(b0 | (b1 << 1)) {
+ case 0:
+ break;
+ case 1:
+ ((uint16_t *)d)[0] ^= color_xor;
+ break;
+ case 2:
+ ((uint16_t *)d)[0] = color0;
+ break;
+ case 3:
+ ((uint16_t *)d)[0] = color1;
+ break;
+ }
+#elif DEPTH == 32
+ switch(b0 | (b1 << 1)) {
+ case 0:
+ break;
+ case 1:
+ ((uint32_t *)d)[0] ^= color_xor;
+ break;
+ case 2:
+ ((uint32_t *)d)[0] = color0;
+ break;
+ case 3:
+ ((uint32_t *)d)[0] = color1;
+ break;
+ }
+#else
+#error unsupported depth
+#endif
+ d += BPP;
+ }
+}
+#endif /* !VBOX */
+#endif
+
+#undef PUT_PIXEL2
+#undef DEPTH
+#undef BPP
+#undef PIXEL_TYPE
diff --git a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
new file mode 100644
index 00000000..961c75aa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
@@ -0,0 +1,2884 @@
+/* $Id: DevVGA_VBVA.cpp $ */
+/** @file
+ * VirtualBox Video Acceleration (VBVA).
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VGA
+#include <VBox/vmm/pdmifs.h>
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/vmm/pgm.h>
+#include <VBox/vmm/ssm.h>
+#include <VBox/VMMDev.h>
+#include <VBox/AssertGuest.h>
+#include <VBoxVideo.h>
+#include <iprt/alloc.h>
+#include <iprt/assert.h>
+#include <iprt/asm.h>
+#include <iprt/string.h>
+#include <iprt/param.h>
+#ifdef VBOX_WITH_VIDEOHWACCEL
+#include <iprt/semaphore.h>
+#endif
+
+#include "DevVGA.h"
+
+/* A very detailed logging. */
+#if 0 // def DEBUG_sunlover
+#define LOGVBVABUFFER(a) LogFlow(a)
+#else
+#define LOGVBVABUFFER(a) do {} while (0)
+#endif
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+typedef struct VBVAPARTIALRECORD
+{
+ uint8_t *pu8;
+ uint32_t cb;
+} VBVAPARTIALRECORD;
+
+typedef struct VBVADATA
+{
+ struct
+ {
+ VBVABUFFER RT_UNTRUSTED_VOLATILE_GUEST *pVBVA; /**< Pointer to the guest memory with the VBVABUFFER. */
+ uint8_t RT_UNTRUSTED_VOLATILE_GUEST *pu8Data; /**< For convenience, pointer to the guest ring buffer (VBVABUFFER::au8Data). */
+ } guest;
+ uint32_t u32VBVAOffset; /**< VBVABUFFER offset in the guest VRAM. */
+ VBVAPARTIALRECORD partialRecord; /**< Partial record temporary storage. */
+ uint32_t off32Data; /**< The offset where the data starts in the VBVABUFFER.
+ * The host code uses it instead of VBVABUFFER::off32Data. */
+ uint32_t indexRecordFirst; /**< Index of the first filled record in VBVABUFFER::aRecords. */
+ uint32_t cbPartialWriteThreshold; /**< Copy of VBVABUFFER::cbPartialWriteThreshold used by host code. */
+ uint32_t cbData; /**< Copy of VBVABUFFER::cbData used by host code. */
+} VBVADATA;
+
+typedef struct VBVAVIEW
+{
+ VBVAINFOVIEW view;
+ VBVAINFOSCREEN screen;
+ VBVADATA vbva;
+} VBVAVIEW;
+
+typedef struct VBVAMOUSESHAPEINFO
+{
+ bool fSet;
+ bool fVisible;
+ bool fAlpha;
+ uint32_t u32HotX;
+ uint32_t u32HotY;
+ uint32_t u32Width;
+ uint32_t u32Height;
+ uint32_t cbShape;
+ uint32_t cbAllocated;
+ uint8_t *pu8Shape;
+} VBVAMOUSESHAPEINFO;
+
+/** @todo saved state: save and restore VBVACONTEXT */
+typedef struct VBVACONTEXT
+{
+ uint32_t cViews;
+ VBVAVIEW aViews[VBOX_VIDEO_MAX_SCREENS];
+ VBVAMOUSESHAPEINFO mouseShapeInfo;
+ bool fPaused;
+ VBVAMODEHINT aModeHints[VBOX_VIDEO_MAX_SCREENS];
+} VBVACONTEXT;
+
+
+static void vbvaDataCleanup(VBVADATA *pVBVAData)
+{
+ if (pVBVAData->guest.pVBVA)
+ {
+ pVBVAData->guest.pVBVA->hostFlags.u32HostEvents = 0;
+ pVBVAData->guest.pVBVA->hostFlags.u32SupportedOrders = 0;
+ }
+
+ RTMemFreeZ(pVBVAData->partialRecord.pu8, pVBVAData->partialRecord.cb);
+
+ RT_ZERO(*pVBVAData);
+ pVBVAData->u32VBVAOffset = HGSMIOFFSET_VOID;
+}
+
+/** Copies @a cb bytes from the VBVA ring buffer to the @a pbDst.
+ * Used for partial records or for records which cross the ring boundary.
+ */
+static bool vbvaFetchBytes(VBVADATA *pVBVAData, uint8_t *pbDst, uint32_t cb)
+{
+ if (cb >= pVBVAData->cbData)
+ {
+ AssertMsgFailed(("cb = 0x%08X, ring buffer size 0x%08X", cb, pVBVAData->cbData));
+ return false;
+ }
+
+ const uint8_t RT_UNTRUSTED_VOLATILE_GUEST *pbSrc = &pVBVAData->guest.pu8Data[pVBVAData->off32Data];
+ const uint32_t u32BytesTillBoundary = pVBVAData->cbData - pVBVAData->off32Data;
+ const int32_t i32Diff = cb - u32BytesTillBoundary;
+
+ if (i32Diff <= 0)
+ {
+ /* Chunk will not cross buffer boundary. */
+ RT_BCOPY_VOLATILE(pbDst, pbSrc, cb);
+ }
+ else
+ {
+ /* Chunk crosses buffer boundary. */
+ RT_BCOPY_VOLATILE(pbDst, pbSrc, u32BytesTillBoundary);
+ RT_BCOPY_VOLATILE(pbDst + u32BytesTillBoundary, &pVBVAData->guest.pu8Data[0], i32Diff);
+ }
+
+ /* Advance data offset and sync with guest. */
+ pVBVAData->off32Data = (pVBVAData->off32Data + cb) % pVBVAData->cbData;
+ pVBVAData->guest.pVBVA->off32Data = pVBVAData->off32Data;
+ return true;
+}
+
+
+static bool vbvaPartialRead(uint32_t cbRecord, VBVADATA *pVBVAData)
+{
+ VBVAPARTIALRECORD *pPartialRecord = &pVBVAData->partialRecord;
+ uint8_t *pu8New;
+
+ LOGVBVABUFFER(("vbvaPartialRead: p = %p, cb = %d, cbRecord 0x%08X\n",
+ pPartialRecord->pu8, pPartialRecord->cb, cbRecord));
+
+ Assert(cbRecord > pPartialRecord->cb); /* Caller ensures this. */
+
+ const uint32_t cbChunk = cbRecord - pPartialRecord->cb;
+ if (cbChunk >= pVBVAData->cbData)
+ {
+ return false;
+ }
+
+ if (pPartialRecord->pu8)
+ {
+ Assert(pPartialRecord->cb);
+ pu8New = (uint8_t *)RTMemRealloc(pPartialRecord->pu8, cbRecord);
+ }
+ else
+ {
+ Assert(!pPartialRecord->cb);
+ pu8New = (uint8_t *)RTMemAlloc(cbRecord);
+ }
+
+ if (!pu8New)
+ {
+ /* Memory allocation failed, fail the function. */
+ Log(("vbvaPartialRead: failed to (re)alocate memory for partial record!!! cbRecord 0x%08X\n",
+ cbRecord));
+
+ return false;
+ }
+
+ /* Fetch data from the ring buffer. */
+ if (!vbvaFetchBytes(pVBVAData, pu8New + pPartialRecord->cb, cbChunk))
+ {
+ return false;
+ }
+
+ pPartialRecord->pu8 = pu8New;
+ pPartialRecord->cb = cbRecord;
+
+ return true;
+}
+
+/**
+ * For contiguous chunks just return the address in the buffer. For crossing
+ * boundary - allocate a buffer from heap.
+ */
+static bool vbvaFetchCmd(VBVADATA *pVBVAData, VBVACMDHDR RT_UNTRUSTED_VOLATILE_GUEST **ppHdr, uint32_t *pcbCmd)
+{
+ VBVAPARTIALRECORD *pPartialRecord = &pVBVAData->partialRecord;
+ uint32_t indexRecordFirst = pVBVAData->indexRecordFirst;
+ const uint32_t indexRecordFree = ASMAtomicReadU32(&pVBVAData->guest.pVBVA->indexRecordFree);
+
+ LOGVBVABUFFER(("first = %d, free = %d\n",
+ indexRecordFirst, indexRecordFree));
+
+ if (indexRecordFree >= RT_ELEMENTS(pVBVAData->guest.pVBVA->aRecords))
+ {
+ return false;
+ }
+
+ if (indexRecordFirst == indexRecordFree)
+ {
+ /* No records to process. Return without assigning output variables. */
+ return true;
+ }
+
+ uint32_t cbRecordCurrent = ASMAtomicReadU32(&pVBVAData->guest.pVBVA->aRecords[indexRecordFirst].cbRecord);
+
+ LOGVBVABUFFER(("cbRecord = 0x%08X, pPartialRecord->cb = 0x%08X\n", cbRecordCurrent, pPartialRecord->cb));
+
+ uint32_t cbRecord = cbRecordCurrent & ~VBVA_F_RECORD_PARTIAL;
+
+ if (cbRecord > VBVA_MAX_RECORD_SIZE)
+ {
+ return false;
+ }
+
+ if (pPartialRecord->cb)
+ {
+ /* There is a partial read in process. Continue with it. */
+ Assert (pPartialRecord->pu8);
+
+ LOGVBVABUFFER(("continue partial record cb = %d cbRecord 0x%08X, first = %d, free = %d\n",
+ pPartialRecord->cb, cbRecordCurrent, indexRecordFirst, indexRecordFree));
+
+ if (cbRecord > pPartialRecord->cb)
+ {
+ /* New data has been added to the record. */
+ if (!vbvaPartialRead(cbRecord, pVBVAData))
+ {
+ return false;
+ }
+ }
+
+ if (!(cbRecordCurrent & VBVA_F_RECORD_PARTIAL))
+ {
+ /* The record is completed by guest. Return it to the caller. */
+ *ppHdr = (VBVACMDHDR *)pPartialRecord->pu8;
+ *pcbCmd = pPartialRecord->cb;
+
+ pPartialRecord->pu8 = NULL;
+ pPartialRecord->cb = 0;
+
+ /* Advance the record index and sync with guest. */
+ pVBVAData->indexRecordFirst = (indexRecordFirst + 1) % RT_ELEMENTS(pVBVAData->guest.pVBVA->aRecords);
+ pVBVAData->guest.pVBVA->indexRecordFirst = pVBVAData->indexRecordFirst;
+
+ LOGVBVABUFFER(("partial done ok, data = %d, free = %d\n",
+ pVBVAData->off32Data, pVBVAData->guest.pVBVA->off32Free));
+ }
+
+ return true;
+ }
+
+ /* A new record need to be processed. */
+ if (cbRecordCurrent & VBVA_F_RECORD_PARTIAL)
+ {
+ /* Current record is being written by guest. '=' is important here,
+ * because the guest will do a FLUSH at this condition.
+ * This partial record is too large for the ring buffer and must
+ * be accumulated in an allocated buffer.
+ */
+ if (cbRecord >= pVBVAData->cbData - pVBVAData->cbPartialWriteThreshold)
+ {
+ /* Partial read must be started. */
+ if (!vbvaPartialRead(cbRecord, pVBVAData))
+ {
+ return false;
+ }
+
+ LOGVBVABUFFER(("started partial record cb = 0x%08X cbRecord 0x%08X, first = %d, free = %d\n",
+ pPartialRecord->cb, cbRecordCurrent, indexRecordFirst, indexRecordFree));
+ }
+
+ return true;
+ }
+
+ /* Current record is complete. If it is not empty, process it. */
+ if (cbRecord >= pVBVAData->cbData)
+ {
+ return false;
+ }
+
+ if (cbRecord)
+ {
+ /* The size of largest contiguous chunk in the ring buffer. */
+ uint32_t u32BytesTillBoundary = pVBVAData->cbData - pVBVAData->off32Data;
+
+ /* The pointer to data in the ring buffer. */
+ uint8_t RT_UNTRUSTED_VOLATILE_GUEST *pbSrc = &pVBVAData->guest.pu8Data[pVBVAData->off32Data];
+
+ /* Fetch or point the data. */
+ if (u32BytesTillBoundary >= cbRecord)
+ {
+ /* The command does not cross buffer boundary. Return address in the buffer. */
+ *ppHdr = (VBVACMDHDR RT_UNTRUSTED_VOLATILE_GUEST *)pbSrc;
+
+ /* The data offset will be updated in vbvaReleaseCmd. */
+ }
+ else
+ {
+ /* The command crosses buffer boundary. Rare case, so not optimized. */
+ uint8_t *pbDst = (uint8_t *)RTMemAlloc(cbRecord);
+ if (!pbDst)
+ {
+ LogFlowFunc (("could not allocate %d bytes from heap!!!\n", cbRecord));
+ return false;
+ }
+
+ vbvaFetchBytes(pVBVAData, pbDst, cbRecord);
+
+ *ppHdr = (VBVACMDHDR *)pbDst;
+
+ LOGVBVABUFFER(("Allocated from heap %p\n", pbDst));
+ }
+ }
+
+ *pcbCmd = cbRecord;
+
+ /* Advance the record index and sync with guest. */
+ pVBVAData->indexRecordFirst = (indexRecordFirst + 1) % RT_ELEMENTS(pVBVAData->guest.pVBVA->aRecords);
+ pVBVAData->guest.pVBVA->indexRecordFirst = pVBVAData->indexRecordFirst;
+
+ LOGVBVABUFFER(("done ok, data = %d, free = %d\n",
+ pVBVAData->off32Data, pVBVAData->guest.pVBVA->off32Free));
+
+ return true;
+}
+
+static void vbvaReleaseCmd(VBVADATA *pVBVAData, VBVACMDHDR RT_UNTRUSTED_VOLATILE_GUEST *pHdr, uint32_t cbCmd)
+{
+ VBVAPARTIALRECORD *pPartialRecord = &pVBVAData->partialRecord;
+ const uint8_t RT_UNTRUSTED_VOLATILE_GUEST *pbRingBuffer = pVBVAData->guest.pu8Data;
+
+ if ( (uintptr_t)pHdr >= (uintptr_t)pbRingBuffer
+ && (uintptr_t)pHdr < (uintptr_t)&pbRingBuffer[pVBVAData->cbData])
+ {
+ /* The pointer is inside ring buffer. Must be continuous chunk. */
+ Assert(pVBVAData->cbData - (uint32_t)((uint8_t *)pHdr - pbRingBuffer) >= cbCmd);
+
+ /* Advance data offset and sync with guest. */
+ pVBVAData->off32Data = (pVBVAData->off32Data + cbCmd) % pVBVAData->cbData;
+ pVBVAData->guest.pVBVA->off32Data = pVBVAData->off32Data;
+
+ Assert(!pPartialRecord->pu8 && pPartialRecord->cb == 0);
+ }
+ else
+ {
+ /* The pointer is outside. It is then an allocated copy. */
+ LOGVBVABUFFER(("Free heap %p\n", pHdr));
+
+ if ((uint8_t *)pHdr == pPartialRecord->pu8)
+ {
+ pPartialRecord->pu8 = NULL;
+ pPartialRecord->cb = 0;
+ }
+ else
+ {
+ Assert(!pPartialRecord->pu8 && pPartialRecord->cb == 0);
+ }
+
+ RTMemFree((void *)pHdr);
+ }
+}
+
+static int vbvaFlushProcess(PVGASTATECC pThisCC, VBVADATA *pVBVAData, unsigned uScreenId)
+{
+ LOGVBVABUFFER(("uScreenId %d, indexRecordFirst = %d, indexRecordFree = %d, off32Data = %d, off32Free = %d\n",
+ uScreenId, pVBVAData->indexRecordFirst, pVBVAData->guest.pVBVA->indexRecordFree,
+ pVBVAData->off32Data, pVBVAData->guest.pVBVA->off32Free));
+ struct
+ {
+ /* The rectangle that includes all dirty rectangles. */
+ int32_t xLeft;
+ int32_t xRight;
+ int32_t yTop;
+ int32_t yBottom;
+ } dirtyRect;
+ RT_ZERO(dirtyRect);
+
+ bool fUpdate = false; /* Whether there were any updates. */
+ bool fDirtyEmpty = true;
+
+ for (;;)
+ {
+ /* Fetch the command data. */
+ VBVACMDHDR RT_UNTRUSTED_VOLATILE_GUEST *pHdr = NULL;
+ uint32_t cbCmd = UINT32_MAX;
+ if (!vbvaFetchCmd(pVBVAData, &pHdr, &cbCmd))
+ {
+ LogFunc(("unable to fetch command. off32Data = %d, off32Free = %d!!!\n",
+ pVBVAData->off32Data, pVBVAData->guest.pVBVA->off32Free));
+ return VERR_NOT_SUPPORTED;
+ }
+
+ if (cbCmd == UINT32_MAX)
+ {
+ /* No more commands yet in the queue. */
+ break;
+ }
+
+ if (cbCmd < sizeof(VBVACMDHDR))
+ {
+ LogFunc(("short command. off32Data = %d, off32Free = %d, cbCmd %d!!!\n",
+ pVBVAData->off32Data, pVBVAData->guest.pVBVA->off32Free, cbCmd));
+
+ return VERR_NOT_SUPPORTED;
+ }
+
+ if (cbCmd != 0)
+ {
+ if (!fUpdate)
+ {
+ pThisCC->pDrv->pfnVBVAUpdateBegin(pThisCC->pDrv, uScreenId);
+ fUpdate = true;
+ }
+
+ /* Updates the rectangle and sends the command to the VRDP server. */
+ pThisCC->pDrv->pfnVBVAUpdateProcess(pThisCC->pDrv, uScreenId, pHdr, cbCmd);
+
+ int32_t xRight = pHdr->x + pHdr->w;
+ int32_t yBottom = pHdr->y + pHdr->h;
+
+ /* These are global coords, relative to the primary screen. */
+
+ LOGVBVABUFFER(("cbCmd = %d, x=%d, y=%d, w=%d, h=%d\n", cbCmd, pHdr->x, pHdr->y, pHdr->w, pHdr->h));
+ LogRel3(("%s: update command cbCmd = %d, x=%d, y=%d, w=%d, h=%d\n",
+ __FUNCTION__, cbCmd, pHdr->x, pHdr->y, pHdr->w, pHdr->h));
+
+ /* Collect all rects into one. */
+ if (fDirtyEmpty)
+ {
+ /* This is the first rectangle to be added. */
+ dirtyRect.xLeft = pHdr->x;
+ dirtyRect.yTop = pHdr->y;
+ dirtyRect.xRight = xRight;
+ dirtyRect.yBottom = yBottom;
+ fDirtyEmpty = false;
+ }
+ else
+ {
+ /* Adjust region coordinates. */
+ if (dirtyRect.xLeft > pHdr->x)
+ {
+ dirtyRect.xLeft = pHdr->x;
+ }
+
+ if (dirtyRect.yTop > pHdr->y)
+ {
+ dirtyRect.yTop = pHdr->y;
+ }
+
+ if (dirtyRect.xRight < xRight)
+ {
+ dirtyRect.xRight = xRight;
+ }
+
+ if (dirtyRect.yBottom < yBottom)
+ {
+ dirtyRect.yBottom = yBottom;
+ }
+ }
+ }
+
+ vbvaReleaseCmd(pVBVAData, pHdr, cbCmd);
+ }
+
+ if (fUpdate)
+ {
+ if (dirtyRect.xRight - dirtyRect.xLeft)
+ {
+ LogRel3(("%s: sending update screen=%d, x=%d, y=%d, w=%d, h=%d\n",
+ __FUNCTION__, uScreenId, dirtyRect.xLeft,
+ dirtyRect.yTop, dirtyRect.xRight - dirtyRect.xLeft,
+ dirtyRect.yBottom - dirtyRect.yTop));
+ pThisCC->pDrv->pfnVBVAUpdateEnd(pThisCC->pDrv, uScreenId, dirtyRect.xLeft, dirtyRect.yTop,
+ dirtyRect.xRight - dirtyRect.xLeft, dirtyRect.yBottom - dirtyRect.yTop);
+ }
+ else
+ {
+ pThisCC->pDrv->pfnVBVAUpdateEnd(pThisCC->pDrv, uScreenId, 0, 0, 0, 0);
+ }
+ }
+
+ return VINF_SUCCESS;
+}
+
+static int vbvaFlush(PVGASTATE pThis, PVGASTATECC pThisCC, VBVACONTEXT *pCtx)
+{
+ int rc = VINF_SUCCESS;
+
+ unsigned uScreenId;
+ for (uScreenId = 0; uScreenId < pCtx->cViews; uScreenId++)
+ {
+ VBVADATA *pVBVAData = &pCtx->aViews[uScreenId].vbva;
+ if (pVBVAData->guest.pVBVA)
+ {
+ rc = vbvaFlushProcess(pThisCC, pVBVAData, uScreenId);
+ if (RT_FAILURE(rc))
+ break;
+ }
+ }
+
+ if (RT_FAILURE(rc))
+ {
+ /* Turn off VBVA processing. */
+ LogRel(("VBVA: Disabling (%Rrc)\n", rc));
+ pThis->fGuestCaps = 0;
+ pThisCC->pDrv->pfnVBVAGuestCapabilityUpdate(pThisCC->pDrv, pThis->fGuestCaps);
+ for (uScreenId = 0; uScreenId < pCtx->cViews; uScreenId++)
+ {
+ VBVADATA *pVBVAData = &pCtx->aViews[uScreenId].vbva;
+ if (pVBVAData->guest.pVBVA)
+ {
+ vbvaDataCleanup(pVBVAData);
+ pThisCC->pDrv->pfnVBVADisable(pThisCC->pDrv, uScreenId);
+ }
+ }
+ }
+
+ return rc;
+}
+
+static int vbvaResize(PVGASTATECC pThisCC, VBVAVIEW *pView, const VBVAINFOSCREEN *pNewScreen, bool fResetInputMapping)
+{
+ /* Callers ensure that pNewScreen contains valid data. */
+
+ /* Apply these changes. */
+ pView->screen = *pNewScreen;
+
+ uint8_t *pbVRam = pThisCC->pbVRam + pView->view.u32ViewOffset;
+ return pThisCC->pDrv->pfnVBVAResize(pThisCC->pDrv, &pView->view, &pView->screen, pbVRam, fResetInputMapping);
+}
+
+static int vbvaEnable(PVGASTATE pThis, PVGASTATECC pThisCC, VBVACONTEXT *pCtx, unsigned uScreenId,
+ VBVABUFFER RT_UNTRUSTED_VOLATILE_GUEST *pVBVA, uint32_t u32Offset, bool fRestored)
+{
+ /*
+ * Copy into non-volatile memory and validate its content.
+ */
+ VBVABUFFER VbgaSafe;
+ RT_COPY_VOLATILE(VbgaSafe, *pVBVA);
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ uint32_t const cbVBVABuffer = RT_UOFFSETOF(VBVABUFFER, au8Data) + VbgaSafe.cbData;
+ ASSERT_GUEST_RETURN( VbgaSafe.cbData <= UINT32_MAX - RT_UOFFSETOF(VBVABUFFER, au8Data)
+ && cbVBVABuffer <= pThis->vram_size
+ && u32Offset <= pThis->vram_size - cbVBVABuffer,
+ VERR_INVALID_PARAMETER);
+ if (!fRestored)
+ {
+ ASSERT_GUEST_RETURN(VbgaSafe.off32Data == 0, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(VbgaSafe.off32Free == 0, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(VbgaSafe.indexRecordFirst == 0, VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(VbgaSafe.indexRecordFree == 0, VERR_INVALID_PARAMETER);
+ }
+ ASSERT_GUEST_RETURN( VbgaSafe.cbPartialWriteThreshold < VbgaSafe.cbData
+ && VbgaSafe.cbPartialWriteThreshold != 0,
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Okay, try do the job.
+ */
+ int rc;
+ if (pThisCC->pDrv->pfnVBVAEnable)
+ {
+ pVBVA->hostFlags.u32HostEvents = 0;
+ pVBVA->hostFlags.u32SupportedOrders = 0;
+ rc = pThisCC->pDrv->pfnVBVAEnable(pThisCC->pDrv, uScreenId, &pVBVA->hostFlags);
+ if (RT_SUCCESS(rc))
+ {
+ /* pVBVA->hostFlags has been set up by pfnVBVAEnable. */
+ LogFlowFunc(("u32HostEvents=0x%08x u32SupportedOrders=0x%08x\n",
+ pVBVA->hostFlags.u32HostEvents, pVBVA->hostFlags.u32SupportedOrders));
+
+ VBVADATA *pVBVAData = &pCtx->aViews[uScreenId].vbva;
+ pVBVAData->guest.pVBVA = pVBVA;
+ pVBVAData->guest.pu8Data = &pVBVA->au8Data[0];
+ pVBVAData->u32VBVAOffset = u32Offset;
+ pVBVAData->off32Data = VbgaSafe.off32Data;
+ pVBVAData->indexRecordFirst = VbgaSafe.indexRecordFirst;
+ pVBVAData->cbPartialWriteThreshold = VbgaSafe.cbPartialWriteThreshold;
+ pVBVAData->cbData = VbgaSafe.cbData;
+
+ if (!fRestored)
+ {
+ /** @todo Actually this function must not touch the partialRecord structure at all,
+ * because initially it is a zero and when VBVA is disabled this should be set to zero.
+ * But I'm not sure that no code depends on zeroing partialRecord here.
+ * So for now (a quick fix for 4.1) just do not do this if the VM was restored,
+ * when partialRecord might be loaded already from the saved state.
+ */
+ pVBVAData->partialRecord.pu8 = NULL;
+ pVBVAData->partialRecord.cb = 0;
+ }
+
+ /* VBVA is working so disable the pause. */
+ pCtx->fPaused = false;
+ }
+ }
+ else
+ rc = VERR_NOT_SUPPORTED;
+ return rc;
+}
+
+static int vbvaDisable(PVGASTATE pThis, PVGASTATECC pThisCC, VBVACONTEXT *pCtx, unsigned idScreen)
+{
+ /* Process any pending orders and empty the VBVA ring buffer. */
+ vbvaFlush(pThis, pThisCC, pCtx);
+
+ AssertReturn(idScreen < RT_ELEMENTS(pCtx->aViews), VERR_OUT_OF_RANGE);
+ VBVADATA *pVBVAData = &pCtx->aViews[idScreen].vbva;
+ vbvaDataCleanup(pVBVAData);
+
+ if (idScreen == 0)
+ {
+ pThis->fGuestCaps = 0;
+ pThisCC->pDrv->pfnVBVAGuestCapabilityUpdate(pThisCC->pDrv, pThis->fGuestCaps);
+ }
+ pThisCC->pDrv->pfnVBVADisable(pThisCC->pDrv, idScreen);
+ return VINF_SUCCESS;
+}
+
+#ifdef UNUSED_FUNCTION
+bool VBVAIsEnabled(PVGASTATECC pThisCC)
+{
+ PHGSMIINSTANCE pHGSMI = pThisCC->pHGSMI;
+ if (pHGSMI)
+ {
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pHGSMI);
+ if (pCtx)
+ {
+ if (pCtx->cViews)
+ {
+ VBVAVIEW * pView = &pCtx->aViews[0];
+ if (pView->vbva.guest.pVBVA)
+ return true;
+ }
+ }
+ }
+ return false;
+}
+#endif
+
+#ifdef DEBUG_sunlover
+void dumpMouseShapeInfo(const VBVAMOUSESHAPEINFO *pMouseShapeInfo)
+{
+ LogFlow(("fSet = %d, fVisible %d, fAlpha %d, @%d,%d %dx%d (%p, %d/%d)\n",
+ pMouseShapeInfo->fSet,
+ pMouseShapeInfo->fVisible,
+ pMouseShapeInfo->fAlpha,
+ pMouseShapeInfo->u32HotX,
+ pMouseShapeInfo->u32HotY,
+ pMouseShapeInfo->u32Width,
+ pMouseShapeInfo->u32Height,
+ pMouseShapeInfo->pu8Shape,
+ pMouseShapeInfo->cbShape,
+ pMouseShapeInfo->cbAllocated
+ ));
+}
+#endif
+
+static int vbvaUpdateMousePointerShape(PVGASTATECC pThisCC, VBVAMOUSESHAPEINFO *pMouseShapeInfo, bool fShape)
+{
+ LogFlowFunc(("pThisCC %p, pMouseShapeInfo %p, fShape %d\n", pThisCC, pMouseShapeInfo, fShape));
+#ifdef DEBUG_sunlover
+ dumpMouseShapeInfo(pMouseShapeInfo);
+#endif
+
+ if (pThisCC->pDrv->pfnVBVAMousePointerShape == NULL)
+ return VERR_NOT_SUPPORTED;
+
+ int rc;
+ if (fShape && pMouseShapeInfo->pu8Shape != NULL)
+ rc = pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv,
+ pMouseShapeInfo->fVisible,
+ pMouseShapeInfo->fAlpha,
+ pMouseShapeInfo->u32HotX,
+ pMouseShapeInfo->u32HotY,
+ pMouseShapeInfo->u32Width,
+ pMouseShapeInfo->u32Height,
+ pMouseShapeInfo->pu8Shape);
+ else
+ rc = pThisCC->pDrv->pfnVBVAMousePointerShape(pThisCC->pDrv,
+ pMouseShapeInfo->fVisible,
+ false,
+ 0, 0,
+ 0, 0,
+ NULL);
+ return rc;
+}
+
+static int vbvaMousePointerShape(PVGASTATECC pThisCC, VBVACONTEXT *pCtx,
+ const VBVAMOUSEPOINTERSHAPE RT_UNTRUSTED_VOLATILE_GUEST *pShape, HGSMISIZE cbShape)
+{
+ /*
+ * Make non-volatile copy of the shape header and validate it.
+ */
+ VBVAMOUSEPOINTERSHAPE SafeShape;
+ RT_COPY_VOLATILE(SafeShape, *pShape);
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ LogFlowFunc(("VBVA_MOUSE_POINTER_SHAPE: i32Result 0x%x, fu32Flags 0x%x, hot spot %d,%d, size %dx%d\n",
+ SafeShape.i32Result, SafeShape.fu32Flags, SafeShape.u32HotX, SafeShape.u32HotY, SafeShape.u32Width, SafeShape.u32Height));
+
+ const bool fVisible = RT_BOOL(SafeShape.fu32Flags & VBOX_MOUSE_POINTER_VISIBLE);
+ const bool fAlpha = RT_BOOL(SafeShape.fu32Flags & VBOX_MOUSE_POINTER_ALPHA);
+ const bool fShape = RT_BOOL(SafeShape.fu32Flags & VBOX_MOUSE_POINTER_SHAPE);
+
+ HGSMISIZE cbPointerData = 0;
+ if (fShape)
+ {
+ static const uint32_t s_cxMax = 2048; //used to be: 8192;
+ static const uint32_t s_cyMax = 2048; //used to be: 8192;
+ ASSERT_GUEST_MSG_RETURN( SafeShape.u32Width <= s_cxMax
+ || SafeShape.u32Height <= s_cyMax,
+ ("Too large: %ux%u, max %ux%x\n", SafeShape.u32Width, SafeShape.u32Height, s_cxMax, s_cyMax),
+ VERR_INVALID_PARAMETER);
+
+ cbPointerData = ((((SafeShape.u32Width + 7) / 8) * SafeShape.u32Height + 3) & ~3)
+ + SafeShape.u32Width * 4 * SafeShape.u32Height;
+
+ ASSERT_GUEST_MSG_RETURN(cbPointerData <= cbShape - RT_UOFFSETOF(VBVAMOUSEPOINTERSHAPE, au8Data),
+ ("Insufficent pointer data: Expected %#x, got %#x\n",
+ cbPointerData, cbShape - RT_UOFFSETOF(VBVAMOUSEPOINTERSHAPE, au8Data) ),
+ VERR_INVALID_PARAMETER);
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Do the job.
+ */
+ /* Save mouse info it will be used to restore mouse pointer after restoring saved state. */
+ pCtx->mouseShapeInfo.fSet = true;
+ pCtx->mouseShapeInfo.fVisible = fVisible;
+ if (fShape)
+ {
+ /* Data related to shape. */
+ pCtx->mouseShapeInfo.u32HotX = SafeShape.u32HotX;
+ pCtx->mouseShapeInfo.u32HotY = SafeShape.u32HotY;
+ pCtx->mouseShapeInfo.u32Width = SafeShape.u32Width;
+ pCtx->mouseShapeInfo.u32Height = SafeShape.u32Height;
+ pCtx->mouseShapeInfo.fAlpha = fAlpha;
+
+ /* Reallocate memory buffer if necessary. */
+ if (cbPointerData > pCtx->mouseShapeInfo.cbAllocated)
+ {
+ RTMemFreeZ(pCtx->mouseShapeInfo.pu8Shape, pCtx->mouseShapeInfo.cbAllocated);
+ pCtx->mouseShapeInfo.pu8Shape = NULL;
+ pCtx->mouseShapeInfo.cbShape = 0;
+
+ uint8_t *pu8Shape = (uint8_t *)RTMemAlloc(cbPointerData);
+ if (pu8Shape)
+ {
+ pCtx->mouseShapeInfo.pu8Shape = pu8Shape;
+ pCtx->mouseShapeInfo.cbAllocated = cbPointerData;
+ }
+ }
+
+ /* Copy shape bitmaps. */
+ if (pCtx->mouseShapeInfo.pu8Shape)
+ {
+ RT_BCOPY_VOLATILE(pCtx->mouseShapeInfo.pu8Shape, &pShape->au8Data[0], cbPointerData);
+ pCtx->mouseShapeInfo.cbShape = cbPointerData;
+ }
+ }
+
+ return vbvaUpdateMousePointerShape(pThisCC, &pCtx->mouseShapeInfo, fShape);
+}
+
+static uint32_t vbvaViewFromBufferPtr(PHGSMIINSTANCE pIns, const VBVACONTEXT *pCtx,
+ const void RT_UNTRUSTED_VOLATILE_GUEST *pvBuffer)
+{
+ /* Check which view contains the buffer. */
+ HGSMIOFFSET offBuffer = HGSMIPointerToOffsetHost(pIns, pvBuffer);
+ if (offBuffer != HGSMIOFFSET_VOID)
+ {
+ unsigned uScreenId;
+ for (uScreenId = 0; uScreenId < pCtx->cViews; uScreenId++)
+ {
+ const VBVAINFOVIEW *pView = &pCtx->aViews[uScreenId].view;
+ if ((uint32_t)(offBuffer - pView->u32ViewOffset) < pView->u32ViewSize)
+ return pView->u32ViewIndex;
+ }
+ }
+ return UINT32_MAX;
+}
+
+#ifdef DEBUG_sunlover
+static void dumpctx(const VBVACONTEXT *pCtx)
+{
+ Log(("VBVACONTEXT dump: cViews %d\n", pCtx->cViews));
+
+ uint32_t iView;
+ for (iView = 0; iView < pCtx->cViews; iView++)
+ {
+ const VBVAVIEW *pView = &pCtx->aViews[iView];
+
+ Log((" view %d o 0x%x s 0x%x m 0x%x\n",
+ pView->view.u32ViewIndex,
+ pView->view.u32ViewOffset,
+ pView->view.u32ViewSize,
+ pView->view.u32MaxScreenSize));
+
+ Log((" screen %d @%d,%d s 0x%x l 0x%x %dx%d bpp %d f 0x%x\n",
+ pView->screen.u32ViewIndex,
+ pView->screen.i32OriginX,
+ pView->screen.i32OriginY,
+ pView->screen.u32StartOffset,
+ pView->screen.u32LineSize,
+ pView->screen.u32Width,
+ pView->screen.u32Height,
+ pView->screen.u16BitsPerPixel,
+ pView->screen.u16Flags));
+
+ Log((" VBVA o 0x%x p %p\n",
+ pView->vbva.u32VBVAOffset,
+ pView->vbva.guest.pVBVA));
+
+ Log((" PR cb 0x%x p %p\n",
+ pView->vbva.partialRecord.cb,
+ pView->vbva.partialRecord.pu8));
+ }
+
+ dumpMouseShapeInfo(&pCtx->mouseShapeInfo);
+}
+#endif /* DEBUG_sunlover */
+
+#define VBOXVBVASAVEDSTATE_VHWAAVAILABLE_MAGIC 0x12345678
+#define VBOXVBVASAVEDSTATE_VHWAUNAVAILABLE_MAGIC 0x9abcdef0
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+
+static void vbvaVHWAHHCommandReinit(VBOXVHWACMD* pHdr, VBOXVHWACMD_TYPE enmCmd, int32_t iDisplay)
+{
+ memset(pHdr, 0, VBOXVHWACMD_HEADSIZE());
+ pHdr->cRefs = 1;
+ pHdr->iDisplay = iDisplay;
+ pHdr->rc = VERR_NOT_IMPLEMENTED;
+ pHdr->enmCmd = enmCmd;
+ pHdr->Flags = VBOXVHWACMD_FLAG_HH_CMD;
+}
+
+static VBOXVHWACMD *vbvaVHWAHHCommandCreate(VBOXVHWACMD_TYPE enmCmd, int32_t iDisplay, VBOXVHWACMD_LENGTH cbCmd)
+{
+ VBOXVHWACMD *pHdr = (VBOXVHWACMD *)RTMemAllocZ(cbCmd + VBOXVHWACMD_HEADSIZE());
+ Assert(pHdr);
+ if (pHdr)
+ vbvaVHWAHHCommandReinit(pHdr, enmCmd, iDisplay);
+
+ return pHdr;
+}
+
+DECLINLINE(void) vbvaVHWAHHCommandRelease(VBOXVHWACMD *pCmd)
+{
+ uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs);
+ if (!cRefs)
+ RTMemFree(pCmd);
+}
+
+DECLINLINE(void) vbvaVHWAHHCommandRetain(VBOXVHWACMD *pCmd)
+{
+ ASMAtomicIncU32(&pCmd->cRefs);
+}
+
+static void vbvaVHWACommandComplete(PVGASTATECC pThisCC, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand, bool fAsyncCommand)
+{
+ if (fAsyncCommand)
+ {
+ Assert(pCommand->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH);
+ vbvaR3VHWACommandCompleteAsync(&pThisCC->IVBVACallbacks, pCommand);
+ }
+ else
+ {
+ Log(("VGA Command <<< Sync rc %d %#p, %d\n", pCommand->rc, pCommand, pCommand->enmCmd));
+ pCommand->Flags &= ~VBOXVHWACMD_FLAG_HG_ASYNCH;
+ }
+
+}
+
+static void vbvaVHWACommandCompleteAllPending(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, int rc)
+{
+ if (!ASMAtomicUoReadU32(&pThis->pendingVhwaCommands.cPending))
+ return;
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ VBOX_VHWA_PENDINGCMD *pIter, *pNext;
+ RTListForEachSafe(&pThis->pendingVhwaCommands.PendingList, pIter, pNext, VBOX_VHWA_PENDINGCMD, Node)
+ {
+ pIter->pCommand->rc = rc;
+ vbvaVHWACommandComplete(pThisCC, pIter->pCommand, true);
+
+ /* the command is submitted/processed, remove from the pend list */
+ RTListNodeRemove(&pIter->Node);
+ ASMAtomicDecU32(&pThis->pendingVhwaCommands.cPending);
+ RTMemFree(pIter);
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+}
+
+static void vbvaVHWACommandClearAllPending(PPDMDEVINS pDevIns, PVGASTATE pThis)
+{
+ if (!ASMAtomicUoReadU32(&pThis->pendingVhwaCommands.cPending))
+ return;
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ VBOX_VHWA_PENDINGCMD *pIter, *pNext;
+ RTListForEachSafe(&pThis->pendingVhwaCommands.PendingList, pIter, pNext, VBOX_VHWA_PENDINGCMD, Node)
+ {
+ RTListNodeRemove(&pIter->Node);
+ ASMAtomicDecU32(&pThis->pendingVhwaCommands.cPending);
+ RTMemFree(pIter);
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+}
+
+static void vbvaVHWACommandPend(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand)
+{
+ int rc = VERR_BUFFER_OVERFLOW;
+
+ if (ASMAtomicUoReadU32(&pThis->pendingVhwaCommands.cPending) < VBOX_VHWA_MAX_PENDING_COMMANDS)
+ {
+ VBOX_VHWA_PENDINGCMD *pPend = (VBOX_VHWA_PENDINGCMD *)RTMemAlloc(sizeof(*pPend));
+ if (pPend)
+ {
+ pCommand->Flags |= VBOXVHWACMD_FLAG_HG_ASYNCH;
+ pPend->pCommand = pCommand;
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ if (ASMAtomicUoReadU32(&pThis->pendingVhwaCommands.cPending) < VBOX_VHWA_MAX_PENDING_COMMANDS)
+ {
+ RTListAppend(&pThis->pendingVhwaCommands.PendingList, &pPend->Node);
+ ASMAtomicIncU32(&pThis->pendingVhwaCommands.cPending);
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return;
+ }
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ LogRel(("VBVA: Pending command count has reached its threshold.. completing them all.."));
+ RTMemFree(pPend);
+ }
+ else
+ rc = VERR_NO_MEMORY;
+ }
+ else
+ LogRel(("VBVA: Pending command count has reached its threshold, completing them all.."));
+
+ vbvaVHWACommandCompleteAllPending(pDevIns, pThis, pThisCC, rc);
+
+ pCommand->rc = rc;
+
+ vbvaVHWACommandComplete(pThisCC, pCommand, false);
+}
+
+static bool vbvaVHWACommandCanPend(VBOXVHWACMD_TYPE enmCmd)
+{
+ switch (enmCmd)
+ {
+ case VBOXVHWACMD_TYPE_HH_CONSTRUCT:
+ case VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEBEGIN:
+ case VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEEND:
+ case VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEPERFORM:
+ case VBOXVHWACMD_TYPE_HH_SAVESTATE_LOADPERFORM:
+ return false;
+ default:
+ return true;
+ }
+}
+
+static int vbvaVHWACommandSavePending(PCPDMDEVHLPR3 pHlp, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ int rc = pHlp->pfnSSMPutU32(pSSM, pThis->pendingVhwaCommands.cPending);
+ AssertRCReturn(rc, rc);
+
+ VBOX_VHWA_PENDINGCMD *pIter;
+ RTListForEach(&pThis->pendingVhwaCommands.PendingList, pIter, VBOX_VHWA_PENDINGCMD, Node)
+ {
+ AssertContinue((uintptr_t)pIter->pCommand - (uintptr_t)pThisCC->pbVRam < pThis->vram_size);
+ rc = pHlp->pfnSSMPutU32(pSSM, (uint32_t)(((uint8_t *)pIter->pCommand) - ((uint8_t *)pThisCC->pbVRam)));
+ AssertRCReturn(rc, rc);
+ }
+ return rc;
+}
+
+static int vbvaVHWACommandLoadPending(PPDMDEVINS pDevIns, PCPDMDEVHLPR3 pHlp, PVGASTATE pThis, PVGASTATECC pThisCC,
+ PSSMHANDLE pSSM, uint32_t u32Version)
+{
+ if (u32Version < VGA_SAVEDSTATE_VERSION_WITH_PENDVHWA)
+ return VINF_SUCCESS;
+
+ uint32_t u32;
+ int rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+ for (uint32_t i = 0; i < u32; ++i)
+ {
+ uint32_t off32;
+ rc = pHlp->pfnSSMGetU32(pSSM, &off32);
+ AssertRCReturn(rc, rc);
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand
+ = (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *)((uint8_t volatile *)pThisCC->pbVRam + off32);
+ vbvaVHWACommandPend(pDevIns, pThis, pThisCC, pCommand);
+ }
+ return rc;
+}
+
+
+/** Worker for vbvaVHWACommandSubmit. */
+static bool vbvaVHWACommandSubmitInner(PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand, bool *pfPending)
+{
+ *pfPending = false;
+
+ /*
+ * Read the command type and validate it and our driver state.
+ */
+ VBOXVHWACMD_TYPE enmCmd = pCommand->enmCmd;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ bool fGuestCmd = (uintptr_t)pCommand - (uintptr_t)pThisCC->pbVRam < pThis->vram_size;
+ ASSERT_GUEST_LOGREL_MSG_STMT_RETURN( !fGuestCmd
+ || ( enmCmd != VBOXVHWACMD_TYPE_HH_CONSTRUCT
+ && enmCmd != VBOXVHWACMD_TYPE_HH_RESET
+ && enmCmd != VBOXVHWACMD_TYPE_HH_DISABLE
+ && enmCmd != VBOXVHWACMD_TYPE_HH_ENABLE
+ && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEBEGIN
+ && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEEND
+ && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEPERFORM
+ && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_LOADPERFORM),
+ ("enmCmd=%d\n", enmCmd),
+ pCommand->rc = VERR_INVALID_PARAMETER,
+ true);
+ ASSERT_GUEST_STMT_RETURN(pThisCC->pDrv->pfnVHWACommandProcess, pCommand->rc = VERR_INVALID_STATE, true);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Call the driver to process the command.
+ */
+ Log(("VGA Command >>> %#p, %d\n", pCommand, enmCmd));
+ int rc = pThisCC->pDrv->pfnVHWACommandProcess(pThisCC->pDrv, enmCmd, fGuestCmd, pCommand);
+ if (rc == VINF_CALLBACK_RETURN)
+ {
+ Log(("VGA Command --- Going Async %#p, %d\n", pCommand, enmCmd));
+ *pfPending = true;
+ return true; /* Command will be completed asynchronously by the driver and need not be put in the pending list. */
+ }
+
+ if (rc == VERR_INVALID_STATE)
+ {
+ Log(("VGA Command --- Trying Pend %#p, %d\n", pCommand, enmCmd));
+ if (vbvaVHWACommandCanPend(enmCmd))
+ {
+ Log(("VGA Command --- Can Pend %#p, %d\n", pCommand, enmCmd));
+ *pfPending = true;
+ return false; /* put on pending list so it can be retried?? */
+ }
+
+ Log(("VGA Command --- Can NOT Pend %#p, %d\n", pCommand, enmCmd));
+ }
+ else
+ Log(("VGA Command --- Going Complete Sync rc %d %#p, %d\n", rc, pCommand, enmCmd));
+
+ /* the command was completed, take a special care about it (see caller) */
+ pCommand->rc = rc;
+ return true;
+}
+
+
+static bool vbvaVHWACommandSubmit(PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand, bool fAsyncCommand)
+{
+ bool fPending = false;
+ bool fRet = vbvaVHWACommandSubmitInner(pThis, pThisCC, pCommand, &fPending);
+ if (!fPending)
+ vbvaVHWACommandComplete(pThisCC, pCommand, fAsyncCommand);
+ return fRet;
+}
+
+
+/**
+ * @returns false if commands are pending, otherwise true.
+ */
+static bool vbvaVHWACheckPendingCommands(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ if (!ASMAtomicUoReadU32(&pThis->pendingVhwaCommands.cPending))
+ return true;
+
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSect, rcLock);
+
+ VBOX_VHWA_PENDINGCMD *pIter, *pNext;
+ RTListForEachSafe(&pThis->pendingVhwaCommands.PendingList, pIter, pNext, VBOX_VHWA_PENDINGCMD, Node)
+ {
+ if (!vbvaVHWACommandSubmit(pThis, pThisCC, pIter->pCommand, true))
+ {
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return false; /* the command should be still pending */
+ }
+
+ /* the command is submitted/processed, remove from the pend list */
+ RTListNodeRemove(&pIter->Node);
+ ASMAtomicDecU32(&pThis->pendingVhwaCommands.cPending);
+ RTMemFree(pIter);
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+
+ return true;
+}
+
+void vbvaTimerCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ vbvaVHWACheckPendingCommands(pDevIns, pThis, pThisCC);
+}
+
+static void vbvaVHWAHandleCommand(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd)
+{
+ if (vbvaVHWACheckPendingCommands(pDevIns, pThis, pThisCC))
+ {
+ if (vbvaVHWACommandSubmit(pThis, pThisCC, pCmd, false))
+ return;
+ }
+
+ vbvaVHWACommandPend(pDevIns, pThis, pThisCC, pCmd);
+}
+
+static DECLCALLBACK(void) vbvaVHWAHHCommandSetEventCallback(void * pContext)
+{
+ RTSemEventSignal((RTSEMEVENT)pContext);
+}
+
+static int vbvaVHWAHHCommandPost(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, VBOXVHWACMD *pCmd)
+{
+ RTSEMEVENT hComplEvent;
+ int rc = RTSemEventCreate(&hComplEvent);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ /* ensure the cmd is not deleted until we process it */
+ vbvaVHWAHHCommandRetain(pCmd);
+
+ VBOXVHWA_HH_CALLBACK_SET(pCmd, vbvaVHWAHHCommandSetEventCallback, (void *)hComplEvent);
+ vbvaVHWAHandleCommand(pDevIns, pThis, pThisCC, pCmd);
+
+ if ((ASMAtomicReadU32((volatile uint32_t *)&pCmd->Flags) & VBOXVHWACMD_FLAG_HG_ASYNCH) != 0)
+ rc = RTSemEventWaitNoResume(hComplEvent, RT_INDEFINITE_WAIT); /** @todo Why the NoResume and event leaking here? */
+ /* else: the command is completed */
+
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ RTSemEventDestroy(hComplEvent);
+
+ vbvaVHWAHHCommandRelease(pCmd);
+ }
+ return rc;
+}
+
+int vbvaVHWAConstruct(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ pThis->pendingVhwaCommands.cPending = 0;
+ RTListInit(&pThis->pendingVhwaCommands.PendingList);
+
+ VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(VBOXVHWACMD_TYPE_HH_CONSTRUCT, 0, sizeof(VBOXVHWACMD_HH_CONSTRUCT));
+ Assert(pCmd);
+ if(pCmd)
+ {
+ uint32_t iDisplay = 0;
+ int rc = VINF_SUCCESS;
+ VBOXVHWACMD_HH_CONSTRUCT *pBody = VBOXVHWACMD_BODY_HOST_HEAP(pCmd, VBOXVHWACMD_HH_CONSTRUCT);
+
+ for (;;)
+ {
+ memset(pBody, 0, sizeof(VBOXVHWACMD_HH_CONSTRUCT));
+
+ PVM pVM = PDMDevHlpGetVM(pDevIns);
+
+ pBody->pVM = pVM;
+ pBody->pvVRAM = pThisCC->pbVRam;
+ pBody->cbVRAM = pThis->vram_size;
+
+ rc = vbvaVHWAHHCommandPost(pDevIns, pThis, pThisCC, pCmd);
+ ASMCompilerBarrier();
+
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ rc = pCmd->rc;
+ AssertMsg(RT_SUCCESS(rc) || rc == VERR_NOT_IMPLEMENTED, ("%Rrc\n", rc));
+ if(rc == VERR_NOT_IMPLEMENTED)
+ {
+ /** @todo set some flag in pThis indicating VHWA is not supported */
+ /* VERR_NOT_IMPLEMENTED is not a failure, we just do not support it */
+ rc = VINF_SUCCESS;
+ }
+
+ if (!RT_SUCCESS(rc))
+ break;
+ }
+ else
+ break;
+
+ ++iDisplay;
+ if (iDisplay >= pThis->cMonitors)
+ break;
+ vbvaVHWAHHCommandReinit(pCmd, VBOXVHWACMD_TYPE_HH_CONSTRUCT, (int32_t)iDisplay);
+ }
+
+ vbvaVHWAHHCommandRelease(pCmd);
+
+ return rc;
+ }
+ return VERR_OUT_OF_RESOURCES;
+}
+
+static int vbvaVHWAReset(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ vbvaVHWACommandClearAllPending(pDevIns, pThis);
+
+ /* ensure we have all pending cmds processed and h->g cmds disabled */
+ VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(VBOXVHWACMD_TYPE_HH_RESET, 0, 0);
+ Assert(pCmd);
+ if (pCmd)
+ {
+ int rc = VINF_SUCCESS;
+ uint32_t iDisplay = 0;
+
+ do
+ {
+ rc = vbvaVHWAHHCommandPost(pDevIns, pThis, pThisCC, pCmd);
+ AssertRC(rc);
+ if(RT_SUCCESS(rc))
+ {
+ rc = pCmd->rc;
+ AssertMsg(RT_SUCCESS(rc) || rc == VERR_NOT_IMPLEMENTED, ("%Rrc\n", rc));
+ if (rc == VERR_NOT_IMPLEMENTED)
+ rc = VINF_SUCCESS;
+ }
+
+ if (!RT_SUCCESS(rc))
+ break;
+
+ ++iDisplay;
+ if (iDisplay >= pThis->cMonitors)
+ break;
+ vbvaVHWAHHCommandReinit(pCmd, VBOXVHWACMD_TYPE_HH_RESET, (int32_t)iDisplay);
+
+ } while (true);
+
+ vbvaVHWAHHCommandRelease(pCmd);
+
+ return rc;
+ }
+ return VERR_OUT_OF_RESOURCES;
+}
+
+typedef DECLCALLBACKTYPE(bool, FNVBOXVHWAHHCMDPRECB,(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, VBOXVHWACMD *pCmd,
+ uint32_t iDisplay, void *pvContext));
+typedef FNVBOXVHWAHHCMDPRECB *PFNVBOXVHWAHHCMDPRECB;
+
+typedef DECLCALLBACKTYPE(bool, FNVBOXVHWAHHCMDPOSTCB,(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, VBOXVHWACMD *pCmd,
+ uint32_t iDisplay, int rc, void *pvContext));
+typedef FNVBOXVHWAHHCMDPOSTCB *PFNVBOXVHWAHHCMDPOSTCB;
+
+static int vbvaVHWAHHPost(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, VBOXVHWACMD *pCmd,
+ PFNVBOXVHWAHHCMDPRECB pfnPre, PFNVBOXVHWAHHCMDPOSTCB pfnPost, void *pvContext)
+{
+ const VBOXVHWACMD_TYPE enmType = pCmd->enmCmd;
+ int rc = VINF_SUCCESS;
+ uint32_t iDisplay = 0;
+
+ do
+ {
+ if (!pfnPre || pfnPre(pDevIns, pThis, pThisCC, pCmd, iDisplay, pvContext))
+ {
+ rc = vbvaVHWAHHCommandPost(pDevIns, pThis, pThisCC, pCmd);
+ AssertRC(rc);
+ if (pfnPost)
+ {
+ if (!pfnPost(pDevIns, pThis, pThisCC, pCmd, iDisplay, rc, pvContext))
+ {
+ rc = VINF_SUCCESS;
+ break;
+ }
+ rc = VINF_SUCCESS;
+ }
+ else if(RT_SUCCESS(rc))
+ {
+ rc = pCmd->rc;
+ AssertMsg(RT_SUCCESS(rc) || rc == VERR_NOT_IMPLEMENTED, ("%Rrc\n", rc));
+ if(rc == VERR_NOT_IMPLEMENTED)
+ {
+ rc = VINF_SUCCESS;
+ }
+ }
+
+ if (!RT_SUCCESS(rc))
+ break;
+ }
+
+ ++iDisplay;
+ if (iDisplay >= pThis->cMonitors)
+ break;
+ vbvaVHWAHHCommandReinit(pCmd, enmType, (int32_t)iDisplay);
+ } while (true);
+
+ return rc;
+}
+
+/** @todo call this also on reset? */
+static int vbvaVHWAEnable(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, bool bEnable)
+{
+ const VBOXVHWACMD_TYPE enmType = bEnable ? VBOXVHWACMD_TYPE_HH_ENABLE : VBOXVHWACMD_TYPE_HH_DISABLE;
+ VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(enmType, 0, 0);
+ Assert(pCmd);
+ if(pCmd)
+ {
+ int rc = vbvaVHWAHHPost(pDevIns, pThis, pThisCC, pCmd, NULL, NULL, NULL);
+ vbvaVHWAHHCommandRelease(pCmd);
+ return rc;
+ }
+ return VERR_OUT_OF_RESOURCES;
+}
+
+int vboxVBVASaveStatePrep(PPDMDEVINS pDevIns)
+{
+ /* ensure we have no pending commands */
+ return vbvaVHWAEnable(pDevIns, PDMDEVINS_2_DATA(pDevIns, PVGASTATE), PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC), false);
+}
+
+int vboxVBVASaveStateDone(PPDMDEVINS pDevIns)
+{
+ /* ensure we have no pending commands */
+ return vbvaVHWAEnable(pDevIns, PDMDEVINS_2_DATA(pDevIns, PVGASTATE), PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC), true);
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYVBVACALLBACKS,pfnVHWACommandCompleteAsync}
+ */
+DECLCALLBACK(int) vbvaR3VHWACommandCompleteAsync(PPDMIDISPLAYVBVACALLBACKS pInterface,
+ VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IVBVACallbacks);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ int rc;
+
+ Log(("VGA Command <<< Async rc %d %#p, %d\n", pCmd->rc, pCmd, pCmd->enmCmd));
+
+ if ((uintptr_t)pCmd - (uintptr_t)pThisCC->pbVRam < pThis->vram_size)
+ {
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ Assert(!(pCmd->Flags & VBOXVHWACMD_FLAG_HH_CMD));
+ Assert(pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH);
+#ifdef VBOX_WITH_WDDM
+ if (pThis->fGuestCaps & VBVACAPS_COMPLETEGCMD_BY_IOREAD)
+ {
+ rc = HGSMICompleteGuestCommand(pIns, pCmd, !!(pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ));
+ AssertRC(rc);
+ }
+ else
+#endif
+ {
+ VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_GUEST *pHostCmd = NULL; /* Shut up MSC. */
+ if (pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_EVENT)
+ {
+ rc = HGSMIHostCommandAlloc(pIns,
+ (void RT_UNTRUSTED_VOLATILE_GUEST **)&pHostCmd,
+ VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDEVENT)),
+ HGSMI_CH_VBVA,
+ VBVAHG_EVENT);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ memset((void *)pHostCmd, 0 , VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDEVENT)));
+ pHostCmd->iDstID = pCmd->iDisplay;
+ pHostCmd->customOpCode = 0;
+ VBVAHOSTCMDEVENT RT_UNTRUSTED_VOLATILE_GUEST *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDEVENT);
+ pBody->pEvent = pCmd->GuestVBVAReserved1;
+ }
+ }
+ else
+ {
+ HGSMIOFFSET offCmd = HGSMIPointerToOffsetHost(pIns, pCmd);
+ Assert(offCmd != HGSMIOFFSET_VOID);
+ if (offCmd != HGSMIOFFSET_VOID)
+ {
+ rc = HGSMIHostCommandAlloc(pIns,
+ (void RT_UNTRUSTED_VOLATILE_GUEST **)&pHostCmd,
+ VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDVHWACMDCOMPLETE)),
+ HGSMI_CH_VBVA,
+ VBVAHG_DISPLAY_CUSTOM);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ memset((void *)pHostCmd, 0 , VBVAHOSTCMD_SIZE(sizeof(VBVAHOSTCMDVHWACMDCOMPLETE)));
+ pHostCmd->iDstID = pCmd->iDisplay;
+ pHostCmd->customOpCode = VBVAHG_DCUSTOM_VHWA_CMDCOMPLETE;
+ VBVAHOSTCMDVHWACMDCOMPLETE RT_UNTRUSTED_VOLATILE_GUEST *pBody
+ = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE);
+ pBody->offCmd = offCmd;
+ }
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ rc = HGSMIHostCommandSubmitAndFreeAsynch(pIns, pHostCmd, RT_BOOL(pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ));
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ return rc;
+
+ HGSMIHostCommandFree (pIns, pHostCmd);
+ }
+ }
+ }
+ else
+ {
+ Assert(pCmd->Flags & VBOXVHWACMD_FLAG_HH_CMD);
+ PFNVBOXVHWA_HH_CALLBACK pfn = VBOXVHWA_HH_CALLBACK_GET(pCmd);
+ if (pfn)
+ pfn(VBOXVHWA_HH_CALLBACK_GET_ARG(pCmd));
+ rc = VINF_SUCCESS;
+ }
+ return rc;
+}
+
+typedef struct VBOXVBVASAVEDSTATECBDATA
+{
+ PSSMHANDLE pSSM;
+ int rc;
+ bool ab2DOn[VBOX_VIDEO_MAX_SCREENS];
+} VBOXVBVASAVEDSTATECBDATA, *PVBOXVBVASAVEDSTATECBDATA;
+
+/**
+ * @callback_method_impl{FNVBOXVHWAHHCMDPOSTCB}
+ */
+static DECLCALLBACK(bool) vboxVBVASaveStateBeginPostCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD *pCmd, uint32_t iDisplay, int rc, void *pvContext)
+{
+ RT_NOREF(pDevIns, pThis, pThisCC, pCmd);
+ PVBOXVBVASAVEDSTATECBDATA pData = (PVBOXVBVASAVEDSTATECBDATA)pvContext;
+ if (RT_FAILURE(pData->rc))
+ return false;
+ if (RT_FAILURE(rc))
+ {
+ pData->rc = rc;
+ return false;
+ }
+
+ Assert(iDisplay < RT_ELEMENTS(pData->ab2DOn));
+ if (iDisplay >= RT_ELEMENTS(pData->ab2DOn))
+ {
+ pData->rc = VERR_INVALID_PARAMETER;
+ return false;
+ }
+
+ Assert(RT_SUCCESS(pCmd->rc) || pCmd->rc == VERR_NOT_IMPLEMENTED);
+ if (RT_SUCCESS(pCmd->rc))
+ {
+ pData->ab2DOn[iDisplay] = true;
+ }
+ else if (pCmd->rc != VERR_NOT_IMPLEMENTED)
+ {
+ pData->rc = pCmd->rc;
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * @callback_method_impl{FNVBOXVHWAHHCMDPRECB}
+ */
+static DECLCALLBACK(bool) vboxVBVASaveStatePerformPreCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext)
+{
+ RT_NOREF(pThis, pThisCC, pCmd);
+ PVBOXVBVASAVEDSTATECBDATA pData = (PVBOXVBVASAVEDSTATECBDATA)pvContext;
+ if (RT_FAILURE(pData->rc))
+ return false;
+
+ Assert(iDisplay < RT_ELEMENTS(pData->ab2DOn));
+ if (iDisplay >= RT_ELEMENTS(pData->ab2DOn))
+ {
+ pData->rc = VERR_INVALID_PARAMETER;
+ return false;
+ }
+
+ int rc;
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+
+ if (pData->ab2DOn[iDisplay])
+ {
+ rc = pHlp->pfnSSMPutU32(pData->pSSM, VBOXVBVASAVEDSTATE_VHWAAVAILABLE_MAGIC); AssertRC(rc);
+ if (RT_FAILURE(rc))
+ {
+ pData->rc = rc;
+ return false;
+ }
+ return true;
+ }
+
+ rc = pHlp->pfnSSMPutU32(pData->pSSM, VBOXVBVASAVEDSTATE_VHWAUNAVAILABLE_MAGIC); AssertRC(rc);
+ if (RT_FAILURE(rc))
+ {
+ pData->rc = rc;
+ return false;
+ }
+
+ return false;
+}
+
+/**
+ * @callback_method_impl{FNVBOXVHWAHHCMDPOSTCB}
+ */
+static DECLCALLBACK(bool) vboxVBVASaveStateEndPreCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext)
+{
+ RT_NOREF(pDevIns, pThis, pThisCC, pCmd);
+ PVBOXVBVASAVEDSTATECBDATA pData = (PVBOXVBVASAVEDSTATECBDATA)pvContext;
+ Assert(iDisplay < RT_ELEMENTS(pData->ab2DOn));
+ if (pData->ab2DOn[iDisplay])
+ return true;
+ return false;
+}
+
+/**
+ * @callback_method_impl{FNVBOXVHWAHHCMDPOSTCB}
+ */
+static DECLCALLBACK(bool) vboxVBVALoadStatePerformPostCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD *pCmd, uint32_t iDisplay, int rc, void *pvContext)
+{
+ RT_NOREF(pThis, pThisCC, pCmd);
+ PVBOXVBVASAVEDSTATECBDATA pData = (PVBOXVBVASAVEDSTATECBDATA)pvContext;
+ if (RT_FAILURE(pData->rc))
+ return false;
+ if (RT_FAILURE(rc))
+ {
+ pData->rc = rc;
+ return false;
+ }
+
+ Assert(iDisplay < RT_ELEMENTS(pData->ab2DOn));
+ if (iDisplay >= RT_ELEMENTS(pData->ab2DOn))
+ {
+ pData->rc = VERR_INVALID_PARAMETER;
+ return false;
+ }
+
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ Assert(RT_SUCCESS(pCmd->rc) || pCmd->rc == VERR_NOT_IMPLEMENTED);
+ if (pCmd->rc == VERR_NOT_IMPLEMENTED)
+ {
+ pData->rc = pHlp->pfnSSMSkipToEndOfUnit(pData->pSSM);
+ AssertRC(pData->rc);
+ return false;
+ }
+ if (RT_FAILURE(pCmd->rc))
+ {
+ pData->rc = pCmd->rc;
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * @callback_method_impl{FNVBOXVHWAHHCMDPOSTCB}
+ */
+static DECLCALLBACK(bool) vboxVBVALoadStatePerformPreCb(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext)
+{
+ RT_NOREF(pThis, pThisCC, pCmd);
+ PVBOXVBVASAVEDSTATECBDATA pData = (PVBOXVBVASAVEDSTATECBDATA)pvContext;
+ if (RT_FAILURE(pData->rc))
+ return false;
+
+ Assert(iDisplay < RT_ELEMENTS(pData->ab2DOn));
+ if (iDisplay >= RT_ELEMENTS(pData->ab2DOn))
+ {
+ pData->rc = VERR_INVALID_PARAMETER;
+ return false;
+ }
+
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+ uint32_t u32;
+ rc = pHlp->pfnSSMGetU32(pData->pSSM, &u32); AssertRC(rc);
+ if (RT_FAILURE(rc))
+ {
+ pData->rc = rc;
+ return false;
+ }
+
+ switch (u32)
+ {
+ case VBOXVBVASAVEDSTATE_VHWAAVAILABLE_MAGIC:
+ pData->ab2DOn[iDisplay] = true;
+ return true;
+ case VBOXVBVASAVEDSTATE_VHWAUNAVAILABLE_MAGIC:
+ pData->ab2DOn[iDisplay] = false;
+ return false;
+ default:
+ pData->rc = VERR_INVALID_STATE;
+ return false;
+ }
+}
+
+#endif /* VBOX_WITH_VIDEOHWACCEL */
+
+static int vboxVBVASaveDevStateExec(PCPDMDEVHLPR3 pHlp, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM)
+{
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ int rc = HGSMIHostSaveStateExec(pHlp, pIns, pSSM);
+ if (RT_SUCCESS(rc))
+ {
+ VGA_SAVED_STATE_PUT_MARKER(pSSM, 2);
+
+ /* Save VBVACONTEXT. */
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pIns);
+
+ if (!pCtx)
+ {
+ AssertFailed();
+
+ /* Still write a valid value to the SSM. */
+ rc = pHlp->pfnSSMPutU32 (pSSM, 0);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+#ifdef DEBUG_sunlover
+ dumpctx(pCtx);
+#endif
+
+ rc = pHlp->pfnSSMPutU32 (pSSM, pCtx->cViews);
+ AssertRCReturn(rc, rc);
+
+ uint32_t iView;
+ for (iView = 0; iView < pCtx->cViews; iView++)
+ {
+ VBVAVIEW *pView = &pCtx->aViews[iView];
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->view.u32ViewIndex);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->view.u32ViewOffset);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->view.u32ViewSize);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->view.u32MaxScreenSize);
+ AssertRCReturn(rc, rc);
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->screen.u32ViewIndex);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutS32(pSSM, pView->screen.i32OriginX);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutS32(pSSM, pView->screen.i32OriginY);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->screen.u32StartOffset);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->screen.u32LineSize);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->screen.u32Width);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->screen.u32Height);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU16(pSSM, pView->screen.u16BitsPerPixel);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU16(pSSM, pView->screen.u16Flags);
+ AssertRCReturn(rc, rc);
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->vbva.guest.pVBVA? pView->vbva.u32VBVAOffset: HGSMIOFFSET_VOID);
+ AssertRCReturn(rc, rc);
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pView->vbva.partialRecord.cb);
+ AssertRCReturn(rc, rc);
+
+ if (pView->vbva.partialRecord.cb > 0)
+ {
+ rc = pHlp->pfnSSMPutMem(pSSM, pView->vbva.partialRecord.pu8, pView->vbva.partialRecord.cb);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* Save mouse pointer shape information. */
+ rc = pHlp->pfnSSMPutBool(pSSM, pCtx->mouseShapeInfo.fSet);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutBool(pSSM, pCtx->mouseShapeInfo.fVisible);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutBool(pSSM, pCtx->mouseShapeInfo.fAlpha);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pCtx->mouseShapeInfo.u32HotX);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pCtx->mouseShapeInfo.u32HotY);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pCtx->mouseShapeInfo.u32Width);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pCtx->mouseShapeInfo.u32Height);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pCtx->mouseShapeInfo.cbShape);
+ AssertRCReturn(rc, rc);
+ if (pCtx->mouseShapeInfo.cbShape)
+ {
+ rc = pHlp->pfnSSMPutMem(pSSM, pCtx->mouseShapeInfo.pu8Shape, pCtx->mouseShapeInfo.cbShape);
+ AssertRCReturn(rc, rc);
+ }
+
+#ifdef VBOX_WITH_WDDM
+ /* Size of some additional data. For future extensions. */
+ rc = pHlp->pfnSSMPutU32(pSSM, 4);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, pThis->fGuestCaps);
+ AssertRCReturn(rc, rc);
+#else
+ /* Size of some additional data. For future extensions. */
+ rc = pHlp->pfnSSMPutU32(pSSM, 0);
+ AssertRCReturn(rc, rc);
+#endif
+ rc = pHlp->pfnSSMPutU32(pSSM, RT_ELEMENTS(pCtx->aModeHints));
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMPutU32(pSSM, sizeof(VBVAMODEHINT));
+ AssertRCReturn(rc, rc);
+ for (unsigned i = 0; i < RT_ELEMENTS(pCtx->aModeHints); ++i)
+ {
+ rc = pHlp->pfnSSMPutMem(pSSM, &pCtx->aModeHints[i], sizeof(VBVAMODEHINT));
+ AssertRCReturn(rc, rc);
+ }
+ }
+ }
+
+ return rc;
+}
+
+int vboxVBVASaveStateExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc;
+#ifdef VBOX_WITH_VIDEOHWACCEL
+ VBOXVBVASAVEDSTATECBDATA VhwaData = {0};
+ VhwaData.pSSM = pSSM;
+ uint32_t cbCmd = sizeof (VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM); /* maximum cmd size */
+ VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEBEGIN, 0, cbCmd);
+ Assert(pCmd);
+ if (pCmd)
+ {
+ vbvaVHWAHHPost(pDevIns, pThis, pThisCC, pCmd, NULL, vboxVBVASaveStateBeginPostCb, &VhwaData);
+ rc = VhwaData.rc;
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+#endif
+ rc = vboxVBVASaveDevStateExec(pHlp, pThis, pThisCC, pSSM);
+ AssertRC(rc);
+#ifdef VBOX_WITH_VIDEOHWACCEL
+ if (RT_SUCCESS(rc))
+ {
+ vbvaVHWAHHCommandReinit(pCmd, VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEPERFORM, 0);
+ VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM *pSave = VBOXVHWACMD_BODY_HOST_HEAP(pCmd, VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM);
+ pSave->pSSM = pSSM;
+ vbvaVHWAHHPost(pDevIns, pThis, pThisCC, pCmd, vboxVBVASaveStatePerformPreCb, NULL, &VhwaData);
+ rc = VhwaData.rc;
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ rc = vbvaVHWACommandSavePending(pHlp, pThis, pThisCC, pSSM);
+ AssertRCReturn(rc, rc);
+
+ vbvaVHWAHHCommandReinit(pCmd, VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEEND, 0);
+ vbvaVHWAHHPost(pDevIns, pThis, pThisCC, pCmd, vboxVBVASaveStateEndPreCb, NULL, &VhwaData);
+ rc = VhwaData.rc;
+ AssertRC(rc);
+ }
+ }
+ }
+
+ vbvaVHWAHHCommandRelease(pCmd);
+ }
+ else
+ rc = VERR_OUT_OF_RESOURCES;
+#else
+ if (RT_SUCCESS(rc))
+ {
+ for (uint32_t i = 0; i < pThis->cMonitors; ++i)
+ {
+ rc = pHlp->pfnSSMPutU32(pSSM, VBOXVBVASAVEDSTATE_VHWAUNAVAILABLE_MAGIC);
+ AssertRCReturn(rc, rc);
+ }
+ }
+
+ /* no pending commands */
+ pHlp->pfnSSMPutU32(pSSM, 0);
+#endif
+ return rc;
+}
+
+int vboxVBVALoadStateExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion)
+{
+ if (uVersion < VGA_SAVEDSTATE_VERSION_HGSMI)
+ {
+ /* Nothing was saved. */
+ return VINF_SUCCESS;
+ }
+
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ PCPDMDEVHLPR3 pHlp = pDevIns->pHlpR3;
+ int rc = HGSMIHostLoadStateExec(pHlp, pIns, pSSM, uVersion);
+ if (RT_SUCCESS(rc))
+ {
+ VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pSSM, uVersion, 2);
+
+ /* Load VBVACONTEXT. */
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pIns);
+
+ if (!pCtx)
+ {
+ /* This should not happen. */
+ AssertFailed();
+ rc = VERR_INVALID_PARAMETER;
+ }
+ else
+ {
+ uint32_t cViews = 0;
+ rc = pHlp->pfnSSMGetU32 (pSSM, &cViews);
+ AssertRCReturn(rc, rc);
+
+ uint32_t iView;
+ for (iView = 0; iView < cViews; iView++)
+ {
+ VBVAVIEW *pView = &pCtx->aViews[iView];
+
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->view.u32ViewIndex);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->view.u32ViewOffset);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->view.u32ViewSize);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->view.u32MaxScreenSize);
+ AssertRCReturn(rc, rc);
+
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->screen.u32ViewIndex);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetS32 (pSSM, &pView->screen.i32OriginX);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetS32 (pSSM, &pView->screen.i32OriginY);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->screen.u32StartOffset);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->screen.u32LineSize);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->screen.u32Width);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->screen.u32Height);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU16 (pSSM, &pView->screen.u16BitsPerPixel);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU16 (pSSM, &pView->screen.u16Flags);
+ AssertRCReturn(rc, rc);
+
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->vbva.u32VBVAOffset);
+ AssertRCReturn(rc, rc);
+
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pView->vbva.partialRecord.cb);
+ AssertRCReturn(rc, rc);
+
+ if (pView->vbva.partialRecord.cb == 0)
+ {
+ pView->vbva.partialRecord.pu8 = NULL;
+ }
+ else
+ {
+ Assert(pView->vbva.partialRecord.pu8 == NULL); /* Should be it. */
+
+ uint8_t *pu8 = (uint8_t *)RTMemAlloc(pView->vbva.partialRecord.cb);
+
+ if (!pu8)
+ {
+ return VERR_NO_MEMORY;
+ }
+
+ pView->vbva.partialRecord.pu8 = pu8;
+
+ rc = pHlp->pfnSSMGetMem (pSSM, pView->vbva.partialRecord.pu8, pView->vbva.partialRecord.cb);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (pView->vbva.u32VBVAOffset == HGSMIOFFSET_VOID)
+ {
+ pView->vbva.guest.pVBVA = NULL;
+ }
+ else
+ {
+ pView->vbva.guest.pVBVA = (VBVABUFFER *)HGSMIOffsetToPointerHost(pIns, pView->vbva.u32VBVAOffset);
+ }
+ }
+
+ if (uVersion > VGA_SAVEDSTATE_VERSION_WITH_CONFIG)
+ {
+ /* Read mouse pointer shape information. */
+ rc = pHlp->pfnSSMGetBool (pSSM, &pCtx->mouseShapeInfo.fSet);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetBool (pSSM, &pCtx->mouseShapeInfo.fVisible);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetBool (pSSM, &pCtx->mouseShapeInfo.fAlpha);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pCtx->mouseShapeInfo.u32HotX);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pCtx->mouseShapeInfo.u32HotY);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pCtx->mouseShapeInfo.u32Width);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pCtx->mouseShapeInfo.u32Height);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pCtx->mouseShapeInfo.cbShape);
+ AssertRCReturn(rc, rc);
+ if (pCtx->mouseShapeInfo.cbShape)
+ {
+ pCtx->mouseShapeInfo.pu8Shape = (uint8_t *)RTMemAlloc(pCtx->mouseShapeInfo.cbShape);
+ if (pCtx->mouseShapeInfo.pu8Shape == NULL)
+ {
+ return VERR_NO_MEMORY;
+ }
+ pCtx->mouseShapeInfo.cbAllocated = pCtx->mouseShapeInfo.cbShape;
+ rc = pHlp->pfnSSMGetMem (pSSM, pCtx->mouseShapeInfo.pu8Shape, pCtx->mouseShapeInfo.cbShape);
+ AssertRCReturn(rc, rc);
+ }
+ else
+ {
+ pCtx->mouseShapeInfo.pu8Shape = NULL;
+ }
+
+ /* Size of some additional data. For future extensions. */
+ uint32_t cbExtra = 0;
+ rc = pHlp->pfnSSMGetU32 (pSSM, &cbExtra);
+ AssertRCReturn(rc, rc);
+#ifdef VBOX_WITH_WDDM
+ if (cbExtra >= 4)
+ {
+ rc = pHlp->pfnSSMGetU32 (pSSM, &pThis->fGuestCaps);
+ AssertRCReturn(rc, rc);
+ pThisCC->pDrv->pfnVBVAGuestCapabilityUpdate(pThisCC->pDrv, pThis->fGuestCaps);
+ cbExtra -= 4;
+ }
+#endif
+ if (cbExtra > 0)
+ {
+ rc = pHlp->pfnSSMSkip(pSSM, cbExtra);
+ AssertRCReturn(rc, rc);
+ }
+
+ if (uVersion >= VGA_SAVEDSTATE_VERSION_MODE_HINTS)
+ {
+ uint32_t cModeHints, cbModeHints;
+ rc = pHlp->pfnSSMGetU32 (pSSM, &cModeHints);
+ AssertRCReturn(rc, rc);
+ rc = pHlp->pfnSSMGetU32 (pSSM, &cbModeHints);
+ AssertRCReturn(rc, rc);
+ memset(&pCtx->aModeHints, ~0, sizeof(pCtx->aModeHints));
+ unsigned iHint;
+ for (iHint = 0; iHint < cModeHints; ++iHint)
+ {
+ if ( cbModeHints <= sizeof(VBVAMODEHINT)
+ && iHint < RT_ELEMENTS(pCtx->aModeHints))
+ rc = pHlp->pfnSSMGetMem(pSSM, &pCtx->aModeHints[iHint],
+ cbModeHints);
+ else
+ rc = pHlp->pfnSSMSkip(pSSM, cbModeHints);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ }
+
+ pCtx->cViews = iView;
+ LogFlowFunc(("%d views loaded\n", pCtx->cViews));
+
+ if (uVersion > VGA_SAVEDSTATE_VERSION_WDDM)
+ {
+ bool fLoadCommands;
+
+ if (uVersion < VGA_SAVEDSTATE_VERSION_FIXED_PENDVHWA)
+ {
+ const char *pcszOsArch = pHlp->pfnSSMHandleHostOSAndArch(pSSM);
+ Assert(pcszOsArch);
+ fLoadCommands = !pcszOsArch || RTStrNCmp(pcszOsArch, RT_STR_TUPLE("solaris"));
+ }
+ else
+ fLoadCommands = true;
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+ uint32_t cbCmd = sizeof (VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM); /* maximum cmd size */
+ VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(VBOXVHWACMD_TYPE_HH_SAVESTATE_LOADPERFORM, 0, cbCmd);
+ Assert(pCmd);
+ if(pCmd)
+ {
+ VBOXVBVASAVEDSTATECBDATA VhwaData = {0};
+ VhwaData.pSSM = pSSM;
+ VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM *pLoad = VBOXVHWACMD_BODY_HOST_HEAP(pCmd, VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM);
+ pLoad->pSSM = pSSM;
+ vbvaVHWAHHPost(pDevIns, pThis, pThisCC, pCmd, vboxVBVALoadStatePerformPreCb,
+ vboxVBVALoadStatePerformPostCb, &VhwaData);
+ rc = VhwaData.rc;
+ vbvaVHWAHHCommandRelease(pCmd);
+ AssertRCReturn(rc, rc);
+
+ if (fLoadCommands)
+ {
+ rc = vbvaVHWACommandLoadPending(pDevIns, pHlp, pThis, pThisCC, pSSM, uVersion);
+ AssertRCReturn(rc, rc);
+ }
+ }
+ else
+ {
+ rc = VERR_OUT_OF_RESOURCES;
+ }
+#else
+ uint32_t u32;
+
+ for (uint32_t i = 0; i < pThis->cMonitors; ++i)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+
+ if (u32 != VBOXVBVASAVEDSTATE_VHWAUNAVAILABLE_MAGIC)
+ {
+ LogRel(("VBVA: 2D data while 2D is not supported\n"));
+ return VERR_NOT_SUPPORTED;
+ }
+ }
+
+ if (fLoadCommands)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertRCReturn(rc, rc);
+
+ if (u32)
+ {
+ LogRel(("VBVA: 2D pending command while 2D is not supported\n"));
+ return VERR_NOT_SUPPORTED;
+ }
+ }
+#endif
+ }
+
+#ifdef DEBUG_sunlover
+ dumpctx(pCtx);
+#endif
+ }
+ }
+
+ return rc;
+}
+
+int vboxVBVALoadStateDone(PPDMDEVINS pDevIns)
+{
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ if (pCtx)
+ {
+ uint32_t iView;
+ for (iView = 0; iView < pCtx->cViews; iView++)
+ {
+ VBVAVIEW *pView = &pCtx->aViews[iView];
+ if (pView->vbva.guest.pVBVA)
+ {
+ int rc = vbvaEnable(pThis, pThisCC, pCtx, iView, pView->vbva.guest.pVBVA,
+ pView->vbva.u32VBVAOffset, true /* fRestored */);
+ if (RT_SUCCESS(rc))
+ vbvaResize(pThisCC, pView, &pView->screen, false);
+ else
+ LogRel(("VBVA: can not restore: %Rrc\n", rc));
+ }
+ }
+
+ if (pCtx->mouseShapeInfo.fSet)
+ vbvaUpdateMousePointerShape(pThisCC, &pCtx->mouseShapeInfo, true);
+ }
+
+ return VINF_SUCCESS;
+}
+
+void VBVARaiseIrq(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t fFlags)
+{
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSectIRQ, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSectIRQ, rcLock);
+
+ const uint32_t fu32CurrentGuestFlags = HGSMIGetHostGuestFlags(pThisCC->pHGSMI);
+ if ((fu32CurrentGuestFlags & HGSMIHOSTFLAGS_IRQ) == 0)
+ {
+ /* No IRQ set yet. */
+ Assert(pThis->fu32PendingGuestFlags == 0);
+
+ HGSMISetHostGuestFlags(pThisCC->pHGSMI, HGSMIHOSTFLAGS_IRQ | fFlags);
+
+ /* If VM is not running, the IRQ will be set in VBVAOnResume. */
+ const VMSTATE enmVMState = PDMDevHlpVMState(pDevIns);
+ if ( enmVMState == VMSTATE_RUNNING
+ || enmVMState == VMSTATE_RUNNING_LS)
+ PDMDevHlpPCISetIrqNoWait(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
+ }
+ else
+ {
+ /* IRQ already set, remember the new flags. */
+ pThis->fu32PendingGuestFlags |= HGSMIHOSTFLAGS_IRQ | fFlags;
+ }
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSectIRQ);
+}
+
+void VBVAOnResume(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ int const rcLock = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSectIRQ, VERR_SEM_BUSY);
+ PDM_CRITSECT_RELEASE_ASSERT_RC_DEV(pDevIns, &pThis->CritSectIRQ, rcLock);
+
+ if (HGSMIGetHostGuestFlags(pThisCC->pHGSMI) & HGSMIHOSTFLAGS_IRQ)
+ PDMDevHlpPCISetIrqNoWait(pDevIns, 0, PDM_IRQ_LEVEL_HIGH);
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSectIRQ);
+}
+
+static int vbvaHandleQueryConf32(PVGASTATECC pThisCC, VBVACONF32 RT_UNTRUSTED_VOLATILE_GUEST *pConf32)
+{
+ uint32_t const idxQuery = pConf32->u32Index;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ LogFlowFunc(("VBVA_QUERY_CONF32: u32Index %d, u32Value 0x%x\n", idxQuery, pConf32->u32Value));
+
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ uint32_t uValue;
+ if (idxQuery == VBOX_VBVA_CONF32_MONITOR_COUNT)
+ uValue = pCtx->cViews;
+ else if (idxQuery == VBOX_VBVA_CONF32_HOST_HEAP_SIZE)
+ uValue = _64K; /** @todo a value calculated from the vram size */
+ else if ( idxQuery == VBOX_VBVA_CONF32_MODE_HINT_REPORTING
+ || idxQuery == VBOX_VBVA_CONF32_GUEST_CURSOR_REPORTING)
+ uValue = VINF_SUCCESS;
+ else if (idxQuery == VBOX_VBVA_CONF32_CURSOR_CAPABILITIES)
+ uValue = VBOX_VBVA_CURSOR_CAPABILITY_HARDWARE;
+ else if (idxQuery == VBOX_VBVA_CONF32_SCREEN_FLAGS)
+ uValue = VBVA_SCREEN_F_ACTIVE
+ | VBVA_SCREEN_F_DISABLED
+ | VBVA_SCREEN_F_BLANK
+ | VBVA_SCREEN_F_BLANK2;
+ else if (idxQuery == VBOX_VBVA_CONF32_MAX_RECORD_SIZE)
+ uValue = VBVA_MAX_RECORD_SIZE;
+ else if (idxQuery == UINT32_MAX)
+ uValue = UINT32_MAX; /* Older GA uses this for sanity checking. See testQueryConf in HGSMIBase.cpp on branches. */
+ else
+ ASSERT_GUEST_MSG_FAILED_RETURN(("Invalid index %#x\n", idxQuery), VERR_INVALID_PARAMETER);
+
+ pConf32->u32Value = uValue;
+ return VINF_SUCCESS;
+}
+
+static int vbvaHandleSetConf32(VBVACONF32 RT_UNTRUSTED_VOLATILE_GUEST *pConf32)
+{
+ uint32_t const idxQuery = pConf32->u32Index;
+ uint32_t const uValue = pConf32->u32Value;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ LogFlowFunc(("VBVA_SET_CONF32: u32Index %d, u32Value 0x%x\n", idxQuery, uValue));
+
+ if (idxQuery == VBOX_VBVA_CONF32_MONITOR_COUNT)
+ { /* do nothing. this is a const. */ }
+ else if (idxQuery == VBOX_VBVA_CONF32_HOST_HEAP_SIZE)
+ { /* do nothing. this is a const. */ }
+ else
+ ASSERT_GUEST_MSG_FAILED_RETURN(("Invalid index %#x (value=%u)\n", idxQuery, uValue), VERR_INVALID_PARAMETER);
+
+ RT_NOREF_PV(uValue);
+ return VINF_SUCCESS;
+}
+
+static int vbvaHandleInfoHeap(PVGASTATECC pThisCC, const VBVAINFOHEAP RT_UNTRUSTED_VOLATILE_GUEST *pInfoHeap)
+{
+ uint32_t const offHeap = pInfoHeap->u32HeapOffset;
+ uint32_t const cbHeap = pInfoHeap->u32HeapSize;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ LogFlowFunc(("VBVA_INFO_HEAP: offset 0x%x, size 0x%x\n", offHeap, cbHeap));
+
+ return HGSMIHostHeapSetup(pThisCC->pHGSMI, offHeap, cbHeap);
+}
+
+static int vbvaInfoView(PVGASTATE pThis, PVGASTATER3 pThisCC, const VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_GUEST *pView)
+{
+ VBVAINFOVIEW view;
+ RT_COPY_VOLATILE(view, *pView);
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ LogFlowFunc(("VBVA_INFO_VIEW: u32ViewIndex %d, u32ViewOffset 0x%x, u32ViewSize 0x%x, u32MaxScreenSize 0x%x\n",
+ view.u32ViewIndex, view.u32ViewOffset, view.u32ViewSize, view.u32MaxScreenSize));
+
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ ASSERT_GUEST_LOGREL_MSG_RETURN( view.u32ViewIndex < pCtx->cViews
+ && view.u32ViewOffset <= pThis->vram_size
+ && view.u32ViewSize <= pThis->vram_size
+ && view.u32ViewOffset <= pThis->vram_size - view.u32ViewSize
+ && view.u32MaxScreenSize <= view.u32ViewSize,
+ ("index %d(%d), offset 0x%x, size 0x%x, max 0x%x, vram size 0x%x\n",
+ view.u32ViewIndex, pCtx->cViews, view.u32ViewOffset, view.u32ViewSize,
+ view.u32MaxScreenSize, pThis->vram_size),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pCtx->aViews[view.u32ViewIndex].view = view;
+ return VINF_SUCCESS;
+}
+
+static int vbvaInfoScreen(PVGASTATECC pThisCC, const VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_GUEST *pScreen)
+{
+ /*
+ * Copy input into non-volatile buffer.
+ */
+ VBVAINFOSCREEN screen;
+ RT_COPY_VOLATILE(screen, *pScreen);
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ LogRel2(("VBVA: InfoScreen: [%d] @%d,%d %dx%d, line 0x%x, BPP %d, flags 0x%x\n",
+ screen.u32ViewIndex, screen.i32OriginX, screen.i32OriginY,
+ screen.u32Width, screen.u32Height,
+ screen.u32LineSize, screen.u16BitsPerPixel, screen.u16Flags));
+
+ /*
+ * Validate input.
+ */
+ /* Allow screen.u16BitsPerPixel == 0 because legacy guest code used it for screen blanking. */
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ ASSERT_GUEST_LOGREL_MSG_RETURN(screen.u32ViewIndex < pCtx->cViews,
+ ("Screen index %#x is out of bound (cViews=%#x)\n", screen.u32ViewIndex, pCtx->cViews),
+ VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_LOGREL_MSG_RETURN( screen.u16BitsPerPixel <= 32
+ && screen.u32Width <= UINT16_MAX
+ && screen.u32Height <= UINT16_MAX
+ && screen.u32LineSize <= UINT16_MAX * UINT32_C(4),
+ ("One or more values out of range: u16BitsPerPixel=%#x u32Width=%#x u32Height=%#x u32LineSize=%#x\n",
+ screen.u16BitsPerPixel, screen.u32Width, screen.u32Height, screen.u32LineSize),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ const VBVAINFOVIEW *pView = &pCtx->aViews[screen.u32ViewIndex].view;
+ const uint32_t cbPerPixel = (screen.u16BitsPerPixel + 7) / 8;
+ ASSERT_GUEST_LOGREL_MSG_RETURN(screen.u32Width <= screen.u32LineSize / (cbPerPixel ? cbPerPixel : 1),
+ ("u32Width=%#x u32LineSize=%3x cbPerPixel=%#x\n",
+ screen.u32Width, screen.u32LineSize, cbPerPixel),
+ VERR_INVALID_PARAMETER);
+
+ const uint64_t u64ScreenSize = (uint64_t)screen.u32LineSize * screen.u32Height;
+
+ ASSERT_GUEST_LOGREL_MSG_RETURN( screen.u32StartOffset <= pView->u32ViewSize
+ && u64ScreenSize <= pView->u32MaxScreenSize
+ && screen.u32StartOffset <= pView->u32ViewSize - (uint32_t)u64ScreenSize,
+ ("u32StartOffset=%#x u32ViewSize=%#x u64ScreenSize=%#RX64 u32MaxScreenSize=%#x\n",
+ screen.u32StartOffset, pView->u32ViewSize, u64ScreenSize, pView->u32MaxScreenSize),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Do the job.
+ */
+ vbvaResize(pThisCC, &pCtx->aViews[screen.u32ViewIndex], &screen, true);
+ return VINF_SUCCESS;
+}
+
+#ifdef UNUSED_FUNCTION
+int VBVAGetInfoViewAndScreen(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t u32ViewIndex, VBVAINFOVIEW *pView, VBVAINFOSCREEN *pScreen)
+{
+ if (u32ViewIndex >= pThis->cMonitors)
+ return VERR_INVALID_PARAMETER;
+
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pIns);
+
+ if (pView)
+ *pView = pCtx->aViews[u32ViewIndex].view;
+
+ if (pScreen)
+ *pScreen = pCtx->aViews[u32ViewIndex].screen;
+
+ return VINF_SUCCESS;
+}
+#endif
+
+static int vbvaHandleEnable(PVGASTATE pThis, PVGASTATER3 pThisCC, uint32_t fEnableFlags, uint32_t offEnable, uint32_t idScreen)
+{
+ LogFlowFunc(("VBVA_ENABLE[%u]: fEnableFlags=0x%x offEnable=%#x\n", idScreen, fEnableFlags, offEnable));
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pIns);
+
+ /*
+ * Validate input.
+ */
+ ASSERT_GUEST_LOGREL_MSG_RETURN(idScreen < pCtx->cViews, ("idScreen=%#x cViews=%#x\n", idScreen, pCtx->cViews), VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_LOGREL_MSG_RETURN( (fEnableFlags & (VBVA_F_ENABLE | VBVA_F_DISABLE)) == VBVA_F_ENABLE
+ || (fEnableFlags & (VBVA_F_ENABLE | VBVA_F_DISABLE)) == VBVA_F_DISABLE,
+ ("fEnableFlags=%#x\n", fEnableFlags),
+ VERR_INVALID_PARAMETER);
+ if (fEnableFlags & VBVA_F_ENABLE)
+ {
+ ASSERT_GUEST_LOGREL_MSG_RETURN(offEnable < pThis->vram_size,
+ ("offEnable=%#x vram_size=%#x\n", offEnable, pThis->vram_size),
+ VERR_INVALID_PARAMETER);
+ if (fEnableFlags & VBVA_F_ABSOFFSET)
+ /* Offset from VRAM start. */
+ ASSERT_GUEST_LOGREL_MSG_RETURN( pThis->vram_size >= RT_UOFFSETOF(VBVABUFFER, au8Data)
+ && offEnable <= pThis->vram_size - RT_UOFFSETOF(VBVABUFFER, au8Data),
+ ("offEnable=%#x vram_size=%#x\n", offEnable, pThis->vram_size),
+ VERR_INVALID_PARAMETER);
+ else
+ {
+ /* Offset from the view start. We'd be using idScreen here to fence required. */
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ const VBVAINFOVIEW *pView = &pCtx->aViews[idScreen].view;
+ ASSERT_GUEST_LOGREL_MSG_RETURN( pThis->vram_size - offEnable >= pView->u32ViewOffset
+ && pView->u32ViewSize >= RT_UOFFSETOF(VBVABUFFER, au8Data)
+ && offEnable <= pView->u32ViewSize - RT_UOFFSETOF(VBVABUFFER, au8Data),
+ ("offEnable=%#x vram_size=%#x view: %#x LB %#x\n",
+ offEnable, pThis->vram_size, pView->u32ViewOffset, pView->u32ViewSize),
+ VERR_INVALID_PARAMETER);
+ offEnable += pView->u32ViewOffset;
+ }
+ ASSERT_GUEST_LOGREL_MSG_RETURN(HGSMIIsOffsetValid(pIns, offEnable),
+ ("offEnable=%#x area %#x LB %#x\n",
+ offEnable, HGSMIGetAreaOffset(pIns), HGSMIGetAreaSize(pIns)),
+ VERR_INVALID_PARAMETER);
+ }
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Execute.
+ */
+ int rc = VINF_SUCCESS;
+ if (fEnableFlags & VBVA_F_ENABLE)
+ {
+ VBVABUFFER RT_UNTRUSTED_VOLATILE_GUEST *pVBVA
+ = (VBVABUFFER RT_UNTRUSTED_VOLATILE_GUEST *)HGSMIOffsetToPointerHost(pIns, offEnable);
+ ASSERT_GUEST_LOGREL_RETURN(pVBVA, VERR_INVALID_PARAMETER); /* already check above, but let's be careful. */
+
+ /* Process any pending orders and empty the VBVA ring buffer. */
+ vbvaFlush(pThis, pThisCC, pCtx);
+
+ rc = vbvaEnable(pThis, pThisCC, pCtx, idScreen, pVBVA, offEnable, false /* fRestored */);
+ if (RT_FAILURE(rc))
+ LogRelMax(8, ("VBVA: can not enable: %Rrc\n", rc));
+ }
+ else
+ rc = vbvaDisable(pThis, pThisCC, pCtx, idScreen);
+ return rc;
+}
+
+static int vbvaHandleQueryModeHints(PVGASTATECC pThisCC, VBVAQUERYMODEHINTS volatile *pQueryModeHints, HGSMISIZE cbBuffer)
+{
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pIns);
+
+ /*
+ * Copy and validate the request.
+ */
+ uint16_t const cHintsQueried = pQueryModeHints->cHintsQueried;
+ uint16_t const cbHintStructureGuest = pQueryModeHints->cbHintStructureGuest;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ LogRelFlowFunc(("VBVA: HandleQueryModeHints: cHintsQueried=%RU16, cbHintStructureGuest=%RU16\n",
+ cHintsQueried, cbHintStructureGuest));
+ ASSERT_GUEST_RETURN(cbBuffer >= sizeof(VBVAQUERYMODEHINTS) + (uint32_t)cHintsQueried * cbHintStructureGuest,
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Produce the requested data.
+ */
+ uint8_t *pbHint = (uint8_t *)(pQueryModeHints + 1);
+ memset(pbHint, ~0, cbBuffer - sizeof(VBVAQUERYMODEHINTS));
+
+ for (unsigned iHint = 0; iHint < cHintsQueried && iHint < VBOX_VIDEO_MAX_SCREENS; ++iHint)
+ {
+ memcpy(pbHint, &pCtx->aModeHints[iHint], RT_MIN(cbHintStructureGuest, sizeof(VBVAMODEHINT)));
+ pbHint += cbHintStructureGuest;
+ Assert((uintptr_t)(pbHint - (uint8_t *)pQueryModeHints) <= cbBuffer);
+ }
+
+ return VINF_SUCCESS;
+}
+
+/*
+ *
+ * New VBVA uses a new interface id: #define VBE_DISPI_ID_VBOX_VIDEO 0xBE01
+ *
+ * VBVA uses two 32 bits IO ports to write VRAM offsets of shared memory blocks for commands.
+ * Read Write
+ * Host port 0x3b0 to process completed
+ * Guest port 0x3d0 control value? to process
+ *
+ */
+
+static DECLCALLBACK(void) vbvaNotifyGuest(void *pvCallback)
+{
+#if defined(VBOX_WITH_HGSMI) && (defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_WITH_VDMA) || defined(VBOX_WITH_WDDM))
+ PPDMDEVINS pDevIns = (PPDMDEVINS)pvCallback;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ VBVARaiseIrq(pDevIns, pThis, pThisCC, 0);
+#else
+ NOREF(pvCallback);
+ /* Do nothing. Later the VMMDev/VGA IRQ can be used for the notification. */
+#endif
+}
+
+/**
+ * The guest submitted a command buffer (hit VGA_PORT_HGSMI_GUEST).
+ *
+ * Verify the buffer size and invoke corresponding handler.
+ *
+ * @return VBox status code.
+ * @param pvHandler The VBVA channel context.
+ * @param u16ChannelInfo Command code.
+ * @param pvBuffer HGSMI buffer with command data. Considered volatile!
+ * @param cbBuffer Size of command data.
+ *
+ * @thread EMT
+ */
+static DECLCALLBACK(int) vbvaChannelHandler(void *pvHandler, uint16_t u16ChannelInfo,
+ void RT_UNTRUSTED_VOLATILE_GUEST *pvBuffer, HGSMISIZE cbBuffer)
+{
+ int rc = VINF_SUCCESS;
+
+ LogFlowFunc(("pvHandler %p, u16ChannelInfo %d, pvBuffer %p, cbBuffer %u\n", pvHandler, u16ChannelInfo, pvBuffer, cbBuffer));
+
+ PPDMDEVINS pDevIns = (PPDMDEVINS)pvHandler;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ PVGASTATECC pThisCC = PDMDEVINS_2_DATA_CC(pDevIns, PVGASTATECC);
+ PHGSMIINSTANCE pIns = pThisCC->pHGSMI;
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pIns);
+
+ switch (u16ChannelInfo)
+ {
+#ifdef VBOX_WITH_VDMA
+ case VBVA_VDMA_CMD:
+ if (cbBuffer >= VBoxSHGSMIBufferHeaderSize() + sizeof(VBOXVDMACBUF_DR))
+ {
+ VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_GUEST *pCmd
+ = (VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_GUEST *)VBoxSHGSMIBufferData((VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ vboxVDMACommand(pThisCC->pVdma, pCmd, cbBuffer - VBoxSHGSMIBufferHeaderSize());
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_VDMA_CTL:
+ if (cbBuffer >= VBoxSHGSMIBufferHeaderSize() + sizeof(VBOXVDMA_CTL))
+ {
+ VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_GUEST *pCmd
+ = (VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_GUEST *)VBoxSHGSMIBufferData((VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ vboxVDMAControl(pThisCC->pVdma, pCmd, cbBuffer - VBoxSHGSMIBufferHeaderSize());
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+#endif /* VBOX_WITH_VDMA */
+
+ case VBVA_QUERY_CONF32:
+ if (cbBuffer >= sizeof(VBVACONF32))
+ rc = vbvaHandleQueryConf32(pThisCC, (VBVACONF32 RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_SET_CONF32:
+ if (cbBuffer >= sizeof(VBVACONF32))
+ rc = vbvaHandleSetConf32((VBVACONF32 RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_INFO_VIEW:
+ /* Expect at least one VBVAINFOVIEW structure. */
+ rc = VERR_INVALID_PARAMETER;
+ if (cbBuffer >= sizeof(VBVAINFOVIEW))
+ {
+ /* Guest submits an array of VBVAINFOVIEW structures. */
+ const VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_GUEST *pView = (VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ for (;
+ cbBuffer >= sizeof(VBVAINFOVIEW);
+ ++pView, cbBuffer -= sizeof(VBVAINFOVIEW))
+ {
+ rc = vbvaInfoView(pThis, pThisCC, pView);
+ if (RT_FAILURE(rc))
+ break;
+ }
+ }
+ break;
+
+ case VBVA_INFO_HEAP:
+ if (cbBuffer >= sizeof(VBVAINFOHEAP))
+ rc = vbvaHandleInfoHeap(pThisCC, (VBVAINFOHEAP RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_FLUSH:
+ if (cbBuffer >= sizeof(VBVAFLUSH))
+ rc = vbvaFlush(pThis, pThisCC, pCtx);
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_INFO_SCREEN:
+ rc = VERR_INVALID_PARAMETER;
+ if (cbBuffer >= sizeof(VBVAINFOSCREEN))
+ rc = vbvaInfoScreen(pThisCC, (VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ break;
+
+ case VBVA_ENABLE:
+ rc = VERR_INVALID_PARAMETER;
+ if (cbBuffer >= sizeof(VBVAENABLE))
+ {
+ VBVAENABLE RT_UNTRUSTED_VOLATILE_GUEST *pVbvaEnable = (VBVAENABLE RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ uint32_t const fEnableFlags = pVbvaEnable->u32Flags;
+ uint32_t const offEnable = pVbvaEnable->u32Offset;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ uint32_t idScreen;
+ if (fEnableFlags & VBVA_F_EXTENDED)
+ {
+ ASSERT_GUEST_STMT_BREAK(cbBuffer >= sizeof(VBVAENABLE_EX), rc = VERR_INVALID_PARAMETER);
+ idScreen = ((VBVAENABLE_EX RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer)->u32ScreenId;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+ }
+ else
+ idScreen = vbvaViewFromBufferPtr(pIns, pCtx, pvBuffer);
+
+ rc = vbvaHandleEnable(pThis, pThisCC, fEnableFlags, offEnable, idScreen);
+ pVbvaEnable->i32Result = rc;
+ }
+ break;
+
+ case VBVA_MOUSE_POINTER_SHAPE:
+ if (cbBuffer >= sizeof(VBVAMOUSEPOINTERSHAPE))
+ {
+ VBVAMOUSEPOINTERSHAPE RT_UNTRUSTED_VOLATILE_GUEST *pShape
+ = (VBVAMOUSEPOINTERSHAPE RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ rc = vbvaMousePointerShape(pThisCC, pCtx, pShape, cbBuffer);
+ pShape->i32Result = rc;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+ case VBVA_VHWA_CMD:
+ if (cbBuffer >= VBOXVHWACMD_HEADSIZE())
+ {
+ vbvaVHWAHandleCommand(pDevIns, pThis, pThisCC, (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer);
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+#endif
+
+#ifdef VBOX_WITH_WDDM
+ case VBVA_INFO_CAPS:
+ if (cbBuffer >= sizeof(VBVACAPS))
+ {
+ VBVACAPS RT_UNTRUSTED_VOLATILE_GUEST *pCaps = (VBVACAPS RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ pThis->fGuestCaps = pCaps->fCaps;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ pThisCC->pDrv->pfnVBVAGuestCapabilityUpdate(pThisCC->pDrv, pThis->fGuestCaps);
+ pCaps->rc = rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+#endif
+
+ case VBVA_SCANLINE_CFG:
+ if (cbBuffer >= sizeof(VBVASCANLINECFG))
+ {
+ VBVASCANLINECFG RT_UNTRUSTED_VOLATILE_GUEST *pCfg = (VBVASCANLINECFG RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ pThis->fScanLineCfg = pCfg->fFlags;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ pCfg->rc = rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_QUERY_MODE_HINTS:
+ if (cbBuffer >= sizeof(VBVAQUERYMODEHINTS))
+ {
+ VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_GUEST *pQueryModeHints
+ = (VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ rc = vbvaHandleQueryModeHints(pThisCC, pQueryModeHints, cbBuffer);
+ pQueryModeHints->rc = rc;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_REPORT_INPUT_MAPPING:
+ if (cbBuffer >= sizeof(VBVAREPORTINPUTMAPPING))
+ {
+ VBVAREPORTINPUTMAPPING inputMapping;
+ {
+ VBVAREPORTINPUTMAPPING RT_UNTRUSTED_VOLATILE_GUEST *pInputMapping
+ = (VBVAREPORTINPUTMAPPING RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ inputMapping.x = pInputMapping->x;
+ inputMapping.y = pInputMapping->y;
+ inputMapping.cx = pInputMapping->cx;
+ inputMapping.cy = pInputMapping->cy;
+ }
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ LogRelFlowFunc(("VBVA: ChannelHandler: VBVA_REPORT_INPUT_MAPPING: x=%RI32, y=%RI32, cx=%RU32, cy=%RU32\n",
+ inputMapping.x, inputMapping.y, inputMapping.cx, inputMapping.cy));
+ pThisCC->pDrv->pfnVBVAInputMappingUpdate(pThisCC->pDrv,
+ inputMapping.x, inputMapping.y,
+ inputMapping.cx, inputMapping.cy);
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ case VBVA_CURSOR_POSITION:
+ if (cbBuffer >= sizeof(VBVACURSORPOSITION))
+ {
+ VBVACURSORPOSITION RT_UNTRUSTED_VOLATILE_GUEST *pReport = (VBVACURSORPOSITION RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ VBVACURSORPOSITION Report;
+ Report.fReportPosition = pReport->fReportPosition;
+ Report.x = pReport->x;
+ Report.y = pReport->y;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ LogRelFlowFunc(("VBVA: ChannelHandler: VBVA_CURSOR_POSITION: fReportPosition=%RTbool, Id=%RU32, x=%RU32, y=%RU32\n",
+ RT_BOOL(Report.fReportPosition), vbvaViewFromBufferPtr(pIns, pCtx, pvBuffer), Report.x, Report.y));
+
+ pThisCC->pDrv->pfnVBVAReportCursorPosition(pThisCC->pDrv, RT_BOOL(Report.fReportPosition), vbvaViewFromBufferPtr(pIns, pCtx, pvBuffer), Report.x, Report.y);
+ /* This was only ever briefly used by the guest, and a value
+ * of zero in both was taken to mean "ignore". */
+ pReport->x = 0;
+ pReport->y = 0;
+ rc = VINF_SUCCESS;
+ }
+ else
+ rc = VERR_INVALID_PARAMETER;
+ break;
+
+ default:
+ Log(("Unsupported VBVA guest command %d (%#x)!!!\n", u16ChannelInfo, u16ChannelInfo));
+ break;
+ }
+
+ return rc;
+}
+
+/** When VBVA is paused, the VGA device is allowed to work but
+ * no HGSMI etc state is changed.
+ */
+static void vbvaPause(PVGASTATECC pThisCC, bool fPause)
+{
+ if (!pThisCC || !pThisCC->pHGSMI)
+ return;
+
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ if (pCtx)
+ pCtx->fPaused = fPause;
+}
+
+bool VBVAIsPaused(PVGASTATECC pThisCC)
+{
+ if (pThisCC && pThisCC->pHGSMI)
+ {
+ const VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ if (pCtx && pCtx->cViews)
+ {
+ /* If VBVA is enabled at all. */
+ const VBVAVIEW *pView = &pCtx->aViews[0];
+ if (pView->vbva.guest.pVBVA)
+ return pCtx->fPaused;
+ }
+ }
+ /* VBVA is disabled. */
+ return true;
+}
+
+void VBVAOnVBEChanged(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ /* The guest does not depend on host handling the VBE registers. */
+ if (pThis->fGuestCaps & VBVACAPS_USE_VBVA_ONLY)
+ return;
+
+ vbvaPause(pThisCC, (pThis->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED) == 0);
+}
+
+void VBVAReset(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ if (!pThis || !pThisCC->pHGSMI)
+ return;
+
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+
+#ifdef VBOX_WITH_VIDEOHWACCEL
+ vbvaVHWAReset(pDevIns, pThis, pThisCC);
+#endif
+
+ HGSMIReset(pThisCC->pHGSMI);
+ /* Make sure the IRQ is reset. */
+ PDMDevHlpPCISetIrq(pDevIns, 0, PDM_IRQ_LEVEL_LOW);
+ pThis->fu32PendingGuestFlags = 0;
+
+ if (pCtx)
+ {
+ vbvaFlush(pThis, pThisCC, pCtx);
+
+ for (unsigned idScreen = 0; idScreen < pCtx->cViews; idScreen++)
+ vbvaDisable(pThis, pThisCC, pCtx, idScreen);
+
+ pCtx->mouseShapeInfo.fSet = false;
+ RTMemFreeZ(pCtx->mouseShapeInfo.pu8Shape, pCtx->mouseShapeInfo.cbAllocated);
+ pCtx->mouseShapeInfo.pu8Shape = NULL;
+ pCtx->mouseShapeInfo.cbAllocated = 0;
+ pCtx->mouseShapeInfo.cbShape = 0;
+ }
+
+}
+
+int VBVAUpdateDisplay(PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ int rc = VERR_NOT_SUPPORTED; /* Assuming that the VGA device will have to do updates. */
+
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ if (pCtx)
+ {
+ if (!pCtx->fPaused)
+ {
+ rc = vbvaFlush(pThis, pThisCC, pCtx);
+ if (RT_SUCCESS(rc))
+ {
+ if (!pCtx->aViews[0].vbva.guest.pVBVA)
+ {
+ /* VBVA is not enabled for the first view, so VGA device must do updates. */
+ rc = VERR_NOT_SUPPORTED;
+ }
+ }
+ }
+ }
+
+ return rc;
+}
+
+static int vbvaSendModeHintWorker(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC,
+ uint32_t cx, uint32_t cy, uint32_t cBPP, uint32_t iDisplay, uint32_t dx,
+ uint32_t dy, uint32_t fEnabled,
+ uint32_t fNotifyGuest)
+{
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ /** @note See Display::setVideoModeHint: "It is up to the guest to decide
+ * whether the hint is valid. Therefore don't do any VRAM sanity checks
+ * here! */
+ if (iDisplay >= RT_MIN(pThis->cMonitors, RT_ELEMENTS(pCtx->aModeHints)))
+ return VERR_OUT_OF_RANGE;
+ pCtx->aModeHints[iDisplay].magic = VBVAMODEHINT_MAGIC;
+ pCtx->aModeHints[iDisplay].cx = cx;
+ pCtx->aModeHints[iDisplay].cy = cy;
+ pCtx->aModeHints[iDisplay].cBPP = cBPP;
+ pCtx->aModeHints[iDisplay].dx = dx;
+ pCtx->aModeHints[iDisplay].dy = dy;
+ pCtx->aModeHints[iDisplay].fEnabled = fEnabled;
+ if (fNotifyGuest && pThis->fGuestCaps & VBVACAPS_IRQ && pThis->fGuestCaps & VBVACAPS_VIDEO_MODE_HINTS)
+ VBVARaiseIrq(pDevIns, pThis, pThisCC, HGSMIHOSTFLAGS_HOTPLUG);
+ return VINF_SUCCESS;
+}
+
+
+/**
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnSendModeHint}
+ */
+DECLCALLBACK(int) vbvaR3PortSendModeHint(PPDMIDISPLAYPORT pInterface, uint32_t cx, uint32_t cy, uint32_t cBPP,
+ uint32_t iDisplay, uint32_t dx, uint32_t dy, uint32_t fEnabled, uint32_t fNotifyGuest)
+{
+ PVGASTATECC pThisCC = RT_FROM_MEMBER(pInterface, VGASTATECC, IPort);
+ PPDMDEVINS pDevIns = pThisCC->pDevIns;
+ PVGASTATE pThis = PDMDEVINS_2_DATA(pDevIns, PVGASTATE);
+ int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VERR_SEM_BUSY);
+ AssertRCReturn(rc, rc);
+
+ rc = vbvaSendModeHintWorker(pDevIns, pThis, pThisCC, cx, cy, cBPP, iDisplay, dx, dy, fEnabled, fNotifyGuest);
+
+ PDMDevHlpCritSectLeave(pDevIns, &pThis->CritSect);
+ return rc;
+}
+
+int VBVAInit(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
+{
+ int rc = HGSMICreate(&pThisCC->pHGSMI,
+ pDevIns,
+ "VBVA",
+ 0,
+ pThisCC->pbVRam,
+ pThis->vram_size,
+ vbvaNotifyGuest,
+ pDevIns,
+ sizeof(VBVACONTEXT));
+ if (RT_SUCCESS(rc))
+ {
+ rc = HGSMIHostChannelRegister(pThisCC->pHGSMI,
+ HGSMI_CH_VBVA,
+ vbvaChannelHandler,
+ pDevIns);
+ if (RT_SUCCESS(rc))
+ {
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pThisCC->pHGSMI);
+ pCtx->cViews = pThis->cMonitors;
+ pCtx->fPaused = true;
+ memset(pCtx->aModeHints, ~0, sizeof(pCtx->aModeHints));
+ }
+ }
+
+ return rc;
+
+}
+
+void VBVADestroy(PVGASTATECC pThisCC)
+{
+ PHGSMIINSTANCE pHgsmi = pThisCC->pHGSMI;
+ if (pHgsmi)
+ {
+ VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pHgsmi);
+ pCtx->mouseShapeInfo.fSet = false;
+ RTMemFreeZ(pCtx->mouseShapeInfo.pu8Shape, pCtx->mouseShapeInfo.cbAllocated);
+ pCtx->mouseShapeInfo.pu8Shape = NULL;
+ pCtx->mouseShapeInfo.cbAllocated = 0;
+ pCtx->mouseShapeInfo.cbShape = 0;
+
+ HGSMIDestroy(pHgsmi);
+ pThisCC->pHGSMI = NULL;
+ }
+}
+
diff --git a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
new file mode 100644
index 00000000..dc5e7d79
--- /dev/null
+++ b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp
@@ -0,0 +1,373 @@
+/* $Id: DevVGA_VDMA.cpp $ */
+/** @file
+ * Video DMA (VDMA) support.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#define LOG_GROUP LOG_GROUP_DEV_VGA
+#include <VBox/VMMDev.h>
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/vmm/pgm.h>
+#include <VBoxVideo.h>
+#include <VBox/AssertGuest.h>
+#include <iprt/semaphore.h>
+#include <iprt/thread.h>
+#include <iprt/mem.h>
+#include <iprt/asm.h>
+#include <iprt/list.h>
+#include <iprt/param.h>
+
+#include "DevVGA.h"
+#include "HGSMI/SHGSMIHost.h"
+
+#ifdef DEBUG_misha
+# define VBOXVDBG_MEMCACHE_DISABLE
+#endif
+
+#ifndef VBOXVDBG_MEMCACHE_DISABLE
+# include <iprt/memcache.h>
+#endif
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+#ifdef DEBUG_misha
+# define WARN_BP() do { AssertFailed(); } while (0)
+#else
+# define WARN_BP() do { } while (0)
+#endif
+#define WARN(_msg) do { \
+ LogRel(_msg); \
+ WARN_BP(); \
+ } while (0)
+
+#define VBOXVDMATHREAD_STATE_TERMINATED 0
+#define VBOXVDMATHREAD_STATE_CREATING 1
+#define VBOXVDMATHREAD_STATE_CREATED 3
+#define VBOXVDMATHREAD_STATE_TERMINATING 4
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+struct VBOXVDMATHREAD;
+
+typedef DECLCALLBACKPTR(void, PFNVBOXVDMATHREAD_CHANGED,(struct VBOXVDMATHREAD *pThread, int rc,
+ void *pvThreadContext, void *pvChangeContext));
+
+typedef struct VBOXVDMATHREAD
+{
+ RTTHREAD hWorkerThread;
+ RTSEMEVENT hEvent;
+ volatile uint32_t u32State;
+ PFNVBOXVDMATHREAD_CHANGED pfnChanged;
+ void *pvChanged;
+} VBOXVDMATHREAD, *PVBOXVDMATHREAD;
+
+
+/* state transformations:
+ *
+ * submitter | processor
+ *
+ * LISTENING ---> PROCESSING
+ *
+ * */
+#define VBVAEXHOSTCONTEXT_STATE_LISTENING 0
+#define VBVAEXHOSTCONTEXT_STATE_PROCESSING 1
+
+#define VBVAEXHOSTCONTEXT_ESTATE_DISABLED -1
+#define VBVAEXHOSTCONTEXT_ESTATE_PAUSED 0
+#define VBVAEXHOSTCONTEXT_ESTATE_ENABLED 1
+
+typedef struct VBVAEXHOSTCONTEXT
+{
+ VBVABUFFER RT_UNTRUSTED_VOLATILE_GUEST *pVBVA;
+ /** Maximum number of data bytes addressible relative to pVBVA. */
+ uint32_t cbMaxData;
+ volatile int32_t i32State;
+ volatile int32_t i32EnableState;
+ volatile uint32_t u32cCtls;
+ /* critical section for accessing ctl lists */
+ RTCRITSECT CltCritSect;
+ RTLISTANCHOR GuestCtlList;
+ RTLISTANCHOR HostCtlList;
+#ifndef VBOXVDBG_MEMCACHE_DISABLE
+ RTMEMCACHE CtlCache;
+#endif
+} VBVAEXHOSTCONTEXT;
+
+typedef enum
+{
+ VBVAEXHOSTCTL_TYPE_UNDEFINED = 0,
+ VBVAEXHOSTCTL_TYPE_HH_INTERNAL_PAUSE,
+ VBVAEXHOSTCTL_TYPE_HH_INTERNAL_RESUME,
+ VBVAEXHOSTCTL_TYPE_HH_SAVESTATE,
+ VBVAEXHOSTCTL_TYPE_HH_LOADSTATE,
+ VBVAEXHOSTCTL_TYPE_HH_LOADSTATE_DONE,
+ VBVAEXHOSTCTL_TYPE_HH_BE_OPAQUE,
+ VBVAEXHOSTCTL_TYPE_HH_ON_HGCM_UNLOAD,
+ VBVAEXHOSTCTL_TYPE_GHH_BE_OPAQUE,
+ VBVAEXHOSTCTL_TYPE_GHH_ENABLE,
+ VBVAEXHOSTCTL_TYPE_GHH_ENABLE_PAUSED,
+ VBVAEXHOSTCTL_TYPE_GHH_DISABLE,
+ VBVAEXHOSTCTL_TYPE_GHH_RESIZE
+} VBVAEXHOSTCTL_TYPE;
+
+struct VBVAEXHOSTCTL;
+
+typedef DECLCALLBACKTYPE(void, FNVBVAEXHOSTCTL_COMPLETE,(VBVAEXHOSTCONTEXT *pVbva, struct VBVAEXHOSTCTL *pCtl, int rc, void *pvComplete));
+typedef FNVBVAEXHOSTCTL_COMPLETE *PFNVBVAEXHOSTCTL_COMPLETE;
+
+typedef struct VBVAEXHOSTCTL
+{
+ RTLISTNODE Node;
+ VBVAEXHOSTCTL_TYPE enmType;
+ union
+ {
+ struct
+ {
+ void RT_UNTRUSTED_VOLATILE_GUEST *pvCmd;
+ uint32_t cbCmd;
+ } cmd;
+
+ struct
+ {
+ PSSMHANDLE pSSM;
+ uint32_t u32Version;
+ } state;
+ } u;
+ PFNVBVAEXHOSTCTL_COMPLETE pfnComplete;
+ void *pvComplete;
+} VBVAEXHOSTCTL;
+
+/* VBoxVBVAExHP**, i.e. processor functions, can NOT be called concurrently with each other,
+ * but can be called with other VBoxVBVAExS** (submitter) functions except Init/Start/Term aparently.
+ * Can only be called be the processor, i.e. the entity that acquired the processor state by direct or indirect call to the VBoxVBVAExHSCheckCommands
+ * see mor edetailed comments in headers for function definitions */
+typedef enum
+{
+ VBVAEXHOST_DATA_TYPE_NO_DATA = 0,
+ VBVAEXHOST_DATA_TYPE_CMD,
+ VBVAEXHOST_DATA_TYPE_HOSTCTL,
+ VBVAEXHOST_DATA_TYPE_GUESTCTL
+} VBVAEXHOST_DATA_TYPE;
+
+
+typedef struct VBOXVDMAHOST
+{
+ PHGSMIINSTANCE pHgsmi; /**< Same as VGASTATE::pHgsmi. */
+ PVGASTATE pThis;
+} VBOXVDMAHOST, *PVBOXVDMAHOST;
+
+
+/**
+ * List selector for VBoxVBVAExHCtlSubmit(), vdmaVBVACtlSubmit().
+ */
+typedef enum
+{
+ VBVAEXHOSTCTL_SOURCE_GUEST = 0,
+ VBVAEXHOSTCTL_SOURCE_HOST
+} VBVAEXHOSTCTL_SOURCE;
+
+
+
+
+/**
+ * Called by vgaR3Construct() to initialize the state.
+ *
+ * @returns VBox status code.
+ */
+int vboxVDMAConstruct(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t cPipeElements)
+{
+ RT_NOREF(cPipeElements);
+ PVBOXVDMAHOST pVdma = (PVBOXVDMAHOST)RTMemAllocZ(sizeof(*pVdma));
+ Assert(pVdma);
+ if (pVdma)
+ {
+ pVdma->pHgsmi = pThisCC->pHGSMI;
+ pVdma->pThis = pThis;
+
+ pThisCC->pVdma = pVdma;
+ return VINF_SUCCESS;
+ }
+ return VERR_NO_MEMORY;
+}
+
+/**
+ * Called by vgaR3Reset() to do reset.
+ */
+void vboxVDMAReset(struct VBOXVDMAHOST *pVdma)
+{
+ RT_NOREF(pVdma);
+}
+
+/**
+ * Called by vgaR3Destruct() to do cleanup.
+ */
+void vboxVDMADestruct(struct VBOXVDMAHOST *pVdma)
+{
+ if (!pVdma)
+ return;
+ RTMemFree(pVdma);
+}
+
+/**
+ * Handle VBVA_VDMA_CTL, see vbvaChannelHandler
+ *
+ * @param pVdma The VDMA channel.
+ * @param pCmd The control command to handle. Considered volatile.
+ * @param cbCmd The size of the command. At least sizeof(VBOXVDMA_CTL).
+ */
+void vboxVDMAControl(struct VBOXVDMAHOST *pVdma, VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_GUEST *pCmd, uint32_t cbCmd)
+{
+ RT_NOREF(cbCmd);
+ PHGSMIINSTANCE pIns = pVdma->pHgsmi;
+
+ VBOXVDMA_CTL_TYPE enmCtl = pCmd->enmCtl;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ int rc;
+ if (enmCtl < VBOXVDMA_CTL_TYPE_END)
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ switch (enmCtl)
+ {
+ case VBOXVDMA_CTL_TYPE_ENABLE:
+ rc = VINF_SUCCESS;
+ break;
+ case VBOXVDMA_CTL_TYPE_DISABLE:
+ rc = VINF_SUCCESS;
+ break;
+ case VBOXVDMA_CTL_TYPE_FLUSH:
+ rc = VINF_SUCCESS;
+ break;
+ case VBOXVDMA_CTL_TYPE_WATCHDOG:
+ rc = VERR_NOT_SUPPORTED;
+ break;
+ default:
+ AssertFailedBreakStmt(rc = VERR_IPE_NOT_REACHED_DEFAULT_CASE);
+ }
+ }
+ else
+ {
+ RT_UNTRUSTED_VALIDATED_FENCE();
+ ASSERT_GUEST_FAILED();
+ rc = VERR_NOT_SUPPORTED;
+ }
+
+ pCmd->i32Result = rc;
+ rc = VBoxSHGSMICommandComplete(pIns, pCmd);
+ AssertRC(rc);
+}
+
+/**
+ * Handle VBVA_VDMA_CMD, see vbvaChannelHandler().
+ *
+ * @param pVdma The VDMA channel.
+ * @param pCmd The command to handle. Considered volatile.
+ * @param cbCmd The size of the command. At least sizeof(VBOXVDMACBUF_DR).
+ * @thread EMT
+ */
+void vboxVDMACommand(struct VBOXVDMAHOST *pVdma, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_GUEST *pCmd, uint32_t cbCmd)
+{
+ /*
+ * Process the command.
+ */
+ bool fAsyncCmd = false;
+ RT_NOREF(cbCmd);
+ int rc = VERR_NOT_IMPLEMENTED;
+
+ /*
+ * Complete the command unless it's asynchronous (e.g. chromium).
+ */
+ if (!fAsyncCmd)
+ {
+ pCmd->rc = rc;
+ int rc2 = VBoxSHGSMICommandComplete(pVdma->pHgsmi, pCmd);
+ AssertRC(rc2);
+ }
+}
+
+
+
+/*
+ *
+ *
+ * Saved state.
+ * Saved state.
+ * Saved state.
+ *
+ *
+ */
+
+int vboxVDMASaveStateExecPrep(struct VBOXVDMAHOST *pVdma)
+{
+ RT_NOREF(pVdma);
+ return VINF_SUCCESS;
+}
+
+int vboxVDMASaveStateExecDone(struct VBOXVDMAHOST *pVdma)
+{
+ RT_NOREF(pVdma);
+ return VINF_SUCCESS;
+}
+
+int vboxVDMASaveStateExecPerform(PCPDMDEVHLPR3 pHlp, struct VBOXVDMAHOST *pVdma, PSSMHANDLE pSSM)
+{
+ int rc;
+ RT_NOREF(pVdma);
+
+ rc = pHlp->pfnSSMPutU32(pSSM, UINT32_MAX);
+ AssertRCReturn(rc, rc);
+ return VINF_SUCCESS;
+}
+
+int vboxVDMASaveLoadExecPerform(PCPDMDEVHLPR3 pHlp, struct VBOXVDMAHOST *pVdma, PSSMHANDLE pSSM, uint32_t u32Version)
+{
+ uint32_t u32;
+ int rc = pHlp->pfnSSMGetU32(pSSM, &u32);
+ AssertLogRelRCReturn(rc, rc);
+
+ if (u32 != UINT32_MAX)
+ {
+ RT_NOREF(pVdma, u32Version);
+ WARN(("Unsupported VBVACtl info!\n"));
+ return VERR_VERSION_MISMATCH;
+ }
+
+ return VINF_SUCCESS;
+}
+
+int vboxVDMASaveLoadDone(struct VBOXVDMAHOST *pVdma)
+{
+ RT_NOREF(pVdma);
+ return VINF_SUCCESS;
+}
+
diff --git a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
new file mode 100644
index 00000000..83f882a8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
@@ -0,0 +1,1702 @@
+/* $Id: HGSMIHost.cpp $ */
+/** @file
+ * VBox Host Guest Shared Memory Interface (HGSMI), host part.
+ *
+ * Host part:
+ * - virtual hardware IO handlers;
+ * - channel management;
+ * - low level interface for buffer transfer.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*
+ * Async host->guest calls. Completion by an IO write from the guest or a timer timeout.
+ *
+ * Sync guest->host calls. Initiated by an IO write from the guest.
+ *
+ * Guest->Host
+ * ___________
+ *
+ * Synchronous for the guest, an async result can be also reported later by a host->guest call:
+ *
+ * G: Alloc shared memory, fill the structure, issue an IO write (HGSMI_IO_GUEST) with the memory offset.
+ * H: Verify the shared memory and call the handler.
+ * G: Continue after the IO completion.
+ *
+ *
+ * Host->Guest
+ * __________
+ *
+ * H: Alloc shared memory, fill in the info.
+ * Register in the FIFO with a callback, issue IRQ (on EMT).
+ * Wait on a sem with timeout if necessary.
+ * G: Read FIFO from HGSMI_IO_HOST_COMMAND.
+ * H(EMT): Get the shared memory offset from FIFO to return to the guest.
+ * G: Get offset, process command, issue IO write to HGSMI_IO_HOST_COMMAND.
+ * H(EMT): Find registered shared mem, run callback, which could post the sem.
+ * H: Get results and free shared mem (could be freed automatically on EMT too).
+ *
+ *
+ * Implementation notes:
+ *
+ * Host->Guest
+ *
+ * * Shared memory allocation using a critsect.
+ * * FIFO manipulation with a critsect.
+ *
+ */
+
+#define LOG_GROUP LOG_GROUP_HGSMI
+#include <iprt/alloc.h>
+#include <iprt/critsect.h>
+#include <iprt/heap.h>
+#include <iprt/list.h>
+#include <iprt/semaphore.h>
+#include <iprt/string.h>
+
+#include <VBox/AssertGuest.h>
+#include <iprt/errcore.h>
+#include <VBox/log.h>
+#include <VBox/vmm/pdmdev.h>
+#include <VBox/vmm/ssm.h>
+#include <VBox/vmm/vmm.h>
+
+#include "HGSMIHost.h"
+#include <HGSMIChannels.h>
+
+#include "../DevVGASavedState.h"
+
+#ifdef DEBUG_sunlover
+#define HGSMI_STRICT 1
+#endif /* !DEBUG_sunlover */
+
+#ifdef DEBUG_misha
+//# define VBOXHGSMI_STATE_DEBUG
+#endif
+
+#ifdef VBOXHGSMI_STATE_DEBUG
+# define VBOXHGSMI_STATE_START_MAGIC UINT32_C(0x12345678)
+# define VBOXHGSMI_STATE_STOP_MAGIC UINT32_C(0x87654321)
+# define VBOXHGSMI_STATE_FIFOSTART_MAGIC UINT32_C(0x9abcdef1)
+# define VBOXHGSMI_STATE_FIFOSTOP_MAGIC UINT32_C(0x1fedcba9)
+
+# define VBOXHGSMI_SAVE_START(_pSSM) do{ int rc2 = pHlp->pfnSSMPutU32(_pSSM, VBOXHGSMI_STATE_START_MAGIC); AssertRC(rc2); }while(0)
+# define VBOXHGSMI_SAVE_STOP(_pSSM) do{ int rc2 = pHlp->pfnSSMPutU32(_pSSM, VBOXHGSMI_STATE_STOP_MAGIC); AssertRC(rc2); }while(0)
+# define VBOXHGSMI_SAVE_FIFOSTART(_pSSM) do{ int rc2 = pHlp->pfnSSMPutU32(_pSSM, VBOXHGSMI_STATE_FIFOSTART_MAGIC); AssertRC(rc2); }while(0)
+# define VBOXHGSMI_SAVE_FIFOSTOP(_pSSM) do{ int rc2 = pHlp->pfnSSMPutU32(_pSSM, VBOXHGSMI_STATE_FIFOSTOP_MAGIC); AssertRC(rc2); }while(0)
+
+# define VBOXHGSMI_LOAD_CHECK(_pSSM, _v) \
+ do { \
+ uint32_t u32; \
+ int rc2 = pHlp->pfnSSMGetU32(_pSSM, &u32); AssertRC(rc2); \
+ Assert(u32 == (_v)); \
+ } while(0)
+
+# define VBOXHGSMI_LOAD_START(_pSSM) VBOXHGSMI_LOAD_CHECK(_pSSM, VBOXHGSMI_STATE_START_MAGIC)
+# define VBOXHGSMI_LOAD_FIFOSTART(_pSSM) VBOXHGSMI_LOAD_CHECK(_pSSM, VBOXHGSMI_STATE_FIFOSTART_MAGIC)
+# define VBOXHGSMI_LOAD_FIFOSTOP(_pSSM) VBOXHGSMI_LOAD_CHECK(_pSSM, VBOXHGSMI_STATE_FIFOSTOP_MAGIC)
+# define VBOXHGSMI_LOAD_STOP(_pSSM) VBOXHGSMI_LOAD_CHECK(_pSSM, VBOXHGSMI_STATE_STOP_MAGIC)
+#else /* !VBOXHGSMI_STATE_DEBUG */
+# define VBOXHGSMI_SAVE_START(a_pSSM) do { } while(0)
+# define VBOXHGSMI_SAVE_STOP(a_pSSM) do { } while(0)
+# define VBOXHGSMI_SAVE_FIFOSTART(a_pSSM) do { } while(0)
+# define VBOXHGSMI_SAVE_FIFOSTOP(a_pSSM) do { } while(0)
+
+# define VBOXHGSMI_LOAD_START(a_pSSM) do { } while(0)
+# define VBOXHGSMI_LOAD_FIFOSTART(a_pSSM) do { } while(0)
+# define VBOXHGSMI_LOAD_FIFOSTOP(a_pSSM) do { } while(0)
+# define VBOXHGSMI_LOAD_STOP(a_pSSM) do { } while(0)
+#endif
+
+/* Assertions for situations which could happen and normally must be processed properly
+ * but must be investigated during development: guest misbehaving, etc.
+ */
+#ifdef HGSMI_STRICT
+# define HGSMI_STRICT_ASSERT_FAILED() AssertFailed()
+# define HGSMI_STRICT_ASSERT(expr) Assert(expr)
+#else
+# define HGSMI_STRICT_ASSERT_FAILED() do {} while (0)
+# define HGSMI_STRICT_ASSERT(expr) do {} while (0)
+#endif
+
+
+/** @name Host heap types.
+ * @{ */
+#define HGSMI_HEAP_TYPE_NULL 0 /**< Heap not initialized. */
+#define HGSMI_HEAP_TYPE_POINTER 1 /**< Deprecated, used only for old saved states. RTHEAPSIMPLE. */
+#define HGSMI_HEAP_TYPE_OFFSET 2 /**< Deprecated, used only for old saved states. RTHEAPOFFSET. */
+#define HGSMI_HEAP_TYPE_MA 3 /**< Memory allocator. */
+/** @} */
+
+typedef struct HGSMIHOSTHEAP
+{
+ uint32_t u32HeapType; /**< HGSMI_HEAP_TYPE_* */
+ int32_t volatile cRefs; /**< How many blocks allocated. */
+ HGSMIAREA area; /**< Host heap location. */
+ union
+ {
+ HGSMIMADATA ma; /**< Memory allocator for the default host heap implementation. */
+ struct /**< Legacy heap implementations. For old saved states. */
+ {
+ union
+ {
+ RTHEAPSIMPLE hPtr; /**< Pointer based heap. */
+ RTHEAPOFFSET hOff; /**< Offset based heap. */
+ } u;
+ } legacy;
+ } u;
+} HGSMIHOSTHEAP;
+
+typedef struct HGSMIINSTANCE
+{
+ PPDMDEVINS pDevIns; /**< The device instance. */
+
+ const char *pszName; /**< A name for the instance. Mostyl used in the log. */
+
+ RTCRITSECT instanceCritSect; /**< For updating the instance data: FIFO's, channels. */
+
+ HGSMIAREA area; /**< The shared memory description. */
+ HGSMIHOSTHEAP hostHeap; /**< Host heap instance. */
+ RTCRITSECT hostHeapCritSect; /**< Heap serialization lock. */
+
+ RTLISTANCHOR hostFIFO; /**< Pending host buffers. */
+ RTLISTANCHOR hostFIFORead; /**< Host buffers read by the guest. */
+ RTLISTANCHOR hostFIFOProcessed; /**< Processed by the guest. */
+ RTLISTANCHOR hostFIFOFree; /**< Buffers for reuse. */
+#ifdef VBOX_WITH_WDDM
+ RTLISTANCHOR guestCmdCompleted; /**< list of completed guest commands to be returned to the guest*/
+#endif
+ RTCRITSECT hostFIFOCritSect; /**< FIFO serialization lock. */
+
+ PFNHGSMINOTIFYGUEST pfnNotifyGuest; /**< Guest notification callback. */
+ void *pvNotifyGuest; /**< Guest notification callback context. */
+
+ volatile HGSMIHOSTFLAGS *pHGFlags;
+
+ HGSMICHANNELINFO channelInfo; /**< Channel handlers indexed by the channel id.
+ * The array is accessed under the instance lock.
+ */
+} HGSMIINSTANCE;
+
+
+typedef DECLCALLBACKTYPE(void, FNHGSMIHOSTFIFOCALLBACK,(void *pvCallback));
+typedef FNHGSMIHOSTFIFOCALLBACK *PFNHGSMIHOSTFIFOCALLBACK;
+
+typedef struct HGSMIHOSTFIFOENTRY
+{
+ RTLISTNODE nodeEntry;
+
+ HGSMIINSTANCE *pIns; /**< Backlink to the HGSMI instance. */
+
+ volatile uint32_t fl; /**< Status flags of the entry. */
+
+ HGSMIOFFSET offBuffer; /**< Offset of the HGSMI buffer header in the HGSMI host heap:
+ * [pIns->hostHeap.area.offBase .. offLast]. */
+} HGSMIHOSTFIFOENTRY;
+
+
+#define HGSMI_F_HOST_FIFO_ALLOCATED 0x0001
+#define HGSMI_F_HOST_FIFO_QUEUED 0x0002
+#define HGSMI_F_HOST_FIFO_READ 0x0004
+#define HGSMI_F_HOST_FIFO_PROCESSED 0x0008
+#define HGSMI_F_HOST_FIFO_FREE 0x0010
+#define HGSMI_F_HOST_FIFO_CANCELED 0x0020
+
+static DECLCALLBACK(void) hgsmiHostCommandFreeCallback(void *pvCallback);
+
+#ifdef VBOX_WITH_WDDM
+
+typedef struct HGSMIGUESTCOMPLENTRY
+{
+ RTLISTNODE nodeEntry;
+ HGSMIOFFSET offBuffer; /**< Offset of the guest command buffer. */
+} HGSMIGUESTCOMPLENTRY;
+
+
+static void hgsmiGuestCompletionFIFOFree(HGSMIINSTANCE *pIns, HGSMIGUESTCOMPLENTRY *pEntry)
+{
+ NOREF (pIns);
+ RTMemFree (pEntry);
+}
+
+static int hgsmiGuestCompletionFIFOAlloc(HGSMIINSTANCE *pIns, HGSMIGUESTCOMPLENTRY **ppEntry)
+{
+ HGSMIGUESTCOMPLENTRY *pEntry = (HGSMIGUESTCOMPLENTRY *)RTMemAllocZ(sizeof(HGSMIGUESTCOMPLENTRY));
+ if (pEntry)
+ {
+ *ppEntry = pEntry;
+ return VINF_SUCCESS;
+ }
+ NOREF(pIns);
+ return VERR_NO_MEMORY;
+}
+
+#endif /* VBOX_WITH_WDDM */
+
+static int hgsmiLock(HGSMIINSTANCE *pIns)
+{
+ int rc = RTCritSectEnter(&pIns->instanceCritSect);
+ AssertRC(rc);
+ return rc;
+}
+
+static void hgsmiUnlock(HGSMIINSTANCE *pIns)
+{
+ int rc = RTCritSectLeave(&pIns->instanceCritSect);
+ AssertRC(rc);
+}
+
+static int hgsmiFIFOLock(HGSMIINSTANCE *pIns)
+{
+ int rc = RTCritSectEnter(&pIns->hostFIFOCritSect);
+ AssertRC(rc);
+ return rc;
+}
+
+static void hgsmiFIFOUnlock(HGSMIINSTANCE *pIns)
+{
+ int rc = RTCritSectLeave(&pIns->hostFIFOCritSect);
+ AssertRC(rc);
+}
+
+/*
+ * Virtual hardware IO handlers.
+ */
+
+/* The guest submits a new buffer to the host.
+ * Called from the HGSMI_IO_GUEST write handler.
+ * @thread EMT
+ */
+void HGSMIGuestWrite(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer)
+{
+ HGSMIBufferProcess(&pIns->area, &pIns->channelInfo, offBuffer);
+}
+
+#ifdef VBOX_WITH_WDDM
+static HGSMIOFFSET hgsmiProcessGuestCmdCompletion(HGSMIINSTANCE *pIns)
+{
+ HGSMIOFFSET offCmd = HGSMIOFFSET_VOID;
+ int rc = hgsmiFIFOLock(pIns);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ HGSMIGUESTCOMPLENTRY *pEntry = RTListGetFirst(&pIns->guestCmdCompleted, HGSMIGUESTCOMPLENTRY, nodeEntry);
+ if (pEntry)
+ {
+ RTListNodeRemove(&pEntry->nodeEntry);
+ }
+
+ if (RTListIsEmpty(&pIns->guestCmdCompleted))
+ {
+ if (pIns->pHGFlags)
+ ASMAtomicAndU32(&pIns->pHGFlags->u32HostFlags, ~HGSMIHOSTFLAGS_GCOMMAND_COMPLETED);
+ }
+
+ hgsmiFIFOUnlock(pIns);
+
+ if (pEntry)
+ {
+ offCmd = pEntry->offBuffer;
+
+ LogFlowFunc(("host FIFO head %p.\n", pEntry));
+
+ hgsmiGuestCompletionFIFOFree(pIns, pEntry);
+ }
+ }
+ return offCmd;
+}
+#endif
+
+
+/* Called from HGSMI_IO_GUEST read handler. */
+HGSMIOFFSET HGSMIGuestRead(PHGSMIINSTANCE pIns)
+{
+ LogFlowFunc(("pIns %p\n", pIns));
+
+ AssertPtr(pIns);
+
+ Assert(PDMDevHlpGetVMCPU(pIns->pDevIns) != NULL);
+
+#ifndef VBOX_WITH_WDDM
+ /* Currently there is no functionality here. */
+ NOREF(pIns);
+
+ return HGSMIOFFSET_VOID;
+#else
+ /* use this to speedup guest cmd completion
+ * this mechanism is alternative to submitting H->G command for notification */
+ HGSMIOFFSET offCmd = hgsmiProcessGuestCmdCompletion(pIns);
+ return offCmd;
+#endif
+}
+
+static bool hgsmiProcessHostCmdCompletion(HGSMIINSTANCE *pIns, HGSMIOFFSET offBuffer, bool fCompleteFirst)
+{
+ Assert(PDMDevHlpGetVMCPU(pIns->pDevIns) != NULL);
+
+ int rc = hgsmiFIFOLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ /* Search the Read list for the given buffer offset. */
+ HGSMIHOSTFIFOENTRY *pEntry = NULL;
+
+ HGSMIHOSTFIFOENTRY *pIter;
+ RTListForEach(&pIns->hostFIFORead, pIter, HGSMIHOSTFIFOENTRY, nodeEntry)
+ {
+ Assert(pIter->fl == (HGSMI_F_HOST_FIFO_ALLOCATED | HGSMI_F_HOST_FIFO_READ));
+ if (fCompleteFirst || pIter->offBuffer == offBuffer)
+ {
+ pEntry = pIter;
+ break;
+ }
+ }
+
+ LogFlowFunc(("read list entry: %p.\n", pEntry));
+
+ Assert(pEntry || fCompleteFirst);
+
+ if (pEntry)
+ {
+ RTListNodeRemove(&pEntry->nodeEntry);
+
+ pEntry->fl &= ~HGSMI_F_HOST_FIFO_READ;
+ pEntry->fl |= HGSMI_F_HOST_FIFO_PROCESSED;
+
+ RTListAppend(&pIns->hostFIFOProcessed, &pEntry->nodeEntry);
+
+ hgsmiFIFOUnlock(pIns);
+
+ hgsmiHostCommandFreeCallback(pEntry);
+ return true;
+ }
+
+ hgsmiFIFOUnlock(pIns);
+ if (!fCompleteFirst)
+ LogRel(("HGSMI[%s]: ignored invalid write to the host FIFO: 0x%08X!!!\n", pIns->pszName, offBuffer));
+ }
+ return false;
+}
+
+/**
+ * The guest has finished processing of a buffer previously submitted by the
+ * host.
+ *
+ * Called from HGSMI_IO_HOST write handler.
+ * @thread EMT
+ */
+void HGSMIHostWrite(HGSMIINSTANCE *pIns, HGSMIOFFSET offBuffer)
+{
+ LogFlowFunc(("pIns %p offBuffer 0x%x\n", pIns, offBuffer));
+
+ hgsmiProcessHostCmdCompletion(pIns, offBuffer, false);
+}
+
+/**
+ * The guest reads a new host buffer to be processed.
+ *
+ * Called from the HGSMI_IO_HOST read handler.
+ *
+ * @thread EMT
+ */
+HGSMIOFFSET HGSMIHostRead(HGSMIINSTANCE *pIns)
+{
+ LogFlowFunc(("pIns %p\n", pIns));
+
+ Assert(PDMDevHlpGetVMCPU(pIns->pDevIns) != NULL);
+
+ AssertPtrReturn(pIns->pHGFlags, HGSMIOFFSET_VOID);
+ int rc = hgsmiFIFOLock(pIns);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ /* Get the host FIFO head entry. */
+ HGSMIHOSTFIFOENTRY *pEntry = RTListGetFirst(&pIns->hostFIFO, HGSMIHOSTFIFOENTRY, nodeEntry);
+
+ LogFlowFunc(("host FIFO head %p.\n", pEntry));
+
+ if (pEntry != NULL)
+ {
+ Assert(pEntry->fl == (HGSMI_F_HOST_FIFO_ALLOCATED | HGSMI_F_HOST_FIFO_QUEUED));
+
+ /*
+ * Move the entry to the Read list.
+ */
+ RTListNodeRemove(&pEntry->nodeEntry);
+
+ if (RTListIsEmpty(&pIns->hostFIFO))
+ {
+ ASMAtomicAndU32(&pIns->pHGFlags->u32HostFlags, (~HGSMIHOSTFLAGS_COMMANDS_PENDING));
+ }
+
+ pEntry->fl &= ~HGSMI_F_HOST_FIFO_QUEUED;
+ pEntry->fl |= HGSMI_F_HOST_FIFO_READ;
+
+ RTListAppend(&pIns->hostFIFORead, &pEntry->nodeEntry);
+
+ hgsmiFIFOUnlock(pIns);
+
+ /* Return the buffer offset of the host FIFO head. */
+ return pEntry->offBuffer;
+ }
+
+ hgsmiFIFOUnlock(pIns);
+ }
+ /* Special value that means there is no host buffers to be processed. */
+ return HGSMIOFFSET_VOID;
+}
+
+
+/** Tells the guest that a new buffer to be processed is available from the host. */
+static void hgsmiNotifyGuest(HGSMIINSTANCE *pIns)
+{
+ if (pIns->pfnNotifyGuest)
+ pIns->pfnNotifyGuest(pIns->pvNotifyGuest);
+}
+
+void HGSMISetHostGuestFlags(HGSMIINSTANCE *pIns, uint32_t flags)
+{
+ AssertPtrReturnVoid(pIns->pHGFlags);
+ ASMAtomicOrU32(&pIns->pHGFlags->u32HostFlags, flags);
+}
+
+uint32_t HGSMIGetHostGuestFlags(HGSMIINSTANCE *pIns)
+{
+ return pIns->pHGFlags ? ASMAtomicReadU32(&pIns->pHGFlags->u32HostFlags) : 0;
+}
+
+void HGSMIClearHostGuestFlags(HGSMIINSTANCE *pIns, uint32_t flags)
+{
+ AssertPtrReturnVoid(pIns->pHGFlags);
+ ASMAtomicAndU32(&pIns->pHGFlags->u32HostFlags, ~flags);
+}
+
+
+/*
+ * The host heap.
+ *
+ * Uses the RTHeap implementation.
+ *
+ */
+
+static int hgsmiHostHeapLock(HGSMIINSTANCE *pIns)
+{
+ int rc = RTCritSectEnter(&pIns->hostHeapCritSect);
+ AssertRC(rc);
+ return rc;
+}
+
+static void hgsmiHostHeapUnlock(HGSMIINSTANCE *pIns)
+{
+ int rc = RTCritSectLeave(&pIns->hostHeapCritSect);
+ AssertRC(rc);
+}
+
+static HGSMIOFFSET hgsmiHostHeapOffset(HGSMIHOSTHEAP *pHeap)
+{
+ return pHeap->area.offBase;
+}
+
+static HGSMISIZE hgsmiHostHeapSize(HGSMIHOSTHEAP *pHeap)
+{
+ return pHeap->area.cbArea;
+}
+
+static void RT_UNTRUSTED_VOLATILE_GUEST *hgsmiHostHeapBufferAlloc(HGSMIHOSTHEAP *pHeap, HGSMISIZE cbBuffer)
+{
+ void RT_UNTRUSTED_VOLATILE_GUEST *pvBuf = NULL;
+
+ if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_MA)
+ pvBuf = HGSMIMAAlloc(&pHeap->u.ma, cbBuffer);
+ else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_POINTER)
+ pvBuf = RTHeapSimpleAlloc(pHeap->u.legacy.u.hPtr, cbBuffer, 0);
+ else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
+ pvBuf = RTHeapOffsetAlloc(pHeap->u.legacy.u.hOff, cbBuffer, 0);
+ if (pvBuf)
+ ASMAtomicIncS32(&pHeap->cRefs);
+
+ return pvBuf;
+}
+
+static void hgsmiHostHeapBufferFree(HGSMIHOSTHEAP *pHeap, void RT_UNTRUSTED_VOLATILE_GUEST *pvBuf)
+{
+ if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_MA)
+ HGSMIMAFree(&pHeap->u.ma, pvBuf);
+ else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_POINTER)
+ RTHeapSimpleFree(pHeap->u.legacy.u.hPtr, (void *)pvBuf);
+ else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
+ RTHeapOffsetFree(pHeap->u.legacy.u.hOff, (void *)pvBuf);
+ ASMAtomicDecS32(&pHeap->cRefs);
+}
+
+static void RT_UNTRUSTED_VOLATILE_GUEST *hgsmiHostHeapDataAlloc(HGSMIHOSTHEAP *pHeap, HGSMISIZE cbData,
+ uint8_t u8Channel, uint16_t u16ChannelInfo)
+{
+ HGSMISIZE cbAlloc = HGSMIBufferRequiredSize(cbData);
+ HGSMIBUFFERHEADER *pHeader = (HGSMIBUFFERHEADER *)hgsmiHostHeapBufferAlloc(pHeap, cbAlloc);
+ if (!pHeader)
+ return NULL;
+
+ HGSMIBufferInitializeSingle(&pHeap->area, pHeader, cbAlloc, u8Channel, u16ChannelInfo);
+
+ return HGSMIBufferDataFromPtr(pHeader);
+}
+
+static void hgsmiHostHeapDataFree(HGSMIHOSTHEAP *pHeap, void RT_UNTRUSTED_VOLATILE_GUEST *pvData)
+{
+ if ( pvData
+ && pHeap->u32HeapType != HGSMI_HEAP_TYPE_NULL)
+ {
+ HGSMIBUFFERHEADER RT_UNTRUSTED_VOLATILE_GUEST *pHeader = HGSMIBufferHeaderFromData(pvData);
+ hgsmiHostHeapBufferFree(pHeap, pHeader);
+ }
+}
+
+/* Needed for heap relocation: offset of the heap handle relative to the start of heap area. */
+static HGSMIOFFSET hgsmiHostHeapHandleLocationOffset(HGSMIHOSTHEAP *pHeap)
+{
+ HGSMIOFFSET offHeapHandle;
+ if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_POINTER)
+ offHeapHandle = (HGSMIOFFSET)((uintptr_t)pHeap->u.legacy.u.hPtr - (uintptr_t)pHeap->area.pu8Base);
+ else if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
+ offHeapHandle = (HGSMIOFFSET)((uintptr_t)pHeap->u.legacy.u.hOff - (uintptr_t)pHeap->area.pu8Base);
+ else
+ offHeapHandle = HGSMIOFFSET_VOID;
+ return offHeapHandle;
+}
+
+static int hgsmiHostHeapRelocate(HGSMIHOSTHEAP *pHeap,
+ uint32_t u32HeapType,
+ void *pvBase,
+ uint32_t offHeapHandle,
+ uintptr_t offDelta,
+ HGSMISIZE cbArea,
+ HGSMIOFFSET offBase)
+{
+ int rc = HGSMIAreaInitialize(&pHeap->area, pvBase, cbArea, offBase);
+ if (RT_SUCCESS(rc))
+ {
+ if (u32HeapType == HGSMI_HEAP_TYPE_OFFSET)
+ pHeap->u.legacy.u.hOff = (RTHEAPOFFSET)((uint8_t *)pvBase + offHeapHandle);
+ else if (u32HeapType == HGSMI_HEAP_TYPE_POINTER)
+ {
+ pHeap->u.legacy.u.hPtr = (RTHEAPSIMPLE)((uint8_t *)pvBase + offHeapHandle);
+ rc = RTHeapSimpleRelocate(pHeap->u.legacy.u.hPtr, offDelta); AssertRC(rc);
+ }
+ else
+ {
+ /* HGSMI_HEAP_TYPE_MA does not need the relocation. */
+ rc = VERR_NOT_SUPPORTED;
+ }
+
+ if (RT_SUCCESS(rc))
+ pHeap->u32HeapType = u32HeapType;
+ else
+ HGSMIAreaClear(&pHeap->area);
+ }
+
+ return rc;
+}
+
+static int hgsmiHostHeapRestoreMA(HGSMIHOSTHEAP *pHeap,
+ void *pvBase,
+ HGSMISIZE cbArea,
+ HGSMIOFFSET offBase,
+ uint32_t cBlocks,
+ HGSMIOFFSET *paDescriptors,
+ HGSMISIZE cbMaxBlock,
+ HGSMIENV *pEnv)
+{
+ int rc = HGSMIAreaInitialize(&pHeap->area, pvBase, cbArea, offBase);
+ if (RT_SUCCESS(rc))
+ {
+ rc = HGSMIMAInit(&pHeap->u.ma, &pHeap->area, paDescriptors, cBlocks, cbMaxBlock, pEnv);
+ if (RT_SUCCESS(rc))
+ pHeap->u32HeapType = HGSMI_HEAP_TYPE_MA;
+ else
+ HGSMIAreaClear(&pHeap->area);
+ }
+
+ return rc;
+}
+
+static void hgsmiHostHeapSetupUninitialized(HGSMIHOSTHEAP *pHeap)
+{
+ RT_ZERO(*pHeap);
+ pHeap->u32HeapType = HGSMI_HEAP_TYPE_NULL;
+}
+
+static void hgsmiHostHeapDestroy(HGSMIHOSTHEAP *pHeap)
+{
+ if (pHeap->u32HeapType == HGSMI_HEAP_TYPE_MA)
+ HGSMIMAUninit(&pHeap->u.ma);
+ hgsmiHostHeapSetupUninitialized(pHeap);
+}
+
+static int hgsmiHostFIFOAlloc(HGSMIHOSTFIFOENTRY **ppEntry)
+{
+ HGSMIHOSTFIFOENTRY *pEntry = (HGSMIHOSTFIFOENTRY *)RTMemAllocZ(sizeof(HGSMIHOSTFIFOENTRY));
+ if (pEntry)
+ {
+ pEntry->fl = HGSMI_F_HOST_FIFO_ALLOCATED;
+ *ppEntry = pEntry;
+ return VINF_SUCCESS;
+ }
+ return VERR_NO_MEMORY;
+}
+
+static void hgsmiHostFIFOFree(HGSMIHOSTFIFOENTRY *pEntry)
+{
+ RTMemFree(pEntry);
+}
+
+static int hgsmiHostCommandFreeByEntry (HGSMIHOSTFIFOENTRY *pEntry)
+{
+ LogFlowFunc(("offBuffer 0x%08X\n", pEntry->offBuffer));
+
+ HGSMIINSTANCE *pIns = pEntry->pIns;
+ int rc = hgsmiFIFOLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ RTListNodeRemove(&pEntry->nodeEntry);
+ hgsmiFIFOUnlock(pIns);
+
+ void RT_UNTRUSTED_VOLATILE_GUEST *pvData = HGSMIBufferDataFromOffset(&pIns->hostHeap.area, pEntry->offBuffer);
+
+ rc = hgsmiHostHeapLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ /* Deallocate the host heap memory. */
+ hgsmiHostHeapDataFree(&pIns->hostHeap, pvData);
+
+ hgsmiHostHeapUnlock(pIns);
+ }
+
+ hgsmiHostFIFOFree(pEntry);
+ }
+
+ LogFlowFunc(("%Rrc\n", rc));
+ return rc;
+}
+
+static int hgsmiHostCommandFree(HGSMIINSTANCE *pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData)
+{
+ HGSMIOFFSET offBuffer = HGSMIBufferOffsetFromData(&pIns->hostHeap.area, pvData);
+ HGSMIHOSTFIFOENTRY *pEntry = NULL;
+
+ int rc = hgsmiFIFOLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ /* Search the Processed list for the given offBuffer. */
+ HGSMIHOSTFIFOENTRY *pIter;
+ RTListForEach(&pIns->hostFIFOProcessed, pIter, HGSMIHOSTFIFOENTRY, nodeEntry)
+ {
+ Assert(pIter->fl == (HGSMI_F_HOST_FIFO_ALLOCATED | HGSMI_F_HOST_FIFO_PROCESSED));
+
+ if (pIter->offBuffer == offBuffer)
+ {
+ pEntry = pIter;
+ break;
+ }
+ }
+
+ if (pEntry)
+ RTListNodeRemove(&pEntry->nodeEntry);
+ else
+ AssertLogRelMsgFailed(("HGSMI[%s]: the host frees unprocessed FIFO entry: 0x%08X\n",
+ pIns->pszName, offBuffer));
+
+ hgsmiFIFOUnlock(pIns);
+
+ rc = hgsmiHostHeapLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ /* Deallocate the host heap memory. */
+ hgsmiHostHeapDataFree(&pIns->hostHeap, pvData);
+
+ hgsmiHostHeapUnlock(pIns);
+ }
+
+ if (pEntry)
+ {
+ /* Deallocate the entry. */
+ hgsmiHostFIFOFree(pEntry);
+ }
+ }
+
+ return rc;
+}
+
+static DECLCALLBACK(void) hgsmiHostCommandFreeCallback(void *pvCallback)
+{
+ /* Guest has processed the command. */
+ HGSMIHOSTFIFOENTRY *pEntry = (HGSMIHOSTFIFOENTRY *)pvCallback;
+
+ Assert(pEntry->fl == (HGSMI_F_HOST_FIFO_ALLOCATED | HGSMI_F_HOST_FIFO_PROCESSED));
+
+ /* This is a simple callback, just signal the event. */
+ hgsmiHostCommandFreeByEntry(pEntry);
+}
+
+static int hgsmiHostCommandWrite(HGSMIINSTANCE *pIns, HGSMIOFFSET offBuffer)
+{
+ AssertPtrReturn(pIns->pHGFlags, VERR_WRONG_ORDER);
+
+ HGSMIHOSTFIFOENTRY *pEntry;
+ int rc = hgsmiHostFIFOAlloc(&pEntry);
+ if (RT_SUCCESS(rc))
+ {
+ /* Initialize the new entry and add it to the FIFO. */
+ pEntry->fl |= HGSMI_F_HOST_FIFO_QUEUED;
+
+ pEntry->pIns = pIns;
+ pEntry->offBuffer = offBuffer;
+
+ rc = hgsmiFIFOLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ ASMAtomicOrU32(&pIns->pHGFlags->u32HostFlags, HGSMIHOSTFLAGS_COMMANDS_PENDING);
+ RTListAppend(&pIns->hostFIFO, &pEntry->nodeEntry);
+
+ hgsmiFIFOUnlock(pIns);
+ }
+ else
+ hgsmiHostFIFOFree(pEntry);
+ }
+
+ return rc;
+}
+
+
+/**
+ * Append the shared memory block to the FIFO, inform the guest.
+ *
+ * @param pIns Pointer to HGSMI instance.
+ * @param pvData The shared memory block data pointer.
+ * @param fDoIrq Whether the guest interrupt should be generated, i.e. if the command is not
+ * urgent (e.g. some guest command completion notification that does not require
+ * post-processing) the command could be submitted without raising an irq.
+ * @thread EMT
+ */
+static int hgsmiHostCommandSubmit(HGSMIINSTANCE *pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData, bool fDoIrq)
+{
+ /* Append the command to FIFO. */
+ HGSMIOFFSET offBuffer = HGSMIBufferOffsetFromData(&pIns->hostHeap.area, pvData);
+ int rc = hgsmiHostCommandWrite(pIns, offBuffer);
+ if (RT_SUCCESS(rc))
+ {
+ if (fDoIrq)
+ {
+ /* Now guest can read the FIFO, the notification is informational. */
+ hgsmiNotifyGuest(pIns);
+ }
+ }
+
+ return rc;
+}
+
+/**
+ * Allocate a shared memory buffer. The host can write command/data to the memory.
+ * The allocated buffer contains the 'header', 'data' and the 'tail', but *ppvData
+ * will point to the 'data'.
+ *
+ * @return VBox status code. Pointer to the payload data in *ppvData.
+ * @param pIns HGSMI instance,
+ * @param ppvData Where to store the allocated memory pointer to data.
+ * @param cbData How many bytes of data to allocate.
+ * @param u8Channel HGSMI channel.
+ * @param u16ChannelInfo Command parameter.
+ */
+int HGSMIHostCommandAlloc(HGSMIINSTANCE *pIns, void RT_UNTRUSTED_VOLATILE_GUEST **ppvData, HGSMISIZE cbData,
+ uint8_t u8Channel, uint16_t u16ChannelInfo)
+{
+ LogFlowFunc(("pIns = %p, cbData = %d, u8Channel %d, u16ChannelInfo 0x%04X\n",
+ pIns, cbData, u8Channel, u16ChannelInfo));
+
+ int rc = hgsmiHostHeapLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ void RT_UNTRUSTED_VOLATILE_GUEST *pvData = hgsmiHostHeapDataAlloc(&pIns->hostHeap, cbData, u8Channel, u16ChannelInfo);
+ hgsmiHostHeapUnlock(pIns);
+
+ if (pvData)
+ *ppvData = pvData;
+ else
+ {
+ LogRel(("HGSMI[%s]: host heap allocation failed %d bytes\n", pIns->pszName, cbData));
+ rc = VERR_NO_MEMORY;
+ }
+ }
+
+ LogFlowFunc(("%Rrc, pvData = %p\n", rc, *ppvData));
+ return rc;
+}
+
+/**
+ * Convenience function that allows posting the host command asynchronously
+ * and make it freed on completion.
+ * The caller does not get notified in any way on command completion,
+ * on successful return the pvData buffer can not be used after being passed to this function.
+ *
+ * @param pIns HGSMI instance,
+ * @param pvData The pointer returned by 'HGSMIHostCommandAlloc'.
+ * @param fDoIrq Specifies whether the guest interrupt should be generated.
+ * In case the command is not urgent (e.g. some guest command
+ * completion notification that does not require post-processing)
+ * the command could be posted without raising an irq.
+ */
+int HGSMIHostCommandSubmitAndFreeAsynch(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData, bool fDoIrq)
+{
+ LogFlowFunc(("pIns = %p, pvData = %p, fDoIrq = %d\n", pIns, pvData, fDoIrq));
+
+ int rc;
+ if (HGSMIAreaContainsPointer(&pIns->hostHeap.area, pvData))
+ rc = hgsmiHostCommandSubmit(pIns, pvData, fDoIrq);
+ else
+ {
+ AssertLogRelMsgFailed(("HGSMI[%s]: host submits invalid command %p/%p\n",
+ pIns->pszName, pvData, pIns->hostHeap.area.pu8Base));
+ rc = VERR_INVALID_POINTER;
+ }
+
+ LogFlowFunc(("rc = %Rrc\n", rc));
+ return rc;
+}
+
+/**
+ * Free the shared memory block.
+ *
+ * @param pIns Pointer to HGSMI instance,
+ * @param pvData The pointer returned by 'HGSMIHostCommandAlloc'.
+ */
+int HGSMIHostCommandFree(HGSMIINSTANCE *pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData)
+{
+ LogFlowFunc(("pIns = %p, pvData = %p\n", pIns, pvData));
+
+ int rc;
+ if (HGSMIAreaContainsPointer(&pIns->hostHeap.area, pvData))
+ rc = hgsmiHostCommandFree(pIns, pvData);
+ else
+ {
+ AssertLogRelMsgFailed(("HGSMI[%s]: the host frees invalid FIFO entry %p/%p\n",
+ pIns->pszName, pvData, pIns->hostHeap.area.pu8Base));
+ rc = VERR_INVALID_POINTER;
+ }
+
+ LogFlowFunc(("rc = %Rrc\n", rc));
+ return rc;
+}
+
+static DECLCALLBACK(void *) hgsmiEnvAlloc(void *pvEnv, HGSMISIZE cb)
+{
+ NOREF(pvEnv);
+ return RTMemAlloc(cb);
+}
+
+static DECLCALLBACK(void) hgsmiEnvFree(void *pvEnv, void *pv)
+{
+ NOREF(pvEnv);
+ RTMemFree(pv);
+}
+
+static HGSMIENV g_hgsmiEnv =
+{
+ NULL,
+ hgsmiEnvAlloc,
+ hgsmiEnvFree
+};
+
+int HGSMIHostHeapSetup(PHGSMIINSTANCE pIns, HGSMIOFFSET RT_UNTRUSTED_GUEST offHeap, HGSMISIZE RT_UNTRUSTED_GUEST cbHeap)
+{
+ LogFlowFunc(("pIns %p, offHeap 0x%08X, cbHeap = 0x%08X\n", pIns, offHeap, cbHeap));
+
+ /*
+ * Validate input.
+ */
+ AssertPtrReturn(pIns, VERR_INVALID_PARAMETER);
+
+ ASSERT_GUEST_LOGREL_MSG_RETURN( offHeap < pIns->area.cbArea
+ && cbHeap <= pIns->area.cbArea
+ && offHeap <= pIns->area.cbArea - cbHeap,
+ ("Heap: %#x LB %#x; Area: %#x LB %#x\n", offHeap, cbHeap, pIns->area.offBase, pIns->area.cbArea),
+ VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ /*
+ * Lock the heap and do the job.
+ */
+ int rc = hgsmiHostHeapLock(pIns);
+ AssertRCReturn(rc, rc);
+
+ /* It is possible to change the heap only if there is no pending allocations. */
+ ASSERT_GUEST_LOGREL_MSG_STMT_RETURN(pIns->hostHeap.cRefs == 0,
+ ("HGSMI[%s]: host heap setup ignored. %d allocated.\n", pIns->pszName, pIns->hostHeap.cRefs),
+ hgsmiHostHeapUnlock(pIns),
+ VERR_ACCESS_DENIED);
+ rc = HGSMIAreaInitialize(&pIns->hostHeap.area, pIns->area.pu8Base + offHeap, cbHeap, offHeap);
+ if (RT_SUCCESS(rc))
+ {
+ rc = HGSMIMAInit(&pIns->hostHeap.u.ma, &pIns->hostHeap.area, NULL, 0, 0, &g_hgsmiEnv);
+ if (RT_SUCCESS(rc))
+ pIns->hostHeap.u32HeapType = HGSMI_HEAP_TYPE_MA;
+ else
+ HGSMIAreaClear(&pIns->hostHeap.area);
+ }
+
+ hgsmiHostHeapUnlock(pIns);
+
+ LogFlowFunc(("rc = %Rrc\n", rc));
+ return rc;
+}
+
+static int hgsmiHostSaveFifoLocked(PCPDMDEVHLPR3 pHlp, RTLISTANCHOR *pList, PSSMHANDLE pSSM)
+{
+ VBOXHGSMI_SAVE_FIFOSTART(pSSM);
+
+ HGSMIHOSTFIFOENTRY *pIter;
+
+ uint32_t cEntries = 0;
+ RTListForEach(pList, pIter, HGSMIHOSTFIFOENTRY, nodeEntry)
+ {
+ ++cEntries;
+ }
+
+ int rc = pHlp->pfnSSMPutU32(pSSM, cEntries);
+ if (RT_SUCCESS(rc))
+ {
+ RTListForEach(pList, pIter, HGSMIHOSTFIFOENTRY, nodeEntry)
+ {
+ pHlp->pfnSSMPutU32(pSSM, pIter->fl);
+ rc = pHlp->pfnSSMPutU32(pSSM, pIter->offBuffer);
+ if (RT_FAILURE(rc))
+ break;
+ }
+ }
+
+ VBOXHGSMI_SAVE_FIFOSTOP(pSSM);
+
+ return rc;
+}
+
+static int hgsmiHostSaveGuestCmdCompletedFifoLocked(PCPDMDEVHLPR3 pHlp, RTLISTANCHOR *pList, PSSMHANDLE pSSM)
+{
+ VBOXHGSMI_SAVE_FIFOSTART(pSSM);
+
+ HGSMIGUESTCOMPLENTRY *pIter;
+
+ uint32_t cEntries = 0;
+ RTListForEach(pList, pIter, HGSMIGUESTCOMPLENTRY, nodeEntry)
+ {
+ ++cEntries;
+ }
+ int rc = pHlp->pfnSSMPutU32(pSSM, cEntries);
+ if (RT_SUCCESS(rc))
+ {
+ RTListForEach(pList, pIter, HGSMIGUESTCOMPLENTRY, nodeEntry)
+ {
+ rc = pHlp->pfnSSMPutU32(pSSM, pIter->offBuffer);
+ if (RT_FAILURE(rc))
+ break;
+ }
+ }
+
+ VBOXHGSMI_SAVE_FIFOSTOP(pSSM);
+
+ return rc;
+}
+
+static int hgsmiHostLoadFifoEntryLocked(PCPDMDEVHLPR3 pHlp, PHGSMIINSTANCE pIns, HGSMIHOSTFIFOENTRY **ppEntry, PSSMHANDLE pSSM)
+{
+ HGSMIHOSTFIFOENTRY *pEntry;
+ int rc = hgsmiHostFIFOAlloc(&pEntry); AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ uint32_t u32;
+ pEntry->pIns = pIns;
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32); AssertRC(rc);
+ pEntry->fl = u32;
+ rc = pHlp->pfnSSMGetU32(pSSM, &pEntry->offBuffer); AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ *ppEntry = pEntry;
+ else
+ hgsmiHostFIFOFree(pEntry);
+ }
+
+ return rc;
+}
+
+static int hgsmiHostLoadFifoLocked(PCPDMDEVHLPR3 pHlp, PHGSMIINSTANCE pIns, RTLISTANCHOR *pList, PSSMHANDLE pSSM)
+{
+ VBOXHGSMI_LOAD_FIFOSTART(pSSM);
+
+ uint32_t cEntries = 0;
+ int rc = pHlp->pfnSSMGetU32(pSSM, &cEntries);
+ if (RT_SUCCESS(rc) && cEntries)
+ {
+ uint32_t i;
+ for (i = 0; i < cEntries; ++i)
+ {
+ HGSMIHOSTFIFOENTRY *pEntry = NULL;
+ rc = hgsmiHostLoadFifoEntryLocked(pHlp, pIns, &pEntry, pSSM);
+ AssertRCBreak(rc);
+
+ RTListAppend(pList, &pEntry->nodeEntry);
+ }
+ }
+
+ VBOXHGSMI_LOAD_FIFOSTOP(pSSM);
+
+ return rc;
+}
+
+static int hgsmiHostLoadGuestCmdCompletedFifoEntryLocked(PCPDMDEVHLPR3 pHlp, PHGSMIINSTANCE pIns,
+ HGSMIGUESTCOMPLENTRY **ppEntry, PSSMHANDLE pSSM)
+{
+ HGSMIGUESTCOMPLENTRY *pEntry;
+ int rc = hgsmiGuestCompletionFIFOAlloc(pIns, &pEntry); AssertRC(rc);
+ if (RT_SUCCESS (rc))
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &pEntry->offBuffer); AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ *ppEntry = pEntry;
+ else
+ hgsmiGuestCompletionFIFOFree(pIns, pEntry);
+ }
+ return rc;
+}
+
+static int hgsmiHostLoadGuestCmdCompletedFifoLocked(PCPDMDEVHLPR3 pHlp, PHGSMIINSTANCE pIns, RTLISTANCHOR *pList,
+ PSSMHANDLE pSSM, uint32_t u32Version)
+{
+ VBOXHGSMI_LOAD_FIFOSTART(pSSM);
+
+ uint32_t i;
+
+ uint32_t cEntries = 0;
+ int rc = pHlp->pfnSSMGetU32(pSSM, &cEntries);
+ if (RT_SUCCESS(rc) && cEntries)
+ {
+ if (u32Version > VGA_SAVEDSTATE_VERSION_INV_GCMDFIFO)
+ {
+ for (i = 0; i < cEntries; ++i)
+ {
+ HGSMIGUESTCOMPLENTRY *pEntry = NULL;
+ rc = hgsmiHostLoadGuestCmdCompletedFifoEntryLocked(pHlp, pIns, &pEntry, pSSM);
+ AssertRCBreak(rc);
+
+ RTListAppend(pList, &pEntry->nodeEntry);
+ }
+ }
+ else
+ {
+ LogRel(("WARNING: the current saved state version has some 3D support data missing, "
+ "which may lead to some guest applications function improperly"));
+
+ /* Just read out all invalid data and discard it. */
+ for (i = 0; i < cEntries; ++i)
+ {
+ HGSMIHOSTFIFOENTRY *pEntry = NULL;
+ rc = hgsmiHostLoadFifoEntryLocked(pHlp, pIns, &pEntry, pSSM);
+ AssertRCBreak(rc);
+
+ hgsmiHostFIFOFree(pEntry);
+ }
+ }
+ }
+
+ VBOXHGSMI_LOAD_FIFOSTOP(pSSM);
+
+ return rc;
+}
+
+static int hgsmiHostSaveMA(PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM, HGSMIMADATA *pMA)
+{
+ int rc = pHlp->pfnSSMPutU32(pSSM, pMA->cBlocks);
+ if (RT_SUCCESS(rc))
+ {
+ HGSMIMABLOCK *pIter;
+ RTListForEach(&pMA->listBlocks, pIter, HGSMIMABLOCK, nodeBlock)
+ {
+ pHlp->pfnSSMPutU32(pSSM, pIter->descriptor);
+ }
+
+ rc = pHlp->pfnSSMPutU32(pSSM, pMA->cbMaxBlock);
+ }
+
+ return rc;
+}
+
+static int hgsmiHostLoadMA(PCPDMDEVHLPR3 pHlp, PSSMHANDLE pSSM, uint32_t *pcBlocks,
+ HGSMIOFFSET **ppaDescriptors, HGSMISIZE *pcbMaxBlock)
+{
+ int rc = pHlp->pfnSSMGetU32(pSSM, pcBlocks);
+ if (RT_SUCCESS(rc))
+ {
+ HGSMIOFFSET *paDescriptors = NULL;
+ if (*pcBlocks > 0)
+ {
+ paDescriptors = (HGSMIOFFSET *)RTMemAlloc(*pcBlocks * sizeof(HGSMIOFFSET));
+ if (paDescriptors)
+ {
+ uint32_t i;
+ for (i = 0; i < *pcBlocks; ++i)
+ pHlp->pfnSSMGetU32(pSSM, &paDescriptors[i]);
+ }
+ else
+ rc = VERR_NO_MEMORY;
+ }
+
+ if (RT_SUCCESS(rc))
+ rc = pHlp->pfnSSMGetU32(pSSM, pcbMaxBlock);
+ if (RT_SUCCESS(rc))
+ *ppaDescriptors = paDescriptors;
+ else
+ RTMemFree(paDescriptors);
+ }
+
+ return rc;
+}
+
+int HGSMIHostSaveStateExec(PCPDMDEVHLPR3 pHlp, PHGSMIINSTANCE pIns, PSSMHANDLE pSSM)
+{
+ VBOXHGSMI_SAVE_START(pSSM);
+
+ int rc;
+
+ pHlp->pfnSSMPutU32(pSSM, pIns->hostHeap.u32HeapType);
+
+ HGSMIOFFSET off = pIns->pHGFlags ? HGSMIPointerToOffset(&pIns->area, (const HGSMIBUFFERHEADER *)pIns->pHGFlags)
+ : HGSMIOFFSET_VOID;
+ pHlp->pfnSSMPutU32(pSSM, off);
+
+ off = pIns->hostHeap.u32HeapType == HGSMI_HEAP_TYPE_MA ? 0 : hgsmiHostHeapHandleLocationOffset(&pIns->hostHeap);
+ rc = pHlp->pfnSSMPutU32 (pSSM, off);
+ if (off != HGSMIOFFSET_VOID)
+ {
+ pHlp->pfnSSMPutU32(pSSM, hgsmiHostHeapOffset(&pIns->hostHeap));
+ pHlp->pfnSSMPutU32(pSSM, hgsmiHostHeapSize(&pIns->hostHeap));
+ /* need save mem pointer to calculate offset on restore */
+ pHlp->pfnSSMPutU64(pSSM, (uint64_t)(uintptr_t)pIns->area.pu8Base);
+ rc = hgsmiFIFOLock (pIns);
+ if (RT_SUCCESS(rc))
+ {
+ rc = hgsmiHostSaveFifoLocked(pHlp, &pIns->hostFIFO, pSSM); AssertRC(rc);
+ rc = hgsmiHostSaveFifoLocked(pHlp, &pIns->hostFIFORead, pSSM); AssertRC(rc);
+ rc = hgsmiHostSaveFifoLocked(pHlp, &pIns->hostFIFOProcessed, pSSM); AssertRC(rc);
+#ifdef VBOX_WITH_WDDM
+ rc = hgsmiHostSaveGuestCmdCompletedFifoLocked(pHlp, &pIns->guestCmdCompleted, pSSM); AssertRC(rc);
+#endif
+
+ hgsmiFIFOUnlock(pIns);
+ }
+
+ if (RT_SUCCESS(rc))
+ if (pIns->hostHeap.u32HeapType == HGSMI_HEAP_TYPE_MA)
+ rc = hgsmiHostSaveMA(pHlp, pSSM, &pIns->hostHeap.u.ma);
+ }
+
+ VBOXHGSMI_SAVE_STOP(pSSM);
+
+ return rc;
+}
+
+int HGSMIHostLoadStateExec(PCPDMDEVHLPR3 pHlp, PHGSMIINSTANCE pIns, PSSMHANDLE pSSM, uint32_t u32Version)
+{
+ if (u32Version < VGA_SAVEDSTATE_VERSION_HGSMI)
+ return VINF_SUCCESS;
+
+ VBOXHGSMI_LOAD_START(pSSM);
+
+ int rc;
+ uint32_t u32HeapType = HGSMI_HEAP_TYPE_NULL;
+ if (u32Version >= VGA_SAVEDSTATE_VERSION_HGSMIMA)
+ {
+ rc = pHlp->pfnSSMGetU32(pSSM, &u32HeapType);
+ AssertRCReturn(rc, rc);
+ }
+
+ HGSMIOFFSET off;
+ rc = pHlp->pfnSSMGetU32(pSSM, &off);
+ AssertLogRelRCReturn(rc, rc);
+ pIns->pHGFlags = off != HGSMIOFFSET_VOID ? (HGSMIHOSTFLAGS *)HGSMIOffsetToPointer(&pIns->area, off) : NULL;
+
+ rc = pHlp->pfnSSMGetU32(pSSM, &off);
+ AssertLogRelRCReturn(rc, rc);
+ if (off != HGSMIOFFSET_VOID)
+ {
+ /* There is a saved heap. */
+ if (u32HeapType == HGSMI_HEAP_TYPE_NULL)
+ u32HeapType = u32Version > VGA_SAVEDSTATE_VERSION_HOST_HEAP
+ ? HGSMI_HEAP_TYPE_OFFSET : HGSMI_HEAP_TYPE_POINTER;
+
+ HGSMIOFFSET offHeap;
+ pHlp->pfnSSMGetU32(pSSM, &offHeap);
+ uint32_t cbHeap;
+ pHlp->pfnSSMGetU32(pSSM, &cbHeap);
+ uint64_t oldMem;
+ rc = pHlp->pfnSSMGetU64(pSSM, &oldMem);
+ AssertLogRelRCReturn(rc, rc);
+
+ if (RT_SUCCESS(rc))
+ {
+ rc = hgsmiFIFOLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ rc = hgsmiHostLoadFifoLocked(pHlp, pIns, &pIns->hostFIFO, pSSM);
+ if (RT_SUCCESS(rc))
+ rc = hgsmiHostLoadFifoLocked(pHlp, pIns, &pIns->hostFIFORead, pSSM);
+ if (RT_SUCCESS(rc))
+ rc = hgsmiHostLoadFifoLocked(pHlp, pIns, &pIns->hostFIFOProcessed, pSSM);
+#ifdef VBOX_WITH_WDDM
+ if (RT_SUCCESS(rc) && u32Version > VGA_SAVEDSTATE_VERSION_PRE_WDDM)
+ rc = hgsmiHostLoadGuestCmdCompletedFifoLocked(pHlp, pIns, &pIns->guestCmdCompleted, pSSM, u32Version);
+#endif
+
+ hgsmiFIFOUnlock(pIns);
+ }
+ }
+
+ if (RT_SUCCESS(rc))
+ {
+ if (u32HeapType == HGSMI_HEAP_TYPE_MA)
+ {
+ uint32_t cBlocks = 0;
+ HGSMISIZE cbMaxBlock = 0;
+ HGSMIOFFSET *paDescriptors = NULL;
+ rc = hgsmiHostLoadMA(pHlp, pSSM, &cBlocks, &paDescriptors, &cbMaxBlock);
+ if (RT_SUCCESS(rc))
+ {
+ rc = hgsmiHostHeapRestoreMA(&pIns->hostHeap,
+ pIns->area.pu8Base+offHeap,
+ cbHeap,
+ offHeap,
+ cBlocks,
+ paDescriptors,
+ cbMaxBlock,
+ &g_hgsmiEnv);
+
+ RTMemFree(paDescriptors);
+ }
+ }
+ else if ( u32HeapType == HGSMI_HEAP_TYPE_OFFSET
+ || u32HeapType == HGSMI_HEAP_TYPE_POINTER)
+ {
+ rc = hgsmiHostHeapLock(pIns);
+ if (RT_SUCCESS(rc))
+ {
+ Assert(!pIns->hostHeap.cRefs);
+ pIns->hostHeap.cRefs = 0;
+
+ rc = hgsmiHostHeapRelocate(&pIns->hostHeap,
+ u32HeapType,
+ pIns->area.pu8Base+offHeap,
+ off,
+ uintptr_t(pIns->area.pu8Base) - uintptr_t(oldMem),
+ cbHeap,
+ offHeap);
+
+ hgsmiHostHeapUnlock(pIns);
+ }
+ }
+ }
+ }
+
+ VBOXHGSMI_LOAD_STOP(pSSM);
+
+ return rc;
+}
+
+/*
+ * Channels management.
+ */
+
+/* Register a new HGSMI channel by a predefined index.
+ */
+int HGSMIHostChannelRegister(PHGSMIINSTANCE pIns, uint8_t u8Channel,
+ PFNHGSMICHANNELHANDLER pfnChannelHandler, void *pvChannelHandler)
+{
+ LogFlowFunc(("pIns %p, u8Channel %x, pfnChannelHandler %p, pvChannelHandler %p\n",
+ pIns, u8Channel, pfnChannelHandler, pvChannelHandler));
+
+ AssertReturn(!HGSMI_IS_DYNAMIC_CHANNEL(u8Channel), VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pIns, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pfnChannelHandler, VERR_INVALID_PARAMETER);
+
+ int rc = hgsmiLock(pIns);
+
+ if (RT_SUCCESS(rc))
+ {
+ rc = HGSMIChannelRegister(&pIns->channelInfo, u8Channel, NULL, pfnChannelHandler, pvChannelHandler);
+
+ hgsmiUnlock(pIns);
+ }
+
+ LogFlowFunc(("leave rc = %Rrc\n", rc));
+ return rc;
+}
+
+#if 0 /* unused */
+
+static int hgsmiChannelMapCreate(PHGSMIINSTANCE pIns, const char *pszChannel, uint8_t *pu8Channel)
+{
+ RT_NOREF(pIns, pszChannel, pu8Channel);
+ /** @todo later */
+ return VERR_NOT_SUPPORTED;
+}
+
+/**
+ * Register a new HGSMI channel by name.
+ *
+ * @note currently unused.
+ */
+int HGSMIChannelRegisterName(PHGSMIINSTANCE pIns,
+ const char *pszChannel,
+ PFNHGSMICHANNELHANDLER pfnChannelHandler,
+ void *pvChannelHandler,
+ uint8_t *pu8Channel)
+{
+ LogFlowFunc(("pIns %p, pszChannel %s, pfnChannelHandler %p, pvChannelHandler %p, pu8Channel %p\n",
+ pIns, pszChannel, pfnChannelHandler, pvChannelHandler, pu8Channel));
+
+ AssertPtrReturn(pIns, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pszChannel, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pu8Channel, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pfnChannelHandler, VERR_INVALID_PARAMETER);
+
+ int rc;
+
+ /* The pointer to the copy will be saved in the channel description. */
+ char *pszName = RTStrDup (pszChannel);
+
+ if (pszName)
+ {
+ rc = hgsmiLock (pIns);
+
+ if (RT_SUCCESS (rc))
+ {
+ rc = hgsmiChannelMapCreate (pIns, pszName, pu8Channel);
+
+ if (RT_SUCCESS (rc))
+ {
+ rc = HGSMIChannelRegister (&pIns->channelInfo, *pu8Channel, pszName, pfnChannelHandler, pvChannelHandler);
+ }
+
+ hgsmiUnlock (pIns);
+ }
+
+ if (RT_FAILURE (rc))
+ {
+ RTStrFree (pszName);
+ }
+ }
+ else
+ {
+ rc = VERR_NO_MEMORY;
+ }
+
+ LogFlowFunc(("leave rc = %Rrc\n", rc));
+
+ return rc;
+}
+#endif
+
+void RT_UNTRUSTED_VOLATILE_GUEST *HGSMIOffsetToPointerHost(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer)
+{
+ const HGSMIAREA *pArea = &pIns->area;
+ HGSMIOFFSET const offArea = offBuffer - pArea->offBase;
+ ASSERT_GUEST_MSG_RETURN(offArea < pArea->cbArea,
+ ("offBuffer=%#x; area %#x LB %#x\n", offBuffer, pArea->offBase, pArea->cbArea),
+ NULL);
+ return &pArea->pu8Base[offArea];
+}
+
+
+HGSMIOFFSET HGSMIPointerToOffsetHost(PHGSMIINSTANCE pIns, const void RT_UNTRUSTED_VOLATILE_GUEST *pv)
+{
+ const HGSMIAREA *pArea = &pIns->area;
+ uintptr_t const offArea = (uintptr_t)pv - (uintptr_t)pArea->pu8Base;
+ ASSERT_GUEST_MSG_RETURN(offArea < pArea->cbArea,
+ ("pv=%p; area %#x LB %#x\n", pv, pArea->offBase, pArea->cbArea),
+ HGSMIOFFSET_VOID);
+ return pArea->offBase + (HGSMIOFFSET)offArea;
+}
+
+
+/**
+ * Checks if @a offBuffer is within the area of this instance.
+ *
+ * This is for use in input validations.
+ *
+ * @returns true / false.
+ * @param pIns The instance.
+ * @param offBuffer The buffer offset to check.
+ */
+bool HGSMIIsOffsetValid(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer)
+{
+ return pIns
+ && offBuffer - pIns->area.offBase < pIns->area.cbArea;
+}
+
+
+/**
+ * Returns the area offset for use in logging and assertion messages.
+ */
+HGSMIOFFSET HGSMIGetAreaOffset(PHGSMIINSTANCE pIns)
+{
+ return pIns ? pIns->area.offBase : ~(HGSMIOFFSET)0;
+}
+
+
+/**
+ * Returns the area size for use in logging and assertion messages.
+ */
+HGSMIOFFSET HGSMIGetAreaSize(PHGSMIINSTANCE pIns)
+{
+ return pIns ? pIns->area.cbArea : 0;
+}
+
+
+void *HGSMIContext(PHGSMIINSTANCE pIns)
+{
+ uint8_t *p = (uint8_t *)pIns;
+ return p + sizeof(HGSMIINSTANCE);
+}
+
+/* The guest submitted a buffer. */
+static DECLCALLBACK(int) hgsmiChannelHandler(void *pvHandler, uint16_t u16ChannelInfo,
+ RT_UNTRUSTED_VOLATILE_GUEST void *pvBuffer, HGSMISIZE cbBuffer)
+{
+ int rc = VINF_SUCCESS;
+
+ LogFlowFunc(("pvHandler %p, u16ChannelInfo %d, pvBuffer %p, cbBuffer %u\n",
+ pvHandler, u16ChannelInfo, pvBuffer, cbBuffer));
+
+ PHGSMIINSTANCE pIns = (PHGSMIINSTANCE)pvHandler;
+
+ switch (u16ChannelInfo)
+ {
+ case HGSMI_CC_HOST_FLAGS_LOCATION:
+ {
+ ASSERT_GUEST_RETURN(cbBuffer >= sizeof(HGSMIBUFFERLOCATION), VERR_INVALID_PARAMETER);
+ HGSMIBUFFERLOCATION RT_UNTRUSTED_VOLATILE_GUEST *pLoc = (HGSMIBUFFERLOCATION RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+ HGSMIBUFFERLOCATION LocSafe;
+ LocSafe.cbLocation = pLoc->cbLocation;
+ LocSafe.offLocation = pLoc->offLocation;
+ RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+ ASSERT_GUEST_RETURN(LocSafe.cbLocation == sizeof(HGSMIHOSTFLAGS), VERR_INVALID_PARAMETER);
+ ASSERT_GUEST_RETURN(LocSafe.offLocation + sizeof(HGSMIHOSTFLAGS) == pIns->area.cbArea, VERR_INVALID_PARAMETER);
+ RT_UNTRUSTED_VALIDATED_FENCE();
+
+ pIns->pHGFlags = (HGSMIHOSTFLAGS RT_UNTRUSTED_VOLATILE_GUEST *)HGSMIOffsetToPointer(&pIns->area, LocSafe.offLocation);
+ break;
+ }
+
+ default:
+ Log(("Unsupported HGSMI guest command %d!!!\n",
+ u16ChannelInfo));
+ break;
+ }
+
+ return rc;
+}
+
+int HGSMICreate(PHGSMIINSTANCE *ppIns,
+ PPDMDEVINS pDevIns,
+ const char *pszName,
+ HGSMIOFFSET offBase,
+ uint8_t *pu8MemBase,
+ HGSMISIZE cbMem,
+ PFNHGSMINOTIFYGUEST pfnNotifyGuest,
+ void *pvNotifyGuest,
+ size_t cbContext)
+{
+ LogFlowFunc(("ppIns = %p, pDevIns = %p, pszName = [%s], offBase = 0x%08X, pu8MemBase = %p, cbMem = 0x%08X, "
+ "pfnNotifyGuest = %p, pvNotifyGuest = %p, cbContext = %d\n",
+ ppIns,
+ pDevIns,
+ pszName,
+ offBase,
+ pu8MemBase,
+ cbMem,
+ pfnNotifyGuest,
+ pvNotifyGuest,
+ cbContext
+ ));
+
+ AssertPtrReturn(ppIns, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pDevIns, VERR_INVALID_PARAMETER);
+ AssertPtrReturn(pu8MemBase, VERR_INVALID_PARAMETER);
+
+ int rc;
+ PHGSMIINSTANCE pIns = (PHGSMIINSTANCE)RTMemAllocZ(sizeof(HGSMIINSTANCE) + cbContext);
+ if (pIns)
+ {
+ rc = HGSMIAreaInitialize(&pIns->area, pu8MemBase, cbMem, offBase);
+ if (RT_SUCCESS (rc))
+ rc = RTCritSectInit(&pIns->instanceCritSect);
+ if (RT_SUCCESS (rc))
+ rc = RTCritSectInit(&pIns->hostHeapCritSect);
+ if (RT_SUCCESS (rc))
+ rc = RTCritSectInit(&pIns->hostFIFOCritSect);
+ if (RT_SUCCESS (rc))
+ {
+ pIns->pDevIns = pDevIns;
+ pIns->pszName = RT_VALID_PTR(pszName) ? pszName : "";
+
+ hgsmiHostHeapSetupUninitialized(&pIns->hostHeap);
+
+ pIns->pfnNotifyGuest = pfnNotifyGuest;
+ pIns->pvNotifyGuest = pvNotifyGuest;
+
+ RTListInit(&pIns->hostFIFO);
+ RTListInit(&pIns->hostFIFORead);
+ RTListInit(&pIns->hostFIFOProcessed);
+ RTListInit(&pIns->hostFIFOFree);
+ RTListInit(&pIns->guestCmdCompleted);
+
+ rc = HGSMIHostChannelRegister(pIns, HGSMI_CH_HGSMI, hgsmiChannelHandler, pIns);
+ }
+ if (RT_SUCCESS (rc))
+ *ppIns = pIns;
+ else
+ HGSMIDestroy(pIns);
+ }
+ else
+ rc = VERR_NO_MEMORY;
+
+ LogFlowFunc(("leave rc = %Rrc, pIns = %p\n", rc, pIns));
+ return rc;
+}
+
+uint32_t HGSMIReset(PHGSMIINSTANCE pIns)
+{
+ uint32_t flags = 0;
+ if (pIns->pHGFlags)
+ {
+ /* treat the abandoned commands as read.. */
+ while (HGSMIHostRead(pIns) != HGSMIOFFSET_VOID)
+ {}
+ flags = pIns->pHGFlags->u32HostFlags;
+ pIns->pHGFlags->u32HostFlags = 0;
+ }
+
+ /* .. and complete them */
+ while (hgsmiProcessHostCmdCompletion(pIns, 0, true))
+ {}
+
+#ifdef VBOX_WITH_WDDM
+ while (hgsmiProcessGuestCmdCompletion(pIns) != HGSMIOFFSET_VOID)
+ {}
+#endif
+
+ hgsmiHostHeapDestroy(&pIns->hostHeap);
+
+ return flags;
+}
+
+void HGSMIDestroy(PHGSMIINSTANCE pIns)
+{
+ LogFlowFunc(("pIns = %p\n", pIns));
+
+ if (pIns)
+ {
+ hgsmiHostHeapDestroy(&pIns->hostHeap);
+ if (RTCritSectIsInitialized(&pIns->hostHeapCritSect))
+ RTCritSectDelete(&pIns->hostHeapCritSect);
+ if (RTCritSectIsInitialized(&pIns->instanceCritSect))
+ RTCritSectDelete(&pIns->instanceCritSect);
+ if (RTCritSectIsInitialized(&pIns->hostFIFOCritSect))
+ RTCritSectDelete(&pIns->hostFIFOCritSect);
+
+ memset(pIns, 0, sizeof (HGSMIINSTANCE));
+ RTMemFree(pIns);
+ }
+
+ LogFlowFunc(("leave\n"));
+}
+
+#ifdef VBOX_WITH_WDDM
+
+static int hgsmiGuestCommandComplete(HGSMIINSTANCE *pIns, HGSMIOFFSET offMem)
+{
+ HGSMIGUESTCOMPLENTRY *pEntry = NULL;
+
+ AssertPtrReturn(pIns->pHGFlags, VERR_WRONG_ORDER);
+ int rc = hgsmiGuestCompletionFIFOAlloc(pIns, &pEntry);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ pEntry->offBuffer = offMem;
+
+ rc = hgsmiFIFOLock(pIns);
+ AssertRC(rc);
+ if (RT_SUCCESS(rc))
+ {
+ RTListAppend(&pIns->guestCmdCompleted, &pEntry->nodeEntry);
+ ASMAtomicOrU32(&pIns->pHGFlags->u32HostFlags, HGSMIHOSTFLAGS_GCOMMAND_COMPLETED);
+
+ hgsmiFIFOUnlock(pIns);
+ }
+ else
+ hgsmiGuestCompletionFIFOFree(pIns, pEntry);
+ }
+
+ return rc;
+}
+
+int hgsmiCompleteGuestCommand(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer, bool fDoIrq)
+{
+ int rc = hgsmiGuestCommandComplete(pIns, offBuffer);
+ if (RT_SUCCESS (rc))
+ {
+#ifdef DEBUG_misha
+ Assert(fDoIrq);
+#endif
+ if (fDoIrq)
+ {
+ /* Now guest can read the FIFO, the notification is informational. */
+ hgsmiNotifyGuest (pIns);
+ }
+ }
+ return rc;
+}
+
+int HGSMICompleteGuestCommand(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvMem, bool fDoIrq)
+{
+ LogFlowFunc(("pIns = %p, pvMem = %p\n", pIns, pvMem));
+
+ HGSMIBUFFERHEADER RT_UNTRUSTED_VOLATILE_GUEST *pHeader = HGSMIBufferHeaderFromData(pvMem);
+ HGSMIOFFSET offBuffer = HGSMIPointerToOffset(&pIns->area, pHeader);
+ ASSERT_GUEST_RETURN(offBuffer != HGSMIOFFSET_VOID, VERR_INVALID_PARAMETER);
+
+ int rc = hgsmiCompleteGuestCommand(pIns, offBuffer, fDoIrq);
+ AssertRC(rc);
+
+ LogFlowFunc(("rc = %Rrc\n", rc));
+ return rc;
+}
+
+#endif /* VBOX_WITH_WDDM */
+
diff --git a/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h
new file mode 100644
index 00000000..6f925d50
--- /dev/null
+++ b/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.h
@@ -0,0 +1,122 @@
+/* $Id: HGSMIHost.h $ */
+/** @file
+ * VBox Host Guest Shared Memory Interface (HGSMI), host part.
+ */
+
+/*
+ * Copyright (C) 2006-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_HGSMI_HGSMIHost_h
+#define VBOX_INCLUDED_SRC_Graphics_HGSMI_HGSMIHost_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBox/types.h>
+#include <HGSMI.h>
+#include <HGSMIChSetup.h>
+
+struct HGSMIINSTANCE;
+typedef struct HGSMIINSTANCE *PHGSMIINSTANCE;
+
+/** Callback for the guest notification about a new host buffer. */
+typedef DECLCALLBACKTYPE(void, FNHGSMINOTIFYGUEST,(void *pvCallback));
+typedef FNHGSMINOTIFYGUEST *PFNHGSMINOTIFYGUEST;
+
+/*
+ * Public Host API for virtual devices.
+ */
+
+int HGSMICreate(PHGSMIINSTANCE *ppIns,
+ PPDMDEVINS pDevIns,
+ const char *pszName,
+ HGSMIOFFSET offBase,
+ uint8_t *pu8MemBase,
+ HGSMISIZE cbMem,
+ PFNHGSMINOTIFYGUEST pfnNotifyGuest,
+ void *pvNotifyGuest,
+ size_t cbContext);
+void HGSMIDestroy(PHGSMIINSTANCE pIns);
+void *HGSMIContext(PHGSMIINSTANCE pIns);
+
+void RT_UNTRUSTED_VOLATILE_GUEST *HGSMIOffsetToPointerHost(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer);
+HGSMIOFFSET HGSMIPointerToOffsetHost(PHGSMIINSTANCE pIns, const void RT_UNTRUSTED_VOLATILE_GUEST *pv);
+bool HGSMIIsOffsetValid(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer);
+HGSMIOFFSET HGSMIGetAreaOffset(PHGSMIINSTANCE pIns);
+HGSMIOFFSET HGSMIGetAreaSize(PHGSMIINSTANCE pIns);
+
+
+int HGSMIHostChannelRegister(PHGSMIINSTANCE pIns, uint8_t u8Channel,
+ PFNHGSMICHANNELHANDLER pfnChannelHandler, void *pvChannelHandler);
+#if 0 /* unused */
+int HGSMIChannelRegisterName (PHGSMIINSTANCE pIns,
+ const char *pszChannel,
+ PFNHGSMICHANNELHANDLER pfnChannelHandler,
+ void *pvChannelHandler,
+ uint8_t *pu8Channel);
+#endif
+
+int HGSMIHostHeapSetup(PHGSMIINSTANCE pIns, HGSMIOFFSET RT_UNTRUSTED_GUEST offHeap, HGSMISIZE RT_UNTRUSTED_GUEST cbHeap);
+
+/*
+ * Virtual hardware IO handlers.
+ */
+
+/* Guests passes a new command buffer to the host. */
+void HGSMIGuestWrite(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer);
+
+/* Guest reads information about guest buffers. */
+HGSMIOFFSET HGSMIGuestRead(PHGSMIINSTANCE pIns);
+
+/* Guest reads the host FIFO to get a command. */
+HGSMIOFFSET HGSMIHostRead(PHGSMIINSTANCE pIns);
+
+/* Guest reports that the command at this offset has been processed. */
+void HGSMIHostWrite(PHGSMIINSTANCE pIns, HGSMIOFFSET offBuffer);
+
+void HGSMISetHostGuestFlags(PHGSMIINSTANCE pIns, uint32_t flags);
+uint32_t HGSMIGetHostGuestFlags(HGSMIINSTANCE *pIns);
+
+void HGSMIClearHostGuestFlags(PHGSMIINSTANCE pIns, uint32_t flags);
+
+/*
+ * Low level interface for submitting buffers to the guest.
+ *
+ * These functions are not directly available for anyone but the
+ * virtual hardware device.
+ */
+
+/* Allocate a buffer in the host heap. */
+int HGSMIHostCommandAlloc(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST **ppvData, HGSMISIZE cbData,
+ uint8_t u8Channel, uint16_t u16ChannelInfo);
+int HGSMIHostCommandSubmitAndFreeAsynch(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData, bool fDoIrq);
+int HGSMIHostCommandFree(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData);
+
+int HGSMIHostLoadStateExec(const struct PDMDEVHLPR3 *pHlp, PHGSMIINSTANCE pIns, PSSMHANDLE pSSM, uint32_t u32Version);
+int HGSMIHostSaveStateExec(const struct PDMDEVHLPR3 *pHlp, PHGSMIINSTANCE pIns, PSSMHANDLE pSSM);
+
+#ifdef VBOX_WITH_WDDM
+int HGSMICompleteGuestCommand(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvMem, bool fDoIrq);
+#endif
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_HGSMI_HGSMIHost_h */
+
diff --git a/src/VBox/Devices/Graphics/HGSMI/Makefile.kup b/src/VBox/Devices/Graphics/HGSMI/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/HGSMI/Makefile.kup
diff --git a/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp
new file mode 100644
index 00000000..ddd323ad
--- /dev/null
+++ b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.cpp
@@ -0,0 +1,61 @@
+/* $Id: SHGSMIHost.cpp $ */
+/** @file
+ * Missing description.
+ */
+
+/*
+ * Copyright (C) 2010-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#include "SHGSMIHost.h"
+#include <VBoxVideo.h>
+
+/*
+ * VBOXSHGSMI made on top HGSMI and allows receiving notifications
+ * about G->H command completion
+ */
+
+static int vboxSHGSMICommandCompleteAsynch (PHGSMIINSTANCE pIns, VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_GUEST *pHdr)
+{
+ bool fDoIrq = !!(pHdr->fFlags & VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ)
+ || !!(pHdr->fFlags & VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ_FORCE);
+ return HGSMICompleteGuestCommand(pIns, pHdr, fDoIrq);
+}
+
+void VBoxSHGSMICommandMarkAsynchCompletion(void RT_UNTRUSTED_VOLATILE_GUEST *pvData)
+{
+ VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_GUEST *pHdr = VBoxSHGSMIBufferHeader(pvData);
+ Assert(!(pHdr->fFlags & VBOXSHGSMI_FLAG_HG_ASYNCH));
+ pHdr->fFlags |= VBOXSHGSMI_FLAG_HG_ASYNCH;
+}
+
+int VBoxSHGSMICommandComplete(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData)
+{
+ VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_GUEST *pHdr = VBoxSHGSMIBufferHeader(pvData);
+ uint32_t fFlags = pHdr->fFlags;
+ ASMCompilerBarrier();
+ if ( !(fFlags & VBOXSHGSMI_FLAG_HG_ASYNCH) /* <- check if synchronous completion */
+ && !(fFlags & VBOXSHGSMI_FLAG_GH_ASYNCH_FORCE)) /* <- check if can complete synchronously */
+ return VINF_SUCCESS;
+
+ pHdr->fFlags = fFlags | VBOXSHGSMI_FLAG_HG_ASYNCH;
+ return vboxSHGSMICommandCompleteAsynch(pIns, pHdr);
+}
diff --git a/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h
new file mode 100644
index 00000000..9940fcbd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/HGSMI/SHGSMIHost.h
@@ -0,0 +1,40 @@
+/* $Id: SHGSMIHost.h $ */
+/** @file
+ * Missing description
+ */
+
+/*
+ * Copyright (C) 2010-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_HGSMI_SHGSMIHost_h
+#define VBOX_INCLUDED_SRC_Graphics_HGSMI_SHGSMIHost_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include "HGSMIHost.h"
+
+int VBoxSHGSMICommandComplete(PHGSMIINSTANCE pIns, void RT_UNTRUSTED_VOLATILE_GUEST *pvData);
+void VBoxSHGSMICommandMarkAsynchCompletion(void RT_UNTRUSTED_VOLATILE_GUEST *pvData);
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_HGSMI_SHGSMIHost_h */
+
diff --git a/src/VBox/Devices/Graphics/Makefile.kup b/src/VBox/Devices/Graphics/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/Makefile.kup
diff --git a/src/VBox/Devices/Graphics/VBoxSVGA3D.def b/src/VBox/Devices/Graphics/VBoxSVGA3D.def
new file mode 100644
index 00000000..5f2fe196
--- /dev/null
+++ b/src/VBox/Devices/Graphics/VBoxSVGA3D.def
@@ -0,0 +1,49 @@
+; $Id: VBoxSVGA3D.def $
+;; @file
+; VBoxSVGA3D - Definition file for lazy import generation.
+;
+
+;
+; Copyright (C) 2014-2022 Oracle and/or its affiliates.
+;
+; This file is part of VirtualBox base platform packages, as
+; available from https://www.virtualbox.org.
+;
+; This program is free software; you can redistribute it and/or
+; modify it under the terms of the GNU General Public License
+; as published by the Free Software Foundation, in version 3 of the
+; License.
+;
+; This program is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this program; if not, see <https://www.gnu.org/licenses>.
+;
+; SPDX-License-Identifier: GPL-3.0-only
+;
+
+LIBRARY VBoxSVGA3D
+EXPORTS
+ ShaderInitLib
+ ShaderDestroyLib
+ ShaderContextCreate
+ ShaderContextDestroy
+ ShaderCreateVertexShader
+ ShaderCreatePixelShader
+ ShaderDestroyVertexShader
+ ShaderDestroyPixelShader
+ ShaderSetVertexShader
+ ShaderSetPixelShader
+ ShaderSetVertexShaderConstantB
+ ShaderSetVertexShaderConstantI
+ ShaderSetVertexShaderConstantF
+ ShaderSetPixelShaderConstantB
+ ShaderSetPixelShaderConstantI
+ ShaderSetPixelShaderConstantF
+ ShaderUpdateState
+ ShaderTransformProjection
+ ShaderSetPositionTransformed
+
diff --git a/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def b/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def
new file mode 100644
index 00000000..724d5a7d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/VBoxSVGA3DObjC.def
@@ -0,0 +1,39 @@
+; $Id: VBoxSVGA3DObjC.def $
+;; @file
+; VBoxSVGA3DObjC - Definition file for lazy import generation (darwin specific).
+;
+
+;
+; Copyright (C) 2014-2022 Oracle and/or its affiliates.
+;
+; This file is part of VirtualBox base platform packages, as
+; available from https://www.virtualbox.org.
+;
+; This program is free software; you can redistribute it and/or
+; modify it under the terms of the GNU General Public License
+; as published by the Free Software Foundation, in version 3 of the
+; License.
+;
+; This program is distributed in the hope that it will be useful, but
+; WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this program; if not, see <https://www.gnu.org/licenses>.
+;
+; SPDX-License-Identifier: GPL-3.0-only
+;
+
+LIBRARY VBoxSVGA3DObjC
+EXPORTS
+ vmsvga3dCocoaServiceRunLoop
+ vmsvga3dCocoaCreateViewAndContext
+ vmsvga3dCocoaDestroyViewAndContext
+ vmsvga3dCocoaViewInfo
+ vmsvga3dCocoaViewSetPosition
+ vmsvga3dCocoaViewSetSize
+ vmsvga3dCocoaViewUpdateViewport
+ vmsvga3dCocoaViewMakeCurrentContext
+ vmsvga3dCocoaSwapBuffers
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/Makefile.kup b/src/VBox/Devices/Graphics/shaderlib/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/Makefile.kup
diff --git a/src/VBox/Devices/Graphics/shaderlib/directx.c b/src/VBox/Devices/Graphics/shaderlib/directx.c
new file mode 100644
index 00000000..7cd1e59d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/directx.c
@@ -0,0 +1,2672 @@
+/*
+ * IWineD3D implementation
+ *
+ * Copyright 2002-2004 Jason Edmeades
+ * Copyright 2003-2004 Raphael Junqueira
+ * Copyright 2004 Christian Costa
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include <stdio.h>
+#include "wined3d_private.h"
+
+#ifdef VBOX_WITH_WDDM
+# include <VBoxCrHgsmi.h>
+#endif
+
+#ifdef VBOX_WITH_VMSVGA
+# ifdef RT_OS_WINDOWS
+DECLIMPORT(void) APIENTRY glFinish(void);
+# else
+void glFinish(void);
+# endif
+#endif
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+WINE_DECLARE_DEBUG_CHANNEL(d3d_caps);
+
+#define GLINFO_LOCATION (*gl_info)
+#define WINE_DEFAULT_VIDMEM (64 * 1024 * 1024)
+
+/* The d3d device ID */
+#if 0 /* VBox: unused */
+static const GUID IID_D3DDEVICE_D3DUID = { 0xaeb2cdd4, 0x6e41, 0x43ea, { 0x94,0x1c,0x83,0x61,0xcc,0x76,0x07,0x81 } };
+#endif
+
+
+/* Extension detection */
+static const struct {
+ const char *extension_string;
+ GL_SupportedExt extension;
+ DWORD version;
+} EXTENSION_MAP[] = {
+ /* APPLE */
+ {"GL_APPLE_client_storage", APPLE_CLIENT_STORAGE, 0 },
+ {"GL_APPLE_fence", APPLE_FENCE, 0 },
+ {"GL_APPLE_float_pixels", APPLE_FLOAT_PIXELS, 0 },
+ {"GL_APPLE_flush_buffer_range", APPLE_FLUSH_BUFFER_RANGE, 0 },
+ {"GL_APPLE_flush_render", APPLE_FLUSH_RENDER, 0 },
+ {"GL_APPLE_ycbcr_422", APPLE_YCBCR_422, 0 },
+
+ /* ARB */
+ {"GL_ARB_color_buffer_float", ARB_COLOR_BUFFER_FLOAT, 0 },
+ {"GL_ARB_depth_buffer_float", ARB_DEPTH_BUFFER_FLOAT, 0 },
+ {"GL_ARB_depth_clamp", ARB_DEPTH_CLAMP, 0 },
+ {"GL_ARB_depth_texture", ARB_DEPTH_TEXTURE, 0 },
+ {"GL_ARB_draw_buffers", ARB_DRAW_BUFFERS, 0 },
+ {"GL_ARB_fragment_program", ARB_FRAGMENT_PROGRAM, 0 },
+ {"GL_ARB_fragment_shader", ARB_FRAGMENT_SHADER, 0 },
+ {"GL_ARB_framebuffer_object", ARB_FRAMEBUFFER_OBJECT, 0 },
+ {"GL_ARB_geometry_shader4", ARB_GEOMETRY_SHADER4, 0 },
+ {"GL_ARB_half_float_pixel", ARB_HALF_FLOAT_PIXEL, 0 },
+ {"GL_ARB_half_float_vertex", ARB_HALF_FLOAT_VERTEX, 0 },
+ {"GL_ARB_imaging", ARB_IMAGING, 0 },
+ {"GL_ARB_map_buffer_range", ARB_MAP_BUFFER_RANGE, 0 },
+ {"GL_ARB_multisample", ARB_MULTISAMPLE, 0 }, /* needs GLX_ARB_MULTISAMPLE as well */
+ {"GL_ARB_multitexture", ARB_MULTITEXTURE, 0 },
+ {"GL_ARB_occlusion_query", ARB_OCCLUSION_QUERY, 0 },
+ {"GL_ARB_pixel_buffer_object", ARB_PIXEL_BUFFER_OBJECT, 0 },
+ {"GL_ARB_point_parameters", ARB_POINT_PARAMETERS, 0 },
+ {"GL_ARB_point_sprite", ARB_POINT_SPRITE, 0 },
+ {"GL_ARB_provoking_vertex", ARB_PROVOKING_VERTEX, 0 },
+ {"GL_ARB_shader_objects", ARB_SHADER_OBJECTS, 0 },
+ {"GL_ARB_shader_texture_lod", ARB_SHADER_TEXTURE_LOD, 0 },
+ {"GL_ARB_shading_language_100", ARB_SHADING_LANGUAGE_100, 0 },
+ {"GL_ARB_sync", ARB_SYNC, 0 },
+ {"GL_ARB_texture_border_clamp", ARB_TEXTURE_BORDER_CLAMP, 0 },
+ {"GL_ARB_texture_compression", ARB_TEXTURE_COMPRESSION, 0 },
+ {"GL_ARB_texture_cube_map", ARB_TEXTURE_CUBE_MAP, 0 },
+ {"GL_ARB_texture_env_add", ARB_TEXTURE_ENV_ADD, 0 },
+ {"GL_ARB_texture_env_combine", ARB_TEXTURE_ENV_COMBINE, 0 },
+ {"GL_ARB_texture_env_dot3", ARB_TEXTURE_ENV_DOT3, 0 },
+ {"GL_ARB_texture_float", ARB_TEXTURE_FLOAT, 0 },
+ {"GL_ARB_texture_mirrored_repeat", ARB_TEXTURE_MIRRORED_REPEAT, 0 },
+ {"GL_IBM_texture_mirrored_repeat", ARB_TEXTURE_MIRRORED_REPEAT, 0 },
+ {"GL_ARB_texture_non_power_of_two", ARB_TEXTURE_NON_POWER_OF_TWO, MAKEDWORD_VERSION(2, 0) },
+ {"GL_ARB_texture_rectangle", ARB_TEXTURE_RECTANGLE, 0 },
+ {"GL_ARB_texture_rg", ARB_TEXTURE_RG, 0 },
+ {"GL_ARB_vertex_array_bgra", ARB_VERTEX_ARRAY_BGRA, 0 },
+ {"GL_ARB_vertex_blend", ARB_VERTEX_BLEND, 0 },
+ {"GL_ARB_vertex_buffer_object", ARB_VERTEX_BUFFER_OBJECT, 0 },
+ {"GL_ARB_vertex_program", ARB_VERTEX_PROGRAM, 0 },
+ {"GL_ARB_vertex_shader", ARB_VERTEX_SHADER, 0 },
+
+ /* ATI */
+ {"GL_ATI_fragment_shader", ATI_FRAGMENT_SHADER, 0 },
+ {"GL_ATI_separate_stencil", ATI_SEPARATE_STENCIL, 0 },
+ {"GL_ATI_texture_compression_3dc", ATI_TEXTURE_COMPRESSION_3DC, 0 },
+ {"GL_ATI_texture_env_combine3", ATI_TEXTURE_ENV_COMBINE3, 0 },
+ {"GL_ATI_texture_mirror_once", ATI_TEXTURE_MIRROR_ONCE, 0 },
+
+ /* EXT */
+ {"GL_EXT_blend_color", EXT_BLEND_COLOR, 0 },
+ {"GL_EXT_blend_equation_separate", EXT_BLEND_EQUATION_SEPARATE, 0 },
+ {"GL_EXT_blend_func_separate", EXT_BLEND_FUNC_SEPARATE, 0 },
+ {"GL_EXT_blend_minmax", EXT_BLEND_MINMAX, 0 },
+ {"GL_EXT_draw_buffers2", EXT_DRAW_BUFFERS2, 0 },
+ {"GL_EXT_fog_coord", EXT_FOG_COORD, 0 },
+ {"GL_EXT_framebuffer_blit", EXT_FRAMEBUFFER_BLIT, 0 },
+ {"GL_EXT_framebuffer_multisample", EXT_FRAMEBUFFER_MULTISAMPLE, 0 },
+ {"GL_EXT_framebuffer_object", EXT_FRAMEBUFFER_OBJECT, 0 },
+ {"GL_EXT_gpu_program_parameters", EXT_GPU_PROGRAM_PARAMETERS, 0 },
+ {"GL_EXT_gpu_shader4", EXT_GPU_SHADER4, 0 },
+ {"GL_EXT_packed_depth_stencil", EXT_PACKED_DEPTH_STENCIL, 0 },
+ {"GL_EXT_paletted_texture", EXT_PALETTED_TEXTURE, 0 },
+ {"GL_EXT_point_parameters", EXT_POINT_PARAMETERS, 0 },
+ {"GL_EXT_provoking_vertex", EXT_PROVOKING_VERTEX, 0 },
+ {"GL_EXT_secondary_color", EXT_SECONDARY_COLOR, 0 },
+ {"GL_EXT_stencil_two_side", EXT_STENCIL_TWO_SIDE, 0 },
+ {"GL_EXT_stencil_wrap", EXT_STENCIL_WRAP, 0 },
+ {"GL_EXT_texture3D", EXT_TEXTURE3D, MAKEDWORD_VERSION(1, 2) },
+ {"GL_EXT_texture_compression_rgtc", EXT_TEXTURE_COMPRESSION_RGTC, 0 },
+ {"GL_EXT_texture_compression_s3tc", EXT_TEXTURE_COMPRESSION_S3TC, 0 },
+ {"GL_EXT_texture_env_add", EXT_TEXTURE_ENV_ADD, 0 },
+ {"GL_EXT_texture_env_combine", EXT_TEXTURE_ENV_COMBINE, 0 },
+ {"GL_EXT_texture_env_dot3", EXT_TEXTURE_ENV_DOT3, 0 },
+ {"GL_EXT_texture_filter_anisotropic", EXT_TEXTURE_FILTER_ANISOTROPIC, 0 },
+ {"GL_EXT_texture_lod_bias", EXT_TEXTURE_LOD_BIAS, 0 },
+ {"GL_EXT_texture_sRGB", EXT_TEXTURE_SRGB, 0 },
+ {"GL_EXT_vertex_array_bgra", EXT_VERTEX_ARRAY_BGRA, 0 },
+
+ /* NV */
+ {"GL_NV_depth_clamp", NV_DEPTH_CLAMP, 0 },
+ {"GL_NV_fence", NV_FENCE, 0 },
+ {"GL_NV_fog_distance", NV_FOG_DISTANCE, 0 },
+ {"GL_NV_fragment_program", NV_FRAGMENT_PROGRAM, 0 },
+ {"GL_NV_fragment_program2", NV_FRAGMENT_PROGRAM2, 0 },
+ {"GL_NV_fragment_program_option", NV_FRAGMENT_PROGRAM_OPTION, 0 },
+ {"GL_NV_half_float", NV_HALF_FLOAT, 0 },
+ {"GL_NV_light_max_exponent", NV_LIGHT_MAX_EXPONENT, 0 },
+ {"GL_NV_register_combiners", NV_REGISTER_COMBINERS, 0 },
+ {"GL_NV_register_combiners2", NV_REGISTER_COMBINERS2, 0 },
+ {"GL_NV_texgen_reflection", NV_TEXGEN_REFLECTION, 0 },
+ {"GL_NV_texture_env_combine4", NV_TEXTURE_ENV_COMBINE4, 0 },
+ {"GL_NV_texture_shader", NV_TEXTURE_SHADER, 0 },
+ {"GL_NV_texture_shader2", NV_TEXTURE_SHADER2, 0 },
+ {"GL_NV_vertex_program", NV_VERTEX_PROGRAM, 0 },
+ {"GL_NV_vertex_program1_1", NV_VERTEX_PROGRAM1_1, 0 },
+ {"GL_NV_vertex_program2", NV_VERTEX_PROGRAM2, 0 },
+ {"GL_NV_vertex_program2_option", NV_VERTEX_PROGRAM2_OPTION, 0 },
+ {"GL_NV_vertex_program3", NV_VERTEX_PROGRAM3, 0 },
+
+ /* SGI */
+ {"GL_SGIS_generate_mipmap", SGIS_GENERATE_MIPMAP, 0 },
+};
+
+/**********************************************************
+ * Utility functions follow
+ **********************************************************/
+
+const struct min_lookup minMipLookup[] =
+{
+ /* NONE POINT LINEAR */
+ {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* NONE */
+ {{GL_NEAREST, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR}}, /* POINT*/
+ {{GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR}}, /* LINEAR */
+};
+
+const struct min_lookup minMipLookup_noFilter[] =
+{
+ /* NONE POINT LINEAR */
+ {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* NONE */
+ {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* POINT */
+ {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* LINEAR */
+};
+
+const struct min_lookup minMipLookup_noMip[] =
+{
+ /* NONE POINT LINEAR */
+ {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* NONE */
+ {{GL_NEAREST, GL_NEAREST, GL_NEAREST}}, /* POINT */
+ {{GL_LINEAR, GL_LINEAR, GL_LINEAR }}, /* LINEAR */
+};
+
+const GLenum magLookup[] =
+{
+ /* NONE POINT LINEAR */
+ GL_NEAREST, GL_NEAREST, GL_LINEAR,
+};
+
+const GLenum magLookup_noFilter[] =
+{
+ /* NONE POINT LINEAR */
+ GL_NEAREST, GL_NEAREST, GL_NEAREST,
+};
+
+/* drawStridedSlow attributes */
+glAttribFunc position_funcs[WINED3D_FFP_EMIT_COUNT];
+glAttribFunc diffuse_funcs[WINED3D_FFP_EMIT_COUNT];
+glAttribFunc specular_func_3ubv;
+glAttribFunc specular_funcs[WINED3D_FFP_EMIT_COUNT];
+glAttribFunc normal_funcs[WINED3D_FFP_EMIT_COUNT];
+glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT];
+
+
+/**********************************************************
+ * IWineD3D parts follows
+ **********************************************************/
+
+/* GL locking is done by the caller */
+static inline BOOL test_arb_vs_offset_limit(const struct wined3d_gl_info *gl_info)
+{
+ GLuint prog;
+ BOOL ret = FALSE;
+ const char *testcode =
+ "!!ARBvp1.0\n"
+ "PARAM C[66] = { program.env[0..65] };\n"
+ "ADDRESS A0;"
+ "PARAM zero = {0.0, 0.0, 0.0, 0.0};\n"
+ "ARL A0.x, zero.x;\n"
+ "MOV result.position, C[A0.x + 65];\n"
+ "END\n";
+
+ while(glGetError());
+ GL_EXTCALL(glGenProgramsARB(1, &prog));
+ if(!prog) {
+ ERR("Failed to create an ARB offset limit test program\n");
+ }
+ GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prog));
+ GL_EXTCALL(glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+ (GLsizei)strlen(testcode), testcode));
+ if(glGetError() != 0) {
+ TRACE("OpenGL implementation does not allow indirect addressing offsets > 63\n");
+ TRACE("error: %s\n", debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ ret = TRUE;
+ } else TRACE("OpenGL implementation allows offsets > 63\n");
+
+ GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0));
+ GL_EXTCALL(glDeleteProgramsARB(1, &prog));
+ checkGLcall("ARB vp offset limit test cleanup");
+
+ return ret;
+}
+
+static DWORD ver_for_ext(GL_SupportedExt ext)
+{
+ unsigned int i;
+ for (i = 0; i < (sizeof(EXTENSION_MAP) / sizeof(*EXTENSION_MAP)); ++i) {
+ if(EXTENSION_MAP[i].extension == ext) {
+ return EXTENSION_MAP[i].version;
+ }
+ }
+ return 0;
+}
+
+static BOOL match_ati_r300_to_500(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (card_vendor != HW_VENDOR_ATI) return FALSE;
+ if (device == CARD_ATI_RADEON_9500) return TRUE;
+ if (device == CARD_ATI_RADEON_X700) return TRUE;
+ if (device == CARD_ATI_RADEON_X1600) return TRUE;
+ return FALSE;
+}
+
+static BOOL match_geforce5(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (card_vendor == HW_VENDOR_NVIDIA)
+ {
+ if (device == CARD_NVIDIA_GEFORCEFX_5800 || device == CARD_NVIDIA_GEFORCEFX_5600)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static BOOL match_apple(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ /* MacOS has various specialities in the extensions it advertises. Some have to be loaded from
+ * the opengl 1.2+ core, while other extensions are advertised, but software emulated. So try to
+ * detect the Apple OpenGL implementation to apply some extension fixups afterwards.
+ *
+ * Detecting this isn't really easy. The vendor string doesn't mention Apple. Compile-time checks
+ * aren't sufficient either because a Linux binary may display on a macos X server via remote X11.
+ * So try to detect the GL implementation by looking at certain Apple extensions. Some extensions
+ * like client storage might be supported on other implementations too, but GL_APPLE_flush_render
+ * is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So
+ * the chance that other implementations support them is rather small since Win32 QuickTime uses
+ * DirectDraw, not OpenGL.
+ *
+ * This test has been moved into wined3d_guess_gl_vendor()
+ */
+ if (gl_vendor == GL_VENDOR_APPLE)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* Context activation is done by the caller. */
+static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
+{
+ /* Some OpenGL implementations, namely Apple's Geforce 8 driver, advertises PBOs,
+ * but glTexSubImage from a PBO fails miserably, with the first line repeated over
+ * all the texture. This function detects this bug by its symptom and disables PBOs
+ * if the test fails.
+ *
+ * The test uploads a 4x4 texture via the PBO in the "native" format GL_BGRA,
+ * GL_UNSIGNED_INT_8_8_8_8_REV. This format triggers the bug, and it is what we use
+ * for D3DFMT_A8R8G8B8. Then the texture is read back without any PBO and the data
+ * read back is compared to the original. If they are equal PBOs are assumed to work,
+ * otherwise the PBO extension is disabled. */
+ GLuint texture, pbo;
+ static const unsigned int pattern[] =
+ {
+ 0x00000000, 0x000000ff, 0x0000ff00, 0x40ff0000,
+ 0x80ffffff, 0x40ffff00, 0x00ff00ff, 0x0000ffff,
+ 0x00ffff00, 0x00ff00ff, 0x0000ffff, 0x000000ff,
+ 0x80ff00ff, 0x0000ffff, 0x00ff00ff, 0x40ff00ff
+ };
+ unsigned int check[sizeof(pattern) / sizeof(pattern[0])];
+
+ /* No PBO -> No point in testing them. */
+ if (!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT]) return;
+
+ ENTER_GL();
+
+ while (glGetError());
+ glGenTextures(1, &texture);
+ glBindTexture(GL_TEXTURE_2D, texture);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 4, 4, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0);
+ checkGLcall("Specifying the PBO test texture");
+
+ GL_EXTCALL(glGenBuffersARB(1, &pbo));
+ GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pbo));
+ GL_EXTCALL(glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, sizeof(pattern), pattern, GL_STREAM_DRAW_ARB));
+ checkGLcall("Specifying the PBO test pbo");
+
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
+ checkGLcall("Loading the PBO test texture");
+
+ GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
+#ifdef VBOX_WITH_VMSVGA
+ glFinish();
+#else
+ wglFinish(); /* just to be sure */
+#endif
+ memset(check, 0, sizeof(check));
+ glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, check);
+ checkGLcall("Reading back the PBO test texture");
+
+ glDeleteTextures(1, &texture);
+ GL_EXTCALL(glDeleteBuffersARB(1, &pbo));
+ checkGLcall("PBO test cleanup");
+
+ LEAVE_GL();
+
+ if (memcmp(check, pattern, sizeof(check)))
+ {
+ WARN_(d3d_caps)("PBO test failed, read back data doesn't match original.\n");
+ WARN_(d3d_caps)("Disabling PBOs. This may result in slower performance.\n");
+ gl_info->supported[ARB_PIXEL_BUFFER_OBJECT] = FALSE;
+ }
+ else
+ {
+ TRACE_(d3d_caps)("PBO test successful.\n");
+ }
+}
+
+static BOOL match_apple_intel(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ return (card_vendor == HW_VENDOR_INTEL) && (gl_vendor == GL_VENDOR_APPLE);
+}
+
+static BOOL match_apple_nonr500ati(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (gl_vendor != GL_VENDOR_APPLE) return FALSE;
+ if (card_vendor != HW_VENDOR_ATI) return FALSE;
+ if (device == CARD_ATI_RADEON_X1600) return FALSE;
+ return TRUE;
+}
+
+static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ return gl_vendor == GL_VENDOR_FGLRX;
+
+}
+
+static BOOL match_dx10_capable(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ /* DX9 cards support 40 single float varyings in hardware, most drivers report 32. ATI misreports
+ * 44 varyings. So assume that if we have more than 44 varyings we have a dx10 card.
+ * This detection is for the gl_ClipPos varying quirk. If a d3d9 card really supports more than 44
+ * varyings and we subtract one in dx9 shaders its not going to hurt us because the dx9 limit is
+ * hardcoded
+ *
+ * dx10 cards usually have 64 varyings */
+ return gl_info->limits.glsl_varyings > 44;
+}
+
+/* A GL context is provided by the caller */
+static BOOL match_allows_spec_alpha(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ GLenum error;
+ DWORD data[16];
+
+ if (!gl_info->supported[EXT_SECONDARY_COLOR]) return FALSE;
+
+ ENTER_GL();
+ while(glGetError());
+ GL_EXTCALL(glSecondaryColorPointerEXT)(4, GL_UNSIGNED_BYTE, 4, data);
+ error = glGetError();
+ LEAVE_GL();
+
+ if(error == GL_NO_ERROR)
+ {
+ TRACE("GL Implementation accepts 4 component specular color pointers\n");
+ return TRUE;
+ }
+ else
+ {
+ TRACE("GL implementation does not accept 4 component specular colors, error %s\n",
+ debug_glerror(error));
+ return FALSE;
+ }
+}
+
+static BOOL match_apple_nvts(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (!match_apple(gl_info, gl_renderer, gl_vendor, card_vendor, device)) return FALSE;
+ return gl_info->supported[NV_TEXTURE_SHADER];
+}
+
+/* A GL context is provided by the caller */
+static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ GLuint prog;
+ BOOL ret = FALSE;
+ GLint pos;
+ const char *testcode =
+ "!!ARBvp1.0\n"
+ "OPTION NV_vertex_program2;\n"
+ "MOV result.clip[0], 0.0;\n"
+ "MOV result.position, 0.0;\n"
+ "END\n";
+
+ if (!gl_info->supported[NV_VERTEX_PROGRAM2_OPTION]) return FALSE;
+
+ ENTER_GL();
+ while(glGetError());
+
+ GL_EXTCALL(glGenProgramsARB(1, &prog));
+ if(!prog)
+ {
+ ERR("Failed to create the NVvp clip test program\n");
+ LEAVE_GL();
+ return FALSE;
+ }
+ GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prog));
+ GL_EXTCALL(glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+ (GLsizei)strlen(testcode), testcode));
+ glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
+ if(pos != -1)
+ {
+ WARN("GL_NV_vertex_program2_option result.clip[] test failed\n");
+ TRACE("error: %s\n", debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ ret = TRUE;
+ while(glGetError());
+ }
+ else TRACE("GL_NV_vertex_program2_option result.clip[] test passed\n");
+
+ GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0));
+ GL_EXTCALL(glDeleteProgramsARB(1, &prog));
+ checkGLcall("GL_NV_vertex_program2_option result.clip[] test cleanup");
+
+ LEAVE_GL();
+ return ret;
+}
+
+/* Context activation is done by the caller. */
+static BOOL match_fbo_tex_update(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ char data[4 * 4 * 4];
+ GLuint tex, fbo;
+ GLenum status;
+
+#ifndef VBOX_WITH_VMSVGA
+ if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) return FALSE;
+#endif
+ memset(data, 0xcc, sizeof(data));
+
+ ENTER_GL();
+
+ glGenTextures(1, &tex);
+ glBindTexture(GL_TEXTURE_2D, tex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 4, 4, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
+ checkGLcall("glTexImage2D");
+
+ gl_info->fbo_ops.glGenFramebuffers(1, &fbo);
+ gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+ gl_info->fbo_ops.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
+ checkGLcall("glFramebufferTexture2D");
+
+ status = gl_info->fbo_ops.glCheckFramebufferStatus(GL_FRAMEBUFFER);
+ if (status != GL_FRAMEBUFFER_COMPLETE) ERR("FBO status %#x\n", status);
+ checkGLcall("glCheckFramebufferStatus");
+
+ memset(data, 0x11, sizeof(data));
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, data);
+ checkGLcall("glTexSubImage2D");
+
+ glClearColor(0.996, 0.729, 0.745, 0.792);
+ glClear(GL_COLOR_BUFFER_BIT);
+ checkGLcall("glClear");
+
+ glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, data);
+ checkGLcall("glGetTexImage");
+
+ gl_info->fbo_ops.glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
+ gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ glBindTexture(GL_TEXTURE_2D, 0);
+ checkGLcall("glBindTexture");
+
+ gl_info->fbo_ops.glDeleteFramebuffers(1, &fbo);
+ glDeleteTextures(1, &tex);
+ checkGLcall("glDeleteTextures");
+
+ LEAVE_GL();
+
+ return *(DWORD *)data == 0x11111111;
+}
+
+static void quirk_arb_constants(struct wined3d_gl_info *gl_info)
+{
+ TRACE_(d3d_caps)("Using ARB vs constant limit(=%u) for GLSL.\n", gl_info->limits.arb_vs_native_constants);
+ gl_info->limits.glsl_vs_float_constants = gl_info->limits.arb_vs_native_constants;
+ TRACE_(d3d_caps)("Using ARB ps constant limit(=%u) for GLSL.\n", gl_info->limits.arb_ps_native_constants);
+ gl_info->limits.glsl_ps_float_constants = gl_info->limits.arb_ps_native_constants;
+}
+
+static void quirk_apple_glsl_constants(struct wined3d_gl_info *gl_info)
+{
+ quirk_arb_constants(gl_info);
+ /* MacOS needs uniforms for relative addressing offsets. This can accumulate to quite a few uniforms.
+ * Beyond that the general uniform isn't optimal, so reserve a number of uniforms. 12 vec4's should
+ * allow 48 different offsets or other helper immediate values. */
+ TRACE_(d3d_caps)("Reserving 12 GLSL constants for compiler private use.\n");
+ gl_info->reserved_glsl_constants = max(gl_info->reserved_glsl_constants, 12);
+}
+
+/* fglrx crashes with a very bad kernel panic if GL_POINT_SPRITE_ARB is set to GL_COORD_REPLACE_ARB
+ * on more than one texture unit. This means that the d3d9 visual point size test will cause a
+ * kernel panic on any machine running fglrx 9.3(latest that supports r300 to r500 cards). This
+ * quirk only enables point sprites on the first texture unit. This keeps point sprites working in
+ * most games, but avoids the crash
+ *
+ * A more sophisticated way would be to find all units that need texture coordinates and enable
+ * point sprites for one if only one is found, and software emulate point sprites in drawStridedSlow
+ * if more than one unit needs texture coordinates(This requires software ffp and vertex shaders though)
+ *
+ * Note that disabling the extension entirely does not gain predictability because there is no point
+ * sprite capability flag in d3d, so the potential rendering bugs are the same if we disable the extension. */
+static void quirk_one_point_sprite(struct wined3d_gl_info *gl_info)
+{
+ if (gl_info->supported[ARB_POINT_SPRITE])
+ {
+ TRACE("Limiting point sprites to one texture unit.\n");
+ gl_info->limits.point_sprite_units = 1;
+ }
+}
+
+static void quirk_ati_dx9(struct wined3d_gl_info *gl_info)
+{
+ quirk_arb_constants(gl_info);
+
+ /* MacOS advertises GL_ARB_texture_non_power_of_two on ATI r500 and earlier cards, although
+ * these cards only support GL_ARB_texture_rectangle(D3DPTEXTURECAPS_NONPOW2CONDITIONAL).
+ * If real NP2 textures are used, the driver falls back to software. We could just remove the
+ * extension and use GL_ARB_texture_rectangle instead, but texture_rectangle is inconventient
+ * due to the non-normalized texture coordinates. Thus set an internal extension flag,
+ * GL_WINE_normalized_texrect, which signals the code that it can use non power of two textures
+ * as per GL_ARB_texture_non_power_of_two, but has to stick to the texture_rectangle limits.
+ *
+ * fglrx doesn't advertise GL_ARB_texture_non_power_of_two, but it advertises opengl 2.0 which
+ * has this extension promoted to core. The extension loading code sets this extension supported
+ * due to that, so this code works on fglrx as well. */
+ if(gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO])
+ {
+ TRACE("GL_ARB_texture_non_power_of_two advertised on R500 or earlier card, removing.\n");
+ gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO] = FALSE;
+ gl_info->supported[WINE_NORMALIZED_TEXRECT] = TRUE;
+ }
+
+ /* fglrx has the same structural issues as the one described in quirk_apple_glsl_constants, although
+ * it is generally more efficient. Reserve just 8 constants. */
+ TRACE_(d3d_caps)("Reserving 8 GLSL constants for compiler private use.\n");
+ gl_info->reserved_glsl_constants = max(gl_info->reserved_glsl_constants, 8);
+}
+
+static void quirk_no_np2(struct wined3d_gl_info *gl_info)
+{
+ /* The nVidia GeForceFX series reports OpenGL 2.0 capabilities with the latest drivers versions, but
+ * doesn't explicitly advertise the ARB_tex_npot extension in the GL extension string.
+ * This usually means that ARB_tex_npot is supported in hardware as long as the application is staying
+ * within the limits enforced by the ARB_texture_rectangle extension. This however is not true for the
+ * FX series, which instantly falls back to a slower software path as soon as ARB_tex_npot is used.
+ * We therefore completely remove ARB_tex_npot from the list of supported extensions.
+ *
+ * Note that wine_normalized_texrect can't be used in this case because internally it uses ARB_tex_npot,
+ * triggering the software fallback. There is not much we can do here apart from disabling the
+ * software-emulated extension and reenable ARB_tex_rect (which was previously disabled
+ * in IWineD3DImpl_FillGLCaps).
+ * This fixup removes performance problems on both the FX 5900 and FX 5700 (e.g. for framebuffer
+ * post-processing effects in the game "Max Payne 2").
+ * The behaviour can be verified through a simple test app attached in bugreport #14724. */
+ TRACE("GL_ARB_texture_non_power_of_two advertised through OpenGL 2.0 on NV FX card, removing.\n");
+ gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO] = FALSE;
+ gl_info->supported[ARB_TEXTURE_RECTANGLE] = TRUE;
+}
+
+static void quirk_texcoord_w(struct wined3d_gl_info *gl_info)
+{
+ /* The Intel GPUs on MacOS set the .w register of texcoords to 0.0 by default, which causes problems
+ * with fixed function fragment processing. Ideally this flag should be detected with a test shader
+ * and OpenGL feedback mode, but some GL implementations (MacOS ATI at least, probably all MacOS ones)
+ * do not like vertex shaders in feedback mode and return an error, even though it should be valid
+ * according to the spec.
+ *
+ * We don't want to enable this on all cards, as it adds an extra instruction per texcoord used. This
+ * makes the shader slower and eats instruction slots which should be available to the d3d app.
+ *
+ * ATI Radeon HD 2xxx cards on MacOS have the issue. Instead of checking for the buggy cards, blacklist
+ * all radeon cards on Macs and whitelist the good ones. That way we're prepared for the future. If
+ * this workaround is activated on cards that do not need it, it won't break things, just affect
+ * performance negatively. */
+ TRACE("Enabling vertex texture coord fixes in vertex shaders.\n");
+ gl_info->quirks |= WINED3D_QUIRK_SET_TEXCOORD_W;
+}
+
+static void quirk_clip_varying(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_GLSL_CLIP_VARYING;
+}
+
+static void quirk_allows_specular_alpha(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA;
+}
+
+static void quirk_apple_nvts(struct wined3d_gl_info *gl_info)
+{
+ gl_info->supported[NV_TEXTURE_SHADER] = FALSE;
+ gl_info->supported[NV_TEXTURE_SHADER2] = FALSE;
+}
+
+static void quirk_disable_nvvp_clip(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_NV_CLIP_BROKEN;
+}
+
+static void quirk_fbo_tex_update(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_FBO_TEX_UPDATE;
+}
+
+static BOOL match_ati_hd4800(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (card_vendor != HW_VENDOR_ATI) return FALSE;
+ if (device == CARD_ATI_RADEON_HD4800) return TRUE;
+ return FALSE;
+}
+
+static void quirk_fullsize_blit(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_FULLSIZE_BLIT;
+}
+
+#ifdef VBOX_WITH_WDDM
+static BOOL match_mesa_nvidia(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (card_vendor != HW_VENDOR_NVIDIA) return FALSE;
+ if (gl_vendor != GL_VENDOR_MESA) return FALSE;
+ return TRUE;
+}
+
+static void quirk_no_shader_3(struct wined3d_gl_info *gl_info)
+{
+ int vs_selected_mode, ps_selected_mode;
+ select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+ if (vs_selected_mode != SHADER_GLSL && ps_selected_mode != SHADER_GLSL)
+ return;
+
+ gl_info->limits.arb_ps_instructions = 512;
+}
+#endif
+
+static BOOL match_intel(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ if (card_vendor == HW_VENDOR_INTEL) return TRUE;
+ if (gl_vendor == GL_VENDOR_INTEL) return TRUE;
+ return FALSE;
+}
+
+static void quirk_force_blit(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_FORCE_BLIT;
+}
+
+struct driver_quirk
+{
+ BOOL (*match)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device);
+ void (*apply)(struct wined3d_gl_info *gl_info);
+ const char *description;
+};
+
+static const struct driver_quirk quirk_table[] =
+{
+ {
+ match_ati_r300_to_500,
+ quirk_ati_dx9,
+ "ATI GLSL constant and normalized texrect quirk"
+ },
+ /* MacOS advertises more GLSL vertex shader uniforms than supported by the hardware, and if more are
+ * used it falls back to software. While the compiler can detect if the shader uses all declared
+ * uniforms, the optimization fails if the shader uses relative addressing. So any GLSL shader
+ * using relative addressing falls back to software.
+ *
+ * ARB vp gives the correct amount of uniforms, so use it instead of GLSL. */
+ {
+ match_apple,
+ quirk_apple_glsl_constants,
+ "Apple GLSL uniform override"
+ },
+ {
+ match_geforce5,
+ quirk_no_np2,
+ "Geforce 5 NP2 disable"
+ },
+ {
+ match_apple_intel,
+ quirk_texcoord_w,
+ "Init texcoord .w for Apple Intel GPU driver"
+ },
+ {
+ match_apple_nonr500ati,
+ quirk_texcoord_w,
+ "Init texcoord .w for Apple ATI >= r600 GPU driver"
+ },
+ {
+ match_fglrx,
+ quirk_one_point_sprite,
+ "Fglrx point sprite crash workaround"
+ },
+ {
+ match_dx10_capable,
+ quirk_clip_varying,
+ "Reserved varying for gl_ClipPos"
+ },
+ {
+ /* GL_EXT_secondary_color does not allow 4 component secondary colors, but most
+ * GL implementations accept it. The Mac GL is the only implementation known to
+ * reject it.
+ *
+ * If we can pass 4 component specular colors, do it, because (a) we don't have
+ * to screw around with the data, and (b) the D3D fixed function vertex pipeline
+ * passes specular alpha to the pixel shader if any is used. Otherwise the
+ * specular alpha is used to pass the fog coordinate, which we pass to opengl
+ * via GL_EXT_fog_coord.
+ */
+ match_allows_spec_alpha,
+ quirk_allows_specular_alpha,
+ "Allow specular alpha quirk"
+ },
+ {
+ /* The pixel formats provided by GL_NV_texture_shader are broken on OSX
+ * (rdar://5682521).
+ */
+ match_apple_nvts,
+ quirk_apple_nvts,
+ "Apple NV_texture_shader disable"
+ },
+#ifndef VBOX_WITH_VMSVGA
+ {
+ match_broken_nv_clip,
+ quirk_disable_nvvp_clip,
+ "Apple NV_vertex_program clip bug quirk"
+ },
+#endif
+ {
+ match_fbo_tex_update,
+ quirk_fbo_tex_update,
+ "FBO rebind for attachment updates"
+ },
+ {
+ match_ati_hd4800,
+ quirk_fullsize_blit,
+ "Fullsize blit"
+ },
+#ifdef VBOX_WITH_WDDM
+ {
+ match_mesa_nvidia,
+ quirk_no_shader_3,
+ "disable shader 3 support"
+ },
+#endif
+ {
+ match_intel,
+ quirk_force_blit,
+ "force framebuffer blit when possible"
+ }
+};
+
+/* Context activation is done by the caller. */
+static void fixup_extensions(struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ unsigned int i;
+
+ for (i = 0; i < (sizeof(quirk_table) / sizeof(*quirk_table)); ++i)
+ {
+ if (!quirk_table[i].match(gl_info, gl_renderer, gl_vendor, card_vendor, device)) continue;
+ TRACE_(d3d_caps)("Applying driver quirk \"%s\".\n", quirk_table[i].description);
+ quirk_table[i].apply(gl_info);
+ }
+
+ /* Find out if PBOs work as they are supposed to. */
+ test_pbo_functionality(gl_info);
+}
+
+
+/* Certain applications (Steam) complain if we report an outdated driver version. In general,
+ * reporting a driver version is moot because we are not the Windows driver, and we have different
+ * bugs, features, etc.
+ *
+ * The driver version has the form "x.y.z.w".
+ *
+ * "x" is the Windows version the driver is meant for:
+ * 4 -> 95/98/NT4
+ * 5 -> 2000
+ * 6 -> 2000/XP
+ * 7 -> Vista
+ * 8 -> Win 7
+ *
+ * "y" is the Direct3D level the driver supports:
+ * 11 -> d3d6
+ * 12 -> d3d7
+ * 13 -> d3d8
+ * 14 -> d3d9
+ * 15 -> d3d10
+ *
+ * "z" is unknown, possibly vendor specific.
+ *
+ * "w" is the vendor specific driver version.
+ */
+struct driver_version_information
+{
+ WORD vendor; /* reported PCI card vendor ID */
+ WORD card; /* reported PCI card device ID */
+ const char *description; /* Description of the card e.g. NVIDIA RIVA TNT */
+ WORD d3d_level; /* driver hiword to report */
+ WORD lopart_hi, lopart_lo; /* driver loword to report */
+};
+
+#if 0 /* VBox: unused */
+static const struct driver_version_information driver_version_table[] =
+{
+ /* Nvidia drivers. Geforce6 and newer cards are supported by the current driver (180.x)
+ * GeforceFX support is up to 173.x, - driver uses numbering x.y.11.7341 for 173.41 where x is the windows revision (6=2000/xp, 7=vista), y is unknown
+ * Geforce2MX/3/4 up to 96.x - driver uses numbering 9.6.8.9 for 96.89
+ * TNT/Geforce1/2 up to 71.x - driver uses numbering 7.1.8.6 for 71.86
+ *
+ * All version numbers used below are from the Linux nvidia drivers. */
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT, "NVIDIA RIVA TNT", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT2, "NVIDIA RIVA TNT2/TNT2 Pro", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE, "NVIDIA GeForce 256", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2_MX, "NVIDIA GeForce2 MX/MX 400", 6, 4, 3 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2, "NVIDIA GeForce2 GTS/GeForce2 Pro", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE3, "NVIDIA GeForce3", 6, 10, 9371 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_MX, "NVIDIA GeForce4 MX 460", 6, 10, 9371 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_TI4200, "NVIDIA GeForce4 Ti 4200", 6, 10, 9371 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5200, "NVIDIA GeForce FX 5200", 15, 11, 7516 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5600, "NVIDIA GeForce FX 5600", 15, 11, 7516 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5800, "NVIDIA GeForce FX 5800", 15, 11, 7516 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6200, "NVIDIA GeForce 6200", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6600GT, "NVIDIA GeForce 6600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6800, "NVIDIA GeForce 6800", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7300, "NVIDIA GeForce Go 7300", 15, 11, 8585 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7400, "NVIDIA GeForce Go 7400", 15, 11, 8585 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7600, "NVIDIA GeForce 7600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7800GT, "NVIDIA GeForce 7800 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8300GS, "NVIDIA GeForce 8300 GS", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600GT, "NVIDIA GeForce 8600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600MGT, "NVIDIA GeForce 8600M GT", 15, 11, 8585 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTS, "NVIDIA GeForce 8800 GTS", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9200, "NVIDIA GeForce 9200", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400GT, "NVIDIA GeForce 9400 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9500GT, "NVIDIA GeForce 9500 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9600GT, "NVIDIA GeForce 9600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9800GT, "NVIDIA GeForce 9800 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX260, "NVIDIA GeForce GTX 260", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX275, "NVIDIA GeForce GTX 275", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX280, "NVIDIA GeForce GTX 280", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT240, "NVIDIA GeForce GT 240", 15, 11, 8618 },
+
+ /* ATI cards. The driver versions are somewhat similar, but not quite the same. Let's hardcode. */
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_9500, "ATI Radeon 9500", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_X700, "ATI Radeon X700 SE", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_X1600, "ATI Radeon X1600 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD2350, "ATI Mobility Radeon HD 2350", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD2600, "ATI Mobility Radeon HD 2600", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD2900, "ATI Radeon HD 2900 XT", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4350, "ATI Radeon HD 4350", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4600, "ATI Radeon HD 4600 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4700, "ATI Radeon HD 4700 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4800, "ATI Radeon HD 4800 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD5700, "ATI Radeon HD 5700 Series", 14, 10, 8681 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD5800, "ATI Radeon HD 5800 Series", 14, 10, 8681 },
+
+ /* TODO: Add information about legacy ATI hardware, Intel and other cards. */
+};
+#endif /* VBox: unused */
+
+
+static DWORD wined3d_parse_gl_version(const char *gl_version)
+{
+ const char *ptr = gl_version;
+ int major, minor;
+
+ major = atoi(ptr);
+ if (major <= 0) ERR_(d3d_caps)("Invalid opengl major version: %d.\n", major);
+
+ while (isdigit(*ptr)) ++ptr;
+ if (*ptr++ != '.') ERR_(d3d_caps)("Invalid opengl version string: %s.\n", debugstr_a(gl_version));
+
+ minor = atoi(ptr);
+
+ TRACE_(d3d_caps)("Found OpenGL version: %d.%d.\n", major, minor);
+
+ return MAKEDWORD_VERSION(major, minor);
+}
+
+static enum wined3d_gl_vendor wined3d_guess_gl_vendor(struct wined3d_gl_info *gl_info, const char *gl_vendor_string, const char *gl_renderer)
+{
+
+ /* MacOS has various specialities in the extensions it advertises. Some have to be loaded from
+ * the opengl 1.2+ core, while other extensions are advertised, but software emulated. So try to
+ * detect the Apple OpenGL implementation to apply some extension fixups afterwards.
+ *
+ * Detecting this isn't really easy. The vendor string doesn't mention Apple. Compile-time checks
+ * aren't sufficient either because a Linux binary may display on a macos X server via remote X11.
+ * So try to detect the GL implementation by looking at certain Apple extensions. Some extensions
+ * like client storage might be supported on other implementations too, but GL_APPLE_flush_render
+ * is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So
+ * the chance that other implementations support them is rather small since Win32 QuickTime uses
+ * DirectDraw, not OpenGL. */
+ if (gl_info->supported[APPLE_FENCE]
+ && gl_info->supported[APPLE_CLIENT_STORAGE]
+ && gl_info->supported[APPLE_FLUSH_RENDER]
+ && gl_info->supported[APPLE_YCBCR_422])
+ return GL_VENDOR_APPLE;
+
+ if (strstr(gl_vendor_string, "NVIDIA"))
+ return GL_VENDOR_NVIDIA;
+
+ if (strstr(gl_vendor_string, "ATI"))
+ return GL_VENDOR_FGLRX;
+
+ if (strstr(gl_vendor_string, "Intel(R)")
+ || strstr(gl_renderer, "Intel(R)")
+ || strstr(gl_vendor_string, "Intel Inc."))
+ {
+ if (strstr(gl_renderer, "Mesa"))
+ return GL_VENDOR_MESA;
+ return GL_VENDOR_INTEL;
+ }
+
+ if (strstr(gl_vendor_string, "Mesa")
+ || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
+ || strstr(gl_vendor_string, "DRI R300 Project")
+ || strstr(gl_vendor_string, "X.Org R300 Project")
+ || strstr(gl_vendor_string, "Tungsten Graphics, Inc")
+ || strstr(gl_vendor_string, "VMware, Inc.")
+ || strstr(gl_renderer, "Mesa")
+ || strstr(gl_renderer, "Gallium"))
+ return GL_VENDOR_MESA;
+
+ FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning GL_VENDOR_UNKNOWN.\n",
+ debugstr_a(gl_vendor_string));
+
+ return GL_VENDOR_UNKNOWN;
+}
+
+static enum wined3d_pci_vendor wined3d_guess_card_vendor(const char *gl_vendor_string, const char *gl_renderer)
+{
+ if (strstr(gl_vendor_string, "NVIDIA"))
+ return HW_VENDOR_NVIDIA;
+
+ if (strstr(gl_vendor_string, "ATI")
+ || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
+ || strstr(gl_vendor_string, "X.Org R300 Project")
+ || strstr(gl_vendor_string, "DRI R300 Project"))
+ return HW_VENDOR_ATI;
+
+ if (strstr(gl_vendor_string, "Intel(R)")
+ || strstr(gl_renderer, "Intel(R)")
+ || strstr(gl_vendor_string, "Intel Inc."))
+ return HW_VENDOR_INTEL;
+
+ if (strstr(gl_vendor_string, "Mesa")
+ || strstr(gl_vendor_string, "Tungsten Graphics, Inc")
+ || strstr(gl_vendor_string, "VMware, Inc."))
+ return HW_VENDOR_SOFTWARE;
+
+ FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning HW_VENDOR_NVIDIA.\n", debugstr_a(gl_vendor_string));
+
+ return HW_VENDOR_NVIDIA;
+}
+
+
+
+static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+#ifndef VBOX_WITH_WDDM
+ if (WINE_D3D10_CAPABLE(gl_info))
+#endif
+ {
+ /* Geforce 200 - highend */
+ if (strstr(gl_renderer, "GTX 280")
+ || strstr(gl_renderer, "GTX 285")
+ || strstr(gl_renderer, "GTX 295"))
+ {
+ *vidmem = 1024;
+ return CARD_NVIDIA_GEFORCE_GTX280;
+ }
+
+ /* Geforce 200 - midend high */
+ if (strstr(gl_renderer, "GTX 275"))
+ {
+ *vidmem = 896;
+ return CARD_NVIDIA_GEFORCE_GTX275;
+ }
+
+ /* Geforce 200 - midend */
+ if (strstr(gl_renderer, "GTX 260"))
+ {
+ *vidmem = 1024;
+ return CARD_NVIDIA_GEFORCE_GTX260;
+ }
+ /* Geforce 200 - midend */
+ if (strstr(gl_renderer, "GT 240"))
+ {
+ *vidmem = 512;
+ return CARD_NVIDIA_GEFORCE_GT240;
+ }
+
+ /* Geforce9 - highend / Geforce 200 - midend (GTS 150/250 are based on the same core) */
+ if (strstr(gl_renderer, "9800")
+ || strstr(gl_renderer, "GTS 150")
+ || strstr(gl_renderer, "GTS 250"))
+ {
+ *vidmem = 512;
+ return CARD_NVIDIA_GEFORCE_9800GT;
+ }
+
+ /* Geforce9 - midend */
+ if (strstr(gl_renderer, "9600"))
+ {
+ *vidmem = 384; /* The 9600GSO has 384MB, the 9600GT has 512-1024MB */
+ return CARD_NVIDIA_GEFORCE_9600GT;
+ }
+
+ /* Geforce9 - midend low / Geforce 200 - low */
+ if (strstr(gl_renderer, "9500")
+ || strstr(gl_renderer, "GT 120")
+ || strstr(gl_renderer, "GT 130"))
+ {
+ *vidmem = 256; /* The 9500GT has 256-1024MB */
+ return CARD_NVIDIA_GEFORCE_9500GT;
+ }
+
+ /* Geforce9 - lowend */
+ if (strstr(gl_renderer, "9400"))
+ {
+ *vidmem = 256; /* The 9400GT has 256-1024MB */
+ return CARD_NVIDIA_GEFORCE_9400GT;
+ }
+
+ /* Geforce9 - lowend low */
+ if (strstr(gl_renderer, "9100")
+ || strstr(gl_renderer, "9200")
+ || strstr(gl_renderer, "9300")
+ || strstr(gl_renderer, "G 100"))
+ {
+ *vidmem = 256; /* The 9100-9300 cards have 256MB */
+ return CARD_NVIDIA_GEFORCE_9200;
+ }
+
+ /* Geforce8 - highend */
+ if (strstr(gl_renderer, "8800"))
+ {
+ *vidmem = 320; /* The 8800GTS uses 320MB, a 8800GTX can have 768MB */
+ return CARD_NVIDIA_GEFORCE_8800GTS;
+ }
+
+ /* Geforce8 - midend mobile */
+ if (strstr(gl_renderer, "8600 M"))
+ {
+ *vidmem = 512;
+ return CARD_NVIDIA_GEFORCE_8600MGT;
+ }
+
+ /* Geforce8 - midend */
+ if (strstr(gl_renderer, "8600")
+ || strstr(gl_renderer, "8700"))
+ {
+ *vidmem = 256;
+ return CARD_NVIDIA_GEFORCE_8600GT;
+ }
+
+ /* Geforce8 - lowend */
+ if (strstr(gl_renderer, "8100")
+ || strstr(gl_renderer, "8200")
+ || strstr(gl_renderer, "8300")
+ || strstr(gl_renderer, "8400")
+ || strstr(gl_renderer, "8500"))
+ {
+ *vidmem = 128; /* 128-256MB for a 8300, 256-512MB for a 8400 */
+ return CARD_NVIDIA_GEFORCE_8300GS;
+ }
+
+ /* Geforce8-compatible fall back if the GPU is not in the list yet */
+ *vidmem = 128;
+ return CARD_NVIDIA_GEFORCE_8300GS;
+ }
+
+ /* Both the GeforceFX, 6xxx and 7xxx series support D3D9. The last two types have more
+ * shader capabilities, so we use the shader capabilities to distinguish between FX and 6xxx/7xxx.
+ */
+ if (WINE_D3D9_CAPABLE(gl_info) && gl_info->supported[NV_VERTEX_PROGRAM3])
+ {
+ /* Geforce7 - highend */
+ if (strstr(gl_renderer, "7800")
+ || strstr(gl_renderer, "7900")
+ || strstr(gl_renderer, "7950")
+ || strstr(gl_renderer, "Quadro FX 4")
+ || strstr(gl_renderer, "Quadro FX 5"))
+ {
+ *vidmem = 256; /* A 7800GT uses 256MB while highend 7900 cards can use 512MB */
+ return CARD_NVIDIA_GEFORCE_7800GT;
+ }
+
+ /* Geforce7 midend */
+ if (strstr(gl_renderer, "7600")
+ || strstr(gl_renderer, "7700"))
+ {
+ *vidmem = 256; /* The 7600 uses 256-512MB */
+ return CARD_NVIDIA_GEFORCE_7600;
+ }
+
+ /* Geforce7 lower medium */
+ if (strstr(gl_renderer, "7400"))
+ {
+ *vidmem = 256; /* The 7400 uses 256-512MB */
+ return CARD_NVIDIA_GEFORCE_7400;
+ }
+
+ /* Geforce7 lowend */
+ if (strstr(gl_renderer, "7300"))
+ {
+ *vidmem = 256; /* Mac Pros with this card have 256 MB */
+ return CARD_NVIDIA_GEFORCE_7300;
+ }
+
+ /* Geforce6 highend */
+ if (strstr(gl_renderer, "6800"))
+ {
+ *vidmem = 128; /* The 6800 uses 128-256MB, the 7600 uses 256-512MB */
+ return CARD_NVIDIA_GEFORCE_6800;
+ }
+
+ /* Geforce6 - midend */
+ if (strstr(gl_renderer, "6600")
+ || strstr(gl_renderer, "6610")
+ || strstr(gl_renderer, "6700"))
+ {
+ *vidmem = 128; /* A 6600GT has 128-256MB */
+ return CARD_NVIDIA_GEFORCE_6600GT;
+ }
+
+ /* Geforce6/7 lowend */
+ *vidmem = 64; /* */
+ return CARD_NVIDIA_GEFORCE_6200; /* Geforce 6100/6150/6200/7300/7400/7500 */
+ }
+
+ if (WINE_D3D9_CAPABLE(gl_info))
+ {
+ /* GeforceFX - highend */
+ if (strstr(gl_renderer, "5800")
+ || strstr(gl_renderer, "5900")
+ || strstr(gl_renderer, "5950")
+ || strstr(gl_renderer, "Quadro FX"))
+ {
+ *vidmem = 256; /* 5800-5900 cards use 256MB */
+ return CARD_NVIDIA_GEFORCEFX_5800;
+ }
+
+ /* GeforceFX - midend */
+ if (strstr(gl_renderer, "5600")
+ || strstr(gl_renderer, "5650")
+ || strstr(gl_renderer, "5700")
+ || strstr(gl_renderer, "5750"))
+ {
+ *vidmem = 128; /* A 5600 uses 128-256MB */
+ return CARD_NVIDIA_GEFORCEFX_5600;
+ }
+
+ /* GeforceFX - lowend */
+ *vidmem = 64; /* Normal FX5200 cards use 64-256MB; laptop (non-standard) can have less */
+ return CARD_NVIDIA_GEFORCEFX_5200; /* GeforceFX 5100/5200/5250/5300/5500 */
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ if (strstr(gl_renderer, "GeForce4 Ti") || strstr(gl_renderer, "Quadro4"))
+ {
+ *vidmem = 64; /* Geforce4 Ti cards have 64-128MB */
+ return CARD_NVIDIA_GEFORCE4_TI4200; /* Geforce4 Ti4200/Ti4400/Ti4600/Ti4800, Quadro4 */
+ }
+
+ *vidmem = 64; /* Geforce3 cards have 64-128MB */
+ return CARD_NVIDIA_GEFORCE3; /* Geforce3 standard/Ti200/Ti500, Quadro DCC */
+ }
+
+ if (WINE_D3D7_CAPABLE(gl_info))
+ {
+ if (strstr(gl_renderer, "GeForce4 MX"))
+ {
+ /* Most Geforce4MX GPUs have at least 64MB of memory, some
+ * early models had 32MB but most have 64MB or even 128MB. */
+ *vidmem = 64;
+ return CARD_NVIDIA_GEFORCE4_MX; /* MX420/MX440/MX460/MX4000 */
+ }
+
+ if (strstr(gl_renderer, "GeForce2 MX") || strstr(gl_renderer, "Quadro2 MXR"))
+ {
+ *vidmem = 32; /* Geforce2MX GPUs have 32-64MB of video memory */
+ return CARD_NVIDIA_GEFORCE2_MX; /* Geforce2 standard/MX100/MX200/MX400, Quadro2 MXR */
+ }
+
+ if (strstr(gl_renderer, "GeForce2") || strstr(gl_renderer, "Quadro2"))
+ {
+ *vidmem = 32; /* Geforce2 GPUs have 32-64MB of video memory */
+ return CARD_NVIDIA_GEFORCE2; /* Geforce2 GTS/Pro/Ti/Ultra, Quadro2 */
+ }
+
+ /* Most Geforce1 cards have 32MB, there are also some rare 16
+ * and 64MB (Dell) models. */
+ *vidmem = 32;
+ return CARD_NVIDIA_GEFORCE; /* Geforce 256/DDR, Quadro */
+ }
+
+ if (strstr(gl_renderer, "TNT2"))
+ {
+ *vidmem = 32; /* Most TNT2 boards have 32MB, though there are 16MB boards too */
+ return CARD_NVIDIA_RIVA_TNT2; /* Riva TNT2 standard/M64/Pro/Ultra */
+ }
+
+ *vidmem = 16; /* Most TNT boards have 16MB, some rare models have 8MB */
+ return CARD_NVIDIA_RIVA_TNT; /* Riva TNT, Vanta */
+
+}
+
+static enum wined3d_pci_device select_card_ati_binary(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+ /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+ *
+ * Beware: renderer string do not match exact card model,
+ * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
+#ifndef VBOX_WITH_WDDM
+ if (WINE_D3D10_CAPABLE(gl_info))
+#endif
+ {
+ /* Radeon EG CYPRESS XT / PRO HD5800 - highend */
+ if (strstr(gl_renderer, "HD 5800") /* Radeon EG CYPRESS HD58xx generic renderer string */
+ || strstr(gl_renderer, "HD 5850") /* Radeon EG CYPRESS XT */
+ || strstr(gl_renderer, "HD 5870")) /* Radeon EG CYPRESS PRO */
+ {
+ *vidmem = 1024; /* note: HD58xx cards use 1024MB */
+ return CARD_ATI_RADEON_HD5800;
+ }
+
+ /* Radeon EG JUNIPER XT / LE HD5700 - midend */
+ if (strstr(gl_renderer, "HD 5700") /* Radeon EG JUNIPER HD57xx generic renderer string */
+ || strstr(gl_renderer, "HD 5750") /* Radeon EG JUNIPER LE */
+ || strstr(gl_renderer, "HD 5770")) /* Radeon EG JUNIPER XT */
+ {
+ *vidmem = 512; /* note: HD5770 cards use 1024MB and HD5750 cards use 512MB or 1024MB */
+ return CARD_ATI_RADEON_HD5700;
+ }
+
+ /* Radeon R7xx HD4800 - highend */
+ if (strstr(gl_renderer, "HD 4800") /* Radeon RV7xx HD48xx generic renderer string */
+ || strstr(gl_renderer, "HD 4830") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4850") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4870") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4890")) /* Radeon RV790 */
+ {
+ *vidmem = 512; /* note: HD4890 cards use 1024MB */
+ return CARD_ATI_RADEON_HD4800;
+ }
+
+ /* Radeon R740 HD4700 - midend */
+ if (strstr(gl_renderer, "HD 4700") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4770")) /* Radeon RV740 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4700;
+ }
+
+ /* Radeon R730 HD4600 - midend */
+ if (strstr(gl_renderer, "HD 4600") /* Radeon RV730 */
+ || strstr(gl_renderer, "HD 4650") /* Radeon RV730 */
+ || strstr(gl_renderer, "HD 4670")) /* Radeon RV730 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4600;
+ }
+
+ /* Radeon R710 HD4500/HD4350 - lowend */
+ if (strstr(gl_renderer, "HD 4350") /* Radeon RV710 */
+ || strstr(gl_renderer, "HD 4550")) /* Radeon RV710 */
+ {
+ *vidmem = 256;
+ return CARD_ATI_RADEON_HD4350;
+ }
+
+ /* Radeon R6xx HD2900/HD3800 - highend */
+ if (strstr(gl_renderer, "HD 2900")
+ || strstr(gl_renderer, "HD 3870")
+ || strstr(gl_renderer, "HD 3850"))
+ {
+ *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+ return CARD_ATI_RADEON_HD2900;
+ }
+
+ /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+ if (strstr(gl_renderer, "HD 2600")
+ || strstr(gl_renderer, "HD 3830")
+ || strstr(gl_renderer, "HD 3690")
+ || strstr(gl_renderer, "HD 3650"))
+ {
+ *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+ return CARD_ATI_RADEON_HD2600;
+ }
+
+ /* Radeon R6xx HD2350/HD2400/HD3400 - lowend
+ * Note HD2300=DX9, HD2350=DX10 */
+ if (strstr(gl_renderer, "HD 2350")
+ || strstr(gl_renderer, "HD 2400")
+ || strstr(gl_renderer, "HD 3470")
+ || strstr(gl_renderer, "HD 3450")
+ || strstr(gl_renderer, "HD 3430")
+ || strstr(gl_renderer, "HD 3400"))
+ {
+ *vidmem = 256; /* HD2350/2400 use 256MB, HD34xx use 256-512MB */
+ return CARD_ATI_RADEON_HD2350;
+ }
+
+ /* Radeon R6xx/R7xx integrated */
+ if (strstr(gl_renderer, "HD 3100")
+ || strstr(gl_renderer, "HD 3200")
+ || strstr(gl_renderer, "HD 3300"))
+ {
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+
+ /* Default for when no GPU has been found */
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ /* Radeon R5xx */
+ if (strstr(gl_renderer, "X1600")
+ || strstr(gl_renderer, "X1650")
+ || strstr(gl_renderer, "X1800")
+ || strstr(gl_renderer, "X1900")
+ || strstr(gl_renderer, "X1950"))
+ {
+ *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
+ return CARD_ATI_RADEON_X1600;
+ }
+
+ /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300/X2500/HD2300 (lowend R5xx)
+ * Note X2300/X2500/HD2300 are R5xx GPUs with a 2xxx naming but they are still DX9-only */
+ if (strstr(gl_renderer, "X700")
+ || strstr(gl_renderer, "X800")
+ || strstr(gl_renderer, "X850")
+ || strstr(gl_renderer, "X1300")
+ || strstr(gl_renderer, "X1400")
+ || strstr(gl_renderer, "X1450")
+ || strstr(gl_renderer, "X1550")
+ || strstr(gl_renderer, "X2300")
+ || strstr(gl_renderer, "X2500")
+ || strstr(gl_renderer, "HD 2300")
+ )
+ {
+ *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
+ return CARD_ATI_RADEON_X700;
+ }
+
+ /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
+ if (strstr(gl_renderer, "Radeon Xpress"))
+ {
+ *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
+ return CARD_ATI_RADEON_XPRESS_200M;
+ }
+
+ /* Radeon R3xx */
+ *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
+ return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
+ return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
+ }
+
+ if (WINE_D3D7_CAPABLE(gl_info))
+ {
+ *vidmem = 32; /* There are models with up to 64MB */
+ return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
+ }
+
+ *vidmem = 16; /* There are 16-32MB models */
+ return CARD_ATI_RAGE_128PRO;
+
+}
+
+static enum wined3d_pci_device select_card_intel_binary(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+ if (strstr(gl_renderer, "X3100"))
+ {
+ /* MacOS calls the card GMA X3100, Google findings also suggest the name GM965 */
+ *vidmem = 128;
+ return CARD_INTEL_X3100;
+ }
+
+ if (strstr(gl_renderer, "GMA 950") || strstr(gl_renderer, "945GM"))
+ {
+ /* MacOS calls the card GMA 950, but everywhere else the PCI ID is named 945GM */
+ *vidmem = 64;
+ return CARD_INTEL_I945GM;
+ }
+
+ if (strstr(gl_renderer, "915GM")) return CARD_INTEL_I915GM;
+ if (strstr(gl_renderer, "915G")) return CARD_INTEL_I915G;
+ if (strstr(gl_renderer, "865G")) return CARD_INTEL_I865G;
+ if (strstr(gl_renderer, "855G")) return CARD_INTEL_I855G;
+ if (strstr(gl_renderer, "830G")) return CARD_INTEL_I830G;
+ return CARD_INTEL_I915G;
+
+}
+
+static enum wined3d_pci_device select_card_ati_mesa(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+ /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+ *
+ * Beware: renderer string do not match exact card model,
+ * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
+ if (strstr(gl_renderer, "Gallium"))
+ {
+ /* Radeon R7xx HD4800 - highend */
+ if (strstr(gl_renderer, "R700") /* Radeon R7xx HD48xx generic renderer string */
+ || strstr(gl_renderer, "RV770") /* Radeon RV770 */
+ || strstr(gl_renderer, "RV790")) /* Radeon RV790 */
+ {
+ *vidmem = 512; /* note: HD4890 cards use 1024MB */
+ return CARD_ATI_RADEON_HD4800;
+ }
+
+ /* Radeon R740 HD4700 - midend */
+ if (strstr(gl_renderer, "RV740")) /* Radeon RV740 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4700;
+ }
+
+ /* Radeon R730 HD4600 - midend */
+ if (strstr(gl_renderer, "RV730")) /* Radeon RV730 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4600;
+ }
+
+ /* Radeon R710 HD4500/HD4350 - lowend */
+ if (strstr(gl_renderer, "RV710")) /* Radeon RV710 */
+ {
+ *vidmem = 256;
+ return CARD_ATI_RADEON_HD4350;
+ }
+
+ /* Radeon R6xx HD2900/HD3800 - highend */
+ if (strstr(gl_renderer, "R600")
+ || strstr(gl_renderer, "RV670")
+ || strstr(gl_renderer, "R680"))
+ {
+ *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+ return CARD_ATI_RADEON_HD2900;
+ }
+
+ /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+ if (strstr(gl_renderer, "RV630")
+ || strstr(gl_renderer, "RV635"))
+ {
+ *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+ return CARD_ATI_RADEON_HD2600;
+ }
+
+ /* Radeon R6xx HD2350/HD2400/HD3400 - lowend */
+ if (strstr(gl_renderer, "RV610")
+ || strstr(gl_renderer, "RV620"))
+ {
+ *vidmem = 256; /* HD2350/2400 use 256MB, HD34xx use 256-512MB */
+ return CARD_ATI_RADEON_HD2350;
+ }
+
+ /* Radeon R6xx/R7xx integrated */
+ if (strstr(gl_renderer, "RS780")
+ || strstr(gl_renderer, "RS880"))
+ {
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+
+ /* Radeon R5xx */
+ if (strstr(gl_renderer, "RV530")
+ || strstr(gl_renderer, "RV535")
+ || strstr(gl_renderer, "RV560")
+ || strstr(gl_renderer, "R520")
+ || strstr(gl_renderer, "RV570")
+ || strstr(gl_renderer, "R580"))
+ {
+ *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
+ return CARD_ATI_RADEON_X1600;
+ }
+
+ /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300 (lowend R5xx) */
+ if (strstr(gl_renderer, "R410")
+ || strstr(gl_renderer, "R420")
+ || strstr(gl_renderer, "R423")
+ || strstr(gl_renderer, "R430")
+ || strstr(gl_renderer, "R480")
+ || strstr(gl_renderer, "R481")
+ || strstr(gl_renderer, "RV410")
+ || strstr(gl_renderer, "RV515")
+ || strstr(gl_renderer, "RV516"))
+ {
+ *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
+ return CARD_ATI_RADEON_X700;
+ }
+
+ /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
+ if (strstr(gl_renderer, "RS400")
+ || strstr(gl_renderer, "RS480")
+ || strstr(gl_renderer, "RS482")
+ || strstr(gl_renderer, "RS485")
+ || strstr(gl_renderer, "RS600")
+ || strstr(gl_renderer, "RS690")
+ || strstr(gl_renderer, "RS740"))
+ {
+ *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
+ return CARD_ATI_RADEON_XPRESS_200M;
+ }
+
+ /* Radeon R3xx */
+ if (strstr(gl_renderer, "R300")
+ || strstr(gl_renderer, "RV350")
+ || strstr(gl_renderer, "RV351")
+ || strstr(gl_renderer, "RV360")
+ || strstr(gl_renderer, "RV370")
+ || strstr(gl_renderer, "R350")
+ || strstr(gl_renderer, "R360"))
+ {
+ *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
+ return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
+ }
+ }
+
+ if (WINE_D3D9_CAPABLE(gl_info))
+ {
+ /* Radeon R7xx HD4800 - highend */
+ if (strstr(gl_renderer, "(R700") /* Radeon R7xx HD48xx generic renderer string */
+ || strstr(gl_renderer, "(RV770") /* Radeon RV770 */
+ || strstr(gl_renderer, "(RV790")) /* Radeon RV790 */
+ {
+ *vidmem = 512; /* note: HD4890 cards use 1024MB */
+ return CARD_ATI_RADEON_HD4800;
+ }
+
+ /* Radeon R740 HD4700 - midend */
+ if (strstr(gl_renderer, "(RV740")) /* Radeon RV740 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4700;
+ }
+
+ /* Radeon R730 HD4600 - midend */
+ if (strstr(gl_renderer, "(RV730")) /* Radeon RV730 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4600;
+ }
+
+ /* Radeon R710 HD4500/HD4350 - lowend */
+ if (strstr(gl_renderer, "(RV710")) /* Radeon RV710 */
+ {
+ *vidmem = 256;
+ return CARD_ATI_RADEON_HD4350;
+ }
+
+ /* Radeon R6xx HD2900/HD3800 - highend */
+ if (strstr(gl_renderer, "(R600")
+ || strstr(gl_renderer, "(RV670")
+ || strstr(gl_renderer, "(R680"))
+ {
+ *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+ return CARD_ATI_RADEON_HD2900;
+ }
+
+ /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+ if (strstr(gl_renderer, "(RV630")
+ || strstr(gl_renderer, "(RV635"))
+ {
+ *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+ return CARD_ATI_RADEON_HD2600;
+ }
+
+ /* Radeon R6xx HD2300/HD2400/HD3400 - lowend */
+ if (strstr(gl_renderer, "(RV610")
+ || strstr(gl_renderer, "(RV620"))
+ {
+ *vidmem = 256; /* HD2350/2400 use 256MB, HD34xx use 256-512MB */
+ return CARD_ATI_RADEON_HD2350;
+ }
+
+ /* Radeon R6xx/R7xx integrated */
+ if (strstr(gl_renderer, "(RS780")
+ || strstr(gl_renderer, "(RS880"))
+ {
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
+ return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
+ }
+
+ if (WINE_D3D7_CAPABLE(gl_info))
+ {
+ *vidmem = 32; /* There are models with up to 64MB */
+ return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
+ }
+
+ *vidmem = 16; /* There are 16-32MB models */
+ return CARD_ATI_RAGE_128PRO;
+
+}
+
+static enum wined3d_pci_device select_card_nvidia_mesa(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+ FIXME_(d3d_caps)("Card selection not handled for Mesa Nouveau driver\n");
+#ifndef VBOX_WITH_WDDM
+ if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
+#else
+ /* tmp work around to disable quirk_no_np2 quirk for mesa drivers */
+ if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE_6200;
+#endif
+ if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
+ if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
+ if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
+ return CARD_NVIDIA_RIVA_128;
+}
+
+static enum wined3d_pci_device select_card_intel_cmn(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+ if (strstr(gl_renderer, "HD Graphics")
+ || strstr(gl_renderer, "Sandybridge"))
+ return CARD_INTEL_SBHD;
+ FIXME_(d3d_caps)("Card selection not handled for Windows Intel driver\n");
+ return CARD_INTEL_I915G;
+}
+
+static enum wined3d_pci_device select_card_intel_mesa(const struct wined3d_gl_info *gl_info,
+ const char *gl_renderer, unsigned int *vidmem)
+{
+ return select_card_intel_cmn(gl_info, gl_renderer, vidmem);
+}
+
+struct vendor_card_selection
+{
+ enum wined3d_gl_vendor gl_vendor;
+ enum wined3d_pci_vendor card_vendor;
+ const char *description; /* Description of the card selector i.e. Apple OS/X Intel */
+ enum wined3d_pci_device (*select_card)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem );
+};
+
+static const struct vendor_card_selection vendor_card_select_table[] =
+{
+ {GL_VENDOR_NVIDIA, HW_VENDOR_NVIDIA, "Nvidia binary driver", select_card_nvidia_binary},
+ {GL_VENDOR_APPLE, HW_VENDOR_NVIDIA, "Apple OSX NVidia binary driver", select_card_nvidia_binary},
+ {GL_VENDOR_APPLE, HW_VENDOR_ATI, "Apple OSX AMD/ATI binary driver", select_card_ati_binary},
+ {GL_VENDOR_APPLE, HW_VENDOR_INTEL, "Apple OSX Intel binary driver", select_card_intel_binary},
+ {GL_VENDOR_FGLRX, HW_VENDOR_ATI, "AMD/ATI binary driver", select_card_ati_binary},
+ {GL_VENDOR_MESA, HW_VENDOR_ATI, "Mesa AMD/ATI driver", select_card_ati_mesa},
+ {GL_VENDOR_MESA, HW_VENDOR_NVIDIA, "Mesa Nouveau driver", select_card_nvidia_mesa},
+ {GL_VENDOR_MESA, HW_VENDOR_INTEL, "Mesa Intel driver", select_card_intel_mesa},
+ {GL_VENDOR_INTEL, HW_VENDOR_INTEL, "Windows Intel binary driver", select_card_intel_cmn}
+};
+
+
+static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor *gl_vendor, enum wined3d_pci_vendor *card_vendor, unsigned int *vidmem)
+{
+ /* Above is a list of Nvidia and ATI GPUs. Both vendors have dozens of
+ * different GPUs with roughly the same features. In most cases GPUs from a
+ * certain family differ in clockspeeds, the amount of video memory and the
+ * number of shader pipelines.
+ *
+ * A Direct3D device object contains the PCI id (vendor + device) of the
+ * videocard which is used for rendering. Various applications use this
+ * information to get a rough estimation of the features of the card and
+ * some might use it for enabling 3d effects only on certain types of
+ * videocards. In some cases games might even use it to work around bugs
+ * which happen on certain videocards/driver combinations. The problem is
+ * that OpenGL only exposes a rendering string containing the name of the
+ * videocard and not the PCI id.
+ *
+ * Various games depend on the PCI id, so somehow we need to provide one.
+ * A simple option is to parse the renderer string and translate this to
+ * the right PCI id. This is a lot of work because there are more than 200
+ * GPUs just for Nvidia. Various cards share the same renderer string, so
+ * the amount of code might be 'small' but there are quite a number of
+ * exceptions which would make this a pain to maintain. Another way would
+ * be to query the PCI id from the operating system (assuming this is the
+ * videocard which is used for rendering which is not always the case).
+ * This would work but it is not very portable. Second it would not work
+ * well in, let's say, a remote X situation in which the amount of 3d
+ * features which can be used is limited.
+ *
+ * As said most games only use the PCI id to get an indication of the
+ * capabilities of the card. It doesn't really matter if the given id is
+ * the correct one if we return the id of a card with similar 3d features.
+ *
+ * The code below checks the OpenGL capabilities of a videocard and matches
+ * that to a certain level of Direct3D functionality. Once a card passes
+ * the Direct3D9 check, we know that the card (in case of Nvidia) is at
+ * least a GeforceFX. To give a better estimate we do a basic check on the
+ * renderer string but if that won't pass we return a default card. This
+ * way is better than maintaining a full card database as even without a
+ * full database we can return a card with similar features. Second the
+ * size of the database can be made quite small because when you know what
+ * type of 3d functionality a card has, you know to which GPU family the
+ * GPU must belong. Because of this you only have to check a small part of
+ * the renderer string to distinguishes between different models from that
+ * family.
+ *
+ * The code also selects a default amount of video memory which we will
+ * use for an estimation of the amount of free texture memory. In case of
+ * real D3D the amount of texture memory includes video memory and system
+ * memory (to be specific AGP memory or in case of PCIE TurboCache /
+ * HyperMemory). We don't know how much system memory can be addressed by
+ * the system but we can make a reasonable estimation about the amount of
+ * video memory. If the value is slightly wrong it doesn't matter as we
+ * didn't include AGP-like memory which makes the amount of addressable
+ * memory higher and second OpenGL isn't that critical it moves to system
+ * memory behind our backs if really needed. Note that the amount of video
+ * memory can be overruled using a registry setting. */
+
+#ifndef VBOX
+ int i;
+#else
+ size_t i;
+#endif
+
+ for (i = 0; i < (sizeof(vendor_card_select_table) / sizeof(*vendor_card_select_table)); ++i)
+ {
+ if ((vendor_card_select_table[i].gl_vendor != *gl_vendor)
+ || (vendor_card_select_table[i].card_vendor != *card_vendor))
+ continue;
+ TRACE_(d3d_caps)("Applying card_selector \"%s\".\n", vendor_card_select_table[i].description);
+ return vendor_card_select_table[i].select_card(gl_info, gl_renderer, vidmem);
+ }
+
+ FIXME_(d3d_caps)("No card selector available for GL vendor %d and card vendor %04x.\n",
+ *gl_vendor, *card_vendor);
+
+ /* Default to generic Nvidia hardware based on the supported OpenGL extensions. The choice
+ * for Nvidia was because the hardware and drivers they make are of good quality. This makes
+ * them a good generic choice. */
+ *card_vendor = HW_VENDOR_NVIDIA;
+#ifndef VBOX_WITH_WDDM
+ if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
+#else
+ /* tmp work around to disable quirk_no_np2 quirk for not-recognized drivers */
+ if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE_6200;
+#endif
+
+ if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
+ if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
+ if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
+ return CARD_NVIDIA_RIVA_128;
+}
+
+#ifndef VBOX_WITH_VMSVGA
+static const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter)
+{
+ const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+ int vs_selected_mode, ps_selected_mode;
+
+ select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+ if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+ && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_fragment_pipeline;
+ else if (ps_selected_mode == SHADER_ATI) return &atifs_fragment_pipeline;
+ else if (gl_info->supported[NV_REGISTER_COMBINERS]
+ && gl_info->supported[NV_TEXTURE_SHADER2]) return &nvts_fragment_pipeline;
+ else if (gl_info->supported[NV_REGISTER_COMBINERS]) return &nvrc_fragment_pipeline;
+ else return &ffp_fragment_pipeline;
+}
+#endif
+
+static const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter)
+{
+ int vs_selected_mode, ps_selected_mode;
+
+ select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
+ if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) return &glsl_shader_backend;
+#ifndef VBOX_WITH_VMSVGA
+ if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) return &arb_program_shader_backend;
+#endif
+ return &none_shader_backend;
+}
+
+#ifndef VBOX_WITH_VMSVGA
+static const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter)
+{
+ const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+ int vs_selected_mode, ps_selected_mode;
+
+ select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+ if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+ && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit;
+ else return &ffp_blit;
+}
+#endif
+
+#ifdef VBOX_WITH_VMSVGA
+/** Checks if @a pszExtension is one of the extensions we're looking for and
+ * updates @a pGlInfo->supported accordingly. */
+static void check_gl_extension(struct wined3d_gl_info *pGlInfo, const char *pszExtension)
+{
+ size_t i;
+ TRACE_(d3d_caps)("- %s\n", debugstr_a(pszExtension));
+ for (i = 0; i < RT_ELEMENTS(EXTENSION_MAP); i++)
+ if (!strcmp(pszExtension, EXTENSION_MAP[i].extension_string))
+ {
+ TRACE_(d3d_caps)(" FOUND: %s support.\n", EXTENSION_MAP[i].extension_string);
+ pGlInfo->supported[EXTENSION_MAP[i].extension] = TRUE;
+ return;
+ }
+}
+#endif
+
+/* Context activation is done by the caller. */
+BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter, struct VBOXVMSVGASHADERIF *pVBoxShaderIf)
+{
+#ifndef VBOX_WITH_VMSVGA
+ struct wined3d_driver_info *driver_info = &adapter->driver_info;
+#endif
+ struct wined3d_gl_info *gl_info = &adapter->gl_info;
+#ifndef VBOX_WITH_VMSVGA
+ const char *GL_Extensions = NULL;
+ const char *WGL_Extensions = NULL;
+#endif
+ const char *gl_vendor_str, *gl_renderer_str, *gl_version_str;
+#ifndef VBOX_WITH_VMSVGA
+ struct fragment_caps fragment_caps;
+#endif
+ enum wined3d_gl_vendor gl_vendor;
+ enum wined3d_pci_vendor card_vendor;
+ enum wined3d_pci_device device;
+ GLint gl_max;
+ GLfloat gl_floatv[2];
+ unsigned i;
+#ifndef VBOX_WITH_VMSVGA
+ HDC hdc;
+#endif
+ unsigned int vidmem=0;
+ DWORD gl_version;
+#ifndef VBOX_WITH_VMSVGA
+ size_t len;
+#endif
+
+ TRACE_(d3d_caps)("(%p)\n", gl_info);
+
+ ENTER_GL();
+
+ VBOX_CHECK_GL_CALL(gl_renderer_str = (const char *)glGetString(GL_RENDERER));
+ TRACE_(d3d_caps)("GL_RENDERER: %s.\n", debugstr_a(gl_renderer_str));
+ if (!gl_renderer_str)
+ {
+ LEAVE_GL();
+ ERR_(d3d_caps)("Received a NULL GL_RENDERER.\n");
+ return FALSE;
+ }
+
+ VBOX_CHECK_GL_CALL(gl_vendor_str = (const char *)glGetString(GL_VENDOR));
+ TRACE_(d3d_caps)("GL_VENDOR: %s.\n", debugstr_a(gl_vendor_str));
+ if (!gl_vendor_str)
+ {
+ LEAVE_GL();
+ ERR_(d3d_caps)("Received a NULL GL_VENDOR.\n");
+ return FALSE;
+ }
+
+ /* Parse the GL_VERSION field into major and minor information */
+ VBOX_CHECK_GL_CALL(gl_version_str = (const char *)glGetString(GL_VERSION));
+ TRACE_(d3d_caps)("GL_VERSION: %s.\n", debugstr_a(gl_version_str));
+ if (!gl_version_str)
+ {
+ LEAVE_GL();
+ ERR_(d3d_caps)("Received a NULL GL_VERSION.\n");
+ return FALSE;
+ }
+ gl_version = wined3d_parse_gl_version(gl_version_str);
+
+ /*
+ * Initialize openGL extension related variables
+ * with Default values
+ */
+ memset(gl_info->supported, 0, sizeof(gl_info->supported));
+ gl_info->limits.blends = 1;
+ gl_info->limits.buffers = 1;
+ gl_info->limits.textures = 1;
+ gl_info->limits.fragment_samplers = 1;
+ gl_info->limits.vertex_samplers = 0;
+ gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers + gl_info->limits.vertex_samplers;
+ gl_info->limits.sampler_stages = 1;
+ gl_info->limits.glsl_vs_float_constants = 0;
+ gl_info->limits.glsl_ps_float_constants = 0;
+ gl_info->limits.arb_vs_float_constants = 0;
+ gl_info->limits.arb_vs_native_constants = 0;
+ gl_info->limits.arb_vs_instructions = 0;
+ gl_info->limits.arb_vs_temps = 0;
+ gl_info->limits.arb_ps_float_constants = 0;
+ gl_info->limits.arb_ps_local_constants = 0;
+ gl_info->limits.arb_ps_instructions = 0;
+ gl_info->limits.arb_ps_temps = 0;
+
+ /* Retrieve opengl defaults */
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_CLIP_PLANES, &gl_max));
+ gl_info->limits.clipplanes = min(WINED3DMAXUSERCLIPPLANES, gl_max);
+ TRACE_(d3d_caps)("ClipPlanes support - num Planes=%d\n", gl_max);
+
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ glGetIntegerv(GL_MAX_LIGHTS, &gl_max);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_LIGHTS, &gl_max));
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+ }
+#else
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_LIGHTS, &gl_max));
+#endif
+ gl_info->limits.lights = gl_max;
+ TRACE_(d3d_caps)("Lights support - max lights=%d\n", gl_max);
+
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_max));
+ gl_info->limits.texture_size = gl_max;
+ TRACE_(d3d_caps)("Maximum texture size support - max texture size=%d\n", gl_max);
+
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, gl_floatv);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+ VBOX_CHECK_GL_CALL(glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, gl_floatv));
+ if (glGetError() != GL_NO_ERROR)
+ gl_floatv[0] = gl_floatv[1] = 1;
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+ }
+#else
+ VBOX_CHECK_GL_CALL(glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, gl_floatv));
+#endif
+ gl_info->limits.pointsize_min = gl_floatv[0];
+ gl_info->limits.pointsize_max = gl_floatv[1];
+ TRACE_(d3d_caps)("Maximum point size support - max point size=%f\n", gl_floatv[1]);
+
+ /* Parse the gl supported features, in theory enabling parts of our code appropriately. */
+#ifndef VBOX_WITH_VMSVGA
+ GL_Extensions = (const char *)glGetString(GL_EXTENSIONS);
+ if (!GL_Extensions)
+ {
+ LEAVE_GL();
+ ERR_(d3d_caps)("Received a NULL GL_EXTENSIONS.\n");
+ return FALSE;
+ }
+
+ LEAVE_GL();
+
+ TRACE_(d3d_caps)("GL_Extensions reported:\n");
+#endif
+
+ gl_info->supported[WINED3D_GL_EXT_NONE] = TRUE;
+
+ gl_info->supported[VBOX_SHARED_CONTEXTS] = TRUE;
+
+#ifdef VBOX_WITH_VMSVGA
+ {
+ void *pvEnumCtx = NULL;
+ char szCurExt[256];
+ while (pVBoxShaderIf->pfnGetNextExtension(pVBoxShaderIf, &pvEnumCtx, szCurExt, sizeof(szCurExt), false /*fOtherProfile*/))
+ check_gl_extension(gl_info, szCurExt);
+
+ /* The cheap way out. */
+ pvEnumCtx = NULL;
+ while (pVBoxShaderIf->pfnGetNextExtension(pVBoxShaderIf, &pvEnumCtx, szCurExt, sizeof(szCurExt), true /*fOtherProfile*/))
+ check_gl_extension(gl_info, szCurExt);
+ }
+#else /* !VBOX_WITH_VMSVGA */
+ while (*GL_Extensions)
+ {
+ const char *start;
+ char current_ext[256];
+
+ while (isspace(*GL_Extensions)) ++GL_Extensions;
+ start = GL_Extensions;
+ while (!isspace(*GL_Extensions) && *GL_Extensions) ++GL_Extensions;
+
+ len = GL_Extensions - start;
+ if (!len || len >= sizeof(current_ext)) continue;
+
+ memcpy(current_ext, start, len);
+ current_ext[len] = '\0';
+ TRACE_(d3d_caps)("- %s\n", debugstr_a(current_ext));
+
+ for (i = 0; i < (sizeof(EXTENSION_MAP) / sizeof(*EXTENSION_MAP)); ++i)
+ {
+ if (!strcmp(current_ext, EXTENSION_MAP[i].extension_string))
+ {
+ TRACE_(d3d_caps)(" FOUND: %s support.\n", EXTENSION_MAP[i].extension_string);
+ gl_info->supported[EXTENSION_MAP[i].extension] = TRUE;
+ break;
+ }
+ }
+ }
+#endif /* !VBOX_WITH_VMSVGA */
+
+#ifdef VBOX_WITH_VMSVGA
+# ifdef RT_OS_WINDOWS
+# define OGLGETPROCADDRESS wglGetProcAddress
+# elif RT_OS_DARWIN
+# define OGLGETPROCADDRESS(x) MyNSGLGetProcAddress(x)
+# else
+extern void (*glXGetProcAddress(const GLubyte *procname))( void );
+# define OGLGETPROCADDRESS(x) glXGetProcAddress((const GLubyte *)x)
+# endif
+#endif
+
+ /* Now work out what GL support this card really has */
+#define USE_GL_FUNC(type, pfn, ext, replace) \
+{ \
+ DWORD ver = ver_for_ext(ext); \
+ if (gl_info->supported[ext]) gl_info->pfn = (type)OGLGETPROCADDRESS(#pfn); \
+ else if (ver && ver <= gl_version) gl_info->pfn = (type)OGLGETPROCADDRESS(#replace); \
+ else gl_info->pfn = NULL; \
+}
+ GL_EXT_FUNCS_GEN;
+#undef USE_GL_FUNC
+
+#ifndef VBOX_WITH_VMSVGA
+#define USE_GL_FUNC(type, pfn, ext, replace) gl_info->pfn = (type)OGLGETPROCADDRESS(#pfn);
+ WGL_EXT_FUNCS_GEN;
+#undef USE_GL_FUNC
+#endif
+
+ ENTER_GL();
+
+ /* Now mark all the extensions supported which are included in the opengl core version. Do this *after*
+ * loading the functions, otherwise the code above will load the extension entry points instead of the
+ * core functions, which may not work. */
+ for (i = 0; i < (sizeof(EXTENSION_MAP) / sizeof(*EXTENSION_MAP)); ++i)
+ {
+ if (!gl_info->supported[EXTENSION_MAP[i].extension]
+ && EXTENSION_MAP[i].version <= gl_version && EXTENSION_MAP[i].version)
+ {
+ TRACE_(d3d_caps)(" GL CORE: %s support.\n", EXTENSION_MAP[i].extension_string);
+ gl_info->supported[EXTENSION_MAP[i].extension] = TRUE;
+ }
+ }
+
+ if (gl_info->supported[APPLE_FENCE])
+ {
+ /* GL_NV_fence and GL_APPLE_fence provide the same functionality basically.
+ * The apple extension interacts with some other apple exts. Disable the NV
+ * extension if the apple one is support to prevent confusion in other parts
+ * of the code. */
+ gl_info->supported[NV_FENCE] = FALSE;
+ }
+ if (gl_info->supported[APPLE_FLOAT_PIXELS])
+ {
+ /* GL_APPLE_float_pixels == GL_ARB_texture_float + GL_ARB_half_float_pixel
+ *
+ * The enums are the same:
+ * GL_RGBA16F_ARB = GL_RGBA_FLOAT16_APPLE = 0x881A
+ * GL_RGB16F_ARB = GL_RGB_FLOAT16_APPLE = 0x881B
+ * GL_RGBA32F_ARB = GL_RGBA_FLOAT32_APPLE = 0x8814
+ * GL_RGB32F_ARB = GL_RGB_FLOAT32_APPLE = 0x8815
+ * GL_HALF_FLOAT_ARB = GL_HALF_APPLE = 0x140B
+ */
+ if (!gl_info->supported[ARB_TEXTURE_FLOAT])
+ {
+ TRACE_(d3d_caps)(" IMPLIED: GL_ARB_texture_float support(from GL_APPLE_float_pixels.\n");
+ gl_info->supported[ARB_TEXTURE_FLOAT] = TRUE;
+ }
+ if (!gl_info->supported[ARB_HALF_FLOAT_PIXEL])
+ {
+ TRACE_(d3d_caps)(" IMPLIED: GL_ARB_half_float_pixel support(from GL_APPLE_float_pixels.\n");
+ gl_info->supported[ARB_HALF_FLOAT_PIXEL] = TRUE;
+ }
+ }
+ if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
+ {
+ /* GL_ARB_map_buffer_range and GL_APPLE_flush_buffer_range provide the same
+ * functionality. Prefer the ARB extension */
+ gl_info->supported[APPLE_FLUSH_BUFFER_RANGE] = FALSE;
+ }
+ if (gl_info->supported[ARB_TEXTURE_CUBE_MAP])
+ {
+ TRACE_(d3d_caps)(" IMPLIED: NVIDIA (NV) Texture Gen Reflection support.\n");
+ gl_info->supported[NV_TEXGEN_REFLECTION] = TRUE;
+ }
+ if (!gl_info->supported[ARB_DEPTH_CLAMP] && gl_info->supported[NV_DEPTH_CLAMP])
+ {
+ TRACE_(d3d_caps)(" IMPLIED: ARB_depth_clamp support (by NV_depth_clamp).\n");
+ gl_info->supported[ARB_DEPTH_CLAMP] = TRUE;
+ }
+ if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] && gl_info->supported[EXT_VERTEX_ARRAY_BGRA])
+ {
+ TRACE_(d3d_caps)(" IMPLIED: ARB_vertex_array_bgra support (by EXT_vertex_array_bgra).\n");
+ gl_info->supported[ARB_VERTEX_ARRAY_BGRA] = TRUE;
+ }
+ if (gl_info->supported[NV_TEXTURE_SHADER2])
+ {
+ if (gl_info->supported[NV_REGISTER_COMBINERS])
+ {
+ /* Also disable ATI_FRAGMENT_SHADER if register combiners and texture_shader2
+ * are supported. The nv extensions provide the same functionality as the
+ * ATI one, and a bit more(signed pixelformats). */
+ gl_info->supported[ATI_FRAGMENT_SHADER] = FALSE;
+ }
+ }
+
+ if (gl_info->supported[NV_REGISTER_COMBINERS])
+ {
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &gl_max));
+ gl_info->limits.general_combiners = gl_max;
+ TRACE_(d3d_caps)("Max general combiners: %d.\n", gl_max);
+ }
+ if (gl_info->supported[ARB_DRAW_BUFFERS])
+ {
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &gl_max));
+ gl_info->limits.buffers = gl_max;
+ TRACE_(d3d_caps)("Max draw buffers: %u.\n", gl_max);
+ }
+ if (gl_info->supported[ARB_MULTITEXTURE])
+ {
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &gl_max);
+ if (glGetError() != GL_NO_ERROR)
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &gl_max));
+#else
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &gl_max));
+#endif
+ gl_info->limits.textures = min(MAX_TEXTURES, gl_max);
+ TRACE_(d3d_caps)("Max textures: %d.\n", gl_info->limits.textures);
+
+ if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
+ {
+ GLint tmp;
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &tmp));
+ gl_info->limits.fragment_samplers = min(MAX_FRAGMENT_SAMPLERS, tmp);
+ }
+ else
+ {
+ gl_info->limits.fragment_samplers = max(gl_info->limits.fragment_samplers, (UINT)gl_max);
+ }
+ TRACE_(d3d_caps)("Max fragment samplers: %d.\n", gl_info->limits.fragment_samplers);
+
+ if (gl_info->supported[ARB_VERTEX_SHADER])
+ {
+ GLint tmp;
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, &tmp));
+ gl_info->limits.vertex_samplers = tmp;
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &tmp));
+ gl_info->limits.combined_samplers = tmp;
+
+ /* Loading GLSL sampler uniforms is much simpler if we can assume that the sampler setup
+ * is known at shader link time. In a vertex shader + pixel shader combination this isn't
+ * an issue because then the sampler setup only depends on the two shaders. If a pixel
+ * shader is used with fixed function vertex processing we're fine too because fixed function
+ * vertex processing doesn't use any samplers. If fixed function fragment processing is
+ * used we have to make sure that all vertex sampler setups are valid together with all
+ * possible fixed function fragment processing setups. This is true if vsamplers + MAX_TEXTURES
+ * <= max_samplers. This is true on all d3d9 cards that support vtf(gf 6 and gf7 cards).
+ * dx9 radeon cards do not support vertex texture fetch. DX10 cards have 128 samplers, and
+ * dx9 is limited to 8 fixed function texture stages and 4 vertex samplers. DX10 does not have
+ * a fixed function pipeline anymore.
+ *
+ * So this is just a check to check that our assumption holds true. If not, write a warning
+ * and reduce the number of vertex samplers or probably disable vertex texture fetch. */
+ if (gl_info->limits.vertex_samplers && gl_info->limits.combined_samplers < 12
+ && MAX_TEXTURES + gl_info->limits.vertex_samplers > gl_info->limits.combined_samplers)
+ {
+ FIXME("OpenGL implementation supports %u vertex samplers and %u total samplers.\n",
+ gl_info->limits.vertex_samplers, gl_info->limits.combined_samplers);
+ FIXME("Expected vertex samplers + MAX_TEXTURES(=8) > combined_samplers.\n");
+ if (gl_info->limits.combined_samplers > MAX_TEXTURES)
+ gl_info->limits.vertex_samplers = gl_info->limits.combined_samplers - MAX_TEXTURES;
+ else
+ gl_info->limits.vertex_samplers = 0;
+ }
+ }
+ else
+ {
+ gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers;
+ }
+ TRACE_(d3d_caps)("Max vertex samplers: %u.\n", gl_info->limits.vertex_samplers);
+ TRACE_(d3d_caps)("Max combined samplers: %u.\n", gl_info->limits.combined_samplers);
+ }
+ if (gl_info->supported[ARB_VERTEX_BLEND])
+ {
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max));
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+ }
+#else
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_VERTEX_UNITS_ARB, &gl_max));
+#endif
+ gl_info->limits.blends = gl_max;
+ TRACE_(d3d_caps)("Max blends: %u.\n", gl_info->limits.blends);
+ }
+ if (gl_info->supported[EXT_TEXTURE3D])
+ {
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE_EXT, &gl_max));
+ gl_info->limits.texture3d_size = gl_max;
+ TRACE_(d3d_caps)("Max texture3D size: %d.\n", gl_info->limits.texture3d_size);
+ }
+ if (gl_info->supported[EXT_TEXTURE_FILTER_ANISOTROPIC])
+ {
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max));
+ gl_info->limits.anisotropy = gl_max;
+ TRACE_(d3d_caps)("Max anisotropy: %d.\n", gl_info->limits.anisotropy);
+ }
+ if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
+ {
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
+ if (glGetError() != GL_NO_ERROR)
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+#endif
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max)));
+ gl_info->limits.arb_ps_float_constants = gl_max;
+ TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM float constants: %d.\n", gl_info->limits.arb_ps_float_constants);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max)));
+ gl_info->limits.arb_ps_native_constants = gl_max;
+ TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM native float constants: %d.\n",
+ gl_info->limits.arb_ps_native_constants);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max)));
+ gl_info->limits.arb_ps_temps = gl_max;
+ TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_ps_temps);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max)));
+ gl_info->limits.arb_ps_instructions = gl_max;
+ TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM native instructions: %d.\n", gl_info->limits.arb_ps_instructions);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &gl_max)));
+ gl_info->limits.arb_ps_local_constants = gl_max;
+ TRACE_(d3d_caps)("Max ARB_FRAGMENT_PROGRAM local parameters: %d.\n", gl_info->limits.arb_ps_instructions);
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+#endif
+ }
+ if (gl_info->supported[ARB_VERTEX_PROGRAM])
+ {
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max));
+ if (glGetError() != GL_NO_ERROR)
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+#endif
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &gl_max)));
+ gl_info->limits.arb_vs_float_constants = gl_max;
+ TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM float constants: %d.\n", gl_info->limits.arb_vs_float_constants);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, &gl_max)));
+ gl_info->limits.arb_vs_native_constants = gl_max;
+ TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM native float constants: %d.\n",
+ gl_info->limits.arb_vs_native_constants);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, &gl_max)));
+ gl_info->limits.arb_vs_temps = gl_max;
+ TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM native temporaries: %d.\n", gl_info->limits.arb_vs_temps);
+ VBOX_CHECK_GL_CALL(GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, &gl_max)));
+ gl_info->limits.arb_vs_instructions = gl_max;
+ TRACE_(d3d_caps)("Max ARB_VERTEX_PROGRAM native instructions: %d.\n", gl_info->limits.arb_vs_instructions);
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+#endif
+#ifndef VBOX_WITH_VMSVGA
+ if (test_arb_vs_offset_limit(gl_info)) gl_info->quirks |= WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT;
+#endif
+ }
+ if (gl_info->supported[ARB_VERTEX_SHADER])
+ {
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &gl_max));
+ gl_info->limits.glsl_vs_float_constants = gl_max / 4;
+#ifdef VBOX_WITH_WDDM
+ /* AFAICT the " / 4" here comes from that we're going to use the glsl_vs/ps_float_constants to create vec4 arrays,
+ * thus each array element has 4 components, so the actual number of vec4 arrays is GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+ * win8 Aero won't properly work with this constant < 256 in any way,
+ * while Intel drivers I've encountered this problem with supports vec4 arrays of size > GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+ * so use it here.
+ * @todo: add logging
+ * @todo: perhaps should be movet to quirks?
+ * */
+ if (gl_info->limits.glsl_vs_float_constants < 256 && gl_max >= 256)
+ {
+ DWORD dwVersion = GetVersion();
+ DWORD dwMajor = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+ DWORD dwMinor = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+ /* tmp workaround Win8 Aero requirement for 256 */
+ if (dwMajor > 6 || dwMinor > 1)
+ {
+ gl_info->limits.glsl_vs_float_constants = 256;
+ }
+ }
+#endif
+ TRACE_(d3d_caps)("Max ARB_VERTEX_SHADER float constants: %u.\n", gl_info->limits.glsl_vs_float_constants);
+ }
+ if (gl_info->supported[ARB_FRAGMENT_SHADER])
+ {
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &gl_max));
+ gl_info->limits.glsl_ps_float_constants = gl_max / 4;
+#ifdef VBOX_WITH_WDDM
+ /* AFAICT the " / 4" here comes from that we're going to use the glsl_vs/ps_float_constants to create vec4 arrays,
+ * thus each array element has 4 components, so the actual number of vec4 arrays is GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+ * win8 Aero won't properly work with this constant < 256 in any way,
+ * while Intel drivers I've encountered this problem with supports vec4 arrays of size > GL_MAX_VERTEX/FRAGMENT_UNIFORM_COMPONENTS_ARB / 4
+ * so use it here.
+ * @todo: add logging
+ * @todo: perhaps should be movet to quirks?
+ * */
+ if (gl_info->limits.glsl_ps_float_constants < 256 && gl_max >= 256)
+ {
+ DWORD dwVersion = GetVersion();
+ DWORD dwMajor = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+ DWORD dwMinor = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+ /* tmp workaround Win8 Aero requirement for 256 */
+ if (dwMajor > 6 || dwMinor > 1)
+ {
+ gl_info->limits.glsl_ps_float_constants = 256;
+ }
+ }
+#endif
+ TRACE_(d3d_caps)("Max ARB_FRAGMENT_SHADER float constants: %u.\n", gl_info->limits.glsl_ps_float_constants);
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max));
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+ }
+#else
+ VBOX_CHECK_GL_CALL(glGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &gl_max));
+#endif
+ gl_info->limits.glsl_varyings = gl_max;
+ TRACE_(d3d_caps)("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
+ }
+ if (gl_info->supported[ARB_SHADING_LANGUAGE_100])
+ {
+ const char *str = (const char *)glGetString(GL_SHADING_LANGUAGE_VERSION_ARB);
+ unsigned int major, minor;
+
+ TRACE_(d3d_caps)("GLSL version string: %s.\n", debugstr_a(str));
+
+ /* The format of the GLSL version string is "major.minor[.release] [vendor info]". */
+ sscanf(str, "%u.%u", &major, &minor);
+ gl_info->glsl_version = MAKEDWORD_VERSION(major, minor);
+ }
+ if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])
+ {
+#ifdef VBOX_VMSVGA3D_DUAL_OPENGL_PROFILE
+ glGetFloatv(GL_MAX_SHININESS_NV, &gl_info->limits.shininess);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, true /*fOtherProfile*/);
+ VBOX_CHECK_GL_CALL(glGetFloatv(GL_MAX_SHININESS_NV, &gl_info->limits.shininess));
+ pVBoxShaderIf->pfnSwitchInitProfile(pVBoxShaderIf, false /*fOtherProfile*/);
+ }
+#else
+ VBOX_CHECK_GL_CALL(glGetFloatv(GL_MAX_SHININESS_NV, &gl_info->limits.shininess));
+#endif
+ }
+ else
+ {
+ gl_info->limits.shininess = 128.0f;
+ }
+ if (gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO])
+ {
+ /* If we have full NP2 texture support, disable
+ * GL_ARB_texture_rectangle because we will never use it.
+ * This saves a few redundant glDisable calls. */
+ gl_info->supported[ARB_TEXTURE_RECTANGLE] = FALSE;
+ }
+ if (gl_info->supported[ATI_FRAGMENT_SHADER])
+ {
+ /* Disable NV_register_combiners and fragment shader if this is supported.
+ * generally the NV extensions are preferred over the ATI ones, and this
+ * extension is disabled if register_combiners and texture_shader2 are both
+ * supported. So we reach this place only if we have incomplete NV dxlevel 8
+ * fragment processing support. */
+ gl_info->supported[NV_REGISTER_COMBINERS] = FALSE;
+ gl_info->supported[NV_REGISTER_COMBINERS2] = FALSE;
+ gl_info->supported[NV_TEXTURE_SHADER] = FALSE;
+ gl_info->supported[NV_TEXTURE_SHADER2] = FALSE;
+ }
+ if (gl_info->supported[NV_HALF_FLOAT])
+ {
+ /* GL_ARB_half_float_vertex is a subset of GL_NV_half_float. */
+ gl_info->supported[ARB_HALF_FLOAT_VERTEX] = TRUE;
+ }
+ if (gl_info->supported[ARB_POINT_SPRITE])
+ {
+ gl_info->limits.point_sprite_units = gl_info->limits.textures;
+ }
+ else
+ {
+ gl_info->limits.point_sprite_units = 0;
+ }
+#ifndef VBOX_WITH_VMSVGA
+ checkGLcall("extension detection");
+#endif
+ LEAVE_GL();
+
+#ifndef VBOX_WITH_VMSVGA
+ adapter->fragment_pipe = select_fragment_implementation(adapter);
+#endif
+ adapter->shader_backend = select_shader_backend(adapter);
+#ifndef VBOX_WITH_VMSVGA
+ adapter->blitter = select_blit_implementation(adapter);
+
+ adapter->fragment_pipe->get_caps(gl_info, &fragment_caps);
+ gl_info->limits.texture_stages = fragment_caps.MaxTextureBlendStages;
+ TRACE_(d3d_caps)("Max texture stages: %u.\n", gl_info->limits.texture_stages);
+
+ /* In some cases the number of texture stages can be larger than the number
+ * of samplers. The GF4 for example can use only 2 samplers (no fragment
+ * shaders), but 8 texture stages (register combiners). */
+ gl_info->limits.sampler_stages = max(gl_info->limits.fragment_samplers, gl_info->limits.texture_stages);
+#endif
+
+ if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT])
+ {
+ gl_info->fbo_ops.glIsRenderbuffer = gl_info->glIsRenderbuffer;
+ gl_info->fbo_ops.glBindRenderbuffer = gl_info->glBindRenderbuffer;
+ gl_info->fbo_ops.glDeleteRenderbuffers = gl_info->glDeleteRenderbuffers;
+ gl_info->fbo_ops.glGenRenderbuffers = gl_info->glGenRenderbuffers;
+ gl_info->fbo_ops.glRenderbufferStorage = gl_info->glRenderbufferStorage;
+ gl_info->fbo_ops.glRenderbufferStorageMultisample = gl_info->glRenderbufferStorageMultisample;
+ gl_info->fbo_ops.glGetRenderbufferParameteriv = gl_info->glGetRenderbufferParameteriv;
+ gl_info->fbo_ops.glIsFramebuffer = gl_info->glIsFramebuffer;
+ gl_info->fbo_ops.glBindFramebuffer = gl_info->glBindFramebuffer;
+ gl_info->fbo_ops.glDeleteFramebuffers = gl_info->glDeleteFramebuffers;
+ gl_info->fbo_ops.glGenFramebuffers = gl_info->glGenFramebuffers;
+ gl_info->fbo_ops.glCheckFramebufferStatus = gl_info->glCheckFramebufferStatus;
+ gl_info->fbo_ops.glFramebufferTexture1D = gl_info->glFramebufferTexture1D;
+ gl_info->fbo_ops.glFramebufferTexture2D = gl_info->glFramebufferTexture2D;
+ gl_info->fbo_ops.glFramebufferTexture3D = gl_info->glFramebufferTexture3D;
+ gl_info->fbo_ops.glFramebufferRenderbuffer = gl_info->glFramebufferRenderbuffer;
+ gl_info->fbo_ops.glGetFramebufferAttachmentParameteriv = gl_info->glGetFramebufferAttachmentParameteriv;
+ gl_info->fbo_ops.glBlitFramebuffer = gl_info->glBlitFramebuffer;
+ gl_info->fbo_ops.glGenerateMipmap = gl_info->glGenerateMipmap;
+ }
+ else
+ {
+ if (gl_info->supported[EXT_FRAMEBUFFER_OBJECT])
+ {
+ gl_info->fbo_ops.glIsRenderbuffer = gl_info->glIsRenderbufferEXT;
+ gl_info->fbo_ops.glBindRenderbuffer = gl_info->glBindRenderbufferEXT;
+ gl_info->fbo_ops.glDeleteRenderbuffers = gl_info->glDeleteRenderbuffersEXT;
+ gl_info->fbo_ops.glGenRenderbuffers = gl_info->glGenRenderbuffersEXT;
+ gl_info->fbo_ops.glRenderbufferStorage = gl_info->glRenderbufferStorageEXT;
+ gl_info->fbo_ops.glGetRenderbufferParameteriv = gl_info->glGetRenderbufferParameterivEXT;
+ gl_info->fbo_ops.glIsFramebuffer = gl_info->glIsFramebufferEXT;
+ gl_info->fbo_ops.glBindFramebuffer = gl_info->glBindFramebufferEXT;
+ gl_info->fbo_ops.glDeleteFramebuffers = gl_info->glDeleteFramebuffersEXT;
+ gl_info->fbo_ops.glGenFramebuffers = gl_info->glGenFramebuffersEXT;
+ gl_info->fbo_ops.glCheckFramebufferStatus = gl_info->glCheckFramebufferStatusEXT;
+ gl_info->fbo_ops.glFramebufferTexture1D = gl_info->glFramebufferTexture1DEXT;
+ gl_info->fbo_ops.glFramebufferTexture2D = gl_info->glFramebufferTexture2DEXT;
+ gl_info->fbo_ops.glFramebufferTexture3D = gl_info->glFramebufferTexture3DEXT;
+ gl_info->fbo_ops.glFramebufferRenderbuffer = gl_info->glFramebufferRenderbufferEXT;
+ gl_info->fbo_ops.glGetFramebufferAttachmentParameteriv = gl_info->glGetFramebufferAttachmentParameterivEXT;
+ gl_info->fbo_ops.glGenerateMipmap = gl_info->glGenerateMipmapEXT;
+ }
+#ifndef VBOX_WITH_VMSVGA
+ else if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
+ {
+ WARN_(d3d_caps)("Framebuffer objects not supported, falling back to backbuffer offscreen rendering mode.\n");
+ wined3d_settings.offscreen_rendering_mode = ORM_BACKBUFFER;
+ }
+#endif
+ if (gl_info->supported[EXT_FRAMEBUFFER_BLIT])
+ {
+ gl_info->fbo_ops.glBlitFramebuffer = gl_info->glBlitFramebufferEXT;
+ }
+ if (gl_info->supported[EXT_FRAMEBUFFER_MULTISAMPLE])
+ {
+ gl_info->fbo_ops.glRenderbufferStorageMultisample = gl_info->glRenderbufferStorageMultisampleEXT;
+ }
+ }
+
+#ifndef VBOX_WITH_VMSVGA
+ /* MRTs are currently only supported when FBOs are used. */
+ if (wined3d_settings.offscreen_rendering_mode != ORM_FBO)
+ {
+ gl_info->limits.buffers = 1;
+ }
+#endif
+ gl_vendor = wined3d_guess_gl_vendor(gl_info, gl_vendor_str, gl_renderer_str);
+ card_vendor = wined3d_guess_card_vendor(gl_vendor_str, gl_renderer_str);
+ TRACE_(d3d_caps)("found GL_VENDOR (%s)->(0x%04x/0x%04x)\n", debugstr_a(gl_vendor_str), gl_vendor, card_vendor);
+
+ device = wined3d_guess_card(gl_info, gl_renderer_str, &gl_vendor, &card_vendor, &vidmem);
+ TRACE_(d3d_caps)("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", card_vendor, device);
+
+ /* If we have an estimate use it, else default to 64MB; */
+ if(vidmem)
+ gl_info->vidmem = vidmem*1024*1024; /* convert from MBs to bytes */
+ else
+ gl_info->vidmem = WINE_DEFAULT_VIDMEM;
+
+ gl_info->wrap_lookup[WINED3DTADDRESS_WRAP - WINED3DTADDRESS_WRAP] = GL_REPEAT;
+ gl_info->wrap_lookup[WINED3DTADDRESS_MIRROR - WINED3DTADDRESS_WRAP] =
+ gl_info->supported[ARB_TEXTURE_MIRRORED_REPEAT] ? GL_MIRRORED_REPEAT_ARB : GL_REPEAT;
+ gl_info->wrap_lookup[WINED3DTADDRESS_CLAMP - WINED3DTADDRESS_WRAP] = GL_CLAMP_TO_EDGE;
+ gl_info->wrap_lookup[WINED3DTADDRESS_BORDER - WINED3DTADDRESS_WRAP] =
+ gl_info->supported[ARB_TEXTURE_BORDER_CLAMP] ? GL_CLAMP_TO_BORDER_ARB : GL_REPEAT;
+ gl_info->wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP] =
+ gl_info->supported[ATI_TEXTURE_MIRROR_ONCE] ? GL_MIRROR_CLAMP_TO_EDGE_ATI : GL_REPEAT;
+
+#ifndef VBOX_WITH_VMSVGA
+ /* Make sure there's an active HDC else the WGL extensions will fail */
+ hdc = pwglGetCurrentDC();
+ if (hdc) {
+ /* Not all GL drivers might offer WGL extensions e.g. VirtualBox */
+ if(GL_EXTCALL(wglGetExtensionsStringARB))
+ WGL_Extensions = GL_EXTCALL(wglGetExtensionsStringARB(hdc));
+
+ if (NULL == WGL_Extensions) {
+ ERR(" WGL_Extensions returns NULL\n");
+ } else {
+ TRACE_(d3d_caps)("WGL_Extensions reported:\n");
+ while (*WGL_Extensions != 0x00) {
+ const char *Start;
+ char ThisExtn[256];
+
+ while (isspace(*WGL_Extensions)) WGL_Extensions++;
+ Start = WGL_Extensions;
+ while (!isspace(*WGL_Extensions) && *WGL_Extensions != 0x00) {
+ WGL_Extensions++;
+ }
+
+ len = WGL_Extensions - Start;
+ if (len == 0 || len >= sizeof(ThisExtn))
+ continue;
+
+ memcpy(ThisExtn, Start, len);
+ ThisExtn[len] = '\0';
+ TRACE_(d3d_caps)("- %s\n", debugstr_a(ThisExtn));
+
+ if (!strcmp(ThisExtn, "WGL_ARB_pixel_format")) {
+ gl_info->supported[WGL_ARB_PIXEL_FORMAT] = TRUE;
+ TRACE_(d3d_caps)("FOUND: WGL_ARB_pixel_format support\n");
+ }
+ if (!strcmp(ThisExtn, "WGL_WINE_pixel_format_passthrough")) {
+ gl_info->supported[WGL_WINE_PIXEL_FORMAT_PASSTHROUGH] = TRUE;
+ TRACE_(d3d_caps)("FOUND: WGL_WINE_pixel_format_passthrough support\n");
+ }
+ }
+ }
+ }
+#endif
+
+ fixup_extensions(gl_info, gl_renderer_str, gl_vendor, card_vendor, device);
+#ifndef VBOX_WITH_VMSVGA
+ init_driver_info(driver_info, card_vendor, device);
+ add_gl_compat_wrappers(gl_info);
+#endif
+
+ return TRUE;
+}
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c b/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
new file mode 100644
index 00000000..15b337b7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
@@ -0,0 +1,5608 @@
+/*
+ * GLSL pixel and vertex shader implementation
+ *
+ * Copyright 2006 Jason Green
+ * Copyright 2006-2007 Henri Verbeet
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/*
+ * D3D shader asm has swizzles on source parameters, and write masks for
+ * destination parameters. GLSL uses swizzles for both. The result of this is
+ * that for example "mov dst.xw, src.zyxw" becomes "dst.xw = src.zw" in GLSL.
+ * Ie, to generate a proper GLSL source swizzle, we need to take the D3D write
+ * mask for the destination parameter into account.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+#include <limits.h>
+#include <stdio.h>
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+WINE_DECLARE_DEBUG_CHANNEL(d3d_constants);
+WINE_DECLARE_DEBUG_CHANNEL(d3d_caps);
+WINE_DECLARE_DEBUG_CHANNEL(d3d);
+
+#ifdef VBOX_WITH_VMSVGA
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/log.h>
+#undef WDLOG
+#define WDLOG(_m) Log(_m)
+#undef CONST
+#define CONST const
+#endif
+
+#define GLINFO_LOCATION (*gl_info)
+
+#define WINED3D_GLSL_SAMPLE_PROJECTED 0x1
+#define WINED3D_GLSL_SAMPLE_RECT 0x2
+#define WINED3D_GLSL_SAMPLE_LOD 0x4
+#define WINED3D_GLSL_SAMPLE_GRAD 0x8
+
+typedef struct {
+ char reg_name[150];
+ char mask_str[6];
+} glsl_dst_param_t;
+
+typedef struct {
+ char reg_name[150];
+ char param_str[200];
+} glsl_src_param_t;
+
+typedef struct {
+ const char *name;
+ DWORD coord_mask;
+} glsl_sample_function_t;
+
+enum heap_node_op
+{
+ HEAP_NODE_TRAVERSE_LEFT,
+ HEAP_NODE_TRAVERSE_RIGHT,
+ HEAP_NODE_POP,
+};
+
+struct constant_entry
+{
+ unsigned int idx;
+ unsigned int version;
+};
+
+struct constant_heap
+{
+ struct constant_entry *entries;
+ unsigned int *positions;
+ unsigned int size;
+};
+
+/* GLSL shader private data */
+struct shader_glsl_priv {
+ struct wined3d_shader_buffer shader_buffer;
+ struct wine_rb_tree program_lookup;
+ struct glsl_shader_prog_link *glsl_program;
+ struct constant_heap vconst_heap;
+ struct constant_heap pconst_heap;
+ unsigned char *stack;
+ GLhandleARB depth_blt_program[tex_type_count];
+ UINT next_constant_version;
+};
+
+/* Struct to maintain data about a linked GLSL program */
+struct glsl_shader_prog_link {
+ struct wine_rb_entry program_lookup_entry;
+ struct list vshader_entry;
+ struct list pshader_entry;
+ GLhandleARB programId;
+ GLint *vuniformF_locations;
+ GLint *puniformF_locations;
+ GLint vuniformI_locations[MAX_CONST_I];
+ GLint puniformI_locations[MAX_CONST_I];
+ GLint posFixup_location;
+ GLint np2Fixup_location;
+ GLint bumpenvmat_location[MAX_TEXTURES];
+ GLint luminancescale_location[MAX_TEXTURES];
+ GLint luminanceoffset_location[MAX_TEXTURES];
+ GLint ycorrection_location;
+ GLenum vertex_color_clamp;
+ IWineD3DVertexShader *vshader;
+ IWineD3DPixelShader *pshader;
+ struct vs_compile_args vs_args;
+ struct ps_compile_args ps_args;
+ UINT constant_version;
+ const struct wined3d_context *context;
+ UINT inp2Fixup_info;
+};
+
+#ifdef VBOX_WITH_VMSVGA
+# define WINEFIXUPINFO_NOINDEX (~0U)
+#else
+#define WINEFIXUPINFO_NOINDEX (~0UL)
+#endif
+#define WINEFIXUPINFO_GET(_p) get_fixup_info((const IWineD3DPixelShaderImpl*)(_p)->pshader, (_p)->inp2Fixup_info)
+#define WINEFIXUPINFO_ISVALID(_p) ((_p)->inp2Fixup_info != WINEFIXUPINFO_NOINDEX)
+#ifdef VBOX_WITH_VMSVGA
+# define WINEFIXUPINFO_INIT(_p) do { (_p)->inp2Fixup_info = WINEFIXUPINFO_NOINDEX; } while (0)
+#else
+#define WINEFIXUPINFO_INIT(_p) ((_p)->inp2Fixup_info == WINEFIXUPINFO_NOINDEX)
+#endif
+
+typedef struct {
+ IWineD3DVertexShader *vshader;
+ IWineD3DPixelShader *pshader;
+ struct ps_compile_args ps_args;
+ struct vs_compile_args vs_args;
+ const struct wined3d_context *context;
+} glsl_program_key_t;
+
+struct shader_glsl_ctx_priv {
+ const struct vs_compile_args *cur_vs_args;
+ const struct ps_compile_args *cur_ps_args;
+ struct ps_np2fixup_info *cur_np2fixup_info;
+};
+
+struct glsl_ps_compiled_shader
+{
+ struct ps_compile_args args;
+ struct ps_np2fixup_info np2fixup;
+ GLhandleARB prgId;
+ const struct wined3d_context *context;
+};
+
+struct glsl_pshader_private
+{
+ struct glsl_ps_compiled_shader *gl_shaders;
+ UINT num_gl_shaders, shader_array_size;
+};
+
+struct glsl_vs_compiled_shader
+{
+ struct vs_compile_args args;
+ GLhandleARB prgId;
+ const struct wined3d_context *context;
+};
+
+struct glsl_vshader_private
+{
+ struct glsl_vs_compiled_shader *gl_shaders;
+ UINT num_gl_shaders, shader_array_size;
+};
+
+static const char *debug_gl_shader_type(GLenum type)
+{
+ switch (type)
+ {
+#define WINED3D_TO_STR(u) case u: return #u
+ WINED3D_TO_STR(GL_VERTEX_SHADER_ARB);
+ WINED3D_TO_STR(GL_GEOMETRY_SHADER_ARB);
+ WINED3D_TO_STR(GL_FRAGMENT_SHADER_ARB);
+#undef WINED3D_TO_STR
+ default:
+ return wine_dbg_sprintf("UNKNOWN(%#x)", type);
+ }
+}
+
+/* Extract a line from the info log.
+ * Note that this modifies the source string. */
+static char *get_info_log_line(char **ptr, int *pcbStr)
+{
+ char *p, *q;
+ const int cbStr = *pcbStr;
+
+ if (!cbStr)
+ {
+ /* zero-length string */
+ return NULL;
+ }
+
+ if ((*ptr)[cbStr-1] != '\0')
+ {
+ ERR("string should be null-rerminated, forcing it!");
+ (*ptr)[cbStr-1] = '\0';
+ }
+ p = *ptr;
+ if (!*p)
+ {
+ *pcbStr = 0;
+ return NULL;
+ }
+
+ if (!(q = strstr(p, "\n")))
+ {
+ /* the string contains a single line! */
+ *ptr += strlen(p);
+ *pcbStr = 0;
+ return p;
+ }
+
+ *q = '\0';
+ *pcbStr = cbStr - (((uintptr_t)q) - ((uintptr_t)p)) - 1;
+ Assert((*pcbStr) >= 0);
+ Assert((*pcbStr) < cbStr);
+ *ptr = q + 1;
+
+ return p;
+}
+
+/** Prints the GLSL info log which will contain error messages if they exist */
+/* GL locking is done by the caller */
+static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleARB obj)
+{
+ int infologLength = 0;
+ char *infoLog;
+ unsigned int i;
+ BOOL is_spam;
+
+ static const char * const spam[] =
+ {
+ "Vertex shader was successfully compiled to run on hardware.\n", /* fglrx */
+ "Fragment shader was successfully compiled to run on hardware.\n", /* fglrx, with \n */
+ "Fragment shader was successfully compiled to run on hardware.", /* fglrx, no \n */
+ "Fragment shader(s) linked, vertex shader(s) linked. \n ", /* fglrx, with \n */
+ "Fragment shader(s) linked, vertex shader(s) linked.", /* fglrx, no \n */
+ "Vertex shader(s) linked, no fragment shader(s) defined. \n ", /* fglrx, with \n */
+ "Vertex shader(s) linked, no fragment shader(s) defined.", /* fglrx, no \n */
+ "Fragment shader(s) linked, no vertex shader(s) defined. \n ", /* fglrx, with \n */
+ "Fragment shader(s) linked, no vertex shader(s) defined.", /* fglrx, no \n */
+ };
+
+#ifndef VBOXWINEDBG_SHADERS
+ if (!TRACE_ON(d3d_shader) && !FIXME_ON(d3d_shader)) return;
+#endif
+
+ GL_EXTCALL(glGetObjectParameterivARB(obj,
+ GL_OBJECT_INFO_LOG_LENGTH_ARB,
+ &infologLength));
+
+ /* A size of 1 is just a null-terminated string, so the log should be bigger than
+ * that if there are errors. */
+ if (infologLength > 1)
+ {
+ char *ptr, *line;
+ int cbPtr;
+
+ /* Fglrx doesn't terminate the string properly, but it tells us the proper length.
+ * So use HEAP_ZERO_MEMORY to avoid uninitialized bytes
+ */
+ infoLog = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, infologLength);
+ GL_EXTCALL(glGetInfoLogARB(obj, infologLength, NULL, infoLog));
+ is_spam = FALSE;
+
+ for(i = 0; i < sizeof(spam) / sizeof(spam[0]); i++) {
+ if(strcmp(infoLog, spam[i]) == 0) {
+ is_spam = TRUE;
+ break;
+ }
+ }
+
+ ptr = infoLog;
+ cbPtr = infologLength;
+ if (is_spam)
+ {
+ WDLOG(("Spam received from GLSL shader #%u:\n", obj));
+ while ((line = get_info_log_line(&ptr, &cbPtr))) WDLOG((" %s\n", line));
+ }
+ else
+ {
+ WDLOG(("Error received from GLSL shader #%u:\n", obj));
+ while ((line = get_info_log_line(&ptr, &cbPtr))) WDLOG((" %s\n", line));
+ }
+ HeapFree(GetProcessHeap(), 0, infoLog);
+ }
+}
+
+static void shader_glsl_dump_shader_source(const struct wined3d_gl_info *gl_info, GLhandleARB shader)
+{
+ char *ptr;
+ GLint tmp, source_size;
+ char *source = NULL;
+ int cbPtr;
+
+ GL_EXTCALL(glGetObjectParameterivARB(shader, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &tmp));
+
+ source = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tmp);
+ if (!source)
+ {
+ ERR("Failed to allocate %d bytes for shader source.\n", tmp);
+ return;
+ }
+
+ source_size = tmp;
+
+ WDLOG(("Object %u:\n", shader));
+ GL_EXTCALL(glGetObjectParameterivARB(shader, GL_OBJECT_SUBTYPE_ARB, &tmp));
+ WDLOG((" GL_OBJECT_SUBTYPE_ARB: %s.\n", debug_gl_shader_type(tmp)));
+ GL_EXTCALL(glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &tmp));
+ WDLOG((" GL_OBJECT_COMPILE_STATUS_ARB: %d.\n", tmp));
+ WDLOG(("\n"));
+
+ if (tmp == 0)
+ {
+ /* Compilation error, print the compiler's error messages. */
+ print_glsl_info_log(gl_info, shader);
+ }
+
+ ptr = source;
+ cbPtr = source_size;
+ GL_EXTCALL(glGetShaderSourceARB(shader, source_size, NULL, source));
+#if 0
+ while ((line = get_info_log_line(&ptr, &cbPtr))) WDLOG((" %s\n", line));
+#else
+ WDLOG(("*****shader source***\n"));
+ WDLOG((" %s\n", source));
+ WDLOG(("\n*****END shader source***\n\n"));
+#endif
+ WDLOG(("\n"));
+#ifdef VBOX
+ HeapFree(GetProcessHeap(), 0, source);
+#endif
+}
+
+/* GL locking is done by the caller. */
+static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_info, GLhandleARB program)
+{
+ GLint i, object_count;
+ GLhandleARB *objects;
+ char *source = NULL;
+
+ WDLOG(("\n***************************dumping program %d******************************\n", program));
+
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_ATTACHED_OBJECTS_ARB, &object_count));
+ objects = HeapAlloc(GetProcessHeap(), 0, object_count * sizeof(*objects));
+ if (!objects)
+ {
+ ERR("Failed to allocate object array memory.\n");
+ return;
+ }
+
+ GL_EXTCALL(glGetAttachedObjectsARB(program, object_count, NULL, objects));
+ for (i = 0; i < object_count; ++i)
+ {
+ shader_glsl_dump_shader_source(gl_info, objects[i]);
+ }
+
+ HeapFree(GetProcessHeap(), 0, source);
+ HeapFree(GetProcessHeap(), 0, objects);
+
+ WDLOG(("\n***************************END dumping program %d******************************\n\n", program));
+}
+
+/* GL locking is done by the caller. */
+static void shader_glsl_validate_compile_link(const struct wined3d_gl_info *gl_info, GLhandleARB program, GLboolean fIsProgram)
+{
+ GLint tmp = -1;
+
+#ifndef VBOXWINEDBG_SHADERS
+ if (!TRACE_ON(d3d_shader) && !FIXME_ON(d3d_shader)) return;
+#endif
+
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_TYPE_ARB, &tmp));
+ if (tmp == GL_PROGRAM_OBJECT_ARB)
+ {
+ if (!fIsProgram)
+ {
+ ERR("this is a program, but shader expected");
+ }
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &tmp));
+ if (!tmp)
+ {
+ ERR("Program %p link status invalid.\n", (void *)(uintptr_t)program);
+#ifndef VBOXWINEDBG_SHADERS
+ shader_glsl_dump_program_source(gl_info, program);
+#endif
+ }
+#if defined(VBOX_WITH_VMSVGA) && defined(DEBUG)
+ shader_glsl_dump_program_source(gl_info, program);
+#endif
+ }
+ else if (tmp == GL_SHADER_OBJECT_ARB)
+ {
+ if (fIsProgram)
+ {
+ ERR("this is a shader, but program expected");
+ }
+
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_COMPILE_STATUS_ARB, &tmp));
+ if (!tmp)
+ {
+ ERR("Shader %p compile status invalid.\n", (void *)(uintptr_t)program);
+ shader_glsl_dump_shader_source(gl_info, program);
+ }
+ }
+ else
+ {
+ ERR("unexpected oject type(%d)!", tmp);
+ }
+
+ print_glsl_info_log(gl_info, program);
+}
+
+/**
+ * Loads (pixel shader) samplers
+ */
+/* GL locking is done by the caller */
+static void shader_glsl_load_psamplers(const struct wined3d_gl_info *gl_info,
+ DWORD *tex_unit_map, GLhandleARB programId)
+{
+ GLint name_loc;
+ int i;
+ char sampler_name[20];
+
+ for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i) {
+ snprintf(sampler_name, sizeof(sampler_name), "Psampler%d", i);
+ name_loc = GL_EXTCALL(glGetUniformLocationARB(programId, sampler_name));
+ if (name_loc != -1) {
+ DWORD mapped_unit = tex_unit_map[i];
+ if (mapped_unit != WINED3D_UNMAPPED_STAGE && mapped_unit < gl_info->limits.fragment_samplers)
+ {
+ TRACE("Loading %s for texture %d\n", sampler_name, mapped_unit);
+ GL_EXTCALL(glUniform1iARB(name_loc, mapped_unit));
+ checkGLcall("glUniform1iARB");
+ } else {
+ ERR("Trying to load sampler %s on unsupported unit %d\n", sampler_name, mapped_unit);
+ }
+ }
+ }
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_load_vsamplers(const struct wined3d_gl_info *gl_info,
+ DWORD *tex_unit_map, GLhandleARB programId)
+{
+ GLint name_loc;
+ char sampler_name[20];
+ int i;
+
+ for (i = 0; i < MAX_VERTEX_SAMPLERS; ++i) {
+ snprintf(sampler_name, sizeof(sampler_name), "Vsampler%d", i);
+ name_loc = GL_EXTCALL(glGetUniformLocationARB(programId, sampler_name));
+ if (name_loc != -1) {
+ DWORD mapped_unit = tex_unit_map[MAX_FRAGMENT_SAMPLERS + i];
+ if (mapped_unit != WINED3D_UNMAPPED_STAGE && mapped_unit < gl_info->limits.combined_samplers)
+ {
+ TRACE("Loading %s for texture %d\n", sampler_name, mapped_unit);
+ GL_EXTCALL(glUniform1iARB(name_loc, mapped_unit));
+ checkGLcall("glUniform1iARB");
+ } else {
+ ERR("Trying to load sampler %s on unsupported unit %d\n", sampler_name, mapped_unit);
+ }
+ }
+ }
+}
+
+/* GL locking is done by the caller */
+static inline void walk_constant_heap(const struct wined3d_gl_info *gl_info, const float *constants,
+ const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version)
+{
+ int stack_idx = 0;
+ unsigned int heap_idx = 1;
+ unsigned int idx;
+
+ if (heap->entries[heap_idx].version <= version) return;
+
+ idx = heap->entries[heap_idx].idx;
+ if (constant_locations[idx] != -1) GL_EXTCALL(glUniform4fvARB(constant_locations[idx], 1, &constants[idx * 4]));
+ stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+
+ while (stack_idx >= 0)
+ {
+ /* Note that we fall through to the next case statement. */
+ switch(stack[stack_idx])
+ {
+ case HEAP_NODE_TRAVERSE_LEFT:
+ {
+ unsigned int left_idx = heap_idx << 1;
+ if (left_idx < heap->size && heap->entries[left_idx].version > version)
+ {
+ heap_idx = left_idx;
+ idx = heap->entries[heap_idx].idx;
+ if (constant_locations[idx] != -1)
+ GL_EXTCALL(glUniform4fvARB(constant_locations[idx], 1, &constants[idx * 4]));
+
+ stack[stack_idx++] = HEAP_NODE_TRAVERSE_RIGHT;
+ stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+ break;
+ }
+ } RT_FALL_THRU();
+
+ case HEAP_NODE_TRAVERSE_RIGHT:
+ {
+ unsigned int right_idx = (heap_idx << 1) + 1;
+ if (right_idx < heap->size && heap->entries[right_idx].version > version)
+ {
+ heap_idx = right_idx;
+ idx = heap->entries[heap_idx].idx;
+ if (constant_locations[idx] != -1)
+ GL_EXTCALL(glUniform4fvARB(constant_locations[idx], 1, &constants[idx * 4]));
+
+ stack[stack_idx++] = HEAP_NODE_POP;
+ stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+ break;
+ }
+ } RT_FALL_THRU();
+
+ case HEAP_NODE_POP:
+ {
+ heap_idx >>= 1;
+ --stack_idx;
+ break;
+ }
+ }
+ }
+ checkGLcall("walk_constant_heap()");
+}
+
+/* GL locking is done by the caller */
+static inline void apply_clamped_constant(const struct wined3d_gl_info *gl_info, GLint location, const GLfloat *data)
+{
+ GLfloat clamped_constant[4];
+
+ if (location == -1) return;
+
+ clamped_constant[0] = data[0] < -1.0f ? -1.0f : data[0] > 1.0f ? 1.0f : data[0];
+ clamped_constant[1] = data[1] < -1.0f ? -1.0f : data[1] > 1.0f ? 1.0f : data[1];
+ clamped_constant[2] = data[2] < -1.0f ? -1.0f : data[2] > 1.0f ? 1.0f : data[2];
+ clamped_constant[3] = data[3] < -1.0f ? -1.0f : data[3] > 1.0f ? 1.0f : data[3];
+
+ GL_EXTCALL(glUniform4fvARB(location, 1, clamped_constant));
+}
+
+/* GL locking is done by the caller */
+static inline void walk_constant_heap_clamped(const struct wined3d_gl_info *gl_info, const float *constants,
+ const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version)
+{
+ int stack_idx = 0;
+ unsigned int heap_idx = 1;
+ unsigned int idx;
+
+ if (heap->entries[heap_idx].version <= version) return;
+
+ idx = heap->entries[heap_idx].idx;
+ apply_clamped_constant(gl_info, constant_locations[idx], &constants[idx * 4]);
+ stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+
+ while (stack_idx >= 0)
+ {
+ /* Note that we fall through to the next case statement. */
+ switch(stack[stack_idx])
+ {
+ case HEAP_NODE_TRAVERSE_LEFT:
+ {
+ unsigned int left_idx = heap_idx << 1;
+ if (left_idx < heap->size && heap->entries[left_idx].version > version)
+ {
+ heap_idx = left_idx;
+ idx = heap->entries[heap_idx].idx;
+ apply_clamped_constant(gl_info, constant_locations[idx], &constants[idx * 4]);
+
+ stack[stack_idx++] = HEAP_NODE_TRAVERSE_RIGHT;
+ stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+ break;
+ }
+ } RT_FALL_THRU();
+
+ case HEAP_NODE_TRAVERSE_RIGHT:
+ {
+ unsigned int right_idx = (heap_idx << 1) + 1;
+ if (right_idx < heap->size && heap->entries[right_idx].version > version)
+ {
+ heap_idx = right_idx;
+ idx = heap->entries[heap_idx].idx;
+ apply_clamped_constant(gl_info, constant_locations[idx], &constants[idx * 4]);
+
+ stack[stack_idx++] = HEAP_NODE_POP;
+ stack[stack_idx] = HEAP_NODE_TRAVERSE_LEFT;
+ break;
+ }
+ } RT_FALL_THRU();
+
+ case HEAP_NODE_POP:
+ {
+ heap_idx >>= 1;
+ --stack_idx;
+ break;
+ }
+ }
+ }
+ checkGLcall("walk_constant_heap_clamped()");
+}
+
+/* Loads floating point constants (aka uniforms) into the currently set GLSL program. */
+/* GL locking is done by the caller */
+static void shader_glsl_load_constantsF(IWineD3DBaseShaderImpl *This, const struct wined3d_gl_info *gl_info,
+ const float *constants, const GLint *constant_locations, const struct constant_heap *heap,
+ unsigned char *stack, UINT version)
+{
+ const local_constant *lconst;
+
+ /* 1.X pshaders have the constants clamped to [-1;1] implicitly. */
+ if (This->baseShader.reg_maps.shader_version.major == 1
+ && shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type))
+ walk_constant_heap_clamped(gl_info, constants, constant_locations, heap, stack, version);
+ else
+ walk_constant_heap(gl_info, constants, constant_locations, heap, stack, version);
+
+ if (!This->baseShader.load_local_constsF)
+ {
+ TRACE("No need to load local float constants for this shader\n");
+ return;
+ }
+
+ /* Immediate constants are clamped to [-1;1] at shader creation time if needed */
+ LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry)
+ {
+ GLint location = constant_locations[lconst->idx];
+ /* We found this uniform name in the program - go ahead and send the data */
+ if (location != -1) GL_EXTCALL(glUniform4fvARB(location, 1, (const GLfloat *)lconst->value));
+ }
+ checkGLcall("glUniform4fvARB()");
+}
+
+/* Loads integer constants (aka uniforms) into the currently set GLSL program. */
+/* GL locking is done by the caller */
+static void shader_glsl_load_constantsI(IWineD3DBaseShaderImpl *This, const struct wined3d_gl_info *gl_info,
+ const GLint locations[MAX_CONST_I], const int *constants, WORD constants_set)
+{
+ unsigned int i;
+ struct list* ptr;
+
+ for (i = 0; constants_set; constants_set >>= 1, ++i)
+ {
+ if (!(constants_set & 1)) continue;
+
+ TRACE_(d3d_constants)("Loading constants %u: %i, %i, %i, %i\n",
+ i, constants[i*4], constants[i*4+1], constants[i*4+2], constants[i*4+3]);
+
+ /* We found this uniform name in the program - go ahead and send the data */
+ GL_EXTCALL(glUniform4ivARB(locations[i], 1, &constants[i*4]));
+ checkGLcall("glUniform4ivARB");
+ }
+
+ /* Load immediate constants */
+ ptr = list_head(&This->baseShader.constantsI);
+ while (ptr) {
+ const struct local_constant *lconst = LIST_ENTRY(ptr, const struct local_constant, entry);
+ unsigned int idx = lconst->idx;
+ const GLint *values = (const GLint *)lconst->value;
+
+ TRACE_(d3d_constants)("Loading local constants %i: %i, %i, %i, %i\n", idx,
+ values[0], values[1], values[2], values[3]);
+
+ /* We found this uniform name in the program - go ahead and send the data */
+ GL_EXTCALL(glUniform4ivARB(locations[idx], 1, values));
+ checkGLcall("glUniform4ivARB");
+ ptr = list_next(&This->baseShader.constantsI, ptr);
+ }
+}
+
+/* Loads boolean constants (aka uniforms) into the currently set GLSL program. */
+/* GL locking is done by the caller */
+static void shader_glsl_load_constantsB(IWineD3DBaseShaderImpl *This, const struct wined3d_gl_info *gl_info,
+ GLhandleARB programId, const BOOL *constants, WORD constants_set)
+{
+ GLint tmp_loc;
+ unsigned int i;
+ char tmp_name[8];
+ const char *prefix;
+ struct list* ptr;
+
+ switch (This->baseShader.reg_maps.shader_version.type)
+ {
+ case WINED3D_SHADER_TYPE_VERTEX:
+ prefix = "VB";
+ break;
+
+ case WINED3D_SHADER_TYPE_GEOMETRY:
+ prefix = "GB";
+ break;
+
+ case WINED3D_SHADER_TYPE_PIXEL:
+ prefix = "PB";
+ break;
+
+ default:
+ FIXME("Unknown shader type %#x.\n",
+ This->baseShader.reg_maps.shader_version.type);
+ prefix = "UB";
+ break;
+ }
+
+ /* TODO: Benchmark and see if it would be beneficial to store the
+ * locations of the constants to avoid looking up each time */
+ for (i = 0; constants_set; constants_set >>= 1, ++i)
+ {
+ if (!(constants_set & 1)) continue;
+
+ TRACE_(d3d_constants)("Loading constants %i: %i;\n", i, constants[i]);
+
+ /* TODO: Benchmark and see if it would be beneficial to store the
+ * locations of the constants to avoid looking up each time */
+ snprintf(tmp_name, sizeof(tmp_name), "%s[%i]", prefix, i);
+ tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, tmp_name));
+ if (tmp_loc != -1)
+ {
+ /* We found this uniform name in the program - go ahead and send the data */
+ GL_EXTCALL(glUniform1ivARB(tmp_loc, 1, &constants[i]));
+ checkGLcall("glUniform1ivARB");
+ }
+ }
+
+ /* Load immediate constants */
+ ptr = list_head(&This->baseShader.constantsB);
+ while (ptr) {
+ const struct local_constant *lconst = LIST_ENTRY(ptr, const struct local_constant, entry);
+ unsigned int idx = lconst->idx;
+ const GLint *values = (const GLint *)lconst->value;
+
+ TRACE_(d3d_constants)("Loading local constants %i: %i\n", idx, values[0]);
+
+ snprintf(tmp_name, sizeof(tmp_name), "%s[%i]", prefix, idx);
+ tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, tmp_name));
+ if (tmp_loc != -1) {
+ /* We found this uniform name in the program - go ahead and send the data */
+ GL_EXTCALL(glUniform1ivARB(tmp_loc, 1, values));
+ checkGLcall("glUniform1ivARB");
+ }
+ ptr = list_next(&This->baseShader.constantsB, ptr);
+ }
+}
+
+static void reset_program_constant_version(struct wine_rb_entry *entry, void *context)
+{
+ WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry)->constant_version = 0;
+}
+
+static const struct ps_np2fixup_info * get_fixup_info(const IWineD3DPixelShaderImpl *shader, UINT inp2fixup_info)
+{
+ struct glsl_pshader_private *shader_data = shader->baseShader.backend_data;
+
+ if (inp2fixup_info == WINEFIXUPINFO_NOINDEX)
+ return NULL;
+
+ if (!shader->baseShader.backend_data)
+ {
+ ERR("no backend data\n");
+ return NULL;
+ }
+ shader_data = shader->baseShader.backend_data;
+
+ if (inp2fixup_info >= shader_data->num_gl_shaders)
+ {
+ ERR("invalid index\n");
+ return NULL;
+ }
+
+ return &shader_data->gl_shaders[inp2fixup_info].np2fixup;
+}
+
+/**
+ * Loads the texture dimensions for NP2 fixup into the currently set GLSL program.
+ */
+/* GL locking is done by the caller (state handler) */
+static void shader_glsl_load_np2fixup_constants(
+ IWineD3DDevice* device,
+ char usePixelShader,
+ char useVertexShader) {
+
+ const IWineD3DDeviceImpl* deviceImpl = (const IWineD3DDeviceImpl*) device;
+ const struct glsl_shader_prog_link* prog = ((struct shader_glsl_priv *)(deviceImpl->shader_priv))->glsl_program;
+
+ if (!prog) {
+ /* No GLSL program set - nothing to do. */
+ return;
+ }
+
+ if (!usePixelShader) {
+ /* NP2 texcoord fixup is (currently) only done for pixelshaders. */
+ return;
+ }
+
+ if (prog->ps_args.np2_fixup && -1 != prog->np2Fixup_location) {
+ const struct wined3d_gl_info *gl_info = &deviceImpl->adapter->gl_info;
+ const IWineD3DStateBlockImpl* stateBlock = (const IWineD3DStateBlockImpl*) deviceImpl->stateBlock;
+ UINT i;
+ UINT fixup = prog->ps_args.np2_fixup;
+ GLfloat np2fixup_constants[4 * MAX_FRAGMENT_SAMPLERS];
+
+ const struct ps_np2fixup_info *np2Fixup_info = WINEFIXUPINFO_GET(prog);
+
+ for (i = 0; fixup; fixup >>= 1, ++i) {
+ const unsigned char idx = np2Fixup_info->idx[i];
+ const IWineD3DBaseTextureImpl* const tex = (const IWineD3DBaseTextureImpl*) stateBlock->textures[i];
+ GLfloat* tex_dim = &np2fixup_constants[(idx >> 1) * 4];
+
+ if (!tex) {
+ FIXME("Nonexistent texture is flagged for NP2 texcoord fixup\n");
+ continue;
+ }
+
+ if (idx % 2) {
+ tex_dim[2] = tex->baseTexture.pow2Matrix[0]; tex_dim[3] = tex->baseTexture.pow2Matrix[5];
+ } else {
+ tex_dim[0] = tex->baseTexture.pow2Matrix[0]; tex_dim[1] = tex->baseTexture.pow2Matrix[5];
+ }
+ }
+
+ GL_EXTCALL(glUniform4fvARB(prog->np2Fixup_location, np2Fixup_info->num_consts, np2fixup_constants));
+ }
+}
+
+/**
+ * Loads the app-supplied constants into the currently set GLSL program.
+ */
+/* GL locking is done by the caller (state handler) */
+static void shader_glsl_load_constants(const struct wined3d_context *context,
+ char usePixelShader, char useVertexShader)
+{
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ IWineD3DDeviceImpl *device = context_get_device(context);
+ IWineD3DStateBlockImpl* stateBlock = device->stateBlock;
+ struct shader_glsl_priv *priv = device->shader_priv;
+
+ GLhandleARB programId;
+ struct glsl_shader_prog_link *prog = priv->glsl_program;
+ UINT constant_version;
+ int i;
+
+ if (!prog) {
+ /* No GLSL program set - nothing to do. */
+ return;
+ }
+ programId = prog->programId;
+ constant_version = prog->constant_version;
+
+ if (useVertexShader) {
+ IWineD3DBaseShaderImpl* vshader = (IWineD3DBaseShaderImpl*) stateBlock->vertexShader;
+
+ /* Load DirectX 9 float constants/uniforms for vertex shader */
+ shader_glsl_load_constantsF(vshader, gl_info, stateBlock->vertexShaderConstantF,
+ prog->vuniformF_locations, &priv->vconst_heap, priv->stack, constant_version);
+
+ /* Load DirectX 9 integer constants/uniforms for vertex shader */
+ shader_glsl_load_constantsI(vshader, gl_info, prog->vuniformI_locations, stateBlock->vertexShaderConstantI,
+ stateBlock->changed.vertexShaderConstantsI & vshader->baseShader.reg_maps.integer_constants);
+
+ /* Load DirectX 9 boolean constants/uniforms for vertex shader */
+ shader_glsl_load_constantsB(vshader, gl_info, programId, stateBlock->vertexShaderConstantB,
+ stateBlock->changed.vertexShaderConstantsB & vshader->baseShader.reg_maps.boolean_constants);
+
+ /* Upload the position fixup params */
+ GL_EXTCALL(glUniform4fvARB(prog->posFixup_location, 1, &device->posFixup[0]));
+ checkGLcall("glUniform4fvARB");
+ }
+
+ if (usePixelShader) {
+
+ IWineD3DBaseShaderImpl* pshader = (IWineD3DBaseShaderImpl*) stateBlock->pixelShader;
+
+ /* Load DirectX 9 float constants/uniforms for pixel shader */
+ shader_glsl_load_constantsF(pshader, gl_info, stateBlock->pixelShaderConstantF,
+ prog->puniformF_locations, &priv->pconst_heap, priv->stack, constant_version);
+
+ /* Load DirectX 9 integer constants/uniforms for pixel shader */
+ shader_glsl_load_constantsI(pshader, gl_info, prog->puniformI_locations, stateBlock->pixelShaderConstantI,
+ stateBlock->changed.pixelShaderConstantsI & pshader->baseShader.reg_maps.integer_constants);
+
+ /* Load DirectX 9 boolean constants/uniforms for pixel shader */
+ shader_glsl_load_constantsB(pshader, gl_info, programId, stateBlock->pixelShaderConstantB,
+ stateBlock->changed.pixelShaderConstantsB & pshader->baseShader.reg_maps.boolean_constants);
+
+ /* Upload the environment bump map matrix if needed. The needsbumpmat member specifies the texture stage to load the matrix from.
+ * It can't be 0 for a valid texbem instruction.
+ */
+ for(i = 0; i < MAX_TEXTURES; i++) {
+ const float *data;
+
+ if(prog->bumpenvmat_location[i] == -1) continue;
+
+ data = (const float *)&stateBlock->textureState[i][WINED3DTSS_BUMPENVMAT00];
+ GL_EXTCALL(glUniformMatrix2fvARB(prog->bumpenvmat_location[i], 1, 0, data));
+ checkGLcall("glUniformMatrix2fvARB");
+
+ /* texbeml needs the luminance scale and offset too. If texbeml is used, needsbumpmat
+ * is set too, so we can check that in the needsbumpmat check
+ */
+ if(prog->luminancescale_location[i] != -1) {
+ const GLfloat *scale = (const GLfloat *)&stateBlock->textureState[i][WINED3DTSS_BUMPENVLSCALE];
+ const GLfloat *offset = (const GLfloat *)&stateBlock->textureState[i][WINED3DTSS_BUMPENVLOFFSET];
+
+ GL_EXTCALL(glUniform1fvARB(prog->luminancescale_location[i], 1, scale));
+ checkGLcall("glUniform1fvARB");
+ GL_EXTCALL(glUniform1fvARB(prog->luminanceoffset_location[i], 1, offset));
+ checkGLcall("glUniform1fvARB");
+ }
+ }
+
+ if(((IWineD3DPixelShaderImpl *) pshader)->vpos_uniform) {
+ float correction_params[4];
+
+ if (context->render_offscreen)
+ {
+ correction_params[0] = 0.0f;
+ correction_params[1] = 1.0f;
+ } else {
+ /* position is window relative, not viewport relative */
+#ifdef VBOX_WITH_VMSVGA
+ correction_params[0] = device->rtHeight;
+#else
+ correction_params[0] = ((IWineD3DSurfaceImpl *)context->current_rt)->currentDesc.Height;
+#endif
+ correction_params[1] = -1.0f;
+ }
+ GL_EXTCALL(glUniform4fvARB(prog->ycorrection_location, 1, correction_params));
+ }
+ }
+
+ if (priv->next_constant_version == UINT_MAX)
+ {
+ TRACE("Max constant version reached, resetting to 0.\n");
+ wine_rb_for_each_entry(&priv->program_lookup, reset_program_constant_version, NULL);
+ priv->next_constant_version = 1;
+ }
+ else
+ {
+ prog->constant_version = priv->next_constant_version++;
+ }
+}
+
+static inline void update_heap_entry(struct constant_heap *heap, unsigned int idx,
+ unsigned int heap_idx, DWORD new_version)
+{
+ struct constant_entry *entries = heap->entries;
+ unsigned int *positions = heap->positions;
+ unsigned int parent_idx;
+
+ while (heap_idx > 1)
+ {
+ parent_idx = heap_idx >> 1;
+
+ if (new_version <= entries[parent_idx].version) break;
+
+ entries[heap_idx] = entries[parent_idx];
+ positions[entries[parent_idx].idx] = heap_idx;
+ heap_idx = parent_idx;
+ }
+
+ entries[heap_idx].version = new_version;
+ entries[heap_idx].idx = idx;
+ positions[idx] = heap_idx;
+}
+
+static void shader_glsl_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count)
+{
+ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ struct shader_glsl_priv *priv = This->shader_priv;
+ struct constant_heap *heap = &priv->vconst_heap;
+ UINT i;
+
+ for (i = start; i < count + start; ++i)
+ {
+ if (!This->stateBlock->changed.vertexShaderConstantsF[i])
+ update_heap_entry(heap, i, heap->size++, priv->next_constant_version);
+ else
+ update_heap_entry(heap, i, heap->positions[i], priv->next_constant_version);
+ }
+}
+
+static void shader_glsl_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count)
+{
+ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ struct shader_glsl_priv *priv = This->shader_priv;
+ struct constant_heap *heap = &priv->pconst_heap;
+ UINT i;
+
+ for (i = start; i < count + start; ++i)
+ {
+ if (!This->stateBlock->changed.pixelShaderConstantsF[i])
+ update_heap_entry(heap, i, heap->size++, priv->next_constant_version);
+ else
+ update_heap_entry(heap, i, heap->positions[i], priv->next_constant_version);
+ }
+}
+
+static unsigned int vec4_varyings(DWORD shader_major, const struct wined3d_gl_info *gl_info)
+{
+ unsigned int ret = gl_info->limits.glsl_varyings / 4;
+ /* 4.0 shaders do not write clip coords because d3d10 does not support user clipplanes */
+ if(shader_major > 3) return ret;
+
+ /* 3.0 shaders may need an extra varying for the clip coord on some cards(mostly dx10 ones) */
+ if (gl_info->quirks & WINED3D_QUIRK_GLSL_CLIP_VARYING) ret -= 1;
+ return ret;
+}
+
+/** Generate the variable & register declarations for the GLSL output target */
+static void shader_generate_glsl_declarations(const struct wined3d_context *context,
+ struct wined3d_shader_buffer *buffer, IWineD3DBaseShader *iface,
+ const shader_reg_maps *reg_maps, struct shader_glsl_ctx_priv *ctx_priv)
+{
+ IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *) This->baseShader.device;
+ const struct ps_compile_args *ps_args = ctx_priv->cur_ps_args;
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ unsigned int i, extra_constants_needed = 0;
+ const local_constant *lconst;
+ DWORD map;
+
+ /* There are some minor differences between pixel and vertex shaders */
+ char pshader = shader_is_pshader_version(reg_maps->shader_version.type);
+ char prefix = pshader ? 'P' : 'V';
+
+ /* Prototype the subroutines */
+ for (i = 0, map = reg_maps->labels; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "void subroutine%u();\n", i);
+ }
+
+#ifdef VBOX_WITH_VMSVGA
+ /* Declare texture samplers before the constants in order to workaround a NVidia driver quirk. */
+ for (i = 0; i < This->baseShader.limits.sampler; i++) {
+ if (reg_maps->sampler_type[i])
+ {
+ switch (reg_maps->sampler_type[i])
+ {
+ case WINED3DSTT_1D:
+ shader_addline(buffer, "uniform sampler1D %csampler%u;\n", prefix, i);
+ break;
+ case WINED3DSTT_2D:
+ if(device->stateBlock->textures[i] &&
+ IWineD3DBaseTexture_GetTextureDimensions(device->stateBlock->textures[i]) == GL_TEXTURE_RECTANGLE_ARB) {
+ shader_addline(buffer, "uniform sampler2DRect %csampler%u;\n", prefix, i);
+ } else {
+ shader_addline(buffer, "uniform sampler2D %csampler%u;\n", prefix, i);
+ }
+ break;
+ case WINED3DSTT_CUBE:
+ shader_addline(buffer, "uniform samplerCube %csampler%u;\n", prefix, i);
+ break;
+ case WINED3DSTT_VOLUME:
+ shader_addline(buffer, "uniform sampler3D %csampler%u;\n", prefix, i);
+ break;
+ default:
+ shader_addline(buffer, "uniform unsupported_sampler %csampler%u;\n", prefix, i);
+ FIXME("Unrecognized sampler type: %#x\n", reg_maps->sampler_type[i]);
+ break;
+ }
+ }
+ }
+#endif
+
+ /* Declare the constants (aka uniforms) */
+ if (This->baseShader.limits.constant_float > 0) {
+ unsigned max_constantsF;
+ /* Unless the shader uses indirect addressing, always declare the maximum array size and ignore that we need some
+ * uniforms privately. E.g. if GL supports 256 uniforms, and we need 2 for the pos fixup and immediate values, still
+ * declare VC[256]. If the shader needs more uniforms than we have it won't work in any case. If it uses less, the
+ * compiler will figure out which uniforms are really used and strip them out. This allows a shader to use c255 on
+ * a dx9 card, as long as it doesn't also use all the other constants.
+ *
+ * If the shader uses indirect addressing the compiler must assume that all declared uniforms are used. In this case,
+ * declare only the amount that we're assured to have.
+ *
+ * Thus we run into problems in these two cases:
+ * 1) The shader really uses more uniforms than supported
+ * 2) The shader uses indirect addressing, less constants than supported, but uses a constant index > #supported consts
+ */
+ if (pshader)
+ {
+ /* No indirect addressing here. */
+ max_constantsF = gl_info->limits.glsl_ps_float_constants;
+ }
+ else
+ {
+#ifndef VBOX_WITH_VMSVGA
+ if(This->baseShader.reg_maps.usesrelconstF) {
+#else
+ /* If GL supports only 256 constants (seen on macOS drivers for compatibility profile, which we use),
+ * then ignore the need for potential uniforms and always declare VC[256].
+ * This allows to compile Windows 10 shader which use hardcoded constants at 250+ index range.
+ * Fixes drawing problems on Windows 10 desktop.
+ *
+ * This hack is normally active only on macOS, because Windows and Linux OpenGL drivers
+ * have a more usable limit for GL compatibility context (1024+).
+ */
+ if (This->baseShader.reg_maps.usesrelconstF && gl_info->limits.glsl_vs_float_constants > 256) {
+#endif
+ /* Subtract the other potential uniforms from the max available (bools, ints, and 1 row of projection matrix).
+ * Subtract another uniform for immediate values, which have to be loaded via uniform by the driver as well.
+ * The shader code only uses 0.5, 2.0, 1.0, 128 and -128 in vertex shader code, so one vec4 should be enough
+ * (Unfortunately the Nvidia driver doesn't store 128 and -128 in one float).
+ *
+ * Writing gl_ClipVertex requires one uniform for each clipplane as well.
+ */
+#ifdef VBOX_WITH_WDDM
+ if (gl_info->limits.glsl_vs_float_constants == 256)
+ {
+ DWORD dwVersion = GetVersion();
+ DWORD dwMajor = (DWORD)(LOBYTE(LOWORD(dwVersion)));
+ DWORD dwMinor = (DWORD)(HIBYTE(LOWORD(dwVersion)));
+ /* tmp workaround Win8 Aero requirement for 256 */
+ if (dwMajor > 6 || dwMinor > 1)
+ {
+ /* tmp work-around to make Internet Explorer in win8 work with GPU supporting only with 256 shader uniform vars
+ * @todo: make it more robust */
+ max_constantsF = gl_info->limits.glsl_vs_float_constants - 1;
+ }
+ else
+ max_constantsF = gl_info->limits.glsl_vs_float_constants - 3;
+ }
+ else
+#endif
+ {
+ max_constantsF = gl_info->limits.glsl_vs_float_constants - 3;
+ }
+
+ if(ctx_priv->cur_vs_args->clip_enabled)
+ {
+ max_constantsF -= gl_info->limits.clipplanes;
+ }
+ max_constantsF -= count_bits(This->baseShader.reg_maps.integer_constants);
+ /* Strictly speaking a bool only uses one scalar, but the nvidia(Linux) compiler doesn't pack them properly,
+ * so each scalar requires a full vec4. We could work around this by packing the booleans ourselves, but
+ * for now take this into account when calculating the number of available constants
+ */
+ max_constantsF -= count_bits(This->baseShader.reg_maps.boolean_constants);
+ /* Set by driver quirks in directx.c */
+ max_constantsF -= gl_info->reserved_glsl_constants;
+ }
+ else
+ {
+ max_constantsF = gl_info->limits.glsl_vs_float_constants;
+ }
+ }
+ max_constantsF = min(This->baseShader.limits.constant_float, max_constantsF);
+ shader_addline(buffer, "uniform vec4 %cC[%u];\n", prefix, max_constantsF);
+ }
+
+ /* Always declare the full set of constants, the compiler can remove the unused ones because d3d doesn't(yet)
+ * support indirect int and bool constant addressing. This avoids problems if the app uses e.g. i0 and i9.
+ */
+ if (This->baseShader.limits.constant_int > 0 && This->baseShader.reg_maps.integer_constants)
+ shader_addline(buffer, "uniform ivec4 %cI[%u];\n", prefix, This->baseShader.limits.constant_int);
+
+ if (This->baseShader.limits.constant_bool > 0 && This->baseShader.reg_maps.boolean_constants)
+ shader_addline(buffer, "uniform bool %cB[%u];\n", prefix, This->baseShader.limits.constant_bool);
+
+ if(!pshader) {
+ shader_addline(buffer, "uniform vec4 posFixup;\n");
+ /* Predeclaration; This function is added at link time based on the pixel shader.
+ * VS 3.0 shaders have an array OUT[] the shader writes to, earlier versions don't have
+ * that. We know the input to the reorder function at vertex shader compile time, so
+ * we can deal with that. The reorder function for a 1.x and 2.x vertex shader can just
+ * read gl_FrontColor. The output depends on the pixel shader. The reorder function for a
+ * 1.x and 2.x pshader or for fixed function will write gl_FrontColor, and for a 3.0 shader
+ * it will write to the varying array. Here we depend on the shader optimizer on sorting that
+ * out. The nvidia driver only does that if the parameter is inout instead of out, hence the
+ * inout.
+ */
+ if (reg_maps->shader_version.major >= 3)
+ {
+ shader_addline(buffer, "void order_ps_input(in vec4[%u]);\n", MAX_REG_OUTPUT);
+ } else {
+ shader_addline(buffer, "void order_ps_input();\n");
+ }
+ } else {
+ for (i = 0, map = reg_maps->bumpmat; map; map >>= 1, ++i)
+ {
+ if (!(map & 1)) continue;
+
+ shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i);
+
+ if (reg_maps->luminanceparams & (1 << i))
+ {
+ shader_addline(buffer, "uniform float luminancescale%d;\n", i);
+ shader_addline(buffer, "uniform float luminanceoffset%d;\n", i);
+ extra_constants_needed++;
+ }
+
+ extra_constants_needed++;
+ }
+
+ if (ps_args->srgb_correction)
+ {
+ shader_addline(buffer, "const vec4 srgb_const0 = vec4(%.8e, %.8e, %.8e, %.8e);\n",
+ srgb_pow, srgb_mul_high, srgb_sub_high, srgb_mul_low);
+ shader_addline(buffer, "const vec4 srgb_const1 = vec4(%.8e, 0.0, 0.0, 0.0);\n",
+ srgb_cmp);
+ }
+ if (reg_maps->vpos || reg_maps->usesdsy)
+ {
+ if (This->baseShader.limits.constant_float + extra_constants_needed
+ + 1 < gl_info->limits.glsl_ps_float_constants)
+ {
+ shader_addline(buffer, "uniform vec4 ycorrection;\n");
+ ((IWineD3DPixelShaderImpl *) This)->vpos_uniform = 1;
+ extra_constants_needed++;
+ } else {
+ /* This happens because we do not have proper tracking of the constant registers that are
+ * actually used, only the max limit of the shader version
+ */
+ FIXME("Cannot find a free uniform for vpos correction params\n");
+ AssertFailed();
+ shader_addline(buffer, "const vec4 ycorrection = vec4(%f, %f, 0.0, 0.0);\n",
+ context->render_offscreen ? 0.0f : ((IWineD3DSurfaceImpl *)device->render_targets[0])->currentDesc.Height,
+ context->render_offscreen ? 1.0f : -1.0f);
+ }
+ shader_addline(buffer, "vec4 vpos;\n");
+ }
+ }
+
+#ifdef VBOX_WITH_VMSVGA
+ /* Declare texture samplers before the constants in order to workaround a NVidia driver quirk. */
+#else
+ /* Declare texture samplers */
+ for (i = 0; i < This->baseShader.limits.sampler; i++) {
+ if (reg_maps->sampler_type[i])
+ {
+ switch (reg_maps->sampler_type[i])
+ {
+ case WINED3DSTT_1D:
+ shader_addline(buffer, "uniform sampler1D %csampler%u;\n", prefix, i);
+ break;
+ case WINED3DSTT_2D:
+ if(device->stateBlock->textures[i] &&
+ IWineD3DBaseTexture_GetTextureDimensions(device->stateBlock->textures[i]) == GL_TEXTURE_RECTANGLE_ARB) {
+ shader_addline(buffer, "uniform sampler2DRect %csampler%u;\n", prefix, i);
+ } else {
+ shader_addline(buffer, "uniform sampler2D %csampler%u;\n", prefix, i);
+ }
+ break;
+ case WINED3DSTT_CUBE:
+ shader_addline(buffer, "uniform samplerCube %csampler%u;\n", prefix, i);
+ break;
+ case WINED3DSTT_VOLUME:
+ shader_addline(buffer, "uniform sampler3D %csampler%u;\n", prefix, i);
+ break;
+ default:
+ shader_addline(buffer, "uniform unsupported_sampler %csampler%u;\n", prefix, i);
+ FIXME("Unrecognized sampler type: %#x\n", reg_maps->sampler_type[i]);
+ break;
+ }
+ }
+ }
+#endif
+
+ /* Declare uniforms for NP2 texcoord fixup:
+ * This is NOT done inside the loop that declares the texture samplers since the NP2 fixup code
+ * is currently only used for the GeforceFX series and when forcing the ARB_npot extension off.
+ * Modern cards just skip the code anyway, so put it inside a separate loop. */
+ if (pshader && ps_args->np2_fixup) {
+
+ struct ps_np2fixup_info* const fixup = ctx_priv->cur_np2fixup_info;
+ UINT cur = 0;
+
+ /* NP2/RECT textures in OpenGL use texcoords in the range [0,width]x[0,height]
+ * while D3D has them in the (normalized) [0,1]x[0,1] range.
+ * samplerNP2Fixup stores texture dimensions and is updated through
+ * shader_glsl_load_np2fixup_constants when the sampler changes. */
+
+ for (i = 0; i < This->baseShader.limits.sampler; ++i) {
+ if (reg_maps->sampler_type[i]) {
+ if (!(ps_args->np2_fixup & (1 << i))) continue;
+
+ if (WINED3DSTT_2D != reg_maps->sampler_type[i]) {
+ FIXME("Non-2D texture is flagged for NP2 texcoord fixup.\n");
+ continue;
+ }
+
+ fixup->idx[i] = cur++;
+ }
+ }
+
+ fixup->num_consts = (cur + 1) >> 1;
+ shader_addline(buffer, "uniform vec4 %csamplerNP2Fixup[%u];\n", prefix, fixup->num_consts);
+ }
+
+ /* Declare address variables */
+ for (i = 0, map = reg_maps->address; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "ivec4 A%u;\n", i);
+ }
+
+ /* Declare texture coordinate temporaries and initialize them */
+ for (i = 0, map = reg_maps->texcoord; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "vec4 T%u = gl_TexCoord[%u];\n", i, i);
+ }
+
+ /* Declare input register varyings. Only pixel shader, vertex shaders have that declared in the
+ * helper function shader that is linked in at link time
+ */
+ if (pshader && reg_maps->shader_version.major >= 3)
+ {
+ if (use_vs(device->stateBlock))
+ {
+ shader_addline(buffer, "varying vec4 IN[%u];\n", vec4_varyings(reg_maps->shader_version.major, gl_info));
+ } else {
+ /* TODO: Write a replacement shader for the fixed function vertex pipeline, so this isn't needed.
+ * For fixed function vertex processing + 3.0 pixel shader we need a separate function in the
+ * pixel shader that reads the fixed function color into the packed input registers.
+ */
+ shader_addline(buffer, "vec4 IN[%u];\n", vec4_varyings(reg_maps->shader_version.major, gl_info));
+ }
+ }
+
+ /* Declare output register temporaries */
+ if(This->baseShader.limits.packed_output) {
+ shader_addline(buffer, "vec4 OUT[%u];\n", This->baseShader.limits.packed_output);
+ }
+
+ /* Declare temporary variables */
+ for (i = 0, map = reg_maps->temporary; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "vec4 R%u;\n", i);
+ }
+
+ /* Declare attributes */
+ if (reg_maps->shader_version.type == WINED3D_SHADER_TYPE_VERTEX)
+ {
+ for (i = 0, map = reg_maps->input_registers; map; map >>= 1, ++i)
+ {
+ if (map & 1) shader_addline(buffer, "attribute vec4 attrib%i;\n", i);
+ }
+ }
+
+ /* Declare loop registers aLx */
+ for (i = 0; i < reg_maps->loop_depth; i++) {
+ shader_addline(buffer, "int aL%u;\n", i);
+ shader_addline(buffer, "int tmpInt%u;\n", i);
+ }
+
+ /* Temporary variables for matrix operations */
+ shader_addline(buffer, "vec4 tmp0;\n");
+ shader_addline(buffer, "vec4 tmp1;\n");
+#ifdef VBOX_WITH_VMSVGA
+ shader_addline(buffer, "bool p0[4];\n");
+#endif
+
+ /* Local constants use a different name so they can be loaded once at shader link time
+ * They can't be hardcoded into the shader text via LC = {x, y, z, w}; because the
+ * float -> string conversion can cause precision loss.
+ */
+ if(!This->baseShader.load_local_constsF) {
+ LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry) {
+ shader_addline(buffer, "uniform vec4 %cLC%u;\n", prefix, lconst->idx);
+ }
+ }
+
+ shader_addline(buffer, "const float FLT_MAX = 1e38;\n");
+
+ /* Start the main program */
+ shader_addline(buffer, "void main() {\n");
+ if(pshader && reg_maps->vpos) {
+ /* DirectX apps expect integer values, while OpenGL drivers add approximately 0.5. This causes
+ * off-by-one problems as spotted by the vPos d3d9 visual test. Unfortunately the ATI cards do
+ * not add exactly 0.5, but rather something like 0.49999999 or 0.50000001, which still causes
+ * precision troubles when we just substract 0.5.
+ *
+ * To deal with that just floor() the position. This will eliminate the fraction on all cards.
+ *
+ * TODO: Test how that behaves with multisampling once we can enable multisampling in winex11.
+ *
+ * An advantage of floor is that it works even if the driver doesn't add 1/2. It is somewhat
+ * questionable if 1.5, 2.5, ... are the proper values to return in gl_FragCoord, even though
+ * coordinates specify the pixel centers instead of the pixel corners. This code will behave
+ * correctly on drivers that returns integer values.
+ */
+ shader_addline(buffer, "vpos = floor(vec4(0, ycorrection[0], 0, 0) + gl_FragCoord * vec4(1, ycorrection[1], 1, 1));\n");
+ }
+}
+
+/*****************************************************************************
+ * Functions to generate GLSL strings from DirectX Shader bytecode begin here.
+ *
+ * For more information, see http://wiki.winehq.org/DirectX-Shaders
+ ****************************************************************************/
+
+/* Prototypes */
+static void shader_glsl_add_src_param(const struct wined3d_shader_instruction *ins,
+ const struct wined3d_shader_src_param *wined3d_src, DWORD mask, glsl_src_param_t *glsl_src);
+
+/** Used for opcode modifiers - They multiply the result by the specified amount */
+static const char * const shift_glsl_tab[] = {
+ "", /* 0 (none) */
+ "2.0 * ", /* 1 (x2) */
+ "4.0 * ", /* 2 (x4) */
+ "8.0 * ", /* 3 (x8) */
+ "16.0 * ", /* 4 (x16) */
+ "32.0 * ", /* 5 (x32) */
+ "", /* 6 (x64) */
+ "", /* 7 (x128) */
+ "", /* 8 (d256) */
+ "", /* 9 (d128) */
+ "", /* 10 (d64) */
+ "", /* 11 (d32) */
+ "0.0625 * ", /* 12 (d16) */
+ "0.125 * ", /* 13 (d8) */
+ "0.25 * ", /* 14 (d4) */
+ "0.5 * " /* 15 (d2) */
+};
+
+/* Generate a GLSL parameter that does the input modifier computation and return the input register/mask to use */
+static void shader_glsl_gen_modifier(DWORD src_modifier, const char *in_reg, const char *in_regswizzle, char *out_str)
+{
+ out_str[0] = 0;
+
+ switch (src_modifier)
+ {
+ case WINED3DSPSM_DZ: /* Need to handle this in the instructions itself (texld & texcrd). */
+ case WINED3DSPSM_DW:
+ case WINED3DSPSM_NONE:
+ sprintf(out_str, "%s%s", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_NEG:
+ sprintf(out_str, "-%s%s", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_NOT:
+ sprintf(out_str, "!%s%s", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_BIAS:
+ sprintf(out_str, "(%s%s - vec4(0.5)%s)", in_reg, in_regswizzle, in_regswizzle);
+ break;
+ case WINED3DSPSM_BIASNEG:
+ sprintf(out_str, "-(%s%s - vec4(0.5)%s)", in_reg, in_regswizzle, in_regswizzle);
+ break;
+ case WINED3DSPSM_SIGN:
+ sprintf(out_str, "(2.0 * (%s%s - 0.5))", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_SIGNNEG:
+ sprintf(out_str, "-(2.0 * (%s%s - 0.5))", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_COMP:
+ sprintf(out_str, "(1.0 - %s%s)", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_X2:
+ sprintf(out_str, "(2.0 * %s%s)", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_X2NEG:
+ sprintf(out_str, "-(2.0 * %s%s)", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_ABS:
+ sprintf(out_str, "abs(%s%s)", in_reg, in_regswizzle);
+ break;
+ case WINED3DSPSM_ABSNEG:
+ sprintf(out_str, "-abs(%s%s)", in_reg, in_regswizzle);
+ break;
+ default:
+ FIXME("Unhandled modifier %u\n", src_modifier);
+ sprintf(out_str, "%s%s", in_reg, in_regswizzle);
+ }
+}
+
+/** Writes the GLSL variable name that corresponds to the register that the
+ * DX opcode parameter is trying to access */
+static void shader_glsl_get_register_name(const struct wined3d_shader_register *reg,
+ char *register_name, BOOL *is_color, const struct wined3d_shader_instruction *ins)
+{
+ /* oPos, oFog and oPts in D3D */
+ static const char * const hwrastout_reg_names[] = { "gl_Position", "gl_FogFragCoord", "gl_PointSize" };
+
+ IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type);
+
+ *is_color = FALSE;
+
+ switch (reg->type)
+ {
+ case WINED3DSPR_TEMP:
+ sprintf(register_name, "R%u", reg->idx);
+ break;
+
+ case WINED3DSPR_INPUT:
+ /* vertex shaders */
+ if (!pshader)
+ {
+ struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+ if (priv->cur_vs_args->swizzle_map & (1 << reg->idx)) *is_color = TRUE;
+ sprintf(register_name, "attrib%u", reg->idx);
+ break;
+ }
+
+ /* pixel shaders >= 3.0 */
+ if (This->baseShader.reg_maps.shader_version.major >= 3)
+ {
+ DWORD idx = ((IWineD3DPixelShaderImpl *)This)->input_reg_map[reg->idx];
+ unsigned int in_count = vec4_varyings(This->baseShader.reg_maps.shader_version.major, gl_info);
+
+ if (reg->rel_addr)
+ {
+ glsl_src_param_t rel_param;
+
+ shader_glsl_add_src_param(ins, reg->rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
+
+ /* Removing a + 0 would be an obvious optimization, but macos doesn't see the NOP
+ * operation there */
+ if (idx)
+ {
+ if (((IWineD3DPixelShaderImpl *)This)->declared_in_count > in_count)
+ {
+ sprintf(register_name,
+ "((%s + %u) > %d ? (%s + %u) > %d ? gl_SecondaryColor : gl_Color : IN[%s + %u])",
+ rel_param.param_str, idx, in_count - 1, rel_param.param_str, idx, in_count,
+ rel_param.param_str, idx);
+ }
+ else
+ {
+ sprintf(register_name, "IN[%s + %u]", rel_param.param_str, idx);
+ }
+ }
+ else
+ {
+ if (((IWineD3DPixelShaderImpl *)This)->declared_in_count > in_count)
+ {
+ sprintf(register_name, "((%s) > %d ? (%s) > %d ? gl_SecondaryColor : gl_Color : IN[%s])",
+ rel_param.param_str, in_count - 1, rel_param.param_str, in_count,
+ rel_param.param_str);
+ }
+ else
+ {
+ sprintf(register_name, "IN[%s]", rel_param.param_str);
+ }
+ }
+ }
+ else
+ {
+ if (idx == in_count) sprintf(register_name, "gl_Color");
+ else if (idx == in_count + 1) sprintf(register_name, "gl_SecondaryColor");
+ else sprintf(register_name, "IN[%u]", idx);
+ }
+ }
+ else
+ {
+ if (reg->idx == 0) strcpy(register_name, "gl_Color");
+ else strcpy(register_name, "gl_SecondaryColor");
+ break;
+ }
+ break;
+
+ case WINED3DSPR_CONST:
+ {
+ const char prefix = pshader ? 'P' : 'V';
+
+ /* Relative addressing */
+ if (reg->rel_addr)
+ {
+ glsl_src_param_t rel_param;
+ shader_glsl_add_src_param(ins, reg->rel_addr, WINED3DSP_WRITEMASK_0, &rel_param);
+ if (reg->idx) sprintf(register_name, "%cC[%s + %u]", prefix, rel_param.param_str, reg->idx);
+ else sprintf(register_name, "%cC[%s]", prefix, rel_param.param_str);
+ }
+ else
+ {
+ if (shader_constant_is_local(This, reg->idx))
+ sprintf(register_name, "%cLC%u", prefix, reg->idx);
+ else
+ sprintf(register_name, "%cC[%u]", prefix, reg->idx);
+ }
+ }
+ break;
+
+ case WINED3DSPR_CONSTINT:
+ if (pshader) sprintf(register_name, "PI[%u]", reg->idx);
+ else sprintf(register_name, "VI[%u]", reg->idx);
+ break;
+
+ case WINED3DSPR_CONSTBOOL:
+ if (pshader) sprintf(register_name, "PB[%u]", reg->idx);
+ else sprintf(register_name, "VB[%u]", reg->idx);
+ break;
+
+ case WINED3DSPR_TEXTURE: /* case WINED3DSPR_ADDR: */
+ if (pshader) sprintf(register_name, "T%u", reg->idx);
+ else sprintf(register_name, "A%u", reg->idx);
+ break;
+
+ case WINED3DSPR_LOOP:
+ sprintf(register_name, "aL%u", This->baseShader.cur_loop_regno - 1);
+ break;
+
+ case WINED3DSPR_SAMPLER:
+ if (pshader) sprintf(register_name, "Psampler%u", reg->idx);
+ else sprintf(register_name, "Vsampler%u", reg->idx);
+ break;
+
+ case WINED3DSPR_COLOROUT:
+ if (reg->idx >= gl_info->limits.buffers)
+ WARN("Write to render target %u, only %d supported.\n", reg->idx, gl_info->limits.buffers);
+
+ sprintf(register_name, "gl_FragData[%u]", reg->idx);
+ break;
+
+ case WINED3DSPR_RASTOUT:
+ if (reg->idx < RT_ELEMENTS(hwrastout_reg_names)) sprintf(register_name, "%s", hwrastout_reg_names[reg->idx]);
+ else sprintf(register_name, "%s", hwrastout_reg_names[0]);
+ break;
+
+ case WINED3DSPR_DEPTHOUT:
+ sprintf(register_name, "gl_FragDepth");
+ break;
+
+ case WINED3DSPR_ATTROUT:
+ if (reg->idx == 0) sprintf(register_name, "gl_FrontColor");
+ else sprintf(register_name, "gl_FrontSecondaryColor");
+ break;
+
+ case WINED3DSPR_TEXCRDOUT:
+ /* Vertex shaders >= 3.0: WINED3DSPR_OUTPUT */
+ if (This->baseShader.reg_maps.shader_version.major >= 3) sprintf(register_name, "OUT[%u]", reg->idx);
+ else sprintf(register_name, "gl_TexCoord[%u]", reg->idx);
+ break;
+
+ case WINED3DSPR_MISCTYPE:
+ if (reg->idx == 0)
+ {
+ /* vPos */
+ sprintf(register_name, "vpos");
+ }
+ else if (reg->idx == 1)
+ {
+ /* Note that gl_FrontFacing is a bool, while vFace is
+ * a float for which the sign determines front/back */
+ sprintf(register_name, "(gl_FrontFacing ? 1.0 : -1.0)");
+ }
+ else
+ {
+ FIXME("Unhandled misctype register %d\n", reg->idx);
+ sprintf(register_name, "unrecognized_register");
+ }
+ break;
+
+ case WINED3DSPR_IMMCONST:
+ switch (reg->immconst_type)
+ {
+ case WINED3D_IMMCONST_FLOAT:
+ sprintf(register_name, "%.8e", *(const float *)reg->immconst_data);
+ break;
+
+ case WINED3D_IMMCONST_FLOAT4:
+ sprintf(register_name, "vec4(%.8e, %.8e, %.8e, %.8e)",
+ *(const float *)&reg->immconst_data[0], *(const float *)&reg->immconst_data[1],
+ *(const float *)&reg->immconst_data[2], *(const float *)&reg->immconst_data[3]);
+ break;
+
+ default:
+ FIXME("Unhandled immconst type %#x\n", reg->immconst_type);
+ sprintf(register_name, "<unhandled_immconst_type %#x>", reg->immconst_type);
+ }
+ break;
+
+#ifdef VBOX_WITH_VMSVGA
+ case WINED3DSPR_PREDICATE:
+ sprintf(register_name, "p0");
+ break;
+#endif
+
+ default:
+ FIXME("Unhandled register name Type(%d)\n", reg->type);
+ sprintf(register_name, "unrecognized_register");
+ break;
+ }
+}
+
+static void shader_glsl_write_mask_to_str(DWORD write_mask, char *str)
+{
+ *str++ = '.';
+ if (write_mask & WINED3DSP_WRITEMASK_0) *str++ = 'x';
+ if (write_mask & WINED3DSP_WRITEMASK_1) *str++ = 'y';
+ if (write_mask & WINED3DSP_WRITEMASK_2) *str++ = 'z';
+ if (write_mask & WINED3DSP_WRITEMASK_3) *str++ = 'w';
+ *str = '\0';
+}
+
+/* Get the GLSL write mask for the destination register */
+static DWORD shader_glsl_get_write_mask(const struct wined3d_shader_dst_param *param, char *write_mask)
+{
+ DWORD mask = param->write_mask;
+
+ if (shader_is_scalar(&param->reg))
+ {
+ mask = WINED3DSP_WRITEMASK_0;
+ *write_mask = '\0';
+ }
+ else
+ {
+#ifdef VBOX_WITH_VMSVGA
+ if (param->reg.type == WINED3DSPR_PREDICATE)
+ {
+ *write_mask++ = '[';
+ if (mask & WINED3DSP_WRITEMASK_0) *write_mask++ = '0';
+ else
+ if (mask & WINED3DSP_WRITEMASK_1) *write_mask++ = '1';
+ else
+ if (mask & WINED3DSP_WRITEMASK_2) *write_mask++ = '2';
+ else
+ if (mask & WINED3DSP_WRITEMASK_3) *write_mask++ = '3';
+ *write_mask++ = ']';
+ *write_mask = '\0';
+ }
+ else
+#endif
+ shader_glsl_write_mask_to_str(mask, write_mask);
+ }
+
+ return mask;
+}
+
+static unsigned int shader_glsl_get_write_mask_size(DWORD write_mask) {
+ unsigned int size = 0;
+
+ if (write_mask & WINED3DSP_WRITEMASK_0) ++size;
+ if (write_mask & WINED3DSP_WRITEMASK_1) ++size;
+ if (write_mask & WINED3DSP_WRITEMASK_2) ++size;
+ if (write_mask & WINED3DSP_WRITEMASK_3) ++size;
+
+ return size;
+}
+
+static void shader_glsl_swizzle_to_str(const DWORD swizzle, BOOL fixup, DWORD mask, char *str)
+{
+ /* For registers of type WINED3DDECLTYPE_D3DCOLOR, data is stored as "bgra",
+ * but addressed as "rgba". To fix this we need to swap the register's x
+ * and z components. */
+ const char *swizzle_chars = fixup ? "zyxw" : "xyzw";
+
+ *str++ = '.';
+ /* swizzle bits fields: wwzzyyxx */
+ if (mask & WINED3DSP_WRITEMASK_0) *str++ = swizzle_chars[swizzle & 0x03];
+ if (mask & WINED3DSP_WRITEMASK_1) *str++ = swizzle_chars[(swizzle >> 2) & 0x03];
+ if (mask & WINED3DSP_WRITEMASK_2) *str++ = swizzle_chars[(swizzle >> 4) & 0x03];
+ if (mask & WINED3DSP_WRITEMASK_3) *str++ = swizzle_chars[(swizzle >> 6) & 0x03];
+ *str = '\0';
+}
+
+static void shader_glsl_get_swizzle(const struct wined3d_shader_src_param *param,
+ BOOL fixup, DWORD mask, char *swizzle_str)
+{
+ if (shader_is_scalar(&param->reg))
+ *swizzle_str = '\0';
+ else
+ shader_glsl_swizzle_to_str(param->swizzle, fixup, mask, swizzle_str);
+}
+
+/* From a given parameter token, generate the corresponding GLSL string.
+ * Also, return the actual register name and swizzle in case the
+ * caller needs this information as well. */
+static void shader_glsl_add_src_param(const struct wined3d_shader_instruction *ins,
+ const struct wined3d_shader_src_param *wined3d_src, DWORD mask, glsl_src_param_t *glsl_src)
+{
+ BOOL is_color = FALSE;
+ char swizzle_str[6];
+
+ glsl_src->reg_name[0] = '\0';
+ glsl_src->param_str[0] = '\0';
+ swizzle_str[0] = '\0';
+
+ shader_glsl_get_register_name(&wined3d_src->reg, glsl_src->reg_name, &is_color, ins);
+ shader_glsl_get_swizzle(wined3d_src, is_color, mask, swizzle_str);
+ shader_glsl_gen_modifier(wined3d_src->modifiers, glsl_src->reg_name, swizzle_str, glsl_src->param_str);
+}
+
+/* From a given parameter token, generate the corresponding GLSL string.
+ * Also, return the actual register name and swizzle in case the
+ * caller needs this information as well. */
+static DWORD shader_glsl_add_dst_param(const struct wined3d_shader_instruction *ins,
+ const struct wined3d_shader_dst_param *wined3d_dst, glsl_dst_param_t *glsl_dst)
+{
+ BOOL is_color = FALSE;
+
+ glsl_dst->mask_str[0] = '\0';
+ glsl_dst->reg_name[0] = '\0';
+
+ shader_glsl_get_register_name(&wined3d_dst->reg, glsl_dst->reg_name, &is_color, ins);
+ return shader_glsl_get_write_mask(wined3d_dst, glsl_dst->mask_str);
+}
+
+/* Append the destination part of the instruction to the buffer, return the effective write mask */
+static DWORD shader_glsl_append_dst_ext(struct wined3d_shader_buffer *buffer,
+ const struct wined3d_shader_instruction *ins, const struct wined3d_shader_dst_param *dst)
+{
+ glsl_dst_param_t glsl_dst;
+ DWORD mask;
+
+ mask = shader_glsl_add_dst_param(ins, dst, &glsl_dst);
+ if (mask) shader_addline(buffer, "%s%s = %s(", glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]);
+
+ return mask;
+}
+
+/* Append the destination part of the instruction to the buffer, return the effective write mask */
+static DWORD shader_glsl_append_dst(struct wined3d_shader_buffer *buffer, const struct wined3d_shader_instruction *ins)
+{
+ return shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]);
+}
+
+/** Process GLSL instruction modifiers */
+static void shader_glsl_add_instruction_modifiers(const struct wined3d_shader_instruction *ins)
+{
+ glsl_dst_param_t dst_param;
+ DWORD modifiers;
+
+ if (!ins->dst_count) return;
+
+ modifiers = ins->dst[0].modifiers;
+ if (!modifiers) return;
+
+ shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+
+ if (modifiers & WINED3DSPDM_SATURATE)
+ {
+ /* _SAT means to clamp the value of the register to between 0 and 1 */
+ shader_addline(ins->ctx->buffer, "%s%s = clamp(%s%s, 0.0, 1.0);\n", dst_param.reg_name,
+ dst_param.mask_str, dst_param.reg_name, dst_param.mask_str);
+ }
+
+ if (modifiers & WINED3DSPDM_MSAMPCENTROID)
+ {
+ FIXME("_centroid modifier not handled\n");
+ }
+
+ if (modifiers & WINED3DSPDM_PARTIALPRECISION)
+ {
+ /* MSDN says this modifier can be safely ignored, so that's what we'll do. */
+ }
+}
+
+static inline const char *shader_get_comp_op(DWORD op)
+{
+ switch (op) {
+ case COMPARISON_GT: return ">";
+ case COMPARISON_EQ: return "==";
+ case COMPARISON_GE: return ">=";
+ case COMPARISON_LT: return "<";
+ case COMPARISON_NE: return "!=";
+ case COMPARISON_LE: return "<=";
+ default:
+ FIXME("Unrecognized comparison value: %u\n", op);
+ return "(\?\?)";
+ }
+}
+
+static void shader_glsl_get_sample_function(const struct wined3d_gl_info *gl_info,
+ DWORD sampler_type, DWORD flags, glsl_sample_function_t *sample_function)
+{
+ BOOL projected = flags & WINED3D_GLSL_SAMPLE_PROJECTED;
+ BOOL texrect = flags & WINED3D_GLSL_SAMPLE_RECT;
+ BOOL lod = flags & WINED3D_GLSL_SAMPLE_LOD;
+ BOOL grad = flags & WINED3D_GLSL_SAMPLE_GRAD;
+
+ /* Note that there's no such thing as a projected cube texture. */
+ switch(sampler_type) {
+ case WINED3DSTT_1D:
+ if(lod) {
+ sample_function->name = projected ? "texture1DProjLod" : "texture1DLod";
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture1DProjGrad" : "texture1DGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture1DProjGradARB" : "texture1DGradARB";
+ else
+ {
+ FIXME("Unsupported 1D grad function.\n");
+ sample_function->name = "unsupported1DGrad";
+ }
+ }
+ else
+ {
+ sample_function->name = projected ? "texture1DProj" : "texture1D";
+ }
+ sample_function->coord_mask = WINED3DSP_WRITEMASK_0;
+ break;
+ case WINED3DSTT_2D:
+ if(texrect) {
+ if(lod) {
+ sample_function->name = projected ? "texture2DRectProjLod" : "texture2DRectLod";
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture2DRectProjGrad" : "texture2DRectGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture2DRectProjGradARB" : "texture2DRectGradARB";
+ else
+ {
+ FIXME("Unsupported RECT grad function.\n");
+ sample_function->name = "unsupported2DRectGrad";
+ }
+ }
+ else
+ {
+ sample_function->name = projected ? "texture2DRectProj" : "texture2DRect";
+ }
+ } else {
+ if(lod) {
+ sample_function->name = projected ? "texture2DProjLod" : "texture2DLod";
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture2DProjGrad" : "texture2DGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture2DProjGradARB" : "texture2DGradARB";
+ else
+ {
+ FIXME("Unsupported 2D grad function.\n");
+ sample_function->name = "unsupported2DGrad";
+ }
+ }
+ else
+ {
+ sample_function->name = projected ? "texture2DProj" : "texture2D";
+ }
+ }
+ sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1;
+ break;
+ case WINED3DSTT_CUBE:
+ if(lod) {
+ sample_function->name = "textureCubeLod";
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = "textureCubeGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = "textureCubeGradARB";
+ else
+ {
+ FIXME("Unsupported Cube grad function.\n");
+ sample_function->name = "unsupportedCubeGrad";
+ }
+ }
+ else
+ {
+ sample_function->name = "textureCube";
+ }
+ sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ break;
+ case WINED3DSTT_VOLUME:
+ if(lod) {
+ sample_function->name = projected ? "texture3DProjLod" : "texture3DLod";
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture3DProjGrad" : "texture3DGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture3DProjGradARB" : "texture3DGradARB";
+ else
+ {
+ FIXME("Unsupported 3D grad function.\n");
+ sample_function->name = "unsupported3DGrad";
+ }
+ }
+ else
+ {
+ sample_function->name = projected ? "texture3DProj" : "texture3D";
+ }
+ sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ break;
+ default:
+ sample_function->name = "";
+ sample_function->coord_mask = 0;
+ FIXME("Unrecognized sampler type: %#x;\n", sampler_type);
+ break;
+ }
+}
+
+static void shader_glsl_append_fixup_arg(char *arguments, const char *reg_name,
+ BOOL sign_fixup, enum fixup_channel_source channel_source)
+{
+ switch(channel_source)
+ {
+ case CHANNEL_SOURCE_ZERO:
+ strcat(arguments, "0.0");
+ break;
+
+ case CHANNEL_SOURCE_ONE:
+ strcat(arguments, "1.0");
+ break;
+
+ case CHANNEL_SOURCE_X:
+ strcat(arguments, reg_name);
+ strcat(arguments, ".x");
+ break;
+
+ case CHANNEL_SOURCE_Y:
+ strcat(arguments, reg_name);
+ strcat(arguments, ".y");
+ break;
+
+ case CHANNEL_SOURCE_Z:
+ strcat(arguments, reg_name);
+ strcat(arguments, ".z");
+ break;
+
+ case CHANNEL_SOURCE_W:
+ strcat(arguments, reg_name);
+ strcat(arguments, ".w");
+ break;
+
+ default:
+ FIXME("Unhandled channel source %#x\n", channel_source);
+ strcat(arguments, "undefined");
+ break;
+ }
+
+ if (sign_fixup) strcat(arguments, " * 2.0 - 1.0");
+}
+
+static void shader_glsl_color_correction(const struct wined3d_shader_instruction *ins, struct color_fixup_desc fixup)
+{
+ struct wined3d_shader_dst_param dst;
+ unsigned int mask_size, remaining;
+ glsl_dst_param_t dst_param;
+ char arguments[256];
+ DWORD mask;
+
+ mask = 0;
+ if (fixup.x_sign_fixup || fixup.x_source != CHANNEL_SOURCE_X) mask |= WINED3DSP_WRITEMASK_0;
+ if (fixup.y_sign_fixup || fixup.y_source != CHANNEL_SOURCE_Y) mask |= WINED3DSP_WRITEMASK_1;
+ if (fixup.z_sign_fixup || fixup.z_source != CHANNEL_SOURCE_Z) mask |= WINED3DSP_WRITEMASK_2;
+ if (fixup.w_sign_fixup || fixup.w_source != CHANNEL_SOURCE_W) mask |= WINED3DSP_WRITEMASK_3;
+ mask &= ins->dst[0].write_mask;
+
+ if (!mask) return; /* Nothing to do */
+
+ if (is_complex_fixup(fixup))
+ {
+ enum complex_fixup complex_fixup = get_complex_fixup(fixup);
+ FIXME("Complex fixup (%#x) not supported\n",complex_fixup); (void)complex_fixup;
+ return;
+ }
+
+ mask_size = shader_glsl_get_write_mask_size(mask);
+
+ dst = ins->dst[0];
+ dst.write_mask = mask;
+ shader_glsl_add_dst_param(ins, &dst, &dst_param);
+
+ arguments[0] = '\0';
+ remaining = mask_size;
+ if (mask & WINED3DSP_WRITEMASK_0)
+ {
+ shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.x_sign_fixup, fixup.x_source);
+ if (--remaining) strcat(arguments, ", ");
+ }
+ if (mask & WINED3DSP_WRITEMASK_1)
+ {
+ shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.y_sign_fixup, fixup.y_source);
+ if (--remaining) strcat(arguments, ", ");
+ }
+ if (mask & WINED3DSP_WRITEMASK_2)
+ {
+ shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.z_sign_fixup, fixup.z_source);
+ if (--remaining) strcat(arguments, ", ");
+ }
+ if (mask & WINED3DSP_WRITEMASK_3)
+ {
+ shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.w_sign_fixup, fixup.w_source);
+ if (--remaining) strcat(arguments, ", ");
+ }
+
+ if (mask_size > 1)
+ {
+ shader_addline(ins->ctx->buffer, "%s%s = vec%u(%s);\n",
+ dst_param.reg_name, dst_param.mask_str, mask_size, arguments);
+ }
+ else
+ {
+ shader_addline(ins->ctx->buffer, "%s%s = %s;\n", dst_param.reg_name, dst_param.mask_str, arguments);
+ }
+}
+
+static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_shader_instruction *ins,
+ DWORD sampler, const glsl_sample_function_t *sample_function, DWORD swizzle,
+ const char *dx, const char *dy,
+ const char *bias, const char *coord_reg_fmt, ...)
+{
+ const char *sampler_base;
+ char dst_swizzle[6];
+ struct color_fixup_desc fixup;
+ BOOL np2_fixup = FALSE;
+ BOOL tmirror_tmp_reg = FALSE;
+ va_list args;
+
+ shader_glsl_swizzle_to_str(swizzle, FALSE, ins->dst[0].write_mask, dst_swizzle);
+
+ if (shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type))
+ {
+ const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+ fixup = priv->cur_ps_args->color_fixup[sampler];
+ sampler_base = "Psampler";
+
+ if (priv->cur_ps_args->np2_fixup & (1 << sampler)) {
+ if(bias) {
+ FIXME("Biased sampling from NP2 textures is unsupported\n");
+ } else {
+ np2_fixup = TRUE;
+ }
+ }
+
+ if (priv->cur_ps_args->t_mirror & (1 << sampler))
+ {
+ if (ins->ctx->reg_maps->sampler_type[sampler]==WINED3DSTT_2D)
+ {
+ if (sample_function->coord_mask & WINED3DSP_WRITEMASK_1)
+ {
+ glsl_src_param_t coord_param;
+ shader_glsl_add_src_param(ins, &ins->src[0], sample_function->coord_mask, &coord_param);
+
+ if (ins->src[0].reg.type != WINED3DSPR_INPUT)
+ {
+ shader_addline(ins->ctx->buffer, "%s.y=1.0-%s.y;\n",
+ coord_param.reg_name, coord_param.reg_name);
+ }
+ else
+ {
+ tmirror_tmp_reg = TRUE;
+ shader_addline(ins->ctx->buffer, "tmp0.xy=vec2(%s.x, 1.0-%s.y).xy;\n",
+ coord_param.reg_name, coord_param.reg_name);
+ }
+ }
+ else
+ {
+ DebugBreak();
+ FIXME("Unexpected coord_mask with t_mirror\n");
+ }
+ }
+ }
+ } else {
+ sampler_base = "Vsampler";
+ fixup = COLOR_FIXUP_IDENTITY; /* FIXME: Vshader color fixup */
+ }
+
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+ shader_addline(ins->ctx->buffer, "%s(%s%u, ", sample_function->name, sampler_base, sampler);
+
+ if (tmirror_tmp_reg)
+ {
+ shader_addline(ins->ctx->buffer, "%s", "tmp0.xy");
+ }
+ else
+ {
+ va_start(args, coord_reg_fmt);
+ shader_vaddline(ins->ctx->buffer, coord_reg_fmt, args);
+ va_end(args);
+ }
+
+ if(bias) {
+ shader_addline(ins->ctx->buffer, ", %s)%s);\n", bias, dst_swizzle);
+ } else {
+ if (np2_fixup) {
+ const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+ const unsigned char idx = priv->cur_np2fixup_info->idx[sampler];
+
+ shader_addline(ins->ctx->buffer, " * PsamplerNP2Fixup[%u].%s)%s);\n", idx >> 1,
+ (idx % 2) ? "zw" : "xy", dst_swizzle);
+ } else if(dx && dy) {
+ shader_addline(ins->ctx->buffer, ", %s, %s)%s);\n", dx, dy, dst_swizzle);
+ } else {
+ shader_addline(ins->ctx->buffer, ")%s);\n", dst_swizzle);
+ }
+ }
+
+ if(!is_identity_fixup(fixup)) {
+ shader_glsl_color_correction(ins, fixup);
+ }
+}
+
+/*****************************************************************************
+ * Begin processing individual instruction opcodes
+ ****************************************************************************/
+
+/* Generate GLSL arithmetic functions (dst = src1 + src2) */
+static void shader_glsl_arith(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ DWORD write_mask;
+ char op;
+
+ /* Determine the GLSL operator to use based on the opcode */
+ switch (ins->handler_idx)
+ {
+ case WINED3DSIH_MUL: op = '*'; break;
+ case WINED3DSIH_ADD: op = '+'; break;
+ case WINED3DSIH_SUB: op = '-'; break;
+ default:
+ op = ' ';
+ FIXME("Opcode %#x not yet handled in GLSL\n", ins->handler_idx);
+ break;
+ }
+
+ write_mask = shader_glsl_append_dst(buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_addline(buffer, "%s %c %s);\n", src0_param.param_str, op, src1_param.param_str);
+}
+
+#ifdef VBOX_WITH_VMSVGA
+static void shader_glsl_mov_impl(const struct wined3d_shader_instruction *ins, int p0_idx);
+
+/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
+static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
+{
+ if (ins->predicate)
+ {
+ int i;
+ DWORD dst_mask = ins->dst[0].write_mask;
+ struct wined3d_shader_dst_param *dst = (struct wined3d_shader_dst_param *)&ins->dst[0];
+
+ for (i = 0; i < 4; i++)
+ {
+ if (dst_mask & RT_BIT(i))
+ {
+ dst->write_mask = RT_BIT(i);
+
+ shader_glsl_mov_impl(ins, i);
+ }
+ }
+ dst->write_mask = dst_mask;
+ }
+ else
+ shader_glsl_mov_impl(ins, 0);
+}
+
+/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
+static void shader_glsl_mov_impl(const struct wined3d_shader_instruction *ins, int p0_idx)
+
+#else
+/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
+static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
+#endif
+{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+ DWORD write_mask;
+
+#ifdef VBOX_WITH_VMSVGA
+ if (ins->predicate)
+ {
+ shader_addline(buffer, "if (p0[%d]) {\n", p0_idx);
+ }
+#endif
+
+ write_mask = shader_glsl_append_dst(buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+
+ /* In vs_1_1 WINED3DSIO_MOV can write to the address register. In later
+ * shader versions WINED3DSIO_MOVA is used for this. */
+ if (ins->ctx->reg_maps->shader_version.major == 1
+ && !shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type)
+ && ins->dst[0].reg.type == WINED3DSPR_ADDR)
+ {
+ /* This is a simple floor() */
+ unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+ if (mask_size > 1) {
+ shader_addline(buffer, "ivec%d(floor(%s)));\n", mask_size, src0_param.param_str);
+ } else {
+ shader_addline(buffer, "int(floor(%s)));\n", src0_param.param_str);
+ }
+ }
+ else if(ins->handler_idx == WINED3DSIH_MOVA)
+ {
+ /* We need to *round* to the nearest int here. */
+ unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ {
+ if (mask_size > 1)
+ shader_addline(buffer, "ivec%d(round(%s)));\n", mask_size, src0_param.param_str);
+ else
+ shader_addline(buffer, "int(round(%s)));\n", src0_param.param_str);
+ }
+ else
+ {
+ if (mask_size > 1)
+ shader_addline(buffer, "ivec%d(floor(abs(%s) + vec%d(0.5)) * sign(%s)));\n",
+ mask_size, src0_param.param_str, mask_size, src0_param.param_str);
+ else
+ shader_addline(buffer, "int(floor(abs(%s) + 0.5) * sign(%s)));\n",
+ src0_param.param_str, src0_param.param_str);
+ }
+ }
+ else
+ {
+ shader_addline(buffer, "%s);\n", src0_param.param_str);
+ }
+#ifdef VBOX_WITH_VMSVGA
+ if (ins->predicate)
+ {
+ shader_addline(buffer, "}\n");
+ }
+#endif
+}
+
+/* Process the dot product operators DP3 and DP4 in GLSL (dst = dot(src0, src1)) */
+static void shader_glsl_dot(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ DWORD dst_write_mask, src_write_mask;
+ unsigned int dst_size = 0;
+
+ dst_write_mask = shader_glsl_append_dst(buffer, ins);
+ dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
+
+ /* dp3 works on vec3, dp4 on vec4 */
+ if (ins->handler_idx == WINED3DSIH_DP4)
+ {
+ src_write_mask = WINED3DSP_WRITEMASK_ALL;
+ } else {
+ src_write_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ }
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_write_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], src_write_mask, &src1_param);
+
+ if (dst_size > 1) {
+ shader_addline(buffer, "vec%d(dot(%s, %s)));\n", dst_size, src0_param.param_str, src1_param.param_str);
+ } else {
+ shader_addline(buffer, "dot(%s, %s));\n", src0_param.param_str, src1_param.param_str);
+ }
+}
+
+/* Note that this instruction has some restrictions. The destination write mask
+ * can't contain the w component, and the source swizzles have to be .xyzw */
+static void shader_glsl_cross(const struct wined3d_shader_instruction *ins)
+{
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ char dst_mask[6];
+
+ shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], src_mask, &src1_param);
+ shader_addline(ins->ctx->buffer, "cross(%s, %s)%s);\n", src0_param.param_str, src1_param.param_str, dst_mask);
+}
+
+/* Process the WINED3DSIO_POW instruction in GLSL (dst = |src0|^src1)
+ * Src0 and src1 are scalars. Note that D3D uses the absolute of src0, while
+ * GLSL uses the value as-is. */
+static void shader_glsl_pow(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ DWORD dst_write_mask;
+ unsigned int dst_size;
+
+ dst_write_mask = shader_glsl_append_dst(buffer, ins);
+ dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+
+ if (dst_size > 1) {
+ shader_addline(buffer, "vec%d(pow(abs(%s), %s)));\n", dst_size, src0_param.param_str, src1_param.param_str);
+ } else {
+ shader_addline(buffer, "pow(abs(%s), %s));\n", src0_param.param_str, src1_param.param_str);
+ }
+}
+
+/* Process the WINED3DSIO_LOG instruction in GLSL (dst = log2(|src0|))
+ * Src0 is a scalar. Note that D3D uses the absolute of src0, while
+ * GLSL uses the value as-is. */
+static void shader_glsl_log(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+ DWORD dst_write_mask;
+ unsigned int dst_size;
+
+ dst_write_mask = shader_glsl_append_dst(buffer, ins);
+ dst_size = shader_glsl_get_write_mask_size(dst_write_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+
+ if (dst_size > 1)
+ {
+ shader_addline(buffer, "vec%d(%s == 0.0 ? -FLT_MAX : log2(abs(%s))));\n",
+ dst_size, src0_param.param_str, src0_param.param_str);
+ }
+ else
+ {
+ shader_addline(buffer, "%s == 0.0 ? -FLT_MAX : log2(abs(%s)));\n",
+ src0_param.param_str, src0_param.param_str);
+ }
+}
+
+/* Map the opcode 1-to-1 to the GL code (arg->dst = instruction(src0, src1, ...) */
+static void shader_glsl_map2gl(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src_param;
+ const char *instruction;
+ DWORD write_mask;
+ unsigned i;
+
+ /* Determine the GLSL function to use based on the opcode */
+ /* TODO: Possibly make this a table for faster lookups */
+ switch (ins->handler_idx)
+ {
+ case WINED3DSIH_MIN: instruction = "min"; break;
+ case WINED3DSIH_MAX: instruction = "max"; break;
+ case WINED3DSIH_ABS: instruction = "abs"; break;
+ case WINED3DSIH_FRC: instruction = "fract"; break;
+ case WINED3DSIH_EXP: instruction = "exp2"; break;
+ case WINED3DSIH_DSX: instruction = "dFdx"; break;
+ case WINED3DSIH_DSY: instruction = "ycorrection.y * dFdy"; break;
+ default: instruction = "";
+ FIXME("Opcode %#x not yet handled in GLSL\n", ins->handler_idx);
+ break;
+ }
+
+ write_mask = shader_glsl_append_dst(buffer, ins);
+
+ shader_addline(buffer, "%s(", instruction);
+
+ if (ins->src_count)
+ {
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param);
+ shader_addline(buffer, "%s", src_param.param_str);
+ for (i = 1; i < ins->src_count; ++i)
+ {
+ shader_glsl_add_src_param(ins, &ins->src[i], write_mask, &src_param);
+ shader_addline(buffer, ", %s", src_param.param_str);
+ }
+ }
+
+ shader_addline(buffer, "));\n");
+}
+
+static void shader_glsl_nrm(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src_param;
+ unsigned int mask_size;
+ DWORD write_mask;
+ char dst_mask[6];
+
+ write_mask = shader_glsl_get_write_mask(ins->dst, dst_mask);
+ mask_size = shader_glsl_get_write_mask_size(write_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param);
+
+ shader_addline(buffer, "tmp0.x = length(%s);\n", src_param.param_str);
+ shader_glsl_append_dst(buffer, ins);
+ if (mask_size > 1)
+ {
+ shader_addline(buffer, "tmp0.x == 0.0 ? vec%u(0.0) : (%s / tmp0.x));\n",
+ mask_size, src_param.param_str);
+ }
+ else
+ {
+ shader_addline(buffer, "tmp0.x == 0.0 ? 0.0 : (%s / tmp0.x));\n",
+ src_param.param_str);
+ }
+}
+
+/** Process the WINED3DSIO_EXPP instruction in GLSL:
+ * For shader model 1.x, do the following (and honor the writemask, so use a temporary variable):
+ * dst.x = 2^(floor(src))
+ * dst.y = src - floor(src)
+ * dst.z = 2^src (partial precision is allowed, but optional)
+ * dst.w = 1.0;
+ * For 2.0 shaders, just do this (honoring writemask and swizzle):
+ * dst = 2^src; (partial precision is allowed, but optional)
+ */
+static void shader_glsl_expp(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src_param);
+
+ if (ins->ctx->reg_maps->shader_version.major < 2)
+ {
+ char dst_mask[6];
+
+ shader_addline(ins->ctx->buffer, "tmp0.x = exp2(floor(%s));\n", src_param.param_str);
+ shader_addline(ins->ctx->buffer, "tmp0.y = %s - floor(%s);\n", src_param.param_str, src_param.param_str);
+ shader_addline(ins->ctx->buffer, "tmp0.z = exp2(%s);\n", src_param.param_str);
+ shader_addline(ins->ctx->buffer, "tmp0.w = 1.0;\n");
+
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+ shader_addline(ins->ctx->buffer, "tmp0%s);\n", dst_mask);
+ } else {
+ DWORD write_mask;
+ unsigned int mask_size;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+ if (mask_size > 1) {
+ shader_addline(ins->ctx->buffer, "vec%d(exp2(%s)));\n", mask_size, src_param.param_str);
+ } else {
+ shader_addline(ins->ctx->buffer, "exp2(%s));\n", src_param.param_str);
+ }
+ }
+}
+
+/** Process the RCP (reciprocal or inverse) opcode in GLSL (dst = 1 / src) */
+static void shader_glsl_rcp(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src_param;
+ DWORD write_mask;
+ unsigned int mask_size;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ mask_size = shader_glsl_get_write_mask_size(write_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src_param);
+
+ if (mask_size > 1)
+ {
+ shader_addline(ins->ctx->buffer, "vec%d(%s == 0.0 ? FLT_MAX : 1.0 / %s));\n",
+ mask_size, src_param.param_str, src_param.param_str);
+ }
+ else
+ {
+ shader_addline(ins->ctx->buffer, "%s == 0.0 ? FLT_MAX : 1.0 / %s);\n",
+ src_param.param_str, src_param.param_str);
+ }
+}
+
+static void shader_glsl_rsq(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src_param;
+ DWORD write_mask;
+ unsigned int mask_size;
+
+ write_mask = shader_glsl_append_dst(buffer, ins);
+ mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src_param);
+
+ if (mask_size > 1)
+ {
+ shader_addline(buffer, "vec%d(%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s))));\n",
+ mask_size, src_param.param_str, src_param.param_str);
+ }
+ else
+ {
+ shader_addline(buffer, "%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s)));\n",
+ src_param.param_str, src_param.param_str);
+ }
+}
+
+#ifdef VBOX_WITH_VMSVGA
+static void shader_glsl_setp(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src_param1, src_param2;
+ DWORD write_mask;
+
+ int i;
+ DWORD dst_mask = ins->dst[0].write_mask;
+ struct wined3d_shader_dst_param dst = ins->dst[0];
+
+ /* Cycle through all source0 channels */
+ for (i=0; i<4; i++) {
+ if (dst_mask & RT_BIT(i))
+ {
+ write_mask = WINED3DSP_WRITEMASK_0 << i;
+ dst.write_mask = dst_mask & write_mask;
+
+ write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst);
+ Assert(write_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param1);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src_param2);
+
+ shader_addline(buffer, "%s %s %s);\n",
+ src_param1.param_str, shader_get_comp_op(ins->flags), src_param2.param_str);
+ }
+ }
+}
+#endif
+
+/** Process signed comparison opcodes in GLSL. */
+static void shader_glsl_compare(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ DWORD write_mask;
+ unsigned int mask_size;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ mask_size = shader_glsl_get_write_mask_size(write_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+
+ if (mask_size > 1) {
+ const char *compare;
+
+ switch(ins->handler_idx)
+ {
+ case WINED3DSIH_SLT: compare = "lessThan"; break;
+ case WINED3DSIH_SGE: compare = "greaterThanEqual"; break;
+ default: compare = "";
+ FIXME("Can't handle opcode %#x\n", ins->handler_idx);
+ }
+
+ shader_addline(ins->ctx->buffer, "vec%d(%s(%s, %s)));\n", mask_size, compare,
+ src0_param.param_str, src1_param.param_str);
+ } else {
+ switch(ins->handler_idx)
+ {
+ case WINED3DSIH_SLT:
+ /* Step(src0, src1) is not suitable here because if src0 == src1 SLT is supposed,
+ * to return 0.0 but step returns 1.0 because step is not < x
+ * An alternative is a bvec compare padded with an unused second component.
+ * step(src1 * -1.0, src0 * -1.0) is not an option because it suffers from the same
+ * issue. Playing with not() is not possible either because not() does not accept
+ * a scalar.
+ */
+ shader_addline(ins->ctx->buffer, "(%s < %s) ? 1.0 : 0.0);\n",
+ src0_param.param_str, src1_param.param_str);
+ break;
+ case WINED3DSIH_SGE:
+ /* Here we can use the step() function and safe a conditional */
+ shader_addline(ins->ctx->buffer, "step(%s, %s));\n", src1_param.param_str, src0_param.param_str);
+ break;
+ default:
+ FIXME("Can't handle opcode %#x\n", ins->handler_idx);
+ }
+
+ }
+}
+
+/** Process CMP instruction in GLSL (dst = src0 >= 0.0 ? src1 : src2), per channel */
+static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ glsl_src_param_t src2_param;
+ DWORD write_mask, cmp_channel = 0;
+ unsigned int i, j;
+ char mask_char[6];
+ BOOL temp_destination = FALSE;
+
+ if (shader_is_scalar(&ins->src[0].reg))
+ {
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+ shader_addline(ins->ctx->buffer, "%s >= 0.0 ? %s : %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ } else {
+ DWORD dst_mask = ins->dst[0].write_mask;
+ struct wined3d_shader_dst_param dst = ins->dst[0];
+
+ /* Cycle through all source0 channels */
+ for (i=0; i<4; i++) {
+ write_mask = 0;
+ /* Find the destination channels which use the current source0 channel */
+ for (j=0; j<4; j++) {
+ if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i)
+ {
+ write_mask |= WINED3DSP_WRITEMASK_0 << j;
+ cmp_channel = WINED3DSP_WRITEMASK_0 << j;
+ }
+ }
+ dst.write_mask = dst_mask & write_mask;
+
+ /* Splitting the cmp instruction up in multiple lines imposes a problem:
+ * The first lines may overwrite source parameters of the following lines.
+ * Deal with that by using a temporary destination register if needed
+ */
+ if ((ins->src[0].reg.idx == ins->dst[0].reg.idx
+ && ins->src[0].reg.type == ins->dst[0].reg.type)
+ || (ins->src[1].reg.idx == ins->dst[0].reg.idx
+ && ins->src[1].reg.type == ins->dst[0].reg.type)
+ || (ins->src[2].reg.idx == ins->dst[0].reg.idx
+ && ins->src[2].reg.type == ins->dst[0].reg.type))
+ {
+ write_mask = shader_glsl_get_write_mask(&dst, mask_char);
+ if (!write_mask) continue;
+ shader_addline(ins->ctx->buffer, "tmp0%s = (", mask_char);
+ temp_destination = TRUE;
+ } else {
+ write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst);
+ if (!write_mask) continue;
+ }
+
+ shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+ shader_addline(ins->ctx->buffer, "%s >= 0.0 ? %s : %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ }
+
+ if(temp_destination) {
+ shader_glsl_get_write_mask(&ins->dst[0], mask_char);
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_addline(ins->ctx->buffer, "tmp0%s);\n", mask_char);
+ }
+ }
+
+}
+
+/** Process the CND opcode in GLSL (dst = (src0 > 0.5) ? src1 : src2) */
+/* For ps 1.1-1.3, only a single component of src0 is used. For ps 1.4
+ * the compare is done per component of src0. */
+static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_dst_param dst;
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ glsl_src_param_t src2_param;
+ DWORD write_mask, cmp_channel = 0;
+ unsigned int i, j;
+ DWORD dst_mask;
+ DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
+ ins->ctx->reg_maps->shader_version.minor);
+
+ if (shader_version < WINED3D_SHADER_VERSION(1, 4))
+ {
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+ /* Fun: The D3DSI_COISSUE flag changes the semantic of the cnd instruction for < 1.4 shaders */
+ if (ins->coissue)
+ {
+ shader_addline(ins->ctx->buffer, "%s /* COISSUE! */);\n", src1_param.param_str);
+ } else {
+ shader_addline(ins->ctx->buffer, "%s > 0.5 ? %s : %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ }
+ return;
+ }
+ /* Cycle through all source0 channels */
+ dst_mask = ins->dst[0].write_mask;
+ dst = ins->dst[0];
+ for (i=0; i<4; i++) {
+ write_mask = 0;
+ /* Find the destination channels which use the current source0 channel */
+ for (j=0; j<4; j++) {
+ if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i)
+ {
+ write_mask |= WINED3DSP_WRITEMASK_0 << j;
+ cmp_channel = WINED3DSP_WRITEMASK_0 << j;
+ }
+ }
+
+ dst.write_mask = dst_mask & write_mask;
+ write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst);
+ if (!write_mask) continue;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+ shader_addline(ins->ctx->buffer, "%s > 0.5 ? %s : %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ }
+}
+
+/** GLSL code generation for WINED3DSIO_MAD: Multiply the first 2 opcodes, then add the last */
+static void shader_glsl_mad(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ glsl_src_param_t src2_param;
+ DWORD write_mask;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+ shader_addline(ins->ctx->buffer, "(%s * %s) + %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
+}
+
+/* Handles transforming all WINED3DSIO_M?x? opcodes for
+ Vertex shaders to GLSL codes */
+static void shader_glsl_mnxn(const struct wined3d_shader_instruction *ins)
+{
+ int i;
+ int nComponents = 0;
+ struct wined3d_shader_dst_param tmp_dst = {{0}};
+ struct wined3d_shader_src_param tmp_src[2] = {{{0}}};
+ struct wined3d_shader_instruction tmp_ins;
+
+ memset(&tmp_ins, 0, sizeof(tmp_ins));
+
+ /* Set constants for the temporary argument */
+ tmp_ins.ctx = ins->ctx;
+ tmp_ins.dst_count = 1;
+ tmp_ins.dst = &tmp_dst;
+ tmp_ins.src_count = 2;
+ tmp_ins.src = tmp_src;
+
+ switch(ins->handler_idx)
+ {
+ case WINED3DSIH_M4x4:
+ nComponents = 4;
+ tmp_ins.handler_idx = WINED3DSIH_DP4;
+ break;
+ case WINED3DSIH_M4x3:
+ nComponents = 3;
+ tmp_ins.handler_idx = WINED3DSIH_DP4;
+ break;
+ case WINED3DSIH_M3x4:
+ nComponents = 4;
+ tmp_ins.handler_idx = WINED3DSIH_DP3;
+ break;
+ case WINED3DSIH_M3x3:
+ nComponents = 3;
+ tmp_ins.handler_idx = WINED3DSIH_DP3;
+ break;
+ case WINED3DSIH_M3x2:
+ nComponents = 2;
+ tmp_ins.handler_idx = WINED3DSIH_DP3;
+ break;
+ default:
+ break;
+ }
+
+ tmp_dst = ins->dst[0];
+ tmp_src[0] = ins->src[0];
+ tmp_src[1] = ins->src[1];
+ for (i = 0; i < nComponents; ++i)
+ {
+ tmp_dst.write_mask = WINED3DSP_WRITEMASK_0 << i;
+ shader_glsl_dot(&tmp_ins);
+ ++tmp_src[1].reg.idx;
+ }
+}
+
+/**
+ The LRP instruction performs a component-wise linear interpolation
+ between the second and third operands using the first operand as the
+ blend factor. Equation: (dst = src2 + src0 * (src1 - src2))
+ This is equivalent to mix(src2, src1, src0);
+*/
+static void shader_glsl_lrp(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ glsl_src_param_t src2_param;
+ DWORD write_mask;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param);
+
+ shader_addline(ins->ctx->buffer, "mix(%s, %s, %s));\n",
+ src2_param.param_str, src1_param.param_str, src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_LIT instruction in GLSL:
+ * dst.x = dst.w = 1.0
+ * dst.y = (src0.x > 0) ? src0.x
+ * dst.z = (src0.x > 0) ? ((src0.y > 0) ? pow(src0.y, src.w) : 0) : 0
+ * where src.w is clamped at +- 128
+ */
+static void shader_glsl_lit(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ glsl_src_param_t src3_param;
+ char dst_mask[6];
+
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_1, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src3_param);
+
+ /* The sdk specifies the instruction like this
+ * dst.x = 1.0;
+ * if(src.x > 0.0) dst.y = src.x
+ * else dst.y = 0.0.
+ * if(src.x > 0.0 && src.y > 0.0) dst.z = pow(src.y, power);
+ * else dst.z = 0.0;
+ * dst.w = 1.0;
+ *
+ * Obviously that has quite a few conditionals in it which we don't like. So the first step is this:
+ * dst.x = 1.0 ... No further explanation needed
+ * dst.y = max(src.y, 0.0); ... If x < 0.0, use 0.0, otherwise x. Same as the conditional
+ * dst.z = x > 0.0 ? pow(max(y, 0.0), p) : 0; ... 0 ^ power is 0, and otherwise we use y anyway
+ * dst.w = 1.0. ... Nothing fancy.
+ *
+ * So we still have one conditional in there. So do this:
+ * dst.z = pow(max(0.0, src.y) * step(0.0, src.x), power);
+ *
+ * step(0.0, x) will return 1 if src.x > 0.0, and 0 otherwise. So if y is 0 we get pow(0.0 * 1.0, power),
+ * which sets dst.z to 0. If y > 0, but x = 0.0, we get pow(y * 0.0, power), which results in 0 too.
+ * if both x and y are > 0, we get pow(y * 1.0, power), as it is supposed to
+ */
+ shader_addline(ins->ctx->buffer,
+ "vec4(1.0, max(%s, 0.0), pow(max(0.0, %s) * step(0.0, %s), clamp(%s, -128.0, 128.0)), 1.0)%s);\n",
+ src0_param.param_str, src1_param.param_str, src0_param.param_str, src3_param.param_str, dst_mask);
+}
+
+/** Process the WINED3DSIO_DST instruction in GLSL:
+ * dst.x = 1.0
+ * dst.y = src0.x * src0.y
+ * dst.z = src0.z
+ * dst.w = src1.w
+ */
+static void shader_glsl_dst(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0y_param;
+ glsl_src_param_t src0z_param;
+ glsl_src_param_t src1y_param;
+ glsl_src_param_t src1w_param;
+ char dst_mask[6];
+
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_1, &src0y_param);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &src0z_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_1, &src1y_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_3, &src1w_param);
+
+ shader_addline(ins->ctx->buffer, "vec4(1.0, %s * %s, %s, %s))%s;\n",
+ src0y_param.param_str, src1y_param.param_str, src0z_param.param_str, src1w_param.param_str, dst_mask);
+}
+
+/** Process the WINED3DSIO_SINCOS instruction in GLSL:
+ * VS 2.0 requires that specific cosine and sine constants be passed to this instruction so the hardware
+ * can handle it. But, these functions are built-in for GLSL, so we can just ignore the last 2 params.
+ *
+ * dst.x = cos(src0.?)
+ * dst.y = sin(src0.?)
+ * dst.z = dst.z
+ * dst.w = dst.w
+ */
+static void shader_glsl_sincos(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ DWORD write_mask;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+
+ switch (write_mask) {
+ case WINED3DSP_WRITEMASK_0:
+ shader_addline(ins->ctx->buffer, "cos(%s));\n", src0_param.param_str);
+ break;
+
+ case WINED3DSP_WRITEMASK_1:
+ shader_addline(ins->ctx->buffer, "sin(%s));\n", src0_param.param_str);
+ break;
+
+ case (WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1):
+ shader_addline(ins->ctx->buffer, "vec2(cos(%s), sin(%s)));\n", src0_param.param_str, src0_param.param_str);
+ break;
+
+ default:
+ ERR("Write mask should be .x, .y or .xy\n");
+ break;
+ }
+}
+
+/* sgn in vs_2_0 has 2 extra parameters(registers for temporary storage) which we don't use
+ * here. But those extra parameters require a dedicated function for sgn, since map2gl would
+ * generate invalid code
+ */
+static void shader_glsl_sgn(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ DWORD write_mask;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param);
+
+ shader_addline(ins->ctx->buffer, "sign(%s));\n", src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_LOOP instruction in GLSL:
+ * Start a for() loop where src1.y is the initial value of aL,
+ * increment aL by src1.z for a total of src1.x iterations.
+ * Need to use a temporary variable for this operation.
+ */
+/* FIXME: I don't think nested loops will work correctly this way. */
+static void shader_glsl_loop(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src1_param;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ const DWORD *control_values = NULL;
+ const local_constant *constant;
+
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_ALL, &src1_param);
+
+ /* Try to hardcode the loop control parameters if possible. Direct3D 9 class hardware doesn't support real
+ * varying indexing, but Microsoft designed this feature for Shader model 2.x+. If the loop control is
+ * known at compile time, the GLSL compiler can unroll the loop, and replace indirect addressing with direct
+ * addressing.
+ */
+ if (ins->src[1].reg.type == WINED3DSPR_CONSTINT)
+ {
+ LIST_FOR_EACH_ENTRY(constant, &shader->baseShader.constantsI, local_constant, entry) {
+ if (constant->idx == ins->src[1].reg.idx)
+ {
+ control_values = constant->value;
+ break;
+ }
+ }
+ }
+
+ if (control_values)
+ {
+ struct wined3d_shader_loop_control loop_control;
+ loop_control.count = control_values[0];
+ loop_control.start = control_values[1];
+ loop_control.step = (int)control_values[2];
+
+ if (loop_control.step > 0)
+ {
+ shader_addline(ins->ctx->buffer, "for (aL%u = %u; aL%u < (%u * %d + %u); aL%u += %d) {\n",
+ shader->baseShader.cur_loop_depth, loop_control.start,
+ shader->baseShader.cur_loop_depth, loop_control.count, loop_control.step, loop_control.start,
+ shader->baseShader.cur_loop_depth, loop_control.step);
+ }
+ else if (loop_control.step < 0)
+ {
+ shader_addline(ins->ctx->buffer, "for (aL%u = %u; aL%u > (%u * %d + %u); aL%u += %d) {\n",
+ shader->baseShader.cur_loop_depth, loop_control.start,
+ shader->baseShader.cur_loop_depth, loop_control.count, loop_control.step, loop_control.start,
+ shader->baseShader.cur_loop_depth, loop_control.step);
+ }
+ else
+ {
+ shader_addline(ins->ctx->buffer, "for (aL%u = %u, tmpInt%u = 0; tmpInt%u < %u; tmpInt%u++) {\n",
+ shader->baseShader.cur_loop_depth, loop_control.start, shader->baseShader.cur_loop_depth,
+ shader->baseShader.cur_loop_depth, loop_control.count,
+ shader->baseShader.cur_loop_depth);
+ }
+ } else {
+ shader_addline(ins->ctx->buffer,
+ "for (tmpInt%u = 0, aL%u = %s.y; tmpInt%u < %s.x; tmpInt%u++, aL%u += %s.z) {\n",
+ shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_regno,
+ src1_param.reg_name, shader->baseShader.cur_loop_depth, src1_param.reg_name,
+ shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_regno, src1_param.reg_name);
+ }
+
+ shader->baseShader.cur_loop_depth++;
+ shader->baseShader.cur_loop_regno++;
+}
+
+static void shader_glsl_end(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+
+ shader_addline(ins->ctx->buffer, "}\n");
+
+ if (ins->handler_idx == WINED3DSIH_ENDLOOP)
+ {
+ shader->baseShader.cur_loop_depth--;
+ shader->baseShader.cur_loop_regno--;
+ }
+
+ if (ins->handler_idx == WINED3DSIH_ENDREP)
+ {
+ shader->baseShader.cur_loop_depth--;
+ }
+}
+
+static void shader_glsl_rep(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ glsl_src_param_t src0_param;
+ const DWORD *control_values = NULL;
+ const local_constant *constant;
+
+ /* Try to hardcode local values to help the GLSL compiler to unroll and optimize the loop */
+ if (ins->src[0].reg.type == WINED3DSPR_CONSTINT)
+ {
+ LIST_FOR_EACH_ENTRY(constant, &shader->baseShader.constantsI, local_constant, entry)
+ {
+ if (constant->idx == ins->src[0].reg.idx)
+ {
+ control_values = constant->value;
+ break;
+ }
+ }
+ }
+
+ if(control_values) {
+ shader_addline(ins->ctx->buffer, "for (tmpInt%d = 0; tmpInt%d < %d; tmpInt%d++) {\n",
+ shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_depth,
+ control_values[0], shader->baseShader.cur_loop_depth);
+ } else {
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_addline(ins->ctx->buffer, "for (tmpInt%d = 0; tmpInt%d < %s; tmpInt%d++) {\n",
+ shader->baseShader.cur_loop_depth, shader->baseShader.cur_loop_depth,
+ src0_param.param_str, shader->baseShader.cur_loop_depth);
+ }
+ shader->baseShader.cur_loop_depth++;
+}
+
+static void shader_glsl_if(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_addline(ins->ctx->buffer, "if (%s) {\n", src0_param.param_str);
+}
+
+static void shader_glsl_ifc(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+
+ shader_addline(ins->ctx->buffer, "if (%s %s %s) {\n",
+ src0_param.param_str, shader_get_comp_op(ins->flags), src1_param.param_str);
+}
+
+static void shader_glsl_else(const struct wined3d_shader_instruction *ins)
+{
+ shader_addline(ins->ctx->buffer, "} else {\n");
+}
+
+static void shader_glsl_break(const struct wined3d_shader_instruction *ins)
+{
+ shader_addline(ins->ctx->buffer, "break;\n");
+}
+
+/* FIXME: According to MSDN the compare is done per component. */
+static void shader_glsl_breakc(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+
+ shader_addline(ins->ctx->buffer, "if (%s %s %s) break;\n",
+ src0_param.param_str, shader_get_comp_op(ins->flags), src1_param.param_str);
+}
+
+static void shader_glsl_label(const struct wined3d_shader_instruction *ins)
+{
+ shader_addline(ins->ctx->buffer, "}\n");
+ shader_addline(ins->ctx->buffer, "void subroutine%u () {\n", ins->src[0].reg.idx);
+}
+
+static void shader_glsl_call(const struct wined3d_shader_instruction *ins)
+{
+ shader_addline(ins->ctx->buffer, "subroutine%u();\n", ins->src[0].reg.idx);
+}
+
+static void shader_glsl_callnz(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src1_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param);
+ shader_addline(ins->ctx->buffer, "if (%s) subroutine%u();\n", src1_param.param_str, ins->src[0].reg.idx);
+}
+
+static void shader_glsl_ret(const struct wined3d_shader_instruction *ins)
+{
+ /* No-op. The closing } is written when a new function is started, and at the end of the shader. This
+ * function only suppresses the unhandled instruction warning
+ */
+}
+
+/*********************************************
+ * Pixel Shader Specific Code begins here
+ ********************************************/
+static void shader_glsl_tex(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
+ ins->ctx->reg_maps->shader_version.minor);
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_sample_function_t sample_function;
+ DWORD sample_flags = 0;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
+ DWORD sampler_idx;
+ DWORD mask = 0, swizzle;
+
+ /* 1.0-1.4: Use destination register as sampler source.
+ * 2.0+: Use provided sampler source. */
+ if (shader_version < WINED3D_SHADER_VERSION(2,0)) sampler_idx = ins->dst[0].reg.idx;
+ else sampler_idx = ins->src[1].reg.idx;
+
+ AssertReturnVoid(sampler_idx < RT_ELEMENTS(ins->ctx->reg_maps->sampler_type));
+ sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+
+ if (shader_version < WINED3D_SHADER_VERSION(1,4))
+ {
+ const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+ DWORD flags = (priv->cur_ps_args->tex_transform >> (sampler_idx * WINED3D_PSARGS_TEXTRANSFORM_SHIFT))
+ & WINED3D_PSARGS_TEXTRANSFORM_MASK;
+
+ /* Projected cube textures don't make a lot of sense, the resulting coordinates stay the same. */
+ if (flags & WINED3D_PSARGS_PROJECTED && sampler_type != WINED3DSTT_CUBE) {
+ sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+ switch (flags & ~WINED3D_PSARGS_PROJECTED) {
+ case WINED3DTTFF_COUNT1: FIXME("WINED3DTTFF_PROJECTED with WINED3DTTFF_COUNT1?\n"); break;
+ case WINED3DTTFF_COUNT2: mask = WINED3DSP_WRITEMASK_1; break;
+ case WINED3DTTFF_COUNT3: mask = WINED3DSP_WRITEMASK_2; break;
+ case WINED3DTTFF_COUNT4:
+ case WINED3DTTFF_DISABLE: mask = WINED3DSP_WRITEMASK_3; break;
+ }
+ }
+ }
+ else if (shader_version < WINED3D_SHADER_VERSION(2,0))
+ {
+ DWORD src_mod = ins->src[0].modifiers;
+
+ if (src_mod == WINED3DSPSM_DZ) {
+ sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+ mask = WINED3DSP_WRITEMASK_2;
+ } else if (src_mod == WINED3DSPSM_DW) {
+ sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+ mask = WINED3DSP_WRITEMASK_3;
+ }
+ } else {
+ if (ins->flags & WINED3DSI_TEXLD_PROJECT)
+ {
+ /* ps 2.0 texldp instruction always divides by the fourth component. */
+ sample_flags |= WINED3D_GLSL_SAMPLE_PROJECTED;
+ mask = WINED3DSP_WRITEMASK_3;
+ }
+ }
+
+ if(deviceImpl->stateBlock->textures[sampler_idx] &&
+ IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
+ sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
+ }
+
+ shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
+ mask |= sample_function.coord_mask;
+
+ if (shader_version < WINED3D_SHADER_VERSION(2,0)) swizzle = WINED3DSP_NOSWIZZLE;
+ else swizzle = ins->src[1].swizzle;
+
+ /* 1.0-1.3: Use destination register as coordinate source.
+ 1.4+: Use provided coordinate source register. */
+ if (shader_version < WINED3D_SHADER_VERSION(1,4))
+ {
+ char coord_mask[6];
+ shader_glsl_write_mask_to_str(mask, coord_mask);
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, NULL,
+ "T%u%s", sampler_idx, coord_mask);
+ } else {
+ glsl_src_param_t coord_param;
+ shader_glsl_add_src_param(ins, &ins->src[0], mask, &coord_param);
+ if (ins->flags & WINED3DSI_TEXLD_BIAS)
+ {
+ glsl_src_param_t bias;
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &bias);
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, bias.param_str,
+ "%s", coord_param.param_str);
+ } else {
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, NULL,
+ "%s", coord_param.param_str);
+ }
+ }
+}
+
+static void shader_glsl_texldd(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_sample_function_t sample_function;
+ glsl_src_param_t coord_param, dx_param, dy_param;
+ DWORD sample_flags = WINED3D_GLSL_SAMPLE_GRAD;
+ DWORD sampler_type;
+ DWORD sampler_idx;
+ DWORD swizzle = ins->src[1].swizzle;
+
+ if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4])
+ {
+ FIXME("texldd used, but not supported by hardware. Falling back to regular tex\n");
+ shader_glsl_tex(ins);
+ return;
+ }
+
+ sampler_idx = ins->src[1].reg.idx;
+ AssertReturnVoid(sampler_idx < RT_ELEMENTS(ins->ctx->reg_maps->sampler_type));
+
+ sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ if(deviceImpl->stateBlock->textures[sampler_idx] &&
+ IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
+ sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
+ }
+
+ shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
+ shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], sample_function.coord_mask, &dx_param);
+ shader_glsl_add_src_param(ins, &ins->src[3], sample_function.coord_mask, &dy_param);
+
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, dx_param.param_str, dy_param.param_str, NULL,
+ "%s", coord_param.param_str);
+}
+
+static void shader_glsl_texldl(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_sample_function_t sample_function;
+ glsl_src_param_t coord_param, lod_param;
+ DWORD sample_flags = WINED3D_GLSL_SAMPLE_LOD;
+ DWORD sampler_type;
+ DWORD sampler_idx;
+ DWORD swizzle = ins->src[1].swizzle;
+
+ sampler_idx = ins->src[1].reg.idx;
+ AssertReturnVoid(sampler_idx < RT_ELEMENTS(ins->ctx->reg_maps->sampler_type));
+
+ sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ if(deviceImpl->stateBlock->textures[sampler_idx] &&
+ IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
+ sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
+ }
+ shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
+ shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &lod_param);
+
+ if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4]
+ && shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type))
+ {
+ /* The GLSL spec claims the Lod sampling functions are only supported in vertex shaders.
+ * However, they seem to work just fine in fragment shaders as well. */
+ WARN("Using %s in fragment shader.\n", sample_function.name);
+ }
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, swizzle, NULL, NULL, lod_param.param_str,
+ "%s", coord_param.param_str);
+}
+
+static void shader_glsl_texcoord(const struct wined3d_shader_instruction *ins)
+{
+ /* FIXME: Make this work for more than just 2D textures */
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ DWORD write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+
+ if (!(ins->ctx->reg_maps->shader_version.major == 1 && ins->ctx->reg_maps->shader_version.minor == 4))
+ {
+ char dst_mask[6];
+
+ shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+ shader_addline(buffer, "clamp(gl_TexCoord[%u], 0.0, 1.0)%s);\n",
+ ins->dst[0].reg.idx, dst_mask);
+ } else {
+ DWORD reg = ins->src[0].reg.idx;
+ DWORD src_mod = ins->src[0].modifiers;
+ char dst_swizzle[6];
+
+ shader_glsl_get_swizzle(&ins->src[0], FALSE, write_mask, dst_swizzle);
+
+ if (src_mod == WINED3DSPSM_DZ) {
+ glsl_src_param_t div_param;
+ unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &div_param);
+
+ if (mask_size > 1) {
+ shader_addline(buffer, "gl_TexCoord[%u]%s / vec%d(%s));\n", reg, dst_swizzle, mask_size, div_param.param_str);
+ } else {
+ shader_addline(buffer, "gl_TexCoord[%u]%s / %s);\n", reg, dst_swizzle, div_param.param_str);
+ }
+ } else if (src_mod == WINED3DSPSM_DW) {
+ glsl_src_param_t div_param;
+ unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &div_param);
+
+ if (mask_size > 1) {
+ shader_addline(buffer, "gl_TexCoord[%u]%s / vec%d(%s));\n", reg, dst_swizzle, mask_size, div_param.param_str);
+ } else {
+ shader_addline(buffer, "gl_TexCoord[%u]%s / %s);\n", reg, dst_swizzle, div_param.param_str);
+ }
+ } else {
+ shader_addline(buffer, "gl_TexCoord[%u]%s);\n", reg, dst_swizzle);
+ }
+ }
+}
+
+/** Process the WINED3DSIO_TEXDP3TEX instruction in GLSL:
+ * Take a 3-component dot product of the TexCoord[dstreg] and src,
+ * then perform a 1D texture lookup from stage dstregnum, place into dst. */
+static void shader_glsl_texdp3tex(const struct wined3d_shader_instruction *ins)
+{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_src_param_t src0_param;
+ glsl_sample_function_t sample_function;
+ DWORD sampler_idx = ins->dst[0].reg.idx;
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ UINT mask_size;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+ /* Do I have to take care about the projected bit? I don't think so, since the dp3 returns only one
+ * scalar, and projected sampling would require 4.
+ *
+ * It is a dependent read - not valid with conditional NP2 textures
+ */
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+ mask_size = shader_glsl_get_write_mask_size(sample_function.coord_mask);
+
+ switch(mask_size)
+ {
+ case 1:
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "dot(gl_TexCoord[%u].xyz, %s)", sampler_idx, src0_param.param_str);
+ break;
+
+ case 2:
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "vec2(dot(gl_TexCoord[%u].xyz, %s), 0.0)", sampler_idx, src0_param.param_str);
+ break;
+
+ case 3:
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "vec3(dot(gl_TexCoord[%u].xyz, %s), 0.0, 0.0)", sampler_idx, src0_param.param_str);
+ break;
+
+ default:
+ FIXME("Unexpected mask size %u\n", mask_size);
+ break;
+ }
+}
+
+/** Process the WINED3DSIO_TEXDP3 instruction in GLSL:
+ * Take a 3-component dot product of the TexCoord[dstreg] and src. */
+static void shader_glsl_texdp3(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ DWORD dstreg = ins->dst[0].reg.idx;
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ DWORD dst_mask;
+ unsigned int mask_size;
+
+ dst_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ mask_size = shader_glsl_get_write_mask_size(dst_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+ if (mask_size > 1) {
+ shader_addline(ins->ctx->buffer, "vec%d(dot(T%u.xyz, %s)));\n", mask_size, dstreg, src0_param.param_str);
+ } else {
+ shader_addline(ins->ctx->buffer, "dot(T%u.xyz, %s));\n", dstreg, src0_param.param_str);
+ }
+}
+
+/** Process the WINED3DSIO_TEXDEPTH instruction in GLSL:
+ * Calculate the depth as dst.x / dst.y */
+static void shader_glsl_texdepth(const struct wined3d_shader_instruction *ins)
+{
+ glsl_dst_param_t dst_param;
+
+ shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+
+ /* Tests show that texdepth never returns anything below 0.0, and that r5.y is clamped to 1.0.
+ * Negative input is accepted, -0.25 / -0.5 returns 0.5. GL should clamp gl_FragDepth to [0;1], but
+ * this doesn't always work, so clamp the results manually. Whether or not the x value is clamped at 1
+ * too is irrelevant, since if x = 0, any y value < 1.0 (and > 1.0 is not allowed) results in a result
+ * >= 1.0 or < 0.0
+ */
+ shader_addline(ins->ctx->buffer, "gl_FragDepth = clamp((%s.x / min(%s.y, 1.0)), 0.0, 1.0);\n",
+ dst_param.reg_name, dst_param.reg_name);
+}
+
+/** Process the WINED3DSIO_TEXM3X2DEPTH instruction in GLSL:
+ * Last row of a 3x2 matrix multiply, use the result to calculate the depth:
+ * Calculate tmp0.y = TexCoord[dstreg] . src.xyz; (tmp0.x has already been calculated)
+ * depth = (tmp0.y == 0.0) ? 1.0 : tmp0.x / tmp0.y
+ */
+static void shader_glsl_texm3x2depth(const struct wined3d_shader_instruction *ins)
+{
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ DWORD dstreg = ins->dst[0].reg.idx;
+ glsl_src_param_t src0_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+ shader_addline(ins->ctx->buffer, "tmp0.y = dot(T%u.xyz, %s);\n", dstreg, src0_param.param_str);
+ shader_addline(ins->ctx->buffer, "gl_FragDepth = (tmp0.y == 0.0) ? 1.0 : clamp(tmp0.x / tmp0.y, 0.0, 1.0);\n");
+}
+
+/** Process the WINED3DSIO_TEXM3X2PAD instruction in GLSL
+ * Calculate the 1st of a 2-row matrix multiplication. */
+static void shader_glsl_texm3x2pad(const struct wined3d_shader_instruction *ins)
+{
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ DWORD reg = ins->dst[0].reg.idx;
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+ shader_addline(buffer, "tmp0.x = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_TEXM3X3PAD instruction in GLSL
+ * Calculate the 1st or 2nd row of a 3-row matrix multiplication. */
+static void shader_glsl_texm3x3pad(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ DWORD reg = ins->dst[0].reg.idx;
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
+ glsl_src_param_t src0_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+ shader_addline(buffer, "tmp0.%c = dot(T%u.xyz, %s);\n", 'x' + current_state->current_row, reg, src0_param.param_str);
+ current_state->texcoord_w[current_state->current_row++] = reg;
+}
+
+static void shader_glsl_texm3x2tex(const struct wined3d_shader_instruction *ins)
+{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ DWORD reg = ins->dst[0].reg.idx;
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src0_param;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
+ glsl_sample_function_t sample_function;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+ shader_addline(buffer, "tmp0.y = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+
+ /* Sample the texture using the calculated coordinates */
+ shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xy");
+}
+
+/** Process the WINED3DSIO_TEXM3X3TEX instruction in GLSL
+ * Perform the 3rd row of a 3x3 matrix multiply, then sample the texture using the calculated coordinates */
+static void shader_glsl_texm3x3tex(const struct wined3d_shader_instruction *ins)
+{
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_src_param_t src0_param;
+ DWORD reg = ins->dst[0].reg.idx;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
+ glsl_sample_function_t sample_function;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+ shader_addline(ins->ctx->buffer, "tmp0.z = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+
+ /* Dependent read, not valid with conditional NP2 */
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+
+ /* Sample the texture using the calculated coordinates */
+ shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
+
+ current_state->current_row = 0;
+}
+
+/** Process the WINED3DSIO_TEXM3X3 instruction in GLSL
+ * Perform the 3rd row of a 3x3 matrix multiply */
+static void shader_glsl_texm3x3(const struct wined3d_shader_instruction *ins)
+{
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
+ glsl_src_param_t src0_param;
+ char dst_mask[6];
+ DWORD reg = ins->dst[0].reg.idx;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_glsl_get_write_mask(&ins->dst[0], dst_mask);
+ shader_addline(ins->ctx->buffer, "vec4(tmp0.xy, dot(T%u.xyz, %s), 1.0)%s);\n", reg, src0_param.param_str, dst_mask);
+
+ current_state->current_row = 0;
+}
+
+/* Process the WINED3DSIO_TEXM3X3SPEC instruction in GLSL
+ * Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */
+static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ DWORD reg = ins->dst[0].reg.idx;
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
+ WINED3DSAMPLER_TEXTURE_TYPE stype = ins->ctx->reg_maps->sampler_type[reg];
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ glsl_sample_function_t sample_function;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], src_mask, &src1_param);
+
+ /* Perform the last matrix multiply operation */
+ shader_addline(buffer, "tmp0.z = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
+ /* Reflection calculation */
+ shader_addline(buffer, "tmp0.xyz = -reflect((%s), normalize(tmp0.xyz));\n", src1_param.param_str);
+
+ /* Dependent read, not valid with conditional NP2 */
+ shader_glsl_get_sample_function(gl_info, stype, 0, &sample_function);
+
+ /* Sample the texture */
+ shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
+
+ current_state->current_row = 0;
+}
+
+/* Process the WINED3DSIO_TEXM3X3VSPEC instruction in GLSL
+ * Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */
+static void shader_glsl_texm3x3vspec(const struct wined3d_shader_instruction *ins)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ DWORD reg = ins->dst[0].reg.idx;
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
+ glsl_src_param_t src0_param;
+ DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
+ glsl_sample_function_t sample_function;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
+
+ /* Perform the last matrix multiply operation */
+ shader_addline(buffer, "tmp0.z = dot(vec3(T%u), vec3(%s));\n", reg, src0_param.param_str);
+
+ /* Construct the eye-ray vector from w coordinates */
+ shader_addline(buffer, "tmp1.xyz = normalize(vec3(gl_TexCoord[%u].w, gl_TexCoord[%u].w, gl_TexCoord[%u].w));\n",
+ current_state->texcoord_w[0], current_state->texcoord_w[1], reg);
+ shader_addline(buffer, "tmp0.xyz = -reflect(tmp1.xyz, normalize(tmp0.xyz));\n");
+
+ /* Dependent read, not valid with conditional NP2 */
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+
+ /* Sample the texture using the calculated coordinates */
+ shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
+
+ current_state->current_row = 0;
+}
+
+/** Process the WINED3DSIO_TEXBEM instruction in GLSL.
+ * Apply a fake bump map transform.
+ * texbem is pshader <= 1.3 only, this saves a few version checks
+ */
+static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins)
+{
+ /*IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device; - unused */
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data;
+ glsl_sample_function_t sample_function;
+ glsl_src_param_t coord_param;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
+ DWORD sampler_idx;
+ DWORD mask;
+ DWORD flags;
+ char coord_mask[6];
+
+ sampler_idx = ins->dst[0].reg.idx;
+ flags = (priv->cur_ps_args->tex_transform >> (sampler_idx * WINED3D_PSARGS_TEXTRANSFORM_SHIFT))
+ & WINED3D_PSARGS_TEXTRANSFORM_MASK;
+
+ sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ /* Dependent read, not valid with conditional NP2 */
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+ mask = sample_function.coord_mask;
+
+ shader_glsl_write_mask_to_str(mask, coord_mask);
+
+ /* with projective textures, texbem only divides the static texture coord, not the displacement,
+ * so we can't let the GL handle this.
+ */
+ if (flags & WINED3D_PSARGS_PROJECTED) {
+ DWORD div_mask=0;
+ char coord_div_mask[3];
+ switch (flags & ~WINED3D_PSARGS_PROJECTED) {
+ case WINED3DTTFF_COUNT1: FIXME("WINED3DTTFF_PROJECTED with WINED3DTTFF_COUNT1?\n"); break;
+ case WINED3DTTFF_COUNT2: div_mask = WINED3DSP_WRITEMASK_1; break;
+ case WINED3DTTFF_COUNT3: div_mask = WINED3DSP_WRITEMASK_2; break;
+ case WINED3DTTFF_COUNT4:
+ case WINED3DTTFF_DISABLE: div_mask = WINED3DSP_WRITEMASK_3; break;
+ }
+ shader_glsl_write_mask_to_str(div_mask, coord_div_mask);
+ shader_addline(ins->ctx->buffer, "T%u%s /= T%u%s;\n", sampler_idx, coord_mask, sampler_idx, coord_div_mask);
+ }
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &coord_param);
+
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "T%u%s + vec4(bumpenvmat%d * %s, 0.0, 0.0)%s", sampler_idx, coord_mask, sampler_idx,
+ coord_param.param_str, coord_mask);
+
+ if (ins->handler_idx == WINED3DSIH_TEXBEML)
+ {
+ glsl_src_param_t luminance_param;
+ glsl_dst_param_t dst_param;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &luminance_param);
+ shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+
+ shader_addline(ins->ctx->buffer, "%s%s *= (%s * luminancescale%d + luminanceoffset%d);\n",
+ dst_param.reg_name, dst_param.mask_str,
+ luminance_param.param_str, sampler_idx, sampler_idx);
+ }
+}
+
+static void shader_glsl_bem(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param, src1_param;
+ DWORD sampler_idx = ins->dst[0].reg.idx;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src1_param);
+
+ shader_glsl_append_dst(ins->ctx->buffer, ins);
+ shader_addline(ins->ctx->buffer, "%s + bumpenvmat%d * %s);\n",
+ src0_param.param_str, sampler_idx, src1_param.param_str);
+}
+
+/** Process the WINED3DSIO_TEXREG2AR instruction in GLSL
+ * Sample 2D texture at dst using the alpha & red (wx) components of src as texture coordinates */
+static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins)
+{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_src_param_t src0_param;
+ DWORD sampler_idx = ins->dst[0].reg.idx;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ glsl_sample_function_t sample_function;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
+
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "%s.wx", src0_param.reg_name);
+}
+
+/** Process the WINED3DSIO_TEXREG2GB instruction in GLSL
+ * Sample 2D texture at dst using the green & blue (yz) components of src as texture coordinates */
+static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins)
+{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_src_param_t src0_param;
+ DWORD sampler_idx = ins->dst[0].reg.idx;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ glsl_sample_function_t sample_function;
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
+
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "%s.yz", src0_param.reg_name);
+}
+
+/** Process the WINED3DSIO_TEXREG2RGB instruction in GLSL
+ * Sample texture at dst using the rgb (xyz) components of src as texture coordinates */
+static void shader_glsl_texreg2rgb(const struct wined3d_shader_instruction *ins)
+{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
+ glsl_src_param_t src0_param;
+ DWORD sampler_idx = ins->dst[0].reg.idx;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
+ glsl_sample_function_t sample_function;
+
+ /* Dependent read, not valid with conditional NP2 */
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
+ shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &src0_param);
+
+ shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
+ "%s", src0_param.param_str);
+}
+
+/** Process the WINED3DSIO_TEXKILL instruction in GLSL.
+ * If any of the first 3 components are < 0, discard this pixel */
+static void shader_glsl_texkill(const struct wined3d_shader_instruction *ins)
+{
+ glsl_dst_param_t dst_param;
+
+ /* The argument is a destination parameter, and no writemasks are allowed */
+ shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param);
+ if (ins->ctx->reg_maps->shader_version.major >= 2)
+ {
+ /* 2.0 shaders compare all 4 components in texkill */
+ shader_addline(ins->ctx->buffer, "if (any(lessThan(%s.xyzw, vec4(0.0)))) discard;\n", dst_param.reg_name);
+ } else {
+ /* 1.X shaders only compare the first 3 components, probably due to the nature of the texkill
+ * instruction as a tex* instruction, and phase, which kills all a / w components. Even if all
+ * 4 components are defined, only the first 3 are used
+ */
+ shader_addline(ins->ctx->buffer, "if (any(lessThan(%s.xyz, vec3(0.0)))) discard;\n", dst_param.reg_name);
+ }
+}
+
+/** Process the WINED3DSIO_DP2ADD instruction in GLSL.
+ * dst = dot2(src0, src1) + src2 */
+static void shader_glsl_dp2add(const struct wined3d_shader_instruction *ins)
+{
+ glsl_src_param_t src0_param;
+ glsl_src_param_t src1_param;
+ glsl_src_param_t src2_param;
+ DWORD write_mask;
+ unsigned int mask_size;
+
+ write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins);
+ mask_size = shader_glsl_get_write_mask_size(write_mask);
+
+ shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src0_param);
+ shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src1_param);
+ shader_glsl_add_src_param(ins, &ins->src[2], WINED3DSP_WRITEMASK_0, &src2_param);
+
+ if (mask_size > 1) {
+ shader_addline(ins->ctx->buffer, "vec%d(dot(%s, %s) + %s));\n",
+ mask_size, src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ } else {
+ shader_addline(ins->ctx->buffer, "dot(%s, %s) + %s);\n",
+ src0_param.param_str, src1_param.param_str, src2_param.param_str);
+ }
+}
+
+static void shader_glsl_input_pack(IWineD3DPixelShader *iface, struct wined3d_shader_buffer *buffer,
+ const struct wined3d_shader_signature_element *input_signature, const struct shader_reg_maps *reg_maps,
+ enum vertexprocessing_mode vertexprocessing)
+{
+ unsigned int i;
+ IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)iface;
+ WORD map = reg_maps->input_registers;
+
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ const char *semantic_name;
+ UINT semantic_idx;
+ char reg_mask[6];
+
+ /* Unused */
+ if (!(map & 1)) continue;
+
+ semantic_name = input_signature[i].semantic_name;
+ semantic_idx = input_signature[i].semantic_idx;
+ shader_glsl_write_mask_to_str(input_signature[i].mask, reg_mask);
+
+ if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_TEXCOORD))
+ {
+ if (semantic_idx < 8 && vertexprocessing == pretransformed)
+ shader_addline(buffer, "IN[%u]%s = gl_TexCoord[%u]%s;\n",
+ This->input_reg_map[i], reg_mask, semantic_idx, reg_mask);
+ else
+ shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ This->input_reg_map[i], reg_mask, reg_mask);
+ }
+ else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_COLOR))
+ {
+ if (semantic_idx == 0)
+ shader_addline(buffer, "IN[%u]%s = vec4(gl_Color)%s;\n",
+ This->input_reg_map[i], reg_mask, reg_mask);
+ else if (semantic_idx == 1)
+ shader_addline(buffer, "IN[%u]%s = vec4(gl_SecondaryColor)%s;\n",
+ This->input_reg_map[i], reg_mask, reg_mask);
+ else
+ shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ This->input_reg_map[i], reg_mask, reg_mask);
+ }
+ else
+ {
+ shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ This->input_reg_map[i], reg_mask, reg_mask);
+ }
+ }
+}
+
+/*********************************************
+ * Vertex Shader Specific Code begins here
+ ********************************************/
+
+static void add_glsl_program_entry(struct shader_glsl_priv *priv, struct glsl_shader_prog_link *entry) {
+ glsl_program_key_t key;
+
+ key.vshader = entry->vshader;
+ key.pshader = entry->pshader;
+ key.vs_args = entry->vs_args;
+ key.ps_args = entry->ps_args;
+ key.context = entry->context;
+
+ if (wine_rb_put(&priv->program_lookup, &key, &entry->program_lookup_entry) == -1)
+ {
+ ERR("Failed to insert program entry.\n");
+ }
+}
+
+static struct glsl_shader_prog_link *get_glsl_program_entry(struct shader_glsl_priv *priv,
+ IWineD3DVertexShader *vshader, IWineD3DPixelShader *pshader, struct vs_compile_args *vs_args,
+ struct ps_compile_args *ps_args, const struct wined3d_context *context) {
+ struct wine_rb_entry *entry;
+ glsl_program_key_t key;
+
+ key.vshader = vshader;
+ key.pshader = pshader;
+ key.vs_args = *vs_args;
+ key.ps_args = *ps_args;
+ key.context = context;
+
+ entry = wine_rb_get(&priv->program_lookup, &key);
+ return entry ? WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry) : NULL;
+}
+
+/* GL locking is done by the caller */
+static void delete_glsl_program_entry(struct shader_glsl_priv *priv, const struct wined3d_gl_info *gl_info,
+ struct glsl_shader_prog_link *entry)
+{
+ glsl_program_key_t key;
+
+ key.vshader = entry->vshader;
+ key.pshader = entry->pshader;
+ key.vs_args = entry->vs_args;
+ key.ps_args = entry->ps_args;
+ key.context = entry->context;
+ wine_rb_remove(&priv->program_lookup, &key);
+
+ if (context_get_current() == entry->context)
+ {
+ TRACE("deleting program %p\n", (void *)(uintptr_t)entry->programId);
+ GL_EXTCALL(glDeleteObjectARB(entry->programId));
+ checkGLcall("glDeleteObjectARB");
+ }
+ else
+ {
+ WARN("Attempting to delete program %p created in ctx %p from ctx %p\n", (void *)(uintptr_t)entry->programId, entry->context, context_get_current());
+ }
+
+ if (entry->vshader) list_remove(&entry->vshader_entry);
+ if (entry->pshader) list_remove(&entry->pshader_entry);
+ HeapFree(GetProcessHeap(), 0, entry->vuniformF_locations);
+ HeapFree(GetProcessHeap(), 0, entry->puniformF_locations);
+ HeapFree(GetProcessHeap(), 0, entry);
+}
+
+static void handle_ps3_input(struct wined3d_shader_buffer *buffer, const struct wined3d_gl_info *gl_info, const DWORD *map,
+ const struct wined3d_shader_signature_element *input_signature, const struct shader_reg_maps *reg_maps_in,
+ const struct wined3d_shader_signature_element *output_signature, const struct shader_reg_maps *reg_maps_out)
+{
+ unsigned int i, j;
+ const char *semantic_name_in, *semantic_name_out;
+ UINT semantic_idx_in, semantic_idx_out;
+ DWORD *set;
+ DWORD in_idx;
+ unsigned int in_count = vec4_varyings(3, gl_info);
+ char reg_mask[6], reg_mask_out[6];
+ char destination[50];
+ WORD input_map, output_map;
+
+ set = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*set) * (in_count + 2));
+
+ if (!output_signature)
+ {
+ /* Save gl_FrontColor & gl_FrontSecondaryColor before overwriting them. */
+ shader_addline(buffer, "vec4 front_color = gl_FrontColor;\n");
+ shader_addline(buffer, "vec4 front_secondary_color = gl_FrontSecondaryColor;\n");
+ }
+
+ input_map = reg_maps_in->input_registers;
+ for (i = 0; input_map; input_map >>= 1, ++i)
+ {
+ if (!(input_map & 1)) continue;
+
+ in_idx = map[i];
+ if (in_idx >= (in_count + 2)) {
+ FIXME("More input varyings declared than supported, expect issues\n");
+ continue;
+ }
+ else if (map[i] == ~0U)
+ {
+ /* Declared, but not read register */
+ continue;
+ }
+
+ if (in_idx == in_count) {
+ sprintf(destination, "gl_FrontColor");
+ } else if (in_idx == in_count + 1) {
+ sprintf(destination, "gl_FrontSecondaryColor");
+ } else {
+ sprintf(destination, "IN[%u]", in_idx);
+ }
+
+ semantic_name_in = input_signature[i].semantic_name;
+ semantic_idx_in = input_signature[i].semantic_idx;
+ set[map[i]] = input_signature[i].mask;
+ shader_glsl_write_mask_to_str(input_signature[i].mask, reg_mask);
+
+ if (!output_signature)
+ {
+ if (shader_match_semantic(semantic_name_in, WINED3DDECLUSAGE_COLOR))
+ {
+ if (semantic_idx_in == 0)
+ shader_addline(buffer, "%s%s = front_color%s;\n",
+ destination, reg_mask, reg_mask);
+ else if (semantic_idx_in == 1)
+ shader_addline(buffer, "%s%s = front_secondary_color%s;\n",
+ destination, reg_mask, reg_mask);
+ else
+ shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ destination, reg_mask, reg_mask);
+ }
+ else if (shader_match_semantic(semantic_name_in, WINED3DDECLUSAGE_TEXCOORD))
+ {
+ if (semantic_idx_in < 8)
+ {
+ shader_addline(buffer, "%s%s = gl_TexCoord[%u]%s;\n",
+ destination, reg_mask, semantic_idx_in, reg_mask);
+ }
+ else
+ {
+ shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ destination, reg_mask, reg_mask);
+ }
+ }
+ else if (shader_match_semantic(semantic_name_in, WINED3DDECLUSAGE_FOG))
+ {
+ shader_addline(buffer, "%s%s = vec4(gl_FogFragCoord, 0.0, 0.0, 0.0)%s;\n",
+ destination, reg_mask, reg_mask);
+ }
+ else
+ {
+ shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ destination, reg_mask, reg_mask);
+ }
+ } else {
+ BOOL found = FALSE;
+
+ output_map = reg_maps_out->output_registers;
+ for (j = 0; output_map; output_map >>= 1, ++j)
+ {
+ if (!(output_map & 1)) continue;
+
+ semantic_name_out = output_signature[j].semantic_name;
+ semantic_idx_out = output_signature[j].semantic_idx;
+ shader_glsl_write_mask_to_str(output_signature[j].mask, reg_mask_out);
+
+ if (semantic_idx_in == semantic_idx_out
+ && !strcmp(semantic_name_in, semantic_name_out))
+ {
+ shader_addline(buffer, "%s%s = OUT[%u]%s;\n",
+ destination, reg_mask, j, reg_mask);
+ found = TRUE;
+ }
+ }
+ if(!found) {
+ shader_addline(buffer, "%s%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n",
+ destination, reg_mask, reg_mask);
+ }
+ }
+ }
+
+ /* This is solely to make the compiler / linker happy and avoid warning about undefined
+ * varyings. It shouldn't result in any real code executed on the GPU, since all read
+ * input varyings are assigned above, if the optimizer works properly.
+ */
+ for(i = 0; i < in_count + 2; i++) {
+ if (set[i] && set[i] != WINED3DSP_WRITEMASK_ALL)
+ {
+ unsigned int size = 0;
+ memset(reg_mask, 0, sizeof(reg_mask));
+ if(!(set[i] & WINED3DSP_WRITEMASK_0)) {
+ reg_mask[size] = 'x';
+ size++;
+ }
+ if(!(set[i] & WINED3DSP_WRITEMASK_1)) {
+ reg_mask[size] = 'y';
+ size++;
+ }
+ if(!(set[i] & WINED3DSP_WRITEMASK_2)) {
+ reg_mask[size] = 'z';
+ size++;
+ }
+ if(!(set[i] & WINED3DSP_WRITEMASK_3)) {
+ reg_mask[size] = 'w';
+ size++;
+ }
+
+ if (i == in_count) {
+ sprintf(destination, "gl_FrontColor");
+ } else if (i == in_count + 1) {
+ sprintf(destination, "gl_FrontSecondaryColor");
+ } else {
+ sprintf(destination, "IN[%u]", i);
+ }
+
+ if (size == 1) {
+ shader_addline(buffer, "%s.%s = 0.0;\n", destination, reg_mask);
+ } else {
+ shader_addline(buffer, "%s.%s = vec%u(0.0);\n", destination, reg_mask, size);
+ }
+ }
+ }
+
+ HeapFree(GetProcessHeap(), 0, set);
+}
+
+static void generate_texcoord_assignment(struct wined3d_shader_buffer *buffer, IWineD3DVertexShaderImpl *vs, IWineD3DPixelShaderImpl *ps)
+{
+ DWORD map;
+ unsigned int i;
+ char reg_mask[6];
+
+ if (!ps)
+ return;
+
+ for (i = 0, map = ps->baseShader.reg_maps.texcoord; map && i < min(8, MAX_REG_TEXCRD); map >>= 1, ++i)
+ {
+ if (!(map & 1))
+ continue;
+
+ /* so far we assume that if texcoord_mask has any write flags, they are assigned appropriately with pixel shader */
+ if ((vs->baseShader.reg_maps.texcoord_mask[i]) & WINED3DSP_WRITEMASK_ALL)
+ continue;
+
+ shader_glsl_write_mask_to_str(WINED3DSP_WRITEMASK_ALL, reg_mask);
+ shader_addline(buffer, "gl_TexCoord[%u]%s = gl_MultiTexCoord%u%s;\n", i, reg_mask, i, reg_mask);
+ }
+}
+
+/* GL locking is done by the caller */
+static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer *buffer,
+ IWineD3DVertexShader *a_vertexshader, IWineD3DPixelShader *pixelshader, const struct wined3d_gl_info *gl_info)
+{
+ GLhandleARB ret = 0;
+ IWineD3DVertexShaderImpl *vs = (IWineD3DVertexShaderImpl *) a_vertexshader;
+ IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *) pixelshader;
+ IWineD3DDeviceImpl *device;
+ DWORD vs_major = vs->baseShader.reg_maps.shader_version.major;
+ DWORD ps_major = ps ? ps->baseShader.reg_maps.shader_version.major : 0;
+ unsigned int i;
+ const char *semantic_name;
+ UINT semantic_idx;
+ char reg_mask[6];
+ const struct wined3d_shader_signature_element *output_signature;
+
+ shader_buffer_clear(buffer);
+
+ shader_addline(buffer, "#version 120\n");
+
+ if(vs_major < 3 && ps_major < 3) {
+ /* That one is easy: The vertex shader writes to the builtin varyings, the pixel shader reads from them.
+ * Take care about the texcoord .w fixup though if we're using the fixed function fragment pipeline
+ */
+ device = (IWineD3DDeviceImpl *) vs->baseShader.device;
+ if ((gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W)
+ && ps_major == 0 && vs_major > 0 && !device->frag_pipe->ffp_proj_control)
+ {
+ shader_addline(buffer, "void order_ps_input() {\n");
+ for(i = 0; i < min(8, MAX_REG_TEXCRD); i++) {
+ if(vs->baseShader.reg_maps.texcoord_mask[i] != 0 &&
+ vs->baseShader.reg_maps.texcoord_mask[i] != WINED3DSP_WRITEMASK_ALL) {
+ shader_addline(buffer, "gl_TexCoord[%u].w = 1.0;\n", i);
+ }
+ }
+ shader_addline(buffer, "}\n");
+ } else {
+ shader_addline(buffer, "void order_ps_input() {\n");
+ generate_texcoord_assignment(buffer, vs, ps);
+ shader_addline(buffer, "}\n");
+ }
+ } else if(ps_major < 3 && vs_major >= 3) {
+ WORD map = vs->baseShader.reg_maps.output_registers;
+
+ /* The vertex shader writes to its own varyings, the pixel shader needs them in the builtin ones */
+ output_signature = vs->baseShader.output_signature;
+
+ shader_addline(buffer, "void order_ps_input(in vec4 OUT[%u]) {\n", MAX_REG_OUTPUT);
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ DWORD write_mask;
+
+ if (!(map & 1)) continue;
+
+ semantic_name = output_signature[i].semantic_name;
+ semantic_idx = output_signature[i].semantic_idx;
+ write_mask = output_signature[i].mask;
+ shader_glsl_write_mask_to_str(write_mask, reg_mask);
+
+ if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_COLOR))
+ {
+ if (semantic_idx == 0)
+ shader_addline(buffer, "gl_FrontColor%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ else if (semantic_idx == 1)
+ shader_addline(buffer, "gl_FrontSecondaryColor%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ }
+ else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_POSITION))
+ {
+ shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ }
+ else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_TEXCOORD))
+ {
+ if (semantic_idx < 8)
+ {
+ if (!(gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W) || ps_major > 0)
+ write_mask |= WINED3DSP_WRITEMASK_3;
+
+ shader_addline(buffer, "gl_TexCoord[%u]%s = OUT[%u]%s;\n",
+ semantic_idx, reg_mask, i, reg_mask);
+ if (!(write_mask & WINED3DSP_WRITEMASK_3))
+ shader_addline(buffer, "gl_TexCoord[%u].w = 1.0;\n", semantic_idx);
+ }
+ }
+ else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_PSIZE))
+ {
+ shader_addline(buffer, "gl_PointSize = OUT[%u].x;\n", i);
+ }
+ else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_FOG))
+ {
+ shader_addline(buffer, "gl_FogFragCoord = OUT[%u].%c;\n", i, reg_mask[1]);
+ }
+ }
+ shader_addline(buffer, "}\n");
+
+ } else if(ps_major >= 3 && vs_major >= 3) {
+ WORD map = vs->baseShader.reg_maps.output_registers;
+
+ output_signature = vs->baseShader.output_signature;
+
+ /* This one is tricky: a 3.0 pixel shader reads from a 3.0 vertex shader */
+ shader_addline(buffer, "varying vec4 IN[%u];\n", vec4_varyings(3, gl_info));
+ shader_addline(buffer, "void order_ps_input(in vec4 OUT[%u]) {\n", MAX_REG_OUTPUT);
+
+ /* First, sort out position and point size. Those are not passed to the pixel shader */
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ if (!(map & 1)) continue;
+
+ semantic_name = output_signature[i].semantic_name;
+ shader_glsl_write_mask_to_str(output_signature[i].mask, reg_mask);
+
+ if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_POSITION))
+ {
+ shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ }
+ else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_PSIZE))
+ {
+ shader_addline(buffer, "gl_PointSize = OUT[%u].x;\n", i);
+ }
+ }
+
+ /* Then, fix the pixel shader input */
+ handle_ps3_input(buffer, gl_info, ps->input_reg_map, ps->baseShader.input_signature,
+ &ps->baseShader.reg_maps, output_signature, &vs->baseShader.reg_maps);
+
+ shader_addline(buffer, "}\n");
+ } else if(ps_major >= 3 && vs_major < 3) {
+ shader_addline(buffer, "varying vec4 IN[%u];\n", vec4_varyings(3, gl_info));
+ shader_addline(buffer, "void order_ps_input() {\n");
+ /* The vertex shader wrote to the builtin varyings. There is no need to figure out position and
+ * point size, but we depend on the optimizers kindness to find out that the pixel shader doesn't
+ * read gl_TexCoord and gl_ColorX, otherwise we'll run out of varyings
+ */
+ handle_ps3_input(buffer, gl_info, ps->input_reg_map, ps->baseShader.input_signature,
+ &ps->baseShader.reg_maps, NULL, NULL);
+ shader_addline(buffer, "}\n");
+ } else {
+ ERR("Unexpected vertex and pixel shader version condition: vs: %d, ps: %d\n", vs_major, ps_major);
+ }
+
+ ret = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+ checkGLcall("glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB)");
+ GL_EXTCALL(glShaderSourceARB(ret, 1, (const char**)&buffer->buffer, NULL));
+ checkGLcall("glShaderSourceARB(ret, 1, &buffer->buffer, NULL)");
+ GL_EXTCALL(glCompileShaderARB(ret));
+ checkGLcall("glCompileShaderARB(ret)");
+ shader_glsl_validate_compile_link(gl_info, ret, FALSE);
+ return ret;
+}
+
+#ifdef VBOX_WITH_VMSVGA
+static GLhandleARB generate_passthrough_vshader(const struct wined3d_gl_info *gl_info)
+{
+ GLhandleARB ret = 0;
+ static const char *passthrough_vshader[] =
+ {
+ "#version 120\n"
+ "vec4 R0;\n"
+ "void main(void)\n"
+ "{\n"
+ " R0 = gl_Vertex;\n"
+ " R0.w = 1.0;\n"
+ " R0.z = 0.0;\n"
+ " gl_Position = gl_ModelViewProjectionMatrix * R0;\n"
+ "}\n"
+ };
+
+ ret = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+ checkGLcall("glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB)");
+ GL_EXTCALL(glShaderSourceARB(ret, 1, passthrough_vshader, NULL));
+ checkGLcall("glShaderSourceARB(ret, 1, passthrough_vshader, NULL)");
+ GL_EXTCALL(glCompileShaderARB(ret));
+ checkGLcall("glCompileShaderARB(ret)");
+ shader_glsl_validate_compile_link(gl_info, ret, FALSE);
+
+ return ret;
+}
+
+#endif
+
+/* GL locking is done by the caller */
+static void hardcode_local_constants(IWineD3DBaseShaderImpl *shader, const struct wined3d_gl_info *gl_info,
+ GLhandleARB programId, char prefix)
+{
+ const local_constant *lconst;
+ GLint tmp_loc;
+ const float *value;
+ char glsl_name[8];
+
+ LIST_FOR_EACH_ENTRY(lconst, &shader->baseShader.constantsF, local_constant, entry) {
+ value = (const float *)lconst->value;
+ snprintf(glsl_name, sizeof(glsl_name), "%cLC%u", prefix, lconst->idx);
+ tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+ GL_EXTCALL(glUniform4fvARB(tmp_loc, 1, value));
+ }
+ checkGLcall("Hardcoding local constants");
+}
+
+/* GL locking is done by the caller */
+#ifdef VBOX_WITH_VMSVGA
+static GLhandleARB shader_glsl_generate_pshader(const struct wined3d_context *context,
+#else
+static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context,
+#endif
+ struct wined3d_shader_buffer *buffer, IWineD3DPixelShaderImpl *This,
+ const struct ps_compile_args *args, struct ps_np2fixup_info *np2fixup_info)
+{
+ const struct shader_reg_maps *reg_maps = &This->baseShader.reg_maps;
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ CONST DWORD *function = This->baseShader.function;
+ struct shader_glsl_ctx_priv priv_ctx;
+
+ /* Create the hw GLSL shader object and assign it as the shader->prgId */
+ GLhandleARB shader_obj = GL_EXTCALL(glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB));
+
+ memset(&priv_ctx, 0, sizeof(priv_ctx));
+ priv_ctx.cur_ps_args = args;
+ priv_ctx.cur_np2fixup_info = np2fixup_info;
+
+ shader_addline(buffer, "#version 120\n");
+
+ if (gl_info->supported[ARB_SHADER_TEXTURE_LOD] && reg_maps->usestexldd)
+ {
+ shader_addline(buffer, "#extension GL_ARB_shader_texture_lod : enable\n");
+ }
+ if (gl_info->supported[ARB_TEXTURE_RECTANGLE])
+ {
+ /* The spec says that it doesn't have to be explicitly enabled, but the nvidia
+ * drivers write a warning if we don't do so
+ */
+ shader_addline(buffer, "#extension GL_ARB_texture_rectangle : enable\n");
+ }
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ {
+ shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
+ }
+
+ /* Base Declarations */
+ shader_generate_glsl_declarations(context, buffer, (IWineD3DBaseShader *)This, reg_maps, &priv_ctx);
+
+ /* Pack 3.0 inputs */
+ if (reg_maps->shader_version.major >= 3 && args->vp_mode != vertexshader)
+ {
+ shader_glsl_input_pack((IWineD3DPixelShader *) This, buffer,
+ This->baseShader.input_signature, reg_maps, args->vp_mode);
+ }
+
+ /* Base Shader Body */
+ shader_generate_main((IWineD3DBaseShader *)This, buffer, reg_maps, function, &priv_ctx);
+
+ /* Pixel shaders < 2.0 place the resulting color in R0 implicitly */
+ if (reg_maps->shader_version.major < 2)
+ {
+ /* Some older cards like GeforceFX ones don't support multiple buffers, so also not gl_FragData */
+ shader_addline(buffer, "gl_FragData[0] = R0;\n");
+ }
+
+ if (args->srgb_correction)
+ {
+ shader_addline(buffer, "tmp0.xyz = pow(gl_FragData[0].xyz, vec3(srgb_const0.x));\n");
+ shader_addline(buffer, "tmp0.xyz = tmp0.xyz * vec3(srgb_const0.y) - vec3(srgb_const0.z);\n");
+ shader_addline(buffer, "tmp1.xyz = gl_FragData[0].xyz * vec3(srgb_const0.w);\n");
+ shader_addline(buffer, "bvec3 srgb_compare = lessThan(gl_FragData[0].xyz, vec3(srgb_const1.x));\n");
+ shader_addline(buffer, "gl_FragData[0].xyz = mix(tmp0.xyz, tmp1.xyz, vec3(srgb_compare));\n");
+ shader_addline(buffer, "gl_FragData[0] = clamp(gl_FragData[0], 0.0, 1.0);\n");
+ }
+ /* Pixel shader < 3.0 do not replace the fog stage.
+ * This implements linear fog computation and blending.
+ * TODO: non linear fog
+ * NOTE: gl_Fog.start and gl_Fog.end don't hold fog start s and end e but
+ * -1/(e-s) and e/(e-s) respectively.
+ */
+ if (reg_maps->shader_version.major < 3)
+ {
+ switch(args->fog) {
+ case FOG_OFF: break;
+ case FOG_LINEAR:
+ shader_addline(buffer, "float fogstart = -1.0 / (gl_Fog.end - gl_Fog.start);\n");
+ shader_addline(buffer, "float fogend = gl_Fog.end * -fogstart;\n");
+ shader_addline(buffer, "float Fog = clamp(gl_FogFragCoord * fogstart + fogend, 0.0, 1.0);\n");
+ shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n");
+ break;
+ case FOG_EXP:
+ /* Fog = e^(-gl_Fog.density * gl_FogFragCoord) */
+ shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_FogFragCoord);\n");
+ shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);\n");
+ shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n");
+ break;
+ case FOG_EXP2:
+ /* Fog = e^(-(gl_Fog.density * gl_FogFragCoord)^2) */
+ shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord);\n");
+ shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);\n");
+ shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n");
+ break;
+ }
+ }
+
+ shader_addline(buffer, "}\n");
+
+ TRACE("Compiling shader object %p\n", (void *)(uintptr_t)shader_obj);
+ GL_EXTCALL(glShaderSourceARB(shader_obj, 1, (const char**)&buffer->buffer, NULL));
+ GL_EXTCALL(glCompileShaderARB(shader_obj));
+ shader_glsl_validate_compile_link(gl_info, shader_obj, FALSE);
+
+ /* Store the shader object */
+ return shader_obj;
+}
+
+/* GL locking is done by the caller */
+#ifdef VBOX_WITH_VMSVGA
+static GLhandleARB shader_glsl_generate_vshader(const struct wined3d_context *context,
+#else
+static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context,
+#endif
+ struct wined3d_shader_buffer *buffer, IWineD3DVertexShaderImpl *This,
+ const struct vs_compile_args *args)
+{
+ const struct shader_reg_maps *reg_maps = &This->baseShader.reg_maps;
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ CONST DWORD *function = This->baseShader.function;
+ struct shader_glsl_ctx_priv priv_ctx;
+
+ /* Create the hw GLSL shader program and assign it as the shader->prgId */
+ GLhandleARB shader_obj = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+
+ shader_addline(buffer, "#version 120\n");
+
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ {
+ shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
+ }
+
+ memset(&priv_ctx, 0, sizeof(priv_ctx));
+ priv_ctx.cur_vs_args = args;
+
+ /* Base Declarations */
+ shader_generate_glsl_declarations(context, buffer, (IWineD3DBaseShader *)This, reg_maps, &priv_ctx);
+
+ /* Base Shader Body */
+ shader_generate_main((IWineD3DBaseShader*)This, buffer, reg_maps, function, &priv_ctx);
+
+ /* Unpack 3.0 outputs */
+ if (reg_maps->shader_version.major >= 3) shader_addline(buffer, "order_ps_input(OUT);\n");
+ else shader_addline(buffer, "order_ps_input();\n");
+
+ /* The D3DRS_FOGTABLEMODE render state defines if the shader-generated fog coord is used
+ * or if the fragment depth is used. If the fragment depth is used(FOGTABLEMODE != NONE),
+ * the fog frag coord is thrown away. If the fog frag coord is used, but not written by
+ * the shader, it is set to 0.0(fully fogged, since start = 1.0, end = 0.0)
+ */
+ if(args->fog_src == VS_FOG_Z) {
+ shader_addline(buffer, "gl_FogFragCoord = gl_Position.z;\n");
+ } else if (!reg_maps->fog) {
+ shader_addline(buffer, "gl_FogFragCoord = 0.0;\n");
+ }
+
+ /* Write the final position.
+ *
+ * OpenGL coordinates specify the center of the pixel while d3d coords specify
+ * the corner. The offsets are stored in z and w in posFixup. posFixup.y contains
+ * 1.0 or -1.0 to turn the rendering upside down for offscreen rendering. PosFixup.x
+ * contains 1.0 to allow a mad.
+ */
+ shader_addline(buffer, "gl_Position.y = gl_Position.y * posFixup.y;\n");
+ shader_addline(buffer, "gl_Position.xy += posFixup.zw * gl_Position.ww;\n");
+ if(args->clip_enabled) {
+ shader_addline(buffer, "gl_ClipVertex = gl_Position;\n");
+ }
+
+ /* Z coord [0;1]->[-1;1] mapping, see comment in transform_projection in state.c
+ *
+ * Basically we want (in homogeneous coordinates) z = z * 2 - 1. However, shaders are run
+ * before the homogeneous divide, so we have to take the w into account: z = ((z / w) * 2 - 1) * w,
+ * which is the same as z = z * 2 - w.
+ */
+ shader_addline(buffer, "gl_Position.z = gl_Position.z * 2.0 - gl_Position.w;\n");
+
+ shader_addline(buffer, "}\n");
+
+ TRACE("Compiling shader object %p\n", (void *)(uintptr_t)shader_obj);
+ GL_EXTCALL(glShaderSourceARB(shader_obj, 1, (const char**)&buffer->buffer, NULL));
+ GL_EXTCALL(glCompileShaderARB(shader_obj));
+ shader_glsl_validate_compile_link(gl_info, shader_obj, FALSE);
+
+ return shader_obj;
+}
+
+static GLhandleARB find_glsl_pshader(const struct wined3d_context *context,
+ struct wined3d_shader_buffer *buffer, IWineD3DPixelShaderImpl *shader,
+ const struct ps_compile_args *args,
+ UINT *inp2fixup_info
+ )
+{
+ UINT i;
+ DWORD new_size;
+ struct glsl_ps_compiled_shader *new_array;
+ struct glsl_pshader_private *shader_data;
+ struct ps_np2fixup_info *np2fixup = NULL;
+ GLhandleARB ret;
+
+ if (!shader->baseShader.backend_data)
+ {
+ shader->baseShader.backend_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data));
+ if (!shader->baseShader.backend_data)
+ {
+ ERR("Failed to allocate backend data.\n");
+ return 0;
+ }
+ }
+ shader_data = shader->baseShader.backend_data;
+
+ /* Usually we have very few GL shaders for each d3d shader(just 1 or maybe 2),
+ * so a linear search is more performant than a hashmap or a binary search
+ * (cache coherency etc)
+ */
+ for(i = 0; i < shader_data->num_gl_shaders; i++) {
+ if(shader_data->gl_shaders[i].context==context
+ && memcmp(&shader_data->gl_shaders[i].args, args, sizeof(*args)) == 0) {
+ if(args->np2_fixup) {
+ *inp2fixup_info = i;
+ }
+ return shader_data->gl_shaders[i].prgId;
+ }
+ }
+
+ TRACE("No matching GL shader found for shader %p, compiling a new shader.\n", shader);
+ if(shader_data->shader_array_size == shader_data->num_gl_shaders) {
+ if (shader_data->num_gl_shaders)
+ {
+ new_size = shader_data->shader_array_size + max(1, shader_data->shader_array_size / 2);
+ new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders,
+ new_size * sizeof(*shader_data->gl_shaders));
+ } else {
+ new_array = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data->gl_shaders));
+ new_size = 1;
+ }
+
+ if(!new_array) {
+ ERR("Out of memory\n");
+ return 0;
+ }
+ shader_data->gl_shaders = new_array;
+ shader_data->shader_array_size = new_size;
+ }
+
+ shader_data->gl_shaders[shader_data->num_gl_shaders].context = context;
+ shader_data->gl_shaders[shader_data->num_gl_shaders].args = *args;
+
+ memset(&shader_data->gl_shaders[shader_data->num_gl_shaders].np2fixup, 0, sizeof(struct ps_np2fixup_info));
+ if (args->np2_fixup) np2fixup = &shader_data->gl_shaders[shader_data->num_gl_shaders].np2fixup;
+
+ pixelshader_update_samplers(&shader->baseShader.reg_maps,
+ ((IWineD3DDeviceImpl *)shader->baseShader.device)->stateBlock->textures);
+
+ shader_buffer_clear(buffer);
+ ret = shader_glsl_generate_pshader(context, buffer, shader, args, np2fixup);
+ *inp2fixup_info = shader_data->num_gl_shaders;
+ shader_data->gl_shaders[shader_data->num_gl_shaders++].prgId = ret;
+
+ return ret;
+}
+
+static inline BOOL vs_args_equal(const struct vs_compile_args *stored, const struct vs_compile_args *new,
+ const DWORD use_map) {
+ if((stored->swizzle_map & use_map) != new->swizzle_map) return FALSE;
+ if((stored->clip_enabled) != new->clip_enabled) return FALSE;
+ return stored->fog_src == new->fog_src;
+}
+
+static GLhandleARB find_glsl_vshader(const struct wined3d_context *context,
+ struct wined3d_shader_buffer *buffer, IWineD3DVertexShaderImpl *shader,
+ const struct vs_compile_args *args)
+{
+ UINT i;
+ DWORD new_size;
+ struct glsl_vs_compiled_shader *new_array;
+ DWORD use_map = ((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.use_map;
+ struct glsl_vshader_private *shader_data;
+ GLhandleARB ret;
+
+ if (!shader->baseShader.backend_data)
+ {
+ shader->baseShader.backend_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data));
+ if (!shader->baseShader.backend_data)
+ {
+ ERR("Failed to allocate backend data.\n");
+ return 0;
+ }
+ }
+ shader_data = shader->baseShader.backend_data;
+
+ /* Usually we have very few GL shaders for each d3d shader(just 1 or maybe 2),
+ * so a linear search is more performant than a hashmap or a binary search
+ * (cache coherency etc)
+ */
+ for(i = 0; i < shader_data->num_gl_shaders; i++) {
+ if(shader_data->gl_shaders[i].context==context
+ && vs_args_equal(&shader_data->gl_shaders[i].args, args, use_map)) {
+ return shader_data->gl_shaders[i].prgId;
+ }
+ }
+
+ TRACE("No matching GL shader found for shader %p, compiling a new shader.\n", shader);
+
+ if(shader_data->shader_array_size == shader_data->num_gl_shaders) {
+ if (shader_data->num_gl_shaders)
+ {
+ new_size = shader_data->shader_array_size + max(1, shader_data->shader_array_size / 2);
+ new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders,
+ new_size * sizeof(*shader_data->gl_shaders));
+ } else {
+ new_array = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data->gl_shaders));
+ new_size = 1;
+ }
+
+ if(!new_array) {
+ ERR("Out of memory\n");
+ return 0;
+ }
+ shader_data->gl_shaders = new_array;
+ shader_data->shader_array_size = new_size;
+ }
+
+ shader_data->gl_shaders[shader_data->num_gl_shaders].context = context;
+ shader_data->gl_shaders[shader_data->num_gl_shaders].args = *args;
+
+ shader_buffer_clear(buffer);
+ ret = shader_glsl_generate_vshader(context, buffer, shader, args);
+ shader_data->gl_shaders[shader_data->num_gl_shaders++].prgId = ret;
+
+ return ret;
+}
+
+/** Sets the GLSL program ID for the given pixel and vertex shader combination.
+ * It sets the programId on the current StateBlock (because it should be called
+ * inside of the DrawPrimitive() part of the render loop).
+ *
+ * If a program for the given combination does not exist, create one, and store
+ * the program in the hash table. If it creates a program, it will link the
+ * given objects, too.
+ */
+
+/* GL locking is done by the caller */
+static void set_glsl_shader_program(const struct wined3d_context *context,
+ IWineD3DDeviceImpl *device, BOOL a_use_ps, BOOL a_use_vs)
+{
+ IWineD3DVertexShader *vshader = a_use_vs ? device->stateBlock->vertexShader : NULL;
+ IWineD3DPixelShader *pshader = a_use_ps ? device->stateBlock->pixelShader : NULL;
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ struct shader_glsl_priv *priv = device->shader_priv;
+ struct glsl_shader_prog_link *entry = NULL;
+ GLhandleARB programId = 0;
+ GLhandleARB reorder_shader_id = 0;
+ unsigned int i;
+ char glsl_name[8];
+ struct ps_compile_args ps_compile_args;
+ struct vs_compile_args vs_compile_args;
+
+ if (vshader) find_vs_compile_args((IWineD3DVertexShaderImpl *)vshader, device->stateBlock, &vs_compile_args);
+ if (pshader) find_ps_compile_args((IWineD3DPixelShaderImpl *)pshader, device->stateBlock, &ps_compile_args);
+
+ entry = get_glsl_program_entry(priv, vshader, pshader, &vs_compile_args, &ps_compile_args, context);
+ if (entry) {
+ priv->glsl_program = entry;
+ return;
+ }
+
+ /* If we get to this point, then no matching program exists, so we create one */
+ programId = GL_EXTCALL(glCreateProgramObjectARB());
+ TRACE("Created new GLSL shader program %p\n", (void *)(uintptr_t)programId);
+
+ /* Create the entry */
+ entry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct glsl_shader_prog_link));
+ entry->context = context;
+ entry->programId = programId;
+ entry->vshader = vshader;
+ entry->pshader = pshader;
+ entry->vs_args = vs_compile_args;
+ entry->ps_args = ps_compile_args;
+ entry->constant_version = 0;
+ WINEFIXUPINFO_INIT(entry);
+ /* Add the hash table entry */
+ add_glsl_program_entry(priv, entry);
+
+ /* Set the current program */
+ priv->glsl_program = entry;
+
+ /* Attach GLSL vshader */
+ if (vshader)
+ {
+ GLhandleARB vshader_id = find_glsl_vshader(context, &priv->shader_buffer,
+ (IWineD3DVertexShaderImpl *)vshader, &vs_compile_args);
+ WORD map = ((IWineD3DBaseShaderImpl *)vshader)->baseShader.reg_maps.input_registers;
+ char tmp_name[10];
+
+ reorder_shader_id = generate_param_reorder_function(&priv->shader_buffer, vshader, pshader, gl_info);
+ TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)reorder_shader_id, (void *)(uintptr_t)programId);
+ GL_EXTCALL(glAttachObjectARB(programId, reorder_shader_id));
+ checkGLcall("glAttachObjectARB");
+ /* Flag the reorder function for deletion, then it will be freed automatically when the program
+ * is destroyed
+ */
+ GL_EXTCALL(glDeleteObjectARB(reorder_shader_id));
+
+ TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)vshader_id, (void *)(uintptr_t)programId);
+ GL_EXTCALL(glAttachObjectARB(programId, vshader_id));
+ checkGLcall("glAttachObjectARB");
+
+ /* Bind vertex attributes to a corresponding index number to match
+ * the same index numbers as ARB_vertex_programs (makes loading
+ * vertex attributes simpler). With this method, we can use the
+ * exact same code to load the attributes later for both ARB and
+ * GLSL shaders.
+ *
+ * We have to do this here because we need to know the Program ID
+ * in order to make the bindings work, and it has to be done prior
+ * to linking the GLSL program. */
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ if (!(map & 1)) continue;
+
+ snprintf(tmp_name, sizeof(tmp_name), "attrib%u", i);
+ GL_EXTCALL(glBindAttribLocationARB(programId, i, tmp_name));
+ }
+ checkGLcall("glBindAttribLocationARB");
+
+ list_add_head(&((IWineD3DBaseShaderImpl *)vshader)->baseShader.linked_programs, &entry->vshader_entry);
+ }
+#ifdef VBOX_WITH_VMSVGA
+ else
+ if (device->strided_streams.position_transformed)
+ {
+ GLhandleARB passthrough_vshader_id;
+
+ passthrough_vshader_id = generate_passthrough_vshader(gl_info);
+ TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)passthrough_vshader_id, (void *)(uintptr_t)programId);
+ GL_EXTCALL(glAttachObjectARB(programId, passthrough_vshader_id));
+ checkGLcall("glAttachObjectARB");
+ /* Flag the reorder function for deletion, then it will be freed automatically when the program
+ * is destroyed
+ */
+ GL_EXTCALL(glDeleteObjectARB(passthrough_vshader_id));
+ }
+#endif
+
+
+ /* Attach GLSL pshader */
+ if (pshader)
+ {
+ GLhandleARB pshader_id = find_glsl_pshader(context, &priv->shader_buffer,
+ (IWineD3DPixelShaderImpl *)pshader, &ps_compile_args,
+ &entry->inp2Fixup_info
+ );
+ TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)pshader_id, (void *)(uintptr_t)programId);
+ GL_EXTCALL(glAttachObjectARB(programId, pshader_id));
+ checkGLcall("glAttachObjectARB");
+
+ list_add_head(&((IWineD3DBaseShaderImpl *)pshader)->baseShader.linked_programs, &entry->pshader_entry);
+ }
+
+ /* Link the program */
+ TRACE("Linking GLSL shader program %p\n", (void *)(uintptr_t)programId);
+ GL_EXTCALL(glLinkProgramARB(programId));
+ shader_glsl_validate_compile_link(gl_info, programId, TRUE);
+
+ entry->vuniformF_locations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(GLhandleARB) * gl_info->limits.glsl_vs_float_constants);
+ for (i = 0; i < gl_info->limits.glsl_vs_float_constants; ++i)
+ {
+ snprintf(glsl_name, sizeof(glsl_name), "VC[%i]", i);
+ entry->vuniformF_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+ }
+ for (i = 0; i < MAX_CONST_I; ++i)
+ {
+ snprintf(glsl_name, sizeof(glsl_name), "VI[%i]", i);
+ entry->vuniformI_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+ }
+ entry->puniformF_locations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(GLhandleARB) * gl_info->limits.glsl_ps_float_constants);
+ for (i = 0; i < gl_info->limits.glsl_ps_float_constants; ++i)
+ {
+ snprintf(glsl_name, sizeof(glsl_name), "PC[%i]", i);
+ entry->puniformF_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+ }
+ for (i = 0; i < MAX_CONST_I; ++i)
+ {
+ snprintf(glsl_name, sizeof(glsl_name), "PI[%i]", i);
+ entry->puniformI_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name));
+ }
+
+ if(pshader) {
+ char name[32];
+
+ for(i = 0; i < MAX_TEXTURES; i++) {
+ sprintf(name, "bumpenvmat%u", i);
+ entry->bumpenvmat_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name));
+ sprintf(name, "luminancescale%u", i);
+ entry->luminancescale_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name));
+ sprintf(name, "luminanceoffset%u", i);
+ entry->luminanceoffset_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name));
+ }
+
+ if (ps_compile_args.np2_fixup) {
+ if (WINEFIXUPINFO_ISVALID(entry)) {
+ entry->np2Fixup_location = GL_EXTCALL(glGetUniformLocationARB(programId, "PsamplerNP2Fixup"));
+ } else {
+ FIXME("NP2 texcoord fixup needed for this pixelshader, but no fixup uniform found.\n");
+ }
+ }
+ }
+
+ entry->posFixup_location = GL_EXTCALL(glGetUniformLocationARB(programId, "posFixup"));
+ entry->ycorrection_location = GL_EXTCALL(glGetUniformLocationARB(programId, "ycorrection"));
+ checkGLcall("Find glsl program uniform locations");
+
+ if (pshader
+ && ((IWineD3DPixelShaderImpl *)pshader)->baseShader.reg_maps.shader_version.major >= 3
+ && ((IWineD3DPixelShaderImpl *)pshader)->declared_in_count > vec4_varyings(3, gl_info))
+ {
+ TRACE("Shader %p needs vertex color clamping disabled\n", (void *)(uintptr_t)programId);
+ entry->vertex_color_clamp = GL_FALSE;
+ } else {
+ entry->vertex_color_clamp = GL_FIXED_ONLY_ARB;
+ }
+
+ /* Set the shader to allow uniform loading on it */
+ GL_EXTCALL(glUseProgramObjectARB(programId));
+ checkGLcall("glUseProgramObjectARB(programId)");
+
+#ifdef DEBUG_misha
+ {
+ GLint programIdTest = -1;
+ glGetIntegerv(GL_CURRENT_PROGRAM, &programIdTest);
+ Assert(programIdTest == programId);
+ }
+#endif
+
+ /* Load the vertex and pixel samplers now. The function that finds the mappings makes sure
+ * that it stays the same for each vertexshader-pixelshader pair(=linked glsl program). If
+ * a pshader with fixed function pipeline is used there are no vertex samplers, and if a
+ * vertex shader with fixed function pixel processing is used we make sure that the card
+ * supports enough samplers to allow the max number of vertex samplers with all possible
+ * fixed function fragment processing setups. So once the program is linked these samplers
+ * won't change.
+ */
+ if (vshader) shader_glsl_load_vsamplers(gl_info, device->texUnitMap, programId);
+ if (pshader) shader_glsl_load_psamplers(gl_info, device->texUnitMap, programId);
+
+ /* If the local constants do not have to be loaded with the environment constants,
+ * load them now to have them hardcoded in the GLSL program. This saves some CPU cycles
+ * later
+ */
+ if (pshader && !((IWineD3DBaseShaderImpl *)pshader)->baseShader.load_local_constsF)
+ {
+ hardcode_local_constants((IWineD3DBaseShaderImpl *) pshader, gl_info, programId, 'P');
+ }
+ if (vshader && !((IWineD3DBaseShaderImpl *)vshader)->baseShader.load_local_constsF)
+ {
+ hardcode_local_constants((IWineD3DBaseShaderImpl *) vshader, gl_info, programId, 'V');
+ }
+}
+
+/* GL locking is done by the caller */
+static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info, enum tex_types tex_type)
+{
+ GLhandleARB program_id;
+ GLhandleARB vshader_id, pshader_id;
+ static const char *blt_vshader[] =
+ {
+ "#version 120\n"
+ "void main(void)\n"
+ "{\n"
+ " gl_Position = gl_Vertex;\n"
+ " gl_FrontColor = vec4(1.0);\n"
+ " gl_TexCoord[0] = gl_MultiTexCoord0;\n"
+ "}\n"
+ };
+
+ static const char *blt_pshaders[tex_type_count] =
+ {
+ /* tex_1d */
+ NULL,
+ /* tex_2d */
+ "#version 120\n"
+ "uniform sampler2D sampler;\n"
+ "void main(void)\n"
+ "{\n"
+ " gl_FragDepth = texture2D(sampler, gl_TexCoord[0].xy).x;\n"
+ "}\n",
+ /* tex_3d */
+ NULL,
+ /* tex_cube */
+ "#version 120\n"
+ "uniform samplerCube sampler;\n"
+ "void main(void)\n"
+ "{\n"
+ " gl_FragDepth = textureCube(sampler, gl_TexCoord[0].xyz).x;\n"
+ "}\n",
+ /* tex_rect */
+ "#version 120\n"
+ "#extension GL_ARB_texture_rectangle : enable\n"
+ "uniform sampler2DRect sampler;\n"
+ "void main(void)\n"
+ "{\n"
+ " gl_FragDepth = texture2DRect(sampler, gl_TexCoord[0].xy).x;\n"
+ "}\n",
+ };
+
+ if (!blt_pshaders[tex_type])
+ {
+ FIXME("tex_type %#x not supported\n", tex_type);
+ tex_type = tex_2d;
+ }
+
+ vshader_id = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+ GL_EXTCALL(glShaderSourceARB(vshader_id, 1, blt_vshader, NULL));
+ GL_EXTCALL(glCompileShaderARB(vshader_id));
+ shader_glsl_validate_compile_link(gl_info, vshader_id, FALSE);
+
+ pshader_id = GL_EXTCALL(glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB));
+ GL_EXTCALL(glShaderSourceARB(pshader_id, 1, &blt_pshaders[tex_type], NULL));
+ GL_EXTCALL(glCompileShaderARB(pshader_id));
+
+ shader_glsl_validate_compile_link(gl_info, vshader_id, FALSE);
+
+ program_id = GL_EXTCALL(glCreateProgramObjectARB());
+ GL_EXTCALL(glAttachObjectARB(program_id, vshader_id));
+ GL_EXTCALL(glAttachObjectARB(program_id, pshader_id));
+ GL_EXTCALL(glLinkProgramARB(program_id));
+ shader_glsl_validate_compile_link(gl_info, program_id, TRUE);
+
+ /* Once linked we can mark the shaders for deletion. They will be deleted once the program
+ * is destroyed
+ */
+ GL_EXTCALL(glDeleteObjectARB(vshader_id));
+ GL_EXTCALL(glDeleteObjectARB(pshader_id));
+ return program_id;
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS)
+{
+ const struct wined3d_gl_info *gl_info = context->gl_info;
+ IWineD3DDeviceImpl *device = context_get_device(context);
+ struct shader_glsl_priv *priv = device->shader_priv;
+ GLhandleARB program_id = 0;
+ GLenum old_vertex_color_clamp, current_vertex_color_clamp;
+
+ old_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vertex_color_clamp : GL_FIXED_ONLY_ARB;
+
+ if (useVS || usePS) set_glsl_shader_program(context, device, usePS, useVS);
+ else priv->glsl_program = NULL;
+
+ current_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vertex_color_clamp : GL_FIXED_ONLY_ARB;
+
+ if (old_vertex_color_clamp != current_vertex_color_clamp)
+ {
+ if (gl_info->supported[ARB_COLOR_BUFFER_FLOAT])
+ {
+ GL_EXTCALL(glClampColorARB(GL_CLAMP_VERTEX_COLOR_ARB, current_vertex_color_clamp));
+ checkGLcall("glClampColorARB");
+ }
+ else
+ {
+ FIXME("vertex color clamp needs to be changed, but extension not supported.\n");
+ }
+ }
+
+ program_id = priv->glsl_program ? priv->glsl_program->programId : 0;
+ if (program_id) TRACE("Using GLSL program %p\n", (void *)(uintptr_t)program_id);
+ GL_EXTCALL(glUseProgramObjectARB(program_id));
+ checkGLcall("glUseProgramObjectARB");
+#ifdef DEBUG_misha
+ {
+ GLint programIdTest = -1;
+ glGetIntegerv(GL_CURRENT_PROGRAM, &programIdTest);
+ Assert(programIdTest == program_id);
+ }
+#endif
+
+ /* In case that NP2 texcoord fixup data is found for the selected program, trigger a reload of the
+ * constants. This has to be done because it can't be guaranteed that sampler() (from state.c) is
+ * called between selecting the shader and using it, which results in wrong fixup for some frames. */
+ if (priv->glsl_program && WINEFIXUPINFO_ISVALID(priv->glsl_program))
+ {
+ shader_glsl_load_np2fixup_constants((IWineD3DDevice *)device, usePS, useVS);
+ }
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_select_depth_blt(IWineD3DDevice *iface, enum tex_types tex_type) {
+ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+ struct shader_glsl_priv *priv = This->shader_priv;
+ GLhandleARB *blt_program = &priv->depth_blt_program[tex_type];
+
+ if (!*blt_program) {
+ GLint loc;
+ *blt_program = create_glsl_blt_shader(gl_info, tex_type);
+ loc = GL_EXTCALL(glGetUniformLocationARB(*blt_program, "sampler"));
+ GL_EXTCALL(glUseProgramObjectARB(*blt_program));
+#ifdef DEBUG_misha
+ {
+ GLint programIdTest = -1;
+ glGetIntegerv(GL_CURRENT_PROGRAM, &programIdTest);
+ Assert(programIdTest == *blt_program);
+ }
+#endif
+ GL_EXTCALL(glUniform1iARB(loc, 0));
+ } else {
+ GL_EXTCALL(glUseProgramObjectARB(*blt_program));
+#ifdef DEBUG_misha
+ {
+ GLint programIdTest = -1;
+ glGetIntegerv(GL_CURRENT_PROGRAM, &programIdTest);
+ Assert(programIdTest == *blt_program);
+ }
+#endif
+ }
+}
+
+/* GL locking is done by the caller */
+static void shader_glsl_deselect_depth_blt(IWineD3DDevice *iface) {
+ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+ struct shader_glsl_priv *priv = This->shader_priv;
+ GLhandleARB program_id;
+
+ program_id = priv->glsl_program ? priv->glsl_program->programId : 0;
+ if (program_id) TRACE("Using GLSL program %p\n", (void *)(uintptr_t)program_id);
+
+ GL_EXTCALL(glUseProgramObjectARB(program_id));
+ checkGLcall("glUseProgramObjectARB");
+#ifdef DEBUG_misha
+ {
+ GLint programIdTest = -1;
+ glGetIntegerv(GL_CURRENT_PROGRAM, &programIdTest);
+ Assert(programIdTest == program_id);
+ }
+#endif
+}
+
+static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
+ const struct list *linked_programs;
+ IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *) iface;
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)This->baseShader.device;
+ struct shader_glsl_priv *priv = device->shader_priv;
+ const struct wined3d_gl_info *gl_info;
+ struct wined3d_context *context;
+
+ /* Note: Do not use QueryInterface here to find out which shader type this is because this code
+ * can be called from IWineD3DBaseShader::Release
+ */
+ char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type);
+
+ if(pshader) {
+ struct glsl_pshader_private *shader_data;
+ shader_data = This->baseShader.backend_data;
+ if(!shader_data || shader_data->num_gl_shaders == 0)
+ {
+ HeapFree(GetProcessHeap(), 0, shader_data);
+ This->baseShader.backend_data = NULL;
+ return;
+ }
+
+ context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+ gl_info = context->gl_info;
+
+ if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->pshader == iface)
+ {
+ ENTER_GL();
+ shader_glsl_select(context, FALSE, FALSE);
+ LEAVE_GL();
+ }
+ } else {
+ struct glsl_vshader_private *shader_data;
+ shader_data = This->baseShader.backend_data;
+ if(!shader_data || shader_data->num_gl_shaders == 0)
+ {
+ HeapFree(GetProcessHeap(), 0, shader_data);
+ This->baseShader.backend_data = NULL;
+ return;
+ }
+
+ context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+ gl_info = context->gl_info;
+
+ if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->vshader == iface)
+ {
+ ENTER_GL();
+ shader_glsl_select(context, FALSE, FALSE);
+ LEAVE_GL();
+ }
+ }
+
+ linked_programs = &This->baseShader.linked_programs;
+
+ TRACE("Deleting linked programs\n");
+ if (linked_programs->next) {
+ struct glsl_shader_prog_link *entry, *entry2;
+
+ ENTER_GL();
+ if(pshader) {
+ LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, struct glsl_shader_prog_link, pshader_entry) {
+ delete_glsl_program_entry(priv, gl_info, entry);
+ }
+ } else {
+ LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, struct glsl_shader_prog_link, vshader_entry) {
+ delete_glsl_program_entry(priv, gl_info, entry);
+ }
+ }
+ LEAVE_GL();
+ }
+
+ if(pshader) {
+ UINT i;
+ struct glsl_pshader_private *shader_data = This->baseShader.backend_data;
+
+ ENTER_GL();
+ for(i = 0; i < shader_data->num_gl_shaders; i++) {
+ if (shader_data->gl_shaders[i].context==context_get_current())
+ {
+ TRACE("deleting pshader %p\n", (void *)(uintptr_t)shader_data->gl_shaders[i].prgId);
+ GL_EXTCALL(glDeleteObjectARB(shader_data->gl_shaders[i].prgId));
+ checkGLcall("glDeleteObjectARB");
+ }
+ else
+ {
+ WARN("Attempting to delete pshader %p created in ctx %p from ctx %p\n",
+ (void *)(uintptr_t)shader_data->gl_shaders[i].prgId, shader_data->gl_shaders[i].context, context_get_current());
+ }
+ }
+ LEAVE_GL();
+ HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
+ }
+ else
+ {
+ UINT i;
+ struct glsl_vshader_private *shader_data = This->baseShader.backend_data;
+
+ ENTER_GL();
+ for(i = 0; i < shader_data->num_gl_shaders; i++) {
+ if (shader_data->gl_shaders[i].context==context_get_current())
+ {
+ TRACE("deleting vshader %p\n", (void *)(uintptr_t)shader_data->gl_shaders[i].prgId);
+ GL_EXTCALL(glDeleteObjectARB(shader_data->gl_shaders[i].prgId));
+ checkGLcall("glDeleteObjectARB");
+ }
+ else
+ {
+ WARN("Attempting to delete vshader %p created in ctx %p from ctx %p\n",
+ (void *)(uintptr_t)shader_data->gl_shaders[i].prgId, shader_data->gl_shaders[i].context, context_get_current());
+ }
+ }
+ LEAVE_GL();
+ HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
+ }
+
+ HeapFree(GetProcessHeap(), 0, This->baseShader.backend_data);
+ This->baseShader.backend_data = NULL;
+
+ context_release(context);
+}
+
+static int glsl_program_key_compare(const void *key, const struct wine_rb_entry *entry)
+{
+ const glsl_program_key_t *k = key;
+ const struct glsl_shader_prog_link *prog = WINE_RB_ENTRY_VALUE(entry,
+ const struct glsl_shader_prog_link, program_lookup_entry);
+ int cmp;
+
+ if (k->context > prog->context) return 1;
+ else if (k->context < prog->context) return -1;
+
+ if (k->vshader > prog->vshader) return 1;
+ else if (k->vshader < prog->vshader) return -1;
+
+ if (k->pshader > prog->pshader) return 1;
+ else if (k->pshader < prog->pshader) return -1;
+
+ if (k->vshader && (cmp = memcmp(&k->vs_args, &prog->vs_args, sizeof(prog->vs_args)))) return cmp;
+ if (k->pshader && (cmp = memcmp(&k->ps_args, &prog->ps_args, sizeof(prog->ps_args)))) return cmp;
+
+ return 0;
+}
+
+static BOOL constant_heap_init(struct constant_heap *heap, unsigned int constant_count)
+{
+#ifndef VBOX
+ SIZE_T size = (constant_count + 1) * sizeof(*heap->entries) + constant_count * sizeof(*heap->positions);
+ void *mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
+#else
+ SIZE_T size;
+ void *mem;
+
+ /* Don't trash the heap if the input is bogus. */
+ if (constant_count == 0)
+ constant_count = 1;
+
+ size = (constant_count + 1) * sizeof(*heap->entries) + constant_count * sizeof(*heap->positions);
+ mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
+#endif
+
+ if (!mem)
+ {
+ ERR("Failed to allocate memory\n");
+ return FALSE;
+ }
+
+ heap->entries = mem;
+ heap->entries[1].version = 0;
+ heap->positions = (unsigned int *)(heap->entries + constant_count + 1);
+ heap->size = 1;
+
+ return TRUE;
+}
+
+static void constant_heap_free(struct constant_heap *heap)
+{
+ HeapFree(GetProcessHeap(), 0, heap->entries);
+}
+
+static const struct wine_rb_functions wined3d_glsl_program_rb_functions =
+{
+ wined3d_rb_alloc,
+ wined3d_rb_realloc,
+ wined3d_rb_free,
+ glsl_program_key_compare,
+};
+
+static HRESULT shader_glsl_alloc(IWineD3DDevice *iface) {
+ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+ struct shader_glsl_priv *priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct shader_glsl_priv));
+ SIZE_T stack_size = wined3d_log2i(max(gl_info->limits.glsl_vs_float_constants,
+ gl_info->limits.glsl_ps_float_constants)) + 1;
+
+ if (!shader_buffer_init(&priv->shader_buffer))
+ {
+ ERR("Failed to initialize shader buffer.\n");
+ goto fail;
+ }
+
+ priv->stack = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, stack_size * sizeof(*priv->stack));
+ if (!priv->stack)
+ {
+ ERR("Failed to allocate memory.\n");
+ goto fail;
+ }
+ if (!constant_heap_init(&priv->vconst_heap, gl_info->limits.glsl_vs_float_constants))
+ {
+ ERR("Failed to initialize vertex shader constant heap\n");
+ goto fail;
+ }
+ if (!constant_heap_init(&priv->pconst_heap, gl_info->limits.glsl_ps_float_constants))
+ {
+ ERR("Failed to initialize pixel shader constant heap\n");
+ goto fail;
+ }
+
+ if (wine_rb_init(&priv->program_lookup, &wined3d_glsl_program_rb_functions) == -1)
+ {
+ ERR("Failed to initialize rbtree.\n");
+ goto fail;
+ }
+
+ priv->next_constant_version = 1;
+
+ This->shader_priv = priv;
+ return WINED3D_OK;
+
+fail:
+ constant_heap_free(&priv->pconst_heap);
+ constant_heap_free(&priv->vconst_heap);
+ HeapFree(GetProcessHeap(), 0, priv->stack);
+ shader_buffer_free(&priv->shader_buffer);
+ HeapFree(GetProcessHeap(), 0, priv);
+ return E_OUTOFMEMORY;
+}
+
+/* Context activation is done by the caller. */
+static void shader_glsl_free(IWineD3DDevice *iface) {
+ IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
+ struct shader_glsl_priv *priv = This->shader_priv;
+ int i;
+
+ ENTER_GL();
+ for (i = 0; i < tex_type_count; ++i)
+ {
+ if (priv->depth_blt_program[i])
+ {
+ GL_EXTCALL(glDeleteObjectARB(priv->depth_blt_program[i]));
+ }
+ }
+ LEAVE_GL();
+
+ wine_rb_destroy(&priv->program_lookup, NULL, NULL);
+ constant_heap_free(&priv->pconst_heap);
+ constant_heap_free(&priv->vconst_heap);
+ HeapFree(GetProcessHeap(), 0, priv->stack);
+ shader_buffer_free(&priv->shader_buffer);
+
+ HeapFree(GetProcessHeap(), 0, This->shader_priv);
+ This->shader_priv = NULL;
+}
+
+static BOOL shader_glsl_dirty_const(IWineD3DDevice *iface) {
+ /* TODO: GL_EXT_bindable_uniform can be used to share constants across shaders */
+ return FALSE;
+}
+
+static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *pCaps)
+{
+ /* Nvidia Geforce6/7 or Ati R4xx/R5xx cards with GLSL support, support VS 3.0 but older Nvidia/Ati
+ * models with GLSL support only support 2.0. In case of nvidia we can detect VS 2.0 support based
+ * on the version of NV_vertex_program.
+ * For Ati cards there's no way using glsl (it abstracts the lowlevel info away) and also not
+ * using ARB_vertex_program. It is safe to assume that when a card supports pixel shader 2.0 it
+ * supports vertex shader 2.0 too and the way around. We can detect ps2.0 using the maximum number
+ * of native instructions, so use that here. For more info see the pixel shader versioning code below.
+ */
+ if ((gl_info->supported[NV_VERTEX_PROGRAM2] && !gl_info->supported[NV_VERTEX_PROGRAM3])
+ || gl_info->limits.arb_ps_instructions <= 512
+ || gl_info->limits.glsl_vs_float_constants < 256)
+ pCaps->VertexShaderVersion = WINED3DVS_VERSION(2,0);
+ else
+ pCaps->VertexShaderVersion = WINED3DVS_VERSION(3,0);
+ TRACE_(d3d_caps)("Hardware vertex shader version %d.%d enabled (GLSL)\n", (pCaps->VertexShaderVersion >> 8) & 0xff, pCaps->VertexShaderVersion & 0xff);
+ pCaps->MaxVertexShaderConst = gl_info->limits.glsl_vs_float_constants;
+
+ /* Older DX9-class videocards (GeforceFX / Radeon >9500/X*00) only support pixel shader 2.0/2.0a/2.0b.
+ * In OpenGL the extensions related to GLSL abstract lowlevel GL info away which is needed
+ * to distinguish between 2.0 and 3.0 (and 2.0a/2.0b). In case of Nvidia we use their fragment
+ * program extensions. On other hardware including ATI GL_ARB_fragment_program offers the info
+ * in max native instructions. Intel and others also offer the info in this extension but they
+ * don't support GLSL (at least on Windows).
+ *
+ * PS2.0 requires at least 96 instructions, 2.0a/2.0b go up to 512. Assume that if the number
+ * of instructions is 512 or less we have to do with ps2.0 hardware.
+ * NOTE: ps3.0 hardware requires 512 or more instructions but ati and nvidia offer 'enough' (1024 vs 4096) on their most basic ps3.0 hardware.
+ */
+ if ((gl_info->supported[NV_FRAGMENT_PROGRAM] && !gl_info->supported[NV_FRAGMENT_PROGRAM2])
+ || gl_info->limits.arb_ps_instructions <= 512
+ || gl_info->limits.glsl_vs_float_constants < 256)
+ pCaps->PixelShaderVersion = WINED3DPS_VERSION(2,0);
+ else
+ pCaps->PixelShaderVersion = WINED3DPS_VERSION(3,0);
+
+ pCaps->MaxPixelShaderConst = gl_info->limits.glsl_ps_float_constants;
+
+ /* FIXME: The following line is card dependent. -8.0 to 8.0 is the
+ * Direct3D minimum requirement.
+ *
+ * Both GL_ARB_fragment_program and GLSL require a "maximum representable magnitude"
+ * of colors to be 2^10, and 2^32 for other floats. Should we use 1024 here?
+ *
+ * The problem is that the refrast clamps temporary results in the shader to
+ * [-MaxValue;+MaxValue]. If the card's max value is bigger than the one we advertize here,
+ * then applications may miss the clamping behavior. On the other hand, if it is smaller,
+ * the shader will generate incorrect results too. Unfortunately, GL deliberately doesn't
+ * offer a way to query this.
+ */
+ pCaps->PixelShader1xMaxValue = 8.0;
+ TRACE_(d3d_caps)("Hardware pixel shader version %d.%d enabled (GLSL)\n", (pCaps->PixelShaderVersion >> 8) & 0xff, pCaps->PixelShaderVersion & 0xff);
+
+ pCaps->VSClipping = TRUE;
+}
+
+static BOOL shader_glsl_color_fixup_supported(struct color_fixup_desc fixup)
+{
+ if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
+ {
+ TRACE("Checking support for fixup:\n");
+ dump_color_fixup_desc(fixup);
+ }
+
+ /* We support everything except YUV conversions. */
+ if (!is_complex_fixup(fixup))
+ {
+ TRACE("[OK]\n");
+ return TRUE;
+ }
+
+ TRACE("[FAILED]\n");
+ return FALSE;
+}
+
+static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TABLE_SIZE] =
+{
+ /* WINED3DSIH_ABS */ shader_glsl_map2gl,
+ /* WINED3DSIH_ADD */ shader_glsl_arith,
+ /* WINED3DSIH_BEM */ shader_glsl_bem,
+ /* WINED3DSIH_BREAK */ shader_glsl_break,
+ /* WINED3DSIH_BREAKC */ shader_glsl_breakc,
+ /* WINED3DSIH_BREAKP */ NULL,
+ /* WINED3DSIH_CALL */ shader_glsl_call,
+ /* WINED3DSIH_CALLNZ */ shader_glsl_callnz,
+ /* WINED3DSIH_CMP */ shader_glsl_cmp,
+ /* WINED3DSIH_CND */ shader_glsl_cnd,
+ /* WINED3DSIH_CRS */ shader_glsl_cross,
+ /* WINED3DSIH_CUT */ NULL,
+ /* WINED3DSIH_DCL */ NULL,
+ /* WINED3DSIH_DEF */ NULL,
+ /* WINED3DSIH_DEFB */ NULL,
+ /* WINED3DSIH_DEFI */ NULL,
+ /* WINED3DSIH_DP2ADD */ shader_glsl_dp2add,
+ /* WINED3DSIH_DP3 */ shader_glsl_dot,
+ /* WINED3DSIH_DP4 */ shader_glsl_dot,
+ /* WINED3DSIH_DST */ shader_glsl_dst,
+ /* WINED3DSIH_DSX */ shader_glsl_map2gl,
+ /* WINED3DSIH_DSY */ shader_glsl_map2gl,
+ /* WINED3DSIH_ELSE */ shader_glsl_else,
+ /* WINED3DSIH_EMIT */ NULL,
+ /* WINED3DSIH_ENDIF */ shader_glsl_end,
+ /* WINED3DSIH_ENDLOOP */ shader_glsl_end,
+ /* WINED3DSIH_ENDREP */ shader_glsl_end,
+ /* WINED3DSIH_EXP */ shader_glsl_map2gl,
+ /* WINED3DSIH_EXPP */ shader_glsl_expp,
+ /* WINED3DSIH_FRC */ shader_glsl_map2gl,
+ /* WINED3DSIH_IADD */ NULL,
+ /* WINED3DSIH_IF */ shader_glsl_if,
+ /* WINED3DSIH_IFC */ shader_glsl_ifc,
+ /* WINED3DSIH_IGE */ NULL,
+ /* WINED3DSIH_LABEL */ shader_glsl_label,
+ /* WINED3DSIH_LIT */ shader_glsl_lit,
+ /* WINED3DSIH_LOG */ shader_glsl_log,
+ /* WINED3DSIH_LOGP */ shader_glsl_log,
+ /* WINED3DSIH_LOOP */ shader_glsl_loop,
+ /* WINED3DSIH_LRP */ shader_glsl_lrp,
+ /* WINED3DSIH_LT */ NULL,
+ /* WINED3DSIH_M3x2 */ shader_glsl_mnxn,
+ /* WINED3DSIH_M3x3 */ shader_glsl_mnxn,
+ /* WINED3DSIH_M3x4 */ shader_glsl_mnxn,
+ /* WINED3DSIH_M4x3 */ shader_glsl_mnxn,
+ /* WINED3DSIH_M4x4 */ shader_glsl_mnxn,
+ /* WINED3DSIH_MAD */ shader_glsl_mad,
+ /* WINED3DSIH_MAX */ shader_glsl_map2gl,
+ /* WINED3DSIH_MIN */ shader_glsl_map2gl,
+ /* WINED3DSIH_MOV */ shader_glsl_mov,
+ /* WINED3DSIH_MOVA */ shader_glsl_mov,
+ /* WINED3DSIH_MUL */ shader_glsl_arith,
+ /* WINED3DSIH_NOP */ NULL,
+ /* WINED3DSIH_NRM */ shader_glsl_nrm,
+ /* WINED3DSIH_PHASE */ NULL,
+ /* WINED3DSIH_POW */ shader_glsl_pow,
+ /* WINED3DSIH_RCP */ shader_glsl_rcp,
+ /* WINED3DSIH_REP */ shader_glsl_rep,
+ /* WINED3DSIH_RET */ shader_glsl_ret,
+ /* WINED3DSIH_RSQ */ shader_glsl_rsq,
+#ifdef VBOX_WITH_VMSVGA
+ /* WINED3DSIH_SETP */ shader_glsl_setp,
+#else
+ /* WINED3DSIH_SETP */ NULL,
+#endif
+ /* WINED3DSIH_SGE */ shader_glsl_compare,
+ /* WINED3DSIH_SGN */ shader_glsl_sgn,
+ /* WINED3DSIH_SINCOS */ shader_glsl_sincos,
+ /* WINED3DSIH_SLT */ shader_glsl_compare,
+ /* WINED3DSIH_SUB */ shader_glsl_arith,
+ /* WINED3DSIH_TEX */ shader_glsl_tex,
+ /* WINED3DSIH_TEXBEM */ shader_glsl_texbem,
+ /* WINED3DSIH_TEXBEML */ shader_glsl_texbem,
+ /* WINED3DSIH_TEXCOORD */ shader_glsl_texcoord,
+ /* WINED3DSIH_TEXDEPTH */ shader_glsl_texdepth,
+ /* WINED3DSIH_TEXDP3 */ shader_glsl_texdp3,
+ /* WINED3DSIH_TEXDP3TEX */ shader_glsl_texdp3tex,
+ /* WINED3DSIH_TEXKILL */ shader_glsl_texkill,
+ /* WINED3DSIH_TEXLDD */ shader_glsl_texldd,
+ /* WINED3DSIH_TEXLDL */ shader_glsl_texldl,
+ /* WINED3DSIH_TEXM3x2DEPTH */ shader_glsl_texm3x2depth,
+ /* WINED3DSIH_TEXM3x2PAD */ shader_glsl_texm3x2pad,
+ /* WINED3DSIH_TEXM3x2TEX */ shader_glsl_texm3x2tex,
+ /* WINED3DSIH_TEXM3x3 */ shader_glsl_texm3x3,
+ /* WINED3DSIH_TEXM3x3DIFF */ NULL,
+ /* WINED3DSIH_TEXM3x3PAD */ shader_glsl_texm3x3pad,
+ /* WINED3DSIH_TEXM3x3SPEC */ shader_glsl_texm3x3spec,
+ /* WINED3DSIH_TEXM3x3TEX */ shader_glsl_texm3x3tex,
+ /* WINED3DSIH_TEXM3x3VSPEC */ shader_glsl_texm3x3vspec,
+ /* WINED3DSIH_TEXREG2AR */ shader_glsl_texreg2ar,
+ /* WINED3DSIH_TEXREG2GB */ shader_glsl_texreg2gb,
+ /* WINED3DSIH_TEXREG2RGB */ shader_glsl_texreg2rgb,
+};
+
+static void shader_glsl_handle_instruction(const struct wined3d_shader_instruction *ins) {
+ SHADER_HANDLER hw_fct;
+
+ /* Select handler */
+ hw_fct = shader_glsl_instruction_handler_table[ins->handler_idx];
+
+ /* Unhandled opcode */
+ if (!hw_fct)
+ {
+ FIXME("Backend can't handle opcode %#x\n", ins->handler_idx);
+ return;
+ }
+ hw_fct(ins);
+
+ shader_glsl_add_instruction_modifiers(ins);
+}
+
+const shader_backend_t glsl_shader_backend = {
+ shader_glsl_handle_instruction,
+ shader_glsl_select,
+ shader_glsl_select_depth_blt,
+ shader_glsl_deselect_depth_blt,
+ shader_glsl_update_float_vertex_constants,
+ shader_glsl_update_float_pixel_constants,
+ shader_glsl_load_constants,
+ shader_glsl_load_np2fixup_constants,
+ shader_glsl_destroy,
+ shader_glsl_alloc,
+ shader_glsl_free,
+ shader_glsl_dirty_const,
+ shader_glsl_get_caps,
+ shader_glsl_color_fixup_supported,
+};
+
+#if defined(VBOXWINEDBG_SHADERS) || defined(VBOX_WINE_WITH_PROFILE)
+void vboxWDbgPrintF(char * szString, ...)
+{
+ char szBuffer[4096*2] = {0};
+ va_list pArgList;
+ va_start(pArgList, szString);
+ _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0]), szString, pArgList);
+ va_end(pArgList);
+
+ OutputDebugStringA(szBuffer);
+}
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/Makefile.kup b/src/VBox/Devices/Graphics/shaderlib/libWineStub/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/Makefile.kup
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c b/src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c
new file mode 100644
index 00000000..9735cf26
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/debug.c
@@ -0,0 +1,534 @@
+/*
+ * Management of the debugging channels
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "initguid.h"
+#ifdef VBOX
+# ifdef _MSC_VER
+# include <iprt/win/objbase.h>
+# else
+# include <objbase.h>
+# endif
+# include <wine/wined3d.h>
+# ifdef _MSC_VER
+# include <iprt/win/windows.h>
+# else
+# include <windows.h>
+# endif
+#else
+#include <objbase.h>
+#include <wine/wined3d.h>
+#include <windows.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "wine/debug.h"
+//#include "wine/library.h"
+
+#ifdef VBOX_WITH_WDDM
+# include <VBoxDispMpLogger.h>
+# include <iprt/errcore.h>
+#else
+# include <iprt/log.h>
+#endif
+#include <iprt/asm.h>
+
+#if VBOX_WITH_VMSVGA
+/* WINE defines this as inline in its headers, directly accessing a memory location */
+#ifndef RT_OS_WINDOWS
+#define GetCurrentThreadId() (1)
+#define GetCurrentProcessId() (1)
+#endif
+#endif
+
+static const char * const debug_classes[] = { "fixme", "err", "warn", "trace" };
+
+#define MAX_DEBUG_OPTIONS 256
+
+typedef DECLCALLBACKTYPE(void, FNVBOXWINELOGBACKDOOR,(char* pcszStr));
+typedef FNVBOXWINELOGBACKDOOR *PFNVBOXWINELOGBACKDOOR;
+static PFNVBOXWINELOGBACKDOOR vbox_log_backdoor = NULL;
+static unsigned char default_flags = (1 << __WINE_DBCL_ERR) | (1 << __WINE_DBCL_FIXME) | (1 << __WINE_DBCL_WARN);
+static int nb_debug_options = -1;
+static struct __wine_debug_channel debug_options[MAX_DEBUG_OPTIONS];
+
+static struct __wine_debug_functions funcs;
+
+static void debug_init(void);
+
+static int cmp_name( const void *p1, const void *p2 )
+{
+ const char *name = p1;
+ const struct __wine_debug_channel *chan = p2;
+ return strcmp( name, chan->name );
+}
+
+/* get the flags to use for a given channel, possibly setting them too in case of lazy init */
+unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel )
+{
+ if (nb_debug_options == -1) debug_init();
+
+ if (nb_debug_options)
+ {
+ struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,
+ sizeof(debug_options[0]), cmp_name );
+ if (opt) return opt->flags;
+ }
+ /* no option for this channel */
+ if (channel->flags & (1 << __WINE_DBCL_INIT)) channel->flags = default_flags;
+ return default_flags;
+}
+
+/* set the flags to use for a given channel; return 0 if the channel is not available to set */
+int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+ unsigned char set, unsigned char clear )
+{
+ if (nb_debug_options == -1) debug_init();
+
+ if (nb_debug_options)
+ {
+ struct __wine_debug_channel *opt = bsearch( channel->name, debug_options, nb_debug_options,
+ sizeof(debug_options[0]), cmp_name );
+ if (opt)
+ {
+ opt->flags = (opt->flags & ~clear) | set;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* add a new debug option at the end of the option list */
+static void add_option( const char *name, unsigned char set, unsigned char clear )
+{
+ int min = 0, max = nb_debug_options - 1, pos, res;
+
+ if (!name[0]) /* "all" option */
+ {
+ default_flags = (default_flags & ~clear) | set;
+ return;
+ }
+ if (strlen(name) >= sizeof(debug_options[0].name)) return;
+
+ while (min <= max)
+ {
+ pos = (min + max) / 2;
+ res = strcmp( name, debug_options[pos].name );
+ if (!res)
+ {
+ debug_options[pos].flags = (debug_options[pos].flags & ~clear) | set;
+ return;
+ }
+ if (res < 0) max = pos - 1;
+ else min = pos + 1;
+ }
+ if (nb_debug_options >= MAX_DEBUG_OPTIONS) return;
+
+ pos = min;
+ if (pos < nb_debug_options) memmove( &debug_options[pos + 1], &debug_options[pos],
+ (nb_debug_options - pos) * sizeof(debug_options[0]) );
+ strcpy( debug_options[pos].name, name );
+ debug_options[pos].flags = (default_flags & ~clear) | set;
+ nb_debug_options++;
+}
+
+/* parse a set of debugging option specifications and add them to the option list */
+static void parse_options( const char *str )
+{
+ char *opt, *next, *options;
+ unsigned int i;
+
+ if (!(options = strdup(str))) return;
+ for (opt = options; opt; opt = next)
+ {
+ const char *p;
+ unsigned char set = 0, clear = 0;
+
+ if ((next = strchr( opt, ',' ))) *next++ = 0;
+
+ p = opt + strcspn( opt, "+-" );
+ if (!p[0]) p = opt; /* assume it's a debug channel name */
+
+ if (p > opt)
+ {
+ for (i = 0; i < sizeof(debug_classes)/sizeof(debug_classes[0]); i++)
+ {
+ int len = (int)strlen(debug_classes[i]);
+ if (len != (p - opt)) continue;
+ if (!memcmp( opt, debug_classes[i], len )) /* found it */
+ {
+ if (*p == '+') set |= 1 << i;
+ else clear |= 1 << i;
+ break;
+ }
+ }
+ if (i == sizeof(debug_classes)/sizeof(debug_classes[0])) /* bad class name, skip it */
+ continue;
+ }
+ else
+ {
+ if (*p == '-') clear = ~0;
+ else set = ~0;
+ }
+ if (*p == '+' || *p == '-') p++;
+ if (!p[0]) continue;
+
+ if (!strcmp( p, "all" ))
+ default_flags = (default_flags & ~clear) | set;
+ else
+ add_option( p, set, clear );
+ }
+ free( options );
+}
+
+
+/* print the usage message */
+static void debug_usage(void)
+{
+ static const char usage[] =
+ "Syntax of the WINEDEBUG variable:\n"
+ " WINEDEBUG=[class]+xxx,[class]-yyy,...\n\n"
+ "Example: WINEDEBUG=+all,warn-heap\n"
+ " turns on all messages except warning heap messages\n"
+ "Available message classes: err, warn, fixme, trace\n";
+ int res = write( 2, usage, sizeof(usage) - 1 );
+ NOREF(res);
+ exit(1);
+}
+
+#ifndef VBOX_WITH_WDDM
+static DECLCALLBACK(void) vbox_log_backdoor_rt(char* pcszStr)
+{
+ RTLogPrintf("%s", pcszStr);
+}
+#else
+static DECLCALLBACK(void) vbox_log_backdoor_dispmp(char* pcszStr)
+{
+ VBoxDispMpLoggerLog(pcszStr);
+}
+#endif
+static void vbox_log_v(const char *pszFormat, va_list args)
+{
+ if (vbox_log_backdoor)
+ {
+ static char buf[8092];
+ int offset = sprintf(buf, "[0x%lx.0x%lx] Wine Debug: ", (unsigned long)GetCurrentProcessId(), (unsigned long)GetCurrentThreadId());
+ vsprintf(buf + offset, pszFormat, args);
+ vbox_log_backdoor(buf);
+ }
+}
+
+/* initialize all options at startup */
+static void debug_init(void)
+{
+ char *wine_debug;
+
+ if (nb_debug_options != -1) return; /* already initialized */
+ nb_debug_options = 0;
+ if ((wine_debug = getenv("WINEDEBUG")))
+ {
+#ifndef VBOX_WITH_VMSVGA
+ Assert(0);
+#endif
+ if (!strcmp( wine_debug, "help" ))
+ debug_usage();
+ else if (getenv("WINEDEBUG_BACKDOOR"))
+ {
+#ifdef VBOX_WITH_WDDM
+ int rc = VBoxDispMpLoggerInit();
+ if (RT_SUCCESS(rc))
+ vbox_log_backdoor = vbox_log_backdoor_dispmp;
+// else
+#else
+ vbox_log_backdoor = vbox_log_backdoor_rt;
+#endif
+ }
+ parse_options( wine_debug );
+ }
+}
+
+/* varargs wrapper for funcs.dbg_vprintf */
+int wine_dbg_printf( const char *format, ... )
+{
+ int ret;
+ va_list valist;
+
+ va_start(valist, format);
+ ret = funcs.dbg_vprintf( format, valist );
+ va_end(valist);
+ return ret;
+}
+
+/* printf with temp buffer allocation */
+const char *wine_dbg_sprintf( const char *format, ... )
+{
+ static const int max_size = 200;
+ char *ret;
+ int len;
+ va_list valist;
+
+ va_start(valist, format);
+ ret = funcs.get_temp_buffer( max_size );
+ len = vsnprintf( ret, max_size, format, valist );
+ if (len == -1 || len >= max_size) ret[max_size-1] = 0;
+ else funcs.release_temp_buffer( ret, len + 1 );
+ va_end(valist);
+ return ret;
+}
+
+
+/* varargs wrapper for funcs.dbg_vlog */
+int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+ const char *func, const char *format, ... )
+{
+ int ret;
+ va_list valist;
+
+ if (!(__wine_dbg_get_channel_flags( channel ) & (1 << cls))) return -1;
+
+ va_start(valist, format);
+ ret = funcs.dbg_vlog( cls, channel, func, format, valist );
+ va_end(valist);
+ return ret;
+}
+
+#ifndef VBOX //!defined(VBOX_WITH_VMSVGA) || defined(RT_OS_WINDOWS)
+int interlocked_xchg_add( int *dest, int incr )
+{
+ return InterlockedExchangeAdd((LONG *)dest, incr);
+}
+#endif
+
+/* allocate some tmp string space */
+/* FIXME: this is not 100% thread-safe */
+static char *get_temp_buffer( size_t size )
+{
+ static char *list[32];
+ static int pos;
+ char *ret;
+ int idx;
+
+#ifndef VBOX
+ idx = interlocked_xchg_add( &pos, 1 ) % (sizeof(list)/sizeof(list[0]));
+#else
+ idx = ASMAtomicIncS32(&pos) - 1;
+ idx %= RT_ELEMENTS(list);
+#endif
+ if ((ret = realloc( list[idx], size ))) list[idx] = ret;
+ return ret;
+}
+
+
+/* release unused part of the buffer */
+static void release_temp_buffer( char *buffer, size_t size )
+{
+ /* don't bother doing anything */
+}
+
+
+/* default implementation of wine_dbgstr_an */
+static const char *default_dbgstr_an( const char *str, int n )
+{
+ static const char hex[16+1] = "0123456789abcdef";
+ char *dst, *res;
+ size_t size;
+
+ if (!((ULONG_PTR)str >> 16))
+ {
+ if (!str) return "(null)";
+ res = funcs.get_temp_buffer( 6 );
+ sprintf( res, "#%04x", LOWORD(str) );
+ return res;
+ }
+ if (n == -1) n = (int)strlen(str);
+ if (n < 0) n = 0;
+ size = 10 + min( 300, n * 4 );
+ dst = res = funcs.get_temp_buffer( size );
+ *dst++ = '"';
+ while (n-- > 0 && dst <= res + size - 9)
+ {
+ unsigned char c = *str++;
+ switch (c)
+ {
+ case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+ case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+ case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+ case '"': *dst++ = '\\'; *dst++ = '"'; break;
+ case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+ default:
+ if (c >= ' ' && c <= 126)
+ *dst++ = c;
+ else
+ {
+ *dst++ = '\\';
+ *dst++ = 'x';
+ *dst++ = hex[(c >> 4) & 0x0f];
+ *dst++ = hex[c & 0x0f];
+ }
+ }
+ }
+ *dst++ = '"';
+ if (n > 0)
+ {
+ *dst++ = '.';
+ *dst++ = '.';
+ *dst++ = '.';
+ }
+ *dst++ = 0;
+ funcs.release_temp_buffer( res, dst - res );
+ return res;
+}
+
+
+/* default implementation of wine_dbgstr_wn */
+static const char *default_dbgstr_wn( const WCHAR *str, int n )
+{
+ char *dst, *res;
+ size_t size;
+
+ if (!((ULONG_PTR)str >> 16))
+ {
+ if (!str) return "(null)";
+ res = funcs.get_temp_buffer( 6 );
+ sprintf( res, "#%04x", LOWORD(str) );
+ return res;
+ }
+ if (n == -1)
+ {
+ const WCHAR *end = str;
+ while (*end) end++;
+ n = end - str;
+ }
+ if (n < 0) n = 0;
+ size = 12 + min( 300, n * 5 );
+ dst = res = funcs.get_temp_buffer( size );
+ *dst++ = 'L';
+ *dst++ = '"';
+ while (n-- > 0 && dst <= res + size - 10)
+ {
+ WCHAR c = *str++;
+ switch (c)
+ {
+ case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+ case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+ case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+ case '"': *dst++ = '\\'; *dst++ = '"'; break;
+ case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+ default:
+ if (c >= ' ' && c <= 126)
+ *dst++ = c;
+ else
+ {
+ *dst++ = '\\';
+ sprintf(dst,"%04x",c);
+ dst+=4;
+ }
+ }
+ }
+ *dst++ = '"';
+ if (n > 0)
+ {
+ *dst++ = '.';
+ *dst++ = '.';
+ *dst++ = '.';
+ }
+ *dst++ = 0;
+ funcs.release_temp_buffer( res, dst - res );
+ return res;
+}
+
+
+/* default implementation of wine_dbg_vprintf */
+static int default_dbg_vprintf( const char *format, va_list args )
+{
+ vbox_log_v(format, args);
+#ifdef DEBUG_leo
+ static FILE *output=NULL;
+ static int first_time = 1;
+
+ if (first_time)
+ {
+ first_time = 0;
+ output = fopen( "winelog.txt", "w" );
+ }
+
+ if (output) vfprintf( output, format, args );
+#endif
+ return vfprintf( stdout, format, args );
+}
+
+
+/* default implementation of wine_dbg_vlog */
+static int default_dbg_vlog( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+ const char *func, const char *format, va_list args )
+{
+ int ret = 0;
+
+ if (cls < sizeof(debug_classes)/sizeof(debug_classes[0]))
+ ret += wine_dbg_printf( "%s:[%#x]:%s:%s ", debug_classes[cls], GetCurrentThreadId(), channel->name, func );
+ if (format)
+ ret += funcs.dbg_vprintf( format, args );
+ return ret;
+}
+
+/* wrappers to use the function pointers */
+
+const char *wine_dbgstr_an( const char * s, int n )
+{
+ return funcs.dbgstr_an(s, n);
+}
+
+const char *wine_dbgstr_wn( const WCHAR *s, int n )
+{
+ return funcs.dbgstr_wn(s, n);
+}
+
+void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+ struct __wine_debug_functions *old_funcs, size_t size )
+{
+ if (old_funcs) memcpy( old_funcs, &funcs, min(sizeof(funcs),size) );
+ if (new_funcs) memcpy( &funcs, new_funcs, min(sizeof(funcs),size) );
+}
+
+static struct __wine_debug_functions funcs =
+{
+ get_temp_buffer,
+ release_temp_buffer,
+ default_dbgstr_an,
+ default_dbgstr_wn,
+ default_dbg_vprintf,
+ default_dbg_vlog
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h
new file mode 100644
index 00000000..998c28bd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/config.h
@@ -0,0 +1,1282 @@
+/* include/config.h. Generated from config.h.in by configure. */
+/* include/config.h.in. Generated from configure.ac by autoheader. */
+
+#include <stddef.h>
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH /* */
+
+/* Define to the file extension for executables. */
+#define EXEEXT ".exe"
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+/* #undef HAVE_ALSA_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+/* #undef HAVE_AL_AL_H */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+/* #undef HAVE_ARPA_NAMESER_H */
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+/* #undef HAVE_CAPI20_H */
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+/* #undef HAVE_CUPS_CUPS_H */
+
+/* Define to 1 if you have the <curses.h> header file. */
+/* #undef HAVE_CURSES_H */
+
+/* Define if you have the daylight variable */
+/* #undef HAVE_DAYLIGHT*/
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+/* #undef HAVE_DBUS_DBUS_H */
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+ file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+/* #undef HAVE_DLADDR */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H*/
+
+/* Define to 1 if you have the `dlopen' function. */
+/* #undef HAVE_DLOPEN*/
+
+/* Define to 1 if you have the <elf.h> header file. */
+/* #undef HAVE_ELF_H*/
+
+/* Define to 1 if you have the `epoll_create' function. */
+/* #undef HAVE_EPOLL_CREATE */
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+/* #undef HAVE_FONTCONFIG_FONTCONFIG_H */
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+/* #undef HAVE_FUTIMESAT */
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `getdirentries' function. */
+/* #undef HAVE_GETDIRENTRIES */
+
+/* Define to 1 if you have the `getnameinfo' function. */
+/* #undef HAVE_GETNAMEINFO */
+
+/* Define to 1 if you have the `getnetbyname' function. */
+/* #undef HAVE_GETNETBYNAME */
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+/* #undef HAVE_GETPAGESIZE */
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef HAVE_GETPWUID */
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+/* #undef HAVE_GETUID */
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+/* #undef HAVE_GRP_H */
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+/* #undef HAVE_GSM_GSM_H */
+
+/* Define to 1 if you have the <gsm.h> header file. */
+/* #undef HAVE_GSM_H */
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+/* #undef HAVE_HAL_LIBHAL_H */
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#define HAVE_IEEEFP_H 1
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define to 1 if you have the `isinf' function. */
+/* #undef HAVE_ISINF */
+
+/* Define to 1 if you have the `isnan' function. */
+/* #undef HAVE_ISNAN */
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+/* #undef HAVE_LBER_H */
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+/* #undef HAVE_LCMS_H */
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+/* #undef HAVE_LDAP_H */
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+/* #undef HAVE_LIBXML_PARSER_H */
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+/* #undef HAVE_LIBXSLT_PATTERN_H */
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+/* #undef HAVE_LIBXSLT_TRANSFORM_H */
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+/* #undef HAVE_LINK_H */
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+/* #undef HAVE_LINUX_22_JOYSTICK_API */
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+/* #undef HAVE_LINUX_CAPI_H */
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+/* #undef HAVE_LINUX_CDROM_H */
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+/* #undef HAVE_LINUX_HDREG_H */
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+/* #undef HAVE_LINUX_INPUT_H */
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+/* #undef HAVE_LINUX_IOCTL_H */
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+/* #undef HAVE_LINUX_IPX_H */
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+/* #undef HAVE_LINUX_IRDA_H */
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+/* #undef HAVE_LINUX_JOYSTICK_H */
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+/* #undef HAVE_LINUX_MAJOR_H */
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+/* #undef HAVE_LINUX_PARAM_H */
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+/* #undef HAVE_LINUX_SERIAL_H */
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+/* #undef HAVE_LINUX_TYPES_H */
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+/* #undef HAVE_MPG123_H */
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+/* #undef HAVE_NCURSES_H */
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+/* #undef HAVE_NETINET_IF_ETHER_H */
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+/* #undef HAVE_NETINET_IN_H */
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+/* #undef HAVE_NETINET_IN_SYSTM_H */
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+/* #undef HAVE_NETINET_IP_H */
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+/* #undef HAVE_NETINET_IP_ICMP_H */
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* #undef HAVE_NETINET_TCP_H */
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+/* #undef HAVE_NETINET_UDP_H */
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+/* #undef HAVE_NETIPX_IPX_H */
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+/* #undef HAVE_NET_IF_ARP_H */
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+/* #undef HAVE_NET_IF_H */
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+/* #undef HAVE_NET_ROUTE_H */
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+/* #undef HAVE_NS_MSG__MSG_PTR */
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+/* #undef HAVE_OPENSSL_ERR_H */
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+/* #undef HAVE_OPENSSL_SSL_H */
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+/* #undef HAVE_PID_T */
+
+/* Define to 1 if you have the `pipe2' function. */
+/* #undef HAVE_PIPE2 */
+
+/* Define to 1 if you have the <png.h> header file. */
+/* #undef HAVE_PNG_H */
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+/* #undef HAVE_PPDEV */
+
+/* Define to 1 if you have the `prctl' function. */
+/* #undef HAVE_PRCTL */
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+/* #undef HAVE_PTHREAD_GETATTR_NP */
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+/* #undef HAVE_PWD_H */
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+/* #undef HAVE_RESOLV */
+
+/* Define to 1 if you have the <resolv.h> header file. */
+/* #undef HAVE_RESOLV_H */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+/* #undef HAVE_SCHED_SETAFFINITY */
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+/* #undef HAVE_SCSI_SCSI_H */
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+/* #undef HAVE_SCSI_SCSI_IOCTL_H */
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+/* #undef HAVE_SCSI_SG_H */
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+/* #undef HAVE_SETRLIMIT */
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+/* #undef HAVE_SIGALTSTACK */
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T_SI_FD */
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+/* #undef HAVE_SNPRINTF */
+#include <iprt/cdefs.h> /* VBox: Manual edit */
+#if RT_MSC_PREREQ(RT_MSC_VER_VC140) /* VBox: Manual edit */
+# define HAVE_SNPRINTF 1 /* VBox: Manual edit */
+#endif /* VBox: Manual edit */
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+#define HAVE_SPAWNVP 1
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+/* #undef HAVE_STDINT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+/* #undef HAVE_STROPTS_H */
+
+/* Define to 1 if you have the `strtold' function. */
+/* #undef HAVE_STRTOLD */
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+/* #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID */
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef HAVE_SYMLINK */
+
+/* Define to 1 if you have the <syscall.h> header file. */
+/* #undef HAVE_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+/* #undef HAVE_SYS_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#define HAVE_SYS_ELF32_H 1
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+/* #undef HAVE_SYS_EPOLL_H */
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+/* #undef HAVE_SYS_INOTIFY_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+/* #undef HAVE_SYS_MMAN_H */
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+/* #undef HAVE_SYS_PRCTL_H */
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+/* #undef HAVE_SYS_PTRACE_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef HAVE_SYS_RESOURCE_H */
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+/* #undef HAVE_SYS_SHM_H */
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+/* #undef HAVE_SYS_SIGNAL_H */
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+/* #undef HAVE_SYS_SOCKETVAR_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+/* #undef HAVE_SYS_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+/* #undef HAVE_SYS_USER_H */
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+/* #undef HAVE_SYS_UTSNAME_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+/* #undef HAVE_SYS_VM86_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+/* #undef HAVE_UCONTEXT_H */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+/* #undef HAVE_VSNPRINTF */
+#if RT_MSC_PREREQ(RT_MSC_VER_VC140) /* VBox: Manual edit */
+# define HAVE_VSNPRINTF 1 /* VBox: Manual edit */
+#endif /* VBox: Manual edit */
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_ZLIB 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+#define HAVE__PCLOSE 1
+
+/* Define to 1 if you have the `_popen' function. */
+#define HAVE__POPEN 1
+
+/* Define to 1 if you have the `_snprintf' function. */
+#define HAVE__SNPRINTF 1
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#define HAVE__SPAWNVP 1
+
+/* Define to 1 if you have the `_strdup' function. */
+#define HAVE__STRDUP 1
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#define HAVE__VSNPRINTF 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel@winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.dll"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl _" #name suffix "\n\t.def _" #name suffix "; .scl 2; .type 32; .endef\n_" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"
+
+/* Define to a macro to generate an assembly function with C calling
+ convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) "_" name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) "@" #args
+
+/* Define to a macro to generate an assembly function with stdcall calling
+ convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h
new file mode 100644
index 00000000..cf1eff37
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d8.h
@@ -0,0 +1,1154 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8_H
+#define __WINE_D3D8_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0800
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef __WINESRC__
+# include <windows.h>
+#endif
+
+#include <d3d8types.h>
+#include <d3d8caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE 0x00000002L
+#define D3DCREATE_MULTITHREADED 0x00000004L
+#define D3DCREATE_PUREDEVICE 0x00000010L
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020L
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040L
+#define D3DCREATE_MIXED_VERTEXPROCESSING 0x00000080L
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN 0x00000001L
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION 220
+#define D3DADAPTER_DEFAULT 0
+#define D3DENUM_NO_WHQL_LEVEL 2
+
+#define _FACD3D 0x876
+#define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code )
+
+/*
+ * Direct3D Errors
+ */
+#define D3D_OK S_OK
+#define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087)
+
+#define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157)
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D8, 0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);
+typedef struct IDirect3D8 *LPDIRECT3D8;
+
+DEFINE_GUID(IID_IDirect3DDevice8, 0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF);
+typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8;
+
+DEFINE_GUID(IID_IDirect3DResource8, 0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F);
+typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer8, 0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95);
+typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DVolume8, 0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0);
+typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;
+
+DEFINE_GUID(IID_IDirect3DSwapChain8, 0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD);
+typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;
+
+DEFINE_GUID(IID_IDirect3DSurface8, 0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD);
+typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer8, 0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86);
+typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture8, 0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E);
+typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DTexture8, 0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58);
+typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture8, 0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50);
+typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD);
+typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;
+
+/*****************************************************************************
+ * IDirect3D8 interface
+ */
+#define INTERFACE IDirect3D8
+DECLARE_INTERFACE_(IDirect3D8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D8 methods ***/
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;
+ STDMETHOD_(UINT,GetAdapterCount )(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE;
+ STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, UINT Mode, D3DDISPLAYMODE * pMode) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE * pMode) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter, D3DDEVTYPE CheckType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL Windowed) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8 * pCaps) PURE;
+ STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType,HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D8_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a) (p)->lpVtbl->GetAdapterModeCount(p,a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->lpVtbl->EnumAdapterModes(p,a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D8_AddRef(p) (p)->AddRef()
+#define IDirect3D8_Release(p) (p)->Release()
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D8_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a) (p)->GetAdapterModeCount(a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->EnumAdapterModes(a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->CheckDeviceMultiSampleType(a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume8 interface
+ */
+#define INTERFACE IDirect3DVolume8
+DECLARE_INTERFACE_(IDirect3DVolume8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVolume8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void ** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE;
+ STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox, DWORD Flags) PURE;
+ STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume8_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume8_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolume8_AddRef(p) (p)->AddRef()
+#define IDirect3DVolume8_Release(p) (p)->Release()
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolume8_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DVolume8_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DVolume8_LockBox(p,a,b,c) (p)->LockBox(a,b,c)
+#define IDirect3DVolume8_UnlockBox(p) (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain8 interface
+ */
+#define INTERFACE IDirect3DSwapChain8
+DECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSwapChain8 methods ***/
+ STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect, CONST RECT * pDestRect, HWND hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c) (p)->lpVtbl->Present(p,a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain8_AddRef(p) (p)->AddRef()
+#define IDirect3DSwapChain8_Release(p) (p)->Release()
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c) (p)->Present(a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface8 interface
+ */
+#define INTERFACE IDirect3DSurface8
+DECLARE_INTERFACE_(IDirect3DSurface8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSurface8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void * pData,DWORD SizeOfData,DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void ** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT * pLockedRect, CONST RECT * pRect,DWORD Flags) PURE;
+ STDMETHOD(UnlockRect)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface8_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface8_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSurface8_AddRef(p) (p)->AddRef()
+#define IDirect3DSurface8_Release(p) (p)->Release()
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DSurface8_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DSurface8_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DSurface8_LockRect(p,a,b,c) (p)->LockRect(a,b,c)
+#define IDirect3DSurface8_UnlockRect(p) (p)->UnlockRect()
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource8 interface
+ */
+#define INTERFACE IDirect3DResource8
+DECLARE_INTERFACE_(IDirect3DResource8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource8_GetType(p) (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DResource8_AddRef(p) (p)->AddRef()
+#define IDirect3DResource8_Release(p) (p)->Release()
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DResource8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DResource8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DResource8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DResource8_GetType(p) (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer8 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer8
+DECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DVertexBuffer8 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer8_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer8_Release(p) (p)->Release()
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVertexBuffer8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVertexBuffer8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVertexBuffer8_GetType(p) (p)->GetType()
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer8 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer8
+DECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DIndexBuffer8 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer8_AddRef(p) (p)->AddRef()
+#define IDirect3DIndexBuffer8_Release(p) (p)->Release()
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DIndexBuffer8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DIndexBuffer8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DIndexBuffer8_GetType(p) (p)->GetType()
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p) (p)->Unlock()
+#define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture8 interface
+ */
+#define INTERFACE IDirect3DBaseTexture8
+DECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DBaseTexture8_Release(p) (p)->Release()
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DBaseTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DBaseTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DBaseTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DBaseTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DBaseTexture8_GetLevelCount(p) (p)->GetLevelCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture8 interface
+ */
+#define INTERFACE IDirect3DCubeTexture8
+DECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ /*** IDirect3DCubeTexture8 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC * pDesc) PURE;
+ STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD Flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType,CONST RECT * pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DCubeTexture8_Release(p) (p)->Release()
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DCubeTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DCubeTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DCubeTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DCubeTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DCubeTexture8_GetLevelCount(p) (p)->GetLevelCount()
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture8 interface
+ */
+#define INTERFACE IDirect3DTexture8
+DECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ /*** IDirect3DTexture8 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC * pDesc) PURE;
+ STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE;
+ STDMETHOD(LockRect)(THIS_ UINT Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD Flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ CONST RECT * pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture8_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture8_Release(p) (p)->Release()
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DTexture8_GetLevelCount(p) (p)->GetLevelCount()
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a) (p)->UnlockRect(a)
+#define IDirect3DTexture8_AddDirtyRect(p,a) (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture8 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture8
+DECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void * pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ /*** IDirect3DVolumeTexture8 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC * pDesc) PURE;
+ STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume8 ** ppVolumeLevel) PURE;
+ STDMETHOD(LockBox)(THIS_ UINT Level,D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox,DWORD Flags) PURE;
+ STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX * pDirtyBox) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture8_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->GetLevelCount()
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice8 interface
+ */
+#define INTERFACE IDirect3DDevice8
+DECLARE_INTERFACE_(IDirect3DDevice8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice8 methods ***/
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD Bytes) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS * pParameters) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE;
+ STDMETHOD_(void,SetCursorPosition)(THIS_ UINT XScreenSpace, UINT YScreenSpace,DWORD Flags) PURE;
+ STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL bShow) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE;
+ STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect,CONST RECT * pDestRect,HWND hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8 ** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE;
+ STDMETHOD_(void,SetGammaRamp)(THIS_ DWORD Flags,CONST D3DGAMMARAMP * pRamp) PURE;
+ STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8 ** ppTexture) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8 ** ppSurface) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8 ** ppSurface) PURE;
+ STDMETHOD(CreateImageSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8 ** ppSurface) PURE;
+ STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 * pSourceSurface,CONST RECT * pSourceRectsArray,UINT cRects,IDirect3DSurface8 * pDestinationSurface,CONST POINT * pDestPointsArray) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE;
+ STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT * pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX * pMatrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX * pMatrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX * pMatrix) PURE;
+ STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT8 * pViewport) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE;
+ STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL8 * pMaterial) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT8 * pLight) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT8 * pLight) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL * pEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float * pPlane) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float * pPlane) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD * pValue) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE;
+ STDMETHOD(ApplyStateBlock)(THIS_ DWORD Token) PURE;
+ STDMETHOD(CaptureStateBlock)(THIS_ DWORD Token) PURE;
+ STDMETHOD(DeleteStateBlock)(THIS_ DWORD Token) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,DWORD * pToken) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS8 * pClipStatus) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8 ** ppTexture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8 * pTexture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD * pValue) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE;
+ STDMETHOD(GetInfo)(THIS_ DWORD DevInfoID,void * pDevInfoStruct,DWORD DevInfoStructSize) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY * pEntries) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY * pEntries) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT * PaletteNumber) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void * pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertexIndices,UINT PrimitiveCount,CONST void * pIndexData,D3DFORMAT IndexDataFormat,CONST void * pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD Flags) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD * pDeclaration,CONST DWORD * pFunction,DWORD * pHandle,DWORD Usage) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE;
+ STDMETHOD(DeleteVertexShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD Register,CONST void * pConstantData,DWORD ConstantCount) PURE;
+ STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD Register,void * pConstantData,DWORD ConstantCount) PURE;
+ STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT Stride) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT BaseVertexIndex) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD * pFunction,DWORD * pHandle) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE;
+ STDMETHOD(DeletePixelShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD Register,CONST void * pConstantData,DWORD ConstantCount) PURE;
+ STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD Register,void * pConstantData,DWORD ConstantCount) PURE;
+ STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float * pNumSegs,CONST D3DRECTPATCH_INFO * pRectPatchInfo) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float * pNumSegs,CONST D3DTRIPATCH_INFO * pTriPatchInfo) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)
+#define IDirect3DDevice8_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice8_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DDevice8_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice8_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a) (p)->lpVtbl->GetGammaRamp(p,a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->lpVtbl->CopyRects(p,a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->lpVtbl->GetFrontBuffer(p,a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice8_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice8_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice8_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice8_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice8_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice8_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice8_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice8_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice8_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice8_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice8_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice8_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->lpVtbl->processVertices(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice8_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->lpVtbl->DeleteVertexShader(p,a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->lpVtbl->SetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->lpVtbl->GetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b) (p)->lpVtbl->SetIndices(p,a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b) (p)->lpVtbl->GetIndices(p,a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice8_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice8_DeletePixelShader(p,a) (p)->lpVtbl->DeletePixelShader(p,a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice8_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice8_Release(p) (p)->Release()
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->ResourceManagerDiscardBytes(a)
+#define IDirect3DDevice8_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice8_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirect3DDevice8_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice8_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice8_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a) (p)->GetRasterStatus(a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a) (p)->GetGammaRamp(a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->CreateTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->CreateCubeTexture(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->CreateVertexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->CreateIndexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->CreateRenderTarget(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->CreateDepthStencilSurface(a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->CreateImageSurface(a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->CopyRects(a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->GetFrontBuffer(a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice8_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice8_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice8_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice8_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice8_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice8_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice8_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice8_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice8_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice8_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice8_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice8_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->DrawIndexedPrimitive(a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->processVertices(a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->CreateVertexShader(a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice8_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->DeleteVertexShader(a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->SetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->GetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->GetVertexShaderDeclaration(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->GetVertexShaderFunction(a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->SetStreamSource(a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->GetStreamSource(a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b) (p)->SetIndices(a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b) (p)->GetIndices(a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice8_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice8_DeletePixelShader(p,a) (p)->DeletePixelShader(a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->SetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->GetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->GetPixelShaderFunction(a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a) (p)->DeletePatch(a)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/* Define the main entrypoint as well */
+IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_D3D8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h
new file mode 100644
index 00000000..0e139478
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/d3d9.h
@@ -0,0 +1,2047 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ * Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9_H
+#define __WINE_D3D9_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0900
+#endif
+
+
+
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+# ifndef __WINESRC__
+# include <windows.h>
+# endif
+#endif
+#include <d3d9types.h>
+#include <d3d9caps.h>
+#ifdef VBOX_WINE_WITHOUT_LIBWINE
+# include <d3dhal.h>
+# include <d3dtypes.h>
+# include <d3dcaps.h>
+#endif
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE 0x00000002L
+#define D3DCREATE_MULTITHREADED 0x00000004L
+#define D3DCREATE_PUREDEVICE 0x00000010L
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020L
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040L
+#define D3DCREATE_MIXED_VERTEXPROCESSING 0x00000080L
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT 0x00000100L
+#define D3DCREATE_ADAPTERGROUP_DEVICE 0x00000200L
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN 0x00000001L
+
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION 32
+#define D3DADAPTER_DEFAULT 0
+#define D3DENUM_NO_WHQL_LEVEL 0x00000002L
+#define D3DPRESENT_BACK_BUFFERS_MAX 3L
+#define D3DSGR_NO_CALIBRATION 0x00000000L
+#define D3DSGR_CALIBRATE 0x00000001L
+
+#define _FACD3D 0x876
+#define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code )
+#define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code )
+
+/*****************************************************************************
+ * Direct3D Errors
+ */
+#define D3D_OK S_OK
+#define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087)
+#define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157)
+#define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540)
+#define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159)
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D9, 0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);
+typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;
+
+DEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);
+typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;
+
+DEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);
+typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;
+
+DEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);
+typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;
+
+DEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);
+typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);
+typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);
+typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);
+typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);
+typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;
+
+DEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);
+typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);
+typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);
+typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);
+typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);
+typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);
+typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);
+typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;
+
+DEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);
+typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;
+
+DEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);
+typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;
+
+DEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);
+typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;
+
+DEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);
+typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
+
+/*****************************************************************************
+ * IDirect3D9 interface
+ */
+#define INTERFACE IDirect3D9
+DECLARE_INTERFACE_(IDirect3D9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D9 methods ***/
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+ STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+ STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+ STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+ STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9_AddRef(p) (p)->AddRef()
+#define IDirect3D9_Release(p) (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3D9Ex interface
+ */
+#define INTERFACE IDirect3D9Ex
+DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D9 methods ***/
+
+ /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that
+ * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's
+ * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9.
+ * This is probably because even in MS's header IDirect3D9Ex inherits from IDirect3D9, which makes the
+ * C++ inferface compatible, and nobody uses the C interface in Windows world.
+ */
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+
+ STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+ STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+ STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+ STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+ /*** IDirect3D9Ex methods ***/
+ STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter) PURE;
+ STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter, UINT Mode, D3DDISPLAYMODEEX* pMode) PURE;
+ STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
+ STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;
+ STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+/*** IDirect3D9Ex methods ***/
+#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)
+#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)
+#define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9Ex_AddRef(p) (p)->AddRef()
+#define IDirect3D9Ex_Release(p) (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume9 interface
+ */
+#define INTERFACE IDirect3DVolume9
+DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVolume9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;
+ STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;
+ STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolume9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolume9_Release(p) (p)->Release()
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c)
+#define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9 interface
+ */
+#define INTERFACE IDirect3DSwapChain9
+DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSwapChain9 methods ***/
+ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9_AddRef(p) (p)->AddRef()
+#define IDirect3DSwapChain9_Release(p) (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource9 interface
+ */
+#define INTERFACE IDirect3DResource9
+DECLARE_INTERFACE_(IDirect3DResource9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DResource9_AddRef(p) (p)->AddRef()
+#define IDirect3DResource9_Release(p) (p)->Release()
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DResource9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DResource9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DResource9_GetType(p) (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface9 interface
+ */
+#define INTERFACE IDirect3DSurface9
+DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DSurface9 methods ***/
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+ STDMETHOD(UnlockRect)(THIS) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)
+#define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSurface9_AddRef(p) (p)->AddRef()
+#define IDirect3DSurface9_Release(p) (p)->Release()
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DSurface9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DSurface9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DSurface9_GetType(p) (p)->GetType()
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c)
+#define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect()
+#define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a)
+#define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer9 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer9
+DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DVertexBuffer9 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer9_Release(p) (p)->Release()
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVertexBuffer9_GetType(p) (p)->GetType()
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer9 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer9
+DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DIndexBuffer9 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef()
+#define IDirect3DIndexBuffer9_Release(p) (p)->Release()
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DIndexBuffer9_GetType(p) (p)->GetType()
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock()
+#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture9 interface
+ */
+#define INTERFACE IDirect3DBaseTexture9
+DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DBaseTexture9_Release(p) (p)->Release()
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DBaseTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture9 interface
+ */
+#define INTERFACE IDirect3DCubeTexture9
+DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+ /*** IDirect3DCubeTexture9 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;
+ STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DCubeTexture9_Release(p) (p)->Release()
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DCubeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture9 interface
+ */
+#define INTERFACE IDirect3DTexture9
+DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+ /*** IDirect3DTexture9 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;
+ STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;
+ STDMETHOD(LockRect)(THIS_ UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture9_Release(p) (p)->Release()
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a)
+#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture9 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture9
+DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+ /*** IDirect3DVolumeTexture9 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;
+ STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;
+ STDMETHOD(LockBox)(THIS_ UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;
+ STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture9_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexDeclaration9 interface
+ */
+#define INTERFACE IDirect3DVertexDeclaration9
+DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVertexDeclaration9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexDeclaration9_Release(p) (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexShader9 interface
+ */
+#define INTERFACE IDirect3DVertexShader9
+DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVertexShader9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexShader9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexShader9_Release(p) (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DPixelShader9 interface
+ */
+#define INTERFACE IDirect3DPixelShader9
+DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DPixelShader9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DPixelShader9_AddRef(p) (p)->AddRef()
+#define IDirect3DPixelShader9_Release(p) (p)->Release()
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DStateBlock9 interface
+ */
+#define INTERFACE IDirect3DStateBlock9
+DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DStateBlock9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(Capture)(THIS) PURE;
+ STDMETHOD(Apply)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p)
+#define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DStateBlock9_AddRef(p) (p)->AddRef()
+#define IDirect3DStateBlock9_Release(p) (p)->Release()
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DStateBlock9_Capture(p) (p)->Capture()
+#define IDirect3DStateBlock9_Apply(p) (p)->Apply()
+#endif
+
+/*****************************************************************************
+ * IDirect3DQuery9 interface
+ */
+#define INTERFACE IDirect3DQuery9
+DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DQuery9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;
+ STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;
+ STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;
+ STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)
+#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->AddRef()
+#define IDirect3DQuery9_Release(p) (p)->Release()
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DQuery9_GetType(p) (p)->GetType()
+#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()
+#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice9 interface
+ */
+#define INTERFACE IDirect3DDevice9
+DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice9 methods ***/
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(EvictManagedResources)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+ STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+ STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+ STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+ STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
+ STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+ STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
+ STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
+ STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+ STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
+ STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+ STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+ STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
+ STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+ STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+ STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+ STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+ STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+ STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
+ STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+ STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+ STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+ STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+ STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+ STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+ STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+ STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice9_Release(p) (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources()
+#define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice9_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a)
+#define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a)
+#define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode()
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a)
+#define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a)
+#define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a)
+#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice9Ex interface
+ */
+#define INTERFACE IDirect3DDevice9Ex
+DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice9 methods ***/
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(EvictManagedResources)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+ STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+ STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+ STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+ STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+ STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;
+ STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+ STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;
+ STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;
+ STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+ STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;
+ STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+ STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+ STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;
+ STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+ STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+ STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+ STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+ STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+ STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;
+ STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+ STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+ STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+ STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+ STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+ STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+ STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+ STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+ /* IDirect3DDevice9Ex methods */
+ STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;
+ STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,
+ IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,
+ D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;
+ STDMETHOD(PresentEx)(THIS_ CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags) PURE;
+ STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE;
+ STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;
+ STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;
+ STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;
+ STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;
+ STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE;
+ STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;
+ STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+ STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+ STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,
+ D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,
+ IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;
+ STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;
+ STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice9Ex_Release(p) (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources()
+#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode()
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a)
+#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a)
+#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+int WINAPI D3DPERF_BeginEvent(D3DCOLOR,LPCWSTR);
+int WINAPI D3DPERF_EndEvent(void);
+DWORD WINAPI D3DPERF_GetStatus(void);
+BOOL WINAPI D3DPERF_QueryRepeatFrame(void);
+void WINAPI D3DPERF_SetMarker(D3DCOLOR,LPCWSTR);
+void WINAPI D3DPERF_SetOptions(DWORD);
+void WINAPI D3DPERF_SetRegion(D3DCOLOR,LPCWSTR);
+
+/* Define the main entrypoint as well */
+IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+
+#endif /* __WINE_D3D9_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h
new file mode 100644
index 00000000..4866a27b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/debug.h
@@ -0,0 +1,381 @@
+/*
+ * Wine debugging interface
+ *
+ * Copyright 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_DEBUG_H
+#define __WINE_WINE_DEBUG_H
+
+#include <windows.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef VBOX_WINE_WITH_IPRT
+# include <iprt/assert.h>
+#else
+# define AssertBreakpoint() do { } while (0)
+# define Assert(_expr) do { } while (0)
+# ifdef DEBUG_misha
+# include <iprt/cdefs.h>
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _GUID;
+
+//#ifdef DEBUG
+//# define VBOX_WINE_DEBUG
+//#endif
+
+#ifdef VBOX_WINE_DEBUG
+# ifndef VBOX_WINE_DEBUG_DEFINES
+extern DWORD g_VBoxVDbgBreakOnD3DErr;
+# else
+# ifdef DEBUG_misha
+# define _ERR_BREAK_DEFAULT 1
+# else
+# define _ERR_BREAK_DEFAULT 0
+# endif
+DWORD g_VBoxVDbgBreakOnD3DErr = _ERR_BREAK_DEFAULT;
+# endif
+
+# define _ERR_BREAK() Assert(0)
+# define _ERR_ASSERT(_e) Assert((_e))
+# define _ERR_CHECK_BREAK(_t) do { \
+ if (g_VBoxVDbgBreakOn##_t) { _ERR_BREAK(); } \
+ } while (0)
+# define _ERR_CHECK_ASSERT(_t, _e) do { \
+ if (g_VBoxVDbgBreakOn##_t) { _ERR_ASSERT(_e); } \
+ } while (0)
+
+# define ERR_D3D() _ERR_CHECK_BREAK(D3DErr)
+# define ASSERT_D3D(_e) _ERR_CHECK_ASSERT(D3DErr, _e)
+#else
+# define ERR_D3D() ERR("Error!");
+# define ASSERT_D3D(_e) do { \
+ if (!(_e)) \
+ { \
+ ERR("Error: Assertion failure expr (%s)", #_e); \
+ } \
+ } while (0)
+#endif /* #ifdef VBOX_WINE_DEBUG */
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+/*
+ * Internal definitions (do not use these directly)
+ */
+
+enum __wine_debug_class
+{
+ __WINE_DBCL_FIXME,
+ __WINE_DBCL_ERR,
+ __WINE_DBCL_WARN,
+ __WINE_DBCL_TRACE,
+
+ __WINE_DBCL_INIT = 7 /* lazy init flag */
+};
+
+struct __wine_debug_channel
+{
+ unsigned char flags;
+ char name[15];
+};
+
+#ifndef WINE_NO_TRACE_MSGS
+# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE))
+#else
+# define __WINE_GET_DEBUGGING_TRACE(dbch) 0
+#endif
+
+#ifndef WINE_NO_DEBUG_MSGS
+# define __WINE_GET_DEBUGGING_WARN(dbch) ((dbch)->flags & (1 << __WINE_DBCL_WARN))
+# if 0// && defined(DEBUG_misha)
+# define __WINE_GET_DEBUGGING_FIXME(dbch) (RT_BREAKPOINT(), ((dbch)->flags & (1 << __WINE_DBCL_FIXME)))
+# else
+# define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME))
+# endif
+#else
+# define __WINE_GET_DEBUGGING_WARN(dbch) 0
+# if 0 && defined(DEBUG_misha)
+# define __WINE_GET_DEBUGGING_FIXME(dbch) (RT_BREAKPOINT(), 0)
+# else
+# define __WINE_GET_DEBUGGING_FIXME(dbch) 0
+# endif
+#endif
+
+/* define error macro regardless of what is configured */
+#if defined(DEBUG_misha)
+#define __WINE_GET_DEBUGGING_ERR(dbch) (RT_BREAKPOINT(), ((dbch)->flags & (1 << __WINE_DBCL_ERR)))
+#else
+#define __WINE_GET_DEBUGGING_ERR(dbch) ((dbch)->flags & (1 << __WINE_DBCL_ERR))
+#endif
+
+#define __WINE_GET_DEBUGGING(dbcl,dbch) __WINE_GET_DEBUGGING##dbcl(dbch)
+
+#define __WINE_IS_DEBUG_ON(dbcl,dbch) \
+ (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl)))
+
+#ifdef __GNUC__
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+ struct __wine_debug_channel * const __dbch = (dbch); \
+ const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
+ __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(args...) \
+ wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(args...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(args...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(args...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#elif defined(__SUNPRO_C)
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+ struct __wine_debug_channel * const __dbch = (dbch); \
+ const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
+ __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(...) \
+ wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args)
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#else /* !__GNUC__ && !__SUNPRO_C */
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+ (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \
+ (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
+ (void)0 : (void)wine_dbg_printf
+
+#define __WINE_PRINTF_ATTR(fmt, args)
+
+#endif /* !__GNUC__ && !__SUNPRO_C */
+
+struct __wine_debug_functions
+{
+ char * (*get_temp_buffer)( size_t n );
+ void (*release_temp_buffer)( char *buffer, size_t n );
+ const char * (*dbgstr_an)( const char * s, int n );
+ const char * (*dbgstr_wn)( const WCHAR *s, int n );
+ int (*dbg_vprintf)( const char *format, va_list args );
+ int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+ const char *function, const char *format, va_list args );
+};
+
+extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel );
+extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+ unsigned char set, unsigned char clear );
+extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+ struct __wine_debug_functions *old_funcs, size_t size );
+
+/*
+ * Exported definitions and macros
+ */
+
+/* These functions return a printable version of a string, including
+ quotes. The string will be valid for some time, but not indefinitely
+ as strings are re-used. */
+extern const char *wine_dbgstr_an( const char * s, int n );
+extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
+extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+
+extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func,
+ const char *format, ... ) __WINE_PRINTF_ATTR(4,5);
+
+static inline const char *wine_dbgstr_a( const char *s )
+{
+ return wine_dbgstr_an( s, -1 );
+}
+
+static inline const char *wine_dbgstr_w( const WCHAR *s )
+{
+ return wine_dbgstr_wn( s, -1 );
+}
+
+static inline const char *wine_dbgstr_guid( const GUID *id )
+{
+ if (!id) return "(null)";
+ if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( "<guid-0x%04hx>", (WORD)(ULONG_PTR)id );
+ return wine_dbg_sprintf( "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+ id->Data1, id->Data2, id->Data3,
+ id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
+ id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
+}
+
+static inline const char *wine_dbgstr_point( const POINT *pt )
+{
+ if (!pt) return "(null)";
+ return wine_dbg_sprintf( "(%d,%d)", pt->x, pt->y );
+}
+
+static inline const char *wine_dbgstr_size( const SIZE *size )
+{
+ if (!size) return "(null)";
+ return wine_dbg_sprintf( "(%d,%d)", size->cx, size->cy );
+}
+
+static inline const char *wine_dbgstr_rect( const RECT *rect )
+{
+ if (!rect) return "(null)";
+ return wine_dbg_sprintf( "(%d,%d)-(%d,%d)", rect->left, rect->top,
+ rect->right, rect->bottom );
+}
+
+static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
+{
+ if (sizeof(ll) > sizeof(unsigned long) && ll >> 32)
+ return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
+ else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
+}
+
+#ifndef WINE_TRACE
+#define WINE_TRACE __WINE_DPRINTF(_TRACE,__wine_dbch___default)
+#define WINE_TRACE_(ch) __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)
+#endif
+#define WINE_TRACE_ON(ch) __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)
+
+#ifndef WINE_WARN
+#define WINE_WARN __WINE_DPRINTF(_WARN,__wine_dbch___default)
+#define WINE_WARN_(ch) __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)
+#endif
+#define WINE_WARN_ON(ch) __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)
+
+#ifndef WINE_FIXME
+#define WINE_FIXME __WINE_DPRINTF(_FIXME,__wine_dbch___default)
+#define WINE_FIXME_(ch) __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)
+#endif
+#define WINE_FIXME_ON(ch) __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)
+
+#define WINE_ERR __WINE_DPRINTF(_ERR,__wine_dbch___default)
+#define WINE_ERR_(ch) __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)
+#define WINE_ERR_ON(ch) __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)
+
+#define WINE_DECLARE_DEBUG_CHANNEL(ch) \
+ static struct __wine_debug_channel __wine_dbch_##ch = { /* was: ~0, VBox:*/ UINT8_MAX, #ch }
+#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \
+ static struct __wine_debug_channel __wine_dbch_##ch = { /* was: ~0, VBox:*/ UINT8_MAX, #ch }; \
+ static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch
+
+#define WINE_DPRINTF wine_dbg_printf
+#define WINE_MESSAGE wine_dbg_printf
+
+#ifdef __WINESRC__
+/* Wine uses shorter names that are very likely to conflict with other software */
+
+static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
+static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
+static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); }
+static inline const char *debugstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); }
+static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+#define TRACE WINE_TRACE
+#define TRACE_(ch) WINE_TRACE_(ch)
+#define TRACE_ON(ch) WINE_TRACE_ON(ch)
+
+#define WARN WINE_WARN
+#define WARN_(ch) WINE_WARN_(ch)
+#define WARN_ON(ch) WINE_WARN_ON(ch)
+
+#define FIXME WINE_FIXME
+#define FIXME_(ch) WINE_FIXME_(ch)
+#define FIXME_ON(ch) WINE_FIXME_ON(ch)
+
+#undef ERR /* Solaris got an 'ERR' define in <sys/reg.h> */
+#define ERR WINE_ERR
+#define ERR_(ch) WINE_ERR_(ch)
+#define ERR_ON(ch) WINE_ERR_ON(ch)
+
+#define DPRINTF WINE_DPRINTF
+#define MESSAGE WINE_MESSAGE
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#if 0//def DEBUG_misha
+# define VBOXWINEDBG_SHADERS
+#endif
+
+#if defined(VBOXWINEDBG_SHADERS) || defined(VBOX_WINE_WITH_PROFILE)
+#include <stdio.h>
+#include <stdarg.h>
+
+void vboxWDbgPrintF(char * szString, ...);
+#endif
+
+#ifdef VBOXWINEDBG_SHADERS
+# define WDLOG(_m) do {\
+ vboxWDbgPrintF _m ; \
+ } while (0)
+#else
+
+# define WDLOG(_m) do { } while (0)
+#endif
+
+#endif /* __WINE_WINE_DEBUG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h
new file mode 100644
index 00000000..466c406b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/guiddef.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID
+{
+#ifdef _MSC_VER
+ unsigned long Data1;
+#else
+ unsigned int Data1;
+#endif
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[ 8 ];
+} GUID;
+#endif
+
+#undef DEFINE_GUID
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name DECLSPEC_HIDDEN; \
+ EXTERN_C const GUID name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ const GUID name DECLSPEC_HIDDEN; \
+ const GUID name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#endif
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name DECLSPEC_HIDDEN
+#endif
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+#ifndef _GUIDDEF_H_
+#define _GUIDDEF_H_
+
+#ifndef __LPGUID_DEFINED__
+#define __LPGUID_DEFINED___
+typedef GUID *LPGUID;
+#endif
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef GUID IID,*LPIID;
+typedef GUID CLSID,*LPCLSID;
+typedef GUID FMTID,*LPFMTID;
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
+#define IID_NULL GUID_NULL
+#define CLSID_NULL GUID_NULL
+#define FMTID_NULL GUID_NULL
+
+#ifdef __midl_proxy
+#define __MIDL_CONST
+#else
+#define __MIDL_CONST const
+#endif
+
+#endif /* ndef __IID_DEFINED__ */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define REFGUID const GUID &
+#define REFCLSID const CLSID &
+#define REFIID const IID &
+#define REFFMTID const FMTID &
+#else /* !defined(__cplusplus) && !defined(CINTERFACE) */
+#define REFGUID const GUID* __MIDL_CONST
+#define REFCLSID const CLSID* __MIDL_CONST
+#define REFIID const IID* __MIDL_CONST
+#define REFFMTID const FMTID* __MIDL_CONST
+#endif /* !defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
+#else /* defined(__cplusplus) && !defined(CINTERFACE) */
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#endif /* defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#include <string.h>
+inline bool operator==(const GUID& guidOne, const GUID& guidOther)
+{
+ return !memcmp(&guidOne,&guidOther,sizeof(GUID));
+}
+inline bool operator!=(const GUID& guidOne, const GUID& guidOther)
+{
+ return !(guidOne == guidOther);
+}
+#endif
+
+extern const IID GUID_NULL;
+
+#endif /* _GUIDDEF_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h
new file mode 100644
index 00000000..33c7e1a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/initguid.h
@@ -0,0 +1,35 @@
+/*
+ * Defines a minimum set of macros create GUID's to keep the size
+ * small
+ *
+ * This file should be included into "only GUID definition *.h" like
+ * shlguid.h
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define INITGUID
+#include <guiddef.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h
new file mode 100644
index 00000000..fbe38e86
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/list.h
@@ -0,0 +1,246 @@
+/*
+ * Linked lists support
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SERVER_LIST_H
+#define __WINE_SERVER_LIST_H
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+struct list
+{
+ struct list *next;
+ struct list *prev;
+};
+
+/* Define a list like so:
+ *
+ * struct gadget
+ * {
+ * struct list entry; <-- doesn't have to be the first item in the struct
+ * int a, b;
+ * };
+ *
+ * static struct list global_gadgets = LIST_INIT( global_gadgets );
+ *
+ * or
+ *
+ * struct some_global_thing
+ * {
+ * struct list gadgets;
+ * };
+ *
+ * list_init( &some_global_thing->gadgets );
+ *
+ * Manipulate it like this:
+ *
+ * list_add_head( &global_gadgets, &new_gadget->entry );
+ * list_remove( &new_gadget->entry );
+ * list_add_after( &some_random_gadget->entry, &new_gadget->entry );
+ *
+ * And to iterate over it:
+ *
+ * struct gadget *gadget;
+ * LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
+ * {
+ * ...
+ * }
+ *
+ */
+
+/* add an element after the specified one */
+static inline void list_add_after( struct list *elem, struct list *to_add )
+{
+ to_add->next = elem->next;
+ to_add->prev = elem;
+ elem->next->prev = to_add;
+ elem->next = to_add;
+}
+
+/* add an element before the specified one */
+static inline void list_add_before( struct list *elem, struct list *to_add )
+{
+ to_add->next = elem;
+ to_add->prev = elem->prev;
+ elem->prev->next = to_add;
+ elem->prev = to_add;
+}
+
+/* add element at the head of the list */
+static inline void list_add_head( struct list *list, struct list *elem )
+{
+ list_add_after( list, elem );
+}
+
+/* add element at the tail of the list */
+static inline void list_add_tail( struct list *list, struct list *elem )
+{
+ list_add_before( list, elem );
+}
+
+/* remove an element from its list */
+static inline void list_remove( struct list *elem )
+{
+ elem->next->prev = elem->prev;
+ elem->prev->next = elem->next;
+}
+
+/* get the next element */
+static inline struct list *list_next( const struct list *list, const struct list *elem )
+{
+ struct list *ret = elem->next;
+ if (elem->next == list) ret = NULL;
+ return ret;
+}
+
+/* get the previous element */
+static inline struct list *list_prev( const struct list *list, const struct list *elem )
+{
+ struct list *ret = elem->prev;
+ if (elem->prev == list) ret = NULL;
+ return ret;
+}
+
+/* get the first element */
+static inline struct list *list_head( const struct list *list )
+{
+ return list_next( list, list );
+}
+
+/* get the last element */
+static inline struct list *list_tail( const struct list *list )
+{
+ return list_prev( list, list );
+}
+
+/* check if a list is empty */
+static inline int list_empty( const struct list *list )
+{
+ return list->next == list;
+}
+
+/* initialize a list */
+static inline void list_init( struct list *list )
+{
+ list->next = list->prev = list;
+}
+
+/* count the elements of a list */
+static inline unsigned int list_count( const struct list *list )
+{
+ unsigned count = 0;
+ const struct list *ptr;
+ for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
+ return count;
+}
+
+/* move all elements from src to the tail of dst */
+static inline void list_move_tail( struct list *dst, struct list *src )
+{
+ if (list_empty(src)) return;
+
+ dst->prev->next = src->next;
+ src->next->prev = dst->prev;
+ dst->prev = src->prev;
+ src->prev->next = dst;
+ list_init(src);
+}
+
+/* move all elements from src to the head of dst */
+static inline void list_move_head( struct list *dst, struct list *src )
+{
+ if (list_empty(src)) return;
+
+ dst->next->prev = src->prev;
+ src->prev->next = dst->next;
+ dst->next = src->next;
+ src->next->prev = dst;
+ list_init(src);
+}
+
+/* iterate through the list */
+#define LIST_FOR_EACH(cursor,list) \
+ for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
+
+/* iterate through the list, with safety against removal */
+#define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \
+ for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
+ (cursor) != (list); \
+ (cursor) = (cursor2), (cursor2) = (cursor)->next)
+
+/* iterate through the list using a list entry */
+#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \
+ for ((elem) = LIST_ENTRY((list)->next, type, field); \
+ &(elem)->field != (list); \
+ (elem) = LIST_ENTRY((elem)->field.next, type, field))
+
+/* iterate through the list using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
+ for ((cursor) = LIST_ENTRY((list)->next, type, field), \
+ (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \
+ &(cursor)->field != (list); \
+ (cursor) = (cursor2), \
+ (cursor2) = LIST_ENTRY((cursor)->field.next, type, field))
+
+/* iterate through the list in reverse order */
+#define LIST_FOR_EACH_REV(cursor,list) \
+ for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
+
+/* iterate through the list in reverse order, with safety against removal */
+#define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
+ for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
+ (cursor) != (list); \
+ (cursor) = (cursor2), (cursor2) = (cursor)->prev)
+
+/* iterate through the list in reverse order using a list entry */
+#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
+ for ((elem) = LIST_ENTRY((list)->prev, type, field); \
+ &(elem)->field != (list); \
+ (elem) = LIST_ENTRY((elem)->field.prev, type, field))
+
+/* iterate through the list in reverse order using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
+ for ((cursor) = LIST_ENTRY((list)->prev, type, field), \
+ (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \
+ &(cursor)->field != (list); \
+ (cursor) = (cursor2), \
+ (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field))
+
+/* macros for statically initialized lists */
+#undef LIST_INIT
+#define LIST_INIT(list) { &(list), &(list) }
+
+/* get pointer to object containing list element */
+#undef LIST_ENTRY
+#define LIST_ENTRY(elem, type, field) \
+ ((type *)((char *)(elem) - (uintptr_t)(&((type *)0)->field)))
+
+#endif /* __WINE_SERVER_LIST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h
new file mode 100644
index 00000000..f0dab581
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/port.h
@@ -0,0 +1,491 @@
+/*
+ * Wine porting definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_PORT_H
+#define __WINE_WINE_PORT_H
+
+#ifndef __WINE_CONFIG_H
+# error You must include config.h to use this header
+#endif
+
+#ifdef __WINE_BASETSD_H
+# error You must include port.h before all other headers
+#endif
+
+#define _GNU_SOURCE /* for pread/pwrite */
+#include <fcntl.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+#ifdef HAVE_PROCESS_H
+# include <process.h>
+#endif
+#include <string.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+/* Can't use windef.h here, cause it'd cause problems with NONAMELESSUNION/STRUCT later */
+#ifndef inline
+#define inline
+#endif
+
+/****************************************************************
+ * Type definitions
+ */
+
+#if !defined(_MSC_VER) && !defined(__int64)
+# if defined(__x86_64__) || defined(_WIN64)
+# define __int64 long
+# else
+# define __int64 long long
+# endif
+#endif
+
+#ifndef HAVE_MODE_T
+typedef int mode_t;
+#endif
+#ifndef HAVE_OFF_T
+typedef long off_t;
+#endif
+#ifndef HAVE_PID_T
+typedef int pid_t;
+#endif
+#ifndef HAVE_SIZE_T
+typedef unsigned int size_t;
+#endif
+#ifndef HAVE_SSIZE_T
+typedef int ssize_t;
+#endif
+#ifndef HAVE_FSBLKCNT_T
+typedef unsigned long fsblkcnt_t;
+#endif
+#ifndef HAVE_FSFILCNT_T
+typedef unsigned long fsfilcnt_t;
+#endif
+
+#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS
+struct statvfs
+{
+ unsigned long f_bsize;
+ unsigned long f_frsize;
+ fsblkcnt_t f_blocks;
+ fsblkcnt_t f_bfree;
+ fsblkcnt_t f_bavail;
+ fsfilcnt_t f_files;
+ fsfilcnt_t f_ffree;
+ fsfilcnt_t f_favail;
+ unsigned long f_fsid;
+ unsigned long f_flag;
+ unsigned long f_namemax;
+};
+#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */
+
+
+/****************************************************************
+ * Macro definitions
+ */
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+#define RTLD_LAZY 0x001
+#define RTLD_NOW 0x002
+#define RTLD_GLOBAL 0x100
+#endif
+
+#ifdef HAVE_ONE_ARG_MKDIR
+#define mkdir(path,mode) mkdir(path)
+#endif
+
+#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)
+#define ftruncate chsize
+#endif
+
+#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)
+#define popen _popen
+#endif
+
+#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)
+#define pclose _pclose
+#endif
+
+#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)
+#define strdup _strdup
+#endif
+
+#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)
+#define snprintf _snprintf
+#endif
+
+#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)
+#define vsnprintf _vsnprintf
+#endif
+
+#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)
+#define strtoll _strtoi64
+#endif
+
+#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)
+#define strtoull _strtoui64
+#endif
+
+#ifndef S_ISLNK
+# define S_ISLNK(mod) (0)
+#endif
+
+#ifndef S_ISSOCK
+# define S_ISSOCK(mod) (0)
+#endif
+
+#ifndef S_ISDIR
+# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)
+#endif
+
+#ifndef S_ISCHR
+# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)
+#endif
+
+#ifndef S_ISFIFO
+# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)
+#endif
+
+#ifndef S_ISREG
+# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)
+#endif
+
+/* So we open files in 64 bit access mode on Linux */
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK 0
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/****************************************************************
+ * Constants
+ */
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#ifndef M_PI_2
+#define M_PI_2 1.570796326794896619
+#endif
+
+
+/****************************************************************
+ * Function definitions (only when using libwine_port)
+ */
+
+#ifndef NO_LIBWINE_PORT
+
+#ifndef HAVE_FSTATVFS
+int fstatvfs( int fd, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_GETOPT_LONG
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+struct option;
+
+#ifndef HAVE_STRUCT_OPTION_NAME
+struct option
+{
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+};
+#endif
+
+extern int getopt_long (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind);
+extern int getopt_long_only (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind);
+#endif /* HAVE_GETOPT_LONG */
+
+#ifndef HAVE_FFS
+int ffs( int x );
+#endif
+
+#ifndef HAVE_FUTIMES
+struct timeval;
+int futimes(int fd, const struct timeval *tv);
+#endif
+
+#ifndef HAVE_GETPAGESIZE
+size_t getpagesize(void);
+#endif /* HAVE_GETPAGESIZE */
+
+#ifndef HAVE_GETTID
+pid_t gettid(void);
+#endif /* HAVE_GETTID */
+
+#ifndef HAVE_ISINF
+# undef isinf /* VBox: _MSC_VER >= RT_MSC_VER_VC120 has complicated macro implementation in math.h */
+int isinf(double x);
+#endif
+
+#ifndef HAVE_ISNAN
+# undef isnan /* VBox: _MSC_VER >= RT_MSC_VER_VC120 has complicated macro implementation in math.h */
+int isnan(double x);
+#endif
+
+#ifndef HAVE_LSTAT
+int lstat(const char *file_name, struct stat *buf);
+#endif /* HAVE_LSTAT */
+
+#ifndef HAVE_MEMMOVE
+void *memmove(void *dest, const void *src, size_t len);
+#endif /* !defined(HAVE_MEMMOVE) */
+
+#ifndef HAVE_POLL
+struct pollfd
+{
+ int fd;
+ short events;
+ short revents;
+};
+#define POLLIN 0x01
+#define POLLPRI 0x02
+#define POLLOUT 0x04
+#define POLLERR 0x08
+#define POLLHUP 0x10
+#define POLLNVAL 0x20
+int poll( struct pollfd *fds, unsigned int count, int timeout );
+#endif /* HAVE_POLL */
+
+#ifndef HAVE_PREAD
+ssize_t pread( int fd, void *buf, size_t count, off_t offset );
+#endif /* HAVE_PREAD */
+
+#ifndef HAVE_PWRITE
+ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );
+#endif /* HAVE_PWRITE */
+
+#ifndef HAVE_READLINK
+int readlink( const char *path, char *buf, size_t size );
+#endif /* HAVE_READLINK */
+
+#ifndef HAVE_STATVFS
+int statvfs( const char *path, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_STRNCASECMP
+# ifndef HAVE__STRNICMP
+int strncasecmp(const char *str1, const char *str2, size_t n);
+# else
+# define strncasecmp _strnicmp
+# endif
+#endif /* !defined(HAVE_STRNCASECMP) */
+
+#ifndef HAVE_STRERROR
+const char *strerror(int err);
+#endif /* !defined(HAVE_STRERROR) */
+
+#ifndef HAVE_STRCASECMP
+# ifndef HAVE__STRICMP
+int strcasecmp(const char *str1, const char *str2);
+# else
+# define strcasecmp _stricmp
+# endif
+#endif /* !defined(HAVE_STRCASECMP) */
+
+#ifndef HAVE_SYMLINK
+int symlink(const char *from, const char *to);
+#endif
+
+#ifndef HAVE_USLEEP
+int usleep (unsigned int useconds);
+#endif /* !defined(HAVE_USLEEP) */
+
+#ifdef __i386__
+static inline void *memcpy_unaligned( void *dst, const void *src, size_t size )
+{
+ return memcpy( dst, src, size );
+}
+#else
+extern void *memcpy_unaligned( void *dst, const void *src, size_t size );
+#endif /* __i386__ */
+
+extern int mkstemps(char *template, int suffix_len);
+
+/* Process creation flags */
+#ifndef _P_WAIT
+# define _P_WAIT 0
+# define _P_NOWAIT 1
+# define _P_OVERLAY 2
+# define _P_NOWAITO 3
+# define _P_DETACH 4
+#endif
+#ifndef HAVE_SPAWNVP
+extern int spawnvp(int mode, const char *cmdname, const char * const argv[]);
+#endif
+
+/* Interlocked functions */
+
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern inline int interlocked_xchg( int *dest, int val );
+extern inline void *interlocked_xchg_ptr( void **dest, void *val );
+extern inline int interlocked_xchg_add( int *dest, int incr );
+
+extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare )
+{
+ int ret;
+ __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+ return ret;
+}
+
+extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )
+{
+ void *ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( "lock; cmpxchgq %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#else
+ __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#endif
+ return ret;
+}
+
+extern inline int interlocked_xchg( int *dest, int val )
+{
+ int ret;
+ __asm__ __volatile__( "lock; xchgl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+ return ret;
+}
+
+extern inline void *interlocked_xchg_ptr( void **dest, void *val )
+{
+ void *ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( "lock; xchgq %0,(%1)"
+ : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+ __asm__ __volatile__( "lock; xchgl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+#endif
+ return ret;
+}
+
+extern inline int interlocked_xchg_add( int *dest, int incr )
+{
+ int ret;
+ __asm__ __volatile__( "lock; xaddl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+ return ret;
+}
+
+#ifdef __x86_64__
+extern inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+ __int64 xchg_low, __int64 *compare );
+extern inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+ __int64 xchg_low, __int64 *compare )
+{
+ unsigned char ret;
+ __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
+ : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
+ "=a" (compare[0]), "=d" (compare[1])
+ : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
+ "c" (xchg_high), "b" (xchg_low) );
+ return ret;
+}
+#endif
+
+#else /* __GNUC__ */
+
+extern int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern int interlocked_xchg( int *dest, int val );
+extern void *interlocked_xchg_ptr( void **dest, void *val );
+extern int interlocked_xchg_add( int *dest, int incr );
+#ifdef _WIN64
+extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+ __int64 xchg_low, __int64 *compare );
+#endif
+
+#endif /* __GNUC__ */
+
+#else /* NO_LIBWINE_PORT */
+
+#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable
+
+#define ffs __WINE_NOT_PORTABLE(ffs)
+#define fstatvfs __WINE_NOT_PORTABLE(fstatvfs)
+#define futimes __WINE_NOT_PORTABLE(futimes)
+#define getopt_long __WINE_NOT_PORTABLE(getopt_long)
+#define getopt_long_only __WINE_NOT_PORTABLE(getopt_long_only)
+#define getpagesize __WINE_NOT_PORTABLE(getpagesize)
+#define interlocked_cmpxchg __WINE_NOT_PORTABLE(interlocked_cmpxchg)
+#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)
+#define interlocked_xchg __WINE_NOT_PORTABLE(interlocked_xchg)
+#define interlocked_xchg_ptr __WINE_NOT_PORTABLE(interlocked_xchg_ptr)
+#define interlocked_xchg_add __WINE_NOT_PORTABLE(interlocked_xchg_add)
+#define lstat __WINE_NOT_PORTABLE(lstat)
+#define memcpy_unaligned __WINE_NOT_PORTABLE(memcpy_unaligned)
+#undef memmove
+#define memmove __WINE_NOT_PORTABLE(memmove)
+#define pread __WINE_NOT_PORTABLE(pread)
+#define pwrite __WINE_NOT_PORTABLE(pwrite)
+#define spawnvp __WINE_NOT_PORTABLE(spawnvp)
+#define statvfs __WINE_NOT_PORTABLE(statvfs)
+#define strcasecmp __WINE_NOT_PORTABLE(strcasecmp)
+#define strerror __WINE_NOT_PORTABLE(strerror)
+#define strncasecmp __WINE_NOT_PORTABLE(strncasecmp)
+#define usleep __WINE_NOT_PORTABLE(usleep)
+
+#endif /* NO_LIBWINE_PORT */
+
+#endif /* !defined(__WINE_WINE_PORT_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h
new file mode 100644
index 00000000..cda5fd4d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/rbtree.h
@@ -0,0 +1,357 @@
+/*
+ * Red-black search tree support
+ *
+ * Copyright 2009 Henri Verbeet
+ * Copyright 2009 Andrew Riedi
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_RBTREE_H
+#define __WINE_WINE_RBTREE_H
+
+#ifdef inline
+#undef inline
+#endif
+#define inline __inline
+
+
+#define WINE_RB_ENTRY_VALUE(element, type, field) \
+ ((type *)((char *)(element) - FIELD_OFFSET(type, field)))
+
+struct wine_rb_entry
+{
+ struct wine_rb_entry *left;
+ struct wine_rb_entry *right;
+ unsigned int flags;
+};
+
+struct wine_rb_stack
+{
+ struct wine_rb_entry ***entries;
+ size_t count;
+ size_t size;
+};
+
+struct wine_rb_functions
+{
+ void *(*alloc)(size_t size);
+ void *(*realloc)(void *ptr, size_t size);
+ void (*free)(void *ptr);
+ int (*compare)(const void *key, const struct wine_rb_entry *entry);
+};
+
+struct wine_rb_tree
+{
+ const struct wine_rb_functions *functions;
+ struct wine_rb_entry *root;
+ struct wine_rb_stack stack;
+};
+
+typedef void (wine_rb_traverse_func_t)(struct wine_rb_entry *entry, void *context);
+
+#define WINE_RB_FLAG_RED 0x1
+#define WINE_RB_FLAG_STOP 0x2
+#define WINE_RB_FLAG_TRAVERSED_LEFT 0x4
+#define WINE_RB_FLAG_TRAVERSED_RIGHT 0x8
+
+static inline void wine_rb_stack_clear(struct wine_rb_stack *stack)
+{
+ stack->count = 0;
+}
+
+static inline void wine_rb_stack_push(struct wine_rb_stack *stack, struct wine_rb_entry **entry)
+{
+ stack->entries[stack->count++] = entry;
+}
+
+static inline int wine_rb_ensure_stack_size(struct wine_rb_tree *tree, size_t size)
+{
+ struct wine_rb_stack *stack = &tree->stack;
+
+ if (size > stack->size)
+ {
+ size_t new_size = stack->size << 1;
+ struct wine_rb_entry ***new_entries = tree->functions->realloc(stack->entries,
+ new_size * sizeof(*stack->entries));
+
+ if (!new_entries) return -1;
+
+ stack->entries = new_entries;
+ stack->size = new_size;
+ }
+
+ return 0;
+}
+
+static inline int wine_rb_is_red(struct wine_rb_entry *entry)
+{
+ return entry && (entry->flags & WINE_RB_FLAG_RED);
+}
+
+static inline void wine_rb_rotate_left(struct wine_rb_entry **entry)
+{
+ struct wine_rb_entry *e = *entry;
+ struct wine_rb_entry *right = e->right;
+
+ e->right = right->left;
+ right->left = e;
+ right->flags &= ~WINE_RB_FLAG_RED;
+ right->flags |= e->flags & WINE_RB_FLAG_RED;
+ e->flags |= WINE_RB_FLAG_RED;
+ *entry = right;
+}
+
+static inline void wine_rb_rotate_right(struct wine_rb_entry **entry)
+{
+ struct wine_rb_entry *e = *entry;
+ struct wine_rb_entry *left = e->left;
+
+ e->left = left->right;
+ left->right = e;
+ left->flags &= ~WINE_RB_FLAG_RED;
+ left->flags |= e->flags & WINE_RB_FLAG_RED;
+ e->flags |= WINE_RB_FLAG_RED;
+ *entry = left;
+}
+
+static inline void wine_rb_flip_color(struct wine_rb_entry *entry)
+{
+ entry->flags ^= WINE_RB_FLAG_RED;
+ entry->left->flags ^= WINE_RB_FLAG_RED;
+ entry->right->flags ^= WINE_RB_FLAG_RED;
+}
+
+static inline void wine_rb_fixup(struct wine_rb_stack *stack)
+{
+ while (stack->count)
+ {
+ struct wine_rb_entry **entry = stack->entries[stack->count - 1];
+
+ if ((*entry)->flags & WINE_RB_FLAG_STOP)
+ {
+ (*entry)->flags &= ~WINE_RB_FLAG_STOP;
+ return;
+ }
+
+ if (wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->left)) wine_rb_rotate_left(entry);
+ if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->left->left)) wine_rb_rotate_right(entry);
+ if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->right)) wine_rb_flip_color(*entry);
+ --stack->count;
+ }
+}
+
+static inline void wine_rb_move_red_left(struct wine_rb_entry **entry)
+{
+ wine_rb_flip_color(*entry);
+ if (wine_rb_is_red((*entry)->right->left))
+ {
+ wine_rb_rotate_right(&(*entry)->right);
+ wine_rb_rotate_left(entry);
+ wine_rb_flip_color(*entry);
+ }
+}
+
+static inline void wine_rb_move_red_right(struct wine_rb_entry **entry)
+{
+ wine_rb_flip_color(*entry);
+ if (wine_rb_is_red((*entry)->left->left))
+ {
+ wine_rb_rotate_right(entry);
+ wine_rb_flip_color(*entry);
+ }
+}
+
+static inline void wine_rb_postorder(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+ struct wine_rb_entry **entry;
+
+ if (!tree->root) return;
+
+ for (entry = &tree->root;;)
+ {
+ struct wine_rb_entry *e = *entry;
+
+ if (e->left && !(e->flags & WINE_RB_FLAG_TRAVERSED_LEFT))
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ e->flags |= WINE_RB_FLAG_TRAVERSED_LEFT;
+ entry = &e->left;
+ continue;
+ }
+
+ if (e->right && !(e->flags & WINE_RB_FLAG_TRAVERSED_RIGHT))
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ e->flags |= WINE_RB_FLAG_TRAVERSED_RIGHT;
+ entry = &e->right;
+ continue;
+ }
+
+ e->flags &= ~(WINE_RB_FLAG_TRAVERSED_LEFT | WINE_RB_FLAG_TRAVERSED_RIGHT);
+ callback(e, context);
+
+ if (!tree->stack.count) break;
+ entry = tree->stack.entries[--tree->stack.count];
+ }
+}
+
+static inline int wine_rb_init(struct wine_rb_tree *tree, const struct wine_rb_functions *functions)
+{
+ tree->functions = functions;
+ tree->root = NULL;
+
+ tree->stack.entries = functions->alloc(16 * sizeof(*tree->stack.entries));
+ if (!tree->stack.entries) return -1;
+ tree->stack.size = 16;
+ tree->stack.count = 0;
+
+ return 0;
+}
+
+static inline void wine_rb_for_each_entry(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+ wine_rb_postorder(tree, callback, context);
+}
+
+static inline void wine_rb_destroy(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+ /* Note that we use postorder here because the callback will likely free the entry. */
+ if (callback) wine_rb_postorder(tree, callback, context);
+
+ tree->root = NULL;
+ tree->functions->free(tree->stack.entries);
+}
+
+static inline struct wine_rb_entry *wine_rb_get(const struct wine_rb_tree *tree, const void *key)
+{
+ struct wine_rb_entry *entry = tree->root;
+ while (entry)
+ {
+ int c = tree->functions->compare(key, entry);
+ if (!c) return entry;
+ entry = c < 0 ? entry->left : entry->right;
+ }
+ return NULL;
+}
+
+static inline int wine_rb_put(struct wine_rb_tree *tree, const void *key, struct wine_rb_entry *entry)
+{
+ struct wine_rb_entry **parent = &tree->root;
+ size_t black_height = 1;
+
+ while (*parent)
+ {
+ int c;
+
+ if (!wine_rb_is_red(*parent)) ++black_height;
+
+ wine_rb_stack_push(&tree->stack, parent);
+
+ c = tree->functions->compare(key, *parent);
+ if (!c)
+ {
+ wine_rb_stack_clear(&tree->stack);
+ return -1;
+ }
+ else if (c < 0) parent = &(*parent)->left;
+ else parent = &(*parent)->right;
+ }
+
+ /* After insertion, the path length to any node should be <= (black_height + 1) * 2. */
+ if (wine_rb_ensure_stack_size(tree, black_height << 1) == -1)
+ {
+ wine_rb_stack_clear(&tree->stack);
+ return -1;
+ }
+
+ entry->flags = WINE_RB_FLAG_RED;
+ entry->left = NULL;
+ entry->right = NULL;
+ *parent = entry;
+
+ wine_rb_fixup(&tree->stack);
+ tree->root->flags &= ~WINE_RB_FLAG_RED;
+
+ return 0;
+}
+
+static inline void wine_rb_remove(struct wine_rb_tree *tree, const void *key)
+{
+ struct wine_rb_entry **entry = &tree->root;
+
+ while (*entry)
+ {
+ if (tree->functions->compare(key, *entry) < 0)
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ if (!wine_rb_is_red((*entry)->left) && !wine_rb_is_red((*entry)->left->left)) wine_rb_move_red_left(entry);
+ entry = &(*entry)->left;
+ }
+ else
+ {
+ if (wine_rb_is_red((*entry)->left)) wine_rb_rotate_right(entry);
+ if (!tree->functions->compare(key, *entry) && !(*entry)->right)
+ {
+ *entry = NULL;
+ break;
+ }
+ if (!wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->right->left))
+ wine_rb_move_red_right(entry);
+ if (!tree->functions->compare(key, *entry))
+ {
+ struct wine_rb_entry **e = &(*entry)->right;
+ struct wine_rb_entry *m = *e;
+ while (m->left) m = m->left;
+
+ wine_rb_stack_push(&tree->stack, entry);
+ (*entry)->flags |= WINE_RB_FLAG_STOP;
+
+ while ((*e)->left)
+ {
+ wine_rb_stack_push(&tree->stack, e);
+ if (!wine_rb_is_red((*e)->left) && !wine_rb_is_red((*e)->left->left)) wine_rb_move_red_left(e);
+ e = &(*e)->left;
+ }
+ *e = NULL;
+ wine_rb_fixup(&tree->stack);
+
+ *m = **entry;
+ *entry = m;
+
+ break;
+ }
+ else
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ entry = &(*entry)->right;
+ }
+ }
+ }
+
+ wine_rb_fixup(&tree->stack);
+ if (tree->root) tree->root->flags &= ~WINE_RB_FLAG_RED;
+}
+
+#endif /* __WINE_WINE_RBTREE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h
new file mode 100644
index 00000000..9f3185cd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/unicode.h
@@ -0,0 +1,355 @@
+/*
+ * Wine internal Unicode definitions
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_UNICODE_H
+#define __WINE_WINE_UNICODE_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINE_UNICODE_API
+# if defined(_MSC_VER) || defined(__MINGW32__)
+# define WINE_UNICODE_API DECLSPEC_IMPORT
+# else
+# define WINE_UNICODE_API
+# endif
+#endif
+
+/*#ifndef WINE_UNICODE_INLINE
+#define WINE_UNICODE_INLINE extern inline
+#endif*/
+#define WINE_UNICODE_INLINE static __inline
+
+/* code page info common to SBCS and DBCS */
+struct cp_info
+{
+ unsigned int codepage; /* codepage id */
+ unsigned int char_size; /* char size (1 or 2 bytes) */
+ WCHAR def_char; /* default char value (can be double-byte) */
+ WCHAR def_unicode_char; /* default Unicode char value */
+ const char *name; /* code page name */
+};
+
+struct sbcs_table
+{
+ struct cp_info info;
+ const WCHAR *cp2uni; /* code page -> Unicode map */
+ const WCHAR *cp2uni_glyphs; /* code page -> Unicode map with glyph chars */
+ const unsigned char *uni2cp_low; /* Unicode -> code page map */
+ const unsigned short *uni2cp_high;
+};
+
+struct dbcs_table
+{
+ struct cp_info info;
+ const WCHAR *cp2uni; /* code page -> Unicode map */
+ const unsigned char *cp2uni_leadbytes;
+ const unsigned short *uni2cp_low; /* Unicode -> code page map */
+ const unsigned short *uni2cp_high;
+ unsigned char lead_bytes[12]; /* lead bytes ranges */
+};
+
+union cptable
+{
+ struct cp_info info;
+ struct sbcs_table sbcs;
+ struct dbcs_table dbcs;
+};
+
+extern const union cptable *wine_cp_get_table( unsigned int codepage );
+extern const union cptable *wine_cp_enum_table( unsigned int index );
+
+extern int wine_cp_mbstowcs( const union cptable *table, int flags,
+ const char *src, int srclen,
+ WCHAR *dst, int dstlen );
+extern int wine_cp_wcstombs( const union cptable *table, int flags,
+ const WCHAR *src, int srclen,
+ char *dst, int dstlen, const char *defchar, int *used );
+extern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+
+extern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 );
+extern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen );
+
+extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );
+extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );
+extern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n );
+extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
+extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern int sprintfW( WCHAR *str, const WCHAR *format, ... );
+extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );
+extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );
+extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );
+
+#ifdef WINE_UNICODE_INLINE
+
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch );
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
+{
+ return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
+}
+
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )
+{
+ extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];
+ return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch );
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )
+{
+ extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];
+ return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
+}
+
+/* the character type contains the C1_* flags in the low 12 bits */
+/* and the C2_* type in the high 4 bits */
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch );
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )
+{
+ extern WINE_UNICODE_API const unsigned short wine_wctype_table[];
+ return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc );
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_CNTRL;
+}
+
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc );
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_PUNCT;
+}
+
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc );
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_SPACE;
+}
+
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_DIGIT;
+}
+
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc );
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_XDIGIT;
+}
+
+WINE_UNICODE_INLINE int islowerW( WCHAR wc );
+WINE_UNICODE_INLINE int islowerW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_LOWER;
+}
+
+WINE_UNICODE_INLINE int isupperW( WCHAR wc );
+WINE_UNICODE_INLINE int isupperW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_UPPER;
+}
+
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc );
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc );
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc );
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isprintW( WCHAR wc );
+WINE_UNICODE_INLINE int isprintW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+/* some useful string manipulation routines */
+
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str );
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )
+{
+ const WCHAR *s = str;
+ while (*s) s++;
+ return s - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
+{
+ WCHAR *p = dst;
+ while ((*p++ = *src++));
+ return dst;
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead
+
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 );
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+ while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+ return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n );
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+{
+ if (n <= 0) return 0;
+ while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
+ return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src );
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
+{
+ strcpyW( dst + strlenW(dst), src );
+ return dst;
+}
+
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+{
+ do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);
+ return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch );
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
+{
+ WCHAR *ret = NULL;
+ do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);
+ return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
+{
+ for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;
+ return NULL;
+}
+
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept );
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )
+{
+ const WCHAR *ptr;
+ for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
+ return ptr - str;
+}
+
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject );
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )
+{
+ const WCHAR *ptr;
+ for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
+ return ptr - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )
+{
+ WCHAR *ret = str;
+ while ((*str = tolowerW(*str))) str++;
+ return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str );
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )
+{
+ WCHAR *ret = str;
+ while ((*str = toupperW(*str))) str++;
+ return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+ const WCHAR *end;
+ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;
+ return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n );
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+ const WCHAR *end;
+ WCHAR *ret = NULL;
+ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;
+ return ret;
+}
+
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str );
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str )
+{
+ return strtolW( str, (WCHAR **)0, 10 );
+}
+
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str );
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str )
+{
+ return (int)atolW( str );
+}
+#endif //#ifdef WINE_UNICODE_INLINE
+
+#undef WINE_UNICODE_INLINE
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINE_UNICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h
new file mode 100644
index 00000000..5dbf7a46
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/libWineStub/include/wine/wined3d.h
@@ -0,0 +1,9725 @@
+/*** Autogenerated by WIDL 1.1.43 from ../../include/wine/wined3d.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WINED3D_H
+#define __WIDL_WINED3D_H
+
+#ifdef VBOX_WITH_WDDM
+#include "../../../vbox/VBoxWineEx.h"
+#endif
+
+# define DECLSPEC_HIDDEN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IWineD3DDeviceParent_FWD_DEFINED__
+#define __IWineD3DDeviceParent_FWD_DEFINED__
+typedef interface IWineD3DDeviceParent IWineD3DDeviceParent;
+#endif
+
+#ifndef __IWineD3DBase_FWD_DEFINED__
+#define __IWineD3DBase_FWD_DEFINED__
+typedef interface IWineD3DBase IWineD3DBase;
+#endif
+
+#ifndef __IWineD3D_FWD_DEFINED__
+#define __IWineD3D_FWD_DEFINED__
+typedef interface IWineD3D IWineD3D;
+#endif
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DRendertargetView_FWD_DEFINED__
+#define __IWineD3DRendertargetView_FWD_DEFINED__
+typedef interface IWineD3DRendertargetView IWineD3DRendertargetView;
+#endif
+
+#ifndef __IWineD3DPalette_FWD_DEFINED__
+#define __IWineD3DPalette_FWD_DEFINED__
+typedef interface IWineD3DPalette IWineD3DPalette;
+#endif
+
+#ifndef __IWineD3DClipper_FWD_DEFINED__
+#define __IWineD3DClipper_FWD_DEFINED__
+typedef interface IWineD3DClipper IWineD3DClipper;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DBaseTexture_FWD_DEFINED__
+#define __IWineD3DBaseTexture_FWD_DEFINED__
+typedef interface IWineD3DBaseTexture IWineD3DBaseTexture;
+#endif
+
+#ifndef __IWineD3DTexture_FWD_DEFINED__
+#define __IWineD3DTexture_FWD_DEFINED__
+typedef interface IWineD3DTexture IWineD3DTexture;
+#endif
+
+#ifndef __IWineD3DCubeTexture_FWD_DEFINED__
+#define __IWineD3DCubeTexture_FWD_DEFINED__
+typedef interface IWineD3DCubeTexture IWineD3DCubeTexture;
+#endif
+
+#ifndef __IWineD3DVolumeTexture_FWD_DEFINED__
+#define __IWineD3DVolumeTexture_FWD_DEFINED__
+typedef interface IWineD3DVolumeTexture IWineD3DVolumeTexture;
+#endif
+
+#ifndef __IWineD3DVertexDeclaration_FWD_DEFINED__
+#define __IWineD3DVertexDeclaration_FWD_DEFINED__
+typedef interface IWineD3DVertexDeclaration IWineD3DVertexDeclaration;
+#endif
+
+#ifndef __IWineD3DStateBlock_FWD_DEFINED__
+#define __IWineD3DStateBlock_FWD_DEFINED__
+typedef interface IWineD3DStateBlock IWineD3DStateBlock;
+#endif
+
+#ifndef __IWineD3DQuery_FWD_DEFINED__
+#define __IWineD3DQuery_FWD_DEFINED__
+typedef interface IWineD3DQuery IWineD3DQuery;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DBuffer_FWD_DEFINED__
+#define __IWineD3DBuffer_FWD_DEFINED__
+typedef interface IWineD3DBuffer IWineD3DBuffer;
+#endif
+
+#ifndef __IWineD3DBaseShader_FWD_DEFINED__
+#define __IWineD3DBaseShader_FWD_DEFINED__
+typedef interface IWineD3DBaseShader IWineD3DBaseShader;
+#endif
+
+#ifndef __IWineD3DVertexShader_FWD_DEFINED__
+#define __IWineD3DVertexShader_FWD_DEFINED__
+typedef interface IWineD3DVertexShader IWineD3DVertexShader;
+#endif
+
+#ifndef __IWineD3DGeometryShader_FWD_DEFINED__
+#define __IWineD3DGeometryShader_FWD_DEFINED__
+typedef interface IWineD3DGeometryShader IWineD3DGeometryShader;
+#endif
+
+#ifndef __IWineD3DPixelShader_FWD_DEFINED__
+#define __IWineD3DPixelShader_FWD_DEFINED__
+typedef interface IWineD3DPixelShader IWineD3DPixelShader;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+
+#if 0
+typedef HANDLE HMONITOR;
+typedef struct _RGNDATAHEADER {
+ DWORD dwSize;
+ DWORD iType;
+ DWORD nCount;
+ DWORD nRgnSize;
+ RECT rcBound;
+} RGNDATAHEADER;
+typedef struct _RGNDATA {
+ RGNDATAHEADER rdh;
+ char Buffer[1];
+} RGNDATA;
+typedef struct _LUID {
+ DWORD LowPart;
+ LONG HighPart;
+} LUID;
+typedef struct _LUID *PLUID;
+#endif
+#define WINED3D_OK S_OK
+#define _FACWINED3D (0x876)
+
+#define MAKE_WINED3DSTATUS(code) MAKE_HRESULT(0, _FACWINED3D, code)
+#define WINED3DOK_NOAUTOGEN MAKE_WINED3DSTATUS(2159)
+#define MAKE_WINED3DHRESULT(code) MAKE_HRESULT(1, _FACWINED3D, code)
+#define WINED3DERR_WRONGTEXTUREFORMAT MAKE_WINED3DHRESULT(2072)
+#define WINED3DERR_UNSUPPORTEDCOLOROPERATION MAKE_WINED3DHRESULT(2073)
+#define WINED3DERR_UNSUPPORTEDCOLORARG MAKE_WINED3DHRESULT(2074)
+#define WINED3DERR_UNSUPPORTEDALPHAOPERATION MAKE_WINED3DHRESULT(2075)
+#define WINED3DERR_UNSUPPORTEDALPHAARG MAKE_WINED3DHRESULT(2076)
+#define WINED3DERR_TOOMANYOPERATIONS MAKE_WINED3DHRESULT(2077)
+#define WINED3DERR_CONFLICTINGTEXTUREFILTER MAKE_WINED3DHRESULT(2078)
+#define WINED3DERR_UNSUPPORTEDFACTORVALUE MAKE_WINED3DHRESULT(2079)
+#define WINED3DERR_CONFLICTINGRENDERSTATE MAKE_WINED3DHRESULT(2081)
+#define WINED3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_WINED3DHRESULT(2082)
+#define WINED3DERR_CONFLICTINGTEXTUREPALETTE MAKE_WINED3DHRESULT(2086)
+#define WINED3DERR_DRIVERINTERNALERROR MAKE_WINED3DHRESULT(2087)
+#define WINED3DERR_NOTFOUND MAKE_WINED3DHRESULT(2150)
+#define WINED3DERR_MOREDATA MAKE_WINED3DHRESULT(2151)
+#define WINED3DERR_DEVICELOST MAKE_WINED3DHRESULT(2152)
+#define WINED3DERR_DEVICENOTRESET MAKE_WINED3DHRESULT(2153)
+#define WINED3DERR_NOTAVAILABLE MAKE_WINED3DHRESULT(2154)
+#define WINED3DERR_OUTOFVIDEOMEMORY MAKE_WINED3DHRESULT(380)
+#define WINED3DERR_INVALIDDEVICE MAKE_WINED3DHRESULT(2155)
+#define WINED3DERR_INVALIDCALL MAKE_WINED3DHRESULT(2156)
+#define WINED3DERR_DRIVERINVALIDCALL MAKE_WINED3DHRESULT(2157)
+#define WINED3DERR_WASSTILLDRAWING MAKE_WINED3DHRESULT(540)
+#define WINEDDERR_NOTAOVERLAYSURFACE MAKE_WINED3DHRESULT(580)
+#define WINEDDERR_NOTLOCKED MAKE_WINED3DHRESULT(584)
+#define WINEDDERR_NODC MAKE_WINED3DHRESULT(586)
+#define WINEDDERR_DCALREADYCREATED MAKE_WINED3DHRESULT(620)
+#define WINEDDERR_NOTFLIPPABLE MAKE_WINED3DHRESULT(582)
+#define WINEDDERR_SURFACEBUSY MAKE_WINED3DHRESULT(430)
+#define WINEDDERR_INVALIDRECT MAKE_WINED3DHRESULT(150)
+#define WINEDDERR_NOCLIPLIST MAKE_WINED3DHRESULT(205)
+#define WINEDDERR_OVERLAYNOTVISIBLE MAKE_WINED3DHRESULT(577)
+typedef DWORD WINED3DCOLOR;
+typedef enum _WINED3DLIGHTTYPE {
+ WINED3DLIGHT_POINT = 1,
+ WINED3DLIGHT_SPOT = 2,
+ WINED3DLIGHT_DIRECTIONAL = 3,
+ WINED3DLIGHT_PARALLELPOINT = 4,
+ WINED3DLIGHT_GLSPOT = 5,
+ WINED3DLIGHT_FORCE_DWORD = 0x7fffffff
+} WINED3DLIGHTTYPE;
+typedef enum _WINED3DPRIMITIVETYPE {
+ WINED3DPT_UNDEFINED = 0,
+ WINED3DPT_POINTLIST = 1,
+ WINED3DPT_LINELIST = 2,
+ WINED3DPT_LINESTRIP = 3,
+ WINED3DPT_TRIANGLELIST = 4,
+ WINED3DPT_TRIANGLESTRIP = 5,
+ WINED3DPT_TRIANGLEFAN = 6,
+ WINED3DPT_LINELIST_ADJ = 10,
+ WINED3DPT_LINESTRIP_ADJ = 11,
+ WINED3DPT_TRIANGLELIST_ADJ = 12,
+ WINED3DPT_TRIANGLESTRIP_ADJ = 13,
+ WINED3DPT_FORCE_DWORD = 0x7fffffff
+} WINED3DPRIMITIVETYPE;
+typedef enum _WINED3DDEVTYPE {
+ WINED3DDEVTYPE_HAL = 1,
+ WINED3DDEVTYPE_REF = 2,
+ WINED3DDEVTYPE_SW = 3,
+ WINED3DDEVTYPE_NULLREF = 4,
+ WINED3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} WINED3DDEVTYPE;
+typedef enum _WINED3DDEGREETYPE {
+ WINED3DDEGREE_LINEAR = 1,
+ WINED3DDEGREE_QUADRATIC = 2,
+ WINED3DDEGREE_CUBIC = 3,
+ WINED3DDEGREE_QUINTIC = 5,
+ WINED3DDEGREE_FORCE_DWORD = 0x7fffffff
+} WINED3DDEGREETYPE;
+typedef enum _WINED3DFORMAT {
+ WINED3DFMT_UNKNOWN = 0,
+ WINED3DFMT_B8G8R8_UNORM = 1,
+ WINED3DFMT_B5G5R5X1_UNORM = 2,
+ WINED3DFMT_B4G4R4A4_UNORM = 3,
+ WINED3DFMT_B2G3R3_UNORM = 4,
+ WINED3DFMT_B2G3R3A8_UNORM = 5,
+ WINED3DFMT_B4G4R4X4_UNORM = 6,
+ WINED3DFMT_R8G8B8X8_UNORM = 7,
+ WINED3DFMT_B10G10R10A2_UNORM = 8,
+ WINED3DFMT_P8_UINT_A8_UNORM = 9,
+ WINED3DFMT_P8_UINT = 10,
+ WINED3DFMT_L8_UNORM = 11,
+ WINED3DFMT_L8A8_UNORM = 12,
+ WINED3DFMT_L4A4_UNORM = 13,
+ WINED3DFMT_R5G5_SNORM_L6_UNORM = 14,
+ WINED3DFMT_R8G8_SNORM_L8X8_UNORM = 15,
+ WINED3DFMT_R10G11B11_SNORM = 16,
+ WINED3DFMT_R10G10B10_SNORM_A2_UNORM = 17,
+ WINED3DFMT_D16_LOCKABLE = 18,
+ WINED3DFMT_D32_UNORM = 19,
+ WINED3DFMT_S1_UINT_D15_UNORM = 20,
+ WINED3DFMT_X8D24_UNORM = 21,
+ WINED3DFMT_S4X4_UINT_D24_UNORM = 22,
+ WINED3DFMT_L16_UNORM = 23,
+ WINED3DFMT_S8_UINT_D24_FLOAT = 24,
+ WINED3DFMT_VERTEXDATA = 25,
+ WINED3DFMT_R8G8_SNORM_Cx = 26,
+ WINED3DFMT_R32G32B32A32_TYPELESS = 27,
+ WINED3DFMT_R32G32B32A32_FLOAT = 28,
+ WINED3DFMT_R32G32B32A32_UINT = 29,
+ WINED3DFMT_R32G32B32A32_SINT = 30,
+ WINED3DFMT_R32G32B32_TYPELESS = 31,
+ WINED3DFMT_R32G32B32_FLOAT = 32,
+ WINED3DFMT_R32G32B32_UINT = 33,
+ WINED3DFMT_R32G32B32_SINT = 34,
+ WINED3DFMT_R16G16B16A16_TYPELESS = 35,
+ WINED3DFMT_R16G16B16A16_FLOAT = 36,
+ WINED3DFMT_R16G16B16A16_UNORM = 37,
+ WINED3DFMT_R16G16B16A16_UINT = 38,
+ WINED3DFMT_R16G16B16A16_SNORM = 39,
+ WINED3DFMT_R16G16B16A16_SINT = 40,
+ WINED3DFMT_R32G32_TYPELESS = 41,
+ WINED3DFMT_R32G32_FLOAT = 42,
+ WINED3DFMT_R32G32_UINT = 43,
+ WINED3DFMT_R32G32_SINT = 44,
+ WINED3DFMT_R32G8X24_TYPELESS = 45,
+ WINED3DFMT_D32_FLOAT_S8X24_UINT = 46,
+ WINED3DFMT_R32_FLOAT_X8X24_TYPELESS = 47,
+ WINED3DFMT_X32_TYPELESS_G8X24_UINT = 48,
+ WINED3DFMT_R10G10B10A2_TYPELESS = 49,
+ WINED3DFMT_R10G10B10A2_UNORM = 50,
+ WINED3DFMT_R10G10B10A2_UINT = 51,
+ WINED3DFMT_R10G10B10A2_SNORM = 52,
+ WINED3DFMT_R11G11B10_FLOAT = 53,
+ WINED3DFMT_R8G8B8A8_TYPELESS = 54,
+ WINED3DFMT_R8G8B8A8_UNORM = 55,
+ WINED3DFMT_R8G8B8A8_UNORM_SRGB = 56,
+ WINED3DFMT_R8G8B8A8_UINT = 57,
+ WINED3DFMT_R8G8B8A8_SNORM = 58,
+ WINED3DFMT_R8G8B8A8_SINT = 59,
+ WINED3DFMT_R16G16_TYPELESS = 60,
+ WINED3DFMT_R16G16_FLOAT = 61,
+ WINED3DFMT_R16G16_UNORM = 62,
+ WINED3DFMT_R16G16_UINT = 63,
+ WINED3DFMT_R16G16_SNORM = 64,
+ WINED3DFMT_R16G16_SINT = 65,
+ WINED3DFMT_R32_TYPELESS = 66,
+ WINED3DFMT_D32_FLOAT = 67,
+ WINED3DFMT_R32_FLOAT = 68,
+ WINED3DFMT_R32_UINT = 69,
+ WINED3DFMT_R32_SINT = 70,
+ WINED3DFMT_R24G8_TYPELESS = 71,
+ WINED3DFMT_D24_UNORM_S8_UINT = 72,
+ WINED3DFMT_R24_UNORM_X8_TYPELESS = 73,
+ WINED3DFMT_X24_TYPELESS_G8_UINT = 74,
+ WINED3DFMT_R8G8_TYPELESS = 75,
+ WINED3DFMT_R8G8_UNORM = 76,
+ WINED3DFMT_R8G8_UINT = 77,
+ WINED3DFMT_R8G8_SNORM = 78,
+ WINED3DFMT_R8G8_SINT = 79,
+ WINED3DFMT_R16_TYPELESS = 80,
+ WINED3DFMT_R16_FLOAT = 81,
+ WINED3DFMT_D16_UNORM = 82,
+ WINED3DFMT_R16_UNORM = 83,
+ WINED3DFMT_R16_UINT = 84,
+ WINED3DFMT_R16_SNORM = 85,
+ WINED3DFMT_R16_SINT = 86,
+ WINED3DFMT_R8_TYPELESS = 87,
+ WINED3DFMT_R8_UNORM = 88,
+ WINED3DFMT_R8_UINT = 89,
+ WINED3DFMT_R8_SNORM = 90,
+ WINED3DFMT_R8_SINT = 91,
+ WINED3DFMT_A8_UNORM = 92,
+ WINED3DFMT_R1_UNORM = 93,
+ WINED3DFMT_R9G9B9E5_SHAREDEXP = 94,
+ WINED3DFMT_R8G8_B8G8_UNORM = 95,
+ WINED3DFMT_G8R8_G8B8_UNORM = 96,
+ WINED3DFMT_BC1_TYPELESS = 97,
+ WINED3DFMT_BC1_UNORM = 98,
+ WINED3DFMT_BC1_UNORM_SRGB = 99,
+ WINED3DFMT_BC2_TYPELESS = 100,
+ WINED3DFMT_BC2_UNORM = 101,
+ WINED3DFMT_BC2_UNORM_SRGB = 102,
+ WINED3DFMT_BC3_TYPELESS = 103,
+ WINED3DFMT_BC3_UNORM = 104,
+ WINED3DFMT_BC3_UNORM_SRGB = 105,
+ WINED3DFMT_BC4_TYPELESS = 106,
+ WINED3DFMT_BC4_UNORM = 107,
+ WINED3DFMT_BC4_SNORM = 108,
+ WINED3DFMT_BC5_TYPELESS = 109,
+ WINED3DFMT_BC5_UNORM = 110,
+ WINED3DFMT_BC5_SNORM = 111,
+ WINED3DFMT_B5G6R5_UNORM = 112,
+ WINED3DFMT_B5G5R5A1_UNORM = 113,
+ WINED3DFMT_B8G8R8A8_UNORM = 114,
+ WINED3DFMT_B8G8R8X8_UNORM = 115,
+ WINED3DFMT_UYVY = (((ULONG)(unsigned char)'U' | ((ULONG)(unsigned char)'Y' << 8)) | ((ULONG)(unsigned char)'V' << 16)) | ((ULONG)(unsigned char)'Y' << 24),
+ WINED3DFMT_YUY2 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'U' << 8)) | ((ULONG)(unsigned char)'Y' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_YV12 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'1' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_DXT1 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+ WINED3DFMT_DXT2 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_DXT3 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'3' << 24),
+ WINED3DFMT_DXT4 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'4' << 24),
+ WINED3DFMT_DXT5 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'5' << 24),
+ WINED3DFMT_MULTI2_ARGB8 = (((ULONG)(unsigned char)'M' | ((ULONG)(unsigned char)'E' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+ WINED3DFMT_G8R8_G8B8 = (((ULONG)(unsigned char)'G' | ((ULONG)(unsigned char)'R' << 8)) | ((ULONG)(unsigned char)'G' << 16)) | ((ULONG)(unsigned char)'B' << 24),
+ WINED3DFMT_R8G8_B8G8 = (((ULONG)(unsigned char)'R' | ((ULONG)(unsigned char)'G' << 8)) | ((ULONG)(unsigned char)'B' << 16)) | ((ULONG)(unsigned char)'G' << 24),
+ WINED3DFMT_ATI2N = (((ULONG)(unsigned char)'A' | ((ULONG)(unsigned char)'T' << 8)) | ((ULONG)(unsigned char)'I' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_INST = (((ULONG)(unsigned char)'I' | ((ULONG)(unsigned char)'N' << 8)) | ((ULONG)(unsigned char)'S' << 16)) | ((ULONG)(unsigned char)'T' << 24),
+ WINED3DFMT_NVHU = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'U' << 24),
+ WINED3DFMT_NVHS = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'S' << 24),
+ WINED3DFMT_FORCE_DWORD = 0xffffffff
+} WINED3DFORMAT;
+typedef enum _WINED3DRENDERSTATETYPE {
+ WINED3DRS_ANTIALIAS = 2,
+ WINED3DRS_TEXTUREPERSPECTIVE = 4,
+ WINED3DRS_WRAPU = 5,
+ WINED3DRS_WRAPV = 6,
+ WINED3DRS_ZENABLE = 7,
+ WINED3DRS_FILLMODE = 8,
+ WINED3DRS_SHADEMODE = 9,
+ WINED3DRS_LINEPATTERN = 10,
+ WINED3DRS_MONOENABLE = 11,
+ WINED3DRS_ROP2 = 12,
+ WINED3DRS_PLANEMASK = 13,
+ WINED3DRS_ZWRITEENABLE = 14,
+ WINED3DRS_ALPHATESTENABLE = 15,
+ WINED3DRS_LASTPIXEL = 16,
+ WINED3DRS_SRCBLEND = 19,
+ WINED3DRS_DESTBLEND = 20,
+ WINED3DRS_CULLMODE = 22,
+ WINED3DRS_ZFUNC = 23,
+ WINED3DRS_ALPHAREF = 24,
+ WINED3DRS_ALPHAFUNC = 25,
+ WINED3DRS_DITHERENABLE = 26,
+ WINED3DRS_ALPHABLENDENABLE = 27,
+ WINED3DRS_FOGENABLE = 28,
+ WINED3DRS_SPECULARENABLE = 29,
+ WINED3DRS_ZVISIBLE = 30,
+ WINED3DRS_SUBPIXEL = 31,
+ WINED3DRS_SUBPIXELX = 32,
+ WINED3DRS_STIPPLEDALPHA = 33,
+ WINED3DRS_FOGCOLOR = 34,
+ WINED3DRS_FOGTABLEMODE = 35,
+ WINED3DRS_FOGSTART = 36,
+ WINED3DRS_FOGEND = 37,
+ WINED3DRS_FOGDENSITY = 38,
+ WINED3DRS_STIPPLEENABLE = 39,
+ WINED3DRS_EDGEANTIALIAS = 40,
+ WINED3DRS_COLORKEYENABLE = 41,
+ WINED3DRS_MIPMAPLODBIAS = 46,
+ WINED3DRS_ZBIAS = 47,
+ WINED3DRS_RANGEFOGENABLE = 48,
+ WINED3DRS_ANISOTROPY = 49,
+ WINED3DRS_FLUSHBATCH = 50,
+ WINED3DRS_TRANSLUCENTSORTINDEPENDENT = 51,
+ WINED3DRS_STENCILENABLE = 52,
+ WINED3DRS_STENCILFAIL = 53,
+ WINED3DRS_STENCILZFAIL = 54,
+ WINED3DRS_STENCILPASS = 55,
+ WINED3DRS_STENCILFUNC = 56,
+ WINED3DRS_STENCILREF = 57,
+ WINED3DRS_STENCILMASK = 58,
+ WINED3DRS_STENCILWRITEMASK = 59,
+ WINED3DRS_TEXTUREFACTOR = 60,
+ WINED3DRS_WRAP0 = 128,
+ WINED3DRS_WRAP1 = 129,
+ WINED3DRS_WRAP2 = 130,
+ WINED3DRS_WRAP3 = 131,
+ WINED3DRS_WRAP4 = 132,
+ WINED3DRS_WRAP5 = 133,
+ WINED3DRS_WRAP6 = 134,
+ WINED3DRS_WRAP7 = 135,
+ WINED3DRS_CLIPPING = 136,
+ WINED3DRS_LIGHTING = 137,
+ WINED3DRS_EXTENTS = 138,
+ WINED3DRS_AMBIENT = 139,
+ WINED3DRS_FOGVERTEXMODE = 140,
+ WINED3DRS_COLORVERTEX = 141,
+ WINED3DRS_LOCALVIEWER = 142,
+ WINED3DRS_NORMALIZENORMALS = 143,
+ WINED3DRS_COLORKEYBLENDENABLE = 144,
+ WINED3DRS_DIFFUSEMATERIALSOURCE = 145,
+ WINED3DRS_SPECULARMATERIALSOURCE = 146,
+ WINED3DRS_AMBIENTMATERIALSOURCE = 147,
+ WINED3DRS_EMISSIVEMATERIALSOURCE = 148,
+ WINED3DRS_VERTEXBLEND = 151,
+ WINED3DRS_CLIPPLANEENABLE = 152,
+ WINED3DRS_SOFTWAREVERTEXPROCESSING = 153,
+ WINED3DRS_POINTSIZE = 154,
+ WINED3DRS_POINTSIZE_MIN = 155,
+ WINED3DRS_POINTSPRITEENABLE = 156,
+ WINED3DRS_POINTSCALEENABLE = 157,
+ WINED3DRS_POINTSCALE_A = 158,
+ WINED3DRS_POINTSCALE_B = 159,
+ WINED3DRS_POINTSCALE_C = 160,
+ WINED3DRS_MULTISAMPLEANTIALIAS = 161,
+ WINED3DRS_MULTISAMPLEMASK = 162,
+ WINED3DRS_PATCHEDGESTYLE = 163,
+ WINED3DRS_PATCHSEGMENTS = 164,
+ WINED3DRS_DEBUGMONITORTOKEN = 165,
+ WINED3DRS_POINTSIZE_MAX = 166,
+ WINED3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+ WINED3DRS_COLORWRITEENABLE = 168,
+ WINED3DRS_TWEENFACTOR = 170,
+ WINED3DRS_BLENDOP = 171,
+ WINED3DRS_POSITIONDEGREE = 172,
+ WINED3DRS_NORMALDEGREE = 173,
+ WINED3DRS_SCISSORTESTENABLE = 174,
+ WINED3DRS_SLOPESCALEDEPTHBIAS = 175,
+ WINED3DRS_ANTIALIASEDLINEENABLE = 176,
+ WINED3DRS_MINTESSELLATIONLEVEL = 178,
+ WINED3DRS_MAXTESSELLATIONLEVEL = 179,
+ WINED3DRS_ADAPTIVETESS_X = 180,
+ WINED3DRS_ADAPTIVETESS_Y = 181,
+ WINED3DRS_ADAPTIVETESS_Z = 182,
+ WINED3DRS_ADAPTIVETESS_W = 183,
+ WINED3DRS_ENABLEADAPTIVETESSELLATION = 184,
+ WINED3DRS_TWOSIDEDSTENCILMODE = 185,
+ WINED3DRS_CCW_STENCILFAIL = 186,
+ WINED3DRS_CCW_STENCILZFAIL = 187,
+ WINED3DRS_CCW_STENCILPASS = 188,
+ WINED3DRS_CCW_STENCILFUNC = 189,
+ WINED3DRS_COLORWRITEENABLE1 = 190,
+ WINED3DRS_COLORWRITEENABLE2 = 191,
+ WINED3DRS_COLORWRITEENABLE3 = 192,
+ WINED3DRS_BLENDFACTOR = 193,
+ WINED3DRS_SRGBWRITEENABLE = 194,
+ WINED3DRS_DEPTHBIAS = 195,
+ WINED3DRS_WRAP8 = 198,
+ WINED3DRS_WRAP9 = 199,
+ WINED3DRS_WRAP10 = 200,
+ WINED3DRS_WRAP11 = 201,
+ WINED3DRS_WRAP12 = 202,
+ WINED3DRS_WRAP13 = 203,
+ WINED3DRS_WRAP14 = 204,
+ WINED3DRS_WRAP15 = 205,
+ WINED3DRS_SEPARATEALPHABLENDENABLE = 206,
+ WINED3DRS_SRCBLENDALPHA = 207,
+ WINED3DRS_DESTBLENDALPHA = 208,
+ WINED3DRS_BLENDOPALPHA = 209,
+ WINED3DRS_FORCE_DWORD = 0x7fffffff
+} WINED3DRENDERSTATETYPE;
+#define WINEHIGHEST_RENDER_STATE (WINED3DRS_BLENDOPALPHA)
+
+typedef enum _WINED3DBLEND {
+ WINED3DBLEND_ZERO = 1,
+ WINED3DBLEND_ONE = 2,
+ WINED3DBLEND_SRCCOLOR = 3,
+ WINED3DBLEND_INVSRCCOLOR = 4,
+ WINED3DBLEND_SRCALPHA = 5,
+ WINED3DBLEND_INVSRCALPHA = 6,
+ WINED3DBLEND_DESTALPHA = 7,
+ WINED3DBLEND_INVDESTALPHA = 8,
+ WINED3DBLEND_DESTCOLOR = 9,
+ WINED3DBLEND_INVDESTCOLOR = 10,
+ WINED3DBLEND_SRCALPHASAT = 11,
+ WINED3DBLEND_BOTHSRCALPHA = 12,
+ WINED3DBLEND_BOTHINVSRCALPHA = 13,
+ WINED3DBLEND_BLENDFACTOR = 14,
+ WINED3DBLEND_INVBLENDFACTOR = 15,
+ WINED3DBLEND_FORCE_DWORD = 0x7fffffff
+} WINED3DBLEND;
+typedef enum _WINED3DBLENDOP {
+ WINED3DBLENDOP_ADD = 1,
+ WINED3DBLENDOP_SUBTRACT = 2,
+ WINED3DBLENDOP_REVSUBTRACT = 3,
+ WINED3DBLENDOP_MIN = 4,
+ WINED3DBLENDOP_MAX = 5,
+ WINED3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} WINED3DBLENDOP;
+typedef enum _WINED3DVERTEXBLENDFLAGS {
+ WINED3DVBF_DISABLE = 0,
+ WINED3DVBF_1WEIGHTS = 1,
+ WINED3DVBF_2WEIGHTS = 2,
+ WINED3DVBF_3WEIGHTS = 3,
+ WINED3DVBF_TWEENING = 255,
+ WINED3DVBF_0WEIGHTS = 256
+} WINED3DVERTEXBLENDFLAGS;
+typedef enum _WINED3DCMPFUNC {
+ WINED3DCMP_NEVER = 1,
+ WINED3DCMP_LESS = 2,
+ WINED3DCMP_EQUAL = 3,
+ WINED3DCMP_LESSEQUAL = 4,
+ WINED3DCMP_GREATER = 5,
+ WINED3DCMP_NOTEQUAL = 6,
+ WINED3DCMP_GREATEREQUAL = 7,
+ WINED3DCMP_ALWAYS = 8,
+ WINED3DCMP_FORCE_DWORD = 0x7fffffff
+} WINED3DCMPFUNC;
+typedef enum _WINED3DZBUFFERTYPE {
+ WINED3DZB_FALSE = 0,
+ WINED3DZB_TRUE = 1,
+ WINED3DZB_USEW = 2,
+ WINED3DZB_FORCE_DWORD = 0x7fffffff
+} WINED3DZBUFFERTYPE;
+typedef enum _WINED3DFOGMODE {
+ WINED3DFOG_NONE = 0,
+ WINED3DFOG_EXP = 1,
+ WINED3DFOG_EXP2 = 2,
+ WINED3DFOG_LINEAR = 3,
+ WINED3DFOG_FORCE_DWORD = 0x7fffffff
+} WINED3DFOGMODE;
+typedef enum _WINED3DSHADEMODE {
+ WINED3DSHADE_FLAT = 1,
+ WINED3DSHADE_GOURAUD = 2,
+ WINED3DSHADE_PHONG = 3,
+ WINED3DSHADE_FORCE_DWORD = 0x7fffffff
+} WINED3DSHADEMODE;
+typedef enum _WINED3DFILLMODE {
+ WINED3DFILL_POINT = 1,
+ WINED3DFILL_WIREFRAME = 2,
+ WINED3DFILL_SOLID = 3,
+ WINED3DFILL_FORCE_DWORD = 0x7fffffff
+} WINED3DFILLMODE;
+typedef enum _WINED3DCULL {
+ WINED3DCULL_NONE = 1,
+ WINED3DCULL_CW = 2,
+ WINED3DCULL_CCW = 3,
+ WINED3DCULL_FORCE_DWORD = 0x7fffffff
+} WINED3DCULL;
+typedef enum _WINED3DSTENCILOP {
+ WINED3DSTENCILOP_KEEP = 1,
+ WINED3DSTENCILOP_ZERO = 2,
+ WINED3DSTENCILOP_REPLACE = 3,
+ WINED3DSTENCILOP_INCRSAT = 4,
+ WINED3DSTENCILOP_DECRSAT = 5,
+ WINED3DSTENCILOP_INVERT = 6,
+ WINED3DSTENCILOP_INCR = 7,
+ WINED3DSTENCILOP_DECR = 8,
+ WINED3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} WINED3DSTENCILOP;
+typedef enum _WINED3DMATERIALCOLORSOURCE {
+ WINED3DMCS_MATERIAL = 0,
+ WINED3DMCS_COLOR1 = 1,
+ WINED3DMCS_COLOR2 = 2,
+ WINED3DMCS_FORCE_DWORD = 0x7fffffff
+} WINED3DMATERIALCOLORSOURCE;
+typedef enum _WINED3DPATCHEDGESTYLE {
+ WINED3DPATCHEDGE_DISCRETE = 0,
+ WINED3DPATCHEDGE_CONTINUOUS = 1,
+ WINED3DPATCHEDGE_FORCE_DWORD = 0x7fffffff
+} WINED3DPATCHEDGESTYLE;
+typedef enum _WINED3DBACKBUFFER_TYPE {
+ WINED3DBACKBUFFER_TYPE_MONO = 0,
+ WINED3DBACKBUFFER_TYPE_LEFT = 1,
+ WINED3DBACKBUFFER_TYPE_RIGHT = 2,
+ WINED3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DBACKBUFFER_TYPE;
+typedef enum _WINED3DSWAPEFFECT {
+ WINED3DSWAPEFFECT_DISCARD = 1,
+ WINED3DSWAPEFFECT_FLIP = 2,
+ WINED3DSWAPEFFECT_COPY = 3,
+ WINED3DSWAPEFFECT_COPY_VSYNC = 4,
+ WINED3DSWAPEFFECT_FORCE_DWORD = 0xffffffff
+} WINED3DSWAPEFFECT;
+typedef enum _WINED3DSAMPLERSTATETYPE {
+ WINED3DSAMP_ADDRESSU = 1,
+ WINED3DSAMP_ADDRESSV = 2,
+ WINED3DSAMP_ADDRESSW = 3,
+ WINED3DSAMP_BORDERCOLOR = 4,
+ WINED3DSAMP_MAGFILTER = 5,
+ WINED3DSAMP_MINFILTER = 6,
+ WINED3DSAMP_MIPFILTER = 7,
+ WINED3DSAMP_MIPMAPLODBIAS = 8,
+ WINED3DSAMP_MAXMIPLEVEL = 9,
+ WINED3DSAMP_MAXANISOTROPY = 10,
+ WINED3DSAMP_SRGBTEXTURE = 11,
+ WINED3DSAMP_ELEMENTINDEX = 12,
+ WINED3DSAMP_DMAPOFFSET = 13,
+ WINED3DSAMP_FORCE_DWORD = 0x7fffffff
+} WINED3DSAMPLERSTATETYPE;
+#define WINED3D_HIGHEST_SAMPLER_STATE (WINED3DSAMP_DMAPOFFSET)
+
+typedef enum _WINED3DMULTISAMPLE_TYPE {
+ WINED3DMULTISAMPLE_NONE = 0,
+ WINED3DMULTISAMPLE_NONMASKABLE = 1,
+ WINED3DMULTISAMPLE_2_SAMPLES = 2,
+ WINED3DMULTISAMPLE_3_SAMPLES = 3,
+ WINED3DMULTISAMPLE_4_SAMPLES = 4,
+ WINED3DMULTISAMPLE_5_SAMPLES = 5,
+ WINED3DMULTISAMPLE_6_SAMPLES = 6,
+ WINED3DMULTISAMPLE_7_SAMPLES = 7,
+ WINED3DMULTISAMPLE_8_SAMPLES = 8,
+ WINED3DMULTISAMPLE_9_SAMPLES = 9,
+ WINED3DMULTISAMPLE_10_SAMPLES = 10,
+ WINED3DMULTISAMPLE_11_SAMPLES = 11,
+ WINED3DMULTISAMPLE_12_SAMPLES = 12,
+ WINED3DMULTISAMPLE_13_SAMPLES = 13,
+ WINED3DMULTISAMPLE_14_SAMPLES = 14,
+ WINED3DMULTISAMPLE_15_SAMPLES = 15,
+ WINED3DMULTISAMPLE_16_SAMPLES = 16,
+ WINED3DMULTISAMPLE_FORCE_DWORD = 0xffffffff
+} WINED3DMULTISAMPLE_TYPE;
+typedef enum _WINED3DTEXTURESTAGESTATETYPE {
+ WINED3DTSS_COLOROP = 0,
+ WINED3DTSS_COLORARG1 = 1,
+ WINED3DTSS_COLORARG2 = 2,
+ WINED3DTSS_ALPHAOP = 3,
+ WINED3DTSS_ALPHAARG1 = 4,
+ WINED3DTSS_ALPHAARG2 = 5,
+ WINED3DTSS_BUMPENVMAT00 = 6,
+ WINED3DTSS_BUMPENVMAT01 = 7,
+ WINED3DTSS_BUMPENVMAT10 = 8,
+ WINED3DTSS_BUMPENVMAT11 = 9,
+ WINED3DTSS_TEXCOORDINDEX = 10,
+ WINED3DTSS_BUMPENVLSCALE = 11,
+ WINED3DTSS_BUMPENVLOFFSET = 12,
+ WINED3DTSS_TEXTURETRANSFORMFLAGS = 13,
+ WINED3DTSS_COLORARG0 = 14,
+ WINED3DTSS_ALPHAARG0 = 15,
+ WINED3DTSS_RESULTARG = 16,
+ WINED3DTSS_CONSTANT = 17,
+ WINED3DTSS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURESTAGESTATETYPE;
+#define WINED3D_HIGHEST_TEXTURE_STATE (WINED3DTSS_CONSTANT)
+
+typedef enum _WINED3DTEXTURETRANSFORMFLAGS {
+ WINED3DTTFF_DISABLE = 0,
+ WINED3DTTFF_COUNT1 = 1,
+ WINED3DTTFF_COUNT2 = 2,
+ WINED3DTTFF_COUNT3 = 3,
+ WINED3DTTFF_COUNT4 = 4,
+ WINED3DTTFF_PROJECTED = 256,
+ WINED3DTTFF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURETRANSFORMFLAGS;
+typedef enum _WINED3DTEXTUREOP {
+ WINED3DTOP_DISABLE = 1,
+ WINED3DTOP_SELECTARG1 = 2,
+ WINED3DTOP_SELECTARG2 = 3,
+ WINED3DTOP_MODULATE = 4,
+ WINED3DTOP_MODULATE2X = 5,
+ WINED3DTOP_MODULATE4X = 6,
+ WINED3DTOP_ADD = 7,
+ WINED3DTOP_ADDSIGNED = 8,
+ WINED3DTOP_ADDSIGNED2X = 9,
+ WINED3DTOP_SUBTRACT = 10,
+ WINED3DTOP_ADDSMOOTH = 11,
+ WINED3DTOP_BLENDDIFFUSEALPHA = 12,
+ WINED3DTOP_BLENDTEXTUREALPHA = 13,
+ WINED3DTOP_BLENDFACTORALPHA = 14,
+ WINED3DTOP_BLENDTEXTUREALPHAPM = 15,
+ WINED3DTOP_BLENDCURRENTALPHA = 16,
+ WINED3DTOP_PREMODULATE = 17,
+ WINED3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+ WINED3DTOP_MODULATECOLOR_ADDALPHA = 19,
+ WINED3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+ WINED3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+ WINED3DTOP_BUMPENVMAP = 22,
+ WINED3DTOP_BUMPENVMAPLUMINANCE = 23,
+ WINED3DTOP_DOTPRODUCT3 = 24,
+ WINED3DTOP_MULTIPLYADD = 25,
+ WINED3DTOP_LERP = 26,
+ WINED3DTOP_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREOP;
+typedef enum _WINED3DTEXTUREADDRESS {
+ WINED3DTADDRESS_WRAP = 1,
+ WINED3DTADDRESS_MIRROR = 2,
+ WINED3DTADDRESS_CLAMP = 3,
+ WINED3DTADDRESS_BORDER = 4,
+ WINED3DTADDRESS_MIRRORONCE = 5,
+ WINED3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREADDRESS;
+typedef enum _WINED3DTRANSFORMSTATETYPE {
+ WINED3DTS_VIEW = 2,
+ WINED3DTS_PROJECTION = 3,
+ WINED3DTS_TEXTURE0 = 16,
+ WINED3DTS_TEXTURE1 = 17,
+ WINED3DTS_TEXTURE2 = 18,
+ WINED3DTS_TEXTURE3 = 19,
+ WINED3DTS_TEXTURE4 = 20,
+ WINED3DTS_TEXTURE5 = 21,
+ WINED3DTS_TEXTURE6 = 22,
+ WINED3DTS_TEXTURE7 = 23,
+ WINED3DTS_WORLD = 256,
+ WINED3DTS_WORLD1 = 257,
+ WINED3DTS_WORLD2 = 258,
+ WINED3DTS_WORLD3 = 259,
+ WINED3DTS_FORCE_DWORD = 0x7fffffff
+} WINED3DTRANSFORMSTATETYPE;
+#define WINED3DTS_WORLDMATRIX(index) (WINED3DTRANSFORMSTATETYPE)(index + 256)
+typedef enum _WINED3DBASISTYPE {
+ WINED3DBASIS_BEZIER = 0,
+ WINED3DBASIS_BSPLINE = 1,
+ WINED3DBASIS_INTERPOLATE = 2,
+ WINED3DBASIS_FORCE_DWORD = 0x7fffffff
+} WINED3DBASISTYPE;
+typedef enum _WINED3DCUBEMAP_FACES {
+ WINED3DCUBEMAP_FACE_POSITIVE_X = 0,
+ WINED3DCUBEMAP_FACE_NEGATIVE_X = 1,
+ WINED3DCUBEMAP_FACE_POSITIVE_Y = 2,
+ WINED3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+ WINED3DCUBEMAP_FACE_POSITIVE_Z = 4,
+ WINED3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+ WINED3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} WINED3DCUBEMAP_FACES;
+typedef enum _WINED3DTEXTUREFILTERTYPE {
+ WINED3DTEXF_NONE = 0,
+ WINED3DTEXF_POINT = 1,
+ WINED3DTEXF_LINEAR = 2,
+ WINED3DTEXF_ANISOTROPIC = 3,
+ WINED3DTEXF_FLATCUBIC = 4,
+ WINED3DTEXF_GAUSSIANCUBIC = 5,
+ WINED3DTEXF_PYRAMIDALQUAD = 6,
+ WINED3DTEXF_GAUSSIANQUAD = 7,
+ WINED3DTEXF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREFILTERTYPE;
+typedef enum _WINED3DRESOURCETYPE {
+ WINED3DRTYPE_SURFACE = 1,
+ WINED3DRTYPE_VOLUME = 2,
+ WINED3DRTYPE_TEXTURE = 3,
+ WINED3DRTYPE_VOLUMETEXTURE = 4,
+ WINED3DRTYPE_CUBETEXTURE = 5,
+ WINED3DRTYPE_BUFFER = 6,
+ WINED3DRTYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DRESOURCETYPE;
+#define WINED3DRTYPECOUNT (WINED3DRTYPE_BUFFER + 1)
+
+typedef enum _WINED3DPOOL {
+ WINED3DPOOL_DEFAULT = 0,
+ WINED3DPOOL_MANAGED = 1,
+ WINED3DPOOL_SYSTEMMEM = 2,
+ WINED3DPOOL_SCRATCH = 3,
+ WINED3DPOOL_FORCE_DWORD = 0x7fffffff
+} WINED3DPOOL;
+typedef enum _WINED3DQUERYTYPE {
+ WINED3DQUERYTYPE_VCACHE = 4,
+ WINED3DQUERYTYPE_RESOURCEMANAGER = 5,
+ WINED3DQUERYTYPE_VERTEXSTATS = 6,
+ WINED3DQUERYTYPE_EVENT = 8,
+ WINED3DQUERYTYPE_OCCLUSION = 9,
+ WINED3DQUERYTYPE_TIMESTAMP = 10,
+ WINED3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+ WINED3DQUERYTYPE_TIMESTAMPFREQ = 12,
+ WINED3DQUERYTYPE_PIPELINETIMINGS = 13,
+ WINED3DQUERYTYPE_INTERFACETIMINGS = 14,
+ WINED3DQUERYTYPE_VERTEXTIMINGS = 15,
+ WINED3DQUERYTYPE_PIXELTIMINGS = 16,
+ WINED3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+ WINED3DQUERYTYPE_CACHEUTILIZATION = 18
+} WINED3DQUERYTYPE;
+#define WINED3DISSUE_BEGIN (1 << 1)
+
+#define WINED3DISSUE_END (1 << 0)
+
+#define WINED3DGETDATA_FLUSH (1 << 0)
+
+typedef enum _WINED3DSTATEBLOCKTYPE {
+ WINED3DSBT_INIT = 0,
+ WINED3DSBT_ALL = 1,
+ WINED3DSBT_PIXELSTATE = 2,
+ WINED3DSBT_VERTEXSTATE = 3,
+ WINED3DSBT_RECORDED = 4,
+ WINED3DSBT_FORCE_DWORD = 0xffffffff
+} WINED3DSTATEBLOCKTYPE;
+typedef enum _WINED3DDECLMETHOD {
+ WINED3DDECLMETHOD_DEFAULT = 0,
+ WINED3DDECLMETHOD_PARTIALU = 1,
+ WINED3DDECLMETHOD_PARTIALV = 2,
+ WINED3DDECLMETHOD_CROSSUV = 3,
+ WINED3DDECLMETHOD_UV = 4,
+ WINED3DDECLMETHOD_LOOKUP = 5,
+ WINED3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} WINED3DDECLMETHOD;
+typedef enum _WINED3DDECLUSAGE {
+ WINED3DDECLUSAGE_POSITION = 0,
+ WINED3DDECLUSAGE_BLENDWEIGHT = 1,
+ WINED3DDECLUSAGE_BLENDINDICES = 2,
+ WINED3DDECLUSAGE_NORMAL = 3,
+ WINED3DDECLUSAGE_PSIZE = 4,
+ WINED3DDECLUSAGE_TEXCOORD = 5,
+ WINED3DDECLUSAGE_TANGENT = 6,
+ WINED3DDECLUSAGE_BINORMAL = 7,
+ WINED3DDECLUSAGE_TESSFACTOR = 8,
+ WINED3DDECLUSAGE_POSITIONT = 9,
+ WINED3DDECLUSAGE_COLOR = 10,
+ WINED3DDECLUSAGE_FOG = 11,
+ WINED3DDECLUSAGE_DEPTH = 12,
+ WINED3DDECLUSAGE_SAMPLE = 13
+} WINED3DDECLUSAGE;
+typedef enum _WINED3DSURFTYPE {
+ SURFACE_UNKNOWN = 0,
+ SURFACE_OPENGL = 1,
+ SURFACE_GDI = 2
+} WINED3DSURFTYPE;
+enum wined3d_sysval_semantic {
+ WINED3D_SV_DEPTH = 0xffffffff,
+ WINED3D_SV_TARGET0 = 0,
+ WINED3D_SV_TARGET1 = 1,
+ WINED3D_SV_TARGET2 = 2,
+ WINED3D_SV_TARGET3 = 3,
+ WINED3D_SV_TARGET4 = 4,
+ WINED3D_SV_TARGET5 = 5,
+ WINED3D_SV_TARGET6 = 6,
+ WINED3D_SV_TARGET7 = 7
+};
+
+#define WINED3DCOLORWRITEENABLE_RED (1 << 0)
+
+#define WINED3DCOLORWRITEENABLE_GREEN (1 << 1)
+
+#define WINED3DCOLORWRITEENABLE_BLUE (1 << 2)
+
+#define WINED3DCOLORWRITEENABLE_ALPHA (1 << 3)
+
+#define WINED3DADAPTER_DEFAULT (0)
+
+#define WINED3DENUM_NO_WHQL_LEVEL (2)
+
+#define WINED3DPRESENT_BACK_BUFFER_MAX (3)
+
+#define WINED3DTSS_TCI_PASSTHRU (0x0)
+
+#define WINED3DTSS_TCI_CAMERASPACENORMAL (0x10000)
+
+#define WINED3DTSS_TCI_CAMERASPACEPOSITION (0x20000)
+
+#define WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR (0x30000)
+
+#define WINED3DTSS_TCI_SPHEREMAP (0x40000)
+
+#define WINED3DTA_SELECTMASK (0xf)
+
+#define WINED3DTA_DIFFUSE (0x0)
+
+#define WINED3DTA_CURRENT (0x1)
+
+#define WINED3DTA_TEXTURE (0x2)
+
+#define WINED3DTA_TFACTOR (0x3)
+
+#define WINED3DTA_SPECULAR (0x4)
+
+#define WINED3DTA_TEMP (0x5)
+
+#define WINED3DTA_CONSTANT (0x6)
+
+#define WINED3DTA_COMPLEMENT (0x10)
+
+#define WINED3DTA_ALPHAREPLICATE (0x20)
+
+#define WINED3DPRESENTFLAG_LOCKABLE_BACKBUFFER (0x1)
+
+#define WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL (0x2)
+
+#define WINED3DPRESENTFLAG_DEVICECLIP (0x4)
+
+#define WINED3DPRESENTFLAG_VIDEO (0x10)
+
+#define WINED3DPRESENTFLAG_NOAUTOROTATE (0x20)
+
+#define WINED3DPRESENTFLAG_UNPRUNEDMODE (0x40)
+
+#define WINED3DDP_MAXTEXCOORD (8)
+
+#define WINED3DUSAGE_RENDERTARGET (0x1)
+
+#define WINED3DUSAGE_DEPTHSTENCIL (0x2)
+
+#define WINED3DUSAGE_WRITEONLY (0x8)
+
+#define WINED3DUSAGE_SOFTWAREPROCESSING (0x10)
+
+#define WINED3DUSAGE_DONOTCLIP (0x20)
+
+#define WINED3DUSAGE_POINTS (0x40)
+
+#define WINED3DUSAGE_RTPATCHES (0x80)
+
+#define WINED3DUSAGE_NPATCHES (0x100)
+
+#define WINED3DUSAGE_DYNAMIC (0x200)
+
+#define WINED3DUSAGE_AUTOGENMIPMAP (0x400)
+
+#define WINED3DUSAGE_DMAP (0x4000)
+
+#define WINED3DUSAGE_MASK (0x4fff)
+
+#define WINED3DUSAGE_STATICDECL (0x40000000)
+
+#define WINED3DUSAGE_OVERLAY (0x80000000)
+
+#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP (0x8000)
+
+#define WINED3DUSAGE_QUERY_FILTER (0x20000)
+
+#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x80000)
+
+#define WINED3DUSAGE_QUERY_SRGBREAD (0x10000)
+
+#define WINED3DUSAGE_QUERY_SRGBWRITE (0x40000)
+
+#define WINED3DUSAGE_QUERY_VERTEXTEXTURE (0x100000)
+
+#define WINED3DUSAGE_QUERY_WRAPANDMIP (0x200000)
+
+#define WINED3DUSAGE_QUERY_MASK (0x3f8000)
+
+#define WINED3DLOCK_READONLY (0x10)
+
+#define WINED3DLOCK_NOSYSLOCK (0x800)
+
+#define WINED3DLOCK_NOOVERWRITE (0x1000)
+
+#define WINED3DLOCK_DISCARD (0x2000)
+
+#define WINED3DLOCK_DONOTWAIT (0x4000)
+
+#define WINED3DLOCK_NO_DIRTY_UPDATE (0x8000)
+
+#define WINED3DPRESENT_RATE_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_ONE (0x1)
+
+#define WINED3DPRESENT_INTERVAL_TWO (0x2)
+
+#define WINED3DPRESENT_INTERVAL_THREE (0x4)
+
+#define WINED3DPRESENT_INTERVAL_FOUR (0x8)
+
+#define WINED3DPRESENT_INTERVAL_IMMEDIATE (0x80000000)
+
+#define WINED3DMAXUSERCLIPPLANES (32)
+
+#define WINED3DCLIPPLANE0 (1 << 0)
+
+#define WINED3DCLIPPLANE1 (1 << 1)
+
+#define WINED3DCLIPPLANE2 (1 << 2)
+
+#define WINED3DCLIPPLANE3 (1 << 3)
+
+#define WINED3DCLIPPLANE4 (1 << 4)
+
+#define WINED3DCLIPPLANE5 (1 << 5)
+
+#define WINED3DFVF_RESERVED0 (0x1)
+
+#define WINED3DFVF_POSITION_MASK (0x400e)
+
+#define WINED3DFVF_XYZ (0x2)
+
+#define WINED3DFVF_XYZRHW (0x4)
+
+#define WINED3DFVF_XYZB1 (0x6)
+
+#define WINED3DFVF_XYZB2 (0x8)
+
+#define WINED3DFVF_XYZB3 (0xa)
+
+#define WINED3DFVF_XYZB4 (0xc)
+
+#define WINED3DFVF_XYZB5 (0xe)
+
+#define WINED3DFVF_XYZW (0x4002)
+
+#define WINED3DFVF_NORMAL (0x10)
+
+#define WINED3DFVF_PSIZE (0x20)
+
+#define WINED3DFVF_DIFFUSE (0x40)
+
+#define WINED3DFVF_SPECULAR (0x80)
+
+#define WINED3DFVF_TEXCOUNT_MASK (0xf00)
+
+#define WINED3DFVF_TEXCOUNT_SHIFT (8)
+
+#define WINED3DFVF_TEX0 (0x0)
+
+#define WINED3DFVF_TEX1 (0x100)
+
+#define WINED3DFVF_TEX2 (0x200)
+
+#define WINED3DFVF_TEX3 (0x300)
+
+#define WINED3DFVF_TEX4 (0x400)
+
+#define WINED3DFVF_TEX5 (0x500)
+
+#define WINED3DFVF_TEX6 (0x600)
+
+#define WINED3DFVF_TEX7 (0x700)
+
+#define WINED3DFVF_TEX8 (0x800)
+
+#define WINED3DFVF_LASTBETA_UBYTE4 (0x1000)
+
+#define WINED3DFVF_LASTBETA_D3DCOLOR (0x8000)
+
+#define WINED3DFVF_RESERVED2 (0x6000)
+
+#define WINED3DFVF_TEXTUREFORMAT1 (3)
+
+#define WINED3DFVF_TEXTUREFORMAT2 (0)
+
+#define WINED3DFVF_TEXTUREFORMAT3 (1)
+
+#define WINED3DFVF_TEXTUREFORMAT4 (2)
+
+#define WINED3DFVF_TEXCOORDSIZE1(CoordIndex) (WINED3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE2(CoordIndex) (WINED3DFVF_TEXTUREFORMAT2)
+#define WINED3DFVF_TEXCOORDSIZE3(CoordIndex) (WINED3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE4(CoordIndex) (WINED3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define WINED3DCLEAR_TARGET (0x1)
+
+#define WINED3DCLEAR_ZBUFFER (0x2)
+
+#define WINED3DCLEAR_STENCIL (0x4)
+
+#define WINED3DSTREAMSOURCE_INDEXEDDATA (1 << 30)
+
+#define WINED3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define WINED3DSPD_IUNKNOWN (0x1)
+
+#define WINED3DCREATE_FPU_PRESERVE (0x2)
+
+#define WINED3DCREATE_PUREDEVICE (0x10)
+
+#define WINED3DCREATE_SOFTWARE_VERTEXPROCESSING (0x20)
+
+#define WINED3DCREATE_HARDWARE_VERTEXPROCESSING (0x40)
+
+#define WINED3DCREATE_MIXED_VERTEXPROCESSING (0x80)
+
+#define WINED3DCREATE_DISABLE_DRIVER_MANAGEMENT (0x100)
+
+#define WINED3DCREATE_ADAPTERGROUP_DEVICE (0x200)
+
+#define WINED3DDMAPSAMPLER (0x100)
+
+#define WINED3DVERTEXTEXTURESAMPLER0 (WINED3DDMAPSAMPLER + 1)
+
+#define WINED3DVERTEXTEXTURESAMPLER1 (WINED3DDMAPSAMPLER + 2)
+
+#define WINED3DVERTEXTEXTURESAMPLER2 (WINED3DDMAPSAMPLER + 3)
+
+#define WINED3DVERTEXTEXTURESAMPLER3 (WINED3DDMAPSAMPLER + 4)
+
+#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD (0x20)
+
+#define WINED3DCAPS3_LINEAR_TO_SRGB_PRESENTATION (0x80)
+
+#define WINED3DCAPS3_COPY_TO_VIDMEM (0x100)
+
+#define WINED3DCAPS3_COPY_TO_SYSTEMMEM (0x200)
+
+#define WINED3DCAPS3_RESERVED (0x8000001f)
+
+#define WINED3DDEVCAPS2_STREAMOFFSET (0x1)
+
+#define WINED3DDEVCAPS2_DMAPNPATCH (0x2)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSRTPATCH (0x4)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSNPATCH (0x8)
+
+#define WINED3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (0x10)
+
+#define WINED3DDEVCAPS2_PRESAMPLEDDMAPNPATCH (0x20)
+
+#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET (0x40)
+
+#define WINED3DDTCAPS_UBYTE4 (0x1)
+
+#define WINED3DDTCAPS_UBYTE4N (0x2)
+
+#define WINED3DDTCAPS_SHORT2N (0x4)
+
+#define WINED3DDTCAPS_SHORT4N (0x8)
+
+#define WINED3DDTCAPS_USHORT2N (0x10)
+
+#define WINED3DDTCAPS_USHORT4N (0x20)
+
+#define WINED3DDTCAPS_UDEC3 (0x40)
+
+#define WINED3DDTCAPS_DEC3N (0x80)
+
+#define WINED3DDTCAPS_FLOAT16_2 (0x100)
+
+#define WINED3DDTCAPS_FLOAT16_4 (0x200)
+
+#define WINED3DFVFCAPS_TEXCOORDCOUNTMASK (0xffff)
+
+#define WINED3DFVFCAPS_DONOTSTRIPELEMENTS (0x80000)
+
+#define WINED3DFVFCAPS_PSIZE (0x100000)
+
+#define WINED3DLINECAPS_TEXTURE (0x1)
+
+#define WINED3DLINECAPS_ZTEST (0x2)
+
+#define WINED3DLINECAPS_BLEND (0x4)
+
+#define WINED3DLINECAPS_ALPHACMP (0x8)
+
+#define WINED3DLINECAPS_FOG (0x10)
+
+#define WINED3DLINECAPS_ANTIALIAS (0x20)
+
+#define WINED3DMAX30SHADERINSTRUCTIONS (32768)
+
+#define WINED3DMIN30SHADERINSTRUCTIONS (512)
+
+#define WINED3DPBLENDCAPS_ZERO (0x1)
+
+#define WINED3DPBLENDCAPS_ONE (0x2)
+
+#define WINED3DPBLENDCAPS_SRCCOLOR (0x4)
+
+#define WINED3DPBLENDCAPS_INVSRCCOLOR (0x8)
+
+#define WINED3DPBLENDCAPS_SRCALPHA (0x10)
+
+#define WINED3DPBLENDCAPS_INVSRCALPHA (0x20)
+
+#define WINED3DPBLENDCAPS_DESTALPHA (0x40)
+
+#define WINED3DPBLENDCAPS_INVDESTALPHA (0x80)
+
+#define WINED3DPBLENDCAPS_DESTCOLOR (0x100)
+
+#define WINED3DPBLENDCAPS_INVDESTCOLOR (0x200)
+
+#define WINED3DPBLENDCAPS_SRCALPHASAT (0x400)
+
+#define WINED3DPBLENDCAPS_BOTHSRCALPHA (0x800)
+
+#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA (0x1000)
+
+#define WINED3DPBLENDCAPS_BLENDFACTOR (0x2000)
+
+#define WINED3DPCMPCAPS_NEVER (0x1)
+
+#define WINED3DPCMPCAPS_LESS (0x2)
+
+#define WINED3DPCMPCAPS_EQUAL (0x4)
+
+#define WINED3DPCMPCAPS_LESSEQUAL (0x8)
+
+#define WINED3DPCMPCAPS_GREATER (0x10)
+
+#define WINED3DPCMPCAPS_NOTEQUAL (0x20)
+
+#define WINED3DPCMPCAPS_GREATEREQUAL (0x40)
+
+#define WINED3DPCMPCAPS_ALWAYS (0x80)
+
+#define WINED3DPMISCCAPS_MASKZ (0x2)
+
+#define WINED3DPMISCCAPS_LINEPATTERNREP (0x4)
+
+#define WINED3DPMISCCAPS_CULLNONE (0x10)
+
+#define WINED3DPMISCCAPS_CULLCW (0x20)
+
+#define WINED3DPMISCCAPS_CULLCCW (0x40)
+
+#define WINED3DPMISCCAPS_COLORWRITEENABLE (0x80)
+
+#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS (0x100)
+
+#define WINED3DPMISCCAPS_CLIPTLVERTS (0x200)
+
+#define WINED3DPMISCCAPS_TSSARGTEMP (0x400)
+
+#define WINED3DPMISCCAPS_BLENDOP (0x800)
+
+#define WINED3DPMISCCAPS_NULLREFERENCE (0x1000)
+
+#define WINED3DPMISCCAPS_INDEPENDENTWRITEMASKS (0x4000)
+
+#define WINED3DPMISCCAPS_PERSTAGECONSTANT (0x8000)
+
+#define WINED3DPMISCCAPS_FOGANDSPECULARALPHA (0x10000)
+
+#define WINED3DPMISCCAPS_SEPARATEALPHABLEND (0x20000)
+
+#define WINED3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS (0x40000)
+
+#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING (0x80000)
+
+#define WINED3DPMISCCAPS_FOGVERTEXCLAMPED (0x100000)
+
+#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMTEMPS (32)
+
+#define WINED3DPS20_MIN_NUMTEMPS (12)
+
+#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS (512)
+
+#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS (96)
+
+#define WINED3DPS20CAPS_ARBITRARYSWIZZLE (0x1)
+
+#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS (0x2)
+
+#define WINED3DPS20CAPS_PREDICATION (0x4)
+
+#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT (0x8)
+
+#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (0x10)
+
+#define WINED3DPTADDRESSCAPS_WRAP (0x1)
+
+#define WINED3DPTADDRESSCAPS_MIRROR (0x2)
+
+#define WINED3DPTADDRESSCAPS_CLAMP (0x4)
+
+#define WINED3DPTADDRESSCAPS_BORDER (0x8)
+
+#define WINED3DPTADDRESSCAPS_INDEPENDENTUV (0x10)
+
+#define WINED3DPTADDRESSCAPS_MIRRORONCE (0x20)
+
+#define WINED3DSTENCILCAPS_KEEP (0x1)
+
+#define WINED3DSTENCILCAPS_ZERO (0x2)
+
+#define WINED3DSTENCILCAPS_REPLACE (0x4)
+
+#define WINED3DSTENCILCAPS_INCRSAT (0x8)
+
+#define WINED3DSTENCILCAPS_DECRSAT (0x10)
+
+#define WINED3DSTENCILCAPS_INVERT (0x20)
+
+#define WINED3DSTENCILCAPS_INCR (0x40)
+
+#define WINED3DSTENCILCAPS_DECR (0x80)
+
+#define WINED3DSTENCILCAPS_TWOSIDED (0x100)
+
+#define WINED3DTEXOPCAPS_DISABLE (0x1)
+
+#define WINED3DTEXOPCAPS_SELECTARG1 (0x2)
+
+#define WINED3DTEXOPCAPS_SELECTARG2 (0x4)
+
+#define WINED3DTEXOPCAPS_MODULATE (0x8)
+
+#define WINED3DTEXOPCAPS_MODULATE2X (0x10)
+
+#define WINED3DTEXOPCAPS_MODULATE4X (0x20)
+
+#define WINED3DTEXOPCAPS_ADD (0x40)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED (0x80)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED2X (0x100)
+
+#define WINED3DTEXOPCAPS_SUBTRACT (0x200)
+
+#define WINED3DTEXOPCAPS_ADDSMOOTH (0x400)
+
+#define WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA (0x800)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHA (0x1000)
+
+#define WINED3DTEXOPCAPS_BLENDFACTORALPHA (0x2000)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM (0x4000)
+
+#define WINED3DTEXOPCAPS_BLENDCURRENTALPHA (0x8000)
+
+#define WINED3DTEXOPCAPS_PREMODULATE (0x10000)
+
+#define WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR (0x20000)
+
+#define WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA (0x40000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR (0x80000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA (0x100000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAP (0x200000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE (0x400000)
+
+#define WINED3DTEXOPCAPS_DOTPRODUCT3 (0x800000)
+
+#define WINED3DTEXOPCAPS_MULTIPLYADD (0x1000000)
+
+#define WINED3DTEXOPCAPS_LERP (0x2000000)
+
+#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DVS20_MAX_NUMTEMPS (32)
+
+#define WINED3DVS20_MIN_NUMTEMPS (12)
+
+#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DVS20_MIN_STATICFLOWCONTROLDEPTH (1)
+
+#define WINED3DVS20CAPS_PREDICATION (0x1)
+
+#define WINED3DCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINED3DCAPS2_FULLSCREENGAMMA (0x20000)
+
+#define WINED3DCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINED3DCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINED3DCAPS2_RESERVED (0x2000000)
+
+#define WINED3DCAPS2_CANMANAGERESOURCE (0x10000000)
+
+#define WINED3DCAPS2_DYNAMICTEXTURES (0x20000000)
+
+#define WINED3DCAPS2_CANAUTOGENMIPMAP (0x40000000)
+
+#define WINED3DPRASTERCAPS_DITHER (0x1)
+
+#define WINED3DPRASTERCAPS_ROP2 (0x2)
+
+#define WINED3DPRASTERCAPS_XOR (0x4)
+
+#define WINED3DPRASTERCAPS_PAT (0x8)
+
+#define WINED3DPRASTERCAPS_ZTEST (0x10)
+
+#define WINED3DPRASTERCAPS_SUBPIXEL (0x20)
+
+#define WINED3DPRASTERCAPS_SUBPIXELX (0x40)
+
+#define WINED3DPRASTERCAPS_FOGVERTEX (0x80)
+
+#define WINED3DPRASTERCAPS_FOGTABLE (0x100)
+
+#define WINED3DPRASTERCAPS_STIPPLE (0x200)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTDEPENDENT (0x400)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT (0x800)
+
+#define WINED3DPRASTERCAPS_ANTIALIASEDGES (0x1000)
+
+#define WINED3DPRASTERCAPS_MIPMAPLODBIAS (0x2000)
+
+#define WINED3DPRASTERCAPS_ZBIAS (0x4000)
+
+#define WINED3DPRASTERCAPS_ZBUFFERLESSHSR (0x8000)
+
+#define WINED3DPRASTERCAPS_FOGRANGE (0x10000)
+
+#define WINED3DPRASTERCAPS_ANISOTROPY (0x20000)
+
+#define WINED3DPRASTERCAPS_WBUFFER (0x40000)
+
+#define WINED3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT (0x80000)
+
+#define WINED3DPRASTERCAPS_WFOG (0x100000)
+
+#define WINED3DPRASTERCAPS_ZFOG (0x200000)
+
+#define WINED3DPRASTERCAPS_COLORPERSPECTIVE (0x400000)
+
+#define WINED3DPRASTERCAPS_SCISSORTEST (0x1000000)
+
+#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS (0x2000000)
+
+#define WINED3DPRASTERCAPS_DEPTHBIAS (0x4000000)
+
+#define WINED3DPRASTERCAPS_MULTISAMPLE_TOGGLE (0x8000000)
+
+#define WINED3DPSHADECAPS_COLORFLATMONO (0x1)
+
+#define WINED3DPSHADECAPS_COLORFLATRGB (0x2)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDMONO (0x4)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDRGB (0x8)
+
+#define WINED3DPSHADECAPS_COLORPHONGMONO (0x10)
+
+#define WINED3DPSHADECAPS_COLORPHONGRGB (0x20)
+
+#define WINED3DPSHADECAPS_SPECULARFLATMONO (0x40)
+
+#define WINED3DPSHADECAPS_SPECULARFLATRGB (0x80)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDMONO (0x100)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB (0x200)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGMONO (0x400)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGRGB (0x800)
+
+#define WINED3DPSHADECAPS_ALPHAFLATBLEND (0x1000)
+
+#define WINED3DPSHADECAPS_ALPHAFLATSTIPPLED (0x2000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND (0x4000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDSTIPPLED (0x8000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGBLEND (0x10000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGSTIPPLED (0x20000)
+
+#define WINED3DPSHADECAPS_FOGFLAT (0x40000)
+
+#define WINED3DPSHADECAPS_FOGGOURAUD (0x80000)
+
+#define WINED3DPSHADECAPS_FOGPHONG (0x100000)
+
+#define WINED3DPTEXTURECAPS_PERSPECTIVE (0x1)
+
+#define WINED3DPTEXTURECAPS_POW2 (0x2)
+
+#define WINED3DPTEXTURECAPS_ALPHA (0x4)
+
+#define WINED3DPTEXTURECAPS_TRANSPARENCY (0x8)
+
+#define WINED3DPTEXTURECAPS_BORDER (0x10)
+
+#define WINED3DPTEXTURECAPS_SQUAREONLY (0x20)
+
+#define WINED3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE (0x40)
+
+#define WINED3DPTEXTURECAPS_ALPHAPALETTE (0x80)
+
+#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL (0x100)
+
+#define WINED3DPTEXTURECAPS_PROJECTED (0x400)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP (0x800)
+
+#define WINED3DPTEXTURECAPS_COLORKEYBLEND (0x1000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP (0x2000)
+
+#define WINED3DPTEXTURECAPS_MIPMAP (0x4000)
+
+#define WINED3DPTEXTURECAPS_MIPVOLUMEMAP (0x8000)
+
+#define WINED3DPTEXTURECAPS_MIPCUBEMAP (0x10000)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP_POW2 (0x20000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP_POW2 (0x40000)
+
+#define WINED3DPTEXTURECAPS_NOPROJECTEDBUMPENV (0x200000)
+
+#define WINED3DPTFILTERCAPS_NEAREST (0x1)
+
+#define WINED3DPTFILTERCAPS_LINEAR (0x2)
+
+#define WINED3DPTFILTERCAPS_MIPNEAREST (0x4)
+
+#define WINED3DPTFILTERCAPS_MIPLINEAR (0x8)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST (0x10)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR (0x20)
+
+#define WINED3DPTFILTERCAPS_MINFPOINT (0x100)
+
+#define WINED3DPTFILTERCAPS_MINFLINEAR (0x200)
+
+#define WINED3DPTFILTERCAPS_MINFANISOTROPIC (0x400)
+
+#define WINED3DPTFILTERCAPS_MIPFPOINT (0x10000)
+
+#define WINED3DPTFILTERCAPS_MIPFLINEAR (0x20000)
+
+#define WINED3DPTFILTERCAPS_MAGFPOINT (0x1000000)
+
+#define WINED3DPTFILTERCAPS_MAGFLINEAR (0x2000000)
+
+#define WINED3DPTFILTERCAPS_MAGFANISOTROPIC (0x4000000)
+
+#define WINED3DPTFILTERCAPS_MAGFPYRAMIDALQUAD (0x8000000)
+
+#define WINED3DPTFILTERCAPS_MAGFGAUSSIANQUAD (0x10000000)
+
+#define WINED3DVTXPCAPS_TEXGEN (0x1)
+
+#define WINED3DVTXPCAPS_MATERIALSOURCE7 (0x2)
+
+#define WINED3DVTXPCAPS_VERTEXFOG (0x4)
+
+#define WINED3DVTXPCAPS_DIRECTIONALLIGHTS (0x8)
+
+#define WINED3DVTXPCAPS_POSITIONALLIGHTS (0x10)
+
+#define WINED3DVTXPCAPS_LOCALVIEWER (0x20)
+
+#define WINED3DVTXPCAPS_TWEENING (0x40)
+
+#define WINED3DVTXPCAPS_TEXGEN_SPHEREMAP (0x100)
+
+#define WINED3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER (0x200)
+
+#define WINED3DCURSORCAPS_COLOR (0x1)
+
+#define WINED3DCURSORCAPS_LOWRES (0x2)
+
+#define WINED3DDEVCAPS_FLOATTLVERTEX (0x1)
+
+#define WINED3DDEVCAPS_SORTINCREASINGZ (0x2)
+
+#define WINED3DDEVCAPS_SORTDECREASINGZ (0x4)
+
+#define WINED3DDEVCAPS_SORTEXACT (0x8)
+
+#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY (0x10)
+
+#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY (0x20)
+
+#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY (0x40)
+
+#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY (0x80)
+
+#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY (0x100)
+
+#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY (0x200)
+
+#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX (0x400)
+
+#define WINED3DDEVCAPS_CANRENDERAFTERFLIP (0x800)
+
+#define WINED3DDEVCAPS_TEXTURENONLOCALVIDMEM (0x1000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2 (0x2000)
+
+#define WINED3DDEVCAPS_SEPARATETEXTUREMEMORIES (0x4000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX (0x8000)
+
+#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT (0x10000)
+
+#define WINED3DDEVCAPS_CANBLTSYSTONONLOCAL (0x20000)
+
+#define WINED3DDEVCAPS_HWRASTERIZATION (0x80000)
+
+#define WINED3DDEVCAPS_PUREDEVICE (0x100000)
+
+#define WINED3DDEVCAPS_QUINTICRTPATCHES (0x200000)
+
+#define WINED3DDEVCAPS_RTPATCHES (0x400000)
+
+#define WINED3DDEVCAPS_RTPATCHHANDLEZERO (0x800000)
+
+#define WINED3DDEVCAPS_NPATCHES (0x1000000)
+
+#define WINEDDBLTFX_ARITHSTRETCHY (0x1)
+
+#define WINEDDBLTFX_MIRRORLEFTRIGHT (0x2)
+
+#define WINEDDBLTFX_MIRRORUPDOWN (0x4)
+
+#define WINEDDBLTFX_NOTEARING (0x8)
+
+#define WINEDDBLTFX_ROTATE180 (0x10)
+
+#define WINEDDBLTFX_ROTATE270 (0x20)
+
+#define WINEDDBLTFX_ROTATE90 (0x40)
+
+#define WINEDDBLTFX_ZBUFFERRANGE (0x80)
+
+#define WINEDDBLTFX_ZBUFFERBASEDEST (0x100)
+
+#define WINEDDBLT_ALPHADEST (0x1)
+
+#define WINEDDBLT_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDBLT_ALPHADESTNEG (0x4)
+
+#define WINEDDBLT_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDBLT_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDBLT_ALPHASRC (0x20)
+
+#define WINEDDBLT_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDBLT_ALPHASRCNEG (0x80)
+
+#define WINEDDBLT_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDBLT_ASYNC (0x200)
+
+#define WINEDDBLT_COLORFILL (0x400)
+
+#define WINEDDBLT_DDFX (0x800)
+
+#define WINEDDBLT_DDROPS (0x1000)
+
+#define WINEDDBLT_KEYDEST (0x2000)
+
+#define WINEDDBLT_KEYDESTOVERRIDE (0x4000)
+
+#define WINEDDBLT_KEYSRC (0x8000)
+
+#define WINEDDBLT_KEYSRCOVERRIDE (0x10000)
+
+#define WINEDDBLT_ROP (0x20000)
+
+#define WINEDDBLT_ROTATIONANGLE (0x40000)
+
+#define WINEDDBLT_ZBUFFER (0x80000)
+
+#define WINEDDBLT_ZBUFFERDESTCONSTOVERRIDE (0x100000)
+
+#define WINEDDBLT_ZBUFFERDESTOVERRIDE (0x200000)
+
+#define WINEDDBLT_ZBUFFERSRCCONSTOVERRIDE (0x400000)
+
+#define WINEDDBLT_ZBUFFERSRCOVERRIDE (0x800000)
+
+#define WINEDDBLT_WAIT (0x1000000)
+
+#define WINEDDBLT_DEPTHFILL (0x2000000)
+
+#define WINEDDBLT_DONOTWAIT (0x8000000)
+
+#define WINEDDBLTFAST_NOCOLORKEY (0x0)
+
+#define WINEDDBLTFAST_SRCCOLORKEY (0x1)
+
+#define WINEDDBLTFAST_DESTCOLORKEY (0x2)
+
+#define WINEDDBLTFAST_WAIT (0x10)
+
+#define WINEDDBLTFAST_DONOTWAIT (0x20)
+
+#define WINEDDSD_CAPS (0x1)
+
+#define WINEDDSD_HEIGHT (0x2)
+
+#define WINEDDSD_WIDTH (0x4)
+
+#define WINEDDSD_PITCH (0x8)
+
+#define WINEDDSD_BACKBUFFERCOUNT (0x20)
+
+#define WINEDDSD_ZBUFFERBITDEPTH (0x40)
+
+#define WINEDDSD_ALPHABITDEPTH (0x80)
+
+#define WINEDDSD_LPSURFACE (0x800)
+
+#define WINEDDSD_PIXELFORMAT (0x1000)
+
+#define WINEDDSD_CKDESTOVERLAY (0x2000)
+
+#define WINEDDSD_CKDESTBLT (0x4000)
+
+#define WINEDDSD_CKSRCOVERLAY (0x8000)
+
+#define WINEDDSD_CKSRCBLT (0x10000)
+
+#define WINEDDSD_MIPMAPCOUNT (0x20000)
+
+#define WINEDDSD_REFRESHRATE (0x40000)
+
+#define WINEDDSD_LINEARSIZE (0x80000)
+
+#define WINEDDSD_TEXTURESTAGE (0x100000)
+
+#define WINEDDSD_FVF (0x200000)
+
+#define WINEDDSD_SRCVBHANDLE (0x400000)
+
+#define WINEDDSD_ALL (0x7ff9ee)
+
+#define WINEDDCKEY_COLORSPACE (0x1)
+
+#define WINEDDCKEY_DESTBLT (0x2)
+
+#define WINEDDCKEY_DESTOVERLAY (0x4)
+
+#define WINEDDCKEY_SRCBLT (0x8)
+
+#define WINEDDCKEY_SRCOVERLAY (0x10)
+
+#define WINEDDGBS_CANBLT (0x1)
+
+#define WINEDDGBS_ISBLTDONE (0x2)
+
+#define WINEDDGFS_CANFLIP (0x1)
+
+#define WINEDDGFS_ISFLIPDONE (0x2)
+
+#define WINEDDFLIP_WAIT (0x1)
+
+#define WINEDDFLIP_EVEN (0x2)
+
+#define WINEDDFLIP_ODD (0x4)
+
+#define WINEDDFLIP_NOVSYNC (0x8)
+
+#define WINEDDFLIP_STEREO (0x10)
+
+#define WINEDDFLIP_DONOTWAIT (0x20)
+
+#define WINEDDFLIP_INTERVAL2 (0x2000000)
+
+#define WINEDDFLIP_INTERVAL3 (0x3000000)
+
+#define WINEDDFLIP_INTERVAL4 (0x4000000)
+
+#define WINEDDOVER_ALPHADEST (0x1)
+
+#define WINEDDOVER_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDOVER_ALPHADESTNEG (0x4)
+
+#define WINEDDOVER_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDOVER_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDOVER_ALPHASRC (0x20)
+
+#define WINEDDOVER_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDOVER_ALPHASRCNEG (0x80)
+
+#define WINEDDOVER_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDOVER_HIDE (0x200)
+
+#define WINEDDOVER_KEYDEST (0x400)
+
+#define WINEDDOVER_KEYDESTOVERRIDE (0x800)
+
+#define WINEDDOVER_KEYSRC (0x1000)
+
+#define WINEDDOVER_KEYSRCOVERRIDE (0x2000)
+
+#define WINEDDOVER_SHOW (0x4000)
+
+#define WINEDDOVER_ADDDIRTYRECT (0x8000)
+
+#define WINEDDOVER_REFRESHDIRTYRECTS (0x10000)
+
+#define WINEDDOVER_REFRESHALL (0x20000)
+
+#define WINEDDOVER_DDFX (0x80000)
+
+#define WINEDDOVER_AUTOFLIP (0x100000)
+
+#define WINEDDOVER_BOB (0x200000)
+
+#define WINEDDOVER_OVERRIDEBOBWEAVE (0x400000)
+
+#define WINEDDOVER_INTERLEAVED (0x800000)
+
+#define WINEDDSCAPS_RESERVED1 (0x1)
+
+#define WINEDDSCAPS_ALPHA (0x2)
+
+#define WINEDDSCAPS_BACKBUFFER (0x4)
+
+#define WINEDDSCAPS_COMPLEX (0x8)
+
+#define WINEDDSCAPS_FLIP (0x10)
+
+#define WINEDDSCAPS_FRONTBUFFER (0x20)
+
+#define WINEDDSCAPS_OFFSCREENPLAIN (0x40)
+
+#define WINEDDSCAPS_OVERLAY (0x80)
+
+#define WINEDDSCAPS_PALETTE (0x100)
+
+#define WINEDDSCAPS_PRIMARYSURFACE (0x200)
+
+#define WINEDDSCAPS_PRIMARYSURFACELEFT (0x400)
+
+#define WINEDDSCAPS_SYSTEMMEMORY (0x800)
+
+#define WINEDDSCAPS_TEXTURE (0x1000)
+
+#define WINEDDSCAPS_3DDEVICE (0x2000)
+
+#define WINEDDSCAPS_VIDEOMEMORY (0x4000)
+
+#define WINEDDSCAPS_VISIBLE (0x8000)
+
+#define WINEDDSCAPS_WRITEONLY (0x10000)
+
+#define WINEDDSCAPS_ZBUFFER (0x20000)
+
+#define WINEDDSCAPS_OWNDC (0x40000)
+
+#define WINEDDSCAPS_LIVEVIDEO (0x80000)
+
+#define WINEDDSCAPS_HWCODEC (0x100000)
+
+#define WINEDDSCAPS_MODEX (0x200000)
+
+#define WINEDDSCAPS_MIPMAP (0x400000)
+
+#define WINEDDSCAPS_RESERVED2 (0x800000)
+
+#define WINEDDSCAPS_ALLOCONLOAD (0x4000000)
+
+#define WINEDDSCAPS_VIDEOPORT (0x8000000)
+
+#define WINEDDSCAPS_LOCALVIDMEM (0x10000000)
+
+#define WINEDDSCAPS_NONLOCALVIDMEM (0x20000000)
+
+#define WINEDDSCAPS_STANDARDVGAMODE (0x40000000)
+
+#define WINEDDSCAPS_OPTIMIZED (0x80000000)
+
+#define WINEDDCKEYCAPS_DESTBLT (0x1)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACE (0x2)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACEYUV (0x4)
+
+#define WINEDDCKEYCAPS_DESTBLTYUV (0x8)
+
+#define WINEDDCKEYCAPS_DESTOVERLAY (0x10)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACE (0x20)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACEYUV (0x40)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYONEACTIVE (0x80)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYYUV (0x100)
+
+#define WINEDDCKEYCAPS_SRCBLT (0x200)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACE (0x400)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACEYUV (0x800)
+
+#define WINEDDCKEYCAPS_SRCBLTYUV (0x1000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAY (0x2000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACE (0x4000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACEYUV (0x8000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYONEACTIVE (0x10000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYYUV (0x20000)
+
+#define WINEDDCKEYCAPS_NOCOSTOVERLAY (0x40000)
+
+#define WINEDDFXCAPS_BLTALPHA (0x1)
+
+#define WINEDDFXCAPS_OVERLAYALPHA (0x4)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHYN (0x10)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHY (0x20)
+
+#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT (0x40)
+
+#define WINEDDFXCAPS_BLTMIRRORUPDOWN (0x80)
+
+#define WINEDDFXCAPS_BLTROTATION (0x100)
+
+#define WINEDDFXCAPS_BLTROTATION90 (0x200)
+
+#define WINEDDFXCAPS_BLTSHRINKX (0x400)
+
+#define WINEDDFXCAPS_BLTSHRINKXN (0x800)
+
+#define WINEDDFXCAPS_BLTSHRINKY (0x1000)
+
+#define WINEDDFXCAPS_BLTSHRINKYN (0x2000)
+
+#define WINEDDFXCAPS_BLTSTRETCHX (0x4000)
+
+#define WINEDDFXCAPS_BLTSTRETCHXN (0x8000)
+
+#define WINEDDFXCAPS_BLTSTRETCHY (0x10000)
+
+#define WINEDDFXCAPS_BLTSTRETCHYN (0x20000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHY (0x40000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHYN (0x8)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKX (0x80000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKXN (0x100000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKY (0x200000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKYN (0x400000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHX (0x800000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHXN (0x1000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHY (0x2000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHYN (0x4000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORLEFTRIGHT (0x8000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORUPDOWN (0x10000000)
+
+#define WINEDDCAPS_3D (0x1)
+
+#define WINEDDCAPS_ALIGNBOUNDARYDEST (0x2)
+
+#define WINEDDCAPS_ALIGNSIZEDEST (0x4)
+
+#define WINEDDCAPS_ALIGNBOUNDARYSRC (0x8)
+
+#define WINEDDCAPS_ALIGNSIZESRC (0x10)
+
+#define WINEDDCAPS_ALIGNSTRIDE (0x20)
+
+#define WINEDDCAPS_BLT (0x40)
+
+#define WINEDDCAPS_BLTQUEUE (0x80)
+
+#define WINEDDCAPS_BLTFOURCC (0x100)
+
+#define WINEDDCAPS_BLTSTRETCH (0x200)
+
+#define WINEDDCAPS_GDI (0x400)
+
+#define WINEDDCAPS_OVERLAY (0x800)
+
+#define WINEDDCAPS_OVERLAYCANTCLIP (0x1000)
+
+#define WINEDDCAPS_OVERLAYFOURCC (0x2000)
+
+#define WINEDDCAPS_OVERLAYSTRETCH (0x4000)
+
+#define WINEDDCAPS_PALETTE (0x8000)
+
+#define WINEDDCAPS_PALETTEVSYNC (0x10000)
+
+#define WINEDDCAPS_READSCANLINE (0x20000)
+
+#define WINEDDCAPS_STEREOVIEW (0x40000)
+
+#define WINEDDCAPS_VBI (0x80000)
+
+#define WINEDDCAPS_ZBLTS (0x100000)
+
+#define WINEDDCAPS_ZOVERLAYS (0x200000)
+
+#define WINEDDCAPS_COLORKEY (0x400000)
+
+#define WINEDDCAPS_ALPHA (0x800000)
+
+#define WINEDDCAPS_COLORKEYHWASSIST (0x1000000)
+
+#define WINEDDCAPS_NOHARDWARE (0x2000000)
+
+#define WINEDDCAPS_BLTCOLORFILL (0x4000000)
+
+#define WINEDDCAPS_BANKSWITCHED (0x8000000)
+
+#define WINEDDCAPS_BLTDEPTHFILL (0x10000000)
+
+#define WINEDDCAPS_CANCLIP (0x20000000)
+
+#define WINEDDCAPS_CANCLIPSTRETCHED (0x40000000)
+
+#define WINEDDCAPS_CANBLTSYSMEM (0x80000000)
+
+#define WINEDDCAPS2_CERTIFIED (0x1)
+
+#define WINEDDCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINEDDCAPS2_VIDEOPORT (0x4)
+
+#define WINEDDCAPS2_AUTOFLIPOVERLAY (0x8)
+
+#define WINEDDCAPS2_CANBOBINTERLEAVED (0x10)
+
+#define WINEDDCAPS2_CANBOBNONINTERLEAVED (0x20)
+
+#define WINEDDCAPS2_COLORCONTROLOVERLAY (0x40)
+
+#define WINEDDCAPS2_COLORCONTROLPRIMARY (0x80)
+
+#define WINEDDCAPS2_CANDROPZ16BIT (0x100)
+
+#define WINEDDCAPS2_NONLOCALVIDMEM (0x200)
+
+#define WINEDDCAPS2_NONLOCALVIDMEMCAPS (0x400)
+
+#define WINEDDCAPS2_NOPAGELOCKREQUIRED (0x800)
+
+#define WINEDDCAPS2_WIDESURFACES (0x1000)
+
+#define WINEDDCAPS2_CANFLIPODDEVEN (0x2000)
+
+#define WINEDDCAPS2_CANBOBHARDWARE (0x4000)
+
+#define WINEDDCAPS2_COPYFOURCC (0x8000)
+
+#define WINEDDCAPS2_PRIMARYGAMMA (0x20000)
+
+#define WINEDDCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINEDDCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINEDDCAPS2_FLIPINTERVAL (0x200000)
+
+#define WINEDDCAPS2_FLIPNOVSYNC (0x400000)
+
+#define WINEDDCAPS2_CANMANAGETEXTURE (0x800000)
+
+#define WINEDDCAPS2_TEXMANINNONLOCALVIDMEM (0x1000000)
+
+#define WINEDDCAPS2_STEREO (0x2000000)
+
+#define WINEDDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL (0x4000000)
+
+#define WINEDDPCAPS_4BIT (0x1)
+
+#define WINEDDPCAPS_8BITENTRIES (0x2)
+
+#define WINEDDPCAPS_8BIT (0x4)
+
+#define WINEDDPCAPS_INITIALIZE (0x8)
+
+#define WINEDDPCAPS_PRIMARYSURFACE (0x10)
+
+#define WINEDDPCAPS_PRIMARYSURFACELEFT (0x20)
+
+#define WINEDDPCAPS_ALLOW256 (0x40)
+
+#define WINEDDPCAPS_VSYNC (0x80)
+
+#define WINEDDPCAPS_1BIT (0x100)
+
+#define WINEDDPCAPS_2BIT (0x200)
+
+#define WINEDDPCAPS_ALPHA (0x400)
+
+typedef struct _WINED3DDISPLAYMODE {
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ WINED3DFORMAT Format;
+} WINED3DDISPLAYMODE;
+typedef enum _WINED3DSCANLINEORDERING {
+ WINED3DSCANLINEORDERING_UNKNOWN = 0,
+ WINED3DSCANLINEORDERING_PROGRESSIVE = 1,
+ WINED3DSCANLINEORDERING_INTERLACED = 2
+} WINED3DSCANLINEORDERING;
+typedef struct _WINED3DDISPLAYMODEEX {
+ UINT Size;
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ WINED3DFORMAT Format;
+ WINED3DSCANLINEORDERING ScanLineOrdering;
+} WINED3DDISPLAYMODEEX;
+typedef enum _WINED3DDISPLAYROTATION {
+ WINED3DDISPLAYROTATION_IDENTITY = 1,
+ WINED3DDISPLAYROTATION_90 = 2,
+ WINED3DDISPLAYROTATION_180 = 3,
+ WINED3DDISPLAYROTATION_270 = 4
+} WINED3DDISPLAYROTATION;
+typedef struct _WINED3DCOLORVALUE {
+ float r;
+ float g;
+ float b;
+ float a;
+} WINED3DCOLORVALUE;
+typedef struct _WINED3DVECTOR {
+ float x;
+ float y;
+ float z;
+} WINED3DVECTOR;
+typedef struct _WINED3DMATRIX {
+ union {
+ struct {
+ float _11;
+ float _12;
+ float _13;
+ float _14;
+ float _21;
+ float _22;
+ float _23;
+ float _24;
+ float _31;
+ float _32;
+ float _33;
+ float _34;
+ float _41;
+ float _42;
+ float _43;
+ float _44;
+ } s;
+ float m[4][4];
+ } u;
+} WINED3DMATRIX;
+typedef struct _WINED3DRECT {
+ LONG x1;
+ LONG y1;
+ LONG x2;
+ LONG y2;
+} WINED3DRECT;
+typedef struct _WINED3DLIGHT {
+ WINED3DLIGHTTYPE Type;
+ WINED3DCOLORVALUE Diffuse;
+ WINED3DCOLORVALUE Specular;
+ WINED3DCOLORVALUE Ambient;
+ WINED3DVECTOR Position;
+ WINED3DVECTOR Direction;
+ float Range;
+ float Falloff;
+ float Attenuation0;
+ float Attenuation1;
+ float Attenuation2;
+ float Theta;
+ float Phi;
+} WINED3DLIGHT;
+typedef struct _WINED3DMATERIAL {
+ WINED3DCOLORVALUE Diffuse;
+ WINED3DCOLORVALUE Ambient;
+ WINED3DCOLORVALUE Specular;
+ WINED3DCOLORVALUE Emissive;
+ float Power;
+} WINED3DMATERIAL;
+typedef struct _WINED3DVIEWPORT {
+ DWORD X;
+ DWORD Y;
+ DWORD Width;
+ DWORD Height;
+ float MinZ;
+ float MaxZ;
+} WINED3DVIEWPORT;
+typedef struct _WINED3DGAMMARAMP {
+ WORD red[256];
+ WORD green[256];
+ WORD blue[256];
+} WINED3DGAMMARAMP;
+typedef struct _WINED3DLINEPATTERN {
+ WORD wRepeatFactor;
+ WORD wLinePattern;
+} WINED3DLINEPATTERN;
+typedef struct _WINEDD3DRECTPATCH_INFO {
+ UINT StartVertexOffsetWidth;
+ UINT StartVertexOffsetHeight;
+ UINT Width;
+ UINT Height;
+ UINT Stride;
+ WINED3DBASISTYPE Basis;
+ WINED3DDEGREETYPE Degree;
+} WINED3DRECTPATCH_INFO;
+typedef struct _WINED3DTRIPATCH_INFO {
+ UINT StartVertexOffset;
+ UINT NumVertices;
+ WINED3DBASISTYPE Basis;
+ WINED3DDEGREETYPE Degree;
+} WINED3DTRIPATCH_INFO;
+typedef struct _WINED3DADAPTER_IDENTIFIER {
+ char *driver;
+ UINT driver_size;
+ char *description;
+ UINT description_size;
+ char *device_name;
+ UINT device_name_size;
+ LARGE_INTEGER driver_version;
+ DWORD vendor_id;
+ DWORD device_id;
+ DWORD subsystem_id;
+ DWORD revision;
+ GUID device_identifier;
+ DWORD whql_level;
+ LUID adapter_luid;
+ SIZE_T video_memory;
+} WINED3DADAPTER_IDENTIFIER;
+typedef struct _WINED3DPRESENT_PARAMETERS {
+ UINT BackBufferWidth;
+ UINT BackBufferHeight;
+ WINED3DFORMAT BackBufferFormat;
+ UINT BackBufferCount;
+ WINED3DMULTISAMPLE_TYPE MultiSampleType;
+ DWORD MultiSampleQuality;
+ WINED3DSWAPEFFECT SwapEffect;
+ HWND hDeviceWindow;
+ BOOL Windowed;
+ BOOL EnableAutoDepthStencil;
+ WINED3DFORMAT AutoDepthStencilFormat;
+ DWORD Flags;
+ UINT FullScreen_RefreshRateInHz;
+ UINT PresentationInterval;
+ BOOL AutoRestoreDisplayMode;
+#ifdef VBOX_WITH_WDDM
+ struct VBOXUHGSMI *pHgsmi;
+#endif
+} WINED3DPRESENT_PARAMETERS;
+typedef struct _WINED3DSURFACE_DESC {
+ WINED3DFORMAT format;
+ WINED3DRESOURCETYPE resource_type;
+ DWORD usage;
+ WINED3DPOOL pool;
+ UINT size;
+ WINED3DMULTISAMPLE_TYPE multisample_type;
+ DWORD multisample_quality;
+ UINT width;
+ UINT height;
+} WINED3DSURFACE_DESC;
+typedef struct _WINED3DVOLUME_DESC {
+ WINED3DFORMAT Format;
+ WINED3DRESOURCETYPE Type;
+ DWORD Usage;
+ WINED3DPOOL Pool;
+ UINT Size;
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+} WINED3DVOLUME_DESC;
+typedef struct _WINED3DCLIPSTATUS {
+ DWORD ClipUnion;
+ DWORD ClipIntersection;
+} WINED3DCLIPSTATUS;
+typedef struct _WINED3DVERTEXELEMENT {
+ WINED3DFORMAT format;
+ WORD input_slot;
+ WORD offset;
+ UINT output_slot;
+ BYTE method;
+ BYTE usage;
+ BYTE usage_idx;
+} WINED3DVERTEXELEMENT;
+typedef struct _WINED3DDEVICE_CREATION_PARAMETERS {
+ UINT AdapterOrdinal;
+ WINED3DDEVTYPE DeviceType;
+ HWND hFocusWindow;
+ DWORD BehaviorFlags;
+} WINED3DDEVICE_CREATION_PARAMETERS;
+typedef struct _WINED3DDEVINFO_BANDWIDTHTIMINGS {
+ float MaxBandwidthUtilized;
+ float FrontEndUploadMemoryUtilizedPercent;
+ float VertexRateUtilizedPercent;
+ float TriangleSetupRateUtilizedPercent;
+ float FillRateUtilizedPercent;
+} WINED3DDEVINFO_BANDWIDTHTIMINGS;
+typedef struct _WINED3DDEVINFO_CACHEUTILIZATION {
+ float TextureCacheHitRate;
+ float PostTransformVertexCacheHitRate;
+} WINED3DDEVINFO_CACHEUTILIZATION;
+typedef struct _WINED3DDEVINFO_INTERFACETIMINGS {
+ float WaitingForGPUToUseApplicationResourceTimePercent;
+ float WaitingForGPUToAcceptMoreCommandsTimePercent;
+ float WaitingForGPUToStayWithinLatencyTimePercent;
+ float WaitingForGPUExclusiveResourceTimePercent;
+ float WaitingForGPUOtherTimePercent;
+} WINED3DDEVINFO_INTERFACETIMINGS;
+typedef struct _WINED3DDEVINFO_PIPELINETIMINGS {
+ float VertexProcessingTimePercent;
+ float PixelProcessingTimePercent;
+ float OtherGPUProcessingTimePercent;
+ float GPUIdleTimePercent;
+} WINED3DDEVINFO_PIPELINETIMINGS;
+typedef struct _WINED3DDEVINFO_STAGETIMINGS {
+ float MemoryProcessingPercent;
+ float ComputationProcessingPercent;
+} WINED3DDEVINFO_STAGETIMINGS;
+typedef struct _WINED3DRASTER_STATUS {
+ BOOL InVBlank;
+ UINT ScanLine;
+} WINED3DRASTER_STATUS;
+typedef struct WINED3DRESOURCESTATS {
+ BOOL bThrashing;
+ DWORD ApproxBytesDownloaded;
+ DWORD NumEvicts;
+ DWORD NumVidCreates;
+ DWORD LastPri;
+ DWORD NumUsed;
+ DWORD NumUsedInVidMem;
+ DWORD WorkingSet;
+ DWORD WorkingSetBytes;
+ DWORD TotalManaged;
+ DWORD TotalBytes;
+} WINED3DRESOURCESTATS;
+typedef struct _WINED3DDEVINFO_RESOURCEMANAGER {
+ WINED3DRESOURCESTATS stats[7];
+} WINED3DDEVINFO_RESOURCEMANAGER;
+typedef struct _WINED3DDEVINFO_VERTEXSTATS {
+ DWORD NumRenderedTriangles;
+ DWORD NumExtraClippingTriangles;
+} WINED3DDEVINFO_VERTEXSTATS;
+typedef struct _WINED3DLOCKED_RECT {
+ INT Pitch;
+ void *pBits;
+} WINED3DLOCKED_RECT;
+typedef struct _WINED3DLOCKED_BOX {
+ INT RowPitch;
+ INT SlicePitch;
+ void *pBits;
+} WINED3DLOCKED_BOX;
+typedef struct _WINED3DBOX {
+ UINT Left;
+ UINT Top;
+ UINT Right;
+ UINT Bottom;
+ UINT Front;
+ UINT Back;
+} WINED3DBOX;
+typedef struct WINED3DDEVINFO_VCACHE {
+ DWORD Pattern;
+ DWORD OptMethod;
+ DWORD CacheSize;
+ DWORD MagicNumber;
+} WINED3DDEVINFO_VCACHE;
+typedef struct _WINED3DBUFFER_DESC {
+ WINED3DRESOURCETYPE Type;
+ DWORD Usage;
+ WINED3DPOOL Pool;
+ UINT Size;
+} WINED3DBUFFER_DESC;
+typedef struct WineDirect3DStridedData {
+ WINED3DFORMAT format;
+ const BYTE *lpData;
+ DWORD dwStride;
+} WineDirect3DStridedData;
+typedef struct WineDirect3DVertexStridedData {
+ WineDirect3DStridedData position;
+ WineDirect3DStridedData normal;
+ WineDirect3DStridedData diffuse;
+ WineDirect3DStridedData specular;
+ WineDirect3DStridedData texCoords[8];
+ BOOL position_transformed;
+} WineDirect3DVertexStridedData;
+typedef struct _WINED3DVSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+} WINED3DVSHADERCAPS2_0;
+typedef struct _WINED3DPSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+ INT NumInstructionSlots;
+} WINED3DPSHADERCAPS2_0;
+typedef struct _WINEDDCAPS {
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD CKeyCaps;
+ DWORD FXCaps;
+ DWORD FXAlphaCaps;
+ DWORD PalCaps;
+ DWORD SVCaps;
+ DWORD SVBCaps;
+ DWORD SVBCKeyCaps;
+ DWORD SVBFXCaps;
+ DWORD VSBCaps;
+ DWORD VSBCKeyCaps;
+ DWORD VSBFXCaps;
+ DWORD SSBCaps;
+ DWORD SSBCKeyCaps;
+ DWORD SSBFXCaps;
+ DWORD ddsCaps;
+ DWORD StrideAlign;
+} WINEDDCAPS;
+typedef struct _WINED3DCAPS {
+ WINED3DDEVTYPE DeviceType;
+ UINT AdapterOrdinal;
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD Caps3;
+ DWORD PresentationIntervals;
+ DWORD CursorCaps;
+ DWORD DevCaps;
+ DWORD PrimitiveMiscCaps;
+ DWORD RasterCaps;
+ DWORD ZCmpCaps;
+ DWORD SrcBlendCaps;
+ DWORD DestBlendCaps;
+ DWORD AlphaCmpCaps;
+ DWORD ShadeCaps;
+ DWORD TextureCaps;
+ DWORD TextureFilterCaps;
+ DWORD CubeTextureFilterCaps;
+ DWORD VolumeTextureFilterCaps;
+ DWORD TextureAddressCaps;
+ DWORD VolumeTextureAddressCaps;
+ DWORD LineCaps;
+ DWORD MaxTextureWidth;
+ DWORD MaxTextureHeight;
+ DWORD MaxVolumeExtent;
+ DWORD MaxTextureRepeat;
+ DWORD MaxTextureAspectRatio;
+ DWORD MaxAnisotropy;
+ float MaxVertexW;
+ float GuardBandLeft;
+ float GuardBandTop;
+ float GuardBandRight;
+ float GuardBandBottom;
+ float ExtentsAdjust;
+ DWORD StencilCaps;
+ DWORD FVFCaps;
+ DWORD TextureOpCaps;
+ DWORD MaxTextureBlendStages;
+ DWORD MaxSimultaneousTextures;
+ DWORD VertexProcessingCaps;
+ DWORD MaxActiveLights;
+ DWORD MaxUserClipPlanes;
+ DWORD MaxVertexBlendMatrices;
+ DWORD MaxVertexBlendMatrixIndex;
+ float MaxPointSize;
+ DWORD MaxPrimitiveCount;
+ DWORD MaxVertexIndex;
+ DWORD MaxStreams;
+ DWORD MaxStreamStride;
+ DWORD VertexShaderVersion;
+ DWORD MaxVertexShaderConst;
+ DWORD PixelShaderVersion;
+ float PixelShader1xMaxValue;
+ DWORD DevCaps2;
+ float MaxNpatchTessellationLevel;
+ DWORD Reserved5;
+ UINT MasterAdapterOrdinal;
+ UINT AdapterOrdinalInGroup;
+ UINT NumberOfAdaptersInGroup;
+ DWORD DeclTypes;
+ DWORD NumSimultaneousRTs;
+ DWORD StretchRectFilterCaps;
+ WINED3DVSHADERCAPS2_0 VS20Caps;
+ WINED3DPSHADERCAPS2_0 PS20Caps;
+ DWORD VertexTextureFilterCaps;
+ DWORD MaxVShaderInstructionsExecuted;
+ DWORD MaxPShaderInstructionsExecuted;
+ DWORD MaxVertexShader30InstructionSlots;
+ DWORD MaxPixelShader30InstructionSlots;
+ DWORD Reserved2;
+ DWORD Reserved3;
+ WINEDDCAPS DirectDrawCaps;
+} WINED3DCAPS;
+typedef struct _WINEDDCOLORKEY {
+ DWORD dwColorSpaceLowValue;
+ DWORD dwColorSpaceHighValue;
+} WINEDDCOLORKEY;
+typedef struct _WINEDDCOLORKEY *LPWINEDDCOLORKEY;
+typedef struct _WINEDDBLTFX {
+ DWORD dwSize;
+ DWORD dwDDFX;
+ DWORD dwROP;
+ DWORD dwDDROP;
+ DWORD dwRotationAngle;
+ DWORD dwZBufferOpCode;
+ DWORD dwZBufferLow;
+ DWORD dwZBufferHigh;
+ DWORD dwZBufferBaseDest;
+ DWORD dwZDestConstBitDepth;
+ union {
+ DWORD dwZDestConst;
+ struct IWineD3DSurface *lpDDSZBufferDest;
+ } DUMMYUNIONNAME1;
+ DWORD dwZSrcConstBitDepth;
+ union {
+ DWORD dwZSrcConst;
+ struct IWineD3DSurface *lpDDSZBufferSrc;
+ } DUMMYUNIONNAME2;
+ DWORD dwAlphaEdgeBlendBitDepth;
+ DWORD dwAlphaEdgeBlend;
+ DWORD dwReserved;
+ DWORD dwAlphaDestConstBitDepth;
+ union {
+ DWORD dwAlphaDestConst;
+ struct IWineD3DSurface *lpDDSAlphaDest;
+ } DUMMYUNIONNAME3;
+ DWORD dwAlphaSrcConstBitDepth;
+ union {
+ DWORD dwAlphaSrcConst;
+ struct IWineD3DSurface *lpDDSAlphaSrc;
+ } DUMMYUNIONNAME4;
+ union {
+ DWORD dwFillColor;
+ DWORD dwFillDepth;
+ DWORD dwFillPixel;
+ struct IWineD3DSurface *lpDDSPattern;
+ } DUMMYUNIONNAME5;
+ WINEDDCOLORKEY ddckDestColorkey;
+ WINEDDCOLORKEY ddckSrcColorkey;
+} WINEDDBLTFX;
+typedef struct _WINEDDBLTFX *LPWINEDDBLTFX;
+typedef struct _WINEDDOVERLAYFX {
+ DWORD dwSize;
+ DWORD dwAlphaEdgeBlendBitDepth;
+ DWORD dwAlphaEdgeBlend;
+ DWORD dwReserved;
+ DWORD dwAlphaDestConstBitDepth;
+ union {
+ DWORD dwAlphaDestConst;
+ struct IWineD3DSurface *lpDDSAlphaDest;
+ } DUMMYUNIONNAME1;
+ DWORD dwAlphaSrcConstBitDepth;
+ union {
+ DWORD dwAlphaSrcConst;
+ struct IWineD3DSurface *lpDDSAlphaSrc;
+ } DUMMYUNIONNAME2;
+ WINEDDCOLORKEY dckDestColorkey;
+ WINEDDCOLORKEY dckSrcColorkey;
+ DWORD dwDDFX;
+ DWORD dwFlags;
+} WINEDDOVERLAYFX;
+struct wined3d_buffer_desc {
+ UINT byte_width;
+ DWORD usage;
+ UINT bind_flags;
+ UINT cpu_access_flags;
+ UINT misc_flags;
+};
+
+struct wined3d_shader_signature_element {
+ const char *semantic_name;
+ UINT semantic_idx;
+ enum wined3d_sysval_semantic sysval_semantic;
+ DWORD component_type;
+ UINT register_idx;
+ DWORD mask;
+};
+
+struct wined3d_shader_signature {
+ UINT element_count;
+ struct wined3d_shader_signature_element *elements;
+ char *string_data;
+};
+
+struct wined3d_parent_ops {
+ void (STDMETHODCALLTYPE *wined3d_object_destroyed)(void *parent);
+};
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDeviceParent interface
+ */
+#ifndef __IWineD3DDeviceParent_INTERFACE_DEFINED__
+#define __IWineD3DDeviceParent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDeviceParent, 0xaeb62dfc, 0xbdcb, 0x4f02, 0x95,0x19, 0x1e,0xee,0xa0,0x0c,0x15,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDeviceParent : public IUnknown
+{
+ virtual void STDMETHODCALLTYPE WineD3DDeviceCreated(
+ IWineD3DDevice *device) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ DWORD usage,
+ WINED3DPOOL pool,
+ UINT level,
+ WINED3DCUBEMAP_FACES face,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateRenderTarget(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL lockable,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilSurface(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL discard,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ UINT depth,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ DWORD usage,
+ IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain) = 0;
+
+};
+#else
+typedef struct IWineD3DDeviceParentVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DDeviceParent* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DDeviceParent* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DDeviceParent* This);
+
+ /*** IWineD3DDeviceParent methods ***/
+ void (STDMETHODCALLTYPE *WineD3DDeviceCreated)(
+ IWineD3DDeviceParent* This,
+ IWineD3DDevice *device);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ DWORD usage,
+ WINED3DPOOL pool,
+ UINT level,
+ WINED3DCUBEMAP_FACES face,
+ IWineD3DSurface **surface
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateRenderTarget)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL lockable,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *CreateDepthStencilSurface)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL discard,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ UINT depth,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ DWORD usage,
+ IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+ IWineD3DDeviceParent* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain);
+
+ END_INTERFACE
+} IWineD3DDeviceParentVtbl;
+interface IWineD3DDeviceParent {
+ CONST_VTBL IWineD3DDeviceParentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDeviceParent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDeviceParent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDeviceParent_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DDeviceParent methods ***/
+#define IWineD3DDeviceParent_WineD3DDeviceCreated(This,device) (This)->lpVtbl->WineD3DDeviceCreated(This,device)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface)
+#endif
+#define IWineD3DDeviceParent_CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface) (This)->lpVtbl->CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface)
+#define IWineD3DDeviceParent_CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface) (This)->lpVtbl->CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume)
+#endif
+#define IWineD3DDeviceParent_CreateSwapChain(This,present_parameters,swapchain) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DDeviceParent_WineD3DDeviceCreated_Proxy(
+ IWineD3DDeviceParent* This,
+ IWineD3DDevice *device);
+void __RPC_STUB IWineD3DDeviceParent_WineD3DDeviceCreated_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSurface_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ DWORD usage,
+ WINED3DPOOL pool,
+ UINT level,
+ WINED3DCUBEMAP_FACES face,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateRenderTarget_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL lockable,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateRenderTarget_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateDepthStencilSurface_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL discard,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateDepthStencilSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateVolume_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ UINT depth,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ DWORD usage,
+ IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DDeviceParent_CreateVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSwapChain_Proxy(
+ IWineD3DDeviceParent* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDeviceParent_CreateSwapChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DDeviceParent_INTERFACE_DEFINED__ */
+
+typedef ULONG (STDMETHODCALLTYPE *D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
+typedef HRESULT (STDMETHODCALLTYPE *D3DCB_ENUMRESOURCES)(IWineD3DResource *resource,void *pData);
+/*****************************************************************************
+ * IWineD3DBase interface
+ */
+#ifndef __IWineD3DBase_INTERFACE_DEFINED__
+#define __IWineD3DBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBase, 0x46799311, 0x8e0e, 0x40ce, 0xb2,0xec, 0xdd,0xb9,0x9f,0x18,0xfc,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBase : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetParent(
+ IUnknown **parent) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBase* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBase* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBase* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBase* This,
+ IUnknown **parent);
+
+ END_INTERFACE
+} IWineD3DBaseVtbl;
+interface IWineD3DBase {
+ CONST_VTBL IWineD3DBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBase_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBase_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBase_GetParent_Proxy(
+ IWineD3DBase* This,
+ IUnknown **parent);
+void __RPC_STUB IWineD3DBase_GetParent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3D interface
+ */
+#ifndef __IWineD3D_INTERFACE_DEFINED__
+#define __IWineD3D_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3D, 0x108f9c44, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3D : public IWineD3DBase
+{
+ virtual UINT STDMETHODCALLTYPE GetAdapterCount(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterSoftwareDevice(
+ void *pInitializeFunction) = 0;
+
+ virtual HMONITOR STDMETHODCALLTYPE GetAdapterMonitor(
+ UINT adapter_idx) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetAdapterModeCount(
+ UINT adapter_idx,
+ WINED3DFORMAT format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumAdapterModes(
+ UINT adapter_idx,
+ WINED3DFORMAT format,
+ UINT mode_idx,
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayMode(
+ UINT adapter_idx,
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayModeEx(
+ UINT adapter_idx,
+ WINED3DDISPLAYMODEEX *mode,
+ WINED3DDISPLAYROTATION *rotation) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdapterIdentifier(
+ UINT adapter_idx,
+ DWORD flags,
+ WINED3DADAPTER_IDENTIFIER *identifier) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceMultiSampleType(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT surface_format,
+ BOOL windowed,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD *quality_levels) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDepthStencilMatch(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ WINED3DFORMAT render_target_format,
+ WINED3DFORMAT depth_stencil_format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceType(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT display_format,
+ WINED3DFORMAT backbuffer_format,
+ BOOL windowed) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormat(
+ UINT adaper_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ DWORD usage,
+ WINED3DRESOURCETYPE resource_type,
+ WINED3DFORMAT check_format,
+ WINED3DSURFTYPE surface_type) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormatConversion(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT source_format,
+ WINED3DFORMAT target_format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DCAPS *caps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateDevice(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ HWND focus_window,
+ DWORD behaviour_flags,
+ IUnknown *parent,
+ IWineD3DDeviceParent *device_parent,
+ IWineD3DDevice **device) = 0;
+
+};
+#else
+typedef struct IWineD3DVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3D* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3D* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3D* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3D* This,
+ IUnknown **parent);
+
+ /*** IWineD3D methods ***/
+ UINT (STDMETHODCALLTYPE *GetAdapterCount)(
+ IWineD3D* This);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterSoftwareDevice)(
+ IWineD3D* This,
+ void *pInitializeFunction);
+
+ HMONITOR (STDMETHODCALLTYPE *GetAdapterMonitor)(
+ IWineD3D* This,
+ UINT adapter_idx);
+
+ UINT (STDMETHODCALLTYPE *GetAdapterModeCount)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format);
+
+ HRESULT (STDMETHODCALLTYPE *EnumAdapterModes)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format,
+ UINT mode_idx,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayMode)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayModeEx)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODEEX *mode,
+ WINED3DDISPLAYROTATION *rotation);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdapterIdentifier)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ DWORD flags,
+ WINED3DADAPTER_IDENTIFIER *identifier);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceMultiSampleType)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT surface_format,
+ BOOL windowed,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD *quality_levels);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDepthStencilMatch)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ WINED3DFORMAT render_target_format,
+ WINED3DFORMAT depth_stencil_format);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceType)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT display_format,
+ WINED3DFORMAT backbuffer_format,
+ BOOL windowed);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceFormat)(
+ IWineD3D* This,
+ UINT adaper_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ DWORD usage,
+ WINED3DRESOURCETYPE resource_type,
+ WINED3DFORMAT check_format,
+ WINED3DSURFTYPE surface_type);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceFormatConversion)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT source_format,
+ WINED3DFORMAT target_format);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DCAPS *caps);
+
+ HRESULT (STDMETHODCALLTYPE *CreateDevice)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ HWND focus_window,
+ DWORD behaviour_flags,
+ IUnknown *parent,
+ IWineD3DDeviceParent *device_parent,
+ IWineD3DDevice **device);
+
+ END_INTERFACE
+} IWineD3DVtbl;
+interface IWineD3D {
+ CONST_VTBL IWineD3DVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3D_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3D_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3D_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3D_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3D methods ***/
+#define IWineD3D_GetAdapterCount(This) (This)->lpVtbl->GetAdapterCount(This)
+#define IWineD3D_RegisterSoftwareDevice(This,pInitializeFunction) (This)->lpVtbl->RegisterSoftwareDevice(This,pInitializeFunction)
+#define IWineD3D_GetAdapterMonitor(This,adapter_idx) (This)->lpVtbl->GetAdapterMonitor(This,adapter_idx)
+#define IWineD3D_GetAdapterModeCount(This,adapter_idx,format) (This)->lpVtbl->GetAdapterModeCount(This,adapter_idx,format)
+#define IWineD3D_EnumAdapterModes(This,adapter_idx,format,mode_idx,mode) (This)->lpVtbl->EnumAdapterModes(This,adapter_idx,format,mode_idx,mode)
+#define IWineD3D_GetAdapterDisplayMode(This,adapter_idx,mode) (This)->lpVtbl->GetAdapterDisplayMode(This,adapter_idx,mode)
+#define IWineD3D_GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation) (This)->lpVtbl->GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation)
+#define IWineD3D_GetAdapterIdentifier(This,adapter_idx,flags,identifier) (This)->lpVtbl->GetAdapterIdentifier(This,adapter_idx,flags,identifier)
+#define IWineD3D_CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels) (This)->lpVtbl->CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels)
+#define IWineD3D_CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format) (This)->lpVtbl->CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format)
+#define IWineD3D_CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed) (This)->lpVtbl->CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed)
+#define IWineD3D_CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type) (This)->lpVtbl->CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type)
+#define IWineD3D_CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format) (This)->lpVtbl->CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format)
+#define IWineD3D_GetDeviceCaps(This,adapter_idx,device_type,caps) (This)->lpVtbl->GetDeviceCaps(This,adapter_idx,device_type,caps)
+#define IWineD3D_CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device) (This)->lpVtbl->CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device)
+#endif
+
+#endif
+
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterCount_Proxy(
+ IWineD3D* This);
+void __RPC_STUB IWineD3D_GetAdapterCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_RegisterSoftwareDevice_Proxy(
+ IWineD3D* This,
+ void *pInitializeFunction);
+void __RPC_STUB IWineD3D_RegisterSoftwareDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HMONITOR STDMETHODCALLTYPE IWineD3D_GetAdapterMonitor_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx);
+void __RPC_STUB IWineD3D_GetAdapterMonitor_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterModeCount_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format);
+void __RPC_STUB IWineD3D_GetAdapterModeCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_EnumAdapterModes_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format,
+ UINT mode_idx,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_EnumAdapterModes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayMode_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_GetAdapterDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayModeEx_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODEEX *mode,
+ WINED3DDISPLAYROTATION *rotation);
+void __RPC_STUB IWineD3D_GetAdapterDisplayModeEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterIdentifier_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ DWORD flags,
+ WINED3DADAPTER_IDENTIFIER *identifier);
+void __RPC_STUB IWineD3D_GetAdapterIdentifier_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceMultiSampleType_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT surface_format,
+ BOOL windowed,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD *quality_levels);
+void __RPC_STUB IWineD3D_CheckDeviceMultiSampleType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDepthStencilMatch_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ WINED3DFORMAT render_target_format,
+ WINED3DFORMAT depth_stencil_format);
+void __RPC_STUB IWineD3D_CheckDepthStencilMatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceType_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT display_format,
+ WINED3DFORMAT backbuffer_format,
+ BOOL windowed);
+void __RPC_STUB IWineD3D_CheckDeviceType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormat_Proxy(
+ IWineD3D* This,
+ UINT adaper_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ DWORD usage,
+ WINED3DRESOURCETYPE resource_type,
+ WINED3DFORMAT check_format,
+ WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3D_CheckDeviceFormat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormatConversion_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT source_format,
+ WINED3DFORMAT target_format);
+void __RPC_STUB IWineD3D_CheckDeviceFormatConversion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetDeviceCaps_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DCAPS *caps);
+void __RPC_STUB IWineD3D_GetDeviceCaps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CreateDevice_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ HWND focus_window,
+ DWORD behaviour_flags,
+ IUnknown *parent,
+ IWineD3DDeviceParent *device_parent,
+ IWineD3DDevice **device);
+void __RPC_STUB IWineD3D_CreateDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3D_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DResource interface
+ */
+#ifndef __IWineD3DResource_INTERFACE_DEFINED__
+#define __IWineD3DResource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DResource, 0x1f3bfb34, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DResource : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
+ REFGUID guid,
+ void *data,
+ DWORD *data_size) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FreePrivateData(
+ REFGUID guid) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE SetPriority(
+ DWORD new_priority) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetPriority(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE PreLoad(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE UnLoad(
+ ) = 0;
+
+ virtual WINED3DRESOURCETYPE STDMETHODCALLTYPE GetType(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DResourceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DResource* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DResource* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DResource* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DResource* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DResource* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DResource* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DResource* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DResource* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DResource* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DResource* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DResource* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DResource* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ END_INTERFACE
+} IWineD3DResourceVtbl;
+interface IWineD3DResource {
+ CONST_VTBL IWineD3DResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DResource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DResource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DResource_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DResource_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DResource_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DResource_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DResource_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DResource_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DResource_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DResource_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DResource_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DResource_GetType(This) (This)->lpVtbl->GetType(This)
+# ifdef VBOX_WITH_WDDM
+# define IWineD3DResource_SetShRcState(This, enmState) (This)->lpVtbl->SetShRcState(This, enmState)
+# endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DResource_SetPrivateData_Proxy(
+ IWineD3DResource* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+void __RPC_STUB IWineD3DResource_SetPrivateData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_GetPrivateData_Proxy(
+ IWineD3DResource* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+void __RPC_STUB IWineD3DResource_GetPrivateData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_FreePrivateData_Proxy(
+ IWineD3DResource* This,
+ REFGUID guid);
+void __RPC_STUB IWineD3DResource_FreePrivateData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_SetPriority_Proxy(
+ IWineD3DResource* This,
+ DWORD new_priority);
+void __RPC_STUB IWineD3DResource_SetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_GetPriority_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_PreLoad_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_PreLoad_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_UnLoad_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_UnLoad_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DRESOURCETYPE STDMETHODCALLTYPE IWineD3DResource_GetType_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DResource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DRendertargetView interface
+ */
+#ifndef __IWineD3DRendertargetView_INTERFACE_DEFINED__
+#define __IWineD3DRendertargetView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DRendertargetView, 0xf7d8abf4, 0xfb93, 0x43e4, 0x9c,0x96, 0x46,0x18,0xcf,0x9b,0x3c,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DRendertargetView : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetResource(
+ IWineD3DResource **resource) = 0;
+
+};
+#else
+typedef struct IWineD3DRendertargetViewVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DRendertargetView* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DRendertargetView* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DRendertargetView* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DRendertargetView* This,
+ IUnknown **parent);
+
+ /*** IWineD3DRendertargetView methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetResource)(
+ IWineD3DRendertargetView* This,
+ IWineD3DResource **resource);
+
+ END_INTERFACE
+} IWineD3DRendertargetViewVtbl;
+interface IWineD3DRendertargetView {
+ CONST_VTBL IWineD3DRendertargetViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DRendertargetView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DRendertargetView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DRendertargetView_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DRendertargetView_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DRendertargetView methods ***/
+#define IWineD3DRendertargetView_GetResource(This,resource) (This)->lpVtbl->GetResource(This,resource)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DRendertargetView_GetResource_Proxy(
+ IWineD3DRendertargetView* This,
+ IWineD3DResource **resource);
+void __RPC_STUB IWineD3DRendertargetView_GetResource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DRendertargetView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPalette interface
+ */
+#ifndef __IWineD3DPalette_INTERFACE_DEFINED__
+#define __IWineD3DPalette_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPalette, 0xf756720c, 0x32b9, 0x4439, 0xb5,0xa3, 0x1d,0x6c,0x97,0x03,0x7d,0x9e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPalette : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetEntries(
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ PALETTEENTRY *entries) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCaps(
+ DWORD *caps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEntries(
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ const PALETTEENTRY *entries) = 0;
+
+};
+#else
+typedef struct IWineD3DPaletteVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DPalette* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DPalette* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DPalette* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DPalette* This,
+ IUnknown **parent);
+
+ /*** IWineD3DPalette methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetEntries)(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ PALETTEENTRY *entries);
+
+ HRESULT (STDMETHODCALLTYPE *GetCaps)(
+ IWineD3DPalette* This,
+ DWORD *caps);
+
+ HRESULT (STDMETHODCALLTYPE *SetEntries)(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ const PALETTEENTRY *entries);
+
+ END_INTERFACE
+} IWineD3DPaletteVtbl;
+interface IWineD3DPalette {
+ CONST_VTBL IWineD3DPaletteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPalette_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPalette_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPalette_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPalette_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DPalette methods ***/
+#define IWineD3DPalette_GetEntries(This,flags,start,count,entries) (This)->lpVtbl->GetEntries(This,flags,start,count,entries)
+#define IWineD3DPalette_GetCaps(This,caps) (This)->lpVtbl->GetCaps(This,caps)
+#define IWineD3DPalette_SetEntries(This,flags,start,count,entries) (This)->lpVtbl->SetEntries(This,flags,start,count,entries)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetEntries_Proxy(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_GetEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetCaps_Proxy(
+ IWineD3DPalette* This,
+ DWORD *caps);
+void __RPC_STUB IWineD3DPalette_GetCaps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_SetEntries_Proxy(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_SetEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DPalette_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DClipper interface
+ */
+#ifndef __IWineD3DClipper_INTERFACE_DEFINED__
+#define __IWineD3DClipper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DClipper, 0x8f2bceb1, 0xd338, 0x488c, 0xab,0x7f, 0x0e,0xc9,0x80,0xbf,0x5d,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DClipper : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetClipList(
+ const RECT *rect,
+ RGNDATA *clip_list,
+ DWORD *clip_list_size) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetHWnd(
+ HWND *hwnd) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsClipListChanged(
+ BOOL *changed) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipList(
+ const RGNDATA *clip_list,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHWnd(
+ DWORD flags,
+ HWND hwnd) = 0;
+
+};
+#else
+typedef struct IWineD3DClipperVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DClipper* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DClipper* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DClipper* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DClipper* This,
+ IUnknown **parent);
+
+ /*** IWineD3DClipper methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClipList)(
+ IWineD3DClipper* This,
+ const RECT *rect,
+ RGNDATA *clip_list,
+ DWORD *clip_list_size);
+
+ HRESULT (STDMETHODCALLTYPE *GetHWnd)(
+ IWineD3DClipper* This,
+ HWND *hwnd);
+
+ HRESULT (STDMETHODCALLTYPE *IsClipListChanged)(
+ IWineD3DClipper* This,
+ BOOL *changed);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipList)(
+ IWineD3DClipper* This,
+ const RGNDATA *clip_list,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *SetHWnd)(
+ IWineD3DClipper* This,
+ DWORD flags,
+ HWND hwnd);
+
+ END_INTERFACE
+} IWineD3DClipperVtbl;
+interface IWineD3DClipper {
+ CONST_VTBL IWineD3DClipperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DClipper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DClipper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DClipper_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DClipper_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DClipper methods ***/
+#define IWineD3DClipper_GetClipList(This,rect,clip_list,clip_list_size) (This)->lpVtbl->GetClipList(This,rect,clip_list,clip_list_size)
+#define IWineD3DClipper_GetHWnd(This,hwnd) (This)->lpVtbl->GetHWnd(This,hwnd)
+#define IWineD3DClipper_IsClipListChanged(This,changed) (This)->lpVtbl->IsClipListChanged(This,changed)
+#define IWineD3DClipper_SetClipList(This,clip_list,flags) (This)->lpVtbl->SetClipList(This,clip_list,flags)
+#define IWineD3DClipper_SetHWnd(This,flags,hwnd) (This)->lpVtbl->SetHWnd(This,flags,hwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetClipList_Proxy(
+ IWineD3DClipper* This,
+ const RECT *rect,
+ RGNDATA *clip_list,
+ DWORD *clip_list_size);
+void __RPC_STUB IWineD3DClipper_GetClipList_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetHWnd_Proxy(
+ IWineD3DClipper* This,
+ HWND *hwnd);
+void __RPC_STUB IWineD3DClipper_GetHWnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_IsClipListChanged_Proxy(
+ IWineD3DClipper* This,
+ BOOL *changed);
+void __RPC_STUB IWineD3DClipper_IsClipListChanged_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetClipList_Proxy(
+ IWineD3DClipper* This,
+ const RGNDATA *clip_list,
+ DWORD flags);
+void __RPC_STUB IWineD3DClipper_SetClipList_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetHWnd_Proxy(
+ IWineD3DClipper* This,
+ DWORD flags,
+ HWND hwnd);
+void __RPC_STUB IWineD3DClipper_SetHWnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DClipper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSurface interface
+ */
+#ifndef __IWineD3DSurface_INTERFACE_DEFINED__
+#define __IWineD3DSurface_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSurface, 0x37cd5526, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSurface : public IWineD3DResource
+{
+ virtual HRESULT STDMETHODCALLTYPE GetContainer(
+ REFIID riid,
+ void **container) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDesc(
+ WINED3DSURFACE_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRect(
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDC(
+ HDC *dc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
+ HDC dc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Flip(
+ IWineD3DSurface *override,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Blt(
+ const RECT *dst_rect,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD flags,
+ const WINEDDBLTFX *blt_fx,
+ WINED3DTEXTUREFILTERTYPE filter) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBltStatus(
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFlipStatus(
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsLost(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Restore(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BltFast(
+ DWORD dst_x,
+ DWORD dst_y,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD trans) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPalette(
+ IWineD3DPalette **palette) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPalette(
+ IWineD3DPalette *palette) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RealizePalette(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetColorKey(
+ DWORD flags,
+ const WINEDDCOLORKEY *color_key) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetPitch(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMem(
+ void *mem) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOverlayPosition(
+ LONG x,
+ LONG y) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetOverlayPosition(
+ LONG *x,
+ LONG *y) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateOverlayZOrder(
+ DWORD flags,
+ IWineD3DSurface *ref) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateOverlay(
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const RECT *dst_rect,
+ DWORD flags,
+ const WINEDDOVERLAYFX *fx) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipper(
+ IWineD3DClipper *clipper) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipper(
+ IWineD3DClipper **clipper) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+ BOOL srgb_mode) = 0;
+
+ virtual void STDMETHODCALLTYPE BindTexture(
+ BOOL srgb) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SaveSnapshot(
+ const char *filename) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetContainer(
+ IWineD3DBase *container) = 0;
+
+ virtual const void * STDMETHODCALLTYPE GetData(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFormat(
+ WINED3DFORMAT format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PrivateSetup(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE ModifyLocation(
+ DWORD location,
+ BOOL persistent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LoadLocation(
+ DWORD location,
+ const RECT *rect) = 0;
+
+ virtual WINED3DSURFTYPE STDMETHODCALLTYPE GetImplType(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawOverlay(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DSurfaceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DSurface* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DSurface* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DSurface* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DSurface* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DSurface* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DSurface* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DSurface* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DSurface* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DSurface* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DSurface* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DSurface* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DSurface* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DSurface methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetContainer)(
+ IWineD3DSurface* This,
+ REFIID riid,
+ void **container);
+
+ HRESULT (STDMETHODCALLTYPE *GetDesc)(
+ IWineD3DSurface* This,
+ WINED3DSURFACE_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *LockRect)(
+ IWineD3DSurface* This,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetDC)(
+ IWineD3DSurface* This,
+ HDC *dc);
+
+ HRESULT (STDMETHODCALLTYPE *ReleaseDC)(
+ IWineD3DSurface* This,
+ HDC dc);
+
+ HRESULT (STDMETHODCALLTYPE *Flip)(
+ IWineD3DSurface* This,
+ IWineD3DSurface *override,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *Blt)(
+ IWineD3DSurface* This,
+ const RECT *dst_rect,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD flags,
+ const WINEDDBLTFX *blt_fx,
+ WINED3DTEXTUREFILTERTYPE filter);
+
+ HRESULT (STDMETHODCALLTYPE *GetBltStatus)(
+ IWineD3DSurface* This,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetFlipStatus)(
+ IWineD3DSurface* This,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *IsLost)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *Restore)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *BltFast)(
+ IWineD3DSurface* This,
+ DWORD dst_x,
+ DWORD dst_y,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD trans);
+
+ HRESULT (STDMETHODCALLTYPE *GetPalette)(
+ IWineD3DSurface* This,
+ IWineD3DPalette **palette);
+
+ HRESULT (STDMETHODCALLTYPE *SetPalette)(
+ IWineD3DSurface* This,
+ IWineD3DPalette *palette);
+
+ HRESULT (STDMETHODCALLTYPE *RealizePalette)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetColorKey)(
+ IWineD3DSurface* This,
+ DWORD flags,
+ const WINEDDCOLORKEY *color_key);
+
+ DWORD (STDMETHODCALLTYPE *GetPitch)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetMem)(
+ IWineD3DSurface* This,
+ void *mem);
+
+ HRESULT (STDMETHODCALLTYPE *SetOverlayPosition)(
+ IWineD3DSurface* This,
+ LONG x,
+ LONG y);
+
+ HRESULT (STDMETHODCALLTYPE *GetOverlayPosition)(
+ IWineD3DSurface* This,
+ LONG *x,
+ LONG *y);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateOverlayZOrder)(
+ IWineD3DSurface* This,
+ DWORD flags,
+ IWineD3DSurface *ref);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateOverlay)(
+ IWineD3DSurface* This,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const RECT *dst_rect,
+ DWORD flags,
+ const WINEDDOVERLAYFX *fx);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipper)(
+ IWineD3DSurface* This,
+ IWineD3DClipper *clipper);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipper)(
+ IWineD3DSurface* This,
+ IWineD3DClipper **clipper);
+
+ HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+ IWineD3DSurface* This,
+ BOOL srgb_mode);
+
+ void (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DSurface* This,
+ BOOL srgb);
+
+ HRESULT (STDMETHODCALLTYPE *SaveSnapshot)(
+ IWineD3DSurface* This,
+ const char *filename);
+
+ HRESULT (STDMETHODCALLTYPE *SetContainer)(
+ IWineD3DSurface* This,
+ IWineD3DBase *container);
+
+ const void * (STDMETHODCALLTYPE *GetData)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetFormat)(
+ IWineD3DSurface* This,
+ WINED3DFORMAT format);
+
+ HRESULT (STDMETHODCALLTYPE *PrivateSetup)(
+ IWineD3DSurface* This);
+
+ void (STDMETHODCALLTYPE *ModifyLocation)(
+ IWineD3DSurface* This,
+ DWORD location,
+ BOOL persistent);
+
+ HRESULT (STDMETHODCALLTYPE *LoadLocation)(
+ IWineD3DSurface* This,
+ DWORD location,
+ const RECT *rect);
+
+ WINED3DSURFTYPE (STDMETHODCALLTYPE *GetImplType)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *DrawOverlay)(
+ IWineD3DSurface* This);
+
+ END_INTERFACE
+} IWineD3DSurfaceVtbl;
+interface IWineD3DSurface {
+ CONST_VTBL IWineD3DSurfaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSurface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSurface_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSurface_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSurface_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DSurface_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DSurface_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DSurface_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DSurface_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DSurface_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DSurface_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DSurface_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DSurface_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DSurface methods ***/
+#define IWineD3DSurface_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DSurface_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DSurface_LockRect(This,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,locked_rect,rect,flags)
+#define IWineD3DSurface_UnlockRect(This) (This)->lpVtbl->UnlockRect(This)
+#define IWineD3DSurface_GetDC(This,dc) (This)->lpVtbl->GetDC(This,dc)
+#define IWineD3DSurface_ReleaseDC(This,dc) (This)->lpVtbl->ReleaseDC(This,dc)
+#define IWineD3DSurface_Flip(This,override,flags) (This)->lpVtbl->Flip(This,override,flags)
+#define IWineD3DSurface_Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter) (This)->lpVtbl->Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter)
+#define IWineD3DSurface_GetBltStatus(This,flags) (This)->lpVtbl->GetBltStatus(This,flags)
+#define IWineD3DSurface_GetFlipStatus(This,flags) (This)->lpVtbl->GetFlipStatus(This,flags)
+#define IWineD3DSurface_IsLost(This) (This)->lpVtbl->IsLost(This)
+#define IWineD3DSurface_Restore(This) (This)->lpVtbl->Restore(This)
+#define IWineD3DSurface_BltFast(This,dst_x,dst_y,src_surface,src_rect,trans) (This)->lpVtbl->BltFast(This,dst_x,dst_y,src_surface,src_rect,trans)
+#define IWineD3DSurface_GetPalette(This,palette) (This)->lpVtbl->GetPalette(This,palette)
+#define IWineD3DSurface_SetPalette(This,palette) (This)->lpVtbl->SetPalette(This,palette)
+#define IWineD3DSurface_RealizePalette(This) (This)->lpVtbl->RealizePalette(This)
+#define IWineD3DSurface_SetColorKey(This,flags,color_key) (This)->lpVtbl->SetColorKey(This,flags,color_key)
+#define IWineD3DSurface_GetPitch(This) (This)->lpVtbl->GetPitch(This)
+#define IWineD3DSurface_SetMem(This,mem) (This)->lpVtbl->SetMem(This,mem)
+#define IWineD3DSurface_SetOverlayPosition(This,x,y) (This)->lpVtbl->SetOverlayPosition(This,x,y)
+#define IWineD3DSurface_GetOverlayPosition(This,x,y) (This)->lpVtbl->GetOverlayPosition(This,x,y)
+#define IWineD3DSurface_UpdateOverlayZOrder(This,flags,ref) (This)->lpVtbl->UpdateOverlayZOrder(This,flags,ref)
+#define IWineD3DSurface_UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx) (This)->lpVtbl->UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx)
+#define IWineD3DSurface_SetClipper(This,clipper) (This)->lpVtbl->SetClipper(This,clipper)
+#define IWineD3DSurface_GetClipper(This,clipper) (This)->lpVtbl->GetClipper(This,clipper)
+#define IWineD3DSurface_LoadTexture(This,srgb_mode) (This)->lpVtbl->LoadTexture(This,srgb_mode)
+#define IWineD3DSurface_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DSurface_SaveSnapshot(This,filename) (This)->lpVtbl->SaveSnapshot(This,filename)
+#define IWineD3DSurface_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#define IWineD3DSurface_GetData(This) (This)->lpVtbl->GetData(This)
+#define IWineD3DSurface_SetFormat(This,format) (This)->lpVtbl->SetFormat(This,format)
+#define IWineD3DSurface_PrivateSetup(This) (This)->lpVtbl->PrivateSetup(This)
+#define IWineD3DSurface_ModifyLocation(This,location,persistent) (This)->lpVtbl->ModifyLocation(This,location,persistent)
+#define IWineD3DSurface_LoadLocation(This,location,rect) (This)->lpVtbl->LoadLocation(This,location,rect)
+#define IWineD3DSurface_GetImplType(This) (This)->lpVtbl->GetImplType(This)
+#define IWineD3DSurface_DrawOverlay(This) (This)->lpVtbl->DrawOverlay(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetContainer_Proxy(
+ IWineD3DSurface* This,
+ REFIID riid,
+ void **container);
+void __RPC_STUB IWineD3DSurface_GetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDesc_Proxy(
+ IWineD3DSurface* This,
+ WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DSurface_GetDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LockRect_Proxy(
+ IWineD3DSurface* This,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_LockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UnlockRect_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_UnlockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDC_Proxy(
+ IWineD3DSurface* This,
+ HDC *dc);
+void __RPC_STUB IWineD3DSurface_GetDC_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_ReleaseDC_Proxy(
+ IWineD3DSurface* This,
+ HDC dc);
+void __RPC_STUB IWineD3DSurface_ReleaseDC_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Flip_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DSurface *override,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_Flip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Blt_Proxy(
+ IWineD3DSurface* This,
+ const RECT *dst_rect,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD flags,
+ const WINEDDBLTFX *blt_fx,
+ WINED3DTEXTUREFILTERTYPE filter);
+void __RPC_STUB IWineD3DSurface_Blt_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetBltStatus_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetBltStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetFlipStatus_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetFlipStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_IsLost_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_IsLost_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Restore_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_Restore_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_BltFast_Proxy(
+ IWineD3DSurface* This,
+ DWORD dst_x,
+ DWORD dst_y,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD trans);
+void __RPC_STUB IWineD3DSurface_BltFast_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetPalette_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DPalette **palette);
+void __RPC_STUB IWineD3DSurface_GetPalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetPalette_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DPalette *palette);
+void __RPC_STUB IWineD3DSurface_SetPalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_RealizePalette_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_RealizePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetColorKey_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags,
+ const WINEDDCOLORKEY *color_key);
+void __RPC_STUB IWineD3DSurface_SetColorKey_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DSurface_GetPitch_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetPitch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetMem_Proxy(
+ IWineD3DSurface* This,
+ void *mem);
+void __RPC_STUB IWineD3DSurface_SetMem_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetOverlayPosition_Proxy(
+ IWineD3DSurface* This,
+ LONG x,
+ LONG y);
+void __RPC_STUB IWineD3DSurface_SetOverlayPosition_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetOverlayPosition_Proxy(
+ IWineD3DSurface* This,
+ LONG *x,
+ LONG *y);
+void __RPC_STUB IWineD3DSurface_GetOverlayPosition_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlayZOrder_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags,
+ IWineD3DSurface *ref);
+void __RPC_STUB IWineD3DSurface_UpdateOverlayZOrder_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlay_Proxy(
+ IWineD3DSurface* This,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const RECT *dst_rect,
+ DWORD flags,
+ const WINEDDOVERLAYFX *fx);
+void __RPC_STUB IWineD3DSurface_UpdateOverlay_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetClipper_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DClipper *clipper);
+void __RPC_STUB IWineD3DSurface_SetClipper_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetClipper_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DClipper **clipper);
+void __RPC_STUB IWineD3DSurface_GetClipper_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadTexture_Proxy(
+ IWineD3DSurface* This,
+ BOOL srgb_mode);
+void __RPC_STUB IWineD3DSurface_LoadTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_BindTexture_Proxy(
+ IWineD3DSurface* This,
+ BOOL srgb);
+void __RPC_STUB IWineD3DSurface_BindTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SaveSnapshot_Proxy(
+ IWineD3DSurface* This,
+ const char *filename);
+void __RPC_STUB IWineD3DSurface_SaveSnapshot_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetContainer_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DBase *container);
+void __RPC_STUB IWineD3DSurface_SetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+const void * STDMETHODCALLTYPE IWineD3DSurface_GetData_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetFormat_Proxy(
+ IWineD3DSurface* This,
+ WINED3DFORMAT format);
+void __RPC_STUB IWineD3DSurface_SetFormat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_PrivateSetup_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_PrivateSetup_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_ModifyLocation_Proxy(
+ IWineD3DSurface* This,
+ DWORD location,
+ BOOL persistent);
+void __RPC_STUB IWineD3DSurface_ModifyLocation_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadLocation_Proxy(
+ IWineD3DSurface* This,
+ DWORD location,
+ const RECT *rect);
+void __RPC_STUB IWineD3DSurface_LoadLocation_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DSURFTYPE STDMETHODCALLTYPE IWineD3DSurface_GetImplType_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetImplType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_DrawOverlay_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_DrawOverlay_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DSurface_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolume interface
+ */
+#ifndef __IWineD3DVolume_INTERFACE_DEFINED__
+#define __IWineD3DVolume_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolume, 0x24769ed8, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolume : public IWineD3DResource
+{
+ virtual HRESULT STDMETHODCALLTYPE GetContainer(
+ REFIID riid,
+ void **container) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDesc(
+ WINED3DVOLUME_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockBox(
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+ int gl_level,
+ BOOL srgb_mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetContainer(
+ IWineD3DBase *container) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVolume* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVolume* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVolume* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVolume* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DVolume* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DVolume* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DVolume* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DVolume* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DVolume* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DVolume* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DVolume* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DVolume* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DVolume methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetContainer)(
+ IWineD3DVolume* This,
+ REFIID riid,
+ void **container);
+
+ HRESULT (STDMETHODCALLTYPE *GetDesc)(
+ IWineD3DVolume* This,
+ WINED3DVOLUME_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *LockBox)(
+ IWineD3DVolume* This,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+ IWineD3DVolume* This);
+
+ HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+ IWineD3DVolume* This,
+ int gl_level,
+ BOOL srgb_mode);
+
+ HRESULT (STDMETHODCALLTYPE *SetContainer)(
+ IWineD3DVolume* This,
+ IWineD3DBase *container);
+
+ END_INTERFACE
+} IWineD3DVolumeVtbl;
+interface IWineD3DVolume {
+ CONST_VTBL IWineD3DVolumeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolume_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolume_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolume_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolume_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolume_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolume_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolume_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolume_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolume_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolume_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DVolume methods ***/
+#define IWineD3DVolume_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DVolume_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DVolume_LockBox(This,locked_box,box,flags) (This)->lpVtbl->LockBox(This,locked_box,box,flags)
+#define IWineD3DVolume_UnlockBox(This) (This)->lpVtbl->UnlockBox(This)
+#define IWineD3DVolume_LoadTexture(This,gl_level,srgb_mode) (This)->lpVtbl->LoadTexture(This,gl_level,srgb_mode)
+#define IWineD3DVolume_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetContainer_Proxy(
+ IWineD3DVolume* This,
+ REFIID riid,
+ void **container);
+void __RPC_STUB IWineD3DVolume_GetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetDesc_Proxy(
+ IWineD3DVolume* This,
+ WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolume_GetDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LockBox_Proxy(
+ IWineD3DVolume* This,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+void __RPC_STUB IWineD3DVolume_LockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_UnlockBox_Proxy(
+ IWineD3DVolume* This);
+void __RPC_STUB IWineD3DVolume_UnlockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LoadTexture_Proxy(
+ IWineD3DVolume* This,
+ int gl_level,
+ BOOL srgb_mode);
+void __RPC_STUB IWineD3DVolume_LoadTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_SetContainer_Proxy(
+ IWineD3DVolume* This,
+ IWineD3DBase *container);
+void __RPC_STUB IWineD3DVolume_SetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DVolume_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseTexture interface
+ */
+#ifndef __IWineD3DBaseTexture_INTERFACE_DEFINED__
+#define __IWineD3DBaseTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseTexture, 0x3c2aebf6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseTexture : public IWineD3DResource
+{
+ virtual DWORD STDMETHODCALLTYPE SetLOD(
+ DWORD new_lod) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetLOD(
+ ) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetLevelCount(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetAutoGenFilterType(
+ WINED3DTEXTUREFILTERTYPE filter_type) = 0;
+
+ virtual WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE GetAutoGenFilterType(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE GenerateMipSubLevels(
+ ) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE SetDirty(
+ BOOL dirty) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE GetDirty(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BindTexture(
+ BOOL srgb) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetTextureDimensions(
+ ) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE IsCondNP2(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBaseTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBaseTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBaseTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBaseTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DBaseTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DBaseTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DBaseTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DBaseTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DBaseTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DBaseTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DBaseTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DBaseTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DBaseTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DBaseTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DBaseTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DBaseTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DBaseTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DBaseTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DBaseTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DBaseTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DBaseTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DBaseTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DBaseTexture* This);
+
+ END_INTERFACE
+} IWineD3DBaseTextureVtbl;
+interface IWineD3DBaseTexture {
+ CONST_VTBL IWineD3DBaseTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBaseTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBaseTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBaseTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBaseTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBaseTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBaseTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBaseTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBaseTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DBaseTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DBaseTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DBaseTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DBaseTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DBaseTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DBaseTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DBaseTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DBaseTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DBaseTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DBaseTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DBaseTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_SetLOD_Proxy(
+ IWineD3DBaseTexture* This,
+ DWORD new_lod);
+void __RPC_STUB IWineD3DBaseTexture_SetLOD_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLOD_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLOD_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLevelCount_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLevelCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_SetAutoGenFilterType_Proxy(
+ IWineD3DBaseTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+void __RPC_STUB IWineD3DBaseTexture_SetAutoGenFilterType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE IWineD3DBaseTexture_GetAutoGenFilterType_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetAutoGenFilterType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DBaseTexture_GenerateMipSubLevels_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GenerateMipSubLevels_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_SetDirty_Proxy(
+ IWineD3DBaseTexture* This,
+ BOOL dirty);
+void __RPC_STUB IWineD3DBaseTexture_SetDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_GetDirty_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_BindTexture_Proxy(
+ IWineD3DBaseTexture* This,
+ BOOL srgb);
+void __RPC_STUB IWineD3DBaseTexture_BindTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DBaseTexture_GetTextureDimensions_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetTextureDimensions_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_IsCondNP2_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_IsCondNP2_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBaseTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DTexture interface
+ */
+#ifndef __IWineD3DTexture_INTERFACE_DEFINED__
+#define __IWineD3DTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DTexture, 0x3e72cc1c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DTexture : public IWineD3DBaseTexture
+{
+ virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+ UINT level,
+ WINED3DSURFACE_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSurfaceLevel(
+ UINT level,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRect(
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+ UINT level) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+ const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DTexture* This);
+
+ /*** IWineD3DTexture methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *GetSurfaceLevel)(
+ IWineD3DTexture* This,
+ UINT level,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *LockRect)(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+ IWineD3DTexture* This,
+ UINT level);
+
+ HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+ IWineD3DTexture* This,
+ const RECT *dirty_rect);
+
+ END_INTERFACE
+} IWineD3DTextureVtbl;
+interface IWineD3DTexture {
+ CONST_VTBL IWineD3DTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DTexture methods ***/
+#define IWineD3DTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DTexture_GetSurfaceLevel(This,level,surface) (This)->lpVtbl->GetSurfaceLevel(This,level,surface)
+#define IWineD3DTexture_LockRect(This,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,level,locked_rect,rect,flags)
+#define IWineD3DTexture_UnlockRect(This,level) (This)->lpVtbl->UnlockRect(This,level)
+#define IWineD3DTexture_AddDirtyRect(This,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetLevelDesc_Proxy(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DTexture_GetLevelDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetSurfaceLevel_Proxy(
+ IWineD3DTexture* This,
+ UINT level,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DTexture_GetSurfaceLevel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_LockRect_Proxy(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+void __RPC_STUB IWineD3DTexture_LockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_UnlockRect_Proxy(
+ IWineD3DTexture* This,
+ UINT level);
+void __RPC_STUB IWineD3DTexture_UnlockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_AddDirtyRect_Proxy(
+ IWineD3DTexture* This,
+ const RECT *dirty_rect);
+void __RPC_STUB IWineD3DTexture_AddDirtyRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DCubeTexture interface
+ */
+#ifndef __IWineD3DCubeTexture_INTERFACE_DEFINED__
+#define __IWineD3DCubeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DCubeTexture, 0x41752900, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DCubeTexture : public IWineD3DBaseTexture
+{
+ virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+ UINT level,
+ WINED3DSURFACE_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCubeMapSurface(
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRect(
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+ WINED3DCUBEMAP_FACES face,
+ UINT level) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+ WINED3DCUBEMAP_FACES face,
+ const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DCubeTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DCubeTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DCubeTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DCubeTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DCubeTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DCubeTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DCubeTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DCubeTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DCubeTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DCubeTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DCubeTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DCubeTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DCubeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DCubeTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DCubeTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DCubeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DCubeTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DCubeTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DCubeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DCubeTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DCubeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DCubeTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DCubeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DCubeTexture* This);
+
+ /*** IWineD3DCubeTexture methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+ IWineD3DCubeTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *GetCubeMapSurface)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *LockRect)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level);
+
+ HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ const RECT *dirty_rect);
+
+ END_INTERFACE
+} IWineD3DCubeTextureVtbl;
+interface IWineD3DCubeTexture {
+ CONST_VTBL IWineD3DCubeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DCubeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DCubeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DCubeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DCubeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DCubeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DCubeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DCubeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DCubeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DCubeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DCubeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DCubeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DCubeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DCubeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DCubeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DCubeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DCubeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DCubeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DCubeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DCubeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DCubeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DCubeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DCubeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DCubeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DCubeTexture methods ***/
+#define IWineD3DCubeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DCubeTexture_GetCubeMapSurface(This,face,level,surface) (This)->lpVtbl->GetCubeMapSurface(This,face,level,surface)
+#define IWineD3DCubeTexture_LockRect(This,face,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,face,level,locked_rect,rect,flags)
+#define IWineD3DCubeTexture_UnlockRect(This,face,level) (This)->lpVtbl->UnlockRect(This,face,level)
+#define IWineD3DCubeTexture_AddDirtyRect(This,face,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,face,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetLevelDesc_Proxy(
+ IWineD3DCubeTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DCubeTexture_GetLevelDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetCubeMapSurface_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DCubeTexture_GetCubeMapSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_LockRect_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+void __RPC_STUB IWineD3DCubeTexture_LockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_UnlockRect_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level);
+void __RPC_STUB IWineD3DCubeTexture_UnlockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_AddDirtyRect_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ const RECT *dirty_rect);
+void __RPC_STUB IWineD3DCubeTexture_AddDirtyRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DCubeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture interface
+ */
+#ifndef __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+#define __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolumeTexture, 0x7b39470c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolumeTexture : public IWineD3DBaseTexture
+{
+ virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+ UINT level,
+ WINED3DVOLUME_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVolumeLevel(
+ UINT level,
+ IWineD3DVolume **volume) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockBox(
+ UINT level,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+ UINT level) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddDirtyBox(
+ const WINED3DBOX *dirty_box) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVolumeTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVolumeTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVolumeTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVolumeTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DVolumeTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DVolumeTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DVolumeTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DVolumeTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DVolumeTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DVolumeTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DVolumeTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DVolumeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DVolumeTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DVolumeTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DVolumeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DVolumeTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DVolumeTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DVolumeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DVolumeTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DVolumeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DVolumeTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DVolumeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DVolumeTexture* This);
+
+ /*** IWineD3DVolumeTexture methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DVOLUME_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ IWineD3DVolume **volume);
+
+ HRESULT (STDMETHODCALLTYPE *LockBox)(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+ IWineD3DVolumeTexture* This,
+ UINT level);
+
+ HRESULT (STDMETHODCALLTYPE *AddDirtyBox)(
+ IWineD3DVolumeTexture* This,
+ const WINED3DBOX *dirty_box);
+
+ END_INTERFACE
+} IWineD3DVolumeTextureVtbl;
+interface IWineD3DVolumeTexture {
+ CONST_VTBL IWineD3DVolumeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolumeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolumeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolumeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolumeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolumeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolumeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolumeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolumeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolumeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolumeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolumeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolumeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DVolumeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DVolumeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DVolumeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DVolumeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DVolumeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DVolumeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DVolumeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DVolumeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DVolumeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DVolumeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DVolumeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DVolumeTexture methods ***/
+#define IWineD3DVolumeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DVolumeTexture_GetVolumeLevel(This,level,volume) (This)->lpVtbl->GetVolumeLevel(This,level,volume)
+#define IWineD3DVolumeTexture_LockBox(This,level,locked_box,box,flags) (This)->lpVtbl->LockBox(This,level,locked_box,box,flags)
+#define IWineD3DVolumeTexture_UnlockBox(This,level) (This)->lpVtbl->UnlockBox(This,level)
+#define IWineD3DVolumeTexture_AddDirtyBox(This,dirty_box) (This)->lpVtbl->AddDirtyBox(This,dirty_box)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetLevelDesc_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolumeTexture_GetLevelDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetVolumeLevel_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DVolumeTexture_GetVolumeLevel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_LockBox_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+void __RPC_STUB IWineD3DVolumeTexture_LockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_UnlockBox_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level);
+void __RPC_STUB IWineD3DVolumeTexture_UnlockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_AddDirtyBox_Proxy(
+ IWineD3DVolumeTexture* This,
+ const WINED3DBOX *dirty_box);
+void __RPC_STUB IWineD3DVolumeTexture_AddDirtyBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DVolumeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration interface
+ */
+#ifndef __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+#define __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexDeclaration, 0x7cd55be6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexDeclaration : public IWineD3DBase
+{
+};
+#else
+typedef struct IWineD3DVertexDeclarationVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVertexDeclaration* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVertexDeclaration* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVertexDeclaration* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVertexDeclaration* This,
+ IUnknown **parent);
+
+ END_INTERFACE
+} IWineD3DVertexDeclarationVtbl;
+interface IWineD3DVertexDeclaration {
+ CONST_VTBL IWineD3DVertexDeclarationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexDeclaration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexDeclaration_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexDeclaration_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexDeclaration_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+
+#endif /* __IWineD3DVertexDeclaration_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DStateBlock interface
+ */
+#ifndef __IWineD3DStateBlock_INTERFACE_DEFINED__
+#define __IWineD3DStateBlock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DStateBlock, 0x83b073ce, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DStateBlock : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Capture(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Apply(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitStartupStateBlock(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DStateBlockVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DStateBlock* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DStateBlock* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DStateBlock* This);
+
+ /*** IWineD3DStateBlock methods ***/
+ HRESULT (STDMETHODCALLTYPE *Capture)(
+ IWineD3DStateBlock* This);
+
+ HRESULT (STDMETHODCALLTYPE *Apply)(
+ IWineD3DStateBlock* This);
+
+ HRESULT (STDMETHODCALLTYPE *InitStartupStateBlock)(
+ IWineD3DStateBlock* This);
+
+ END_INTERFACE
+} IWineD3DStateBlockVtbl;
+interface IWineD3DStateBlock {
+ CONST_VTBL IWineD3DStateBlockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DStateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DStateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DStateBlock_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DStateBlock methods ***/
+#define IWineD3DStateBlock_Capture(This) (This)->lpVtbl->Capture(This)
+#define IWineD3DStateBlock_Apply(This) (This)->lpVtbl->Apply(This)
+#define IWineD3DStateBlock_InitStartupStateBlock(This) (This)->lpVtbl->InitStartupStateBlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Capture_Proxy(
+ IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Capture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Apply_Proxy(
+ IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Apply_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_InitStartupStateBlock_Proxy(
+ IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_InitStartupStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DStateBlock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DQuery interface
+ */
+#ifndef __IWineD3DQuery_INTERFACE_DEFINED__
+#define __IWineD3DQuery_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DQuery, 0x905ddbac, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DQuery : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetData(
+ void *data,
+ DWORD data_size,
+ DWORD flags) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetDataSize(
+ ) = 0;
+
+ virtual WINED3DQUERYTYPE STDMETHODCALLTYPE GetType(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Issue(
+ DWORD flags) = 0;
+
+};
+#else
+typedef struct IWineD3DQueryVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DQuery* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DQuery* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DQuery* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DQuery* This,
+ IUnknown **parent);
+
+ /*** IWineD3DQuery methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetData)(
+ IWineD3DQuery* This,
+ void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ DWORD (STDMETHODCALLTYPE *GetDataSize)(
+ IWineD3DQuery* This);
+
+ WINED3DQUERYTYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DQuery* This);
+
+ HRESULT (STDMETHODCALLTYPE *Issue)(
+ IWineD3DQuery* This,
+ DWORD flags);
+
+ END_INTERFACE
+} IWineD3DQueryVtbl;
+interface IWineD3DQuery {
+ CONST_VTBL IWineD3DQueryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DQuery_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DQuery_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DQuery methods ***/
+#define IWineD3DQuery_GetData(This,data,data_size,flags) (This)->lpVtbl->GetData(This,data,data_size,flags)
+#define IWineD3DQuery_GetDataSize(This) (This)->lpVtbl->GetDataSize(This)
+#define IWineD3DQuery_GetType(This) (This)->lpVtbl->GetType(This)
+#define IWineD3DQuery_Issue(This,flags) (This)->lpVtbl->Issue(This,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_GetData_Proxy(
+ IWineD3DQuery* This,
+ void *data,
+ DWORD data_size,
+ DWORD flags);
+void __RPC_STUB IWineD3DQuery_GetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DQuery_GetDataSize_Proxy(
+ IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetDataSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DQUERYTYPE STDMETHODCALLTYPE IWineD3DQuery_GetType_Proxy(
+ IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_Issue_Proxy(
+ IWineD3DQuery* This,
+ DWORD flags);
+void __RPC_STUB IWineD3DQuery_Issue_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DQuery_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSwapChain interface
+ */
+#ifndef __IWineD3DSwapChain_INTERFACE_DEFINED__
+#define __IWineD3DSwapChain_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSwapChain, 0x34d01b10, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSwapChain : public IWineD3DBase
+{
+ virtual void STDMETHODCALLTYPE Destroy(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDevice(
+ IWineD3DDevice **device) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Present(
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDestWindowOverride(
+ HWND window) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+ IWineD3DSurface *dst_surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+ WINED3DRASTER_STATUS *raster_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPresentParameters(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetGammaRamp(
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetGammaRamp(
+ WINED3DGAMMARAMP *ramp) = 0;
+
+};
+#else
+typedef struct IWineD3DSwapChainVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DSwapChain* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DSwapChain* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DSwapChain* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DSwapChain* This,
+ IUnknown **parent);
+
+ /*** IWineD3DSwapChain methods ***/
+ void (STDMETHODCALLTYPE *Destroy)(
+ IWineD3DSwapChain* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetDevice)(
+ IWineD3DSwapChain* This,
+ IWineD3DDevice **device);
+
+ HRESULT (STDMETHODCALLTYPE *Present)(
+ IWineD3DSwapChain* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *SetDestWindowOverride)(
+ IWineD3DSwapChain* This,
+ HWND window);
+
+ HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+ IWineD3DSwapChain* This,
+ IWineD3DSurface *dst_surface);
+
+ HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+ IWineD3DSwapChain* This,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+
+ HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+ IWineD3DSwapChain* This,
+ WINED3DRASTER_STATUS *raster_status);
+
+ HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+ IWineD3DSwapChain* This,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *GetPresentParameters)(
+ IWineD3DSwapChain* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetGammaRamp)(
+ IWineD3DSwapChain* This,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+
+ HRESULT (STDMETHODCALLTYPE *GetGammaRamp)(
+ IWineD3DSwapChain* This,
+ WINED3DGAMMARAMP *ramp);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *Flush)(
+ IWineD3DSwapChain* This);
+
+ HRESULT (STDMETHODCALLTYPE *PresentRt)(
+ IWineD3DSwapChain* This,
+ IWineD3DSurface* surf);
+#endif
+ END_INTERFACE
+} IWineD3DSwapChainVtbl;
+interface IWineD3DSwapChain {
+ CONST_VTBL IWineD3DSwapChainVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSwapChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSwapChain_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSwapChain_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSwapChain_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DSwapChain methods ***/
+#define IWineD3DSwapChain_Destroy(This) (This)->lpVtbl->Destroy(This)
+#define IWineD3DSwapChain_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#define IWineD3DSwapChain_Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags)
+#define IWineD3DSwapChain_SetDestWindowOverride(This,window) (This)->lpVtbl->SetDestWindowOverride(This,window)
+#define IWineD3DSwapChain_GetFrontBufferData(This,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,dst_surface)
+#define IWineD3DSwapChain_GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DSwapChain_GetRasterStatus(This,raster_status) (This)->lpVtbl->GetRasterStatus(This,raster_status)
+#define IWineD3DSwapChain_GetDisplayMode(This,mode) (This)->lpVtbl->GetDisplayMode(This,mode)
+#define IWineD3DSwapChain_GetPresentParameters(This,present_parameters) (This)->lpVtbl->GetPresentParameters(This,present_parameters)
+#define IWineD3DSwapChain_SetGammaRamp(This,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,flags,ramp)
+#define IWineD3DSwapChain_GetGammaRamp(This,ramp) (This)->lpVtbl->GetGammaRamp(This,ramp)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DSwapChain_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DSwapChain_PresentRt(This,surf) (This)->lpVtbl->PresentRt(This,surf)
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DSwapChain_Destroy_Proxy(
+ IWineD3DSwapChain* This);
+void __RPC_STUB IWineD3DSwapChain_Destroy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDevice_Proxy(
+ IWineD3DSwapChain* This,
+ IWineD3DDevice **device);
+void __RPC_STUB IWineD3DSwapChain_GetDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_Present_Proxy(
+ IWineD3DSwapChain* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region,
+ DWORD flags);
+void __RPC_STUB IWineD3DSwapChain_Present_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetDestWindowOverride_Proxy(
+ IWineD3DSwapChain* This,
+ HWND window);
+void __RPC_STUB IWineD3DSwapChain_SetDestWindowOverride_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetFrontBufferData_Proxy(
+ IWineD3DSwapChain* This,
+ IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DSwapChain_GetFrontBufferData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetBackBuffer_Proxy(
+ IWineD3DSwapChain* This,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DSwapChain_GetBackBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetRasterStatus_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DSwapChain_GetRasterStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDisplayMode_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DSwapChain_GetDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetPresentParameters_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DSwapChain_GetPresentParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetGammaRamp_Proxy(
+ IWineD3DSwapChain* This,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_SetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetGammaRamp_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_GetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DSwapChain_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBuffer interface
+ */
+#ifndef __IWineD3DBuffer_INTERFACE_DEFINED__
+#define __IWineD3DBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBuffer, 0xb3f028e8, 0x1a40, 0x4ab3, 0x92,0x92, 0x5b,0xf6,0xcf,0xd8,0x02,0x09);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBuffer : public IWineD3DResource
+{
+ virtual HRESULT STDMETHODCALLTYPE Map(
+ UINT offset,
+ UINT size,
+ BYTE **data,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unmap(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDesc(
+ WINED3DBUFFER_DESC *desc) = 0;
+
+};
+#else
+typedef struct IWineD3DBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBuffer* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBuffer* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DBuffer* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DBuffer* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DBuffer* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DBuffer* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DBuffer* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DBuffer* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DBuffer* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DBuffer* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *Map)(
+ IWineD3DBuffer* This,
+ UINT offset,
+ UINT size,
+ BYTE **data,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *Unmap)(
+ IWineD3DBuffer* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetDesc)(
+ IWineD3DBuffer* This,
+ WINED3DBUFFER_DESC *desc);
+
+ END_INTERFACE
+} IWineD3DBufferVtbl;
+interface IWineD3DBuffer {
+ CONST_VTBL IWineD3DBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBuffer_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBuffer_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBuffer_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBuffer_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBuffer_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBuffer_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBuffer_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBuffer_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBuffer_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBuffer methods ***/
+#define IWineD3DBuffer_Map(This,offset,size,data,flags) (This)->lpVtbl->Map(This,offset,size,data,flags)
+#define IWineD3DBuffer_Unmap(This) (This)->lpVtbl->Unmap(This)
+#define IWineD3DBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Map_Proxy(
+ IWineD3DBuffer* This,
+ UINT offset,
+ UINT size,
+ BYTE **data,
+ DWORD flags);
+void __RPC_STUB IWineD3DBuffer_Map_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Unmap_Proxy(
+ IWineD3DBuffer* This);
+void __RPC_STUB IWineD3DBuffer_Unmap_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_GetDesc_Proxy(
+ IWineD3DBuffer* This,
+ WINED3DBUFFER_DESC *desc);
+void __RPC_STUB IWineD3DBuffer_GetDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseShader interface
+ */
+#ifndef __IWineD3DBaseShader_INTERFACE_DEFINED__
+#define __IWineD3DBaseShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseShader, 0xeac93065, 0xa4df, 0x446f, 0x86,0xa1, 0x9e,0xf2,0xbc,0xa4,0x0a,0x3c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseShader : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetFunction(
+ void *data,
+ UINT *data_size) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBaseShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBaseShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBaseShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBaseShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DBaseShader* This,
+ void *data,
+ UINT *data_size);
+
+ END_INTERFACE
+} IWineD3DBaseShaderVtbl;
+interface IWineD3DBaseShader {
+ CONST_VTBL IWineD3DBaseShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DBaseShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBaseShader_GetFunction_Proxy(
+ IWineD3DBaseShader* This,
+ void *data,
+ UINT *data_size);
+void __RPC_STUB IWineD3DBaseShader_GetFunction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBaseShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexShader interface
+ */
+#ifndef __IWineD3DVertexShader_INTERFACE_DEFINED__
+#define __IWineD3DVertexShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexShader, 0x7f7a2b60, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexShader : public IWineD3DBaseShader
+{
+ virtual HRESULT STDMETHODCALLTYPE SetLocalConstantsF(
+ UINT start_idx,
+ const float *src_data,
+ UINT vector4f_count) = 0;
+
+};
+#else
+typedef struct IWineD3DVertexShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVertexShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVertexShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVertexShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVertexShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DVertexShader* This,
+ void *data,
+ UINT *data_size);
+
+ /*** IWineD3DVertexShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetLocalConstantsF)(
+ IWineD3DVertexShader* This,
+ UINT start_idx,
+ const float *src_data,
+ UINT vector4f_count);
+
+ END_INTERFACE
+} IWineD3DVertexShaderVtbl;
+interface IWineD3DVertexShader {
+ CONST_VTBL IWineD3DVertexShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DVertexShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+/*** IWineD3DVertexShader methods ***/
+#define IWineD3DVertexShader_SetLocalConstantsF(This,start_idx,src_data,vector4f_count) (This)->lpVtbl->SetLocalConstantsF(This,start_idx,src_data,vector4f_count)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVertexShader_SetLocalConstantsF_Proxy(
+ IWineD3DVertexShader* This,
+ UINT start_idx,
+ const float *src_data,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DVertexShader_SetLocalConstantsF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DVertexShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DGeometryShader interface
+ */
+#ifndef __IWineD3DGeometryShader_INTERFACE_DEFINED__
+#define __IWineD3DGeometryShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DGeometryShader, 0x8276c113, 0x388b, 0x49d1, 0xad,0x8b, 0xc9,0xdd,0x8b,0xcb,0xab,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DGeometryShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DGeometryShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DGeometryShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DGeometryShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DGeometryShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DGeometryShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DGeometryShader* This,
+ void *data,
+ UINT *data_size);
+
+ END_INTERFACE
+} IWineD3DGeometryShaderVtbl;
+interface IWineD3DGeometryShader {
+ CONST_VTBL IWineD3DGeometryShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DGeometryShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DGeometryShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DGeometryShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DGeometryShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DGeometryShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif /* __IWineD3DGeometryShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPixelShader interface
+ */
+#ifndef __IWineD3DPixelShader_INTERFACE_DEFINED__
+#define __IWineD3DPixelShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPixelShader, 0x818503da, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPixelShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DPixelShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DPixelShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DPixelShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DPixelShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DPixelShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DPixelShader* This,
+ void *data,
+ UINT *data_size);
+
+ END_INTERFACE
+} IWineD3DPixelShaderVtbl;
+interface IWineD3DPixelShader {
+ CONST_VTBL IWineD3DPixelShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPixelShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPixelShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPixelShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPixelShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DPixelShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif /* __IWineD3DPixelShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DDevice interface
+ */
+#ifndef __IWineD3DDevice_INTERFACE_DEFINED__
+#define __IWineD3DDevice_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDevice, 0x6d10a2ce, 0x09d0, 0x4a53, 0xa4,0x27, 0x11,0x38,0x8f,0x9f,0x8c,0xa5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDevice : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateBuffer(
+ struct wined3d_buffer_desc *desc,
+ const void *data,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ IWineD3DBuffer **buffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexBuffer(
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **vertex_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateIndexBuffer(
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **index_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateStateBlock(
+ WINED3DSTATEBLOCKTYPE type,
+ IWineD3DStateBlock **stateblock,
+ IUnknown *parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ BOOL lockable,
+ BOOL discard,
+ UINT level,
+ IWineD3DSurface **surface,
+ DWORD usage,
+ WINED3DPOOL pool,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ WINED3DSURFTYPE surface_type,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateRendertargetView(
+ IWineD3DResource *resource,
+ IUnknown *parent,
+ IWineD3DRendertargetView **rendertarget_view) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateTexture(
+ UINT width,
+ UINT height,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVolumeTexture(
+ UINT width,
+ UINT height,
+ UINT depth,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolumeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pavClientMem
+#endif
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+ UINT width,
+ UINT height,
+ UINT depth,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolume **volume,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateCubeTexture(
+ UINT edge_length,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DCubeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateQuery(
+ WINED3DQUERYTYPE type,
+ IWineD3DQuery **query,
+ IUnknown *parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain,
+ IUnknown *parent,
+ WINED3DSURFTYPE surface_type) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclaration(
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ const WINED3DVERTEXELEMENT *elements,
+ UINT element_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclarationFromFVF(
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ DWORD fvf) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexShader(
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DVertexShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader(
+ const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DGeometryShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreatePixelShader(
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DPixelShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreatePalette(
+ DWORD flags,
+ const PALETTEENTRY *palette_entry,
+ IWineD3DPalette **palette,
+ IUnknown *parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Init3D(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitGDI(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Uninit3D(
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UninitGDI(
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+ virtual void STDMETHODCALLTYPE SetMultithreaded(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EvictManagedResources(
+ ) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetAvailableTextureMem(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+ UINT swapchain_idx,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+ WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+ WINED3DCAPS *caps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDirect3D(
+ IWineD3D **d3d) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+ UINT swapchain_idx,
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDisplayMode(
+ UINT swapchain_idx,
+ const WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetNumberOfSwapChains(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+ UINT swapchain_idx,
+ WINED3DRASTER_STATUS *raster_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSwapChain(
+ UINT swapchain_idx,
+ IWineD3DSwapChain **swapchain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDialogBoxMode(
+ BOOL enable_dialogs) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCursorProperties(
+ UINT x_hotspot,
+ UINT y_hotspot,
+ IWineD3DSurface *cursor_surface) = 0;
+
+ virtual void STDMETHODCALLTYPE SetCursorPosition(
+ int x_screen_space,
+ int y_screen_space,
+ DWORD flags) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE ShowCursor(
+ BOOL show) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipPlane(
+ DWORD plane_idx,
+ const float *plane) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipPlane(
+ DWORD plane_idx,
+ float *plane) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipStatus(
+ const WINED3DCLIPSTATUS *clip_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipStatus(
+ WINED3DCLIPSTATUS *clip_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCurrentTexturePalette(
+ UINT palette_number) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentTexturePalette(
+ UINT *palette_number) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDepthStencilSurface(
+ IWineD3DSurface *depth_stencil) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDepthStencilSurface(
+ IWineD3DSurface **depth_stencil) = 0;
+
+ virtual void STDMETHODCALLTYPE SetGammaRamp(
+ UINT swapchain_idx,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp) = 0;
+
+ virtual void STDMETHODCALLTYPE GetGammaRamp(
+ UINT swapchain_idx,
+ WINED3DGAMMARAMP *ramp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetIndexBuffer(
+ IWineD3DBuffer *index_buffer,
+ WINED3DFORMAT format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetIndexBuffer(
+ IWineD3DBuffer **index_buffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetBaseVertexIndex(
+ INT base_index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBaseVertexIndex(
+ INT *base_index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetLight(
+ DWORD light_idx,
+ const WINED3DLIGHT *light) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetLight(
+ DWORD light_idx,
+ WINED3DLIGHT *light) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetLightEnable(
+ DWORD light_idx,
+ BOOL enable) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetLightEnable(
+ DWORD light_idx,
+ BOOL *enable) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMaterial(
+ const WINED3DMATERIAL *material) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMaterial(
+ WINED3DMATERIAL *material) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetNPatchMode(
+ float segments) = 0;
+
+ virtual float STDMETHODCALLTYPE GetNPatchMode(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPaletteEntries(
+ UINT palette_number,
+ const PALETTEENTRY *entries) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPaletteEntries(
+ UINT palette_number,
+ PALETTEENTRY *entries) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShader(
+ IWineD3DPixelShader *shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShader(
+ IWineD3DPixelShader **shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantB(
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantB(
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantI(
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantI(
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantF(
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantF(
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetRenderState(
+ WINED3DRENDERSTATETYPE state,
+ DWORD value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRenderState(
+ WINED3DRENDERSTATETYPE state,
+ DWORD *value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetRenderTarget(
+ DWORD render_target_idx,
+ IWineD3DSurface *render_target,
+ BOOL set_viewport) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRenderTarget(
+ DWORD render_target_idx,
+ IWineD3DSurface **render_target) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFrontBackBuffers(
+ IWineD3DSurface *front,
+ IWineD3DSurface *back) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSamplerState(
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSamplerState(
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD *value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetScissorRect(
+ const RECT *rect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetScissorRect(
+ RECT *rect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSoftwareVertexProcessing(
+ BOOL software) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE GetSoftwareVertexProcessing(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetStreamSource(
+ UINT stream_idx,
+ IWineD3DBuffer *buffer,
+ UINT offset,
+ UINT stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetStreamSource(
+ UINT stream_idx,
+ IWineD3DBuffer **buffer,
+ UINT *offset,
+ UINT *stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetStreamSourceFreq(
+ UINT stream_idx,
+ UINT divider) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetStreamSourceFreq(
+ UINT stream_idx,
+ UINT *divider) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTexture(
+ DWORD stage,
+ IWineD3DBaseTexture *texture) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTexture(
+ DWORD stage,
+ IWineD3DBaseTexture **texture) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTextureStageState(
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTextureStageState(
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD *value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTransform(
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTransform(
+ WINED3DTRANSFORMSTATETYPE state,
+ WINED3DMATRIX *matrix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexDeclaration(
+ IWineD3DVertexDeclaration *declaration) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexDeclaration(
+ IWineD3DVertexDeclaration **declaration) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShader(
+ IWineD3DVertexShader *shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShader(
+ IWineD3DVertexShader **shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantB(
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantB(
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantI(
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantI(
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantF(
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantF(
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetViewport(
+ const WINED3DVIEWPORT *viewport) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetViewport(
+ WINED3DVIEWPORT *viewport) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MultiplyTransform(
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ValidateDevice(
+ DWORD *num_passes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ProcessVertices(
+ UINT src_start_idx,
+ UINT dst_idx,
+ UINT vertex_count,
+ IWineD3DBuffer *dest_buffer,
+ IWineD3DVertexDeclaration *declaration,
+ DWORD flags,
+ DWORD DestFVF) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BeginStateBlock(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EndStateBlock(
+ IWineD3DStateBlock **stateblock) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BeginScene(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EndScene(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Present(
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clear(
+ DWORD rect_count,
+ const WINED3DRECT *rects,
+ DWORD flags,
+ WINED3DCOLOR color,
+ float z,
+ DWORD stencil) = 0;
+
+ virtual void STDMETHODCALLTYPE ClearRendertargetView(
+ IWineD3DRendertargetView *rendertarget_view,
+ const float color[4]) = 0;
+
+ virtual void STDMETHODCALLTYPE SetPrimitiveType(
+ WINED3DPRIMITIVETYPE primitive_topology) = 0;
+
+ virtual void STDMETHODCALLTYPE GetPrimitiveType(
+ WINED3DPRIMITIVETYPE *primitive_topology) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawPrimitive(
+ UINT start_vertex,
+ UINT vertex_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitive(
+ UINT start_idx,
+ UINT index_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveUP(
+ UINT vertex_count,
+ const void *stream_data,
+ UINT stream_stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveUP(
+ UINT index_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format,
+ const void *stream_data,
+ UINT stream_stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveStrided(
+ UINT vertex_count,
+ const WineDirect3DVertexStridedData *strided_data) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveStrided(
+ UINT index_count,
+ const WineDirect3DVertexStridedData *strided_data,
+ UINT vertex_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawRectPatch(
+ UINT handle,
+ const float *num_segs,
+ const WINED3DRECTPATCH_INFO *rect_patch_info) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawTriPatch(
+ UINT handle,
+ const float *num_segs,
+ const WINED3DTRIPATCH_INFO *tri_patch_info) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeletePatch(
+ UINT handle) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ColorFill(
+ IWineD3DSurface *surface,
+ const WINED3DRECT *rect,
+ WINED3DCOLOR color) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateTexture(
+ IWineD3DBaseTexture *src_texture,
+ IWineD3DBaseTexture *dst_texture) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateSurface(
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const POINT *dst_point) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+ UINT swapchain_idx,
+ IWineD3DSurface *dst_surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumResources(
+ HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+ void *data) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSurfaceFromDC(
+ HDC dc,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AcquireFocusWindow(
+ HWND window) = 0;
+
+ virtual void STDMETHODCALLTYPE ReleaseFocusWindow(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddSwapChain(
+ IWineD3DSwapChain *swapchain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RemoveSwapChain(
+ IWineD3DSwapChain *swapchain) = 0;
+
+#ifdef VBOX_WITH_WDDM
+ virtual HRESULT STDMETHODCALLTYPE Flush(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE VolBlt(IWineD3DDevice *iface,
+ IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+ const WINED3DBOX *pSrcBoxArg,
+ const VBOXPOINT3D *pDstPoin3D
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE VolTexBlt(IWineD3DDevice *iface,
+ IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+ const WINED3DBOX *pSrcBoxArg,
+ const VBOXPOINT3D *pDstPoin3D
+ ) = 0;
+#endif
+};
+#else
+typedef struct IWineD3DDeviceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DDevice* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DDevice* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DDevice* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DDevice* This,
+ IUnknown **parent);
+
+ /*** IWineD3DDevice methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateBuffer)(
+ IWineD3DDevice* This,
+ struct wined3d_buffer_desc *desc,
+ const void *data,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ IWineD3DBuffer **buffer);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexBuffer)(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **vertex_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreateIndexBuffer)(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **index_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreateStateBlock)(
+ IWineD3DDevice* This,
+ WINED3DSTATEBLOCKTYPE type,
+ IWineD3DStateBlock **stateblock,
+ IUnknown *parent);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ BOOL lockable,
+ BOOL discard,
+ UINT level,
+ IWineD3DSurface **surface,
+ DWORD usage,
+ WINED3DPOOL pool,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ WINED3DSURFTYPE surface_type,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateRendertargetView)(
+ IWineD3DDevice* This,
+ IWineD3DResource *resource,
+ IUnknown *parent,
+ IWineD3DRendertargetView **rendertarget_view);
+
+ HRESULT (STDMETHODCALLTYPE *CreateTexture)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateVolumeTexture)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolumeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolume **volume,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateCubeTexture)(
+ IWineD3DDevice* This,
+ UINT edge_length,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DCubeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateQuery)(
+ IWineD3DDevice* This,
+ WINED3DQUERYTYPE type,
+ IWineD3DQuery **query,
+ IUnknown *parent);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain,
+ IUnknown *parent,
+ WINED3DSURFTYPE surface_type);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexDeclaration)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ const WINED3DVERTEXELEMENT *elements,
+ UINT element_count);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexDeclarationFromFVF)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ DWORD fvf);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexShader)(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DVertexShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreateGeometryShader)(
+ IWineD3DDevice* This,
+ const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DGeometryShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreatePixelShader)(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DPixelShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreatePalette)(
+ IWineD3DDevice* This,
+ DWORD flags,
+ const PALETTEENTRY *palette_entry,
+ IWineD3DPalette **palette,
+ IUnknown *parent);
+
+ HRESULT (STDMETHODCALLTYPE *Init3D)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *InitGDI)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *Uninit3D)(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+ HRESULT (STDMETHODCALLTYPE *UninitGDI)(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+ void (STDMETHODCALLTYPE *SetMultithreaded)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *EvictManagedResources)(
+ IWineD3DDevice* This);
+
+ UINT (STDMETHODCALLTYPE *GetAvailableTextureMem)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+
+ HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+ IWineD3DDevice* This,
+ WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+ IWineD3DDevice* This,
+ WINED3DCAPS *caps);
+
+ HRESULT (STDMETHODCALLTYPE *GetDirect3D)(
+ IWineD3DDevice* This,
+ IWineD3D **d3d);
+
+ HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *SetDisplayMode)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ const WINED3DDISPLAYMODE *mode);
+
+ UINT (STDMETHODCALLTYPE *GetNumberOfSwapChains)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DRASTER_STATUS *raster_status);
+
+ HRESULT (STDMETHODCALLTYPE *GetSwapChain)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSwapChain **swapchain);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetDialogBoxMode)(
+ IWineD3DDevice* This,
+ BOOL enable_dialogs);
+
+ HRESULT (STDMETHODCALLTYPE *SetCursorProperties)(
+ IWineD3DDevice* This,
+ UINT x_hotspot,
+ UINT y_hotspot,
+ IWineD3DSurface *cursor_surface);
+
+ void (STDMETHODCALLTYPE *SetCursorPosition)(
+ IWineD3DDevice* This,
+ int x_screen_space,
+ int y_screen_space,
+ DWORD flags);
+
+ BOOL (STDMETHODCALLTYPE *ShowCursor)(
+ IWineD3DDevice* This,
+ BOOL show);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipPlane)(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ const float *plane);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipPlane)(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ float *plane);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipStatus)(
+ IWineD3DDevice* This,
+ const WINED3DCLIPSTATUS *clip_status);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipStatus)(
+ IWineD3DDevice* This,
+ WINED3DCLIPSTATUS *clip_status);
+
+ HRESULT (STDMETHODCALLTYPE *SetCurrentTexturePalette)(
+ IWineD3DDevice* This,
+ UINT palette_number);
+
+ HRESULT (STDMETHODCALLTYPE *GetCurrentTexturePalette)(
+ IWineD3DDevice* This,
+ UINT *palette_number);
+
+ HRESULT (STDMETHODCALLTYPE *SetDepthStencilSurface)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *depth_stencil);
+
+ HRESULT (STDMETHODCALLTYPE *GetDepthStencilSurface)(
+ IWineD3DDevice* This,
+ IWineD3DSurface **depth_stencil);
+
+ void (STDMETHODCALLTYPE *SetGammaRamp)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+
+ void (STDMETHODCALLTYPE *GetGammaRamp)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DGAMMARAMP *ramp);
+
+ HRESULT (STDMETHODCALLTYPE *SetIndexBuffer)(
+ IWineD3DDevice* This,
+ IWineD3DBuffer *index_buffer,
+ WINED3DFORMAT format);
+
+ HRESULT (STDMETHODCALLTYPE *GetIndexBuffer)(
+ IWineD3DDevice* This,
+ IWineD3DBuffer **index_buffer);
+
+ HRESULT (STDMETHODCALLTYPE *SetBaseVertexIndex)(
+ IWineD3DDevice* This,
+ INT base_index);
+
+ HRESULT (STDMETHODCALLTYPE *GetBaseVertexIndex)(
+ IWineD3DDevice* This,
+ INT *base_index);
+
+ HRESULT (STDMETHODCALLTYPE *SetLight)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ const WINED3DLIGHT *light);
+
+ HRESULT (STDMETHODCALLTYPE *GetLight)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ WINED3DLIGHT *light);
+
+ HRESULT (STDMETHODCALLTYPE *SetLightEnable)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL enable);
+
+ HRESULT (STDMETHODCALLTYPE *GetLightEnable)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL *enable);
+
+ HRESULT (STDMETHODCALLTYPE *SetMaterial)(
+ IWineD3DDevice* This,
+ const WINED3DMATERIAL *material);
+
+ HRESULT (STDMETHODCALLTYPE *GetMaterial)(
+ IWineD3DDevice* This,
+ WINED3DMATERIAL *material);
+
+ HRESULT (STDMETHODCALLTYPE *SetNPatchMode)(
+ IWineD3DDevice* This,
+ float segments);
+
+ float (STDMETHODCALLTYPE *GetNPatchMode)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetPaletteEntries)(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ const PALETTEENTRY *entries);
+
+ HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ PALETTEENTRY *entries);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShader)(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader *shader);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShader)(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader **shader);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetRenderState)(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD value);
+
+ HRESULT (STDMETHODCALLTYPE *GetRenderState)(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD *value);
+
+ HRESULT (STDMETHODCALLTYPE *SetRenderTarget)(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface *render_target,
+ BOOL set_viewport);
+
+ HRESULT (STDMETHODCALLTYPE *GetRenderTarget)(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface **render_target);
+
+ HRESULT (STDMETHODCALLTYPE *SetFrontBackBuffers)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *front,
+ IWineD3DSurface *back);
+
+ HRESULT (STDMETHODCALLTYPE *SetSamplerState)(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD value);
+
+ HRESULT (STDMETHODCALLTYPE *GetSamplerState)(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD *value);
+
+ HRESULT (STDMETHODCALLTYPE *SetScissorRect)(
+ IWineD3DDevice* This,
+ const RECT *rect);
+
+ HRESULT (STDMETHODCALLTYPE *GetScissorRect)(
+ IWineD3DDevice* This,
+ RECT *rect);
+
+ HRESULT (STDMETHODCALLTYPE *SetSoftwareVertexProcessing)(
+ IWineD3DDevice* This,
+ BOOL software);
+
+ BOOL (STDMETHODCALLTYPE *GetSoftwareVertexProcessing)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetStreamSource)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer *buffer,
+ UINT offset,
+ UINT stride);
+
+ HRESULT (STDMETHODCALLTYPE *GetStreamSource)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer **buffer,
+ UINT *offset,
+ UINT *stride);
+
+ HRESULT (STDMETHODCALLTYPE *SetStreamSourceFreq)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT divider);
+
+ HRESULT (STDMETHODCALLTYPE *GetStreamSourceFreq)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT *divider);
+
+ HRESULT (STDMETHODCALLTYPE *SetTexture)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture *texture);
+
+ HRESULT (STDMETHODCALLTYPE *GetTexture)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture **texture);
+
+ HRESULT (STDMETHODCALLTYPE *SetTextureStageState)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD value);
+
+ HRESULT (STDMETHODCALLTYPE *GetTextureStageState)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD *value);
+
+ HRESULT (STDMETHODCALLTYPE *SetTransform)(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+
+ HRESULT (STDMETHODCALLTYPE *GetTransform)(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ WINED3DMATRIX *matrix);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexDeclaration)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration *declaration);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexDeclaration)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShader)(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader *shader);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShader)(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader **shader);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetViewport)(
+ IWineD3DDevice* This,
+ const WINED3DVIEWPORT *viewport);
+
+ HRESULT (STDMETHODCALLTYPE *GetViewport)(
+ IWineD3DDevice* This,
+ WINED3DVIEWPORT *viewport);
+
+ HRESULT (STDMETHODCALLTYPE *MultiplyTransform)(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+
+ HRESULT (STDMETHODCALLTYPE *ValidateDevice)(
+ IWineD3DDevice* This,
+ DWORD *num_passes);
+
+ HRESULT (STDMETHODCALLTYPE *ProcessVertices)(
+ IWineD3DDevice* This,
+ UINT src_start_idx,
+ UINT dst_idx,
+ UINT vertex_count,
+ IWineD3DBuffer *dest_buffer,
+ IWineD3DVertexDeclaration *declaration,
+ DWORD flags,
+ DWORD DestFVF);
+
+ HRESULT (STDMETHODCALLTYPE *BeginStateBlock)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *EndStateBlock)(
+ IWineD3DDevice* This,
+ IWineD3DStateBlock **stateblock);
+
+ HRESULT (STDMETHODCALLTYPE *BeginScene)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *EndScene)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *Present)(
+ IWineD3DDevice* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region);
+
+ HRESULT (STDMETHODCALLTYPE *Clear)(
+ IWineD3DDevice* This,
+ DWORD rect_count,
+ const WINED3DRECT *rects,
+ DWORD flags,
+ WINED3DCOLOR color,
+ float z,
+ DWORD stencil);
+
+ void (STDMETHODCALLTYPE *ClearRendertargetView)(
+ IWineD3DDevice* This,
+ IWineD3DRendertargetView *rendertarget_view,
+ const float color[4]);
+
+ void (STDMETHODCALLTYPE *SetPrimitiveType)(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE primitive_topology);
+
+ void (STDMETHODCALLTYPE *GetPrimitiveType)(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE *primitive_topology);
+
+ HRESULT (STDMETHODCALLTYPE *DrawPrimitive)(
+ IWineD3DDevice* This,
+ UINT start_vertex,
+ UINT vertex_count);
+
+ HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitive)(
+ IWineD3DDevice* This,
+ UINT start_idx,
+ UINT index_count);
+
+ HRESULT (STDMETHODCALLTYPE *DrawPrimitiveUP)(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const void *stream_data,
+ UINT stream_stride);
+
+ HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveUP)(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format,
+ const void *stream_data,
+ UINT stream_stride);
+
+ HRESULT (STDMETHODCALLTYPE *DrawPrimitiveStrided)(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const WineDirect3DVertexStridedData *strided_data);
+
+ HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveStrided)(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const WineDirect3DVertexStridedData *strided_data,
+ UINT vertex_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format);
+
+ HRESULT (STDMETHODCALLTYPE *DrawRectPatch)(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DRECTPATCH_INFO *rect_patch_info);
+
+ HRESULT (STDMETHODCALLTYPE *DrawTriPatch)(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DTRIPATCH_INFO *tri_patch_info);
+
+ HRESULT (STDMETHODCALLTYPE *DeletePatch)(
+ IWineD3DDevice* This,
+ UINT handle);
+
+ HRESULT (STDMETHODCALLTYPE *ColorFill)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *surface,
+ const WINED3DRECT *rect,
+ WINED3DCOLOR color);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateTexture)(
+ IWineD3DDevice* This,
+ IWineD3DBaseTexture *src_texture,
+ IWineD3DBaseTexture *dst_texture);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateSurface)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const POINT *dst_point);
+
+ HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSurface *dst_surface);
+
+ HRESULT (STDMETHODCALLTYPE *EnumResources)(
+ IWineD3DDevice* This,
+ HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+ void *data);
+
+ HRESULT (STDMETHODCALLTYPE *GetSurfaceFromDC)(
+ IWineD3DDevice* This,
+ HDC dc,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *AcquireFocusWindow)(
+ IWineD3DDevice* This,
+ HWND window);
+
+ void (STDMETHODCALLTYPE *ReleaseFocusWindow)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *AddSwapChain)(
+ IWineD3DDevice* This,
+ IWineD3DSwapChain *swapchain);
+
+ HRESULT (STDMETHODCALLTYPE *RemoveSwapChain)(
+ IWineD3DDevice* This,
+ IWineD3DSwapChain *swapchain);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *Flush)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *VolBlt)(IWineD3DDevice *iface,
+ IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+ const WINED3DBOX *pSrcBoxArg,
+ const struct VBOXPOINT3D *pDstPoin3D
+ );
+
+ HRESULT (STDMETHODCALLTYPE *VolTexBlt)(IWineD3DDevice *iface,
+ IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+ const WINED3DBOX *pSrcBoxArg,
+ const struct VBOXPOINT3D *pDstPoin3D
+ );
+
+ HRESULT (STDMETHODCALLTYPE *FlushToHost)(
+ IWineD3DDevice *iface);
+
+ HRESULT (STDMETHODCALLTYPE *Finish)(
+ IWineD3DDevice* This);
+#endif
+
+ END_INTERFACE
+} IWineD3DDeviceVtbl;
+interface IWineD3DDevice {
+ CONST_VTBL IWineD3DDeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDevice_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DDevice_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DDevice methods ***/
+#define IWineD3DDevice_CreateBuffer(This,desc,data,parent,parent_ops,buffer) (This)->lpVtbl->CreateBuffer(This,desc,data,parent,parent_ops,buffer)
+#define IWineD3DDevice_CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops) (This)->lpVtbl->CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops) (This)->lpVtbl->CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateStateBlock(This,type,stateblock,parent) (This)->lpVtbl->CreateStateBlock(This,type,stateblock,parent)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateRendertargetView(This,resource,parent,rendertarget_view) (This)->lpVtbl->CreateRendertargetView(This,resource,parent,rendertarget_view)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateQuery(This,type,query,parent) (This)->lpVtbl->CreateQuery(This,type,query,parent)
+#define IWineD3DDevice_CreateSwapChain(This,present_parameters,swapchain,parent,surface_type) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain,parent,surface_type)
+#define IWineD3DDevice_CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count) (This)->lpVtbl->CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count)
+#define IWineD3DDevice_CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf) (This)->lpVtbl->CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf)
+#define IWineD3DDevice_CreateVertexShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateVertexShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePixelShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreatePixelShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePalette(This,flags,palette_entry,palette,parent) (This)->lpVtbl->CreatePalette(This,flags,palette_entry,palette,parent)
+#define IWineD3DDevice_Init3D(This,present_parameters) (This)->lpVtbl->Init3D(This,present_parameters)
+#define IWineD3DDevice_InitGDI(This,present_parameters) (This)->lpVtbl->InitGDI(This,present_parameters)
+#define IWineD3DDevice_Uninit3D(This,destroy_swapchain_callback) (This)->lpVtbl->Uninit3D(This,destroy_swapchain_callback)
+#define IWineD3DDevice_UninitGDI(This,destroy_swapchain_callback) (This)->lpVtbl->UninitGDI(This,destroy_swapchain_callback)
+#define IWineD3DDevice_SetMultithreaded(This) (This)->lpVtbl->SetMultithreaded(This)
+#define IWineD3DDevice_EvictManagedResources(This) (This)->lpVtbl->EvictManagedResources(This)
+#define IWineD3DDevice_GetAvailableTextureMem(This) (This)->lpVtbl->GetAvailableTextureMem(This)
+#define IWineD3DDevice_GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DDevice_GetCreationParameters(This,creation_parameters) (This)->lpVtbl->GetCreationParameters(This,creation_parameters)
+#define IWineD3DDevice_GetDeviceCaps(This,caps) (This)->lpVtbl->GetDeviceCaps(This,caps)
+#define IWineD3DDevice_GetDirect3D(This,d3d) (This)->lpVtbl->GetDirect3D(This,d3d)
+#define IWineD3DDevice_GetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->GetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_SetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->SetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_GetNumberOfSwapChains(This) (This)->lpVtbl->GetNumberOfSwapChains(This)
+#define IWineD3DDevice_GetRasterStatus(This,swapchain_idx,raster_status) (This)->lpVtbl->GetRasterStatus(This,swapchain_idx,raster_status)
+#define IWineD3DDevice_GetSwapChain(This,swapchain_idx,swapchain) (This)->lpVtbl->GetSwapChain(This,swapchain_idx,swapchain)
+#define IWineD3DDevice_Reset(This,present_parameters) (This)->lpVtbl->Reset(This,present_parameters)
+#define IWineD3DDevice_SetDialogBoxMode(This,enable_dialogs) (This)->lpVtbl->SetDialogBoxMode(This,enable_dialogs)
+#define IWineD3DDevice_SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface) (This)->lpVtbl->SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface)
+#define IWineD3DDevice_SetCursorPosition(This,x_screen_space,y_screen_space,flags) (This)->lpVtbl->SetCursorPosition(This,x_screen_space,y_screen_space,flags)
+#define IWineD3DDevice_ShowCursor(This,show) (This)->lpVtbl->ShowCursor(This,show)
+#define IWineD3DDevice_SetClipPlane(This,plane_idx,plane) (This)->lpVtbl->SetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_GetClipPlane(This,plane_idx,plane) (This)->lpVtbl->GetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_SetClipStatus(This,clip_status) (This)->lpVtbl->SetClipStatus(This,clip_status)
+#define IWineD3DDevice_GetClipStatus(This,clip_status) (This)->lpVtbl->GetClipStatus(This,clip_status)
+#define IWineD3DDevice_SetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->SetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_GetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->GetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_SetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->SetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_GetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->GetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_SetGammaRamp(This,swapchain_idx,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,swapchain_idx,flags,ramp)
+#define IWineD3DDevice_GetGammaRamp(This,swapchain_idx,ramp) (This)->lpVtbl->GetGammaRamp(This,swapchain_idx,ramp)
+#define IWineD3DDevice_SetIndexBuffer(This,index_buffer,format) (This)->lpVtbl->SetIndexBuffer(This,index_buffer,format)
+#define IWineD3DDevice_GetIndexBuffer(This,index_buffer) (This)->lpVtbl->GetIndexBuffer(This,index_buffer)
+#define IWineD3DDevice_SetBaseVertexIndex(This,base_index) (This)->lpVtbl->SetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_GetBaseVertexIndex(This,base_index) (This)->lpVtbl->GetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_SetLight(This,light_idx,light) (This)->lpVtbl->SetLight(This,light_idx,light)
+#define IWineD3DDevice_GetLight(This,light_idx,light) (This)->lpVtbl->GetLight(This,light_idx,light)
+#define IWineD3DDevice_SetLightEnable(This,light_idx,enable) (This)->lpVtbl->SetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_GetLightEnable(This,light_idx,enable) (This)->lpVtbl->GetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_SetMaterial(This,material) (This)->lpVtbl->SetMaterial(This,material)
+#define IWineD3DDevice_GetMaterial(This,material) (This)->lpVtbl->GetMaterial(This,material)
+#define IWineD3DDevice_SetNPatchMode(This,segments) (This)->lpVtbl->SetNPatchMode(This,segments)
+#define IWineD3DDevice_GetNPatchMode(This) (This)->lpVtbl->GetNPatchMode(This)
+#define IWineD3DDevice_SetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->SetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_GetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_SetPixelShader(This,shader) (This)->lpVtbl->SetPixelShader(This,shader)
+#define IWineD3DDevice_GetPixelShader(This,shader) (This)->lpVtbl->GetPixelShader(This,shader)
+#define IWineD3DDevice_SetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetRenderState(This,state,value) (This)->lpVtbl->SetRenderState(This,state,value)
+#define IWineD3DDevice_GetRenderState(This,state,value) (This)->lpVtbl->GetRenderState(This,state,value)
+#define IWineD3DDevice_SetRenderTarget(This,render_target_idx,render_target,set_viewport) (This)->lpVtbl->SetRenderTarget(This,render_target_idx,render_target,set_viewport)
+#define IWineD3DDevice_GetRenderTarget(This,render_target_idx,render_target) (This)->lpVtbl->GetRenderTarget(This,render_target_idx,render_target)
+#define IWineD3DDevice_SetFrontBackBuffers(This,front,back) (This)->lpVtbl->SetFrontBackBuffers(This,front,back)
+#define IWineD3DDevice_SetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->SetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_GetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->GetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_SetScissorRect(This,rect) (This)->lpVtbl->SetScissorRect(This,rect)
+#define IWineD3DDevice_GetScissorRect(This,rect) (This)->lpVtbl->GetScissorRect(This,rect)
+#define IWineD3DDevice_SetSoftwareVertexProcessing(This,software) (This)->lpVtbl->SetSoftwareVertexProcessing(This,software)
+#define IWineD3DDevice_GetSoftwareVertexProcessing(This) (This)->lpVtbl->GetSoftwareVertexProcessing(This)
+#define IWineD3DDevice_SetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->SetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_GetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->GetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_SetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->SetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_GetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->GetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_SetTexture(This,stage,texture) (This)->lpVtbl->SetTexture(This,stage,texture)
+#define IWineD3DDevice_GetTexture(This,stage,texture) (This)->lpVtbl->GetTexture(This,stage,texture)
+#define IWineD3DDevice_SetTextureStageState(This,stage,state,value) (This)->lpVtbl->SetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_GetTextureStageState(This,stage,state,value) (This)->lpVtbl->GetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_SetTransform(This,state,matrix) (This)->lpVtbl->SetTransform(This,state,matrix)
+#define IWineD3DDevice_GetTransform(This,state,matrix) (This)->lpVtbl->GetTransform(This,state,matrix)
+#define IWineD3DDevice_SetVertexDeclaration(This,declaration) (This)->lpVtbl->SetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_GetVertexDeclaration(This,declaration) (This)->lpVtbl->GetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_SetVertexShader(This,shader) (This)->lpVtbl->SetVertexShader(This,shader)
+#define IWineD3DDevice_GetVertexShader(This,shader) (This)->lpVtbl->GetVertexShader(This,shader)
+#define IWineD3DDevice_SetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetViewport(This,viewport) (This)->lpVtbl->SetViewport(This,viewport)
+#define IWineD3DDevice_GetViewport(This,viewport) (This)->lpVtbl->GetViewport(This,viewport)
+#define IWineD3DDevice_MultiplyTransform(This,state,matrix) (This)->lpVtbl->MultiplyTransform(This,state,matrix)
+#define IWineD3DDevice_ValidateDevice(This,num_passes) (This)->lpVtbl->ValidateDevice(This,num_passes)
+#define IWineD3DDevice_ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF) (This)->lpVtbl->ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF)
+#define IWineD3DDevice_BeginStateBlock(This) (This)->lpVtbl->BeginStateBlock(This)
+#define IWineD3DDevice_EndStateBlock(This,stateblock) (This)->lpVtbl->EndStateBlock(This,stateblock)
+#define IWineD3DDevice_BeginScene(This) (This)->lpVtbl->BeginScene(This)
+#define IWineD3DDevice_EndScene(This) (This)->lpVtbl->EndScene(This)
+#define IWineD3DDevice_Present(This,src_rect,dst_rect,dst_window_override,dirty_region) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region)
+#define IWineD3DDevice_Clear(This,rect_count,rects,flags,color,z,stencil) (This)->lpVtbl->Clear(This,rect_count,rects,flags,color,z,stencil)
+#define IWineD3DDevice_ClearRendertargetView(This,rendertarget_view,color) (This)->lpVtbl->ClearRendertargetView(This,rendertarget_view,color)
+#define IWineD3DDevice_SetPrimitiveType(This,primitive_topology) (This)->lpVtbl->SetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_GetPrimitiveType(This,primitive_topology) (This)->lpVtbl->GetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_DrawPrimitive(This,start_vertex,vertex_count) (This)->lpVtbl->DrawPrimitive(This,start_vertex,vertex_count)
+#define IWineD3DDevice_DrawIndexedPrimitive(This,start_idx,index_count) (This)->lpVtbl->DrawIndexedPrimitive(This,start_idx,index_count)
+#define IWineD3DDevice_DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride) (This)->lpVtbl->DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride)
+#define IWineD3DDevice_DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride) (This)->lpVtbl->DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride)
+#define IWineD3DDevice_DrawPrimitiveStrided(This,vertex_count,strided_data) (This)->lpVtbl->DrawPrimitiveStrided(This,vertex_count,strided_data)
+#define IWineD3DDevice_DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format) (This)->lpVtbl->DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format)
+#define IWineD3DDevice_DrawRectPatch(This,handle,num_segs,rect_patch_info) (This)->lpVtbl->DrawRectPatch(This,handle,num_segs,rect_patch_info)
+#define IWineD3DDevice_DrawTriPatch(This,handle,num_segs,tri_patch_info) (This)->lpVtbl->DrawTriPatch(This,handle,num_segs,tri_patch_info)
+#define IWineD3DDevice_DeletePatch(This,handle) (This)->lpVtbl->DeletePatch(This,handle)
+#define IWineD3DDevice_ColorFill(This,surface,rect,color) (This)->lpVtbl->ColorFill(This,surface,rect,color)
+#define IWineD3DDevice_UpdateTexture(This,src_texture,dst_texture) (This)->lpVtbl->UpdateTexture(This,src_texture,dst_texture)
+#define IWineD3DDevice_UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point) (This)->lpVtbl->UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point)
+#define IWineD3DDevice_GetFrontBufferData(This,swapchain_idx,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,swapchain_idx,dst_surface)
+#define IWineD3DDevice_EnumResources(This,callback,data) (This)->lpVtbl->EnumResources(This,callback,data)
+#define IWineD3DDevice_GetSurfaceFromDC(This,dc,surface) (This)->lpVtbl->GetSurfaceFromDC(This,dc,surface)
+#define IWineD3DDevice_AcquireFocusWindow(This,window) (This)->lpVtbl->AcquireFocusWindow(This,window)
+#define IWineD3DDevice_ReleaseFocusWindow(This) (This)->lpVtbl->ReleaseFocusWindow(This)
+#define IWineD3DDevice_AddSwapChain(This,swapchain) (This)->lpVtbl->AddSwapChain(This,swapchain)
+#define IWineD3DDevice_RemoveSwapChain(This,swapchain) (This)->lpVtbl->RemoveSwapChain(This,swapchain)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DDevice_VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_FlushToHost(This) (This)->lpVtbl->FlushToHost(This)
+#define IWineD3DDevice_Finish(This) (This)->lpVtbl->Finish(This)
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateBuffer_Proxy(
+ IWineD3DDevice* This,
+ struct wined3d_buffer_desc *desc,
+ const void *data,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ IWineD3DBuffer **buffer);
+void __RPC_STUB IWineD3DDevice_CreateBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexBuffer_Proxy(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **vertex_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateIndexBuffer_Proxy(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **index_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateIndexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateStateBlock_Proxy(
+ IWineD3DDevice* This,
+ WINED3DSTATEBLOCKTYPE type,
+ IWineD3DStateBlock **stateblock,
+ IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSurface_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ BOOL lockable,
+ BOOL discard,
+ UINT level,
+ IWineD3DSurface **surface,
+ DWORD usage,
+ WINED3DPOOL pool,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ WINED3DSURFTYPE surface_type,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateRendertargetView_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DResource *resource,
+ IUnknown *parent,
+ IWineD3DRendertargetView **rendertarget_view);
+void __RPC_STUB IWineD3DDevice_CreateRendertargetView_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateTexture_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolumeTexture_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolumeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolumeTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolume_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolume **volume,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateCubeTexture_Proxy(
+ IWineD3DDevice* This,
+ UINT edge_length,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DCubeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateCubeTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateQuery_Proxy(
+ IWineD3DDevice* This,
+ WINED3DQUERYTYPE type,
+ IWineD3DQuery **query,
+ IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateQuery_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSwapChain_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain,
+ IUnknown *parent,
+ WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3DDevice_CreateSwapChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclaration_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ const WINED3DVERTEXELEMENT *elements,
+ UINT element_count);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclaration_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclarationFromFVF_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ DWORD fvf);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclarationFromFVF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexShader_Proxy(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DVertexShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateGeometryShader_Proxy(
+ IWineD3DDevice* This,
+ const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DGeometryShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateGeometryShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePixelShader_Proxy(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DPixelShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreatePixelShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePalette_Proxy(
+ IWineD3DDevice* This,
+ DWORD flags,
+ const PALETTEENTRY *palette_entry,
+ IWineD3DPalette **palette,
+ IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreatePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Init3D_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Init3D_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_InitGDI_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_InitGDI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Uninit3D_Proxy(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_Uninit3D_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UninitGDI_Proxy(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_UninitGDI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetMultithreaded_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_SetMultithreaded_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EvictManagedResources_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EvictManagedResources_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetAvailableTextureMem_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetAvailableTextureMem_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBackBuffer_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DDevice_GetBackBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCreationParameters_Proxy(
+ IWineD3DDevice* This,
+ WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+void __RPC_STUB IWineD3DDevice_GetCreationParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDeviceCaps_Proxy(
+ IWineD3DDevice* This,
+ WINED3DCAPS *caps);
+void __RPC_STUB IWineD3DDevice_GetDeviceCaps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDirect3D_Proxy(
+ IWineD3DDevice* This,
+ IWineD3D **d3d);
+void __RPC_STUB IWineD3DDevice_GetDirect3D_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDisplayMode_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_GetDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDisplayMode_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ const WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_SetDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetNumberOfSwapChains_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNumberOfSwapChains_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRasterStatus_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DDevice_GetRasterStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSwapChain_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDevice_GetSwapChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Reset_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDialogBoxMode_Proxy(
+ IWineD3DDevice* This,
+ BOOL enable_dialogs);
+void __RPC_STUB IWineD3DDevice_SetDialogBoxMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCursorProperties_Proxy(
+ IWineD3DDevice* This,
+ UINT x_hotspot,
+ UINT y_hotspot,
+ IWineD3DSurface *cursor_surface);
+void __RPC_STUB IWineD3DDevice_SetCursorProperties_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetCursorPosition_Proxy(
+ IWineD3DDevice* This,
+ int x_screen_space,
+ int y_screen_space,
+ DWORD flags);
+void __RPC_STUB IWineD3DDevice_SetCursorPosition_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_ShowCursor_Proxy(
+ IWineD3DDevice* This,
+ BOOL show);
+void __RPC_STUB IWineD3DDevice_ShowCursor_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipPlane_Proxy(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ const float *plane);
+void __RPC_STUB IWineD3DDevice_SetClipPlane_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipPlane_Proxy(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ float *plane);
+void __RPC_STUB IWineD3DDevice_GetClipPlane_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipStatus_Proxy(
+ IWineD3DDevice* This,
+ const WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_SetClipStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipStatus_Proxy(
+ IWineD3DDevice* This,
+ WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_GetClipStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCurrentTexturePalette_Proxy(
+ IWineD3DDevice* This,
+ UINT palette_number);
+void __RPC_STUB IWineD3DDevice_SetCurrentTexturePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCurrentTexturePalette_Proxy(
+ IWineD3DDevice* This,
+ UINT *palette_number);
+void __RPC_STUB IWineD3DDevice_GetCurrentTexturePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDepthStencilSurface_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *depth_stencil);
+void __RPC_STUB IWineD3DDevice_SetDepthStencilSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDepthStencilSurface_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface **depth_stencil);
+void __RPC_STUB IWineD3DDevice_GetDepthStencilSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetGammaRamp_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_SetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetGammaRamp_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_GetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetIndexBuffer_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DBuffer *index_buffer,
+ WINED3DFORMAT format);
+void __RPC_STUB IWineD3DDevice_SetIndexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetIndexBuffer_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DBuffer **index_buffer);
+void __RPC_STUB IWineD3DDevice_GetIndexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetBaseVertexIndex_Proxy(
+ IWineD3DDevice* This,
+ INT base_index);
+void __RPC_STUB IWineD3DDevice_SetBaseVertexIndex_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBaseVertexIndex_Proxy(
+ IWineD3DDevice* This,
+ INT *base_index);
+void __RPC_STUB IWineD3DDevice_GetBaseVertexIndex_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLight_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ const WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_SetLight_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLight_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_GetLight_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLightEnable_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL enable);
+void __RPC_STUB IWineD3DDevice_SetLightEnable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLightEnable_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL *enable);
+void __RPC_STUB IWineD3DDevice_GetLightEnable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetMaterial_Proxy(
+ IWineD3DDevice* This,
+ const WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_SetMaterial_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetMaterial_Proxy(
+ IWineD3DDevice* This,
+ WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_GetMaterial_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetNPatchMode_Proxy(
+ IWineD3DDevice* This,
+ float segments);
+void __RPC_STUB IWineD3DDevice_SetNPatchMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+float STDMETHODCALLTYPE IWineD3DDevice_GetNPatchMode_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNPatchMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPaletteEntries_Proxy(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_SetPaletteEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPaletteEntries_Proxy(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_GetPaletteEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader *shader);
+void __RPC_STUB IWineD3DDevice_SetPixelShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader **shader);
+void __RPC_STUB IWineD3DDevice_GetPixelShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderState_Proxy(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD value);
+void __RPC_STUB IWineD3DDevice_SetRenderState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderState_Proxy(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetRenderState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderTarget_Proxy(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface *render_target,
+ BOOL set_viewport);
+void __RPC_STUB IWineD3DDevice_SetRenderTarget_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderTarget_Proxy(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface **render_target);
+void __RPC_STUB IWineD3DDevice_GetRenderTarget_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetFrontBackBuffers_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *front,
+ IWineD3DSurface *back);
+void __RPC_STUB IWineD3DDevice_SetFrontBackBuffers_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSamplerState_Proxy(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD value);
+void __RPC_STUB IWineD3DDevice_SetSamplerState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSamplerState_Proxy(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetSamplerState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetScissorRect_Proxy(
+ IWineD3DDevice* This,
+ const RECT *rect);
+void __RPC_STUB IWineD3DDevice_SetScissorRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetScissorRect_Proxy(
+ IWineD3DDevice* This,
+ RECT *rect);
+void __RPC_STUB IWineD3DDevice_GetScissorRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSoftwareVertexProcessing_Proxy(
+ IWineD3DDevice* This,
+ BOOL software);
+void __RPC_STUB IWineD3DDevice_SetSoftwareVertexProcessing_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_GetSoftwareVertexProcessing_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetSoftwareVertexProcessing_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSource_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer *buffer,
+ UINT offset,
+ UINT stride);
+void __RPC_STUB IWineD3DDevice_SetStreamSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSource_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer **buffer,
+ UINT *offset,
+ UINT *stride);
+void __RPC_STUB IWineD3DDevice_GetStreamSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSourceFreq_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT divider);
+void __RPC_STUB IWineD3DDevice_SetStreamSourceFreq_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSourceFreq_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT *divider);
+void __RPC_STUB IWineD3DDevice_GetStreamSourceFreq_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTexture_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture *texture);
+void __RPC_STUB IWineD3DDevice_SetTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTexture_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture **texture);
+void __RPC_STUB IWineD3DDevice_GetTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTextureStageState_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD value);
+void __RPC_STUB IWineD3DDevice_SetTextureStageState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTextureStageState_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetTextureStageState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTransform_Proxy(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_SetTransform_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTransform_Proxy(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_GetTransform_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexDeclaration_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration *declaration);
+void __RPC_STUB IWineD3DDevice_SetVertexDeclaration_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexDeclaration_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration);
+void __RPC_STUB IWineD3DDevice_GetVertexDeclaration_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader *shader);
+void __RPC_STUB IWineD3DDevice_SetVertexShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader **shader);
+void __RPC_STUB IWineD3DDevice_GetVertexShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetViewport_Proxy(
+ IWineD3DDevice* This,
+ const WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_SetViewport_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetViewport_Proxy(
+ IWineD3DDevice* This,
+ WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_GetViewport_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_MultiplyTransform_Proxy(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_MultiplyTransform_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ValidateDevice_Proxy(
+ IWineD3DDevice* This,
+ DWORD *num_passes);
+void __RPC_STUB IWineD3DDevice_ValidateDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ProcessVertices_Proxy(
+ IWineD3DDevice* This,
+ UINT src_start_idx,
+ UINT dst_idx,
+ UINT vertex_count,
+ IWineD3DBuffer *dest_buffer,
+ IWineD3DVertexDeclaration *declaration,
+ DWORD flags,
+ DWORD DestFVF);
+void __RPC_STUB IWineD3DDevice_ProcessVertices_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginStateBlock_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndStateBlock_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DStateBlock **stateblock);
+void __RPC_STUB IWineD3DDevice_EndStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginScene_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginScene_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndScene_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EndScene_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Present_Proxy(
+ IWineD3DDevice* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region);
+void __RPC_STUB IWineD3DDevice_Present_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Clear_Proxy(
+ IWineD3DDevice* This,
+ DWORD rect_count,
+ const WINED3DRECT *rects,
+ DWORD flags,
+ WINED3DCOLOR color,
+ float z,
+ DWORD stencil);
+void __RPC_STUB IWineD3DDevice_Clear_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ClearRendertargetView_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DRendertargetView *rendertarget_view,
+ const float color[4]);
+void __RPC_STUB IWineD3DDevice_ClearRendertargetView_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetPrimitiveType_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE primitive_topology);
+void __RPC_STUB IWineD3DDevice_SetPrimitiveType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetPrimitiveType_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE *primitive_topology);
+void __RPC_STUB IWineD3DDevice_GetPrimitiveType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitive_Proxy(
+ IWineD3DDevice* This,
+ UINT start_vertex,
+ UINT vertex_count);
+void __RPC_STUB IWineD3DDevice_DrawPrimitive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitive_Proxy(
+ IWineD3DDevice* This,
+ UINT start_idx,
+ UINT index_count);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveUP_Proxy(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const void *stream_data,
+ UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveUP_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveUP_Proxy(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format,
+ const void *stream_data,
+ UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveUP_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveStrided_Proxy(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const WineDirect3DVertexStridedData *strided_data);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveStrided_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveStrided_Proxy(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const WineDirect3DVertexStridedData *strided_data,
+ UINT vertex_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveStrided_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawRectPatch_Proxy(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DRECTPATCH_INFO *rect_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawRectPatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawTriPatch_Proxy(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DTRIPATCH_INFO *tri_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawTriPatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DeletePatch_Proxy(
+ IWineD3DDevice* This,
+ UINT handle);
+void __RPC_STUB IWineD3DDevice_DeletePatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ColorFill_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *surface,
+ const WINED3DRECT *rect,
+ WINED3DCOLOR color);
+void __RPC_STUB IWineD3DDevice_ColorFill_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateTexture_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DBaseTexture *src_texture,
+ IWineD3DBaseTexture *dst_texture);
+void __RPC_STUB IWineD3DDevice_UpdateTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateSurface_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const POINT *dst_point);
+void __RPC_STUB IWineD3DDevice_UpdateSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetFrontBufferData_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DDevice_GetFrontBufferData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EnumResources_Proxy(
+ IWineD3DDevice* This,
+ HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+ void *data);
+void __RPC_STUB IWineD3DDevice_EnumResources_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSurfaceFromDC_Proxy(
+ IWineD3DDevice* This,
+ HDC dc,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDevice_GetSurfaceFromDC_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_AcquireFocusWindow_Proxy(
+ IWineD3DDevice* This,
+ HWND window);
+void __RPC_STUB IWineD3DDevice_AcquireFocusWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ReleaseFocusWindow_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_ReleaseFocusWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DDevice_INTERFACE_DEFINED__ */
+
+IWineD3D * STDMETHODCALLTYPE WineDirect3DCreate(UINT dxVersion,IUnknown *parent);
+
+IWineD3DClipper * STDMETHODCALLTYPE WineDirect3DCreateClipper(IUnknown *parent);
+
+#ifdef VBOX_WINE_NO_LOCK
+#define wined3d_mutex_lock() do {} while (0)
+#define wined3d_mutex_unlock() do {} while (0)
+#else
+void STDMETHODCALLTYPE wined3d_mutex_lock(void);
+
+void STDMETHODCALLTYPE wined3d_mutex_unlock(void);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WINED3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/shader.c b/src/VBox/Devices/Graphics/shaderlib/shader.c
new file mode 100644
index 00000000..19da2bc6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shader.c
@@ -0,0 +1,2523 @@
+/*
+ * Copyright 2002-2003 Jason Edmeades
+ * Copyright 2002-2003 Raphael Junqueira
+ * Copyright 2004 Christian Costa
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2006 Ivan Gyurdiev
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+WINE_DECLARE_DEBUG_CHANNEL(d3d);
+
+static const char *shader_opcode_names[] =
+{
+ /* WINED3DSIH_ABS */ "abs",
+ /* WINED3DSIH_ADD */ "add",
+ /* WINED3DSIH_BEM */ "bem",
+ /* WINED3DSIH_BREAK */ "break",
+ /* WINED3DSIH_BREAKC */ "breakc",
+ /* WINED3DSIH_BREAKP */ "breakp",
+ /* WINED3DSIH_CALL */ "call",
+ /* WINED3DSIH_CALLNZ */ "callnz",
+ /* WINED3DSIH_CMP */ "cmp",
+ /* WINED3DSIH_CND */ "cnd",
+ /* WINED3DSIH_CRS */ "crs",
+ /* WINED3DSIH_CUT */ "cut",
+ /* WINED3DSIH_DCL */ "dcl",
+ /* WINED3DSIH_DEF */ "def",
+ /* WINED3DSIH_DEFB */ "defb",
+ /* WINED3DSIH_DEFI */ "defi",
+ /* WINED3DSIH_DP2ADD */ "dp2add",
+ /* WINED3DSIH_DP3 */ "dp3",
+ /* WINED3DSIH_DP4 */ "dp4",
+ /* WINED3DSIH_DST */ "dst",
+ /* WINED3DSIH_DSX */ "dsx",
+ /* WINED3DSIH_DSY */ "dsy",
+ /* WINED3DSIH_ELSE */ "else",
+ /* WINED3DSIH_EMIT */ "emit",
+ /* WINED3DSIH_ENDIF */ "endif",
+ /* WINED3DSIH_ENDLOOP */ "endloop",
+ /* WINED3DSIH_ENDREP */ "endrep",
+ /* WINED3DSIH_EXP */ "exp",
+ /* WINED3DSIH_EXPP */ "expp",
+ /* WINED3DSIH_FRC */ "frc",
+ /* WINED3DSIH_IADD */ "iadd",
+ /* WINED3DSIH_IF */ "if",
+ /* WINED3DSIH_IFC */ "ifc",
+ /* WINED3DSIH_IGE */ "ige",
+ /* WINED3DSIH_LABEL */ "label",
+ /* WINED3DSIH_LIT */ "lit",
+ /* WINED3DSIH_LOG */ "log",
+ /* WINED3DSIH_LOGP */ "logp",
+ /* WINED3DSIH_LOOP */ "loop",
+ /* WINED3DSIH_LRP */ "lrp",
+ /* WINED3DSIH_LT */ "lt",
+ /* WINED3DSIH_M3x2 */ "m3x2",
+ /* WINED3DSIH_M3x3 */ "m3x3",
+ /* WINED3DSIH_M3x4 */ "m3x4",
+ /* WINED3DSIH_M4x3 */ "m4x3",
+ /* WINED3DSIH_M4x4 */ "m4x4",
+ /* WINED3DSIH_MAD */ "mad",
+ /* WINED3DSIH_MAX */ "max",
+ /* WINED3DSIH_MIN */ "min",
+ /* WINED3DSIH_MOV */ "mov",
+ /* WINED3DSIH_MOVA */ "mova",
+ /* WINED3DSIH_MUL */ "mul",
+ /* WINED3DSIH_NOP */ "nop",
+ /* WINED3DSIH_NRM */ "nrm",
+ /* WINED3DSIH_PHASE */ "phase",
+ /* WINED3DSIH_POW */ "pow",
+ /* WINED3DSIH_RCP */ "rcp",
+ /* WINED3DSIH_REP */ "rep",
+ /* WINED3DSIH_RET */ "ret",
+ /* WINED3DSIH_RSQ */ "rsq",
+ /* WINED3DSIH_SETP */ "setp",
+ /* WINED3DSIH_SGE */ "sge",
+ /* WINED3DSIH_SGN */ "sgn",
+ /* WINED3DSIH_SINCOS */ "sincos",
+ /* WINED3DSIH_SLT */ "slt",
+ /* WINED3DSIH_SUB */ "sub",
+ /* WINED3DSIH_TEX */ "texld",
+ /* WINED3DSIH_TEXBEM */ "texbem",
+ /* WINED3DSIH_TEXBEML */ "texbeml",
+ /* WINED3DSIH_TEXCOORD */ "texcrd",
+ /* WINED3DSIH_TEXDEPTH */ "texdepth",
+ /* WINED3DSIH_TEXDP3 */ "texdp3",
+ /* WINED3DSIH_TEXDP3TEX */ "texdp3tex",
+ /* WINED3DSIH_TEXKILL */ "texkill",
+ /* WINED3DSIH_TEXLDD */ "texldd",
+ /* WINED3DSIH_TEXLDL */ "texldl",
+ /* WINED3DSIH_TEXM3x2DEPTH */ "texm3x2depth",
+ /* WINED3DSIH_TEXM3x2PAD */ "texm3x2pad",
+ /* WINED3DSIH_TEXM3x2TEX */ "texm3x2tex",
+ /* WINED3DSIH_TEXM3x3 */ "texm3x3",
+ /* WINED3DSIH_TEXM3x3DIFF */ "texm3x3diff",
+ /* WINED3DSIH_TEXM3x3PAD */ "texm3x3pad",
+ /* WINED3DSIH_TEXM3x3SPEC */ "texm3x3spec",
+ /* WINED3DSIH_TEXM3x3TEX */ "texm3x3tex",
+ /* WINED3DSIH_TEXM3x3VSPEC */ "texm3x3vspec",
+ /* WINED3DSIH_TEXREG2AR */ "texreg2ar",
+ /* WINED3DSIH_TEXREG2GB */ "texreg2gb",
+ /* WINED3DSIH_TEXREG2RGB */ "texreg2rgb",
+};
+
+static const char *semantic_names[] =
+{
+ /* WINED3DDECLUSAGE_POSITION */ "SV_POSITION",
+ /* WINED3DDECLUSAGE_BLENDWEIGHT */ "BLENDWEIGHT",
+ /* WINED3DDECLUSAGE_BLENDINDICES */ "BLENDINDICES",
+ /* WINED3DDECLUSAGE_NORMAL */ "NORMAL",
+ /* WINED3DDECLUSAGE_PSIZE */ "PSIZE",
+ /* WINED3DDECLUSAGE_TEXCOORD */ "TEXCOORD",
+ /* WINED3DDECLUSAGE_TANGENT */ "TANGENT",
+ /* WINED3DDECLUSAGE_BINORMAL */ "BINORMAL",
+ /* WINED3DDECLUSAGE_TESSFACTOR */ "TESSFACTOR",
+ /* WINED3DDECLUSAGE_POSITIONT */ "POSITIONT",
+ /* WINED3DDECLUSAGE_COLOR */ "COLOR",
+ /* WINED3DDECLUSAGE_FOG */ "FOG",
+ /* WINED3DDECLUSAGE_DEPTH */ "DEPTH",
+ /* WINED3DDECLUSAGE_SAMPLE */ "SAMPLE",
+};
+
+static const char *shader_semantic_name_from_usage(WINED3DDECLUSAGE usage)
+{
+ if (usage >= sizeof(semantic_names) / sizeof(*semantic_names))
+ {
+ FIXME("Unrecognized usage %#x.\n", usage);
+ return "UNRECOGNIZED";
+ }
+
+ return semantic_names[usage];
+}
+
+static WINED3DDECLUSAGE shader_usage_from_semantic_name(const char *name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof(semantic_names) / sizeof(*semantic_names); ++i)
+ {
+ if (!strcmp(name, semantic_names[i])) return i;
+ }
+
+ return ~0U;
+}
+
+BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage)
+{
+ return !strcmp(semantic_name, shader_semantic_name_from_usage(usage));
+}
+
+static void shader_signature_from_semantic(struct wined3d_shader_signature_element *e,
+ const struct wined3d_shader_semantic *s)
+{
+ e->semantic_name = shader_semantic_name_from_usage(s->usage);
+ e->semantic_idx = s->usage_idx;
+ e->sysval_semantic = 0;
+ e->component_type = 0;
+ e->register_idx = s->reg.reg.idx;
+ e->mask = s->reg.write_mask;
+}
+
+static const struct wined3d_shader_frontend *shader_select_frontend(DWORD version_token)
+{
+ switch (version_token >> 16)
+ {
+ case WINED3D_SM1_VS:
+ case WINED3D_SM1_PS:
+ return &sm1_shader_frontend;
+
+ case WINED3D_SM4_PS:
+ case WINED3D_SM4_VS:
+ case WINED3D_SM4_GS:
+ return &sm4_shader_frontend;
+
+ default:
+ FIXME("Unrecognised version token %#x\n", version_token);
+ return NULL;
+ }
+}
+
+void shader_buffer_clear(struct wined3d_shader_buffer *buffer)
+{
+ buffer->buffer[0] = '\0';
+ buffer->bsize = 0;
+ buffer->lineNo = 0;
+ buffer->newline = TRUE;
+}
+
+BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer)
+{
+ buffer->buffer = HeapAlloc(GetProcessHeap(), 0, SHADER_PGMSIZE);
+ if (!buffer->buffer)
+ {
+ ERR("Failed to allocate shader buffer memory.\n");
+ return FALSE;
+ }
+
+ shader_buffer_clear(buffer);
+ return TRUE;
+}
+
+void shader_buffer_free(struct wined3d_shader_buffer *buffer)
+{
+ HeapFree(GetProcessHeap(), 0, buffer->buffer);
+}
+
+int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *format, va_list args)
+{
+ char *base = buffer->buffer + buffer->bsize;
+ int rc;
+
+ rc = vsnprintf(base, SHADER_PGMSIZE - 1 - buffer->bsize, format, args);
+
+ if (rc < 0 /* C89 */ || (unsigned int)rc > SHADER_PGMSIZE - 1 - buffer->bsize /* C99 */)
+ {
+ ERR("The buffer allocated for the shader program string "
+ "is too small at %d bytes.\n", SHADER_PGMSIZE);
+ buffer->bsize = SHADER_PGMSIZE - 1;
+ return -1;
+ }
+
+ if (buffer->newline)
+ {
+ TRACE("GL HW (%u, %u) : %s", buffer->lineNo + 1, buffer->bsize, base);
+ buffer->newline = FALSE;
+ }
+ else
+ {
+ TRACE("%s", base);
+ }
+
+ buffer->bsize += rc;
+ if (buffer->buffer[buffer->bsize-1] == '\n')
+ {
+ ++buffer->lineNo;
+ buffer->newline = TRUE;
+ }
+
+ return 0;
+}
+
+int shader_addline(struct wined3d_shader_buffer *buffer, const char *format, ...)
+{
+ va_list args;
+ int ret;
+
+ va_start(args, format);
+ ret = shader_vaddline(buffer, format, args);
+ va_end(args);
+
+ return ret;
+}
+
+static void shader_init(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+ shader->ref = 1;
+ shader->device = (IWineD3DDevice *)device;
+ shader->parent = parent;
+ shader->parent_ops = parent_ops;
+ list_init(&shader->linked_programs);
+ list_add_head(&device->shaders, &shader->shader_list_entry);
+}
+
+/* Convert floating point offset relative to a register file to an absolute
+ * offset for float constants. */
+static unsigned int shader_get_float_offset(WINED3DSHADER_PARAM_REGISTER_TYPE register_type, UINT register_idx)
+{
+ switch (register_type)
+ {
+ case WINED3DSPR_CONST: return register_idx;
+ case WINED3DSPR_CONST2: return 2048 + register_idx;
+ case WINED3DSPR_CONST3: return 4096 + register_idx;
+ case WINED3DSPR_CONST4: return 6144 + register_idx;
+ default:
+ FIXME("Unsupported register type: %u.\n", register_type);
+ return register_idx;
+ }
+}
+
+static void shader_delete_constant_list(struct list *clist)
+{
+ struct local_constant *constant;
+ struct list *ptr;
+
+ ptr = list_head(clist);
+ while (ptr)
+ {
+ constant = LIST_ENTRY(ptr, struct local_constant, entry);
+ ptr = list_next(clist, ptr);
+ HeapFree(GetProcessHeap(), 0, constant);
+ }
+ list_init(clist);
+}
+
+static inline void set_bitmap_bit(DWORD *bitmap, DWORD bit)
+{
+ DWORD idx, shift;
+ idx = bit >> 5;
+ shift = bit & 0x1f;
+ bitmap[idx] |= (1 << shift);
+}
+
+static HRESULT shader_record_register_usage(IWineD3DBaseShaderImpl *shader, struct shader_reg_maps *reg_maps,
+ const struct wined3d_shader_register *reg, enum wined3d_shader_type shader_type)
+{
+ switch (reg->type)
+ {
+ case WINED3DSPR_TEXTURE: /* WINED3DSPR_ADDR */
+ if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ AssertReturn(reg->idx < MAX_REG_TEXCRD, E_INVALIDARG);
+ reg_maps->texcoord |= 1 << reg->idx;
+ }
+ else
+ {
+ AssertReturn(reg->idx < MAX_REG_ADDR, E_INVALIDARG);
+ reg_maps->address |= 1 << reg->idx;
+ }
+ break;
+
+ case WINED3DSPR_TEMP:
+ AssertReturn(reg->idx < MAX_REG_TEMP, E_INVALIDARG);
+ reg_maps->temporary |= 1 << reg->idx;
+ break;
+
+ case WINED3DSPR_INPUT:
+ if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ if (reg->rel_addr)
+ {
+ /* If relative addressing is used, we must assume that all registers
+ * are used. Even if it is a construct like v3[aL], we can't assume
+ * that v0, v1 and v2 aren't read because aL can be negative */
+ unsigned int i;
+ for (i = 0; i < MAX_REG_INPUT; ++i)
+ {
+ ((IWineD3DPixelShaderImpl *)shader)->input_reg_used[i] = TRUE;
+ }
+ }
+ else
+ {
+ unsigned int reg_idx = reg->idx;
+ AssertReturn(reg_idx < MAX_REG_INPUT, E_INVALIDARG);
+
+ ((IWineD3DPixelShaderImpl *)shader)->input_reg_used[reg_idx] = TRUE;
+ }
+ }
+ else
+ {
+ AssertReturn(reg->idx < MAX_ATTRIBS, E_INVALIDARG);
+ reg_maps->input_registers |= 1 << reg->idx;
+ }
+ break;
+
+ case WINED3DSPR_RASTOUT:
+ if (reg->idx == 1) reg_maps->fog = 1;
+ break;
+
+ case WINED3DSPR_MISCTYPE:
+ if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ if (reg->idx == 0) reg_maps->vpos = 1;
+ else if (reg->idx == 1) reg_maps->usesfacing = 1;
+ }
+ break;
+
+ case WINED3DSPR_CONST:
+ if (reg->rel_addr)
+ {
+ if (shader_type != WINED3D_SHADER_TYPE_PIXEL)
+ {
+ if (reg->idx < ((IWineD3DVertexShaderImpl *)shader)->min_rel_offset)
+ {
+ ((IWineD3DVertexShaderImpl *)shader)->min_rel_offset = reg->idx;
+ }
+ if (reg->idx > ((IWineD3DVertexShaderImpl *)shader)->max_rel_offset)
+ {
+ ((IWineD3DVertexShaderImpl *)shader)->max_rel_offset = reg->idx;
+ }
+ }
+ reg_maps->usesrelconstF = TRUE;
+ }
+ else
+ {
+ AssertReturn(reg->idx < reg_maps->constf_size, E_INVALIDARG);
+ set_bitmap_bit(reg_maps->constf, reg->idx);
+ }
+ break;
+
+ case WINED3DSPR_CONSTINT:
+ AssertReturn(reg->idx < MAX_CONST_I, E_INVALIDARG);
+ reg_maps->integer_constants |= (1 << reg->idx);
+ break;
+
+ case WINED3DSPR_CONSTBOOL:
+ AssertReturn(reg->idx < MAX_CONST_B, E_INVALIDARG);
+ reg_maps->boolean_constants |= (1 << reg->idx);
+ break;
+
+ case WINED3DSPR_COLOROUT:
+ reg_maps->highest_render_target = max(reg_maps->highest_render_target, reg->idx);
+ break;
+
+ default:
+ TRACE("Not recording register of type %#x and idx %u\n", reg->type, reg->idx);
+ break;
+ }
+
+ return S_OK;
+}
+
+static unsigned int get_instr_extra_regcount(enum WINED3D_SHADER_INSTRUCTION_HANDLER instr, unsigned int param)
+{
+ switch (instr)
+ {
+ case WINED3DSIH_M4x4:
+ case WINED3DSIH_M3x4:
+ return param == 1 ? 3 : 0;
+
+ case WINED3DSIH_M4x3:
+ case WINED3DSIH_M3x3:
+ return param == 1 ? 2 : 0;
+
+ case WINED3DSIH_M3x2:
+ return param == 1 ? 1 : 0;
+
+ default:
+ return 0;
+ }
+}
+
+/* Note that this does not count the loop register as an address register. */
+static HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3d_shader_frontend *fe,
+ struct shader_reg_maps *reg_maps, struct wined3d_shader_signature_element *input_signature,
+ struct wined3d_shader_signature_element *output_signature, const DWORD *byte_code, DWORD constf_size)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+ unsigned int cur_loop_depth = 0, max_loop_depth = 0;
+ void *fe_data = shader->baseShader.frontend_data;
+ struct wined3d_shader_version shader_version;
+ const DWORD *ptr = byte_code;
+
+ memset(reg_maps, 0, sizeof(*reg_maps));
+
+ /* get_registers_used() is called on every compile on some 1.x shaders,
+ * which can result in stacking up a collection of local constants.
+ * Delete the old constants if existing. */
+ shader_delete_constant_list(&shader->baseShader.constantsF);
+ shader_delete_constant_list(&shader->baseShader.constantsB);
+ shader_delete_constant_list(&shader->baseShader.constantsI);
+
+ fe->shader_read_header(fe_data, &ptr, &shader_version);
+ reg_maps->shader_version = shader_version;
+
+ reg_maps->constf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(*reg_maps->constf) * ((constf_size + 31) / 32));
+ if (!reg_maps->constf)
+ {
+ ERR("Failed to allocate constant map memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ reg_maps->constf_size = constf_size;
+
+ while (!fe->shader_is_end(fe_data, &ptr))
+ {
+ struct wined3d_shader_instruction ins;
+ const char *comment;
+ UINT comment_size;
+ UINT param_size;
+
+ /* Skip comments. */
+ fe->shader_read_comment(&ptr, &comment, &comment_size);
+ if (comment) continue;
+
+ /* Fetch opcode. */
+ fe->shader_read_opcode(fe_data, &ptr, &ins, &param_size);
+
+ /* Unhandled opcode, and its parameters. */
+ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+ {
+ TRACE("Skipping unrecognized instruction.\n");
+ ptr += param_size;
+ continue;
+ }
+
+ /* Handle declarations. */
+ if (ins.handler_idx == WINED3DSIH_DCL)
+ {
+ struct wined3d_shader_semantic semantic;
+ unsigned int reg_idx;
+
+ fe->shader_read_semantic(&ptr, &semantic);
+ reg_idx = semantic.reg.reg.idx;
+
+ switch (semantic.reg.reg.type)
+ {
+ /* Mark input registers used. */
+ case WINED3DSPR_INPUT:
+ AssertReturn(reg_idx < max(MAX_ATTRIBS, MAX_REG_INPUT), E_INVALIDARG);
+ reg_maps->input_registers |= 1 << reg_idx;
+ shader_signature_from_semantic(&input_signature[reg_idx], &semantic);
+ break;
+
+ /* Vertex shader: mark 3.0 output registers used, save token. */
+ case WINED3DSPR_OUTPUT:
+ AssertReturn(reg_idx < MAX_REG_OUTPUT, E_INVALIDARG);
+ reg_maps->output_registers |= 1 << reg_idx;
+ shader_signature_from_semantic(&output_signature[reg_idx], &semantic);
+ if (semantic.usage == WINED3DDECLUSAGE_FOG) reg_maps->fog = 1;
+ break;
+
+ /* Save sampler usage token. */
+ case WINED3DSPR_SAMPLER:
+ AssertReturn(reg_idx < RT_ELEMENTS(reg_maps->sampler_type), E_INVALIDARG);
+ reg_maps->sampler_type[reg_idx] = semantic.sampler_type;
+ break;
+
+ default:
+ TRACE("Not recording DCL register type %#x.\n", semantic.reg.reg.type);
+ break;
+ }
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEF)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+ local_constant* lconst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ AssertReturn(dst.reg.idx < constf_size, E_INVALIDARG);
+
+ lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ lconst->idx = dst.reg.idx;
+ memcpy(lconst->value, ptr, 4 * sizeof(DWORD));
+ ptr += 4;
+
+ /* In pixel shader 1.X shaders, the constants are clamped between [-1;1] */
+ if (shader_version.major == 1 && shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ float *value = (float *)lconst->value;
+ if (value[0] < -1.0f) value[0] = -1.0f;
+ else if (value[0] > 1.0f) value[0] = 1.0f;
+ if (value[1] < -1.0f) value[1] = -1.0f;
+ else if (value[1] > 1.0f) value[1] = 1.0f;
+ if (value[2] < -1.0f) value[2] = -1.0f;
+ else if (value[2] > 1.0f) value[2] = 1.0f;
+ if (value[3] < -1.0f) value[3] = -1.0f;
+ else if (value[3] > 1.0f) value[3] = 1.0f;
+ }
+
+ list_add_head(&shader->baseShader.constantsF, &lconst->entry);
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFI)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+ local_constant* lconst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ AssertReturn(dst.reg.idx < MAX_CONST_I, E_INVALIDARG);
+
+ lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ lconst->idx = dst.reg.idx;
+ memcpy(lconst->value, ptr, 4 * sizeof(DWORD));
+ ptr += 4;
+
+ list_add_head(&shader->baseShader.constantsI, &lconst->entry);
+ reg_maps->local_int_consts |= (1 << dst.reg.idx);
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFB)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+ local_constant* lconst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ AssertReturn(dst.reg.idx < MAX_CONST_B, E_INVALIDARG);
+
+ lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ lconst->idx = dst.reg.idx;
+ memcpy(lconst->value, ptr, sizeof(DWORD));
+ ++ptr;
+
+ list_add_head(&shader->baseShader.constantsB, &lconst->entry);
+ reg_maps->local_bool_consts |= (1 << dst.reg.idx);
+ }
+ /* If there's a loop in the shader. */
+ else if (ins.handler_idx == WINED3DSIH_LOOP
+ || ins.handler_idx == WINED3DSIH_REP)
+ {
+ struct wined3d_shader_src_param src, rel_addr;
+
+ fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+
+ /* Rep and Loop always use an integer constant for the control parameters. */
+ if (ins.handler_idx == WINED3DSIH_REP)
+ {
+ reg_maps->integer_constants |= 1 << src.reg.idx;
+ }
+ else
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+ reg_maps->integer_constants |= 1 << src.reg.idx;
+ }
+
+ cur_loop_depth++;
+ if (cur_loop_depth > max_loop_depth) max_loop_depth = cur_loop_depth;
+ }
+ else if (ins.handler_idx == WINED3DSIH_ENDLOOP
+ || ins.handler_idx == WINED3DSIH_ENDREP)
+ {
+ cur_loop_depth--;
+ }
+ /* For subroutine prototypes. */
+ else if (ins.handler_idx == WINED3DSIH_LABEL)
+ {
+ struct wined3d_shader_src_param src, rel_addr;
+
+ fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+ reg_maps->labels |= 1 << src.reg.idx;
+ }
+ /* Set texture, address, temporary registers. */
+ else
+ {
+ BOOL color0_mov = FALSE;
+ int i, limit;
+
+ /* This will loop over all the registers and try to
+ * make a bitmask of the ones we're interested in.
+ *
+ * Relative addressing tokens are ignored, but that's
+ * okay, since we'll catch any address registers when
+ * they are initialized (required by spec). */
+ if (ins.dst_count)
+ {
+ struct wined3d_shader_src_param dst_rel_addr;
+ struct wined3d_shader_dst_param dst_param;
+ HRESULT hr;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+
+ hr = shader_record_register_usage(shader, reg_maps, &dst_param.reg, shader_version.type);
+ AssertReturn(SUCCEEDED(hr), hr);
+
+ /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and
+ * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel
+ * shaders because TECRDOUT isn't used in them, but future register types might cause issues */
+ if (shader_version.type == WINED3D_SHADER_TYPE_VERTEX && shader_version.major < 3
+ && dst_param.reg.type == WINED3DSPR_TEXCRDOUT)
+ {
+ unsigned int idx = dst_param.reg.idx;
+ AssertReturn(idx < MAX_REG_TEXCRD, E_INVALIDARG);
+
+ reg_maps->texcoord_mask[idx] |= dst_param.write_mask;
+ }
+
+ if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)shader;
+
+ if (dst_param.reg.type == WINED3DSPR_COLOROUT && dst_param.reg.idx == 0)
+ {
+ /* Many 2.0 and 3.0 pixel shaders end with a MOV from a temp register to
+ * COLOROUT 0. If we know this in advance, the ARB shader backend can skip
+ * the mov and perform the sRGB write correction from the source register.
+ *
+ * However, if the mov is only partial, we can't do this, and if the write
+ * comes from an instruction other than MOV it is hard to do as well. If
+ * COLOROUT 0 is overwritten partially later, the marker is dropped again. */
+
+ ps->color0_mov = FALSE;
+ if (ins.handler_idx == WINED3DSIH_MOV)
+ {
+ /* Used later when the source register is read. */
+ color0_mov = TRUE;
+ }
+ }
+ /* Also drop the MOV marker if the source register is overwritten prior to the shader
+ * end
+ */
+ else if (dst_param.reg.type == WINED3DSPR_TEMP && dst_param.reg.idx == ps->color0_reg)
+ {
+ ps->color0_mov = FALSE;
+ }
+ }
+
+ /* Declare 1.x samplers implicitly, based on the destination reg. number. */
+ if (ins.handler_idx == WINED3DSIH_TEX
+ || ins.handler_idx == WINED3DSIH_TEXBEM
+ || ins.handler_idx == WINED3DSIH_TEXBEML
+ || ins.handler_idx == WINED3DSIH_TEXDP3TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x2TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x3SPEC
+ || ins.handler_idx == WINED3DSIH_TEXM3x3TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x3VSPEC
+ || ins.handler_idx == WINED3DSIH_TEXREG2AR
+ || ins.handler_idx == WINED3DSIH_TEXREG2GB
+ || ins.handler_idx == WINED3DSIH_TEXREG2RGB)
+ {
+ unsigned int sampler_idx;
+
+ /* Fake sampler usage, only set reserved bit and type. */
+ sampler_idx = dst_param.reg.idx;
+ AssertReturn(sampler_idx < RT_ELEMENTS(reg_maps->sampler_type), E_INVALIDARG);
+
+ TRACE("Setting fake 2D sampler for 1.x pixelshader.\n");
+ reg_maps->sampler_type[sampler_idx] = WINED3DSTT_2D;
+
+ /* texbem is only valid with < 1.4 pixel shaders */
+ if (ins.handler_idx == WINED3DSIH_TEXBEM
+ || ins.handler_idx == WINED3DSIH_TEXBEML)
+ {
+ reg_maps->bumpmat |= 1 << sampler_idx;
+ if (ins.handler_idx == WINED3DSIH_TEXBEML)
+ {
+ reg_maps->luminanceparams |= 1 << sampler_idx;
+ }
+ }
+ }
+ else if (ins.handler_idx == WINED3DSIH_BEM)
+ {
+ unsigned int sampler_idx = dst_param.reg.idx;
+ AssertReturn(shader_version.major == 1, E_INVALIDARG);
+ AssertReturn(sampler_idx < RT_ELEMENTS(reg_maps->sampler_type), E_INVALIDARG);
+
+ reg_maps->bumpmat |= 1 << sampler_idx;
+ }
+ }
+
+ if (ins.handler_idx == WINED3DSIH_NRM) reg_maps->usesnrm = 1;
+ else if (ins.handler_idx == WINED3DSIH_DSY) reg_maps->usesdsy = 1;
+ else if (ins.handler_idx == WINED3DSIH_DSX) reg_maps->usesdsx = 1;
+ else if (ins.handler_idx == WINED3DSIH_TEXLDD) reg_maps->usestexldd = 1;
+ else if (ins.handler_idx == WINED3DSIH_TEXLDL) reg_maps->usestexldl = 1;
+ else if (ins.handler_idx == WINED3DSIH_MOVA) reg_maps->usesmova = 1;
+ else if (ins.handler_idx == WINED3DSIH_IFC) reg_maps->usesifc = 1;
+ else if (ins.handler_idx == WINED3DSIH_CALL) reg_maps->usescall = 1;
+
+ limit = ins.src_count + (ins.predicate ? 1 : 0);
+ for (i = 0; i < limit; ++i)
+ {
+ struct wined3d_shader_src_param src_param, src_rel_addr;
+ unsigned int count;
+ HRESULT hr;
+
+ fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+ count = get_instr_extra_regcount(ins.handler_idx, i);
+
+ hr = shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type);
+ AssertReturn(SUCCEEDED(hr), hr);
+
+ while (count)
+ {
+ ++src_param.reg.idx;
+ hr = shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type);
+ AssertReturn(SUCCEEDED(hr), hr);
+ --count;
+ }
+
+ if (color0_mov)
+ {
+ IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)shader;
+ if (src_param.reg.type == WINED3DSPR_TEMP
+ && src_param.swizzle == WINED3DSP_NOSWIZZLE)
+ {
+ ps->color0_mov = TRUE;
+ ps->color0_reg = src_param.reg.idx;
+ }
+ }
+ }
+ }
+ }
+ reg_maps->loop_depth = max_loop_depth;
+
+ shader->baseShader.functionLength = ((const char *)ptr - (const char *)byte_code);
+
+ return WINED3D_OK;
+}
+
+unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max)
+{
+ DWORD map = 1 << max;
+ map |= map - 1;
+ map &= reg_maps->shader_version.major < 3 ? ~reg_maps->texcoord : ~reg_maps->input_registers;
+
+ return wined3d_log2i(map);
+}
+
+static void shader_dump_decl_usage(const struct wined3d_shader_semantic *semantic,
+ const struct wined3d_shader_version *shader_version)
+{
+ TRACE("dcl");
+
+ if (semantic->reg.reg.type == WINED3DSPR_SAMPLER)
+ {
+ switch (semantic->sampler_type)
+ {
+ case WINED3DSTT_2D: TRACE("_2d"); break;
+ case WINED3DSTT_CUBE: TRACE("_cube"); break;
+ case WINED3DSTT_VOLUME: TRACE("_volume"); break;
+ default: TRACE("_unknown_ttype(0x%08x)", semantic->sampler_type);
+ }
+ }
+ else
+ {
+ /* Pixel shaders 3.0 don't have usage semantics. */
+ if (shader_version->major < 3 && shader_version->type == WINED3D_SHADER_TYPE_PIXEL) return;
+ else TRACE("_");
+
+ switch (semantic->usage)
+ {
+ case WINED3DDECLUSAGE_POSITION:
+ TRACE("position%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_BLENDINDICES:
+ TRACE("blend");
+ break;
+
+ case WINED3DDECLUSAGE_BLENDWEIGHT:
+ TRACE("weight");
+ break;
+
+ case WINED3DDECLUSAGE_NORMAL:
+ TRACE("normal%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_PSIZE:
+ TRACE("psize");
+ break;
+
+ case WINED3DDECLUSAGE_COLOR:
+ if (semantic->usage_idx == 0) TRACE("color");
+ else TRACE("specular%u", (semantic->usage_idx - 1));
+ break;
+
+ case WINED3DDECLUSAGE_TEXCOORD:
+ TRACE("texture%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_TANGENT:
+ TRACE("tangent");
+ break;
+
+ case WINED3DDECLUSAGE_BINORMAL:
+ TRACE("binormal");
+ break;
+
+ case WINED3DDECLUSAGE_TESSFACTOR:
+ TRACE("tessfactor");
+ break;
+
+ case WINED3DDECLUSAGE_POSITIONT:
+ TRACE("positionT%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_FOG:
+ TRACE("fog");
+ break;
+
+ case WINED3DDECLUSAGE_DEPTH:
+ TRACE("depth");
+ break;
+
+ case WINED3DDECLUSAGE_SAMPLE:
+ TRACE("sample");
+ break;
+
+ default:
+ FIXME("unknown_semantics(0x%08x)", semantic->usage);
+ }
+ }
+}
+
+static void shader_dump_register(const struct wined3d_shader_register *reg,
+ const struct wined3d_shader_version *shader_version)
+{
+ static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"};
+ static const char * const misctype_reg_names[] = {"vPos", "vFace"};
+ UINT offset = reg->idx;
+
+ switch (reg->type)
+ {
+ case WINED3DSPR_TEMP:
+ TRACE("r");
+ break;
+
+ case WINED3DSPR_INPUT:
+ TRACE("v");
+ break;
+
+ case WINED3DSPR_CONST:
+ case WINED3DSPR_CONST2:
+ case WINED3DSPR_CONST3:
+ case WINED3DSPR_CONST4:
+ TRACE("c");
+ offset = shader_get_float_offset(reg->type, reg->idx);
+ break;
+
+ case WINED3DSPR_TEXTURE: /* vs: case WINED3DSPR_ADDR */
+ TRACE("%c", shader_version->type == WINED3D_SHADER_TYPE_PIXEL ? 't' : 'a');
+ break;
+
+ case WINED3DSPR_RASTOUT:
+ TRACE("%s", rastout_reg_names[reg->idx]);
+ break;
+
+ case WINED3DSPR_COLOROUT:
+ TRACE("oC");
+ break;
+
+ case WINED3DSPR_DEPTHOUT:
+ TRACE("oDepth");
+ break;
+
+ case WINED3DSPR_ATTROUT:
+ TRACE("oD");
+ break;
+
+ case WINED3DSPR_TEXCRDOUT:
+ /* Vertex shaders >= 3.0 use general purpose output registers
+ * (WINED3DSPR_OUTPUT), which can include an address token. */
+ if (shader_version->major >= 3) TRACE("o");
+ else TRACE("oT");
+ break;
+
+ case WINED3DSPR_CONSTINT:
+ TRACE("i");
+ break;
+
+ case WINED3DSPR_CONSTBOOL:
+ TRACE("b");
+ break;
+
+ case WINED3DSPR_LABEL:
+ TRACE("l");
+ break;
+
+ case WINED3DSPR_LOOP:
+ TRACE("aL");
+ break;
+
+ case WINED3DSPR_SAMPLER:
+ TRACE("s");
+ break;
+
+ case WINED3DSPR_MISCTYPE:
+ if (reg->idx > 1) FIXME("Unhandled misctype register %u.\n", reg->idx);
+ else TRACE("%s", misctype_reg_names[reg->idx]);
+ break;
+
+ case WINED3DSPR_PREDICATE:
+ TRACE("p");
+ break;
+
+ case WINED3DSPR_IMMCONST:
+ TRACE("l");
+ break;
+
+ case WINED3DSPR_CONSTBUFFER:
+ TRACE("cb");
+ break;
+
+ default:
+ TRACE("unhandled_rtype(%#x)", reg->type);
+ break;
+ }
+
+ if (reg->type == WINED3DSPR_IMMCONST)
+ {
+ TRACE("(");
+ switch (reg->immconst_type)
+ {
+ case WINED3D_IMMCONST_FLOAT:
+ TRACE("%.8e", *(const float *)reg->immconst_data);
+ break;
+
+ case WINED3D_IMMCONST_FLOAT4:
+ TRACE("%.8e, %.8e, %.8e, %.8e",
+ *(const float *)&reg->immconst_data[0], *(const float *)&reg->immconst_data[1],
+ *(const float *)&reg->immconst_data[2], *(const float *)&reg->immconst_data[3]);
+ break;
+
+ default:
+ TRACE("<unhandled immconst_type %#x>", reg->immconst_type);
+ break;
+ }
+ TRACE(")");
+ }
+ else if (reg->type != WINED3DSPR_RASTOUT && reg->type != WINED3DSPR_MISCTYPE)
+ {
+ if (reg->array_idx != ~0U)
+ {
+ TRACE("%u[%u", offset, reg->array_idx);
+ if (reg->rel_addr)
+ {
+ TRACE(" + ");
+ shader_dump_src_param(reg->rel_addr, shader_version);
+ }
+ TRACE("]");
+ }
+ else
+ {
+ if (reg->rel_addr)
+ {
+ TRACE("[");
+ shader_dump_src_param(reg->rel_addr, shader_version);
+ TRACE(" + ");
+ }
+ TRACE("%u", offset);
+ if (reg->rel_addr) TRACE("]");
+ }
+ }
+}
+
+void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
+ const struct wined3d_shader_version *shader_version)
+{
+ DWORD write_mask = param->write_mask;
+
+ shader_dump_register(&param->reg, shader_version);
+
+ if (write_mask != WINED3DSP_WRITEMASK_ALL)
+ {
+ static const char *write_mask_chars = "xyzw";
+
+ TRACE(".");
+ if (write_mask & WINED3DSP_WRITEMASK_0) TRACE("%c", write_mask_chars[0]);
+ if (write_mask & WINED3DSP_WRITEMASK_1) TRACE("%c", write_mask_chars[1]);
+ if (write_mask & WINED3DSP_WRITEMASK_2) TRACE("%c", write_mask_chars[2]);
+ if (write_mask & WINED3DSP_WRITEMASK_3) TRACE("%c", write_mask_chars[3]);
+ }
+}
+
+void shader_dump_src_param(const struct wined3d_shader_src_param *param,
+ const struct wined3d_shader_version *shader_version)
+{
+ DWORD src_modifier = param->modifiers;
+ DWORD swizzle = param->swizzle;
+
+ if (src_modifier == WINED3DSPSM_NEG
+ || src_modifier == WINED3DSPSM_BIASNEG
+ || src_modifier == WINED3DSPSM_SIGNNEG
+ || src_modifier == WINED3DSPSM_X2NEG
+ || src_modifier == WINED3DSPSM_ABSNEG)
+ TRACE("-");
+ else if (src_modifier == WINED3DSPSM_COMP)
+ TRACE("1-");
+ else if (src_modifier == WINED3DSPSM_NOT)
+ TRACE("!");
+
+ if (src_modifier == WINED3DSPSM_ABS || src_modifier == WINED3DSPSM_ABSNEG)
+ TRACE("abs(");
+
+ shader_dump_register(&param->reg, shader_version);
+
+ if (src_modifier)
+ {
+ switch (src_modifier)
+ {
+ case WINED3DSPSM_NONE: break;
+ case WINED3DSPSM_NEG: break;
+ case WINED3DSPSM_NOT: break;
+ case WINED3DSPSM_BIAS: TRACE("_bias"); break;
+ case WINED3DSPSM_BIASNEG: TRACE("_bias"); break;
+ case WINED3DSPSM_SIGN: TRACE("_bx2"); break;
+ case WINED3DSPSM_SIGNNEG: TRACE("_bx2"); break;
+ case WINED3DSPSM_COMP: break;
+ case WINED3DSPSM_X2: TRACE("_x2"); break;
+ case WINED3DSPSM_X2NEG: TRACE("_x2"); break;
+ case WINED3DSPSM_DZ: TRACE("_dz"); break;
+ case WINED3DSPSM_DW: TRACE("_dw"); break;
+ case WINED3DSPSM_ABSNEG: TRACE(")"); break;
+ case WINED3DSPSM_ABS: TRACE(")"); break;
+ default: TRACE("_unknown_modifier(%#x)", src_modifier);
+ }
+ }
+
+ if (swizzle != WINED3DSP_NOSWIZZLE)
+ {
+ static const char *swizzle_chars = "xyzw";
+ DWORD swizzle_x = swizzle & 0x03;
+ DWORD swizzle_y = (swizzle >> 2) & 0x03;
+ DWORD swizzle_z = (swizzle >> 4) & 0x03;
+ DWORD swizzle_w = (swizzle >> 6) & 0x03;
+
+ if (swizzle_x == swizzle_y
+ && swizzle_x == swizzle_z
+ && swizzle_x == swizzle_w)
+ {
+ TRACE(".%c", swizzle_chars[swizzle_x]);
+ }
+ else
+ {
+ TRACE(".%c%c%c%c", swizzle_chars[swizzle_x], swizzle_chars[swizzle_y],
+ swizzle_chars[swizzle_z], swizzle_chars[swizzle_w]);
+ }
+ }
+}
+
+/* Shared code in order to generate the bulk of the shader string.
+ * NOTE: A description of how to parse tokens can be found on MSDN. */
+void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
+ const shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ const struct wined3d_shader_frontend *fe = shader->baseShader.frontend;
+ void *fe_data = shader->baseShader.frontend_data;
+ struct wined3d_shader_src_param src_rel_addr[4];
+ struct wined3d_shader_src_param src_param[4];
+ struct wined3d_shader_version shader_version;
+ struct wined3d_shader_src_param dst_rel_addr;
+ struct wined3d_shader_dst_param dst_param;
+ struct wined3d_shader_instruction ins;
+ struct wined3d_shader_context ctx;
+ const DWORD *ptr = byte_code;
+ DWORD i;
+
+ /* Initialize current parsing state. */
+ ctx.shader = iface;
+ ctx.gl_info = &device->adapter->gl_info;
+ ctx.reg_maps = reg_maps;
+ ctx.buffer = buffer;
+ ctx.backend_data = backend_ctx;
+
+ ins.ctx = &ctx;
+ ins.dst = &dst_param;
+ ins.src = src_param;
+ shader->baseShader.parse_state.current_row = 0;
+
+ fe->shader_read_header(fe_data, &ptr, &shader_version);
+
+ while (!fe->shader_is_end(fe_data, &ptr))
+ {
+ const char *comment;
+ UINT comment_size;
+ UINT param_size;
+
+ /* Skip comment tokens. */
+ fe->shader_read_comment(&ptr, &comment, &comment_size);
+ if (comment) continue;
+
+ /* Read opcode. */
+ fe->shader_read_opcode(fe_data, &ptr, &ins, &param_size);
+
+ /* Unknown opcode and its parameters. */
+ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+ {
+ TRACE("Skipping unrecognized instruction.\n");
+ ptr += param_size;
+ continue;
+ }
+
+ /* Nothing to do. */
+ if (ins.handler_idx == WINED3DSIH_DCL
+ || ins.handler_idx == WINED3DSIH_NOP
+ || ins.handler_idx == WINED3DSIH_DEF
+ || ins.handler_idx == WINED3DSIH_DEFI
+ || ins.handler_idx == WINED3DSIH_DEFB
+ || ins.handler_idx == WINED3DSIH_PHASE)
+ {
+ ptr += param_size;
+ continue;
+ }
+
+ /* Destination token */
+ if (ins.dst_count) fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+
+ /* Predication token */
+ if (ins.predicate)
+ {
+#ifndef VBOX_WITH_VMSVGA
+ FIXME("Predicates not implemented.\n");
+#endif
+ ins.predicate = *ptr++;
+ }
+
+ /* Other source tokens */
+ for (i = 0; i < ins.src_count; ++i)
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src_param[i], &src_rel_addr[i]);
+ }
+
+ /* Call appropriate function for output target */
+ device->shader_backend->shader_handle_instruction(&ins);
+ }
+}
+
+static void shader_dump_ins_modifiers(const struct wined3d_shader_dst_param *dst)
+{
+ DWORD mmask = dst->modifiers;
+
+ switch (dst->shift)
+ {
+ case 0: break;
+ case 13: TRACE("_d8"); break;
+ case 14: TRACE("_d4"); break;
+ case 15: TRACE("_d2"); break;
+ case 1: TRACE("_x2"); break;
+ case 2: TRACE("_x4"); break;
+ case 3: TRACE("_x8"); break;
+ default: TRACE("_unhandled_shift(%d)", dst->shift); break;
+ }
+
+ if (mmask & WINED3DSPDM_SATURATE) TRACE("_sat");
+ if (mmask & WINED3DSPDM_PARTIALPRECISION) TRACE("_pp");
+ if (mmask & WINED3DSPDM_MSAMPCENTROID) TRACE("_centroid");
+
+ mmask &= ~(WINED3DSPDM_SATURATE | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_MSAMPCENTROID);
+ if (mmask) FIXME("_unrecognized_modifier(%#x)", mmask);
+}
+
+static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, const DWORD *byte_code)
+{
+ struct wined3d_shader_version shader_version;
+ const DWORD *ptr = byte_code;
+ const char *type_prefix;
+ DWORD i;
+
+ TRACE("Parsing %p.\n", byte_code);
+
+ fe->shader_read_header(fe_data, &ptr, &shader_version);
+
+ switch (shader_version.type)
+ {
+ case WINED3D_SHADER_TYPE_VERTEX:
+ type_prefix = "vs";
+ break;
+
+ case WINED3D_SHADER_TYPE_GEOMETRY:
+ type_prefix = "gs";
+ break;
+
+ case WINED3D_SHADER_TYPE_PIXEL:
+ type_prefix = "ps";
+ break;
+
+ default:
+ FIXME("Unhandled shader type %#x.\n", shader_version.type);
+ type_prefix = "unknown";
+ break;
+ }
+
+ TRACE("%s_%u_%u\n", type_prefix, shader_version.major, shader_version.minor);
+
+ while (!fe->shader_is_end(fe_data, &ptr))
+ {
+ struct wined3d_shader_instruction ins;
+ const char *comment;
+ UINT comment_size;
+ UINT param_size;
+
+ /* comment */
+ fe->shader_read_comment(&ptr, &comment, &comment_size);
+ if (comment)
+ {
+ if (comment_size > 4 && *(const DWORD *)comment == WINEMAKEFOURCC('T', 'E', 'X', 'T'))
+ {
+ const char *end = comment + comment_size;
+ const char *cur = comment + 4;
+ const char *line = cur;
+
+ TRACE("// TEXT\n");
+ while (cur != end)
+ {
+ if (*cur == '\n')
+ {
+ UINT len = cur - line;
+ if (len && *(cur - 1) == '\r') --len;
+ TRACE("// %s\n", debugstr_an(line, len));
+ line = ++cur;
+ }
+ else ++cur;
+ }
+ if (line != cur) TRACE("// %s\n", debugstr_an(line, cur - line));
+ }
+ else TRACE("// %s\n", debugstr_an(comment, comment_size));
+ continue;
+ }
+
+ fe->shader_read_opcode(fe_data, &ptr, &ins, &param_size);
+ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+ {
+ TRACE("Skipping unrecognized instruction.\n");
+ ptr += param_size;
+ continue;
+ }
+
+ if (ins.handler_idx == WINED3DSIH_DCL)
+ {
+ struct wined3d_shader_semantic semantic;
+
+ fe->shader_read_semantic(&ptr, &semantic);
+
+ shader_dump_decl_usage(&semantic, &shader_version);
+ shader_dump_ins_modifiers(&semantic.reg);
+ TRACE(" ");
+ shader_dump_dst_param(&semantic.reg, &shader_version);
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEF)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.reg.type, dst.reg.idx),
+ *(const float *)(ptr),
+ *(const float *)(ptr + 1),
+ *(const float *)(ptr + 2),
+ *(const float *)(ptr + 3));
+ ptr += 4;
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFI)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ TRACE("defi i%u = %d, %d, %d, %d", dst.reg.idx,
+ *(ptr),
+ *(ptr + 1),
+ *(ptr + 2),
+ *(ptr + 3));
+ ptr += 4;
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFB)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ TRACE("defb b%u = %s", dst.reg.idx, *ptr ? "true" : "false");
+ ++ptr;
+ }
+ else
+ {
+ struct wined3d_shader_src_param dst_rel_addr, src_rel_addr;
+ struct wined3d_shader_dst_param dst_param;
+ struct wined3d_shader_src_param src_param;
+
+ if (ins.dst_count)
+ {
+ fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+ }
+
+ /* Print out predication source token first - it follows
+ * the destination token. */
+ if (ins.predicate)
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+ TRACE("(");
+ shader_dump_src_param(&src_param, &shader_version);
+ TRACE(") ");
+ }
+
+ /* PixWin marks instructions with the coissue flag with a '+' */
+ if (ins.coissue) TRACE("+");
+
+ TRACE("%s", shader_opcode_names[ins.handler_idx]);
+
+ if (ins.handler_idx == WINED3DSIH_IFC
+ || ins.handler_idx == WINED3DSIH_BREAKC)
+ {
+ switch (ins.flags)
+ {
+ case COMPARISON_GT: TRACE("_gt"); break;
+ case COMPARISON_EQ: TRACE("_eq"); break;
+ case COMPARISON_GE: TRACE("_ge"); break;
+ case COMPARISON_LT: TRACE("_lt"); break;
+ case COMPARISON_NE: TRACE("_ne"); break;
+ case COMPARISON_LE: TRACE("_le"); break;
+ default: TRACE("_(%u)", ins.flags);
+ }
+ }
+ else if (ins.handler_idx == WINED3DSIH_TEX
+ && shader_version.major >= 2
+ && (ins.flags & WINED3DSI_TEXLD_PROJECT))
+ {
+ TRACE("p");
+ }
+
+ /* We already read the destination token, print it. */
+ if (ins.dst_count)
+ {
+ shader_dump_ins_modifiers(&dst_param);
+ TRACE(" ");
+ shader_dump_dst_param(&dst_param, &shader_version);
+ }
+
+ /* Other source tokens */
+ for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i)
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+ TRACE(!i ? " " : ", ");
+ shader_dump_src_param(&src_param, &shader_version);
+ }
+ }
+ TRACE("\n");
+ }
+}
+
+static void shader_cleanup(IWineD3DBaseShader *iface)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+
+ ((IWineD3DDeviceImpl *)shader->baseShader.device)->shader_backend->shader_destroy(iface);
+ HeapFree(GetProcessHeap(), 0, shader->baseShader.reg_maps.constf);
+ HeapFree(GetProcessHeap(), 0, shader->baseShader.function);
+ shader_delete_constant_list(&shader->baseShader.constantsF);
+ shader_delete_constant_list(&shader->baseShader.constantsB);
+ shader_delete_constant_list(&shader->baseShader.constantsI);
+ list_remove(&shader->baseShader.shader_list_entry);
+
+ if (shader->baseShader.frontend && shader->baseShader.frontend_data)
+ {
+ shader->baseShader.frontend->shader_free(shader->baseShader.frontend_data);
+ }
+}
+
+static void shader_none_handle_instruction(const struct wined3d_shader_instruction *ins) {}
+static void shader_none_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) {}
+static void shader_none_select_depth_blt(IWineD3DDevice *iface, enum tex_types tex_type) {}
+static void shader_none_deselect_depth_blt(IWineD3DDevice *iface) {}
+static void shader_none_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
+static void shader_none_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
+static void shader_none_load_constants(const struct wined3d_context *context, char usePS, char useVS) {}
+static void shader_none_load_np2fixup_constants(IWineD3DDevice *iface, char usePS, char useVS) {}
+static void shader_none_destroy(IWineD3DBaseShader *iface) {}
+static HRESULT shader_none_alloc(IWineD3DDevice *iface) {return WINED3D_OK;}
+static void shader_none_free(IWineD3DDevice *iface) {}
+static BOOL shader_none_dirty_const(IWineD3DDevice *iface) {return FALSE;}
+
+static void shader_none_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *caps)
+{
+ /* Set the shader caps to 0 for the none shader backend */
+ caps->VertexShaderVersion = 0;
+ caps->PixelShaderVersion = 0;
+ caps->PixelShader1xMaxValue = 0.0f;
+}
+
+static BOOL shader_none_color_fixup_supported(struct color_fixup_desc fixup)
+{
+ if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
+ {
+ TRACE("Checking support for fixup:\n");
+ dump_color_fixup_desc(fixup);
+ }
+
+ /* Faked to make some apps happy. */
+ if (!is_complex_fixup(fixup))
+ {
+ TRACE("[OK]\n");
+ return TRUE;
+ }
+
+ TRACE("[FAILED]\n");
+ return FALSE;
+}
+
+const shader_backend_t none_shader_backend = {
+ shader_none_handle_instruction,
+ shader_none_select,
+ shader_none_select_depth_blt,
+ shader_none_deselect_depth_blt,
+ shader_none_update_float_vertex_constants,
+ shader_none_update_float_pixel_constants,
+ shader_none_load_constants,
+ shader_none_load_np2fixup_constants,
+ shader_none_destroy,
+ shader_none_alloc,
+ shader_none_free,
+ shader_none_dirty_const,
+ shader_none_get_caps,
+ shader_none_color_fixup_supported,
+};
+
+static void shader_get_parent(IWineD3DBaseShaderImpl *shader, IUnknown **parent)
+{
+ *parent = shader->baseShader.parent;
+ IUnknown_AddRef(*parent);
+ TRACE("shader %p, returning %p.\n", shader, *parent);
+}
+
+static HRESULT shader_get_function(IWineD3DBaseShaderImpl *shader, void *data, UINT *data_size)
+{
+ if (!data)
+ {
+ *data_size = shader->baseShader.functionLength;
+ return WINED3D_OK;
+ }
+
+ if (*data_size < shader->baseShader.functionLength)
+ {
+ /* MSDN claims (for d3d8 at least) that if *pSizeOfData is smaller
+ * than the required size we should write the required size and
+ * return D3DERR_MOREDATA. That's not actually true. */
+ return WINED3DERR_INVALIDCALL;
+ }
+
+ memcpy(data, shader->baseShader.function, shader->baseShader.functionLength);
+
+ return WINED3D_OK;
+}
+
+static HRESULT shader_set_function(IWineD3DBaseShaderImpl *shader, const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature, DWORD float_const_count)
+{
+ struct shader_reg_maps *reg_maps = &shader->baseShader.reg_maps;
+ const struct wined3d_shader_frontend *fe;
+ HRESULT hr;
+
+ TRACE("shader %p, byte_code %p, output_signature %p, float_const_count %u.\n",
+ shader, byte_code, output_signature, float_const_count);
+
+ fe = shader_select_frontend(*byte_code);
+ if (!fe)
+ {
+ FIXME("Unable to find frontend for shader.\n");
+ return WINED3DERR_INVALIDCALL;
+ }
+ shader->baseShader.frontend = fe;
+ shader->baseShader.frontend_data = fe->shader_init(byte_code, shader->baseShader.functionLength / 4, output_signature);
+ if (!shader->baseShader.frontend_data)
+ {
+ FIXME("Failed to initialize frontend.\n");
+ return WINED3DERR_INVALIDCALL;
+ }
+
+ /* First pass: trace shader. */
+ if (TRACE_ON(d3d_shader)) shader_trace_init(fe, shader->baseShader.frontend_data, byte_code);
+
+ /* Initialize immediate constant lists. */
+ list_init(&shader->baseShader.constantsF);
+ list_init(&shader->baseShader.constantsB);
+ list_init(&shader->baseShader.constantsI);
+
+ /* Second pass: figure out which registers are used, what the semantics are, etc. */
+ hr = shader_get_registers_used((IWineD3DBaseShader *)shader, fe,
+ reg_maps, shader->baseShader.input_signature, shader->baseShader.output_signature,
+ byte_code, float_const_count);
+ if (FAILED(hr)) return hr;
+
+ shader->baseShader.function = HeapAlloc(GetProcessHeap(), 0, shader->baseShader.functionLength);
+ if (!shader->baseShader.function) return E_OUTOFMEMORY;
+ memcpy(shader->baseShader.function, byte_code, shader->baseShader.functionLength);
+
+ return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE vertexshader_QueryInterface(IWineD3DVertexShader *iface, REFIID riid, void **object)
+{
+ TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+ if (IsEqualGUID(riid, &IID_IWineD3DVertexShader)
+ || IsEqualGUID(riid, &IID_IWineD3DBaseShader)
+ || IsEqualGUID(riid, &IID_IWineD3DBase)
+ || IsEqualGUID(riid, &IID_IUnknown))
+ {
+ IUnknown_AddRef(iface);
+ *object = iface;
+ return S_OK;
+ }
+
+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+ *object = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE vertexshader_AddRef(IWineD3DVertexShader *iface)
+{
+ IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl *)iface;
+ ULONG refcount = InterlockedIncrement(&shader->baseShader.ref);
+
+ TRACE("%p increasing refcount to %u.\n", shader, refcount);
+
+ return refcount;
+}
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+static void shader_chache_put(PVBOXEXT_HASHCACHE pCache, IWineD3DBaseShaderImpl *pShader);
+#endif
+
+static ULONG STDMETHODCALLTYPE vertexshader_Release(IWineD3DVertexShader *iface)
+{
+ IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl *)iface;
+ ULONG refcount = InterlockedDecrement(&shader->baseShader.ref);
+
+ TRACE("%p decreasing refcount to %u.\n", shader, refcount);
+
+ if (!refcount)
+ {
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+ shader_chache_put(&((IWineD3DDeviceImpl*)shader->baseShader.device)->vshaderCache, (IWineD3DBaseShaderImpl*)shader);
+#else
+ shader_cleanup((IWineD3DBaseShader *)iface);
+#ifndef VBOX_WITH_VMSVGA
+ shader->baseShader.parent_ops->wined3d_object_destroyed(shader->baseShader.parent);
+#endif
+ HeapFree(GetProcessHeap(), 0, shader);
+#endif
+ }
+
+ return refcount;
+}
+
+static HRESULT STDMETHODCALLTYPE vertexshader_GetParent(IWineD3DVertexShader *iface, IUnknown **parent)
+{
+ TRACE("iface %p, parent %p.\n", iface, parent);
+
+ shader_get_parent((IWineD3DBaseShaderImpl *)iface, parent);
+
+ return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE vertexshader_GetFunction(IWineD3DVertexShader *iface, void *data, UINT *data_size)
+{
+ TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
+
+ return shader_get_function((IWineD3DBaseShaderImpl *)iface, data, data_size);
+}
+
+/* Set local constants for d3d8 shaders. */
+static HRESULT STDMETHODCALLTYPE vertexshader_SetLocalConstantsF(IWineD3DVertexShader *iface,
+ UINT start_idx, const float *src_data, UINT count)
+{
+ IWineD3DVertexShaderImpl *shader =(IWineD3DVertexShaderImpl *)iface;
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ UINT i, end_idx;
+
+ TRACE("iface %p, start_idx %u, src_data %p, count %u.\n", iface, start_idx, src_data, count);
+
+ end_idx = start_idx + count;
+ if (end_idx > device->d3d_vshader_constantF)
+ {
+ WARN("end_idx %u > float constants limit %u.\n", end_idx, device->d3d_vshader_constantF);
+ end_idx = device->d3d_vshader_constantF;
+ }
+
+ for (i = start_idx; i < end_idx; ++i)
+ {
+ local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ lconst->idx = i;
+ memcpy(lconst->value, src_data + (i - start_idx) * 4 /* 4 components */, 4 * sizeof(float));
+ list_add_head(&shader->baseShader.constantsF, &lconst->entry);
+ }
+
+ return WINED3D_OK;
+}
+
+static const IWineD3DVertexShaderVtbl IWineD3DVertexShader_Vtbl =
+{
+ /* IUnknown methods */
+ vertexshader_QueryInterface,
+ vertexshader_AddRef,
+ vertexshader_Release,
+ /* IWineD3DBase methods */
+ vertexshader_GetParent,
+ /* IWineD3DBaseShader methods */
+ vertexshader_GetFunction,
+ /* IWineD3DVertexShader methods */
+ vertexshader_SetLocalConstantsF,
+};
+
+void find_vs_compile_args(IWineD3DVertexShaderImpl *shader,
+ IWineD3DStateBlockImpl *stateblock, struct vs_compile_args *args)
+{
+ args->fog_src = stateblock->renderState[WINED3DRS_FOGTABLEMODE] == WINED3DFOG_NONE ? VS_FOG_COORD : VS_FOG_Z;
+ args->clip_enabled = stateblock->renderState[WINED3DRS_CLIPPING]
+ && stateblock->renderState[WINED3DRS_CLIPPLANEENABLE];
+ args->swizzle_map = ((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.swizzle_map;
+}
+
+static BOOL match_usage(BYTE usage1, BYTE usage_idx1, BYTE usage2, BYTE usage_idx2)
+{
+ if (usage_idx1 != usage_idx2) return FALSE;
+ if (usage1 == usage2) return TRUE;
+ if (usage1 == WINED3DDECLUSAGE_POSITION && usage2 == WINED3DDECLUSAGE_POSITIONT) return TRUE;
+ if (usage2 == WINED3DDECLUSAGE_POSITION && usage1 == WINED3DDECLUSAGE_POSITIONT) return TRUE;
+
+ return FALSE;
+}
+
+BOOL vshader_get_input(IWineD3DVertexShader *iface, BYTE usage_req, BYTE usage_idx_req, unsigned int *regnum)
+{
+ IWineD3DVertexShaderImpl *shader = (IWineD3DVertexShaderImpl *)iface;
+ WORD map = shader->baseShader.reg_maps.input_registers;
+ unsigned int i;
+
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ if (!(map & 1)) continue;
+
+ if (match_usage(shader->attributes[i].usage,
+ shader->attributes[i].usage_idx, usage_req, usage_idx_req))
+ {
+ *regnum = i;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void vertexshader_set_limits(IWineD3DVertexShaderImpl *shader)
+{
+ DWORD shader_version = WINED3D_SHADER_VERSION(shader->baseShader.reg_maps.shader_version.major,
+ shader->baseShader.reg_maps.shader_version.minor);
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+
+ shader->baseShader.limits.texcoord = 0;
+ shader->baseShader.limits.attributes = 16;
+ shader->baseShader.limits.packed_input = 0;
+
+ switch (shader_version)
+ {
+ case WINED3D_SHADER_VERSION(1, 0):
+ case WINED3D_SHADER_VERSION(1, 1):
+ shader->baseShader.limits.temporary = 12;
+ shader->baseShader.limits.constant_bool = 0;
+ shader->baseShader.limits.constant_int = 0;
+ shader->baseShader.limits.address = 1;
+ shader->baseShader.limits.packed_output = 0;
+ shader->baseShader.limits.sampler = 0;
+ shader->baseShader.limits.label = 0;
+ /* TODO: vs_1_1 has a minimum of 96 constants. What happens when
+ * a vs_1_1 shader is used on a vs_3_0 capable card that has 256
+ * constants? */
+ shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+ break;
+
+ case WINED3D_SHADER_VERSION(2, 0):
+ case WINED3D_SHADER_VERSION(2, 1):
+ shader->baseShader.limits.temporary = 12;
+ shader->baseShader.limits.constant_bool = 16;
+ shader->baseShader.limits.constant_int = 16;
+ shader->baseShader.limits.address = 1;
+ shader->baseShader.limits.packed_output = 0;
+ shader->baseShader.limits.sampler = 0;
+ shader->baseShader.limits.label = 16;
+ shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+ break;
+
+ case WINED3D_SHADER_VERSION(4, 0):
+ FIXME("Using 3.0 limits for 4.0 shader.\n");
+ RT_FALL_THRU();
+
+ case WINED3D_SHADER_VERSION(3, 0):
+ shader->baseShader.limits.temporary = 32;
+ shader->baseShader.limits.constant_bool = 32;
+ shader->baseShader.limits.constant_int = 32;
+ shader->baseShader.limits.address = 1;
+ shader->baseShader.limits.packed_output = 12;
+ shader->baseShader.limits.sampler = 4;
+ shader->baseShader.limits.label = 16; /* FIXME: 2048 */
+ /* DX10 cards on Windows advertise a d3d9 constant limit of 256
+ * even though they are capable of supporting much more (GL
+ * drivers advertise 1024). d3d9.dll and d3d8.dll clamp the
+ * wined3d-advertised maximum. Clamp the constant limit for <= 3.0
+ * shaders to 256. */
+ shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+ break;
+
+ default:
+ shader->baseShader.limits.temporary = 12;
+ shader->baseShader.limits.constant_bool = 16;
+ shader->baseShader.limits.constant_int = 16;
+ shader->baseShader.limits.address = 1;
+ shader->baseShader.limits.packed_output = 0;
+ shader->baseShader.limits.sampler = 0;
+ shader->baseShader.limits.label = 16;
+ shader->baseShader.limits.constant_float = min(256, device->d3d_vshader_constantF);
+ FIXME("Unrecognized vertex shader version \"%u.%u\".\n",
+ shader->baseShader.reg_maps.shader_version.major,
+ shader->baseShader.reg_maps.shader_version.minor);
+ }
+}
+
+HRESULT vertexshader_init(IWineD3DVertexShaderImpl *shader, IWineD3DDeviceImpl *device,
+ const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+ const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+ struct shader_reg_maps *reg_maps = &shader->baseShader.reg_maps;
+ unsigned int i;
+ HRESULT hr;
+ WORD map;
+
+ if (!byte_code) return WINED3DERR_INVALIDCALL;
+
+ shader->lpVtbl = &IWineD3DVertexShader_Vtbl;
+ shader_init(&shader->baseShader, device, parent, parent_ops);
+
+ hr = shader_set_function((IWineD3DBaseShaderImpl *)shader, byte_code,
+ output_signature, device->d3d_vshader_constantF);
+ if (FAILED(hr))
+ {
+ WARN("Failed to set function, hr %#x.\n", hr);
+ shader_cleanup((IWineD3DBaseShader *)shader);
+ return hr;
+ }
+
+ map = shader->baseShader.reg_maps.input_registers;
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ if (!(map & 1) || !shader->baseShader.input_signature[i].semantic_name) continue;
+
+ shader->attributes[i].usage =
+ shader_usage_from_semantic_name(shader->baseShader.input_signature[i].semantic_name);
+ shader->attributes[i].usage_idx = shader->baseShader.input_signature[i].semantic_idx;
+ }
+
+ if (output_signature)
+ {
+ for (i = 0; i < output_signature->element_count; ++i)
+ {
+ struct wined3d_shader_signature_element *e = &output_signature->elements[i];
+ reg_maps->output_registers |= 1 << e->register_idx;
+ shader->baseShader.output_signature[e->register_idx] = *e;
+ }
+ }
+
+ vertexshader_set_limits(shader);
+
+ if (device->vs_selected_mode == SHADER_ARB
+ && (gl_info->quirks & WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT)
+ && shader->min_rel_offset <= shader->max_rel_offset)
+ {
+ if (shader->max_rel_offset - shader->min_rel_offset > 127)
+ {
+ FIXME("The difference between the minimum and maximum relative offset is > 127.\n");
+ FIXME("Which this OpenGL implementation does not support. Try using GLSL.\n");
+ FIXME("Min: %d, Max: %d.\n", shader->min_rel_offset, shader->max_rel_offset);
+ }
+ else if (shader->max_rel_offset - shader->min_rel_offset > 63)
+ {
+ shader->rel_offset = shader->min_rel_offset + 63;
+ }
+ else if (shader->max_rel_offset > 63)
+ {
+ shader->rel_offset = shader->min_rel_offset;
+ }
+ else
+ {
+ shader->rel_offset = 0;
+ }
+ }
+
+ shader->baseShader.load_local_constsF = shader->baseShader.reg_maps.usesrelconstF
+ && !list_empty(&shader->baseShader.constantsF);
+
+ return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE geometryshader_QueryInterface(IWineD3DGeometryShader *iface,
+ REFIID riid, void **object)
+{
+ TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+ if (IsEqualGUID(riid, &IID_IWineD3DGeometryShader)
+ || IsEqualGUID(riid, &IID_IWineD3DBaseShader)
+ || IsEqualGUID(riid, &IID_IWineD3DBase)
+ || IsEqualGUID(riid, &IID_IUnknown))
+ {
+ IUnknown_AddRef(iface);
+ *object = iface;
+ return S_OK;
+ }
+
+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+ *object = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE geometryshader_AddRef(IWineD3DGeometryShader *iface)
+{
+ struct wined3d_geometryshader *shader = (struct wined3d_geometryshader *)iface;
+ ULONG refcount = InterlockedIncrement(&shader->base_shader.ref);
+
+ TRACE("%p increasing refcount to %u.\n", shader, refcount);
+
+ return refcount;
+}
+
+static ULONG STDMETHODCALLTYPE geometryshader_Release(IWineD3DGeometryShader *iface)
+{
+ struct wined3d_geometryshader *shader = (struct wined3d_geometryshader *)iface;
+ ULONG refcount = InterlockedDecrement(&shader->base_shader.ref);
+
+ TRACE("%p decreasing refcount to %u.\n", shader, refcount);
+
+ if (!refcount)
+ {
+ shader_cleanup((IWineD3DBaseShader *)iface);
+ shader->base_shader.parent_ops->wined3d_object_destroyed(shader->base_shader.parent);
+ HeapFree(GetProcessHeap(), 0, shader);
+ }
+
+ return refcount;
+}
+
+static HRESULT STDMETHODCALLTYPE geometryshader_GetParent(IWineD3DGeometryShader *iface, IUnknown **parent)
+{
+ TRACE("iface %p, parent %p.\n", iface, parent);
+
+ shader_get_parent((IWineD3DBaseShaderImpl *)iface, parent);
+
+ return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE geometryshader_GetFunction(IWineD3DGeometryShader *iface, void *data, UINT *data_size)
+{
+ TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
+
+ return shader_get_function((IWineD3DBaseShaderImpl *)iface, data, data_size);
+}
+
+static const IWineD3DGeometryShaderVtbl wined3d_geometryshader_vtbl =
+{
+ /* IUnknown methods */
+ geometryshader_QueryInterface,
+ geometryshader_AddRef,
+ geometryshader_Release,
+ /* IWineD3DBase methods */
+ geometryshader_GetParent,
+ /* IWineD3DBaseShader methods */
+ geometryshader_GetFunction,
+};
+
+HRESULT geometryshader_init(struct wined3d_geometryshader *shader, IWineD3DDeviceImpl *device,
+ const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+ HRESULT hr;
+
+ shader->vtbl = &wined3d_geometryshader_vtbl;
+ shader_init(&shader->base_shader, device, parent, parent_ops);
+
+ hr = shader_set_function((IWineD3DBaseShaderImpl *)shader, byte_code, output_signature, 0);
+ if (FAILED(hr))
+ {
+ WARN("Failed to set function, hr %#x.\n", hr);
+ shader_cleanup((IWineD3DBaseShader *)shader);
+ return hr;
+ }
+
+ shader->base_shader.load_local_constsF = FALSE;
+
+ return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE pixelshader_QueryInterface(IWineD3DPixelShader *iface, REFIID riid, void **object)
+{
+ TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
+
+ if (IsEqualGUID(riid, &IID_IWineD3DPixelShader)
+ || IsEqualGUID(riid, &IID_IWineD3DBaseShader)
+ || IsEqualGUID(riid, &IID_IWineD3DBase)
+ || IsEqualGUID(riid, &IID_IUnknown))
+ {
+ IUnknown_AddRef(iface);
+ *object = iface;
+ return S_OK;
+ }
+
+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+ *object = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG STDMETHODCALLTYPE pixelshader_AddRef(IWineD3DPixelShader *iface)
+{
+ IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)iface;
+ ULONG refcount = InterlockedIncrement(&shader->baseShader.ref);
+
+ TRACE("%p increasing refcount to %u.\n", shader, refcount);
+
+ return refcount;
+}
+
+static ULONG STDMETHODCALLTYPE pixelshader_Release(IWineD3DPixelShader *iface)
+{
+ IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)iface;
+ ULONG refcount = InterlockedDecrement(&shader->baseShader.ref);
+
+ TRACE("%p decreasing refcount to %u.\n", shader, refcount);
+
+ if (!refcount)
+ {
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+ shader_chache_put(&((IWineD3DDeviceImpl*)shader->baseShader.device)->pshaderCache, (IWineD3DBaseShaderImpl*)shader);
+#else
+ shader_cleanup((IWineD3DBaseShader *)iface);
+#ifndef VBOX_WITH_VMSVGA
+ shader->baseShader.parent_ops->wined3d_object_destroyed(shader->baseShader.parent);
+#endif
+ HeapFree(GetProcessHeap(), 0, shader);
+#endif
+ }
+
+ return refcount;
+}
+
+static HRESULT STDMETHODCALLTYPE pixelshader_GetParent(IWineD3DPixelShader *iface, IUnknown **parent)
+{
+ TRACE("iface %p, parent %p.\n", iface, parent);
+
+ shader_get_parent((IWineD3DBaseShaderImpl *)iface, parent);
+
+ return WINED3D_OK;
+}
+
+static HRESULT STDMETHODCALLTYPE pixelshader_GetFunction(IWineD3DPixelShader *iface, void *data, UINT *data_size)
+{
+ TRACE("iface %p, data %p, data_size %p.\n", iface, data, data_size);
+
+ return shader_get_function((IWineD3DBaseShaderImpl *)iface, data, data_size);
+}
+
+static const IWineD3DPixelShaderVtbl IWineD3DPixelShader_Vtbl =
+{
+ /* IUnknown methods */
+ pixelshader_QueryInterface,
+ pixelshader_AddRef,
+ pixelshader_Release,
+ /* IWineD3DBase methods */
+ pixelshader_GetParent,
+ /* IWineD3DBaseShader methods */
+ pixelshader_GetFunction
+};
+
+void find_ps_compile_args(IWineD3DPixelShaderImpl *shader,
+ IWineD3DStateBlockImpl *stateblock, struct ps_compile_args *args)
+{
+ IWineD3DBaseTextureImpl *texture;
+ UINT i;
+
+ memset(args, 0, sizeof(*args)); /* FIXME: Make sure all bits are set. */
+ args->srgb_correction = stateblock->renderState[WINED3DRS_SRGBWRITEENABLE] ? 1 : 0;
+ args->np2_fixup = 0;
+ args->t_mirror = 0;
+
+ if (shader->baseShader.reg_maps.shader_version.major==1
+ && shader->baseShader.reg_maps.shader_version.minor<=3)
+ {
+ for (i=0; i<4; ++i)
+ {
+ DWORD flags = stateblock->textureState[i][WINED3DTSS_TEXTURETRANSFORMFLAGS];
+ DWORD tex_transform = flags & ~WINED3DTTFF_PROJECTED;
+ if (flags & WINED3DTTFF_PROJECTED)
+ {
+ tex_transform |= WINED3D_PSARGS_PROJECTED;
+ }
+ args->tex_transform |= tex_transform << (i*WINED3D_PSARGS_TEXTRANSFORM_SHIFT);
+ }
+ }
+
+ for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i)
+ {
+ if (!shader->baseShader.reg_maps.sampler_type[i]) continue;
+ texture = (IWineD3DBaseTextureImpl *)stateblock->textures[i];
+ if (!texture)
+ {
+ args->color_fixup[i] = COLOR_FIXUP_IDENTITY;
+ continue;
+ }
+ args->color_fixup[i] = texture->resource.format_desc->color_fixup;
+
+ /* Flag samplers that need NP2 texcoord fixup. */
+ if (!texture->baseTexture.pow2Matrix_identity)
+ {
+ args->np2_fixup |= (1 << i);
+ }
+
+ if (texture->baseTexture.t_mirror)
+ {
+ args->t_mirror |= (1 << i);
+ }
+ }
+ if (shader->baseShader.reg_maps.shader_version.major >= 3)
+ {
+ if (((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.position_transformed)
+ {
+ args->vp_mode = pretransformed;
+ }
+ else if (use_vs(stateblock))
+ {
+ args->vp_mode = vertexshader;
+ }
+ else
+ {
+ args->vp_mode = fixedfunction;
+ }
+ args->fog = FOG_OFF;
+ }
+ else
+ {
+ args->vp_mode = vertexshader;
+ if (stateblock->renderState[WINED3DRS_FOGENABLE])
+ {
+ switch (stateblock->renderState[WINED3DRS_FOGTABLEMODE])
+ {
+ case WINED3DFOG_NONE:
+ if (((IWineD3DDeviceImpl *)shader->baseShader.device)->strided_streams.position_transformed
+ || use_vs(stateblock))
+ {
+ args->fog = FOG_LINEAR;
+ break;
+ }
+
+ switch (stateblock->renderState[WINED3DRS_FOGVERTEXMODE])
+ {
+ case WINED3DFOG_NONE: RT_FALL_THRU();
+ case WINED3DFOG_LINEAR: args->fog = FOG_LINEAR; break;
+ case WINED3DFOG_EXP: args->fog = FOG_EXP; break;
+ case WINED3DFOG_EXP2: args->fog = FOG_EXP2; break;
+ }
+ break;
+
+ case WINED3DFOG_LINEAR: args->fog = FOG_LINEAR; break;
+ case WINED3DFOG_EXP: args->fog = FOG_EXP; break;
+ case WINED3DFOG_EXP2: args->fog = FOG_EXP2; break;
+ }
+ }
+ else
+ {
+ args->fog = FOG_OFF;
+ }
+ }
+}
+
+static void pixelshader_set_limits(IWineD3DPixelShaderImpl *shader)
+{
+ DWORD shader_version = WINED3D_SHADER_VERSION(shader->baseShader.reg_maps.shader_version.major,
+ shader->baseShader.reg_maps.shader_version.minor);
+
+ shader->baseShader.limits.attributes = 0;
+ shader->baseShader.limits.address = 0;
+ shader->baseShader.limits.packed_output = 0;
+
+ switch (shader_version)
+ {
+ case WINED3D_SHADER_VERSION(1, 0):
+ case WINED3D_SHADER_VERSION(1, 1):
+ case WINED3D_SHADER_VERSION(1, 2):
+ case WINED3D_SHADER_VERSION(1, 3):
+ shader->baseShader.limits.temporary = 2;
+ shader->baseShader.limits.constant_float = 8;
+ shader->baseShader.limits.constant_int = 0;
+ shader->baseShader.limits.constant_bool = 0;
+ shader->baseShader.limits.texcoord = 4;
+ shader->baseShader.limits.sampler = 4;
+ shader->baseShader.limits.packed_input = 0;
+ shader->baseShader.limits.label = 0;
+ break;
+
+ case WINED3D_SHADER_VERSION(1, 4):
+ shader->baseShader.limits.temporary = 6;
+ shader->baseShader.limits.constant_float = 8;
+ shader->baseShader.limits.constant_int = 0;
+ shader->baseShader.limits.constant_bool = 0;
+ shader->baseShader.limits.texcoord = 6;
+ shader->baseShader.limits.sampler = 6;
+ shader->baseShader.limits.packed_input = 0;
+ shader->baseShader.limits.label = 0;
+ break;
+
+ /* FIXME: Temporaries must match D3DPSHADERCAPS2_0.NumTemps. */
+ case WINED3D_SHADER_VERSION(2, 0):
+ shader->baseShader.limits.temporary = 32;
+ shader->baseShader.limits.constant_float = 32;
+ shader->baseShader.limits.constant_int = 16;
+ shader->baseShader.limits.constant_bool = 16;
+ shader->baseShader.limits.texcoord = 8;
+ shader->baseShader.limits.sampler = 16;
+ shader->baseShader.limits.packed_input = 0;
+ break;
+
+ case WINED3D_SHADER_VERSION(2, 1):
+ shader->baseShader.limits.temporary = 32;
+ shader->baseShader.limits.constant_float = 32;
+ shader->baseShader.limits.constant_int = 16;
+ shader->baseShader.limits.constant_bool = 16;
+ shader->baseShader.limits.texcoord = 8;
+ shader->baseShader.limits.sampler = 16;
+ shader->baseShader.limits.packed_input = 0;
+ shader->baseShader.limits.label = 16;
+ break;
+
+ case WINED3D_SHADER_VERSION(4, 0):
+ FIXME("Using 3.0 limits for 4.0 shader.\n");
+ RT_FALL_THRU();
+
+ case WINED3D_SHADER_VERSION(3, 0):
+ shader->baseShader.limits.temporary = 32;
+ shader->baseShader.limits.constant_float = 224;
+ shader->baseShader.limits.constant_int = 16;
+ shader->baseShader.limits.constant_bool = 16;
+ shader->baseShader.limits.texcoord = 0;
+ shader->baseShader.limits.sampler = 16;
+ shader->baseShader.limits.packed_input = 12;
+ shader->baseShader.limits.label = 16; /* FIXME: 2048 */
+ break;
+
+ default:
+ shader->baseShader.limits.temporary = 32;
+ shader->baseShader.limits.constant_float = 32;
+ shader->baseShader.limits.constant_int = 16;
+ shader->baseShader.limits.constant_bool = 16;
+ shader->baseShader.limits.texcoord = 8;
+ shader->baseShader.limits.sampler = 16;
+ shader->baseShader.limits.packed_input = 0;
+ shader->baseShader.limits.label = 0;
+ FIXME("Unrecognized pixel shader version %u.%u\n",
+ shader->baseShader.reg_maps.shader_version.major,
+ shader->baseShader.reg_maps.shader_version.minor);
+ }
+}
+
+HRESULT pixelshader_init(IWineD3DPixelShaderImpl *shader, IWineD3DDeviceImpl *device,
+ const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+ const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+ unsigned int i, highest_reg_used = 0, num_regs_used = 0;
+ HRESULT hr;
+
+ if (!byte_code) return WINED3DERR_INVALIDCALL;
+
+ shader->lpVtbl = &IWineD3DPixelShader_Vtbl;
+ shader_init(&shader->baseShader, device, parent, parent_ops);
+
+ hr = shader_set_function((IWineD3DBaseShaderImpl *)shader, byte_code,
+ output_signature, device->d3d_pshader_constantF);
+ if (FAILED(hr))
+ {
+ WARN("Failed to set function, hr %#x.\n", hr);
+ shader_cleanup((IWineD3DBaseShader *)shader);
+ return hr;
+ }
+
+ pixelshader_set_limits(shader);
+
+ for (i = 0; i < MAX_REG_INPUT; ++i)
+ {
+ if (shader->input_reg_used[i])
+ {
+ ++num_regs_used;
+ highest_reg_used = i;
+ }
+ }
+
+ /* Don't do any register mapping magic if it is not needed, or if we can't
+ * achieve anything anyway */
+ if (highest_reg_used < (gl_info->limits.glsl_varyings / 4)
+ || num_regs_used > (gl_info->limits.glsl_varyings / 4))
+ {
+ if (num_regs_used > (gl_info->limits.glsl_varyings / 4))
+ {
+ /* This happens with relative addressing. The input mapper function
+ * warns about this if the higher registers are declared too, so
+ * don't write a FIXME here */
+ WARN("More varying registers used than supported\n");
+ }
+
+ for (i = 0; i < MAX_REG_INPUT; ++i)
+ {
+ shader->input_reg_map[i] = i;
+ }
+
+ shader->declared_in_count = highest_reg_used + 1;
+ }
+ else
+ {
+ shader->declared_in_count = 0;
+ for (i = 0; i < MAX_REG_INPUT; ++i)
+ {
+ if (shader->input_reg_used[i]) shader->input_reg_map[i] = shader->declared_in_count++;
+ else shader->input_reg_map[i] = ~0U;
+ }
+ }
+
+ shader->baseShader.load_local_constsF = FALSE;
+
+ return WINED3D_OK;
+}
+
+void pixelshader_update_samplers(struct shader_reg_maps *reg_maps, IWineD3DBaseTexture * const *textures)
+{
+ WINED3DSAMPLER_TEXTURE_TYPE *sampler_type = reg_maps->sampler_type;
+ unsigned int i;
+
+ if (reg_maps->shader_version.major != 1) return;
+
+ for (i = 0; i < max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS); ++i)
+ {
+ /* We don't sample from this sampler. */
+ if (!sampler_type[i]) continue;
+
+ if (!textures[i])
+ {
+ WARN("No texture bound to sampler %u, using 2D.\n", i);
+ sampler_type[i] = WINED3DSTT_2D;
+ continue;
+ }
+
+ switch (IWineD3DBaseTexture_GetTextureDimensions(textures[i]))
+ {
+ case GL_TEXTURE_RECTANGLE_ARB:
+ case GL_TEXTURE_2D:
+ /* We have to select between texture rectangles and 2D
+ * textures later because 2.0 and 3.0 shaders only have
+ * WINED3DSTT_2D as well. */
+ sampler_type[i] = WINED3DSTT_2D;
+ break;
+
+ case GL_TEXTURE_3D:
+ sampler_type[i] = WINED3DSTT_VOLUME;
+ break;
+
+ case GL_TEXTURE_CUBE_MAP_ARB:
+ sampler_type[i] = WINED3DSTT_CUBE;
+ break;
+
+ default:
+ FIXME("Unrecognized texture type %#x, using 2D.\n",
+ IWineD3DBaseTexture_GetTextureDimensions(textures[i]));
+ sampler_type[i] = WINED3DSTT_2D;
+ }
+ }
+}
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+
+static void shader_reinit(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+ shader->ref = 1;
+ shader->device = (IWineD3DDevice *)device;
+ shader->parent = parent;
+ shader->parent_ops = parent_ops;
+#ifdef DEBUG
+ {
+ IWineD3DBaseShaderImpl *tstShader;
+ LIST_FOR_EACH_ENTRY(tstShader, &device->shaders, IWineD3DBaseShaderImpl, baseShader.shader_list_entry) {
+ if (&tstShader->baseShader == shader)
+ return;
+ }
+ ERR("shader not in list!");
+ }
+#endif
+}
+
+static DECLCALLBACK(uint32_t) shader_cache_hash(void *pvKey)
+{
+ uint32_t u32Hash, i;
+ DWORD *function;
+ IWineD3DBaseShaderImpl *pShader = (IWineD3DBaseShaderImpl *)pvKey;
+ if (pShader->baseShader.u32CacheDataInited)
+ return pShader->baseShader.u32Hash;
+
+ u32Hash = pShader->baseShader.functionLength;
+ function = pShader->baseShader.function;
+ for (i = 0; i < pShader->baseShader.functionLength / 4; ++i)
+ {
+ u32Hash += *function++;
+ }
+
+ for (i = 0; i < pShader->baseShader.functionLength % 4; ++i)
+ {
+ u32Hash += *((uint8_t*)function)++;
+ }
+
+ pShader->baseShader.u32Hash = u32Hash;
+ pShader->baseShader.u32CacheDataInited = TRUE;
+ return pShader->baseShader.u32Hash;
+}
+
+static DECLCALLBACK(bool) shader_cache_equal(void *pvKey1, void *pvKey2)
+{
+ IWineD3DBaseShaderImpl *pShader1 = (IWineD3DBaseShaderImpl *)pvKey1;
+ IWineD3DBaseShaderImpl *pShader2 = (IWineD3DBaseShaderImpl *)pvKey2;
+
+ if (pShader1 == pShader2)
+ return TRUE;
+
+ if (pShader1->baseShader.functionLength != pShader2->baseShader.functionLength)
+ return FALSE;
+
+ if (shader_cache_hash(pvKey1) != shader_cache_hash(pvKey2))
+ {
+#ifdef DEBUG_misha
+ Assert(memcmp(pShader1->baseShader.function, pShader2->baseShader.function, pShader1->baseShader.functionLength));
+#endif
+ return FALSE;
+ }
+
+ return !memcmp(pShader1->baseShader.function, pShader2->baseShader.function, pShader1->baseShader.functionLength);
+}
+
+#define VBOX_SHADER_FROM_CACHE_ENTRY(_pEntry) RT_FROM_MEMBER(RT_FROM_MEMBER((_pEntry), IWineD3DBaseShaderClass, CacheEntry), IWineD3DBaseShaderImpl, baseShader)
+
+static DECLCALLBACK(void) shader_cache_cleanup_entry(void *pvKey, struct VBOXEXT_HASHCACHE_ENTRY *pEntry)
+{
+ IWineD3DBaseShaderImpl *pShader = VBOX_SHADER_FROM_CACHE_ENTRY(pEntry);
+ shader_cleanup((IWineD3DBaseShader *)pShader);
+ if (pShader->baseShader.parent)
+ pShader->baseShader.parent_ops->wined3d_object_destroyed(pShader->baseShader.parent);
+ HeapFree(GetProcessHeap(), 0, pShader);
+}
+
+static void shader_chache_init(PVBOXEXT_HASHCACHE pCache)
+{
+ VBoxExtCacheInit(pCache, 1024, shader_cache_hash, shader_cache_equal, shader_cache_cleanup_entry);
+}
+
+static void shader_chache_term(PVBOXEXT_HASHCACHE pCache)
+{
+ VBoxExtCacheTerm(pCache);
+}
+
+static void shader_chache_put(PVBOXEXT_HASHCACHE pCache, IWineD3DBaseShaderImpl *pShader)
+{
+ if (pShader->baseShader.parent)
+ {
+ pShader->baseShader.parent_ops->wined3d_object_destroyed(pShader->baseShader.parent);
+ pShader->baseShader.parent = NULL;
+ }
+
+ VBoxExtCachePut(pCache, pShader, &pShader->baseShader.CacheEntry);
+}
+
+static IWineD3DBaseShaderImpl* shader_chache_get(PVBOXEXT_HASHCACHE pCache, IWineD3DBaseShaderImpl *pShader)
+{
+ PVBOXEXT_HASHCACHE_ENTRY pEntry = VBoxExtCacheGet(pCache, pShader);
+ IWineD3DBaseShaderImpl *pCachedShader;
+
+ if (!pEntry)
+ return pShader;
+
+ pCachedShader = VBOX_SHADER_FROM_CACHE_ENTRY(pEntry);
+ shader_reinit(&pCachedShader->baseShader, (IWineD3DDeviceImpl *)pShader->baseShader.device,
+ pShader->baseShader.parent, pShader->baseShader.parent_ops);
+ pShader->baseShader.parent = NULL;
+ /* we can not do a IWineD3DBaseShader_Release here since this would result in putting a shader to the cache */
+ shader_cleanup((IWineD3DBaseShader *)pShader);
+ HeapFree(GetProcessHeap(), 0, pShader);
+ return pCachedShader;
+}
+
+IWineD3DVertexShaderImpl * vertexshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DVertexShaderImpl *object)
+{
+ return (IWineD3DVertexShaderImpl*)shader_chache_get(&device->vshaderCache, (IWineD3DBaseShaderImpl *)object);
+}
+
+IWineD3DPixelShaderImpl * pixelshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DPixelShaderImpl *object)
+{
+ return (IWineD3DPixelShaderImpl*)shader_chache_get(&device->pshaderCache, (IWineD3DBaseShaderImpl *)object);
+}
+
+void shader_chaches_init(IWineD3DDeviceImpl *device)
+{
+ shader_chache_init(&device->vshaderCache);
+ shader_chache_init(&device->pshaderCache);
+}
+
+void shader_chaches_term(IWineD3DDeviceImpl *device)
+{
+ shader_chache_term(&device->vshaderCache);
+ shader_chache_term(&device->pshaderCache);
+}
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c b/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c
new file mode 100644
index 00000000..7964ad56
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shader_sm1.c
@@ -0,0 +1,707 @@
+/*
+ * Copyright 2002-2003 Jason Edmeades
+ * Copyright 2002-2003 Raphael Junqueira
+ * Copyright 2004 Christian Costa
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2006 Ivan Gyurdiev
+ * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+
+/* DCL usage masks */
+#define WINED3DSP_DCL_USAGE_SHIFT 0
+#define WINED3DSP_DCL_USAGE_MASK (0xf << WINED3DSP_DCL_USAGE_SHIFT)
+#define WINED3DSP_DCL_USAGEINDEX_SHIFT 16
+#define WINED3DSP_DCL_USAGEINDEX_MASK (0xf << WINED3DSP_DCL_USAGEINDEX_SHIFT)
+
+/* DCL sampler type */
+#define WINED3DSP_TEXTURETYPE_SHIFT 27
+#define WINED3DSP_TEXTURETYPE_MASK (0xf << WINED3DSP_TEXTURETYPE_SHIFT)
+
+/* Opcode-related masks */
+#define WINED3DSI_OPCODE_MASK 0x0000ffff
+
+#define WINED3D_OPCODESPECIFICCONTROL_SHIFT 16
+#define WINED3D_OPCODESPECIFICCONTROL_MASK (0xff << WINED3D_OPCODESPECIFICCONTROL_SHIFT)
+
+#define WINED3DSI_INSTLENGTH_SHIFT 24
+#define WINED3DSI_INSTLENGTH_MASK (0xf << WINED3DSI_INSTLENGTH_SHIFT)
+
+#define WINED3DSI_COISSUE (1 << 30)
+
+#define WINED3DSI_COMMENTSIZE_SHIFT 16
+#define WINED3DSI_COMMENTSIZE_MASK (0x7fff << WINED3DSI_COMMENTSIZE_SHIFT)
+
+#define WINED3DSHADER_INSTRUCTION_PREDICATED (1 << 28)
+
+/* Register number mask */
+#define WINED3DSP_REGNUM_MASK 0x000007ff
+
+/* Register type masks */
+#define WINED3DSP_REGTYPE_SHIFT 28
+#define WINED3DSP_REGTYPE_MASK (0x7 << WINED3DSP_REGTYPE_SHIFT)
+#define WINED3DSP_REGTYPE_SHIFT2 8
+#define WINED3DSP_REGTYPE_MASK2 (0x18 << WINED3DSP_REGTYPE_SHIFT2)
+
+/* Relative addressing mask */
+#define WINED3DSHADER_ADDRESSMODE_SHIFT 13
+#define WINED3DSHADER_ADDRESSMODE_MASK (1 << WINED3DSHADER_ADDRESSMODE_SHIFT)
+
+/* Destination modifier mask */
+#define WINED3DSP_DSTMOD_SHIFT 20
+#define WINED3DSP_DSTMOD_MASK (0xf << WINED3DSP_DSTMOD_SHIFT)
+
+/* Destination shift mask */
+#define WINED3DSP_DSTSHIFT_SHIFT 24
+#define WINED3DSP_DSTSHIFT_MASK (0xf << WINED3DSP_DSTSHIFT_SHIFT)
+
+/* Write mask */
+#define WINED3D_SM1_WRITEMASK_SHIFT 16
+#define WINED3D_SM1_WRITEMASK_MASK (0xf << WINED3D_SM1_WRITEMASK_SHIFT)
+
+/* Swizzle mask */
+#define WINED3DSP_SWIZZLE_SHIFT 16
+#define WINED3DSP_SWIZZLE_MASK (0xff << WINED3DSP_SWIZZLE_SHIFT)
+
+/* Source modifier mask */
+#define WINED3DSP_SRCMOD_SHIFT 24
+#define WINED3DSP_SRCMOD_MASK (0xf << WINED3DSP_SRCMOD_SHIFT)
+
+#define WINED3DSP_END 0x0000ffff
+
+#define WINED3D_SM1_VERSION_MAJOR(version) (((version) >> 8) & 0xff)
+#define WINED3D_SM1_VERSION_MINOR(version) (((version) >> 0) & 0xff)
+
+enum WINED3DSHADER_ADDRESSMODE_TYPE
+{
+ WINED3DSHADER_ADDRMODE_ABSOLUTE = 0 << WINED3DSHADER_ADDRESSMODE_SHIFT,
+ WINED3DSHADER_ADDRMODE_RELATIVE = 1 << WINED3DSHADER_ADDRESSMODE_SHIFT,
+};
+
+enum wined3d_sm1_opcode
+{
+ WINED3D_SM1_OP_NOP = 0x00,
+ WINED3D_SM1_OP_MOV = 0x01,
+ WINED3D_SM1_OP_ADD = 0x02,
+ WINED3D_SM1_OP_SUB = 0x03,
+ WINED3D_SM1_OP_MAD = 0x04,
+ WINED3D_SM1_OP_MUL = 0x05,
+ WINED3D_SM1_OP_RCP = 0x06,
+ WINED3D_SM1_OP_RSQ = 0x07,
+ WINED3D_SM1_OP_DP3 = 0x08,
+ WINED3D_SM1_OP_DP4 = 0x09,
+ WINED3D_SM1_OP_MIN = 0x0a,
+ WINED3D_SM1_OP_MAX = 0x0b,
+ WINED3D_SM1_OP_SLT = 0x0c,
+ WINED3D_SM1_OP_SGE = 0x0d,
+ WINED3D_SM1_OP_EXP = 0x0e,
+ WINED3D_SM1_OP_LOG = 0x0f,
+ WINED3D_SM1_OP_LIT = 0x10,
+ WINED3D_SM1_OP_DST = 0x11,
+ WINED3D_SM1_OP_LRP = 0x12,
+ WINED3D_SM1_OP_FRC = 0x13,
+ WINED3D_SM1_OP_M4x4 = 0x14,
+ WINED3D_SM1_OP_M4x3 = 0x15,
+ WINED3D_SM1_OP_M3x4 = 0x16,
+ WINED3D_SM1_OP_M3x3 = 0x17,
+ WINED3D_SM1_OP_M3x2 = 0x18,
+ WINED3D_SM1_OP_CALL = 0x19,
+ WINED3D_SM1_OP_CALLNZ = 0x1a,
+ WINED3D_SM1_OP_LOOP = 0x1b,
+ WINED3D_SM1_OP_RET = 0x1c,
+ WINED3D_SM1_OP_ENDLOOP = 0x1d,
+ WINED3D_SM1_OP_LABEL = 0x1e,
+ WINED3D_SM1_OP_DCL = 0x1f,
+ WINED3D_SM1_OP_POW = 0x20,
+ WINED3D_SM1_OP_CRS = 0x21,
+ WINED3D_SM1_OP_SGN = 0x22,
+ WINED3D_SM1_OP_ABS = 0x23,
+ WINED3D_SM1_OP_NRM = 0x24,
+ WINED3D_SM1_OP_SINCOS = 0x25,
+ WINED3D_SM1_OP_REP = 0x26,
+ WINED3D_SM1_OP_ENDREP = 0x27,
+ WINED3D_SM1_OP_IF = 0x28,
+ WINED3D_SM1_OP_IFC = 0x29,
+ WINED3D_SM1_OP_ELSE = 0x2a,
+ WINED3D_SM1_OP_ENDIF = 0x2b,
+ WINED3D_SM1_OP_BREAK = 0x2c,
+ WINED3D_SM1_OP_BREAKC = 0x2d,
+ WINED3D_SM1_OP_MOVA = 0x2e,
+ WINED3D_SM1_OP_DEFB = 0x2f,
+ WINED3D_SM1_OP_DEFI = 0x30,
+
+ WINED3D_SM1_OP_TEXCOORD = 0x40,
+ WINED3D_SM1_OP_TEXKILL = 0x41,
+ WINED3D_SM1_OP_TEX = 0x42,
+ WINED3D_SM1_OP_TEXBEM = 0x43,
+ WINED3D_SM1_OP_TEXBEML = 0x44,
+ WINED3D_SM1_OP_TEXREG2AR = 0x45,
+ WINED3D_SM1_OP_TEXREG2GB = 0x46,
+ WINED3D_SM1_OP_TEXM3x2PAD = 0x47,
+ WINED3D_SM1_OP_TEXM3x2TEX = 0x48,
+ WINED3D_SM1_OP_TEXM3x3PAD = 0x49,
+ WINED3D_SM1_OP_TEXM3x3TEX = 0x4a,
+ WINED3D_SM1_OP_TEXM3x3DIFF = 0x4b,
+ WINED3D_SM1_OP_TEXM3x3SPEC = 0x4c,
+ WINED3D_SM1_OP_TEXM3x3VSPEC = 0x4d,
+ WINED3D_SM1_OP_EXPP = 0x4e,
+ WINED3D_SM1_OP_LOGP = 0x4f,
+ WINED3D_SM1_OP_CND = 0x50,
+ WINED3D_SM1_OP_DEF = 0x51,
+ WINED3D_SM1_OP_TEXREG2RGB = 0x52,
+ WINED3D_SM1_OP_TEXDP3TEX = 0x53,
+ WINED3D_SM1_OP_TEXM3x2DEPTH = 0x54,
+ WINED3D_SM1_OP_TEXDP3 = 0x55,
+ WINED3D_SM1_OP_TEXM3x3 = 0x56,
+ WINED3D_SM1_OP_TEXDEPTH = 0x57,
+ WINED3D_SM1_OP_CMP = 0x58,
+ WINED3D_SM1_OP_BEM = 0x59,
+ WINED3D_SM1_OP_DP2ADD = 0x5a,
+ WINED3D_SM1_OP_DSX = 0x5b,
+ WINED3D_SM1_OP_DSY = 0x5c,
+ WINED3D_SM1_OP_TEXLDD = 0x5d,
+ WINED3D_SM1_OP_SETP = 0x5e,
+ WINED3D_SM1_OP_TEXLDL = 0x5f,
+ WINED3D_SM1_OP_BREAKP = 0x60,
+
+ WINED3D_SM1_OP_PHASE = 0xfffd,
+ WINED3D_SM1_OP_COMMENT = 0xfffe,
+ WINED3D_SM1_OP_END = 0Xffff,
+};
+
+struct wined3d_sm1_opcode_info
+{
+ enum wined3d_sm1_opcode opcode;
+ UINT dst_count;
+ UINT param_count;
+ enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ DWORD min_version;
+ DWORD max_version;
+};
+
+struct wined3d_sm1_data
+{
+ struct wined3d_shader_version shader_version;
+ const DWORD *end;
+ DWORD tokens_num;
+ const struct wined3d_sm1_opcode_info *opcode_table;
+};
+
+/* This table is not order or position dependent. */
+static const struct wined3d_sm1_opcode_info vs_opcode_table[] =
+{
+ /* Arithmetic */
+ {WINED3D_SM1_OP_NOP, 0, 0, WINED3DSIH_NOP, 0, 0 },
+ {WINED3D_SM1_OP_MOV, 1, 2, WINED3DSIH_MOV, 0, 0 },
+ {WINED3D_SM1_OP_MOVA, 1, 2, WINED3DSIH_MOVA, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_ADD, 1, 3, WINED3DSIH_ADD, 0, 0 },
+ {WINED3D_SM1_OP_SUB, 1, 3, WINED3DSIH_SUB, 0, 0 },
+ {WINED3D_SM1_OP_MAD, 1, 4, WINED3DSIH_MAD, 0, 0 },
+ {WINED3D_SM1_OP_MUL, 1, 3, WINED3DSIH_MUL, 0, 0 },
+ {WINED3D_SM1_OP_RCP, 1, 2, WINED3DSIH_RCP, 0, 0 },
+ {WINED3D_SM1_OP_RSQ, 1, 2, WINED3DSIH_RSQ, 0, 0 },
+ {WINED3D_SM1_OP_DP3, 1, 3, WINED3DSIH_DP3, 0, 0 },
+ {WINED3D_SM1_OP_DP4, 1, 3, WINED3DSIH_DP4, 0, 0 },
+ {WINED3D_SM1_OP_MIN, 1, 3, WINED3DSIH_MIN, 0, 0 },
+ {WINED3D_SM1_OP_MAX, 1, 3, WINED3DSIH_MAX, 0, 0 },
+ {WINED3D_SM1_OP_SLT, 1, 3, WINED3DSIH_SLT, 0, 0 },
+ {WINED3D_SM1_OP_SGE, 1, 3, WINED3DSIH_SGE, 0, 0 },
+ {WINED3D_SM1_OP_ABS, 1, 2, WINED3DSIH_ABS, 0, 0 },
+ {WINED3D_SM1_OP_EXP, 1, 2, WINED3DSIH_EXP, 0, 0 },
+ {WINED3D_SM1_OP_LOG, 1, 2, WINED3DSIH_LOG, 0, 0 },
+ {WINED3D_SM1_OP_EXPP, 1, 2, WINED3DSIH_EXPP, 0, 0 },
+ {WINED3D_SM1_OP_LOGP, 1, 2, WINED3DSIH_LOGP, 0, 0 },
+ {WINED3D_SM1_OP_LIT, 1, 2, WINED3DSIH_LIT, 0, 0 },
+ {WINED3D_SM1_OP_DST, 1, 3, WINED3DSIH_DST, 0, 0 },
+ {WINED3D_SM1_OP_LRP, 1, 4, WINED3DSIH_LRP, 0, 0 },
+ {WINED3D_SM1_OP_FRC, 1, 2, WINED3DSIH_FRC, 0, 0 },
+ {WINED3D_SM1_OP_POW, 1, 3, WINED3DSIH_POW, 0, 0 },
+ {WINED3D_SM1_OP_CRS, 1, 3, WINED3DSIH_CRS, 0, 0 },
+#ifdef VBOX_WITH_VMSVGA /* appears incorrect */
+ {WINED3D_SM1_OP_SGN, 1, 4, WINED3DSIH_SGN, 0, 0 },
+#else
+ {WINED3D_SM1_OP_SGN, 1, 4, WINED3DSIH_SGN, WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
+ {WINED3D_SM1_OP_SGN, 1, 2, WINED3DSIH_SGN, WINED3D_SHADER_VERSION(3,0), -1 },
+#endif
+ {WINED3D_SM1_OP_NRM, 1, 2, WINED3DSIH_NRM, 0, 0 },
+ {WINED3D_SM1_OP_SINCOS, 1, 4, WINED3DSIH_SINCOS, WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
+ {WINED3D_SM1_OP_SINCOS, 1, 2, WINED3DSIH_SINCOS, WINED3D_SHADER_VERSION(3,0), -1 },
+ /* Matrix */
+ {WINED3D_SM1_OP_M4x4, 1, 3, WINED3DSIH_M4x4, 0, 0 },
+ {WINED3D_SM1_OP_M4x3, 1, 3, WINED3DSIH_M4x3, 0, 0 },
+ {WINED3D_SM1_OP_M3x4, 1, 3, WINED3DSIH_M3x4, 0, 0 },
+ {WINED3D_SM1_OP_M3x3, 1, 3, WINED3DSIH_M3x3, 0, 0 },
+ {WINED3D_SM1_OP_M3x2, 1, 3, WINED3DSIH_M3x2, 0, 0 },
+ /* Declare registers */
+ {WINED3D_SM1_OP_DCL, 0, 2, WINED3DSIH_DCL, 0, 0 },
+ /* Constant definitions */
+ {WINED3D_SM1_OP_DEF, 1, 5, WINED3DSIH_DEF, 0, 0 },
+ {WINED3D_SM1_OP_DEFB, 1, 2, WINED3DSIH_DEFB, 0, 0 },
+ {WINED3D_SM1_OP_DEFI, 1, 5, WINED3DSIH_DEFI, 0, 0 },
+ /* Flow control */
+ {WINED3D_SM1_OP_REP, 0, 1, WINED3DSIH_REP, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_ENDREP, 0, 0, WINED3DSIH_ENDREP, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_IF, 0, 1, WINED3DSIH_IF, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_IFC, 0, 2, WINED3DSIH_IFC, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_ELSE, 0, 0, WINED3DSIH_ELSE, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_ENDIF, 0, 0, WINED3DSIH_ENDIF, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_BREAK, 0, 0, WINED3DSIH_BREAK, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_BREAKC, 0, 2, WINED3DSIH_BREAKC, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_BREAKP, 0, 1, WINED3DSIH_BREAKP, 0, 0 },
+ {WINED3D_SM1_OP_CALL, 0, 1, WINED3DSIH_CALL, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_CALLNZ, 0, 2, WINED3DSIH_CALLNZ, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_LOOP, 0, 2, WINED3DSIH_LOOP, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_RET, 0, 0, WINED3DSIH_RET, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_ENDLOOP, 0, 0, WINED3DSIH_ENDLOOP, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_LABEL, 0, 1, WINED3DSIH_LABEL, WINED3D_SHADER_VERSION(2,0), -1 },
+
+ {WINED3D_SM1_OP_SETP, 1, 3, WINED3DSIH_SETP, 0, 0 },
+ {WINED3D_SM1_OP_TEXLDL, 1, 3, WINED3DSIH_TEXLDL, WINED3D_SHADER_VERSION(3,0), -1 },
+ {0, 0, 0, WINED3DSIH_TABLE_SIZE, 0, 0 },
+};
+
+static const struct wined3d_sm1_opcode_info ps_opcode_table[] =
+{
+ /* Arithmetic */
+ {WINED3D_SM1_OP_NOP, 0, 0, WINED3DSIH_NOP, 0, 0 },
+ {WINED3D_SM1_OP_MOV, 1, 2, WINED3DSIH_MOV, 0, 0 },
+ {WINED3D_SM1_OP_ADD, 1, 3, WINED3DSIH_ADD, 0, 0 },
+ {WINED3D_SM1_OP_SUB, 1, 3, WINED3DSIH_SUB, 0, 0 },
+ {WINED3D_SM1_OP_MAD, 1, 4, WINED3DSIH_MAD, 0, 0 },
+ {WINED3D_SM1_OP_MUL, 1, 3, WINED3DSIH_MUL, 0, 0 },
+ {WINED3D_SM1_OP_RCP, 1, 2, WINED3DSIH_RCP, 0, 0 },
+ {WINED3D_SM1_OP_RSQ, 1, 2, WINED3DSIH_RSQ, 0, 0 },
+ {WINED3D_SM1_OP_DP3, 1, 3, WINED3DSIH_DP3, 0, 0 },
+ {WINED3D_SM1_OP_DP4, 1, 3, WINED3DSIH_DP4, 0, 0 },
+ {WINED3D_SM1_OP_MIN, 1, 3, WINED3DSIH_MIN, 0, 0 },
+ {WINED3D_SM1_OP_MAX, 1, 3, WINED3DSIH_MAX, 0, 0 },
+ {WINED3D_SM1_OP_SLT, 1, 3, WINED3DSIH_SLT, 0, 0 },
+ {WINED3D_SM1_OP_SGE, 1, 3, WINED3DSIH_SGE, 0, 0 },
+ {WINED3D_SM1_OP_ABS, 1, 2, WINED3DSIH_ABS, 0, 0 },
+ {WINED3D_SM1_OP_EXP, 1, 2, WINED3DSIH_EXP, 0, 0 },
+ {WINED3D_SM1_OP_LOG, 1, 2, WINED3DSIH_LOG, 0, 0 },
+ {WINED3D_SM1_OP_EXPP, 1, 2, WINED3DSIH_EXPP, 0, 0 },
+ {WINED3D_SM1_OP_LOGP, 1, 2, WINED3DSIH_LOGP, 0, 0 },
+ {WINED3D_SM1_OP_DST, 1, 3, WINED3DSIH_DST, 0, 0 },
+ {WINED3D_SM1_OP_LRP, 1, 4, WINED3DSIH_LRP, 0, 0 },
+ {WINED3D_SM1_OP_FRC, 1, 2, WINED3DSIH_FRC, 0, 0 },
+ {WINED3D_SM1_OP_CND, 1, 4, WINED3DSIH_CND, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,4)},
+ {WINED3D_SM1_OP_CMP, 1, 4, WINED3DSIH_CMP, WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(3,0)},
+ {WINED3D_SM1_OP_POW, 1, 3, WINED3DSIH_POW, 0, 0 },
+ {WINED3D_SM1_OP_CRS, 1, 3, WINED3DSIH_CRS, 0, 0 },
+ {WINED3D_SM1_OP_NRM, 1, 2, WINED3DSIH_NRM, 0, 0 },
+ {WINED3D_SM1_OP_SINCOS, 1, 4, WINED3DSIH_SINCOS, WINED3D_SHADER_VERSION(2,0), WINED3D_SHADER_VERSION(2,1)},
+ {WINED3D_SM1_OP_SINCOS, 1, 2, WINED3DSIH_SINCOS, WINED3D_SHADER_VERSION(3,0), -1 },
+ {WINED3D_SM1_OP_DP2ADD, 1, 4, WINED3DSIH_DP2ADD, WINED3D_SHADER_VERSION(2,0), -1 },
+ /* Matrix */
+ {WINED3D_SM1_OP_M4x4, 1, 3, WINED3DSIH_M4x4, 0, 0 },
+ {WINED3D_SM1_OP_M4x3, 1, 3, WINED3DSIH_M4x3, 0, 0 },
+ {WINED3D_SM1_OP_M3x4, 1, 3, WINED3DSIH_M3x4, 0, 0 },
+ {WINED3D_SM1_OP_M3x3, 1, 3, WINED3DSIH_M3x3, 0, 0 },
+ {WINED3D_SM1_OP_M3x2, 1, 3, WINED3DSIH_M3x2, 0, 0 },
+ /* Register declarations */
+ {WINED3D_SM1_OP_DCL, 0, 2, WINED3DSIH_DCL, 0, 0 },
+ /* Flow control */
+ {WINED3D_SM1_OP_REP, 0, 1, WINED3DSIH_REP, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_ENDREP, 0, 0, WINED3DSIH_ENDREP, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_IF, 0, 1, WINED3DSIH_IF, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_IFC, 0, 2, WINED3DSIH_IFC, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_ELSE, 0, 0, WINED3DSIH_ELSE, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_ENDIF, 0, 0, WINED3DSIH_ENDIF, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_BREAK, 0, 0, WINED3DSIH_BREAK, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_BREAKC, 0, 2, WINED3DSIH_BREAKC, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_BREAKP, 0, 1, WINED3DSIH_BREAKP, 0, 0 },
+ {WINED3D_SM1_OP_CALL, 0, 1, WINED3DSIH_CALL, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_CALLNZ, 0, 2, WINED3DSIH_CALLNZ, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_LOOP, 0, 2, WINED3DSIH_LOOP, WINED3D_SHADER_VERSION(3,0), -1 },
+ {WINED3D_SM1_OP_RET, 0, 0, WINED3DSIH_RET, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_ENDLOOP, 0, 0, WINED3DSIH_ENDLOOP, WINED3D_SHADER_VERSION(3,0), -1 },
+ {WINED3D_SM1_OP_LABEL, 0, 1, WINED3DSIH_LABEL, WINED3D_SHADER_VERSION(2,1), -1 },
+ /* Constant definitions */
+ {WINED3D_SM1_OP_DEF, 1, 5, WINED3DSIH_DEF, 0, 0 },
+ {WINED3D_SM1_OP_DEFB, 1, 2, WINED3DSIH_DEFB, 0, 0 },
+ {WINED3D_SM1_OP_DEFI, 1, 5, WINED3DSIH_DEFI, 0, 0 },
+ /* Texture */
+ {WINED3D_SM1_OP_TEXCOORD, 1, 1, WINED3DSIH_TEXCOORD, 0, WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXCOORD, 1, 2, WINED3DSIH_TEXCOORD, WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+ {WINED3D_SM1_OP_TEXKILL, 1, 1, WINED3DSIH_TEXKILL, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(3,0)},
+ {WINED3D_SM1_OP_TEX, 1, 1, WINED3DSIH_TEX, 0, WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEX, 1, 2, WINED3DSIH_TEX, WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+ {WINED3D_SM1_OP_TEX, 1, 3, WINED3DSIH_TEX, WINED3D_SHADER_VERSION(2,0), -1 },
+ {WINED3D_SM1_OP_TEXBEM, 1, 2, WINED3DSIH_TEXBEM, 0, WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXBEML, 1, 2, WINED3DSIH_TEXBEML, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXREG2AR, 1, 2, WINED3DSIH_TEXREG2AR, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXREG2GB, 1, 2, WINED3DSIH_TEXREG2GB, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXREG2RGB, 1, 2, WINED3DSIH_TEXREG2RGB, WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x2PAD, 1, 2, WINED3DSIH_TEXM3x2PAD, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x2TEX, 1, 2, WINED3DSIH_TEXM3x2TEX, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x3PAD, 1, 2, WINED3DSIH_TEXM3x3PAD, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x3DIFF, 1, 2, WINED3DSIH_TEXM3x3DIFF, WINED3D_SHADER_VERSION(0,0), WINED3D_SHADER_VERSION(0,0)},
+ {WINED3D_SM1_OP_TEXM3x3SPEC, 1, 3, WINED3DSIH_TEXM3x3SPEC, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x3VSPEC, 1, 2, WINED3DSIH_TEXM3x3VSPEC, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x3TEX, 1, 2, WINED3DSIH_TEXM3x3TEX, WINED3D_SHADER_VERSION(1,0), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXDP3TEX, 1, 2, WINED3DSIH_TEXDP3TEX, WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x2DEPTH, 1, 2, WINED3DSIH_TEXM3x2DEPTH, WINED3D_SHADER_VERSION(1,3), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXDP3, 1, 2, WINED3DSIH_TEXDP3, WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXM3x3, 1, 2, WINED3DSIH_TEXM3x3, WINED3D_SHADER_VERSION(1,2), WINED3D_SHADER_VERSION(1,3)},
+ {WINED3D_SM1_OP_TEXDEPTH, 1, 1, WINED3DSIH_TEXDEPTH, WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+ {WINED3D_SM1_OP_BEM, 1, 3, WINED3DSIH_BEM, WINED3D_SHADER_VERSION(1,4), WINED3D_SHADER_VERSION(1,4)},
+ {WINED3D_SM1_OP_DSX, 1, 2, WINED3DSIH_DSX, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_DSY, 1, 2, WINED3DSIH_DSY, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_TEXLDD, 1, 5, WINED3DSIH_TEXLDD, WINED3D_SHADER_VERSION(2,1), -1 },
+ {WINED3D_SM1_OP_SETP, 1, 3, WINED3DSIH_SETP, 0, 0 },
+ {WINED3D_SM1_OP_TEXLDL, 1, 3, WINED3DSIH_TEXLDL, WINED3D_SHADER_VERSION(3,0), -1 },
+ {WINED3D_SM1_OP_PHASE, 0, 0, WINED3DSIH_PHASE, 0, 0 },
+ {0, 0, 0, WINED3DSIH_TABLE_SIZE, 0, 0 },
+};
+
+/* Read a parameter opcode from the input stream,
+ * and possibly a relative addressing token.
+ * Return the number of tokens read */
+static int shader_get_param(const struct wined3d_sm1_data *priv, const DWORD *ptr, DWORD *token, DWORD *addr_token)
+{
+ UINT count = 1;
+
+ *token = *ptr;
+
+ /* PS >= 3.0 have relative addressing (with token)
+ * VS >= 2.0 have relative addressing (with token)
+ * VS >= 1.0 < 2.0 have relative addressing (without token)
+ * The version check below should work in general */
+ if (*ptr & WINED3DSHADER_ADDRMODE_RELATIVE)
+ {
+ if (priv->shader_version.major < 2)
+ {
+ *addr_token = (1 << 31)
+ | ((WINED3DSPR_ADDR << WINED3DSP_REGTYPE_SHIFT2) & WINED3DSP_REGTYPE_MASK2)
+ | ((WINED3DSPR_ADDR << WINED3DSP_REGTYPE_SHIFT) & WINED3DSP_REGTYPE_MASK)
+ | (WINED3DSP_NOSWIZZLE << WINED3DSP_SWIZZLE_SHIFT);
+ }
+ else
+ {
+ *addr_token = *(ptr + 1);
+ ++count;
+ }
+ }
+
+ return count;
+}
+
+static const struct wined3d_sm1_opcode_info *shader_get_opcode(const struct wined3d_sm1_data *priv, DWORD code)
+{
+ DWORD shader_version = WINED3D_SHADER_VERSION(priv->shader_version.major, priv->shader_version.minor);
+ const struct wined3d_sm1_opcode_info *opcode_table = priv->opcode_table;
+ DWORD i = 0;
+
+ while (opcode_table[i].handler_idx != WINED3DSIH_TABLE_SIZE)
+ {
+ if ((code & WINED3DSI_OPCODE_MASK) == (DWORD)opcode_table[i].opcode
+ && shader_version >= opcode_table[i].min_version
+ && (!opcode_table[i].max_version || shader_version <= opcode_table[i].max_version))
+ {
+ return &opcode_table[i];
+ }
+ ++i;
+ }
+
+ FIXME("Unsupported opcode %#x(%d) masked %#x, shader version %#x\n",
+ code, code, code & WINED3DSI_OPCODE_MASK, shader_version);
+
+ return NULL;
+}
+
+/* Return the number of parameters to skip for an opcode */
+static int shader_skip_opcode(const struct wined3d_sm1_data *priv,
+ const struct wined3d_sm1_opcode_info *opcode_info, DWORD opcode_token)
+{
+ /* Shaders >= 2.0 may contain address tokens, but fortunately they
+ * have a useful length mask - use it here. Shaders 1.0 contain no such tokens */
+ return (priv->shader_version.major >= 2)
+ ? ((opcode_token & WINED3DSI_INSTLENGTH_MASK) >> WINED3DSI_INSTLENGTH_SHIFT) : opcode_info->param_count;
+}
+
+static void shader_parse_src_param(DWORD param, const struct wined3d_shader_src_param *rel_addr,
+ struct wined3d_shader_src_param *src)
+{
+ src->reg.type = ((param & WINED3DSP_REGTYPE_MASK) >> WINED3DSP_REGTYPE_SHIFT)
+ | ((param & WINED3DSP_REGTYPE_MASK2) >> WINED3DSP_REGTYPE_SHIFT2);
+ src->reg.idx = param & WINED3DSP_REGNUM_MASK;
+ src->reg.array_idx = ~0U;
+ src->swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT;
+ src->modifiers = (param & WINED3DSP_SRCMOD_MASK) >> WINED3DSP_SRCMOD_SHIFT;
+ src->reg.rel_addr = rel_addr;
+}
+
+static void shader_parse_dst_param(DWORD param, const struct wined3d_shader_src_param *rel_addr,
+ struct wined3d_shader_dst_param *dst)
+{
+ dst->reg.type = ((param & WINED3DSP_REGTYPE_MASK) >> WINED3DSP_REGTYPE_SHIFT)
+ | ((param & WINED3DSP_REGTYPE_MASK2) >> WINED3DSP_REGTYPE_SHIFT2);
+ dst->reg.idx = param & WINED3DSP_REGNUM_MASK;
+ dst->reg.array_idx = ~0U;
+ dst->write_mask = (param & WINED3D_SM1_WRITEMASK_MASK) >> WINED3D_SM1_WRITEMASK_SHIFT;
+ dst->modifiers = (param & WINED3DSP_DSTMOD_MASK) >> WINED3DSP_DSTMOD_SHIFT;
+ dst->shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT;
+ dst->reg.rel_addr = rel_addr;
+}
+
+/* Read the parameters of an unrecognized opcode from the input stream
+ * Return the number of tokens read.
+ *
+ * Note: This function assumes source or destination token format.
+ * It will not work with specially-formatted tokens like DEF or DCL,
+ * but hopefully those would be recognized */
+static int shader_skip_unrecognized(const struct wined3d_sm1_data *priv, const DWORD *ptr)
+{
+ int tokens_read = 0;
+ int i = 0;
+
+ /* TODO: Think of a good name for 0x80000000 and replace it with a constant */
+ while (*ptr & 0x80000000)
+ {
+ DWORD token, addr_token = 0;
+ struct wined3d_shader_src_param rel_addr;
+
+ tokens_read += shader_get_param(priv, ptr, &token, &addr_token);
+ ptr += tokens_read;
+
+ FIXME("Unrecognized opcode param: token=0x%08x addr_token=0x%08x name=", token, addr_token);
+
+ if (token & WINED3DSHADER_ADDRMODE_RELATIVE) shader_parse_src_param(addr_token, NULL, &rel_addr);
+
+ if (!i)
+ {
+ struct wined3d_shader_dst_param dst;
+
+ shader_parse_dst_param(token, token & WINED3DSHADER_ADDRMODE_RELATIVE ? &rel_addr : NULL, &dst);
+ shader_dump_dst_param(&dst, &priv->shader_version);
+ }
+ else
+ {
+ struct wined3d_shader_src_param src;
+
+ shader_parse_src_param(token, token & WINED3DSHADER_ADDRMODE_RELATIVE ? &rel_addr : NULL, &src);
+ shader_dump_src_param(&src, &priv->shader_version);
+ }
+ FIXME("\n");
+ ++i;
+ }
+ return tokens_read;
+}
+
+static void *shader_sm1_init(const DWORD *byte_code, DWORD tokens_num, const struct wined3d_shader_signature *output_signature)
+{
+ struct wined3d_sm1_data *priv;
+ BYTE major, minor;
+
+ major = WINED3D_SM1_VERSION_MAJOR(*byte_code);
+ minor = WINED3D_SM1_VERSION_MINOR(*byte_code);
+ if (WINED3D_SHADER_VERSION(major, minor) > WINED3D_SHADER_VERSION(3, 0))
+ {
+ WARN("Invalid shader version %u.%u (%#x).\n", major, minor, *byte_code);
+ return NULL;
+ }
+
+ priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
+ if (!priv)
+ {
+ ERR("Failed to allocate private data\n");
+ return NULL;
+ }
+
+ priv->end = NULL;
+ priv->tokens_num = tokens_num;
+
+ if (output_signature)
+ {
+ FIXME("SM 1-3 shader shouldn't have output signatures.\n");
+ }
+
+ switch (*byte_code >> 16)
+ {
+ case WINED3D_SM1_VS:
+ priv->shader_version.type = WINED3D_SHADER_TYPE_VERTEX;
+ priv->opcode_table = vs_opcode_table;
+ break;
+
+ case WINED3D_SM1_PS:
+ priv->shader_version.type = WINED3D_SHADER_TYPE_PIXEL;
+ priv->opcode_table = ps_opcode_table;
+ break;
+
+ default:
+ FIXME("Unrecognized shader type %#x\n", *byte_code >> 16);
+ HeapFree(GetProcessHeap(), 0, priv);
+ return NULL;
+ }
+
+ return priv;
+}
+
+static void shader_sm1_free(void *data)
+{
+ HeapFree(GetProcessHeap(), 0, data);
+}
+
+static void shader_sm1_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
+{
+ struct wined3d_sm1_data *priv = data;
+ DWORD version_token;
+
+ priv->end = *ptr + priv->tokens_num;
+
+ version_token = *(*ptr)++;
+ TRACE("version: 0x%08x\n", version_token);
+
+ priv->shader_version.major = WINED3D_SM1_VERSION_MAJOR(version_token);
+ priv->shader_version.minor = WINED3D_SM1_VERSION_MINOR(version_token);
+ *shader_version = priv->shader_version;
+}
+
+static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
+ UINT *param_size)
+{
+ struct wined3d_sm1_data *priv = data;
+ const struct wined3d_sm1_opcode_info *opcode_info;
+ DWORD opcode_token;
+
+ opcode_token = *(*ptr)++;
+ opcode_info = shader_get_opcode(priv, opcode_token);
+ if (!opcode_info)
+ {
+ FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token);
+ ins->handler_idx = WINED3DSIH_TABLE_SIZE;
+ *param_size = shader_skip_unrecognized(priv, *ptr);
+ return;
+ }
+
+ ins->handler_idx = opcode_info->handler_idx;
+ ins->flags = (opcode_token & WINED3D_OPCODESPECIFICCONTROL_MASK) >> WINED3D_OPCODESPECIFICCONTROL_SHIFT;
+ ins->coissue = opcode_token & WINED3DSI_COISSUE;
+ ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED;
+ ins->dst_count = opcode_info->dst_count ? 1 : 0;
+ ins->src_count = opcode_info->param_count - opcode_info->dst_count;
+ *param_size = shader_skip_opcode(priv, opcode_info, opcode_token);
+}
+
+static void shader_sm1_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+ struct wined3d_shader_src_param *src_rel_addr)
+{
+ struct wined3d_sm1_data *priv = data;
+ DWORD token, addr_token;
+
+ *ptr += shader_get_param(priv, *ptr, &token, &addr_token);
+ if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
+ {
+ shader_parse_src_param(addr_token, NULL, src_rel_addr);
+ shader_parse_src_param(token, src_rel_addr, src_param);
+ }
+ else
+ {
+ shader_parse_src_param(token, NULL, src_param);
+ }
+}
+
+static void shader_sm1_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+ struct wined3d_shader_src_param *dst_rel_addr)
+{
+ struct wined3d_sm1_data *priv = data;
+ DWORD token, addr_token;
+
+ *ptr += shader_get_param(priv, *ptr, &token, &addr_token);
+ if (token & WINED3DSHADER_ADDRMODE_RELATIVE)
+ {
+ shader_parse_src_param(addr_token, NULL, dst_rel_addr);
+ shader_parse_dst_param(token, dst_rel_addr, dst_param);
+ }
+ else
+ {
+ shader_parse_dst_param(token, NULL, dst_param);
+ }
+}
+
+static void shader_sm1_read_semantic(const DWORD **ptr, struct wined3d_shader_semantic *semantic)
+{
+ DWORD usage_token = *(*ptr)++;
+ DWORD dst_token = *(*ptr)++;
+
+ semantic->usage = (usage_token & WINED3DSP_DCL_USAGE_MASK) >> WINED3DSP_DCL_USAGE_SHIFT;
+ semantic->usage_idx = (usage_token & WINED3DSP_DCL_USAGEINDEX_MASK) >> WINED3DSP_DCL_USAGEINDEX_SHIFT;
+ semantic->sampler_type = (usage_token & WINED3DSP_TEXTURETYPE_MASK) >> WINED3DSP_TEXTURETYPE_SHIFT;
+ shader_parse_dst_param(dst_token, NULL, &semantic->reg);
+}
+
+static void shader_sm1_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size)
+{
+ DWORD token = **ptr;
+ UINT size;
+
+ if ((token & WINED3DSI_OPCODE_MASK) != WINED3D_SM1_OP_COMMENT)
+ {
+ *comment = NULL;
+ return;
+ }
+
+ size = (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT;
+ *comment = (const char *)++(*ptr);
+ *comment_size = size * sizeof(DWORD);
+ *ptr += size;
+}
+
+static BOOL shader_sm1_is_end(void *data, const DWORD **ptr)
+{
+ struct wined3d_sm1_data *priv = data;
+
+ if (**ptr == WINED3DSP_END)
+ {
+ ++(*ptr);
+ return TRUE;
+ }
+
+ AssertMsgReturn(*ptr < priv->end, ("End-of-bytecode token is missing"), TRUE);
+
+ return FALSE;
+}
+
+const struct wined3d_shader_frontend sm1_shader_frontend =
+{
+ shader_sm1_init,
+ shader_sm1_free,
+ shader_sm1_read_header,
+ shader_sm1_read_opcode,
+ shader_sm1_read_src_param,
+ shader_sm1_read_dst_param,
+ shader_sm1_read_semantic,
+ shader_sm1_read_comment,
+ shader_sm1_is_end,
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c b/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c
new file mode 100644
index 00000000..3e5a5cb6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shader_sm4.c
@@ -0,0 +1,444 @@
+/*
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+
+#define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT 24
+#define WINED3D_SM4_INSTRUCTION_LENGTH_MASK (0xf << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT)
+
+#define WINED3D_SM4_OPCODE_MASK 0xff
+
+#define WINED3D_SM4_REGISTER_ORDER_SHIFT 20
+#define WINED3D_SM4_REGISTER_ORDER_MASK (0x3 << WINED3D_SM4_REGISTER_ORDER_SHIFT)
+
+#define WINED3D_SM4_REGISTER_TYPE_SHIFT 12
+#define WINED3D_SM4_REGISTER_TYPE_MASK (0xf << WINED3D_SM4_REGISTER_TYPE_SHIFT)
+
+#define WINED3D_SM4_IMMCONST_TYPE_SHIFT 0
+#define WINED3D_SM4_IMMCONST_TYPE_MASK (0x3 << WINED3D_SM4_IMMCONST_TYPE_SHIFT)
+
+#define WINED3D_SM4_WRITEMASK_SHIFT 4
+#define WINED3D_SM4_WRITEMASK_MASK (0xf << WINED3D_SM4_WRITEMASK_SHIFT)
+
+#define WINED3D_SM4_SWIZZLE_SHIFT 4
+#define WINED3D_SM4_SWIZZLE_MASK (0xff << WINED3D_SM4_SWIZZLE_SHIFT)
+
+#define WINED3D_SM4_VERSION_MAJOR(version) (((version) >> 4) & 0xf)
+#define WINED3D_SM4_VERSION_MINOR(version) (((version) >> 0) & 0xf)
+
+enum wined3d_sm4_opcode
+{
+ WINED3D_SM4_OP_ADD = 0x00,
+ WINED3D_SM4_OP_BREAK = 0x02,
+ WINED3D_SM4_OP_BREAKC = 0x03,
+ WINED3D_SM4_OP_CUT = 0x09,
+ WINED3D_SM4_OP_DP3 = 0x10,
+ WINED3D_SM4_OP_DP4 = 0x11,
+ WINED3D_SM4_OP_EMIT = 0x13,
+ WINED3D_SM4_OP_ENDIF = 0x15,
+ WINED3D_SM4_OP_ENDLOOP = 0x16,
+ WINED3D_SM4_OP_EXP = 0x19,
+ WINED3D_SM4_OP_IADD = 0x1e,
+ WINED3D_SM4_OP_IF = 0x1f,
+ WINED3D_SM4_OP_IGE = 0x21,
+ WINED3D_SM4_OP_LOG = 0x2f,
+ WINED3D_SM4_OP_LT = 0x31,
+ WINED3D_SM4_OP_MIN = 0x33,
+ WINED3D_SM4_OP_MAX = 0x34,
+ WINED3D_SM4_OP_MOV = 0x36,
+ WINED3D_SM4_OP_MUL = 0x38,
+ WINED3D_SM4_OP_RET = 0x3e,
+ WINED3D_SM4_OP_RSQ = 0x44,
+ WINED3D_SM4_OP_SINCOS = 0x4d,
+};
+
+enum wined3d_sm4_register_type
+{
+ WINED3D_SM4_RT_TEMP = 0x0,
+ WINED3D_SM4_RT_INPUT = 0x1,
+ WINED3D_SM4_RT_OUTPUT = 0x2,
+ WINED3D_SM4_RT_IMMCONST = 0x4,
+ WINED3D_SM4_RT_CONSTBUFFER = 0x8,
+};
+
+enum wined3d_sm4_immconst_type
+{
+ WINED3D_SM4_IMMCONST_FLOAT = 0x1,
+ WINED3D_SM4_IMMCONST_FLOAT4 = 0x2,
+};
+
+struct wined3d_sm4_data
+{
+ struct wined3d_shader_version shader_version;
+ const DWORD *end;
+ DWORD tokens_num;
+ const struct wined3d_shader_signature *output_signature;
+};
+
+struct wined3d_sm4_opcode_info
+{
+ enum wined3d_sm4_opcode opcode;
+ enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ UINT dst_count;
+ UINT src_count;
+};
+
+struct sysval_map
+{
+ enum wined3d_sysval_semantic sysval;
+ WINED3DSHADER_PARAM_REGISTER_TYPE register_type;
+ UINT register_idx;
+};
+
+static const struct wined3d_sm4_opcode_info opcode_table[] =
+{
+ {WINED3D_SM4_OP_ADD, WINED3DSIH_ADD, 1, 2},
+ {WINED3D_SM4_OP_BREAK, WINED3DSIH_BREAK, 0, 0},
+ {WINED3D_SM4_OP_BREAKC, WINED3DSIH_BREAKP, 0, 1},
+ {WINED3D_SM4_OP_CUT, WINED3DSIH_CUT, 0, 0},
+ {WINED3D_SM4_OP_DP3, WINED3DSIH_DP3, 1, 2},
+ {WINED3D_SM4_OP_DP4, WINED3DSIH_DP4, 1, 2},
+ {WINED3D_SM4_OP_EMIT, WINED3DSIH_EMIT, 0, 0},
+ {WINED3D_SM4_OP_ENDIF, WINED3DSIH_ENDIF, 0, 0},
+ {WINED3D_SM4_OP_ENDLOOP,WINED3DSIH_ENDLOOP, 0, 0},
+ {WINED3D_SM4_OP_EXP, WINED3DSIH_EXP, 1, 1},
+ {WINED3D_SM4_OP_IADD, WINED3DSIH_IADD, 1, 2},
+ {WINED3D_SM4_OP_IF, WINED3DSIH_IF, 0, 1},
+ {WINED3D_SM4_OP_IGE, WINED3DSIH_IGE, 1, 2},
+ {WINED3D_SM4_OP_LOG, WINED3DSIH_LOG, 1, 1},
+ {WINED3D_SM4_OP_LT, WINED3DSIH_LT, 1, 2},
+ {WINED3D_SM4_OP_MIN, WINED3DSIH_MIN, 1, 2},
+ {WINED3D_SM4_OP_MAX, WINED3DSIH_MAX, 1, 2},
+ {WINED3D_SM4_OP_MOV, WINED3DSIH_MOV, 1, 1},
+ {WINED3D_SM4_OP_MUL, WINED3DSIH_MUL, 1, 2},
+ {WINED3D_SM4_OP_RET, WINED3DSIH_RET, 0, 0},
+ {WINED3D_SM4_OP_RSQ, WINED3DSIH_RSQ, 1, 1},
+ {WINED3D_SM4_OP_SINCOS, WINED3DSIH_SINCOS, 1, 2},
+};
+
+static const WINED3DSHADER_PARAM_REGISTER_TYPE register_type_table[] =
+{
+ /* WINED3D_SM4_RT_TEMP */ WINED3DSPR_TEMP,
+ /* WINED3D_SM4_RT_INPUT */ WINED3DSPR_INPUT,
+ /* WINED3D_SM4_RT_OUTPUT */ WINED3DSPR_OUTPUT,
+ /* UNKNOWN */ 0,
+ /* WINED3D_SM4_RT_IMMCONST */ WINED3DSPR_IMMCONST,
+ /* UNKNOWN */ 0,
+ /* UNKNOWN */ 0,
+ /* UNKNOWN */ 0,
+ /* WINED3D_SM4_RT_CONSTBUFFER */ WINED3DSPR_CONSTBUFFER,
+};
+
+static const struct sysval_map sysval_map[] =
+{
+ {WINED3D_SV_DEPTH, WINED3DSPR_DEPTHOUT, 0},
+ {WINED3D_SV_TARGET0, WINED3DSPR_COLOROUT, 0},
+ {WINED3D_SV_TARGET1, WINED3DSPR_COLOROUT, 1},
+ {WINED3D_SV_TARGET2, WINED3DSPR_COLOROUT, 2},
+ {WINED3D_SV_TARGET3, WINED3DSPR_COLOROUT, 3},
+ {WINED3D_SV_TARGET4, WINED3DSPR_COLOROUT, 4},
+ {WINED3D_SV_TARGET5, WINED3DSPR_COLOROUT, 5},
+ {WINED3D_SV_TARGET6, WINED3DSPR_COLOROUT, 6},
+ {WINED3D_SV_TARGET7, WINED3DSPR_COLOROUT, 7},
+};
+
+static const struct wined3d_sm4_opcode_info *get_opcode_info(enum wined3d_sm4_opcode opcode)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof(opcode_table) / sizeof(*opcode_table); ++i)
+ {
+ if (opcode == opcode_table[i].opcode) return &opcode_table[i];
+ }
+
+ return NULL;
+}
+
+static void map_sysval(enum wined3d_sysval_semantic sysval, struct wined3d_shader_register *reg)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof(sysval_map) / sizeof(*sysval_map); ++i)
+ {
+ if (sysval == sysval_map[i].sysval)
+ {
+ reg->type = sysval_map[i].register_type;
+ reg->idx = sysval_map[i].register_idx;
+ }
+ }
+}
+
+static void map_register(struct wined3d_sm4_data *priv, struct wined3d_shader_register *reg)
+{
+ switch (priv->shader_version.type)
+ {
+ case WINED3D_SHADER_TYPE_PIXEL:
+ if (reg->type == WINED3DSPR_OUTPUT)
+ {
+ unsigned int i;
+ const struct wined3d_shader_signature *s = priv->output_signature;
+
+ if (!s)
+ {
+ ERR("Shader has no output signature, unable to map register.\n");
+ break;
+ }
+
+ for (i = 0; i < s->element_count; ++i)
+ {
+ if (s->elements[i].register_idx == reg->idx)
+ {
+ map_sysval(s->elements[i].sysval_semantic, reg);
+ break;
+ }
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void *shader_sm4_init(const DWORD *byte_code, DWORD tokens_num, const struct wined3d_shader_signature *output_signature)
+{
+ struct wined3d_sm4_data *priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv));
+ if (!priv)
+ {
+ ERR("Failed to allocate private data\n");
+ return NULL;
+ }
+
+ priv->end = NULL;
+ priv->tokens_num = tokens_num;
+ priv->output_signature = output_signature;
+
+ return priv;
+}
+
+static void shader_sm4_free(void *data)
+{
+ HeapFree(GetProcessHeap(), 0, data);
+}
+
+static void shader_sm4_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version)
+{
+ struct wined3d_sm4_data *priv = data;
+ DWORD version_token;
+
+ priv->end = *ptr;
+
+ version_token = *(*ptr)++;
+ TRACE("version: 0x%08x\n", version_token);
+
+ TRACE("token count: %u\n", **ptr);
+ priv->end += *(*ptr)++;
+
+ switch (version_token >> 16)
+ {
+ case WINED3D_SM4_PS:
+ priv->shader_version.type = WINED3D_SHADER_TYPE_PIXEL;
+ break;
+
+ case WINED3D_SM4_VS:
+ priv->shader_version.type = WINED3D_SHADER_TYPE_VERTEX;
+ break;
+
+ case WINED3D_SM4_GS:
+ priv->shader_version.type = WINED3D_SHADER_TYPE_GEOMETRY;
+ break;
+
+ default:
+ FIXME("Unrecognized shader type %#x\n", version_token >> 16);
+ }
+ priv->shader_version.major = WINED3D_SM4_VERSION_MAJOR(version_token);
+ priv->shader_version.minor = WINED3D_SM4_VERSION_MINOR(version_token);
+
+ *shader_version = priv->shader_version;
+}
+
+static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins,
+ UINT *param_size)
+{
+ const struct wined3d_sm4_opcode_info *opcode_info;
+ DWORD token = *(*ptr)++;
+ DWORD opcode = token & WINED3D_SM4_OPCODE_MASK;
+
+ *param_size = ((token & WINED3D_SM4_INSTRUCTION_LENGTH_MASK) >> WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT) - 1;
+
+ opcode_info = get_opcode_info(opcode);
+ if (!opcode_info)
+ {
+ FIXME("Unrecognized opcode %#x, token 0x%08x\n", opcode, token);
+ ins->handler_idx = WINED3DSIH_TABLE_SIZE;
+ return;
+ }
+
+ ins->handler_idx = opcode_info->handler_idx;
+ ins->flags = 0;
+ ins->coissue = 0;
+ ins->predicate = 0;
+ ins->dst_count = opcode_info->dst_count;
+ ins->src_count = opcode_info->src_count;
+}
+
+static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+ struct wined3d_shader_src_param *src_rel_addr)
+{
+ struct wined3d_sm4_data *priv = data;
+ DWORD token = *(*ptr)++;
+ enum wined3d_sm4_register_type register_type;
+ DWORD order;
+
+ register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT;
+ if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table))
+ {
+ FIXME("Unhandled register type %#x\n", register_type);
+ src_param->reg.type = WINED3DSPR_TEMP;
+ }
+ else
+ {
+ src_param->reg.type = register_type_table[register_type];
+ }
+
+ order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
+
+ if (order < 1) src_param->reg.idx = ~0U;
+ else src_param->reg.idx = *(*ptr)++;
+
+ if (order < 2) src_param->reg.array_idx = ~0U;
+ else src_param->reg.array_idx = *(*ptr)++;
+
+ if (order > 2) FIXME("Unhandled order %u.\n", order);
+
+ if (register_type == WINED3D_SM4_RT_IMMCONST)
+ {
+ enum wined3d_sm4_immconst_type immconst_type =
+ (token & WINED3D_SM4_IMMCONST_TYPE_MASK) >> WINED3D_SM4_IMMCONST_TYPE_SHIFT;
+ src_param->swizzle = WINED3DSP_NOSWIZZLE;
+
+ switch(immconst_type)
+ {
+ case WINED3D_SM4_IMMCONST_FLOAT:
+ src_param->reg.immconst_type = WINED3D_IMMCONST_FLOAT;
+ memcpy(src_param->reg.immconst_data, *ptr, 1 * sizeof(DWORD));
+ *ptr += 1;
+ break;
+
+ case WINED3D_SM4_IMMCONST_FLOAT4:
+ src_param->reg.immconst_type = WINED3D_IMMCONST_FLOAT4;
+ memcpy(src_param->reg.immconst_data, *ptr, 4 * sizeof(DWORD));
+ *ptr += 4;
+ break;
+
+ default:
+ FIXME("Unhandled immediate constant type %#x\n", immconst_type);
+ break;
+ }
+ }
+ else
+ {
+ src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT;
+ }
+
+ src_param->modifiers = 0;
+ src_param->reg.rel_addr = NULL;
+
+ map_register(priv, &src_param->reg);
+}
+
+static void shader_sm4_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+ struct wined3d_shader_src_param *dst_rel_addr)
+{
+ struct wined3d_sm4_data *priv = data;
+ DWORD token = *(*ptr)++;
+ enum wined3d_sm4_register_type register_type;
+ DWORD order;
+
+ register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT;
+ if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table))
+ {
+ FIXME("Unhandled register type %#x\n", register_type);
+ dst_param->reg.type = WINED3DSPR_TEMP;
+ }
+ else
+ {
+ dst_param->reg.type = register_type_table[register_type];
+ }
+
+ order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT;
+
+ if (order < 1) dst_param->reg.idx = ~0U;
+ else dst_param->reg.idx = *(*ptr)++;
+
+ if (order < 2) dst_param->reg.array_idx = ~0U;
+ else dst_param->reg.array_idx = *(*ptr)++;
+
+ if (order > 2) FIXME("Unhandled order %u.\n", order);
+
+ dst_param->write_mask = (token & WINED3D_SM4_WRITEMASK_MASK) >> WINED3D_SM4_WRITEMASK_SHIFT;
+ dst_param->modifiers = 0;
+ dst_param->shift = 0;
+ dst_param->reg.rel_addr = NULL;
+
+ map_register(priv, &dst_param->reg);
+}
+
+static void shader_sm4_read_semantic(const DWORD **ptr, struct wined3d_shader_semantic *semantic)
+{
+ FIXME("ptr %p, semantic %p stub!\n", ptr, semantic);
+}
+
+static void shader_sm4_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size)
+{
+ FIXME("ptr %p, comment %p, comment_size %p stub!\n", ptr, comment, comment_size);
+ *comment = NULL;
+}
+
+static BOOL shader_sm4_is_end(void *data, const DWORD **ptr)
+{
+ struct wined3d_sm4_data *priv = data;
+ return *ptr >= priv->end;
+}
+
+const struct wined3d_shader_frontend sm4_shader_frontend =
+{
+ shader_sm4_init,
+ shader_sm4_free,
+ shader_sm4_read_header,
+ shader_sm4_read_opcode,
+ shader_sm4_read_src_param,
+ shader_sm4_read_dst_param,
+ shader_sm4_read_semantic,
+ shader_sm4_read_comment,
+ shader_sm4_is_end,
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderapi.c b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
new file mode 100644
index 00000000..c11e383d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
@@ -0,0 +1,804 @@
+/* $Id: shaderapi.c $ */
+/** @file
+ * shaderlib -- interface to WINE's Direct3D shader functions
+ */
+
+/*
+ * Copyright (C) 2014-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#include <iprt/errcore.h>
+#include <iprt/mem.h>
+#include <iprt/assert.h>
+#include <iprt/log.h>
+#define WINED3D_EXTERN
+#include "wined3d_private.h"
+
+#include "shaderlib.h"
+
+#ifdef RT_OS_WINDOWS
+# define OGLGETPROCADDRESS wglGetProcAddress
+
+#elif RT_OS_DARWIN
+# include <dlfcn.h>
+# define OGLGETPROCADDRESS(x) MyNSGLGetProcAddress((const char *)x)
+void *MyNSGLGetProcAddress(const char *pszSymbol)
+{
+ /* Another copy in DevVGA-SVGA3d-ogl.cpp. */
+ static void *s_pvImage = NULL;
+ if (s_pvImage == NULL)
+ s_pvImage = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY);
+ return s_pvImage ? dlsym(s_pvImage, pszSymbol) : NULL;
+}
+
+#else
+extern void (*glXGetProcAddress(const GLubyte *procname))( void );
+# define OGLGETPROCADDRESS(x) glXGetProcAddress((const GLubyte *)x)
+
+#endif
+
+#undef GL_EXT_FUNCS_GEN
+#define GL_EXT_FUNCS_GEN \
+ /* GL_ARB_shader_objects */ \
+ USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, \
+ glGetObjectParameterivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC, \
+ glGetObjectParameterfvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC, \
+ glGetUniformLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETACTIVEUNIFORMARBPROC, \
+ glGetActiveUniformARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, \
+ glUniform1iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IARBPROC, \
+ glUniform2iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IARBPROC, \
+ glUniform3iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IARBPROC, \
+ glUniform4iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FARBPROC, \
+ glUniform1fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FARBPROC, \
+ glUniform2fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FARBPROC, \
+ glUniform3fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FARBPROC, \
+ glUniform4fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FVARBPROC, \
+ glUniform1fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FVARBPROC, \
+ glUniform2fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FVARBPROC, \
+ glUniform3fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FVARBPROC, \
+ glUniform4fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IVARBPROC, \
+ glUniform1ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IVARBPROC, \
+ glUniform2ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IVARBPROC, \
+ glUniform3ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IVARBPROC, \
+ glUniform4ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC, \
+ glUniformMatrix2fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC, \
+ glUniformMatrix3fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC, \
+ glUniformMatrix4fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMFVARBPROC, \
+ glGetUniformfvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMIVARBPROC, \
+ glGetUniformivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETINFOLOGARBPROC, \
+ glGetInfoLogARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC, \
+ glUseProgramObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCREATESHADEROBJECTARBPROC, \
+ glCreateShaderObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLSHADERSOURCEARBPROC, \
+ glShaderSourceARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCOMPILESHADERARBPROC, \
+ glCompileShaderARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC, \
+ glCreateProgramObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLATTACHOBJECTARBPROC, \
+ glAttachObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLLINKPROGRAMARBPROC, \
+ glLinkProgramARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLDETACHOBJECTARBPROC, \
+ glDetachObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLDELETEOBJECTARBPROC, \
+ glDeleteObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLVALIDATEPROGRAMARBPROC, \
+ glValidateProgramARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC, \
+ glGetAttachedObjectsARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETHANDLEARBPROC, \
+ glGetHandleARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETSHADERSOURCEARBPROC, \
+ glGetShaderSourceARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC, \
+ glBindAttribLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETATTRIBLOCATIONARBPROC, \
+ glGetAttribLocationARB, ARB_SHADER_OBJECTS, NULL) \
+
+static struct wined3d_context *g_pCurrentContext = NULL;
+static struct wined3d_adapter g_adapter = {0};
+static bool g_fInitializedLibrary = false;
+
+#define SHADER_SET_CURRENT_CONTEXT(ctx) \
+ g_pCurrentContext = (struct wined3d_context *)ctx;
+
+SHADERDECL(int) ShaderInitLib(PVBOXVMSVGASHADERIF pVBoxShaderIf)
+{
+ struct wined3d_gl_info *gl_info = &g_adapter.gl_info;
+
+ /* Dynamically load all GL core functions. */
+#ifdef RT_OS_WINDOWS
+ HANDLE hOpenGl32 = GetModuleHandle("opengl32.dll");
+# define USE_GL_FUNC(pfn) *(FARPROC *)(&pfn) = GetProcAddress(hOpenGl32, #pfn);
+#else
+# define USE_GL_FUNC(pfn) pfn = (void *)OGLGETPROCADDRESS(#pfn);
+#endif
+ GL_FUNCS_GEN;
+#undef USE_GL_FUNC
+
+ /* Dynamically load all GL extension functions. */
+#define USE_GL_FUNC(type, pfn, ext, replace) \
+{ \
+ gl_info->pfn = (type)OGLGETPROCADDRESS(#pfn); \
+}
+ GL_EXT_FUNCS_GEN;
+
+ /* Fill in GL capabilities. */
+ IWineD3DImpl_FillGLCaps(&g_adapter, pVBoxShaderIf);
+
+ LogRel(("shaderlib: GL Limits:\n"));
+ LogRel(("shaderlib: buffers=%-2u lights=%-2u textures=%-2u texture_stages=%u\n",
+ gl_info->limits.buffers, gl_info->limits.lights, gl_info->limits.textures, gl_info->limits.texture_stages));
+ LogRel(("shaderlib: fragment_samplers=%-2u vertex_samplers=%-2u combined_samplers=%-3u general_combiners=%u\n",
+ gl_info->limits.fragment_samplers, gl_info->limits.vertex_samplers, gl_info->limits.combined_samplers, gl_info->limits.general_combiners));
+ LogRel(("shaderlib: sampler_stages=%-2u clipplanes=%-2u texture_size=%-5u texture3d_size=%u\n",
+ gl_info->limits.sampler_stages, gl_info->limits.clipplanes, gl_info->limits.texture_size, gl_info->limits.texture3d_size));
+ LogRel(("shaderlib: pointsize_max=%d.%d pointsize_min=%d.%d point_sprite_units=%-2u blends=%u\n",
+ (int)gl_info->limits.pointsize_max, (int)(gl_info->limits.pointsize_max * 10) % 10,
+ (int)gl_info->limits.pointsize_min, (int)(gl_info->limits.pointsize_min * 10) % 10,
+ gl_info->limits.point_sprite_units, gl_info->limits.blends));
+ LogRel(("shaderlib: anisotropy=%-2u shininess=%d.%02d\n",
+ gl_info->limits.anisotropy, (int)gl_info->limits.shininess, (int)(gl_info->limits.shininess * 100) % 100));
+ LogRel(("shaderlib: glsl_varyings=%-3u glsl_vs_float_constants=%-4u glsl_ps_float_constants=%u\n",
+ gl_info->limits.glsl_varyings, gl_info->limits.glsl_vs_float_constants, gl_info->limits.glsl_ps_float_constants));
+ LogRel(("shaderlib: arb_vs_instructions=%-4u arb_vs_native_constants=%-4u qarb_vs_float_constants=%u\n",
+ gl_info->limits.arb_vs_instructions, gl_info->limits.arb_vs_native_constants, gl_info->limits.arb_vs_float_constants));
+ LogRel(("shaderlib: arb_vs_temps=%-2u arb_ps_float_constants=%-4u arb_ps_local_constants=%u\n",
+ gl_info->limits.arb_vs_temps, gl_info->limits.arb_ps_float_constants, gl_info->limits.arb_ps_local_constants));
+ LogRel(("shaderlib: arb_ps_instructions=%-4u arb_ps_temps=%-2u arb_ps_native_constants=%u\n",
+ gl_info->limits.arb_ps_instructions, gl_info->limits.arb_ps_temps, gl_info->limits.arb_ps_native_constants));
+
+ g_fInitializedLibrary = true;
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderDestroyLib(void)
+{
+ return VINF_SUCCESS;
+}
+
+struct IWineD3DDeviceImpl *context_get_device(const struct wined3d_context *context)
+{
+ return context->pDeviceContext;
+}
+
+struct wined3d_context *context_get_current(void)
+{
+ return g_pCurrentContext;
+}
+
+struct wined3d_context *context_acquire(IWineD3DDeviceImpl *This, IWineD3DSurface *target, enum ContextUsage usage)
+{
+ RT_NOREF(This, target, usage);
+ return g_pCurrentContext;
+}
+
+SHADERDECL(int) ShaderContextCreate(void **ppShaderContext)
+{
+ struct wined3d_context *pContext;
+ HRESULT hr;
+
+ pContext = (struct wined3d_context *)RTMemAllocZ(sizeof(struct wined3d_context));
+ AssertReturn(pContext, VERR_NO_MEMORY);
+ pContext->pDeviceContext = (IWineD3DDeviceImpl *)RTMemAllocZ(sizeof(IWineD3DDeviceImpl));
+ AssertReturn(pContext->pDeviceContext, VERR_NO_MEMORY);
+
+ pContext->gl_info = &g_adapter.gl_info;
+
+ pContext->pDeviceContext->adapter = &g_adapter;
+ pContext->pDeviceContext->shader_backend = &glsl_shader_backend;
+ pContext->pDeviceContext->ps_selected_mode = SHADER_GLSL;
+ pContext->pDeviceContext->vs_selected_mode = SHADER_GLSL;
+#ifndef VBOX_WITH_VMSVGA
+ pContext->render_offscreen = false;
+#else
+ /* VMSVGA always renders offscreen. */
+ pContext->render_offscreen = true;
+#endif
+
+ list_init(&pContext->pDeviceContext->shaders);
+
+ if (g_fInitializedLibrary)
+ {
+ struct shader_caps shader_caps;
+ uint32_t state;
+
+ /* Initialize the shader backend. */
+ hr = pContext->pDeviceContext->shader_backend->shader_alloc_private((IWineD3DDevice *)pContext->pDeviceContext);
+ AssertReturn(hr == S_OK, VERR_INTERNAL_ERROR);
+
+ memset(&shader_caps, 0, sizeof(shader_caps));
+ pContext->pDeviceContext->shader_backend->shader_get_caps(&g_adapter.gl_info, &shader_caps);
+ pContext->pDeviceContext->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst;
+ pContext->pDeviceContext->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst;
+ pContext->pDeviceContext->vs_clipping = shader_caps.VSClipping;
+
+ pContext->pDeviceContext->stateBlock = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pContext->pDeviceContext->stateBlock));
+ AssertReturn(pContext->pDeviceContext->stateBlock, VERR_NO_MEMORY);
+ hr = stateblock_init(pContext->pDeviceContext->stateBlock, pContext->pDeviceContext, 0);
+ AssertReturn(hr == S_OK, VERR_INTERNAL_ERROR);
+ pContext->pDeviceContext->updateStateBlock = pContext->pDeviceContext->stateBlock;
+
+ pContext->pDeviceContext->stateBlock->vertexDecl = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IWineD3DVertexDeclarationImpl));
+ AssertReturn(pContext->pDeviceContext->stateBlock->vertexDecl, VERR_NO_MEMORY);
+
+ /* Initialize the texture unit mapping to a 1:1 mapping */
+ for (state = 0; state < MAX_COMBINED_SAMPLERS; ++state)
+ {
+ if (state < pContext->gl_info->limits.fragment_samplers)
+ {
+ pContext->pDeviceContext->texUnitMap[state] = state;
+ pContext->pDeviceContext->rev_tex_unit_map[state] = state;
+ } else {
+ pContext->pDeviceContext->texUnitMap[state] = WINED3D_UNMAPPED_STAGE;
+ pContext->pDeviceContext->rev_tex_unit_map[state] = WINED3D_UNMAPPED_STAGE;
+ }
+ }
+ }
+
+ *ppShaderContext = (void *)pContext;
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderContextDestroy(void *pShaderContext)
+{
+ struct wined3d_context *pContext = (struct wined3d_context *)pShaderContext;
+
+ if (pContext->pDeviceContext)
+ {
+ IWineD3DStateBlockImpl *This = pContext->pDeviceContext->stateBlock;
+
+ /* Fails during init only. */
+ if (pContext->pDeviceContext->shader_priv)
+ pContext->pDeviceContext->shader_backend->shader_free_private((IWineD3DDevice *)pContext->pDeviceContext);
+
+ if (This)
+ {
+ if (This->vertexShaderConstantF)
+ HeapFree(GetProcessHeap(), 0, This->vertexShaderConstantF);
+ if (This->changed.vertexShaderConstantsF)
+ HeapFree(GetProcessHeap(), 0, This->changed.vertexShaderConstantsF);
+ if (This->pixelShaderConstantF)
+ HeapFree(GetProcessHeap(), 0, This->pixelShaderConstantF);
+ if (This->changed.pixelShaderConstantsF)
+ HeapFree(GetProcessHeap(), 0, This->changed.pixelShaderConstantsF);
+ if (This->contained_vs_consts_f)
+ HeapFree(GetProcessHeap(), 0, This->contained_vs_consts_f);
+ if (This->contained_ps_consts_f)
+ HeapFree(GetProcessHeap(), 0, This->contained_ps_consts_f);
+ if (This->vertexDecl)
+ HeapFree(GetProcessHeap(), 0, This->vertexDecl);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ RTMemFree(pContext->pDeviceContext);
+ }
+ RTMemFree(pShaderContext);
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderCreateVertexShader(void *pShaderContext, const uint32_t *pShaderData, uint32_t cbShaderData, void **pShaderObj)
+{
+ IWineD3DDeviceImpl *This;
+ IWineD3DVertexShaderImpl *object;
+ HRESULT hr;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if (!object)
+ {
+ Log(("Failed to allocate shader memory.\n"));
+ return VERR_NO_MEMORY;
+ }
+
+ object->baseShader.functionLength = cbShaderData;
+
+ hr = vertexshader_init(object, This, (DWORD const *)pShaderData, NULL, NULL, NULL);
+ if (FAILED(hr))
+ {
+ Log(("Failed to initialize vertex shader, hr %#x.\n", hr));
+ HeapFree(GetProcessHeap(), 0, object);
+ return VERR_INTERNAL_ERROR;
+ }
+
+ /* Tweak the float constants limit to use a greater number of constants.
+ * Keep some space for the internal usage.
+ * The shader creation code artificially sets the limit according to D3D shader version.
+ * But the guest may use more constants and we are not required to strictly follow D3D specs.
+ */
+ object->baseShader.limits.constant_float = RT_MAX(g_adapter.gl_info.limits.glsl_vs_float_constants / 2,
+ object->baseShader.limits.constant_float);
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+ object = vertexshader_check_cached(This, object);
+#endif
+
+ Log(("Created vertex shader %p.\n", object));
+ *pShaderObj = (void *)object;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderCreatePixelShader(void *pShaderContext, const uint32_t *pShaderData, uint32_t cbShaderData, void **pShaderObj)
+{
+ IWineD3DDeviceImpl *This;
+ IWineD3DPixelShaderImpl *object;
+ HRESULT hr;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if (!object)
+ {
+ Log(("Failed to allocate shader memory.\n"));
+ return VERR_NO_MEMORY;
+ }
+
+ object->baseShader.functionLength = cbShaderData;
+
+ hr = pixelshader_init(object, This, (DWORD const *)pShaderData, NULL, NULL, NULL);
+ if (FAILED(hr))
+ {
+ Log(("Failed to initialize pixel shader, hr %#x.\n", hr));
+ HeapFree(GetProcessHeap(), 0, object);
+ return VERR_INTERNAL_ERROR;
+ }
+
+ /* Tweak the float constants limit to use a greater number of constants.
+ * Keep some space for the internal usage.
+ * The shader creation code artificially sets the limit according to D3D shader version.
+ * But the guest may use more constants and we are not required to strictly follow D3D specs.
+ */
+ object->baseShader.limits.constant_float = RT_MAX(g_adapter.gl_info.limits.glsl_ps_float_constants / 2,
+ object->baseShader.limits.constant_float);
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+ object = pixelshader_check_cached(This, object);
+#endif
+
+ Log(("Created pixel shader %p.\n", object));
+ *pShaderObj = (void *)object;
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderDestroyVertexShader(void *pShaderContext, void *pShaderObj)
+{
+ IWineD3DVertexShaderImpl *object = (IWineD3DVertexShaderImpl *)pShaderObj;
+ AssertReturn(pShaderObj, VERR_INVALID_PARAMETER);
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+
+ object->lpVtbl->Release((IWineD3DVertexShader *)object);
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderDestroyPixelShader(void *pShaderContext, void *pShaderObj)
+{
+ IWineD3DPixelShaderImpl *object = (IWineD3DPixelShaderImpl *)pShaderObj;
+ AssertReturn(pShaderObj, VERR_INVALID_PARAMETER);
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+
+ object->lpVtbl->Release((IWineD3DPixelShader *)object);
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShader(void *pShaderContext, void *pShaderObj)
+{
+ IWineD3DDeviceImpl *This;
+ IWineD3DVertexShader* pShader;
+ IWineD3DVertexShader* oldShader;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+ pShader = (IWineD3DVertexShader* )pShaderObj;
+ oldShader = This->updateStateBlock->vertexShader;
+
+ if(oldShader == pShader) {
+ /* Checked here to allow proper stateblock recording */
+ Log(("App is setting the old shader over, nothing to do\n"));
+ return VINF_SUCCESS;
+ }
+
+ This->updateStateBlock->vertexShader = pShader;
+ This->updateStateBlock->changed.vertexShader = TRUE;
+
+ Log(("(%p) : setting pShader(%p)\n", This, pShader));
+ if(pShader) IWineD3DVertexShader_AddRef(pShader);
+ if(oldShader) IWineD3DVertexShader_Release(oldShader);
+
+ g_pCurrentContext->fChangedVertexShader = true;
+ g_pCurrentContext->fChangedVertexShaderConstant = true; /* force constant reload. */
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShader(void *pShaderContext, void *pShaderObj)
+{
+ IWineD3DDeviceImpl *This;
+ IWineD3DPixelShader* pShader;
+ IWineD3DPixelShader* oldShader;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+ pShader = (IWineD3DPixelShader* )pShaderObj;
+ oldShader = This->updateStateBlock->pixelShader;
+
+ if(oldShader == pShader) {
+ /* Checked here to allow proper stateblock recording */
+ Log(("App is setting the old shader over, nothing to do\n"));
+ return VINF_SUCCESS;
+ }
+
+ This->updateStateBlock->pixelShader = pShader;
+ This->updateStateBlock->changed.pixelShader = TRUE;
+
+ Log(("(%p) : setting pShader(%p)\n", This, pShader));
+ if(pShader) IWineD3DPixelShader_AddRef(pShader);
+ if(oldShader) IWineD3DPixelShader_Release(oldShader);
+
+ g_pCurrentContext->fChangedPixelShader = true;
+ g_pCurrentContext->fChangedPixelShaderConstant = true; /* force constant reload. */
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShaderConstantB(void *pShaderContext, uint32_t start, const uint8_t *srcData, uint32_t count)
+{
+ IWineD3DDeviceImpl *This;
+ unsigned int i, cnt = min(count, MAX_CONST_B - start);
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ Log(("(ShaderSetVertexShaderConstantB %p, srcData %p, start %d, count %d)\n", pShaderContext, srcData, start, count));
+
+ if (!srcData || start >= MAX_CONST_B)
+ {
+ Log(("incorrect vertex shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ memcpy(&This->updateStateBlock->vertexShaderConstantB[start], srcData, cnt * sizeof(BOOL));
+ for (i = 0; i < cnt; i++)
+ Log(("Set BOOL constant %u to %s\n", start + i, srcData[i]? "true":"false"));
+
+ for (i = start; i < cnt + start; ++i) {
+ This->updateStateBlock->changed.vertexShaderConstantsB |= (1 << i);
+ }
+
+ g_pCurrentContext->fChangedVertexShaderConstant = true;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShaderConstantI(void *pShaderContext, uint32_t start, const int32_t *srcData, uint32_t count)
+{
+ IWineD3DDeviceImpl *This;
+ unsigned int i, cnt = min(count, MAX_CONST_I - start);
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ Log(("(ShaderSetVertexShaderConstantI %p, srcData %p, start %d, count %d)\n", pShaderContext, srcData, start, count));
+
+ if (!srcData || start >= MAX_CONST_I)
+ {
+ Log(("incorrect vertex shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ memcpy(&This->updateStateBlock->vertexShaderConstantI[start * 4], srcData, cnt * sizeof(int32_t) * 4);
+
+ for (i = start; i < cnt + start; ++i) {
+ This->updateStateBlock->changed.vertexShaderConstantsI |= (1 << i);
+ }
+
+ g_pCurrentContext->fChangedVertexShaderConstant = true;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetVertexShaderConstantF(void *pShaderContext, uint32_t start, const float *srcData, uint32_t count)
+{
+ IWineD3DDeviceImpl *This;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ Log(("(ShaderSetVertexShaderConstantF %p, srcData %p, start %d, count %d)\n", pShaderContext, srcData, start, count));
+
+ if (srcData == NULL || start + count > This->d3d_vshader_constantF || start > This->d3d_vshader_constantF)
+ {
+ Log(("incorrect vertex shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+ return VERR_INVALID_PARAMETER;
+ }
+ memcpy(&This->updateStateBlock->vertexShaderConstantF[start * 4], srcData, count * sizeof(float) * 4);
+
+ This->shader_backend->shader_update_float_vertex_constants((IWineD3DDevice *)This, start, count);
+
+ memset(This->updateStateBlock->changed.vertexShaderConstantsF + start, 1,
+ sizeof(*This->updateStateBlock->changed.vertexShaderConstantsF) * count);
+
+ g_pCurrentContext->fChangedVertexShaderConstant = true;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShaderConstantB(void *pShaderContext, uint32_t start, const uint8_t *srcData, uint32_t count)
+{
+ IWineD3DDeviceImpl *This;
+ unsigned int i, cnt = min(count, MAX_CONST_B - start);
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ Log(("(ShaderSetPixelShaderConstantB %p, srcData %p, start %d, count %d)\n", pShaderContext, srcData, start, count));
+
+ if (!srcData || start >= MAX_CONST_B)
+ {
+ Log(("incorrect pixel shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ memcpy(&This->updateStateBlock->pixelShaderConstantB[start], srcData, cnt * sizeof(BOOL));
+ for (i = 0; i < cnt; i++)
+ Log(("Set BOOL constant %u to %s\n", start + i, srcData[i]? "true":"false"));
+
+ for (i = start; i < cnt + start; ++i) {
+ This->updateStateBlock->changed.pixelShaderConstantsB |= (1 << i);
+ }
+
+ g_pCurrentContext->fChangedPixelShaderConstant = true;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShaderConstantI(void *pShaderContext, uint32_t start, const int32_t *srcData, uint32_t count)
+{
+ IWineD3DDeviceImpl *This;
+ unsigned int i, cnt = min(count, MAX_CONST_I - start);
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ Log(("(ShaderSetPixelShaderConstantI %p, srcData %p, start %d, count %d)\n", pShaderContext, srcData, start, count));
+
+ if (!srcData || start >= MAX_CONST_I)
+ {
+ Log(("incorrect pixel shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ memcpy(&This->updateStateBlock->pixelShaderConstantI[start * 4], srcData, cnt * sizeof(int32_t) * 4);
+
+ for (i = start; i < cnt + start; ++i) {
+ This->updateStateBlock->changed.pixelShaderConstantsI |= (1 << i);
+ }
+
+ g_pCurrentContext->fChangedPixelShaderConstant = true;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPixelShaderConstantF(void *pShaderContext, uint32_t start, const float *srcData, uint32_t count)
+{
+ IWineD3DDeviceImpl *This;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ Log(("(ShaderSetPixelShaderConstantF %p, srcData %p, start %d, count %d)\n", pShaderContext, srcData, start, count));
+
+ if (srcData == NULL || start + count > This->d3d_pshader_constantF || start > This->d3d_pshader_constantF)
+ {
+ Log(("incorrect pixel shader const data: start(%u), srcData(0x%p), count(%u)", start, srcData, count));
+ return VERR_INVALID_PARAMETER;
+ }
+
+ memcpy(&This->updateStateBlock->pixelShaderConstantF[start * 4], srcData, count * sizeof(float) * 4);
+
+ This->shader_backend->shader_update_float_pixel_constants((IWineD3DDevice *)This, start, count);
+
+ memset(This->updateStateBlock->changed.pixelShaderConstantsF + start, 1,
+ sizeof(*This->updateStateBlock->changed.pixelShaderConstantsF) * count);
+
+ g_pCurrentContext->fChangedPixelShaderConstant = true;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderSetPositionTransformed(void *pShaderContext, unsigned cxViewPort, unsigned cyViewPort, bool fPreTransformed)
+{
+ IWineD3DDeviceImpl *This;
+ int rc;
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ This = g_pCurrentContext->pDeviceContext;
+
+ if (This->strided_streams.position_transformed == fPreTransformed)
+ return VINF_SUCCESS; /* no changes; nothing to do. */
+
+ Log(("ShaderSetPositionTransformed viewport (%d,%d) fPreTransformed=%d\n", cxViewPort, cyViewPort, fPreTransformed));
+
+ if (fPreTransformed)
+ { /* In the pre-transformed vertex coordinate case we need to disable all transformations as we're already using screen coordinates. */
+ /* Load the identity matrix for the model view */
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+ /* Reset the projection matrix too */
+ rc = ShaderTransformProjection(cxViewPort, cyViewPort, NULL, fPreTransformed);
+ AssertRCReturn(rc, rc);
+ }
+
+ This->strided_streams.position_transformed = fPreTransformed;
+ ((IWineD3DVertexDeclarationImpl *)(This->stateBlock->vertexDecl))->position_transformed = fPreTransformed;
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight)
+{
+ IWineD3DDeviceImpl *pThis;
+ GLfloat yoffset;
+ GLint viewport[4];
+
+ SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+ pThis = g_pCurrentContext->pDeviceContext;
+
+ glGetIntegerv(GL_VIEWPORT, viewport);
+#ifdef DEBUG
+ AssertReturn(glGetError() == GL_NO_ERROR, VERR_INTERNAL_ERROR);
+#endif
+
+ yoffset = -(63.0f / 64.0f) / viewport[3] /* height */;
+ pThis->posFixup[0] = 1.0f; /* This is needed to get the x coord unmodified through a MAD. */
+ pThis->posFixup[1] = -1.0f; /* y-inversion */
+ pThis->posFixup[2] = (63.0f / 64.0f) / viewport[2] /* width */;
+ pThis->posFixup[3] = pThis->posFixup[1] * yoffset;
+
+ pThis->rtHeight = rtHeight;
+
+ /** @todo missing state:
+ * - fog enable (stateblock->renderState[WINED3DRS_FOGENABLE])
+ * - fog mode (stateblock->renderState[WINED3DRS_FOGTABLEMODE])
+ * - stateblock->vertexDecl->position_transformed
+ */
+
+ if ( g_pCurrentContext->fChangedPixelShader
+ || g_pCurrentContext->fChangedVertexShader)
+ pThis->shader_backend->shader_select(g_pCurrentContext, !!pThis->updateStateBlock->pixelShader, !!pThis->updateStateBlock->vertexShader);
+ g_pCurrentContext->fChangedPixelShader = g_pCurrentContext->fChangedVertexShader = false;
+
+ if ( g_pCurrentContext->fChangedPixelShaderConstant
+ || g_pCurrentContext->fChangedVertexShaderConstant)
+ pThis->shader_backend->shader_load_constants(g_pCurrentContext, !!pThis->updateStateBlock->pixelShader, !!pThis->updateStateBlock->vertexShader);
+ g_pCurrentContext->fChangedPixelShaderConstant = false;
+ g_pCurrentContext->fChangedVertexShaderConstant = false;
+
+ return VINF_SUCCESS;
+}
+
+SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16], bool fPretransformed)
+{
+#ifdef DEBUG
+ GLenum lastError;
+#endif
+ GLfloat xoffset, yoffset;
+
+ /* Assumes OpenGL context has been activated. */
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+
+ /* The rule is that the window coordinate 0 does not correspond to the
+ beginning of the first pixel, but the center of the first pixel.
+ As a consequence if you want to correctly draw one line exactly from
+ the left to the right end of the viewport (with all matrices set to
+ be identity), the x coords of both ends of the line would be not
+ -1 and 1 respectively but (-1-1/viewport_widh) and (1-1/viewport_width)
+ instead.
+
+ 1.0 / Width is used because the coord range goes from -1.0 to 1.0, then we
+ divide by the Width/Height, so we need the half range(1.0) to translate by
+ half a pixel.
+
+ The other fun is that d3d's output z range after the transformation is [0;1],
+ but opengl's is [-1;1]. Since the z buffer is in range [0;1] for both, gl
+ scales [-1;1] to [0;1]. This would mean that we end up in [0.5;1] and loose a lot
+ of Z buffer precision and the clear values do not match in the z test. Thus scale
+ [0;1] to [-1;1], so when gl undoes that we utilize the full z range
+ */
+
+ /*
+ * Careful with the order of operations here, we're essentially working backwards:
+ * x = x + 1/w;
+ * y = (y - 1/h) * flip;
+ * z = z * 2 - 1;
+ *
+ * Becomes:
+ * glTranslatef(0.0, 0.0, -1.0);
+ * glScalef(1.0, 1.0, 2.0);
+ *
+ * glScalef(1.0, flip, 1.0);
+ * glTranslatef(1/w, -1/h, 0.0);
+ *
+ * This is equivalent to:
+ * glTranslatef(1/w, -flip/h, -1.0)
+ * glScalef(1.0, flip, 2.0);
+ */
+ /* Translate by slightly less than a half pixel to force a top-left
+ * filling convention. We want the difference to be large enough that
+ * it doesn't get lost due to rounding inside the driver, but small
+ * enough to prevent it from interfering with any anti-aliasing. */
+ xoffset = (63.0f / 64.0f) / cxViewPort;
+ yoffset = -(63.0f / 64.0f) / cyViewPort;
+
+ glTranslatef(xoffset, -yoffset, -1.0f);
+
+ if (fPretransformed)
+ {
+ /* One world coordinate equals one screen pixel; y-inversion no longer an issue */
+ glOrtho(0, cxViewPort, 0, cyViewPort, -1, 1);
+ }
+ else
+ {
+ /* flip y coordinate origin too */
+ glScalef(1.0f, -1.0f, 2.0f);
+
+ /* Apply the supplied projection matrix */
+ glMultMatrixf(matrix);
+ }
+#ifdef DEBUG
+ lastError = glGetError(); \
+ AssertMsgReturn(lastError == GL_NO_ERROR, ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, lastError), VERR_INTERNAL_ERROR);
+#endif
+ return VINF_SUCCESS;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderlib.h b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
new file mode 100644
index 00000000..60a2d00e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
@@ -0,0 +1,110 @@
+/* $Id: shaderlib.h $ */
+/** @file
+ * shaderlib -- interface to WINE's Direct3D shader functions
+ */
+
+/*
+ * Copyright (C) 2014-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_shaderlib_shaderlib_h
+#define VBOX_INCLUDED_SRC_Graphics_shaderlib_shaderlib_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <VBox/cdefs.h>
+
+RT_C_DECLS_BEGIN
+
+#ifdef IN_SHADERLIB_STATIC
+# define SHADERDECL(type) DECLHIDDEN(type) RTCALL
+#else
+# define SHADERDECL(type) DECLEXPORT(type) RTCALL
+#endif
+
+/** Pointer to shaderlib callback interface. */
+typedef struct VBOXVMSVGASHADERIF *PVBOXVMSVGASHADERIF;
+/**
+ * Interface the shader lib can use to talk back to the VBox VMSVGA OGL 3D code.
+ */
+typedef struct VBOXVMSVGASHADERIF
+{
+ /**
+ * Switches the initialization profile in builds where we have to juggle two
+ * OpenGL profiles to gather all the data (i.e. mac os x).
+ *
+ * @param pThis Pointer to this structure.
+ * @param fOtherProfile If set, switch to the non-default profile. If
+ * clear, switch back to the default profile.
+ */
+ DECLCALLBACKMEMBER(void, pfnSwitchInitProfile,(PVBOXVMSVGASHADERIF pThis, bool fOtherProfile));
+
+ /**
+ * Extension enumeration function.
+ *
+ * @param pThis Pointer to this structure.
+ * @param ppvEnumCtx Pointer to a void point that's initialized to NULL
+ * before the first call.
+ * @param pszBuf Where to store the extension name. Garbled on
+ * overflow (we assume no overflow).
+ * @param cbBuf The size of the buffer @a pszBuf points to.
+ * @param fOtherProfile Indicates which profile to get extensions from,
+ * we'll use the default profile if CLEAR and the
+ * non-default if SET.
+ */
+ DECLCALLBACKMEMBER(bool, pfnGetNextExtension,(PVBOXVMSVGASHADERIF pThis, void **ppvEnumCtx, char *pszBuf, size_t cbBuf,
+ bool fOtherProfile));
+} VBOXVMSVGASHADERIF;
+
+SHADERDECL(int) ShaderInitLib(PVBOXVMSVGASHADERIF pVBoxShaderIf);
+SHADERDECL(int) ShaderDestroyLib(void);
+
+SHADERDECL(int) ShaderContextCreate(void **ppShaderContext);
+SHADERDECL(int) ShaderContextDestroy(void *pShaderContext);
+
+SHADERDECL(int) ShaderCreateVertexShader(void *pShaderContext, const uint32_t *pShaderData, uint32_t cbShaderData, void **pShaderObj);
+SHADERDECL(int) ShaderCreatePixelShader(void *pShaderContext, const uint32_t *pShaderData, uint32_t cbShaderData, void **pShaderObj);
+
+SHADERDECL(int) ShaderDestroyVertexShader(void *pShaderContext, void *pShaderObj);
+SHADERDECL(int) ShaderDestroyPixelShader(void *pShaderContext, void *pShaderObj);
+
+SHADERDECL(int) ShaderSetVertexShader(void *pShaderContext, void *pShaderObj);
+SHADERDECL(int) ShaderSetPixelShader(void *pShaderContext, void *pShaderObj);
+
+SHADERDECL(int) ShaderSetVertexShaderConstantB(void *pShaderContext, uint32_t reg, const uint8_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetVertexShaderConstantI(void *pShaderContext, uint32_t reg, const int32_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetVertexShaderConstantF(void *pShaderContext, uint32_t reg, const float *pValues, uint32_t cRegisters);
+
+SHADERDECL(int) ShaderSetPixelShaderConstantB(void *pShaderContext, uint32_t reg, const uint8_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetPixelShaderConstantI(void *pShaderContext, uint32_t reg, const int32_t *pValues, uint32_t cRegisters);
+SHADERDECL(int) ShaderSetPixelShaderConstantF(void *pShaderContext, uint32_t reg, const float *pValues, uint32_t cRegisters);
+
+SHADERDECL(int) ShaderSetPositionTransformed(void *pShaderContext, unsigned cxViewPort, unsigned cyViewPort, bool fPreTransformed);
+
+SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight);
+
+SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16], bool fPretransformed);
+
+RT_C_DECLS_END
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_shaderlib_shaderlib_h */
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/stateblock.c b/src/VBox/Devices/Graphics/shaderlib/stateblock.c
new file mode 100644
index 00000000..1507ec3a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/stateblock.c
@@ -0,0 +1,99 @@
+/*
+ * state block implementation
+ *
+ * Copyright 2002 Raphael Junqueira
+ * Copyright 2004 Jason Edmeades
+ * Copyright 2005 Oliver Stieber
+ * Copyright 2007 Stefan Dösinger for CodeWeavers
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "config.h"
+#include "wined3d_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+
+/* Allocates the correct amount of space for pixel and vertex shader constants,
+ * along with their set/changed flags on the given stateblock object
+ */
+static HRESULT stateblock_allocate_shader_constants(IWineD3DStateBlockImpl *object)
+{
+ IWineD3DDeviceImpl *device = object->device;
+
+ /* Allocate space for floating point constants */
+ object->pixelShaderConstantF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(float) * device->d3d_pshader_constantF * 4);
+ if (!object->pixelShaderConstantF) goto fail;
+
+ object->changed.pixelShaderConstantsF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(BOOL) * device->d3d_pshader_constantF);
+ if (!object->changed.pixelShaderConstantsF) goto fail;
+
+ object->vertexShaderConstantF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(float) * device->d3d_vshader_constantF * 4);
+ if (!object->vertexShaderConstantF) goto fail;
+
+ object->changed.vertexShaderConstantsF = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(BOOL) * device->d3d_vshader_constantF);
+ if (!object->changed.vertexShaderConstantsF) goto fail;
+
+ object->contained_vs_consts_f = HeapAlloc(GetProcessHeap(), 0,
+ sizeof(DWORD) * device->d3d_vshader_constantF);
+ if (!object->contained_vs_consts_f) goto fail;
+
+ object->contained_ps_consts_f = HeapAlloc(GetProcessHeap(), 0,
+ sizeof(DWORD) * device->d3d_pshader_constantF);
+ if (!object->contained_ps_consts_f) goto fail;
+
+ return WINED3D_OK;
+
+fail:
+ ERR("Failed to allocate memory\n");
+ HeapFree(GetProcessHeap(), 0, object->pixelShaderConstantF);
+ HeapFree(GetProcessHeap(), 0, object->changed.pixelShaderConstantsF);
+ HeapFree(GetProcessHeap(), 0, object->vertexShaderConstantF);
+ HeapFree(GetProcessHeap(), 0, object->changed.vertexShaderConstantsF);
+ HeapFree(GetProcessHeap(), 0, object->contained_vs_consts_f);
+ HeapFree(GetProcessHeap(), 0, object->contained_ps_consts_f);
+ return E_OUTOFMEMORY;
+}
+
+static inline void stateblock_set_bits(DWORD *map, UINT map_size)
+{
+ DWORD mask = (1 << (map_size & 0x1f)) - 1;
+ memset(map, 0xff, (map_size >> 5) * sizeof(*map));
+ if (mask) map[map_size >> 5] = mask;
+}
+
+
+HRESULT stateblock_init(IWineD3DStateBlockImpl *stateblock, IWineD3DDeviceImpl *device, WINED3DSTATEBLOCKTYPE type)
+{
+ stateblock->ref = 1;
+ stateblock->device = device;
+ stateblock->blockType = type;
+
+ return stateblock_allocate_shader_constants(stateblock);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/utils.c b/src/VBox/Devices/Graphics/shaderlib/utils.c
new file mode 100644
index 00000000..58da8b2b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/utils.c
@@ -0,0 +1,158 @@
+/* $Id: utils.c $ */
+/** @file
+ * DevVMWare/Shaderlib - Utility/Stub Functions & Data.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#include <iprt/errcore.h>
+#include <iprt/mem.h>
+#include <iprt/assert.h>
+#ifdef _MSC_VER
+# include <iprt/win/windows.h>
+#else
+# include <windows.h>
+#endif
+#include "wined3d_private.h"
+
+
+
+void *wined3d_rb_alloc(size_t size)
+{
+ return RTMemAlloc(size);
+}
+
+void *wined3d_rb_realloc(void *ptr, size_t size)
+{
+ return RTMemRealloc(ptr, size);
+}
+
+void wined3d_rb_free(void *ptr)
+{
+ RTMemFree(ptr);
+}
+
+/* This small helper function is used to convert a bitmask into the number of masked bits */
+unsigned int count_bits(unsigned int mask)
+{
+ unsigned int count;
+ for (count = 0; mask; ++count)
+ {
+ mask &= mask - 1;
+ }
+ return count;
+}
+
+UINT wined3d_log2i(UINT32 x)
+{
+ static const UINT l[] =
+ {
+ ~0U, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ };
+ UINT32 i;
+
+ return (i = x >> 16) ? (x = i >> 8) ? l[x] + 24 : l[i] + 16 : (i = x >> 8) ? l[i] + 8 : l[x];
+}
+
+/* Set the shader type for this device, depending on the given capabilities
+ * and the user preferences in wined3d_settings. */
+void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected)
+{
+ RT_NOREF(gl_info);
+ *vs_selected = SHADER_GLSL;
+ *ps_selected = SHADER_GLSL;
+}
+
+const char *debug_glerror(GLenum error) {
+ switch(error) {
+#define GLERROR_TO_STR(u) case u: return #u
+ GLERROR_TO_STR(GL_NO_ERROR);
+ GLERROR_TO_STR(GL_INVALID_ENUM);
+ GLERROR_TO_STR(GL_INVALID_VALUE);
+ GLERROR_TO_STR(GL_INVALID_OPERATION);
+ GLERROR_TO_STR(GL_STACK_OVERFLOW);
+ GLERROR_TO_STR(GL_STACK_UNDERFLOW);
+ GLERROR_TO_STR(GL_OUT_OF_MEMORY);
+ GLERROR_TO_STR(GL_INVALID_FRAMEBUFFER_OPERATION);
+#undef GLERROR_TO_STR
+ default:
+ return "unrecognized";
+ }
+}
+
+void dump_color_fixup_desc(struct color_fixup_desc fixup)
+{
+ RT_NOREF(fixup);
+}
+
+void context_release(struct wined3d_context *context)
+{
+ RT_NOREF(context);
+}
+
+static void CDECL wined3d_do_nothing(void)
+{
+}
+
+void (* CDECL wine_tsx11_lock_ptr)(void) = wined3d_do_nothing;
+void (* CDECL wine_tsx11_unlock_ptr)(void) = wined3d_do_nothing;
+
+LPVOID WINAPI VBoxHeapAlloc(HANDLE hHeap, DWORD heaptype,SIZE_T size)
+{
+ RT_NOREF(hHeap, heaptype);
+ return RTMemAllocZ(size);
+}
+
+BOOL WINAPI VBoxHeapFree(HANDLE hHeap, DWORD heaptype,LPVOID ptr)
+{
+ RT_NOREF(hHeap, heaptype);
+ RTMemFree(ptr);
+ return TRUE;
+}
+
+LPVOID WINAPI VBoxHeapReAlloc(HANDLE hHeap, DWORD heaptype, LPVOID ptr, SIZE_T size)
+{
+ RT_NOREF(hHeap, heaptype);
+ return RTMemRealloc(ptr, size);
+}
+
+void VBoxDebugBreak(void)
+{
+ AssertFailed();
+}
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/vboxext.h b/src/VBox/Devices/Graphics/shaderlib/vboxext.h
new file mode 100644
index 00000000..22bc68e3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/vboxext.h
@@ -0,0 +1,177 @@
+/* $Id: vboxext.h $ */
+/** @file
+ * VBox extension to Wine D3D
+ */
+
+/*
+ * Copyright (C) 2011-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_shaderlib_vboxext_h
+#define VBOX_INCLUDED_SRC_Graphics_shaderlib_vboxext_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifdef VBOX_WINE_WITHOUT_LIBWINE
+# ifdef _MSC_VER
+# include <iprt/win/windows.h>
+# else
+# include <windows.h>
+# endif
+#endif
+
+#include <iprt/list.h>
+
+HRESULT VBoxExtCheckInit(void);
+HRESULT VBoxExtCheckTerm(void);
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+# ifndef VBOX_WITH_WDDM
+/* Windows destroys HDC created by a given thread when the thread is terminated
+ * this leads to a mess-up in Wine & Chromium code in some situations, e.g.
+ * D3D device is created in one thread, then the thread is terminated,
+ * then device is started to be used in another thread */
+HDC VBoxExtGetDC(HWND hWnd);
+int VBoxExtReleaseDC(HWND hWnd, HDC hDC);
+# endif
+/* We need to do a VBoxTlsRefRelease for the current thread context on thread exit to avoid memory leaking
+ * Calling VBoxTlsRefRelease may result in a call to context dtor callback, which is supposed to be run under wined3d lock.
+ * We can not acquire a wined3d lock in DllMain since this would result in a lock order violation, which may result in a deadlock.
+ * In other words, wined3d may internally call Win32 API functions which result in a DLL lock acquisition while holding wined3d lock.
+ * So lock order should always be "wined3d lock" -> "dll lock".
+ * To avoid possible deadlocks we make an asynchronous call to a worker thread to make a context release from there. */
+struct wined3d_context;
+void VBoxExtReleaseContextAsync(struct wined3d_context *context);
+#endif
+
+/* API for creating & destroying windows */
+HRESULT VBoxExtWndDestroy(HWND hWnd, HDC hDC);
+HRESULT VBoxExtWndCreate(DWORD width, DWORD height, HWND *phWnd, HDC *phDC);
+
+
+/* hashmap */
+typedef DECLCALLBACKTYPE(uint32_t, FNVBOXEXT_HASHMAP_HASH,(void *pvKey));
+typedef FNVBOXEXT_HASHMAP_HASH *PFNVBOXEXT_HASHMAP_HASH;
+
+typedef DECLCALLBACKTYPE(bool, FNVBOXEXT_HASHMAP_EQUAL,(void *pvKey1, void *pvKey2));
+typedef FNVBOXEXT_HASHMAP_EQUAL *PFNVBOXEXT_HASHMAP_EQUAL;
+
+struct VBOXEXT_HASHMAP;
+struct VBOXEXT_HASHMAP_ENTRY;
+typedef DECLCALLBACKTYPE(bool, FNVBOXEXT_HASHMAP_VISITOR,(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor));
+typedef FNVBOXEXT_HASHMAP_VISITOR *PFNVBOXEXT_HASHMAP_VISITOR;
+
+typedef struct VBOXEXT_HASHMAP_ENTRY
+{
+ RTLISTNODE ListNode;
+ void *pvKey;
+ uint32_t u32Hash;
+} VBOXEXT_HASHMAP_ENTRY, *PVBOXEXT_HASHMAP_ENTRY;
+
+typedef struct VBOXEXT_HASHMAP_BUCKET
+{
+ RTLISTNODE EntryList;
+} VBOXEXT_HASHMAP_BUCKET, *PVBOXEXT_HASHMAP_BUCKET;
+
+#define VBOXEXT_HASHMAP_NUM_BUCKETS 29
+
+typedef struct VBOXEXT_HASHMAP
+{
+ PFNVBOXEXT_HASHMAP_HASH pfnHash;
+ PFNVBOXEXT_HASHMAP_EQUAL pfnEqual;
+ uint32_t cEntries;
+ VBOXEXT_HASHMAP_BUCKET aBuckets[VBOXEXT_HASHMAP_NUM_BUCKETS];
+} VBOXEXT_HASHMAP, *PVBOXEXT_HASHMAP;
+
+void VBoxExtHashInit(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_HASH pfnHash, PFNVBOXEXT_HASHMAP_EQUAL pfnEqual);
+PVBOXEXT_HASHMAP_ENTRY VBoxExtHashPut(PVBOXEXT_HASHMAP pMap, void *pvKey, PVBOXEXT_HASHMAP_ENTRY pEntry);
+PVBOXEXT_HASHMAP_ENTRY VBoxExtHashGet(PVBOXEXT_HASHMAP pMap, void *pvKey);
+PVBOXEXT_HASHMAP_ENTRY VBoxExtHashRemove(PVBOXEXT_HASHMAP pMap, void *pvKey);
+void* VBoxExtHashRemoveEntry(PVBOXEXT_HASHMAP pMap, PVBOXEXT_HASHMAP_ENTRY pEntry);
+void VBoxExtHashVisit(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_VISITOR pfnVisitor, void *pvVisitor);
+void VBoxExtHashCleanup(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_VISITOR pfnVisitor, void *pvVisitor);
+
+DECLINLINE(uint32_t) VBoxExtHashSize(PVBOXEXT_HASHMAP pMap)
+{
+ return pMap->cEntries;
+}
+
+DECLINLINE(void*) VBoxExtHashEntryKey(PVBOXEXT_HASHMAP_ENTRY pEntry)
+{
+ return pEntry->pvKey;
+}
+
+struct VBOXEXT_HASHCACHE_ENTRY;
+typedef DECLCALLBACKTYPE(void, FNVBOXEXT_HASHCACHE_CLEANUP_ENTRY,(void *pvKey, struct VBOXEXT_HASHCACHE_ENTRY *pEntry));
+typedef FNVBOXEXT_HASHCACHE_CLEANUP_ENTRY *PFNVBOXEXT_HASHCACHE_CLEANUP_ENTRY;
+
+typedef struct VBOXEXT_HASHCACHE_ENTRY
+{
+ VBOXEXT_HASHMAP_ENTRY MapEntry;
+ uint32_t u32Usage;
+} VBOXEXT_HASHCACHE_ENTRY, *PVBOXEXT_HASHCACHE_ENTRY;
+
+typedef struct VBOXEXT_HASHCACHE
+{
+ VBOXEXT_HASHMAP Map;
+ uint32_t cMaxElements;
+ PFNVBOXEXT_HASHCACHE_CLEANUP_ENTRY pfnCleanupEntry;
+} VBOXEXT_HASHCACHE, *PVBOXEXT_HASHCACHE;
+
+#define VBOXEXT_HASHCACHE_FROM_MAP(_pMap) RT_FROM_MEMBER((_pMap), VBOXEXT_HASHCACHE, Map)
+#define VBOXEXT_HASHCACHE_ENTRY_FROM_MAP(_pEntry) RT_FROM_MEMBER((_pEntry), VBOXEXT_HASHCACHE_ENTRY, MapEntry)
+
+DECLINLINE(void) VBoxExtCacheInit(PVBOXEXT_HASHCACHE pCache, uint32_t cMaxElements,
+ PFNVBOXEXT_HASHMAP_HASH pfnHash,
+ PFNVBOXEXT_HASHMAP_EQUAL pfnEqual,
+ PFNVBOXEXT_HASHCACHE_CLEANUP_ENTRY pfnCleanupEntry)
+{
+ VBoxExtHashInit(&pCache->Map, pfnHash, pfnEqual);
+ pCache->cMaxElements = cMaxElements;
+ pCache->pfnCleanupEntry = pfnCleanupEntry;
+}
+
+DECLINLINE(PVBOXEXT_HASHCACHE_ENTRY) VBoxExtCacheGet(PVBOXEXT_HASHCACHE pCache, void *pvKey)
+{
+ PVBOXEXT_HASHMAP_ENTRY pEntry = VBoxExtHashRemove(&pCache->Map, pvKey);
+ return VBOXEXT_HASHCACHE_ENTRY_FROM_MAP(pEntry);
+}
+
+DECLINLINE(void) VBoxExtCachePut(PVBOXEXT_HASHCACHE pCache, void *pvKey, PVBOXEXT_HASHCACHE_ENTRY pEntry)
+{
+ PVBOXEXT_HASHMAP_ENTRY pOldEntry = VBoxExtHashPut(&pCache->Map, pvKey, &pEntry->MapEntry);
+ PVBOXEXT_HASHCACHE_ENTRY pOld;
+ if (!pOldEntry)
+ return;
+ pOld = VBOXEXT_HASHCACHE_ENTRY_FROM_MAP(pOldEntry);
+ if (pOld != pEntry)
+ pCache->pfnCleanupEntry(pvKey, pOld);
+}
+
+void VBoxExtCacheCleanup(PVBOXEXT_HASHCACHE pCache);
+
+DECLINLINE(void) VBoxExtCacheTerm(PVBOXEXT_HASHCACHE pCache)
+{
+ VBoxExtCacheCleanup(pCache);
+}
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_shaderlib_vboxext_h */
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in b/src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in
new file mode 100644
index 00000000..d11c0f0d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/Makefile.in
@@ -0,0 +1,669 @@
+PRIVATE_IDL_H_SRCS = \
+ wine/winedxgi.idl
+
+PUBLIC_IDL_H_SRCS = \
+ activaut.idl \
+ activdbg.idl \
+ activscp.idl \
+ amstream.idl \
+ amvideo.idl \
+ asptlb.idl \
+ atliface.idl \
+ audioclient.idl \
+ audiopolicy.idl \
+ austream.idl \
+ bits.idl \
+ bits1_5.idl \
+ comcat.idl \
+ commoncontrols.idl \
+ control.idl \
+ cor.idl \
+ cordebug.idl \
+ ctfutb.idl \
+ ctxtcall.idl \
+ d3d10.idl \
+ d3d10_1.idl \
+ d3d11.idl \
+ d3d11sdklayers.idl \
+ d3dcommon.idl \
+ ddstream.idl \
+ devicetopology.idl \
+ dimm.idl \
+ dispex.idl \
+ docobj.idl \
+ docobjectservice.idl \
+ downloadmgr.idl \
+ dwrite.idl \
+ dwrite_1.idl \
+ dxgi.idl \
+ endpointvolume.idl \
+ exdisp.idl \
+ fusion.idl \
+ gameux.idl \
+ hlink.idl \
+ htiface.idl \
+ htiframe.idl \
+ httprequest.idl \
+ iads.idl \
+ icftypes.idl \
+ iextag.idl \
+ imnact.idl \
+ imnxport.idl \
+ indexsrv.idl \
+ inputscope.idl \
+ mediaobj.idl \
+ metahost.idl \
+ mimeinfo.idl \
+ mimeole.idl \
+ mlang.idl \
+ mmc.idl \
+ mmdeviceapi.idl \
+ mmstream.idl \
+ mscoree.idl \
+ msctf.idl \
+ msdadc.idl \
+ msdasc.idl \
+ mshtmhst.idl \
+ mshtml.idl \
+ msident.idl \
+ msinkaut.idl \
+ mstask.idl \
+ msxml.idl \
+ msxml2.idl \
+ msxml6.idl \
+ netcon.idl \
+ netfw.idl \
+ oaidl.idl \
+ objectarray.idl \
+ objidl.idl \
+ objsafe.idl \
+ ocidl.idl \
+ ocmm.idl \
+ oleacc.idl \
+ oledb.idl \
+ oleidl.idl \
+ optary.idl \
+ perhist.idl \
+ propidl.idl \
+ propsys.idl \
+ pstore.idl \
+ qedit.idl \
+ richole.idl \
+ sensevts.idl \
+ servprov.idl \
+ shdeprecated.idl \
+ shldisp.idl \
+ shobjidl.idl \
+ shtypes.idl \
+ strmif.idl \
+ structuredquerycondition.idl \
+ textstor.idl \
+ tlogstg.idl \
+ tom.idl \
+ transact.idl \
+ txcoord.idl \
+ txdtc.idl \
+ uiautomationclient.idl \
+ uiautomationcore.idl \
+ unknwn.idl \
+ urlhist.idl \
+ urlmon.idl \
+ vmr9.idl \
+ wbemcli.idl \
+ wbemdisp.idl \
+ wbemprov.idl \
+ wia_lh.idl \
+ wia_xp.idl \
+ wincodec.idl \
+ wincodecsdk.idl \
+ wine/itss.idl \
+ wine/svcctl.idl \
+ winsxs.idl \
+ wmiutils.idl \
+ wmsbuffer.idl \
+ wmsdkidl.idl \
+ wpcapi.idl \
+ wtypes.idl \
+ wuapi.idl \
+ xmllite.idl
+
+IDL_TLB_SRCS = \
+ stdole2.idl
+
+XTEMPLATE_SRCS = \
+ rmxftmpl.x
+
+SRCDIR_INCLUDES = \
+ $(IDL_TLB_SRCS) \
+ $(PUBLIC_IDL_H_SRCS) \
+ $(XTEMPLATE_SRCS) \
+ accctrl.h \
+ access.idl \
+ aclapi.h \
+ aclui.h \
+ adshlp.h \
+ advpub.h \
+ af_irda.h \
+ amaudio.h \
+ appcompatapi.h \
+ appmgmt.h \
+ asynot.idl \
+ asysta.idl \
+ atlbase.h \
+ atlwin.h \
+ audevcod.h \
+ audiosessiontypes.h \
+ aviriff.h \
+ avrt.h \
+ axcore.idl \
+ axextend.idl \
+ basetsd.h \
+ basetyps.h \
+ bcrypt.h \
+ binres.idl \
+ bitsmsg.h \
+ cderr.h \
+ cfgmgr32.h \
+ cguid.h \
+ chprst.idl \
+ cierror.h \
+ clusapi.h \
+ cmdbas.idl \
+ cmdtxt.idl \
+ commctrl.h \
+ commctrl.rh \
+ commdlg.h \
+ compobj.h \
+ corerror.h \
+ corhdr.h \
+ cpl.h \
+ crtrow.idl \
+ cryptdlg.h \
+ cryptuiapi.h \
+ custcntl.h \
+ cvconst.h \
+ d3d.h \
+ d3d10_1shader.h \
+ d3d10effect.h \
+ d3d10misc.h \
+ d3d10shader.h \
+ d3d11shader.h \
+ d3d8.h \
+ d3d8caps.h \
+ d3d8types.h \
+ d3d9.h \
+ d3d9caps.h \
+ d3d9types.h \
+ d3dcaps.h \
+ d3dcompiler.h \
+ d3dhal.h \
+ d3drm.h \
+ d3drmdef.h \
+ d3drmobj.h \
+ d3drmwin.h \
+ d3dtypes.h \
+ d3dvec.inl \
+ d3dx9.h \
+ d3dx9anim.h \
+ d3dx9core.h \
+ d3dx9effect.h \
+ d3dx9math.h \
+ d3dx9math.inl \
+ d3dx9mesh.h \
+ d3dx9shader.h \
+ d3dx9shape.h \
+ d3dx9tex.h \
+ d3dx9xof.h \
+ dbccmd.idl \
+ dbcses.idl \
+ dbdsad.idl \
+ dbghelp.h \
+ dbinit.idl \
+ dbprop.idl \
+ dbs.idl \
+ dbt.h \
+ dciddi.h \
+ dciman.h \
+ dcommon.h \
+ dde.h \
+ dde.rh \
+ ddeml.h \
+ ddk/compstui.h \
+ ddk/hidsdi.h \
+ ddk/imm.h \
+ ddk/mountmgr.h \
+ ddk/ntddcdvd.h \
+ ddk/ntddk.h \
+ ddk/ntddser.h \
+ ddk/ntddtape.h \
+ ddk/usb.h \
+ ddk/usb100.h \
+ ddk/usb200.h \
+ ddk/usbdlib.h \
+ ddk/usbioctl.h \
+ ddk/usbiodef.h \
+ ddk/wdm.h \
+ ddk/winddiui.h \
+ ddk/winsplp.h \
+ ddraw.h \
+ ddrawgdi.h \
+ ddrawi.h \
+ delayloadhandler.h \
+ devenum.idl \
+ devguid.h \
+ devpkey.h \
+ devpropdef.h \
+ difxapi.h \
+ digitalv.h \
+ dinput.h \
+ dinputd.h \
+ dispdib.h \
+ dlgs.h \
+ dls1.h \
+ dls2.h \
+ dmdls.h \
+ dmerror.h \
+ dmksctrl.h \
+ dmo.h \
+ dmoreg.h \
+ dmort.h \
+ dmplugin.h \
+ dmusbuff.h \
+ dmusicc.h \
+ dmusicf.h \
+ dmusici.h \
+ dmusics.h \
+ dpaddr.h \
+ dplay.h \
+ dplay8.h \
+ dplobby.h \
+ dplobby8.h \
+ dpnathlp.h \
+ dsconf.h \
+ dsgetdc.h \
+ dshow.h \
+ dsound.h \
+ dsrole.h \
+ dvdmedia.h \
+ dwmapi.h \
+ dxdiag.h \
+ dxerr8.h \
+ dxerr9.h \
+ dxfile.h \
+ dxgiformat.h \
+ dxgitype.h \
+ dyngraph.idl \
+ errorrep.h \
+ errors.h \
+ errrec.idl \
+ evcode.h \
+ evntprov.h \
+ evntrace.h \
+ excpt.h \
+ exdispid.h \
+ fci.h \
+ fdi.h \
+ fileapi.h \
+ fltdefs.h \
+ gdiplus.h \
+ gdipluscolor.h \
+ gdipluscolormatrix.h \
+ gdiplusenums.h \
+ gdiplusflat.h \
+ gdiplusgpstubs.h \
+ gdiplusimaging.h \
+ gdiplusinit.h \
+ gdiplusmem.h \
+ gdiplusmetaheader.h \
+ gdipluspixelformats.h \
+ gdiplustypes.h \
+ guiddef.h \
+ hlguids.h \
+ htmlhelp.h \
+ http.h \
+ httprequestid.h \
+ i_cryptasn1tls.h \
+ icm.h \
+ icmpapi.h \
+ idispids.h \
+ ifdef.h \
+ ifmib.h \
+ imagehlp.h \
+ imm.h \
+ in6addr.h \
+ inaddr.h \
+ initguid.h \
+ intshcut.h \
+ ipexport.h \
+ iphlpapi.h \
+ ipifcons.h \
+ ipmib.h \
+ iprtrmib.h \
+ iptypes.h \
+ isguids.h \
+ knownfolders.h \
+ ks.h \
+ ksguid.h \
+ ksmedia.h \
+ lm.h \
+ lmaccess.h \
+ lmapibuf.h \
+ lmat.h \
+ lmbrowsr.h \
+ lmcons.h \
+ lmerr.h \
+ lmjoin.h \
+ lmmsg.h \
+ lmserver.h \
+ lmshare.h \
+ lmstats.h \
+ lmuse.h \
+ lmuseflg.h \
+ lmwksta.h \
+ loadperf.h \
+ lzexpand.h \
+ mapi.h \
+ mapicode.h \
+ mapidefs.h \
+ mapiform.h \
+ mapiguid.h \
+ mapitags.h \
+ mapiutil.h \
+ mapival.h \
+ mapix.h \
+ mciavi.h \
+ mcx.h \
+ mediaerr.h \
+ midles.h \
+ minmax.h \
+ mmddk.h \
+ mmreg.h \
+ mmsystem.h \
+ mprapi.h \
+ mprerror.h \
+ msacm.h \
+ msacmdlg.h \
+ msacmdrv.h \
+ mscat.h \
+ msdaguid.h \
+ mshtmcid.h \
+ mshtmdid.h \
+ msi.h \
+ msidefs.h \
+ msiquery.h \
+ mssip.h \
+ mstcpip.h \
+ msvcrt/assert.h \
+ msvcrt/conio.h \
+ msvcrt/crtdbg.h \
+ msvcrt/crtdefs.h \
+ msvcrt/ctype.h \
+ msvcrt/direct.h \
+ msvcrt/dirent.h \
+ msvcrt/dos.h \
+ msvcrt/eh.h \
+ msvcrt/errno.h \
+ msvcrt/fcntl.h \
+ msvcrt/float.h \
+ msvcrt/io.h \
+ msvcrt/limits.h \
+ msvcrt/locale.h \
+ msvcrt/malloc.h \
+ msvcrt/math.h \
+ msvcrt/mbctype.h \
+ msvcrt/mbstring.h \
+ msvcrt/memory.h \
+ msvcrt/process.h \
+ msvcrt/search.h \
+ msvcrt/setjmp.h \
+ msvcrt/share.h \
+ msvcrt/signal.h \
+ msvcrt/stddef.h \
+ msvcrt/stdio.h \
+ msvcrt/stdlib.h \
+ msvcrt/string.h \
+ msvcrt/sys/locking.h \
+ msvcrt/sys/stat.h \
+ msvcrt/sys/timeb.h \
+ msvcrt/sys/types.h \
+ msvcrt/sys/unistd.h \
+ msvcrt/sys/utime.h \
+ msvcrt/time.h \
+ msvcrt/unistd.h \
+ msvcrt/wchar.h \
+ msvcrt/wctype.h \
+ mswsock.h \
+ msxml2did.h \
+ msxml6did.h \
+ msxmldid.h \
+ nb30.h \
+ ndrtypes.h \
+ nldef.h \
+ npapi.h \
+ nspapi.h \
+ ntddcdrm.h \
+ ntddndis.h \
+ ntddscsi.h \
+ ntddstor.h \
+ ntdsapi.h \
+ ntquery.h \
+ ntsecapi.h \
+ ntsecpkg.h \
+ ntstatus.h \
+ objbase.h \
+ objsel.h \
+ odbcinst.h \
+ ole2.h \
+ ole2ver.h \
+ oleauto.h \
+ olectl.h \
+ oledberr.h \
+ oledlg.h \
+ opnrst.idl \
+ patchapi.h \
+ pdh.h \
+ pdhmsg.h \
+ pktdef.h \
+ poppack.h \
+ powrprof.h \
+ profinfo.h \
+ propkey.h \
+ propkeydef.h \
+ propvarutil.h \
+ prsht.h \
+ psapi.h \
+ pshpack1.h \
+ pshpack2.h \
+ pshpack4.h \
+ pshpack8.h \
+ ras.h \
+ rasdlg.h \
+ raserror.h \
+ reason.h \
+ regstr.h \
+ restartmanager.h \
+ richedit.h \
+ rmxfguid.h \
+ row.idl \
+ rowchg.idl \
+ rowpos.idl \
+ rowpsc.idl \
+ rpc.h \
+ rpcasync.h \
+ rpcdce.h \
+ rpcdcep.h \
+ rpcndr.h \
+ rpcnterr.h \
+ rpcproxy.h \
+ rpcsal.h \
+ rstbas.idl \
+ rstinf.idl \
+ rstloc.idl \
+ rstnot.idl \
+ rtutils.h \
+ scarderr.h \
+ schannel.h \
+ schemadef.h \
+ schnlsp.h \
+ sddl.h \
+ secext.h \
+ security.h \
+ sensapi.h \
+ sesprp.idl \
+ setupapi.h \
+ sfc.h \
+ shdispid.h \
+ shellapi.h \
+ shlguid.h \
+ shlobj.h \
+ shlwapi.h \
+ sipbase.h \
+ slerror.h \
+ slpublic.h \
+ snmp.h \
+ softpub.h \
+ sql.h \
+ sqlext.h \
+ sqltypes.h \
+ srcrst.idl \
+ srrestoreptapi.h \
+ sspi.h \
+ sti.h \
+ storage.h \
+ strsafe.h \
+ svrapi.h \
+ t2embapi.h \
+ tapi.h \
+ tchar.h \
+ tcpmib.h \
+ textserv.h \
+ tlhelp32.h \
+ tmschema.h \
+ traffic.h \
+ twain.h \
+ udpmib.h \
+ uiautomation.h \
+ uiautomationcoreapi.h \
+ userenv.h \
+ usp10.h \
+ uuids.h \
+ uxtheme.h \
+ vdmdbg.h \
+ ver.h \
+ verrsrc.h \
+ vfw.h \
+ vfwmsgs.h \
+ vmrender.idl \
+ vsstyle.h \
+ vssym32.h \
+ werapi.h \
+ wfext.h \
+ wia.h \
+ winbase.h \
+ wincon.h \
+ wincred.h \
+ wincrypt.h \
+ windef.h \
+ windns.h \
+ windows.h \
+ windowsx.h \
+ wine/debug.h \
+ wine/exception.h \
+ wine/library.h \
+ wine/unicode.h \
+ winerror.h \
+ winevt.h \
+ wingdi.h \
+ winhttp.h \
+ wininet.h \
+ winineti.h \
+ winioctl.h \
+ winldap.h \
+ winnetwk.h \
+ winnls.h \
+ winnls32.h \
+ winnt.h \
+ winnt.rh \
+ winperf.h \
+ winreg.h \
+ winresrc.h \
+ winsafer.h \
+ winscard.h \
+ winsmcrd.h \
+ winsnmp.h \
+ winsock.h \
+ winsock2.h \
+ winspool.h \
+ winsvc.h \
+ wintab.h \
+ wintabx.h \
+ winternl.h \
+ wintrust.h \
+ winuser.h \
+ winuser.rh \
+ winver.h \
+ wmistr.h \
+ wnaspi32.h \
+ wownt32.h \
+ ws2def.h \
+ ws2ipdef.h \
+ ws2spi.h \
+ ws2tcpip.h \
+ wshisotp.h \
+ wsipx.h \
+ wsnwlink.h \
+ wtsapi32.h \
+ xcmc.h \
+ xinput.h \
+ xmldom.h \
+ xmldom.idl \
+ xmldomdid.h \
+ xmldso.idl \
+ xmldsodid.h \
+ zmouse.h
+
+EXTRASUBDIRS = \
+ ddk \
+ msvcrt \
+ msvcrt/sys \
+ wine
+
+INSTALLDIRS = \
+ $(DESTDIR)$(includedir)/windows/ddk \
+ $(DESTDIR)$(includedir)/windows \
+ $(DESTDIR)$(includedir)/msvcrt/sys \
+ $(DESTDIR)$(includedir)/msvcrt \
+ $(DESTDIR)$(includedir)
+
+IDL_H_SRCS = $(PUBLIC_IDL_H_SRCS) $(PRIVATE_IDL_H_SRCS)
+
+@MAKE_RULES@
+
+OBJDIR_INCLUDES = $(PUBLIC_IDL_H_SRCS:.idl=.h) $(XTEMPLATE_SRCS:.x=.h)
+
+all: $(IDL_H_SRCS:.idl=.h) $(IDL_TLB_SRCS:.idl=.tlb) $(XTEMPLATE_SRCS:.x=.h)
+
+rmxftmpl.h: rmxftmpl.x $(MAKEXFTMPL)
+ $(MAKEXFTMPL) -i D3DRM_XTEMPLATES -s D3DRM_XTEMPLATE_BYTES -o $@ $(srcdir)/rmxftmpl.x
+
+install install-dev:: $(OBJDIR_INCLUDES) $(INSTALLDIRS)
+ for f in $(SRCDIR_INCLUDES); do case $$f in \
+ wine/*) $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/`expr $$f : 'wine/\(.*\)'` ;; \
+ msvcrt/*) $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/$$f ;; \
+ *) $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/windows/$$f ;; \
+ esac; done
+ for f in $(OBJDIR_INCLUDES); do case $$f in \
+ wine/*) $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/`expr $$f : 'wine/\(.*\)'` ;; \
+ msvcrt/*) $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/$$f ;; \
+ *) $(INSTALL_DATA) $$f $(DESTDIR)$(includedir)/windows/$$f ;; \
+ esac; done
+
+# Don't just do a rm -rf on $(includedir) -- don't want to wipe out
+# anything extra the user may have put there.
+uninstall::
+ for f in $(SRCDIR_INCLUDES) $(OBJDIR_INCLUDES); do case $$f in \
+ wine/*) $(RM) $(DESTDIR)$(includedir)/`expr $$f : 'wine/\(.*\)'` ;; \
+ msvcrt/*) $(RM) $(DESTDIR)$(includedir)/$$f ;; \
+ *) $(RM) $(DESTDIR)$(includedir)/windows/$$f ;; \
+ esac; done
+ -rmdir $(INSTALLDIRS)
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h
new file mode 100644
index 00000000..e361f219
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/accctrl.h
@@ -0,0 +1,460 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ACCCTRL_H
+#define __WINE_ACCCTRL_H
+
+#include <wtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _SE_OBJECT_TYPE
+{
+ SE_UNKNOWN_OBJECT_TYPE = 0,
+ SE_FILE_OBJECT,
+ SE_SERVICE,
+ SE_PRINTER,
+ SE_REGISTRY_KEY,
+ SE_LMSHARE,
+ SE_KERNEL_OBJECT,
+ SE_WINDOW_OBJECT,
+ SE_DS_OBJECT,
+ SE_DS_OBJECT_ALL,
+ SE_PROVIDER_DEFINED_OBJECT,
+ SE_WMIGUID_OBJECT,
+ SE_REGISTRY_WOW64_32KEY
+} SE_OBJECT_TYPE;
+
+typedef enum _TRUSTEE_TYPE
+{
+ TRUSTEE_IS_UNKNOWN,
+ TRUSTEE_IS_USER,
+ TRUSTEE_IS_GROUP,
+ TRUSTEE_IS_DOMAIN,
+ TRUSTEE_IS_ALIAS,
+ TRUSTEE_IS_WELL_KNOWN_GROUP,
+ TRUSTEE_IS_DELETED,
+ TRUSTEE_IS_INVALID,
+ TRUSTEE_IS_COMPUTER
+} TRUSTEE_TYPE;
+
+typedef enum _TRUSTEE_FORM
+{
+ TRUSTEE_IS_SID,
+ TRUSTEE_IS_NAME,
+ TRUSTEE_BAD_FORM,
+ TRUSTEE_IS_OBJECTS_AND_SID,
+ TRUSTEE_IS_OBJECTS_AND_NAME
+} TRUSTEE_FORM;
+
+typedef enum _MULTIPLE_TRUSTEE_OPERATION
+{
+ NO_MULTIPLE_TRUSTEE,
+ TRUSTEE_IS_IMPERSONATE,
+} MULTIPLE_TRUSTEE_OPERATION;
+
+typedef struct _OBJECTS_AND_SID
+{
+ DWORD ObjectsPresent;
+ GUID ObjectTypeGuid;
+ GUID InheritedObjectTypeGuid;
+ SID *pSid;
+} OBJECTS_AND_SID, *POBJECTS_AND_SID;
+
+typedef struct _OBJECTS_AND_NAME_A
+{
+ DWORD ObjectsPresent;
+ SE_OBJECT_TYPE ObjectType;
+ LPSTR ObjectTypeName;
+ LPSTR InheritedObjectTypeName;
+ LPSTR ptstrName;
+} OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;
+
+typedef struct _OBJECTS_AND_NAME_W
+{
+ DWORD ObjectsPresent;
+ SE_OBJECT_TYPE ObjectType;
+ LPWSTR ObjectTypeName;
+ LPWSTR InheritedObjectTypeName;
+ LPWSTR ptstrName;
+} OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;
+
+DECL_WINELIB_TYPE_AW(OBJECTS_AND_NAME_)
+DECL_WINELIB_TYPE_AW(POBJECTS_AND_NAME_)
+
+typedef struct _TRUSTEE_A
+{
+ struct _TRUSTEE_A *pMultipleTrustee;
+ MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
+ TRUSTEE_FORM TrusteeForm;
+ TRUSTEE_TYPE TrusteeType;
+ LPSTR ptstrName;
+} TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
+
+typedef struct _TRUSTEE_W
+{
+ struct _TRUSTEE_W *pMultipleTrustee;
+ MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
+ TRUSTEE_FORM TrusteeForm;
+ TRUSTEE_TYPE TrusteeType;
+ LPWSTR ptstrName;
+} TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;
+
+DECL_WINELIB_TYPE_AW(TRUSTEE_)
+DECL_WINELIB_TYPE_AW(PTRUSTEE_)
+DECL_WINELIB_TYPE_AW(TRUSTEE)
+DECL_WINELIB_TYPE_AW(PTRUSTEE)
+
+typedef enum _ACCESS_MODE
+{
+ NOT_USED_ACCESS = 0,
+ GRANT_ACCESS,
+ SET_ACCESS,
+ DENY_ACCESS,
+ REVOKE_ACCESS,
+ SET_AUDIT_SUCCESS,
+ SET_AUDIT_FAILURE
+} ACCESS_MODE;
+
+#define NO_INHERITANCE 0x0
+#define SUB_OBJECTS_ONLY_INHERIT 0x1
+#define SUB_CONTAINERS_ONLY_INHERIT 0x2
+#define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
+#define INHERIT_NO_PROPAGATE 0x4
+#define INHERIT_ONLY 0x8
+#define INHERITED_ACCESS_ENTRY 0x10
+#define INHERITED_PARENT 0x10000000
+#define INHERITED_GRANDPARENT 0x20000000
+
+typedef struct _EXPLICIT_ACCESS_A
+{
+ DWORD grfAccessPermissions;
+ ACCESS_MODE grfAccessMode;
+ DWORD grfInheritance;
+ TRUSTEE_A Trustee;
+} EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;
+
+typedef struct _EXPLICIT_ACCESS_W
+{
+ DWORD grfAccessPermissions;
+ ACCESS_MODE grfAccessMode;
+ DWORD grfInheritance;
+ TRUSTEE_W Trustee;
+} EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;
+
+DECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS_)
+DECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS_)
+DECL_WINELIB_TYPE_AW(EXPLICIT_ACCESS)
+DECL_WINELIB_TYPE_AW(PEXPLICIT_ACCESS)
+
+typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
+typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
+
+typedef struct _ACTRL_ACCESS_ENTRYA
+{
+ TRUSTEE_A Trustee;
+ ULONG fAccessFlags;
+ ACCESS_RIGHTS Access;
+ ACCESS_RIGHTS ProvSpecificAccess;
+ INHERIT_FLAGS Inheritance;
+ LPSTR lpInheritProperty;
+} ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;
+
+typedef struct _ACTRL_ACCESS_ENTRYW
+{
+ TRUSTEE_W Trustee;
+ ULONG fAccessFlags;
+ ACCESS_RIGHTS Access;
+ ACCESS_RIGHTS ProvSpecificAccess;
+ INHERIT_FLAGS Inheritance;
+ LPWSTR lpInheritProperty;
+} ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY)
+
+
+typedef struct _ACTRL_ACCESS_ENTRY_LISTA
+{
+ ULONG cEntries;
+ ACTRL_ACCESS_ENTRYA *pAccessList;
+} ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;
+
+typedef struct _ACTRL_ACCESS_ENTRY_LISTW
+{
+ ULONG cEntries;
+ ACTRL_ACCESS_ENTRYW *pAccessList;
+} ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_ENTRY_LIST)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_ENTRY_LIST)
+
+typedef struct _ACTRL_PROPERTY_ENTRYA
+{
+ LPSTR lpProperty;
+ PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
+ ULONG fListFlags;
+} ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;
+
+typedef struct _ACTRL_PROPERTY_ENTRYW
+{
+ LPWSTR lpProperty;
+ PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
+ ULONG fListFlags;
+} ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_PROPERTY_ENTRY)
+DECL_WINELIB_TYPE_AW(PACTRL_PROPERTY_ENTRY)
+
+typedef struct _ACTRL_ALISTA
+{
+ ULONG cEntries;
+ PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
+} ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;
+
+typedef struct _ACTRL_ALISTW
+{
+ ULONG cEntries;
+ PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
+} ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS)
+DECL_WINELIB_TYPE_AW(ACTRL_AUDIT)
+DECL_WINELIB_TYPE_AW(PACTRL_AUDIT)
+
+#define TRUSTEE_ACCESS_ALLOWED 0x00000001
+#define TRUSTEE_ACCESS_READ 0x00000002
+#define TRUSTEE_ACCESS_WRITE 0x00000004
+
+#define TRUSTEE_ACCESS_EXPLICIT 0x00000001
+#define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ|TRUSTEE_ACCESS_WRITE)
+#define TRUSTEE_ACCESS_ALL 0xFFFFFFFF
+
+typedef struct _TRUSTEE_ACCESSA
+{
+ LPSTR lpProperty;
+ ACCESS_RIGHTS Access;
+ ULONG fAccessFlags;
+ ULONG fReturnedAccess;
+} TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;
+
+typedef struct _TRUSTEE_ACCESSW
+{
+ LPWSTR lpProperty;
+ ACCESS_RIGHTS Access;
+ ULONG fAccessFlags;
+ ULONG fReturnedAccess;
+} TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;
+
+DECL_WINELIB_TYPE_AW(TRUSTEE_ACCESS)
+DECL_WINELIB_TYPE_AW(PTRUSTEE_ACCESS)
+
+#define ACTRL_RESERVED 0x00000000
+#define ACTRL_PERM_1 0x00000001
+#define ACTRL_PERM_2 0x00000002
+#define ACTRL_PERM_3 0x00000004
+#define ACTRL_PERM_4 0x00000008
+#define ACTRL_PERM_5 0x00000010
+#define ACTRL_PERM_6 0x00000020
+#define ACTRL_PERM_7 0x00000040
+#define ACTRL_PERM_8 0x00000080
+#define ACTRL_PERM_9 0x00000100
+#define ACTRL_PERM_10 0x00000200
+#define ACTRL_PERM_11 0x00000400
+#define ACTRL_PERM_12 0x00000800
+#define ACTRL_PERM_13 0x00001000
+#define ACTRL_PERM_14 0x00002000
+#define ACTRL_PERM_15 0x00004000
+#define ACTRL_PERM_16 0x00008000
+#define ACTRL_PERM_17 0x00010000
+#define ACTRL_PERM_18 0x00020000
+#define ACTRL_PERM_19 0x00040000
+#define ACTRL_PERM_20 0x00080000
+
+#define ACTRL_ACCESS_ALLOWED 0x00000001
+#define ACTRL_ACCESS_DENIED 0x00000002
+#define ACTRL_AUDIT_SUCCESS 0x00000004
+#define ACTRL_AUDIT_FAILURE 0x00000008
+
+#define ACTRL_ACCESS_PROTECTED 0x00000001
+
+#define ACTRL_SYSTEM_ACCESS 0x04000000
+#define ACTRL_DELETE 0x08000000
+#define ACTRL_READ_CONTROL 0x10000000
+#define ACTRL_CHANGE_ACCESS 0x20000000
+#define ACTRL_CHANGE_OWNER 0x40000000
+#define ACTRL_SYNCHRONIZE 0x80000000
+#define ACTRL_STD_RIGHTS_ALL 0xf8000000
+#define ACTRL_STD_RIGHT_REQUIRED (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE)
+
+#define ACTRL_DS_OPEN ACTRL_RESERVED
+#define ACTRL_DS_CREATE_CHILD ACTRL_PERM_1
+#define ACTRL_DS_DELETE_CHILD ACTRL_PERM_2
+#define ACTRL_DS_LIST ACTRL_PERM_3
+#define ACTRL_DS_SELF ACTRL_PERM_4
+#define ACTRL_DS_READ_PROP ACTRL_PERM_5
+#define ACTRL_DS_WRITE_PROP ACTRL_PERM_6
+#define ACTRL_DS_DELETE_TREE ACTRL_PERM_7
+#define ACTRL_DS_LIST_OBJECT ACTRL_PERM_8
+#define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9
+
+#define ACTRL_FILE_READ ACTRL_PERM_1
+#define ACTRL_FILE_WRITE ACTRL_PERM_2
+#define ACTRL_FILE_APPEND ACTRL_PERM_3
+#define ACTRL_FILE_READ_PROP ACTRL_PERM_4
+#define ACTRL_FILE_WRITE_PROP ACTRL_PERM_5
+#define ACTRL_FILE_EXECUTE ACTRL_PERM_6
+#define ACTRL_FILE_READ_ATTRIB ACTRL_PERM_8
+#define ACTRL_FILE_WRITE_ATTRIB ACTRL_PERM_9
+#define ACTRL_FILE_CREATE_PIPE ACTRL_PERM_10
+#define ACTRL_DIR_LIST ACTRL_PERM_1
+#define ACTRL_DIR_CREATE_OBJECT ACTRL_PERM_2
+#define ACTRL_DIR_CREATE_CHILD ACTRL_PERM_3
+#define ACTRL_DIR_DELETE_CHILD ACTRL_PERM_7
+#define ACTRL_DIR_TRAVERSE ACTRL_PERM_6
+#define ACTRL_KERNEL_TERMINATE ACTRL_PERM_1
+#define ACTRL_KERNEL_THREAD ACTRL_PERM_2
+#define ACTRL_KERNEL_VM ACTRL_PERM_3
+#define ACTRL_KERNEL_VM_READ ACTRL_PERM_4
+#define ACTRL_KERNEL_VM_WRITE ACTRL_PERM_5
+#define ACTRL_KERNEL_DUP_HANDLE ACTRL_PERM_6
+#define ACTRL_KERNEL_PROCESS ACTRL_PERM_7
+#define ACTRL_KERNEL_SET_INFO ACTRL_PERM_8
+#define ACTRL_KERNEL_GET_INFO ACTRL_PERM_9
+#define ACTRL_KERNEL_CONTROL ACTRL_PERM_10
+#define ACTRL_KERNEL_ALERT ACTRL_PERM_11
+#define ACTRL_KERNEL_GET_CONTEXT ACTRL_PERM_12
+#define ACTRL_KERNEL_SET_CONTEXT ACTRL_PERM_13
+#define ACTRL_KERNEL_TOKEN ACTRL_PERM_14
+#define ACTRL_KERNEL_IMPERSONATE ACTRL_PERM_15
+#define ACTRL_KERNEL_DIMPERSONATE ACTRL_PERM_16
+#define ACTRL_PRINT_SADMIN ACTRL_PERM_1
+#define ACTRL_PRINT_SLIST ACTRL_PERM_2
+#define ACTRL_PRINT_PADMIN ACTRL_PERM_3
+#define ACTRL_PRINT_PUSE ACTRL_PERM_4
+#define ACTRL_PRINT_JADMIN ACTRL_PERM_5
+#define ACTRL_SVC_GET_INFO ACTRL_PERM_1
+#define ACTRL_SVC_SET_INFO ACTRL_PERM_2
+#define ACTRL_SVC_STATUS ACTRL_PERM_3
+#define ACTRL_SVC_LIST ACTRL_PERM_4
+#define ACTRL_SVC_START ACTRL_PERM_5
+#define ACTRL_SVC_STOP ACTRL_PERM_6
+#define ACTRL_SVC_PAUSE ACTRL_PERM_7
+#define ACTRL_SVC_INTERROGATE ACTRL_PERM_8
+#define ACTRL_SVC_UCONTROL ACTRL_PERM_9
+#define ACTRL_REG_QUERY ACTRL_PERM_1
+#define ACTRL_REG_SET ACTRL_PERM_2
+#define ACTRL_REG_CREATE_CHILD ACTRL_PERM_3
+#define ACTRL_REG_LIST ACTRL_PERM_4
+#define ACTRL_REG_NOTIFY ACTRL_PERM_5
+#define ACTRL_REG_LINK ACTRL_PERM_6
+#define ACTRL_WIN_CLIPBRD ACTRL_PERM_1
+#define ACTRL_WIN_GLOBAL_ATOMS ACTRL_PERM_2
+#define ACTRL_WIN_CREATE ACTRL_PERM_3
+#define ACTRL_WIN_LIST_DESK ACTRL_PERM_4
+#define ACTRL_WIN_LIST ACTRL_PERM_5
+#define ACTRL_WIN_READ_ATTRIBS ACTRL_PERM_6
+#define ACTRL_WIN_WRITE_ATTRIBS ACTRL_PERM_7
+#define ACTRL_WIN_SCREEN ACTRL_PERM_8
+#define ACTRL_WIN_EXIT ACTRL_PERM_9
+
+#define ACTRL_ACCESS_NO_OPTIONS 0x00000000
+#define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001
+
+typedef struct _ACTRL_OVERLAPPED
+{
+ union {
+ PVOID Provider;
+ ULONG Reserved1;
+ } DUMMYUNIONNAME;
+ ULONG Reserved2;
+ HANDLE hEvent;
+} ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
+
+typedef struct _ACTRL_ACCESS_INFOA
+{
+ ULONG fAccessPermission;
+ LPSTR lpAccessPermissionName;
+} ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;
+
+typedef struct _ACTRL_ACCESS_INFOW
+{
+ ULONG fAccessPermission;
+ LPWSTR lpAccessPermissionName;
+} ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_ACCESS_INFO)
+DECL_WINELIB_TYPE_AW(PACTRL_ACCESS_INFO)
+
+typedef struct _ACTRL_CONTROL_INFOA
+{
+ LPSTR lpControlId;
+ LPSTR lpControlName;
+} ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;
+
+typedef struct _ACTRL_CONTROL_INFOW
+{
+ LPWSTR lpControlId;
+ LPWSTR lpControlName;
+} ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;
+
+DECL_WINELIB_TYPE_AW(ACTRL_CONTROL_INFO)
+DECL_WINELIB_TYPE_AW(PACTRL_CONTROL_INFO)
+
+typedef enum _PROGRESS_INVOKE_SETTING {
+ ProgressInvokeNever = 1,
+ ProgressInvokeEveryObject,
+ ProgressInvokeOnError,
+ ProgressCancelOperation,
+ ProgressRetryOperation
+} PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING;
+
+typedef struct _INHERITED_FROMA
+{
+ LONG GenerationGap;
+ LPSTR AncestorName;
+} INHERITED_FROMA, *PINHERITED_FROMA;
+
+typedef struct _INHERITED_FROMW
+{
+ LONG GenerationGap;
+ LPWSTR AncestorName;
+} INHERITED_FROMW, *PINHERITED_FROMW;
+
+DECL_WINELIB_TYPE_AW(INHERITED_FROM)
+DECL_WINELIB_TYPE_AW(PINHERITED_FROM)
+
+#define AccFree LocalFree
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ACCCTRL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl
new file mode 100644
index 00000000..5c32bd34
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/access.idl
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a8c-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IAccessor : IUnknown
+{
+
+ typedef DWORD DBACCESSORFLAGS;
+
+ typedef DWORD DBBINDSTATUS;
+
+ [local]
+ HRESULT AddRefAccessor([in] HACCESSOR hAccessor,
+ [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount);
+
+ [call_as(AddRefAccessor)]
+ HRESULT RemoteAddRefAccessor([in] HACCESSOR hAccessor,
+ [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT CreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags,
+ [in] DBCOUNTITEM cBindings,
+ [in, size_is(cBindings), annotation("__in_ecount(cBindings)")] const DBBINDING rgBindings[],
+ [in] DBLENGTH cbRowSize,
+ [out, annotation("__out")] HACCESSOR *phAccessor,
+ [out, size_is(cBindings), annotation("__out_ecount_opt(cBindings)")] DBBINDSTATUS rgStatus[]);
+
+ [call_as(CreateAccessor)]
+ HRESULT RemoteCreateAccessor([in] DBACCESSORFLAGS dwAccessorFlags,
+ [in] DBCOUNTITEM cBindings,
+ [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings,
+ [in] DBLENGTH cbRowSize,
+ [out] HACCESSOR *phAccessor,
+ [in, out, unique, size_is((ULONG)cBindings)] DBBINDSTATUS *rgStatus,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetBindings([in] HACCESSOR hAccessor,
+ [out, annotation("__out")] DBACCESSORFLAGS *pdwAccessorFlags,
+ [in, out, annotation("__out_opt")] DBCOUNTITEM *pcBindings,
+ [out, size_is(,*pcBindings), annotation("__deref_out_ecount_opt(*pcBindings)")] DBBINDING **prgBindings);
+
+ [call_as(GetBindings)]
+ HRESULT RemoteGetBindings([in] HACCESSOR hAccessor,
+ [out] DBACCESSORFLAGS *pdwAccessorFlags,
+ [in, out] DBCOUNTITEM *pcBindings,
+ [out, size_is(,(ULONG)*pcBindings)] DBBINDING **prgBindings,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT ReleaseAccessor([in] HACCESSOR hAccessor,
+ [in, out, unique, annotation("__out_opt")] DBREFCOUNT *pcRefCount);
+
+ [call_as(ReleaseAccessor)]
+ HRESULT RemoteReleaseAccessor([in] HACCESSOR hAccessor,
+ [in, out, unique] DBREFCOUNT *pcRefCount,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h
new file mode 100644
index 00000000..694804da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclapi.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ACLAPI_H
+#define __WINE_ACLAPI_H
+
+#include <windows.h>
+#include <accctrl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (*FN_PROGRESS)(LPWSTR,DWORD,PPROG_INVOKE_SETTING,PVOID,BOOL);
+
+WINADVAPI DWORD WINAPI GetExplicitEntriesFromAclA( PACL, PULONG, PEXPLICIT_ACCESS_A* );
+WINADVAPI DWORD WINAPI GetExplicitEntriesFromAclW( PACL, PULONG, PEXPLICIT_ACCESS_W* );
+#define GetExplicitEntriesFromAcl WINELIB_NAME_AW(GetExplicitEntriesFromAcl)
+WINADVAPI DWORD WINAPI GetSecurityInfo( HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD WINAPI GetSecurityInfoExA(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCSTR, LPCSTR, PACTRL_ACCESSA*, PACTRL_AUDITA*, LPSTR*, LPSTR*);
+WINADVAPI DWORD WINAPI GetSecurityInfoExW(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, LPCWSTR, LPCWSTR, PACTRL_ACCESSW*, PACTRL_AUDITW*, LPWSTR*, LPWSTR*);
+#define GetSecurityInfoEx WINELIB_NAME_AW(GetSecurityInfoEx)
+WINADVAPI DWORD WINAPI GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
+WINADVAPI DWORD WINAPI GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*);
+#define GetNamedSecurityInfo WINELIB_NAME_AW(GetNamedSecurityInfo)
+WINADVAPI DWORD WINAPI SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+WINADVAPI DWORD WINAPI SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+#define SetNamedSecurityInfo WINELIB_NAME_AW(SetNamedSecurityInfo)
+WINADVAPI DWORD WINAPI SetEntriesInAclA( ULONG, PEXPLICIT_ACCESSA, PACL, PACL*);
+WINADVAPI DWORD WINAPI SetEntriesInAclW( ULONG, PEXPLICIT_ACCESSW, PACL, PACL*);
+#define SetEntriesInAcl WINELIB_NAME_AW(SetEntriesInAcl)
+WINADVAPI DWORD WINAPI SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormA( PTRUSTEEA );
+WINADVAPI TRUSTEE_FORM WINAPI GetTrusteeFormW( PTRUSTEEW );
+#define GetTrusteeForm WINELIB_NAME_AW(GetTrusteeForm)
+WINADVAPI LPSTR WINAPI GetTrusteeNameA( PTRUSTEEA );
+WINADVAPI LPWSTR WINAPI GetTrusteeNameW( PTRUSTEEW );
+#define GetTrusteeName WINELIB_NAME_AW(GetTrusteeName)
+WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeA( PTRUSTEEA );
+WINADVAPI TRUSTEE_TYPE WINAPI GetTrusteeTypeW( PTRUSTEEW );
+#define GetTrusteeType WINELIB_NAME_AW(GetTrusteeType)
+WINADVAPI DWORD WINAPI BuildSecurityDescriptorA( PTRUSTEEA, PTRUSTEEA, ULONG, PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* );
+WINADVAPI DWORD WINAPI BuildSecurityDescriptorW( PTRUSTEEW, PTRUSTEEW, ULONG, PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR, PULONG, PSECURITY_DESCRIPTOR* );
+#define BuildSecurityDescriptor WINELIB_NAME_AW(BuildSecurityDescriptor)
+WINADVAPI void WINAPI BuildTrusteeWithNameA( PTRUSTEEA, LPSTR );
+WINADVAPI void WINAPI BuildTrusteeWithNameW( PTRUSTEEW, LPWSTR );
+#define BuildTrusteeWithName WINELIB_NAME_AW(BuildTrusteeWithName)
+WINADVAPI void WINAPI BuildTrusteeWithObjectsAndNameA(PTRUSTEEA, POBJECTS_AND_NAME_A, SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR);
+WINADVAPI void WINAPI BuildTrusteeWithObjectsAndNameW(PTRUSTEEW, POBJECTS_AND_NAME_W, SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR);
+#define BuildTrusteeWithObjectsAndName WINELIB_NAME_AW(BuildTrusteeWithObjectsAndName)
+WINADVAPI void WINAPI BuildTrusteeWithObjectsAndSidA(PTRUSTEEA, POBJECTS_AND_SID, GUID*, GUID*, PSID);
+WINADVAPI void WINAPI BuildTrusteeWithObjectsAndSidW(PTRUSTEEW, POBJECTS_AND_SID, GUID*, GUID*, PSID);
+#define BuildTrusteeWithObjectsAndSid WINELIB_NAME_AW(BuildTrusteeWithObjectsAndSid)
+WINADVAPI void WINAPI BuildExplicitAccessWithNameA(PEXPLICIT_ACCESSA, LPSTR, DWORD, ACCESS_MODE, DWORD);
+WINADVAPI void WINAPI BuildExplicitAccessWithNameW(PEXPLICIT_ACCESSW, LPWSTR, DWORD, ACCESS_MODE, DWORD);
+#define BuildExplicitAccessWithName WINELIB_NAME_AW(BuildExplicitAccessWithName)
+WINADVAPI void WINAPI BuildTrusteeWithSidA(PTRUSTEEA pTrustee, PSID pSid);
+WINADVAPI void WINAPI BuildTrusteeWithSidW(PTRUSTEEW pTrustee, PSID pSid);
+#define BuildTrusteeWithSid WINELIB_NAME_AW(BuildTrusteeWithSid)
+WINADVAPI DWORD WINAPI GetEffectiveRightsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK);
+WINADVAPI DWORD WINAPI GetEffectiveRightsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK);
+#define GetEffectiveRightsFromAcl WINELIB_NAME_AW(GetEffectiveRightsFromAcl)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ACLAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h
new file mode 100644
index 00000000..e1ad3189
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/aclui.h
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2009 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ACLUI_H
+#define __WINE_ACLUI_H
+
+#include <objbase.h>
+#include <commctrl.h>
+#include <accctrl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct _SI_OBJECT_INFO
+{
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ LPWSTR pszServerName;
+ LPWSTR pszObjectName;
+ LPWSTR pszPageTitle;
+ GUID guidObjectType;
+} SI_OBJECT_INFO, *PSI_OBJECT_INFO;
+
+#define SI_EDIT_PERMS 0x00000000
+#define SI_EDIT_OWNER 0x00000001
+#define SI_EDIT_AUDITS 0x00000002
+#define SI_CONTAINER 0x00000004
+#define SI_READONLY 0x00000008
+#define SI_ADVANCED 0x00000010
+#define SI_RESET 0x00000020
+#define SI_OWNER_READONLY 0x00000040
+#define SI_EDIT_PROPERTIES 0x00000080
+#define SI_OWNER_RECURSE 0x00000100
+#define SI_NO_ACL_PROTECT 0x00000200
+#define SI_NO_TREE_APPLY 0x00000400
+#define SI_PAGE_TITLE 0x00000800
+#define SI_SERVER_IS_DC 0x00001000
+#define SI_RESET_DACL_TREE 0x00004000
+#define SI_RESET_SACL_TREE 0x00008000
+#define SI_OBJECT_GUID 0x00010000
+#define SI_EDIT_EFFECTIVE 0x00020000
+#define SI_RESET_DACL 0x00040000
+#define SI_RESET_SACL 0x00080000
+#define SI_RESET_OWNER 0x00100000
+#define SI_NO_ADDITIONAL_PERMISSION 0x00200000
+#define SI_VIEW_ONLY 0x00400000
+#define SI_PERMS_ELEVATION_REQUIRED 0x01000000
+#define SI_AUDITS_ELEVATION_REQUIRED 0x02000000
+#define SI_OWNER_ELEVATION_REQUIRED 0x04000000
+#define SI_MAY_WRITE 0x10000000
+
+#define SI_EDIT_ALL (SI_EDIT_PERMS | SI_EDIT_OWNER | SI_EDIT_AUDITS)
+
+typedef struct _SI_ACCESS
+{
+ const GUID *pguid;
+ ACCESS_MASK mask;
+ LPCWSTR pszName;
+ DWORD dwFlags;
+} SI_ACCESS, *PSI_ACCESS;
+
+#define SI_ACCESS_SPECIFIC 0x00010000
+#define SI_ACCESS_GENERAL 0x00020000
+#define SI_ACCESS_CONTAINER 0x00040000
+#define SI_ACCESS_PROPERTY 0x00080000
+
+typedef struct _SI_INHERIT_TYPE
+{
+ const GUID *pguid;
+ ULONG dwFlags;
+ LPCWSTR pszName;
+} SI_INHERIT_TYPE, *PSI_INHERIT_TYPE;
+
+typedef enum _SI_PAGE_TYPE
+{
+ SI_PAGE_PERM,
+ SI_PAGE_ADVPERM,
+ SI_PAGE_AUDIT,
+ SI_PAGE_OWNER,
+ SI_PAGE_EFFECTIVE,
+ SI_PAGE_TAKEOWNERSHIP
+} SI_PAGE_TYPE;
+
+#define PSPCB_SI_INITDIALOG (WM_USER + 1)
+
+#undef INTERFACE
+#define INTERFACE ISecurityInformation
+DECLARE_INTERFACE_IID_(ISecurityInformation, IUnknown, "965fc360-16ff-11d0-91cb-00aa00bbb723")
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* ISecurityInformation methods */
+ STDMETHOD(GetObjectInformation) (THIS_ PSI_OBJECT_INFO pObjectInfo ) PURE;
+ STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation,
+ PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
+ BOOL fDefault ) PURE;
+ STDMETHOD(SetSecurity) (THIS_ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor ) PURE;
+ STDMETHOD(GetAccessRights) (THIS_ const GUID* pguidObjectType,
+ DWORD dwFlags,
+ PSI_ACCESS *ppAccess,
+ ULONG *pcAccesses,
+ ULONG *piDefaultAccess ) PURE;
+ STDMETHOD(MapGeneric) (THIS_ const GUID *pguidObjectType,
+ UCHAR *pAceFlags,
+ ACCESS_MASK *pMask) PURE;
+ STDMETHOD(GetInheritTypes) (THIS_ PSI_INHERIT_TYPE *ppInheritTypes,
+ ULONG *pcInheritTypes ) PURE;
+ STDMETHOD(PropertySheetPageCallback)(THIS_ HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage ) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation *LPSECURITYINFO;
+
+#define INTERFACE ISecurityInformation2
+DECLARE_INTERFACE_IID_(ISecurityInformation2, IUnknown, "c3ccfdb4-6f88-11d2-a3ce-00c04fb1782a")
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* ISecurityInformation2 methods */
+ STDMETHOD_(BOOL,IsDaclCanonical) (THIS_ PACL pDacl) PURE;
+ STDMETHOD(LookupSids) (THIS_ ULONG cSids, PSID *rgpSids, LPDATAOBJECT *ppdo) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation2 *LPSECURITYINFO2;
+
+#define CFSTR_ACLUI_SID_INFO_LIST TEXT("CFSTR_ACLUI_SID_INFO_LIST")
+
+typedef struct _SID_INFO
+{
+ PSID pSid;
+ PWSTR pwzCommonName;
+ PWSTR pwzClass;
+ PWSTR pwzUPN;
+} SID_INFO, *PSID_INFO;
+
+typedef struct _SID_INFO_LIST
+{
+ ULONG cItems;
+ SID_INFO aSidInfo[ANYSIZE_ARRAY];
+} SID_INFO_LIST, *PSID_INFO_LIST;
+
+
+#define INTERFACE IEffectivePermission
+DECLARE_INTERFACE_IID_(IEffectivePermission, IUnknown, "3853dc76-9f35-407c-88a1-d19344365fbc")
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* ISecurityInformation methods */
+ STDMETHOD(GetEffectivePermission) (THIS_
+ const GUID* pguidObjectType,
+ PSID pUserSid,
+ LPCWSTR pszServerName,
+ PSECURITY_DESCRIPTOR pSD,
+ POBJECT_TYPE_LIST *ppObjectTypeList,
+ ULONG *pcObjectTypeListLength,
+ PACCESS_MASK *ppGrantedAccessList,
+ ULONG *pcGrantedAccessListLength) PURE;
+};
+#undef INTERFACE
+typedef IEffectivePermission *LPEFFECTIVEPERMISSION;
+
+#define INTERFACE ISecurityObjectTypeInfo
+DECLARE_INTERFACE_IID_(ISecurityObjectTypeInfo, IUnknown, "fc3066eb-79ef-444b-9111-d18a75ebf2fa")
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* ISecurityInformation methods */
+ STDMETHOD(GetInheritSource)(THIS_ SECURITY_INFORMATION si,
+ PACL pACL,
+#ifndef WINE_NO_UNICODE_MACROS
+ PINHERITED_FROM *ppInheritArray
+#else
+ PINHERITED_FROMW *ppInheritArray
+#endif
+ ) PURE;
+};
+#undef INTERFACE
+typedef ISecurityObjectTypeInfo *LPSecurityObjectTypeInfo;
+
+
+#define INTERFACE ISecurityInformation3
+DECLARE_INTERFACE_IID_(ISecurityInformation3, IUnknown, "e2cdc9cc-31bd-4f8f-8c8b-b641af516a1a")
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* ISecurityInformation3 methods */
+ STDMETHOD(GetFullResourceName) (THIS_ LPWSTR *ppszResourceName) PURE;
+ STDMETHOD(OpenElevatedEditor) (THIS_ HWND hWnd, SI_PAGE_TYPE uPage) PURE;
+};
+#undef INTERFACE
+typedef ISecurityInformation3 *LPSECURITYINFO3;
+
+DEFINE_GUID(IID_ISecurityInformation, 0x965fc360, 0x16ff, 0x11d0, 0x91, 0xcb, 0x0, 0xaa, 0x0, 0xbb, 0xb7, 0x23);
+DEFINE_GUID(IID_ISecurityInformation2, 0xc3ccfdb4, 0x6f88, 0x11d2, 0xa3, 0xce, 0x0, 0xc0, 0x4f, 0xb1, 0x78, 0x2a);
+DEFINE_GUID(IID_IEffectivePermission, 0x3853dc76, 0x9f35, 0x407c, 0x88, 0xa1, 0xd1, 0x93, 0x44, 0x36, 0x5f, 0xbc);
+DEFINE_GUID(IID_ISecurityObjectTypeInfo, 0xfc3066eb, 0x79ef, 0x444b, 0x91, 0x11, 0xd1, 0x8a, 0x75, 0xeb, 0xf2, 0xfa);
+DEFINE_GUID(IID_ISecurityInformation3, 0xe2cdc9cc, 0x31bd, 0x4f8f, 0x8c, 0x8b, 0xb6, 0x41, 0xaf, 0x51, 0x6a, 0x1a);
+
+HPROPSHEETPAGE WINAPI CreateSecurityPage(LPSECURITYINFO psi);
+BOOL WINAPI EditSecurity(HWND owner, LPSECURITYINFO psi);
+HRESULT WINAPI EditSecurityAdvanced(HWND owner, LPSECURITYINFO psi, SI_PAGE_TYPE uSIPage);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __WINE_ACLUI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl
new file mode 100644
index 00000000..1c0a4997
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/activaut.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2008 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+cpp_quote("#ifndef _NO_AUTHOR_GUIDS")
+
+cpp_quote("DEFINE_GUID(CATID_ActiveScriptAuthor, 0xaee2a92,0xbcbb,0x11d0,0x8c,0x72,0x0,0xc0,0x4f,0xc2,0xb0,0x85);")
+
+cpp_quote("#endif")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl
new file mode 100644
index 00000000..b80d427b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/activdbg.idl
@@ -0,0 +1,590 @@
+/*
+ * Copyright 2008 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "activscp.idl";
+/* import "dbgprop.idl"; */
+
+interface IDebugDocumentContext;
+interface IRemoteDebugApplication;
+interface IEnumDebugCodeContexts;
+
+/* FIXME: */
+interface IEnumDebugStackFrames;
+interface IDebugStackFrame;
+interface IApplicationDebugger;
+interface IEnumRemoteDebugApplicationThreads;
+interface IDebugApplicationNode;
+interface IEnumDebugExpressionContexts;
+interface IDebugApplicationThread;
+interface IDebugSyncOperation;
+interface IDebugAsyncOperation;
+interface IDebugStackFrameSniffer;
+interface IDebugThreadCall32;
+interface IActiveScriptErrorDebug;
+interface IProvideExpressionContexts;
+
+typedef enum tagBREAKPOINT_STATE {
+ BREAKPOINT_DELETED,
+ BREAKPOINT_DISABLED,
+ BREAKPOINT_ENABLED
+} BREAKPOINT_STATE;
+
+typedef DWORD APPBREAKFLAGS;
+
+typedef enum tagBREAKREASON {
+ BREAKREASON_STEP,
+ BREAKREASON_BREAKPOINT,
+ BREAKREASON_DEBUGGER_BLOCK,
+ BREAKREASON_HOST_INITIATED,
+ BREAKREASON_LANGUAGE_INITIATED,
+ BREAKREASON_DEBUGGER_HALT,
+ BREAKREASON_ERROR,
+ BREAKREASON_JIT
+} BREAKREASON;
+
+typedef enum tagBREAKRESUME_ACTION {
+ BREAKRESUMEACTION_ABORT,
+ BREAKRESUMEACTION_CONTINUE,
+ BREAKRESUMEACTION_STEP_INTO,
+ BREAKRESUMEACTION_STEP_OVER,
+ BREAKRESUMEACTION_STEP_OUT,
+ BREAKRESUMEACTION_IGNORE
+} BREAKRESUMEACTION;
+
+typedef enum tagDOCUMENTNAMETYPE {
+ DOCUMENTNAMETYPE_APPNODE,
+ DOCUMENTNAMETYPE_TITLE,
+ DOCUMENTNAMETYPE_FILE_TAIL,
+ DOCUMENTNAMETYPE_URL
+} DOCUMENTNAMETYPE;
+
+typedef enum tagERRORRESUMEACTION {
+ ERRORRESUMEACTION_ReexecuteErrorStatement,
+ ERRORRESUMEACTION_AbortCallAndReturnErrorToCaller,
+ ERRORRESUMEACTION_SkipErrorStatement,
+} ERRORRESUMEACTION;
+
+typedef WORD SOURCE_TEXT_ATTR;
+
+#ifdef INTEROPLIB
+enum enum_SOURCE_TEXT_ATTR
+{
+ SOURCETEXT_ATTR_KEYWORD = 0x01,
+ SOURCETEXT_ATTR_COMMENT = 0x02,
+ SOURCETEXT_ATTR_NONSOURCE = 0x04,
+ SOURCETEXT_ATTR_OPERATOR = 0x08,
+ SOURCETEXT_ATTR_NUMBER = 0x10,
+ SOURCETEXT_ATTR_STRING = 0x20,
+ SOURCETEXT_ATTR_FUNCTION_START = 0x40
+};
+#endif
+
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_KEYWORD = 0x01;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_COMMENT = 0x02;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NONSOURCE = 0x04;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_OPERATOR = 0x08;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_NUMBER = 0x10;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_STRING = 0x20;
+const SOURCE_TEXT_ATTR SOURCETEXT_ATTR_FUNCTION_START = 0x40;
+
+/************************************************************
+ * interface IActiveScriptDebug32
+ */
+[
+ object,
+ uuid(51973c10-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IActiveScriptDebug32 : IUnknown
+{
+ HRESULT GetScriptTextAttributes(
+ [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+ [in] ULONG uNumCodeChars,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwFlags,
+ [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+ HRESULT GetScriptletTextAttributes(
+ [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+ [in] ULONG uNumCodeChars,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwFlags,
+ [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+ HRESULT EnumCodeContextsOfPosition(
+ [in] DWORD dwSourceContext,
+ [in] ULONG uCharacterOffset,
+ [in] ULONG uNumChars,
+ [out] IEnumDebugCodeContexts **ppescc);
+}
+
+[
+ object,
+ uuid(bc437e23-f5b8-47f4-bb79-7d1ce5483b86),
+ pointer_default(unique)
+]
+interface IActiveScriptDebug64 : IUnknown
+{
+ HRESULT GetScriptTextAttributes(
+ [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+ [in] ULONG uNumCodeChars,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwFlags,
+ [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+ HRESULT GetScriptletTextAttributes(
+ [in, size_is(uNumCodeChars)] LPCOLESTR pstrCode,
+ [in] ULONG uNumCodeChars,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwFlags,
+ [in, out, size_is(uNumCodeChars)] SOURCE_TEXT_ATTR *pattr);
+
+ HRESULT EnumCodeContextsOfPosition(
+ [in] DWORDLONG dwSourceContext,
+ [in] ULONG uCharacterOffset,
+ [in] ULONG uNumChars,
+ [out] IEnumDebugCodeContexts **ppescc);
+}
+
+/************************************************************
+ * interface IDebugDocumentInfo
+ */
+[
+ object,
+ uuid(51973c1f-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IDebugDocumentInfo : IUnknown
+{
+ HRESULT GetName(
+ [in] DOCUMENTNAMETYPE dnt,
+ [out] BSTR *pbstrName);
+
+ HRESULT GetDocumentClassId(
+ [out] CLSID *pclsidDocument);
+}
+
+/************************************************************
+ * interface IDebugDocument
+ */
+[
+ object,
+ uuid(51973c21-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IDebugDocument : IDebugDocumentInfo
+{
+}
+
+/************************************************************
+ * interface IDebugCodeContext
+ */
+[
+ object,
+ uuid(51973c13-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IDebugCodeContext : IUnknown
+{
+ HRESULT GetDocumentContext(
+ [out] IDebugDocumentContext **ppsc);
+
+ HRESULT SetBreakPoint(
+ [in] BREAKPOINT_STATE bps);
+}
+
+/************************************************************
+ * interface IEnumDebugCodeContexts
+ */
+[
+ object,
+ uuid(51973c1d-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IEnumDebugCodeContexts : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] IDebugCodeContext **pscc,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumDebugCodeContexts **ppescc);
+}
+
+/************************************************************
+ * interface IDebugDocumentContext
+ */
+[
+ object,
+ uuid(51973c28-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IDebugDocumentContext : IUnknown
+{
+ HRESULT GetDocument(
+ [out] IDebugDocument **ppsd);
+
+ HRESULT EnumCodeContexts(
+ [out] IEnumDebugCodeContexts **ppescc);
+}
+
+/************************************************************
+ * interface IRemoteDebugApplicationThread
+ */
+[
+ object,
+ uuid(51973c37-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique)
+]
+interface IRemoteDebugApplicationThread : IUnknown
+{
+ HRESULT GetSystemThreadId(
+ [out] DWORD *dwThreadId);
+
+ HRESULT GetApplication(
+ [out] IRemoteDebugApplication **pprda);
+
+ HRESULT EnumStackFrames(
+ [out] IEnumDebugStackFrames **ppedsf);
+
+ HRESULT GetDescription(
+ [out] BSTR *pbstrDescription,
+ [out] BSTR *pbstrState);
+
+ HRESULT SetNextStatement(
+ [in] IDebugStackFrame *pStackFrame,
+ [in] IDebugCodeContext *pCodeContext);
+
+ HRESULT GetState(
+ [out] DWORD *pState);
+
+ HRESULT Suspend(
+ [out] DWORD *pdwCount);
+
+ HRESULT Resume(
+ [out] DWORD *pdwCount);
+
+ HRESULT GetSuspendCount(
+ [out] DWORD *pdwCount);
+}
+
+/************************************************************
+ * interface IRemoteDebugApplication
+ */
+[
+ object,
+ uuid(51973c30-cb0c-11d0-b5c9-00a0244Aae7a),
+ pointer_default(unique)
+]
+interface IRemoteDebugApplication : IUnknown
+{
+ HRESULT ResumeFromBreakPoint(
+ [in] IRemoteDebugApplicationThread *prptFocus,
+ [in] BREAKRESUMEACTION bra,
+ [in] ERRORRESUMEACTION era);
+
+ HRESULT CauseBreak();
+
+ HRESULT ConnectDebugger(
+ [in] IApplicationDebugger *pad);
+
+ HRESULT DisconnectDebugger();
+
+ HRESULT GetDebugger(
+ [out] IApplicationDebugger **pad);
+
+ HRESULT CreateInstanceAtApplication(
+ [in] REFCLSID rclsid,
+ [in] IUnknown *pUnkOuter,
+ [in] DWORD dwClsContext,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppvObject);
+
+ HRESULT QueryAlive();
+
+ HRESULT EnumThreads(
+ [out] IEnumRemoteDebugApplicationThreads **pperdat);
+
+ HRESULT GetName(
+ [out] BSTR *pbstrName);
+
+ HRESULT GetRootNode(
+ [out] IDebugApplicationNode **ppdanRoot);
+
+ HRESULT EnumGlobalExpressionContexts(
+ [out] IEnumDebugExpressionContexts **ppedec);
+}
+
+/************************************************************
+ * interface IDebugApplication32
+ */
+[
+ object,
+ uuid(51973c32-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique),
+ local
+]
+interface IDebugApplication32 : IRemoteDebugApplication
+{
+ HRESULT SetName(
+ [in] LPCOLESTR pstrName);
+
+ HRESULT StepOutComplete();
+
+ HRESULT DebugOutput(
+ [in] LPCOLESTR pstr);
+
+ HRESULT StartDebugSession();
+
+ HRESULT HandleBreakPoint(
+ [in] BREAKREASON br,
+ [out] BREAKRESUMEACTION *pbra);
+
+ HRESULT Close();
+
+ HRESULT GetBreakFlags(
+ [out] APPBREAKFLAGS *pabf,
+ [out] IRemoteDebugApplicationThread **pprdatSteppingThread);
+
+ cpp_quote("#undef GetCurrentThread")
+ HRESULT GetCurrentThread(
+ [out] IDebugApplicationThread **pat);
+
+ HRESULT CreateAsyncDebugOperation(
+ [in] IDebugSyncOperation *psdo,
+ [out] IDebugAsyncOperation **ppado);
+
+ HRESULT AddStackFrameSniffer(
+ [in] IDebugStackFrameSniffer *pdsfs,
+ [out] DWORD *pdwCookie);
+
+ HRESULT RemoveStackFrameSniffer(
+ [in] DWORD dwCookie);
+
+ HRESULT QueryCurrentThreadIsDebuggerThread();
+
+ HRESULT SynchronousCallInDebuggerThread(
+ [in] IDebugThreadCall32 *pptc,
+ [in] DWORD dwParam1,
+ [in] DWORD dwParam2,
+ [in] DWORD dwParam3);
+
+ HRESULT CreateApplicationNode(
+ [out] IDebugApplicationNode **ppdanNew);
+
+ HRESULT FireDebuggerEvent(
+ [in] REFGUID riid,
+ [in] IUnknown *punk);
+
+ HRESULT HandleRuntimeError(
+ [in] IActiveScriptErrorDebug *pErrorDebug,
+ [in] IActiveScriptSite *pScriptSite,
+ [out] BREAKRESUMEACTION *pbra,
+ [out] ERRORRESUMEACTION *perra,
+ [out] BOOL *pfCallOnScriptError);
+
+ BOOL FCanJitDebug();
+
+ BOOL FIsAutoJitDebugEnabled();
+
+ HRESULT AddGlobalExpressionContextProvider(
+ [in] IProvideExpressionContexts *pdsfs,
+ [out] DWORD *pdwCookie);
+
+ HRESULT RemoveGlobalExpressionContextProvider(
+ [in] DWORD dwCookie);
+}
+
+/************************************************************
+ * interface IDebugApplication64
+ */
+[
+ object,
+ uuid(4dedc754-04c7-4f10-9e60-16a390fe6e62),
+ pointer_default(unique),
+ local
+]
+interface IDebugApplication64 : IRemoteDebugApplication
+{
+ HRESULT SetName(
+ [in] LPCOLESTR pstrName);
+
+ HRESULT StepOutComplete();
+
+ HRESULT DebugOutput(
+ [in] LPCOLESTR pstr);
+
+ HRESULT StartDebugSession();
+
+ HRESULT HandleBreakPoint(
+ [in] BREAKREASON br,
+ [out] BREAKRESUMEACTION *pbra);
+
+ HRESULT Close();
+
+ HRESULT GetBreakFlags(
+ [out] APPBREAKFLAGS *pabf,
+ [out] IRemoteDebugApplicationThread **pprdatSteppingThread);
+
+ HRESULT GetCurrentThread(
+ [out] IDebugApplicationThread **pat);
+
+ HRESULT CreateAsyncDebugOperation(
+ [in] IDebugSyncOperation *psdo,
+ [out] IDebugAsyncOperation **ppado);
+
+ HRESULT AddStackFrameSniffer(
+ [in] IDebugStackFrameSniffer *pdsfs,
+ [out] DWORD *pdwCookie);
+
+ HRESULT RemoveStackFrameSniffer(
+ [in] DWORD dwCookie);
+
+ HRESULT QueryCurrentThreadIsDebuggerThread();
+
+ HRESULT SynchronousCallInDebuggerThread(
+ [in] IDebugThreadCall32 *pptc,
+ [in] DWORDLONG dwParam1,
+ [in] DWORDLONG dwParam2,
+ [in] DWORDLONG dwParam3);
+
+ HRESULT CreateApplicationNode(
+ [out] IDebugApplicationNode **ppdanNew);
+
+ HRESULT FireDebuggerEvent(
+ [in] REFGUID riid,
+ [in] IUnknown *punk);
+
+ HRESULT HandleRuntimeError(
+ [in] IActiveScriptErrorDebug *pErrorDebug,
+ [in] IActiveScriptSite *pScriptSite,
+ [out] BREAKRESUMEACTION *pbra,
+ [out] ERRORRESUMEACTION *perra,
+ [out] BOOL *pfCallOnScriptError);
+
+ BOOL FCanJitDebug();
+
+ BOOL FIsAutoJitDebugEnabled();
+
+ HRESULT AddGlobalExpressionContextProvider(
+ [in] IProvideExpressionContexts *pdsfs,
+ [out] DWORDLONG *pdwCookie);
+
+ HRESULT RemoveGlobalExpressionContextProvider(
+ [in] DWORDLONG dwCookie);
+}
+
+/************************************************************
+ * interface IActiveScriptSiteDebug32
+ */
+[
+ object,
+ uuid(51973c11-cb0c-11d0-b5c9-00a0244a0e7a),
+ pointer_default(unique),
+ local
+]
+interface IActiveScriptSiteDebug32 : IUnknown
+{
+ HRESULT GetDocumentContextFromPosition(
+ [in] DWORD dwSourceContext,
+ [in] ULONG uCharacterOffset,
+ [in] ULONG uNumChars,
+ [out] IDebugDocumentContext **ppsc);
+
+ HRESULT GetApplication(
+ [out] IDebugApplication32 **ppda);
+
+ HRESULT GetRootApplicationNode(
+ [out] IDebugApplicationNode **ppdanRoot);
+
+ HRESULT OnScriptErrorDebug(
+ [in] IActiveScriptErrorDebug *pErrorDebug,
+ [out] BOOL *pfEnterDebugger,
+ [out] BOOL *pfCallOnScriptErrorWhenContinuing);
+}
+
+/************************************************************
+ * interface IActiveScriptSiteDebug64
+ */
+[
+ object,
+ uuid(d6b96b0a-7463-402c-92ac-89984226942f),
+ pointer_default(unique),
+ local
+]
+interface IActiveScriptSiteDebug64 : IUnknown
+{
+ HRESULT GetDocumentContextFromPosition(
+ [in] DWORDLONG dwSourceContext,
+ [in] ULONG uCharacterOffset,
+ [in] ULONG uNumChars,
+ [out] IDebugDocumentContext **ppsc);
+
+ HRESULT GetApplication(
+ [out] IDebugApplication64 **ppda);
+
+ HRESULT GetRootApplicationNode(
+ [out] IDebugApplicationNode **ppdanRoot);
+
+ HRESULT OnScriptErrorDebug(
+ [in] IActiveScriptErrorDebug *pErrorDebug,
+ [out] BOOL *pfEnterDebugger,
+ [out] BOOL *pfCallOnScriptErrorWhenContinuing);
+}
+
+cpp_quote("#ifndef DISABLE_ACTIVDBG_INTERFACE_WRAPPERS")
+cpp_quote("#ifdef _WIN64")
+
+cpp_quote("#define IActiveScriptDebug IActiveScriptDebug64")
+cpp_quote("#define IID_IActiveScriptDebug IID_IActiveScriptDebug64")
+
+cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug64")
+cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug64")
+
+cpp_quote("#define IDebugApplication IDebugApplication64")
+cpp_quote("#define IID_IDebugApplication IID_IDebugApplication64")
+
+cpp_quote("#else")
+
+cpp_quote("#define IActiveScriptDebug IActiveScriptDebug32")
+cpp_quote("#define IID_IActiveScriptDebug IID_IActiveScriptDebug32")
+
+cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug32")
+cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug32")
+
+cpp_quote("#define IDebugApplication IDebugApplication32")
+cpp_quote("#define IID_IDebugApplication IID_IDebugApplication32")
+
+cpp_quote("#endif")
+cpp_quote("#endif")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl
new file mode 100644
index 00000000..8457df41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/activscp.idl
@@ -0,0 +1,558 @@
+/*
+ * Copyright 2004 Kevin Koltzau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+cpp_quote("#ifndef _NO_SCRIPT_GUIDS")
+
+cpp_quote("DEFINE_GUID(CATID_ActiveScript, 0xf0b7a1a1,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);")
+cpp_quote("DEFINE_GUID(CATID_ActiveScriptParse, 0xf0b7a1a2,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);")
+cpp_quote("DEFINE_GUID(CATID_ActiveScriptEncode, 0xf0b7a1a3,0x9847,0x11cf,0x8f,0x20,0x00,0x80,0x5f,0x2c,0xd0,0x64);")
+
+cpp_quote("#endif")
+
+cpp_quote("#define SCRIPTPROP_NAME 0x00000000")
+cpp_quote("#define SCRIPTPROP_MAJORVERSION 0x00000001")
+cpp_quote("#define SCRIPTPROP_MINORVERSION 0x00000002")
+cpp_quote("#define SCRIPTPROP_BUILDNUMBER 0x00000003")
+cpp_quote("#define SCRIPTPROP_DELAYEDEVENTSINKING 0x00001000")
+cpp_quote("#define SCRIPTPROP_CATCHEXCEPTION 0x00001001")
+cpp_quote("#define SCRIPTPROP_CONVERSIONLCID 0x00001002")
+cpp_quote("#define SCRIPTPROP_HOSTSTACKREQUIRED 0x00001003")
+cpp_quote("#define SCRIPTPROP_DEBUGGER 0x00001100")
+cpp_quote("#define SCRIPTPROP_JITDEBUG 0x00001101")
+cpp_quote("#define SCRIPTPROP_INVOKEVERSIONING 0x00004000")
+
+cpp_quote("#define SCRIPTPROP_HACK_FIBERSUPPORT 0x70000000")
+cpp_quote("#define SCRIPTPROP_HACK_TRIDENTEVENTSINK 0x70000001")
+cpp_quote("#define SCRIPTPROP_ABBREVIATE_GLOBALNAME_RESOLUTION 0x70000002")
+
+typedef enum tagSCRIPTSTATE {
+ SCRIPTSTATE_UNINITIALIZED = 0,
+ SCRIPTSTATE_STARTED = 1,
+ SCRIPTSTATE_CONNECTED = 2,
+ SCRIPTSTATE_DISCONNECTED = 3,
+ SCRIPTSTATE_CLOSED = 4,
+ SCRIPTSTATE_INITIALIZED = 5
+} SCRIPTSTATE;
+
+typedef enum tagSCRIPTTHREADSTATE {
+ SCRIPTTHREADSTATE_NOTINSCRIPT = 0,
+ SCRIPTTHREADSTATE_RUNNING = 1
+} SCRIPTTHREADSTATE;
+
+typedef enum tagSCRIPTUICITEM {
+ SCRIPTUICITEM_INPUTBOX = 1,
+ SCRIPTUICITEM_MSGBOX = 2
+} SCRIPTUICITEM;
+
+typedef enum tagSCRIPTUICHANDLING {
+ SCRIPTUICHANDLING_ALLOW = 0,
+ SCRIPTUICHANDLING_NOUIERROR = 1,
+ SCRIPTUICHANDLING_NOUIDEFAULT = 2
+} SCRIPTUICHANDLING;
+
+typedef DWORD SCRIPTTHREADID;
+cpp_quote("#define SCRIPTTHREADID_CURRENT ((SCRIPTTHREADID)-1)")
+cpp_quote("#define SCRIPTTHREADID_BASE ((SCRIPTTHREADID)-2)")
+cpp_quote("#define SCRIPTTHREADID_ALL ((SCRIPTTHREADID)-3)")
+
+cpp_quote("#define SCRIPTITEM_ISVISIBLE 0x00000002")
+cpp_quote("#define SCRIPTITEM_ISSOURCE 0x00000004")
+cpp_quote("#define SCRIPTITEM_GLOBALMEMBERS 0x00000008")
+cpp_quote("#define SCRIPTITEM_ISPERSISTENT 0x00000040")
+cpp_quote("#define SCRIPTITEM_CODEONLY 0x00000200")
+cpp_quote("#define SCRIPTITEM_NOCODE 0x00000400")
+cpp_quote("#define SCRIPTITEM_ALL_FLAGS (SCRIPTITEM_ISSOURCE | \\")
+cpp_quote(" SCRIPTITEM_ISVISIBLE | \\")
+cpp_quote(" SCRIPTITEM_ISPERSISTENT | \\")
+cpp_quote(" SCRIPTITEM_GLOBALMEMBERS | \\")
+cpp_quote(" SCRIPTITEM_NOCODE | \\")
+cpp_quote(" SCRIPTITEM_CODEONLY)")
+cpp_quote("#define SCRIPTTYPELIB_ISCONTROL 0x00000010")
+cpp_quote("#define SCRIPTTYPELIB_ISPERSISTENT 0x00000040")
+cpp_quote("#define SCRIPTTYPELIB_ALL_FLAGS (SCRIPTTEXT_ISCONTROL | SCRIPTTYPELIB_ISPERSISTENT)")
+cpp_quote("#define SCRIPTTEXT_DELAYEXECUTION 0x00000001")
+cpp_quote("#define SCRIPTTEXT_ISVISIBLE 0x00000002")
+cpp_quote("#define SCRIPTTEXT_ISEXPRESSION 0x00000020")
+cpp_quote("#define SCRIPTTEXT_ISPERSISTENT 0x00000040")
+cpp_quote("#define SCRIPTTEXT_HOSTMANAGESSOURCE 0x00000080")
+cpp_quote("#define SCRIPTTEXT_ALL_FLAGS (SCRIPTTEXT_DELAYEXECUTION | \\")
+cpp_quote(" SCRIPTTEXT_ISVISIBLE | \\")
+cpp_quote(" SCRIPTTEXT_ISEXPRESSION | \\")
+cpp_quote(" SCRIPTTEXT_ISPERSISTENT | \\")
+cpp_quote(" SCRIPTTEXT_HOSTMANAGESSOURCE)")
+cpp_quote("#define SCRIPTPROC_HOSTMANAGESSOURCE 0x00000080")
+cpp_quote("#define SCRIPTPROC_IMPLICIT_THIS 0x00000100")
+cpp_quote("#define SCRIPTPROC_IMPLICIT_PARENTS 0x00000200")
+cpp_quote("#define SCRIPTPROC_ALL_FLAGS (SCRIPTPROC_HOSTMANAGESSOURCE | \\")
+cpp_quote(" SCRIPTPROC_IMPLICIT_THIS | \\")
+cpp_quote(" SCRIPTPROC_IMPLICIT_PARENTS)")
+cpp_quote("#define SCRIPTINFO_IUNKNOWN 0x00000001")
+cpp_quote("#define SCRIPTINFO_ITYPEINFO 0x00000002")
+cpp_quote("#define SCRIPTINFO_ALL_FLAGS (SCRIPTINFO_IUNKNOWN | SCRIPTINFO_ITYPEINFO)")
+cpp_quote("#define SCRIPTINTERRUPT_DEBUG 0x00000001")
+cpp_quote("#define SCRIPTINTERRUPT_RAISEEXCEPTION 0x00000002")
+cpp_quote("#define SCRIPTINTERRUPT_ALL_FLAGS (SCRIPTINTERRUPT_DEBUG | SCRIPTINTERRUPT_RAISEEXCEPTION)")
+cpp_quote("#define SCRIPTSTAT_STATEMENT_COUNT 1")
+cpp_quote("#define SCRIPTSTAT_INSTRUCTION_COUNT 2")
+cpp_quote("#define SCRIPTSTAT_INTSTRUCTION_TIME 3")
+cpp_quote("#define SCRIPTSTAT_TOTAL_TIME 4")
+
+[
+object,
+uuid(EAE1BA61-A4ED-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptError : IUnknown
+{
+ HRESULT GetExceptionInfo(
+ [out] EXCEPINFO *pexcepinfo
+ );
+
+ HRESULT GetSourcePosition(
+ [out] DWORD *pdwSourceContext,
+ [out] ULONG *pulLineNumber,
+ [out] LONG *plCharacterPosition
+ );
+
+ HRESULT GetSourceLineText(
+ [out] BSTR *pbstrSourceLine
+ );
+}
+
+[
+object,
+uuid(DB01A1E3-A42B-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptSite : IUnknown
+{
+ HRESULT GetLCID(
+ [out] LCID *plcid);
+
+ HRESULT GetItemInfo(
+ [in] LPCOLESTR pstrName,
+ [in] DWORD dwReturnMask,
+ [out] IUnknown **ppiunkItem,
+ [out] ITypeInfo **ppti
+ );
+
+ HRESULT GetDocVersionString(
+ [out] BSTR *pbstrVersion
+ );
+
+ HRESULT OnScriptTerminate(
+ [in] const VARIANT *pvarResult,
+ [in] const EXCEPINFO *pexcepinfo
+ );
+
+ HRESULT OnStateChange(
+ [in] SCRIPTSTATE ssScriptState
+ );
+
+ HRESULT OnScriptError(
+ [in] IActiveScriptError *pscripterror
+ );
+
+ HRESULT OnEnterScript(void);
+
+ HRESULT OnLeaveScript(void);
+}
+
+cpp_quote("typedef IActiveScriptSite *PIActiveScriptSite;")
+
+[
+object,
+uuid(D10F6761-83E9-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptSiteWindow : IUnknown
+{
+ HRESULT GetWindow(
+ [out] HWND *phwnd
+ );
+
+ HRESULT EnableModeless(
+ [in] BOOL fEnable
+ );
+}
+
+[
+ object,
+ uuid(aedae97e-d7ee-4796-b960-7f092ae844ab),
+ pointer_default(unique)
+]
+interface IActiveScriptSiteUIControl : IUnknown
+{
+ HRESULT GetUIBehavior(
+ [in] SCRIPTUICITEM UicItem,
+ [out] SCRIPTUICHANDLING *pUicHandling);
+}
+
+[
+object,
+uuid(539698A0-CDCA-11CF-A5EB-00AA0047A063),
+pointer_default(unique)
+]
+interface IActiveScriptSiteInterruptPoll : IUnknown
+{
+ HRESULT QueryContinue();
+}
+
+[
+object,
+uuid(BB1A2AE1-A4F9-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScript : IUnknown
+{
+ HRESULT SetScriptSite(
+ [in] IActiveScriptSite *pass
+ );
+
+ HRESULT GetScriptSite(
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObject
+ );
+
+ HRESULT SetScriptState(
+ [in] SCRIPTSTATE ss
+ );
+
+ HRESULT GetScriptState(
+ [out] SCRIPTSTATE *pssState
+ );
+
+ HRESULT Close(void);
+
+ HRESULT AddNamedItem(
+ [in] LPCOLESTR pstrName,
+ [in] DWORD dwFlags
+ );
+
+ HRESULT AddTypeLib(
+ [in] REFGUID rguidTypeLib,
+ [in] DWORD dwMajor,
+ [in] DWORD dwMinor,
+ [in] DWORD dwFlags
+ );
+
+ HRESULT GetScriptDispatch(
+ [in] LPCOLESTR pstrItemName,
+ [out] IDispatch **ppdisp
+ );
+
+ HRESULT GetCurrentScriptThreadID(
+ [out] SCRIPTTHREADID *pstidThread
+ );
+
+ HRESULT GetScriptThreadID(
+ [in] DWORD dwWin32ThreadId,
+ [out] SCRIPTTHREADID *pstidThread
+ );
+
+ HRESULT GetScriptThreadState(
+ [in] SCRIPTTHREADID stidThread,
+ [out] SCRIPTTHREADSTATE *pstsState
+ );
+
+ HRESULT InterruptScriptThread(
+ [in] SCRIPTTHREADID stidThread,
+ [in] const EXCEPINFO *pexcepinfo,
+ [in] DWORD dwFlags
+ );
+
+ HRESULT Clone(
+ [out] IActiveScript **ppscript
+ );
+}
+
+cpp_quote("typedef IActiveScript *PIActiveScript;")
+
+[
+object,
+uuid(BB1A2AE2-A4F9-11cf-8F20-00805F2CD064),
+pointer_default(unique)
+]
+interface IActiveScriptParse32 : IUnknown
+{
+ HRESULT InitNew(void);
+
+ HRESULT AddScriptlet(
+ [in] LPCOLESTR pstrDefaultName,
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrItemName,
+ [in] LPCOLESTR pstrSubItemName,
+ [in] LPCOLESTR pstrEventName,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] BSTR *pbstrName,
+ [out] EXCEPINFO *pexcepinfo
+ );
+
+ HRESULT ParseScriptText(
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrItemName,
+ [in] IUnknown *punkContext,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] VARIANT *pvarResult,
+ [out] EXCEPINFO *pexcepinfo
+ );
+}
+
+[
+ object,
+ uuid(c7ef7658-e1ee-480e-97ea-d52cb4d76d17),
+ pointer_default(unique)
+]
+interface IActiveScriptParse64 : IUnknown
+{
+ HRESULT InitNew(void);
+
+ HRESULT AddScriptlet(
+ [in] LPCOLESTR pstrDefaultName,
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrItemName,
+ [in] LPCOLESTR pstrSubItemName,
+ [in] LPCOLESTR pstrEventName,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORDLONG dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] BSTR *pbstrName,
+ [out] EXCEPINFO *pexcepinfo
+ );
+
+ HRESULT ParseScriptText(
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrItemName,
+ [in] IUnknown *punkContext,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORDLONG dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] VARIANT *pvarResult,
+ [out] EXCEPINFO *pexcepinfo
+ );
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParse IActiveScriptParse64")
+cpp_quote("#define IID_IActiveScriptParse IID_IActiveScriptParse64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParse IActiveScriptParse32")
+cpp_quote("#define IID_IActiveScriptParse IID_IActiveScriptParse32")
+cpp_quote("#endif")
+
+cpp_quote("typedef IActiveScriptParse *PIActiveScriptParse;")
+
+[
+object,
+uuid(1CFF0050-6FDD-11d0-9328-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IActiveScriptParseProcedureOld32 : IUnknown
+{
+ HRESULT ParseProcedureText(
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrFormalParams,
+ [in] LPCOLESTR pstrItemName,
+ [in] IUnknown *punkContext,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] IDispatch **ppdisp
+ );
+}
+
+[
+ object,
+ uuid(21f57128-08c9-4638-ba12-22d15d88dc5c),
+ pointer_default(unique)
+]
+interface IActiveScriptParseProcedureOld64 : IUnknown
+{
+ HRESULT ParseProcedureText(
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrFormalParams,
+ [in] LPCOLESTR pstrItemName,
+ [in] IUnknown *punkContext,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORDLONG dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] IDispatch **ppdisp
+ );
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld64")
+cpp_quote("#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParseProcedureOld IActiveScriptParseProcedureOld32")
+cpp_quote("#define IID_IActiveScriptParseProcedureOld IID_IActiveScriptParseProcedureOld32")
+cpp_quote("#endif")
+
+[
+object,
+uuid(AA5B6A80-B834-11d0-932F-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IActiveScriptParseProcedure32 : IUnknown
+{
+ HRESULT ParseProcedureText(
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrFormalParams,
+ [in] LPCOLESTR pstrProcedureName,
+ [in] LPCOLESTR pstrItemName,
+ [in] IUnknown *punkContext,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORD dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] IDispatch **ppdisp
+ );
+}
+
+[
+ object,
+ uuid(c64713b6-e029-4cc5-9200-438b72890b6a),
+ pointer_default(unique)
+]
+interface IActiveScriptParseProcedure64 : IUnknown
+{
+ HRESULT ParseProcedureText(
+ [in] LPCOLESTR pstrCode,
+ [in] LPCOLESTR pstrFormalParams,
+ [in] LPCOLESTR pstrProcedureName,
+ [in] LPCOLESTR pstrItemName,
+ [in] IUnknown *punkContext,
+ [in] LPCOLESTR pstrDelimiter,
+ [in] DWORDLONG dwSourceContextCookie,
+ [in] ULONG ulStartingLineNumber,
+ [in] DWORD dwFlags,
+ [out] IDispatch **ppdisp
+ );
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParseProcedure IActiveScriptParseProcedure64")
+cpp_quote("#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParseProcedure IActiveScriptParseProcedure32")
+cpp_quote("#define IID_IActiveScriptParseProcedure IID_IActiveScriptParseProcedure32")
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(71ee5b20-fb04-11d1-b3a8-00a0c911e8b2),
+ pointer_default(unique)
+]
+interface IActiveScriptParseProcedure2_32 : IActiveScriptParseProcedure32
+{
+}
+
+[
+ object,
+ uuid(fe7c4271-210c-448d-9f54-76dab7047b28),
+ pointer_default(unique)
+]
+interface IActiveScriptParseProcedure2_64 : IActiveScriptParseProcedure64
+{
+}
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_64")
+cpp_quote("#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_64")
+cpp_quote("#else")
+cpp_quote("#define IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_32")
+cpp_quote("#define IID_IActiveScriptParseProcedure2 IID_IActiveScriptParseProcedure2_32")
+cpp_quote("#endif")
+
+[
+object,
+uuid(63CDBCB0-C1B1-11d0-9336-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IBindEventHandler : IUnknown
+{
+ HRESULT BindHandler(
+ [in] LPCOLESTR pstrEvent,
+ [in] IDispatch *pdisp
+ );
+}
+
+[
+object,
+uuid(B8DA6310-E19B-11d0-933C-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IActiveScriptStats : IUnknown
+{
+ HRESULT GetStat(
+ [in] DWORD stid,
+ [out] ULONG *pluHi,
+ [out] ULONG *pluLo
+ );
+
+ HRESULT GetStatEx(
+ [in] REFGUID guid,
+ [out] ULONG *pluHi,
+ [out] ULONG *pluLo
+ );
+
+ HRESULT ResetStats(void);
+}
+
+[
+ object,
+ uuid(4954e0d0-fbc7-11d1-8410-006008c3fbfc),
+ pointer_default(unique)
+]
+interface IActiveScriptProperty : IUnknown
+{
+ HRESULT GetProperty(
+ [in] DWORD dwProperty,
+ [in] VARIANT *pvarIndex,
+ [out] VARIANT *pvarValue);
+
+ HRESULT SetProperty(
+ [in] DWORD dwProperty,
+ [in] VARIANT *pvarIndex,
+ [in] VARIANT *pvarValue);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h
new file mode 100644
index 00000000..c066768b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/adshlp.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ADSHLP_H
+#define __WINE_ADSHLP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI ADsBuildEnumerator(IADsContainer*,IEnumVARIANT**);
+HRESULT WINAPI ADsEnumerateNext(IEnumVARIANT*,ULONG,VARIANT*,ULONG*);
+HRESULT WINAPI ADsGetObject(LPCWSTR,REFIID,VOID**);
+HRESULT WINAPI ADsOpenObject(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,REFIID,VOID**);
+BOOL WINAPI FreeADsMem(LPVOID);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h
new file mode 100644
index 00000000..9c088a75
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/advpub.h
@@ -0,0 +1,290 @@
+/*
+ * Copyright 2004 Huw D M Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ADVPUB_H
+#define __WINE_ADVPUB_H
+
+#include <iprt/win/setupapi.h>
+#include <cfgmgr32.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef S_ASYNCHRONOUS
+#define S_ASYNCHRONOUS _HRESULT_TYPEDEF_(0x401E8)
+#endif
+
+typedef struct _CabInfoA
+{
+ LPSTR pszCab;
+ LPSTR pszInf;
+ LPSTR pszSection;
+ CHAR szSrcPath[MAX_PATH];
+ DWORD dwFlags;
+} CABINFOA, *PCABINFOA;
+
+typedef struct _CabInfoW
+{
+ LPWSTR pszCab;
+ LPWSTR pszInf;
+ LPWSTR pszSection;
+ WCHAR szSrcPath[MAX_PATH];
+ DWORD dwFlags;
+} CABINFOW, *PCABINFOW;
+
+DECL_WINELIB_TYPE_AW(CABINFO)
+DECL_WINELIB_TYPE_AW(PCABINFO)
+
+typedef struct _PERUSERSECTIONA
+{
+ CHAR szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20];
+ CHAR szDispName[128];
+ CHAR szLocale[10];
+ CHAR szStub[MAX_PATH * 4];
+ CHAR szVersion[32];
+ CHAR szCompID[128];
+ DWORD dwIsInstalled;
+ BOOL bRollback;
+} PERUSERSECTIONA, *PPERUSERSECTIONA;
+
+typedef struct _PERUSERSECTIONW
+{
+ WCHAR szGUID[39 /*MAX_GUID_STRING_LEN*/ + 20];
+ WCHAR szDispName[128];
+ WCHAR szLocale[10];
+ WCHAR szStub[MAX_PATH * 4];
+ WCHAR szVersion[32];
+ WCHAR szCompID[128];
+ DWORD dwIsInstalled;
+ BOOL bRollback;
+} PERUSERSECTIONW, *PPERUSERSECTIONW;
+
+DECL_WINELIB_TYPE_AW(PERUSERSECTION)
+DECL_WINELIB_TYPE_AW(PPERUSERSECTION)
+
+typedef struct _StrEntryA
+{
+ LPSTR pszName;
+ LPSTR pszValue;
+} STRENTRYA, *LPSTRENTRYA;
+
+typedef struct _StrEntryW
+{
+ LPWSTR pszName;
+ LPWSTR pszValue;
+} STRENTRYW, *LPSTRENTRYW;
+
+DECL_WINELIB_TYPE_AW(STRENTRY)
+DECL_WINELIB_TYPE_AW(LPSTRENTRY)
+
+typedef struct _StrTableA
+{
+ DWORD cEntries;
+ STRENTRYA* pse;
+} STRTABLEA, *LPSTRTABLEA;
+typedef const STRTABLEA CSTRTABLEA, *LPCSTRTABLEA;
+
+typedef struct _StrTableW
+{
+ DWORD cEntries;
+ STRENTRYW* pse;
+} STRTABLEW, *LPSTRTABLEW;
+typedef const STRTABLEW CSTRTABLEW, *LPCSTRTABLEW;
+
+DECL_WINELIB_TYPE_AW(STRTABLE)
+DECL_WINELIB_TYPE_AW(CSTRTABLE)
+DECL_WINELIB_TYPE_AW(LPSTRTABLE)
+DECL_WINELIB_TYPE_AW(LPCSTRTABLE)
+
+/* Flags for AddDelBackupEntry */
+#define AADBE_ADD_ENTRY 0x01
+#define AADBE_DEL_ENTRY 0x02
+
+/* Flags for AdvInstallFile */
+#define AIF_WARNIFSKIP 0x00000001
+#define AIF_NOSKIP 0x00000002
+#define AIF_NOVERSIONCHECK 0x00000004
+#define AIF_FORCE_FILE_IN_USE 0x00000008
+#define AIF_NOOVERWRITE 0x00000010
+#define AIF_NO_VERSION_DIALOG 0x00000020
+#define AIF_REPLACEONLY 0x00000400
+#define AIF_NOLANGUAGECHECK 0x10000000
+#define AIF_QUIET 0x20000000
+
+/* Flags for RunSetupCommand */
+#define RSC_FLAG_INF 0x00000001
+#define RSC_FLAG_SKIPDISKSPACECHECK 0x00000002
+#define RSC_FLAG_QUIET 0x00000004
+#define RSC_FLAG_NGCONV 0x00000008
+#define RSC_FLAG_UPDHLPDLLS 0x00000010
+#define RSC_FLAG_DELAYREGISTEROCX 0x00000200
+#define RSC_FLAG_SETUPAPI 0x00000400
+
+/* Flags for DelNode */
+#define ADN_DEL_IF_EMPTY 0x00000001
+#define ADN_DONT_DEL_SUBDIRS 0x00000002
+#define ADN_DONT_DEL_DIR 0x00000004
+#define ADN_DEL_UNC_PATHS 0x00000008
+
+/* Flags for RegRestoreAll, RegSaveRestore, RegSaveRestoreOnINF */
+#define IE4_RESTORE 0x00000001
+#define IE4_BACKNEW 0x00000002
+#define IE4_NODELETENEW 0x00000004
+#define IE4_NOMESSAGES 0x00000008
+#define IE4_NOPROGRESS 0x00000010
+#define IE4_NOENUMKEY 0x00000020
+#define IE4_NO_CRC_MAPPING 0x00000040
+#define IE4_REGSECTION 0x00000080
+#define IE4_FRDOALL 0x00000100
+#define IE4_UPDREFCNT 0x00000200
+#define IE4_USEREFCNT 0x00000400
+#define IE4_EXTRAINCREFCNT 0x00000800
+
+/* Flags for file save and restore functions */
+#define AFSR_RESTORE IE4_RESTORE
+#define AFSR_BACKNEW IE4_BACKNEW
+#define AFSR_NODELETENEW IE4_NODELETENEW
+#define AFSR_NOMESSAGES IE4_NOMESSAGES
+#define AFSR_NOPROGRESS IE4_NOPROGRESS
+#define AFSR_UPDREFCNT IE4_UPDREFCNT
+#define AFSR_USEREFCNT IE4_USEREFCNT
+#define AFSR_EXTRAINCREFCNT IE4_EXTRAINCREFCNT
+
+HRESULT WINAPI AddDelBackupEntryA(LPCSTR lpcszFileList, LPCSTR lpcszBackupDir,
+ LPCSTR lpcszBaseName, DWORD dwFlags);
+HRESULT WINAPI AddDelBackupEntryW(LPCWSTR lpcszFileList, LPCWSTR lpcszBackupDir,
+ LPCWSTR lpcszBaseName, DWORD dwFlags);
+#define AddDelBackupEntry WINELIB_NAME_AW(AddDelBackupEntry)
+HRESULT WINAPI AdvInstallFileA(HWND hwnd, LPCSTR lpszSourceDir,
+ LPCSTR lpszSourceFile, LPCSTR lpszDestDir, LPCSTR lpszDestFile,
+ DWORD dwFlags, DWORD dwReserved);
+HRESULT WINAPI AdvInstallFileW(HWND hwnd, LPCWSTR lpszSourceDir,
+ LPCWSTR lpszSourceFile, LPCWSTR lpszDestDir, LPCWSTR lpszDestFile,
+ DWORD dwFlags, DWORD dwReserved);
+#define AdvInstallFile WINELIB_NAME_AW(AdvInstallFile)
+HRESULT WINAPI CloseINFEngine(HINF hInf);
+HRESULT WINAPI DelNodeA(LPCSTR pszFileOrDirName, DWORD dwFlags);
+HRESULT WINAPI DelNodeW(LPCWSTR pszFileOrDirName, DWORD dwFlags);
+#define DelNode WINELIB_NAME_AW(DelNode)
+HRESULT WINAPI DelNodeRunDLL32A(HWND,HINSTANCE,LPSTR,INT);
+HRESULT WINAPI DelNodeRunDLL32W(HWND,HINSTANCE,LPWSTR,INT);
+#define DelNodeRunDLL32 WINELIB_NAME_AW(DelNodeRunDLL32)
+HRESULT WINAPI ExecuteCabA( HWND hwnd, CABINFOA* pCab, LPVOID pReserved );
+HRESULT WINAPI ExecuteCabW( HWND hwnd, CABINFOW* pCab, LPVOID pReserved );
+#define ExecuteCab WINELIB_NAME_AW(ExecuteCab)
+HRESULT WINAPI ExtractFilesA(LPCSTR,LPCSTR,DWORD,LPCSTR,LPVOID,DWORD);
+HRESULT WINAPI ExtractFilesW(LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPVOID,DWORD);
+#define ExtractFiles WINELIB_NAME_AW(ExtractFiles)
+HRESULT WINAPI FileSaveMarkNotExistA(LPSTR pszFileList, LPSTR pszDir, LPSTR pszBaseName);
+HRESULT WINAPI FileSaveMarkNotExistW(LPWSTR pszFileList, LPWSTR pszDir, LPWSTR pszBaseName);
+#define FileSaveMarkNotExist WINELIB_NAME_AW(FileSaveMarkNotExist)
+HRESULT WINAPI FileSaveRestoreA(HWND hDlg, LPSTR pszFileList, LPSTR pszDir,
+ LPSTR pszBaseName, DWORD dwFlags);
+HRESULT WINAPI FileSaveRestoreW(HWND hDlg, LPWSTR pszFileList, LPWSTR pszDir,
+ LPWSTR pszBaseName, DWORD dwFlags);
+#define FileSaveRestore WINELIB_NAME_AW(FileSaveRestore)
+HRESULT WINAPI FileSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,
+ LPCSTR pszSection, LPCSTR pszBackupDir, LPCSTR pszBaseBackupFile, DWORD dwFlags);
+HRESULT WINAPI FileSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF,
+ LPCWSTR pszSection, LPCWSTR pszBackupDir, LPCWSTR pszBaseBackupFile, DWORD dwFlags);
+#define FileSaveRestoreOnINF WINELIB_NAME_AW(FileSaveRestoreOnINF)
+HRESULT WINAPI GetVersionFromFileA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+HRESULT WINAPI GetVersionFromFileW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+#define GetVersionFromFile WINELIB_NAME_AW(GetVersionFromFile)
+HRESULT WINAPI GetVersionFromFileExA(LPCSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+HRESULT WINAPI GetVersionFromFileExW(LPCWSTR lpszFilename, LPDWORD pdwMSVer, LPDWORD pdwLSVer, BOOL bVersion);
+#define GetVersionFromFileEx WINELIB_NAME_AW(GetVersionFromFileEx)
+BOOL WINAPI IsNTAdmin(DWORD,LPDWORD);
+INT WINAPI LaunchINFSectionA(HWND,HINSTANCE,LPSTR,INT);
+INT WINAPI LaunchINFSectionW(HWND,HINSTANCE,LPWSTR,INT);
+#define LaunchINFSection WINELIB_NAME_AW(LaunchINFSection)
+HRESULT WINAPI LaunchINFSectionExA(HWND,HINSTANCE,LPSTR,INT);
+HRESULT WINAPI LaunchINFSectionExW(HWND,HINSTANCE,LPWSTR,INT);
+#define LaunchINFSectionEx WINELIB_NAME_AW(LaunchINFSectionEx)
+DWORD WINAPI NeedRebootInit(VOID);
+BOOL WINAPI NeedReboot(DWORD dwRebootCheck);
+HRESULT WINAPI OpenINFEngineA(LPCSTR pszInfFilename, LPCSTR pszInstallSection,
+ DWORD dwFlags, HINF *phInf, PVOID pvReserved);
+HRESULT WINAPI OpenINFEngineW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection,
+ DWORD dwFlags, HINF *phInf, PVOID pvReserved);
+#define OpenINFEngine WINELIB_NAME_AW(OpenINFEngine)
+HRESULT WINAPI RebootCheckOnInstallA(HWND hWnd, LPCSTR pszINF, LPCSTR pszSec, DWORD dwReserved);
+HRESULT WINAPI RebootCheckOnInstallW(HWND hWnd, LPCWSTR pszINF, LPCWSTR pszSec, DWORD dwReserved);
+#define RebootCheckOnInstall WINELIB_NAME_AW(RebootCheckOnInstall)
+HRESULT WINAPI RegInstallA(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable);
+HRESULT WINAPI RegInstallW(HMODULE hm, LPCWSTR pszSection, const STRTABLEW* pstTable);
+#define RegInstall WINELIB_NAME_AW(RegInstall)
+HRESULT WINAPI RegRestoreAllA(HWND hWnd, LPSTR pszTitleString, HKEY hkBackupKey);
+HRESULT WINAPI RegRestoreAllW(HWND hWnd, LPWSTR pszTitleString, HKEY hkBackupKey);
+#define RegRestoreAll WINELIB_NAME_AW(RegRestoreAll)
+HRESULT WINAPI RegSaveRestoreA(HWND hWnd, LPCSTR pszTitleString, HKEY hkBackupKey,
+ LPCSTR pcszRootKey, LPCSTR pcszSubKey, LPCSTR pcszValueName, DWORD dwFlags);
+HRESULT WINAPI RegSaveRestoreW(HWND hWnd, LPCWSTR pszTitleString, HKEY hkBackupKey,
+ LPCWSTR pcszRootKey, LPCWSTR pcszSubKey, LPCWSTR pcszValueName, DWORD dwFlags);
+#define RegSaveRestore WINELIB_NAME_AW(RegSaveRestore)
+HRESULT WINAPI RegSaveRestoreOnINFA(HWND hWnd, LPCSTR pszTitle, LPCSTR pszINF,
+ LPCSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags);
+HRESULT WINAPI RegSaveRestoreOnINFW(HWND hWnd, LPCWSTR pszTitle, LPCWSTR pszINF,
+ LPCWSTR pszSection, HKEY hHKLMBackKey, HKEY hHKCUBackKey, DWORD dwFlags);
+#define RegSaveRestoreOnINF WINELIB_NAME_AW(RegSaveRestoreOnINF)
+HRESULT WINAPI RunSetupCommandA(HWND hWnd,
+ LPCSTR szCmdName, LPCSTR szInfSection, LPCSTR szDir, LPCSTR lpszTitle,
+ HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved);
+HRESULT WINAPI RunSetupCommandW(HWND hWnd,
+ LPCWSTR szCmdName, LPCWSTR szInfSection, LPCWSTR szDir, LPCWSTR lpszTitle,
+ HANDLE *phEXE, DWORD dwFlags, LPVOID pvReserved);
+#define RunSetupCommand WINELIB_NAME_AW(RunSetupCommand)
+HRESULT WINAPI SetPerUserSecValuesA(PERUSERSECTIONA* pPerUser);
+HRESULT WINAPI SetPerUserSecValuesW(PERUSERSECTIONW* pPerUser);
+#define SetPerUserSecValues WINELIB_NAME_AW(SetPerUserSecValues)
+HRESULT WINAPI TranslateInfStringA(LPCSTR pszInfFilename, LPCSTR pszInstallSection,
+ LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer,
+ DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+HRESULT WINAPI TranslateInfStringW(LPCWSTR pszInfFilename, LPCWSTR pszInstallSection,
+ LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer,
+ DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+#define TranslateInfString WINELIB_NAME_AW(TranslateInfString)
+HRESULT WINAPI TranslateInfStringExA(HINF hInf, LPCSTR pszInfFilename,
+ LPCSTR pszTranslateSection, LPCSTR pszTranslateKey, LPSTR pszBuffer,
+ DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+HRESULT WINAPI TranslateInfStringExW(HINF hInf, LPCWSTR pszInfFilename,
+ LPCWSTR pszTranslateSection, LPCWSTR pszTranslateKey, LPWSTR pszBuffer,
+ DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved);
+#define TranslateInfStringEx WINELIB_NAME_AW(TranslateInfStringEx)
+HRESULT WINAPI UserInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow);
+HRESULT WINAPI UserInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow);
+#define UserInstStubWrapper WINELIB_NAME_AW(UserInstStubWrapper)
+HRESULT WINAPI UserUnInstStubWrapperA(HWND hWnd, HINSTANCE hInstance, LPSTR pszParms, INT nShow);
+HRESULT WINAPI UserUnInstStubWrapperW(HWND hWnd, HINSTANCE hInstance, LPWSTR pszParms, INT nShow);
+#define UserUnInstStubWrapper WINELIB_NAME_AW(UserUnInstStubWrapper)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ADVPUB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h
new file mode 100644
index 00000000..d204e53d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/af_irda.h
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2009 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef AF_IRDA_H
+#define AF_IRDA_H
+
+typedef struct _IRDA_DEVICE_INFO
+{
+ UCHAR irdaDeviceID[4];
+ char irdaDeviceName[22];
+ UCHAR irdaDeviceHints1;
+ UCHAR irdaDeviceHints2;
+ UCHAR irdaCharSet;
+} IRDA_DEVICE_INFO, *PIRDA_DEVICE_INFO;
+
+typedef struct _DEVICELIST
+{
+ ULONG numDevice;
+ IRDA_DEVICE_INFO Device[1];
+} DEVICELIST, *PDEVICELIST;
+
+typedef struct _SOCKADDR_IRDA
+{
+ USHORT irdaAddressFamily;
+ UCHAR irdaDeviceID[4];
+ char irdaServiceName[25];
+} SOCKADDR_IRDA, *PSOCKADDR_IRDA, *LPSOCKADDR_IRDA;
+
+#ifdef USE_WS_PREFIX
+
+/* Socket levels and options */
+#define WS_SOL_IRLMP 0xff
+
+#define WS_IRLMP_ENUMDEVICES ((ULONG)0x10)
+#define WS_IRLMP_IAS_SET ((ULONG)0x11)
+#define WS_IRLMP_IAS_QUERY ((ULONG)0x12)
+#define WS_IRLMP_SEND_PDU_LEN ((ULONG)0x13)
+#define WS_IRLMP_EXCLUSIVE_MODE ((ULONG)0x14)
+#define WS_IRLMP_IRLPT_MODE ((ULONG)0x15)
+#define WS_IRLMP_9WIRE_MODE ((ULONG)0x16)
+#define WS_IRLMP_TINYTP_MODE ((ULONG)0x17)
+#define WS_IRLMP_PARAMETERS ((ULONG)0x18)
+#define WS_IRLMP_DISCOVER_MODE ((ULONG)0x19)
+#define WS_IRLMP_SHARP_MODE ((ULONG)0x20)
+
+#define WS_IAS_MAX_CLASSNAME 64
+#define WS_IAS_MAX_ATTRIBNAME 256
+
+#else
+
+/* Socket levels and options */
+#define SOL_IRLMP 0xff
+
+#define IRLMP_ENUMDEVICES ((ULONG)0x10)
+#define IRLMP_IAS_SET ((ULONG)0x11)
+#define IRLMP_IAS_QUERY ((ULONG)0x12)
+#define IRLMP_SEND_PDU_LEN ((ULONG)0x13)
+#define IRLMP_EXCLUSIVE_MODE ((ULONG)0x14)
+#define IRLMP_IRLPT_MODE ((ULONG)0x15)
+#define IRLMP_9WIRE_MODE ((ULONG)0x16)
+#define IRLMP_TINYTP_MODE ((ULONG)0x17)
+#define IRLMP_PARAMETERS ((ULONG)0x18)
+#define IRLMP_DISCOVER_MODE ((ULONG)0x19)
+#define IRLMP_SHARP_MODE ((ULONG)0x20)
+
+#define IAS_MAX_CLASSNAME 64
+#define IAS_MAX_ATTRIBNAME 256
+
+#endif
+
+#define IAS_MAX_OCTET_STRING 1024
+#define IAS_MAX_USER_STRING 256
+
+#define LmCharSetASCII 0x00
+#define LmCharSetISO_8859_1 0x01
+#define LmCharSetISO_8859_2 0x02
+#define LmCharSetISO_8859_3 0x03
+#define LmCharSetISO_8859_4 0x04
+#define LmCharSetISO_8859_5 0x05
+#define LmCharSetISO_8859_6 0x06
+#define LmCharSetISO_8859_7 0x07
+#define LmCharSetISO_8859_8 0x08
+#define LmCharSetISO_8859_9 0x09
+#define LmCharSetUNICODE 0xff
+
+#endif /* AF_IRDA_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h
new file mode 100644
index 00000000..cc1e46b0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/amaudio.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __AMAUDIO__
+#define __AMAUDIO__
+
+#include <mmsystem.h>
+#include <dsound.h>
+
+#undef INTERFACE
+#define INTERFACE IAMDirectSound
+
+DECLARE_INTERFACE_(IAMDirectSound,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ /*** IAMDirectSound methods ***/
+ STDMETHOD(GetDirectSoundInterface)(THIS_ IDirectSound **ds) PURE;
+ STDMETHOD(GetPrimaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;
+ STDMETHOD(GetSecondaryBufferInterface)(THIS_ IDirectSoundBuffer **buf) PURE;
+ STDMETHOD(ReleaseDirectSoundInterface)(THIS_ IDirectSound *ds) PURE;
+ STDMETHOD(ReleasePrimaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE;
+ STDMETHOD(ReleaseSecondaryBufferInterface)(THIS_ IDirectSoundBuffer *buf) PURE;
+ STDMETHOD(SetFocusWindow)(THIS_ HWND hwnd, BOOL bgaudible) PURE;
+ STDMETHOD(GetFocusWindow)(THIS_ HWND *hwnd, BOOL *bgaudible) PURE;
+};
+#undef INTERFACE
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl
new file mode 100644
index 00000000..d9664bb0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/amstream.idl
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+import "strmif.idl";
+
+cpp_quote("#include <ddraw.h>")
+cpp_quote("#include <mmsystem.h>")
+cpp_quote("#include <mmstream.h>")
+cpp_quote("#include <ddstream.h>")
+cpp_quote("#include <austream.h>")
+
+cpp_quote("#if 0")
+interface IDirectDraw;
+interface IDirectDrawSurface;
+cpp_quote("#endif")
+
+interface IAMMultiMediaStream;
+interface IAMMediaStream;
+interface IMediaStreamFilter;
+interface IAMMediaTypeStream;
+interface IAMMediaTypeSample;
+
+enum {
+ AMMSF_NOGRAPHTHREAD = 0x00000001
+};
+
+enum {
+ AMMSF_ADDDEFAULTRENDERER = 0x00000001,
+ AMMSF_CREATEPEER = 0x00000002,
+ AMMSF_STOPIFNOSAMPLES = 0x00000004,
+ AMMSF_NOSTALL = 0x00000008
+};
+
+enum {
+ AMMSF_RENDERTYPEMASK = 0x00000003,
+ AMMSF_RENDERTOEXISTING = 0x00000000,
+ AMMSF_RENDERALLSTREAMS = 0x00000001,
+ AMMSF_NORENDER = 0x00000002,
+ AMMSF_NOCLOCK = 0x00000004,
+ AMMSF_RUN = 0x00000008
+};
+
+
+typedef [v1_enum] enum {
+ Disabled = 0,
+ ReadData = 1,
+ RenderData = 2
+} OUTPUT_STATE;
+
+[
+object,
+uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D),
+dual,
+helpstring("IDirectShowStream Interface"),
+pointer_default(unique)
+]
+interface IDirectShowStream : IDispatch
+{
+ [propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal);
+ [propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal);
+ [propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal);
+ [propput, id(2), helpstring("propetry Video")] HRESULT Video([in] OUTPUT_STATE newVal);
+ [propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal);
+ [propput, id(3), helpstring("propetry Audio")] HRESULT Audio([in] OUTPUT_STATE newVal);
+};
+
+[
+object,
+uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMultiMediaStream : IMultiMediaStream
+{
+ HRESULT Initialize(
+ [in] STREAM_TYPE StreamType,
+ [in] DWORD dwFlags,
+ [in] IGraphBuilder *pFilterGraph);
+
+ HRESULT GetFilterGraph(
+ [out] IGraphBuilder **ppGraphBuilder);
+
+ HRESULT GetFilter(
+ [out] IMediaStreamFilter **ppFilter);
+
+ HRESULT AddMediaStream(
+ [in] IUnknown *pStreamObject,
+ [in] const MSPID *PurposeId,
+ [in] DWORD dwFlags,
+ [out] IMediaStream **ppNewStream);
+
+ HRESULT OpenFile(
+ [in] LPCWSTR pszFileName,
+ [in] DWORD dwFlags);
+
+ HRESULT OpenMoniker(
+ [in] IBindCtx *pCtx,
+ [in] IMoniker *pMoniker,
+ [in] DWORD dwFlags);
+
+ HRESULT Render(
+ [in] DWORD dwFlags);
+}
+
+
+[
+object,
+uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMediaStream : IMediaStream
+{
+ HRESULT Initialize(
+ [in] IUnknown *pSourceObject,
+ [in] DWORD dwFlags,
+ [in] REFMSPID PurposeId,
+ [in] const STREAM_TYPE StreamType);
+
+ HRESULT SetState(
+ [in] FILTER_STATE State);
+
+ HRESULT JoinAMMultiMediaStream(
+ [in] IAMMultiMediaStream *pAMMultiMediaStream);
+
+ HRESULT JoinFilter(
+ [in] IMediaStreamFilter *pMediaStreamFilter);
+
+ HRESULT JoinFilterGraph(
+ [in] IFilterGraph *pFilterGraph);
+}
+
+
+[
+object,
+local,
+uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMediaStreamFilter : IBaseFilter
+{
+ HRESULT AddMediaStream(
+ [in] IAMMediaStream *pAMMediaStream);
+
+ HRESULT GetMediaStream(
+ [in] REFMSPID idPurpose,
+ [out] IMediaStream **ppMediaStream);
+
+ HRESULT EnumMediaStreams(
+ [in] long Index,
+ [out] IMediaStream **ppMediaStream);
+
+ HRESULT SupportSeeking(
+ [in] BOOL bRenderer);
+
+ HRESULT ReferenceTimeToStreamTime(
+ [in] [out] REFERENCE_TIME *pTime);
+
+ HRESULT GetCurrentStreamTime(
+ [out] REFERENCE_TIME *pCurrentStreamTime);
+
+ HRESULT WaitUntil(
+ [in] REFERENCE_TIME WaitStreamTime);
+
+ HRESULT Flush(
+ [in] BOOL bCancelEOS);
+
+ HRESULT EndOfStream();
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaSampleAllocator : IUnknown
+{
+ HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw);
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaSample : IUnknown
+{
+ HRESULT GetSurfaceAndReleaseLock(
+ [out] IDirectDrawSurface **ppDirectDrawSurface,
+ [out] RECT * pRect);
+
+ HRESULT LockMediaSamplePointer(void);
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+
+interface IAMMediaTypeStream : IMediaStream
+{
+ HRESULT GetFormat(
+ [out] AM_MEDIA_TYPE * pMediaType,
+ [in] DWORD dwFlags);
+
+ HRESULT SetFormat(
+ [in] AM_MEDIA_TYPE * pMediaType,
+ [in] DWORD dwFlags);
+
+ HRESULT CreateSample(
+ [in] long lSampleSize,
+ [in] BYTE * pbBuffer,
+ [in] DWORD dwFlags,
+ [in] IUnknown *pUnkOuter,
+ [out] IAMMediaTypeSample ** ppAMMediaTypeSample);
+
+ HRESULT GetStreamAllocatorRequirements(
+ [out] ALLOCATOR_PROPERTIES *pProps);
+
+ HRESULT SetStreamAllocatorRequirements(
+ [in] ALLOCATOR_PROPERTIES *pProps);
+}
+
+
+[
+object,
+local,
+uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D),
+pointer_default(unique)
+]
+interface IAMMediaTypeSample : IStreamSample
+{
+ HRESULT SetPointer(
+ [in] BYTE *pBuffer,
+ [in] long lSize);
+
+ HRESULT GetPointer(
+ [out] BYTE ** ppBuffer);
+
+ long GetSize(void);
+
+ HRESULT GetTime(
+ [out] REFERENCE_TIME * pTimeStart,
+ [out] REFERENCE_TIME * pTimeEnd);
+
+ HRESULT SetTime(
+ [in] REFERENCE_TIME * pTimeStart,
+ [in] REFERENCE_TIME * pTimeEnd);
+
+ HRESULT IsSyncPoint(void);
+
+ HRESULT SetSyncPoint(
+ BOOL bIsSyncPoint);
+
+ HRESULT IsPreroll(void);
+
+ HRESULT SetPreroll(
+ BOOL bIsPreroll);
+
+ long GetActualDataLength(void);
+
+ HRESULT SetActualDataLength(long Len);
+
+ HRESULT GetMediaType(
+ AM_MEDIA_TYPE **ppMediaType);
+
+ HRESULT SetMediaType(
+ AM_MEDIA_TYPE *pMediaType);
+
+ HRESULT IsDiscontinuity(void);
+
+ HRESULT SetDiscontinuity(
+ BOOL bDiscontinuity);
+
+ HRESULT GetMediaTime(
+ [out] LONGLONG * pTimeStart,
+ [out] LONGLONG * pTimeEnd);
+
+ HRESULT SetMediaTime(
+ [in] LONGLONG * pTimeStart,
+ [in] LONGLONG * pTimeEnd);
+}
+
+[
+ uuid(49C47CE5-9BA4-11d0-8212-00C04FC32C45)
+]
+coclass AMMultiMediaStream
+{
+ [default] dispinterface IDirectShowStream;
+}
+
+cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream, 0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMAudioStream, 0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMAudioData, 0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
+cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream, 0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+cpp_quote("DEFINE_GUID(CLSID_MediaStreamFilter, 0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl
new file mode 100644
index 00000000..547025ff
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/amvideo.idl
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+/* trick widl into thinking that it knows the DirectDraw types
+ * as there is no IDL file for them (yet) */
+cpp_quote("#if 0")
+interface IDirectDraw;
+typedef void DDSURFACEDESC,DDCAPS;
+typedef DWORD RGBQUAD;
+typedef LONGLONG REFERENCE_TIME;
+typedef struct
+{
+ DWORD biSize;
+ LONG biWidth;
+ LONG biHeight;
+ WORD biPlanes;
+ WORD biBitCount;
+ DWORD biCompression;
+ DWORD biSizeImage;
+ LONG biXPelsPerMeter;
+ LONG biYPelsPerMeter;
+ DWORD biClrUsed;
+ DWORD biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;
+cpp_quote("#endif")
+
+cpp_quote("#include <ddraw.h>")
+
+cpp_quote("#define AMDDS_NONE 0x00")
+cpp_quote("#define AMDDS_DCIPS 0x01")
+cpp_quote("#define AMDDS_PS 0x02")
+cpp_quote("#define AMDDS_RGBOVR 0x04")
+cpp_quote("#define AMDDS_YUVOVR 0x08")
+cpp_quote("#define AMDDS_RGBOFF 0x10")
+cpp_quote("#define AMDDS_YUVOFF 0x20")
+cpp_quote("#define AMDDS_RGBFLP 0x40")
+cpp_quote("#define AMDDS_YUVFLP 0x80")
+cpp_quote("#define AMDDS_ALL 0xFF")
+cpp_quote("#define AMDDS_DEFAULT AMDDS_ALL")
+
+cpp_quote("#define AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)")
+cpp_quote("#define AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)")
+cpp_quote("#define AMDSS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)")
+
+[
+ object,
+ /* uuid(36d39eb0-dd75-11ce-bf0e-00aa0055595a) conflicts with uuids.h */
+ pointer_default(unique),
+ local
+]
+interface IDirectDrawVideo : IUnknown
+{
+ HRESULT GetSwitches([out] DWORD * pSwitches);
+ HRESULT SetSwitches([in] DWORD Switches);
+ HRESULT GetCaps([out] DDCAPS * pCaps);
+ HRESULT GetEmulatedCaps([out] DDCAPS *pCaps);
+ HRESULT GetSurfaceDesc([out] DDSURFACEDESC * pSurfaceDesc);
+ HRESULT GetFourCCCodes([out] DWORD * pCount, [out] DWORD * pCodes);
+ HRESULT SetDirectDraw([in] IDirectDraw *ddraw);
+ HRESULT GetDirectDraw([out] IDirectDraw **ddraw);
+ HRESULT GetSurfaceType([out] DWORD * pSurfaceType);
+ HRESULT SetDefault();
+ HRESULT UseScanLine([in] long UseScanLine);
+ HRESULT CanUseScanLine([out] long * UseScanLine);
+ HRESULT UseOverlayStretch([in] long UseOverlayStretch);
+ HRESULT CanUseOverlayStretch([out] long * UseOverlayStretch);
+ HRESULT UseWhenFullScreen([in] long UseWhenFullScreen);
+ HRESULT WillUseFullScreen([out] long * UseWhenFullScreen);
+}
+
+[
+ object,
+ /* uuid(1bd0ecb0-f8e2-11ce-aac6-0020af0b99a3) conflicts with uuids.h */
+ pointer_default(unique),
+ local
+]
+interface IQualProp : IUnknown
+{
+ [propget] HRESULT FramesDroppedInRenderer([out] int * pcFrames);
+ [propget] HRESULT FramesDrawn([out] int * pcFramesDrawn);
+ [propget] HRESULT AvgFrameRate([out] int * piAvgFrameRate);
+ [propget] HRESULT Jitter([out] int * iJitter);
+ [propget] HRESULT AvgSyncOffset([out] int * piAvg);
+ [propget] HRESULT DevSyncOffset([out] int * piDev);
+}
+
+[
+ object,
+ /* uuid(dd1d7110-7836-11cf-bf47-00aa0055595a) conflicts with uuids.h */
+ pointer_default(unique)
+]
+interface IFullScreenVideo : IUnknown
+{
+ HRESULT CountModes([out] long * pModes);
+ HRESULT GetModeInfo([in] long Mode, [out] long * pWidth, [out] long * pHeight, [out] long * pDepth);
+ HRESULT GetCurrentMode([out] long * pMode);
+ HRESULT IsModeAvailable([in] long Mode);
+ HRESULT IsModeEnabled([in] long Mode);
+ HRESULT SetEnabled([in] long Mode, [in] long bEnabled);
+ HRESULT GetClipFactor([out] long * pClipFactor);
+ HRESULT SetClipFactor([in] long ClipFactor);
+ HRESULT SetMessageDrain([in] HWND hwnd);
+ HRESULT GetMessageDrain([out] HWND * hwnd);
+ HRESULT SetMonitor([in] long Monitor);
+ HRESULT GetMonitor([out] long * Monitor);
+ HRESULT HideOnDeactivate([in] long Hide);
+ HRESULT IsHideOnDeactivate();
+ HRESULT SetCaption([in] BSTR strCaption);
+ HRESULT GetCaption([out] BSTR * pstrCaption);
+ HRESULT SetDefault();
+}
+
+[
+ object,
+ /* uuid(53479470-f1dd-11cf-bc42-00aa00ac74f6) conflicts with uuids.h */
+ pointer_default(unique),
+ local
+]
+interface IFullScreenVideoEx : IFullScreenVideo
+{
+ HRESULT SetAcceleratorTable([in] HWND hwnd, [in] HACCEL hAccel);
+ HRESULT GetAcceleratorTable([out] HWND * phwnd, [out] HACCEL * phAccel);
+ HRESULT KeepPixelAspectRatio([in] long KeepAspect);
+ /* FIXME: not sure is this next method is an [out] */
+ HRESULT IsKeepPixelAspectRatio([out] long * pKeepAspect);
+}
+
+[
+ object,
+ /* uuid(61ded640-e912-11ce-a099-00aa00479a58) conflicts with uuids.h */
+ pointer_default(unique),
+ local
+]
+interface IBaseVideoMixer : IUnknown
+{
+ HRESULT SetLeadPin([in] int iPin);
+ HRESULT GetLeadPin([out] int * piPin);
+ HRESULT GetInputPinCount([out] int * piPinCount);
+ HRESULT IsUsingClock([out] int * pbValue);
+ HRESULT SetUsingClock([in] int bValue);
+ HRESULT GetClockPeriod([out] int * pbValue);
+ HRESULT SetClockPeriod([in] int bValue);
+}
+
+#define iPALETTE_COLORS 256
+#define iMASK_COLORS 3
+
+cpp_quote("#define iPALETTE_COLORS 256")
+cpp_quote("#define iEGA_COLORS 16")
+cpp_quote("#define iMASK_COLORS 3")
+cpp_quote("#define iTRUECOLOR 16")
+cpp_quote("#define iRED 0")
+cpp_quote("#define iGREEN 1")
+cpp_quote("#define iBLUE 2")
+cpp_quote("#define iPALETTE 8")
+cpp_quote("#define iMAXBITS 8")
+
+typedef struct tag_TRUECOLORINFO
+{
+ DWORD dwBitMasks[iMASK_COLORS];
+ RGBQUAD bmiColors[iPALETTE_COLORS];
+} TRUECOLORINFO;
+
+typedef struct tagVIDEOINFOHEADER
+{
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwBitRate;
+ DWORD dwBitErrorRate;
+ REFERENCE_TIME AvgTimePerFrame;
+
+ BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER;
+
+typedef struct tagVIDEOINFO
+{
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwBitRate;
+ DWORD dwBitErrorRate;
+ REFERENCE_TIME AvgTimePerFrame;
+
+ BITMAPINFOHEADER bmiHeader;
+
+ union
+ {
+ RGBQUAD bmiColors[iPALETTE_COLORS];
+ DWORD dwBitMasks[iMASK_COLORS];
+ TRUECOLORINFO TrueColorInfo;
+ };
+} VIDEOINFO;
+
+typedef struct tagMPEG1VIDEOINFO
+{
+ VIDEOINFOHEADER hdr;
+ DWORD dwStartTimeCode;
+ DWORD cbSequenceHeader;
+ BYTE bSequenceHeader[1];
+} MPEG1VIDEOINFO;
+
+cpp_quote("#define MAX_SIZE_MPEG1_SEQUENCE_INFO 140")
+cpp_quote("#define MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)")
+
+typedef struct tagAnalogVideoInfo
+{
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwActiveWidth;
+ DWORD dwActiveHeight;
+ REFERENCE_TIME AvgTimePerFrame;
+} ANALOGVIDEOINFO;
+
+typedef enum
+{
+ AM_PROPERTY_FRAMESTEP_STEP = 0x01,
+ AM_PROPERTY_FRAMESTEP_CANCEL = 0x02,
+ AM_PROPERTY_FRAMESTEP_CANSTEP = 0x03,
+ AM_PROPERTY_FRAMESTEP_CANSTEPMULTIPLE = 0x04
+} AM_PROPERTY_FRAMESTEP;
+
+typedef struct _AM_FRAMESTEP_STEP
+{
+ DWORD dwFramesToStep;
+} AM_FRAMESTEP_STEP;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h
new file mode 100644
index 00000000..3cbe6e52
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/appcompatapi.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012 Detlef Riekenberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __APPCOMPAT_H
+#define __APPCOMPAT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI ApphelpCheckShellObject(REFCLSID, BOOL, ULONGLONG *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __APPCOMPAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h
new file mode 100644
index 00000000..c018a0e0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/appmgmt.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _APPMGMT_H
+#define _APPMGMT_H
+
+typedef struct _MANAGEDAPPLICATION
+{
+ LPWSTR pszPackageName;
+ LPWSTR pszPublisher;
+ DWORD dwVersionHi;
+ DWORD dwVersionLo;
+ DWORD dwRevision;
+ GUID GpoId;
+ LPWSTR pszPolicyName;
+ GUID ProductId;
+ LANGID Language;
+ LPWSTR pszOwner;
+ LPWSTR pszCompany;
+ LPWSTR pszComments;
+ LPWSTR pszContact;
+ LPWSTR pszSupportUrl;
+ DWORD dwPathType;
+ BOOL bInstalled;
+} MANAGEDAPPLICATION, *PMANAGEDAPPLICATION;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI CommandLineFromMsiDescriptor(WCHAR*,WCHAR*,DWORD*);
+DWORD WINAPI GetManagedApplications(GUID*,DWORD,DWORD,LPDWORD,PMANAGEDAPPLICATION*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _APPMGMT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl
new file mode 100644
index 00000000..ed7a4f45
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/asptlb.idl
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+[
+ object,
+ dual,
+ uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)
+]
+interface IRequestDictionary : IDispatch
+{
+ [propget]
+ HRESULT Item(IRequestDictionary *iface, [in, optional] VARIANT Var,
+ [retval, out] VARIANT *pVariantReturn);
+
+ [restricted, propget]
+ HRESULT _NewEnum(IRequestDictionary *iface, [retval, out] IUnknown **ppEnumReturn);
+
+ [propget]
+ HRESULT Count(IRequestDictionary *iface, [retval, out] int *cStrRet);
+
+ [propget]
+ HRESULT Key(IRequestDictionary *iface, [in] VARIANT VarKey, [retval, out]VARIANT *pvar);
+};
+
+[
+ object,
+ dual,
+ uuid(D97A6DA0-A864-11cf-83BE-00A0C90C2BD8)
+]
+interface IResponse : IDispatch
+{
+ [propget]
+ HRESULT Buffer(IResponse *iface, [retval, out] VARIANT_BOOL *fIsBuffering);
+
+ [propput]
+ HRESULT Buffer(IResponse *iface, [in] VARIANT_BOOL fIsBuffering);
+
+ [propget]
+ HRESULT ContentType(IResponse *iface, [retval, out] BSTR *pbstrContentTypeRet);
+
+ [propput]
+ HRESULT ContentType(IResponse *iface, [in] BSTR bstrContentType);
+
+ [propget]
+ HRESULT Expires(IResponse *iface, [retval, out] VARIANT *pvarExpiresMinutesRet);
+
+ [propput]
+ HRESULT Expires(IResponse *iface, [in] long lExpiresMinutes);
+
+ [propget]
+ HRESULT ExpiresAbsolute(IResponse *iface, [retval, out] VARIANT *pvarExpiresRet);
+
+ [propput]
+ HRESULT ExpiresAbsolute(IResponse *iface, [in] DATE dtExpires);
+
+ [propget]
+ HRESULT Cookies(IResponse *iface, [retval, out] IRequestDictionary **ppCookies);
+
+ [propget]
+ HRESULT Status(IResponse *iface, [retval][out] BSTR *pbstrStatusRet);
+
+ [propput]
+ HRESULT Status(IResponse *iface, [in] BSTR bstrStatus);
+
+ [hidden]
+ HRESULT Add(IResponse *iface, [in] BSTR bstrHeaderValue, [in] BSTR bstrHeaderName);
+
+ HRESULT AddHeader(IResponse *iface, [in] BSTR bstrHeaderName, [in] BSTR bstrHeaderValue);
+
+ HRESULT AppendToLog(IResponse *iface, [in] BSTR bstrLogEntry);
+
+ HRESULT BinaryWrite(IResponse *iface, [in] VARIANT varInput);
+
+ HRESULT Clear(IResponse *iface);
+
+ HRESULT End(IResponse *iface);
+
+ HRESULT Flush(IResponse *iface);
+
+ HRESULT Redirect(IResponse *iface, [in] BSTR bstrURL);
+
+ HRESULT Write(IResponse *iface, [in] VARIANT varText);
+
+ [hidden]
+ HRESULT WriteBlock(IResponse *iface, [in] short iBlockNumber);
+
+ HRESULT IsClientConnected(IResponse *iface, [retval, out] VARIANT_BOOL *pfIsClientConnected);
+
+ [propget]
+ HRESULT get_CharSet( IResponse *iface, [retval, out] BSTR *pbstrCharSetRet);
+
+ [propput]
+ HRESULT put_CharSet(IResponse *iface, [in] BSTR bstrCharSet);
+
+ HRESULT Pics(IResponse *iface, [in] BSTR bstrHeaderValue);
+
+ [propget]
+ HRESULT get_CacheControl(IResponse *iface, [retval, out] BSTR *pbstrCacheControl);
+
+ [propput]
+ HRESULT put_CacheControl(IResponse *iface, [in] BSTR bstrCacheControl);
+
+ [propget]
+ HRESULT get_CodePage(IResponse *iface, [retval, out] long *plvar);
+
+ [propput]
+ HRESULT put_CodePage(IResponse *iface, [in] long lvar);
+
+ [propget]
+ HRESULT get_LCID(IResponse *iface, [retval, out] long *plvar);
+
+ [propput]
+ HRESULT put_LCID(IResponse *iface, [in] long lvar);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl
new file mode 100644
index 00000000..c97c3c51
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/asynot.idl
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a96-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBAsynchNotify : IUnknown
+{
+ [local]
+ HRESULT OnLowResource([in] DB_DWRESERVE dwReserved);
+
+ [call_as(OnLowResource)]
+ HRESULT RemoteOnLowResource([in] DB_DWRESERVE dwReserved);
+
+ [local]
+ HRESULT OnProgress([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [in] DBCOUNTITEM ulProgress,
+ [in] DBCOUNTITEM ulProgressMax,
+ [in] DBASYNCHPHASE eAsynchPhase,
+ [in, annotation("__in_opt")] LPOLESTR pwszStatusText);
+
+ [call_as(OnProgress)]
+ HRESULT RemoteOnProgress([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [in] DBCOUNTITEM ulProgress,
+ [in] DBCOUNTITEM ulProgressMax,
+ [in] DBASYNCHPHASE eAsynchPhase,
+ [in, unique, string] LPOLESTR pwszStatusText);
+
+ [local]
+ HRESULT OnStop([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [in] HRESULT hrStatus,
+ [in, annotation("__in_opt")] LPOLESTR pwszStatusText);
+
+ [call_as(OnStop)]
+ HRESULT RemoteOnStop([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [in] HRESULT hrStatus,
+ [in, unique, string] LPOLESTR pwszStatusText);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl
new file mode 100644
index 00000000..70d3d813
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/asysta.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a95-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBAsynchStatus : IUnknown
+{
+ [local]
+ HRESULT Abort([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation);
+
+ [call_as(Abort)]
+ HRESULT RemoteAbort([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetStatus([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [out, annotation("__out_opt")] DBCOUNTITEM *pulProgress,
+ [out, annotation("__out_opt")] DBCOUNTITEM *pulProgressMax,
+ [out, annotation("__out")] DBASYNCHPHASE *peAsynchPhase,
+ [out, annotation("__deref_opt_inout_opt")] LPOLESTR *ppwszStatusText);
+
+ [call_as(GetStatus)]
+ HRESULT RemoteGetStatus([in] HCHAPTER hChapter,
+ [in] DBASYNCHOP eOperation,
+ [in, out, unique] DBCOUNTITEM *pulProgress,
+ [in, out, unique] DBCOUNTITEM *pulProgressMax,
+ [in, out, unique] DBASYNCHPHASE *peAsynchPhase,
+ [in, out, unique] LPOLESTR *ppwszStatusText,
+ [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h
new file mode 100644
index 00000000..24d6eb8e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlbase.h
@@ -0,0 +1,275 @@
+/*
+ * Implementation of the Active Template Library (atl.dll)
+ *
+ * Copyright 2004 Aric Stewart for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ATLBASE_H__
+#define __WINE_ATLBASE_H__
+
+#include <atliface.h>
+#include <comcat.h>
+
+/* Wine extension: we (ab)use _ATL_VER to handle struct layout differences between ATL versions. */
+#define _ATL_VER_30 0x0300
+#define _ATL_VER_70 0x0700
+#define _ATL_VER_80 0x0800
+#define _ATL_VER_100 0x0a00
+#define _ATL_VER_110 0x0b00
+
+#ifndef _ATL_VER
+#define _ATL_VER _ATL_VER_100
+#endif
+
+typedef HRESULT (WINAPI _ATL_CREATORFUNC)(void* pv, REFIID riid, LPVOID* ppv);
+typedef HRESULT (WINAPI _ATL_CREATORARGFUNC)(void* pv, REFIID riid, LPVOID* ppv, DWORD dw);
+typedef HRESULT (WINAPI _ATL_MODULEFUNC)(DWORD dw);
+typedef LPCSTR (WINAPI _ATL_DESCRIPTIONFUNCA)(void);
+typedef LPCWSTR (WINAPI _ATL_DESCRIPTIONFUNCW)(void);
+typedef const struct _ATL_CATMAP_ENTRY* (_ATL_CATMAPFUNC)(void);
+typedef void (WINAPI _ATL_TERMFUNC)(DWORD dw);
+
+typedef CRITICAL_SECTION CComCriticalSection;
+
+typedef struct _ATL_OBJMAP_ENTRYA_V1_TAG
+{
+ const CLSID* pclsid;
+ HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+ _ATL_CREATORFUNC* pfnGetClassObject;
+ _ATL_CREATORFUNC* pfnCreateInstance;
+ IUnknown* pCF;
+ DWORD dwRegister;
+ _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;
+}_ATL_OBJMAP_ENTRYA_V1;
+
+typedef struct _ATL_OBJMAP_ENTRYW_V1_TAG
+{
+ const CLSID* pclsid;
+ HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+ _ATL_CREATORFUNC* pfnGetClassObject;
+ _ATL_CREATORFUNC* pfnCreateInstance;
+ IUnknown* pCF;
+ DWORD dwRegister;
+ _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;
+} _ATL_OBJMAP_ENTRYW_V1;
+
+typedef struct _ATL_OBJMAP_ENTRYA_TAG
+{
+ const CLSID* pclsid;
+ HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+ _ATL_CREATORFUNC* pfnGetClassObject;
+ _ATL_CREATORFUNC* pfnCreateInstance;
+ IUnknown* pCF;
+ DWORD dwRegister;
+ _ATL_DESCRIPTIONFUNCA* pfnGetObjectDescription;
+ _ATL_CATMAPFUNC* pfnGetCategoryMap;
+ void (WINAPI *pfnObjectMain)(BOOL bStarting);
+}_ATL_OBJMAP_ENTRYA;
+
+typedef struct _ATL_OBJMAP_ENTRYW_TAG
+{
+ const CLSID* pclsid;
+ HRESULT (WINAPI *pfnUpdateRegistry)(BOOL bRegister);
+ _ATL_CREATORFUNC* pfnGetClassObject;
+ _ATL_CREATORFUNC* pfnCreateInstance;
+ IUnknown* pCF;
+ DWORD dwRegister;
+ _ATL_DESCRIPTIONFUNCW* pfnGetObjectDescription;
+ _ATL_CATMAPFUNC* pfnGetCategoryMap;
+ void (WINAPI *pfnObjectMain)(BOOL bStarting);
+} _ATL_OBJMAP_ENTRYW, _ATL_OBJMAP_ENTRY30, _ATL_OBJMAP_ENTRY;
+
+
+typedef struct _ATL_TERMFUNC_ELEM_TAG
+{
+ _ATL_TERMFUNC* pFunc;
+ DWORD_PTR dw;
+ struct _ATL_TERMFUNC_ELEM_TAG* pNext;
+} _ATL_TERMFUNC_ELEM;
+
+typedef struct _AtlCreateWndData_TAG
+{
+ void* m_pThis;
+ DWORD m_dwThreadID;
+ struct _AtlCreateWndData_TAG* m_pNext;
+} _AtlCreateWndData;
+
+typedef struct _ATL_MODULEA_TAG
+{
+ UINT cbSize;
+ HINSTANCE m_hInst;
+ HINSTANCE m_hInstResource;
+ HINSTANCE m_hInstTypeLib;
+ _ATL_OBJMAP_ENTRYA* m_pObjMap;
+ LONG m_nLockCnt;
+ HANDLE m_hHeap;
+ union
+ {
+ CRITICAL_SECTION m_csTypeInfoHolder;
+ CRITICAL_SECTION m_csStaticDataInit;
+ } u;
+ CRITICAL_SECTION m_csWindowCreate;
+ CRITICAL_SECTION m_csObjMap;
+
+ DWORD dwAtlBuildVer;
+ _AtlCreateWndData* m_pCreateWndList;
+ BOOL m_bDestroyHeap;
+ GUID* pguidVer;
+ DWORD m_dwHeaps;
+ HANDLE* m_phHeaps;
+ int m_nHeap;
+ _ATL_TERMFUNC_ELEM* m_pTermFuncs;
+} _ATL_MODULEA;
+
+typedef struct _ATL_MODULEW_TAG
+{
+ UINT cbSize;
+ HINSTANCE m_hInst;
+ HINSTANCE m_hInstResource;
+ HINSTANCE m_hInstTypeLib;
+ _ATL_OBJMAP_ENTRYW* m_pObjMap;
+ LONG m_nLockCnt;
+ HANDLE m_hHeap;
+ union
+ {
+ CRITICAL_SECTION m_csTypeInfoHolder;
+ CRITICAL_SECTION m_csStaticDataInit;
+ } u;
+ CRITICAL_SECTION m_csWindowCreate;
+ CRITICAL_SECTION m_csObjMap;
+
+ DWORD dwAtlBuildVer;
+ _AtlCreateWndData* m_pCreateWndList;
+ BOOL m_bDestroyHeap;
+ GUID* pguidVer;
+ DWORD m_dwHeaps;
+ HANDLE* m_phHeaps;
+ int m_nHeap;
+ _ATL_TERMFUNC_ELEM* m_pTermFuncs;
+} _ATL_MODULEW;
+
+typedef struct
+{
+ void *m_aT;
+ int m_nSize;
+ int m_nAllocSize;
+} CSimpleArray;
+
+typedef struct _ATL_MODULE70
+{
+ UINT cbSize;
+ LONG m_nLockCnt;
+ _ATL_TERMFUNC_ELEM *m_pTermFuncs;
+ CComCriticalSection m_csStaticDataInitAndTypeInfo;
+} _ATL_MODULE70;
+
+typedef struct _ATL_WIN_MODULE70
+{
+ UINT cbSize;
+ CComCriticalSection m_csWindowCreate;
+ _AtlCreateWndData *m_pCreateWndList;
+ CSimpleArray /* <ATOM> */ m_rgWindowClassAtoms;
+} _ATL_WIN_MODULE70;
+
+typedef struct _ATL_COM_MODULE70
+{
+ UINT cbSize;
+ HINSTANCE m_hInstTypeLib;
+ _ATL_OBJMAP_ENTRY **m_ppAutoObjMapFirst;
+ _ATL_OBJMAP_ENTRY **m_ppAutoObjMapLast;
+ CComCriticalSection m_csObjMap;
+} _ATL_COM_MODULE70, _ATL_COM_MODULE;
+
+#if _ATL_VER >= _ATL_VER_70
+typedef _ATL_MODULE70 _ATL_MODULE;
+typedef _ATL_WIN_MODULE70 _ATL_WIN_MODULE;
+#else
+typedef _ATL_MODULEW _ATL_MODULE;
+typedef _ATL_MODULEW _ATL_WIN_MODULE;
+#endif
+
+typedef struct _ATL_INTMAP_ENTRY_TAG
+{
+ const IID* piid;
+ DWORD dw;
+ _ATL_CREATORARGFUNC* pFunc;
+} _ATL_INTMAP_ENTRY;
+
+struct _ATL_REGMAP_ENTRY
+{
+ LPCOLESTR szKey;
+ LPCOLESTR szData;
+};
+
+struct _ATL_CATMAP_ENTRY
+{
+ int iType;
+ const CATID *pcatid;
+};
+
+#define _ATL_CATMAP_ENTRY_END 0
+#define _ATL_CATMAP_ENTRY_IMPLEMENTED 1
+#define _ATL_CATMAP_ENTRY_REQUIRED 2
+
+HRESULT WINAPI AtlAdvise(IUnknown *pUnkCP, IUnknown *pUnk, const IID * iid, LPDWORD dpw);
+HRESULT WINAPI AtlAxAttachControl(IUnknown*,HWND,IUnknown**);
+HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);
+HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);
+HRESULT WINAPI AtlFreeMarshalStream(IStream *pStream);
+HRESULT WINAPI AtlInternalQueryInterface(void* pThis, const _ATL_INTMAP_ENTRY* pEntries, REFIID iid, void** ppvObject);
+HRESULT WINAPI AtlMarshalPtrInProc(IUnknown *pUnk, const IID *iid, IStream **ppStream);
+void WINAPI AtlModuleAddCreateWndData(_ATL_MODULEW *pM, _AtlCreateWndData *pData, void* pvObject);
+HRESULT WINAPI AtlWinModuleInit(_ATL_WIN_MODULE*);
+void WINAPI AtlWinModuleAddCreateWndData(_ATL_WIN_MODULE*,_AtlCreateWndData*,void*);
+void* WINAPI AtlWinModuleExtractCreateWndData(_ATL_WIN_MODULE*);
+HRESULT WINAPI AtlModuleAddTermFunc(_ATL_MODULE *pM, _ATL_TERMFUNC *pFunc, DWORD_PTR dw);
+void WINAPI AtlCallTermFunc(_ATL_MODULE*);
+void* WINAPI AtlModuleExtractCreateWndData(_ATL_MODULEW *pM);
+HRESULT WINAPI AtlModuleInit(_ATL_MODULEW* pM, _ATL_OBJMAP_ENTRYW* p, HINSTANCE h);
+HRESULT WINAPI AtlModuleLoadTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex, BSTR *pbstrPath, ITypeLib **ppTypeLib);
+HRESULT WINAPI AtlModuleRegisterClassObjects(_ATL_MODULEW* pM, DWORD dwClsContext, DWORD dwFlags);
+HRESULT WINAPI AtlModuleRegisterServer(_ATL_MODULEW* pM, BOOL bRegTypeLib, const CLSID* pCLSID);
+HRESULT WINAPI AtlModuleRegisterTypeLib(_ATL_MODULEW *pM, LPCOLESTR lpszIndex);
+HRESULT WINAPI AtlModuleUnregisterServer(_ATL_MODULEW* pM, const CLSID* pCLSID);
+HRESULT WINAPI AtlModuleUpdateRegistryFromResourceD(_ATL_MODULEW *pM, LPCOLESTR lpszRes, BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg );
+HRESULT WINAPI AtlModuleUnregisterServerEx(_ATL_MODULEW* pM, BOOL bUnRegTypeLib, const CLSID* pCLSID);
+HRESULT WINAPI AtlModuleTerm(_ATL_MODULEW* pM);
+HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID * iid, DWORD dw);
+HRESULT WINAPI AtlUnmarshalPtr(IStream *pStream, const IID *iid, IUnknown **ppUnk);
+HRESULT WINAPI AtlCreateRegistrar(IRegistrar**);
+HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE,LPCOLESTR,BOOL,struct _ATL_REGMAP_ENTRY*,IRegistrar*);
+HRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**);
+HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR);
+HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL);
+HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**);
+HRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE*,DWORD,DWORD);
+HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE*,BOOL,const CLSID*);
+BOOL WINAPI AtlWaitWithMessageLoop(HANDLE);
+HRESULT WINAPI AtlGetObjectSourceInterface(IUnknown*,GUID*,IID*,unsigned short*,unsigned short*);
+HRESULT WINAPI AtlSetPerUserRegistration(unsigned char /*bool*/);
+HRESULT WINAPI AtlGetPerUserRegistration(unsigned char /*bool*/ *);
+
+#endif /* __WINE_ATLBASE_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl
new file mode 100644
index 00000000..60e12ba0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/atliface.idl
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+
+cpp_quote("#ifdef ATL_INITGUID")
+cpp_quote("#include <initguid.h>")
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(e21f8a85-b05d-4243-8183-c7cb405588f7),
+ pointer_default(unique)
+]
+interface IRegistrarBase : IUnknown
+{
+ HRESULT AddReplacement(
+ [in] LPCOLESTR Key,
+ [in] LPCOLESTR item);
+
+ HRESULT ClearReplacements();
+}
+
+[
+ object,
+ uuid(44EC053B-400F-11D0-9DCD-00A0C90391D3),
+ pointer_default(unique)
+]
+interface IRegistrar : IRegistrarBase
+{
+ HRESULT ResourceRegisterSz(
+ [in] LPCOLESTR resFileName,
+ [in] LPCOLESTR szID,
+ [in] LPCOLESTR szType);
+
+ HRESULT ResourceUnregisterSz(
+ [in] LPCOLESTR resFileName,
+ [in] LPCOLESTR szID,
+ [in] LPCOLESTR szType);
+
+ HRESULT FileRegister(
+ [in] LPCOLESTR fileName);
+
+ HRESULT FileUnregister(
+ [in] LPCOLESTR fileName);
+
+ HRESULT StringRegister(
+ [in] LPCOLESTR data);
+
+ HRESULT StringUnregister(
+ [in] LPCOLESTR data);
+
+ HRESULT ResourceRegister(
+ [in] LPCOLESTR resFileName,
+ [in] UINT nID,
+ [in] LPCOLESTR szType);
+
+ HRESULT ResourceUnregister(
+ [in] LPCOLESTR resFileName,
+ [in] UINT nID,
+ [in] LPCOLESTR szType);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_Registrar,0x44ec053a,0x400f,0x11d0,0x9d,0xcd,0x00,0xa0,0xc9,0x03,0x91,0xd3);")
+
+cpp_quote("HRESULT WINAPI AtlAxCreateControl(LPCOLESTR,HWND,IStream*,IUnknown**);")
+cpp_quote("HRESULT WINAPI AtlAxCreateControlEx(LPCOLESTR,HWND,IStream*,IUnknown**,IUnknown**,REFIID,IUnknown*);")
+cpp_quote("BOOL WINAPI AtlAxWinInit(void);")
+
+cpp_quote("HWND WINAPI AtlAxCreateDialogW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);")
+cpp_quote("HWND WINAPI AtlAxCreateDialogA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);")
+cpp_quote("#define AtlAxCreateDialog WINELIB_NAME_AW(AtlAxCreateDialog)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h
new file mode 100644
index 00000000..ce366406
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/atlwin.h
@@ -0,0 +1,62 @@
+/*
+ * Active Template Library Window Functions
+ *
+ * Copyright 2006 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ATLWIN_H__
+#define __WINE_ATLWIN_H__
+
+typedef struct _ATL_WNDCLASSINFOA_TAG
+{
+ WNDCLASSEXA m_wc;
+ LPCSTR m_lpszOrigName;
+ WNDPROC pWndProc;
+ LPCSTR m_lpszCursorID;
+ BOOL m_bSystemCursor;
+ ATOM m_atom;
+ CHAR m_szAutoName[14];
+} _ATL_WNDCLASSINFOA;
+
+typedef struct _ATL_WNDCLASSINFOW_TAG
+{
+ WNDCLASSEXW m_wc;
+ LPCWSTR m_lpszOrigName;
+ WNDPROC pWndProc;
+ LPCWSTR m_lpszCursorID;
+ BOOL m_bSystemCursor;
+ ATOM m_atom;
+ WCHAR m_szAutoName[14];
+} _ATL_WNDCLASSINFOW;
+
+ATOM WINAPI AtlModuleRegisterWndClassInfoA(_ATL_MODULEA *pm, _ATL_WNDCLASSINFOA *wci, WNDPROC *pProc);
+ATOM WINAPI AtlModuleRegisterWndClassInfoW(_ATL_MODULEW *pm, _ATL_WNDCLASSINFOW *wci, WNDPROC *pProc);
+
+HDC WINAPI AtlCreateTargetDC(HDC hdc, DVTARGETDEVICE *ptd);
+void WINAPI AtlHiMetricToPixel(const SIZEL *lpSizeInHiMetric, LPSIZEL lpSizeInPix);
+void WINAPI AtlPixelToHiMetric(const SIZEL *lpSizeInPix, LPSIZEL lpSizeInHiMetric);
+
+#endif /* __WINE_ATLWIN_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h
new file mode 100644
index 00000000..03e9535e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audevcod.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __AUDEVCOD__
+#define __AUDEVCOD__
+
+typedef enum _tagSND_DEVICE_ERROR
+{
+ SNDDEV_ERROR_Open=1,
+ SNDDEV_ERROR_Close=2,
+ SNDDEV_ERROR_GetCaps=3,
+ SNDDEV_ERROR_PrepareHeader=4,
+ SNDDEV_ERROR_UnprepareHeader=5,
+ SNDDEV_ERROR_Reset=6,
+ SNDDEV_ERROR_Restart=7,
+ SNDDEV_ERROR_GetPosition=8,
+ SNDDEV_ERROR_Write=9,
+ SNDDEV_ERROR_Pause=10,
+ SNDDEV_ERROR_Stop=11,
+ SNDDEV_ERROR_Start=12,
+ SNDDEV_ERROR_AddBuffer=13,
+ SNDDEV_ERROR_Query=14
+} SNDDEV_ERR;
+
+#define EC_SND_DEVICE_ERROR_BASE 0x0200
+#define EC_SNDDEV_IN_ERROR (EC_SND_DEVICE_ERROR_BASE+0x00)
+#define EC_SNDDEV_OUT_ERROR (EC_SND_DEVICE_ERROR_BASE+0x01)
+
+#endif /* __AUDEVCOD__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl
new file mode 100644
index 00000000..6d9a6cb7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audioclient.idl
@@ -0,0 +1,336 @@
+/*
+ * Core Audio audioclient definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "unknwn.idl";
+import "audiosessiontypes.h";
+
+/* Forward declarations */
+interface IAudioClient;
+interface IAudioRenderClient;
+interface IAudioCaptureClient;
+interface IAudioClock;
+interface IAudioClock2;
+interface IAudioClockAdjustment;
+interface ISimpleAudioVolume;
+interface IAudioStreamVolume;
+interface IChannelAudioVolume;
+
+cpp_quote("#if 0")
+typedef struct WAVEFORMATEX /*[hidden,restricted]*/
+{
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wBitsPerSample;
+ WORD cbSize;
+} WAVEFORMATEX;
+cpp_quote("#else")
+cpp_quote("#include <mmreg.h>")
+cpp_quote("#endif")
+
+cpp_quote("#if 0")
+typedef LONGLONG /*[hidden,restricted]*/ REFERENCE_TIME;
+cpp_quote("#else")
+cpp_quote("#define _IKsControl_")
+cpp_quote("#include <ks.h>")
+cpp_quote("#include <ksmedia.h>")
+cpp_quote("#endif")
+
+enum _AUDCLNT_BUFFERFLAGS
+{
+ AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1,
+ AUDCLNT_BUFFERFLAGS_SILENT = 0x2,
+ AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4
+};
+
+[
+ local,
+ pointer_default(unique),
+ uuid(1cb9ad4c-dbfa-4c32-b178-c2f568a703b2),
+ object,
+]
+interface IAudioClient : IUnknown
+{
+ HRESULT Initialize(
+ [in] AUDCLNT_SHAREMODE ShareMode,
+ [in] DWORD StreamFlags,
+ [in] REFERENCE_TIME hnsBufferDuration,
+ [in] REFERENCE_TIME hnsPeriodicity,
+ [in] const WAVEFORMATEX *pFormat,
+ [in] LPCGUID AudioSessionGuid
+ );
+ HRESULT GetBufferSize(
+ [out] UINT32 *pNumBufferFrames
+ );
+ HRESULT GetStreamLatency(
+ [out] REFERENCE_TIME *phnsLatency
+ );
+ HRESULT GetCurrentPadding(
+ [out] UINT32 *pNumPaddingFrames
+ );
+ HRESULT IsFormatSupported(
+ [in] AUDCLNT_SHAREMODE ShareMode,
+ [in] const WAVEFORMATEX *pFormat,
+ [out,unique] WAVEFORMATEX **ppClosestMatch
+ );
+ HRESULT GetMixFormat(
+ [out] WAVEFORMATEX **ppDeviceFormat
+ );
+ HRESULT GetDevicePeriod(
+ [out] REFERENCE_TIME *phnsDefaultDevicePeriod,
+ [out] REFERENCE_TIME *phnsMinimumDevicePeriod
+ );
+ HRESULT Start(void);
+ HRESULT Stop(void);
+ HRESULT Reset(void);
+ HRESULT SetEventHandle([in] HANDLE eventHandle);
+ HRESULT GetService(
+ [in] REFIID riid,
+ [iid_is(riid),out] void **ppv
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid(f294acfc-3146-4483-a7bf-addca7c260e2),
+ object,
+]
+interface IAudioRenderClient : IUnknown
+{
+ HRESULT GetBuffer(
+ [in] UINT32 NumFramesRequested,
+ [out] BYTE **ppData
+ );
+ HRESULT ReleaseBuffer(
+ [in] UINT32 NumFramesWritten,
+ [in] DWORD dwFlags
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid(c8adbd64-e71e-48a0-a4de-185c395cd317),
+ object,
+]
+interface IAudioCaptureClient : IUnknown
+{
+ HRESULT GetBuffer(
+ [out] BYTE **ppData,
+ [out] UINT32 *pNumFramesToRead,
+ [out] DWORD *pdwFlags,
+ [unique,out] UINT64 *pu64DevicePosition,
+ [unique,out] UINT64 *pu64QPCPosition
+ );
+ HRESULT ReleaseBuffer(
+ [in] UINT32 NumFramesRead
+ );
+ HRESULT GetNextPacketSize(
+ [out] UINT32 *pNumFramesInNextPacket
+ );
+}
+
+cpp_quote("#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ 0x00000001")
+
+[
+ local,
+ pointer_default(unique),
+ uuid("cd63314f-3fba-4a1b-812c-ef96358728e7"),
+ object,
+]
+interface IAudioClock : IUnknown
+{
+ HRESULT GetFrequency(
+ [out] UINT64 *pu64Frequency
+ );
+ HRESULT GetPosition(
+ [out] UINT64 *pu64Position,
+ [out,unique] UINT64 *pu64QPCPosition
+ );
+ HRESULT GetCharacteristics(
+ [out] DWORD *pdwCharacteristics
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid("6f49ff73-6727-49ac-a008-d98cf5e70048"),
+ object,
+]
+interface IAudioClock2 : IUnknown
+{
+ HRESULT GetPosition(
+ [out] UINT64 *DevicePosition,
+ [out,unique] UINT64 *QPCPosition
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid("f6e4c0a0-46d9-4fb9-be21-57a3ef2b626c"),
+ object,
+]
+interface IAudioClockAdjustment : IUnknown
+{
+ HRESULT SetSampleRate(
+ [in] float flSampleRate
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid("87ce5498-68d6-44e5-9215-6da47ef883d8"),
+ object,
+]
+interface ISimpleAudioVolume : IUnknown
+{
+ HRESULT SetMasterVolume(
+ [in] float fLevel,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT GetMasterVolume(
+ [out] float *pfLevel
+ );
+ HRESULT SetMute(
+ [in] const BOOL bMute,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT GetMute(
+ [out] BOOL *pbMute
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid("93014887-242d-4068-8a15-cf5e93b90fe3"),
+ object,
+]
+interface IAudioStreamVolume : IUnknown
+{
+ HRESULT GetChannelCount(
+ [out] UINT32 *pdwCount
+ );
+ HRESULT SetChannelVolume(
+ [in] UINT32 dwIndex,
+ [in] const float fLevel
+ );
+ HRESULT GetChannelVolume(
+ [in] UINT32 dwIndex,
+ [out] float *pfLevel
+ );
+ HRESULT SetAllVolumes(
+ [in] UINT32 dwCount,
+ [size_is(dwCount),in] const float *pfVolumes
+ );
+ HRESULT GetAllVolumes(
+ [in] UINT32 dwCount,
+ [size_is(dwCount),out] float *pfVolumes
+ );
+}
+
+[
+ local,
+ pointer_default(unique),
+ uuid("1c158861-b533-4b30-b1cf-e853e51c59b8"),
+ object,
+]
+interface IChannelAudioVolume : IUnknown
+{
+ HRESULT GetChannelCount(
+ [out] UINT32 *pdwCount
+ );
+ HRESULT SetChannelVolume(
+ [in] UINT32 dwIndex,
+ [in] const float fLevel,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT GetChannelVolume(
+ [in] UINT32 dwIndex,
+ [out] float *pfLevel
+ );
+ HRESULT SetAllVolumes(
+ [in] UINT32 dwCount,
+ [size_is(dwCount),in] const float *pfVolumes,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT GetAllVolumes(
+ [in] UINT32 dwCount,
+ [size_is(dwCount),out] float *pfVolumes
+ );
+}
+
+cpp_quote("#define FACILIY_AUDCLNT 0x889")
+cpp_quote("#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILIY_AUDCLNT, n)")
+cpp_quote("#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILIY_AUDCLNT, n)")
+cpp_quote("#define AUDCLNT_E_NOT_INITIALIZED AUDCLNT_ERR(1)")
+cpp_quote("#define AUDCLNT_E_ALREADY_INITIALIZED AUDCLNT_ERR(2)")
+cpp_quote("#define AUDCLNT_E_WRONG_ENDPOINT_TYPE AUDCLNT_ERR(3)")
+cpp_quote("#define AUDCLNT_E_DEVICE_INVALIDATED AUDCLNT_ERR(4)")
+cpp_quote("#define AUDCLNT_E_NOT_STOPPED AUDCLNT_ERR(5)")
+cpp_quote("#define AUDCLNT_E_BUFFER_TOO_LARGE AUDCLNT_ERR(6)")
+cpp_quote("#define AUDCLNT_E_OUT_OF_ORDER AUDCLNT_ERR(7)")
+cpp_quote("#define AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_ERR(8)")
+cpp_quote("#define AUDCLNT_E_INVALID_SIZE AUDCLNT_ERR(9)")
+cpp_quote("#define AUDCLNT_E_DEVICE_IN_USE AUDCLNT_ERR(0x0a)")
+cpp_quote("#define AUDCLNT_E_BUFFER_OPERATION_PENDING AUDCLNT_ERR(0x0b)")
+cpp_quote("#define AUDCLNT_E_THREAD_NOT_REGISTERED AUDCLNT_ERR(0x0c)")
+/* Not defined? cpp_quote("#define AUDCLNT_E_UNKNOWN_XXX1 AUDCLNT_ERR(0x0d)") */
+cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x0e)")
+cpp_quote("#define AUDCLNT_E_ENDPOINT_CREATE_FAILED AUDCLNT_ERR(0x0f)")
+cpp_quote("#define AUDCLNT_E_SERVICE_NOT_RUNNING AUDCLNT_ERR(0x10)")
+cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED AUDCLNT_ERR(0x11)")
+cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY AUDCLNT_ERR(0x12)")
+cpp_quote("#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x13)")
+cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_SET AUDCLNT_ERR(0x14)")
+cpp_quote("#define AUDCLNT_E_INCORRECT_BUFFER_SIZE AUDCLNT_ERR(0x15)")
+cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_ERROR AUDCLNT_ERR(0x16)")
+cpp_quote("#define AUDCLNT_E_CPUUSAGE_EXCEEDED AUDCLNT_ERR(0x17)")
+cpp_quote("#define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x18)")
+cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x19)")
+/* Hex fail */
+cpp_quote("#define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x20)")
+cpp_quote("#define AUDCLNT_E_INVALID_STREAM_FLAG AUDCLNT_ERR(0x021)")
+cpp_quote("#define AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE AUDCLNT_ERR(0x022)")
+cpp_quote("#define AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES AUDCLNT_ERR(0x023)")
+cpp_quote("#define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x024)")
+cpp_quote("#define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x025)")
+cpp_quote("#define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x026)")
+
+cpp_quote("#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)")
+cpp_quote("#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)")
+cpp_quote("#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl
new file mode 100644
index 00000000..00b55daa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiopolicy.idl
@@ -0,0 +1,249 @@
+/*
+ * Core Audio audio policy definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "propidl.idl";
+import "audiosessiontypes.h";
+import "audioclient.idl";
+
+interface IAudioSessionEvents;
+interface IAudioSessionControl;
+interface IAudioSessionControl2;
+interface IAudioSessionManager;
+interface IAudioVolumeDuckNotification;
+interface IAudioSessionNotification;
+interface IAudioSessionEnumerator;
+interface IAudioSessionManager2;
+
+typedef enum AudioSessionDisconnectReason /*[local]*/
+{
+ DisconnectReasonDeviceRemoval = 0,
+ DisconnectReasonServerShutdown,
+ DisconnectReasonFormatChanged,
+ DisconnectReasonSessionLogoff,
+ DisconnectReasonSessionDisconnected,
+ DisconnectReasonExclusiveModeOverride,
+} AudioSessionDisconnectReason;
+
+[
+ local,
+ uuid(24918acc-64b3-37c1-8ca9-74a66e9957a8),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionEvents : IUnknown
+{
+ HRESULT OnDisplayNameChanged(
+ [string,in] LPCWSTR NewDisplayName,
+ [in] LPCGUID EventContext
+ );
+ HRESULT OnIconPathChanged(
+ [string,in] LPCWSTR NewIconPath,
+ [in] LPCGUID EventContext
+ );
+ HRESULT OnSimpleVolumeChanged(
+ [in] float NewVolume,
+ [in] BOOL NewMute,
+ [in] LPCGUID EventContext
+ );
+ HRESULT OnChannelVolumeChanged(
+ [in] DWORD ChannelCount,
+ [size_is(ChannelCount),in] float *NewChannelVolumeArray,
+ [in] DWORD ChangedChannel,
+ [in] LPCGUID EventContext
+ );
+ HRESULT OnGroupingParamChanged(
+ [in] LPCGUID NewGroupingParam,
+ [in] LPCGUID EventContext
+ );
+ HRESULT OnStateChanged(
+ [in] AudioSessionState NewState
+ );
+ HRESULT OnSessionDisconnected(
+ [in] AudioSessionDisconnectReason DisconnectReason
+ );
+}
+
+[
+ local,
+ uuid(f4b1a599-7266-4319-a8ca-e70acb11e8cd),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionControl : IUnknown
+{
+ HRESULT GetState(
+ [out] AudioSessionState *pRetVal
+ );
+ HRESULT GetDisplayName(
+ [string,out] LPWSTR *pRetVal
+ );
+ HRESULT SetDisplayName(
+ [string,in] LPCWSTR DisplayName,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT GetIconPath(
+ [string,out] LPWSTR *pRetVal
+ );
+ HRESULT SetIconPath(
+ [string,in] LPCWSTR Value,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT GetGroupingParam(
+ [out] GUID *pRetVal
+ );
+ HRESULT SetGroupingParam(
+ [in] LPCGUID Override,
+ [unique,in] LPCGUID EventContext
+ );
+ HRESULT RegisterAudioSessionNotification(
+ [in] IAudioSessionEvents *NewNotifications
+ );
+ HRESULT UnregisterAudioSessionNotification(
+ [in] IAudioSessionEvents *NewNotifications
+ );
+}
+
+[
+ local,
+ uuid(bfb7ff88-7239-4fc9-8fa2-07c950be9c6d),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionControl2 : IAudioSessionControl
+{
+ HRESULT GetSessionIdentifier(
+ [string,out] LPWSTR *pRetVal
+ );
+ HRESULT GetSessionInstanceIdentifier(
+ [string,out] LPWSTR *pRetVal
+ );
+ HRESULT GetProcessId(
+ [out] DWORD *pRetVal
+ );
+ HRESULT IsSystemSoundsSession(void);
+ HRESULT SetDuckingPreferences(
+ [in] BOOL optOut
+ );
+};
+
+[
+ local,
+ uuid(bfa971f1-4d5e-40bb-935e-967039bfbee4),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionManager : IUnknown
+{
+ HRESULT GetAudioSessionControl(
+ [in] LPCGUID AudioSessionGuid,
+ [in] DWORD StreamFlags,
+ [out] IAudioSessionControl **SessionControl
+ );
+ HRESULT GetSimpleAudioVolume(
+ [in] LPCGUID AudioSessionGuid,
+ [in] DWORD StreamFlags,
+ [out] ISimpleAudioVolume **AudioVolume
+ );
+};
+
+[
+ local,
+ uuid(c3b284d4-6d39-4359-b3cf-b56ddb3bb39c),
+ pointer_default(unique),
+ object
+]
+interface IAudioVolumeDuckNotification : IUnknown
+{
+ HRESULT OnVolumeDuckNotification(
+ [in] LPCWSTR sessionID,
+ [in] UINT32 countCommunicationSessions
+ );
+ HRESULT OnVolumeUnduckNotification(
+ [in] LPCWSTR sessionID
+ );
+};
+
+[
+ local,
+ uuid(641dd20b-4d41-49cc-aba3-174b9477bb08),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionNotification : IUnknown
+{
+ HRESULT OnSessionCreated(
+ [in] IAudioSessionControl *NewSession
+ );
+};
+
+[
+ local,
+ uuid(e2f5bb11-0570-40ca-acdd-3aa01277dee8),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionEnumerator : IUnknown
+{
+ HRESULT GetCount(
+ [out] INT *SessionCount
+ );
+ HRESULT GetSession(
+ [in] INT SessionCount,
+ [out] IAudioSessionControl **Session
+ );
+};
+
+[
+ local,
+ uuid(77aa99a0-1bd6-484f-8bc7-2c654c9a9b6f),
+ pointer_default(unique),
+ object
+]
+interface IAudioSessionManager2 : IAudioSessionManager
+{
+ HRESULT GetSessionEnumerator(
+ [retval,out] IAudioSessionEnumerator **SessionEnum
+ );
+ HRESULT RegisterSessionNotification(
+ [in] IAudioSessionNotification *SessionNotification
+ );
+ HRESULT UnregisterSessionNotification(
+ [in] IAudioSessionNotification *SessionNotification
+ );
+ HRESULT RegisterDuckNotification(
+ [string,in] LPCWSTR sessionID,
+ [in] IAudioVolumeDuckNotification *duckNotification
+ );
+ HRESULT UnregisterDuckNotification(
+ [in] IAudioVolumeDuckNotification *duckNotification
+ );
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h
new file mode 100644
index 00000000..7823b6fc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/audiosessiontypes.h
@@ -0,0 +1,57 @@
+
+/*
+ * Core Audio audio session types definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __AUDIOSESSIONTYPES__
+#define __AUDIOSESSIONTYPES__
+
+typedef enum _AUDCLNT_SHAREMODE
+{
+ AUDCLNT_SHAREMODE_SHARED,
+ AUDCLNT_SHAREMODE_EXCLUSIVE,
+} AUDCLNT_SHAREMODE;
+
+#define AUDCLNT_STREAMFLAGS_CROSSPROCESS 0x00010000
+#define AUDCLNT_STREAMFLAGS_LOOPBACK 0x00020000
+#define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000
+#define AUDCLNT_STREAMFLAGS_NOPERSIST 0x00080000
+#define AUDCLNT_STREAMFLAGS_RATEADJUST 0x00100000
+#define AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED 0x10000000
+#define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE 0x20000000
+#define AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED 0x40000000
+
+typedef enum _AudioSessionState
+{
+ AudioSessionStateInactive = 0,
+ AudioSessionStateActive,
+ AudioSessionStateExpired,
+} AudioSessionState;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl
new file mode 100644
index 00000000..b3a965ab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/austream.idl
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+
+cpp_quote("#if 0")
+typedef struct tWAVEFORMATEX WAVEFORMATEX;
+cpp_quote ("#endif")
+
+interface IAudioMediaStream;
+interface IAudioStreamSample;
+interface IMemoryData;
+interface IAudioData;
+
+[
+object,
+local,
+uuid(f7537560-a3be-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioMediaStream : IMediaStream
+{
+ HRESULT GetFormat(
+ [out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent
+ );
+
+ HRESULT SetFormat(
+ [in] const WAVEFORMATEX *lpWaveFormat);
+
+ HRESULT CreateSample(
+ [in] IAudioData *pAudioData,
+ [in] DWORD dwFlags,
+ [out] IAudioStreamSample **ppSample
+ );
+}
+
+
+[
+object,
+local,
+uuid(345fee00-aba5-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioStreamSample : IStreamSample
+{
+ HRESULT GetAudioData(
+ [out] IAudioData **ppAudio
+ );
+}
+
+
+[
+object,
+local,
+uuid(327fc560-af60-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IMemoryData : IUnknown
+{
+ HRESULT SetBuffer(
+ [in] DWORD cbSize,
+ [in] BYTE *pbData,
+ [in] DWORD dwFlags
+ );
+
+ HRESULT GetInfo(
+ [out] DWORD *pdwLength,
+ [out] BYTE **ppbData,
+ [out] DWORD *pcbActualData
+ );
+ HRESULT SetActual(
+ [in] DWORD cbDataValid
+ );
+}
+
+
+[
+object,
+local,
+uuid(54c719c0-af60-11d0-8212-00c04fc32c45),
+pointer_default(unique)
+]
+interface IAudioData : IMemoryData
+{
+ HRESULT GetFormat(
+ [out] /*[optional]*/ WAVEFORMATEX *pWaveFormatCurrent
+ );
+
+ HRESULT SetFormat(
+ [in] const WAVEFORMATEX *lpWaveFormat
+ );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h
new file mode 100644
index 00000000..59439efe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/aviriff.h
@@ -0,0 +1,333 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ * Copyright (C) 2008 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* All definitions here are packed structures of on-disk formats */
+#include <pshpack2.h>
+
+typedef struct _riffchunk
+{
+ FOURCC fcc;
+ DWORD cb;
+} RIFFCHUNK, * LPRIFFCHUNK;
+
+typedef struct _rifflist
+{
+ FOURCC fcc;
+ DWORD cb;
+ FOURCC fccListType;
+} RIFFLIST, * LPRIFFLIST;
+
+#define FCC( ch0, ch1, ch2, ch3 ) \
+ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
+ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+
+#define RIFFROUND(cb) ((cb) + ((cb)&1))
+#define RIFFNEXT(pChunk) (LPRIFFCHUNK)((LPBYTE)(pChunk)+sizeof(RIFFCHUNK)+RIFFROUND(((LPRIFFCHUNK)pChunk)->cb))
+
+/* flags for dwFlags member of AVIMAINHEADER */
+#define AVIF_HASINDEX 0x00000010
+#define AVIF_MUSTUSEINDEX 0x00000020
+#define AVIF_ISINTERLEAVED 0x00000100
+#define AVIF_TRUSTCKTYPE 0x00000800
+#define AVIF_WASCAPTUREFILE 0x00010000
+#define AVIF_COPYRIGHTED 0x00020000
+
+#define ckidMAINAVIHEADER FCC('a','v','i','h')
+typedef struct _avimainheader
+{
+ FOURCC fcc;
+ DWORD cb;
+ DWORD dwMicroSecPerFrame;
+ DWORD dwMaxBytesPerSec;
+ DWORD dwPaddingGranularity;
+ DWORD dwFlags;
+ DWORD dwTotalFrames;
+ DWORD dwInitialFrames;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwReserved[4];
+} AVIMAINHEADER;
+
+#define ckidODML FCC('o','d','m','l')
+#define ckidAVIEXTHEADER FCC('d','m','l','h')
+typedef struct _aviextheader
+{
+ FOURCC fcc;
+ DWORD cb;
+ DWORD dwGrandFrames;
+ DWORD dwFuture[61];
+} AVIEXTHEADER;
+
+#define ckidSTREAMLIST FCC('s','t','r','l')
+
+/* flags for dwFlags member of AVISTREAMHEADER */
+#define AVISF_DISABLED 0x00000001
+#define AVISF_VIDEO_PALCHANGES 0x00010000
+
+#ifndef ckidSTREAMHEADER
+#define ckidSTREAMHEADER FCC('s','t','r','h')
+#endif
+
+#ifndef streamtypeVIDEO
+#define streamtypeVIDEO FCC('v','i','d','s')
+#define streamtypeAUDIO FCC('a','u','d','s')
+#define streamtypeMIDI FCC('m','i','d','s')
+#define streamtypeTEXT FCC('t','x','t','s')
+#endif
+
+typedef struct _avistreamheader
+{
+ FOURCC fcc;
+ DWORD cb;
+ FOURCC fccType;
+ FOURCC fccHandler;
+ DWORD dwFlags;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwInitialFrames;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwStart;
+ DWORD dwLength;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ struct
+ {
+ short int left;
+ short int top;
+ short int right;
+ short int bottom;
+ } rcFrame;
+} AVISTREAMHEADER;
+
+#ifndef ckidSTREAMFORMAT
+#define ckidSTREAMFORMAT FCC('s','t','r','f')
+#endif
+#define ckidAVIOLDINDEX FCC('i','d','x','1')
+
+/* flags for dwFlags member of _avioldindex_entry */
+#define AVIIF_LIST 0x00000001
+#define AVIIF_KEYFRAME 0x00000010
+#define AVIIF_NO_TIME 0x00000100
+#define AVIIF_COMPRESSOR 0x0FFF0000
+
+typedef struct _avioldindex
+{
+ FOURCC fcc;
+ DWORD cb;
+ struct _avioldindex_entry
+ {
+ DWORD dwChunkId;
+ DWORD dwFlags;
+ DWORD dwOffset;
+ DWORD dwSize;
+ } aIndex[ANYSIZE_ARRAY];
+} AVIOLDINDEX;
+
+typedef union _timecode
+{
+ struct
+ {
+ WORD wFrameRate;
+ WORD wFrameFract;
+ LONG cFrames;
+ } DUMMYSTRUCTNAME;
+ DWORDLONG qw;
+} TIMECODE;
+
+#define TIMECODE_RATE_30DROP 0
+
+/* flags for dwSMPTEflags member of TIMECODEDATA */
+#define TIMECODE_SMPTE_BINARY_GROUP 0x07
+#define TIMECODE_SMPTE_COLOR_FRAME 0x08
+
+typedef struct _timecodedata
+{
+ TIMECODE time;
+ DWORD dwSMPTEflags;
+ DWORD dwUser;
+} TIMECODEDATA;
+
+#define AVI_INDEX_OF_INDEXES 0x00
+#define AVI_INDEX_OF_CHUNKS 0x01
+#define AVI_INDEX_OF_TIMED_CHUNKS 0x02
+#define AVI_INDEX_OF_SUB_2FIELD 0x03
+#define AVI_INDEX_IS_DATA 0x80
+
+#define AVI_INDEX_SUB_DEFAULT 0x00
+#define AVI_INDEX_SUB_2FIELD 0x01
+
+typedef struct _avimetaindex
+{
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORD dwReserved[3];
+ DWORD adwIndex[ANYSIZE_ARRAY];
+} AVIMETAINDEX;
+
+#define ckidAVISUPERINDEX FCC('i','n','d','x')
+typedef struct _avisuperindex {
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORD dwReserved[3];
+ struct _avisuperindex_entry {
+ DWORDLONG qwOffset;
+ DWORD dwSize;
+ DWORD dwDuration;
+ } aIndex[ANYSIZE_ARRAY];
+} AVISUPERINDEX;
+
+#define AVISTDINDEX_DELTAFRAME (0x80000000)
+#define AVISTDINDEX_SIZEMASK (~0x80000000)
+
+typedef struct _avistdindex_entry {
+ DWORD dwOffset;
+ DWORD dwSize;
+} AVISTDINDEX_ENTRY;
+
+typedef struct _avistdindex {
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORDLONG qwBaseOffset;
+ DWORD dwReserved_3;
+ AVISTDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];
+} AVISTDINDEX;
+
+typedef struct _avitimedindex_entry {
+ DWORD dwOffset;
+ DWORD dwSize;
+ DWORD dwDuration;
+} AVITIMEDINDEX_ENTRY;
+
+typedef struct _avitimedindex {
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORDLONG qwBaseOffset;
+ DWORD dwReserved_3;
+ AVITIMEDINDEX_ENTRY aIndex[ANYSIZE_ARRAY];
+ /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
+} AVITIMEDINDEX;
+
+typedef struct _avitimecodeindex {
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORD dwReserved[3];
+ TIMECODEDATA aIndex[ANYSIZE_ARRAY];
+} AVITIMECODEINDEX;
+
+typedef struct _avitcdlindex_entryA {
+ DWORD dwTick;
+ TIMECODE time;
+ DWORD dwSMPTEflags;
+ DWORD dwUser;
+ CHAR szReelId[12];
+} AVITCDLINDEX_ENTRYA;
+
+typedef struct _avitcdlindex_entryW {
+ DWORD dwTick;
+ TIMECODE time;
+ DWORD dwSMPTEflags;
+ DWORD dwUser;
+ WCHAR szReelId[12];
+} AVITCDLINDEX_ENTRYW;
+
+typedef struct _avitcdlindexA {
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORD dwReserved[3];
+ AVITCDLINDEX_ENTRYA aIndex[ANYSIZE_ARRAY];
+ /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
+} AVITCDLINDEXA;
+
+typedef struct _avitcdlindexW {
+ FOURCC fcc;
+ UINT cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORD dwReserved[3];
+ AVITCDLINDEX_ENTRYW aIndex[ANYSIZE_ARRAY];
+ /* DWORD adwTrailingFill[ANYSIZE_ARRAY]; */
+} AVITCDLINDEXW;
+
+#define AVITCDLINDEX_ENTRY WINELIB_NAME_AW(AVITCDLINDEX_ENTRY)
+#define AVITCDLINDEX WINELIB_NAME_AW(AVITCDLINDEX)
+
+typedef struct _avifieldindex_chunk {
+ FOURCC fcc;
+ DWORD cb;
+ WORD wLongsPerEntry;
+ BYTE bIndexSubType;
+ BYTE bIndexType;
+ DWORD nEntriesInUse;
+ DWORD dwChunkId;
+ DWORDLONG qwBaseOffset;
+ DWORD dwReserved3;
+ struct _avifieldindex_entry {
+ DWORD dwOffset;
+ DWORD dwSize;
+ DWORD dwOffsetField2;
+ } aIndex[ANYSIZE_ARRAY];
+} AVIFIELDINDEX, * PAVIFIELDINDEX;
+
+#include <poppack.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h
new file mode 100644
index 00000000..b0d99a2e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/avrt.h
@@ -0,0 +1,83 @@
+/*
+ * avrt definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _AVRT_
+#define _AVRT_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum _AVRT_PRIORITY
+{
+ AVRT_PRIORITY_LOW = -1,
+ AVRT_PRIORITY_NORMAL,
+ AVRT_PRIORITY_HIGH,
+ AVRT_PRIORITY_CRITICAL
+} AVRT_PRIORITY, *PAVRT_PRIORITY;
+
+/* Windows compiler is more lax */
+#define THREAD_ORDER_GROUP_INFINITE_TIMEOUT ((void*)((LONG_PTR)-1))
+
+HANDLE WINAPI AvSetMmThreadCharacteristicsA(LPCSTR TaskName, LPDWORD TaskIndex);
+HANDLE WINAPI AvSetMmThreadCharacteristicsW(LPCWSTR TaskName, LPDWORD TaskIndex);
+#define AvSetMmThreadCharacteristics WINELIB_NAME_AW(AvSetMmThreadCharacteristics)
+
+HANDLE WINAPI AvSetMmMaxThreadCharacteristicsA(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex);
+HANDLE WINAPI AvSetMmMaxThreadCharacteristicsW(LPCSTR FirstTask, LPCSTR SecondTask, LPDWORD TaskIndex);
+#define AvSetMmMaxThreadCharacteristics WINELIB_NAME_AW(AvSetMmMaxThreadCharacteristics)
+
+BOOL WINAPI AvRevertMmThreadCharacteristics(HANDLE AvrtHandle);
+BOOL WINAPI AvSetMmThreadPriority(HANDLE AvrtHandle, AVRT_PRIORITY Priority);
+BOOL WINAPI AvRtCreateThreadOrderingGroup(
+ PHANDLE Context, PLARGE_INTEGER Period,
+ GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout);
+
+BOOL WINAPI AvRtCreateThreadOrderingGroupExA(
+ PHANDLE Context, PLARGE_INTEGER Period,
+ GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout,
+ LPCSTR TaskName);
+BOOL WINAPI AvRtCreateThreadOrderingGroupExW(
+ PHANDLE Context, PLARGE_INTEGER Period,
+ GUID *ThreadOrderingGuid, PLARGE_INTEGER Timeout,
+ LPCSTR TaskName);
+#define AvRtCreateThreadOrderingGroupEx WINELIB_NAME_AW(AvRtCreateThreadOrderingGroupEx)
+
+BOOL WINAPI AvRtJoinThreadOrderingGroup(PHANDLE Context, GUID *ThreadOrderingGuid, BOOL Before);
+BOOL WINAPI AvRtWaitOnThreadOrderingGroup(HANDLE Context);
+BOOL WINAPI AvRtLeaveThreadOrderingGroup(HANDLE Context);
+BOOL WINAPI AvRtDeleteThreadOrderingGroup(HANDLE Context);
+BOOL WINAPI AvQuerySystemResponsiveness(HANDLE AvrtHandle, PULONG SystemResponsivenessValue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_AVRT_*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl
new file mode 100644
index 00000000..086aa81a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/axcore.idl
@@ -0,0 +1,666 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define CHARS_IN_GUID 39
+cpp_quote("#define CHARS_IN_GUID 39")
+
+/* GetTimeFormat is defined in winnls.h as
+ * either the W or A suffixed version */
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetTimeFormat")
+cpp_quote("#endif")
+
+typedef struct _AMMediaType
+{
+ GUID majortype;
+ GUID subtype;
+ BOOL bFixedSizeSamples;
+ BOOL bTemporalCompression;
+ ULONG lSampleSize;
+ GUID formattype;
+ IUnknown * pUnk;
+ ULONG cbFormat;
+ [size_is(cbFormat)] BYTE * pbFormat;
+} AM_MEDIA_TYPE;
+
+typedef enum _PinDirection
+{
+ PINDIR_INPUT,
+ PINDIR_OUTPUT
+} PIN_DIRECTION;
+
+#define MAX_PIN_NAME 128
+#define MAX_FILTER_NAME 128
+cpp_quote("#define MAX_PIN_NAME 128")
+cpp_quote("#define MAX_FILTER_NAME 128")
+
+cpp_quote("#ifndef REFERENCE_TIME_DEFINED")
+cpp_quote("#define REFERENCE_TIME_DEFINED")
+typedef LONGLONG REFERENCE_TIME;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef REFTIME_DEFINED")
+cpp_quote("#define REFTIME_DEFINED")
+typedef DOUBLE REFTIME;
+cpp_quote("#endif")
+
+typedef DWORD_PTR HSEMAPHORE;
+typedef DWORD_PTR HEVENT;
+
+typedef struct _AllocatorProperties
+{
+ long cBuffers;
+ long cbBuffer;
+ long cbAlign;
+ long cbPrefix;
+} ALLOCATOR_PROPERTIES;
+
+interface IAMovieSetup;
+interface IEnumFilters;
+interface IEnumMediaTypes;
+interface IEnumPins;
+interface IBaseFilter;
+interface IFilterGraph;
+interface IMediaFilter;
+interface IMediaSample;
+interface IMemAllocator;
+interface IMemAllocatorCallbackTemp;
+interface IMemAllocatorNotifyCallbackTemp;
+interface IMemInputPin;
+interface IPin;
+interface IReferenceClock;
+
+[
+object,
+uuid(56a86891-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IPin : IUnknown
+{
+ typedef struct _PinInfo
+ {
+ IBaseFilter *pFilter;
+ PIN_DIRECTION dir;
+ WCHAR achName[MAX_PIN_NAME];
+ } PIN_INFO;
+
+ HRESULT Connect(
+ [in] IPin * pReceivePin,
+ [in] const AM_MEDIA_TYPE * pmt);
+
+ HRESULT ReceiveConnection(
+ [in] IPin * pConnector,
+ [in] const AM_MEDIA_TYPE *pmt);
+
+ HRESULT Disconnect(void);
+
+ HRESULT ConnectedTo(
+ [out] IPin **pPin);
+
+ HRESULT ConnectionMediaType(
+ [out] AM_MEDIA_TYPE *pmt);
+
+ HRESULT QueryPinInfo(
+ [out] PIN_INFO * pInfo);
+
+ HRESULT QueryDirection(
+ [out] PIN_DIRECTION *pPinDir);
+
+ HRESULT QueryId(
+ [out] LPWSTR * Id);
+
+ HRESULT QueryAccept(
+ [in] const AM_MEDIA_TYPE *pmt);
+
+ HRESULT EnumMediaTypes(
+ [out] IEnumMediaTypes **ppEnum);
+
+ HRESULT QueryInternalConnections(
+ [out] IPin* *apPin,
+ [in, out] ULONG *nPin);
+
+ HRESULT EndOfStream(void);
+
+ HRESULT BeginFlush(void);
+
+ HRESULT EndFlush(void);
+ HRESULT NewSegment(
+ [in] REFERENCE_TIME tStart,
+ [in] REFERENCE_TIME tStop,
+ [in] double dRate);
+}
+
+typedef IPin *PPIN;
+
+[
+object,
+uuid(56a86892-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IEnumPins : IUnknown
+{
+
+ HRESULT Next(
+ [in] ULONG cPins,
+ [out, size_is(cPins)] IPin ** ppPins,
+ [out] ULONG * pcFetched);
+
+ HRESULT Skip(
+ [in] ULONG cPins);
+
+ HRESULT Reset(void);
+
+ HRESULT Clone(
+ [out] IEnumPins **ppEnum);
+}
+
+typedef IEnumPins *PENUMPINS;
+
+[
+object,
+uuid(89c31040-846b-11ce-97d3-00aa0055595a),
+pointer_default(unique)
+]
+interface IEnumMediaTypes : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG cMediaTypes,
+ [out, size_is(cMediaTypes)]
+ AM_MEDIA_TYPE ** ppMediaTypes,
+ [out] ULONG * pcFetched
+ );
+
+ HRESULT Skip(
+ [in] ULONG cMediaTypes);
+
+ HRESULT Reset(void);
+
+ HRESULT Clone(
+ [out] IEnumMediaTypes **ppEnum
+ );
+}
+
+typedef IEnumMediaTypes *PENUMMEDIATYPES;
+
+[
+object,
+uuid(56a8689f-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IFilterGraph : IUnknown
+{
+ HRESULT AddFilter(
+ [in] IBaseFilter * pFilter,
+ [in, string] LPCWSTR pName);
+
+ HRESULT RemoveFilter(
+ [in] IBaseFilter * pFilter);
+
+ HRESULT EnumFilters(
+ [out] IEnumFilters **ppEnum);
+
+ HRESULT FindFilterByName(
+ [in, string] LPCWSTR pName,
+ [out] IBaseFilter ** ppFilter);
+
+ HRESULT ConnectDirect(
+ [in] IPin * ppinOut,
+ [in] IPin * ppinIn,
+ [in, unique] const AM_MEDIA_TYPE* pmt);
+
+ HRESULT Reconnect(
+ [in] IPin * ppin);
+
+ HRESULT Disconnect(
+ [in] IPin * ppin);
+
+ HRESULT SetDefaultSyncSource(void);
+}
+
+typedef IFilterGraph *PFILTERGRAPH;
+
+[
+object,
+uuid(56a86893-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IEnumFilters : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG cFilters,
+ [out] IBaseFilter ** ppFilter,
+ [out] ULONG * pcFetched);
+
+
+ HRESULT Skip(
+ [in] ULONG cFilters);
+
+
+ HRESULT Reset(void);
+
+
+ HRESULT Clone(
+ [out] IEnumFilters **ppEnum);
+}
+
+typedef IEnumFilters *PENUMFILTERS;
+
+[
+object,
+uuid(56a86899-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMediaFilter : IPersist
+{
+ typedef enum _FilterState
+ {
+ State_Stopped,
+ State_Paused,
+ State_Running
+ } FILTER_STATE;
+
+ HRESULT Stop(void);
+ HRESULT Pause(void);
+
+ HRESULT Run(REFERENCE_TIME tStart);
+
+ HRESULT GetState(
+ [in] DWORD dwMilliSecsTimeout,
+ [out] FILTER_STATE *State);
+
+ HRESULT SetSyncSource(
+ [in] IReferenceClock * pClock);
+
+ HRESULT GetSyncSource(
+ [out] IReferenceClock ** pClock);
+}
+
+typedef IMediaFilter *PMEDIAFILTER;
+
+[
+object,
+uuid(56a86895-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IBaseFilter : IMediaFilter
+{
+ typedef struct _FilterInfo
+ {
+ WCHAR achName[MAX_FILTER_NAME];
+ IFilterGraph * pGraph;
+ } FILTER_INFO;
+
+ HRESULT EnumPins(
+ [out] IEnumPins ** ppEnum);
+
+ HRESULT FindPin(
+ [in, string] LPCWSTR Id,
+ [out] IPin ** ppPin);
+
+ HRESULT QueryFilterInfo(
+ [out] FILTER_INFO * pInfo);
+
+ HRESULT JoinFilterGraph(
+ [in] IFilterGraph * pGraph,
+ [in, string] LPCWSTR pName);
+
+ HRESULT QueryVendorInfo(
+ [out, string] LPWSTR* pVendorInfo);
+}
+
+typedef IBaseFilter *PFILTER;
+
+[
+object,
+uuid(56a86897-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IReferenceClock : IUnknown
+{
+ HRESULT GetTime(
+ [out] REFERENCE_TIME *pTime);
+
+ HRESULT AdviseTime(
+ [in] REFERENCE_TIME baseTime,
+ [in] REFERENCE_TIME streamTime,
+ [in] HEVENT hEvent,
+ [out] DWORD_PTR * pdwAdviseCookie);
+
+ HRESULT AdvisePeriodic(
+ [in] REFERENCE_TIME startTime,
+ [in] REFERENCE_TIME periodTime,
+ [in] HSEMAPHORE hSemaphore,
+ [out] DWORD_PTR * pdwAdviseCookie);
+
+ HRESULT Unadvise(
+ [in] DWORD_PTR dwAdviseCookie);
+}
+
+typedef IReferenceClock *PREFERENCECLOCK;
+
+/*
+[
+object,
+uuid(36b73885-c2c8-11cf-8b46-00805f6cef60),
+pointer_default(unique)
+]
+interface IReferenceClock2 : IReferenceClock
+{
+}
+
+typedef IReferenceClock2 *PREFERENCECLOCK2;
+
+*/
+
+[
+local,
+object,
+uuid(56a8689a-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMediaSample : IUnknown
+{
+ HRESULT GetPointer([out] BYTE ** ppBuffer);
+
+ long GetSize(void);
+
+ HRESULT GetTime(
+ [out] REFERENCE_TIME * pTimeStart,
+ [out] REFERENCE_TIME * pTimeEnd);
+
+ HRESULT SetTime(
+ [in] REFERENCE_TIME * pTimeStart,
+ [in] REFERENCE_TIME * pTimeEnd);
+
+ HRESULT IsSyncPoint(void);
+
+ HRESULT SetSyncPoint(BOOL bIsSyncPoint);
+
+ HRESULT IsPreroll(void);
+
+ HRESULT SetPreroll(BOOL bIsPreroll);
+
+ LONG GetActualDataLength(void);
+
+ HRESULT SetActualDataLength(LONG length);
+
+ HRESULT GetMediaType(AM_MEDIA_TYPE **ppMediaType);
+
+ HRESULT SetMediaType(AM_MEDIA_TYPE *pMediaType);
+
+ HRESULT IsDiscontinuity(void);
+
+ HRESULT SetDiscontinuity(BOOL bDiscontinuity);
+
+ HRESULT GetMediaTime(
+ [out] LONGLONG * pTimeStart,
+ [out] LONGLONG * pTimeEnd);
+
+ HRESULT SetMediaTime(
+ [in] LONGLONG * pTimeStart,
+ [in] LONGLONG * pTimeEnd);
+}
+
+typedef IMediaSample *PMEDIASAMPLE;
+
+enum tagAM_SAMPLE_PROPERTY_FLAGS
+{
+ AM_SAMPLE_SPLICEPOINT = 0x01,
+ AM_SAMPLE_PREROLL = 0x02,
+ AM_SAMPLE_DATADISCONTINUITY = 0x04,
+ AM_SAMPLE_TYPECHANGED = 0x08,
+ AM_SAMPLE_TIMEVALID = 0x10,
+ AM_SAMPLE_TIMEDISCONTINUITY = 0x40,
+ AM_SAMPLE_FLUSH_ON_PAUSE = 0x80,
+ AM_SAMPLE_STOPVALID = 0x100,
+ AM_SAMPLE_ENDOFSTREAM = 0x200,
+ AM_STREAM_MEDIA = 0,
+ AM_STREAM_CONTROL = 1
+};
+
+typedef struct tagAM_SAMPLE2_PROPERTIES
+{
+ DWORD cbData;
+ DWORD dwTypeSpecificFlags;
+ DWORD dwSampleFlags;
+ LONG lActual;
+ REFERENCE_TIME tStart;
+ REFERENCE_TIME tStop;
+ DWORD dwStreamId;
+ AM_MEDIA_TYPE *pMediaType;
+ BYTE *pbBuffer;
+ LONG cbBuffer;
+} AM_SAMPLE2_PROPERTIES;
+
+[
+ local,
+ object,
+ uuid(36b73884-c2c8-11cf-8b46-00805f6cef60),
+ pointer_default(unique)
+]
+interface IMediaSample2 : IMediaSample
+{
+ HRESULT GetProperties(
+ [in] DWORD cbProperties,
+ [out, size_is(cbProperties)] BYTE * pbProperties
+ );
+
+ HRESULT SetProperties(
+ [in] DWORD cbProperties,
+ [in, size_is(cbProperties)] const BYTE * pbProperties
+ );
+}
+
+typedef IMediaSample2 *PMEDIASAMPLE2;
+
+#define AM_GBF_PREVFRAMESKIPPED 1
+#define AM_GBF_NOTASYNCPOINT 2
+cpp_quote("#define AM_GBF_PREVFRAMESKIPPED 1")
+cpp_quote("#define AM_GBF_NOTASYNCPOINT 2")
+
+cpp_quote("#define AM_GBF_NOWAIT 4")
+cpp_quote("#define AM_GBF_NODDSURFACELOCK 8")
+
+[
+object,
+uuid(56a8689c-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMemAllocator : IUnknown
+{
+ HRESULT SetProperties(
+ [in] ALLOCATOR_PROPERTIES* pRequest,
+ [out] ALLOCATOR_PROPERTIES* pActual);
+
+ HRESULT GetProperties(
+ [out] ALLOCATOR_PROPERTIES* pProps);
+
+ HRESULT Commit(void);
+
+ HRESULT Decommit(void);
+
+ HRESULT GetBuffer(
+ [out] IMediaSample **ppBuffer,
+ [in] REFERENCE_TIME * pStartTime,
+ [in] REFERENCE_TIME * pEndTime,
+ [in] DWORD dwFlags);
+
+ HRESULT ReleaseBuffer(
+ [in] IMediaSample *pBuffer);
+}
+
+typedef IMemAllocator *PMEMALLOCATOR;
+
+[
+object,
+uuid(379a0cf0-c1de-11d2-abf5-00a0c905f375),
+pointer_default(unique)
+]
+interface IMemAllocatorCallbackTemp : IMemAllocator
+{
+ HRESULT SetNotify(
+ [in] IMemAllocatorNotifyCallbackTemp *pNotify);
+
+ HRESULT GetFreeCount(
+ [out] LONG *plBuffersFree);
+}
+
+[
+object,
+uuid(92980b30-c1de-11d2-abf5-00a0c905f375),
+pointer_default(unique)
+]
+interface IMemAllocatorNotifyCallbackTemp : IUnknown
+{
+ HRESULT NotifyRelease();
+}
+
+[
+object,
+uuid(56a8689d-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMemInputPin : IUnknown
+{
+ HRESULT GetAllocator(
+ [out] IMemAllocator ** ppAllocator);
+
+ HRESULT NotifyAllocator(
+ [in] IMemAllocator * pAllocator,
+ [in] BOOL bReadOnly);
+
+ HRESULT GetAllocatorRequirements( [out] ALLOCATOR_PROPERTIES*pProps );
+
+ HRESULT Receive(
+ [in] IMediaSample * pSample);
+
+ HRESULT ReceiveMultiple(
+ [in, size_is(nSamples)] IMediaSample **pSamples,
+ [in] long nSamples,
+ [out] long *nSamplesProcessed);
+
+ HRESULT ReceiveCanBlock();
+}
+
+typedef IMemInputPin *PMEMINPUTPIN;
+
+[
+object,
+uuid(a3d8cec0-7e5a-11cf-bbc5-00805f6cef20),
+pointer_default(unique)
+]
+interface IAMovieSetup : IUnknown
+{
+ HRESULT Register( );
+ HRESULT Unregister( );
+}
+
+typedef IAMovieSetup *PAMOVIESETUP;
+
+typedef enum AM_SEEKING_SeekingFlags
+{
+ AM_SEEKING_NoPositioning = 0x00,
+ AM_SEEKING_AbsolutePositioning = 0x01,
+ AM_SEEKING_RelativePositioning = 0x02,
+ AM_SEEKING_IncrementalPositioning = 0x03,
+ AM_SEEKING_PositioningBitsMask = 0x03,
+ AM_SEEKING_SeekToKeyFrame = 0x04,
+ AM_SEEKING_ReturnTime = 0x08,
+ AM_SEEKING_Segment = 0x10,
+ AM_SEEKING_NoFlush = 0x20
+} AM_SEEKING_SEEKING_FLAGS;
+
+typedef enum AM_SEEKING_SeekingCapabilities
+{
+ AM_SEEKING_CanSeekAbsolute = 0x001,
+ AM_SEEKING_CanSeekForwards = 0x002,
+ AM_SEEKING_CanSeekBackwards = 0x004,
+ AM_SEEKING_CanGetCurrentPos = 0x008,
+ AM_SEEKING_CanGetStopPos = 0x010,
+ AM_SEEKING_CanGetDuration = 0x020,
+ AM_SEEKING_CanPlayBackwards = 0x040,
+ AM_SEEKING_CanDoSegments = 0x080,
+ AM_SEEKING_Source = 0x100
+} AM_SEEKING_SEEKING_CAPABILITIES;
+
+[
+object,
+uuid(36b73880-c2c8-11cf-8b46-00805f6cef60),
+pointer_default(unique)
+]
+interface IMediaSeeking : IUnknown
+{
+ HRESULT GetCapabilities( [out] DWORD * pCapabilities );
+
+ HRESULT CheckCapabilities( [in,out] DWORD * pCapabilities );
+
+ HRESULT IsFormatSupported([in] const GUID * pFormat);
+
+ HRESULT QueryPreferredFormat([out] GUID * pFormat);
+
+ HRESULT GetTimeFormat([out] GUID *pFormat);
+
+ HRESULT IsUsingTimeFormat([in] const GUID * pFormat);
+
+ HRESULT SetTimeFormat([in] const GUID * pFormat);
+
+ HRESULT GetDuration([out] LONGLONG *pDuration);
+
+ HRESULT GetStopPosition([out] LONGLONG *pStop);
+
+ HRESULT GetCurrentPosition([out] LONGLONG *pCurrent);
+
+ HRESULT ConvertTimeFormat([out] LONGLONG * pTarget, [in] const GUID * pTargetFormat,
+ [in] LONGLONG Source, [in] const GUID * pSourceFormat );
+
+ HRESULT SetPositions(
+ [in,out] LONGLONG * pCurrent,
+ [in] DWORD dwCurrentFlags,
+ [in,out] LONGLONG * pStop,
+ [in] DWORD dwStopFlags);
+
+ HRESULT GetPositions(
+ [out] LONGLONG * pCurrent,
+ [out] LONGLONG * pStop);
+
+ HRESULT GetAvailable(
+ [out] LONGLONG * pEarliest,
+ [out] LONGLONG * pLatest);
+
+ HRESULT SetRate([in] double dRate);
+
+ HRESULT GetRate([out] double * pdRate);
+
+ HRESULT GetPreroll([out] LONGLONG * pllPreroll);
+}
+
+typedef IMediaSeeking *PMEDIASEEKING;
+
+enum tagAM_MEDIAEVENT_FLAGS
+{
+ AM_MEDIAEVENT_NONOTIFY = 0x01
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl
new file mode 100644
index 00000000..e3ada4fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/axextend.idl
@@ -0,0 +1,1074 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+interface IAMAnalogVideoDecoder;
+interface IAMAnalogVideoEncoder;
+interface IAMAudioInputMixer;
+interface IAMAudioRendererStats;
+interface IAMBufferNegotiation;
+interface IAMCameraControl;
+interface IAMCopyCaptureFileProgress;
+interface IAMCrossbar;
+interface IAMDevMemoryAllocator;
+interface IAMDevMemoryControl;
+interface IAMDroppedFrames;
+interface IAMExtDevice;
+interface IAMExtTransport;
+interface IAMGraphStreams;
+interface IAMLatency;
+interface IAMOpenProgress;
+interface IAMOverlayFX;
+interface IAMPhysicalPinInfo;
+interface IAMPushSource;
+interface IAMStreamConfig;
+interface IAMTimecodeDisplay;
+interface IAMTimecodeGenerator;
+interface IAMTimecodeReader;
+interface IAMTVTuner;
+interface IAMVfwCaptureDialogs;
+interface IAMVfwCompressDialogs;
+interface IAMVideoCompression;
+interface IAMVideoDecimationProperties;
+interface IAMVideoProcAmp;
+interface IAMGraphBuilderCallback;
+interface ICaptureGraphBuilder;
+interface ICaptureGraphBuilder2;
+interface IConfigAviMux;
+interface IConfigInterleaving;
+interface IDecimateVideoImage;
+interface IDrawVideoImage;
+interface IEnumRegFilters;
+interface IEnumStreamIdMap;
+interface IFileSourceFilter;
+interface IFileSinkFilter;
+interface IFileSinkFilter2;
+interface IFilterMapper;
+interface IFilterMapper2;
+interface IGraphBuilder;
+interface IKsPropertySet;
+interface IMediaEventSink;
+interface IMpeg2Demultiplexer;
+interface IMPEG2StreamIdMap;
+interface IOverlay;
+interface IOverlayNotify;
+interface IOverlayNotify2;
+interface IQualityControl;
+interface ISeekingPassThru;
+
+typedef struct
+{
+ CLSID Clsid;
+ LPWSTR Name;
+} REGFILTER;
+
+[
+object,
+uuid(56a868a4-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IEnumRegFilters : IUnknown
+{
+ HRESULT Next
+ ( [in] ULONG cFilters,
+ [out] REGFILTER ** apRegFilter,
+ [out] ULONG * pcFetched
+ );
+
+ HRESULT Skip(
+ [in] ULONG cFilters
+ );
+
+ HRESULT Reset(void);
+
+ HRESULT Clone(
+ [out] IEnumRegFilters **ppEnum
+ );
+}
+
+
+typedef IEnumRegFilters *PENUMREGFILTERS;
+
+[
+object,
+uuid(56a868a3-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IFilterMapper : IUnknown
+{
+ enum { MERIT_PREFERRED = 0x800000,
+ MERIT_NORMAL = 0x600000,
+ MERIT_UNLIKELY = 0x400000,
+ MERIT_DO_NOT_USE = 0x200000,
+ MERIT_SW_COMPRESSOR = 0x100000,
+ MERIT_HW_COMPRESSOR = 0x100050
+ };
+
+ HRESULT RegisterFilter
+ ( [in] CLSID clsid,
+ [in] LPCWSTR Name,
+ [in] DWORD dwMerit
+ );
+
+ HRESULT RegisterFilterInstance
+ ( [in] CLSID clsid,
+ [in] LPCWSTR Name,
+ [out] CLSID *MRId
+ );
+
+
+ HRESULT RegisterPin
+ ( [in] CLSID Filter,
+ [in] LPCWSTR Name,
+ [in] BOOL bRendered,
+ [in] BOOL bOutput,
+ [in] BOOL bZero,
+ [in] BOOL bMany,
+ [in] CLSID ConnectsToFilter,
+ [in] LPCWSTR ConnectsToPin
+ );
+
+ HRESULT RegisterPinType
+ ( [in] CLSID clsFilter,
+ [in] LPCWSTR strName,
+ [in] CLSID clsMajorType,
+ [in] CLSID clsSubType
+ );
+
+
+ HRESULT UnregisterFilter
+ ( [in] CLSID Filter
+ );
+
+
+ HRESULT UnregisterFilterInstance
+ ( [in] CLSID MRId
+ );
+
+
+ HRESULT UnregisterPin
+ ( [in] CLSID Filter,
+ [in] LPCWSTR Name
+ );
+
+ HRESULT EnumMatchingFilters
+ ( [out] IEnumRegFilters **ppEnum,
+ [in] DWORD dwMerit,
+ [in] BOOL bInputNeeded,
+ [in] CLSID clsInMaj,
+ [in] CLSID clsInSub,
+ [in] BOOL bRender,
+ [in] BOOL bOututNeeded,
+ [in] CLSID clsOutMaj,
+ [in] CLSID clsOutSub
+ );
+
+}
+
+typedef struct
+{
+ const CLSID * clsMajorType;
+ const CLSID * clsMinorType;
+} REGPINTYPES;
+
+typedef struct
+{
+ LPWSTR strName;
+ BOOL bRendered;
+ BOOL bOutput;
+ BOOL bZero;
+ BOOL bMany;
+ const CLSID * clsConnectsToFilter;
+ const WCHAR * strConnectsToPin;
+ UINT nMediaTypes;
+ const REGPINTYPES * lpMediaType;
+} REGFILTERPINS;
+
+typedef struct
+{
+ CLSID clsMedium;
+ DWORD dw1;
+ DWORD dw2;
+} REGPINMEDIUM;
+
+enum
+{
+ REG_PINFLAG_B_ZERO = 0x1,
+ REG_PINFLAG_B_RENDERER = 0x2,
+ REG_PINFLAG_B_MANY = 0x4,
+ REG_PINFLAG_B_OUTPUT = 0x8
+};
+
+
+typedef struct
+{
+ DWORD dwFlags;
+ UINT cInstances;
+ UINT nMediaTypes;
+ [size_is(nMediaTypes)] const REGPINTYPES * lpMediaType;
+ UINT nMediums;
+ [size_is(nMediums)] const REGPINMEDIUM *lpMedium;
+ const CLSID *clsPinCategory;
+} REGFILTERPINS2;
+
+typedef struct
+{
+ DWORD dwVersion;
+ DWORD dwMerit;
+ [switch_is(dwVersion)] [switch_type(DWORD)] union
+ {
+ [case(1)]
+ struct
+ {
+ ULONG cPins;
+ [size_is(cPins)] const REGFILTERPINS *rgPins;
+ };
+
+ [case(2)]
+ struct
+ {
+ ULONG cPins2;
+ [size_is(cPins2)] const REGFILTERPINS2 *rgPins2;
+ };
+
+ [default]
+ ;
+ };
+
+} REGFILTER2;
+
+
+[
+object,
+uuid(b79bb0b0-33c1-11d1-abe1-00a0c905f375),
+pointer_default(unique)
+]
+interface IFilterMapper2 : IUnknown
+{
+ HRESULT CreateCategory
+ ( [in] REFCLSID clsidCategory,
+ [in] DWORD dwCategoryMerit,
+ [in] LPCWSTR Description
+ );
+
+ HRESULT UnregisterFilter
+ ( [in] const CLSID *pclsidCategory,
+ [in] LPCOLESTR szInstance,
+ [in] REFCLSID Filter
+ );
+
+ HRESULT RegisterFilter
+ ( [in] REFCLSID clsidFilter,
+ [in] LPCWSTR Name,
+ [in, out] IMoniker **ppMoniker,
+ [in] const CLSID *pclsidCategory,
+ [in] LPCOLESTR szInstance,
+ [in] const REGFILTER2 *prf2
+ );
+
+ HRESULT EnumMatchingFilters
+ ( [out] IEnumMoniker **ppEnum,
+ [in] DWORD dwFlags,
+ [in] BOOL bExactMatch,
+ [in] DWORD dwMerit,
+ [in] BOOL bInputNeeded,
+ [in] DWORD cInputTypes,
+ [size_is(cInputTypes*2)] const GUID *pInputTypes,
+ [in] const REGPINMEDIUM *pMedIn,
+ [in] const CLSID *pPinCategoryIn,
+ [in] BOOL bRender,
+ [in] BOOL bOutputNeeded,
+ [in] DWORD cOutputTypes,
+ [size_is(cOutputTypes*2)] const GUID *pOutputTypes,
+ [in] const REGPINMEDIUM *pMedOut,
+ [in] const CLSID *pPinCategoryOut
+ );
+}
+
+[
+object,
+uuid(b79bb0b1-33c1-11d1-abe1-00a0c905f375),
+pointer_default(unique)
+]
+interface IFilterMapper3 : IFilterMapper2
+{
+ HRESULT GetICreateDevEnum( [out] ICreateDevEnum **ppEnum );
+}
+
+typedef enum tagQualityMessageType
+{
+ Famine,
+ Flood
+} QualityMessageType;
+
+typedef struct tagQuality
+{
+ QualityMessageType Type;
+ LONG Proportion;
+ REFERENCE_TIME Late;
+ REFERENCE_TIME TimeStamp;
+} Quality;
+
+typedef IQualityControl *PQUALITYCONTROL;
+
+[
+object,
+uuid(56a868a5-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IQualityControl : IUnknown
+{
+ HRESULT Notify
+ ( [in] IBaseFilter * pSelf,
+ [in] Quality q
+ );
+
+ HRESULT SetSink
+ ( [in] IQualityControl * piqc
+ );
+}
+
+enum
+{
+ CK_NOCOLORKEY = 0x0,
+ CK_INDEX = 0x1,
+ CK_RGB = 0x2
+};
+
+typedef struct tagCOLORKEY
+{
+ DWORD KeyType;
+ DWORD PaletteIndex;
+ COLORREF LowColorValue;
+ COLORREF HighColorValue;
+} COLORKEY;
+
+enum
+{
+ ADVISE_NONE = 0x0,
+ ADVISE_CLIPPING = 0x1,
+ ADVISE_PALETTE = 0x2,
+ ADVISE_COLORKEY = 0x4,
+ ADVISE_POSITION = 0x8,
+ ADVISE_DISPLAY_CHANGE = 0x10
+};
+
+const DWORD ADVISE_ALL = ADVISE_CLIPPING |
+ ADVISE_PALETTE |
+ ADVISE_COLORKEY |
+ ADVISE_POSITION;
+
+const DWORD ADVISE_ALL2 = ADVISE_ALL |
+ ADVISE_DISPLAY_CHANGE;
+
+cpp_quote("#ifndef _WINGDI_")
+
+/* already defined in wingdi.h, but needed for WIDL */
+
+typedef struct _RGNDATAHEADER
+{
+ DWORD dwSize;
+ DWORD iType;
+ DWORD nCount;
+ DWORD nRgnSize;
+ RECT rcBound;
+} RGNDATAHEADER;
+
+typedef struct _RGNDATA
+{
+ RGNDATAHEADER rdh;
+ char Buffer[1];
+} RGNDATA;
+
+cpp_quote("#endif /* _WINGDI_ */")
+
+[
+object,
+local,
+uuid(56a868a0-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IOverlayNotify : IUnknown
+{
+ HRESULT OnPaletteChange(
+ [in] DWORD dwColors,
+ [in] const PALETTEENTRY *pPalette);
+
+ HRESULT OnClipChange(
+ [in] const RECT *pSourceRect,
+ [in] const RECT *pDestinationRect,
+ [in] const RGNDATA *pRgnData);
+
+ HRESULT OnColorKeyChange([in] const COLORKEY *pColorKey);
+
+ HRESULT OnPositionChange([in] const RECT *pSourceRect,
+ [in] const RECT *pDestinationRect);
+}
+
+typedef IOverlayNotify *POVERLAYNOTIFY;
+
+cpp_quote("#if 0")
+typedef HANDLE HMONITOR;
+cpp_quote("#endif /* 0 */")
+
+[
+object,
+local,
+uuid(680EFA10-D535-11D1-87C8-00A0C9223196),
+pointer_default(unique)
+]
+interface IOverlayNotify2 : IOverlayNotify
+{
+ HRESULT OnDisplayChange(
+ HMONITOR hMonitor);
+}
+
+typedef IOverlayNotify2 *POVERLAYNOTIFY2;
+
+[
+object,
+local,
+uuid(56a868a1-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IOverlay : IUnknown
+{
+ HRESULT GetPalette(
+ [out] DWORD *pdwColors,
+ [out] PALETTEENTRY **ppPalette);
+
+ HRESULT SetPalette(
+ [in] DWORD dwColors,
+ [in] PALETTEENTRY *pPalette);
+
+ HRESULT GetDefaultColorKey([out] COLORKEY *pColorKey);
+
+ HRESULT GetColorKey([out] COLORKEY *pColorKey);
+
+ HRESULT SetColorKey([in,out] COLORKEY *pColorKey);
+
+ HRESULT GetWindowHandle([out] HWND *pHwnd);
+
+ HRESULT GetClipList([out] RECT *pSourceRect,
+ [out] RECT *pDestinationRect,
+ [out] RGNDATA **ppRgnData);
+
+ HRESULT GetVideoPosition([out] RECT *pSourceRect,
+ [out] RECT *pDestinationRect);
+
+ HRESULT Advise(
+ [in] IOverlayNotify *pOverlayNotify,
+ [in] DWORD dwInterests);
+
+ HRESULT Unadvise();
+}
+
+typedef IOverlay *POVERLAY;
+
+[
+object,
+uuid(56a868a2-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IMediaEventSink : IUnknown
+{
+ HRESULT Notify(
+ [in] LONG EventCode,
+ [in] LONG_PTR EventParam1,
+ [in] LONG_PTR EventParam2
+ );
+}
+
+typedef IMediaEventSink *PMEDIAEVENTSINK;
+
+[
+object,
+uuid(56a868a6-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IFileSourceFilter : IUnknown
+{
+ HRESULT Load(
+ [in] LPCOLESTR pszFileName,
+ [in, unique] const AM_MEDIA_TYPE *pmt
+ );
+
+ HRESULT GetCurFile(
+ [out] LPOLESTR *ppszFileName,
+ [out] AM_MEDIA_TYPE *pmt
+ );
+}
+
+typedef IFileSourceFilter *PFILTERFILESOURCE;
+
+[
+object,
+uuid(a2104830-7c70-11cf-8bce-00aa00a3f1a6),
+pointer_default(unique)
+]
+interface IFileSinkFilter : IUnknown
+{
+ HRESULT SetFileName(
+ [in] LPCOLESTR pszFileName,
+ [in, unique] const AM_MEDIA_TYPE *pmt
+ );
+
+ HRESULT GetCurFile(
+ [out] LPOLESTR *ppszFileName,
+ [out] AM_MEDIA_TYPE *pmt
+ );
+}
+
+typedef IFileSinkFilter *PFILTERFILESINK;
+
+[
+ object,
+ uuid(00855B90-CE1B-11d0-BD4F-00A0C911CE86),
+ pointer_default(unique)
+]
+interface IFileSinkFilter2 : IFileSinkFilter
+{
+ HRESULT SetMode(
+ [in] DWORD dwFlags
+ );
+
+ HRESULT GetMode(
+ [out] DWORD *pdwFlags
+ );
+}
+
+typedef IFileSinkFilter2 *PFILESINKFILTER2;
+
+typedef enum
+{
+ AM_FILE_OVERWRITE = 0x00000001,
+} AM_FILESINK_FLAGS;
+
+[
+object,
+uuid(56a868a9-0ad4-11ce-b03a-0020af0ba770),
+pointer_default(unique)
+]
+interface IGraphBuilder : IFilterGraph
+{
+ HRESULT Connect
+ ( [in] IPin * ppinOut,
+ [in] IPin * ppinIn
+ );
+
+ HRESULT Render
+ ( [in] IPin * ppinOut
+ );
+
+ HRESULT RenderFile
+ ( [in] LPCWSTR lpcwstrFile,
+ [in, unique] LPCWSTR lpcwstrPlayList
+ );
+
+ HRESULT AddSourceFilter
+ ( [in] LPCWSTR lpcwstrFileName,
+ [in, unique] LPCWSTR lpcwstrFilterName,
+ [out] IBaseFilter* *ppFilter
+ );
+
+ HRESULT SetLogFile
+ ( [in] DWORD_PTR hFile
+ );
+
+ HRESULT Abort();
+
+ HRESULT ShouldOperationContinue();
+}
+
+
+[
+ object,
+ uuid(bf87b6e0-8c27-11d0-b3f0-00aa003761c5),
+ pointer_default(unique)
+]
+interface ICaptureGraphBuilder : IUnknown {
+
+ HRESULT SetFiltergraph(
+ [in] IGraphBuilder *pfg);
+
+ HRESULT GetFiltergraph(
+ [out] IGraphBuilder **ppfg);
+
+ HRESULT SetOutputFileName(
+ [in] const GUID *pType,
+ [in] LPCOLESTR lpstrFile,
+ [out] IBaseFilter **ppf,
+ [out] IFileSinkFilter **ppSink);
+
+ [local] HRESULT FindInterface(
+ [in, unique] const GUID *pCategory,
+ [in] IBaseFilter *pf,
+ [in] REFIID riid,
+ [out] void **ppint);
+
+ [call_as(FindInterface)] HRESULT RemoteFindInterface(
+ [in, unique] const GUID *pCategory,
+ [in] IBaseFilter *pf,
+ [in] REFIID riid,
+ [out] IUnknown **ppint);
+
+ HRESULT RenderStream(
+ [in] const GUID *pCategory,
+ [in] IUnknown *pSource,
+ [in] IBaseFilter *pfCompressor,
+ [in] IBaseFilter *pfRenderer);
+
+ HRESULT ControlStream(
+ [in] const GUID *pCategory,
+ [in] IBaseFilter *pFilter,
+ [in] REFERENCE_TIME *pstart,
+ [in] REFERENCE_TIME *pstop,
+ [in] WORD wStartCookie,
+ [in] WORD wStopCookie);
+
+ HRESULT AllocCapFile(
+ [in] LPCOLESTR lpstr,
+ [in] DWORDLONG dwlSize);
+
+ HRESULT CopyCaptureFile(
+ [in] LPOLESTR lpwstrOld,
+ [in] LPOLESTR lpwstrNew,
+ [in] int fAllowEscAbort,
+ [in] IAMCopyCaptureFileProgress *pCallback);
+}
+
+[
+object,
+uuid(670d1d20-a068-11d0-b3f0-00aa003761c5),
+pointer_default(unique)
+]
+interface IAMCopyCaptureFileProgress : IUnknown
+{
+ HRESULT Progress(
+ [in] int iProgress);
+}
+
+[
+ object,
+ uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D),
+ pointer_default(unique)
+]
+interface ICaptureGraphBuilder2 : IUnknown
+{
+ HRESULT SetFiltergraph(
+ [in] IGraphBuilder *pfg);
+
+ HRESULT GetFiltergraph(
+ [out] IGraphBuilder **ppfg);
+
+ HRESULT SetOutputFileName(
+ [in] const GUID *pType,
+ [in] LPCOLESTR lpstrFile,
+ [out] IBaseFilter **ppf,
+ [out] IFileSinkFilter **ppSink);
+
+ [local] HRESULT FindInterface(
+ [in] const GUID *pCategory,
+ [in] const GUID *pType,
+ [in] IBaseFilter *pf,
+ [in] REFIID riid,
+ [out] void **ppint);
+
+ [call_as(FindInterface)] HRESULT RemoteFindInterface(
+ [in] const GUID *pCategory,
+ [in] const GUID *pType,
+ [in] IBaseFilter *pf,
+ [in] REFIID riid,
+ [out] IUnknown **ppint);
+
+ HRESULT RenderStream(
+ [in] const GUID *pCategory,
+ [in] const GUID *pType,
+ [in] IUnknown *pSource,
+ [in] IBaseFilter *pfCompressor,
+ [in] IBaseFilter *pfRenderer);
+
+ HRESULT ControlStream(
+ [in] const GUID *pCategory,
+ [in] const GUID *pType,
+ [in] IBaseFilter *pFilter,
+ [in] REFERENCE_TIME *pstart,
+ [in] REFERENCE_TIME *pstop,
+ [in] WORD wStartCookie,
+ [in] WORD wStopCookie);
+
+ HRESULT AllocCapFile(
+ [in] LPCOLESTR lpstr,
+ [in] DWORDLONG dwlSize);
+
+ HRESULT CopyCaptureFile(
+ [in] LPOLESTR lpwstrOld,
+ [in] LPOLESTR lpwstrNew,
+ [in] int fAllowEscAbort,
+ [in] IAMCopyCaptureFileProgress *pCallback);
+
+ HRESULT FindPin(
+ [in] IUnknown *pSource,
+ [in] PIN_DIRECTION pindir,
+ [in] const GUID *pCategory,
+ [in] const GUID *pType,
+ [in] BOOL fUnconnected,
+ [in] int num,
+ [out] IPin **ppPin);
+}
+
+enum _AM_RENSDEREXFLAGS
+{
+ AM_RENDEREX_RENDERTOEXISTINGRENDERERS = 0x01
+};
+
+[
+ object,
+ uuid(36b73882-c2c8-11cf-8b46-00805f6cef60),
+ pointer_default(unique)
+]
+interface IFilterGraph2: IGraphBuilder
+{
+ HRESULT AddSourceFilterForMoniker(
+ [in] IMoniker *pMoniker,
+ [in] IBindCtx *pCtx,
+ [in, unique] LPCWSTR lpcwstrFilterName,
+ [out] IBaseFilter **ppFilter
+ );
+
+ HRESULT ReconnectEx
+ ( [in] IPin * ppin,
+ [in, unique] const AM_MEDIA_TYPE *pmt
+ );
+
+ HRESULT RenderEx( [in] IPin *pPinOut,
+ [in] DWORD dwFlags,
+ [in, out] DWORD *pvContext
+ );
+}
+
+[
+ object,
+ local,
+ uuid(56a868bf-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+]
+interface IStreamBuilder : IUnknown
+{
+ HRESULT Render
+ ( [in] IPin * ppinOut,
+ [in] IGraphBuilder * pGraph
+ );
+
+ HRESULT Backout
+ ( [in] IPin * ppinOut,
+ [in] IGraphBuilder * pGraph
+ );
+}
+
+
+/*****************************************************************************
+ * IAMStreamConfig interface
+ */
+[
+ object,
+ uuid(c6e13340-30ac-11d0-a18c-00a0c9118956),
+ pointer_default(unique)
+]
+interface IAMStreamConfig : IUnknown
+{
+ typedef struct _VIDEO_STREAM_CONFIG_CAPS {
+ GUID guid;
+ ULONG VideoStandard;
+ SIZE InputSize;
+ SIZE MinCroppingSize;
+ SIZE MaxCroppingSize;
+ int CropGranularityX;
+ int CropGranularityY;
+ int CropAlignX;
+ int CropAlignY;
+ SIZE MinOutputSize;
+ SIZE MaxOutputSize;
+ int OutputGranularityX;
+ int OutputGranularityY;
+ int StretchTapsX;
+ int StretchTapsY;
+ int ShrinkTapsX;
+ int ShrinkTapsY;
+ LONGLONG MinFrameInterval;
+ LONGLONG MaxFrameInterval;
+ LONG MinBitsPerSecond;
+ LONG MaxBitsPerSecond;
+ } VIDEO_STREAM_CONFIG_CAPS;
+
+ typedef struct _AUDIO_STREAM_CONFIG_CAPS {
+ GUID guid;
+ ULONG MinimumChannels;
+ ULONG MaximumChannels;
+ ULONG ChannelsGranularity;
+ ULONG MinimumBitsPerSample;
+ ULONG MaximumBitsPerSample;
+ ULONG BitsPerSampleGranularity;
+ ULONG MinimumSampleFrequency;
+ ULONG MaximumSampleFrequency;
+ ULONG SampleFrequencyGranularity;
+ } AUDIO_STREAM_CONFIG_CAPS;
+
+ HRESULT SetFormat( [in] AM_MEDIA_TYPE *pmt);
+ HRESULT GetFormat( [in] AM_MEDIA_TYPE **pmt);
+ HRESULT GetNumberOfCapabilities( [out] int *piCount, [out] int *piSize);
+ HRESULT GetStreamCaps( [in] int iIndex, [out] AM_MEDIA_TYPE **pmt,
+ [out] BYTE *pSCC);
+}
+
+
+typedef enum tagVideoProcAmpProperty
+{
+ VideoProcAmp_Brightness,
+ VideoProcAmp_Contrast,
+ VideoProcAmp_Hue,
+ VideoProcAmp_Saturation,
+ VideoProcAmp_Sharpness,
+ VideoProcAmp_Gamma,
+ VideoProcAmp_ColorEnable,
+ VideoProcAmp_WhiteBalance,
+ VideoProcAmp_BacklightCompensation,
+ VideoProcAmp_Gain
+} VideoProcAmpProperty;
+
+typedef enum tagVideoProcAmpFlags
+{
+ VideoProcAmp_Flags_Auto = 0x0001,
+ VideoProcAmp_Flags_Manual = 0x0002,
+} VideoProcAmpFlags;
+
+/*****************************************************************************
+ * IAMVideoProcAmp interface
+ */
+[
+ object,
+ uuid(c6e13360-30ac-11d0-a18c-00a0c9118956),
+ pointer_default(unique)
+]
+interface IAMVideoProcAmp : IUnknown
+{
+ HRESULT GetRange( [in] LONG Property, [out] LONG *pMin, [out] LONG *pMax,
+ [out] LONG *pSteppingDelta, [out] LONG *pDefault,
+ [out] LONG *pCapsFlags);
+ HRESULT Set( [in] LONG Property, [in] LONG lValue, [in] LONG Flags);
+ HRESULT Get( [in] LONG Property, [out] LONG *lValue, [out] LONG *Flags);
+}
+
+
+[
+ object,
+ uuid(56a868aa-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+]
+interface IAsyncReader : IUnknown
+{
+ HRESULT RequestAllocator(
+ [in] IMemAllocator* pPreferred,
+ [in] ALLOCATOR_PROPERTIES* pProps,
+ [out] IMemAllocator ** ppActual);
+
+ HRESULT Request(
+ [in] IMediaSample* pSample,
+ [in] DWORD_PTR dwUser);
+
+ HRESULT WaitForNext(
+ [in] DWORD dwTimeout,
+ [out] IMediaSample** ppSample,
+ [out] DWORD_PTR * pdwUser);
+
+ HRESULT SyncReadAligned(
+ [in] IMediaSample* pSample);
+
+ HRESULT SyncRead(
+ [in] LONGLONG llPosition,
+ [in] LONG lLength,
+ [out, size_is(lLength)]
+ BYTE* pBuffer);
+
+ HRESULT Length(
+ [out] LONGLONG* pTotal,
+ [out] LONGLONG* pAvailable);
+
+ HRESULT BeginFlush(void);
+
+ HRESULT EndFlush(void);
+}
+
+
+[
+ object,
+ uuid(56a868ab-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+]
+interface IGraphVersion : IUnknown
+{
+ HRESULT QueryVersion(LONG* pVersion);
+}
+
+[
+ object,
+ uuid(56a868ad-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+]
+interface IResourceConsumer : IUnknown
+{
+ HRESULT AcquireResource(
+ [in] LONG idResource);
+
+ HRESULT ReleaseResource(
+ [in] LONG idResource);
+}
+
+
+[
+ object,
+ uuid(56a868ac-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+]
+interface IResourceManager : IUnknown
+{
+ HRESULT Register(
+ [in] LPCWSTR pName,
+ [in] LONG cResource,
+ [out] LONG* plToken
+ );
+
+ HRESULT RegisterGroup(
+ [in] LPCWSTR pName,
+ [in] LONG cResource,
+ [in, size_is(cResource)]
+ LONG* palTokens,
+ [out] LONG* plToken
+ );
+
+ HRESULT RequestResource(
+ [in] LONG idResource,
+ [in] IUnknown* pFocusObject,
+ [in] IResourceConsumer* pConsumer
+ );
+
+ HRESULT NotifyAcquire(
+ [in] LONG idResource,
+ [in] IResourceConsumer* pConsumer,
+ [in] HRESULT hr);
+
+ HRESULT NotifyRelease(
+ [in] LONG idResource,
+ [in] IResourceConsumer* pConsumer,
+ [in] BOOL bStillWant);
+
+ HRESULT CancelRequest(
+ [in] LONG idResource,
+ [in] IResourceConsumer* pConsumer);
+
+ HRESULT SetFocus(
+ [in] IUnknown* pFocusObject);
+
+ HRESULT ReleaseFocus(
+ [in] IUnknown* pFocusObject);
+
+}
+
+cpp_quote("#ifndef _IKsPropertySet_")
+cpp_quote("#define _IKsPropertySet_")
+cpp_quote("#define KSPROPERTY_SUPPORT_GET 1")
+cpp_quote("#define KSPROPERTY_SUPPORT_SET 2")
+
+[
+ object,
+ uuid(31efac30-515c-11d0-a9aa-00aa0061be93),
+ pointer_default(unique),
+ local
+]
+interface IKsPropertySet : IUnknown
+{
+ HRESULT Set( [in] REFGUID guidPropSet,
+ [in] DWORD dwPropID,
+ [in, size_is(cbInstanceData)] LPVOID pInstanceData,
+ [in] DWORD cbInstanceData,
+ [in, size_is(cbPropData)] LPVOID pPropData,
+ [in] DWORD cbPropData );
+
+ HRESULT Get( [in] REFGUID guidPropSet,
+ [in] DWORD dwPropID,
+ [in, size_is(cbInstanceData)] LPVOID pInstanceData,
+ [in] DWORD cbInstanceData,
+ [out, size_is(cbPropData)] LPVOID pPropData,
+ [in] DWORD cbPropData,
+ [out] DWORD *pcbReturned );
+
+ HRESULT QuerySupported( [in] REFGUID guidPropSet,
+ [in] DWORD dwPropID,
+ [out] DWORD *pTypeSupport);
+}
+cpp_quote("#endif /* _IKsPropertySet_ */")
+
+[
+ object,
+ uuid(36b73883-c2c8-11cf-8b46-00805f6cef60),
+ pointer_default(unique)
+]
+interface ISeekingPassThru : IUnknown
+{
+ HRESULT Init( [in] BOOL bSupportRendering, [in] IPin *pPin);
+}
+
+enum _AM_FILTER_MISC_FLAGS
+{
+ AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x1,
+ AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x2
+};
+
+[
+ local,
+ object,
+ uuid(2dd74950-a890-11d1-abe8-00a0c905f375),
+ pointer_default(unique)
+]
+interface IAMFilterMiscFlags : IUnknown
+{
+ ULONG GetMiscFlags();
+};
+
+[
+ local,
+ object,
+ uuid(4995f511-9ddb-4f12-bd3b-f04611807b79),
+ pointer_default(unique)
+]
+interface IAMGraphBuilderCallback : IUnknown
+{
+ HRESULT SelectedFilter(
+ [in] IMoniker *pMon);
+
+ HRESULT CreatedFilter(
+ [in] IBaseFilter *pFil);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h
new file mode 100644
index 00000000..065c4dd8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetsd.h
@@ -0,0 +1,333 @@
+/*
+ * Compilers that uses ILP32, LP64 or P64 type models
+ * for both Win32 and Win64 are supported by this file.
+ *
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_BASETSD_H
+#define __WINE_BASETSD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*
+ * Win32 was easy to implement under Unix since most 32-bit Unices use the same
+ * type model (ILP32) as Win32, where int, long and pointer are 32-bit.
+ *
+ * Win64, however, can cause some problems. Most 64-bit Unices use the LP64 type
+ * model where int is 32-bit and long and pointer are 64-bit. Win64 on the other
+ * hand uses the LLP64 type model where int and long are 32 bit and pointer is
+ * 64-bit.
+ */
+
+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__aarch64__)) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+/* Type model independent typedefs */
+/* The __intXX types are native types defined by the MS C compiler.
+ * Apps that make use of them before they get defined here, can
+ * simply add to the command line:
+ * -D__int8=char -D__int16=short -D__int32=int "-D__int64=long long"
+ */
+#if !defined(_MSC_VER) && !defined(__WIDL__)
+# ifndef __int8
+# define __int8 char
+# endif
+# ifndef __int16
+# define __int16 short
+# endif
+# ifndef __int32
+# define __int32 int
+# endif
+# ifndef __int64
+# if defined(_WIN64) && !defined(__MINGW64__)
+# define __int64 long
+# else
+# define __int64 long long
+# endif
+# endif
+#endif /* !defined(_MSC_VER) */
+
+/* FIXME: DECLSPEC_ALIGN should be declared only in winnt.h, but we need it here too */
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+# define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+# define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+# define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+typedef signed char INT8, *PINT8;
+typedef signed short INT16, *PINT16;
+typedef signed int INT32, *PINT32;
+typedef unsigned char UINT8, *PUINT8;
+typedef unsigned short UINT16, *PUINT16;
+typedef unsigned int UINT32, *PUINT32;
+typedef signed int LONG32, *PLONG32;
+typedef unsigned int ULONG32, *PULONG32;
+typedef unsigned int DWORD32, *PDWORD32;
+
+#ifdef _MSC_VER
+typedef signed __int64 INT64, *PINT64;
+typedef unsigned __int64 UINT64, *PUINT64;
+typedef signed __int64 LONG64, *PLONG64;
+typedef unsigned __int64 ULONG64, *PULONG64;
+typedef unsigned __int64 DWORD64, *PDWORD64;
+#else
+typedef signed __int64 DECLSPEC_ALIGN(8) INT64, *PINT64;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) UINT64, *PUINT64;
+typedef signed __int64 DECLSPEC_ALIGN(8) LONG64, *PLONG64;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONG64, *PULONG64;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) DWORD64, *PDWORD64;
+#endif
+
+/* Basic pointer-sized integer types */
+
+#if defined(__midl) || defined(__WIDL__)
+
+typedef /* [public] */ signed __int3264 INT_PTR, *PINT_PTR;
+typedef /* [public] */ signed __int3264 LONG_PTR, *PLONG_PTR;
+typedef /* [public] */ unsigned __int3264 UINT_PTR, *PUINT_PTR;
+typedef /* [public] */ unsigned __int3264 ULONG_PTR, *PULONG_PTR;
+typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
+
+#elif defined(_WIN64)
+
+#define __int3264 __int64
+
+typedef signed __int64 INT_PTR, *PINT_PTR;
+typedef signed __int64 LONG_PTR, *PLONG_PTR;
+typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
+typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
+typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
+
+#else
+
+#define __int3264 __int32
+
+typedef long INT_PTR, *PINT_PTR;
+typedef unsigned long UINT_PTR, *PUINT_PTR;
+typedef long LONG_PTR, *PLONG_PTR;
+typedef unsigned long ULONG_PTR, *PULONG_PTR;
+typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
+
+#endif
+
+/* Win32 or Win64 dependent typedef/defines. */
+
+#ifdef _WIN64
+
+#define MAXINT_PTR 0x7fffffffffffffff
+#define MININT_PTR 0x8000000000000000
+#define MAXUINT_PTR 0xffffffffffffffff
+
+typedef __int64 SHANDLE_PTR;
+typedef unsigned __int64 HANDLE_PTR;
+typedef int HALF_PTR, *PHALF_PTR;
+typedef unsigned int UHALF_PTR, *PUHALF_PTR;
+
+#define MAXHALF_PTR 0x7fffffff
+#define MINHALF_PTR 0x80000000
+#define MAXUHALF_PTR 0xffffffff
+
+#if !defined(__midl) && !defined(__WIDL__)
+
+static inline ULONG32 HandleToULong(const void *h)
+{
+ return (ULONG32)(ULONG_PTR)h;
+}
+
+static inline LONG32 HandleToLong(const void *h)
+{
+ return (LONG32)(LONG_PTR)h;
+}
+
+static inline void *ULongToHandle(ULONG32 ul)
+{
+ return (void *)(ULONG_PTR)ul;
+}
+
+static inline void *LongToHandle(LONG32 l)
+{
+ return (void *)(LONG_PTR)l;
+}
+
+static inline ULONG32 PtrToUlong(const void *p)
+{
+ return (ULONG32)(ULONG_PTR)p;
+}
+
+static inline LONG32 PtrToLong(const void *p)
+{
+ return (LONG32)(LONG_PTR)p;
+}
+
+static inline UINT32 PtrToUint(const void *p)
+{
+ return (UINT32)(UINT_PTR)p;
+}
+
+static inline INT32 PtrToInt(const void *p)
+{
+ return (INT32)(INT_PTR)p;
+}
+
+static inline UINT16 PtrToUshort(const void *p)
+{
+ return (UINT16)(ULONG_PTR)p;
+}
+
+static inline INT16 PtrToShort(const void *p)
+{
+ return (INT16)(LONG_PTR)p;
+}
+
+static inline void *IntToPtr(INT32 i)
+{
+ return (void *)(INT_PTR)i;
+}
+
+static inline void *UIntToPtr(UINT32 ui)
+{
+ return (void *)(UINT_PTR)ui;
+}
+
+static inline void *LongToPtr(LONG32 l)
+{
+ return (void *)(LONG_PTR)l;
+}
+
+static inline void *ULongToPtr(ULONG32 ul)
+{
+ return (void *)(ULONG_PTR)ul;
+}
+
+#endif /* !__midl && !__WIDL__ */
+
+#else /* FIXME: defined(_WIN32) */
+
+#define MAXINT_PTR 0x7fffffff
+#define MININT_PTR 0x80000000
+#define MAXUINT_PTR 0xffffffff
+
+typedef long SHANDLE_PTR;
+typedef unsigned long HANDLE_PTR;
+typedef signed short HALF_PTR, *PHALF_PTR;
+typedef unsigned short UHALF_PTR, *PUHALF_PTR;
+
+#define MAXUHALF_PTR 0xffff
+#define MAXHALF_PTR 0x7fff
+#define MINHALF_PTR 0x8000
+
+#define HandleToULong(h) ((ULONG)(ULONG_PTR)(h))
+#define HandleToLong(h) ((LONG)(LONG_PTR)(h))
+#define ULongToHandle(ul) ((HANDLE)(ULONG_PTR)(ul))
+#define LongToHandle(l) ((HANDLE)(LONG_PTR)(l))
+#define PtrToUlong(p) ((ULONG)(ULONG_PTR)(p))
+#define PtrToLong(p) ((LONG)(LONG_PTR)(p))
+#define PtrToUint(p) ((UINT)(UINT_PTR)(p))
+#define PtrToInt(p) ((INT)(INT_PTR)(p))
+#define PtrToUshort(p) ((USHORT)(ULONG_PTR)(p))
+#define PtrToShort(p) ((SHORT)(LONG_PTR)(p))
+#define IntToPtr(i) ((void *)(INT_PTR)((INT)i))
+#define UIntToPtr(ui) ((void *)(UINT_PTR)((UINT)ui))
+#define LongToPtr(l) ((void *)(LONG_PTR)((LONG)l))
+#define ULongToPtr(ul) ((void *)(ULONG_PTR)((ULONG)ul))
+
+#endif /* defined(_WIN64) || defined(_WIN32) */
+
+#define HandleToUlong(h) HandleToULong(h)
+#define UlongToHandle(ul) ULongToHandle(ul)
+#define UintToPtr(ui) UIntToPtr(ui)
+#define UlongToPtr(ul) ULongToPtr(ul)
+
+typedef LONG_PTR SSIZE_T, *PSSIZE_T;
+typedef ULONG_PTR SIZE_T, *PSIZE_T;
+
+typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
+
+/* Some Wine-specific definitions */
+
+/* Architecture dependent settings. */
+/* These are hardcoded to avoid dependencies on config.h in Winelib apps. */
+#if defined(__i386__)
+# undef WORDS_BIGENDIAN
+# undef BITFIELDS_BIGENDIAN
+# define ALLOW_UNALIGNED_ACCESS
+#elif defined(__x86_64__)
+# undef WORDS_BIGENDIAN
+# undef BITFIELDS_BIGENDIAN
+# define ALLOW_UNALIGNED_ACCESS
+#elif defined(__sparc__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__powerpc__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__ALPHA__)
+# undef WORDS_BIGENDIAN
+# undef BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__ARMEB__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__ARMEL__) || defined(__arm__)
+# undef WORDS_BIGENDIAN
+# undef BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__AARCH64EB__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__AARCH64EL__) || defined(__aarch64__)
+# undef WORDS_BIGENDIAN
+# undef BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__MIPSEB__)
+# define WORDS_BIGENDIAN
+# define BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif defined(__MIPSEL__)
+# undef WORDS_BIGENDIAN
+# undef BITFIELDS_BIGENDIAN
+# undef ALLOW_UNALIGNED_ACCESS
+#elif !defined(RC_INVOKED) && !defined(__WIDL__) && !defined(__midl)
+# error Unknown CPU architecture!
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* !defined(__WINE_BASETSD_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h
new file mode 100644
index 00000000..2f9b58ed
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/basetyps.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 1998 Anders Norlander
+ * Copyright (C) 2005 Steven Edwards
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _BASETYPS_H_
+#define _BASETYPS_H_
+
+#ifdef __cplusplus
+# define EXTERN_C extern "C"
+#else
+# define EXTERN_C extern
+#endif
+
+#define STDMETHODCALLTYPE __stdcall
+#define STDMETHODVCALLTYPE __cdecl
+#define STDAPICALLTYPE __stdcall
+#define STDAPIVCALLTYPE __cdecl
+#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(t) EXTERN_C t STDAPICALLTYPE
+#define STDMETHODIMP HRESULT STDMETHODCALLTYPE
+#define STDMETHODIMP_(t) t STDMETHODCALLTYPE
+#define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
+#define STDAPIV_(t) EXTERN_C t STDAPIVCALLTYPE
+#define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
+#define STDMETHODIMPV_(t) t STDMETHODVCALLTYPE
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+# define interface struct
+# define STDMETHOD(m) virtual HRESULT STDMETHODCALLTYPE m
+# define STDMETHOD_(t,m) virtual t STDMETHODCALLTYPE m
+# define PURE =0
+# define THIS_
+# define THIS void
+# define DECLARE_INTERFACE(i) interface i
+# define DECLARE_INTERFACE_(i,b) interface i : public b
+#else
+# define STDMETHOD(m) HRESULT (STDMETHODCALLTYPE *m)
+# define STDMETHOD_(t,m) t (STDMETHODCALLTYPE *m)
+# define PURE
+# define THIS_ INTERFACE *,
+# define THIS INTERFACE *
+# ifdef CONST_VTABLE
+# define DECLARE_INTERFACE(i) \
+ typedef interface i { const struct i##Vtbl *lpVtbl; } i; \
+ typedef struct i##Vtbl i##Vtbl; \
+ struct i##Vtbl
+# else
+# define DECLARE_INTERFACE(i) \
+ typedef interface i { struct i##Vtbl *lpVtbl; } i; \
+ typedef struct i##Vtbl i##Vtbl; \
+ struct i##Vtbl
+# endif
+# define DECLARE_INTERFACE_(i,b) DECLARE_INTERFACE(i)
+#endif
+
+#include <guiddef.h>
+
+#ifndef _ERROR_STATUS_T_DEFINED
+typedef unsigned long error_status_t;
+#define _ERROR_STATUS_T_DEFINED
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+#endif /* _BASETYPS_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h
new file mode 100644
index 00000000..fa7f08ac
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bcrypt.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_BCRYPT_H
+#define __WINE_BCRYPT_H
+
+#ifndef WINAPI
+#define WINAPI __stdcall
+#endif
+
+#ifndef IN
+#define IN
+#endif
+
+#ifndef OUT
+#define OUT
+#endif
+
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+
+typedef struct _BCRYPT_ALGORITHM_IDENTIFIER
+{
+ LPWSTR pszName;
+ ULONG dwClass;
+ ULONG dwFlags;
+} BCRYPT_ALGORITHM_IDENTIFIER;
+
+#endif /* __WINE_BCRYPT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl
new file mode 100644
index 00000000..6bced343
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/binres.idl
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733ab1-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IBindResource : IUnknown
+{
+ [local]
+ HRESULT Bind([in] IUnknown *pUnkOuter,
+ [in] LPCOLESTR pwszURL,
+ [in] DBBINDURLFLAG dwBindURLFlags,
+ [in] REFGUID rguid,
+ [in] REFIID riid,
+ [in] IAuthenticate *pAuthenticate,
+ [in, out, unique] DBIMPLICITSESSION *pImplSession,
+ [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+ [out, iid_is(riid)] IUnknown **ppUnk);
+
+ [call_as(Bind)]
+ HRESULT RemoteBind([in] IUnknown *pUnkOuter,
+ [in] LPCOLESTR pwszURL,
+ [in] DBBINDURLFLAG dwBindURLFlags,
+ [in] REFGUID rguid,
+ [in] REFIID riid,
+ [in] IAuthenticate *pAuthenticate,
+ [in] IUnknown *pSessionUnkOuter,
+ [in, unique] IID *piid,
+ [in, out, unique, iid_is(piid)] IUnknown **ppSession,
+ [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+ [out, iid_is(riid)] IUnknown **ppUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl
new file mode 100644
index 00000000..b35b0b93
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits.idl
@@ -0,0 +1,426 @@
+/*
+ * Background Intelligent Transfer Service (BITS) interface
+ *
+ * Copyright 2007 Google (Roy Shea)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+cpp_quote("#include \"bitsmsg.h\"")
+cpp_quote("#define BG_SIZE_UNKNOWN (UINT64)(-1)")
+cpp_quote("#define BG_NOTIFY_JOB_TRANSFERRED 0x0001")
+cpp_quote("#define BG_NOTIFY_JOB_ERROR 0x0002")
+cpp_quote("#define BG_NOTIFY_DISABLE 0x0004")
+cpp_quote("#define BG_NOTIFY_JOB_MODIFICATION 0x0008")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef EnumJobs")
+cpp_quote("#undef GetJob")
+cpp_quote("#endif")
+
+#define BG_ENUM_SIZEIS(maxcount) maxcount
+#define BG_ENUM_LENGTHIS(maxcount,lengthptr) lengthptr ? *lengthptr : maxcount
+
+[
+ uuid(01b7bd23-fb88-4a77-8490-5891d3e4653a),
+ odl
+]
+interface IBackgroundCopyFile : IUnknown
+{
+ typedef struct _BG_FILE_PROGRESS {
+ UINT64 BytesTotal;
+ UINT64 BytesTransferred;
+ BOOL Completed;
+ } BG_FILE_PROGRESS;
+
+ HRESULT GetRemoteName(
+ [out] LPWSTR *pVal
+ );
+
+ HRESULT GetLocalName(
+ [out] LPWSTR *pVal
+ );
+
+ HRESULT GetProgress(
+ [out] BG_FILE_PROGRESS *pVal
+ );
+}
+
+
+[
+ uuid(ca51e165-c365-424c-8d41-24aaa4ff3c40),
+ odl
+]
+interface IEnumBackgroundCopyFiles: IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyFile **rgelt,
+ [in,out,unique] ULONG *pceltFetched
+ );
+
+ HRESULT Skip(
+ [in] ULONG celt
+ );
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumBackgroundCopyFiles **ppenum
+ );
+
+ HRESULT GetCount(
+ [out] ULONG *puCount
+ );
+}
+
+
+[
+ uuid(19c613a0-fcb8-4f28-81ae-897c3d078f81),
+ odl
+]
+interface IBackgroundCopyError : IUnknown
+{
+ typedef enum {
+ BG_ERROR_CONTEXT_NONE = 0,
+ BG_ERROR_CONTEXT_UNKNOWN = 1,
+ BG_ERROR_CONTEXT_GENERAL_QUEUE_MANAGER = 2,
+ BG_ERROR_CONTEXT_QUEUE_MANAGER_NOTIFICATION =3,
+ BG_ERROR_CONTEXT_LOCAL_FILE = 4,
+ BG_ERROR_CONTEXT_REMOTE_FILE = 5,
+ BG_ERROR_CONTEXT_GENERAL_TRANSPORT = 6,
+ BG_ERROR_CONTEXT_REMOTE_APPLICATION =7,
+ } BG_ERROR_CONTEXT;
+
+ HRESULT GetError(
+ [out,ref] BG_ERROR_CONTEXT *pContext,
+ [out,ref] HRESULT *pCode
+ );
+
+ HRESULT GetFile(
+ [out] IBackgroundCopyFile **pVal
+ );
+
+ HRESULT GetErrorDescription(
+ [in] DWORD LanguageId,
+ [out,ref] LPWSTR *pErrorDescription
+ );
+
+ HRESULT GetErrorContextDescription(
+ [in] DWORD LanguageId,
+ [out,ref] LPWSTR *pContextDescription
+ );
+
+ HRESULT GetProtocol(
+ [out,ref] LPWSTR *pProtocol
+ );
+}
+
+
+
+[
+ uuid(37668d37-507e-4160-9316-26306d150b12),
+ odl
+]
+interface IBackgroundCopyJob : IUnknown
+{
+ typedef struct _BG_FILE_INFO {
+ LPWSTR RemoteName;
+ LPWSTR LocalName;
+ } BG_FILE_INFO;
+
+ typedef struct _BG_JOB_PROGRESS {
+ UINT64 BytesTotal;
+ UINT64 BytesTransferred;
+ ULONG FilesTotal;
+ ULONG FilesTransferred;
+ } BG_JOB_PROGRESS;
+
+ typedef struct _BG_JOB_TIMES {
+ FILETIME CreationTime;
+ FILETIME ModificationTime;
+ FILETIME TransferCompletionTime;
+ } BG_JOB_TIMES;
+
+ typedef enum {
+ BG_JOB_PRIORITY_FOREGROUND = 0,
+ BG_JOB_PRIORITY_HIGH = 1,
+ BG_JOB_PRIORITY_NORMAL = 2,
+ BG_JOB_PRIORITY_LOW = 3
+ } BG_JOB_PRIORITY;
+
+ typedef enum {
+ BG_JOB_STATE_QUEUED = 0,
+ BG_JOB_STATE_CONNECTING = 1,
+ BG_JOB_STATE_TRANSFERRING = 2,
+ BG_JOB_STATE_SUSPENDED = 3,
+ BG_JOB_STATE_ERROR = 4,
+ BG_JOB_STATE_TRANSIENT_ERROR = 5,
+ BG_JOB_STATE_TRANSFERRED = 6,
+ BG_JOB_STATE_ACKNOWLEDGED = 7,
+ BG_JOB_STATE_CANCELLED = 8
+ } BG_JOB_STATE;
+
+ typedef enum {
+ BG_JOB_TYPE_DOWNLOAD = 0,
+ BG_JOB_TYPE_UPLOAD = 1,
+ BG_JOB_TYPE_UPLOAD_REPLY = 2
+ } BG_JOB_TYPE;
+
+ typedef enum {
+ BG_JOB_PROXY_USAGE_PRECONFIG,
+ BG_JOB_PROXY_USAGE_NO_PROXY,
+ BG_JOB_PROXY_USAGE_OVERRIDE,
+ BG_JOB_PROXY_USAGE_AUTODETECT
+ } BG_JOB_PROXY_USAGE;
+
+
+ HRESULT AddFileSet(
+ [in] ULONG cFileCount,
+ [in,size_is(cFileCount)] BG_FILE_INFO *pFileSet
+ );
+
+ HRESULT AddFile(
+ [in] LPCWSTR RemoteUrl,
+ [in] LPCWSTR LocalName
+ );
+
+ HRESULT EnumFiles(
+ [out] IEnumBackgroundCopyFiles **pEnum
+ );
+
+ HRESULT Suspend();
+
+ HRESULT Resume();
+
+ HRESULT Cancel();
+
+ HRESULT Complete();
+
+ HRESULT GetId(
+ [out] GUID *pVal
+ );
+
+ HRESULT GetType(
+ [out] BG_JOB_TYPE *pVal
+ );
+
+ HRESULT GetProgress(
+ [out] BG_JOB_PROGRESS *pVal
+ );
+
+ HRESULT GetTimes(
+ [out] BG_JOB_TIMES *pVal
+ );
+
+ HRESULT GetState(
+ [out] BG_JOB_STATE *pVal
+ );
+
+ HRESULT GetError(
+ [out] IBackgroundCopyError **ppError
+ );
+
+ HRESULT GetOwner(
+ [out] LPWSTR *pVal
+ );
+
+ HRESULT SetDisplayName(
+ [in] LPCWSTR Val
+ );
+
+ HRESULT GetDisplayName(
+ [out] LPWSTR *pVal
+ );
+
+ HRESULT SetDescription(
+ [in] LPCWSTR Val
+ );
+
+ HRESULT GetDescription(
+ [out] LPWSTR *pVal
+ );
+
+ HRESULT SetPriority(
+ [in] BG_JOB_PRIORITY Val
+ );
+
+ HRESULT GetPriority(
+ [out] BG_JOB_PRIORITY *pVal
+ );
+
+ HRESULT SetNotifyFlags(
+ [in] ULONG Val
+ );
+
+ HRESULT GetNotifyFlags(
+ [out] ULONG *pVal
+ );
+
+ HRESULT SetNotifyInterface(
+ [in] IUnknown *Val
+ );
+
+ HRESULT GetNotifyInterface(
+ [out] IUnknown ** pVal
+ );
+
+ HRESULT SetMinimumRetryDelay(
+ [in] ULONG Seconds
+ );
+
+ HRESULT GetMinimumRetryDelay(
+ [out] ULONG *Seconds
+ );
+
+ HRESULT SetNoProgressTimeout(
+ [in] ULONG Seconds
+ );
+
+ HRESULT GetNoProgressTimeout(
+ [out] ULONG *Seconds
+ );
+
+ HRESULT GetErrorCount(
+ [out] ULONG *Errors
+ );
+
+ HRESULT SetProxySettings(
+ [in] BG_JOB_PROXY_USAGE ProxyUsage,
+ [in,string,unique] const WCHAR *ProxyList,
+ [in,string,unique] const WCHAR *ProxyBypassList
+ );
+
+ HRESULT GetProxySettings(
+ [out] BG_JOB_PROXY_USAGE *pProxyUsage,
+ [out] LPWSTR *pProxyList,
+ [out] LPWSTR *pProxyBypassList
+ );
+
+ HRESULT TakeOwnership();
+}
+
+[
+ uuid(1af4f612-3b71-466f-8f58-7b6f73ac57ad),
+ odl
+]
+interface IEnumBackgroundCopyJobs : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out,size_is(BG_ENUM_SIZEIS(celt)),length_is(BG_ENUM_LENGTHIS(celt,pceltFetched))] IBackgroundCopyJob **rgelt,
+ [in,out,unique] ULONG *pceltFetched
+ );
+
+ HRESULT Skip(
+ [in] ULONG celt
+ );
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumBackgroundCopyJobs **ppenum
+ );
+
+ HRESULT GetCount(
+ [out] ULONG *puCount
+ );
+}
+
+
+[
+ uuid(97ea99c7-0186-4ad4-8df9-c5b4e0ed6b22),
+ odl
+]
+interface IBackgroundCopyCallback : IUnknown
+{
+ HRESULT JobTransferred(
+ [in] IBackgroundCopyJob *pJob
+ );
+
+ HRESULT JobError(
+ [in] IBackgroundCopyJob *pJob,
+ [in] IBackgroundCopyError *pError
+ );
+
+ HRESULT JobModification(
+ [in] IBackgroundCopyJob *pJob,
+ [in] DWORD dwReserved
+ );
+}
+
+[
+ uuid(5ce34c0d-0dc9-4c1f-897c-daa1b78cee7c),
+ odl
+]
+interface IBackgroundCopyManager : IUnknown
+{
+ cpp_quote("#define BG_JOB_ENUM_ALL_USERS 0x0001")
+
+ HRESULT CreateJob(
+ [in] LPCWSTR DisplayName,
+ [in] BG_JOB_TYPE Type,
+ [out] GUID *pJobId,
+ [out] IBackgroundCopyJob **ppJob
+ );
+
+ HRESULT GetJob(
+ [in] REFGUID jobID,
+ [out] IBackgroundCopyJob **ppJob
+ );
+
+ HRESULT EnumJobs(
+ [in] DWORD dwFlags,
+ [out] IEnumBackgroundCopyJobs **ppEnum
+ );
+ HRESULT GetErrorDescription(
+ [in] HRESULT hResult,
+ [in] DWORD LanguageId,
+ [out] LPWSTR *pErrorDescription);
+}
+
+
+[
+ uuid(1deeb74f-7915-4560-b558-918c83f176a6),
+ version(1.0)
+]
+library BackgroundCopyManager
+{
+ [
+ uuid(4991d34b-80a1-4291-83b6-3328366b9097),
+ ]
+ coclass BackgroundCopyManager
+ {
+ [default] interface IBackgroundCopyManager;
+ };
+
+ interface IBackgroundCopyCallback;
+}
+
+cpp_quote("#include \"bits1_5.h\"")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl
new file mode 100644
index 00000000..fc25670f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bits1_5.idl
@@ -0,0 +1,97 @@
+/*
+ * Background Intelligent Transfer Service (BITS) 1.5 interface
+ *
+ * Copyright 2008 Google (Dan Hipschman)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "bits.idl";
+#endif
+
+[
+ uuid(54b50739-686f-45eb-9dff-d6a9a0faa9af),
+ odl
+]
+interface IBackgroundCopyJob2 : IBackgroundCopyJob
+{
+ HRESULT SetNotifyCmdLine([unique] LPCWSTR prog, [unique] LPCWSTR params);
+ HRESULT GetNotifyCmdLine([out] LPWSTR *prog, [out] LPWSTR *params);
+
+ typedef struct _BG_JOB_REPLY_PROGRESS
+ {
+ UINT64 BytesTotal;
+ UINT64 BytesTransferred;
+ } BG_JOB_REPLY_PROGRESS;
+
+ HRESULT GetReplyProgress([in, out] BG_JOB_REPLY_PROGRESS *progress);
+ HRESULT GetReplyData([out, size_is( , (unsigned long) *pLength)] byte **pBuffer,
+ [in, out, unique] UINT64 *pLength);
+ HRESULT SetReplyFileName([unique] LPCWSTR filename);
+ HRESULT GetReplyFileName([out] LPWSTR *pFilename);
+
+ typedef enum
+ {
+ BG_AUTH_TARGET_SERVER = 1,
+ BG_AUTH_TARGET_PROXY
+ } BG_AUTH_TARGET;
+
+ typedef enum
+ {
+ BG_AUTH_SCHEME_BASIC = 1,
+ BG_AUTH_SCHEME_DIGEST,
+ BG_AUTH_SCHEME_NTLM,
+ BG_AUTH_SCHEME_NEGOTIATE,
+ BG_AUTH_SCHEME_PASSPORT
+ } BG_AUTH_SCHEME;
+
+ typedef struct
+ {
+ LPWSTR UserName;
+ LPWSTR Password;
+ } BG_BASIC_CREDENTIALS;
+ typedef BG_BASIC_CREDENTIALS *PBG_BASIC_CREDENTIALS;
+
+ typedef [switch_type(BG_AUTH_SCHEME)] union
+ {
+ [case(BG_AUTH_SCHEME_BASIC, BG_AUTH_SCHEME_DIGEST, BG_AUTH_SCHEME_NTLM,
+ BG_AUTH_SCHEME_NEGOTIATE, BG_AUTH_SCHEME_PASSPORT)]
+ BG_BASIC_CREDENTIALS Basic;
+ [default]
+ ;
+ } BG_AUTH_CREDENTIALS_UNION;
+
+ typedef struct
+ {
+ BG_AUTH_TARGET Target;
+ BG_AUTH_SCHEME Scheme;
+ [switch_is(Scheme)] BG_AUTH_CREDENTIALS_UNION Credentials;
+ } BG_AUTH_CREDENTIALS;
+ typedef BG_AUTH_CREDENTIALS *PBG_AUTH_CREDENTIALS;
+
+ HRESULT SetCredentials(BG_AUTH_CREDENTIALS *cred);
+ HRESULT RemoveCredentials(BG_AUTH_TARGET target, BG_AUTH_SCHEME scheme);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h
new file mode 100644
index 00000000..e7229ae8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/bitsmsg.h
@@ -0,0 +1,90 @@
+/*
+ * Standard return values that may be generated by BITS
+ *
+ * Copyright 2007 Google (Roy Shea)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_BITMSG_H__
+#define __WINE_BITMSG_H__
+
+#define BG_S_PARTIAL_COMPLETE 0x00200017
+#define BG_S_UNABLE_TO_DELETE_FILES 0x0020001A
+#define BG_S_OVERRIDDEN_BY_POLICY 0x00200055
+
+#define BG_E_HTTP_ERROR_400 0x80190190
+#define BG_E_HTTP_ERROR_401 0x80190191
+#define BG_E_HTTP_ERROR_404 0x80190194
+#define BG_E_HTTP_ERROR_407 0x80190197
+#define BG_E_HTTP_ERROR_414 0x8019019E
+#define BG_E_HTTP_ERROR_501 0x801901F5
+#define BG_E_HTTP_ERROR_503 0x801901F7
+#define BG_E_HTTP_ERROR_504 0x801901F8
+#define BG_E_HTTP_ERROR_505 0x801901F9
+
+#define BG_E_NOT_FOUND 0x80200001
+#define BG_E_INVALID_STATE 0x80200002
+#define BG_E_EMPTY 0x80200003
+#define BG_E_FILE_NOT_AVAILABLE 0x80200004
+#define BG_E_PROTOCOL_NOT_AVAILABLE 0x80200005
+#define BG_E_DESTINATION_LOCKED 0x8020000D
+#define BG_E_VOLUME_CHANGED 0x8020000E
+#define BG_E_ERROR_INFORMATION_UNAVAILABLE 0x8020000F
+#define BG_E_NETWORK_DISCONNECTED 0x80200010
+#define BG_E_MISSING_FILE_SIZE 0x80200011
+#define BG_E_INSUFFICIENT_HTTP_SUPPORT 0x80200012
+#define BG_E_INSUFFICIENT_RANGE_SUPPORT 0x80200013
+#define BG_E_REMOTE_NOT_SUPPORTED 0x80200014
+#define BG_E_NEW_OWNER_DIFF_MAPPING 0x80200015
+#define BG_E_NEW_OWNER_NO_FILE_ACCESS 0x80200016
+#define BG_E_PROXY_LIST_TOO_LARGE 0x80200018
+#define BG_E_PROXY_BYPASS_LIST_TOO_LARGE 0x80200019
+#define BG_E_TOO_MANY_FILES 0x8020001C
+#define BG_E_LOCAL_FILE_CHANGED 0x8020001D
+#define BG_E_TOO_LARGE 0x80200020
+#define BG_E_STRING_TOO_LONG 0x80200021
+#define BG_E_CLIENT_SERVER_PROTOCOL_MISMATCH 0x80200022
+#define BG_E_SERVER_EXECUTE_ENABLED 0x80200023
+#define BG_E_USERNAME_TOO_LARGE 0x80200025
+#define BG_E_PASSWORD_TOO_LARGE 0x80200026
+#define BG_E_INVALID_AUTH_TARGET 0x80200027
+#define BG_E_INVALID_AUTH_SCHEME 0x80200028
+#define BG_E_INVALID_RANGE 0x8020002B
+#define BG_E_OVERLAPPING_RANGES 0x8020002C
+#define BG_E_BLOCKED_BY_POLICY 0x8020003E
+#define BG_E_INVALID_PROXY_INFO 0x8020003F
+#define BG_E_INVALID_CREDENTIALS 0x80200040
+#define BG_E_RECORD_DELETED 0x80200042
+#define BG_E_UPNP_ERROR 0x80200045
+#define BG_E_PEERCACHING_DISABLED 0x80200047
+#define BG_E_BUSYCACHERECORD 0x80200048
+#define BG_E_TOO_MANY_JOBS_PER_USER 0x80200049
+#define BG_E_TOO_MANY_JOBS_PER_MACHINE 0x80200050
+#define BG_E_TOO_MANY_FILES_IN_JOB 0x80200051
+#define BG_E_TOO_MANY_RANGES_IN_FILE 0x80200052
+#define BG_E_VALIDATION_FAILED 0x80200053
+#define BG_E_MAXDOWNLOAD_TIMEOUT 0x80200054
+
+#endif /* #ifndef __WINE_BITMSG_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h
new file mode 100644
index 00000000..de1e71e6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cderr.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 1999 Bertho Stultiens
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CDERR_H
+#define __WINE_CDERR_H
+
+/* General error codes */
+#define CDERR_DIALOGFAILURE 0xFFFF
+#define CDERR_GENERALCODES 0x0000
+#define CDERR_STRUCTSIZE 0x0001
+#define CDERR_INITIALIZATION 0x0002
+#define CDERR_NOTEMPLATE 0x0003
+#define CDERR_NOHINSTANCE 0x0004
+#define CDERR_LOADSTRFAILURE 0x0005
+#define CDERR_FINDRESFAILURE 0x0006
+#define CDERR_LOADRESFAILURE 0x0007
+#define CDERR_LOCKRESFAILURE 0x0008
+#define CDERR_MEMALLOCFAILURE 0x0009
+#define CDERR_MEMLOCKFAILURE 0x000A
+#define CDERR_NOHOOK 0x000B
+#define CDERR_REGISTERMSGFAIL 0x000C
+
+/* Printer dialog error codes */
+#define PDERR_PRINTERCODES 0x1000
+#define PDERR_SETUPFAILURE 0x1001
+#define PDERR_PARSEFAILURE 0x1002
+#define PDERR_RETDEFFAILURE 0x1003
+#define PDERR_LOADDRVFAILURE 0x1004
+#define PDERR_GETDEVMODEFAIL 0x1005
+#define PDERR_INITFAILURE 0x1006
+#define PDERR_NODEVICES 0x1007
+#define PDERR_NODEFAULTPRN 0x1008
+#define PDERR_DNDMMISMATCH 0x1009
+#define PDERR_CREATEICFAILURE 0x100A
+#define PDERR_PRINTERNOTFOUND 0x100B
+#define PDERR_DEFAULTDIFFERENT 0x100C
+
+/* Chose font error codes */
+#define CFERR_CHOOSEFONTCODES 0x2000
+#define CFERR_NOFONTS 0x2001
+#define CFERR_MAXLESSTHANMIN 0x2002
+
+/* File{Open,Save} error codes */
+#define FNERR_FILENAMECODES 0x3000
+#define FNERR_SUBCLASSFAILURE 0x3001
+#define FNERR_INVALIDFILENAME 0x3002
+#define FNERR_BUFFERTOOSMALL 0x3003
+
+/* Find/Replace error codes */
+#define FRERR_FINDREPLACECODES 0x4000
+#define FRERR_BUFFERLENGTHZERO 0x4001
+
+/* Choose color error codes */
+#define CCERR_CHOOSECOLORCODES 0x5000
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h
new file mode 100644
index 00000000..a5ecc529
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cfgmgr32.h
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _CFGMGR32_H_
+#define _CFGMGR32_H_
+
+/* FIXME: #include <cfg.h> */
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+/* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_CFGMGR32_TYPE_AW(type) /* nothing */
+#else
+# define DECL_WINELIB_CFGMGR32_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type;
+#endif
+
+#define CMAPI
+typedef DWORD CONFIGRET;
+
+#define CR_SUCCESS 0x00
+#define CR_DEFAULT 0x01
+#define CR_OUT_OF_MEMORY 0x02
+#define CR_INVALID_POINTER 0x03
+#define CR_INVALID_FLAG 0x04
+#define CR_INVALID_DEVNODE 0x05
+#define CR_INVALID_DEVINST CR_INVALID_DEVNODE
+#define CR_INVALID_RES_DES 0x06
+#define CR_INVALID_LOG_CONF 0x07
+#define CR_INVALID_ARBITRATOR 0x08
+#define CR_INVALID_NODELIST 0x09
+#define CR_DEVNODE_HAS_REQS 0x0a
+#define CR_DEVINST_HAS_REQS CR_DEVNODE_HAS_REQS
+#define CR_INVALID_RESOURCEID 0x0b
+#define CR_DLVXD_NOT_FOUND 0x0c
+#define CR_NO_SUCH_DEVNODE 0x0d
+#define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE
+#define CR_NO_MORE_LOG_CONF 0x0e
+#define CR_NO_MORE_RES_DES 0x0f
+#define CR_ALREADY_SUCH_DEVNODE 0x10
+#define CR_ALREADY_SUCH_DEVINST CR_ALREADY_SUCH_DEVNODE
+#define CR_INVALID_RANGE_LIST 0x11
+#define CR_INVALID_RANGE 0x12
+#define CR_FAILURE 0x13
+#define CR_NO_SUCH_LOGICAL_DEV 0x14
+#define CR_CREATE_BLOCKED 0x15
+#define CR_NOT_SYSTEM_VM 0x16
+#define CR_REMOVE_VETOED 0x17
+#define CR_APM_VETOED 0x18
+#define CR_INVALID_LOAD_TYPE 0x19
+#define CR_BUFFER_SMALL 0x1a
+#define CR_NO_ARBITRATOR 0x1b
+#define CR_NO_REGISTRY_HANDLE 0x1c
+#define CR_REGISTRY_ERROR 0x1d
+#define CR_INVALID_DEVICE_ID 0x1e
+#define CR_INVALID_DATA 0x1f
+#define CR_INVALID_API 0x20
+#define CR_DEVLOADER_NOT_READY 0x21
+#define CR_NEED_RESTART 0x22
+#define CR_NO_MORE_HW_PROFILES 0x23
+#define CR_DEVICE_NOT_THERE 0x24
+#define CR_NO_SUCH_VALUE 0x25
+#define CR_WRONG_TYPE 0x26
+#define CR_INVALID_PRIORITY 0x27
+#define CR_NOT_DISABLEABLE 0x28
+#define CR_FREE_RESOURCES 0x29
+#define CR_QUERY_VETOED 0x2a
+#define CR_CANT_SHARE_IRQ 0x2b
+#define CR_NO_DEPENDENT 0x2c
+#define CR_SAME_RESOURCES 0x2d
+#define CR_NO_SUCH_REGISTRY_KEY 0x2e
+#define CR_INVALID_MACHINENAME 0x2f
+#define CR_REMOTE_COMM_FAILURE 0x30
+#define CR_MACHINE_UNAVAILABLE 0x31
+#define CR_NO_CM_SERVICES 0x32
+#define CR_ACCESS_DENIED 0x33
+#define CR_CALL_NOT_IMPLEMENTED 0x34
+#define CR_INVALID_PROPERTY 0x35
+#define CR_DEVICE_INTERFACE_ACTIVE 0x36
+#define CR_NO_SUCH_DEVICE_INTERFACE 0x37
+#define CR_INVALID_REFERENCE_STRING 0x38
+#define CR_INVALID_CONFLICT_LIST 0x39
+#define CR_INVALID_INDEX 0x3a
+#define CR_INVALID_STRUCTURE_SIZE 0x3b
+#define NUM_CR_RESULTS 0x3c
+
+#define MAX_DEVICE_ID_LEN 200
+#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
+
+#define MAX_CLASS_NAME_LEN 32
+#define MAX_GUID_STRING_LEN 39
+#define MAX_PROFILE_LEN 80
+
+#define CM_DRP_DEVICEDESC 0x01
+#define CM_DRP_HARDWAREID 0x02
+#define CM_DRP_COMPATIBLEIDS 0x03
+#define CM_DRP_UNUSED0 0x04
+#define CM_DRP_SERVICE 0x05
+#define CM_DRP_UNUSED1 0x06
+#define CM_DRP_UNUSED2 0x07
+#define CM_DRP_CLASS 0x08
+#define CM_DRP_CLASSGUID 0x09
+#define CM_DRP_DRIVER 0x0A
+#define CM_DRP_CONFIGFLAGS 0x0B
+#define CM_DRP_MFG 0x0C
+#define CM_DRP_FRIENDLYNAME 0x0D
+#define CM_DRP_LOCATION_INFORMATION 0x0E
+#define CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0F
+#define CM_DRP_CAPABILITIES 0x10
+#define CM_DRP_UI_NUMBER 0x11
+#define CM_DRP_UPPERFILTERS 0x12
+#define CM_DRP_LOWERFILTERS 0x13
+#define CM_DRP_BUSTYPEGUID 0x14
+#define CM_DRP_LEGACYBUSTYPE 0x15
+#define CM_DRP_BUSNUMBER 0x16
+#define CM_DRP_ENUMERATOR_NAME 0x17
+#define CM_DRP_SECURITY 0x18
+#define CM_DRP_SECURITY_SDS 0x19
+#define CM_DRP_DEVTYPE 0x1A
+#define CM_DRP_EXCLUSIVE 0x1B
+#define CM_DRP_CHARACTERISTICS 0x1C
+#define CM_DRP_ADDRESS 0x1D
+#define CM_DRP_UI_NUMBER_DESC_FORMAT 0x1E
+#define CM_DRP_DEVICE_POWER_DATA 0x1F
+#define CM_DRP_REMOVAL_POLICY 0x20
+#define CM_DRP_REMOVAL_POLICY_HW_DEFAULT 0x21
+#define CM_DRP_REMOVAL_POLICY_OVERRIDE 0x22
+#define CM_DRP_INSTALL_STATE 0x23
+#define CM_DRP_LOCATION_PATHS 0x24
+#define CM_DRP_BASE_CONTAINERID 0x25
+#define CM_DRP_MIN 0x01
+#define CM_DRP_MAX 0x25
+
+#define CM_CRP_UPPERFILTERS CM_DRP_UPPERFILTERS
+#define CM_CRP_LOWERFILTERS CM_DRP_LOWERFILTERS
+#define CM_CRP_SECURITY CM_DRP_SECURITY
+#define CM_CRP_SECURITY_SDS CM_DRP_SECURITY_SDS
+#define CM_CRP_DEVTYPE CM_DRP_DEVTYPE
+#define CM_CRP_EXCLUSIVE CM_DRP_EXCLUSIVE
+#define CM_CRP_CHARACTERISTICS CM_DRP_CHARACTERISTICS
+#define CM_CRP_MIN CM_DRP_MIN
+#define CM_CRP_MAX CM_DRP_MAX
+
+typedef DWORD DEVINST, *PDEVINST;
+typedef DWORD DEVNODE, *PDEVNODE;
+typedef HANDLE HMACHINE, *PHMACHINE;
+typedef CHAR *DEVNODEID_A, *DEVINSTID_A;
+typedef WCHAR *DEVNODEID_W, *DEVINSTID_W;
+
+DECL_WINELIB_CFGMGR32_TYPE_AW(DEVNODEID)
+DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+CMAPI CONFIGRET WINAPI CM_Connect_MachineA(PCSTR,PHMACHINE);
+CMAPI CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR,PHMACHINE);
+#define CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine)
+CMAPI CONFIGRET WINAPI CM_Create_DevNodeA(PDEVINST,DEVINSTID_A,DEVINST,ULONG);
+CMAPI CONFIGRET WINAPI CM_Create_DevNodeW(PDEVINST,DEVINSTID_W,DEVINST,ULONG);
+#define CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode)
+CMAPI CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Get_Device_IDA(DEVINST,PSTR,ULONG,ULONG);
+CMAPI CONFIGRET WINAPI CM_Get_Device_IDW(DEVINST,PWSTR,ULONG,ULONG);
+#define CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExA(DEVINST,PSTR,ULONG,ULONG,HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ExW(DEVINST,PWSTR,ULONG,ULONG,HMACHINE);
+#define CM_Get_Device_ID_Ex WINELIB_NAME_AW(CM_Get_Device_ID_Ex)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListA(PCSTR,PCHAR,ULONG,ULONG);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_ListW(PCWSTR,PWCHAR,ULONG,ULONG);
+#define CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(PCSTR,PCHAR,ULONG,ULONG,HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(PCWSTR,PWCHAR,ULONG,ULONG,HMACHINE);
+#define CM_Get_Device_ID_List_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Ex)
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size(PULONG,DEVINST,ULONG);
+CMAPI CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(PULONG,DEVINST,ULONG,HMACHINE);
+CMAPI CONFIGRET WINAPI CM_Locate_DevNodeA(PDEVINST,DEVINSTID_A,ULONG);
+CMAPI CONFIGRET WINAPI CM_Locate_DevNodeW(PDEVINST,DEVINSTID_W,ULONG);
+#define CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode)
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef DECL_WINELIB_CFGMGR32_TYPE_AW
+
+#endif /* _CFGMGR32_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h
new file mode 100644
index 00000000..30902bf3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cguid.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2000 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __CGUID_H__
+#define __CGUID_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const IID GUID_NULL;
+extern const IID IID_IRpcChannel;
+extern const IID IID_IRpcStub;
+extern const IID IID_IStubManager;
+extern const IID IID_IRpcProxy;
+extern const IID IID_IProxyManager;
+extern const IID IID_IPSFactory;
+extern const IID IID_IInternalMoniker;
+extern const IID IID_IDfReserved1;
+extern const IID IID_IDfReserved2;
+extern const IID IID_IDfReserved3;
+extern const CLSID CLSID_StdMarshal;
+extern const CLSID CLSID_AggStdMarshal;
+extern const CLSID CLSID_StdAsyncActManager;
+extern const IID IID_IStub;
+extern const IID IID_IProxy;
+extern const IID IID_IEnumGeneric;
+extern const IID IID_IEnumHolder;
+extern const IID IID_IEnumCallback;
+extern const IID IID_IOleManager;
+extern const IID IID_IOlePresObj;
+extern const IID IID_IDebug;
+extern const IID IID_IDebugStream;
+extern const CLSID CLSID_PSGenObject;
+extern const CLSID CLSID_PSClientSite;
+extern const CLSID CLSID_PSClassObject;
+extern const CLSID CLSID_PSInPlaceActive;
+extern const CLSID CLSID_PSInPlaceFrame;
+extern const CLSID CLSID_PSDragDrop;
+extern const CLSID CLSID_PSBindCtx;
+extern const CLSID CLSID_PSEnumerators;
+extern const CLSID CLSID_StaticMetafile;
+extern const CLSID CLSID_StaticDib;
+extern const CLSID CID_CDfsVolume;
+extern const CLSID CLSID_DCOMAccessControl;
+extern const CLSID CLSID_StdGlobalInterfaceTable;
+extern const CLSID CLSID_ComBinding;
+extern const CLSID CLSID_StdEvent;
+extern const CLSID CLSID_ManualResetEvent;
+extern const CLSID CLSID_SynchronizeContainer;
+extern const CLSID CLSID_CCDFormKrnl;
+extern const CLSID CLSID_CCDPropertyPage;
+extern const CLSID CLSID_CCDFormDialog;
+extern const CLSID CLSID_CCDCommandButton;
+extern const CLSID CLSID_CCDComboBox;
+extern const CLSID CLSID_CCDTextBox;
+extern const CLSID CLSID_CCDCheckBox;
+extern const CLSID CLSID_CCDLabel;
+extern const CLSID CLSID_CCDOptionButton;
+extern const CLSID CLSID_CCDListBox;
+extern const CLSID CLSID_CCDScrollBar;
+extern const CLSID CLSID_CCDGroupBox;
+extern const CLSID CLSID_CCDGeneralPropertyPage;
+extern const CLSID CLSID_CCDGenericPropertyPage;
+extern const CLSID CLSID_CCDFontPropertyPage;
+extern const CLSID CLSID_CCDColorPropertyPage;
+extern const CLSID CLSID_CCDLabelPropertyPage;
+extern const CLSID CLSID_CCDCheckBoxPropertyPage;
+extern const CLSID CLSID_CCDTextBoxPropertyPage;
+extern const CLSID CLSID_CCDOptionButtonPropertyPage;
+extern const CLSID CLSID_CCDListBoxPropertyPage;
+extern const CLSID CLSID_CCDCommandButtonPropertyPage;
+extern const CLSID CLSID_CCDComboBoxPropertyPage;
+extern const CLSID CLSID_CCDScrollBarPropertyPage;
+extern const CLSID CLSID_CCDGroupBoxPropertyPage;
+extern const CLSID CLSID_CCDXObjectPropertyPage;
+extern const CLSID CLSID_CStdPropertyFrame;
+extern const CLSID CLSID_CFormPropertyPage;
+extern const CLSID CLSID_CGridPropertyPage;
+extern const CLSID CLSID_CWSJArticlePage;
+extern const CLSID CLSID_CSystemPage;
+extern const CLSID CLSID_IdentityUnmarshal;
+extern const CLSID CLSID_InProcFreeMarshaler;
+extern const CLSID CLSID_Picture_Metafile;
+extern const CLSID CLSID_Picture_EnhMetafile;
+extern const CLSID CLSID_Picture_Dib;
+extern const GUID GUID_TRISTATE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CGUID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl
new file mode 100644
index 00000000..b0654646
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/chprst.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2013 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a93-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IChapteredRowset : IUnknown
+{
+ [local]
+ HRESULT AddRefChapter([in] HCHAPTER chapter,
+ [out] DBREFCOUNT *refcount);
+
+ [call_as(AddRefChapter)]
+ HRESULT RemoteAddRefChapter([in] HCHAPTER chapter,
+ [out] DBREFCOUNT *refcount,
+ [out] IErrorInfo **errorinfo);
+
+ [local]
+ HRESULT ReleaseChapter([in] HCHAPTER chapter,
+ [out] DBREFCOUNT *refcount);
+
+ [call_as(ReleaseChapter)]
+ HRESULT RemoteReleaseChapter([in] HCHAPTER chapter,
+ [out] DBREFCOUNT *refcount,
+ [out] IErrorInfo **errorinfo);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h
new file mode 100644
index 00000000..b0121f27
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cierror.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CIERROR_H__
+#define __WINE_CIERROR_H__
+
+#define CI_E_ALREADY_INITIALIZED 0x8004180a
+#define CI_E_NOT_INITIALIZED 0x8004180b
+#define CI_E_BUFFERTOOSMALL 0x8004180c
+#define CI_E_PROPERTY_NOT_CACHED 0x8004180d
+#define CI_E_INVALID_STATE 0x8004180f
+#define CI_E_FILTERING_DISABLED 0x80041810
+#define CI_E_DISK_FULL 0x80041811
+#define CI_E_SHUTDOWN 0x80041812
+#define CI_E_WORKID_NOTVALID 0x80041813
+#define CI_E_NOT_FOUND 0x80041815
+#define CI_E_USE_DEFAULT_PID 0x80041816
+#define CI_E_DUPLICATE_NOTIFICATION 0x80041817
+#define CI_E_UPDATES_DISABLED 0x80041818
+#define CI_E_INVALID_FLAGS_COMBINATION 0x80041819
+#define CI_E_OUTOFSEQ_INCREMENT_DATA 0x8004181a
+#define CI_E_SHARING_VIOLATION 0x8004181b
+#define CI_E_LOGON_FAILURE 0x8004181c
+#define CI_E_NO_CATALOG 0x8004181d
+#define CI_E_STRANGE_PAGEORSECTOR_SIZE 0x8004181e
+#define CI_E_TIMEOUT 0x8004181f
+#define CI_E_NOT_RUNNING 0x80041820
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h
new file mode 100644
index 00000000..1c8390e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/clusapi.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2006 James Hawkins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CLUSAPI_H
+#define __WINE_CLUSAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _HCLUSTER *HCLUSTER;
+typedef struct _HCLUSENUM *HCLUSENUM;
+
+
+typedef struct _CLUSTERVERSIONINFO
+{
+ DWORD dwVersionInfoSize;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ WORD BuildNumber;
+ WCHAR szVendorId[64];
+ WCHAR szCSDVersion[64];
+ DWORD dwClusterHighestVersion;
+ DWORD dwClusterLowestVersion;
+ DWORD dwFlags;
+ DWORD dwReserved;
+} CLUSTERVERSIONINFO, *LPCLUSTERVERSIONINFO;
+
+BOOL WINAPI CloseCluster(HCLUSTER hCluster);
+DWORD WINAPI GetClusterInformation(HCLUSTER hCluster, LPWSTR lpszClusterName,
+ LPDWORD lpcchClusterName, LPCLUSTERVERSIONINFO lpClusterInfo);
+DWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName, LPDWORD pdwClusterState);
+HCLUSTER WINAPI OpenCluster(LPCWSTR lpszClusterName);
+HCLUSENUM WINAPI ClusterOpenEnum(HCLUSTER hCluster, DWORD dwType);
+DWORD WINAPI ClusterEnum(HCLUSENUM hEnum, DWORD dwIndex, LPDWORD lpdwType, LPWSTR lpszName, LPDWORD lpcchName);
+DWORD WINAPI ClusterCloseEnum(HCLUSENUM hEnum);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_CLUSAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl
new file mode 100644
index 00000000..aba98bc1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdbas.idl
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a63-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ICommand : IUnknown
+{
+ [local]
+ HRESULT Cancel();
+
+ [call_as(Cancel)]
+ HRESULT RemoteCancel([out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT Execute([in, annotation("__in_opt")] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [in, out, annotation("__inout_opt")] DBPARAMS *pParams,
+ [out, annotation("__out_opt")] DBROWCOUNT *pcRowsAffected,
+ [out, iid_is(riid), annotation("__deref_opt_out")] IUnknown **ppRowset);
+
+ [call_as(Execute)]
+ HRESULT RemoteExecute([in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [in] HACCESSOR hAccessor,
+ [in] DB_UPARAMS cParamSets,
+ [in, unique] GUID *pGuid,
+ [in] ULONG ulGuidOffset,
+ [in, unique] RMTPACK *pInputParams,
+ [in, out, unique] RMTPACK *pOutputParams,
+ [in] DBCOUNTITEM cBindings,
+ [in, unique, size_is((ULONG)cBindings)] DBBINDING *rgBindings,
+ [in, out, unique, size_is((ULONG)cBindings)] DBSTATUS *rgStatus,
+ [in, out, unique] DBROWCOUNT *pcRowsAffected,
+ [in, out, unique, iid_is(riid)] IUnknown **ppRowset);
+
+ [local]
+ HRESULT GetDBSession([in] REFIID riid,
+ [out, iid_is(riid), annotation("__deref_out_opt")] IUnknown **ppSession);
+
+ [call_as(GetDBSession)]
+ HRESULT RemoteGetDBSession([in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppSession,
+ [out] IErrorInfo **ppErrorInfoRem);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl
new file mode 100644
index 00000000..37e3e994
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cmdtxt.idl
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a27-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ICommandText : ICommand
+{
+ [local]
+ HRESULT GetCommandText([in, out /*, annotation("__inout_opt")*/] GUID *pguidDialect,
+ [out /*, annotation("__deref_out")*/] LPOLESTR *ppwszCommand);
+
+ [call_as(GetCommandText)]
+ HRESULT RemoteGetCommandText([in, out, unique] GUID *pguidDialect,
+ [out] LPOLESTR *ppwszCommand,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT SetCommandText([in] REFGUID rguidDialect,
+ [in, unique /*, annotation("__in_z_opt")*/] LPCOLESTR pwszCommand);
+
+ [call_as(SetCommandText)]
+ HRESULT RemoteSetCommandText([in] REFGUID rguidDialect,
+ [in, unique] LPCOLESTR pwszCommand,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl
new file mode 100644
index 00000000..23f20c35
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/comcat.idl
@@ -0,0 +1,241 @@
+/*
+ * Copyright 2002 John K. Hohm
+ * Copyright 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+/*****************************************************************************
+ * Types
+ */
+typedef GUID CATID;
+typedef REFGUID REFCATID;
+cpp_quote("#define CATID_NULL GUID_NULL")
+cpp_quote("#define IsEqualCATID(rcatid1, rcatid2) IsEqualGUID(rcatid1, rcatid2)")
+
+/*****************************************************************************
+ * Aliases for EnumGUID
+ */
+#define IEnumCATID IEnumGUID
+cpp_quote("#define IEnumCATID IEnumGUID")
+cpp_quote("#define IID_IEnumCATID IID_IEnumGUID")
+cpp_quote("#define LPENUMCATID LPENUMGUID")
+#define IEnumCLSID IEnumGUID
+cpp_quote("#define IEnumCLSID IEnumGUID")
+cpp_quote("#define IID_IEnumCLSID IID_IEnumGUID")
+cpp_quote("#define LPENUMCLSID LPENUMGUID")
+
+
+/*****************************************************************************
+ * IEnumGUID
+ */
+[
+ object,
+ uuid(0002e000-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumGUID : IUnknown
+{
+ typedef [unique] IEnumGUID *LPENUMGUID;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumGUID **ppenum);
+}
+
+
+/*****************************************************************************
+ * IEnumCATEGORYINFO
+ */
+[
+ object,
+ uuid(0002e011-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumCATEGORYINFO : IUnknown
+{
+ typedef [unique] IEnumCATEGORYINFO *LPENUMCATEGORYINFO;
+
+ typedef struct tagCATEGORYINFO
+ {
+ CATID catid; /* category identifier for component */
+ LCID lcid; /* locale identifier */
+ OLECHAR szDescription[128]; /* description of the category */
+ } CATEGORYINFO, *LPCATEGORYINFO;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] CATEGORYINFO* rgelt,
+ [out] ULONG* pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumCATEGORYINFO** ppenum);
+}
+
+
+/*****************************************************************************
+ * ICatInformation
+ */
+[
+ object,
+ uuid(0002e013-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface ICatInformation : IUnknown
+{
+ typedef [unique] ICatInformation* LPCATINFORMATION;
+
+ HRESULT EnumCategories(
+ [in] LCID lcid,
+ [out] IEnumCATEGORYINFO** ppenumCategoryInfo);
+
+ HRESULT GetCategoryDesc(
+ [in] REFCATID rcatid,
+ [in] LCID lcid,
+ [out] LPWSTR* pszDesc);
+
+ [local]
+ HRESULT EnumClassesOfCategories(
+ [in] ULONG cImplemented,
+ [in,size_is(cImplemented)] CATID rgcatidImpl[],
+ [in] ULONG cRequired,
+ [in,size_is(cRequired)] CATID rgcatidReq[],
+ [out] IEnumCLSID** ppenumClsid);
+
+ [call_as(EnumClassesOfCategories)]
+ HRESULT RemoteEnumClassesOfCategories(
+ [in] ULONG cImplemented,
+ [in,unique,size_is(cImplemented)] CATID rgcatidImpl[],
+ [in] ULONG cRequired,
+ [in,unique,size_is(cRequired)] CATID rgcatidReq[],
+ [out] IEnumCLSID** ppenumClsid);
+
+ [local]
+ HRESULT IsClassOfCategories(
+ [in] REFCLSID rclsid,
+ [in] ULONG cImplemented,
+ [in,size_is(cImplemented)] CATID rgcatidImpl[],
+ [in] ULONG cRequired,
+ [in,size_is(cRequired)] CATID rgcatidReq[]);
+
+ [call_as(IsClassOfCategories)]
+ HRESULT RemoteIsClassOfCategories(
+ [in] REFCLSID rclsid,
+ [in] ULONG cImplemented,
+ [in,unique,size_is(cImplemented)] CATID rgcatidImpl[],
+ [in] ULONG cRequired,
+ [in,unique,size_is(cRequired)] CATID rgcatidReq[] );
+
+ HRESULT EnumImplCategoriesOfClass(
+ [in] REFCLSID rclsid,
+ [out] IEnumCATID** ppenumCatid);
+
+ HRESULT EnumReqCategoriesOfClass(
+ [in] REFCLSID rclsid,
+ [out] IEnumCATID** ppenumCatid);
+}
+
+
+/*****************************************************************************
+ * ICatRegister
+ */
+[
+ object,
+ uuid(0002e012-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface ICatRegister : IUnknown
+{
+ typedef [unique] ICatRegister* LPCATREGISTER;
+
+ HRESULT RegisterCategories(
+ [in] ULONG cCategories,
+ [in, size_is(cCategories)] CATEGORYINFO rgCategoryInfo[]);
+
+ HRESULT UnRegisterCategories(
+ [in] ULONG cCategories,
+ [in, size_is(cCategories)] CATID rgcatid[]);
+
+ HRESULT RegisterClassImplCategories(
+ [in] REFCLSID rclsid,
+ [in] ULONG cCategories,
+ [in, size_is(cCategories)] CATID rgcatid[]);
+
+ HRESULT UnRegisterClassImplCategories(
+ [in] REFCLSID rclsid,
+ [in] ULONG cCategories,
+ [in, size_is(cCategories)] CATID rgcatid[]);
+
+ HRESULT RegisterClassReqCategories(
+ [in] REFCLSID rclsid,
+ [in] ULONG cCategories,
+ [in, size_is(cCategories)] CATID rgcatid[]);
+
+ HRESULT UnRegisterClassReqCategories(
+ [in] REFCLSID rclsid,
+ [in] ULONG cCategories,
+ [in, size_is(cCategories)] CATID rgcatid[]);
+}
+
+
+/*****************************************************************************
+ * Category IDs
+ */
+cpp_quote("DEFINE_GUID( CATID_Insertable, 0x40fc6ed3, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_Control, 0x40fc6ed4, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_Programmable, 0x40fc6ed5, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_IsShortcut, 0x40fc6ed6, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_NeverShowExt, 0x40fc6ed7, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_DocObject, 0x40fc6ed8, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_Printable, 0x40fc6ed9, 0x2438, 0x11cf, 0xa3, 0xdb, 0x08, 0x00, 0x36, 0xf1, 0x25, 0x02);")
+cpp_quote("DEFINE_GUID( CATID_RequiresDataPathHost, 0x0de86a50, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToMoniker, 0x0de86a51, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToStorage, 0x0de86a52, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToStreamInit, 0x0de86a53, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToStream, 0x0de86a54, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToMemory, 0x0de86a55, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToFile, 0x0de86a56, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_PersistsToPropertyBag, 0x0de86a57, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_InternetAware, 0x0de86a58, 0x2baa, 0x11cf, 0xa2, 0x29, 0x00, 0xaa, 0x00, 0x3d, 0x73, 0x52);")
+cpp_quote("DEFINE_GUID( CATID_DesignTimeUIActivatableControl, 0xf2bb56d1, 0xdb07, 0x11d1, 0xaa, 0x6b, 0x00, 0x60, 0x97, 0xdb, 0x95, 0x39);")
+/* The Component Category Manager */
+cpp_quote("DEFINE_GUID(CLSID_StdComponentCategoriesMgr, 0x0002e005, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h
new file mode 100644
index 00000000..790889f3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.h
@@ -0,0 +1,5183 @@
+/*
+ * Common controls definitions
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_COMMCTRL_H
+#define __WINE_COMMCTRL_H
+
+#include <prsht.h>
+#include <commctrl.rh>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI ShowHideMenuCtl (HWND, UINT_PTR, LPINT);
+VOID WINAPI GetEffectiveClientRect (HWND, LPRECT, const INT*);
+VOID WINAPI InitCommonControls (VOID);
+
+typedef struct tagINITCOMMONCONTROLSEX {
+ DWORD dwSize;
+ DWORD dwICC;
+} INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;
+
+BOOL WINAPI InitCommonControlsEx (const INITCOMMONCONTROLSEX*);
+
+LANGID WINAPI GetMUILanguage (VOID);
+VOID WINAPI InitMUILanguage (LANGID uiLang);
+
+
+#define COMCTL32_VERSION 5 /* dll version */
+
+#ifndef _WIN32_IE
+#define _WIN32_IE 0x0400
+#endif
+
+#define ICC_LISTVIEW_CLASSES 0x00000001 /* listview, header */
+#define ICC_TREEVIEW_CLASSES 0x00000002 /* treeview, tooltips */
+#define ICC_BAR_CLASSES 0x00000004 /* toolbar, statusbar, trackbar, tooltips */
+#define ICC_TAB_CLASSES 0x00000008 /* tab, tooltips */
+#define ICC_UPDOWN_CLASS 0x00000010 /* updown */
+#define ICC_PROGRESS_CLASS 0x00000020 /* progress */
+#define ICC_HOTKEY_CLASS 0x00000040 /* hotkey */
+#define ICC_ANIMATE_CLASS 0x00000080 /* animate */
+#define ICC_WIN95_CLASSES 0x000000FF
+#define ICC_DATE_CLASSES 0x00000100 /* month picker, date picker, time picker, updown */
+#define ICC_USEREX_CLASSES 0x00000200 /* comboex */
+#define ICC_COOL_CLASSES 0x00000400 /* rebar (coolbar) */
+#define ICC_INTERNET_CLASSES 0x00000800 /* IP address, ... */
+#define ICC_PAGESCROLLER_CLASS 0x00001000 /* page scroller */
+#define ICC_NATIVEFNTCTL_CLASS 0x00002000 /* native font control ???*/
+#define ICC_STANDARD_CLASSES 0x00004000
+#define ICC_LINK_CLASS 0x00008000
+
+
+/* common control shared messages */
+#define CCM_FIRST 0x2000
+
+#define CCM_SETBKCOLOR (CCM_FIRST+0x1) /* lParam = bkColor */
+#define CCM_SETCOLORSCHEME (CCM_FIRST+0x2) /* lParam = COLORSCHEME struct ptr */
+#define CCM_GETCOLORSCHEME (CCM_FIRST+0x3) /* lParam = COLORSCHEME struct ptr */
+#define CCM_GETDROPTARGET (CCM_FIRST+0x4)
+#define CCM_SETUNICODEFORMAT (CCM_FIRST+0x5)
+#define CCM_GETUNICODEFORMAT (CCM_FIRST+0x6)
+#define CCM_SETVERSION (CCM_FIRST+0x7)
+#define CCM_GETVERSION (CCM_FIRST+0x8)
+#define CCM_SETNOTIFYWINDOW (CCM_FIRST+0x9) /* wParam = hwndParent */
+#define CCM_SETWINDOWTHEME (CCM_FIRST+0xb)
+#define CCM_DPISCALE (CCM_FIRST+0xc)
+
+
+/* common notification codes (WM_NOTIFY)*/
+#define NM_FIRST (0U- 0U)
+#define NM_LAST (0U- 99U)
+#define NM_OUTOFMEMORY (NM_FIRST-1)
+#define NM_CLICK (NM_FIRST-2)
+#define NM_DBLCLK (NM_FIRST-3)
+#define NM_RETURN (NM_FIRST-4)
+#define NM_RCLICK (NM_FIRST-5)
+#define NM_RDBLCLK (NM_FIRST-6)
+#define NM_SETFOCUS (NM_FIRST-7)
+#define NM_KILLFOCUS (NM_FIRST-8)
+#define NM_CUSTOMDRAW (NM_FIRST-12)
+#define NM_HOVER (NM_FIRST-13)
+#define NM_NCHITTEST (NM_FIRST-14)
+#define NM_KEYDOWN (NM_FIRST-15)
+#define NM_RELEASEDCAPTURE (NM_FIRST-16)
+#define NM_SETCURSOR (NM_FIRST-17)
+#define NM_CHAR (NM_FIRST-18)
+#define NM_TOOLTIPSCREATED (NM_FIRST-19)
+#define NM_LDOWN (NM_FIRST-20)
+#define NM_RDOWN (NM_FIRST-21)
+#define NM_THEMECHANGED (NM_FIRST-22)
+#define NM_FONTCHANGED (NM_FIRST-23)
+#define NM_CUSTOMTEXT (NM_FIRST-24)
+#define NM_TVSTATEIMAGECHANGING (NM_FIRST-24)
+
+#define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \
+ (fn)((hwnd), (int)(wParam), (NMHDR*)(lParam))
+#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) \
+ (LRESULT)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(idFrom), (LPARAM)(NMHDR*)(pnmhdr))
+
+
+/* callback constants */
+#define LPSTR_TEXTCALLBACKA ((LPSTR)-1)
+#define LPSTR_TEXTCALLBACKW ((LPWSTR)-1)
+#define LPSTR_TEXTCALLBACK WINELIB_NAME_AW(LPSTR_TEXTCALLBACK)
+
+#define I_IMAGECALLBACK (-1)
+#define I_IMAGENONE (-2)
+#define I_INDENTCALLBACK (-1)
+#define I_CHILDRENCALLBACK (-1)
+#define I_GROUPIDCALLBACK (-1)
+#define I_GROUPIDNONE (-2)
+#define I_COLUMNSCALLBACK ((UINT)-1)
+
+/* owner drawn types */
+#define ODT_HEADER 100
+#define ODT_TAB 101
+#define ODT_LISTVIEW 102
+
+/* common notification structures */
+typedef struct tagNMTOOLTIPSCREATED
+{
+ NMHDR hdr;
+ HWND hwndToolTips;
+} NMTOOLTIPSCREATED, *LPNMTOOLTIPSCREATED;
+
+typedef struct tagNMMOUSE
+{
+ NMHDR hdr;
+ DWORD_PTR dwItemSpec;
+ DWORD_PTR dwItemData;
+ POINT pt;
+ DWORD dwHitInfo; /* info where on item or control the mouse is */
+} NMMOUSE, *LPNMMOUSE;
+
+typedef struct tagNMOBJECTNOTIFY
+{
+ NMHDR hdr;
+ int iItem;
+#ifdef __IID_DEFINED__
+ const IID *piid;
+#else
+ const void *piid;
+#endif
+ void *pObject;
+ HRESULT hResult;
+ DWORD dwFlags;
+} NMOBJECTNOTIFY, *LPNMOBJECTNOTIFY;
+
+typedef struct tagNMKEY
+{
+ NMHDR hdr;
+ UINT nVKey;
+ UINT uFlags;
+} NMKEY, *LPNMKEY;
+
+typedef struct tagNMCHAR
+{
+ NMHDR hdr;
+ UINT ch;
+ DWORD dwItemPrev; /* Item previously selected */
+ DWORD dwItemNext; /* Item to be selected */
+} NMCHAR, *LPNMCHAR;
+
+#ifndef CCSIZEOF_STRUCT
+#define CCSIZEOF_STRUCT(name, member) \
+ (((INT)((LPBYTE)(&((name*)0)->member)-((LPBYTE)((name*)0))))+ \
+ sizeof(((name*)0)->member))
+#endif
+
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else /* __cplusplus */
+#define SNDMSG SendMessage
+#endif /* __cplusplus */
+#endif /* SNDMSG */
+
+
+#ifdef __cplusplus
+#define SNDMSGA ::SendMessageA
+#define SNDMSGW ::SendMessageW
+#else
+#define SNDMSGA SendMessageA
+#define SNDMSGW SendMessageW
+#endif
+
+/* Custom Draw messages */
+
+#define CDRF_DODEFAULT 0x0
+#define CDRF_NEWFONT 0x00000002
+#define CDRF_SKIPDEFAULT 0x00000004
+#define CDRF_NOTIFYPOSTPAINT 0x00000010
+#define CDRF_NOTIFYITEMDRAW 0x00000020
+#define CDRF_NOTIFYSUBITEMDRAW 0x00000020
+#define CDRF_NOTIFYPOSTERASE 0x00000040
+#define CDRF_NOTIFYITEMERASE 0x00000080 /* obsolete ??? */
+
+
+/* drawstage flags */
+
+#define CDDS_PREPAINT 1
+#define CDDS_POSTPAINT 2
+#define CDDS_PREERASE 3
+#define CDDS_POSTERASE 4
+
+#define CDDS_ITEM 0x00010000
+#define CDDS_ITEMPREPAINT (CDDS_ITEM | CDDS_PREPAINT)
+#define CDDS_ITEMPOSTPAINT (CDDS_ITEM | CDDS_POSTPAINT)
+#define CDDS_ITEMPREERASE (CDDS_ITEM | CDDS_PREERASE)
+#define CDDS_ITEMPOSTERASE (CDDS_ITEM | CDDS_POSTERASE)
+#define CDDS_SUBITEM 0x00020000
+
+/* itemState flags */
+
+#define CDIS_SELECTED 0x0001
+#define CDIS_GRAYED 0x0002
+#define CDIS_DISABLED 0x0004
+#define CDIS_CHECKED 0x0008
+#define CDIS_FOCUS 0x0010
+#define CDIS_DEFAULT 0x0020
+#define CDIS_HOT 0x0040
+#define CDIS_MARKED 0x0080
+#define CDIS_INDETERMINATE 0x0100
+#define CDIS_SHOWKEYBOARDCUES 0x0200
+#define CDIS_NEARHOT 0x0400
+#define CDIS_OTHERSIDEHOT 0x0800
+#define CDIS_DROPHILITED 0x1000
+
+
+typedef struct tagNMCUSTOMDRAWINFO
+{
+ NMHDR hdr;
+ DWORD dwDrawStage;
+ HDC hdc;
+ RECT rc;
+ DWORD_PTR dwItemSpec;
+ UINT uItemState;
+ LPARAM lItemlParam;
+} NMCUSTOMDRAW, *LPNMCUSTOMDRAW;
+
+typedef struct tagNMTTCUSTOMDRAW
+{
+ NMCUSTOMDRAW nmcd;
+ UINT uDrawFlags;
+} NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;
+
+
+
+
+/* StatusWindow */
+
+#define STATUSCLASSNAMEA "msctls_statusbar32"
+#if defined(__GNUC__)
+# define STATUSCLASSNAMEW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+ 's','t','a','t','u','s','b','a','r','3','2',0 }
+#elif defined(_MSC_VER)
+# define STATUSCLASSNAMEW L"msctls_statusbar32"
+#else
+static const WCHAR STATUSCLASSNAMEW[] = { 'm','s','c','t','l','s','_',
+ 's','t','a','t','u','s','b','a','r','3','2',0 };
+#endif
+#define STATUSCLASSNAME WINELIB_NAME_AW(STATUSCLASSNAME)
+
+#define SBT_NOBORDERS 0x0100
+#define SBT_POPOUT 0x0200
+#define SBT_RTLREADING 0x0400 /* not supported */
+#define SBT_OWNERDRAW 0x1000
+
+#define SB_SIMPLEID 0x00ff
+
+#define SB_SETTEXTA (WM_USER+1)
+#define SB_SETTEXTW (WM_USER+11)
+#define SB_SETTEXT WINELIB_NAME_AW(SB_SETTEXT)
+#define SB_GETTEXTA (WM_USER+2)
+#define SB_GETTEXTW (WM_USER+13)
+#define SB_GETTEXT WINELIB_NAME_AW(SB_GETTEXT)
+#define SB_GETTEXTLENGTHA (WM_USER+3)
+#define SB_GETTEXTLENGTHW (WM_USER+12)
+#define SB_GETTEXTLENGTH WINELIB_NAME_AW(SB_GETTEXTLENGTH)
+#define SB_SETPARTS (WM_USER+4)
+#define SB_SETBORDERS (WM_USER+5)
+#define SB_GETPARTS (WM_USER+6)
+#define SB_GETBORDERS (WM_USER+7)
+#define SB_SETMINHEIGHT (WM_USER+8)
+#define SB_SIMPLE (WM_USER+9)
+#define SB_GETRECT (WM_USER+10)
+#define SB_ISSIMPLE (WM_USER+14)
+#define SB_SETICON (WM_USER+15)
+#define SB_SETTIPTEXTA (WM_USER+16)
+#define SB_SETTIPTEXTW (WM_USER+17)
+#define SB_SETTIPTEXT WINELIB_NAME_AW(SB_SETTIPTEXT)
+#define SB_GETTIPTEXTA (WM_USER+18)
+#define SB_GETTIPTEXTW (WM_USER+19)
+#define SB_GETTIPTEXT WINELIB_NAME_AW(SB_GETTIPTEXT)
+#define SB_GETICON (WM_USER+20)
+#define SB_SETBKCOLOR CCM_SETBKCOLOR /* lParam = bkColor */
+#define SB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define SB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+
+#define SBN_FIRST (0U-880U)
+#define SBN_LAST (0U-899U)
+#define SBN_SIMPLEMODECHANGE (SBN_FIRST-0)
+
+HWND WINAPI CreateStatusWindowA (LONG, LPCSTR, HWND, UINT);
+HWND WINAPI CreateStatusWindowW (LONG, LPCWSTR, HWND, UINT);
+#define CreateStatusWindow WINELIB_NAME_AW(CreateStatusWindow)
+VOID WINAPI DrawStatusTextA (HDC, LPCRECT, LPCSTR, UINT);
+VOID WINAPI DrawStatusTextW (HDC, LPCRECT, LPCWSTR, UINT);
+#define DrawStatusText WINELIB_NAME_AW(DrawStatusText)
+VOID WINAPI MenuHelp (UINT, WPARAM, LPARAM, HMENU,
+ HINSTANCE, HWND, UINT*);
+
+typedef struct tagCOLORSCHEME
+{
+ DWORD dwSize;
+ COLORREF clrBtnHighlight; /* highlight color */
+ COLORREF clrBtnShadow; /* shadow color */
+} COLORSCHEME, *LPCOLORSCHEME;
+
+/**************************************************************************
+ * Drag List control
+ */
+
+typedef struct tagDRAGLISTINFO
+{
+ UINT uNotification;
+ HWND hWnd;
+ POINT ptCursor;
+} DRAGLISTINFO, *LPDRAGLISTINFO;
+
+#define DL_BEGINDRAG (WM_USER+133)
+#define DL_DRAGGING (WM_USER+134)
+#define DL_DROPPED (WM_USER+135)
+#define DL_CANCELDRAG (WM_USER+136)
+
+#define DL_CURSORSET 0
+#define DL_STOPCURSOR 1
+#define DL_COPYCURSOR 2
+#define DL_MOVECURSOR 3
+
+#define DRAGLISTMSGSTRINGA "commctrl_DragListMsg"
+#if defined(__GNUC__)
+# define DRAGLISTMSGSTRINGW (const WCHAR []){ 'c','o','m','m','c','t','r','l', \
+ '_','D','r','a','g','L','i','s','t','M','s','g',0 }
+#elif defined(_MSC_VER)
+# define DRAGLISTMSGSTRINGW L"commctrl_DragListMsg"
+#else
+static const WCHAR DRAGLISTMSGSTRINGW[] = { 'c','o','m','m','c','t','r','l',
+ '_','D','r','a','g','L','i','s','t','M','s','g',0 };
+#endif
+#define DRAGLISTMSGSTRING WINELIB_NAME_AW(DRAGLISTMSGSTRING)
+
+BOOL WINAPI MakeDragList (HWND);
+VOID WINAPI DrawInsert (HWND, HWND, INT);
+INT WINAPI LBItemFromPt (HWND, POINT, BOOL);
+
+
+/* UpDown */
+
+#define UPDOWN_CLASSA "msctls_updown32"
+#if defined(__GNUC__)
+# define UPDOWN_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+ 'u','p','d','o','w','n','3','2',0 }
+#elif defined(_MSC_VER)
+# define UPDOWN_CLASSW L"msctls_updown32"
+#else
+static const WCHAR UPDOWN_CLASSW[] = { 'm','s','c','t','l','s','_',
+ 'u','p','d','o','w','n','3','2',0 };
+#endif
+#define UPDOWN_CLASS WINELIB_NAME_AW(UPDOWN_CLASS)
+
+typedef struct _UDACCEL
+{
+ UINT nSec;
+ UINT nInc;
+} UDACCEL, *LPUDACCEL;
+
+#define UD_MAXVAL 0x7fff
+#define UD_MINVAL 0x8001
+
+
+#define UDN_FIRST (0U-721)
+#define UDN_LAST (0U-740)
+#define UDN_DELTAPOS (UDN_FIRST-1)
+
+#define UDM_SETRANGE (WM_USER+101)
+#define UDM_GETRANGE (WM_USER+102)
+#define UDM_SETPOS (WM_USER+103)
+#define UDM_GETPOS (WM_USER+104)
+#define UDM_SETBUDDY (WM_USER+105)
+#define UDM_GETBUDDY (WM_USER+106)
+#define UDM_SETACCEL (WM_USER+107)
+#define UDM_GETACCEL (WM_USER+108)
+#define UDM_SETBASE (WM_USER+109)
+#define UDM_GETBASE (WM_USER+110)
+#define UDM_SETRANGE32 (WM_USER+111)
+#define UDM_GETRANGE32 (WM_USER+112)
+#define UDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define UDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define UDM_SETPOS32 (WM_USER+113)
+#define UDM_GETPOS32 (WM_USER+114)
+
+
+#define NMUPDOWN NM_UPDOWN
+#define LPNMUPDOWN LPNM_UPDOWN
+
+typedef struct tagNM_UPDOWN
+{
+ NMHDR hdr;
+ int iPos;
+ int iDelta;
+} NM_UPDOWN, *LPNM_UPDOWN;
+
+HWND WINAPI CreateUpDownControl (DWORD, INT, INT, INT, INT,
+ HWND, INT, HINSTANCE, HWND,
+ INT, INT, INT);
+
+/* Progress Bar */
+
+#define PROGRESS_CLASSA "msctls_progress32"
+#if defined(__GNUC__)
+# define PROGRESS_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+ 'p','r','o','g','r','e','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define PROGRESS_CLASSW L"msctls_progress32"
+#else
+static const WCHAR PROGRESS_CLASSW[] = { 'm','s','c','t','l','s','_',
+ 'p','r','o','g','r','e','s','s','3','2',0 };
+#endif
+#define PROGRESS_CLASS WINELIB_NAME_AW(PROGRESS_CLASS)
+
+#define PBM_SETRANGE (WM_USER+1)
+#define PBM_SETPOS (WM_USER+2)
+#define PBM_DELTAPOS (WM_USER+3)
+#define PBM_SETSTEP (WM_USER+4)
+#define PBM_STEPIT (WM_USER+5)
+#define PBM_SETRANGE32 (WM_USER+6)
+#define PBM_GETRANGE (WM_USER+7)
+#define PBM_GETPOS (WM_USER+8)
+#define PBM_SETBARCOLOR (WM_USER+9)
+#define PBM_SETMARQUEE (WM_USER+10)
+#define PBM_GETSTEP (WM_USER+13)
+#define PBM_GETBKCOLOR (WM_USER+14)
+#define PBM_GETBARCOLOR (WM_USER+15)
+#define PBM_SETSTATE (WM_USER+16)
+#define PBM_GETSTATE (WM_USER+17)
+#define PBM_SETBKCOLOR CCM_SETBKCOLOR
+
+
+#define PBST_NORMAL 1
+#define PBST_ERROR 2
+#define PBST_PAUSED 3
+
+typedef struct
+{
+ INT iLow;
+ INT iHigh;
+} PBRANGE, *PPBRANGE;
+
+
+/* ImageList */
+
+struct _IMAGELIST;
+typedef struct _IMAGELIST *HIMAGELIST;
+
+#define CLR_NONE 0xFFFFFFFF
+#define CLR_DEFAULT 0xFF000000
+#define CLR_HILIGHT CLR_DEFAULT
+
+#define ILC_MASK 0x0001
+#define ILC_COLOR 0x0000
+#define ILC_COLORDDB 0x00FE
+#define ILC_COLOR4 0x0004
+#define ILC_COLOR8 0x0008
+#define ILC_COLOR16 0x0010
+#define ILC_COLOR24 0x0018
+#define ILC_COLOR32 0x0020
+#define ILC_PALETTE 0x0800 /* no longer supported by M$ */
+#define ILC_MIRROR 0x2000
+#define ILC_PERITEMMIRROR 0x8000
+
+#define ILD_NORMAL 0x0000
+#define ILD_TRANSPARENT 0x0001
+#define ILD_BLEND25 0x0002
+#define ILD_BLEND50 0x0004
+#define ILD_MASK 0x0010
+#define ILD_IMAGE 0x0020
+#define ILD_ROP 0x0040
+#define ILD_OVERLAYMASK 0x0F00
+#define ILD_PRESERVEALPHA 0x1000
+#define ILD_SCALE 0x2000
+#define ILD_DPISCALE 0x4000
+#define ILD_ASYNC 0x8000
+
+#define ILD_SELECTED ILD_BLEND50
+#define ILD_FOCUS ILD_BLEND25
+#define ILD_BLEND ILD_BLEND50
+
+#define INDEXTOOVERLAYMASK(i) ((i)<<8)
+#define INDEXTOSTATEIMAGEMASK(i) ((i)<<12)
+
+#define ILCF_MOVE (0x00000000)
+#define ILCF_SWAP (0x00000001)
+
+#define ILGT_NORMAL 0x0000
+#define ILGT_ASYNC 0x0001
+
+#define ILS_NORMAL 0x0000
+#define ILS_GLOW 0x0001
+#define ILS_SHADOW 0x0002
+#define ILS_SATURATE 0x0004
+#define ILS_ALPHA 0x0008
+
+typedef struct _IMAGEINFO
+{
+ HBITMAP hbmImage;
+ HBITMAP hbmMask;
+ INT Unused1;
+ INT Unused2;
+ RECT rcImage;
+} IMAGEINFO, *LPIMAGEINFO;
+
+
+typedef struct _IMAGELISTDRAWPARAMS
+{
+ DWORD cbSize;
+ HIMAGELIST himl;
+ INT i;
+ HDC hdcDst;
+ INT x;
+ INT y;
+ INT cx;
+ INT cy;
+ INT xBitmap; /* x offset from the upperleft of bitmap */
+ INT yBitmap; /* y offset from the upperleft of bitmap */
+ COLORREF rgbBk;
+ COLORREF rgbFg;
+ UINT fStyle;
+ DWORD dwRop;
+ DWORD fState;
+ DWORD Frame;
+ COLORREF crEffect;
+} IMAGELISTDRAWPARAMS, *LPIMAGELISTDRAWPARAMS;
+
+#define IMAGELISTDRAWPARAMS_V3_SIZE CCSIZEOF_STRUCT(IMAGELISTDRAWPARAMS, dwRop)
+
+HRESULT WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **);
+INT WINAPI ImageList_Add(HIMAGELIST,HBITMAP,HBITMAP);
+INT WINAPI ImageList_AddMasked(HIMAGELIST,HBITMAP,COLORREF);
+BOOL WINAPI ImageList_BeginDrag(HIMAGELIST,INT,INT,INT);
+BOOL WINAPI ImageList_Copy(HIMAGELIST,INT,HIMAGELIST,INT,UINT);
+HIMAGELIST WINAPI ImageList_Create(INT,INT,UINT,INT,INT);
+BOOL WINAPI ImageList_Destroy(HIMAGELIST);
+BOOL WINAPI ImageList_DragEnter(HWND,INT,INT);
+BOOL WINAPI ImageList_DragLeave(HWND);
+BOOL WINAPI ImageList_DragMove(INT,INT);
+BOOL WINAPI ImageList_DragShowNolock (BOOL);
+BOOL WINAPI ImageList_Draw(HIMAGELIST,INT,HDC,INT,INT,UINT);
+BOOL WINAPI ImageList_DrawEx(HIMAGELIST,INT,HDC,INT,INT,INT,
+ INT,COLORREF,COLORREF,UINT);
+BOOL WINAPI ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*);
+HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST);
+VOID WINAPI ImageList_EndDrag(VOID);
+COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST);
+HIMAGELIST WINAPI ImageList_GetDragImage(POINT*,POINT*);
+HICON WINAPI ImageList_GetIcon(HIMAGELIST,INT,UINT);
+BOOL WINAPI ImageList_GetIconSize(HIMAGELIST,INT*,INT*);
+INT WINAPI ImageList_GetImageCount(HIMAGELIST);
+BOOL WINAPI ImageList_GetImageInfo(HIMAGELIST,INT,IMAGEINFO*);
+BOOL WINAPI ImageList_GetImageRect(HIMAGELIST,INT,LPRECT);
+HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE,LPCSTR,INT,INT,
+ COLORREF,UINT,UINT);
+HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE,LPCWSTR,INT,INT,
+ COLORREF,UINT,UINT);
+#define ImageList_LoadImage WINELIB_NAME_AW(ImageList_LoadImage)
+HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST,INT,HIMAGELIST,INT,INT,INT);
+BOOL WINAPI ImageList_Remove(HIMAGELIST,INT);
+BOOL WINAPI ImageList_Replace(HIMAGELIST,INT,HBITMAP,HBITMAP);
+INT WINAPI ImageList_ReplaceIcon(HIMAGELIST,INT,HICON);
+COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST,COLORREF);
+BOOL WINAPI ImageList_SetDragCursorImage(HIMAGELIST,INT,INT,INT);
+
+BOOL WINAPI ImageList_SetIconSize(HIMAGELIST,INT,INT);
+BOOL WINAPI ImageList_SetImageCount(HIMAGELIST,UINT);
+BOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST,INT,INT);
+
+#ifdef __IStream_INTERFACE_DEFINED__
+HIMAGELIST WINAPI ImageList_Read(LPSTREAM);
+BOOL WINAPI ImageList_Write(HIMAGELIST, LPSTREAM);
+#endif
+
+#define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon)
+#define ImageList_ExtractIcon(hi,himl,i) ImageList_GetIcon(himl,i,0)
+#define ImageList_LoadBitmap(hi,lpbmp,cx,cGrow,crMask) \
+ ImageList_LoadImage(hi,lpbmp,cx,cGrow,crMask,IMAGE_BITMAP,0)
+#define ImageList_RemoveAll(himl) ImageList_Remove(himl,-1)
+
+
+#ifndef WM_MOUSEHOVER
+#define WM_MOUSEHOVER 0x02A1
+#define WM_MOUSELEAVE 0x02A3
+#endif
+
+#ifndef TME_HOVER
+
+#define TME_HOVER 0x00000001
+#define TME_LEAVE 0x00000002
+#define TME_NONCLIENT 0x00000010
+#define TME_QUERY 0x40000000
+#define TME_CANCEL 0x80000000
+
+
+#define HOVER_DEFAULT 0xFFFFFFFF
+
+typedef struct tagTRACKMOUSEEVENT {
+ DWORD cbSize;
+ DWORD dwFlags;
+ HWND hwndTrack;
+ DWORD dwHoverTime;
+} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
+
+#endif
+
+BOOL WINAPI _TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
+
+/* Flat Scrollbar control */
+
+#define FLATSB_CLASSA "flatsb_class32"
+#if defined(__GNUC__)
+# define FLATSB_CLASSW (const WCHAR []){ 'f','l','a','t','s','b','_', \
+ 'c','l','a','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define FLATSB_CLASSW L"flatsb_class32"
+#else
+static const WCHAR FLATSB_CLASSW[] = { 'f','l','a','t','s','b','_',
+ 'c','l','a','s','s','3','2',0 };
+#endif
+#define FLATSB_CLASS WINELIB_NAME_AW(FLATSB_CLASS)
+
+#define WSB_PROP_CYVSCROLL __MSABI_LONG(0x00000001)
+#define WSB_PROP_CXHSCROLL __MSABI_LONG(0x00000002)
+#define WSB_PROP_CYHSCROLL __MSABI_LONG(0x00000004)
+#define WSB_PROP_CXVSCROLL __MSABI_LONG(0x00000008)
+#define WSB_PROP_CXHTHUMB __MSABI_LONG(0x00000010)
+#define WSB_PROP_CYVTHUMB __MSABI_LONG(0x00000020)
+#define WSB_PROP_VBKGCOLOR __MSABI_LONG(0x00000040)
+#define WSB_PROP_HBKGCOLOR __MSABI_LONG(0x00000080)
+#define WSB_PROP_VSTYLE __MSABI_LONG(0x00000100)
+#define WSB_PROP_HSTYLE __MSABI_LONG(0x00000200)
+#define WSB_PROP_WINSTYLE __MSABI_LONG(0x00000400)
+#define WSB_PROP_PALETTE __MSABI_LONG(0x00000800)
+#define WSB_PROP_MASK __MSABI_LONG(0x00000FFF)
+
+#define FSB_REGULAR_MODE 0
+#define FSB_ENCARTA_MODE 1
+#define FSB_FLAT_MODE 2
+
+
+BOOL WINAPI FlatSB_EnableScrollBar(HWND, INT, UINT);
+BOOL WINAPI FlatSB_ShowScrollBar(HWND, INT, BOOL);
+BOOL WINAPI FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT);
+BOOL WINAPI FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO);
+INT WINAPI FlatSB_GetScrollPos(HWND, INT);
+BOOL WINAPI FlatSB_GetScrollProp(HWND, INT, LPINT);
+INT WINAPI FlatSB_SetScrollPos(HWND, INT, INT, BOOL);
+INT WINAPI FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL);
+INT WINAPI FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL);
+BOOL WINAPI FlatSB_SetScrollProp(HWND, UINT, INT, BOOL);
+BOOL WINAPI InitializeFlatSB(HWND);
+HRESULT WINAPI UninitializeFlatSB(HWND);
+
+/* Subclassing stuff */
+typedef LRESULT (CALLBACK *SUBCLASSPROC)(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR);
+BOOL WINAPI SetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
+BOOL WINAPI GetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR*);
+BOOL WINAPI RemoveWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR);
+LRESULT WINAPI DefSubclassProc(HWND, UINT, WPARAM, LPARAM);
+
+int WINAPI DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF, COLORREF, int, int);
+
+/* Header control */
+
+#define WC_HEADERA "SysHeader32"
+#if defined(__GNUC__)
+# define WC_HEADERW (const WCHAR []){ 'S','y','s','H','e','a','d','e','r','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_HEADERW L"SysHeader32"
+#else
+static const WCHAR WC_HEADERW[] = { 'S','y','s','H','e','a','d','e','r','3','2',0 };
+#endif
+#define WC_HEADER WINELIB_NAME_AW(WC_HEADER)
+
+
+#define HDI_WIDTH 0x0001
+#define HDI_HEIGHT HDI_WIDTH
+#define HDI_TEXT 0x0002
+#define HDI_FORMAT 0x0004
+#define HDI_LPARAM 0x0008
+#define HDI_BITMAP 0x0010
+#define HDI_IMAGE 0x0020
+#define HDI_DI_SETITEM 0x0040
+#define HDI_ORDER 0x0080
+#define HDI_FILTER 0x0100
+#define HDI_STATE 0x0200
+
+#define HDIS_FOCUSED 0x00000001
+
+#define HDF_LEFT 0x0000
+#define HDF_RIGHT 0x0001
+#define HDF_CENTER 0x0002
+#define HDF_JUSTIFYMASK 0x0003
+#define HDF_RTLREADING 0x0004
+#define HDF_CHECKBOX 0x0040
+#define HDF_CHECKED 0x0080
+#define HDF_FIXEDWIDTH 0x0100
+#define HDF_SORTDOWN 0x0200
+#define HDF_SORTUP 0x0400
+#define HDF_IMAGE 0x0800
+#define HDF_BITMAP_ON_RIGHT 0x1000
+#define HDF_BITMAP 0x2000
+#define HDF_STRING 0x4000
+#define HDF_OWNERDRAW 0x8000
+#define HDF_SPLITBUTTON 0x1000000
+
+#define HHT_NOWHERE 0x0001
+#define HHT_ONHEADER 0x0002
+#define HHT_ONDIVIDER 0x0004
+#define HHT_ONDIVOPEN 0x0008
+#define HHT_ONFILTER 0x0010
+#define HHT_ONFILTERBUTTON 0x0020
+#define HHT_ABOVE 0x0100
+#define HHT_BELOW 0x0200
+#define HHT_TORIGHT 0x0400
+#define HHT_TOLEFT 0x0800
+#define HHT_ONITEMSTATEICON 0x1000
+#define HHT_ONDROPDOWN 0x2000
+#define HHT_ONOVERFLOW 0x4000
+
+#define HDM_FIRST 0x1200
+#define HDM_GETITEMCOUNT (HDM_FIRST+0)
+#define HDM_INSERTITEMA (HDM_FIRST+1)
+#define HDM_INSERTITEMW (HDM_FIRST+10)
+#define HDM_INSERTITEM WINELIB_NAME_AW(HDM_INSERTITEM)
+#define HDM_DELETEITEM (HDM_FIRST+2)
+#define HDM_GETITEMA (HDM_FIRST+3)
+#define HDM_GETITEMW (HDM_FIRST+11)
+#define HDM_GETITEM WINELIB_NAME_AW(HDM_GETITEM)
+#define HDM_SETITEMA (HDM_FIRST+4)
+#define HDM_SETITEMW (HDM_FIRST+12)
+#define HDM_SETITEM WINELIB_NAME_AW(HDM_SETITEM)
+#define HDM_LAYOUT (HDM_FIRST+5)
+#define HDM_HITTEST (HDM_FIRST+6)
+#define HDM_GETITEMRECT (HDM_FIRST+7)
+#define HDM_SETIMAGELIST (HDM_FIRST+8)
+#define HDM_GETIMAGELIST (HDM_FIRST+9)
+
+#define HDM_ORDERTOINDEX (HDM_FIRST+15)
+#define HDM_CREATEDRAGIMAGE (HDM_FIRST+16)
+#define HDM_GETORDERARRAY (HDM_FIRST+17)
+#define HDM_SETORDERARRAY (HDM_FIRST+18)
+#define HDM_SETHOTDIVIDER (HDM_FIRST+19)
+#define HDM_SETBITMAPMARGIN (HDM_FIRST+20)
+#define HDM_GETBITMAPMARGIN (HDM_FIRST+21)
+#define HDM_SETFILTERCHANGETIMEOUT (HDM_FIRST+22)
+#define HDM_EDITFILTER (HDM_FIRST+23)
+#define HDM_CLEARFILTER (HDM_FIRST+24)
+#define HDM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define HDM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+
+#define HDN_FIRST (0U-300U)
+#define HDN_LAST (0U-399U)
+#define HDN_ITEMCHANGINGA (HDN_FIRST-0)
+#define HDN_ITEMCHANGINGW (HDN_FIRST-20)
+#define HDN_ITEMCHANGING WINELIB_NAME_AW(HDN_ITEMCHANGING)
+#define HDN_ITEMCHANGEDA (HDN_FIRST-1)
+#define HDN_ITEMCHANGEDW (HDN_FIRST-21)
+#define HDN_ITEMCHANGED WINELIB_NAME_AW(HDN_ITEMCHANGED)
+#define HDN_ITEMCLICKA (HDN_FIRST-2)
+#define HDN_ITEMCLICKW (HDN_FIRST-22)
+#define HDN_ITEMCLICK WINELIB_NAME_AW(HDN_ITEMCLICK)
+#define HDN_ITEMDBLCLICKA (HDN_FIRST-3)
+#define HDN_ITEMDBLCLICKW (HDN_FIRST-23)
+#define HDN_ITEMDBLCLICK WINELIB_NAME_AW(HDN_ITEMDBLCLICK)
+#define HDN_DIVIDERDBLCLICKA (HDN_FIRST-5)
+#define HDN_DIVIDERDBLCLICKW (HDN_FIRST-25)
+#define HDN_DIVIDERDBLCLICK WINELIB_NAME_AW(HDN_DIVIDERDBLCLICK)
+#define HDN_BEGINTRACKA (HDN_FIRST-6)
+#define HDN_BEGINTRACKW (HDN_FIRST-26)
+#define HDN_BEGINTRACK WINELIB_NAME_AW(HDN_BEGINTRACK)
+#define HDN_ENDTRACKA (HDN_FIRST-7)
+#define HDN_ENDTRACKW (HDN_FIRST-27)
+#define HDN_ENDTRACK WINELIB_NAME_AW(HDN_ENDTRACK)
+#define HDN_TRACKA (HDN_FIRST-8)
+#define HDN_TRACKW (HDN_FIRST-28)
+#define HDN_TRACK WINELIB_NAME_AW(HDN_TRACK)
+#define HDN_GETDISPINFOA (HDN_FIRST-9)
+#define HDN_GETDISPINFOW (HDN_FIRST-29)
+#define HDN_GETDISPINFO WINELIB_NAME_AW(HDN_GETDISPINFO)
+#define HDN_BEGINDRAG (HDN_FIRST-10)
+#define HDN_ENDDRAG (HDN_FIRST-11)
+#define HDN_FILTERCHANGE (HDN_FIRST-12)
+#define HDN_FILTERBTNCLICK (HDN_FIRST-13)
+#define HDN_BEGINFILTEREDIT (HDN_FIRST-14)
+#define HDN_ENDFILTEREDIT (HDN_FIRST-15)
+#define HDN_ITEMSTATEICONCLICK (HDN_FIRST-16)
+#define HDN_ITEMKEYDOWN (HDN_FIRST-17)
+
+typedef struct _HD_LAYOUT
+{
+ RECT *prc;
+ WINDOWPOS *pwpos;
+} HDLAYOUT, *LPHDLAYOUT;
+
+#define HD_LAYOUT HDLAYOUT
+
+typedef struct _HD_ITEMA
+{
+ UINT mask;
+ INT cxy;
+ LPSTR pszText;
+ HBITMAP hbm;
+ INT cchTextMax;
+ INT fmt;
+ LPARAM lParam;
+ /* (_WIN32_IE >= 0x0300) */
+ INT iImage;
+ INT iOrder;
+ /* (_WIN32_IE >= 0x0500) */
+ UINT type;
+ LPVOID pvFilter;
+ /* (_WIN32_WINNT >= 0x0600) */
+ UINT state;
+} HDITEMA, *LPHDITEMA;
+
+typedef struct _HD_ITEMW
+{
+ UINT mask;
+ INT cxy;
+ LPWSTR pszText;
+ HBITMAP hbm;
+ INT cchTextMax;
+ INT fmt;
+ LPARAM lParam;
+ /* (_WIN32_IE >= 0x0300) */
+ INT iImage;
+ INT iOrder;
+ /* (_WIN32_IE >= 0x0500) */
+ UINT type;
+ LPVOID pvFilter;
+ /* (_WIN32_WINNT >= 0x0600) */
+ UINT state;
+} HDITEMW, *LPHDITEMW;
+
+#define HDITEM WINELIB_NAME_AW(HDITEM)
+#define LPHDITEM WINELIB_NAME_AW(LPHDITEM)
+#define HD_ITEM HDITEM
+
+#define HDITEM_V1_SIZEA CCSIZEOF_STRUCT(HDITEMA, lParam)
+#define HDITEM_V1_SIZEW CCSIZEOF_STRUCT(HDITEMW, lParam)
+#define HDITEM_V1_SIZE WINELIB_NAME_AW(HDITEM_V1_SIZE)
+
+#define HDFT_ISSTRING 0x0000
+#define HDFT_ISNUMBER 0x0001
+#define HDFT_HASNOVALUE 0x8000
+
+typedef struct _HD_TEXTFILTERA
+{
+ LPSTR pszText;
+ INT cchTextMax;
+} HD_TEXTFILTERA, *LPHD_TEXTFILTERA;
+
+typedef struct _HD_TEXTFILTERW
+{
+ LPWSTR pszText;
+ INT cchTextMax;
+} HD_TEXTFILTERW, *LPHD_TEXTFILTERW;
+
+#define HD_TEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER)
+#define HDTEXTFILTER WINELIB_NAME_AW(HD_TEXTFILTER)
+#define LPHD_TEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER)
+#define LPHDTEXTFILTER WINELIB_NAME_AW(LPHD_TEXTFILTER)
+
+typedef struct _HD_HITTESTINFO
+{
+ POINT pt;
+ UINT flags;
+ INT iItem;
+} HDHITTESTINFO, *LPHDHITTESTINFO;
+
+#define HD_HITTESTINFO HDHITTESTINFO
+
+typedef struct tagNMHEADERA
+{
+ NMHDR hdr;
+ INT iItem;
+ INT iButton;
+ HDITEMA *pitem;
+} NMHEADERA, *LPNMHEADERA;
+
+typedef struct tagNMHEADERW
+{
+ NMHDR hdr;
+ INT iItem;
+ INT iButton;
+ HDITEMW *pitem;
+} NMHEADERW, *LPNMHEADERW;
+
+#define NMHEADER WINELIB_NAME_AW(NMHEADER)
+#define LPNMHEADER WINELIB_NAME_AW(LPNMHEADER)
+#define HD_NOTIFY NMHEADER
+
+typedef struct tagNMHDDISPINFOA
+{
+ NMHDR hdr;
+ INT iItem;
+ UINT mask;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ LPARAM lParam;
+} NMHDDISPINFOA, *LPNMHDDISPINFOA;
+
+typedef struct tagNMHDDISPINFOW
+{
+ NMHDR hdr;
+ INT iItem;
+ UINT mask;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ LPARAM lParam;
+} NMHDDISPINFOW, *LPNMHDDISPINFOW;
+
+#define NMHDDISPINFO WINELIB_NAME_AW(NMHDDISPINFO)
+#define LPNMHDDISPINFO WINELIB_NAME_AW(LPNMHDDISPINFO)
+
+typedef struct tagNMHDFILTERBTNCLICK
+{
+ NMHDR hdr;
+ INT iItem;
+ RECT rc;
+} NMHDFILTERBTNCLICK, *LPNMHDFILTERBTNCLICK;
+
+#define Header_GetItemCount(hwndHD) \
+ (INT)SNDMSG((hwndHD), HDM_GETITEMCOUNT, 0, 0)
+#define Header_InsertItemA(hwndHD,i,phdi) \
+ (INT)SNDMSGA((hwndHD),HDM_INSERTITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
+#define Header_InsertItemW(hwndHD,i,phdi) \
+ (INT)SNDMSGW((hwndHD),HDM_INSERTITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
+#define Header_InsertItem WINELIB_NAME_AW(Header_InsertItem)
+#define Header_DeleteItem(hwndHD,i) \
+ (BOOL)SNDMSG((hwndHD), HDM_DELETEITEM, (WPARAM)(INT)(i), 0)
+#define Header_GetItemA(hwndHD,i,phdi) \
+ (BOOL)SNDMSGA((hwndHD),HDM_GETITEMA,(WPARAM)(INT)(i),(LPARAM)(HDITEMA*)(phdi))
+#define Header_GetItemW(hwndHD,i,phdi) \
+ (BOOL)SNDMSGW((hwndHD),HDM_GETITEMW,(WPARAM)(INT)(i),(LPARAM)(HDITEMW*)(phdi))
+#define Header_GetItem WINELIB_NAME_AW(Header_GetItem)
+#define Header_SetItemA(hwndHD,i,phdi) \
+ (BOOL)SNDMSGA((hwndHD),HDM_SETITEMA,(WPARAM)(INT)(i),(LPARAM)(const HDITEMA*)(phdi))
+#define Header_SetItemW(hwndHD,i,phdi) \
+ (BOOL)SNDMSGW((hwndHD),HDM_SETITEMW,(WPARAM)(INT)(i),(LPARAM)(const HDITEMW*)(phdi))
+#define Header_SetItem WINELIB_NAME_AW(Header_SetItem)
+#define Header_Layout(hwndHD,playout) \
+ (BOOL)SNDMSG((hwndHD),HDM_LAYOUT,0,(LPARAM)(LPHDLAYOUT)(playout))
+#define Header_GetItemRect(hwnd,iItem,lprc) \
+ (BOOL)SNDMSG((hwnd),HDM_GETITEMRECT,(WPARAM)iItem,(LPARAM)lprc)
+#define Header_SetImageList(hwnd,himl) \
+ (HIMAGELIST)SNDMSG((hwnd),HDM_SETIMAGELIST,0,(LPARAM)himl)
+#define Header_GetImageList(hwnd) \
+ (HIMAGELIST)SNDMSG((hwnd),HDM_GETIMAGELIST,0,0)
+#define Header_OrderToIndex(hwnd,i) \
+ (INT)SNDMSG((hwnd),HDM_ORDERTOINDEX,(WPARAM)i,0)
+#define Header_CreateDragImage(hwnd,i) \
+ (HIMAGELIST)SNDMSG((hwnd),HDM_CREATEDRAGIMAGE,(WPARAM)i,0)
+#define Header_GetOrderArray(hwnd,iCount,lpi) \
+ (BOOL)SNDMSG((hwnd),HDM_GETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
+#define Header_SetOrderArray(hwnd,iCount,lpi) \
+ (BOOL)SNDMSG((hwnd),HDM_SETORDERARRAY,(WPARAM)iCount,(LPARAM)lpi)
+#define Header_SetHotDivider(hwnd,fPos,dw) \
+ (INT)SNDMSG((hwnd),HDM_SETHOTDIVIDER,(WPARAM)fPos,(LPARAM)dw)
+#define Header_SetUnicodeFormat(hwnd,fUnicode) \
+ (BOOL)SNDMSG((hwnd),HDM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0)
+#define Header_GetUnicodeFormat(hwnd) \
+ (BOOL)SNDMSG((hwnd),HDM_GETUNICODEFORMAT,0,0)
+
+/* Win32 5.1 Button Theme */
+#define WC_BUTTONA "Button"
+#if defined(__GNUC__)
+# define WC_BUTTONW (const WCHAR []){ 'B','u','t','t','o','n',0 }
+#elif defined(_MSC_VER)
+# define WC_BUTTONW L"Button"
+#else
+static const WCHAR WC_BUTTONW[] = { 'B','u','t','t','o','n',0 };
+#endif
+#define WC_BUTTON WINELIB_NAME_AW(WC_BUTTON)
+
+#define BCN_FIRST (0U-1250U)
+#define BCN_LAST (0U-1350U)
+
+#define BCN_HOTITEMCHANGE (BCN_FIRST + 0x0001)
+
+typedef struct tagNMBCHOTITEM
+{
+ NMHDR hdr;
+ DWORD dwFlags;
+} NMBCHOTITEM, *LPNMBCHOTITEM;
+
+#define BST_HOT 0x0200
+
+/* Button control styles for _WIN32_WINNT >= 0x600 */
+#define BS_SPLITBUTTON 0x0000000C
+#define BS_DEFSPLITBUTTON 0x0000000D
+#define BS_COMMANDLINK 0x0000000E
+#define BS_DEFCOMMANDLINK 0x0000000F
+
+/* Toolbar */
+
+#define TOOLBARCLASSNAMEA "ToolbarWindow32"
+#if defined(__GNUC__)
+# define TOOLBARCLASSNAMEW (const WCHAR []){ 'T','o','o','l','b','a','r', \
+ 'W','i','n','d','o','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define TOOLBARCLASSNAMEW L"ToolbarWindow32"
+#else
+static const WCHAR TOOLBARCLASSNAMEW[] = { 'T','o','o','l','b','a','r',
+ 'W','i','n','d','o','w','3','2',0 };
+#endif
+#define TOOLBARCLASSNAME WINELIB_NAME_AW(TOOLBARCLASSNAME)
+
+#define CMB_MASKED 0x02
+
+#define TBSTATE_CHECKED 0x01
+#define TBSTATE_PRESSED 0x02
+#define TBSTATE_ENABLED 0x04
+#define TBSTATE_HIDDEN 0x08
+#define TBSTATE_INDETERMINATE 0x10
+#define TBSTATE_WRAP 0x20
+#define TBSTATE_ELLIPSES 0x40
+#define TBSTATE_MARKED 0x80
+
+
+/* as of _WIN32_IE >= 0x0500 the following symbols are obsolete,
+ * "everyone" should use the BTNS_... stuff below
+ */
+#define TBSTYLE_BUTTON 0x00
+#define TBSTYLE_SEP 0x01
+#define TBSTYLE_CHECK 0x02
+#define TBSTYLE_GROUP 0x04
+#define TBSTYLE_CHECKGROUP (TBSTYLE_GROUP | TBSTYLE_CHECK)
+#define TBSTYLE_DROPDOWN 0x08
+#define TBSTYLE_AUTOSIZE 0x10
+#define TBSTYLE_NOPREFIX 0x20
+#define BTNS_BUTTON TBSTYLE_BUTTON
+#define BTNS_SEP TBSTYLE_SEP
+#define BTNS_CHECK TBSTYLE_CHECK
+#define BTNS_GROUP TBSTYLE_GROUP
+#define BTNS_CHECKGROUP TBSTYLE_CHECKGROUP
+#define BTNS_DROPDOWN TBSTYLE_DROPDOWN
+#define BTNS_AUTOSIZE TBSTYLE_AUTOSIZE
+#define BTNS_NOPREFIX TBSTYLE_NOPREFIX
+#define BTNS_SHOWTEXT 0x40 /* ignored unless TBSTYLE_EX_MIXEDB set */
+#define BTNS_WHOLEDROPDOWN 0x80 /* draw dropdown arrow, but without split arrow section */
+
+#define TBSTYLE_TOOLTIPS 0x0100
+#define TBSTYLE_WRAPABLE 0x0200
+#define TBSTYLE_ALTDRAG 0x0400
+#define TBSTYLE_FLAT 0x0800
+#define TBSTYLE_LIST 0x1000
+#define TBSTYLE_CUSTOMERASE 0x2000
+#define TBSTYLE_REGISTERDROP 0x4000
+#define TBSTYLE_TRANSPARENT 0x8000
+#define TBSTYLE_EX_DRAWDDARROWS 0x00000001
+#define TBSTYLE_EX_UNDOC1 0x00000004 /* similar to TBSTYLE_WRAPABLE */
+#define TBSTYLE_EX_MIXEDBUTTONS 0x00000008
+#define TBSTYLE_EX_HIDECLIPPEDBUTTONS 0x00000010 /* don't show partially obscured buttons */
+#define TBSTYLE_EX_DOUBLEBUFFER 0x00000080 /* Double Buffer the toolbar */
+
+#define TBIF_IMAGE 0x00000001
+#define TBIF_TEXT 0x00000002
+#define TBIF_STATE 0x00000004
+#define TBIF_STYLE 0x00000008
+#define TBIF_LPARAM 0x00000010
+#define TBIF_COMMAND 0x00000020
+#define TBIF_SIZE 0x00000040
+#define TBIF_BYINDEX 0x80000000
+
+#define TBBF_LARGE 0x0001
+
+#define TB_ENABLEBUTTON (WM_USER+1)
+#define TB_CHECKBUTTON (WM_USER+2)
+#define TB_PRESSBUTTON (WM_USER+3)
+#define TB_HIDEBUTTON (WM_USER+4)
+#define TB_INDETERMINATE (WM_USER+5)
+#define TB_MARKBUTTON (WM_USER+6)
+#define TB_ISBUTTONENABLED (WM_USER+9)
+#define TB_ISBUTTONCHECKED (WM_USER+10)
+#define TB_ISBUTTONPRESSED (WM_USER+11)
+#define TB_ISBUTTONHIDDEN (WM_USER+12)
+#define TB_ISBUTTONINDETERMINATE (WM_USER+13)
+#define TB_ISBUTTONHIGHLIGHTED (WM_USER+14)
+#define TB_SETSTATE (WM_USER+17)
+#define TB_GETSTATE (WM_USER+18)
+#define TB_ADDBITMAP (WM_USER+19)
+#define TB_ADDBUTTONSA (WM_USER+20)
+#define TB_ADDBUTTONSW (WM_USER+68)
+#define TB_ADDBUTTONS WINELIB_NAME_AW(TB_ADDBUTTONS)
+#define TB_HITTEST (WM_USER+69)
+#define TB_INSERTBUTTONA (WM_USER+21)
+#define TB_INSERTBUTTONW (WM_USER+67)
+#define TB_INSERTBUTTON WINELIB_NAME_AW(TB_INSERTBUTTON)
+#define TB_DELETEBUTTON (WM_USER+22)
+#define TB_GETBUTTON (WM_USER+23)
+#define TB_BUTTONCOUNT (WM_USER+24)
+#define TB_COMMANDTOINDEX (WM_USER+25)
+#define TB_SAVERESTOREA (WM_USER+26)
+#define TB_SAVERESTOREW (WM_USER+76)
+#define TB_SAVERESTORE WINELIB_NAME_AW(TB_SAVERESTORE)
+#define TB_CUSTOMIZE (WM_USER+27)
+#define TB_ADDSTRINGA (WM_USER+28)
+#define TB_ADDSTRINGW (WM_USER+77)
+#define TB_ADDSTRING WINELIB_NAME_AW(TB_ADDSTRING)
+#define TB_GETITEMRECT (WM_USER+29)
+#define TB_BUTTONSTRUCTSIZE (WM_USER+30)
+#define TB_SETBUTTONSIZE (WM_USER+31)
+#define TB_SETBITMAPSIZE (WM_USER+32)
+#define TB_AUTOSIZE (WM_USER+33)
+#define TB_GETTOOLTIPS (WM_USER+35)
+#define TB_SETTOOLTIPS (WM_USER+36)
+#define TB_SETPARENT (WM_USER+37)
+#define TB_SETROWS (WM_USER+39)
+#define TB_GETROWS (WM_USER+40)
+#define TB_GETBITMAPFLAGS (WM_USER+41)
+#define TB_SETCMDID (WM_USER+42)
+#define TB_CHANGEBITMAP (WM_USER+43)
+#define TB_GETBITMAP (WM_USER+44)
+#define TB_GETBUTTONTEXTA (WM_USER+45)
+#define TB_GETBUTTONTEXTW (WM_USER+75)
+#define TB_GETBUTTONTEXT WINELIB_NAME_AW(TB_GETBUTTONTEXT)
+#define TB_REPLACEBITMAP (WM_USER+46)
+#define TB_SETINDENT (WM_USER+47)
+#define TB_SETIMAGELIST (WM_USER+48)
+#define TB_GETIMAGELIST (WM_USER+49)
+#define TB_LOADIMAGES (WM_USER+50)
+#define TB_GETRECT (WM_USER+51) /* wParam is the Cmd instead of index */
+#define TB_SETHOTIMAGELIST (WM_USER+52)
+#define TB_GETHOTIMAGELIST (WM_USER+53)
+#define TB_SETDISABLEDIMAGELIST (WM_USER+54)
+#define TB_GETDISABLEDIMAGELIST (WM_USER+55)
+#define TB_SETSTYLE (WM_USER+56)
+#define TB_GETSTYLE (WM_USER+57)
+#define TB_GETBUTTONSIZE (WM_USER+58)
+#define TB_SETBUTTONWIDTH (WM_USER+59)
+#define TB_SETMAXTEXTROWS (WM_USER+60)
+#define TB_GETTEXTROWS (WM_USER+61)
+#define TB_GETOBJECT (WM_USER+62)
+#define TB_GETBUTTONINFOW (WM_USER+63)
+#define TB_GETBUTTONINFOA (WM_USER+65)
+#define TB_GETBUTTONINFO WINELIB_NAME_AW(TB_GETBUTTONINFO)
+#define TB_SETBUTTONINFOW (WM_USER+64)
+#define TB_SETBUTTONINFOA (WM_USER+66)
+#define TB_SETBUTTONINFO WINELIB_NAME_AW(TB_SETBUTTONINFO)
+#define TB_SETDRAWTEXTFLAGS (WM_USER+70)
+#define TB_GETHOTITEM (WM_USER+71)
+#define TB_SETHOTITEM (WM_USER+72)
+#define TB_SETANCHORHIGHLIGHT (WM_USER+73)
+#define TB_GETANCHORHIGHLIGHT (WM_USER+74)
+#define TB_MAPACCELERATORA (WM_USER+78)
+#define TB_MAPACCELERATORW (WM_USER+90)
+#define TB_MAPACCELERATOR WINELIB_NAME_AW(TB_MAPACCELERATOR)
+#define TB_GETINSERTMARK (WM_USER+79)
+#define TB_SETINSERTMARK (WM_USER+80)
+#define TB_INSERTMARKHITTEST (WM_USER+81)
+#define TB_MOVEBUTTON (WM_USER+82)
+#define TB_GETMAXSIZE (WM_USER+83)
+#define TB_SETEXTENDEDSTYLE (WM_USER+84)
+#define TB_GETEXTENDEDSTYLE (WM_USER+85)
+#define TB_GETPADDING (WM_USER+86)
+#define TB_SETPADDING (WM_USER+87)
+#define TB_SETINSERTMARKCOLOR (WM_USER+88)
+#define TB_GETINSERTMARKCOLOR (WM_USER+89)
+#define TB_SETCOLORSCHEME CCM_SETCOLORSCHEME
+#define TB_GETCOLORSCHEME CCM_GETCOLORSCHEME
+#define TB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define TB_GETSTRINGW (WM_USER+91)
+#define TB_GETSTRINGA (WM_USER+92)
+#define TB_GETSTRING WINELIB_NAME_AW(TB_GETSTRING)
+
+/* undocumented messages in Toolbar */
+#ifdef __WINESRC__
+#define TB_UNKWN45D (WM_USER+93)
+#define TB_SETHOTITEM2 (WM_USER+94)
+#define TB_SETLISTGAP (WM_USER+96)
+#define TB_GETIMAGELISTCOUNT (WM_USER+98)
+#define TB_GETIDEALSIZE (WM_USER+99)
+#define TB_UNKWN464 (WM_USER+100)
+#endif
+
+#define TB_GETMETRICS (WM_USER+101)
+#define TB_SETMETRICS (WM_USER+102)
+#define TB_SETWINDOWTHEME CCM_SETWINDOWTHEME
+
+#define TBN_FIRST (0U-700U)
+#define TBN_LAST (0U-720U)
+#define TBN_GETBUTTONINFOA (TBN_FIRST-0)
+#define TBN_GETBUTTONINFOW (TBN_FIRST-20)
+#define TBN_GETBUTTONINFO WINELIB_NAME_AW(TBN_GETBUTTONINFO)
+#define TBN_BEGINDRAG (TBN_FIRST-1)
+#define TBN_ENDDRAG (TBN_FIRST-2)
+#define TBN_BEGINADJUST (TBN_FIRST-3)
+#define TBN_ENDADJUST (TBN_FIRST-4)
+#define TBN_RESET (TBN_FIRST-5)
+#define TBN_QUERYINSERT (TBN_FIRST-6)
+#define TBN_QUERYDELETE (TBN_FIRST-7)
+#define TBN_TOOLBARCHANGE (TBN_FIRST-8)
+#define TBN_CUSTHELP (TBN_FIRST-9)
+#define TBN_DROPDOWN (TBN_FIRST-10)
+#define TBN_GETOBJECT (TBN_FIRST-12)
+#define TBN_HOTITEMCHANGE (TBN_FIRST-13)
+#define TBN_DRAGOUT (TBN_FIRST-14)
+#define TBN_DELETINGBUTTON (TBN_FIRST-15)
+#define TBN_GETDISPINFOA (TBN_FIRST-16)
+#define TBN_GETDISPINFOW (TBN_FIRST-17)
+#define TBN_GETDISPINFO WINELIB_NAME_AW(TBN_GETDISPINFO)
+#define TBN_GETINFOTIPA (TBN_FIRST-18)
+#define TBN_GETINFOTIPW (TBN_FIRST-19)
+#define TBN_GETINFOTIP WINELIB_NAME_AW(TBN_GETINFOTIP)
+#define TBN_RESTORE (TBN_FIRST-21)
+#define TBN_SAVE (TBN_FIRST-22)
+#define TBN_INITCUSTOMIZE (TBN_FIRST-23)
+#define TBN_WRAPHOTITEM (TBN_FIRST-24) /* this is undocumented and the name is a guess */
+#define TBNRF_HIDEHELP 0x00000001
+
+
+/* Return values from TBN_DROPDOWN */
+#define TBDDRET_DEFAULT 0
+#define TBDDRET_NODEFAULT 1
+#define TBDDRET_TREATPRESSED 2
+
+typedef struct _NMTBCUSTOMDRAW
+{
+ NMCUSTOMDRAW nmcd;
+ HBRUSH hbrMonoDither;
+ HBRUSH hbrLines;
+ HPEN hpenLines;
+ COLORREF clrText;
+ COLORREF clrMark;
+ COLORREF clrTextHighlight;
+ COLORREF clrBtnFace;
+ COLORREF clrBtnHighlight;
+ COLORREF clrHighlightHotTrack;
+ RECT rcText;
+ int nStringBkMode;
+ int nHLStringBkMode;
+ int iListGap;
+} NMTBCUSTOMDRAW, *LPNMTBCUSTOMDRAW;
+
+/* return flags for Toolbar NM_CUSTOMDRAW notifications */
+#define TBCDRF_NOEDGES 0x00010000 /* Don't draw button edges */
+#define TBCDRF_HILITEHOTTRACK 0x00020000 /* Use color of the button bkgnd */
+ /* when hottracked */
+#define TBCDRF_NOOFFSET 0x00040000 /* No offset button if pressed */
+#define TBCDRF_NOMARK 0x00080000 /* Don't draw default highlight */
+ /* for TBSTATE_MARKED */
+#define TBCDRF_NOETCHEDEFFECT 0x00100000 /* No etched effect for */
+ /* disabled items */
+#define TBCDRF_BLENDICON 0x00200000 /* ILD_BLEND50 on the icon image */
+#define TBCDRF_NOBACKGROUND 0x00400000 /* ILD_BLEND50 on the icon image */
+#define TBCDRF_USECDCOLORS 0x00800000
+
+
+/* This is just for old CreateToolbar. */
+/* Don't use it in new programs. */
+typedef struct _OLDTBBUTTON {
+ INT iBitmap;
+ INT idCommand;
+ BYTE fsState;
+ BYTE fsStyle;
+ BYTE bReserved[2];
+ DWORD dwData;
+} OLDTBBUTTON, *POLDTBBUTTON, *LPOLDTBBUTTON;
+typedef const OLDTBBUTTON *LPCOLDTBBUTTON;
+
+
+typedef struct _TBBUTTON {
+ INT iBitmap;
+ INT idCommand;
+ BYTE fsState;
+ BYTE fsStyle;
+#ifdef _WIN64
+ BYTE bReserved[6];
+#else
+ BYTE bReserved[2];
+#endif
+ DWORD_PTR dwData;
+ INT_PTR iString;
+} TBBUTTON, *PTBBUTTON, *LPTBBUTTON;
+typedef const TBBUTTON *LPCTBBUTTON;
+
+
+typedef struct _COLORMAP {
+ COLORREF from;
+ COLORREF to;
+} COLORMAP, *LPCOLORMAP;
+
+
+typedef struct tagTBADDBITMAP {
+ HINSTANCE hInst;
+ UINT_PTR nID;
+} TBADDBITMAP, *LPTBADDBITMAP;
+
+#define HINST_COMMCTRL ((HINSTANCE)-1)
+#define IDB_STD_SMALL_COLOR 0
+#define IDB_STD_LARGE_COLOR 1
+#define IDB_VIEW_SMALL_COLOR 4
+#define IDB_VIEW_LARGE_COLOR 5
+#define IDB_HIST_SMALL_COLOR 8
+#define IDB_HIST_LARGE_COLOR 9
+
+#define STD_CUT 0
+#define STD_COPY 1
+#define STD_PASTE 2
+#define STD_UNDO 3
+#define STD_REDOW 4
+#define STD_DELETE 5
+#define STD_FILENEW 6
+#define STD_FILEOPEN 7
+#define STD_FILESAVE 8
+#define STD_PRINTPRE 9
+#define STD_PROPERTIES 10
+#define STD_HELP 11
+#define STD_FIND 12
+#define STD_REPLACE 13
+#define STD_PRINT 14
+
+#define VIEW_LARGEICONS 0
+#define VIEW_SMALLICONS 1
+#define VIEW_LIST 2
+#define VIEW_DETAILS 3
+#define VIEW_SORTNAME 4
+#define VIEW_SORTSIZE 5
+#define VIEW_SORTDATE 6
+#define VIEW_SORTTYPE 7
+#define VIEW_PARENTFOLDER 8
+#define VIEW_NETCONNECT 9
+#define VIEW_NETDISCONNECT 10
+#define VIEW_NEWFOLDER 11
+#define VIEW_VIEWMENU 12
+
+#define HIST_BACK 0
+#define HIST_FORWARD 1
+#define HIST_FAVORITES 2
+#define HIST_ADDTOFAVORITES 3
+#define HIST_VIEWTREE 4
+
+typedef struct tagTBSAVEPARAMSA {
+ HKEY hkr;
+ LPCSTR pszSubKey;
+ LPCSTR pszValueName;
+} TBSAVEPARAMSA, *LPTBSAVEPARAMSA;
+
+typedef struct tagTBSAVEPARAMSW {
+ HKEY hkr;
+ LPCWSTR pszSubKey;
+ LPCWSTR pszValueName;
+} TBSAVEPARAMSW, *LPTBSAVEPARAMSW;
+
+#define TBSAVEPARAMS WINELIB_NAME_AW(TBSAVEPARAMS)
+#define LPTBSAVEPARAMS WINELIB_NAME_AW(LPTBSAVEPARAMS)
+
+typedef struct
+{
+ UINT cbSize;
+ DWORD dwMask;
+ INT idCommand;
+ INT iImage;
+ BYTE fsState;
+ BYTE fsStyle;
+ WORD cx;
+ DWORD_PTR lParam;
+ LPSTR pszText;
+ INT cchText;
+} TBBUTTONINFOA, *LPTBBUTTONINFOA;
+
+typedef struct
+{
+ UINT cbSize;
+ DWORD dwMask;
+ INT idCommand;
+ INT iImage;
+ BYTE fsState;
+ BYTE fsStyle;
+ WORD cx;
+ DWORD_PTR lParam;
+ LPWSTR pszText;
+ INT cchText;
+} TBBUTTONINFOW, *LPTBBUTTONINFOW;
+
+#define TBBUTTONINFO WINELIB_NAME_AW(TBBUTTONINFO)
+#define LPTBBUTTONINFO WINELIB_NAME_AW(LPTBBUTTONINFO)
+
+typedef struct tagNMTBHOTITEM
+{
+ NMHDR hdr;
+ int idOld;
+ int idNew;
+ DWORD dwFlags;
+} NMTBHOTITEM, *LPNMTBHOTITEM;
+
+typedef struct tagNMTBGETINFOTIPA
+{
+ NMHDR hdr;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iItem;
+ LPARAM lParam;
+} NMTBGETINFOTIPA, *LPNMTBGETINFOTIPA;
+
+typedef struct tagNMTBGETINFOTIPW
+{
+ NMHDR hdr;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iItem;
+ LPARAM lParam;
+} NMTBGETINFOTIPW, *LPNMTBGETINFOTIPW;
+
+#define NMTBGETINFOTIP WINELIB_NAME_AW(NMTBGETINFOTIP)
+#define LPNMTBGETINFOTIP WINELIB_NAME_AW(LPNMTBGETINFOTIP)
+
+typedef struct
+{
+ NMHDR hdr;
+ DWORD dwMask;
+ int idCommand;
+ DWORD_PTR lParam;
+ int iImage;
+ LPSTR pszText;
+ int cchText;
+} NMTBDISPINFOA, *LPNMTBDISPINFOA;
+
+typedef struct
+{
+ NMHDR hdr;
+ DWORD dwMask;
+ int idCommand;
+ DWORD_PTR lParam;
+ int iImage;
+ LPWSTR pszText;
+ int cchText;
+} NMTBDISPINFOW, *LPNMTBDISPINFOW;
+
+#define NMTBDISPINFO WINELIB_NAME_AW(NMTBDISPINFO)
+#define LPNMTBDISPINFO WINELIB_NAME_AW(LPNMTBDISPINFO)
+
+/* contents of dwMask in the NMTBDISPINFO structure */
+#define TBNF_IMAGE 0x00000001
+#define TBNF_TEXT 0x00000002
+#define TBNF_DI_SETITEM 0x10000000
+
+
+typedef struct tagNMTOOLBARA
+{
+ NMHDR hdr;
+ INT iItem;
+ TBBUTTON tbButton;
+ INT cchText;
+ LPSTR pszText;
+ RECT rcButton; /* Version 5.80 */
+} NMTOOLBARA, *LPNMTOOLBARA, TBNOTIFYA, *LPTBNOTIFYA;
+
+typedef struct tagNMTOOLBARW
+{
+ NMHDR hdr;
+ INT iItem;
+ TBBUTTON tbButton;
+ INT cchText;
+ LPWSTR pszText;
+ RECT rcButton; /* Version 5.80 */
+} NMTOOLBARW, *LPNMTOOLBARW, TBNOTIFYW, *LPTBNOTIFYW;
+
+#define NMTOOLBAR WINELIB_NAME_AW(NMTOOLBAR)
+#define LPNMTOOLBAR WINELIB_NAME_AW(LPNMTOOLBAR)
+#define TBNOTIFY WINELIB_NAME_AW(TBNOTIFY)
+#define LPTBNOTIFY WINELIB_NAME_AW(LPTBNOTIFY)
+
+typedef struct
+{
+ HINSTANCE hInstOld;
+ UINT_PTR nIDOld;
+ HINSTANCE hInstNew;
+ UINT_PTR nIDNew;
+ INT nButtons;
+} TBREPLACEBITMAP, *LPTBREPLACEBITMAP;
+
+#define HICF_OTHER 0x00000000
+#define HICF_MOUSE 0x00000001 /* Triggered by mouse */
+#define HICF_ARROWKEYS 0x00000002 /* Triggered by arrow keys */
+#define HICF_ACCELERATOR 0x00000004 /* Triggered by accelerator */
+#define HICF_DUPACCEL 0x00000008 /* This accelerator is not unique */
+#define HICF_ENTERING 0x00000010 /* idOld is invalid */
+#define HICF_LEAVING 0x00000020 /* idNew is invalid */
+#define HICF_RESELECT 0x00000040 /* hot item reselected */
+#define HICF_LMOUSE 0x00000080 /* left mouse button selected */
+#define HICF_TOGGLEDROPDOWN 0x00000100 /* Toggle button's dropdown state */
+
+typedef struct
+{
+ int iButton;
+ DWORD dwFlags;
+} TBINSERTMARK, *LPTBINSERTMARK;
+#define TBIMHT_AFTER 0x00000001 /* TRUE = insert After iButton, otherwise before */
+#define TBIMHT_BACKGROUND 0x00000002 /* TRUE if and only if missed buttons completely */
+
+typedef struct tagNMTBSAVE
+{
+ NMHDR hdr;
+ DWORD* pData;
+ DWORD* pCurrent;
+ UINT cbData;
+ int iItem;
+ int cButtons;
+ TBBUTTON tbButton;
+} NMTBSAVE, *LPNMTBSAVE;
+
+typedef struct tagNMTBRESTORE
+{
+ NMHDR hdr;
+ DWORD* pData;
+ DWORD* pCurrent;
+ UINT cbData;
+ int iItem;
+ int cButtons;
+ int cbBytesPerRecord;
+ TBBUTTON tbButton;
+} NMTBRESTORE, *LPNMTBRESTORE;
+
+#define TBMF_PAD 0x00000001
+#define TBMF_BARPAD 0x00000002
+#define TBMF_BUTTONSPACING 0x00000004
+
+typedef struct
+{
+ UINT cbSize;
+ DWORD dwMask;
+ INT cxPad;
+ INT cyPad;
+ INT cxBarPad;
+ INT cyBarPad;
+ INT cxButtonSpacing;
+ INT cyButtonSpacing;
+} TBMETRICS, *LPTBMETRICS;
+
+/* these are undocumented and the names are guesses */
+typedef struct
+{
+ NMHDR hdr;
+ HWND hwndDialog;
+} NMTBINITCUSTOMIZE;
+
+typedef struct
+{
+ NMHDR hdr;
+ INT idNew;
+ INT iDirection; /* left is -1, right is 1 */
+ DWORD dwReason; /* HICF_* */
+} NMTBWRAPHOTITEM;
+
+
+HWND WINAPI
+CreateToolbar(HWND, DWORD, UINT, INT, HINSTANCE,
+ UINT, LPCTBBUTTON, INT);
+
+HWND WINAPI
+CreateToolbarEx(HWND, DWORD, UINT, INT,
+ HINSTANCE, UINT_PTR, LPCTBBUTTON,
+ INT, INT, INT, INT, INT, UINT);
+
+HBITMAP WINAPI
+CreateMappedBitmap (HINSTANCE, INT_PTR, UINT, LPCOLORMAP, INT);
+
+
+/* Tool tips */
+
+#define TOOLTIPS_CLASSA "tooltips_class32"
+#if defined(__GNUC__)
+# define TOOLTIPS_CLASSW (const WCHAR []){ 't','o','o','l','t','i','p','s','_', \
+ 'c','l','a','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define TOOLTIPS_CLASSW L"tooltips_class32"
+#else
+static const WCHAR TOOLTIPS_CLASSW[] = { 't','o','o','l','t','i','p','s','_',
+ 'c','l','a','s','s','3','2',0 };
+#endif
+#define TOOLTIPS_CLASS WINELIB_NAME_AW(TOOLTIPS_CLASS)
+
+#define INFOTIPSIZE 1024
+
+
+#define TTF_IDISHWND 0x0001
+#define TTF_CENTERTIP 0x0002
+#define TTF_RTLREADING 0x0004
+#define TTF_SUBCLASS 0x0010
+#define TTF_TRACK 0x0020
+#define TTF_ABSOLUTE 0x0080
+#define TTF_TRANSPARENT 0x0100
+#define TTF_DI_SETITEM 0x8000 /* valid only on the TTN_NEEDTEXT callback */
+
+
+#define TTDT_AUTOMATIC 0
+#define TTDT_RESHOW 1
+#define TTDT_AUTOPOP 2
+#define TTDT_INITIAL 3
+
+
+#define TTI_NONE 0
+#define TTI_INFO 1
+#define TTI_WARNING 2
+#define TTI_ERROR 3
+
+
+#define TTM_ACTIVATE (WM_USER+1)
+#define TTM_SETDELAYTIME (WM_USER+3)
+#define TTM_ADDTOOLA (WM_USER+4)
+#define TTM_ADDTOOLW (WM_USER+50)
+#define TTM_ADDTOOL WINELIB_NAME_AW(TTM_ADDTOOL)
+#define TTM_DELTOOLA (WM_USER+5)
+#define TTM_DELTOOLW (WM_USER+51)
+#define TTM_DELTOOL WINELIB_NAME_AW(TTM_DELTOOL)
+#define TTM_NEWTOOLRECTA (WM_USER+6)
+#define TTM_NEWTOOLRECTW (WM_USER+52)
+#define TTM_NEWTOOLRECT WINELIB_NAME_AW(TTM_NEWTOOLRECT)
+#define TTM_RELAYEVENT (WM_USER+7)
+#define TTM_GETTOOLINFOA (WM_USER+8)
+#define TTM_GETTOOLINFOW (WM_USER+53)
+#define TTM_GETTOOLINFO WINELIB_NAME_AW(TTM_GETTOOLINFO)
+#define TTM_SETTOOLINFOA (WM_USER+9)
+#define TTM_SETTOOLINFOW (WM_USER+54)
+#define TTM_SETTOOLINFO WINELIB_NAME_AW(TTM_SETTOOLINFO)
+#define TTM_HITTESTA (WM_USER+10)
+#define TTM_HITTESTW (WM_USER+55)
+#define TTM_HITTEST WINELIB_NAME_AW(TTM_HITTEST)
+#define TTM_GETTEXTA (WM_USER+11)
+#define TTM_GETTEXTW (WM_USER+56)
+#define TTM_GETTEXT WINELIB_NAME_AW(TTM_GETTEXT)
+#define TTM_UPDATETIPTEXTA (WM_USER+12)
+#define TTM_UPDATETIPTEXTW (WM_USER+57)
+#define TTM_UPDATETIPTEXT WINELIB_NAME_AW(TTM_UPDATETIPTEXT)
+#define TTM_GETTOOLCOUNT (WM_USER+13)
+#define TTM_ENUMTOOLSA (WM_USER+14)
+#define TTM_ENUMTOOLSW (WM_USER+58)
+#define TTM_ENUMTOOLS WINELIB_NAME_AW(TTM_ENUMTOOLS)
+#define TTM_GETCURRENTTOOLA (WM_USER+15)
+#define TTM_GETCURRENTTOOLW (WM_USER+59)
+#define TTM_GETCURRENTTOOL WINELIB_NAME_AW(TTM_GETCURRENTTOOL)
+#define TTM_WINDOWFROMPOINT (WM_USER+16)
+#define TTM_TRACKACTIVATE (WM_USER+17)
+#define TTM_TRACKPOSITION (WM_USER+18)
+#define TTM_SETTIPBKCOLOR (WM_USER+19)
+#define TTM_SETTIPTEXTCOLOR (WM_USER+20)
+#define TTM_GETDELAYTIME (WM_USER+21)
+#define TTM_GETTIPBKCOLOR (WM_USER+22)
+#define TTM_GETTIPTEXTCOLOR (WM_USER+23)
+#define TTM_SETMAXTIPWIDTH (WM_USER+24)
+#define TTM_GETMAXTIPWIDTH (WM_USER+25)
+#define TTM_SETMARGIN (WM_USER+26)
+#define TTM_GETMARGIN (WM_USER+27)
+#define TTM_POP (WM_USER+28)
+#define TTM_UPDATE (WM_USER+29)
+#define TTM_GETBUBBLESIZE (WM_USER+30)
+#define TTM_ADJUSTRECT (WM_USER+31)
+#define TTM_SETTITLEA (WM_USER+32)
+#define TTM_SETTITLEW (WM_USER+33)
+#define TTM_SETTITLE WINELIB_NAME_AW(TTM_SETTITLE)
+#define TTM_POPUP (WM_USER+34)
+#define TTM_GETTITLE (WM_USER+35)
+#define TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME
+
+
+#define TTN_FIRST (0U-520U)
+#define TTN_LAST (0U-549U)
+#define TTN_GETDISPINFOA (TTN_FIRST-0)
+#define TTN_GETDISPINFOW (TTN_FIRST-10)
+#define TTN_GETDISPINFO WINELIB_NAME_AW(TTN_GETDISPINFO)
+#define TTN_SHOW (TTN_FIRST-1)
+#define TTN_POP (TTN_FIRST-2)
+
+#define TTN_NEEDTEXT TTN_GETDISPINFO
+#define TTN_NEEDTEXTA TTN_GETDISPINFOA
+#define TTN_NEEDTEXTW TTN_GETDISPINFOW
+
+typedef struct tagTOOLINFOA {
+ UINT cbSize;
+ UINT uFlags;
+ HWND hwnd;
+ UINT_PTR uId;
+ RECT rect;
+ HINSTANCE hinst;
+ LPSTR lpszText;
+ LPARAM lParam;
+ void *lpReserved;
+} TTTOOLINFOA, *LPTOOLINFOA, *PTOOLINFOA, *LPTTTOOLINFOA;
+
+typedef struct tagTOOLINFOW {
+ UINT cbSize;
+ UINT uFlags;
+ HWND hwnd;
+ UINT_PTR uId;
+ RECT rect;
+ HINSTANCE hinst;
+ LPWSTR lpszText;
+ LPARAM lParam;
+ void *lpReserved;
+} TTTOOLINFOW, *LPTOOLINFOW, *PTOOLINFOW, *LPTTTOOLINFOW;
+
+#define TTTOOLINFO WINELIB_NAME_AW(TTTOOLINFO)
+#define TOOLINFO WINELIB_NAME_AW(TTTOOLINFO)
+#define PTOOLINFO WINELIB_NAME_AW(PTOOLINFO)
+#define LPTTTOOLINFO WINELIB_NAME_AW(LPTTTOOLINFO)
+#define LPTOOLINFO WINELIB_NAME_AW(LPTOOLINFO)
+
+#define TTTOOLINFOA_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpszText)
+#define TTTOOLINFOW_V1_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpszText)
+#define TTTOOLINFO_V1_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(TTTOOLINFO), lpszText)
+#define TTTOOLINFOA_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lParam)
+#define TTTOOLINFOW_V2_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lParam)
+#define TTTOOLINFOA_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOA, lpReserved)
+#define TTTOOLINFOW_V3_SIZE CCSIZEOF_STRUCT(TTTOOLINFOW, lpReserved)
+
+typedef struct _TT_HITTESTINFOA
+{
+ HWND hwnd;
+ POINT pt;
+ TTTOOLINFOA ti;
+} TTHITTESTINFOA, *LPTTHITTESTINFOA;
+#define LPHITTESTINFOA LPTTHITTESTINFOA
+
+typedef struct _TT_HITTESTINFOW
+{
+ HWND hwnd;
+ POINT pt;
+ TTTOOLINFOW ti;
+} TTHITTESTINFOW, *LPTTHITTESTINFOW;
+#define LPHITTESTINFOW LPTTHITTESTINFOW
+
+#define TTHITTESTINFO WINELIB_NAME_AW(TTHITTESTINFO)
+#define LPTTHITTESTINFO WINELIB_NAME_AW(LPTTHITTESTINFO)
+#define LPHITTESTINFO WINELIB_NAME_AW(LPHITTESTINFO)
+
+typedef struct tagNMTTDISPINFOA
+{
+ NMHDR hdr;
+ LPSTR lpszText;
+ CHAR szText[80];
+ HINSTANCE hinst;
+ UINT uFlags;
+ LPARAM lParam;
+} NMTTDISPINFOA, *LPNMTTDISPINFOA;
+
+typedef struct tagNMTTDISPINFOW
+{
+ NMHDR hdr;
+ LPWSTR lpszText;
+ WCHAR szText[80];
+ HINSTANCE hinst;
+ UINT uFlags;
+ LPARAM lParam;
+} NMTTDISPINFOW, *LPNMTTDISPINFOW;
+
+#define NMTTDISPINFO WINELIB_NAME_AW(NMTTDISPINFO)
+#define LPNMTTDISPINFO WINELIB_NAME_AW(LPNMTTDISPINFO)
+
+#define NMTTDISPINFO_V1_SIZEA CCSIZEOF_STRUCT(NMTTDISPINFOA, uFlags)
+#define NMTTDISPINFO_V1_SIZEW CCSIZEOF_STRUCT(NMTTDISPINFOW, uFlags)
+#define NMTTDISPINFO_V1_SIZE WINELIB_NAME_AW(NMTTDISPINFO_V1_SIZE)
+
+typedef struct _TTGETTITLE
+{
+ DWORD dwSize;
+ UINT uTitleBitmap;
+ UINT cch;
+ WCHAR* pszTitle;
+} TTGETTITLE, *PTTGETTITLE;
+
+#define TOOLTIPTEXTW NMTTDISPINFOW
+#define TOOLTIPTEXTA NMTTDISPINFOA
+#define TOOLTIPTEXT NMTTDISPINFO
+#define LPTOOLTIPTEXTW LPNMTTDISPINFOW
+#define LPTOOLTIPTEXTA LPNMTTDISPINFOA
+#define LPTOOLTIPTEXT LPNMTTDISPINFO
+
+
+/* Rebar control */
+
+#define REBARCLASSNAMEA "ReBarWindow32"
+#if defined(__GNUC__)
+# define REBARCLASSNAMEW (const WCHAR []){ 'R','e','B','a','r', \
+ 'W','i','n','d','o','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define REBARCLASSNAMEW L"ReBarWindow32"
+#else
+static const WCHAR REBARCLASSNAMEW[] = { 'R','e','B','a','r',
+ 'W','i','n','d','o','w','3','2',0 };
+#endif
+#define REBARCLASSNAME WINELIB_NAME_AW(REBARCLASSNAME)
+
+
+#define RBIM_IMAGELIST 0x00000001
+
+#define RBBIM_STYLE 0x00000001
+#define RBBIM_COLORS 0x00000002
+#define RBBIM_TEXT 0x00000004
+#define RBBIM_IMAGE 0x00000008
+#define RBBIM_CHILD 0x00000010
+#define RBBIM_CHILDSIZE 0x00000020
+#define RBBIM_SIZE 0x00000040
+#define RBBIM_BACKGROUND 0x00000080
+#define RBBIM_ID 0x00000100
+#define RBBIM_IDEALSIZE 0x00000200
+#define RBBIM_LPARAM 0x00000400
+#define RBBIM_HEADERSIZE 0x00000800
+
+#define RBBS_BREAK 0x00000001
+#define RBBS_FIXEDSIZE 0x00000002
+#define RBBS_CHILDEDGE 0x00000004
+#define RBBS_HIDDEN 0x00000008
+#define RBBS_NOVERT 0x00000010
+#define RBBS_FIXEDBMP 0x00000020
+#define RBBS_VARIABLEHEIGHT 0x00000040
+#define RBBS_GRIPPERALWAYS 0x00000080
+#define RBBS_NOGRIPPER 0x00000100
+#define RBBS_USECHEVRON 0x00000200
+#define RBBS_HIDETITLE 0x00000400
+#define RBBS_TOPALIGN 0x00000800
+
+#define RBNM_ID 0x00000001
+#define RBNM_STYLE 0x00000002
+#define RBNM_LPARAM 0x00000004
+
+#define RBHT_NOWHERE 0x0001
+#define RBHT_CAPTION 0x0002
+#define RBHT_CLIENT 0x0003
+#define RBHT_GRABBER 0x0004
+#define RBHT_CHEVRON 0x0008
+
+#define RB_INSERTBANDA (WM_USER+1)
+#define RB_INSERTBANDW (WM_USER+10)
+#define RB_INSERTBAND WINELIB_NAME_AW(RB_INSERTBAND)
+#define RB_DELETEBAND (WM_USER+2)
+#define RB_GETBARINFO (WM_USER+3)
+#define RB_SETBARINFO (WM_USER+4)
+#define RB_SETBANDINFOA (WM_USER+6)
+#define RB_SETBANDINFOW (WM_USER+11)
+#define RB_SETBANDINFO WINELIB_NAME_AW(RB_SETBANDINFO)
+#define RB_SETPARENT (WM_USER+7)
+#define RB_HITTEST (WM_USER+8)
+#define RB_GETRECT (WM_USER+9)
+#define RB_GETBANDCOUNT (WM_USER+12)
+#define RB_GETROWCOUNT (WM_USER+13)
+#define RB_GETROWHEIGHT (WM_USER+14)
+#define RB_IDTOINDEX (WM_USER+16)
+#define RB_GETTOOLTIPS (WM_USER+17)
+#define RB_SETTOOLTIPS (WM_USER+18)
+#define RB_SETBKCOLOR (WM_USER+19)
+#define RB_GETBKCOLOR (WM_USER+20)
+#define RB_SETTEXTCOLOR (WM_USER+21)
+#define RB_GETTEXTCOLOR (WM_USER+22)
+#define RB_SIZETORECT (WM_USER+23)
+#define RB_BEGINDRAG (WM_USER+24)
+#define RB_ENDDRAG (WM_USER+25)
+#define RB_DRAGMOVE (WM_USER+26)
+#define RB_GETBARHEIGHT (WM_USER+27)
+#define RB_GETBANDINFOW (WM_USER+28)
+#define RB_GETBANDINFOA (WM_USER+29)
+#define RB_GETBANDINFO WINELIB_NAME_AW(RB_GETBANDINFO)
+#define RB_MINIMIZEBAND (WM_USER+30)
+#define RB_MAXIMIZEBAND (WM_USER+31)
+#define RB_GETBANDBORDERS (WM_USER+34)
+#define RB_SHOWBAND (WM_USER+35)
+#define RB_SETPALETTE (WM_USER+37)
+#define RB_GETPALETTE (WM_USER+38)
+#define RB_MOVEBAND (WM_USER+39)
+#define RB_GETBANDMARGINS (WM_USER+40)
+#define RB_PUSHCHEVRON (WM_USER+43)
+#define RB_GETDROPTARGET CCM_GETDROPTARGET
+#define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME
+#define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME
+#define RB_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define RB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define RB_SETWINDOWTHEME CCM_SETWINDOWTHEME
+
+#define RBN_FIRST (0U-831U)
+#define RBN_LAST (0U-859U)
+#define RBN_HEIGHTCHANGE (RBN_FIRST-0)
+#define RBN_GETOBJECT (RBN_FIRST-1)
+#define RBN_LAYOUTCHANGED (RBN_FIRST-2)
+#define RBN_AUTOSIZE (RBN_FIRST-3)
+#define RBN_BEGINDRAG (RBN_FIRST-4)
+#define RBN_ENDDRAG (RBN_FIRST-5)
+#define RBN_DELETINGBAND (RBN_FIRST-6)
+#define RBN_DELETEDBAND (RBN_FIRST-7)
+#define RBN_CHILDSIZE (RBN_FIRST-8)
+#define RBN_CHEVRONPUSHED (RBN_FIRST-10)
+#define RBN_MINMAX (RBN_FIRST-21)
+#define RBN_AUTOBREAK (RBN_FIRST-22)
+
+typedef struct tagREBARINFO
+{
+ UINT cbSize;
+ UINT fMask;
+ HIMAGELIST himl;
+} REBARINFO, *LPREBARINFO;
+
+typedef struct tagREBARBANDINFOA
+{
+ UINT cbSize;
+ UINT fMask;
+ UINT fStyle;
+ COLORREF clrFore;
+ COLORREF clrBack;
+ LPSTR lpText;
+ UINT cch;
+ INT iImage;
+ HWND hwndChild;
+ UINT cxMinChild;
+ UINT cyMinChild;
+ UINT cx;
+ HBITMAP hbmBack;
+ UINT wID;
+ UINT cyChild;
+ UINT cyMaxChild;
+ UINT cyIntegral;
+ UINT cxIdeal;
+ LPARAM lParam;
+ UINT cxHeader;
+ /* _WIN32_WINNT >= 0x0600 */
+ RECT rcChevronLocation;
+ UINT uChevronState;
+} REBARBANDINFOA, *LPREBARBANDINFOA;
+
+typedef REBARBANDINFOA const *LPCREBARBANDINFOA;
+
+typedef struct tagREBARBANDINFOW
+{
+ UINT cbSize;
+ UINT fMask;
+ UINT fStyle;
+ COLORREF clrFore;
+ COLORREF clrBack;
+ LPWSTR lpText;
+ UINT cch;
+ INT iImage;
+ HWND hwndChild;
+ UINT cxMinChild;
+ UINT cyMinChild;
+ UINT cx;
+ HBITMAP hbmBack;
+ UINT wID;
+ UINT cyChild;
+ UINT cyMaxChild;
+ UINT cyIntegral;
+ UINT cxIdeal;
+ LPARAM lParam;
+ UINT cxHeader;
+ /* _WIN32_WINNT >= 0x0600 */
+ RECT rcChevronLocation;
+ UINT uChevronState;
+} REBARBANDINFOW, *LPREBARBANDINFOW;
+
+typedef REBARBANDINFOW const *LPCREBARBANDINFOW;
+
+#define REBARBANDINFO WINELIB_NAME_AW(REBARBANDINFO)
+#define LPREBARBANDINFO WINELIB_NAME_AW(LPREBARBANDINFO)
+#define LPCREBARBANDINFO WINELIB_NAME_AW(LPCREBARBANDINFO)
+
+#define REBARBANDINFOA_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, wID)
+#define REBARBANDINFOW_V3_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, wID)
+#define REBARBANDINFO_V3_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), wID)
+#define REBARBANDINFOA_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOA, cxHeader)
+#define REBARBANDINFOW_V6_SIZE CCSIZEOF_STRUCT(REBARBANDINFOW, cxHeader)
+#define REBARBANDINFO_V6_SIZE CCSIZEOF_STRUCT(WINELIB_NAME_AW(REBARBANDINFO), cxHeader)
+
+typedef struct tagNMREBARCHILDSIZE
+{
+ NMHDR hdr;
+ UINT uBand;
+ UINT wID;
+ RECT rcChild;
+ RECT rcBand;
+} NMREBARCHILDSIZE, *LPNMREBARCHILDSIZE;
+
+typedef struct tagNMREBAR
+{
+ NMHDR hdr;
+ DWORD dwMask;
+ UINT uBand;
+ UINT fStyle;
+ UINT wID;
+ LPARAM lParam;
+} NMREBAR, *LPNMREBAR;
+
+typedef struct tagNMRBAUTOSIZE
+{
+ NMHDR hdr;
+ BOOL fChanged;
+ RECT rcTarget;
+ RECT rcActual;
+} NMRBAUTOSIZE, *LPNMRBAUTOSIZE;
+
+typedef struct tagNMREBARCHEVRON
+{
+ NMHDR hdr;
+ UINT uBand;
+ UINT wID;
+ LPARAM lParam;
+ RECT rc;
+ LPARAM lParamNM;
+} NMREBARCHEVRON, *LPNMREBARCHEVRON;
+
+typedef struct _RB_HITTESTINFO
+{
+ POINT pt;
+ UINT flags;
+ INT iBand;
+} RBHITTESTINFO, *LPRBHITTESTINFO;
+
+#define RBAB_AUTOSIZE 0x0001
+#define RBAB_ADDBAND 0x0002
+
+typedef struct tagNMREBARAUTOBREAK
+{
+ NMHDR hdr;
+ UINT uBand;
+ UINT wID;
+ LPARAM lParam;
+ UINT uMsg;
+ UINT fStyleCurrent;
+ BOOL fAutoBreak;
+} NMREBARAUTOBREAK, *LPNMREBARAUTOBREAK;
+
+
+/* Trackbar control */
+
+#define TRACKBAR_CLASSA "msctls_trackbar32"
+#if defined(__GNUC__)
+# define TRACKBAR_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+ 't','r','a','c','k','b','a','r','3','2',0 }
+#elif defined(_MSC_VER)
+# define TRACKBAR_CLASSW L"msctls_trackbar32"
+#else
+static const WCHAR TRACKBAR_CLASSW[] = { 'm','s','c','t','l','s','_',
+ 't','r','a','c','k','b','a','r','3','2',0 };
+#endif
+#define TRACKBAR_CLASS WINELIB_NAME_AW(TRACKBAR_CLASS)
+
+
+#define TBTS_TOP 0
+#define TBTS_LEFT 1
+#define TBTS_BOTTOM 2
+#define TBTS_RIGHT 3
+
+#define TB_LINEUP 0
+#define TB_LINEDOWN 1
+#define TB_PAGEUP 2
+#define TB_PAGEDOWN 3
+#define TB_THUMBPOSITION 4
+#define TB_THUMBTRACK 5
+#define TB_TOP 6
+#define TB_BOTTOM 7
+#define TB_ENDTRACK 8
+
+#define TBCD_TICS 0x0001
+#define TBCD_THUMB 0x0002
+#define TBCD_CHANNEL 0x0003
+
+#define TBM_GETPOS (WM_USER)
+#define TBM_GETRANGEMIN (WM_USER+1)
+#define TBM_GETRANGEMAX (WM_USER+2)
+#define TBM_GETTIC (WM_USER+3)
+#define TBM_SETTIC (WM_USER+4)
+#define TBM_SETPOS (WM_USER+5)
+#define TBM_SETRANGE (WM_USER+6)
+#define TBM_SETRANGEMIN (WM_USER+7)
+#define TBM_SETRANGEMAX (WM_USER+8)
+#define TBM_CLEARTICS (WM_USER+9)
+#define TBM_SETSEL (WM_USER+10)
+#define TBM_SETSELSTART (WM_USER+11)
+#define TBM_SETSELEND (WM_USER+12)
+#define TBM_GETPTICS (WM_USER+14)
+#define TBM_GETTICPOS (WM_USER+15)
+#define TBM_GETNUMTICS (WM_USER+16)
+#define TBM_GETSELSTART (WM_USER+17)
+#define TBM_GETSELEND (WM_USER+18)
+#define TBM_CLEARSEL (WM_USER+19)
+#define TBM_SETTICFREQ (WM_USER+20)
+#define TBM_SETPAGESIZE (WM_USER+21)
+#define TBM_GETPAGESIZE (WM_USER+22)
+#define TBM_SETLINESIZE (WM_USER+23)
+#define TBM_GETLINESIZE (WM_USER+24)
+#define TBM_GETTHUMBRECT (WM_USER+25)
+#define TBM_GETCHANNELRECT (WM_USER+26)
+#define TBM_SETTHUMBLENGTH (WM_USER+27)
+#define TBM_GETTHUMBLENGTH (WM_USER+28)
+#define TBM_SETTOOLTIPS (WM_USER+29)
+#define TBM_GETTOOLTIPS (WM_USER+30)
+#define TBM_SETTIPSIDE (WM_USER+31)
+#define TBM_SETBUDDY (WM_USER+32)
+#define TBM_GETBUDDY (WM_USER+33)
+#define TBM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TBM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+
+
+/* Pager control */
+
+#define WC_PAGESCROLLERA "SysPager"
+#if defined(__GNUC__)
+# define WC_PAGESCROLLERW (const WCHAR []){ 'S','y','s','P','a','g','e','r',0 }
+#elif defined(_MSC_VER)
+# define WC_PAGESCROLLERW L"SysPager"
+#else
+static const WCHAR WC_PAGESCROLLERW[] = { 'S','y','s','P','a','g','e','r',0 };
+#endif
+#define WC_PAGESCROLLER WINELIB_NAME_AW(WC_PAGESCROLLER)
+
+
+#define PGF_INVISIBLE 0
+#define PGF_NORMAL 1
+#define PGF_GRAYED 2
+#define PGF_DEPRESSED 4
+#define PGF_HOT 8
+
+#define PGB_TOPORLEFT 0
+#define PGB_BOTTOMORRIGHT 1
+
+/* only used with PGN_SCROLL */
+#define PGF_SCROLLUP 1
+#define PGF_SCROLLDOWN 2
+#define PGF_SCROLLLEFT 4
+#define PGF_SCROLLRIGHT 8
+
+#define PGK_SHIFT 1
+#define PGK_CONTROL 2
+#define PGK_MENU 4
+
+/* only used with PGN_CALCSIZE */
+#define PGF_CALCWIDTH 1
+#define PGF_CALCHEIGHT 2
+
+#define PGM_FIRST 0x1400
+#define PGM_SETCHILD (PGM_FIRST+1)
+#define PGM_RECALCSIZE (PGM_FIRST+2)
+#define PGM_FORWARDMOUSE (PGM_FIRST+3)
+#define PGM_SETBKCOLOR (PGM_FIRST+4)
+#define PGM_GETBKCOLOR (PGM_FIRST+5)
+#define PGM_SETBORDER (PGM_FIRST+6)
+#define PGM_GETBORDER (PGM_FIRST+7)
+#define PGM_SETPOS (PGM_FIRST+8)
+#define PGM_GETPOS (PGM_FIRST+9)
+#define PGM_SETBUTTONSIZE (PGM_FIRST+10)
+#define PGM_GETBUTTONSIZE (PGM_FIRST+11)
+#define PGM_GETBUTTONSTATE (PGM_FIRST+12)
+#define PGM_GETDROPTARGET CCM_GETDROPTARGET
+
+#define PGN_FIRST (0U-900U)
+#define PGN_LAST (0U-950U)
+#define PGN_SCROLL (PGN_FIRST-1)
+#define PGN_CALCSIZE (PGN_FIRST-2)
+
+#include <pshpack1.h>
+
+typedef struct
+{
+ NMHDR hdr;
+ WORD fwKeys;
+ RECT rcParent;
+ INT iDir;
+ INT iXpos;
+ INT iYpos;
+ INT iScroll;
+} NMPGSCROLL, *LPNMPGSCROLL;
+
+#include <poppack.h>
+
+typedef struct
+{
+ NMHDR hdr;
+ DWORD dwFlag;
+ INT iWidth;
+ INT iHeight;
+} NMPGCALCSIZE, *LPNMPGCALCSIZE;
+
+
+/* Treeview control */
+
+#define WC_TREEVIEWA "SysTreeView32"
+#if defined(__GNUC__)
+# define WC_TREEVIEWW (const WCHAR []){ 'S','y','s', \
+ 'T','r','e','e','V','i','e','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_TREEVIEWW L"SysTreeView32"
+#else
+static const WCHAR WC_TREEVIEWW[] = { 'S','y','s',
+ 'T','r','e','e','V','i','e','w','3','2',0 };
+#endif
+#define WC_TREEVIEW WINELIB_NAME_AW(WC_TREEVIEW)
+
+#define TVSIL_NORMAL 0
+#define TVSIL_STATE 2
+
+#define TV_FIRST 0x1100
+#define TVM_INSERTITEMA (TV_FIRST+0)
+#define TVM_INSERTITEMW (TV_FIRST+50)
+#define TVM_INSERTITEM WINELIB_NAME_AW(TVM_INSERTITEM)
+#define TVM_DELETEITEM (TV_FIRST+1)
+#define TVM_EXPAND (TV_FIRST+2)
+#define TVM_GETITEMRECT (TV_FIRST+4)
+#define TVM_GETCOUNT (TV_FIRST+5)
+#define TVM_GETINDENT (TV_FIRST+6)
+#define TVM_SETINDENT (TV_FIRST+7)
+#define TVM_GETIMAGELIST (TV_FIRST+8)
+#define TVM_SETIMAGELIST (TV_FIRST+9)
+#define TVM_GETNEXTITEM (TV_FIRST+10)
+#define TVM_SELECTITEM (TV_FIRST+11)
+#define TVM_GETITEMA (TV_FIRST+12)
+#define TVM_GETITEMW (TV_FIRST+62)
+#define TVM_GETITEM WINELIB_NAME_AW(TVM_GETITEM)
+#define TVM_SETITEMA (TV_FIRST+13)
+#define TVM_SETITEMW (TV_FIRST+63)
+#define TVM_SETITEM WINELIB_NAME_AW(TVM_SETITEM)
+#define TVM_EDITLABELA (TV_FIRST+14)
+#define TVM_EDITLABELW (TV_FIRST+65)
+#define TVM_EDITLABEL WINELIB_NAME_AW(TVM_EDITLABEL)
+#define TVM_GETEDITCONTROL (TV_FIRST+15)
+#define TVM_GETVISIBLECOUNT (TV_FIRST+16)
+#define TVM_HITTEST (TV_FIRST+17)
+#define TVM_CREATEDRAGIMAGE (TV_FIRST+18)
+#define TVM_SORTCHILDREN (TV_FIRST+19)
+#define TVM_ENSUREVISIBLE (TV_FIRST+20)
+#define TVM_SORTCHILDRENCB (TV_FIRST+21)
+#define TVM_ENDEDITLABELNOW (TV_FIRST+22)
+#define TVM_GETISEARCHSTRINGA (TV_FIRST+23)
+#define TVM_GETISEARCHSTRINGW (TV_FIRST+64)
+#define TVM_GETISEARCHSTRING WINELIB_NAME_AW(TVM_GETISEARCHSTRING)
+#define TVM_SETTOOLTIPS (TV_FIRST+24)
+#define TVM_GETTOOLTIPS (TV_FIRST+25)
+#define TVM_SETINSERTMARK (TV_FIRST+26)
+#define TVM_SETITEMHEIGHT (TV_FIRST+27)
+#define TVM_GETITEMHEIGHT (TV_FIRST+28)
+#define TVM_SETBKCOLOR (TV_FIRST+29)
+#define TVM_SETTEXTCOLOR (TV_FIRST+30)
+#define TVM_GETBKCOLOR (TV_FIRST+31)
+#define TVM_GETTEXTCOLOR (TV_FIRST+32)
+#define TVM_SETSCROLLTIME (TV_FIRST+33)
+#define TVM_GETSCROLLTIME (TV_FIRST+34)
+#define TVM_UNKNOWN35 (TV_FIRST+35)
+#define TVM_UNKNOWN36 (TV_FIRST+36)
+#define TVM_SETINSERTMARKCOLOR (TV_FIRST+37)
+#define TVM_GETINSERTMARKCOLOR (TV_FIRST+38)
+#define TVM_GETITEMSTATE (TV_FIRST+39)
+#define TVM_SETLINECOLOR (TV_FIRST+40)
+#define TVM_GETLINECOLOR (TV_FIRST+41)
+#define TVM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TVM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define TVM_MAPACCIDTOHTREEITEM (TV_FIRST + 42)
+#define TVM_MAPHTREEITEMTOACCID (TV_FIRST + 43)
+#define TVM_SETEXTENDEDSTYLE (TV_FIRST + 44)
+#define TVM_GETEXTENDEDSTYLE (TV_FIRST + 45)
+#define TVM_SETAUTOSCROLLINFO (TV_FIRST + 59)
+#define TVM_GETSELECTEDCOUNT (TV_FIRST + 70)
+#define TVM_SHOWINFOTIP (TV_FIRST + 71)
+#define TVM_GETITEMPARTRECT (TV_FIRST + 72)
+
+
+#define TVN_FIRST (0U-400U)
+#define TVN_LAST (0U-499U)
+
+#define TVN_SELCHANGINGA (TVN_FIRST-1)
+#define TVN_SELCHANGINGW (TVN_FIRST-50)
+#define TVN_SELCHANGING WINELIB_NAME_AW(TVN_SELCHANGING)
+
+#define TVN_SELCHANGEDA (TVN_FIRST-2)
+#define TVN_SELCHANGEDW (TVN_FIRST-51)
+#define TVN_SELCHANGED WINELIB_NAME_AW(TVN_SELCHANGED)
+
+#define TVN_GETDISPINFOA (TVN_FIRST-3)
+#define TVN_GETDISPINFOW (TVN_FIRST-52)
+#define TVN_GETDISPINFO WINELIB_NAME_AW(TVN_GETDISPINFO)
+
+#define TVN_SETDISPINFOA (TVN_FIRST-4)
+#define TVN_SETDISPINFOW (TVN_FIRST-53)
+#define TVN_SETDISPINFO WINELIB_NAME_AW(TVN_SETDISPINFO)
+
+#define TVN_ITEMEXPANDINGA (TVN_FIRST-5)
+#define TVN_ITEMEXPANDINGW (TVN_FIRST-54)
+#define TVN_ITEMEXPANDING WINELIB_NAME_AW(TVN_ITEMEXPANDING)
+
+#define TVN_ITEMEXPANDEDA (TVN_FIRST-6)
+#define TVN_ITEMEXPANDEDW (TVN_FIRST-55)
+#define TVN_ITEMEXPANDED WINELIB_NAME_AW(TVN_ITEMEXPANDED)
+
+#define TVN_BEGINDRAGA (TVN_FIRST-7)
+#define TVN_BEGINDRAGW (TVN_FIRST-56)
+#define TVN_BEGINDRAG WINELIB_NAME_AW(TVN_BEGINDRAG)
+
+#define TVN_BEGINRDRAGA (TVN_FIRST-8)
+#define TVN_BEGINRDRAGW (TVN_FIRST-57)
+#define TVN_BEGINRDRAG WINELIB_NAME_AW(TVN_BEGINRDRAG)
+
+#define TVN_DELETEITEMA (TVN_FIRST-9)
+#define TVN_DELETEITEMW (TVN_FIRST-58)
+#define TVN_DELETEITEM WINELIB_NAME_AW(TVN_DELETEITEM)
+
+#define TVN_BEGINLABELEDITA (TVN_FIRST-10)
+#define TVN_BEGINLABELEDITW (TVN_FIRST-59)
+#define TVN_BEGINLABELEDIT WINELIB_NAME_AW(TVN_BEGINLABELEDIT)
+
+#define TVN_ENDLABELEDITA (TVN_FIRST-11)
+#define TVN_ENDLABELEDITW (TVN_FIRST-60)
+#define TVN_ENDLABELEDIT WINELIB_NAME_AW(TVN_ENDLABELEDIT)
+
+#define TVN_KEYDOWN (TVN_FIRST-12)
+
+#define TVN_GETINFOTIPA (TVN_FIRST-13)
+#define TVN_GETINFOTIPW (TVN_FIRST-14)
+#define TVN_GETINFOTIP WINELIB_NAME_AW(TVN_GETINFOTIP)
+
+#define TVN_SINGLEEXPAND (TVN_FIRST-15)
+
+
+
+
+
+#define TVIF_TEXT 0x0001
+#define TVIF_IMAGE 0x0002
+#define TVIF_PARAM 0x0004
+#define TVIF_STATE 0x0008
+#define TVIF_HANDLE 0x0010
+#define TVIF_SELECTEDIMAGE 0x0020
+#define TVIF_CHILDREN 0x0040
+#define TVIF_INTEGRAL 0x0080
+#define TVIF_STATEEX 0x0100
+#define TVIF_EXPANDEDIMAGE 0x0200
+#define TVIF_DI_SETITEM 0x1000
+
+#define TVI_ROOT ((HTREEITEM)-65536)
+#define TVI_FIRST ((HTREEITEM)-65535)
+#define TVI_LAST ((HTREEITEM)-65534)
+#define TVI_SORT ((HTREEITEM)-65533)
+
+#define TVIS_FOCUSED 0x0001
+#define TVIS_SELECTED 0x0002
+#define TVIS_CUT 0x0004
+#define TVIS_DROPHILITED 0x0008
+#define TVIS_BOLD 0x0010
+#define TVIS_EXPANDED 0x0020
+#define TVIS_EXPANDEDONCE 0x0040
+#define TVIS_EXPANDPARTIAL 0x0080
+#define TVIS_OVERLAYMASK 0x0f00
+#define TVIS_STATEIMAGEMASK 0xf000
+#define TVIS_USERMASK 0xf000
+
+#define TVIS_EX_FLAT 0x0001
+#define TVIS_EX_DISABLED 0x0002
+/* TVIS_EX_HWND is listed on MSDN but apparently not in any header. */
+#define TVIS_EX_ALL 0x0002
+
+#define TVHT_NOWHERE 0x0001
+#define TVHT_ONITEMICON 0x0002
+#define TVHT_ONITEMLABEL 0x0004
+#define TVHT_ONITEMINDENT 0x0008
+#define TVHT_ONITEMBUTTON 0x0010
+#define TVHT_ONITEMRIGHT 0x0020
+#define TVHT_ONITEMSTATEICON 0x0040
+#define TVHT_ONITEM 0x0046
+#define TVHT_ABOVE 0x0100
+#define TVHT_BELOW 0x0200
+#define TVHT_TORIGHT 0x0400
+#define TVHT_TOLEFT 0x0800
+
+#define TVS_SHAREDIMAGELISTS 0x0000
+#define TVS_PRIVATEIMAGELISTS 0x0400
+
+#define TVS_EX_MULTISELECT 0x0002
+#define TVS_EX_DOUBLEBUFFER 0x0004
+#define TVS_EX_NOINDENTSTATE 0x0008
+#define TVS_EX_RICHTOOLTIP 0x0010
+#define TVS_EX_AUTOHSCROLL 0x0020
+#define TVS_EX_FADEINOUTEXPANDOS 0x0040
+#define TVS_EX_PARTIALCHECKBOXES 0x0080
+#define TVS_EX_EXCLUSIONCHECKBOXES 0x0100
+#define TVS_EX_DIMMEDCHECKBOXES 0x0200
+#define TVS_EX_DRAWIMAGEASYNC 0x0400
+
+#define TVE_COLLAPSE 0x0001
+#define TVE_EXPAND 0x0002
+#define TVE_TOGGLE 0x0003
+#define TVE_EXPANDPARTIAL 0x4000
+#define TVE_COLLAPSERESET 0x8000
+
+#define TVGN_ROOT 0
+#define TVGN_NEXT 1
+#define TVGN_PREVIOUS 2
+#define TVGN_PARENT 3
+#define TVGN_CHILD 4
+#define TVGN_FIRSTVISIBLE 5
+#define TVGN_NEXTVISIBLE 6
+#define TVGN_PREVIOUSVISIBLE 7
+#define TVGN_DROPHILITE 8
+#define TVGN_CARET 9
+#define TVGN_LASTVISIBLE 10
+#define TVSI_NOSINGLEEXPAND 0x8000
+
+#define TVC_UNKNOWN 0x00
+#define TVC_BYMOUSE 0x01
+#define TVC_BYKEYBOARD 0x02
+
+
+typedef struct _TREEITEM *HTREEITEM;
+
+typedef struct {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ INT iSelectedImage;
+ INT cChildren;
+ LPARAM lParam;
+} TVITEMA, *LPTVITEMA;
+
+typedef struct {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ INT iSelectedImage;
+ INT cChildren;
+ LPARAM lParam;
+} TVITEMW, *LPTVITEMW;
+
+#define TV_ITEMA TVITEMA
+#define TV_ITEMW TVITEMW
+#define LPTV_ITEMA LPTVITEMA
+#define LPTV_ITEMW LPTVITEMW
+
+#define TVITEM WINELIB_NAME_AW(TVITEM)
+#define LPTVITEM WINELIB_NAME_AW(LPTVITEM)
+#define TV_ITEM WINELIB_NAME_AW(TV_ITEM)
+#define LPTV_ITEM WINELIB_NAME_AW(LPTV_ITEM)
+
+typedef struct {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ INT iSelectedImage;
+ INT cChildren;
+ LPARAM lParam;
+ INT iIntegral;
+ UINT uStateEx; /* _WIN32_IE >= 0x600 */
+ HWND hwnd; /* _WIN32_IE >= 0x600 */
+ INT iExpandedImage; /* _WIN32_IE >= 0x600 */
+} TVITEMEXA, *LPTVITEMEXA;
+
+typedef struct {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ INT iSelectedImage;
+ INT cChildren;
+ LPARAM lParam;
+ INT iIntegral;
+ UINT uStateEx; /* _WIN32_IE >= 0x600 */
+ HWND hwnd; /* _WIN32_IE >= 0x600 */
+ INT iExpandedImage; /* _WIN32_IE >= 0x600 */
+} TVITEMEXW, *LPTVITEMEXW;
+
+#define TVITEMEX WINELIB_NAME_AW(TVITEMEX)
+#define LPTVITEMEX WINELIB_NAME_AW(LPTVITEMEX)
+
+typedef struct tagTVINSERTSTRUCTA {
+ HTREEITEM hParent;
+ HTREEITEM hInsertAfter;
+ union {
+ TVITEMEXA itemex;
+ TVITEMA item;
+ } DUMMYUNIONNAME;
+} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;
+
+typedef struct tagTVINSERTSTRUCTW {
+ HTREEITEM hParent;
+ HTREEITEM hInsertAfter;
+ union {
+ TVITEMEXW itemex;
+ TVITEMW item;
+ } DUMMYUNIONNAME;
+} TVINSERTSTRUCTW, *LPTVINSERTSTRUCTW;
+
+#define TVINSERTSTRUCT WINELIB_NAME_AW(TVINSERTSTRUCT)
+#define LPTVINSERTSTRUCT WINELIB_NAME_AW(LPTVINSERTSTRUCT)
+
+#define TVINSERTSTRUCT_V1_SIZEA CCSIZEOF_STRUCT(TVINSERTSTRUCTA, item)
+#define TVINSERTSTRUCT_V1_SIZEW CCSIZEOF_STRUCT(TVINSERTSTRUCTW, item)
+#define TVINSERTSTRUCT_V1_SIZE WINELIB_NAME_AW(TVINSERTSTRUCT_V1_SIZE)
+
+#define TV_INSERTSTRUCT TVINSERTSTRUCT
+#define TV_INSERTSTRUCTA TVINSERTSTRUCTA
+#define TV_INSERTSTRUCTW TVINSERTSTRUCTW
+#define LPTV_INSERTSTRUCT LPTVINSERTSTRUCT
+#define LPTV_INSERTSTRUCTA LPTVINSERTSTRUCTA
+#define LPTV_INSERTSTRUCTW LPTVINSERTSTRUCTW
+
+
+
+typedef struct tagNMTREEVIEWA {
+ NMHDR hdr;
+ UINT action;
+ TVITEMA itemOld;
+ TVITEMA itemNew;
+ POINT ptDrag;
+} NMTREEVIEWA, *LPNMTREEVIEWA;
+
+typedef struct tagNMTREEVIEWW {
+ NMHDR hdr;
+ UINT action;
+ TVITEMW itemOld;
+ TVITEMW itemNew;
+ POINT ptDrag;
+} NMTREEVIEWW, *LPNMTREEVIEWW;
+
+#define NMTREEVIEW WINELIB_NAME_AW(NMTREEVIEW)
+#define NM_TREEVIEW WINELIB_NAME_AW(NMTREEVIEW)
+#define NM_TREEVIEWA NMTREEVIEWA
+#define NM_TREEVIEWW NMTREEVIEWW
+#define LPNMTREEVIEW WINELIB_NAME_AW(LPNMTREEVIEW)
+
+#define LPNM_TREEVIEW LPNMTREEVIEW
+#define LPNM_TREEVIEWA LPNMTREEVIEWA
+#define LPNM_TREEVIEWW LPNMTREEVIEWW
+
+typedef struct tagTVDISPINFOA {
+ NMHDR hdr;
+ TVITEMA item;
+} NMTVDISPINFOA, *LPNMTVDISPINFOA;
+
+typedef struct tagTVDISPINFOW {
+ NMHDR hdr;
+ TVITEMW item;
+} NMTVDISPINFOW, *LPNMTVDISPINFOW;
+
+typedef struct tagTVDISPINFOEXA {
+ NMHDR hdr;
+ TVITEMEXA item;
+} NMTVDISPINFOEXA, *LPNMTVDISPINFOEXA;
+
+typedef struct tagTVDISPINFOEXW {
+ NMHDR hdr;
+ TVITEMEXW item;
+} NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW;
+
+#define NMTVDISPINFO WINELIB_NAME_AW(NMTVDISPINFO)
+#define LPNMTVDISPINFO WINELIB_NAME_AW(LPNMTVDISPINFO)
+#define NMTVDISPINFOEX WINELIB_NAME_AW(NMTVDISPINFOEX)
+#define LPNMTVDISPINFOEX WINELIB_NAME_AW(LPNMTVDISPINFOEX)
+#define TV_DISPINFOA NMTVDISPINFOA
+#define TV_DISPINFOW NMTVDISPINFOW
+#define TV_DISPINFO NMTVDISPINFO
+
+typedef INT (CALLBACK *PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);
+
+typedef struct tagTVSORTCB
+{
+ HTREEITEM hParent;
+ PFNTVCOMPARE lpfnCompare;
+ LPARAM lParam;
+} TVSORTCB, *LPTVSORTCB;
+
+#define TV_SORTCB TVSORTCB
+#define LPTV_SORTCB LPTVSORTCB
+
+typedef struct tagTVHITTESTINFO {
+ POINT pt;
+ UINT flags;
+ HTREEITEM hItem;
+} TVHITTESTINFO, *LPTVHITTESTINFO;
+
+#define TV_HITTESTINFO TVHITTESTINFO
+
+
+/* Custom Draw Treeview */
+
+#define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW, clrTextBk)
+
+#define TVCDRF_NOIMAGES 0x00010000
+
+typedef struct tagNMTVCUSTOMDRAW
+{
+ NMCUSTOMDRAW nmcd;
+ COLORREF clrText;
+ COLORREF clrTextBk;
+ INT iLevel; /* IE>0x0400 */
+} NMTVCUSTOMDRAW, *LPNMTVCUSTOMDRAW;
+
+/* Treeview tooltips */
+
+typedef struct tagNMTVGETINFOTIPA
+{
+ NMHDR hdr;
+ LPSTR pszText;
+ INT cchTextMax;
+ HTREEITEM hItem;
+ LPARAM lParam;
+} NMTVGETINFOTIPA, *LPNMTVGETINFOTIPA;
+
+typedef struct tagNMTVGETINFOTIPW
+{
+ NMHDR hdr;
+ LPWSTR pszText;
+ INT cchTextMax;
+ HTREEITEM hItem;
+ LPARAM lParam;
+} NMTVGETINFOTIPW, *LPNMTVGETINFOTIPW;
+
+#define NMTVGETINFOTIP WINELIB_NAME_AW(NMTVGETINFOTIP)
+#define LPNMTVGETINFOTIP WINELIB_NAME_AW(LPNMTVGETINFOTIP)
+
+#include <pshpack1.h>
+typedef struct tagTVKEYDOWN
+{
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} NMTVKEYDOWN, *LPNMTVKEYDOWN;
+#include <poppack.h>
+
+#define TV_KEYDOWN NMTVKEYDOWN
+
+#define TreeView_InsertItemA(hwnd, phdi) \
+ (HTREEITEM)SNDMSGA((hwnd), TVM_INSERTITEMA, 0, \
+ (LPARAM)(LPTVINSERTSTRUCTA)(phdi))
+#define TreeView_InsertItemW(hwnd,phdi) \
+ (HTREEITEM)SNDMSGW((hwnd), TVM_INSERTITEMW, 0, \
+ (LPARAM)(LPTVINSERTSTRUCTW)(phdi))
+#define TreeView_InsertItem WINELIB_NAME_AW(TreeView_InsertItem)
+
+#define TreeView_DeleteItem(hwnd, hItem) \
+ (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
+#define TreeView_DeleteAllItems(hwnd) \
+ (BOOL)SNDMSG((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)
+#define TreeView_Expand(hwnd, hitem, code) \
+ (BOOL)SNDMSG((hwnd), TVM_EXPAND, (WPARAM)code, \
+ (LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_GetItemRect(hwnd, hitem, prc, code) \
+ (*(HTREEITEM *)prc = (hitem), (BOOL)SNDMSG((hwnd), \
+ TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))
+
+#define TreeView_GetCount(hwnd) \
+ (UINT)SNDMSG((hwnd), TVM_GETCOUNT, 0, 0)
+#define TreeView_GetIndent(hwnd) \
+ (UINT)SNDMSG((hwnd), TVM_GETINDENT, 0, 0)
+#define TreeView_SetIndent(hwnd, indent) \
+ (BOOL)SNDMSG((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)
+
+#define TreeView_GetImageList(hwnd, iImage) \
+ (HIMAGELIST)SNDMSG((hwnd), TVM_GETIMAGELIST, iImage, 0)
+
+#define TreeView_SetImageList(hwnd, himl, iImage) \
+ (HIMAGELIST)SNDMSG((hwnd), TVM_SETIMAGELIST, iImage, \
+ (LPARAM)(HIMAGELIST)(himl))
+
+#define TreeView_GetNextItem(hwnd, hitem, code) \
+ (HTREEITEM)SNDMSG((hwnd), TVM_GETNEXTITEM, (WPARAM)code,\
+(LPARAM)(HTREEITEM) (hitem))
+
+#define TreeView_GetChild(hwnd, hitem) \
+ TreeView_GetNextItem(hwnd, hitem , TVGN_CHILD)
+#define TreeView_GetNextSibling(hwnd, hitem) \
+ TreeView_GetNextItem(hwnd, hitem , TVGN_NEXT)
+#define TreeView_GetPrevSibling(hwnd, hitem) \
+ TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUS)
+#define TreeView_GetParent(hwnd, hitem) \
+ TreeView_GetNextItem(hwnd, hitem , TVGN_PARENT)
+#define TreeView_GetFirstVisible(hwnd) \
+ TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE)
+#define TreeView_GetLastVisible(hwnd) \
+ TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)
+#define TreeView_GetNextVisible(hwnd, hitem) \
+ TreeView_GetNextItem(hwnd, hitem , TVGN_NEXTVISIBLE)
+#define TreeView_GetPrevVisible(hwnd, hitem) \
+ TreeView_GetNextItem(hwnd, hitem , TVGN_PREVIOUSVISIBLE)
+#define TreeView_GetSelection(hwnd) \
+ TreeView_GetNextItem(hwnd, NULL, TVGN_CARET)
+#define TreeView_GetDropHilight(hwnd) \
+ TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE)
+#define TreeView_GetRoot(hwnd) \
+ TreeView_GetNextItem(hwnd, NULL, TVGN_ROOT)
+#define TreeView_GetLastVisible(hwnd) \
+ TreeView_GetNextItem(hwnd, NULL, TVGN_LASTVISIBLE)
+
+
+#define TreeView_Select(hwnd, hitem, code) \
+ (BOOL)SNDMSG((hwnd), TVM_SELECTITEM, (WPARAM)(code), \
+(LPARAM)(HTREEITEM)(hitem))
+
+
+#define TreeView_SelectItem(hwnd, hitem) \
+ TreeView_Select(hwnd, hitem, TVGN_CARET)
+#define TreeView_SelectDropTarget(hwnd, hitem) \
+ TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)
+#define TreeView_SelectSetFirstVisible(hwnd, hitem) \
+ TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)
+
+
+#define TreeView_GetItemA(hwnd, pitem) \
+ (BOOL)SNDMSGA((hwnd), TVM_GETITEMA, 0, (LPARAM) (TVITEMA *)(pitem))
+#define TreeView_GetItemW(hwnd, pitem) \
+ (BOOL)SNDMSGW((hwnd), TVM_GETITEMW, 0, (LPARAM) (TVITEMW *)(pitem))
+#define TreeView_GetItem WINELIB_NAME_AW(TreeView_GetItem)
+
+#define TreeView_SetItemA(hwnd, pitem) \
+ (BOOL)SNDMSGA((hwnd), TVM_SETITEMA, 0, (LPARAM)(const TVITEMA *)(pitem))
+#define TreeView_SetItemW(hwnd, pitem) \
+ (BOOL)SNDMSGW((hwnd), TVM_SETITEMW, 0, (LPARAM)(const TVITEMW *)(pitem))
+#define TreeView_SetItem WINELIB_NAME_AW(TreeView_SetItem)
+
+#define TreeView_EditLabel(hwnd, hitem) \
+ (HWND)SNDMSG((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_GetEditControl(hwnd) \
+ (HWND)SNDMSG((hwnd), TVM_GETEDITCONTROL, 0, 0)
+
+#define TreeView_GetVisibleCount(hwnd) \
+ (UINT)SNDMSG((hwnd), TVM_GETVISIBLECOUNT, 0, 0)
+
+#define TreeView_HitTest(hwnd, lpht) \
+ (HTREEITEM)SNDMSG((hwnd), TVM_HITTEST, 0,\
+(LPARAM)(LPTVHITTESTINFO)(lpht))
+
+#define TreeView_CreateDragImage(hwnd, hitem) \
+ (HIMAGELIST)SNDMSG((hwnd), TVM_CREATEDRAGIMAGE, 0,\
+(LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_SortChildren(hwnd, hitem, recurse) \
+ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse,\
+(LPARAM)(HTREEITEM)(hitem))
+
+#define TreeView_EnsureVisible(hwnd, hitem) \
+ (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem))
+
+#define TreeView_SortChildrenCB(hwnd, psort, recurse) \
+ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \
+ (LPARAM)(LPTV_SORTCB)(psort))
+
+#define TreeView_EndEditLabelNow(hwnd, fCancel) \
+ (BOOL)SNDMSG((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)
+
+#define TreeView_GetISearchString(hwnd, lpsz) \
+ (BOOL)SNDMSG((hwnd), TVM_GETISEARCHSTRING, 0, \
+ (LPARAM)(LPTSTR)lpsz)
+
+#define TreeView_SetToolTips(hwnd, hwndTT) \
+ (HWND)SNDMSG((hwnd), TVM_SETTOOLTIPS, (WPARAM)(hwndTT), 0)
+
+#define TreeView_GetToolTips(hwnd) \
+ (HWND)SNDMSG((hwnd), TVM_GETTOOLTIPS, 0, 0)
+
+#define TreeView_SetItemHeight(hwnd, iHeight) \
+ (INT)SNDMSG((hwnd), TVM_SETITEMHEIGHT, (WPARAM)iHeight, 0)
+
+#define TreeView_GetItemHeight(hwnd) \
+ (INT)SNDMSG((hwnd), TVM_GETITEMHEIGHT, 0, 0)
+
+#define TreeView_SetBkColor(hwnd, clr) \
+ (COLORREF)SNDMSG((hwnd), TVM_SETBKCOLOR, 0, (LPARAM)clr)
+
+#define TreeView_SetTextColor(hwnd, clr) \
+ (COLORREF)SNDMSG((hwnd), TVM_SETTEXTCOLOR, 0, (LPARAM)clr)
+
+#define TreeView_GetBkColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), TVM_GETBKCOLOR, 0, 0)
+
+#define TreeView_GetTextColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), TVM_GETTEXTCOLOR, 0, 0)
+
+#define TreeView_SetScrollTime(hwnd, uTime) \
+ (UINT)SNDMSG((hwnd), TVM_SETSCROLLTIME, uTime, 0)
+
+#define TreeView_GetScrollTime(hwnd) \
+ (UINT)SNDMSG((hwnd), TVM_GETSCROLLTIME, 0, 0)
+
+#define TreeView_SetInsertMark(hwnd, hItem, fAfter) \
+ (BOOL)SNDMSG((hwnd), TVM_SETINSERTMARK, (WPARAM)(fAfter), \
+ (LPARAM) (hItem))
+
+#define TreeView_SetInsertMarkColor(hwnd, clr) \
+ (COLORREF)SNDMSG((hwnd), TVM_SETINSERTMARKCOLOR, 0, (LPARAM)clr)
+
+#define TreeView_GetInsertMarkColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), TVM_GETINSERTMARKCOLOR, 0, 0)
+
+#define TreeView_SetItemState(hwndTV, hti, data, _mask) \
+{ TVITEM _TVi; \
+ _TVi.mask = TVIF_STATE; \
+ _TVi.hItem = hti; \
+ _TVi.stateMask = _mask; \
+ _TVi.state = data; \
+ SNDMSG((hwndTV), TVM_SETITEM, 0, (LPARAM)&_TVi); \
+}
+
+#define TreeView_GetItemState(hwndTV, hti, mask) \
+ (UINT)SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), (LPARAM)(mask))
+#define TreeView_GetCheckState(hwndTV, hti) \
+ ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), \
+ TVIS_STATEIMAGEMASK))) >> 12) -1)
+
+#define TreeView_SetLineColor(hwnd, clr) \
+ (COLORREF)SNDMSG((hwnd), TVM_SETLINECOLOR, 0, (LPARAM)(clr))
+
+#define TreeView_GetLineColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), TVM_GETLINECOLOR, 0, 0)
+
+#define TreeView_MapAccIDToHTREEITEM(hwnd, id) \
+ (HTREEITEM)SNDMSG((hwnd), TVM_MAPACCIDTOHTREEITEM, id, 0)
+
+#define TreeView_MapHTREEITEMToAccID(hwnd, htreeitem) \
+ (UINT)SNDMSG((hwnd), TVM_MAPHTREEITEMTOACCID, (WPARAM)htreeitem, 0)
+
+#define TreeView_SetUnicodeFormat(hwnd, fUnicode) \
+ (BOOL)SNDMSG((hwnd), TVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+#define TreeView_GetUnicodeFormat(hwnd) \
+ (BOOL)SNDMSG((hwnd), TVM_GETUNICODEFORMAT, 0, 0)
+
+/* Listview control */
+
+#define WC_LISTVIEWA "SysListView32"
+#if defined(__GNUC__)
+# define WC_LISTVIEWW (const WCHAR []){ 'S','y','s', \
+ 'L','i','s','t','V','i','e','w','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_LISTVIEWW L"SysListView32"
+#else
+static const WCHAR WC_LISTVIEWW[] = { 'S','y','s',
+ 'L','i','s','t','V','i','e','w','3','2',0 };
+#endif
+#define WC_LISTVIEW WINELIB_NAME_AW(WC_LISTVIEW)
+
+#define LVSCW_AUTOSIZE -1
+#define LVSCW_AUTOSIZE_USEHEADER -2
+
+
+#define LVS_EX_GRIDLINES 0x0001
+#define LVS_EX_SUBITEMIMAGES 0x0002
+#define LVS_EX_CHECKBOXES 0x0004
+#define LVS_EX_TRACKSELECT 0x0008
+#define LVS_EX_HEADERDRAGDROP 0x0010
+#define LVS_EX_FULLROWSELECT 0x0020
+#define LVS_EX_ONECLICKACTIVATE 0x0040
+#define LVS_EX_TWOCLICKACTIVATE 0x0080
+#define LVS_EX_FLATSB 0x0100
+#define LVS_EX_REGIONAL 0x0200
+#define LVS_EX_INFOTIP 0x0400
+#define LVS_EX_UNDERLINEHOT 0x0800
+#define LVS_EX_UNDERLINECOLD 0x1000
+#define LVS_EX_MULTIWORKAREAS 0x2000
+#define LVS_EX_LABELTIP 0x4000
+#define LVS_EX_BORDERSELECT 0x8000
+#define LVS_EX_DOUBLEBUFFER 0x00010000
+#define LVS_EX_HIDELABELS 0x00020000
+#define LVS_EX_SINGLEROW 0x00040000
+#define LVS_EX_SNAPTOGRID 0x00080000
+#define LVS_EX_SIMPLESELECT 0x00100000
+#define LVS_EX_JUSTIFYCOLUMNS 0x00200000
+#define LVS_EX_TRANSPARENTBKGND 0x00400000
+#define LVS_EX_TRANSPARENTSHADOWTEXT 0x00800000
+#define LVS_EX_AUTOAUTOARRANGE 0x01000000
+#define LVS_EX_HEADERINALLVIEWS 0x02000000
+#define LVS_EX_AUTOCHECKSELECT 0x08000000
+#define LVS_EX_AUTOSIZECOLUMNS 0x10000000
+#define LVS_EX_COLUMNSNAPPOINTS 0x40000000
+#define LVS_EX_COLUMNOVERFLOW 0x80000000
+
+#define LVCF_FMT 0x0001
+#define LVCF_WIDTH 0x0002
+#define LVCF_TEXT 0x0004
+#define LVCF_SUBITEM 0x0008
+#define LVCF_IMAGE 0x0010
+#define LVCF_ORDER 0x0020
+#define LVCF_MINWIDTH 0x0040
+
+#define LVCFMT_LEFT 0x0000
+#define LVCFMT_RIGHT 0x0001
+#define LVCFMT_CENTER 0x0002
+#define LVCFMT_JUSTIFYMASK 0x0003
+#define LVCFMT_FIXED_WIDTH 0x0100
+#define LVCFMT_IMAGE 0x0800
+#define LVCFMT_BITMAP_ON_RIGHT 0x1000
+#define LVCFMT_COL_HAS_IMAGES 0x8000
+#define LVCFMT_NO_DPI_SCALE 0x00040000
+#define LVCFMT_FIXED_RATIO 0x00080000
+#define LVCFMT_LINE_BREAK 0x00100000
+#define LVCFMT_FILL 0x00200000
+#define LVCFMT_WRAP 0x00400000
+#define LVCFMT_NO_TITLE 0x00800000
+#define LVCFMT_SPLIT_BUTTON 0x01000000
+#define LVCFMT_TILE_PLACEMENTMASK (LVCFMT_LINE_BREAK | LVCFMT_FILL)
+
+#define LVSIL_NORMAL 0
+#define LVSIL_SMALL 1
+#define LVSIL_STATE 2
+#define LVSIL_GROUPHEADER 3
+
+/* following 2 flags only for LVS_OWNERDATA listviews */
+/* and only in report or list mode */
+#define LVSICF_NOINVALIDATEALL 0x0001
+#define LVSICF_NOSCROLL 0x0002
+
+
+#define LVFI_PARAM 0x0001
+#define LVFI_STRING 0x0002
+#define LVFI_SUBSTRING 0x0004
+#define LVFI_PARTIAL 0x0008
+#define LVFI_WRAP 0x0020
+#define LVFI_NEARESTXY 0x0040
+
+#define LVIF_TEXT 0x0001
+#define LVIF_IMAGE 0x0002
+#define LVIF_PARAM 0x0004
+#define LVIF_STATE 0x0008
+#define LVIF_INDENT 0x0010
+#define LVIF_GROUPID 0x0100
+#define LVIF_COLUMNS 0x0200
+#define LVIF_NORECOMPUTE 0x0800
+#define LVIF_DI_SETITEM 0x1000
+#define LVIF_COLFMT 0x00010000
+
+#define LVIR_BOUNDS 0x0000
+#define LVIR_ICON 0x0001
+#define LVIR_LABEL 0x0002
+#define LVIR_SELECTBOUNDS 0x0003
+
+#define LVIS_FOCUSED 0x0001
+#define LVIS_SELECTED 0x0002
+#define LVIS_CUT 0x0004
+#define LVIS_DROPHILITED 0x0008
+#define LVIS_ACTIVATING 0x0020
+
+#define LVIS_OVERLAYMASK 0x0F00
+#define LVIS_STATEIMAGEMASK 0xF000
+
+#define LVNI_ALL 0x0000
+#define LVNI_FOCUSED 0x0001
+#define LVNI_SELECTED 0x0002
+#define LVNI_CUT 0x0004
+#define LVNI_DROPHILITED 0x0008
+
+#define LVNI_ABOVE 0x0100
+#define LVNI_BELOW 0x0200
+#define LVNI_TOLEFT 0x0400
+#define LVNI_TORIGHT 0x0800
+
+#define LVHT_NOWHERE 0x0001
+#define LVHT_ONITEMICON 0x0002
+#define LVHT_ONITEMLABEL 0x0004
+#define LVHT_ONITEMSTATEICON 0x0008
+#define LVHT_ONITEM (LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON)
+
+#define LVHT_ABOVE 0x0008
+#define LVHT_BELOW 0x0010
+#define LVHT_TORIGHT 0x0020
+#define LVHT_TOLEFT 0x0040
+
+#define LV_VIEW_ICON 0x0000
+#define LV_VIEW_DETAILS 0x0001
+#define LV_VIEW_SMALLICON 0x0002
+#define LV_VIEW_LIST 0x0003
+#define LV_VIEW_TILE 0x0004
+#define LV_VIEW_MAX 0x0004
+
+#define LVGF_NONE 0x00000000
+#define LVGF_HEADER 0x00000001
+#define LVGF_FOOTER 0x00000002
+#define LVGF_STATE 0x00000004
+#define LVGF_ALIGN 0x00000008
+#define LVGF_GROUPID 0x00000010
+#define LVGF_SUBTITLE 0x00000100
+#define LVGF_TASK 0x00000200
+#define LVGF_DESCRIPTIONTOP 0x00000400
+#define LVGF_DESCRIPTIONBOTTOM 0x00000800
+#define LVGF_TITLEIMAGE 0x00001000
+#define LVGF_EXTENDEDIMAGE 0x00002000
+#define LVGF_ITEMS 0x00004000
+#define LVGF_SUBSET 0x00008000
+#define LVGF_SUBSETITEMS 0x00010000
+
+#define LVGS_NORMAL 0x00000000
+#define LVGS_COLLAPSED 0x00000001
+#define LVGS_HIDDEN 0x00000002
+
+#define LVGA_HEADER_LEFT 0x00000001
+#define LVGA_HEADER_CENTER 0x00000002
+#define LVGA_HEADER_RIGHT 0x00000004
+#define LVGA_FOOTER_LEFT 0x00000008
+#define LVGA_FOOTER_CENTER 0x00000010
+#define LVGA_FOOTER_RIGHT 0x00000020
+
+#define LVGMF_NONE 0x00000000
+#define LVGMF_BORDERSIZE 0x00000001
+#define LVGMF_BORDERCOLOR 0x00000002
+#define LVGMF_TEXTCOLOR 0x00000004
+
+#define LVTVIF_AUTOSIZE 0x00000000
+#define LVTVIF_FIXEDWIDTH 0x00000001
+#define LVTVIF_FIXEDHEIGHT 0x00000002
+#define LVTVIF_FIXEDSIZE 0x00000003
+#define LVTVIF_EXTENDED 0x00000004
+
+#define LVTVIM_TILESIZE 0x00000001
+#define LVTVIM_COLUMNS 0x00000002
+#define LVTVIM_LABELMARGIN 0x00000004
+
+#define LVIM_AFTER 0x00000001
+
+#define LVM_FIRST 0x1000
+#define LVM_GETBKCOLOR (LVM_FIRST+0)
+#define LVM_SETBKCOLOR (LVM_FIRST+1)
+#define LVM_GETIMAGELIST (LVM_FIRST+2)
+#define LVM_SETIMAGELIST (LVM_FIRST+3)
+#define LVM_GETITEMCOUNT (LVM_FIRST+4)
+#define LVM_GETITEMA (LVM_FIRST+5)
+#define LVM_GETITEMW (LVM_FIRST+75)
+#define LVM_GETITEM WINELIB_NAME_AW(LVM_GETITEM)
+#define LVM_SETITEMA (LVM_FIRST+6)
+#define LVM_SETITEMW (LVM_FIRST+76)
+#define LVM_SETITEM WINELIB_NAME_AW(LVM_SETITEM)
+#define LVM_INSERTITEMA (LVM_FIRST+7)
+#define LVM_INSERTITEMW (LVM_FIRST+77)
+#define LVM_INSERTITEM WINELIB_NAME_AW(LVM_INSERTITEM)
+#define LVM_DELETEITEM (LVM_FIRST+8)
+#define LVM_DELETEALLITEMS (LVM_FIRST+9)
+#define LVM_GETCALLBACKMASK (LVM_FIRST+10)
+#define LVM_SETCALLBACKMASK (LVM_FIRST+11)
+#define LVM_GETNEXTITEM (LVM_FIRST+12)
+#define LVM_FINDITEMA (LVM_FIRST+13)
+#define LVM_FINDITEMW (LVM_FIRST+83)
+#define LVM_FINDITEM WINELIB_NAME_AW(LVM_FINDITEM)
+#define LVM_GETITEMRECT (LVM_FIRST+14)
+#define LVM_SETITEMPOSITION (LVM_FIRST+15)
+#define LVM_GETITEMPOSITION (LVM_FIRST+16)
+#define LVM_GETSTRINGWIDTHA (LVM_FIRST+17)
+#define LVM_GETSTRINGWIDTHW (LVM_FIRST+87)
+#define LVM_GETSTRINGWIDTH WINELIB_NAME_AW(LVM_GETSTRINGWIDTH)
+#define LVM_HITTEST (LVM_FIRST+18)
+#define LVM_ENSUREVISIBLE (LVM_FIRST+19)
+#define LVM_SCROLL (LVM_FIRST+20)
+#define LVM_REDRAWITEMS (LVM_FIRST+21)
+#define LVM_ARRANGE (LVM_FIRST+22)
+#define LVM_EDITLABELA (LVM_FIRST+23)
+#define LVM_EDITLABELW (LVM_FIRST+118)
+#define LVM_EDITLABEL WINELIB_NAME_AW(LVM_EDITLABEL)
+#define LVM_GETEDITCONTROL (LVM_FIRST+24)
+#define LVM_GETCOLUMNA (LVM_FIRST+25)
+#define LVM_GETCOLUMNW (LVM_FIRST+95)
+#define LVM_GETCOLUMN WINELIB_NAME_AW(LVM_GETCOLUMN)
+#define LVM_SETCOLUMNA (LVM_FIRST+26)
+#define LVM_SETCOLUMNW (LVM_FIRST+96)
+#define LVM_SETCOLUMN WINELIB_NAME_AW(LVM_SETCOLUMN)
+#define LVM_INSERTCOLUMNA (LVM_FIRST+27)
+#define LVM_INSERTCOLUMNW (LVM_FIRST+97)
+#define LVM_INSERTCOLUMN WINELIB_NAME_AW(LVM_INSERTCOLUMN)
+#define LVM_DELETECOLUMN (LVM_FIRST+28)
+#define LVM_GETCOLUMNWIDTH (LVM_FIRST+29)
+#define LVM_SETCOLUMNWIDTH (LVM_FIRST+30)
+#define LVM_GETHEADER (LVM_FIRST+31)
+
+#define LVM_CREATEDRAGIMAGE (LVM_FIRST+33)
+#define LVM_GETVIEWRECT (LVM_FIRST+34)
+#define LVM_GETTEXTCOLOR (LVM_FIRST+35)
+#define LVM_SETTEXTCOLOR (LVM_FIRST+36)
+#define LVM_GETTEXTBKCOLOR (LVM_FIRST+37)
+#define LVM_SETTEXTBKCOLOR (LVM_FIRST+38)
+#define LVM_GETTOPINDEX (LVM_FIRST+39)
+#define LVM_GETCOUNTPERPAGE (LVM_FIRST+40)
+#define LVM_GETORIGIN (LVM_FIRST+41)
+#define LVM_UPDATE (LVM_FIRST+42)
+#define LVM_SETITEMSTATE (LVM_FIRST+43)
+#define LVM_GETITEMSTATE (LVM_FIRST+44)
+#define LVM_GETITEMTEXTA (LVM_FIRST+45)
+#define LVM_GETITEMTEXTW (LVM_FIRST+115)
+#define LVM_GETITEMTEXT WINELIB_NAME_AW(LVM_GETITEMTEXT)
+#define LVM_SETITEMTEXTA (LVM_FIRST+46)
+#define LVM_SETITEMTEXTW (LVM_FIRST+116)
+#define LVM_SETITEMTEXT WINELIB_NAME_AW(LVM_SETITEMTEXT)
+#define LVM_SETITEMCOUNT (LVM_FIRST+47)
+#define LVM_SORTITEMS (LVM_FIRST+48)
+#define LVM_SORTITEMSEX (LVM_FIRST+81)
+#define LVM_SETITEMPOSITION32 (LVM_FIRST+49)
+#define LVM_GETSELECTEDCOUNT (LVM_FIRST+50)
+#define LVM_GETITEMSPACING (LVM_FIRST+51)
+#define LVM_GETISEARCHSTRINGA (LVM_FIRST+52)
+#define LVM_GETISEARCHSTRINGW (LVM_FIRST+117)
+#define LVM_GETISEARCHSTRING WINELIB_NAME_AW(LVM_GETISEARCHSTRING)
+#define LVM_SETICONSPACING (LVM_FIRST+53)
+#define LVM_SETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+54)
+#define LVM_GETEXTENDEDLISTVIEWSTYLE (LVM_FIRST+55)
+#define LVM_GETSUBITEMRECT (LVM_FIRST+56)
+#define LVM_SUBITEMHITTEST (LVM_FIRST+57)
+#define LVM_SETCOLUMNORDERARRAY (LVM_FIRST+58)
+#define LVM_GETCOLUMNORDERARRAY (LVM_FIRST+59)
+#define LVM_SETHOTITEM (LVM_FIRST+60)
+#define LVM_GETHOTITEM (LVM_FIRST+61)
+#define LVM_SETHOTCURSOR (LVM_FIRST+62)
+#define LVM_GETHOTCURSOR (LVM_FIRST+63)
+#define LVM_APPROXIMATEVIEWRECT (LVM_FIRST+64)
+#define LVM_SETWORKAREAS (LVM_FIRST+65)
+#define LVM_GETSELECTIONMARK (LVM_FIRST+66)
+#define LVM_SETSELECTIONMARK (LVM_FIRST+67)
+#define LVM_SETBKIMAGEA (LVM_FIRST+68)
+#define LVM_SETBKIMAGEW (LVM_FIRST+138)
+#define LVM_SETBKIMAGE WINELIB_NAME_AW(LVM_SETBKIMAGE)
+#define LVM_GETBKIMAGEA (LVM_FIRST+69)
+#define LVM_GETBKIMAGEW (LVM_FIRST+139)
+#define LVM_GETBKIMAGE WINELIB_NAME_AW(LVM_GETBKIMAGE)
+#define LVM_GETWORKAREAS (LVM_FIRST+70)
+#define LVM_SETHOVERTIME (LVM_FIRST+71)
+#define LVM_GETHOVERTIME (LVM_FIRST+72)
+#define LVM_GETNUMBEROFWORKAREAS (LVM_FIRST+73)
+#define LVM_SETTOOLTIPS (LVM_FIRST+74)
+#define LVM_GETTOOLTIPS (LVM_FIRST+78)
+#define LVM_GETUNICODEFORMAT (CCM_GETUNICODEFORMAT)
+#define LVM_SETUNICODEFORMAT (CCM_SETUNICODEFORMAT)
+#define LVM_SETSELECTEDCOLUMN (LVM_FIRST + 140)
+#define LVM_SETTILEWIDTH (LVM_FIRST + 141)
+#define LVM_SETVIEW (LVM_FIRST + 142)
+#define LVM_GETVIEW (LVM_FIRST + 143)
+#define LVM_INSERTGROUP (LVM_FIRST + 145)
+#define LVM_SETGROUPINFO (LVM_FIRST + 147)
+#define LVM_GETGROUPINFO (LVM_FIRST + 149)
+#define LVM_REMOVEGROUP (LVM_FIRST + 150)
+#define LVM_MOVEGROUP (LVM_FIRST + 151)
+#define LVM_MOVEITEMTOGROUP (LVM_FIRST + 154)
+#define LVM_SETGROUPMETRICS (LVM_FIRST + 155)
+#define LVM_GETGROUPMETRICS (LVM_FIRST + 156)
+#define LVM_ENABLEGROUPVIEW (LVM_FIRST + 157)
+#define LVM_SORTGROUPS (LVM_FIRST + 158)
+#define LVM_INSERTGROUPSORTED (LVM_FIRST + 159)
+#define LVM_REMOVEALLGROUPS (LVM_FIRST + 160)
+#define LVM_HASGROUP (LVM_FIRST + 161)
+#define LVM_SETTILEVIEWINFO (LVM_FIRST + 162)
+#define LVM_GETTILEVIEWINFO (LVM_FIRST + 163)
+#define LVM_SETTILEINFO (LVM_FIRST + 164)
+#define LVM_GETTILEINFO (LVM_FIRST + 165)
+#define LVM_SETINSERTMARK (LVM_FIRST + 166)
+#define LVM_GETINSERTMARK (LVM_FIRST + 167)
+#define LVM_INSERTMARKHITTEST (LVM_FIRST + 168)
+#define LVM_GETINSERTMARKRECT (LVM_FIRST + 169)
+#define LVM_SETINSERTMARKCOLOR (LVM_FIRST + 170)
+#define LVM_GETINSERTMARKCOLOR (LVM_FIRST + 171)
+#define LVM_SETINFOTIP (LVM_FIRST + 173)
+#define LVM_GETSELECTEDCOLUMN (LVM_FIRST + 174)
+#define LVM_ISGROUPVIEWENABLED (LVM_FIRST + 175)
+#define LVM_GETOUTLINECOLOR (LVM_FIRST + 176)
+#define LVM_SETOUTLINECOLOR (LVM_FIRST + 177)
+#define LVM_CANCELEDITLABEL (LVM_FIRST + 179)
+#define LVM_MAPINDEXTOID (LVM_FIRST + 180)
+#define LVM_MAPIDTOINDEX (LVM_FIRST + 181)
+#define LVM_ISITEMVISIBLE (LVM_FIRST + 182)
+
+#define LVN_FIRST (0U-100U)
+#define LVN_LAST (0U-199U)
+#define LVN_ITEMCHANGING (LVN_FIRST-0)
+#define LVN_ITEMCHANGED (LVN_FIRST-1)
+#define LVN_INSERTITEM (LVN_FIRST-2)
+#define LVN_DELETEITEM (LVN_FIRST-3)
+#define LVN_DELETEALLITEMS (LVN_FIRST-4)
+#define LVN_BEGINLABELEDITA (LVN_FIRST-5)
+#define LVN_BEGINLABELEDITW (LVN_FIRST-75)
+#define LVN_BEGINLABELEDIT WINELIB_NAME_AW(LVN_BEGINLABELEDIT)
+#define LVN_ENDLABELEDITA (LVN_FIRST-6)
+#define LVN_ENDLABELEDITW (LVN_FIRST-76)
+#define LVN_ENDLABELEDIT WINELIB_NAME_AW(LVN_ENDLABELEDIT)
+#define LVN_COLUMNCLICK (LVN_FIRST-8)
+#define LVN_BEGINDRAG (LVN_FIRST-9)
+#define LVN_BEGINRDRAG (LVN_FIRST-11)
+#define LVN_ODCACHEHINT (LVN_FIRST-13)
+#define LVN_ITEMACTIVATE (LVN_FIRST-14)
+#define LVN_ODSTATECHANGED (LVN_FIRST-15)
+#define LVN_HOTTRACK (LVN_FIRST-21)
+#define LVN_ODFINDITEMA (LVN_FIRST-52)
+#define LVN_ODFINDITEMW (LVN_FIRST-79)
+#define LVN_ODFINDITEM WINELIB_NAME_AW(LVN_ODFINDITEM)
+#define LVN_GETDISPINFOA (LVN_FIRST-50)
+#define LVN_GETDISPINFOW (LVN_FIRST-77)
+#define LVN_GETDISPINFO WINELIB_NAME_AW(LVN_GETDISPINFO)
+#define LVN_SETDISPINFOA (LVN_FIRST-51)
+#define LVN_SETDISPINFOW (LVN_FIRST-78)
+#define LVN_SETDISPINFO WINELIB_NAME_AW(LVN_SETDISPINFO)
+#define LVN_KEYDOWN (LVN_FIRST-55)
+#define LVN_MARQUEEBEGIN (LVN_FIRST-56)
+#define LVN_GETINFOTIPA (LVN_FIRST-57)
+#define LVN_GETINFOTIPW (LVN_FIRST-58)
+#define LVN_GETINFOTIP WINELIB_NAME_AW(LVN_GETINFOTIP)
+#define LVN_INCREMENTALSEARCHA (LVN_FIRST-62)
+#define LVN_INCREMENTALSEARCHW (LVN_FIRST-63)
+#define LVN_INCREMENTALSEARCH WINELIB_NAME_AW(LVN_INCREMENTALSEARCH)
+#define LVN_BEGINSCROLL (LVN_FIRST-80)
+#define LVN_ENDSCROLL (LVN_FIRST-81)
+#define LVN_LINKCLICK (LVN_FIRST-84)
+#define LVN_ASYNCDRAWN (LVN_FIRST-86)
+#define LVN_GETEMPTYMARKUP (LVN_FIRST-87)
+
+/* LVN_INCREMENTALSEARCH return codes */
+#define LVNSCH_DEFAULT -1
+#define LVNSCH_ERROR -2
+#define LVNSCH_IGNORE -3
+
+#define LVA_DEFAULT 0x0000
+#define LVA_ALIGNLEFT 0x0001
+#define LVA_ALIGNTOP 0x0002
+#define LVA_SNAPTOGRID 0x0005
+
+typedef struct tagLVITEMA
+{
+ UINT mask;
+ INT iItem;
+ INT iSubItem;
+ UINT state;
+ UINT stateMask;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ LPARAM lParam;
+ /* (_WIN32_IE >= 0x0300) */
+ INT iIndent;
+ /* (_WIN32_IE >= 0x0560) */
+ INT iGroupId;
+ UINT cColumns;
+ PUINT puColumns;
+ /* (_WIN32_WINNT >= 0x0600) */
+ PINT piColFmt;
+ INT iGroup;
+} LVITEMA, *LPLVITEMA;
+
+typedef struct tagLVITEMW
+{
+ UINT mask;
+ INT iItem;
+ INT iSubItem;
+ UINT state;
+ UINT stateMask;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ LPARAM lParam;
+ /* (_WIN32_IE >= 0x0300) */
+ INT iIndent;
+ /* (_WIN32_IE >= 0x0560) */
+ INT iGroupId;
+ UINT cColumns;
+ PUINT puColumns;
+ /* (_WIN32_WINNT >= 0x0600) */
+ PINT piColFmt;
+ INT iGroup;
+} LVITEMW, *LPLVITEMW;
+
+#define LVITEM WINELIB_NAME_AW(LVITEM)
+#define LPLVITEM WINELIB_NAME_AW(LPLVITEM)
+
+#define LVITEM_V1_SIZEA CCSIZEOF_STRUCT(LVITEMA, lParam)
+#define LVITEM_V1_SIZEW CCSIZEOF_STRUCT(LVITEMW, lParam)
+#define LVITEM_V1_SIZE WINELIB_NAME_AW(LVITEM_V1_SIZE)
+
+#define LVITEMA_V5_SIZE CCSIZEOF_STRUCT(LVITEMA, puColumns)
+#define LVITEMW_V5_SIZE CCSIZEOF_STRUCT(LVITEMW, puColumns)
+#define LVITEM_V5_SIZE WINELIB_NAME_AW(LVITEM_V5_SIZE)
+
+#define LV_ITEM LVITEM
+#define LV_ITEMA LVITEMA
+#define LV_ITEMW LVITEMW
+
+typedef struct LVSETINFOTIP
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ LPWSTR pszText;
+ int iItem;
+ int iSubItem;
+} LVSETINFOTIP, *PLVSETINFOTIP;
+
+/* ListView background image structs and constants
+ For _WIN32_IE version 0x400 and later. */
+
+typedef struct tagLVBKIMAGEA
+{
+ ULONG ulFlags;
+ HBITMAP hbm;
+ LPSTR pszImage;
+ UINT cchImageMax;
+ int xOffsetPercent;
+ int yOffsetPercent;
+} LVBKIMAGEA, *LPLVBKIMAGEA;
+
+typedef struct tagLVBKIMAGEW
+{
+ ULONG ulFlags;
+ HBITMAP hbm;
+ LPWSTR pszImage;
+ UINT cchImageMax;
+ int xOffsetPercent;
+ int yOffsetPercent;
+} LVBKIMAGEW, *LPLVBKIMAGEW;
+
+#define LVBKIMAGE WINELIB_NAME_AW(LVBKIMAGE)
+#define LPLVBKIMAGE WINELIB_NAME_AW(LPLVBKIMAGE)
+
+#define LVBKIF_SOURCE_NONE 0x00000000
+#define LVBKIF_SOURCE_HBITMAP 0x00000001
+#define LVBKIF_SOURCE_URL 0x00000002
+#define LVBKIF_SOURCE_MASK 0x00000003
+#define LVBKIF_STYLE_NORMAL 0x00000000
+#define LVBKIF_STYLE_TILE 0x00000010
+#define LVBKIF_STYLE_MASK 0x00000010
+#define LVBKIF_FLAG_TILEOFFSET 0x00000100
+#define LVBKIF_TYPE_WATERMARK 0x10000000
+
+#define ListView_SetBkImage(hwnd, plvbki) \
+ (BOOL)SNDMSG((hwnd), LVM_SETBKIMAGE, 0, (LPARAM)plvbki)
+
+#define ListView_GetBkImage(hwnd, plvbki) \
+ (BOOL)SNDMSG((hwnd), LVM_GETBKIMAGE, 0, (LPARAM)plvbki)
+
+typedef struct tagLVCOLUMNA
+{
+ UINT mask;
+ INT fmt;
+ INT cx;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iSubItem;
+ /* (_WIN32_IE >= 0x0300) */
+ INT iImage;
+ INT iOrder;
+ /* (_WIN32_WINNT >= 0x0600) */
+ INT cxMin;
+ INT cxDefault;
+ INT cxIdeal;
+} LVCOLUMNA, *LPLVCOLUMNA;
+
+typedef struct tagLVCOLUMNW
+{
+ UINT mask;
+ INT fmt;
+ INT cx;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iSubItem;
+ /* (_WIN32_IE >= 0x0300) */
+ INT iImage;
+ INT iOrder;
+ /* (_WIN32_WINNT >= 0x0600) */
+ INT cxMin;
+ INT cxDefault;
+ INT cxIdeal;
+} LVCOLUMNW, *LPLVCOLUMNW;
+
+#define LVCOLUMN WINELIB_NAME_AW(LVCOLUMN)
+#define LPLVCOLUMN WINELIB_NAME_AW(LPLVCOLUMN)
+
+#define LVCOLUMN_V1_SIZEA CCSIZEOF_STRUCT(LVCOLUMNA, iSubItem)
+#define LVCOLUMN_V1_SIZEW CCSIZEOF_STRUCT(LVCOLUMNW, iSubItem)
+#define LVCOLUMN_V1_SIZE WINELIB_NAME_AW(LVCOLUMN_V1_SIZE)
+
+#define LV_COLUMN LVCOLUMN
+
+
+typedef struct tagNMLISTVIEW
+{
+ NMHDR hdr;
+ INT iItem;
+ INT iSubItem;
+ UINT uNewState;
+ UINT uOldState;
+ UINT uChanged;
+ POINT ptAction;
+ LPARAM lParam;
+} NMLISTVIEW, *LPNMLISTVIEW;
+
+#define NM_LISTVIEW NMLISTVIEW
+#define LPNM_LISTVIEW LPNMLISTVIEW
+
+typedef struct tagNMITEMACTIVATE
+{
+ NMHDR hdr;
+ int iItem;
+ int iSubItem;
+ UINT uNewState;
+ UINT uOldState;
+ UINT uChanged;
+ POINT ptAction;
+ LPARAM lParam;
+ UINT uKeyFlags;
+} NMITEMACTIVATE, *LPNMITEMACTIVATE;
+
+#define LVKF_ALT 0x0001
+#define LVKF_CONTROL 0x0002
+#define LVKF_SHIFT 0x0004
+
+typedef struct tagLVDISPINFO
+{
+ NMHDR hdr;
+ LVITEMA item;
+} NMLVDISPINFOA, *LPNMLVDISPINFOA;
+
+typedef struct tagLVDISPINFOW
+{
+ NMHDR hdr;
+ LVITEMW item;
+} NMLVDISPINFOW, *LPNMLVDISPINFOW;
+
+#define NMLVDISPINFO WINELIB_NAME_AW(NMLVDISPINFO)
+#define LPNMLVDISPINFO WINELIB_NAME_AW(LPNMLVDISPINFO)
+
+#define LV_DISPINFO NMLVDISPINFO
+#define LV_DISPINFOA NMLVDISPINFOA
+#define LV_DISPINFOW NMLVDISPINFOW
+
+#include <pshpack1.h>
+typedef struct tagLVKEYDOWN
+{
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} NMLVKEYDOWN, *LPNMLVKEYDOWN;
+#include <poppack.h>
+
+#define LV_KEYDOWN NMLVKEYDOWN
+
+typedef struct tagNMLVGETINFOTIPA
+{
+ NMHDR hdr;
+ DWORD dwFlags;
+ LPSTR pszText;
+ int cchTextMax;
+ int iItem;
+ int iSubItem;
+ LPARAM lParam;
+} NMLVGETINFOTIPA, *LPNMLVGETINFOTIPA;
+
+typedef struct tagNMLVGETINFOTIPW
+{
+ NMHDR hdr;
+ DWORD dwFlags;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iItem;
+ int iSubItem;
+ LPARAM lParam;
+} NMLVGETINFOTIPW, *LPNMLVGETINFOTIPW;
+
+#define NMLVGETINFOTIP WINELIB_NAME_AW(NMLVGETINFOTIP)
+#define LPNMLVGETINFOTIP WINELIB_NAME_AW(LPNMLVGETINFOTIP)
+
+typedef struct tagLVHITTESTINFO
+{
+ POINT pt;
+ UINT flags;
+ INT iItem;
+ INT iSubItem;
+ /* (_WIN32_WINNT >= 0x0600) */
+ INT iGroup;
+} LVHITTESTINFO, *LPLVHITTESTINFO;
+
+#define LV_HITTESTINFO LVHITTESTINFO
+#define _LV_HITTESTINFO tagLVHITTESTINFO
+#define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO,iItem)
+
+typedef struct tagLVFINDINFOA
+{
+ UINT flags;
+ LPCSTR psz;
+ LPARAM lParam;
+ POINT pt;
+ UINT vkDirection;
+} LVFINDINFOA, *LPLVFINDINFOA;
+
+typedef struct tagLVFINDINFOW
+{
+ UINT flags;
+ LPCWSTR psz;
+ LPARAM lParam;
+ POINT pt;
+ UINT vkDirection;
+} LVFINDINFOW, *LPLVFINDINFOW;
+
+#define LVFINDINFO WINELIB_NAME_AW(LVFINDINFO)
+#define LPLVFINDINFO WINELIB_NAME_AW(LPLVFINDINFO)
+
+#define LV_FINDINFO LVFINDINFO
+#define LV_FINDINFOA LVFINDINFOA
+#define LV_FINDINFOW LVFINDINFOW
+
+/* Groups relates structures */
+
+typedef struct LVGROUP
+{
+ UINT cbSize;
+ UINT mask;
+ LPWSTR pszHeader;
+ INT cchHeader;
+ LPWSTR pszFooter;
+ INT cchFooter;
+ INT iGroupId;
+ UINT stateMask;
+ UINT state;
+ UINT uAlign;
+ /* (_WIN32_WINNT >= 0x0600) */
+ LPWSTR pszSubtitle;
+ UINT cchSubtitle;
+ LPWSTR pszTask;
+ UINT cchTask;
+ LPWSTR pszDescriptionTop;
+ UINT cchDescriptionTop;
+ LPWSTR pszDescriptionBottom;
+ UINT cchDescriptionBottom;
+ INT iTitleImage;
+ INT iExtendedImage;
+ INT iFirstItem;
+ UINT cItems;
+ LPWSTR pszSubsetTitle;
+ UINT cchSubsetTitle;
+} LVGROUP, *PLVGROUP;
+
+#define LVGROUP_V5_SIZE CCSIZEOF_STRUCT(LVGROUP, uAlign)
+
+typedef struct LVGROUPMETRICS
+{
+ UINT cbSize;
+ UINT mask;
+ UINT Left;
+ UINT Top;
+ UINT Right;
+ UINT Bottom;
+ COLORREF crLeft;
+ COLORREF crTop;
+ COLORREF crRight;
+ COLORREF crBottom;
+ COLORREF crRightHeader;
+ COLORREF crFooter;
+} LVGROUPMETRICS, *PLVGROUPMETRICS;
+
+typedef INT (*PFNLVGROUPCOMPARE)(INT, INT, VOID*);
+
+typedef struct LVINSERTGROUPSORTED
+{
+ PFNLVGROUPCOMPARE pfnGroupCompare;
+ LPVOID *pvData;
+ LVGROUP lvGroup;
+} LVINSERTGROUPSORTED, *PLVINSERTGROUPSORTED;
+
+/* Tile related structures */
+
+typedef struct LVTILEINFO
+{
+ UINT cbSize;
+ int iItem;
+ UINT cColumns;
+ PUINT puColumns;
+ /* (_WIN32_WINNT >= 0x0600) */
+ int* piColFmt;
+} LVTILEINFO, *PLVTILEINFO;
+
+typedef struct LVTILEVIEWINFO
+{
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwFlags;
+ SIZE sizeTile;
+ int cLines;
+ RECT rcLabelMargin;
+} LVTILEVIEWINFO, *PLVTILEVIEWINFO;
+
+typedef struct LVINSERTMARK
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ int iItem;
+ DWORD dwReserved;
+} LVINSERTMARK, *PLVINSERTMARK;
+
+typedef struct tagTCHITTESTINFO
+{
+ POINT pt;
+ UINT flags;
+} TCHITTESTINFO, *LPTCHITTESTINFO;
+
+#define TC_HITTESTINFO TCHITTESTINFO
+
+typedef INT (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
+
+#define NMLVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMLCUSTOMDRW, clrTextBk)
+
+typedef struct tagNMLVCUSTOMDRAW
+{
+ NMCUSTOMDRAW nmcd;
+ COLORREF clrText;
+ COLORREF clrTextBk;
+ int iSubItem; /* (_WIN32_IE >= 0x0400) */
+ DWORD dwItemType; /* (_WIN32_IE >= 0x560) */
+ COLORREF clrFace; /* (_WIN32_IE >= 0x560) */
+ int iIconEffect; /* (_WIN32_IE >= 0x560) */
+ int iIconPhase; /* (_WIN32_IE >= 0x560) */
+ int iPartId; /* (_WIN32_IE >= 0x560) */
+ int iStateId; /* (_WIN32_IE >= 0x560) */
+ RECT rcText; /* (_WIN32_IE >= 0x560) */
+ UINT uAlign; /* (_WIN32_IE >= 0x560) */
+} NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
+
+typedef struct tagNMLVCACHEHINT
+{
+ NMHDR hdr;
+ INT iFrom;
+ INT iTo;
+} NMLVCACHEHINT, *LPNMLVCACHEHINT;
+
+#define LPNM_CACHEHINT LPNMLVCACHEHINT
+#define PNM_CACHEHINT LPNMLVCACHEHINT
+#define NM_CACHEHINT NMLVCACHEHINT
+
+typedef struct tagNMLVFINDITEMA
+{
+ NMHDR hdr;
+ int iStart;
+ LVFINDINFOA lvfi;
+} NMLVFINDITEMA, *LPNMLVFINDITEMA;
+
+typedef struct tagNMLVFINDITEMW
+{
+ NMHDR hdr;
+ int iStart;
+ LVFINDINFOW lvfi;
+} NMLVFINDITEMW, *LPNMLVFINDITEMW;
+
+#define NMLVFINDITEM WINELIB_NAME_AW(NMLVFINDITEM)
+#define LPNMLVFINDITEM WINELIB_NAME_AW(LPNMLVFINDITEM)
+#define NM_FINDITEM NMLVFINDITEM
+#define LPNM_FINDITEM LPNMLVFINDITEM
+#define PNM_FINDITEM LPNMLVFINDITEM
+
+typedef struct tagNMLVODSTATECHANGE
+{
+ NMHDR hdr;
+ int iFrom;
+ int iTo;
+ UINT uNewState;
+ UINT uOldState;
+} NMLVODSTATECHANGE, *LPNMLVODSTATECHANGE;
+
+#define PNM_ODSTATECHANGE LPNMLVODSTATECHANGE
+#define LPNM_ODSTATECHANGE LPNMLVODSTATECHANGE
+#define NM_ODSTATECHANGE NMLVODSTATECHANGE
+
+typedef struct NMLVSCROLL
+{
+ NMHDR hdr;
+ int dx;
+ int dy;
+} NMLVSCROLL, *LPNMLVSCROLL;
+
+#define ListView_SetItemCount(hwnd,count) \
+ (BOOL)SNDMSG((hwnd),LVM_SETITEMCOUNT,(WPARAM)(INT)(count),0)
+#define ListView_SetTextBkColor(hwnd,clrBk) \
+ (BOOL)SNDMSG((hwnd),LVM_SETTEXTBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+#define ListView_SetTextColor(hwnd,clrBk) \
+ (BOOL)SNDMSG((hwnd),LVM_SETTEXTCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+#define ListView_DeleteColumn(hwnd,col)\
+ (LRESULT)SNDMSG((hwnd),LVM_DELETECOLUMN,0,(LPARAM)(INT)(col))
+#define ListView_GetColumnA(hwnd,x,col)\
+ (LRESULT)SNDMSGA((hwnd),LVM_GETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))
+#define ListView_GetColumnW(hwnd,x,col)\
+ (LRESULT)SNDMSGW((hwnd),LVM_GETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))
+#define ListView_GetColumn WINELIB_NAME_AW(ListView_GetColumn)
+#define ListView_SetColumnA(hwnd,x,col)\
+ (LRESULT)SNDMSGA((hwnd),LVM_SETCOLUMNA,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNA)(col))
+#define ListView_SetColumnW(hwnd,x,col)\
+ (LRESULT)SNDMSGW((hwnd),LVM_SETCOLUMNW,(WPARAM)(INT)(x),(LPARAM)(LPLVCOLUMNW)(col))
+#define ListView_SetColumn WINELIB_NAME_AW(ListView_SetColumn)
+#define ListView_GetColumnWidth(hwnd,x)\
+ (INT)SNDMSG((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(INT)(x), 0)
+#define ListView_SetColumnWidth(hwnd,x,width)\
+ (BOOL)SNDMSG((hwnd),LVM_SETCOLUMNWIDTH,(WPARAM)(INT)(x),(LPARAM)(MAKELPARAM(width,0)))
+
+
+#define ListView_GetNextItem(hwnd,nItem,flags) \
+ (INT)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(INT)(nItem),(LPARAM)(MAKELPARAM(flags,0)))
+#define ListView_FindItemA(hwnd,nItem,plvfi) \
+ (INT)SNDMSGA((hwnd),LVM_FINDITEMA,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOA*)(plvfi))
+#define ListView_FindItemW(hwnd,nItem,plvfi) \
+ (INT)SNDMSGW((hwnd),LVM_FINDITEMW,(WPARAM)(INT)(nItem),(LPARAM)(LVFINDINFOW*)(plvfi))
+#define ListView_FindItem WINELIB_NAME_AW(ListView_FindItem)
+
+#define ListView_Arrange(hwnd,code) \
+ (INT)SNDMSG((hwnd), LVM_ARRANGE, (WPARAM)(INT)(code), 0)
+#define ListView_GetItemPosition(hwnd,i,ppt) \
+ (INT)SNDMSG((hwnd),LVM_GETITEMPOSITION,(WPARAM)(INT)(i),(LPARAM)(LPPOINT)(ppt))
+#define ListView_GetItemRect(hwnd,i,prc,code) \
+ (BOOL)SNDMSG((hwnd), LVM_GETITEMRECT, (WPARAM)(int)(i), \
+ ((prc) ? (((RECT*)(prc))->left = (code),(LPARAM)(RECT \
+ *)(prc)) : (LPARAM)(RECT*)NULL))
+#define ListView_SetItemA(hwnd,pitem) \
+ (INT)SNDMSGA((hwnd),LVM_SETITEMA,0,(LPARAM)(const LVITEMA *)(pitem))
+#define ListView_SetItemW(hwnd,pitem) \
+ (INT)SNDMSGW((hwnd),LVM_SETITEMW,0,(LPARAM)(const LVITEMW *)(pitem))
+#define ListView_SetItem WINELIB_NAME_AW(ListView_SetItem)
+#define ListView_SetItemState(hwnd,i,data,dataMask) \
+{ LVITEM _LVi; _LVi.state = data; _LVi.stateMask = dataMask;\
+ SNDMSG(hwnd, LVM_SETITEMSTATE, (WPARAM)(UINT)i, (LPARAM) (LPLVITEM)&_LVi);}
+#define ListView_GetItemState(hwnd,i,mask) \
+ (UINT)SNDMSG((hwnd),LVM_GETITEMSTATE,(WPARAM)(UINT)(i),(LPARAM)(UINT)(mask))
+#define ListView_SetCheckState(hwndLV, i, bCheck) \
+ { LVITEM _LVi; _LVi.state = INDEXTOSTATEIMAGEMASK((bCheck)?2:1); _LVi.stateMask = LVIS_STATEIMAGEMASK; \
+ SNDMSG(hwndLV, LVM_SETITEMSTATE, (WPARAM)(UINT)(i), (LPARAM)(LPLVITEM)&_LVi);}
+#define ListView_GetCheckState(hwndLV, i) \
+ (((UINT)SNDMSG((hwndLV), LVM_GETITEMSTATE, (i), LVIS_STATEIMAGEMASK) >> 12) - 1)
+#define ListView_GetCountPerPage(hwnd) \
+ (BOOL)SNDMSG((hwnd), LVM_GETCOUNTPERPAGE, 0, 0)
+#define ListView_GetImageList(hwnd,iImageList) \
+ (HIMAGELIST)SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)(INT)(iImageList), 0)
+#define ListView_GetStringWidthA(hwnd,pstr) \
+ (INT)SNDMSGA((hwnd),LVM_GETSTRINGWIDTHA,0,(LPARAM)(LPCSTR)(pstr))
+#define ListView_GetStringWidthW(hwnd,pstr) \
+ (INT)SNDMSGW((hwnd),LVM_GETSTRINGWIDTHW,0,(LPARAM)(LPCWSTR)(pstr))
+#define ListView_GetStringWidth WINELIB_NAME_AW(ListView_GetStringWidth)
+#define ListView_GetTopIndex(hwnd) \
+ (BOOL)SNDMSG((hwnd), LVM_GETTOPINDEX, 0, 0)
+#define ListView_Scroll(hwnd,dx,dy) \
+ (BOOL)SNDMSG((hwnd),LVM_SCROLL,(WPARAM)(INT)(dx),(LPARAM)(INT)(dy))
+#define ListView_EnsureVisible(hwnd,i,fPartialOk) \
+ (BOOL)SNDMSG((hwnd),LVM_ENSUREVISIBLE,(WPARAM)(INT)i,(LPARAM)(BOOL)fPartialOk)
+#define ListView_SetBkColor(hwnd,clrBk) \
+ (BOOL)SNDMSG((hwnd),LVM_SETBKCOLOR,0,(LPARAM)(COLORREF)(clrBk))
+#define ListView_SetImageList(hwnd,himl,iImageList) \
+ (HIMAGELIST)SNDMSG((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl))
+#define ListView_GetItemCount(hwnd) \
+ (INT)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0)
+#define ListView_RedrawItems(hwnd,first,last) \
+ (BOOL)SNDMSG((hwnd),LVM_REDRAWITEMS,(WPARAM)(INT)(first),(LPARAM)(INT)(last))
+#define ListView_GetEditControl(hwnd) \
+ (HWND)SNDMSG((hwnd), LVM_GETEDITCONTROL, 0, 0)
+#define ListView_GetTextColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), LVM_GETTEXTCOLOR, 0, 0)
+#define ListView_GetTextBkColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), LVM_GETTEXTBKCOLOR, 0, 0)
+#define ListView_GetBkColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), LVM_GETBKCOLOR, 0, 0)
+#define ListView_GetItemA(hwnd,pitem) \
+ (BOOL)SNDMSGA((hwnd),LVM_GETITEMA,0,(LPARAM)(LVITEMA *)(pitem))
+#define ListView_GetItemW(hwnd,pitem) \
+ (BOOL)SNDMSGW((hwnd),LVM_GETITEMW,0,(LPARAM)(LVITEMW *)(pitem))
+#define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem)
+#define ListView_GetOrigin(hwnd,ppt) \
+ (BOOL)SNDMSG((hwnd),LVM_GETORIGIN,0,(LPARAM)(POINT *)(ppt))
+
+#define ListView_HitTest(hwnd,pinfo) \
+ (INT)SNDMSG((hwnd),LVM_HITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))
+
+#define ListView_InsertItemA(hwnd,pitem) \
+ (INT)SNDMSGA((hwnd),LVM_INSERTITEMA,0,(LPARAM)(const LVITEMA *)(pitem))
+#define ListView_InsertItemW(hwnd,pitem) \
+ (INT)SNDMSGW((hwnd),LVM_INSERTITEMW,0,(LPARAM)(const LVITEMW *)(pitem))
+#define ListView_InsertItem WINELIB_NAME_AW(ListView_InsertItem)
+
+#define ListView_DeleteAllItems(hwnd) \
+ (BOOL)SNDMSG((hwnd), LVM_DELETEALLITEMS, 0, 0)
+
+#define ListView_InsertColumnA(hwnd,iCol,pcol) \
+ (INT)SNDMSGA((hwnd),LVM_INSERTCOLUMNA,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNA *)(pcol))
+#define ListView_InsertColumnW(hwnd,iCol,pcol) \
+ (INT)SNDMSGW((hwnd),LVM_INSERTCOLUMNW,(WPARAM)(INT)(iCol),(LPARAM)(const LVCOLUMNW *)(pcol))
+#define ListView_InsertColumn WINELIB_NAME_AW(ListView_InsertColumn)
+
+#define ListView_SortItems(hwndLV,_pfnCompare,_lPrm) \
+ (BOOL)SNDMSG((hwndLV),LVM_SORTITEMS,(WPARAM)(LPARAM)_lPrm,(LPARAM)(PFNLVCOMPARE)_pfnCompare)
+#define ListView_SortItemsEx(hwndLV, _pfnCompare, _lPrm) \
+ (BOOL)SNDMSG((hwndLV), LVM_SORTITEMSEX, (WPARAM)(LPARAM)(_lPrm), (LPARAM)(PFNLVCOMPARE)(_pfnCompare))
+
+#define ListView_SetItemPosition(hwndLV, i, x, y) \
+ (BOOL)SNDMSG((hwndLV),LVM_SETITEMPOSITION,(WPARAM)(INT)(i),MAKELPARAM((x),(y)))
+#define ListView_GetSelectedCount(hwndLV) \
+ (UINT)SNDMSG((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0)
+
+#define ListView_EditLabelA(hwndLV, i) \
+ (HWND)SNDMSG((hwndLV), LVM_EDITLABELA, (WPARAM)(int)(i), 0)
+#define ListView_EditLabelW(hwndLV, i) \
+ (HWND)SNDMSG((hwndLV), LVM_EDITLABELW, (WPARAM)(int)(i), 0)
+#define ListView_EditLabel WINELIB_NAME_AW(ListView_EditLabel)
+
+#define ListView_GetItemTextA(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \
+{ \
+ LVITEMA _LVi;\
+ _LVi.iSubItem = _iSubItem;\
+ _LVi.cchTextMax = _cchTextMax;\
+ _LVi.pszText = _pszText;\
+ SNDMSGA(hwndLV, LVM_GETITEMTEXTA, (WPARAM)(i), (LPARAM)&_LVi);\
+}
+#define ListView_GetItemTextW(hwndLV, i, _iSubItem, _pszText, _cchTextMax) \
+{ \
+ LVITEMW _LVi;\
+ _LVi.iSubItem = _iSubItem;\
+ _LVi.cchTextMax = _cchTextMax;\
+ _LVi.pszText = _pszText;\
+ SNDMSGW(hwndLV, LVM_GETITEMTEXTW, (WPARAM)(i), (LPARAM)&_LVi);\
+}
+#define ListView_GetItemText WINELIB_NAME_AW(ListView_GetItemText)
+#define ListView_SetItemPosition32(hwnd,n,x1,y1) \
+{ POINT ptNewPos; ptNewPos.x = (x1); ptNewPos.y = (y1); SNDMSG((hwnd), LVM_SETITEMPOSITION32, (WPARAM)(int)(n), (LPARAM)&ptNewPos); }
+#define ListView_SetItemTextA(hwndLV, i, _iSubItem, _pszText) \
+{ LVITEMA _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\
+ SNDMSGA(hwndLV, LVM_SETITEMTEXTA, (WPARAM)i, (LPARAM) (LVITEMA*)&_LVi);}
+#define ListView_SetItemTextW(hwndLV, i, _iSubItem, _pszText) \
+{ LVITEMW _LVi; _LVi.iSubItem = _iSubItem; _LVi.pszText = _pszText;\
+ SNDMSGW(hwndLV, LVM_SETITEMTEXTW, (WPARAM)i, (LPARAM) (LVITEMW*)& _LVi);}
+#define ListView_SetItemText WINELIB_NAME_AW(ListView_SetItemText)
+
+#define ListView_DeleteItem(hwndLV, i) \
+ (BOOL)SNDMSG(hwndLV, LVM_DELETEITEM, (WPARAM)(int)(i), 0)
+#define ListView_Update(hwndLV, i) \
+ (BOOL)SNDMSG((hwndLV), LVM_UPDATE, (WPARAM)(i), 0)
+#define ListView_GetColumnOrderArray(hwndLV, iCount, pi) \
+ (BOOL)SNDMSG((hwndLV), LVM_GETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)
+#define ListView_GetExtendedListViewStyle(hwndLV) \
+ (DWORD)SNDMSG((hwndLV), LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
+#define ListView_GetHotCursor(hwndLV) \
+ (HCURSOR)SNDMSG((hwndLV), LVM_GETHOTCURSOR, 0, 0)
+#define ListView_GetHotItem(hwndLV) \
+ (int)SNDMSG((hwndLV), LVM_GETHOTITEM, 0, 0)
+#define ListView_GetItemSpacing(hwndLV, fSmall) \
+ (DWORD)SNDMSG((hwndLV), LVM_GETITEMSPACING, (WPARAM)fSmall, 0)
+#define ListView_GetSubItemRect(hwndLV, iItem, iSubItem, code, prc) \
+ (BOOL)SNDMSG((hwndLV), LVM_GETSUBITEMRECT, (WPARAM)(int)(iItem), \
+ ((prc) ? ((((LPRECT)(prc))->top = iSubItem), (((LPRECT)(prc))->left = code), (LPARAM)(prc)) : 0))
+#define ListView_GetToolTips(hwndLV) \
+ (HWND)SNDMSG((hwndLV), LVM_GETTOOLTIPS, 0, 0)
+#define ListView_SetColumnOrderArray(hwndLV, iCount, pi) \
+ (BOOL)SNDMSG((hwndLV), LVM_SETCOLUMNORDERARRAY, (WPARAM)iCount, (LPARAM)(LPINT)pi)
+#define ListView_SetExtendedListViewStyle(hwndLV, dw) \
+ (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)dw)
+#define ListView_SetExtendedListViewStyleEx(hwndLV, dwMask, dw) \
+ (DWORD)SNDMSG((hwndLV), LVM_SETEXTENDEDLISTVIEWSTYLE, (WPARAM)dwMask, (LPARAM)dw)
+#define ListView_SetHotCursor(hwndLV, hcur) \
+ (HCURSOR)SNDMSG((hwndLV), LVM_SETHOTCURSOR, 0, (LPARAM)hcur)
+#define ListView_SetHotItem(hwndLV, i) \
+ (int)SNDMSG((hwndLV), LVM_SETHOTITEM, (WPARAM)i, 0)
+#define ListView_SetIconSpacing(hwndLV, cx, cy) \
+ (DWORD)SNDMSG((hwndLV), LVM_SETICONSPACING, 0, MAKELONG(cx,cy))
+#define ListView_SetToolTips(hwndLV, hwndNewHwnd) \
+ (HWND)SNDMSG((hwndLV), LVM_SETTOOLTIPS, (WPARAM)hwndNewHwnd, 0)
+#define ListView_SubItemHitTest(hwndLV, plvhti) \
+ (int)SNDMSG((hwndLV), LVM_SUBITEMHITTEST, 0, (LPARAM)(LPLVHITTESTINFO)(plvhti))
+#define ListView_GetSelectionMark(hwndLV) \
+ (int)SNDMSG((hwndLV), LVM_GETSELECTIONMARK, 0, 0)
+#define ListView_SetSelectionMark(hwndLV, iItem) \
+ (int)SNDMSG((hwndLV), LVM_SETSELECTIONMARK, 0, (LPARAM)(iItem))
+#define ListView_GetViewRect(hwndLV, prc) \
+ (BOOL)SNDMSG((hwndLV),LVM_GETVIEWRECT,0,(LPARAM)(LPRECT)(prc))
+#define ListView_GetHeader(hwndLV) \
+ (HWND)SNDMSG((hwndLV), LVM_GETHEADER, 0, 0)
+#define ListView_SetSelectedColumn(hwnd, iCol) \
+ SNDMSG((hwnd), LVM_SETSELECTEDCOLUMN, (WPARAM)iCol, 0)
+#define ListView_SetTileWidth(hwnd, cpWidth) \
+ SNDMSG((hwnd), LVM_SETTILEWIDTH, (WPARAM)cpWidth, 0)
+#define ListView_SetView(hwnd, iView) \
+ (DWORD)SNDMSG((hwnd), LVM_SETVIEW, (WPARAM)(DWORD)iView, 0)
+#define ListView_GetView(hwnd) \
+ (DWORD)SNDMSG((hwnd), LVM_GETVIEW, 0, 0)
+#define ListView_InsertGroup(hwnd, index, pgrp) \
+ SNDMSG((hwnd), LVM_INSERTGROUP, (WPARAM)index, (LPARAM)pgrp)
+#define ListView_SetGroupHeaderImageList(hwnd, himl) \
+ SNDMSG((hwnd), LVM_SETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, (LPARAM)himl)
+#define ListView_GetGroupHeaderImageList(hwnd) \
+ SNDMSG((hwnd), LVM_GETIMAGELIST, (WPARAM)LVSIL_GROUPHEADER, 0)
+#define ListView_SetGroupInfo(hwnd, iGroupId, pgrp) \
+ SNDMSG((hwnd), LVM_SETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
+#define ListView_GetGroupInfo(hwnd, iGroupId, pgrp) \
+ SNDMSG((hwnd), LVM_GETGROUPINFO, (WPARAM)iGroupId, (LPARAM)pgrp)
+#define ListView_RemoveGroup(hwnd, iGroupId) \
+ SNDMSG((hwnd), LVM_REMOVEGROUP, (WPARAM)iGroupId, 0)
+#define ListView_MoveGroup(hwnd, iGroupId, toIndex) \
+ SNDMSG((hwnd), LVM_MOVEGROUP, (WPARAM)iGroupId, (LPARAM)toIndex)
+#define ListView_MoveItemToGroup(hwnd, idItemFrom, idGroupTo) \
+ SNDMSG((hwnd), LVM_MOVEITEMTOGROUP, (WPARAM)idItemFrom, (LPARAM)idGroupTo)
+#define ListView_SetGroupMetrics(hwnd, pGroupMetrics) \
+ SNDMSG((hwnd), LVM_SETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
+#define ListView_GetGroupMetrics(hwnd, pGroupMetrics) \
+ SNDMSG((hwnd), LVM_GETGROUPMETRICS, 0, (LPARAM)pGroupMetrics)
+#define ListView_EnableGroupView(hwnd, fEnable) \
+ SNDMSG((hwnd), LVM_ENABLEGROUPVIEW, (WPARAM)fEnable, 0)
+#define ListView_SortGroups(hwnd, _pfnGroupCompate, _plv) \
+ SNDMSG((hwnd), LVM_SORTGROUPS, (WPARAM)_pfnGroupCompate, (LPARAM)_plv)
+#define ListView_InsertGroupSorted(hwnd, structInsert) \
+ SNDMSG((hwnd), LVM_INSERTGROUPSORTED, (WPARAM)structInsert, 0)
+#define ListView_RemoveAllGroups(hwnd) \
+ SNDMSG((hwnd), LVM_REMOVEALLGROUPS, 0, 0)
+#define ListView_HasGroup(hwnd, dwGroupId) \
+ SNDMSG((hwnd), LVM_HASGROUP, dwGroupId, 0)
+#define ListView_SetTileViewInfo(hwnd, ptvi) \
+ SNDMSG((hwnd), LVM_SETTILEVIEWINFO, 0, (LPARAM)ptvi)
+#define ListView_GetTileViewInfo(hwnd, ptvi) \
+ SNDMSG((hwnd), LVM_GETTILEVIEWINFO, 0, (LPARAM)ptvi)
+#define ListView_SetTileInfo(hwnd, pti) \
+ SNDMSG((hwnd), LVM_SETTILEINFO, 0, (LPARAM)pti)
+#define ListView_GetTileInfo(hwnd, pti) \
+ SNDMSG((hwnd), LVM_GETTILEINFO, 0, (LPARAM)pti)
+#define ListView_SetInsertMark(hwnd, lvim) \
+ (BOOL)SNDMSG((hwnd), LVM_SETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
+#define ListView_GetInsertMark(hwnd, lvim) \
+ (BOOL)SNDMSG((hwnd), LVM_GETINSERTMARK, (WPARAM) 0, (LPARAM) (lvim))
+#define ListView_InsertMarkHitTest(hwnd, point, lvim) \
+ (int)SNDMSG((hwnd), LVM_INSERTMARKHITTEST, (WPARAM)(LPPOINT)(point), (LPARAM)(LPLVINSERTMARK)(lvim))
+#define ListView_GetInsertMarkRect(hwnd, rc) \
+ (int)SNDMSG((hwnd), LVM_GETINSERTMARKRECT, (WPARAM)0, (LPARAM)(LPRECT)(rc))
+#define ListView_SetInsertMarkColor(hwnd, color) \
+ (COLORREF)SNDMSG((hwnd), LVM_SETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
+#define ListView_GetInsertMarkColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), LVM_GETINSERTMARKCOLOR, (WPARAM)0, (LPARAM)0)
+#define ListView_SetInfoTip(hwndLV, plvInfoTip)\
+ (BOOL)SNDMSG((hwndLV), LVM_SETINFOTIP, (WPARAM)0, (LPARAM)plvInfoTip)
+#define ListView_GetSelectedColumn(hwnd) \
+ (UINT)SNDMSG((hwnd), LVM_GETSELECTEDCOLUMN, 0, 0)
+#define ListView_IsGroupViewEnabled(hwnd) \
+ (BOOL)SNDMSG((hwnd), LVM_ISGROUPVIEWENABLED, 0, 0)
+#define ListView_GetOutlineColor(hwnd) \
+ (COLORREF)SNDMSG((hwnd), LVM_GETOUTLINECOLOR, 0, 0)
+#define ListView_SetOutlineColor(hwnd, color) \
+ (COLORREF)SNDMSG((hwnd), LVM_SETOUTLINECOLOR, (WPARAM)0, (LPARAM)(COLORREF)(color))
+#define ListView_CancelEditLabel(hwnd) \
+ (VOID)SNDMSG((hwnd), LVM_CANCELEDITLABEL, (WPARAM)0, (LPARAM)0)
+#define ListView_MapIndexToID(hwnd, index) \
+ (UINT)SNDMSG((hwnd), LVM_MAPINDEXTOID, (WPARAM)index, (LPARAM)0)
+#define ListView_MapIDToIndex(hwnd, id) \
+ (UINT)SNDMSG((hwnd), LVM_MAPIDTOINDEX, (WPARAM)id, (LPARAM)0)
+#define ListView_SetUnicodeFormat(hwnd, fUnicode) \
+ (BOOL)SNDMSG((hwnd), LVM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+#define ListView_GetUnicodeFormat(hwnd) \
+ (BOOL)SNDMSG((hwnd), LVM_GETUNICODEFORMAT, 0, 0)
+
+/* Tab Control */
+
+#define WC_TABCONTROLA "SysTabControl32"
+#if defined(__GNUC__)
+# define WC_TABCONTROLW (const WCHAR []){ 'S','y','s', \
+ 'T','a','b','C','o','n','t','r','o','l','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_TABCONTROLW L"SysTabControl32"
+#else
+static const WCHAR WC_TABCONTROLW[] = { 'S','y','s',
+ 'T','a','b','C','o','n','t','r','o','l','3','2',0 };
+#endif
+#define WC_TABCONTROL WINELIB_NAME_AW(WC_TABCONTROL)
+
+/* tab control styles */
+#define TCS_EX_FLATSEPARATORS 0x00000001 /* to be used with */
+#define TCS_EX_REGISTERDROP 0x00000002 /* TCM_SETEXTENDEDSTYLE */
+
+
+#define TCM_FIRST 0x1300
+
+#define TCM_GETIMAGELIST (TCM_FIRST + 2)
+#define TCM_SETIMAGELIST (TCM_FIRST + 3)
+#define TCM_GETITEMCOUNT (TCM_FIRST + 4)
+#define TCM_GETITEM WINELIB_NAME_AW(TCM_GETITEM)
+#define TCM_GETITEMA (TCM_FIRST + 5)
+#define TCM_GETITEMW (TCM_FIRST + 60)
+#define TCM_SETITEMA (TCM_FIRST + 6)
+#define TCM_SETITEMW (TCM_FIRST + 61)
+#define TCM_SETITEM WINELIB_NAME_AW(TCM_SETITEM)
+#define TCM_INSERTITEMA (TCM_FIRST + 7)
+#define TCM_INSERTITEMW (TCM_FIRST + 62)
+#define TCM_INSERTITEM WINELIB_NAME_AW(TCM_INSERTITEM)
+#define TCM_DELETEITEM (TCM_FIRST + 8)
+#define TCM_DELETEALLITEMS (TCM_FIRST + 9)
+#define TCM_GETITEMRECT (TCM_FIRST + 10)
+#define TCM_GETCURSEL (TCM_FIRST + 11)
+#define TCM_SETCURSEL (TCM_FIRST + 12)
+#define TCM_HITTEST (TCM_FIRST + 13)
+#define TCM_SETITEMEXTRA (TCM_FIRST + 14)
+#define TCM_ADJUSTRECT (TCM_FIRST + 40)
+#define TCM_SETITEMSIZE (TCM_FIRST + 41)
+#define TCM_REMOVEIMAGE (TCM_FIRST + 42)
+#define TCM_SETPADDING (TCM_FIRST + 43)
+#define TCM_GETROWCOUNT (TCM_FIRST + 44)
+#define TCM_GETTOOLTIPS (TCM_FIRST + 45)
+#define TCM_SETTOOLTIPS (TCM_FIRST + 46)
+#define TCM_GETCURFOCUS (TCM_FIRST + 47)
+#define TCM_SETCURFOCUS (TCM_FIRST + 48)
+#define TCM_SETMINTABWIDTH (TCM_FIRST + 49)
+#define TCM_DESELECTALL (TCM_FIRST + 50)
+#define TCM_HIGHLIGHTITEM (TCM_FIRST + 51)
+#define TCM_SETEXTENDEDSTYLE (TCM_FIRST + 52)
+#define TCM_GETEXTENDEDSTYLE (TCM_FIRST + 53)
+#define TCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define TCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+
+
+#define TCIF_TEXT 0x0001
+#define TCIF_IMAGE 0x0002
+#define TCIF_RTLREADING 0x0004
+#define TCIF_PARAM 0x0008
+#define TCIF_STATE 0x0010
+
+#define TCIS_BUTTONPRESSED 0x0001
+#define TCIS_HIGHLIGHTED 0x0002
+
+/* TabCtrl Macros */
+#define TabCtrl_GetImageList(hwnd) \
+ (HIMAGELIST)SNDMSG((hwnd), TCM_GETIMAGELIST, 0, 0)
+#define TabCtrl_SetImageList(hwnd, himl) \
+ (HIMAGELIST)SNDMSG((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl))
+#define TabCtrl_GetItemCount(hwnd) \
+ (int)SNDMSG((hwnd), TCM_GETITEMCOUNT, 0, 0)
+#define TabCtrl_GetItemA(hwnd, iItem, pitem) \
+ (BOOL)SNDMSGA((hwnd), TCM_GETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))
+#define TabCtrl_GetItemW(hwnd, iItem, pitem) \
+ (BOOL)SNDMSGW((hwnd), TCM_GETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem))
+#define TabCtrl_GetItem WINELIB_NAME_AW(TabCtrl_GetItem)
+#define TabCtrl_SetItemA(hwnd, iItem, pitem) \
+ (BOOL)SNDMSGA((hwnd), TCM_SETITEMA, (WPARAM)(int)iItem, (LPARAM)(TCITEMA *)(pitem))
+#define TabCtrl_SetItemW(hwnd, iItem, pitem) \
+ (BOOL)SNDMSGW((hwnd), TCM_SETITEMW, (WPARAM)(int)iItem, (LPARAM)(TCITEMW *)(pitem))
+#define TabCtrl_SetItem WINELIB_NAME_AW(TabCtrl_SetItem)
+#define TabCtrl_InsertItemA(hwnd, iItem, pitem) \
+ (int)SNDMSGA((hwnd), TCM_INSERTITEMA, (WPARAM)(int)iItem, (LPARAM)(const TCITEMA *)(pitem))
+#define TabCtrl_InsertItemW(hwnd, iItem, pitem) \
+ (int)SNDMSGW((hwnd), TCM_INSERTITEMW, (WPARAM)(int)iItem, (LPARAM)(const TCITEMW *)(pitem))
+#define TabCtrl_InsertItem WINELIB_NAME_AW(TabCtrl_InsertItem)
+#define TabCtrl_DeleteItem(hwnd, i) \
+ (BOOL)SNDMSG((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0)
+#define TabCtrl_DeleteAllItems(hwnd) \
+ (BOOL)SNDMSG((hwnd), TCM_DELETEALLITEMS, 0, 0)
+#define TabCtrl_GetItemRect(hwnd, i, prc) \
+ (BOOL)SNDMSG((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))
+#define TabCtrl_GetCurSel(hwnd) \
+ (int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)
+#define TabCtrl_SetCurSel(hwnd, i) \
+ (int)SNDMSG((hwnd), TCM_SETCURSEL, (WPARAM)i, 0)
+#define TabCtrl_HitTest(hwndTC, pinfo) \
+ (int)SNDMSG((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))
+#define TabCtrl_SetItemExtra(hwndTC, cb) \
+ (BOOL)SNDMSG((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0)
+#define TabCtrl_AdjustRect(hwnd, bLarger, prc) \
+ (int)SNDMSG(hwnd, TCM_ADJUSTRECT, (WPARAM)(BOOL)bLarger, (LPARAM)(RECT *)prc)
+#define TabCtrl_SetItemSize(hwnd, x, y) \
+ (DWORD)SNDMSG((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))
+#define TabCtrl_RemoveImage(hwnd, i) \
+ (void)SNDMSG((hwnd), TCM_REMOVEIMAGE, i, 0)
+#define TabCtrl_SetPadding(hwnd, cx, cy) \
+ (void)SNDMSG((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))
+#define TabCtrl_GetRowCount(hwnd) \
+ (int)SNDMSG((hwnd), TCM_GETROWCOUNT, 0, 0)
+#define TabCtrl_GetToolTips(hwnd) \
+ (HWND)SNDMSG((hwnd), TCM_GETTOOLTIPS, 0, 0)
+#define TabCtrl_SetToolTips(hwnd, hwndTT) \
+ (void)SNDMSG((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0)
+#define TabCtrl_GetCurFocus(hwnd) \
+ (int)SNDMSG((hwnd), TCM_GETCURFOCUS, 0, 0)
+#define TabCtrl_SetCurFocus(hwnd, i) \
+ SNDMSG((hwnd),TCM_SETCURFOCUS, i, 0)
+#define TabCtrl_SetMinTabWidth(hwnd, x) \
+ (int)SNDMSG((hwnd), TCM_SETMINTABWIDTH, 0, x)
+#define TabCtrl_DeselectAll(hwnd, fExcludeFocus)\
+ (void)SNDMSG((hwnd), TCM_DESELECTALL, fExcludeFocus, 0)
+#define TabCtrl_GetUnicodeFormat(hwnd) \
+ (BOOL)SNDMSG((hwnd), TCM_GETUNICODEFORMAT, 0, 0)
+#define TabCtrl_SetUnicodeFormat(hwnd, fUnicode) \
+ (BOOL)SNDMSG((hwnd), TCM_SETUNICODEFORMAT, (WPARAM)fUnicode, 0)
+#define TabCtrl_GetExtendedStyle(hwnd) \
+ (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, 0)
+#define TabCtrl_SetExtendedStyle(hwnd, dwExStyle) \
+ (BOOL)SNDMSG((hwnd), TCM_GETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle)
+#define TabCtrl_HighlightItem(hwnd, i, fHighlight) \
+ (BOOL)SNDMSG((hwnd), TCM_HIGHLIGHTITEM, (WPARAM)i, (LPARAM)MAKELONG(fHighlight, 0))
+
+/* constants for TCHITTESTINFO */
+
+#define TCHT_NOWHERE 0x01
+#define TCHT_ONITEMICON 0x02
+#define TCHT_ONITEMLABEL 0x04
+#define TCHT_ONITEM (TCHT_ONITEMICON | TCHT_ONITEMLABEL)
+
+typedef struct tagTCITEMHEADERA
+{
+ UINT mask;
+ UINT lpReserved1;
+ UINT lpReserved2;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+} TCITEMHEADERA, *LPTCITEMHEADERA;
+
+typedef struct tagTCITEMHEADERW
+{
+ UINT mask;
+ UINT lpReserved1;
+ UINT lpReserved2;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+} TCITEMHEADERW, *LPTCITEMHEADERW;
+
+#define TCITEMHEADER WINELIB_NAME_AW(TCITEMHEADER)
+#define LPTCITEMHEADER WINELIB_NAME_AW(LPTCITEMHEADER)
+#define TC_ITEMHEADER WINELIB_NAME_AW(TCITEMHEADER)
+#define LPTC_ITEMHEADER WINELIB_NAME_AW(LPTCITEMHEADER)
+
+typedef struct tagTCITEMA
+{
+ UINT mask;
+ UINT dwState;
+ UINT dwStateMask;
+ LPSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ LPARAM lParam;
+} TCITEMA, *LPTCITEMA;
+
+typedef struct tagTCITEMW
+{
+ UINT mask;
+ DWORD dwState;
+ DWORD dwStateMask;
+ LPWSTR pszText;
+ INT cchTextMax;
+ INT iImage;
+ LPARAM lParam;
+} TCITEMW, *LPTCITEMW;
+
+#define TCITEM WINELIB_NAME_AW(TCITEM)
+#define LPTCITEM WINELIB_NAME_AW(LPTCITEM)
+#define TC_ITEM WINELIB_NAME_AW(TCITEM)
+#define LPTC_ITEM WINELIB_NAME_AW(LPTCITEM)
+
+#define TCN_FIRST (0U-550U)
+#define TCN_LAST (0U-580U)
+#define TCN_KEYDOWN (TCN_FIRST - 0)
+#define TCN_SELCHANGE (TCN_FIRST - 1)
+#define TCN_SELCHANGING (TCN_FIRST - 2)
+#define TCN_GETOBJECT (TCN_FIRST - 3)
+#define TCN_FOCUSCHANGE (TCN_FIRST - 4)
+
+#include <pshpack1.h>
+typedef struct tagTCKEYDOWN
+{
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} NMTCKEYDOWN;
+#include <poppack.h>
+
+#define TC_KEYDOWN NMTCKEYDOWN
+
+/* ComboBoxEx control */
+
+#define WC_COMBOBOXEXA "ComboBoxEx32"
+#if defined(__GNUC__)
+# define WC_COMBOBOXEXW (const WCHAR []){ 'C','o','m','b','o', \
+ 'B','o','x','E','x','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_COMBOBOXEXW L"ComboBoxEx32"
+#else
+static const WCHAR WC_COMBOBOXEXW[] = { 'C','o','m','b','o',
+ 'B','o','x','E','x','3','2',0 };
+#endif
+#define WC_COMBOBOXEX WINELIB_NAME_AW(WC_COMBOBOXEX)
+
+#define CBEIF_TEXT 0x00000001
+#define CBEIF_IMAGE 0x00000002
+#define CBEIF_SELECTEDIMAGE 0x00000004
+#define CBEIF_OVERLAY 0x00000008
+#define CBEIF_INDENT 0x00000010
+#define CBEIF_LPARAM 0x00000020
+#define CBEIF_DI_SETITEM 0x10000000
+
+#define CBEM_INSERTITEMA (WM_USER+1)
+#define CBEM_INSERTITEMW (WM_USER+11)
+#define CBEM_INSERTITEM WINELIB_NAME_AW(CBEM_INSERTITEM)
+#define CBEM_SETIMAGELIST (WM_USER+2)
+#define CBEM_GETIMAGELIST (WM_USER+3)
+#define CBEM_GETITEMA (WM_USER+4)
+#define CBEM_GETITEMW (WM_USER+13)
+#define CBEM_GETITEM WINELIB_NAME_AW(CBEM_GETITEM)
+#define CBEM_SETITEMA (WM_USER+5)
+#define CBEM_SETITEMW (WM_USER+12)
+#define CBEM_SETITEM WINELIB_NAME_AW(CBEM_SETITEM)
+#define CBEM_DELETEITEM CB_DELETESTRING
+#define CBEM_GETCOMBOCONTROL (WM_USER+6)
+#define CBEM_GETEDITCONTROL (WM_USER+7)
+#define CBEM_SETEXSTYLE (WM_USER+8)
+#define CBEM_GETEXSTYLE (WM_USER+9)
+#define CBEM_GETEXTENDEDSTYLE (WM_USER+9)
+#define CBEM_SETEXTENDEDSTYLE (WM_USER+14)
+#define CBEM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+#define CBEM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define CBEM_HASEDITCHANGED (WM_USER+10)
+#define CBEM_SETWINDOWTHEME CCM_SETWINDOWTHEME
+
+#define CBEIF_TEXT 0x00000001
+#define CBEIF_IMAGE 0x00000002
+#define CBEIF_SELECTEDIMAGE 0x00000004
+#define CBEIF_OVERLAY 0x00000008
+#define CBEIF_INDENT 0x00000010
+#define CBEIF_LPARAM 0x00000020
+#define CBEIF_DI_SETITEM 0x10000000
+
+#define CBEN_FIRST (0U-800U)
+#define CBEN_LAST (0U-830U)
+
+#define CBEN_GETDISPINFOA (CBEN_FIRST - 0)
+#define CBEN_GETDISPINFOW (CBEN_FIRST - 7)
+#define CBEN_GETDISPINFO WINELIB_NAME_AW(CBEN_GETDISPINFO)
+#define CBEN_INSERTITEM (CBEN_FIRST - 1)
+#define CBEN_DELETEITEM (CBEN_FIRST - 2)
+#define CBEN_BEGINEDIT (CBEN_FIRST - 4)
+#define CBEN_ENDEDITA (CBEN_FIRST - 5)
+#define CBEN_ENDEDITW (CBEN_FIRST - 6)
+#define CBEN_ENDEDIT WINELIB_NAME_AW(CBEN_ENDEDIT)
+#define CBEN_DRAGBEGINA (CBEN_FIRST - 8)
+#define CBEN_DRAGBEGINW (CBEN_FIRST - 9)
+#define CBEN_DRAGBEGIN WINELIB_NAME_AW(CBEN_DRAGBEGIN)
+
+#define CBES_EX_NOEDITIMAGE 0x00000001
+#define CBES_EX_NOEDITIMAGEINDENT 0x00000002
+#define CBES_EX_PATHWORDBREAKPROC 0x00000004
+#define CBES_EX_NOSIZELIMIT 0x00000008
+#define CBES_EX_CASESENSITIVE 0x00000010
+
+
+typedef struct tagCOMBOBOXEXITEMA
+{
+ UINT mask;
+ INT_PTR iItem;
+ LPSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int iOverlay;
+ int iIndent;
+ LPARAM lParam;
+} COMBOBOXEXITEMA, *PCOMBOBOXEXITEMA;
+typedef COMBOBOXEXITEMA const *PCCOMBOEXITEMA; /* Yes, there's a BOX missing */
+
+typedef struct tagCOMBOBOXEXITEMW
+{
+ UINT mask;
+ INT_PTR iItem;
+ LPWSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int iOverlay;
+ int iIndent;
+ LPARAM lParam;
+} COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;
+typedef COMBOBOXEXITEMW const *PCCOMBOEXITEMW; /* Yes, there's a BOX missing */
+
+#define COMBOBOXEXITEM WINELIB_NAME_AW(COMBOBOXEXITEM)
+#define PCOMBOBOXEXITEM WINELIB_NAME_AW(PCOMBOBOXEXITEM)
+#define PCCOMBOBOXEXITEM WINELIB_NAME_AW(PCCOMBOEXITEM) /* Yes, there's a BOX missing */
+
+#define CBENF_KILLFOCUS 1
+#define CBENF_RETURN 2
+#define CBENF_ESCAPE 3
+#define CBENF_DROPDOWN 4
+
+#define CBEMAXSTRLEN 260
+
+typedef struct tagNMCBEENDEDITW
+{
+ NMHDR hdr;
+ BOOL fChanged;
+ int iNewSelection;
+ WCHAR szText[CBEMAXSTRLEN];
+ int iWhy;
+} NMCBEENDEDITW, *LPNMCBEENDEDITW, *PNMCBEENDEDITW;
+
+typedef struct tagNMCBEENDEDITA
+{
+ NMHDR hdr;
+ BOOL fChanged;
+ int iNewSelection;
+ char szText[CBEMAXSTRLEN];
+ int iWhy;
+} NMCBEENDEDITA, *LPNMCBEENDEDITA, *PNMCBEENDEDITA;
+
+#define NMCBEENDEDIT WINELIB_NAME_AW(NMCBEENDEDIT)
+#define LPNMCBEENDEDIT WINELIB_NAME_AW(LPNMCBEENDEDIT)
+#define PNMCBEENDEDIT WINELIB_NAME_AW(PNMCBEENDEDIT)
+
+typedef struct
+{
+ NMHDR hdr;
+ COMBOBOXEXITEMA ceItem;
+} NMCOMBOBOXEXA, *PNMCOMBOBOXEXA;
+
+typedef struct
+{
+ NMHDR hdr;
+ COMBOBOXEXITEMW ceItem;
+} NMCOMBOBOXEXW, *PNMCOMBOBOXEXW;
+
+#define NMCOMBOBOXEX WINELIB_NAME_AW(NMCOMBOBOXEX)
+#define PNMCOMBOBOXEX WINELIB_NAME_AW(PNMCOMBOBOXEX)
+
+typedef struct
+{
+ NMHDR hdr;
+ int iItemid;
+ char szText[CBEMAXSTRLEN];
+} NMCBEDRAGBEGINA, *PNMCBEDRAGBEGINA, *LPNMCBEDRAGBEGINA;
+
+typedef struct
+{
+ NMHDR hdr;
+ int iItemid;
+ WCHAR szText[CBEMAXSTRLEN];
+} NMCBEDRAGBEGINW, *PNMCBEDRAGBEGINW, *LPNMCBEDRAGBEGINW;
+
+#define NMCBEDRAGBEGIN WINELIB_NAME_AW(NMCBEDRAGBEGIN)
+#define PNMCBEDRAGBEGIN WINELIB_NAME_AW(PNMCBEDRAGBEGIN)
+#define LPNMCBEDRAGBEGIN WINELIB_NAME_AW(LPNMCBEDRAGBEGIN)
+
+
+/* Hotkey control */
+
+#define HOTKEY_CLASSA "msctls_hotkey32"
+#if defined(__GNUC__)
+# define HOTKEY_CLASSW (const WCHAR []){ 'm','s','c','t','l','s','_', \
+ 'h','o','t','k','e','y','3','2',0 }
+#elif defined(_MSC_VER)
+# define HOTKEY_CLASSW L"msctls_hotkey32"
+#else
+static const WCHAR HOTKEY_CLASSW[] = { 'm','s','c','t','l','s','_',
+ 'h','o','t','k','e','y','3','2',0 };
+#endif
+#define HOTKEY_CLASS WINELIB_NAME_AW(HOTKEY_CLASS)
+
+#define HOTKEYF_SHIFT 0x01
+#define HOTKEYF_CONTROL 0x02
+#define HOTKEYF_ALT 0x04
+#define HOTKEYF_EXT 0x08
+
+#define HKCOMB_NONE 0x0001
+#define HKCOMB_S 0x0002
+#define HKCOMB_C 0x0004
+#define HKCOMB_A 0x0008
+#define HKCOMB_SC 0x0010
+#define HKCOMB_SA 0x0020
+#define HKCOMB_CA 0x0040
+#define HKCOMB_SCA 0x0080
+
+#define HKM_SETHOTKEY (WM_USER+1)
+#define HKM_GETHOTKEY (WM_USER+2)
+#define HKM_SETRULES (WM_USER+3)
+
+
+/* animate control */
+
+#define ANIMATE_CLASSA "SysAnimate32"
+#if defined(__GNUC__)
+# define ANIMATE_CLASSW (const WCHAR []){ 'S','y','s', \
+ 'A','n','i','m','a','t','e','3','2',0 }
+#elif defined(_MSC_VER)
+# define ANIMATE_CLASSW L"SysAnimate32"
+#else
+static const WCHAR ANIMATE_CLASSW[] = { 'S','y','s',
+ 'A','n','i','m','a','t','e','3','2',0 };
+#endif
+#define ANIMATE_CLASS WINELIB_NAME_AW(ANIMATE_CLASS)
+
+
+#define ACM_OPENA (WM_USER+100)
+#define ACM_OPENW (WM_USER+103)
+#define ACM_OPEN WINELIB_NAME_AW(ACM_OPEN)
+#define ACM_PLAY (WM_USER+101)
+#define ACM_STOP (WM_USER+102)
+
+#define ACN_START 1
+#define ACN_STOP 2
+
+#define Animate_CreateA(hwndP,id,dwStyle,hInstance) \
+ CreateWindowA(ANIMATE_CLASSA,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)
+#define Animate_CreateW(hwndP,id,dwStyle,hInstance) \
+ CreateWindowW(ANIMATE_CLASSW,NULL,dwStyle,0,0,0,0,hwndP,(HMENU)(id),hInstance,NULL)
+#define Animate_Create WINELIB_NAME_AW(Animate_Create)
+#define Animate_OpenA(hwnd,szName) \
+ (BOOL)SNDMSGA(hwnd,ACM_OPENA,0,(LPARAM)(LPSTR)(szName))
+#define Animate_OpenW(hwnd,szName) \
+ (BOOL)SNDMSGW(hwnd,ACM_OPENW,0,(LPARAM)(LPWSTR)(szName))
+#define Animate_Open WINELIB_NAME_AW(Animate_Open)
+#define Animate_OpenExA(hwnd,hInst,szName) \
+ (BOOL)SNDMSGA(hwnd,ACM_OPENA,(WPARAM)hInst,(LPARAM)(LPSTR)(szName))
+#define Animate_OpenExW(hwnd,hInst,szName) \
+ (BOOL)SNDMSGW(hwnd,ACM_OPENW,(WPARAM)hInst,(LPARAM)(LPWSTR)(szName))
+#define Animate_OpenEx WINELIB_NAME_AW(Animate_OpenEx)
+#define Animate_Play(hwnd,from,to,rep) \
+ (BOOL)SNDMSG(hwnd,ACM_PLAY,(WPARAM)(UINT)(rep),(LPARAM)MAKELONG(from,to))
+#define Animate_Stop(hwnd) \
+ (BOOL)SNDMSG(hwnd,ACM_STOP,0,0)
+#define Animate_Close(hwnd) \
+ (BOOL)SNDMSG(hwnd,ACM_OPENA,0,0)
+#define Animate_Seek(hwnd,frame) \
+ (BOOL)SNDMSG(hwnd,ACM_PLAY,1,(LPARAM)MAKELONG(frame,frame))
+
+
+/**************************************************************************
+ * IP Address control
+ */
+
+#define WC_IPADDRESSA "SysIPAddress32"
+#if defined(__GNUC__)
+# define WC_IPADDRESSW (const WCHAR []){ 'S','y','s', \
+ 'I','P','A','d','d','r','e','s','s','3','2',0 }
+#elif defined(_MSC_VER)
+# define WC_IPADDRESSW L"SysIPAddress32"
+#else
+static const WCHAR WC_IPADDRESSW[] = { 'S','y','s',
+ 'I','P','A','d','d','r','e','s','s','3','2',0 };
+#endif
+#define WC_IPADDRESS WINELIB_NAME_AW(WC_IPADDRESS)
+
+#define IPM_CLEARADDRESS (WM_USER+100)
+#define IPM_SETADDRESS (WM_USER+101)
+#define IPM_GETADDRESS (WM_USER+102)
+#define IPM_SETRANGE (WM_USER+103)
+#define IPM_SETFOCUS (WM_USER+104)
+#define IPM_ISBLANK (WM_USER+105)
+
+#define IPN_FIRST (0U-860U)
+#define IPN_LAST (0U-879U)
+#define IPN_FIELDCHANGED (IPN_FIRST-0)
+
+typedef struct tagNMIPADDRESS
+{
+ NMHDR hdr;
+ INT iField;
+ INT iValue;
+} NMIPADDRESS, *LPNMIPADDRESS;
+
+#define MAKEIPRANGE(low,high) \
+ ((LPARAM)(WORD)(((BYTE)(high)<<8)+(BYTE)(low)))
+#define MAKEIPADDRESS(b1,b2,b3,b4) \
+ ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4))))
+
+#define FIRST_IPADDRESS(x) (((x)>>24)&0xff)
+#define SECOND_IPADDRESS(x) (((x)>>16)&0xff)
+#define THIRD_IPADDRESS(x) (((x)>>8)&0xff)
+#define FOURTH_IPADDRESS(x) ((x)&0xff)
+
+
+/**************************************************************************
+ * Native Font control
+ */
+
+#define WC_NATIVEFONTCTLA "NativeFontCtl"
+#if defined(__GNUC__)
+# define WC_NATIVEFONTCTLW (const WCHAR []){ 'N','a','t','i','v','e', \
+ 'F','o','n','t','C','t','l',0 }
+#elif defined(_MSC_VER)
+# define WC_NATIVEFONTCTLW L"NativeFontCtl"
+#else
+static const WCHAR WC_NATIVEFONTCTLW[] = { 'N','a','t','i','v','e',
+ 'F','o','n','t','C','t','l',0 };
+#endif
+#define WC_NATIVEFONTCTL WINELIB_NAME_AW(WC_NATIVEFONTCTL)
+
+
+/**************************************************************************
+ * Month calendar control
+ *
+ */
+
+#define MONTHCAL_CLASSA "SysMonthCal32"
+#if defined(__GNUC__)
+# define MONTHCAL_CLASSW (const WCHAR []){ 'S','y','s', \
+ 'M','o','n','t','h','C','a','l','3','2',0 }
+#elif defined(_MSC_VER)
+# define MONTHCAL_CLASSW L"SysMonthCal32"
+#else
+static const WCHAR MONTHCAL_CLASSW[] = { 'S','y','s',
+ 'M','o','n','t','h','C','a','l','3','2',0 };
+#endif
+#define MONTHCAL_CLASS WINELIB_NAME_AW(MONTHCAL_CLASS)
+
+#define MCM_FIRST 0x1000
+#define MCN_FIRST (0U-750U)
+#define MCN_LAST (0U-759U)
+
+
+#define MCM_GETCURSEL (MCM_FIRST + 1)
+#define MCM_SETCURSEL (MCM_FIRST + 2)
+#define MCM_GETMAXSELCOUNT (MCM_FIRST + 3)
+#define MCM_SETMAXSELCOUNT (MCM_FIRST + 4)
+#define MCM_GETSELRANGE (MCM_FIRST + 5)
+#define MCM_SETSELRANGE (MCM_FIRST + 6)
+#define MCM_GETMONTHRANGE (MCM_FIRST + 7)
+#define MCM_SETDAYSTATE (MCM_FIRST + 8)
+#define MCM_GETMINREQRECT (MCM_FIRST + 9)
+#define MCM_SETCOLOR (MCM_FIRST + 10)
+#define MCM_GETCOLOR (MCM_FIRST + 11)
+#define MCM_SETTODAY (MCM_FIRST + 12)
+#define MCM_GETTODAY (MCM_FIRST + 13)
+#define MCM_HITTEST (MCM_FIRST + 14)
+#define MCM_SETFIRSTDAYOFWEEK (MCM_FIRST + 15)
+#define MCM_GETFIRSTDAYOFWEEK (MCM_FIRST + 16)
+#define MCM_GETRANGE (MCM_FIRST + 17)
+#define MCM_SETRANGE (MCM_FIRST + 18)
+#define MCM_GETMONTHDELTA (MCM_FIRST + 19)
+#define MCM_SETMONTHDELTA (MCM_FIRST + 20)
+#define MCM_GETMAXTODAYWIDTH (MCM_FIRST + 21)
+#define MCM_GETCALENDARCOUNT (MCM_FIRST + 23)
+#define MCM_SIZERECTTOMIN (MCM_FIRST + 29)
+#define MCM_SETCALENDARBORDER (MCM_FIRST + 30)
+#define MCM_GETCALENDARBORDER (MCM_FIRST + 31)
+#define MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
+#define MCM_SETUNICODEFORMAT CCM_SETUNICODEFORMAT
+
+
+/* Notifications */
+
+#define MCN_SELCHANGE (MCN_FIRST + 1)
+#define MCN_GETDAYSTATE (MCN_FIRST + 3)
+#define MCN_SELECT (MCN_FIRST + 4)
+
+#define MCSC_BACKGROUND 0
+#define MCSC_TEXT 1
+#define MCSC_TITLEBK 2
+#define MCSC_TITLETEXT 3
+#define MCSC_MONTHBK 4
+#define MCSC_TRAILINGTEXT 5
+
+
+#define MCHT_TITLE 0x00010000
+#define MCHT_CALENDAR 0x00020000
+#define MCHT_TODAYLINK 0x00030000
+
+#define MCHT_NEXT 0x01000000
+#define MCHT_PREV 0x02000000
+#define MCHT_NOWHERE 0x00000000
+#define MCHT_TITLEBK (MCHT_TITLE)
+#define MCHT_TITLEMONTH (MCHT_TITLE | 0x0001)
+#define MCHT_TITLEYEAR (MCHT_TITLE | 0x0002)
+#define MCHT_TITLEBTNNEXT (MCHT_TITLE | MCHT_NEXT | 0x0003)
+#define MCHT_TITLEBTNPREV (MCHT_TITLE | MCHT_PREV | 0x0003)
+
+#define MCHT_CALENDARBK (MCHT_CALENDAR)
+#define MCHT_CALENDARDATE (MCHT_CALENDAR | 0x0001)
+#define MCHT_CALENDARDATENEXT (MCHT_CALENDARDATE | MCHT_NEXT)
+#define MCHT_CALENDARDATEPREV (MCHT_CALENDARDATE | MCHT_PREV)
+#define MCHT_CALENDARDAY (MCHT_CALENDAR | 0x0002)
+#define MCHT_CALENDARWEEKNUM (MCHT_CALENDAR | 0x0003)
+
+
+
+#define GMR_VISIBLE 0
+#define GMR_DAYSTATE 1
+
+
+/* Month calendar's structures */
+
+
+typedef struct {
+ UINT cbSize;
+ POINT pt;
+ UINT uHit;
+ SYSTEMTIME st;
+ /* Vista */
+ RECT rc;
+ INT iOffset;
+ INT iRow;
+ INT iCol;
+} MCHITTESTINFO, *PMCHITTESTINFO;
+
+#define MCHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(MCHITTESTINFO, st)
+
+typedef struct tagNMSELCHANGE
+{
+ NMHDR nmhdr;
+ SYSTEMTIME stSelStart;
+ SYSTEMTIME stSelEnd;
+} NMSELCHANGE, *LPNMSELCHANGE;
+
+typedef NMSELCHANGE NMSELECT, *LPNMSELECT;
+typedef DWORD MONTHDAYSTATE, *LPMONTHDAYSTATE;
+
+typedef struct tagNMDAYSTATE
+{
+ NMHDR nmhdr;
+ SYSTEMTIME stStart;
+ int cDayState;
+ LPMONTHDAYSTATE prgDayState;
+} NMDAYSTATE, *LPNMDAYSTATE;
+
+
+/* macros */
+
+#define MonthCal_GetCurSel(hmc, pst) \
+ (BOOL)SNDMSG(hmc, MCM_GETCURSEL, 0, (LPARAM)(pst))
+#define MonthCal_SetCurSel(hmc, pst) \
+ (BOOL)SNDMSG(hmc, MCM_SETCURSEL, 0, (LPARAM)(pst))
+#define MonthCal_GetMaxSelCount(hmc) \
+ (DWORD)SNDMSG(hmc, MCM_GETMAXSELCOUNT, 0, 0)
+#define MonthCal_SetMaxSelCount(hmc, n) \
+ (BOOL)SNDMSG(hmc, MCM_SETMAXSELCOUNT, (WPARAM)(n), 0)
+#define MonthCal_GetSelRange(hmc, rgst) \
+ SNDMSG(hmc, MCM_GETSELRANGE, 0, (LPARAM) (rgst))
+#define MonthCal_SetSelRange(hmc, rgst) \
+ SNDMSG(hmc, MCM_SETSELRANGE, 0, (LPARAM) (rgst))
+#define MonthCal_GetMonthRange(hmc, gmr, rgst) \
+ (DWORD)SNDMSG(hmc, MCM_GETMONTHRANGE, (WPARAM)(gmr), (LPARAM)(rgst))
+#define MonthCal_SetDayState(hmc, cbds, rgds) \
+ SNDMSG(hmc, MCM_SETDAYSTATE, (WPARAM)(cbds), (LPARAM)(rgds))
+#define MonthCal_GetMinReqRect(hmc, prc) \
+ SNDMSG(hmc, MCM_GETMINREQRECT, 0, (LPARAM)(prc))
+#define MonthCal_SetColor(hmc, iColor, clr)\
+ SNDMSG(hmc, MCM_SETCOLOR, iColor, clr)
+#define MonthCal_GetColor(hmc, iColor) \
+ SNDMSG(hmc, MCM_SETCOLOR, iColor, 0)
+#define MonthCal_GetToday(hmc, pst)\
+ (BOOL)SNDMSG(hmc, MCM_GETTODAY, 0, (LPARAM)pst)
+#define MonthCal_SetToday(hmc, pst)\
+ SNDMSG(hmc, MCM_SETTODAY, 0, (LPARAM)pst)
+#define MonthCal_HitTest(hmc, pinfo) \
+ SNDMSG(hmc, MCM_HITTEST, 0, (LPARAM)(PMCHITTESTINFO)pinfo)
+#define MonthCal_SetFirstDayOfWeek(hmc, iDay) \
+ SNDMSG(hmc, MCM_SETFIRSTDAYOFWEEK, 0, iDay)
+#define MonthCal_GetFirstDayOfWeek(hmc) \
+ (DWORD)SNDMSG(hmc, MCM_GETFIRSTDAYOFWEEK, 0, 0)
+#define MonthCal_GetRange(hmc, rgst) \
+ (DWORD)SNDMSG(hmc, MCM_GETRANGE, 0, (LPARAM)(rgst))
+#define MonthCal_SetRange(hmc, gd, rgst) \
+ (BOOL)SNDMSG(hmc, MCM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+#define MonthCal_GetMonthDelta(hmc) \
+ (int)SNDMSG(hmc, MCM_GETMONTHDELTA, 0, 0)
+#define MonthCal_SetMonthDelta(hmc, n) \
+ (int)SNDMSG(hmc, MCM_SETMONTHDELTA, n, 0)
+#define MonthCal_GetMaxTodayWidth(hmc) \
+ (DWORD)SNDMSG(hmc, MCM_GETMAXTODAYWIDTH, 0, 0)
+#define MonthCal_SetUnicodeFormat(hwnd, fUnicode) \
+ (BOOL)SNDMSG((hwnd), MCM_SETUNICODEFORMAT, (WPARAM)(fUnicode), 0)
+#define MonthCal_GetUnicodeFormat(hwnd) \
+ (BOOL)SNDMSG((hwnd), MCM_GETUNICODEFORMAT, 0, 0)
+
+
+/**************************************************************************
+ * Date and time picker control
+ */
+
+#define DATETIMEPICK_CLASSA "SysDateTimePick32"
+#if defined(__GNUC__)
+# define DATETIMEPICK_CLASSW (const WCHAR []){ 'S','y','s', \
+ 'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 }
+#elif defined(_MSC_VER)
+# define DATETIMEPICK_CLASSW L"SysDateTimePick32"
+#else
+static const WCHAR DATETIMEPICK_CLASSW[] = { 'S','y','s',
+ 'D','a','t','e','T','i','m','e','P','i','c','k','3','2',0 };
+#endif
+#define DATETIMEPICK_CLASS WINELIB_NAME_AW(DATETIMEPICK_CLASS)
+
+#define DTM_FIRST 0x1000
+#define DTN_FIRST (0U-760U)
+#define DTN_LAST (0U-799U)
+
+
+#define DTM_GETSYSTEMTIME (DTM_FIRST+1)
+#define DTM_SETSYSTEMTIME (DTM_FIRST+2)
+#define DTM_GETRANGE (DTM_FIRST+3)
+#define DTM_SETRANGE (DTM_FIRST+4)
+#define DTM_SETFORMATA (DTM_FIRST+5)
+#define DTM_SETFORMATW (DTM_FIRST + 50)
+#define DTM_SETFORMAT WINELIB_NAME_AW(DTM_SETFORMAT)
+#define DTM_SETMCCOLOR (DTM_FIRST+6)
+#define DTM_GETMCCOLOR (DTM_FIRST+7)
+#define DTM_GETMONTHCAL (DTM_FIRST+8)
+#define DTM_SETMCFONT (DTM_FIRST+9)
+#define DTM_GETMCFONT (DTM_FIRST+10)
+
+
+/* Datetime Notifications */
+
+#define DTN_DATETIMECHANGE (DTN_FIRST + 1)
+#define DTN_USERSTRINGA (DTN_FIRST + 2)
+#define DTN_WMKEYDOWNA (DTN_FIRST + 3)
+#define DTN_FORMATA (DTN_FIRST + 4)
+#define DTN_FORMATQUERYA (DTN_FIRST + 5)
+#define DTN_DROPDOWN (DTN_FIRST + 6)
+#define DTN_CLOSEUP (DTN_FIRST + 7)
+#define DTN_USERSTRINGW (DTN_FIRST + 15)
+#define DTN_WMKEYDOWNW (DTN_FIRST + 16)
+#define DTN_FORMATW (DTN_FIRST + 17)
+#define DTN_FORMATQUERYW (DTN_FIRST + 18)
+
+#define DTN_USERSTRING WINELIB_NAME_AW(DTN_USERSTRING)
+#define DTN_WMKEYDOWN WINELIB_NAME_AW(DTN_WMKEYDOWN)
+#define DTN_FORMAT WINELIB_NAME_AW(DTN_FORMAT)
+#define DTN_FORMATQUERY WINELIB_NAME_AW(DTN_FORMATQUERY)
+
+
+typedef struct tagNMDATETIMECHANGE
+{
+ NMHDR nmhdr;
+ DWORD dwFlags;
+ SYSTEMTIME st;
+} NMDATETIMECHANGE, *LPNMDATETIMECHANGE;
+
+typedef struct tagNMDATETIMESTRINGA
+{
+ NMHDR nmhdr;
+ LPCSTR pszUserString;
+ SYSTEMTIME st;
+ DWORD dwFlags;
+} NMDATETIMESTRINGA, *LPNMDATETIMESTRINGA;
+
+typedef struct tagNMDATETIMESTRINGW
+{
+ NMHDR nmhdr;
+ LPCWSTR pszUserString;
+ SYSTEMTIME st;
+ DWORD dwFlags;
+} NMDATETIMESTRINGW, *LPNMDATETIMESTRINGW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMESTRING)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMESTRING)
+
+typedef struct tagNMDATETIMEWMKEYDOWNA
+{
+ NMHDR nmhdr;
+ int nVirtKey;
+ LPCSTR pszFormat;
+ SYSTEMTIME st;
+} NMDATETIMEWMKEYDOWNA, *LPNMDATETIMEWMKEYDOWNA;
+
+typedef struct tagNMDATETIMEWMKEYDOWNW
+{
+ NMHDR nmhdr;
+ int nVirtKey;
+ LPCWSTR pszFormat;
+ SYSTEMTIME st;
+} NMDATETIMEWMKEYDOWNW, *LPNMDATETIMEWMKEYDOWNW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMEWMKEYDOWN)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMEWMKEYDOWN)
+
+typedef struct tagNMDATETIMEFORMATA
+{
+ NMHDR nmhdr;
+ LPCSTR pszFormat;
+ SYSTEMTIME st;
+ LPCSTR pszDisplay;
+ CHAR szDisplay[64];
+} NMDATETIMEFORMATA, *LPNMDATETIMEFORMATA;
+
+
+typedef struct tagNMDATETIMEFORMATW
+{
+ NMHDR nmhdr;
+ LPCWSTR pszFormat;
+ SYSTEMTIME st;
+ LPCWSTR pszDisplay;
+ WCHAR szDisplay[64];
+} NMDATETIMEFORMATW, *LPNMDATETIMEFORMATW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMEFORMAT)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMAT)
+
+typedef struct tagNMDATETIMEFORMATQUERYA
+{
+ NMHDR nmhdr;
+ LPCSTR pszFormat;
+ SIZE szMax;
+} NMDATETIMEFORMATQUERYA, *LPNMDATETIMEFORMATQUERYA;
+
+typedef struct tagNMDATETIMEFORMATQUERYW
+{
+ NMHDR nmhdr;
+ LPCWSTR pszFormat;
+ SIZE szMax;
+} NMDATETIMEFORMATQUERYW, *LPNMDATETIMEFORMATQUERYW;
+
+DECL_WINELIB_TYPE_AW(NMDATETIMEFORMATQUERY)
+DECL_WINELIB_TYPE_AW(LPNMDATETIMEFORMATQUERY)
+
+
+
+#define GDT_ERROR -1
+#define GDT_VALID 0
+#define GDT_NONE 1
+
+#define GDTR_MIN 0x0001
+#define GDTR_MAX 0x0002
+
+
+#define DateTime_GetSystemtime(hdp, pst) \
+ (DWORD)SNDMSG (hdp, DTM_GETSYSTEMTIME , 0, (LPARAM)(pst))
+#define DateTime_SetSystemtime(hdp, gd, pst) \
+ (BOOL)SNDMSG (hdp, DTM_SETSYSTEMTIME, (LPARAM)(gd), (LPARAM)(pst))
+#define DateTime_GetRange(hdp, rgst) \
+ (DWORD)SNDMSG (hdp, DTM_GETRANGE, 0, (LPARAM)(rgst))
+#define DateTime_SetRange(hdp, gd, rgst) \
+ (BOOL)SNDMSG (hdp, DTM_SETRANGE, (WPARAM)(gd), (LPARAM)(rgst))
+#define DateTime_SetFormatA(hdp, sz) \
+ (BOOL)SNDMSGA (hdp, DTM_SETFORMATA, 0, (LPARAM)(sz))
+#define DateTime_SetFormatW(hdp, sz) \
+ (BOOL)SNDMSGW (hdp, DTM_SETFORMATW, 0, (LPARAM)(sz))
+#define DateTime_SetFormat WINELIB_NAME_AW(DateTime_SetFormat)
+#define DateTime_GetMonthCalColor(hdp, iColor) \
+ SNDMSG (hdp, DTM_GETMCCOLOR, iColor, 0)
+#define DateTime_SetMonthCalColor(hdp, iColor, clr) \
+ SNDMSG (hdp, DTM_SETMCCOLOR, iColor, clr)
+#define DateTime_GetMonthCal(hdp) \
+ (HWND) SNDMSG (hdp, DTM_GETMONTHCAL, 0, 0)
+#define DateTime_SetMonthCalFont(hdp, hfont, fRedraw) \
+ SNDMSG (hdp, DTM_SETMCFONT, (WPARAM)hfont, (LPARAM)fRedraw)
+#define DateTime_GetMonthCalFont(hdp) \
+ SNDMSG (hdp, DTM_GETMCFONT, 0, 0)
+
+#define DA_LAST (0x7fffffff)
+#define DPA_APPEND (0x7fffffff)
+#define DPA_ERR (-1)
+
+#define DSA_APPEND (0x7fffffff)
+#define DSA_ERR (-1)
+
+struct _DSA;
+typedef struct _DSA *HDSA;
+
+typedef INT (CALLBACK *PFNDSAENUMCALLBACK)(LPVOID, LPVOID);
+
+HDSA WINAPI DSA_Create(INT, INT);
+BOOL WINAPI DSA_Destroy(HDSA);
+void WINAPI DSA_DestroyCallback(HDSA, PFNDSAENUMCALLBACK, LPVOID);
+LPVOID WINAPI DSA_GetItemPtr(HDSA, INT);
+INT WINAPI DSA_InsertItem(HDSA, INT, LPVOID);
+
+#define DPAS_SORTED 0x0001
+#define DPAS_INSERTBEFORE 0x0002
+#define DPAS_INSERTAFTER 0x0004
+
+
+struct _DPA;
+typedef struct _DPA *HDPA;
+
+#define DPA_GetPtrCount(hdpa) (*(INT*)(hdpa))
+
+typedef INT (CALLBACK *PFNDPAENUMCALLBACK)(LPVOID, LPVOID);
+typedef INT (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);
+typedef PVOID (CALLBACK *PFNDPAMERGE)(UINT,PVOID,PVOID,LPARAM);
+
+/* merge callback codes */
+#define DPAMM_MERGE 1
+#define DPAMM_DELETE 2
+#define DPAMM_INSERT 3
+
+/* merge options */
+#define DPAM_SORTED 0x00000001
+#define DPAM_NORMAL 0x00000002
+#define DPAM_UNION 0x00000004
+#define DPAM_INTERSECT 0x00000008
+
+HDPA WINAPI DPA_Create(INT);
+BOOL WINAPI DPA_Destroy(HDPA);
+LPVOID WINAPI DPA_DeletePtr(HDPA, INT);
+BOOL WINAPI DPA_DeleteAllPtrs(HDPA);
+BOOL WINAPI DPA_SetPtr(HDPA, INT, LPVOID);
+LPVOID WINAPI DPA_GetPtr(HDPA, INT);
+INT WINAPI DPA_GetPtrIndex(HDPA, LPCVOID);
+ULONGLONG WINAPI DPA_GetSize(HDPA);
+BOOL WINAPI DPA_Grow(HDPA, INT);
+INT WINAPI DPA_InsertPtr(HDPA, INT, LPVOID);
+BOOL WINAPI DPA_Sort(HDPA, PFNDPACOMPARE, LPARAM);
+void WINAPI DPA_EnumCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID);
+void WINAPI DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, LPVOID);
+INT WINAPI DPA_Search(HDPA, LPVOID, INT, PFNDPACOMPARE, LPARAM, UINT);
+BOOL WINAPI DPA_Merge(HDPA, HDPA, DWORD, PFNDPACOMPARE, PFNDPAMERGE, LPARAM);
+
+/* save/load from stream */
+typedef struct _DPASTREAMINFO
+{
+ INT iPos; /* item index */
+ LPVOID pvItem;
+} DPASTREAMINFO;
+
+struct IStream;
+typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, LPVOID);
+
+HRESULT WINAPI DPA_LoadStream(HDPA*, PFNDPASTREAM, struct IStream*, LPVOID);
+HRESULT WINAPI DPA_SaveStream(HDPA, PFNDPASTREAM, struct IStream*, LPVOID);
+
+BOOL WINAPI Str_SetPtrW (LPWSTR *, LPCWSTR);
+
+/**************************************************************************
+ * SysLink control
+ */
+
+#if defined(__GNUC__)
+# define WC_LINK (const WCHAR []){ 'S','y','s','L','i','n','k',0 }
+#elif defined(_MSC_VER)
+# define WC_LINK L"SysLink"
+#else
+static const WCHAR WC_LINK[] = { 'S','y','s','L','i','n','k',0 };
+#endif
+
+/* SysLink styles */
+#define LWS_TRANSPARENT 0x0001
+#define LWS_IGNORERETURN 0x0002
+#define LWS_NOPREFIX 0x0004
+#define LWS_USEVISUALSTYLE 0x0008
+#define LWS_USECUSTOMTEXT 0x0010
+#define LWS_RIGHT 0x0020
+
+/* SysLink messages */
+#define LM_HITTEST (WM_USER + 768)
+#define LM_GETIDEALHEIGHT (WM_USER + 769)
+#define LM_GETIDEALSIZE (LM_GETIDEALHEIGHT)
+#define LM_SETITEM (WM_USER + 770)
+#define LM_GETITEM (WM_USER + 771)
+
+/* SysLink links flags */
+
+#define LIF_ITEMINDEX 1
+#define LIF_STATE 2
+#define LIF_ITEMID 4
+#define LIF_URL 8
+
+/* SysLink links states */
+
+#define LIS_FOCUSED 0x0001
+#define LIS_ENABLED 0x0002
+#define LIS_VISITED 0x0004
+#define LIS_HOTTRACK 0x0008
+#define LIS_DEFAULTCOLORS 0x0010
+
+/* SysLink misc. */
+
+#define INVALID_LINK_INDEX (-1)
+#define MAX_LINKID_TEXT 48
+#define L_MAX_URL_LENGTH 2084
+
+/* SysLink structures */
+
+typedef struct tagLITEM
+{
+ UINT mask;
+ int iLink;
+ UINT state;
+ UINT stateMask;
+ WCHAR szID[MAX_LINKID_TEXT];
+ WCHAR szUrl[L_MAX_URL_LENGTH];
+} LITEM, *PLITEM;
+
+typedef struct tagLHITTESTINFO
+{
+ POINT pt;
+ LITEM item;
+} LHITTESTINFO, *PLHITTESTINFO;
+
+typedef struct tagNMLINK
+{
+ NMHDR hdr;
+ LITEM item;
+} NMLINK, *PNMLINK;
+
+typedef struct tagNMLVLINK
+{
+ NMHDR hdr;
+ LITEM link;
+ int iItem;
+ int iSubItem;
+} NMLVLINK, *PNMLVLINK;
+
+/**************************************************************************
+ * Static control
+ */
+
+#define WC_STATICA "Static"
+#if defined(__GNUC__)
+# define WC_STATICW (const WCHAR []){ 'S','t','a','t','i','c',0 }
+#elif defined(_MSC_VER)
+# define WC_STATICW L"Static"
+#else
+static const WCHAR WC_STATICW[] = { 'S','t','a','t','i','c',0 };
+#endif
+#define WC_STATIC WINELIB_NAME_AW(WC_STATIC)
+
+/**************************************************************************
+ * Combobox control
+ */
+
+#define WC_COMBOBOXA "ComboBox"
+#if defined(__GNUC__)
+# define WC_COMBOBOXW (const WCHAR []){ 'C','o','m','b','o','B','o','x',0 }
+#elif defined(_MSC_VER)
+# define WC_COMBOBOXW L"ComboBox"
+#else
+static const WCHAR WC_COMBOBOXW[] = { 'C','o','m','b','o','B','o','x',0 };
+#endif
+#define WC_COMBOBOX WINELIB_NAME_AW(WC_COMBOBOX)
+
+/**************************************************************************
+ * Edit control
+ */
+
+#define WC_EDITA "Edit"
+#if defined(__GNUC__)
+# define WC_EDITW (const WCHAR []){ 'E','d','i','t',0 }
+#elif defined(_MSC_VER)
+# define WC_EDITW L"Edit"
+#else
+static const WCHAR WC_EDITW[] = { 'E','d','i','t',0 };
+#endif
+#define WC_EDIT WINELIB_NAME_AW(WC_EDIT)
+
+/**************************************************************************
+ * Listbox control
+ */
+
+#define WC_LISTBOXA "ListBox"
+#if defined(__GNUC__)
+# define WC_LISTBOXW (const WCHAR []){ 'L','i','s','t','B','o','x',0 }
+#elif defined(_MSC_VER)
+# define WC_LISTBOXW L"ListBox"
+#else
+static const WCHAR WC_LISTBOXW[] = { 'L','i','s','t','B','o','x',0 };
+#endif
+#define WC_LISTBOX WINELIB_NAME_AW(WC_LISTBOX)
+
+/**************************************************************************
+ * Scrollbar control
+ */
+
+#define WC_SCROLLBARA "ScrollBar"
+#if defined(__GNUC__)
+# define WC_SCROLLBARW (const WCHAR []){ 'S','c','r','o','l','l','B','a','r',0 }
+#elif defined(_MSC_VER)
+# define WC_SCROLLBARW L"ScrollBar"
+#else
+static const WCHAR WC_SCROLLBARW[] = { 'S','c','r','o','l','l','B','a','r',0 };
+#endif
+#define WC_SCROLLBAR WINELIB_NAME_AW(WC_SCROLLBAR)
+
+/**************************************************************************
+ * Task dialog
+ */
+
+#ifndef NOTASKDIALOG
+
+#include <pshpack1.h>
+
+enum _TASKDIALOG_FLAGS
+{
+ TDF_ENABLE_HYPERLINKS = 0x0001,
+ TDF_USE_HICON_MAIN = 0x0002,
+ TDF_USE_HICON_FOOTER = 0x0004,
+ TDF_ALLOW_DIALOG_CANCELLATION = 0x0008,
+ TDF_USE_COMMAND_LINKS = 0x0010,
+ TDF_USE_COMMAND_LINKS_NO_ICON = 0x0020,
+ TDF_EXPAND_FOOTER_AREA = 0x0040,
+ TDF_EXPANDED_BY_DEFAULT = 0x0080,
+ TDF_VERIFICATION_FLAG_CHECKED = 0x0100,
+ TDF_SHOW_PROGRESS_BAR = 0x0200,
+ TDF_SHOW_MARQUEE_PROGRESS_BAR = 0x0400,
+ TDF_CALLBACK_TIMER = 0x0800,
+ TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,
+ TDF_RTL_LAYOUT = 0x2000,
+ TDF_NO_DEFAULT_RADIO_BUTTON = 0x4000,
+ TDF_CAN_BE_MINIMIZED = 0x8000
+};
+typedef int TASKDIALOG_FLAGS;
+
+enum _TASKDIALOG_COMMON_BUTTON_FLAGS
+{
+ TDCBF_OK_BUTTON = 0x0001,
+ TDCBF_YES_BUTTON = 0x0002,
+ TDCBF_NO_BUTTON = 0x0004,
+ TDCBF_CANCEL_BUTTON = 0x0008,
+ TDCBF_RETRY_BUTTON = 0x0010,
+ TDCBF_CLOSE_BUTTON = 0x0020
+};
+typedef int TASKDIALOG_COMMON_BUTTON_FLAGS;
+
+typedef struct _TASKDIALOG_BUTTON
+{
+ int nButtonID;
+ PCWSTR pszButtonText;
+} TASKDIALOG_BUTTON;
+
+typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR);
+
+typedef struct _TASKDIALOGCONFIG
+{
+ UINT cbSize;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ TASKDIALOG_FLAGS dwFlags;
+ TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons;
+ PCWSTR pszWindowTitle;
+ union
+ {
+ HICON hMainIcon;
+ PCWSTR pszMainIcon;
+ } DUMMYUNIONNAME;
+ PCWSTR pszMainInstruction;
+ PCWSTR pszContent;
+ UINT cButtons;
+ const TASKDIALOG_BUTTON *pButtons;
+ int nDefaultButton;
+ UINT cRadioButtons;
+ const TASKDIALOG_BUTTON *pRadioButtons;
+ int nDefaultRadioButton;
+ PCWSTR pszVerificationText;
+ PCWSTR pszExpandedInformation;
+ PCWSTR pszExpandedControlText;
+ PCWSTR pszCollapsedControlText;
+ union
+ {
+ HICON hFooterIcon;
+ PCWSTR pszFooterIcon;
+ } DUMMYUNIONNAME2;
+ PCWSTR pszFooter;
+ PFTASKDIALOGCALLBACK pfCallback;
+ LONG_PTR lpCallbackData;
+ UINT cxWidth;
+} TASKDIALOGCONFIG;
+
+HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *);
+
+#include <poppack.h>
+
+#endif /* NOTASKDIALOG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_COMMCTRL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
new file mode 100644
index 00000000..093ed80e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commctrl.rh
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2008 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define __MSABI_LONG(x) x ## l
+# else
+# define __MSABI_LONG(x) x
+# endif
+#endif
+
+/* Header Control */
+#define HDS_HORZ 0x0000
+#define HDS_BUTTONS 0x0002
+#define HDS_HOTTRACK 0x0004
+#define HDS_HIDDEN 0x0008
+#define HDS_DRAGDROP 0x0040
+#define HDS_FULLDRAG 0x0080
+#define HDS_FILTERBAR 0x0100
+#define HDS_FLAT 0x0200
+#define HDS_CHECKBOXES 0x0400
+#define HDS_NOSIZING 0x0800
+#define HDS_OVERFLOW 0x1000
+
+/* Rebar Control */
+#define RBS_TOOLTIPS 0x0100
+#define RBS_VARHEIGHT 0x0200
+#define RBS_BANDBORDERS 0x0400
+#define RBS_FIXEDORDER 0x0800
+#define RBS_REGISTERDROP 0x1000
+#define RBS_AUTOSIZE 0x2000
+#define RBS_VERTICALGRIPPER 0x4000
+#define RBS_DBLCLKTOGGLE 0x8000
+
+/* Tool tips */
+#define TTS_ALWAYSTIP 0x01
+#define TTS_NOPREFIX 0x02
+#define TTS_NOANIMATE 0x10
+#define TTS_NOFADE 0x20
+#define TTS_BALLOON 0x40
+#define TTS_CLOSE 0x80
+#define TTS_USEVISUALSTYLE 0x100
+
+/* Statusbar Control */
+#define SBARS_SIZEGRIP 0x0100
+#define SBARS_TOOLTIPS 0x0800
+#define SBT_TOOLTIPS 0x0800
+
+/* Toolbar Control */
+#define TBS_AUTOTICKS 0x0001
+#define TBS_VERT 0x0002
+#define TBS_HORZ 0x0000
+#define TBS_TOP 0x0004
+#define TBS_BOTTOM 0x0000
+#define TBS_LEFT 0x0004
+#define TBS_RIGHT 0x0000
+#define TBS_BOTH 0x0008
+#define TBS_NOTICKS 0x0010
+#define TBS_ENABLESELRANGE 0x0020
+#define TBS_FIXEDLENGTH 0x0040
+#define TBS_NOTHUMB 0x0080
+#define TBS_TOOLTIPS 0x0100
+#define TBS_REVERSED 0x0200
+#define TBS_DOWNISLEFT 0x0400
+
+/* UpDown Control */
+#define UDS_WRAP 0x0001
+#define UDS_SETBUDDYINT 0x0002
+#define UDS_ALIGNRIGHT 0x0004
+#define UDS_ALIGNLEFT 0x0008
+#define UDS_AUTOBUDDY 0x0010
+#define UDS_ARROWKEYS 0x0020
+#define UDS_HORZ 0x0040
+#define UDS_NOTHOUSANDS 0x0080
+#define UDS_HOTTRACK 0x0100
+
+/* Progressbar Control */
+#define PBS_SMOOTH 0x01
+#define PBS_VERTICAL 0x04
+#define PBS_MARQUEE 0x08
+#define PBS_SMOOTHREVERSE 0x10
+
+/* Common Control Styles */
+#define CCS_TOP __MSABI_LONG(0x00000001)
+#define CCS_NOMOVEY __MSABI_LONG(0x00000002)
+#define CCS_BOTTOM __MSABI_LONG(0x00000003)
+#define CCS_NORESIZE __MSABI_LONG(0x00000004)
+#define CCS_NOPARENTALIGN __MSABI_LONG(0x00000008)
+#define CCS_ADJUSTABLE __MSABI_LONG(0x00000020)
+#define CCS_NODIVIDER __MSABI_LONG(0x00000040)
+#define CCS_VERT __MSABI_LONG(0x00000080)
+#define CCS_LEFT (CCS_VERT | CCS_TOP)
+#define CCS_RIGHT (CCS_VERT | CCS_BOTTOM)
+#define CCS_NOMOVEX (CCS_VERT | CCS_NOMOVEY)
+
+/* Listview Control */
+#define LVS_ICON 0x0000
+#define LVS_REPORT 0x0001
+#define LVS_SMALLICON 0x0002
+#define LVS_LIST 0x0003
+#define LVS_TYPEMASK 0x0003
+#define LVS_SINGLESEL 0x0004
+#define LVS_SHOWSELALWAYS 0x0008
+#define LVS_SORTASCENDING 0x0010
+#define LVS_SORTDESCENDING 0x0020
+#define LVS_SHAREIMAGELISTS 0x0040
+#define LVS_NOLABELWRAP 0x0080
+#define LVS_AUTOARRANGE 0x0100
+#define LVS_EDITLABELS 0x0200
+#define LVS_OWNERDATA 0x1000
+#define LVS_NOSCROLL 0x2000
+#define LVS_TYPESTYLEMASK 0xfc00
+#define LVS_ALIGNTOP 0x0000
+#define LVS_ALIGNLEFT 0x0800
+#define LVS_ALIGNMASK 0x0c00
+#define LVS_OWNERDRAWFIXED 0x0400
+#define LVS_NOCOLUMNHEADER 0x4000
+#define LVS_NOSORTHEADER 0x8000
+
+/* Treeview Control */
+#define TVS_HASBUTTONS 0x0001
+#define TVS_HASLINES 0x0002
+#define TVS_LINESATROOT 0x0004
+#define TVS_EDITLABELS 0x0008
+#define TVS_DISABLEDRAGDROP 0x0010
+#define TVS_SHOWSELALWAYS 0x0020
+#define TVS_RTLREADING 0x0040
+#define TVS_NOTOOLTIPS 0x0080
+#define TVS_CHECKBOXES 0x0100
+#define TVS_TRACKSELECT 0x0200
+#define TVS_SINGLEEXPAND 0x0400
+#define TVS_INFOTIP 0x0800
+#define TVS_FULLROWSELECT 0x1000
+#define TVS_NOSCROLL 0x2000
+#define TVS_NONEVENHEIGHT 0x4000
+#define TVS_NOHSCROLL 0x8000
+
+/* Tab Control */
+#define TCS_SCROLLOPPOSITE 0x0001 /* assumes multiline tab */
+#define TCS_BOTTOM 0x0002
+#define TCS_RIGHT 0x0002
+#define TCS_MULTISELECT 0x0004 /* allow multi-select in button mode */
+#define TCS_FLATBUTTONS 0x0008
+#define TCS_FORCEICONLEFT 0x0010
+#define TCS_FORCELABELLEFT 0x0020
+#define TCS_HOTTRACK 0x0040
+#define TCS_VERTICAL 0x0080
+#define TCS_TABS 0x0000
+#define TCS_BUTTONS 0x0100
+#define TCS_SINGLELINE 0x0000
+#define TCS_MULTILINE 0x0200
+#define TCS_RIGHTJUSTIFY 0x0000
+#define TCS_FIXEDWIDTH 0x0400
+#define TCS_RAGGEDRIGHT 0x0800
+#define TCS_FOCUSONBUTTONDOWN 0x1000
+#define TCS_OWNERDRAWFIXED 0x2000
+#define TCS_TOOLTIPS 0x4000
+#define TCS_FOCUSNEVER 0x8000
+
+/* Animate Control */
+#define ACS_CENTER 0x0001
+#define ACS_TRANSPARENT 0x0002
+#define ACS_AUTOPLAY 0x0004
+#define ACS_TIMER 0x0008 /* no threads, just timers */
+
+/* Month Calendar Control */
+#define MCS_DAYSTATE 0x0001
+#define MCS_MULTISELECT 0x0002
+#define MCS_WEEKNUMBERS 0x0004
+#define MCS_NOTODAY 0x0010
+#define MCS_NOTODAYCIRCLE 0x0008
+#define MCS_NOTRAILINGDATES 0x0040
+
+/* Datetime Control */
+#define DTS_SHORTDATEFORMAT 0x0000
+#define DTS_UPDOWN 0x0001
+#define DTS_SHOWNONE 0x0002
+#define DTS_LONGDATEFORMAT 0x0004
+#define DTS_TIMEFORMAT 0x0009
+#define DTS_APPCANPARSE 0x0010
+#define DTS_RIGHTALIGN 0x0020
+
+/* Pager Control */
+#define PGS_VERT 0x00000000
+#define PGS_HORZ 0x00000001
+#define PGS_AUTOSCROLL 0x00000002
+#define PGS_DRAGNDROP 0x00000004
+
+/* Native Font Control */
+#define NFS_EDIT 0x0001
+#define NFS_STATIC 0x0002
+#define NFS_LISTCOMBO 0x0004
+#define NFS_BUTTON 0x0008
+#define NFS_ALL 0x0010
+#define NFS_USEFONTASSOC 0x0020
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h
new file mode 100644
index 00000000..bf8b7d23
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commdlg.h
@@ -0,0 +1,851 @@
+/*
+ * COMMDLG - Common Wine Dialog ... :-)
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_COMMDLG_H
+#define __WINE_COMMDLG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <prsht.h>
+#ifndef _WIN64
+#include <pshpack1.h>
+#endif
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else /* __cplusplus */
+#define SNDMSG SendMessage
+#endif /* __cplusplus */
+#endif /* SNDMSG */
+
+#define OFN_READONLY 0x00000001
+#define OFN_OVERWRITEPROMPT 0x00000002
+#define OFN_HIDEREADONLY 0x00000004
+#define OFN_NOCHANGEDIR 0x00000008
+#define OFN_SHOWHELP 0x00000010
+#define OFN_ENABLEHOOK 0x00000020
+#define OFN_ENABLETEMPLATE 0x00000040
+#define OFN_ENABLETEMPLATEHANDLE 0x00000080
+#define OFN_NOVALIDATE 0x00000100
+#define OFN_ALLOWMULTISELECT 0x00000200
+#define OFN_EXTENSIONDIFFERENT 0x00000400
+#define OFN_PATHMUSTEXIST 0x00000800
+#define OFN_FILEMUSTEXIST 0x00001000
+#define OFN_CREATEPROMPT 0x00002000
+#define OFN_SHAREAWARE 0x00004000
+#define OFN_NOREADONLYRETURN 0x00008000
+#define OFN_NOTESTFILECREATE 0x00010000
+#define OFN_NONETWORKBUTTON 0x00020000
+#define OFN_NOLONGNAMES 0x00040000
+#define OFN_EXPLORER 0x00080000
+#define OFN_NODEREFERENCELINKS 0x00100000
+#define OFN_LONGNAMES 0x00200000
+#define OFN_ENABLEINCLUDENOTIFY 0x00400000
+#define OFN_ENABLESIZING 0x00800000
+#define OFN_DONTADDTORECENT 0x02000000
+#define OFN_FORCESHOWHIDDEN 0x10000000
+
+#define OFN_SHAREFALLTHROUGH 2
+#define OFN_SHARENOWARN 1
+#define OFN_SHAREWARN 0
+
+#define SAVE_DIALOG 1
+#define OPEN_DIALOG 2
+
+typedef UINT_PTR (CALLBACK *LPOFNHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+
+typedef struct tagOFNA {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCSTR lpstrFilter;
+ LPSTR lpstrCustomFilter;
+ DWORD nMaxCustFilter;
+ DWORD nFilterIndex;
+ LPSTR lpstrFile;
+ DWORD nMaxFile;
+ LPSTR lpstrFileTitle;
+ DWORD nMaxFileTitle;
+ LPCSTR lpstrInitialDir;
+ LPCSTR lpstrTitle;
+ DWORD Flags;
+ WORD nFileOffset;
+ WORD nFileExtension;
+ LPCSTR lpstrDefExt;
+ LPARAM lCustData;
+ LPOFNHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+ void *pvReserved;
+ DWORD dwReserved;
+ DWORD FlagsEx;
+} OPENFILENAMEA,*LPOPENFILENAMEA;
+
+typedef struct tagOFNW {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCWSTR lpstrFilter;
+ LPWSTR lpstrCustomFilter;
+ DWORD nMaxCustFilter;
+ DWORD nFilterIndex;
+ LPWSTR lpstrFile;
+ DWORD nMaxFile;
+ LPWSTR lpstrFileTitle;
+ DWORD nMaxFileTitle;
+ LPCWSTR lpstrInitialDir;
+ LPCWSTR lpstrTitle;
+ DWORD Flags;
+ WORD nFileOffset;
+ WORD nFileExtension;
+ LPCWSTR lpstrDefExt;
+ LPARAM lCustData;
+ LPOFNHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+ void *pvReserved;
+ DWORD dwReserved;
+ DWORD FlagsEx;
+} OPENFILENAMEW,*LPOPENFILENAMEW;
+
+DECL_WINELIB_TYPE_AW(OPENFILENAME)
+DECL_WINELIB_TYPE_AW(LPOPENFILENAME)
+
+#ifndef CDSIZEOF_STRUCT
+#define CDSIZEOF_STRUCT(type,field) ((INT_PTR)&(((type *)0)->field) + sizeof(((type*)0)->field))
+#endif
+
+#define OPENFILENAME_SIZE_VERSION_400A CDSIZEOF_STRUCT(OPENFILENAMEA,lpTemplateName)
+#define OPENFILENAME_SIZE_VERSION_400W CDSIZEOF_STRUCT(OPENFILENAMEW,lpTemplateName)
+#define OPENFILENAME_SIZE_VERSION_400 WINELIB_NAME_AW(OPENFILENAME_SIZE_VERSION_400)
+
+
+typedef struct
+{
+ NMHDR hdr;
+ LPOPENFILENAMEA lpOFN;
+ LPSTR pszFile;
+} OFNOTIFYA, *LPOFNOTIFYA;
+
+typedef struct
+{
+ NMHDR hdr;
+ LPOPENFILENAMEW lpOFN;
+ LPWSTR pszFile;
+} OFNOTIFYW, *LPOFNOTIFYW;
+
+DECL_WINELIB_TYPE_AW(OFNOTIFY)
+DECL_WINELIB_TYPE_AW(LPOFNOTIFY)
+
+typedef struct _OFNOTIFYEXA
+{
+ NMHDR hdr;
+ LPOPENFILENAMEA lpOFN;
+ LPVOID psf;
+ LPVOID pidl;
+} OFNOTIFYEXA, *LPOFNOTIFYEXA;
+
+typedef struct _OFNOTIFYEXW
+{
+ NMHDR hdr;
+ LPOPENFILENAMEW lpOFN;
+ LPVOID psf;
+ LPVOID pidl;
+} OFNOTIFYEXW, *LPOFNOTIFYEXW;
+
+DECL_WINELIB_TYPE_AW(OFNOTIFYEX)
+DECL_WINELIB_TYPE_AW(LPOFNOTIFYEX)
+
+typedef UINT_PTR (CALLBACK *LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HWND hInstance; /* Should be an HINSTANCE but MS made a typo */
+ DWORD rgbResult;
+ LPDWORD lpCustColors;
+ DWORD Flags;
+ DWORD lCustData;
+ LPCCHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+} CHOOSECOLORA;
+typedef CHOOSECOLORA *LPCHOOSECOLORA;
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HWND hInstance; /* Should be an HINSTANCE but MS made a typo */
+ DWORD rgbResult;
+ LPDWORD lpCustColors;
+ DWORD Flags;
+ DWORD lCustData;
+ LPCCHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+} CHOOSECOLORW;
+typedef CHOOSECOLORW *LPCHOOSECOLORW;
+
+DECL_WINELIB_TYPE_AW(CHOOSECOLOR)
+DECL_WINELIB_TYPE_AW(LPCHOOSECOLOR)
+
+
+#define CC_RGBINIT 0x00000001
+#define CC_FULLOPEN 0x00000002
+#define CC_PREVENTFULLOPEN 0x00000004
+#define CC_SHOWHELP 0x00000008
+#define CC_ENABLEHOOK 0x00000010
+#define CC_ENABLETEMPLATE 0x00000020
+#define CC_ENABLETEMPLATEHANDLE 0x00000040
+#define CC_SOLIDCOLOR 0x00000080
+#define CC_ANYCOLOR 0x00000100
+
+typedef UINT_PTR (CALLBACK *LPFRHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ DWORD Flags;
+ LPSTR lpstrFindWhat;
+ LPSTR lpstrReplaceWith;
+ WORD wFindWhatLen;
+ WORD wReplaceWithLen;
+ LPARAM lCustData;
+ LPFRHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+} FINDREPLACEA, *LPFINDREPLACEA;
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ DWORD Flags;
+ LPWSTR lpstrFindWhat;
+ LPWSTR lpstrReplaceWith;
+ WORD wFindWhatLen;
+ WORD wReplaceWithLen;
+ LPARAM lCustData;
+ LPFRHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+} FINDREPLACEW, *LPFINDREPLACEW;
+
+DECL_WINELIB_TYPE_AW(FINDREPLACE)
+DECL_WINELIB_TYPE_AW(LPFINDREPLACE)
+
+#define FR_DOWN 0x00000001
+#define FR_WHOLEWORD 0x00000002
+#define FR_MATCHCASE 0x00000004
+#define FR_FINDNEXT 0x00000008
+#define FR_REPLACE 0x00000010
+#define FR_REPLACEALL 0x00000020
+#define FR_DIALOGTERM 0x00000040
+#define FR_SHOWHELP 0x00000080
+#define FR_ENABLEHOOK 0x00000100
+#define FR_ENABLETEMPLATE 0x00000200
+#define FR_NOUPDOWN 0x00000400
+#define FR_NOMATCHCASE 0x00000800
+#define FR_NOWHOLEWORD 0x00001000
+#define FR_ENABLETEMPLATEHANDLE 0x00002000
+#define FR_HIDEUPDOWN 0x00004000
+#define FR_HIDEMATCHCASE 0x00008000
+#define FR_HIDEWHOLEWORD 0x00010000
+#define FR_MATCHDIAC 0x20000000
+#define FR_MATCHKASHIDA 0x40000000
+#define FR_MATCHALEFHAMZA 0x80000000
+
+typedef UINT_PTR (CALLBACK *LPCFHOOKPROC)(HWND,UINT,WPARAM,LPARAM);
+
+typedef struct tagCHOOSEFONTA
+{
+ UINT lStructSize;
+ HWND hwndOwner;
+ HDC hDC;
+ LPLOGFONTA lpLogFont;
+ INT iPointSize;
+ DWORD Flags;
+ COLORREF rgbColors;
+ LPARAM lCustData;
+ LPCFHOOKPROC lpfnHook;
+ LPCSTR lpTemplateName;
+ HINSTANCE hInstance;
+ LPSTR lpszStyle;
+ WORD nFontType;
+ WORD ___MISSING_ALIGNMENT__;
+ INT nSizeMin;
+ INT nSizeMax;
+} CHOOSEFONTA, *LPCHOOSEFONTA;
+
+typedef struct tagCHOOSEFONTW
+{
+ UINT lStructSize;
+ HWND hwndOwner;
+ HDC hDC;
+ LPLOGFONTW lpLogFont;
+ INT iPointSize;
+ DWORD Flags;
+ COLORREF rgbColors;
+ LPARAM lCustData;
+ LPCFHOOKPROC lpfnHook;
+ LPCWSTR lpTemplateName;
+ HINSTANCE hInstance;
+ LPWSTR lpszStyle;
+ WORD nFontType;
+ WORD ___MISSING_ALIGNMENT__;
+ INT nSizeMin;
+ INT nSizeMax;
+} CHOOSEFONTW, *LPCHOOSEFONTW;
+
+DECL_WINELIB_TYPE_AW(CHOOSEFONT)
+DECL_WINELIB_TYPE_AW(LPCHOOSEFONT)
+
+#define CF_SCREENFONTS 0x00000001
+#define CF_PRINTERFONTS 0x00000002
+#define CF_BOTH (CF_SCREENFONTS | CF_PRINTERFONTS)
+#define CF_SHOWHELP __MSABI_LONG(0x00000004)
+#define CF_ENABLEHOOK __MSABI_LONG(0x00000008)
+#define CF_ENABLETEMPLATE __MSABI_LONG(0x00000010)
+#define CF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)
+#define CF_INITTOLOGFONTSTRUCT __MSABI_LONG(0x00000040)
+#define CF_USESTYLE __MSABI_LONG(0x00000080)
+#define CF_EFFECTS __MSABI_LONG(0x00000100)
+#define CF_APPLY __MSABI_LONG(0x00000200)
+#define CF_ANSIONLY __MSABI_LONG(0x00000400)
+#define CF_SCRIPTSONLY CF_ANSIONLY
+#define CF_NOVECTORFONTS __MSABI_LONG(0x00000800)
+#define CF_NOOEMFONTS CF_NOVECTORFONTS
+#define CF_NOSIMULATIONS __MSABI_LONG(0x00001000)
+#define CF_LIMITSIZE __MSABI_LONG(0x00002000)
+#define CF_FIXEDPITCHONLY __MSABI_LONG(0x00004000)
+#define CF_WYSIWYG __MSABI_LONG(0x00008000) /* use with CF_SCREENFONTS & CF_PRINTERFONTS */
+#define CF_FORCEFONTEXIST __MSABI_LONG(0x00010000)
+#define CF_SCALABLEONLY __MSABI_LONG(0x00020000)
+#define CF_TTONLY __MSABI_LONG(0x00040000)
+#define CF_NOFACESEL __MSABI_LONG(0x00080000)
+#define CF_NOSTYLESEL __MSABI_LONG(0x00100000)
+#define CF_NOSIZESEL __MSABI_LONG(0x00200000)
+#define CF_SELECTSCRIPT __MSABI_LONG(0x00400000)
+#define CF_NOSCRIPTSEL __MSABI_LONG(0x00800000)
+#define CF_NOVERTFONTS __MSABI_LONG(0x01000000)
+
+#define SIMULATED_FONTTYPE 0x8000
+#define PRINTER_FONTTYPE 0x4000
+#define SCREEN_FONTTYPE 0x2000
+#define BOLD_FONTTYPE 0x0100
+#define ITALIC_FONTTYPE 0x0200
+#define REGULAR_FONTTYPE 0x0400
+
+#define WM_CHOOSEFONT_GETLOGFONT (WM_USER + 1)
+#define WM_CHOOSEFONT_SETLOGFONT (WM_USER + 101)
+#define WM_CHOOSEFONT_SETFLAGS (WM_USER + 102)
+
+#define LBSELCHSTRINGA "commdlg_LBSelChangedNotify"
+#if defined(__GNUC__)
+# define LBSELCHSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 }
+#elif defined(_MSC_VER)
+# define LBSELCHSTRINGW L"commdlg_LBSelChangedNotify"
+#else
+static const WCHAR LBSELCHSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'L','B','S','e','l','C','h','a','n','g','e','d','N','o','t','i','f','y',0 };
+#endif
+#define LBSELCHSTRING WINELIB_NAME_AW(LBSELCHSTRING)
+
+#define SHAREVISTRINGA "commdlg_ShareViolation"
+#if defined(__GNUC__)
+# define SHAREVISTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 }
+#elif defined(_MSC_VER)
+# define SHAREVISTRINGW L"commdlg_ShareViolation"
+#else
+static const WCHAR SHAREVISTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'S','h','a','r','e','V','i','o','l','a','t','i','o','n',0 };
+#endif
+#define SHAREVISTRING WINELIB_NAME_AW(SHAREVISTRING)
+
+#define FILEOKSTRINGA "commdlg_FileNameOK"
+#if defined(__GNUC__)
+# define FILEOKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'F','i','l','e','N','a','m','e','O','K',0 }
+#elif defined(_MSC_VER)
+# define FILEOKSTRINGW L"commdlg_FileNameOK"
+#else
+static const WCHAR FILEOKSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'F','i','l','e','N','a','m','e','O','K',0 };
+#endif
+#define FILEOKSTRING WINELIB_NAME_AW(FILEOKSTRING)
+
+#define COLOROKSTRINGA "commdlg_ColorOK"
+#if defined(__GNUC__)
+# define COLOROKSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'C','o','l','o','r','O','K',0 }
+#elif defined(_MSC_VER)
+# define COLOROKSTRINGW L"commdlg_ColorOK"
+#else
+static const WCHAR COLOROKSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'C','o','l','o','r','O','K',0 };
+#endif
+#define COLOROKSTRING WINELIB_NAME_AW(COLOROKSTRING)
+
+#define SETRGBSTRINGA "commdlg_SetRGBColor"
+#if defined(__GNUC__)
+# define SETRGBSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'S','e','t','R','G','B','C','o','l','o','r',0 }
+#elif defined(_MSC_VER)
+# define SETRGBSTRINGW L"commdlg_SetRGBColor"
+#else
+static const WCHAR SETRGBSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'S','e','t','R','G','B','C','o','l','o','r',0 };
+#endif
+#define SETRGBSTRING WINELIB_NAME_AW(SETRGBSTRING)
+
+#define FINDMSGSTRINGA "commdlg_FindReplace"
+#if defined(__GNUC__)
+# define FINDMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'F','i','n','d','R','e','p','l','a','c','e',0 }
+#elif defined(_MSC_VER)
+# define FINDMSGSTRINGW L"commdlg_FindReplace"
+#else
+static const WCHAR FINDMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'F','i','n','d','R','e','p','l','a','c','e',0 };
+#endif
+#define FINDMSGSTRING WINELIB_NAME_AW(FINDMSGSTRING)
+
+#define HELPMSGSTRINGA "commdlg_help"
+#if defined(__GNUC__)
+# define HELPMSGSTRINGW (const WCHAR []){ 'c','o','m','m','d','l','g','_', \
+ 'H','e','l','p',0 }
+#elif defined(_MSC_VER)
+# define HELPMSGSTRINGW L"commdlg_help"
+#else
+static const WCHAR HELPMSGSTRINGW[] = { 'c','o','m','m','d','l','g','_',
+ 'H','e','l','p',0 };
+#endif
+#define HELPMSGSTRING WINELIB_NAME_AW(HELPMSGSTRING)
+
+#define CD_LBSELNOITEMS -1
+#define CD_LBSELCHANGE 0
+#define CD_LBSELSUB 1
+#define CD_LBSELADD 2
+
+#define CDN_FIRST (0U-601U)
+#define CDN_LAST (0U-699U)
+
+#define CDN_INITDONE (CDN_FIRST - 0x0000)
+#define CDN_SELCHANGE (CDN_FIRST - 0x0001)
+#define CDN_FOLDERCHANGE (CDN_FIRST - 0x0002)
+#define CDN_SHAREVIOLATION (CDN_FIRST - 0x0003)
+#define CDN_HELP (CDN_FIRST - 0x0004)
+#define CDN_FILEOK (CDN_FIRST - 0x0005)
+#define CDN_TYPECHANGE (CDN_FIRST - 0x0006)
+#define CDN_INCLUDEITEM (CDN_FIRST - 0x0007)
+
+#define CDM_FIRST (WM_USER + 100)
+#define CDM_LAST (WM_USER + 200)
+
+#define CDM_GETSPEC (CDM_FIRST + 0x0000)
+#define CDM_GETFILEPATH (CDM_FIRST + 0x0001)
+#define CDM_GETFOLDERPATH (CDM_FIRST + 0x0002)
+#define CDM_GETFOLDERIDLIST (CDM_FIRST + 0x0003)
+#define CDM_SETCONTROLTEXT (CDM_FIRST + 0x0004)
+#define CDM_HIDECONTROL (CDM_FIRST + 0x0005)
+#define CDM_SETDEFEXT (CDM_FIRST + 0x0006)
+
+
+/* Messages to query information from the open or save dialogs */
+
+#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetSpec WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec)
+
+#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFilePath WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath)
+
+#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPath WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath)
+
+#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)
+
+#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \
+ (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)
+
+#define CommDlg_OpenSave_HideControl(_hdlg, _id) \
+ (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)
+
+#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \
+ (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)
+
+#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetSpec WINELIB_NAME_AW(CommDlg_OpenSave_GetSpec)
+
+#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFilePath WINELIB_NAME_AW(CommDlg_OpenSave_GetFilePath)
+
+#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)
+#define CommDlg_OpenSave_GetFolderPath WINELIB_NAME_AW(CommDlg_OpenSave_GetFolderPath)
+
+#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) \
+ (int)SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)
+
+#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) \
+ (void)SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)
+
+#define CommDlg_OpenSave_HideControl(_hdlg, _id) \
+ (void)SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)
+
+#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) \
+ (void)SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)
+
+
+typedef UINT_PTR (CALLBACK *LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+typedef UINT_PTR (CALLBACK *LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);
+
+typedef struct tagPDA
+{
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ WORD nFromPage;
+ WORD nToPage;
+ WORD nMinPage;
+ WORD nMaxPage;
+ WORD nCopies;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPRINTHOOKPROC lpfnPrintHook;
+ LPSETUPHOOKPROC lpfnSetupHook;
+ LPCSTR lpPrintTemplateName;
+ LPCSTR lpSetupTemplateName;
+ HGLOBAL hPrintTemplate;
+ HGLOBAL hSetupTemplate;
+} PRINTDLGA, *LPPRINTDLGA;
+
+typedef struct tagPDW
+{
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ WORD nFromPage;
+ WORD nToPage;
+ WORD nMinPage;
+ WORD nMaxPage;
+ WORD nCopies;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPRINTHOOKPROC lpfnPrintHook;
+ LPSETUPHOOKPROC lpfnSetupHook;
+ LPCWSTR lpPrintTemplateName;
+ LPCWSTR lpSetupTemplateName;
+ HGLOBAL hPrintTemplate;
+ HGLOBAL hSetupTemplate;
+} PRINTDLGW, *LPPRINTDLGW;
+
+DECL_WINELIB_TYPE_AW(PRINTDLG)
+DECL_WINELIB_TYPE_AW(LPPRINTDLG)
+
+#define PD_ALLPAGES 0x00000000
+#define PD_SELECTION 0x00000001
+#define PD_PAGENUMS 0x00000002
+#define PD_NOSELECTION 0x00000004
+#define PD_NOPAGENUMS 0x00000008
+#define PD_COLLATE 0x00000010
+#define PD_PRINTTOFILE 0x00000020
+#define PD_PRINTSETUP 0x00000040
+#define PD_NOWARNING 0x00000080
+#define PD_RETURNDC 0x00000100
+#define PD_RETURNIC 0x00000200
+#define PD_RETURNDEFAULT 0x00000400
+#define PD_SHOWHELP 0x00000800
+#define PD_ENABLEPRINTHOOK 0x00001000
+#define PD_ENABLESETUPHOOK 0x00002000
+#define PD_ENABLEPRINTTEMPLATE 0x00004000
+#define PD_ENABLESETUPTEMPLATE 0x00008000
+#define PD_ENABLEPRINTTEMPLATEHANDLE 0x00010000
+#define PD_ENABLESETUPTEMPLATEHANDLE 0x00020000
+#define PD_USEDEVMODECOPIES 0x00040000
+#define PD_USEDEVMODECOPIESANDCOLLATE 0x00040000
+#define PD_DISABLEPRINTTOFILE 0x00080000
+#define PD_HIDEPRINTTOFILE 0x00100000
+#define PD_NONETWORKBUTTON 0x00200000
+#define PD_CURRENTPAGE 0x00400000
+#define PD_NOCURRENTPAGE 0x00800000
+#define PD_EXCLUSIONFLAGS 0x01000000
+#define PD_USELARGETEMPLATE 0x10000000
+
+
+#define PD_EXCL_COPIESANDCOLLATE (DM_COPIES | DM_COLLATE)
+
+#define START_PAGE_GENERAL 0xffffffff
+
+#define PD_RESULT_CANCEL 0
+#define PD_RESULT_PRINT 1
+#define PD_RESULT_APPLY 2
+
+typedef struct
+{
+ WORD wDriverOffset;
+ WORD wDeviceOffset;
+ WORD wOutputOffset;
+ WORD wDefault;
+} DEVNAMES;
+typedef DEVNAMES * LPDEVNAMES;
+
+#define DN_DEFAULTPRN 0x0001
+
+/* PageSetupDlg stuff ... */
+#define WM_PSD_PAGESETUPDLG (WM_USER )
+#define WM_PSD_FULLPAGERECT (WM_USER+1)
+#define WM_PSD_MINMARGINRECT (WM_USER+2)
+#define WM_PSD_MARGINRECT (WM_USER+3)
+#define WM_PSD_GREEKTEXTRECT (WM_USER+4)
+#define WM_PSD_ENVSTAMPRECT (WM_USER+5)
+#define WM_PSD_YAFULLPAGERECT (WM_USER+6)
+
+typedef UINT (CALLBACK *LPPAGEPAINTHOOK)( HWND, UINT, WPARAM, LPARAM );
+typedef UINT (CALLBACK *LPPAGESETUPHOOK)( HWND, UINT, WPARAM, LPARAM );
+
+typedef struct tagPSDA
+{
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ DWORD Flags;
+ POINT ptPaperSize;
+ RECT rtMinMargin;
+ RECT rtMargin;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPAGESETUPHOOK lpfnPageSetupHook;
+ LPPAGEPAINTHOOK lpfnPagePaintHook;
+ LPCSTR lpPageSetupTemplateName;
+ HGLOBAL hPageSetupTemplate;
+} PAGESETUPDLGA,*LPPAGESETUPDLGA;
+
+typedef struct tagPSDW
+{
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ DWORD Flags;
+ POINT ptPaperSize;
+ RECT rtMinMargin;
+ RECT rtMargin;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPAGESETUPHOOK lpfnPageSetupHook;
+ LPPAGEPAINTHOOK lpfnPagePaintHook;
+ LPCWSTR lpPageSetupTemplateName;
+ HGLOBAL hPageSetupTemplate;
+} PAGESETUPDLGW,*LPPAGESETUPDLGW;
+DECL_WINELIB_TYPE_AW(PAGESETUPDLG)
+DECL_WINELIB_TYPE_AW(LPPAGESETUPDLG)
+
+#define PSD_DEFAULTMINMARGINS 0x00000000
+#define PSD_INWININIINTLMEASURE 0x00000000
+
+#define PSD_MINMARGINS 0x00000001
+#define PSD_MARGINS 0x00000002
+#define PSD_INTHOUSANDTHSOFINCHES 0x00000004
+#define PSD_INHUNDREDTHSOFMILLIMETERS 0x00000008
+#define PSD_DISABLEMARGINS 0x00000010
+#define PSD_DISABLEPRINTER 0x00000020
+#define PSD_NOWARNING 0x00000080
+#define PSD_DISABLEORIENTATION 0x00000100
+#define PSD_RETURNDEFAULT 0x00000400
+#define PSD_DISABLEPAPER 0x00000200
+#define PSD_SHOWHELP 0x00000800
+#define PSD_ENABLEPAGESETUPHOOK 0x00002000
+#define PSD_ENABLEPAGESETUPTEMPLATE 0x00008000
+#define PSD_ENABLEPAGESETUPTEMPLATEHANDLE 0x00020000
+#define PSD_ENABLEPAGEPAINTHOOK 0x00040000
+#define PSD_DISABLEPAGEPAINTING 0x00080000
+#define PSD_NONETWORKBUTTON 0x00200000
+
+typedef struct tagPRINTPAGERANGE
+{
+ DWORD nFromPage;
+ DWORD nToPage;
+} PRINTPAGERANGE, *LPPRINTPAGERANGE;
+
+typedef struct tagPDEXA
+{
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ DWORD Flags2;
+ DWORD ExclusionFlags;
+ DWORD nPageRanges;
+ DWORD nMaxPageRanges;
+ LPPRINTPAGERANGE lpPageRanges;
+ DWORD nMinPage;
+ DWORD nMaxPage;
+ DWORD nCopies;
+ HINSTANCE hInstance;
+ LPCSTR lpPrintTemplateName;
+ void* /*LPUNKNOWN*/ lpCallback;
+ DWORD nPropertyPages;
+ HPROPSHEETPAGE* lphPropertyPages;
+ DWORD nStartPage;
+ DWORD dwResultAction;
+} PRINTDLGEXA, *LPPRINTDLGEXA;
+
+typedef struct tagPDEXW
+{
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ HDC hDC;
+ DWORD Flags;
+ DWORD Flags2;
+ DWORD ExclusionFlags;
+ DWORD nPageRanges;
+ DWORD nMaxPageRanges;
+ LPPRINTPAGERANGE lpPageRanges;
+ DWORD nMinPage;
+ DWORD nMaxPage;
+ DWORD nCopies;
+ HINSTANCE hInstance;
+ LPCWSTR lpPrintTemplateName;
+ void* /*LPUNKNOWN*/ lpCallback;
+ DWORD nPropertyPages;
+ HPROPSHEETPAGE* lphPropertyPages;
+ DWORD nStartPage;
+ DWORD dwResultAction;
+} PRINTDLGEXW, *LPPRINTDLGEXW;
+
+DECL_WINELIB_TYPE_AW(PRINTDLGEX)
+DECL_WINELIB_TYPE_AW(LPPRINTDLGEX)
+
+#ifdef STDMETHOD
+
+DEFINE_GUID(IID_IPrintDialogCallback, 0x5852a2c3,0x6530,0x11d1,0xb6,0xa3,0x00,0x00,0xf8,0x75,0x7b,0xf9);
+#define INTERFACE IPrintDialogCallback
+DECLARE_INTERFACE_(IPrintDialogCallback,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IPrintDialogCallback methods ***/
+ STDMETHOD(InitDone)(THIS) PURE;
+ STDMETHOD(SelectionChange)(THIS) PURE;
+ STDMETHOD(HandleMessage)(THIS_ HWND,UINT,WPARAM,LPARAM,LRESULT *) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_IPrintDialogServices, 0x509aaeda,0x5639,0x11d1,0xb6,0xa1,0x00,0x00,0xf8,0x75,0x7b,0xf9);
+#define INTERFACE IPrintDialogServices
+DECLARE_INTERFACE_(IPrintDialogServices,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID,void **) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IPrintDialogServices methods ***/
+ STDMETHOD(GetCurrentDevMode)(THIS_ LPDEVMODEW,UINT *) PURE;
+ STDMETHOD(GetCurrentPrinterName)(THIS_ LPWSTR,UINT *) PURE;
+ STDMETHOD(GetCurrentPortName)(THIS_ LPWSTR,UINT *) PURE;
+};
+#undef INTERFACE
+
+#endif /* STDMETHOD */
+
+BOOL WINAPI ChooseColorA(LPCHOOSECOLORA lpChCol);
+BOOL WINAPI ChooseColorW(LPCHOOSECOLORW lpChCol);
+#define ChooseColor WINELIB_NAME_AW(ChooseColor)
+DWORD WINAPI CommDlgExtendedError(void);
+HWND WINAPI FindTextA(LPFINDREPLACEA lpFind);
+HWND WINAPI FindTextW(LPFINDREPLACEW lpFind);
+#define FindText WINELIB_NAME_AW(FindText)
+short WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, WORD cbBuf);
+short WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, WORD cbBuf);
+#define GetFileTitle WINELIB_NAME_AW(GetFileTitle)
+BOOL WINAPI GetOpenFileNameA(LPOPENFILENAMEA ofn);
+BOOL WINAPI GetOpenFileNameW(LPOPENFILENAMEW ofn);
+#define GetOpenFileName WINELIB_NAME_AW(GetOpenFileName)
+BOOL WINAPI GetSaveFileNameA(LPOPENFILENAMEA ofn);
+BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn);
+#define GetSaveFileName WINELIB_NAME_AW(GetSaveFileName)
+BOOL WINAPI PageSetupDlgA( LPPAGESETUPDLGA );
+BOOL WINAPI PageSetupDlgW( LPPAGESETUPDLGW );
+#define PageSetupDlg WINELIB_NAME_AW(PageSetupDlg)
+BOOL WINAPI PrintDlgA( LPPRINTDLGA printdlg);
+BOOL WINAPI PrintDlgW( LPPRINTDLGW printdlg);
+#define PrintDlg WINELIB_NAME_AW(PrintDlg)
+HRESULT WINAPI PrintDlgExA(LPPRINTDLGEXA);
+HRESULT WINAPI PrintDlgExW(LPPRINTDLGEXW);
+#define PrintDlgEx WINELIB_NAME_AW(PrintDlgEx)
+HWND WINAPI ReplaceTextA( LPFINDREPLACEA lpFind);
+HWND WINAPI ReplaceTextW( LPFINDREPLACEW lpFind);
+#define ReplaceText WINELIB_NAME_AW(ReplaceText)
+BOOL WINAPI ChooseFontA(LPCHOOSEFONTA);
+BOOL WINAPI ChooseFontW(LPCHOOSEFONTW);
+#define ChooseFont WINELIB_NAME_AW(ChooseFont)
+
+void COMDLG32_SetCommDlgExtendedError(DWORD err);
+
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_COMMDLG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl
new file mode 100644
index 00000000..da4255cf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/commoncontrols.idl
@@ -0,0 +1,223 @@
+/*
+ * Common controls v6 interface definitions
+ *
+ * Copyright 2009 Owen Rudge for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+/* Definitions required for widl, but already defined in commctrl.h for C */
+cpp_quote("#if 0")
+typedef DWORD RGBQUAD;
+typedef IUnknown* HIMAGELIST;
+
+typedef struct
+{
+ HBITMAP hbmImage;
+ HBITMAP hbmMask;
+ int Unused1;
+ int Unused2;
+ RECT rcImage;
+} IMAGEINFO;
+
+typedef IMAGEINFO* LPIMAGEINFO;
+
+typedef struct
+{
+ DWORD cbSize;
+ HIMAGELIST himl;
+ int i;
+ HDC hdcDst;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ int xBitmap;
+ int yBitmap;
+ COLORREF rgbBk;
+ COLORREF rgbFg;
+ UINT fStyle;
+ DWORD dwRop;
+ DWORD fState;
+ DWORD Frame;
+ COLORREF crEffect;
+} IMAGELISTDRAWPARAMS;
+
+typedef IMAGELISTDRAWPARAMS* LPIMAGELISTDRAWPARAMS;
+cpp_quote("#endif")
+
+cpp_quote("HRESULT WINAPI ImageList_CoCreateInstance(REFCLSID,const IUnknown *, REFIID,void **);")
+
+const UINT ILIF_ALPHA = 1;
+
+[
+ object,
+ uuid(46EB5926-582E-4017-9FDF-E8998DAA0950),
+ helpstring("Image List"),
+ local
+]
+interface IImageList : IUnknown
+{
+ HRESULT Add(
+ [in] HBITMAP hbmImage,
+ [in] HBITMAP hbmMask,
+ [out] int* pi);
+
+ HRESULT ReplaceIcon(
+ [in] int i,
+ [in] HICON hicon,
+ [out] int* pi);
+
+ HRESULT SetOverlayImage(
+ [in] int iImage,
+ [in] int iOverlay);
+
+ HRESULT Replace(
+ [in] int i,
+ [in] HBITMAP hbmImage,
+ [in] HBITMAP hbmMask);
+
+ HRESULT AddMasked(
+ [in] HBITMAP hbmImage,
+ [in] COLORREF crMask,
+ [out] int* pi);
+
+ HRESULT Draw(
+ [in] IMAGELISTDRAWPARAMS* pimldp);
+
+ HRESULT Remove(
+ [in] int i);
+
+ HRESULT GetIcon(
+ [in] int i,
+ [in] UINT flags,
+ [out] HICON* picon);
+
+ HRESULT GetImageInfo(
+ [in] int i,
+ [out] IMAGEINFO* pImageInfo);
+
+ HRESULT Copy(
+ [in] int iDst,
+ [in] IUnknown* punkSrc,
+ [in] int iSrc,
+ [in] UINT uFlags);
+
+ HRESULT Merge(
+ [in] int i1,
+ [in] IUnknown* punk2,
+ [in] int i2,
+ [in] int dx,
+ [in] int dy,
+ [out] REFIID riid,
+ [out] PVOID* ppv);
+
+ HRESULT Clone(
+ [in] REFIID riid,
+ [out] PVOID* ppv);
+
+ HRESULT GetImageRect(
+ [in] int i,
+ [out] RECT* prc);
+
+ HRESULT GetIconSize(
+ [out] int* cx,
+ [out] int* cy);
+
+ HRESULT SetIconSize(
+ [in] int cx,
+ [in] int cy);
+
+ HRESULT GetImageCount(
+ [out] int* pi);
+
+ HRESULT SetImageCount(
+ [in] UINT uNewCount);
+
+ HRESULT SetBkColor(
+ [in] COLORREF clrBk,
+ [out] COLORREF* pclr);
+
+ HRESULT GetBkColor(
+ [out] COLORREF* pclr);
+
+ HRESULT BeginDrag(
+ [in] int iTrack,
+ [in] int dxHotspot,
+ [in] int dyHotspot);
+
+ HRESULT EndDrag();
+
+ HRESULT DragEnter(
+ [in] HWND hwndLock,
+ [in] int x,
+ [in] int y);
+
+ HRESULT DragLeave(
+ [in] HWND hwndLock);
+
+ HRESULT DragMove(
+ [in] int x,
+ [in] int y);
+
+ HRESULT SetDragCursorImage(
+ [in] IUnknown* punk,
+ [in] int iDrag,
+ [in] int dxHotspot,
+ [in] int dyHotspot);
+
+ HRESULT DragShowNolock(
+ [in] BOOL fShow);
+
+ HRESULT GetDragImage(
+ [out] POINT * ppt,
+ [out] POINT * pptHotspot,
+ [out] REFIID riid,
+ [out] PVOID* ppv);
+
+ HRESULT GetItemFlags(
+ [in] int i,
+ [out] DWORD *dwFlags);
+
+ HRESULT GetOverlayImage(
+ [in] int iOverlay,
+ [out] int* piIndex);
+}
+
+[
+ uuid(BCADA15B-B428-420c-8D28-023590924C9F)
+]
+library CommonControlObjects
+{
+ [
+ uuid(7C476BA2-02B1-48f4-8048-B24619DDC058)
+ ]
+ coclass ImageList
+ {
+ interface IImageList;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h
new file mode 100644
index 00000000..1d082cc2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/compobj.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_COMPOBJ_H
+#define __WINE_COMPOBJ_H
+
+/* compobj.h is just a synonym for objbase.h */
+#include <objbase.h>
+
+#endif /* __WINE_COMPOBJ_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h
new file mode 100644
index 00000000..2cd8715b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h
@@ -0,0 +1,1273 @@
+/* include/config.h. Generated from config.h.in by configure. */
+/* include/config.h.in. Generated from configure.ac by autoheader. */
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH __attribute__((__ms_hook_prologue__))
+
+/* Define to the file extension for executables. */
+#define EXEEXT ""
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+#define HAVE_ALSA_ASOUNDLIB_H 1
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+#define HAVE_AL_AL_H 1
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+#define HAVE_ARPA_NAMESER_H 1
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+#define HAVE_CAPI20_H 1
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+#define HAVE_CUPS_CUPS_H 1
+
+/* Define to 1 if you have the <curses.h> header file. */
+#define HAVE_CURSES_H 1
+
+/* Define if you have the daylight variable */
+#define HAVE_DAYLIGHT 1
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+#define HAVE_DBUS_DBUS_H 1
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+ file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+#define HAVE_DLADDR 1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the `dlopen' function. */
+#define HAVE_DLOPEN 1
+
+/* Define to 1 if you have the <elf.h> header file. */
+#define HAVE_ELF_H 1
+
+/* Define to 1 if you have the `epoll_create' function. */
+#define HAVE_EPOLL_CREATE 1
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+#define HAVE_FONTCONFIG_FONTCONFIG_H 1
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+#define HAVE_FUTIMESAT 1
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#define HAVE_GETADDRINFO 1
+
+/* Define to 1 if you have the `getdirentries' function. */
+#define HAVE_GETDIRENTRIES 1
+
+/* Define to 1 if you have the `getnameinfo' function. */
+#define HAVE_GETNAMEINFO 1
+
+/* Define to 1 if you have the `getnetbyname' function. */
+#define HAVE_GETNETBYNAME 1
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+#define HAVE_GETPAGESIZE 1
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+#define HAVE_GETPWUID 1
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+#define HAVE_GETUID 1
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+#define HAVE_GRP_H 1
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+#define HAVE_GSM_GSM_H 1
+
+/* Define to 1 if you have the <gsm.h> header file. */
+#define HAVE_GSM_H 1
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+#define HAVE_HAL_LIBHAL_H 1
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+/* #undef HAVE_IEEEFP_H */
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+/* #undef HAVE_IO_H */
+
+/* Define to 1 if you have the `isinf' function. */
+#define HAVE_ISINF 1
+
+/* Define to 1 if you have the `isnan' function. */
+#define HAVE_ISNAN 1
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+#define HAVE_LBER_H 1
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+#define HAVE_LCMS_H 1
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+#define HAVE_LDAP_H 1
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+#define HAVE_LIBXML_PARSER_H 1
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+#define HAVE_LIBXSLT_PATTERN_H 1
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+#define HAVE_LIBXSLT_TRANSFORM_H 1
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+#define HAVE_LINK_H 1
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+#define HAVE_LINUX_22_JOYSTICK_API 1
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+#define HAVE_LINUX_CAPI_H 1
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+#define HAVE_LINUX_CDROM_H 1
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+#define HAVE_LINUX_GETHOSTBYNAME_R_6 1
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+#define HAVE_LINUX_HDREG_H 1
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+#define HAVE_LINUX_INPUT_H 1
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+#define HAVE_LINUX_IOCTL_H 1
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+#define HAVE_LINUX_IPX_H 1
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+#define HAVE_LINUX_IRDA_H 1
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+#define HAVE_LINUX_JOYSTICK_H 1
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+#define HAVE_LINUX_MAJOR_H 1
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+#define HAVE_LINUX_PARAM_H 1
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+#define HAVE_LINUX_SERIAL_H 1
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+#define HAVE_LINUX_TYPES_H 1
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+#define HAVE_MMAP 1
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+#define HAVE_MPG123_H 1
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+#define HAVE_NCURSES_H 1
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+#define HAVE_NETINET_IF_ETHER_H 1
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H 1
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+#define HAVE_NETINET_IN_SYSTM_H 1
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+#define HAVE_NETINET_IP_H 1
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+#define HAVE_NETINET_IP_ICMP_H 1
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+#define HAVE_NETINET_TCP_H 1
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+#define HAVE_NETINET_UDP_H 1
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+#define HAVE_NETIPX_IPX_H 1
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+#define HAVE_NET_IF_ARP_H 1
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#define HAVE_NET_IF_H 1
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+#define HAVE_NET_ROUTE_H 1
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+#define HAVE_NS_MSG__MSG_PTR 1
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+#define HAVE_OPENSSL_ERR_H 1
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+#define HAVE_OPENSSL_SSL_H 1
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+#define HAVE_PID_T 1
+
+/* Define to 1 if you have the `pipe2' function. */
+#define HAVE_PIPE2 1
+
+/* Define to 1 if you have the <png.h> header file. */
+#define HAVE_PNG_H 1
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+#define HAVE_PPDEV 1
+
+/* Define to 1 if you have the `prctl' function. */
+#define HAVE_PRCTL 1
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+/* #undef HAVE_PROCESS_H */
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+#define HAVE_PTHREAD_GETATTR_NP 1
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#define HAVE_PTHREAD_H 1
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#define HAVE_PWD_H 1
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+#define HAVE_RESOLV 1
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#define HAVE_RESOLV_H 1
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+#define HAVE_SCHED_SETAFFINITY 1
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+#define HAVE_SCSI_SCSI_H 1
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+#define HAVE_SCSI_SCSI_IOCTL_H 1
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+#define HAVE_SCSI_SG_H 1
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+#define HAVE_SETRLIMIT 1
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+#define HAVE_SG_IO_HDR_T_INTERFACE_ID 1
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#define HAVE_SIGALTSTACK 1
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+#define HAVE_SIGINFO_T_SI_FD 1
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+#define HAVE_SNPRINTF 1
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+/* #undef HAVE_SPAWNVP */
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#define HAVE_STROPTS_H 1
+
+/* Define to 1 if you have the `strtold' function. */
+#define HAVE_STRTOLD 1
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+#define HAVE_STRUCT_FF_EFFECT_DIRECTION 1
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FRSIZE 1
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+#define HAVE_SYMLINK 1
+
+/* Define to 1 if you have the <syscall.h> header file. */
+#define HAVE_SYSCALL_H 1
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+#define HAVE_SYS_ASOUNDLIB_H 1
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+/* #undef HAVE_SYS_ELF32_H */
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+#define HAVE_SYS_EPOLL_H 1
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+#define HAVE_SYS_INOTIFY_H 1
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#define HAVE_SYS_MMAN_H 1
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+#define HAVE_SYS_PRCTL_H 1
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+#define HAVE_SYS_PTRACE_H 1
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#define HAVE_SYS_RESOURCE_H 1
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+#define HAVE_SYS_SHM_H 1
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+#define HAVE_SYS_SIGNAL_H 1
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+#define HAVE_SYS_SOCKETVAR_H 1
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+#define HAVE_SYS_SYSCALL_H 1
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#define HAVE_SYS_SYSCTL_H 1
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+#define HAVE_SYS_USER_H 1
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#define HAVE_SYS_UTSNAME_H 1
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+#define HAVE_SYS_VM86_H 1
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+#define HAVE_UCONTEXT_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+/* #undef HAVE_ZLIB */
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+/* #undef HAVE__PCLOSE */
+
+/* Define to 1 if you have the `_popen' function. */
+/* #undef HAVE__POPEN */
+
+/* Define to 1 if you have the `_snprintf' function. */
+/* #undef HAVE__SNPRINTF */
+
+/* Define to 1 if you have the `_spawnvp' function. */
+/* #undef HAVE__SPAWNVP */
+
+/* Define to 1 if you have the `_strdup' function. */
+/* #undef HAVE__STRDUP */
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+/* #undef HAVE__VSNPRINTF */
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel@winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.so"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#define _FILE_OFFSET_BITS 64
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl " #name suffix "\n\t.type " #name suffix ",@function\n" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc\n\t.previous");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".type " __ASM_NAME(name) ",@function"
+
+/* Define to a macro to generate an assembly function with C calling
+ convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) ""
+
+/* Define to a macro to generate an assembly function with stdcall calling
+ convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in
new file mode 100644
index 00000000..01e484ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/config.h.in
@@ -0,0 +1,1412 @@
+/* include/config.h.in. Generated from configure.ac by autoheader. */
+
+#ifndef __WINE_CONFIG_H
+#define __WINE_CONFIG_H
+#ifndef WINE_CROSSTEST
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#undef DECLSPEC_HOTPATCH
+
+/* Define to the file extension for executables. */
+#undef EXEEXT
+
+/* Define to 1 if you have the <alias.h> header file. */
+#undef HAVE_ALIAS_H
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+#undef HAVE_ALSA_ASOUNDLIB_H
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+#undef HAVE_AL_AL_H
+
+/* Define to 1 if you have the <ApplicationServices/ApplicationServices.h>
+ header file. */
+#undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+#undef HAVE_ARPA_NAMESER_H
+
+/* Define to 1 if you have the `asctime_r' function. */
+#undef HAVE_ASCTIME_R
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#undef HAVE_ASM_TYPES_H
+
+/* Define to 1 if you have the <asm/user.h> header file. */
+#undef HAVE_ASM_USER_H
+
+/* Define to 1 if you have the <AudioToolbox/AudioConverter.h> header file. */
+#undef HAVE_AUDIOTOOLBOX_AUDIOCONVERTER_H
+
+/* Define to 1 if you have the <AudioUnit/AudioComponent.h> header file. */
+#undef HAVE_AUDIOUNIT_AUDIOCOMPONENT_H
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+#undef HAVE_AUDIOUNIT_AUDIOUNIT_H
+
+/* Define to 1 if you have the `AUGraphAddNode' function. */
+#undef HAVE_AUGRAPHADDNODE
+
+/* Define to 1 if you have the <capi20.h> header file. */
+#undef HAVE_CAPI20_H
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+#undef HAVE_CARBON_CARBON_H
+
+/* Define to 1 if you have the `chsize' function. */
+#undef HAVE_CHSIZE
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the <CL/cl.h> header file. */
+#undef HAVE_CL_CL_H
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+#undef HAVE_COREAUDIO_COREAUDIO_H
+
+/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */
+#undef HAVE_CORESERVICES_CORESERVICES_H
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+#undef HAVE_CUPS_CUPS_H
+
+/* Define to 1 if you have the <curses.h> header file. */
+#undef HAVE_CURSES_H
+
+/* Define if you have the daylight variable */
+#undef HAVE_DAYLIGHT
+
+/* Define to 1 if you have the <direct.h> header file. */
+#undef HAVE_DIRECT_H
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+ file. */
+#undef HAVE_DISKARBITRATION_DISKARBITRATION_H
+
+/* Define to 1 if you have the `dladdr' function. */
+#undef HAVE_DLADDR
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `dlopen' function. */
+#undef HAVE_DLOPEN
+
+/* Define to 1 if you have the <elf.h> header file. */
+#undef HAVE_ELF_H
+
+/* Define to 1 if you have the `epoll_create' function. */
+#undef HAVE_EPOLL_CREATE
+
+/* Define to 1 if you have the `fallocate' function. */
+#undef HAVE_FALLOCATE
+
+/* Define to 1 if you have the `ffs' function. */
+#undef HAVE_FFS
+
+/* Define to 1 if you have the `finite' function. */
+#undef HAVE_FINITE
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the `fnmatch' function. */
+#undef HAVE_FNMATCH
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#undef HAVE_FNMATCH_H
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+#undef HAVE_FONTCONFIG_FONTCONFIG_H
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `fpclass' function. */
+#undef HAVE_FPCLASS
+
+/* Define if FreeType 2 is installed */
+#undef HAVE_FREETYPE
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+#undef HAVE_FREETYPE_FREETYPE_H
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+#undef HAVE_FREETYPE_FTGLYPH_H
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+#undef HAVE_FREETYPE_FTLCDFIL_H
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+#undef HAVE_FREETYPE_FTMODAPI_H
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+#undef HAVE_FREETYPE_FTOUTLN_H
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+#undef HAVE_FREETYPE_FTSNAMES_H
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+#undef HAVE_FREETYPE_FTTRIGON_H
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+#undef HAVE_FREETYPE_FTTYPES_H
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+#undef HAVE_FREETYPE_FTWINFNT_H
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+#undef HAVE_FREETYPE_TTNAMEID_H
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+#undef HAVE_FREETYPE_TTTABLES_H
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#undef HAVE_FSBLKCNT_T
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#undef HAVE_FSFILCNT_T
+
+/* Define to 1 if you have the `fstatfs' function. */
+#undef HAVE_FSTATFS
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#undef HAVE_FSTATVFS
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+#undef HAVE_FT2BUILD_H
+
+/* Define to 1 if you have the `ftruncate' function. */
+#undef HAVE_FTRUNCATE
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+#undef HAVE_FT_TRUETYPEENGINETYPE
+
+/* Define to 1 if you have the `futimens' function. */
+#undef HAVE_FUTIMENS
+
+/* Define to 1 if you have the `futimes' function. */
+#undef HAVE_FUTIMES
+
+/* Define to 1 if you have the `futimesat' function. */
+#undef HAVE_FUTIMESAT
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `getattrlist' function. */
+#undef HAVE_GETATTRLIST
+
+/* Define to 1 if you have the `getdirentries' function. */
+#undef HAVE_GETDIRENTRIES
+
+/* Define to 1 if you have the `getnameinfo' function. */
+#undef HAVE_GETNAMEINFO
+
+/* Define to 1 if you have the `getnetbyname' function. */
+#undef HAVE_GETNETBYNAME
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#undef HAVE_GETPROTOBYNAME
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#undef HAVE_GETPROTOBYNUMBER
+
+/* Define to 1 if you have the `getpwuid' function. */
+#undef HAVE_GETPWUID
+
+/* Define to 1 if you have the `getservbyport' function. */
+#undef HAVE_GETSERVBYPORT
+
+/* Define to 1 if you have the <gettext-po.h> header file. */
+#undef HAVE_GETTEXT_PO_H
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if we have the libgphoto2 development environment */
+#undef HAVE_GPHOTO2
+
+/* Define if we have the libgphoto2_port development environment */
+#undef HAVE_GPHOTO2_PORT
+
+/* Define to 1 if you have the <grp.h> header file. */
+#undef HAVE_GRP_H
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+#undef HAVE_GSM_GSM_H
+
+/* Define to 1 if you have the <gsm.h> header file. */
+#undef HAVE_GSM_H
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define to 1 if you have the <ifaddrs.h> header file. */
+#undef HAVE_IFADDRS_H
+
+/* Define to 1 if you have the `if_nameindex' function. */
+#undef HAVE_IF_NAMEINDEX
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+#undef HAVE_INET_MIB2_H
+
+/* Define to 1 if you have the `inet_network' function. */
+#undef HAVE_INET_NETWORK
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#undef HAVE_INET_NTOP
+
+/* Define to 1 if you have the `inet_pton' function. */
+#undef HAVE_INET_PTON
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+#undef HAVE_IOHIDMANAGERCREATE
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+#undef HAVE_IOKIT_HID_IOHIDLIB_H
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+#undef HAVE_IOKIT_IOKITLIB_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the `isinf' function. */
+#undef HAVE_ISINF
+
+/* Define to 1 if you have the `isnan' function. */
+#undef HAVE_ISNAN
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+#undef HAVE_JPEGLIB_H
+
+/* Define to 1 if you have the `kqueue' function. */
+#undef HAVE_KQUEUE
+
+/* Define to 1 if you have the <kstat.h> header file. */
+#undef HAVE_KSTAT_H
+
+/* Define to 1 if you have the <lber.h> header file. */
+#undef HAVE_LBER_H
+
+/* Define if you have the LittleCMS development environment */
+#undef HAVE_LCMS2
+
+/* Define to 1 if you have the <lcms2.h> header file. */
+#undef HAVE_LCMS2_H
+
+/* Define if you have the OpenLDAP development environment */
+#undef HAVE_LDAP
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+#undef HAVE_LDAP_COUNT_REFERENCES
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+#undef HAVE_LDAP_FIRST_REFERENCE
+
+/* Define to 1 if you have the <ldap.h> header file. */
+#undef HAVE_LDAP_H
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+#undef HAVE_LDAP_NEXT_REFERENCE
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+#undef HAVE_LDAP_PARSE_REFERENCE
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+#undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+#undef HAVE_LDAP_PARSE_SORT_CONTROL
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+#undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+#undef HAVE_LDAP_PARSE_VLV_CONTROL
+
+/* Define to 1 if you have the `gettextpo' library (-lgettextpo). */
+#undef HAVE_LIBGETTEXTPO
+
+/* Define to 1 if you have the `i386' library (-li386). */
+#undef HAVE_LIBI386
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+#undef HAVE_LIBKSTAT
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+#undef HAVE_LIBOSSAUDIO
+
+/* Define to 1 if you have the `procstat' library (-lprocstat). */
+#undef HAVE_LIBPROCSTAT
+
+/* Define to 1 if you have the <libprocstat.h> header file. */
+#undef HAVE_LIBPROCSTAT_H
+
+/* Define to 1 if you have the <libproc.h> header file. */
+#undef HAVE_LIBPROC_H
+
+/* Define to 1 if you have the <libv4l1.h> header file. */
+#undef HAVE_LIBV4L1_H
+
+/* Define if you have the libxml2 library */
+#undef HAVE_LIBXML2
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+#undef HAVE_LIBXML_PARSER_H
+
+/* Define to 1 if you have the <libxml/SAX2.h> header file. */
+#undef HAVE_LIBXML_SAX2_H
+
+/* Define to 1 if you have the <libxml/xmlsave.h> header file. */
+#undef HAVE_LIBXML_XMLSAVE_H
+
+/* Define if you have the X Shape extension */
+#undef HAVE_LIBXSHAPE
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+#undef HAVE_LIBXSLT_PATTERN_H
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+#undef HAVE_LIBXSLT_TRANSFORM_H
+
+/* Define if you have the X Shm extension */
+#undef HAVE_LIBXXSHM
+
+/* Define to 1 if you have the <link.h> header file. */
+#undef HAVE_LINK_H
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+#undef HAVE_LINUX_22_JOYSTICK_API
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+#undef HAVE_LINUX_CAPI_H
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+#undef HAVE_LINUX_CDROM_H
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+#undef HAVE_LINUX_COMPILER_H
+
+/* Define to 1 if you have the <linux/filter.h> header file. */
+#undef HAVE_LINUX_FILTER_H
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+#undef HAVE_LINUX_GETHOSTBYNAME_R_6
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+#undef HAVE_LINUX_HDREG_H
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+#undef HAVE_LINUX_INPUT_H
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+#undef HAVE_LINUX_IOCTL_H
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+#undef HAVE_LINUX_IPX_H
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+#undef HAVE_LINUX_IRDA_H
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+#undef HAVE_LINUX_JOYSTICK_H
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+#undef HAVE_LINUX_MAJOR_H
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+#undef HAVE_LINUX_PARAM_H
+
+/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
+#undef HAVE_LINUX_RTNETLINK_H
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+#undef HAVE_LINUX_SERIAL_H
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+#undef HAVE_LINUX_TYPES_H
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+#undef HAVE_LINUX_UCDROM_H
+
+/* Define to 1 if you have the <linux/videodev2.h> header file. */
+#undef HAVE_LINUX_VIDEODEV2_H
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+#undef HAVE_LINUX_VIDEODEV_H
+
+/* Define to 1 if the system has the type `long long'. */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the <lwp.h> header file. */
+#undef HAVE_LWP_H
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+#undef HAVE_MACHINE_CPU_H
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+#undef HAVE_MACHINE_LIMITS_H
+
+/* Define to 1 if you have the <machine/sysarch.h> header file. */
+#undef HAVE_MACHINE_SYSARCH_H
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+#undef HAVE_MACH_MACHINE_H
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+#undef HAVE_MACH_MACH_H
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+#undef HAVE_MACH_O_DYLD_IMAGES_H
+
+/* Define to 1 if you have the <mach-o/loader.h> header file. */
+#undef HAVE_MACH_O_LOADER_H
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+#undef HAVE_MACH_O_NLIST_H
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#undef HAVE_MNTENT_H
+
+/* Define to 1 if the system has the type `mode_t'. */
+#undef HAVE_MODE_T
+
+/* Define to 1 if you have the `mousemask' function. */
+#undef HAVE_MOUSEMASK
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+#undef HAVE_MPG123_H
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+#undef HAVE_NCURSES_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+#undef HAVE_NETINET_ICMP_VAR_H
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+#undef HAVE_NETINET_IF_ETHER_H
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+#undef HAVE_NETINET_IF_INARP_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+#undef HAVE_NETINET_IN_PCB_H
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+#undef HAVE_NETINET_IN_SYSTM_H
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+#undef HAVE_NETINET_IP_H
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+#undef HAVE_NETINET_IP_ICMP_H
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+#undef HAVE_NETINET_IP_VAR_H
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+#undef HAVE_NETINET_TCP_FSM_H
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+#undef HAVE_NETINET_TCP_H
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+#undef HAVE_NETINET_TCP_TIMER_H
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+#undef HAVE_NETINET_TCP_VAR_H
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+#undef HAVE_NETINET_UDP_H
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+#undef HAVE_NETINET_UDP_VAR_H
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+#undef HAVE_NETIPX_IPX_H
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+#undef HAVE_NET_IF_ARP_H
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+#undef HAVE_NET_IF_DL_H
+
+/* Define to 1 if you have the <net/if.h> header file. */
+#undef HAVE_NET_IF_H
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+#undef HAVE_NET_IF_TYPES_H
+
+/* Define to 1 if you have the <net/route.h> header file. */
+#undef HAVE_NET_ROUTE_H
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+#undef HAVE_NS_MSG__MSG_PTR
+
+/* Define to 1 if the system has the type `off_t'. */
+#undef HAVE_OFF_T
+
+/* Define if mkdir takes only one argument */
+#undef HAVE_ONE_ARG_MKDIR
+
+/* Define to 1 if OpenAL is available */
+#undef HAVE_OPENAL
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+#undef HAVE_OPENAL_AL_H
+
+/* Define to 1 if you have the <OpenCL/opencl.h> header file. */
+#undef HAVE_OPENCL_OPENCL_H
+
+/* Define to 1 if `numaudioengines' is a member of `oss_sysinfo'. */
+#undef HAVE_OSS_SYSINFO_NUMAUDIOENGINES
+
+/* Define to 1 if you have the `pclose' function. */
+#undef HAVE_PCLOSE
+
+/* Define to 1 if the system has the type `pid_t'. */
+#undef HAVE_PID_T
+
+/* Define to 1 if you have the `pipe2' function. */
+#undef HAVE_PIPE2
+
+/* Define to 1 if you have the <png.h> header file. */
+#undef HAVE_PNG_H
+
+/* Define to 1 if libpng has the png_set_expand_gray_1_2_4_to_8 function. */
+#undef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
+
+/* Define to 1 if you have the `poll' function. */
+#undef HAVE_POLL
+
+/* Define to 1 if you have the <poll.h> header file. */
+#undef HAVE_POLL_H
+
+/* Define to 1 if you have the `popen' function. */
+#undef HAVE_POPEN
+
+/* Define to 1 if you have the `port_create' function. */
+#undef HAVE_PORT_CREATE
+
+/* Define to 1 if you have the <port.h> header file. */
+#undef HAVE_PORT_H
+
+/* Define if we can use ppdev.h for parallel port access */
+#undef HAVE_PPDEV
+
+/* Define to 1 if you have the `prctl' function. */
+#undef HAVE_PRCTL
+
+/* Define to 1 if you have the `pread' function. */
+#undef HAVE_PREAD
+
+/* Define to 1 if you have the <process.h> header file. */
+#undef HAVE_PROCESS_H
+
+/* Define to 1 if you have the `proc_pidinfo' function. */
+#undef HAVE_PROC_PIDINFO
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+#undef HAVE_PTHREAD_ATTR_GET_NP
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+#undef HAVE_PTHREAD_GETATTR_NP
+
+/* Define to 1 if you have the `pthread_getthreadid_np' function. */
+#undef HAVE_PTHREAD_GETTHREADID_NP
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+#undef HAVE_PTHREAD_GET_STACKADDR_NP
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+#undef HAVE_PTHREAD_GET_STACKSIZE_NP
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+#undef HAVE_PTHREAD_NP_H
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the `pwrite' function. */
+#undef HAVE_PWRITE
+
+/* Define to 1 if you have the <QuickTime/ImageCompression.h> header file. */
+#undef HAVE_QUICKTIME_IMAGECOMPRESSION_H
+
+/* Define to 1 if you have the `readdir' function. */
+#undef HAVE_READDIR
+
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
+
+/* Define to 1 if the system has the type `request_sense'. */
+#undef HAVE_REQUEST_SENSE
+
+/* Define if you have the resolver library and header */
+#undef HAVE_RESOLV
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#undef HAVE_RESOLV_H
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+#undef HAVE_SCHED_SETAFFINITY
+
+/* Define to 1 if you have the `sched_yield' function. */
+#undef HAVE_SCHED_YIELD
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+#undef HAVE_SCSIREQ_T_CMD
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+#undef HAVE_SCSI_SCSI_H
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+#undef HAVE_SCSI_SCSI_IOCTL_H
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+#undef HAVE_SCSI_SG_H
+
+/* Define to 1 if you have the <Security/Security.h> header file. */
+#undef HAVE_SECURITY_SECURITY_H
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `sendmsg' function. */
+#undef HAVE_SENDMSG
+
+/* Define to 1 if you have the `setproctitle' function. */
+#undef HAVE_SETPROCTITLE
+
+/* Define to 1 if you have the `setrlimit' function. */
+#undef HAVE_SETRLIMIT
+
+/* Define to 1 if you have the `settimeofday' function. */
+#undef HAVE_SETTIMEOFDAY
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+#undef HAVE_SG_IO_HDR_T_INTERFACE_ID
+
+/* Define if sigaddset is supported */
+#undef HAVE_SIGADDSET
+
+/* Define to 1 if you have the `sigaltstack' function. */
+#undef HAVE_SIGALTSTACK
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+#undef HAVE_SIGINFO_T_SI_FD
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#undef HAVE_SIGPROCMASK
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#undef HAVE_SIGSET_T
+
+/* Define to 1 if the system has the type `size_t'. */
+#undef HAVE_SIZE_T
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `socketpair' function. */
+#undef HAVE_SOCKETPAIR
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#undef HAVE_SSIZE_T
+
+/* Define to 1 if you have the `SSLCopyPeerCertificates' function. */
+#undef HAVE_SSLCOPYPEERCERTIFICATES
+
+/* Define to 1 if you have the `statfs' function. */
+#undef HAVE_STATFS
+
+/* Define to 1 if you have the `statvfs' function. */
+#undef HAVE_STATVFS
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
+/* Define to 1 if you have the `strtold' function. */
+#undef HAVE_STRTOLD
+
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the `strtoull' function. */
+#undef HAVE_STRTOULL
+
+/* Define to 1 if `d_reclen' is a member of `struct dirent'. */
+#undef HAVE_STRUCT_DIRENT_D_RECLEN
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+#undef HAVE_STRUCT_FF_EFFECT_DIRECTION
+
+/* Define to 1 if `icps_inhist' is a member of `struct icmpstat'. */
+#undef HAVE_STRUCT_ICMPSTAT_ICPS_INHIST
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+#undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST
+
+/* Define to 1 if `ifr_hwaddr' is a member of `struct ifreq'. */
+#undef HAVE_STRUCT_IFREQ_IFR_HWADDR
+
+/* Define to 1 if `ips_total' is a member of `struct ipstat'. */
+#undef HAVE_STRUCT_IPSTAT_IPS_TOTAL
+
+/* Define to 1 if `ips_total' is a member of `struct ip_stats'. */
+#undef HAVE_STRUCT_IP_STATS_IPS_TOTAL
+
+/* Define to 1 if the system has the type `struct link_map'. */
+#undef HAVE_STRUCT_LINK_MAP
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+#undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#undef HAVE_STRUCT_MTGET_MT_BLKNO
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+#undef HAVE_STRUCT_MTGET_MT_BLKSIZ
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#undef HAVE_STRUCT_MTGET_MT_GSTAT
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#undef HAVE_STRUCT_OPTION_NAME
+
+/* Define to 1 if the system has the type `struct r_debug'. */
+#undef HAVE_STRUCT_R_DEBUG
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+#undef HAVE_STRUCT_SOCKADDR_SA_LEN
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+#undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_BAVAIL
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_BFREE
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FAVAIL
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FFREE
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FRSIZE
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_NAMELEN
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_BLOCKS
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM
+
+/* Define to 1 if `st_atimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMESPEC
+
+/* Define to 1 if `st_birthtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIM
+
+/* Define to 1 if `st_birthtime' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIME
+
+/* Define to 1 if `st_birthtimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIM
+
+/* Define to 1 if `st_ctimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIMESPEC
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM
+
+/* Define to 1 if `st_mtimespec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIMESPEC
+
+/* Define to 1 if `__st_birthtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT___ST_BIRTHTIM
+
+/* Define to 1 if `__st_birthtime' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT___ST_BIRTHTIME
+
+/* Define to 1 if `tcps_connattempt' is a member of `struct tcpstat'. */
+#undef HAVE_STRUCT_TCPSTAT_TCPS_CONNATTEMPT
+
+/* Define to 1 if `tcps_connattempt' is a member of `struct tcp_stats'. */
+#undef HAVE_STRUCT_TCP_STATS_TCPS_CONNATTEMPT
+
+/* Define to 1 if `udps_ipackets' is a member of `struct udpstat'. */
+#undef HAVE_STRUCT_UDPSTAT_UDPS_IPACKETS
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+#undef HAVE_STRUCT_XINPGEN
+
+/* Define to 1 if the system has the type `struct __res_state'. */
+#undef HAVE_STRUCT___RES_STATE
+
+/* Define to 1 if `_u._ext.nscount6' is a member of `struct __res_state'. */
+#undef HAVE_STRUCT___RES_STATE__U__EXT_NSCOUNT6
+
+/* Define to 1 if you have the `symlink' function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <syscall.h> header file. */
+#undef HAVE_SYSCALL_H
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+#undef HAVE_SYS_ASOUNDLIB_H
+
+/* Define to 1 if you have the <sys/attr.h> header file. */
+#undef HAVE_SYS_ATTR_H
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+#undef HAVE_SYS_CDIO_H
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#undef HAVE_SYS_ELF32_H
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+#undef HAVE_SYS_EPOLL_H
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+#undef HAVE_SYS_EVENT_H
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+#undef HAVE_SYS_EXEC_ELF_H
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+#undef HAVE_SYS_INOTIFY_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#undef HAVE_SYS_IPC_H
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+#undef HAVE_SYS_LIMITS_H
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+#undef HAVE_SYS_LINK_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+#undef HAVE_SYS_MODEM_H
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#undef HAVE_SYS_MOUNT_H
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#undef HAVE_SYS_MSG_H
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#undef HAVE_SYS_MTIO_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#undef HAVE_SYS_POLL_H
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+#undef HAVE_SYS_PRCTL_H
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+#undef HAVE_SYS_PROTOSW_H
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+#undef HAVE_SYS_PTRACE_H
+
+/* Define to 1 if you have the <sys/queue.h> header file. */
+#undef HAVE_SYS_QUEUE_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+#undef HAVE_SYS_SCSIIO_H
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+#undef HAVE_SYS_SHM_H
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+#undef HAVE_SYS_SIGNAL_H
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+#undef HAVE_SYS_SOCKETVAR_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+#undef HAVE_SYS_SOCKIO_H
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#undef HAVE_SYS_STATFS_H
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#undef HAVE_SYS_STATVFS_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+#undef HAVE_SYS_STRTIO_H
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+#undef HAVE_SYS_SYSCALL_H
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#undef HAVE_SYS_SYSCTL_H
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+#undef HAVE_SYS_THR_H
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+#undef HAVE_SYS_TIHDR_H
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+#undef HAVE_SYS_TIMEOUT_H
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#undef HAVE_SYS_TIMES_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#undef HAVE_SYS_UN_H
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+#undef HAVE_SYS_USER_H
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#undef HAVE_SYS_VFS_H
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+#undef HAVE_SYS_VM86_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the `tcdrain' function. */
+#undef HAVE_TCDRAIN
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the `thr_kill2' function. */
+#undef HAVE_THR_KILL2
+
+/* Define to 1 if you have the <tiffio.h> header file. */
+#undef HAVE_TIFFIO_H
+
+/* Define to 1 if you have the `timegm' function. */
+#undef HAVE_TIMEGM
+
+/* Define if you have the timezone variable */
+#undef HAVE_TIMEZONE
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+#undef HAVE_UCONTEXT_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+#undef HAVE_VALGRIND_MEMCHECK_H
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#undef HAVE_VALGRIND_VALGRIND_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+#undef HAVE_X11_EXTENSIONS_SHAPE_H
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XF86VMODE_H
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XINERAMA_H
+
+/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XINPUT2_H
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XINPUT_H
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XRANDR_H
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XRENDER_H
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+#undef HAVE_X11_EXTENSIONS_XSHM_H
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+#undef HAVE_X11_XCURSOR_XCURSOR_H
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+#undef HAVE_X11_XKBLIB_H
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+#undef HAVE_X11_XLIB_H
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+#undef HAVE_X11_XUTIL_H
+
+/* Define to 1 if `xcookie' is a member of `XEvent'. */
+#undef HAVE_XEVENT_XCOOKIE
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+#undef HAVE_XICCALLBACK_CALLBACK
+
+/* Define if you have the XKB extension */
+#undef HAVE_XKB
+
+/* Define if libxml2 has the xmlDocProperties enum */
+#undef HAVE_XMLDOC_PROPERTIES
+
+/* Define if libxml2 has the xmlFirstElementChild function */
+#undef HAVE_XMLFIRSTELEMENTCHILD
+
+/* Define if libxml2 has the xmlNewDocPI function */
+#undef HAVE_XMLNEWDOCPI
+
+/* Define if libxml2 has the xmlReadMemory function */
+#undef HAVE_XMLREADMEMORY
+
+/* Define if libxml2 has the xmlSchemaSetParserStructuredErrors function */
+#undef HAVE_XMLSCHEMASSETPARSERSTRUCTUREDERRORS
+
+/* Define if libxml2 has the xmlSchemaSetValidStructuredErrors function */
+#undef HAVE_XMLSCHEMASSETVALIDSTRUCTUREDERRORS
+
+/* Define if Xrender has the XRenderCreateLinearGradient function */
+#undef HAVE_XRENDERCREATELINEARGRADIENT
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+#undef HAVE_XRENDERSETPICTURETRANSFORM
+
+/* Define if Xrandr has the XRRGetScreenResources function */
+#undef HAVE_XRRGETSCREENRESOURCES
+
+/* Define to 1 if you have the `z' library (-lz). */
+#undef HAVE_ZLIB
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define to 1 if you have the `_finite' function. */
+#undef HAVE__FINITE
+
+/* Define to 1 if you have the `_isnan' function. */
+#undef HAVE__ISNAN
+
+/* Define to 1 if you have the `_pclose' function. */
+#undef HAVE__PCLOSE
+
+/* Define to 1 if you have the `_popen' function. */
+#undef HAVE__POPEN
+
+/* Define to 1 if you have the `_snprintf' function. */
+#undef HAVE__SNPRINTF
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#undef HAVE__SPAWNVP
+
+/* Define to 1 if you have the `_strdup' function. */
+#undef HAVE__STRDUP
+
+/* Define to 1 if you have the `_stricmp' function. */
+#undef HAVE__STRICMP
+
+/* Define to 1 if you have the `_strnicmp' function. */
+#undef HAVE__STRNICMP
+
+/* Define to 1 if you have the `_strtoi64' function. */
+#undef HAVE__STRTOI64
+
+/* Define to 1 if you have the `_strtoui64' function. */
+#undef HAVE__STRTOUI64
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#undef HAVE__VSNPRINTF
+
+/* Define to 1 if you have the `__res_getservers' function. */
+#undef HAVE___RES_GETSERVERS
+
+/* Define to 1 if you have the `__res_get_state' function. */
+#undef HAVE___RES_GET_STATE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to the soname of the libcapi20 library. */
+#undef SONAME_LIBCAPI20
+
+/* Define to the soname of the libcups library. */
+#undef SONAME_LIBCUPS
+
+/* Define to the soname of the libcurses library. */
+#undef SONAME_LIBCURSES
+
+/* Define to the soname of the libdbus-1 library. */
+#undef SONAME_LIBDBUS_1
+
+/* Define to the soname of the libfontconfig library. */
+#undef SONAME_LIBFONTCONFIG
+
+/* Define to the soname of the libfreetype library. */
+#undef SONAME_LIBFREETYPE
+
+/* Define to the soname of the libGL library. */
+#undef SONAME_LIBGL
+
+/* Define to the soname of the libgnutls library. */
+#undef SONAME_LIBGNUTLS
+
+/* Define to the soname of the libgsm library. */
+#undef SONAME_LIBGSM
+
+/* Define to the soname of the libhal library. */
+#undef SONAME_LIBHAL
+
+/* Define to the soname of the libjpeg library. */
+#undef SONAME_LIBJPEG
+
+/* Define to the soname of the libncurses library. */
+#undef SONAME_LIBNCURSES
+
+/* Define to the soname of the libodbc library. */
+#undef SONAME_LIBODBC
+
+/* Define to the soname of the libopenal library. */
+#undef SONAME_LIBOPENAL
+
+/* Define to the soname of the libOSMesa library. */
+#undef SONAME_LIBOSMESA
+
+/* Define to the soname of the libpng library. */
+#undef SONAME_LIBPNG
+
+/* Define to the soname of the libsane library. */
+#undef SONAME_LIBSANE
+
+/* Define to the soname of the libtiff library. */
+#undef SONAME_LIBTIFF
+
+/* Define to the soname of the libv4l1 library. */
+#undef SONAME_LIBV4L1
+
+/* Define to the soname of the libX11 library. */
+#undef SONAME_LIBX11
+
+/* Define to the soname of the libXcomposite library. */
+#undef SONAME_LIBXCOMPOSITE
+
+/* Define to the soname of the libXcursor library. */
+#undef SONAME_LIBXCURSOR
+
+/* Define to the soname of the libXext library. */
+#undef SONAME_LIBXEXT
+
+/* Define to the soname of the libXi library. */
+#undef SONAME_LIBXI
+
+/* Define to the soname of the libXinerama library. */
+#undef SONAME_LIBXINERAMA
+
+/* Define to the soname of the libXrandr library. */
+#undef SONAME_LIBXRANDR
+
+/* Define to the soname of the libXrender library. */
+#undef SONAME_LIBXRENDER
+
+/* Define to the soname of the libxslt library. */
+#undef SONAME_LIBXSLT
+
+/* Define to the soname of the libXxf86vm library. */
+#undef SONAME_LIBXXF86VM
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Enable large inode numbers on Mac OS X 10.5. */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#undef __ASM_CFI
+
+/* Define to a macro to define an assembly function */
+#undef __ASM_DEFINE_FUNC
+
+/* Define to a macro to generate an assembly function directive */
+#undef __ASM_FUNC
+
+/* Define to a macro to generate an assembly function with C calling
+ convention */
+#undef __ASM_GLOBAL_FUNC
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#undef __ASM_NAME
+
+/* Define to a macro to generate an stdcall suffix */
+#undef __ASM_STDCALL
+
+/* Define to a macro to generate an assembly function with stdcall calling
+ convention */
+#undef __ASM_STDCALL_FUNC
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+#endif /* WINE_CROSSTEST */
+#endif /* __WINE_CONFIG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h
new file mode 100644
index 00000000..a639e36f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/config_linux.h
@@ -0,0 +1,1275 @@
+/* include/config.h. Generated from config.h.in by configure. */
+/* include/config.h.in. Generated from configure.ac by autoheader. */
+
+#include <stddef.h>
+
+#define __WINE_CONFIG_H
+
+/* Define to a function attribute for Microsoft hotpatch assembly prefix. */
+#define DECLSPEC_HOTPATCH /* */
+
+/* Define to the file extension for executables. */
+#define EXEEXT ".exe"
+
+/* Define to 1 if you have the <alias.h> header file. */
+/* #undef HAVE_ALIAS_H */
+
+/* Define if you have ALSA 1.x including devel headers */
+/* #undef HAVE_ALSA */
+
+/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
+/* #undef HAVE_ALSA_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <AL/al.h> header file. */
+/* #undef HAVE_AL_AL_H */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H 1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+/* #undef HAVE_ARPA_NAMESER_H */
+
+/* Define to 1 if you have the `asctime_r' function. */
+#define HAVE_ASCTIME_R 1
+
+/* Define to 1 if you have the <asm/types.h> header file. */
+#define HAVE_ASM_TYPES_H 1
+
+/* Define to 1 if you have the <AudioUnit/AudioUnit.h> header file. */
+/* #undef HAVE_AUDIOUNIT_AUDIOUNIT_H */
+
+/* Define to 1 if you have the <audio/audiolib.h> header file. */
+/* #undef HAVE_AUDIO_AUDIOLIB_H */
+
+/* Define to 1 if you have the <audio/soundlib.h> header file. */
+/* #undef HAVE_AUDIO_SOUNDLIB_H */
+
+/* Define to 1 if you have the <capi20.h> header file. */
+/* #undef HAVE_CAPI20_H */
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+/* #undef HAVE_CARBON_CARBON_H */
+
+/* Define to 1 if you have the `chsize' function. */
+/* #undef HAVE_CHSIZE */
+
+/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
+/* #undef HAVE_COREAUDIO_COREAUDIO_H */
+
+/* Define to 1 if you have the <cups/cups.h> header file. */
+/* #undef HAVE_CUPS_CUPS_H */
+
+/* Define to 1 if you have the <curses.h> header file. */
+/* #undef HAVE_CURSES_H */
+
+/* Define if you have the daylight variable */
+/* #undef HAVE_DAYLIGHT*/
+
+/* Define to 1 if you have the <dbus/dbus.h> header file. */
+/* #undef HAVE_DBUS_DBUS_H */
+
+/* Define to 1 if you have the <direct.h> header file. */
+/* #undef HAVE_DIRECT_H */
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H 1
+
+/* Define to 1 if you have the <DiskArbitration/DiskArbitration.h> header
+ file. */
+/* #undef HAVE_DISKARBITRATION_DISKARBITRATION_H */
+
+/* Define to 1 if you have the `dladdr' function. */
+/* #undef HAVE_DLADDR */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H*/
+
+/* Define to 1 if you have the `dlopen' function. */
+/* #undef HAVE_DLOPEN*/
+
+/* Define to 1 if you have the <elf.h> header file. */
+/* #undef HAVE_ELF_H*/
+
+/* Define to 1 if you have the `epoll_create' function. */
+/* #undef HAVE_EPOLL_CREATE */
+
+/* Define if you have EsounD sound server */
+/* #undef HAVE_ESD */
+
+/* Define to 1 if you have the `ffs' function. */
+#define HAVE_FFS 1
+
+/* Define to 1 if you have the `finite' function. */
+#define HAVE_FINITE 1
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H 1
+
+/* Define to 1 if you have the `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the <fnmatch.h> header file. */
+#define HAVE_FNMATCH_H 1
+
+/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
+/* #undef HAVE_FONTCONFIG_FONTCONFIG_H */
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define to 1 if you have the `fpclass' function. */
+/* #undef HAVE_FPCLASS */
+
+/* Define if FreeType 2 is installed */
+/* #undef HAVE_FREETYPE */
+
+/* Define to 1 if you have the <freetype/freetype.h> header file. */
+/* #undef HAVE_FREETYPE_FREETYPE_H */
+
+/* Define to 1 if you have the <freetype/ftglyph.h> header file. */
+/* #undef HAVE_FREETYPE_FTGLYPH_H */
+
+/* Define to 1 if you have the <freetype/ftlcdfil.h> header file. */
+/* #undef HAVE_FREETYPE_FTLCDFIL_H */
+
+/* Define to 1 if you have the <freetype/ftmodapi.h> header file. */
+/* #undef HAVE_FREETYPE_FTMODAPI_H */
+
+/* Define to 1 if you have the <freetype/ftoutln.h> header file. */
+/* #undef HAVE_FREETYPE_FTOUTLN_H */
+
+/* Define to 1 if you have the <freetype/ftsnames.h> header file. */
+/* #undef HAVE_FREETYPE_FTSNAMES_H */
+
+/* Define if you have the <freetype/fttrigon.h> header file. */
+/* #undef HAVE_FREETYPE_FTTRIGON_H */
+
+/* Define to 1 if you have the <freetype/fttypes.h> header file. */
+/* #undef HAVE_FREETYPE_FTTYPES_H */
+
+/* Define to 1 if you have the <freetype/ftwinfnt.h> header file. */
+/* #undef HAVE_FREETYPE_FTWINFNT_H */
+
+/* Define to 1 if you have the <freetype/internal/sfnt.h> header file. */
+/* #undef HAVE_FREETYPE_INTERNAL_SFNT_H */
+
+/* Define to 1 if you have the <freetype/ttnameid.h> header file. */
+/* #undef HAVE_FREETYPE_TTNAMEID_H */
+
+/* Define to 1 if you have the <freetype/tttables.h> header file. */
+/* #undef HAVE_FREETYPE_TTTABLES_H */
+
+/* Define to 1 if the system has the type `fsblkcnt_t'. */
+#define HAVE_FSBLKCNT_T 1
+
+/* Define to 1 if the system has the type `fsfilcnt_t'. */
+#define HAVE_FSFILCNT_T 1
+
+/* Define to 1 if you have the `fstatfs' function. */
+#define HAVE_FSTATFS 1
+
+/* Define to 1 if you have the `fstatvfs' function. */
+#define HAVE_FSTATVFS 1
+
+/* Define to 1 if you have the <ft2build.h> header file. */
+/* #undef HAVE_FT2BUILD_H */
+
+/* Define to 1 if you have the `ftruncate' function. */
+#define HAVE_FTRUNCATE 1
+
+/* Define to 1 if you have the `FT_Load_Sfnt_Table' function. */
+/* #undef HAVE_FT_LOAD_SFNT_TABLE */
+
+/* Define to 1 if the system has the type `FT_TrueTypeEngineType'. */
+/* #undef HAVE_FT_TRUETYPEENGINETYPE */
+
+/* Define to 1 if you have the `futimes' function. */
+#define HAVE_FUTIMES 1
+
+/* Define to 1 if you have the `futimesat' function. */
+/* #undef HAVE_FUTIMESAT */
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+/* #undef HAVE_GETADDRINFO */
+
+/* Define to 1 if you have the `getdirentries' function. */
+/* #undef HAVE_GETDIRENTRIES */
+
+/* Define to 1 if you have the `getnameinfo' function. */
+/* #undef HAVE_GETNAMEINFO */
+
+/* Define to 1 if you have the `getnetbyname' function. */
+/* #undef HAVE_GETNETBYNAME */
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#define HAVE_GETOPT_H 1
+
+/* Define to 1 if you have the `getopt_long' function. */
+#define HAVE_GETOPT_LONG 1
+
+/* Define to 1 if you have the `getpagesize' function. */
+/* #undef HAVE_GETPAGESIZE */
+
+/* Define to 1 if you have the `getprotobyname' function. */
+#define HAVE_GETPROTOBYNAME 1
+
+/* Define to 1 if you have the `getprotobynumber' function. */
+#define HAVE_GETPROTOBYNUMBER 1
+
+/* Define to 1 if you have the `getpwuid' function. */
+/* #undef HAVE_GETPWUID */
+
+/* Define to 1 if you have the `getservbyport' function. */
+#define HAVE_GETSERVBYPORT 1
+
+/* Define to 1 if you have the `gettid' function. */
+/* #undef HAVE_GETTID */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define to 1 if you have the `getuid' function. */
+/* #undef HAVE_GETUID */
+
+/* Define to 1 if you have the <GL/glu.h> header file. */
+/* #undef HAVE_GL_GLU_H */
+
+/* Define to 1 if you have the <GL/glx.h> header file. */
+/* #undef HAVE_GL_GLX_H */
+
+/* Define to 1 if you have the <GL/gl.h> header file. */
+/* #undef HAVE_GL_GL_H */
+
+/* Define if we have libgphoto2 development environment */
+/* #undef HAVE_GPHOTO2 */
+
+/* Define to 1 if you have the <grp.h> header file. */
+/* #undef HAVE_GRP_H */
+
+/* Define to 1 if you have the <gsm/gsm.h> header file. */
+/* #undef HAVE_GSM_GSM_H */
+
+/* Define to 1 if you have the <gsm.h> header file. */
+/* #undef HAVE_GSM_H */
+
+/* Define to 1 if you have the <hal/libhal.h> header file. */
+/* #undef HAVE_HAL_LIBHAL_H */
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#define HAVE_IEEEFP_H 1
+
+/* Define to 1 if you have the <inet/mib2.h> header file. */
+/* #undef HAVE_INET_MIB2_H */
+
+/* Define to 1 if you have the `inet_network' function. */
+#define HAVE_INET_NETWORK 1
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#define HAVE_INET_NTOP 1
+
+/* Define to 1 if you have the `inet_pton' function. */
+#define HAVE_INET_PTON 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `IOHIDManagerCreate' function. */
+/* #undef HAVE_IOHIDMANAGERCREATE */
+
+/* Define to 1 if you have the <IOKit/hid/IOHIDLib.h> header file. */
+/* #undef HAVE_IOKIT_HID_IOHIDLIB_H */
+
+/* Define to 1 if you have the <IOKit/IOKitLib.h> header file. */
+/* #undef HAVE_IOKIT_IOKITLIB_H */
+
+/* Define to 1 if you have the <io.h> header file. */
+#define HAVE_IO_H 1
+
+/* Define to 1 if you have the `isinf' function. */
+/* #undef HAVE_ISINF */
+
+/* Define to 1 if you have the `isnan' function. */
+/* #undef HAVE_ISNAN */
+
+/* Define to 1 if you have the <jack/jack.h> header file. */
+/* #undef HAVE_JACK_JACK_H */
+
+/* Define to 1 if you have the <jpeglib.h> header file. */
+/* #undef HAVE_JPEGLIB_H */
+
+/* Define to 1 if you have the `kqueue' function. */
+/* #undef HAVE_KQUEUE */
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <lber.h> header file. */
+/* #undef HAVE_LBER_H */
+
+/* Define if you have the LittleCMS development environment */
+/* #undef HAVE_LCMS */
+
+/* Define to 1 if you have the <lcms.h> header file. */
+/* #undef HAVE_LCMS_H */
+
+/* Define to 1 if you have the <lcms/lcms.h> header file. */
+/* #undef HAVE_LCMS_LCMS_H */
+
+/* Define if you have the OpenLDAP development environment */
+/* #undef HAVE_LDAP */
+
+/* Define to 1 if you have the `ldap_count_references' function. */
+/* #undef HAVE_LDAP_COUNT_REFERENCES */
+
+/* Define to 1 if you have the `ldap_first_reference' function. */
+/* #undef HAVE_LDAP_FIRST_REFERENCE */
+
+/* Define to 1 if you have the <ldap.h> header file. */
+/* #undef HAVE_LDAP_H */
+
+/* Define to 1 if you have the `ldap_next_reference' function. */
+/* #undef HAVE_LDAP_NEXT_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_reference' function. */
+/* #undef HAVE_LDAP_PARSE_REFERENCE */
+
+/* Define to 1 if you have the `ldap_parse_sortresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORTRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_sort_control' function. */
+/* #undef HAVE_LDAP_PARSE_SORT_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlvresponse_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLVRESPONSE_CONTROL */
+
+/* Define to 1 if you have the `ldap_parse_vlv_control' function. */
+/* #undef HAVE_LDAP_PARSE_VLV_CONTROL */
+
+/* Define if you have libaudioIO */
+/* #undef HAVE_LIBAUDIOIO */
+
+/* Define to 1 if you have the <libaudioio.h> header file. */
+/* #undef HAVE_LIBAUDIOIO_H */
+
+/* Define to 1 if you have the `i386' library (-li386). */
+/* #undef HAVE_LIBI386 */
+
+/* Define to 1 if you have the `kstat' library (-lkstat). */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if you have the `ossaudio' library (-lossaudio). */
+/* #undef HAVE_LIBOSSAUDIO */
+
+/* Define if you have the libxml2 library */
+/* #undef HAVE_LIBXML2 */
+
+/* Define to 1 if you have the <libxml/parser.h> header file. */
+/* #undef HAVE_LIBXML_PARSER_H */
+
+/* Define if you have the X Shape extension */
+/* #undef HAVE_LIBXSHAPE */
+
+/* Define to 1 if you have the <libxslt/pattern.h> header file. */
+/* #undef HAVE_LIBXSLT_PATTERN_H */
+
+/* Define to 1 if you have the <libxslt/transform.h> header file. */
+/* #undef HAVE_LIBXSLT_TRANSFORM_H */
+
+/* Define if you have the X Shm extension */
+/* #undef HAVE_LIBXXSHM */
+
+/* Define to 1 if you have the <link.h> header file. */
+/* #undef HAVE_LINK_H */
+
+/* Define if <linux/joystick.h> defines the Linux 2.2 joystick API */
+/* #undef HAVE_LINUX_22_JOYSTICK_API */
+
+/* Define to 1 if you have the <linux/capi.h> header file. */
+/* #undef HAVE_LINUX_CAPI_H */
+
+/* Define to 1 if you have the <linux/cdrom.h> header file. */
+/* #undef HAVE_LINUX_CDROM_H */
+
+/* Define to 1 if you have the <linux/compiler.h> header file. */
+/* #undef HAVE_LINUX_COMPILER_H */
+
+/* Define if Linux-style gethostbyname_r and gethostbyaddr_r are available */
+/* #undef HAVE_LINUX_GETHOSTBYNAME_R_6 */
+
+/* Define to 1 if you have the <linux/hdreg.h> header file. */
+/* #undef HAVE_LINUX_HDREG_H */
+
+/* Define to 1 if you have the <linux/input.h> header file. */
+/* #undef HAVE_LINUX_INPUT_H */
+
+/* Define to 1 if you have the <linux/ioctl.h> header file. */
+/* #undef HAVE_LINUX_IOCTL_H */
+
+/* Define to 1 if you have the <linux/ipx.h> header file. */
+/* #undef HAVE_LINUX_IPX_H */
+
+/* Define to 1 if you have the <linux/irda.h> header file. */
+/* #undef HAVE_LINUX_IRDA_H */
+
+/* Define to 1 if you have the <linux/joystick.h> header file. */
+/* #undef HAVE_LINUX_JOYSTICK_H */
+
+/* Define to 1 if you have the <linux/major.h> header file. */
+/* #undef HAVE_LINUX_MAJOR_H */
+
+/* Define to 1 if you have the <linux/param.h> header file. */
+/* #undef HAVE_LINUX_PARAM_H */
+
+/* Define to 1 if you have the <linux/serial.h> header file. */
+/* #undef HAVE_LINUX_SERIAL_H */
+
+/* Define to 1 if you have the <linux/types.h> header file. */
+/* #undef HAVE_LINUX_TYPES_H */
+
+/* Define to 1 if you have the <linux/ucdrom.h> header file. */
+/* #undef HAVE_LINUX_UCDROM_H */
+
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+/* #undef HAVE_LINUX_VIDEODEV_H */
+
+/* Define to 1 if the system has the type `long long'. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `lstat' function. */
+#define HAVE_LSTAT 1
+
+/* Define to 1 if you have the <machine/cpu.h> header file. */
+/* #undef HAVE_MACHINE_CPU_H */
+
+/* Define to 1 if you have the <machine/limits.h> header file. */
+/* #undef HAVE_MACHINE_LIMITS_H */
+
+/* Define to 1 if you have the <machine/soundcard.h> header file. */
+/* #undef HAVE_MACHINE_SOUNDCARD_H */
+
+/* Define to 1 if you have the <mach/machine.h> header file. */
+/* #undef HAVE_MACH_MACHINE_H */
+
+/* Define to 1 if you have the <mach/mach.h> header file. */
+/* #undef HAVE_MACH_MACH_H */
+
+/* Define to 1 if you have the <mach-o/dyld_images.h> header file. */
+/* #undef HAVE_MACH_O_DYLD_IMAGES_H */
+
+/* Define to 1 if you have the <mach-o/nlist.h> header file. */
+/* #undef HAVE_MACH_O_NLIST_H */
+
+/* Define to 1 if you have the `memmove' function. */
+#define HAVE_MEMMOVE 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mmap' function. */
+/* #undef HAVE_MMAP */
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#define HAVE_MNTENT_H 1
+
+/* Define to 1 if the system has the type `mode_t'. */
+#define HAVE_MODE_T 1
+
+/* Define to 1 if you have the `mousemask' function. */
+/* #undef HAVE_MOUSEMASK */
+
+/* Define to 1 if you have the <mpg123.h> header file. */
+/* #undef HAVE_MPG123_H */
+
+/* Define if you have NAS including devel headers */
+/* #undef HAVE_NAS */
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+/* #undef HAVE_NCURSES_H */
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H 1
+
+/* Define to 1 if you have the <netinet/icmp_var.h> header file. */
+/* #undef HAVE_NETINET_ICMP_VAR_H */
+
+/* Define to 1 if you have the <netinet/if_ether.h> header file. */
+/* #undef HAVE_NETINET_IF_ETHER_H */
+
+/* Define to 1 if you have the <netinet/if_inarp.h> header file. */
+/* #undef HAVE_NETINET_IF_INARP_H */
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+/* #undef HAVE_NETINET_IN_H */
+
+/* Define to 1 if you have the <netinet/in_pcb.h> header file. */
+/* #undef HAVE_NETINET_IN_PCB_H */
+
+/* Define to 1 if you have the <netinet/in_systm.h> header file. */
+/* #undef HAVE_NETINET_IN_SYSTM_H */
+
+/* Define to 1 if you have the <netinet/ip.h> header file. */
+/* #undef HAVE_NETINET_IP_H */
+
+/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
+/* #undef HAVE_NETINET_IP_ICMP_H */
+
+/* Define to 1 if you have the <netinet/ip_var.h> header file. */
+/* #undef HAVE_NETINET_IP_VAR_H */
+
+/* Define to 1 if you have the <netinet/tcp_fsm.h> header file. */
+/* #undef HAVE_NETINET_TCP_FSM_H */
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+/* #undef HAVE_NETINET_TCP_H */
+
+/* Define to 1 if you have the <netinet/tcp_timer.h> header file. */
+/* #undef HAVE_NETINET_TCP_TIMER_H */
+
+/* Define to 1 if you have the <netinet/tcp_var.h> header file. */
+/* #undef HAVE_NETINET_TCP_VAR_H */
+
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+/* #undef HAVE_NETINET_UDP_H */
+
+/* Define to 1 if you have the <netinet/udp_var.h> header file. */
+/* #undef HAVE_NETINET_UDP_VAR_H */
+
+/* Define to 1 if you have the <netipx/ipx.h> header file. */
+/* #undef HAVE_NETIPX_IPX_H */
+
+/* Define to 1 if you have the <net/if_arp.h> header file. */
+/* #undef HAVE_NET_IF_ARP_H */
+
+/* Define to 1 if you have the <net/if_dl.h> header file. */
+/* #undef HAVE_NET_IF_DL_H */
+
+/* Define to 1 if you have the <net/if.h> header file. */
+/* #undef HAVE_NET_IF_H */
+
+/* Define to 1 if you have the <net/if_types.h> header file. */
+/* #undef HAVE_NET_IF_TYPES_H */
+
+/* Define to 1 if you have the <net/route.h> header file. */
+/* #undef HAVE_NET_ROUTE_H */
+
+/* Define to 1 if `_msg_ptr' is a member of `ns_msg'. */
+/* #undef HAVE_NS_MSG__MSG_PTR */
+
+/* Define to 1 if the system has the type `off_t'. */
+#define HAVE_OFF_T 1
+
+/* Define if mkdir takes only one argument */
+/* #undef HAVE_ONE_ARG_MKDIR */
+
+/* Define to 1 if you have the <OpenAL/al.h> header file. */
+/* #undef HAVE_OPENAL_AL_H */
+
+/* Define if OpenGL is present on the system */
+/* #undef HAVE_OPENGL */
+
+/* Define to 1 if you have the <openssl/err.h> header file. */
+/* #undef HAVE_OPENSSL_ERR_H */
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+/* #undef HAVE_OPENSSL_SSL_H */
+
+/* Define to 1 if you have the `pclose' function. */
+#define HAVE_PCLOSE 1
+
+/* Define to 1 if the system has the type `pid_t'. */
+/* #undef HAVE_PID_T */
+
+/* Define to 1 if you have the `pipe2' function. */
+/* #undef HAVE_PIPE2 */
+
+/* Define to 1 if you have the <png.h> header file. */
+/* #undef HAVE_PNG_H */
+
+/* Define to 1 if you have the `poll' function. */
+#define HAVE_POLL 1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#define HAVE_POLL_H 1
+
+/* Define to 1 if you have the `popen' function. */
+#define HAVE_POPEN 1
+
+/* Define to 1 if you have the `port_create' function. */
+/* #undef HAVE_PORT_CREATE */
+
+/* Define to 1 if you have the <port.h> header file. */
+/* #undef HAVE_PORT_H */
+
+/* Define if we can use ppdev.h for parallel port access */
+/* #undef HAVE_PPDEV */
+
+/* Define to 1 if you have the `prctl' function. */
+/* #undef HAVE_PRCTL */
+
+/* Define to 1 if you have the `pread' function. */
+#define HAVE_PREAD 1
+
+/* Define to 1 if you have the <process.h> header file. */
+#define HAVE_PROCESS_H 1
+
+/* Define to 1 if you have the `pthread_attr_get_np' function. */
+/* #undef HAVE_PTHREAD_ATTR_GET_NP */
+
+/* Define to 1 if you have the `pthread_getattr_np' function. */
+/* #undef HAVE_PTHREAD_GETATTR_NP */
+
+/* Define to 1 if you have the `pthread_get_stackaddr_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKADDR_NP */
+
+/* Define to 1 if you have the `pthread_get_stacksize_np' function. */
+/* #undef HAVE_PTHREAD_GET_STACKSIZE_NP */
+
+/* Define to 1 if you have the <pthread.h> header file. */
+/* #undef HAVE_PTHREAD_H */
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if you have the <pwd.h> header file. */
+/* #undef HAVE_PWD_H */
+
+/* Define to 1 if you have the `pwrite' function. */
+#define HAVE_PWRITE 1
+
+/* Define to 1 if you have the `readdir' function. */
+#define HAVE_READDIR 1
+
+/* Define to 1 if you have the `readlink' function. */
+#define HAVE_READLINK 1
+
+/* Define to 1 if you have the <regex.h> header file. */
+#define HAVE_REGEX_H 1
+
+/* Define to 1 if the system has the type `request_sense'. */
+/* #undef HAVE_REQUEST_SENSE */
+
+/* Define if you have the resolver library and header */
+/* #undef HAVE_RESOLV */
+
+/* Define to 1 if you have the <resolv.h> header file. */
+/* #undef HAVE_RESOLV_H */
+
+/* Define to 1 if you have the <sched.h> header file. */
+#define HAVE_SCHED_H 1
+
+/* Define to 1 if you have the `sched_setaffinity' function. */
+/* #undef HAVE_SCHED_SETAFFINITY */
+
+/* Define to 1 if you have the `sched_yield' function. */
+#define HAVE_SCHED_YIELD 1
+
+/* Define to 1 if `cmd' is a member of `scsireq_t'. */
+/* #undef HAVE_SCSIREQ_T_CMD */
+
+/* Define to 1 if you have the <scsi/scsi.h> header file. */
+/* #undef HAVE_SCSI_SCSI_H */
+
+/* Define to 1 if you have the <scsi/scsi_ioctl.h> header file. */
+/* #undef HAVE_SCSI_SCSI_IOCTL_H */
+
+/* Define to 1 if you have the <scsi/sg.h> header file. */
+/* #undef HAVE_SCSI_SG_H */
+
+/* Define to 1 if you have the `select' function. */
+#define HAVE_SELECT 1
+
+/* Define to 1 if you have the `sendmsg' function. */
+#define HAVE_SENDMSG 1
+
+/* Define to 1 if you have the `setproctitle' function. */
+/* #undef HAVE_SETPROCTITLE */
+
+/* Define to 1 if you have the `setrlimit' function. */
+/* #undef HAVE_SETRLIMIT */
+
+/* Define to 1 if you have the `settimeofday' function. */
+#define HAVE_SETTIMEOFDAY 1
+
+/* Define to 1 if `interface_id' is a member of `sg_io_hdr_t'. */
+/* #undef HAVE_SG_IO_HDR_T_INTERFACE_ID */
+
+/* Define if sigaddset is supported */
+#define HAVE_SIGADDSET 1
+
+/* Define to 1 if you have the `sigaltstack' function. */
+/* #undef HAVE_SIGALTSTACK */
+
+/* Define to 1 if `si_fd' is a member of `siginfo_t'. */
+/* #undef HAVE_SIGINFO_T_SI_FD */
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#define HAVE_SIGSET_T 1
+
+/* Define to 1 if the system has the type `size_t'. */
+#define HAVE_SIZE_T 1
+
+/* Define to 1 if you have the `snprintf' function. */
+/* #undef HAVE_SNPRINTF */
+
+/* Define to 1 if you have the `socketpair' function. */
+#define HAVE_SOCKETPAIR 1
+
+/* Define to 1 if you have the <soundcard.h> header file. */
+/* #undef HAVE_SOUNDCARD_H */
+
+/* Define to 1 if you have the `spawnvp' function. */
+#define HAVE_SPAWNVP 1
+
+/* Define to 1 if the system has the type `ssize_t'. */
+#define HAVE_SSIZE_T 1
+
+/* Define to 1 if you have the `statfs' function. */
+#define HAVE_STATFS 1
+
+/* Define to 1 if you have the `statvfs' function. */
+#define HAVE_STATVFS 1
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#define HAVE_STDBOOL_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+/* #undef HAVE_STDINT_H */
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to 1 if you have the <stropts.h> header file. */
+/* #undef HAVE_STROPTS_H */
+
+/* Define to 1 if you have the `strtold' function. */
+/* #undef HAVE_STRTOLD */
+
+/* Define to 1 if you have the `strtoll' function. */
+#define HAVE_STRTOLL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if `direction' is a member of `struct ff_effect'. */
+/* #undef HAVE_STRUCT_FF_EFFECT_DIRECTION */
+
+/* Define to 1 if `icps_outhist' is a member of `struct icmpstat'. */
+/* #undef HAVE_STRUCT_ICMPSTAT_ICPS_OUTHIST */
+
+/* Define to 1 if `msg_accrights' is a member of `struct msghdr'. */
+/* #undef HAVE_STRUCT_MSGHDR_MSG_ACCRIGHTS */
+
+/* Define to 1 if `mt_blkno' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_BLKNO 1
+
+/* Define to 1 if `mt_blksiz' is a member of `struct mtget'. */
+/* #undef HAVE_STRUCT_MTGET_MT_BLKSIZ */
+
+/* Define to 1 if `mt_gstat' is a member of `struct mtget'. */
+#define HAVE_STRUCT_MTGET_MT_GSTAT 1
+
+/* Define to 1 if `name' is a member of `struct option'. */
+#define HAVE_STRUCT_OPTION_NAME 1
+
+/* Define to 1 if `sin6_scope_id' is a member of `struct sockaddr_in6'. */
+/* #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID */
+
+/* Define to 1 if `sa_len' is a member of `struct sockaddr'. */
+/* #undef HAVE_STRUCT_SOCKADDR_SA_LEN */
+
+/* Define to 1 if `sun_len' is a member of `struct sockaddr_un'. */
+/* #undef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
+
+/* Define to 1 if `f_bavail' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BAVAIL 1
+
+/* Define to 1 if `f_bfree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_BFREE 1
+
+/* Define to 1 if `f_favail' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FAVAIL */
+
+/* Define to 1 if `f_ffree' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_FFREE 1
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+/* #undef HAVE_STRUCT_STATFS_F_FRSIZE */
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#define HAVE_STRUCT_STATFS_F_NAMELEN 1
+
+/* Define to 1 if `f_blocks' is a member of `struct statvfs'. */
+#define HAVE_STRUCT_STATVFS_F_BLOCKS 1
+
+/* Define to 1 if `st_atim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+
+/* Define to 1 if `st_ctim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_CTIM 1
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+
+/* Define to 1 if the system has the type `struct xinpgen'. */
+/* #undef HAVE_STRUCT_XINPGEN */
+
+/* Define to 1 if you have the `symlink' function. */
+/* #undef HAVE_SYMLINK */
+
+/* Define to 1 if you have the <syscall.h> header file. */
+/* #undef HAVE_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/asoundlib.h> header file. */
+/* #undef HAVE_SYS_ASOUNDLIB_H */
+
+/* Define to 1 if you have the <sys/cdio.h> header file. */
+/* #undef HAVE_SYS_CDIO_H */
+
+/* Define to 1 if you have the <sys/elf32.h> header file. */
+#define HAVE_SYS_ELF32_H 1
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+/* #undef HAVE_SYS_EPOLL_H */
+
+/* Define to 1 if you have the <sys/errno.h> header file. */
+#define HAVE_SYS_ERRNO_H 1
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+/* #undef HAVE_SYS_EVENT_H */
+
+/* Define to 1 if you have the <sys/exec_elf.h> header file. */
+/* #undef HAVE_SYS_EXEC_ELF_H */
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+/* #undef HAVE_SYS_FILIO_H */
+
+/* Define to 1 if you have the <sys/inotify.h> header file. */
+/* #undef HAVE_SYS_INOTIFY_H */
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#define HAVE_SYS_IOCTL_H 1
+
+/* Define to 1 if you have the <sys/ipc.h> header file. */
+#define HAVE_SYS_IPC_H 1
+
+/* Define to 1 if you have the <sys/limits.h> header file. */
+/* #undef HAVE_SYS_LIMITS_H */
+
+/* Define to 1 if you have the <sys/link.h> header file. */
+/* #undef HAVE_SYS_LINK_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+/* #undef HAVE_SYS_MMAN_H */
+
+/* Define to 1 if you have the <sys/modem.h> header file. */
+/* #undef HAVE_SYS_MODEM_H */
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#define HAVE_SYS_MOUNT_H 1
+
+/* Define to 1 if you have the <sys/msg.h> header file. */
+#define HAVE_SYS_MSG_H 1
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#define HAVE_SYS_MTIO_H 1
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#define HAVE_SYS_PARAM_H 1
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#define HAVE_SYS_POLL_H 1
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+/* #undef HAVE_SYS_PRCTL_H */
+
+/* Define to 1 if you have the <sys/protosw.h> header file. */
+/* #undef HAVE_SYS_PROTOSW_H */
+
+/* Define to 1 if you have the <sys/ptrace.h> header file. */
+/* #undef HAVE_SYS_PTRACE_H */
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+/* #undef HAVE_SYS_RESOURCE_H */
+
+/* Define to 1 if you have the <sys/scsiio.h> header file. */
+/* #undef HAVE_SYS_SCSIIO_H */
+
+/* Define to 1 if you have the <sys/shm.h> header file. */
+/* #undef HAVE_SYS_SHM_H */
+
+/* Define to 1 if you have the <sys/signal.h> header file. */
+/* #undef HAVE_SYS_SIGNAL_H */
+
+/* Define to 1 if you have the <sys/socketvar.h> header file. */
+/* #undef HAVE_SYS_SOCKETVAR_H */
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H 1
+
+/* Define to 1 if you have the <sys/sockio.h> header file. */
+/* #undef HAVE_SYS_SOCKIO_H */
+
+/* Define to 1 if you have the <sys/soundcard.h> header file. */
+#define HAVE_SYS_SOUNDCARD_H 1
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#define HAVE_SYS_STATFS_H 1
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#define HAVE_SYS_STATVFS_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/strtio.h> header file. */
+/* #undef HAVE_SYS_STRTIO_H */
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+/* #undef HAVE_SYS_SYSCALL_H */
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/thr.h> header file. */
+/* #undef HAVE_SYS_THR_H */
+
+/* Define to 1 if you have the <sys/tihdr.h> header file. */
+/* #undef HAVE_SYS_TIHDR_H */
+
+/* Define to 1 if you have the <sys/timeout.h> header file. */
+/* #undef HAVE_SYS_TIMEOUT_H */
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#define HAVE_SYS_TIMES_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#define HAVE_SYS_UIO_H 1
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#define HAVE_SYS_UN_H 1
+
+/* Define to 1 if you have the <sys/user.h> header file. */
+/* #undef HAVE_SYS_USER_H */
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+/* #undef HAVE_SYS_UTSNAME_H */
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#define HAVE_SYS_VFS_H 1
+
+/* Define to 1 if you have the <sys/vm86.h> header file. */
+/* #undef HAVE_SYS_VM86_H */
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the `tcgetattr' function. */
+#define HAVE_TCGETATTR 1
+
+/* Define to 1 if you have the <termios.h> header file. */
+#define HAVE_TERMIOS_H 1
+
+/* Define to 1 if you have the `thr_kill2' function. */
+/* #undef HAVE_THR_KILL2 */
+
+/* Define to 1 if you have the `timegm' function. */
+#define HAVE_TIMEGM 1
+
+/* Define if you have the timezone variable */
+#define HAVE_TIMEZONE 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+/* #undef HAVE_UCONTEXT_H */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #undef HAVE_UNISTD_H */
+
+/* Define to 1 if you have the `usleep' function. */
+#define HAVE_USLEEP 1
+
+/* Define to 1 if you have the <utime.h> header file. */
+#define HAVE_UTIME_H 1
+
+/* Define to 1 if you have the <valgrind/memcheck.h> header file. */
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+/* #undef HAVE_VALGRIND_VALGRIND_H */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+/* #undef HAVE_VSNPRINTF */
+
+/* Define to 1 if you have the `wait4' function. */
+#define HAVE_WAIT4 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <X11/extensions/shape.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_SHAPE_H */
+
+/* Define to 1 if you have the <X11/extensions/Xcomposite.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XCOMPOSITE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmode.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMODE_H */
+
+/* Define to 1 if you have the <X11/extensions/xf86vmproto.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XF86VMPROTO_H */
+
+/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINERAMA_H */
+
+/* Define to 1 if you have the <X11/extensions/XInput.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XINPUT_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRANDR_H */
+
+/* Define to 1 if you have the <X11/extensions/Xrender.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XRENDER_H */
+
+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
+/* #undef HAVE_X11_EXTENSIONS_XSHM_H */
+
+/* Define to 1 if you have the <X11/Xcursor/Xcursor.h> header file. */
+/* #undef HAVE_X11_XCURSOR_XCURSOR_H */
+
+/* Define to 1 if you have the <X11/XKBlib.h> header file. */
+/* #undef HAVE_X11_XKBLIB_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if `callback' is a member of `XICCallback'. */
+/* #undef HAVE_XICCALLBACK_CALLBACK */
+
+/* Define if you have the XKB extension */
+/* #undef HAVE_XKB */
+
+/* Define if libxml2 has the xmlNewDocPI function */
+/* #undef HAVE_XMLNEWDOCPI */
+
+/* Define if libxml2 has the xmlReadMemory function */
+/* #undef HAVE_XMLREADMEMORY */
+
+/* Define if Xrender has the XRenderSetPictureTransform function */
+/* #undef HAVE_XRENDERSETPICTURETRANSFORM */
+
+/* Define to 1 if you have the `z' library (-lz). */
+#define HAVE_ZLIB 1
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#define HAVE_ZLIB_H 1
+
+/* Define to 1 if you have the `_pclose' function. */
+#define HAVE__PCLOSE 1
+
+/* Define to 1 if you have the `_popen' function. */
+#define HAVE__POPEN 1
+
+/* Define to 1 if you have the `_snprintf' function. */
+#define HAVE__SNPRINTF 1
+
+/* Define to 1 if you have the `_spawnvp' function. */
+#define HAVE__SPAWNVP 1
+
+/* Define to 1 if you have the `_strdup' function. */
+#define HAVE__STRDUP 1
+
+/* Define to 1 if you have the `_stricmp' function. */
+/* #undef HAVE__STRICMP */
+
+/* Define to 1 if you have the `_strnicmp' function. */
+/* #undef HAVE__STRNICMP */
+
+/* Define to 1 if you have the `_strtoi64' function. */
+/* #undef HAVE__STRTOI64 */
+
+/* Define to 1 if you have the `_strtoui64' function. */
+/* #undef HAVE__STRTOUI64 */
+
+/* Define to 1 if you have the `_vsnprintf' function. */
+#define HAVE__VSNPRINTF 1
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "wine-devel@winehq.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "Wine"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "Wine 1.1.36"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "wine"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL "http://www.winehq.org"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.1.36"
+
+/* Define to the soname of the libcapi20 library. */
+/* #undef SONAME_LIBCAPI20 */
+
+/* Define to the soname of the libcrypto library. */
+/* #undef SONAME_LIBCRYPTO */
+
+/* Define to the soname of the libcups library. */
+/* #undef SONAME_LIBCUPS */
+
+/* Define to the soname of the libcurses library. */
+/* #undef SONAME_LIBCURSES */
+
+/* Define to the soname of the libfontconfig library. */
+/* #undef SONAME_LIBFONTCONFIG */
+
+/* Define to the soname of the libfreetype library. */
+/* #undef SONAME_LIBFREETYPE */
+
+/* Define to the soname of the libGL library. */
+/* #undef SONAME_LIBGL */
+
+/* Define to the soname of the libGLU library. */
+/* #undef SONAME_LIBGLU */
+
+/* Define to the soname of the libgnutls library. */
+/* #undef SONAME_LIBGNUTLS */
+
+/* Define to the soname of the libgsm library. */
+/* #undef SONAME_LIBGSM */
+
+/* Define to the soname of the libhal library. */
+/* #undef SONAME_LIBHAL */
+
+/* Define to the soname of the libjack library. */
+/* #undef SONAME_LIBJACK */
+
+/* Define to the soname of the libjpeg library. */
+/* #undef SONAME_LIBJPEG */
+
+/* Define to the soname of the libncurses library. */
+/* #undef SONAME_LIBNCURSES */
+
+/* Define to the soname of the libodbc library. */
+#define SONAME_LIBODBC "libodbc.dll"
+
+/* Define to the soname of the libpng library. */
+/* #undef SONAME_LIBPNG */
+
+/* Define to the soname of the libsane library. */
+/* #undef SONAME_LIBSANE */
+
+/* Define to the soname of the libssl library. */
+/* #undef SONAME_LIBSSL */
+
+/* Define to the soname of the libX11 library. */
+/* #undef SONAME_LIBX11 */
+
+/* Define to the soname of the libXcomposite library. */
+/* #undef SONAME_LIBXCOMPOSITE */
+
+/* Define to the soname of the libXcursor library. */
+/* #undef SONAME_LIBXCURSOR */
+
+/* Define to the soname of the libXext library. */
+/* #undef SONAME_LIBXEXT */
+
+/* Define to the soname of the libXi library. */
+/* #undef SONAME_LIBXI */
+
+/* Define to the soname of the libXinerama library. */
+/* #undef SONAME_LIBXINERAMA */
+
+/* Define to the soname of the libXrandr library. */
+/* #undef SONAME_LIBXRANDR */
+
+/* Define to the soname of the libXrender library. */
+/* #undef SONAME_LIBXRENDER */
+
+/* Define to the soname of the libxslt library. */
+/* #undef SONAME_LIBXSLT */
+
+/* Define to the soname of the libXxf86vm library. */
+/* #undef SONAME_LIBXXF86VM */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to a macro to output a .cfi assembly pseudo-op */
+#define __ASM_CFI(str) str
+
+/* Define to a macro to define an assembly function */
+#define __ASM_DEFINE_FUNC(name,suffix,code) asm(".text\n\t.align 4\n\t.globl _" #name suffix "\n\t.def _" #name suffix "; .scl 2; .type 32; .endef\n_" #name suffix ":\n\t.cfi_startproc\n\t" code "\n\t.cfi_endproc");
+
+/* Define to a macro to generate an assembly function directive */
+#define __ASM_FUNC(name) ".def " __ASM_NAME(name) "; .scl 2; .type 32; .endef"
+
+/* Define to a macro to generate an assembly function with C calling
+ convention */
+#define __ASM_GLOBAL_FUNC(name,code) __ASM_DEFINE_FUNC(name,"",code)
+
+/* Define to a macro to generate an assembly name from a C symbol */
+#define __ASM_NAME(name) "_" name
+
+/* Define to a macro to generate an stdcall suffix */
+#define __ASM_STDCALL(args) "@" #args
+
+/* Define to a macro to generate an assembly function with stdcall calling
+ convention */
+#define __ASM_STDCALL_FUNC(name,args,code) __ASM_DEFINE_FUNC(name,__ASM_STDCALL(args),code)
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl
new file mode 100644
index 00000000..a20cad92
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/control.idl
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2002 Lionel Ulmer
+ * Copyright (C) 2004 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+[
+ version(1.0),
+ uuid(56a868b0-0ad4-11ce-b03a-0020af0ba770)
+]
+library QuartzTypeLib
+{
+ importlib("stdole2.tlb");
+
+ typedef LONG OAFilterState;
+ typedef LONG_PTR OAHWND;
+ typedef LONG_PTR OAEVENT;
+
+ cpp_quote("#ifndef REFTIME_DEFINED")
+ cpp_quote("#define REFTIME_DEFINED")
+ typedef DOUBLE REFTIME;
+ cpp_quote("#endif")
+
+ /***************************************************************************
+ * IMediaControl interface
+ */
+ [
+ object,
+ uuid(56a868b1-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IMediaControl : IDispatch
+ {
+ HRESULT Run();
+ HRESULT Pause();
+ HRESULT Stop();
+ HRESULT GetState( [in] LONG msTimeout, [out] OAFilterState *pfs );
+ HRESULT RenderFile( [in] BSTR strFilename );
+ HRESULT AddSourceFilter( [in] BSTR strFilename, [out] IDispatch **ppUnk );
+ [propget] HRESULT FilterCollection( [out] IDispatch **ppUnk );
+ [propget] HRESULT RegFilterCollection( [out] IDispatch **ppUnk );
+ HRESULT StopWhenReady();
+ }
+
+
+ /***************************************************************************
+ * IBasicAudio interface
+ */
+ [
+ object,
+ uuid(56a868b3-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IBasicAudio : IDispatch
+ {
+ [propput] HRESULT Volume( [in] LONG lVolume );
+ [propget] HRESULT Volume( [out] LONG *plVolume );
+ [propput] HRESULT Balance( [in] LONG lBalance );
+ [propget] HRESULT Balance( [out] LONG *plBalance );
+ }
+
+
+ /***************************************************************************
+ * IVideoWindow interface
+ */
+ [
+ object,
+ uuid(56a868b4-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IVideoWindow : IDispatch
+ {
+ [propput] HRESULT Caption( [in] BSTR strCaption );
+ [propget] HRESULT Caption( [out] BSTR *strCaption );
+ [propput] HRESULT WindowStyle( [in] LONG WindowStyle );
+ [propget] HRESULT WindowStyle( [out] LONG *WindowStyle );
+ [propput] HRESULT WindowStyleEx( [in] LONG WindowStyleEx );
+ [propget] HRESULT WindowStyleEx( [out] LONG *WindowStyleEx );
+ [propput] HRESULT AutoShow( [in] LONG AutoShow );
+ [propget] HRESULT AutoShow( [out] LONG *AutoShow );
+ [propput] HRESULT WindowState( [in] LONG WindowState );
+ [propget] HRESULT WindowState( [out] LONG *WindowState );
+ [propput] HRESULT BackgroundPalette( [in] LONG BackgroundPalette );
+ [propget] HRESULT BackgroundPalette( [out] LONG *pBackgroundPalette );
+ [propput] HRESULT Visible( [in] LONG Visible );
+ [propget] HRESULT Visible( [out] LONG *pVisible );
+ [propput] HRESULT Left( [in] LONG Left );
+ [propget] HRESULT Left( [out] LONG *pLeft );
+ [propput] HRESULT Width( [in] LONG Width );
+ [propget] HRESULT Width( [out] LONG *pWidth );
+ [propput] HRESULT Top( [in] LONG Top );
+ [propget] HRESULT Top( [out] LONG *pTop );
+ [propput] HRESULT Height( [in] LONG Height );
+ [propget] HRESULT Height( [out] LONG *pHeight );
+ [propput] HRESULT Owner( [in] OAHWND Owner );
+ [propget] HRESULT Owner( [out] OAHWND *Owner );
+ [propput] HRESULT MessageDrain( [in] OAHWND Drain );
+ [propget] HRESULT MessageDrain( [out] OAHWND *Drain );
+ [propget] HRESULT BorderColor( [out] LONG *Color );
+ [propput] HRESULT BorderColor( [in] LONG Color );
+ [propget] HRESULT FullScreenMode( [out] LONG *FullScreenMode );
+ [propput] HRESULT FullScreenMode( [in] LONG FullScreenMode );
+ HRESULT SetWindowForeground( [in] LONG Focus );
+ HRESULT NotifyOwnerMessage( [in] OAHWND hwnd, [in] LONG uMsg, [in] LONG_PTR wParam, [in] LONG_PTR lParam );
+ HRESULT SetWindowPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );
+ HRESULT GetWindowPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT GetMinIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT GetMaxIdealImageSize( [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT GetRestorePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT HideCursor( [in] LONG HideCursor );
+ HRESULT IsCursorHidden( [out] LONG *CursorHidden );
+ }
+
+
+ /***************************************************************************
+ * IBasicVideo interface
+ */
+ [
+ object,
+ uuid(56a868b5-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IBasicVideo : IDispatch
+ {
+ [propget] HRESULT AvgTimePerFrame( [out] REFTIME *pAvgTimePerFrame );
+ [propget] HRESULT BitRate( [out] LONG *pBitRate );
+ [propget] HRESULT BitErrorRate( [out] LONG *pBitErrorRate );
+ [propget] HRESULT VideoWidth( [out] LONG *pVideoWidth );
+ [propget] HRESULT VideoHeight( [out] LONG *pVideoHeight );
+ [propput] HRESULT SourceLeft( [in] LONG SourceLeft );
+ [propget] HRESULT SourceLeft( [out] LONG *pSourceLeft );
+ [propput] HRESULT SourceWidth( [in] LONG SourceWidth );
+ [propget] HRESULT SourceWidth( [out] LONG *pSourceWidth );
+ [propput] HRESULT SourceTop( [in] LONG SourceTop );
+ [propget] HRESULT SourceTop( [out] LONG *pSourceTop );
+ [propput] HRESULT SourceHeight( [in] LONG SourceHeight );
+ [propget] HRESULT SourceHeight( [out] LONG *pSourceHeight );
+ [propput] HRESULT DestinationLeft( [in] LONG DestinationLeft );
+ [propget] HRESULT DestinationLeft( [out] LONG *pDestinationLeft );
+ [propput] HRESULT DestinationWidth( [in] LONG DestinationWidth );
+ [propget] HRESULT DestinationWidth( [out] LONG *pDestinationWidth );
+ [propput] HRESULT DestinationTop( [in] LONG DestinationTop );
+ [propget] HRESULT DestinationTop( [out] LONG *pDestinationTop );
+ [propput] HRESULT DestinationHeight( [in] LONG DestinationHeight );
+ [propget] HRESULT DestinationHeight( [out] LONG *pDestinationHeight );
+ HRESULT SetSourcePosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );
+ HRESULT GetSourcePosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT SetDefaultSourcePosition();
+ HRESULT SetDestinationPosition( [in] LONG Left, [in] LONG Top, [in] LONG Width, [in] LONG Height );
+ HRESULT GetDestinationPosition( [out] LONG *pLeft, [out] LONG *pTop, [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT SetDefaultDestinationPosition();
+ HRESULT GetVideoSize( [out] LONG *pWidth, [out] LONG *pHeight );
+ HRESULT GetVideoPaletteEntries( [in] LONG StartIndex,
+ [in] LONG Entries,
+ [out] LONG *pRetrieved,
+ [out, size_is(Entries), length_is(*pRetrieved)] LONG *pPalette );
+ HRESULT GetCurrentImage( [in, out] LONG *pBufferSize,
+ [out, size_is(*pBufferSize), length_is(*pBufferSize)] LONG *pDIBImage );
+ HRESULT IsUsingDefaultSource();
+ HRESULT IsUsingDefaultDestination();
+ }
+
+ [
+ uuid(329bb360-f6ea-11d1-9038-00a0c9697298),
+ helpstring("IBasicVideo2"),
+ odl
+ ]
+
+ interface IBasicVideo2 : IBasicVideo
+ {
+ HRESULT GetPreferredAspectRatio([out] LONG *plAspectX, [out] LONG *plAspectY);
+ }
+
+
+ /***************************************************************************
+ * IMediaEvent interface
+ */
+ [
+ object,
+ uuid(56a868b6-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IMediaEvent : IDispatch
+ {
+ HRESULT GetEventHandle( [out] OAEVENT *hEvent );
+ HRESULT GetEvent( [out] LONG *lEventCode, [out] LONG_PTR *lParam1, [out] LONG_PTR *lParam2, [in] LONG msTimeout );
+ HRESULT WaitForCompletion( [in] LONG msTimeout, [out] LONG *pEvCode );
+ HRESULT CancelDefaultHandling( [in] LONG lEvCode );
+ HRESULT RestoreDefaultHandling( [in] LONG lEvCode );
+ HRESULT FreeEventParams( [in] LONG lEvCode, [in] LONG_PTR lParam1, [in] LONG_PTR lParam2 );
+ }
+
+
+ /***************************************************************************
+ * IMediaEventEx interface
+ */
+ [
+ object,
+ uuid(56a868c0-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IMediaEventEx : IMediaEvent
+ {
+ HRESULT SetNotifyWindow( [in] OAHWND hwnd, [in] LONG lMsg, [in] LONG_PTR lInstanceData );
+ HRESULT SetNotifyFlags( [in] LONG lNoNotifyFlags );
+ HRESULT GetNotifyFlags( [out] LONG *lplNoNotifyFlags );
+ }
+
+
+ /***************************************************************************
+ * IMediaPosition interface
+ */
+ [
+ object,
+ uuid(56a868b2-0ad4-11ce-b03a-0020af0ba770),
+ pointer_default(unique)
+ ]
+ interface IMediaPosition : IDispatch
+ {
+ HRESULT get_Duration( [out] REFTIME *plength );
+ HRESULT put_CurrentPosition( [in] REFTIME llTime );
+ HRESULT get_CurrentPosition( [out] REFTIME *pllTime );
+ HRESULT get_StopTime( [out] REFTIME *pllTime );
+ HRESULT put_StopTime( [in] REFTIME llTime );
+ HRESULT get_PrerollTime( [out] REFTIME *pllTime );
+ HRESULT put_PrerollTime( [in] REFTIME llTime );
+ HRESULT put_Rate( [in] double dRate );
+ HRESULT get_Rate( [out] double *pdRate );
+ HRESULT CanSeekForward( [out] LONG *pCanSeekForward );
+ HRESULT CanSeekBackward( [out] LONG *pCanSeekBackward );
+ }
+
+} /* library QuartzTypeLib */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl
new file mode 100644
index 00000000..738b1e3e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cor.idl
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "propidl.idl";
+
+cpp_quote("#include <ole2.h>")
+/* FIXME: #include "specstrings.h" */
+cpp_quote("#include <corerror.h>")
+cpp_quote("#include <corhdr.h>")
+
+cpp_quote("DEFINE_GUID(CLSID_CorMetaDataDispenser, 0xe5cb7a31,0x7512,0x11d2,0x89,0xce,0x00,0x80,0xc7,0x92,0xe5,0xd8);")
+cpp_quote("DEFINE_GUID(CLSID_CorMetaDataDispenserRuntime, 0x1ec2de53,0x75cc,0x11d2,0x97,0x75,0x00,0xa0,0xc9,0xb4,0xd5,0x0c);")
+
+[
+ object,
+ local,
+ uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)
+]
+interface IMetaDataDispenser : IUnknown
+{
+ HRESULT DefineScope(
+ [in] REFCLSID rclsid,
+ [in] DWORD dwCreateFlags,
+ [in] REFIID riid,
+ [out] IUnknown **ppIUnk);
+
+ HRESULT OpenScope(
+ [in] LPCWSTR szScope,
+ [in] DWORD dwOpenFlags,
+ [in] REFIID riid,
+ [out] IUnknown **ppIUnk);
+
+ HRESULT OpenScopeOnMemory(
+ [in] const void *pData,
+ [in] ULONG cbData,
+ [in] DWORD dwOpenFlags,
+ [in] REFIID riid,
+ [out] IUnknown **ppIUnk);
+}
+
+[
+ object,
+ local,
+ uuid(31bcfce2-dafb-11d2-9f81-00c04f79a0a3)
+]
+interface IMetaDataDispenserEx : IMetaDataDispenser
+{
+ HRESULT SetOption(
+ [in] REFGUID optionid,
+ [in] const VARIANT *value);
+
+ HRESULT GetOption(
+ [in] REFGUID optionid,
+ [out] VARIANT *pvalue);
+
+ HRESULT OpenScopeOnITypeInfo(
+ [in] ITypeInfo *pITI,
+ [in] DWORD dwOpenFlags,
+ [in] REFIID riid,
+ [out] IUnknown **ppIUnk);
+
+ HRESULT GetCORSystemDirectory(
+ [out, size_is(cchBuffer)] LPWSTR szBuffer,
+ [in] DWORD cchBuffer,
+ [out] DWORD *pchBuffer);
+
+ HRESULT FindAssembly(
+ [in] LPCWSTR szAppBase,
+ [in] LPCWSTR szPrivateBin,
+ [in] LPCWSTR szGlobalBin,
+ [in] LPCWSTR szAssemblyName,
+ [out, size_is(cchName)] LPWSTR szName,
+ [in] ULONG cchName,
+ [out] ULONG *pcName);
+
+ HRESULT FindAssemblyModule(
+ [in] LPCWSTR szAppBase,
+ [in] LPCWSTR szPrivateBin,
+ [in] LPCWSTR szGlobalBin,
+ [in] LPCWSTR szAssemblyName,
+ [in] LPCWSTR szModuleName,
+ [out, size_is(cchName)] LPWSTR szName,
+ [in] ULONG cchName,
+ [out] ULONG *pcName);
+}
+
+cpp_quote("BOOL WINAPI _CorDllMain(HINSTANCE,DWORD,LPVOID);")
+cpp_quote("__int32 WINAPI _CorExeMain(void);")
+cpp_quote("__int32 WINAPI _CorExeMain2(PBYTE,DWORD,LPWSTR,LPWSTR,LPWSTR);")
+cpp_quote("VOID WINAPI _CorImageUnloading(PVOID);")
+cpp_quote("HRESULT WINAPI _CorValidateImage(PVOID*,LPCWSTR);")
+cpp_quote("HRESULT WINAPI CoInitializeCor(DWORD);")
+cpp_quote("void WINAPI CoUninitializeCor(void);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl
new file mode 100644
index 00000000..ed01893a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cordebug.idl
@@ -0,0 +1,1050 @@
+/*
+ * Copyright (C) 2011 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef CreateProcess")
+cpp_quote("#endif")
+
+interface ICorDebugAppDomain;
+interface ICorDebugAppDomainEnum;
+interface ICorDebugAssembly;
+interface ICorDebugAssemblyEnum;
+interface ICorDebugBreakpoint;
+interface ICorDebugBreakpointEnum;
+interface ICorDebugChain;
+interface ICorDebugChainEnum;
+interface ICorDebugClass;
+interface ICorDebugCode;
+interface ICorDebugContext;
+interface ICorDebugEditAndContinueSnapshot;
+interface ICorDebugEditAndContinueErrorInfo;
+interface ICorDebugEnum;
+interface ICorDebugErrorInfoEnum;
+interface ICorDebugEval;
+interface ICorDebugFrame;
+interface ICorDebugFrameEnum;
+interface ICorDebugFunction;
+interface ICorDebugFunctionBreakpoint;
+interface ICorDebugManagedCallback;
+interface ICorDebugManagedCallback2;
+interface ICorDebugMDA;
+interface ICorDebugModule;
+interface ICorDebugModuleBreakpoint;
+interface ICorDebugModuleEnum;
+interface ICorDebugObjectEnum;
+interface ICorDebugObjectValue;
+interface ICorDebugProcess;
+interface ICorDebugProcessEnum;
+interface ICorDebugRegisterSet;
+interface ICorDebugStepper;
+interface ICorDebugStepperEnum;
+interface ICorDebugThreadEnum;
+interface ICorDebugUnmanagedCallback;
+interface ICorDebugValue;
+interface ICorDebugValueBreakpoint;
+
+
+typedef [wire_marshal(unsigned long)] void *HPROCESS;
+typedef [wire_marshal(unsigned long)] void *HTHREAD;
+
+/* These are defined in corhrd.idl but used here. */
+cpp_quote("#if 0")
+
+typedef UINT32 mdToken;
+typedef mdToken mdModule;
+typedef SIZE_T mdScope;
+typedef mdToken mdTypeDef;
+typedef mdToken mdSourceFile;
+typedef mdToken mdMemberRef;
+typedef mdToken mdMethodDef;
+typedef mdToken mdFieldDef;
+typedef mdToken mdSignature;
+typedef ULONG CorElementType;
+typedef SIZE_T PCCOR_SIGNATURE;
+
+typedef SIZE_T LPDEBUG_EVENT;
+
+typedef SIZE_T LPSTARTUPINFOW;
+typedef SIZE_T LPPROCESS_INFORMATION;
+
+cpp_quote("#endif")
+
+typedef ULONG64 CORDB_ADDRESS;
+typedef ULONG64 CORDB_REGISTER;
+
+typedef UINT64 TASKID;
+typedef DWORD CONNID;
+
+
+cpp_quote("#ifndef _COR_IL_MAP")
+cpp_quote("#define _COR_IL_MAP")
+
+typedef struct _COR_IL_MAP
+{
+ ULONG32 oldOffset;
+ ULONG32 newOffset;
+ BOOL fAccurate;
+} COR_IL_MAP;
+
+cpp_quote("#endif /* _COR_IL_MAP */")
+
+cpp_quote("#ifndef _COR_DEBUG_IL_TO_NATIVE_MAP_")
+cpp_quote("#define _COR_DEBUG_IL_TO_NATIVE_MAP_")
+
+typedef enum CorDebugIlToNativeMappingTypes
+{
+ NO_MAPPING = -1,
+ PROLOG = -2,
+ EPILOG = -3
+} CorDebugIlToNativeMappingTypes;
+
+typedef struct COR_DEBUG_IL_TO_NATIVE_MAP
+{
+ ULONG32 ilOffset;
+ ULONG32 nativeStartOffset;
+ ULONG32 nativeEndOffset;
+} COR_DEBUG_IL_TO_NATIVE_MAP;
+
+cpp_quote("#endif /* _COR_DEBUG_IL_TO_NATIVE_MAP_ */")
+
+
+typedef enum CorDebugThreadState
+{
+ THREAD_RUN,
+ THREAD_SUSPEND
+} CorDebugThreadState;
+
+typedef enum CorDebugCreateProcessFlags
+{
+ DEBUG_NO_SPECIAL_OPTIONS = 0x0000
+} CorDebugCreateProcessFlags;
+
+[
+ object,
+ local,
+ uuid(CC7BCAF7-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugValue : IUnknown
+{
+ HRESULT GetType([out] CorElementType *pType);
+ HRESULT GetSize([out] ULONG32 *pSize);
+ HRESULT GetAddress([out] CORDB_ADDRESS *pAddress);
+ HRESULT CreateBreakpoint([out] ICorDebugValueBreakpoint **ppBreakpoint);
+};
+
+[
+ object,
+ local,
+ uuid(938c6d66-7fb6-4f69-b389-425b8987329b),
+ pointer_default(unique)
+]
+interface ICorDebugThread : IUnknown
+{
+ HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+ HRESULT GetID([out] DWORD *pdwThreadId);
+ HRESULT GetHandle([out] HTHREAD *phThreadHandle);
+ HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);
+ HRESULT SetDebugState([in] CorDebugThreadState state);
+ HRESULT GetDebugState([out] CorDebugThreadState *pState);
+
+ typedef enum CorDebugUserState
+ {
+ USER_STOP_REQUESTED = 0x01,
+ USER_SUSPEND_REQUESTED = 0x02,
+ USER_BACKGROUND = 0x04,
+ USER_UNSTARTED = 0x08,
+ USER_STOPPED = 0x10,
+ USER_WAIT_SLEEP_JOIN = 0x20,
+ USER_SUSPENDED = 0x40,
+
+ USER_UNSAFE_POINT = 0x80,
+ } CorDebugUserState;
+
+ HRESULT GetUserState([out] CorDebugUserState *pState);
+ HRESULT GetCurrentException([out] ICorDebugValue **ppExceptionObject);
+ HRESULT ClearCurrentException();
+ HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);
+ HRESULT EnumerateChains([out] ICorDebugChainEnum **ppChains);
+ HRESULT GetActiveChain([out] ICorDebugChain **ppChain);
+ HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);
+ HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);
+ HRESULT CreateEval([out] ICorDebugEval **ppEval);
+ HRESULT GetObject([out] ICorDebugValue **ppObject);
+};
+
+[
+ object,
+ local,
+ uuid(3d6f5f62-7538-11d3-8d5b-00104b35e7ef),
+ pointer_default(unique)
+]
+
+interface ICorDebugController : IUnknown
+{
+ HRESULT Stop([in] DWORD dwTimeoutIgnored);
+ HRESULT Continue([in] BOOL fIsOutOfBand);
+ HRESULT IsRunning([out] BOOL *pbRunning);
+ HRESULT HasQueuedCallbacks([in] ICorDebugThread *pThread,
+ [out] BOOL *pbQueued);
+ HRESULT EnumerateThreads([out] ICorDebugThreadEnum **ppThreads);
+ HRESULT SetAllThreadsDebugState([in] CorDebugThreadState state,
+ [in] ICorDebugThread *pExceptThisThread);
+ HRESULT Detach();
+ HRESULT Terminate([in] UINT exitCode);
+ HRESULT CanCommitChanges([in] ULONG cSnapshots,
+ [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],
+ [out] ICorDebugErrorInfoEnum **pError);
+ HRESULT CommitChanges([in] ULONG cSnapshots,
+ [in] ICorDebugEditAndContinueSnapshot *pSnapshots[],
+ [out] ICorDebugErrorInfoEnum **pError);
+};
+
+[
+ object,
+ local,
+ uuid(3d6f5f64-7538-11d3-8d5b-00104b35e7ef),
+ pointer_default(unique)
+]
+interface ICorDebugProcess : ICorDebugController
+{
+ HRESULT GetID([out] DWORD *pdwProcessId);
+ HRESULT GetHandle([out] HPROCESS *phProcessHandle);
+ HRESULT GetThread([in] DWORD dwThreadId, [out] ICorDebugThread **ppThread);
+ HRESULT EnumerateObjects([out] ICorDebugObjectEnum **ppObjects);
+ HRESULT IsTransitionStub([in] CORDB_ADDRESS address, [out] BOOL *pbTransitionStub);
+ HRESULT IsOSSuspended([in] DWORD threadID, [out] BOOL *pbSuspended);
+ HRESULT GetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize,
+ [in, out] BYTE context[]);
+ HRESULT SetThreadContext([in] DWORD threadID, [in] ULONG32 contextSize, [in] BYTE context[]);
+ HRESULT ReadMemory([in] CORDB_ADDRESS address, [in] DWORD size, [out] BYTE buffer[], [out] SIZE_T *read);
+ HRESULT WriteMemory([in] CORDB_ADDRESS address, [in] DWORD size, [in] BYTE buffer[], [out] SIZE_T *written);
+ HRESULT ClearCurrentException([in] DWORD threadID);
+ HRESULT EnableLogMessages([in]BOOL fOnOff);
+ HRESULT ModifyLogSwitch([in] WCHAR *pLogSwitchName,
+ [in]LONG lLevel);
+ HRESULT EnumerateAppDomains([out] ICorDebugAppDomainEnum **ppAppDomains);
+ HRESULT GetObject([out] ICorDebugValue **ppObject);
+ HRESULT ThreadForFiberCookie([in] DWORD fiberCookie, [out] ICorDebugThread **ppThread);
+ HRESULT GetHelperThreadID([out] DWORD *pThreadID);
+};
+
+[
+ object,
+ local,
+ uuid(3d6f5f63-7538-11d3-8d5b-00104b35e7ef),
+ pointer_default(unique)
+]
+interface ICorDebugAppDomain : ICorDebugController
+{
+ HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+ HRESULT EnumerateAssemblies([out] ICorDebugAssemblyEnum **ppAssemblies);
+ HRESULT GetModuleFromMetaDataInterface([in] IUnknown *pIMetaData,
+ [out] ICorDebugModule **ppModule);
+ HRESULT EnumerateBreakpoints([out] ICorDebugBreakpointEnum **ppBreakpoints);
+ HRESULT EnumerateSteppers([out] ICorDebugStepperEnum **ppSteppers);
+ HRESULT IsAttached([out] BOOL *pbAttached);
+ HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+ HRESULT GetObject([out] ICorDebugValue **ppObject);
+ HRESULT Attach();
+ HRESULT GetID([out] ULONG32 *pId);
+};
+
+[
+ object,
+ local,
+ uuid(3d6f5f60-7538-11d3-8d5b-00104b35e7ef),
+ pointer_default(unique)
+]
+interface ICorDebugManagedCallback : IUnknown
+{
+ HRESULT Breakpoint([in] ICorDebugAppDomain *pAppDomain,
+ [in] ICorDebugThread *pThread,
+ [in] ICorDebugBreakpoint *pBreakpoint);
+
+ typedef enum CorDebugStepReason
+ {
+ STEP_NORMAL,
+ STEP_RETURN,
+ STEP_CALL,
+ STEP_EXCEPTION_FILTER,
+ STEP_EXCEPTION_HANDLER,
+ STEP_INTERCEPT,
+ STEP_EXIT
+ } CorDebugStepReason;
+
+ HRESULT StepComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] ICorDebugStepper *pStepper, [in] CorDebugStepReason reason);
+ HRESULT Break([in] ICorDebugAppDomain *pAppDomain,
+ [in] ICorDebugThread *thread);
+ HRESULT Exception([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] BOOL unhandled);
+ HRESULT EvalComplete([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] ICorDebugEval *pEval);
+ HRESULT EvalException([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] ICorDebugEval *pEval);
+ HRESULT CreateProcess([in] ICorDebugProcess *pProcess);
+ HRESULT ExitProcess([in] ICorDebugProcess *pProcess);
+ HRESULT CreateThread([in] ICorDebugAppDomain *pAppDomain,[in] ICorDebugThread *thread);
+ HRESULT ExitThread([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *thread);
+ HRESULT LoadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);
+ HRESULT UnloadModule([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule);
+ HRESULT LoadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);
+ HRESULT UnloadClass([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugClass *c);
+ HRESULT DebuggerError([in] ICorDebugProcess *pProcess, [in] HRESULT errorHR,
+ [in] DWORD errorCode);
+
+ typedef enum LoggingLevelEnum
+ {
+ LTraceLevel0 = 0,
+ LTraceLevel1,
+ LTraceLevel2,
+ LTraceLevel3,
+ LTraceLevel4,
+ LStatusLevel0 = 20,
+ LStatusLevel1,
+ LStatusLevel2,
+ LStatusLevel3,
+ LStatusLevel4,
+ LWarningLevel = 40,
+ LErrorLevel = 50,
+ LPanicLevel = 100
+ } LoggingLevelEnum;
+
+ typedef enum LogSwitchCallReason
+ {
+ SWITCH_CREATE,
+ SWITCH_MODIFY,
+ SWITCH_DELETE
+ } LogSwitchCallReason;
+
+ HRESULT LogMessage([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] LONG lLevel, [in] WCHAR *pLogSwitchName, [in] WCHAR *pMessage);
+ HRESULT LogSwitch([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] LONG lLevel, [in] ULONG ulReason, [in] WCHAR *pLogSwitchName,
+ [in] WCHAR *pParentName);
+ HRESULT CreateAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);
+ HRESULT ExitAppDomain([in] ICorDebugProcess *pProcess, [in] ICorDebugAppDomain *pAppDomain);
+ HRESULT LoadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);
+ HRESULT UnloadAssembly([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugAssembly *pAssembly);
+ HRESULT ControlCTrap([in] ICorDebugProcess *pProcess);
+ HRESULT NameChange([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread);
+ HRESULT UpdateModuleSymbols([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugModule *pModule,
+ [in] IStream *pSymbolStream);
+ HRESULT EditAndContinueRemap([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] ICorDebugFunction *pFunction, [in] BOOL fAccurate);
+
+ HRESULT BreakpointSetError([in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] ICorDebugBreakpoint *pBreakpoint, [in] DWORD dwError);
+};
+
+[
+ object,
+ local,
+ uuid(250E5EEA-DB5C-4C76-B6F3-8C46F12E3203),
+ pointer_default(unique)
+]
+interface ICorDebugManagedCallback2 : IUnknown
+{
+ HRESULT FunctionRemapOpportunity([in] ICorDebugAppDomain *pAppDomain,
+ [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pOldFunction,
+ [in] ICorDebugFunction *pNewFunction, [in] ULONG32 oldILOffset);
+
+ HRESULT CreateConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId,
+ [in] WCHAR *pConnName);
+
+ HRESULT ChangeConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );
+
+ HRESULT DestroyConnection([in] ICorDebugProcess *pProcess, [in] CONNID dwConnectionId );
+
+
+ typedef enum CorDebugExceptionCallbackType
+ {
+ DEBUG_EXCEPTION_FIRST_CHANCE = 1,
+ DEBUG_EXCEPTION_USER_FIRST_CHANCE = 2,
+ DEBUG_EXCEPTION_CATCH_HANDLER_FOUND = 3,
+ DEBUG_EXCEPTION_UNHANDLED = 4
+ } CorDebugExceptionCallbackType;
+
+ typedef enum CorDebugExceptionFlags
+ {
+ DEBUG_EXCEPTION_CAN_BE_INTERCEPTED = 0x0001
+ } CorDebugExceptionFlags;
+
+ HRESULT Exception( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] ICorDebugFrame *pFrame, [in] ULONG32 nOffset,
+ [in] CorDebugExceptionCallbackType dwEventType, [in] DWORD dwFlags );
+
+ typedef enum CorDebugExceptionUnwindCallbackType
+ {
+ DEBUG_EXCEPTION_UNWIND_BEGIN = 1,
+ DEBUG_EXCEPTION_INTERCEPTED = 2
+ } CorDebugExceptionUnwindCallbackType;
+
+ HRESULT ExceptionUnwind( [in] ICorDebugAppDomain *pAppDomain, [in] ICorDebugThread *pThread,
+ [in] CorDebugExceptionUnwindCallbackType dwEventType,
+ [in] DWORD dwFlags );
+
+ HRESULT FunctionRemapComplete([in] ICorDebugAppDomain *pAppDomain,
+ [in] ICorDebugThread *pThread, [in] ICorDebugFunction *pFunction);
+
+ HRESULT MDANotification([in] ICorDebugController * pController,
+ [in] ICorDebugThread *pThread, [in] ICorDebugMDA * pMDA
+ );
+
+};
+[
+ object,
+ local,
+ uuid(3d6f5f61-7538-11d3-8d5b-00104b35e7ef),
+ pointer_default(unique)
+]
+interface ICorDebug : IUnknown
+{
+ HRESULT Initialize();
+ HRESULT Terminate();
+ HRESULT SetManagedHandler([in] ICorDebugManagedCallback *pCallback);
+ HRESULT SetUnmanagedHandler([in] ICorDebugUnmanagedCallback *pCallback);
+ HRESULT CreateProcess([in] LPCWSTR lpApplicationName, [in] LPWSTR lpCommandLine,
+ [in] LPSECURITY_ATTRIBUTES lpProcessAttributes,
+ [in] LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags,
+ [in] PVOID lpEnvironment, [in] LPCWSTR lpCurrentDirectory,
+ [in] LPSTARTUPINFOW lpStartupInfo,
+ [in] LPPROCESS_INFORMATION lpProcessInformation,
+ [in] CorDebugCreateProcessFlags debuggingFlags,
+ [out] ICorDebugProcess **ppProcess);
+
+ HRESULT DebugActiveProcess([in] DWORD id, [in] BOOL win32Attach,
+ [out] ICorDebugProcess **ppProcess);
+ HRESULT EnumerateProcesses([out] ICorDebugProcessEnum **ppProcess);
+ HRESULT GetProcess([in] DWORD dwProcessId, [out] ICorDebugProcess **ppProcess);
+ HRESULT CanLaunchOrAttach([in] DWORD dwProcessId, [in] BOOL win32DebuggingEnabled);
+};
+
+
+[
+ object,
+ local,
+ uuid(CC7BCAE8-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugBreakpoint : IUnknown
+{
+ HRESULT Activate([in] BOOL bActive);
+ HRESULT IsActive([out] BOOL *pbActive);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAE9-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugFunctionBreakpoint : ICorDebugBreakpoint
+{
+ HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
+ HRESULT GetOffset([out] ULONG32 *pnOffset);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAEA-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugModuleBreakpoint : ICorDebugBreakpoint
+{
+ HRESULT GetModule([out] ICorDebugModule **ppModule);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAEB-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugValueBreakpoint : ICorDebugBreakpoint
+{
+ HRESULT GetValue([out] ICorDebugValue **ppValue);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAEC-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugStepper : IUnknown
+{
+ HRESULT IsActive([out] BOOL *pbActive);
+ HRESULT Deactivate();
+
+ typedef enum CorDebugIntercept
+ {
+ INTERCEPT_NONE = 0x0 ,
+ INTERCEPT_CLASS_INIT = 0x01,
+ INTERCEPT_EXCEPTION_FILTER = 0x02,
+ INTERCEPT_SECURITY = 0x04,
+ INTERCEPT_CONTEXT_POLICY = 0x08,
+ INTERCEPT_INTERCEPTION = 0x10,
+ INTERCEPT_ALL = 0xffff
+ } CorDebugIntercept;
+
+ HRESULT SetInterceptMask([in] CorDebugIntercept mask);
+
+ typedef enum CorDebugUnmappedStop
+ {
+ STOP_NONE = 0x0,
+ STOP_PROLOG = 0x01,
+ STOP_EPILOG = 0x02,
+ STOP_NO_MAPPING_INFO = 0x04,
+ STOP_OTHER_UNMAPPED = 0x08,
+ STOP_UNMANAGED = 0x10,
+
+ STOP_ALL = 0xffff,
+
+ } CorDebugUnmappedStop;
+
+ HRESULT SetUnmappedStopMask([in] CorDebugUnmappedStop mask);
+ HRESULT Step([in] BOOL bStepIn);
+
+ typedef struct COR_DEBUG_STEP_RANGE
+ {
+ ULONG32 startOffset, endOffset;
+ } COR_DEBUG_STEP_RANGE;
+
+ HRESULT StepRange([in] BOOL bStepIn, [in] COR_DEBUG_STEP_RANGE ranges[], [in] ULONG32 cRangeCount);
+ HRESULT StepOut();
+ HRESULT SetRangeIL([in] BOOL bIL);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB01-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugEnum : IUnknown
+{
+ HRESULT Skip([in] ULONG celt);
+ HRESULT Reset();
+ HRESULT Clone([out] ICorDebugEnum **ppEnum);
+ HRESULT GetCount([out] ULONG *pcelt);
+};
+
+[
+ object,
+ local,
+ uuid(63ca1b24-4359-4883-bd57-13f815f58744),
+ pointer_default(unique)
+]
+
+interface ICorDebugAppDomainEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugAppDomain *values[], [out] ULONG *pceltFetched);
+
+};
+
+[
+ object,
+ local,
+ uuid(4a2a1ec9-85ec-4bfb-9f15-a89fdfe0fe83),
+ pointer_default(unique)
+]
+interface ICorDebugAssemblyEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugAssembly *values[], [out] ULONG *pceltFetched);
+
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB03-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugBreakpointEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugBreakpoint *breakpoints[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB08-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugChainEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugChain *chains[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(F0E18809-72B5-11d2-976F-00A0C9B4D50C),
+ pointer_default(unique)
+]
+interface ICorDebugErrorInfoEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugEditAndContinueErrorInfo *errors[],
+ [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB07-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugFrameEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugFrame *frames[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB09-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugModuleEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugModule *modules[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB02-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugObjectEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] CORDB_ADDRESS objects[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB05-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugProcessEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugProcess *processes[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB04-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugStepperEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugStepper *steppers[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB06-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugThreadEnum : ICorDebugEnum
+{
+ HRESULT Next([in] ULONG celt, [out] ICorDebugThread *threads[], [out] ULONG *pceltFetched);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAEE-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugChain : IUnknown
+{
+ HRESULT GetThread([out] ICorDebugThread **ppThread);
+ HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);
+ HRESULT GetContext([out] ICorDebugContext **ppContext);
+ HRESULT GetCaller([out] ICorDebugChain **ppChain);
+ HRESULT GetCallee([out] ICorDebugChain **ppChain);
+ HRESULT GetPrevious([out] ICorDebugChain **ppChain);
+ HRESULT GetNext([out] ICorDebugChain **ppChain);
+ HRESULT IsManaged([out] BOOL *pManaged);
+ HRESULT EnumerateFrames([out] ICorDebugFrameEnum **ppFrames);
+ HRESULT GetActiveFrame([out] ICorDebugFrame **ppFrame);
+ HRESULT GetRegisterSet([out] ICorDebugRegisterSet **ppRegisters);
+ typedef enum CorDebugChainReason
+ {
+ CHAIN_NONE = 0x000,
+ CHAIN_CLASS_INIT = 0x001,
+ CHAIN_EXCEPTION_FILTER = 0x002,
+ CHAIN_SECURITY = 0x004,
+ CHAIN_CONTEXT_POLICY = 0x008,
+ CHAIN_INTERCEPTION = 0x010,
+ CHAIN_PROCESS_START = 0x020,
+ CHAIN_THREAD_START = 0x040,
+ CHAIN_ENTER_MANAGED = 0x080,
+ CHAIN_ENTER_UNMANAGED = 0x100,
+ CHAIN_DEBUGGER_EVAL = 0x200,
+ CHAIN_CONTEXT_SWITCH = 0x400,
+ CHAIN_FUNC_EVAL = 0x800,
+ } CorDebugChainReason;
+
+ HRESULT GetReason([out] CorDebugChainReason *pReason);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAEF-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugFrame : IUnknown
+{
+ HRESULT GetChain([out] ICorDebugChain **ppChain);
+ HRESULT GetCode([out] ICorDebugCode **ppCode);
+ HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
+ HRESULT GetFunctionToken([out] mdMethodDef *pToken);
+ HRESULT GetStackRange([out] CORDB_ADDRESS *pStart, [out] CORDB_ADDRESS *pEnd);
+ HRESULT GetCaller([out] ICorDebugFrame **ppFrame);
+ HRESULT GetCallee([out] ICorDebugFrame **ppFrame);
+ HRESULT CreateStepper([out] ICorDebugStepper **ppStepper);
+};
+
+
+[
+ object,
+ local,
+ uuid(CC7BCB0B-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugRegisterSet : IUnknown
+{
+ typedef enum CorDebugRegister
+ {
+ REGISTER_INSTRUCTION_POINTER = 0,
+ REGISTER_STACK_POINTER,
+ REGISTER_FRAME_POINTER,
+
+ REGISTER_X86_EIP = 0,
+ REGISTER_X86_ESP,
+ REGISTER_X86_EBP,
+
+ REGISTER_X86_EAX,
+ REGISTER_X86_ECX,
+ REGISTER_X86_EDX,
+ REGISTER_X86_EBX,
+
+ REGISTER_X86_ESI,
+ REGISTER_X86_EDI,
+
+ REGISTER_X86_FPSTACK_0,
+ REGISTER_X86_FPSTACK_1,
+ REGISTER_X86_FPSTACK_2,
+ REGISTER_X86_FPSTACK_3,
+ REGISTER_X86_FPSTACK_4,
+ REGISTER_X86_FPSTACK_5,
+ REGISTER_X86_FPSTACK_6,
+ REGISTER_X86_FPSTACK_7,
+
+ REGISTER_AMD64_RIP = 0,
+ REGISTER_AMD64_RSP,
+ REGISTER_AMD64_RBP,
+
+ REGISTER_AMD64_RAX,
+ REGISTER_AMD64_RCX,
+ REGISTER_AMD64_RDX,
+ REGISTER_AMD64_RBX,
+
+ REGISTER_AMD64_RSI,
+ REGISTER_AMD64_RDI,
+
+ REGISTER_AMD64_R8,
+ REGISTER_AMD64_R9,
+ REGISTER_AMD64_R10,
+ REGISTER_AMD64_R11,
+ REGISTER_AMD64_R12,
+ REGISTER_AMD64_R13,
+ REGISTER_AMD64_R14,
+ REGISTER_AMD64_R15,
+
+ REGISTER_AMD64_XMM0,
+ REGISTER_AMD64_XMM1,
+ REGISTER_AMD64_XMM2,
+ REGISTER_AMD64_XMM3,
+ REGISTER_AMD64_XMM4,
+ REGISTER_AMD64_XMM5,
+ REGISTER_AMD64_XMM6,
+ REGISTER_AMD64_XMM7,
+ REGISTER_AMD64_XMM8,
+ REGISTER_AMD64_XMM9,
+ REGISTER_AMD64_XMM10,
+ REGISTER_AMD64_XMM11,
+ REGISTER_AMD64_XMM12,
+ REGISTER_AMD64_XMM13,
+ REGISTER_AMD64_XMM14,
+ REGISTER_AMD64_XMM15,
+
+ REGISTER_IA64_BSP = REGISTER_FRAME_POINTER,
+
+ REGISTER_IA64_R0 = REGISTER_IA64_BSP + 1,
+ REGISTER_IA64_F0 = REGISTER_IA64_R0 + 128,
+
+ } CorDebugRegister;
+
+ HRESULT GetRegistersAvailable([out] ULONG64 *pAvailable);
+
+ HRESULT GetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,
+ [out] CORDB_REGISTER regBuffer[]);
+ HRESULT SetRegisters([in] ULONG64 mask, [in] ULONG32 regCount,
+ [in] CORDB_REGISTER regBuffer[]);
+ HRESULT GetThreadContext([in] ULONG32 contextSize, [in, out] BYTE context[]);
+ HRESULT SetThreadContext([in] ULONG32 contextSize, [in] BYTE context[]);
+}
+
+[
+ object,
+ local,
+ uuid(CC7BCAF6-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugEval : IUnknown
+{
+ HRESULT CallFunction([in] ICorDebugFunction *pFunction, [in] ULONG32 nArgs,
+ [in] ICorDebugValue *ppArgs[]);
+ HRESULT NewObject([in] ICorDebugFunction *pConstructor, [in] ULONG32 nArgs,
+ [in] ICorDebugValue *ppArgs[]);
+ HRESULT NewObjectNoConstructor([in] ICorDebugClass *pClass);
+ HRESULT NewString([in] LPCWSTR string);
+ HRESULT NewArray([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,
+ [in] ULONG32 rank, [in] ULONG32 dims[], [in] ULONG32 lowBounds[]);
+ HRESULT IsActive([out] BOOL *pbActive);
+ HRESULT Abort();
+ HRESULT GetResult([out] ICorDebugValue **ppResult);
+ HRESULT GetThread([out] ICorDebugThread **ppThread);
+ HRESULT CreateValue([in] CorElementType elementType, [in] ICorDebugClass *pElementClass,
+ [out] ICorDebugValue **ppValue);
+};
+
+[
+ object,
+ local,
+ uuid(6DC3FA01-D7CB-11d2-8A95-0080C792E5D8),
+ pointer_default(unique)
+]
+interface ICorDebugEditAndContinueSnapshot : IUnknown
+{
+ HRESULT CopyMetaData([in] IStream *pIStream, [out] GUID *pMvid);
+ HRESULT GetMvid([out] GUID *pMvid);
+ HRESULT GetRoDataRVA([out] ULONG32 *pRoDataRVA);
+ HRESULT GetRwDataRVA([out] ULONG32 *pRwDataRVA);
+ HRESULT SetPEBytes([in] IStream *pIStream);
+ HRESULT SetILMap([in] mdToken mdFunction, [in] ULONG cMapSize, [in] COR_IL_MAP map[]);
+ HRESULT SetPESymbolBytes([in] IStream *pIStream);
+};
+
+[
+ object,
+ local,
+ uuid(dba2d8c1-e5c5-4069-8c13-10a7c6abf43d),
+ pointer_default(unique)
+]
+interface ICorDebugModule : IUnknown
+{
+ HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+ HRESULT GetBaseAddress([out] CORDB_ADDRESS *pAddress);
+ HRESULT GetAssembly([out] ICorDebugAssembly **ppAssembly);
+ HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+ HRESULT EnableJITDebugging([in] BOOL bTrackJITInfo, [in] BOOL bAllowJitOpts);
+ HRESULT EnableClassLoadCallbacks([in] BOOL bClassLoadCallbacks);
+ HRESULT GetFunctionFromToken([in] mdMethodDef methodDef, [out] ICorDebugFunction **ppFunction);
+ HRESULT GetFunctionFromRVA([in] CORDB_ADDRESS rva, [out] ICorDebugFunction **ppFunction);
+ HRESULT GetClassFromToken([in] mdTypeDef typeDef, [out] ICorDebugClass **ppClass);
+ HRESULT CreateBreakpoint([out] ICorDebugModuleBreakpoint **ppBreakpoint);
+ HRESULT GetEditAndContinueSnapshot([out] ICorDebugEditAndContinueSnapshot **ppEditAndContinueSnapshot);
+ HRESULT GetMetaDataInterface([in] REFIID riid, [out] IUnknown **ppObj);
+ HRESULT GetToken([out] mdModule *pToken);
+ HRESULT IsDynamic([out] BOOL *pDynamic);
+ HRESULT GetGlobalVariableValue([in] mdFieldDef fieldDef, [out] ICorDebugValue **ppValue);
+ HRESULT GetSize([out] ULONG32 *pcBytes);
+ HRESULT IsInMemory([out] BOOL *pInMemory);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAF5-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugClass : IUnknown
+{
+ HRESULT GetModule([out] ICorDebugModule **pModule);
+ HRESULT GetToken([out] mdTypeDef *pTypeDef);
+ HRESULT GetStaticFieldValue([in] mdFieldDef fieldDef, [in] ICorDebugFrame *pFrame,
+ [out] ICorDebugValue **ppValue);
+};
+
+[
+ object,
+ local,
+ uuid(df59507c-d47a-459e-bce2-6427eac8fd06),
+ pointer_default(unique)
+]
+interface ICorDebugAssembly : IUnknown
+{
+ HRESULT GetProcess([out] ICorDebugProcess **ppProcess);
+ HRESULT GetAppDomain([out] ICorDebugAppDomain **ppAppDomain);
+ HRESULT EnumerateModules([out] ICorDebugModuleEnum **ppModules);
+ HRESULT GetCodeBase([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+ HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 *pcchName, [out] WCHAR szName[]);
+};
+
+
+[
+ object,
+ local,
+ uuid(CC7BCAF3-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugFunction : IUnknown
+{
+ HRESULT GetModule([out] ICorDebugModule **ppModule);
+ HRESULT GetClass([out] ICorDebugClass **ppClass);
+ HRESULT GetToken([out] mdMethodDef *pMethodDef);
+ HRESULT GetILCode([out] ICorDebugCode **ppCode);
+ HRESULT GetNativeCode([out] ICorDebugCode **ppCode);
+ HRESULT CreateBreakpoint([out] ICorDebugFunctionBreakpoint **ppBreakpoint);
+ HRESULT GetLocalVarSigToken([out] mdSignature *pmdSig);
+ HRESULT GetCurrentVersionNumber([out] ULONG32 *pnCurrentVersion);
+};
+
+[
+ object,
+ local,
+ uuid(5263E909-8CB5-11d3-BD2F-0000F80849BD),
+ pointer_default(unique)
+]
+interface ICorDebugUnmanagedCallback : IUnknown
+{
+ HRESULT DebugEvent([in] LPDEBUG_EVENT pDebugEvent, [in] BOOL fOutOfBand);
+};
+
+[
+ object,
+ local,
+ uuid(8D600D41-F4F6-4cb3-B7EC-7BD164944036),
+ pointer_default(unique)
+]
+interface ICorDebugEditAndContinueErrorInfo : IUnknown
+{
+ HRESULT GetModule([out] ICorDebugModule **ppModule);
+ HRESULT GetToken([out]mdToken *pToken);
+ HRESULT GetErrorCode([out]HRESULT *pHr);
+ HRESULT GetString([in] ULONG32 cchString, [out] ULONG32 *pcchString,
+ [out] WCHAR szString[]);
+}
+
+[
+ object,
+ local,
+ uuid(18AD3D6E-B7D2-11d2-BD04-0000F80849BD),
+ pointer_default(unique)
+]
+interface ICorDebugObjectValue : ICorDebugValue
+{
+ HRESULT GetClass([out] ICorDebugClass **ppClass);
+ HRESULT GetFieldValue([in] ICorDebugClass *pClass, [in] mdFieldDef fieldDef,
+ [out] ICorDebugValue **ppValue);
+ HRESULT GetVirtualMethod([in] mdMemberRef memberRef, [out] ICorDebugFunction **ppFunction);
+ HRESULT GetContext([out] ICorDebugContext **ppContext);
+ HRESULT IsValueClass([out] BOOL *pbIsValueClass);
+ HRESULT GetManagedCopy([out] IUnknown **ppObject);
+ HRESULT SetFromManagedCopy([in] IUnknown *pObject);
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCB00-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugContext : ICorDebugObjectValue
+{
+};
+
+[
+ object,
+ local,
+ uuid(CC7BCAF4-8A68-11d2-983C-0000F808342D),
+ pointer_default(unique)
+]
+interface ICorDebugCode : IUnknown
+{
+ HRESULT IsIL([out] BOOL *pbIL);
+ HRESULT GetFunction([out] ICorDebugFunction **ppFunction);
+ HRESULT GetAddress([out] CORDB_ADDRESS *pStart);
+ HRESULT GetSize([out] ULONG32 *pcBytes);
+ HRESULT CreateBreakpoint([in] ULONG32 offset, [out] ICorDebugFunctionBreakpoint **ppBreakpoint);
+ HRESULT GetCode([in] ULONG32 startOffset, [in] ULONG32 endOffset,
+ [in] ULONG32 cBufferAlloc, [out] BYTE buffer[], [out] ULONG32 *pcBufferSize);
+ HRESULT GetVersionNumber([out] ULONG32 *nVersion);
+ HRESULT GetILToNativeMapping([in] ULONG32 cMap, [out] ULONG32 *pcMap,
+ [out] COR_DEBUG_IL_TO_NATIVE_MAP map[]);
+ HRESULT GetEnCRemapSequencePoints([in] ULONG32 cMap,[out] ULONG32 *pcMap,
+ [out] ULONG32 offsets[]);
+};
+
+[
+ object,
+ local,
+ uuid(CC726F2F-1DB7-459b-B0EC-05F01D841B42),
+ pointer_default(unique)
+]
+interface ICorDebugMDA : IUnknown
+{
+ HRESULT GetName([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
+
+ HRESULT GetDescription([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
+
+ HRESULT GetXML([in] ULONG32 cchName, [out] ULONG32 * pcchName, [out] WCHAR szName[]);
+
+ typedef enum CorDebugMDAFlags
+ {
+ MDA_FLAG_SLIP = 0x2
+ } CorDebugMDAFlags;
+
+ HRESULT GetFlags([in] CorDebugMDAFlags * pFlags);
+
+ HRESULT GetOSThreadId([out] DWORD * pOsTid);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h
new file mode 100644
index 00000000..a7e17c18
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/corerror.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2008 James Hawkins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CORERROR_H
+#define __WINE_CORERROR_H
+
+#include <winerror.h>
+
+#ifndef FACILITY_URT
+#define FACILITY_URT 0x13
+#endif
+
+#ifndef EMAKEHR
+#define SMAKEHR(val) MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_URT, val)
+#define EMAKEHR(val) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_URT, val)
+#endif
+
+#define COR_E_ARGUMENT E_INVALIDARG
+#define COR_E_INVALIDCAST E_NOINTERFACE
+#define COR_E_NULLREFERENCE E_POINTER
+#define COR_E_OUTOFMEMORY E_OUTOFMEMORY
+#define COR_E_UNAUTHORIZEDACCESS E_ACCESSDENIED
+
+#define COR_E_ARITHMETIC HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW)
+#define COR_E_STACKOVERFLOW HRESULT_FROM_WIN32(ERROR_STACK_OVERFLOW)
+#define COR_E_ENDOFSTREAM HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)
+#define COR_E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
+#define COR_E_BAD_PATHNAME HRESULT_FROM_WIN32(ERROR_BAD_PATHNAME)
+#define COR_E_DIRECTORYNOTFOUND HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND)
+#define COR_E_PATHTOOLONG HRESULT_FROM_WIN32(ERROR_FILENAME_EXCED_RANGE)
+
+#define COR_E_AMBIGUOUSMATCH _HRESULT_TYPEDEF_(0x8000211D)
+#define COR_E_TARGETPARAMCOUNT _HRESULT_TYPEDEF_(0x8002000E)
+#define COR_E_DIVIDEBYZERO _HRESULT_TYPEDEF_(0x80020012)
+#define COR_E_BADIMAGEFORMAT _HRESULT_TYPEDEF_(0x8007000B)
+
+#define COR_E_ASSEMBLYEXPECTED EMAKEHR(0x1018)
+#define COR_E_TYPEUNLOADED EMAKEHR(0x1013)
+#define COR_E_EXCEPTION EMAKEHR(0x1500)
+#define COR_E_SYSTEM EMAKEHR(0x1501)
+#define COR_E_ARGUMENTOUTOFRANGE EMAKEHR(0x1502)
+#define COR_E_ARRAYTYPEMISMATCH EMAKEHR(0x1503)
+#define COR_E_CONTEXTMARSHAL EMAKEHR(0x1504)
+#define COR_E_TIMEOUT EMAKEHR(0x1505)
+#define COR_E_EXECUTIONENGINE EMAKEHR(0x1506)
+#define COR_E_FIELDACCESS EMAKEHR(0x1507)
+#define COR_E_INDEXOUTOFRANGE EMAKEHR(0x1508)
+#define COR_E_INVALIDOPERATION EMAKEHR(0x1509)
+#define COR_E_SECURITY EMAKEHR(0x150A)
+#define COR_E_REMOTING EMAKEHR(0x150B)
+#define COR_E_SERIALIZATION EMAKEHR(0x150C)
+#define COR_E_VERIFICATION EMAKEHR(0x150D)
+#define COR_E_SERVER EMAKEHR(0x150E)
+#define COR_E_SERVICEDCOMPONENT EMAKEHR(0x150F)
+#define COR_E_METHODACCESS EMAKEHR(0x1510)
+#define COR_E_MISSINGFIELD EMAKEHR(0x1511)
+#define COR_E_MISSINGMEMBER EMAKEHR(0x1512)
+#define COR_E_MISSINGMETHOD EMAKEHR(0x1513)
+#define COR_E_MULTICASTNOTSUPPORTED EMAKEHR(0x1514)
+#define COR_E_NOTSUPPORTED EMAKEHR(0x1515)
+#define COR_E_OVERFLOW EMAKEHR(0x1516)
+#define COR_E_RANK EMAKEHR(0x1517)
+#define COR_E_SYNCHRONIZATIONLOCK EMAKEHR(0x1518)
+#define COR_E_THREADINTERRUPTED EMAKEHR(0x1519)
+#define COR_E_MEMBERACCESS EMAKEHR(0x151A)
+#define COR_E_THREADSTATE EMAKEHR(0x1520)
+#define COR_E_THREADSTOP EMAKEHR(0x1521)
+#define COR_E_TYPELOAD EMAKEHR(0x1522)
+#define COR_E_ENTRYPOINTNOTFOUND EMAKEHR(0x1523)
+#define COR_E_DLLNOTFOUND EMAKEHR(0x1524)
+#define COR_E_THREADSTART EMAKEHR(0x1525)
+#define COR_E_INVALIDCOMOBJECT EMAKEHR(0x1527)
+#define COR_E_NOTFINITENUMBER EMAKEHR(0x1528)
+#define COR_E_DUPLICATEWAITOBJECT EMAKEHR(0x1529)
+#define COR_E_SEMAPHOREFULL EMAKEHR(0x152B)
+#define COR_E_WAITHANDLECANNOTBEOPENED EMAKEHR(0x152C)
+#define COR_E_ABANDONEDMUTEX EMAKEHR(0x152D)
+#define COR_E_INVALIDOLEVARIANTTYPE EMAKEHR(0x1531)
+#define COR_E_MISSINGMANIFESTRESOURCE EMAKEHR(0x1532)
+#define COR_E_SAFEARRAYTYPEMISMATCH EMAKEHR(0x1533)
+#define COR_E_TYPEINITIALIZATION EMAKEHR(0x1534)
+#define COR_E_MARSHALDIRECTIVE EMAKEHR(0x1535)
+#define COR_E_MISSINGSATELLITEASSEMBLY EMAKEHR(0x1536)
+#define COR_E_FORMAT EMAKEHR(0x1537)
+#define COR_E_SAFEARRAYRANKMISMATCH EMAKEHR(0x1538)
+#define COR_E_PLATFORMNOTSUPPORTED EMAKEHR(0x1539)
+#define COR_E_INVALIDPROGRAM EMAKEHR(0x153A)
+#define COR_E_OPERATIONCANCELED EMAKEHR(0x153B)
+#define COR_E_INSUFFICIENTMEMORY EMAKEHR(0x153D)
+#define COR_E_RUNTIMEWRAPPED EMAKEHR(0x153E)
+#define COR_E_DEVICESNOTSUPPORTED EMAKEHR(0x1540)
+#define COR_E_DATAMISALIGNED EMAKEHR(0x1541)
+#define COR_E_KEYNOTFOUND EMAKEHR(0x1577)
+#define COR_E_APPLICATION EMAKEHR(0x1600)
+#define COR_E_INVALIDFILTERCRITERIA EMAKEHR(0x1601)
+#define COR_E_REFLECTIONTYPELOAD EMAKEHR(0x1602)
+#define COR_E_TARGET EMAKEHR(0x1603)
+#define COR_E_TARGETINVOCATION EMAKEHR(0x1604)
+#define COR_E_CUSTOMATTRIBUTEFORMAT EMAKEHR(0x1605)
+#define COR_E_IO EMAKEHR(0x1620)
+#define COR_E_FILELOAD EMAKEHR(0x1621)
+#define COR_E_OBJECTDISPOSED EMAKEHR(0x1622)
+#define COR_E_FAILFAST EMAKEHR(0x1623)
+#define COR_E_HOSTPROTECTION EMAKEHR(0x1640)
+#define COR_E_ILLEGAL_REENTRANCY EMAKEHR(0x1641)
+
+#define FUSION_E_PRIVATE_ASM_DISALLOWED EMAKEHR(0x1044)
+#define FUSION_E_INVALID_NAME EMAKEHR(0x1047)
+
+#define CLDB_E_FILE_OLDVER EMAKEHR(0x1107)
+
+#define CLR_E_SHIM_RUNTIME EMAKEHR(0x1700)
+#define CLR_E_SHIM_RUNTIMEEXPORT EMAKEHR(0x1701)
+
+#endif /* __WINE_CORERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h
new file mode 100644
index 00000000..b4e6ce5a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/corhdr.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2008 James Hawkins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CORHDR_H
+#define __WINE_CORHDR_H
+
+typedef enum CorTokenType
+{
+ mdtModule = 0x00000000,
+ mdtTypeRef = 0x01000000,
+ mdtTypeDef = 0x02000000,
+ mdtFieldDef = 0x04000000,
+ mdtMethodDef = 0x06000000,
+ mdtParamDef = 0x08000000,
+ mdtInterfaceImpl = 0x09000000,
+ mdtMemberRef = 0x0a000000,
+ mdtCustomAttribute = 0x0c000000,
+ mdtPermission = 0x0e000000,
+ mdtSignature = 0x11000000,
+ mdtEvent = 0x14000000,
+ mdtProperty = 0x17000000,
+ mdtModuleRef = 0x1a000000,
+ mdtTypeSpec = 0x1b000000,
+ mdtAssembly = 0x20000000,
+ mdtAssemblyRef = 0x23000000,
+ mdtFile = 0x26000000,
+ mdtExportedType = 0x27000000,
+ mdtManifestResource = 0x28000000,
+ mdtGenericParam = 0x2a000000,
+ mdtMethodSpec = 0x2b000000,
+ mdtGenericParamConstraint = 0x2c000000,
+ mdtString = 0x70000000,
+ mdtName = 0x71000000,
+ mdtBaseType = 0x72000000,
+} CorTokenType;
+
+typedef enum CorElementType
+{
+ ELEMENT_TYPE_END = 0x00,
+ ELEMENT_TYPE_VOID = 0x01,
+ ELEMENT_TYPE_BOOLEAN = 0x02,
+ ELEMENT_TYPE_CHAR = 0x03,
+ ELEMENT_TYPE_I1 = 0x04,
+ ELEMENT_TYPE_U1 = 0x05,
+ ELEMENT_TYPE_I2 = 0x06,
+ ELEMENT_TYPE_U2 = 0x07,
+ ELEMENT_TYPE_I4 = 0x08,
+ ELEMENT_TYPE_U4 = 0x09,
+ ELEMENT_TYPE_I8 = 0x0a,
+ ELEMENT_TYPE_U8 = 0x0b,
+ ELEMENT_TYPE_R4 = 0x0c,
+ ELEMENT_TYPE_R8 = 0x0d,
+ ELEMENT_TYPE_STRING = 0x0e,
+ ELEMENT_TYPE_PTR = 0x0f,
+ ELEMENT_TYPE_BYREF = 0x10,
+ ELEMENT_TYPE_VALUETYPE = 0x11,
+ ELEMENT_TYPE_CLASS = 0x12,
+ ELEMENT_TYPE_VAR = 0x13,
+ ELEMENT_TYPE_ARRAY = 0x14,
+ ELEMENT_TYPE_GENERICINST = 0x15,
+ ELEMENT_TYPE_TYPEDBYREF = 0x16,
+ ELEMENT_TYPE_I = 0x18,
+ ELEMENT_TYPE_U = 0x19,
+ ELEMENT_TYPE_FNPTR = 0x1b,
+ ELEMENT_TYPE_OBJECT = 0x1c,
+ ELEMENT_TYPE_SZARRAY = 0x1d,
+ ELEMENT_TYPE_MVAR = 0x1e,
+ ELEMENT_TYPE_CMOD_REQD = 0x1f,
+ ELEMENT_TYPE_CMOD_OPT = 0x20,
+ ELEMENT_TYPE_INTERNAL = 0x21,
+ ELEMENT_TYPE_MAX = 0x22,
+ ELEMENT_TYPE_MODIFIER = 0x40,
+ ELEMENT_TYPE_SENTINEL = 0x01 | ELEMENT_TYPE_MODIFIER,
+ ELEMENT_TYPE_PINNED = 0x05 | ELEMENT_TYPE_MODIFIER,
+ ELEMENT_TYPE_R4_HFA = 0x06 | ELEMENT_TYPE_MODIFIER,
+ ELEMENT_TYPE_R8_HFA = 0x07 | ELEMENT_TYPE_MODIFIER,
+
+} CorElementType;
+
+#define RidToToken(rid,tktype) ((rid) |= (tktype))
+#define TokenFromRid(rid,tktype) ((rid) | (tktype))
+#define RidFromToken(tk) ((RID)((tk) & 0x00ffffff))
+#define TypeFromToken(tk) ((ULONG32)((tk) & 0xff000000))
+#define IsNilToken(tk) ((RidFromToken(tk)) == 0)
+
+typedef LPVOID mdScope;
+typedef ULONG32 mdToken;
+
+typedef mdToken mdModule;
+typedef mdToken mdTypeRef;
+typedef mdToken mdTypeDef;
+typedef mdToken mdFieldDef;
+typedef mdToken mdMethodDef;
+typedef mdToken mdParamDef;
+typedef mdToken mdInterfaceImpl;
+typedef mdToken mdMemberRef;
+typedef mdToken mdCustomAttribute;
+typedef mdToken mdPermission;
+typedef mdToken mdSignature;
+typedef mdToken mdEvent;
+typedef mdToken mdProperty;
+typedef mdToken mdModuleRef;
+typedef mdToken mdAssembly;
+typedef mdToken mdAssemblyRef;
+typedef mdToken mdFile;
+typedef mdToken mdExportedType;
+typedef mdToken mdManifestResource;
+typedef mdToken mdTypeSpec;
+typedef mdToken mdGenericParam;
+typedef mdToken mdMethodSpec;
+typedef mdToken mdGenericParamConstraint;
+typedef mdToken mdString;
+typedef mdToken mdCPToken;
+
+#endif /* __WINE_CORHDR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h
new file mode 100644
index 00000000..5c0bca9c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cpl.h
@@ -0,0 +1,98 @@
+/*
+ * Control panel definitions
+ *
+ * Copyright (C) 2001 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_CPL
+#define _INC_CPL
+
+#include <pshpack1.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define WM_CPL_LAUNCH (WM_USER+1000)
+#define WM_CPL_LAUNCHED (WM_USER+1001)
+
+typedef LONG (APIENTRY *APPLET_PROC)(HWND hwndCpl, UINT msg, LPARAM lParam1, LPARAM lParam2);
+
+typedef struct tagCPLINFO {
+ int idIcon;
+ int idName;
+ int idInfo;
+ LONG_PTR lData;
+} CPLINFO, *LPCPLINFO;
+
+typedef struct tagNEWCPLINFOA
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwHelpContext;
+ LONG_PTR lData;
+ HICON hIcon;
+ CHAR szName[32];
+ CHAR szInfo[64];
+ CHAR szHelpFile[128];
+} NEWCPLINFOA, *LPNEWCPLINFOA;
+
+typedef struct tagNEWCPLINFOW
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwHelpContext;
+ LONG_PTR lData;
+ HICON hIcon;
+ WCHAR szName[32];
+ WCHAR szInfo[64];
+ WCHAR szHelpFile[128];
+} NEWCPLINFOW, *LPNEWCPLINFOW;
+
+DECL_WINELIB_TYPE_AW(NEWCPLINFO)
+DECL_WINELIB_TYPE_AW(LPNEWCPLINFO)
+
+#define CPL_DYNAMIC_RES 0
+#define CPL_INIT 1
+#define CPL_GETCOUNT 2
+#define CPL_INQUIRE 3
+#define CPL_SELECT 4
+#define CPL_DBLCLK 5
+#define CPL_STOP 6
+#define CPL_EXIT 7
+#define CPL_NEWINQUIRE 8
+#define CPL_STARTWPARMSA 9
+#define CPL_STARTWPARMSW 10
+#define CPL_STARTWPARMS WINELIB_NAME_AW(CPL_STARTWPARMS)
+#define CPL_SETUP 200
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* _INC_CPL */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl
new file mode 100644
index 00000000..f20d7be8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/crtrow.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733ab2-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ICreateRow : IUnknown
+{
+ [local]
+ HRESULT CreateRow([in, unique] IUnknown *pUnkOuter,
+ [in] LPCOLESTR pwszURL,
+ [in] DBBINDURLFLAG dwBindURLFlags,
+ [in] REFGUID rguid,
+ [in] REFIID riid,
+ [in, unique] IAuthenticate *pAuthenticate,
+ [in, out, unique] DBIMPLICITSESSION *pImplSession,
+ [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+ [out, annotation("__deref_opt_out_opt")] LPOLESTR *ppwszNewURL,
+ [out, iid_is(riid)] IUnknown **ppUnk);
+
+ [call_as(CreateRow)]
+ HRESULT RemoteCreateRow([in] IUnknown *pUnkOuter,
+ [in] LPCOLESTR pwszURL,
+ [in] DBBINDURLFLAG dwBindURLFlags,
+ [in] REFGUID rguid,
+ [in] REFIID riid,
+ [in] IAuthenticate *pAuthenticate,
+ [in] IUnknown *pSessionUnkOuter,
+ [in, unique] IID *piid,
+ [in, out, unique, iid_is(piid)] IUnknown **ppSession,
+ [in, out, unique] DBBINDURLSTATUS *pdwBindStatus,
+ [in, out, unique] LPOLESTR *ppwszNewURL,
+ [out, iid_is(riid)] IUnknown **ppUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h
new file mode 100644
index 00000000..9a93e695
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptdlg.h
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2008 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __CRYPTDLG_H__
+#define __CRYPTDLG_H__
+
+#include <prsht.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CRYPTDLG_FLAGS_MASK 0xff000000
+#define CRYPTDLG_REVOCATION_DEFAULT 0x00000000
+#define CRYPTDLG_REVOCATION_ONLINE 0x80000000
+#define CRYPTDLG_REVOCATION_CACHE 0x40000000
+#define CRYPTDLG_REVOCATION_NONE 0x20000000
+
+#define CRYPTDLG_POLICY_MASK 0x0000ffff
+#define POLICY_IGNORE_NON_CRITICAL_BC 0x00000001
+
+#define CRYPTDLG_ACTION_MASK 0xffff0000
+#define ACTION_REVOCATION_DEFAULT_ONLINE 0x00010000
+#define ACTION_REVOCATION_DEFAULT_CACHE 0x00020000
+
+typedef BOOL (WINAPI *PFNCMFILTERPROC)(PCCERT_CONTEXT, DWORD, DWORD, DWORD);
+
+#define CERT_DISPWELL_SELECT 1
+#define CERT_DISPWELL_TRUST_CA_CERT 2
+#define CERT_DISPWELL_TRUST_LEAF_CERT 3
+#define CERT_DISPWELL_TRUST_ADD_CA_CERT 4
+#define CERT_DISPWELL_TRUST_ADD_LEAF_CERT 5
+#define CERT_DISPWELL_DISTRUST_CA_CERT 6
+#define CERT_DISPWELL_DISTRUST_LEAF_CERT 7
+#define CERT_DISPWELL_DISTRUST_ADD_CA_CERT 8
+#define CERT_DISPWELL_DISTRUST_ADD_LEAF_CERT 9
+
+typedef UINT (WINAPI *PFNCMHOOKPROC)(HWND, UINT, WPARAM, LPARAM);
+
+#define CSS_SELECTCERT_MASK 0x00ffffff
+#define CSS_HIDE_PROPERTIES 0x00000001
+#define CSS_ENABLEHOOK 0x00000002
+#define CSS_ALLOWMULTISELECT 0x00000004
+#define CSS_SHOW_HELP 0x00000010
+#define CSS_ENABLETEMPLATE 0x00000020
+#define CSS_ENABLETEMPLATEHANDLE 0x00000040
+
+#define SELCERT_OK IDOK
+#define SELCERT_CANCEL IDCANCEL
+#define SELCERT_PROPERTIES 100
+#define SELCERT_FINEPRINT 101
+#define SELCERT_CERTLIST 102
+#define SELCERT_HELP IDHELP
+#define SELCERT_ISSUED_TO 103
+#define SELCERT_VALIDITY 104
+#define SELCERT_ALGORITHM 105
+#define SELCERT_SERIAL_NUM 106
+#define SELCERT_THUMBPRINT 107
+
+typedef struct tagCSSA
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ LPCSTR pTemplateName;
+ DWORD dwFlags;
+ LPCSTR szTitle;
+ DWORD cCertStore;
+ HCERTSTORE *arrayCertStore;
+ LPCSTR szPurposeOid;
+ DWORD cCertContext;
+ PCCERT_CONTEXT *arrayCertContext;
+ DWORD lCustData;
+ PFNCMHOOKPROC pfnHook;
+ PFNCMFILTERPROC pfnFilter;
+ LPCSTR szHelpFileName;
+ DWORD dwHelpId;
+ HCRYPTPROV hprov;
+} CERT_SELECT_STRUCT_A, *PCERT_SELECT_STRUCT_A;
+
+typedef struct tagCSSW
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ LPCWSTR pTemplateName;
+ DWORD dwFlags;
+ LPCWSTR szTitle;
+ DWORD cCertStore;
+ HCERTSTORE *arrayCertStore;
+ LPCSTR szPurposeOid;
+ DWORD cCertContext;
+ PCCERT_CONTEXT *arrayCertContext;
+ DWORD lCustData;
+ PFNCMHOOKPROC pfnHook;
+ PFNCMFILTERPROC pfnFilter;
+ LPCWSTR szHelpFileName;
+ DWORD dwHelpId;
+ HCRYPTPROV hprov;
+} CERT_SELECT_STRUCT_W, *PCERT_SELECT_STRUCT_W;
+
+#define CERT_SELECT_STRUCT WINELIB_NAME_AW(CERT_SELECT_STRUCT_)
+
+BOOL WINAPI CertSelectCertificateA(PCERT_SELECT_STRUCT_A pCertSelectInfo);
+BOOL WINAPI CertSelectCertificateW(PCERT_SELECT_STRUCT_W pCertSelectInfo);
+#define CertSelectCertificate WINELIB_NAME_AW(CertSelectCertificate)
+
+#define CM_VIEWFLAGS_MASK 0x00ffffff
+#define CM_ENABLEHOOK 0x00000001
+#define CM_SHOW_HELP 0x00000002
+#define CM_SHOW_HELPICON 0x00000004
+#define CM_ENABLETEMPLATE 0x00000008
+#define CM_HIDE_ADVANCEPAGE 0x00000010
+#define CM_HIDE_TRUSTPAGE 0x00000020
+#define CM_NO_NAMECHANGE 0x00000040
+#define CM_NO_EDITTRUST 0x00000080
+#define CM_HIDE_DETAILPAGE 0x00000100
+#define CM_ADD_CERT_STORES 0x00000200
+#define CERTVIEW_CRYPTUI_LPARAM 0x00800000
+
+typedef struct tagCERT_VIEWPROPERTIES_STRUCT_A
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ DWORD dwFlags;
+ LPCSTR szTitle;
+ PCCERT_CONTEXT pCertContext;
+ LPSTR *arrayPurposes;
+ DWORD cArrayPurposes;
+ DWORD cRootStores;
+ HCERTSTORE *rghstoreRoots;
+ DWORD cStores;
+ HCERTSTORE *rghstoreCAs;
+ DWORD cTrustStores;
+ HCERTSTORE *rghstoreTrust;
+ HCRYPTPROV hprov;
+ DWORD lCustData;
+ DWORD dwPad;
+ LPCSTR szHelpFileName;
+ DWORD dwHelpId;
+ DWORD nStartPage;
+ DWORD cArrayPropSheetPages;
+ /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we
+ * don't allow in our own headers. It's probably wrong, but we're not
+ * compatible.
+ */
+ PROPSHEETPAGEA *arrayPropSheetPages;
+} CERT_VIEWPROPERTIES_STRUCT_A, *PCERT_VIEWPROPERTIES_STRUCT_A;
+
+typedef struct tagCERT_VIEWPROPERTIES_STRUCT_W
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ DWORD dwFlags;
+ LPCWSTR szTitle;
+ PCCERT_CONTEXT pCertContext;
+ LPSTR *arrayPurposes;
+ DWORD cArrayPurposes;
+ DWORD cRootStores;
+ HCERTSTORE *rghstoreRoots;
+ DWORD cStores;
+ HCERTSTORE *rghstoreCAs;
+ DWORD cTrustStores;
+ HCERTSTORE *rghstoreTrust;
+ HCRYPTPROV hprov;
+ DWORD lCustData;
+ DWORD dwPad;
+ LPCWSTR szHelpFileName;
+ DWORD dwHelpId;
+ DWORD nStartPage;
+ DWORD cArrayPropSheetPages;
+ /* FIXME: PSDK declares arrayPropSheetPages as a PROPSHEETPAGE *, which we
+ * don't allow in our own headers. It's probably wrong, but we're not
+ * compatible.
+ */
+ PROPSHEETPAGEW *arrayPropSheetPages;
+} CERT_VIEWPROPERTIES_STRUCT_W, *PCERT_VIEWPROPERTIES_STRUCT_W;
+
+#define CERT_VIEWPROPERTIES_STRUCT WINELIB_NAME_AW(CERT_VIEWPROPERTIES_STRUCT_)
+#define PCERT_VIEWPROPERTIES_STRUCT \
+ WINELIB_NAME_AW(PCERT_VIEWPROPERTIES_STRUCT_)
+
+BOOL WINAPI CertViewPropertiesA(PCERT_VIEWPROPERTIES_STRUCT_A pCertViewInfo);
+BOOL WINAPI CertViewPropertiesW(PCERT_VIEWPROPERTIES_STRUCT_W pCertViewInfo);
+#define CertViewProperties WINELIB_NAME_AW(CertViewProperties)
+
+#define CERT_FILTER_OP_EXISTS 1
+#define CERT_FILTER_OP_NOT_EXISTS 2
+#define CERT_FILTER_OP_EQUALITY 3
+
+typedef struct tagCMOID
+{
+ LPCSTR szExtensionOID;
+ DWORD dwTestOperation;
+ LPBYTE pbTestData;
+ DWORD cbTestData;
+} CERT_FILTER_EXTENSION_MATCH;
+
+#define CERT_FILTER_INCLUDE_V1_CERTS 0x0001
+#define CERT_FILTER_VALID_TIME_RANGE 0x0002
+#define CERT_FILTER_VALID_SIGNATURE 0x0004
+#define CERT_FILTER_LEAF_CERTS_ONLY 0x0008
+#define CERT_FILTER_ISSUER_CERTS_ONLY 0x0010
+#define CERT_FILTER_KEY_EXISTS 0x0020
+
+typedef struct tagCMFLTR
+{
+ DWORD dwSize;
+ DWORD cExtensionChecks;
+ CERT_FILTER_EXTENSION_MATCH *arrayExtensionChecks;
+ DWORD dwCheckingFlags;
+} CERT_FILTER_DATA;
+
+DWORD WINAPI GetFriendlyNameOfCertA(PCCERT_CONTEXT pccert, LPSTR pchBuffer,
+ DWORD cchBuffer);
+DWORD WINAPI GetFriendlyNameOfCertW(PCCERT_CONTEXT pccert, LPWSTR pchBuffer,
+ DWORD cchBuffer);
+#define GetFriendlyNameOfCert WINELIB_NAME_AW(GetFriendlyNameOfCert)
+
+#define CERT_CERTIFICATE_ACTION_VERIFY \
+ { 0x7801ebd0, 0xcf4b, 0x11d0, { 0x85,0x1f,0x00,0x60,0x97,0x93,0x87,0xea }}
+#define szCERT_CERTIFICATE_ACTION_VERIFY \
+ "{7801ebd0-cf4b-11d0-851f-0060979387ea}"
+
+typedef HRESULT (WINAPI *PFNTRUSTHELPER)(PCCERT_CONTEXT, DWORD, BOOL, LPBYTE);
+
+#define CERT_VALIDITY_MASK_VALIDITY 0x0000ffff
+#define CERT_VALIDITY_BEFORE_START 0x00000001
+#define CERT_VALIDITY_AFTER_END 0x00000002
+#define CERT_VALIDITY_SIGNATURE_FAILS 0x00000004
+#define CERT_VALIDITY_CERTIFICATE_REVOKED 0x00000008
+#define CERT_VALIDITY_KEY_USAGE_EXT_FAILURE 0x00000010
+#define CERT_VALIDITY_EXTENDED_USAGE_FAILURE 0x00000020
+#define CERT_VALIDITY_NAME_CONSTRAINTS_FAILURE 0x00000040
+#define CERT_VALIDITY_UNKNOWN_CRITICAL_EXTENSION 0x00000080
+#define CERT_VALIDITY_ISSUER_INVALID 0x00000100
+#define CERT_VALIDITY_OTHER_EXTENSION_FAILURE 0x00000200
+#define CERT_VALIDITY_PERIOD_NESTING_FAILURE 0x00000400
+#define CERT_VALIDITY_OTHER_ERROR 0x00000800
+
+#define CERT_VALIDITY_MASK_TRUST 0xffff0000
+#define CERT_VALIDITY_EXPLICITLY_DISTRUSTED 0x01000000
+#define CERT_VALIDITY_ISSUER_DISTRUST 0x02000000
+#define CERT_VALIDITY_NO_ISSUER_CERT_FOUND 0x10000000
+#define CERT_VALIDITY_NO_CRL_FOUND 0x20000000
+#define CERT_VALIDITY_CRL_OUT_OF_DATE 0x40000000
+#define CERT_VALIDITY_NO_TRUST_DATA 0x80000000
+
+#define CERT_TRUST_MASK 0x00ffffff
+#define CERT_TRUST_DO_FULL_SEARCH 0x00000001
+#define CERT_TRUST_PERMIT_MISSING_CRLS 0x00000002
+#define CERT_TRUST_DO_FULL_TRUST 0x00000005
+#define CERT_TRUST_ADD_CERT_STORES CM_ADD_CERT_STORES
+
+typedef struct _CERT_VERIFY_CERTIFICATE_TRUST
+{
+ DWORD cbSize;
+ PCCERT_CONTEXT pccert;
+ DWORD dwFlags;
+ DWORD dwIgnoreErr;
+ DWORD *pdwErrors;
+ LPSTR pszUsageOid;
+ HCRYPTPROV hprov;
+ DWORD cRootStores;
+ HCERTSTORE *rghstoreRoots;
+ DWORD cStores;
+ HCERTSTORE *rghstoreCAs;
+ DWORD cTrustStores;
+ HCERTSTORE *rghstoreTrust;
+ DWORD lCustData;
+ PFNTRUSTHELPER pfnTrustHelper;
+ DWORD *pcchain;
+ PCCERT_CONTEXT **prgChain;
+ DWORD **prgdwErrors;
+ DATA_BLOB **prgpbTrustInfo;
+} CERT_VERIFY_CERTIFICATE_TRUST, *PCERT_VERIFY_CERTIFICATE_TRUST;
+
+#define CTL_MODIFY_REQUEST_ADD_NOT_TRUSTED 1
+#define CTL_MODIFY_REQUEST_REMOVE 2
+#define CTL_MODIFY_REQUEST_ADD_TRUSTED 3
+
+typedef struct _CTL_MODIFY_REQUEST
+{
+ PCCERT_CONTEXT pccert;
+ DWORD dwOperation;
+ DWORD dwError;
+} CTL_MODIFY_REQUEST, *PCTL_MODIFY_REQUEST;
+
+HRESULT WINAPI CertModifyCertificatesToTrust(int cCertStore,
+ PCTL_MODIFY_REQUEST rgCerts, LPCSTR szPurpose, HWND hwnd,
+ HCERTSTORE hcertstoreTrust);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h
new file mode 100644
index 00000000..9426dc04
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cryptuiapi.h
@@ -0,0 +1,447 @@
+/*
+ * Copyright (C) 2008 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __CRYPTUIAPI_H__
+#define __CRYPTUIAPI_H__
+
+#include <wintrust.h>
+#include <wincrypt.h>
+#include <prsht.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <pshpack8.h>
+
+BOOL WINAPI CryptUIDlgViewContext(DWORD dwContextType, LPVOID pvContext,
+ HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, LPVOID pvReserved);
+
+/* Values for dwDontUseColumn */
+#define CRYPTUI_SELECT_ISSUEDTO_COLUMN 0x00000001
+#define CRYPTUI_SELECT_ISSUEDBY_COLUMN 0x00000002
+#define CRYPTUI_SELECT_INTENDEDUSE_COLUMN 0x00000004
+#define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN 0x00000008
+#define CRYPTUI_SELECT_LOCATION_COLUMN 0x00000010
+#define CRYPTUI_SELECT_EXPIRATION_COLUMN 0x00000020
+
+PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore(
+ HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString,
+ DWORD dwDontUseColumn, DWORD dwFlags, LPVOID pvReserved);
+
+/* Values for CRYPTUI_CERT_MGR_STRUCT's dwFlags */
+#define CRYPTUI_CERT_MGR_PUBLISHER_TAB 0x00000004
+#define CRYPTUI_CERT_MGR_TAB_MASK 0x0000000f
+#define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG 0x00008000
+
+typedef struct _CRYPTUI_CERT_MGR_STRUCT
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCWSTR pwszTitle;
+ LPCSTR pszInitUsageOID;
+} CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;
+typedef const struct _CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT;
+
+BOOL WINAPI CryptUIDlgCertMgr(PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr);
+
+typedef BOOL (WINAPI *PFNCFILTERPROC)(PCCERT_CONTEXT pCertContext,
+ BOOL *pfInitialSelectedCert, void *pvCallbackData);
+
+typedef struct tagCRYPTUI_INITDIALOG_STRUCT
+{
+ LPARAM lParam;
+ PCCERT_CONTEXT pCertContext;
+} CRYPTUI_INITDIALOG_STRUCT, *PCRYPTUI_INITDIALOG_STRUCT;
+
+/* Values for CRYPTUI_VIEWCERTIFICATE_STRUCT's dwFlags */
+#define CRYPTUI_HIDE_HIERARCHYPAGE 0x00000001
+#define CRYPTUI_HIDE_DETAILPAGE 0x00000002
+#define CRYPTUI_DISABLE_EDITPROPERTIES 0x00000004
+#define CRYPTUI_ENABLE_EDITPROPERTIES 0x00000008
+#define CRYPTUI_DISABLE_ADDTOSTORE 0x00000010
+#define CRYPTUI_ENABLE_ADDTOSTORE 0x00000020
+#define CRYPTUI_ACCEPT_DECLINE_STYLE 0x00000040
+#define CRYPTUI_IGNORE_UNTRUSTED_ROOT 0x00000080
+#define CRYPTUI_DONT_OPEN_STORES 0x00000100
+#define CRYPTUI_ONLY_OPEN_ROOT_STORE 0x00000200
+#define CRYPTUI_WARN_UNTRUSTED_ROOT 0x00000400
+#define CRYPTUI_ENABLE_REVOCATION_CHECKING 0x00000800
+#define CRYPTUI_WARN_REMOTE_TRUST 0x00001000
+#define CRYPTUI_DISABLE_EXPORT 0x00002000
+#define CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT 0x00004000
+#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN 0x00008000
+#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT CRYPTUI_ENABLE_REVOCATION_CHECKING
+#define CRYPTUI_DISABLE_HTMLLINK 0x00010000
+#define CRYPTUI_DISABLE_ISSUERSTATEMENT 0x00020000
+
+typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCSTR szTitle;
+ PCCERT_CONTEXT pCertContext;
+ LPCSTR *rgszPurposes;
+ DWORD cPurposes;
+ union {
+ CRYPT_PROVIDER_DATA const *pCryptProviderData;
+ HANDLE hWVTStateData;
+ } DUMMYUNIONNAME;
+ BOOL fpCryptProviderDataTrustedUsage;
+ DWORD idxSigner;
+ DWORD idxCert;
+ BOOL fCounterSigner;
+ DWORD idxCounterSigner;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+ DWORD cPropSheetPages;
+ LPCPROPSHEETPAGEA rgPropSheetPages;
+ DWORD nStartPage;
+} CRYPTUI_VIEWCERTIFICATE_STRUCTA, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA;
+typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTA *PCCRYPTUI_VIEWCERTIFICATE_STRUCTA;
+
+typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCWSTR szTitle;
+ PCCERT_CONTEXT pCertContext;
+ LPCSTR *rgszPurposes;
+ DWORD cPurposes;
+ union {
+ CRYPT_PROVIDER_DATA const *pCryptProviderData;
+ HANDLE hWVTStateData;
+ } DUMMYUNIONNAME;
+ BOOL fpCryptProviderDataTrustedUsage;
+ DWORD idxSigner;
+ DWORD idxCert;
+ BOOL fCounterSigner;
+ DWORD idxCounterSigner;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+ DWORD cPropSheetPages;
+ LPCPROPSHEETPAGEW rgPropSheetPages;
+ DWORD nStartPage;
+} CRYPTUI_VIEWCERTIFICATE_STRUCTW, *PCRYPTUI_VIEWCERTIFICATE_STRUCTW;
+typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTW *PCCRYPTUI_VIEWCERTIFICATE_STRUCTW;
+
+#define CRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(CRYPTUI_VIEWCERTIFICATE_STRUCT)
+#define PCCRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(PCCRYPTUI_VIEWCERTIFICATE_STRUCT)
+
+BOOL WINAPI CryptUIDlgViewCertificateA(
+ PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, BOOL *pfPropertiesChanged);
+BOOL WINAPI CryptUIDlgViewCertificateW(
+ PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged);
+#define CryptUIDlgViewCertificate WINELIB_NAME_AW(CryptUIDlgViewCertificate)
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
+{
+ DWORD dwSize;
+ GUID *pGuidSubject;
+ DWORD cbBlob;
+ BYTE *pbBlob;
+ LPCWSTR pwszDisplayName;
+} CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
+{
+ DWORD dwSize;
+ DWORD cCertStore;
+ HCERTSTORE *rghCertStore;
+ PFNCFILTERPROC pFilterCallback;
+ void *pvCallbackData;
+} CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
+{
+ DWORD dwSize;
+ LPWSTR pwszPvkFileName;
+ LPWSTR pwszProvName;
+ DWORD dwProvType;
+} CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO,
+ *PCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
+{
+ DWORD dwSize;
+ LPWSTR pwszSigningCertFileName;
+ DWORD dwPvkChoice;
+ union {
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo;
+ PCRYPT_KEY_PROV_INFO pPvkProvInfo;
+ } DUMMYUNIONNAME;
+} CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO,
+ *PCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
+{
+ DWORD dwSize;
+ DWORD dwAttrFlags;
+ LPCWSTR pwszDescription;
+ LPCWSTR pwszMoreInfoLocation;
+ LPCSTR pszHashAlg;
+ LPCWSTR pwszSigningCertDisplayString;
+ HCERTSTORE hAdditionalCertStore;
+ PCRYPT_ATTRIBUTES psAuthenticated;
+ PCRYPT_ATTRIBUTES psUnauthenticated;
+} CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO,
+ *PCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO *
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_INFO
+{
+ DWORD dwSize;
+ DWORD dwSubjectChoice;
+ union {
+ LPCWSTR pwszFileName;
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo;
+ } DUMMYUNIONNAME1;
+ DWORD dwSigningCertChoice;
+ union {
+ PCCERT_CONTEXT pSigningCertContext;
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO pSigningCertStore;
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo;
+ } DUMMYUNIONNAME2;
+ LPCWSTR pwszTimestampURL;
+ DWORD dwAdditionalCertChoice;
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO pSignExtInfo;
+} CRYPTUI_WIZ_DIGITAL_SIGN_INFO, *PCRYPTUI_WIZ_DIGITAL_SIGN_INFO;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_INFO *PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO;
+
+typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
+{
+ DWORD dwSize;
+ DWORD cbBlob;
+ BYTE *pbBlob;
+} CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
+typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
+
+/* Values for CryptUIWizDigitalSign's dwFlags */
+#define CRYPTUI_WIZ_NO_UI 0x00000001
+#define CRYPTUI_WIZ_DIGITAL_SIGN_EXCLUDE_PAGE_HASHES 0x00000002
+#define CRYPTUI_WIZ_DIGITAL_SIGN_INCLUDE_PAGE_HASHES 0x00000004
+
+BOOL WINAPI CryptUIWizDigitalSign(DWORD dwFlags, HWND hwndParent,
+ LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo,
+ PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext);
+
+BOOL WINAPI CryptUIWizFreeDigitalSignContext(
+ PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext);
+
+/* Values for CRYPTUI_WIZ_EXPORT_INFO's dwSubjectChoice */
+#define CRYPTUI_WIZ_EXPORT_CERT_CONTEXT 1
+#define CRYPTUI_WIZ_EXPORT_CTL_CONTEXT 2
+#define CRYPTUI_WIZ_EXPORT_CRL_CONTEXT 3
+#define CRYPTUI_WIZ_EXPORT_CERT_STORE 4
+#define CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY 5
+#define CRYPTUI_WIZ_EXPORT_FORMAT_CRL 6
+#define CRYPTUI_WIZ_EXPORT_FORMAT_CTL 7
+
+typedef struct _CRYPTUI_WIZ_EXPORT_INFO
+{
+ DWORD dwSize;
+ LPCWSTR pwszExportFileName;
+ DWORD dwSubjectChoice;
+ union {
+ PCCERT_CONTEXT pCertContext;
+ PCCTL_CONTEXT pCTLContext;
+ PCCRL_CONTEXT pCRLContext;
+ HCERTSTORE hCertStore;
+ } DUMMYUNIONNAME;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+} CRYPTUI_WIZ_EXPORT_INFO, *PCRYPTUI_WIZ_EXPORT_INFO;
+typedef const CRYPTUI_WIZ_EXPORT_INFO *PCCRYPTUI_WIZ_EXPORT_INFO;
+
+/* Values for CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO's dwExportFormat */
+#define CRYPTUI_WIZ_EXPORT_FORMAT_DER 1
+#define CRYPTUI_WIZ_EXPORT_FORMAT_PFX 2
+#define CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7 3
+#define CRYPTUI_WIZ_EXPORT_FORMAT_BASE64 4
+#define CRYPTUI_WIZ_EXPORT_FORMAT_SERIALIZED_CERT_STORE 5
+
+typedef struct _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
+{
+ DWORD dwSize;
+ DWORD dwExportFormat;
+ BOOL fExportChain;
+ BOOL fExportPrivateKeys;
+ LPCWSTR pwszPassword;
+ BOOL fStrongEncryption;
+} CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO, *PCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;
+typedef const CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO *
+ PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO;
+
+BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent,
+ LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid);
+
+/* Values for CRYPTUI_WIZ_IMPORT_SRC_INFO's dwSubjectChoice */
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_FILE 1
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT 2
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT 3
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT 4
+#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE 5
+
+typedef struct _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO
+{
+ DWORD dwSize;
+ DWORD dwSubjectChoice;
+ union {
+ LPCWSTR pwszFileName;
+ PCCERT_CONTEXT pCertContext;
+ PCCTL_CONTEXT pCTLContext;
+ PCCRL_CONTEXT pCRLContext;
+ HCERTSTORE hCertStore;
+ } DUMMYUNIONNAME;
+ DWORD dwFlags;
+ LPCWSTR pwszPassword;
+} CRYPTUI_WIZ_IMPORT_SRC_INFO, *PCRYPTUI_WIZ_IMPORT_SRC_INFO;
+typedef const CRYPTUI_WIZ_IMPORT_SRC_INFO *PCCRYPTUI_WIZ_IMPORT_SRC_INFO;
+
+/* Values for CryptUIWizImport's dwFlags */
+#define CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000
+#define CRYPTUI_WIZ_IMPORT_ALLOW_CERT 0x00020000
+#define CRYPTUI_WIZ_IMPORT_ALLOW_CRL 0x00040000
+#define CRYPTUI_WIZ_IMPORT_ALLOW_CTL 0x00080000
+#define CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE 0x00100000
+#define CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER 0x00200000
+#define CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE 0x00400000
+
+BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent,
+ LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
+ HCERTSTORE hDestCertStore);
+
+/* Definitions missing from PSDK's cryptuiapi.h, but documented on MSDN. */
+typedef BOOL (WINAPI *PFNCCERTDISPLAYPROC)(PCCERT_CONTEXT pCertContext,
+ HWND hWndSelCertDlg, void *pvCallbackData);
+
+/* Values for CRYPTUI_SELECTCERTIFICATE_STRUCT's dwFlags */
+#define CRYPTUI_SELECTCERT_MULTISELECT 0x00000001
+
+typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTA
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCSTR szTitle;
+ DWORD dwDontUseColumn;
+ LPCSTR szDisplayString;
+ PFNCFILTERPROC pFilterCallback;
+ PFNCCERTDISPLAYPROC pDisplayCallback;
+ void *pvCallbackData;
+ DWORD cDisplayStores;
+ HCERTSTORE *rghDisplayStores;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+ DWORD cPropSheetPages;
+ LPCPROPSHEETPAGEA rgPropSheetPages;
+ HCERTSTORE hSelectedCertStore;
+} CRYPTUI_SELECTCERTIFICATE_STRUCTA, *PCRYPTUI_SELECTCERTIFICATE_STRUCTA;
+typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTA *
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTA;
+
+typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTW
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCWSTR szTitle;
+ DWORD dwDontUseColumn;
+ LPCWSTR szDisplayString;
+ PFNCFILTERPROC pFilterCallback;
+ PFNCCERTDISPLAYPROC pDisplayCallback;
+ void *pvCallbackData;
+ DWORD cDisplayStores;
+ HCERTSTORE *rghDisplayStores;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+ DWORD cPropSheetPages;
+ LPCPROPSHEETPAGEW rgPropSheetPages;
+ HCERTSTORE hSelectedCertStore;
+} CRYPTUI_SELECTCERTIFICATE_STRUCTW, *PCRYPTUI_SELECTCERTIFICATE_STRUCTW;
+typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTW *
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTW;
+
+PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA(
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc);
+PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(
+ PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc);
+
+typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTA
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCSTR szTitle;
+ CMSG_SIGNER_INFO *pSignerInfo;
+ HCRYPTMSG hMsg;
+ LPCSTR pszOID;
+ DWORD_PTR dwReserved;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+ DWORD cPropSheetPages;
+ LPCPROPSHEETPAGEA rgPropSheetPages;
+} CRYPTUI_VIEWSIGNERINFO_STRUCTA, *PCRYPTUI_VIEWSIGNERINFO_STRUCTA;
+
+typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTW
+{
+ DWORD dwSize;
+ HWND hwndParent;
+ DWORD dwFlags;
+ LPCWSTR szTitle;
+ CMSG_SIGNER_INFO *pSignerInfo;
+ HCRYPTMSG hMsg;
+ LPCSTR pszOID;
+ DWORD_PTR dwReserved;
+ DWORD cStores;
+ HCERTSTORE *rghStores;
+ DWORD cPropSheetPages;
+ LPCPROPSHEETPAGEW rgPropSheetPages;
+} CRYPTUI_VIEWSIGNERINFO_STRUCTW, *PCRYPTUI_VIEWSIGNERINFO_STRUCTW;
+
+BOOL WINAPI CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi);
+BOOL WINAPI CryptUIDlgViewSignerInfoW(CRYPTUI_VIEWSIGNERINFO_STRUCTW *pcvsi);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl
new file mode 100644
index 00000000..2a4daa5f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctfutb.idl
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2010 Justin Chevrier
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+#endif
+
+interface ITfLangBarEventSink;
+interface ITfLangBarItemMgr;
+interface ITfInputProcessorProfiles;
+
+[
+ object,
+ uuid(87955690-e627-11d2-8ddb-00105a2799b5),
+ pointer_default(unique)
+]
+interface ITfLangBarMgr: IUnknown
+{
+ HRESULT AdviseEventSink(
+ [in] ITfLangBarEventSink *pSink,
+ [in] HWND hwnd,
+ [in] DWORD dwflags,
+ [in] DWORD *pdwCookie);
+
+ HRESULT UnAdviseEventSink(
+ [in] DWORD dwCookie);
+
+ HRESULT GetThreadMarshalInterface(
+ [in] DWORD dwThreadId,
+ [in] DWORD dwType,
+ [in] REFIID riid,
+ [out] IUnknown **ppunk);
+
+ HRESULT GetThreadLangBarItemMgr(
+ [in] DWORD dwThreadId,
+ [out] ITfLangBarItemMgr **pplbie,
+ [out] DWORD *pdwThreadid);
+
+ HRESULT GetInputProcessorProfiles(
+ [in] DWORD dwThreadId,
+ [out] ITfInputProcessorProfiles **ppaip,
+ [out] DWORD *pdwThreadid);
+
+ HRESULT RestoreLastFocus(
+ [out] DWORD *dwThreadId,
+ [in] BOOL fPrev);
+
+ HRESULT SetModalInput(
+ [in] ITfLangBarEventSink *pSink,
+ [in] DWORD dwThreadId,
+ [in] DWORD dwFlags);
+
+ HRESULT ShowFloating(
+ [in] DWORD dwFlags);
+
+ HRESULT GetShowFloatingStatus(
+ [out] DWORD *pdwFlags);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl
new file mode 100644
index 00000000..1d615865
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ctxtcall.idl
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2008 Louis Lenders
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "objidl.idl";
+import "unknwn.idl";
+
+typedef struct tagComCallData
+{
+ DWORD dwDispid;
+ DWORD dwReserved;
+ void *pUserDefined;
+} ComCallData;
+
+/***************************************************************************
+ * IContextCallback
+ */
+[
+ local,
+ object,
+ uuid(000001da-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IContextCallback : IUnknown
+{
+ typedef HRESULT (__stdcall *PFNCONTEXTCALL)(ComCallData *pParam);
+
+ HRESULT ContextCallback(
+ [in] PFNCONTEXTCALL pCallback,
+ [in] ComCallData *pParam,
+ [in] REFIID riid,
+ [in] int iMethod,
+ [in] IUnknown *pUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h
new file mode 100644
index 00000000..7c963ae7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/custcntl.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2002 Gyorgy 'Nog' Jeney
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_CUSTCNTL
+#define _INC_CUSTCNTL
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Size defs */
+#define CCHCCCLASS 32
+#define CCHCCDESC 32
+#define CCHCCTEXT 256
+
+/* Custom Control Style Structure */
+typedef struct tagCCSYLEA {
+ DWORD flStyle;
+ DWORD flExtStyle;
+ char szText[CCHCCTEXT];
+ LANGID lgid;
+ WORD wReserved1;
+} CCSTYLEA, *LPCCSTYLEA;
+
+typedef struct tagCCSYLEW {
+ DWORD flStyle;
+ DWORD flExtStyle;
+ WCHAR szText[CCHCCTEXT];
+ LANGID lgid;
+ WORD wReserved1;
+} CCSTYLEW, *LPCCSTYLEW;
+
+#define CCSTYLE WINELIB_NAME_AW(CCSTYLE)
+#define LPCCSTYLE WINELIB_NAME_AW(LPCCSTYLE)
+
+typedef BOOL (CALLBACK *LPFNCCSTYLEA)(HWND, LPCCSTYLEA);
+typedef BOOL (CALLBACK *LPFNCCSTYLEW)(HWND, LPCCSTYLEW);
+
+#define LPFNCCSTYLE WINELIB_NAME_AW(LPFNCCSTYLE)
+
+typedef int (CALLBACK *LPFNCCSIZETOTEXTA)(DWORD, DWORD, HFONT, LPSTR);
+typedef int (CALLBACK *LPFNCCSIZETOTEXTW)(DWORD, DWORD, HFONT, LPWSTR);
+
+#define LPFNCCSIZETOTEXT WINELIB_NAME_AW(LPFNCCSIZETOTEXT)
+
+/* Custom Control style flags structure */
+typedef struct tagCCSTYLEFLAGA {
+ DWORD flStyle;
+ DWORD flStyleMask;
+ LPSTR pszStyle;
+} CCSTYLEFLAGA, *LPCCSTYLEFLAGA;
+
+typedef struct tagCCSTYLEFLAGW {
+ DWORD flStyle;
+ DWORD flStyleMask;
+ LPWSTR pszStyle;
+} CCSTYLEFLAGW, *LPCCSTYLEFLAGW;
+
+#define CCSTYLEFLAG WINELIB_NAME_AW(CCSTYLEFLAG)
+
+/* Custom Control Flags */
+#define CCF_NOTEXT 0x00000001
+
+/* CustomControl info structure */
+typedef struct tagCCINFOA {
+ char szClass[CCHCCCLASS];
+ DWORD flOptions;
+ char szDesc[CCHCCDESC];
+ UINT cxDefault;
+ UINT cyDefault;
+ DWORD flStyleDefault;
+ DWORD flExtStyleDefault;
+ DWORD flCtrlTypeMask;
+ char szTextDefault[CCHCCTEXT];
+ int cStyleFlags;
+ LPCCSTYLEFLAGA aStyleFlags;
+ LPFNCCSTYLEA lpfnStyle;
+ LPFNCCSIZETOTEXTA lpfnSizeToText;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} CCINFOA, *LPCCINFOA;
+
+typedef struct tagCCINFOW {
+ WCHAR szClass[CCHCCCLASS];
+ DWORD flOptions;
+ WCHAR szDesc[CCHCCDESC];
+ UINT cxDefault;
+ UINT cyDefault;
+ DWORD flStyleDefault;
+ DWORD flExtStyleDefault;
+ DWORD flCtrlTypeMask;
+ int cStyleFlags;
+ LPCCSTYLEFLAGW aStyleFlags;
+ WCHAR szTextDefault[CCHCCTEXT];
+ LPFNCCSTYLEW lpfnStyle;
+ LPFNCCSIZETOTEXTW lpfnSizeToText;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} CCINFOW, *LPCCINFOW;
+
+DECL_WINELIB_TYPE_AW(CCINFO)
+DECL_WINELIB_TYPE_AW(LPCCINFO)
+
+typedef UINT (CALLBACK *LPFNCCINFOA)(LPCCINFOA);
+typedef UINT (CALLBACK *LPFNCCINFOW)(LPCCINFOW);
+
+DECL_WINELIB_TYPE_AW(LPFNCCINFO)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INC_CUSTCNTL */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h
new file mode 100644
index 00000000..1b4e2c34
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/cvconst.h
@@ -0,0 +1,719 @@
+/*
+ * File cvconst.h - MS debug information
+ *
+ * Copyright (C) 2004, Eric Pouech
+ * Copyright (C) 2012, André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* information in this file is highly derived from MSDN DIA information pages */
+
+/* symbols & types enumeration */
+enum SymTagEnum
+{
+ SymTagNull,
+ SymTagExe,
+ SymTagCompiland,
+ SymTagCompilandDetails,
+ SymTagCompilandEnv,
+ SymTagFunction,
+ SymTagBlock,
+ SymTagData,
+ SymTagAnnotation,
+ SymTagLabel,
+ SymTagPublicSymbol,
+ SymTagUDT,
+ SymTagEnum,
+ SymTagFunctionType,
+ SymTagPointerType,
+ SymTagArrayType,
+ SymTagBaseType,
+ SymTagTypedef,
+ SymTagBaseClass,
+ SymTagFriend,
+ SymTagFunctionArgType,
+ SymTagFuncDebugStart,
+ SymTagFuncDebugEnd,
+ SymTagUsingNamespace,
+ SymTagVTableShape,
+ SymTagVTable,
+ SymTagCustom,
+ SymTagThunk,
+ SymTagCustomType,
+ SymTagManagedType,
+ SymTagDimension,
+ SymTagMax
+};
+
+enum BasicType
+{
+ btNoType = 0,
+ btVoid = 1,
+ btChar = 2,
+ btWChar = 3,
+ btInt = 6,
+ btUInt = 7,
+ btFloat = 8,
+ btBCD = 9,
+ btBool = 10,
+ btLong = 13,
+ btULong = 14,
+ btCurrency = 25,
+ btDate = 26,
+ btVariant = 27,
+ btComplex = 28,
+ btBit = 29,
+ btBSTR = 30,
+ btHresult = 31,
+};
+
+/* kind of UDT */
+enum UdtKind
+{
+ UdtStruct,
+ UdtClass,
+ UdtUnion
+};
+
+/* where a SymTagData is */
+enum LocationType
+{
+ LocIsNull,
+ LocIsStatic,
+ LocIsTLS,
+ LocIsRegRel,
+ LocIsThisRel,
+ LocIsEnregistered,
+ LocIsBitField,
+ LocIsSlot,
+ LocIsIlRel,
+ LocInMetaData,
+ LocIsConstant
+};
+
+/* kind of SymTagData */
+enum DataKind
+{
+ DataIsUnknown,
+ DataIsLocal,
+ DataIsStaticLocal,
+ DataIsParam,
+ DataIsObjectPtr,
+ DataIsFileStatic,
+ DataIsGlobal,
+ DataIsMember,
+ DataIsStaticMember,
+ DataIsConstant
+};
+
+/* values for registers (on different CPUs) */
+enum CV_HREG_e
+{
+ /* those values are common to all supported CPUs (and CPU independent) */
+ CV_ALLREG_ERR = 30000,
+ CV_ALLREG_TEB = 30001,
+ CV_ALLREG_TIMER = 30002,
+ CV_ALLREG_EFAD1 = 30003,
+ CV_ALLREG_EFAD2 = 30004,
+ CV_ALLREG_EFAD3 = 30005,
+ CV_ALLREG_VFRAME = 30006,
+ CV_ALLREG_HANDLE = 30007,
+ CV_ALLREG_PARAMS = 30008,
+ CV_ALLREG_LOCALS = 30009,
+ CV_ALLREG_TID = 30010,
+ CV_ALLREG_ENV = 30011,
+ CV_ALLREG_CMDLN = 30012,
+
+ /* Intel x86 CPU */
+ CV_REG_NONE = 0,
+ CV_REG_AL = 1,
+ CV_REG_CL = 2,
+ CV_REG_DL = 3,
+ CV_REG_BL = 4,
+ CV_REG_AH = 5,
+ CV_REG_CH = 6,
+ CV_REG_DH = 7,
+ CV_REG_BH = 8,
+ CV_REG_AX = 9,
+ CV_REG_CX = 10,
+ CV_REG_DX = 11,
+ CV_REG_BX = 12,
+ CV_REG_SP = 13,
+ CV_REG_BP = 14,
+ CV_REG_SI = 15,
+ CV_REG_DI = 16,
+ CV_REG_EAX = 17,
+ CV_REG_ECX = 18,
+ CV_REG_EDX = 19,
+ CV_REG_EBX = 20,
+ CV_REG_ESP = 21,
+ CV_REG_EBP = 22,
+ CV_REG_ESI = 23,
+ CV_REG_EDI = 24,
+ CV_REG_ES = 25,
+ CV_REG_CS = 26,
+ CV_REG_SS = 27,
+ CV_REG_DS = 28,
+ CV_REG_FS = 29,
+ CV_REG_GS = 30,
+ CV_REG_IP = 31,
+ CV_REG_FLAGS = 32,
+ CV_REG_EIP = 33,
+ CV_REG_EFLAGS = 34,
+
+ /* <pcode> */
+ CV_REG_TEMP = 40,
+ CV_REG_TEMPH = 41,
+ CV_REG_QUOTE = 42,
+ CV_REG_PCDR3 = 43, /* this includes PCDR4 to PCDR7 */
+ CV_REG_CR0 = 80, /* this includes CR1 to CR4 */
+ CV_REG_DR0 = 90, /* this includes DR1 to DR7 */
+ /* </pcode> */
+
+ CV_REG_GDTR = 110,
+ CV_REG_GDTL = 111,
+ CV_REG_IDTR = 112,
+ CV_REG_IDTL = 113,
+ CV_REG_LDTR = 114,
+ CV_REG_TR = 115,
+
+ CV_REG_PSEUDO1 = 116, /* this includes Pseudo02 to Pseudo09 */
+ CV_REG_ST0 = 128, /* this includes ST1 to ST7 */
+ CV_REG_CTRL = 136,
+ CV_REG_STAT = 137,
+ CV_REG_TAG = 138,
+ CV_REG_FPIP = 139,
+ CV_REG_FPCS = 140,
+ CV_REG_FPDO = 141,
+ CV_REG_FPDS = 142,
+ CV_REG_ISEM = 143,
+ CV_REG_FPEIP = 144,
+ CV_REG_FPEDO = 145,
+ CV_REG_MM0 = 146, /* this includes MM1 to MM7 */
+ CV_REG_XMM0 = 154, /* this includes XMM1 to XMM7 */
+ CV_REG_XMM00 = 162,
+ CV_REG_XMM0L = 194, /* this includes XMM1L to XMM7L */
+ CV_REG_XMM0H = 202, /* this includes XMM1H to XMM7H */
+ CV_REG_MXCSR = 211,
+ CV_REG_EDXEAX = 212,
+ CV_REG_EMM0L = 220,
+ CV_REG_EMM0H = 228,
+ CV_REG_MM00 = 236,
+ CV_REG_MM01 = 237,
+ CV_REG_MM10 = 238,
+ CV_REG_MM11 = 239,
+ CV_REG_MM20 = 240,
+ CV_REG_MM21 = 241,
+ CV_REG_MM30 = 242,
+ CV_REG_MM31 = 243,
+ CV_REG_MM40 = 244,
+ CV_REG_MM41 = 245,
+ CV_REG_MM50 = 246,
+ CV_REG_MM51 = 247,
+ CV_REG_MM60 = 248,
+ CV_REG_MM61 = 249,
+ CV_REG_MM70 = 250,
+ CV_REG_MM71 = 251,
+
+ CV_REG_YMM0 = 252, /* this includes YMM1 to YMM7 */
+ CV_REG_YMM0H = 260, /* this includes YMM1H to YMM7H */
+ CV_REG_YMM0I0 = 268, /* this includes YMM0I1 to YMM0I3 */
+ CV_REG_YMM1I0 = 272, /* this includes YMM1I1 to YMM1I3 */
+ CV_REG_YMM2I0 = 276, /* this includes YMM2I1 to YMM2I3 */
+ CV_REG_YMM3I0 = 280, /* this includes YMM3I1 to YMM3I3 */
+ CV_REG_YMM4I0 = 284, /* this includes YMM4I1 to YMM4I3 */
+ CV_REG_YMM5I0 = 288, /* this includes YMM5I1 to YMM5I3 */
+ CV_REG_YMM6I0 = 292, /* this includes YMM6I1 to YMM6I3 */
+ CV_REG_YMM7I0 = 296, /* this includes YMM7I1 to YMM7I3 */
+ CV_REG_YMM0F0 = 300, /* this includes YMM0F1 to YMM0F7 */
+ CV_REG_YMM1F0 = 308, /* this includes YMM1F1 to YMM1F7 */
+ CV_REG_YMM2F0 = 316, /* this includes YMM2F1 to YMM2F7 */
+ CV_REG_YMM3F0 = 324, /* this includes YMM3F1 to YMM3F7 */
+ CV_REG_YMM4F0 = 332, /* this includes YMM4F1 to YMM4F7 */
+ CV_REG_YMM5F0 = 340, /* this includes YMM5F1 to YMM5F7 */
+ CV_REG_YMM6F0 = 348, /* this includes YMM6F1 to YMM6F7 */
+ CV_REG_YMM7F0 = 356, /* this includes YMM7F1 to YMM7F7 */
+ CV_REG_YMM0D0 = 364, /* this includes YMM0D1 to YMM0D3 */
+ CV_REG_YMM1D0 = 368, /* this includes YMM1D1 to YMM1D3 */
+ CV_REG_YMM2D0 = 372, /* this includes YMM2D1 to YMM2D3 */
+ CV_REG_YMM3D0 = 376, /* this includes YMM3D1 to YMM3D3 */
+ CV_REG_YMM4D0 = 380, /* this includes YMM4D1 to YMM4D3 */
+ CV_REG_YMM5D0 = 384, /* this includes YMM5D1 to YMM5D3 */
+ CV_REG_YMM6D0 = 388, /* this includes YMM6D1 to YMM6D3 */
+ CV_REG_YMM7D0 = 392, /* this includes YMM7D1 to YMM7D3 */
+
+ /* Motorola 68K CPU */
+ CV_R68_D0 = 0, /* this includes D1 to D7 too */
+ CV_R68_A0 = 8, /* this includes A1 to A7 too */
+ CV_R68_CCR = 16,
+ CV_R68_SR = 17,
+ CV_R68_USP = 18,
+ CV_R68_MSP = 19,
+ CV_R68_SFC = 20,
+ CV_R68_DFC = 21,
+ CV_R68_CACR = 22,
+ CV_R68_VBR = 23,
+ CV_R68_CAAR = 24,
+ CV_R68_ISP = 25,
+ CV_R68_PC = 26,
+ CV_R68_FPCR = 28,
+ CV_R68_FPSR = 29,
+ CV_R68_FPIAR = 30,
+ CV_R68_FP0 = 32, /* this includes FP1 to FP7 */
+ CV_R68_MMUSR030 = 41,
+ CV_R68_MMUSR = 42,
+ CV_R68_URP = 43,
+ CV_R68_DTT0 = 44,
+ CV_R68_DTT1 = 45,
+ CV_R68_ITT0 = 46,
+ CV_R68_ITT1 = 47,
+ CV_R68_PSR = 51,
+ CV_R68_PCSR = 52,
+ CV_R68_VAL = 53,
+ CV_R68_CRP = 54,
+ CV_R68_SRP = 55,
+ CV_R68_DRP = 56,
+ CV_R68_TC = 57,
+ CV_R68_AC = 58,
+ CV_R68_SCC = 59,
+ CV_R68_CAL = 60,
+ CV_R68_TT0 = 61,
+ CV_R68_TT1 = 62,
+ CV_R68_BAD0 = 64, /* this includes BAD1 to BAD7 */
+ CV_R68_BAC0 = 72, /* this includes BAC1 to BAC7 */
+
+ /* MIPS 4000 CPU */
+ CV_M4_NOREG = CV_REG_NONE,
+ CV_M4_IntZERO = 10,
+ CV_M4_IntAT = 11,
+ CV_M4_IntV0 = 12,
+ CV_M4_IntV1 = 13,
+ CV_M4_IntA0 = 14, /* this includes IntA1 to IntA3 */
+ CV_M4_IntT0 = 18, /* this includes IntT1 to IntT7 */
+ CV_M4_IntS0 = 26, /* this includes IntS1 to IntS7 */
+ CV_M4_IntT8 = 34,
+ CV_M4_IntT9 = 35,
+ CV_M4_IntKT0 = 36,
+ CV_M4_IntKT1 = 37,
+ CV_M4_IntGP = 38,
+ CV_M4_IntSP = 39,
+ CV_M4_IntS8 = 40,
+ CV_M4_IntRA = 41,
+ CV_M4_IntLO = 42,
+ CV_M4_IntHI = 43,
+ CV_M4_Fir = 50,
+ CV_M4_Psr = 51,
+ CV_M4_FltF0 = 60, /* this includes FltF1 to Flt31 */
+ CV_M4_FltFsr = 92,
+
+ /* Alpha AXP CPU */
+ CV_ALPHA_NOREG = CV_REG_NONE,
+ CV_ALPHA_FltF0 = 10, /* this includes FltF1 to FltF31 */
+ CV_ALPHA_IntV0 = 42,
+ CV_ALPHA_IntT0 = 43, /* this includes T1 to T7 */
+ CV_ALPHA_IntS0 = 51, /* this includes S1 to S5 */
+ CV_ALPHA_IntFP = 57,
+ CV_ALPHA_IntA0 = 58, /* this includes A1 to A5 */
+ CV_ALPHA_IntT8 = 64,
+ CV_ALPHA_IntT9 = 65,
+ CV_ALPHA_IntT10 = 66,
+ CV_ALPHA_IntT11 = 67,
+ CV_ALPHA_IntRA = 68,
+ CV_ALPHA_IntT12 = 69,
+ CV_ALPHA_IntAT = 70,
+ CV_ALPHA_IntGP = 71,
+ CV_ALPHA_IntSP = 72,
+ CV_ALPHA_IntZERO = 73,
+ CV_ALPHA_Fpcr = 74,
+ CV_ALPHA_Fir = 75,
+ CV_ALPHA_Psr = 76,
+ CV_ALPHA_FltFsr = 77,
+ CV_ALPHA_SoftFpcr = 78,
+
+ /* Motorola & IBM PowerPC CPU */
+ CV_PPC_GPR0 = 1, /* this includes GPR1 to GPR31 */
+ CV_PPC_CR = 33,
+ CV_PPC_CR0 = 34, /* this includes CR1 to CR7 */
+ CV_PPC_FPR0 = 42, /* this includes FPR1 to FPR31 */
+
+ CV_PPC_FPSCR = 74,
+ CV_PPC_MSR = 75,
+ CV_PPC_SR0 = 76, /* this includes SR1 to SR15 */
+ CV_PPC_PC = 99,
+ CV_PPC_MQ = 100,
+ CV_PPC_XER = 101,
+ CV_PPC_RTCU = 104,
+ CV_PPC_RTCL = 105,
+ CV_PPC_LR = 108,
+ CV_PPC_CTR = 109,
+ CV_PPC_COMPARE = 110,
+ CV_PPC_COUNT = 111,
+ CV_PPC_DSISR = 118,
+ CV_PPC_DAR = 119,
+ CV_PPC_DEC = 122,
+ CV_PPC_SDR1 = 125,
+ CV_PPC_SRR0 = 126,
+ CV_PPC_SRR1 = 127,
+ CV_PPC_SPRG0 = 372, /* this includes SPRG1 to SPRG3 */
+ CV_PPC_ASR = 280,
+ CV_PPC_EAR = 382,
+ CV_PPC_PVR = 287,
+ CV_PPC_BAT0U = 628,
+ CV_PPC_BAT0L = 629,
+ CV_PPC_BAT1U = 630,
+ CV_PPC_BAT1L = 631,
+ CV_PPC_BAT2U = 632,
+ CV_PPC_BAT2L = 633,
+ CV_PPC_BAT3U = 634,
+ CV_PPC_BAT3L = 635,
+ CV_PPC_DBAT0U = 636,
+ CV_PPC_DBAT0L = 637,
+ CV_PPC_DBAT1U = 638,
+ CV_PPC_DBAT1L = 639,
+ CV_PPC_DBAT2U = 640,
+ CV_PPC_DBAT2L = 641,
+ CV_PPC_DBAT3U = 642,
+ CV_PPC_DBAT3L = 643,
+ CV_PPC_PMR0 = 1044, /* this includes PMR1 to PMR15 */
+ CV_PPC_DMISS = 1076,
+ CV_PPC_DCMP = 1077,
+ CV_PPC_HASH1 = 1078,
+ CV_PPC_HASH2 = 1079,
+ CV_PPC_IMISS = 1080,
+ CV_PPC_ICMP = 1081,
+ CV_PPC_RPA = 1082,
+ CV_PPC_HID0 = 1108, /* this includes HID1 to HID15 */
+
+ /* Java */
+ CV_JAVA_PC = 1,
+
+ /* Hitachi SH3 CPU */
+ CV_SH3_NOREG = CV_REG_NONE,
+ CV_SH3_IntR0 = 10, /* this include R1 to R13 */
+ CV_SH3_IntFp = 24,
+ CV_SH3_IntSp = 25,
+ CV_SH3_Gbr = 38,
+ CV_SH3_Pr = 39,
+ CV_SH3_Mach = 40,
+ CV_SH3_Macl = 41,
+ CV_SH3_Pc = 50,
+ CV_SH3_Sr = 51,
+ CV_SH3_BarA = 60,
+ CV_SH3_BasrA = 61,
+ CV_SH3_BamrA = 62,
+ CV_SH3_BbrA = 63,
+ CV_SH3_BarB = 64,
+ CV_SH3_BasrB = 65,
+ CV_SH3_BamrB = 66,
+ CV_SH3_BbrB = 67,
+ CV_SH3_BdrB = 68,
+ CV_SH3_BdmrB = 69,
+ CV_SH3_Brcr = 70,
+ CV_SH_Fpscr = 75,
+ CV_SH_Fpul = 76,
+ CV_SH_FpR0 = 80, /* this includes FpR1 to FpR15 */
+ CV_SH_XFpR0 = 96, /* this includes XFpR1 to XXFpR15 */
+
+ /* ARM CPU */
+ CV_ARM_NOREG = CV_REG_NONE,
+ CV_ARM_R0 = 10, /* this includes R1 to R12 */
+ CV_ARM_SP = 23,
+ CV_ARM_LR = 24,
+ CV_ARM_PC = 25,
+ CV_ARM_CPSR = 26,
+ CV_ARM_ACC0 = 27,
+ CV_ARM_FPSCR = 40,
+ CV_ARM_FPEXC = 41,
+ CV_ARM_FS0 = 50, /* this includes FS1 to FS31 */
+ CV_ARM_FPEXTRA0 = 90, /* this includes FPEXTRA1 to FPEXTRA7 */
+ CV_ARM_WR0 = 128, /* this includes WR1 to WR15 */
+ CV_ARM_WCID = 144,
+ CV_ARM_WCON = 145,
+ CV_ARM_WCSSF = 146,
+ CV_ARM_WCASF = 147,
+ CV_ARM_WC4 = 148,
+ CV_ARM_WC5 = 149,
+ CV_ARM_WC6 = 150,
+ CV_ARM_WC7 = 151,
+ CV_ARM_WCGR0 = 152, /* this includes WCGR1 to WCGR3 */
+ CV_ARM_WC12 = 156,
+ CV_ARM_WC13 = 157,
+ CV_ARM_WC14 = 158,
+ CV_ARM_WC15 = 159,
+ CV_ARM_FS32 = 200, /* this includes FS33 to FS63 */
+ CV_ARM_ND0 = 300, /* this includes ND1 to ND31 */
+ CV_ARM_NQ0 = 400, /* this includes NQ1 to NQ15 */
+
+ /* Intel IA64 CPU */
+ CV_IA64_NOREG = CV_REG_NONE,
+ CV_IA64_Br0 = 512, /* this includes Br1 to Br7 */
+ CV_IA64_P0 = 704, /* this includes P1 to P63 */
+ CV_IA64_Preds = 768,
+ CV_IA64_IntH0 = 832, /* this includes H1 to H15 */
+ CV_IA64_Ip = 1016,
+ CV_IA64_Umask = 1017,
+ CV_IA64_Cfm = 1018,
+ CV_IA64_Psr = 1019,
+ CV_IA64_Nats = 1020,
+ CV_IA64_Nats2 = 1021,
+ CV_IA64_Nats3 = 1022,
+ CV_IA64_IntR0 = 1024, /* this includes R1 to R127 */
+ CV_IA64_FltF0 = 2048, /* this includes FltF1 to FltF127 */
+ /* some IA64 registers missing */
+
+ /* TriCore CPU */
+ CV_TRI_NOREG = CV_REG_NONE,
+ CV_TRI_D0 = 10, /* includes D1 to D15 */
+ CV_TRI_A0 = 26, /* includes A1 to A15 */
+ CV_TRI_E0 = 42,
+ CV_TRI_E2 = 43,
+ CV_TRI_E4 = 44,
+ CV_TRI_E6 = 45,
+ CV_TRI_E8 = 46,
+ CV_TRI_E10 = 47,
+ CV_TRI_E12 = 48,
+ CV_TRI_E14 = 49,
+ CV_TRI_EA0 = 50,
+ CV_TRI_EA2 = 51,
+ CV_TRI_EA4 = 52,
+ CV_TRI_EA6 = 53,
+ CV_TRI_EA8 = 54,
+ CV_TRI_EA10 = 55,
+ CV_TRI_EA12 = 56,
+ CV_TRI_EA14 = 57,
+ CV_TRI_PSW = 58,
+ CV_TRI_PCXI = 59,
+ CV_TRI_PC = 60,
+ CV_TRI_FCX = 61,
+ CV_TRI_LCX = 62,
+ CV_TRI_ISP = 63,
+ CV_TRI_ICR = 64,
+ CV_TRI_BIV = 65,
+ CV_TRI_BTV = 66,
+ CV_TRI_SYSCON = 67,
+ CV_TRI_DPRx_0 = 68, /* includes DPRx_1 to DPRx_3 */
+ CV_TRI_CPRx_0 = 68, /* includes CPRx_1 to CPRx_3 */
+ CV_TRI_DPMx_0 = 68, /* includes DPMx_1 to DPMx_3 */
+ CV_TRI_CPMx_0 = 68, /* includes CPMx_1 to CPMx_3 */
+ CV_TRI_DBGSSR = 72,
+ CV_TRI_EXEVT = 73,
+ CV_TRI_SWEVT = 74,
+ CV_TRI_CREVT = 75,
+ CV_TRI_TRnEVT = 76,
+ CV_TRI_MMUCON = 77,
+ CV_TRI_ASI = 78,
+ CV_TRI_TVA = 79,
+ CV_TRI_TPA = 80,
+ CV_TRI_TPX = 81,
+ CV_TRI_TFA = 82,
+
+ /* AM33 (and the likes) CPU */
+ CV_AM33_NOREG = CV_REG_NONE,
+ CV_AM33_E0 = 10, /* this includes E1 to E7 */
+ CV_AM33_A0 = 20, /* this includes A1 to A3 */
+ CV_AM33_D0 = 30, /* this includes D1 to D3 */
+ CV_AM33_FS0 = 40, /* this includes FS1 to FS31 */
+ CV_AM33_SP = 80,
+ CV_AM33_PC = 81,
+ CV_AM33_MDR = 82,
+ CV_AM33_MDRQ = 83,
+ CV_AM33_MCRH = 84,
+ CV_AM33_MCRL = 85,
+ CV_AM33_MCVF = 86,
+ CV_AM33_EPSW = 87,
+ CV_AM33_FPCR = 88,
+ CV_AM33_LIR = 89,
+ CV_AM33_LAR = 90,
+
+ /* Mitsubishi M32R CPU */
+ CV_M32R_NOREG = CV_REG_NONE,
+ CV_M32R_R0 = 10, /* this includes R1 to R11 */
+ CV_M32R_R12 = 22,
+ CV_M32R_R13 = 23,
+ CV_M32R_R14 = 24,
+ CV_M32R_R15 = 25,
+ CV_M32R_PSW = 26,
+ CV_M32R_CBR = 27,
+ CV_M32R_SPI = 28,
+ CV_M32R_SPU = 29,
+ CV_M32R_SPO = 30,
+ CV_M32R_BPC = 31,
+ CV_M32R_ACHI = 32,
+ CV_M32R_ACLO = 33,
+ CV_M32R_PC = 34,
+
+ /* AMD/Intel x86_64 CPU */
+ CV_AMD64_NONE = CV_REG_NONE,
+ CV_AMD64_AL = CV_REG_AL,
+ CV_AMD64_CL = CV_REG_CL,
+ CV_AMD64_DL = CV_REG_DL,
+ CV_AMD64_BL = CV_REG_BL,
+ CV_AMD64_AH = CV_REG_AH,
+ CV_AMD64_CH = CV_REG_CH,
+ CV_AMD64_DH = CV_REG_DH,
+ CV_AMD64_BH = CV_REG_BH,
+ CV_AMD64_AX = CV_REG_AX,
+ CV_AMD64_CX = CV_REG_CX,
+ CV_AMD64_DX = CV_REG_DX,
+ CV_AMD64_BX = CV_REG_BX,
+ CV_AMD64_SP = CV_REG_SP,
+ CV_AMD64_BP = CV_REG_BP,
+ CV_AMD64_SI = CV_REG_SI,
+ CV_AMD64_DI = CV_REG_DI,
+ CV_AMD64_EAX = CV_REG_EAX,
+ CV_AMD64_ECX = CV_REG_ECX,
+ CV_AMD64_EDX = CV_REG_EDX,
+ CV_AMD64_EBX = CV_REG_EBX,
+ CV_AMD64_ESP = CV_REG_ESP,
+ CV_AMD64_EBP = CV_REG_EBP,
+ CV_AMD64_ESI = CV_REG_ESI,
+ CV_AMD64_EDI = CV_REG_EDI,
+ CV_AMD64_ES = CV_REG_ES,
+ CV_AMD64_CS = CV_REG_CS,
+ CV_AMD64_SS = CV_REG_SS,
+ CV_AMD64_DS = CV_REG_DS,
+ CV_AMD64_FS = CV_REG_FS,
+ CV_AMD64_GS = CV_REG_GS,
+ CV_AMD64_FLAGS = CV_REG_FLAGS,
+ CV_AMD64_RIP = CV_REG_EIP,
+ CV_AMD64_EFLAGS = CV_REG_EFLAGS,
+
+ /* <pcode> */
+ CV_AMD64_TEMP = CV_REG_TEMP,
+ CV_AMD64_TEMPH = CV_REG_TEMPH,
+ CV_AMD64_QUOTE = CV_REG_QUOTE,
+ CV_AMD64_PCDR3 = CV_REG_PCDR3, /* this includes PCDR4 to PCDR7 */
+ CV_AMD64_CR0 = CV_REG_CR0, /* this includes CR1 to CR4 */
+ CV_AMD64_DR0 = CV_REG_DR0, /* this includes DR1 to DR7 */
+ /* </pcode> */
+
+ CV_AMD64_GDTR = CV_REG_GDTR,
+ CV_AMD64_GDTL = CV_REG_GDTL,
+ CV_AMD64_IDTR = CV_REG_IDTR,
+ CV_AMD64_IDTL = CV_REG_IDTL,
+ CV_AMD64_LDTR = CV_REG_LDTR,
+ CV_AMD64_TR = CV_REG_TR,
+
+ CV_AMD64_PSEUDO1 = CV_REG_PSEUDO1, /* this includes Pseudo02 to Pseudo09 */
+ CV_AMD64_ST0 = CV_REG_ST0, /* this includes ST1 to ST7 */
+ CV_AMD64_CTRL = CV_REG_CTRL,
+ CV_AMD64_STAT = CV_REG_STAT,
+ CV_AMD64_TAG = CV_REG_TAG,
+ CV_AMD64_FPIP = CV_REG_FPIP,
+ CV_AMD64_FPCS = CV_REG_FPCS,
+ CV_AMD64_FPDO = CV_REG_FPDO,
+ CV_AMD64_FPDS = CV_REG_FPDS,
+ CV_AMD64_ISEM = CV_REG_ISEM,
+ CV_AMD64_FPEIP = CV_REG_FPEIP,
+ CV_AMD64_FPEDO = CV_REG_FPEDO,
+ CV_AMD64_MM0 = CV_REG_MM0, /* this includes MM1 to MM7 */
+ CV_AMD64_XMM0 = CV_REG_XMM0, /* this includes XMM1 to XMM7 */
+ CV_AMD64_XMM00 = CV_REG_XMM00,
+ CV_AMD64_XMM0L = CV_REG_XMM0L, /* this includes XMM1L to XMM7L */
+ CV_AMD64_XMM0H = CV_REG_XMM0H, /* this includes XMM1H to XMM7H */
+ CV_AMD64_MXCSR = CV_REG_MXCSR,
+ CV_AMD64_EDXEAX = CV_REG_EDXEAX,
+ CV_AMD64_EMM0L = CV_REG_EMM0L,
+ CV_AMD64_EMM0H = CV_REG_EMM0H,
+ CV_AMD64_MM00 = CV_REG_MM00,
+ CV_AMD64_MM01 = CV_REG_MM01,
+ CV_AMD64_MM10 = CV_REG_MM10,
+ CV_AMD64_MM11 = CV_REG_MM11,
+ CV_AMD64_MM20 = CV_REG_MM20,
+ CV_AMD64_MM21 = CV_REG_MM21,
+ CV_AMD64_MM30 = CV_REG_MM30,
+ CV_AMD64_MM31 = CV_REG_MM31,
+ CV_AMD64_MM40 = CV_REG_MM40,
+ CV_AMD64_MM41 = CV_REG_MM41,
+ CV_AMD64_MM50 = CV_REG_MM50,
+ CV_AMD64_MM51 = CV_REG_MM51,
+ CV_AMD64_MM60 = CV_REG_MM60,
+ CV_AMD64_MM61 = CV_REG_MM61,
+ CV_AMD64_MM70 = CV_REG_MM70,
+ CV_AMD64_MM71 = CV_REG_MM71,
+
+ CV_AMD64_XMM8 = 252, /* this includes XMM9 to XMM15 */
+
+ CV_AMD64_RAX = 328,
+ CV_AMD64_RBX = 329,
+ CV_AMD64_RCX = 330,
+ CV_AMD64_RDX = 331,
+ CV_AMD64_RSI = 332,
+ CV_AMD64_RDI = 333,
+ CV_AMD64_RBP = 334,
+ CV_AMD64_RSP = 335,
+
+ CV_AMD64_R8 = 336,
+ CV_AMD64_R9 = 337,
+ CV_AMD64_R10 = 338,
+ CV_AMD64_R11 = 339,
+ CV_AMD64_R12 = 340,
+ CV_AMD64_R13 = 341,
+ CV_AMD64_R14 = 342,
+ CV_AMD64_R15 = 343,
+
+ /* Wine extension */
+ CV_ARM64_NOREG = CV_REG_NONE,
+ CV_ARM64_X0 = 10, /* this includes X0 to X30 */
+ CV_ARM64_SP = 41,
+ CV_ARM64_PC = 42,
+ CV_ARM64_PSTATE = 43,
+};
+
+typedef enum
+{
+ THUNK_ORDINAL_NOTYPE,
+ THUNK_ORDINAL_ADJUSTOR,
+ THUNK_ORDINAL_VCALL,
+ THUNK_ORDINAL_PCODE,
+ THUNK_ORDINAL_LOAD
+} THUNK_ORDINAL;
+
+typedef enum CV_call_e
+{
+ CV_CALL_NEAR_C,
+ CV_CALL_FAR_C,
+ CV_CALL_NEAR_PASCAL,
+ CV_CALL_FAR_PASCAL,
+ CV_CALL_NEAR_FAST,
+ CV_CALL_FAR_FAST,
+ CV_CALL_SKIPPED,
+ CV_CALL_NEAR_STD,
+ CV_CALL_FAR_STD,
+ CV_CALL_NEAR_SYS,
+ CV_CALL_FAR_SYS,
+ CV_CALL_THISCALL,
+ CV_CALL_MIPSCALL,
+ CV_CALL_GENERIC,
+ CV_CALL_ALPHACALL,
+ CV_CALL_PPCCALL,
+ CV_CALL_SHCALL,
+ CV_CALL_ARMCALL,
+ CV_CALL_AM33CALL,
+ CV_CALL_TRICALL,
+ CV_CALL_SH5CALL,
+ CV_CALL_M32RCALL,
+ CV_CALL_RESERVED,
+} CV_call_e;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h
new file mode 100644
index 00000000..c431ac0b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d.h
@@ -0,0 +1,1577 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D_H
+#define __WINE_D3D_H
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <d3dtypes.h> /* must precede d3dcaps.h */
+#include <d3dcaps.h>
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D, 0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3D2, 0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a);
+DEFINE_GUID(IID_IDirect3D3, 0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e);
+DEFINE_GUID(IID_IDirect3D7, 0xf5049e77,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+DEFINE_GUID(IID_IDirect3DRampDevice, 0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3DRGBDevice, 0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3DHALDevice, 0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+DEFINE_GUID(IID_IDirect3DMMXDevice, 0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DRefDevice, 0x50936643,0x13e9,0x11d1,0x89,0xaa,0x00,0xa0,0xc9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DTnLHalDevice, 0xf5049e78,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+DEFINE_GUID(IID_IDirect3DNullDevice, 0x8767df22,0xbacc,0x11d1,0x89,0x69,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+DEFINE_GUID(IID_IDirect3DDevice, 0x64108800,0x957d,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DDevice2, 0x93281501,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DDevice3, 0xb0ab3b60,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74);
+DEFINE_GUID(IID_IDirect3DDevice7, 0xf5049e79,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+DEFINE_GUID(IID_IDirect3DTexture, 0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56);
+DEFINE_GUID(IID_IDirect3DTexture2, 0x93281502,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+
+DEFINE_GUID(IID_IDirect3DLight, 0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+
+DEFINE_GUID(IID_IDirect3DMaterial, 0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+DEFINE_GUID(IID_IDirect3DMaterial2, 0x93281503,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DMaterial3, 0xca9c46f4,0xd3c5,0x11d1,0xb7,0x5a,0x00,0x60,0x08,0x52,0xb3,0x12);
+
+DEFINE_GUID(IID_IDirect3DExecuteBuffer, 0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+
+DEFINE_GUID(IID_IDirect3DViewport, 0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E);
+DEFINE_GUID(IID_IDirect3DViewport2, 0x93281500,0x8CF8,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29);
+DEFINE_GUID(IID_IDirect3DViewport3, 0xb0ab3b61,0x33d7,0x11d1,0xa9,0x81,0x00,0xc0,0x4f,0xd7,0xb1,0x74);
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer, 0x7a503555,0x4a83,0x11d1,0xa5,0xdb,0x00,0xa0,0xc9,0x03,0x67,0xf8);
+DEFINE_GUID(IID_IDirect3DVertexBuffer7, 0xf5049e7d,0x4861,0x11d2,0xa4,0x07,0x00,0xa0,0xc9,0x06,0x29,0xa8);
+
+
+typedef struct IDirect3D *LPDIRECT3D;
+typedef struct IDirect3D2 *LPDIRECT3D2;
+typedef struct IDirect3D3 *LPDIRECT3D3;
+typedef struct IDirect3D7 *LPDIRECT3D7;
+
+typedef struct IDirect3DLight *LPDIRECT3DLIGHT;
+
+typedef struct IDirect3DDevice *LPDIRECT3DDEVICE;
+typedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;
+typedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;
+typedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;
+
+typedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;
+typedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;
+typedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;
+
+typedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;
+typedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;
+typedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;
+
+typedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;
+typedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;
+
+typedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;
+
+typedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;
+typedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;
+
+/* ********************************************************************
+ Error Codes
+ ******************************************************************** */
+#define D3D_OK DD_OK
+#define D3DERR_BADMAJORVERSION MAKE_DDHRESULT(700)
+#define D3DERR_BADMINORVERSION MAKE_DDHRESULT(701)
+#define D3DERR_INVALID_DEVICE MAKE_DDHRESULT(705)
+#define D3DERR_INITFAILED MAKE_DDHRESULT(706)
+#define D3DERR_DEVICEAGGREGATED MAKE_DDHRESULT(707)
+#define D3DERR_EXECUTE_CREATE_FAILED MAKE_DDHRESULT(710)
+#define D3DERR_EXECUTE_DESTROY_FAILED MAKE_DDHRESULT(711)
+#define D3DERR_EXECUTE_LOCK_FAILED MAKE_DDHRESULT(712)
+#define D3DERR_EXECUTE_UNLOCK_FAILED MAKE_DDHRESULT(713)
+#define D3DERR_EXECUTE_LOCKED MAKE_DDHRESULT(714)
+#define D3DERR_EXECUTE_NOT_LOCKED MAKE_DDHRESULT(715)
+#define D3DERR_EXECUTE_FAILED MAKE_DDHRESULT(716)
+#define D3DERR_EXECUTE_CLIPPED_FAILED MAKE_DDHRESULT(717)
+#define D3DERR_TEXTURE_NO_SUPPORT MAKE_DDHRESULT(720)
+#define D3DERR_TEXTURE_CREATE_FAILED MAKE_DDHRESULT(721)
+#define D3DERR_TEXTURE_DESTROY_FAILED MAKE_DDHRESULT(722)
+#define D3DERR_TEXTURE_LOCK_FAILED MAKE_DDHRESULT(723)
+#define D3DERR_TEXTURE_UNLOCK_FAILED MAKE_DDHRESULT(724)
+#define D3DERR_TEXTURE_LOAD_FAILED MAKE_DDHRESULT(725)
+#define D3DERR_TEXTURE_SWAP_FAILED MAKE_DDHRESULT(726)
+#define D3DERR_TEXTURE_LOCKED MAKE_DDHRESULT(727)
+#define D3DERR_TEXTURE_NOT_LOCKED MAKE_DDHRESULT(728)
+#define D3DERR_TEXTURE_GETSURF_FAILED MAKE_DDHRESULT(729)
+#define D3DERR_MATRIX_CREATE_FAILED MAKE_DDHRESULT(730)
+#define D3DERR_MATRIX_DESTROY_FAILED MAKE_DDHRESULT(731)
+#define D3DERR_MATRIX_SETDATA_FAILED MAKE_DDHRESULT(732)
+#define D3DERR_MATRIX_GETDATA_FAILED MAKE_DDHRESULT(733)
+#define D3DERR_SETVIEWPORTDATA_FAILED MAKE_DDHRESULT(734)
+#define D3DERR_INVALIDCURRENTVIEWPORT MAKE_DDHRESULT(735)
+#define D3DERR_INVALIDPRIMITIVETYPE MAKE_DDHRESULT(736)
+#define D3DERR_INVALIDVERTEXTYPE MAKE_DDHRESULT(737)
+#define D3DERR_TEXTURE_BADSIZE MAKE_DDHRESULT(738)
+#define D3DERR_INVALIDRAMPTEXTURE MAKE_DDHRESULT(739)
+#define D3DERR_MATERIAL_CREATE_FAILED MAKE_DDHRESULT(740)
+#define D3DERR_MATERIAL_DESTROY_FAILED MAKE_DDHRESULT(741)
+#define D3DERR_MATERIAL_SETDATA_FAILED MAKE_DDHRESULT(742)
+#define D3DERR_MATERIAL_GETDATA_FAILED MAKE_DDHRESULT(743)
+#define D3DERR_INVALIDPALETTE MAKE_DDHRESULT(744)
+#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745)
+#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY MAKE_DDHRESULT(746)
+#define D3DERR_SURFACENOTINVIDMEM MAKE_DDHRESULT(747)
+#define D3DERR_LIGHT_SET_FAILED MAKE_DDHRESULT(750)
+#define D3DERR_LIGHTHASVIEWPORT MAKE_DDHRESULT(751)
+#define D3DERR_LIGHTNOTINTHISVIEWPORT MAKE_DDHRESULT(752)
+#define D3DERR_SCENE_IN_SCENE MAKE_DDHRESULT(760)
+#define D3DERR_SCENE_NOT_IN_SCENE MAKE_DDHRESULT(761)
+#define D3DERR_SCENE_BEGIN_FAILED MAKE_DDHRESULT(762)
+#define D3DERR_SCENE_END_FAILED MAKE_DDHRESULT(763)
+#define D3DERR_INBEGIN MAKE_DDHRESULT(770)
+#define D3DERR_NOTINBEGIN MAKE_DDHRESULT(771)
+#define D3DERR_NOVIEWPORTS MAKE_DDHRESULT(772)
+#define D3DERR_VIEWPORTDATANOTSET MAKE_DDHRESULT(773)
+#define D3DERR_VIEWPORTHASNODEVICE MAKE_DDHRESULT(774)
+#define D3DERR_NOCURRENTVIEWPORT MAKE_DDHRESULT(775)
+#define D3DERR_INVALIDVERTEXFORMAT MAKE_DDHRESULT(2048)
+#define D3DERR_COLORKEYATTACHED MAKE_DDHRESULT(2050)
+#define D3DERR_VERTEXBUFFEROPTIMIZED MAKE_DDHRESULT(2060)
+#define D3DERR_VBUF_CREATE_FAILED MAKE_DDHRESULT(2061)
+#define D3DERR_VERTEXBUFFERLOCKED MAKE_DDHRESULT(2062)
+#define D3DERR_VERTEXBUFFERUNLOCKFAILED MAKE_DDHRESULT(2063)
+#define D3DERR_ZBUFFER_NOTPRESENT MAKE_DDHRESULT(2070)
+#define D3DERR_STENCILBUFFER_NOTPRESENT MAKE_DDHRESULT(2071)
+
+#define D3DERR_WRONGTEXTUREFORMAT MAKE_DDHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_DDHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG MAKE_DDHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_DDHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG MAKE_DDHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS MAKE_DDHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_DDHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_DDHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE MAKE_DDHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_DDHRESULT(2082)
+#define D3DERR_TOOMANYPRIMITIVES MAKE_DDHRESULT(2083)
+#define D3DERR_INVALIDMATRIX MAKE_DDHRESULT(2084)
+#define D3DERR_TOOMANYVERTICES MAKE_DDHRESULT(2085)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_DDHRESULT(2086)
+
+#define D3DERR_INVALIDSTATEBLOCK MAKE_DDHRESULT(2100)
+#define D3DERR_INBEGINSTATEBLOCK MAKE_DDHRESULT(2101)
+#define D3DERR_NOTINBEGINSTATEBLOCK MAKE_DDHRESULT(2102)
+
+/* ********************************************************************
+ Enums
+ ******************************************************************** */
+#define D3DNEXT_NEXT __MSABI_LONG(0x01)
+#define D3DNEXT_HEAD __MSABI_LONG(0x02)
+#define D3DNEXT_TAIL __MSABI_LONG(0x04)
+
+#define D3DDP_WAIT __MSABI_LONG(0x00000001)
+#define D3DDP_OUTOFORDER __MSABI_LONG(0x00000002)
+#define D3DDP_DONOTCLIP __MSABI_LONG(0x00000004)
+#define D3DDP_DONOTUPDATEEXTENTS __MSABI_LONG(0x00000008)
+#define D3DDP_DONOTLIGHT __MSABI_LONG(0x00000010)
+
+/* ********************************************************************
+ Types and structures
+ ******************************************************************** */
+typedef DWORD D3DVIEWPORTHANDLE, *LPD3DVIEWPORTHANDLE;
+
+
+/*****************************************************************************
+ * IDirect3D interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirect3D
+DECLARE_INTERFACE_(IDirect3D,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D methods ***/
+ STDMETHOD(Initialize)(THIS_ REFIID riid) PURE;
+ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;
+ STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial **material, IUnknown *outer) PURE;
+ STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport **viewport, IUnknown *outer) PURE;
+ STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D methods ***/
+#define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
+#define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+#define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D_AddRef(p) (p)->AddRef()
+#define IDirect3D_Release(p) (p)->Release()
+/*** IDirect3D methods ***/
+#define IDirect3D_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3D_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
+#define IDirect3D_CreateLight(p,a,b) (p)->CreateLight(a,b)
+#define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
+#define IDirect3D_FindDevice(p,a,b) (p)->FindDevice(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3D2 interface
+ */
+#define INTERFACE IDirect3D2
+DECLARE_INTERFACE_(IDirect3D2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D2 methods ***/
+ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;
+ STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial2 **material, IUnknown *outer) PURE;
+ STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport2 **viewport, IUnknown *outer) PURE;
+ STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;
+ STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface *surface,
+ struct IDirect3DDevice2 **device) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D2 methods ***/
+#define IDirect3D2_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D2_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
+#define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+#define IDirect3D2_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
+#define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D2_AddRef(p) (p)->AddRef()
+#define IDirect3D2_Release(p) (p)->Release()
+/*** IDirect3D2 methods ***/
+#define IDirect3D2_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
+#define IDirect3D2_CreateLight(p,a,b) (p)->CreateLight(a,b)
+#define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
+#define IDirect3D2_FindDevice(p,a,b) (p)->FindDevice(a,b)
+#define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3D3 interface
+ */
+#define INTERFACE IDirect3D3
+DECLARE_INTERFACE_(IDirect3D3,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D3 methods ***/
+ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(CreateLight)(THIS_ struct IDirect3DLight **light, IUnknown *outer) PURE;
+ STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial3 **material, IUnknown *outer) PURE;
+ STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport3 **viewport, IUnknown *outer) PURE;
+ STDMETHOD(FindDevice)(THIS_ D3DFINDDEVICESEARCH *search, D3DFINDDEVICERESULT *result) PURE;
+ STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface4 *surface,
+ struct IDirect3DDevice3 **device, IUnknown *outer) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc, struct IDirect3DVertexBuffer **buffer,
+ DWORD flags, IUnknown *outer) PURE;
+ STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(EvictManagedTextures)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D3 methods ***/
+#define IDirect3D3_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D3_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
+#define IDirect3D3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3D3_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+#define IDirect3D3_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
+#define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d)
+#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d)
+#define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)
+#define IDirect3D3_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D3_AddRef(p) (p)->AddRef()
+#define IDirect3D3_Release(p) (p)->Release()
+/*** IDirect3D3 methods ***/
+#define IDirect3D3_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
+#define IDirect3D3_CreateLight(p,a,b) (p)->CreateLight(a,b)
+#define IDirect3D3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3D3_CreateViewport(p,a,b) (p)->CreateViewport(a,b)
+#define IDirect3D3_FindDevice(p,a,b) (p)->FindDevice(a,b)
+#define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d)
+#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d)
+#define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c)
+#define IDirect3D3_EvictManagedTextures(p) (p)->EvictManagedTextures()
+#endif
+
+/*****************************************************************************
+ * IDirect3D7 interface
+ */
+#define INTERFACE IDirect3D7
+DECLARE_INTERFACE_(IDirect3D7,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D7 methods ***/
+ STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7 cb, void *ctx) PURE;
+ STDMETHOD(CreateDevice)(THIS_ REFCLSID rclsid, IDirectDrawSurface7 *surface,
+ struct IDirect3DDevice7 **device) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ D3DVERTEXBUFFERDESC *desc,
+ struct IDirect3DVertexBuffer7 **buffer, DWORD flags) PURE;
+ STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID device_iid, LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(EvictManagedTextures)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D3 methods ***/
+#define IDirect3D7_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)
+#define IDirect3D7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c)
+#define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)
+#define IDirect3D7_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D7_AddRef(p) (p)->AddRef()
+#define IDirect3D7_Release(p) (p)->Release()
+/*** IDirect3D3 methods ***/
+#define IDirect3D7_EnumDevices(p,a,b) (p)->EnumDevices(a,b)
+#define IDirect3D7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->CreateVertexBuffer(a,b,c)
+#define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c)
+#define IDirect3D7_EvictManagedTextures(p) (p)->EvictManagedTextures()
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DLight interface
+ */
+#define INTERFACE IDirect3DLight
+DECLARE_INTERFACE_(IDirect3DLight,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DLight methods ***/
+ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+ STDMETHOD(SetLight)(THIS_ D3DLIGHT *data) PURE;
+ STDMETHOD(GetLight)(THIS_ D3DLIGHT *data) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DLight_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DLight_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DLight methods ***/
+#define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DLight_SetLight(p,a) (p)->lpVtbl->SetLight(p,a)
+#define IDirect3DLight_GetLight(p,a) (p)->lpVtbl->GetLight(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DLight_AddRef(p) (p)->AddRef()
+#define IDirect3DLight_Release(p) (p)->Release()
+/*** IDirect3DLight methods ***/
+#define IDirect3DLight_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3DLight_SetLight(p,a) (p)->SetLight(a)
+#define IDirect3DLight_GetLight(p,a) (p)->GetLight(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DMaterial interface
+ */
+#define INTERFACE IDirect3DMaterial
+DECLARE_INTERFACE_(IDirect3DMaterial,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DMaterial methods ***/
+ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+ STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+ STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DMATERIALHANDLE *handle) PURE;
+ STDMETHOD(Reserve)(THIS) PURE;
+ STDMETHOD(Unreserve)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DMaterial_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DMaterial_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DMaterial methods ***/
+#define IDirect3DMaterial_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#define IDirect3DMaterial_Reserve(p) (p)->lpVtbl->Reserve(p)
+#define IDirect3DMaterial_Unreserve(p) (p)->lpVtbl->Unreserve(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DMaterial_AddRef(p) (p)->AddRef()
+#define IDirect3DMaterial_Release(p) (p)->Release()
+/*** IDirect3DMaterial methods ***/
+#define IDirect3DMaterial_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#define IDirect3DMaterial_Reserve(p) (p)->Reserve()
+#define IDirect3DMaterial_Unreserve(p) (p)->Unreserve()
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DMaterial2 interface
+ */
+#define INTERFACE IDirect3DMaterial2
+DECLARE_INTERFACE_(IDirect3DMaterial2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DMaterial2 methods ***/
+ STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+ STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DMATERIALHANDLE *handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DMaterial2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DMaterial2 methods ***/
+#define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DMaterial2_AddRef(p) (p)->AddRef()
+#define IDirect3DMaterial2_Release(p) (p)->Release()
+/*** IDirect3DMaterial2 methods ***/
+#define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DMaterial3 interface
+ */
+#define INTERFACE IDirect3DMaterial3
+DECLARE_INTERFACE_(IDirect3DMaterial3,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DMaterial3 methods ***/
+ STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL *data) PURE;
+ STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DMaterial3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DMaterial3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DMaterial3 methods ***/
+#define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DMaterial3_AddRef(p) (p)->AddRef()
+#define IDirect3DMaterial3_Release(p) (p)->Release()
+/*** IDirect3DMaterial3 methods ***/
+#define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DTexture interface
+ */
+#define INTERFACE IDirect3DTexture
+DECLARE_INTERFACE_(IDirect3DTexture,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DTexture methods ***/
+ STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, IDirectDrawSurface *surface) PURE;
+ STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice *device, D3DTEXTUREHANDLE *handle) PURE;
+ STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE;
+ STDMETHOD(Load)(THIS_ IDirect3DTexture *texture) PURE;
+ STDMETHOD(Unload)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture methods ***/
+#define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)
+#define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a)
+#define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture_Release(p) (p)->Release()
+/*** IDirect3DTexture methods ***/
+#define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)
+#define IDirect3DTexture_Load(p,a) (p)->Load(a)
+#define IDirect3DTexture_Unload(p) (p)->Unload()
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DTexture2 interface
+ */
+#define INTERFACE IDirect3DTexture2
+DECLARE_INTERFACE_(IDirect3DTexture2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DTexture2 methods ***/
+ STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice2 *device, D3DTEXTUREHANDLE *handle) PURE;
+ STDMETHOD(PaletteChanged)(THIS_ DWORD dwStart, DWORD dwCount) PURE;
+ STDMETHOD(Load)(THIS_ IDirect3DTexture2 *texture) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture2 methods ***/
+#define IDirect3DTexture2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)
+#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)
+#define IDirect3DTexture2_Load(p,a) (p)->lpVtbl->Load(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture2_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture2_Release(p) (p)->Release()
+/*** IDirect3DTexture2 methods ***/
+#define IDirect3DTexture2_GetHandle(p,a,b) (p)->GetHandle(a,b)
+#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)
+#define IDirect3DTexture2_Load(p,a) (p)->Load(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DViewport interface
+ */
+#define INTERFACE IDirect3DViewport
+DECLARE_INTERFACE_(IDirect3DViewport,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DViewport methods ***/
+ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+ STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+ STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;
+ STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;
+ STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;
+ STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;
+ STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;
+ STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;
+ STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;
+ STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DViewport_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DViewport_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DViewport methods ***/
+#define IDirect3DViewport_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DViewport_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DViewport_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
+#define IDirect3DViewport_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)
+#define IDirect3DViewport_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)
+#define IDirect3DViewport_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)
+#define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)
+#define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)
+#define IDirect3DViewport_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)
+#define IDirect3DViewport_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DViewport_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DViewport_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DViewport_AddRef(p) (p)->AddRef()
+#define IDirect3DViewport_Release(p) (p)->Release()
+/*** IDirect3DViewport methods ***/
+#define IDirect3DViewport_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3DViewport_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DViewport_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
+#define IDirect3DViewport_LightElements(p,a,b) (p)->LightElements(a,b)
+#define IDirect3DViewport_SetBackground(p,a) (p)->SetBackground(a)
+#define IDirect3DViewport_GetBackground(p,a,b) (p)->GetBackground(a,b)
+#define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)
+#define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)
+#define IDirect3DViewport_Clear(p,a,b,c) (p)->Clear(a,b,c)
+#define IDirect3DViewport_AddLight(p,a) (p)->AddLight(a)
+#define IDirect3DViewport_DeleteLight(p,a) (p)->DeleteLight(a)
+#define IDirect3DViewport_NextLight(p,a,b,c) (p)->NextLight(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DViewport2 interface
+ */
+#define INTERFACE IDirect3DViewport2
+DECLARE_INTERFACE_(IDirect3DViewport2,IDirect3DViewport)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DViewport methods ***/
+ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+ STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+ STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;
+ STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;
+ STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;
+ STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;
+ STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;
+ STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;
+ STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;
+ STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;
+ /*** IDirect3DViewport2 methods ***/
+ STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+ STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DViewport2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DViewport2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DViewport2_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DViewport2_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
+#define IDirect3DViewport2_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)
+#define IDirect3DViewport2_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)
+#define IDirect3DViewport2_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)
+#define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)
+#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)
+#define IDirect3DViewport2_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)
+#define IDirect3DViewport2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DViewport2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DViewport2_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)
+#define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DViewport2_AddRef(p) (p)->AddRef()
+#define IDirect3DViewport2_Release(p) (p)->Release()
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport2_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3DViewport2_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DViewport2_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
+#define IDirect3DViewport2_LightElements(p,a,b) (p)->LightElements(a,b)
+#define IDirect3DViewport2_SetBackground(p,a) (p)->SetBackground(a)
+#define IDirect3DViewport2_GetBackground(p,a,b) (p)->GetBackground(a,b)
+#define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)
+#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)
+#define IDirect3DViewport2_Clear(p,a,b,c) (p)->Clear(a,b,c)
+#define IDirect3DViewport2_AddLight(p,a) (p)->AddLight(a)
+#define IDirect3DViewport2_DeleteLight(p,a) (p)->DeleteLight(a)
+#define IDirect3DViewport2_NextLight(p,a,b,c) (p)->NextLight(a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a)
+#define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DViewport3 interface
+ */
+#define INTERFACE IDirect3DViewport3
+DECLARE_INTERFACE_(IDirect3DViewport3,IDirect3DViewport2)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DViewport methods ***/
+ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+ STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT *data) PURE;
+ STDMETHOD(TransformVertices)(THIS_ DWORD vertex_count, D3DTRANSFORMDATA *data, DWORD flags, DWORD *offscreen) PURE;
+ STDMETHOD(LightElements)(THIS_ DWORD element_count, D3DLIGHTDATA *data) PURE;
+ STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE hMat) PURE;
+ STDMETHOD(GetBackground)(THIS_ D3DMATERIALHANDLE *material, BOOL *valid) PURE;
+ STDMETHOD(SetBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(GetBackgroundDepth)(THIS_ IDirectDrawSurface **surface, BOOL *valid) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags) PURE;
+ STDMETHOD(AddLight)(THIS_ IDirect3DLight *light) PURE;
+ STDMETHOD(DeleteLight)(THIS_ IDirect3DLight *light) PURE;
+ STDMETHOD(NextLight)(THIS_ IDirect3DLight *ref, IDirect3DLight **light, DWORD flags) PURE;
+ /*** IDirect3DViewport2 methods ***/
+ STDMETHOD(GetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+ STDMETHOD(SetViewport2)(THIS_ D3DVIEWPORT2 *data) PURE;
+ /*** IDirect3DViewport3 methods ***/
+ STDMETHOD(SetBackgroundDepth2)(THIS_ IDirectDrawSurface4 *surface) PURE;
+ STDMETHOD(GetBackgroundDepth2)(THIS_ IDirectDrawSurface4 **surface, BOOL *valid) PURE;
+ STDMETHOD(Clear2)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, DWORD color, D3DVALUE z, DWORD stencil) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DViewport3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DViewport3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirect3DViewport3_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DViewport3_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)
+#define IDirect3DViewport3_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)
+#define IDirect3DViewport3_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)
+#define IDirect3DViewport3_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)
+#define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)
+#define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)
+#define IDirect3DViewport3_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)
+#define IDirect3DViewport3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DViewport3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DViewport3_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)
+#define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)
+/*** IDirect3DViewport3 methods ***/
+#define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->lpVtbl->SetBackgroundDepth2(p,a)
+#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b)
+#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->lpVtbl->Clear2(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DViewport3_AddRef(p) (p)->AddRef()
+#define IDirect3DViewport3_Release(p) (p)->Release()
+/*** IDirect3Viewport methods ***/
+#define IDirect3DViewport3_Initialize(p,a) (p)->Initialize(a)
+#define IDirect3DViewport3_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DViewport3_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)
+#define IDirect3DViewport3_LightElements(p,a,b) (p)->LightElements(a,b)
+#define IDirect3DViewport3_SetBackground(p,a) (p)->SetBackground(a)
+#define IDirect3DViewport3_GetBackground(p,a,b) (p)->GetBackground(a,b)
+#define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)
+#define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)
+#define IDirect3DViewport3_Clear(p,a,b,c) (p)->Clear(a,b,c)
+#define IDirect3DViewport3_AddLight(p,a) (p)->AddLight(a)
+#define IDirect3DViewport3_DeleteLight(p,a) (p)->DeleteLight(a)
+#define IDirect3DViewport3_NextLight(p,a,b,c) (p)->NextLight(a,b,c)
+/*** IDirect3DViewport2 methods ***/
+#define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a)
+#define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a)
+/*** IDirect3DViewport3 methods ***/
+#define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->SetBackgroundDepth2(a)
+#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b)
+#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->Clear2(a,b,c,d,e,f)
+#endif
+
+
+
+/*****************************************************************************
+ * IDirect3DExecuteBuffer interface
+ */
+#define INTERFACE IDirect3DExecuteBuffer
+DECLARE_INTERFACE_(IDirect3DExecuteBuffer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DExecuteBuffer methods ***/
+ STDMETHOD(Initialize)(THIS_ struct IDirect3DDevice *device, D3DEXECUTEBUFFERDESC *desc) PURE;
+ STDMETHOD(Lock)(THIS_ D3DEXECUTEBUFFERDESC *desc) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(SetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE;
+ STDMETHOD(GetExecuteData)(THIS_ D3DEXECUTEDATA *data) PURE;
+ STDMETHOD(Validate)(THIS_ DWORD *offset, LPD3DVALIDATECALLBACK cb, void *ctx, DWORD reserved) PURE;
+ STDMETHOD(Optimize)(THIS_ DWORD dwDummy) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DExecuteBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DExecuteBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DExecuteBuffer methods ***/
+#define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirect3DExecuteBuffer_Lock(p,a) (p)->lpVtbl->Lock(p,a)
+#define IDirect3DExecuteBuffer_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a)
+#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a)
+#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d)
+#define IDirect3DExecuteBuffer_Optimize(p,a) (p)->lpVtbl->Optimize(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DExecuteBuffer_AddRef(p) (p)->AddRef()
+#define IDirect3DExecuteBuffer_Release(p) (p)->Release()
+/*** IDirect3DExecuteBuffer methods ***/
+#define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirect3DExecuteBuffer_Lock(p,a) (p)->Lock(a)
+#define IDirect3DExecuteBuffer_Unlock(p) (p)->Unlock()
+#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a)
+#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a)
+#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d)
+#define IDirect3DExecuteBuffer_Optimize(p,a) (p)->Optimize(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice interface
+ */
+#define INTERFACE IDirect3DDevice
+DECLARE_INTERFACE_(IDirect3DDevice,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice methods ***/
+ STDMETHOD(Initialize)(THIS_ IDirect3D *d3d, GUID *guid, D3DDEVICEDESC *desc) PURE;
+ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;
+ STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture *tex1, IDirect3DTexture *tex2) PURE;
+ STDMETHOD(CreateExecuteBuffer)(THIS_ D3DEXECUTEBUFFERDESC *desc,
+ IDirect3DExecuteBuffer **buffer, IUnknown *outer) PURE;
+ STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;
+ STDMETHOD(Execute)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport,
+ DWORD flags) PURE;
+ STDMETHOD(AddViewport)(THIS_ IDirect3DViewport *viewport) PURE;
+ STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport *viewport) PURE;
+ STDMETHOD(NextViewport)(THIS_ IDirect3DViewport *ref,
+ IDirect3DViewport **viewport, DWORD flags) PURE;
+ STDMETHOD(Pick)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport,
+ DWORD flags, D3DRECT *rect) PURE;
+ STDMETHOD(GetPickRecords)(THIS_ DWORD *count, D3DPICKRECORD *records) PURE;
+ STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(CreateMatrix)(THIS_ D3DMATRIXHANDLE *matrix) PURE;
+ STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE handle, D3DMATRIX *matrix) PURE;
+ STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE D3DMatHandle) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D **d3d) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice methods ***/
+#define IDirect3DDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirect3DDevice_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b)
+#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c)
+#define IDirect3DDevice_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)
+#define IDirect3DDevice_Execute(p,a,b,c) (p)->lpVtbl->Execute(p,a,b,c)
+#define IDirect3DDevice_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)
+#define IDirect3DDevice_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)
+#define IDirect3DDevice_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)
+#define IDirect3DDevice_Pick(p,a,b,c,d) (p)->lpVtbl->Pick(p,a,b,c,d)
+#define IDirect3DDevice_GetPickRecords(p,a,b) (p)->lpVtbl->GetPickRecords(p,a,b)
+#define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice_CreateMatrix(p,a) (p)->lpVtbl->CreateMatrix(p,a)
+#define IDirect3DDevice_SetMatrix(p,a,b) (p)->lpVtbl->SetMatrix(p,a,b)
+#define IDirect3DDevice_GetMatrix(p,a,b) (p)->lpVtbl->GetMatrix(p,a,b)
+#define IDirect3DDevice_DeleteMatrix(p,a) (p)->lpVtbl->DeleteMatrix(p,a)
+#define IDirect3DDevice_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice_Release(p) (p)->Release()
+/*** IDirect3DDevice methods ***/
+#define IDirect3DDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirect3DDevice_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b)
+#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c)
+#define IDirect3DDevice_GetStats(p,a) (p)->GetStats(a)
+#define IDirect3DDevice_Execute(p,a,b,c) (p)->Execute(a,b,c)
+#define IDirect3DDevice_AddViewport(p,a) (p)->AddViewport(a)
+#define IDirect3DDevice_DeleteViewport(p,a) (p)->DeleteViewport(a)
+#define IDirect3DDevice_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)
+#define IDirect3DDevice_Pick(p,a,b,c,d) (p)->Pick(a,b,c,d)
+#define IDirect3DDevice_GetPickRecords(p,a,b) (p)->GetPickRecords(a,b)
+#define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice_CreateMatrix(p,a) (p)->CreateMatrix(a)
+#define IDirect3DDevice_SetMatrix(p,a,b) (p)->SetMatrix(a,b)
+#define IDirect3DDevice_GetMatrix(p,a,b) (p)->GetMatrix(a,b)
+#define IDirect3DDevice_DeleteMatrix(p,a) (p)->DeleteMatrix(a)
+#define IDirect3DDevice_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice2 interface
+ */
+#define INTERFACE IDirect3DDevice2
+DECLARE_INTERFACE_(IDirect3DDevice2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice2 methods ***/
+ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;
+ STDMETHOD(SwapTextureHandles)(THIS_ IDirect3DTexture2 *tex1, IDirect3DTexture2 *tex2) PURE;
+ STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;
+ STDMETHOD(AddViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;
+ STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;
+ STDMETHOD(NextViewport)(THIS_ IDirect3DViewport2 *ref,
+ IDirect3DViewport2 **viewport, DWORD flags) PURE;
+ STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D2 **d3d) PURE;
+ /*** DrawPrimitive API ***/
+ STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport2 *viewport) PURE;
+ STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport2 **viewport) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface *surface, DWORD flags) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface **surface) PURE;
+ STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dpt,D3DVERTEXTYPE dwVertexTypeDesc,DWORD dwFlags) PURE;
+ STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,
+ void *vertices, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(Vertex)(THIS_ void *vertex) PURE;
+ STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE;
+ STDMETHOD(End)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;
+ STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE;
+ STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,
+ void *vertices, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, D3DVERTEXTYPE vertex_type,
+ void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice2 methods ***/
+#define IDirect3DDevice2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b)
+#define IDirect3DDevice2_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)
+#define IDirect3DDevice2_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)
+#define IDirect3DDevice2_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)
+#define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)
+#define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice2_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice2_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice2_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a)
+#define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a)
+#define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice2_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice2_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)
+#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)
+#define IDirect3DDevice2_Vertex(p,a) (p)->lpVtbl->Vertex(p,a)
+#define IDirect3DDevice2_Index(p,a) (p)->lpVtbl->Index(p,a)
+#define IDirect3DDevice2_End(p,a) (p)->lpVtbl->End(p,a)
+#define IDirect3DDevice2_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice2_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice2_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b)
+#define IDirect3DDevice2_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b)
+#define IDirect3DDevice2_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice2_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice2_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice2_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice2_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice2_Release(p) (p)->Release()
+/*** IDirect3DDevice2 methods ***/
+#define IDirect3DDevice2_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b)
+#define IDirect3DDevice2_GetStats(p,a) (p)->GetStats(a)
+#define IDirect3DDevice2_AddViewport(p,a) (p)->AddViewport(a)
+#define IDirect3DDevice2_DeleteViewport(p,a) (p)->DeleteViewport(a)
+#define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)
+#define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice2_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice2_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice2_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a)
+#define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a)
+#define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice2_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
+#define IDirect3DDevice2_Begin(p,a,b,c) (p)->Begin(a,b,c)
+#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e)
+#define IDirect3DDevice2_Vertex(p,a) (p)->Vertex(a)
+#define IDirect3DDevice2_Index(p,a) (p)->Index(a)
+#define IDirect3DDevice2_End(p,a) (p)->End(a)
+#define IDirect3DDevice2_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice2_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice2_GetLightState(p,a,b) (p)->GetLightState(a,b)
+#define IDirect3DDevice2_SetLightState(p,a,b) (p)->SetLightState(a,b)
+#define IDirect3DDevice2_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice2_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)
+#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
+#define IDirect3DDevice2_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice2_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice3 interface
+ */
+#define INTERFACE IDirect3DDevice3
+DECLARE_INTERFACE_(IDirect3DDevice3,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice3 methods ***/
+ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc) PURE;
+ STDMETHOD(GetStats)(THIS_ D3DSTATS *stats) PURE;
+ STDMETHOD(AddViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;
+ STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;
+ STDMETHOD(NextViewport)(THIS_ IDirect3DViewport3 *ref,
+ IDirect3DViewport3 **viewport, DWORD flags) PURE;
+ STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D3 **d3d) PURE;
+ /*** DrawPrimitive API ***/
+ STDMETHOD(SetCurrentViewport)(THIS_ IDirect3DViewport3 *viewport) PURE;
+ STDMETHOD(GetCurrentViewport)(THIS_ IDirect3DViewport3 **viewport) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface4 *surface, DWORD flags) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface4 **surface) PURE;
+ STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE d3dptPrimitiveType,DWORD dwVertexTypeDesc, DWORD dwFlags) PURE;
+ STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ void *vertices, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(Vertex)(THIS_ void *vertex) PURE;
+ STDMETHOD(Index)(THIS_ WORD wVertexIndex) PURE;
+ STDMETHOD(End)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;
+ STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, LPDWORD lpdwLightState) PURE;
+ STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE dwLightStateType, DWORD dwLightState) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD vertex_type,
+ void *vertices, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+ STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count,
+ DWORD flags) PURE;
+ STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb,
+ DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer *vb,
+ WORD *indices, DWORD index_count, DWORD flags) PURE;
+ STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count,
+ DWORD flags, DWORD *ret) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirect3DTexture2 **texture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirect3DTexture2 *texture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice3 methods ***/
+#define IDirect3DDevice3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirect3DDevice3_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)
+#define IDirect3DDevice3_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)
+#define IDirect3DDevice3_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)
+#define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)
+#define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice3_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice3_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice3_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a)
+#define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a)
+#define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice3_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice3_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)
+#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)
+#define IDirect3DDevice3_Vertex(p,a) (p)->lpVtbl->Vertex(p,a)
+#define IDirect3DDevice3_Index(p,a) (p)->lpVtbl->Index(p,a)
+#define IDirect3DDevice3_End(p,a) (p)->lpVtbl->End(p,a)
+#define IDirect3DDevice3_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice3_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice3_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b)
+#define IDirect3DDevice3_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b)
+#define IDirect3DDevice3_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice3_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice3_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e)
+#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)
+#define IDirect3DDevice3_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice3_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice3_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice3_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice3_Release(p) (p)->Release()
+/*** IDirect3DDevice3 methods ***/
+#define IDirect3DDevice3_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirect3DDevice3_GetStats(p,a) (p)->GetStats(a)
+#define IDirect3DDevice3_AddViewport(p,a) (p)->AddViewport(a)
+#define IDirect3DDevice3_DeleteViewport(p,a) (p)->DeleteViewport(a)
+#define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)
+#define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice3_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice3_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice3_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a)
+#define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a)
+#define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice3_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
+#define IDirect3DDevice3_Begin(p,a,b,c) (p)->Begin(a,b,c)
+#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e)
+#define IDirect3DDevice3_Vertex(p,a) (p)->Vertex(a)
+#define IDirect3DDevice3_Index(p,a) (p)->Index(a)
+#define IDirect3DDevice3_End(p,a) (p)->End(a)
+#define IDirect3DDevice3_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice3_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice3_GetLightState(p,a,b) (p)->GetLightState(a,b)
+#define IDirect3DDevice3_SetLightState(p,a,b) (p)->SetLightState(a,b)
+#define IDirect3DDevice3_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice3_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
+#define IDirect3DDevice3_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice3_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)
+#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e)
+#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e)
+#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e)
+#define IDirect3DDevice3_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice3_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice3_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice7 interface
+ */
+#define INTERFACE IDirect3DDevice7
+DECLARE_INTERFACE_(IDirect3DDevice7,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice7 methods ***/
+ STDMETHOD(GetCaps)(THIS_ D3DDEVICEDESC7 *desc) PURE;
+ STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D7 **d3d) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ IDirectDrawSurface7 *surface, DWORD flags) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ IDirectDrawSurface7 **surface) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD count, D3DRECT *rects, DWORD flags, D3DCOLOR color, D3DVALUE z, DWORD stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(SetViewport)(THIS_ D3DVIEWPORT7 *data) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT7 *data) PURE;
+ STDMETHOD(SetMaterial)(THIS_ D3DMATERIAL7 *data) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL7 *data) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD idx, D3DLIGHT7 *data) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, DWORD dwRenderState) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE dwRenderStateType, LPDWORD lpdwRenderState) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ LPDWORD lpdwBlockHandle) PURE;
+ STDMETHOD(PreLoad)(THIS_ IDirectDrawSurface7 *surface) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ void *vertices, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS *clip_status) PURE;
+ STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE primitive_type, DWORD fvf,
+ D3DDRAWPRIMITIVESTRIDEDDATA *strided_data, DWORD vertex_count, WORD *indices, DWORD index_count,
+ DWORD flags) PURE;
+ STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb,
+ DWORD start_vertex, DWORD vertex_count, DWORD flags) PURE;
+ STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE primitive_type, struct IDirect3DVertexBuffer7 *vb,
+ DWORD start_vertex, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) PURE;
+ STDMETHOD(ComputeSphereVisibility)(THIS_ D3DVECTOR *centers, D3DVALUE *radii, DWORD sphere_count,
+ DWORD flags, DWORD *ret) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 **surface) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD stage, IDirectDrawSurface7 *surface) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,LPDWORD lpdwState) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD dwStage,D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,DWORD dwState) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ LPDWORD lpdwPasses) PURE;
+ STDMETHOD(ApplyStateBlock)(THIS_ DWORD dwBlockHandle) PURE;
+ STDMETHOD(CaptureStateBlock)(THIS_ DWORD dwBlockHandle) PURE;
+ STDMETHOD(DeleteStateBlock)(THIS_ DWORD dwBlockHandle) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE d3dsbType,LPDWORD lpdwBlockHandle) PURE;
+ STDMETHOD(Load)(THIS_ IDirectDrawSurface7 *dst_surface, POINT *dst_point,
+ IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD dwLightIndex,BOOL bEnable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD dwLightIndex,BOOL *pbEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD dwIndex,D3DVALUE *pPlaneEquation) PURE;
+ STDMETHOD(GetInfo)(THIS_ DWORD info_id, void *info, DWORD info_size) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice7 methods ***/
+#define IDirect3DDevice7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)
+#define IDirect3DDevice7_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice7_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice7_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice7_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice7_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice7_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice7_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice7_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice7_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice7_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice7_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice7_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice7_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice7_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice7_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice7_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice7_PreLoad(p,a) (p)->lpVtbl->PreLoad(p,a)
+#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice7_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice7_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)
+#define IDirect3DDevice7_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice7_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice7_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DDevice7_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice7_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice7_Release(p) (p)->Release()
+/*** IDirect3DDevice7 methods ***/
+#define IDirect3DDevice7_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)
+#define IDirect3DDevice7_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice7_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice7_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice7_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
+#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice7_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice7_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice7_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice7_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice7_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice7_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice7_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice7_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice7_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice7_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice7_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice7_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice7_PreLoad(p,a) (p)->PreLoad(a)
+#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)
+#define IDirect3DDevice7_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice7_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)
+#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e)
+#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g)
+#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e)
+#define IDirect3DDevice7_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice7_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice7_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a)
+#define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a)
+#define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a)
+#define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DDevice7_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c)
+#endif
+
+
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer interface
+ */
+#define INTERFACE IDirect3DVertexBuffer
+DECLARE_INTERFACE_(IDirect3DVertexBuffer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVertexBuffer methods ***/
+ STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,
+ IDirect3DVertexBuffer *src_buffer, DWORD src_idx,
+ IDirect3DDevice3 *device, DWORD flags) PURE;
+ STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE;
+ STDMETHOD(Optimize)(THIS_ IDirect3DDevice3 *device, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer methods ***/
+#define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c)
+#define IDirect3DVertexBuffer_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a)
+#define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer_Release(p) (p)->Release()
+/*** IDirect3DVertexBuffer methods ***/
+#define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->Lock(a,b,c)
+#define IDirect3DVertexBuffer_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a)
+#define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->Optimize(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer7 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer7
+DECLARE_INTERFACE_(IDirect3DVertexBuffer7,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVertexBuffer7 methods ***/
+ STDMETHOD(Lock)(THIS_ DWORD flags, void **data, DWORD *data_size) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,
+ IDirect3DVertexBuffer7 *src_buffer, DWORD src_idx,
+ IDirect3DDevice7 *device, DWORD flags) PURE;
+ STDMETHOD(GetVertexBufferDesc)(THIS_ D3DVERTEXBUFFERDESC *desc) PURE;
+ STDMETHOD(Optimize)(THIS_ IDirect3DDevice7 *device, DWORD flags) PURE;
+ STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count,
+ D3DDRAWPRIMITIVESTRIDEDDATA *data, DWORD fvf, IDirect3DDevice7 *device, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer7 methods ***/
+#define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c)
+#define IDirect3DVertexBuffer7_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a)
+#define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b)
+#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer7_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer7_Release(p) (p)->Release()
+/*** IDirect3DVertexBuffer7 methods ***/
+#define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->Lock(a,b,c)
+#define IDirect3DVertexBuffer7_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)
+#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a)
+#define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->Optimize(a,b)
+#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g)
+#endif
+
+#endif /* __WINE_D3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl
new file mode 100644
index 00000000..b79591ae
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10.idl
@@ -0,0 +1,1611 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgi.idl";
+import "d3dcommon.idl";
+
+cpp_quote("#ifndef _D3D10_CONSTANTS")
+cpp_quote("#define _D3D10_CONSTANTS")
+const float D3D10_DEFAULT_BLEND_FACTOR_ALPHA = 1.0;
+const float D3D10_DEFAULT_BLEND_FACTOR_BLUE = 1.0;
+const float D3D10_DEFAULT_BLEND_FACTOR_GREEN = 1.0;
+const float D3D10_DEFAULT_BLEND_FACTOR_RED = 1.0;
+const float D3D10_DEFAULT_BORDER_COLOR_COMPONENT = 0.0;
+const float D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS = 0.0;
+const float D3D10_DEFAULT_DEPTH_BIAS_CLAMP = 0.0;
+const float D3D10_DEFAULT_MAX_ANISOTROPY = 16.0;
+const float D3D10_DEFAULT_MIP_LOD_BIAS = 0.0;
+const float D3D10_DEFAULT_VIEWPORT_MAX_DEPTH = 0.0;
+const float D3D10_DEFAULT_VIEWPORT_MIN_DEPTH = 0.0;
+const float D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP = 0.6;
+const float D3D10_FLOAT32_MAX = 3.402823466e+38;
+const float D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP = 0.6;
+const float D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR = 2.4;
+const float D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR = 1.0;
+const float D3D10_FLOAT_TO_SRGB_OFFSET = 0.055;
+const float D3D10_FLOAT_TO_SRGB_SCALE_1 = 12.92;
+const float D3D10_FLOAT_TO_SRGB_SCALE_2 = 1.055;
+const float D3D10_FLOAT_TO_SRGB_THRESHOLD = 0.0031308;
+const float D3D10_FTOI_INSTRUCTION_MAX_INPUT = 2147483647.999;
+const float D3D10_FTOI_INSTRUCTION_MIN_INPUT = -2147483648.999;
+const float D3D10_FTOU_INSTRUCTION_MAX_INPUT = 4294967295.999;
+const float D3D10_FTOU_INSTRUCTION_MIN_INPUT = 0.0;
+const float D3D10_LINEAR_GAMMA = 1.0;
+const float D3D10_MAX_BORDER_COLOR_COMPONENT = 1.0;
+const float D3D10_MAX_DEPTH = 1.0;
+const float D3D10_MAX_POSITION_VALUE = 3.402823466e+34;
+const float D3D10_MIN_BORDER_COLOR_COMPONENT = 0.0;
+const float D3D10_MIN_DEPTH = 0.0;
+const float D3D10_MIP_LOD_BIAS_MAX = 15.99;
+const float D3D10_MIP_LOD_BIAS_MIN = -16.0;
+const float D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.5;
+const float D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH = 1.4;
+const float D3D10_SRGB_GAMMA = 2.2;
+const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_1 = 12.92;
+const float D3D10_SRGB_TO_FLOAT_DENOMINATOR_2 = 1.055;
+const float D3D10_SRGB_TO_FLOAT_EXPONENT = 2.4;
+const float D3D10_SRGB_TO_FLOAT_OFFSET = 0.055;
+const float D3D10_SRGB_TO_FLOAT_THRESHOLD = 0.04045;
+const float D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP = 0.5;
+const float D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.0;
+const float D3D_SPEC_VERSION = 1.050005;
+const unsigned int D3D10_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff;
+const unsigned int D3D10_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff;
+const unsigned int D3D10_8BIT_INDEX_STRIP_CUT_VALUE = 0xff;
+const unsigned int D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9;
+const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_COUNT = 8;
+const unsigned int D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
+const unsigned int D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT = 16;
+const unsigned int D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_COUNT = 4096;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3;
+const unsigned int D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3;
+const unsigned int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10;
+const int D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10;
+const int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8;
+const unsigned int D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7;
+const unsigned int D3D10_DEFAULT_DEPTH_BIAS = 0;
+const unsigned int D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;
+const unsigned int D3D10_DEFAULT_SAMPLE_MASK = 0xffffffff;
+const unsigned int D3D10_DEFAULT_SCISSOR_ENDX = 0;
+const unsigned int D3D10_DEFAULT_SCISSOR_ENDY = 0;
+const unsigned int D3D10_DEFAULT_SCISSOR_STARTX = 0;
+const unsigned int D3D10_DEFAULT_SCISSOR_STARTY = 0;
+const unsigned int D3D10_DEFAULT_STENCIL_READ_MASK = 0xff;
+const unsigned int D3D10_DEFAULT_STENCIL_REFERENCE = 0;
+const unsigned int D3D10_DEFAULT_STENCIL_WRITE_MASK = 0xff;
+const unsigned int D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_HEIGHT = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTX = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_TOPLEFTY = 0;
+const unsigned int D3D10_DEFAULT_VIEWPORT_WIDTH = 0;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2;
+const unsigned int D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT =32;
+const unsigned int D3D10_GS_INPUT_REGISTER_COUNT = 16;
+const unsigned int D3D10_GS_INPUT_REGISTER_READS_PER_INST = 2;
+const unsigned int D3D10_GS_INPUT_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_GS_INPUT_REGISTER_VERTICES = 6;
+const unsigned int D3D10_GS_OUTPUT_ELEMENTS = 32;
+const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_GS_OUTPUT_REGISTER_COUNT = 32;
+const unsigned int D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0;
+const unsigned int D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0;
+const unsigned int D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0;
+const unsigned int D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1;
+const unsigned int D3D10_IA_INSTANCE_ID_BIT_COUNT = 32;
+const unsigned int D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32;
+const unsigned int D3D10_IA_PRIMITIVE_ID_BIT_COUNT = 32;
+const unsigned int D3D10_IA_VERTEX_ID_BIT_COUNT = 32;
+const unsigned int D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 16;
+const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 64;
+const unsigned int D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 16;
+const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff;
+const unsigned int D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff;
+const unsigned int D3D10_MAX_MAXANISOTROPY = 16;
+const unsigned int D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
+const unsigned int D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17;
+const unsigned int D3D10_MIN_MAXANISOTROPY = 0;
+const unsigned int D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT = 6;
+const unsigned int D3D10_MIP_LOD_RANGE_BIT_COUNT = 8;
+const unsigned int D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0;
+const unsigned int D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT = 13;
+const unsigned int D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15;
+const unsigned int D3D10_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff;
+const unsigned int D3D10_PS_FRONTFACING_FALSE_VALUE = 0;
+const unsigned int D3D10_PS_FRONTFACING_TRUE_VALUE = 0xffffffff;
+const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_PS_INPUT_REGISTER_COUNT = 32;
+const unsigned int D3D10_PS_INPUT_REGISTER_READS_PER_INST = 2;
+const unsigned int D3D10_PS_INPUT_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1;
+const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1;
+const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_PS_OUTPUT_REGISTER_COUNT = 8;
+const unsigned int D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT = 4096;
+const unsigned int D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27;
+const unsigned int D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
+const unsigned int D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT = 4096;
+const unsigned int D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32;
+const unsigned int D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32;
+const unsigned int D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 8192;
+const unsigned int D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024;
+const unsigned int D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096;
+const unsigned int D3D10_REQ_MAXANISOTROPY = 16;
+const unsigned int D3D10_REQ_MIP_LEVELS = 14;
+const unsigned int D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048;
+const unsigned int D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT = 4096;
+const unsigned int D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 8192;
+const unsigned int D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES = 128;
+const unsigned int D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP = 20;
+const unsigned int D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT = 4096;
+const unsigned int D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 512;
+const unsigned int D3D10_REQ_TEXTURE1D_U_DIMENSION = 8192;
+const unsigned int D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 512;
+const unsigned int D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION = 8192;
+const unsigned int D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048;
+const unsigned int D3D10_REQ_TEXTURECUBE_DIMENSION = 8192;
+const unsigned int D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0;
+const unsigned int D3D10_SHADER_MAJOR_VERSION = 4;
+const unsigned int D3D10_SHADER_MINOR_VERSION = 0;
+const unsigned int D3D10_SHIFT_INSTRUCTION_PAD_VALUE = 0;
+const unsigned int D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5;
+const unsigned int D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
+const unsigned int D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048;
+const unsigned int D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 256;
+const unsigned int D3D10_SO_BUFFER_SLOT_COUNT = 4;
+const unsigned int D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff;
+const unsigned int D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER = 1;
+const unsigned int D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT = 64;
+const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64;
+const unsigned int D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4;
+const unsigned int D3D10_STANDARD_PIXEL_COMPONENT_COUNT = 128;
+const unsigned int D3D10_STANDARD_PIXEL_ELEMENT_COUNT = 32;
+const unsigned int D3D10_STANDARD_VECTOR_SIZE = 4;
+const unsigned int D3D10_STANDARD_VERTEX_ELEMENT_COUNT = 16;
+const unsigned int D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64;
+const unsigned int D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8;
+const unsigned int D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT = 6;
+const unsigned int D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT = 18;
+const unsigned int D3D10_UNBOUND_MEMORY_ACCESS_RESULT = 0;
+const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15;
+const unsigned int D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16;
+const unsigned int D3D10_VIEWPORT_BOUNDS_MAX = 16383;
+const int D3D10_VIEWPORT_BOUNDS_MIN = -16384;
+const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_VS_INPUT_REGISTER_COUNT = 16;
+const unsigned int D3D10_VS_INPUT_REGISTER_READS_PER_INST = 2;
+const unsigned int D3D10_VS_INPUT_REGISTER_READ_PORTS = 1;
+const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENTS = 4;
+const unsigned int D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32;
+const unsigned int D3D10_VS_OUTPUT_REGISTER_COUNT = 16;
+const unsigned int D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10;
+const unsigned int D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25;
+const unsigned int D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25;
+const unsigned int D3D_MAJOR_VERSION = 10;
+const unsigned int D3D_MINOR_VERSION = 0;
+const unsigned int D3D_SPEC_DATE_DAY = 8;
+const unsigned int D3D_SPEC_DATE_MONTH = 8;
+const unsigned int D3D_SPEC_DATE_YEAR = 2006;
+cpp_quote("#endif")
+
+const unsigned int D3D10_APPEND_ALIGNED_ELEMENT = 0xffffffff;
+const unsigned int _FACD3D10 = 0x87;
+const unsigned int _FACD3D10DEBUG = _FACD3D10 + 1;
+const unsigned int D3D10_FILTER_TYPE_MASK = 0x3;
+const unsigned int D3D10_SDK_VERSION = 29;
+
+cpp_quote("#define MAKE_D3D10_HRESULT(code) MAKE_HRESULT( 1, _FACD3D10, code)")
+cpp_quote("#define MAKE_D3D10_STATUS(code) MAKE_HRESULT( 0, _FACD3D10, code)")
+cpp_quote("#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS MAKE_D3D10_HRESULT(1)")
+cpp_quote("#define D3D10_ERROR_FILE_NOT_FOUND MAKE_D3D10_HRESULT(2)")
+
+typedef enum D3D10_BLEND {
+ D3D10_BLEND_ZERO = 1,
+ D3D10_BLEND_ONE = 2,
+ D3D10_BLEND_SRC_COLOR = 3,
+ D3D10_BLEND_INV_SRC_COLOR = 4,
+ D3D10_BLEND_SRC_ALPHA = 5,
+ D3D10_BLEND_INV_SRC_ALPHA = 6,
+ D3D10_BLEND_DEST_ALPHA = 7,
+ D3D10_BLEND_INV_DEST_ALPHA = 8,
+ D3D10_BLEND_DEST_COLOR = 9,
+ D3D10_BLEND_INV_DEST_COLOR = 10,
+ D3D10_BLEND_SRC_ALPHA_SAT = 11,
+ D3D10_BLEND_BLEND_FACTOR = 14,
+ D3D10_BLEND_INV_BLEND_FACTOR = 15,
+ D3D10_BLEND_SRC1_COLOR = 16,
+ D3D10_BLEND_INV_SRC1_COLOR = 17,
+ D3D10_BLEND_SRC1_ALPHA = 18,
+ D3D10_BLEND_INV_SRC1_ALPHA = 19
+} D3D10_BLEND;
+
+typedef enum D3D10_BLEND_OP {
+ D3D10_BLEND_OP_ADD = 1,
+ D3D10_BLEND_OP_SUBTRACT,
+ D3D10_BLEND_OP_REV_SUBTRACT,
+ D3D10_BLEND_OP_MIN,
+ D3D10_BLEND_OP_MAX,
+} D3D10_BLEND_OP;
+
+typedef struct D3D10_BLEND_DESC {
+ BOOL AlphaToCoverageEnable;
+ BOOL BlendEnable[8];
+ D3D10_BLEND SrcBlend;
+ D3D10_BLEND DestBlend;
+ D3D10_BLEND_OP BlendOp;
+ D3D10_BLEND SrcBlendAlpha;
+ D3D10_BLEND DestBlendAlpha;
+ D3D10_BLEND_OP BlendOpAlpha;
+ UINT8 RenderTargetWriteMask[8];
+} D3D10_BLEND_DESC;
+
+typedef enum D3D10_DEPTH_WRITE_MASK {
+ D3D10_DEPTH_WRITE_MASK_ZERO,
+ D3D10_DEPTH_WRITE_MASK_ALL,
+} D3D10_DEPTH_WRITE_MASK;
+
+typedef enum D3D10_COMPARISON_FUNC {
+ D3D10_COMPARISON_NEVER = 1,
+ D3D10_COMPARISON_LESS,
+ D3D10_COMPARISON_EQUAL,
+ D3D10_COMPARISON_LESS_EQUAL,
+ D3D10_COMPARISON_GREATER,
+ D3D10_COMPARISON_NOT_EQUAL,
+ D3D10_COMPARISON_GREATER_EQUAL,
+ D3D10_COMPARISON_ALWAYS,
+} D3D10_COMPARISON_FUNC;
+
+typedef enum D3D10_STENCIL_OP {
+ D3D10_STENCIL_OP_KEEP = 1,
+ D3D10_STENCIL_OP_ZERO,
+ D3D10_STENCIL_OP_REPLACE,
+ D3D10_STENCIL_OP_INCR_SAT,
+ D3D10_STENCIL_OP_DECR_SAT,
+ D3D10_STENCIL_OP_INVERT,
+ D3D10_STENCIL_OP_INCR,
+ D3D10_STENCIL_OP_DECR,
+} D3D10_STENCIL_OP;
+
+typedef struct D3D10_DEPTH_STENCILOP_DESC {
+ D3D10_STENCIL_OP StencilFailOp;
+ D3D10_STENCIL_OP StencilDepthFailOp;
+ D3D10_STENCIL_OP StencilPassOp;
+ D3D10_COMPARISON_FUNC StencilFunc;
+} D3D10_DEPTH_STENCILOP_DESC;
+
+typedef struct D3D10_DEPTH_STENCIL_DESC {
+ BOOL DepthEnable;
+ D3D10_DEPTH_WRITE_MASK DepthWriteMask;
+ D3D10_COMPARISON_FUNC DepthFunc;
+ BOOL StencilEnable;
+ UINT8 StencilReadMask;
+ UINT8 StencilWriteMask;
+ D3D10_DEPTH_STENCILOP_DESC FrontFace;
+ D3D10_DEPTH_STENCILOP_DESC BackFace;
+} D3D10_DEPTH_STENCIL_DESC;
+
+typedef enum D3D10_FILL_MODE {
+ D3D10_FILL_WIREFRAME = 2,
+ D3D10_FILL_SOLID,
+} D3D10_FILL_MODE;
+
+typedef enum D3D10_CULL_MODE {
+ D3D10_CULL_NONE = 1,
+ D3D10_CULL_FRONT,
+ D3D10_CULL_BACK,
+} D3D10_CULL_MODE;
+
+typedef struct D3D10_RASTERIZER_DESC {
+ D3D10_FILL_MODE FillMode;
+ D3D10_CULL_MODE CullMode;
+ BOOL FrontCounterClockwise;
+ INT DepthBias;
+ FLOAT DepthBiasClamp;
+ FLOAT SlopeScaledDepthBias;
+ BOOL DepthClipEnable;
+ BOOL ScissorEnable;
+ BOOL MultisampleEnable;
+ BOOL AntialiasedLineEnable;
+} D3D10_RASTERIZER_DESC;
+
+typedef enum D3D10_FILTER {
+ D3D10_FILTER_MIN_MAG_MIP_POINT = 0,
+ D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x1,
+ D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x4,
+ D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x5,
+ D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+ D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+ D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+ D3D10_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+ D3D10_FILTER_ANISOTROPIC = 0x55,
+ D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+ D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+ D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+ D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+ D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+ D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+ D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+ D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+ D3D10_FILTER_COMPARISON_ANISOTROPIC = 0xd5,
+ D3D10_FILTER_TEXT_1BIT = 0x80000000
+} D3D10_FILTER;
+
+typedef enum D3D10_TEXTURE_ADDRESS_MODE {
+ D3D10_TEXTURE_ADDRESS_WRAP = 1,
+ D3D10_TEXTURE_ADDRESS_MIRROR,
+ D3D10_TEXTURE_ADDRESS_CLAMP,
+ D3D10_TEXTURE_ADDRESS_BORDER,
+ D3D10_TEXTURE_ADDRESS_MIRROR_ONCE,
+} D3D10_TEXTURE_ADDRESS_MODE;
+
+typedef struct D3D10_SAMPLER_DESC {
+ D3D10_FILTER Filter;
+ D3D10_TEXTURE_ADDRESS_MODE AddressU;
+ D3D10_TEXTURE_ADDRESS_MODE AddressV;
+ D3D10_TEXTURE_ADDRESS_MODE AddressW;
+ FLOAT MipLODBias;
+ UINT MaxAnisotropy;
+ D3D10_COMPARISON_FUNC ComparisonFunc;
+ FLOAT BorderColor[4];
+ FLOAT MinLOD;
+ FLOAT MaxLOD;
+} D3D10_SAMPLER_DESC;
+
+typedef enum D3D10_COUNTER {
+ D3D10_COUNTER_GPU_IDLE,
+ D3D10_COUNTER_VERTEX_PROCESSING,
+ D3D10_COUNTER_GEOMETRY_PROCESSING,
+ D3D10_COUNTER_PIXEL_PROCESSING,
+ D3D10_COUNTER_OTHER_GPU_PROCESSING,
+ D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION,
+ D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION,
+ D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION,
+ D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION,
+ D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION,
+ D3D10_COUNTER_VS_MEMORY_LIMITED,
+ D3D10_COUNTER_VS_COMPUTATION_LIMITED,
+ D3D10_COUNTER_GS_MEMORY_LIMITED,
+ D3D10_COUNTER_GS_COMPUTATION_LIMITED,
+ D3D10_COUNTER_PS_MEMORY_LIMITED,
+ D3D10_COUNTER_PS_COMPUTATION_LIMITED,
+ D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE,
+ D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE,
+ D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000
+} D3D10_COUNTER;
+
+typedef struct D3D10_COUNTER_DESC {
+ D3D10_COUNTER Counter;
+ UINT MiscFlags;
+} D3D10_COUNTER_DESC;
+
+typedef enum D3D10_COUNTER_TYPE {
+ D3D10_COUNTER_TYPE_FLOAT32,
+ D3D10_COUNTER_TYPE_UINT16,
+ D3D10_COUNTER_TYPE_UINT32,
+ D3D10_COUNTER_TYPE_UINT64,
+} D3D10_COUNTER_TYPE;
+
+typedef struct D3D10_COUNTER_INFO {
+ D3D10_COUNTER LastDeviceDependentCounter;
+ UINT NumSimultaneousCounters;
+ UINT8 NumDetectableParallelUnits;
+} D3D10_COUNTER_INFO;
+
+typedef enum D3D10_RESOURCE_DIMENSION {
+ D3D10_RESOURCE_DIMENSION_UNKNOWN,
+ D3D10_RESOURCE_DIMENSION_BUFFER,
+ D3D10_RESOURCE_DIMENSION_TEXTURE1D,
+ D3D10_RESOURCE_DIMENSION_TEXTURE2D,
+ D3D10_RESOURCE_DIMENSION_TEXTURE3D,
+} D3D10_RESOURCE_DIMENSION;
+
+typedef enum D3D10_USAGE {
+ D3D10_USAGE_DEFAULT,
+ D3D10_USAGE_IMMUTABLE,
+ D3D10_USAGE_DYNAMIC,
+ D3D10_USAGE_STAGING,
+} D3D10_USAGE;
+
+typedef enum D3D10_BIND_FLAG {
+ D3D10_BIND_VERTEX_BUFFER = 0x1,
+ D3D10_BIND_INDEX_BUFFER = 0x2,
+ D3D10_BIND_CONSTANT_BUFFER = 0x4,
+ D3D10_BIND_SHADER_RESOURCE = 0x8,
+ D3D10_BIND_STREAM_OUTPUT = 0x10,
+ D3D10_BIND_RENDER_TARGET = 0x20,
+ D3D10_BIND_DEPTH_STENCIL = 0x40
+} D3D10_BIND_FLAG;
+
+typedef struct D3D10_BUFFER_DESC {
+ UINT ByteWidth;
+ D3D10_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D10_BUFFER_DESC;
+
+cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D10_BUFFER_DESC : public D3D10_BUFFER_DESC {")
+cpp_quote(" CD3D10_BUFFER_DESC() {}" )
+cpp_quote(" explicit CD3D10_BUFFER_DESC(const D3D10_BUFFER_DESC &o) : D3D10_BUFFER_DESC(o) {}")
+cpp_quote(" explicit CD3D10_BUFFER_DESC(UINT byteWidth, UINT bindFlags, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT miscFlags = 0 ) {")
+cpp_quote(" ByteWidth = byteWidth;")
+cpp_quote(" Usage = usage;")
+cpp_quote(" BindFlags = bindFlags;")
+cpp_quote(" CPUAccessFlags = cpuaccessFlags;")
+cpp_quote(" MiscFlags = miscFlags;")
+cpp_quote(" }")
+cpp_quote(" ~CD3D10_BUFFER_DESC() {}")
+cpp_quote(" operator const D3D10_BUFFER_DESC&() const {")
+cpp_quote(" return *this;")
+cpp_quote(" }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef enum D3D10_MAP {
+ D3D10_MAP_READ = 1,
+ D3D10_MAP_WRITE,
+ D3D10_MAP_READ_WRITE,
+ D3D10_MAP_WRITE_DISCARD,
+ D3D10_MAP_WRITE_NO_OVERWRITE,
+} D3D10_MAP;
+
+typedef struct D3D10_TEXTURE1D_DESC {
+ UINT Width;
+ UINT MipLevels;
+ UINT ArraySize;
+ DXGI_FORMAT Format;
+ D3D10_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D10_TEXTURE1D_DESC;
+
+cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D10_TEXTURE1D_DESC : public D3D10_TEXTURE1D_DESC {")
+cpp_quote(" CD3D10_TEXTURE1D_DESC() {}")
+cpp_quote(" explicit CD3D10_TEXTURE1D_DESC(const D3D10_TEXTURE1D_DESC &o) : D3D10_TEXTURE1D_DESC(o) {}")
+cpp_quote(" explicit CD3D10_TEXTURE1D_DESC(DXGI_FORMAT format, UINT width, UINT arraySize = 1, UINT mipLevels = 0,")
+cpp_quote(" UINT bindFlags = D3D10_BIND_SHADER_RESOURCE, D3D10_USAGE usage = D3D10_USAGE_DEFAULT, UINT cpuaccessFlags = 0,")
+cpp_quote(" UINT miscFlags = 0) {")
+cpp_quote(" Width = width;")
+cpp_quote(" MipLevels = mipLevels;")
+cpp_quote(" ArraySize = arraySize;")
+cpp_quote(" Format = format;")
+cpp_quote(" Usage = usage;")
+cpp_quote(" BindFlags = bindFlags;")
+cpp_quote(" CPUAccessFlags = cpuaccessFlags;")
+cpp_quote(" MiscFlags = miscFlags;")
+cpp_quote(" }")
+cpp_quote(" ~CD3D10_TEXTURE1D_DESC() {}")
+cpp_quote(" operator const D3D10_TEXTURE1D_DESC&() const {")
+cpp_quote(" return *this;")
+cpp_quote(" }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D10_TEXTURE2D_DESC {
+ UINT Width;
+ UINT Height;
+ UINT MipLevels;
+ UINT ArraySize;
+ DXGI_FORMAT Format;
+ DXGI_SAMPLE_DESC SampleDesc;
+ D3D10_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D10_TEXTURE2D_DESC;
+
+cpp_quote("#if !defined(D3D10_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D10_TEXTURE2D_DESC : public D3D10_TEXTURE2D_DESC {")
+cpp_quote(" CD3D10_TEXTURE2D_DESC() {}" )
+cpp_quote(" explicit CD3D10_TEXTURE2D_DESC(const D3D10_TEXTURE2D_DESC &o) : D3D10_TEXTURE2D_DESC(o) {}")
+cpp_quote(" explicit CD3D10_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height,")
+cpp_quote(" UINT arraySize = 1,")
+cpp_quote(" UINT mipLevels = 0,")
+cpp_quote(" UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,")
+cpp_quote(" D3D10_USAGE usage = D3D10_USAGE_DEFAULT,")
+cpp_quote(" UINT cpuaccessFlags = 0,")
+cpp_quote(" UINT sampleCount = 1,")
+cpp_quote(" UINT sampleQuality = 0,")
+cpp_quote(" UINT miscFlags = 0) {")
+cpp_quote(" Width = width;" )
+cpp_quote(" Height = height;" )
+cpp_quote(" MipLevels = mipLevels;" )
+cpp_quote(" ArraySize = arraySize;" )
+cpp_quote(" Format = format;" )
+cpp_quote(" SampleDesc.Count = sampleCount;" )
+cpp_quote(" SampleDesc.Quality = sampleQuality;" )
+cpp_quote(" Usage = usage;" )
+cpp_quote(" BindFlags = bindFlags;" )
+cpp_quote(" CPUAccessFlags = cpuaccessFlags;" )
+cpp_quote(" MiscFlags = miscFlags;" )
+cpp_quote(" }")
+cpp_quote(" ~CD3D10_TEXTURE2D_DESC() {}")
+cpp_quote(" operator const D3D10_TEXTURE2D_DESC&() const {")
+cpp_quote(" return *this;")
+cpp_quote(" }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D10_TEXTURE3D_DESC {
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+ UINT MipLevels;
+ DXGI_FORMAT Format;
+ D3D10_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D10_TEXTURE3D_DESC;
+
+typedef enum D3D10_DSV_DIMENSION
+{
+ D3D10_DSV_DIMENSION_UNKNOWN,
+ D3D10_DSV_DIMENSION_TEXTURE1D,
+ D3D10_DSV_DIMENSION_TEXTURE1DARRAY,
+ D3D10_DSV_DIMENSION_TEXTURE2D,
+ D3D10_DSV_DIMENSION_TEXTURE2DARRAY,
+ D3D10_DSV_DIMENSION_TEXTURE2DMS,
+ D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY,
+} D3D10_DSV_DIMENSION;
+
+typedef struct D3D10_TEX1D_DSV {
+ UINT MipSlice;
+} D3D10_TEX1D_DSV;
+
+typedef struct D3D10_TEX1D_ARRAY_DSV {
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX1D_ARRAY_DSV;
+
+typedef struct D3D10_TEX2D_DSV {
+ UINT MipSlice;
+} D3D10_TEX2D_DSV;
+
+typedef struct D3D10_TEX2D_ARRAY_DSV {
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX2D_ARRAY_DSV;
+
+typedef struct D3D10_TEX2DMS_DSV {
+ UINT UnusedField_NothingToDefine;
+} D3D10_TEX2DMS_DSV;
+
+typedef struct D3D10_TEX2DMS_ARRAY_DSV {
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX2DMS_ARRAY_DSV;
+
+typedef struct D3D10_DEPTH_STENCIL_VIEW_DESC {
+ DXGI_FORMAT Format;
+ D3D10_DSV_DIMENSION ViewDimension;
+ union {
+ D3D10_TEX1D_DSV Texture1D;
+ D3D10_TEX1D_ARRAY_DSV Texture1DArray;
+ D3D10_TEX2D_DSV Texture2D;
+ D3D10_TEX2D_ARRAY_DSV Texture2DArray;
+ D3D10_TEX2DMS_DSV Texture2DMS;
+ D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray;
+ };
+} D3D10_DEPTH_STENCIL_VIEW_DESC;
+
+typedef enum D3D10_RTV_DIMENSION {
+ D3D10_RTV_DIMENSION_UNKNOWN,
+ D3D10_RTV_DIMENSION_BUFFER,
+ D3D10_RTV_DIMENSION_TEXTURE1D,
+ D3D10_RTV_DIMENSION_TEXTURE1DARRAY,
+ D3D10_RTV_DIMENSION_TEXTURE2D,
+ D3D10_RTV_DIMENSION_TEXTURE2DARRAY,
+ D3D10_RTV_DIMENSION_TEXTURE2DMS,
+ D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY,
+ D3D10_RTV_DIMENSION_TEXTURE3D,
+} D3D10_RTV_DIMENSION;
+
+typedef struct D3D10_BUFFER_RTV {
+ UINT ElementOffset;
+ UINT ElementWidth;
+} D3D10_BUFFER_RTV;
+
+typedef struct D3D10_TEX1D_RTV {
+ UINT MipSlice;
+} D3D10_TEX1D_RTV;
+
+typedef struct D3D10_TEX1D_ARRAY_RTV {
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX1D_ARRAY_RTV;
+
+typedef struct D3D10_TEX2D_RTV {
+ UINT MipSlice;
+} D3D10_TEX2D_RTV;
+
+typedef struct D3D10_TEX2D_ARRAY_RTV {
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX2D_ARRAY_RTV;
+
+typedef struct D3D10_TEX2DMS_RTV {
+ UINT UnusedField_NothingToDefine;
+} D3D10_TEX2DMS_RTV;
+
+typedef struct D3D10_TEX2DMS_ARRAY_RTV {
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX2DMS_ARRAY_RTV;
+
+typedef struct D3D10_TEX3D_RTV {
+ UINT MipSlice;
+ UINT FirstWSlice;
+ UINT WSize;
+} D3D10_TEX3D_RTV;
+
+typedef struct D3D10_RENDER_TARGET_VIEW_DESC {
+ DXGI_FORMAT Format;
+ D3D10_RTV_DIMENSION ViewDimension;
+ union {
+ D3D10_BUFFER_RTV Buffer;
+ D3D10_TEX1D_RTV Texture1D;
+ D3D10_TEX1D_ARRAY_RTV Texture1DArray;
+ D3D10_TEX2D_RTV Texture2D;
+ D3D10_TEX2D_ARRAY_RTV Texture2DArray;
+ D3D10_TEX2DMS_RTV Texture2DMS;
+ D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray;
+ D3D10_TEX3D_RTV Texture3D;
+ };
+} D3D10_RENDER_TARGET_VIEW_DESC;
+
+typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION;
+
+typedef struct D3D10_BUFFER_SRV {
+ UINT ElementOffset;
+ UINT ElementWidth;
+} D3D10_BUFFER_SRV;
+
+typedef struct D3D10_TEX1D_SRV {
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D10_TEX1D_SRV;
+
+typedef struct D3D10_TEX1D_ARRAY_SRV {
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX1D_ARRAY_SRV;
+
+typedef struct D3D10_TEX2D_SRV {
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D10_TEX2D_SRV;
+
+typedef struct D3D10_TEX2D_ARRAY_SRV {
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX2D_ARRAY_SRV;
+
+typedef struct D3D10_TEX2DMS_SRV {
+ UINT UnusedField_NothingToDefine;
+} D3D10_TEX2DMS_SRV;
+
+typedef struct D3D10_TEX2DMS_ARRAY_SRV {
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D10_TEX2DMS_ARRAY_SRV;
+
+typedef struct D3D10_TEX3D_SRV {
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D10_TEX3D_SRV;
+
+typedef struct D3D10_TEXCUBE_SRV {
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D10_TEXCUBE_SRV;
+
+typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC {
+ DXGI_FORMAT Format;
+ D3D10_SRV_DIMENSION ViewDimension;
+ union {
+ D3D10_BUFFER_SRV Buffer;
+ D3D10_TEX1D_SRV Texture1D;
+ D3D10_TEX1D_ARRAY_SRV Texture1DArray;
+ D3D10_TEX2D_SRV Texture2D;
+ D3D10_TEX2D_ARRAY_SRV Texture2DArray;
+ D3D10_TEX2DMS_SRV Texture2DMS;
+ D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+ D3D10_TEX3D_SRV Texture3D;
+ D3D10_TEXCUBE_SRV TextureCube;
+ };
+} D3D10_SHADER_RESOURCE_VIEW_DESC;
+
+typedef struct D3D10_BOX {
+ UINT left;
+ UINT top;
+ UINT front;
+ UINT right;
+ UINT bottom;
+ UINT back;
+} D3D10_BOX;
+
+typedef struct D3D10_SUBRESOURCE_DATA {
+ const void *pSysMem;
+ UINT SysMemPitch;
+ UINT SysMemSlicePitch;
+} D3D10_SUBRESOURCE_DATA;
+
+typedef struct D3D10_SO_DECLARATION_ENTRY
+{
+ const char *SemanticName;
+ UINT SemanticIndex;
+ BYTE StartComponent;
+ BYTE ComponentCount;
+ BYTE OutputSlot;
+} D3D10_SO_DECLARATION_ENTRY;
+
+typedef enum D3D10_INPUT_CLASSIFICATION {
+ D3D10_INPUT_PER_VERTEX_DATA,
+ D3D10_INPUT_PER_INSTANCE_DATA,
+} D3D10_INPUT_CLASSIFICATION;
+
+typedef struct D3D10_INPUT_ELEMENT_DESC
+{
+ const char *SemanticName;
+ UINT SemanticIndex;
+ DXGI_FORMAT Format;
+ UINT InputSlot;
+ UINT AlignedByteOffset;
+ D3D10_INPUT_CLASSIFICATION InputSlotClass;
+ UINT InstanceDataStepRate;
+} D3D10_INPUT_ELEMENT_DESC;
+
+typedef enum D3D10_QUERY {
+ D3D10_QUERY_EVENT,
+ D3D10_QUERY_OCCLUSION,
+ D3D10_QUERY_TIMESTAMP,
+ D3D10_QUERY_TIMESTAMP_DISJOINT,
+ D3D10_QUERY_PIPELINE_STATISTICS,
+ D3D10_QUERY_OCCLUSION_PREDICATE,
+ D3D10_QUERY_SO_STATISTICS,
+ D3D10_QUERY_SO_OVERFLOW_PREDICATE,
+} D3D10_QUERY;
+
+typedef struct D3D10_QUERY_DESC {
+ D3D10_QUERY Query;
+ UINT MiscFlags;
+} D3D10_QUERY_DESC;
+
+typedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY;
+
+typedef D3D_PRIMITIVE D3D10_PRIMITIVE;
+
+typedef RECT D3D10_RECT;
+
+typedef struct D3D10_VIEWPORT {
+ INT TopLeftX;
+ INT TopLeftY;
+ UINT Width;
+ UINT Height;
+ FLOAT MinDepth;
+ FLOAT MaxDepth;
+} D3D10_VIEWPORT;
+
+typedef struct D3D10_MAPPED_TEXTURE2D {
+ void *pData;
+ UINT RowPitch;
+} D3D10_MAPPED_TEXTURE2D;
+
+typedef struct D3D10_MAPPED_TEXTURE3D {
+ void *pData;
+ UINT RowPitch;
+ UINT DepthPitch;
+} D3D10_MAPPED_TEXTURE3D;
+
+typedef enum D3D10_CPU_ACCESS_FLAG {
+ D3D10_CPU_ACCESS_WRITE = 0x10000,
+ D3D10_CPU_ACCESS_READ = 0x20000
+} D3D10_CPU_ACCESS_FLAG;
+
+typedef enum D3D10_RESOURCE_MISC_FLAG {
+ D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x0001,
+ D3D10_RESOURCE_MISC_SHARED = 0x0002,
+ D3D10_RESOURCE_MISC_TEXTURECUBE = 0x0004,
+ D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x0010,
+ D3D10_RESOURCE_MISC_GDI_COMPATIBLE = 0x0020
+} D3D10_RESOURCE_MISC_FLAG;
+
+typedef enum D3D10_MAP_FLAG {
+ D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000,
+} D3D10_MAP_FLAG;
+
+typedef enum D3D10_CLEAR_FLAG {
+ D3D10_CLEAR_DEPTH = 0x1,
+ D3D10_CLEAR_STENCIL = 0x2
+} D3D10_CLEAR_FLAG;
+
+typedef enum D3D10_COLOR_WRITE_ENABLE {
+ D3D10_COLOR_WRITE_ENABLE_RED = 0x1,
+ D3D10_COLOR_WRITE_ENABLE_GREEN = 0x2,
+ D3D10_COLOR_WRITE_ENABLE_BLUE = 0x4,
+ D3D10_COLOR_WRITE_ENABLE_ALPHA = 0x8,
+ D3D10_COLOR_WRITE_ENABLE_ALL = (D3D10_COLOR_WRITE_ENABLE_RED | D3D10_COLOR_WRITE_ENABLE_GREEN |
+ D3D10_COLOR_WRITE_ENABLE_BLUE | D3D10_COLOR_WRITE_ENABLE_ALPHA)
+} D3D10_COLOR_WRITE_ENABLE;
+
+typedef enum D3D10_TEXTURECUBE_FACE {
+ D3D10_TEXTURECUBE_FACE_POSITIVE_X,
+ D3D10_TEXTURECUBE_FACE_NEGATIVE_X,
+ D3D10_TEXTURECUBE_FACE_POSITIVE_Y,
+ D3D10_TEXTURECUBE_FACE_NEGATIVE_Y,
+ D3D10_TEXTURECUBE_FACE_POSITIVE_Z,
+ D3D10_TEXTURECUBE_FACE_NEGATIVE_Z,
+} D3D10_TEXTURECUBE_FACE;
+
+typedef enum D3D10_ASYNC_GETDATA_FLAG {
+ D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1,
+} D3D10_ASYNC_GETDATA_FLAG;
+
+typedef enum D3D10_FILTER_TYPE {
+ D3D10_FILTER_TYPE_POINT,
+ D3D10_FILTER_TYPE_LINEAR
+} D3D10_FILTER_TYPE;
+
+typedef enum D3D10_QUERY_MISC_FLAG {
+ D3D10_QUERY_MISC_PREDICATEHINT = 0x1
+} D3D10_QUERY_MISC_FLAG;
+
+typedef struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT {
+ UINT64 Frequency;
+ BOOL Disjoint;
+} D3D10_QUERY_DATA_TIMESTAMP_DISJOINT;
+
+typedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS {
+ UINT64 IAVertices;
+ UINT64 IAPrimitives;
+ UINT64 VSInvocations;
+ UINT64 GSInvocations;
+ UINT64 GSPrimitives;
+ UINT64 CInvocations;
+ UINT64 CPrimitives;
+ UINT64 PSInvocations;
+} D3D10_QUERY_DATA_PIPELINE_STATISTICS;
+
+typedef struct D3D10_QUERY_DATA_SO_STATISTICS {
+ UINT64 NumPrimitivesWritten;
+ UINT64 PrimitivesStorageNeeded;
+} D3D10_QUERY_DATA_SO_STATISTICS;
+
+typedef enum D3D10_CREATE_DEVICE_FLAG {
+ D3D10_CREATE_DEVICE_SINGLETHREADED = 0x1,
+ D3D10_CREATE_DEVICE_DEBUG = 0x2,
+ D3D10_CREATE_DEVICE_SWITCH_TO_REF = 0x4,
+ D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x8,
+ D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP = 0x10,
+ D3D10_CREATE_DEVICE_BGRA_SUPPORT = 0x20,
+ D3D10_CREATE_DEVICE_STRICT_VALIDATION = 0x0200
+} D3D10_CREATE_DEVICE_FLAG;
+
+/* Core */
+
+interface ID3D10Device;
+
+[
+ object,
+ local,
+ uuid(9b7e4c00-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10DeviceChild : IUnknown
+{
+ void GetDevice(
+ [out] ID3D10Device **ppDevice);
+ HRESULT GetPrivateData(
+ [in] REFGUID guid,
+ [in, out] UINT *pDataSize,
+ [out] void *pData);
+ HRESULT SetPrivateData(
+ [in] REFGUID guid,
+ [in] UINT DataSize,
+ [in] const void *pData);
+ HRESULT SetPrivateDataInterface(
+ [in] REFGUID guid,
+ [in] const IUnknown *pData);
+}
+
+/* Resource */
+
+[
+ object,
+ local,
+ uuid(9b7e4c01-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Resource : ID3D10DeviceChild
+{
+ void GetType(
+ [out] D3D10_RESOURCE_DIMENSION *rType);
+ void SetEvictionPriority(
+ [in] UINT EvictionPriority);
+ UINT GetEvictionPriority();
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c02-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Buffer : ID3D10Resource
+{
+ HRESULT Map(
+ [in] D3D10_MAP MapType,
+ [in] UINT MapFlags,
+ [out] void **ppData);
+ void Unmap();
+ void GetDesc(
+ [out] D3D10_BUFFER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c03-342c-4106-a19f-4f2704f689F0)
+]
+interface ID3D10Texture1D : ID3D10Resource
+{
+ HRESULT Map(
+ [in] UINT Subresource,
+ [in] D3D10_MAP MapType,
+ [in] UINT MapFlags,
+ [out] void **ppData);
+ void Unmap(
+ [in] UINT Subresource);
+ void GetDesc(
+ [out] D3D10_TEXTURE1D_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c04-342c-4106-a19f-4f2704f689F0)
+]
+interface ID3D10Texture2D : ID3D10Resource
+{
+ HRESULT Map(
+ [in] UINT Subresource,
+ [in] D3D10_MAP MapType,
+ [in] UINT MapFlags,
+ [out] D3D10_MAPPED_TEXTURE2D *pMappedTex2D);
+ void Unmap(
+ [in] UINT Subresource);
+ void GetDesc(
+ [out] D3D10_TEXTURE2D_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c05-342c-4106-a19f-4f2704f689F0)
+]
+interface ID3D10Texture3D : ID3D10Resource
+{
+ HRESULT Map(
+ [in] UINT Subresource,
+ [in] D3D10_MAP MapType,
+ [in] UINT MapFlags,
+ [out] D3D10_MAPPED_TEXTURE3D *pMappedTex3D);
+ void Unmap(
+ [in] UINT Subresource);
+ void GetDesc(
+ [out] D3D10_TEXTURE3D_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(c902b03f-60a7-49ba-9936-2a3ab37a7e33)
+]
+interface ID3D10View : ID3D10DeviceChild
+{
+ void GetResource(
+ [out] ID3D10Resource **ppResource);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c09-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10DepthStencilView : ID3D10View
+{
+ void GetDesc(
+ [out] D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc);
+}
+
+
+[
+ object,
+ local,
+ uuid(9b7e4c08-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10RenderTargetView : ID3D10View
+{
+ void GetDesc(
+ [out] D3D10_RENDER_TARGET_VIEW_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c07-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10ShaderResourceView : ID3D10View
+{
+ void GetDesc(
+ [out] D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc);
+}
+
+/* Resource End */
+
+[
+ object,
+ local,
+ uuid(edad8d19-8a35-4d6d-8566-2ea276cde161)
+]
+interface ID3D10BlendState : ID3D10DeviceChild
+{
+ void GetDesc(
+ [out] D3D10_BLEND_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(2b4b1cc8-a4ad-41f8-8322-ca86fc3ec675)
+]
+interface ID3D10DepthStencilState : ID3D10DeviceChild
+{
+ void GetDesc(
+ [out] D3D10_DEPTH_STENCIL_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(6316be88-54cd-4040-ab44-20461bc81f68)
+]
+interface ID3D10GeometryShader : ID3D10DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c0b-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10InputLayout : ID3D10DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(4968b601-9d00-4cde-8346-8e7f675819b6)
+]
+interface ID3D10PixelShader : ID3D10DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(a2a07292-89af-4345-be2e-c53d9fbb6e9f)
+]
+interface ID3D10RasterizerState : ID3D10DeviceChild
+{
+ void GetDesc(
+ [out] D3D10_RASTERIZER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c0c-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10SamplerState : ID3D10DeviceChild
+{
+ void GetDesc(
+ [out] D3D10_SAMPLER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c0a-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10VertexShader : ID3D10DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c0d-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Asynchronous : ID3D10DeviceChild
+{
+ void Begin();
+ void End();
+ HRESULT GetData(
+ [out] void *pData,
+ [in] UINT DataSize,
+ [in] UINT GetDataFlags);
+ UINT GetDataSize();
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c11-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Counter : ID3D10Asynchronous
+{
+ void GetDesc(
+ [out] D3D10_COUNTER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4C0e-342C-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Query : ID3D10Asynchronous
+{
+ void GetDesc(
+ [out] D3D10_QUERY_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c10-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Predicate : ID3D10Query
+{
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4c0f-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Device : IUnknown
+{
+ void VSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D10Buffer *const *ppConstantBuffers);
+ void PSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D10ShaderResourceView *const *ppShaderResourceViews);
+ void PSSetShader(
+ [in] ID3D10PixelShader *pPixelShader);
+ void PSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in]ID3D10SamplerState *const *ppSamplers);
+ void VSSetShader(
+ [in] ID3D10VertexShader *pVertexShader);
+ void DrawIndexed(
+ [in] UINT IndexCount,
+ [in] UINT StartIndexLocation,
+ [in] INT BaseVertexLocation);
+ void Draw(
+ [in] UINT VertexCount,
+ [in] UINT StartVertexLocation);
+ void PSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D10Buffer *const *ppConstantBuffers);
+ void IASetInputLayout(
+ [in] ID3D10InputLayout *pInputLayout);
+ void IASetVertexBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D10Buffer *const *ppVertexBuffers,
+ [in] const UINT *pStrides,
+ [in] const UINT *pOffsets);
+ void IASetIndexBuffer(
+ [in] ID3D10Buffer *pIndexBuffer,
+ [in] DXGI_FORMAT Format,
+ [in] UINT Offset);
+ void DrawIndexedInstanced(
+ [in] UINT IndexCountPerInstance,
+ [in] UINT InstanceCount,
+ [in] UINT StartIndexLocation,
+ [in] INT BaseVertexLocation,
+ [in] UINT StartInstanceLocation);
+ void DrawInstanced(
+ [in] UINT VertexCountPerInstance,
+ [in] UINT InstanceCount,
+ [in] UINT StartVertexLocation,
+ [in] UINT StartInstanceLocation);
+ void GSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D10Buffer *const *ppConstantBuffers);
+ void GSSetShader(
+ [in] ID3D10GeometryShader *pShader);
+ void IASetPrimitiveTopology(
+ [in] D3D10_PRIMITIVE_TOPOLOGY Topology);
+ void VSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D10ShaderResourceView *const *ppShaderResourceViews);
+ void VSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D10SamplerState *const *ppSamplers);
+ void SetPredication(
+ [in] ID3D10Predicate *pPredicate,
+ [in] BOOL PredicateValue);
+ void GSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D10ShaderResourceView * const *ppShaderResourceViews);
+ void GSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D10SamplerState *const *ppSamplers);
+ void OMSetRenderTargets(
+ [in] UINT NumViews,
+ [in] ID3D10RenderTargetView *const *ppRenderTargetViews,
+ [in] ID3D10DepthStencilView *pDepthStencilView);
+ void OMSetBlendState(
+ [in] ID3D10BlendState *pBlendState,
+ [in] const FLOAT BlendFactor[4],
+ [in] UINT SampleMask);
+ void OMSetDepthStencilState(
+ [in] ID3D10DepthStencilState *pDepthStencilState,
+ [in] UINT StencilRef);
+ void SOSetTargets(
+ [in] UINT NumBuffers,
+ [in] ID3D10Buffer *const *ppSOTargets,
+ [in] const UINT *pOffsets);
+ void DrawAuto();
+ void RSSetState(
+ [in] ID3D10RasterizerState *pRasterizerState);
+ void RSSetViewports(
+ [in] UINT NumViewports,
+ [in] const D3D10_VIEWPORT *pViewports);
+ void RSSetScissorRects(
+ [in] UINT NumRects,
+ [in] const D3D10_RECT *pRects);
+ void CopySubresourceRegion(
+ [in] ID3D10Resource *pDstResource,
+ [in] UINT DstSubresource,
+ [in] UINT DstX,
+ [in] UINT DstY,
+ [in] UINT DstZ,
+ [in] ID3D10Resource *pSrcResource,
+ [in] UINT SrcSubresource,
+ [in] const D3D10_BOX *pSrcBox);
+ void CopyResource(
+ [in] ID3D10Resource *pDstResource,
+ [in] ID3D10Resource *pSrcResource);
+ void UpdateSubresource(
+ [in] ID3D10Resource *pDstResource,
+ [in] UINT DstSubresource,
+ [in] const D3D10_BOX *pDstBox,
+ [in] const void *pSrcData,
+ [in] UINT SrcRowPitch,
+ [in] UINT SrcDepthPitch);
+ void ClearRenderTargetView(
+ [in] ID3D10RenderTargetView *pRenderTargetView,
+ [in] const FLOAT ColorRGBA[4]);
+ void ClearDepthStencilView(
+ [in] ID3D10DepthStencilView *pDepthStencilView,
+ [in] UINT ClearFlags,
+ [in] FLOAT Depth,
+ [in] UINT8 Stencil);
+ void GenerateMips(
+ [in] ID3D10ShaderResourceView *pShaderResourceView);
+ void ResolveSubresource(
+ [in] ID3D10Resource *pDstResource,
+ [in] UINT DstSubresource,
+ [in] ID3D10Resource *pSrcResource,
+ [in] UINT SrcSubresource,
+ [in] DXGI_FORMAT Format);
+ void VSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D10Buffer **ppConstantBuffers);
+ void PSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D10ShaderResourceView **ppShaderResourceViews);
+ void PSGetShader(
+ [out] ID3D10PixelShader **ppPixelShader);
+ void PSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D10SamplerState **ppSamplers);
+ void VSGetShader(
+ [out] ID3D10VertexShader **ppVertexShader);
+ void PSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D10Buffer **ppConstantBuffers);
+ void IAGetInputLayout(
+ [out] ID3D10InputLayout **ppInputLayout);
+ void IAGetVertexBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D10Buffer **ppVertexBuffers,
+ [out] UINT *pStrides,
+ [out] UINT *pOffsets);
+ void IAGetIndexBuffer(
+ [out] ID3D10Buffer **pIndexBuffer,
+ [out] DXGI_FORMAT *Format,
+ [out] UINT *Offset);
+ void GSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D10Buffer **ppConstantBuffers);
+ void GSGetShader(
+ [out] ID3D10GeometryShader **ppGeometryShader);
+ void IAGetPrimitiveTopology(
+ [out] D3D10_PRIMITIVE_TOPOLOGY *pTopology);
+ void VSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D10ShaderResourceView **ppShaderResourceViews);
+ void VSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D10SamplerState **ppSamplers);
+ void GetPredication(
+ [out] ID3D10Predicate **ppPredicate,
+ [out] BOOL *pPredicateValue);
+ void GSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D10ShaderResourceView **ppShaderResourceViews);
+ void GSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D10SamplerState **ppSamplers);
+ void OMGetRenderTargets(
+ [in] UINT NumViews,
+ [out] ID3D10RenderTargetView **ppRenderTargetViews,
+ [out] ID3D10DepthStencilView **ppDepthStencilView);
+ void OMGetBlendState(
+ [out] ID3D10BlendState **ppBlendState,
+ [out] FLOAT BlendFactor[4],
+ [out] UINT *pSampleMask);
+ void OMGetDepthStencilState(
+ [out] ID3D10DepthStencilState **ppDepthStencilState,
+ [out] UINT *pStencilRef);
+ void SOGetTargets(
+ [in] UINT NumBuffers,
+ [out] ID3D10Buffer **ppSOTargets,
+ [out] UINT *pOffsets);
+ void RSGetState(
+ [out] ID3D10RasterizerState **ppRasterizerState);
+ void RSGetViewports(
+ [in, out] UINT *NumViewports,
+ [out] D3D10_VIEWPORT *pViewports);
+ void RSGetScissorRects(
+ [in, out] UINT *NumRects,
+ [out] D3D10_RECT *pRects);
+ HRESULT GetDeviceRemovedReason();
+ HRESULT SetExceptionMode(
+ [in] UINT RaiseFlags);
+ UINT GetExceptionMode();
+ HRESULT GetPrivateData(
+ [in] REFGUID guid,
+ [in, out] UINT *pDataSize,
+ [out] void *pData);
+ HRESULT SetPrivateData(
+ [in] REFGUID guid,
+ [in] UINT DataSize,
+ [in] const void *pData);
+ HRESULT SetPrivateDataInterface(
+ [in] REFGUID guid,
+ [in] const IUnknown *pData);
+ void ClearState();
+ void Flush();
+ HRESULT CreateBuffer(
+ [in] const D3D10_BUFFER_DESC *pDesc,
+ [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D10Buffer **ppBuffer);
+ HRESULT CreateTexture1D(
+ [in] const D3D10_TEXTURE1D_DESC *pDesc,
+ [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D10Texture1D **ppTexture1D);
+ HRESULT CreateTexture2D(
+ [in] const D3D10_TEXTURE2D_DESC *pDesc,
+ [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D10Texture2D **ppTexture2D);
+ HRESULT CreateTexture3D(
+ [in] const D3D10_TEXTURE3D_DESC *pDesc,
+ [in] const D3D10_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D10Texture3D **ppTexture3D);
+ HRESULT CreateShaderResourceView(
+ [in] ID3D10Resource *pResource,
+ [in] const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,
+ [out] ID3D10ShaderResourceView **ppSRView);
+ HRESULT CreateRenderTargetView(
+ [in] ID3D10Resource *pResource,
+ [in] const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,
+ [out] ID3D10RenderTargetView **ppRTView);
+ HRESULT CreateDepthStencilView(
+ [in] ID3D10Resource *pResource,
+ [in] const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,
+ [out] ID3D10DepthStencilView **ppDepthStencilView);
+ HRESULT CreateInputLayout(
+ [in] const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,
+ [in] UINT NumElements,
+ [in] const void *pShaderBytecodeWithInputSignature,
+ [in] SIZE_T BytecodeLength,
+ [out] ID3D10InputLayout **ppInputLayout);
+ HRESULT CreateVertexShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [out] ID3D10VertexShader **ppVertexShader);
+ HRESULT CreateGeometryShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [out] ID3D10GeometryShader **ppGeometryShader);
+ HRESULT CreateGeometryShaderWithStreamOutput(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] const D3D10_SO_DECLARATION_ENTRY *pSODeclaration,
+ [in] UINT NumEntries,
+ [in] UINT OutputStreamStride,
+ [out] ID3D10GeometryShader **ppGeometryShader);
+ HRESULT CreatePixelShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [out] ID3D10PixelShader **ppPixelShader);
+ HRESULT CreateBlendState(
+ [in] const D3D10_BLEND_DESC *pBlendStateDesc,
+ [out] ID3D10BlendState **ppBlendState);
+ HRESULT CreateDepthStencilState(
+ [in] const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc,
+ [out] ID3D10DepthStencilState **ppDepthStencilState);
+ HRESULT CreateRasterizerState(
+ [in] const D3D10_RASTERIZER_DESC *pRasterizerDesc,
+ [out] ID3D10RasterizerState **ppRasterizerState);
+ HRESULT CreateSamplerState(
+ [in] const D3D10_SAMPLER_DESC *pSamplerDesc,
+ [out] ID3D10SamplerState **ppSamplerState);
+ HRESULT CreateQuery(
+ [in] const D3D10_QUERY_DESC *pQueryDesc,
+ [out] ID3D10Query **ppQuery);
+ HRESULT CreatePredicate(
+ [in] const D3D10_QUERY_DESC *pPredicateDesc,
+ [out] ID3D10Predicate **ppPredicate);
+ HRESULT CreateCounter(
+ [in] const D3D10_COUNTER_DESC *pCounterDesc,
+ [out] ID3D10Counter **ppCounter);
+ HRESULT CheckFormatSupport(
+ [in] DXGI_FORMAT Format,
+ [out] UINT *pFormatSupport);
+ HRESULT CheckMultisampleQualityLevels(
+ [in] DXGI_FORMAT Format,
+ [in] UINT SampleCount,
+ [out] UINT *pNumQualityLevels);
+ void CheckCounterInfo(
+ [out] D3D10_COUNTER_INFO *pCounterInfo);
+ HRESULT CheckCounter(
+ [in] const D3D10_COUNTER_DESC *pDesc,
+ [out] D3D10_COUNTER_TYPE *pType,
+ [out] UINT *pActiveCounters,
+ [out] char *name,
+ [in, out] UINT *pNameLength,
+ [out] char *units,
+ [in, out] UINT *pUnitsLength,
+ [out] char *description,
+ [in, out] UINT *pDescriptionLength);
+ UINT GetCreationFlags();
+ HRESULT OpenSharedResource(
+ [in] HANDLE hResource,
+ [in] REFIID ReturnedInterface,
+ [out] void **ppResource);
+ void SetTextFilterSize(
+ [in] UINT Width,
+ [in] UINT Height);
+ void GetTextFilterSize(
+ [out] UINT *pWidth,
+ [out] UINT *pHeight);
+}
+
+[
+ object,
+ local,
+ uuid(9b7e4e00-342c-4106-a19f-4f2704f689f0)
+]
+interface ID3D10Multithread : IUnknown
+{
+ void Enter();
+ void Leave();
+ BOOL SetMultithreadProtected(
+ [in] BOOL bMTProtect);
+ BOOL GetMultithreadProtected();
+}
+
+cpp_quote("#ifndef D3D10_IGNORE_SDK_LAYERS")
+cpp_quote("/* FIXME: # include <d3d10sdklayers.h> */")
+cpp_quote("#endif")
+cpp_quote("#include \"d3d10misc.h\"")
+cpp_quote("#include \"d3d10shader.h\"")
+cpp_quote("#include \"d3d10effect.h\"")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl
new file mode 100644
index 00000000..fe18b05c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1.idl
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2010 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+import "d3d10.idl";
+cpp_quote("#include <d3d10_1shader.h>")
+
+const UINT D3D10_1_SHADER_MAJOR_VERSION = 4;
+const UINT D3D10_1_SHADER_MINOR_VERSION = 1;
+
+typedef enum D3D10_FEATURE_LEVEL1
+{
+ D3D10_FEATURE_LEVEL_10_0 = 0xa000,
+ D3D10_FEATURE_LEVEL_10_1 = 0xa100,
+ D3D10_FEATURE_LEVEL_9_1 = 0x9100,
+ D3D10_FEATURE_LEVEL_9_2 = 0x9200,
+ D3D10_FEATURE_LEVEL_9_3 = 0x9300
+} D3D10_FEATURE_LEVEL1;
+
+typedef struct D3D10_RENDER_TARGET_BLEND_DESC1
+{
+ BOOL BlendEnable;
+ D3D10_BLEND SrcBlend;
+ D3D10_BLEND DestBlend;
+ D3D10_BLEND_OP BlendOp;
+ D3D10_BLEND SrcBlendAlpha;
+ D3D10_BLEND DestBlendAlpha;
+ D3D10_BLEND_OP BlendOpAlpha;
+ UINT8 RenderTargetWriteMask;
+} D3D10_RENDER_TARGET_BLEND_DESC1;
+
+typedef struct D3D10_BLEND_DESC1
+{
+ BOOL AlphaToCoverageEnable;
+ BOOL IndependentBlendEnable;
+ D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT];
+} D3D10_BLEND_DESC1;
+
+[
+ uuid(edad8d99-8a35-4d6d-8566-2ea276cde161),
+ object,
+ local,
+ pointer_default(unique)
+]
+interface ID3D10BlendState1 : ID3D10BlendState
+{
+ void GetDesc1([out] D3D10_BLEND_DESC1 *pDesc);
+}
+
+typedef struct D3D10_TEXCUBE_ARRAY_SRV1
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ UINT First2DArrayFace;
+ UINT NumCubes;
+} D3D10_TEXCUBE_ARRAY_SRV1;
+
+typedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1;
+
+typedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1
+{
+ DXGI_FORMAT Format;
+ D3D10_SRV_DIMENSION1 ViewDimension;
+ union {
+ D3D10_BUFFER_SRV Buffer;
+ D3D10_TEX1D_SRV Texture1D;
+ D3D10_TEX1D_ARRAY_SRV Texture1DArray;
+ D3D10_TEX2D_SRV Texture2D;
+ D3D10_TEX2D_ARRAY_SRV Texture2DArray;
+ D3D10_TEX2DMS_SRV Texture2DMS;
+ D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+ D3D10_TEX3D_SRV Texture3D;
+ D3D10_TEXCUBE_SRV TextureCube;
+ D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray;
+ };
+} D3D10_SHADER_RESOURCE_VIEW_DESC1;
+
+[
+ uuid(9b7e4c87-342c-4106-a19f-4f2704f689f0),
+ object,
+ local,
+ pointer_default(unique)
+]
+interface ID3D10ShaderResourceView1 : ID3D10ShaderResourceView
+{
+ void GetDesc1([out] D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc);
+}
+
+[
+ uuid(9b7e4c8f-342c-4106-a19f-4f2704f689f0),
+ object,
+ local,
+ pointer_default(unique)
+]
+interface ID3D10Device1 : ID3D10Device
+{
+ HRESULT CreateShaderResourceView1(
+ [in] ID3D10Resource *pResource,
+ [in, out] const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc,
+ [out] ID3D10ShaderResourceView1 **ppSRView);
+
+ HRESULT CreateBlendState1(
+ [in] const D3D10_BLEND_DESC1 *pBlendStateDesc,
+ [out] ID3D10BlendState1 **ppBlendState);
+
+ D3D10_FEATURE_LEVEL1 GetFeatureLevel();
+}
+
+const UINT D3D10_1_SDK_VERSION = 0x20;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h
new file mode 100644
index 00000000..f0114258
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10_1shader.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2010 Rico Schüller
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3D10_1SHADER_H__
+#define __D3D10_1SHADER_H__
+
+#include "d3d10shader.h"
+
+DEFINE_GUID(IID_ID3D10ShaderReflection1, 0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47);
+
+#define INTERFACE ID3D10ShaderReflection1
+DECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown)
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* ID3D10ShaderReflection1 methods */
+ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;
+ STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;
+ STDMETHOD(GetMovInstructionCount)(THIS_ UINT *count) PURE;
+ STDMETHOD(GetMovcInstructionCount)(THIS_ UINT *count) PURE;
+ STDMETHOD(GetConversionInstructionCount)(THIS_ UINT *count) PURE;
+ STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT *count) PURE;
+ STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE *prim) PURE;
+ STDMETHOD(IsLevel9Shader)(THIS_ BOOL *level9shader) PURE;
+ STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL *samplefrequency) PURE;
+};
+#undef INTERFACE
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h
new file mode 100644
index 00000000..5176168a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10effect.h
@@ -0,0 +1,866 @@
+/*
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D10EFFECT_H
+#define __WINE_D3D10EFFECT_H
+
+#include "d3d10.h"
+
+#define D3D10_EFFECT_VARIABLE_POOLED 0x1
+#define D3D10_EFFECT_VARIABLE_ANNOTATION 0x2
+#define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT 0x4
+
+#ifndef D3D10_BYTES_FROM_BITS
+#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) >> 3)
+#endif
+
+typedef enum _D3D10_DEVICE_STATE_TYPES
+{
+ D3D10_DST_SO_BUFFERS = 1,
+ D3D10_DST_OM_RENDER_TARGETS,
+ D3D10_DST_DEPTH_STENCIL_STATE,
+ D3D10_DST_BLEND_STATE,
+ D3D10_DST_VS,
+ D3D10_DST_VS_SAMPLERS,
+ D3D10_DST_VS_SHADER_RESOURCES,
+ D3D10_DST_VS_CONSTANT_BUFFERS,
+ D3D10_DST_GS,
+ D3D10_DST_GS_SAMPLERS,
+ D3D10_DST_GS_SHADER_RESOURCES,
+ D3D10_DST_GS_CONSTANT_BUFFERS,
+ D3D10_DST_PS,
+ D3D10_DST_PS_SAMPLERS,
+ D3D10_DST_PS_SHADER_RESOURCES,
+ D3D10_DST_PS_CONSTANT_BUFFERS,
+ D3D10_DST_IA_VERTEX_BUFFERS,
+ D3D10_DST_IA_INDEX_BUFFER,
+ D3D10_DST_IA_INPUT_LAYOUT,
+ D3D10_DST_IA_PRIMITIVE_TOPOLOGY,
+ D3D10_DST_RS_VIEWPORTS,
+ D3D10_DST_RS_SCISSOR_RECTS,
+ D3D10_DST_RS_RASTERIZER_STATE,
+ D3D10_DST_PREDICATION,
+} D3D10_DEVICE_STATE_TYPES;
+
+typedef struct _D3D10_EFFECT_TYPE_DESC
+{
+ const char *TypeName;
+ D3D10_SHADER_VARIABLE_CLASS Class;
+ D3D10_SHADER_VARIABLE_TYPE Type;
+ UINT Elements;
+ UINT Members;
+ UINT Rows;
+ UINT Columns;
+ UINT PackedSize;
+ UINT UnpackedSize;
+ UINT Stride;
+} D3D10_EFFECT_TYPE_DESC;
+
+typedef struct _D3D10_EFFECT_VARIABLE_DESC
+{
+ const char *Name;
+ const char *Semantic;
+ UINT Flags;
+ UINT Annotations;
+ UINT BufferOffset;
+ UINT ExplicitBindPoint;
+} D3D10_EFFECT_VARIABLE_DESC;
+
+typedef struct _D3D10_TECHNIQUE_DESC
+{
+ const char *Name;
+ UINT Passes;
+ UINT Annotations;
+} D3D10_TECHNIQUE_DESC;
+
+typedef struct _D3D10_STATE_BLOCK_MASK
+{
+ BYTE VS;
+ BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE GS;
+ BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE PS;
+ BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE IAIndexBuffer;
+ BYTE IAInputLayout;
+ BYTE IAPrimitiveTopology;
+ BYTE OMRenderTargets;
+ BYTE OMDepthStencilState;
+ BYTE OMBlendState;
+ BYTE RSViewports;
+ BYTE RSScissorRects;
+ BYTE RSRasterizerState;
+ BYTE SOBuffers;
+ BYTE Predication;
+} D3D10_STATE_BLOCK_MASK;
+
+typedef struct _D3D10_EFFECT_DESC
+{
+ BOOL IsChildEffect;
+ UINT ConstantBuffers;
+ UINT SharedConstantBuffers;
+ UINT GlobalVariables;
+ UINT SharedGlobalVariables;
+ UINT Techniques;
+} D3D10_EFFECT_DESC;
+
+typedef struct _D3D10_EFFECT_SHADER_DESC
+{
+ const BYTE *pInputSignature;
+ BOOL IsInline;
+ const BYTE *pBytecode;
+ UINT BytecodeLength;
+ const char *SODecl;
+ UINT NumInputSignatureEntries;
+ UINT NumOutputSignatureEntries;
+} D3D10_EFFECT_SHADER_DESC;
+
+typedef struct _D3D10_PASS_DESC
+{
+ const char *Name;
+ UINT Annotations;
+ BYTE *pIAInputSignature;
+ SIZE_T IAInputSignatureSize;
+ UINT StencilRef;
+ UINT SampleMask;
+ FLOAT BlendFactor[4];
+} D3D10_PASS_DESC;
+
+typedef struct _D3D10_PASS_SHADER_DESC
+{
+ struct ID3D10EffectShaderVariable *pShaderVariable;
+ UINT ShaderIndex;
+} D3D10_PASS_SHADER_DESC;
+
+#define D3D10_EFFECT_COMPILE_CHILD_EFFECT 0x0001
+#define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS 0x0002
+#define D3D10_EFFECT_SINGLE_THREADED 0x0008
+
+DEFINE_GUID(IID_ID3D10EffectType, 0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x00, 0x18, 0x0b, 0x9b, 0x88, 0xfd);
+
+#define INTERFACE ID3D10EffectType
+DECLARE_INTERFACE(ID3D10EffectType)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_TYPE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetMemberTypeBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(const char *, GetMemberName)(THIS_ UINT index) PURE;
+ STDMETHOD_(const char *, GetMemberSemantic)(THIS_ UINT index) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectVariable, 0xae897105, 0x00e6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b);
+
+#define INTERFACE ID3D10EffectVariable
+DECLARE_INTERFACE(ID3D10EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectConstantBuffer, 0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3);
+
+#define INTERFACE ID3D10EffectConstantBuffer
+DECLARE_INTERFACE_(ID3D10EffectConstantBuffer, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectConstantBuffer methods */
+ STDMETHOD(SetConstantBuffer)(THIS_ ID3D10Buffer *buffer) PURE;
+ STDMETHOD(GetConstantBuffer)(THIS_ ID3D10Buffer **buffer) PURE;
+ STDMETHOD(SetTextureBuffer)(THIS_ ID3D10ShaderResourceView *view) PURE;
+ STDMETHOD(GetTextureBuffer)(THIS_ ID3D10ShaderResourceView **view) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectScalarVariable, 0x00e48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x02, 0x2d, 0xee, 0x53, 0x43, 0x1f);
+
+#define INTERFACE ID3D10EffectScalarVariable
+DECLARE_INTERFACE_(ID3D10EffectScalarVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectScalarVariable methods */
+ STDMETHOD(SetFloat)(THIS_ float value) PURE;
+ STDMETHOD(GetFloat)(THIS_ float *value) PURE;
+ STDMETHOD(SetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE;
+ STDMETHOD(GetFloatArray)(THIS_ float *values, UINT offset, UINT count) PURE;
+ STDMETHOD(SetInt)(THIS_ int value) PURE;
+ STDMETHOD(GetInt)(THIS_ int *value) PURE;
+ STDMETHOD(SetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE;
+ STDMETHOD(GetIntArray)(THIS_ int *values, UINT offset, UINT count) PURE;
+ STDMETHOD(SetBool)(THIS_ BOOL value) PURE;
+ STDMETHOD(GetBool)(THIS_ BOOL *value) PURE;
+ STDMETHOD(SetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;
+ STDMETHOD(GetBoolArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectVectorVariable, 0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81);
+
+#define INTERFACE ID3D10EffectVectorVariable
+DECLARE_INTERFACE_(ID3D10EffectVectorVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectVectorVariable methods */
+ STDMETHOD(SetBoolVector)(THIS_ BOOL *value) PURE;
+ STDMETHOD(SetIntVector)(THIS_ int *value) PURE;
+ STDMETHOD(SetFloatVector)(THIS_ float *value) PURE;
+ STDMETHOD(GetBoolVector)(THIS_ BOOL *value) PURE;
+ STDMETHOD(GetIntVector)(THIS_ int *value) PURE;
+ STDMETHOD(GetFloatVector)(THIS_ float *value) PURE;
+ STDMETHOD(SetBoolVectorArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;
+ STDMETHOD(SetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE;
+ STDMETHOD(SetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE;
+ STDMETHOD(GetBoolVectorArray)(THIS_ BOOL *values, UINT offset, UINT count) PURE;
+ STDMETHOD(GetIntVectorArray)(THIS_ int *values, UINT offset, UINT count) PURE;
+ STDMETHOD(GetFloatVectorArray)(THIS_ float *values, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectMatrixVariable, 0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0);
+
+#define INTERFACE ID3D10EffectMatrixVariable
+DECLARE_INTERFACE_(ID3D10EffectMatrixVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectMatrixVariable methods */
+ STDMETHOD(SetMatrix)(THIS_ float *data) PURE;
+ STDMETHOD(GetMatrix)(THIS_ float *data) PURE;
+ STDMETHOD(SetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetMatrixArray)(THIS_ float *data, UINT offset, UINT count) PURE;
+ STDMETHOD(SetMatrixTranspose)(THIS_ float *data) PURE;
+ STDMETHOD(GetMatrixTranspose)(THIS_ float *data) PURE;
+ STDMETHOD(SetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposeArray)(THIS_ float *data, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectStringVariable, 0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff);
+
+#define INTERFACE ID3D10EffectStringVariable
+DECLARE_INTERFACE_(ID3D10EffectStringVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectStringVariable methods */
+ STDMETHOD(GetString)(THIS_ const char **str) PURE;
+ STDMETHOD(GetStringArray)(THIS_ const char **strs, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectShaderResourceVariable,
+ 0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc);
+
+#define INTERFACE ID3D10EffectShaderResourceVariable
+DECLARE_INTERFACE_(ID3D10EffectShaderResourceVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectShaderResourceVariable methods */
+ STDMETHOD(SetResource)(THIS_ ID3D10ShaderResourceView *resource) PURE;
+ STDMETHOD(GetResource)(THIS_ ID3D10ShaderResourceView **resource) PURE;
+ STDMETHOD(SetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE;
+ STDMETHOD(GetResourceArray)(THIS_ ID3D10ShaderResourceView **resources, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable,
+ 0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17);
+
+#define INTERFACE ID3D10EffectRenderTargetViewVariable
+DECLARE_INTERFACE_(ID3D10EffectRenderTargetViewVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectRenderTargetViewVariable methods */
+ STDMETHOD(SetRenderTarget)(THIS_ ID3D10RenderTargetView *view) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ ID3D10RenderTargetView **view) PURE;
+ STDMETHOD(SetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRenderTargetArray)(THIS_ ID3D10RenderTargetView **views, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable,
+ 0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23);
+
+#define INTERFACE ID3D10EffectDepthStencilViewVariable
+DECLARE_INTERFACE_(ID3D10EffectDepthStencilViewVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectDepthStencilViewVariable methods */
+ STDMETHOD(SetDepthStencil)(THIS_ ID3D10DepthStencilView *view) PURE;
+ STDMETHOD(GetDepthStencil)(THIS_ ID3D10DepthStencilView **view) PURE;
+ STDMETHOD(SetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE;
+ STDMETHOD(GetDepthStencilArray)(THIS_ ID3D10DepthStencilView **views, UINT offset, UINT count) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectShaderVariable, 0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x04, 0x07, 0xa0, 0x7d, 0x9e, 0x06);
+
+#define INTERFACE ID3D10EffectShaderVariable
+DECLARE_INTERFACE_(ID3D10EffectShaderVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectShaderVariable methods */
+ STDMETHOD(GetShaderDesc)(THIS_ UINT index, D3D10_EFFECT_SHADER_DESC *desc) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ UINT index, ID3D10VertexShader **shader) PURE;
+ STDMETHOD(GetGeometryShader)(THIS_ UINT index, ID3D10GeometryShader **shader) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ UINT index, ID3D10PixelShader **shader) PURE;
+ STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index,
+ D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT shader_index, UINT element_index,
+ D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectBlendVariable, 0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0x0e, 0x91, 0x60, 0xcf, 0xb0, 0x7b);
+
+#define INTERFACE ID3D10EffectBlendVariable
+DECLARE_INTERFACE_(ID3D10EffectBlendVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectBlendVariable methods */
+ STDMETHOD(GetBlendState)(THIS_ UINT index, ID3D10BlendState **blend_state) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_BLEND_DESC *desc) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectDepthStencilVariable,
+ 0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x01, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d);
+
+#define INTERFACE ID3D10EffectDepthStencilVariable
+DECLARE_INTERFACE_(ID3D10EffectDepthStencilVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectDepthStencilVariable methods */
+ STDMETHOD(GetDepthStencilState)(THIS_ UINT index, ID3D10DepthStencilState **depth_stencil_state) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_DEPTH_STENCIL_DESC *desc) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectRasterizerVariable,
+ 0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0x0b, 0x34);
+
+#define INTERFACE ID3D10EffectRasterizerVariable
+DECLARE_INTERFACE_(ID3D10EffectRasterizerVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectRasterizerVariable methods */
+ STDMETHOD(GetRasterizerState)(THIS_ UINT index, ID3D10RasterizerState **rasterizer_state) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_RASTERIZER_DESC *desc) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectSamplerVariable,
+ 0x6530d5c7, 0x07e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80);
+
+#define INTERFACE ID3D10EffectSamplerVariable
+DECLARE_INTERFACE_(ID3D10EffectSamplerVariable, ID3D10EffectVariable)
+{
+ /* ID3D10EffectVariable methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectType *, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetMemberBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetElement)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetParentConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectScalarVariable *, AsScalar)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectVectorVariable *, AsVector)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectMatrixVariable *, AsMatrix)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectStringVariable *, AsString)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderResourceVariable *, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRenderTargetViewVariable *, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilViewVariable *, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectShaderVariable *, AsShader)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectBlendVariable *, AsBlend)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectDepthStencilVariable *, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectRasterizerVariable *, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(struct ID3D10EffectSamplerVariable *, AsSampler)(THIS) PURE;
+ STDMETHOD(SetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *data, UINT offset, UINT count) PURE;
+ /* ID3D10EffectSamplerVariable methods */
+ STDMETHOD(GetSampler)(THIS_ UINT index, ID3D10SamplerState **sampler) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT index, D3D10_SAMPLER_DESC *desc) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectTechnique, 0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75);
+
+#define INTERFACE ID3D10EffectTechnique
+DECLARE_INTERFACE(ID3D10EffectTechnique)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_TECHNIQUE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectPass *, GetPassByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectPass *, GetPassByName)(THIS_ const char *name) PURE;
+ STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10Effect, 0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0x0d, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7);
+
+#define INTERFACE ID3D10Effect
+DECLARE_INTERFACE_(ID3D10Effect, IUnknown)
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* ID3D10Effect methods */
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(BOOL, IsPool)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetVariableBySemantic)(THIS_ const char *semantic) PURE;
+ STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectTechnique *, GetTechniqueByName)(THIS_ const char *name) PURE;
+ STDMETHOD(Optimize)(THIS) PURE;
+ STDMETHOD_(BOOL, IsOptimized)(THIS) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);
+
+#define INTERFACE ID3D10EffectPool
+DECLARE_INTERFACE_(ID3D10EffectPool, IUnknown)
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* ID3D10EffectPool methods */
+ STDMETHOD_(struct ID3D10Effect *, AsEffect)(THIS) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10EffectPass, 0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54);
+
+#define INTERFACE ID3D10EffectPass
+DECLARE_INTERFACE(ID3D10EffectPass)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3D10_PASS_DESC *desc) PURE;
+ STDMETHOD(GetVertexShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;
+ STDMETHOD(GetGeometryShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;
+ STDMETHOD(GetPixelShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10EffectVariable *, GetAnnotationByName)(THIS_ const char *name) PURE;
+ STDMETHOD(Apply)(THIS_ UINT flags) PURE;
+ STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *mask) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10StateBlock, 0x0803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x08);
+
+#define INTERFACE ID3D10StateBlock
+DECLARE_INTERFACE_(ID3D10StateBlock, IUnknown)
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **object) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* ID3D10StateBlock methods */
+ STDMETHOD(Capture)(THIS) PURE;
+ STDMETHOD(Apply)(THIS) PURE;
+ STDMETHOD(ReleaseAllDeviceObjects)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ ID3D10Device **device) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3D10CompileEffectFromMemory(void *data, SIZE_T data_size, const char *filename,
+ const D3D10_SHADER_MACRO *defines, ID3D10Include *include, UINT hlsl_flags, UINT fx_flags,
+ ID3D10Blob **effect, ID3D10Blob **errors);
+HRESULT WINAPI D3D10CreateEffectFromMemory(void *data, SIZE_T data_size, UINT flags,
+ ID3D10Device *device, ID3D10EffectPool *effect_pool, ID3D10Effect **effect);
+HRESULT WINAPI D3D10CreateStateBlock(ID3D10Device *device,
+ D3D10_STATE_BLOCK_MASK *mask, ID3D10StateBlock **stateblock);
+
+HRESULT WINAPI D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *mask_x,
+ D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
+HRESULT WINAPI D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *mask);
+HRESULT WINAPI D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *mask,
+ D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
+HRESULT WINAPI D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *mask);
+HRESULT WINAPI D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *mask,
+ D3D10_DEVICE_STATE_TYPES state_type, UINT start_idx, UINT count);
+BOOL WINAPI D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *mask,
+ D3D10_DEVICE_STATE_TYPES state_type, UINT idx);
+HRESULT WINAPI D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *mask_x,
+ D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
+HRESULT WINAPI D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *mask_x,
+ D3D10_STATE_BLOCK_MASK *mask_y, D3D10_STATE_BLOCK_MASK *result);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3D10EFFECT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h
new file mode 100644
index 00000000..a9c6441c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10misc.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2008 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3D10MISC_H__
+#define __D3D10MISC_H__
+
+#include "d3d10.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum D3D10_DRIVER_TYPE {
+ D3D10_DRIVER_TYPE_HARDWARE = 0,
+ D3D10_DRIVER_TYPE_REFERENCE = 1,
+ D3D10_DRIVER_TYPE_NULL = 2,
+ D3D10_DRIVER_TYPE_SOFTWARE = 3,
+} D3D10_DRIVER_TYPE;
+
+HRESULT WINAPI D3D10CreateDevice(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
+ HMODULE swrast, UINT flags, UINT sdk_version, ID3D10Device **device);
+
+HRESULT WINAPI D3D10CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D10_DRIVER_TYPE driver_type,
+ HMODULE swrast, UINT flags, UINT sdk_version, DXGI_SWAP_CHAIN_DESC *swapchain_desc,
+ IDXGISwapChain **swapchain, ID3D10Device **device);
+
+HRESULT WINAPI D3D10CreateBlob(SIZE_T data_size, ID3D10Blob **blob);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3D10MISC_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h
new file mode 100644
index 00000000..5b3435e1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d10shader.h
@@ -0,0 +1,242 @@
+/*
+ * Copyright 2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D10SHADER_H
+#define __WINE_D3D10SHADER_H
+
+#include "d3d10.h"
+
+#define D3D10_SHADER_DEBUG 0x0001
+#define D3D10_SHADER_SKIP_VALIDATION 0x0002
+#define D3D10_SHADER_SKIP_OPTIMIZATION 0x0004
+#define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR 0x0008
+#define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR 0x0010
+#define D3D10_SHADER_PARTIAL_PRECISION 0x0020
+#define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT 0x0040
+#define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT 0x0080
+#define D3D10_SHADER_NO_PRESHADER 0x0100
+#define D3D10_SHADER_AVOID_FLOW_CONTROL 0x0200
+#define D3D10_SHADER_PREFER_FLOW_CONTROL 0x0400
+#define D3D10_SHADER_ENABLE_STRICTNESS 0x0800
+#define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000
+#define D3D10_SHADER_IEEE_STRICTNESS 0x2000
+#define D3D10_SHADER_WARNINGS_ARE_ERRORS 0x40000
+
+#define D3D10_SHADER_OPTIMIZATION_LEVEL0 0x4000
+#define D3D10_SHADER_OPTIMIZATION_LEVEL1 0x0000
+#define D3D10_SHADER_OPTIMIZATION_LEVEL2 0xC000
+#define D3D10_SHADER_OPTIMIZATION_LEVEL3 0x8000
+
+/* These are defined as version-neutral in d3dcommon.h */
+typedef D3D_SHADER_MACRO D3D10_SHADER_MACRO;
+typedef D3D_SHADER_MACRO *LPD3D10_SHADER_MACRO;
+
+typedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS;
+typedef D3D_SHADER_VARIABLE_CLASS *LPD3D10_SHADER_VARIABLE_CLASS;
+
+typedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE;
+typedef D3D_CBUFFER_TYPE *LPD3D10_CBUFFER_TYPE;
+
+typedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE;
+
+typedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE;
+
+typedef D3D_NAME D3D10_NAME;
+
+typedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE;
+typedef D3D_SHADER_INPUT_TYPE *LPD3D10_SHADER_INPUT_TYPE;
+
+typedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE;
+typedef D3D_SHADER_VARIABLE_TYPE *LPD3D10_SHADER_VARIABLE_TYPE;
+
+typedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE;
+typedef ID3DInclude ID3D10Include;
+typedef ID3DInclude *LPD3D10INCLUDE;
+#define IID_ID3D10Include IID_ID3DInclude
+
+typedef struct _D3D10_SHADER_INPUT_BIND_DESC
+{
+ const char *Name;
+ D3D10_SHADER_INPUT_TYPE Type;
+ UINT BindPoint;
+ UINT BindCount;
+ UINT uFlags;
+ D3D10_RESOURCE_RETURN_TYPE ReturnType;
+ D3D10_SRV_DIMENSION Dimension;
+ UINT NumSamples;
+} D3D10_SHADER_INPUT_BIND_DESC;
+
+typedef struct _D3D10_SIGNATURE_PARAMETER_DESC
+{
+ const char *SemanticName;
+ UINT SemanticIndex;
+ UINT Register;
+ D3D10_NAME SystemValueType;
+ D3D10_REGISTER_COMPONENT_TYPE ComponentType;
+ BYTE Mask;
+ BYTE ReadWriteMask;
+} D3D10_SIGNATURE_PARAMETER_DESC;
+
+typedef struct _D3D10_SHADER_DESC
+{
+ UINT Version;
+ const char *Creator;
+ UINT Flags;
+ UINT ConstantBuffers;
+ UINT BoundResources;
+ UINT InputParameters;
+ UINT OutputParameters;
+ UINT InstructionCount;
+ UINT TempRegisterCount;
+ UINT TempArrayCount;
+ UINT DefCount;
+ UINT DclCount;
+ UINT TextureNormalInstructions;
+ UINT TextureLoadInstructions;
+ UINT TextureCompInstructions;
+ UINT TextureBiasInstructions;
+ UINT TextureGradientInstructions;
+ UINT FloatInstructionCount;
+ UINT IntInstructionCount;
+ UINT UintInstructionCount;
+ UINT StaticFlowControlCount;
+ UINT DynamicFlowControlCount;
+ UINT MacroInstructionCount;
+ UINT ArrayInstructionCount;
+ UINT CutInstructionCount;
+ UINT EmitInstructionCount;
+ D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;
+ UINT GSMaxOutputVertexCount;
+} D3D10_SHADER_DESC;
+
+typedef struct _D3D10_SHADER_BUFFER_DESC
+{
+ const char *Name;
+ D3D10_CBUFFER_TYPE Type;
+ UINT Variables;
+ UINT Size;
+ UINT uFlags;
+} D3D10_SHADER_BUFFER_DESC;
+
+typedef struct _D3D10_SHADER_VARIABLE_DESC
+{
+ const char *Name;
+ UINT StartOffset;
+ UINT Size;
+ UINT uFlags;
+ void *DefaultValue;
+} D3D10_SHADER_VARIABLE_DESC;
+
+typedef struct _D3D10_SHADER_TYPE_DESC
+{
+ D3D10_SHADER_VARIABLE_CLASS Class;
+ D3D10_SHADER_VARIABLE_TYPE Type;
+ UINT Rows;
+ UINT Columns;
+ UINT Elements;
+ UINT Members;
+ UINT Offset;
+} D3D10_SHADER_TYPE_DESC;
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionType, 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd);
+
+#define INTERFACE ID3D10ShaderReflectionType
+DECLARE_INTERFACE(ID3D10ShaderReflectionType)
+{
+ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionVariable, 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1);
+
+#define INTERFACE ID3D10ShaderReflectionVariable
+DECLARE_INTERFACE(ID3D10ShaderReflectionVariable)
+{
+ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionType *, GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0);
+
+#define INTERFACE ID3D10ShaderReflectionConstantBuffer
+DECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer)
+{
+ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D10ShaderReflection, 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa);
+
+#define INTERFACE ID3D10ShaderReflection
+DECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown)
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* ID3D10ShaderReflection methods */
+ STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D10ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D10_SHADER_INPUT_BIND_DESC *desc) PURE;
+ STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D10_SIGNATURE_PARAMETER_DESC *desc) PURE;
+};
+#undef INTERFACE
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3D10CompileShader(const char *data, SIZE_T data_size, const char *filename,
+ const D3D10_SHADER_MACRO *defines, ID3D10Include *include, const char *entrypoint,
+ const char *profile, UINT flags, ID3D10Blob **shader, ID3D10Blob **error_messages);
+HRESULT WINAPI D3D10DisassembleShader(const void *data, SIZE_T data_size,
+ BOOL color_code, const char *comments, ID3D10Blob **disassembly);
+const char * WINAPI D3D10GetVertexShaderProfile(ID3D10Device *device);
+const char * WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *device);
+const char * WINAPI D3D10GetPixelShaderProfile(ID3D10Device *device);
+
+HRESULT WINAPI D3D10ReflectShader(const void *data, SIZE_T data_size, ID3D10ShaderReflection **reflector);
+HRESULT WINAPI D3D10GetInputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+HRESULT WINAPI D3D10GetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+HRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+HRESULT WINAPI D3D10GetShaderDebugInfo(const void *data, SIZE_T data_size, ID3D10Blob **blob);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3D10SHADER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl
new file mode 100644
index 00000000..41c92489
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11.idl
@@ -0,0 +1,2010 @@
+/*
+ * Copyright 2010 Rico Schüller
+ * Copyright 2013 Austin English
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgi.idl";
+import "d3dcommon.idl";
+
+typedef D3D_PRIMITIVE D3D11_PRIMITIVE;
+typedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY;
+typedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;
+typedef RECT D3D11_RECT;
+
+const UINT D3D11_DEFAULT_DEPTH_BIAS = 0;
+cpp_quote("#define D3D11_DEFAULT_DEPTH_BIAS_CLAMP 0.0f")
+const UINT D3D11_DEFAULT_MAX_ANISOTROPY = 16;
+cpp_quote("#define D3D11_DEFAULT_MIP_LOD_BIAS 0.0f")
+const UINT D3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0;
+const UINT D3D11_DEFAULT_SAMPLE_MASK = 0xffffffff;
+const UINT D3D11_DEFAULT_SCISSOR_ENDX = 0;
+const UINT D3D11_DEFAULT_SCISSOR_ENDY = 0;
+const UINT D3D11_DEFAULT_SCISSOR_STARTX = 0;
+const UINT D3D11_DEFAULT_SCISSOR_STARTY = 0;
+cpp_quote("#define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS 0.0f")
+const UINT D3D11_DEFAULT_STENCIL_READ_MASK = 0xff;
+const UINT D3D11_DEFAULT_STENCIL_REFERENCE = 0;
+const UINT D3D11_DEFAULT_STENCIL_WRITE_MASK = 0xff;
+const UINT D3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0;
+const UINT D3D11_DEFAULT_VIEWPORT_HEIGHT = 0;
+cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH 0.0f")
+cpp_quote("#define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH 0.0f")
+const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTX = 0;
+const UINT D3D11_DEFAULT_VIEWPORT_TOPLEFTY = 0;
+const UINT D3D11_DEFAULT_VIEWPORT_WIDTH = 0;
+
+cpp_quote("#define D3D11_FLOAT32_MAX (3.402823466e+38f)")
+
+const unsigned int D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT = 8;
+
+const UINT D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384;
+const UINT D3D11_MAX_MAXANISOTROPY = 16;
+const UINT D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT = 32;
+const UINT D3D11_VIEWPORT_BOUNDS_MAX = 32767;
+const INT D3D11_VIEWPORT_BOUNDS_MIN = -32768;
+const UINT D3D11_SHADER_MAJOR_VERSION = 5;
+const UINT D3D11_SHADER_MAX_INSTANCES = 65535;
+const UINT D3D11_SHADER_MAX_INTERFACES = 253;
+const UINT D3D11_SHADER_MAX_INTERFACE_CALL_SITES = 4096;
+const UINT D3D11_SHADER_MAX_TYPES = 65535;
+const UINT D3D11_SHADER_MINOR_VERSION = 0;
+const UINT D3D11_VS_OUTPUT_REGISTER_COUNT = 32;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_DEFAULT {};")
+cpp_quote("extern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT;")
+cpp_quote("#endif")
+
+typedef enum D3D11_BLEND
+{
+ D3D11_BLEND_ZERO = 1,
+ D3D11_BLEND_ONE = 2,
+ D3D11_BLEND_SRC_COLOR = 3,
+ D3D11_BLEND_INV_SRC_COLOR = 4,
+ D3D11_BLEND_SRC_ALPHA = 5,
+ D3D11_BLEND_INV_SRC_ALPHA = 6,
+ D3D11_BLEND_DEST_ALPHA = 7,
+ D3D11_BLEND_INV_DEST_ALPHA = 8,
+ D3D11_BLEND_DEST_COLOR = 9,
+ D3D11_BLEND_INV_DEST_COLOR = 10,
+ D3D11_BLEND_SRC_ALPHA_SAT = 11,
+ D3D11_BLEND_BLEND_FACTOR = 14,
+ D3D11_BLEND_INV_BLEND_FACTOR = 15,
+ D3D11_BLEND_SRC1_COLOR = 16,
+ D3D11_BLEND_INV_SRC1_COLOR = 17,
+ D3D11_BLEND_SRC1_ALPHA = 18,
+ D3D11_BLEND_INV_SRC1_ALPHA = 19,
+} D3D11_BLEND;
+
+typedef enum D3D11_BLEND_OP
+{
+ D3D11_BLEND_OP_ADD = 1,
+ D3D11_BLEND_OP_SUBTRACT,
+ D3D11_BLEND_OP_REV_SUBTRACT,
+ D3D11_BLEND_OP_MIN,
+ D3D11_BLEND_OP_MAX
+} D3D11_BLEND_OP;
+
+typedef struct D3D11_BOX
+{
+ UINT left;
+ UINT top;
+ UINT front;
+ UINT right;
+ UINT bottom;
+ UINT back;
+} D3D11_BOX;
+
+typedef struct D3D11_BUFFER_RTV
+{
+ union
+ {
+ UINT FirstElement;
+ UINT ElementOffset;
+ };
+ union
+ {
+ UINT NumElements;
+ UINT ElementWidth;
+ };
+} D3D11_BUFFER_RTV;
+
+typedef struct D3D11_BUFFER_SRV
+{
+ union
+ {
+ UINT FirstElement;
+ UINT ElementOffset;
+ };
+ union
+ {
+ UINT NumElements;
+ UINT ElementWidth;
+ };
+} D3D11_BUFFER_SRV;
+
+typedef struct D3D11_BUFFER_UAV
+{
+ UINT FirstElement;
+ UINT NumElements;
+ UINT Flags;
+} D3D11_BUFFER_UAV;
+
+typedef struct D3D11_BUFFEREX_SRV
+{
+ UINT FirstElement;
+ UINT NumElements;
+ UINT Flags;
+} D3D11_BUFFEREX_SRV;
+
+typedef struct D3D11_CLASS_INSTANCE_DESC
+{
+ UINT InstanceId;
+ UINT InstanceIndex;
+ UINT TypeId;
+ UINT ConstantBuffer;
+ UINT BaseConstantBufferOffset;
+ UINT BaseTexture;
+ UINT BaseSampler;
+ BOOL Created;
+} D3D11_CLASS_INSTANCE_DESC;
+
+typedef enum D3D11_COMPARISON_FUNC
+{
+ D3D11_COMPARISON_NEVER = 1,
+ D3D11_COMPARISON_LESS,
+ D3D11_COMPARISON_EQUAL,
+ D3D11_COMPARISON_LESS_EQUAL,
+ D3D11_COMPARISON_GREATER,
+ D3D11_COMPARISON_NOT_EQUAL,
+ D3D11_COMPARISON_GREATER_EQUAL,
+ D3D11_COMPARISON_ALWAYS
+} D3D11_COMPARISON_FUNC;
+
+typedef enum D3D11_COUNTER
+{
+ D3D11_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000,
+} D3D11_COUNTER;
+
+typedef struct D3D11_COUNTER_DESC
+{
+ D3D11_COUNTER Counter;
+ UINT MiscFlags;
+} D3D11_COUNTER_DESC;
+
+typedef struct D3D11_COUNTER_INFO
+{
+ D3D11_COUNTER LastDeviceDependentCounter;
+ UINT NumSimultaneousCounters;
+ UINT8 NumDetectableParallelUnits;
+} D3D11_COUNTER_INFO;
+
+typedef enum D3D11_COUNTER_TYPE
+{
+ D3D11_COUNTER_TYPE_FLOAT32,
+ D3D11_COUNTER_TYPE_UINT16,
+ D3D11_COUNTER_TYPE_UINT32,
+ D3D11_COUNTER_TYPE_UINT64,
+} D3D11_COUNTER_TYPE;
+
+typedef enum D3D11_CULL_MODE
+{
+ D3D11_CULL_NONE = 1,
+ D3D11_CULL_FRONT,
+ D3D11_CULL_BACK
+} D3D11_CULL_MODE;
+
+typedef enum D3D11_DEPTH_WRITE_MASK
+{
+ D3D11_DEPTH_WRITE_MASK_ZERO,
+ D3D11_DEPTH_WRITE_MASK_ALL,
+} D3D11_DEPTH_WRITE_MASK;
+
+typedef enum D3D11_DEVICE_CONTEXT_TYPE
+{
+ D3D11_DEVICE_CONTEXT_IMMEDIATE,
+ D3D11_DEVICE_CONTEXT_DEFERRED,
+} D3D11_DEVICE_CONTEXT_TYPE;
+
+typedef enum D3D11_DSV_DIMENSION
+{
+ D3D11_DSV_DIMENSION_UNKNOWN,
+ D3D11_DSV_DIMENSION_TEXTURE1D,
+ D3D11_DSV_DIMENSION_TEXTURE1DARRAY,
+ D3D11_DSV_DIMENSION_TEXTURE2D,
+ D3D11_DSV_DIMENSION_TEXTURE2DARRAY,
+ D3D11_DSV_DIMENSION_TEXTURE2DMS,
+ D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY,
+} D3D11_DSV_DIMENSION;
+
+typedef enum D3D11_FEATURE
+{
+ D3D11_FEATURE_THREADING,
+ D3D11_FEATURE_DOUBLES,
+ D3D11_FEATURE_FORMAT_SUPPORT,
+ D3D11_FEATURE_FORMAT_SUPPORT2,
+ D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS,
+} D3D11_FEATURE;
+
+typedef enum D3D11_FILL_MODE
+{
+ D3D11_FILL_WIREFRAME = 2,
+ D3D11_FILL_SOLID
+} D3D11_FILL_MODE;
+
+typedef enum D3D11_FILTER_TYPE
+{
+ D3D11_FILTER_TYPE_POINT = 0,
+ D3D11_FILTER_TYPE_LINEAR = 1
+} D3D11_FILTER_TYPE;
+
+const UINT D3D11_MIN_FILTER_SHIFT = 4;
+const UINT D3D11_MAG_FILTER_SHIFT = 2;
+const UINT D3D11_MIP_FILTER_SHIFT = 0;
+const UINT D3D11_FILTER_TYPE_MASK = 0x00000003;
+const UINT D3D11_COMPARISON_FILTERING_BIT = 0x00000080;
+const UINT D3D11_ANISOTROPIC_FILTERING_BIT = 0x00000040;
+
+cpp_quote("#define D3D11_ENCODE_BASIC_FILTER(min, mag, mip, bComparison) \\")
+cpp_quote(" ((D3D11_FILTER)(((bComparison) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) | \\")
+cpp_quote(" (((min)&D3D11_FILTER_TYPE_MASK) << D3D11_MIN_FILTER_SHIFT) | \\")
+cpp_quote(" (((mag)&D3D11_FILTER_TYPE_MASK) << D3D11_MAG_FILTER_SHIFT) | \\")
+cpp_quote(" (((mip)&D3D11_FILTER_TYPE_MASK) << D3D11_MIP_FILTER_SHIFT)))")
+
+cpp_quote("#define D3D11_ENCODE_ANISOTROPIC_FILTER(bComparison) \\")
+cpp_quote(" ((D3D11_FILTER)(D3D11_ANISOTROPIC_FILTERING_BIT | \\" )
+cpp_quote(" D3D11_ENCODE_BASIC_FILTER(D3D11_FILTER_TYPE_LINEAR,D3D11_FILTER_TYPE_LINEAR, \\" )
+cpp_quote(" D3D11_FILTER_TYPE_LINEAR,bComparison)))" )
+
+cpp_quote("#define D3D11_DECODE_MIN_FILTER(d3d11Filter) \\")
+cpp_quote(" ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIN_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D11_DECODE_MAG_FILTER(d3d11Filter) \\")
+cpp_quote(" ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MAG_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D11_DECODE_MIP_FILTER(d3d11Filter) \\")
+cpp_quote(" ((D3D11_FILTER_TYPE)(((d3d11Filter) >> D3D11_MIP_FILTER_SHIFT) & D3D11_FILTER_TYPE_MASK))")
+
+cpp_quote("#define D3D11_DECODE_IS_COMPARISON_FILTER(d3d11Filter) ((d3d11Filter) & D3D11_COMPARISON_FILTERING_BIT)")
+
+cpp_quote("#define D3D11_DECODE_IS_ANISOTROPIC_FILTER(d3d11Filter) \\")
+cpp_quote(" (((d3d11Filter) & D3D11_ANISOTROPIC_FILTERING_BIT ) \\" )
+cpp_quote(" && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER(d3d11Filter)) \\" )
+cpp_quote(" && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER(d3d11Filter)) \\" )
+cpp_quote(" && (D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER(d3d11Filter)))")
+
+typedef enum D3D11_FILTER
+{
+ D3D11_FILTER_MIN_MAG_MIP_POINT = 0x00,
+ D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01,
+ D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04,
+ D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05,
+ D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10,
+ D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11,
+ D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14,
+ D3D11_FILTER_MIN_MAG_MIP_LINEAR = 0x15,
+ D3D11_FILTER_ANISOTROPIC = 0x55,
+ D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80,
+ D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81,
+ D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84,
+ D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85,
+ D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90,
+ D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
+ D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94,
+ D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95,
+ D3D11_FILTER_COMPARISON_ANISOTROPIC = 0xd5
+} D3D11_FILTER;
+
+typedef enum D3D11_DSV_FLAG
+{
+ D3D11_DSV_READ_ONLY_DEPTH = 0x1,
+ D3D11_DSV_READ_ONLY_STENCIL = 0x2,
+} D3D11_DSV_FLAG;
+
+typedef enum D3D11_INPUT_CLASSIFICATION
+{
+ D3D11_INPUT_PER_VERTEX_DATA,
+ D3D11_INPUT_PER_INSTANCE_DATA,
+} D3D11_INPUT_CLASSIFICATION;
+
+typedef struct D3D11_INPUT_ELEMENT_DESC
+{
+ LPCSTR SemanticName;
+ UINT SemanticIndex;
+ DXGI_FORMAT Format;
+ UINT InputSlot;
+ UINT AlignedByteOffset;
+ D3D11_INPUT_CLASSIFICATION InputSlotClass;
+ UINT InstanceDataStepRate;
+} D3D11_INPUT_ELEMENT_DESC;
+
+typedef enum D3D11_MAP
+{
+ D3D11_MAP_READ = 1,
+ D3D11_MAP_WRITE,
+ D3D11_MAP_READ_WRITE,
+ D3D11_MAP_WRITE_DISCARD,
+ D3D11_MAP_WRITE_NO_OVERWRITE
+} D3D11_MAP;
+
+typedef struct D3D11_MAPPED_SUBRESOURCE
+{
+ void *pData;
+ UINT RowPitch;
+ UINT DepthPitch;
+} D3D11_MAPPED_SUBRESOURCE;
+
+typedef enum D3D11_QUERY
+{
+ D3D11_QUERY_EVENT,
+ D3D11_QUERY_OCCLUSION,
+ D3D11_QUERY_TIMESTAMP,
+ D3D11_QUERY_TIMESTAMP_DISJOINT,
+ D3D11_QUERY_PIPELINE_STATISTICS,
+ D3D11_QUERY_OCCLUSION_PREDICATE,
+ D3D11_QUERY_SO_STATISTICS,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE,
+ D3D11_QUERY_SO_STATISTICS_STREAM0,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0,
+ D3D11_QUERY_SO_STATISTICS_STREAM1,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1,
+ D3D11_QUERY_SO_STATISTICS_STREAM2,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2,
+ D3D11_QUERY_SO_STATISTICS_STREAM3,
+ D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3,
+} D3D11_QUERY;
+
+typedef enum D3D11_ASYNC_GETDATA_FLAG
+{
+ D3D11_ASYNC_GETDATA_DONOTFLUSH = 0x0001,
+} D3D11_ASYNC_GETDATA_FLAG;
+
+typedef enum D3D11_RESOURCE_MISC_FLAG
+{
+ D3D11_RESOURCE_MISC_GENERATE_MIPS = 0x00000001L,
+ D3D11_RESOURCE_MISC_SHARED = 0x00000002L,
+ D3D11_RESOURCE_MISC_TEXTURECUBE = 0x00000004L,
+ D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS = 0x00000010L,
+ D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS = 0x00000020L,
+ D3D11_RESOURCE_MISC_BUFFER_STRUCTURED = 0x00000040L,
+ D3D11_RESOURCE_MISC_RESOURCE_CLAMP = 0x00000080L,
+ D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX = 0x00000100L,
+ D3D11_RESOURCE_MISC_GDI_COMPATIBLE = 0x00000200L,
+ D3D11_RESOURCE_MISC_SHARED_NTHANDLE = 0x00000800L,
+ D3D11_RESOURCE_MISC_RESTRICTED_CONTENT = 0x00001000L,
+ D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE = 0x00002000L,
+ D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER = 0x00004000L,
+ D3D11_RESOURCE_MISC_GUARDED = 0x00008000L
+} D3D11_RESOURCE_MISC_FLAG;
+
+typedef struct D3D11_QUERY_DESC
+{
+ D3D11_QUERY Query;
+ UINT MiscFlags;
+} D3D11_QUERY_DESC;
+
+typedef struct D3D11_RASTERIZER_DESC
+{
+ D3D11_FILL_MODE FillMode;
+ D3D11_CULL_MODE CullMode;
+ BOOL FrontCounterClockwise;
+ INT DepthBias;
+ FLOAT DepthBiasClamp;
+ FLOAT SlopeScaledDepthBias;
+ BOOL DepthClipEnable;
+ BOOL ScissorEnable;
+ BOOL MultisampleEnable;
+ BOOL AntialiasedLineEnable;
+} D3D11_RASTERIZER_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC {")
+cpp_quote(" CD3D11_RASTERIZER_DESC() {}")
+cpp_quote(" explicit CD3D11_RASTERIZER_DESC(const D3D11_RASTERIZER_DESC &o) : D3D11_RASTERIZER_DESC(o) {}")
+cpp_quote(" explicit CD3D11_RASTERIZER_DESC(CD3D11_DEFAULT) {")
+cpp_quote(" FillMode = D3D11_FILL_SOLID;")
+cpp_quote(" CullMode = D3D11_CULL_BACK;")
+cpp_quote(" FrontCounterClockwise = FALSE;")
+cpp_quote(" DepthBias = D3D11_DEFAULT_DEPTH_BIAS;")
+cpp_quote(" DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP;")
+cpp_quote(" SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;")
+cpp_quote(" DepthClipEnable = TRUE;")
+cpp_quote(" ScissorEnable = FALSE;")
+cpp_quote(" MultisampleEnable = FALSE;")
+cpp_quote(" AntialiasedLineEnable = FALSE;")
+cpp_quote(" }")
+cpp_quote(" explicit CD3D11_RASTERIZER_DESC(D3D11_FILL_MODE fillMode, D3D11_CULL_MODE cullMode," )
+cpp_quote(" BOOL frontCounterClockwise, INT depthBias, FLOAT depthBiasClamp, FLOAT slopeScaledDepthBias,")
+cpp_quote(" BOOL depthClipEnable, BOOL scissorEnable, BOOL multisampleEnable, BOOL antialiasedLineEnable) {")
+cpp_quote(" FillMode = fillMode;")
+cpp_quote(" CullMode = cullMode;")
+cpp_quote(" FrontCounterClockwise = frontCounterClockwise;")
+cpp_quote(" DepthBias = depthBias;")
+cpp_quote(" DepthBiasClamp = depthBiasClamp;")
+cpp_quote(" SlopeScaledDepthBias = slopeScaledDepthBias;")
+cpp_quote(" DepthClipEnable = depthClipEnable;")
+cpp_quote(" ScissorEnable = scissorEnable;")
+cpp_quote(" MultisampleEnable = multisampleEnable;")
+cpp_quote(" AntialiasedLineEnable = antialiasedLineEnable;")
+cpp_quote(" }")
+cpp_quote(" ~CD3D11_RASTERIZER_DESC() {}")
+cpp_quote(" operator const D3D11_RASTERIZER_DESC&() const { return *this; }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef enum D3D11_RESOURCE_DIMENSION
+{
+ D3D11_RESOURCE_DIMENSION_UNKNOWN,
+ D3D11_RESOURCE_DIMENSION_BUFFER,
+ D3D11_RESOURCE_DIMENSION_TEXTURE1D,
+ D3D11_RESOURCE_DIMENSION_TEXTURE2D,
+ D3D11_RESOURCE_DIMENSION_TEXTURE3D,
+} D3D11_RESOURCE_DIMENSION;
+
+typedef enum D3D11_RTV_DIMENSION
+{
+ D3D11_RTV_DIMENSION_UNKNOWN,
+ D3D11_RTV_DIMENSION_BUFFER,
+ D3D11_RTV_DIMENSION_TEXTURE1D,
+ D3D11_RTV_DIMENSION_TEXTURE1DARRAY,
+ D3D11_RTV_DIMENSION_TEXTURE2D,
+ D3D11_RTV_DIMENSION_TEXTURE2DARRAY,
+ D3D11_RTV_DIMENSION_TEXTURE2DMS,
+ D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY,
+ D3D11_RTV_DIMENSION_TEXTURE3D,
+} D3D11_RTV_DIMENSION;
+
+typedef struct D3D11_SO_DECLARATION_ENTRY
+{
+ UINT Stream;
+ LPCSTR SemanticName;
+ UINT SemanticIndex;
+ BYTE StartComponent;
+ BYTE ComponentCount;
+ BYTE OutputSlot;
+} D3D11_SO_DECLARATION_ENTRY;
+
+typedef enum D3D11_STENCIL_OP
+{
+ D3D11_STENCIL_OP_KEEP = 1,
+ D3D11_STENCIL_OP_ZERO,
+ D3D11_STENCIL_OP_REPLACE,
+ D3D11_STENCIL_OP_INCR_SAT,
+ D3D11_STENCIL_OP_DECR_SAT,
+ D3D11_STENCIL_OP_INVERT,
+ D3D11_STENCIL_OP_INCR,
+ D3D11_STENCIL_OP_DECR
+} D3D11_STENCIL_OP;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("}")
+cpp_quote("inline UINT D3D11CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels) {")
+cpp_quote(" return MipSlice + ArraySlice * MipLevels;")
+cpp_quote("}")
+cpp_quote("extern \"C\"{")
+cpp_quote("#endif")
+
+typedef struct D3D11_SUBRESOURCE_DATA
+{
+ const void *pSysMem;
+ UINT SysMemPitch;
+ UINT SysMemSlicePitch;
+} D3D11_SUBRESOURCE_DATA;
+
+typedef struct D3D11_TEX1D_ARRAY_DSV
+{
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX1D_ARRAY_DSV;
+
+typedef struct D3D11_TEX1D_ARRAY_RTV
+{
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX1D_ARRAY_RTV;
+
+typedef struct D3D11_TEX1D_ARRAY_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX1D_ARRAY_SRV;
+
+typedef struct D3D11_TEX1D_ARRAY_UAV
+{
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX1D_ARRAY_UAV;
+
+typedef struct D3D11_TEX1D_DSV
+{
+ UINT MipSlice;
+} D3D11_TEX1D_DSV;
+
+typedef struct D3D11_TEX1D_RTV
+{
+ UINT MipSlice;
+} D3D11_TEX1D_RTV;
+
+typedef struct D3D11_TEX1D_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ } D3D11_TEX1D_SRV;
+
+typedef struct D3D11_TEX1D_UAV
+{
+ UINT MipSlice;
+} D3D11_TEX1D_UAV;
+
+typedef struct D3D11_TEX2D_ARRAY_DSV
+{
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2D_ARRAY_DSV;
+
+typedef struct D3D11_TEX2D_ARRAY_RTV
+{
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2D_ARRAY_RTV;
+
+typedef struct D3D11_TEX2D_ARRAY_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2D_ARRAY_SRV;
+
+typedef struct D3D11_TEX2D_ARRAY_UAV
+{
+ UINT MipSlice;
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2D_ARRAY_UAV;
+
+typedef struct D3D11_TEX2D_DSV
+{
+ UINT MipSlice;
+} D3D11_TEX2D_DSV;
+
+typedef struct D3D11_TEX2D_RTV
+{
+ UINT MipSlice;
+} D3D11_TEX2D_RTV;
+
+typedef struct D3D11_TEX2D_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D11_TEX2D_SRV;
+
+typedef struct D3D11_TEX2D_UAV
+{
+ UINT MipSlice;
+} D3D11_TEX2D_UAV;
+
+typedef struct D3D11_TEX2DMS_ARRAY_DSV
+{
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2DMS_ARRAY_DSV;
+
+typedef struct D3D11_TEX2DMS_ARRAY_RTV
+{
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2DMS_ARRAY_RTV;
+
+typedef struct D3D11_TEX2DMS_ARRAY_SRV
+{
+ UINT FirstArraySlice;
+ UINT ArraySize;
+} D3D11_TEX2DMS_ARRAY_SRV;
+
+typedef struct D3D11_TEX2DMS_DSV
+{
+ UINT UnusedField_NothingToDefine;
+} D3D11_TEX2DMS_DSV;
+
+typedef struct D3D11_TEX2DMS_RTV
+{
+ UINT UnusedField_NothingToDefine;
+} D3D11_TEX2DMS_RTV;
+
+typedef struct D3D11_TEX2DMS_SRV
+{
+ UINT UnusedField_NothingToDefine;
+} D3D11_TEX2DMS_SRV;
+
+typedef struct D3D11_TEX3D_RTV
+{
+ UINT MipSlice;
+ UINT FirstWSlice;
+ UINT WSize;
+} D3D11_TEX3D_RTV;
+
+typedef struct D3D11_TEX3D_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D11_TEX3D_SRV;
+
+typedef struct D3D11_TEX3D_UAV
+{
+ UINT MipSlice;
+ UINT FirstWSlice;
+ UINT WSize;
+} D3D11_TEX3D_UAV;
+
+typedef struct D3D11_TEXCUBE_ARRAY_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+ UINT First2DArrayFace;
+ UINT NumCubes;
+} D3D11_TEXCUBE_ARRAY_SRV;
+
+typedef struct D3D11_TEXCUBE_SRV
+{
+ UINT MostDetailedMip;
+ UINT MipLevels;
+} D3D11_TEXCUBE_SRV;
+
+typedef enum D3D11_TEXTURE_ADDRESS_MODE
+{
+ D3D11_TEXTURE_ADDRESS_WRAP = 1,
+ D3D11_TEXTURE_ADDRESS_MIRROR,
+ D3D11_TEXTURE_ADDRESS_CLAMP,
+ D3D11_TEXTURE_ADDRESS_BORDER,
+ D3D11_TEXTURE_ADDRESS_MIRROR_ONCE
+} D3D11_TEXTURE_ADDRESS_MODE;
+
+typedef enum D3D11_UAV_DIMENSION
+{
+ D3D11_UAV_DIMENSION_UNKNOWN,
+ D3D11_UAV_DIMENSION_BUFFER,
+ D3D11_UAV_DIMENSION_TEXTURE1D,
+ D3D11_UAV_DIMENSION_TEXTURE1DARRAY,
+ D3D11_UAV_DIMENSION_TEXTURE2D,
+ D3D11_UAV_DIMENSION_TEXTURE2DARRAY,
+ D3D11_UAV_DIMENSION_TEXTURE3D = 8,
+} D3D11_UAV_DIMENSION;
+
+typedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC
+{
+ DXGI_FORMAT Format;
+ D3D11_UAV_DIMENSION ViewDimension;
+
+ union
+ {
+ D3D11_BUFFER_UAV Buffer;
+ D3D11_TEX1D_UAV Texture1D;
+ D3D11_TEX1D_ARRAY_UAV Texture1DArray;
+ D3D11_TEX2D_UAV Texture2D;
+ D3D11_TEX2D_ARRAY_UAV Texture2DArray;
+ D3D11_TEX3D_UAV Texture3D;
+ };
+} D3D11_UNORDERED_ACCESS_VIEW_DESC;
+
+typedef enum D3D11_USAGE
+{
+ D3D11_USAGE_DEFAULT,
+ D3D11_USAGE_IMMUTABLE,
+ D3D11_USAGE_DYNAMIC,
+ D3D11_USAGE_STAGING,
+} D3D11_USAGE;
+
+typedef enum D3D11_BIND_FLAG
+{
+ D3D11_BIND_VERTEX_BUFFER = 0x0001,
+ D3D11_BIND_INDEX_BUFFER = 0x0002,
+ D3D11_BIND_CONSTANT_BUFFER = 0x0004,
+ D3D11_BIND_SHADER_RESOURCE = 0x0008,
+ D3D11_BIND_STREAM_OUTPUT = 0x0010,
+ D3D11_BIND_RENDER_TARGET = 0x0020,
+ D3D11_BIND_DEPTH_STENCIL = 0x0040,
+ D3D11_BIND_UNORDERED_ACCESS = 0x0080,
+ D3D11_BIND_DECODER = 0x0200,
+ D3D11_BIND_VIDEO_ENCODER = 0x0400
+} D3D11_BIND_FLAG;
+
+typedef enum D3D11_CPU_ACCESS_FLAG
+{
+ D3D11_CPU_ACCESS_WRITE = 0x00010000,
+ D3D11_CPU_ACCESS_READ = 0x00020000
+} D3D11_CPU_ACCESS_FLAG;
+
+typedef struct D3D11_VIEWPORT
+{
+ FLOAT TopLeftX;
+ FLOAT TopLeftY;
+ FLOAT Width;
+ FLOAT Height;
+ FLOAT MinDepth;
+ FLOAT MaxDepth;
+} D3D11_VIEWPORT;
+
+typedef enum D3D11_COLOR_WRITE_ENABLE
+{
+ D3D11_COLOR_WRITE_ENABLE_RED = 1,
+ D3D11_COLOR_WRITE_ENABLE_GREEN = 2,
+ D3D11_COLOR_WRITE_ENABLE_BLUE = 4,
+ D3D11_COLOR_WRITE_ENABLE_ALPHA = 8,
+ D3D11_COLOR_WRITE_ENABLE_ALL =
+ (D3D11_COLOR_WRITE_ENABLE_RED|D3D11_COLOR_WRITE_ENABLE_GREEN|D3D11_COLOR_WRITE_ENABLE_BLUE|D3D11_COLOR_WRITE_ENABLE_ALPHA)
+} D3D11_COLOR_WRITE_ENABLE;
+
+typedef enum D3D11_FORMAT_SUPPORT
+{
+ D3D11_FORMAT_SUPPORT_BUFFER = 0x00000001,
+ D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x00000002,
+ D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x00000004,
+ D3D11_FORMAT_SUPPORT_SO_BUFFER = 0x00000008,
+ D3D11_FORMAT_SUPPORT_TEXTURE1D = 0x00000010,
+ D3D11_FORMAT_SUPPORT_TEXTURE2D = 0x00000020,
+ D3D11_FORMAT_SUPPORT_TEXTURE3D = 0x00000040,
+ D3D11_FORMAT_SUPPORT_TEXTURECUBE = 0x00000080,
+ D3D11_FORMAT_SUPPORT_SHADER_LOAD = 0x00000100,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE = 0x00000200,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x00000400,
+ D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x00000800,
+ D3D11_FORMAT_SUPPORT_MIP = 0x00001000,
+ D3D11_FORMAT_SUPPORT_MIP_AUTOGEN = 0x00002000,
+ D3D11_FORMAT_SUPPORT_RENDER_TARGET = 0x00004000,
+ D3D11_FORMAT_SUPPORT_BLENDABLE = 0x00008000,
+ D3D11_FORMAT_SUPPORT_DEPTH_STENCIL = 0x00010000,
+ D3D11_FORMAT_SUPPORT_CPU_LOCKABLE = 0x00020000,
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x00040000,
+ D3D11_FORMAT_SUPPORT_DISPLAY = 0x00080000,
+ D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x00100000,
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x00200000,
+ D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x00400000,
+ D3D11_FORMAT_SUPPORT_SHADER_GATHER = 0x00800000,
+ D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST = 0x01000000,
+ D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW = 0x02000000,
+ D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON = 0x04000000
+} D3D11_FORMAT_SUPPORT;
+
+typedef enum D3D11_CLEAR_FLAG
+{
+ D3D11_CLEAR_DEPTH = 0x0001L,
+ D3D11_CLEAR_STENCIL = 0x0002L
+} D3D11_CLEAR_FLAG;
+
+typedef struct D3D11_RENDER_TARGET_BLEND_DESC
+{
+ BOOL BlendEnable;
+ D3D11_BLEND SrcBlend;
+ D3D11_BLEND DestBlend;
+ D3D11_BLEND_OP BlendOp;
+ D3D11_BLEND SrcBlendAlpha;
+ D3D11_BLEND DestBlendAlpha;
+ D3D11_BLEND_OP BlendOpAlpha;
+ UINT8 RenderTargetWriteMask;
+} D3D11_RENDER_TARGET_BLEND_DESC;
+
+typedef struct D3D11_BLEND_DESC
+{
+ BOOL AlphaToCoverageEnable;
+ BOOL IndependentBlendEnable;
+ D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT];
+} D3D11_BLEND_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC {")
+cpp_quote(" CD3D11_BLEND_DESC() {}")
+cpp_quote(" explicit CD3D11_BLEND_DESC(const D3D11_BLEND_DESC &o) : D3D11_BLEND_DESC(o) {}")
+cpp_quote(" explicit CD3D11_BLEND_DESC(CD3D11_DEFAULT) {")
+cpp_quote(" AlphaToCoverageEnable = FALSE;")
+cpp_quote(" IndependentBlendEnable = FALSE;")
+cpp_quote(" for(D3D11_RENDER_TARGET_BLEND_DESC *target; target < RenderTarget+D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; target++) {")
+cpp_quote(" target->BlendEnable = FALSE;")
+cpp_quote(" target->SrcBlend = target->SrcBlendAlpha = D3D11_BLEND_ONE;")
+cpp_quote(" target->DestBlend = target->DestBlendAlpha = D3D11_BLEND_ZERO;")
+cpp_quote(" target->BlendOp = target->BlendOpAlpha = D3D11_BLEND_OP_ADD;")
+cpp_quote(" target->RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;")
+cpp_quote(" }")
+cpp_quote(" }")
+cpp_quote(" ~CD3D11_BLEND_DESC() {}")
+cpp_quote(" operator const D3D11_BLEND_DESC&() const { return *this; }")
+cpp_quote("};" )
+cpp_quote("#endif" )
+
+typedef struct D3D11_BUFFER_DESC
+{
+ UINT ByteWidth;
+ D3D11_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+ UINT StructureByteStride;
+} D3D11_BUFFER_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC {")
+cpp_quote(" CD3D11_BUFFER_DESC() {}" )
+cpp_quote(" explicit CD3D11_BUFFER_DESC(const D3D11_BUFFER_DESC &o) : D3D11_BUFFER_DESC(o) {}")
+cpp_quote(" explicit CD3D11_BUFFER_DESC(UINT byteWidth,UINT bindFlags,")
+cpp_quote(" D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0,")
+cpp_quote(" UINT miscFlags = 0, UINT structureByteStride = 0 ) {")
+cpp_quote(" ByteWidth = byteWidth;")
+cpp_quote(" Usage = usage;")
+cpp_quote(" BindFlags = bindFlags;")
+cpp_quote(" CPUAccessFlags = cpuaccessFlags;")
+cpp_quote(" MiscFlags = miscFlags;" )
+cpp_quote(" StructureByteStride = structureByteStride;")
+cpp_quote(" }")
+cpp_quote(" ~CD3D11_BUFFER_DESC() {}")
+cpp_quote(" operator const D3D11_BUFFER_DESC&() const { return *this; }")
+cpp_quote("};" )
+cpp_quote("#endif" )
+
+typedef struct D3D11_DEPTH_STENCIL_VIEW_DESC
+{
+ DXGI_FORMAT Format;
+ D3D11_DSV_DIMENSION ViewDimension;
+ UINT Flags;
+
+ union
+ {
+ D3D11_TEX1D_DSV Texture1D;
+ D3D11_TEX1D_ARRAY_DSV Texture1DArray;
+ D3D11_TEX2D_DSV Texture2D;
+ D3D11_TEX2D_ARRAY_DSV Texture2DArray;
+ D3D11_TEX2DMS_DSV Texture2DMS;
+ D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray;
+ };
+} D3D11_DEPTH_STENCIL_VIEW_DESC;
+
+typedef struct D3D11_DEPTH_STENCILOP_DESC
+{
+ D3D11_STENCIL_OP StencilFailOp;
+ D3D11_STENCIL_OP StencilDepthFailOp;
+ D3D11_STENCIL_OP StencilPassOp;
+ D3D11_COMPARISON_FUNC StencilFunc;
+} D3D11_DEPTH_STENCILOP_DESC;
+
+typedef struct D3D11_DEPTH_STENCIL_DESC
+{
+ BOOL DepthEnable;
+ D3D11_DEPTH_WRITE_MASK DepthWriteMask;
+ D3D11_COMPARISON_FUNC DepthFunc;
+ BOOL StencilEnable;
+ UINT8 StencilReadMask;
+ UINT8 StencilWriteMask;
+ D3D11_DEPTH_STENCILOP_DESC FrontFace;
+ D3D11_DEPTH_STENCILOP_DESC BackFace;
+} D3D11_DEPTH_STENCIL_DESC;
+
+typedef struct D3D11_RENDER_TARGET_VIEW_DESC
+{
+ DXGI_FORMAT Format;
+ D3D11_RTV_DIMENSION ViewDimension;
+
+ union
+ {
+ D3D11_BUFFER_RTV Buffer;
+ D3D11_TEX1D_RTV Texture1D;
+ D3D11_TEX1D_ARRAY_RTV Texture1DArray;
+ D3D11_TEX2D_RTV Texture2D;
+ D3D11_TEX2D_ARRAY_RTV Texture2DArray;
+ D3D11_TEX2DMS_RTV Texture2DMS;
+ D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray;
+ D3D11_TEX3D_RTV Texture3D;
+ };
+} D3D11_RENDER_TARGET_VIEW_DESC;
+
+typedef struct D3D11_SAMPLER_DESC
+{
+ D3D11_FILTER Filter;
+ D3D11_TEXTURE_ADDRESS_MODE AddressU;
+ D3D11_TEXTURE_ADDRESS_MODE AddressV;
+ D3D11_TEXTURE_ADDRESS_MODE AddressW;
+ FLOAT MipLODBias;
+ UINT MaxAnisotropy;
+ D3D11_COMPARISON_FUNC ComparisonFunc;
+ FLOAT BorderColor[4];
+ FLOAT MinLOD;
+ FLOAT MaxLOD;
+} D3D11_SAMPLER_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC {")
+cpp_quote(" CD3D11_SAMPLER_DESC() {}")
+cpp_quote(" explicit CD3D11_SAMPLER_DESC(const D3D11_SAMPLER_DESC &o) : D3D11_SAMPLER_DESC(o) {}")
+cpp_quote(" explicit CD3D11_SAMPLER_DESC(CD3D11_DEFAULT) {" )
+cpp_quote(" Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;")
+cpp_quote(" AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;")
+cpp_quote(" AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;")
+cpp_quote(" AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;")
+cpp_quote(" MipLODBias = 0;")
+cpp_quote(" MaxAnisotropy = 1;")
+cpp_quote(" ComparisonFunc = D3D11_COMPARISON_NEVER;")
+cpp_quote(" BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;")
+cpp_quote(" MinLOD = -3.402823466e+38f;")
+cpp_quote(" MaxLOD = 3.402823466e+38f;")
+cpp_quote(" }")
+cpp_quote(" explicit CD3D11_SAMPLER_DESC(D3D11_FILTER filter, D3D11_TEXTURE_ADDRESS_MODE addressU,")
+cpp_quote(" D3D11_TEXTURE_ADDRESS_MODE addressV, D3D11_TEXTURE_ADDRESS_MODE addressW,")
+cpp_quote(" FLOAT mipLODBias, UINT maxAnisotropy, D3D11_COMPARISON_FUNC comparisonFunc,")
+cpp_quote(" const FLOAT *borderColor, FLOAT minLOD, FLOAT maxLOD) {" )
+cpp_quote(" Filter = filter;")
+cpp_quote(" AddressU = addressU;")
+cpp_quote(" AddressV = addressV;")
+cpp_quote(" AddressW = addressW;")
+cpp_quote(" MipLODBias = mipLODBias;")
+cpp_quote(" MaxAnisotropy = maxAnisotropy;")
+cpp_quote(" ComparisonFunc = comparisonFunc;")
+cpp_quote(" if(borderColor) {")
+cpp_quote(" BorderColor[0] = borderColor[0];")
+cpp_quote(" BorderColor[1] = borderColor[1];")
+cpp_quote(" BorderColor[2] = borderColor[2];")
+cpp_quote(" BorderColor[3] = borderColor[3];")
+cpp_quote(" }else {")
+cpp_quote(" BorderColor[0] = BorderColor[1] = BorderColor[2] = BorderColor[3] = 1.0f;")
+cpp_quote(" }")
+cpp_quote(" MinLOD = minLOD;")
+cpp_quote(" MaxLOD = maxLOD;")
+cpp_quote(" }")
+cpp_quote(" ~CD3D11_SAMPLER_DESC() {}")
+cpp_quote(" operator const D3D11_SAMPLER_DESC&() const { return *this; }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D11_SHADER_RESOURCE_VIEW_DESC
+{
+ DXGI_FORMAT Format;
+ D3D11_SRV_DIMENSION ViewDimension;
+
+ union
+ {
+ D3D11_BUFFER_SRV Buffer;
+ D3D11_TEX1D_SRV Texture1D;
+ D3D11_TEX1D_ARRAY_SRV Texture1DArray;
+ D3D11_TEX2D_SRV Texture2D;
+ D3D11_TEX2D_ARRAY_SRV Texture2DArray;
+ D3D11_TEX2DMS_SRV Texture2DMS;
+ D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray;
+ D3D11_TEX3D_SRV Texture3D;
+ D3D11_TEXCUBE_SRV TextureCube;
+ D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray;
+ D3D11_BUFFEREX_SRV BufferEx;
+ };
+} D3D11_SHADER_RESOURCE_VIEW_DESC;
+
+typedef struct D3D11_TEXTURE1D_DESC
+{
+ UINT Width;
+ UINT MipLevels;
+ UINT ArraySize;
+ DXGI_FORMAT Format;
+ D3D11_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D11_TEXTURE1D_DESC;
+
+typedef struct D3D11_TEXTURE2D_DESC
+{
+ UINT Width;
+ UINT Height;
+ UINT MipLevels;
+ UINT ArraySize;
+ DXGI_FORMAT Format;
+ DXGI_SAMPLE_DESC SampleDesc;
+ D3D11_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D11_TEXTURE2D_DESC;
+
+cpp_quote("#if !defined(D3D11_NO_HELPERS) && defined(__cplusplus)")
+cpp_quote("struct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC {")
+cpp_quote(" CD3D11_TEXTURE2D_DESC() {}")
+cpp_quote(" explicit CD3D11_TEXTURE2D_DESC(const D3D11_TEXTURE2D_DESC &o) : D3D11_TEXTURE2D_DESC(o) {}")
+cpp_quote(" explicit CD3D11_TEXTURE2D_DESC(DXGI_FORMAT format, UINT width, UINT height, UINT arraySize = 1,")
+cpp_quote(" UINT mipLevels = 0, UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,")
+cpp_quote(" D3D11_USAGE usage = D3D11_USAGE_DEFAULT, UINT cpuaccessFlags = 0, UINT sampleCount = 1," )
+cpp_quote(" UINT sampleQuality = 0, UINT miscFlags = 0) {")
+cpp_quote(" Width = width;")
+cpp_quote(" Height = height;")
+cpp_quote(" MipLevels = mipLevels;")
+cpp_quote(" ArraySize = arraySize;")
+cpp_quote(" Format = format;")
+cpp_quote(" SampleDesc.Count = sampleCount;")
+cpp_quote(" SampleDesc.Quality = sampleQuality;")
+cpp_quote(" Usage = usage;")
+cpp_quote(" BindFlags = bindFlags;")
+cpp_quote(" CPUAccessFlags = cpuaccessFlags;")
+cpp_quote(" MiscFlags = miscFlags;")
+cpp_quote(" }" )
+cpp_quote(" ~CD3D11_TEXTURE2D_DESC() {}")
+cpp_quote(" operator const D3D11_TEXTURE2D_DESC&() const { return *this; }")
+cpp_quote("};")
+cpp_quote("#endif")
+
+typedef struct D3D11_TEXTURE3D_DESC
+{
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+ UINT MipLevels;
+ DXGI_FORMAT Format;
+ D3D11_USAGE Usage;
+ UINT BindFlags;
+ UINT CPUAccessFlags;
+ UINT MiscFlags;
+} D3D11_TEXTURE3D_DESC;
+
+/* A couple forward declarations are needed */
+interface ID3D11Device;
+interface ID3D11ClassLinkage;
+
+[
+ object,
+ local,
+ uuid(1841e5c8-16b0-489b-bcc8-44cfb0d5deae)
+]
+interface ID3D11DeviceChild : IUnknown
+{
+ void GetDevice(
+ [out] ID3D11Device **ppDevice);
+ HRESULT GetPrivateData(
+ [in] REFGUID guid,
+ [in, out] UINT *pDataSize,
+ [out] void *pData);
+ HRESULT SetPrivateData(
+ [in] REFGUID guid,
+ [in] UINT DataSize,
+ [in] const void *pData);
+ HRESULT SetPrivateDataInterface(
+ [in] REFGUID guid,
+ [in] const IUnknown *pData);
+}
+
+[
+ object,
+ local,
+ uuid(4b35d0cd-1e15-4258-9c98-1b1333f6dd3b)
+]
+interface ID3D11Asynchronous : ID3D11DeviceChild
+{
+ UINT GetDataSize();
+}
+
+[
+ object,
+ local,
+ uuid(d6c00747-87b7-425e-b84d-44d108560afd)
+]
+interface ID3D11Query : ID3D11Asynchronous
+{
+ void GetDesc(
+ [out] D3D11_QUERY_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(dc8e63f3-d12b-4952-b47b-5e45026a862d)
+]
+interface ID3D11Resource : ID3D11DeviceChild
+{
+ void GetType(
+ [out] D3D11_RESOURCE_DIMENSION *pResourceDimension);
+ void SetEvictionPriority(
+ [in] UINT EvictionPriority);
+ UINT GetEvictionPriority();
+}
+
+[
+ object,
+ local,
+ uuid(839d1216-bb2e-412b-b7f4-a9dbebe08ed1)
+]
+interface ID3D11View : ID3D11DeviceChild
+{
+ void GetResource(
+ [out] ID3D11Resource **ppResource);
+}
+
+[
+ object,
+ local,
+ uuid(75b68faa-347d-4159-8f45-a0640f01cd9a)
+]
+interface ID3D11BlendState : ID3D11DeviceChild
+{
+ void GetDesc(
+ [out] D3D11_BLEND_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(48570b85-d1ee-4fcd-a250-eb350722b037)
+]
+interface ID3D11Buffer : ID3D11Resource
+{
+ void GetDesc(
+ [out] D3D11_BUFFER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(a6cd7faa-b0b7-4a2f-9436-8662a65797cb)
+]
+interface ID3D11ClassInstance : ID3D11DeviceChild
+{
+ void GetClassLinkage(
+ [out] ID3D11ClassLinkage **ppLinkage);
+ void GetDesc(
+ [out] D3D11_CLASS_INSTANCE_DESC *pDesc);
+ void GetInstanceName(
+ [out] LPSTR pInstanceName,
+ [in, out] SIZE_T *pBufferLength);
+ void GetTypeName(
+ [out] LPSTR pTypeName,
+ [in, out] SIZE_T *pBufferLength);
+}
+
+[
+ object,
+ local,
+ uuid(ddf57cba-9543-46e4-a12b-f207a0fe7fed)
+]
+interface ID3D11ClassLinkage : ID3D11DeviceChild
+{
+ HRESULT GetClassInstance(
+ [in] LPCSTR pClassInstanceName,
+ [in] UINT InstanceIndex,
+ [out] ID3D11ClassInstance **ppInstance);
+ HRESULT CreateClassInstance(
+ [in] LPCSTR pClassTypeName,
+ [in] UINT ConstantBufferOffset,
+ [in] UINT ConstantVectorOffset,
+ [in] UINT TextureOffset,
+ [in] UINT SamplerOffset,
+ [out] ID3D11ClassInstance **ppInstance);
+}
+
+[
+ object,
+ local,
+ uuid(a24bc4d1-769e-43f7-8013-98ff566c18e2)
+]
+interface ID3D11CommandList : ID3D11DeviceChild
+{
+ UINT GetContextFlags();
+}
+
+[
+ object,
+ local,
+ uuid(4f5b196e-c2bd-495e-bd01-1fded38e4969)
+]
+interface ID3D11ComputeShader : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(6e8c49fb-a371-4770-b440-29086022b741)
+]
+interface ID3D11Counter : ID3D11Asynchronous
+{
+ void GetDesc(
+ [out] D3D11_COUNTER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1)
+]
+interface ID3D11DepthStencilState : ID3D11DeviceChild
+{
+ void GetDesc(
+ [out] D3D11_DEPTH_STENCIL_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(9fdac92a-1876-48c3-afad-25b94f84a9b6)
+]
+interface ID3D11DepthStencilView : ID3D11View
+{
+ void GetDesc(
+ [out] D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(f582c508-0f36-490c-9977-31eece268cfa)
+]
+interface ID3D11DomainShader : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(38325b96-effb-4022-ba02-2e795b70275c)
+]
+interface ID3D11GeometryShader : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(8e5c6061-628a-4c8e-8264-bbe45cb3d5dd)
+]
+interface ID3D11HullShader : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(e4819ddc-4cf0-4025-bd26-5de82a3e07b7)
+]
+interface ID3D11InputLayout : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(ea82e40d-51dc-4f33-93d4-db7c9125ae8c)
+]
+interface ID3D11PixelShader : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(9eb576dd-9f77-4d86-81aa-8bab5fe490e2)
+]
+interface ID3D11Predicate : ID3D11Query
+{
+}
+
+[
+ object,
+ local,
+ uuid(9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7)
+]
+interface ID3D11RasterizerState : ID3D11DeviceChild
+{
+ void GetDesc(
+ [out] D3D11_RASTERIZER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(dfdba067-0b8d-4865-875b-d7b4516cc164)
+]
+interface ID3D11RenderTargetView : ID3D11View
+{
+ void GetDesc(
+ [out] D3D11_RENDER_TARGET_VIEW_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(da6fea51-564c-4487-9810-f0d0f9b4e3a5)
+]
+interface ID3D11SamplerState : ID3D11DeviceChild
+{
+ void GetDesc(
+ [out] D3D11_SAMPLER_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(b0e06fe0-8192-4e1a-b1ca-36d7414710b2)
+]
+interface ID3D11ShaderResourceView : ID3D11View
+{
+ void GetDesc(
+ [out] D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(f8fb5c27-c6b3-4f75-a4c8-439af2ef564c),
+]
+interface ID3D11Texture1D : ID3D11Resource
+{
+ void GetDesc(
+ [out] D3D11_TEXTURE1D_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(6f15aaf2-d208-4e89-9ab4-489535d34f9c)
+]
+interface ID3D11Texture2D : ID3D11Resource
+{
+ void GetDesc(
+ [out] D3D11_TEXTURE2D_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(037e866e-f56d-4357-a8af-9dabbe6e250e)
+]
+interface ID3D11Texture3D : ID3D11Resource
+{
+ void GetDesc(
+ [out] D3D11_TEXTURE3D_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(28acf509-7f5c-48f6-8611-f316010a6380)
+]
+interface ID3D11UnorderedAccessView : ID3D11View
+{
+ void GetDesc(
+ [out] D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc);
+}
+
+[
+ object,
+ local,
+ uuid(3b301d64-d678-4289-8897-22f8928b72f3)
+]
+interface ID3D11VertexShader : ID3D11DeviceChild
+{
+}
+
+[
+ object,
+ local,
+ uuid(c0bfa96c-e089-44fb-8eaf-26f8796190da)
+]
+interface ID3D11DeviceContext : ID3D11DeviceChild
+{
+ void VSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppConstantBuffers);
+ void PSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+ void PSSetShader(
+ [in] ID3D11PixelShader *pPixelShader,
+ [in] ID3D11ClassInstance *const *ppClassInstances,
+ UINT NumClassInstances);
+ void PSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D11SamplerState *const *ppSamplers);
+ void VSSetShader(
+ [in] ID3D11VertexShader *pVertexShader,
+ [in] ID3D11ClassInstance *const *ppClassInstances,
+ UINT NumClassInstances);
+ void DrawIndexed(
+ [in] UINT IndexCount,
+ [in] UINT StartIndexLocation,
+ [in] INT BaseVertexLocation);
+ void Draw(
+ [in] UINT VertexCount,
+ [in] UINT StartVertexLocation);
+ HRESULT Map(
+ [in] ID3D11Resource *pResource,
+ [in] UINT Subresource,
+ [in] D3D11_MAP MapType,
+ [in] UINT MapFlags,
+ [out] D3D11_MAPPED_SUBRESOURCE *pMappedResource);
+ void Unmap(
+ [in] ID3D11Resource *pResource,
+ [in] UINT Subresource);
+ void PSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppConstantBuffers);
+ void IASetInputLayout(
+ [in] ID3D11InputLayout *pInputLayout);
+ void IASetVertexBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppVertexBuffers,
+ [in] const UINT *pStrides,
+ [in] const UINT *pOffsets);
+ void IASetIndexBuffer(
+ [in] ID3D11Buffer *pIndexBuffer,
+ [in] DXGI_FORMAT Format,
+ [in] UINT Offset);
+ void DrawIndexedInstanced(
+ [in] UINT IndexCountPerInstance,
+ [in] UINT InstanceCount,
+ [in] UINT StartIndexLocation,
+ [in] INT BaseVertexLocation,
+ [in] UINT StartInstanceLocation);
+ void DrawInstanced(
+ [in] UINT VertexCountPerInstance,
+ [in] UINT InstanceCount,
+ [in] UINT StartVertexLocation,
+ [in] UINT StartInstanceLocation);
+ void GSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppConstantBuffers);
+ void GSSetShader(
+ [in] ID3D11GeometryShader *pShader,
+ [in] ID3D11ClassInstance *const *ppClassInstances,
+ UINT NumClassInstances);
+ void IASetPrimitiveTopology(
+ [in] D3D11_PRIMITIVE_TOPOLOGY Topology);
+ void VSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+ void VSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D11SamplerState *const *ppSamplers);
+ void Begin(
+ [in] ID3D11Asynchronous *pAsync);
+ void End(
+ [in] ID3D11Asynchronous *pAsync);
+ HRESULT GetData(
+ [in] ID3D11Asynchronous *pAsync,
+ [in] void *pData,
+ [in] UINT DataSize,
+ [in] UINT GetDataFlags);
+ void SetPredication(
+ [in] ID3D11Predicate *pPredicate,
+ [in] BOOL PredicateValue);
+ void GSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+ void GSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D11SamplerState *const *ppSamplers);
+ void OMSetRenderTargets(
+ [in] UINT NumViews,
+ [in] ID3D11RenderTargetView *const *ppRenderTargetViews,
+ [in] ID3D11DepthStencilView *pDepthStencilView);
+ void OMSetRenderTargetsAndUnorderedAccessViews(
+ [in] UINT NumRTVs,
+ [in] ID3D11RenderTargetView *const *ppRenderTargetViews,
+ [in] ID3D11DepthStencilView *pDepthStencilView,
+ [in] UINT UAVStartSlot,
+ [in] UINT NumUAVs,
+ [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,
+ [in] const UINT *pUAVInitialCounts);
+ void OMSetBlendState(
+ [in] ID3D11BlendState *pBlendState,
+ [in] const FLOAT BlendFactor[4],
+ [in] UINT SampleMask);
+ void OMSetDepthStencilState(
+ [in] ID3D11DepthStencilState *pDepthStencilState,
+ [in] UINT StencilRef);
+ void SOSetTargets(
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppSOTargets,
+ [in] const UINT *pOffsets);
+ void DrawAuto();
+ void DrawIndexedInstancedIndirect(
+ [in] ID3D11Buffer *pBufferForArgs,
+ [in] UINT AlignedByteOffsetForArgs);
+ void DrawInstancedIndirect(
+ [in] ID3D11Buffer *pBufferForArgs,
+ [in] UINT AlignedByteOffsetForArgs);
+ void Dispatch(
+ [in] UINT ThreadGroupCountX,
+ [in] UINT ThreadGroupCountY,
+ [in] UINT ThreadGroupCountZ);
+ void DispatchIndirect(
+ [in] ID3D11Buffer *pBufferForArgs,
+ [in] UINT AlignedByteOffsetForArgs);
+ void RSSetState(
+ [in] ID3D11RasterizerState *pRasterizerState);
+ void RSSetViewports(
+ [in] UINT NumViewports,
+ [in] const D3D11_VIEWPORT *pViewports);
+ void RSSetScissorRects(
+ [in] UINT NumRects,
+ [in] const D3D11_RECT *pRects);
+ void CopySubresourceRegion(
+ [in] ID3D11Resource *pDstResource,
+ [in] UINT DstSubresource,
+ [in] UINT DstX,
+ [in] UINT DstY,
+ [in] UINT DstZ,
+ [in] ID3D11Resource *pSrcResource,
+ [in] UINT SrcSubresource,
+ [in] const D3D11_BOX *pSrcBox);
+ void CopyResource(
+ [in] ID3D11Resource *pDstResource,
+ [in] ID3D11Resource *pSrcResource);
+ void UpdateSubresource(
+ [in] ID3D11Resource *pDstResource,
+ [in] UINT DstSubresource,
+ [in] const D3D11_BOX *pDstBox,
+ [in] const void *pSrcData,
+ [in] UINT SrcRowPitch,
+ [in] UINT SrcDepthPitch);
+ void CopyStructureCount(
+ [in] ID3D11Buffer *pDstBuffer,
+ [in] UINT DstAlignedByteOffset,
+ [in] ID3D11UnorderedAccessView *pSrcView);
+ void ClearRenderTargetView(
+ [in] ID3D11RenderTargetView *pRenderTargetView,
+ [in] const FLOAT ColorRGBA[4]);
+ void ClearUnorderedAccessViewUint(
+ [in] ID3D11UnorderedAccessView *pUnorderedAccessView,
+ [in] const UINT Values[4]);
+ void ClearUnorderedAccessViewFloat(
+ [in] ID3D11UnorderedAccessView *pUnorderedAccessView,
+ [in] const FLOAT Values[4]);
+ void ClearDepthStencilView(
+ [in] ID3D11DepthStencilView *pDepthStencilView,
+ [in] UINT ClearFlags,
+ [in] FLOAT Depth,
+ [in] UINT8 Stencil);
+ void GenerateMips(
+ [in] ID3D11ShaderResourceView *pShaderResourceView);
+ void SetResourceMinLOD(
+ [in] ID3D11Resource *pResource, FLOAT MinLOD);
+ FLOAT GetResourceMinLOD(
+ [in] ID3D11Resource *pResource);
+ void ResolveSubresource(
+ [in] ID3D11Resource *pDstResource,
+ [in] UINT DstSubresource,
+ [in] ID3D11Resource *pSrcResource,
+ [in] UINT SrcSubresource,
+ [in] DXGI_FORMAT Format);
+ void ExecuteCommandList(
+ [in] ID3D11CommandList *pCommandList,
+ BOOL RestoreContextState);
+ void HSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+ void HSSetShader(
+ [in] ID3D11HullShader *pHullShader,
+ [in] ID3D11ClassInstance *const *ppClassInstances,
+ UINT NumClassInstances);
+ void HSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D11SamplerState *const *ppSamplers);
+ void HSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppConstantBuffers);
+ void DSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+ void DSSetShader(
+ [in] ID3D11DomainShader *pDomainShader,
+ [in] ID3D11ClassInstance *const *ppClassInstances,
+ UINT NumClassInstances);
+ void DSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D11SamplerState *const *ppSamplers);
+ void DSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppConstantBuffers);
+ void CSSetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [in] ID3D11ShaderResourceView *const *ppShaderResourceViews);
+ void CSSetUnorderedAccessViews(
+ [in] UINT StartSlot,
+ [in] UINT NumUAVs,
+ [in] ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,
+ [in] const UINT *pUAVInitialCounts);
+ void CSSetShader(
+ [in] ID3D11ComputeShader *pComputeShader,
+ [in] ID3D11ClassInstance *const *ppClassInstances,
+ UINT NumClassInstances);
+ void CSSetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [in] ID3D11SamplerState *const *ppSamplers);
+ void CSSetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [in] ID3D11Buffer *const *ppConstantBuffers);
+ void VSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppConstantBuffers);
+ void PSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+ void PSGetShader(
+ [out] ID3D11PixelShader **ppPixelShader,
+ [out] ID3D11ClassInstance **ppClassInstances,
+ [in, out] UINT *pNumClassInstances);
+ void PSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D11SamplerState **ppSamplers);
+ void VSGetShader(
+ [out] ID3D11VertexShader **ppVertexShader,
+ [out] ID3D11ClassInstance **ppClassInstances,
+ [in, out] UINT *pNumClassInstances);
+ void PSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppConstantBuffers);
+ void IAGetInputLayout(
+ [out] ID3D11InputLayout **ppInputLayout);
+ void IAGetVertexBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppVertexBuffers,
+ [out] UINT *pStrides,
+ [out] UINT *pOffsets);
+ void IAGetIndexBuffer(
+ [out] ID3D11Buffer **pIndexBuffer,
+ [out] DXGI_FORMAT* Format,
+ [out] UINT* Offset);
+ void GSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppConstantBuffers);
+ void GSGetShader(
+ [out] ID3D11GeometryShader **ppGeometryShader,
+ [out] ID3D11ClassInstance **ppClassInstances,
+ [in, out] UINT *pNumClassInstances);
+ void IAGetPrimitiveTopology(
+ [out] D3D11_PRIMITIVE_TOPOLOGY *pTopology);
+ void VSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+ void VSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D11SamplerState **ppSamplers);
+ void GetPredication(
+ [out] ID3D11Predicate **ppPredicate,
+ [out] BOOL *pPredicateValue);
+ void GSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+ void GSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D11SamplerState **ppSamplers);
+ void OMGetRenderTargets(
+ [in] UINT NumViews,
+ [out] ID3D11RenderTargetView **ppRenderTargetViews,
+ [out] ID3D11DepthStencilView **ppDepthStencilView);
+ void OMGetRenderTargetsAndUnorderedAccessViews(
+ [in] UINT NumRTVs,
+ [out] ID3D11RenderTargetView **ppRenderTargetViews,
+ [out] ID3D11DepthStencilView **ppDepthStencilView,
+ [in] UINT UAVStartSlot,
+ [out] UINT NumUAVs,
+ [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);
+ void OMGetBlendState(
+ [out] ID3D11BlendState **ppBlendState,
+ [out] FLOAT BlendFactor[4],
+ [out] UINT *pSampleMask);
+ void OMGetDepthStencilState(
+ [out] ID3D11DepthStencilState **ppDepthStencilState,
+ [out] UINT *pStencilRef);
+ void SOGetTargets(
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppSOTargets);
+ void RSGetState(
+ [out] ID3D11RasterizerState **ppRasterizerState);
+ void RSGetViewports(
+ [in, out] UINT *pNumViewports,
+ [out] D3D11_VIEWPORT *pViewports);
+ void RSGetScissorRects(
+ [in, out] UINT *pNumRects,
+ [out] D3D11_RECT *pRects);
+ void HSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+ void HSGetShader(
+ [out] ID3D11HullShader **ppHullShader,
+ [out] ID3D11ClassInstance **ppClassInstances,
+ [in, out] UINT *pNumClassInstances);
+ void HSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D11SamplerState **ppSamplers);
+ void HSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppConstantBuffers);
+ void DSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+ void DSGetShader(
+ [out] ID3D11DomainShader **ppDomainShader,
+ [out] ID3D11ClassInstance **ppClassInstances,
+ [in, out] UINT *pNumClassInstances);
+ void DSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D11SamplerState **ppSamplers);
+ void DSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppConstantBuffers);
+ void CSGetShaderResources(
+ [in] UINT StartSlot,
+ [in] UINT NumViews,
+ [out] ID3D11ShaderResourceView **ppShaderResourceViews);
+ void CSGetUnorderedAccessViews(
+ [in] UINT StartSlot,
+ [in] UINT NumUAVs,
+ [out] ID3D11UnorderedAccessView **ppUnorderedAccessViews);
+ void CSGetShader(
+ [out] ID3D11ComputeShader **ppComputeShader,
+ [out] ID3D11ClassInstance **ppClassInstances,
+ [in, out] UINT *pNumClassInstances);
+ void CSGetSamplers(
+ [in] UINT StartSlot,
+ [in] UINT NumSamplers,
+ [out] ID3D11SamplerState **ppSamplers);
+ void CSGetConstantBuffers(
+ [in] UINT StartSlot,
+ [in] UINT NumBuffers,
+ [out] ID3D11Buffer **ppConstantBuffers);
+ void ClearState();
+ void Flush();
+ D3D11_DEVICE_CONTEXT_TYPE GetType();
+ UINT GetContextFlags();
+ HRESULT FinishCommandList(
+ BOOL RestoreDeferredContextState,
+ [out] ID3D11CommandList **ppCommandList);
+}
+
+[
+ object,
+ local,
+ uuid(db6f6ddb-ac77-4e88-8253-819df9bbf140)
+]
+interface ID3D11Device : IUnknown
+{
+ HRESULT CreateBuffer(
+ [in] const D3D11_BUFFER_DESC *pDesc,
+ [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D11Buffer **ppBuffer);
+ HRESULT CreateTexture1D(
+ [in] const D3D11_TEXTURE1D_DESC *pDesc,
+ [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D11Texture1D **ppTexture1D);
+ HRESULT CreateTexture2D(
+ [in] const D3D11_TEXTURE2D_DESC *pDesc,
+ [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D11Texture2D **ppTexture2D);
+ HRESULT CreateTexture3D(
+ [in] const D3D11_TEXTURE3D_DESC *pDesc,
+ [in] const D3D11_SUBRESOURCE_DATA *pInitialData,
+ [out] ID3D11Texture3D **ppTexture3D);
+ HRESULT CreateShaderResourceView(
+ [in] ID3D11Resource *pResource,
+ [in] const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,
+ [out] ID3D11ShaderResourceView **ppSRView);
+ HRESULT CreateUnorderedAccessView(
+ [in] ID3D11Resource *pResource,
+ [in] const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,
+ [out] ID3D11UnorderedAccessView **ppUAView);
+ HRESULT CreateRenderTargetView(
+ [in] ID3D11Resource *pResource,
+ [in] const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,
+ [out] ID3D11RenderTargetView **ppRTView);
+ HRESULT CreateDepthStencilView(
+ [in] ID3D11Resource *pResource,
+ [in] const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,
+ [out] ID3D11DepthStencilView **ppDepthStencilView);
+ HRESULT CreateInputLayout(
+ [in] const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,
+ [in] UINT NumElements,
+ [in] const void *pShaderBytecodeWithInputSignature,
+ [in] SIZE_T BytecodeLength,
+ [out] ID3D11InputLayout **ppInputLayout);
+ HRESULT CreateVertexShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11VertexShader **ppVertexShader);
+ HRESULT CreateGeometryShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11GeometryShader **ppGeometryShader);
+ HRESULT CreateGeometryShaderWithStreamOutput(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,
+ [in] UINT NumEntries,
+ [in] const UINT *pBufferStrides,
+ [in] UINT NumStrides,
+ [in] UINT RasterizedStream,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11GeometryShader **ppGeometryShader);
+ HRESULT CreatePixelShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11PixelShader **ppPixelShader);
+ HRESULT CreateHullShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11HullShader **ppHullShader);
+ HRESULT CreateDomainShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11DomainShader **ppDomainShader);
+ HRESULT CreateComputeShader(
+ [in] const void *pShaderBytecode,
+ [in] SIZE_T BytecodeLength,
+ [in] ID3D11ClassLinkage *pClassLinkage,
+ [out] ID3D11ComputeShader **ppComputeShader);
+ HRESULT CreateClassLinkage(
+ [out] ID3D11ClassLinkage **ppLinkage);
+ HRESULT CreateBlendState(
+ [in] const D3D11_BLEND_DESC *pBlendStateDesc,
+ [out] ID3D11BlendState **ppBlendState);
+ HRESULT CreateDepthStencilState(
+ [in] const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,
+ [out] ID3D11DepthStencilState **ppDepthStencilState);
+ HRESULT CreateRasterizerState(
+ [in] const D3D11_RASTERIZER_DESC *pRasterizerDesc,
+ [out] ID3D11RasterizerState **ppRasterizerState);
+ HRESULT CreateSamplerState(
+ [in] const D3D11_SAMPLER_DESC *pSamplerDesc,
+ [out] ID3D11SamplerState **ppSamplerState);
+ HRESULT CreateQuery(
+ [in] const D3D11_QUERY_DESC *pQueryDesc,
+ [out] ID3D11Query **ppQuery);
+ HRESULT CreatePredicate(
+ [in] const D3D11_QUERY_DESC *pPredicateDesc,
+ [out] ID3D11Predicate **ppPredicate);
+ HRESULT CreateCounter(
+ [in] const D3D11_COUNTER_DESC *pCounterDesc,
+ [out] ID3D11Counter **ppCounter);
+ HRESULT CreateDeferredContext(
+ UINT ContextFlags,
+ [out] ID3D11DeviceContext **ppDeferredContext);
+ HRESULT OpenSharedResource(
+ [in] HANDLE hResource,
+ [in] REFIID ReturnedInterface,
+ [out] void **ppResource);
+ HRESULT CheckFormatSupport(
+ [in] DXGI_FORMAT Format,
+ [out] UINT *pFormatSupport);
+ HRESULT CheckMultisampleQualityLevels(
+ [in] DXGI_FORMAT Format,
+ [in] UINT SampleCount,
+ [out] UINT *pNumQualityLevels);
+ void CheckCounterInfo(
+ [out] D3D11_COUNTER_INFO *pCounterInfo);
+ HRESULT CheckCounter(
+ [in] const D3D11_COUNTER_DESC *pDesc,
+ [out] D3D11_COUNTER_TYPE *pType,
+ [out] UINT *pActiveCounters,
+ [out] LPSTR szName,
+ [in, out] UINT *pNameLength,
+ [out] LPSTR szUnits,
+ [in, out] UINT *pUnitsLength,
+ [out] LPSTR szDescription,
+ [in, out] UINT *pDescriptionLength);
+ HRESULT CheckFeatureSupport(
+ D3D11_FEATURE Feature,
+ [out] void *pFeatureSupportData,
+ UINT FeatureSupportDataSize);
+ HRESULT GetPrivateData(
+ [in] REFGUID guid,
+ [in, out] UINT *pDataSize,
+ [out] void *pData);
+ HRESULT SetPrivateData(
+ [in] REFGUID guid,
+ [in] UINT DataSize,
+ [in] const void *pData);
+ HRESULT SetPrivateDataInterface(
+ [in] REFGUID guid,
+ [in] const IUnknown *pData);
+ D3D_FEATURE_LEVEL GetFeatureLevel();
+ UINT GetCreationFlags();
+ HRESULT GetDeviceRemovedReason();
+ void GetImmediateContext(
+ [out] ID3D11DeviceContext **ppImmediateContext);
+ HRESULT SetExceptionMode(UINT RaiseFlags);
+ UINT GetExceptionMode();
+}
+
+typedef enum D3D11_CREATE_DEVICE_FLAG {
+ D3D11_CREATE_DEVICE_SINGLETHREADED = 0x0001,
+ D3D11_CREATE_DEVICE_DEBUG = 0x0002,
+ D3D11_CREATE_DEVICE_SWITCH_TO_REF = 0x0004,
+ D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x0008,
+ D3D11_CREATE_DEVICE_BGRA_SUPPORT = 0x0020,
+ D3D11_CREATE_DEVICE_DEBUGGABLE = 0x0040,
+ D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY = 0x0080,
+ D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT = 0x0100,
+ D3D11_CREATE_DEVICE_VIDEO_SUPPORT = 0x0800
+} D3D11_CREATE_DEVICE_FLAG;
+
+const UINT D3D11_SDK_VERSION = 7;
+
+cpp_quote("#include <d3d10_1.h>")
+cpp_quote("#ifndef D3D11_IGNORE_SDK_LAYERS")
+cpp_quote("# include <d3d11sdklayers.h>")
+cpp_quote("#endif")
+cpp_quote("#include <d3d10misc.h>")
+cpp_quote("#include <d3d10shader.h>")
+cpp_quote("#include <d3d10effect.h>")
+cpp_quote("#include <d3d10_1shader.h>")
+
+cpp_quote("typedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
+cpp_quote(" const D3D_FEATURE_LEVEL*,UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
+
+cpp_quote("HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,const D3D_FEATURE_LEVEL*," )
+cpp_quote(" UINT,UINT,ID3D11Device**,D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
+
+cpp_quote("typedef HRESULT (WINAPI *PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)(IDXGIAdapter*,D3D_DRIVER_TYPE,HMODULE,UINT,")
+cpp_quote(" const D3D_FEATURE_LEVEL*,UINT,UINT,const DXGI_SWAP_CHAIN_DESC*,IDXGISwapChain**,ID3D11Device**,")
+cpp_quote(" D3D_FEATURE_LEVEL*,ID3D11DeviceContext**);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl
new file mode 100644
index 00000000..aecd8775
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11sdklayers.idl
@@ -0,0 +1,1268 @@
+/*
+ * Copyright 2013 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "d3d11.idl";
+
+typedef enum D3D11_MESSAGE_CATEGORY {
+ D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED,
+ D3D11_MESSAGE_CATEGORY_MISCELLANEOUS,
+ D3D11_MESSAGE_CATEGORY_INITIALIZATION,
+ D3D11_MESSAGE_CATEGORY_CLEANUP,
+ D3D11_MESSAGE_CATEGORY_COMPILATION,
+ D3D11_MESSAGE_CATEGORY_STATE_CREATION,
+ D3D11_MESSAGE_CATEGORY_STATE_SETTING,
+ D3D11_MESSAGE_CATEGORY_STATE_GETTING,
+ D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION,
+ D3D11_MESSAGE_CATEGORY_EXECUTION,
+ D3D11_MESSAGE_CATEGORY_SHADER
+} D3D11_MESSAGE_CATEGORY;
+
+typedef enum D3D11_MESSAGE_SEVERITY {
+ D3D11_MESSAGE_SEVERITY_CORRUPTION,
+ D3D11_MESSAGE_SEVERITY_ERROR,
+ D3D11_MESSAGE_SEVERITY_WARNING,
+ D3D11_MESSAGE_SEVERITY_INFO,
+ D3D11_MESSAGE_SEVERITY_MESSAGE
+} D3D11_MESSAGE_SEVERITY;
+
+typedef enum D3D11_MESSAGE_ID {
+ D3D11_MESSAGE_ID_UNKNOWN = 0,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD,
+ D3D11_MESSAGE_ID_STRING_FROM_APPLICATION,
+ D3D11_MESSAGE_ID_CORRUPTED_THIS,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14,
+ D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15,
+ D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING,
+ D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS,
+ D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS,
+ D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC,
+ D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC,
+ D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC,
+ D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG,
+ D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED,
+ D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE,
+ D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT,
+ D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR,
+ D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE,
+ D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE,
+ D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE,
+ D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID,
+ D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE,
+ D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED,
+ D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN,
+ D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED,
+ D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN,
+ D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED,
+ D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN,
+ D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED,
+ D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN,
+ D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED,
+ D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED,
+ D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED,
+ D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS,
+ D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN,
+ D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE,
+ D3D11_MESSAGE_ID_REF_THREADING_MODE,
+ D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION,
+ D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION,
+ D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION,
+ D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE,
+ D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER,
+ D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY,
+ D3D11_MESSAGE_ID_REF_INFO,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0,
+ D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT,
+ D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT,
+ D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC,
+ D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW,
+ D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH,
+ D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY,
+ D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY,
+ D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER,
+ D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED,
+ D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,
+ D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN,
+ D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC,
+ D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER,
+ D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER,
+ D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED,
+ D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE,
+ D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS,
+ D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION,
+ D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS,
+ D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN,
+ D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE,
+ D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS,
+ D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE,
+ D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH,
+ D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY,
+ D3D11_MESSAGE_ID_LIVE_BUFFER,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE1D,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE2D,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE3D,
+ D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW,
+ D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW,
+ D3D11_MESSAGE_ID_LIVE_VERTEXSHADER,
+ D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER,
+ D3D11_MESSAGE_ID_LIVE_PIXELSHADER,
+ D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT,
+ D3D11_MESSAGE_ID_LIVE_SAMPLER,
+ D3D11_MESSAGE_ID_LIVE_BLENDSTATE,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE,
+ D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE,
+ D3D11_MESSAGE_ID_LIVE_QUERY,
+ D3D11_MESSAGE_ID_LIVE_PREDICATE,
+ D3D11_MESSAGE_ID_LIVE_COUNTER,
+ D3D11_MESSAGE_ID_LIVE_DEVICE,
+ D3D11_MESSAGE_ID_LIVE_SWAPCHAIN,
+ D3D11_MESSAGE_ID_D3D10_MESSAGES_END,
+
+ D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START = 0x00100000,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE,
+ D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS,
+ D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D,
+ D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS,
+ D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX,
+ D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS,
+ D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY,
+ D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK,
+ D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK,
+ D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE,
+ D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER,
+ D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE,
+ D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT,
+ D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES,
+ D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED,
+ D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE,
+ D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3,
+ D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED,
+ D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO,
+ D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION,
+ D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR,
+ D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA,
+ D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP,
+ D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT,
+ D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES,
+ D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END,
+
+ D3D11_MESSAGE_ID_D3D11_MESSAGES_START = 0x00200000,
+ D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN,
+ D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT,
+ D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES,
+ D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES,
+ D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH,
+ D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD,
+ D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE,
+ D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS,
+ D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH,
+ D3D11_MESSAGE_ID_CREATE_CONTEXT,
+ D3D11_MESSAGE_ID_LIVE_CONTEXT,
+ D3D11_MESSAGE_ID_DESTROY_CONTEXT,
+ D3D11_MESSAGE_ID_CREATE_BUFFER,
+ D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_BUFFER,
+ D3D11_MESSAGE_ID_CREATE_TEXTURE1D,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_TEXTURE1D,
+ D3D11_MESSAGE_ID_CREATE_TEXTURE2D,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_TEXTURE2D,
+ D3D11_MESSAGE_ID_CREATE_TEXTURE3D,
+ D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_TEXTURE3D,
+ D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW,
+ D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW,
+ D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW,
+ D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW,
+ D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW,
+ D3D11_MESSAGE_ID_CREATE_VERTEXSHADER,
+ D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER,
+ D3D11_MESSAGE_ID_CREATE_HULLSHADER,
+ D3D11_MESSAGE_ID_LIVE_HULLSHADER,
+ D3D11_MESSAGE_ID_DESTROY_HULLSHADER,
+ D3D11_MESSAGE_ID_CREATE_DOMAINSHADER,
+ D3D11_MESSAGE_ID_LIVE_DOMAINSHADER,
+ D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER,
+ D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER,
+ D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER,
+ D3D11_MESSAGE_ID_CREATE_PIXELSHADER,
+ D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_PIXELSHADER,
+ D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT,
+ D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT,
+ D3D11_MESSAGE_ID_CREATE_SAMPLER,
+ D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_SAMPLER,
+ D3D11_MESSAGE_ID_CREATE_BLENDSTATE,
+ D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_BLENDSTATE,
+ D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE,
+ D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE,
+ D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE,
+ D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE,
+ D3D11_MESSAGE_ID_CREATE_QUERY,
+ D3D11_MESSAGE_ID_LIVE_QUERY_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_QUERY,
+ D3D11_MESSAGE_ID_CREATE_PREDICATE,
+ D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7,
+ D3D11_MESSAGE_ID_DESTROY_PREDICATE,
+ D3D11_MESSAGE_ID_CREATE_COUNTER,
+ D3D11_MESSAGE_ID_DESTROY_COUNTER,
+ D3D11_MESSAGE_ID_CREATE_COMMANDLIST,
+ D3D11_MESSAGE_ID_LIVE_COMMANDLIST,
+ D3D11_MESSAGE_ID_DESTROY_COMMANDLIST,
+ D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE,
+ D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE,
+ D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE,
+ D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE,
+ D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE,
+ D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE,
+ D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7,
+ D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7,
+ D3D11_MESSAGE_ID_CREATE_COMPUTESHADER,
+ D3D11_MESSAGE_ID_LIVE_COMPUTESHADER,
+ D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER,
+ D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW,
+ D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW,
+ D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA,
+ D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS,
+ D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL,
+ D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE,
+ D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE,
+ D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD,
+ D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE,
+ D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE,
+ D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP,
+ D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD,
+ D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT,
+ D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD,
+ D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT,
+ D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY,
+ D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY,
+ D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO,
+ D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH,
+ D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE,
+ D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE,
+ D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET,
+ D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS,
+ D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED,
+ D3D11_MESSAGE_ID_REF_WARNING,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV,
+ D3D11_MESSAGE_ID_SHADER_ABORT,
+ D3D11_MESSAGE_ID_SHADER_MESSAGE,
+ D3D11_MESSAGE_ID_SHADER_ERROR,
+ D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE,
+ D3D11_MESSAGE_ID_D3D11_MESSAGES_END,
+
+ D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START = 0x00300000,
+ D3D11_MESSAGE_ID_CREATE_VIDEODECODER,
+ D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM,
+ D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR,
+ D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW,
+ D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW,
+ D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW,
+ D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE,
+ D3D11_MESSAGE_ID_LIVE_VIDEODECODER,
+ D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM,
+ D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR,
+ D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW,
+ D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW,
+ D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW,
+ D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE,
+ D3D11_MESSAGE_ID_DESTROY_VIDEODECODER,
+ D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM,
+ D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR,
+ D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW,
+ D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW,
+ D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW,
+ D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID,
+ D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS,
+ D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX,
+ D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM,
+ D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX,
+ D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM,
+ D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE,
+ D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED,
+ D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM,
+ D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE,
+ D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED,
+ D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM,
+ D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD,
+ D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM,
+ D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM,
+ D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE,
+ D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM,
+ D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM,
+ D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY,
+ D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT,
+ D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS,
+ D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER,
+ D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER,
+ D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER,
+ D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE,
+ D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT,
+ D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE,
+ D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD,
+ D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD,
+ D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD,
+ D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE,
+ D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED,
+ D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED,
+ D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED,
+ D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM,
+ D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE,
+ D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM,
+ D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM,
+ D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE,
+ D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM,
+ D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM,
+ D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE,
+ D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM,
+ D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE,
+ D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL,
+ D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE,
+ D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE,
+ D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE,
+ D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+ D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+ D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+ D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+ D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+ D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT,
+ D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE,
+ D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE,
+ D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY,
+ D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND,
+ D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED,
+ D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET,
+ D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED,
+ D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1,
+ D3D11_MESSAGE_ID_GETDC_INACCESSIBLE,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED,
+ D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA,
+ D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT,
+ D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT,
+ D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX,
+ D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET,
+ D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT,
+ D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT,
+ D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END
+} D3D11_MESSAGE_ID;
+
+typedef struct D3D11_MESSAGE {
+ D3D11_MESSAGE_CATEGORY Category;
+ D3D11_MESSAGE_SEVERITY Severity;
+ D3D11_MESSAGE_ID ID;
+ const char *pDescription;
+ SIZE_T DescriptionByteLength;
+} D3D11_MESSAGE;
+
+typedef struct D3D11_INFO_QUEUE_FILTER_DESC {
+ UINT NumCategories;
+ D3D11_MESSAGE_CATEGORY *pCategoryList;
+ UINT NumSeverities;
+ D3D11_MESSAGE_SEVERITY *pSeverityList;
+ UINT NumIDs;
+ D3D11_MESSAGE_ID *pIDList;
+} D3D11_INFO_QUEUE_FILTER_DESC;
+
+typedef struct D3D11_INFO_QUEUE_FILTER {
+ D3D11_INFO_QUEUE_FILTER_DESC AllowList;
+ D3D11_INFO_QUEUE_FILTER_DESC DenyList;
+} D3D11_INFO_QUEUE_FILTER;
+
+cpp_quote("#define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024")
+
+[
+ object,
+ uuid(6543dbb6-1b48-42f5-ab82-e97ec74326f6),
+ local,
+ pointer_default(unique)
+]
+interface ID3D11InfoQueue : IUnknown {
+ HRESULT SetMessageCountLimit(UINT64 MessageCountLimit);
+ void ClearStoredMessages();
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetMessage")
+cpp_quote("#endif")
+ HRESULT GetMessage(UINT64 MessageIndex, D3D11_MESSAGE* pMessage, SIZE_T *pMessageByteLength);
+
+ UINT64 GetNumMessagesAllowedByStorageFilter();
+ UINT64 GetNumMessagesDeniedByStorageFilter();
+ UINT64 GetNumStoredMessages();
+ UINT64 GetNumStoredMessagesAllowedByRetrievalFilter();
+ UINT64 GetNumMessagesDiscardedByMessageCountLimit();
+ UINT64 GetMessageCountLimit();
+ HRESULT AddStorageFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter);
+ HRESULT GetStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength);
+ void ClearStorageFilter();
+ HRESULT PushEmptyStorageFilter();
+ HRESULT PushCopyOfStorageFilter();
+ HRESULT PushStorageFilter(D3D11_INFO_QUEUE_FILTER *pFilter);
+ void PopStorageFilter();
+ UINT GetStorageFilterStackSize();
+ HRESULT AddRetrievalFilterEntries(D3D11_INFO_QUEUE_FILTER *pFilter);
+ HRESULT GetRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter, SIZE_T *pFilterByteLength);
+ void ClearRetrievalFilter();
+ HRESULT PushEmptyRetrievalFilter();
+ HRESULT PushCopyOfRetrievalFilter();
+ HRESULT PushRetrievalFilter(D3D11_INFO_QUEUE_FILTER *pFilter);
+ void PopRetrievalFilter();
+ UINT GetRetrievalFilterStackSize();
+ HRESULT AddMessage(D3D11_MESSAGE_CATEGORY Category, D3D11_MESSAGE_SEVERITY Severity,
+ D3D11_MESSAGE_ID ID, LPCSTR pDescription);
+ HRESULT AddApplicationMessage(D3D11_MESSAGE_SEVERITY Severity, LPCSTR pDescription);
+ HRESULT SetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category, BOOL bEnable);
+ HRESULT SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity, BOOL bEnable);
+ HRESULT SetBreakOnID(D3D11_MESSAGE_ID ID, BOOL bEnable);
+ BOOL GetBreakOnCategory(D3D11_MESSAGE_CATEGORY Category);
+ BOOL GetBreakOnSeverity(D3D11_MESSAGE_SEVERITY Severity);
+ BOOL GetBreakOnID(D3D11_MESSAGE_ID ID);
+ void SetMuteDebugOutput(BOOL bMute);
+ BOOL GetMuteDebugOutput();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h
new file mode 100644
index 00000000..3786d648
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d11shader.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2010 Matteo Bruni for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3D11SHADER_H__
+#define __D3D11SHADER_H__
+
+#include "d3dcommon.h"
+
+/* These are defined as version-neutral in d3dcommon.h */
+typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;
+
+typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;
+
+typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;
+
+typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;
+
+typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;
+
+typedef struct _D3D11_SHADER_DESC
+{
+ UINT Version;
+ const char *Creator;
+ UINT Flags;
+ UINT ConstantBuffers;
+ UINT BoundResources;
+ UINT InputParameters;
+ UINT OutputParameters;
+ UINT InstructionCount;
+ UINT TempRegisterCount;
+ UINT TempArrayCount;
+ UINT DefCount;
+ UINT DclCount;
+ UINT TextureNormalInstructions;
+ UINT TextureLoadInstructions;
+ UINT TextureCompInstructions;
+ UINT TextureBiasInstructions;
+ UINT TextureGradientInstructions;
+ UINT FloatInstructionCount;
+ UINT IntInstructionCount;
+ UINT UintInstructionCount;
+ UINT StaticFlowControlCount;
+ UINT DynamicFlowControlCount;
+ UINT MacroInstructionCount;
+ UINT ArrayInstructionCount;
+ UINT CutInstructionCount;
+ UINT EmitInstructionCount;
+ D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
+ UINT GSMaxOutputVertexCount;
+ D3D_PRIMITIVE InputPrimitive;
+ UINT PatchConstantParameters;
+ UINT cGSInstanceCount;
+ UINT cControlPoints;
+ D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;
+ D3D_TESSELLATOR_PARTITIONING HSPartitioning;
+ D3D_TESSELLATOR_DOMAIN TessellatorDomain;
+ UINT cBarrierInstructions;
+ UINT cInterlockedInstructions;
+ UINT cTextureStoreInstructions;
+} D3D11_SHADER_DESC;
+
+typedef struct _D3D11_SHADER_VARIABLE_DESC
+{
+ const char *Name;
+ UINT StartOffset;
+ UINT Size;
+ UINT uFlags;
+ void *DefaultValue;
+ UINT StartTexture;
+ UINT TextureSize;
+ UINT StartSampler;
+ UINT SamplerSize;
+} D3D11_SHADER_VARIABLE_DESC;
+
+typedef struct _D3D11_SHADER_TYPE_DESC
+{
+ D3D_SHADER_VARIABLE_CLASS Class;
+ D3D_SHADER_VARIABLE_TYPE Type;
+ UINT Rows;
+ UINT Columns;
+ UINT Elements;
+ UINT Members;
+ UINT Offset;
+ const char *Name;
+} D3D11_SHADER_TYPE_DESC;
+
+typedef struct _D3D11_SHADER_BUFFER_DESC
+{
+ const char *Name;
+ D3D_CBUFFER_TYPE Type;
+ UINT Variables;
+ UINT Size;
+ UINT uFlags;
+} D3D11_SHADER_BUFFER_DESC;
+
+typedef struct _D3D11_SHADER_INPUT_BIND_DESC
+{
+ const char *Name;
+ D3D_SHADER_INPUT_TYPE Type;
+ UINT BindPoint;
+ UINT BindCount;
+ UINT uFlags;
+ D3D_RESOURCE_RETURN_TYPE ReturnType;
+ D3D_SRV_DIMENSION Dimension;
+ UINT NumSamples;
+} D3D11_SHADER_INPUT_BIND_DESC;
+
+typedef struct _D3D11_SIGNATURE_PARAMETER_DESC
+{
+ const char *SemanticName;
+ UINT SemanticIndex;
+ UINT Register;
+ D3D_NAME SystemValueType;
+ D3D_REGISTER_COMPONENT_TYPE ComponentType;
+ BYTE Mask;
+ BYTE ReadWriteMask;
+ UINT Stream;
+} D3D11_SIGNATURE_PARAMETER_DESC;
+
+DEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);
+
+#define INTERFACE ID3D11ShaderReflectionType
+DECLARE_INTERFACE(ID3D11ShaderReflectionType)
+{
+ STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_TYPE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(const char *, GetMemberTypeName)(THIS_ UINT index) PURE;
+ STDMETHOD(IsEqual)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionType *, GetSubType)(THIS) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionType *, GetBaseClass)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionType *, GetInterfaceByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD(IsOfType)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;
+ STDMETHOD(ImplementsInterface)(THIS_ ID3D11ShaderReflectionType *base) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);
+
+#define INTERFACE ID3D11ShaderReflectionVariable
+DECLARE_INTERFACE(ID3D11ShaderReflectionVariable)
+{
+ STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_VARIABLE_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionType *, GetType)(THIS) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetBuffer)(THIS) PURE;
+ STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ UINT index) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);
+
+#define INTERFACE ID3D11ShaderReflectionConstantBuffer
+DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer)
+{
+ STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+};
+#undef INTERFACE
+
+DEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);
+
+#define INTERFACE ID3D11ShaderReflection
+DECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown)
+{
+ /* IUnknown methods */
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /* ID3D11ShaderReflection methods */
+ STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;
+ STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD(GetPatchConstantParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
+ STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetResourceBindingDescByName)(THIS_ const char *name, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;
+ STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;
+ STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;
+ STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;
+ STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;
+ STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;
+ STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;
+ STDMETHOD(GetMinFeatureLevel)(THIS_ enum D3D_FEATURE_LEVEL *level) PURE;
+ STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ UINT *sizex, UINT *sizey, UINT *sizez) PURE;
+};
+#undef INTERFACE
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h
new file mode 100644
index 00000000..cba8aabd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8.h
@@ -0,0 +1,1162 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8_H
+#define __WINE_D3D8_H
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0800
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <windows.h>
+#include <d3d8types.h>
+#include <d3d8caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE __MSABI_LONG(0x00000002)
+#define D3DCREATE_MULTITHREADED __MSABI_LONG(0x00000004)
+#define D3DCREATE_PUREDEVICE __MSABI_LONG(0x00000010)
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING __MSABI_LONG(0x00000020)
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING __MSABI_LONG(0x00000040)
+#define D3DCREATE_MIXED_VERTEXPROCESSING __MSABI_LONG(0x00000080)
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN __MSABI_LONG(0x00000001)
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION 220
+#define D3DADAPTER_DEFAULT 0
+#define D3DENUM_NO_WHQL_LEVEL 2
+
+#define _FACD3D 0x876
+#define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code )
+
+/*
+ * Direct3D Errors
+ */
+#define D3D_OK S_OK
+#define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087)
+
+#define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157)
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D8, 0x1DD9E8DA,0x1C77,0x4D40,0xB0,0xCF,0x98,0xFE,0xFD,0xFF,0x95,0x12);
+typedef struct IDirect3D8 *LPDIRECT3D8;
+
+DEFINE_GUID(IID_IDirect3DDevice8, 0x7385E5DF,0x8FE8,0x41D5,0x86,0xB6,0xD7,0xB4,0x85,0x47,0xB6,0xCF);
+typedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8;
+
+DEFINE_GUID(IID_IDirect3DResource8, 0x1B36BB7B,0x09B7,0x410A,0xB4,0x45,0x7D,0x14,0x30,0xD7,0xB3,0x3F);
+typedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer8, 0x8AEEEAC7,0x05F9,0x44D4,0xB5,0x91,0x00,0x0B,0x0D,0xF1,0xCB,0x95);
+typedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DVolume8, 0xBD7349F5,0x14F1,0x42E4,0x9C,0x79,0x97,0x23,0x80,0xDB,0x40,0xC0);
+typedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;
+
+DEFINE_GUID(IID_IDirect3DSwapChain8, 0x928C088B,0x76B9,0x4C6B,0xA5,0x36,0xA5,0x90,0x85,0x38,0x76,0xCD);
+typedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;
+
+DEFINE_GUID(IID_IDirect3DSurface8, 0xB96EEBCA,0xB326,0x4EA5,0x88,0x2F,0x2F,0xF5,0xBA,0xE0,0x21,0xDD);
+typedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer8, 0x0E689C9A,0x053D,0x44A0,0x9D,0x92,0xDB,0x0E,0x3D,0x75,0x0F,0x86);
+typedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture8, 0xB4211CFA,0x51B9,0x4A9F,0xAB,0x78,0xDB,0x99,0xB2,0xBB,0x67,0x8E);
+typedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DTexture8, 0xE4CDD575,0x2866,0x4F01,0xB1,0x2E,0x7E,0xEC,0xE1,0xEC,0x93,0x58);
+typedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture8, 0x3EE5B968,0x2ACA,0x4C34,0x8B,0xB5,0x7E,0x0C,0x3D,0x19,0xB7,0x50);
+typedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4B8AAAFA,0x140F,0x42BA,0x91,0x31,0x59,0x7E,0xAF,0xAA,0x2E,0xAD);
+typedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;
+
+/*****************************************************************************
+ * IDirect3D8 interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirect3D8
+DECLARE_INTERFACE_(IDirect3D8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D8 methods ***/
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE;
+ STDMETHOD_(UINT,GetAdapterCount )(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE;
+ STDMETHOD_(UINT,GetAdapterModeCount)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, UINT Mode, D3DDISPLAYMODE * pMode) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE * pMode) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter, D3DDEVTYPE CheckType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL Windowed) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8 * pCaps) PURE;
+ STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType,HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, struct IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D8_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a) (p)->lpVtbl->GetAdapterModeCount(p,a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->lpVtbl->EnumAdapterModes(p,a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D8_AddRef(p) (p)->AddRef()
+#define IDirect3D8_Release(p) (p)->Release()
+/*** IDirect3D8 methods ***/
+#define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D8_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D8_GetAdapterModeCount(p,a) (p)->GetAdapterModeCount(a)
+#define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->EnumAdapterModes(a,b,c)
+#define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->CheckDeviceMultiSampleType(a,b,c,d,e)
+#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D8_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume8 interface
+ */
+#define INTERFACE IDirect3DVolume8
+DECLARE_INTERFACE_(IDirect3DVolume8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVolume8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void ** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE;
+ STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+ STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume8_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume8_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolume8_AddRef(p) (p)->AddRef()
+#define IDirect3DVolume8_Release(p) (p)->Release()
+/*** IDirect3DVolume8 methods ***/
+#define IDirect3DVolume8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolume8_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DVolume8_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DVolume8_LockBox(p,a,b,c) (p)->LockBox(a,b,c)
+#define IDirect3DVolume8_UnlockBox(p) (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain8 interface
+ */
+#define INTERFACE IDirect3DSwapChain8
+DECLARE_INTERFACE_(IDirect3DSwapChain8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSwapChain8 methods ***/
+ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+ const RGNDATA *dirty_region) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface8 ** ppBackBuffer) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c) (p)->lpVtbl->Present(p,a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain8_AddRef(p) (p)->AddRef()
+#define IDirect3DSwapChain8_Release(p) (p)->Release()
+/*** IDirect3DSwapChain8 methods ***/
+#define IDirect3DSwapChain8_Present(p,a,b,c) (p)->Present(a,b,c)
+#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface8 interface
+ */
+#define INTERFACE IDirect3DSurface8
+DECLARE_INTERFACE_(IDirect3DSurface8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSurface8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void ** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+ STDMETHOD(UnlockRect)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface8_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface8_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSurface8_AddRef(p) (p)->AddRef()
+#define IDirect3DSurface8_Release(p) (p)->Release()
+/*** IDirect3DSurface8 methods ***/
+#define IDirect3DSurface8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DSurface8_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DSurface8_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DSurface8_LockRect(p,a,b,c) (p)->LockRect(a,b,c)
+#define IDirect3DSurface8_UnlockRect(p) (p)->UnlockRect()
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource8 interface
+ */
+#define INTERFACE IDirect3DResource8
+DECLARE_INTERFACE_(IDirect3DResource8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource8_GetType(p) (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DResource8_AddRef(p) (p)->AddRef()
+#define IDirect3DResource8_Release(p) (p)->Release()
+/*** IDirect3DResource8 methods ***/
+#define IDirect3DResource8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DResource8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DResource8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DResource8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DResource8_GetType(p) (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer8 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer8
+DECLARE_INTERFACE_(IDirect3DVertexBuffer8,IDirect3DResource8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DVertexBuffer8 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer8_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer8_Release(p) (p)->Release()
+/*** IDirect3DVertexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVertexBuffer8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVertexBuffer8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVertexBuffer8_GetType(p) (p)->GetType()
+/*** IDirect3DVertexBuffer8 methods ***/
+#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer8_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer8 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer8
+DECLARE_INTERFACE_(IDirect3DIndexBuffer8,IDirect3DResource8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DIndexBuffer8 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, BYTE ** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer8_AddRef(p) (p)->AddRef()
+#define IDirect3DIndexBuffer8_Release(p) (p)->Release()
+/*** IDirect3DIndexBuffer8 methods: IDirect3DResource8 ***/
+#define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DIndexBuffer8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DIndexBuffer8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DIndexBuffer8_GetType(p) (p)->GetType()
+/*** IDirect3DIndexBuffer8 methods ***/
+#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer8_Unlock(p) (p)->Unlock()
+#define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture8 interface
+ */
+#define INTERFACE IDirect3DBaseTexture8
+DECLARE_INTERFACE_(IDirect3DBaseTexture8,IDirect3DResource8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DBaseTexture8_Release(p) (p)->Release()
+/*** IDirect3DBaseTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DBaseTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DBaseTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DBaseTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DBaseTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DBaseTexture8 methods ***/
+#define IDirect3DBaseTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DBaseTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DBaseTexture8_GetLevelCount(p) (p)->GetLevelCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture8 interface
+ */
+#define INTERFACE IDirect3DCubeTexture8
+DECLARE_INTERFACE_(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ /*** IDirect3DCubeTexture8 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC * pDesc) PURE;
+ STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level, D3DLOCKED_RECT *locked_rect,
+ const RECT *rect, DWORD flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DCubeTexture8_Release(p) (p)->Release()
+/*** IDirect3DCubeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DCubeTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DCubeTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DCubeTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DCubeTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DCubeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DCubeTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DCubeTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DCubeTexture8_GetLevelCount(p) (p)->GetLevelCount()
+/*** IDirect3DCubeTexture8 methods ***/
+#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture8 interface
+ */
+#define INTERFACE IDirect3DTexture8
+DECLARE_INTERFACE_(IDirect3DTexture8,IDirect3DBaseTexture8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ /*** IDirect3DTexture8 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC * pDesc) PURE;
+ STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE;
+ STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture8_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture8_Release(p) (p)->Release()
+/*** IDirect3DTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DTexture8_GetLevelCount(p) (p)->GetLevelCount()
+/*** IDirect3DTexture8 methods ***/
+#define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture8_UnlockRect(p,a) (p)->UnlockRect(a)
+#define IDirect3DTexture8_AddDirtyRect(p,a) (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture8 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture8
+DECLARE_INTERFACE_(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource8 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice8 ** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void * pData, DWORD * pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD,SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD,GetPriority)(THIS) PURE;
+ STDMETHOD_(void,PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture8 methods ***/
+ STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD,GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
+ /*** IDirect3DVolumeTexture8 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC * pDesc) PURE;
+ STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume8 ** ppVolumeLevel) PURE;
+ STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+ STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture8_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture8_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture8_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DResource8 ***/
+#define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture8_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture8_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture8_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture8 methods: IDirect3DBaseTexture8 ***/
+#define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture8_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->GetLevelCount()
+/*** IDirect3DVolumeTexture8 methods ***/
+#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice8 interface
+ */
+#define INTERFACE IDirect3DDevice8
+DECLARE_INTERFACE_(IDirect3DDevice8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice8 methods ***/
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD Bytes) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D8 ** ppD3D8) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8 * pCaps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE * pMode) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS * pParameters) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface8 * pCursorBitmap) PURE;
+ STDMETHOD_(void,SetCursorPosition)(THIS_ UINT XScreenSpace, UINT YScreenSpace,DWORD Flags) PURE;
+ STDMETHOD_(BOOL,ShowCursor)(THIS_ BOOL bShow) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DSwapChain8 ** pSwapChain) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS * pPresentationParameters) PURE;
+ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+ const RGNDATA *dirty_region) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8 ** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS * pRasterStatus) PURE;
+ STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD flags, const D3DGAMMARAMP *ramp) PURE;
+ STDMETHOD_(void,GetGammaRamp)(THIS_ D3DGAMMARAMP * pRamp) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8 ** ppTexture) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8 ** ppVolumeTexture) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8 ** ppCubeTexture) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8 ** ppVertexBuffer) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8 ** ppIndexBuffer) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8 ** ppSurface) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8 ** ppSurface) PURE;
+ STDMETHOD(CreateImageSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8 ** ppSurface) PURE;
+ STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8 *src_surface, const RECT *src_rects,
+ UINT rect_count, IDirect3DSurface8 *dst_surface, const POINT *dst_points) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8 * pSourceTexture,IDirect3DBaseTexture8 * pDestinationTexture) PURE;
+ STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8 * pDestSurface) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8 * pRenderTarget,IDirect3DSurface8 * pNewZStencil) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8 ** ppRenderTarget) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8 ** ppZStencilSurface) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags, D3DCOLOR color,
+ float z, DWORD stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX * pMatrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT8 *viewport) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8 * pViewport) PURE;
+ STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL8 *material) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8 *pMaterial) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT8 *light) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT8 * pLight) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL * pEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float * pPlane) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD * pValue) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ DWORD * pToken) PURE;
+ STDMETHOD(ApplyStateBlock)(THIS_ DWORD Token) PURE;
+ STDMETHOD(CaptureStateBlock)(THIS_ DWORD Token) PURE;
+ STDMETHOD(DeleteStateBlock)(THIS_ DWORD Token) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,DWORD * pToken) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS8 *clip_status) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8 * pClipStatus) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8 ** ppTexture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8 * pTexture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD * pValue) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD * pNumPasses) PURE;
+ STDMETHOD(GetInfo)(THIS_ DWORD DevInfoID,void * pDevInfoStruct,DWORD DevInfoStructSize) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY * pEntries) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT * PaletteNumber) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT primitive_count,
+ const void *data, UINT stride) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx,
+ UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format,
+ const void *data, UINT stride) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8 * pDestBuffer,DWORD Flags) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ const DWORD *declaration, const DWORD *byte_code,
+ DWORD *shader, DWORD usage) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ DWORD * pHandle) PURE;
+ STDMETHOD(DeleteVertexShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE;
+ STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD Register,void * pConstantData,DWORD ConstantCount) PURE;
+ STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8 * pStreamData,UINT Stride) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8 ** ppStreamData,UINT * pStride) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8 * pIndexData,UINT BaseVertexIndex) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8 ** ppIndexData,UINT * pBaseVertexIndex) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, DWORD *shader) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ DWORD * pHandle) PURE;
+ STDMETHOD(DeletePixelShader)(THIS_ DWORD Handle) PURE;
+ STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD reg_idx, const void *data, DWORD count) PURE;
+ STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD Register,void * pConstantData,DWORD ConstantCount) PURE;
+ STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD Handle,void * pData,DWORD * pSizeOfData) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count,
+ const D3DRECTPATCH_INFO *patch_info) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count,
+ const D3DTRIPATCH_INFO *patch_info) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)
+#define IDirect3DDevice8_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice8_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DDevice8_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice8_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a) (p)->lpVtbl->GetGammaRamp(p,a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->lpVtbl->CopyRects(p,a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->lpVtbl->GetFrontBuffer(p,a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice8_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice8_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice8_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice8_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice8_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice8_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice8_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice8_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice8_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice8_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice8_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice8_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->lpVtbl->processVertices(p,a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice8_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->lpVtbl->DeleteVertexShader(p,a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->lpVtbl->SetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->lpVtbl->GetStreamSource(p,a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b) (p)->lpVtbl->SetIndices(p,a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b) (p)->lpVtbl->GetIndices(p,a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice8_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice8_DeletePixelShader(p,a) (p)->lpVtbl->DeletePixelShader(p,a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice8_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice8_Release(p) (p)->Release()
+/*** IDirect3DDevice8 methods ***/
+#define IDirect3DDevice8_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->ResourceManagerDiscardBytes(a)
+#define IDirect3DDevice8_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice8_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirect3DDevice8_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice8_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice8_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice8_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#define IDirect3DDevice8_GetRasterStatus(p,a) (p)->GetRasterStatus(a)
+#define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b)
+#define IDirect3DDevice8_GetGammaRamp(p,a) (p)->GetGammaRamp(a)
+#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->CreateTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->CreateCubeTexture(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->CreateVertexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->CreateIndexBuffer(a,b,c,d,e)
+#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->CreateRenderTarget(a,b,c,d,e,f)
+#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->CreateDepthStencilSurface(a,b,c,d,e)
+#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->CreateImageSurface(a,b,c,d)
+#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->CopyRects(a,b,c,d,e)
+#define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->GetFrontBuffer(a)
+#define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice8_GetRenderTarget(p,a) (p)->GetRenderTarget(a)
+#define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice8_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice8_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice8_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice8_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice8_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice8_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice8_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice8_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice8_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice8_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice8_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice8_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice8_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice8_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice8_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a)
+#define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a)
+#define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a)
+#define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice8_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice8_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice8_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice8_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice8_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c)
+#define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->DrawIndexedPrimitive(a,b,c,d,e)
+#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->processVertices(a,b,c,d,e)
+#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->CreateVertexShader(a,b,c,d)
+#define IDirect3DDevice8_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice8_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->DeleteVertexShader(a)
+#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->SetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->GetVertexShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->GetVertexShaderDeclaration(a,b,c)
+#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->GetVertexShaderFunction(a,b,c)
+#define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->SetStreamSource(a,b,c)
+#define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->GetStreamSource(a,b,c)
+#define IDirect3DDevice8_SetIndices(p,a,b) (p)->SetIndices(a,b)
+#define IDirect3DDevice8_GetIndices(p,a,b) (p)->GetIndices(a,b)
+#define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice8_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice8_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice8_DeletePixelShader(p,a) (p)->DeletePixelShader(a)
+#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->SetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->GetPixelShaderConstant(a,b,c)
+#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->GetPixelShaderFunction(a,b,c)
+#define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice8_DeletePatch(p,a) (p)->DeletePatch(a)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/* Define the main entrypoint as well */
+IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_D3D8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h
new file mode 100644
index 00000000..e49c3932
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8caps.h
@@ -0,0 +1,295 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8CAPS_H
+#define __WINE_D3D8CAPS_H
+
+/*
+ * Definitions
+ */
+
+#define D3DCAPS_READ_SCANLINE 0x20000
+
+#define D3DCURSORCAPS_COLOR 1
+#define D3DCURSORCAPS_LOWRES 2
+
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x0000010
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x0000020
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x0000040
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x0000080
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x0000100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x0000200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x0000400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x0000800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x0001000
+#define D3DDEVCAPS_DRAWPRIMITIVES2 0x0002000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x0008000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x0010000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x0020000
+#define D3DDEVCAPS_HWRASTERIZATION 0x0080000
+#define D3DDEVCAPS_PUREDEVICE 0x0100000
+#define D3DDEVCAPS_QUINTICRTPATCHES 0x0200000
+#define D3DDEVCAPS_RTPATCHES 0x0400000
+#define D3DDEVCAPS_RTPATCHHANDLEZERO 0x0800000
+#define D3DDEVCAPS_NPATCHES 0x1000000
+
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x00FFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000
+#define D3DFVFCAPS_PSIZE 0x100000
+
+#define D3DLINECAPS_TEXTURE 0x01
+#define D3DLINECAPS_ZTEST 0x02
+#define D3DLINECAPS_BLEND 0x04
+#define D3DLINECAPS_ALPHACMP 0x08
+#define D3DLINECAPS_FOG 0x10
+
+#define D3DPBLENDCAPS_ZERO 0x0001
+#define D3DPBLENDCAPS_ONE 0x0002
+#define D3DPBLENDCAPS_SRCCOLOR 0x0004
+#define D3DPBLENDCAPS_INVSRCCOLOR 0x0008
+#define D3DPBLENDCAPS_SRCALPHA 0x0010
+#define D3DPBLENDCAPS_INVSRCALPHA 0x0020
+#define D3DPBLENDCAPS_DESTALPHA 0x0040
+#define D3DPBLENDCAPS_INVDESTALPHA 0x0080
+#define D3DPBLENDCAPS_DESTCOLOR 0x0100
+#define D3DPBLENDCAPS_INVDESTCOLOR 0x0200
+#define D3DPBLENDCAPS_SRCALPHASAT 0x0400
+#define D3DPBLENDCAPS_BOTHSRCALPHA 0x0800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x1000
+
+#define D3DPCMPCAPS_NEVER 0x01
+#define D3DPCMPCAPS_LESS 0x02
+#define D3DPCMPCAPS_EQUAL 0x04
+#define D3DPCMPCAPS_LESSEQUAL 0x08
+#define D3DPCMPCAPS_GREATER 0x10
+#define D3DPCMPCAPS_NOTEQUAL 0x20
+#define D3DPCMPCAPS_GREATEREQUAL 0x40
+#define D3DPCMPCAPS_ALWAYS 0x80
+
+#define D3DPMISCCAPS_MASKZ 0x0002
+#define D3DPMISCCAPS_LINEPATTERNREP 0x0004
+#define D3DPMISCCAPS_CULLNONE 0x0010
+#define D3DPMISCCAPS_CULLCW 0x0020
+#define D3DPMISCCAPS_CULLCCW 0x0040
+#define D3DPMISCCAPS_COLORWRITEENABLE 0x0080
+#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x0100
+#define D3DPMISCCAPS_CLIPTLVERTS 0x0200
+#define D3DPMISCCAPS_TSSARGTEMP 0x0400
+#define D3DPMISCCAPS_BLENDOP 0x0800
+
+#define D3DPRASTERCAPS_DITHER 0x00000001
+#define D3DPRASTERCAPS_PAT 0x00000008
+#define D3DPRASTERCAPS_ZTEST 0x00000010
+#define D3DPRASTERCAPS_FOGVERTEX 0x00000080
+#define D3DPRASTERCAPS_FOGTABLE 0x00000100
+#define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000
+#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000
+#define D3DPRASTERCAPS_ZBIAS 0x00004000
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000
+#define D3DPRASTERCAPS_FOGRANGE 0x00010000
+#define D3DPRASTERCAPS_ANISOTROPY 0x00020000
+#define D3DPRASTERCAPS_WBUFFER 0x00040000
+#define D3DPRASTERCAPS_WFOG 0x00100000
+#define D3DPRASTERCAPS_ZFOG 0x00200000
+#define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000
+#define D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE 0x00800000
+
+#define D3DPRESENT_INTERVAL_DEFAULT 0x00000000
+#define D3DPRESENT_INTERVAL_ONE 0x00000001
+#define D3DPRESENT_INTERVAL_TWO 0x00000002
+#define D3DPRESENT_INTERVAL_THREE 0x00000004
+#define D3DPRESENT_INTERVAL_FOUR 0x00000008
+#define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000
+
+#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00008
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00200
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x04000
+#define D3DPSHADECAPS_FOGGOURAUD 0x80000
+
+#define D3DPTADDRESSCAPS_WRAP 0x01
+#define D3DPTADDRESSCAPS_MIRROR 0x02
+#define D3DPTADDRESSCAPS_CLAMP 0x04
+#define D3DPTADDRESSCAPS_BORDER 0x08
+#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x10
+#define D3DPTADDRESSCAPS_MIRRORONCE 0x20
+
+#define D3DPTEXTURECAPS_PERSPECTIVE 0x00001
+#define D3DPTEXTURECAPS_POW2 0x00002
+#define D3DPTEXTURECAPS_ALPHA 0x00004
+#define D3DPTEXTURECAPS_SQUAREONLY 0x00020
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00040
+#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00080
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00100
+#define D3DPTEXTURECAPS_PROJECTED 0x00400
+#define D3DPTEXTURECAPS_CUBEMAP 0x00800
+#define D3DPTEXTURECAPS_VOLUMEMAP 0x02000
+#define D3DPTEXTURECAPS_MIPMAP 0x04000
+#define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x08000
+#define D3DPTEXTURECAPS_MIPCUBEMAP 0x10000
+#define D3DPTEXTURECAPS_CUBEMAP_POW2 0x20000
+#define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x40000
+
+#define D3DPTFILTERCAPS_MINFPOINT 0x00000100
+#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400
+#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000
+#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000
+#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000
+#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000
+#define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000
+
+#define D3DSTENCILCAPS_KEEP 0x01
+#define D3DSTENCILCAPS_ZERO 0x02
+#define D3DSTENCILCAPS_REPLACE 0x04
+#define D3DSTENCILCAPS_INCRSAT 0x08
+#define D3DSTENCILCAPS_DECRSAT 0x10
+#define D3DSTENCILCAPS_INVERT 0x20
+#define D3DSTENCILCAPS_INCR 0x40
+#define D3DSTENCILCAPS_DECR 0x80
+
+#define D3DTEXOPCAPS_DISABLE 0x0000001
+#define D3DTEXOPCAPS_SELECTARG1 0x0000002
+#define D3DTEXOPCAPS_SELECTARG2 0x0000004
+#define D3DTEXOPCAPS_MODULATE 0x0000008
+#define D3DTEXOPCAPS_MODULATE2X 0x0000010
+#define D3DTEXOPCAPS_MODULATE4X 0x0000020
+#define D3DTEXOPCAPS_ADD 0x0000040
+#define D3DTEXOPCAPS_ADDSIGNED 0x0000080
+#define D3DTEXOPCAPS_ADDSIGNED2X 0x0000100
+#define D3DTEXOPCAPS_SUBTRACT 0x0000200
+#define D3DTEXOPCAPS_ADDSMOOTH 0x0000400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x0000800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x0001000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x0002000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x0004000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x0008000
+#define D3DTEXOPCAPS_PREMODULATE 0x0010000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x0020000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x0040000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x0080000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x0100000
+#define D3DTEXOPCAPS_BUMPENVMAP 0x0200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x0400000
+#define D3DTEXOPCAPS_DOTPRODUCT3 0x0800000
+#define D3DTEXOPCAPS_MULTIPLYADD 0x1000000
+#define D3DTEXOPCAPS_LERP 0x2000000
+
+#define D3DVTXPCAPS_TEXGEN 0x01
+#define D3DVTXPCAPS_MATERIALSOURCE7 0x02
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x08
+#define D3DVTXPCAPS_POSITIONALLIGHTS 0x10
+#define D3DVTXPCAPS_LOCALVIEWER 0x20
+#define D3DVTXPCAPS_TWEENING 0x40
+
+#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020
+#define D3DCAPS3_RESERVED 0x8000001f
+
+#define D3DCAPS2_CANCALIBRATEGAMMA 0x0100000
+#define D3DCAPS2_CANRENDERWINDOWED 0x0080000
+#define D3DCAPS2_CANMANAGERESOURCE 0x10000000
+#define D3DCAPS2_DYNAMICTEXTURES 0x20000000
+#define D3DCAPS2_FULLSCREENGAMMA 0x0020000
+#define D3DCAPS2_NO2DDURING3DSCENE 0x0000002
+#define D3DCAPS2_RESERVED 0x2000000
+
+/*
+ * The d3dcaps8 structure
+ */
+typedef struct _D3DCAPS8 {
+ D3DDEVTYPE DeviceType;
+ UINT AdapterOrdinal;
+
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD Caps3;
+ DWORD PresentationIntervals;
+
+ DWORD CursorCaps;
+
+ DWORD DevCaps;
+
+ DWORD PrimitiveMiscCaps;
+ DWORD RasterCaps;
+ DWORD ZCmpCaps;
+ DWORD SrcBlendCaps;
+ DWORD DestBlendCaps;
+ DWORD AlphaCmpCaps;
+ DWORD ShadeCaps;
+ DWORD TextureCaps;
+ DWORD TextureFilterCaps;
+ DWORD CubeTextureFilterCaps;
+ DWORD VolumeTextureFilterCaps;
+ DWORD TextureAddressCaps;
+ DWORD VolumeTextureAddressCaps;
+
+ DWORD LineCaps;
+
+ DWORD MaxTextureWidth, MaxTextureHeight;
+ DWORD MaxVolumeExtent;
+
+ DWORD MaxTextureRepeat;
+ DWORD MaxTextureAspectRatio;
+ DWORD MaxAnisotropy;
+ float MaxVertexW;
+
+ float GuardBandLeft;
+ float GuardBandTop;
+ float GuardBandRight;
+ float GuardBandBottom;
+
+ float ExtentsAdjust;
+ DWORD StencilCaps;
+
+ DWORD FVFCaps;
+ DWORD TextureOpCaps;
+ DWORD MaxTextureBlendStages;
+ DWORD MaxSimultaneousTextures;
+
+ DWORD VertexProcessingCaps;
+ DWORD MaxActiveLights;
+ DWORD MaxUserClipPlanes;
+ DWORD MaxVertexBlendMatrices;
+ DWORD MaxVertexBlendMatrixIndex;
+
+ float MaxPointSize;
+
+ DWORD MaxPrimitiveCount;
+ DWORD MaxVertexIndex;
+ DWORD MaxStreams;
+ DWORD MaxStreamStride;
+
+ DWORD VertexShaderVersion;
+ DWORD MaxVertexShaderConst;
+
+ DWORD PixelShaderVersion;
+ float MaxPixelShaderValue;
+} D3DCAPS8;
+
+#endif /* __WINE_D3D8CAPS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h
new file mode 100644
index 00000000..bacf35fa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d8types.h
@@ -0,0 +1,1222 @@
+/*
+ * Copyright (C) 2002 Jason Edmeades
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D8TYPES_H
+#define __WINE_D3D8TYPES_H
+
+
+/*****************************************************************************
+ * Direct 3D v8 #defines
+ */
+
+#define D3DCLEAR_TARGET 1
+#define D3DCLEAR_ZBUFFER 2
+#define D3DCLEAR_STENCIL 4
+
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+#define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
+#define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
+#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
+#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)
+
+#define D3DCS_LEFT 0x001
+#define D3DCS_RIGHT 0x002
+#define D3DCS_TOP 0x004
+#define D3DCS_BOTTOM 0x008
+#define D3DCS_FRONT 0x010
+#define D3DCS_BACK 0x020
+#define D3DCS_PLANE0 0x040
+#define D3DCS_PLANE1 0x080
+#define D3DCS_PLANE2 0x100
+#define D3DCS_PLANE3 0x200
+#define D3DCS_PLANE4 0x400
+#define D3DCS_PLANE5 0x800
+#define D3DCS_ALL 0xFFF
+
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+
+#define D3DLOCK_READONLY 0x0010
+#define D3DLOCK_NOSYSLOCK 0x0800
+#define D3DLOCK_NOOVERWRITE 0x1000
+#define D3DLOCK_DISCARD 0x2000
+#define D3DLOCK_NO_DIRTY_UPDATE 0x8000
+
+#define D3DMAXUSERCLIPPLANES 32
+
+#define D3DRENDERSTATE_WRAPBIAS 0x80
+
+#define D3DTSS_TCI_PASSTHRU 0x00000
+#define D3DTSS_TCI_CAMERASPACENORMAL 0x10000
+#define D3DTSS_TCI_CAMERASPACEPOSITION 0x20000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x30000
+
+
+#define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
+#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
+#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
+#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
+#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
+
+#define D3DUSAGE_RENDERTARGET 0x01
+#define D3DUSAGE_DEPTHSTENCIL 0x02
+#define D3DUSAGE_WRITEONLY 0x08
+#define D3DUSAGE_SOFTWAREPROCESSING 0x10
+#define D3DUSAGE_DONOTCLIP 0x20
+#define D3DUSAGE_POINTS 0x40
+#define D3DUSAGE_RTPATCHES 0x80
+#define D3DUSAGE_NPATCHES 0x100
+#define D3DUSAGE_DYNAMIC 0x200
+
+#define D3DWRAP_U 1
+#define D3DWRAP_V 2
+#define D3DWRAP_W 4
+#define D3DWRAPCOORD_0 1
+#define D3DWRAPCOORD_1 2
+#define D3DWRAPCOORD_2 4
+#define D3DWRAPCOORD_3 8
+
+#define MAX_DEVICE_IDENTIFIER_STRING 512
+
+#define D3DFVF_RESERVED0 0x0001
+#define D3DFVF_POSITION_MASK 0x000E
+#define D3DFVF_XYZ 0x0002
+#define D3DFVF_XYZRHW 0x0004
+#define D3DFVF_XYZB1 0x0006
+#define D3DFVF_XYZB2 0x0008
+#define D3DFVF_XYZB3 0x000a
+#define D3DFVF_XYZB4 0x000c
+#define D3DFVF_XYZB5 0x000e
+#define D3DFVF_NORMAL 0x0010
+#define D3DFVF_PSIZE 0x0020
+#define D3DFVF_DIFFUSE 0x0040
+#define D3DFVF_SPECULAR 0x0080
+#define D3DFVF_TEXCOUNT_MASK 0x0f00
+#define D3DFVF_TEXCOUNT_SHIFT 8
+#define D3DFVF_TEX0 0x0000
+#define D3DFVF_TEX1 0x0100
+#define D3DFVF_TEX2 0x0200
+#define D3DFVF_TEX3 0x0300
+#define D3DFVF_TEX4 0x0400
+#define D3DFVF_TEX5 0x0500
+#define D3DFVF_TEX6 0x0600
+#define D3DFVF_TEX7 0x0700
+#define D3DFVF_TEX8 0x0800
+#define D3DFVF_LASTBETA_UBYTE4 0x1000
+#define D3DFVF_RESERVED2 0xE000
+
+#define D3DTA_SELECTMASK 0x0000000f
+#define D3DTA_DIFFUSE 0x00000000
+#define D3DTA_CURRENT 0x00000001
+#define D3DTA_TEXTURE 0x00000002
+#define D3DTA_TFACTOR 0x00000003
+#define D3DTA_SPECULAR 0x00000004
+#define D3DTA_COMPLEMENT 0x00000010
+#define D3DTA_ALPHAREPLICATE 0x00000020
+#define D3DTA_TEMP 0x00000005
+
+#define D3DCOLORWRITEENABLE_RED (__MSABI_LONG(1)<<0)
+#define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1)
+#define D3DCOLORWRITEENABLE_BLUE (__MSABI_LONG(1)<<2)
+#define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3)
+
+
+#ifndef MAKEFOURCC
+#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
+
+/****************************
+ * Vertex Shaders Declaration
+ */
+
+typedef enum _D3DVSD_TOKENTYPE {
+ D3DVSD_TOKEN_NOP = 0,
+ D3DVSD_TOKEN_STREAM = 1,
+ D3DVSD_TOKEN_STREAMDATA = 2,
+ D3DVSD_TOKEN_TESSELLATOR = 3,
+ D3DVSD_TOKEN_CONSTMEM = 4,
+ D3DVSD_TOKEN_EXT = 5,
+ /* RESERVED = 6 */
+ D3DVSD_TOKEN_END = 7,
+ D3DVSD_FORCE_DWORD = 0x7FFFFFFF
+} D3DVSD_TOKENTYPE;
+
+/** input registers for vertex shaders functions */
+/*
+#define D3DVSDE_POSITION 0
+#define D3DVSDE_BLENDWEIGHT 1
+#define D3DVSDE_BLENDINDICES 2
+#define D3DVSDE_NORMAL 3
+#define D3DVSDE_PSIZE 4
+#define D3DVSDE_DIFFUSE 5
+#define D3DVSDE_SPECULAR 6
+#define D3DVSDE_TEXCOORD0 7
+#define D3DVSDE_TEXCOORD1 8
+#define D3DVSDE_TEXCOORD2 9
+#define D3DVSDE_TEXCOORD3 10
+#define D3DVSDE_TEXCOORD4 11
+#define D3DVSDE_TEXCOORD5 12
+#define D3DVSDE_TEXCOORD6 13
+#define D3DVSDE_TEXCOORD7 14
+#define D3DVSDE_POSITION2 15
+#define D3DVSDE_NORMAL2 16
+*/
+/** Address of the vertex register. 0 - 16 */
+typedef enum _D3DVSDE_REGISTER {
+ D3DVSDE_POSITION = 0,
+ D3DVSDE_BLENDWEIGHT = 1,
+ D3DVSDE_BLENDINDICES = 2,
+ D3DVSDE_NORMAL = 3,
+ D3DVSDE_PSIZE = 4,
+ D3DVSDE_DIFFUSE = 5,
+ D3DVSDE_SPECULAR = 6,
+ D3DVSDE_TEXCOORD0 = 7,
+ D3DVSDE_TEXCOORD1 = 8,
+ D3DVSDE_TEXCOORD2 = 9,
+ D3DVSDE_TEXCOORD3 = 10,
+ D3DVSDE_TEXCOORD4 = 11,
+ D3DVSDE_TEXCOORD5 = 12,
+ D3DVSDE_TEXCOORD6 = 13,
+ D3DVSDE_TEXCOORD7 = 14,
+ D3DVSDE_POSITION2 = 15,
+ D3DVSDE_NORMAL2 = 16
+} D3DVSDE_REGISTER;
+
+/** bit-field declaration for VertexRegister Type */
+/*
+#define D3DVSDT_FLOAT1 0x00
+#define D3DVSDT_FLOAT2 0x01
+#define D3DVSDT_FLOAT3 0x02
+#define D3DVSDT_FLOAT4 0x03
+#define D3DVSDT_D3DCOLOR 0x04
+#define D3DVSDT_UBYTE4 0x05
+#define D3DVSDT_SHORT2 0x06
+#define D3DVSDT_SHORT4 0x07
+*/
+typedef enum _D3DVSDT_TYPE {
+ D3DVSDT_FLOAT1 = 0x00,
+ D3DVSDT_FLOAT2 = 0x01,
+ D3DVSDT_FLOAT3 = 0x02,
+ D3DVSDT_FLOAT4 = 0x03,
+ D3DVSDT_D3DCOLOR = 0x04,
+ D3DVSDT_UBYTE4 = 0x05,
+ D3DVSDT_SHORT2 = 0x06,
+ D3DVSDT_SHORT4 = 0x07
+} D3DVSDT_TYPE;
+
+
+#define D3DVSD_CONSTADDRESSSHIFT 0
+#define D3DVSD_EXTINFOSHIFT 0
+#define D3DVSD_STREAMNUMBERSHIFT 0
+#define D3DVSD_VERTEXREGSHIFT 0
+#define D3DVSD_CONSTRSSHIFT 16
+#define D3DVSD_DATATYPESHIFT 16
+#define D3DVSD_SKIPCOUNTSHIFT 16
+#define D3DVSD_VERTEXREGINSHIFT 20
+#define D3DVSD_EXTCOUNTSHIFT 24
+#define D3DVSD_CONSTCOUNTSHIFT 25
+#define D3DVSD_DATALOADTYPESHIFT 28
+#define D3DVSD_STREAMTESSSHIFT 28
+#define D3DVSD_TOKENTYPESHIFT 29
+
+#define D3DVSD_CONSTADDRESSMASK (0x7F << D3DVSD_CONSTADDRESSSHIFT)
+#define D3DVSD_EXTINFOMASK (0xFFFFFF << D3DVSD_EXTINFOSHIFT)
+#define D3DVSD_STREAMNUMBERMASK (0xF << D3DVSD_STREAMNUMBERSHIFT)
+#define D3DVSD_VERTEXREGMASK (0x1F << D3DVSD_VERTEXREGSHIFT)
+#define D3DVSD_CONSTRSMASK (0x1FFF << D3DVSD_CONSTRSSHIFT)
+#define D3DVSD_DATATYPEMASK (0xF << D3DVSD_DATATYPESHIFT)
+#define D3DVSD_SKIPCOUNTMASK (0xF << D3DVSD_SKIPCOUNTSHIFT)
+#define D3DVSD_EXTCOUNTMASK (0x1F << D3DVSD_EXTCOUNTSHIFT)
+#define D3DVSD_VERTEXREGINMASK (0xF << D3DVSD_VERTEXREGINSHIFT)
+#define D3DVSD_CONSTCOUNTMASK (0xF << D3DVSD_CONSTCOUNTSHIFT)
+#define D3DVSD_DATALOADTYPEMASK (0x1 << D3DVSD_DATALOADTYPESHIFT)
+#define D3DVSD_STREAMTESSMASK (0x1 << D3DVSD_STREAMTESSSHIFT)
+#define D3DVSD_TOKENTYPEMASK (0x7 << D3DVSD_TOKENTYPESHIFT)
+
+
+#define D3DVSD_MAKETOKENTYPE(TokenType) \
+ ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
+
+#define D3DVSD_CONST(ConstantAddress, Count) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))
+
+#define D3DVSD_END() 0xFFFFFFFF
+
+#define D3DVSD_NOP() 0x00000000
+
+#define D3DVSD_REG(VertexRegister, Type) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))
+
+#define D3DVSD_SKIP(Count) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))
+
+#define D3DVSD_STREAM(StreamNumber) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))
+
+#define D3DVSD_STREAM_TESS() \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
+
+#define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut))
+
+#define D3DVSD_TESSUV(Register) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register))
+
+
+/********************************
+ * Pixel/Vertex Shaders Functions
+ */
+
+/** Maximum number of supported texture coordinates sets operation */
+#define D3DDP_MAXTEXCOORD 8
+
+/** opcode token mask */
+#define D3DSI_OPCODE_MASK 0x0000FFFF
+
+/** opcodes types for PS and VS */
+typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {
+ D3DSIO_NOP = 0,
+ D3DSIO_MOV = 1,
+ D3DSIO_ADD = 2,
+ D3DSIO_SUB = 3,
+ D3DSIO_MAD = 4,
+ D3DSIO_MUL = 5,
+ D3DSIO_RCP = 6,
+ D3DSIO_RSQ = 7,
+ D3DSIO_DP3 = 8,
+ D3DSIO_DP4 = 9,
+ D3DSIO_MIN = 10,
+ D3DSIO_MAX = 11,
+ D3DSIO_SLT = 12,
+ D3DSIO_SGE = 13,
+ D3DSIO_EXP = 14,
+ D3DSIO_LOG = 15,
+ D3DSIO_LIT = 16,
+ D3DSIO_DST = 17,
+ D3DSIO_LRP = 18,
+ D3DSIO_FRC = 19,
+ D3DSIO_M4x4 = 20,
+ D3DSIO_M4x3 = 21,
+ D3DSIO_M3x4 = 22,
+ D3DSIO_M3x3 = 23,
+ D3DSIO_M3x2 = 24,
+
+ D3DSIO_TEXCOORD = 64,
+ D3DSIO_TEXKILL = 65,
+ D3DSIO_TEX = 66,
+ D3DSIO_TEXBEM = 67,
+ D3DSIO_TEXBEML = 68,
+ D3DSIO_TEXREG2AR = 69,
+ D3DSIO_TEXREG2GB = 70,
+ D3DSIO_TEXM3x2PAD = 71,
+ D3DSIO_TEXM3x2TEX = 72,
+ D3DSIO_TEXM3x3PAD = 73,
+ D3DSIO_TEXM3x3TEX = 74,
+ D3DSIO_TEXM3x3DIFF = 75,
+ D3DSIO_TEXM3x3SPEC = 76,
+ D3DSIO_TEXM3x3VSPEC = 77,
+ D3DSIO_EXPP = 78,
+ D3DSIO_LOGP = 79,
+ D3DSIO_CND = 80,
+ D3DSIO_DEF = 81,
+ D3DSIO_TEXREG2RGB = 82,
+ D3DSIO_TEXDP3TEX = 83,
+ D3DSIO_TEXM3x2DEPTH = 84,
+ D3DSIO_TEXDP3 = 85,
+ D3DSIO_TEXM3x3 = 86,
+ D3DSIO_TEXDEPTH = 87,
+ D3DSIO_CMP = 88,
+ D3DSIO_BEM = 89,
+
+ D3DSIO_PHASE = 0xFFFD,
+ D3DSIO_COMMENT = 0xFFFE,
+ D3DSIO_END = 0XFFFF,
+
+ D3DSIO_FORCE_DWORD = 0X7FFFFFFF /** for 32-bit alignment */
+} D3DSHADER_INSTRUCTION_OPCODE_TYPE;
+
+/** for parallelism */
+#define D3DSI_COISSUE 0x40000000
+
+/** destination parameter modifiers (.xyzw) */
+#define D3DSP_WRITEMASK_0 0x00010000 /* .x r */
+#define D3DSP_WRITEMASK_1 0x00020000 /* .y g */
+#define D3DSP_WRITEMASK_2 0x00040000 /* .z b */
+#define D3DSP_WRITEMASK_3 0x00080000 /* .w a */
+#define D3DSP_WRITEMASK_ALL 0x000F0000 /* all */
+
+#define D3DSP_DSTMOD_SHIFT 20
+#define D3DSP_DSTMOD_MASK (0xF << D3DSP_DSTMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {
+ D3DSPDM_NONE = 0 << D3DSP_DSTMOD_SHIFT,
+ D3DSPDM_SATURATE = 1 << D3DSP_DSTMOD_SHIFT,
+ D3DSPDM_FORCE_DWORD = 0X7FFFFFFF
+} D3DSHADER_PARAM_DSTMOD_TYPE;
+
+/** destination param */
+#define D3DSP_DSTSHIFT_SHIFT 24
+#define D3DSP_DSTSHIFT_MASK (0xF << D3DSP_DSTSHIFT_SHIFT)
+
+/** destination/source reg type */
+#define D3DSP_REGTYPE_SHIFT 28
+#define D3DSP_REGTYPE_MASK (0x7 << D3DSP_REGTYPE_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_REGISTER_TYPE {
+ D3DSPR_TEMP = 0 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_INPUT = 1 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_CONST = 2 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_ADDR = 3 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_TEXTURE = 3 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_RASTOUT = 4 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_ATTROUT = 5 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_TEXCRDOUT = 6 << D3DSP_REGTYPE_SHIFT,
+ D3DSPR_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_PARAM_REGISTER_TYPE;
+
+typedef enum _D3DVS_RASTOUT_OFFSETS {
+ D3DSRO_POSITION = 0,
+ D3DSRO_FOG = 1,
+ D3DSRO_POINT_SIZE = 2,
+ D3DSRO_FORCE_DWORD = 0x7FFFFFFF
+} D3DVS_RASTOUT_OFFSETS;
+
+#define D3DVS_ADDRESSMODE_SHIFT 13
+#define D3DVS_ADDRESSMODE_MASK (0x1 << D3DVS_ADDRESSMODE_SHIFT)
+
+typedef enum _D3DVS_ADDRESSMODE_TYPE {
+ D3DVS_ADDRMODE_ABSOLUTE = 0 << D3DVS_ADDRESSMODE_SHIFT,
+ D3DVS_ADDRMODE_RELATIVE = 1 << D3DVS_ADDRESSMODE_SHIFT,
+ D3DVS_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF
+} D3DVS_ADDRESSMODE_TYPE;
+
+#define D3DVS_SWIZZLE_SHIFT 16
+#define D3DVS_SWIZZLE_MASK (0xFF << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DSP_SWIZZLE_SHIFT 16
+#define D3DSP_SWIZZLE_MASK (0xFF << D3DSP_SWIZZLE_SHIFT)
+
+#define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2))
+
+#define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4))
+
+#define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6))
+
+#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)
+
+#define D3DSP_NOSWIZZLE \
+ ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
+
+#define D3DSP_SRCMOD_SHIFT 24
+#define D3DSP_SRCMOD_MASK (0xF << D3DSP_SRCMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {
+ D3DSPSM_NONE = 0 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_NEG = 1 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_BIAS = 2 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_BIASNEG = 3 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_SIGN = 4 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_SIGNNEG = 5 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_COMP = 6 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_X2 = 7 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_X2NEG = 8 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_DZ = 9 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_DW = 10 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_PARAM_SRCMOD_TYPE;
+
+#define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))
+#define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))
+#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)
+#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)
+
+#define D3DSI_COMMENTSIZE_SHIFT 16
+#define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)
+
+#define D3DSHADER_COMMENT(commentSize) \
+ ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)
+
+#define D3DPS_END() 0x0000FFFF
+#define D3DVS_END() 0x0000FFFF
+
+
+/*****************************************************************************
+ * Direct 3D v8 enumerated types
+ */
+typedef enum _D3DBACKBUFFER_TYPE {
+ D3DBACKBUFFER_TYPE_MONO = 0,
+ D3DBACKBUFFER_TYPE_LEFT = 1,
+ D3DBACKBUFFER_TYPE_RIGHT = 2,
+
+ D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} D3DBACKBUFFER_TYPE;
+
+typedef enum _D3DBASISTYPE{
+ D3DBASIS_BEZIER = 0,
+ D3DBASIS_BSPLINE = 1,
+ D3DBASIS_INTERPOLATE = 2,
+
+ D3DBASIS_FORCE_DWORD = 0x7fffffff
+} D3DBASISTYPE;
+
+typedef enum _D3DBLEND {
+ D3DBLEND_ZERO = 1,
+ D3DBLEND_ONE = 2,
+ D3DBLEND_SRCCOLOR = 3,
+ D3DBLEND_INVSRCCOLOR = 4,
+ D3DBLEND_SRCALPHA = 5,
+ D3DBLEND_INVSRCALPHA = 6,
+ D3DBLEND_DESTALPHA = 7,
+ D3DBLEND_INVDESTALPHA = 8,
+ D3DBLEND_DESTCOLOR = 9,
+ D3DBLEND_INVDESTCOLOR = 10,
+ D3DBLEND_SRCALPHASAT = 11,
+ D3DBLEND_BOTHSRCALPHA = 12,
+ D3DBLEND_BOTHINVSRCALPHA = 13,
+
+ D3DBLEND_FORCE_DWORD = 0x7fffffff
+} D3DBLEND;
+
+typedef enum _D3DBLENDOP {
+ D3DBLENDOP_ADD = 1,
+ D3DBLENDOP_SUBTRACT = 2,
+ D3DBLENDOP_REVSUBTRACT = 3,
+ D3DBLENDOP_MIN = 4,
+ D3DBLENDOP_MAX = 5,
+
+ D3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} D3DBLENDOP;
+
+typedef enum _D3DCMPFUNC {
+ D3DCMP_NEVER = 1,
+ D3DCMP_LESS = 2,
+ D3DCMP_EQUAL = 3,
+ D3DCMP_LESSEQUAL = 4,
+ D3DCMP_GREATER = 5,
+ D3DCMP_NOTEQUAL = 6,
+ D3DCMP_GREATEREQUAL = 7,
+ D3DCMP_ALWAYS = 8,
+
+ D3DCMP_FORCE_DWORD = 0x7fffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DCUBEMAP_FACES {
+ D3DCUBEMAP_FACE_POSITIVE_X = 0,
+ D3DCUBEMAP_FACE_NEGATIVE_X = 1,
+ D3DCUBEMAP_FACE_POSITIVE_Y = 2,
+ D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+ D3DCUBEMAP_FACE_POSITIVE_Z = 4,
+ D3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+
+ D3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} D3DCUBEMAP_FACES;
+
+typedef enum _D3DCULL {
+ D3DCULL_NONE = 1,
+ D3DCULL_CW = 2,
+ D3DCULL_CCW = 3,
+
+ D3DCULL_FORCE_DWORD = 0x7fffffff
+} D3DCULL;
+
+typedef enum _D3DDEBUGMONITORTOKENS {
+ D3DDMT_ENABLE = 0,
+ D3DDMT_DISABLE = 1,
+
+ D3DDMT_FORCE_DWORD = 0x7fffffff
+} D3DDEBUGMONITORTOKENS;
+
+typedef enum _D3DDEVTYPE {
+ D3DDEVTYPE_HAL = 1,
+ D3DDEVTYPE_REF = 2,
+ D3DDEVTYPE_SW = 3,
+
+ D3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} D3DDEVTYPE;
+
+typedef enum _D3DFILLMODE {
+ D3DFILL_POINT = 1,
+ D3DFILL_WIREFRAME = 2,
+ D3DFILL_SOLID = 3,
+
+ D3DFILL_FORCE_DWORD = 0x7fffffff
+} D3DFILLMODE;
+
+typedef enum _D3DFOGMODE {
+ D3DFOG_NONE = 0,
+ D3DFOG_EXP = 1,
+ D3DFOG_EXP2 = 2,
+ D3DFOG_LINEAR = 3,
+
+ D3DFOG_FORCE_DWORD = 0x7fffffff
+} D3DFOGMODE;
+
+typedef enum _D3DFORMAT {
+ D3DFMT_UNKNOWN = 0,
+
+ D3DFMT_R8G8B8 = 20,
+ D3DFMT_A8R8G8B8 = 21,
+ D3DFMT_X8R8G8B8 = 22,
+ D3DFMT_R5G6B5 = 23,
+ D3DFMT_X1R5G5B5 = 24,
+ D3DFMT_A1R5G5B5 = 25,
+ D3DFMT_A4R4G4B4 = 26,
+ D3DFMT_R3G3B2 = 27,
+ D3DFMT_A8 = 28,
+ D3DFMT_A8R3G3B2 = 29,
+ D3DFMT_X4R4G4B4 = 30,
+ D3DFMT_A2B10G10R10 = 31,
+ D3DFMT_G16R16 = 34,
+
+ D3DFMT_A8P8 = 40,
+ D3DFMT_P8 = 41,
+
+ D3DFMT_L8 = 50,
+ D3DFMT_A8L8 = 51,
+ D3DFMT_A4L4 = 52,
+
+ D3DFMT_V8U8 = 60,
+ D3DFMT_L6V5U5 = 61,
+ D3DFMT_X8L8V8U8 = 62,
+ D3DFMT_Q8W8V8U8 = 63,
+ D3DFMT_V16U16 = 64,
+ D3DFMT_W11V11U10 = 65,
+ D3DFMT_A2W10V10U10 = 67,
+
+ D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'),
+ D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'),
+ D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
+ D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
+ D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
+ D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
+ D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
+
+ D3DFMT_D16_LOCKABLE = 70,
+ D3DFMT_D32 = 71,
+ D3DFMT_D15S1 = 73,
+ D3DFMT_D24S8 = 75,
+ D3DFMT_D16 = 80,
+ D3DFMT_D24X8 = 77,
+ D3DFMT_D24X4S4 = 79,
+
+ D3DFMT_VERTEXDATA = 100,
+ D3DFMT_INDEX16 = 101,
+ D3DFMT_INDEX32 = 102,
+
+ D3DFMT_FORCE_DWORD = 0xFFFFFFFF
+} D3DFORMAT;
+
+typedef enum _D3DLIGHTTYPE {
+ D3DLIGHT_POINT = 1,
+ D3DLIGHT_SPOT = 2,
+ D3DLIGHT_DIRECTIONAL = 3,
+
+ D3DLIGHT_FORCE_DWORD = 0x7fffffff
+} D3DLIGHTTYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE {
+ D3DMCS_MATERIAL = 0,
+ D3DMCS_COLOR1 = 1,
+ D3DMCS_COLOR2 = 2,
+
+ D3DMCS_FORCE_DWORD = 0x7fffffff
+} D3DMATERIALCOLORSOURCE;
+
+typedef enum _D3DMULTISAMPLE_TYPE {
+ D3DMULTISAMPLE_NONE = 0,
+ D3DMULTISAMPLE_2_SAMPLES = 2,
+ D3DMULTISAMPLE_3_SAMPLES = 3,
+ D3DMULTISAMPLE_4_SAMPLES = 4,
+ D3DMULTISAMPLE_5_SAMPLES = 5,
+ D3DMULTISAMPLE_6_SAMPLES = 6,
+ D3DMULTISAMPLE_7_SAMPLES = 7,
+ D3DMULTISAMPLE_8_SAMPLES = 8,
+ D3DMULTISAMPLE_9_SAMPLES = 9,
+ D3DMULTISAMPLE_10_SAMPLES = 10,
+ D3DMULTISAMPLE_11_SAMPLES = 11,
+ D3DMULTISAMPLE_12_SAMPLES = 12,
+ D3DMULTISAMPLE_13_SAMPLES = 13,
+ D3DMULTISAMPLE_14_SAMPLES = 14,
+ D3DMULTISAMPLE_15_SAMPLES = 15,
+ D3DMULTISAMPLE_16_SAMPLES = 16,
+
+ D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff
+} D3DMULTISAMPLE_TYPE;
+
+typedef enum _D3DORDERTYPE {
+ D3DORDER_LINEAR = 1,
+ D3DORDER_QUADRATIC = 2,
+ D3DORDER_CUBIC = 3,
+ D3DORDER_QUINTIC = 5,
+
+ D3DORDER_FORCE_DWORD = 0x7fffffff
+} D3DORDERTYPE;
+
+typedef enum _D3DPATCHEDGESTYLE {
+ D3DPATCHEDGE_DISCRETE = 0,
+ D3DPATCHEDGE_CONTINUOUS = 1,
+
+ D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
+} D3DPATCHEDGESTYLE;
+
+typedef enum _D3DPOOL {
+ D3DPOOL_DEFAULT = 0,
+ D3DPOOL_MANAGED = 1,
+ D3DPOOL_SYSTEMMEM = 2,
+ D3DPOOL_SCRATCH = 3,
+
+ D3DPOOL_FORCE_DWORD = 0x7fffffff
+} D3DPOOL;
+
+typedef enum _D3DPRIMITIVETYPE {
+ D3DPT_POINTLIST = 1,
+ D3DPT_LINELIST = 2,
+ D3DPT_LINESTRIP = 3,
+ D3DPT_TRIANGLELIST = 4,
+ D3DPT_TRIANGLESTRIP = 5,
+ D3DPT_TRIANGLEFAN = 6,
+
+ D3DPT_FORCE_DWORD = 0x7fffffff
+} D3DPRIMITIVETYPE;
+
+typedef enum _D3DRENDERSTATETYPE {
+ D3DRS_ZENABLE = 7,
+ D3DRS_FILLMODE = 8,
+ D3DRS_SHADEMODE = 9,
+ D3DRS_LINEPATTERN = 10,
+ D3DRS_ZWRITEENABLE = 14,
+ D3DRS_ALPHATESTENABLE = 15,
+ D3DRS_LASTPIXEL = 16,
+ D3DRS_SRCBLEND = 19,
+ D3DRS_DESTBLEND = 20,
+ D3DRS_CULLMODE = 22,
+ D3DRS_ZFUNC = 23,
+ D3DRS_ALPHAREF = 24,
+ D3DRS_ALPHAFUNC = 25,
+ D3DRS_DITHERENABLE = 26,
+ D3DRS_ALPHABLENDENABLE = 27,
+ D3DRS_FOGENABLE = 28,
+ D3DRS_SPECULARENABLE = 29,
+ D3DRS_ZVISIBLE = 30,
+ D3DRS_FOGCOLOR = 34,
+ D3DRS_FOGTABLEMODE = 35,
+ D3DRS_FOGSTART = 36,
+ D3DRS_FOGEND = 37,
+ D3DRS_FOGDENSITY = 38,
+ D3DRS_EDGEANTIALIAS = 40,
+ D3DRS_ZBIAS = 47,
+ D3DRS_RANGEFOGENABLE = 48,
+ D3DRS_STENCILENABLE = 52,
+ D3DRS_STENCILFAIL = 53,
+ D3DRS_STENCILZFAIL = 54,
+ D3DRS_STENCILPASS = 55,
+ D3DRS_STENCILFUNC = 56,
+ D3DRS_STENCILREF = 57,
+ D3DRS_STENCILMASK = 58,
+ D3DRS_STENCILWRITEMASK = 59,
+ D3DRS_TEXTUREFACTOR = 60,
+ D3DRS_WRAP0 = 128,
+ D3DRS_WRAP1 = 129,
+ D3DRS_WRAP2 = 130,
+ D3DRS_WRAP3 = 131,
+ D3DRS_WRAP4 = 132,
+ D3DRS_WRAP5 = 133,
+ D3DRS_WRAP6 = 134,
+ D3DRS_WRAP7 = 135,
+ D3DRS_CLIPPING = 136,
+ D3DRS_LIGHTING = 137,
+ D3DRS_AMBIENT = 139,
+ D3DRS_FOGVERTEXMODE = 140,
+ D3DRS_COLORVERTEX = 141,
+ D3DRS_LOCALVIEWER = 142,
+ D3DRS_NORMALIZENORMALS = 143,
+ D3DRS_DIFFUSEMATERIALSOURCE = 145,
+ D3DRS_SPECULARMATERIALSOURCE = 146,
+ D3DRS_AMBIENTMATERIALSOURCE = 147,
+ D3DRS_EMISSIVEMATERIALSOURCE = 148,
+ D3DRS_VERTEXBLEND = 151,
+ D3DRS_CLIPPLANEENABLE = 152,
+ D3DRS_SOFTWAREVERTEXPROCESSING = 153,
+ D3DRS_POINTSIZE = 154,
+ D3DRS_POINTSIZE_MIN = 155,
+ D3DRS_POINTSPRITEENABLE = 156,
+ D3DRS_POINTSCALEENABLE = 157,
+ D3DRS_POINTSCALE_A = 158,
+ D3DRS_POINTSCALE_B = 159,
+ D3DRS_POINTSCALE_C = 160,
+ D3DRS_MULTISAMPLEANTIALIAS = 161,
+ D3DRS_MULTISAMPLEMASK = 162,
+ D3DRS_PATCHEDGESTYLE = 163,
+ D3DRS_PATCHSEGMENTS = 164,
+ D3DRS_DEBUGMONITORTOKEN = 165,
+ D3DRS_POINTSIZE_MAX = 166,
+ D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+ D3DRS_COLORWRITEENABLE = 168,
+ D3DRS_TWEENFACTOR = 170,
+ D3DRS_BLENDOP = 171,
+ D3DRS_POSITIONORDER = 172,
+ D3DRS_NORMALORDER = 173,
+
+ D3DRS_FORCE_DWORD = 0x7fffffff
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DRESOURCETYPE {
+ D3DRTYPE_SURFACE = 1,
+ D3DRTYPE_VOLUME = 2,
+ D3DRTYPE_TEXTURE = 3,
+ D3DRTYPE_VOLUMETEXTURE = 4,
+ D3DRTYPE_CUBETEXTURE = 5,
+ D3DRTYPE_VERTEXBUFFER = 6,
+ D3DRTYPE_INDEXBUFFER = 7,
+
+ D3DRTYPE_FORCE_DWORD = 0x7fffffff
+} D3DRESOURCETYPE;
+
+typedef enum _D3DSHADEMODE {
+ D3DSHADE_FLAT = 1,
+ D3DSHADE_GOURAUD = 2,
+ D3DSHADE_PHONG = 3,
+
+ D3DSHADE_FORCE_DWORD = 0x7fffffff
+} D3DSHADEMODE;
+
+typedef enum _D3DSTATEBLOCKTYPE {
+ D3DSBT_ALL = 1,
+ D3DSBT_PIXELSTATE = 2,
+ D3DSBT_VERTEXSTATE = 3,
+
+ D3DSBT_FORCE_DWORD = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DSTENCILOP {
+ D3DSTENCILOP_KEEP = 1,
+ D3DSTENCILOP_ZERO = 2,
+ D3DSTENCILOP_REPLACE = 3,
+ D3DSTENCILOP_INCRSAT = 4,
+ D3DSTENCILOP_DECRSAT = 5,
+ D3DSTENCILOP_INVERT = 6,
+ D3DSTENCILOP_INCR = 7,
+ D3DSTENCILOP_DECR = 8,
+
+ D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DSWAPEFFECT {
+ D3DSWAPEFFECT_DISCARD = 1,
+ D3DSWAPEFFECT_FLIP = 2,
+ D3DSWAPEFFECT_COPY = 3,
+ D3DSWAPEFFECT_COPY_VSYNC = 4,
+
+ D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF
+} D3DSWAPEFFECT;
+
+typedef enum _D3DTEXTUREADDRESS {
+ D3DTADDRESS_WRAP = 1,
+ D3DTADDRESS_MIRROR = 2,
+ D3DTADDRESS_CLAMP = 3,
+ D3DTADDRESS_BORDER = 4,
+ D3DTADDRESS_MIRRORONCE = 5,
+
+ D3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum _D3DTEXTUREFILTERTYPE {
+ D3DTEXF_NONE = 0,
+ D3DTEXF_POINT = 1,
+ D3DTEXF_LINEAR = 2,
+ D3DTEXF_ANISOTROPIC = 3,
+ D3DTEXF_FLATCUBIC = 4,
+ D3DTEXF_GAUSSIANCUBIC = 5,
+
+ D3DTEXF_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREFILTERTYPE;
+
+typedef enum _D3DTEXTUREOP {
+ D3DTOP_DISABLE = 1,
+ D3DTOP_SELECTARG1 = 2,
+ D3DTOP_SELECTARG2 = 3,
+ D3DTOP_MODULATE = 4,
+ D3DTOP_MODULATE2X = 5,
+ D3DTOP_MODULATE4X = 6,
+ D3DTOP_ADD = 7,
+ D3DTOP_ADDSIGNED = 8,
+ D3DTOP_ADDSIGNED2X = 9,
+ D3DTOP_SUBTRACT = 10,
+ D3DTOP_ADDSMOOTH = 11,
+ D3DTOP_BLENDDIFFUSEALPHA = 12,
+ D3DTOP_BLENDTEXTUREALPHA = 13,
+ D3DTOP_BLENDFACTORALPHA = 14,
+ D3DTOP_BLENDTEXTUREALPHAPM = 15,
+ D3DTOP_BLENDCURRENTALPHA = 16,
+ D3DTOP_PREMODULATE = 17,
+ D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+ D3DTOP_MODULATECOLOR_ADDALPHA = 19,
+ D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+ D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+ D3DTOP_BUMPENVMAP = 22,
+ D3DTOP_BUMPENVMAPLUMINANCE = 23,
+ D3DTOP_DOTPRODUCT3 = 24,
+ D3DTOP_MULTIPLYADD = 25,
+ D3DTOP_LERP = 26,
+
+ D3DTOP_FORCE_DWORD = 0x7fffffff,
+} D3DTEXTUREOP;
+
+typedef enum _D3DTEXTURESTAGESTATETYPE {
+ D3DTSS_COLOROP = 1,
+ D3DTSS_COLORARG1 = 2,
+ D3DTSS_COLORARG2 = 3,
+ D3DTSS_ALPHAOP = 4,
+ D3DTSS_ALPHAARG1 = 5,
+ D3DTSS_ALPHAARG2 = 6,
+ D3DTSS_BUMPENVMAT00 = 7,
+ D3DTSS_BUMPENVMAT01 = 8,
+ D3DTSS_BUMPENVMAT10 = 9,
+ D3DTSS_BUMPENVMAT11 = 10,
+ D3DTSS_TEXCOORDINDEX = 11,
+ D3DTSS_ADDRESSU = 13,
+ D3DTSS_ADDRESSV = 14,
+ D3DTSS_BORDERCOLOR = 15,
+ D3DTSS_MAGFILTER = 16,
+ D3DTSS_MINFILTER = 17,
+ D3DTSS_MIPFILTER = 18,
+ D3DTSS_MIPMAPLODBIAS = 19,
+ D3DTSS_MAXMIPLEVEL = 20,
+ D3DTSS_MAXANISOTROPY = 21,
+ D3DTSS_BUMPENVLSCALE = 22,
+ D3DTSS_BUMPENVLOFFSET = 23,
+ D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+ D3DTSS_ADDRESSW = 25,
+ D3DTSS_COLORARG0 = 26,
+ D3DTSS_ALPHAARG0 = 27,
+ D3DTSS_RESULTARG = 28,
+
+ D3DTSS_FORCE_DWORD = 0x7fffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+ D3DTTFF_DISABLE = 0,
+ D3DTTFF_COUNT1 = 1,
+ D3DTTFF_COUNT2 = 2,
+ D3DTTFF_COUNT3 = 3,
+ D3DTTFF_COUNT4 = 4,
+ D3DTTFF_PROJECTED = 256,
+
+ D3DTTFF_FORCE_DWORD = 0x7fffffff
+} D3DTEXTURETRANSFORMFLAGS;
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+ D3DTS_VIEW = 2,
+ D3DTS_PROJECTION = 3,
+ D3DTS_TEXTURE0 = 16,
+ D3DTS_TEXTURE1 = 17,
+ D3DTS_TEXTURE2 = 18,
+ D3DTS_TEXTURE3 = 19,
+ D3DTS_TEXTURE4 = 20,
+ D3DTS_TEXTURE5 = 21,
+ D3DTS_TEXTURE6 = 22,
+ D3DTS_TEXTURE7 = 23,
+
+ D3DTS_FORCE_DWORD = 0x7fffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS {
+ D3DVBF_DISABLE = 0,
+ D3DVBF_1WEIGHTS = 1,
+ D3DVBF_2WEIGHTS = 2,
+ D3DVBF_3WEIGHTS = 3,
+ D3DVBF_TWEENING = 255,
+ D3DVBF_0WEIGHTS = 256
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DZBUFFERTYPE {
+ D3DZB_FALSE = 0,
+ D3DZB_TRUE = 1,
+ D3DZB_USEW = 2,
+
+ D3DZB_FORCE_DWORD = 0x7fffffff
+} D3DZBUFFERTYPE;
+
+
+/*****************************************************************************
+ * Direct 3D v8 typedefs
+ */
+typedef DWORD D3DCOLOR;
+
+/*****************************************************************************
+ * Direct 3D v8 structures
+ */
+typedef struct _D3DADAPTER_IDENTIFIER8 {
+ char Driver[MAX_DEVICE_IDENTIFIER_STRING];
+ char Description[MAX_DEVICE_IDENTIFIER_STRING];
+
+ LARGE_INTEGER DriverVersion;
+ DWORD VendorId;
+ DWORD DeviceId;
+ DWORD SubSysId;
+ DWORD Revision;
+
+ GUID DeviceIdentifier;
+
+ DWORD WHQLLevel;
+} D3DADAPTER_IDENTIFIER8;
+
+typedef struct _D3DBOX {
+ UINT Left;
+ UINT Top;
+ UINT Right;
+ UINT Bottom;
+ UINT Front;
+ UINT Back;
+} D3DBOX;
+
+typedef struct _D3DCLIPSTATUS8 {
+ DWORD ClipUnion;
+ DWORD ClipIntersection;
+} D3DCLIPSTATUS8;
+
+typedef struct _D3DCOLORVALUE {
+ float r;
+ float g;
+ float b;
+ float a;
+} D3DCOLORVALUE;
+
+typedef struct _D3DDEVICE_CREATION_PARAMETERS {
+ UINT AdapterOrdinal;
+ D3DDEVTYPE DeviceType;
+ HWND hFocusWindow;
+ DWORD BehaviorFlags;
+} D3DDEVICE_CREATION_PARAMETERS;
+
+typedef struct _D3DDISPLAYMODE {
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ D3DFORMAT Format;
+} D3DDISPLAYMODE;
+
+typedef struct _D3DGAMMARAMP {
+ WORD red [256];
+ WORD green[256];
+ WORD blue [256];
+} D3DGAMMARAMP;
+
+typedef struct _D3DINDEXBUFFER_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+} D3DINDEXBUFFER_DESC;
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+ float x;
+ float y;
+ float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+typedef struct _D3DLIGHT8 {
+ D3DLIGHTTYPE Type;
+ D3DCOLORVALUE Diffuse;
+ D3DCOLORVALUE Specular;
+ D3DCOLORVALUE Ambient;
+ D3DVECTOR Position;
+ D3DVECTOR Direction;
+ float Range;
+ float Falloff;
+ float Attenuation0;
+ float Attenuation1;
+ float Attenuation2;
+ float Theta;
+ float Phi;
+} D3DLIGHT8;
+
+typedef struct _D3DLINEPATTERN {
+ WORD wRepeatFactor;
+ WORD wLinePattern;
+} D3DLINEPATTERN;
+
+typedef struct _D3DLOCKED_BOX {
+ INT RowPitch;
+ INT SlicePitch;
+ void* pBits;
+} D3DLOCKED_BOX;
+
+typedef struct _D3DLOCKED_RECT {
+ INT Pitch;
+ void* pBits;
+} D3DLOCKED_RECT;
+
+typedef struct _D3DMATERIAL8 {
+ D3DCOLORVALUE Diffuse;
+ D3DCOLORVALUE Ambient;
+ D3DCOLORVALUE Specular;
+ D3DCOLORVALUE Emissive;
+ float Power;
+} D3DMATERIAL8;
+
+typedef struct _D3DMATRIX {
+ union {
+ struct {
+ float _11, _12, _13, _14;
+ float _21, _22, _23, _24;
+ float _31, _32, _33, _34;
+ float _41, _42, _43, _44;
+ } DUMMYSTRUCTNAME;
+ float m[4][4];
+ } DUMMYUNIONNAME;
+} D3DMATRIX;
+
+typedef struct _D3DPRESENT_PARAMETERS_ {
+ UINT BackBufferWidth;
+ UINT BackBufferHeight;
+ D3DFORMAT BackBufferFormat;
+ UINT BackBufferCount;
+
+ D3DMULTISAMPLE_TYPE MultiSampleType;
+
+ D3DSWAPEFFECT SwapEffect;
+ HWND hDeviceWindow;
+ BOOL Windowed;
+ BOOL EnableAutoDepthStencil;
+ D3DFORMAT AutoDepthStencilFormat;
+ DWORD Flags;
+
+ UINT FullScreen_RefreshRateInHz;
+ UINT FullScreen_PresentationInterval;
+
+} D3DPRESENT_PARAMETERS;
+
+#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001
+
+typedef struct _D3DRANGE {
+ UINT Offset;
+ UINT Size;
+} D3DRANGE;
+
+typedef struct _D3DRASTER_STATUS {
+ BOOL InVBlank;
+ UINT ScanLine;
+} D3DRASTER_STATUS;
+
+typedef struct _D3DRECT {
+ LONG x1;
+ LONG y1;
+ LONG x2;
+ LONG y2;
+} D3DRECT;
+
+typedef struct _D3DRECTPATCH_INFO {
+ UINT StartVertexOffsetWidth;
+ UINT StartVertexOffsetHeight;
+ UINT Width;
+ UINT Height;
+ UINT Stride;
+ D3DBASISTYPE Basis;
+ D3DORDERTYPE Order;
+} D3DRECTPATCH_INFO;
+
+typedef struct _D3DSURFACE_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+ D3DMULTISAMPLE_TYPE MultiSampleType;
+ UINT Width;
+ UINT Height;
+} D3DSURFACE_DESC;
+
+typedef struct _D3DTRIPATCH_INFO {
+ UINT StartVertexOffset;
+ UINT NumVertices;
+ D3DBASISTYPE Basis;
+ D3DORDERTYPE Order;
+} D3DTRIPATCH_INFO;
+
+typedef struct _D3DVERTEXBUFFER_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+ DWORD FVF;
+} D3DVERTEXBUFFER_DESC;
+
+typedef struct _D3DVIEWPORT8 {
+ DWORD X;
+ DWORD Y;
+ DWORD Width;
+ DWORD Height;
+ float MinZ;
+ float MaxZ;
+} D3DVIEWPORT8;
+
+typedef struct _D3DVOLUME_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+} D3DVOLUME_DESC;
+
+#endif /* __WINE_D3D8TYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h
new file mode 100644
index 00000000..4893a0fa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9.h
@@ -0,0 +1,2134 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ * Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _D3D9_H_
+#define _D3D9_H_
+
+#ifndef DIRECT3D_VERSION
+#define DIRECT3D_VERSION 0x0900
+#endif
+
+#include <stdlib.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <windows.h>
+#include <d3d9types.h>
+#include <d3d9caps.h>
+
+/*****************************************************************************
+ * Behavior Flags for IDirect3D8::CreateDevice
+ */
+#define D3DCREATE_FPU_PRESERVE __MSABI_LONG(0x00000002)
+#define D3DCREATE_MULTITHREADED __MSABI_LONG(0x00000004)
+#define D3DCREATE_PUREDEVICE __MSABI_LONG(0x00000010)
+#define D3DCREATE_SOFTWARE_VERTEXPROCESSING __MSABI_LONG(0x00000020)
+#define D3DCREATE_HARDWARE_VERTEXPROCESSING __MSABI_LONG(0x00000040)
+#define D3DCREATE_MIXED_VERTEXPROCESSING __MSABI_LONG(0x00000080)
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT __MSABI_LONG(0x00000100)
+#define D3DCREATE_ADAPTERGROUP_DEVICE __MSABI_LONG(0x00000200)
+#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX __MSABI_LONG(0x00000400)
+#define D3DCREATE_NOWINDOWCHANGES __MSABI_LONG(0x00000800)
+#define D3DCREATE_DISABLE_PSGP_THREADING __MSABI_LONG(0x00002000)
+#define D3DCREATE_ENABLE_PRESENTSTATS __MSABI_LONG(0x00004000)
+#define D3DCREATE_DISABLE_PRINTSCREEN __MSABI_LONG(0x00008000)
+#define D3DCREATE_SCREENSAVER __MSABI_LONG(0x10000000)
+
+/*****************************************************************************
+ * Flags for SetPrivateData
+ */
+#define D3DSPD_IUNKNOWN __MSABI_LONG(0x00000001)
+
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define D3D_SDK_VERSION 32
+#define D3DADAPTER_DEFAULT 0
+#define D3DENUM_NO_WHQL_LEVEL __MSABI_LONG(0x00000002)
+#define D3DPRESENT_BACK_BUFFERS_MAX __MSABI_LONG(3)
+#define D3DSGR_NO_CALIBRATION __MSABI_LONG(0x00000000)
+#define D3DSGR_CALIBRATE __MSABI_LONG(0x00000001)
+
+#define _FACD3D 0x876
+#define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code )
+#define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code )
+
+/*****************************************************************************
+ * Direct3D Errors
+ */
+#define D3D_OK S_OK
+#define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072)
+#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073)
+#define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074)
+#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075)
+#define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076)
+#define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077)
+#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078)
+#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079)
+#define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081)
+#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082)
+#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086)
+#define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087)
+#define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150)
+#define D3DERR_MOREDATA MAKE_D3DHRESULT(2151)
+#define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152)
+#define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153)
+#define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154)
+#define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380)
+#define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155)
+#define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156)
+#define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157)
+#define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540)
+#define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159)
+
+#define D3DERR_DEVICEREMOVED MAKE_D3DHRESULT(2160)
+#define D3DERR_DEVICEHUNG MAKE_D3DHRESULT(2164)
+#define S_NOT_RESIDENT MAKE_D3DSTATUS(2165)
+#define S_RESIDENT_IN_SHARED_MEMORY MAKE_D3DSTATUS(2166)
+#define S_PRESENT_MODE_CHANGED MAKE_D3DSTATUS(2167)
+#define S_PRESENT_OCCLUDED MAKE_D3DSTATUS(2168)
+#define D3DERR_UNSUPPORTEDOVERLAY MAKE_D3DHRESULT(2171)
+#define D3DERR_UNSUPPORTEDOVERLAYFORMAT MAKE_D3DHRESULT(2172)
+#define D3DERR_CANNOTPROTECTCONTENT MAKE_D3DHRESULT(2173)
+#define D3DERR_UNSUPPORTEDCRYPTO MAKE_D3DHRESULT(2174)
+#define D3DERR_PRESENT_STATISTICS_DISJOINT MAKE_D3DHRESULT(2180)
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IDirect3D9, 0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);
+typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;
+
+DEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);
+typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;
+
+DEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);
+typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;
+
+DEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);
+typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;
+
+DEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);
+typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;
+
+DEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);
+typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);
+typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);
+typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;
+
+DEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);
+typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;
+
+DEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);
+typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;
+
+DEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);
+typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;
+
+DEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);
+typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);
+typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);
+typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);
+typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;
+
+DEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);
+typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;
+
+DEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);
+typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;
+
+DEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);
+typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;
+
+DEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);
+typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;
+
+DEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);
+typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
+
+/*****************************************************************************
+ * IDirect3D9 interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirect3D9
+DECLARE_INTERFACE_(IDirect3D9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D9 methods ***/
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+ STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+ STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+ STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+ STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9_AddRef(p) (p)->AddRef()
+#define IDirect3D9_Release(p) (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3D9Ex interface
+ */
+#define INTERFACE IDirect3D9Ex
+DECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3D9 methods ***/
+
+ /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that
+ * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's
+ * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9.
+ * This is probably because even in MS header IDirect3D9Ex inherits from IDirect3D9, which makes the
+ * C++ interface compatible, and nobody uses the C interface in Windows world.
+ */
+ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
+
+ STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
+ STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
+ STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;
+ STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;
+ STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;
+ STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;
+ STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;
+ STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;
+ STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
+ STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
+ /*** IDirect3D9Ex methods ***/
+ STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter) PURE;
+ STDMETHOD(EnumAdapterModesEx)(THIS_ UINT adapter_idx, const D3DDISPLAYMODEFILTER *filter,
+ UINT mode_idx, D3DDISPLAYMODEEX *mode) PURE;
+ STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);
+ STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;
+ STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)
+#define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)
+/*** IDirect3D9Ex methods ***/
+#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)
+#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)
+#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)
+#define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3D9Ex_AddRef(p) (p)->AddRef()
+#define IDirect3D9Ex_Release(p) (p)->Release()
+/*** IDirect3D9 methods ***/
+#define IDirect3D9Ex_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)
+#define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount()
+#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
+#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)
+#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)
+#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)
+#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)
+#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)
+#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)
+#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)
+#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)
+#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolume9 interface
+ */
+#define INTERFACE IDirect3DVolume9
+DECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVolume9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;
+ STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+ STDMETHOD(UnlockBox)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)
+#define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolume9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolume9_Release(p) (p)->Release()
+/*** IDirect3DVolume9 methods ***/
+#define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c)
+#define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9 interface
+ */
+#define INTERFACE IDirect3DSwapChain9
+DECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSwapChain9 methods ***/
+ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+ const RGNDATA *dirty_region, DWORD flags) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *pDestSurface) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9 **ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *pRasterStatus) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *pMode) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **ppDevice) PURE;
+ STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9_AddRef(p) (p)->AddRef()
+#define IDirect3DSwapChain9_Release(p) (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DSwapChain9Ex interface
+ */
+#define INTERFACE IDirect3DSwapChain9Ex
+DECLARE_INTERFACE_(IDirect3DSwapChain9Ex,IDirect3DSwapChain9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DSwapChain9 methods ***/
+ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override,
+ const RGNDATA *dirty_region, DWORD flags) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9 *pDestSurface) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9 **ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS *pRasterStatus) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE *pMode) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **ppDevice) PURE;
+ STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters) PURE;
+ /*** IDirect3DSwapChain9Ex methods ***/
+ STDMETHOD(GetLastPresentCount)(THIS_ UINT *pLastPresentCount) PURE;
+ STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS *pPresentationStatistics) PURE;
+ STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSwapChain9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSwapChain9Ex_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e)
+#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a)
+#define IDirect3DSwapChain9EX_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)
+#define IDirect3DSwapChain9EX_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)
+#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)
+/*** IDirect3DSwapChain9Ex methods ***/
+#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->lpVtbl->GetLastPresentCount(p,a)
+#define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->lpVtbl->GetPresentStats(p,a)
+#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->lpVtbl->GetDisplayModeEx(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSwapChain9Ex_AddRef(p) (p)->AddRef()
+#define IDirect3DSwapChain9Ex_Release(p) (p)->Release()
+/*** IDirect3DSwapChain9 methods ***/
+#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e)
+#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a)
+#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)
+#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->GetRasterStatus(a)
+#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->GetPresentParameters(a)
+/*** IDirect3DSwapChain9Ex methods ***/
+#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->GetLastPresentCount(a)
+#define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->GetPresentStats(a)
+#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->GetDisplayModeEx(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DResource9 interface
+ */
+#define INTERFACE IDirect3DResource9
+DECLARE_INTERFACE_(IDirect3DResource9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DResource9_AddRef(p) (p)->AddRef()
+#define IDirect3DResource9_Release(p) (p)->Release()
+/*** IDirect3DResource9 methods ***/
+#define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DResource9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DResource9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DResource9_GetType(p) (p)->GetType()
+#endif
+
+/*****************************************************************************
+ * IDirect3DSurface9 interface
+ */
+#define INTERFACE IDirect3DSurface9
+DECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DSurface9 methods ***/
+ STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+ STDMETHOD(UnlockRect)(THIS) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)
+#define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)
+#define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)
+#define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DSurface9_AddRef(p) (p)->AddRef()
+#define IDirect3DSurface9_Release(p) (p)->Release()
+/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/
+#define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DSurface9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DSurface9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DSurface9_GetType(p) (p)->GetType()
+/*** IDirect3DSurface9 methods ***/
+#define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b)
+#define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a)
+#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c)
+#define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect()
+#define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a)
+#define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexBuffer9 interface
+ */
+#define INTERFACE IDirect3DVertexBuffer9
+DECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DVertexBuffer9 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexBuffer9_Release(p) (p)->Release()
+/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVertexBuffer9_GetType(p) (p)->GetType()
+/*** IDirect3DVertexBuffer9 methods ***/
+#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock()
+#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DIndexBuffer9 interface
+ */
+#define INTERFACE IDirect3DIndexBuffer9
+DECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DIndexBuffer9 methods ***/
+ STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)
+#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef()
+#define IDirect3DIndexBuffer9_Release(p) (p)->Release()
+/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/
+#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DIndexBuffer9_GetType(p) (p)->GetType()
+/*** IDirect3DIndexBuffer9 methods ***/
+#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock()
+#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DBaseTexture9 interface
+ */
+#define INTERFACE IDirect3DBaseTexture9
+DECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DBaseTexture9_Release(p) (p)->Release()
+/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DBaseTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DBaseTexture9 methods ***/
+#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+#endif
+
+/*****************************************************************************
+ * IDirect3DCubeTexture9 interface
+ */
+#define INTERFACE IDirect3DCubeTexture9
+DECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+ /*** IDirect3DCubeTexture9 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;
+ STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;
+ STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES face, UINT level,
+ D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES face, const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DCubeTexture9_Release(p) (p)->Release()
+/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DCubeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DCubeTexture9 methods ***/
+#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)
+#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)
+#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b)
+#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DTexture9 interface
+ */
+#define INTERFACE IDirect3DTexture9
+DECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+ /*** IDirect3DTexture9 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;
+ STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;
+ STDMETHOD(LockRect)(THIS_ UINT level, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) PURE;
+ STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyRect)(THIS_ const RECT *dirty_rect) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)
+#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DTexture9_Release(p) (p)->Release()
+/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DTexture9 methods ***/
+#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)
+#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)
+#define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a)
+#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVolumeTexture9 interface
+ */
+#define INTERFACE IDirect3DVolumeTexture9
+DECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DResource9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID guid, const void *data, DWORD data_size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;
+ STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;
+ STDMETHOD_(DWORD, GetPriority)(THIS) PURE;
+ STDMETHOD_(void, PreLoad)(THIS) PURE;
+ STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;
+ /*** IDirect3DBaseTexture9 methods ***/
+ STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;
+ STDMETHOD_(DWORD, GetLOD)(THIS) PURE;
+ STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;
+ STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;
+ STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;
+ STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;
+ /*** IDirect3DVolumeTexture9 methods ***/
+ STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;
+ STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;
+ STDMETHOD(LockBox)(THIS_ UINT level, D3DLOCKED_BOX *locked_box, const D3DBOX *box, DWORD flags) PURE;
+ STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;
+ STDMETHOD(AddDirtyBox)(THIS_ const D3DBOX *dirty_box) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)
+#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()
+#define IDirect3DVolumeTexture9_Release(p) (p)->Release()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/
+#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()
+#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()
+#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()
+/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/
+#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()
+#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()
+#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)
+#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()
+#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()
+/*** IDirect3DVolumeTexture9 methods ***/
+#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)
+#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)
+#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)
+#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)
+#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexDeclaration9 interface
+ */
+#define INTERFACE IDirect3DVertexDeclaration9
+DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVertexDeclaration9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexDeclaration9_Release(p) (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DVertexShader9 interface
+ */
+#define INTERFACE IDirect3DVertexShader9
+DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DVertexShader9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DVertexShader9_AddRef(p) (p)->AddRef()
+#define IDirect3DVertexShader9_Release(p) (p)->Release()
+/*** IDirect3DVertexShader9 methods ***/
+#define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DPixelShader9 interface
+ */
+#define INTERFACE IDirect3DPixelShader9
+DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DPixelShader9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DPixelShader9_AddRef(p) (p)->AddRef()
+#define IDirect3DPixelShader9_Release(p) (p)->Release()
+/*** IDirect3DPixelShader9 methods ***/
+#define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DStateBlock9 interface
+ */
+#define INTERFACE IDirect3DStateBlock9
+DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DStateBlock9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD(Capture)(THIS) PURE;
+ STDMETHOD(Apply)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p)
+#define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DStateBlock9_AddRef(p) (p)->AddRef()
+#define IDirect3DStateBlock9_Release(p) (p)->Release()
+/*** IDirect3DStateBlock9 methods ***/
+#define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DStateBlock9_Capture(p) (p)->Capture()
+#define IDirect3DStateBlock9_Apply(p) (p)->Apply()
+#endif
+
+/*****************************************************************************
+ * IDirect3DQuery9 interface
+ */
+#define INTERFACE IDirect3DQuery9
+DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DQuery9 methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;
+ STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;
+ STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;
+ STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;
+ STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)
+#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DQuery9_AddRef(p) (p)->AddRef()
+#define IDirect3DQuery9_Release(p) (p)->Release()
+/*** IDirect3DQuery9 ***/
+#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DQuery9_GetType(p) (p)->GetType()
+#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()
+#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)
+#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DDevice9 interface
+ */
+#define INTERFACE IDirect3DDevice9
+DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice9 methods ***/
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(EvictManagedResources)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+ STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+ STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect,
+ HWND dst_window_override, const RGNDATA *dirty_region) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+ STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+ STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE;
+ STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+ IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+ STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+ IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE;
+ STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR color) PURE;
+ STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+ STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags,
+ D3DCOLOR color, float z, DWORD stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+ STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+ STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE;
+ STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+ STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+ STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+ STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+ STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type,
+ UINT primitive_count, const void *data, UINT stride) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count,
+ UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+ STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements,
+ IDirect3DVertexDeclaration9 **declaration) PURE;
+ STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+ STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+ STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_code, IDirect3DVertexShader9 **shader) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+ STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+ STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+ STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+ STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+ STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+ STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+ STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+ STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+ STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+ STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+ STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice9_Release(p) (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources()
+#define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice9_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a)
+#define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a)
+#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a)
+#define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode()
+#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a)
+#define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a)
+#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a)
+#define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a)
+#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a)
+#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirect3DDevice9Ex interface
+ */
+#define INTERFACE IDirect3DDevice9Ex
+DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DDevice9 methods ***/
+ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+ STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;
+ STDMETHOD(EvictManagedResources)(THIS) PURE;
+ STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;
+ STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;
+ STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;
+ STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;
+ STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;
+ STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
+ STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;
+ STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;
+ STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;
+ STDMETHOD(Present)(THIS_ const RECT *src_rect, const RECT *dst_rect,
+ HWND dst_window_override, const RGNDATA *dirty_region) PURE;
+ STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;
+ STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;
+ STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;
+ STDMETHOD_(void, SetGammaRamp)(THIS_ UINT swapchain_idx, DWORD flags, const D3DGAMMARAMP *ramp) PURE;
+ STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;
+ STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+ IDirect3DSurface9 *dst_surface, const POINT *dst_point) PURE;
+ STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;
+ STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;
+ STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9 *src_surface, const RECT *src_rect,
+ IDirect3DSurface9 *dst_surface, const RECT *dst_rect, D3DTEXTUREFILTERTYPE filter) PURE;
+ STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9 *surface, const RECT *rect, D3DCOLOR color) PURE;
+ STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;
+ STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;
+ STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;
+ STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;
+ STDMETHOD(BeginScene)(THIS) PURE;
+ STDMETHOD(EndScene)(THIS) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD rect_count, const D3DRECT *rects, DWORD flags,
+ D3DCOLOR color, float z, DWORD stencil) PURE;
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;
+ STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(SetViewport)(THIS_ const D3DVIEWPORT9 *viewport) PURE;
+ STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;
+ STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;
+ STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;
+ STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
+ STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;
+ STDMETHOD(SetClipPlane)(THIS_ DWORD index, const float *plane) PURE;
+ STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
+ STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;
+ STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(BeginStateBlock)(THIS) PURE;
+ STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;
+ STDMETHOD(SetClipStatus)(THIS_ const D3DCLIPSTATUS9 *clip_status) PURE;
+ STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;
+ STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;
+ STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;
+ STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
+ STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;
+ STDMETHOD(SetPaletteEntries)(THIS_ UINT palette_idx, const PALETTEENTRY *entries) PURE;
+ STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;
+ STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;
+ STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;
+ STDMETHOD(SetScissorRect)(THIS_ const RECT *rect) PURE;
+ STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;
+ STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;
+ STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;
+ STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;
+ STDMETHOD_(float, GetNPatchMode)(THIS) PURE;
+ STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;
+ STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;
+ STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type,
+ UINT primitive_count, const void *data, UINT stride) PURE;
+ STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count,
+ UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *data, UINT stride) PURE;
+ STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;
+ STDMETHOD(CreateVertexDeclaration)(THIS_ const D3DVERTEXELEMENT9 *elements,
+ IDirect3DVertexDeclaration9 **declaration) PURE;
+ STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;
+ STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+ STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;
+ STDMETHOD(CreateVertexShader)(THIS_ const DWORD *byte_core, IDirect3DVertexShader9 **shader) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;
+ STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+ STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+ STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+ STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;
+ STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;
+ STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;
+ STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;
+ STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;
+ STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;
+ STDMETHOD(CreatePixelShader)(THIS_ const DWORD *byte_code, IDirect3DPixelShader9 **shader) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;
+ STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT reg_idx, const float *data, UINT count) PURE;
+ STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;
+ STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT reg_idx, const int *data, UINT count) PURE;
+ STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;
+ STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT reg_idx, const BOOL *data, UINT count) PURE;
+ STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;
+ STDMETHOD(DrawRectPatch)(THIS_ UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) PURE;
+ STDMETHOD(DrawTriPatch)(THIS_ UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) PURE;
+ STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
+ STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;
+ /* IDirect3DDevice9Ex methods */
+ STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;
+ STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,
+ IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,
+ D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;
+ STDMETHOD(PresentEx)(THIS_ const RECT *src_rect, const RECT *dst_rect,
+ HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) PURE;
+ STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE;
+ STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;
+ STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;
+ STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;
+ STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;
+ STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE;
+ STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;
+ STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+ STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;
+ STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,
+ D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,
+ IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;
+ STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;
+ STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)
+#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)
+#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)
+#define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)
+#define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p)
+#define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p)
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)
+#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)
+#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)
+#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)
+#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)
+#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef()
+#define IDirect3DDevice9Ex_Release(p) (p)->Release()
+/*** IDirect3DDevice9 methods ***/
+#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()
+#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources()
+#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a)
+#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)
+#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)
+#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a)
+#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)
+#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)
+#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a)
+#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)
+#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()
+#define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a)
+#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d)
+#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)
+#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)
+#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)
+#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)
+#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)
+#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)
+#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)
+#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)
+#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)
+#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)
+#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)
+#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)
+#define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene()
+#define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene()
+#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b)
+#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)
+#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a)
+#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a)
+#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b)
+#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b)
+#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)
+#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)
+#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)
+#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b)
+#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b)
+#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)
+#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock()
+#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a)
+#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a)
+#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a)
+#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b)
+#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b)
+#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)
+#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)
+#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a)
+#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)
+#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)
+#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a)
+#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a)
+#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)
+#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()
+#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a)
+#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode()
+#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)
+#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)
+#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)
+#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)
+#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a)
+#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a)
+#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)
+#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a)
+#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)
+#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)
+#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a)
+#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a)
+#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)
+#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a)
+#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)
+#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)
+#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)
+#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)
+#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a)
+#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b)
+/* IDirect3DDevice9Ex */
+#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d)
+#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h)
+#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e)
+#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a)
+#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a)
+#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b)
+#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a)
+#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a)
+#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)
+#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)
+#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b)
+#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+int WINAPI D3DPERF_BeginEvent(D3DCOLOR color, const WCHAR *name);
+int WINAPI D3DPERF_EndEvent(void);
+DWORD WINAPI D3DPERF_GetStatus(void);
+BOOL WINAPI D3DPERF_QueryRepeatFrame(void);
+void WINAPI D3DPERF_SetMarker(D3DCOLOR color, const WCHAR *name);
+void WINAPI D3DPERF_SetOptions(DWORD options);
+void WINAPI D3DPERF_SetRegion(D3DCOLOR color, const WCHAR *name);
+
+/* Define the main entrypoint as well */
+IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+
+#endif /* _D3D9_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h
new file mode 100644
index 00000000..84b2fa96
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9caps.h
@@ -0,0 +1,404 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ * Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9CAPS_H
+#define __WINE_D3D9CAPS_H
+
+/*
+ * Definitions
+ */
+#define D3DCAPS_READ_SCANLINE 0x20000
+
+#define D3DCURSORCAPS_COLOR 1
+#define D3DCURSORCAPS_LOWRES 2
+
+
+#define D3DDEVCAPS2_STREAMOFFSET __MSABI_LONG(0x00000001)
+#define D3DDEVCAPS2_DMAPNPATCH __MSABI_LONG(0x00000002)
+#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH __MSABI_LONG(0x00000004)
+#define D3DDEVCAPS2_ADAPTIVETESSNPATCH __MSABI_LONG(0x00000008)
+#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES __MSABI_LONG(0x00000010)
+#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH __MSABI_LONG(0x00000020)
+#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET __MSABI_LONG(0x00000040)
+
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x0000010
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x0000020
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x0000040
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x0000080
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x0000100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x0000200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x0000400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x0000800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x0001000
+#define D3DDEVCAPS_DRAWPRIMITIVES2 0x0002000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x0004000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x0008000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x0010000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x0020000
+#define D3DDEVCAPS_HWRASTERIZATION 0x0080000
+#define D3DDEVCAPS_PUREDEVICE 0x0100000
+#define D3DDEVCAPS_QUINTICRTPATCHES 0x0200000
+#define D3DDEVCAPS_RTPATCHES 0x0400000
+#define D3DDEVCAPS_RTPATCHHANDLEZERO 0x0800000
+#define D3DDEVCAPS_NPATCHES 0x1000000
+
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x00FFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x080000
+#define D3DFVFCAPS_PSIZE 0x100000
+
+#define D3DLINECAPS_TEXTURE 0x01
+#define D3DLINECAPS_ZTEST 0x02
+#define D3DLINECAPS_BLEND 0x04
+#define D3DLINECAPS_ALPHACMP 0x08
+#define D3DLINECAPS_FOG 0x10
+#define D3DLINECAPS_ANTIALIAS 0x20
+
+#define D3DPBLENDCAPS_ZERO 0x00000001
+#define D3DPBLENDCAPS_ONE 0x00000002
+#define D3DPBLENDCAPS_SRCCOLOR 0x00000004
+#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008
+#define D3DPBLENDCAPS_SRCALPHA 0x00000010
+#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020
+#define D3DPBLENDCAPS_DESTALPHA 0x00000040
+#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080
+#define D3DPBLENDCAPS_DESTCOLOR 0x00000100
+#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200
+#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400
+#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000
+#define D3DPBLENDCAPS_BLENDFACTOR 0x00002000
+
+#define D3DPCMPCAPS_NEVER 0x01
+#define D3DPCMPCAPS_LESS 0x02
+#define D3DPCMPCAPS_EQUAL 0x04
+#define D3DPCMPCAPS_LESSEQUAL 0x08
+#define D3DPCMPCAPS_GREATER 0x10
+#define D3DPCMPCAPS_NOTEQUAL 0x20
+#define D3DPCMPCAPS_GREATEREQUAL 0x40
+#define D3DPCMPCAPS_ALWAYS 0x80
+
+#define D3DPMISCCAPS_MASKZ __MSABI_LONG(0x00000002)
+#define D3DPMISCCAPS_LINEPATTERNREP __MSABI_LONG(0x00000004)
+#define D3DPMISCCAPS_CULLNONE __MSABI_LONG(0x00000010)
+#define D3DPMISCCAPS_CULLCW __MSABI_LONG(0x00000020)
+#define D3DPMISCCAPS_CULLCCW __MSABI_LONG(0x00000040)
+#define D3DPMISCCAPS_COLORWRITEENABLE __MSABI_LONG(0x00000080)
+#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS __MSABI_LONG(0x00000100)
+#define D3DPMISCCAPS_CLIPTLVERTS __MSABI_LONG(0x00000200)
+#define D3DPMISCCAPS_TSSARGTEMP __MSABI_LONG(0x00000400)
+#define D3DPMISCCAPS_BLENDOP __MSABI_LONG(0x00000800)
+#define D3DPMISCCAPS_NULLREFERENCE __MSABI_LONG(0x00001000)
+#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS __MSABI_LONG(0x00004000)
+#define D3DPMISCCAPS_PERSTAGECONSTANT __MSABI_LONG(0x00008000)
+#define D3DPMISCCAPS_FOGANDSPECULARALPHA __MSABI_LONG(0x00010000)
+#define D3DPMISCCAPS_SEPARATEALPHABLEND __MSABI_LONG(0x00020000)
+#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS __MSABI_LONG(0x00040000)
+#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING __MSABI_LONG(0x00080000)
+#define D3DPMISCCAPS_FOGVERTEXCLAMPED __MSABI_LONG(0x00100000)
+
+
+#define D3DPRASTERCAPS_DITHER __MSABI_LONG(0x00000001)
+#define D3DPRASTERCAPS_PAT __MSABI_LONG(0x00000008)
+#define D3DPRASTERCAPS_ZTEST __MSABI_LONG(0x00000010)
+#define D3DPRASTERCAPS_FOGVERTEX __MSABI_LONG(0x00000080)
+#define D3DPRASTERCAPS_FOGTABLE __MSABI_LONG(0x00000100)
+#define D3DPRASTERCAPS_ANTIALIASEDGES __MSABI_LONG(0x00001000)
+#define D3DPRASTERCAPS_MIPMAPLODBIAS __MSABI_LONG(0x00002000)
+#define D3DPRASTERCAPS_ZBIAS __MSABI_LONG(0x00004000)
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR __MSABI_LONG(0x00008000)
+#define D3DPRASTERCAPS_FOGRANGE __MSABI_LONG(0x00010000)
+#define D3DPRASTERCAPS_ANISOTROPY __MSABI_LONG(0x00020000)
+#define D3DPRASTERCAPS_WBUFFER __MSABI_LONG(0x00040000)
+#define D3DPRASTERCAPS_WFOG __MSABI_LONG(0x00100000)
+#define D3DPRASTERCAPS_ZFOG __MSABI_LONG(0x00200000)
+#define D3DPRASTERCAPS_COLORPERSPECTIVE __MSABI_LONG(0x00400000)
+#define D3DPRASTERCAPS_SCISSORTEST __MSABI_LONG(0x01000000)
+#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS __MSABI_LONG(0x02000000)
+#define D3DPRASTERCAPS_DEPTHBIAS __MSABI_LONG(0x04000000)
+#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE __MSABI_LONG(0x08000000)
+
+#define D3DPRESENT_INTERVAL_DEFAULT 0x00000000
+#define D3DPRESENT_INTERVAL_ONE 0x00000001
+#define D3DPRESENT_INTERVAL_TWO 0x00000002
+#define D3DPRESENT_INTERVAL_THREE 0x00000004
+#define D3DPRESENT_INTERVAL_FOUR 0x00000008
+#define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000
+
+#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00008
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00200
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x04000
+#define D3DPSHADECAPS_FOGGOURAUD 0x80000
+
+#define D3DPTADDRESSCAPS_WRAP 0x01
+#define D3DPTADDRESSCAPS_MIRROR 0x02
+#define D3DPTADDRESSCAPS_CLAMP 0x04
+#define D3DPTADDRESSCAPS_BORDER 0x08
+#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x10
+#define D3DPTADDRESSCAPS_MIRRORONCE 0x20
+
+#define D3DPTEXTURECAPS_PERSPECTIVE __MSABI_LONG(0x00000001)
+#define D3DPTEXTURECAPS_POW2 __MSABI_LONG(0x00000002)
+#define D3DPTEXTURECAPS_ALPHA __MSABI_LONG(0x00000004)
+#define D3DPTEXTURECAPS_SQUAREONLY __MSABI_LONG(0x00000020)
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE __MSABI_LONG(0x00000040)
+#define D3DPTEXTURECAPS_ALPHAPALETTE __MSABI_LONG(0x00000080)
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL __MSABI_LONG(0x00000100)
+#define D3DPTEXTURECAPS_PROJECTED __MSABI_LONG(0x00000400)
+#define D3DPTEXTURECAPS_CUBEMAP __MSABI_LONG(0x00000800)
+#define D3DPTEXTURECAPS_VOLUMEMAP __MSABI_LONG(0x00002000)
+#define D3DPTEXTURECAPS_MIPMAP __MSABI_LONG(0x00004000)
+#define D3DPTEXTURECAPS_MIPVOLUMEMAP __MSABI_LONG(0x00008000)
+#define D3DPTEXTURECAPS_MIPCUBEMAP __MSABI_LONG(0x00010000)
+#define D3DPTEXTURECAPS_CUBEMAP_POW2 __MSABI_LONG(0x00020000)
+#define D3DPTEXTURECAPS_VOLUMEMAP_POW2 __MSABI_LONG(0x00040000)
+#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV __MSABI_LONG(0x00200000)
+
+#define D3DPTFILTERCAPS_MINFPOINT 0x00000100
+#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400
+#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD 0x00000800
+#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD 0x00001000
+#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000
+#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000
+#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000
+#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000
+#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x08000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000
+
+#define D3DSTENCILCAPS_KEEP 0x01
+#define D3DSTENCILCAPS_ZERO 0x02
+#define D3DSTENCILCAPS_REPLACE 0x04
+#define D3DSTENCILCAPS_INCRSAT 0x08
+#define D3DSTENCILCAPS_DECRSAT 0x10
+#define D3DSTENCILCAPS_INVERT 0x20
+#define D3DSTENCILCAPS_INCR 0x40
+#define D3DSTENCILCAPS_DECR 0x80
+#define D3DSTENCILCAPS_TWOSIDED 0x100
+
+#define D3DTEXOPCAPS_DISABLE 0x0000001
+#define D3DTEXOPCAPS_SELECTARG1 0x0000002
+#define D3DTEXOPCAPS_SELECTARG2 0x0000004
+#define D3DTEXOPCAPS_MODULATE 0x0000008
+#define D3DTEXOPCAPS_MODULATE2X 0x0000010
+#define D3DTEXOPCAPS_MODULATE4X 0x0000020
+#define D3DTEXOPCAPS_ADD 0x0000040
+#define D3DTEXOPCAPS_ADDSIGNED 0x0000080
+#define D3DTEXOPCAPS_ADDSIGNED2X 0x0000100
+#define D3DTEXOPCAPS_SUBTRACT 0x0000200
+#define D3DTEXOPCAPS_ADDSMOOTH 0x0000400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x0000800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x0001000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x0002000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x0004000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x0008000
+#define D3DTEXOPCAPS_PREMODULATE 0x0010000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x0020000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x0040000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x0080000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x0100000
+#define D3DTEXOPCAPS_BUMPENVMAP 0x0200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x0400000
+#define D3DTEXOPCAPS_DOTPRODUCT3 0x0800000
+#define D3DTEXOPCAPS_MULTIPLYADD 0x1000000
+#define D3DTEXOPCAPS_LERP 0x2000000
+
+#define D3DVTXPCAPS_TEXGEN __MSABI_LONG(0x00000001)
+#define D3DVTXPCAPS_MATERIALSOURCE7 __MSABI_LONG(0x00000002)
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS __MSABI_LONG(0x00000008)
+#define D3DVTXPCAPS_POSITIONALLIGHTS __MSABI_LONG(0x00000010)
+#define D3DVTXPCAPS_LOCALVIEWER __MSABI_LONG(0x00000020)
+#define D3DVTXPCAPS_TWEENING __MSABI_LONG(0x00000040)
+#define D3DVTXPCAPS_TEXGEN_SPHEREMAP __MSABI_LONG(0x00000100)
+#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER __MSABI_LONG(0x00000200)
+
+#define D3DDTCAPS_UBYTE4 __MSABI_LONG(0x00000001)
+#define D3DDTCAPS_UBYTE4N __MSABI_LONG(0x00000002)
+#define D3DDTCAPS_SHORT2N __MSABI_LONG(0x00000004)
+#define D3DDTCAPS_SHORT4N __MSABI_LONG(0x00000008)
+#define D3DDTCAPS_USHORT2N __MSABI_LONG(0x00000010)
+#define D3DDTCAPS_USHORT4N __MSABI_LONG(0x00000020)
+#define D3DDTCAPS_UDEC3 __MSABI_LONG(0x00000040)
+#define D3DDTCAPS_DEC3N __MSABI_LONG(0x00000080)
+#define D3DDTCAPS_FLOAT16_2 __MSABI_LONG(0x00000100)
+#define D3DDTCAPS_FLOAT16_4 __MSABI_LONG(0x00000200)
+
+#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD __MSABI_LONG(0x00000020)
+#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION __MSABI_LONG(0x00000080)
+#define D3DCAPS3_COPY_TO_VIDMEM __MSABI_LONG(0x00000100)
+#define D3DCAPS3_COPY_TO_SYSTEMMEM __MSABI_LONG(0x00000200)
+#define D3DCAPS3_RESERVED __MSABI_LONG(0x8000001F)
+
+#define D3DCAPS2_NO2DDURING3DSCENE __MSABI_LONG(0x00000002)
+#define D3DCAPS2_FULLSCREENGAMMA __MSABI_LONG(0x00020000)
+#define D3DCAPS2_CANRENDERWINDOWED __MSABI_LONG(0x00080000)
+#define D3DCAPS2_CANCALIBRATEGAMMA __MSABI_LONG(0x00100000)
+#define D3DCAPS2_RESERVED __MSABI_LONG(0x02000000)
+#define D3DCAPS2_CANMANAGERESOURCE __MSABI_LONG(0x10000000)
+#define D3DCAPS2_DYNAMICTEXTURES __MSABI_LONG(0x20000000)
+#define D3DCAPS2_CANAUTOGENMIPMAP __MSABI_LONG(0x40000000)
+
+
+#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24
+#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0
+#define D3DVS20_MAX_NUMTEMPS 32
+#define D3DVS20_MIN_NUMTEMPS 12
+#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH 4
+#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH 1
+
+#define D3DVS20CAPS_PREDICATION (1 << 0)
+
+#define D3DPS20CAPS_ARBITRARYSWIZZLE (1 << 0)
+#define D3DPS20CAPS_GRADIENTINSTRUCTIONS (1 << 1)
+#define D3DPS20CAPS_PREDICATION (1 << 2)
+#define D3DPS20CAPS_NODEPENDENTREADLIMIT (1 << 3)
+#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (1 << 4)
+
+#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH 24
+#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH 0
+#define D3DPS20_MAX_NUMTEMPS 32
+#define D3DPS20_MIN_NUMTEMPS 12
+#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH 4
+#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH 0
+#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS 512
+#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS 96
+
+#define D3DMIN30SHADERINSTRUCTIONS 512
+#define D3DMAX30SHADERINSTRUCTIONS 32768
+
+
+typedef struct _D3DVSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+} D3DVSHADERCAPS2_0;
+
+typedef struct _D3DPSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+ INT NumInstructionSlots;
+} D3DPSHADERCAPS2_0;
+
+/*
+ * The d3dcaps9 structure
+ */
+typedef struct _D3DCAPS9 {
+ D3DDEVTYPE DeviceType;
+ UINT AdapterOrdinal;
+
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD Caps3;
+ DWORD PresentationIntervals;
+
+ DWORD CursorCaps;
+
+ DWORD DevCaps;
+
+ DWORD PrimitiveMiscCaps;
+ DWORD RasterCaps;
+ DWORD ZCmpCaps;
+ DWORD SrcBlendCaps;
+ DWORD DestBlendCaps;
+ DWORD AlphaCmpCaps;
+ DWORD ShadeCaps;
+ DWORD TextureCaps;
+ DWORD TextureFilterCaps;
+ DWORD CubeTextureFilterCaps;
+ DWORD VolumeTextureFilterCaps;
+ DWORD TextureAddressCaps;
+ DWORD VolumeTextureAddressCaps;
+
+ DWORD LineCaps;
+
+ DWORD MaxTextureWidth, MaxTextureHeight;
+ DWORD MaxVolumeExtent;
+
+ DWORD MaxTextureRepeat;
+ DWORD MaxTextureAspectRatio;
+ DWORD MaxAnisotropy;
+ float MaxVertexW;
+
+ float GuardBandLeft;
+ float GuardBandTop;
+ float GuardBandRight;
+ float GuardBandBottom;
+
+ float ExtentsAdjust;
+ DWORD StencilCaps;
+
+ DWORD FVFCaps;
+ DWORD TextureOpCaps;
+ DWORD MaxTextureBlendStages;
+ DWORD MaxSimultaneousTextures;
+
+ DWORD VertexProcessingCaps;
+ DWORD MaxActiveLights;
+ DWORD MaxUserClipPlanes;
+ DWORD MaxVertexBlendMatrices;
+ DWORD MaxVertexBlendMatrixIndex;
+
+ float MaxPointSize;
+
+ DWORD MaxPrimitiveCount;
+ DWORD MaxVertexIndex;
+ DWORD MaxStreams;
+ DWORD MaxStreamStride;
+
+ DWORD VertexShaderVersion;
+ DWORD MaxVertexShaderConst;
+
+ DWORD PixelShaderVersion;
+ float PixelShader1xMaxValue;
+
+ /* DX 9 */
+ DWORD DevCaps2;
+
+ float MaxNpatchTessellationLevel;
+ DWORD Reserved5;
+
+ UINT MasterAdapterOrdinal;
+ UINT AdapterOrdinalInGroup;
+ UINT NumberOfAdaptersInGroup;
+ DWORD DeclTypes;
+ DWORD NumSimultaneousRTs;
+ DWORD StretchRectFilterCaps;
+ D3DVSHADERCAPS2_0 VS20Caps;
+ D3DPSHADERCAPS2_0 PS20Caps;
+ DWORD VertexTextureFilterCaps;
+ DWORD MaxVShaderInstructionsExecuted;
+ DWORD MaxPShaderInstructionsExecuted;
+ DWORD MaxVertexShader30InstructionSlots;
+ DWORD MaxPixelShader30InstructionSlots;
+
+} D3DCAPS9;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h
new file mode 100644
index 00000000..db7f42da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3d9types.h
@@ -0,0 +1,1595 @@
+/*
+ * Copyright (C) 2002-2003 Jason Edmeades
+ * Copyright (C) 2002-2003 Raphael Junqueira
+ * Copyright (C) 2005 Oliver Stieber
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3D9TYPES_H
+#define __WINE_D3D9TYPES_H
+
+/*****************************************************************************
+ * Direct 3D v9 #defines
+ */
+#define D3DCLEAR_TARGET __MSABI_LONG(0x00000001)
+#define D3DCLEAR_ZBUFFER __MSABI_LONG(0x00000002)
+#define D3DCLEAR_STENCIL __MSABI_LONG(0x00000004)
+
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+#define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))
+#define D3DCOLOR_COLORVALUE(r,g,b,a) D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))
+#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)
+#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)
+#define D3DCOLOR_XYUV(y,u,v) D3DCOLOR_ARGB(0xFF,y,u,v)
+#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)
+
+#define D3DCS_LEFT __MSABI_LONG(0x001)
+#define D3DCS_RIGHT __MSABI_LONG(0x002)
+#define D3DCS_TOP __MSABI_LONG(0x004)
+#define D3DCS_BOTTOM __MSABI_LONG(0x008)
+#define D3DCS_FRONT __MSABI_LONG(0x010)
+#define D3DCS_BACK __MSABI_LONG(0x020)
+#define D3DCS_PLANE0 __MSABI_LONG(0x040)
+#define D3DCS_PLANE1 __MSABI_LONG(0x080)
+#define D3DCS_PLANE2 __MSABI_LONG(0x100)
+#define D3DCS_PLANE3 __MSABI_LONG(0x200)
+#define D3DCS_PLANE4 __MSABI_LONG(0x400)
+#define D3DCS_PLANE5 __MSABI_LONG(0x800)
+#define D3DCS_ALL __MSABI_LONG(0xFFF)
+
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+
+#define D3DLOCK_READONLY 0x0010
+#define D3DLOCK_NOSYSLOCK 0x0800
+#define D3DLOCK_NOOVERWRITE 0x1000
+#define D3DLOCK_DISCARD 0x2000
+#define D3DLOCK_DONOTWAIT 0x4000
+#define D3DLOCK_NO_DIRTY_UPDATE 0x8000
+
+#define D3DMAXUSERCLIPPLANES 32
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+
+#define D3DRENDERSTATE_WRAPBIAS __MSABI_LONG(128U)
+
+/* MSDN has this in d3d9caps.h, but it should be here */
+#define D3DTSS_TCI_PASSTHRU 0x00000
+#define D3DTSS_TCI_CAMERASPACENORMAL 0x10000
+#define D3DTSS_TCI_CAMERASPACEPOSITION 0x20000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x30000
+#define D3DTSS_TCI_SPHEREMAP 0x40000
+
+
+#define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
+#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
+#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)
+#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)
+#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)
+
+#define D3DUSAGE_RENDERTARGET __MSABI_LONG(0x00000001)
+#define D3DUSAGE_DEPTHSTENCIL __MSABI_LONG(0x00000002)
+#define D3DUSAGE_WRITEONLY __MSABI_LONG(0x00000008)
+#define D3DUSAGE_SOFTWAREPROCESSING __MSABI_LONG(0x00000010)
+#define D3DUSAGE_DONOTCLIP __MSABI_LONG(0x00000020)
+#define D3DUSAGE_POINTS __MSABI_LONG(0x00000040)
+#define D3DUSAGE_RTPATCHES __MSABI_LONG(0x00000080)
+#define D3DUSAGE_NPATCHES __MSABI_LONG(0x00000100)
+#define D3DUSAGE_DYNAMIC __MSABI_LONG(0x00000200)
+#define D3DUSAGE_AUTOGENMIPMAP __MSABI_LONG(0x00000400)
+#define D3DUSAGE_DMAP __MSABI_LONG(0x00004000)
+
+#define D3DUSAGE_QUERY_FILTER __MSABI_LONG(0x00020000)
+#define D3DUSAGE_QUERY_LEGACYBUMPMAP __MSABI_LONG(0x00008000)
+#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000)
+#define D3DUSAGE_QUERY_SRGBREAD __MSABI_LONG(0x00010000)
+#define D3DUSAGE_QUERY_SRGBWRITE __MSABI_LONG(0x00040000)
+#define D3DUSAGE_QUERY_VERTEXTEXTURE __MSABI_LONG(0x00100000)
+#define D3DUSAGE_QUERY_WRAPANDMIP __MSABI_LONG(0x00200000)
+
+#define D3DWRAP_U 1
+#define D3DWRAP_V 2
+#define D3DWRAP_W 4
+#define D3DWRAPCOORD_0 1
+#define D3DWRAPCOORD_1 2
+#define D3DWRAPCOORD_2 4
+#define D3DWRAPCOORD_3 8
+
+#define MAX_DEVICE_IDENTIFIER_STRING 512
+
+#define D3DFVF_RESERVED0 0x0001
+#define D3DFVF_POSITION_MASK 0x400E
+#define D3DFVF_XYZ 0x0002
+#define D3DFVF_XYZRHW 0x0004
+#define D3DFVF_XYZB1 0x0006
+#define D3DFVF_XYZB2 0x0008
+#define D3DFVF_XYZB3 0x000a
+#define D3DFVF_XYZB4 0x000c
+#define D3DFVF_XYZB5 0x000e
+#define D3DFVF_XYZW 0x4002
+#define D3DFVF_NORMAL 0x0010
+#define D3DFVF_PSIZE 0x0020
+#define D3DFVF_DIFFUSE 0x0040
+#define D3DFVF_SPECULAR 0x0080
+#define D3DFVF_TEXCOUNT_MASK 0x0f00
+#define D3DFVF_TEXCOUNT_SHIFT 8
+#define D3DFVF_TEX0 0x0000
+#define D3DFVF_TEX1 0x0100
+#define D3DFVF_TEX2 0x0200
+#define D3DFVF_TEX3 0x0300
+#define D3DFVF_TEX4 0x0400
+#define D3DFVF_TEX5 0x0500
+#define D3DFVF_TEX6 0x0600
+#define D3DFVF_TEX7 0x0700
+#define D3DFVF_TEX8 0x0800
+#define D3DFVF_LASTBETA_UBYTE4 0x1000
+#define D3DFVF_LASTBETA_D3DCOLOR 0x8000
+#define D3DFVF_RESERVED2 0x6000
+
+#define D3DTA_SELECTMASK 0x0000000f
+#define D3DTA_DIFFUSE 0x00000000
+#define D3DTA_CURRENT 0x00000001
+#define D3DTA_TEXTURE 0x00000002
+#define D3DTA_TFACTOR 0x00000003
+#define D3DTA_SPECULAR 0x00000004
+#define D3DTA_TEMP 0x00000005
+#define D3DTA_CONSTANT 0x00000006
+#define D3DTA_COMPLEMENT 0x00000010
+#define D3DTA_ALPHAREPLICATE 0x00000020
+
+#define D3DCOLORWRITEENABLE_RED (__MSABI_LONG(1)<<0)
+#define D3DCOLORWRITEENABLE_GREEN (__MSABI_LONG(1)<<1)
+#define D3DCOLORWRITEENABLE_BLUE (__MSABI_LONG(1)<<2)
+#define D3DCOLORWRITEENABLE_ALPHA (__MSABI_LONG(1)<<3)
+
+#define D3DPV_DONOTCOPYDATA (1 << 0)
+
+#define D3DSTREAMSOURCE_INDEXEDDATA (1 << 30)
+#define D3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4
+
+#define MAXD3DDECLLENGTH 64 /* +end marker */
+#define MAXD3DDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED
+#define MAXD3DDECLTYPE D3DDECLTYPE_UNUSED
+#define MAXD3DDECLUSAGE D3DDECLUSAGE_SAMPLE
+#define MAXD3DDECLUSAGEINDEX 15
+
+#define D3DDMAPSAMPLER 256
+#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
+#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
+#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
+#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
+
+#ifndef MAKEFOURCC
+#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
+
+/* Constants used by D3DPRESENT_PARAMETERS. when creating a device or swapchain */
+
+#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001 /* Create a lockable backbuffer */
+#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL 0x00000002 /* Discard Z buffer */
+#define D3DPRESENTFLAG_DEVICECLIP 0x00000004 /* Clip the window blited into the client area 2k + xp only */
+#define D3DPRESENTFLAG_VIDEO 0x00000010 /* backbuffer 'may' contain video data */
+#define D3DPRESENTFLAG_NOAUTOROTATE 0x00000020 /* d3d9ex, ignore display rotation */
+#define D3DPRESENTFLAG_UNPRUNEDMODE 0x00000040 /* d3d9ex, specify invalid display modes */
+
+#define D3DPRESENT_BACK_BUFFERS_MAX __MSABI_LONG(3)
+#define D3DPRESENT_RATE_DEFAULT 0x00000000
+
+/****************************
+ * Vertex Shaders Declaration
+ */
+
+typedef enum _D3DDECLUSAGE {
+ D3DDECLUSAGE_POSITION = 0,
+ D3DDECLUSAGE_BLENDWEIGHT = 1,
+ D3DDECLUSAGE_BLENDINDICES = 2,
+ D3DDECLUSAGE_NORMAL = 3,
+ D3DDECLUSAGE_PSIZE = 4,
+ D3DDECLUSAGE_TEXCOORD = 5,
+ D3DDECLUSAGE_TANGENT = 6,
+ D3DDECLUSAGE_BINORMAL = 7,
+ D3DDECLUSAGE_TESSFACTOR = 8,
+ D3DDECLUSAGE_POSITIONT = 9,
+ D3DDECLUSAGE_COLOR = 10,
+ D3DDECLUSAGE_FOG = 11,
+ D3DDECLUSAGE_DEPTH = 12,
+ D3DDECLUSAGE_SAMPLE = 13
+} D3DDECLUSAGE;
+
+#define D3DMAXDECLUSAGE D3DDECLUSAGE_SAMPLE
+#define D3DMAXDECLUSAGEINDEX 15
+#define D3DMAXDECLLENGTH 18
+#define D3DMAXDECLUSAGE_DX8 D3DDECLUSAGE_TEXCOORD
+
+typedef enum _D3DDECLMETHOD {
+ D3DDECLMETHOD_DEFAULT = 0,
+ D3DDECLMETHOD_PARTIALU = 1,
+ D3DDECLMETHOD_PARTIALV = 2,
+ D3DDECLMETHOD_CROSSUV = 3,
+ D3DDECLMETHOD_UV = 4,
+ D3DDECLMETHOD_LOOKUP = 5,
+ D3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} D3DDECLMETHOD;
+
+
+#define D3DMAXDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED
+
+typedef enum _D3DDECLTYPE {
+ D3DDECLTYPE_FLOAT1 = 0,
+ D3DDECLTYPE_FLOAT2 = 1,
+ D3DDECLTYPE_FLOAT3 = 2,
+ D3DDECLTYPE_FLOAT4 = 3,
+ D3DDECLTYPE_D3DCOLOR = 4,
+ D3DDECLTYPE_UBYTE4 = 5,
+ D3DDECLTYPE_SHORT2 = 6,
+ D3DDECLTYPE_SHORT4 = 7,
+ /* VS 2.0 */
+ D3DDECLTYPE_UBYTE4N = 8,
+ D3DDECLTYPE_SHORT2N = 9,
+ D3DDECLTYPE_SHORT4N = 10,
+ D3DDECLTYPE_USHORT2N = 11,
+ D3DDECLTYPE_USHORT4N = 12,
+ D3DDECLTYPE_UDEC3 = 13,
+ D3DDECLTYPE_DEC3N = 14,
+ D3DDECLTYPE_FLOAT16_2 = 15,
+ D3DDECLTYPE_FLOAT16_4 = 16,
+ D3DDECLTYPE_UNUSED = 17,
+} D3DDECLTYPE;
+
+#define D3DMAXDECLTYPE D3DDECLTYPE_UNUSED
+
+typedef struct _D3DVERTEXELEMENT9 {
+ WORD Stream;
+ WORD Offset;
+ BYTE Type;
+ BYTE Method;
+ BYTE Usage;
+ BYTE UsageIndex;
+} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;
+
+
+typedef enum _D3DQUERYTYPE {
+ D3DQUERYTYPE_VCACHE = 4,
+ D3DQUERYTYPE_RESOURCEMANAGER = 5,
+ D3DQUERYTYPE_VERTEXSTATS = 6,
+ D3DQUERYTYPE_EVENT = 8,
+ D3DQUERYTYPE_OCCLUSION = 9,
+ D3DQUERYTYPE_TIMESTAMP = 10,
+ D3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+ D3DQUERYTYPE_TIMESTAMPFREQ = 12,
+ D3DQUERYTYPE_PIPELINETIMINGS = 13,
+ D3DQUERYTYPE_INTERFACETIMINGS = 14,
+ D3DQUERYTYPE_VERTEXTIMINGS = 15,
+ D3DQUERYTYPE_PIXELTIMINGS = 16,
+ D3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+ D3DQUERYTYPE_CACHEUTILIZATION = 18
+} D3DQUERYTYPE;
+
+#define D3DISSUE_BEGIN (1 << 1)
+#define D3DISSUE_END (1 << 0)
+#define D3DGETDATA_FLUSH (1 << 0)
+
+
+#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}
+#define D3DDP_MAXTEXCOORD 8
+
+
+#define D3DVSD_MAKETOKENTYPE(TokenType) \
+ ((TokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)
+
+#define D3DVSD_CONST(ConstantAddress, Count) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | ((Count) << D3DVSD_CONSTCOUNTSHIFT) | (ConstantAddress))
+
+#define D3DVSD_END() 0xFFFFFFFF
+
+#define D3DVSD_NOP() 0x00000000
+
+#define D3DVSD_REG(VertexRegister, Type) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | ((Type) << D3DVSD_DATATYPESHIFT) | (VertexRegister))
+
+#define D3DVSD_SKIP(Count) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | ((Count) << D3DVSD_SKIPCOUNTSHIFT))
+
+#define D3DVSD_STREAM(StreamNumber) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (StreamNumber))
+
+#define D3DVSD_STREAM_TESS() \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))
+
+#define D3DVSD_TESSNORMAL(RegisterIn, RegisterOut) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | ((RegisterIn) << D3DVSD_VERTEXREGINSHIFT) | ((0x02) << D3DVSD_DATATYPESHIFT) | (RegisterOut))
+
+#define D3DVSD_TESSUV(Register) \
+ (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | ((0x01) << D3DVSD_DATATYPESHIFT) | (Register))
+
+
+/********************************
+ * Pixel/Vertex Shaders Functions
+ */
+
+/** Maximum number of supported texture coordinates sets operation */
+#define D3DDP_MAXTEXCOORD 8
+
+/** opcode token mask */
+#define D3DSI_OPCODE_MASK 0x0000FFFF
+#define D3DSI_INSTLENGTH_MASK 0x0F000000
+#define D3DSI_INSTLENGTH_SHIFT 24
+
+/** opcodes types for PS and VS */
+typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {
+ D3DSIO_NOP = 0,
+ D3DSIO_MOV = 1,
+ D3DSIO_ADD = 2,
+ D3DSIO_SUB = 3,
+ D3DSIO_MAD = 4,
+ D3DSIO_MUL = 5,
+ D3DSIO_RCP = 6,
+ D3DSIO_RSQ = 7,
+ D3DSIO_DP3 = 8,
+ D3DSIO_DP4 = 9,
+ D3DSIO_MIN = 10,
+ D3DSIO_MAX = 11,
+ D3DSIO_SLT = 12,
+ D3DSIO_SGE = 13,
+ D3DSIO_EXP = 14,
+ D3DSIO_LOG = 15,
+ D3DSIO_LIT = 16,
+ D3DSIO_DST = 17,
+ D3DSIO_LRP = 18,
+ D3DSIO_FRC = 19,
+ D3DSIO_M4x4 = 20,
+ D3DSIO_M4x3 = 21,
+ D3DSIO_M3x4 = 22,
+ D3DSIO_M3x3 = 23,
+ D3DSIO_M3x2 = 24,
+ D3DSIO_CALL = 25,
+ D3DSIO_CALLNZ = 26,
+ D3DSIO_LOOP = 27,
+ D3DSIO_RET = 28,
+ D3DSIO_ENDLOOP = 29,
+ D3DSIO_LABEL = 30,
+ D3DSIO_DCL = 31,
+ D3DSIO_POW = 32,
+ D3DSIO_CRS = 33,
+ D3DSIO_SGN = 34,
+ D3DSIO_ABS = 35,
+ D3DSIO_NRM = 36,
+ D3DSIO_SINCOS = 37,
+ D3DSIO_REP = 38,
+ D3DSIO_ENDREP = 39,
+ D3DSIO_IF = 40,
+ D3DSIO_IFC = 41,
+ D3DSIO_ELSE = 42,
+ D3DSIO_ENDIF = 43,
+ D3DSIO_BREAK = 44,
+ D3DSIO_BREAKC = 45,
+ D3DSIO_MOVA = 46,
+ D3DSIO_DEFB = 47,
+ D3DSIO_DEFI = 48,
+
+ D3DSIO_TEXCOORD = 64,
+ D3DSIO_TEXKILL = 65,
+ D3DSIO_TEX = 66,
+ D3DSIO_TEXBEM = 67,
+ D3DSIO_TEXBEML = 68,
+ D3DSIO_TEXREG2AR = 69,
+ D3DSIO_TEXREG2GB = 70,
+ D3DSIO_TEXM3x2PAD = 71,
+ D3DSIO_TEXM3x2TEX = 72,
+ D3DSIO_TEXM3x3PAD = 73,
+ D3DSIO_TEXM3x3TEX = 74,
+ D3DSIO_TEXM3x3DIFF = 75,
+ D3DSIO_TEXM3x3SPEC = 76,
+ D3DSIO_TEXM3x3VSPEC = 77,
+ D3DSIO_EXPP = 78,
+ D3DSIO_LOGP = 79,
+ D3DSIO_CND = 80,
+ D3DSIO_DEF = 81,
+ D3DSIO_TEXREG2RGB = 82,
+ D3DSIO_TEXDP3TEX = 83,
+ D3DSIO_TEXM3x2DEPTH = 84,
+ D3DSIO_TEXDP3 = 85,
+ D3DSIO_TEXM3x3 = 86,
+ D3DSIO_TEXDEPTH = 87,
+ D3DSIO_CMP = 88,
+ D3DSIO_BEM = 89,
+ D3DSIO_DP2ADD = 90,
+ D3DSIO_DSX = 91,
+ D3DSIO_DSY = 92,
+ D3DSIO_TEXLDD = 93,
+ D3DSIO_SETP = 94,
+ D3DSIO_TEXLDL = 95,
+ D3DSIO_BREAKP = 96,
+
+ D3DSIO_PHASE = 0xFFFD,
+ D3DSIO_COMMENT = 0xFFFE,
+ D3DSIO_END = 0XFFFF,
+
+ D3DSIO_FORCE_DWORD = 0X7FFFFFFF /** for 32-bit alignment */
+} D3DSHADER_INSTRUCTION_OPCODE_TYPE;
+
+#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f, 0.0026041667f, 0.00026041668f
+#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f
+
+#define D3DSHADER_INSTRUCTION_PREDICATED (1 << 28)
+
+#define D3DSI_TEXLD_PROJECT 0x00010000
+#define D3DSI_TEXLD_BIAS 0x00020000
+
+/** for parallelism */
+#define D3DSI_COISSUE 0x40000000
+
+#define D3DSP_DCL_USAGE_SHIFT 0
+#define D3DSP_DCL_USAGE_MASK 0x0000000f
+
+#define D3DSP_DCL_USAGEINDEX_SHIFT 16
+#define D3DSP_DCL_USAGEINDEX_MASK 0x000f0000
+
+#define D3DSP_TEXTURETYPE_SHIFT 27
+#define D3DSP_TEXTURETYPE_MASK 0x78000000
+
+typedef enum _D3DSAMPLER_TEXTURE_TYPE {
+ D3DSTT_UNKNOWN = 0 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_1D = 1 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_2D = 2 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_CUBE = 3 << D3DSP_TEXTURETYPE_SHIFT,
+ D3DSTT_VOLUME = 4 << D3DSP_TEXTURETYPE_SHIFT,
+
+ D3DSTT_FORCE_DWORD = 0x7FFFFFFF
+} D3DSAMPLER_TEXTURE_TYPE;
+
+#define D3DSP_REGNUM_MASK 0x000007FF
+
+/** destination parameter modifiers (.xyzw) */
+#define D3DSP_WRITEMASK_0 0x00010000 /* .x r */
+#define D3DSP_WRITEMASK_1 0x00020000 /* .y g */
+#define D3DSP_WRITEMASK_2 0x00040000 /* .z b */
+#define D3DSP_WRITEMASK_3 0x00080000 /* .w a */
+#define D3DSP_WRITEMASK_ALL 0x000F0000 /* all */
+
+#define D3DSP_DSTMOD_SHIFT 20
+#define D3DSP_DSTMOD_MASK (0xF << D3DSP_DSTMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE {
+ D3DSPDM_NONE = 0 << D3DSP_DSTMOD_SHIFT,
+ D3DSPDM_SATURATE = 1 << D3DSP_DSTMOD_SHIFT,
+ D3DSPDM_PARTIALPRECISION = 2 << D3DSP_DSTMOD_SHIFT,
+ D3DSPDM_MSAMPCENTROID = 4 << D3DSP_DSTMOD_SHIFT,
+
+ D3DSPDM_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_PARAM_DSTMOD_TYPE;
+
+/** destination param */
+#define D3DSP_DSTSHIFT_SHIFT 24
+#define D3DSP_DSTSHIFT_MASK (0xF << D3DSP_DSTSHIFT_SHIFT)
+
+/** destination/source reg type */
+#define D3DSP_REGTYPE_SHIFT 28
+#define D3DSP_REGTYPE_SHIFT2 8
+#define D3DSP_REGTYPE_MASK (0x7 << D3DSP_REGTYPE_SHIFT)
+#define D3DSP_REGTYPE_MASK2 0x00001800
+
+typedef enum _D3DSHADER_PARAM_REGISTER_TYPE {
+ D3DSPR_TEMP = 0,
+ D3DSPR_INPUT = 1,
+ D3DSPR_CONST = 2,
+ D3DSPR_ADDR = 3,
+ D3DSPR_TEXTURE = 3,
+ D3DSPR_RASTOUT = 4,
+ D3DSPR_ATTROUT = 5,
+ D3DSPR_TEXCRDOUT = 6,
+ D3DSPR_OUTPUT = 6,
+ D3DSPR_CONSTINT = 7,
+ D3DSPR_COLOROUT = 8,
+ D3DSPR_DEPTHOUT = 9,
+ D3DSPR_SAMPLER = 10,
+ D3DSPR_CONST2 = 11,
+ D3DSPR_CONST3 = 12,
+ D3DSPR_CONST4 = 13,
+ D3DSPR_CONSTBOOL = 14,
+ D3DSPR_LOOP = 15,
+ D3DSPR_TEMPFLOAT16 = 16,
+ D3DSPR_MISCTYPE = 17,
+ D3DSPR_LABEL = 18,
+ D3DSPR_PREDICATE = 19,
+
+ D3DSPR_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_PARAM_REGISTER_TYPE;
+
+typedef enum _D3DSHADER_MISCTYPE_OFFSETS {
+ D3DSMO_POSITION = 0,
+ D3DSMO_FACE = 1
+} D3DSHADER_MISCTYPE_OFFSETS;
+
+typedef enum _D3DVS_RASTOUT_OFFSETS {
+ D3DSRO_POSITION = 0,
+ D3DSRO_FOG = 1,
+ D3DSRO_POINT_SIZE = 2,
+
+ D3DSRO_FORCE_DWORD = 0x7FFFFFFF
+} D3DVS_RASTOUT_OFFSETS;
+
+#define D3DVS_ADDRESSMODE_SHIFT 13
+#define D3DVS_ADDRESSMODE_MASK (0x1 << D3DVS_ADDRESSMODE_SHIFT)
+
+typedef enum _D3DVS_ADDRESSMODE_TYPE {
+ D3DVS_ADDRMODE_ABSOLUTE = 0 << D3DVS_ADDRESSMODE_SHIFT,
+ D3DVS_ADDRMODE_RELATIVE = 1 << D3DVS_ADDRESSMODE_SHIFT,
+
+ D3DVS_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF
+} D3DVS_ADDRESSMODE_TYPE;
+
+#define D3DSHADER_ADDRESSMODE_SHIFT 13
+#define D3DSHADER_ADDRESSMODE_MASK (1 << D3DSHADER_ADDRESSMODE_SHIFT)
+
+typedef enum _D3DSHADER_ADDRESSMODE_TYPE {
+ D3DSHADER_ADDRMODE_ABSOLUTE = 0 << D3DSHADER_ADDRESSMODE_SHIFT,
+ D3DSHADER_ADDRMODE_RELATIVE = 1 << D3DSHADER_ADDRESSMODE_SHIFT,
+
+ D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_ADDRESSMODE_TYPE;
+
+
+#define D3DVS_SWIZZLE_SHIFT 16
+#define D3DVS_SWIZZLE_MASK (0xFF << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DSP_SWIZZLE_SHIFT 16
+#define D3DSP_SWIZZLE_MASK (0xFF << D3DSP_SWIZZLE_SHIFT)
+
+#define D3DVS_X_X (0 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Y (1 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_Z (2 << D3DVS_SWIZZLE_SHIFT)
+#define D3DVS_X_W (3 << D3DVS_SWIZZLE_SHIFT)
+
+#define D3DVS_Y_X (0 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Y (1 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_Z (2 << (D3DVS_SWIZZLE_SHIFT + 2))
+#define D3DVS_Y_W (3 << (D3DVS_SWIZZLE_SHIFT + 2))
+
+#define D3DVS_Z_X (0 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Y (1 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_Z (2 << (D3DVS_SWIZZLE_SHIFT + 4))
+#define D3DVS_Z_W (3 << (D3DVS_SWIZZLE_SHIFT + 4))
+
+#define D3DVS_W_X (0 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Y (1 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_Z (2 << (D3DVS_SWIZZLE_SHIFT + 6))
+#define D3DVS_W_W (3 << (D3DVS_SWIZZLE_SHIFT + 6))
+
+#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)
+
+#define D3DSP_NOSWIZZLE \
+ ((0 << (D3DSP_SWIZZLE_SHIFT + 0)) | (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | (3 << (D3DSP_SWIZZLE_SHIFT + 6)))
+
+#define D3DSP_SRCMOD_SHIFT 24
+#define D3DSP_SRCMOD_MASK (0xF << D3DSP_SRCMOD_SHIFT)
+
+typedef enum _D3DSHADER_PARAM_SRCMOD_TYPE {
+ D3DSPSM_NONE = 0 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_NEG = 1 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_BIAS = 2 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_BIASNEG = 3 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_SIGN = 4 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_SIGNNEG = 5 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_COMP = 6 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_X2 = 7 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_X2NEG = 8 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_DZ = 9 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_DW = 10 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_ABS = 11 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_ABSNEG = 12 << D3DSP_SRCMOD_SHIFT,
+ D3DSPSM_NOT = 13 << D3DSP_SRCMOD_SHIFT,
+
+ D3DSPSM_FORCE_DWORD = 0x7FFFFFFF
+} D3DSHADER_PARAM_SRCMOD_TYPE;
+
+#define D3DPS_VERSION(major, minor) (0xFFFF0000 | ((major) << 8) | (minor))
+#define D3DVS_VERSION(major, minor) (0xFFFE0000 | ((major) << 8) | (minor))
+#define D3DSHADER_VERSION_MAJOR(version) (((version) >> 8) & 0xFF)
+#define D3DSHADER_VERSION_MINOR(version) (((version) >> 0) & 0xFF)
+
+#define D3DSI_COMMENTSIZE_SHIFT 16
+#define D3DSI_COMMENTSIZE_MASK (0x7FFF << D3DSI_COMMENTSIZE_SHIFT)
+
+#define D3DSHADER_COMMENT(commentSize) \
+ ((((commentSize) << D3DSI_COMMENTSIZE_SHIFT) & D3DSI_COMMENTSIZE_MASK) | D3DSIO_COMMENT)
+
+#define D3DPS_END() 0x0000FFFF
+#define D3DVS_END() 0x0000FFFF
+
+
+/*****************************************************************************
+ * Direct 3D v8 enumerated types
+ */
+typedef enum _D3DBACKBUFFER_TYPE {
+ D3DBACKBUFFER_TYPE_MONO = 0,
+ D3DBACKBUFFER_TYPE_LEFT = 1,
+ D3DBACKBUFFER_TYPE_RIGHT = 2,
+
+ D3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} D3DBACKBUFFER_TYPE;
+
+#define D3DPRESENT_BACK_BUFFER_MAX __MSABI_LONG(3)
+
+typedef enum _D3DBASISTYPE {
+ D3DBASIS_BEZIER = 0,
+ D3DBASIS_BSPLINE = 1,
+ D3DBASIS_INTERPOLATE = 2,
+
+ D3DBASIS_FORCE_DWORD = 0x7fffffff
+} D3DBASISTYPE;
+
+typedef enum _D3DBLEND {
+ D3DBLEND_ZERO = 1,
+ D3DBLEND_ONE = 2,
+ D3DBLEND_SRCCOLOR = 3,
+ D3DBLEND_INVSRCCOLOR = 4,
+ D3DBLEND_SRCALPHA = 5,
+ D3DBLEND_INVSRCALPHA = 6,
+ D3DBLEND_DESTALPHA = 7,
+ D3DBLEND_INVDESTALPHA = 8,
+ D3DBLEND_DESTCOLOR = 9,
+ D3DBLEND_INVDESTCOLOR = 10,
+ D3DBLEND_SRCALPHASAT = 11,
+ D3DBLEND_BOTHSRCALPHA = 12,
+ D3DBLEND_BOTHINVSRCALPHA = 13,
+ D3DBLEND_BLENDFACTOR = 14,
+ D3DBLEND_INVBLENDFACTOR = 15,
+ D3DBLEND_FORCE_DWORD = 0x7fffffff
+} D3DBLEND;
+
+typedef enum _D3DBLENDOP {
+ D3DBLENDOP_ADD = 1,
+ D3DBLENDOP_SUBTRACT = 2,
+ D3DBLENDOP_REVSUBTRACT = 3,
+ D3DBLENDOP_MIN = 4,
+ D3DBLENDOP_MAX = 5,
+
+ D3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} D3DBLENDOP;
+
+typedef enum _D3DCMPFUNC {
+ D3DCMP_NEVER = 1,
+ D3DCMP_LESS = 2,
+ D3DCMP_EQUAL = 3,
+ D3DCMP_LESSEQUAL = 4,
+ D3DCMP_GREATER = 5,
+ D3DCMP_NOTEQUAL = 6,
+ D3DCMP_GREATEREQUAL = 7,
+ D3DCMP_ALWAYS = 8,
+
+ D3DCMP_FORCE_DWORD = 0x7fffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DCUBEMAP_FACES {
+ D3DCUBEMAP_FACE_POSITIVE_X = 0,
+ D3DCUBEMAP_FACE_NEGATIVE_X = 1,
+ D3DCUBEMAP_FACE_POSITIVE_Y = 2,
+ D3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+ D3DCUBEMAP_FACE_POSITIVE_Z = 4,
+ D3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+
+ D3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} D3DCUBEMAP_FACES;
+
+typedef enum _D3DCULL {
+ D3DCULL_NONE = 1,
+ D3DCULL_CW = 2,
+ D3DCULL_CCW = 3,
+
+ D3DCULL_FORCE_DWORD = 0x7fffffff
+} D3DCULL;
+
+typedef enum _D3DDEBUGMONITORTOKENS {
+ D3DDMT_ENABLE = 0,
+ D3DDMT_DISABLE = 1,
+
+ D3DDMT_FORCE_DWORD = 0x7fffffff
+} D3DDEBUGMONITORTOKENS;
+
+typedef enum _D3DDEGREETYPE {
+ D3DDEGREE_LINEAR = 1,
+ D3DDEGREE_QUADRATIC = 2,
+ D3DDEGREE_CUBIC = 3,
+ D3DDEGREE_QUINTIC = 5,
+
+ D3DDEGREE_FORCE_DWORD = 0x7fffffff
+} D3DDEGREETYPE;
+
+typedef enum _D3DDEVTYPE {
+ D3DDEVTYPE_HAL = 1,
+ D3DDEVTYPE_REF = 2,
+ D3DDEVTYPE_SW = 3,
+ D3DDEVTYPE_NULLREF = 4,
+
+ D3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} D3DDEVTYPE;
+
+typedef enum _D3DFILLMODE {
+ D3DFILL_POINT = 1,
+ D3DFILL_WIREFRAME = 2,
+ D3DFILL_SOLID = 3,
+
+ D3DFILL_FORCE_DWORD = 0x7fffffff
+} D3DFILLMODE;
+
+typedef enum _D3DFOGMODE {
+ D3DFOG_NONE = 0,
+ D3DFOG_EXP = 1,
+ D3DFOG_EXP2 = 2,
+ D3DFOG_LINEAR = 3,
+
+ D3DFOG_FORCE_DWORD = 0x7fffffff
+} D3DFOGMODE;
+
+typedef enum _D3DFORMAT {
+ D3DFMT_UNKNOWN = 0,
+
+ D3DFMT_R8G8B8 = 20,
+ D3DFMT_A8R8G8B8 = 21,
+ D3DFMT_X8R8G8B8 = 22,
+ D3DFMT_R5G6B5 = 23,
+ D3DFMT_X1R5G5B5 = 24,
+ D3DFMT_A1R5G5B5 = 25,
+ D3DFMT_A4R4G4B4 = 26,
+ D3DFMT_R3G3B2 = 27,
+ D3DFMT_A8 = 28,
+ D3DFMT_A8R3G3B2 = 29,
+ D3DFMT_X4R4G4B4 = 30,
+ D3DFMT_A2B10G10R10 = 31,
+ D3DFMT_A8B8G8R8 = 32,
+ D3DFMT_X8B8G8R8 = 33,
+ D3DFMT_G16R16 = 34,
+ D3DFMT_A2R10G10B10 = 35,
+ D3DFMT_A16B16G16R16 = 36,
+
+
+ D3DFMT_A8P8 = 40,
+ D3DFMT_P8 = 41,
+
+ D3DFMT_L8 = 50,
+ D3DFMT_A8L8 = 51,
+ D3DFMT_A4L4 = 52,
+
+ D3DFMT_V8U8 = 60,
+ D3DFMT_L6V5U5 = 61,
+ D3DFMT_X8L8V8U8 = 62,
+ D3DFMT_Q8W8V8U8 = 63,
+ D3DFMT_V16U16 = 64,
+ D3DFMT_A2W10V10U10 = 67,
+
+ D3DFMT_UYVY = MAKEFOURCC('U', 'Y', 'V', 'Y'),
+ D3DFMT_YUY2 = MAKEFOURCC('Y', 'U', 'Y', '2'),
+ D3DFMT_DXT1 = MAKEFOURCC('D', 'X', 'T', '1'),
+ D3DFMT_DXT2 = MAKEFOURCC('D', 'X', 'T', '2'),
+ D3DFMT_DXT3 = MAKEFOURCC('D', 'X', 'T', '3'),
+ D3DFMT_DXT4 = MAKEFOURCC('D', 'X', 'T', '4'),
+ D3DFMT_DXT5 = MAKEFOURCC('D', 'X', 'T', '5'),
+ D3DFMT_MULTI2_ARGB8 = MAKEFOURCC('M', 'E', 'T', '1'),
+ D3DFMT_G8R8_G8B8 = MAKEFOURCC('G', 'R', 'G', 'B'),
+ D3DFMT_R8G8_B8G8 = MAKEFOURCC('R', 'G', 'B', 'G'),
+
+ D3DFMT_D16_LOCKABLE = 70,
+ D3DFMT_D32 = 71,
+ D3DFMT_D15S1 = 73,
+ D3DFMT_D24S8 = 75,
+ D3DFMT_D24X8 = 77,
+ D3DFMT_D24X4S4 = 79,
+ D3DFMT_D16 = 80,
+ D3DFMT_L16 = 81,
+ D3DFMT_D32F_LOCKABLE = 82,
+ D3DFMT_D24FS8 = 83,
+
+ D3DFMT_VERTEXDATA = 100,
+ D3DFMT_INDEX16 = 101,
+ D3DFMT_INDEX32 = 102,
+ D3DFMT_Q16W16V16U16 = 110,
+ /* Floating point formats */
+ D3DFMT_R16F = 111,
+ D3DFMT_G16R16F = 112,
+ D3DFMT_A16B16G16R16F = 113,
+
+ /* IEEE formats */
+ D3DFMT_R32F = 114,
+ D3DFMT_G32R32F = 115,
+ D3DFMT_A32B32G32R32F = 116,
+
+ D3DFMT_CxV8U8 = 117,
+
+
+ D3DFMT_FORCE_DWORD = 0xFFFFFFFF
+} D3DFORMAT;
+
+typedef enum _D3DLIGHTTYPE {
+ D3DLIGHT_POINT = 1,
+ D3DLIGHT_SPOT = 2,
+ D3DLIGHT_DIRECTIONAL = 3,
+
+ D3DLIGHT_FORCE_DWORD = 0x7fffffff
+} D3DLIGHTTYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE {
+ D3DMCS_MATERIAL = 0,
+ D3DMCS_COLOR1 = 1,
+ D3DMCS_COLOR2 = 2,
+
+ D3DMCS_FORCE_DWORD = 0x7fffffff
+} D3DMATERIALCOLORSOURCE;
+
+typedef enum _D3DMULTISAMPLE_TYPE {
+ D3DMULTISAMPLE_NONE = 0,
+ D3DMULTISAMPLE_NONMASKABLE = 1,
+ D3DMULTISAMPLE_2_SAMPLES = 2,
+ D3DMULTISAMPLE_3_SAMPLES = 3,
+ D3DMULTISAMPLE_4_SAMPLES = 4,
+ D3DMULTISAMPLE_5_SAMPLES = 5,
+ D3DMULTISAMPLE_6_SAMPLES = 6,
+ D3DMULTISAMPLE_7_SAMPLES = 7,
+ D3DMULTISAMPLE_8_SAMPLES = 8,
+ D3DMULTISAMPLE_9_SAMPLES = 9,
+ D3DMULTISAMPLE_10_SAMPLES = 10,
+ D3DMULTISAMPLE_11_SAMPLES = 11,
+ D3DMULTISAMPLE_12_SAMPLES = 12,
+ D3DMULTISAMPLE_13_SAMPLES = 13,
+ D3DMULTISAMPLE_14_SAMPLES = 14,
+ D3DMULTISAMPLE_15_SAMPLES = 15,
+ D3DMULTISAMPLE_16_SAMPLES = 16,
+
+ D3DMULTISAMPLE_FORCE_DWORD = 0x7fffffff
+} D3DMULTISAMPLE_TYPE;
+
+#if 0
+typedef enum _D3DORDERTYPE {
+ D3DORDER_LINEAR = 1,
+ D3DORDER_QUADRATIC = 2,
+ D3DORDER_CUBIC = 3,
+ D3DORDER_QUINTIC = 5,
+
+ D3DORDER_FORCE_DWORD = 0x7fffffff
+} D3DORDERTYPE;
+#endif
+typedef enum _D3DPATCHEDGESTYLE {
+ D3DPATCHEDGE_DISCRETE = 0,
+ D3DPATCHEDGE_CONTINUOUS = 1,
+
+ D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,
+} D3DPATCHEDGESTYLE;
+
+typedef enum _D3DPOOL {
+ D3DPOOL_DEFAULT = 0,
+ D3DPOOL_MANAGED = 1,
+ D3DPOOL_SYSTEMMEM = 2,
+ D3DPOOL_SCRATCH = 3,
+
+ D3DPOOL_FORCE_DWORD = 0x7fffffff
+} D3DPOOL;
+
+typedef enum _D3DPRIMITIVETYPE {
+ D3DPT_POINTLIST = 1,
+ D3DPT_LINELIST = 2,
+ D3DPT_LINESTRIP = 3,
+ D3DPT_TRIANGLELIST = 4,
+ D3DPT_TRIANGLESTRIP = 5,
+ D3DPT_TRIANGLEFAN = 6,
+
+ D3DPT_FORCE_DWORD = 0x7fffffff
+} D3DPRIMITIVETYPE;
+
+typedef enum _D3DRENDERSTATETYPE {
+ D3DRS_ZENABLE = 7,
+ D3DRS_FILLMODE = 8,
+ D3DRS_SHADEMODE = 9,
+ D3DRS_ZWRITEENABLE = 14,
+ D3DRS_ALPHATESTENABLE = 15,
+ D3DRS_LASTPIXEL = 16,
+ D3DRS_SRCBLEND = 19,
+ D3DRS_DESTBLEND = 20,
+ D3DRS_CULLMODE = 22,
+ D3DRS_ZFUNC = 23,
+ D3DRS_ALPHAREF = 24,
+ D3DRS_ALPHAFUNC = 25,
+ D3DRS_DITHERENABLE = 26,
+ D3DRS_ALPHABLENDENABLE = 27,
+ D3DRS_FOGENABLE = 28,
+ D3DRS_SPECULARENABLE = 29,
+ D3DRS_FOGCOLOR = 34,
+ D3DRS_FOGTABLEMODE = 35,
+ D3DRS_FOGSTART = 36,
+ D3DRS_FOGEND = 37,
+ D3DRS_FOGDENSITY = 38,
+ D3DRS_RANGEFOGENABLE = 48,
+ D3DRS_STENCILENABLE = 52,
+ D3DRS_STENCILFAIL = 53,
+ D3DRS_STENCILZFAIL = 54,
+ D3DRS_STENCILPASS = 55,
+ D3DRS_STENCILFUNC = 56,
+ D3DRS_STENCILREF = 57,
+ D3DRS_STENCILMASK = 58,
+ D3DRS_STENCILWRITEMASK = 59,
+ D3DRS_TEXTUREFACTOR = 60,
+ D3DRS_WRAP0 = 128,
+ D3DRS_WRAP1 = 129,
+ D3DRS_WRAP2 = 130,
+ D3DRS_WRAP3 = 131,
+ D3DRS_WRAP4 = 132,
+ D3DRS_WRAP5 = 133,
+ D3DRS_WRAP6 = 134,
+ D3DRS_WRAP7 = 135,
+ D3DRS_CLIPPING = 136,
+ D3DRS_LIGHTING = 137,
+ D3DRS_AMBIENT = 139,
+ D3DRS_FOGVERTEXMODE = 140,
+ D3DRS_COLORVERTEX = 141,
+ D3DRS_LOCALVIEWER = 142,
+ D3DRS_NORMALIZENORMALS = 143,
+ D3DRS_DIFFUSEMATERIALSOURCE = 145,
+ D3DRS_SPECULARMATERIALSOURCE = 146,
+ D3DRS_AMBIENTMATERIALSOURCE = 147,
+ D3DRS_EMISSIVEMATERIALSOURCE = 148,
+ D3DRS_VERTEXBLEND = 151,
+ D3DRS_CLIPPLANEENABLE = 152,
+ D3DRS_POINTSIZE = 154,
+ D3DRS_POINTSIZE_MIN = 155,
+ D3DRS_POINTSPRITEENABLE = 156,
+ D3DRS_POINTSCALEENABLE = 157,
+ D3DRS_POINTSCALE_A = 158,
+ D3DRS_POINTSCALE_B = 159,
+ D3DRS_POINTSCALE_C = 160,
+ D3DRS_MULTISAMPLEANTIALIAS = 161,
+ D3DRS_MULTISAMPLEMASK = 162,
+ D3DRS_PATCHEDGESTYLE = 163,
+ D3DRS_DEBUGMONITORTOKEN = 165,
+ D3DRS_POINTSIZE_MAX = 166,
+ D3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+ D3DRS_COLORWRITEENABLE = 168,
+ D3DRS_TWEENFACTOR = 170,
+ D3DRS_BLENDOP = 171,
+ D3DRS_POSITIONDEGREE = 172,
+ D3DRS_NORMALDEGREE = 173,
+ D3DRS_SCISSORTESTENABLE = 174,
+ D3DRS_SLOPESCALEDEPTHBIAS = 175,
+ D3DRS_ANTIALIASEDLINEENABLE = 176,
+ D3DRS_MINTESSELLATIONLEVEL = 178,
+ D3DRS_MAXTESSELLATIONLEVEL = 179,
+ D3DRS_ADAPTIVETESS_X = 180,
+ D3DRS_ADAPTIVETESS_Y = 181,
+ D3DRS_ADAPTIVETESS_Z = 182,
+ D3DRS_ADAPTIVETESS_W = 183,
+ D3DRS_ENABLEADAPTIVETESSELLATION= 184,
+ D3DRS_TWOSIDEDSTENCILMODE = 185,
+ D3DRS_CCW_STENCILFAIL = 186,
+ D3DRS_CCW_STENCILZFAIL = 187,
+ D3DRS_CCW_STENCILPASS = 188,
+ D3DRS_CCW_STENCILFUNC = 189,
+ D3DRS_COLORWRITEENABLE1 = 190,
+ D3DRS_COLORWRITEENABLE2 = 191,
+ D3DRS_COLORWRITEENABLE3 = 192,
+ D3DRS_BLENDFACTOR = 193,
+ D3DRS_SRGBWRITEENABLE = 194,
+ D3DRS_DEPTHBIAS = 195,
+ D3DRS_WRAP8 = 198,
+ D3DRS_WRAP9 = 199,
+ D3DRS_WRAP10 = 200,
+ D3DRS_WRAP11 = 201,
+ D3DRS_WRAP12 = 202,
+ D3DRS_WRAP13 = 203,
+ D3DRS_WRAP14 = 204,
+ D3DRS_WRAP15 = 205,
+ D3DRS_SEPARATEALPHABLENDENABLE = 206,
+ D3DRS_SRCBLENDALPHA = 207,
+ D3DRS_DESTBLENDALPHA = 208,
+ D3DRS_BLENDOPALPHA = 209,
+
+ D3DRS_FORCE_DWORD = 0x7fffffff
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DRESOURCETYPE {
+ D3DRTYPE_SURFACE = 1,
+ D3DRTYPE_VOLUME = 2,
+ D3DRTYPE_TEXTURE = 3,
+ D3DRTYPE_VOLUMETEXTURE = 4,
+ D3DRTYPE_CUBETEXTURE = 5,
+ D3DRTYPE_VERTEXBUFFER = 6,
+ D3DRTYPE_INDEXBUFFER = 7,
+
+ D3DRTYPE_FORCE_DWORD = 0x7fffffff
+} D3DRESOURCETYPE;
+
+#define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)
+
+typedef enum _D3DSHADEMODE {
+ D3DSHADE_FLAT = 1,
+ D3DSHADE_GOURAUD = 2,
+ D3DSHADE_PHONG = 3,
+
+ D3DSHADE_FORCE_DWORD = 0x7fffffff
+} D3DSHADEMODE;
+
+typedef enum _D3DSTATEBLOCKTYPE {
+ D3DSBT_ALL = 1,
+ D3DSBT_PIXELSTATE = 2,
+ D3DSBT_VERTEXSTATE = 3,
+
+ D3DSBT_FORCE_DWORD = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DSTENCILOP {
+ D3DSTENCILOP_KEEP = 1,
+ D3DSTENCILOP_ZERO = 2,
+ D3DSTENCILOP_REPLACE = 3,
+ D3DSTENCILOP_INCRSAT = 4,
+ D3DSTENCILOP_DECRSAT = 5,
+ D3DSTENCILOP_INVERT = 6,
+ D3DSTENCILOP_INCR = 7,
+ D3DSTENCILOP_DECR = 8,
+
+ D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DSWAPEFFECT {
+ D3DSWAPEFFECT_DISCARD = 1,
+ D3DSWAPEFFECT_FLIP = 2,
+ D3DSWAPEFFECT_COPY = 3,
+ D3DSWAPEFFECT_OVERLAY = 4,
+ D3DSWAPEFFECT_FLIPEX = 5,
+ D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF
+} D3DSWAPEFFECT;
+
+typedef enum _D3DTEXTUREADDRESS {
+ D3DTADDRESS_WRAP = 1,
+ D3DTADDRESS_MIRROR = 2,
+ D3DTADDRESS_CLAMP = 3,
+ D3DTADDRESS_BORDER = 4,
+ D3DTADDRESS_MIRRORONCE = 5,
+
+ D3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum _D3DTEXTUREFILTERTYPE {
+ D3DTEXF_NONE = 0,
+ D3DTEXF_POINT = 1,
+ D3DTEXF_LINEAR = 2,
+ D3DTEXF_ANISOTROPIC = 3,
+ D3DTEXF_FLATCUBIC = 4,
+ D3DTEXF_GAUSSIANCUBIC = 5,
+ D3DTEXF_PYRAMIDALQUAD = 6,
+ D3DTEXF_GAUSSIANQUAD = 7,
+ D3DTEXF_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREFILTERTYPE;
+
+typedef enum _D3DTEXTUREOP {
+ D3DTOP_DISABLE = 1,
+ D3DTOP_SELECTARG1 = 2,
+ D3DTOP_SELECTARG2 = 3,
+ D3DTOP_MODULATE = 4,
+ D3DTOP_MODULATE2X = 5,
+ D3DTOP_MODULATE4X = 6,
+ D3DTOP_ADD = 7,
+ D3DTOP_ADDSIGNED = 8,
+ D3DTOP_ADDSIGNED2X = 9,
+ D3DTOP_SUBTRACT = 10,
+ D3DTOP_ADDSMOOTH = 11,
+ D3DTOP_BLENDDIFFUSEALPHA = 12,
+ D3DTOP_BLENDTEXTUREALPHA = 13,
+ D3DTOP_BLENDFACTORALPHA = 14,
+ D3DTOP_BLENDTEXTUREALPHAPM = 15,
+ D3DTOP_BLENDCURRENTALPHA = 16,
+ D3DTOP_PREMODULATE = 17,
+ D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+ D3DTOP_MODULATECOLOR_ADDALPHA = 19,
+ D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+ D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+ D3DTOP_BUMPENVMAP = 22,
+ D3DTOP_BUMPENVMAPLUMINANCE = 23,
+ D3DTOP_DOTPRODUCT3 = 24,
+ D3DTOP_MULTIPLYADD = 25,
+ D3DTOP_LERP = 26,
+
+ D3DTOP_FORCE_DWORD = 0x7fffffff,
+} D3DTEXTUREOP;
+
+typedef enum _D3DTEXTURESTAGESTATETYPE {
+ D3DTSS_COLOROP = 1,
+ D3DTSS_COLORARG1 = 2,
+ D3DTSS_COLORARG2 = 3,
+ D3DTSS_ALPHAOP = 4,
+ D3DTSS_ALPHAARG1 = 5,
+ D3DTSS_ALPHAARG2 = 6,
+ D3DTSS_BUMPENVMAT00 = 7,
+ D3DTSS_BUMPENVMAT01 = 8,
+ D3DTSS_BUMPENVMAT10 = 9,
+ D3DTSS_BUMPENVMAT11 = 10,
+ D3DTSS_TEXCOORDINDEX = 11,
+ D3DTSS_BUMPENVLSCALE = 22,
+ D3DTSS_BUMPENVLOFFSET = 23,
+ D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+ D3DTSS_COLORARG0 = 26,
+ D3DTSS_ALPHAARG0 = 27,
+ D3DTSS_RESULTARG = 28,
+ D3DTSS_CONSTANT = 32,
+
+ D3DTSS_FORCE_DWORD = 0x7fffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+ D3DTTFF_DISABLE = 0,
+ D3DTTFF_COUNT1 = 1,
+ D3DTTFF_COUNT2 = 2,
+ D3DTTFF_COUNT3 = 3,
+ D3DTTFF_COUNT4 = 4,
+ D3DTTFF_PROJECTED = 256,
+
+ D3DTTFF_FORCE_DWORD = 0x7fffffff
+} D3DTEXTURETRANSFORMFLAGS;
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+ D3DTS_VIEW = 2,
+ D3DTS_PROJECTION = 3,
+ D3DTS_TEXTURE0 = 16,
+ D3DTS_TEXTURE1 = 17,
+ D3DTS_TEXTURE2 = 18,
+ D3DTS_TEXTURE3 = 19,
+ D3DTS_TEXTURE4 = 20,
+ D3DTS_TEXTURE5 = 21,
+ D3DTS_TEXTURE6 = 22,
+ D3DTS_TEXTURE7 = 23,
+
+ D3DTS_FORCE_DWORD = 0x7fffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS {
+ D3DVBF_DISABLE = 0,
+ D3DVBF_1WEIGHTS = 1,
+ D3DVBF_2WEIGHTS = 2,
+ D3DVBF_3WEIGHTS = 3,
+ D3DVBF_TWEENING = 255,
+ D3DVBF_0WEIGHTS = 256
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DZBUFFERTYPE {
+ D3DZB_FALSE = 0,
+ D3DZB_TRUE = 1,
+ D3DZB_USEW = 2,
+
+ D3DZB_FORCE_DWORD = 0x7fffffff
+} D3DZBUFFERTYPE;
+
+typedef enum _D3DSAMPLERSTATETYPE {
+ D3DSAMP_ADDRESSU = 1,
+ D3DSAMP_ADDRESSV = 2,
+ D3DSAMP_ADDRESSW = 3,
+ D3DSAMP_BORDERCOLOR = 4,
+ D3DSAMP_MAGFILTER = 5,
+ D3DSAMP_MINFILTER = 6,
+ D3DSAMP_MIPFILTER = 7,
+ D3DSAMP_MIPMAPLODBIAS = 8,
+ D3DSAMP_MAXMIPLEVEL = 9,
+ D3DSAMP_MAXANISOTROPY = 10,
+ D3DSAMP_SRGBTEXTURE = 11,
+ D3DSAMP_ELEMENTINDEX = 12,
+ D3DSAMP_DMAPOFFSET = 13,
+
+ D3DSAMP_FORCE_DWORD = 0x7fffffff,
+} D3DSAMPLERSTATETYPE;
+
+
+/*****************************************************************************
+ * Direct 3D v9 typedefs
+ */
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+/*****************************************************************************
+ * Direct 3D v9 structures
+ */
+typedef struct _D3DADAPTER_IDENTIFIER9 {
+ char Driver[MAX_DEVICE_IDENTIFIER_STRING];
+ char Description[MAX_DEVICE_IDENTIFIER_STRING];
+ char DeviceName[32];
+ LARGE_INTEGER DriverVersion;
+
+ DWORD VendorId;
+ DWORD DeviceId;
+ DWORD SubSysId;
+ DWORD Revision;
+
+ GUID DeviceIdentifier;
+
+ DWORD WHQLLevel;
+} D3DADAPTER_IDENTIFIER9;
+
+typedef struct _D3DBOX {
+ UINT Left;
+ UINT Top;
+ UINT Right;
+ UINT Bottom;
+ UINT Front;
+ UINT Back;
+} D3DBOX;
+
+typedef struct _D3DCLIPSTATUS9 {
+ DWORD ClipUnion;
+ DWORD ClipIntersection;
+} D3DCLIPSTATUS9;
+
+#ifndef D3DCOLORVALUE_DEFINED
+typedef struct _D3DCOLORVALUE {
+ float r;
+ float g;
+ float b;
+ float a;
+} D3DCOLORVALUE;
+#define D3DCOLORVALUE_DEFINED
+#endif
+
+typedef struct _D3DDEVICE_CREATION_PARAMETERS {
+ UINT AdapterOrdinal;
+ D3DDEVTYPE DeviceType;
+ HWND hFocusWindow;
+ DWORD BehaviorFlags;
+} D3DDEVICE_CREATION_PARAMETERS;
+
+typedef struct _D3DDEVINFO_D3D9BANDWIDTHTIMINGS {
+ float MaxBandwidthUtilized;
+ float FrontEndUploadMemoryUtilizedPercent;
+ float VertexRateUtilizedPercent;
+ float TriangleSetupRateUtilizedPercent;
+ float FillRateUtilizedPercent;
+} D3DDEVINFO_D3D9BANDWIDTHTIMINGS;
+
+typedef struct _D3DDEVINFO_D3D9CACHEUTILIZATION {
+ float TextureCacheHitRate;
+ float PostTransformVertexCacheHitRate;
+} D3DDEVINFO_D3D9CACHEUTILIZATION;
+
+typedef struct _D3DDEVINFO_D3D9INTERFACETIMINGS {
+ float WaitingForGPUToUseApplicationResourceTimePercent;
+ float WaitingForGPUToAcceptMoreCommandsTimePercent;
+ float WaitingForGPUToStayWithinLatencyTimePercent;
+ float WaitingForGPUExclusiveResourceTimePercent;
+ float WaitingForGPUOtherTimePercent;
+} D3DDEVINFO_D3D9INTERFACETIMINGS;
+
+typedef struct _D3DDEVINFO_D3D9PIPELINETIMINGS {
+ float VertexProcessingTimePercent;
+ float PixelProcessingTimePercent;
+ float OtherGPUProcessingTimePercent;
+ float GPUIdleTimePercent;
+} D3DDEVINFO_D3D9PIPELINETIMINGS;
+
+typedef struct _D3DDEVINFO_D3D9STAGETIMINGS {
+ float MemoryProcessingPercent;
+ float ComputationProcessingPercent;
+} D3DDEVINFO_D3D9STAGETIMINGS;
+
+
+/* Vertex cache optimization hints. */
+typedef struct D3DDEVINFO_VCACHE {
+ /* Must be a 4 char code FOURCC (e.g. CACH) */
+ DWORD Pattern;
+ /* 0 to get the longest strips, 1 vertex cache */
+ DWORD OptMethod;
+ /* Cache size to use (only valid if OptMethod==1) */
+ DWORD CacheSize;
+ /* internal for deciding when to restart strips, non user modifiable (only valid if OptMethod==1) */
+ DWORD MagicNumber;
+} D3DDEVINFO_VCACHE;
+
+typedef struct D3DRESOURCESTATS {
+ BOOL bThrashing;
+ DWORD ApproxBytesDownloaded;
+ DWORD NumEvicts;
+ DWORD NumVidCreates;
+ DWORD LastPri;
+ DWORD NumUsed;
+ DWORD NumUsedInVidMem;
+ DWORD WorkingSet;
+ DWORD WorkingSetBytes;
+ DWORD TotalManaged;
+ DWORD TotalBytes;
+} D3DRESOURCESTATS;
+
+typedef struct _D3DDEVINFO_D3DRESOURCEMANAGER {
+ D3DRESOURCESTATS stats[D3DRTYPECOUNT];
+} D3DDEVINFO_D3DRESOURCEMANAGER;
+
+typedef struct _D3DDEVINFO_D3DVERTEXSTATS {
+ DWORD NumRenderedTriangles;
+ DWORD NumExtraClippingTriangles;
+} D3DDEVINFO_D3DVERTEXSTATS;
+
+typedef struct _D3DDISPLAYMODE {
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ D3DFORMAT Format;
+} D3DDISPLAYMODE;
+
+typedef struct _D3DGAMMARAMP {
+ WORD red [256];
+ WORD green[256];
+ WORD blue [256];
+} D3DGAMMARAMP;
+
+typedef struct _D3DINDEXBUFFER_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+} D3DINDEXBUFFER_DESC;
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+ float x;
+ float y;
+ float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+typedef struct _D3DLIGHT9 {
+ D3DLIGHTTYPE Type;
+ D3DCOLORVALUE Diffuse;
+ D3DCOLORVALUE Specular;
+ D3DCOLORVALUE Ambient;
+ D3DVECTOR Position;
+ D3DVECTOR Direction;
+ float Range;
+ float Falloff;
+ float Attenuation0;
+ float Attenuation1;
+ float Attenuation2;
+ float Theta;
+ float Phi;
+} D3DLIGHT9;
+
+typedef struct _D3DLINEPATTERN {
+ WORD wRepeatFactor;
+ WORD wLinePattern;
+} D3DLINEPATTERN;
+
+typedef struct _D3DLOCKED_BOX {
+ INT RowPitch;
+ INT SlicePitch;
+ void* pBits;
+} D3DLOCKED_BOX;
+
+typedef struct _D3DLOCKED_RECT {
+ INT Pitch;
+ void* pBits;
+} D3DLOCKED_RECT;
+
+typedef struct _D3DMATERIAL9 {
+ D3DCOLORVALUE Diffuse;
+ D3DCOLORVALUE Ambient;
+ D3DCOLORVALUE Specular;
+ D3DCOLORVALUE Emissive;
+ float Power;
+} D3DMATERIAL9;
+
+#ifndef D3DMATRIX_DEFINED
+typedef struct _D3DMATRIX {
+ union {
+ struct {
+ float _11, _12, _13, _14;
+ float _21, _22, _23, _24;
+ float _31, _32, _33, _34;
+ float _41, _42, _43, _44;
+ } DUMMYSTRUCTNAME;
+ float m[4][4];
+ } DUMMYUNIONNAME;
+} D3DMATRIX;
+#define D3DMATRIX_DEFINED
+#endif
+
+typedef struct _D3DPRESENT_PARAMETERS_ {
+ UINT BackBufferWidth;
+ UINT BackBufferHeight;
+ D3DFORMAT BackBufferFormat;
+ UINT BackBufferCount;
+
+ D3DMULTISAMPLE_TYPE MultiSampleType;
+ DWORD MultiSampleQuality;
+
+ D3DSWAPEFFECT SwapEffect;
+ HWND hDeviceWindow;
+ BOOL Windowed;
+ BOOL EnableAutoDepthStencil;
+ D3DFORMAT AutoDepthStencilFormat;
+ DWORD Flags;
+
+ UINT FullScreen_RefreshRateInHz;
+ UINT PresentationInterval;
+
+} D3DPRESENT_PARAMETERS;
+
+typedef struct _D3DRANGE {
+ UINT Offset;
+ UINT Size;
+} D3DRANGE;
+
+typedef struct _D3DRASTER_STATUS {
+ BOOL InVBlank;
+ UINT ScanLine;
+} D3DRASTER_STATUS;
+
+#ifndef D3DRECT_DEFINED
+typedef struct _D3DRECT {
+ LONG x1;
+ LONG y1;
+ LONG x2;
+ LONG y2;
+} D3DRECT;
+#define D3DRECT_DEFINED
+#endif
+
+typedef struct _D3DRECTPATCH_INFO {
+ UINT StartVertexOffsetWidth;
+ UINT StartVertexOffsetHeight;
+ UINT Width;
+ UINT Height;
+ UINT Stride;
+ D3DBASISTYPE Basis;
+ D3DDEGREETYPE Degree;
+} D3DRECTPATCH_INFO;
+
+typedef struct _D3DSURFACE_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ D3DMULTISAMPLE_TYPE MultiSampleType;
+ DWORD MultiSampleQuality;
+ UINT Width;
+ UINT Height;
+} D3DSURFACE_DESC;
+
+typedef struct _D3DTRIPATCH_INFO {
+ UINT StartVertexOffset;
+ UINT NumVertices;
+ D3DBASISTYPE Basis;
+ D3DDEGREETYPE Degree;
+} D3DTRIPATCH_INFO;
+
+typedef struct _D3DVERTEXBUFFER_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+ UINT Size;
+ DWORD FVF;
+} D3DVERTEXBUFFER_DESC;
+
+typedef struct _D3DVIEWPORT9 {
+ DWORD X;
+ DWORD Y;
+ DWORD Width;
+ DWORD Height;
+ float MinZ;
+ float MaxZ;
+} D3DVIEWPORT9;
+
+typedef struct _D3DVOLUME_DESC {
+ D3DFORMAT Format;
+ D3DRESOURCETYPE Type;
+ DWORD Usage;
+ D3DPOOL Pool;
+
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+} D3DVOLUME_DESC;
+
+/* Parts added with d3d9ex */
+#if !defined(D3D_DISABLE_9EX)
+typedef enum D3DSCANLINEORDERING
+{
+ D3DSCANLINEORDERING_UNKNOWN,
+ D3DSCANLINEORDERING_PROGRESSIVE,
+ D3DSCANLINEORDERING_INTERLACED,
+} D3DSCANLINEORDERING;
+
+
+typedef struct D3DDISPLAYMODEFILTER
+{
+ UINT Size;
+ D3DFORMAT Format;
+ D3DSCANLINEORDERING ScanLineOrdering;
+} D3DDISPLAYMODEFILTER;
+
+typedef struct D3DDISPLAYMODEEX
+{
+ UINT Size;
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ D3DFORMAT Format;
+ D3DSCANLINEORDERING ScanLineOrdering;
+} D3DDISPLAYMODEEX;
+
+typedef enum D3DDISPLAYROTATION
+{
+ D3DDISPLAYROTATION_IDENTITY = 1,
+ D3DDISPLAYROTATION_90,
+ D3DDISPLAYROTATION_180,
+ D3DDISPLAYROTATION_270
+} D3DDISPLAYROTATION;
+
+typedef enum _D3DCOMPOSERECTSOP{
+ D3DCOMPOSERECTS_COPY = 1,
+ D3DCOMPOSERECTS_OR,
+ D3DCOMPOSERECTS_AND,
+ D3DCOMPOSERECTS_NEG,
+ D3DCOMPOSERECTS_FORCE_DWORD = 0x7fffffff
+} D3DCOMPOSERECTSOP;
+
+typedef struct _D3DPRESENTSTATS
+{
+ UINT PresentCount;
+ UINT PresentRefreshCount;
+ UINT SyncRefreshCount;
+ LARGE_INTEGER SyncQPCTime;
+ LARGE_INTEGER SyncGPUTime;
+} D3DPRESENTSTATS;
+
+#endif /* D3D_DISABLE_9EX */
+
+typedef enum _D3DSHADER_COMPARISON
+{
+ D3DSPC_RESERVED0 = 0,
+ D3DSPC_GT,
+ D3DSPC_EQ,
+ D3DSPC_GE,
+ D3DSPC_LT,
+ D3DSPC_NE,
+ D3DSPC_LE,
+ D3DSPC_RESERVED1,
+} D3DSHADER_COMPARISON;
+
+#endif /* __WINE_D3D9TYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h
new file mode 100644
index 00000000..e8076a14
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcaps.h
@@ -0,0 +1,442 @@
+/*
+ * Copyright (C) 2000 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DCAPS_H
+#define __WINE_D3DCAPS_H
+
+#include <ddraw.h>
+
+typedef struct _D3DTRANSFORMCAPS {
+ DWORD dwSize;
+ DWORD dwCaps;
+} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;
+
+#define D3DTRANSFORMCAPS_CLIP __MSABI_LONG(0x00000001)
+
+typedef struct _D3DLIGHTINGCAPS {
+ DWORD dwSize;
+ DWORD dwCaps;
+ DWORD dwLightingModel;
+ DWORD dwNumLights;
+} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;
+
+#define D3DLIGHTINGMODEL_RGB 0x00000001
+#define D3DLIGHTINGMODEL_MONO 0x00000002
+
+#define D3DLIGHTCAPS_POINT 0x00000001
+#define D3DLIGHTCAPS_SPOT 0x00000002
+#define D3DLIGHTCAPS_DIRECTIONAL 0x00000004
+#define D3DLIGHTCAPS_PARALLELPOINT 0x00000008
+#define D3DLIGHTCAPS_GLSPOT 0x00000010
+
+typedef struct _D3dPrimCaps {
+ DWORD dwSize;
+ DWORD dwMiscCaps;
+ DWORD dwRasterCaps;
+ DWORD dwZCmpCaps;
+ DWORD dwSrcBlendCaps;
+ DWORD dwDestBlendCaps;
+ DWORD dwAlphaCmpCaps;
+ DWORD dwShadeCaps;
+ DWORD dwTextureCaps;
+ DWORD dwTextureFilterCaps;
+ DWORD dwTextureBlendCaps;
+ DWORD dwTextureAddressCaps;
+ DWORD dwStippleWidth;
+ DWORD dwStippleHeight;
+} D3DPRIMCAPS, *LPD3DPRIMCAPS;
+
+#define D3DPMISCCAPS_MASKPLANES 0x00000001
+#define D3DPMISCCAPS_MASKZ 0x00000002
+#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004
+#define D3DPMISCCAPS_CONFORMANT 0x00000008
+#define D3DPMISCCAPS_CULLNONE 0x00000010
+#define D3DPMISCCAPS_CULLCW 0x00000020
+#define D3DPMISCCAPS_CULLCCW 0x00000040
+
+#define D3DPRASTERCAPS_DITHER 0x00000001
+#define D3DPRASTERCAPS_ROP2 0x00000002
+#define D3DPRASTERCAPS_XOR 0x00000004
+#define D3DPRASTERCAPS_PAT 0x00000008
+#define D3DPRASTERCAPS_ZTEST 0x00000010
+#define D3DPRASTERCAPS_SUBPIXEL 0x00000020
+#define D3DPRASTERCAPS_SUBPIXELX 0x00000040
+#define D3DPRASTERCAPS_FOGVERTEX 0x00000080
+#define D3DPRASTERCAPS_FOGTABLE 0x00000100
+#define D3DPRASTERCAPS_STIPPLE 0x00000200
+#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT 0x00000400
+#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800
+#define D3DPRASTERCAPS_ANTIALIASEDGES 0x00001000
+#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000
+#define D3DPRASTERCAPS_ZBIAS 0x00004000
+#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000
+#define D3DPRASTERCAPS_FOGRANGE 0x00010000
+#define D3DPRASTERCAPS_ANISOTROPY 0x00020000
+#define D3DPRASTERCAPS_WBUFFER 0x00040000
+#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT 0x00080000
+#define D3DPRASTERCAPS_WFOG 0x00100000
+#define D3DPRASTERCAPS_ZFOG 0x00200000
+
+#define D3DPCMPCAPS_NEVER 0x00000001
+#define D3DPCMPCAPS_LESS 0x00000002
+#define D3DPCMPCAPS_EQUAL 0x00000004
+#define D3DPCMPCAPS_LESSEQUAL 0x00000008
+#define D3DPCMPCAPS_GREATER 0x00000010
+#define D3DPCMPCAPS_NOTEQUAL 0x00000020
+#define D3DPCMPCAPS_GREATEREQUAL 0x00000040
+#define D3DPCMPCAPS_ALWAYS 0x00000080
+
+#define D3DPBLENDCAPS_ZERO 0x00000001
+#define D3DPBLENDCAPS_ONE 0x00000002
+#define D3DPBLENDCAPS_SRCCOLOR 0x00000004
+#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008
+#define D3DPBLENDCAPS_SRCALPHA 0x00000010
+#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020
+#define D3DPBLENDCAPS_DESTALPHA 0x00000040
+#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080
+#define D3DPBLENDCAPS_DESTCOLOR 0x00000100
+#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200
+#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400
+#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800
+#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000
+
+#define D3DPSHADECAPS_COLORFLATMONO 0x00000001
+#define D3DPSHADECAPS_COLORFLATRGB 0x00000002
+#define D3DPSHADECAPS_COLORGOURAUDMONO 0x00000004
+#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008
+#define D3DPSHADECAPS_COLORPHONGMONO 0x00000010
+#define D3DPSHADECAPS_COLORPHONGRGB 0x00000020
+
+#define D3DPSHADECAPS_SPECULARFLATMONO 0x00000040
+#define D3DPSHADECAPS_SPECULARFLATRGB 0x00000080
+#define D3DPSHADECAPS_SPECULARGOURAUDMONO 0x00000100
+#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200
+#define D3DPSHADECAPS_SPECULARPHONGMONO 0x00000400
+#define D3DPSHADECAPS_SPECULARPHONGRGB 0x00000800
+
+#define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000
+#define D3DPSHADECAPS_ALPHAFLATSTIPPLED 0x00002000
+#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000
+#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED 0x00008000
+#define D3DPSHADECAPS_ALPHAPHONGBLEND 0x00010000
+#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED 0x00020000
+
+#define D3DPSHADECAPS_FOGFLAT 0x00040000
+#define D3DPSHADECAPS_FOGGOURAUD 0x00080000
+#define D3DPSHADECAPS_FOGPHONG 0x00100000
+
+#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001
+#define D3DPTEXTURECAPS_POW2 0x00000002
+#define D3DPTEXTURECAPS_ALPHA 0x00000004
+#define D3DPTEXTURECAPS_TRANSPARENCY 0x00000008
+#define D3DPTEXTURECAPS_BORDER 0x00000010
+#define D3DPTEXTURECAPS_SQUAREONLY 0x00000020
+#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040
+#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080
+#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL __MSABI_LONG(0x00000100)
+/* yes actually 0x00000200 is unused - or at least unreleased */
+#define D3DPTEXTURECAPS_PROJECTED 0x00000400
+#define D3DPTEXTURECAPS_CUBEMAP 0x00000800
+#define D3DPTEXTURECAPS_COLORKEYBLEND 0x00001000
+
+#define D3DPTFILTERCAPS_NEAREST 0x00000001
+#define D3DPTFILTERCAPS_LINEAR 0x00000002
+#define D3DPTFILTERCAPS_MIPNEAREST 0x00000004
+#define D3DPTFILTERCAPS_MIPLINEAR 0x00000008
+#define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010
+#define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020
+/* yes - missing numbers */
+#define D3DPTFILTERCAPS_MINFPOINT 0x00000100
+#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200
+#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400
+/* yes - missing numbers */
+#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000
+#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000
+/* yes - missing numbers */
+#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000
+#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000
+#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000
+#define D3DPTFILTERCAPS_MAGFAFLATCUBIC 0x08000000
+#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000
+
+#define D3DPTBLENDCAPS_DECAL 0x00000001
+#define D3DPTBLENDCAPS_MODULATE 0x00000002
+#define D3DPTBLENDCAPS_DECALALPHA 0x00000004
+#define D3DPTBLENDCAPS_MODULATEALPHA 0x00000008
+#define D3DPTBLENDCAPS_DECALMASK 0x00000010
+#define D3DPTBLENDCAPS_MODULATEMASK 0x00000020
+#define D3DPTBLENDCAPS_COPY 0x00000040
+#define D3DPTBLENDCAPS_ADD 0x00000080
+
+#define D3DPTADDRESSCAPS_WRAP 0x00000001
+#define D3DPTADDRESSCAPS_MIRROR 0x00000002
+#define D3DPTADDRESSCAPS_CLAMP 0x00000004
+#define D3DPTADDRESSCAPS_BORDER 0x00000008
+#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010
+
+
+typedef struct _D3DDeviceDesc {
+ DWORD dwSize;
+ DWORD dwFlags;
+ D3DCOLORMODEL dcmColorModel;
+ DWORD dwDevCaps;
+ D3DTRANSFORMCAPS dtcTransformCaps;
+ BOOL bClipping;
+ D3DLIGHTINGCAPS dlcLightingCaps;
+ D3DPRIMCAPS dpcLineCaps;
+ D3DPRIMCAPS dpcTriCaps;
+ DWORD dwDeviceRenderBitDepth;
+ DWORD dwDeviceZBufferBitDepth;
+ DWORD dwMaxBufferSize;
+ DWORD dwMaxVertexCount;
+
+ DWORD dwMinTextureWidth,dwMinTextureHeight;
+ DWORD dwMaxTextureWidth,dwMaxTextureHeight;
+ DWORD dwMinStippleWidth,dwMaxStippleWidth;
+ DWORD dwMinStippleHeight,dwMaxStippleHeight;
+
+ DWORD dwMaxTextureRepeat;
+ DWORD dwMaxTextureAspectRatio;
+ DWORD dwMaxAnisotropy;
+
+ D3DVALUE dvGuardBandLeft;
+ D3DVALUE dvGuardBandTop;
+ D3DVALUE dvGuardBandRight;
+ D3DVALUE dvGuardBandBottom;
+
+ D3DVALUE dvExtentsAdjust;
+ DWORD dwStencilCaps;
+
+ DWORD dwFVFCaps;
+ DWORD dwTextureOpCaps;
+ WORD wMaxTextureBlendStages;
+ WORD wMaxSimultaneousTextures;
+} D3DDEVICEDESC,*LPD3DDEVICEDESC;
+#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))
+
+typedef struct _D3DDeviceDesc7 {
+ DWORD dwDevCaps;
+ D3DPRIMCAPS dpcLineCaps;
+ D3DPRIMCAPS dpcTriCaps;
+ DWORD dwDeviceRenderBitDepth;
+ DWORD dwDeviceZBufferBitDepth;
+
+ DWORD dwMinTextureWidth, dwMinTextureHeight;
+ DWORD dwMaxTextureWidth, dwMaxTextureHeight;
+
+ DWORD dwMaxTextureRepeat;
+ DWORD dwMaxTextureAspectRatio;
+ DWORD dwMaxAnisotropy;
+
+ D3DVALUE dvGuardBandLeft;
+ D3DVALUE dvGuardBandTop;
+ D3DVALUE dvGuardBandRight;
+ D3DVALUE dvGuardBandBottom;
+
+ D3DVALUE dvExtentsAdjust;
+ DWORD dwStencilCaps;
+ DWORD dwFVFCaps;
+ DWORD dwTextureOpCaps;
+ WORD wMaxTextureBlendStages;
+ WORD wMaxSimultaneousTextures;
+
+ DWORD dwMaxActiveLights;
+ D3DVALUE dvMaxVertexW;
+ GUID deviceGUID;
+
+ WORD wMaxUserClipPlanes;
+ WORD wMaxVertexBlendMatrices;
+
+ DWORD dwVertexProcessingCaps;
+
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwReserved4;
+} D3DDEVICEDESC7, *LPD3DDEVICEDESC7;
+#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7))
+
+#define D3DDD_COLORMODEL 0x00000001
+#define D3DDD_DEVCAPS 0x00000002
+#define D3DDD_TRANSFORMCAPS 0x00000004
+#define D3DDD_LIGHTINGCAPS 0x00000008
+#define D3DDD_BCLIPPING 0x00000010
+#define D3DDD_LINECAPS 0x00000020
+#define D3DDD_TRICAPS 0x00000040
+#define D3DDD_DEVICERENDERBITDEPTH 0x00000080
+#define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100
+#define D3DDD_MAXBUFFERSIZE 0x00000200
+#define D3DDD_MAXVERTEXCOUNT 0x00000400
+
+#define D3DDEVCAPS_FLOATTLVERTEX 0x00000001
+#define D3DDEVCAPS_SORTINCREASINGZ 0x00000002
+#define D3DDEVCAPS_SORTDECREASINGZ 0X00000004
+#define D3DDEVCAPS_SORTEXACT 0x00000008
+#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010
+#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020
+#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040
+#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080
+#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100
+#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200
+#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400
+#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800
+#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000
+#define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000
+#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000
+#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000
+#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000
+#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000
+#define D3DDEVCAPS_HWRASTERIZATION 0x00080000
+
+#define D3DSTENCILCAPS_KEEP 0x00000001
+#define D3DSTENCILCAPS_ZERO 0x00000002
+#define D3DSTENCILCAPS_REPLACE 0x00000004
+#define D3DSTENCILCAPS_INCRSAT 0x00000008
+#define D3DSTENCILCAPS_DECRSAT 0x00000010
+#define D3DSTENCILCAPS_INVERT 0x00000020
+#define D3DSTENCILCAPS_INCR 0x00000040
+#define D3DSTENCILCAPS_DECR 0x00000080
+
+#define D3DTEXOPCAPS_DISABLE 0x00000001
+#define D3DTEXOPCAPS_SELECTARG1 0x00000002
+#define D3DTEXOPCAPS_SELECTARG2 0x00000004
+#define D3DTEXOPCAPS_MODULATE 0x00000008
+#define D3DTEXOPCAPS_MODULATE2X 0x00000010
+#define D3DTEXOPCAPS_MODULATE4X 0x00000020
+#define D3DTEXOPCAPS_ADD 0x00000040
+#define D3DTEXOPCAPS_ADDSIGNED 0x00000080
+#define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100
+#define D3DTEXOPCAPS_SUBTRACT 0x00000200
+#define D3DTEXOPCAPS_ADDSMOOTH 0x00000400
+#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000
+#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000
+#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000
+#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000
+#define D3DTEXOPCAPS_PREMODULATE 0x00010000
+#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000
+#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000
+#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000
+#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000
+#define D3DTEXOPCAPS_BUMPENVMAP 0x00200000
+#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000
+#define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000
+
+#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000FFFF
+#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000
+
+#define D3DVTXPCAPS_TEXGEN 0x00000001
+#define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002
+#define D3DVTXPCAPS_VERTEXFOG 0x00000004
+#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008
+#define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010
+#define D3DVTXPCAPS_LOCALVIEWER 0x00000020
+
+typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK)(GUID *guid, char *description, char *name,
+ D3DDEVICEDESC *hal_desc, D3DDEVICEDESC *hel_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPD3DENUMDEVICESCALLBACK7)(char *description, char *name, D3DDEVICEDESC7 *desc, void *ctx);
+
+#define D3DFDS_COLORMODEL 0x00000001
+#define D3DFDS_GUID 0x00000002
+#define D3DFDS_HARDWARE 0x00000004
+#define D3DFDS_TRIANGLES 0x00000008
+#define D3DFDS_LINES 0x00000010
+#define D3DFDS_MISCCAPS 0x00000020
+#define D3DFDS_RASTERCAPS 0x00000040
+#define D3DFDS_ZCMPCAPS 0x00000080
+#define D3DFDS_ALPHACMPCAPS 0x00000100
+#define D3DFDS_SRCBLENDCAPS 0x00000200
+#define D3DFDS_DSTBLENDCAPS 0x00000400
+#define D3DFDS_SHADECAPS 0x00000800
+#define D3DFDS_TEXTURECAPS 0x00001000
+#define D3DFDS_TEXTUREFILTERCAPS 0x00002000
+#define D3DFDS_TEXTUREBLENDCAPS 0x00004000
+#define D3DFDS_TEXTUREADDRESSCAPS 0x00008000
+
+typedef struct _D3DFINDDEVICESEARCH {
+ DWORD dwSize;
+ DWORD dwFlags;
+ BOOL bHardware;
+ D3DCOLORMODEL dcmColorModel;
+ GUID guid;
+ DWORD dwCaps;
+ D3DPRIMCAPS dpcPrimCaps;
+} D3DFINDDEVICESEARCH,*LPD3DFINDDEVICESEARCH;
+
+typedef struct _D3DFINDDEVICERESULT {
+ DWORD dwSize;
+ GUID guid;
+ D3DDEVICEDESC ddHwDesc;
+ D3DDEVICEDESC ddSwDesc;
+} D3DFINDDEVICERESULT,*LPD3DFINDDEVICERESULT;
+
+typedef struct _D3DExecuteBufferDesc {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ DWORD dwBufferSize;
+ void *lpData;
+} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;
+
+#define D3DDEB_BUFSIZE 0x00000001
+#define D3DDEB_CAPS 0x00000002
+#define D3DDEB_LPDATA 0x00000004
+
+#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001
+#define D3DDEBCAPS_VIDEOMEMORY 0x00000002
+#define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY) /* = 0x3 */
+
+typedef struct _D3DDEVINFO_TEXTUREMANAGER {
+ BOOL bThrashing;
+ DWORD dwApproxBytesDownloaded;
+ DWORD dwNumEvicts;
+ DWORD dwNumVidCreates;
+ DWORD dwNumTexturesUsed;
+ DWORD dwNumUsedTexInVid;
+ DWORD dwWorkingSet;
+ DWORD dwWorkingSetBytes;
+ DWORD dwTotalManaged;
+ DWORD dwTotalBytes;
+ DWORD dwLastPri;
+} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER;
+
+typedef struct _D3DDEVINFO_TEXTURING {
+ DWORD dwNumLoads;
+ DWORD dwApproxBytesLoaded;
+ DWORD dwNumPreLoads;
+ DWORD dwNumSet;
+ DWORD dwNumCreates;
+ DWORD dwNumDestroys;
+ DWORD dwNumSetPriorities;
+ DWORD dwNumSetLODs;
+ DWORD dwNumLocks;
+ DWORD dwNumGetDCs;
+} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING;
+
+
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl
new file mode 100644
index 00000000..13681feb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcommon.idl
@@ -0,0 +1,648 @@
+/*
+ * Copyright 2010 Matteo Bruni for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+typedef struct _D3D_SHADER_MACRO
+{
+ const char *Name;
+ const char *Definition;
+} D3D_SHADER_MACRO;
+
+typedef struct _D3D_SHADER_MACRO* LPD3D_SHADER_MACRO;
+
+[
+ object,
+ local,
+ uuid(8ba5fb08-5195-40e2-ac58-0d989c3a0102)
+]
+interface ID3D10Blob : IUnknown
+{
+ void *GetBufferPointer();
+ SIZE_T GetBufferSize();
+}
+
+typedef ID3D10Blob* LPD3D10BLOB;
+typedef ID3D10Blob ID3DBlob;
+typedef ID3DBlob* LPD3DBLOB;
+cpp_quote("#define IID_ID3DBlob IID_ID3D10Blob")
+
+typedef enum _D3D_INCLUDE_TYPE
+{
+ D3D_INCLUDE_LOCAL = 0,
+ D3D_INCLUDE_SYSTEM,
+ D3D10_INCLUDE_LOCAL = D3D_INCLUDE_LOCAL,
+ D3D10_INCLUDE_SYSTEM = D3D_INCLUDE_SYSTEM,
+ D3D_INCLUDE_FORCE_DWORD = 0x7fffffff
+} D3D_INCLUDE_TYPE;
+
+[
+ object,
+ local,
+]
+interface ID3DInclude
+{
+ HRESULT Open(D3D_INCLUDE_TYPE include_type,
+ const char *filename,
+ const void *parent_data,
+ const void **data,
+ UINT *bytes);
+ HRESULT Close(const void *data);
+}
+
+typedef ID3DInclude* LPD3DINCLUDE;
+
+typedef enum D3D_DRIVER_TYPE
+{
+ D3D_DRIVER_TYPE_UNKNOWN,
+ D3D_DRIVER_TYPE_HARDWARE,
+ D3D_DRIVER_TYPE_REFERENCE,
+ D3D_DRIVER_TYPE_NULL,
+ D3D_DRIVER_TYPE_SOFTWARE,
+ D3D_DRIVER_TYPE_WARP,
+} D3D_DRIVER_TYPE;
+
+typedef enum D3D_FEATURE_LEVEL
+{
+ D3D_FEATURE_LEVEL_9_1 = 0x9100,
+ D3D_FEATURE_LEVEL_9_2 = 0x9200,
+ D3D_FEATURE_LEVEL_9_3 = 0x9300,
+ D3D_FEATURE_LEVEL_10_0 = 0xa000,
+ D3D_FEATURE_LEVEL_10_1 = 0xa100,
+ D3D_FEATURE_LEVEL_11_0 = 0xb000,
+ D3D_FEATURE_LEVEL_11_1 = 0xb100
+} D3D_FEATURE_LEVEL;
+
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURE1D_U_DIMENSION 2048")
+cpp_quote("#define D3D_FL9_3_REQ_TEXTURE1D_U_DIMENSION 4096")
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION 2048")
+cpp_quote("#define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096")
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION 512")
+cpp_quote("#define D3D_FL9_3_REQ_TEXTURECUBE_DIMENSION 4096")
+cpp_quote("#define D3D_FL9_1_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 256")
+cpp_quote("#define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY 2")
+cpp_quote("#define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT 65535")
+cpp_quote("#define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT 1048575")
+cpp_quote("#define D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT 1")
+cpp_quote("#define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT 4")
+cpp_quote("#define D3D_FL9_1_MAX_TEXTURE_REPEAT 128")
+cpp_quote("#define D3D_FL9_2_MAX_TEXTURE_REPEAT 2048")
+cpp_quote("#define D3D_FL9_3_MAX_TEXTURE_REPEAT 8192")
+
+typedef enum _D3D_SHADER_VARIABLE_CLASS
+{
+ D3D_SVC_SCALAR,
+ D3D_SVC_VECTOR,
+ D3D_SVC_MATRIX_ROWS,
+ D3D_SVC_MATRIX_COLUMNS,
+ D3D_SVC_OBJECT,
+ D3D_SVC_STRUCT,
+ D3D_SVC_INTERFACE_CLASS,
+ D3D_SVC_INTERFACE_POINTER,
+ D3D10_SVC_SCALAR = 0,
+ D3D10_SVC_VECTOR,
+ D3D10_SVC_MATRIX_ROWS,
+ D3D10_SVC_MATRIX_COLUMNS,
+ D3D10_SVC_OBJECT,
+ D3D10_SVC_STRUCT,
+ D3D11_SVC_INTERFACE_CLASS,
+ D3D11_SVC_INTERFACE_POINTER,
+ D3D_SVC_FORCE_DWORD = 0x7fffffff,
+} D3D_SHADER_VARIABLE_CLASS;
+
+typedef enum _D3D_SHADER_VARIABLE_TYPE
+{
+ D3D_SVT_VOID,
+ D3D_SVT_BOOL,
+ D3D_SVT_INT,
+ D3D_SVT_FLOAT,
+ D3D_SVT_STRING,
+ D3D_SVT_TEXTURE,
+ D3D_SVT_TEXTURE1D,
+ D3D_SVT_TEXTURE2D,
+ D3D_SVT_TEXTURE3D,
+ D3D_SVT_TEXTURECUBE,
+ D3D_SVT_SAMPLER,
+ D3D_SVT_SAMPLER1D,
+ D3D_SVT_SAMPLER2D,
+ D3D_SVT_SAMPLER3D,
+ D3D_SVT_SAMPLERCUBE,
+ D3D_SVT_PIXELSHADER,
+ D3D_SVT_VERTEXSHADER,
+ D3D_SVT_PIXELFRAGMENT,
+ D3D_SVT_VERTEXFRAGMENT,
+ D3D_SVT_UINT,
+ D3D_SVT_UINT8,
+ D3D_SVT_GEOMETRYSHADER,
+ D3D_SVT_RASTERIZER,
+ D3D_SVT_DEPTHSTENCIL,
+ D3D_SVT_BLEND,
+ D3D_SVT_BUFFER,
+ D3D_SVT_CBUFFER,
+ D3D_SVT_TBUFFER,
+ D3D_SVT_TEXTURE1DARRAY,
+ D3D_SVT_TEXTURE2DARRAY,
+ D3D_SVT_RENDERTARGETVIEW,
+ D3D_SVT_DEPTHSTENCILVIEW,
+ D3D_SVT_TEXTURE2DMS,
+ D3D_SVT_TEXTURE2DMSARRAY,
+ D3D_SVT_TEXTURECUBEARRAY,
+ D3D_SVT_HULLSHADER,
+ D3D_SVT_DOMAINSHADER,
+ D3D_SVT_INTERFACE_POINTER,
+ D3D_SVT_COMPUTESHADER,
+ D3D_SVT_DOUBLE,
+ D3D_SVT_RWTEXTURE1D,
+ D3D_SVT_RWTEXTURE1DARRAY,
+ D3D_SVT_RWTEXTURE2D,
+ D3D_SVT_RWTEXTURE2DARRAY,
+ D3D_SVT_RWTEXTURE3D,
+ D3D_SVT_RWBUFFER,
+ D3D_SVT_BYTEADDRESS_BUFFER,
+ D3D_SVT_RWBYTEADDRESS_BUFFER,
+ D3D_SVT_STRUCTURED_BUFFER,
+ D3D_SVT_RWSTRUCTURED_BUFFER,
+ D3D_SVT_APPEND_STRUCTURED_BUFFER,
+ D3D_SVT_CONSUME_STRUCTURED_BUFFER,
+ D3D10_SVT_VOID = 0,
+ D3D10_SVT_BOOL,
+ D3D10_SVT_INT,
+ D3D10_SVT_FLOAT,
+ D3D10_SVT_STRING,
+ D3D10_SVT_TEXTURE,
+ D3D10_SVT_TEXTURE1D,
+ D3D10_SVT_TEXTURE2D,
+ D3D10_SVT_TEXTURE3D,
+ D3D10_SVT_TEXTURECUBE,
+ D3D10_SVT_SAMPLER,
+ D3D10_SVT_SAMPLER1D,
+ D3D10_SVT_SAMPLER2D,
+ D3D10_SVT_SAMPLER3D,
+ D3D10_SVT_SAMPLERCUBE,
+ D3D10_SVT_PIXELSHADER,
+ D3D10_SVT_VERTEXSHADER,
+ D3D10_SVT_PIXELFRAGMENT,
+ D3D10_SVT_VERTEXFRAGMENT,
+ D3D10_SVT_UINT,
+ D3D10_SVT_UINT8,
+ D3D10_SVT_GEOMETRYSHADER,
+ D3D10_SVT_RASTERIZER,
+ D3D10_SVT_DEPTHSTENCIL,
+ D3D10_SVT_BLEND,
+ D3D10_SVT_BUFFER,
+ D3D10_SVT_CBUFFER,
+ D3D10_SVT_TBUFFER,
+ D3D10_SVT_TEXTURE1DARRAY,
+ D3D10_SVT_TEXTURE2DARRAY,
+ D3D10_SVT_RENDERTARGETVIEW,
+ D3D10_SVT_DEPTHSTENCILVIEW,
+ D3D10_SVT_TEXTURE2DMS,
+ D3D10_SVT_TEXTURE2DMSARRAY,
+ D3D10_SVT_TEXTURECUBEARRAY,
+ D3D11_SVT_HULLSHADER,
+ D3D11_SVT_DOMAINSHADER,
+ D3D11_SVT_INTERFACE_POINTER,
+ D3D11_SVT_COMPUTESHADER,
+ D3D11_SVT_DOUBLE,
+ D3D11_SVT_RWTEXTURE1D,
+ D3D11_SVT_RWTEXTURE1DARRAY,
+ D3D11_SVT_RWTEXTURE2D,
+ D3D11_SVT_RWTEXTURE2DARRAY,
+ D3D11_SVT_RWTEXTURE3D,
+ D3D11_SVT_RWBUFFER,
+ D3D11_SVT_BYTEADDRESS_BUFFER,
+ D3D11_SVT_RWBYTEADDRESS_BUFFER,
+ D3D11_SVT_STRUCTURED_BUFFER,
+ D3D11_SVT_RWSTRUCTURED_BUFFER,
+ D3D11_SVT_APPEND_STRUCTURED_BUFFER,
+ D3D11_SVT_CONSUME_STRUCTURED_BUFFER,
+ D3D_SVT_FORCE_DWORD = 0x7fffffff,
+} D3D_SHADER_VARIABLE_TYPE;
+
+typedef enum D3D_PRIMITIVE
+{
+ D3D_PRIMITIVE_UNDEFINED,
+ D3D_PRIMITIVE_POINT,
+ D3D_PRIMITIVE_LINE,
+ D3D_PRIMITIVE_TRIANGLE,
+ D3D_PRIMITIVE_LINE_ADJ = 6,
+ D3D_PRIMITIVE_TRIANGLE_ADJ,
+ D3D_PRIMITIVE_1_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_2_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_3_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_4_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_5_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_6_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_7_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_8_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_9_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_10_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_11_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_12_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_13_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_14_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_15_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_16_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_17_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_18_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_19_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,
+ D3D_PRIMITIVE_21_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_22_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_23_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_24_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_25_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_26_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_27_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_28_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_29_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_30_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_31_CONTROL_POINT_PATCH,
+ D3D_PRIMITIVE_32_CONTROL_POINT_PATCH,
+ D3D10_PRIMITIVE_UNDEFINED = 0,
+ D3D10_PRIMITIVE_POINT,
+ D3D10_PRIMITIVE_LINE,
+ D3D10_PRIMITIVE_TRIANGLE,
+ D3D10_PRIMITIVE_LINE_ADJ = 6,
+ D3D10_PRIMITIVE_TRIANGLE_ADJ,
+ D3D11_PRIMITIVE_UNDEFINED = 0,
+ D3D11_PRIMITIVE_POINT,
+ D3D11_PRIMITIVE_LINE,
+ D3D11_PRIMITIVE_TRIANGLE,
+ D3D11_PRIMITIVE_LINE_ADJ = 6,
+ D3D11_PRIMITIVE_TRIANGLE_ADJ,
+ D3D11_PRIMITIVE_1_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_2_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_3_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_4_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_5_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_6_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_7_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_8_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_9_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_10_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_11_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_12_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_13_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_14_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_15_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_16_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_17_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_18_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_19_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_20_CONTROL_POINT_PATCH = 28,
+ D3D11_PRIMITIVE_21_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_22_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_23_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_24_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_25_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_26_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_27_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_28_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_29_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_30_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_31_CONTROL_POINT_PATCH,
+ D3D11_PRIMITIVE_32_CONTROL_POINT_PATCH,
+} D3D_PRIMITIVE;
+
+typedef enum D3D_PRIMITIVE_TOPOLOGY
+{
+ D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,
+ D3D_PRIMITIVE_TOPOLOGY_POINTLIST,
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST,
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+ D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+ D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+ D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+ D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,
+ D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,
+ D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,
+ D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+ D3D10_PRIMITIVE_TOPOLOGY_POINTLIST,
+ D3D10_PRIMITIVE_TOPOLOGY_LINELIST,
+ D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP,
+ D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+ D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+ D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+ D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+ D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+ D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+ D3D11_PRIMITIVE_TOPOLOGY_POINTLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_LINELIST,
+ D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,
+ D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+ D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,
+ D3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST = 33,
+ D3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,
+ D3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST,
+} D3D_PRIMITIVE_TOPOLOGY;
+
+typedef enum D3D_TESSELLATOR_DOMAIN
+{
+ D3D_TESSELLATOR_DOMAIN_UNDEFINED,
+ D3D_TESSELLATOR_DOMAIN_ISOLINE,
+ D3D_TESSELLATOR_DOMAIN_TRI,
+ D3D_TESSELLATOR_DOMAIN_QUAD,
+ D3D11_TESSELLATOR_DOMAIN_UNDEFINED = 0,
+ D3D11_TESSELLATOR_DOMAIN_ISOLINE,
+ D3D11_TESSELLATOR_DOMAIN_TRI,
+ D3D11_TESSELLATOR_DOMAIN_QUAD,
+} D3D_TESSELLATOR_DOMAIN;
+
+typedef enum D3D_TESSELLATOR_PARTITIONING
+{
+ D3D_TESSELLATOR_PARTITIONING_UNDEFINED,
+ D3D_TESSELLATOR_PARTITIONING_INTEGER,
+ D3D_TESSELLATOR_PARTITIONING_POW2,
+ D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
+ D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
+ D3D11_TESSELLATOR_PARTITIONING_UNDEFINED = 0,
+ D3D11_TESSELLATOR_PARTITIONING_INTEGER,
+ D3D11_TESSELLATOR_PARTITIONING_POW2,
+ D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,
+ D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN,
+} D3D_TESSELLATOR_PARTITIONING;
+
+typedef enum D3D_TESSELLATOR_OUTPUT_PRIMITIVE
+{
+ D3D_TESSELLATOR_OUTPUT_UNDEFINED,
+ D3D_TESSELLATOR_OUTPUT_POINT,
+ D3D_TESSELLATOR_OUTPUT_LINE,
+ D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW,
+ D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
+ D3D11_TESSELLATOR_OUTPUT_UNDEFINED = 0,
+ D3D11_TESSELLATOR_OUTPUT_POINT,
+ D3D11_TESSELLATOR_OUTPUT_LINE,
+ D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW,
+ D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW,
+} D3D_TESSELLATOR_OUTPUT_PRIMITIVE;
+
+typedef enum D3D_CBUFFER_TYPE
+{
+ D3D_CT_CBUFFER,
+ D3D_CT_TBUFFER,
+ D3D_CT_INTERFACE_POINTERS,
+ D3D_CT_RESOURCE_BIND_INFO,
+ D3D10_CT_CBUFFER = 0,
+ D3D10_CT_TBUFFER,
+ D3D11_CT_CBUFFER = 0,
+ D3D11_CT_TBUFFER,
+ D3D11_CT_INTERFACE_POINTERS,
+ D3D11_CT_RESOURCE_BIND_INFO,
+} D3D_CBUFFER_TYPE;
+
+typedef enum D3D_SRV_DIMENSION
+{
+ D3D_SRV_DIMENSION_UNKNOWN,
+ D3D_SRV_DIMENSION_BUFFER,
+ D3D_SRV_DIMENSION_TEXTURE1D,
+ D3D_SRV_DIMENSION_TEXTURE1DARRAY,
+ D3D_SRV_DIMENSION_TEXTURE2D,
+ D3D_SRV_DIMENSION_TEXTURE2DARRAY,
+ D3D_SRV_DIMENSION_TEXTURE2DMS,
+ D3D_SRV_DIMENSION_TEXTURE2DMSARRAY,
+ D3D_SRV_DIMENSION_TEXTURE3D,
+ D3D_SRV_DIMENSION_TEXTURECUBE,
+ D3D_SRV_DIMENSION_TEXTURECUBEARRAY,
+ D3D_SRV_DIMENSION_BUFFEREX,
+ D3D10_SRV_DIMENSION_UNKNOWN = 0,
+ D3D10_SRV_DIMENSION_BUFFER,
+ D3D10_SRV_DIMENSION_TEXTURE1D,
+ D3D10_SRV_DIMENSION_TEXTURE1DARRAY,
+ D3D10_SRV_DIMENSION_TEXTURE2D,
+ D3D10_SRV_DIMENSION_TEXTURE2DARRAY,
+ D3D10_SRV_DIMENSION_TEXTURE2DMS,
+ D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY,
+ D3D10_SRV_DIMENSION_TEXTURE3D,
+ D3D10_SRV_DIMENSION_TEXTURECUBE,
+ D3D10_1_SRV_DIMENSION_UNKNOWN = 0,
+ D3D10_1_SRV_DIMENSION_BUFFER,
+ D3D10_1_SRV_DIMENSION_TEXTURE1D,
+ D3D10_1_SRV_DIMENSION_TEXTURE1DARRAY,
+ D3D10_1_SRV_DIMENSION_TEXTURE2D,
+ D3D10_1_SRV_DIMENSION_TEXTURE2DARRAY,
+ D3D10_1_SRV_DIMENSION_TEXTURE2DMS,
+ D3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY,
+ D3D10_1_SRV_DIMENSION_TEXTURE3D,
+ D3D10_1_SRV_DIMENSION_TEXTURECUBE,
+ D3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY,
+ D3D11_SRV_DIMENSION_UNKNOWN = 0,
+ D3D11_SRV_DIMENSION_BUFFER,
+ D3D11_SRV_DIMENSION_TEXTURE1D,
+ D3D11_SRV_DIMENSION_TEXTURE1DARRAY,
+ D3D11_SRV_DIMENSION_TEXTURE2D,
+ D3D11_SRV_DIMENSION_TEXTURE2DARRAY,
+ D3D11_SRV_DIMENSION_TEXTURE2DMS,
+ D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY,
+ D3D11_SRV_DIMENSION_TEXTURE3D,
+ D3D11_SRV_DIMENSION_TEXTURECUBE,
+ D3D11_SRV_DIMENSION_TEXTURECUBEARRAY,
+ D3D11_SRV_DIMENSION_BUFFEREX,
+} D3D_SRV_DIMENSION;
+
+typedef enum D3D_REGISTER_COMPONENT_TYPE
+{
+ D3D_REGISTER_COMPONENT_UNKNOWN,
+ D3D_REGISTER_COMPONENT_UINT32,
+ D3D_REGISTER_COMPONENT_SINT32,
+ D3D_REGISTER_COMPONENT_FLOAT32,
+ D3D10_REGISTER_COMPONENT_UNKNOWN = 0,
+ D3D10_REGISTER_COMPONENT_UINT32,
+ D3D10_REGISTER_COMPONENT_SINT32,
+ D3D10_REGISTER_COMPONENT_FLOAT32,
+} D3D_REGISTER_COMPONENT_TYPE;
+
+typedef enum D3D_RESOURCE_RETURN_TYPE
+{
+ D3D_RETURN_TYPE_UNORM = 1,
+ D3D_RETURN_TYPE_SNORM,
+ D3D_RETURN_TYPE_SINT,
+ D3D_RETURN_TYPE_UINT,
+ D3D_RETURN_TYPE_FLOAT,
+ D3D_RETURN_TYPE_MIXED,
+ D3D_RETURN_TYPE_DOUBLE,
+ D3D_RETURN_TYPE_CONTINUED,
+ D3D10_RETURN_TYPE_UNORM = 1,
+ D3D10_RETURN_TYPE_SNORM,
+ D3D10_RETURN_TYPE_SINT,
+ D3D10_RETURN_TYPE_UINT,
+ D3D10_RETURN_TYPE_FLOAT,
+ D3D10_RETURN_TYPE_MIXED,
+ D3D11_RETURN_TYPE_UNORM = 1,
+ D3D11_RETURN_TYPE_SNORM,
+ D3D11_RETURN_TYPE_SINT,
+ D3D11_RETURN_TYPE_UINT,
+ D3D11_RETURN_TYPE_FLOAT,
+ D3D11_RETURN_TYPE_MIXED,
+ D3D11_RETURN_TYPE_DOUBLE,
+ D3D11_RETURN_TYPE_CONTINUED,
+} D3D_RESOURCE_RETURN_TYPE;
+
+typedef enum D3D_NAME
+{
+ D3D_NAME_UNDEFINED,
+ D3D_NAME_POSITION,
+ D3D_NAME_CLIP_DISTANCE,
+ D3D_NAME_CULL_DISTANCE,
+ D3D_NAME_RENDER_TARGET_ARRAY_INDEX,
+ D3D_NAME_VIEWPORT_ARRAY_INDEX,
+ D3D_NAME_VERTEX_ID,
+ D3D_NAME_PRIMITIVE_ID,
+ D3D_NAME_INSTANCE_ID,
+ D3D_NAME_IS_FRONT_FACE,
+ D3D_NAME_SAMPLE_INDEX,
+ D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR,
+ D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,
+ D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR,
+ D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR,
+ D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR,
+ D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR,
+ D3D_NAME_TARGET = 64,
+ D3D_NAME_DEPTH,
+ D3D_NAME_COVERAGE,
+ D3D_NAME_DEPTH_GREATER_EQUAL,
+ D3D_NAME_DEPTH_LESS_EQUAL,
+ D3D10_NAME_UNDEFINED = 0,
+ D3D10_NAME_POSITION,
+ D3D10_NAME_CLIP_DISTANCE,
+ D3D10_NAME_CULL_DISTANCE,
+ D3D10_NAME_RENDER_TARGET_ARRAY_INDEX,
+ D3D10_NAME_VIEWPORT_ARRAY_INDEX,
+ D3D10_NAME_VERTEX_ID,
+ D3D10_NAME_PRIMITIVE_ID,
+ D3D10_NAME_INSTANCE_ID,
+ D3D10_NAME_IS_FRONT_FACE,
+ D3D10_NAME_SAMPLE_INDEX,
+ D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR,
+ D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,
+ D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR,
+ D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR,
+ D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR,
+ D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR,
+ D3D10_NAME_TARGET = 64,
+ D3D10_NAME_DEPTH,
+ D3D10_NAME_COVERAGE,
+ D3D11_NAME_DEPTH_GREATER_EQUAL,
+ D3D11_NAME_DEPTH_LESS_EQUAL,
+} D3D_NAME;
+
+typedef enum _D3D_SHADER_INPUT_TYPE
+{
+ D3D_SIT_CBUFFER,
+ D3D_SIT_TBUFFER,
+ D3D_SIT_TEXTURE,
+ D3D_SIT_SAMPLER,
+ D3D_SIT_UAV_RWTYPED,
+ D3D_SIT_STRUCTURED,
+ D3D_SIT_UAV_RWSTRUCTURED,
+ D3D_SIT_BYTEADDRESS,
+ D3D_SIT_UAV_RWBYTEADDRESS,
+ D3D_SIT_UAV_APPEND_STRUCTURED,
+ D3D_SIT_UAV_CONSUME_STRUCTURED,
+ D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
+ D3D10_SIT_CBUFFER = 0,
+ D3D10_SIT_TBUFFER,
+ D3D10_SIT_TEXTURE,
+ D3D10_SIT_SAMPLER,
+ D3D11_SIT_UAV_RWTYPED,
+ D3D11_SIT_STRUCTURED,
+ D3D11_SIT_UAV_RWSTRUCTURED,
+ D3D11_SIT_BYTEADDRESS,
+ D3D11_SIT_UAV_RWBYTEADDRESS,
+ D3D11_SIT_UAV_APPEND_STRUCTURED,
+ D3D11_SIT_UAV_CONSUME_STRUCTURED,
+ D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
+} D3D_SHADER_INPUT_TYPE;
+
+cpp_quote("DEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h
new file mode 100644
index 00000000..2337abfe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dcompiler.h
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2010 Matteo Bruni for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DCOMPILER_H__
+#define __D3DCOMPILER_H__
+
+#include "d3d11shader.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__GNUC__)
+#define D3DCOMPILER_DLL_W (const WCHAR[]){'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0}
+#elif defined(_MSC_VER)
+#define D3DCOMPILER_DLL_W L"d3dcompiler_43.dll"
+#else
+static const WCHAR D3DCOMPILER_DLL_W[] = {'d','3','d','c','o','m','p','i','l','e','r','_','4','3','.','d','l','l',0};
+#endif
+
+#define D3DCOMPILER_DLL_A "d3dcompiler_43.dll"
+#define D3DCOMPILER_DLL WINELIB_NAME_AW(D3DCOMPILER_DLL_)
+
+#define D3DCOMPILE_DEBUG 0x00000001
+#define D3DCOMPILE_SKIP_VALIDATION 0x00000002
+#define D3DCOMPILE_SKIP_OPTIMIZATION 0x00000004
+#define D3DCOMPILE_PACK_MATRIX_ROW_MAJOR 0x00000008
+#define D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR 0x00000010
+#define D3DCOMPILE_PARTIAL_PRECISION 0x00000020
+#define D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT 0x00000040
+#define D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT 0x00000080
+#define D3DCOMPILE_NO_PRESHADER 0x00000100
+#define D3DCOMPILE_AVOID_FLOW_CONTROL 0x00000200
+#define D3DCOMPILE_PREFER_FLOW_CONTROL 0x00000400
+#define D3DCOMPILE_ENABLE_STRICTNESS 0x00000800
+#define D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY 0x00001000
+#define D3DCOMPILE_IEEE_STRICTNESS 0x00002000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL0 0x00004000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL1 0x00000000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL2 0x0000c000
+#define D3DCOMPILE_OPTIMIZATION_LEVEL3 0x00008000
+#define D3DCOMPILE_WARNINGS_ARE_ERRORS 0x00040000
+
+#define D3D_DISASM_ENABLE_COLOR_CODE 0x00000001
+#define D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS 0x00000002
+#define D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING 0x00000004
+#define D3D_DISASM_ENABLE_INSTRUCTION_CYCLE 0x00000008
+#define D3D_DISASM_DISABLE_DEBUG_INFO 0x00000010
+
+HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename,
+ const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,
+ const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);
+typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const char *filename,
+ const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,
+ const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);
+
+typedef enum D3DCOMPILER_STRIP_FLAGS
+{
+ D3DCOMPILER_STRIP_REFLECTION_DATA = 1,
+ D3DCOMPILER_STRIP_DEBUG_INFO = 2,
+ D3DCOMPILER_STRIP_TEST_BLOBS = 4,
+ D3DCOMPILER_STRIP_FORCE_DWORD = 0x7fffffff
+} D3DCOMPILER_STRIP_FLAGS;
+
+HRESULT WINAPI D3DStripShader(const void *data, SIZE_T data_size, UINT flags, ID3DBlob **blob);
+
+typedef enum D3D_BLOB_PART
+{
+ D3D_BLOB_INPUT_SIGNATURE_BLOB,
+ D3D_BLOB_OUTPUT_SIGNATURE_BLOB,
+ D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB,
+ D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB,
+ D3D_BLOB_ALL_SIGNATURE_BLOB,
+ D3D_BLOB_DEBUG_INFO,
+ D3D_BLOB_LEGACY_SHADER,
+ D3D_BLOB_XNA_PREPASS_SHADER,
+ D3D_BLOB_XNA_SHADER,
+ D3D_BLOB_TEST_ALTERNATE_SHADER = 0x8000,
+ D3D_BLOB_TEST_COMPILE_DETAILS,
+ D3D_BLOB_TEST_COMPILE_PERF
+} D3D_BLOB_PART;
+
+HRESULT WINAPI D3DDisassemble(const void *data, SIZE_T data_size,
+ UINT flags, const char *comments, ID3DBlob **disassembly);
+typedef HRESULT (WINAPI *pD3DDisassemble)(const void *data, SIZE_T data_size,
+ UINT flags, const char *comments, ID3DBlob **disassembly);
+HRESULT WINAPI D3DGetBlobPart(const void *data, SIZE_T data_size, D3D_BLOB_PART part, UINT flags, ID3DBlob **blob);
+HRESULT WINAPI D3DGetInputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
+HRESULT WINAPI D3DGetOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
+HRESULT WINAPI D3DGetInputAndOutputSignatureBlob(const void *data, SIZE_T data_size, ID3DBlob **blob);
+HRESULT WINAPI D3DGetDebugInfo(const void *data, SIZE_T data_size, ID3DBlob **blob);
+
+HRESULT WINAPI D3DReflect(const void *data, SIZE_T data_size, REFIID riid, void **reflector);
+
+HRESULT WINAPI D3DCreateBlob(SIZE_T data_size, ID3DBlob **blob);
+
+HRESULT WINAPI D3DPreprocess(const void *data, SIZE_T size, const char *filename,
+ const D3D_SHADER_MACRO *defines, ID3DInclude *include,
+ ID3DBlob **shader, ID3DBlob **error_messages);
+typedef HRESULT (WINAPI *pD3DPreprocess)(const void *data, SIZE_T size, const char *filename,
+ const D3D_SHADER_MACRO *defines, ID3DInclude *include,
+ ID3DBlob **shader, ID3DBlob **error_messages);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h
new file mode 100644
index 00000000..90a2b7f2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dhal.h
@@ -0,0 +1,529 @@
+/*
+ * Direct3D driver interface
+ * (DirectX 7 version)
+ *
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DHAL_H
+#define __WINE_D3DHAL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <d3d.h>
+
+/*****************************************************************************
+ * device info structures
+ */
+typedef struct _D3DDeviceDesc_V1 {
+ DWORD dwSize;
+ DWORD dwFlags;
+ D3DCOLORMODEL dcmColorModel;
+ DWORD dwDevCaps;
+ D3DTRANSFORMCAPS dtcTransformCaps;
+ BOOL bClipping;
+ D3DLIGHTINGCAPS dlcLightingCaps;
+ D3DPRIMCAPS dpcLineCaps;
+ D3DPRIMCAPS dpcTriCaps;
+ DWORD dwDeviceRenderBitDepth;
+ DWORD dwDeviceZBufferBitDepth;
+ DWORD dwMaxBufferSize;
+ DWORD dwMaxVertexCount;
+} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;
+
+typedef struct _D3DHAL_GLOBALDRIVERDATA {
+ DWORD dwSize;
+ D3DDEVICEDESC_V1 hwCaps;
+ DWORD dwNumVertices;
+ DWORD dwNumClipVertices;
+ DWORD dwNumTextureFormats;
+ LPDDSURFACEDESC lpTextureFormats;
+} D3DHAL_GLOBALDRIVERDATA,*LPD3DHAL_GLOBALDRIVERDATA;
+
+typedef struct _D3DHAL_D3DEXTENDEDCAPS {
+ DWORD dwSize;
+ /* DirectX 5 */
+ DWORD dwMinTextureWidth, dwMaxTextureWidth;
+ DWORD dwMinTextureHeight, dwMaxTextureHeight;
+ DWORD dwMinStippleWidth, dwMaxStippleWidth;
+ DWORD dwMinStippleHeight, dwMaxStippleHeight;
+ /* DirectX 6 */
+ DWORD dwMaxTextureRepeat;
+ DWORD dwMaxTextureAspectRatio;
+ DWORD dwMaxAnisotropy;
+ D3DVALUE dvGuardBandLeft;
+ D3DVALUE dvGuardBandTop;
+ D3DVALUE dvGuardBandRight;
+ D3DVALUE dvGuardBandBottom;
+ D3DVALUE dvExtentsAdjust;
+ DWORD dwStencilCaps;
+ DWORD dwFVFCaps;
+ DWORD dwTextureOpCaps;
+ WORD wMaxTextureBlendStages;
+ WORD wMaxSimultaneousTextures;
+ /* DirectX 7 */
+ DWORD dwMaxActiveLights;
+ D3DVALUE dvMaxVertexW;
+ WORD wMaxUserClipPlanes;
+ WORD wMaxVertexBlendMatrices;
+ DWORD dwVertexProcessingCaps;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwReserved4;
+} D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS;
+
+/*****************************************************************************
+ * d3d->driver callbacks
+ */
+typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA;
+typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA;
+typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA;
+typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA;
+typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA;
+typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA;
+typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA;
+typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA;
+typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA;
+typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA;
+typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA;
+
+typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA);
+typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA);
+typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA);
+typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA);
+typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA);
+typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA);
+
+typedef struct _D3DHAL_CALLBACKS {
+ DWORD dwSize;
+ LPD3DHAL_CONTEXTCREATECB ContextCreate;
+ LPD3DHAL_CONTEXTDESTROYCB ContextDestroy;
+ LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
+ LPD3DHAL_SCENECAPTURECB SceneCapture;
+ LPVOID lpReserved10;
+ LPVOID lpReserved11;
+ LPD3DHAL_RENDERSTATECB RenderState;
+ LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive;
+ DWORD dwReserved;
+ LPD3DHAL_TEXTURECREATECB TextureCreate;
+ LPD3DHAL_TEXTUREDESTROYCB TextureDestroy;
+ LPD3DHAL_TEXTURESWAPCB TextureSwap;
+ LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf;
+ /* now why did MS create CALLBACKS2 and CALLBACKS3 structures if
+ * all these reserved fields were available? we may never know */
+ LPVOID lpReserved12;
+ LPVOID lpReserved13;
+ LPVOID lpReserved14;
+ LPVOID lpReserved15;
+ LPVOID lpReserved16;
+ LPVOID lpReserved17;
+ LPVOID lpReserved18;
+ LPVOID lpReserved19;
+ LPVOID lpReserved20;
+ LPVOID lpReserved21;
+ LPD3DHAL_GETSTATECB GetState;
+ DWORD dwReserved0;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwReserved4;
+ DWORD dwReserved5;
+ DWORD dwReserved6;
+ DWORD dwReserved7;
+ DWORD dwReserved8;
+ DWORD dwReserved9;
+} D3DHAL_CALLBACKS,*LPD3DHAL_CALLBACKS;
+
+typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA;
+typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA;
+typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA;
+typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;
+typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA;
+
+typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA);
+typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA);
+
+typedef struct _D3DHAL_CALLBACKS2 {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPD3DHAL_SETRENDERTARGETCB SetRenderTarget;
+ LPD3DHAL_CLEARCB Clear;
+ LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive;
+ LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive;
+ LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives;
+} D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2;
+
+typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA;
+typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;
+typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA;
+
+typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA);
+typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);
+typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA);
+
+typedef struct _D3DHAL_CALLBACKS3 {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPD3DHAL_CLEAR2CB Clear2;
+ LPVOID lpvReserved;
+ LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
+ LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
+} D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3;
+
+/*****************************************************************************
+ * parameter structures
+ */
+typedef struct _D3DHAL_CONTEXTCREATEDATA {
+ union {
+ LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */
+ LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */
+ } DUMMYUNIONNAME1;
+ union {
+ LPDIRECTDRAWSURFACE lpDDS;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */
+ } DUMMYUNIONNAME2;
+ union {
+ LPDIRECTDRAWSURFACE lpDDSZ;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */
+ } DUMMYUNIONNAME3;
+ union {
+ DWORD dwPID;
+ ULONG_PTR dwrstates;
+ } DUMMYUNIONNAME4;
+ ULONG_PTR dwhContext;
+ HRESULT ddrval;
+} D3DHAL_CONTEXTCREATEDATA;
+
+typedef struct _D3DHAL_CONTEXTDESTROYDATA {
+ ULONG_PTR dwhContext;
+ HRESULT ddrval;
+} D3DHAL_CONTEXTDESTROYDATA;
+
+typedef struct _D3DHAL_CONTEXTDESTROYALLDATA {
+ DWORD dwPID;
+ HRESULT ddrval;
+} D3DHAL_CONTEXTDESTROYALLDATA;
+
+typedef struct _D3DHAL_SCENECAPTUREDATA {
+ ULONG_PTR dwhContext;
+ DWORD dwFlag;
+ HRESULT ddrval;
+} D3DHAL_SCENECAPTUREDATA;
+
+#define D3DHAL_SCENE_CAPTURE_START 0x00000000
+#define D3DHAL_SCENE_CAPTURE_END 0x00000001
+
+typedef struct _D3DHAL_SETRENDERTARGETDATA {
+ ULONG_PTR dwhContext;
+ union {
+ LPDIRECTDRAWSURFACE lpDDS;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl;
+ } DUMMYUNIONNAME1;
+ union {
+ LPDIRECTDRAWSURFACE lpDDSZ;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl;
+ } DUMMYUNIONNAME2;
+ HRESULT ddrval;
+} D3DHAL_SETRENDERTARGETDATA;
+
+typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
+ ULONG_PTR dwhContext;
+ DWORD dwFlags;
+ DWORD dwVertexType;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
+ DWORD dwCommandOffset;
+ DWORD dwCommandLength;
+ union {
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
+ LPVOID lpVertices;
+ } DUMMYUNIONNAME1;
+ DWORD dwVertexOffset;
+ DWORD dwVertexLength;
+ DWORD dwReqVertexBufSize;
+ DWORD dwReqCommandBufSize;
+ LPDWORD lpdwRStates;
+ union {
+ DWORD dwVertexSize;
+ HRESULT ddrval;
+ } DUMMYUNIONNAME2;
+ DWORD dwErrorOffset;
+} D3DHAL_DRAWPRIMITIVES2DATA;
+
+#define D3DHALDP2_USERMEMVERTICES 0x00000001
+#define D3DHALDP2_EXECUTEBUFFER 0x00000002
+#define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004
+#define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008
+#define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010
+#define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020
+#define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040
+#define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080
+
+/*****************************************************************************
+ * DrawPrimitives2 command structures
+ */
+typedef struct _D3DHAL_DP2COMMAND {
+ BYTE bCommand;
+ BYTE bReserved;
+ union {
+ WORD wPrimitiveCount;
+ WORD wStateCount;
+ } DUMMYUNIONNAME;
+} D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND;
+
+typedef enum _D3DHAL_DP2OPERATION {
+ D3DDP2OP_POINTS = 1,
+ D3DDP2OP_INDEXEDLINELIST = 2,
+ D3DDP2OP_INDEXEDTRIANGLELIST = 3,
+ D3DDP2OP_RENDERSTATE = 8,
+ D3DDP2OP_LINELIST = 15,
+ D3DDP2OP_LINESTRIP = 16,
+ D3DDP2OP_INDEXEDLINESTRIP = 17,
+ D3DDP2OP_TRIANGLELIST = 18,
+ D3DDP2OP_TRIANGLESTRIP = 19,
+ D3DDP2OP_INDEXEDTRIANGLESTRIP = 20,
+ D3DDP2OP_TRIANGLEFAN = 21,
+ D3DDP2OP_INDEXEDTRIANGLEFAN = 22,
+ D3DDP2OP_TRIANGLEFAN_IMM = 23,
+ D3DDP2OP_LINELIST_IMM = 24,
+ D3DDP2OP_TEXTURESTAGESTATE = 25,
+ D3DDP2OP_INDEXEDTRIANGLELIST2 = 26,
+ D3DDP2OP_INDEXEDLINELIST2 = 27,
+ D3DDP2OP_VIEWPORTINFO = 28,
+ D3DDP2OP_WINFO = 29,
+ /* pre-DirectX 7 interfaces */
+ D3DDP2OP_SETPALETTE = 30,
+ D3DDP2OP_UPDATEPALETTE = 31,
+ /* DirectX 7 interfaces */
+ D3DDP2OP_ZRANGE = 32,
+ D3DDP2OP_SETMATERIAL = 33,
+ D3DDP2OP_SETLIGHT = 34,
+ D3DDP2OP_CREATELIGHT = 35,
+ D3DDP2OP_SETTRANSFORM = 36,
+ D3DDP2OP_TEXBLT = 38,
+ D3DDP2OP_STATESET = 39,
+ D3DDP2OP_SETPRIORITY = 40,
+ /* all interfaces */
+ D3DDP2OP_SETRENDERTARGET = 41,
+ D3DDP2OP_CLEAR = 42,
+ /* DirectX 7 interfaces */
+ D3DDP2OP_SETTEXLOD = 43,
+ D3DPP2OP_SETCLIPPLANE = 44
+} D3DHAL_DP2OPERATION;
+
+/* point primitives */
+
+typedef struct _D3DHAL_POINTS {
+ WORD wCount;
+ WORD wVStart;
+} D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS;
+
+/* line primitives */
+
+typedef struct _D3DHAL_DP2STARTVERTEX {
+ WORD wVStart;
+} D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX;
+
+typedef struct _D3DHAL_DP2LINELIST {
+ WORD wVStart;
+} D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST;
+
+typedef struct _D3DHAL_DP2INDEXEDLINELIST {
+ WORD wV1;
+ WORD wV2;
+} D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST;
+
+typedef struct _D3DHAL_DP2LINESTRIP {
+ WORD wVStart;
+} D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP;
+
+typedef struct _D3DHAL_DP2INDEXEDLINESTRIP {
+ WORD wV[2];
+} D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP;
+
+/* triangle primitives */
+
+typedef struct _D3DHAL_DP2TRIANGLELIST {
+ WORD wVStart;
+} D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST {
+ WORD wV1;
+ WORD wV2;
+ WORD wV3;
+ WORD wFlags;
+} D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 {
+ WORD wV1;
+ WORD wV2;
+ WORD wV3;
+} D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2;
+
+typedef struct _D3DHAL_DP2TRIANGLESTRIP {
+ WORD wVStart;
+} D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP {
+ WORD wV[3];
+} D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;
+
+typedef struct _D3DHAL_DP2TRIANGLEFAN {
+ WORD wVStart;
+} D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN;
+
+typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN {
+ WORD wV[3];
+} D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN;
+
+typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM {
+ DWORD dwEdgeFlags;
+} D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM;
+
+/* render states */
+typedef struct _D3DHAL_DP2RENDERSTATE {
+ D3DRENDERSTATETYPE RenderState;
+ union {
+ D3DVALUE dvState;
+ DWORD dwState;
+ } DUMMYUNIONNAME;
+} D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE;
+
+typedef struct _D3DHAL_DP2TEXTURESTAGESTATE {
+ WORD wStage;
+ WORD TSState;
+ DWORD dwValue;
+} D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE;
+
+#define D3DTSS_TEXTUREMAP 0
+
+typedef struct _D3DHAL_DP2VIEWPORTINFO {
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwWidth;
+ DWORD dwHeight;
+} D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO;
+
+typedef struct _D3DHAL_DP2WINFO {
+ D3DVALUE dwWNear;
+ D3DVALUE dwWFar;
+} D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO;
+
+typedef struct _D3DHAL_DP2SETPALETTE {
+ DWORD dwPaletteHandle;
+ DWORD dwPaletteFlags;
+ DWORD dwSurfaceHandle;
+} D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE;
+
+typedef struct _D3DHAL_DP2UPDATEPALETTE {
+ DWORD dwPaletteHandle;
+ WORD wStartIndex;
+ WORD wNumEntries;
+} D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE;
+
+typedef struct _D3DHAL_DP2ZRANGE {
+ D3DVALUE dvMinZ;
+ D3DVALUE dvMaxZ;
+} D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE;
+
+typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL;
+
+typedef struct _D3DHAL_DP2SETLIGHT {
+ DWORD dwIndex;
+ DWORD dwDataType;
+} D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT;
+
+#define D3DHAL_SETLIGHT_ENABLE 0
+#define D3DHAL_SETLIGHT_DISABLE 1
+#define D3DHAL_SETLIGHT_DATA 2
+
+typedef struct _D3DHAL_DP2CREATELIGHT {
+ DWORD dwIndex;
+} D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT;
+
+typedef struct _D3DHAL_DP2SETTRANSFORM {
+ D3DTRANSFORMSTATETYPE xfrmType;
+ D3DMATRIX matrix;
+} D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM;
+
+typedef struct _D3DHAL_DP2TEXBLT {
+ DWORD dwDDDestSurface;
+ DWORD dwDDSrcSurface;
+ POINT pDest;
+ RECTL rSrc;
+ DWORD dwFlags;
+} D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT;
+
+typedef struct _D3DHAL_DP2STATESET {
+ DWORD dwOperation;
+ DWORD dwParam;
+ D3DSTATEBLOCKTYPE sbType;
+} D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET;
+
+#define D3DHAL_STATESETBEGIN 0
+#define D3DHAL_STATESETEND 1
+#define D3DHAL_STATESETDELETE 2
+#define D3DHAL_STATESETEXECUTE 3
+#define D3DHAL_STATESETCAPTURE 4
+
+typedef struct _D3DHAL_DP2SETPRIORITY {
+ DWORD dwDDSurface;
+ DWORD dwPriority;
+} D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY;
+
+typedef struct _D3DHAL_DP2SETRENDERTARGET {
+ DWORD hRenderTarget;
+ DWORD hZBuffer;
+} D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET;
+
+typedef struct _D3DHAL_DP2CLEAR {
+ DWORD dwFlags;
+ DWORD dwFillColor;
+ D3DVALUE dvFillDepth;
+ DWORD dwFillStencil;
+ RECT Rects[1];
+} D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR;
+
+typedef struct _D3DHAL_DP2SETTEXLOD {
+ DWORD dwDDSurface;
+ DWORD dwLOD;
+} D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_D3DHAL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h
new file mode 100644
index 00000000..0045fa95
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drm.h
@@ -0,0 +1,533 @@
+/*
+ * Copyright (C) 2005 Peter Berg Larsen
+ * Copyright (C) 2010 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRM_H__
+#define __D3DRM_H__
+
+#include <ddraw.h>
+
+typedef struct IDirect3DRM *LPDIRECT3DRM, **LPLPDIRECT3DRM;
+
+#include <d3drmobj.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Direct3DRM Object CLSID */
+DEFINE_GUID(CLSID_CDirect3DRM, 0x4516ec41, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+
+/* Direct3DRM Interface GUIDs */
+DEFINE_GUID(IID_IDirect3DRM, 0x2bc49361, 0x8327, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRM2, 0x4516ecc8, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRM3, 0x4516ec83, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+
+typedef struct IDirect3DRM2 *LPDIRECT3DRM2, **LPLPDIRECT3DRM2;
+typedef struct IDirect3DRM3 *LPDIRECT3DRM3, **LPLPDIRECT3DRM3;
+
+HRESULT WINAPI Direct3DRMCreate(struct IDirect3DRM **d3drm);
+
+/*****************************************************************************
+ * IDirect3DRMObject interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRM
+DECLARE_INTERFACE_(IDirect3DRM,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRM methods ***/
+ STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame **frame) PURE;
+ STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+ STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder **mesh_builder) PURE;
+ STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+ STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE;
+ STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE;
+ STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;
+ STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,
+ IDirect3DRMLight **light) PURE;
+ STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE;
+ STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice **device) PURE;
+ STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
+ IDirectDrawSurface *surface, IDirect3DRMDevice **device) PURE;
+ STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device,
+ IDirect3DRMDevice **device) PURE;
+ STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
+ int width, int height, IDirect3DRMDevice **device) PURE;
+ STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,
+ IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light,
+ D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
+ IDirect3DRMVisual **shadow) PURE;
+ STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera,
+ DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE;
+ STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
+ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov,
+ D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE;
+ STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;
+ STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(LoadTextureFromResource)(THIS_ HRSRC resource, IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;
+ STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;
+ STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;
+ STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;
+ STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;
+ STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;
+ STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,
+ D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,
+ IDirect3DRMFrame *parent_frame) PURE;
+ STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRM_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRM_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRM_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRM methods ***/
+#define IDirect3DRM_CreateObject(p,a,b,c,d) (p)->lpVtbl->CreateObject(p,a,b,d)
+#define IDirect3DRM_CreateFrame(p,a,b) (p)->lpVtbl->CreateFrame(p,a,b)
+#define IDirect3DRM_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRM_CreateMeshBuilder(p,a) (p)->lpVtbl->CreateMeshBuilder(p,a)
+#define IDirect3DRM_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRM_CreateAnimation(p,a) (p)->lpVtbl->CreateAnimation(p,a)
+#define IDirect3DRM_CreateAnimationSet(p,a) (p)->lpVtbl->CreateAnimationSet(p,a)
+#define IDirect3DRM_CreateTexture(p,a,b) (p)->lpVtbl->CreateTexture(p,a,b)
+#define IDirect3DRM_CreateLight(p,a,b,c) (p)->lpVtbl->CreateLight(p,a,b,c)
+#define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
+#define IDirect3DRM_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3DRM_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
+#define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
+#define IDirect3DRM_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
+#define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)
+#define IDirect3DRM_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM_CreateUserVisual(p,a,b,c) (p)->lpVtbl->CreateUserVisual(p,a,b,c)
+#define IDirect3DRM_LoadTexture(p,a,b) (p)->lpVtbl->LoadTexture(p,a,b)
+#define IDirect3DRM_LoadTextureFromResource(p,a,b) (p)->lpVtbl->LoadTextureFromResource(p,a,b)
+#define IDirect3DRM_SetSearchPath(p,a) (p)->lpVtbl->SetSearchPath(p,a)
+#define IDirect3DRM_AddSearchPath(p,a) (p)->lpVtbl->AddSearchPath(p,a)
+#define IDirect3DRM_GetSearchPath(p,a,b) (p)->lpVtbl->GetSearchPath(p,a,b)
+#define IDirect3DRM_SetDefaultTextureColors(p,a) (p)->lpVtbl->SetDefaultTextureColors(p,a)
+#define IDirect3DRM_SetDefaultTextureShades(p,a) (p)->lpVtbl->SetDefaultTextureShades(p,a)
+#define IDirect3DRM_GetDevices(p,a) (p)->lpVtbl->GetDevices(p,a)
+#define IDirect3DRM_GetNamedObject(p,a,b) (p)->lpVtbl->GetNamedObject(p,a,b)
+#define IDirect3DRM_EnumerateObjects(p,a,b) (p)->lpVtbl->EnumerateObjects(p,a,b)
+#define IDirect3DRM_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM_Tick(p,a) (p)->lpVtbl->Tick(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRM_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRM_AddRef(p) (p)->AddRef()
+#define IDirect3DRM_Release(p) (p)->Release()
+/*** IDirect3DRM methods ***/
+#define IDirect3DRM_CreateObject(p,a,b,c,d) (p)->CreateObject(a,b,d)
+#define IDirect3DRM_CreateFrame(p,a,b) (p)->CreateFrame(a,b)
+#define IDirect3DRM_CreateMesh(p,a) (p)->CreateMesh(a)
+#define IDirect3DRM_CreateMeshBuilder(p,a) (p)->CreateMeshBuilder(a)
+#define IDirect3DRM_CreateFace(p,a) (p)->CreateFace(a)
+#define IDirect3DRM_CreateAnimation(p,a) (p)->CreateAnimation(a)
+#define IDirect3DRM_CreateAnimationSet(p,a) (p)->CreateAnimationSet(a)
+#define IDirect3DRM_CreateTexture(p,a,b) (p)->CreateTexture(a,b)
+#define IDirect3DRM_CreateLight(p,a,b,c) (p)->CreateLight(a,b,c)
+#define IDirect3DRM_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e)
+#define IDirect3DRM_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3DRM_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirect3DRM_CreateDeviceFromSurface(p,a,b,c,d) (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c)
+#define IDirect3DRM_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e)
+#define IDirect3DRM_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b)
+#define IDirect3DRM_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->CreateShadow(a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM_CreateViewport(p,a,b,c,d,e,f,g) (p)->CreateViewport(a,b,c,d,e,f,g)
+#define IDirect3DRM_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM_CreateUserVisual(p,a,b,c) (p)->CreateUserVisual(a,b,c)
+#define IDirect3DRM_LoadTexture(p,a,b) (p)->LoadTexture(a,b)
+#define IDirect3DRM_LoadTextureFromResource(p,a,b) (p)->LoadTextureFromResource(a,b)
+#define IDirect3DRM_SetSearchPath(p,a) (p)->SetSearchPath(a)
+#define IDirect3DRM_AddSearchPath(p,a) (p)->AddSearchPath(a)
+#define IDirect3DRM_GetSearchPath(p,a,b) (p)->GetSearchPath(a,b)
+#define IDirect3DRM_SetDefaultTextureColors(p,a) (p)->SetDefaultTextureColors(a)
+#define IDirect3DRM_SetDefaultTextureShades(p,a) (p)->SetDefaultTextureShades(a)
+#define IDirect3DRM_GetDevices(p,a) (p)->GetDevices(a)
+#define IDirect3DRM_GetNamedObject(p,a,b) (p)->GetNamedObject(a,b)
+#define IDirect3DRM_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b)
+#define IDirect3DRM_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->Load(a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM_Tick(p,a) (p)->Tick(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRM2 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRM2
+DECLARE_INTERFACE_(IDirect3DRM2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRM2 methods ***/
+ STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame *parent, IDirect3DRMFrame2 **frame) PURE;
+ STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+ STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder2 **mesh_builder) PURE;
+ STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+ STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation **animation) PURE;
+ STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet **set) PURE;
+ STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture2 **texture) PURE;
+ STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;
+ STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,
+ IDirect3DRMLight **light) PURE;
+ STDMETHOD(CreateMaterial)(THIS_ D3DVALUE power, IDirect3DRMMaterial **material) PURE;
+ STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice2 **device) PURE;
+ STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
+ IDirectDrawSurface *surface, IDirect3DRMDevice2 **device) PURE;
+ STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,
+ IDirect3DRMDevice2 **device) PURE;
+ STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
+ int width, int height, IDirect3DRMDevice2 **device) PURE;
+ STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,
+ IDirect3DRMTexture2 **texture) PURE;
+ STDMETHOD(CreateShadow)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMLight *light,
+ D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz,
+ IDirect3DRMVisual **shadow) PURE;
+ STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice *device, IDirect3DRMFrame *camera,
+ DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) PURE;
+ STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
+ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov,
+ D3DVALUE su, D3DVALUE sv, IDirect3DRMWrap **wrap) PURE;
+ STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;
+ STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture2 **texture) PURE;
+ STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name,
+ const char *resource_type, IDirect3DRMTexture2 **texture) PURE;
+ STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;
+ STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;
+ STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;
+ STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;
+ STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;
+ STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;
+ STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,
+ D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,
+ IDirect3DRMFrame *parent_frame) PURE;
+ STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRM2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRM2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRM2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRM2 methods ***/
+#define IDirect3DRM2_CreateObject(p,a,b,c,d) (p)->lpVtbl->CreateObject(p,a,b,d)
+#define IDirect3DRM2_CreateFrame(p,a,b) (p)->lpVtbl->CreateFrame(p,a,b)
+#define IDirect3DRM2_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRM2_CreateMeshBuilder(p,a) (p)->lpVtbl->CreateMeshBuilder(p,a)
+#define IDirect3DRM2_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRM2_CreateAnimation(p,a) (p)->lpVtbl->CreateAnimation(p,a)
+#define IDirect3DRM2_CreateAnimationSet(p,a) (p)->lpVtbl->CreateAnimationSet(p,a)
+#define IDirect3DRM2_CreateTexture(p,a,b) (p)->lpVtbl->CreateTexture(p,a,b)
+#define IDirect3DRM2_CreateLight(p,a,b,c) (p)->lpVtbl->CreateLight(p,a,b,c)
+#define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
+#define IDirect3DRM2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3DRM2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
+#define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
+#define IDirect3DRM2_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
+#define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)
+#define IDirect3DRM2_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM2_CreateUserVisual(p,a,b,c) (p)->lpVtbl->CreateUserVisual(p,a,b,c)
+#define IDirect3DRM2_LoadTexture(p,a,b) (p)->lpVtbl->LoadTexture(p,a,b)
+#define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d) (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d)
+#define IDirect3DRM2_SetSearchPath(p,a) (p)->lpVtbl->SetSearchPath(p,a)
+#define IDirect3DRM2_AddSearchPath(p,a) (p)->lpVtbl->AddSearchPath(p,a)
+#define IDirect3DRM2_GetSearchPath(p,a,b) (p)->lpVtbl->GetSearchPath(p,a,b)
+#define IDirect3DRM2_SetDefaultTextureColors(p,a) (p)->lpVtbl->SetDefaultTextureColors(p,a)
+#define IDirect3DRM2_SetDefaultTextureShades(p,a) (p)->lpVtbl->SetDefaultTextureShades(p,a)
+#define IDirect3DRM2_GetDevices(p,a) (p)->lpVtbl->GetDevices(p,a)
+#define IDirect3DRM2_GetNamedObject(p,a,b) (p)->lpVtbl->GetNamedObject(p,a,b)
+#define IDirect3DRM2_EnumerateObjects(p,a,b) (p)->lpVtbl->EnumerateObjects(p,a,b)
+#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM2_Tick(p,a) (p)->lpVtbl->Tick(p,a)
+#define IDirect3DRM2_CreateProgressiveMesh(p,a) (p)->lpVtbl->CreateProgressiveMesh(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRM2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRM2_AddRef(p) (p)->AddRef()
+#define IDirect3DRM2_Release(p) (p)->Release()
+/*** IDirect3DRM2 methods ***/
+#define IDirect3DRM2_CreateObject(p,a,b,c,d) (p)->CreateObject(a,b,d)
+#define IDirect3DRM2_CreateFrame(p,a,b) (p)->CreateFrame(a,b)
+#define IDirect3DRM2_CreateMesh(p,a) (p)->CreateMesh(a)
+#define IDirect3DRM2_CreateMeshBuilder(p,a) (p)->CreateMeshBuilder(a)
+#define IDirect3DRM2_CreateFace(p,a) (p)->CreateFace(a)
+#define IDirect3DRM2_CreateAnimation(p,a) (p)->CreateAnimation(a)
+#define IDirect3DRM2_CreateAnimationSet(p,a) (p)->CreateAnimationSet(a)
+#define IDirect3DRM2_CreateTexture(p,a,b) (p)->CreateTexture(a,b)
+#define IDirect3DRM2_CreateLight(p,a,b,c) (p)->CreateLight(a,b,c)
+#define IDirect3DRM2_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e)
+#define IDirect3DRM2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3DRM2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirect3DRM2_CreateDeviceFromSurface(p,a,b,c,d) (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM2_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c)
+#define IDirect3DRM2_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e)
+#define IDirect3DRM2_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b)
+#define IDirect3DRM2_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->CreateShadow(a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM2_CreateViewport(p,a,b,c,d,e,f,g) (p)->CreateViewport(a,b,c,d,e,f,g)
+#define IDirect3DRM2_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM2_CreateUserVisual(p,a,b,c) (p)->CreateUserVisual(a,b,c)
+#define IDirect3DRM2_LoadTexture(p,a,b) (p)->LoadTexture(a,b)
+#define IDirect3DRM2_LoadTextureFromResource(p,a,b,c,d) (p)->LoadTextureFromResource(a,b,c,d)
+#define IDirect3DRM2_SetSearchPath(p,a) (p)->SetSearchPath(a)
+#define IDirect3DRM2_AddSearchPath(p,a) (p)->AddSearchPath(a)
+#define IDirect3DRM2_GetSearchPath(p,a,b) (p)->GetSearchPath(a,b)
+#define IDirect3DRM2_SetDefaultTextureColors(p,a) (p)->SetDefaultTextureColors(a)
+#define IDirect3DRM2_SetDefaultTextureShades(p,a) (p)->SetDefaultTextureShades(a)
+#define IDirect3DRM2_GetDevices(p,a) (p)->GetDevices(a)
+#define IDirect3DRM2_GetNamedObject(p,a,b) (p)->GetNamedObject(a,b)
+#define IDirect3DRM2_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b)
+#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->Load(a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM2_Tick(p,a) (p)->Tick(a)
+#define IDirect3DRM2_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(p,a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRM3 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRM3
+DECLARE_INTERFACE_(IDirect3DRM3,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRM2 methods ***/
+ STDMETHOD(CreateObject)(THIS_ REFCLSID clsid, IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(CreateFrame)(THIS_ IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame) PURE;
+ STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+ STDMETHOD(CreateMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 **mesh_builder) PURE;
+ STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE;
+ STDMETHOD(CreateAnimation)(THIS_ IDirect3DRMAnimation2 **animation) PURE;
+ STDMETHOD(CreateAnimationSet)(THIS_ IDirect3DRMAnimationSet2 **set) PURE;
+ STDMETHOD(CreateTexture)(THIS_ D3DRMIMAGE *image, IDirect3DRMTexture3 **texture) PURE;
+ STDMETHOD(CreateLight)(THIS_ D3DRMLIGHTTYPE type, D3DCOLOR color, IDirect3DRMLight **light) PURE;
+ STDMETHOD(CreateLightRGB)(THIS_ D3DRMLIGHTTYPE type, D3DVALUE r, D3DVALUE g, D3DVALUE b,
+ IDirect3DRMLight **light) PURE;
+ STDMETHOD(CreateMaterial)(THIS_ D3DVALUE, IDirect3DRMMaterial2 **material) PURE;
+ STDMETHOD(CreateDevice)(THIS_ DWORD width, DWORD height, IDirect3DRMDevice3 **device) PURE;
+ STDMETHOD(CreateDeviceFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw,
+ IDirectDrawSurface *surface, IDirect3DRMDevice3 **device) PURE;
+ STDMETHOD(CreateDeviceFromD3D)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device,
+ IDirect3DRMDevice3 **device) PURE;
+ STDMETHOD(CreateDeviceFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid,
+ int width, int height, IDirect3DRMDevice3 **device) PURE;
+ STDMETHOD(CreateTextureFromSurface)(THIS_ IDirectDrawSurface *surface,
+ IDirect3DRMTexture3 **texture) PURE;
+ STDMETHOD(CreateShadow)(THIS_ IUnknown *object, IDirect3DRMLight *light, D3DVALUE px, D3DVALUE py, D3DVALUE pz,
+ D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, IDirect3DRMShadow2 **shadow) PURE;
+ STDMETHOD(CreateViewport)(THIS_ IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera,
+ DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport) PURE;
+ STDMETHOD(CreateWrap)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame3 *reference,
+ D3DVALUE ox, D3DVALUE oy, D3DVALUE oz, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+ D3DVALUE ux, D3DVALUE uy, D3DVALUE uz, D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv,
+ IDirect3DRMWrap **wrap) PURE;
+ STDMETHOD(CreateUserVisual)(THIS_ D3DRMUSERVISUALCALLBACK cb, void *ctx, IDirect3DRMUserVisual **visual) PURE;
+ STDMETHOD(LoadTexture)(THIS_ const char *filename, IDirect3DRMTexture3 **texture) PURE;
+ STDMETHOD(LoadTextureFromResource)(THIS_ HMODULE module, const char *resource_name,
+ const char *resource_type, IDirect3DRMTexture3 **texture) PURE;
+ STDMETHOD(SetSearchPath)(THIS_ const char *path) PURE;
+ STDMETHOD(AddSearchPath)(THIS_ const char *path) PURE;
+ STDMETHOD(GetSearchPath)(THIS_ DWORD *size, char *path) PURE;
+ STDMETHOD(SetDefaultTextureColors)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDefaultTextureShades)(THIS_ DWORD) PURE;
+ STDMETHOD(GetDevices)(THIS_ IDirect3DRMDeviceArray **array) PURE;
+ STDMETHOD(GetNamedObject)(THIS_ const char *name, IDirect3DRMObject **object) PURE;
+ STDMETHOD(EnumerateObjects)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Load)(THIS_ void *source, void *object_id, IID **iids, DWORD iid_count, D3DRMLOADOPTIONS flags,
+ D3DRMLOADCALLBACK load_cb, void *load_ctx, D3DRMLOADTEXTURECALLBACK load_tex_cb, void *load_tex_ctx,
+ IDirect3DRMFrame3 *parent_frame) PURE;
+ STDMETHOD(Tick)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(CreateProgressiveMesh)(THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;
+ STDMETHOD(RegisterClient)(THIS_ REFGUID guid, DWORD *id) PURE;
+ STDMETHOD(UnregisterClient)(THIS_ REFGUID rguid) PURE;
+ STDMETHOD(CreateClippedVisual)(THIS_ IDirect3DRMVisual *visual, IDirect3DRMClippedVisual **clipped_visual) PURE;
+ STDMETHOD(SetOptions)(THIS_ DWORD) PURE;
+ STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRM3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRM3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRM3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRM3 methods ***/
+#define IDirect3DRM3_CreateObject(p,a,b,c,d) (p)->lpVtbl->CreateObject(p,a,b,d)
+#define IDirect3DRM3_CreateFrame(p,a,b) (p)->lpVtbl->CreateFrame(p,a,b)
+#define IDirect3DRM3_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRM3_CreateMeshBuilder(p,a) (p)->lpVtbl->CreateMeshBuilder(p,a)
+#define IDirect3DRM3_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRM3_CreateAnimation(p,a) (p)->lpVtbl->CreateAnimation(p,a)
+#define IDirect3DRM3_CreateAnimationSet(p,a) (p)->lpVtbl->CreateAnimationSet(p,a)
+#define IDirect3DRM3_CreateTexture(p,a,b) (p)->lpVtbl->CreateTexture(p,a,b)
+#define IDirect3DRM3_CreateLight(p,a,b,c) (p)->lpVtbl->CreateLight(p,a,b,c)
+#define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e) (p)->lpVtbl->CreateLightRGB(p,a,b,c,d,e)
+#define IDirect3DRM3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+#define IDirect3DRM3_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d) (p)->lpVtbl->CreateDeviceFromSurface(p,a,b,c,d)
+#define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c) (p)->lpVtbl->CreateDeviceFromD3D(p,a,b,c)
+#define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->lpVtbl->CreateDeviceFromClipper(p,a,b,c,d,e)
+#define IDirect3DRM3_CreateTextureFromSurface(p,a,b) (p)->lpVtbl->CreateTextureFromSurface(p,a,b)
+#define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateShadow(p,a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateViewport(p,a,b,c,d,e,f,g)
+#define IDirect3DRM3_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->lpVtbl->CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM3_CreateUserVisual(p,a,b,c) (p)->lpVtbl->CreateUserVisual(p,a,b,c)
+#define IDirect3DRM3_LoadTexture(p,a,b) (p)->lpVtbl->LoadTexture(p,a,b)
+#define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d) (p)->lpVtbl->LoadTextureFromResource(p,a,b,c,d)
+#define IDirect3DRM3_SetSearchPath(p,a) (p)->lpVtbl->SetSearchPath(p,a)
+#define IDirect3DRM3_AddSearchPath(p,a) (p)->lpVtbl->AddSearchPath(p,a)
+#define IDirect3DRM3_GetSearchPath(p,a,b) (p)->lpVtbl->GetSearchPath(p,a,b)
+#define IDirect3DRM3_SetDefaultTextureColors(p,a) (p)->lpVtbl->SetDefaultTextureColors(p,a)
+#define IDirect3DRM3_SetDefaultTextureShades(p,a) (p)->lpVtbl->SetDefaultTextureShades(p,a)
+#define IDirect3DRM3_GetDevices(p,a) (p)->lpVtbl->GetDevices(p,a)
+#define IDirect3DRM3_GetNamedObject(p,a,b) (p)->lpVtbl->GetNamedObject(p,a,b)
+#define IDirect3DRM3_EnumerateObjects(p,a,b) (p)->lpVtbl->EnumerateObjects(p,a,b)
+#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Load(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM3_Tick(p,a) (p)->lpVtbl->Tick(p,a)
+#define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->lpVtbl->CreateProgressiveMesh(p,a)
+#define IDirect3DRM3_RegisterClient(p,a,b) (p)->lpVtbl->RegisterClient(p,a,b)
+#define IDirect3DRM3_UnregisterClient(p,a) (p)->lpVtbl->UnregisterClient(p,a)
+#define IDirect3DRM3_CreateClippedVisual(p,ab) (p)->lpVtbl->CreateClippedVisual(p,a,b)
+#define IDirect3DRM3_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
+#define IDirect3DRM3_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRM3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRM3_AddRef(p) (p)->AddRef()
+#define IDirect3DRM3_Release(p) (p)->Release()
+/*** IDirect3DRM3 methods ***/
+#define IDirect3DRM3_CreateObject(p,a,b,c,d) (p)->CreateObject(a,b,d)
+#define IDirect3DRM3_CreateFrame(p,a,b) (p)->CreateFrame(a,b)
+#define IDirect3DRM3_CreateMesh(p,a) (p)->CreateMesh(a)
+#define IDirect3DRM3_CreateMeshBuilder(p,a) (p)->CreateMeshBuilder(a)
+#define IDirect3DRM3_CreateFace(p,a) (p)->CreateFace(a)
+#define IDirect3DRM3_CreateAnimation(p,a) (p)->CreateAnimation(a)
+#define IDirect3DRM3_CreateAnimationSet(p,a) (p)->CreateAnimationSet(a)
+#define IDirect3DRM3_CreateTexture(p,a,b) (p)->CreateTexture(a,b)
+#define IDirect3DRM3_CreateLight(p,a,b,c) (p)->CreateLight(a,b,c)
+#define IDirect3DRM3_CreateLightRGB(p,a,b,c,d,e) (p)->CreateLightRGB(a,b,c,d,e)
+#define IDirect3DRM3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)
+#define IDirect3DRM3_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirect3DRM3_CreateDeviceFromSurface(p,a,b,c,d) (p)->CreateDeviceFromSurface(a,b,c,d)
+#define IDirect3DRM3_CreateDeviceFromD3D(p,a,b,c) (p)->CreateDeviceFromD3D(a,b,c)
+#define IDirect3DRM3_CreateDeviceFromClipper(p,a,b,c,d,e) (p)->CreateDeviceFromClipper(a,b,c,d,e)
+#define IDirect3DRM3_CreateTextureFromSurface(p,a,b) (p)->CreateTextureFromSurface(a,b)
+#define IDirect3DRM3_CreateShadow(p,a,b,c,d,e,f,g,h,i) (p)->CreateShadow(a,b,c,d,e,f,g,h,i)
+#define IDirect3DRM3_CreateViewport(p,a,b,c,d,e,f,g) (p)->CreateViewport(a,b,c,d,e,f,g)
+#define IDirect3DRM3_CreateWrap(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q) (p)->CreateWrap(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,q)
+#define IDirect3DRM3_CreateUserVisual(p,a,b,c) (p)->CreateUserVisual(a,b,c)
+#define IDirect3DRM3_LoadTexture(p,a,b) (p)->LoadTexture(a,b)
+#define IDirect3DRM3_LoadTextureFromResource(p,a,b,c,d) (p)->LoadTextureFromResource(a,b,c,d)
+#define IDirect3DRM3_SetSearchPath(p,a) (p)->SetSearchPath(a)
+#define IDirect3DRM3_AddSearchPath(p,a) (p)->AddSearchPath(a)
+#define IDirect3DRM3_GetSearchPath(p,a,b) (p)->GetSearchPath(a,b)
+#define IDirect3DRM3_SetDefaultTextureColors(p,a) (p)->SetDefaultTextureColors(a)
+#define IDirect3DRM3_SetDefaultTextureShades(p,a) (p)->SetDefaultTextureShades(a)
+#define IDirect3DRM3_GetDevices(p,a) (p)->GetDevices(a)
+#define IDirect3DRM3_GetNamedObject(p,a,b) (p)->GetNamedObject(a,b)
+#define IDirect3DRM3_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b)
+#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->Load(a,b,c,d,e,f,g,h,i,j)
+#define IDirect3DRM3_Tick(p,a) (p)->Tick(a)
+#define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(p,a)
+#define IDirect3DRM3_RegisterClient(p,a,b) (p)->RegisterClient(p,a,b)
+#define IDirect3DRM3_UnregisterClient(p,a) (p)->UnregisterClient(p,a)
+#define IDirect3DRM3_CreateClippedVisual(p,ab) (p)->CreateClippedVisual(p,a,b)
+#define IDirect3DRM3_SetOptions(p,a) (p)->SetOptions(p,a)
+#define IDirect3DRM3_GetOptions(p,a) (p)->GetOptions(p,a)
+#endif
+
+#define D3DRM_OK DD_OK
+#define D3DRMERR_BADOBJECT MAKE_DDHRESULT(781)
+#define D3DRMERR_BADTYPE MAKE_DDHRESULT(782)
+#define D3DRMERR_BADALLOC MAKE_DDHRESULT(783)
+#define D3DRMERR_FACEUSED MAKE_DDHRESULT(784)
+#define D3DRMERR_NOTFOUND MAKE_DDHRESULT(785)
+#define D3DRMERR_NOTDONEYET MAKE_DDHRESULT(786)
+#define D3DRMERR_FILENOTFOUND MAKE_DDHRESULT(787)
+#define D3DRMERR_BADFILE MAKE_DDHRESULT(788)
+#define D3DRMERR_BADDEVICE MAKE_DDHRESULT(789)
+#define D3DRMERR_BADVALUE MAKE_DDHRESULT(790)
+#define D3DRMERR_BADMAJORVERSION MAKE_DDHRESULT(791)
+#define D3DRMERR_BADMINORVERSION MAKE_DDHRESULT(792)
+#define D3DRMERR_UNABLETOEXECUTE MAKE_DDHRESULT(793)
+#define D3DRMERR_LIBRARYNOTFOUND MAKE_DDHRESULT(794)
+#define D3DRMERR_INVALIDLIBRARY MAKE_DDHRESULT(795)
+#define D3DRMERR_PENDING MAKE_DDHRESULT(796)
+#define D3DRMERR_NOTENOUGHDATA MAKE_DDHRESULT(797)
+#define D3DRMERR_REQUESTTOOLARGE MAKE_DDHRESULT(798)
+#define D3DRMERR_REQUESTTOOSMALL MAKE_DDHRESULT(799)
+#define D3DRMERR_CONNECTIONLOST MAKE_DDHRESULT(800)
+#define D3DRMERR_LOADABORTED MAKE_DDHRESULT(801)
+#define D3DRMERR_NOINTERNET MAKE_DDHRESULT(802)
+#define D3DRMERR_BADCACHEFILE MAKE_DDHRESULT(803)
+#define D3DRMERR_BOXNOTSET MAKE_DDHRESULT(804)
+#define D3DRMERR_BADPMDATA MAKE_DDHRESULT(805)
+#define D3DRMERR_CLIENTNOTREGISTERED MAKE_DDHRESULT(806)
+#define D3DRMERR_NOTCREATEDFROMDDS MAKE_DDHRESULT(807)
+#define D3DRMERR_NOSUCHKEY MAKE_DDHRESULT(808)
+#define D3DRMERR_INCOMPATABLEKEY MAKE_DDHRESULT(809)
+#define D3DRMERR_ELEMENTINUSE MAKE_DDHRESULT(810)
+#define D3DRMERR_TEXTUREFORMATNOTFOUND MAKE_DDHRESULT(811)
+#define D3DRMERR_NOTAGGREGATED MAKE_DDHRESULT(812)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DRM_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h
new file mode 100644
index 00000000..ec940818
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmdef.h
@@ -0,0 +1,475 @@
+/*
+ * Copyright 2007,2010 Vijay Kiran Kamuju
+ * Copyright 2007 David ADAM
+ * Copyright 2010 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRMDEFS_H__
+#define __D3DRMDEFS_H__
+
+#include <stddef.h>
+#include <d3dtypes.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+typedef struct _D3DRMVECTOR4D
+{
+ D3DVALUE x;
+ D3DVALUE y;
+ D3DVALUE z;
+ D3DVALUE w;
+} D3DRMVECTOR4D, *LPD3DRMVECTOR4D;
+
+typedef D3DVALUE D3DRMMATRIX4D[4][4];
+
+typedef struct _D3DRMQUATERNION {
+ D3DVALUE s;
+ D3DVECTOR v;
+} D3DRMQUATERNION, *LPD3DRMQUATERNION;
+
+typedef struct _D3DRMRAY {
+ D3DVECTOR dvDir;
+ D3DVECTOR dvPos;
+} D3DRMRAY, *LPD3DRMRAY;
+
+typedef struct _D3DRMBOX {
+ D3DVECTOR min;
+ D3DVECTOR max;
+} D3DRMBOX, *LPD3DRMBOX;
+
+typedef void (*D3DRMWRAPCALLBACK)(D3DVECTOR *vec, int *u, int *v, D3DVECTOR *a, D3DVECTOR *b, void *ctx);
+
+typedef enum _D3DRMLIGHTTYPE {
+ D3DRMLIGHT_AMBIENT,
+ D3DRMLIGHT_POINT,
+ D3DRMLIGHT_SPOT,
+ D3DRMLIGHT_DIRECTIONAL,
+ D3DRMLIGHT_PARALLELPOINT
+} D3DRMLIGHTTYPE, *LPD3DRMLIGHTTYPE;
+
+typedef enum _D3DRMSHADEMODE {
+ D3DRMSHADE_FLAT = 0,
+ D3DRMSHADE_GOURAUD = 1,
+ D3DRMSHADE_PHONG = 2,
+ D3DRMSHADE_MASK = 7,
+ D3DRMSHADE_MAX = 8
+} D3DRMSHADEMODE, *LPD3DRMSHADEMODE;
+
+typedef enum _D3DRMLIGHTMODE {
+ D3DRMLIGHT_OFF = 0 * D3DRMSHADE_MAX,
+ D3DRMLIGHT_ON = 1 * D3DRMSHADE_MAX,
+ D3DRMLIGHT_MASK = 7 * D3DRMSHADE_MAX,
+ D3DRMLIGHT_MAX = 8 * D3DRMSHADE_MAX
+} D3DRMLIGHTMODE, *LPD3DRMLIGHTMODE;
+
+typedef enum _D3DRMFILLMODE {
+ D3DRMFILL_POINTS = 0 * D3DRMLIGHT_MAX,
+ D3DRMFILL_WIREFRAME = 1 * D3DRMLIGHT_MAX,
+ D3DRMFILL_SOLID = 2 * D3DRMLIGHT_MAX,
+ D3DRMFILL_MASK = 7 * D3DRMLIGHT_MAX,
+ D3DRMFILL_MAX = 8 * D3DRMLIGHT_MAX
+} D3DRMFILLMODE, *LPD3DRMFILLMODE;
+
+typedef DWORD D3DRMRENDERQUALITY, *LPD3DRMRENDERQUALITY;
+
+#define D3DRMRENDER_WIREFRAME (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_WIREFRAME)
+#define D3DRMRENDER_UNLITFLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_OFF+D3DRMFILL_SOLID)
+#define D3DRMRENDER_FLAT (D3DRMSHADE_FLAT+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
+#define D3DRMRENDER_GOURAUD (D3DRMSHADE_GOURAUD+D3DRMLIGHT_ON+D3DRMFILL_SOLID)
+#define D3DRMRENDER_PHONG (D3DRMSHADE_PHONG+D3DRMLIGHT_ON+D3DRMFILL_SOLID
+
+#define D3DRMRENDERMODE_BLENDEDTRANSPARENCY 1
+#define D3DRMRENDERMODE_SORTEDTRANSPARENCY 2
+#define D3DRMRENDERMODE_LIGHTINMODELSPACE 8
+#define D3DRMRENDERMODE_VIEWDEPENDENTSPECULAR 16
+#define D3DRMRENDERMODE_DISABLESORTEDALPHAZWRITE 32
+
+typedef enum _D3DRMTEXTUREQUALITY {
+ D3DRMTEXTURE_NEAREST,
+ D3DRMTEXTURE_LINEAR,
+ D3DRMTEXTURE_MIPNEAREST,
+ D3DRMTEXTURE_MIPLINEAR,
+ D3DRMTEXTURE_LINEARMIPNEAREST,
+ D3DRMTEXTURE_LINEARMIPLINEAR
+} D3DRMTEXTUREQUALITY, *LPD3DRMTEXTUREQUALITY;
+
+#define D3DRMTEXTURE_FORCERESIDENT 0x00000001
+#define D3DRMTEXTURE_STATIC 0x00000002
+#define D3DRMTEXTURE_DOWNSAMPLEPOINT 0x00000004
+#define D3DRMTEXTURE_DOWNSAMPLEBILINEAR 0x00000008
+#define D3DRMTEXTURE_DOWNSAMPLEREDUCEDEPTH 0x00000010
+#define D3DRMTEXTURE_DOWNSAMPLENONE 0x00000020
+#define D3DRMTEXTURE_CHANGEDPIXELS 0x00000040
+#define D3DRMTEXTURE_CHANGEDPALETTE 0x00000080
+#define D3DRMTEXTURE_INVALIDATEONLY 0x00000100
+
+#define D3DRMSHADOW_TRUEALPHA 0x00000001
+
+typedef enum _D3DRMCOMBINETYPE {
+ D3DRMCOMBINE_REPLACE,
+ D3DRMCOMBINE_BEFORE,
+ D3DRMCOMBINE_AFTER
+} D3DRMCOMBINETYPE, *LPD3DRMCOMBINETYPE;
+
+typedef D3DCOLORMODEL D3DRMCOLORMODEL, *LPD3DRMCOLORMODEL;
+
+typedef enum _D3DRMPALETTEFLAGS
+{
+ D3DRMPALETTE_FREE,
+ D3DRMPALETTE_READONLY,
+ D3DRMPALETTE_RESERVED
+} D3DRMPALETTEFLAGS, *LPD3DRMPALETTEFLAGS;
+
+typedef struct _D3DRMPALETTEENTRY {
+ unsigned char red;
+ unsigned char green;
+ unsigned char blue;
+ unsigned char flags;
+} D3DRMPALETTEENTRY, *LPD3DRMPALETTEENTRY;
+
+typedef struct _D3DRMIMAGE {
+ int width;
+ int height;
+ int aspectx;
+ int aspecty;
+ int depth;
+ int rgb;
+ int bytes_per_line;
+ void* buffer1;
+ void* buffer2;
+ ULONG red_mask;
+ ULONG green_mask;
+ ULONG blue_mask;
+ ULONG alpha_mask;
+ int palette_size;
+ D3DRMPALETTEENTRY* palette;
+} D3DRMIMAGE, *LPD3DRMIMAGE;
+
+typedef enum _D3DRMWRAPTYPE {
+ D3DRMWRAP_FLAT,
+ D3DRMWRAP_CYLINDER,
+ D3DRMWRAP_SPHERE,
+ D3DRMWRAP_CHROME,
+ D3DRMWRAP_SHEET,
+ D3DRMWRAP_BOX
+} D3DRMWRAPTYPE, *LPD3DRMWRAPTYPE;
+
+#define D3DRMWIREFRAME_CULL 1
+#define D3DRMWIREFRAME_HIDDENLINE 2
+
+typedef enum _D3DRMPROJECTIONTYPE
+{
+ D3DRMPROJECT_PERSPECTIVE,
+ D3DRMPROJECT_ORTHOGRAPHIC,
+ D3DRMPROJECT_RIGHTHANDPERSPECTIVE,
+ D3DRMPROJECT_RIGHTHANDORTHOGRAPHIC
+} D3DRMPROJECTIONTYPE, *LPD3DRMPROJECTIONTYPE;
+
+#define D3DRMOPTIONS_LEFTHANDED 0x00000001
+#define D3DRMOPTIONS_RIGHTHANDED 0x00000002
+
+typedef enum _D3DRMXOFFORMAT {
+ D3DRMXOF_BINARY,
+ D3DRMXOF_COMPRESSED,
+ D3DRMXOF_TEXT
+} D3DRMXOFFORMAT, *LPD3DRMXOFFORMAT;
+
+typedef DWORD D3DRMSAVEOPTIONS;
+#define D3DRMXOFSAVE_NORMALS 1
+#define D3DRMXOFSAVE_TEXTURECOORDINATES 2
+#define D3DRMXOFSAVE_MATERIALS 4
+#define D3DRMXOFSAVE_TEXTURENAMES 8
+#define D3DRMXOFSAVE_ALL 15
+#define D3DRMXOFSAVE_TEMPLATES 16
+#define D3DRMXOFSAVE_TEXTURETOPOLOGY 32
+
+typedef enum _D3DRMCOLORSOURCE {
+ D3DRMCOLOR_FROMFACE,
+ D3DRMCOLOR_FROMVERTEX
+} D3DRMCOLORSOURCE, *LPD3DRMCOLORSOURCE;
+
+typedef enum _D3DRMFRAMECONSTRAINT {
+ D3DRMCONSTRAIN_Z,
+ D3DRMCONSTRAIN_Y,
+ D3DRMCONSTRAIN_X
+} D3DRMFRAMECONSTRAINT, *LPD3DRMFRAMECONSTRAINT;
+
+typedef enum _D3DRMMATERIALMODE {
+ D3DRMMATERIAL_FROMMESH,
+ D3DRMMATERIAL_FROMPARENT,
+ D3DRMMATERIAL_FROMFRAME
+} D3DRMMATERIALMODE, *LPD3DRMMATERIALMODE;
+
+typedef enum _D3DRMFOGMODE {
+ D3DRMFOG_LINEAR,
+ D3DRMFOG_EXPONENTIAL,
+ D3DRMFOG_EXPONENTIALSQUARED
+} D3DRMFOGMODE, *LPD3DRMFOGMODE;
+
+typedef enum _D3DRMZBUFFERMODE {
+ D3DRMZBUFFER_FROMPARENT,
+ D3DRMZBUFFER_ENABLE,
+ D3DRMZBUFFER_DISABLE
+} D3DRMZBUFFERMODE, *LPD3DRMZBUFFERMODE;
+
+typedef enum _D3DRMSORTMODE {
+ D3DRMSORT_FROMPARENT,
+ D3DRMSORT_NONE,
+ D3DRMSORT_FRONTTOBACK,
+ D3DRMSORT_BACKTOFRONT
+} D3DRMSORTMODE, *LPD3DRMSORTMODE;
+
+typedef struct _D3DRMMATERIALOVERRIDE {
+ DWORD dwSize;
+ DWORD dwFlags;
+ D3DCOLORVALUE dcDiffuse;
+ D3DCOLORVALUE dcAmbient;
+ D3DCOLORVALUE dcEmissive;
+ D3DCOLORVALUE dcSpecular;
+ D3DVALUE dvPower;
+ IUnknown *lpD3DRMTex;
+} D3DRMMATERIALOVERRIDE, *LPD3DRMMATERIALOVERRIDE;
+
+#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAONLY 0x00000001
+#define D3DRMMATERIALOVERRIDE_DIFFUSE_RGBONLY 0x00000002
+#define D3DRMMATERIALOVERRIDE_DIFFUSE 0x00000003
+#define D3DRMMATERIALOVERRIDE_AMBIENT 0x00000004
+#define D3DRMMATERIALOVERRIDE_EMISSIVE 0x00000008
+#define D3DRMMATERIALOVERRIDE_SPECULAR 0x00000010
+#define D3DRMMATERIALOVERRIDE_POWER 0x00000020
+#define D3DRMMATERIALOVERRIDE_TEXTURE 0x00000040
+#define D3DRMMATERIALOVERRIDE_DIFFUSE_ALPHAMULTIPLY 0x00000080
+#define D3DRMMATERIALOVERRIDE_ALL 0x000000FF
+
+#define D3DRMFPTF_ALPHA 0x00000001
+#define D3DRMFPTF_NOALPHA 0x00000002
+#define D3DRMFPTF_PALETTIZED 0x00000004
+#define D3DRMFPTF_NOTPALETTIZED 0x00000008
+
+#define D3DRMSTATECHANGE_UPDATEONLY 0x000000001
+#define D3DRMSTATECHANGE_VOLATILE 0x000000002
+#define D3DRMSTATECHANGE_NONVOLATILE 0x000000004
+#define D3DRMSTATECHANGE_RENDER 0x000000020
+#define D3DRMSTATECHANGE_LIGHT 0x000000040
+
+#define D3DRMDEVICE_NOZBUFFER 0x00000001
+
+#define D3DRMCALLBACK_PREORDER 0
+#define D3DRMCALLBACK_POSTORDER 1
+
+#define D3DRMRAYPICK_ONLYBOUNDINGBOXES 0x01
+#define D3DRMRAYPICK_IGNOREFURTHERPRIMITIVES 0x02
+#define D3DRMRAYPICK_INTERPOLATEUV 0x04
+#define D3DRMRAYPICK_INTERPOLATECOLOR 0x08
+#define D3DRMRAYPICK_INTERPOLATENORMAL 0x10
+
+#define D3DRMADDFACES_VERTICESONLY 1
+
+#define D3DRMGENERATENORMALS_PRECOMPACT 1
+#define D3DRMGENERATENORMALS_USECREASEANGLE 2
+
+#define D3DRMMESHBUILDER_DIRECTPARENT 1
+#define D3DRMMESHBUILDER_ROOTMESH 2
+
+#define D3DRMMESHBUILDER_RENDERENABLE 0x00000001
+#define D3DRMMESHBUILDER_PICKENABLE 0x00000002
+
+#define D3DRMADDMESHBUILDER_DONTCOPYAPPDATA 1
+#define D3DRMADDMESHBUILDER_FLATTENSUBMESHES 2
+#define D3DRMADDMESHBUILDER_NOSUBMESHES 4
+
+#define D3DRMMESHBUILDERAGE_GEOMETRY 0x00000001
+#define D3DRMMESHBUILDERAGE_MATERIALS 0x00000002
+#define D3DRMMESHBUILDERAGE_TEXTURES 0x00000004
+
+#define D3DRMFVF_TYPE 0x00000001
+#define D3DRMFVF_NORMAL 0x00000002
+#define D3DRMFVF_COLOR 0x00000004
+#define D3DRMFVF_TEXTURECOORDS 0x00000008
+
+#define D3DRMVERTEX_STRIP 0x00000001
+#define D3DRMVERTEX_FAN 0x00000002
+#define D3DRMVERTEX_LIST 0x00000004
+
+#define D3DRMCLEAR_TARGET 0x00000001
+#define D3DRMCLEAR_ZBUFFER 0x00000002
+#define D3DRMCLEAR_DIRTYRECTS 0x00000004
+#define D3DRMCLEAR_ALL (D3DRMCLEAR_TARGET | D3DRMCLEAR_ZBUFFER | D3DRMCLEAR_DIRTYRECTS)
+
+#define D3DRMFOGMETHOD_VERTEX 0x00000001
+#define D3DRMFOGMETHOD_TABLE 0x00000002
+#define D3DRMFOGMETHOD_ANY 0x00000004
+
+#define D3DRMFRAME_RENDERENABLE 0x00000001
+#define D3DRMFRAME_PICKENABLE 0x00000002
+
+typedef DWORD D3DRMANIMATIONOPTIONS;
+#define D3DRMANIMATION_OPEN 0x00000001
+#define D3DRMANIMATION_CLOSED 0x00000002
+#define D3DRMANIMATION_LINEARPOSITION 0x00000004
+#define D3DRMANIMATION_SPLINEPOSITION 0x00000008
+#define D3DRMANIMATION_SCALEANDROTATION 0x00000010
+#define D3DRMANIMATION_POSITION 0x00000020
+
+typedef DWORD D3DRMINTERPOLATIONOPTIONS;
+#define D3DRMINTERPOLATION_OPEN 0x0001
+#define D3DRMINTERPOLATION_CLOSED 0x0002
+#define D3DRMINTERPOLATION_NEAREST 0x0100
+#define D3DRMINTERPOLATION_LINEAR 0x0004
+#define D3DRMINTERPOLATION_SPLINE 0x0008
+#define D3DRMINTERPOLATION_VERTEXCOLOR 0x0040
+#define D3DRMINTERPOLATION_SLERPNORMALS 0x0080
+
+typedef DWORD D3DRMLOADOPTIONS;
+
+#define D3DRMLOAD_FROMFILE __MSABI_LONG(0x000)
+#define D3DRMLOAD_FROMRESOURCE __MSABI_LONG(0x001)
+#define D3DRMLOAD_FROMMEMORY __MSABI_LONG(0x002)
+#define D3DRMLOAD_FROMSTREAM __MSABI_LONG(0x004)
+#define D3DRMLOAD_FROMURL __MSABI_LONG(0x008)
+
+#define D3DRMLOAD_BYNAME __MSABI_LONG(0x010)
+#define D3DRMLOAD_BYPOSITION __MSABI_LONG(0x020)
+#define D3DRMLOAD_BYGUID __MSABI_LONG(0x040)
+#define D3DRMLOAD_FIRST __MSABI_LONG(0x080)
+
+#define D3DRMLOAD_INSTANCEBYREFERENCE __MSABI_LONG(0x100)
+#define D3DRMLOAD_INSTANCEBYCOPYING __MSABI_LONG(0x200)
+
+#define D3DRMLOAD_ASYNCHRONOUS __MSABI_LONG(0x400)
+
+typedef struct _D3DRMLOADRESOURCE
+{
+ HMODULE hModule;
+ const char *lpName;
+ const char *lpType;
+} D3DRMLOADRESOURCE, *LPD3DRMLOADRESOURCE;
+
+typedef struct _D3DRMLOADMEMORY
+{
+ void *lpMemory;
+ DWORD dSize;
+} D3DRMLOADMEMORY, *LPD3DRMLOADMEMORY;
+
+#define D3DRMPMESHSTATUS_VALID 0x01
+#define D3DRMPMESHSTATUS_INTERRUPTED 0x02
+#define D3DRMPMESHSTATUS_BASEMESHCOMPLETE 0x04
+#define D3DRMPMESHSTATUS_COMPLETE 0x08
+#define D3DRMPMESHSTATUS_RENDERABLE 0x10
+
+#define D3DRMPMESHEVENT_BASEMESH 0x01
+#define D3DRMPMESHEVENT_COMPLETE 0x02
+
+typedef struct _D3DRMPMESHLOADSTATUS {
+ DWORD dwSize;
+ DWORD dwPMeshSize;
+ DWORD dwBaseMeshSize;
+ DWORD dwBytesLoaded;
+ DWORD dwVerticesLoaded;
+ DWORD dwFacesLoaded;
+ HRESULT dwLoadResult;
+ DWORD dwFlags;
+} D3DRMPMESHLOADSTATUS, *LPD3DRMPMESHLOADSTATUS;
+
+typedef enum _D3DRMUSERVISUALREASON {
+ D3DRMUSERVISUAL_CANSEE,
+ D3DRMUSERVISUAL_RENDER
+} D3DRMUSERVISUALREASON, *LPD3DRMUSERVISUALREASON;
+
+typedef struct _D3DRMANIMATIONKEY
+{
+ DWORD dwSize;
+ DWORD dwKeyType;
+ D3DVALUE dvTime;
+ DWORD dwID;
+#if !defined(__cplusplus) || !defined(D3D_OVERLOADS)
+ union
+ {
+ D3DRMQUATERNION dqRotateKey;
+ D3DVECTOR dvScaleKey;
+ D3DVECTOR dvPositionKey;
+ } DUMMYUNIONNAME;
+#else
+ D3DVALUE dvK[4];
+#endif
+} D3DRMANIMATIONKEY;
+typedef D3DRMANIMATIONKEY *LPD3DRMANIMATIONKEY;
+
+#define D3DRMANIMATION_ROTATEKEY 0x01
+#define D3DRMANIMATION_SCALEKEY 0x02
+#define D3DRMANIMATION_POSITIONKEY 0x03
+
+typedef DWORD D3DRMMAPPING, D3DRMMAPPINGFLAG, *LPD3DRMMAPPING;
+static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPU = 1;
+static const D3DRMMAPPINGFLAG D3DRMMAP_WRAPV = 2;
+static const D3DRMMAPPINGFLAG D3DRMMAP_PERSPCORRECT = 4;
+
+typedef struct _D3DRMVERTEX {
+ D3DVECTOR position;
+ D3DVECTOR normal;
+ D3DVALUE tu;
+ D3DVALUE tv;
+ D3DCOLOR color;
+} D3DRMVERTEX, *LPD3DRMVERTEX;
+
+typedef LONG D3DRMGROUPINDEX;
+static const D3DRMGROUPINDEX D3DRMGROUP_ALLGROUPS = -1;
+
+void WINAPI D3DRMMatrixFromQuaternion(D3DRMMATRIX4D m, D3DRMQUATERNION *q);
+
+D3DRMQUATERNION * WINAPI D3DRMQuaternionFromRotation(D3DRMQUATERNION *x, D3DVECTOR *axis, D3DVALUE theta);
+D3DRMQUATERNION * WINAPI D3DRMQuaternionMultiply(D3DRMQUATERNION *ret, D3DRMQUATERNION *x, D3DRMQUATERNION *y);
+D3DRMQUATERNION * WINAPI D3DRMQuaternionSlerp(D3DRMQUATERNION *ret,
+ D3DRMQUATERNION *x, D3DRMQUATERNION *y, D3DVALUE alpha);
+
+D3DVECTOR * WINAPI D3DRMVectorAdd(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);
+D3DVECTOR * WINAPI D3DRMVectorCrossProduct(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);
+D3DVALUE WINAPI D3DRMVectorDotProduct(D3DVECTOR *x, D3DVECTOR *y);
+D3DVECTOR * WINAPI D3DRMVectorNormalize(D3DVECTOR *x);
+
+#define D3DRMVectorNormalise D3DRMVectorNormalize
+
+D3DVALUE WINAPI D3DRMVectorModulus(D3DVECTOR *x);
+D3DVECTOR * WINAPI D3DRMVectorRandom(D3DVECTOR *ret);
+D3DVECTOR * WINAPI D3DRMVectorRotate(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *axis, D3DVALUE theta);
+D3DVECTOR * WINAPI D3DRMVectorReflect(D3DVECTOR *ret, D3DVECTOR *ray, D3DVECTOR *normal);
+D3DVECTOR * WINAPI D3DRMVectorScale(D3DVECTOR *ret, D3DVECTOR *x, D3DVALUE scale);
+D3DVECTOR * WINAPI D3DRMVectorSubtract(D3DVECTOR *ret, D3DVECTOR *x, D3DVECTOR *y);
+
+D3DCOLOR WINAPI D3DRMCreateColorRGB(D3DVALUE, D3DVALUE, D3DVALUE);
+D3DCOLOR WINAPI D3DRMCreateColorRGBA(D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE);
+D3DVALUE WINAPI D3DRMColorGetAlpha(D3DCOLOR);
+D3DVALUE WINAPI D3DRMColorGetBlue(D3DCOLOR);
+D3DVALUE WINAPI D3DRMColorGetGreen(D3DCOLOR);
+D3DVALUE WINAPI D3DRMColorGetRed(D3DCOLOR);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h
new file mode 100644
index 00000000..41541515
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmobj.h
@@ -0,0 +1,4711 @@
+/*
+ * Copyright (C) 2008 Vijay Kiran Kamuju
+ * Copyright (C) 2010 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRMOBJ_H__
+#define __D3DRMOBJ_H__
+
+#include <objbase.h>
+#define VIRTUAL
+#include <d3drmdef.h>
+#include <d3d.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Direct3DRM object CLSIDs */
+
+DEFINE_GUID(CLSID_CDirect3DRMDevice, 0x4fa3568e, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMViewport, 0x4fa3568f, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMFrame, 0x4fa35690, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMMesh, 0x4fa35691, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMMeshBuilder, 0x4fa35692, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMFace, 0x4fa35693, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMLight, 0x4fa35694, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMTexture, 0x4fa35695, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMWrap, 0x4fa35696, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMMaterial, 0x4fa35697, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMAnimation, 0x4fa35698, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMAnimationSet, 0x4fa35699, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMUserVisual, 0x4fa3569a, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMShadow, 0x4fa3569b, 0x623f, 0x11cf, 0xac, 0x4a, 0x0, 0x0, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(CLSID_CDirect3DRMViewportInterpolator, 0xde9eaa1, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMFrameInterpolator, 0xde9eaa2, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMMeshInterpolator, 0xde9eaa3, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMLightInterpolator, 0xde9eaa6, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMMaterialInterpolator, 0xde9eaa7, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMTextureInterpolator, 0xde9eaa8, 0x3b84, 0x11d0, 0x9b, 0x6d, 0x0, 0x0, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMProgressiveMesh, 0x4516ec40, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(CLSID_CDirect3DRMClippedVisual, 0x5434e72d, 0x6d66, 0x11d1, 0xbb, 0xb, 0x0, 0x0, 0xf8, 0x75, 0x86, 0x5a);
+
+/* Direct3DRM object interface GUIDs */
+
+DEFINE_GUID(IID_IDirect3DRMObject, 0xeb16cb00, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMObject2, 0x4516ec7c, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMDevice, 0xe9e19280, 0x6e05, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMDevice2, 0x4516ec78, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMDevice3, 0x549f498b, 0xbfeb, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82);
+DEFINE_GUID(IID_IDirect3DRMViewport, 0xeb16cb02, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMViewport2, 0x4a1b1be6, 0xbfed, 0x11d1, 0x8e, 0xd8, 0x00, 0xa0, 0xc9, 0x67, 0xa4, 0x82);
+DEFINE_GUID(IID_IDirect3DRMFrame, 0xeb16cb03, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFrame2, 0xc3dfbd60, 0x3988, 0x11d0, 0x9e, 0xc2, 0x00, 0x00, 0xc0, 0x29, 0x1a, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMFrame3, 0xff6b7f70, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMVisual, 0xeb16cb04, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMesh, 0xa3a80d01, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMeshBuilder, 0xa3a80d02, 0x6e12, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMeshBuilder2, 0x4516ec77, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMMeshBuilder3, 0x4516ec82, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMFace, 0xeb16cb07, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFace2, 0x4516ec81, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMLight, 0xeb16cb08, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMTexture, 0xeb16cb09, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMTexture2, 0x120f30c0, 0x1629, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+DEFINE_GUID(IID_IDirect3DRMTexture3, 0xff6b7f73, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMWrap, 0xeb16cb0a, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMaterial, 0xeb16cb0b, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMMaterial2, 0xff6b7f75, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMAnimation, 0xeb16cb0d, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMAnimation2, 0xff6b7f77, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMAnimationSet, 0xeb16cb0e, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMAnimationSet2, 0xff6b7f79, 0xa40e, 0x11d1, 0x91, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0x8e, 0x66);
+DEFINE_GUID(IID_IDirect3DRMObjectArray, 0x242f6bc2, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMDeviceArray, 0xeb16cb10, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMViewportArray, 0xeb16cb11, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFrameArray, 0xeb16cb12, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMVisualArray, 0xeb16cb13, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMLightArray, 0xeb16cb14, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMPickedArray, 0xeb16cb16, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMFaceArray, 0xeb16cb17, 0xd271, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMAnimationArray, 0xd5f1cae0, 0x4bd7, 0x11d1, 0xb9, 0x74, 0x00, 0x60, 0x08, 0x3e, 0x45, 0xf3);
+DEFINE_GUID(IID_IDirect3DRMUserVisual, 0x59163de0, 0x6d43, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMShadow, 0xaf359780, 0x6ba3, 0x11cf, 0xac, 0x4a, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+DEFINE_GUID(IID_IDirect3DRMShadow2, 0x86b44e25, 0x9c82, 0x11d1, 0xbb, 0x0b, 0x00, 0xa0, 0xc9, 0x81, 0xa0, 0xa6);
+DEFINE_GUID(IID_IDirect3DRMInterpolator, 0x242f6bc1, 0x3849, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMProgressiveMesh, 0x4516ec79, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMPicked2Array, 0x4516ec7b, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+DEFINE_GUID(IID_IDirect3DRMClippedVisual, 0x5434e733, 0x6d66, 0x11d1, 0xbb, 0x0b, 0x00, 0x00, 0xf8, 0x75, 0x86, 0x5a);
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+
+typedef struct IDirect3DRMObject *LPDIRECT3DRMOBJECT, **LPLPDIRECT3DRMOBJECT;
+typedef struct IDirect3DRMObject2 *LPDIRECT3DRMOBJECT2, **LPLPDIRECT3DRMOBJECT2;
+typedef struct IDirect3DRMDevice *LPDIRECT3DRMDEVICE, **LPLPDIRECT3DRMDEVICE;
+typedef struct IDirect3DRMDevice2 *LPDIRECT3DRMDEVICE2, **LPLPDIRECT3DRMDEVICE2;
+typedef struct IDirect3DRMDevice3 *LPDIRECT3DRMDEVICE3, **LPLPDIRECT3DRMDEVICE3;
+typedef struct IDirect3DRMViewport *LPDIRECT3DRMVIEWPORT, **LPLPDIRECT3DRMVIEWPORT;
+typedef struct IDirect3DRMViewport2 *LPDIRECT3DRMVIEWPORT2, **LPLPDIRECT3DRMVIEWPORT2;
+typedef struct IDirect3DRMFrame *LPDIRECT3DRMFRAME, **LPLPDIRECT3DRMFRAME;
+typedef struct IDirect3DRMFrame2 *LPDIRECT3DRMFRAME2, **LPLPDIRECT3DRMFRAME2;
+typedef struct IDirect3DRMFrame3 *LPDIRECT3DRMFRAME3, **LPLPDIRECT3DRMFRAME3;
+typedef struct IDirect3DRMVisual *LPDIRECT3DRMVISUAL, **LPLPDIRECT3DRMVISUAL;
+typedef struct IDirect3DRMMesh *LPDIRECT3DRMMESH, **LPLPDIRECT3DRMMESH;
+typedef struct IDirect3DRMMeshBuilder *LPDIRECT3DRMMESHBUILDER, **LPLPDIRECT3DRMMESHBUILDER;
+typedef struct IDirect3DRMMeshBuilder2 *LPDIRECT3DRMMESHBUILDER2, **LPLPDIRECT3DRMMESHBUILDER2;
+typedef struct IDirect3DRMMeshBuilder3 *LPDIRECT3DRMMESHBUILDER3, **LPLPDIRECT3DRMMESHBUILDER3;
+typedef struct IDirect3DRMFace *LPDIRECT3DRMFACE, **LPLPDIRECT3DRMFACE;
+typedef struct IDirect3DRMFace2 *LPDIRECT3DRMFACE2, **LPLPDIRECT3DRMFACE2;
+typedef struct IDirect3DRMLight *LPDIRECT3DRMLIGHT, **LPLPDIRECT3DRMLIGHT;
+typedef struct IDirect3DRMTexture *LPDIRECT3DRMTEXTURE, **LPLPDIRECT3DRMTEXTURE;
+typedef struct IDirect3DRMTexture2 *LPDIRECT3DRMTEXTURE2, **LPLPDIRECT3DRMTEXTURE2;
+typedef struct IDirect3DRMTexture3 *LPDIRECT3DRMTEXTURE3, **LPLPDIRECT3DRMTEXTURE3;
+typedef struct IDirect3DRMWrap *LPDIRECT3DRMWRAP, **LPLPDIRECT3DRMWRAP;
+typedef struct IDirect3DRMMaterial *LPDIRECT3DRMMATERIAL, **LPLPDIRECT3DRMMATERIAL;
+typedef struct IDirect3DRMMaterial2 *LPDIRECT3DRMMATERIAL2, **LPLPDIRECT3DRMMATERIAL2;
+typedef struct IDirect3DRMAnimation *LPDIRECT3DRMANIMATION, **LPLPDIRECT3DRMANIMATION;
+typedef struct IDirect3DRMAnimation2 *LPDIRECT3DRMANIMATION2, **LPLPDIRECT3DRMANIMATION2;
+typedef struct IDirect3DRMAnimationSet *LPDIRECT3DRMANIMATIONSET, **LPLPDIRECT3DRMANIMATIONSET;
+typedef struct IDirect3DRMAnimationSet2 *LPDIRECT3DRMANIMATIONSET2, **LPLPDIRECT3DRMANIMATIONSET2;
+typedef struct IDirect3DRMUserVisual *LPDIRECT3DRMUSERVISUAL, **LPLPDIRECT3DRMUSERVISUAL;
+typedef struct IDirect3DRMShadow *LPDIRECT3DRMSHADOW, **LPLPDIRECT3DRMSHADOW;
+typedef struct IDirect3DRMShadow2 *LPDIRECT3DRMSHADOW2, **LPLPDIRECT3DRMSHADOW2;
+typedef struct IDirect3DRMArray *LPDIRECT3DRMARRAY, **LPLPDIRECT3DRMARRAY;
+typedef struct IDirect3DRMObjectArray *LPDIRECT3DRMOBJECTARRAY, **LPLPDIRECT3DRMOBJECTARRAY;
+typedef struct IDirect3DRMDeviceArray *LPDIRECT3DRMDEVICEARRAY, **LPLPDIRECT3DRMDEVICEARRAY;
+typedef struct IDirect3DRMFaceArray *LPDIRECT3DRMFACEARRAY, **LPLPDIRECT3DRMFACEARRAY;
+typedef struct IDirect3DRMViewportArray *LPDIRECT3DRMVIEWPORTARRAY, **LPLPDIRECT3DRMVIEWPORTARRAY;
+typedef struct IDirect3DRMFrameArray *LPDIRECT3DRMFRAMEARRAY, **LPLPDIRECT3DRMFRAMEARRAY;
+typedef struct IDirect3DRMAnimationArray *LPDIRECT3DRMANIMATIONARRAY, **LPLPDIRECT3DRMANIMATIONARRAY;
+typedef struct IDirect3DRMVisualArray *LPDIRECT3DRMVISUALARRAY, **LPLPDIRECT3DRMVISUALARRAY;
+typedef struct IDirect3DRMPickedArray *LPDIRECT3DRMPICKEDARRAY, **LPLPDIRECT3DRMPICKEDARRAY;
+typedef struct IDirect3DRMPicked2Array *LPDIRECT3DRMPICKED2ARRAY, **LPLPDIRECT3DRMPICKED2ARRAY;
+typedef struct IDirect3DRMLightArray *LPDIRECT3DRMLIGHTARRAY, **LPLPDIRECT3DRMLIGHTARRAY;
+typedef struct IDirect3DRMProgressiveMesh *LPDIRECT3DRMPROGRESSIVEMESH, **LPLPDIRECT3DRMPROGRESSIVEMESH;
+typedef struct IDirect3DRMClippedVisual *LPDIRECT3DRMCLIPPEDVISUAL, **LPLPDIRECT3DRMCLIPPEDVISUAL;
+
+/* ********************************************************************
+ Types and structures
+ ******************************************************************** */
+
+typedef void (__cdecl *D3DRMOBJECTCALLBACK)(struct IDirect3DRMObject *obj, void *arg);
+typedef void (__cdecl *D3DRMFRAMEMOVECALLBACK)(struct IDirect3DRMFrame *frame, void *ctx, D3DVALUE delta);
+typedef void (__cdecl *D3DRMFRAME3MOVECALLBACK)(struct IDirect3DRMFrame3 *frame, void *ctx, D3DVALUE delta);
+typedef void (__cdecl *D3DRMUPDATECALLBACK)(struct IDirect3DRMDevice *device, void *ctx, int count, D3DRECT *rects);
+typedef void (__cdecl *D3DRMDEVICE3UPDATECALLBACK)(struct IDirect3DRMDevice3 *device, void *ctx,
+ int count, D3DRECT *rects);
+typedef int (__cdecl *D3DRMUSERVISUALCALLBACK)(struct IDirect3DRMUserVisual *visual, void *ctx,
+ D3DRMUSERVISUALREASON reason, struct IDirect3DRMDevice *device, struct IDirect3DRMViewport *viewport);
+typedef HRESULT (__cdecl *D3DRMLOADTEXTURECALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture **texture);
+typedef HRESULT (__cdecl *D3DRMLOADTEXTURE3CALLBACK)(char *tex_name, void *arg, struct IDirect3DRMTexture3 **texture);
+typedef void (__cdecl *D3DRMLOADCALLBACK)(struct IDirect3DRMObject *object, REFIID objectguid, void *arg);
+typedef HRESULT (__cdecl *D3DRMDOWNSAMPLECALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx,
+ IDirectDrawSurface *src_surface, IDirectDrawSurface *dst_surface);
+typedef HRESULT (__cdecl *D3DRMVALIDATIONCALLBACK)(struct IDirect3DRMTexture3 *texture, void *ctx,
+ DWORD flags, DWORD rect_count, RECT *rects);
+
+typedef struct _D3DRMPICKDESC
+{
+ ULONG ulFaceIdx;
+ LONG lGroupIdx;
+ D3DVECTOR vPosition;
+} D3DRMPICKDESC, *LPD3DRMPICKDESC;
+
+typedef struct _D3DRMPICKDESC2
+{
+ ULONG ulFaceIdx;
+ LONG lGroupIdx;
+ D3DVECTOR vPosition;
+ D3DVALUE tu;
+ D3DVALUE tv;
+ D3DVECTOR dvNormal;
+ D3DCOLOR dcColor;
+} D3DRMPICKDESC2, *LPD3DRMPICKDESC2;
+
+/*****************************************************************************
+ * IDirect3DRMObject interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMObject
+DECLARE_INTERFACE_(IDirect3DRMObject,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMObject_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMObject_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMObject_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMObject_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMObject_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMObject_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMObject_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMObject_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMObject_AddRef(p) (p)->AddRef()
+#define IDirect3DRMObject_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMObject_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMObject_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMObject_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMObject_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMObject_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMObject_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMObject_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMObject_GetClassName(p,a,b) (p)->GetClassName(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMObject2 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMObject2
+DECLARE_INTERFACE_(IDirect3DRMObject2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject2 methods ***/
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(GetClientData)(THIS_ DWORD id, void **data) PURE;
+ STDMETHOD(GetDirect3DRM)(THIS_ struct IDirect3DRM **d3drm) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(SetClientData)(THIS_ DWORD id, void *data, DWORD flags) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetAge)(THIS_ DWORD flags, DWORD *age) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMObject2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMObject2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMObject2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject2 methods ***/
+#define IDirect3DRMObject2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMObject2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMObject2_GetClientData(p,a,b) (p)->lpVtbl->SetClientData(p,a,b)
+#define IDirect3DRMObject2_GetDirect3DRM(p,a) (p)->lpVtbl->GetDirect3DRM(p,a)
+#define IDirect3DRMObject2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMObject2_SetClientData(p,a,b,c) (p)->lpVtbl->SetClientData(p,a,b,c)
+#define IDirect3DRMObject2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMObject2_GetAge(p,a,b) (p)->lpVtbl->GetAge(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMObject2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMObject2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMObject2_Release(p) (p)->Release()
+/*** IDirect3DRMObject2 methods ***/
+#define IDirect3DRMObject2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMObject2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMObject2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMObject2_GetClientData(p,a,b) (p)->SetClientData(a,b)
+#define IDirect3DRMObject2_GetDirect3DRM(p,a) (p)->GetDirect3DRM(a)
+#define IDirect3DRMObject2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMObject2_SetClientData(p,a,b,c) (p)->SetClientData(a,b,c)
+#define IDirect3DRMObject2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMObject2_GetAge(p,a,b) (p)->GetAge(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMVisual interface
+ */
+#define INTERFACE IDirect3DRMVisual
+DECLARE_INTERFACE_(IDirect3DRMVisual,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMVisual_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMVisual_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMVisual_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMVisual_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMVisual_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMVisual_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMVisual_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMVisual_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMVisual_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMVisual_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMVisual_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMVisual_AddRef(p) (p)->AddRef()
+#define IDirect3DRMVisual_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMVisual_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMVisual_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMVisual_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMVisual_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMVisual_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMVisual_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMVisual_GetClassName(p,a,b) (p)->GetClassName(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDevice interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMDevice
+DECLARE_INTERFACE_(IDirect3DRMDevice,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMDevice methods ***/
+ STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
+ STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;
+ STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;
+ STDMETHOD(Update)(THIS) PURE;
+ STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
+ STDMETHOD(SetDither)(THIS_ BOOL) PURE;
+ STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+ STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+ STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
+ STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;
+ STDMETHOD_(BOOL, GetDither)(THIS) PURE;
+ STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+ STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+ STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+ STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
+ STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
+ STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDevice_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMDevice_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMDevice_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMDevice_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMDevice_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMDevice_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMDevice_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
+#define IDirect3DRMDevice_InitFromD3D(p,a,b) (p)->lpVtbl->InitFromD3D(p,a,b)
+#define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d) (p)->lpVtbl->InitFromClipper(p,a,b,c,d)
+#define IDirect3DRMDevice_Update(p) (p)->lpVtbl->Update(p)
+#define IDirect3DRMDevice_AddUpdateCallback(p,a,b) (p)->lpVtbl->AddUpdateCallback(p,a,b)
+#define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b) (p)->lpVtbl->DeleteUpdateCallback(p,a,b)
+#define IDirect3DRMDevice_SetBufferCount(p,a) (p)->lpVtbl->SetBufferCount(p,a)
+#define IDirect3DRMDevice_GetBufferCount(p) (p)->lpVtbl->GetBufferCount(p)
+#define IDirect3DRMDevice_SetDither(p,a) (p)->lpVtbl->SetDither(p,a)
+#define IDirect3DRMDevice_SetShades(p,a) (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMDevice_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMDevice_SetTextureQuality(p,a) (p)->lpVtbl->SetTextureQuality(p,a)
+#define IDirect3DRMDevice_GetViewports(p,a) (p)->lpVtbl->GetViewports(p,a)
+#define IDirect3DRMDevice_GetDither(p) (p)->lpVtbl->GetDither(p)
+#define IDirect3DRMDevice_GetShades(p) (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMDevice_GetHeight(p) (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMDevice_GetWidth(p) (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMDevice_GetTrianglesDrawn(p) (p)->lpVtbl->GetTrianglesDrawn(p)
+#define IDirect3DRMDevice_GetWireframeOptions(p) (p)->lpVtbl->GetWireframeOptions(p)
+#define IDirect3DRMDevice_GetQuality(p) (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMDevice_GetColorModel(p) (p)->lpVtbl->GetColorModel(p)
+#define IDirect3DRMDevice_GetTextureQuality(p) (p)->lpVtbl->GetTextureQuality(p)
+#define IDirect3DRMDevice_GetDirect3DDevice(p,a) (p)->lpVtbl->GetDirect3DDevice(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMDevice_AddRef(p) (p)->AddRef()
+#define IDirect3DRMDevice_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMDevice_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMDevice_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMDevice_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMDevice_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMDevice_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMDevice_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice_Init(p,a,b) (p)->Init(a,b)
+#define IDirect3DRMDevice_InitFromD3D(p,a,b) (p)->InitFromD3D(a,b)
+#define IDirect3DRMDevice_InitFromClipper(p,a,b,c,d) (p)->InitFromClipper(a,b,c,d)
+#define IDirect3DRMDevice_Update(p) (p)->Update()
+#define IDirect3DRMDevice_AddUpdateCallback(p,a,b) (p)->AddUpdateCallback(a,b)
+#define IDirect3DRMDevice_DeleteUpdateCallback(p,a,b) (p)->DeleteUpdateCallback(a,b)
+#define IDirect3DRMDevice_SetBufferCount(p,a) (p)->SetBufferCount(a)
+#define IDirect3DRMDevice_GetBufferCount(p) (p)->GetBufferCount()
+#define IDirect3DRMDevice_SetDither(p,a) (p)->SetDither(a)
+#define IDirect3DRMDevice_SetShades(p,a) (p)->SetShades(a)
+#define IDirect3DRMDevice_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMDevice_SetTextureQuality(p,a) (p)->SetTextureQuality(a)
+#define IDirect3DRMDevice_GetViewports(p,a) (p)->GetViewports(a)
+#define IDirect3DRMDevice_GetDither(p) (p)->GetDither()
+#define IDirect3DRMDevice_GetShades(p) (p)->GetShades()
+#define IDirect3DRMDevice_GetHeight(p) (p)->GetHeight()
+#define IDirect3DRMDevice_GetWidth(p) (p)->GetWidth()
+#define IDirect3DRMDevice_GetTrianglesDrawn(p) (p)->GetTrianglesDrawn()
+#define IDirect3DRMDevice_GetWireframeOptions(p) (p)->GetWireframeOptions()
+#define IDirect3DRMDevice_GetQuality(p) (p)->GetQuality()
+#define IDirect3DRMDevice_GetColorModel(p) (p)->GetColorModel()
+#define IDirect3DRMDevice_GetTextureQuality(p) (p)->GetTextureQuality()
+#define IDirect3DRMDevice_GetDirect3DDevice(p,a) (p)->GetDirect3DDevice(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDevice2 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMDevice2
+DECLARE_INTERFACE_(IDirect3DRMDevice2,IDirect3DRMDevice)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMDevice methods ***/
+ STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
+ STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;
+ STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;
+ STDMETHOD(Update)(THIS) PURE;
+ STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
+ STDMETHOD(SetDither)(THIS_ BOOL) PURE;
+ STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+ STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+ STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
+ STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;
+ STDMETHOD_(BOOL, GetDither)(THIS) PURE;
+ STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+ STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+ STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+ STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
+ STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
+ STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;
+ /*** IDirect3DRMDevice2 methods ***/
+ STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE;
+ STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE;
+ STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE;
+ STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;
+ STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDevice2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMDevice2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMDevice2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMDevice2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMDevice2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMDevice2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMDevice2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice2_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
+#define IDirect3DRMDevice2_InitFromD3D(p,a,b) (p)->lpVtbl->InitFromD3D(p,a,b)
+#define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d) (p)->lpVtbl->InitFromClipper(p,a,b,c,d)
+#define IDirect3DRMDevice2_Update(p) (p)->lpVtbl->Update(p)
+#define IDirect3DRMDevice2_AddUpdateCallback(p,a,b) (p)->lpVtbl->AddUpdateCallback(p,a,b)
+#define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b) (p)->lpVtbl->DeleteUpdateCallback(p,a,b)
+#define IDirect3DRMDevice2_SetBufferCount(p,a) (p)->lpVtbl->SetBufferCount(p,a)
+#define IDirect3DRMDevice2_GetBufferCount(p) (p)->lpVtbl->GetBufferCount(p)
+#define IDirect3DRMDevice2_SetDither(p,a) (p)->lpVtbl->SetDither(p,a)
+#define IDirect3DRMDevice2_SetShades(p,a) (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMDevice2_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMDevice2_SetTextureQuality(p,a) (p)->lpVtbl->SetTextureQuality(p,a)
+#define IDirect3DRMDevice2_GetViewports(p,a) (p)->lpVtbl->GetViewports(p,a)
+#define IDirect3DRMDevice2_GetDither(p) (p)->lpVtbl->GetDither(p)
+#define IDirect3DRMDevice2_GetShades(p) (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMDevice2_GetHeight(p) (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMDevice2_GetWidth(p) (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMDevice2_GetTrianglesDrawn(p) (p)->lpVtbl->GetTrianglesDrawn(p)
+#define IDirect3DRMDevice2_GetWireframeOptions(p) (p)->lpVtbl->GetWireframeOptions(p)
+#define IDirect3DRMDevice2_GetQuality(p) (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMDevice2_GetColorModel(p) (p)->lpVtbl->GetColorModel(p)
+#define IDirect3DRMDevice2_GetTextureQuality(p) (p)->lpVtbl->GetTextureQuality(p)
+#define IDirect3DRMDevice2_GetDirect3DDevice(p,a) (p)->lpVtbl->GetDirect3DDevice(p,a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice2_InitFromD3D2(p,a,b) (p)->lpVtbl->InitFromD3D2(p,a,b)
+#define IDirect3DRMDevice2_InitFromSurface(p,a,b,c) (p)->lpVtbl->InitFromSurface(p,a,b,c)
+#define IDirect3DRMDevice2_SetRenderMode(p,a) (p)->lpVtbl->SetRenderMode(p,a)
+#define IDirect3DRMDevice2_GetRenderMode(p) (p)->lpVtbl->GetRenderMode(p)
+#define IDirect3DRMDevice2_GetDirect3DDevice2(p,a) (p)->lpVtbl->GetDirect3DDevice2(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMDevice2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMDevice2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMDevice2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMDevice2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMDevice2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMDevice2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMDevice2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMDevice2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMDevice2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice2_Init(p,a,b) (p)->Init(a,b)
+#define IDirect3DRMDevice2_InitFromD3D(p,a,b) (p)->InitFromD3D(a,b)
+#define IDirect3DRMDevice2_InitFromClipper(p,a,b,c,d) (p)->InitFromClipper(a,b,c,d)
+#define IDirect3DRMDevice2_Update(p) (p)->Update()
+#define IDirect3DRMDevice2_AddUpdateCallback(p,a,b) (p)->AddUpdateCallback(a,b)
+#define IDirect3DRMDevice2_DeleteUpdateCallback(p,a,b) (p)->DeleteUpdateCallback(a,b)
+#define IDirect3DRMDevice2_SetBufferCount(p,a) (p)->SetBufferCount(a)
+#define IDirect3DRMDevice2_GetBufferCount(p) (p)->GetBufferCount()
+#define IDirect3DRMDevice2_SetDither(p,a) (p)->SetDither(a)
+#define IDirect3DRMDevice2_SetShades(p,a) (p)->SetShades(a)
+#define IDirect3DRMDevice2_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMDevice2_SetTextureQuality(p,a) (p)->SetTextureQuality(a)
+#define IDirect3DRMDevice2_GetViewports(p,a) (p)->GetViewports(a)
+#define IDirect3DRMDevice2_GetDither(p) (p)->GetDither()
+#define IDirect3DRMDevice2_GetShades(p) (p)->GetShades()
+#define IDirect3DRMDevice2_GetHeight(p) (p)->GetHeight()
+#define IDirect3DRMDevice2_GetWidth(p) (p)->GetWidth()
+#define IDirect3DRMDevice2_GetTrianglesDrawn(p) (p)->GetTrianglesDrawn()
+#define IDirect3DRMDevice2_GetWireframeOptions(p) (p)->GetWireframeOptions()
+#define IDirect3DRMDevice2_GetQuality(p) (p)->GetQuality()
+#define IDirect3DRMDevice2_GetColorModel(p) (p)->GetColorModel()
+#define IDirect3DRMDevice2_GetTextureQuality(p) (p)->GetTextureQuality()
+#define IDirect3DRMDevice2_GetDirect3DDevice(p,a) (p)->GetDirect3DDevice(a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice2_InitFromD3D2(p,a,b) (p)->InitFromD3D2(a,b)
+#define IDirect3DRMDevice2_InitFromSurface(p,a,b,c) (p)->InitFromSurface(a,b,c)
+#define IDirect3DRMDevice2_SetRenderMode(p,a) (p)->SetRenderMode(a)
+#define IDirect3DRMDevice2_GetRenderMode(p) (p)->GetRenderMode()
+#define IDirect3DRMDevice2_GetDirect3DDevice2(p,a) (p)->GetDirect3DDevice2(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDevice3 interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetClassName
+#endif
+#define INTERFACE IDirect3DRMDevice3
+DECLARE_INTERFACE_(IDirect3DRMDevice3,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMDevice methods ***/
+ STDMETHOD(Init)(THIS_ ULONG width, ULONG height) PURE;
+ STDMETHOD(InitFromD3D)(THIS_ IDirect3D *d3d, IDirect3DDevice *d3d_device) PURE;
+ STDMETHOD(InitFromClipper)(THIS_ IDirectDrawClipper *clipper, GUID *guid, int width, int height) PURE;
+ STDMETHOD(Update)(THIS) PURE;
+ STDMETHOD(AddUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteUpdateCallback)(THIS_ D3DRMUPDATECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetBufferCount)(THIS_ DWORD) PURE;
+ STDMETHOD_(DWORD, GetBufferCount)(THIS) PURE;
+ STDMETHOD(SetDither)(THIS_ BOOL) PURE;
+ STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+ STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+ STDMETHOD(SetTextureQuality)(THIS_ D3DRMTEXTUREQUALITY) PURE;
+ STDMETHOD(GetViewports)(THIS_ struct IDirect3DRMViewportArray **array) PURE;
+ STDMETHOD_(BOOL, GetDither)(THIS) PURE;
+ STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+ STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+ STDMETHOD_(DWORD, GetTrianglesDrawn)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWireframeOptions)(THIS) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+ STDMETHOD_(D3DCOLORMODEL, GetColorModel)(THIS) PURE;
+ STDMETHOD_(D3DRMTEXTUREQUALITY, GetTextureQuality)(THIS) PURE;
+ STDMETHOD(GetDirect3DDevice)(THIS_ IDirect3DDevice **d3d_device) PURE;
+ /*** IDirect3DRMDevice2 methods ***/
+ STDMETHOD(InitFromD3D2)(THIS_ IDirect3D2 *d3d, IDirect3DDevice2 *device) PURE;
+ STDMETHOD(InitFromSurface)(THIS_ GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *surface) PURE;
+ STDMETHOD(SetRenderMode)(THIS_ DWORD flags) PURE;
+ STDMETHOD_(DWORD, GetRenderMode)(THIS) PURE;
+ STDMETHOD(GetDirect3DDevice2)(THIS_ IDirect3DDevice2 **device) PURE;
+ /*** IDirect3DRMDevice3 methods ***/
+ STDMETHOD(FindPreferredTextureFormat)(THIS_ DWORD BitDepths, DWORD flags, DDPIXELFORMAT *format) PURE;
+ STDMETHOD(RenderStateChange)(THIS_ D3DRENDERSTATETYPE drsType, DWORD val, DWORD flags) PURE;
+ STDMETHOD(LightStateChange)(THIS_ D3DLIGHTSTATETYPE drsType, DWORD val, DWORD flags) PURE;
+ STDMETHOD(GetStateChangeOptions)(THIS_ DWORD state_class, DWORD state_idx, DWORD *flags) PURE;
+ STDMETHOD(SetStateChangeOptions)(THIS_ DWORD StateClass, DWORD StateNum, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDevice3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDevice3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMDevice3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMDevice3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMDevice3_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMDevice3_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMDevice3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMDevice3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice3_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
+#define IDirect3DRMDevice3_InitFromD3D(p,a,b) (p)->lpVtbl->InitFromD3D(p,a,b)
+#define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d) (p)->lpVtbl->InitFromClipper(p,a,b,c,d)
+#define IDirect3DRMDevice3_Update(p) (p)->lpVtbl->Update(p)
+#define IDirect3DRMDevice3_AddUpdateCallback(p,a,b) (p)->lpVtbl->AddUpdateCallback(p,a,b)
+#define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b) (p)->lpVtbl->DeleteUpdateCallback(p,a,b)
+#define IDirect3DRMDevice3_SetBufferCount(p,a) (p)->lpVtbl->SetBufferCount(p,a)
+#define IDirect3DRMDevice3_GetBufferCount(p) (p)->lpVtbl->GetBufferCount(p)
+#define IDirect3DRMDevice3_SetDither(p,a) (p)->lpVtbl->SetDither(p,a)
+#define IDirect3DRMDevice3_SetShades(p,a) (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMDevice3_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMDevice3_SetTextureQuality(p,a) (p)->lpVtbl->SetTextureQuality(p,a)
+#define IDirect3DRMDevice3_GetViewports(p,a) (p)->lpVtbl->GetViewports(p,a)
+#define IDirect3DRMDevice3_GetDither(p) (p)->lpVtbl->GetDither(p)
+#define IDirect3DRMDevice3_GetShades(p) (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMDevice3_GetHeight(p) (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMDevice3_GetWidth(p) (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMDevice3_GetTrianglesDrawn(p) (p)->lpVtbl->GetTrianglesDrawn(p)
+#define IDirect3DRMDevice3_GetWireframeOptions(p) (p)->lpVtbl->GetWireframeOptions(p)
+#define IDirect3DRMDevice3_GetQuality(p) (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMDevice3_GetColorModel(p) (p)->lpVtbl->GetColorModel(p)
+#define IDirect3DRMDevice3_GetTextureQuality(p) (p)->lpVtbl->GetTextureQuality(p)
+#define IDirect3DRMDevice3_GetDirect3DDevice(p,a) (p)->lpVtbl->GetDirect3DDevice(p,a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice3_InitFromD3D2(p,a,b) (p)->lpVtbl->InitFromD3D2(p,a,b)
+#define IDirect3DRMDevice3_InitFromSurface(p,a,b,c) (p)->lpVtbl->InitFromSurface(p,a,b,c)
+#define IDirect3DRMDevice3_SetRenderMode(p,a) (p)->lpVtbl->SetRenderMode(p,a)
+#define IDirect3DRMDevice3_GetRenderMode(p) (p)->lpVtbl->GetRenderMode(p)
+#define IDirect3DRMDevice3_GetDirect3DDevice2(p,a) (p)->lpVtbl->GetDirect3DDevice2(p,a)
+/*** IDirect3DRMDevice3 methods ***/
+#define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->lpVtbl->FindPreferredTextureFormat(p,a,b,c)
+#define IDirect3DRMDevice3_RenderStateChange(p,a,b,c) (p)->lpVtbl->RenderStateChange(p,a,b,c)
+#define IDirect3DRMDevice3_LightStateChange(p,a,b,c) (p)->lpVtbl->LightStateChange(p,a,b,c)
+#define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c) (p)->lpVtbl->GetStateChangeOptions(p,a,b,c)
+#define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c) (p)->lpVtbl->SetStateChangeOptions(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMDevice3_AddRef(p) (p)->AddRef()
+#define IDirect3DRMDevice3_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMDevice3_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMDevice3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMDevice3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMDevice3_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMDevice3_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMDevice3_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMDevice3_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMDevice3_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMDevice methods ***/
+#define IDirect3DRMDevice3_Init(p,a,b) (p)->Init(a,b)
+#define IDirect3DRMDevice3_InitFromD3D(p,a,b) (p)->InitFromD3D(a,b)
+#define IDirect3DRMDevice3_InitFromClipper(p,a,b,c,d) (p)->InitFromClipper(a,b,c,d)
+#define IDirect3DRMDevice3_Update(p) (p)->Update()
+#define IDirect3DRMDevice3_AddUpdateCallback(p,a,b) (p)->AddUpdateCallback(a,b)
+#define IDirect3DRMDevice3_DeleteUpdateCallback(p,a,b) (p)->DeleteUpdateCallback(a,b)
+#define IDirect3DRMDevice3_SetBufferCount(p,a) (p)->SetBufferCount(a)
+#define IDirect3DRMDevice3_GetBufferCount(p) (p)->GetBufferCount()
+#define IDirect3DRMDevice3_SetDither(p,a) (p)->SetDither(a)
+#define IDirect3DRMDevice3_SetShades(p,a) (p)->SetShades(a)
+#define IDirect3DRMDevice3_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMDevice3_SetTextureQuality(p,a) (p)->SetTextureQuality(a)
+#define IDirect3DRMDevice3_GetViewports(p,a) (p)->GetViewports(a)
+#define IDirect3DRMDevice3_GetDither(p) (p)->GetDither()
+#define IDirect3DRMDevice3_GetShades(p) (p)->GetShades()
+#define IDirect3DRMDevice3_GetHeight(p) (p)->GetHeight()
+#define IDirect3DRMDevice3_GetWidth(p) (p)->GetWidth()
+#define IDirect3DRMDevice3_GetTrianglesDrawn(p) (p)->GetTrianglesDrawn()
+#define IDirect3DRMDevice3_GetWireframeOptions(p) (p)->GetWireframeOptions()
+#define IDirect3DRMDevice3_GetQuality(p) (p)->GetQuality()
+#define IDirect3DRMDevice3_GetColorModel(p) (p)->GetColorModel()
+#define IDirect3DRMDevice3_GetTextureQuality(p) (p)->GetTextureQuality()
+#define IDirect3DRMDevice3_GetDirect3DDevice(p,a) (p)->GetDirect3DDevice(a)
+/*** IDirect3DRMDevice2 methods ***/
+#define IDirect3DRMDevice3_InitFromD3D2(p,a,b) (p)->InitFromD3D2(a,b)
+#define IDirect3DRMDevice3_InitFromSurface(p,a,b,c) (p)->InitFromSurface(a,b,c)
+#define IDirect3DRMDevice3_SetRenderMode(p,a) (p)->SetRenderMode(a)
+#define IDirect3DRMDevice3_GetRenderMode(p) (p)->GetRenderMode()
+#define IDirect3DRMDevice3_GetDirect3DDevice2(p,a) (p)->GetDirect3DDevice2(a)
+/*** IDirect3DRMDevice3 methods ***/
+#define IDirect3DRMDevice3_FindPreferredTextureFormat(p,a,b,c) (p)->FindPreferredTextureFormat(a,b,c)
+#define IDirect3DRMDevice3_RenderStateChange(p,a,b,c) (p)->RenderStateChange(a,b,c)
+#define IDirect3DRMDevice3_LightStateChange(p,a,b,c) (p)->LightStateChange(a,b,c)
+#define IDirect3DRMDevice3_GetStateChangeOptions(p,a,b,c) (p)->GetStateChangeOptions(a,b,c)
+#define IDirect3DRMDevice3_SetStateChangeOptions(p,a,b,c) (p)->SetStateChangeOptions(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMViewport interface
+ */
+#define INTERFACE IDirect3DRMViewport
+DECLARE_INTERFACE_(IDirect3DRMViewport,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMViewport methods ***/
+ STDMETHOD(Init) (THIS_ IDirect3DRMDevice *device, struct IDirect3DRMFrame *camera,
+ DWORD x, DWORD y, DWORD width, DWORD height) PURE;
+ STDMETHOD(Clear)(THIS) PURE;
+ STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame *frame) PURE;
+ STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
+ STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame *camera) PURE;
+ STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
+ STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
+ STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
+ STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
+ STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
+ STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
+ STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame **camera) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice **device) PURE;
+ STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
+ STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE;
+ STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
+ STDMETHOD_(LONG, GetX)(THIS) PURE;
+ STDMETHOD_(LONG, GetY)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+ STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
+ STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
+ STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMViewport_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMViewport_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMViewport_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMViewport_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMViewport_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMViewport_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMViewport_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMViewport_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMViewport methods ***/
+#define IDirect3DRMViewport_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d)
+#define IDirect3DRMViewport_Clear(p) (p)->lpVtbl->Clear(p)
+#define IDirect3DRMViewport_Render(p,a) (p)->lpVtbl->Render(p,a)
+#define IDirect3DRMViewport_SetFront(p,a) (p)->lpVtbl->SetFront(p,a)
+#define IDirect3DRMViewport_SetBack(p,a) (p)->lpVtbl->SetBack(p,a)
+#define IDirect3DRMViewport_SetField(p,a) (p)->lpVtbl->SetField(p,a)
+#define IDirect3DRMViewport_SetUniformScaling(p,a) (p)->lpVtbl->SetUniformScaling(p,a)
+#define IDirect3DRMViewport_SetCamera(p,a) (p)->lpVtbl->SetCamera(p,a)
+#define IDirect3DRMViewport_SetProjection(p,a) (p)->lpVtbl->SetProjection(p,a)
+#define IDirect3DRMViewport_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b)
+#define IDirect3DRMViewport_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMViewport_Configure(p,a,b,c,d) (p)->lpVtbl->Configure(p,a,b,c,d)
+#define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d) (p)->lpVtbl->ForceUpdate(p,a,b,c,d)
+#define IDirect3DRMViewport_SetPlane(p,a,b,c,d) (p)->lpVtbl->SetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport_GetCamera(p,a) (p)->lpVtbl->GetCamera(p,a)
+#define IDirect3DRMViewport_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DRMViewport_GetPlane(p,a,b,c,d) (p)->lpVtbl->GetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport_Pick(p,a,b,c) (p)->lpVtbl->Pick(p,a,b,c)
+#define IDirect3DRMViewport_GetUniformScaling(p) (p)->lpVtbl->GetUniformScaling(p)
+#define IDirect3DRMViewport_GetX(p) (p)->lpVtbl->GetX(p)
+#define IDirect3DRMViewport_GetY(p) (p)->lpVtbl->GetY(p)
+#define IDirect3DRMViewport_GetWidth(p) (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMViewport_GetHeight(p) (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMViewport_GetField(p) (p)->lpVtbl->GetField(p)
+#define IDirect3DRMViewport_GetBack(p) (p)->lpVtbl->GetBack(p)
+#define IDirect3DRMViewport_GetFront(p) (p)->lpVtbl->GetFront(p)
+#define IDirect3DRMViewport_GetProjection(p) (p)->lpVtbl->GetProjection(p)
+#define IDirect3DRMViewport_GetDirect3DViewport(p,a) (p)->lpVtbl->GetDirect3DViewport(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMViewport_AddRef(p) (p)->AddRef()
+#define IDirect3DRMViewport_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMViewport_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMViewport_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMViewport_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMViewport_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMViewport_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMViewport_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMViewport_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMViewport methods ***/
+#define IDirect3DRMViewport_Init(p,a,b,c,d) (p)->Init(a,b,c,d)
+#define IDirect3DRMViewport_Clear(p) (p)->Clear()
+#define IDirect3DRMViewport_Render(p,a) (p)->Render(a)
+#define IDirect3DRMViewport_SetFront(p,a) (p)->SetFront(a)
+#define IDirect3DRMViewport_SetBack(p,a) (p)->SetBack(a)
+#define IDirect3DRMViewport_SetField(p,a) (p)->SetField(a)
+#define IDirect3DRMViewport_SetUniformScaling(p,a) (p)->SetUniformScaling(a)
+#define IDirect3DRMViewport_SetCamera(p,a) (p)->SetCamera(a)
+#define IDirect3DRMViewport_SetProjection(p,a) (p)->SetProjection(a)
+#define IDirect3DRMViewport_Transform(p,a,b) (p)->Transform(a,b)
+#define IDirect3DRMViewport_InverseTransform(p,a,b) (p)->InverseTransform(a,b)
+#define IDirect3DRMViewport_Configure(p,a,b,c,d) (p)->Configure(a,b,c,d)
+#define IDirect3DRMViewport_ForceUpdate(p,a,b,c,d) (p)->ForceUpdate(a,b,c,d)
+#define IDirect3DRMViewport_SetPlane(p,a,b,c,d) (p)->SetPlane(a,b,c,d)
+#define IDirect3DRMViewport_GetCamera(p,a) (p)->GetCamera(a)
+#define IDirect3DRMViewport_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DRMViewport_GetPlane(p,a,b,c,d) (p)->GetPlane(a,b,c,d)
+#define IDirect3DRMViewport_Pick(p,a,b,c) (p)->Pick(a,b,c)
+#define IDirect3DRMViewport_GetUniformScaling(p) (p)->GetUniformScaling()
+#define IDirect3DRMViewport_GetX(p) (p)->GetX()
+#define IDirect3DRMViewport_GetY(p) (p)->GetY()
+#define IDirect3DRMViewport_GetWidth(p) (p)->GetWidth()
+#define IDirect3DRMViewport_GetHeight(p) (p)->GetHeight()
+#define IDirect3DRMViewport_GetField(p) (p)->GetField()
+#define IDirect3DRMViewport_GetBack(p) (p)->GetBack()
+#define IDirect3DRMViewport_GetFront(p) (p)->GetFront()
+#define IDirect3DRMViewport_GetProjection(p) (p)->GetProjection()
+#define IDirect3DRMViewport_GetDirect3DViewport(p,a) (p)->GetDirect3DViewport(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMViewport2 interface
+ */
+#define INTERFACE IDirect3DRMViewport2
+DECLARE_INTERFACE_(IDirect3DRMViewport2,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMViewport2 methods ***/
+ STDMETHOD(Init) (THIS_ IDirect3DRMDevice3 *device, struct IDirect3DRMFrame3 *camera,
+ DWORD x, DWORD y, DWORD width, DWORD height) PURE;
+ STDMETHOD(Clear)(THIS_ DWORD flags) PURE;
+ STDMETHOD(Render)(THIS_ struct IDirect3DRMFrame3 *frame) PURE;
+ STDMETHOD(SetFront)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetBack)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetField)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetUniformScaling)(THIS_ BOOL) PURE;
+ STDMETHOD(SetCamera)(THIS_ struct IDirect3DRMFrame3 *camera) PURE;
+ STDMETHOD(SetProjection)(THIS_ D3DRMPROJECTIONTYPE) PURE;
+ STDMETHOD(Transform)(THIS_ D3DRMVECTOR4D *d, D3DVECTOR *s) PURE;
+ STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DRMVECTOR4D *s) PURE;
+ STDMETHOD(Configure)(THIS_ LONG x, LONG y, DWORD width, DWORD height) PURE;
+ STDMETHOD(ForceUpdate)(THIS_ DWORD x1, DWORD y1, DWORD x2, DWORD y2) PURE;
+ STDMETHOD(SetPlane)(THIS_ D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) PURE;
+ STDMETHOD(GetCamera)(THIS_ struct IDirect3DRMFrame3 **camera) PURE;
+ STDMETHOD(GetDevice)(THIS_ IDirect3DRMDevice3 **device) PURE;
+ STDMETHOD(GetPlane)(THIS_ D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) PURE;
+ STDMETHOD(Pick)(THIS_ LONG x, LONG y, struct IDirect3DRMPickedArray **visuals) PURE;
+ STDMETHOD_(BOOL, GetUniformScaling)(THIS) PURE;
+ STDMETHOD_(LONG, GetX)(THIS) PURE;
+ STDMETHOD_(LONG, GetY)(THIS) PURE;
+ STDMETHOD_(DWORD, GetWidth)(THIS) PURE;
+ STDMETHOD_(DWORD, GetHeight)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetField)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetBack)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetFront)(THIS) PURE;
+ STDMETHOD_(D3DRMPROJECTIONTYPE, GetProjection)(THIS) PURE;
+ STDMETHOD(GetDirect3DViewport)(THIS_ IDirect3DViewport **viewport) PURE;
+ STDMETHOD(TransformVectors)(THIS_ DWORD vector_count, D3DRMVECTOR4D *dst_vectors,
+ D3DVECTOR *src_vectors) PURE;
+ STDMETHOD(InverseTransformVectors)(THIS_ DWORD vector_count, D3DVECTOR *dst_vectors,
+ D3DRMVECTOR4D *src_vectors) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMViewport2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMViewport2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport_2Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMViewport2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMViewport2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMViewport2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMViewport2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMViewport2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMViewport2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMViewport2 methods ***/
+#define IDirect3DRMViewport2_Init(p,a,b,c,d,e,f) (p)->lpVtbl->Init(p,a,b,c,d,e,f)
+#define IDirect3DRMViewport2_Clear(p,a) (p)->lpVtbl->Clear(p,a)
+#define IDirect3DRMViewport2_Render(p,a) (p)->lpVtbl->Render(p,a)
+#define IDirect3DRMViewport2_SetFront(p,a) (p)->lpVtbl->SetFront(p,a)
+#define IDirect3DRMViewport2_SetBack(p,a) (p)->lpVtbl->SetBack(p,a)
+#define IDirect3DRMViewport2_SetField(p,a) (p)->lpVtbl->SetField(p,a)
+#define IDirect3DRMViewport2_SetUniformScaling(p,a) (p)->lpVtbl->SetUniformScaling(p,a)
+#define IDirect3DRMViewport2_SetCamera(p,a) (p)->lpVtbl->SetCamera(p,a)
+#define IDirect3DRMViewport2_SetProjection(p,a) (p)->lpVtbl->SetProjection(p,a)
+#define IDirect3DRMViewport2_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b)
+#define IDirect3DRMViewport2_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMViewport2_Configure(p,a,b,c,d) (p)->lpVtbl->Configure(p,a,b,c,d)
+#define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d) (p)->lpVtbl->ForceUpdate(p,a,b,c,d)
+#define IDirect3DRMViewport2_SetPlane(p,a,b,c,d) (p)->lpVtbl->SetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport2_GetCamera(p,a) (p)->lpVtbl->GetCamera(p,a)
+#define IDirect3DRMViewport2_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirect3DRMViewport2_GetPlane(p,a,b,c,d) (p)->lpVtbl->GetPlane(p,a,b,c,d)
+#define IDirect3DRMViewport2_Pick(p,a,b,c) (p)->lpVtbl->Pick(p,a,b,c)
+#define IDirect3DRMViewport2_GetUniformScaling(p) (p)->lpVtbl->GetUniformScaling(p)
+#define IDirect3DRMViewport2_GetX(p) (p)->lpVtbl->GetX(p)
+#define IDirect3DRMViewport2_GetY(p) (p)->lpVtbl->GetY(p)
+#define IDirect3DRMViewport2_GetWidth(p) (p)->lpVtbl->GetWidth(p)
+#define IDirect3DRMViewport2_GetHeight(p) (p)->lpVtbl->GetHeight(p)
+#define IDirect3DRMViewport2_GetField(p) (p)->lpVtbl->GetField(p)
+#define IDirect3DRMViewport2_GetBack(p) (p)->lpVtbl->GetBack(p)
+#define IDirect3DRMViewport2_GetFront(p) (p)->lpVtbl->GetFront(p)
+#define IDirect3DRMViewport2_GetProjection(p) (p)->lpVtbl->GetProjection(p)
+#define IDirect3DRMViewport2_GetDirect3DViewport(p,a) (p)->lpVtbl->GetDirect3DViewport(p,a)
+#define IDirect3DRMViewport2_TransformVectors(p,a,b,c) (p)->lpVtbl->TransformVectors(p,a,b,c)
+#define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->lpVtbl->InverseTransformVectors(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMViewport2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMViewport2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMViewport2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMViewport2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMViewport2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMViewport2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMViewport2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMViewport2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMViewport2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMViewport2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMViewport2 methods ***/
+#define IDirect3DRMViewport2_Init(p,a,b,c,d) (p)->Init(a,b,c,d)
+#define IDirect3DRMViewport2_Clear(p) (p)->Clear()
+#define IDirect3DRMViewport2_Render(p,a) (p)->Render(a)
+#define IDirect3DRMViewport2_SetFront(p,a) (p)->SetFront(a)
+#define IDirect3DRMViewport2_SetBack(p,a) (p)->SetBack(a)
+#define IDirect3DRMViewport2_SetField(p,a) (p)->SetField(a)
+#define IDirect3DRMViewport2_SetUniformScaling(p,a) (p)->SetUniformScaling(a)
+#define IDirect3DRMViewport2_SetCamera(p,a) (p)->SetCamera(a)
+#define IDirect3DRMViewport2_SetProjection(p,a) (p)->SetProjection(a)
+#define IDirect3DRMViewport2_Transform(p,a,b) (p)->Transform(a,b)
+#define IDirect3DRMViewport2_InverseTransform(p,a,b) (p)->InverseTransform(a,b)
+#define IDirect3DRMViewport2_Configure(p,a,b,c,d) (p)->Configure(a,b,c,d)
+#define IDirect3DRMViewport2_ForceUpdate(p,a,b,c,d) (p)->ForceUpdate(a,b,c,d)
+#define IDirect3DRMViewport2_SetPlane(p,a,b,c,d) (p)->SetPlane(a,b,c,d)
+#define IDirect3DRMViewport2_GetCamera(p,a) (p)->GetCamera(a)
+#define IDirect3DRMViewport2_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirect3DRMViewport2_GetPlane(p,a,b,c,d) (p)->GetPlane(a,b,c,d)
+#define IDirect3DRMViewport2_Pick(p,a,b,c) (p)->Pick(a,b,c)
+#define IDirect3DRMViewport2_GetUniformScaling(p) (p)->GetUniformScaling()
+#define IDirect3DRMViewport2_GetX(p) (p)->GetX()
+#define IDirect3DRMViewport2_GetY(p) (p)->GetY()
+#define IDirect3DRMViewport2_GetWidth(p) (p)->GetWidth()
+#define IDirect3DRMViewport2_GetHeight(p) (p)->GetHeight()
+#define IDirect3DRMViewport2_GetField(p) (p)->GetField()
+#define IDirect3DRMViewport2_GetBack(p) (p)->GetBack()
+#define IDirect3DRMViewport2_GetFront(p) (p)->GetFront()
+#define IDirect3DRMViewport2_GetProjection(p) (p)->GetProjection()
+#define IDirect3DRMViewport2_GetDirect3DViewport(p,a) (p)->GetDirect3DViewport(a)
+#define IDirect3DRMViewport2_TransformVectors(p,a,b,c) (p)->TransformVectors(a,b,c)
+#define IDirect3DRMViewport2_InverseTransformVectors(p,a,b,c) (p)->InverseTransformVectors(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrame interface
+ */
+#define INTERFACE IDirect3DRMFrame
+DECLARE_INTERFACE_(IDirect3DRMFrame,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMFrame methods ***/
+ STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE;
+ STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+ STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
+ STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+ STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+ STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;
+ STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+ STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;
+ STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
+ STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE;
+ STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE;
+ STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;
+ STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE;
+ STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
+ STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
+ STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;
+ STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;
+ STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE;
+ STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+ STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE;
+ STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference,
+ D3DRMFRAMECONSTRAINT constraint) PURE;
+ STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
+ STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE;
+ STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+ STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+ STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
+ STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;
+ STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
+ STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
+ STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
+ STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
+ STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
+ STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
+ STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
+ STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
+ STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+ D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;
+ STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+ STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference,
+ D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
+ STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
+ STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrame_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrame_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFrame_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFrame_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFrame_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFrame_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFrame_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFrame_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame_AddChild(p,a) (p)->lpVtbl->AddChild(p,a)
+#define IDirect3DRMFrame_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DRMFrame_AddMoveCallback(p,a,b) (p)->lpVtbl->AddMoveCallback(p,a,b)
+#define IDirect3DRMFrame_AddTransform(p,a,b) (p)->lpVtbl->AddTransform(p,a,b)
+#define IDirect3DRMFrame_AddTranslation(p,a,b,c,d) (p)->lpVtbl->AddTranslation(p,a,b,c,d)
+#define IDirect3DRMFrame_AddScale(p,a,b,c,d) (p)->lpVtbl->AddScale(p,a,b,c,d)
+#define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e) (p)->lpVtbl->AddRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame_AddVisual(p,a) (p)->lpVtbl->AddVisual(p,a)
+#define IDirect3DRMFrame_GetChildren(p,a) (p)->lpVtbl->GetChildren(p,a)
+#define IDirect3DRMFrame_GetColor(p) (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMFrame_GetLights(p,a) (p)->lpVtbl->GetLights(p,a)
+#define IDirect3DRMFrame_GetMaterialMode(p) (p)->lpVtbl->GetMaterialMode(p)
+#define IDirect3DRMFrame_GetParent(p,a) (p)->lpVtbl->GetParent(p,a)
+#define IDirect3DRMFrame_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
+#define IDirect3DRMFrame_GetRotation(p,a,b,c) (p)->lpVtbl->GetRotation(p,a,b,c)
+#define IDirect3DRMFrame_GetScene(p,a) (p)->lpVtbl->GetScene(p,a)
+#define IDirect3DRMFrame_GetSortMode(p) (p)->lpVtbl->GetSortMode(p)
+#define IDirect3DRMFrame_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFrame_GetTransform(p,a) (p)->lpVtbl->GetTransform(p,a)
+#define IDirect3DRMFrame_GetVelocity(p,a,b,c) (p)->lpVtbl->GetVelocity(p,a,b,c)
+#define IDirect3DRMFrame_GetOrientation(p,a,b,c) (p)->lpVtbl->GetOrientation(p,a,b,c)
+#define IDirect3DRMFrame_GetVisuals(p,a) (p)->lpVtbl->GetVisuals(p,a)
+#define IDirect3DRMFrame_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFrame_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMFrame_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMFrame_LookAt(p,a,b,c) (p)->lpVtbl->LookAt(p,a,b,c)
+#define IDirect3DRMFrame_Move(p,a) (p)->lpVtbl->Move(p,a)
+#define IDirect3DRMFrame_DeleteChild(p,a) (p)->lpVtbl->DeleteChild(p,a)
+#define IDirect3DRMFrame_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DRMFrame_DeleteMoveCallback(p,a,b) (p)->lpVtbl->DeleteMoveCallback(p,a,b)
+#define IDirect3DRMFrame_DeleteVisual(p,a) (p)->lpVtbl->DeleteVisual(p,a)
+#define IDirect3DRMFrame_GetSceneBackground(p) (p)->lpVtbl->GetSceneBackground(p)
+#define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a) (p)->lpVtbl->GetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame_GetSceneFogColor(p) (p)->lpVtbl->GetSceneFogColor(p)
+#define IDirect3DRMFrame_GetSceneFogEnable(p) (p)->lpVtbl->GetSceneFogEnable(p)
+#define IDirect3DRMFrame_GetSceneFogMode(p) (p)->lpVtbl->GetSceneFogMode(p)
+#define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c) (p)->lpVtbl->GetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame_SetSceneBackground(p,a) (p)->lpVtbl->SetSceneBackground(p,a)
+#define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c) (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)
+#define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a) (p)->lpVtbl->SetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame_SetSceneBackgroundImage(p,a) (p)->lpVtbl->SetSceneBackgroundImage(p,a)
+#define IDirect3DRMFrame_SetSceneFogEnable(p,a) (p)->lpVtbl->SetSceneFogEnable(p,a)
+#define IDirect3DRMFrame_SetSceneFogColor(p,a) (p)->lpVtbl->SetSceneFogColor(p,a)
+#define IDirect3DRMFrame_SetSceneFogMode(p,a) (p)->lpVtbl->SetSceneFogMode(p,a)
+#define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c) (p)->lpVtbl->SetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFrame_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFrame_GetZbufferMode(p) (p)->lpVtbl->GetZbufferMode(p)
+#define IDirect3DRMFrame_SetMaterialMode(p,a) (p)->lpVtbl->SetMaterialMode(p,a)
+#define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirect3DRMFrame_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e) (p)->lpVtbl->SetRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame_SetSortMode(p,a) (p)->lpVtbl->SetSortMode(p,a)
+#define IDirect3DRMFrame_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFrame_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e) (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)
+#define IDirect3DRMFrame_SetZbufferMode(p,a) (p)->lpVtbl->SetZbufferMode(p,a)
+#define IDirect3DRMFrame_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFrame_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFrame_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMFrame_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFrame_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFrame_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMFrame_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMFrame_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMFrame_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMFrame_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame_AddChild(p,a) (p)->AddChild(a)
+#define IDirect3DRMFrame_AddLight(p,a) (p)->AddLight(a)
+#define IDirect3DRMFrame_AddMoveCallback(p,a,b) (p)->AddMoveCallback(a,b)
+#define IDirect3DRMFrame_AddTransform(p,a,b) (p)->AddTransform(a,b)
+#define IDirect3DRMFrame_AddTranslation(p,a,b,c,d) (p)->AddTranslation(a,b,c,d)
+#define IDirect3DRMFrame_AddScale(p,a,b,c,d) (p)->AddScale(a,b,c,d)
+#define IDirect3DRMFrame_AddRotation(p,a,b,c,d,e) (p)->AddRotation(a,b,c,d,e)
+#define IDirect3DRMFrame_AddVisual(p,a) (p)->AddVisual(a)
+#define IDirect3DRMFrame_GetChildren(p,a) (p)->GetChildren(a)
+#define IDirect3DRMFrame_GetColor(p) (p)->GetColor()
+#define IDirect3DRMFrame_GetLights(p,a) (p)->GetLights(a)
+#define IDirect3DRMFrame_GetMaterialMode(p) (p)->GetMaterialMode()
+#define IDirect3DRMFrame_GetParent(p,a) (p)->GetParent(a)
+#define IDirect3DRMFrame_GetPosition(p,a,b) (p)->GetPosition(a,b)
+#define IDirect3DRMFrame_GetRotation(p,a,b,c) (p)->GetRotation(a,b,c)
+#define IDirect3DRMFrame_GetScene(p,a) (p)->GetScene(a)
+#define IDirect3DRMFrame_GetSortMode(p) (p)->GetSortMode()
+#define IDirect3DRMFrame_GetTexture(p,a) (p)->GetTexture(a)
+#define IDirect3DRMFrame_GetTransform(p,a) (p)->GetTransform(a)
+#define IDirect3DRMFrame_GetVelocity(p,a,b,c) (p)->GetVelocity(a,b,c)
+#define IDirect3DRMFrame_GetOrientation(p,a,b,c) (p)->GetOrientation(a,b,c)
+#define IDirect3DRMFrame_GetVisuals(p,a) (p)->GetVisuals(a)
+#define IDirect3DRMFrame_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFrame_InverseTransform(p,a,b) (p)->InverseTransform(a,b)
+#define IDirect3DRMFrame_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMFrame_LookAt(p,a,b,c) (p)->LookAt(a,b,c)
+#define IDirect3DRMFrame_Move(p,a) (p)->Move(a)
+#define IDirect3DRMFrame_DeleteChild(p,a) (p)->DeleteChild(a)
+#define IDirect3DRMFrame_DeleteLight(p,a) (p)->DeleteLight(a)
+#define IDirect3DRMFrame_DeleteMoveCallback(p,a,b) (p)->DeleteMoveCallback(a,b)
+#define IDirect3DRMFrame_DeleteVisual(p,a) (p)->DeleteVisual(a)
+#define IDirect3DRMFrame_GetSceneBackground(p) (p)->GetSceneBackground()
+#define IDirect3DRMFrame_GetSceneBackgroundDepth(p,a) (p)->GetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame_GetSceneFogColor(p) (p)->GetSceneFogColor()
+#define IDirect3DRMFrame_GetSceneFogEnable(p) (p)->GetSceneFogEnable()
+#define IDirect3DRMFrame_GetSceneFogMode(p) (p)->GetSceneFogMode()
+#define IDirect3DRMFrame_GetSceneFogParams(p,a,b,c) (p)->GetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame_SetSceneBackground(p,a) (p)->SetSceneBackground(a)
+#define IDirect3DRMFrame_SetSceneBackgroundRGB(p,a,b,c) (p)->SetSceneBackgroundRGB(a,b,c)
+#define IDirect3DRMFrame_SetSceneBackgroundDepth(p,a) (p)->SetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame_SetSceneBackgroundImage(p,a) (p)->SetSceneBackgroundImage(a)
+#define IDirect3DRMFrame_SetSceneFogEnable(p,a) (p)->SetSceneFogEnable(a)
+#define IDirect3DRMFrame_SetSceneFogColor(p,a) (p)->SetSceneFogColor(a)
+#define IDirect3DRMFrame_SetSceneFogMode(p,a) (p)->SetSceneFogMode(a)
+#define IDirect3DRMFrame_SetSceneFogParams(p,a,b,c) (p)->SetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMFrame_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFrame_GetZbufferMode(p) (p)->GetZbufferMode()
+#define IDirect3DRMFrame_SetMaterialMode(p,a) (p)->SetMaterialMode(a)
+#define IDirect3DRMFrame_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirect3DRMFrame_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirect3DRMFrame_SetRotation(p,a,b,c,d,e) (p)->SetRotation(a,b,c,d,e)
+#define IDirect3DRMFrame_SetSortMode(p,a) (p)->SetSortMode(a)
+#define IDirect3DRMFrame_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMFrame_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFrame_SetVelocity(p,a,b,c,d,e) (p)->SetVelocity(a,b,c,d,e)
+#define IDirect3DRMFrame_SetZbufferMode(p,a) (p)->SetZbufferMode(a)
+#define IDirect3DRMFrame_Transform(p,a,b) (p)->Transform(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrame2 interface
+ */
+#define INTERFACE IDirect3DRMFrame2
+DECLARE_INTERFACE_(IDirect3DRMFrame2,IDirect3DRMFrame)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMFrame methods ***/
+ STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame *child) PURE;
+ STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+ STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
+ STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+ STDMETHOD(AddVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+ STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;
+ STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+ STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;
+ STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
+ STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame **parent) PURE;
+ STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_position) PURE;
+ STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;
+ STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame **scene) PURE;
+ STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
+ STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(GetTransform)(THIS_ D3DRMMATRIX4D return_matrix) PURE;
+ STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;
+ STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;
+ STDMETHOD(GetVisuals)(THIS_ struct IDirect3DRMVisualArray **visuals) PURE;
+ STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+ STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURECALLBACK cb, void *ctx)PURE;
+ STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame *target, IDirect3DRMFrame *reference,
+ D3DRMFRAMECONSTRAINT constraint) PURE;
+ STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
+ STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame *child) PURE;
+ STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+ STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteVisual)(THIS_ IDirect3DRMVisual *visual) PURE;
+ STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
+ STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;
+ STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
+ STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
+ STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
+ STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end, D3DVALUE *return_density) PURE;
+ STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
+ STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
+ STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
+ STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
+ STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+ D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;
+ STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+ STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame *reference,
+ D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
+ STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
+ STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+ /*** IDirect3DRMFrame2 methods ***/
+ STDMETHOD(AddMoveCallback2)(THIS_ D3DRMFRAMEMOVECALLBACK cb, void *ctx, DWORD flags) PURE;
+ STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;
+ STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up);
+ STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE;
+ STDMETHOD_(BOOL, GetInheritAxes)(THIS);
+ STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
+ STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);
+ STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+ STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame *reference, D3DRMQUATERNION *q) PURE;
+ STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame *reference, D3DRMRAY *ray, DWORD flags,
+ struct IDirect3DRMPicked2Array **return_visuals) PURE;
+ STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags);
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrame2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrame2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFrame2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFrame2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFrame2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFrame2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFrame2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFrame2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame2_AddChild(p,a) (p)->lpVtbl->AddChild(p,a)
+#define IDirect3DRMFrame2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DRMFrame2_AddMoveCallback(p,a,b) (p)->lpVtbl->AddMoveCallback(p,a,b)
+#define IDirect3DRMFrame2_AddTransform(p,a,b) (p)->lpVtbl->AddTransform(p,a,b)
+#define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d) (p)->lpVtbl->AddTranslation(p,a,b,c,d)
+#define IDirect3DRMFrame2_AddScale(p,a,b,c,d) (p)->lpVtbl->AddScale(p,a,b,c,d)
+#define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e) (p)->lpVtbl->AddRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_AddVisual(p,a) (p)->lpVtbl->AddVisual(p,a)
+#define IDirect3DRMFrame2_GetChildren(p,a) (p)->lpVtbl->GetChildren(p,a)
+#define IDirect3DRMFrame2_GetColor(p) (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMFrame2_GetLights(p,a) (p)->lpVtbl->GetLights(p,a)
+#define IDirect3DRMFrame2_GetMaterialMode(p) (p)->lpVtbl->GetMaterialMode(p)
+#define IDirect3DRMFrame2_GetParent(p,a) (p)->lpVtbl->GetParent(p,a)
+#define IDirect3DRMFrame2_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
+#define IDirect3DRMFrame2_GetRotation(p,a,b,c) (p)->lpVtbl->GetRotation(p,a,b,c)
+#define IDirect3DRMFrame2_GetScene(p,a) (p)->lpVtbl->GetScene(p,a)
+#define IDirect3DRMFrame2_GetSortMode(p) (p)->lpVtbl->GetSortMode(p)
+#define IDirect3DRMFrame2_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFrame2_GetTransform(p,a) (p)->lpVtbl->GetTransform(p,a)
+#define IDirect3DRMFrame2_GetVelocity(p,a,b,c) (p)->lpVtbl->GetVelocity(p,a,b,c)
+#define IDirect3DRMFrame2_GetOrientation(p,a,b,c) (p)->lpVtbl->GetOrientation(p,a,b,c)
+#define IDirect3DRMFrame2_GetVisuals(p,a) (p)->lpVtbl->GetVisuals(p,a)
+#define IDirect3DRMFrame2_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFrame2_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMFrame2_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_LookAt(p,a,b,c) (p)->lpVtbl->LookAt(p,a,b,c)
+#define IDirect3DRMFrame2_Move(p,a) (p)->lpVtbl->Move(p,a)
+#define IDirect3DRMFrame2_DeleteChild(p,a) (p)->lpVtbl->DeleteChild(p,a)
+#define IDirect3DRMFrame2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b) (p)->lpVtbl->DeleteMoveCallback(p,a,b)
+#define IDirect3DRMFrame2_DeleteVisual(p,a) (p)->lpVtbl->DeleteVisual(p,a)
+#define IDirect3DRMFrame2_GetSceneBackground(p) (p)->lpVtbl->GetSceneBackground(p)
+#define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a) (p)->lpVtbl->GetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame2_GetSceneFogColor(p) (p)->lpVtbl->GetSceneFogColor(p)
+#define IDirect3DRMFrame2_GetSceneFogEnable(p) (p)->lpVtbl->GetSceneFogEnable(p)
+#define IDirect3DRMFrame2_GetSceneFogMode(p) (p)->lpVtbl->GetSceneFogMode(p)
+#define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c) (p)->lpVtbl->GetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackground(p,a) (p)->lpVtbl->SetSceneBackground(p,a)
+#define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c) (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a) (p)->lpVtbl->SetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a) (p)->lpVtbl->SetSceneBackgroundImage(p,a)
+#define IDirect3DRMFrame2_SetSceneFogEnable(p,a) (p)->lpVtbl->SetSceneFogEnable(p,a)
+#define IDirect3DRMFrame2_SetSceneFogColor(p,a) (p)->lpVtbl->SetSceneFogColor(p,a)
+#define IDirect3DRMFrame2_SetSceneFogMode(p,a) (p)->lpVtbl->SetSceneFogMode(p,a)
+#define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c) (p)->lpVtbl->SetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame2_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFrame2_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFrame2_GetZbufferMode(p) (p)->lpVtbl->GetZbufferMode(p)
+#define IDirect3DRMFrame2_SetMaterialMode(p,a) (p)->lpVtbl->SetMaterialMode(p,a)
+#define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirect3DRMFrame2_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e) (p)->lpVtbl->SetRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_SetSortMode(p,a) (p)->lpVtbl->SetSortMode(p,a)
+#define IDirect3DRMFrame2_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFrame2_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e) (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)
+#define IDirect3DRMFrame2_SetZbufferMode(p,a) (p)->lpVtbl->SetZbufferMode(p,a)
+#define IDirect3DRMFrame2_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b)
+/*** IDirect3DRMFrame2 methods ***/
+#define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c) (p)->lpVtbl->AddMoveCallback2(p,a,b,c)
+#define IDirect3DRMFrame2_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMFrame2_GetBoxEnable(p) (p)->lpVtbl->GetBoxEnable(p)
+#define IDirect3DRMFrame2_GetAxes(p,a,b) (p)->lpVtbl->GetAxes(p,a,b)
+#define IDirect3DRMFrame2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DRMFrame2_GetInheritAxes(p,a,b) (p)->lpVtbl->GetInheritAxes(p,a,b)
+#define IDirect3DRMFrame2_GetHierarchyBox(p,a) (p)->lpVtbl->GetHierarchyBox(p,a)
+#define IDirect3DRMFrame2_SetBox(p,a) (p)->lpVtbl->SetBox(p,a)
+#define IDirect3DRMFrame2_SetBoxEnable(p,a) (p)->lpVtbl->SetBoxEnable(p,a)
+#define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f) (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f)
+#define IDirect3DRMFrame2_SetInheritAxes(p,a) (p)->lpVtbl->SetInheritAxes(p,a)
+#define IDirect3DRMFrame2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFrame2_SetQuaternion(p,a,b) (p)->lpVtbl->SetQuaternion(p,a,b)
+#define IDirect3DRMFrame2_RayPick(p,a,b,c,d) (p)->lpVtbl->RayPick(p,a,b,c,d)
+#define IDirect3DRMFrame2_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFrame2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFrame2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMFrame2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFrame2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFrame2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMFrame2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMFrame2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMFrame2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMFrame2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMFrame methods ***/
+#define IDirect3DRMFrame2_AddChild(p,a) (p)->AddChild(a)
+#define IDirect3DRMFrame2_AddLight(p,a) (p)->AddLight(a)
+#define IDirect3DRMFrame2_AddMoveCallback(p,a,b) (p)->AddMoveCallback(a,b)
+#define IDirect3DRMFrame2_AddTransform(p,a,b) (p)->AddTransform(a,b)
+#define IDirect3DRMFrame2_AddTranslation(p,a,b,c,d) (p)->AddTranslation(a,b,c,d)
+#define IDirect3DRMFrame2_AddScale(p,a,b,c,d) (p)->AddScale(a,b,c,d)
+#define IDirect3DRMFrame2_AddRotation(p,a,b,c,d,e) (p)->AddRotation(a,b,c,d,e)
+#define IDirect3DRMFrame2_AddVisual(p,a) (p)->AddVisual(a)
+#define IDirect3DRMFrame2_GetChildren(p,a) (p)->GetChildren(a)
+#define IDirect3DRMFrame2_GetColor(p) (p)->GetColor()
+#define IDirect3DRMFrame2_GetLights(p,a) (p)->GetLights(a)
+#define IDirect3DRMFrame2_GetMaterialMode(p) (p)->GetMaterialMode()
+#define IDirect3DRMFrame2_GetParent(p,a) (p)->GetParent(a)
+#define IDirect3DRMFrame2_GetPosition(p,a,b) (p)->GetPosition(a,b)
+#define IDirect3DRMFrame2_GetRotation(p,a,b,c) (p)->GetRotation(a,b,c)
+#define IDirect3DRMFrame2_GetScene(p,a) (p)->GetScene(a)
+#define IDirect3DRMFrame2_GetSortMode(p) (p)->GetSortMode()
+#define IDirect3DRMFrame2_GetTexture(p,a) (p)->GetTexture(a)
+#define IDirect3DRMFrame2_GetTransform(p,a) (p)->GetTransform(a)
+#define IDirect3DRMFrame2_GetVelocity(p,a,b,c) (p)->GetVelocity(a,b,c)
+#define IDirect3DRMFrame2_GetOrientation(p,a,b,c) (p)->GetOrientation(a,b,c)
+#define IDirect3DRMFrame2_GetVisuals(p,a) (p)->GetVisuals(a)
+#define IDirect3DRMFrame2_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFrame2_InverseTransform(p,a,b) (p)->InverseTransform(a,b)
+#define IDirect3DRMFrame2_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMFrame2_LookAt(p,a,b,c) (p)->LookAt(a,b,c)
+#define IDirect3DRMFrame2_Move(p,a) (p)->Move(a)
+#define IDirect3DRMFrame2_DeleteChild(p,a) (p)->DeleteChild(a)
+#define IDirect3DRMFrame2_DeleteLight(p,a) (p)->DeleteLight(a)
+#define IDirect3DRMFrame2_DeleteMoveCallback(p,a,b) (p)->DeleteMoveCallback(a,b)
+#define IDirect3DRMFrame2_DeleteVisual(p,a) (p)->DeleteVisual(a)
+#define IDirect3DRMFrame2_GetSceneBackground(p) (p)->GetSceneBackground()
+#define IDirect3DRMFrame2_GetSceneBackgroundDepth(p,a) (p)->GetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame2_GetSceneFogColor(p) (p)->GetSceneFogColor()
+#define IDirect3DRMFrame2_GetSceneFogEnable(p) (p)->GetSceneFogEnable()
+#define IDirect3DRMFrame2_GetSceneFogMode(p) (p)->GetSceneFogMode()
+#define IDirect3DRMFrame2_GetSceneFogParams(p,a,b,c) (p)->GetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackground(p,a) (p)->SetSceneBackground(a)
+#define IDirect3DRMFrame2_SetSceneBackgroundRGB(p,a,b,c) (p)->SetSceneBackgroundRGB(a,b,c)
+#define IDirect3DRMFrame2_SetSceneBackgroundDepth(p,a) (p)->SetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame2_SetSceneBackgroundImage(p,a) (p)->SetSceneBackgroundImage(a)
+#define IDirect3DRMFrame2_SetSceneFogEnable(p,a) (p)->SetSceneFogEnable(a)
+#define IDirect3DRMFrame2_SetSceneFogColor(p,a) (p)->SetSceneFogColor(a)
+#define IDirect3DRMFrame2_SetSceneFogMode(p,a) (p)->SetSceneFogMode(a)
+#define IDirect3DRMFrame2_SetSceneFogParams(p,a,b,c) (p)->SetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame2_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMFrame2_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFrame2_GetZbufferMode(p) (p)->GetZbufferMode()
+#define IDirect3DRMFrame2_SetMaterialMode(p,a) (p)->SetMaterialMode(a)
+#define IDirect3DRMFrame2_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirect3DRMFrame2_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirect3DRMFrame2_SetRotation(p,a,b,c,d,e) (p)->SetRotation(a,b,c,d,e)
+#define IDirect3DRMFrame2_SetSortMode(p,a) (p)->SetSortMode(a)
+#define IDirect3DRMFrame2_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMFrame2_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFrame2_SetVelocity(p,a,b,c,d,e) (p)->SetVelocity(a,b,c,d,e)
+#define IDirect3DRMFrame2_SetZbufferMode(p,a) (p)->SetZbufferMode(a)
+#define IDirect3DRMFrame2_Transform(p,a,b) (p)->Transform(a,b)
+/*** IDirect3DRMFrame2 methods ***/
+#define IDirect3DRMFrame2_AddMoveCallback2(p,a,b,c) (p)->AddMoveCallback2(a,b,c)
+#define IDirect3DRMFrame2_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMFrame2_GetBoxEnable(p) (p)->GetBoxEnable()
+#define IDirect3DRMFrame2_GetAxes(p,a,b) (p)->GetAxes(a,b)
+#define IDirect3DRMFrame2_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DRMFrame2_GetInheritAxes(p,a,b) (p)->GetInheritAxes(a,b)
+#define IDirect3DRMFrame2_GetHierarchyBox(p,a) (p)->GetHierarchyBox(a)
+#define IDirect3DRMFrame2_SetBox(p,a) (p)->SetBox(a)
+#define IDirect3DRMFrame2_SetBoxEnable(p,a) (p)->SetBoxEnable(a)
+#define IDirect3DRMFrame2_SetAxes(p,a,b,c,d,e,f) (p)->SetAxes(a,b,c,d,e,f)
+#define IDirect3DRMFrame2_SetInheritAxes(p,a) (p)->SetInheritAxes(a)
+#define IDirect3DRMFrame2_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMFrame2_SetQuaternion(p,a,b) (p)->SetQuaternion(a,b)
+#define IDirect3DRMFrame2_RayPick(p,a,b,c,d) (p)->RayPick(a,b,c,d)
+#define IDirect3DRMFrame2_Save(p,a,b,c) (p)->Save(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrame3 interface
+ */
+#define INTERFACE IDirect3DRMFrame3
+DECLARE_INTERFACE_(IDirect3DRMFrame3,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMFrame3 methods ***/
+ STDMETHOD(AddChild)(THIS_ IDirect3DRMFrame3 *child) PURE;
+ STDMETHOD(AddLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+ STDMETHOD(AddMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx, DWORD flags) PURE;
+ STDMETHOD(AddTransform)(THIS_ D3DRMCOMBINETYPE, D3DRMMATRIX4D) PURE;
+ STDMETHOD(AddTranslation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddScale)(THIS_ D3DRMCOMBINETYPE, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(AddRotation)(THIS_ D3DRMCOMBINETYPE, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+ STDMETHOD(AddVisual)(THIS_ IUnknown *visual) PURE;
+ STDMETHOD(GetChildren)(THIS_ struct IDirect3DRMFrameArray **children) PURE;
+ STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+ STDMETHOD(GetLights)(THIS_ struct IDirect3DRMLightArray **lights) PURE;
+ STDMETHOD_(D3DRMMATERIALMODE, GetMaterialMode)(THIS) PURE;
+ STDMETHOD(GetParent)(THIS_ IDirect3DRMFrame3 **parent) PURE;
+ STDMETHOD(GetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_position) PURE;
+ STDMETHOD(GetRotation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *axis, D3DVALUE *return_theta) PURE;
+ STDMETHOD(GetScene)(THIS_ IDirect3DRMFrame3 **scene) PURE;
+ STDMETHOD_(D3DRMSORTMODE, GetSortMode)(THIS) PURE;
+ STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE;
+ STDMETHOD(GetTransform)(THIS_ IDirect3DRMFrame3 *reference, D3DRMMATRIX4D matrix) PURE;
+ STDMETHOD(GetVelocity)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *return_velocity, BOOL with_rotation) PURE;
+ STDMETHOD(GetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *dir, D3DVECTOR *up) PURE;
+ STDMETHOD(GetVisuals)(THIS_ DWORD *count, IUnknown **visuals) PURE;
+ STDMETHOD(InverseTransform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE;
+ STDMETHOD(LookAt)(THIS_ IDirect3DRMFrame3 *target, IDirect3DRMFrame3 *reference,
+ D3DRMFRAMECONSTRAINT constraint) PURE;
+ STDMETHOD(Move)(THIS_ D3DVALUE delta) PURE;
+ STDMETHOD(DeleteChild)(THIS_ IDirect3DRMFrame3 *child) PURE;
+ STDMETHOD(DeleteLight)(THIS_ struct IDirect3DRMLight *light) PURE;
+ STDMETHOD(DeleteMoveCallback)(THIS_ D3DRMFRAME3MOVECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteVisual)(THIS_ IUnknown *visual) PURE;
+ STDMETHOD_(D3DCOLOR, GetSceneBackground)(THIS) PURE;
+ STDMETHOD(GetSceneBackgroundDepth)(THIS_ IDirectDrawSurface **surface) PURE;
+ STDMETHOD_(D3DCOLOR, GetSceneFogColor)(THIS) PURE;
+ STDMETHOD_(BOOL, GetSceneFogEnable)(THIS) PURE;
+ STDMETHOD_(D3DRMFOGMODE, GetSceneFogMode)(THIS) PURE;
+ STDMETHOD(GetSceneFogParams)(THIS_ D3DVALUE *return_start, D3DVALUE *return_end,
+ D3DVALUE *return_density) PURE;
+ STDMETHOD(SetSceneBackground)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetSceneBackgroundRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetSceneBackgroundDepth)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(SetSceneBackgroundImage)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+ STDMETHOD(SetSceneFogEnable)(THIS_ BOOL) PURE;
+ STDMETHOD(SetSceneFogColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetSceneFogMode)(THIS_ D3DRMFOGMODE) PURE;
+ STDMETHOD(SetSceneFogParams)(THIS_ D3DVALUE start, D3DVALUE end, D3DVALUE density) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD_(D3DRMZBUFFERMODE, GetZbufferMode)(THIS) PURE;
+ STDMETHOD(SetMaterialMode)(THIS_ D3DRMMATERIALMODE) PURE;
+ STDMETHOD(SetOrientation)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz,
+ D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) PURE;
+ STDMETHOD(SetPosition)(THIS_ IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetRotation)(THIS_ IDirect3DRMFrame3 *reference,
+ D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) PURE;
+ STDMETHOD(SetSortMode)(THIS_ D3DRMSORTMODE) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+ STDMETHOD(SetVelocity)(THIS_ IDirect3DRMFrame3 *reference,
+ D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) PURE;
+ STDMETHOD(SetZbufferMode)(THIS_ D3DRMZBUFFERMODE) PURE;
+ STDMETHOD(Transform)(THIS_ D3DVECTOR *d, D3DVECTOR *s) PURE;
+ STDMETHOD(GetBox)(THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD_(BOOL, GetBoxEnable)(THIS) PURE;
+ STDMETHOD(GetAxes)(THIS_ D3DVECTOR *dir, D3DVECTOR *up);
+ STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE;
+ STDMETHOD_(BOOL, GetInheritAxes)(THIS);
+ STDMETHOD(GetHierarchyBox)(THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD(SetBox)(THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD(SetBoxEnable)(THIS_ BOOL) PURE;
+ STDMETHOD(SetAxes)(THIS_ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz);
+ STDMETHOD(SetInheritAxes)(THIS_ BOOL inherit_from_parent);
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;
+ STDMETHOD(SetQuaternion)(THIS_ IDirect3DRMFrame3 *reference, D3DRMQUATERNION *q) PURE;
+ STDMETHOD(RayPick)(THIS_ IDirect3DRMFrame3 *reference, D3DRMRAY *ray, DWORD flags,
+ struct IDirect3DRMPicked2Array **return_visuals) PURE;
+ STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT format, D3DRMSAVEOPTIONS flags);
+ STDMETHOD(TransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count,
+ D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE;
+ STDMETHOD(InverseTransformVectors)(THIS_ IDirect3DRMFrame3 *reference, DWORD vector_count,
+ D3DVECTOR *dst_vectors, D3DVECTOR *src_vectors) PURE;
+ STDMETHOD(SetTraversalOptions)(THIS_ DWORD flags) PURE;
+ STDMETHOD(GetTraversalOptions)(THIS_ DWORD *flags) PURE;
+ STDMETHOD(SetSceneFogMethod)(THIS_ DWORD flags) PURE;
+ STDMETHOD(GetSceneFogMethod)(THIS_ DWORD *fog_mode) PURE;
+ STDMETHOD(SetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE;
+ STDMETHOD(GetMaterialOverride)(THIS_ D3DRMMATERIALOVERRIDE *override) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrame3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrame3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFrame3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFrame3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFrame3_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFrame3_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFrame3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFrame3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFrame3 methods ***/
+#define IDirect3DRMFrame3_AddChild(p,a) (p)->lpVtbl->AddChild(p,a)
+#define IDirect3DRMFrame3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)
+#define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c) (p)->lpVtbl->AddMoveCallback(p,a,b,c)
+#define IDirect3DRMFrame3_AddTransform(p,a,b) (p)->lpVtbl->AddTransform(p,a,b)
+#define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d) (p)->lpVtbl->AddTranslation(p,a,b,c,d)
+#define IDirect3DRMFrame3_AddScale(p,a,b,c,d) (p)->lpVtbl->AddScale(p,a,b,c,d)
+#define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e) (p)->lpVtbl->AddRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_AddVisual(p,a) (p)->lpVtbl->AddVisual(p,a)
+#define IDirect3DRMFrame3_GetChildren(p,a) (p)->lpVtbl->GetChildren(p,a)
+#define IDirect3DRMFrame3_GetColor(p) (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMFrame3_GetLights(p,a) (p)->lpVtbl->GetLights(p,a)
+#define IDirect3DRMFrame3_GetMaterialMode(p) (p)->lpVtbl->GetMaterialMode(p)
+#define IDirect3DRMFrame3_GetParent(p,a) (p)->lpVtbl->GetParent(p,a)
+#define IDirect3DRMFrame3_GetPosition(p,a,b) (p)->lpVtbl->GetPosition(p,a,b)
+#define IDirect3DRMFrame3_GetRotation(p,a,b,c) (p)->lpVtbl->GetRotation(p,a,b,c)
+#define IDirect3DRMFrame3_GetScene(p,a) (p)->lpVtbl->GetScene(p,a)
+#define IDirect3DRMFrame3_GetSortMode(p) (p)->lpVtbl->GetSortMode(p)
+#define IDirect3DRMFrame3_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFrame3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)
+#define IDirect3DRMFrame3_GetVelocity(p,a,b,c) (p)->lpVtbl->GetVelocity(p,a,b,c)
+#define IDirect3DRMFrame3_GetOrientation(p,a,b,c) (p)->lpVtbl->GetOrientation(p,a,b,c)
+#define IDirect3DRMFrame3_GetVisuals(p,a,b) (p)->lpVtbl->GetVisuals(p,a,b)
+#define IDirect3DRMFrame3_InverseTransform(p,a,b) (p)->lpVtbl->InverseTransform(p,a,b)
+#define IDirect3DRMFrame3_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_LookAt(p,a,b,c) (p)->lpVtbl->LookAt(p,a,b,c)
+#define IDirect3DRMFrame3_Move(p,a) (p)->lpVtbl->Move(p,a)
+#define IDirect3DRMFrame3_DeleteChild(p,a) (p)->lpVtbl->DeleteChild(p,a)
+#define IDirect3DRMFrame3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)
+#define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b) (p)->lpVtbl->DeleteMoveCallback(p,a,b)
+#define IDirect3DRMFrame3_DeleteVisual(p,a) (p)->lpVtbl->DeleteVisual(p,a)
+#define IDirect3DRMFrame3_GetSceneBackground(p) (p)->lpVtbl->GetSceneBackground(p)
+#define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a) (p)->lpVtbl->GetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame3_GetSceneFogColor(p) (p)->lpVtbl->GetSceneFogColor(p)
+#define IDirect3DRMFrame3_GetSceneFogEnable(p) (p)->lpVtbl->GetSceneFogEnable(p)
+#define IDirect3DRMFrame3_GetSceneFogMode(p) (p)->lpVtbl->GetSceneFogMode(p)
+#define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c) (p)->lpVtbl->GetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackground(p,a) (p)->lpVtbl->SetSceneBackground(p,a)
+#define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c) (p)->lpVtbl->SetSceneBackgroundRGB(p,a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a) (p)->lpVtbl->SetSceneBackgroundDepth(p,a)
+#define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a) (p)->lpVtbl->SetSceneBackgroundImage(p,a)
+#define IDirect3DRMFrame3_SetSceneFogEnable(p,a) (p)->lpVtbl->SetSceneFogEnable(p,a)
+#define IDirect3DRMFrame3_SetSceneFogColor(p,a) (p)->lpVtbl->SetSceneFogColor(p,a)
+#define IDirect3DRMFrame3_SetSceneFogMode(p,a) (p)->lpVtbl->SetSceneFogMode(p,a)
+#define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c) (p)->lpVtbl->SetSceneFogParams(p,a,b,c)
+#define IDirect3DRMFrame3_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFrame3_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFrame3_GetZbufferMode(p) (p)->lpVtbl->GetZbufferMode(p)
+#define IDirect3DRMFrame3_SetMaterialMode(p,a) (p)->lpVtbl->SetMaterialMode(p,a)
+#define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirect3DRMFrame3_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e) (p)->lpVtbl->SetRotation(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_SetSortMode(p,a) (p)->lpVtbl->SetSortMode(p,a)
+#define IDirect3DRMFrame3_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e) (p)->lpVtbl->SetVelocity(p,a,b,c,d,e)
+#define IDirect3DRMFrame3_SetZbufferMode(p,a) (p)->lpVtbl->SetZbufferMode(p,a)
+#define IDirect3DRMFrame3_Transform(p,a,b) (p)->lpVtbl->Transform(p,a,b)
+#define IDirect3DRMFrame3_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMFrame3_GetBoxEnable(p) (p)->lpVtbl->GetBoxEnable(p)
+#define IDirect3DRMFrame3_GetAxes(p,a,b) (p)->lpVtbl->GetAxes(p,a,b)
+#define IDirect3DRMFrame3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)
+#define IDirect3DRMFrame3_GetInheritAxes(p) (p)->lpVtbl->GetInheritAxes(p)
+#define IDirect3DRMFrame3_GetHierarchyBox(p,a) (p)->lpVtbl->GetHierarchyBox(p,a)
+#define IDirect3DRMFrame3_SetBox(p,a) (p)->lpVtbl->SetBox(p,a)
+#define IDirect3DRMFrame3_SetBoxEnable(p,a) (p)->lpVtbl->SetBoxEnable(p,a)
+#define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f) (p)->lpVtbl->SetAxes(p,a,b,c,d,e,f)
+#define IDirect3DRMFrame3_SetInheritAxes(p,a) (p)->lpVtbl->SetInheritAxes(p,a)
+#define IDirect3DRMFrame3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFrame3_SetQuaternion(p,a,b) (p)->lpVtbl->SetQuaternion(p,a,b)
+#define IDirect3DRMFrame3_RayPick(p,a,b,c,d) (p)->lpVtbl->RayPick(p,a,b,c,d)
+#define IDirect3DRMFrame3_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d) (p)->lpVtbl->TransformVectors(p,a,b,c,d)
+#define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->lpVtbl->InverseTransformVectors(p,a,b,c,d)
+#define IDirect3DRMFrame3_SetTraversalOptions(p,a) (p)->lpVtbl->SetTraversalOptions(p,a)
+#define IDirect3DRMFrame3_GetTraversalOptions(p,a) (p)->lpVtbl->GetTraversalOptions(p,a)
+#define IDirect3DRMFrame3_SetSceneFogMethod(p,a) (p)->lpVtbl->SetSceneFogMethod(p,a)
+#define IDirect3DRMFrame3_GetSceneFogMethod(p,a) (p)->lpVtbl->GetSceneFogMethod(p,a)
+#define IDirect3DRMFrame3_SetMaterialOverride(p,a) (p)->lpVtbl->SetMaterialOverride(p,a)
+#define IDirect3DRMFrame3_GetMaterialOverride(p,a) (p)->lpVtbl->GetMaterialOverride(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrame3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFrame3_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFrame3_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFrame3_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMFrame3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFrame3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFrame3_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMFrame3_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMFrame3_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMFrame3_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMFrame3_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMFrame3 methods ***/
+#define IDirect3DRMFrame3_AddChild(p,a) (p)->AddChild(a)
+#define IDirect3DRMFrame3_AddLight(p,a) (p)->AddLight(a)
+#define IDirect3DRMFrame3_AddMoveCallback(p,a,b,c) (p)->AddMoveCallback(a,b,c)
+#define IDirect3DRMFrame3_AddTransform(p,a,b) (p)->AddTransform(a,b)
+#define IDirect3DRMFrame3_AddTranslation(p,a,b,c,d) (p)->AddTranslation(a,b,c,d)
+#define IDirect3DRMFrame3_AddScale(p,a,b,c,d) (p)->AddScale(a,b,c,d)
+#define IDirect3DRMFrame3_AddRotation(p,a,b,c,d,e) (p)->AddRotation(a,b,c,d,e)
+#define IDirect3DRMFrame3_AddVisual(p,a) (p)->AddVisual(a)
+#define IDirect3DRMFrame3_GetChildren(p,a) (p)->GetChildren(a)
+#define IDirect3DRMFrame3_GetColor(p) (p)->GetColor()
+#define IDirect3DRMFrame3_GetLights(p,a) (p)->GetLights(a)
+#define IDirect3DRMFrame3_GetMaterialMode(p) (p)->GetMaterialMode()
+#define IDirect3DRMFrame3_GetParent(p,a) (p)->GetParent(a)
+#define IDirect3DRMFrame3_GetPosition(p,a,b) (p)->GetPosition(a,b)
+#define IDirect3DRMFrame3_GetRotation(p,a,b,c) (p)->GetRotation(a,b,c)
+#define IDirect3DRMFrame3_GetScene(p,a) (p)->GetScene(a)
+#define IDirect3DRMFrame3_GetSortMode(p) (p)->GetSortMode()
+#define IDirect3DRMFrame3_GetTexture(p,a) (p)->GetTexture(a)
+#define IDirect3DRMFrame3_GetTransform(p,a,b) (p)->GetTransform(a,b)
+#define IDirect3DRMFrame3_GetVelocity(p,a,b,c) (p)->GetVelocity(a,b,c)
+#define IDirect3DRMFrame3_GetOrientation(p,a,b,c) (p)->GetOrientation(a,b,c)
+#define IDirect3DRMFrame3_GetVisuals(p,a,b) (p)->GetVisuals(a,b)
+#define IDirect3DRMFrame3_InverseTransform(p,a,b) (p)->InverseTransform(a,b)
+#define IDirect3DRMFrame3_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMFrame3_LookAt(p,a,b,c) (p)->LookAt(a,b,c)
+#define IDirect3DRMFrame3_Move(p,a) (p)->Move(a)
+#define IDirect3DRMFrame3_DeleteChild(p,a) (p)->DeleteChild(a)
+#define IDirect3DRMFrame3_DeleteLight(p,a) (p)->DeleteLight(a)
+#define IDirect3DRMFrame3_DeleteMoveCallback(p,a,b) (p)->DeleteMoveCallback(a,b)
+#define IDirect3DRMFrame3_DeleteVisual(p,a) (p)->DeleteVisual(a)
+#define IDirect3DRMFrame3_GetSceneBackground(p) (p)->GetSceneBackground()
+#define IDirect3DRMFrame3_GetSceneBackgroundDepth(p,a) (p)->GetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame3_GetSceneFogColor(p) (p)->GetSceneFogColor()
+#define IDirect3DRMFrame3_GetSceneFogEnable(p) (p)->GetSceneFogEnable()
+#define IDirect3DRMFrame3_GetSceneFogMode(p) (p)->GetSceneFogMode()
+#define IDirect3DRMFrame3_GetSceneFogParams(p,a,b,c) (p)->GetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackground(p,a) (p)->SetSceneBackground(a)
+#define IDirect3DRMFrame3_SetSceneBackgroundRGB(p,a,b,c) (p)->SetSceneBackgroundRGB(a,b,c)
+#define IDirect3DRMFrame3_SetSceneBackgroundDepth(p,a) (p)->SetSceneBackgroundDepth(a)
+#define IDirect3DRMFrame3_SetSceneBackgroundImage(p,a) (p)->SetSceneBackgroundImage(a)
+#define IDirect3DRMFrame3_SetSceneFogEnable(p,a) (p)->SetSceneFogEnable(a)
+#define IDirect3DRMFrame3_SetSceneFogColor(p,a) (p)->SetSceneFogColor(a)
+#define IDirect3DRMFrame3_SetSceneFogMode(p,a) (p)->SetSceneFogMode(a)
+#define IDirect3DRMFrame3_SetSceneFogParams(p,a,b,c) (p)->SetSceneFogParams(a,b,c)
+#define IDirect3DRMFrame3_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMFrame3_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFrame3_GetZbufferMode(p) (p)->GetZbufferMode()
+#define IDirect3DRMFrame3_SetMaterialMode(p,a) (p)->SetMaterialMode(a)
+#define IDirect3DRMFrame3_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirect3DRMFrame3_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirect3DRMFrame3_SetRotation(p,a,b,c,d,e) (p)->SetRotation(a,b,c,d,e)
+#define IDirect3DRMFrame3_SetSortMode(p,a) (p)->SetSortMode(a)
+#define IDirect3DRMFrame3_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMFrame3_SetVelocity(p,a,b,c,d,e) (p)->SetVelocity(a,b,c,d,e)
+#define IDirect3DRMFrame3_SetZbufferMode(p,a) (p)->SetZbufferMode(a)
+#define IDirect3DRMFrame3_Transform(p,a,b) (p)->Transform(a,b)
+#define IDirect3DRMFrame3_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMFrame3_GetBoxEnable(p) (p)->GetBoxEnable()
+#define IDirect3DRMFrame3_GetAxes(p,a,b) (p)->GetAxes(a,b)
+#define IDirect3DRMFrame3_GetMaterial(p,a) (p)->GetMaterial(a)
+#define IDirect3DRMFrame3_GetInheritAxes(p) (p)->GetInheritAxes()
+#define IDirect3DRMFrame3_GetHierarchyBox(p,a) (p)->GetHierarchyBox(a)
+#define IDirect3DRMFrame3_SetBox(p,a) (p)->SetBox(a)
+#define IDirect3DRMFrame3_SetBoxEnable(p,a) (p)->SetBoxEnable(a)
+#define IDirect3DRMFrame3_SetAxes(p,a,b,c,d,e,f) (p)->SetAxes(a,b,c,d,e,f)
+#define IDirect3DRMFrame3_SetInheritAxes(p,a) (p)->SetInheritAxes(a)
+#define IDirect3DRMFrame3_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMFrame3_SetQuaternion(p,a,b) (p)->SetQuaternion(a,b)
+#define IDirect3DRMFrame3_RayPick(p,a,b,c,d) (p)->RayPick(a,b,c,d)
+#define IDirect3DRMFrame3_Save(p,a,b,c) (p)->Save(a,b,c)
+#define IDirect3DRMFrame3_TransformVectors(p,a,b,c,d) (p)->TransformVectors(a,b,c,d)
+#define IDirect3DRMFrame3_InverseTransformVectors(p,a,b,c,d) (p)->InverseTransformVectors(a,b,c,d)
+#define IDirect3DRMFrame3_SetTraversalOptions(p,a) (p)->SetTraversalOptions(a)
+#define IDirect3DRMFrame3_GetTraversalOptions(p,a) (p)->GetTraversalOptions(a)
+#define IDirect3DRMFrame3_SetSceneFogMethod(p,a) (p)->SetSceneFogMethod(a)
+#define IDirect3DRMFrame3_GetSceneFogMethod(p,a) (p)->GetSceneFogMethod(a)
+#define IDirect3DRMFrame3_SetMaterialOverride(p,a) (p)->SetMaterialOverride(a)
+#define IDirect3DRMFrame3_GetMaterialOverride(p,a) (p)->GetMaterialOverride(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMesh interface
+ */
+#define INTERFACE IDirect3DRMMesh
+DECLARE_INTERFACE_(IDirect3DRMMesh,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMMesh methods ***/
+ STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+ STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+ STDMETHOD(AddGroup)(THIS_ unsigned vCount, unsigned fCount, unsigned vPerFace, unsigned *fData,
+ D3DRMGROUPINDEX *returnId) PURE;
+ STDMETHOD(SetVertices)(THIS_ D3DRMGROUPINDEX id, unsigned index, unsigned count,
+ D3DRMVERTEX *values) PURE;
+ STDMETHOD(SetGroupColor)(THIS_ D3DRMGROUPINDEX id, D3DCOLOR value) PURE;
+ STDMETHOD(SetGroupColorRGB)(THIS_ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetGroupMapping)(THIS_ D3DRMGROUPINDEX id, D3DRMMAPPING value) PURE;
+ STDMETHOD(SetGroupQuality)(THIS_ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value) PURE;
+ STDMETHOD(SetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial *material) PURE;
+ STDMETHOD(SetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD_(unsigned, GetGroupCount)(THIS) PURE;
+ STDMETHOD(GetGroup)(THIS_ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace,
+ DWORD *fDataSize, unsigned *fData) PURE;
+ STDMETHOD(GetVertices)(THIS_ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr) PURE;
+ STDMETHOD_(D3DCOLOR, GetGroupColor)(THIS_ D3DRMGROUPINDEX id) PURE;
+ STDMETHOD_(D3DRMMAPPING, GetGroupMapping)(THIS_ D3DRMGROUPINDEX id) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetGroupQuality)(THIS_ D3DRMGROUPINDEX id) PURE;
+ STDMETHOD(GetGroupMaterial)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMMaterial **material) PURE;
+ STDMETHOD(GetGroupTexture)(THIS_ D3DRMGROUPINDEX id, struct IDirect3DRMTexture **texture) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMesh_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMesh_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMesh_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMesh_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMesh_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMesh_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMesh_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMesh_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMesh_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMesh_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMesh methods ***/
+#define IDirect3DRMMesh_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMesh_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a,b,c)
+#define IDirect3DRMMesh_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e) (p)->lpVtbl->AddGroup(p,a,b,c,d,e)
+#define IDirect3DRMMesh_SetVertices(p,a,b,c,d) (p)->lpVtbl->SetVertices(p,a,b,c,d)
+#define IDirect3DRMMesh_SetGroupColor(p,a,b) (p)->lpVtbl->SetGroupColor(p,a,b)
+#define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d) (p)->lpVtbl->SetGroupColorRGB(p,a,b,c,d)
+#define IDirect3DRMMesh_SetGroupMapping(p,a,b) (p)->lpVtbl->SetGroupMapping(p,a,b)
+#define IDirect3DRMMesh_SetGroupQuality(p,a,b) (p)->lpVtbl->SetGroupQuality(p,a,b)
+#define IDirect3DRMMesh_SetGroupMaterial(p,a,b) (p)->lpVtbl->SetGroupMaterial(p,a,b)
+#define IDirect3DRMMesh_SetGroupTexture(p,a,b) (p)->lpVtbl->SetGroupTexture(p,a,b)
+#define IDirect3DRMMesh_GetGroupCount(p) (p)->lpVtbl->GetGroupCount(p)
+#define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f) (p)->lpVtbl->GetGroup(p,a,b,c,d,e,f)
+#define IDirect3DRMMesh_GetVertices(p,a,b,c,d) (p)->lpVtbl->GetVertices(p,a,b,c,d)
+#define IDirect3DRMMesh_GetGroupColor(p,a) (p)->lpVtbl->GetGroupColor(p,a)
+#define IDirect3DRMMesh_GetGroupMapping(p,a) (p)->lpVtbl->GetGroupMapping(p,a)
+#define IDirect3DRMMesh_GetGroupQuality(p,a) (p)->lpVtbl->GetGroupQuality(p,a)
+#define IDirect3DRMMesh_GetGroupMaterial(p,a,b) (p)->lpVtbl->GetGroupMaterial(p,a,b)
+#define IDirect3DRMMesh_GetGroupTexture(p,a,b) (p)->lpVtbl->GetGroupTexture(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMesh_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMMesh_AddRef(p) (p)->AddRef()
+#define IDirect3DRMMesh_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMesh_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMMesh_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMesh_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMesh_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMMesh_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMMesh_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMMesh_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMMesh_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMMesh methods ***/
+#define IDirect3DRMMesh_Scale(p,a,b,c) (p)->Scale(a,b,c)
+#define IDirect3DRMMesh_Translate(p,a,b,c) (p)->Translate(a,b,c)
+#define IDirect3DRMMesh_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMMesh_AddGroup(p,a,b,c,d,e) (p)->AddGroup(a,b,c,d,e)
+#define IDirect3DRMMesh_SetVertices(p,a,b,c,d) (p)->SetVertices(a,b,c,d)
+#define IDirect3DRMMesh_SetGroupColor(p,a,b) (p)->SetGroupColor(a,b)
+#define IDirect3DRMMesh_SetGroupColorRGB(p,a,b,c,d) (p)->SetGroupColorRGB(a,b,c,d)
+#define IDirect3DRMMesh_SetGroupMapping(p,a,b) (p)->SetGroupMapping(a,b)
+#define IDirect3DRMMesh_SetGroupQuality(p,a,b) (p)->SetGroupQuality(a,b)
+#define IDirect3DRMMesh_SetGroupMaterial(p,a,b) (p)->SetGroupMaterial(a,b)
+#define IDirect3DRMMesh_SetGroupTexture(p,a,b) (p)->SetGroupTexture(a,b)
+#define IDirect3DRMMesh_GetGroupCount(p) (p)->GetGroupCount()
+#define IDirect3DRMMesh_GetGroup(p,a,b,c,d,e,f) (p)->GetGroup(a,b,c,d,e,f)
+#define IDirect3DRMMesh_GetVertices(p,a,b,c,d) (p)->GetVertices(a,b,c,d)
+#define IDirect3DRMMesh_GetGroupColor(p,a) (p)->GetGroupColor(a)
+#define IDirect3DRMMesh_GetGroupMapping(p,a) (p)->GetGroupMapping(a)
+#define IDirect3DRMMesh_GetGroupQuality(p,a) (p)->GetGroupQuality(a)
+#define IDirect3DRMMesh_GetGroupMaterial(p,a,b) (p)->GetGroupMaterial(a,b)
+#define IDirect3DRMMesh_GetGroupTexture(p,a,b) (p)->GetGroupTexture(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMProgressiveMesh interface
+ */
+#define INTERFACE IDirect3DRMProgressiveMesh
+DECLARE_INTERFACE_(IDirect3DRMProgressiveMesh,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMProgressiveMesh methods ***/
+ STDMETHOD(Load) (THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(GetLoadStatus) (THIS_ D3DRMPMESHLOADSTATUS *status) PURE;
+ STDMETHOD(SetMinRenderDetail) (THIS_ D3DVALUE d3dVal) PURE;
+ STDMETHOD(Abort) (THIS_ DWORD flags) PURE;
+ STDMETHOD(GetFaceDetail) (THIS_ DWORD *count) PURE;
+ STDMETHOD(GetVertexDetail) (THIS_ DWORD *count) PURE;
+ STDMETHOD(SetFaceDetail) (THIS_ DWORD count) PURE;
+ STDMETHOD(SetVertexDetail) (THIS_ DWORD count) PURE;
+ STDMETHOD(GetFaceDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE;
+ STDMETHOD(GetVertexDetailRange) (THIS_ DWORD *min_detail, DWORD *max_detail) PURE;
+ STDMETHOD(GetDetail) (THIS_ D3DVALUE *pdvVal) PURE;
+ STDMETHOD(SetDetail) (THIS_ D3DVALUE d3dVal) PURE;
+ STDMETHOD(RegisterEvents) (THIS_ HANDLE event, DWORD flags, DWORD reserved) PURE;
+ STDMETHOD(CreateMesh) (THIS_ IDirect3DRMMesh **mesh) PURE;
+ STDMETHOD(Duplicate) (THIS_ IDirect3DRMProgressiveMesh **mesh) PURE;
+ STDMETHOD(GetBox) (THIS_ D3DRMBOX *box) PURE;
+ STDMETHOD(SetQuality) (THIS_ D3DRMRENDERQUALITY quality) PURE;
+ STDMETHOD(GetQuality) (THIS_ D3DRMRENDERQUALITY *quality) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMProgressiveMesh_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMProgressiveMesh_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMProgressiveMesh_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMProgressiveMesh_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMProgressiveMesh_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMProgressiveMesh_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMProgressiveMesh_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMProgressiveMesh_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMProgressiveMesh methods ***/
+#define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a) (p)->lpVtbl->GetLoadStatus(p,a)
+#define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a) (p)->lpVtbl->SetMinRenderDetail(p,a)
+#define IDirect3DRMProgressiveMesh_Abort(p,a) (p)->lpVtbl->Abort(p,a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a) (p)->lpVtbl->GetFaceDetail(p,a)
+#define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a) (p)->lpVtbl->GetVertexDetail(p,a)
+#define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a) (p)->lpVtbl->SetFaceDetail(p,a)
+#define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a) (p)->lpVtbl->SetVertexDetail(p,a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b) (p)->lpVtbl->GetFaceDetailRange(p,a,b)
+#define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b) (p)->lpVtbl->GetVertexDetailRange(p,a,b)
+#define IDirect3DRMProgressiveMesh_GetDetail(p,a) (p)->lpVtbl->GetDetail(p,a)
+#define IDirect3DRMProgressiveMesh_SetDetail(p,a) (p)->lpVtbl->SetDetail(p,a)
+#define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c) (p)->lpVtbl->RegisterEvents(p,a,b,c)
+#define IDirect3DRMProgressiveMesh_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRMProgressiveMesh_Duplicate(p,a) (p)->lpVtbl->Duplicate(p,a)
+#define IDirect3DRMProgressiveMesh_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMProgressiveMesh_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMProgressiveMesh_GetQuality(p,a) (p)->lpVtbl->GetQuality(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMProgressiveMesh_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMProgressiveMesh_AddRef(p) (p)->AddRef()
+#define IDirect3DRMProgressiveMesh_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMProgressiveMesh_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMProgressiveMesh_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMProgressiveMesh_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMProgressiveMesh_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMProgressiveMesh_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMProgressiveMesh_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMProgressiveMesh_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMProgressiveMesh_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMProgressiveMesh methods ***/
+#define IDirect3DRMProgressiveMesh_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMProgressiveMesh_GetLoadStatus(p,a) (p)->GetLoadStatus(a)
+#define IDirect3DRMProgressiveMesh_SetMinRenderDetail(p,a) (p)->SetMinRenderDetail(a)
+#define IDirect3DRMProgressiveMesh_Abort(p,a) (p)->Abort(a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetail(p,a) (p)->GetFaceDetail(a)
+#define IDirect3DRMProgressiveMesh_GetVertexDetail(p,a) (p)->GetVertexDetail(a)
+#define IDirect3DRMProgressiveMesh_SetFaceDetail(p,a) (p)->SetFaceDetail(a)
+#define IDirect3DRMProgressiveMesh_SetVertexDetail(p,a) (p)->SetVertexDetail(a)
+#define IDirect3DRMProgressiveMesh_GetFaceDetailRange(p,a,b) (p)->GetFaceDetailRange(a,b)
+#define IDirect3DRMProgressiveMesh_GetVertexDetailRange(p,a,b) (p)->GetVertexDetailRange(a,b)
+#define IDirect3DRMProgressiveMesh_GetDetail(p,a) (p)->GetDetail(a)
+#define IDirect3DRMProgressiveMesh_SetDetail(p,a) (p)->SetDetail(a)
+#define IDirect3DRMProgressiveMesh_RegisterEvents(p,a,b,c) (p)->RegisterEvents(a,b,c)
+#define IDirect3DRMProgressiveMesh_CreateMesh(p,a) (p)->CreateMesh(a)
+#define IDirect3DRMProgressiveMesh_Duplicate(p,a) (p)->Duplicate(a)
+#define IDirect3DRMProgressiveMesh_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMProgressiveMesh_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMProgressiveMesh_GetQuality(p,a) (p)->GetQuality(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMShadow interface
+ */
+#define INTERFACE IDirect3DRMShadow
+DECLARE_INTERFACE_(IDirect3DRMShadow,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMShadow methods ***/
+ STDMETHOD(Init)(THIS_ IDirect3DRMVisual *visual, struct IDirect3DRMLight *light,
+ D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMShadow_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMShadow_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMShadow_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMShadow_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMShadow_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMShadow_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMShadow_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMShadow_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g) (p)->lpVtbl->Load(p,a,b,c,d,e,f,g)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMShadow_AddRef(p) (p)->AddRef()
+#define IDirect3DRMShadow_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMShadow_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMShadow_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMShadow_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMShadow_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMShadow_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMShadow_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMShadow_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow_Init(p,a,b,c,d,e,f,g) (p)->Load(a,b,c,d,e,f,g)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMShadow2 interface
+ */
+#define INTERFACE IDirect3DRMShadow2
+DECLARE_INTERFACE_(IDirect3DRMShadow2,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMShadow methods ***/
+ STDMETHOD(Init)(THIS_ IUnknown *object, struct IDirect3DRMLight *light,
+ D3DVALUE px, D3DVALUE py, D3DVALUE pz, D3DVALUE nx, D3DVALUE ny, D3DVALUE nz) PURE;
+ /*** IDirect3DRMShadow2 methods ***/
+ STDMETHOD(GetVisual)(THIS_ IDirect3DRMVisual **visual) PURE;
+ STDMETHOD(SetVisual)(THIS_ IUnknown *visual, DWORD flags) PURE;
+ STDMETHOD(GetLight)(THIS_ struct IDirect3DRMLight **light) PURE;
+ STDMETHOD(SetLight)(THIS_ struct IDirect3DRMLight *light, DWORD flags) PURE;
+ STDMETHOD(GetPlane)(THIS_ D3DVALUE *px, D3DVALUE *py, D3DVALUE *pz,
+ D3DVALUE *nx, D3DVALUE *ny, D3DVALUE *nz) PURE;
+ STDMETHOD(SetPlane)(THIS_ D3DVALUE px, D3DVALUE py, D3DVALUE pz,
+ D3DVALUE nx, D3DVALUE ny, D3DVALUE nz, DWORD) PURE;
+ STDMETHOD(GetOptions)(THIS_ DWORD *flags) PURE;
+ STDMETHOD(SetOptions)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMShadow2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMShadow2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMShadow2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMShadow2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMShadow2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMShadow2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMShadow2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMShadow2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g) (p)->lpVtbl->Init(p,a,b,c,d,e,f,g)
+/*** IDirect3DRMShadow2 methods ***/
+#define IDirect3DRMShadow2_GetVisual(p,a) (p)->lpVtbl->GetVisual(p,a)
+#define IDirect3DRMShadow2_SetVisual(p,a,b) (p)->lpVtbl->SetVisual(p,a,b)
+#define IDirect3DRMShadow2_GetLight(p,a) (p)->lpVtbl->GetLight(p,a)
+#define IDirect3DRMShadow2_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)
+#define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f) (p)->lpVtbl->GetPlane(p,a,b,c,d,e,f)
+#define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f) (p)->lpVtbl->SetPlane(p,a,b,c,d,e,f)
+#define IDirect3DRMShadow2_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a)
+#define IDirect3DRMShadow2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMShadow2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMShadow2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMShadow2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMShadow2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMShadow2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMShadow2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMShadow2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMShadow2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMShadow2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMShadow2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMShadow2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMShadow methods ***/
+#define IDirect3DRMShadow2_Init(p,a,b,c,d,e,f,g) (p)->Init(a,b,c,d,e,f,g)
+/*** IDirect3DRMShadow2 methods ***/
+#define IDirect3DRMShadow2_GetVisual(p,a) (p)->GetVisual(a)
+#define IDirect3DRMShadow2_SetVisual(p,a,b) (p)->SetVisual(a,b)
+#define IDirect3DRMShadow2_GetLight(p,a) (p)->GetLight(a)
+#define IDirect3DRMShadow2_SetLight(p,a,b) (p)->SetLight(a,b)
+#define IDirect3DRMShadow2_GetPlane(p,a,b,c,d,e,f) (p)->GetPlane(a,b,c,d,e,f)
+#define IDirect3DRMShadow2_SetPlane(p,a,b,c,d,e,f) (p)->SetPlane(a,b,c,d,e,f)
+#define IDirect3DRMShadow2_GetOptions(p,a) (p)->GetOptions(a)
+#define IDirect3DRMShadow2_SetOptions(p,a) (p)->SetOptions(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFace interface
+ */
+#define INTERFACE IDirect3DRMFace
+DECLARE_INTERFACE_(IDirect3DRMFace,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMFace methods ***/
+ STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
+ STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
+ STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
+ STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+ STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
+ STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture **texture) PURE;
+ STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial **material) PURE;
+ STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+ STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
+ STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
+ STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFace_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFace_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFace_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFace_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFace_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFace_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFace_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFace_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFace_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFace_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b) (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b)
+#define IDirect3DRMFace_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFace_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFace_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFace_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFace_GetVertex(p,a,b,c) (p)->lpVtbl->GetVertex(p,a,b,c)
+#define IDirect3DRMFace_GetVertices(p,a,b,c) (p)->lpVtbl->GetVertices(p,a,b,c)
+#define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFace_GetNormal(p,a) (p)->lpVtbl->GetNormal(p,a)
+#define IDirect3DRMFace_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFace_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMFace_GetVertexIndex(p,a) (p)->lpVtbl->GetVertexIndex(p,a)
+#define IDirect3DRMFace_GetTextureCoordinateIndex(p,a) (p)->lpVtbl->GetTextureCoordinateIndex(p,a)
+#define IDirect3DRMFace_GetColor(p,a) (p)->lpVtbl->GetColor(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFace_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFace_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFace_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMFace_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFace_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFace_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMFace_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMFace_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMFace_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMFace_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c)
+#define IDirect3DRMFace_AddVertexAndNormalIndexed(p,a,b) (p)->AddVertexAndNormalIndexed(a,b)
+#define IDirect3DRMFace_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFace_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMFace_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMFace_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMFace_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFace_GetVertex(p,a,b,c) (p)->GetVertex(a,b,c)
+#define IDirect3DRMFace_GetVertices(p,a,b,c) (p)->GetVertices(a,b,c)
+#define IDirect3DRMFace_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFace_GetNormal(p,a) (p)->GetNormal(a)
+#define IDirect3DRMFace_GetTexture(p,a) (p)->GetTexture(a)
+#define IDirect3DRMFace_GetVertexCount(p) (p)->GetVertexCount()
+#define IDirect3DRMFace_GetVertexIndex(p,a) (p)->GetVertexIndex(a)
+#define IDirect3DRMFace_GetTextureCoordinateIndex(p,a) (p)->GetTextureCoordinateIndex(a)
+#define IDirect3DRMFace_GetColor(p,a) (p)->GetColor(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFace2 interface
+ */
+#define INTERFACE IDirect3DRMFace2
+DECLARE_INTERFACE_(IDirect3DRMFace2,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMFace methods ***/
+ STDMETHOD(AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddVertexAndNormalIndexed)(THIS_ DWORD vertex, DWORD normal) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE, D3DVALUE, D3DVALUE) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+ STDMETHOD(SetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE u, D3DVALUE v) PURE;
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vertex, D3DVECTOR *normal) PURE;
+ STDMETHOD(GetVertices)(THIS_ DWORD *vertex_count, D3DVECTOR *coords, D3DVECTOR *normals);
+ STDMETHOD(GetTextureCoordinates)(THIS_ DWORD vertex, D3DVALUE *u, D3DVALUE *v) PURE;
+ STDMETHOD(GetTextureTopology)(THIS_ BOOL *wrap_u, BOOL *wrap_v) PURE;
+ STDMETHOD(GetNormal)(THIS_ D3DVECTOR *) PURE;
+ STDMETHOD(GetTexture)(THIS_ struct IDirect3DRMTexture3 **texture) PURE;
+ STDMETHOD(GetMaterial)(THIS_ struct IDirect3DRMMaterial2 **material) PURE;
+ STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+ STDMETHOD_(int, GetVertexIndex)(THIS_ DWORD which) PURE;
+ STDMETHOD_(int, GetTextureCoordinateIndex)(THIS_ DWORD which) PURE;
+ STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFace2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFace2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFace2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMFace2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMFace2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMFace2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMFace2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMFace2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMFace2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace2_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b) (p)->lpVtbl->AddVertexAndNormalIndexed(p,a,b)
+#define IDirect3DRMFace2_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMFace2_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMFace2_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMFace2_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMFace2_GetVertex(p,a,b,c) (p)->lpVtbl->GetVertex(p,a,b,c)
+#define IDirect3DRMFace2_GetVertices(p,a,b,c) (p)->lpVtbl->GetVertices(p,a,b,c)
+#define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMFace2_GetTextureTopology(p,a,b) (p)->lpVtbl->GetTextureTopology(p,a,b)
+#define IDirect3DRMFace2_GetNormal(p,a) (p)->lpVtbl->GetNormal(p,a)
+#define IDirect3DRMFace2_GetTexture(p,a) (p)->lpVtbl->GetTexture(p,a)
+#define IDirect3DRMFace2_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMFace2_GetVertexIndex(p,a) (p)->lpVtbl->GetVertexIndex(p,a)
+#define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a) (p)->lpVtbl->GetTextureCoordinateIndex(p,a)
+#define IDirect3DRMFace2_GetColor(p,a) (p)->lpVtbl->GetColor(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFace2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFace2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFace2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMFace2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMFace2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMFace2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMFace2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMFace2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMFace2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMFace2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMFace2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMFace methods ***/
+#define IDirect3DRMFace2_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c)
+#define IDirect3DRMFace2_AddVertexAndNormalIndexed(p,a,b) (p)->AddVertexAndNormalIndexed(a,b)
+#define IDirect3DRMFace2_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMFace2_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMFace2_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMFace2_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace2_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMFace2_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMFace2_GetVertex(p,a,b,c) (p)->GetVertex(a,b,c)
+#define IDirect3DRMFace2_GetVertices(p,a,b,c) (p)->GetVertices(a,b,c)
+#define IDirect3DRMFace2_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMFace2_GetTextureTopology(p,a,b) (p)->GetTextureTopology(a,b)
+#define IDirect3DRMFace2_GetNormal(p,a) (p)->GetNormal(a)
+#define IDirect3DRMFace2_GetTexture(p,a) (p)->GetTexture(a)
+#define IDirect3DRMFace2_GetVertexCount(p) (p)->GetVertexCount()
+#define IDirect3DRMFace2_GetVertexIndex(p,a) (p)->GetVertexIndex(a)
+#define IDirect3DRMFace2_GetTextureCoordinateIndex(p,a) (p)->GetTextureCoordinateIndex(a)
+#define IDirect3DRMFace2_GetColor(p,a) (p)->GetColor(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMeshBuilder interface
+ */
+#define INTERFACE IDirect3DRMMeshBuilder
+DECLARE_INTERFACE_(IDirect3DRMMeshBuilder,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMMeshBuilder methods ***/
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
+ STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+ STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
+ STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+ STDMETHOD(GenerateNormals)(THIS) PURE;
+ STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
+ STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;
+ STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE;
+ STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+ STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE;
+ STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,
+ D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;
+ STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+ STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
+ STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
+ STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
+ STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;
+ STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,
+ DWORD *face_data_size, DWORD *face_data) PURE;
+ STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
+ STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+ STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
+ STDMETHOD_(int, GetFaceCount)(THIS) PURE;
+ STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
+ STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMeshBuilder_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMeshBuilder_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMeshBuilder_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMeshBuilder_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMeshBuilder_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMeshBuilder_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMMeshBuilder_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMMeshBuilder_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMeshBuilder_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a)
+#define IDirect3DRMMeshBuilder_SetColorSource(p,a) (p)->lpVtbl->SetColorSource(p,a,b,c)
+#define IDirect3DRMMeshBuilder_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMeshBuilder_GenerateNormals(p) (p)->lpVtbl->GenerateNormals(p)
+#define IDirect3DRMMeshBuilder_GetColorSource(p) (p)->lpVtbl->GetColorSource(p)
+#define IDirect3DRMMeshBuilder_AddMesh(p,a) (p)->lpVtbl->AddMesh(p,a)
+#define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a) (p)->lpVtbl->AddMeshBuilder(p,a)
+#define IDirect3DRMMeshBuilder_AddFrame(p,a) (p)->lpVtbl->AddFrame(p,a)
+#define IDirect3DRMMeshBuilder_AddFace(p,a) (p)->lpVtbl->AddFace(p,a)
+#define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f) (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c) (p)->lpVtbl->ReserveSpace(p,a,b,c)
+#define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMMeshBuilder_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMMeshBuilder_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMMeshBuilder_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMMeshBuilder_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMMeshBuilder_SetPerspective(p,a) (p)->lpVtbl->SetPerspective(p,a)
+#define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d) (p)->lpVtbl->SetVertex(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d) (p)->lpVtbl->SetNormal(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b) (p)->lpVtbl->SetVertexColor(p,a,b)
+#define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d) (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder_GetFaces(p,a) (p)->lpVtbl->GetFaces(p,a)
+#define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f) (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c) (p)->lpVtbl->AddNormal(p,a,b,c)
+#define IDirect3DRMMeshBuilder_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRMMeshBuilder_GetQuality(p) (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMMeshBuilder_GetPerspective(p) (p)->lpVtbl->GetPerspective(p)
+#define IDirect3DRMMeshBuilder_GetFaceCount(p) (p)->lpVtbl->GetFaceCount(p)
+#define IDirect3DRMMeshBuilder_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMMeshBuilder_GetVertexColor(p,a) (p)->lpVtbl->GetVertexColor(p,a)
+#define IDirect3DRMMeshBuilder_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMMeshBuilder_AddRef(p) (p)->AddRef()
+#define IDirect3DRMMeshBuilder_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMMeshBuilder_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMMeshBuilder_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMMeshBuilder_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMMeshBuilder_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMMeshBuilder_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMMeshBuilder_Save(p,a,b,c) (p)->Save(a,b,c)
+#define IDirect3DRMMeshBuilder_Scale(p,a,b,c) (p)->Scale(a,b,c)
+#define IDirect3DRMMeshBuilder_Translate(p,a,b,c) (p)->Translate(a)
+#define IDirect3DRMMeshBuilder_SetColorSource(p,a) (p)->SetColorSource(a,b,c)
+#define IDirect3DRMMeshBuilder_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMMeshBuilder_GenerateNormals(p) (p)->GenerateNormals()
+#define IDirect3DRMMeshBuilder_GetColorSource(p) (p)->GetColorSource()
+#define IDirect3DRMMeshBuilder_AddMesh(p,a) (p)-->AddMesh(a)
+#define IDirect3DRMMeshBuilder_AddMeshBuilder(p,a) (p)->AddMeshBuilder(a)
+#define IDirect3DRMMeshBuilder_AddFrame(p,a) (p)->AddFrame(a)
+#define IDirect3DRMMeshBuilder_AddFace(p,a) (p)->AddFace(a)
+#define IDirect3DRMMeshBuilder_AddFaces(p,a,b,c,d,e,f) (p)->AddFaces(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_ReserveSpace(p,a,b,c) (p)->ReserveSpace(a,b,c)
+#define IDirect3DRMMeshBuilder_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMMeshBuilder_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMMeshBuilder_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMMeshBuilder_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMMeshBuilder_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMMeshBuilder_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMMeshBuilder_SetPerspective(p,a) (p)->SetPerspective(a)
+#define IDirect3DRMMeshBuilder_SetVertex(p,a,b,c,d) (p)->SetVertex(a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetNormal(p,a,b,c,d) (p)->SetNormal(a,b,c,d)
+#define IDirect3DRMMeshBuilder_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder_SetVertexColor(p,a,b) (p)->SetVertexColor(a,b)
+#define IDirect3DRMMeshBuilder_SetVertexColorRGB(p,a,b,c,d) (p)->SetVertexColorRGB(a,b,c,d)
+#define IDirect3DRMMeshBuilder_GetFaces(p,a) (p)->GetFaces(a)
+#define IDirect3DRMMeshBuilder_GetVertices(p,a,b,c,d,e,f) (p)->GetVertices(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c)
+#define IDirect3DRMMeshBuilder_AddNormal(p,a,b,c) (p)->AddNormal(a,b,c)
+#define IDirect3DRMMeshBuilder_CreateFace(p,a) (p)->CreateFace(a)
+#define IDirect3DRMMeshBuilder_GetQuality(p) (p)->GetQuality()
+#define IDirect3DRMMeshBuilder_GetPerspective(p) (p)->GetPerspective()
+#define IDirect3DRMMeshBuilder_GetFaceCount(p) (p)->GetFaceCount()
+#define IDirect3DRMMeshBuilder_GetVertexCount(p) (p)->GetVertexCount()
+#define IDirect3DRMMeshBuilder_GetVertexColor(p,a) (p)->GetVertexColor(a)
+#define IDirect3DRMMeshBuilder_CreateMesh(p,a) (p)->CreateMesh(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMeshBuilder2 interface
+ */
+#define INTERFACE IDirect3DRMMeshBuilder2
+DECLARE_INTERFACE_(IDirect3DRMMeshBuilder2,IDirect3DRMMeshBuilder)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMMeshBuilder methods ***/
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
+ STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+ STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
+ STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+ STDMETHOD(GenerateNormals)(THIS) PURE;
+ STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
+ STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;
+ STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder *mesh_builder) PURE;
+ STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+ STDMETHOD(AddFace)(THIS_ IDirect3DRMFace *face) PURE;
+ STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,
+ D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;
+ STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture *texture) PURE;
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial *material) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+ STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
+ STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
+ STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
+ STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;
+ STDMETHOD(GetVertices)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,
+ DWORD *face_data_size, DWORD *face_data) PURE;
+ STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
+ STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace **face) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+ STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
+ STDMETHOD_(int, GetFaceCount)(THIS) PURE;
+ STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
+ STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+ /*** IDirect3DRMMeshBuilder2 methods ***/
+ STDMETHOD(GenerateNormals2)(THIS_ D3DVALUE crease, DWORD flags) PURE;
+ STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace **face) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMeshBuilder2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMeshBuilder2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMeshBuilder2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMeshBuilder2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMeshBuilder2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMeshBuilder2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMMeshBuilder2_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a)
+#define IDirect3DRMMeshBuilder2_SetColorSource(p,a) (p)->lpVtbl->SetColorSource(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMeshBuilder2_GenerateNormals(p) (p)->lpVtbl->GenerateNormals(p)
+#define IDirect3DRMMeshBuilder2_GetColorSource(p) (p)->lpVtbl->GetColorSource(p)
+#define IDirect3DRMMeshBuilder2_AddMesh(p,a) (p)->lpVtbl->AddMesh(p,a)
+#define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a) (p)->lpVtbl->AddMeshBuilder(p,a)
+#define IDirect3DRMMeshBuilder2_AddFrame(p,a) (p)->lpVtbl->AddFrame(p,a)
+#define IDirect3DRMMeshBuilder2_AddFace(p,a) (p)->lpVtbl->AddFace(p,a)
+#define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f) (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c) (p)->lpVtbl->ReserveSpace(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMMeshBuilder2_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMMeshBuilder2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMMeshBuilder2_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMMeshBuilder2_SetPerspective(p,a) (p)->lpVtbl->SetPerspective(p,a)
+#define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d) (p)->lpVtbl->SetVertex(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d) (p)->lpVtbl->SetNormal(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b) (p)->lpVtbl->SetVertexColor(p,a,b)
+#define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d) (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder2_GetFaces(p,a) (p)->lpVtbl->GetFaces(p,a)
+#define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f) (p)->lpVtbl->GetVertices(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c) (p)->lpVtbl->AddNormal(p,a,b,c)
+#define IDirect3DRMMeshBuilder2_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRMMeshBuilder2_GetQuality(p) (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMMeshBuilder2_GetPerspective(p) (p)->lpVtbl->GetPerspective(p)
+#define IDirect3DRMMeshBuilder2_GetFaceCount(p) (p)->lpVtbl->GetFaceCount(p)
+#define IDirect3DRMMeshBuilder2_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMMeshBuilder2_GetVertexColor(p,a) (p)->lpVtbl->GetVertexColor(p,a)
+#define IDirect3DRMMeshBuilder2_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+/*** IDirect3DRMMeshBuilder2 methods ***/
+#define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b) (p)->lpVtbl->GenerateNormals2(p,a,b)
+#define IDirect3DRMMeshBuilder2_GetFace(p,a,b) (p)->lpVtbl->GetFace(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMMeshBuilder2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMMeshBuilder2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMMeshBuilder2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMMeshBuilder2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMMeshBuilder2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMMeshBuilder2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMMeshBuilder2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMMeshBuilder methods ***/
+#define IDirect3DRMMeshBuilder2_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMMeshBuilder2_Save(p,a,b,c) (p)->Save(a,b,c)
+#define IDirect3DRMMeshBuilder2_Scale(p,a,b,c) (p)->Scale(a,b,c)
+#define IDirect3DRMMeshBuilder2_Translate(p,a,b,c) (p)->Translate(a)
+#define IDirect3DRMMeshBuilder2_SetColorSource(p,a) (p)->SetColorSource(a,b,c)
+#define IDirect3DRMMeshBuilder2_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMMeshBuilder2_GenerateNormals(p) (p)->GenerateNormals()
+#define IDirect3DRMMeshBuilder2_GetColorSource(p) (p)->GetColorSource()
+#define IDirect3DRMMeshBuilder2_AddMesh(p,a) (p)-->AddMesh(a)
+#define IDirect3DRMMeshBuilder2_AddMeshBuilder(p,a) (p)->AddMeshBuilder(a)
+#define IDirect3DRMMeshBuilder2_AddFrame(p,a) (p)->AddFrame(a)
+#define IDirect3DRMMeshBuilder2_AddFace(p,a) (p)->AddFace(a)
+#define IDirect3DRMMeshBuilder2_AddFaces(p,a,b,c,d,e,f) (p)->AddFaces(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_ReserveSpace(p,a,b,c) (p)->ReserveSpace(a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMMeshBuilder2_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMMeshBuilder2_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMMeshBuilder2_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMMeshBuilder2_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMMeshBuilder2_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMMeshBuilder2_SetPerspective(p,a) (p)->SetPerspective(a)
+#define IDirect3DRMMeshBuilder2_SetVertex(p,a,b,c,d) (p)->SetVertex(a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetNormal(p,a,b,c,d) (p)->SetNormal(a,b,c,d)
+#define IDirect3DRMMeshBuilder2_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder2_SetVertexColor(p,a,b) (p)->SetVertexColor(a,b)
+#define IDirect3DRMMeshBuilder2_SetVertexColorRGB(p,a,b,c,d) (p)->SetVertexColorRGB(a,b,c,d)
+#define IDirect3DRMMeshBuilder2_GetFaces(p,a) (p)->GetFaces(a)
+#define IDirect3DRMMeshBuilder2_GetVertices(p,a,b,c,d,e,f) (p)->GetVertices(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder2_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder2_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c)
+#define IDirect3DRMMeshBuilder2_AddNormal(p,a,b,c) (p)->AddNormal(a,b,c)
+#define IDirect3DRMMeshBuilder2_CreateFace(p,a) (p)->CreateFace(a)
+#define IDirect3DRMMeshBuilder2_GetQuality(p) (p)->GetQuality()
+#define IDirect3DRMMeshBuilder2_GetPerspective(p) (p)->GetPerspective()
+#define IDirect3DRMMeshBuilder2_GetFaceCount(p) (p)->GetFaceCount()
+#define IDirect3DRMMeshBuilder2_GetVertexCount(p) (p)->GetVertexCount()
+#define IDirect3DRMMeshBuilder2_GetVertexColor(p,a) (p)->GetVertexColor(a)
+#define IDirect3DRMMeshBuilder2_CreateMesh(p,a) (p)->CreateMesh(a)
+/*** IDirect3DRMMeshBuilder2 methods ***/
+#define IDirect3DRMMeshBuilder2_GenerateNormals2(p,a,b) (p)->GenerateNormals2(a,b)
+#define IDirect3DRMMeshBuilder2_GetFace(p,a,b) (p)->GetFace(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMeshBuilder3 interface
+ */
+#define INTERFACE IDirect3DRMMeshBuilder3
+DECLARE_INTERFACE_(IDirect3DRMMeshBuilder3,IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMMeshBuilder3 methods ***/
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) PURE;
+ STDMETHOD(Save)(THIS_ const char *filename, D3DRMXOFFORMAT, D3DRMSAVEOPTIONS save) PURE;
+ STDMETHOD(Scale)(THIS_ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) PURE;
+ STDMETHOD(Translate)(THIS_ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz) PURE;
+ STDMETHOD(SetColorSource)(THIS_ D3DRMCOLORSOURCE) PURE;
+ STDMETHOD(GetBox)(THIS_ D3DRMBOX *) PURE;
+ STDMETHOD(GenerateNormals)(THIS_ D3DVALUE crease, DWORD flags) PURE;
+ STDMETHOD_(D3DRMCOLORSOURCE, GetColorSource)(THIS) PURE;
+ STDMETHOD(AddMesh)(THIS_ IDirect3DRMMesh *mesh) PURE;
+ STDMETHOD(AddMeshBuilder)(THIS_ IDirect3DRMMeshBuilder3 *mesh_builder, DWORD flags) PURE;
+ STDMETHOD(AddFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE;
+ STDMETHOD(AddFace)(THIS_ IDirect3DRMFace2 *face) PURE;
+ STDMETHOD(AddFaces)(THIS_ DWORD vertex_count, D3DVECTOR *vertices, DWORD normal_count,
+ D3DVECTOR *normals, DWORD *face_data, struct IDirect3DRMFaceArray **array) PURE;
+ STDMETHOD(ReserveSpace)(THIS_ DWORD vertex_Count, DWORD normal_count, DWORD face_count) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetTexture)(THIS_ struct IDirect3DRMTexture3 *texture) PURE;
+ STDMETHOD(SetMaterial)(THIS_ struct IDirect3DRMMaterial2 *material) PURE;
+ STDMETHOD(SetTextureTopology)(THIS_ BOOL wrap_u, BOOL wrap_v) PURE;
+ STDMETHOD(SetQuality)(THIS_ D3DRMRENDERQUALITY) PURE;
+ STDMETHOD(SetPerspective)(THIS_ BOOL) PURE;
+ STDMETHOD(SetVertex)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetNormal)(THIS_ DWORD index, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(SetTextureCoordinates)(THIS_ DWORD index, D3DVALUE u, D3DVALUE v) PURE;
+ STDMETHOD(SetVertexColor)(THIS_ DWORD index, D3DCOLOR) PURE;
+ STDMETHOD(SetVertexColorRGB)(THIS_ DWORD index, D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(GetFaces)(THIS_ struct IDirect3DRMFaceArray **array) PURE;
+ STDMETHOD(GetGeometry)(THIS_ DWORD *vcount, D3DVECTOR *vertices, DWORD *ncount, D3DVECTOR *normals,
+ DWORD *face_data_size, DWORD *face_data) PURE;
+ STDMETHOD(GetTextureCoordinates)(THIS_ DWORD index, D3DVALUE *u, D3DVALUE *v) PURE;
+ STDMETHOD_(int, AddVertex)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD_(int, AddNormal)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(CreateFace)(THIS_ IDirect3DRMFace2 **face) PURE;
+ STDMETHOD_(D3DRMRENDERQUALITY, GetQuality)(THIS) PURE;
+ STDMETHOD_(BOOL, GetPerspective)(THIS) PURE;
+ STDMETHOD_(int, GetFaceCount)(THIS) PURE;
+ STDMETHOD_(int, GetVertexCount)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetVertexColor)(THIS_ DWORD index) PURE;
+ STDMETHOD(CreateMesh)(THIS_ IDirect3DRMMesh **mesh) PURE;
+ STDMETHOD(GetFace)(THIS_ DWORD index, IDirect3DRMFace2 **face) PURE;
+ STDMETHOD(GetVertex)(THIS_ DWORD index, D3DVECTOR *vector) PURE;
+ STDMETHOD(GetNormal)(THIS_ DWORD index, D3DVECTOR *vector) PURE;
+ STDMETHOD(DeleteVertices)(THIS_ DWORD IndexFirst, DWORD count) PURE;
+ STDMETHOD(DeleteNormals)(THIS_ DWORD IndexFirst, DWORD count) PURE;
+ STDMETHOD(DeleteFace)(THIS_ IDirect3DRMFace2 *face) PURE;
+ STDMETHOD(Empty)(THIS_ DWORD flags) PURE;
+ STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;
+ STDMETHOD(AddFacesIndexed)(THIS_ DWORD flags, DWORD *pvIndices, DWORD *pIndexFirst, DWORD *pCount) PURE;
+ STDMETHOD(CreateSubMesh)(THIS_ IUnknown **mesh) PURE;
+ STDMETHOD(GetParentMesh)(THIS_ DWORD flags, IUnknown **parent) PURE;
+ STDMETHOD(GetSubMeshes)(THIS_ DWORD *count, IUnknown **meshes) PURE;
+ STDMETHOD(DeleteSubMesh)(THIS_ IUnknown *mesh) PURE;
+ STDMETHOD(Enable)(THIS_ DWORD) PURE;
+ STDMETHOD(GetEnable)(THIS_ DWORD *) PURE;
+ STDMETHOD(AddTriangles)(THIS_ DWORD flags, DWORD format, DWORD vertex_count, void *data) PURE;
+ STDMETHOD(SetVertices)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE;
+ STDMETHOD(GetVertices)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE;
+ STDMETHOD(SetNormals)(THIS_ DWORD start_idx, DWORD count, D3DVECTOR *v) PURE;
+ STDMETHOD(GetNormals)(THIS_ DWORD start_idx, DWORD *count, D3DVECTOR *v) PURE;
+ STDMETHOD_(int, GetNormalCount)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMeshBuilder3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMeshBuilder3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMeshBuilder3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMeshBuilder3_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMeshBuilder3_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMeshBuilder3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+
+/*** IDirect3DRMMeshBuilder3 methods ***/
+#define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)
+#define IDirect3DRMMeshBuilder3_Save(p,a,b,c) (p)->lpVtbl->Save(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a)
+#define IDirect3DRMMeshBuilder3_SetColorSource(p,a) (p)->lpVtbl->SetColorSource(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetBox(p,a) (p)->lpVtbl->GetBox(p,a)
+#define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b) (p)->lpVtbl->GenerateNormals(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetColorSource(p) (p)->lpVtbl->GetColorSource(p)
+#define IDirect3DRMMeshBuilder3_AddMesh(p,a) (p)->lpVtbl->AddMesh(p,a)
+#define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a) (p)->lpVtbl->AddMeshBuilder(p,a)
+#define IDirect3DRMMeshBuilder3_AddFrame(p,a) (p)->lpVtbl->AddFrame(p,a)
+#define IDirect3DRMMeshBuilder3_AddFace(p,a) (p)->lpVtbl->AddFace(p,a)
+#define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f) (p)->lpVtbl->AddFaces(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c) (p)->lpVtbl->ReserveSpace(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMMeshBuilder3_SetTexture(p,a) (p)->lpVtbl->SetTexture(p,a)
+#define IDirect3DRMMeshBuilder3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)
+#define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b) (p)->lpVtbl->SetTextureTopology(p,a,b)
+#define IDirect3DRMMeshBuilder3_SetQuality(p,a) (p)->lpVtbl->SetQuality(p,a)
+#define IDirect3DRMMeshBuilder3_SetPerspective(p,a) (p)->lpVtbl->SetPerspective(p,a)
+#define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d) (p)->lpVtbl->SetVertex(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d) (p)->lpVtbl->SetNormal(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c) (p)->lpVtbl->SetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b) (p)->lpVtbl->SetVertexColor(p,a,b)
+#define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d) (p)->lpVtbl->SetVertexColorRGB(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_GetFaces(p,a) (p)->lpVtbl->GetFaces(p,a)
+#define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f) (p)->lpVtbl->GetGeometry(p,a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c) (p)->lpVtbl->GetTextureCoordinates(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c) (p)->lpVtbl->AddVertex(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c) (p)->lpVtbl->AddNormal(p,a,b,c)
+
+#define IDirect3DRMMeshBuilder3_CreateFace(p,a) (p)->lpVtbl->CreateFace(p,a)
+#define IDirect3DRMMeshBuilder3_GetQuality(p) (p)->lpVtbl->GetQuality(p)
+#define IDirect3DRMMeshBuilder3_GetPerspective(p) (p)->lpVtbl->GetPerspective(p)
+
+#define IDirect3DRMMeshBuilder3_GetFaceCount(p) (p)->lpVtbl->GetFaceCount(p)
+#define IDirect3DRMMeshBuilder3_GetVertexCount(p) (p)->lpVtbl->GetVertexCount(p)
+#define IDirect3DRMMeshBuilder3_GetVertexColor(p,a) (p)->lpVtbl->GetVertexColor(p,a)
+#define IDirect3DRMMeshBuilder3_CreateMesh(p,a) (p)->lpVtbl->CreateMesh(p,a)
+#define IDirect3DRMMeshBuilder3_GetFace(p,a,b) (p)->lpVtbl->GetFace(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetVertex(p,a,b) (p)->lpVtbl->GetVertex(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetNormal(p,a,b) (p)->lpVtbl->GetNormal(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b) (p)->lpVtbl->DeleteVertices(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b) (p)->lpVtbl->DeleteNormals(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteFace(p,a) (p)->lpVtbl->DeleteFace(p,a)
+#define IDirect3DRMMeshBuilder3_Empty(p,a) (p)->lpVtbl->Empty(p,a)
+#define IDirect3DRMMeshBuilder3_Optimize(p,a) (p)->lpVtbl->Optimize(p,a)
+#define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d) (p)->lpVtbl->AddFacesIndexed(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a) (p)->lpVtbl->CreateSubMesh(p,a)
+#define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b) (p)->lpVtbl->GetParentMesh(p,a,b)
+#define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b) (p)->lpVtbl->GetSubMeshes(p,a,b)
+#define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a) (p)->lpVtbl->DeleteSubMesh(p,a)
+#define IDirect3DRMMeshBuilder3_Enable(p,a) (p)->lpVtbl->Enable(p,a)
+#define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d) (p)->lpVtbl->AddTriangles(p,a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c) (p)->lpVtbl->SetVertices(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c) (p)->lpVtbl->GetVertices(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c) (p)->lpVtbl->SetNormals(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c) (p)->lpVtbl->GetNormals(p,a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormalCount(p) (p)->lpVtbl->GetNormalCount(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMeshBuilder3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMMeshBuilder3_AddRef(p) (p)->AddRef()
+#define IDirect3DRMMeshBuilder3_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMeshBuilder3_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMMeshBuilder3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMeshBuilder3_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMMeshBuilder3_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMMeshBuilder3_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMMeshBuilder3_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMMeshBuilder3_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMMeshBuilder3 methods ***/
+#define IDirect3DRMMeshBuilder3_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)
+#define IDirect3DRMMeshBuilder3_Save(p,a,b,c) (p)->Save(a,b,c)
+#define IDirect3DRMMeshBuilder3_Scale(p,a,b,c) (p)->Scale(a,b,c)
+#define IDirect3DRMMeshBuilder3_Translate(p,a,b,c) (p)->Translate(a)
+#define IDirect3DRMMeshBuilder3_SetColorSource(p,a) (p)->SetColorSource(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetBox(p,a) (p)->GetBox(a)
+#define IDirect3DRMMeshBuilder3_GenerateNormals(p,a,b) (p)->GenerateNormals(a,b)
+#define IDirect3DRMMeshBuilder3_GetColorSource(p) (p)->GetColorSource()
+#define IDirect3DRMMeshBuilder3_AddMesh(p,a) (p)-->AddMesh(a)
+#define IDirect3DRMMeshBuilder3_AddMeshBuilder(p,a) (p)->AddMeshBuilder(a)
+#define IDirect3DRMMeshBuilder3_AddFrame(p,a) (p)->AddFrame(a)
+#define IDirect3DRMMeshBuilder3_AddFace(p,a) (p)->AddFace(a)
+#define IDirect3DRMMeshBuilder3_AddFaces(p,a,b,c,d,e,f) (p)->AddFaces(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_ReserveSpace(p,a,b,c) (p)->ReserveSpace(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMMeshBuilder3_SetTexture(p,a) (p)->SetTexture(a)
+#define IDirect3DRMMeshBuilder3_SetMaterial(p,a) (p)->SetMaterial(a)
+#define IDirect3DRMMeshBuilder3_SetTextureTopology(p,a,b) (p)->SetTextureTopology(a,b)
+#define IDirect3DRMMeshBuilder3_SetQuality(p,a) (p)->SetQuality(a)
+#define IDirect3DRMMeshBuilder3_SetPerspective(p,a) (p)->SetPerspective(a)
+#define IDirect3DRMMeshBuilder3_SetVertex(p,a,b,c,d) (p)->SetVertex(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetNormal(p,a,b,c,d) (p)->SetNormal(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetTextureCoordinates(p,a,b,c) (p)->SetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetVertexColor(p,a,b) (p)->SetVertexColor(a,b)
+#define IDirect3DRMMeshBuilder3_SetVertexColorRGB(p,a,b,c,d) (p)->SetVertexColorRGB(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_GetFaces(p,a) (p)->GetFaces(a)
+#define IDirect3DRMMeshBuilder3_GetGeometry(p,a,b,c,d,e,f) (p)->GetGeometry(a,b,c,d,e,f)
+#define IDirect3DRMMeshBuilder3_GetTextureCoordinates(p,a,b,c) (p)->GetTextureCoordinates(a,b,c)
+#define IDirect3DRMMeshBuilder3_AddVertex(p,a,b,c) (p)->AddVertex(a,b,c)
+#define IDirect3DRMMeshBuilder3_AddNormal(p,a,b,c) (p)->AddNormal(a,b,c)
+#define IDirect3DRMMeshBuilder3_CreateFace(p,a) (p)->CreateFace(a)
+
+#define IDirect3DRMMeshBuilder3_GetQuality(p) (p)->GetQuality()
+#define IDirect3DRMMeshBuilder3_GetPerspective(p) (p)->GetPerspective()
+#define IDirect3DRMMeshBuilder3_GetFaceCount(p) (p)->GetFaceCount()
+#define IDirect3DRMMeshBuilder3_GetVertexCount(p) (p)->GetVertexCount()
+#define IDirect3DRMMeshBuilder3_GetVertexColor(p,a) (p)->GetVertexColor(a)
+#define IDirect3DRMMeshBuilder3_CreateMesh(p,a) (p)->CreateMesh(a)
+#define IDirect3DRMMeshBuilder3_GetFace(p,a,b) (p)->GetFace(a,b)
+#define IDirect3DRMMeshBuilder3_GetVertex(p,a,b) (p)->GetVertex(a,b)
+#define IDirect3DRMMeshBuilder3_GetNormal(p,a,b) (p)->GetNormal(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteVertices(p,a,b) (p)->DeleteVertices(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteNormals(p,a,b) (p)->DeleteNormals(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteFace(p,a) (p)->DeleteFace(a)
+#define IDirect3DRMMeshBuilder3_Empty(p,a) (p)->Empty(a)
+#define IDirect3DRMMeshBuilder3_Optimize(p,a) (p)->Optimize(a)
+#define IDirect3DRMMeshBuilder3_AddFacesIndexed(p,a,b,c,d) (p)->AddFacesIndexed(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_CreateSubMesh(p,a) (p)->CreateSubMesh(a)
+#define IDirect3DRMMeshBuilder3_GetParentMesh(p,a,b) (p)->GetParentMesh(a,b)
+#define IDirect3DRMMeshBuilder3_GetSubMeshes(p,a,b) (p)->GetSubMeshes(a,b)
+#define IDirect3DRMMeshBuilder3_DeleteSubMesh(p,a) (p)->DeleteSubMesh(a)
+#define IDirect3DRMMeshBuilder3_Enable(p,a) (p)->Enable(a)
+#define IDirect3DRMMeshBuilder3_AddTriangles(p,a,b,c,d) (p)->AddTriangles(a,b,c,d)
+#define IDirect3DRMMeshBuilder3_SetVertices(p,a,b,c) (p)->SetVertices(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetVertices(p,a,b,c) (p)->GetVertices(a,b,c)
+#define IDirect3DRMMeshBuilder3_SetNormals(p,a,b,c) (p)->SetNormals(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormals(p,a,b,c) (p)->GetNormals(a,b,c)
+#define IDirect3DRMMeshBuilder3_GetNormalCount(p) (p)->GetNormalCount()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMLight interface
+ */
+#define INTERFACE IDirect3DRMLight
+DECLARE_INTERFACE_(IDirect3DRMLight,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMLight methods ***/
+ STDMETHOD(SetType)(THIS_ D3DRMLIGHTTYPE) PURE;
+ STDMETHOD(SetColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(SetColorRGB)(THIS_ D3DVALUE red, D3DVALUE green, D3DVALUE blue) PURE;
+ STDMETHOD(SetRange)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetUmbra)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetPenumbra)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetConstantAttenuation)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetLinearAttenuation)(THIS_ D3DVALUE) PURE;
+ STDMETHOD(SetQuadraticAttenuation)(THIS_ D3DVALUE) PURE;
+ STDMETHOD_(D3DVALUE, GetRange)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetUmbra)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetPenumbra)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetConstantAttenuation)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetLinearAttenuation)(THIS) PURE;
+ STDMETHOD_(D3DVALUE, GetQuadraticAttenuation)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetColor)(THIS) PURE;
+ STDMETHOD_(D3DRMLIGHTTYPE, GetType)(THIS) PURE;
+ STDMETHOD(SetEnableFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+ STDMETHOD(GetEnableFrame)(THIS_ IDirect3DRMFrame **frame) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMLight_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMLight_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMLight_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMLight_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMLight_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMLight_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMLight_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMLight_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMLight_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMLight_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMLight methods ***/
+#define IDirect3DRMLight_SetType(p,a) (p)->lpVtbl->SetType(p,a)
+#define IDirect3DRMLight_SetColor(p,a) (p)->lpVtbl->SetColor(p,a)
+#define IDirect3DRMLight_SetColorRGB(p,a,b,c) (p)->lpVtbl->SetColorRGB(p,a,b,c)
+#define IDirect3DRMLight_SetRange(p,a) (p)->lpVtbl->SetRange(p,a)
+#define IDirect3DRMLight_SetUmbra(p,a) (p)->lpVtbl->SetUmbra(p,a)
+#define IDirect3DRMLight_SetPenumbra(p,a) (p)->lpVtbl->SetPenumbra(p,a)
+#define IDirect3DRMLight_SetConstantAttenuation(p,a) (p)->lpVtbl->SetConstantAttenuation(p,a)
+#define IDirect3DRMLight_SetLinearAttenuation(p,a) (p)->lpVtbl->SetLinearAttenuation(p,a)
+#define IDirect3DRMLight_SetQuadraticAttenuation(p,a) (p)->lpVtbl->SetQuadraticAttenuation(p,a)
+#define IDirect3DRMLight_GetRange(p) (p)->lpVtbl->GetRange(p)
+#define IDirect3DRMLight_GetUmbra(p) (p)->lpVtbl->GetUmbra(p)
+#define IDirect3DRMLight_GetPenumbra(p) (p)->lpVtbl->GetPenumbra(p)
+#define IDirect3DRMLight_GetConstantAttenuation(p) (p)->lpVtbl->GetConstantAttenuation(p)
+#define IDirect3DRMLight_GetLinearAttenuation(p) (p)->lpVtbl->GetLinearAttenuation(p)
+#define IDirect3DRMLight_GetQuadraticAttenuation(p) (p)->lpVtbl->GetQuadraticAttenuation(p)
+#define IDirect3DRMLight_GetColor(p) (p)->lpVtbl->GetColor(p)
+#define IDirect3DRMLight_GetType(p) (p)->lpVtbl->GetType(p)
+#define IDirect3DRMLight_SetEnableFrame(p,a) (p)->lpVtbl->SetEnableFrame(p,a)
+#define IDirect3DRMLight_GetEnableFrame(p,a) (p)->lpVtbl->GetEnableFrame(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMLight_AddRef(p) (p)->AddRef()
+#define IDirect3DRMLight_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMLight_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMLight_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMLight_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMLight_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMLight_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMLight_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMLight_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMLight_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMLight methods ***/
+#define IDirect3DRMLight_SetType(p,a) (p)->SetType(a)
+#define IDirect3DRMLight_SetColor(p,a) (p)->SetColor(a)
+#define IDirect3DRMLight_SetColorRGB(p,a,b,c) (p)->SetColorRGB(a,b,c)
+#define IDirect3DRMLight_SetRange(p,a) (p)->SetRange(a)
+#define IDirect3DRMLight_SetUmbra(p,a) (p)->SetUmbra(a)
+#define IDirect3DRMLight_SetPenumbra(p,a) (p)->SetPenumbra(a)
+#define IDirect3DRMLight_SetConstantAttenuation(p,a) (p)->SetConstantAttenuation(a)
+#define IDirect3DRMLight_SetLinearAttenuation(p,a) (p)->SetLinearAttenuation(a)
+#define IDirect3DRMLight_SetQuadraticAttenuation(p,a) (p)->SetQuadraticAttenuation(a)
+#define IDirect3DRMLight_GetRange(p) (p)->GetRange()
+#define IDirect3DRMLight_GetUmbra(p) (p)->GetUmbra()
+#define IDirect3DRMLight_GetPenumbra(p) (p)->GetPenumbra()
+#define IDirect3DRMLight_GetConstantAttenuation(p) (p)->GetConstantAttenuation()
+#define IDirect3DRMLight_GetLinearAttenuation(p) (p)->GetLinearAttenuation()
+#define IDirect3DRMLight_GetQuadraticAttenuation(p) (p)->GetQuadraticAttenuation()
+#define IDirect3DRMLight_GetColor(p) (p)->GetColor()
+#define IDirect3DRMLight_GetType(p) (p)->GetType()
+#define IDirect3DRMLight_SetEnableFrame(p,a) (p)->SetEnableFrame(a)
+#define IDirect3DRMLight_GetEnableFrame(p,a) (p)->GetEnableFrame(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMTexture interface
+ */
+#define INTERFACE IDirect3DRMTexture
+DECLARE_INTERFACE_(IDirect3DRMTexture, IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMTexture methods ***/
+ STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
+ STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
+ STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
+ STDMETHOD(SetColors)(THIS_ DWORD) PURE;
+ STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
+ STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
+ STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
+ STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
+ STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
+ STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
+ STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+ STDMETHOD_(DWORD, GetColors)(THIS) PURE;
+ STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
+ STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMTexture_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMTexture_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMTexture_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMTexture_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMTexture_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMTexture_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMTexture_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMTexture_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture_InitFromFile(p,a) (p)->lpVtbl->InitFromFile(p,a)
+#define IDirect3DRMTexture_InitFromSurface(p,a) (p)->lpVtbl->InitFromSurface(p,a)
+#define IDirect3DRMTexture_InitFromResource(p,a) (p)->lpVtbl->InitFromResource(p,a)
+#define IDirect3DRMTexture_Changed(p,a,b) (p)->lpVtbl->Changed(p,a,b)
+#define IDirect3DRMTexture_SetColors(p,a) (p)->lpVtbl->SetColors(p,a)
+#define IDirect3DRMTexture_SetShades(p,a) (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMTexture_SetDecalSize(p,a,b) (p)->lpVtbl->SetDecalSize(p,a,b)
+#define IDirect3DRMTexture_SetDecalOrigin(p,a,b) (p)->lpVtbl->SetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture_SetDecalScale(p,a) (p)->lpVtbl->SetDecalScale(p,a)
+#define IDirect3DRMTexture_SetDecalTransparency(p,a) (p)->lpVtbl->SetDecalTransparency(p,a)
+#define IDirect3DRMTexture_SetDecalTransparencyColor(p,a) (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture_GetDecalSize(p,a,b) (p)->lpVtbl->GetDecalSize(p,a,b)
+#define IDirect3DRMTexture_GetDecalOrigin(p,a,b) (p)->lpVtbl->GetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture_GetImage(p) (p)->lpVtbl->GetImage(p)
+#define IDirect3DRMTexture_GetShades(p) (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMTexture_GetColors(p) (p)->lpVtbl->GetColors(p)
+#define IDirect3DRMTexture_GetDecalScale(p) (p)->lpVtbl->GetDecalScale(p)
+#define IDirect3DRMTexture_GetDecalTransparency(p) (p)->lpVtbl->GetDecalTransparency(p)
+#define IDirect3DRMTexture_GetDecalTransparencyColor(p) (p)->lpVtbl->GetDecalTransparencyColor(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMTexture_AddRef(p) (p)->AddRef()
+#define IDirect3DRMTexture_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMTexture_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMTexture_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMTexture_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMTexture_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMTexture_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMTexture_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMTexture_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture_InitFromFile(p,a) (p)->InitFromFile(a)
+#define IDirect3DRMTexture_InitFromSurface(p,a) (p)->InitFromSurface(a)
+#define IDirect3DRMTexture_InitFromResource(p,a) (p)->InitFromResource(a)
+#define IDirect3DRMTexture_Changed(p,a,b) (p)->Changed(a,b)
+#define IDirect3DRMTexture_SetColors(p,a) (p)->SetColors(a)
+#define IDirect3DRMTexture_SetShades(p,a) (p)->SetShades(a)
+#define IDirect3DRMTexture_SetDecalSize(p,a,b) (p)->SetDecalSize(a,b)
+#define IDirect3DRMTexture_SetDecalOrigin(p,a,b) (p)->SetDecalOrigin(a,b)
+#define IDirect3DRMTexture_SetDecalScale(p,a) (p)->SetDecalScale(a)
+#define IDirect3DRMTexture_SetDecalTransparency(p,a) (p)->SetDecalTransparency(a)
+#define IDirect3DRMTexture_SetDecalTransparencyColor(p,a) (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture_GetDecalSize(p,a,b) (p)->GetDecalSize(a,b)
+#define IDirect3DRMTexture_GetDecalOrigin(p,a,b) (p)->GetDecalOrigin(a,b)
+#define IDirect3DRMTexture_GetImage(p) (p)->GetImage()
+#define IDirect3DRMTexture_GetShades(p) (p)->GetShades()
+#define IDirect3DRMTexture_GetColors(p) (p)->GetColors()
+#define IDirect3DRMTexture_GetDecalScale(p) (p)->GetDecalScale()
+#define IDirect3DRMTexture_GetDecalTransparency(p) (p)->GetDecalTransparency()
+#define IDirect3DRMTexture_GetDecalTransparencyColor(p) (p)->GetDecalTransparencyColor()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMTexture2 interface
+ */
+#define INTERFACE IDirect3DRMTexture2
+DECLARE_INTERFACE_(IDirect3DRMTexture2, IDirect3DRMTexture)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMTexture methods ***/
+ STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
+ STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
+ STDMETHOD(Changed)(THIS_ BOOL pixels, BOOL palette) PURE;
+ STDMETHOD(SetColors)(THIS_ DWORD) PURE;
+ STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
+ STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
+ STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
+ STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
+ STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
+ STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
+ STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+ STDMETHOD_(DWORD, GetColors)(THIS) PURE;
+ STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
+ STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
+ /*** IDirect3DRMTexture2 methods ***/
+ STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE;
+ STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE;
+ STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMTexture2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMTexture2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMTexture2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMTexture2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMTexture2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMTexture2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMTexture2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMTexture2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture2_InitFromFile(p,a) (p)->lpVtbl->InitFromFile(p,a)
+#define IDirect3DRMTexture2_InitFromSurface(p,a) (p)->lpVtbl->InitFromSurface(p,a)
+#define IDirect3DRMTexture2_InitFromResource(p,a) (p)->lpVtbl->InitFromResource(p,a)
+#define IDirect3DRMTexture2_Changed(p,a,b) (p)->lpVtbl->Changed(p,a,b)
+#define IDirect3DRMTexture2_SetColors(p,a) (p)->lpVtbl->SetColors(p,a)
+#define IDirect3DRMTexture2_SetShades(p,a) (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMTexture2_SetDecalSize(p,a,b) (p)->lpVtbl->SetDecalSize(p,a,b)
+#define IDirect3DRMTexture2_SetDecalOrigin(p,a,b) (p)->lpVtbl->SetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture2_SetDecalScale(p,a) (p)->lpVtbl->SetDecalScale(p,a)
+#define IDirect3DRMTexture2_SetDecalTransparency(p,a) (p)->lpVtbl->SetDecalTransparency(p,a)
+#define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a) (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture2_GetDecalSize(p,a,b) (p)->lpVtbl->GetDecalSize(p,a,b)
+#define IDirect3DRMTexture2_GetDecalOrigin(p,a,b) (p)->lpVtbl->GetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture2_GetImage(p) (p)->lpVtbl->GetImage(p)
+#define IDirect3DRMTexture2_GetShades(p) (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMTexture2_GetColors(p) (p)->lpVtbl->GetColors(p)
+#define IDirect3DRMTexture2_GetDecalScale(p) (p)->lpVtbl->GetDecalScale(p)
+#define IDirect3DRMTexture2_GetDecalTransparency(p) (p)->lpVtbl->GetDecalTransparency(p)
+#define IDirect3DRMTexture2_GetDecalTransparencyColor(p) (p)->lpVtbl->GetDecalTransparencyColor(p)
+/*** IDirect3DRMTexture2 methods ***/
+#define IDirect3DRMTexture2_InitFromImage(p,a) (p)->lpVtbl->InitFromImage(p,a)
+#define IDirect3DRMTexture2_InitFromResource2(p,a,b,c) (p)->lpVtbl->InitFromResource2(p,a,b,c)
+#define IDirect3DRMTexture2_GenerateMIPMap(p,a) (p)->lpVtbl->GenerateMIPMap(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMTexture2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMTexture2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMTexture2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMTexture2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMTexture2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMTexture2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMTexture2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMTexture2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMTexture2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMTexture methods ***/
+#define IDirect3DRMTexture2_InitFromFile(p,a) (p)->InitFromFile(a)
+#define IDirect3DRMTexture2_InitFromSurface(p,a) (p)->InitFromSurface(a)
+#define IDirect3DRMTexture2_InitFromResource(p,a) (p)->InitFromResource(a)
+#define IDirect3DRMTexture2_Changed(p,a,b) (p)->Changed(a,b)
+#define IDirect3DRMTexture2_SetColors(p,a) (p)->SetColors(a)
+#define IDirect3DRMTexture2_SetShades(p,a) (p)->SetShades(a)
+#define IDirect3DRMTexture2_SetDecalSize(p,a,b) (p)->SetDecalSize(a,b)
+#define IDirect3DRMTexture2_SetDecalOrigin(p,a,b) (p)->SetDecalOrigin(a,b)
+#define IDirect3DRMTexture2_SetDecalScale(p,a) (p)->SetDecalScale(a)
+#define IDirect3DRMTexture2_SetDecalTransparency(p,a) (p)->SetDecalTransparency(a)
+#define IDirect3DRMTexture2_SetDecalTransparencyColor(p,a) (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture2_GetDecalSize(p,a,b) (p)->GetDecalSize(a,b)
+#define IDirect3DRMTexture2_GetDecalOrigin(p,a,b) (p)->GetDecalOrigin(a,b)
+#define IDirect3DRMTexture2_GetImage(p) (p)->GetImage()
+#define IDirect3DRMTexture2_GetShades(p) (p)->GetShades()
+#define IDirect3DRMTexture2_GetColors(p) (p)->GetColors()
+#define IDirect3DRMTexture2_GetDecalScale(p) (p)->GetDecalScale()
+#define IDirect3DRMTexture2_GetDecalTransparency(p) (p)->GetDecalTransparency()
+#define IDirect3DRMTexture2_GetDecalTransparencyColor(p) (p)->GetDecalTransparencyColor()
+/*** IDirect3DRMTexture2 methods ***/
+#define IDirect3DRMTexture2_InitFromImage(p,a) (p)->InitFromImage(a)
+#define IDirect3DRMTexture2_InitFromResource2(p,a,b,c) (p)->InitFromResource2(a,b,c)
+#define IDirect3DRMTexture2_GenerateMIPMap(p,a) (p)->GenerateMIPMap(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMTexture3 interface
+ */
+#define INTERFACE IDirect3DRMTexture3
+DECLARE_INTERFACE_(IDirect3DRMTexture3, IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMTexture3 methods ***/
+ STDMETHOD(InitFromFile)(THIS_ const char *filename) PURE;
+ STDMETHOD(InitFromSurface)(THIS_ IDirectDrawSurface *surface) PURE;
+ STDMETHOD(InitFromResource)(THIS_ HRSRC) PURE;
+ STDMETHOD(Changed)(THIS_ DWORD flags, DWORD rect_count, RECT *rects) PURE;
+ STDMETHOD(SetColors)(THIS_ DWORD) PURE;
+ STDMETHOD(SetShades)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDecalSize)(THIS_ D3DVALUE width, D3DVALUE height) PURE;
+ STDMETHOD(SetDecalOrigin)(THIS_ LONG x, LONG y) PURE;
+ STDMETHOD(SetDecalScale)(THIS_ DWORD) PURE;
+ STDMETHOD(SetDecalTransparency)(THIS_ BOOL) PURE;
+ STDMETHOD(SetDecalTransparentColor)(THIS_ D3DCOLOR) PURE;
+ STDMETHOD(GetDecalSize)(THIS_ D3DVALUE *width_return, D3DVALUE *height_return) PURE;
+ STDMETHOD(GetDecalOrigin)(THIS_ LONG *x_return, LONG *y_return) PURE;
+ STDMETHOD_(D3DRMIMAGE *, GetImage)(THIS) PURE;
+ STDMETHOD_(DWORD, GetShades)(THIS) PURE;
+ STDMETHOD_(DWORD, GetColors)(THIS) PURE;
+ STDMETHOD_(DWORD, GetDecalScale)(THIS) PURE;
+ STDMETHOD_(BOOL, GetDecalTransparency)(THIS) PURE;
+ STDMETHOD_(D3DCOLOR, GetDecalTransparentColor)(THIS) PURE;
+ STDMETHOD(InitFromImage)(THIS_ D3DRMIMAGE *image) PURE;
+ STDMETHOD(InitFromResource2)(THIS_ HMODULE module, const char *name, const char *type) PURE;
+ STDMETHOD(GenerateMIPMap)(THIS_ DWORD) PURE;
+ STDMETHOD(GetSurface)(THIS_ DWORD flags, IDirectDrawSurface **surface) PURE;
+ STDMETHOD(SetCacheOptions)(THIS_ LONG lImportance, DWORD dwFlags) PURE;
+ STDMETHOD(GetCacheOptions)(THIS_ LONG *importance, DWORD *flags) PURE;
+ STDMETHOD(SetDownsampleCallback)(THIS_ D3DRMDOWNSAMPLECALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetValidationCallback)(THIS_ D3DRMVALIDATIONCALLBACK cb, void *ctx) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMTexture3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMTexture3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture3_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMTexture3_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMTexture3_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMTexture3_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMTexture3_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMTexture3_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMTexture3_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMTexture3 methods ***/
+#define IDirect3DRMTexture3_InitFromFile(p,a) (p)->lpVtbl->InitFromFile(p,a)
+#define IDirect3DRMTexture3_InitFromSurface(p,a) (p)->lpVtbl->InitFromSurface(p,a)
+#define IDirect3DRMTexture3_InitFromResource(p,a) (p)->lpVtbl->InitFromResource(p,a)
+#define IDirect3DRMTexture3_Changed(p,a,b,c) (p)->lpVtbl->Changed(p,a,b,c)
+#define IDirect3DRMTexture3_SetColors(p,a) (p)->lpVtbl->SetColors(p,a)
+#define IDirect3DRMTexture3_SetShades(p,a) (p)->lpVtbl->SetShades(p,a)
+#define IDirect3DRMTexture3_SetDecalSize(p,a,b) (p)->lpVtbl->SetDecalSize(p,a,b)
+#define IDirect3DRMTexture3_SetDecalOrigin(p,a,b) (p)->lpVtbl->SetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture3_SetDecalScale(p,a) (p)->lpVtbl->SetDecalScale(p,a)
+#define IDirect3DRMTexture3_SetDecalTransparency(p,a) (p)->lpVtbl->SetDecalTransparency(p,a)
+#define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a) (p)->lpVtbl->SetDecalTransparentColor(p,a)
+#define IDirect3DRMTexture3_GetDecalSize(p,a,b) (p)->lpVtbl->GetDecalSize(p,a,b)
+#define IDirect3DRMTexture3_GetDecalOrigin(p,a,b) (p)->lpVtbl->GetDecalOrigin(p,a,b)
+#define IDirect3DRMTexture3_GetImage(p) (p)->lpVtbl->GetImage(p)
+#define IDirect3DRMTexture3_GetShades(p) (p)->lpVtbl->GetShades(p)
+#define IDirect3DRMTexture3_GetColors(p) (p)->lpVtbl->GetColors(p)
+#define IDirect3DRMTexture3_GetDecalScale(p) (p)->lpVtbl->GetDecalScale(p)
+#define IDirect3DRMTexture3_GetDecalTransparency(p) (p)->lpVtbl->GetDecalTransparency(p)
+#define IDirect3DRMTexture3_GetDecalTransparencyColor(p) (p)->lpVtbl->GetDecalTransparencyColor(p)
+#define IDirect3DRMTexture3_InitFromImage(p,a) (p)->lpVtbl->InitFromImage(p,a)
+#define IDirect3DRMTexture3_InitFromResource2(p,a,b,c) (p)->lpVtbl->InitFromResource2(p,a,b,c)
+#define IDirect3DRMTexture3_GenerateMIPMap(p,a) (p)->lpVtbl->GenerateMIPMap(p,a)
+#define IDirect3DRMTexture3_GetSurface(p,a,b) (p)->lpVtbl->GetSurface(p,a,b)
+#define IDirect3DRMTexture3_SetCacheOptions(p,a,b) (p)->lpVtbl->SetCacheOptions(p,a,b)
+#define IDirect3DRMTexture3_GetCacheOptions(p,a,b) (p)->lpVtbl->GetCacheOptions(p,a,b)
+#define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b) (p)->lpVtbl->SetDownsampleCallback(p,a,b)
+#define IDirect3DRMTexture3_SetValidationCallback(p,a,b) (p)->lpVtbl->SetValidationCallback(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMTexture3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMTexture3_AddRef(p) (p)->AddRef()
+#define IDirect3DRMTexture3_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMTexture3_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMTexture3_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMTexture3_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMTexture3_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMTexture3_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMTexture3_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMTexture3_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMTexture3_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMTexture3 methods ***/
+#define IDirect3DRMTexture3_InitFromFile(p,a) (p)->InitFromFile(a)
+#define IDirect3DRMTexture3_InitFromSurface(p,a) (p)->InitFromSurface(a)
+#define IDirect3DRMTexture3_InitFromResource(p,a) (p)->InitFromResource(a)
+#define IDirect3DRMTexture3_Changed(p,a,b,c) (p)->Changed(a,b,c)
+#define IDirect3DRMTexture3_SetColors(p,a) (p)->SetColors(a)
+#define IDirect3DRMTexture3_SetShades(p,a) (p)->SetShades(a)
+#define IDirect3DRMTexture3_SetDecalSize(p,a,b) (p)->SetDecalSize(a,b)
+#define IDirect3DRMTexture3_SetDecalOrigin(p,a,b) (p)->SetDecalOrigin(a,b)
+#define IDirect3DRMTexture3_SetDecalScale(p,a) (p)->SetDecalScale(a)
+#define IDirect3DRMTexture3_SetDecalTransparency(p,a) (p)->SetDecalTransparency(a)
+#define IDirect3DRMTexture3_SetDecalTransparencyColor(p,a) (p)->SetDecalTransparentColor(a)
+#define IDirect3DRMTexture3_GetDecalSize(p,a,b) (p)->GetDecalSize(a,b)
+#define IDirect3DRMTexture3_GetDecalOrigin(p,a,b) (p)->GetDecalOrigin(a,b)
+#define IDirect3DRMTexture3_GetImage(p) (p)->GetImage()
+#define IDirect3DRMTexture3_GetShades(p) (p)->GetShades()
+#define IDirect3DRMTexture3_GetColors(p) (p)->GetColors()
+#define IDirect3DRMTexture3_GetDecalScale(p) (p)->GetDecalScale()
+#define IDirect3DRMTexture3_GetDecalTransparency(p) (p)->GetDecalTransparency()
+#define IDirect3DRMTexture3_GetDecalTransparencyColor(p) (p)->GetDecalTransparencyColor()
+#define IDirect3DRMTexture3_InitFromImage(p,a) (p)->InitFromImage(a)
+#define IDirect3DRMTexture3_InitFromResource2(p,a,b,c) (p)->InitFromResource2(a,b,c)
+#define IDirect3DRMTexture3_GenerateMIPMap(p,a) (p)->GenerateMIPMap(a)
+#define IDirect3DRMTexture3_GetSurface(p,a,b) (p)->GetSurface(a,b)
+#define IDirect3DRMTexture3_SetCacheOptions(p,a,b) (p)->SetCacheOptions(a,b)
+#define IDirect3DRMTexture3_GetCacheOptions(p,a,b) (p)->GetCacheOptions(a,b)
+#define IDirect3DRMTexture3_SetDownsampleCallback(p,a,b) (p)->SetDownsampleCallback(a,b)
+#define IDirect3DRMTexture3_SetValidationCallback(p,a,b) (p)->SetValidationCallback(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMWrap interface
+ */
+#define INTERFACE IDirect3DRMWrap
+DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMWrap methods ***/
+ STDMETHOD(Init)(THIS_ D3DRMWRAPTYPE type, IDirect3DRMFrame *reference, D3DVALUE ox, D3DVALUE oy, D3DVALUE oz,
+ D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz,
+ D3DVALUE ou, D3DVALUE ov, D3DVALUE su, D3DVALUE sv) PURE;
+ STDMETHOD(Apply)(THIS_ IDirect3DRMObject *object) PURE;
+ STDMETHOD(ApplyRelative)(THIS_ IDirect3DRMFrame *frame, IDirect3DRMObject *object) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMWrap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMWrap_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMWrap_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWrap_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMWrap_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMWrap_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMWrap_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMWrap_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMWrap_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMWrap_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMWrap methods ***/
+#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) (p)->lpVtbl->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
+#define IDirect3DRMWrap_Apply(p,a) (p)->lpVtbl->Apply(p,a)
+#define IDirect3DRMWrap_ApplyRelative(p,a,b) (p)->lpVtbl->ApplyRelative(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMWrap_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMWrap_AddRef(p) (p)->AddRef()
+#define IDirect3DRMWrap_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWrap_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMWrap_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMWrap_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMWrap_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMWrap_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMWrap_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMWrap_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMWrap_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMWrap methods ***/
+#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) (p)->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
+#define IDirect3DRMWrap_Apply(p,a) (p)->Apply(p,a)
+#define IDirect3DRMWrap_ApplyRelative(p,a,b) (p)->ApplyRelative(p,a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMaterial interface
+ */
+#define INTERFACE IDirect3DRMMaterial
+DECLARE_INTERFACE_(IDirect3DRMMaterial, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMMaterial methods ***/
+ STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
+ STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+ STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+ STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
+ STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+ STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMaterial_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMaterial_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMaterial_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMaterial_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMaterial_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMaterial_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMaterial_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMaterial methods ***/
+#define IDirect3DRMMaterial_SetPower(p,a) (p)->lpVtbl->SetPower(p,a)
+#define IDirect3DRMMaterial_SetSpecular(p,a,b,c) (p)->lpVtbl->SetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial_SetEmissive(p,a,b,c) (p)->lpVtbl->SetEmissive(p,a,b,c)
+#define IDirect3DRMMaterial_GetPower(p) (p)->lpVtbl->GetPower(p)
+#define IDirect3DRMMaterial_GetSpecular(p,a,b,c) (p)->lpVtbl->GetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial_GetEmissive(p,a,b,c) (p)->lpVtbl->GetEmissive(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMMaterial_AddRef(p) (p)->AddRef()
+#define IDirect3DRMMaterial_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMMaterial_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMaterial_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMaterial_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMMaterial_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMMaterial_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMMaterial_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMMaterial_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMMaterial methods ***/
+#define IDirect3DRMMaterial_SetPower(p,a) (p)->SetPower(a)
+#define IDirect3DRMMaterial_SetSpecular(p,a,b,c) (p)->SetSpecular(a,b,c)
+#define IDirect3DRMMaterial_SetEmissive(p,a,b,c) (p)->SetEmissive(a,b,c)
+#define IDirect3DRMMaterial_GetPower(p) (p)->GetPower()
+#define IDirect3DRMMaterial_GetSpecular(p,a,b,c) (p)->GetSpecular(a,b,c)
+#define IDirect3DRMMaterial_GetEmissive(p,a,b,c) (p)->GetEmissive(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMMaterial2 interface
+ */
+#define INTERFACE IDirect3DRMMaterial2
+DECLARE_INTERFACE_(IDirect3DRMMaterial2, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMMaterial2 methods ***/
+ STDMETHOD(SetPower)(THIS_ D3DVALUE power) PURE;
+ STDMETHOD(SetSpecular)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+ STDMETHOD(SetEmissive)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+ STDMETHOD_(D3DVALUE, GetPower)(THIS) PURE;
+ STDMETHOD(GetSpecular)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+ STDMETHOD(GetEmissive)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+ STDMETHOD(GetAmbient)(THIS_ D3DVALUE* r, D3DVALUE* g, D3DVALUE* b) PURE;
+ STDMETHOD(SetAmbient)(THIS_ D3DVALUE r, D3DVALUE g, D3DVALUE b) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMMaterial2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMMaterial2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMMaterial2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMMaterial2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMMaterial2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMMaterial2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMMaterial2 methods ***/
+#define IDirect3DRMMaterial2_SetPower(p,a) (p)->lpVtbl->SetPower(p,a)
+#define IDirect3DRMMaterial2_SetSpecular(p,a,b,c) (p)->lpVtbl->SetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial2_SetEmissive(p,a,b,c) (p)->lpVtbl->SetEmissive(p,a,b,c)
+#define IDirect3DRMMaterial2_GetPower(p) (p)->lpVtbl->GetPower(p)
+#define IDirect3DRMMaterial2_GetSpecular(p,a,b,c) (p)->lpVtbl->GetSpecular(p,a,b,c)
+#define IDirect3DRMMaterial2_GetEmissive(p,a,b,c) (p)->lpVtbl->GetEmissive(p,a,b,c)
+#define IDirect3DRMMaterial2_SetAmbient(p,a,b,c) (p)->lpVtbl->SetAmbient(p,a,b,c)
+#define IDirect3DRMMaterial2_GetAmbient(p,a,b,c) (p)->lpVtbl->GetAmbient(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMMaterial2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMMaterial2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMMaterial2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMMaterial2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMMaterial2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMMaterial2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMMaterial2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMMaterial2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMMaterial2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMMaterial2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMMaterial2 methods ***/
+#define IDirect3DRMMaterial2_SetPower(p,a) (p)->SetPower(a)
+#define IDirect3DRMMaterial2_SetSpecular(p,a,b,c) (p)->SetSpecular(a,b,c)
+#define IDirect3DRMMaterial2_SetEmissive(p,a,b,c) (p)->SetEmissive(a,b,c)
+#define IDirect3DRMMaterial2_GetPower(p) (p)->GetPower()
+#define IDirect3DRMMaterial2_GetSpecular(p,a,b,c) (p)->GetSpecular(a,b,c)
+#define IDirect3DRMMaterial2_GetEmissive(p,a,b,c) (p)->GetEmissive(a,b,c)
+#define IDirect3DRMMaterial2_SetAmbient(p,a,b,c) (p)->SetAmbient(a,b,c)
+#define IDirect3DRMMaterial2_GetAmbient(p,a,b,c) (p)->GetAmbient(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimation interface
+ */
+#define INTERFACE IDirect3DRMAnimation
+DECLARE_INTERFACE_(IDirect3DRMAnimation, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMAnimation methods ***/
+ STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
+ STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
+ STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
+ STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame *frame) PURE;
+ STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+ STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimation_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimation_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimation_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimation_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimation_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimation_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimation_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimation methods ***/
+#define IDirect3DRMAnimation_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
+#define IDirect3DRMAnimation_AddRotateKey(p,a,b) (p)->lpVtbl->AddRotateKey(p,a,b)
+#define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d) (p)->lpVtbl->AddPositionKey(p,a,b,c,d)
+#define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d) (p)->lpVtbl->AddScaleKey(p,a,b,c,d)
+#define IDirect3DRMAnimation_DeleteKey(p,a) (p)->lpVtbl->DeleteKey(p,a)
+#define IDirect3DRMAnimation_SetFrame(p,a) (p)->lpVtbl->SetFrame(p,a)
+#define IDirect3DRMAnimation_SetTime(p,a) (p)->lpVtbl->SetTime(p,a)
+#define IDirect3DRMAnimation_GetOptions(p) (p)->lpVtbl->GetOptions(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimation_AddRef(p) (p)->AddRef()
+#define IDirect3DRMAnimation_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMAnimation_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimation_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimation_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMAnimation_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMAnimation_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMAnimation_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMAnimation_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimation methods ***/
+#define IDirect3DRMAnimation_SetOptions(p,a) (p)->SetOptions(a)
+#define IDirect3DRMAnimation_AddRotateKey(p,a,b) (p)->AddRotateKey(a,b)
+#define IDirect3DRMAnimation_AddPositionKey(p,a,b,c,d) (p)->AddPositionKey(a,b,c,d)
+#define IDirect3DRMAnimation_AddScaleKey(p,a,b,c,d) (p)->AddScaleKey(a,b,c,d)
+#define IDirect3DRMAnimation_DeleteKey(p,a) (p)->DeleteKey(a)
+#define IDirect3DRMAnimation_SetFrame(p,a) (p)->SetFrame(a)
+#define IDirect3DRMAnimation_SetTime(p,a) (p)->SetTime(a)
+#define IDirect3DRMAnimation_GetOptions(p) (p)->GetOptions()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimation2 interface
+ */
+#define INTERFACE IDirect3DRMAnimation2
+DECLARE_INTERFACE_(IDirect3DRMAnimation2, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMAnimation2 methods ***/
+ STDMETHOD(SetOptions)(THIS_ D3DRMANIMATIONOPTIONS flags) PURE;
+ STDMETHOD(AddRotateKey)(THIS_ D3DVALUE time, D3DRMQUATERNION *q) PURE;
+ STDMETHOD(AddPositionKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(AddScaleKey)(THIS_ D3DVALUE time, D3DVALUE x, D3DVALUE y, D3DVALUE z) PURE;
+ STDMETHOD(DeleteKey)(THIS_ D3DVALUE time) PURE;
+ STDMETHOD(SetFrame)(THIS_ IDirect3DRMFrame3 *frame) PURE;
+ STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+ STDMETHOD_(D3DRMANIMATIONOPTIONS, GetOptions)(THIS) PURE;
+ STDMETHOD(GetFrame)(THIS_ IDirect3DRMFrame3 **frame) PURE;
+ STDMETHOD(DeleteKeyByID)(THIS_ DWORD dwID) PURE;
+ STDMETHOD(AddKey)(THIS_ D3DRMANIMATIONKEY *key) PURE;
+ STDMETHOD(ModifyKey)(THIS_ D3DRMANIMATIONKEY *key) PURE;
+ STDMETHOD(GetKeys)(THIS_ D3DVALUE time_min, D3DVALUE time_max, DWORD *key_count, D3DRMANIMATIONKEY *keys);
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimation2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimation2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimation2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimation2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimation2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimation2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimation2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimation2 methods ***/
+#define IDirect3DRMAnimation2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
+#define IDirect3DRMAnimation2_AddRotateKey(p,a,b) (p)->lpVtbl->AddRotateKey(p,a,b)
+#define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d) (p)->lpVtbl->AddPositionKey(p,a,b,c,d)
+#define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d) (p)->lpVtbl->AddScaleKey(p,a,b,c,d)
+#define IDirect3DRMAnimation2_DeleteKey(p,a) (p)->lpVtbl->DeleteKey(p,a)
+#define IDirect3DRMAnimation2_SetFrame(p,a) (p)->lpVtbl->SetFrame(p,a)
+#define IDirect3DRMAnimation2_SetTime(p,a) (p)->lpVtbl->SetTime(p,a)
+#define IDirect3DRMAnimation2_GetOptions(p) (p)->lpVtbl->GetOptions(p)
+#define IDirect3DRMAnimation2_GetFrame(p,a) (p)->lpVtbl->GetFrame(p,a)
+#define IDirect3DRMAnimation2_DeleteKeyByID(p,a) (p)->lpVtbl->DeleteKeyByID(p,a)
+#define IDirect3DRMAnimation2_AddKey(p,a) (p)->lpVtbl->AddKey(p,a)
+#define IDirect3DRMAnimation2_ModifyKey(p,a) (p)->lpVtbl->ModifyKey(p,a)
+#define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d) (p)->lpVtbl->GetKeys(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimation2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimation2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMAnimation2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimation2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMAnimation2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimation2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimation2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMAnimation2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMAnimation2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMAnimation2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMAnimation2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimation2 methods ***/
+#define IDirect3DRMAnimation2_SetOptions(p,a) (p)->SetOptions(a)
+#define IDirect3DRMAnimation2_AddRotateKey(p,a,b) (p)->AddRotateKey(a,b)
+#define IDirect3DRMAnimation2_AddPositionKey(p,a,b,c,d) (p)->AddPositionKey(a,b,c,d)
+#define IDirect3DRMAnimation2_AddScaleKey(p,a,b,c,d) (p)->AddScaleKey(a,b,c,d)
+#define IDirect3DRMAnimation2_DeleteKey(p,a) (p)->DeleteKey(a)
+#define IDirect3DRMAnimation2_SetFrame(p,a) (p)->SetFrame(a)
+#define IDirect3DRMAnimation2_SetTime(p,a) (p)->SetTime(a)
+#define IDirect3DRMAnimation2_GetOptions(p) (p)->GetOptions()
+#define IDirect3DRMAnimation2_GetFrame(p,a) (p)->GetFrame(a)
+#define IDirect3DRMAnimation2_DeleteKeyByID(p,a) (p)->DeleteKeyByID(a)
+#define IDirect3DRMAnimation2_AddKey(p,a) (p)->AddKey(a)
+#define IDirect3DRMAnimation2_ModifyKey(p,a) (p)->ModifyKey(a)
+#define IDirect3DRMAnimation2_GetKeys(p,a,b,c,d) (p)->GetKeys(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimationSet interface
+ */
+#define INTERFACE IDirect3DRMAnimationSet
+DECLARE_INTERFACE_(IDirect3DRMAnimationSet, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMAnimationSet methods ***/
+ STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE;
+ STDMETHOD(Load)(THIS_ void *filename, void *name, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURECALLBACK cb, void *ctx, IDirect3DRMFrame *parent)PURE;
+ STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation *animation) PURE;
+ STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimationSet_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimationSet_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimationSet_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimationSet_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimationSet_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimationSet_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimationSet methods ***/
+#define IDirect3DRMAnimationSet_AddAnimation(p,a) (p)->lpVtbl->AddAnimation(p,a)
+#define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f) (p)->lpVtbl->Load(p,a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet_DeleteAnimation(p,a) (p)->lpVtbl->DeleteAnimation(p,a)
+#define IDirect3DRMAnimationSet_SetTime(p,a) (p)->lpVtbl->SetTime(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimationSet_AddRef(p) (p)->AddRef()
+#define IDirect3DRMAnimationSet_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMAnimationSet_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMAnimationSet_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMAnimationSet_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMAnimationSet_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMAnimationSet_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimationSet methods ***/
+#define IDirect3DRMAnimationSet_AddAnimation(p,a) (p)->AddAnimation(a)
+#define IDirect3DRMAnimationSet_Load(p,a,b,c,d,e,f) (p)->Load(a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet_DeleteAnimation(p,a) (p)->DeleteAnimation(a)
+#define IDirect3DRMAnimationSet_SetTime(p,a) (p)->SetTime(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimationSet2 interface
+ */
+#define INTERFACE IDirect3DRMAnimationSet2
+DECLARE_INTERFACE_(IDirect3DRMAnimationSet2, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMAnimationSet2 methods ***/
+ STDMETHOD(AddAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE;
+ STDMETHOD(Load)(THIS_ void *source, void *object_id, D3DRMLOADOPTIONS flags,
+ D3DRMLOADTEXTURE3CALLBACK cb, void *ctx, IDirect3DRMFrame3 *parent_frame)PURE;
+ STDMETHOD(DeleteAnimation)(THIS_ IDirect3DRMAnimation2 *animation) PURE;
+ STDMETHOD(SetTime)(THIS_ D3DVALUE time) PURE;
+ STDMETHOD(GetAnimations)(THIS_ struct IDirect3DRMAnimationArray **array) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimationSet2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimationSet2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet2_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMAnimationSet2_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMAnimationSet2_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMAnimationSet2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMAnimationSet2_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMAnimationSet2_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMAnimationSet2 methods ***/
+#define IDirect3DRMAnimationSet2_AddAnimation(p,a) (p)->lpVtbl->AddAnimation(p,a)
+#define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f) (p)->lpVtbl->Load(p,a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet2_DeleteAnimation(p,a) (p)->lpVtbl->DeleteAnimation(p,a)
+#define IDirect3DRMAnimationSet2_SetTime(p,a) (p)->lpVtbl->SetTime(p,a)
+#define IDirect3DRMAnimationSet2_GetAnimations(p,a) (p)->lpVtbl->GetAnimations(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationSet2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimationSet2_AddRef(p) (p)->AddRef()
+#define IDirect3DRMAnimationSet2_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMAnimationSet2_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMAnimationSet2_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet2_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMAnimationSet2_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMAnimationSet2_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMAnimationSet2_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMAnimationSet2_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMAnimationSet2_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMAnimationSet2 methods ***/
+#define IDirect3DRMAnimationSet2_AddAnimation(p,a) (p)->AddAnimation(a)
+#define IDirect3DRMAnimationSet2_Load(p,a,b,c,d,e,f) (p)->Load(a,b,c,d,e,f)
+#define IDirect3DRMAnimationSet2_DeleteAnimation(p,a) (p)->DeleteAnimation(a)
+#define IDirect3DRMAnimationSet2_SetTime(p,a) (p)->SetTime(a)
+#define IDirect3DRMAnimationSet2_GetAnimations(p,a) (p)->GetAnimations(a)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMUserVisual interface
+ */
+#define INTERFACE IDirect3DRMUserVisual
+DECLARE_INTERFACE_(IDirect3DRMUserVisual, IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMUserVisual methods ***/
+ STDMETHOD(Init)(THIS_ D3DRMUSERVISUALCALLBACK fn, void *arg) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMUserVisual_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMUserVisual_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMUserVisual_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMUserVisual_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMUserVisual_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMUserVisual_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMUserVisual_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMUserVisual_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMUserVisual_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMUserVisual methods ***/
+#define IDirect3DRMUserVisual_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMUserVisual_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMUserVisual_AddRef(p) (p)->AddRef()
+#define IDirect3DRMUserVisual_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMUserVisual_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMUserVisual_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMUserVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMUserVisual_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMUserVisual_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMUserVisual_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMUserVisual_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMUserVisual_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMUserVisual methods ***/
+#define IDirect3DRMUserVisual_Init(p,a,b) (p)->Init(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMArray interface
+ */
+#define INTERFACE IDirect3DRMArray
+DECLARE_INTERFACE_(IDirect3DRMArray, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMArray_GetSize(p) (p)->GetSize()
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMObjectArray interface
+ */
+#define INTERFACE IDirect3DRMObjectArray
+DECLARE_INTERFACE_(IDirect3DRMObjectArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMObjectArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMObject **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMObjectArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMObjectArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMObjectArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMObjectArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMObjectArray methods ***/
+#define IDirect3DRMObjectArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMObjectArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMObjectArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMObjectArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMObjectArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMObjectArray methods ***/
+#define IDirect3DRMObjectArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMDeviceArray interface
+ */
+#define INTERFACE IDirect3DRMDeviceArray
+DECLARE_INTERFACE_(IDirect3DRMDeviceArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMDeviceArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMDevice **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMDeviceArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMDeviceArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMDeviceArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMDeviceArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMDeviceArray methods ***/
+#define IDirect3DRMDeviceArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMDeviceArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMDeviceArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMDeviceArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMDeviceArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMDeviceArray methods ***/
+#define IDirect3DRMDeviceArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFrameArray interface
+ */
+#define INTERFACE IDirect3DRMFrameArray
+DECLARE_INTERFACE_(IDirect3DRMFrameArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMFrameArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFrame **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFrameArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFrameArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFrameArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFrameArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMFrameArray methods ***/
+#define IDirect3DRMFrameArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFrameArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFrameArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFrameArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFrameArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMFrameArray methods ***/
+#define IDirect3DRMFrameArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMViewportArray interface
+ */
+#define INTERFACE IDirect3DRMViewportArray
+DECLARE_INTERFACE_(IDirect3DRMViewportArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMViewportArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMViewport **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMViewportArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMViewportArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMViewportArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMViewportArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMViewportArray methods ***/
+#define IDirect3DRMViewportArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMViewportArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMViewportArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMViewportArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMViewportArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMViewportArray methods ***/
+#define IDirect3DRMviewportArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMVisualArray interface
+ */
+#define INTERFACE IDirect3DRMVisualArray
+DECLARE_INTERFACE_(IDirect3DRMVisualArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMVisualArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMVisual **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMVisualArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMVisualArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMVisualArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMVisualArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMVisualArray methods ***/
+#define IDirect3DRMVisualArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMVisualArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMVisualArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMVisualArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMVisualArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMVisualArray methods ***/
+#define IDirect3DRMVisualArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMAnimationArray interface
+ */
+#define INTERFACE IDirect3DRMAnimationArray
+DECLARE_INTERFACE_(IDirect3DRMAnimationArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMAnimationArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMAnimation2 **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMAnimationArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMAnimationArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMAnimationArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMAnimationArray methods ***/
+#define IDirect3DRMAnimationArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMAnimationArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMAnimationArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMAnimationArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMAnimationArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMAnimationArray methods ***/
+#define IDirect3DRMAnimationArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMPickedArray interface
+ */
+#define INTERFACE IDirect3DRMPickedArray
+DECLARE_INTERFACE_(IDirect3DRMPickedArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMPickedArray methods ***/
+ STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual,
+ IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC *pick_desc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMPickedArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMPickedArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMPickedArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPickedArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMPickedArray methods ***/
+#define IDirect3DRMPickedArray_GetPick(p,a,b,c,d) (p)->lpVtbl->GetPick(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMPickedArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMPickedArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMPickedArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPickedArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMPickedArray methods ***/
+#define IDirect3DRMPickedArray_GetPick(p,a,b,c,d) (p)->GetPick(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMLightArray interface
+ */
+#define INTERFACE IDirect3DRMLightArray
+DECLARE_INTERFACE_(IDirect3DRMLightArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMLightArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMLight **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMLightArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMLightArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMLightArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMLightArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMLightArray methods ***/
+#define IDirect3DRMLightArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMLightArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMLightArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMLightArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMLightArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMLightArray methods ***/
+#define IDirect3DRMLightArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMFaceArray interface
+ */
+#define INTERFACE IDirect3DRMFaceArray
+DECLARE_INTERFACE_(IDirect3DRMFaceArray, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMFaceArray methods ***/
+ STDMETHOD(GetElement)(THIS_ DWORD index, IDirect3DRMFace **element) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMFaceArray_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMFaceArray_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMFaceArray_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFaceArray_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMFaceArray methods ***/
+#define IDirect3DRMFaceArray_GetElement(p,a,b) (p)->lpVtbl->GetElement(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMFaceArray_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMFaceArray_AddRef(p) (p)->AddRef()
+#define IDirect3DRMFaceArray_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMFaceArray_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMFaceArray methods ***/
+#define IDirect3DRMFaceArray_GetElement(p,a,b) (p)->GetElement(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMPicked2Array interface
+ */
+#define INTERFACE IDirect3DRMPicked2Array
+DECLARE_INTERFACE_(IDirect3DRMPicked2Array, IDirect3DRMArray)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMArray methods ***/
+ STDMETHOD_(DWORD, GetSize)(THIS) PURE;
+ /*** IDirect3DRMPicked2Array methods ***/
+ STDMETHOD(GetPick)(THIS_ DWORD index, IDirect3DRMVisual **visual,
+ IDirect3DRMFrameArray **frame_array, D3DRMPICKDESC2 *pick_desc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMPicked2Array_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMPicked2Array_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMPicked2Array_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPicked2Array_GetSize(p) (p)->lpVtbl->GetSize(p)
+/*** IDirect3DRMPicked2Array methods ***/
+#define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d) (p)->lpVtbl->GetPick(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMPicked2Array_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMPicked2Array_AddRef(p) (p)->AddRef()
+#define IDirect3DRMPicked2Array_Release(p) (p)->Release()
+/*** IDirect3DRMArray methods ***/
+#define IDirect3DRMPicked2Array_GetSize(p) (p)->GetSize()
+/*** IDirect3DRMPicked2Array methods ***/
+#define IDirect3DRMPicked2Array_GetPick(p,a,b,c,d) (p)->GetPick(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMInterpolator interface
+ */
+#define INTERFACE IDirect3DRMInterpolator
+DECLARE_INTERFACE_(IDirect3DRMInterpolator, IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMInterpolator methods ***/
+ STDMETHOD(AttachObject)(THIS_ IDirect3DRMObject *object) PURE;
+ STDMETHOD(GetAttachedObjects)(THIS_ IDirect3DRMObjectArray **array) PURE;
+ STDMETHOD(DetachObject)(THIS_ IDirect3DRMObject *object) PURE;
+ STDMETHOD(SetIndex)(THIS_ D3DVALUE) PURE;
+ STDMETHOD_(D3DVALUE, GetIndex)(THIS) PURE;
+ STDMETHOD(Interpolate)(THIS_ D3DVALUE index, IDirect3DRMObject *object, D3DRMINTERPOLATIONOPTIONS flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMInterpolator_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMInterpolator_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMInterpolator_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMInterpolator_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMInterpolator_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMInterpolator_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMInterpolator_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMInterpolator_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMInterpolator_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMInterpolator methods ***/
+#define IDirect3DRMInterpolator_AttachObject(p,a) (p)->lpVtbl->AttachObject(p,a)
+#define IDirect3DRMInterpolator_GetAttachedObjects(p,a) (p)->lpVtbl->GetAttachedObjects(p,a)
+#define IDirect3DRMInterpolator_DetachObject(p,a) (p)->lpVtbl->DetachObject(p,a)
+#define IDirect3DRMInterpolator_SetIndex(p,a) (p)->lpVtbl->SetIndex(p,a)
+#define IDirect3DRMInterpolator_GetIndex(p) (p)->lpVtbl->GetIndex(p)
+#define IDirect3DRMInterpolator_Interpolate(p,a,b,c) (p)->lpVtbl->Interpolate(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMInterpolator_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMInterpolator_AddRef(p) (p)->AddRef()
+#define IDirect3DRMInterpolator_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMInterpolator_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMInterpolator_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMInterpolator_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMInterpolator_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMInterpolator_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMInterpolator_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMInterpolator_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMInterpolator_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMInterpolator methods ***/
+#define IDirect3DRMInterpolator_AttachObject(p,a) (p)->AttachObject(a)
+#define IDirect3DRMInterpolator_GetAttachedObjects(p,a) (p)->GetAttachedObjects(a)
+#define IDirect3DRMInterpolator_DetachObject(p,a) (p)->DetachObject(a)
+#define IDirect3DRMInterpolator_SetIndex(p,a) (p)->SetIndex(a)
+#define IDirect3DRMInterpolator_GetIndex(p) (p)->GetIndex()
+#define IDirect3DRMInterpolator_Interpolate(p,a,b,c) (p)->Interpolate(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirect3DRMClippedVisual interface
+ */
+#define INTERFACE IDirect3DRMClippedVisual
+DECLARE_INTERFACE_(IDirect3DRMClippedVisual, IDirect3DRMVisual)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMClippedVisual methods ***/
+ STDMETHOD(Init) (THIS_ IDirect3DRMVisual *visual) PURE;
+ STDMETHOD(AddPlane) (THIS_ IDirect3DRMFrame3 *reference, D3DVECTOR *point,
+ D3DVECTOR *normal, DWORD flags, DWORD *id) PURE;
+ STDMETHOD(DeletePlane)(THIS_ DWORD, DWORD) PURE;
+ STDMETHOD(GetPlaneIDs)(THIS_ DWORD *count, DWORD *id, DWORD flags) PURE;
+ STDMETHOD(GetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point,
+ D3DVECTOR *normal, DWORD flags) PURE;
+ STDMETHOD(SetPlane) (THIS_ DWORD id, IDirect3DRMFrame3 *reference, D3DVECTOR *point,
+ D3DVECTOR *normal, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMClippedVisual_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMClippedVisual_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMClippedVisual_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMClippedVisual_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMClippedVisual_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMClippedVisual_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMClippedVisual_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMClippedVisual_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMClippedVisual_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMClippedVisual methods ***/
+#define IDirect3DRMClippedVisual_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e) (p)->lpVtbl->AddPlane(p,a,b,c,d,e)
+#define IDirect3DRMClippedVisual_DeletePlane(p,a,b) (p)->lpVtbl->DeletePlane(p,a,b)
+#define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c) (p)->lpVtbl->GetPlaneIDs(p,a,b,c)
+#define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e) (p)->lpVtbl->GetPlane(p,a,b,c,d,e)
+#define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e) (p)->lpVtbl->SetPlane(p,a,b,c,d,e)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMClippedVisual_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMClippedVisual_AddRef(p) (p)->AddRef()
+#define IDirect3DRMClippedVisual_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMClippedVisual_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMClippedVisual_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMClippedVisual_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMClippedVisual_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMClippedVisual_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMClippedVisual_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMClippedVisual_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMClippedVisual_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMClippedVisual methods ***/
+#define IDirect3DRMClippedVisual_Init(p,a) (p)->Init(a)
+#define IDirect3DRMClippedVisual_AddPlane(p,a,b,c,d,e) (p)->AddPlane(a,b,c,d,e)
+#define IDirect3DRMClippedVisual_DeletePlane(p,a,b) (p)->DeletePlane(a,b)
+#define IDirect3DRMClippedVisual_GetPlaneIDs(p,a,b,c) (p)->GetPlaneIDs(a,b,c)
+#define IDirect3DRMClippedVisual_GetPlane(p,a,b,c,d,e) (p)->GetPlane(a,b,c,d,e)
+#define IDirect3DRMClippedVisual_SetPlane(p,a,b,c,d,e) (p)->SetPlane(a,b,c,d,e)
+#endif
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* __D3DRMOBJ_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h
new file mode 100644
index 00000000..a69964e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3drmwin.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2010 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DRMWIN_H__
+#define __D3DRMWIN_H__
+
+#include <d3drm.h>
+#include <ddraw.h>
+#include <d3d.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * Direct3DRMWinDevice interface GUID
+ */
+
+DEFINE_GUID(IID_IDirect3DRMWinDevice, 0xc5016cc0, 0xd273, 0x11ce, 0xac, 0x48, 0x00, 0x00, 0xc0, 0x38, 0x25, 0xa1);
+
+typedef struct IDirect3DRMWinDevice *LPDIRECT3DRMWINDEVICE, **LPLPDIRECT3DRMWINDEVICE;
+
+/*****************************************************************************
+ * IDirect3DRMWinDevice interface
+ */
+#define INTERFACE IDirect3DRMWinDevice
+DECLARE_INTERFACE_(IDirect3DRMWinDevice,IDirect3DRMObject)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirect3DRMObject methods ***/
+ STDMETHOD(Clone)(THIS_ IUnknown *outer, REFIID iid, void **out) PURE;
+ STDMETHOD(AddDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(DeleteDestroyCallback)(THIS_ D3DRMOBJECTCALLBACK cb, void *ctx) PURE;
+ STDMETHOD(SetAppData)(THIS_ DWORD data) PURE;
+ STDMETHOD_(DWORD, GetAppData)(THIS) PURE;
+ STDMETHOD(SetName)(THIS_ const char *name) PURE;
+ STDMETHOD(GetName)(THIS_ DWORD *size, char *name) PURE;
+ STDMETHOD(GetClassName)(THIS_ DWORD *size, char *name) PURE;
+ /*** IDirect3DRMWinDevice methods ***/
+ STDMETHOD(HandlePaint)(THIS_ HDC) PURE;
+ STDMETHOD(HandleActivate)(THIS_ WORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirect3DRMWinDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirect3DRMWinDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirect3DRMWinDevice_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWinDevice_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b) (p)->lpVtbl->AddDestroyCallback(p,a,b)
+#define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->lpVtbl->DeleteDestroyCallback(p,a,b)
+#define IDirect3DRMWinDevice_SetAppData(p,a) (p)->lpVtbl->SetAppData(p,a)
+#define IDirect3DRMWinDevice_GetAppData(p) (p)->lpVtbl->GetAppData(p)
+#define IDirect3DRMWinDevice_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define IDirect3DRMWinDevice_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirect3DRMWinDevice_GetClassName(p,a,b) (p)->lpVtbl->GetClassName(p,a,b)
+/*** IDirect3DRMWinDevice methods ***/
+#define IDirect3DRMWinDevice_HandlePaint(p,a) (p)->lpVtbl->HandlePaint(p,a)
+#define IDirect3DRMWinDevice_HandleActivate(p,a) (p)->lpVtbl->HandleActivate(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirect3DRMWinDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirect3DRMWinDevice_AddRef(p) (p)->AddRef()
+#define IDirect3DRMwinDevice_Release(p) (p)->Release()
+/*** IDirect3DRMObject methods ***/
+#define IDirect3DRMWinDevice_Clone(p,a,b,c) (p)->Clone(a,b,c)
+#define IDirect3DRMWinDevice_AddDestroyCallback(p,a,b) (p)->AddDestroyCallback(a,b)
+#define IDirect3DRMWinDevice_DeleteDestroyCallback(p,a,b) (p)->DeleteDestroyCallback(a,b)
+#define IDirect3DRMWinDevice_SetAppData(p,a) (p)->SetAppData(a)
+#define IDirect3DRMWinDevice_GetAppData(p) (p)->GetAppData()
+#define IDirect3DRMWinDevice_SetName(p,a) (p)->SetName(a)
+#define IDirect3DRMWinDevice_GetName(p,a,b) (p)->GetName(a,b)
+#define IDirect3DRMWinDevice_GetClassName(p,a,b) (p)->GetClassName(a,b)
+/*** IDirect3DRMWinDevice methods ***/
+#define IDirect3DRMWinDevice_HandlePaint(p,a) (p)->HandlePaint(a)
+#define IDirect3DRMWinDevice_HandleActivate(p,a) (p)->HandleActivate(a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DRMWIN_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h
new file mode 100644
index 00000000..978d0a48
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dtypes.h
@@ -0,0 +1,1368 @@
+/*
+ * Copyright (C) 2000 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* FIXME: Need to add C++ code for certain structs for headers - this is going to be a problem
+ if WINE continues to only use C code - I suppose that we could always inline in
+ the header file to get around that little problem... */
+/* FIXME: We need to implement versioning on everything directx 5 and up if these headers
+ are going to be generically useful for directx stuff */
+
+#ifndef __WINE_D3DTYPES_H
+#define __WINE_D3DTYPES_H
+
+#include <windows.h>
+#include <float.h>
+#include <ddraw.h>
+
+#define D3DVALP(val, prec) ((float)(val))
+#define D3DVAL(val) ((float)(val))
+#define D3DDivide(a, b) (float)((double) (a) / (double) (b))
+#define D3DMultiply(a, b) ((a) * (b))
+
+typedef LONG D3DFIXED;
+
+
+#ifndef RGB_MAKE
+#define CI_GETALPHA(ci) ((ci) >> 24)
+#define CI_GETINDEX(ci) (((ci) >> 8) & 0xffff)
+#define CI_GETFRACTION(ci) ((ci) & 0xff)
+#define CI_ROUNDINDEX(ci) CI_GETINDEX((ci) + 0x80)
+#define CI_MASKALPHA(ci) ((ci) & 0xffffff)
+#define CI_MAKE(a, i, f) (((a) << 24) | ((i) << 8) | (f))
+
+#define RGBA_GETALPHA(rgb) ((rgb) >> 24)
+#define RGBA_GETRED(rgb) (((rgb) >> 16) & 0xff)
+#define RGBA_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
+#define RGBA_GETBLUE(rgb) ((rgb) & 0xff)
+#define RGBA_MAKE(r, g, b, a) ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
+
+#define D3DRGB(r, g, b) \
+ (0xff000000 | ( ((LONG)((r) * 255)) << 16) | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255))
+#define D3DRGBA(r, g, b, a) \
+ ( (((LONG)((a) * 255)) << 24) | (((LONG)((r) * 255)) << 16) \
+ | (((LONG)((g) * 255)) << 8) | (LONG)((b) * 255) \
+ )
+
+#define RGB_GETRED(rgb) (((rgb) >> 16) & 0xff)
+#define RGB_GETGREEN(rgb) (((rgb) >> 8) & 0xff)
+#define RGB_GETBLUE(rgb) ((rgb) & 0xff)
+#define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
+#define RGB_MAKE(r, g, b) ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))
+#define RGBA_TORGB(rgba) ((D3DCOLOR) ((rgba) & 0xffffff))
+#define RGB_TORGBA(rgb) ((D3DCOLOR) ((rgb) | 0xff000000))
+
+#endif
+
+#define D3DENUMRET_CANCEL DDENUMRET_CANCEL
+#define D3DENUMRET_OK DDENUMRET_OK
+
+typedef HRESULT (CALLBACK *LPD3DVALIDATECALLBACK)(void *ctx, DWORD offset);
+typedef HRESULT (CALLBACK *LPD3DENUMTEXTUREFORMATSCALLBACK)(DDSURFACEDESC *surface_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPD3DENUMPIXELFORMATSCALLBACK)(DDPIXELFORMAT *format, void *ctx);
+
+#ifndef DX_SHARED_DEFINES
+
+typedef float D3DVALUE,*LPD3DVALUE;
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR, *LPD3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+ union {
+ D3DVALUE x;
+ D3DVALUE dvX;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DVALUE y;
+ D3DVALUE dvY;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DVALUE z;
+ D3DVALUE dvZ;
+ } DUMMYUNIONNAME3;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+ /* the definitions for these methods are in d3dvec.inl */
+public:
+ /*** constructors ***/
+ _D3DVECTOR() {}
+ _D3DVECTOR(D3DVALUE f);
+ _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);
+ _D3DVECTOR(const D3DVALUE f[3]);
+
+ /*** assignment operators ***/
+ _D3DVECTOR& operator += (const _D3DVECTOR& v);
+ _D3DVECTOR& operator -= (const _D3DVECTOR& v);
+ _D3DVECTOR& operator *= (const _D3DVECTOR& v);
+ _D3DVECTOR& operator /= (const _D3DVECTOR& v);
+ _D3DVECTOR& operator *= (D3DVALUE s);
+ _D3DVECTOR& operator /= (D3DVALUE s);
+
+ /*** unary operators ***/
+ friend _D3DVECTOR operator + (const _D3DVECTOR& v);
+ friend _D3DVECTOR operator - (const _D3DVECTOR& v);
+
+ /*** binary operators ***/
+ friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+ friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+
+ friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);
+ friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);
+ friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);
+
+ friend D3DVALUE SquareMagnitude(const _D3DVECTOR& v);
+ friend D3DVALUE Magnitude(const _D3DVECTOR& v);
+
+ friend _D3DVECTOR Normalize(const _D3DVECTOR& v);
+
+ friend D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+ friend _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2);
+#endif
+} D3DVECTOR,*LPD3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+#define DX_SHARED_DEFINES
+#endif /* DX_SHARED_DEFINES */
+
+typedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;
+typedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE;
+typedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE;
+
+typedef struct _D3DCOLORVALUE {
+ union {
+ D3DVALUE r;
+ D3DVALUE dvR;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DVALUE g;
+ D3DVALUE dvG;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DVALUE b;
+ D3DVALUE dvB;
+ } DUMMYUNIONNAME3;
+ union {
+ D3DVALUE a;
+ D3DVALUE dvA;
+ } DUMMYUNIONNAME4;
+} D3DCOLORVALUE,*LPD3DCOLORVALUE;
+
+typedef struct _D3DRECT {
+ union {
+ LONG x1;
+ LONG lX1;
+ } DUMMYUNIONNAME1;
+ union {
+ LONG y1;
+ LONG lY1;
+ } DUMMYUNIONNAME2;
+ union {
+ LONG x2;
+ LONG lX2;
+ } DUMMYUNIONNAME3;
+ union {
+ LONG y2;
+ LONG lY2;
+ } DUMMYUNIONNAME4;
+} D3DRECT, *LPD3DRECT;
+
+typedef struct _D3DHVERTEX {
+ DWORD dwFlags;
+ union {
+ D3DVALUE hx;
+ D3DVALUE dvHX;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DVALUE hy;
+ D3DVALUE dvHY;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DVALUE hz;
+ D3DVALUE dvHZ;
+ } DUMMYUNIONNAME3;
+} D3DHVERTEX, *LPD3DHVERTEX;
+
+/*
+ * Transformed/lit vertices
+ */
+typedef struct _D3DTLVERTEX {
+ union {
+ D3DVALUE sx;
+ D3DVALUE dvSX;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DVALUE sy;
+ D3DVALUE dvSY;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DVALUE sz;
+ D3DVALUE dvSZ;
+ } DUMMYUNIONNAME3;
+ union {
+ D3DVALUE rhw;
+ D3DVALUE dvRHW;
+ } DUMMYUNIONNAME4;
+ union {
+ D3DCOLOR color;
+ D3DCOLOR dcColor;
+ } DUMMYUNIONNAME5;
+ union {
+ D3DCOLOR specular;
+ D3DCOLOR dcSpecular;
+ } DUMMYUNIONNAME6;
+ union {
+ D3DVALUE tu;
+ D3DVALUE dvTU;
+ } DUMMYUNIONNAME7;
+ union {
+ D3DVALUE tv;
+ D3DVALUE dvTV;
+ } DUMMYUNIONNAME8;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+public:
+ _D3DTLVERTEX() {}
+ _D3DTLVERTEX(const D3DVECTOR& v, float _rhw, D3DCOLOR _color, D3DCOLOR _specular, float _tu, float _tv) {
+ sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;
+ color = _color; specular = _specular;
+ tu = _tu; tv = _tv;
+ }
+#endif
+} D3DTLVERTEX, *LPD3DTLVERTEX;
+
+typedef struct _D3DLVERTEX {
+ union {
+ D3DVALUE x;
+ D3DVALUE dvX;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DVALUE y;
+ D3DVALUE dvY;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DVALUE z;
+ D3DVALUE dvZ;
+ } DUMMYUNIONNAME3;
+ DWORD dwReserved;
+ union {
+ D3DCOLOR color;
+ D3DCOLOR dcColor;
+ } DUMMYUNIONNAME4;
+ union {
+ D3DCOLOR specular;
+ D3DCOLOR dcSpecular;
+ } DUMMYUNIONNAME5;
+ union {
+ D3DVALUE tu;
+ D3DVALUE dvTU;
+ } DUMMYUNIONNAME6;
+ union {
+ D3DVALUE tv;
+ D3DVALUE dvTV;
+ } DUMMYUNIONNAME7;
+} D3DLVERTEX, *LPD3DLVERTEX;
+
+typedef struct _D3DVERTEX {
+ union {
+ D3DVALUE x;
+ D3DVALUE dvX;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DVALUE y;
+ D3DVALUE dvY;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DVALUE z;
+ D3DVALUE dvZ;
+ } DUMMYUNIONNAME3;
+ union {
+ D3DVALUE nx;
+ D3DVALUE dvNX;
+ } DUMMYUNIONNAME4;
+ union {
+ D3DVALUE ny;
+ D3DVALUE dvNY;
+ } DUMMYUNIONNAME5;
+ union {
+ D3DVALUE nz;
+ D3DVALUE dvNZ;
+ } DUMMYUNIONNAME6;
+ union {
+ D3DVALUE tu;
+ D3DVALUE dvTU;
+ } DUMMYUNIONNAME7;
+ union {
+ D3DVALUE tv;
+ D3DVALUE dvTV;
+ } DUMMYUNIONNAME8;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+public:
+ _D3DVERTEX() {}
+ _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv) {
+ x = v.x; y = v.y; z = v.z;
+ nx = n.x; ny = n.y; nz = n.z;
+ tu = _tu; tv = _tv;
+ }
+#endif
+} D3DVERTEX, *LPD3DVERTEX;
+
+typedef struct _D3DMATRIX {
+ D3DVALUE _11, _12, _13, _14;
+ D3DVALUE _21, _22, _23, _24;
+ D3DVALUE _31, _32, _33, _34;
+ D3DVALUE _41, _42, _43, _44;
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+ _D3DMATRIX() { }
+
+ /* This is different from MS, but avoids anonymous structs. */
+ D3DVALUE &operator () (int r, int c)
+ { return (&_11)[r*4 + c]; }
+ const D3DVALUE &operator() (int r, int c) const
+ { return (&_11)[r*4 + c]; }
+#endif
+} D3DMATRIX, *LPD3DMATRIX;
+
+#if defined(__cplusplus) && defined(D3D_OVERLOADS)
+#include <d3dvec.inl>
+#endif
+
+typedef struct _D3DVIEWPORT {
+ DWORD dwSize;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ D3DVALUE dvScaleX;
+ D3DVALUE dvScaleY;
+ D3DVALUE dvMaxX;
+ D3DVALUE dvMaxY;
+ D3DVALUE dvMinZ;
+ D3DVALUE dvMaxZ;
+} D3DVIEWPORT, *LPD3DVIEWPORT;
+
+typedef struct _D3DVIEWPORT2 {
+ DWORD dwSize;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ D3DVALUE dvClipX;
+ D3DVALUE dvClipY;
+ D3DVALUE dvClipWidth;
+ D3DVALUE dvClipHeight;
+ D3DVALUE dvMinZ;
+ D3DVALUE dvMaxZ;
+} D3DVIEWPORT2, *LPD3DVIEWPORT2;
+
+typedef struct _D3DVIEWPORT7 {
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ D3DVALUE dvMinZ;
+ D3DVALUE dvMaxZ;
+} D3DVIEWPORT7, *LPD3DVIEWPORT7;
+
+#define D3DMAXUSERCLIPPLANES 32
+
+#define D3DCLIPPLANE0 (1 << 0)
+#define D3DCLIPPLANE1 (1 << 1)
+#define D3DCLIPPLANE2 (1 << 2)
+#define D3DCLIPPLANE3 (1 << 3)
+#define D3DCLIPPLANE4 (1 << 4)
+#define D3DCLIPPLANE5 (1 << 5)
+
+#define D3DCLIP_LEFT 0x00000001
+#define D3DCLIP_RIGHT 0x00000002
+#define D3DCLIP_TOP 0x00000004
+#define D3DCLIP_BOTTOM 0x00000008
+#define D3DCLIP_FRONT 0x00000010
+#define D3DCLIP_BACK 0x00000020
+#define D3DCLIP_GEN0 0x00000040
+#define D3DCLIP_GEN1 0x00000080
+#define D3DCLIP_GEN2 0x00000100
+#define D3DCLIP_GEN3 0x00000200
+#define D3DCLIP_GEN4 0x00000400
+#define D3DCLIP_GEN5 0x00000800
+
+#define D3DSTATUS_CLIPUNIONLEFT D3DCLIP_LEFT
+#define D3DSTATUS_CLIPUNIONRIGHT D3DCLIP_RIGHT
+#define D3DSTATUS_CLIPUNIONTOP D3DCLIP_TOP
+#define D3DSTATUS_CLIPUNIONBOTTOM D3DCLIP_BOTTOM
+#define D3DSTATUS_CLIPUNIONFRONT D3DCLIP_FRONT
+#define D3DSTATUS_CLIPUNIONBACK D3DCLIP_BACK
+#define D3DSTATUS_CLIPUNIONGEN0 D3DCLIP_GEN0
+#define D3DSTATUS_CLIPUNIONGEN1 D3DCLIP_GEN1
+#define D3DSTATUS_CLIPUNIONGEN2 D3DCLIP_GEN2
+#define D3DSTATUS_CLIPUNIONGEN3 D3DCLIP_GEN3
+#define D3DSTATUS_CLIPUNIONGEN4 D3DCLIP_GEN4
+#define D3DSTATUS_CLIPUNIONGEN5 D3DCLIP_GEN5
+
+#define D3DSTATUS_CLIPINTERSECTIONLEFT 0x00001000
+#define D3DSTATUS_CLIPINTERSECTIONRIGHT 0x00002000
+#define D3DSTATUS_CLIPINTERSECTIONTOP 0x00004000
+#define D3DSTATUS_CLIPINTERSECTIONBOTTOM 0x00008000
+#define D3DSTATUS_CLIPINTERSECTIONFRONT 0x00010000
+#define D3DSTATUS_CLIPINTERSECTIONBACK 0x00020000
+#define D3DSTATUS_CLIPINTERSECTIONGEN0 0x00040000
+#define D3DSTATUS_CLIPINTERSECTIONGEN1 0x00080000
+#define D3DSTATUS_CLIPINTERSECTIONGEN2 0x00100000
+#define D3DSTATUS_CLIPINTERSECTIONGEN3 0x00200000
+#define D3DSTATUS_CLIPINTERSECTIONGEN4 0x00400000
+#define D3DSTATUS_CLIPINTERSECTIONGEN5 0x00800000
+#define D3DSTATUS_ZNOTVISIBLE 0x01000000
+
+#define D3DSTATUS_CLIPUNIONALL ( \
+ D3DSTATUS_CLIPUNIONLEFT | \
+ D3DSTATUS_CLIPUNIONRIGHT | \
+ D3DSTATUS_CLIPUNIONTOP | \
+ D3DSTATUS_CLIPUNIONBOTTOM | \
+ D3DSTATUS_CLIPUNIONFRONT | \
+ D3DSTATUS_CLIPUNIONBACK | \
+ D3DSTATUS_CLIPUNIONGEN0 | \
+ D3DSTATUS_CLIPUNIONGEN1 | \
+ D3DSTATUS_CLIPUNIONGEN2 | \
+ D3DSTATUS_CLIPUNIONGEN3 | \
+ D3DSTATUS_CLIPUNIONGEN4 | \
+ D3DSTATUS_CLIPUNIONGEN5 \
+ )
+
+#define D3DSTATUS_CLIPINTERSECTIONALL ( \
+ D3DSTATUS_CLIPINTERSECTIONLEFT | \
+ D3DSTATUS_CLIPINTERSECTIONRIGHT | \
+ D3DSTATUS_CLIPINTERSECTIONTOP | \
+ D3DSTATUS_CLIPINTERSECTIONBOTTOM | \
+ D3DSTATUS_CLIPINTERSECTIONFRONT | \
+ D3DSTATUS_CLIPINTERSECTIONBACK | \
+ D3DSTATUS_CLIPINTERSECTIONGEN0 | \
+ D3DSTATUS_CLIPINTERSECTIONGEN1 | \
+ D3DSTATUS_CLIPINTERSECTIONGEN2 | \
+ D3DSTATUS_CLIPINTERSECTIONGEN3 | \
+ D3DSTATUS_CLIPINTERSECTIONGEN4 | \
+ D3DSTATUS_CLIPINTERSECTIONGEN5 \
+ )
+
+#define D3DSTATUS_DEFAULT ( \
+ D3DSTATUS_CLIPINTERSECTIONALL | \
+ D3DSTATUS_ZNOTVISIBLE)
+
+#define D3DTRANSFORM_CLIPPED 0x00000001
+#define D3DTRANSFORM_UNCLIPPED 0x00000002
+
+typedef struct _D3DTRANSFORMDATA {
+ DWORD dwSize;
+ void *lpIn;
+ DWORD dwInSize;
+ void *lpOut;
+ DWORD dwOutSize;
+ D3DHVERTEX *lpHOut;
+ DWORD dwClip;
+ DWORD dwClipIntersection;
+ DWORD dwClipUnion;
+ D3DRECT drExtent;
+} D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;
+
+typedef struct _D3DLIGHTINGELEMENT {
+ D3DVECTOR dvPosition;
+ D3DVECTOR dvNormal;
+} D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;
+
+typedef struct _D3DMATERIAL {
+ DWORD dwSize;
+ union {
+ D3DCOLORVALUE diffuse;
+ D3DCOLORVALUE dcvDiffuse;
+ } DUMMYUNIONNAME;
+ union {
+ D3DCOLORVALUE ambient;
+ D3DCOLORVALUE dcvAmbient;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DCOLORVALUE specular;
+ D3DCOLORVALUE dcvSpecular;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DCOLORVALUE emissive;
+ D3DCOLORVALUE dcvEmissive;
+ } DUMMYUNIONNAME3;
+ union {
+ D3DVALUE power;
+ D3DVALUE dvPower;
+ } DUMMYUNIONNAME4;
+ D3DTEXTUREHANDLE hTexture;
+ DWORD dwRampSize;
+} D3DMATERIAL, *LPD3DMATERIAL;
+
+typedef struct _D3DMATERIAL7 {
+ union {
+ D3DCOLORVALUE diffuse;
+ D3DCOLORVALUE dcvDiffuse;
+ } DUMMYUNIONNAME;
+ union {
+ D3DCOLORVALUE ambient;
+ D3DCOLORVALUE dcvAmbient;
+ } DUMMYUNIONNAME1;
+ union {
+ D3DCOLORVALUE specular;
+ D3DCOLORVALUE dcvSpecular;
+ } DUMMYUNIONNAME2;
+ union {
+ D3DCOLORVALUE emissive;
+ D3DCOLORVALUE dcvEmissive;
+ } DUMMYUNIONNAME3;
+ union {
+ D3DVALUE power;
+ D3DVALUE dvPower;
+ } DUMMYUNIONNAME4;
+} D3DMATERIAL7, *LPD3DMATERIAL7;
+
+typedef enum {
+ D3DLIGHT_POINT = 1,
+ D3DLIGHT_SPOT = 2,
+ D3DLIGHT_DIRECTIONAL = 3,
+ D3DLIGHT_PARALLELPOINT = 4,
+ D3DLIGHT_GLSPOT = 5,
+ D3DLIGHT_FORCE_DWORD = 0x7fffffff
+} D3DLIGHTTYPE;
+
+typedef struct _D3DLIGHT {
+ DWORD dwSize;
+ D3DLIGHTTYPE dltType;
+ D3DCOLORVALUE dcvColor;
+ D3DVECTOR dvPosition;
+ D3DVECTOR dvDirection;
+ D3DVALUE dvRange;
+ D3DVALUE dvFalloff;
+ D3DVALUE dvAttenuation0;
+ D3DVALUE dvAttenuation1;
+ D3DVALUE dvAttenuation2;
+ D3DVALUE dvTheta;
+ D3DVALUE dvPhi;
+} D3DLIGHT,*LPD3DLIGHT;
+
+typedef struct _D3DLIGHT7 {
+ D3DLIGHTTYPE dltType;
+ D3DCOLORVALUE dcvDiffuse;
+ D3DCOLORVALUE dcvSpecular;
+ D3DCOLORVALUE dcvAmbient;
+ D3DVECTOR dvPosition;
+ D3DVECTOR dvDirection;
+ D3DVALUE dvRange;
+ D3DVALUE dvFalloff;
+ D3DVALUE dvAttenuation0;
+ D3DVALUE dvAttenuation1;
+ D3DVALUE dvAttenuation2;
+ D3DVALUE dvTheta;
+ D3DVALUE dvPhi;
+} D3DLIGHT7, *LPD3DLIGHT7;
+
+#define D3DLIGHT_ACTIVE 0x00000001
+#define D3DLIGHT_NO_SPECULAR 0x00000002
+#define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR) /* 0x3 */
+
+#define D3DLIGHT_RANGE_MAX ((float)sqrt(FLT_MAX))
+
+typedef struct _D3DLIGHT2 {
+ DWORD dwSize;
+ D3DLIGHTTYPE dltType;
+ D3DCOLORVALUE dcvColor;
+ D3DVECTOR dvPosition;
+ D3DVECTOR dvDirection;
+ D3DVALUE dvRange;
+ D3DVALUE dvFalloff;
+ D3DVALUE dvAttenuation0;
+ D3DVALUE dvAttenuation1;
+ D3DVALUE dvAttenuation2;
+ D3DVALUE dvTheta;
+ D3DVALUE dvPhi;
+ DWORD dwFlags;
+} D3DLIGHT2, *LPD3DLIGHT2;
+
+typedef struct _D3DLIGHTDATA {
+ DWORD dwSize;
+ D3DLIGHTINGELEMENT *lpIn;
+ DWORD dwInSize;
+ D3DTLVERTEX *lpOut;
+ DWORD dwOutSize;
+} D3DLIGHTDATA, *LPD3DLIGHTDATA;
+
+#define D3DCOLOR_MONO 1
+#define D3DCOLOR_RGB 2
+
+typedef DWORD D3DCOLORMODEL;
+
+
+#define D3DCLEAR_TARGET 0x00000001
+#define D3DCLEAR_ZBUFFER 0x00000002
+#define D3DCLEAR_STENCIL 0x00000004
+
+typedef enum _D3DOPCODE {
+ D3DOP_POINT = 1,
+ D3DOP_LINE = 2,
+ D3DOP_TRIANGLE = 3,
+ D3DOP_MATRIXLOAD = 4,
+ D3DOP_MATRIXMULTIPLY = 5,
+ D3DOP_STATETRANSFORM = 6,
+ D3DOP_STATELIGHT = 7,
+ D3DOP_STATERENDER = 8,
+ D3DOP_PROCESSVERTICES = 9,
+ D3DOP_TEXTURELOAD = 10,
+ D3DOP_EXIT = 11,
+ D3DOP_BRANCHFORWARD = 12,
+ D3DOP_SPAN = 13,
+ D3DOP_SETSTATUS = 14,
+
+ D3DOP_FORCE_DWORD = 0x7fffffff
+} D3DOPCODE;
+
+typedef struct _D3DINSTRUCTION {
+ BYTE bOpcode;
+ BYTE bSize;
+ WORD wCount;
+} D3DINSTRUCTION, *LPD3DINSTRUCTION;
+
+typedef struct _D3DTEXTURELOAD {
+ D3DTEXTUREHANDLE hDestTexture;
+ D3DTEXTUREHANDLE hSrcTexture;
+} D3DTEXTURELOAD, *LPD3DTEXTURELOAD;
+
+typedef struct _D3DPICKRECORD {
+ BYTE bOpcode;
+ BYTE bPad;
+ DWORD dwOffset;
+ D3DVALUE dvZ;
+} D3DPICKRECORD, *LPD3DPICKRECORD;
+
+typedef enum {
+ D3DSHADE_FLAT = 1,
+ D3DSHADE_GOURAUD = 2,
+ D3DSHADE_PHONG = 3,
+ D3DSHADE_FORCE_DWORD = 0x7fffffff
+} D3DSHADEMODE;
+
+typedef enum {
+ D3DFILL_POINT = 1,
+ D3DFILL_WIREFRAME = 2,
+ D3DFILL_SOLID = 3,
+ D3DFILL_FORCE_DWORD = 0x7fffffff
+} D3DFILLMODE;
+
+typedef struct _D3DLINEPATTERN {
+ WORD wRepeatFactor;
+ WORD wLinePattern;
+} D3DLINEPATTERN;
+
+typedef enum {
+ D3DFILTER_NEAREST = 1,
+ D3DFILTER_LINEAR = 2,
+ D3DFILTER_MIPNEAREST = 3,
+ D3DFILTER_MIPLINEAR = 4,
+ D3DFILTER_LINEARMIPNEAREST = 5,
+ D3DFILTER_LINEARMIPLINEAR = 6,
+ D3DFILTER_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREFILTER;
+
+typedef enum {
+ D3DBLEND_ZERO = 1,
+ D3DBLEND_ONE = 2,
+ D3DBLEND_SRCCOLOR = 3,
+ D3DBLEND_INVSRCCOLOR = 4,
+ D3DBLEND_SRCALPHA = 5,
+ D3DBLEND_INVSRCALPHA = 6,
+ D3DBLEND_DESTALPHA = 7,
+ D3DBLEND_INVDESTALPHA = 8,
+ D3DBLEND_DESTCOLOR = 9,
+ D3DBLEND_INVDESTCOLOR = 10,
+ D3DBLEND_SRCALPHASAT = 11,
+ D3DBLEND_BOTHSRCALPHA = 12,
+ D3DBLEND_BOTHINVSRCALPHA = 13,
+ D3DBLEND_FORCE_DWORD = 0x7fffffff
+} D3DBLEND;
+
+typedef enum {
+ D3DTBLEND_DECAL = 1,
+ D3DTBLEND_MODULATE = 2,
+ D3DTBLEND_DECALALPHA = 3,
+ D3DTBLEND_MODULATEALPHA = 4,
+ D3DTBLEND_DECALMASK = 5,
+ D3DTBLEND_MODULATEMASK = 6,
+ D3DTBLEND_COPY = 7,
+ D3DTBLEND_ADD = 8,
+ D3DTBLEND_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREBLEND;
+
+typedef enum _D3DTEXTUREADDRESS {
+ D3DTADDRESS_WRAP = 1,
+ D3DTADDRESS_MIRROR = 2,
+ D3DTADDRESS_CLAMP = 3,
+ D3DTADDRESS_BORDER = 4,
+ D3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREADDRESS;
+
+typedef enum {
+ D3DCULL_NONE = 1,
+ D3DCULL_CW = 2,
+ D3DCULL_CCW = 3,
+ D3DCULL_FORCE_DWORD = 0x7fffffff
+} D3DCULL;
+
+typedef enum {
+ D3DCMP_NEVER = 1,
+ D3DCMP_LESS = 2,
+ D3DCMP_EQUAL = 3,
+ D3DCMP_LESSEQUAL = 4,
+ D3DCMP_GREATER = 5,
+ D3DCMP_NOTEQUAL = 6,
+ D3DCMP_GREATEREQUAL = 7,
+ D3DCMP_ALWAYS = 8,
+ D3DCMP_FORCE_DWORD = 0x7fffffff
+} D3DCMPFUNC;
+
+typedef enum _D3DSTENCILOP {
+ D3DSTENCILOP_KEEP = 1,
+ D3DSTENCILOP_ZERO = 2,
+ D3DSTENCILOP_REPLACE = 3,
+ D3DSTENCILOP_INCRSAT = 4,
+ D3DSTENCILOP_DECRSAT = 5,
+ D3DSTENCILOP_INVERT = 6,
+ D3DSTENCILOP_INCR = 7,
+ D3DSTENCILOP_DECR = 8,
+ D3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} D3DSTENCILOP;
+
+typedef enum _D3DFOGMODE {
+ D3DFOG_NONE = 0,
+ D3DFOG_EXP = 1,
+ D3DFOG_EXP2 = 2,
+ D3DFOG_LINEAR = 3,
+ D3DFOG_FORCE_DWORD = 0x7fffffff
+} D3DFOGMODE;
+
+typedef enum _D3DZBUFFERTYPE {
+ D3DZB_FALSE = 0,
+ D3DZB_TRUE = 1,
+ D3DZB_USEW = 2,
+ D3DZB_FORCE_DWORD = 0x7fffffff
+} D3DZBUFFERTYPE;
+
+typedef enum _D3DANTIALIASMODE {
+ D3DANTIALIAS_NONE = 0,
+ D3DANTIALIAS_SORTDEPENDENT = 1,
+ D3DANTIALIAS_SORTINDEPENDENT = 2,
+ D3DANTIALIAS_FORCE_DWORD = 0x7fffffff
+} D3DANTIALIASMODE;
+
+typedef enum {
+ D3DVT_VERTEX = 1,
+ D3DVT_LVERTEX = 2,
+ D3DVT_TLVERTEX = 3,
+ D3DVT_FORCE_DWORD = 0x7fffffff
+} D3DVERTEXTYPE;
+
+typedef enum {
+ D3DPT_POINTLIST = 1,
+ D3DPT_LINELIST = 2,
+ D3DPT_LINESTRIP = 3,
+ D3DPT_TRIANGLELIST = 4,
+ D3DPT_TRIANGLESTRIP = 5,
+ D3DPT_TRIANGLEFAN = 6,
+ D3DPT_FORCE_DWORD = 0x7fffffff
+} D3DPRIMITIVETYPE;
+
+#define D3DSTATE_OVERRIDE_BIAS 256
+
+#define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))
+
+typedef enum _D3DTRANSFORMSTATETYPE {
+ D3DTRANSFORMSTATE_WORLD = 1,
+ D3DTRANSFORMSTATE_VIEW = 2,
+ D3DTRANSFORMSTATE_PROJECTION = 3,
+ D3DTRANSFORMSTATE_WORLD1 = 4,
+ D3DTRANSFORMSTATE_WORLD2 = 5,
+ D3DTRANSFORMSTATE_WORLD3 = 6,
+ D3DTRANSFORMSTATE_TEXTURE0 = 16,
+ D3DTRANSFORMSTATE_TEXTURE1 = 17,
+ D3DTRANSFORMSTATE_TEXTURE2 = 18,
+ D3DTRANSFORMSTATE_TEXTURE3 = 19,
+ D3DTRANSFORMSTATE_TEXTURE4 = 20,
+ D3DTRANSFORMSTATE_TEXTURE5 = 21,
+ D3DTRANSFORMSTATE_TEXTURE6 = 22,
+ D3DTRANSFORMSTATE_TEXTURE7 = 23,
+ D3DTRANSFORMSTATE_FORCE_DWORD = 0x7fffffff
+} D3DTRANSFORMSTATETYPE;
+
+typedef enum {
+ D3DLIGHTSTATE_MATERIAL = 1,
+ D3DLIGHTSTATE_AMBIENT = 2,
+ D3DLIGHTSTATE_COLORMODEL = 3,
+ D3DLIGHTSTATE_FOGMODE = 4,
+ D3DLIGHTSTATE_FOGSTART = 5,
+ D3DLIGHTSTATE_FOGEND = 6,
+ D3DLIGHTSTATE_FOGDENSITY = 7,
+ D3DLIGHTSTATE_COLORVERTEX = 8,
+ D3DLIGHTSTATE_FORCE_DWORD = 0x7fffffff
+} D3DLIGHTSTATETYPE;
+
+typedef enum {
+ D3DRENDERSTATE_TEXTUREHANDLE = 1,
+ D3DRENDERSTATE_ANTIALIAS = 2,
+ D3DRENDERSTATE_TEXTUREADDRESS = 3,
+ D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,
+ D3DRENDERSTATE_WRAPU = 5,
+ D3DRENDERSTATE_WRAPV = 6,
+ D3DRENDERSTATE_ZENABLE = 7,
+ D3DRENDERSTATE_FILLMODE = 8,
+ D3DRENDERSTATE_SHADEMODE = 9,
+ D3DRENDERSTATE_LINEPATTERN = 10,
+ D3DRENDERSTATE_MONOENABLE = 11,
+ D3DRENDERSTATE_ROP2 = 12,
+ D3DRENDERSTATE_PLANEMASK = 13,
+ D3DRENDERSTATE_ZWRITEENABLE = 14,
+ D3DRENDERSTATE_ALPHATESTENABLE = 15,
+ D3DRENDERSTATE_LASTPIXEL = 16,
+ D3DRENDERSTATE_TEXTUREMAG = 17,
+ D3DRENDERSTATE_TEXTUREMIN = 18,
+ D3DRENDERSTATE_SRCBLEND = 19,
+ D3DRENDERSTATE_DESTBLEND = 20,
+ D3DRENDERSTATE_TEXTUREMAPBLEND = 21,
+ D3DRENDERSTATE_CULLMODE = 22,
+ D3DRENDERSTATE_ZFUNC = 23,
+ D3DRENDERSTATE_ALPHAREF = 24,
+ D3DRENDERSTATE_ALPHAFUNC = 25,
+ D3DRENDERSTATE_DITHERENABLE = 26,
+ D3DRENDERSTATE_ALPHABLENDENABLE = 27,
+ D3DRENDERSTATE_FOGENABLE = 28,
+ D3DRENDERSTATE_SPECULARENABLE = 29,
+ D3DRENDERSTATE_ZVISIBLE = 30,
+ D3DRENDERSTATE_SUBPIXEL = 31,
+ D3DRENDERSTATE_SUBPIXELX = 32,
+ D3DRENDERSTATE_STIPPLEDALPHA = 33,
+ D3DRENDERSTATE_FOGCOLOR = 34,
+ D3DRENDERSTATE_FOGTABLEMODE = 35,
+ D3DRENDERSTATE_FOGTABLESTART = 36,
+ D3DRENDERSTATE_FOGTABLEEND = 37,
+ D3DRENDERSTATE_FOGTABLEDENSITY = 38,
+ D3DRENDERSTATE_FOGSTART = 36,
+ D3DRENDERSTATE_FOGEND = 37,
+ D3DRENDERSTATE_FOGDENSITY = 38,
+ D3DRENDERSTATE_STIPPLEENABLE = 39,
+ D3DRENDERSTATE_EDGEANTIALIAS = 40,
+ D3DRENDERSTATE_COLORKEYENABLE = 41,
+ D3DRENDERSTATE_BORDERCOLOR = 43,
+ D3DRENDERSTATE_TEXTUREADDRESSU = 44,
+ D3DRENDERSTATE_TEXTUREADDRESSV = 45,
+ D3DRENDERSTATE_MIPMAPLODBIAS = 46,
+ D3DRENDERSTATE_ZBIAS = 47,
+ D3DRENDERSTATE_RANGEFOGENABLE = 48,
+ D3DRENDERSTATE_ANISOTROPY = 49,
+ D3DRENDERSTATE_FLUSHBATCH = 50,
+ D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT = 51,
+
+ D3DRENDERSTATE_STENCILENABLE = 52,
+ D3DRENDERSTATE_STENCILFAIL = 53,
+ D3DRENDERSTATE_STENCILZFAIL = 54,
+ D3DRENDERSTATE_STENCILPASS = 55,
+ D3DRENDERSTATE_STENCILFUNC = 56,
+ D3DRENDERSTATE_STENCILREF = 57,
+ D3DRENDERSTATE_STENCILMASK = 58,
+ D3DRENDERSTATE_STENCILWRITEMASK = 59,
+ D3DRENDERSTATE_TEXTUREFACTOR = 60,
+
+ D3DRENDERSTATE_STIPPLEPATTERN00 = 64,
+ D3DRENDERSTATE_STIPPLEPATTERN01 = 65,
+ D3DRENDERSTATE_STIPPLEPATTERN02 = 66,
+ D3DRENDERSTATE_STIPPLEPATTERN03 = 67,
+ D3DRENDERSTATE_STIPPLEPATTERN04 = 68,
+ D3DRENDERSTATE_STIPPLEPATTERN05 = 69,
+ D3DRENDERSTATE_STIPPLEPATTERN06 = 70,
+ D3DRENDERSTATE_STIPPLEPATTERN07 = 71,
+ D3DRENDERSTATE_STIPPLEPATTERN08 = 72,
+ D3DRENDERSTATE_STIPPLEPATTERN09 = 73,
+ D3DRENDERSTATE_STIPPLEPATTERN10 = 74,
+ D3DRENDERSTATE_STIPPLEPATTERN11 = 75,
+ D3DRENDERSTATE_STIPPLEPATTERN12 = 76,
+ D3DRENDERSTATE_STIPPLEPATTERN13 = 77,
+ D3DRENDERSTATE_STIPPLEPATTERN14 = 78,
+ D3DRENDERSTATE_STIPPLEPATTERN15 = 79,
+ D3DRENDERSTATE_STIPPLEPATTERN16 = 80,
+ D3DRENDERSTATE_STIPPLEPATTERN17 = 81,
+ D3DRENDERSTATE_STIPPLEPATTERN18 = 82,
+ D3DRENDERSTATE_STIPPLEPATTERN19 = 83,
+ D3DRENDERSTATE_STIPPLEPATTERN20 = 84,
+ D3DRENDERSTATE_STIPPLEPATTERN21 = 85,
+ D3DRENDERSTATE_STIPPLEPATTERN22 = 86,
+ D3DRENDERSTATE_STIPPLEPATTERN23 = 87,
+ D3DRENDERSTATE_STIPPLEPATTERN24 = 88,
+ D3DRENDERSTATE_STIPPLEPATTERN25 = 89,
+ D3DRENDERSTATE_STIPPLEPATTERN26 = 90,
+ D3DRENDERSTATE_STIPPLEPATTERN27 = 91,
+ D3DRENDERSTATE_STIPPLEPATTERN28 = 92,
+ D3DRENDERSTATE_STIPPLEPATTERN29 = 93,
+ D3DRENDERSTATE_STIPPLEPATTERN30 = 94,
+ D3DRENDERSTATE_STIPPLEPATTERN31 = 95,
+
+ D3DRENDERSTATE_WRAP0 = 128,
+ D3DRENDERSTATE_WRAP1 = 129,
+ D3DRENDERSTATE_WRAP2 = 130,
+ D3DRENDERSTATE_WRAP3 = 131,
+ D3DRENDERSTATE_WRAP4 = 132,
+ D3DRENDERSTATE_WRAP5 = 133,
+ D3DRENDERSTATE_WRAP6 = 134,
+ D3DRENDERSTATE_WRAP7 = 135,
+ D3DRENDERSTATE_CLIPPING = 136,
+ D3DRENDERSTATE_LIGHTING = 137,
+ D3DRENDERSTATE_EXTENTS = 138,
+ D3DRENDERSTATE_AMBIENT = 139,
+ D3DRENDERSTATE_FOGVERTEXMODE = 140,
+ D3DRENDERSTATE_COLORVERTEX = 141,
+ D3DRENDERSTATE_LOCALVIEWER = 142,
+ D3DRENDERSTATE_NORMALIZENORMALS = 143,
+ D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,
+ D3DRENDERSTATE_DIFFUSEMATERIALSOURCE = 145,
+ D3DRENDERSTATE_SPECULARMATERIALSOURCE = 146,
+ D3DRENDERSTATE_AMBIENTMATERIALSOURCE = 147,
+ D3DRENDERSTATE_EMISSIVEMATERIALSOURCE = 148,
+ D3DRENDERSTATE_VERTEXBLEND = 151,
+ D3DRENDERSTATE_CLIPPLANEENABLE = 152,
+
+ D3DRENDERSTATE_FORCE_DWORD = 0x7fffffff
+
+ /* FIXME: We have some retired values that are being reused for DirectX 7 */
+} D3DRENDERSTATETYPE;
+
+typedef enum _D3DMATERIALCOLORSOURCE
+{
+ D3DMCS_MATERIAL = 0,
+ D3DMCS_COLOR1 = 1,
+ D3DMCS_COLOR2 = 2,
+ D3DMCS_FORCE_DWORD = 0x7fffffff
+} D3DMATERIALCOLORSOURCE;
+
+#define D3DRENDERSTATE_BLENDENABLE D3DRENDERSTATE_ALPHABLENDENABLE
+#define D3DRENDERSTATE_WRAPBIAS __MSABI_LONG(128U)
+#define D3DWRAP_U __MSABI_LONG(0x00000001)
+#define D3DWRAP_V __MSABI_LONG(0x00000002)
+
+#define D3DWRAPCOORD_0 __MSABI_LONG(0x00000001)
+#define D3DWRAPCOORD_1 __MSABI_LONG(0x00000002)
+#define D3DWRAPCOORD_2 __MSABI_LONG(0x00000004)
+#define D3DWRAPCOORD_3 __MSABI_LONG(0x00000008)
+
+#define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
+
+typedef struct _D3DSTATE {
+ union {
+ D3DTRANSFORMSTATETYPE dtstTransformStateType;
+ D3DLIGHTSTATETYPE dlstLightStateType;
+ D3DRENDERSTATETYPE drstRenderStateType;
+ } DUMMYUNIONNAME1;
+ union {
+ DWORD dwArg[1];
+ D3DVALUE dvArg[1];
+ } DUMMYUNIONNAME2;
+} D3DSTATE, *LPD3DSTATE;
+
+typedef struct _D3DMATRIXLOAD {
+ D3DMATRIXHANDLE hDestMatrix;
+ D3DMATRIXHANDLE hSrcMatrix;
+} D3DMATRIXLOAD, *LPD3DMATRIXLOAD;
+
+typedef struct _D3DMATRIXMULTIPLY {
+ D3DMATRIXHANDLE hDestMatrix;
+ D3DMATRIXHANDLE hSrcMatrix1;
+ D3DMATRIXHANDLE hSrcMatrix2;
+} D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;
+
+typedef struct _D3DPROCESSVERTICES {
+ DWORD dwFlags;
+ WORD wStart;
+ WORD wDest;
+ DWORD dwCount;
+ DWORD dwReserved;
+} D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;
+
+#define D3DPROCESSVERTICES_TRANSFORMLIGHT __MSABI_LONG(0x00000000)
+#define D3DPROCESSVERTICES_TRANSFORM __MSABI_LONG(0x00000001)
+#define D3DPROCESSVERTICES_COPY __MSABI_LONG(0x00000002)
+#define D3DPROCESSVERTICES_OPMASK __MSABI_LONG(0x00000007)
+
+#define D3DPROCESSVERTICES_UPDATEEXTENTS __MSABI_LONG(0x00000008)
+#define D3DPROCESSVERTICES_NOCOLOR __MSABI_LONG(0x00000010)
+
+typedef enum _D3DTEXTURESTAGESTATETYPE
+{
+ D3DTSS_COLOROP = 1,
+ D3DTSS_COLORARG1 = 2,
+ D3DTSS_COLORARG2 = 3,
+ D3DTSS_ALPHAOP = 4,
+ D3DTSS_ALPHAARG1 = 5,
+ D3DTSS_ALPHAARG2 = 6,
+ D3DTSS_BUMPENVMAT00 = 7,
+ D3DTSS_BUMPENVMAT01 = 8,
+ D3DTSS_BUMPENVMAT10 = 9,
+ D3DTSS_BUMPENVMAT11 = 10,
+ D3DTSS_TEXCOORDINDEX = 11,
+ D3DTSS_ADDRESS = 12,
+ D3DTSS_ADDRESSU = 13,
+ D3DTSS_ADDRESSV = 14,
+ D3DTSS_BORDERCOLOR = 15,
+ D3DTSS_MAGFILTER = 16,
+ D3DTSS_MINFILTER = 17,
+ D3DTSS_MIPFILTER = 18,
+ D3DTSS_MIPMAPLODBIAS = 19,
+ D3DTSS_MAXMIPLEVEL = 20,
+ D3DTSS_MAXANISOTROPY = 21,
+ D3DTSS_BUMPENVLSCALE = 22,
+ D3DTSS_BUMPENVLOFFSET = 23,
+ D3DTSS_TEXTURETRANSFORMFLAGS = 24,
+ D3DTSS_FORCE_DWORD = 0x7fffffff
+} D3DTEXTURESTAGESTATETYPE;
+
+#define D3DTSS_TCI_PASSTHRU 0x00000000
+#define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000
+#define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000
+#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000
+
+typedef enum _D3DTEXTUREOP
+{
+ D3DTOP_DISABLE = 1,
+ D3DTOP_SELECTARG1 = 2,
+ D3DTOP_SELECTARG2 = 3,
+
+ D3DTOP_MODULATE = 4,
+ D3DTOP_MODULATE2X = 5,
+ D3DTOP_MODULATE4X = 6,
+
+ D3DTOP_ADD = 7,
+ D3DTOP_ADDSIGNED = 8,
+ D3DTOP_ADDSIGNED2X = 9,
+ D3DTOP_SUBTRACT = 10,
+ D3DTOP_ADDSMOOTH = 11,
+
+ D3DTOP_BLENDDIFFUSEALPHA = 12,
+ D3DTOP_BLENDTEXTUREALPHA = 13,
+ D3DTOP_BLENDFACTORALPHA = 14,
+ D3DTOP_BLENDTEXTUREALPHAPM = 15,
+ D3DTOP_BLENDCURRENTALPHA = 16,
+
+ D3DTOP_PREMODULATE = 17,
+ D3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+ D3DTOP_MODULATECOLOR_ADDALPHA = 19,
+ D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+ D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+
+ D3DTOP_BUMPENVMAP = 22,
+ D3DTOP_BUMPENVMAPLUMINANCE = 23,
+ D3DTOP_DOTPRODUCT3 = 24,
+
+ D3DTOP_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREOP;
+
+#define D3DTA_SELECTMASK 0x0000000f
+#define D3DTA_DIFFUSE 0x00000000
+#define D3DTA_CURRENT 0x00000001
+#define D3DTA_TEXTURE 0x00000002
+#define D3DTA_TFACTOR 0x00000003
+#define D3DTA_SPECULAR 0x00000004
+#define D3DTA_COMPLEMENT 0x00000010
+#define D3DTA_ALPHAREPLICATE 0x00000020
+
+typedef enum _D3DTEXTUREMAGFILTER
+{
+ D3DTFG_POINT = 1,
+ D3DTFG_LINEAR = 2,
+ D3DTFG_FLATCUBIC = 3,
+ D3DTFG_GAUSSIANCUBIC = 4,
+ D3DTFG_ANISOTROPIC = 5,
+ D3DTFG_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREMAGFILTER;
+
+typedef enum _D3DTEXTUREMINFILTER
+{
+ D3DTFN_POINT = 1,
+ D3DTFN_LINEAR = 2,
+ D3DTFN_ANISOTROPIC = 3,
+ D3DTFN_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREMINFILTER;
+
+typedef enum _D3DTEXTUREMIPFILTER
+{
+ D3DTFP_NONE = 1,
+ D3DTFP_POINT = 2,
+ D3DTFP_LINEAR = 3,
+ D3DTFP_FORCE_DWORD = 0x7fffffff
+} D3DTEXTUREMIPFILTER;
+
+#define D3DTRIFLAG_START __MSABI_LONG(0x00000000)
+#define D3DTRIFLAG_STARTFLAT(len) (len)
+#define D3DTRIFLAG_ODD __MSABI_LONG(0x0000001e)
+#define D3DTRIFLAG_EVEN __MSABI_LONG(0x0000001f)
+
+#define D3DTRIFLAG_EDGEENABLE1 __MSABI_LONG(0x00000100)
+#define D3DTRIFLAG_EDGEENABLE2 __MSABI_LONG(0x00000200)
+#define D3DTRIFLAG_EDGEENABLE3 __MSABI_LONG(0x00000400)
+#define D3DTRIFLAG_EDGEENABLETRIANGLE \
+ (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)
+
+typedef struct _D3DTRIANGLE {
+ union {
+ WORD v1;
+ WORD wV1;
+ } DUMMYUNIONNAME1;
+ union {
+ WORD v2;
+ WORD wV2;
+ } DUMMYUNIONNAME2;
+ union {
+ WORD v3;
+ WORD wV3;
+ } DUMMYUNIONNAME3;
+ WORD wFlags;
+} D3DTRIANGLE, *LPD3DTRIANGLE;
+
+typedef struct _D3DLINE {
+ union {
+ WORD v1;
+ WORD wV1;
+ } DUMMYUNIONNAME1;
+ union {
+ WORD v2;
+ WORD wV2;
+ } DUMMYUNIONNAME2;
+} D3DLINE, *LPD3DLINE;
+
+typedef struct _D3DSPAN {
+ WORD wCount;
+ WORD wFirst;
+} D3DSPAN, *LPD3DSPAN;
+
+typedef struct _D3DPOINT {
+ WORD wCount;
+ WORD wFirst;
+} D3DPOINT, *LPD3DPOINT;
+
+typedef struct _D3DBRANCH {
+ DWORD dwMask;
+ DWORD dwValue;
+ BOOL bNegate;
+ DWORD dwOffset;
+} D3DBRANCH, *LPD3DBRANCH;
+
+typedef struct _D3DSTATUS {
+ DWORD dwFlags;
+ DWORD dwStatus;
+ D3DRECT drExtent;
+} D3DSTATUS, *LPD3DSTATUS;
+
+#define D3DSETSTATUS_STATUS __MSABI_LONG(0x00000001)
+#define D3DSETSTATUS_EXTENTS __MSABI_LONG(0x00000002)
+#define D3DSETSTATUS_ALL (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)
+
+typedef struct _D3DCLIPSTATUS {
+ DWORD dwFlags;
+ DWORD dwStatus;
+ float minx, maxx;
+ float miny, maxy;
+ float minz, maxz;
+} D3DCLIPSTATUS, *LPD3DCLIPSTATUS;
+
+#define D3DCLIPSTATUS_STATUS __MSABI_LONG(0x00000001)
+#define D3DCLIPSTATUS_EXTENTS2 __MSABI_LONG(0x00000002)
+#define D3DCLIPSTATUS_EXTENTS3 __MSABI_LONG(0x00000004)
+
+typedef struct {
+ DWORD dwSize;
+ DWORD dwTrianglesDrawn;
+ DWORD dwLinesDrawn;
+ DWORD dwPointsDrawn;
+ DWORD dwSpansDrawn;
+ DWORD dwVerticesProcessed;
+} D3DSTATS, *LPD3DSTATS;
+
+#define D3DEXECUTE_CLIPPED __MSABI_LONG(0x00000001)
+#define D3DEXECUTE_UNCLIPPED __MSABI_LONG(0x00000002)
+
+typedef struct _D3DEXECUTEDATA {
+ DWORD dwSize;
+ DWORD dwVertexOffset;
+ DWORD dwVertexCount;
+ DWORD dwInstructionOffset;
+ DWORD dwInstructionLength;
+ DWORD dwHVertexOffset;
+ D3DSTATUS dsStatus;
+} D3DEXECUTEDATA, *LPD3DEXECUTEDATA;
+
+#define D3DPAL_FREE 0x00
+#define D3DPAL_READONLY 0x40
+#define D3DPAL_RESERVED 0x80
+
+typedef struct _D3DVERTEXBUFFERDESC {
+ DWORD dwSize;
+ DWORD dwCaps;
+ DWORD dwFVF;
+ DWORD dwNumVertices;
+} D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;
+
+#define D3DVBCAPS_SYSTEMMEMORY __MSABI_LONG(0x00000800)
+#define D3DVBCAPS_WRITEONLY __MSABI_LONG(0x00010000)
+#define D3DVBCAPS_OPTIMIZED __MSABI_LONG(0x80000000)
+#define D3DVBCAPS_DONOTCLIP __MSABI_LONG(0x00000001)
+
+#define D3DVOP_LIGHT (1 << 10)
+#define D3DVOP_TRANSFORM (1 << 0)
+#define D3DVOP_CLIP (1 << 2)
+#define D3DVOP_EXTENTS (1 << 3)
+
+#define D3DMAXNUMVERTICES ((1<<16) - 1)
+
+#define D3DMAXNUMPRIMITIVES ((1<<16) - 1)
+
+#define D3DPV_DONOTCOPYDATA (1 << 0)
+
+#define D3DFVF_RESERVED0 0x001
+#define D3DFVF_POSITION_MASK 0x00E
+#define D3DFVF_XYZ 0x002
+#define D3DFVF_XYZRHW 0x004
+#define D3DFVF_XYZB1 0x006
+#define D3DFVF_XYZB2 0x008
+#define D3DFVF_XYZB3 0x00a
+#define D3DFVF_XYZB4 0x00c
+#define D3DFVF_XYZB5 0x00e
+
+#define D3DFVF_NORMAL 0x010
+#define D3DFVF_RESERVED1 0x020
+#define D3DFVF_DIFFUSE 0x040
+#define D3DFVF_SPECULAR 0x080
+#define D3DFVF_TEXCOUNT_MASK 0xf00
+#define D3DFVF_TEXCOUNT_SHIFT 8
+#define D3DFVF_TEX0 0x000
+#define D3DFVF_TEX1 0x100
+#define D3DFVF_TEX2 0x200
+#define D3DFVF_TEX3 0x300
+#define D3DFVF_TEX4 0x400
+#define D3DFVF_TEX5 0x500
+#define D3DFVF_TEX6 0x600
+#define D3DFVF_TEX7 0x700
+#define D3DFVF_TEX8 0x800
+
+#define D3DFVF_RESERVED2 0xf000
+
+#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )
+#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \
+ D3DFVF_SPECULAR | D3DFVF_TEX1 )
+#define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \
+ D3DFVF_TEX1 )
+
+typedef struct _D3DDP_PTRSTRIDE
+{
+ void *lpvData;
+ DWORD dwStride;
+} D3DDP_PTRSTRIDE;
+
+#define D3DDP_MAXTEXCOORD 8
+
+typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA {
+ D3DDP_PTRSTRIDE position;
+ D3DDP_PTRSTRIDE normal;
+ D3DDP_PTRSTRIDE diffuse;
+ D3DDP_PTRSTRIDE specular;
+ D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];
+} D3DDRAWPRIMITIVESTRIDEDDATA ,*LPD3DDRAWPRIMITIVESTRIDEDDATA;
+
+#define D3DVIS_INSIDE_FRUSTUM 0
+#define D3DVIS_INTERSECT_FRUSTUM 1
+#define D3DVIS_OUTSIDE_FRUSTUM 2
+#define D3DVIS_INSIDE_LEFT 0
+#define D3DVIS_INTERSECT_LEFT (1 << 2)
+#define D3DVIS_OUTSIDE_LEFT (2 << 2)
+#define D3DVIS_INSIDE_RIGHT 0
+#define D3DVIS_INTERSECT_RIGHT (1 << 4)
+#define D3DVIS_OUTSIDE_RIGHT (2 << 4)
+#define D3DVIS_INSIDE_TOP 0
+#define D3DVIS_INTERSECT_TOP (1 << 6)
+#define D3DVIS_OUTSIDE_TOP (2 << 6)
+#define D3DVIS_INSIDE_BOTTOM 0
+#define D3DVIS_INTERSECT_BOTTOM (1 << 8)
+#define D3DVIS_OUTSIDE_BOTTOM (2 << 8)
+#define D3DVIS_INSIDE_NEAR 0
+#define D3DVIS_INTERSECT_NEAR (1 << 10)
+#define D3DVIS_OUTSIDE_NEAR (2 << 10)
+#define D3DVIS_INSIDE_FAR 0
+#define D3DVIS_INTERSECT_FAR (1 << 12)
+#define D3DVIS_OUTSIDE_FAR (2 << 12)
+
+#define D3DVIS_MASK_FRUSTUM (3 << 0)
+#define D3DVIS_MASK_LEFT (3 << 2)
+#define D3DVIS_MASK_RIGHT (3 << 4)
+#define D3DVIS_MASK_TOP (3 << 6)
+#define D3DVIS_MASK_BOTTOM (3 << 8)
+#define D3DVIS_MASK_NEAR (3 << 10)
+#define D3DVIS_MASK_FAR (3 << 12)
+
+#define D3DDEVINFOID_TEXTUREMANAGER 1
+#define D3DDEVINFOID_D3DTEXTUREMANAGER 2
+#define D3DDEVINFOID_TEXTURING 3
+
+typedef enum _D3DSTATEBLOCKTYPE
+{
+ D3DSBT_ALL = 1,
+ D3DSBT_PIXELSTATE = 2,
+ D3DSBT_VERTEXSTATE = 3,
+ D3DSBT_FORCE_DWORD = 0xffffffff
+} D3DSTATEBLOCKTYPE;
+
+typedef enum _D3DVERTEXBLENDFLAGS
+{
+ D3DVBLEND_DISABLE = 0,
+ D3DVBLEND_1WEIGHT = 1,
+ D3DVBLEND_2WEIGHTS = 2,
+ D3DVBLEND_3WEIGHTS = 3,
+} D3DVERTEXBLENDFLAGS;
+
+typedef enum _D3DTEXTURETRANSFORMFLAGS {
+ D3DTTFF_DISABLE = 0,
+ D3DTTFF_COUNT1 = 1,
+ D3DTTFF_COUNT2 = 2,
+ D3DTTFF_COUNT3 = 3,
+ D3DTTFF_COUNT4 = 4,
+ D3DTTFF_PROJECTED = 256,
+ D3DTTFF_FORCE_DWORD = 0x7fffffff
+} D3DTEXTURETRANSFORMFLAGS;
+
+#define D3DFVF_TEXTUREFORMAT2 0
+#define D3DFVF_TEXTUREFORMAT1 3
+#define D3DFVF_TEXTUREFORMAT3 1
+#define D3DFVF_TEXTUREFORMAT4 2
+
+#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)
+#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
new file mode 100644
index 00000000..8e49ee66
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dvec.inl
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2000 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DVEC_INL
+#define __WINE_D3DVEC_INL
+
+#include <math.h>
+
+/*** constructors ***/
+
+inline _D3DVECTOR::_D3DVECTOR(D3DVALUE f)
+{
+ x = y = z = f;
+}
+
+inline _D3DVECTOR::_D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z)
+{
+ x = _x; y = _y; z = _z;
+}
+
+/*** assignment operators ***/
+
+inline _D3DVECTOR& _D3DVECTOR::operator += (const _D3DVECTOR& v)
+{
+ x += v.x; y += v.y; z += v.z;
+ return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator -= (const _D3DVECTOR& v)
+{
+ x -= v.x; y -= v.y; z -= v.z;
+ return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator *= (const _D3DVECTOR& v)
+{
+ x *= v.x; y *= v.y; z *= v.z;
+ return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator /= (const _D3DVECTOR& v)
+{
+ x /= v.x; y /= v.y; z /= v.z;
+ return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator *= (D3DVALUE s)
+{
+ x *= s; y *= s; z *= s;
+ return *this;
+}
+
+inline _D3DVECTOR& _D3DVECTOR::operator /= (D3DVALUE s)
+{
+ x /= s; y /= s; z /= s;
+ return *this;
+}
+
+/*** unary operators ***/
+
+inline _D3DVECTOR operator + (const _D3DVECTOR& v)
+{
+ return v;
+}
+
+inline _D3DVECTOR operator - (const _D3DVECTOR& v)
+{
+ return _D3DVECTOR(-v.x, -v.y, -v.z);
+}
+
+/*** binary operators ***/
+
+inline _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+ return _D3DVECTOR(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z);
+}
+
+inline _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+ return _D3DVECTOR(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z);
+}
+
+inline _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s)
+{
+ return _D3DVECTOR(v.x*s, v.y*s, v.z*s);
+}
+
+inline _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v)
+{
+ return _D3DVECTOR(v.x*s, v.y*s, v.z*s);
+}
+
+inline _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s)
+{
+ return _D3DVECTOR(v.x/s, v.y/s, v.z/s);
+}
+
+inline D3DVALUE SquareMagnitude(const _D3DVECTOR& v)
+{
+ return v.x*v.x + v.y*v.y + v.z*v.z; /* DotProduct(v, v) */
+}
+
+inline D3DVALUE Magnitude(const _D3DVECTOR& v)
+{
+ return sqrt(SquareMagnitude(v));
+}
+
+inline _D3DVECTOR Normalize(const _D3DVECTOR& v)
+{
+ return v / Magnitude(v);
+}
+
+inline D3DVALUE DotProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+ return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
+}
+
+inline _D3DVECTOR CrossProduct(const _D3DVECTOR& v1, const _D3DVECTOR& v2)
+{
+ _D3DVECTOR res;
+ /* this is a left-handed cross product, right? */
+ res.x = v1.y * v2.z - v1.z * v2.y;
+ res.y = v1.z * v2.x - v1.x * v2.z;
+ res.z = v1.x * v2.y - v1.y * v2.x;
+ return res;
+}
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h
new file mode 100644
index 00000000..ca15cf48
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2007 David Adam
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DX9_H__
+#define __D3DX9_H__
+
+#include <limits.h>
+
+#define D3DX_DEFAULT ((UINT)-1)
+#define D3DX_DEFAULT_NONPOW2 ((UINT)-2)
+#define D3DX_DEFAULT_FLOAT FLT_MAX
+#define D3DX_FROM_FILE ((UINT)-3)
+#define D3DFMT_FROM_FILE ((D3DFORMAT)-3)
+
+#include "d3d9.h"
+#include "d3dx9math.h"
+#include "d3dx9core.h"
+#include "d3dx9xof.h"
+#include "d3dx9mesh.h"
+#include "d3dx9shader.h"
+#include "d3dx9effect.h"
+#include "d3dx9shape.h"
+#include "d3dx9anim.h"
+#include "d3dx9tex.h"
+
+#define _FACDD 0x876
+#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code)
+
+enum _D3DXERR {
+ D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900),
+ D3DXERR_INVALIDMESH = MAKE_DDHRESULT(2901),
+ D3DXERR_CANNOTATTRSORT = MAKE_DDHRESULT(2902),
+ D3DXERR_SKINNINGNOTSUPPORTED = MAKE_DDHRESULT(2903),
+ D3DXERR_TOOMANYINFLUENCES = MAKE_DDHRESULT(2904),
+ D3DXERR_INVALIDDATA = MAKE_DDHRESULT(2905),
+ D3DXERR_LOADEDMESHASNODATA = MAKE_DDHRESULT(2906),
+ D3DXERR_DUPLICATENAMEDFRAGMENT = MAKE_DDHRESULT(2907),
+ D3DXERR_CANNOTREMOVELASTITEM = MAKE_DDHRESULT(2908),
+};
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h
new file mode 100644
index 00000000..5ef58c85
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9anim.h
@@ -0,0 +1,417 @@
+/*
+ * Copyright 2011 Dylan Smith
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DX9ANIM_H
+#define __WINE_D3DX9ANIM_H
+
+DEFINE_GUID(IID_ID3DXAnimationSet, 0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9);
+DEFINE_GUID(IID_ID3DXKeyframedAnimationSet, 0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf);
+DEFINE_GUID(IID_ID3DXCompressedAnimationSet, 0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c);
+DEFINE_GUID(IID_ID3DXAnimationController, 0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e);
+
+typedef enum _D3DXMESHDATATYPE
+{
+ D3DXMESHTYPE_MESH = 1,
+ D3DXMESHTYPE_PMESH = 2,
+ D3DXMESHTYPE_PATCHMESH = 3,
+ D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff,
+} D3DXMESHDATATYPE;
+
+typedef enum _D3DXCALLBACK_SEARCH_FLAGS
+{
+ D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x00000001,
+ D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION = 0x00000002,
+ D3DXCALLBACK_SEARCH_FORCE_DWORD = 0x7fffffff,
+} D3DXCALLBACK_SEARCH_FLAGS;
+
+typedef enum _D3DXPLAYBACK_TYPE
+{
+ D3DXPLAY_LOOP = 0,
+ D3DXPLAY_ONCE = 1,
+ D3DXPLAY_PINGPONG = 2,
+ D3DXPLAY_FORCE_DWORD = 0x7fffffff,
+} D3DXPLAYBACK_TYPE;
+
+typedef enum _D3DXCOMPRESSION_FLAGS
+{
+ D3DXCOMPRESSION_DEFAULT = 0x00000000,
+ D3DXCOMPRESSION_FORCE_DWORD = 0x7fffffff,
+} D3DXCOMPRESSION_FLAGS;
+
+typedef enum _D3DXPRIORITY_TYPE
+{
+ D3DXPRIORITY_LOW = 0,
+ D3DXPRIORITY_HIGH = 1,
+ D3DXPRIORITY_FORCE_DWORD = 0x7fffffff,
+} D3DXPRIORITY_TYPE;
+
+typedef enum _D3DXEVENT_TYPE
+{
+ D3DXEVENT_TRACKSPEED = 0,
+ D3DXEVENT_TRACKWEIGHT = 1,
+ D3DXEVENT_TRACKPOSITION = 2,
+ D3DXEVENT_TRACKENABLE = 3,
+ D3DXEVENT_PRIORITYBLEND = 4,
+ D3DXEVENT_FORCE_DWORD = 0x7fffffff,
+} D3DXEVENT_TYPE;
+
+typedef enum _D3DXTRANSITION_TYPE
+{
+ D3DXTRANSITION_LINEAR = 0,
+ D3DXTRANSITION_EASEINEASEOUT = 1,
+ D3DXTRANSITION_FORCE_DWORD = 0x7fffffff,
+} D3DXTRANSITION_TYPE;
+
+
+typedef struct _D3DXMESHDATA
+{
+ D3DXMESHDATATYPE Type;
+
+ union
+ {
+ ID3DXMesh *pMesh;
+ ID3DXPMesh *pPMesh;
+ ID3DXPatchMesh *pPatchMesh;
+ } DUMMYUNIONNAME;
+} D3DXMESHDATA, *LPD3DXMESHDATA;
+
+typedef struct _D3DXMESHCONTAINER
+{
+ char *Name;
+ D3DXMESHDATA MeshData;
+ LPD3DXMATERIAL pMaterials;
+ LPD3DXEFFECTINSTANCE pEffects;
+ DWORD NumMaterials;
+ DWORD *pAdjacency;
+ ID3DXSkinInfo *pSkinInfo;
+ struct _D3DXMESHCONTAINER *pNextMeshContainer;
+} D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER;
+
+typedef struct _D3DXFRAME
+{
+ char *Name;
+ D3DXMATRIX TransformationMatrix;
+ LPD3DXMESHCONTAINER pMeshContainer;
+ struct _D3DXFRAME *pFrameSibling;
+ struct _D3DXFRAME *pFrameFirstChild;
+} D3DXFRAME, *LPD3DXFRAME;
+
+typedef struct _D3DXKEY_VECTOR3
+{
+ FLOAT Time;
+ D3DXVECTOR3 Value;
+} D3DXKEY_VECTOR3, *LPD3DXKEY_VECTOR3;
+
+typedef struct _D3DXKEY_QUATERNION
+{
+ FLOAT Time;
+ D3DXQUATERNION Value;
+} D3DXKEY_QUATERNION, *LPD3DXKEY_QUATERNION;
+
+typedef struct _D3DXKEY_CALLBACK
+{
+ float Time;
+ void *pCallbackData;
+} D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK;
+
+typedef struct _D3DXTRACK_DESC
+{
+ D3DXPRIORITY_TYPE Priority;
+ FLOAT Weight;
+ FLOAT Speed;
+ DOUBLE Position;
+ BOOL Enable;
+} D3DXTRACK_DESC, *LPD3DXTRACK_DESC;
+
+typedef struct _D3DXEVENT_DESC
+{
+ D3DXEVENT_TYPE Type;
+ UINT Track;
+ DOUBLE StartTime;
+ DOUBLE Duration;
+ D3DXTRANSITION_TYPE Transition;
+ union
+ {
+ FLOAT Weight;
+ FLOAT Speed;
+ DOUBLE Position;
+ BOOL Enable;
+ } DUMMYUNIONNAME;
+} D3DXEVENT_DESC, *LPD3DXEVENT_DESC;
+
+typedef DWORD D3DXEVENTHANDLE, *LPD3DXEVENTHANDLE;
+
+typedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY;
+typedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA;
+typedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA;
+typedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET;
+typedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET;
+typedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET;
+typedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER;
+typedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER;
+
+#undef INTERFACE
+
+#define INTERFACE ID3DXAllocateHierarchy
+DECLARE_INTERFACE(ID3DXAllocateHierarchy)
+{
+ STDMETHOD(CreateFrame)(THIS_ const char *name, D3DXFRAME **new_frame) PURE;
+ STDMETHOD(CreateMeshContainer)(THIS_ const char *name, const D3DXMESHDATA *mesh_data,
+ const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances,
+ DWORD num_materials, const DWORD *adjacency, ID3DXSkinInfo *skin_info,
+ D3DXMESHCONTAINER **new_mesh_container) PURE;
+ STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME frame) PURE;
+ STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER mesh_container) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXLoadUserData
+DECLARE_INTERFACE(ID3DXLoadUserData)
+{
+ STDMETHOD(LoadTopLevelData)(ID3DXFileData *child_data) PURE;
+ STDMETHOD(LoadFrameChildData)(D3DXFRAME *frame, ID3DXFileData *child_data) PURE;
+ STDMETHOD(LoadMeshChildData)(D3DXMESHCONTAINER *mesh_container, ID3DXFileData *child_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXSaveUserData
+DECLARE_INTERFACE(ID3DXSaveUserData)
+{
+ STDMETHOD(AddFrameChildData)(const D3DXFRAME *frame,
+ ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *frame_data) PURE;
+ STDMETHOD(AddMeshChildData)(const D3DXMESHCONTAINER *mesh_container,
+ ID3DXFileSaveObject *save_obj, ID3DXFileSaveData *mesh_data) PURE;
+ STDMETHOD(AddTopLevelDataObjectsPre)(ID3DXFileSaveObject *save_obj) PURE;
+ STDMETHOD(AddTopLevelDataObjectsPost)(ID3DXFileSaveObject *save_obj) PURE;
+ STDMETHOD(RegisterTemplates)(ID3DXFile *file) PURE;
+ STDMETHOD(SaveTemplates)(ID3DXFileSaveObject *save_obj) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXAnimationSet
+DECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXAnimationSet methods ***/
+ STDMETHOD_(const char *, GetName)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;
+ STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
+ STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;
+ STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;
+ STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
+ D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+ STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,
+ void **callback_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXKeyframedAnimationSet
+DECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXAnimationSet methods ***/
+ STDMETHOD_(const char *, GetName)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;
+ STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
+ STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;
+ STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;
+ STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
+ D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+ STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,
+ void **callback_data) PURE;
+ /*** ID3DXKeyframedAnimationSet methods ***/
+ STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT animation) PURE;
+ STDMETHOD(GetScaleKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 scale_keys) PURE;
+ STDMETHOD(GetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE;
+ STDMETHOD(SetScaleKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key) PURE;
+ STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT animation) PURE;
+ STDMETHOD(GetRotationKeys)(THIS_ UINT animation, LPD3DXKEY_QUATERNION rotation_keys) PURE;
+ STDMETHOD(GetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE;
+ STDMETHOD(SetRotationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key) PURE;
+ STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT animation) PURE;
+ STDMETHOD(GetTranslationKeys)(THIS_ UINT animation, LPD3DXKEY_VECTOR3 translation_keys) PURE;
+ STDMETHOD(GetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE;
+ STDMETHOD(SetTranslationKey)(THIS_ UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key) PURE;
+ STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;
+ STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE;
+ STDMETHOD(GetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE;
+ STDMETHOD(SetCallbackKey)(THIS_ UINT key, LPD3DXKEY_CALLBACK callback_key) PURE;
+ STDMETHOD(UnregisterScaleKey)(THIS_ UINT animation, UINT key) PURE;
+ STDMETHOD(UnregisterRotationKey)(THIS_ UINT animation, UINT key) PURE;
+ STDMETHOD(UnregisterTranslationKey)(THIS_ UINT animation, UINT key) PURE;
+ STDMETHOD(RegisterAnimationSRTKeys)(THIS_ const char *name, UINT num_scale_keys,
+ UINT num_rotation_keys, UINT num_translation_keys, const D3DXKEY_VECTOR3 *scale_keys,
+ const D3DXKEY_QUATERNION *rotation_keys, const D3DXKEY_VECTOR3 *translation_keys,
+ DWORD *animation_index) PURE;
+ STDMETHOD(Compress)(THIS_ DWORD flags, float lossiness, D3DXFRAME *hierarchy,
+ ID3DXBuffer **compressed_data) PURE;
+ STDMETHOD(UnregisterAnimation)(THIS_ UINT index) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXCompressedAnimationSet
+DECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXAnimationSet methods ***/
+ STDMETHOD_(const char *, GetName)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE position) PURE;
+ STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE;
+ STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT index, const char **name) PURE;
+ STDMETHOD(GetAnimationIndexByName)(THIS_ const char *name, UINT *index) PURE;
+ STDMETHOD(GetSRT)(THIS_ DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
+ D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+ STDMETHOD(GetCallback)(THIS_ double position, DWORD flags, double *callback_position,
+ void **callback_data) PURE;
+ /*** ID3DXCompressedAnimationSet methods ***/
+ STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE;
+ STDMETHOD(GetCompressedData)(THIS_ ID3DXBuffer **compressed_data) PURE;
+ STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE;
+ STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK callback_keys) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXAnimationCallbackHandler
+DECLARE_INTERFACE(ID3DXAnimationCallbackHandler)
+{
+ STDMETHOD(HandleCallback)(THIS_ UINT track, void *callback_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXAnimationController
+DECLARE_INTERFACE_(ID3DXAnimationController, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXAnimationController methods ***/
+ STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE;
+ STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE;
+ STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE;
+ STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE;
+ STDMETHOD(RegisterAnimationOutput)(THIS_ const char *name, D3DXMATRIX *matrix,
+ D3DXVECTOR3 *scale, D3DXQUATERNION *rotation, D3DXVECTOR3 *translation) PURE;
+ STDMETHOD(RegisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE;
+ STDMETHOD(UnregisterAnimationSet)(THIS_ ID3DXAnimationSet *anim_set) PURE;
+ STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE;
+ STDMETHOD(GetAnimationSet)(THIS_ UINT index, ID3DXAnimationSet **anim_set) PURE;
+ STDMETHOD(GetAnimationSetByName)(THIS_ const char *name, ID3DXAnimationSet **anim_set) PURE;
+ STDMETHOD(AdvanceTime)(THIS_ double time_delta, ID3DXAnimationCallbackHandler **callback_handler) PURE;
+ STDMETHOD(ResetTime)(THIS) PURE;
+ STDMETHOD_(DOUBLE, GetTime)(THIS) PURE;
+ STDMETHOD(SetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet *anim_set) PURE;
+ STDMETHOD(GetTrackAnimationSet)(THIS_ UINT track, ID3DXAnimationSet **anim_set) PURE;
+ STDMETHOD(GetTrackPriority)(THIS_ UINT track, D3DXPRIORITY_TYPE *priority) PURE;
+ STDMETHOD(SetTrackSpeed)(THIS_ UINT track, FLOAT speed) PURE;
+ STDMETHOD(SetTrackWeight)(THIS_ UINT track, FLOAT weight) PURE;
+ STDMETHOD(SetTrackPosition)(THIS_ UINT track, DOUBLE position) PURE;
+ STDMETHOD(SetTrackEnable)(THIS_ UINT track, BOOL enable) PURE;
+ STDMETHOD(SetTrackDesc)(THIS_ UINT track, LPD3DXTRACK_DESC desc) PURE;
+ STDMETHOD(GetTrackDesc)(THIS_ UINT track, LPD3DXTRACK_DESC desc) PURE;
+ STDMETHOD(SetPriorityBlend)(THIS_ FLOAT blend_weight) PURE;
+ STDMETHOD_(FLOAT, GetPriorityBlend)(THIS) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT track, FLOAT new_speed,
+ DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT track, FLOAT new_weight,
+ DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT track, DOUBLE new_position, DOUBLE start_time) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT track, BOOL new_enable, DOUBLE start_time) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ FLOAT new_blend_weight,
+ DOUBLE start_time, DOUBLE duration, D3DXTRANSITION_TYPE transition) PURE;
+ STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE event) PURE;
+ STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT track) PURE;
+ STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT track, D3DXEVENT_TYPE event_type) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT track, D3DXEVENTHANDLE event) PURE;
+ STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE handle) PURE;
+ STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE event) PURE;
+ STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE event, LPD3DXEVENT_DESC desc) PURE;
+ STDMETHOD(CloneAnimationController)(THIS_ UINT max_num_anim_outputs, UINT max_num_anim_sets,
+ UINT max_num_tracks, UINT max_num_events, ID3DXAnimationController **anim_controller) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader,
+ D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller);
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXAllocateHierarchy *alloc, struct ID3DXLoadUserData *user_data_loader,
+ D3DXFRAME **frame_hierarchy, struct ID3DXAnimationController **animation_controller);
+#define D3DXLoadMeshHierarchyFromX WINELIB_NAME_AW(D3DXLoadMeshHierarchyFromX)
+HRESULT WINAPI D3DXLoadMeshHierarchyFromXInMemory(const void *data, DWORD data_size, DWORD flags,
+ struct IDirect3DDevice9 *device, struct ID3DXAllocateHierarchy *alloc,
+ struct ID3DXLoadUserData *user_data_loader, D3DXFRAME **frame_hierarchy,
+ struct ID3DXAnimationController **animation_controller);
+HRESULT WINAPI D3DXSaveMeshHierarchyToFileA(const char *filename, DWORD format,
+ const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller,
+ ID3DXSaveUserData *user_data_saver);
+HRESULT WINAPI D3DXSaveMeshHierarchyToFileW(const WCHAR *filename, DWORD format,
+ const D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller,
+ ID3DXSaveUserData *user_data_saver);
+#define D3DXSaveMeshHierarchyToFile WINELIB_NAME_AW(D3DXSaveMeshHierarchyToFile)
+HRESULT WINAPI D3DXFrameDestroy(D3DXFRAME *frame_root, ID3DXAllocateHierarchy *alloc);
+HRESULT WINAPI D3DXFrameAppendChild(D3DXFRAME *parent, const D3DXFRAME *child);
+D3DXFRAME * WINAPI D3DXFrameFind(const D3DXFRAME *root, const char *name);
+HRESULT WINAPI D3DXFrameRegisterNamedMatrices(D3DXFRAME *frame_root, ID3DXAnimationController *animation_controller);
+UINT WINAPI D3DXFrameNumNamedMatrices(const D3DXFRAME *frame_root);
+HRESULT WINAPI D3DXFrameCalculateBoundingSphere(const D3DXFRAME *frame_root, D3DXVECTOR3 *center,
+ FLOAT *radius);
+HRESULT WINAPI D3DXCreateKeyframedAnimationSet(const char *name, double ticks_per_second,
+ D3DXPLAYBACK_TYPE playback_type, UINT animation_count, UINT callback_key_count,
+ const D3DXKEY_CALLBACK *callback_keys, ID3DXKeyframedAnimationSet **animation_set);
+HRESULT WINAPI D3DXCreateCompressedAnimationSet(const char *name, double ticks_per_second,
+ D3DXPLAYBACK_TYPE playback_type, ID3DXBuffer *compressed_data, UINT callback_key_count,
+ const D3DXKEY_CALLBACK *callback_keys, ID3DXCompressedAnimationSet **animation_set);
+HRESULT WINAPI D3DXCreateAnimationController(UINT max_animation_output_count, UINT max_animation_set_count,
+ UINT max_track_count, UINT max_event_count, ID3DXAnimationController **animation_controller);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9ANIM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h
new file mode 100644
index 00000000..fd1967eb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9core.h
@@ -0,0 +1,514 @@
+/*
+ * Copyright (C) 2007, 2008 Tony Wasserka
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __WINE_D3DX9CORE_H
+#define __WINE_D3DX9CORE_H
+
+/**********************************************
+ ***************** Definitions ****************
+ **********************************************/
+/* D3DX_VERSION will be completely ignored since we are
+ implementing all dlls from d3dx9_24 to d3dx9_36 */
+#define D3DX_VERSION 0x0902
+#define D3DX_SDK_VERSION 36
+#define D3DXSPRITE_DONOTSAVESTATE 0x00000001
+#define D3DXSPRITE_DONOTMODIFY_RENDERSTATE 0x00000002
+#define D3DXSPRITE_OBJECTSPACE 0x00000004
+#define D3DXSPRITE_BILLBOARD 0x00000008
+#define D3DXSPRITE_ALPHABLEND 0x00000010
+#define D3DXSPRITE_SORT_TEXTURE 0x00000020
+#define D3DXSPRITE_SORT_DEPTH_FRONTTOBACK 0x00000040
+#define D3DXSPRITE_SORT_DEPTH_BACKTOFRONT 0x00000080
+#define D3DXSPRITE_DO_NOT_ADDREF_TEXTURE 0x00000100
+
+/**********************************************
+ ******************** GUIDs *******************
+ **********************************************/
+DEFINE_GUID(IID_ID3DXBuffer, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);
+DEFINE_GUID(IID_ID3DXFont, 0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc);
+DEFINE_GUID(IID_ID3DXLine, 0xd379ba7f, 0x9042, 0x4ac4, 0x9f, 0x5e, 0x58, 0x19, 0x2a, 0x4c, 0x6b, 0xd8);
+DEFINE_GUID(IID_ID3DXRenderToEnvMap, 0x313f1b4b, 0xc7b0, 0x4fa2, 0x9d, 0x9d, 0x8d, 0x38, 0xb, 0x64, 0x38, 0x5e);
+DEFINE_GUID(IID_ID3DXRenderToSurface, 0x6985f346, 0x2c3d, 0x43b3, 0xbe, 0x8b, 0xda, 0xae, 0x8a, 0x3, 0xd8, 0x94);
+DEFINE_GUID(IID_ID3DXSprite, 0xba0b762d, 0x7d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14);
+
+/**********************************************
+ ****************** typedefs ******************
+ **********************************************/
+typedef struct ID3DXBuffer *LPD3DXBUFFER;
+typedef struct ID3DXFont *LPD3DXFONT;
+typedef struct ID3DXLine *LPD3DXLINE;
+typedef struct ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap;
+typedef struct ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE;
+typedef struct ID3DXSprite *LPD3DXSPRITE;
+
+/**********************************************
+ *********** interface declarations ***********
+ **********************************************/
+#define INTERFACE ID3DXBuffer
+DECLARE_INTERFACE_(ID3DXBuffer, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBuffer methods ***/
+ STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;
+ STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXBuffer methods ***/
+#define ID3DXBuffer_GetBufferPointer(p) (p)->lpVtbl->GetBufferPointer(p)
+#define ID3DXBuffer_GetBufferSize(p) (p)->lpVtbl->GetBufferSize(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXBuffer_AddRef(p) (p)->AddRef()
+#define ID3DXBuffer_Release(p) (p)->Release()
+/*** ID3DXBuffer methods ***/
+#define ID3DXBuffer_GetBufferPointer(p) (p)->GetBufferPointer()
+#define ID3DXBuffer_GetBufferSize(p) (p)->GetBufferSize()
+#endif
+
+typedef struct _D3DXFONT_DESCA
+{
+ INT Height;
+ UINT Width;
+ UINT Weight;
+ UINT MipLevels;
+ BOOL Italic;
+ BYTE CharSet;
+ BYTE OutputPrecision;
+ BYTE Quality;
+ BYTE PitchAndFamily;
+ CHAR FaceName[LF_FACESIZE];
+} D3DXFONT_DESCA, *LPD3DXFONT_DESCA;
+
+typedef struct _D3DXFONT_DESCW
+{
+ INT Height;
+ UINT Width;
+ UINT Weight;
+ UINT MipLevels;
+ BOOL Italic;
+ BYTE CharSet;
+ BYTE OutputPrecision;
+ BYTE Quality;
+ BYTE PitchAndFamily;
+ WCHAR FaceName[LF_FACESIZE];
+} D3DXFONT_DESCW, *LPD3DXFONT_DESCW;
+
+DECL_WINELIB_TYPE_AW(D3DXFONT_DESC)
+DECL_WINELIB_TYPE_AW(LPD3DXFONT_DESC)
+
+#define INTERFACE ID3DXFont
+DECLARE_INTERFACE_(ID3DXFont, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXFont methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *desc) PURE;
+ STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *desc) PURE;
+ STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *metrics) PURE;
+ STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *metrics) PURE;
+
+ STDMETHOD_(HDC, GetDC)(THIS) PURE;
+ STDMETHOD(GetGlyphData)(THIS_ UINT glyph, struct IDirect3DTexture9 **texture,
+ RECT *blackbox, POINT *cellinc) PURE;
+
+ STDMETHOD(PreloadCharacters)(THIS_ UINT first, UINT last) PURE;
+ STDMETHOD(PreloadGlyphs)(THIS_ UINT first, UINT last) PURE;
+ STDMETHOD(PreloadTextA)(THIS_ const char *string, INT count) PURE;
+ STDMETHOD(PreloadTextW)(THIS_ const WCHAR *string, INT count) PURE;
+
+ STDMETHOD_(INT, DrawTextA)(THIS_ struct ID3DXSprite *sprite, const char *string,
+ INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE;
+ STDMETHOD_(INT, DrawTextW)(THIS_ struct ID3DXSprite *sprite, const WCHAR *string,
+ INT count, RECT *rect, DWORD format, D3DCOLOR color) PURE;
+
+ STDMETHOD(OnLostDevice)(THIS) PURE;
+ STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+
+/*** IUnknown methods ***/
+#define ID3DXFont_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXFont_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXFont_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXFont methods ***/
+#define ID3DXFont_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXFont_GetDescA(p,a) (p)->lpVtbl->GetDescA(p,a)
+#define ID3DXFont_GetDescW(p,a) (p)->lpVtbl->GetDescW(p,a)
+#define ID3DXFont_GetTextMetricsA(p,a) (p)->lpVtbl->GetTextMetricsA(p,a)
+#define ID3DXFont_GetTextMetricsW(p,a) (p)->lpVtbl->GetTextMetricsW(p,a)
+#define ID3DXFont_GetDC(p) (p)->lpVtbl->GetDC(p)
+#define ID3DXFont_GetGlyphData(p,a,b,c,d) (p)->lpVtbl->GetGlyphData(p,a,b,c,d)
+#define ID3DXFont_PreloadCharacters(p,a,b) (p)->lpVtbl->PreloadCharacters(p,a,b)
+#define ID3DXFont_PreloadGlyphs(p,a,b) (p)->lpVtbl->PreloadGlyphs(p,a,b)
+#define ID3DXFont_PreloadTextA(p,a,b) (p)->lpVtbl->PreloadTextA(p,a,b)
+#define ID3DXFont_PreloadTextW(p,a,b) (p)->lpVtbl->PreloadTextW(p,a,b)
+#define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextA(p,a,b,c,d,e,f)
+#define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->lpVtbl->DrawTextW(p,a,b,c,d,e,f)
+#define ID3DXFont_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXFont_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXFont_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXFont_AddRef(p) (p)->AddRef()
+#define ID3DXFont_Release(p) (p)->Release()
+/*** ID3DXFont methods ***/
+#define ID3DXFont_GetDevice(p,a) (p)->GetDevice(a)
+#define ID3DXFont_GetDescA(p,a) (p)->GetDescA(a)
+#define ID3DXFont_GetDescW(p,a) (p)->GetDescW(a)
+#define ID3DXFont_GetTextMetricsA(p,a) (p)->GetTextMetricsA(a)
+#define ID3DXFont_GetTextMetricsW(p,a) (p)->GetTextMetricsW(a)
+#define ID3DXFont_GetDC(p) (p)->GetDC()
+#define ID3DXFont_GetGlyphData(p,a,b,c,d) (p)->GetGlyphData(a,b,c,d)
+#define ID3DXFont_PreloadCharacters(p,a,b) (p)->PreloadCharacters(a,b)
+#define ID3DXFont_PreloadGlyphs(p,a,b) (p)->PreloadGlyphs(a,b)
+#define ID3DXFont_PreloadTextA(p,a,b) (p)->PreloadTextA(a,b)
+#define ID3DXFont_PreloadTextW(p,a,b) (p)->PreloadTextW(a,b)
+#define ID3DXFont_DrawTextA(p,a,b,c,d,e,f) (p)->DrawTextA(a,b,c,d,e,f)
+#define ID3DXFont_DrawTextW(p,a,b,c,d,e,f) (p)->DrawTextW(a,b,c,d,e,f)
+#define ID3DXFont_OnLostDevice(p) (p)->OnLostDevice()
+#define ID3DXFont_OnResetDevice(p) (p)->OnResetDevice()
+#endif
+#define ID3DXFont_DrawText WINELIB_NAME_AW(ID3DXFont_DrawText)
+#define ID3DXFont_GetDesc WINELIB_NAME_AW(ID3DXFont_GetDesc)
+#define ID3DXFont_GetTextMetrics WINELIB_NAME_AW(ID3DXFont_GetTextMetrics)
+#define ID3DXFont_PreloadText WINELIB_NAME_AW(ID3DXFont_PreloadText)
+
+#define INTERFACE ID3DXLine
+DECLARE_INTERFACE_(ID3DXLine, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+ /*** ID3DXLine methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+
+ STDMETHOD(Begin)(THIS) PURE;
+ STDMETHOD(Draw)(THIS_ const D3DXVECTOR2 *vertexlist, DWORD vertexlistcount, D3DCOLOR color) PURE;
+ STDMETHOD(DrawTransform)(THIS_ const D3DXVECTOR3 *vertexlist, DWORD vertexlistcount,
+ const D3DXMATRIX *transform, D3DCOLOR color) PURE;
+ STDMETHOD(SetPattern)(THIS_ DWORD pattern) PURE;
+ STDMETHOD_(DWORD, GetPattern)(THIS) PURE;
+ STDMETHOD(SetPatternScale)(THIS_ FLOAT scale) PURE;
+ STDMETHOD_(FLOAT, GetPatternScale)(THIS) PURE;
+ STDMETHOD(SetWidth)(THIS_ FLOAT width) PURE;
+ STDMETHOD_(FLOAT, GetWidth)(THIS) PURE;
+ STDMETHOD(SetAntialias)(THIS_ BOOL antialias) PURE;
+ STDMETHOD_(BOOL, GetAntialias)(THIS) PURE;
+ STDMETHOD(SetGLLines)(THIS_ BOOL gl_lines) PURE;
+ STDMETHOD_(BOOL, GetGLLines)(THIS) PURE;
+ STDMETHOD(End)(THIS) PURE;
+
+ STDMETHOD(OnLostDevice)(THIS) PURE;
+ STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXLine_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXLine_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXLine_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXLine methods ***/
+#define ID3DXLine_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXLine_Begin(p) (p)->lpVtbl->Begin(p)
+#define ID3DXLine_Draw(p,a,b,c) (p)->lpVtbl->Draw(p,a,b,c)
+#define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->lpVtbl->DrawTransform(p,a,b,c,d)
+#define ID3DXLine_SetPattern(p,a) (p)->lpVtbl->SetPattern(p,a)
+#define ID3DXLine_GetPattern(p) (p)->lpVtbl->GetPattern(p)
+#define ID3DXLine_SetPatternScale(p,a) (p)->lpVtbl->SetPatternScale(p,a)
+#define ID3DXLine_GetPatternScale(p) (p)->lpVtbl->GetPatternScale(p)
+#define ID3DXLine_SetWidth(p,a) (p)->lpVtbl->SetWidth(p,a)
+#define ID3DXLine_GetWidth(p) (p)->lpVtbl->GetWidth(p)
+#define ID3DXLine_SetAntialias(p,a) (p)->lpVtbl->SetAntialias(p,a)
+#define ID3DXLine_GetAntialias(p) (p)->lpVtbl->GetAntialias(p)
+#define ID3DXLine_SetGLLines(p,a) (p)->lpVtbl->SetGLLines(p,a)
+#define ID3DXLine_GetGLLines(p) (p)->lpVtbl->GetGLLines(p)
+#define ID3DXLine_End(p) (p)->lpVtbl->End(p)
+#define ID3DXLine_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXLine_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXLine_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXLine_AddRef(p) (p)->AddRef()
+#define ID3DXLine_Release(p) (p)->Release()
+/*** ID3DXLine methods ***/
+#define ID3DXLine_GetDevice(p,a) (p)->GetDevice(a)
+#define ID3DXLine_Begin(p) (p)->Begin()
+#define ID3DXLine_Draw(p,a,b,c) (p)->Draw(a,b,c)
+#define ID3DXLine_DrawTransform(p,a,b,c,d) (p)->DrawTransform(a,b,c,d)
+#define ID3DXLine_SetPattern(p,a) (p)->SetPattern(a)
+#define ID3DXLine_GetPattern(p) (p)->GetPattern()
+#define ID3DXLine_SetPatternScale(p,a) (p)->SetPatternScale(a)
+#define ID3DXLine_GetPatternScale(p) (p)->GetPatternScale()
+#define ID3DXLine_SetWidth(p,a) (p)->SetWidth(a)
+#define ID3DXLine_GetWidth(p) (p)->GetWidth()
+#define ID3DXLine_SetAntialias(p,a) (p)->SetAntialias(a)
+#define ID3DXLine_GetAntialias(p) (p)->GetAntialias()
+#define ID3DXLine_SetGLLines(p,a) (p)->SetGLLines(a)
+#define ID3DXLine_GetGLLines(p) (p)->GetGLLines()
+#define ID3DXLine_End(p) (p)->End()
+#define ID3DXLine_OnLostDevice(p) (p)->OnLostDevice()
+#define ID3DXLine_OnResetDevice(p) (p)->OnResetDevice()
+#endif
+
+typedef struct _D3DXRTE_DESC
+{
+ UINT Size;
+ UINT MipLevels;
+ D3DFORMAT Format;
+ BOOL DepthStencil;
+ D3DFORMAT DepthStencilFormat;
+} D3DXRTE_DESC;
+
+#define INTERFACE ID3DXRenderToEnvMap
+DECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+ /*** ID3DXRenderToEnvMap methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC *desc) PURE;
+
+ STDMETHOD(BeginCube)(THIS_ struct IDirect3DCubeTexture9 *cubetex) PURE;
+ STDMETHOD(BeginSphere)(THIS_ struct IDirect3DTexture9 *tex) PURE;
+ STDMETHOD(BeginHemisphere)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE;
+ STDMETHOD(BeginParabolic)(THIS_ struct IDirect3DTexture9 *texzpos, struct IDirect3DTexture9 *texzneg) PURE;
+
+ STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES face, DWORD mipfilter) PURE;
+ STDMETHOD(End)(THIS_ DWORD mipfilter) PURE;
+
+ STDMETHOD(OnLostDevice)(THIS) PURE;
+ STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXRenderToEnvMap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXRenderToEnvMap_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXRenderToEnvMap_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXRenderToEnvMap methods ***/
+#define ID3DXRenderToEnvMap_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXRenderToEnvMap_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define ID3DXRenderToEnvMap_BeginCube(p,a) (p)->lpVtbl->BeginCube(p,a)
+#define ID3DXRenderToEnvMap_BeginSphere(p,a) (p)->lpVtbl->BeginSphere(p,a)
+#define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->lpVtbl->BeginHemisphere(p,a,b)
+#define ID3DXRenderToEnvMap_BeginParabolic(p,a,b) (p)->lpVtbl->BeginParabolic(p,a,b)
+#define ID3DXRenderToEnvMap_Face(p,a,b) (p)->lpVtbl->Face(p,a,b)
+#define ID3DXRenderToEnvMap_End(p,a) (p)->lpVtbl->End(p,a)
+#define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXRenderToEnvMap_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXRenderToEnvMap_AddRef(p) (p)->AddRef()
+#define ID3DXRenderToEnvMap_Release(p) (p)->Release()
+/*** ID3DXRenderToEnvMap methods ***/
+#define ID3DXRenderToEnvMap_GetDevice(p,a) (p)->GetDevice(a)
+#define ID3DXRenderToEnvMap_GetDesc(p,a) (p)->GetDesc(a)
+#define ID3DXRenderToEnvMap_BeginCube(p,a) (p)->BeginCube(a)
+#define ID3DXRenderToEnvMap_BeginSphere(p,a) (p)->BeginSphere(a)
+#define ID3DXRenderToEnvMap_BeginHemisphere(p,a,b) (p)->BeginHemisphere(a,b)
+#define ID3DXRenderToEnvMap_BeginParabolic(p,a,b) (p)->BeginParabolic(a,b)
+#define ID3DXRenderToEnvMap_Face(p,a,b) (p)->Face(a,b)
+#define ID3DXRenderToEnvMap_End(p,a) (p)->End(a)
+#define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->OnLostDevice()
+#define ID3DXRenderToEnvMap_OnLostDevice(p) (p)->OnLostDevice()
+#endif
+
+typedef struct _D3DXRTS_DESC
+{
+ UINT Width;
+ UINT Height;
+ D3DFORMAT Format;
+ BOOL DepthStencil;
+ D3DFORMAT DepthStencilFormat;
+} D3DXRTS_DESC;
+
+#define INTERFACE ID3DXRenderToSurface
+DECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXRenderToSurface methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC *desc) PURE;
+
+ STDMETHOD(BeginScene)(THIS_ struct IDirect3DSurface9 *surface, const D3DVIEWPORT9 *viewport) PURE;
+ STDMETHOD(EndScene)(THIS_ DWORD mipfilter) PURE;
+
+ STDMETHOD(OnLostDevice)(THIS) PURE;
+ STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXRenderToSurface_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXRenderToSurface_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXRenderToSurface methods ***/
+#define ID3DXRenderToSurface_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXRenderToSurface_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define ID3DXRenderToSurface_BeginScene(p,a,b) (p)->lpVtbl->BeginScene(p,a,b)
+#define ID3DXRenderToSurface_EndScene(p,a) (p)->lpVtbl->EndScene(p,a)
+#define ID3DXRenderToSurface_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXRenderToSurface_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXRenderToSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXRenderToSurface_AddRef(p) (p)->AddRef()
+#define ID3DXRenderToSurface_Release(p) (p)->Release()
+/*** ID3DXRenderToSurface methods ***/
+#define ID3DXRenderToSurface_GetDevice(p,a) (p)->GetDevice(a)
+#define ID3DXRenderToSurface_GetDesc(p,a) (p)->GetDesc(a)
+#define ID3DXRenderToSurface_BeginScene(p,a,b) (p)->BeginScene(a,b)
+#define ID3DXRenderToSurface_EndScene(p,a) (p)->EndScene(a)
+#define ID3DXRenderToSurface_OnLostDevice(p) (p)->OnLostDevice()
+#define ID3DXRenderToSurface_OnResetDevice(p) (p)->OnResetDevice()
+#endif
+
+#define INTERFACE ID3DXSprite
+DECLARE_INTERFACE_(ID3DXSprite, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **object) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXSprite methods ***/
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+
+ STDMETHOD(GetTransform)(THIS_ D3DXMATRIX *transform) PURE;
+ STDMETHOD(SetTransform)(THIS_ const D3DXMATRIX *transform) PURE;
+ STDMETHOD(SetWorldViewRH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE;
+ STDMETHOD(SetWorldViewLH)(THIS_ const D3DXMATRIX *world, const D3DXMATRIX *view) PURE;
+
+ STDMETHOD(Begin)(THIS_ DWORD flags) PURE;
+ STDMETHOD(Draw)(THIS_ struct IDirect3DTexture9 *texture, const RECT *rect,
+ const D3DXVECTOR3 *center, const D3DXVECTOR3 *position, D3DCOLOR color) PURE;
+ STDMETHOD(Flush)(THIS) PURE;
+ STDMETHOD(End)(THIS) PURE;
+
+ STDMETHOD(OnLostDevice)(THIS) PURE;
+ STDMETHOD(OnResetDevice)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXSprite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXSprite_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXSprite_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXSprite methods ***/
+#define ID3DXSprite_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define ID3DXSprite_GetTransform(p,a) (p)->lpVtbl->GetTransform(p,a)
+#define ID3DXSprite_SetTransform(p,a) (p)->lpVtbl->SetTransform(p,a)
+#define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->lpVtbl->SetWorldViewRH(p,a,b)
+#define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->lpVtbl->SetWorldViewLH(p,a,b)
+#define ID3DXSprite_Begin(p,a) (p)->lpVtbl->Begin(p,a)
+#define ID3DXSprite_Draw(p,a,b,c,d,e) (p)->lpVtbl->Draw(p,a,b,c,d,e)
+#define ID3DXSprite_Flush(p) (p)->lpVtbl->Flush(p)
+#define ID3DXSprite_End(p) (p)->lpVtbl->End(p)
+#define ID3DXSprite_OnLostDevice(p) (p)->lpVtbl->OnLostDevice(p)
+#define ID3DXSprite_OnResetDevice(p) (p)->lpVtbl->OnResetDevice(p)
+#else
+/*** IUnknown methods ***/
+#define ID3DXSprite_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXSprite_AddRef(p) (p)->AddRef()
+#define ID3DXSprite_Release(p) (p)->Release()
+/*** ID3DXSprite methods ***/
+#define ID3DXSprite_GetDevice(p,a) (p)->GetDevice(a)
+#define ID3DXSprite_GetTransform(p,a) (p)->GetTransform(a)
+#define ID3DXSprite_SetTransform(p,a) (p)->SetTransform(a)
+#define ID3DXSprite_SetWorldViewRH(p,a,b) (p)->SetWorldViewRH(a,b)
+#define ID3DXSprite_SetWorldViewLH(p,a,b) (p)->SetWorldViewLH(a,b)
+#define ID3DXSprite_Begin(p,a) (p)->Begin(a)
+#define ID3DXSprite_Draw(p,a,b,c,d,e) (p)->Draw(a,b,c,d,e)
+#define ID3DXSprite_Flush(p) (p)->Flush()
+#define ID3DXSprite_End(p) (p)->End()
+#define ID3DXSprite_OnLostDevice(p) (p)->OnLostDevice()
+#define ID3DXSprite_OnResetDevice(p) (p)->OnResetDevice()
+#endif
+
+/**********************************************
+ ****************** functions *****************
+ **********************************************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI D3DXCheckVersion(UINT d3dsdkvers, UINT d3dxsdkvers);
+HRESULT WINAPI D3DXCreateFontA(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight,
+ UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily,
+ const char *facename, struct ID3DXFont **font);
+HRESULT WINAPI D3DXCreateFontW(struct IDirect3DDevice9 *device, INT height, UINT width, UINT weight,
+ UINT miplevels, BOOL italic, DWORD charset, DWORD precision, DWORD quality, DWORD pitchandfamily,
+ const WCHAR *facename, struct ID3DXFont **font);
+#define D3DXCreateFont WINELIB_NAME_AW(D3DXCreateFont)
+HRESULT WINAPI D3DXCreateFontIndirectA(struct IDirect3DDevice9 *device,
+ const D3DXFONT_DESCA *desc, struct ID3DXFont **font);
+HRESULT WINAPI D3DXCreateFontIndirectW(struct IDirect3DDevice9 *device,
+ const D3DXFONT_DESCW *desc, struct ID3DXFont **font);
+#define D3DXCreateFontIndirect WINELIB_NAME_AW(D3DXCreateFontIndirect)
+HRESULT WINAPI D3DXCreateLine(struct IDirect3DDevice9 *device, struct ID3DXLine **line);
+HRESULT WINAPI D3DXCreateRenderToEnvMap(struct IDirect3DDevice9 *device, UINT size, UINT miplevels,
+ D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToEnvMap **rtem);
+HRESULT WINAPI D3DXCreateRenderToSurface(struct IDirect3DDevice9 *device, UINT width, UINT height,
+ D3DFORMAT format, BOOL stencil, D3DFORMAT stencil_format, struct ID3DXRenderToSurface **rts);
+HRESULT WINAPI D3DXCreateSprite(struct IDirect3DDevice9 *device, struct ID3DXSprite **sprite);
+BOOL WINAPI D3DXDebugMute(BOOL mute);
+UINT WINAPI D3DXGetDriverLevel(struct IDirect3DDevice9 *device);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9CORE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h
new file mode 100644
index 00000000..a0415e0d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9effect.h
@@ -0,0 +1,441 @@
+/*
+ * Copyright 2010 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __D3DX9EFFECT_H__
+#define __D3DX9EFFECT_H__
+
+#define D3DXFX_DONOTSAVESTATE (1 << 0)
+#define D3DXFX_DONOTSAVESHADERSTATE (1 << 1)
+#define D3DXFX_DONOTSAVESAMPLERSTATE (1 << 2)
+#define D3DXFX_NOT_CLONEABLE (1 << 11)
+#define D3DXFX_LARGEADDRESSAWARE (1 << 17)
+
+#define D3DX_PARAMETER_SHARED 1
+#define D3DX_PARAMETER_LITERAL 2
+#define D3DX_PARAMETER_ANNOTATION 4
+
+typedef struct _D3DXEFFECT_DESC
+{
+ const char *Creator;
+ UINT Parameters;
+ UINT Techniques;
+ UINT Functions;
+} D3DXEFFECT_DESC;
+
+typedef struct _D3DXPARAMETER_DESC
+{
+ const char *Name;
+ const char *Semantic;
+ D3DXPARAMETER_CLASS Class;
+ D3DXPARAMETER_TYPE Type;
+ UINT Rows;
+ UINT Columns;
+ UINT Elements;
+ UINT Annotations;
+ UINT StructMembers;
+ DWORD Flags;
+ UINT Bytes;
+} D3DXPARAMETER_DESC;
+
+typedef struct _D3DXTECHNIQUE_DESC
+{
+ const char *Name;
+ UINT Passes;
+ UINT Annotations;
+} D3DXTECHNIQUE_DESC;
+
+typedef struct _D3DXPASS_DESC
+{
+ const char *Name;
+ UINT Annotations;
+ const DWORD *pVertexShaderFunction;
+ const DWORD *pPixelShaderFunction;
+} D3DXPASS_DESC;
+
+typedef struct _D3DXFUNCTION_DESC
+{
+ const char *Name;
+ UINT Annotations;
+} D3DXFUNCTION_DESC;
+
+typedef struct ID3DXEffectPool *LPD3DXEFFECTPOOL;
+
+DEFINE_GUID(IID_ID3DXEffectPool, 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);
+
+#undef INTERFACE
+#define INTERFACE ID3DXEffectPool
+
+DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXBaseEffect *LPD3DXBASEEFFECT;
+
+DEFINE_GUID(IID_ID3DXBaseEffect, 0x17c18ac, 0x103f, 0x4417, 0x8c, 0x51, 0x6b, 0xf6, 0xef, 0x1e, 0x56, 0xbe);
+
+#define INTERFACE ID3DXBaseEffect
+
+DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBaseEffect methods ***/
+ STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;
+ STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;
+ STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;
+ STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;
+ STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);
+ STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);
+ STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;
+ STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;
+ STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;
+ STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;
+ STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;
+ STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;
+ STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;
+ STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;
+ STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;
+ STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;
+ STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;
+ STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;
+ STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;
+ STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;
+ STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;
+ STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;
+ STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;
+ STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;
+ STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;
+ STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+ STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+ STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+ STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;
+ STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;
+ STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;
+ STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;
+ STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER;
+
+DEFINE_GUID(IID_ID3DXEffectStateManager, 0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce);
+
+#define INTERFACE ID3DXEffectStateManager
+
+DECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXEffectStateManager methods ***/
+ STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) PURE;
+ STDMETHOD(SetMaterial)(THIS_ const D3DMATERIAL9 *material) PURE;
+ STDMETHOD(SetLight)(THIS_ DWORD index, const D3DLIGHT9 *light) PURE;
+ STDMETHOD(LightEnable)(THIS_ DWORD index, BOOL enable) PURE;
+ STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE state, DWORD value) PURE;
+ STDMETHOD(SetTexture)(THIS_ DWORD stage, struct IDirect3DBaseTexture9 *texture) PURE;
+ STDMETHOD(SetTextureStageState)(THIS_ DWORD stage, D3DTEXTURESTAGESTATETYPE type, DWORD value) PURE;
+ STDMETHOD(SetSamplerState)(THIS_ DWORD sampler, D3DSAMPLERSTATETYPE type, DWORD value) PURE;
+ STDMETHOD(SetNPatchMode)(THIS_ FLOAT num_segments) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD format) PURE;
+ STDMETHOD(SetVertexShader)(THIS_ struct IDirect3DVertexShader9 *shader) PURE;
+ STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE;
+ STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE;
+ STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE;
+ STDMETHOD(SetPixelShader)(THIS_ struct IDirect3DPixelShader9 *shader) PURE;
+ STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT register_index, const FLOAT *constant_data, UINT register_count) PURE;
+ STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT register_index, const INT *constant_data, UINT register_count) PURE;
+ STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT register_index, const BOOL *constant_data, UINT register_count) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXEffect *LPD3DXEFFECT;
+
+DEFINE_GUID(IID_ID3DXEffect, 0xf6ceb4b3, 0x4e4c, 0x40dd, 0xb8, 0x83, 0x8d, 0x8d, 0xe5, 0xea, 0xc, 0xd5);
+
+#define INTERFACE ID3DXEffect
+
+DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBaseEffect methods ***/
+ STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;
+ STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;
+ STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;
+ STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;
+ STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);
+ STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);
+ STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;
+ STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;
+ STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;
+ STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;
+ STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;
+ STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;
+ STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;
+ STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;
+ STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;
+ STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;
+ STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;
+ STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;
+ STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;
+ STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;
+ STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;
+ STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;
+ STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;
+ STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;
+ STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;
+ STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+ STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+ STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+ STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;
+ STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;
+ STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;
+ STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;
+ STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;
+ /*** ID3DXEffect methods ***/
+ STDMETHOD(GetPool)(THIS_ ID3DXEffectPool **pool) PURE;
+ STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE technique) PURE;
+ STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE;
+ STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE technique) PURE;
+ STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE technique, D3DXHANDLE* next_technique) PURE;
+ STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE parameter, D3DXHANDLE technique) PURE;
+ STDMETHOD(Begin)(THIS_ UINT *passes, DWORD flags) PURE;
+ STDMETHOD(BeginPass)(THIS_ UINT pass) PURE;
+ STDMETHOD(CommitChanges)(THIS) PURE;
+ STDMETHOD(EndPass)(THIS) PURE;
+ STDMETHOD(End)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(OnLostDevice)(THIS) PURE;
+ STDMETHOD(OnResetDevice)(THIS) PURE;
+ STDMETHOD(SetStateManager)(THIS_ ID3DXEffectStateManager *manager) PURE;
+ STDMETHOD(GetStateManager)(THIS_ ID3DXEffectStateManager **manager) PURE;
+ STDMETHOD(BeginParameterBlock)(THIS) PURE;
+ STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE;
+ STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE;
+ STDMETHOD(DeleteParameterBlock)(THIS_ D3DXHANDLE parameter_block) PURE;
+ STDMETHOD(CloneEffect)(THIS_ struct IDirect3DDevice9 *device, struct ID3DXEffect **effect) PURE;
+ STDMETHOD(SetRawValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT byte_offset, UINT bytes) PURE;
+};
+#undef INTERFACE
+
+typedef struct ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER;
+
+DEFINE_GUID(IID_ID3DXEffectCompiler, 0x51b8a949, 0x1a31, 0x47e6, 0xbe, 0xa0, 0x4b, 0x30, 0xdb, 0x53, 0xf1, 0xe0);
+
+#define INTERFACE ID3DXEffectCompiler
+
+DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBaseEffect methods ***/
+ STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* desc) PURE;
+ STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE parameter, D3DXPARAMETER_DESC* desc) PURE;
+ STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE technique, D3DXTECHNIQUE_DESC* desc) PURE;
+ STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE pass, D3DXPASS_DESC* desc) PURE;
+ STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE shader, D3DXFUNCTION_DESC* desc) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE parameter, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE parameter, const char *semantic) PURE;
+ STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE parameter, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE technique, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE technique, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT index);
+ STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ const char *name);
+ STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE object, UINT index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE object, const char *name) PURE;
+ STDMETHOD(SetValue)(THIS_ D3DXHANDLE parameter, const void *data, UINT bytes) PURE;
+ STDMETHOD(GetValue)(THIS_ D3DXHANDLE parameter, void *data, UINT bytes) PURE;
+ STDMETHOD(SetBool)(THIS_ D3DXHANDLE parameter, BOOL b) PURE;
+ STDMETHOD(GetBool)(THIS_ D3DXHANDLE parameter, BOOL* b) PURE;
+ STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE parameter, const BOOL *b, UINT count) PURE;
+ STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE parameter, BOOL* b, UINT count) PURE;
+ STDMETHOD(SetInt)(THIS_ D3DXHANDLE parameter, INT n) PURE;
+ STDMETHOD(GetInt)(THIS_ D3DXHANDLE parameter, INT* n) PURE;
+ STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE parameter, const INT *n, UINT count) PURE;
+ STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE parameter, INT* n, UINT count) PURE;
+ STDMETHOD(SetFloat)(THIS_ D3DXHANDLE parameter, FLOAT f) PURE;
+ STDMETHOD(GetFloat)(THIS_ D3DXHANDLE parameter, FLOAT* f) PURE;
+ STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE parameter, const FLOAT *f, UINT count) PURE;
+ STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE parameter, FLOAT* f, UINT count) PURE;
+ STDMETHOD(SetVector)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector) PURE;
+ STDMETHOD(GetVector)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector) PURE;
+ STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE parameter, const D3DXVECTOR4 *vector, UINT count) PURE;
+ STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE parameter, D3DXVECTOR4* vector, UINT count) PURE;
+ STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+ STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix) PURE;
+ STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix) PURE;
+ STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX *matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX* matrix, UINT count) PURE;
+ STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, const D3DXMATRIX **matrix, UINT count) PURE;
+ STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE parameter, D3DXMATRIX** matrix, UINT count) PURE;
+ STDMETHOD(SetString)(THIS_ D3DXHANDLE parameter, const char *string) PURE;
+ STDMETHOD(GetString)(THIS_ D3DXHANDLE parameter, const char **string) PURE;
+ STDMETHOD(SetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 *texture) PURE;
+ STDMETHOD(GetTexture)(THIS_ D3DXHANDLE parameter, struct IDirect3DBaseTexture9 **texture) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DPixelShader9 **shader) PURE;
+ STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE parameter, struct IDirect3DVertexShader9 **shader) PURE;
+ STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE parameter, UINT start, UINT end) PURE;
+ /*** ID3DXEffectCompiler methods ***/
+ STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE parameter, BOOL literal) PURE;
+ STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE parameter, BOOL* literal) PURE;
+ STDMETHOD(CompileEffect)(THIS_ DWORD flags, ID3DXBuffer **effect, ID3DXBuffer **error_msgs) PURE;
+ STDMETHOD(CompileShader)(THIS_ D3DXHANDLE function, const char *target, DWORD flags,
+ ID3DXBuffer **shader, ID3DXBuffer **error_msgs, ID3DXConstantTable **constant_table) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateEffectPool(ID3DXEffectPool **pool);
+HRESULT WINAPI D3DXCreateEffect(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen,
+ const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectEx(struct IDirect3DDevice9 *device, const void *srcdata, UINT srcdatalen,
+ const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectCompiler(const char *srcdata, UINT srcdatalen, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **compiler, ID3DXBuffer **parse_errors);
+HRESULT WINAPI D3DXCreateEffectFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+ const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+ const D3DXMACRO *defines, struct ID3DXInclude *include, const char *skip_constants, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromFileEx WINELIB_NAME_AW(D3DXCreateEffectFromFileEx)
+
+HRESULT WINAPI D3DXCreateEffectFromFileA(struct IDirect3DDevice9 *device, const char *srcfile,
+ const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromFileW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+ const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromFile WINELIB_NAME_AW(D3DXCreateEffectFromFile)
+
+HRESULT WINAPI D3DXCreateEffectFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include,
+ const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool,
+ struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include,
+ const char *skip_constants, DWORD flags, struct ID3DXEffectPool *pool,
+ struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromResourceEx WINELIB_NAME_AW(D3DXCreateEffectFromResourceEx)
+
+HRESULT WINAPI D3DXCreateEffectFromResourceA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const char *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+HRESULT WINAPI D3DXCreateEffectFromResourceW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const WCHAR *srcresource, const D3DXMACRO *defines, struct ID3DXInclude *include, DWORD flags,
+ struct ID3DXEffectPool *pool, struct ID3DXEffect **effect, struct ID3DXBuffer **compilation_errors);
+#define D3DXCreateEffectFromResource WINELIB_NAME_AW(D3DXCreateEffectFromResource)
+
+HRESULT WINAPI D3DXCreateEffectCompilerFromFileA(const char *srcfile, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+HRESULT WINAPI D3DXCreateEffectCompilerFromFileW(const WCHAR *srcfile, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+#define D3DXCreateEffectCompilerFromFile WINELIB_NAME_AW(D3DXCreateEffectCompilerFromFile)
+
+HRESULT WINAPI D3DXCreateEffectCompilerFromResourceA(HMODULE srcmodule, const char *srcresource,
+ const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags,
+ ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+HRESULT WINAPI D3DXCreateEffectCompilerFromResourceW(HMODULE srcmodule, const WCHAR *srcresource,
+ const D3DXMACRO *defines, ID3DXInclude *include, DWORD flags,
+ ID3DXEffectCompiler **effectcompiler, ID3DXBuffer **parseerrors);
+#define D3DXCreateEffectCompilerFromResource WINELIB_NAME_AW(D3DXCreateEffectCompilerFromResource)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DX9EFFECT_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h
new file mode 100644
index 00000000..6f83be84
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.h
@@ -0,0 +1,483 @@
+/*
+ * Copyright (C) 2007 David Adam
+ * Copyright (C) 2007 Tony Wasserka
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __D3DX9MATH_H__
+#define __D3DX9MATH_H__
+
+#include <math.h>
+
+#define D3DX_PI ((FLOAT)3.141592654)
+#define D3DX_1BYPI ((FLOAT)0.318309886)
+
+#define D3DXSH_MINORDER 2
+#define D3DXSH_MAXORDER 6
+
+#define D3DXToRadian(degree) ((degree) * (D3DX_PI / 180.0f))
+#define D3DXToDegree(radian) ((radian) * (180.0f / D3DX_PI))
+
+typedef struct D3DXVECTOR2
+{
+#ifdef __cplusplus
+ D3DXVECTOR2();
+ D3DXVECTOR2(const FLOAT *pf);
+ D3DXVECTOR2(FLOAT fx, FLOAT fy);
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ D3DXVECTOR2& operator += (const D3DXVECTOR2&);
+ D3DXVECTOR2& operator -= (const D3DXVECTOR2&);
+ D3DXVECTOR2& operator *= (FLOAT);
+ D3DXVECTOR2& operator /= (FLOAT);
+
+ D3DXVECTOR2 operator + () const;
+ D3DXVECTOR2 operator - () const;
+
+ D3DXVECTOR2 operator + (const D3DXVECTOR2&) const;
+ D3DXVECTOR2 operator - (const D3DXVECTOR2&) const;
+ D3DXVECTOR2 operator * (FLOAT) const;
+ D3DXVECTOR2 operator / (FLOAT) const;
+
+ friend D3DXVECTOR2 operator * (FLOAT, const D3DXVECTOR2&);
+
+ BOOL operator == (const D3DXVECTOR2&) const;
+ BOOL operator != (const D3DXVECTOR2&) const;
+#endif /* __cplusplus */
+ FLOAT x, y;
+} D3DXVECTOR2, *LPD3DXVECTOR2;
+
+#ifdef __cplusplus
+typedef struct D3DXVECTOR3 : public D3DVECTOR
+{
+ D3DXVECTOR3();
+ D3DXVECTOR3(const FLOAT *pf);
+ D3DXVECTOR3(const D3DVECTOR& v);
+ D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz);
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ D3DXVECTOR3& operator += (const D3DXVECTOR3&);
+ D3DXVECTOR3& operator -= (const D3DXVECTOR3&);
+ D3DXVECTOR3& operator *= (FLOAT);
+ D3DXVECTOR3& operator /= (FLOAT);
+
+ D3DXVECTOR3 operator + () const;
+ D3DXVECTOR3 operator - () const;
+
+ D3DXVECTOR3 operator + (const D3DXVECTOR3&) const;
+ D3DXVECTOR3 operator - (const D3DXVECTOR3&) const;
+ D3DXVECTOR3 operator * (FLOAT) const;
+ D3DXVECTOR3 operator / (FLOAT) const;
+
+ friend D3DXVECTOR3 operator * (FLOAT, const struct D3DXVECTOR3&);
+
+ BOOL operator == (const D3DXVECTOR3&) const;
+ BOOL operator != (const D3DXVECTOR3&) const;
+} D3DXVECTOR3, *LPD3DXVECTOR3;
+#else /* !__cplusplus */
+typedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3;
+#endif /* !__cplusplus */
+
+typedef struct D3DXVECTOR4
+{
+#ifdef __cplusplus
+ D3DXVECTOR4();
+ D3DXVECTOR4(const FLOAT *pf);
+ D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ D3DXVECTOR4& operator += (const D3DXVECTOR4&);
+ D3DXVECTOR4& operator -= (const D3DXVECTOR4&);
+ D3DXVECTOR4& operator *= (FLOAT);
+ D3DXVECTOR4& operator /= (FLOAT);
+
+ D3DXVECTOR4 operator + () const;
+ D3DXVECTOR4 operator - () const;
+
+ D3DXVECTOR4 operator + (const D3DXVECTOR4&) const;
+ D3DXVECTOR4 operator - (const D3DXVECTOR4&) const;
+ D3DXVECTOR4 operator * (FLOAT) const;
+ D3DXVECTOR4 operator / (FLOAT) const;
+
+ friend D3DXVECTOR4 operator * (FLOAT, const D3DXVECTOR4&);
+
+ BOOL operator == (const D3DXVECTOR4&) const;
+ BOOL operator != (const D3DXVECTOR4&) const;
+#endif /* __cplusplus */
+ FLOAT x, y, z, w;
+} D3DXVECTOR4, *LPD3DXVECTOR4;
+
+#ifdef __cplusplus
+typedef struct D3DXMATRIX : public D3DMATRIX
+{
+ D3DXMATRIX();
+ D3DXMATRIX(const FLOAT *pf);
+ D3DXMATRIX(const D3DMATRIX& mat);
+ D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
+ FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
+ FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
+ FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44);
+
+ FLOAT& operator () (UINT row, UINT col);
+ FLOAT operator () (UINT row, UINT col) const;
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ D3DXMATRIX& operator *= (const D3DXMATRIX&);
+ D3DXMATRIX& operator += (const D3DXMATRIX&);
+ D3DXMATRIX& operator -= (const D3DXMATRIX&);
+ D3DXMATRIX& operator *= (FLOAT);
+ D3DXMATRIX& operator /= (FLOAT);
+
+ D3DXMATRIX operator + () const;
+ D3DXMATRIX operator - () const;
+
+ D3DXMATRIX operator * (const D3DXMATRIX&) const;
+ D3DXMATRIX operator + (const D3DXMATRIX&) const;
+ D3DXMATRIX operator - (const D3DXMATRIX&) const;
+ D3DXMATRIX operator * (FLOAT) const;
+ D3DXMATRIX operator / (FLOAT) const;
+
+ friend D3DXMATRIX operator * (FLOAT, const D3DXMATRIX&);
+
+ BOOL operator == (const D3DXMATRIX&) const;
+ BOOL operator != (const D3DXMATRIX&) const;
+} D3DXMATRIX, *LPD3DXMATRIX;
+#else /* !__cplusplus */
+typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;
+#endif /* !__cplusplus */
+
+typedef struct D3DXQUATERNION
+{
+#ifdef __cplusplus
+ D3DXQUATERNION();
+ D3DXQUATERNION(const FLOAT *pf);
+ D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ D3DXQUATERNION& operator += (const D3DXQUATERNION&);
+ D3DXQUATERNION& operator -= (const D3DXQUATERNION&);
+ D3DXQUATERNION& operator *= (const D3DXQUATERNION&);
+ D3DXQUATERNION& operator *= (FLOAT);
+ D3DXQUATERNION& operator /= (FLOAT);
+
+ D3DXQUATERNION operator + () const;
+ D3DXQUATERNION operator - () const;
+
+ D3DXQUATERNION operator + (const D3DXQUATERNION&) const;
+ D3DXQUATERNION operator - (const D3DXQUATERNION&) const;
+ D3DXQUATERNION operator * (const D3DXQUATERNION&) const;
+ D3DXQUATERNION operator * (FLOAT) const;
+ D3DXQUATERNION operator / (FLOAT) const;
+
+ friend D3DXQUATERNION operator * (FLOAT, const D3DXQUATERNION&);
+
+ BOOL operator == (const D3DXQUATERNION&) const;
+ BOOL operator != (const D3DXQUATERNION&) const;
+#endif /* __cplusplus */
+ FLOAT x, y, z, w;
+} D3DXQUATERNION, *LPD3DXQUATERNION;
+
+typedef struct D3DXPLANE
+{
+#ifdef __cplusplus
+ D3DXPLANE();
+ D3DXPLANE(const FLOAT *pf);
+ D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd);
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ D3DXPLANE operator + () const;
+ D3DXPLANE operator - () const;
+
+ BOOL operator == (const D3DXPLANE&) const;
+ BOOL operator != (const D3DXPLANE&) const;
+#endif /* __cplusplus */
+ FLOAT a, b, c, d;
+} D3DXPLANE, *LPD3DXPLANE;
+
+typedef struct D3DXCOLOR
+{
+#ifdef __cplusplus
+ D3DXCOLOR();
+ D3DXCOLOR(DWORD col);
+ D3DXCOLOR(const FLOAT *pf);
+ D3DXCOLOR(const D3DCOLORVALUE& col);
+ D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa);
+
+ operator DWORD () const;
+
+ operator FLOAT* ();
+ operator const FLOAT* () const;
+
+ operator D3DCOLORVALUE* ();
+ operator const D3DCOLORVALUE* () const;
+
+ operator D3DCOLORVALUE& ();
+ operator const D3DCOLORVALUE& () const;
+
+ D3DXCOLOR& operator += (const D3DXCOLOR&);
+ D3DXCOLOR& operator -= (const D3DXCOLOR&);
+ D3DXCOLOR& operator *= (FLOAT);
+ D3DXCOLOR& operator /= (FLOAT);
+
+ D3DXCOLOR operator + () const;
+ D3DXCOLOR operator - () const;
+
+ D3DXCOLOR operator + (const D3DXCOLOR&) const;
+ D3DXCOLOR operator - (const D3DXCOLOR&) const;
+ D3DXCOLOR operator * (FLOAT) const;
+ D3DXCOLOR operator / (FLOAT) const;
+
+ friend D3DXCOLOR operator * (FLOAT, const D3DXCOLOR&);
+
+ BOOL operator == (const D3DXCOLOR&) const;
+ BOOL operator != (const D3DXCOLOR&) const;
+#endif /* __cplusplus */
+ FLOAT r, g, b, a;
+} D3DXCOLOR, *LPD3DXCOLOR;
+
+typedef struct D3DXFLOAT16
+{
+#ifdef __cplusplus
+ D3DXFLOAT16();
+ D3DXFLOAT16(FLOAT f);
+ D3DXFLOAT16(const D3DXFLOAT16 &f);
+
+ operator FLOAT ();
+
+ BOOL operator == (const D3DXFLOAT16 &) const;
+ BOOL operator != (const D3DXFLOAT16 &) const;
+#endif /* __cplusplus */
+ WORD value;
+} D3DXFLOAT16, *LPD3DXFLOAT16;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+D3DXCOLOR* WINAPI D3DXColorAdjustContrast(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s);
+D3DXCOLOR* WINAPI D3DXColorAdjustSaturation(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s);
+
+FLOAT WINAPI D3DXFresnelTerm(FLOAT costheta, FLOAT refractionindex);
+
+D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR3 *rotationcenter, const D3DXQUATERNION *rotation,
+ const D3DXVECTOR3 *translation);
+D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *pout, FLOAT scaling, const D3DXVECTOR2 *protationcenter, FLOAT rotation,
+ const D3DXVECTOR2 *ptranslation);
+HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutrotation, D3DXVECTOR3 *pouttranslation, const D3DXMATRIX *pm);
+FLOAT WINAPI D3DXMatrixDeterminant(const D3DXMATRIX *pm);
+D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, const D3DXMATRIX *pm);
+D3DXMATRIX* WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup);
+D3DXMATRIX* WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *pout, const D3DXVECTOR3 *peye, const D3DXVECTOR3 *pat, const D3DXVECTOR3 *pup);
+D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2);
+D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm1, const D3DXMATRIX *pm2);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
+D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, const D3DXPLANE *pplane);
+D3DXMATRIX* WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *pout, const D3DXVECTOR3 *pv, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, const D3DXQUATERNION *pq);
+D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
+D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle);
+D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT sz);
+D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, const D3DXVECTOR4 *plight, const D3DXPLANE *pPlane);
+D3DXMATRIX* WINAPI D3DXMatrixTransformation(D3DXMATRIX *pout, const D3DXVECTOR3 *pscalingcenter, const D3DXQUATERNION *pscalingrotation, const D3DXVECTOR3 *pscaling, const D3DXVECTOR3 *protationcenter,
+ const D3DXQUATERNION *protation, const D3DXVECTOR3 *ptranslation);
+D3DXMATRIX* WINAPI D3DXMatrixTransformation2D(D3DXMATRIX *pout, const D3DXVECTOR2 *pscalingcenter, FLOAT scalingrotation, const D3DXVECTOR2 *pscaling,
+ const D3DXVECTOR2 *protationcenter, FLOAT rotation, const D3DXVECTOR2 *ptranslation);
+D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLOAT z);
+D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, const D3DXMATRIX *pm);
+
+D3DXPLANE* WINAPI D3DXPlaneFromPointNormal(D3DXPLANE *pout, const D3DXVECTOR3 *pvpoint, const D3DXVECTOR3 *pvnormal);
+D3DXPLANE* WINAPI D3DXPlaneFromPoints(D3DXPLANE *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3);
+D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine(D3DXVECTOR3 *pout, const D3DXPLANE *pp, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2);
+D3DXPLANE* WINAPI D3DXPlaneNormalize(D3DXPLANE *pout, const D3DXPLANE *pp);
+D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, const D3DXPLANE *pplane, const D3DXMATRIX *pm);
+D3DXPLANE* WINAPI D3DXPlaneTransformArray(D3DXPLANE *pout, UINT outstride, const D3DXPLANE *pplane, UINT pstride, const D3DXMATRIX *pm, UINT n);
+
+D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3, FLOAT f, FLOAT g);
+D3DXQUATERNION* WINAPI D3DXQuaternionExp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionInverse(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionLn(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionMultiply(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2);
+D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, const D3DXQUATERNION *pq);
+D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pout, const D3DXVECTOR3 *pv, FLOAT angle);
+D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, const D3DXMATRIX *pm);
+D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
+D3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, FLOAT t);
+D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3,
+ const D3DXQUATERNION *pq4, FLOAT t);
+void WINAPI D3DXQuaternionSquadSetup(D3DXQUATERNION *paout, D3DXQUATERNION *pbout, D3DXQUATERNION *pcout, const D3DXQUATERNION *pq0,
+ const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2, const D3DXQUATERNION *pq3);
+void WINAPI D3DXQuaternionToAxisAngle(const D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle);
+
+D3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT f, FLOAT g);
+D3DXVECTOR2* WINAPI D3DXVec2CatmullRom(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv0, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pv3, FLOAT s);
+D3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pt1, const D3DXVECTOR2 *pv2, const D3DXVECTOR2 *pt2, FLOAT s);
+D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv);
+D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray(D3DXVECTOR2 *pout, UINT outstride, const D3DXVECTOR2 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+
+D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT f, FLOAT g);
+D3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv0, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pv3, FLOAT s);
+D3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pt1, const D3DXVECTOR3 *pv2, const D3DXVECTOR3 *pt2, FLOAT s);
+D3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv);
+D3DXVECTOR3* WINAPI D3DXVec3Project(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection,
+ const D3DXMATRIX *pview, const D3DXMATRIX *pworld);
+D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport,
+ const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n);
+D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR4* WINAPI D3DXVec3TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+D3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, const D3DVIEWPORT9 *pviewport, const D3DXMATRIX *pprojection,
+ const D3DXMATRIX *pview, const D3DXMATRIX *pworld);
+D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray(D3DXVECTOR3 *pout, UINT outstride, const D3DXVECTOR3 *pv, UINT vstride, const D3DVIEWPORT9 *pviewport,
+ const D3DXMATRIX *pprojection, const D3DXMATRIX *pview, const D3DXMATRIX *pworld, UINT n);
+D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT f, FLOAT g);
+D3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv0, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3, FLOAT s);
+D3DXVECTOR4* WINAPI D3DXVec4Cross(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pv3);
+D3DXVECTOR4* WINAPI D3DXVec4Hermite(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pt1, const D3DXVECTOR4 *pv2, const D3DXVECTOR4 *pt2, FLOAT s);
+D3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv);
+D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, const D3DXMATRIX *pm);
+D3DXVECTOR4* WINAPI D3DXVec4TransformArray(D3DXVECTOR4 *pout, UINT outstride, const D3DXVECTOR4 *pv, UINT vstride, const D3DXMATRIX *pm, UINT n);
+
+D3DXFLOAT16 *WINAPI D3DXFloat32To16Array(D3DXFLOAT16 *pout, const FLOAT *pin, UINT n);
+FLOAT *WINAPI D3DXFloat16To32Array(FLOAT *pout, const D3DXFLOAT16 *pin, UINT n);
+
+FLOAT* WINAPI D3DXSHAdd(FLOAT *out, UINT order, const FLOAT *a, const FLOAT *b);
+FLOAT WINAPI D3DXSHDot(UINT order, const FLOAT *a, const FLOAT *b);
+HRESULT WINAPI D3DXSHEvalConeLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+FLOAT* WINAPI D3DXSHEvalDirection(FLOAT *out, UINT order, const D3DXVECTOR3 *dir);
+HRESULT WINAPI D3DXSHEvalDirectionalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+HRESULT WINAPI D3DXSHEvalHemisphereLight(UINT order, const D3DXVECTOR3 *dir, D3DXCOLOR top, D3DXCOLOR bottom, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+HRESULT WINAPI D3DXSHEvalSphericalLight(UINT order, const D3DXVECTOR3 *dir, FLOAT radius, FLOAT Rintensity, FLOAT Gintensity, FLOAT Bintensity, FLOAT *rout, FLOAT *gout, FLOAT *bout);
+FLOAT* WINAPI D3DXSHMultiply2(FLOAT *out, const FLOAT *a, const FLOAT *b);
+FLOAT* WINAPI D3DXSHMultiply3(FLOAT *out, const FLOAT *a, const FLOAT *b);
+FLOAT* WINAPI D3DXSHMultiply4(FLOAT *out, const FLOAT *a, const FLOAT *b);
+FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, const D3DXMATRIX *matrix, const FLOAT *in);
+FLOAT* WINAPI D3DXSHRotateZ(FLOAT *out, UINT order, FLOAT angle, const FLOAT *in);
+FLOAT* WINAPI D3DXSHScale(FLOAT *out, UINT order, const FLOAT *a, const FLOAT scale);
+
+#ifdef __cplusplus
+}
+#endif
+
+typedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK;
+
+DEFINE_GUID(IID_ID3DXMatrixStack,
+0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85);
+
+#undef INTERFACE
+#define INTERFACE ID3DXMatrixStack
+
+DECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown)
+{
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ STDMETHOD(Pop)(THIS) PURE;
+ STDMETHOD(Push)(THIS) PURE;
+ STDMETHOD(LoadIdentity)(THIS) PURE;
+ STDMETHOD(LoadMatrix)(THIS_ const D3DXMATRIX* pM ) PURE;
+ STDMETHOD(MultMatrix)(THIS_ const D3DXMATRIX* pM ) PURE;
+ STDMETHOD(MultMatrixLocal)(THIS_ const D3DXMATRIX* pM ) PURE;
+ STDMETHOD(RotateAxis)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE;
+ STDMETHOD(RotateAxisLocal)(THIS_ const D3DXVECTOR3* pV, FLOAT Angle) PURE;
+ STDMETHOD(RotateYawPitchRoll)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
+ STDMETHOD(RotateYawPitchRollLocal)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
+ STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
+ STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
+ STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE;
+ STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
+ STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE;
+};
+
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+
+#define ID3DXMatrixStack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXMatrixStack_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXMatrixStack_Release(p) (p)->lpVtbl->Release(p)
+#define ID3DXMatrixStack_Pop(p) (p)->lpVtbl->Pop(p)
+#define ID3DXMatrixStack_Push(p) (p)->lpVtbl->Push(p)
+#define ID3DXMatrixStack_LoadIdentity(p) (p)->lpVtbl->LoadIdentity(p)
+#define ID3DXMatrixStack_LoadMatrix(p,a) (p)->lpVtbl->LoadMatrix(p,a)
+#define ID3DXMatrixStack_MultMatrix(p,a) (p)->lpVtbl->MultMatrix(p,a)
+#define ID3DXMatrixStack_MultMatrixLocal(p,a) (p)->lpVtbl->MultMatrixLocal(p,a)
+#define ID3DXMatrixStack_RotateAxis(p,a,b) (p)->lpVtbl->RotateAxis(p,a,b)
+#define ID3DXMatrixStack_RotateAxisLocal(p,a,b) (p)->lpVtbl->RotateAxisLocal(p,a,b)
+#define ID3DXMatrixStack_RotateYawPitchRoll(p,a,b,c) (p)->lpVtbl->RotateYawPitchRoll(p,a,b,c)
+#define ID3DXMatrixStack_RotateYawPitchRollLocal(p,a,b,c) (p)->lpVtbl->RotateYawPitchRollLocal(p,a,b,c)
+#define ID3DXMatrixStack_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c)
+#define ID3DXMatrixStack_ScaleLocal(p,a,b,c) (p)->lpVtbl->ScaleLocal(p,a,b,c)
+#define ID3DXMatrixStack_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a,b,c)
+#define ID3DXMatrixStack_TranslateLocal(p,a,b,c) (p)->lpVtbl->TranslateLocal(p,a,b,c)
+#define ID3DXMatrixStack_GetTop(p) (p)->lpVtbl->GetTop(p)
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateMatrixStack(DWORD flags, ID3DXMatrixStack **stack);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <d3dx9math.inl>
+
+#endif /* __D3DX9MATH_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
new file mode 100644
index 00000000..f1535a55
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9math.inl
@@ -0,0 +1,1307 @@
+/*
+ * Copyright (C) 2007 David Adam
+ * Copyright (C) 2007 Tony Wasserka
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __D3DX9MATH_INL__
+#define __D3DX9MATH_INL__
+
+/* constructors & operators */
+#ifdef __cplusplus
+
+inline D3DXVECTOR2::D3DXVECTOR2()
+{
+}
+
+inline D3DXVECTOR2::D3DXVECTOR2(const FLOAT *pf)
+{
+ if(!pf) return;
+ x = pf[0];
+ y = pf[1];
+}
+
+inline D3DXVECTOR2::D3DXVECTOR2(FLOAT fx, FLOAT fy)
+{
+ x = fx;
+ y = fy;
+}
+
+inline D3DXVECTOR2::operator FLOAT* ()
+{
+ return (FLOAT*)&x;
+}
+
+inline D3DXVECTOR2::operator const FLOAT* () const
+{
+ return (const FLOAT*)&x;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator += (const D3DXVECTOR2& v)
+{
+ x += v.x;
+ y += v.y;
+ return *this;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator -= (const D3DXVECTOR2& v)
+{
+ x -= v.x;
+ y -= v.y;
+ return *this;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator *= (FLOAT f)
+{
+ x *= f;
+ y *= f;
+ return *this;
+}
+
+inline D3DXVECTOR2& D3DXVECTOR2::operator /= (FLOAT f)
+{
+ x /= f;
+ y /= f;
+ return *this;
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator + () const
+{
+ return *this;
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator - () const
+{
+ return D3DXVECTOR2(-x, -y);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator + (const D3DXVECTOR2& v) const
+{
+ return D3DXVECTOR2(x + v.x, y + v.y);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator - (const D3DXVECTOR2& v) const
+{
+ return D3DXVECTOR2(x - v.x, y - v.y);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator * (FLOAT f) const
+{
+ return D3DXVECTOR2(x * f, y * f);
+}
+
+inline D3DXVECTOR2 D3DXVECTOR2::operator / (FLOAT f) const
+{
+ return D3DXVECTOR2(x / f, y / f);
+}
+
+inline D3DXVECTOR2 operator * (FLOAT f, const D3DXVECTOR2& v)
+{
+ return D3DXVECTOR2(f * v.x, f * v.y);
+}
+
+inline BOOL D3DXVECTOR2::operator == (const D3DXVECTOR2& v) const
+{
+ return x == v.x && y == v.y;
+}
+
+inline BOOL D3DXVECTOR2::operator != (const D3DXVECTOR2& v) const
+{
+ return x != v.x || y != v.y;
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3()
+{
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3(const FLOAT *pf)
+{
+ if(!pf) return;
+ x = pf[0];
+ y = pf[1];
+ z = pf[2];
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3(const D3DVECTOR& v)
+{
+ x = v.x;
+ y = v.y;
+ z = v.z;
+}
+
+inline D3DXVECTOR3::D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz)
+{
+ x = fx;
+ y = fy;
+ z = fz;
+}
+
+inline D3DXVECTOR3::operator FLOAT* ()
+{
+ return (FLOAT*)&x;
+}
+
+inline D3DXVECTOR3::operator const FLOAT* () const
+{
+ return (const FLOAT*)&x;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator += (const D3DXVECTOR3& v)
+{
+ x += v.x;
+ y += v.y;
+ z += v.z;
+ return *this;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator -= (const D3DXVECTOR3& v)
+{
+ x -= v.x;
+ y -= v.y;
+ z -= v.z;
+ return *this;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator *= (FLOAT f)
+{
+ x *= f;
+ y *= f;
+ z *= f;
+ return *this;
+}
+
+inline D3DXVECTOR3& D3DXVECTOR3::operator /= (FLOAT f)
+{
+ x /= f;
+ y /= f;
+ z /= f;
+ return *this;
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator + () const
+{
+ return *this;
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator - () const
+{
+ return D3DXVECTOR3(-x, -y, -z);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator + (const D3DXVECTOR3& v) const
+{
+ return D3DXVECTOR3(x + v.x, y + v.y, z + v.z);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator - (const D3DXVECTOR3& v) const
+{
+ return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator * (FLOAT f) const
+{
+ return D3DXVECTOR3(x * f, y * f, z * f);
+}
+
+inline D3DXVECTOR3 D3DXVECTOR3::operator / (FLOAT f) const
+{
+ return D3DXVECTOR3(x / f, y / f, z / f);
+}
+
+inline D3DXVECTOR3 operator * (FLOAT f, const D3DXVECTOR3& v)
+{
+ return D3DXVECTOR3(f * v.x, f * v.y, f * v.z);
+}
+
+inline BOOL D3DXVECTOR3::operator == (const D3DXVECTOR3& v) const
+{
+ return x == v.x && y == v.y && z == v.z;
+}
+
+inline BOOL D3DXVECTOR3::operator != (const D3DXVECTOR3& v) const
+{
+ return x != v.x || y != v.y || z != v.z;
+}
+
+inline D3DXVECTOR4::D3DXVECTOR4()
+{
+}
+
+inline D3DXVECTOR4::D3DXVECTOR4(const FLOAT *pf)
+{
+ if(!pf) return;
+ x = pf[0];
+ y = pf[1];
+ z = pf[2];
+ w = pf[3];
+}
+
+inline D3DXVECTOR4::D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)
+{
+ x = fx;
+ y = fy;
+ z = fz;
+ w = fw;
+}
+
+inline D3DXVECTOR4::operator FLOAT* ()
+{
+ return (FLOAT*)&x;
+}
+
+inline D3DXVECTOR4::operator const FLOAT* () const
+{
+ return (const FLOAT*)&x;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator += (const D3DXVECTOR4& v)
+{
+ x += v.x;
+ y += v.y;
+ z += v.z;
+ w += v.w;
+ return *this;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator -= (const D3DXVECTOR4& v)
+{
+ x -= v.x;
+ y -= v.y;
+ z -= v.z;
+ w -= v.w;
+ return *this;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator *= (FLOAT f)
+{
+ x *= f;
+ y *= f;
+ z *= f;
+ w *= f;
+ return *this;
+}
+
+inline D3DXVECTOR4& D3DXVECTOR4::operator /= (FLOAT f)
+{
+ x /= f;
+ y /= f;
+ z /= f;
+ w /= f;
+ return *this;
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator + () const
+{
+ return *this;
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator - () const
+{
+ return D3DXVECTOR4(-x, -y, -z, -w);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator + (const D3DXVECTOR4& v) const
+{
+ return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator - (const D3DXVECTOR4& v) const
+{
+ return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator * (FLOAT f) const
+{
+ return D3DXVECTOR4(x * f, y * f, z * f, w * f);
+}
+
+inline D3DXVECTOR4 D3DXVECTOR4::operator / (FLOAT f) const
+{
+ return D3DXVECTOR4(x / f, y / f, z / f, w / f);
+}
+
+inline D3DXVECTOR4 operator * (FLOAT f, const D3DXVECTOR4& v)
+{
+ return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w);
+}
+
+inline BOOL D3DXVECTOR4::operator == (const D3DXVECTOR4& v) const
+{
+ return x == v.x && y == v.y && z == v.z && w == v.w;
+}
+
+inline BOOL D3DXVECTOR4::operator != (const D3DXVECTOR4& v) const
+{
+ return x != v.x || y != v.y || z != v.z || w != v.w;
+}
+
+inline D3DXMATRIX::D3DXMATRIX()
+{
+}
+
+inline D3DXMATRIX::D3DXMATRIX(const FLOAT *pf)
+{
+ if(!pf) return;
+ memcpy(&_11, pf, sizeof(D3DXMATRIX));
+}
+
+inline D3DXMATRIX::D3DXMATRIX(const D3DMATRIX& mat)
+{
+ memcpy(&_11, &mat, sizeof(D3DXMATRIX));
+}
+
+inline D3DXMATRIX::D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
+ FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
+ FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
+ FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44)
+{
+ _11 = f11; _12 = f12; _13 = f13; _14 = f14;
+ _21 = f21; _22 = f22; _23 = f23; _24 = f24;
+ _31 = f31; _32 = f32; _33 = f33; _34 = f34;
+ _41 = f41; _42 = f42; _43 = f43; _44 = f44;
+}
+
+inline FLOAT& D3DXMATRIX::operator () (UINT row, UINT col)
+{
+ return m[row][col];
+}
+
+inline FLOAT D3DXMATRIX::operator () (UINT row, UINT col) const
+{
+ return m[row][col];
+}
+
+inline D3DXMATRIX::operator FLOAT* ()
+{
+ return (FLOAT*)&_11;
+}
+
+inline D3DXMATRIX::operator const FLOAT* () const
+{
+ return (const FLOAT*)&_11;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator *= (const D3DXMATRIX& mat)
+{
+ D3DXMatrixMultiply(this, this, &mat);
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator += (const D3DXMATRIX& mat)
+{
+ _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;
+ _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;
+ _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;
+ _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator -= (const D3DXMATRIX& mat)
+{
+ _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;
+ _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;
+ _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;
+ _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator *= (FLOAT f)
+{
+ _11 *= f; _12 *= f; _13 *= f; _14 *= f;
+ _21 *= f; _22 *= f; _23 *= f; _24 *= f;
+ _31 *= f; _32 *= f; _33 *= f; _34 *= f;
+ _41 *= f; _42 *= f; _43 *= f; _44 *= f;
+ return *this;
+}
+
+inline D3DXMATRIX& D3DXMATRIX::operator /= (FLOAT f)
+{
+ FLOAT inv = 1.0f / f;
+ _11 *= inv; _12 *= inv; _13 *= inv; _14 *= inv;
+ _21 *= inv; _22 *= inv; _23 *= inv; _24 *= inv;
+ _31 *= inv; _32 *= inv; _33 *= inv; _34 *= inv;
+ _41 *= inv; _42 *= inv; _43 *= inv; _44 *= inv;
+ return *this;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator + () const
+{
+ return *this;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator - () const
+{
+ return D3DXMATRIX(-_11, -_12, -_13, -_14,
+ -_21, -_22, -_23, -_24,
+ -_31, -_32, -_33, -_34,
+ -_41, -_42, -_43, -_44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator * (const D3DXMATRIX& mat) const
+{
+ D3DXMATRIX buf;
+ D3DXMatrixMultiply(&buf, this, &mat);
+ return buf;
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator + (const D3DXMATRIX& mat) const
+{
+ return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14,
+ _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24,
+ _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34,
+ _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator - (const D3DXMATRIX& mat) const
+{
+ return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14,
+ _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24,
+ _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34,
+ _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator * (FLOAT f) const
+{
+ return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f,
+ _21 * f, _22 * f, _23 * f, _24 * f,
+ _31 * f, _32 * f, _33 * f, _34 * f,
+ _41 * f, _42 * f, _43 * f, _44 * f);
+}
+
+inline D3DXMATRIX D3DXMATRIX::operator / (FLOAT f) const
+{
+ FLOAT inv = 1.0f / f;
+ return D3DXMATRIX(_11 * inv, _12 * inv, _13 * inv, _14 * inv,
+ _21 * inv, _22 * inv, _23 * inv, _24 * inv,
+ _31 * inv, _32 * inv, _33 * inv, _34 * inv,
+ _41 * inv, _42 * inv, _43 * inv, _44 * inv);
+}
+
+inline D3DXMATRIX operator * (FLOAT f, const D3DXMATRIX& mat)
+{
+ return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,
+ f * mat._21, f * mat._22, f * mat._23, f * mat._24,
+ f * mat._31, f * mat._32, f * mat._33, f * mat._34,
+ f * mat._41, f * mat._42, f * mat._43, f * mat._44);
+}
+
+inline BOOL D3DXMATRIX::operator == (const D3DXMATRIX& mat) const
+{
+ return (memcmp(this, &mat, sizeof(D3DXMATRIX)) == 0);
+}
+
+inline BOOL D3DXMATRIX::operator != (const D3DXMATRIX& mat) const
+{
+ return (memcmp(this, &mat, sizeof(D3DXMATRIX)) != 0);
+}
+
+inline D3DXQUATERNION::D3DXQUATERNION()
+{
+}
+
+inline D3DXQUATERNION::D3DXQUATERNION(const FLOAT *pf)
+{
+ if(!pf) return;
+ x = pf[0];
+ y = pf[1];
+ z = pf[2];
+ w = pf[3];
+}
+
+inline D3DXQUATERNION::D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)
+{
+ x = fx;
+ y = fy;
+ z = fz;
+ w = fw;
+}
+
+inline D3DXQUATERNION::operator FLOAT* ()
+{
+ return (FLOAT*)&x;
+}
+
+inline D3DXQUATERNION::operator const FLOAT* () const
+{
+ return (const FLOAT*)&x;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator += (const D3DXQUATERNION& quat)
+{
+ x += quat.x;
+ y += quat.y;
+ z += quat.z;
+ w += quat.w;
+ return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator -= (const D3DXQUATERNION& quat)
+{
+ x -= quat.x;
+ y -= quat.y;
+ z -= quat.z;
+ w -= quat.w;
+ return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator *= (const D3DXQUATERNION& quat)
+{
+ D3DXQuaternionMultiply(this, this, &quat);
+ return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)
+{
+ x *= f;
+ y *= f;
+ z *= f;
+ w *= f;
+ return *this;
+}
+
+inline D3DXQUATERNION& D3DXQUATERNION::operator /= (FLOAT f)
+{
+ FLOAT inv = 1.0f / f;
+ x *= inv;
+ y *= inv;
+ z *= inv;
+ w *= inv;
+ return *this;
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator + () const
+{
+ return *this;
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator - () const
+{
+ return D3DXQUATERNION(-x, -y, -z, -w);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator + (const D3DXQUATERNION& quat) const
+{
+ return D3DXQUATERNION(x + quat.x, y + quat.y, z + quat.z, w + quat.w);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator - (const D3DXQUATERNION& quat) const
+{
+ return D3DXQUATERNION(x - quat.x, y - quat.y, z - quat.z, w - quat.w);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator * (const D3DXQUATERNION& quat) const
+{
+ D3DXQUATERNION buf;
+ D3DXQuaternionMultiply(&buf, this, &quat);
+ return buf;
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator * (FLOAT f) const
+{
+ return D3DXQUATERNION(x * f, y * f, z * f, w * f);
+}
+
+inline D3DXQUATERNION D3DXQUATERNION::operator / (FLOAT f) const
+{
+ FLOAT inv = 1.0f / f;
+ return D3DXQUATERNION(x * inv, y * inv, z * inv, w * inv);
+}
+
+inline D3DXQUATERNION operator * (FLOAT f, const D3DXQUATERNION& quat)
+{
+ return D3DXQUATERNION(f * quat.x, f * quat.y, f * quat.z, f * quat.w);
+}
+
+inline BOOL D3DXQUATERNION::operator == (const D3DXQUATERNION& quat) const
+{
+ return x == quat.x && y == quat.y && z == quat.z && w == quat.w;
+}
+
+inline BOOL D3DXQUATERNION::operator != (const D3DXQUATERNION& quat) const
+{
+ return x != quat.x || y != quat.y || z != quat.z || w != quat.w;
+}
+
+inline D3DXPLANE::D3DXPLANE()
+{
+}
+
+inline D3DXPLANE::D3DXPLANE(const FLOAT *pf)
+{
+ if(!pf) return;
+ a = pf[0];
+ b = pf[1];
+ c = pf[2];
+ d = pf[3];
+}
+
+inline D3DXPLANE::D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd)
+{
+ a = fa;
+ b = fb;
+ c = fc;
+ d = fd;
+}
+
+inline D3DXPLANE::operator FLOAT* ()
+{
+ return (FLOAT*)&a;
+}
+
+inline D3DXPLANE::operator const FLOAT* () const
+{
+ return (const FLOAT*)&a;
+}
+
+inline D3DXPLANE D3DXPLANE::operator + () const
+{
+ return *this;
+}
+
+inline D3DXPLANE D3DXPLANE::operator - () const
+{
+ return D3DXPLANE(-a, -b, -c, -d);
+}
+
+inline BOOL D3DXPLANE::operator == (const D3DXPLANE& pl) const
+{
+ return a == pl.a && b == pl.b && c == pl.c && d == pl.d;
+}
+
+inline BOOL D3DXPLANE::operator != (const D3DXPLANE& pl) const
+{
+ return a != pl.a || b != pl.b || c != pl.c || d != pl.d;
+}
+
+inline D3DXCOLOR::D3DXCOLOR()
+{
+}
+
+inline D3DXCOLOR::D3DXCOLOR(DWORD col)
+{
+ const FLOAT f = 1.0f / 255.0f;
+ r = f * (FLOAT)(unsigned char)(col >> 16);
+ g = f * (FLOAT)(unsigned char)(col >> 8);
+ b = f * (FLOAT)(unsigned char)col;
+ a = f * (FLOAT)(unsigned char)(col >> 24);
+}
+
+inline D3DXCOLOR::D3DXCOLOR(const FLOAT *pf)
+{
+ if(!pf) return;
+ r = pf[0];
+ g = pf[1];
+ b = pf[2];
+ a = pf[3];
+}
+
+inline D3DXCOLOR::D3DXCOLOR(const D3DCOLORVALUE& col)
+{
+ r = col.r;
+ g = col.g;
+ b = col.b;
+ a = col.a;
+}
+
+inline D3DXCOLOR::D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa)
+{
+ r = fr;
+ g = fg;
+ b = fb;
+ a = fa;
+}
+
+inline D3DXCOLOR::operator DWORD () const
+{
+ DWORD _r = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD)(r * 255.0f + 0.5f);
+ DWORD _g = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD)(g * 255.0f + 0.5f);
+ DWORD _b = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD)(b * 255.0f + 0.5f);
+ DWORD _a = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD)(a * 255.0f + 0.5f);
+
+ return (_a << 24) | (_r << 16) | (_g << 8) | _b;
+}
+
+inline D3DXCOLOR::operator FLOAT * ()
+{
+ return (FLOAT*)&r;
+}
+
+inline D3DXCOLOR::operator const FLOAT * () const
+{
+ return (const FLOAT*)&r;
+}
+
+inline D3DXCOLOR::operator D3DCOLORVALUE * ()
+{
+ return (D3DCOLORVALUE*)&r;
+}
+
+inline D3DXCOLOR::operator const D3DCOLORVALUE * () const
+{
+ return (const D3DCOLORVALUE*)&r;
+}
+
+inline D3DXCOLOR::operator D3DCOLORVALUE& ()
+{
+ return *((D3DCOLORVALUE*)&r);
+}
+
+inline D3DXCOLOR::operator const D3DCOLORVALUE& () const
+{
+ return *((const D3DCOLORVALUE*)&r);
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator += (const D3DXCOLOR& col)
+{
+ r += col.r;
+ g += col.g;
+ b += col.b;
+ a += col.a;
+ return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator -= (const D3DXCOLOR& col)
+{
+ r -= col.r;
+ g -= col.g;
+ b -= col.b;
+ a -= col.a;
+ return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator *= (FLOAT f)
+{
+ r *= f;
+ g *= f;
+ b *= f;
+ a *= f;
+ return *this;
+}
+
+inline D3DXCOLOR& D3DXCOLOR::operator /= (FLOAT f)
+{
+ FLOAT inv = 1.0f / f;
+ r *= inv;
+ g *= inv;
+ b *= inv;
+ a *= inv;
+ return *this;
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator + () const
+{
+ return *this;
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator - () const
+{
+ return D3DXCOLOR(-r, -g, -b, -a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator + (const D3DXCOLOR& col) const
+{
+ return D3DXCOLOR(r + col.r, g + col.g, b + col.b, a + col.a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator - (const D3DXCOLOR& col) const
+{
+ return D3DXCOLOR(r - col.r, g - col.g, b - col.b, a - col.a);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator * (FLOAT f) const
+{
+ return D3DXCOLOR(r * f, g * f, b * f, a * f);
+}
+
+inline D3DXCOLOR D3DXCOLOR::operator / (FLOAT f) const
+{
+ FLOAT inv = 1.0f / f;
+ return D3DXCOLOR(r * inv, g * inv, b * inv, a * inv);
+}
+
+inline D3DXCOLOR operator * (FLOAT f, const D3DXCOLOR& col)
+{
+ return D3DXCOLOR(f * col.r, f * col.g, f * col.b, f * col.a);
+}
+
+inline BOOL D3DXCOLOR::operator == (const D3DXCOLOR& col) const
+{
+ return r == col.r && g == col.g && b == col.b && a == col.a;
+}
+
+inline BOOL D3DXCOLOR::operator != (const D3DXCOLOR& col) const
+{
+ return r != col.r || g != col.g || b != col.b || a != col.a;
+}
+
+inline D3DXFLOAT16::D3DXFLOAT16()
+{
+}
+
+inline D3DXFLOAT16::D3DXFLOAT16(FLOAT f)
+{
+ D3DXFloat32To16Array(this, &f, 1);
+}
+
+inline D3DXFLOAT16::D3DXFLOAT16(const D3DXFLOAT16 &f)
+{
+ value = f.value;
+}
+
+inline D3DXFLOAT16::operator FLOAT ()
+{
+ FLOAT f;
+ D3DXFloat16To32Array(&f, this, 1);
+ return f;
+}
+
+inline BOOL D3DXFLOAT16::operator == (const D3DXFLOAT16 &f) const
+{
+ return value == f.value;
+}
+
+inline BOOL D3DXFLOAT16::operator != (const D3DXFLOAT16 &f) const
+{
+ return value != f.value;
+}
+
+#endif /* __cplusplus */
+
+/*_______________D3DXCOLOR_____________________*/
+
+static inline D3DXCOLOR* D3DXColorAdd(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
+{
+ if ( !pout || !pc1 || !pc2 ) return NULL;
+ pout->r = (pc1->r) + (pc2->r);
+ pout->g = (pc1->g) + (pc2->g);
+ pout->b = (pc1->b) + (pc2->b);
+ pout->a = (pc1->a) + (pc2->a);
+ return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorLerp(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2, FLOAT s)
+{
+ if ( !pout || !pc1 || !pc2 ) return NULL;
+ pout->r = (1-s) * (pc1->r) + s *(pc2->r);
+ pout->g = (1-s) * (pc1->g) + s *(pc2->g);
+ pout->b = (1-s) * (pc1->b) + s *(pc2->b);
+ pout->a = (1-s) * (pc1->a) + s *(pc2->a);
+ return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorModulate(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
+{
+ if ( !pout || !pc1 || !pc2 ) return NULL;
+ pout->r = (pc1->r) * (pc2->r);
+ pout->g = (pc1->g) * (pc2->g);
+ pout->b = (pc1->b) * (pc2->b);
+ pout->a = (pc1->a) * (pc2->a);
+ return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorNegative(D3DXCOLOR *pout, const D3DXCOLOR *pc)
+{
+ if ( !pout || !pc ) return NULL;
+ pout->r = 1.0f - pc->r;
+ pout->g = 1.0f - pc->g;
+ pout->b = 1.0f - pc->b;
+ pout->a = pc->a;
+ return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorScale(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s)
+{
+ if ( !pout || !pc ) return NULL;
+ pout->r = s* (pc->r);
+ pout->g = s* (pc->g);
+ pout->b = s* (pc->b);
+ pout->a = s* (pc->a);
+ return pout;
+}
+
+static inline D3DXCOLOR* D3DXColorSubtract(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
+{
+ if ( !pout || !pc1 || !pc2 ) return NULL;
+ pout->r = (pc1->r) - (pc2->r);
+ pout->g = (pc1->g) - (pc2->g);
+ pout->b = (pc1->b) - (pc2->b);
+ pout->a = (pc1->a) - (pc2->a);
+ return pout;
+}
+
+/*_______________D3DXVECTOR2________________________*/
+
+static inline D3DXVECTOR2* D3DXVec2Add(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x + pv2->x;
+ pout->y = pv1->y + pv2->y;
+ return pout;
+}
+
+static inline FLOAT D3DXVec2CCW(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+ if ( !pv1 || !pv2) return 0.0f;
+ return ( (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x) );
+}
+
+static inline FLOAT D3DXVec2Dot(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+ if ( !pv1 || !pv2) return 0.0f;
+ return ( (pv1->x * pv2->x + pv1->y * pv2->y) );
+}
+
+static inline FLOAT D3DXVec2Length(const D3DXVECTOR2 *pv)
+{
+ if (!pv) return 0.0f;
+ return sqrtf( pv->x * pv->x + pv->y * pv->y );
+}
+
+static inline FLOAT D3DXVec2LengthSq(const D3DXVECTOR2 *pv)
+{
+ if (!pv) return 0.0f;
+ return( (pv->x) * (pv->x) + (pv->y) * (pv->y) );
+}
+
+static inline D3DXVECTOR2* D3DXVec2Lerp(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, FLOAT s)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = (1-s) * (pv1->x) + s * (pv2->x);
+ pout->y = (1-s) * (pv1->y) + s * (pv2->y);
+ return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Maximize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
+ pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
+ return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Minimize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
+ pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
+ return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Scale(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, FLOAT s)
+{
+ if ( !pout || !pv) return NULL;
+ pout->x = s * (pv->x);
+ pout->y = s * (pv->y);
+ return pout;
+}
+
+static inline D3DXVECTOR2* D3DXVec2Subtract(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x - pv2->x;
+ pout->y = pv1->y - pv2->y;
+ return pout;
+}
+
+/*__________________D3DXVECTOR3_______________________*/
+
+static inline D3DXVECTOR3* D3DXVec3Add(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x + pv2->x;
+ pout->y = pv1->y + pv2->y;
+ pout->z = pv1->z + pv2->z;
+ return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Cross(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+ D3DXVECTOR3 temp;
+
+ if ( !pout || !pv1 || !pv2) return NULL;
+ temp.x = (pv1->y) * (pv2->z) - (pv1->z) * (pv2->y);
+ temp.y = (pv1->z) * (pv2->x) - (pv1->x) * (pv2->z);
+ temp.z = (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x);
+ *pout = temp;
+ return pout;
+}
+
+static inline FLOAT D3DXVec3Dot(const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+ if ( !pv1 || !pv2 ) return 0.0f;
+ return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z);
+}
+
+static inline FLOAT D3DXVec3Length(const D3DXVECTOR3 *pv)
+{
+ if (!pv) return 0.0f;
+ return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z );
+}
+
+static inline FLOAT D3DXVec3LengthSq(const D3DXVECTOR3 *pv)
+{
+ if (!pv) return 0.0f;
+ return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z);
+}
+
+static inline D3DXVECTOR3* D3DXVec3Lerp(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, FLOAT s)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = (1-s) * (pv1->x) + s * (pv2->x);
+ pout->y = (1-s) * (pv1->y) + s * (pv2->y);
+ pout->z = (1-s) * (pv1->z) + s * (pv2->z);
+ return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Maximize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
+ pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
+ pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;
+ return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Minimize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
+ pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
+ pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;
+ return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Scale(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, FLOAT s)
+{
+ if ( !pout || !pv) return NULL;
+ pout->x = s * (pv->x);
+ pout->y = s * (pv->y);
+ pout->z = s * (pv->z);
+ return pout;
+}
+
+static inline D3DXVECTOR3* D3DXVec3Subtract(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x - pv2->x;
+ pout->y = pv1->y - pv2->y;
+ pout->z = pv1->z - pv2->z;
+ return pout;
+}
+/*__________________D3DXVECTOR4_______________________*/
+
+static inline D3DXVECTOR4* D3DXVec4Add(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x + pv2->x;
+ pout->y = pv1->y + pv2->y;
+ pout->z = pv1->z + pv2->z;
+ pout->w = pv1->w + pv2->w;
+ return pout;
+}
+
+static inline FLOAT D3DXVec4Dot(const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+ if (!pv1 || !pv2 ) return 0.0f;
+ return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z) + (pv1->w) * (pv2->w);
+}
+
+static inline FLOAT D3DXVec4Length(const D3DXVECTOR4 *pv)
+{
+ if (!pv) return 0.0f;
+ return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z + pv->w * pv->w );
+}
+
+static inline FLOAT D3DXVec4LengthSq(const D3DXVECTOR4 *pv)
+{
+ if (!pv) return 0.0f;
+ return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z) + (pv->w) * (pv->w);
+}
+
+static inline D3DXVECTOR4* D3DXVec4Lerp(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, FLOAT s)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = (1-s) * (pv1->x) + s * (pv2->x);
+ pout->y = (1-s) * (pv1->y) + s * (pv2->y);
+ pout->z = (1-s) * (pv1->z) + s * (pv2->z);
+ pout->w = (1-s) * (pv1->w) + s * (pv2->w);
+ return pout;
+}
+
+
+static inline D3DXVECTOR4* D3DXVec4Maximize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
+ pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
+ pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;
+ pout->w = pv1->w > pv2->w ? pv1->w : pv2->w;
+ return pout;
+}
+
+static inline D3DXVECTOR4* D3DXVec4Minimize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
+ pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
+ pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;
+ pout->w = pv1->w < pv2->w ? pv1->w : pv2->w;
+ return pout;
+}
+
+static inline D3DXVECTOR4* D3DXVec4Scale(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, FLOAT s)
+{
+ if ( !pout || !pv) return NULL;
+ pout->x = s * (pv->x);
+ pout->y = s * (pv->y);
+ pout->z = s * (pv->z);
+ pout->w = s * (pv->w);
+ return pout;
+}
+
+static inline D3DXVECTOR4* D3DXVec4Subtract(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
+{
+ if ( !pout || !pv1 || !pv2) return NULL;
+ pout->x = pv1->x - pv2->x;
+ pout->y = pv1->y - pv2->y;
+ pout->z = pv1->z - pv2->z;
+ pout->w = pv1->w - pv2->w;
+ return pout;
+}
+
+/*__________________D3DXMatrix____________________*/
+#ifdef NONAMELESSUNION
+# define D3DX_U(x) (x).u
+#else
+# define D3DX_U(x) (x)
+#endif
+
+static inline D3DXMATRIX* D3DXMatrixIdentity(D3DXMATRIX *pout)
+{
+ if ( !pout ) return NULL;
+ D3DX_U(*pout).m[0][1] = 0.0f;
+ D3DX_U(*pout).m[0][2] = 0.0f;
+ D3DX_U(*pout).m[0][3] = 0.0f;
+ D3DX_U(*pout).m[1][0] = 0.0f;
+ D3DX_U(*pout).m[1][2] = 0.0f;
+ D3DX_U(*pout).m[1][3] = 0.0f;
+ D3DX_U(*pout).m[2][0] = 0.0f;
+ D3DX_U(*pout).m[2][1] = 0.0f;
+ D3DX_U(*pout).m[2][3] = 0.0f;
+ D3DX_U(*pout).m[3][0] = 0.0f;
+ D3DX_U(*pout).m[3][1] = 0.0f;
+ D3DX_U(*pout).m[3][2] = 0.0f;
+ D3DX_U(*pout).m[0][0] = 1.0f;
+ D3DX_U(*pout).m[1][1] = 1.0f;
+ D3DX_U(*pout).m[2][2] = 1.0f;
+ D3DX_U(*pout).m[3][3] = 1.0f;
+ return pout;
+}
+
+static inline BOOL D3DXMatrixIsIdentity(D3DXMATRIX *pm)
+{
+ int i,j;
+ D3DXMATRIX testmatrix;
+
+ if ( !pm ) return FALSE;
+ D3DXMatrixIdentity(&testmatrix);
+ for (i=0; i<4; i++)
+ {
+ for (j=0; j<4; j++)
+ {
+ if ( D3DX_U(*pm).m[i][j] != D3DX_U(testmatrix).m[i][j] ) return FALSE;
+ }
+ }
+ return TRUE;
+}
+#undef D3DX_U
+
+/*__________________D3DXPLANE____________________*/
+
+static inline FLOAT D3DXPlaneDot(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
+{
+ if ( !pp || !pv ) return 0.0f;
+ return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) * (pv->w) );
+}
+
+static inline FLOAT D3DXPlaneDotCoord(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
+{
+ if ( !pp || !pv ) return 0.0f;
+ return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) );
+}
+
+static inline FLOAT D3DXPlaneDotNormal(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
+{
+ if ( !pp || !pv ) return 0.0f;
+ return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) );
+}
+
+/*__________________D3DXQUATERNION____________________*/
+
+static inline D3DXQUATERNION* D3DXQuaternionConjugate(D3DXQUATERNION *pout, const D3DXQUATERNION *pq)
+{
+ if ( !pout || !pq) return NULL;
+ pout->x = -pq->x;
+ pout->y = -pq->y;
+ pout->z = -pq->z;
+ pout->w = pq->w;
+ return pout;
+}
+
+static inline FLOAT D3DXQuaternionDot(const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2)
+{
+ if ( !pq1 || !pq2 ) return 0.0f;
+ return (pq1->x) * (pq2->x) + (pq1->y) * (pq2->y) + (pq1->z) * (pq2->z) + (pq1->w) * (pq2->w);
+}
+
+static inline D3DXQUATERNION* D3DXQuaternionIdentity(D3DXQUATERNION *pout)
+{
+ if ( !pout) return NULL;
+ pout->x = 0.0f;
+ pout->y = 0.0f;
+ pout->z = 0.0f;
+ pout->w = 1.0f;
+ return pout;
+}
+
+static inline BOOL D3DXQuaternionIsIdentity(D3DXQUATERNION *pq)
+{
+ if ( !pq) return FALSE;
+ return ( (pq->x == 0.0f) && (pq->y == 0.0f) && (pq->z == 0.0f) && (pq->w == 1.0f) );
+}
+
+static inline FLOAT D3DXQuaternionLength(const D3DXQUATERNION *pq)
+{
+ if (!pq) return 0.0f;
+ return sqrtf( pq->x * pq->x + pq->y * pq->y + pq->z * pq->z + pq->w * pq->w );
+}
+
+static inline FLOAT D3DXQuaternionLengthSq(const D3DXQUATERNION *pq)
+{
+ if (!pq) return 0.0f;
+ return (pq->x) * (pq->x) + (pq->y) * (pq->y) + (pq->z) * (pq->z) + (pq->w) * (pq->w);
+}
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h
new file mode 100644
index 00000000..79c0dcc7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9mesh.h
@@ -0,0 +1,1066 @@
+/*
+ * Copyright (C) 2009 David Adam
+ * Copyright (C) 2010 Tony Wasserka
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __WINE_D3DX9MESH_H
+#define __WINE_D3DX9MESH_H
+
+DEFINE_GUID(IID_ID3DXBaseMesh, 0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30);
+DEFINE_GUID(IID_ID3DXMesh, 0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95);
+DEFINE_GUID(IID_ID3DXPMesh, 0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96);
+DEFINE_GUID(IID_ID3DXSPMesh, 0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x02, 0x90, 0xb8, 0x3c, 0xc5);
+DEFINE_GUID(IID_ID3DXSkinInfo, 0x11eaa540, 0xf9a6, 0x4d49, 0xae, 0x6a, 0xe1, 0x92, 0x21, 0xf7, 0x0c, 0xc4);
+DEFINE_GUID(IID_ID3DXPatchMesh,0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39);
+DEFINE_GUID(IID_ID3DXPRTBuffer, 0xf1827e47, 0x00a8, 0x49cd, 0x90, 0x8c, 0x9d, 0x11, 0x95, 0x5f, 0x87, 0x28);
+DEFINE_GUID(IID_ID3DXPRTCompBuffer, 0xa758d465, 0xfe8d, 0x45ad, 0x9c, 0xf0, 0xd0, 0x1e, 0x56, 0x26, 0x6a, 0x07);
+DEFINE_GUID(IID_ID3DXTextureGutterHelper, 0x838f01ec, 0x9729, 0x4527, 0xaa, 0xdb, 0xdf, 0x70, 0xad, 0xe7, 0xfe, 0xa9);
+DEFINE_GUID(IID_ID3DXPRTEngine, 0x683a4278, 0xcd5f, 0x4d24, 0x90, 0xad, 0xc4, 0xe1, 0xb6, 0x85, 0x5d, 0x53);
+
+#define UNUSED16 (0xffff)
+#define UNUSED32 (0xffffffff)
+
+enum _MAX_FVF_DECL_SIZE
+{
+ MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1
+};
+
+enum _D3DXMESH
+{
+ D3DXMESH_32BIT = 0x001,
+ D3DXMESH_DONOTCLIP = 0x002,
+ D3DXMESH_POINTS = 0x004,
+ D3DXMESH_RTPATCHES = 0x008,
+ D3DXMESH_NPATCHES = 0x4000,
+ D3DXMESH_VB_SYSTEMMEM = 0x010,
+ D3DXMESH_VB_MANAGED = 0x020,
+ D3DXMESH_VB_WRITEONLY = 0x040,
+ D3DXMESH_VB_DYNAMIC = 0x080,
+ D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000,
+ D3DXMESH_IB_SYSTEMMEM = 0x100,
+ D3DXMESH_IB_MANAGED = 0x200,
+ D3DXMESH_IB_WRITEONLY = 0x400,
+ D3DXMESH_IB_DYNAMIC = 0x800,
+ D3DXMESH_IB_SOFTWAREPROCESSING = 0x10000,
+ D3DXMESH_VB_SHARE = 0x1000,
+ D3DXMESH_USEHWONLY = 0x2000,
+ D3DXMESH_SYSTEMMEM = 0x110,
+ D3DXMESH_MANAGED = 0x220,
+ D3DXMESH_WRITEONLY = 0x440,
+ D3DXMESH_DYNAMIC = 0x880,
+ D3DXMESH_SOFTWAREPROCESSING = 0x18000
+};
+
+enum _D3DXMESHOPT
+{
+ D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000,
+ D3DXMESHOPT_COMPACT = 0x01000000,
+ D3DXMESHOPT_ATTRSORT = 0x02000000,
+ D3DXMESHOPT_VERTEXCACHE = 0x04000000,
+ D3DXMESHOPT_STRIPREORDER = 0x08000000,
+ D3DXMESHOPT_IGNOREVERTS = 0x10000000,
+ D3DXMESHOPT_DONOTSPLIT = 0x20000000,
+};
+
+typedef enum _D3DXPATCHMESHTYPE
+{
+ D3DXPATCHMESH_RECT = 1,
+ D3DXPATCHMESH_TRI = 2,
+ D3DXPATCHMESH_NPATCH = 3,
+ D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff,
+} D3DXPATCHMESHTYPE;
+
+enum _D3DXPATCHMESH
+{
+ D3DXPATCHMESH_DEFAULT = 0,
+};
+
+enum _D3DXMESHSIMP
+{
+ D3DXMESHSIMP_VERTEX = 0x1,
+ D3DXMESHSIMP_FACE = 0x2,
+};
+
+typedef enum D3DXCLEANTYPE {
+ D3DXCLEAN_BACKFACING = 0x00000001,
+ D3DXCLEAN_BOWTIES = 0x00000002,
+
+ D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING,
+ D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING,
+ D3DXCLEAN_SIMPLIFICATION = D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES,
+} D3DXCLEANTYPE;
+
+typedef enum _D3DXTANGENT
+{
+ D3DXTANGENT_WRAP_U = 0x0001,
+ D3DXTANGENT_WRAP_V = 0x0002,
+ D3DXTANGENT_WRAP_UV = 0x0003,
+ D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x0004,
+ D3DXTANGENT_DONT_ORTHOGONALIZE = 0x0008,
+ D3DXTANGENT_ORTHOGONALIZE_FROM_V = 0x0010,
+ D3DXTANGENT_ORTHOGONALIZE_FROM_U = 0x0020,
+ D3DXTANGENT_WEIGHT_BY_AREA = 0x0040,
+ D3DXTANGENT_WEIGHT_EQUAL = 0x0080,
+ D3DXTANGENT_WIND_CW = 0x0100,
+ D3DXTANGENT_CALCULATE_NORMALS = 0x0200,
+ D3DXTANGENT_GENERATE_IN_PLACE = 0x0400,
+} D3DXTANGENT;
+
+typedef enum _D3DXIMT
+{
+ D3DXIMT_WRAP_U = 0x01,
+ D3DXIMT_WRAP_V = 0x02,
+ D3DXIMT_WRAP_UV = 0x03,
+} D3DXIMT;
+
+typedef enum _D3DXUVATLAS
+{
+ D3DXUVATLAS_DEFAULT = 0x00,
+ D3DXUVATLAS_GEODESIC_FAST = 0x01,
+ D3DXUVATLAS_GEODESIC_QUALITY = 0x02,
+} D3DXUVATLAS;
+
+typedef enum _D3DXEFFECTDEFAULTTYPE
+{
+ D3DXEDT_STRING = 1,
+ D3DXEDT_FLOATS = 2,
+ D3DXEDT_DWORD = 3,
+ D3DXEDT_FORCEDWORD = 0x7fffffff,
+} D3DXEFFECTDEFAULTTYPE;
+
+enum _D3DXWELDEPSILONSFLAGS
+{
+ D3DXWELDEPSILONS_WELDALL = 0x1,
+ D3DXWELDEPSILONS_WELDPARTIALMATCHES = 0x2,
+ D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4,
+ D3DXWELDEPSILONS_DONOTSPLIT = 0x8,
+};
+
+typedef enum _D3DXSHCOMPRESSQUALITYTYPE
+{
+ D3DXSHCQUAL_FASTLOWQUALITY = 1,
+ D3DXSHCQUAL_SLOWHIGHQUALITY = 2,
+ D3DXSHCQUAL_FORCE_DWORD = 0x7fffffff,
+} D3DXSHCOMPRESSQUALITYTYPE;
+
+typedef enum _D3DXSHGPUSIMOPT
+{
+ D3DXSHGPUSIMOPT_SHADOWRES256 = 1,
+ D3DXSHGPUSIMOPT_SHADOWRES512 = 0,
+ D3DXSHGPUSIMOPT_SHADOWRES1024 = 2,
+ D3DXSHGPUSIMOPT_SHADOWRES2048 = 3,
+ D3DXSHGPUSIMOPT_HIGHQUALITY = 4,
+ D3DXSHGPUSIMOPT_FORCE_DWORD = 0x7fffffff,
+} D3DXSHGPUSIMOPT;
+
+typedef struct ID3DXBaseMesh* LPD3DXBASEMESH;
+typedef struct ID3DXMesh* LPD3DXMESH;
+typedef struct ID3DXPMesh *LPD3DXPMESH;
+typedef struct ID3DXSPMesh *LPD3DXSPMESH;
+typedef struct ID3DXSkinInfo *LPD3DXSKININFO;
+typedef struct ID3DXPatchMesh *LPD3DXPATCHMESH;
+typedef struct ID3DXPRTBuffer *LPD3DXPRTBUFFER;
+typedef struct ID3DXPRTCompBuffer *LPD3DXPRTCOMPBUFFER;
+typedef struct ID3DXPRTEngine *LPD3DXPRTENGINE;
+typedef struct ID3DXTextureGutterHelper *LPD3DXTEXTUREGUTTERHELPER;
+
+typedef struct _D3DXATTRIBUTERANGE {
+ DWORD AttribId;
+ DWORD FaceStart;
+ DWORD FaceCount;
+ DWORD VertexStart;
+ DWORD VertexCount;
+} D3DXATTRIBUTERANGE;
+
+typedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE;
+
+typedef struct _D3DXMATERIAL
+{
+ D3DMATERIAL9 MatD3D;
+ char *pTextureFilename;
+} D3DXMATERIAL, *LPD3DXMATERIAL;
+
+typedef struct _D3DXEFFECTDEFAULT
+{
+ char *pParamName;
+ D3DXEFFECTDEFAULTTYPE Type;
+ DWORD NumBytes;
+ void *pValue;
+} D3DXEFFECTDEFAULT, *LPD3DXEFFECTDEFAULT;
+
+typedef struct _D3DXEFFECTINSTANCE
+{
+ char *pEffectFilename;
+ DWORD NumDefaults;
+ LPD3DXEFFECTDEFAULT pDefaults;
+} D3DXEFFECTINSTANCE, *LPD3DXEFFECTINSTANCE;
+
+typedef struct _D3DXATTRIBUTEWEIGHTS
+{
+ FLOAT Position;
+ FLOAT Boundary;
+ FLOAT Normal;
+ FLOAT Diffuse;
+ FLOAT Specular;
+ FLOAT Texcoords[8];
+ FLOAT Tangent;
+ FLOAT Binormal;
+} D3DXATTRIBUTEWEIGHTS, *LPD3DXATTRIBUTEWEIGHTS;
+
+typedef struct _D3DXWELDEPSILONS
+{
+ FLOAT Position;
+ FLOAT BlendWeights;
+ FLOAT Normals;
+ FLOAT PSize;
+ FLOAT Specular;
+ FLOAT Diffuse;
+ FLOAT Texcoords[8];
+ FLOAT Tangent;
+ FLOAT Binormal;
+ FLOAT TessFactor;
+} D3DXWELDEPSILONS, *LPD3DXWELDEPSILONS;
+
+typedef struct _D3DXBONECOMBINATION
+{
+ DWORD AttribId;
+ DWORD FaceStart;
+ DWORD FaceCount;
+ DWORD VertexStart;
+ DWORD VertexCout;
+ DWORD *BoneId;
+} D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION;
+
+typedef struct _D3DXPATCHINFO
+{
+ D3DXPATCHMESHTYPE PatchType;
+ D3DDEGREETYPE Degree;
+ D3DBASISTYPE Basis;
+} D3DXPATCHINFO, *LPD3DXPATCHINFO;
+
+typedef struct _D3DXINTERSECTINFO
+{
+ DWORD FaceIndex;
+ FLOAT U;
+ FLOAT V;
+ FLOAT Dist;
+} D3DXINTERSECTINFO, *LPD3DXINTERSECTINFO;
+
+typedef struct _D3DXSHMATERIAL
+{
+ D3DCOLORVALUE Diffuse;
+ BOOL bMirror;
+ BOOL bSubSurf;
+ FLOAT RelativeIndexOfRefraction;
+ D3DCOLORVALUE Absorption;
+ D3DCOLORVALUE ReducedScattering;
+} D3DXSHMATERIAL;
+
+typedef struct _D3DXSHPRTSPLITMESHVERTDATA
+{
+ UINT uVertRemap;
+ UINT uSubCluster;
+ UCHAR ucVertStatus;
+} D3DXSHPRTSPLITMESHVERTDATA;
+
+typedef struct _D3DXSHPRTSPLITMESHCLUSTERDATA
+{
+ UINT uVertStart;
+ UINT uVertLength;
+ UINT uFaceStart;
+ UINT uFaceLength;
+ UINT uClusterStart;
+ UINT uClusterLength;
+} D3DXSHPRTSPLITMESHCLUSTERDATA;
+
+typedef struct _XFILECOMPRESSEDANIMATIONSET
+{
+ DWORD CompressedBlockSize;
+ FLOAT TicksPerSec;
+ DWORD PlaybackType;
+ DWORD BufferLength;
+} XFILECOMPRESSEDANIMATIONSET;
+
+typedef HRESULT (WINAPI *LPD3DXUVATLASCB)(float complete, void *ctx);
+typedef HRESULT (WINAPI *LPD3DXIMTSIGNALCALLBACK)(const D3DXVECTOR2 *, UINT, UINT, void *, FLOAT *);
+typedef HRESULT (WINAPI *LPD3DXSHPRTSIMCB)(float complete, void *ctx);
+
+#undef INTERFACE
+#define INTERFACE ID3DXBaseMesh
+
+DECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBaseMesh ***/
+ STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
+ STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+ STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
+ STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+ struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+ STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+ STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+ STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+ STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
+ STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
+ STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
+ STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
+ STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXMesh
+DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBaseMesh ***/
+ STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
+ STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+ STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
+ STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+ struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+ STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+ STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+ STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+ STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
+ STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
+ STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
+ STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
+ STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ /*** ID3DXMesh ***/
+ STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;
+ STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
+ STDMETHOD(Optimize)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,
+ DWORD *face_remap, ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;
+ STDMETHOD(OptimizeInplace)(THIS_ DWORD flags, const DWORD *adjacency_in, DWORD *adjacency_out,
+ DWORD *face_remap, ID3DXBuffer **vertex_remap) PURE;
+ STDMETHOD(SetAttributeTable)(THIS_ const D3DXATTRIBUTERANGE *attrib_table,
+ DWORD attrib_table_size) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPMesh
+DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBaseMesh ***/
+ STDMETHOD(DrawSubset)(THIS_ DWORD attrib_id) PURE;
+ STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+ STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE;
+ STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+ struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+ STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+ STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+ STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+ STDMETHOD(GetAttributeTable)(THIS_ D3DXATTRIBUTERANGE* attrib_table, DWORD* attrib_table_size) PURE;
+ STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ const DWORD *point_reps, DWORD *adjacency) PURE;
+ STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ const DWORD *adjacency, DWORD *point_reps) PURE;
+ STDMETHOD(GenerateAdjacency)(THIS_ FLOAT epsilon, DWORD* adjacency) PURE;
+ STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ /*** ID3DXPMesh ***/
+ STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,
+ struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;
+ STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, struct ID3DXPMesh **clone_mesh) PURE;
+ STDMETHOD(SetNumFaces)(THIS_ DWORD faces) PURE;
+ STDMETHOD(SetNumVertices)(THIS_ DWORD vertices) PURE;
+ STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
+ STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE;
+ STDMETHOD(Save)(THIS_ IStream *stream, const D3DXMATERIAL *material,
+ const D3DXEFFECTINSTANCE *effect_instance, DWORD num_materials) PURE;
+ STDMETHOD(Optimize)(THIS_ DWORD flags, DWORD *adjacency_out, DWORD *face_remap,
+ ID3DXBuffer **vertex_remap, ID3DXMesh **opt_mesh) PURE;
+ STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD flags, DWORD* face_remap) PURE;
+ STDMETHOD(TrimByFaces)(THIS_ DWORD new_faces_min, DWORD new_faces_max, DWORD* face_remap, DWORD* vertex_remap) PURE;
+ STDMETHOD(TrimByVertices)(THIS_ DWORD new_vertices_min, DWORD new_vertices_max, DWORD* face_remap, DWORD* vertex_remap) PURE;
+ STDMETHOD(GetAdjacency)(THIS_ DWORD* adjacency) PURE;
+ STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* vertex_history) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXSPMesh
+DECLARE_INTERFACE_(ID3DXSPMesh, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXSPMesh ***/
+ STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+ STDMETHOD_(DWORD, GetNumFVF)(THIS) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(CloneMeshFVF)(THIS_ DWORD options, DWORD fvf,
+ struct IDirect3DDevice9 *device, DWORD *adjacency_out,
+ DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, DWORD *adjacency_out,
+ DWORD *vertex_remap_out, struct ID3DXMesh **clone_mesh) PURE;
+ STDMETHOD(ClonePMeshFVF)(THIS_ DWORD options, DWORD fvf,
+ struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,
+ float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;
+ STDMETHOD(ClonePMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, DWORD *vertex_remap_out,
+ float *errors_by_face, struct ID3DXPMesh **clone_mesh) PURE;
+ STDMETHOD(ReduceFaces)(THIS_ DWORD faces) PURE;
+ STDMETHOD(ReduceVertices)(THIS_ DWORD vertices) PURE;
+ STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE;
+ STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE;
+ STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS vertex_attribute_weights) PURE;
+ STDMETHOD(GetVertexWeights)(THIS_ FLOAT* vertex_weights) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPatchMesh
+DECLARE_INTERFACE_(ID3DXPatchMesh, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXPatchMesh ***/
+ STDMETHOD_(DWORD, GetNumPatches)(THIS) PURE;
+ STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ STDMETHOD_(DWORD, GetControlVerticesPerPatch)(THIS) PURE;
+ STDMETHOD_(DWORD, GetOptions)(THIS) PURE;
+ STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9 **device) PURE;
+ STDMETHOD(GetPatchInfo)(THIS_ LPD3DXPATCHINFO patch_info) PURE;
+ STDMETHOD(GetVertexBuffer)(THIS_ struct IDirect3DVertexBuffer9 **vertex_buffer) PURE;
+ STDMETHOD(GetIndexBuffer)(THIS_ struct IDirect3DIndexBuffer9 **index_buffer) PURE;
+ STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockVertexBuffer)(THIS) PURE;
+ STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, void **data) PURE;
+ STDMETHOD(UnlockIndexBuffer)(THIS) PURE;
+ STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** data) PURE;
+ STDMETHOD(UnlockAttributeBuffer)(THIS) PURE;
+ STDMETHOD(GetTessSize)(THIS_ FLOAT tess_level, DWORD adaptive, DWORD* num_triangles, DWORD* num_vertices) PURE;
+ STDMETHOD(GenerateAdjacency)(THIS_ FLOAT tolerance) PURE;
+ STDMETHOD(CloneMesh)(THIS_ DWORD options, const D3DVERTEXELEMENT9 *declaration, ID3DXPatchMesh **clone_mesh) PURE;
+ STDMETHOD(Optimize)(THIS_ DWORD flags) PURE;
+ STDMETHOD(SetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 *texture, D3DTEXTUREFILTERTYPE min_filter,
+ D3DTEXTUREFILTERTYPE mag_filter, D3DTEXTUREFILTERTYPE mip_filter, D3DTEXTUREADDRESS wrap,
+ DWORD lod_bias) PURE;
+ STDMETHOD(GetDisplaceParam)(THIS_ struct IDirect3DBaseTexture9 **texture, D3DTEXTUREFILTERTYPE *min_filter,
+ D3DTEXTUREFILTERTYPE *mag_filter, D3DTEXTUREFILTERTYPE *mip_filter, D3DTEXTUREADDRESS *wrap,
+ DWORD *lod_bias) PURE;
+ STDMETHOD(Tessellate)(THIS_ float tess_level, ID3DXMesh *mesh) PURE;
+ STDMETHOD(TessellateAdaptive)(THIS_ const D3DXVECTOR4 *trans, DWORD max_tess_level,
+ DWORD min_tess_level, ID3DXMesh *mesh) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXSkinInfo
+DECLARE_INTERFACE_(ID3DXSkinInfo, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXSkinInfo ***/
+ STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD num_influences, const DWORD *vertices,
+ const FLOAT *weights) PURE;
+ STDMETHOD(SetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float weight) PURE;
+ STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE;
+ STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE;
+ STDMETHOD(GetBoneVertexInfluence)(THIS_ DWORD bone_num, DWORD influence_num, float *weight, DWORD* vertex_num) PURE;
+ STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* max_vertex_influences) PURE;
+ STDMETHOD_(DWORD, GetNumBones)(THIS) PURE;
+ STDMETHOD(FindBoneVertexInfluenceIndex)(THIS_ DWORD bone_num, DWORD vertex_num, DWORD* influence_index) PURE;
+ STDMETHOD(GetMaxFaceInfluences)(THIS_ struct IDirect3DIndexBuffer9 *index_buffer,
+ DWORD num_faces, DWORD *max_face_influences) PURE;
+ STDMETHOD(SetMinBoneInfluence)(THIS_ FLOAT min_influence) PURE;
+ STDMETHOD_(FLOAT, GetMinBoneInfluence)(THIS) PURE;
+ STDMETHOD(SetBoneName)(THIS_ DWORD bone_idx, const char *name) PURE;
+ STDMETHOD_(const char *, GetBoneName)(THIS_ DWORD bone_idx) PURE;
+ STDMETHOD(SetBoneOffsetMatrix)(THIS_ DWORD bone, const D3DXMATRIX *bone_transform) PURE;
+ STDMETHOD_(D3DXMATRIX *, GetBoneOffsetMatrix)(THIS_ DWORD bone) PURE;
+ STDMETHOD(Clone)(THIS_ ID3DXSkinInfo **skin_info) PURE;
+ STDMETHOD(Remap)(THIS_ DWORD num_vertices, DWORD* vertex_remap) PURE;
+ STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
+ STDMETHOD(SetDeclaration)(THIS_ const D3DVERTEXELEMENT9 *declaration) PURE;
+ STDMETHOD_(DWORD, GetFVF)(THIS) PURE;
+ STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE]) PURE;
+ STDMETHOD(UpdateSkinnedMesh)(THIS_ const D3DXMATRIX *bone_transforms,
+ const D3DXMATRIX *bone_inv_transpose_transforms, const void *src_vertices, void *dst_vertices) PURE;
+ STDMETHOD(ConvertToBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in,
+ DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl,
+ DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE;
+ STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ ID3DXMesh *mesh_in, DWORD options, const DWORD *adjacency_in,
+ DWORD *adjacency_out, DWORD *face_remap, ID3DXBuffer **vertex_remap, DWORD *max_face_infl,
+ DWORD *num_bone_combinations, ID3DXBuffer **bone_combination_table, ID3DXMesh **mesh_out) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPRTBuffer
+DECLARE_INTERFACE_(ID3DXPRTBuffer, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXPRTBuffer methods ***/
+ STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;
+ STDMETHOD_(BOOL, IsTexture)(THIS) PURE;
+ STDMETHOD_(BOOL, GetWidth)(THIS) PURE;
+ STDMETHOD_(BOOL, GetHeight)(THIS) PURE;
+ STDMETHOD(Resize)(THIS_ UINT new_size) PURE;
+ STDMETHOD(LockBuffer)(THIS_ UINT start, UINT num_samples, FLOAT **data) PURE;
+ STDMETHOD(UnlockBuffer)(THIS) PURE;
+ STDMETHOD(ScaleBuffer)(THIS_ FLOAT scale) PURE;
+ STDMETHOD(AddBuffer)(THIS_ ID3DXPRTBuffer *buffer) PURE;
+ STDMETHOD(AttachGH)(THIS_ struct ID3DXTextureGutterHelper *gh) PURE;
+ STDMETHOD(ReleaseGH)(THIS) PURE;
+ STDMETHOD(EvalGH)(THIS) PURE;
+ STDMETHOD(ExtractTexture)(THIS_ UINT channel, UINT start_coefficient,
+ UINT num_coefficients, struct IDirect3DTexture9 *texture) PURE;
+ STDMETHOD(ExtractToMesh)(THIS_ UINT num_coefficients, D3DDECLUSAGE usage,
+ UINT usage_index_start, ID3DXMesh *scene) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPRTCompBuffer
+DECLARE_INTERFACE_(ID3DXPRTCompBuffer, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXPRTCompBuffer methods ***/
+ STDMETHOD_(UINT, GetNumSamples)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumChannels)(THIS) PURE;
+ STDMETHOD_(BOOL, IsTexture)(THIS) PURE;
+ STDMETHOD_(UINT, GetWidth)(THIS) PURE;
+ STDMETHOD_(UINT, GetHeight)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumClusters)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumPCA)(THIS) PURE;
+ STDMETHOD(NormalizeData)(THIS) PURE;
+ STDMETHOD(ExtractBasis)(THIS_ UINT cluster, FLOAT *cluster_basis) PURE;
+ STDMETHOD(ExtractClusterIDs)(THIS_ UINT *cluster_ids) PURE;
+ STDMETHOD(ExtractPCA)(THIS_ UINT start_pca, UINT num_extract, FLOAT *pca_coefficients) PURE;
+ STDMETHOD(ExtractTexture)(THIS_ UINT start_pca, UINT num_pca, struct IDirect3DTexture9 *texture) PURE;
+ STDMETHOD(ExtractToMesh)(THIS_ UINT num_pca, D3DDECLUSAGE usage, UINT usage_index_start, ID3DXMesh *scene) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXTextureGutterHelper
+DECLARE_INTERFACE_(ID3DXTextureGutterHelper, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXTextureGutterHelper methods ***/
+ STDMETHOD_(UINT, GetWidth)(THIS) PURE;
+ STDMETHOD_(UINT, GetHeight)(THIS) PURE;
+
+ STDMETHOD(ApplyGuttersFloat)(THIS_ FLOAT *data_in, UINT num_coeffs, UINT width, UINT height) PURE;
+ STDMETHOD(ApplyGuttersTex)(THIS_ struct IDirect3DTexture9 *texture) PURE;
+ STDMETHOD(ApplyGuttersPRT)(THIS_ ID3DXPRTBuffer *buffer) PURE;
+ STDMETHOD(ResampleTex)(THIS_ struct IDirect3DTexture9 *texture_in, struct ID3DXMesh *mesh_in,
+ D3DDECLUSAGE usage, UINT usage_index, struct IDirect3DTexture9 *texture_out) PURE;
+ STDMETHOD(GetFaceMap)(THIS_ UINT *face_data) PURE;
+ STDMETHOD(GetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;
+ STDMETHOD(GetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;
+ STDMETHOD(GetGutterMap)(THIS_ BYTE *gutter_data) PURE;
+ STDMETHOD(SetFaceMap)(THIS_ UINT *face_data) PURE;
+ STDMETHOD(SetBaryMap)(THIS_ D3DXVECTOR2 *bary_data) PURE;
+ STDMETHOD(SetTexelMap)(THIS_ D3DXVECTOR2 *texel_data) PURE;
+ STDMETHOD(SetGutterMap)(THIS_ BYTE *gutter_data) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXPRTEngine
+DECLARE_INTERFACE_(ID3DXPRTEngine, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXPRTEngine methods ***/
+ STDMETHOD(SetMeshMaterials)(THIS_ const D3DXSHMATERIAL **materials, UINT num_meshes,
+ UINT num_channels, BOOL set_albedo, FLOAT length_scale) PURE;
+ STDMETHOD(SetPerVertexAlbedo)(THIS_ const void *data_in, UINT num_channels, UINT stride) PURE;
+ STDMETHOD(SetPerTexelAlbedo)(THIS_ struct IDirect3DTexture9 *albedo_texture,
+ UINT num_channels, struct ID3DXTextureGutterHelper *gh) PURE;
+ STDMETHOD(GetVertexAlbedo)(THIS_ D3DXCOLOR *vert_colors, UINT num_verts) PURE;
+ STDMETHOD(SetPerTexelNormals)(THIS_ struct IDirect3DTexture9 *normal_texture) PURE;
+ STDMETHOD(ExtractPerVertexAlbedo)(THIS_ ID3DXMesh *mesh, D3DDECLUSAGE usage, UINT num_channels) PURE;
+ STDMETHOD(ResampleBuffer)(THIS_ ID3DXPRTBuffer *buffer_in, ID3DXPRTBuffer *buffer_out) PURE;
+ STDMETHOD(GetAdaptedMesh)(THIS_ struct IDirect3DDevice9 *device, UINT *face_remap,
+ UINT *vert_remap, float *vert_weights, struct ID3DXMesh **mesh) PURE;
+ STDMETHOD_(UINT, GetNumVerts)(THIS) PURE;
+ STDMETHOD_(UINT, GetNumFaces)(THIS) PURE;
+ STDMETHOD(SetMinMaxIntersection)(THIS_ FLOAT min, FLOAT max) PURE;
+ STDMETHOD(RobustMeshRefine)(THIS_ FLOAT min_edge_length, UINT max_subdiv) PURE;
+ STDMETHOD(SetSamplingInfo)(THIS_ UINT num_rays, BOOL use_sphere,
+ BOOL use_cosine, BOOL adaptive, FLOAT adpative_thresh) PURE;
+ STDMETHOD(ComputeDirectLightingSH)(THIS_ UINT sh_order, ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ComputeDirectLightingSHAdaptive)(THIS_ UINT sh_order, float adaptive_thresh,
+ float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ComputeDirectLightingSHGPU)(THIS_ struct IDirect3DDevice9 *device, UINT flags,
+ UINT sh_order, float zbias, float zangle_bias, struct ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ComputeSS)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,
+ ID3DXPRTBuffer *data_total) PURE;
+ STDMETHOD(ComputeSSAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,
+ float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;
+ STDMETHOD(ComputeBounce)(THIS_ ID3DXPRTBuffer *data_in, ID3DXPRTBuffer *data_out,
+ ID3DXPRTBuffer *data_total) PURE;
+ STDMETHOD(ComputeBounceAdaptive)(THIS_ ID3DXPRTBuffer *data_in, float adaptive_thres,
+ float min_edge_length, UINT max_subdiv, ID3DXPRTBuffer *data_out, ID3DXPRTBuffer *data_total) PURE;
+ STDMETHOD(ComputeVolumeSamplesDirectSH)(THIS_ UINT sh_order_in, UINT sh_order_out,
+ UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ComputeVolumeSamples)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT sh_order,
+ UINT num_vol_samples, const D3DXVECTOR3 *sample_locs, ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ComputeSurfSamplesDirectSH)(THIS_ UINT sh_order, UINT num_samples,
+ const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ComputeSurfSamplesBounce)(THIS_ ID3DXPRTBuffer *surf_data_in, UINT num_samples,
+ const D3DXVECTOR3 *sample_locs, const D3DXVECTOR3 *sample_norms, ID3DXPRTBuffer *data_out,
+ ID3DXPRTBuffer *data_total) PURE;
+ STDMETHOD(FreeSSData)(THIS) PURE;
+ STDMETHOD(FreeBounceData)(THIS) PURE;
+ STDMETHOD(ComputeLDPRTCoeffs)(THIS_ ID3DXPRTBuffer *data_in, UINT sh_order, D3DXVECTOR3 *norm_out,
+ ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(ScaleMeshChunk)(THIS_ UINT mesh_chunk, float scale, ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(MultiplyAlbedo)(THIS_ ID3DXPRTBuffer *data_out) PURE;
+ STDMETHOD(SetCallback)(THIS_ LPD3DXSHPRTSIMCB cb, float frequency, void *user_context) PURE;
+ STDMETHOD_(BOOL, ShadowRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,
+ const D3DXVECTOR3 *ray_dir) PURE;
+ STDMETHOD_(BOOL, ClosestRayIntersects)(THIS_ const D3DXVECTOR3 *ray_pos,
+ const D3DXVECTOR3 *ray_dir, DWORD *face_index, FLOAT *u, FLOAT *v, FLOAT *dist) PURE;
+};
+#undef INTERFACE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateMesh(DWORD face_count, DWORD vertex_count, DWORD flags,
+ const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXCreateMeshFVF(DWORD face_count, DWORD vertex_count, DWORD flags,
+ DWORD fvf, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXCreateBuffer(DWORD size, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXCreateSPMesh(ID3DXMesh *mesh, const DWORD *adjacency,
+ const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, ID3DXSPMesh **spmesh);
+HRESULT WINAPI D3DXCreatePMeshFromStream(struct IStream *stream, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXPMesh **mesh);
+HRESULT WINAPI D3DXCreateSkinInfo(DWORD vertex_count, const D3DVERTEXELEMENT9 *declaration,
+ DWORD bone_count, ID3DXSkinInfo **skin_info);
+HRESULT WINAPI D3DXCreateSkinInfoFVF(DWORD vertex_count, DWORD fvf, DWORD bone_count, ID3DXSkinInfo **skin_info);
+HRESULT WINAPI D3DXCreateSkinInfoFromBlendedMesh(ID3DXBaseMesh *mesh, DWORD bone_count,
+ const D3DXBONECOMBINATION *bone_combination_table, ID3DXSkinInfo **skin_info);
+HRESULT WINAPI D3DXCreatePatchMesh(const D3DXPATCHINFO *patch_info, DWORD patch_count,
+ DWORD vertex_count, DWORD flags, const D3DVERTEXELEMENT9 *declaration,
+ struct IDirect3DDevice9 *device, struct ID3DXPatchMesh **mesh);
+HRESULT WINAPI D3DXCreatePRTBuffer(UINT sample_count, UINT coeff_count, UINT channel_count, ID3DXPRTBuffer **buffer);
+HRESULT WINAPI D3DXCreatePRTBufferTex(UINT width, UINT height, UINT coeff_count,
+ UINT channel_count, ID3DXPRTBuffer **buffer);
+HRESULT WINAPI D3DXCreatePRTCompBuffer(D3DXSHCOMPRESSQUALITYTYPE quality, UINT cluster_count, UINT pca_count,
+ LPD3DXSHPRTSIMCB cb, void *ctx, ID3DXPRTBuffer *input, ID3DXPRTCompBuffer **buffer);
+HRESULT WINAPI D3DXCreateTextureGutterHelper(UINT width, UINT height, ID3DXMesh *mesh,
+ float gutter_size, ID3DXTextureGutterHelper **gh);
+HRESULT WINAPI D3DXCreatePRTEngine(ID3DXMesh *mesh, DWORD *adjacency, BOOL extract_uv,
+ ID3DXMesh *blocker_mesh, ID3DXPRTEngine **engine);
+HRESULT WINAPI D3DXLoadMeshFromXA(const char *filename, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadMeshFromXW(const WCHAR *filename, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXMesh **mesh);
+#define D3DXLoadMeshFromX WINELIB_NAME_AW(D3DXLoadMeshFromX)
+HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *data, DWORD data_size, DWORD flags,
+ struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials,
+ struct ID3DXBuffer **effect_instances, DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadMeshFromXResource(HMODULE module, const char *resource, const char *resource_type,
+ DWORD flags, struct IDirect3DDevice9 *device, struct ID3DXBuffer **adjacency,
+ struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadPatchMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXPatchMesh **mesh);
+HRESULT WINAPI D3DXLoadSkinMeshFromXof(struct ID3DXFileData *file_data, DWORD flags, struct IDirect3DDevice9 *device,
+ struct ID3DXBuffer **adjacency, struct ID3DXBuffer **materials, struct ID3DXBuffer **effect_instances,
+ DWORD *material_count, struct ID3DXSkinInfo **skin_info, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXLoadPRTBufferFromFileA(const char *filename, ID3DXPRTBuffer **buffer);
+HRESULT WINAPI D3DXLoadPRTBufferFromFileW(const WCHAR *filename, ID3DXPRTBuffer **buffer);
+#define D3DXLoadPRTBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTBufferFromFile)
+HRESULT WINAPI D3DXLoadPRTCompBufferFromFileA(const char *filename, ID3DXPRTCompBuffer **buffer);
+HRESULT WINAPI D3DXLoadPRTCompBufferFromFileW(const WCHAR *filename, ID3DXPRTCompBuffer **buffer);
+#define D3DXLoadPRTCompBufferFromFile WINELIB_NAME_AW(D3DXLoadPRTCompBufferFromFile)
+HRESULT WINAPI D3DXSaveMeshToXA(const char *filename, ID3DXMesh *mesh, const DWORD *adjacency,
+ const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format);
+HRESULT WINAPI D3DXSaveMeshToXW(const WCHAR *filename, ID3DXMesh *mesh, const DWORD *adjacency,
+ const D3DXMATERIAL *materials, const D3DXEFFECTINSTANCE *effect_instances, DWORD material_count, DWORD format);
+#define D3DXSaveMeshToX WINELIB_NAME_AW(D3DXSaveMeshToX)
+HRESULT WINAPI D3DXSavePRTBufferToFileA(const char *filename, ID3DXPRTBuffer *buffer);
+HRESULT WINAPI D3DXSavePRTBufferToFileW(const WCHAR *filename, ID3DXPRTBuffer *buffer);
+#define D3DXSavePRTBufferToFile WINELIB_NAME_AW(D3DXSavePRTBufferToFile)
+HRESULT WINAPI D3DXSavePRTCompBufferToFileA(const char *filename, ID3DXPRTCompBuffer *buffer);
+HRESULT WINAPI D3DXSavePRTCompBufferToFileW(const WCHAR *filename, ID3DXPRTCompBuffer *buffer);
+#define D3DXSavePRTCompBufferToFile WINELIB_NAME_AW(D3DXSavePRTCompBufferToFile)
+UINT WINAPI D3DXGetDeclLength(const D3DVERTEXELEMENT9 *decl);
+UINT WINAPI D3DXGetDeclVertexSize(const D3DVERTEXELEMENT9 *decl, DWORD stream_idx);
+UINT WINAPI D3DXGetFVFVertexSize(DWORD);
+BOOL WINAPI D3DXBoxBoundProbe(const D3DXVECTOR3 *vmin, const D3DXVECTOR3 *vmax,
+ const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir);
+BOOL WINAPI D3DXSphereBoundProbe(const D3DXVECTOR3 *center, FLOAT radius,
+ const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir);
+HRESULT WINAPI D3DXCleanMesh(D3DXCLEANTYPE clean_type, ID3DXMesh *mesh_in, const DWORD *adjacency_in,
+ ID3DXMesh **mesh_out, DWORD *adjacency_out, ID3DXBuffer **errors);
+HRESULT WINAPI D3DXConcatenateMeshes(struct ID3DXMesh **meshes, UINT mesh_count, DWORD flags,
+ const D3DXMATRIX *geometry_matrices, const D3DXMATRIX *texture_matrices,
+ const D3DVERTEXELEMENT9 *declaration, struct IDirect3DDevice9 *device, struct ID3DXMesh **mesh);
+HRESULT WINAPI D3DXComputeBoundingBox(const D3DXVECTOR3 *first_pos, DWORD num_vertices,
+ DWORD stride, D3DXVECTOR3 *vmin, D3DXVECTOR3 *vmax);
+HRESULT WINAPI D3DXComputeBoundingSphere(const D3DXVECTOR3 *first_pos, DWORD num_vertices,
+ DWORD stride, D3DXVECTOR3 *center, FLOAT *radius);
+HRESULT WINAPI D3DXComputeIMTFromPerTexelSignal(ID3DXMesh *mesh, DWORD texture_idx, float *texel_signal,
+ UINT width, UINT height, UINT signal_dimension, UINT component_count, DWORD flags,
+ LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeIMTFromPerVertexSignal(ID3DXMesh *mesh, const float *vertex_signal,
+ UINT signal_dimension, UINT signal_stride, DWORD flags,
+ LPD3DXUVATLASCB cb, void *ctx, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeIMTFromSignal(ID3DXMesh *mesh, DWORD texture_idx, UINT signal_dimension,
+ float max_uv_distance, DWORD flags, LPD3DXIMTSIGNALCALLBACK signal_cb, void *signal_ctx,
+ LPD3DXUVATLASCB status_cb, void *status_ctx, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeIMTFromTexture(struct ID3DXMesh *mesh, struct IDirect3DTexture9 *texture,
+ DWORD texture_idx, DWORD options, LPD3DXUVATLASCB cb, void *ctx, struct ID3DXBuffer **out);
+HRESULT WINAPI D3DXComputeNormals(ID3DXBaseMesh *mesh, const DWORD *adjacency);
+HRESULT WINAPI D3DXComputeTangentFrameEx(ID3DXMesh *mesh_in, DWORD texture_in_semantic, DWORD texture_in_idx,
+ DWORD u_partial_out_semantic, DWORD u_partial_out_idx, DWORD v_partial_out_semantic,
+ DWORD v_partial_out_idx, DWORD normal_out_semantic, DWORD normal_out_idx, DWORD flags,
+ const DWORD *adjacency, float partial_edge_threshold, float singular_point_threshold,
+ float normal_edge_threshold, ID3DXMesh **mesh_out, ID3DXBuffer **buffer);
+HRESULT WINAPI D3DXComputeTangent(ID3DXMesh *mesh, DWORD stage, DWORD tangent_idx,
+ DWORD binorm_idx, DWORD wrap, const DWORD *adjacency);
+HRESULT WINAPI D3DXConvertMeshSubsetToSingleStrip(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id,
+ DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count);
+HRESULT WINAPI D3DXConvertMeshSubsetToStrips(struct ID3DXBaseMesh *mesh_in, DWORD attribute_id,
+ DWORD ib_flags, struct IDirect3DIndexBuffer9 **index_buffer, DWORD *index_count,
+ struct ID3DXBuffer **strip_lengths, DWORD *strip_count);
+HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD, D3DVERTEXELEMENT9[MAX_FVF_DECL_SIZE]);
+HRESULT WINAPI D3DXFVFFromDeclarator(const D3DVERTEXELEMENT9 *decl, DWORD *fvf);
+HRESULT WINAPI D3DXGenerateOutputDecl(D3DVERTEXELEMENT9 *decl_out, const D3DVERTEXELEMENT9 *decl_in);
+HRESULT WINAPI D3DXGeneratePMesh(ID3DXMesh *mesh, const DWORD *adjacency,
+ const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights,
+ DWORD min_value, DWORD flags, ID3DXPMesh **pmesh);
+HRESULT WINAPI D3DXIntersect(ID3DXBaseMesh *mesh, const D3DXVECTOR3 *ray_position, const D3DXVECTOR3 *ray_direction,
+ BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance, ID3DXBuffer **hits, DWORD *hit_count);
+HRESULT WINAPI D3DXIntersectSubset(ID3DXBaseMesh *mesh, DWORD attribute_id, const D3DXVECTOR3 *ray_position,
+ const D3DXVECTOR3 *ray_direction, BOOL *hit, DWORD *face_idx, float *u, float *v, float *distance,
+ ID3DXBuffer **hits, DWORD *hit_count);
+BOOL WINAPI D3DXIntersectTri(const D3DXVECTOR3 *vtx0, const D3DXVECTOR3 *vtx1,
+ const D3DXVECTOR3 *vtx2, const D3DXVECTOR3 *ray_pos, const D3DXVECTOR3 *ray_dir, FLOAT *u,
+ FLOAT *v, FLOAT *dist);
+HRESULT WINAPI D3DXOptimizeFaces(const void *indices, UINT face_count,
+ UINT vertex_count, BOOL idx_32bit, DWORD *face_remap);
+HRESULT WINAPI D3DXOptimizeVertices(const void *indices, UINT face_count,
+ UINT vertex_count, BOOL idx_32bit, DWORD *vertex_remap);
+HRESULT WINAPI D3DXRectPatchSize(const FLOAT *segment_count, DWORD *num_triangles,
+ DWORD *num_vertices);
+HRESULT WINAPI D3DXSHPRTCompSuperCluster(UINT *cluster_ids, ID3DXMesh *scene, UINT max_cluster_count,
+ UINT cluster_count, UINT *scluster_ids, UINT *scluster_count);
+HRESULT WINAPI D3DXSHPRTCompSplitMeshSC(UINT *cluster_idx, UINT vertex_count, UINT cluster_count, UINT *scluster_ids,
+ UINT scluster_count, void *index_buffer_in, BOOL ib_in_32bit, UINT face_count, ID3DXBuffer **index_buffer_out,
+ UINT *index_buffer_size, BOOL ib_out_32bit, ID3DXBuffer **face_remap, ID3DXBuffer **vertex_data,
+ UINT *vertex_data_length, UINT *sc_cluster_list, D3DXSHPRTSPLITMESHCLUSTERDATA *sc_data);
+HRESULT WINAPI D3DXSimplifyMesh(ID3DXMesh *mesh_in, const DWORD *adjacency,
+ const D3DXATTRIBUTEWEIGHTS *attribute_weights, const float *vertex_weights, DWORD min_value,
+ DWORD flags, ID3DXMesh **mesh_out);
+HRESULT WINAPI D3DXSplitMesh(ID3DXMesh *mesh_in, const DWORD *adjacency_in, const DWORD max_size,
+ const DWORD flags, DWORD *mesh_out_count, ID3DXBuffer **mesh_out, ID3DXBuffer **adjacency_out,
+ ID3DXBuffer **face_remap_out, ID3DXBuffer **vertex_remap_out);
+HRESULT WINAPI D3DXTesselateNPatches(ID3DXMesh *mesh_in, const DWORD *adjacency_in, float segment_count,
+ BOOL quad_interp, ID3DXMesh **mesh_out, ID3DXBuffer **adjacency_out);
+HRESULT WINAPI D3DXTesselateRectPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
+ const D3DVERTEXELEMENT9 *declaration, const D3DRECTPATCH_INFO *patch_info, struct ID3DXMesh *mesh);
+HRESULT WINAPI D3DXTesselateTriPatch(struct IDirect3DVertexBuffer9 *buffer, const float *segment_count,
+ const D3DVERTEXELEMENT9 *declaration, const D3DTRIPATCH_INFO *patch_info, struct ID3DXMesh *mesh);
+HRESULT WINAPI D3DXTriPatchSize(const FLOAT *segment_count, DWORD *num_triangles,
+ DWORD *num_vertices);
+HRESULT WINAPI D3DXUVAtlasCreate(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in,
+ UINT width, UINT height, float gutter, DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges,
+ const float *imt_array, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out,
+ ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, float *max_stretch_out, UINT *chart_count);
+HRESULT WINAPI D3DXUVAtlasPack(ID3DXMesh *mesh, UINT width, UINT height, float gutter, DWORD texture_idx,
+ const DWORD *partition_result_adjacency, LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags,
+ ID3DXBuffer *face_partitioning);
+HRESULT WINAPI D3DXUVAtlasPartition(ID3DXMesh *mesh_in, UINT max_chart_count, float max_stretch_in,
+ DWORD texture_idx, const DWORD *adjacency, const DWORD *false_edges, const float *imt_array,
+ LPD3DXUVATLASCB cb, float cb_freq, void *ctx, DWORD flags, ID3DXMesh **mesh_out,
+ ID3DXBuffer **face_partitioning_out, ID3DXBuffer **vertex_remap_out, ID3DXBuffer **adjacency_out,
+ float *max_stretch_out, UINT *chart_count);
+HRESULT WINAPI D3DXValidMesh(ID3DXMesh *mesh, const DWORD *adjacency, ID3DXBuffer **errors);
+HRESULT WINAPI D3DXValidPatchMesh(ID3DXPatchMesh *mesh, DWORD *degenerate_vertex_count,
+ DWORD *degenerate_patch_count, ID3DXBuffer **errors);
+HRESULT WINAPI D3DXWeldVertices(ID3DXMesh *mesh, DWORD flags, const D3DXWELDEPSILONS *epsilons,
+ const DWORD *adjacency_in, DWORD *adjacency_out, DWORD *face_remap_out, ID3DXBuffer **vertex_remap_out);
+
+#ifdef __cplusplus
+}
+#endif
+
+DEFINE_GUID(DXFILEOBJ_XSkinMeshHeader, 0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2);
+DEFINE_GUID(DXFILEOBJ_VertexDuplicationIndices, 0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3);
+DEFINE_GUID(DXFILEOBJ_FaceAdjacency, 0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0x0c, 0xde, 0x04, 0x39, 0x8c);
+DEFINE_GUID(DXFILEOBJ_SkinWeights, 0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb);
+DEFINE_GUID(DXFILEOBJ_Patch, 0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6);
+DEFINE_GUID(DXFILEOBJ_PatchMesh, 0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4d, 0xbf);
+DEFINE_GUID(DXFILEOBJ_PatchMesh9, 0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x02, 0xc0, 0xea);
+DEFINE_GUID(DXFILEOBJ_PMInfo, 0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47);
+DEFINE_GUID(DXFILEOBJ_PMAttributeRange, 0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44);
+DEFINE_GUID(DXFILEOBJ_PMVSplitRecord, 0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c);
+DEFINE_GUID(DXFILEOBJ_FVFData, 0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97);
+DEFINE_GUID(DXFILEOBJ_VertexElement, 0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0x0f, 0x33, 0x6f);
+DEFINE_GUID(DXFILEOBJ_DeclData, 0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93);
+DEFINE_GUID(DXFILEOBJ_EffectFloats, 0xf1cfe2b3, 0x0de3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0x0a, 0x28, 0x2d);
+DEFINE_GUID(DXFILEOBJ_EffectString, 0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0x0e, 0x42);
+DEFINE_GUID(DXFILEOBJ_EffectDWord, 0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16);
+DEFINE_GUID(DXFILEOBJ_EffectParamFloats, 0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b);
+DEFINE_GUID(DXFILEOBJ_EffectParamString, 0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81);
+DEFINE_GUID(DXFILEOBJ_EffectParamDWord, 0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0x0f, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5);
+DEFINE_GUID(DXFILEOBJ_EffectInstance, 0xe331f7e4, 0x0559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f);
+DEFINE_GUID(DXFILEOBJ_AnimTicksPerSecond, 0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76);
+DEFINE_GUID(DXFILEOBJ_CompressedAnimationSet, 0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d);
+
+#define XSKINEXP_TEMPLATES \
+ "xof 0303txt 0032\
+ template XSkinMeshHeader \
+ { \
+ <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \
+ WORD nMaxSkinWeightsPerVertex; \
+ WORD nMaxSkinWeightsPerFace; \
+ WORD nBones; \
+ } \
+ template VertexDuplicationIndices \
+ { \
+ <B8D65549-D7C9-4995-89CF-53A9A8B031E3> \
+ DWORD nIndices; \
+ DWORD nOriginalVertices; \
+ array DWORD indices[nIndices]; \
+ } \
+ template FaceAdjacency \
+ { \
+ <A64C844A-E282-4756-8B80-250CDE04398C> \
+ DWORD nIndices; \
+ array DWORD indices[nIndices]; \
+ } \
+ template SkinWeights \
+ { \
+ <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \
+ STRING transformNodeName; \
+ DWORD nWeights; \
+ array DWORD vertexIndices[nWeights]; \
+ array float weights[nWeights]; \
+ Matrix4x4 matrixOffset; \
+ } \
+ template Patch \
+ { \
+ <A3EB5D44-FC22-429D-9AFB-3221CB9719A6> \
+ DWORD nControlIndices; \
+ array DWORD controlIndices[nControlIndices]; \
+ } \
+ template PatchMesh \
+ { \
+ <D02C95CC-EDBA-4305-9B5D-1820D7704BBF> \
+ DWORD nVertices; \
+ array Vector vertices[nVertices]; \
+ DWORD nPatches; \
+ array Patch patches[nPatches]; \
+ [ ... ] \
+ } \
+ template PatchMesh9 \
+ { \
+ <B9EC94E1-B9A6-4251-BA18-94893F02C0EA> \
+ DWORD Type; \
+ DWORD Degree; \
+ DWORD Basis; \
+ DWORD nVertices; \
+ array Vector vertices[nVertices]; \
+ DWORD nPatches; \
+ array Patch patches[nPatches]; \
+ [ ... ] \
+ } template EffectFloats \
+ { \
+ <F1CFE2B3-0DE3-4e28-AFA1-155A750A282D> \
+ DWORD nFloats; \
+ array float Floats[nFloats]; \
+ } \
+ template EffectString \
+ { \
+ <D55B097E-BDB6-4c52-B03D-6051C89D0E42> \
+ STRING Value; \
+ } \
+ template EffectDWord \
+ { \
+ <622C0ED0-956E-4da9-908A-2AF94F3CE716> \
+ DWORD Value; \
+ } template EffectParamFloats \
+ { \
+ <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \
+ STRING ParamName; \
+ DWORD nFloats; \
+ array float Floats[nFloats]; \
+ } template EffectParamString \
+ { \
+ <1DBC4C88-94C1-46ee-9076-2C28818C9481> \
+ STRING ParamName; \
+ STRING Value; \
+ } \
+ template EffectParamDWord \
+ { \
+ <E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5> \
+ STRING ParamName; \
+ DWORD Value; \
+ } \
+ template EffectInstance \
+ { \
+ <E331F7E4-0559-4cc2-8E99-1CEC1657928F> \
+ STRING EffectFilename; \
+ [ ... ] \
+ } template AnimTicksPerSecond \
+ { \
+ <9E415A43-7BA6-4a73-8743-B73D47E88476> \
+ DWORD AnimTicksPerSecond; \
+ } \
+ template CompressedAnimationSet \
+ { \
+ <7F9B00B3-F125-4890-876E-1C42BF697C4D> \
+ DWORD CompressedBlockSize; \
+ FLOAT TicksPerSec; \
+ DWORD PlaybackType; \
+ DWORD BufferLength; \
+ array DWORD CompressedData[BufferLength]; \
+ } "
+
+#define XEXTENSIONS_TEMPLATES \
+ "xof 0303txt 0032\
+ template FVFData \
+ { \
+ <B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897> \
+ DWORD dwFVF; \
+ DWORD nDWords; \
+ array DWORD data[nDWords]; \
+ } \
+ template VertexElement \
+ { \
+ <F752461C-1E23-48f6-B9F8-8350850F336F> \
+ DWORD Type; \
+ DWORD Method; \
+ DWORD Usage; \
+ DWORD UsageIndex; \
+ } \
+ template DeclData \
+ { \
+ <BF22E553-292C-4781-9FEA-62BD554BDD93> \
+ DWORD nElements; \
+ array VertexElement Elements[nElements]; \
+ DWORD nDWords; \
+ array DWORD data[nDWords]; \
+ } \
+ template PMAttributeRange \
+ { \
+ <917E0427-C61E-4a14-9C64-AFE65F9E9844> \
+ DWORD iFaceOffset; \
+ DWORD nFacesMin; \
+ DWORD nFacesMax; \
+ DWORD iVertexOffset; \
+ DWORD nVerticesMin; \
+ DWORD nVerticesMax; \
+ } \
+ template PMVSplitRecord \
+ { \
+ <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \
+ DWORD iFaceCLW; \
+ DWORD iVlrOffset; \
+ DWORD iCode; \
+ } \
+ template PMInfo \
+ { \
+ <B6C3E656-EC8B-4b92-9B62-681659522947> \
+ DWORD nAttributes; \
+ array PMAttributeRange attributeRanges[nAttributes]; \
+ DWORD nMaxValence; \
+ DWORD nMinLogicalVertices; \
+ DWORD nMaxLogicalVertices; \
+ DWORD nVSplits; \
+ array PMVSplitRecord splitRecords[nVSplits]; \
+ DWORD nAttributeMispredicts; \
+ array DWORD attributeMispredicts[nAttributeMispredicts]; \
+ } "
+
+#endif /* __WINE_D3DX9MESH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h
new file mode 100644
index 00000000..e1cdd595
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shader.h
@@ -0,0 +1,381 @@
+/*
+ * Copyright 2008 Luis Busquets
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "d3dx9.h"
+
+#ifndef __D3DX9SHADER_H__
+#define __D3DX9SHADER_H__
+
+#define D3DXSHADER_DEBUG 0x1
+#define D3DXSHADER_SKIPVALIDATION 0x2
+#define D3DXSHADER_SKIPOPTIMIZATION 0x4
+#define D3DXSHADER_PACKMATRIX_ROWMAJOR 0x8
+#define D3DXSHADER_PACKMATRIX_COLUMNMAJOR 0x10
+#define D3DXSHADER_PARTIALPRECISION 0x20
+#define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT 0x40
+#define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT 0x80
+#define D3DXSHADER_NO_PRESHADER 0x100
+#define D3DXSHADER_AVOID_FLOW_CONTROL 0x200
+#define D3DXSHADER_PREFER_FLOW_CONTROL 0x400
+#define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY 0x1000
+#define D3DXSHADER_IEEE_STRICTNESS 0x2000
+
+#define D3DXSHADER_OPTIMIZATION_LEVEL0 0x4000
+#define D3DXSHADER_OPTIMIZATION_LEVEL1 0x0
+#define D3DXSHADER_OPTIMIZATION_LEVEL2 0xC000
+#define D3DXSHADER_OPTIMIZATION_LEVEL3 0x8000
+
+#define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL 0x10000
+
+typedef const char *D3DXHANDLE;
+
+typedef enum _D3DXREGISTER_SET
+{
+ D3DXRS_BOOL,
+ D3DXRS_INT4,
+ D3DXRS_FLOAT4,
+ D3DXRS_SAMPLER,
+ D3DXRS_FORCE_DWORD = 0x7fffffff
+} D3DXREGISTER_SET, *LPD3DXREGISTER_SET;
+
+typedef enum D3DXPARAMETER_CLASS
+{
+ D3DXPC_SCALAR,
+ D3DXPC_VECTOR,
+ D3DXPC_MATRIX_ROWS,
+ D3DXPC_MATRIX_COLUMNS,
+ D3DXPC_OBJECT,
+ D3DXPC_STRUCT,
+ D3DXPC_FORCE_DWORD = 0x7fffffff,
+} D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;
+
+typedef enum D3DXPARAMETER_TYPE
+{
+ D3DXPT_VOID,
+ D3DXPT_BOOL,
+ D3DXPT_INT,
+ D3DXPT_FLOAT,
+ D3DXPT_STRING,
+ D3DXPT_TEXTURE,
+ D3DXPT_TEXTURE1D,
+ D3DXPT_TEXTURE2D,
+ D3DXPT_TEXTURE3D,
+ D3DXPT_TEXTURECUBE,
+ D3DXPT_SAMPLER,
+ D3DXPT_SAMPLER1D,
+ D3DXPT_SAMPLER2D,
+ D3DXPT_SAMPLER3D,
+ D3DXPT_SAMPLERCUBE,
+ D3DXPT_PIXELSHADER,
+ D3DXPT_VERTEXSHADER,
+ D3DXPT_PIXELFRAGMENT,
+ D3DXPT_VERTEXFRAGMENT,
+ D3DXPT_UNSUPPORTED,
+ D3DXPT_FORCE_DWORD = 0x7fffffff,
+} D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;
+
+typedef struct _D3DXCONSTANTTABLE_DESC
+{
+ const char *Creator;
+ DWORD Version;
+ UINT Constants;
+} D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;
+
+typedef struct _D3DXCONSTANT_DESC
+{
+ const char *Name;
+ D3DXREGISTER_SET RegisterSet;
+ UINT RegisterIndex;
+ UINT RegisterCount;
+ D3DXPARAMETER_CLASS Class;
+ D3DXPARAMETER_TYPE Type;
+ UINT Rows;
+ UINT Columns;
+ UINT Elements;
+ UINT StructMembers;
+ UINT Bytes;
+ const void *DefaultValue;
+} D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;
+
+DEFINE_GUID(IID_ID3DXConstantTable, 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b);
+
+#undef INTERFACE
+#define INTERFACE ID3DXConstantTable
+
+DECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+ /*** ID3DXBuffer methods ***/
+ STDMETHOD_(void *, GetBufferPointer)(THIS) PURE;
+ STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
+ /*** ID3DXConstantTable methods ***/
+ STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
+ STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
+ STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE;
+ STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
+ STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE constant, const char *name) PURE;
+ STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
+ STDMETHOD(SetDefaults)(THIS_ struct IDirect3DDevice9 *device) PURE;
+ STDMETHOD(SetValue)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const void *data, UINT data_size) PURE;
+ STDMETHOD(SetBool)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, BOOL value) PURE;
+ STDMETHOD(SetBoolArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const BOOL *values, UINT value_count) PURE;
+ STDMETHOD(SetInt)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, INT value) PURE;
+ STDMETHOD(SetIntArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const INT *values, UINT value_count) PURE;
+ STDMETHOD(SetFloat)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, float value) PURE;
+ STDMETHOD(SetFloatArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const float *values, UINT value_count) PURE;
+ STDMETHOD(SetVector)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXVECTOR4 *value) PURE;
+ STDMETHOD(SetVectorArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const D3DXVECTOR4 *values, UINT value_count) PURE;
+ STDMETHOD(SetMatrix)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant, const D3DXMATRIX *value) PURE;
+ STDMETHOD(SetMatrixArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const D3DXMATRIX *values, UINT value_count) PURE;
+ STDMETHOD(SetMatrixPointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const D3DXMATRIX **values, UINT value_count) PURE;
+ STDMETHOD(SetMatrixTranspose)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const D3DXMATRIX *value) PURE;
+ STDMETHOD(SetMatrixTransposeArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const D3DXMATRIX *values, UINT value_count) PURE;
+ STDMETHOD(SetMatrixTransposePointerArray)(THIS_ struct IDirect3DDevice9 *device, D3DXHANDLE constant,
+ const D3DXMATRIX **values, UINT value_count) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define ID3DXConstantTable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ID3DXConstantTable_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ID3DXConstantTable_Release(p) (p)->lpVtbl->Release(p)
+/*** ID3DXBuffer methods ***/
+#define ID3DXConstantTable_GetBufferPointer(p) (p)->lpVtbl->GetBufferPointer(p)
+#define ID3DXConstantTable_GetBufferSize(p) (p)->lpVtbl->GetBufferSize(p)
+/*** ID3DXConstantTable methods ***/
+#define ID3DXConstantTable_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)
+#define ID3DXConstantTable_GetConstantDesc(p,a,b,c) (p)->lpVtbl->GetConstantDesc(p,a,b,c)
+#define ID3DXConstantTable_GetSamplerIndex(p,a) (p)->lpVtbl->GetSamplerIndex(p,a)
+#define ID3DXConstantTable_GetConstant(p,a,b) (p)->lpVtbl->GetConstant(p,a,b)
+#define ID3DXConstantTable_GetConstantByName(p,a,b) (p)->lpVtbl->GetConstantByName(p,a,b)
+#define ID3DXConstantTable_GetConstantElement(p,a,b) (p)->lpVtbl->GetConstantElement(p,a,b)
+#define ID3DXConstantTable_SetDefaults(p,a) (p)->lpVtbl->SetDefaults(p,a)
+#define ID3DXConstantTable_SetValue(p,a,b,c,d) (p)->lpVtbl->SetValue(p,a,b,c,d)
+#define ID3DXConstantTable_SetBool(p,a,b,c) (p)->lpVtbl->SetBool(p,a,b,c)
+#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d) (p)->lpVtbl->SetBoolArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetInt(p,a,b,c) (p)->lpVtbl->SetInt(p,a,b,c)
+#define ID3DXConstantTable_SetIntArray(p,a,b,c,d) (p)->lpVtbl->SetIntArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetFloat(p,a,b,c) (p)->lpVtbl->SetFloat(p,a,b,c)
+#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d) (p)->lpVtbl->SetFloatArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetVector(p,a,b,c) (p)->lpVtbl->SetVector(p,a,b,c)
+#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d) (p)->lpVtbl->SetVectorArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrix(p,a,b,c) (p)->lpVtbl->SetMatrix(p,a,b,c)
+#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixPointerArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c) (p)->lpVtbl->SetMatrixTranspose(p,a,b,c)
+#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixTransposeArray(p,a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d) (p)->lpVtbl->SetMatrixTransposePointerArray(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define ID3DXConstantTable_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define ID3DXConstantTable_AddRef(p) (p)->AddRef()
+#define ID3DXConstantTable_Release(p) (p)->Release()
+/*** ID3DXBuffer methods ***/
+#define ID3DXConstantTable_GetBufferPointer(p) (p)->GetBufferPointer()
+#define ID3DXConstantTable_GetBufferSize(p) (p)->GetBufferSize()
+/*** ID3DXConstantTable methods ***/
+#define ID3DXConstantTable_GetDesc(p,a) (p)->GetDesc(a)
+#define ID3DXConstantTable_GetConstantDesc(p,a,b,c) (p)->GetConstantDesc(a,b,c)
+#define ID3DXConstantTable_GetSamplerIndex(p,a) (p)->GetConstantDesc(a)
+#define ID3DXConstantTable_GetConstant(p,a,b) (p)->GetConstant(a,b)
+#define ID3DXConstantTable_GetConstantByName(p,a,b) (p)->GetConstantByName(a,b)
+#define ID3DXConstantTable_GetConstantElement(p,a,b) (p)->GetConstantElement(a,b)
+#define ID3DXConstantTable_SetDefaults(p,a) (p)->SetDefaults(a)
+#define ID3DXConstantTable_SetValue(p,a,b,c,d) (p)->SetValue(a,b,c,d)
+#define ID3DXConstantTable_SetBool(p,a,b,c) (p)->SetBool(a,b,c)
+#define ID3DXConstantTable_SetBoolArray(p,a,b,c,d) (p)->SetBoolArray(a,b,c,d)
+#define ID3DXConstantTable_SetInt(p,a,b,c) (p)->SetInt(a,b,c)
+#define ID3DXConstantTable_SetIntArray(p,a,b,c,d) (p)->SetIntArray(a,b,c,d)
+#define ID3DXConstantTable_SetFloat(p,a,b,c) (p)->SetFloat(a,b,c)
+#define ID3DXConstantTable_SetFloatArray(p,a,b,c,d) (p)->SetFloatArray(a,b,c,d)
+#define ID3DXConstantTable_SetVector(p,a,b,c) (p)->SetVector(a,b,c)
+#define ID3DXConstantTable_SetVectorArray(p,a,b,c,d) (p)->SetVectorArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrix(p,a,b,c) (p)->SetMatrix(a,b,c)
+#define ID3DXConstantTable_SetMatrixArray(p,a,b,c,d) (p)->SetMatrixArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrixPointerArray(p,a,b,c,d) (p)->SetMatrixPointerArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTranspose(p,a,b,c) (p)->SetMatrixTranspose(a,b,c)
+#define ID3DXConstantTable_SetMatrixTransposeArray(p,a,b,c,d) (p)->SetMatrixTransposeArray(a,b,c,d)
+#define ID3DXConstantTable_SetMatrixTransposePointerArray(p,a,b,c,d) (p)->SetMatrixTransposePointerArray(a,b,c,d)
+#endif
+
+typedef struct ID3DXConstantTable *LPD3DXCONSTANTTABLE;
+
+typedef struct _D3DXMACRO
+{
+ const char *Name;
+ const char *Definition;
+} D3DXMACRO, *LPD3DXMACRO;
+
+typedef struct _D3DXSEMANTIC {
+ UINT Usage;
+ UINT UsageIndex;
+} D3DXSEMANTIC, *LPD3DXSEMANTIC;
+
+typedef enum _D3DXINCLUDE_TYPE
+{
+ D3DXINC_LOCAL,
+ D3DXINC_SYSTEM,
+ D3DXINC_FORCE_DWORD = 0x7fffffff,
+} D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;
+
+#define INTERFACE ID3DXInclude
+
+DECLARE_INTERFACE(ID3DXInclude)
+{
+ STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE include_type, const char *filename,
+ const void *parent_data, const void **data, UINT *bytes) PURE;
+ STDMETHOD(Close)(THIS_ const void *data) PURE;
+};
+#undef INTERFACE
+
+#define ID3DXInclude_Open(p,a,b,c,d,e) (p)->lpVtbl->Open(p,a,b,c,d,e)
+#define ID3DXInclude_Close(p,a) (p)->lpVtbl->Close(p,a)
+
+typedef struct ID3DXInclude *LPD3DXINCLUDE;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const char * WINAPI D3DXGetPixelShaderProfile(struct IDirect3DDevice9 *device);
+UINT WINAPI D3DXGetShaderSize(const DWORD *byte_code);
+DWORD WINAPI D3DXGetShaderVersion(const DWORD *byte_code);
+const char * WINAPI D3DXGetVertexShaderProfile(struct IDirect3DDevice9 *device);
+HRESULT WINAPI D3DXFindShaderComment(const DWORD *byte_code, DWORD fourcc, const void **data, UINT *size);
+HRESULT WINAPI D3DXGetShaderSamplers(const DWORD *byte_code, const char **samplers, UINT *count);
+
+HRESULT WINAPI D3DXAssembleShaderFromFileA(const char *filename, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXAssembleShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXAssembleShaderFromFile WINELIB_NAME_AW(D3DXAssembleShaderFromFile)
+
+HRESULT WINAPI D3DXAssembleShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXAssembleShaderFromResource WINELIB_NAME_AW(D3DXAssembleShaderFromResource)
+
+HRESULT WINAPI D3DXAssembleShader(const char *data, UINT data_len, const D3DXMACRO *defines,
+ ID3DXInclude *include, DWORD flags, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+
+HRESULT WINAPI D3DXCompileShader(const char *src_data, UINT data_len, const D3DXMACRO *defines,
+ ID3DXInclude *include, const char *function_name, const char *profile, DWORD flags,
+ ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+
+HRESULT WINAPI D3DXCompileShaderFromFileA(const char *filename, const D3DXMACRO *defines,
+ ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+ ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+HRESULT WINAPI D3DXCompileShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
+ ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+ ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+#define D3DXCompileShaderFromFile WINELIB_NAME_AW(D3DXCompileShaderFromFile)
+
+HRESULT WINAPI D3DXCompileShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
+ ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+ ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+HRESULT WINAPI D3DXCompileShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
+ ID3DXInclude *include, const char *entrypoint, const char *profile, DWORD flags,
+ ID3DXBuffer **shader, ID3DXBuffer **error_messages, ID3DXConstantTable **constant_table);
+#define D3DXCompileShaderFromResource WINELIB_NAME_AW(D3DXCompileShaderFromResource)
+
+HRESULT WINAPI D3DXPreprocessShader(const char *data, UINT data_len, const D3DXMACRO *defines,
+ ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+
+HRESULT WINAPI D3DXPreprocessShaderFromFileA(const char *filename, const D3DXMACRO *defines,
+ ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXPreprocessShaderFromFileW(const WCHAR *filename, const D3DXMACRO *defines,
+ ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXPreprocessShaderFromFile WINELIB_NAME_AW(D3DXPreprocessShaderFromFile)
+
+HRESULT WINAPI D3DXPreprocessShaderFromResourceA(HMODULE module, const char *resource, const D3DXMACRO *defines,
+ ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+HRESULT WINAPI D3DXPreprocessShaderFromResourceW(HMODULE module, const WCHAR *resource, const D3DXMACRO *defines,
+ ID3DXInclude *include, ID3DXBuffer **shader, ID3DXBuffer **error_messages);
+#define D3DXPreprocessShaderFromResource WINELIB_NAME_AW(D3DXPreprocessShaderFromResource)
+
+HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags, ID3DXConstantTable **constant_table);
+
+HRESULT WINAPI D3DXGetShaderConstantTable(const DWORD *byte_code, ID3DXConstantTable **constant_table);
+
+#ifdef __cplusplus
+}
+#endif
+
+typedef struct _D3DXSHADER_CONSTANTTABLE
+{
+ DWORD Size;
+ DWORD Creator;
+ DWORD Version;
+ DWORD Constants;
+ DWORD ConstantInfo;
+ DWORD Flags;
+ DWORD Target;
+} D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;
+
+typedef struct _D3DXSHADER_CONSTANTINFO
+{
+ DWORD Name;
+ WORD RegisterSet;
+ WORD RegisterIndex;
+ WORD RegisterCount;
+ WORD Reserved;
+ DWORD TypeInfo;
+ DWORD DefaultValue;
+} D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;
+
+typedef struct _D3DXSHADER_TYPEINFO
+{
+ WORD Class;
+ WORD Type;
+ WORD Rows;
+ WORD Columns;
+ WORD Elements;
+ WORD StructMembers;
+ DWORD StructMemberInfo;
+} D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;
+
+typedef struct _D3DXSHADER_STRUCTMEMBERINFO
+{
+ DWORD Name;
+ DWORD TypeInfo;
+} D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;
+
+#endif /* __D3DX9SHADER_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h
new file mode 100644
index 00000000..498e9917
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9shape.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2010 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "d3dx9.h"
+
+#ifndef __D3DX9SHAPE_H__
+#define __D3DX9SHAPE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI D3DXCreateBox(struct IDirect3DDevice9 *device, float width, float height,
+ float depth, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1, float radius2,
+ float length, UINT slices, UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateSphere(struct IDirect3DDevice9 *device, float radius, UINT slices,
+ UINT stacks, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateTeapot(struct IDirect3DDevice9 *device,
+ struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency);
+HRESULT WINAPI D3DXCreateTextA(struct IDirect3DDevice9 *device, HDC hdc, const char *text, float deviation,
+ float extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics);
+HRESULT WINAPI D3DXCreateTextW(struct IDirect3DDevice9 *device, HDC hdc, const WCHAR *text, float deviation,
+ FLOAT extrusion, struct ID3DXMesh **mesh, struct ID3DXBuffer **adjacency, GLYPHMETRICSFLOAT *glyphmetrics);
+#define D3DXCreateText WINELIB_NAME_AW(D3DXCreateText)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __D3DX9SHAPE_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h
new file mode 100644
index 00000000..7c93b394
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9tex.h
@@ -0,0 +1,358 @@
+/*
+ * Copyright (C) 2008 Tony Wasserka
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <d3dx9.h>
+
+#ifndef __WINE_D3DX9TEX_H
+#define __WINE_D3DX9TEX_H
+
+/**********************************************
+ ***************** Definitions ****************
+ **********************************************/
+#define D3DX_FILTER_NONE 0x00000001
+#define D3DX_FILTER_POINT 0x00000002
+#define D3DX_FILTER_LINEAR 0x00000003
+#define D3DX_FILTER_TRIANGLE 0x00000004
+#define D3DX_FILTER_BOX 0x00000005
+#define D3DX_FILTER_MIRROR_U 0x00010000
+#define D3DX_FILTER_MIRROR_V 0x00020000
+#define D3DX_FILTER_MIRROR_W 0x00040000
+#define D3DX_FILTER_MIRROR 0x00070000
+#define D3DX_FILTER_DITHER 0x00080000
+#define D3DX_FILTER_DITHER_DIFFUSION 0x00100000
+#define D3DX_FILTER_SRGB_IN 0x00200000
+#define D3DX_FILTER_SRGB_OUT 0x00400000
+#define D3DX_FILTER_SRGB 0x00600000
+
+#define D3DX_NORMALMAP_MIRROR_U 0x00010000
+#define D3DX_NORMALMAP_MIRROR_V 0x00020000
+#define D3DX_NORMALMAP_MIRROR 0x00030000
+#define D3DX_NORMALMAP_INVERTSIGN 0x00080000
+#define D3DX_NORMALMAP_COMPUTE_OCCLUSION 0x00100000
+
+#define D3DX_CHANNEL_RED 0x00000001
+#define D3DX_CHANNEL_BLUE 0x00000002
+#define D3DX_CHANNEL_GREEN 0x00000004
+#define D3DX_CHANNEL_ALPHA 0x00000008
+#define D3DX_CHANNEL_LUMINANCE 0x00000010
+
+/**********************************************
+ ****************** Typedefs ******************
+ **********************************************/
+typedef enum _D3DXIMAGE_FILEFORMAT
+{
+ D3DXIFF_BMP,
+ D3DXIFF_JPG,
+ D3DXIFF_TGA,
+ D3DXIFF_PNG,
+ D3DXIFF_DDS,
+ D3DXIFF_PPM,
+ D3DXIFF_DIB,
+ D3DXIFF_HDR,
+ D3DXIFF_PFM,
+ D3DXIFF_FORCE_DWORD = 0x7fffffff
+} D3DXIMAGE_FILEFORMAT;
+
+typedef struct _D3DXIMAGE_INFO
+{
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+ UINT MipLevels;
+ D3DFORMAT Format;
+ D3DRESOURCETYPE ResourceType;
+ D3DXIMAGE_FILEFORMAT ImageFileFormat;
+} D3DXIMAGE_INFO;
+
+/**********************************************
+ ****************** Functions *****************
+ **********************************************/
+/* Typedefs for callback functions */
+typedef void (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *out, const D3DXVECTOR2 *texcoord,
+ const D3DXVECTOR2 *texelsize, void *data);
+typedef void (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *out, const D3DXVECTOR3 *texcoord,
+ const D3DXVECTOR3 *texelsize, void *data);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Image Information */
+HRESULT WINAPI D3DXGetImageInfoFromFileA(const char *file, D3DXIMAGE_INFO *info);
+HRESULT WINAPI D3DXGetImageInfoFromFileW(const WCHAR *file, D3DXIMAGE_INFO *info);
+#define D3DXGetImageInfoFromFile WINELIB_NAME_AW(D3DXGetImageInfoFromFile)
+
+HRESULT WINAPI D3DXGetImageInfoFromResourceA(HMODULE module, const char *resource, D3DXIMAGE_INFO *info);
+HRESULT WINAPI D3DXGetImageInfoFromResourceW(HMODULE module, const WCHAR *resource, D3DXIMAGE_INFO *info);
+#define D3DXGetImageInfoFromResource WINELIB_NAME_AW(D3DXGetImageInfoFromResource)
+
+HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(const void *data, UINT data_size, D3DXIMAGE_INFO *info);
+
+
+/* Surface Loading/Saving */
+HRESULT WINAPI D3DXLoadSurfaceFromFileA(struct IDirect3DSurface9 *destsurface,
+ const PALETTEENTRY *destpalette, const RECT *destrect, const char *srcfile,
+ const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadSurfaceFromFileW(struct IDirect3DSurface9 *destsurface,
+ const PALETTEENTRY *destpalette, const RECT *destrect, const WCHAR *srcfile,
+ const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadSurfaceFromFile WINELIB_NAME_AW(D3DXLoadSurfaceFromFile)
+
+HRESULT WINAPI D3DXLoadSurfaceFromResourceA(struct IDirect3DSurface9 *destsurface,
+ const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const char *resource,
+ const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadSurfaceFromResourceW(struct IDirect3DSurface9 *destsurface,
+ const PALETTEENTRY *destpalette, const RECT *destrect, HMODULE srcmodule, const WCHAR *resource,
+ const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadSurfaceFromResource WINELIB_NAME_AW(D3DXLoadSurfaceFromResource)
+
+HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(struct IDirect3DSurface9 *destsurface,
+ const PALETTEENTRY *destpalette, const RECT *destrect, const void *srcdata, UINT srcdatasize,
+ const RECT *srcrect, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+
+HRESULT WINAPI D3DXLoadSurfaceFromSurface(struct IDirect3DSurface9 *destsurface,
+ const PALETTEENTRY *destpalette, const RECT *destrect, struct IDirect3DSurface9 *srcsurface,
+ const PALETTEENTRY *srcpalette, const RECT *srcrect, DWORD filter, D3DCOLOR colorkey);
+
+HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
+ const PALETTEENTRY *dst_palette, const RECT *dst_rect, const void *src_memory,
+ D3DFORMAT src_format, UINT src_pitch, const PALETTEENTRY *src_palette, const RECT *src_rect,
+ DWORD filter, D3DCOLOR color_key);
+
+HRESULT WINAPI D3DXSaveSurfaceToFileInMemory(struct ID3DXBuffer **destbuffer,
+ D3DXIMAGE_FILEFORMAT destformat, struct IDirect3DSurface9 *srcsurface,
+ const PALETTEENTRY *srcpalette, const RECT *srcrect);
+
+HRESULT WINAPI D3DXSaveSurfaceToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect);
+HRESULT WINAPI D3DXSaveSurfaceToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DSurface9 *srcsurface, const PALETTEENTRY *srcpalette, const RECT *srcrect);
+#define D3DXSaveSurfaceToFile WINELIB_NAME_AW(D3DXSaveSurfaceToFile)
+
+
+/* Volume Loading/Saving */
+HRESULT WINAPI D3DXLoadVolumeFromFileA(struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, const char *srcfile,
+ const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadVolumeFromFileW( struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, const WCHAR *srcfile,
+ const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadVolumeFromFile WINELIB_NAME_AW(D3DXLoadVolumeFromFile)
+
+HRESULT WINAPI D3DXLoadVolumeFromResourceA(struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const char *resource,
+ const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+HRESULT WINAPI D3DXLoadVolumeFromResourceW(struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, HMODULE srcmodule, const WCHAR *resource,
+ const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+#define D3DXLoadVolumeFromResource WINELIB_NAME_AW(D3DXLoadVolumeFromResource)
+
+HRESULT WINAPI D3DXLoadVolumeFromFileInMemory(struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcdata, UINT srcdatasize,
+ const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo);
+
+HRESULT WINAPI D3DXLoadVolumeFromVolume(struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, struct IDirect3DVolume9 *srcvolume,
+ const PALETTEENTRY *srcpalette, const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey);
+
+HRESULT WINAPI D3DXLoadVolumeFromMemory(struct IDirect3DVolume9 *destvolume,
+ const PALETTEENTRY *destpalette, const D3DBOX *destbox, const void *srcmemory,
+ D3DFORMAT srcformat, UINT srcrowpitch, UINT srcslicepitch, const PALETTEENTRY *srcpalette,
+ const D3DBOX *srcbox, DWORD filter, D3DCOLOR colorkey);
+
+HRESULT WINAPI D3DXSaveVolumeToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox);
+HRESULT WINAPI D3DXSaveVolumeToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DVolume9 *srcvolume, const PALETTEENTRY *srcpalette, const D3DBOX *srcbox);
+#define D3DXSaveVolumeToFile WINELIB_NAME_AW(D3DXSaveVolumeToFile)
+
+
+/* Texture, cube texture and volume texture creation */
+HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height,
+ UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);
+HRESULT WINAPI D3DXCheckCubeTextureRequirements(struct IDirect3DDevice9 *device, UINT *size,
+ UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);
+HRESULT WINAPI D3DXCheckVolumeTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height,
+ UINT *depth, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool);
+
+HRESULT WINAPI D3DXCreateTexture(struct IDirect3DDevice9 *device, UINT width, UINT height,
+ UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateCubeTexture(struct IDirect3DDevice9 *device, UINT size,
+ UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateVolumeTexture(struct IDirect3DDevice9 *device, UINT width, UINT height, UINT depth,
+ UINT miplevels, DWORD usage, D3DFORMAT format, D3DPOOL pool, struct IDirect3DVolumeTexture9 **volume);
+
+HRESULT WINAPI D3DXCreateTextureFromFileA(struct IDirect3DDevice9 *device,
+ const char *srcfile, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromFileW(struct IDirect3DDevice9 *device,
+ const WCHAR *srcfile, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromFile WINELIB_NAME_AW(D3DXCreateTextureFromFile)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromFileA(struct IDirect3DDevice9 *device,
+ const char *srcfile, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileW(struct IDirect3DDevice9 *device,
+ const WCHAR *srcfile, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromFile WINELIB_NAME_AW(D3DXCreateCubeTextureFromFile)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileA(struct IDirect3DDevice9 *device,
+ const char *srcfile, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileW(struct IDirect3DDevice9 *device,
+ const WCHAR *srcfile, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromFile WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFile)
+
+HRESULT WINAPI D3DXCreateTextureFromResourceA(struct IDirect3DDevice9 *device,
+ HMODULE srcmodule, const char *resource, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromResourceW(struct IDirect3DDevice9 *device,
+ HMODULE srcmodule, const WCHAR *resource, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromResource WINELIB_NAME_AW(D3DXCreateTextureFromResource)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceA(struct IDirect3DDevice9 *device,
+ HMODULE srcmodule, const char *resource, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceW(struct IDirect3DDevice9 *device,
+ HMODULE srcmodule, const WCHAR *resource, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromResource WINELIB_NAME_AW(D3DXCreateCubeTextureFromResource)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceA(struct IDirect3DDevice9 *device,
+ HMODULE srcmodule, const char *resource, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceW(struct IDirect3DDevice9 *device,
+ HMODULE srcmodule, const WCHAR *resource, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromResource WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResource)
+
+HRESULT WINAPI D3DXCreateTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+ UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+ UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromFileEx WINELIB_NAME_AW(D3DXCreateTextureFromFileEx)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+ UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+ UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromFileEx)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileExA(struct IDirect3DDevice9 *device, const char *srcfile,
+ UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileExW(struct IDirect3DDevice9 *device, const WCHAR *srcfile,
+ UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromFileEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromFileEx)
+
+HRESULT WINAPI D3DXCreateTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const char *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const WCHAR *resource, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+#define D3DXCreateTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateTextureFromResourceEx)
+
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const char *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateCubeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const WCHAR *resource, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+#define D3DXCreateCubeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateCubeTextureFromResourceEx)
+
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExA(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const char *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+HRESULT WINAPI D3DXCreateVolumeTextureFromResourceExW(struct IDirect3DDevice9 *device, HMODULE srcmodule,
+ const WCHAR *resource, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+#define D3DXCreateVolumeTextureFromResourceEx WINELIB_NAME_AW(D3DXCreateVolumeTextureFromResourceEx)
+
+HRESULT WINAPI D3DXCreateTextureFromFileInMemory(struct IDirect3DDevice9 *device,
+ const void *srcdata, UINT srcdatasize, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemory(struct IDirect3DDevice9 *device,
+ const void *srcdata, UINT srcdatasize, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemory(struct IDirect3DDevice9 *device,
+ const void *srcdata, UINT srcdatasize, struct IDirect3DVolumeTexture9 **volume);
+
+HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,
+ UINT srcdatasize, UINT width, UINT height, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DTexture9 **texture);
+HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,
+ UINT srcdatasize, UINT size, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DCubeTexture9 **cube);
+HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(struct IDirect3DDevice9 *device, const void *srcdata,
+ UINT srcdatasize, UINT width, UINT height, UINT depth, UINT miplevels, DWORD usage, D3DFORMAT format,
+ D3DPOOL pool, DWORD filter, DWORD mipfilter, D3DCOLOR colorkey, D3DXIMAGE_INFO *srcinfo,
+ PALETTEENTRY *palette, struct IDirect3DVolumeTexture9 **volume);
+
+HRESULT WINAPI D3DXSaveTextureToFileInMemory(struct ID3DXBuffer **destbuffer, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);
+HRESULT WINAPI D3DXSaveTextureToFileA(const char *destfile, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);
+HRESULT WINAPI D3DXSaveTextureToFileW(const WCHAR *destfile, D3DXIMAGE_FILEFORMAT destformat,
+ struct IDirect3DBaseTexture9 *srctexture, const PALETTEENTRY *srcpalette);
+#define D3DXSaveTextureToFile WINELIB_NAME_AW(D3DXSaveTextureToFile)
+
+/* Other functions */
+HRESULT WINAPI D3DXFilterTexture(struct IDirect3DBaseTexture9 *texture,
+ const PALETTEENTRY *palette, UINT srclevel, DWORD filter);
+#define D3DXFilterCubeTexture D3DXFilterTexture
+#define D3DXFilterVolumeTexture D3DXFilterTexture
+
+HRESULT WINAPI D3DXFillTexture(struct IDirect3DTexture9 *texture, LPD3DXFILL2D function, void *data);
+HRESULT WINAPI D3DXFillCubeTexture(struct IDirect3DCubeTexture9 *cube, LPD3DXFILL3D function, void *data);
+HRESULT WINAPI D3DXFillVolumeTexture(struct IDirect3DVolumeTexture9 *volume, LPD3DXFILL3D function, void *data);
+
+HRESULT WINAPI D3DXFillTextureTX(struct IDirect3DTexture9 *texture, const DWORD *function,
+ const D3DXVECTOR4 *constants, UINT numconstants);
+HRESULT WINAPI D3DXFillCubeTextureTX(struct IDirect3DCubeTexture9 *cube, const DWORD *function,
+ const D3DXVECTOR4 *constants, UINT numconstants);
+HRESULT WINAPI D3DXFillVolumeTextureTX(struct IDirect3DVolumeTexture9 *volume, const DWORD *function,
+ const D3DXVECTOR4 *constants, UINT numconstants);
+
+HRESULT WINAPI D3DXComputeNormalMap(IDirect3DTexture9 *texture, IDirect3DTexture9 *srctexture,
+ const PALETTEENTRY *srcpalette, DWORD flags, DWORD channel, float amplitude);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9TEX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h
new file mode 100644
index 00000000..97cf908b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/d3dx9xof.h
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2011 Dylan Smith
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_D3DX9XOF_H
+#define __WINE_D3DX9XOF_H
+
+#include "d3dx9.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef DWORD D3DXF_FILEFORMAT;
+#define D3DXF_FILEFORMAT_BINARY 0
+#define D3DXF_FILEFORMAT_TEXT 1
+#define D3DXF_FILEFORMAT_COMPRESSED 2
+
+typedef DWORD D3DXF_FILESAVEOPTIONS;
+#define D3DXF_FILESAVE_TOFILE 0x00
+#define D3DXF_FILESAVE_TOWFILE 0x01
+
+typedef DWORD D3DXF_FILELOADOPTIONS;
+#define D3DXF_FILELOAD_FROMFILE 0x00
+#define D3DXF_FILELOAD_FROMWFILE 0x01
+#define D3DXF_FILELOAD_FROMRESOURCE 0x02
+#define D3DXF_FILELOAD_FROMMEMORY 0x03
+
+typedef struct _D3DXF_FILELOADRESOURCE
+{
+ HMODULE hModule;
+ const char *lpName;
+ const char *lpType;
+} D3DXF_FILELOADRESOURCE;
+
+typedef struct _D3DXF_FILELOADMEMORY
+{
+ void *lpMemory;
+ SIZE_T dSize;
+} D3DXF_FILELOADMEMORY;
+
+
+#ifndef _NO_COM
+DEFINE_GUID(IID_ID3DXFile, 0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileSaveObject, 0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileSaveData, 0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileEnumObject, 0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+DEFINE_GUID(IID_ID3DXFileData, 0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01);
+#endif /* _NO_COM */
+
+typedef interface ID3DXFile *LPD3DXFILE, **LPLPD3DXFILE;
+typedef interface ID3DXFileSaveObject *LPD3DXFILESAVEOBJECT, **LPLPD3DXFILESAVEOBJECT;
+typedef interface ID3DXFileSaveData *LPD3DXFILESAVEDATA, **LPLPD3DXFILESAVEDATA;
+typedef interface ID3DXFileEnumObject *LPD3DXFILEENUMOBJECT, **LPLPD3DXFILEENUMOBJECT;
+typedef interface ID3DXFileData *LPD3DXFILEDATA, **LPLPD3DXFILEDATA;
+
+STDAPI D3DXFileCreate(struct ID3DXFile **file);
+
+#define INTERFACE ID3DXFile
+DECLARE_INTERFACE_IID_(ID3DXFile,IUnknown,"cef08cf9-7b4f-4429-9624-2a690a933201")
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** ID3DXFile methods ***/
+ STDMETHOD(CreateEnumObject)(THIS_ const void *src, D3DXF_FILELOADOPTIONS type,
+ struct ID3DXFileEnumObject **enum_obj) PURE;
+ STDMETHOD(CreateSaveObject)(THIS_ const void *data, D3DXF_FILESAVEOPTIONS flags,
+ D3DXF_FILEFORMAT format, struct ID3DXFileSaveObject **save_obj) PURE;
+ STDMETHOD(RegisterTemplates)(THIS_ const void *data, SIZE_T data_size) PURE;
+ STDMETHOD(RegisterEnumTemplates)(THIS_ struct ID3DXFileEnumObject *enum_obj) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXFileSaveObject
+DECLARE_INTERFACE_IID_(ID3DXFileSaveObject,IUnknown,"cef08cfa-7b4f-4429-9624-2a690a933201")
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** ID3DXFileSaveObject methods ***/
+ STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE;
+ STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid,
+ SIZE_T data_size, const void *data, struct ID3DXFileSaveData **obj) PURE;
+ STDMETHOD(Save)(THIS) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXFileSaveData
+DECLARE_INTERFACE_IID_(ID3DXFileSaveData,IUnknown,"cef08cfb-7b4f-4429-9624-2a690a933201")
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** ID3DXFileSaveObject methods ***/
+ STDMETHOD(GetSave)(THIS_ ID3DXFileSaveObject **save_obj) PURE;
+ STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE;
+ STDMETHOD(GetId)(THIS_ LPGUID) PURE;
+ STDMETHOD(GetType)(THIS_ GUID*) PURE;
+ STDMETHOD(AddDataObject)(THIS_ REFGUID template_guid, const char *name, const GUID *guid,
+ SIZE_T data_size, const void *data, ID3DXFileSaveData **obj) PURE;
+ STDMETHOD(AddDataReference)(THIS_ const char *name, const GUID *id) PURE;
+};
+#undef INTERFACE
+
+
+#define INTERFACE ID3DXFileEnumObject
+DECLARE_INTERFACE_IID_(ID3DXFileEnumObject,IUnknown,"cef08cfc-7b4f-4429-9624-2a690a933201")
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** ID3DXFileEnumObject methods ***/
+ STDMETHOD(GetFile)(THIS_ ID3DXFile **file) PURE;
+ STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE;
+ STDMETHOD(GetChild)(THIS_ SIZE_T id, struct ID3DXFileData **child) PURE;
+ STDMETHOD(GetDataObjectById)(THIS_ REFGUID guid, struct ID3DXFileData **obj) PURE;
+ STDMETHOD(GetDataObjectByName)(THIS_ const char *name, struct ID3DXFileData **obj) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE ID3DXFileData
+DECLARE_INTERFACE_IID_(ID3DXFileData,IUnknown,"cef08cfd-7b4f-4429-9624-2a690a933201")
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, void **out) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** ID3DXFileData methods ***/
+ STDMETHOD(GetEnum)(THIS_ ID3DXFileEnumObject **enum_obj) PURE;
+ STDMETHOD(GetName)(THIS_ char *name, SIZE_T *size) PURE;
+ STDMETHOD(GetId)(THIS_ LPGUID) PURE;
+ STDMETHOD(Lock)(THIS_ SIZE_T *data_size, const void **data) PURE;
+ STDMETHOD(Unlock)(THIS) PURE;
+ STDMETHOD(GetType)(THIS_ GUID*) PURE;
+ STDMETHOD_(BOOL,IsReference)(THIS) PURE;
+ STDMETHOD(GetChildren)(THIS_ SIZE_T*) PURE;
+ STDMETHOD(GetChild)(THIS_ SIZE_T id, ID3DXFileData **child) PURE;
+};
+#undef INTERFACE
+
+/* D3DX File errors */
+#define _FACD3DXF 0x876
+
+#define D3DXFERR_BADOBJECT MAKE_HRESULT(1,_FACD3DXF,900)
+#define D3DXFERR_BADVALUE MAKE_HRESULT(1,_FACD3DXF,901)
+#define D3DXFERR_BADTYPE MAKE_HRESULT(1,_FACD3DXF,902)
+#define D3DXFERR_NOTFOUND MAKE_HRESULT(1,_FACD3DXF,903)
+#define D3DXFERR_NOTDONEYET MAKE_HRESULT(1,_FACD3DXF,904)
+#define D3DXFERR_FILENOTFOUND MAKE_HRESULT(1,_FACD3DXF,905)
+#define D3DXFERR_RESOURCENOTFOUND MAKE_HRESULT(1,_FACD3DXF,906)
+#define D3DXFERR_BADRESOURCE MAKE_HRESULT(1,_FACD3DXF,907)
+#define D3DXFERR_BADFILETYPE MAKE_HRESULT(1,_FACD3DXF,908)
+#define D3DXFERR_BADFILEVERSION MAKE_HRESULT(1,_FACD3DXF,909)
+#define D3DXFERR_BADFILEFLOATSIZE MAKE_HRESULT(1,_FACD3DXF,910)
+#define D3DXFERR_BADFILE MAKE_HRESULT(1,_FACD3DXF,911)
+#define D3DXFERR_PARSEERROR MAKE_HRESULT(1,_FACD3DXF,912)
+#define D3DXFERR_BADARRAYSIZE MAKE_HRESULT(1,_FACD3DXF,913)
+#define D3DXFERR_BADDATAREFERENCE MAKE_HRESULT(1,_FACD3DXF,914)
+#define D3DXFERR_NOMOREOBJECTS MAKE_HRESULT(1,_FACD3DXF,915)
+#define D3DXFERR_NOMOREDATA MAKE_HRESULT(1,_FACD3DXF,916)
+#define D3DXFERR_BADCACHEFILE MAKE_HRESULT(1,_FACD3DXF,917)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_D3DX9XOF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl
new file mode 100644
index 00000000..a5e19ac3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbccmd.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a1d-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBCreateCommand : IUnknown
+{
+ [local]
+ HRESULT CreateCommand([in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppCommand);
+
+ [call_as(CreateCommand)]
+ HRESULT RemoteCreateCommand([in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppCommand,
+ [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl
new file mode 100644
index 00000000..45288157
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbcses.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a5d-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBCreateSession : IUnknown
+{
+ [local]
+ HRESULT CreateSession([in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppDBSession);
+
+ [call_as(CreateSession)]
+ HRESULT RemoteCreateSession([in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppDBSession,
+ [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl
new file mode 100644
index 00000000..4f1b2623
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbdsad.idl
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a7a-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBDataSourceAdmin : IUnknown
+{
+ [local]
+ HRESULT CreateDataSource([in] ULONG cPropertySets,
+ [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[],
+ [in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppDBSession);
+
+ [call_as(CreateDataSource)]
+ HRESULT RemoteCreateDataSource([in] ULONG cPropertySets,
+ [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+ [in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [in, out, unique, iid_is(riid)] IUnknown **ppDBSession,
+ [in] ULONG cTotalProps,
+ [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT DestroyDataSource();
+
+ [call_as(DestroyDataSource)]
+ HRESULT RemoteDestroyDataSource([out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetCreationProperties([in] ULONG cPropertyIDSets,
+ [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+ [in, out] ULONG *pcPropertyInfoSets,
+ [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+ [out, annotation("__deref_out_z_opt")] OLECHAR **ppDescBuffer);
+
+ [call_as(GetCreationProperties)]
+ HRESULT RemoteGetCreationProperties([in] ULONG cPropertyIDSets,
+ [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+ [in, out] ULONG *pcPropertyInfoSets,
+ [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+ [in, out] DBCOUNTITEM *pcOffsets,
+ [out, size_is(,(ULONG)*pcOffsets)] DBBYTEOFFSET **prgDescOffsets,
+ [in, out] ULONG *pcbDescBuffer,
+ [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT ModifyDataSource([in] ULONG cPropertySets,
+ [in, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);
+
+ [call_as(ModifyDataSource)]
+ HRESULT RemoteModifyDataSource([in] ULONG cPropertySets,
+ [in, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+ [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h
new file mode 100644
index 00000000..bd5acf39
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbghelp.h
@@ -0,0 +1,1543 @@
+/*
+ * Declarations for DBGHELP
+ *
+ * Copyright (C) 2003 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DBGHELP_H
+#define __WINE_DBGHELP_H
+
+/* A set of documentation macros (see also imagehlp.h) */
+#ifndef __deref_out
+# define __deref_out
+#endif
+#ifndef __deref_out_opt
+# define __deref_out_opt
+#endif
+#ifndef __deref_opt_out
+# define __deref_opt_out
+#endif
+#ifndef __in
+# define __in
+#endif
+#ifndef __in_opt
+# define __in_opt
+#endif
+#ifndef __in_bcount
+# define __in_bcount(x)
+#endif
+#ifndef __in_bcount_opt
+# define __in_bcount_opt(x)
+#endif
+#ifndef __in_ecount
+# define __in_ecount(x)
+#endif
+#ifndef __inout
+# define __inout
+#endif
+#ifndef __inout_opt
+# define __inout_opt
+#endif
+#ifndef __inout_bcount
+# define __inout_bcount(x)
+#endif
+#ifndef __inout_ecount
+# define __inout_ecount(x)
+#endif
+#ifndef __out
+# define __out
+#endif
+#ifndef __out_opt
+# define __out_opt
+#endif
+#ifndef __out_bcount
+# define __out_bcount(x)
+#endif
+#ifndef __out_bcount_opt
+# define __out_bcount_opt(x)
+#endif
+#ifndef __out_ecount
+# define __out_ecount(x)
+#endif
+#ifndef __out_ecount_opt
+# define __out_ecount_opt(x)
+#endif
+#ifndef __out_xcount
+# define __out_xcount(x)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef _WIN64
+#ifndef _IMAGEHLP64
+#define _IMAGEHLP64
+#endif
+#endif
+
+#define IMAGEAPI WINAPI
+#define DBHLPAPI IMAGEAPI
+
+typedef struct _LOADED_IMAGE
+{
+ PSTR ModuleName;
+ HANDLE hFile;
+ PUCHAR MappedAddress;
+ PIMAGE_NT_HEADERS FileHeader;
+ PIMAGE_SECTION_HEADER LastRvaSection;
+ ULONG NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+ ULONG Characteristics;
+ BOOLEAN fSystemImage;
+ BOOLEAN fDOSImage;
+ BOOLEAN fReadOnly;
+ UCHAR Version;
+ LIST_ENTRY Links;
+ ULONG SizeOfImage;
+} LOADED_IMAGE, *PLOADED_IMAGE;
+
+/*************************
+ * IMAGEHLP equiv *
+ *************************/
+
+typedef enum
+{
+ AddrMode1616,
+ AddrMode1632,
+ AddrModeReal,
+ AddrModeFlat
+} ADDRESS_MODE;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define ADDRESS ADDRESS64
+#define LPADDRESS LPADDRESS64
+#else
+typedef struct _tagADDRESS
+{
+ DWORD Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS, *LPADDRESS;
+#endif
+
+typedef struct _tagADDRESS64
+{
+ DWORD64 Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS64, *LPADDRESS64;
+
+#define SYMF_OMAP_GENERATED 0x00000001
+#define SYMF_OMAP_MODIFIED 0x00000002
+#define SYMF_USER_GENERATED 0x00000004
+#define SYMF_REGISTER 0x00000008
+#define SYMF_REGREL 0x00000010
+#define SYMF_FRAMEREL 0x00000020
+#define SYMF_PARAMETER 0x00000040
+#define SYMF_LOCAL 0x00000080
+#define SYMF_CONSTANT 0x00000100
+#define SYMF_EXPORT 0x00000200
+#define SYMF_FORWARDER 0x00000400
+#define SYMF_FUNCTION 0x00000800
+#define SYMF_VIRTUAL 0x00001000
+#define SYMF_THUNK 0x00002000
+#define SYMF_TLSREL 0x00004000
+
+typedef enum
+{
+ SymNone = 0,
+ SymCoff,
+ SymCv,
+ SymPdb,
+ SymExport,
+ SymDeferred,
+ SymSym,
+ SymDia,
+ SymVirtual,
+ NumSymTypes
+} SYM_TYPE;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
+#define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64
+#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
+#define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64
+#else
+typedef struct _IMAGEHLP_SYMBOL
+{
+ DWORD SizeOfStruct;
+ DWORD Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ CHAR Name[1];
+} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
+
+typedef struct _IMAGEHLP_SYMBOLW
+{
+ DWORD SizeOfStruct;
+ DWORD Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ WCHAR Name[1];
+} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
+#endif
+
+typedef struct _IMAGEHLP_SYMBOL64
+{
+ DWORD SizeOfStruct;
+ DWORD64 Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ CHAR Name[1];
+} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
+
+typedef struct _IMAGEHLP_SYMBOLW64
+{
+ DWORD SizeOfStruct;
+ DWORD64 Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ WCHAR Name[1];
+} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
+#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
+#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
+#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
+#else
+typedef struct _IMAGEHLP_MODULE
+{
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ CHAR ModuleName[32];
+ CHAR ImageName[256];
+ CHAR LoadedImageName[256];
+} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
+
+typedef struct _IMAGEHLP_MODULEW
+{
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ WCHAR ModuleName[32];
+ WCHAR ImageName[256];
+ WCHAR LoadedImageName[256];
+} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
+#endif
+
+typedef struct _IMAGEHLP_MODULE64
+{
+ DWORD SizeOfStruct;
+ DWORD64 BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ CHAR ModuleName[32];
+ CHAR ImageName[256];
+ CHAR LoadedImageName[256];
+ CHAR LoadedPdbName[256];
+ DWORD CVSig;
+ CHAR CVData[MAX_PATH*3];
+ DWORD PdbSig;
+ GUID PdbSig70;
+ DWORD PdbAge;
+ BOOL PdbUnmatched;
+ BOOL DbgUnmatched;
+ BOOL LineNumbers;
+ BOOL GlobalSymbols;
+ BOOL TypeInfo;
+ BOOL SourceIndexed;
+ BOOL Publics;
+} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
+
+typedef struct _IMAGEHLP_MODULEW64
+{
+ DWORD SizeOfStruct;
+ DWORD64 BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ WCHAR ModuleName[32];
+ WCHAR ImageName[256];
+ WCHAR LoadedImageName[256];
+ WCHAR LoadedPdbName[256];
+ DWORD CVSig;
+ WCHAR CVData[MAX_PATH*3];
+ DWORD PdbSig;
+ GUID PdbSig70;
+ DWORD PdbAge;
+ BOOL PdbUnmatched;
+ BOOL DbgUnmatched;
+ BOOL LineNumbers;
+ BOOL GlobalSymbols;
+ BOOL TypeInfo;
+ BOOL SourceIndexed;
+ BOOL Publics;
+} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_LINE IMAGEHLP_LINE64
+#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
+#define IMAGEHLP_LINEW IMAGEHLP_LINEW64
+#define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
+#else
+typedef struct _IMAGEHLP_LINE
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PCHAR FileName;
+ DWORD Address;
+} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
+
+typedef struct _IMAGEHLP_LINEW
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PWSTR FileName;
+ DWORD Address;
+} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
+#endif
+
+typedef struct _IMAGEHLP_LINE64
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PCHAR FileName;
+ DWORD64 Address;
+} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
+
+typedef struct _IMAGEHLP_LINEW64
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PWSTR FileName;
+ DWORD64 Address;
+} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
+
+typedef struct _SOURCEFILE
+{
+ DWORD64 ModBase;
+ PCHAR FileName;
+} SOURCEFILE, *PSOURCEFILE;
+
+typedef struct _SOURCEFILEW
+{
+ DWORD64 ModBase;
+ PWSTR FileName;
+} SOURCEFILEW, *PSOURCEFILEW;
+
+#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
+#define CBA_SYMBOLS_UNLOADED 0x00000004
+#define CBA_DUPLICATE_SYMBOL 0x00000005
+#define CBA_READ_MEMORY 0x00000006
+#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
+#define CBA_SET_OPTIONS 0x00000008
+#define CBA_EVENT 0x00000010
+#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
+#define CBA_DEBUG_INFO 0x10000000
+
+typedef struct _IMAGEHLP_CBA_READ_MEMORY
+{
+ DWORD64 addr;
+ PVOID buf;
+ DWORD bytes;
+ DWORD *bytesread;
+} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
+
+enum
+{
+ sevInfo = 0,
+ sevProblem,
+ sevAttn,
+ sevFatal,
+ sevMax
+};
+
+#define EVENT_SRCSPEW_START 100
+#define EVENT_SRCSPEW 100
+#define EVENT_SRCSPEW_END 199
+
+typedef struct _IMAGEHLP_CBA_EVENT
+{
+ DWORD severity;
+ DWORD code;
+ PCHAR desc;
+ PVOID object;
+} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
+
+typedef struct _IMAGEHLP_CBA_EVENTW
+{
+ DWORD severity;
+ DWORD code;
+ PCWSTR desc;
+ PVOID object;
+} IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
+#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
+#else
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
+{
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD CheckSum;
+ DWORD TimeDateStamp;
+ CHAR FileName[MAX_PATH];
+ BOOLEAN Reparse;
+ HANDLE hFile;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+#endif
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
+{
+ DWORD SizeOfStruct;
+ DWORD64 BaseOfImage;
+ DWORD CheckSum;
+ DWORD TimeDateStamp;
+ CHAR FileName[MAX_PATH];
+ BOOLEAN Reparse;
+ HANDLE hFile;
+ DWORD Flags;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
+{
+ DWORD SizeOfStruct;
+ DWORD64 BaseOfImage;
+ DWORD CheckSum;
+ DWORD TimeDateStamp;
+ WCHAR FileName[MAX_PATH + 1];
+ BOOLEAN Reparse;
+ HANDLE hFile;
+ DWORD Flags;
+} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
+#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
+#else
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
+{
+ DWORD SizeOfStruct;
+ DWORD NumberOfDups;
+ PIMAGEHLP_SYMBOL Symbol;
+ DWORD SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
+#endif
+
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64
+{
+ DWORD SizeOfStruct;
+ DWORD NumberOfDups;
+ PIMAGEHLP_SYMBOL64 Symbol;
+ DWORD SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;
+
+#define SYMOPT_CASE_INSENSITIVE 0x00000001
+#define SYMOPT_UNDNAME 0x00000002
+#define SYMOPT_DEFERRED_LOADS 0x00000004
+#define SYMOPT_NO_CPP 0x00000008
+#define SYMOPT_LOAD_LINES 0x00000010
+#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
+#define SYMOPT_LOAD_ANYTHING 0x00000040
+#define SYMOPT_IGNORE_CVREC 0x00000080
+#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
+#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
+#define SYMOPT_EXACT_SYMBOLS 0x00000400
+#define SYMOPT_WILD_UNDERSCORE 0x00000800
+#define SYMOPT_USE_DEFAULTS 0x00001000
+/* latest SDK defines:
+#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
+#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
+*/
+#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
+#define SYMOPT_PUBLICS_ONLY 0x00004000
+#define SYMOPT_NO_PUBLICS 0x00008000
+#define SYMOPT_AUTO_PUBLICS 0x00010000
+#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
+#define SYMOPT_SECURE 0x00040000
+#define SYMOPT_NO_PROMPTS 0x00080000
+#define SYMOPT_OVERWRITE 0x00100000
+#define SYMOPT_IGNORE_IMAGEDIR 0x00200000
+
+#define SYMOPT_DEBUG 0x80000000
+
+typedef struct _IMAGEHLP_STACK_FRAME
+{
+ ULONG64 InstructionOffset;
+ ULONG64 ReturnOffset;
+ ULONG64 FrameOffset;
+ ULONG64 StackOffset;
+ ULONG64 BackingStoreOffset;
+ ULONG64 FuncTableEntry;
+ ULONG64 Params[4];
+ ULONG64 Reserved[5];
+ BOOL Virtual;
+ ULONG Reserved2;
+} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
+
+typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
+
+#define DBHHEADER_DEBUGDIRS 0x1
+typedef struct _DBGHELP_MODLOAD_DATA
+{
+ DWORD ssize;
+ DWORD ssig;
+ PVOID data;
+ DWORD size;
+ DWORD flags;
+} MODLOAD_DATA, *PMODLOAD_DATA;
+
+/*************************
+ * MiniDUMP *
+ *************************/
+
+#include <pshpack4.h>
+/* DebugHelp */
+
+#define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */
+#define MINIDUMP_VERSION (42899)
+
+typedef DWORD RVA;
+typedef ULONG64 RVA64;
+
+typedef enum _MINIDUMP_TYPE
+{
+ MiniDumpNormal = 0x0000,
+ MiniDumpWithDataSegs = 0x0001,
+ MiniDumpWithFullMemory = 0x0002,
+ MiniDumpWithHandleData = 0x0004,
+ MiniDumpFilterMemory = 0x0008,
+ MiniDumpScanMemory = 0x0010,
+ MiniDumpWithUnloadedModules = 0x0020,
+ MiniDumpWithIndirectlyReferencedMemory = 0x0040,
+ MiniDumpFilterModulePaths = 0x0080,
+ MiniDumpWithProcessThreadData = 0x0100,
+ MiniDumpWithPrivateReadWriteMemory = 0x0200,
+ MiniDumpWithoutOptionalData = 0x0400,
+ MiniDumpWithFullMemoryInfo = 0x0800,
+ MiniDumpWithThreadInfo = 0x1000,
+ MiniDumpWithCodeSegs = 0x2000
+} MINIDUMP_TYPE;
+
+typedef enum _MINIDUMP_CALLBACK_TYPE
+{
+ ModuleCallback,
+ ThreadCallback,
+ ThreadExCallback,
+ IncludeThreadCallback,
+ IncludeModuleCallback,
+ MemoryCallback,
+} MINIDUMP_CALLBACK_TYPE;
+
+typedef struct _MINIDUMP_THREAD_CALLBACK
+{
+ ULONG ThreadId;
+ HANDLE ThreadHandle;
+ CONTEXT Context;
+ ULONG SizeOfContext;
+ ULONG64 StackBase;
+ ULONG64 StackEnd;
+} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
+
+typedef struct _MINIDUMP_THREAD_EX_CALLBACK
+{
+ ULONG ThreadId;
+ HANDLE ThreadHandle;
+ CONTEXT Context;
+ ULONG SizeOfContext;
+ ULONG64 StackBase;
+ ULONG64 StackEnd;
+ ULONG64 BackingStoreBase;
+ ULONG64 BackingStoreEnd;
+} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
+
+typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
+{
+ ULONG ThreadId;
+} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
+
+typedef enum _THREAD_WRITE_FLAGS
+{
+ ThreadWriteThread = 0x0001,
+ ThreadWriteStack = 0x0002,
+ ThreadWriteContext = 0x0004,
+ ThreadWriteBackingStore = 0x0008,
+ ThreadWriteInstructionWindow = 0x0010,
+ ThreadWriteThreadData = 0x0020,
+ ThreadWriteThreadInfo = 0x0040
+} THREAD_WRITE_FLAGS;
+
+typedef struct _MINIDUMP_MODULE_CALLBACK
+{
+ PWCHAR FullPath;
+ ULONG64 BaseOfImage;
+ ULONG SizeOfImage;
+ ULONG CheckSum;
+ ULONG TimeDateStamp;
+ VS_FIXEDFILEINFO VersionInfo;
+ PVOID CvRecord;
+ ULONG SizeOfCvRecord;
+ PVOID MiscRecord;
+ ULONG SizeOfMiscRecord;
+} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
+
+typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
+{
+ ULONG64 BaseOfImage;
+} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
+
+typedef enum _MODULE_WRITE_FLAGS
+{
+ ModuleWriteModule = 0x0001,
+ ModuleWriteDataSeg = 0x0002,
+ ModuleWriteMiscRecord = 0x0004,
+ ModuleWriteCvRecord = 0x0008,
+ ModuleReferencedByMemory = 0x0010,
+ ModuleWriteTlsData = 0x0020,
+ ModuleWriteCodeSegs = 0x0040,
+} MODULE_WRITE_FLAGS;
+
+typedef struct _MINIDUMP_CALLBACK_INPUT
+{
+ ULONG ProcessId;
+ HANDLE ProcessHandle;
+ ULONG CallbackType;
+ union
+ {
+ MINIDUMP_THREAD_CALLBACK Thread;
+ MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
+ MINIDUMP_MODULE_CALLBACK Module;
+ MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
+ MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
+ } DUMMYUNIONNAME;
+} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
+
+typedef struct _MINIDUMP_CALLBACK_OUTPUT
+{
+ union
+ {
+ ULONG ModuleWriteFlags;
+ ULONG ThreadWriteFlags;
+ struct
+ {
+ ULONG64 MemoryBase;
+ ULONG MemorySize;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
+
+typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
+
+typedef struct _MINIDUMP_CALLBACK_INFORMATION
+{
+ MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
+ void* CallbackParam;
+} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
+
+typedef struct _MINIDUMP_LOCATION_DESCRIPTOR
+{
+ ULONG DataSize;
+ RVA Rva;
+} MINIDUMP_LOCATION_DESCRIPTOR;
+
+typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64
+{
+ ULONG64 DataSize;
+ RVA64 Rva;
+} MINIDUMP_LOCATION_DESCRIPTOR64;
+
+typedef struct _MINIDUMP_DIRECTORY
+{
+ ULONG StreamType;
+ MINIDUMP_LOCATION_DESCRIPTOR Location;
+} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
+
+typedef struct _MINIDUMP_EXCEPTION
+{
+ ULONG ExceptionCode;
+ ULONG ExceptionFlags;
+ ULONG64 ExceptionRecord;
+ ULONG64 ExceptionAddress;
+ ULONG NumberParameters;
+ ULONG __unusedAlignment;
+ ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
+
+typedef struct _MINIDUMP_EXCEPTION_INFORMATION
+{
+ DWORD ThreadId;
+ PEXCEPTION_POINTERS ExceptionPointers;
+ BOOL ClientPointers;
+} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
+
+typedef struct MINIDUMP_EXCEPTION_STREAM
+{
+ ULONG ThreadId;
+ ULONG __alignment;
+ MINIDUMP_EXCEPTION ExceptionRecord;
+ MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
+
+typedef struct _MINIDUMP_HEADER
+{
+ DWORD Signature;
+ DWORD Version;
+ DWORD NumberOfStreams;
+ RVA StreamDirectoryRva;
+ DWORD CheckSum;
+ union
+ {
+ DWORD Reserved;
+ DWORD TimeDateStamp;
+ } DUMMYUNIONNAME;
+ ULONG64 Flags;
+} MINIDUMP_HEADER, *PMINIDUMP_HEADER;
+
+typedef struct _MINIDUMP_MEMORY_DESCRIPTOR
+{
+ ULONG64 StartOfMemoryRange;
+ MINIDUMP_LOCATION_DESCRIPTOR Memory;
+} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
+
+typedef struct _MINIDUMP_MEMORY_LIST
+{
+ ULONG NumberOfMemoryRanges;
+ MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[1]; /* FIXME: 0-sized array not supported */
+} MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
+
+#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
+#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
+
+typedef struct _MINIDUMP_MISC_INFO
+{
+ ULONG SizeOfInfo;
+ ULONG Flags1;
+ ULONG ProcessId;
+ ULONG ProcessCreateTime;
+ ULONG ProcessUserTime;
+ ULONG ProcessKernelTime;
+} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
+
+typedef struct _MINIDUMP_MODULE
+{
+ ULONG64 BaseOfImage;
+ ULONG SizeOfImage;
+ ULONG CheckSum;
+ ULONG TimeDateStamp;
+ RVA ModuleNameRva;
+ VS_FIXEDFILEINFO VersionInfo;
+ MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
+ MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
+ ULONG64 Reserved0;
+ ULONG64 Reserved1;
+} MINIDUMP_MODULE, *PMINIDUMP_MODULE;
+
+typedef struct _MINIDUMP_MODULE_LIST
+{
+ ULONG NumberOfModules;
+ MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */
+} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
+
+typedef struct _MINIDUMP_STRING
+{
+ ULONG Length;
+ WCHAR Buffer[1]; /* FIXME: O-sized array not supported */
+} MINIDUMP_STRING, *PMINIDUMP_STRING;
+
+typedef struct _MINIDUMP_SYSTEM_INFO
+{
+ USHORT ProcessorArchitecture;
+ USHORT ProcessorLevel;
+ USHORT ProcessorRevision;
+ union
+ {
+ USHORT Reserved0;
+ struct
+ {
+ UCHAR NumberOfProcessors;
+ UCHAR ProductType;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+
+ ULONG MajorVersion;
+ ULONG MinorVersion;
+ ULONG BuildNumber;
+ ULONG PlatformId;
+
+ RVA CSDVersionRva;
+ union
+ {
+ ULONG Reserved1;
+ struct
+ {
+ USHORT SuiteMask;
+ USHORT Reserved2;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME1;
+ union _CPU_INFORMATION
+ {
+ struct
+ {
+ ULONG VendorId[3];
+ ULONG VersionInformation;
+ ULONG FeatureInformation;
+ ULONG AMDExtendedCpuFeatures;
+ } X86CpuInfo;
+ struct
+ {
+ ULONG64 ProcessorFeatures[2];
+ } OtherCpuInfo;
+ } Cpu;
+
+} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
+
+typedef struct _MINIDUMP_THREAD
+{
+ ULONG ThreadId;
+ ULONG SuspendCount;
+ ULONG PriorityClass;
+ ULONG Priority;
+ ULONG64 Teb;
+ MINIDUMP_MEMORY_DESCRIPTOR Stack;
+ MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+} MINIDUMP_THREAD, *PMINIDUMP_THREAD;
+
+typedef struct _MINIDUMP_THREAD_LIST
+{
+ ULONG NumberOfThreads;
+ MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */
+} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
+
+typedef struct _MINIDUMP_USER_STREAM
+{
+ ULONG Type;
+ ULONG BufferSize;
+ void* Buffer;
+} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
+
+typedef struct _MINIDUMP_USER_STREAM_INFORMATION
+{
+ ULONG UserStreamCount;
+ PMINIDUMP_USER_STREAM UserStreamArray;
+} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
+
+typedef enum _MINIDUMP_STREAM_TYPE
+{
+ UnusedStream = 0,
+ ReservedStream0 = 1,
+ ReservedStream1 = 2,
+ ThreadListStream = 3,
+ ModuleListStream = 4,
+ MemoryListStream = 5,
+ ExceptionStream = 6,
+ SystemInfoStream = 7,
+ ThreadExListStream = 8,
+ Memory64ListStream = 9,
+ CommentStreamA = 10,
+ CommentStreamW = 11,
+ HandleDataStream = 12,
+ FunctionTableStream = 13,
+ UnloadedModuleListStream = 14,
+ MiscInfoStream = 15,
+ MemoryInfoListStream = 16,
+ ThreadInfoListStream = 17,
+
+ LastReservedStream = 0xffff
+} MINIDUMP_STREAM_TYPE;
+
+BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
+ const PMINIDUMP_EXCEPTION_INFORMATION,
+ const PMINIDUMP_USER_STREAM_INFORMATION,
+ const PMINIDUMP_CALLBACK_INFORMATION);
+BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
+ ULONG*);
+
+#include <poppack.h>
+
+/*************************
+ * MODULE handling *
+ *************************/
+
+/* flags for SymLoadModuleEx */
+#define SLMFLAG_VIRTUAL 0x1
+#define SLMFLAG_NO_SYMBOLS 0x4
+
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
+BOOL WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
+BOOL WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
+BOOL WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
+BOOL WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);
+BOOL WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
+BOOL WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);
+DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
+DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD);
+DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
+ PMODLOAD_DATA, DWORD);
+DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
+ PMODLOAD_DATA, DWORD);
+BOOL WINAPI SymUnloadModule64(HANDLE, DWORD64);
+
+/*************************
+ * Symbol Handling *
+ *************************/
+
+#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
+#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */
+#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */
+#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */
+#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */
+#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */
+#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */
+#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */
+
+#define SYMFLAG_VALUEPRESENT 0x00000001
+#define SYMFLAG_REGISTER 0x00000008
+#define SYMFLAG_REGREL 0x00000010
+#define SYMFLAG_FRAMEREL 0x00000020
+#define SYMFLAG_PARAMETER 0x00000040
+#define SYMFLAG_LOCAL 0x00000080
+#define SYMFLAG_CONSTANT 0x00000100
+#define SYMFLAG_EXPORT 0x00000200
+#define SYMFLAG_FORWARDER 0x00000400
+#define SYMFLAG_FUNCTION 0x00000800
+#define SYMFLAG_VIRTUAL 0x00001000
+#define SYMFLAG_THUNK 0x00002000
+#define SYMFLAG_TLSREL 0x00004000
+#define SYMFLAG_SLOT 0x00008000
+
+#define MAX_SYM_NAME 2000
+
+typedef struct _SYMBOL_INFO
+{
+ ULONG SizeOfStruct;
+ ULONG TypeIndex;
+ ULONG64 Reserved[2];
+ ULONG info; /* sdk states info, while MSDN says it's Index... */
+ ULONG Size;
+ ULONG64 ModBase;
+ ULONG Flags;
+ ULONG64 Value;
+ ULONG64 Address;
+ ULONG Register;
+ ULONG Scope;
+ ULONG Tag;
+ ULONG NameLen;
+ ULONG MaxNameLen;
+ CHAR Name[1];
+} SYMBOL_INFO, *PSYMBOL_INFO;
+
+typedef struct _SYMBOL_INFOW
+{
+ ULONG SizeOfStruct;
+ ULONG TypeIndex;
+ ULONG64 Reserved[2];
+ ULONG Index;
+ ULONG Size;
+ ULONG64 ModBase;
+ ULONG Flags;
+ ULONG64 Value;
+ ULONG64 Address;
+ ULONG Register;
+ ULONG Scope;
+ ULONG Tag;
+ ULONG NameLen;
+ ULONG MaxNameLen;
+ WCHAR Name[1];
+} SYMBOL_INFOW, *PSYMBOL_INFOW;
+
+typedef struct _SYMBOL_INFO_PACKAGE
+{
+ SYMBOL_INFO si;
+ CHAR name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
+
+typedef struct _SYMBOL_INFO_PACKAGEW
+{
+ SYMBOL_INFOW si;
+ WCHAR name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
+
+typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
+{
+ TI_GET_SYMTAG,
+ TI_GET_SYMNAME,
+ TI_GET_LENGTH,
+ TI_GET_TYPE,
+ TI_GET_TYPEID,
+ TI_GET_BASETYPE,
+ TI_GET_ARRAYINDEXTYPEID,
+ TI_FINDCHILDREN,
+ TI_GET_DATAKIND,
+ TI_GET_ADDRESSOFFSET,
+ TI_GET_OFFSET,
+ TI_GET_VALUE,
+ TI_GET_COUNT,
+ TI_GET_CHILDRENCOUNT,
+ TI_GET_BITPOSITION,
+ TI_GET_VIRTUALBASECLASS,
+ TI_GET_VIRTUALTABLESHAPEID,
+ TI_GET_VIRTUALBASEPOINTEROFFSET,
+ TI_GET_CLASSPARENTID,
+ TI_GET_NESTED,
+ TI_GET_SYMINDEX,
+ TI_GET_LEXICALPARENT,
+ TI_GET_ADDRESS,
+ TI_GET_THISADJUST,
+ TI_GET_UDTKIND,
+ TI_IS_EQUIV_TO,
+ TI_GET_CALLING_CONVENTION,
+} IMAGEHLP_SYMBOL_TYPE_INFO;
+
+#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001
+#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002
+typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
+{
+ ULONG SizeOfStruct;
+ ULONG Flags;
+ ULONG NumIds;
+ PULONG TypeIds;
+ ULONG64 TagFilter;
+ ULONG NumReqs;
+ IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
+ PULONG_PTR ReqOffsets;
+ PULONG ReqSizes;
+ ULONG_PTR ReqStride;
+ ULONG_PTR BufferSize;
+ PVOID Buffer;
+ ULONG EntriesMatched;
+ ULONG EntriesFilled;
+ ULONG64 TagsFound;
+ ULONG64 AllReqsValid;
+ ULONG NumReqsValid;
+ PULONG64 ReqsValid;
+} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
+
+typedef struct _TI_FINDCHILDREN_PARAMS
+{
+ ULONG Count;
+ ULONG Start;
+ ULONG ChildId[1];
+} TI_FINDCHILDREN_PARAMS;
+
+#define UNDNAME_COMPLETE (0x0000)
+#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
+#define UNDNAME_NO_MS_KEYWORDS (0x0002)
+#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
+#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
+#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
+#define UNDNAME_NO_MS_THISTYPE (0x0020)
+#define UNDNAME_NO_CV_THISTYPE (0x0040)
+#define UNDNAME_NO_THISTYPE (0x0060)
+#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
+#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
+#define UNDNAME_NO_MEMBER_TYPE (0x0200)
+#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
+#define UNDNAME_32_BIT_DECODE (0x0800)
+#define UNDNAME_NAME_ONLY (0x1000)
+#define UNDNAME_NO_ARGUMENTS (0x2000)
+#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
+
+#define SYMSEARCH_MASKOBJS 0x01
+#define SYMSEARCH_RECURSE 0x02
+#define SYMSEARCH_GLOBALSONLY 0x04
+
+BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
+BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
+BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
+BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
+BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
+BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);
+BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO);
+BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW);
+BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO);
+BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW);
+BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO);
+BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW);
+BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64);
+BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);
+BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64);
+BOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID);
+BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
+ PVOID);
+BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,
+ PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
+BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID);
+BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID);
+BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
+BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
+BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
+BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
+BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD);
+BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL);
+BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL);
+BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL);
+BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
+BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD);
+DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
+DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD);
+BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
+BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
+BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
+BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
+BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD);
+BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD);
+BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD);
+BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD);
+
+/*************************
+ * Source Files *
+ *************************/
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
+
+BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK,
+ PVOID);
+BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID);
+BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64);
+BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64);
+BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64);
+ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG);
+BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD);
+BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD);
+BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*);
+BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*);
+BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD);
+BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD);
+BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD);
+BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD);
+
+typedef struct _SRCCODEINFO
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD64 ModBase;
+ CHAR Obj[MAX_PATH+1];
+ CHAR FileName[MAX_PATH+1];
+ DWORD LineNumber;
+ DWORD64 Address;
+} SRCCODEINFO, *PSRCCODEINFO;
+
+typedef struct _SRCCODEINFOW
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD64 ModBase;
+ WCHAR Obj[MAX_PATH+1];
+ WCHAR FileName[MAX_PATH+1];
+ DWORD LineNumber;
+ DWORD64 Address;
+} SRCCODEINFOW, *PSRCCODEINFOW;
+
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
+BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);
+BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID);
+BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID);
+BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID);
+
+/*************************
+ * File & image handling *
+ *************************/
+BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL);
+BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL);
+BOOL WINAPI SymCleanup(HANDLE);
+
+HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR);
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
+HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
+HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
+HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
+HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID);
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID);
+BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+ PSTR, PFINDFILEINPATHCALLBACK, PVOID);
+BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+ PSTR, PFINDFILEINPATHCALLBACK, PVOID);
+BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
+ PWSTR, PFINDFILEINPATHCALLBACKW, PVOID);
+HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR);
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
+HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
+HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
+HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
+HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
+PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
+PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
+ PIMAGE_SECTION_HEADER *);
+PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
+PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
+PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
+BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
+BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD);
+BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR);
+BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR);
+DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
+BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
+BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR);
+BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR);
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID);
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
+BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID);
+BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID);
+BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*);
+BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*);
+PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);
+PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR);
+PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);
+PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);
+#define hdBase 0
+#define hdSym 1
+#define hdSrc 2
+#define hdMax 3
+
+/*************************
+ * Context management *
+ *************************/
+BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
+
+
+/*************************
+ * Stack management *
+ *************************/
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define KDHELP KDHELP64
+#define PKDHELP PKDHELP64
+#else
+typedef struct _KDHELP
+{
+ DWORD Thread;
+ DWORD ThCallbackStack;
+ DWORD NextCallback;
+ DWORD FramePointer;
+ DWORD KiCallUserMode;
+ DWORD KeUserCallbackDispatcher;
+ DWORD SystemRangeStart;
+} KDHELP, *PKDHELP;
+#endif
+
+typedef struct _KDHELP64
+{
+ DWORD64 Thread;
+ DWORD ThCallbackStack;
+ DWORD ThCallbackBStore;
+ DWORD NextCallback;
+ DWORD FramePointer;
+ DWORD64 KiCallUserMode;
+ DWORD64 KeUserCallbackDispatcher;
+ DWORD64 SystemRangeStart;
+ DWORD64 Reserved[8];
+} KDHELP64, *PKDHELP64;
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+#define STACKFRAME STACKFRAME64
+#define LPSTACKFRAME LPSTACKFRAME64
+#else
+typedef struct _STACKFRAME
+{
+ ADDRESS AddrPC;
+ ADDRESS AddrReturn;
+ ADDRESS AddrFrame;
+ ADDRESS AddrStack;
+ PVOID FuncTableEntry;
+ DWORD Params[4];
+ BOOL Far;
+ BOOL Virtual;
+ DWORD Reserved[3];
+ KDHELP KdHelp;
+ ADDRESS AddrBStore;
+} STACKFRAME, *LPSTACKFRAME;
+#endif
+
+typedef struct _STACKFRAME64
+{
+ ADDRESS64 AddrPC;
+ ADDRESS64 AddrReturn;
+ ADDRESS64 AddrFrame;
+ ADDRESS64 AddrStack;
+ ADDRESS64 AddrBStore;
+ PVOID FuncTableEntry;
+ DWORD64 Params[4];
+ BOOL Far;
+ BOOL Virtual;
+ DWORD64 Reserved[3];
+ KDHELP64 KdHelp;
+} STACKFRAME64, *LPSTACKFRAME64;
+
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)
+ (HANDLE, DWORD64, PVOID, DWORD, PDWORD);
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
+typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
+typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
+BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,
+ PREAD_PROCESS_MEMORY_ROUTINE64,
+ PFUNCTION_TABLE_ACCESS_ROUTINE64,
+ PGET_MODULE_BASE_ROUTINE64,
+ PTRANSLATE_ADDRESS_ROUTINE64);
+
+PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
+
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);
+
+BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);
+
+/*************************
+ * Version, global stuff *
+ *************************/
+
+#define API_VERSION_NUMBER 9
+
+typedef struct API_VERSION
+{
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ USHORT Revision;
+ USHORT Reserved;
+} API_VERSION, *LPAPI_VERSION;
+
+LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
+LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
+
+typedef struct _IMAGE_DEBUG_INFORMATION
+{
+ LIST_ENTRY List;
+ DWORD ReservedSize;
+ PVOID ReservedMappedBase;
+ USHORT ReservedMachine;
+ USHORT ReservedCharacteristics;
+ DWORD ReservedCheckSum;
+ DWORD ImageBase;
+ DWORD SizeOfImage;
+ DWORD ReservedNumberOfSections;
+ PIMAGE_SECTION_HEADER ReservedSections;
+ DWORD ReservedExportedNamesSize;
+ PSTR ReservedExportedNames;
+ DWORD ReservedNumberOfFunctionTableEntries;
+ PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
+ DWORD ReservedLowestFunctionStartingAddress;
+ DWORD ReservedHighestFunctionEndingAddress;
+ DWORD ReservedNumberOfFpoTableEntries;
+ PFPO_DATA ReservedFpoTableEntries;
+ DWORD SizeOfCoffSymbols;
+ PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
+ DWORD ReservedSizeOfCodeViewSymbols;
+ PVOID ReservedCodeViewSymbols;
+ PSTR ImageFilePath;
+ PSTR ImageFileName;
+ PSTR ReservedDebugFilePath;
+ DWORD ReservedTimeDateStamp;
+ BOOL ReservedRomImage;
+ PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
+ DWORD ReservedNumberOfDebugDirectories;
+ DWORD ReservedOriginalFunctionTableBaseAddress;
+ DWORD Reserved[ 2 ];
+} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
+
+
+PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);
+
+BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
+
+DWORD WINAPI SymGetOptions(void);
+DWORD WINAPI SymSetOptions(DWORD);
+
+BOOL WINAPI SymSetParentWindow(HWND);
+
+/*************************
+ * Version, global stuff *
+ *************************/
+
+typedef BOOL (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
+typedef BOOL (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
+typedef BOOL (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR);
+typedef BOOL (WINAPI* PSYMBOLSERVEROPENPROC)(void);
+typedef BOOL (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);
+typedef BOOL (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
+typedef BOOL (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);
+typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);
+typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR);
+typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR);
+typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);
+
+#define SSRVOPT_CALLBACK 0x0001
+#define SSRVOPT_DWORD 0x0002
+#define SSRVOPT_DWORDPTR 0x0004
+#define SSRVOPT_GUIDPTR 0x0008
+#define SSRVOPT_OLDGUIDPTR 0x0010
+#define SSRVOPT_UNATTENDED 0x0020
+#define SSRVOPT_NOCOPY 0x0040
+#define SSRVOPT_PARENTWIN 0x0080
+#define SSRVOPT_PARAMTYPE 0x0100
+#define SSRVOPT_SECURE 0x0200
+#define SSRVOPT_TRACE 0x0400
+#define SSRVOPT_SETCONTEXT 0x0800
+#define SSRVOPT_PROXY 0x1000
+#define SSRVOPT_DOWNSTREAM_STORE 0x2000
+#define SSRVOPT_RESET ((ULONG_PTR)-1)
+
+#define SSRVACTION_TRACE 1
+#define SSRVACTION_QUERYCANCEL 2
+#define SSRVACTION_EVENT 3
+
+/* 32-bit functions */
+
+#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
+
+#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
+#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
+#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
+#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
+#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
+#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
+#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
+#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
+#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACKW64
+#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
+
+#define EnumerateLoadedModules EnumerateLoadedModules64
+#define StackWalk StackWalk64
+#define SymEnumerateModules SymEnumerateModules64
+#define SymEnumerateSymbols SymEnumerateSymbols64
+#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
+#define SymFunctionTableAccess SymFunctionTableAccess64
+#define SymGetLineFromAddr SymGetLineFromAddr64
+#define SymGetLineFromAddrW SymGetLineFromAddrW64
+#define SymGetLineFromName SymGetLineFromName64
+#define SymGetLineNext SymGetLineNext64
+#define SymGetLineNextW SymGetLineNextW64
+#define SymGetLinePrev SymGetLinePrev64
+#define SymGetLinePrevW SymGetLinePrevW64
+#define SymGetModuleBase SymGetModuleBase64
+#define SymGetModuleInfo SymGetModuleInfo64
+#define SymGetModuleInfoW SymGetModuleInfoW64
+#define SymGetSymFromAddr SymGetSymFromAddr64
+#define SymGetSymFromName SymGetSymFromName64
+#define SymGetSymNext SymGetSymNext64
+#define SymGetSymNextW SymGetSymNextW64
+#define SymGetSymPrev SymGetSymPrev64
+#define SymGetSymPrevW SymGetSymPrevW64
+#define SymLoadModule SymLoadModule64
+#define SymRegisterCallback SymRegisterCallback64
+#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
+#define SymUnDName SymUnDName64
+#define SymUnloadModule SymUnloadModule64
+
+#else
+
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE, DWORD, PVOID, DWORD, PDWORD);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
+
+BOOL WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
+BOOL WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);
+BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
+BOOL WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
+BOOL WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID);
+PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD);
+BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
+BOOL WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW);
+BOOL WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE);
+BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
+BOOL WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW);
+BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
+BOOL WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW);
+DWORD WINAPI SymGetModuleBase(HANDLE, DWORD);
+BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
+BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
+BOOL WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
+BOOL WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL);
+BOOL WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
+BOOL WINAPI SymGetSymNextW(HANDLE, PIMAGEHLP_SYMBOLW);
+BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
+BOOL WINAPI SymGetSymPrevW(HANDLE, PIMAGEHLP_SYMBOLW);
+DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);
+BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
+BOOL WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);
+BOOL WINAPI SymRefreshModuleList(HANDLE);
+BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
+BOOL WINAPI SymUnloadModule(HANDLE, DWORD);
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DBGHELP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl
new file mode 100644
index 00000000..4e2284ee
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbinit.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a8b-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBInitialize : IUnknown {
+ [local] HRESULT Initialize();
+ [call_as(Initialize)] HRESULT RemoteInitialize( [out] IErrorInfo **ppErrorInfoRem );
+ [local] HRESULT Uninitialize();
+ [call_as(Uninitialize)] HRESULT RemoteUninitialize( [out] IErrorInfo **ppErrorInfoRem );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl
new file mode 100644
index 00000000..496cea75
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbprop.idl
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a8a-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IDBProperties : IUnknown {
+ [local] HRESULT GetProperties(
+ [in] ULONG cPropertyIDSets,
+ [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+ [in, out] ULONG *pcPropertySets,
+ [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets);
+
+ [call_as(GetProperties)] HRESULT RemoteGetProperties(
+ [in] ULONG cPropertyIDSets,
+ [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+ [in, out] ULONG *pcPropertySets,
+ [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local] HRESULT GetPropertyInfo(
+ [in] ULONG cPropertyIDSets,
+ [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+ [in, out] ULONG *pcPropertyInfoSets,
+ [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+ [out, annotation("__deref_out_z_opt")] OLECHAR **ppDescBuffer);
+
+ [call_as(GetPropertyInfo)] HRESULT RemoteGetPropertyInfo(
+ [in] ULONG cPropertyIDSets,
+ [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+ [in, out] ULONG *pcPropertyInfoSets,
+ [out, size_is(,*pcPropertyInfoSets)] DBPROPINFOSET **prgPropertyInfoSets,
+ [in, out] ULONG *pcOffsets,
+ [out, size_is(,*pcOffsets)] DBBYTEOFFSET **prgDescOffsets,
+ [in, out] ULONG *pcbDescBuffer,
+ [in, out, unique, size_is(,*pcbDescBuffer)] OLECHAR **ppDescBuffer,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local] HRESULT SetProperties(
+ [in] ULONG cPropertySets,
+ [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);
+
+ [call_as(SetProperties)] HRESULT RemoteSetProperties(
+ [in] ULONG cPropertySets,
+ [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+ [in] ULONG cTotalProps,
+ [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+ [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl
new file mode 100644
index 00000000..68f61110
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbs.idl
@@ -0,0 +1,740 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+typedef DWORD DBKIND;
+
+enum DBKINDENUM {
+ DBKIND_GUID_NAME,
+ DBKIND_GUID_PROPID,
+ DBKIND_NAME,
+ DBKIND_PGUID_NAME,
+ DBKIND_PGUID_PROPID,
+ DBKIND_PROPID,
+ DBKIND_GUID,
+};
+
+typedef struct tagDBID {
+ [switch_type(DBKIND), switch_is(eKind)] union
+ {
+ [case(DBKIND_GUID_NAME, DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_NAME, DBKIND_PROPID)]
+ GUID guid;
+ [case(DBKIND_PGUID_NAME, DBKIND_PGUID_PROPID)]
+ GUID *pguid;
+ [default]
+ ;
+ } uGuid;
+ DBKIND eKind;
+ [switch_type(DBKIND), switch_is(eKind)] union
+ {
+ [case(DBKIND_GUID_NAME, DBKIND_NAME, DBKIND_PGUID_NAME)]
+ LPOLESTR pwszName;
+ [case(DBKIND_GUID_PROPID, DBKIND_GUID, DBKIND_PGUID_PROPID, DBKIND_PROPID)]
+ ULONG ulPropid;
+ [default]
+ ;
+ } uName;
+} DBID;
+
+typedef struct tagDB_NUMERIC {
+ BYTE precision;
+ BYTE scale;
+ BYTE sign;
+ BYTE val[16];
+} DB_NUMERIC;
+
+typedef DWORD DBPROPID;
+
+typedef struct tagDBPROPIDSET {
+ [size_is(cPropertyIDs)] DBPROPID *rgPropertyIDs;
+ ULONG cPropertyIDs;
+ GUID guidPropertySet;
+} DBPROPIDSET;
+
+typedef DWORD DBPROPOPTIONS;
+
+enum DBPROPOPTIONENUM {
+ DBPROPOPTIONS_REQUIRED = 0,
+ DBPROPOPTIONS_SETIFCHEAP = 1,
+ DBPROPOPTIONS_OPTIONAL = 1,
+};
+
+typedef DWORD DBPROPSTATUS;
+
+typedef struct tagDBPROP {
+ DBPROPID dwPropertyID;
+ DBPROPOPTIONS dwOptions;
+ DBPROPSTATUS dwStatus;
+ DBID colid;
+ VARIANT vValue;
+} DBPROP;
+
+typedef struct tagDBPROPSET {
+ [size_is(cProperties)] DBPROP *rgProperties;
+ ULONG cProperties;
+ GUID guidPropertySet;
+} DBPROPSET;
+
+typedef DWORD DBPROPFLAGS;
+
+typedef struct tagDBPROPINFO {
+ LPOLESTR pwszDescription;
+ DBPROPID dwPropertyID;
+ DBPROPFLAGS dwFlags;
+ VARTYPE vtType;
+ VARIANT vValues;
+} DBPROPINFO;
+
+typedef DBPROPINFO *PDBPROPINFO;
+
+typedef struct tagDBPROPINFOSET {
+ [size_is(cPropertyInfos)] PDBPROPINFO rgPropertyInfos;
+ ULONG cPropertyInfos;
+ GUID guidPropertySet;
+} DBPROPINFOSET;
+
+typedef DWORD DBBINDURLFLAG;
+typedef DWORD DBBINDURLSTATUS;
+
+typedef struct tagDBIMPLICITSESSION
+{
+ IUnknown *pUnkOuter;
+ IID *piid;
+ IUnknown *pSession;
+} DBIMPLICITSESSION;
+
+typedef WORD DBTYPE;
+
+enum DBTYPEENUM
+{
+ DBTYPE_EMPTY = 0,
+ DBTYPE_NULL = 1,
+ DBTYPE_I2 = 2,
+ DBTYPE_I4 = 3,
+ DBTYPE_R4 = 4,
+ DBTYPE_R8 = 5,
+ DBTYPE_CY = 6,
+ DBTYPE_DATE = 7,
+ DBTYPE_BSTR = 8,
+ DBTYPE_IDISPATCH = 9,
+ DBTYPE_ERROR = 10,
+ DBTYPE_BOOL = 11,
+ DBTYPE_VARIANT = 12,
+ DBTYPE_IUNKNOWN = 13,
+ DBTYPE_DECIMAL = 14,
+ DBTYPE_I1 = 16,
+ DBTYPE_UI1 = 17,
+ DBTYPE_UI2 = 18,
+ DBTYPE_UI4 = 19,
+ DBTYPE_I8 = 20,
+ DBTYPE_UI8 = 21,
+ DBTYPE_GUID = 72,
+ DBTYPE_BYTES = 128,
+ DBTYPE_STR = 129,
+ DBTYPE_WSTR = 130,
+ DBTYPE_NUMERIC = 131,
+ DBTYPE_UDT = 132,
+ DBTYPE_DBDATE = 133,
+ DBTYPE_DBTIME = 134,
+ DBTYPE_DBTIMESTAMP = 135,
+
+ DBTYPE_VECTOR = 0x1000,
+ DBTYPE_ARRAY = 0x2000,
+ DBTYPE_BYREF = 0x4000,
+ DBTYPE_RESERVED = 0x8000
+};
+
+enum DBTYPEENUM15
+{
+ DBTYPE_HCHAPTER = 136
+};
+
+enum DBTYPEENUM20
+{
+ DBTYPE_FILETIME = 64,
+ DBTYPE_PROPVARIANT = 138,
+ DBTYPE_VARNUMERIC = 139
+};
+
+typedef DWORD DBSTATUS;
+
+enum DBSTATUSENUM
+{
+ DBSTATUS_S_OK = 0,
+ DBSTATUS_E_BADACCESSOR = 1,
+ DBSTATUS_E_CANTCONVERTVALUE = 2,
+ DBSTATUS_S_ISNULL = 3,
+ DBSTATUS_S_TRUNCATED = 4,
+ DBSTATUS_E_SIGNMISMATCH = 5,
+ DBSTATUS_E_DATAOVERFLOW = 6,
+ DBSTATUS_E_CANTCREATE = 7,
+ DBSTATUS_E_UNAVAILABLE = 8,
+ DBSTATUS_E_PERMISSIONDENIED = 9,
+ DBSTATUS_E_INTEGRITYVIOLATION = 10,
+ DBSTATUS_E_SCHEMAVIOLATION = 11,
+ DBSTATUS_E_BADSTATUS = 12,
+ DBSTATUS_S_DEFAULT = 13
+};
+
+enum DBPROPENUM
+{
+ DBPROP_ABORTPRESERVE = 0x00000002,
+ DBPROP_ACTIVESESSIONS = 0x00000003,
+ DBPROP_ASYNCTXNCOMMIT = 0x00000004,
+ DBPROP_AUTH_CACHE_AUTHINFO = 0x00000005,
+ DBPROP_AUTH_ENCRYPT_PASSWORD = 0x00000006,
+ DBPROP_AUTH_INTEGRATED = 0x00000007,
+ DBPROP_AUTH_MASK_PASSWORD = 0x00000008,
+ DBPROP_AUTH_PASSWORD = 0x00000009,
+ DBPROP_AUTH_PERSIST_ENCRYPTED = 0x0000000a,
+ DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO = 0x0000000b,
+ DBPROP_AUTH_USERID = 0x0000000c,
+ DBPROP_BLOCKINGSTORAGEOBJECTS = 0x0000000d,
+ DBPROP_BOOKMARKS = 0x0000000e,
+ DBPROP_BOOKMARKSKIPPED = 0x0000000f,
+ DBPROP_BOOKMARKTYPE = 0x00000010,
+ DBPROP_CACHEDEFERRED = 0x00000011,
+ DBPROP_CANFETCHBACKWARDS = 0x00000012,
+ DBPROP_CANHOLDROWS = 0x00000013,
+ DBPROP_CANSCROLLBACKWARDS = 0x00000015,
+ DBPROP_CATALOGLOCATION = 0x00000016,
+ DBPROP_CATALOGTERM = 0x00000017,
+ DBPROP_CATALOGUSAGE = 0x00000018,
+ DBPROP_COL_AUTOINCREMENT = 0x0000001a,
+ DBPROP_COL_DEFAULT = 0x0000001b,
+ DBPROP_COL_DESCRIPTION = 0x0000001c,
+ DBPROP_COL_NULLABLE = 0x0000001d,
+ DBPROP_COL_PRIMARYKEY = 0x0000001e,
+ DBPROP_COL_UNIQUE = 0x0000001f,
+ DBPROP_COLUMNDEFINITION = 0x00000020,
+ DBPROP_COLUMNRESTRICT = 0x00000021,
+ DBPROP_COMMANDTIMEOUT = 0x00000022,
+ DBPROP_COMMITPRESERVE = 0x00000023,
+ DBPROP_CONCATNULLBEHAVIOR = 0x00000024,
+ DBPROP_CURRENTCATALOG = 0x00000025,
+ DBPROP_DATASOURCENAME = 0x00000026,
+ DBPROP_DATASOURCEREADONLY = 0x00000027,
+ DBPROP_DBMSNAME = 0x00000028,
+ DBPROP_DBMSVER = 0x00000029,
+ DBPROP_DEFERRED = 0x0000002a,
+ DBPROP_DELAYSTORAGEOBJECTS = 0x0000002b,
+ DBPROP_GROUPBY = 0x0000002c,
+ DBPROP_HETEROGENEOUSTABLES = 0x0000002d,
+ DBPROP_IDENTIFIERCASE = 0x0000002e,
+ DBPROP_IMMOBILEROWS = 0x0000002f,
+ DBPROP_INDEX_AUTOUPDATE = 0x00000030,
+ DBPROP_INDEX_CLUSTERED = 0x00000031,
+ DBPROP_INDEX_FILLFACTOR = 0x00000032,
+ DBPROP_INDEX_INITIALSIZE = 0x00000033,
+ DBPROP_INDEX_NULLCOLLATION = 0x00000034,
+ DBPROP_INDEX_NULLS = 0x00000035,
+ DBPROP_INDEX_PRIMARYKEY = 0x00000036,
+ DBPROP_INDEX_SORTBOOKMARKS = 0x00000037,
+ DBPROP_INDEX_TYPE = 0x00000038,
+ DBPROP_INDEX_UNIQUE = 0x00000039,
+ DBPROP_INIT_DATASOURCE = 0x0000003b,
+ DBPROP_INIT_HWND = 0x0000003c,
+ DBPROP_INIT_IMPERSONATION_LEVEL = 0x0000003d,
+ DBPROP_INIT_LOCATION = 0x0000003e,
+ DBPROP_INIT_MODE = 0x0000003f,
+ DBPROP_INIT_PROMPT = 0x00000040,
+ DBPROP_INIT_PROTECTION_LEVEL = 0x00000041,
+ DBPROP_INIT_TIMEOUT = 0x00000042,
+ DBPROP_LITERALBOOKMARKS = 0x00000043,
+ DBPROP_LITERALIDENTITY = 0x00000044,
+ DBPROP_MAXINDEXSIZE = 0x00000046,
+ DBPROP_MAXOPENROWS = 0x00000047,
+ DBPROP_MAXPENDINGROWS = 0x00000048,
+ DBPROP_MAXROWS = 0x00000049,
+ DBPROP_MAXROWSIZE = 0x0000004a,
+ DBPROP_MAXROWSIZEINCLUDESBLOB = 0x0000004b,
+ DBPROP_MAXTABLESINSELECT = 0x0000004c,
+ DBPROP_MAYWRITECOLUMN = 0x0000004d,
+ DBPROP_MEMORYUSAGE = 0x0000004e,
+ DBPROP_MULTIPLESTORAGEOBJECTS = 0x00000050,
+ DBPROP_MULTITABLEUPDATE = 0x00000051,
+ DBPROP_NOTIFICATIONPHASES = 0x00000052,
+ DBPROP_NULLCOLLATION = 0x00000053,
+ DBPROP_OLEOBJECTS = 0x00000054,
+ DBPROP_ORDERBYCOLUMNSINSELECT = 0x00000055,
+ DBPROP_ORDEREDBOOKMARKS = 0x00000056,
+ DBPROP_OTHERINSERT = 0x00000057,
+ DBPROP_OTHERUPDATEDELETE = 0x00000058,
+ DBPROP_OWNINSERT = 0x00000059,
+ DBPROP_OWNUPDATEDELETE = 0x0000005a,
+ DBPROP_PREPAREABORTBEHAVIOR = 0x0000005b,
+ DBPROP_PREPARECOMMITBEHAVIOR = 0x0000005c,
+ DBPROP_PROCEDURETERM = 0x0000005d,
+ DBPROP_PROVIDERNAME = 0x00000060,
+ DBPROP_PROVIDEROLEDBVER = 0x00000061,
+ DBPROP_PROVIDERVER = 0x00000062,
+ DBPROP_QUICKRESTART = 0x00000063,
+ DBPROP_QUOTEDIDENTIFIERCASE = 0x00000064,
+ DBPROP_REENTRANTEVENTS = 0x00000065,
+ DBPROP_REMOVEDELETED = 0x00000066,
+ DBPROP_REPORTMULTIPLECHANGES = 0x00000067,
+ DBPROP_ROWRESTRICT = 0x00000068,
+ DBPROP_ROWTHREADMODEL = 0x00000069,
+ DBPROP_SCHEMATERM = 0x0000006a,
+ DBPROP_SCHEMAUSAGE = 0x0000006b,
+ DBPROP_SERVERCURSOR = 0x0000006c,
+ DBPROP_SQLSUPPORT = 0x0000006d,
+ DBPROP_STRUCTUREDSTORAGE = 0x0000006f,
+ DBPROP_SUBQUERIES = 0x00000070,
+ DBPROP_SUPPORTEDTXNISOLEVELS = 0x00000071,
+ DBPROP_SUPPORTEDTXNISORETAIN = 0x00000072,
+ DBPROP_TABLETERM = 0x00000073,
+ DBPROP_TRANSACTEDOBJECT = 0x00000074,
+ DBPROP_UPDATABILITY = 0x00000075,
+ DBPROP_USERNAME = 0x00000076,
+ DBPROP_STRONGIDENTITY = 0x00000077,
+ DBPROP_BYREFACCESSORS = 0x00000078,
+ DBPROP_IAccessor = 0x00000079,
+ DBPROP_IColumnsInfo = 0x0000007a,
+ DBPROP_IColumnsRowset = 0x0000007b,
+ DBPROP_IConnectionPointContainer = 0x0000007c,
+ DBPROP_IRowset = 0x0000007e,
+ DBPROP_IRowsetChange = 0x0000007f,
+ DBPROP_IRowsetIdentity = 0x00000080,
+ DBPROP_IRowsetInfo = 0x00000081,
+ DBPROP_IRowsetLocate = 0x00000082,
+ DBPROP_IRowsetResynch = 0x00000084,
+ DBPROP_IRowsetScroll = 0x00000085,
+ DBPROP_IRowsetUpdate = 0x00000086,
+ DBPROP_ISupportErrorInfo = 0x00000087,
+ DBPROP_ILockBytes = 0x00000088,
+ DBPROP_ISequentialStream = 0x00000089,
+ DBPROP_IStorage = 0x0000008a,
+ DBPROP_IStream = 0x0000008b,
+ DBPROP_TBL_TEMPTABLE = 0x0000008c,
+ DBPROP_IRowsetIndex = 0x0000009f,
+ DBPROP_INIT_PROVIDERSTRING = 0x000000a0,
+ DBPROP_SUPPORTEDTXNDDL = 0x000000a1,
+ DBPROP_INDEX_TEMPINDEX = 0x000000a3,
+ DBPROP_COL_FIXEDLENGTH = 0x000000a7,
+ DBPROP_ASYNCTXNABORT = 0x000000a8,
+ DBPROP_DSOTHREADMODEL = 0x000000a9,
+ DBPROP_NOTIFYCOLUMNSET = 0x000000ab,
+ DBPROP_NOTIFYROWDELETE = 0x000000ad,
+ DBPROP_NOTIFYROWFIRSTCHANGE = 0x000000ae,
+ DBPROP_NOTIFYROWINSERT = 0x000000af,
+ DBPROP_NOTIFYROWRESYNCH = 0x000000b1,
+ DBPROP_NOTIFYROWSETRELEASE = 0x000000b2,
+ DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE = 0x000000b3,
+ DBPROP_NOTIFYROWUNDOCHANGE = 0x000000b4,
+ DBPROP_NOTIFYROWUNDODELETE = 0x000000b5,
+ DBPROP_NOTIFYROWUNDOINSERT = 0x000000b6,
+ DBPROP_NOTIFYROWUPDATE = 0x000000b7,
+ DBPROP_OUTPUTPARAMETERAVAILABILITY = 0x000000b8,
+ DBPROP_PERSISTENTIDTYPE = 0x000000b9,
+ DBPROP_INIT_LCID = 0x000000ba,
+ DBPROP_APPENDONLY = 0x000000bb,
+ DBPROP_CHANGEINSERTEDROWS = 0x000000bc,
+ DBPROP_RETURNPENDINGINSERTS = 0x000000bd,
+ DBPROP_SESS_AUTOCOMMITISOLEVELS = 0x000000be,
+ DBPROP_MULTIPLEPARAMSETS = 0x000000bf,
+ DBPROP_ROWSETCONVERSIONSONCOMMAND = 0x000000c0,
+ DBPROP_IConvertType = 0x000000c2,
+ DBPROP_MULTIPLERESULTS = 0x000000c4,
+ DBPROP_NOTIFICATIONGRANULARITY = 0x000000c6,
+ DBPROP_NOTIFYROWSETCHANGED = 0x000000d3,
+};
+
+enum DBPROPENUM15 {
+ DBPROP_FILTERCOMPAREOPS = 0x000000d1,
+ DBPROP_FINDCOMPAREOPS = 0x000000d2,
+ DBPROP_IChapteredRowset = 0x000000ca,
+ DBPROP_IDBAsynchStatus = 0x000000cb,
+ DBPROP_IRowsetFind = 0x000000cc,
+ DBPROP_IRowsetView = 0x000000d4,
+ DBPROP_IViewChapter = 0x000000d5,
+ DBPROP_IViewFilter = 0x000000d6,
+ DBPROP_IViewRowset = 0x000000d7,
+ DBPROP_IViewSort = 0x000000d8,
+ DBPROP_INIT_ASYNCH = 0x000000c8,
+ DBPROP_MAXOPENCHAPTERS = 0x000000c7,
+ DBPROP_MAXORSINFILTER = 0x000000cd,
+ DBPROP_MAXSORTCOLUMNS = 0x000000ce,
+ DBPROP_ROWSET_ASYNCH = 0x000000c9,
+ DBPROP_SORTONINDEX = 0x000000cf
+};
+
+enum DBPROPENUM20 {
+ DBPROP_IMultipleResults = 0x000000d9,
+ DBPROP_DATASOURCE_TYPE = 0x000000fb,
+ MDPROP_AXES = 0x000000fc,
+ MDPROP_FLATTENING_SUPPORT = 0x000000fd,
+ MDPROP_MDX_JOINCUBES = 0x000000fe,
+ MDPROP_NAMED_LEVELS = 0x000000ff,
+ MDPROP_RANGEROWSET = 0x00000100,
+ MDPROP_MDX_SLICER = 0x000000da,
+ MDPROP_MDX_CUBEQUALIFICATION = 0x000000db,
+ MDPROP_MDX_OUTERREFERENCE = 0x000000dc,
+ MDPROP_MDX_QUERYBYPROPERTY = 0x000000dd,
+ MDPROP_MDX_CASESUPPORT = 0x000000de,
+ MDPROP_MDX_STRING_COMPOP = 0x000000e0,
+ MDPROP_MDX_DESCFLAGS = 0x000000e1,
+ MDPROP_MDX_SET_FUNCTIONS = 0x000000e2,
+ MDPROP_MDX_MEMBER_FUNCTIONS = 0x000000e3,
+ MDPROP_MDX_NUMERIC_FUNCTIONS = 0x000000e4,
+ MDPROP_MDX_FORMULAS = 0x000000e5,
+ MDPROP_AGGREGATECELL_UPDATE = 0x000000e6,
+ MDPROP_MDX_AGGREGATECELL_UPDATE = MDPROP_AGGREGATECELL_UPDATE,
+ MDPROP_MDX_OBJQUALIFICATION = 0x00000105,
+ MDPROP_MDX_NONMEASURE_EXPRESSIONS = 0x00000106,
+ DBPROP_ACCESSORDER = 0x000000e7,
+ DBPROP_BOOKMARKINFO = 0x000000e8,
+ DBPROP_INIT_CATALOG = 0x000000e9,
+ DBPROP_ROW_BULKOPS = 0x000000ea,
+ DBPROP_PROVIDERFRIENDLYNAME = 0x000000eb,
+ DBPROP_LOCKMODE = 0x000000ec,
+ DBPROP_MULTIPLECONNECTIONS = 0x000000ed,
+ DBPROP_UNIQUEROWS = 0x000000ee,
+ DBPROP_SERVERDATAONINSERT = 0x000000ef,
+ DBPROP_STORAGEFLAGS = 0x000000f0,
+ DBPROP_CONNECTIONSTATUS = 0x000000f4,
+ DBPROP_ALTERCOLUMN = 0x000000f5,
+ DBPROP_COLUMNLCID = 0x000000f6,
+ DBPROP_RESETDATASOURCE = 0x000000f7,
+ DBPROP_INIT_OLEDBSERVICES = 0x000000f8,
+ DBPROP_IRowsetRefresh = 0x000000f9,
+ DBPROP_SERVERNAME = 0x000000fa,
+ DBPROP_IParentRowset = 0x00000101,
+ DBPROP_HIDDENCOLUMNS = 0x00000102,
+ DBPROP_PROVIDERMEMORY = 0x00000103,
+ DBPROP_CLIENTCURSOR = 0x00000104
+};
+
+
+enum DBPROPENUM21 {
+ DBPROP_TRUSTEE_USERNAME = 0x000000f1,
+ DBPROP_TRUSTEE_AUTHENTICATION = 0x000000f2,
+ DBPROP_TRUSTEE_NEWAUTHENTICATION = 0x000000f3,
+ DBPROP_IRow = 0x00000107,
+ DBPROP_IRowChange = 0x00000108,
+ DBPROP_IRowSchemaChange = 0x00000109,
+ DBPROP_IGetRow = 0x0000010a,
+ DBPROP_IScopedOperations = 0x0000010b,
+ DBPROP_IBindResource = 0x0000010c,
+ DBPROP_ICreateRow = 0x0000010d,
+ DBPROP_INIT_BINDFLAGS = 0x0000010e,
+ DBPROP_INIT_LOCKOWNER = 0x0000010f,
+ DBPROP_GENERATEURL = 0x00000111,
+ DBPROP_IDBBinderProperties = 0x00000112,
+ DBPROP_IColumnsInfo2 = 0x00000113,
+ DBPROP_IRegisterProvider = 0x00000114,
+ DBPROP_IGetSession = 0x00000115,
+ DBPROP_IGetSourceRow = 0x00000116,
+ DBPROP_IRowsetCurrentIndex = 0x00000117,
+ DBPROP_OPENROWSETSUPPORT = 0x00000118,
+ DBPROP_COL_ISLONG = 0x00000119
+};
+
+enum DBPROPENUM25 {
+ DBPROP_COL_SEED = 0x0000011a,
+ DBPROP_COL_INCREMENT = 0x0000011b,
+ DBPROP_INIT_GENERALTIMEOUT = 0x0000011c,
+ DBPROP_COMSERVICES = 0x0000011d
+};
+
+enum DBPROPENUM26 {
+ DBPROP_OUTPUTSTREAM = 0x0000011e,
+ DBPROP_OUTPUTENCODING = 0x0000011f,
+ DBPROP_TABLESTATISTICS = 0x00000120,
+ DBPROP_SKIPROWCOUNTRESULTS = 0x00000123,
+ DBPROP_IRowsetBookmark = 0x00000124,
+ MDPROP_VISUALMODE = 0x00000125,
+};
+
+cpp_quote("#ifdef DBINITCONSTANTS")
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
+cpp_quote(" EXTERN_C const GUID name DECLSPEC_HIDDEN; \\")
+cpp_quote(" EXTERN_C const GUID name = \\")
+cpp_quote(" { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }")
+cpp_quote("#else")
+cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
+cpp_quote(" const GUID name DECLSPEC_HIDDEN; \\")
+cpp_quote(" const GUID name = \\")
+cpp_quote(" { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }")
+cpp_quote("#endif")
+cpp_quote("#else")
+cpp_quote("#define DEFINE_DBGUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \\")
+cpp_quote(" EXTERN_C const GUID name DECLSPEC_HIDDEN")
+cpp_quote("#endif")
+
+cpp_quote("DEFINE_DBGUID(DB_NULLGUID, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);")
+cpp_quote("DEFINE_DBGUID(DBPROPSET_DBINIT, 0xc8b522bc, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_SESSION, 0xc8b522f5, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_ROWSET, 0xc8b522f6, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_ROW, 0xc8b522f7, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+cpp_quote("DEFINE_DBGUID(DBGUID_STREAM, 0xc8b522f9, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);")
+
+cpp_quote("#define DBPROMPT_PROMPT 0x01")
+cpp_quote("#define DBPROMPT_COMPLETE 0x02")
+cpp_quote("#define DBPROMPT_COMPLETEREQUIRED 0x03")
+cpp_quote("#define DBPROMPT_NOPROMPT 0x04")
+
+cpp_quote("#define DBPROPVAL_STGM_READ OF_READ")
+cpp_quote("#define DBPROPVAL_STGM_WRITE OF_WRITE")
+cpp_quote("#define DBPROPVAL_STGM_READWRITE OF_READWRITE")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_NONE OF_SHARE_DENY_NONE")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_READ OF_SHARE_DENY_READ")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_DENY_WRITE OF_SHARE_DENY_WRITE)")
+cpp_quote("#define DBPROPVAL_STGM_SHARE_EXCLUSIVE OF_SHARE_EXCLUSIVE")
+cpp_quote("#define DBPROPVAL_STGM_DIRECT 0x00010000")
+cpp_quote("#define DBPROPVAL_STGM_TRANSACTED 0x00020000")
+cpp_quote("#define DBPROPVAL_STGM_CREATE OF_CREATE")
+cpp_quote("#define DBPROPVAL_STGM_CONVERT 0x00040000")
+cpp_quote("#define DBPROPVAL_STGM_FAILIFTHERE 0x00080000")
+cpp_quote("#define DBPROPVAL_STGM_PRIORITY 0x00100000")
+cpp_quote("#define DBPROPVAL_STGM_DELETEONRELEASE 0x00200000")
+cpp_quote("#define DBPROPVAL_GB_COLLATE __MSABI_LONG(0x00000010)")
+cpp_quote("#define DBPROPVAL_CS_UNINITIALIZED __MSABI_LONG(0x00000000)")
+cpp_quote("#define DBPROPVAL_CS_INITIALIZED __MSABI_LONG(0x00000001)")
+cpp_quote("#define DBPROPVAL_CS_COMMUNICATIONFAILURE __MSABI_LONG(0x00000002)")
+
+cpp_quote("#define DBPROPVAL_RD_RESETALL __MSABI_LONG(0xffffffff)")
+cpp_quote("#define DBPROPVAL_OS_RESOURCEPOOLING __MSABI_LONG(0x00000001)")
+cpp_quote("#define DBPROPVAL_OS_TXNENLISTMENT __MSABI_LONG(0x00000002)")
+cpp_quote("#define DBPROPVAL_OS_CLIENTCURSOR __MSABI_LONG(0x00000004)")
+cpp_quote("#define DBPROPVAL_OS_ENABLEALL __MSABI_LONG(0xffffffff)")
+cpp_quote("#define DBPROPVAL_BI_CROSSROWSET __MSABI_LONG(0x00000001)")
+
+
+typedef struct tagDBCOLUMNACCESS
+{
+ void *pData;
+ DBID columnid;
+ DBLENGTH cbDataLen;
+ DBSTATUS dwStatus;
+ DBLENGTH cbMaxLen;
+ DB_DWRESERVE dwReserved;
+ DBTYPE wType;
+ BYTE bPrecision;
+ BYTE bScale;
+} DBCOLUMNACCESS;
+
+typedef DWORD DBROWSTATUS;
+
+enum DBROWSTATUSENUM
+{
+ DBROWSTATUS_S_OK,
+ DBROWSTATUS_S_LOCKUPGRADED,
+ DBROWSTATUS_S_MULTIPLECHANGES,
+ DBROWSTATUS_S_PENDINGCHANGES,
+ DBROWSTATUS_E_CANCELED,
+ DBROWSTATUS_E_CANTLOCKROW,
+ DBROWSTATUS_E_CANTRELEASE,
+ DBROWSTATUS_E_CONCURRENCYVIOLATION,
+ DBROWSTATUS_E_DELETED,
+ DBROWSTATUS_E_PENDINGINSERT,
+ DBROWSTATUS_E_NEWLYINSERTED,
+ DBROWSTATUS_E_INTEGRITYVIOLATION,
+ DBROWSTATUS_E_INVALID,
+ DBROWSTATUS_E_MAXPENDCHANGESEXCEEDED,
+ DBROWSTATUS_E_OBJECTOPEN,
+ DBROWSTATUS_E_OUTOFMEMORY,
+ DBROWSTATUS_E_PERMISSIONDENIED,
+ DBROWSTATUS_E_LIMITREACHED,
+ DBROWSTATUS_E_SCHEMAVIOLATION,
+ DBROWSTATUS_E_FAIL,
+
+};
+
+typedef DWORD DBPART;
+
+enum DBPARTENUM
+{
+ DBPART_INVALID = 0,
+ DBPART_VALUE = 1,
+ DBPART_LENGTH = 2,
+ DBPART_STATUS = 4,
+};
+
+typedef DWORD DBPARAMIO;
+
+enum DBPARAMIOENUM
+{
+ DBPARAMIO_NOTPARAM = 0,
+ DBPARAMIO_INPUT = 1,
+ DBPARAMIO_OUTPUT = 2,
+};
+
+typedef DWORD DBMEMOWNER;
+
+enum DBMEMOWNERENUM
+{
+ DBMEMOWNER_CLIENTOWNED = 0,
+ DBMEMOWNER_PROVIDEROWNED = 1,
+};
+
+typedef struct tagDBOBJECT
+{
+ DWORD dwFlags;
+ IID iid;
+} DBOBJECT;
+
+typedef struct tagDBBINDEXT
+{
+ [size_is((ULONG)ulExtension)] BYTE *pExtension;
+ DBCOUNTITEM ulExtension;
+} DBBINDEXT;
+
+typedef struct tagDBBINDING
+{
+ DBORDINAL iOrdinal;
+ DBBYTEOFFSET obValue;
+ DBBYTEOFFSET obLength;
+ DBBYTEOFFSET obStatus;
+ ITypeInfo *pTypeInfo;
+ DBOBJECT *pObject;
+ DBBINDEXT *pBindExt;
+ DBPART dwPart;
+ DBMEMOWNER dwMemOwner;
+ DBPARAMIO eParamIO;
+ DBLENGTH cbMaxLen;
+ DWORD dwFlags;
+ DBTYPE wType;
+ BYTE bPrecision;
+ BYTE bScale;
+} DBBINDING;
+
+typedef ULONG_PTR HACCESSOR;
+
+cpp_quote("#define DB_INVALID_HACCESSOR 0x00")
+
+typedef ULONG_PTR HROW;
+
+cpp_quote("#define DB_NULL_HROW 0x00")
+
+typedef ULONG_PTR HWATCHREGION;
+
+cpp_quote("#define DBWATCHREGION_NULL NULL")
+
+typedef ULONG_PTR HCHAPTER;
+
+cpp_quote("#define DB_NULL_HCHAPTER 0x00")
+
+typedef struct tagDBPARAMS
+{
+ void *pData;
+ DB_UPARAMS cParamSets;
+ HACCESSOR hAccessor;
+} DBPARAMS;
+
+typedef DWORD DBASYNCHOP;
+
+enum DBASYNCHOPENUM
+{
+ DBSYNCHOP_OPEN,
+};
+
+typedef DWORD DBASYNCHPHASE;
+
+enum DBASYNCHPHASEENUM
+{
+ DBASYNCHPHASE_INITIALIZATION,
+ DBASYNCHPHASE_POPULATION,
+ DBASYNCHPHASE_COMPLETE,
+ DBASYNCHPHASE_CANCELED,
+};
+
+typedef struct tagRMTPACK
+{
+ ISequentialStream *pISeqStream;
+ ULONG cbData;
+ ULONG cBSTR;
+ [size_is(cBSTR)] BSTR *rgBSTR;
+ ULONG cVARIANT;
+ [size_is(cVARIANT)] VARIANT *rgVARIANT;
+ ULONG cIDISPATCH;
+ [size_is(cIDISPATCH)] IDispatch **rgIDISPATCH;
+ ULONG cIUNKNOWN;
+ [size_is(cIUNKNOWN)] IUnknown **rgIUNKNOWN;
+ ULONG cPROPVARIANT;
+ [size_is(cPROPVARIANT)] PROPVARIANT *rgPROPVARIANT;
+ ULONG cArray;
+ [size_is(cArray)] VARIANT *rgArray;
+} RMTPACK;
+
+typedef struct tagDBDATE {
+ SHORT year;
+ USHORT month;
+ USHORT day;
+} DBDATE;
+
+typedef struct tagDBTIME {
+ USHORT hour;
+ USHORT minute;
+ USHORT second;
+} DBTIME;
+
+typedef struct tagDBTIMESTAMP {
+ SHORT year;
+ USHORT month;
+ USHORT day;
+ USHORT hour;
+ USHORT minute;
+ USHORT second;
+ ULONG fraction;
+} DBTIMESTAMP;
+
+typedef DWORD DBREASON;
+typedef DWORD DBEVENTPHASE;
+
+enum DBEVENTPHASEENUM {
+ DBEVENTPHASE_OKTODO,
+ DBEVENTPHASE_ABOUTTODO,
+ DBEVENTPHASE_SYNCHAFTER,
+ DBEVENTPHASE_FAILEDTODO,
+ DBEVENTPHASE_DIDEVENT
+};
+
+enum DBREASONENUM {
+ DBREASON_ROWSET_FETCHPOSITIONCHANGE,
+ DBREASON_ROWSET_RELEASE,
+ DBREASON_COLUMN_SET,
+ DBREASON_COLUMN_RECALCULATED,
+ DBREASON_ROW_ACTIVATE,
+ DBREASON_ROW_RELEASE,
+ DBREASON_ROW_DELETE,
+ DBREASON_ROW_FIRSTCHANCE,
+ DBREASON_ROW_INSERT,
+ DBREASON_ROW_RESYNCH,
+ DBREASON_ROW_UNDOCHANGE,
+ DBREASON_ROW_UNDOINSERT,
+ DBREASON_ROW_UNDODELETE,
+ DBREASON_ROW_UPDATE,
+ DBREASON_ROWSET_CHANGED
+};
+
+enum DBREASONENUM15 {
+ DBREASON_ROWPOSITION_CHANGED = DBREASON_ROWSET_CHANGED + 1,
+ DBREASON_ROWPOSITION_CHAPTERCHANGED,
+ DBREASON_ROWPOSITION_CLEARED,
+ DBREASON_ROW_ASYNCHINSERT
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h
new file mode 100644
index 00000000..0f359d03
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dbt.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2004 Ulrich Czekalla
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DBT_H
+#define __WINE_DBT_H
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+/* dbt.h doesn't use the normal convention, it adds an underscore before A/W */
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_DBT_TYPE_AW(type) /* nothing */
+#else
+# define DECL_WINELIB_DBT_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type;
+#endif
+
+#define DBT_NO_DISK_SPACE 0x0047
+#define DBT_LOW_DISK_SPACE 0x0048
+#define DBT_CONFIGMGPRIVATE 0x7FFF
+#define DBT_DEVICEARRIVAL 0x8000
+#define DBT_DEVICEQUERYREMOVE 0x8001
+#define DBT_DEVICEQUERYREMOVEFAILED 0x8002
+#define DBT_DEVICEREMOVEPENDING 0x8003
+#define DBT_DEVICEREMOVECOMPLETE 0x8004
+#define DBT_DEVICETYPESPECIFIC 0x8005
+#define DBT_CUSTOMEVENT 0x8006
+
+typedef struct _DEV_BROADCAST_HDR
+{
+ DWORD dbch_size;
+ DWORD dbch_devicetype;
+ DWORD dbch_reserved;
+} DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;
+
+#define DBT_DEVTYP_OEM 0x00000000
+#define DBT_DEVTYP_DEVNODE 0x00000001
+#define DBT_DEVTYP_VOLUME 0x00000002
+#define DBT_DEVTYP_PORT 0x00000003
+#define DBT_DEVTYP_NET 0x00000004
+#define DBT_DEVTYP_DEVICEINTERFACE 0x00000005
+#define DBT_DEVTYP_HANDLE 0x00000006
+
+typedef struct _DEV_BROADCAST_OEM
+{
+ DWORD dbco_size;
+ DWORD dbco_devicetype;
+ DWORD dbco_reserved;
+ DWORD dbco_identifier;
+ DWORD dbco_suppfunc;
+} DEV_BROADCAST_OEM, *PDEV_BROADCAST_OEM;
+
+typedef struct _DEV_BROADCAST_DEVNODE
+{
+ DWORD dbcd_size;
+ DWORD dbcd_devicetype;
+ DWORD dbcd_reserved;
+ DWORD dbcd_devnode;
+} DEV_BROADCAST_DEVNODE, *PDEV_BROADCAST_DEVNODE;
+
+typedef struct _DEV_BROADCAST_VOLUME
+{
+ DWORD dbcv_size;
+ DWORD dbcv_devicetype;
+ DWORD dbcv_reserved;
+ DWORD dbcv_unitmask;
+ WORD dbcv_flags;
+} DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME;
+
+#define DBTF_MEDIA 0x0001
+#define DBTF_NET 0x0002
+
+typedef struct _DEV_BROADCAST_PORT_A
+{
+ DWORD dbcp_size;
+ DWORD dbcp_devicetype;
+ DWORD dbcp_reserved;
+ char dbcp_name[1];
+} DEV_BROADCAST_PORT_A, *PDEV_BROADCAST_PORT_A;
+
+typedef struct _DEV_BROADCAST_PORT_W
+{
+ DWORD dbcp_size;
+ DWORD dbcp_devicetype;
+ DWORD dbcp_reserved;
+ WCHAR dbcp_name[1];
+} DEV_BROADCAST_PORT_W, *PDEV_BROADCAST_PORT_W;
+
+DECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_PORT)
+DECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_PORT)
+
+typedef struct _DEV_BROADCAST_NET
+{
+ DWORD dbcn_size;
+ DWORD dbcn_devicetype;
+ DWORD dbcn_reserved;
+ DWORD dbcn_resource;
+ DWORD dbcn_flags;
+} DEV_BROADCAST_NET, *PDEV_BROADCAST_NET;
+
+typedef struct _DEV_BROADCAST_DEVICEINTERFACE_A
+{
+ DWORD dbcc_size;
+ DWORD dbcc_devicetype;
+ DWORD dbcc_reserved;
+ GUID dbcc_classguid;
+ CHAR dbcc_name[1];
+} DEV_BROADCAST_DEVICEINTERFACE_A, *PDEV_BROADCAST_DEVICEINTERFACE_A;
+
+typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W
+{
+ DWORD dbcc_size;
+ DWORD dbcc_devicetype;
+ DWORD dbcc_reserved;
+ GUID dbcc_classguid;
+ WCHAR dbcc_name[1];
+} DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W;
+
+DECL_WINELIB_DBT_TYPE_AW(DEV_BROADCAST_DEVICEINTERFACE)
+DECL_WINELIB_DBT_TYPE_AW(PDEV_BROADCAST_DEVICEINTERFACE)
+
+typedef struct _DEV_BROADCAST_HANDLE
+{
+ DWORD dbch_size;
+ DWORD dbch_devicetype;
+ DWORD dbch_reserved;
+ HANDLE dbch_handle;
+ HDEVNOTIFY dbch_hdevnotify;
+ GUID dbch_eventguid;
+ LONG dbch_nameoffset;
+ BYTE dbch_data[1];
+} DEV_BROADCAST_HANDLE, *PDEV_BROADCAST_HANDLE;
+
+#undef DECL_WINELIB_DBT_TYPE_AW
+
+#endif /* __WINE_DBT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h
new file mode 100644
index 00000000..1e82a951
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciddi.h
@@ -0,0 +1,92 @@
+/*
+ * DCI driver interface
+ *
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DCIDDI_H
+#define __WINE_DCIDDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DCI Command Escape */
+#define DCICOMMAND 3075
+#define DCI_VERSION 0x0100
+
+#define DCICREATEPRIMARYSURFACE 1
+#define DCICREATEOFFSCREENSURFACE 2
+#define DCICREATEOVERLAYSURFACE 3
+#define DCIENUMSURFACE 4
+#define DCIESCAPE 5
+
+/* DCI Errors */
+#define DCI_OK 0
+#define DCI_FAIL_GENERIC -1
+#define DCI_FAIL_UNSUPPORTEDVERSION -2
+#define DCI_FAIL_INVALIDSURFACE -3
+#define DCI_FAIL_UNSUPPORTED -4
+
+
+typedef int DCIRVAL; /* DCI callback return type */
+
+/*****************************************************************************
+ * Escape command structures
+ */
+typedef struct _DCICMD {
+ DWORD dwCommand;
+ DWORD dwParam1;
+ DWORD dwParam2;
+ DWORD dwVersion;
+ DWORD dwReserved;
+} DCICMD,*LPDCICMD;
+
+typedef struct _DCISURFACEINFO {
+ DWORD dwSize;
+ DWORD dwDCICaps;
+ DWORD dwCompression;
+ DWORD dwMask[3];
+ DWORD dwWidth;
+ DWORD dwHeight;
+ LONG lStride;
+ DWORD dwBitCount;
+ ULONG_PTR dwOffSurface;
+ WORD wSelSurface;
+ WORD wReserved;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DCIRVAL (CALLBACK *BeginAccess)(LPVOID, LPRECT);
+ void (CALLBACK *EndAccess)(LPVOID);
+ void (CALLBACK *DestroySurface)(LPVOID);
+} DCISURFACEINFO, *LPDCISURFACEINFO;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_DCIDDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h
new file mode 100644
index 00000000..12275cdb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dciman.h
@@ -0,0 +1,47 @@
+/*
+ * DCI driver interface
+ *
+ * Copyright (C) 2005 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_DCIMAN
+#define _INC_DCIMAN
+
+#include <dciddi.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HDC WINAPI DCIOpenProvider(void);
+void WINAPI DCICloseProvider(HDC);
+int WINAPI DCICreatePrimary(HDC,LPDCISURFACEINFO*);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _INC_DCIMAN */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h
new file mode 100644
index 00000000..bd6412fd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dcommon.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2012 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DCOMMON_H
+#define __WINE_DCOMMON_H
+
+typedef enum DWRITE_MEASURING_MODE
+{
+ DWRITE_MEASURING_MODE_NATURAL,
+ DWRITE_MEASURING_MODE_GDI_CLASSIC,
+ DWRITE_MEASURING_MODE_GDI_NATURAL
+} DWRITE_MEASURING_MODE;
+
+#endif /* __WINE_DCOMMON_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h
new file mode 100644
index 00000000..a10ff8d9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ * Purpose: dde declarations
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DDE_H
+#define __WINE_DDE_H
+
+#include <windef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _USER32_
+#define WINUSERAPI
+#else
+#define WINUSERAPI DECLSPEC_IMPORT
+#endif
+
+#include <dde.rh>
+
+/* DDEACK: wStatus in WM_DDE_ACK message */
+typedef struct
+{
+ unsigned short bAppReturnCode:8, reserved:6, fBusy:1, fAck:1;
+} DDEACK;
+
+/* DDEDATA: hData in WM_DDE_DATA message */
+typedef struct
+{
+ unsigned short unused:12, fResponse:1, fRelease:1, reserved:1, fAckReq:1;
+ short cfFormat;
+ BYTE Value[1]; /* undetermined array */
+} DDEDATA;
+
+/* DDEADVISE: hOptions in WM_DDE_ADVISE message */
+typedef struct
+{
+ unsigned short reserved:14, fDeferUpd:1, fAckReq:1;
+ short cfFormat;
+} DDEADVISE;
+
+/* DDEPOKE: hData in WM_DDE_POKE message. */
+typedef struct
+{
+ unsigned short unused:13, fRelease:1, fReserved:2;
+ short cfFormat;
+ BYTE Value[1]; /* undetermined array */
+} DDEPOKE;
+
+WINUSERAPI BOOL WINAPI DdeSetQualityOfService(HWND,const SECURITY_QUALITY_OF_SERVICE *,PSECURITY_QUALITY_OF_SERVICE);
+WINUSERAPI BOOL WINAPI FreeDDElParam(UINT,LPARAM);
+WINUSERAPI BOOL WINAPI ImpersonateDdeClientWindow(HWND,HWND);
+WINUSERAPI LPARAM WINAPI PackDDElParam(UINT,UINT_PTR,UINT_PTR);
+WINUSERAPI LPARAM WINAPI ReuseDDElParam(LPARAM,UINT,UINT,UINT_PTR,UINT_PTR);
+WINUSERAPI BOOL WINAPI UnpackDDElParam(UINT,LPARAM,PUINT_PTR,PUINT_PTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DDE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
new file mode 100644
index 00000000..be278fca
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dde.rh
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ * Purpose: dde declarations
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define WM_DDE_INITIATE 0x3E0
+#define WM_DDE_TERMINATE 0x3E1
+#define WM_DDE_ADVISE 0x3E2
+#define WM_DDE_UNADVISE 0x3E3
+#define WM_DDE_ACK 0x3E4
+#define WM_DDE_DATA 0x3E5
+#define WM_DDE_REQUEST 0x3E6
+#define WM_DDE_POKE 0x3E7
+#define WM_DDE_EXECUTE 0x3E8
+#define WM_DDE_LAST WM_DDE_EXECUTE
+#define WM_DDE_FIRST WM_DDE_INITIATE
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h
new file mode 100644
index 00000000..00487e86
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddeml.h
@@ -0,0 +1,392 @@
+/*
+ * DDEML library definitions
+ *
+ * Copyright 1997 Alexandre Julliard
+ * Copyright 1997 Len White
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DDEML_H
+#define __WINE_DDEML_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef _USER32_
+#define WINUSERAPI
+#else
+#define WINUSERAPI DECLSPEC_IMPORT
+#endif
+
+/* Codepage Constants
+ */
+
+#define CP_WINANSI 1004
+#define CP_WINUNICODE 1200
+
+/* DDE synchronisation constants
+ */
+
+#define MSGF_DDEMGR 0x8001
+
+#define QID_SYNC 0xFFFFFFFF
+
+/* Type variation for MS deliberate departures from ANSI standards
+ */
+
+#define EXPENTRY CALLBACK
+
+#define SZDDESYS_TOPIC TEXT("System")
+#define SZDDESYS_ITEM_TOPICS TEXT("Topics")
+#define SZDDESYS_ITEM_SYSITEMS TEXT("SysItems")
+#define SZDDESYS_ITEM_RTNMSG TEXT("ReturnMessage")
+#define SZDDESYS_ITEM_STATUS TEXT("Status")
+#define SZDDESYS_ITEM_FORMATS TEXT("Formats")
+#define SZDDESYS_ITEM_HELP TEXT("Help")
+#define SZDDE_ITEM_ITEMLIST TEXT("TopicItemList")
+
+/***************************************************
+
+ FLAGS Section - copied from Microsoft SDK as must be standard, probably Copyright Microsoft Corporation
+
+***************************************************/
+
+#define XST_NULL 0
+#define XST_INCOMPLETE 1
+#define XST_CONNECTED 2
+#define XST_INIT1 3
+#define XST_INIT2 4
+#define XST_REQSENT 5
+#define XST_DATARCVD 6
+#define XST_POKESENT 7
+#define XST_POKEACKRCVD 8
+#define XST_EXECSENT 9
+#define XST_EXECACKRCVD 10
+#define XST_ADVSENT 11
+#define XST_UNADVSENT 12
+#define XST_ADVACKRCVD 13
+#define XST_UNADVACKRCVD 14
+#define XST_ADVDATASENT 15
+#define XST_ADVDATAACKRCVD 16
+
+#define ST_CONNECTED 0x0001
+#define ST_ADVISE 0x0002
+#define ST_ISLOCAL 0x0004
+#define ST_BLOCKED 0x0008
+#define ST_CLIENT 0x0010
+#define ST_TERMINATED 0x0020
+#define ST_INLIST 0x0040
+#define ST_BLOCKNEXT 0x0080
+#define ST_ISSELF 0x0100
+
+/*
+ * DdeEnableCallback function codes
+ */
+
+#define EC_ENABLEALL 0
+#define EC_ENABLEONE ST_BLOCKNEXT
+#define EC_DISABLE ST_BLOCKED
+#define EC_QUERYWAITING 2
+
+/*
+ * Callback filter flags for use with standard apps.
+ */
+
+#define CBF_FAIL_SELFCONNECTIONS 0x00001000
+#define CBF_FAIL_CONNECTIONS 0x00002000
+#define CBF_FAIL_ADVISES 0x00004000
+#define CBF_FAIL_EXECUTES 0x00008000
+#define CBF_FAIL_POKES 0x00010000
+#define CBF_FAIL_REQUESTS 0x00020000
+#define CBF_FAIL_ALLSVRXACTIONS 0x0003f000
+
+#define CBF_SKIP_CONNECT_CONFIRMS 0x00040000
+#define CBF_SKIP_REGISTRATIONS 0x00080000
+#define CBF_SKIP_UNREGISTRATIONS 0x00100000
+#define CBF_SKIP_DISCONNECTS 0x00200000
+#define CBF_SKIP_ALLNOTIFICATIONS 0x003c0000
+
+#define CBR_BLOCK ((HDDEDATA)-1)
+
+/*
+ * Application command flags
+ */
+#define APPCMD_CLIENTONLY __MSABI_LONG(0x00000010)
+#define APPCMD_FILTERINITS __MSABI_LONG(0x00000020)
+#define APPCMD_MASK __MSABI_LONG(0x00000FF0)
+
+/*
+ * Application classification flags
+ */
+
+#define APPCLASS_STANDARD __MSABI_LONG(0x00000000)
+#define APPCLASS_MONITOR __MSABI_LONG(0x00000001)
+#define APPCLASS_MASK __MSABI_LONG(0x0000000F)
+
+/*
+ * Callback filter flags for use with MONITOR apps - 0 implies no monitor
+ * callbacks.
+ */
+#define MF_HSZ_INFO 0x01000000
+#define MF_SENDMSGS 0x02000000
+#define MF_POSTMSGS 0x04000000
+#define MF_CALLBACKS 0x08000000
+#define MF_ERRORS 0x10000000
+#define MF_LINKS 0x20000000
+#define MF_CONV 0x40000000
+
+#define MF_MASK 0xFF000000
+
+/*
+ * DdeNameService service name flags
+ */
+
+#define DNS_REGISTER 0x0001
+#define DNS_UNREGISTER 0x0002
+#define DNS_FILTERON 0x0004
+#define DNS_FILTEROFF 0x0008
+
+
+/****************************************************
+
+ End of Flags section
+
+****************************************************/
+
+/****************************************************
+
+ Message Types Section
+
+****************************************************/
+
+#define XTYPF_NOBLOCK 0x0002 /* CBR_NOBLOCK will not work */
+#define XTYPF_NODATA 0x0004 /* DDE_FDEFERUPD */
+#define XTYPF_ACKREQ 0x0008 /* DDE_FACKREQ */
+
+#define XCLASS_MASK 0xFC00
+#define XCLASS_BOOL 0x1000
+#define XCLASS_DATA 0x2000
+#define XCLASS_FLAGS 0x4000
+#define XCLASS_NOTIFICATION 0x8000
+
+#define XTYP_ERROR (0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
+#define XTYP_ADVDATA (0x0010 | XCLASS_FLAGS)
+#define XTYP_ADVREQ (0x0020 | XCLASS_DATA | XTYPF_NOBLOCK)
+#define XTYP_ADVSTART (0x0030 | XCLASS_BOOL)
+#define XTYP_ADVSTOP (0x0040 | XCLASS_NOTIFICATION)
+#define XTYP_EXECUTE (0x0050 | XCLASS_FLAGS)
+#define XTYP_CONNECT (0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK)
+#define XTYP_CONNECT_CONFIRM (0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
+#define XTYP_XACT_COMPLETE (0x0080 | XCLASS_NOTIFICATION )
+#define XTYP_POKE (0x0090 | XCLASS_FLAGS)
+#define XTYP_REGISTER (0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_REQUEST (0x00B0 | XCLASS_DATA )
+#define XTYP_DISCONNECT (0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_UNREGISTER (0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK )
+#define XTYP_WILDCONNECT (0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK)
+#define XTYP_MONITOR (0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK)
+
+#define XTYP_MASK 0x00F0
+#define XTYP_SHIFT 4
+
+#define TIMEOUT_ASYNC 0xFFFFFFFF
+
+#define CADV_LATEACK 0xFFFF
+
+/**************************************************
+
+ End of Message Types Section
+
+****************************************************/
+
+/*****************************************************
+
+ DDE Codes for wStatus field
+
+*****************************************************/
+
+#define DDE_FACK 0x8000
+#define DDE_FBUSY 0x4000
+#define DDE_FDEFERUPD 0x4000
+#define DDE_FACKREQ 0x8000
+#define DDE_FRELEASE 0x2000
+#define DDE_FREQUESTED 0x1000
+#define DDE_FAPPSTATUS 0x00FF
+#define DDE_FNOTPROCESSED 0x0000
+
+#define DDE_FACKRESERVED (~(DDE_FACK | DDE_FBUSY | DDE_FAPPSTATUS))
+#define DDE_FADVRESERVED (~(DDE_FACKREQ | DDE_FDEFERUPD))
+#define DDE_FDATRESERVED (~(DDE_FACKREQ | DDE_FRELEASE | DDE_FREQUESTED))
+#define DDE_FPOKRESERVED (~(DDE_FRELEASE))
+
+/*****************************************************
+
+ End of wStatus codes
+
+*****************************************************/
+
+/****************************************************
+
+ Return Codes section again copied from SDK as must be same
+
+*****************************************************/
+
+#define DMLERR_NO_ERROR 0 /* must be 0 */
+
+#define DMLERR_FIRST 0x4000
+
+#define DMLERR_ADVACKTIMEOUT 0x4000
+#define DMLERR_BUSY 0x4001
+#define DMLERR_DATAACKTIMEOUT 0x4002
+#define DMLERR_DLL_NOT_INITIALIZED 0x4003
+#define DMLERR_DLL_USAGE 0x4004
+#define DMLERR_EXECACKTIMEOUT 0x4005
+#define DMLERR_INVALIDPARAMETER 0x4006
+#define DMLERR_LOW_MEMORY 0x4007
+#define DMLERR_MEMORY_ERROR 0x4008
+#define DMLERR_NOTPROCESSED 0x4009
+#define DMLERR_NO_CONV_ESTABLISHED 0x400a
+#define DMLERR_POKEACKTIMEOUT 0x400b
+#define DMLERR_POSTMSG_FAILED 0x400c
+#define DMLERR_REENTRANCY 0x400d
+#define DMLERR_SERVER_DIED 0x400e
+#define DMLERR_SYS_ERROR 0x400f
+#define DMLERR_UNADVACKTIMEOUT 0x4010
+#define DMLERR_UNFOUND_QUEUE_ID 0x4011
+
+#define DMLERR_LAST 0x4011
+
+#define HDATA_APPOWNED 0x0001
+
+/*****************************************************
+
+ End of Return Codes and Microsoft section
+
+******************************************************/
+
+
+
+DECLARE_HANDLE(HCONVLIST);
+DECLARE_HANDLE(HCONV);
+DECLARE_HANDLE(HSZ);
+DECLARE_HANDLE(HDDEDATA);
+
+
+
+/*******************************************************
+
+ API Entry Points
+
+*******************************************************/
+
+typedef HDDEDATA (CALLBACK *PFNCALLBACK)(UINT, UINT, HCONV, HSZ, HSZ,
+ HDDEDATA, ULONG_PTR, ULONG_PTR);
+
+/***************************************************
+
+ Externally visible data structures
+
+***************************************************/
+
+typedef struct tagHSZPAIR
+{
+ HSZ hszSvc;
+ HSZ hszTopic;
+} HSZPAIR, *PHSZPAIR;
+
+typedef struct tagCONVCONTEXT
+{
+ UINT cb;
+ UINT wFlags;
+ UINT wCountryID;
+ INT iCodePage;
+ DWORD dwLangID;
+ DWORD dwSecurity;
+ SECURITY_QUALITY_OF_SERVICE qos;
+} CONVCONTEXT, *PCONVCONTEXT;
+
+typedef struct tagCONVINFO
+{
+ DWORD cb;
+ DWORD_PTR hUser;
+ HCONV hConvPartner;
+ HSZ hszSvcPartner;
+ HSZ hszServiceReq;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT wFmt;
+ UINT wType;
+ UINT wStatus;
+ UINT wConvst;
+ UINT wLastError;
+ HCONVLIST hConvList;
+ CONVCONTEXT ConvCtxt;
+ HWND hwnd;
+ HWND hwndPartner;
+} CONVINFO, *PCONVINFO;
+
+/* Interface Definitions */
+
+WINUSERAPI BOOL WINAPI DdeAbandonTransaction(DWORD idInst, HCONV hConv, DWORD idTransaction);
+WINUSERAPI LPBYTE WINAPI DdeAccessData(HDDEDATA,LPDWORD);
+WINUSERAPI HDDEDATA WINAPI DdeAddData(HDDEDATA,LPBYTE,DWORD,DWORD);
+WINUSERAPI HDDEDATA WINAPI DdeClientTransaction(LPBYTE,DWORD,HCONV,HSZ,UINT,UINT,DWORD,LPDWORD);
+WINUSERAPI INT WINAPI DdeCmpStringHandles(HSZ,HSZ);
+WINUSERAPI HCONV WINAPI DdeConnect(DWORD,HSZ,HSZ,PCONVCONTEXT);
+WINUSERAPI HCONVLIST WINAPI DdeConnectList(DWORD,HSZ,HSZ,HCONVLIST,PCONVCONTEXT);
+WINUSERAPI HDDEDATA WINAPI DdeCreateDataHandle(DWORD,LPBYTE,DWORD,DWORD,HSZ,UINT,UINT);
+WINUSERAPI HSZ WINAPI DdeCreateStringHandleA(DWORD,LPCSTR,INT);
+WINUSERAPI HSZ WINAPI DdeCreateStringHandleW(DWORD,LPCWSTR,INT);
+#define DdeCreateStringHandle WINELIB_NAME_AW(DdeCreateStringHandle)
+WINUSERAPI BOOL WINAPI DdeDisconnect(HCONV);
+WINUSERAPI BOOL WINAPI DdeDisconnectList(HCONVLIST);
+WINUSERAPI BOOL WINAPI DdeEnableCallback(DWORD,HCONV,UINT);
+WINUSERAPI BOOL WINAPI DdeFreeDataHandle(HDDEDATA);
+WINUSERAPI BOOL WINAPI DdeFreeStringHandle(DWORD,HSZ);
+WINUSERAPI DWORD WINAPI DdeGetData(HDDEDATA,LPBYTE,DWORD,DWORD);
+WINUSERAPI UINT WINAPI DdeGetLastError(DWORD);
+WINUSERAPI BOOL WINAPI DdeImpersonateClient(HCONV);
+WINUSERAPI UINT WINAPI DdeInitializeA(LPDWORD,PFNCALLBACK,DWORD,DWORD);
+WINUSERAPI UINT WINAPI DdeInitializeW(LPDWORD,PFNCALLBACK,DWORD,DWORD);
+#define DdeInitialize WINELIB_NAME_AW(DdeInitialize)
+WINUSERAPI BOOL WINAPI DdeKeepStringHandle(DWORD,HSZ);
+WINUSERAPI HDDEDATA WINAPI DdeNameService(DWORD,HSZ,HSZ,UINT);
+WINUSERAPI BOOL WINAPI DdePostAdvise(DWORD,HSZ,HSZ);
+WINUSERAPI UINT WINAPI DdeQueryConvInfo(HCONV,DWORD,PCONVINFO);
+WINUSERAPI HCONV WINAPI DdeQueryNextServer(HCONVLIST, HCONV);
+WINUSERAPI DWORD WINAPI DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, INT);
+WINUSERAPI DWORD WINAPI DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, INT);
+#define DdeQueryString WINELIB_NAME_AW(DdeQueryString)
+WINUSERAPI HCONV WINAPI DdeReconnect(HCONV);
+WINUSERAPI BOOL WINAPI DdeSetUserHandle(HCONV,DWORD,DWORD);
+WINUSERAPI BOOL WINAPI DdeUnaccessData(HDDEDATA);
+WINUSERAPI BOOL WINAPI DdeUninitialize(DWORD);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DDEML_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h
new file mode 100644
index 00000000..387b8421
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/compstui.h
@@ -0,0 +1,80 @@
+/*
+ * Definitions for Common Property Sheet User Interface
+ *
+ * Copyright 2006 Detlef Riekenberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _COMPSTUI_
+#define _COMPSTUI_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DEFINES */
+
+#define PROPSHEETUI_INFO_VERSION 0x0100
+
+#define PSUIINFO_UNICODE 1
+
+/* return-values for CommonPropertySheetUI on success */
+#define CPSUI_CANCEL 0
+#define CPSUI_OK 1
+#define CPSUI_RESTARTWINDOWS 2
+#define CPSUI_REBOOTSYSTEM 3
+
+
+/* TYPES */
+typedef DWORD (CALLBACK *PFNCOMPROPSHEET)(HANDLE, UINT, LPARAM, LPARAM);
+
+typedef struct _PROPSHEETUI_INFO {
+ WORD cbSize;
+ WORD Version;
+ WORD Flags; /* set PSUIINFO_UNICODE for UNICODE */
+ WORD Reason;
+ HANDLE hComPropSheet;
+ PFNCOMPROPSHEET pfnComPropSheet;
+ LPARAM lParamInit;
+ DWORD UserData;
+ DWORD Result;
+ } PROPSHEETUI_INFO, *PPROPSHEETUI_INFO;
+
+typedef LONG (CALLBACK *PFNPROPSHEETUI)(PROPSHEETUI_INFO, LPARAM);
+
+/* FUNCTIONS */
+LONG WINAPI CommonPropertySheetUIA(HWND, PFNPROPSHEETUI, LPARAM, LPDWORD);
+LONG WINAPI CommonPropertySheetUIW(HWND, PFNPROPSHEETUI, LPARAM, LPDWORD);
+#define CommonPropertySheetUI WINELIB_NAME_AW(CommonPropertySheetUI)
+
+ULONG_PTR WINAPI GetPSTUIUserData(HWND);
+BOOL WINAPI SetPSTUIUserData(HWND, ULONG_PTR);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _COMPSTUI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h
new file mode 100644
index 00000000..57d0c279
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/hidsdi.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HIDSDI_H
+#define __WINE_HIDSDI_H
+
+/* FIXME: #include "hidusage.h" */
+/* FIXME: #include "hidpi.h" */
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+
+BOOLEAN WINAPI HidD_GetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength);
+void WINAPI HidD_GetHidGuid(LPGUID guid);
+BOOLEAN WINAPI HidD_GetManufacturerString(HANDLE HidDeviceObject, PVOID Buffer, ULONG BufferLength);
+BOOLEAN WINAPI HidD_SetFeature(HANDLE HidDeviceObject, PVOID ReportBuffer, ULONG ReportBufferLength);
+
+#endif /* __WINE_HIDSDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h
new file mode 100644
index 00000000..138fc3c4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/imm.h
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2007 CodeWeavers, Aric Stewart
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _DDKIMM_H_
+#define _DDKIMM_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _tagINPUTCONTEXT {
+ HWND hWnd;
+ BOOL fOpen;
+ POINT ptStatusWndPos;
+ POINT ptSoftKbdPos;
+ DWORD fdwConversion;
+ DWORD fdwSentence;
+ union {
+ LOGFONTA A;
+ LOGFONTW W;
+ } lfFont;
+ COMPOSITIONFORM cfCompForm;
+ CANDIDATEFORM cfCandForm[4];
+ HIMCC hCompStr;
+ HIMCC hCandInfo;
+ HIMCC hGuideLine;
+ HIMCC hPrivate;
+ DWORD dwNumMsgBuf;
+ HIMCC hMsgBuf;
+ DWORD fdwInit;
+ DWORD dwReserve[3];
+} INPUTCONTEXT, *LPINPUTCONTEXT;
+
+typedef struct _tagIMEINFO {
+ DWORD dwPrivateDataSize;
+ DWORD fdwProperty;
+ DWORD fdwConversionCaps;
+ DWORD fdwSentenceCaps;
+ DWORD fdwUICaps;
+ DWORD fdwSCSCaps;
+ DWORD fdwSelectCaps;
+} IMEINFO, *LPIMEINFO;
+
+typedef struct tagCOMPOSITIONSTRING {
+ DWORD dwSize;
+ DWORD dwCompReadAttrLen;
+ DWORD dwCompReadAttrOffset;
+ DWORD dwCompReadClauseLen;
+ DWORD dwCompReadClauseOffset;
+ DWORD dwCompReadStrLen;
+ DWORD dwCompReadStrOffset;
+ DWORD dwCompAttrLen;
+ DWORD dwCompAttrOffset;
+ DWORD dwCompClauseLen;
+ DWORD dwCompClauseOffset;
+ DWORD dwCompStrLen;
+ DWORD dwCompStrOffset;
+ DWORD dwCursorPos;
+ DWORD dwDeltaStart;
+ DWORD dwResultReadClauseLen;
+ DWORD dwResultReadClauseOffset;
+ DWORD dwResultReadStrLen;
+ DWORD dwResultReadStrOffset;
+ DWORD dwResultClauseLen;
+ DWORD dwResultClauseOffset;
+ DWORD dwResultStrLen;
+ DWORD dwResultStrOffset;
+ DWORD dwPrivateSize;
+ DWORD dwPrivateOffset;
+} COMPOSITIONSTRING, *LPCOMPOSITIONSTRING;
+
+typedef struct tagGUIDELINE {
+ DWORD dwSize;
+ DWORD dwLevel;
+ DWORD dwIndex;
+ DWORD dwStrLen;
+ DWORD dwStrOffset;
+ DWORD dwPrivateSize;
+ DWORD dwPrivateOffset;
+} GUIDELINE, *LPGUIDELINE;
+
+typedef struct tagCANDIDATEINFO {
+ DWORD dwSize;
+ DWORD dwCount;
+ DWORD dwOffset[32];
+ DWORD dwPrivateSize;
+ DWORD dwPrivateOffset;
+} CANDIDATEINFO, *LPCANDIDATEINFO;
+
+LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC);
+BOOL WINAPI ImmUnlockIMC(HIMC);
+DWORD WINAPI ImmGetIMCLockCount(HIMC);
+HIMCC WINAPI ImmCreateIMCC(DWORD);
+HIMCC WINAPI ImmDestroyIMCC(HIMCC);
+LPVOID WINAPI ImmLockIMCC(HIMCC);
+BOOL WINAPI ImmUnlockIMCC(HIMCC);
+DWORD WINAPI ImmGetIMCCLockCount(HIMCC);
+HIMCC WINAPI ImmReSizeIMCC(HIMCC, DWORD);
+DWORD WINAPI ImmGetIMCCSize(HIMCC);
+
+#define IMMGWL_IMC 0
+#define IMMGWL_PRIVATE (sizeof(LONG_PTR))
+
+/* IME Property bits */
+#define IME_PROP_END_UNLOAD 0x0001
+#define IME_PROP_KBD_CHAR_FIRST 0x0002
+#define IME_PROP_IGNORE_UPKEYS 0x0004
+#define IME_PROP_NEED_ALTKEY 0x0008
+#define IME_PROP_NO_KEYS_ON_CLOSE 0x0010
+
+/* for NI_CONTEXTUPDATED */
+#define IMC_SETCONVERSIONMODE 0x0002
+#define IMC_SETSENTENCEMODE 0x0004
+#define IMC_SETOPENSTATUS 0x0006
+
+/* dwAction for ImmNotifyIME */
+#define NI_CONTEXTUPDATED 0x0003
+#define NI_OPENCANDIDATE 0x0010
+#define NI_CLOSECANDIDATE 0x0011
+#define NI_SELECTCANDIDATESTR 0x0012
+#define NI_CHANGECANDIDATELIST 0x0013
+#define NI_FINALIZECONVERSIONRESULT 0x0014
+#define NI_COMPOSITIONSTR 0x0015
+#define NI_SETCANDIDATE_PAGESTART 0x0016
+#define NI_SETCANDIDATE_PAGESIZE 0x0017
+#define NI_IMEMENUSELECTED 0x0018
+
+BOOL WINAPI ImmGenerateMessage(HIMC);
+LRESULT WINAPI ImmRequestMessageA(HIMC, WPARAM, LPARAM);
+LRESULT WINAPI ImmRequestMessageW(HIMC, WPARAM, LPARAM);
+#define ImmRequestMessage WINELIB_NAME_AW(ImmRequestMessage);
+BOOL WINAPI ImmTranslateMessage(HWND, UINT, WPARAM, LPARAM);
+HWND WINAPI ImmCreateSoftKeyboard(UINT, UINT, int, int);
+BOOL WINAPI ImmDestroySoftKeyboard(HWND);
+BOOL WINAPI ImmShowSoftKeyboard(HWND, int);
+
+BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions);
+BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID);
+DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT);
+BOOL WINAPI ImeDestroy(UINT);
+LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID);
+BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, const LPBYTE);
+BOOL WINAPI ImeSelect(HIMC, BOOL);
+BOOL WINAPI ImeSetActiveContext(HIMC, BOOL);
+UINT WINAPI ImeToAsciiEx(UINT, UINT, const LPBYTE, LPDWORD, UINT, HIMC);
+BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD);
+BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR);
+BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR);
+UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW);
+UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
+BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
+DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _DDKIMM_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h
new file mode 100644
index 00000000..b0efbb3b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/mountmgr.h
@@ -0,0 +1,151 @@
+/*
+ * Mount point manager definitions
+ *
+ * Copyright 2007 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _MOUNTMGR_
+#define _MOUNTMGR_
+
+#define MOUNTMGRCONTROLTYPE ((ULONG)'m')
+#define MOUNTDEVCONTROLTYPE ((ULONG)'M')
+
+#if defined(__GNUC__)
+#define MOUNTMGR_DEVICE_NAME (const WCHAR []){'\\','D','e','v','i','c','e','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0}
+#define MOUNTMGR_DOS_DEVICE_NAME (const WCHAR []){'\\','\\','.','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0}
+#elif defined(_MSC_VER)
+#define MOUNTMGR_DEVICE_NAME L"\\Device\\MountPointManager"
+#define MOUNTMGR_DOS_DEVICE_NAME L"\\\\.\\MountPointManager"
+#else
+static const WCHAR MOUNTMGR_DEVICE_NAME[] = {'\\','D','e','v','i','c','e','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0};
+static const WCHAR MOUNTMGR_DOS_DEVICE_NAME[] = {'\\','\\','.','\\','M','o','u','n','t','P','o','i','n','t','M','a','n','a','g','e','r',0};
+#endif
+
+
+#define IOCTL_MOUNTMGR_CREATE_POINT CTL_CODE(MOUNTMGRCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_DELETE_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_QUERY_POINTS CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY CTL_CODE(MOUNTMGRCONTROLTYPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER CTL_CODE(MOUNTMGRCONTROLTYPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS CTL_CODE(MOUNTMGRCONTROLTYPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED CTL_CODE(MOUNTMGRCONTROLTYPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED CTL_CODE(MOUNTMGRCONTROLTYPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_CHANGE_NOTIFY CTL_CODE(MOUNTMGRCONTROLTYPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE CTL_CODE(MOUNTMGRCONTROLTYPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES CTL_CODE(MOUNTMGRCONTROLTYPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION CTL_CODE(MOUNTMGRCONTROLTYPE, 11, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+/* Wine extensions */
+#ifdef WINE_MOUNTMGR_EXTENSIONS
+
+#define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 32, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 33, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+struct mountmgr_unix_drive
+{
+ ULONG size;
+ ULONG type;
+ WCHAR letter;
+ USHORT mount_point_offset;
+ USHORT device_offset;
+};
+
+#endif
+
+typedef struct _MOUNTMGR_CREATE_POINT_INPUT
+{
+ USHORT SymbolicLinkNameOffset;
+ USHORT SymbolicLinkNameLength;
+ USHORT DeviceNameOffset;
+ USHORT DeviceNameLength;
+} MOUNTMGR_CREATE_POINT_INPUT, *PMOUNTMGR_CREATE_POINT_INPUT;
+
+typedef struct _MOUNTMGR_MOUNT_POINT
+{
+ ULONG SymbolicLinkNameOffset;
+ USHORT SymbolicLinkNameLength;
+ ULONG UniqueIdOffset;
+ USHORT UniqueIdLength;
+ ULONG DeviceNameOffset;
+ USHORT DeviceNameLength;
+} MOUNTMGR_MOUNT_POINT, *PMOUNTMGR_MOUNT_POINT;
+
+typedef struct _MOUNTMGR_MOUNT_POINTS
+{
+ ULONG Size;
+ ULONG NumberOfMountPoints;
+ MOUNTMGR_MOUNT_POINT MountPoints[1];
+} MOUNTMGR_MOUNT_POINTS, *PMOUNTMGR_MOUNT_POINTS;
+
+typedef struct _MOUNTMGR_DRIVE_LETTER_TARGET
+{
+ USHORT DeviceNameLength;
+ WCHAR DeviceName[1];
+} MOUNTMGR_DRIVE_LETTER_TARGET, *PMOUNTMGR_DRIVE_LETTER_TARGET;
+
+typedef struct _MOUNTMGR_DRIVE_LETTER_INFORMATION
+{
+ BOOLEAN DriveLetterWasAssigned;
+ UCHAR CurrentDriveLetter;
+} MOUNTMGR_DRIVE_LETTER_INFORMATION, *PMOUNTMGR_DRIVE_LETTER_INFORMATION;
+
+typedef struct _MOUNTMGR_VOLUME_MOUNT_POINT
+{
+ USHORT SourceVolumeNameOffset;
+ USHORT SourceVolumeNameLength;
+ USHORT TargetVolumeNameOffset;
+ USHORT TargetVolumeNameLength;
+} MOUNTMGR_VOLUME_MOUNT_POINT, *PMOUNTMGR_VOLUME_MOUNT_POINT;
+
+typedef struct _MOUNTMGR_CHANGE_NOTIFY_INFO
+{
+ ULONG EpicNumber;
+} MOUNTMGR_CHANGE_NOTIFY_INFO, *PMOUNTMGR_CHANGE_NOTIFY_INFO;
+
+typedef struct _MOUNTMGR_TARGET_NAME
+{
+ USHORT DeviceNameLength;
+ WCHAR DeviceName[1];
+} MOUNTMGR_TARGET_NAME, *PMOUNTMGR_TARGET_NAME;
+
+#define MOUNTMGR_IS_DRIVE_LETTER(s) \
+ ((s)->Length == 28 && \
+ (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && (s)->Buffer[2] == 'o' && \
+ (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && (s)->Buffer[5] == 'e' && \
+ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && (s)->Buffer[8] == 'c' && \
+ (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && (s)->Buffer[11] == '\\' && \
+ (s)->Buffer[12] >= 'A' && (s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':')
+
+#define MOUNTMGR_IS_VOLUME_NAME(s) \
+ (((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \
+ (s)->Buffer[0] == '\\' && ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \
+ (s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \
+ (s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \
+ (s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \
+ (s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \
+ (s)->Buffer[34] == '-' && (s)->Buffer[47] == '}')
+
+#endif /* _MOUNTMGR_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h
new file mode 100644
index 00000000..2ff9e82d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddcdvd.h
@@ -0,0 +1,207 @@
+/*
+ * DDK information for DVD
+ *
+ * Copyright (C) 2004 Uwe Bonnes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __NTDDCDVD_H
+#define __NTDDCDVD_H
+
+/* definitions taken from libdvdcss, modified to reflect Windows names and data types in places */
+
+#define IOCTL_DVD_BASE FILE_DEVICE_DVD
+
+#define IOCTL_DVD_START_SESSION CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_READ_KEY CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_SEND_KEY CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_END_SESSION CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_SET_READ_AHEAD CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_GET_REGION CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DVD_SEND_KEY2 CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_DVD_READ_STRUCTURE CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+typedef enum {
+ DvdChallengeKey = 0x01,
+ DvdBusKey1,
+ DvdBusKey2,
+ DvdTitleKey,
+ DvdAsf,
+ DvdSetRpcKey = 0x6,
+ DvdGetRpcKey = 0x8,
+ DvdDiskKey = 0x80,
+ DvdInvalidateAGID = 0x3f
+} DVD_KEY_TYPE;
+
+typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
+
+#include <pshpack1.h>
+
+typedef struct _DVD_COPY_PROTECT_KEY {
+ ULONG KeyLength;
+ DVD_SESSION_ID SessionId;
+ DVD_KEY_TYPE KeyType;
+ ULONG KeyFlags;
+ union {
+ struct {
+ ULONG FileHandle;
+ ULONG Reserved; /* used for NT alignment */
+ } s;
+ LARGE_INTEGER TitleOffset;
+ } Parameters;
+ UCHAR KeyData[1];
+} DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
+
+typedef struct _DVD_RPC_KEY {
+ UCHAR UserResetsAvailable:3;
+ UCHAR ManufacturerResetsAvailable:3;
+ UCHAR TypeCode:2;
+ UCHAR RegionMask;
+ UCHAR RpcScheme;
+ UCHAR Reserved2[1];
+} DVD_RPC_KEY, * PDVD_RPC_KEY;
+
+typedef struct _DVD_ASF {
+ UCHAR Reserved0[3];
+ UCHAR SuccessFlag:1;
+ UCHAR Reserved1:7;
+} DVD_ASF, * PDVD_ASF;
+
+typedef struct _DVD_REGION
+{
+ UCHAR CopySystem;
+ UCHAR RegionData; /* current media region (not playable when set) */
+ UCHAR SystemRegion; /* current drive region (playable when set) */
+ UCHAR ResetCount; /* number of resets available */
+} DVD_REGION, * PDVD_REGION;
+
+typedef enum _DVD_STRUCTURE_FORMAT
+{
+ DvdPhysicalDescriptor,
+ DvdCopyrightDescriptor,
+ DvdDiskKeyDescriptor,
+ DvdBCADescriptor,
+ DvdManufacturerDescriptor,
+ DvdMaxDescriptor
+} DVD_STRUCTURE_FORMAT, *PDVD_STRUCTURE_FORMAT;
+
+typedef struct DVD_READ_STRUCTURE {
+ /* Contains an offset to the logical block address of the descriptor to be retrieved. */
+ LARGE_INTEGER BlockByteOffset;
+
+ /* 0:Physical descriptor, 1:Copyright descriptor, 2:Disk key descriptor
+ 3:BCA descriptor, 4:Manufacturer descriptor, 5:Max descriptor
+ */
+ DVD_STRUCTURE_FORMAT Format;
+
+ /* Session ID, that is obtained by IOCTL_DVD_START_SESSION */
+ DVD_SESSION_ID SessionId;
+
+ /* From 0 to 4 */
+ UCHAR LayerNumber;
+} DVD_READ_STRUCTURE, *PDVD_READ_STRUCTURE;
+
+typedef struct _DVD_DESCRIPTOR_HEADER {
+ USHORT Length;
+ UCHAR Reserved[2];
+} DVD_DESCRIPTOR_HEADER, *PDVD_DESCRIPTOR_HEADER;
+C_ASSERT(sizeof(DVD_DESCRIPTOR_HEADER) == 4);
+
+typedef struct _DVD_LAYER_DESCRIPTOR
+{
+ UCHAR BookVersion : 4;
+
+ /* 0:DVD-ROM, 1:DVD-RAM, 2:DVD-R, 3:DVD-RW, 9:DVD-RW */
+ UCHAR BookType : 4;
+
+ UCHAR MinimumRate : 4;
+
+ /* The physical size of the media. 0:120 mm, 1:80 mm. */
+ UCHAR DiskSize : 4;
+
+ /* 1:Read-only layer, 2:Recordable layer, 4:Rewritable layer */
+ UCHAR LayerType : 4;
+
+ /* 0:parallel track path, 1:opposite track path */
+ UCHAR TrackPath : 1;
+
+ /* 0:one layers, 1:two layers, and so on */
+ UCHAR NumberOfLayers : 2;
+
+ UCHAR Reserved1 : 1;
+
+ /* 0:0.74 µm/track, 1:0.80 µm/track, 2:0.615 µm/track */
+ UCHAR TrackDensity : 4;
+
+ /* 0:0.267 µm/bit, 1:0.293 µm/bit, 2:0.409 to 0.435 µm/bit, 4:0.280 to 0.291 µm/bit, 8:0.353 µm/bit */
+ UCHAR LinearDensity : 4;
+
+ /* Must be either 0x30000:DVD-ROM or DVD-R/-RW or 0x31000:DVD-RAM or DVD+RW */
+ ULONG StartingDataSector;
+
+ ULONG EndDataSector;
+ ULONG EndLayerZeroSector;
+ UCHAR Reserved5 : 7;
+
+ /* 0 indicates no BCA data */
+ UCHAR BCAFlag : 1;
+}DVD_LAYER_DESCRIPTOR, * PDVD_LAYER_DESCRIPTOR;
+C_ASSERT(sizeof(DVD_LAYER_DESCRIPTOR) == 17);
+
+typedef struct _DVD_COPYRIGHT_DESCRIPTOR
+{
+ UCHAR CopyrightProtectionType;
+ UCHAR RegionManagementInformation;
+ USHORT Reserved;
+}DVD_COPYRIGHT_DESCRIPTOR, * PDVD_COPYRIGHT_DESCRIPTOR;
+
+typedef struct _DVD_DISK_KEY_DESCRIPTOR
+{
+ UCHAR DiskKeyData[2048];
+}DVD_DISK_KEY_DESCRIPTOR, * PDVD_DISK_KEY_DESCRIPTOR;
+
+typedef struct _DVD_BCA_DESCRIPTOR
+{
+ UCHAR BCAInformation[1];
+}DVD_BCA_DESCRIPTOR, * PDVD_BCA_DESCRIPTOR;
+
+typedef struct _DVD_MANUFACTURER_DESCRIPTOR
+{
+ UCHAR ManufacturingInformation[2048];
+}DVD_MANUFACTURER_DESCRIPTOR, * PDVD_MANUFACTURER_DESCRIPTOR;
+
+#define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY) - sizeof(UCHAR))
+
+#define DVD_DISK_KEY_LENGTH (2048 + sizeof(DVD_COPY_PROTECT_KEY) - sizeof(UCHAR))
+
+#define DVD_KEY_SIZE 5
+#define DVD_CHALLENGE_SIZE 10
+#define DVD_DISCKEY_SIZE 2048
+#define DVD_SECTOR_PROTECTED 0x00000020
+
+#include <poppack.h>
+
+#endif /* __NTDDCDVD_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h
new file mode 100644
index 00000000..62b570aa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddk.h
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2008 Francois Gouget for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDK_
+#define _NTDDK_
+
+/* Note: We will probably have to duplicate everything ultimately :-( */
+#include <ddk/wdm.h>
+
+#include <excpt.h>
+/* FIXME: #include <ntdef.h> */
+#include <ntstatus.h>
+/* FIXME: #include <bugcodes.h> */
+/* FIXME: #include <ntiologc.h> */
+
+
+typedef enum _BUS_DATA_TYPE
+{
+ ConfigurationSpaceUndefined = -1,
+ Cmos,
+ EisaConfiguration,
+ Pos,
+ CbusConfiguration,
+ PCIConfiguration,
+ VMEConfiguration,
+ NuBusConfiguration,
+ PCMCIAConfiguration,
+ MPIConfiguration,
+ MPSAConfiguration,
+ PNPISAConfiguration,
+ MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+
+typedef struct _CONFIGURATION_INFORMATION
+{
+ ULONG DiskCount;
+ ULONG FloppyCount;
+ ULONG CdRomCount;
+ ULONG TapeCount;
+ ULONG ScsiPortCount;
+ ULONG SerialCount;
+ ULONG ParallelCount;
+ BOOLEAN AtDiskPrimaryAddressClaimed;
+ BOOLEAN AtDiskSecondaryAddressClaimed;
+ ULONG Version;
+ ULONG MediumChangerCount;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
+
+typedef enum _CONFIGURATION_TYPE
+{
+ ArcSystem = 0,
+ CentralProcessor,
+ FloatingPointProcessor,
+ PrimaryIcache,
+ PrimaryDcache,
+ SecondaryIcache,
+ SecondaryDcache,
+ SecondaryCache,
+ EisaAdapter,
+ TcAdapter,
+ ScsiAdapter,
+ DtiAdapter,
+ MultiFunctionAdapter,
+ DiskController,
+ TapeController,
+ CdromController,
+ WormController,
+ SerialController,
+ NetworkController,
+ DisplayController,
+ ParallelController,
+ PointerController,
+ KeyboardController,
+ AudioController,
+ OtherController,
+ DiskPeripheral,
+ FloppyDiskPeripheral,
+ TapePeripheral,
+ ModemPeripheral,
+ MonitorPeripheral,
+ PrinterPeripheral,
+ PointerPeripheral,
+ KeyboardPeripheral,
+ TerminalPeripheral,
+ OtherPeripheral,
+ LinePeripheral,
+ NetworkPeripheral,
+ SystemMemory,
+ DockingInformation,
+ RealModeIrqRoutingTable,
+ RealModePCIEnumeration,
+ MaximunType
+} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
+
+typedef struct _IMAGE_INFO
+{
+ union
+ {
+ ULONG Properties;
+ struct
+ {
+ ULONG ImageAddressingMode : 8;
+ ULONG SystemModeImage : 1;
+ ULONG ImageMappedToAllPids : 1;
+ ULONG ExtendedInfoPresent : 1;
+ ULONG Reserved : 21;
+ };
+ };
+ PVOID ImageBase;
+ ULONG ImageSelector;
+ SIZE_T ImageSize;
+ ULONG ImageSectionNumber;
+} IMAGE_INFO, *PIMAGE_INFO;
+
+typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
+{
+ LARGE_INTEGER ValidDataLength;
+} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
+
+typedef VOID (WINAPI *PDRIVER_REINITIALIZE)(PDRIVER_OBJECT,PVOID,ULONG);
+typedef VOID (WINAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(PUNICODE_STRING,HANDLE,PIMAGE_INFO);
+typedef NTSTATUS (WINAPI *PIO_QUERY_DEVICE_ROUTINE)(PVOID,PUNICODE_STRING,INTERFACE_TYPE,ULONG,
+ PKEY_VALUE_FULL_INFORMATION*,CONFIGURATION_TYPE,ULONG,PKEY_VALUE_FULL_INFORMATION*);
+
+NTSTATUS WINAPI IoQueryDeviceDescription(PINTERFACE_TYPE,PULONG,PCONFIGURATION_TYPE,PULONG,
+ PCONFIGURATION_TYPE,PULONG,PIO_QUERY_DEVICE_ROUTINE,PVOID);
+void WINAPI IoRegisterDriverReinitialization(PDRIVER_OBJECT,PDRIVER_REINITIALIZE,PVOID);
+NTSTATUS WINAPI IoRegisterShutdownNotification(PDEVICE_OBJECT);
+NTSTATUS WINAPI PsSetLoadImageNotifyRoutine(PLOAD_IMAGE_NOTIFY_ROUTINE);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h
new file mode 100644
index 00000000..8204b1e0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddser.h
@@ -0,0 +1,407 @@
+/*
+ * DDK definitions for serial port
+ *
+ * Copyright (C) 2006 Eric Pouech
+ * From w32api package
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDSER_H_
+#define _NTDDSER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_SERIAL_CLEAR_STATS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 36, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CLR_DTR \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CLR_RTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_CONFIG_SIZE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_BAUD_RATE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_CHARS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_COMMSTATUS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 27, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_DTRRTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_HANDFLOW \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_LINE_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_MODEM_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_MODEMSTATUS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_PROPERTIES \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_STATS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 35, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_TIMEOUTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_GET_WAIT_MASK \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_IMMEDIATE_CHAR \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#ifndef IOCTL_SERIAL_LSRMST_INSERT
+/* it's already defined in winioctl.h */
+#define IOCTL_SERIAL_LSRMST_INSERT \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#endif
+#define IOCTL_SERIAL_PURGE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_RESET_DEVICE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BAUD_RATE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BREAK_ON \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_BREAK_OFF \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_CHARS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_DTR \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_FIFO_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_HANDFLOW \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_LINE_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_MODEM_CONTROL \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_QUEUE_SIZE \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_RTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_TIMEOUTS \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_WAIT_MASK \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_XOFF \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_SET_XON \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_WAIT_ON_MASK \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SERIAL_XOFF_COUNTER \
+ CTL_CODE (FILE_DEVICE_SERIAL_PORT, 28, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef struct _SERIAL_BAUD_RATE
+{
+ ULONG BaudRate;
+} SERIAL_BAUD_RATE, *PSERIAL_BAUD_RATE;
+
+/* SERIAL_BAUD_RATE.BaudRate constants */
+#define SERIAL_BAUD_075 0x00000001
+#define SERIAL_BAUD_110 0x00000002
+#define SERIAL_BAUD_134_5 0x00000004
+#define SERIAL_BAUD_150 0x00000008
+#define SERIAL_BAUD_300 0x00000010
+#define SERIAL_BAUD_600 0x00000020
+#define SERIAL_BAUD_1200 0x00000040
+#define SERIAL_BAUD_1800 0x00000080
+#define SERIAL_BAUD_2400 0x00000100
+#define SERIAL_BAUD_4800 0x00000200
+#define SERIAL_BAUD_7200 0x00000400
+#define SERIAL_BAUD_9600 0x00000800
+#define SERIAL_BAUD_14400 0x00001000
+#define SERIAL_BAUD_19200 0x00002000
+#define SERIAL_BAUD_38400 0x00004000
+#define SERIAL_BAUD_56K 0x00008000
+#define SERIAL_BAUD_128K 0x00010000
+#define SERIAL_BAUD_115200 0x00020000
+#define SERIAL_BAUD_57600 0x00040000
+#define SERIAL_BAUD_USER 0x10000000
+
+typedef struct _SERIAL_CHARS
+{
+ UCHAR EofChar;
+ UCHAR ErrorChar;
+ UCHAR BreakChar;
+ UCHAR EventChar;
+ UCHAR XonChar;
+ UCHAR XoffChar;
+} SERIAL_CHARS, *PSERIAL_CHARS;
+
+typedef struct _SERIAL_STATUS
+{
+ ULONG Errors;
+ ULONG HoldReasons;
+ ULONG AmountInInQueue;
+ ULONG AmountInOutQueue;
+ BOOLEAN EofReceived;
+ BOOLEAN WaitForImmediate;
+} SERIAL_STATUS, *PSERIAL_STATUS;
+
+typedef struct _SERIAL_HANDFLOW
+{
+ ULONG ControlHandShake;
+ ULONG FlowReplace;
+ LONG XonLimit;
+ LONG XoffLimit;
+} SERIAL_HANDFLOW, *PSERIAL_HANDFLOW;
+
+#define SERIAL_DTR_MASK 0x00000003
+#define SERIAL_DTR_CONTROL 0x00000001
+#define SERIAL_DTR_HANDSHAKE 0x00000002
+#define SERIAL_CTS_HANDSHAKE 0x00000008
+#define SERIAL_DSR_HANDSHAKE 0x00000010
+#define SERIAL_DCD_HANDSHAKE 0x00000020
+#define SERIAL_OUT_HANDSHAKEMASK 0x00000038
+#define SERIAL_DSR_SENSITIVITY 0x00000040
+#define SERIAL_ERROR_ABORT 0x80000000
+#define SERIAL_CONTROL_INVALID 0x7fffff84
+#define SERIAL_AUTO_TRANSMIT 0x00000001
+#define SERIAL_AUTO_RECEIVE 0x00000002
+#define SERIAL_ERROR_CHAR 0x00000004
+#define SERIAL_NULL_STRIPPING 0x00000008
+#define SERIAL_BREAK_CHAR 0x00000010
+#define SERIAL_RTS_MASK 0x000000c0
+#define SERIAL_RTS_CONTROL 0x00000040
+#define SERIAL_RTS_HANDSHAKE 0x00000080
+#define SERIAL_TRANSMIT_TOGGLE 0x000000c0
+#define SERIAL_XOFF_CONTINUE 0x80000000
+#define SERIAL_FLOW_INVALID 0x7fffff20
+
+typedef struct _SERIAL_LINE_CONTROL
+{
+ UCHAR StopBits;
+ UCHAR Parity;
+ UCHAR WordLength;
+} SERIAL_LINE_CONTROL, *PSERIAL_LINE_CONTROL;
+
+/* SERIAL_LINE_CONTROL.StopBits constants */
+#define STOP_BIT_1 0x00
+#define STOP_BITS_1_5 0x01
+#define STOP_BITS_2 0x02
+
+/* SERIAL_LINE_CONTROL.Parity constants */
+#define NO_PARITY 0x00
+#define ODD_PARITY 0x01
+#define EVEN_PARITY 0x02
+#define MARK_PARITY 0x03
+#define SPACE_PARITY 0x04
+
+/* IOCTL_SERIAL_(GET_MODEM_CONTROL, SET_MODEM_CONTROL) flags */
+#define SERIAL_IOC_MCR_DTR 0x00000001
+#define SERIAL_IOC_MCR_RTS 0x00000002
+#define SERIAL_IOC_MCR_OUT1 0x00000004
+#define SERIAL_IOC_MCR_OUT2 0x00000008
+#define SERIAL_IOC_MCR_LOOP 0x00000010
+
+typedef struct _SERIAL_COMMPROP
+{
+ USHORT PacketLength;
+ USHORT PacketVersion;
+ ULONG ServiceMask;
+ ULONG Reserved1;
+ ULONG MaxTxQueue;
+ ULONG MaxRxQueue;
+ ULONG MaxBaud;
+ ULONG ProvSubType;
+ ULONG ProvCapabilities;
+ ULONG SettableParams;
+ ULONG SettableBaud;
+ USHORT SettableData;
+ USHORT SettableStopParity;
+ ULONG CurrentTxQueue;
+ ULONG CurrentRxQueue;
+ ULONG ProvSpec1;
+ ULONG ProvSpec2;
+ WCHAR ProvChar[1];
+} SERIAL_COMMPROP, *PSERIAL_COMMPROP;
+
+/* SERIAL_COMMPROP.SettableParams flags */
+#define SERIAL_SP_PARITY 0x0001
+#define SERIAL_SP_BAUD 0x0002
+#define SERIAL_SP_DATABITS 0x0004
+#define SERIAL_SP_STOPBITS 0x0008
+#define SERIAL_SP_HANDSHAKING 0x0010
+#define SERIAL_SP_PARITY_CHECK 0x0020
+#define SERIAL_SP_CARRIER_DETECT 0x0040
+
+/* SERIAL_COMMPROP.ProvCapabilities flags */
+#define SERIAL_PCF_DTRDSR 0x00000001
+#define SERIAL_PCF_RTSCTS 0x00000002
+#define SERIAL_PCF_CD 0x00000004
+#define SERIAL_PCF_PARITY_CHECK 0x00000008
+#define SERIAL_PCF_XONXOFF 0x00000010
+#define SERIAL_PCF_SETXCHAR 0x00000020
+#define SERIAL_PCF_TOTALTIMEOUTS 0x00000040
+#define SERIAL_PCF_INTTIMEOUTS 0x00000080
+#define SERIAL_PCF_SPECIALCHARS 0x00000100
+#define SERIAL_PCF_16BITMODE 0x00000200
+
+/* SERIAL_COMMPROP.SettableData flags */
+#define SERIAL_DATABITS_5 0x0001
+#define SERIAL_DATABITS_6 0x0002
+#define SERIAL_DATABITS_7 0x0004
+#define SERIAL_DATABITS_8 0x0008
+#define SERIAL_DATABITS_16 0x0010
+#define SERIAL_DATABITS_16X 0x0020
+
+/* SERIAL_COMMPROP.SettableStopParity flags */
+#define SERIAL_STOPBITS_10 0x0001
+#define SERIAL_STOPBITS_15 0x0002
+#define SERIAL_STOPBITS_20 0x0004
+#define SERIAL_PARITY_NONE 0x0100
+#define SERIAL_PARITY_ODD 0x0200
+#define SERIAL_PARITY_EVEN 0x0400
+#define SERIAL_PARITY_MARK 0x0800
+#define SERIAL_PARITY_SPACE 0x1000
+
+typedef struct _SERIALPERF_STATS
+{
+ ULONG ReceivedCount;
+ ULONG TransmittedCount;
+ ULONG FrameErrorCount;
+ ULONG SerialOverrunErrorCount;
+ ULONG BufferOverrunErrorCount;
+ ULONG ParityErrorCount;
+} SERIALPERF_STATS, *PSERIALPERF_STATS;
+
+typedef struct _SERIAL_TIMEOUTS
+{
+ ULONG ReadIntervalTimeout;
+ ULONG ReadTotalTimeoutMultiplier;
+ ULONG ReadTotalTimeoutConstant;
+ ULONG WriteTotalTimeoutMultiplier;
+ ULONG WriteTotalTimeoutConstant;
+} SERIAL_TIMEOUTS, *PSERIAL_TIMEOUTS;
+
+/* IOCTL_SERIAL_(GET_WAIT_MASK, SET_WAIT_MASK, WAIT_ON_MASK) flags */
+#define SERIAL_EV_RXCHAR 0x0001
+#define SERIAL_EV_RXFLAG 0x0002
+#define SERIAL_EV_TXEMPTY 0x0004
+#define SERIAL_EV_CTS 0x0008
+#define SERIAL_EV_DSR 0x0010
+#define SERIAL_EV_RLSD 0x0020
+#define SERIAL_EV_BREAK 0x0040
+#define SERIAL_EV_ERR 0x0080
+#define SERIAL_EV_RING 0x0100
+#define SERIAL_EV_PERR 0x0200
+#define SERIAL_EV_RX80FULL 0x0400
+#define SERIAL_EV_EVENT1 0x0800
+#define SERIAL_EV_EVENT2 0x1000
+
+/* IOCTL_SERIAL_LSRMST_INSERT constants */
+#define SERIAL_LSRMST_LSR_DATA 0x01
+#define SERIAL_LSRMST_LSR_NODATA 0x02
+#define SERIAL_LSRMST_MST 0x03
+#define SERIAL_LSRMST_ESCAPE 0x00
+
+/* IOCTL_SERIAL_PURGE constants */
+#define SERIAL_PURGE_TXABORT 0x00000001
+#define SERIAL_PURGE_RXABORT 0x00000002
+#define SERIAL_PURGE_TXCLEAR 0x00000004
+#define SERIAL_PURGE_RXCLEAR 0x00000008
+
+/* IOCTL_SERIAL_SET_FIFO_CONTROL constants */
+#define SERIAL_IOC_FCR_FIFO_ENABLE 0x00000001
+#define SERIAL_IOC_FCR_RCVR_RESET 0x00000002
+#define SERIAL_IOC_FCR_XMIT_RESET 0x00000004
+#define SERIAL_IOC_FCR_DMA_MODE 0x00000008
+#define SERIAL_IOC_FCR_RES1 0x00000010
+#define SERIAL_IOC_FCR_RES2 0x00000020
+#define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB 0x00000040
+#define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB 0x00000080
+
+typedef struct _SERIAL_QUEUE_SIZE
+{
+ ULONG InSize;
+ ULONG OutSize;
+} SERIAL_QUEUE_SIZE, *PSERIAL_QUEUE_SIZE;
+
+typedef struct _SERIAL_XOFF_COUNTER
+{
+ ULONG Timeout;
+ LONG Counter;
+ UCHAR XoffChar;
+} SERIAL_XOFF_COUNTER, *PSERIAL_XOFF_COUNTER;
+
+typedef struct _SERIAL_BASIC_SETTINGS
+{
+ SERIAL_TIMEOUTS Timeouts;
+ SERIAL_HANDFLOW HandFlow;
+ ULONG RxFifo;
+ ULONG TxFifo;
+} SERIAL_BASIC_SETTINGS, *PSERIAL_BASIC_SETTINGS;
+
+#define SERIAL_ERROR_BREAK 0x00000001
+#define SERIAL_ERROR_FRAMING 0x00000002
+#define SERIAL_ERROR_OVERRUN 0x00000004
+#define SERIAL_ERROR_QUEUEOVERRUN 0x00000008
+#define SERIAL_ERROR_PARITY 0x00000010
+
+#define SERIAL_SP_UNSPECIFIED 0x00000000
+#define SERIAL_SP_RS232 0x00000001
+#define SERIAL_SP_PARALLEL 0x00000002
+#define SERIAL_SP_RS422 0x00000003
+#define SERIAL_SP_RS423 0x00000004
+#define SERIAL_SP_RS449 0x00000005
+#define SERIAL_SP_MODEM 0X00000006
+#define SERIAL_SP_FAX 0x00000021
+#define SERIAL_SP_SCANNER 0x00000022
+#define SERIAL_SP_BRIDGE 0x00000100
+#define SERIAL_SP_LAT 0x00000101
+#define SERIAL_SP_TELNET 0x00000102
+#define SERIAL_SP_X25 0x00000103
+#define SERIAL_SP_SERIALCOMM 0x00000001
+
+#define SERIAL_TX_WAITING_FOR_CTS 0x00000001
+#define SERIAL_TX_WAITING_FOR_DSR 0x00000002
+#define SERIAL_TX_WAITING_FOR_DCD 0x00000004
+#define SERIAL_TX_WAITING_FOR_XON 0x00000008
+#define SERIAL_TX_WAITING_XOFF_SENT 0x00000010
+#define SERIAL_TX_WAITING_ON_BREAK 0x00000020
+#define SERIAL_RX_WAITING_FOR_DSR 0x00000040
+
+#define SERIAL_DTR_STATE 0x00000001
+#define SERIAL_RTS_STATE 0x00000002
+#define SERIAL_CTS_STATE 0x00000010
+#define SERIAL_DSR_STATE 0x00000020
+#define SERIAL_RI_STATE 0x00000040
+#define SERIAL_DCD_STATE 0x00000080
+
+typedef struct _SERIALCONFIG
+{
+ ULONG Size;
+ USHORT Version;
+ ULONG SubType;
+ ULONG ProvOffset;
+ ULONG ProviderSize;
+ WCHAR ProviderData[1];
+} SERIALCONFIG,*PSERIALCONFIG;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDSER_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h
new file mode 100644
index 00000000..c7fa2f4f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/ntddtape.h
@@ -0,0 +1,59 @@
+/*
+ * DDK definitions for tape access
+ *
+ * Copyright (C) 2006 Hans Leidekker
+ * Based on the w32api version by Casper S. Hornstrup.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDTAPE_H_
+#define _NTDDTAPE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_TAPE_BASE FILE_DEVICE_TAPE
+
+#define IOCTL_TAPE_CHECK_VERIFY CTL_CODE(IOCTL_TAPE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_CREATE_PARTITION CTL_CODE(IOCTL_TAPE_BASE, 0x000a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_ERASE CTL_CODE(IOCTL_TAPE_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_DRIVE_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_MEDIA_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_POSITION CTL_CODE(IOCTL_TAPE_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_GET_STATUS CTL_CODE(IOCTL_TAPE_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS )
+
+#define IOCTL_TAPE_PREPARE CTL_CODE(IOCTL_TAPE_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_DRIVE_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_TAPE_SET_MEDIA_PARAMS CTL_CODE(IOCTL_TAPE_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_SET_POSITION CTL_CODE(IOCTL_TAPE_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_TAPE_WRITE_MARKS CTL_CODE(IOCTL_TAPE_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDTAPE_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h
new file mode 100644
index 00000000..a89ea5d6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb.h
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USB_H__
+#define __DDK_USB_H__
+
+#include <ddk/usb200.h>
+
+#define URB_FUNCTION_SELECT_CONFIGURATION 0x0000
+#define URB_FUNCTION_SELECT_INTERFACE 0x0001
+#define URB_FUNCTION_ABORT_PIPE 0x0002
+#define URB_FUNCTION_TAKE_FRAME_LENGTH_CONTROL 0x0003
+#define URB_FUNCTION_RELEASE_FRAME_LENGTH_CONTROL 0x0004
+#define URB_FUNCTION_GET_FRAME_LENGTH 0x0005
+#define URB_FUNCTION_SET_FRAME_LENGTH 0x0006
+#define URB_FUNCTION_GET_CURRENT_FRAME_NUMBER 0x0007
+#define URB_FUNCTION_CONTROL_TRANSFER 0x0008
+#define URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER 0x0009
+#define URB_FUNCTION_ISOCH_TRANSFER 0x000A
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE 0x000B
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_DEVICE 0x000C
+#define URB_FUNCTION_SET_FEATURE_TO_DEVICE 0x000D
+#define URB_FUNCTION_SET_FEATURE_TO_INTERFACE 0x000E
+#define URB_FUNCTION_SET_FEATURE_TO_ENDPOINT 0x000F
+#define URB_FUNCTION_CLEAR_FEATURE_TO_DEVICE 0x0010
+#define URB_FUNCTION_CLEAR_FEATURE_TO_INTERFACE 0x0011
+#define URB_FUNCTION_CLEAR_FEATURE_TO_ENDPOINT 0x0012
+#define URB_FUNCTION_GET_STATUS_FROM_DEVICE 0x0013
+#define URB_FUNCTION_GET_STATUS_FROM_INTERFACE 0x0014
+#define URB_FUNCTION_GET_STATUS_FROM_ENDPOINT 0x0015
+#define URB_FUNCTION_RESERVED_0X0016 0x0016
+#define URB_FUNCTION_VENDOR_DEVICE 0x0017
+#define URB_FUNCTION_VENDOR_INTERFACE 0x0018
+#define URB_FUNCTION_VENDOR_ENDPOINT 0x0019
+#define URB_FUNCTION_CLASS_DEVICE 0x001A
+#define URB_FUNCTION_CLASS_INTERFACE 0x001B
+#define URB_FUNCTION_CLASS_ENDPOINT 0x001C
+#define URB_FUNCTION_RESERVE_0X001D 0x001D
+#define URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL 0x001E
+#define URB_FUNCTION_CLASS_OTHER 0x001F
+#define URB_FUNCTION_VENDOR_OTHER 0x0020
+#define URB_FUNCTION_GET_STATUS_FROM_OTHER 0x0021
+#define URB_FUNCTION_CLEAR_FEATURE_TO_OTHER 0x0022
+#define URB_FUNCTION_SET_FEATURE_TO_OTHER 0x0023
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_ENDPOINT 0x0024
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_ENDPOINT 0x0025
+#define URB_FUNCTION_GET_CONFIGURATION 0x0026
+#define URB_FUNCTION_GET_INTERFACE 0x0027
+#define URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE 0x0028
+#define URB_FUNCTION_SET_DESCRIPTOR_TO_INTERFACE 0x0029
+#define URB_FUNCTION_GET_MS_FEATURE_DESCRIPTOR 0x002A
+#define URB_FUNCTION_RESERVE_0X002B 0x002B
+#define URB_FUNCTION_RESERVE_0X002C 0x002C
+#define URB_FUNCTION_RESERVE_0X002D 0x002D
+#define URB_FUNCTION_RESERVE_0X002E 0x002E
+#define URB_FUNCTION_RESERVE_0X002F 0x002F
+#define URB_FUNCTION_SYNC_RESET_PIPE 0x0030
+#define URB_FUNCTION_SYNC_CLEAR_STALL 0x0031
+
+#define USBD_SHORT_TRANSFER_OK 0x00000002
+#define USBD_TRANSFER_DIRECTION_OUT 0
+#define USBD_TRANSFER_DIRECTION_IN 1
+
+typedef LONG USBD_STATUS;
+
+typedef PVOID USBD_PIPE_HANDLE;
+typedef PVOID USBD_CONFIGURATION_HANDLE;
+typedef PVOID USBD_INTERFACE_HANDLE;
+
+#define USBD_STATUS_SUCCESS ((USBD_STATUS)0x00000000)
+#define USBD_STATUS_PENDING ((USBD_STATUS)0x40000000)
+#define USBD_STATUS_ERROR ((USBD_STATUS)0x80000000)
+#define USBD_STATUS_HALTED ((USBD_STATUS)0xC0000000)
+
+#define USBD_STATUS_CANCELED ((USBD_STATUS)0x00010000)
+#define USBD_STATUS_CANCELING ((USBD_STATUS)0x00020000)
+#define USBD_STATUS_CRC ((USBD_STATUS)0xC0000001)
+#define USBD_STATUS_BTSTUFF ((USBD_STATUS)0xC0000002)
+#define USBD_STATUS_DATA_TOGGLE_MISMATCH ((USBD_STATUS)0xC0000003)
+#define USBD_STATUS_STALL_PID ((USBD_STATUS)0xC0000004)
+#define USBD_STATUS_DEV_NOT_RESPONDING ((USBD_STATUS)0xC0000005)
+#define USBD_STATUS_PID_CHECK_FAILURE ((USBD_STATUS)0xC0000006)
+#define USBD_STATUS_UNEXPECTED_PID ((USBD_STATUS)0xC0000007)
+#define USBD_STATUS_DATA_OVERRUN ((USBD_STATUS)0xC0000008)
+#define USBD_STATUS_DATA_UNDERRUN ((USBD_STATUS)0xC0000009)
+#define USBD_STATUS_RESERVED1 ((USBD_STATUS)0xC000000A)
+#define USBD_STATUS_RESERVED2 ((USBD_STATUS)0xC000000B)
+#define USBD_STATUS_BUFFER_OVERRUN ((USBD_STATUS)0xC000000C)
+#define USBD_STATUS_BUFFER_UNDERRUN ((USBD_STATUS)0xC000000D)
+#define USBD_STATUS_NOT_ACCESSED ((USBD_STATUS)0xC000000F)
+#define USBD_STATUS_FIFO ((USBD_STATUS)0xC0000010)
+#define USBD_STATUS_XACT_ERROR ((USBD_STATUS)0xC0000011)
+#define USBD_STATUS_BABBLE_DETECTED ((USBD_STATUS)0xC0000012)
+#define USBD_STATUS_DATA_BUFFER_ERROR ((USBD_STATUS)0xC0000013)
+#define USBD_STATUS_ENDPOINT_HALTED ((USBD_STATUS)0xC0000030)
+#define USBD_STATUS_NO_MEMORY ((USBD_STATUS)0x80000100)
+#define USBD_STATUS_INVALID_URB_FUNCTION ((USBD_STATUS)0x80000200)
+#define USBD_STATUS_INVALID_PARAMETER ((USBD_STATUS)0x80000300)
+#define USBD_STATUS_ERROR_BUSY ((USBD_STATUS)0x80000400)
+#define USBD_STATUS_REQUEST_FAILED ((USBD_STATUS)0x80000500)
+#define USBD_STATUS_INVALID_PIPE_HANDLE ((USBD_STATUS)0x80000600)
+#define USBD_STATUS_NO_BANDWIDTH ((USBD_STATUS)0x80000700)
+#define USBD_STATUS_INTERNAL_HC_ERROR ((USBD_STATUS)0x80000800)
+#define USBD_STATUS_ERROR_SHORT_TRANSFER ((USBD_STATUS)0x80000900)
+#define USBD_STATUS_BAD_START_FRAME ((USBD_STATUS)0xC0000A00)
+#define USBD_STATUS_ISOCH_REQUEST_FAILED ((USBD_STATUS)0xC0000B00)
+#define USBD_STATUS_FRAME_CONTROL_OWNED ((USBD_STATUS)0xC0000C00)
+#define USBD_STATUS_FRAME_CONTROL_NOT_OWNED ((USBD_STATUS)0xC0000D00)
+#define USBD_STATUS_NOT_SUPPORTED ((USBD_STATUS)0xC0000E00)
+#define USBD_STATUS_INVALID_CONFIGURATION_DESCRIPTOR ((USBD_STATUS)0xC0000F00)
+#define USBD_STATUS_INSUFFICIENT_RESOURCES ((USBD_STATUS)0xC0001000)
+#define USBD_STATUS_SET_CONFIG_FAILED ((USBD_STATUS)0xC0002000)
+#define USBD_STATUS_BUFFER_TOO_SMALL ((USBD_STATUS)0xC0003000)
+#define USBD_STATUS_INTERFACE_NOT_FOUND ((USBD_STATUS)0xC0004000)
+#define USBD_STATUS_INVALID_PIPE_FLAGS ((USBD_STATUS)0xC0005000)
+#define USBD_STATUS_TIMEOUT ((USBD_STATUS)0xC0006000)
+#define USBD_STATUS_DEVICE_GONE ((USBD_STATUS)0xC0007000)
+#define USBD_STATUS_STATUS_NOT_MAPPED ((USBD_STATUS)0xC0008000)
+#define USBD_STATUS_ISO_NOT_ACCESSED_BY_HW ((USBD_STATUS)0xC0020000)
+#define USBD_STATUS_ISO_TD_ERROR ((USBD_STATUS)0xC0030000)
+#define USBD_STATUS_ISO_NA_LATE_USBPORT ((USBD_STATUS)0xC0040000)
+#define USBD_STATUS_ISO_NOT_ACCESSED_LATE ((USBD_STATUS)0xC0050000)
+
+#define USBD_SUCCESS(Status) ((USBD_STATUS)(Status) >= 0)
+#define USBD_PENDING(Status) ((ULONG)(Status) >> 30 == 1)
+#define USBD_ERROR(Status) ((USBD_STATUS)(Status) < 0)
+
+typedef struct _USBD_VERSION_INFORMATION {
+ ULONG USBDI_Version;
+ ULONG Supported_USB_Version;
+} USBD_VERSION_INFORMATION;
+typedef struct _USBD_VERSION_INFORMATION *PUSBD_VERSION_INFORMATION;
+
+typedef enum _USBD_PIPE_TYPE {
+ UsbdPipeTypeControl,
+ UsbdPipeTypeIsochronous,
+ UsbdPipeTypeBulk,
+ UsbdPipeTypeInterrupt
+} USBD_PIPE_TYPE;
+
+typedef struct _USBD_PIPE_INFORMATION {
+ USHORT MaximumPacketSize;
+ UCHAR EndpointAddress;
+ UCHAR Interval;
+ USBD_PIPE_TYPE PipeType;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG MaximumTransferSize;
+ ULONG PipeFlags;
+} USBD_PIPE_INFORMATION;
+typedef struct _USBD_PIPE_INFORMATION *PUSBD_PIPE_INFORMATION;
+
+typedef struct _USBD_INTERFACE_INFORMATION {
+ USHORT Length;
+ UCHAR InterfaceNumber;
+ UCHAR AlternateSetting;
+ UCHAR Class;
+ UCHAR SubClass;
+ UCHAR Protocol;
+ UCHAR Reserved;
+ USBD_INTERFACE_HANDLE InterfaceHandle;
+ ULONG NumberOfPipes;
+ USBD_PIPE_INFORMATION Pipes[1];
+} USBD_INTERFACE_INFORMATION;
+typedef struct _USBD_INTERFACE_INFORMATION *PUSBD_INTERFACE_INFORMATION;
+
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR {
+ ULONG Offset;
+ ULONG Length;
+ USBD_STATUS Status;
+} USBD_ISO_PACKET_DESCRIPTOR;
+typedef struct _USBD_ISO_PACKET_DESCRIPTOR *PUSBD_ISO_PACKET_DESCRIPTOR;
+
+struct _URB_HCD_AREA {
+ PVOID Reserved8[8];
+};
+
+struct _URB_HEADER {
+ USHORT Length;
+ USHORT Function;
+ USBD_STATUS Status;
+ PVOID UsbdDeviceHandle;
+ ULONG UsbdFlags;
+};
+
+struct _URB_SELECT_INTERFACE {
+ struct _URB_HEADER Hdr;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_SELECT_CONFIGURATION {
+ struct _URB_HEADER Hdr;
+ PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
+ USBD_CONFIGURATION_HANDLE ConfigurationHandle;
+ USBD_INTERFACE_INFORMATION Interface;
+};
+
+struct _URB_PIPE_REQUEST {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG Reserved;
+};
+
+struct _URB_FRAME_LENGTH_CONTROL {
+ struct _URB_HEADER Hdr;
+};
+
+struct _URB_GET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr;
+ ULONG FrameLength;
+ ULONG FrameNumber;
+};
+
+struct _URB_SET_FRAME_LENGTH {
+ struct _URB_HEADER Hdr;
+ LONG FrameLengthDelta;
+};
+
+struct _URB_GET_CURRENT_FRAME_NUMBER {
+ struct _URB_HEADER Hdr;
+ ULONG FrameNumber;
+};
+
+struct _URB_CONTROL_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR SetupPacket[8];
+};
+
+struct _URB_BULK_OR_INTERRUPT_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+};
+
+struct _URB_ISOCH_TRANSFER {
+ struct _URB_HEADER Hdr;
+ USBD_PIPE_HANDLE PipeHandle;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ ULONG StartFrame;
+ ULONG NumberOfPackets;
+ ULONG ErrorCount;
+ USBD_ISO_PACKET_DESCRIPTOR IsoPacket[1];
+};
+
+struct _URB_CONTROL_DESCRIPTOR_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ USHORT Reserved1;
+ UCHAR Index;
+ UCHAR DescriptorType;
+ USHORT LanguageId;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_STATUS_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[4];
+ USHORT Index;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_FEATURE_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved2;
+ ULONG Reserved3;
+ PVOID Reserved4;
+ PMDL Reserved5;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ USHORT Reserved0;
+ USHORT FeatureSelector;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG TransferFlags;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR RequestTypeReservedBits;
+ UCHAR Request;
+ USHORT Value;
+ USHORT Index;
+ USHORT Reserved1;
+};
+
+struct _URB_CONTROL_GET_INTERFACE_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[4];
+ USHORT Interface;
+ USHORT Reserved2;
+};
+
+struct _URB_CONTROL_GET_CONFIGURATION_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Reserved1[8];
+};
+
+struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST {
+ struct _URB_HEADER Hdr;
+ PVOID Reserved;
+ ULONG Reserved0;
+ ULONG TransferBufferLength;
+ PVOID TransferBuffer;
+ PMDL TransferBufferMDL;
+ struct _URB *UrbLink;
+ struct _URB_HCD_AREA hca;
+ UCHAR Recipient:5;
+ UCHAR Reserved1:3;
+ UCHAR Reserved2;
+ UCHAR InterfaceNumber;
+ UCHAR MS_PageIndex;
+ USHORT MS_FeatureDescriptorIndex;
+ USHORT Reserved3;
+};
+
+typedef struct _URB {
+ union {
+ struct _URB_HEADER UrbHeader;
+ struct _URB_SELECT_INTERFACE UrbSelectInterface;
+ struct _URB_SELECT_CONFIGURATION UrbSelectConfiguration;
+ struct _URB_PIPE_REQUEST UrbPipeRequest;
+ struct _URB_FRAME_LENGTH_CONTROL UrbFrameLengthControl;
+ struct _URB_GET_FRAME_LENGTH UrbGetFrameLength;
+ struct _URB_SET_FRAME_LENGTH UrbSetFrameLength;
+ struct _URB_GET_CURRENT_FRAME_NUMBER UrbGetCurrentFrameNumber;
+ struct _URB_CONTROL_TRANSFER UrbControlTransfer;
+ struct _URB_BULK_OR_INTERRUPT_TRANSFER UrbBulkOrInterruptTransfer;
+ struct _URB_ISOCH_TRANSFER UrbIsochronousTransfer;
+ struct _URB_CONTROL_DESCRIPTOR_REQUEST UrbControlDescriptorRequest;
+ struct _URB_CONTROL_GET_STATUS_REQUEST UrbControlGetStatusRequest;
+ struct _URB_CONTROL_FEATURE_REQUEST UrbControlFeatureRequest;
+ struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST UrbControlVendorClassRequest;
+ struct _URB_CONTROL_GET_INTERFACE_REQUEST UrbControlGetInterfaceRequest;
+ struct _URB_CONTROL_GET_CONFIGURATION_REQUEST UrbControlGetConfigurationRequest;
+ struct _URB_OS_FEATURE_DESCRIPTOR_REQUEST UrbOSFeatureDescriptorRequest;
+ } DUMMYUNIONNAME;
+} URB;
+typedef struct _URB *PURB;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h
new file mode 100644
index 00000000..b5c22fe0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb100.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USB100_H__
+#define __DDK_USB100_H__
+
+#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
+#define USB_STRING_DESCRIPTOR_TYPE 0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
+#define USB_RESERVED_DESCRIPTOR_TYPE 0x06
+#define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07
+#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
+
+#include <pshpack1.h>
+
+typedef struct _USB_DEVICE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT bcdUSB;
+ UCHAR bDeviceClass;
+ UCHAR bDeviceSubClass;
+ UCHAR bDeviceProtocol;
+ UCHAR bMaxPacketSize0;
+ USHORT idVendor;
+ USHORT idProduct;
+ USHORT bcdDevice;
+ UCHAR iManufacturer;
+ UCHAR iProduct;
+ UCHAR iSerialNumber;
+ UCHAR bNumConfigurations;
+} USB_DEVICE_DESCRIPTOR;
+typedef struct _USB_DEVICE_DESCRIPTOR *PUSB_DEVICE_DESCRIPTOR;
+
+#define USB_ENDPOINT_TYPE_MASK 0x03
+#define USB_ENDPOINT_TYPE_CONTROL 0x00
+#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
+#define USB_ENDPOINT_TYPE_BULK 0x02
+#define USB_ENDPOINT_TYPE_INTERRUPT 0x03
+
+typedef struct _USB_ENDPOINT_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bEndpointAddress;
+ UCHAR bmAttributes;
+ USHORT wMaxPacketSize;
+ UCHAR bInterval;
+} USB_ENDPOINT_DESCRIPTOR;
+typedef struct _USB_ENDPOINT_DESCRIPTOR *PUSB_ENDPOINT_DESCRIPTOR;
+
+typedef struct _USB_CONFIGURATION_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ USHORT wTotalLength;
+ UCHAR bNumInterfaces;
+ UCHAR bConfigurationValue;
+ UCHAR iConfiguration;
+ UCHAR bmAttributes;
+ UCHAR MaxPower;
+} USB_CONFIGURATION_DESCRIPTOR;
+typedef struct _USB_CONFIGURATION_DESCRIPTOR *PUSB_CONFIGURATION_DESCRIPTOR;
+
+typedef struct _USB_INTERFACE_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ UCHAR bInterfaceNumber;
+ UCHAR bAlternateSetting;
+ UCHAR bNumEndpoints;
+ UCHAR bInterfaceClass;
+ UCHAR bInterfaceSubClass;
+ UCHAR bInterfaceProtocol;
+ UCHAR iInterface;
+} USB_INTERFACE_DESCRIPTOR;
+typedef struct _USB_INTERFACE_DESCRIPTOR *PUSB_INTERFACE_DESCRIPTOR;
+
+typedef struct _USB_STRING_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+ WCHAR bString[1];
+} USB_STRING_DESCRIPTOR;
+typedef struct _USB_STRING_DESCRIPTOR *PUSB_STRING_DESCRIPTOR;
+
+typedef struct _USB_COMMON_DESCRIPTOR {
+ UCHAR bLength;
+ UCHAR bDescriptorType;
+} USB_COMMON_DESCRIPTOR;
+typedef struct _USB_COMMON_DESCRIPTOR *PUSB_COMMON_DESCRIPTOR;
+
+typedef struct _USB_HUB_DESCRIPTOR {
+ UCHAR bDescriptorLength;
+ UCHAR bDescriptorType;
+ UCHAR bNumberOfPorts;
+ USHORT wHubCharacteristics;
+ UCHAR bPowerOnToPowerGood;
+ UCHAR bHubControlCurrent;
+ UCHAR bRemoveAndPowerMask[64];
+} USB_HUB_DESCRIPTOR;
+typedef struct _USB_HUB_DESCRIPTOR *PUSB_HUB_DESCRIPTOR;
+
+#include <poppack.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h
new file mode 100644
index 00000000..d5119703
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usb200.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USB200_H__
+#define __DDK_USB200_H__
+
+#include <ddk/usb100.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h
new file mode 100644
index 00000000..843f7f27
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbdlib.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USBDLIB_H__
+#define __DDK_USBDLIB_H__
+
+typedef struct _USBD_INTERFACE_LIST_ENTRY {
+ PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
+ PUSBD_INTERFACE_INFORMATION Interface;
+} USBD_INTERFACE_LIST_ENTRY;
+typedef struct _USBD_INTERFACE_LIST_ENTRY *PUSBD_INTERFACE_LIST_ENTRY;
+
+PURB WINAPI USBD_CreateConfigurationRequest(PUSB_CONFIGURATION_DESCRIPTOR,PUSHORT);
+PURB WINAPI USBD_CreateConfigurationRequestEx(PUSB_CONFIGURATION_DESCRIPTOR,PUSBD_INTERFACE_LIST_ENTRY);
+ULONG WINAPI USBD_GetInterfaceLength(PUSB_INTERFACE_DESCRIPTOR,PUCHAR);
+VOID WINAPI USBD_GetUSBDIVersion(PUSBD_VERSION_INFORMATION);
+PUSB_COMMON_DESCRIPTOR WINAPI USBD_ParseDescriptors(PVOID,ULONG,PVOID,LONG);
+PUSB_INTERFACE_DESCRIPTOR WINAPI USBD_ParseConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR,UCHAR,UCHAR);
+PUSB_INTERFACE_DESCRIPTOR WINAPI USBD_ParseConfigurationDescriptorEx(PUSB_CONFIGURATION_DESCRIPTOR,PVOID,LONG,LONG,LONG,LONG,LONG);
+USBD_STATUS WINAPI USBD_ValidateConfigurationDescriptor(PUSB_CONFIGURATION_DESCRIPTOR,ULONG,USHORT,PUCHAR*,ULONG);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h
new file mode 100644
index 00000000..cf1f44a3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbioctl.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2013 Damjan Jovanovic
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USBIOCTL_H__
+#define __DDK_USBIOCTL_H__
+
+#define IOCTL_INTERNAL_USB_SUBMIT_URB \
+ CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+#endif /* __DDK_USBIOCTL_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h
new file mode 100644
index 00000000..9255dbc5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/usbiodef.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2013 Damjan Jovanovic
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDK_USBIODEF_H__
+#define __DDK_USBIODEF_H__
+
+#define USB_SUBMIT_URB 0
+
+#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN
+
+#endif /* __DDK_USBIODEF_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h
new file mode 100644
index 00000000..8b96ca64
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h
@@ -0,0 +1,1361 @@
+/*
+ * Copyright 2004-2005 Ivan Leo Puoti
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WDMDDK_
+#define _WDMDDK_
+#define _NTDDK_
+
+#include <ntstatus.h>
+
+#ifdef _WIN64
+#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
+#else
+#define POINTER_ALIGNMENT
+#endif
+
+typedef LONG KPRIORITY;
+
+typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
+
+struct _KDPC;
+struct _KAPC;
+struct _IRP;
+struct _DEVICE_OBJECT;
+struct _DRIVER_OBJECT;
+
+typedef VOID (WINAPI *PKDEFERRED_ROUTINE)(struct _KDPC *, PVOID, PVOID, PVOID);
+typedef VOID (WINAPI *PKSTART_ROUTINE)(PVOID);
+
+typedef NTSTATUS (WINAPI *PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT *, PUNICODE_STRING);
+typedef NTSTATUS (WINAPI *PDRIVER_DISPATCH)(struct _DEVICE_OBJECT *, struct _IRP *);
+typedef void (WINAPI *PDRIVER_STARTIO)(struct _DEVICE_OBJECT *, struct _IRP *);
+typedef void (WINAPI *PDRIVER_UNLOAD)(struct _DRIVER_OBJECT *);
+
+typedef struct _DISPATCHER_HEADER {
+ UCHAR Type;
+ UCHAR Absolute;
+ UCHAR Size;
+ UCHAR Inserted;
+ LONG SignalState;
+ LIST_ENTRY WaitListHead;
+} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
+
+typedef struct _KEVENT {
+ DISPATCHER_HEADER Header;
+} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
+
+typedef struct _KSEMAPHORE {
+ DISPATCHER_HEADER Header;
+ LONG Limit;
+} KSEMAPHORE, *PKSEMAPHORE, *PRKSEMAPHORE;
+
+typedef struct _KDPC {
+ CSHORT Type;
+ UCHAR Number;
+ UCHAR Importance;
+ LIST_ENTRY DpcListEntry;
+ PKDEFERRED_ROUTINE DeferredRoutine;
+ PVOID DeferredContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+ PULONG_PTR Lock;
+} KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
+
+typedef struct _KDEVICE_QUEUE_ENTRY {
+ LIST_ENTRY DeviceListEntry;
+ ULONG SortKey;
+ BOOLEAN Inserted;
+} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
+*RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
+
+typedef struct _KDEVICE_QUEUE {
+ CSHORT Type;
+ CSHORT Size;
+ LIST_ENTRY DeviceListHead;
+ KSPIN_LOCK Lock;
+ BOOLEAN Busy;
+} KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
+
+typedef struct _KMUTANT {
+ DISPATCHER_HEADER Header;
+ LIST_ENTRY MutantListEntry;
+ struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
+ BOOLEAN Abandoned;
+ UCHAR ApcDisable;
+} KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
+
+typedef enum _KWAIT_REASON
+{
+ Executive,
+ FreePage,
+ PageIn,
+ PoolAllocation,
+ DelayExecution,
+ Suspended,
+ UserRequest,
+ WrExecutive,
+ WrFreePage,
+ WrPageIn,
+ WrDelayExecution,
+ WrSuspended,
+ WrUserRequest,
+ WrQueue,
+ WrLpcReceive,
+ WrLpcReply,
+ WrVirtualMemory,
+ WrPageOut,
+ WrRendezvous,
+ Spare2,
+ Spare3,
+ Spare4,
+ Spare5,
+ Spare6,
+ WrKernel,
+ MaximumWaitReason,
+} KWAIT_REASON;
+
+typedef struct _ALLOCATE_FUNCTION *PALLOCATE_FUNCTION;
+typedef struct _IO_TIMER *PIO_TIMER;
+typedef struct _IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
+typedef struct _ETHREAD *PETHREAD;
+typedef struct _FREE_FUNCTION *PFREE_FUNCTION;
+typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
+typedef struct _EPROCESS *PEPROCESS;
+typedef struct _ERESOURCE *PERESOURCE;
+typedef struct _IO_WORKITEM *PIO_WORKITEM;
+typedef struct _NPAGED_LOOKASIDE_LIST *PNPAGED_LOOKASIDE_LIST;
+typedef struct _PAGED_LOOKASIDE_LIST *PPAGED_LOOKASIDE_LIST;
+typedef struct _OBJECT_TYPE *POBJECT_TYPE;
+typedef struct _OBJECT_HANDLE_INFORMATION *POBJECT_HANDLE_INFORMATION;
+typedef struct _ZONE_HEADER *PZONE_HEADER;
+
+typedef struct _FAST_MUTEX
+{
+ LONG Count;
+ PKTHREAD Owner;
+ ULONG Contention;
+ KEVENT Gate;
+ ULONG OldIrql;
+} FAST_MUTEX, *PFAST_MUTEX;
+
+#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
+
+typedef struct _VPB {
+ CSHORT Type;
+ CSHORT Size;
+ USHORT Flags;
+ USHORT VolumeLabelLength;
+ struct _DEVICE_OBJECT *DeviceObject;
+ struct _DEVICE_OBJECT *RealDevice;
+ ULONG SerialNumber;
+ ULONG ReferenceCount;
+ WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+} VPB, *PVPB;
+
+typedef enum _POOL_TYPE {
+ NonPagedPool,
+ PagedPool,
+ NonPagedPoolMustSucceed,
+ DontUseThisType,
+ NonPagedPoolCacheAligned,
+ PagedPoolCacheAligned,
+ NonPagedPoolCacheAlignedMustS,
+ MaxPoolType
+} POOL_TYPE;
+
+typedef struct _WAIT_CONTEXT_BLOCK {
+ KDEVICE_QUEUE_ENTRY WaitQueueEntry;
+ struct _DRIVER_CONTROL *DeviceRoutine;
+ PVOID DeviceContext;
+ ULONG NumberOfMapRegisters;
+ PVOID DeviceObject;
+ PVOID CurrentIrp;
+ PKDPC BufferChainingDpc;
+} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
+
+#define DO_BUFFERED_IO 0x00000004
+#define DO_EXCLUSIVE 0x00000008
+#define DO_DIRECT_IO 0x00000010
+#define DO_MAP_IO_BUFFER 0x00000020
+#define DO_DEVICE_INITIALIZING 0x00000080
+#define DO_SHUTDOWN_REGISTERED 0x00000800
+#define DO_BUS_ENUMERATED_DEVICE 0x00001000
+#define DO_POWER_PAGABLE 0x00002000
+#define DO_POWER_INRUSH 0x00004000
+
+#define IO_NO_INCREMENT 0
+#define IO_CD_ROM_INCREMENT 1
+#define IO_DISK_INCREMENT 1
+#define IO_KEYBOARD_INCREMENT 6
+#define IO_MAILSLOT_INCREMENT 2
+#define IO_MOUSE_INCREMENT 6
+#define IO_NAMED_PIPE_INCREMENT 2
+#define IO_NETWORK_INCREMENT 2
+#define IO_PARALLEL_INCREMENT 1
+#define IO_SERIAL_INCREMENT 2
+#define IO_SOUND_INCREMENT 8
+#define IO_VIDEO_INCREMENT 1
+
+#ifndef DEVICE_TYPE
+#define DEVICE_TYPE ULONG
+#endif
+#define IRP_MJ_MAXIMUM_FUNCTION 0x1b
+#define IRP_MJ_CREATE 0x00
+#define IRP_MJ_CREATE_NAMED_PIPE 0x01
+#define IRP_MJ_CLOSE 0x02
+#define IRP_MJ_READ 0x03
+#define IRP_MJ_WRITE 0x04
+#define IRP_MJ_QUERY_INFORMATION 0x05
+#define IRP_MJ_SET_INFORMATION 0x06
+#define IRP_MJ_QUERY_EA 0x07
+#define IRP_MJ_SET_EA 0x08
+#define IRP_MJ_FLUSH_BUFFERS 0x09
+#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
+#define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
+#define IRP_MJ_DIRECTORY_CONTROL 0x0c
+#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
+#define IRP_MJ_DEVICE_CONTROL 0x0e
+#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
+#define IRP_MJ_SHUTDOWN 0x10
+#define IRP_MJ_LOCK_CONTROL 0x11
+#define IRP_MJ_CLEANUP 0x12
+#define IRP_MJ_CREATE_MAILSLOT 0x13
+#define IRP_MJ_QUERY_SECURITY 0x14
+#define IRP_MJ_SET_SECURITY 0x15
+#define IRP_MJ_POWER 0x16
+#define IRP_MJ_SYSTEM_CONTROL 0x17
+#define IRP_MJ_DEVICE_CHANGE 0x18
+#define IRP_MJ_QUERY_QUOTA 0x19
+#define IRP_MJ_SET_QUOTA 0x1a
+#define IRP_MJ_PNP 0x1b
+
+#define IRP_MN_START_DEVICE 0x00
+#define IRP_MN_QUERY_REMOVE_DEVICE 0x01
+#define IRP_MN_REMOVE_DEVICE 0x02
+#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
+#define IRP_MN_STOP_DEVICE 0x04
+#define IRP_MN_QUERY_STOP_DEVICE 0x05
+#define IRP_MN_CANCEL_STOP_DEVICE 0x06
+#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
+#define IRP_MN_QUERY_INTERFACE 0x08
+#define IRP_MN_QUERY_CAPABILITIES 0x09
+#define IRP_MN_QUERY_RESOURCES 0x0A
+#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
+#define IRP_MN_QUERY_DEVICE_TEXT 0x0C
+#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
+#define IRP_MN_READ_CONFIG 0x0F
+#define IRP_MN_WRITE_CONFIG 0x10
+#define IRP_MN_EJECT 0x11
+#define IRP_MN_SET_LOCK 0x12
+#define IRP_MN_QUERY_ID 0x13
+#define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
+#define IRP_MN_QUERY_BUS_INFORMATION 0x15
+#define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
+#define IRP_MN_SURPRISE_REMOVAL 0x17
+#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
+
+#define IRP_QUOTA_CHARGED 0x01
+#define IRP_ALLOCATED_MUST_SUCCEED 0x02
+#define IRP_ALLOCATED_FIXED_SIZE 0x04
+#define IRP_LOOKASIDE_ALLOCATION 0x08
+
+#define IO_TYPE_ADAPTER 0x01
+#define IO_TYPE_CONTROLLER 0x02
+#define IO_TYPE_DEVICE 0x03
+#define IO_TYPE_DRIVER 0x04
+#define IO_TYPE_FILE 0x05
+#define IO_TYPE_IRP 0x06
+#define IO_TYPE_MASTER_ADAPTER 0x07
+#define IO_TYPE_OPEN_PACKET 0x08
+#define IO_TYPE_TIMER 0x09
+#define IO_TYPE_VPB 0x0a
+#define IO_TYPE_ERROR_LOG 0x0b
+#define IO_TYPE_ERROR_MESSAGE 0x0c
+#define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0d
+
+typedef struct _DEVICE_OBJECT {
+ CSHORT Type;
+ USHORT Size;
+ LONG ReferenceCount;
+ struct _DRIVER_OBJECT *DriverObject;
+ struct _DEVICE_OBJECT *NextDevice;
+ struct _DEVICE_OBJECT *AttachedDevice;
+ struct _IRP *CurrentIrp;
+ PIO_TIMER Timer;
+ ULONG Flags;
+ ULONG Characteristics;
+ PVPB Vpb;
+ PVOID DeviceExtension;
+ DEVICE_TYPE DeviceType;
+ CCHAR StackSize;
+ union {
+ LIST_ENTRY ListEntry;
+ WAIT_CONTEXT_BLOCK Wcb;
+ } Queue;
+ ULONG AlignmentRequirement;
+ KDEVICE_QUEUE DeviceQueue;
+ KDPC Dpc;
+ ULONG ActiveThreadCount;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ KEVENT DeviceLock;
+ USHORT SectorSize;
+ USHORT Spare1;
+ struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
+ PVOID Reserved;
+} DEVICE_OBJECT;
+typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
+
+typedef struct _DEVICE_RELATIONS {
+ ULONG Count;
+ PDEVICE_OBJECT Objects[1];
+} DEVICE_RELATIONS;
+typedef struct _DEVICE_RELATIONS *PDEVICE_RELATIONS;
+
+typedef struct _DRIVER_EXTENSION {
+ struct _DRIVER_OBJECT *DriverObject;
+ PVOID AddDevice;
+ ULONG Count;
+ UNICODE_STRING ServiceKeyName;
+} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
+
+typedef struct _DRIVER_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ ULONG Flags;
+ PVOID DriverStart;
+ ULONG DriverSize;
+ PVOID DriverSection;
+ PDRIVER_EXTENSION DriverExtension;
+ UNICODE_STRING DriverName;
+ PUNICODE_STRING HardwareDatabase;
+ PVOID FastIoDispatch;
+ PDRIVER_INITIALIZE DriverInit;
+ PDRIVER_STARTIO DriverStartIo;
+ PDRIVER_UNLOAD DriverUnload;
+ PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+} DRIVER_OBJECT;
+typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
+
+/* Irp definitions */
+typedef UCHAR KIRQL, *PKIRQL;
+typedef CCHAR KPROCESSOR_MODE;
+
+typedef VOID (WINAPI *PDRIVER_CANCEL)(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN struct _IRP *Irp);
+
+typedef VOID (WINAPI *PKNORMAL_ROUTINE)(
+ IN PVOID NormalContext,
+ IN PVOID SystemArgument1,
+ IN PVOID SystemArgument2);
+
+typedef VOID (WINAPI *PKKERNEL_ROUTINE)(
+ IN struct _KAPC *Apc,
+ IN OUT PKNORMAL_ROUTINE *NormalRoutine,
+ IN OUT PVOID *NormalContext,
+ IN OUT PVOID *SystemArgument1,
+ IN OUT PVOID *SystemArgument2);
+
+typedef VOID (WINAPI *PKRUNDOWN_ROUTINE)(
+ IN struct _KAPC *Apc);
+
+typedef struct _KAPC {
+ CSHORT Type;
+ CSHORT Size;
+ ULONG Spare0;
+ struct _KTHREAD *Thread;
+ LIST_ENTRY ApcListEntry;
+ PKKERNEL_ROUTINE KernelRoutine;
+ PKRUNDOWN_ROUTINE RundownRoutine;
+ PKNORMAL_ROUTINE NormalRoutine;
+ PVOID NormalContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+ CCHAR ApcStateIndex;
+ KPROCESSOR_MODE ApcMode;
+ BOOLEAN Inserted;
+} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
+
+#include <pshpack1.h>
+typedef struct _IRP {
+ CSHORT Type;
+ USHORT Size;
+ struct _MDL *MdlAddress;
+ ULONG Flags;
+ union {
+ struct _IRP *MasterIrp;
+ LONG IrpCount;
+ PVOID SystemBuffer;
+ } AssociatedIrp;
+ LIST_ENTRY ThreadListEntry;
+ IO_STATUS_BLOCK IoStatus;
+ KPROCESSOR_MODE RequestorMode;
+ BOOLEAN PendingReturned;
+ CHAR StackCount;
+ CHAR CurrentLocation;
+ BOOLEAN Cancel;
+ KIRQL CancelIrql;
+ CCHAR ApcEnvironment;
+ UCHAR AllocationFlags;
+ PIO_STATUS_BLOCK UserIosb;
+ PKEVENT UserEvent;
+ union {
+ struct {
+ PIO_APC_ROUTINE UserApcRoutine;
+ PVOID UserApcContext;
+ } AsynchronousParameters;
+ LARGE_INTEGER AllocationSize;
+ } Overlay;
+ PDRIVER_CANCEL CancelRoutine;
+ PVOID UserBuffer;
+ union {
+ struct {
+ union {
+ KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+ struct {
+ PVOID DriverContext[4];
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME1;
+ PETHREAD Thread;
+ PCHAR AuxiliaryBuffer;
+ struct {
+ LIST_ENTRY ListEntry;
+ union {
+ struct _IO_STACK_LOCATION *CurrentStackLocation;
+ ULONG PacketType;
+ } DUMMYUNIONNAME2;
+ } DUMMYSTRUCTNAME;
+ struct _FILE_OBJECT *OriginalFileObject;
+ } Overlay;
+ KAPC Apc;
+ PVOID CompletionKey;
+ } Tail;
+} IRP;
+typedef struct _IRP *PIRP;
+#include <poppack.h>
+
+typedef VOID (WINAPI *PINTERFACE_REFERENCE)(
+ PVOID Context);
+
+typedef VOID (WINAPI *PINTERFACE_DEREFERENCE)(
+ PVOID Context);
+
+typedef struct _INTERFACE {
+ USHORT Size;
+ USHORT Version;
+ PVOID Context;
+ PINTERFACE_REFERENCE InterfaceReference;
+ PINTERFACE_DEREFERENCE InterfaceDereference;
+} INTERFACE, *PINTERFACE;
+
+typedef struct _SECTION_OBJECT_POINTERS {
+ PVOID DataSectionObject;
+ PVOID SharedCacheMap;
+ PVOID ImageSectionObject;
+} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
+
+typedef struct _IO_COMPLETION_CONTEXT {
+ PVOID Port;
+ PVOID Key;
+} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
+
+typedef enum _DEVICE_RELATION_TYPE {
+ BusRelations,
+ EjectionRelations,
+ PowerRelations,
+ RemovalRelations,
+ TargetDeviceRelation,
+ SingleBusRelations
+} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
+
+typedef struct _FILE_OBJECT {
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ PVPB Vpb;
+ PVOID FsContext;
+ PVOID FsContext2;
+ PSECTION_OBJECT_POINTERS SectionObjectPointer;
+ PVOID PrivateCacheMap;
+ NTSTATUS FinalStatus;
+ struct _FILE_OBJECT *RelatedFileObject;
+ BOOLEAN LockOperation;
+ BOOLEAN DeletePending;
+ BOOLEAN ReadAccess;
+ BOOLEAN WriteAccess;
+ BOOLEAN DeleteAccess;
+ BOOLEAN SharedRead;
+ BOOLEAN SharedWrite;
+ BOOLEAN SharedDelete;
+ ULONG Flags;
+ UNICODE_STRING FileName;
+ LARGE_INTEGER CurrentByteOffset;
+ ULONG Waiters;
+ ULONG Busy;
+ PVOID LastLock;
+ KEVENT Lock;
+ KEVENT Event;
+ PIO_COMPLETION_CONTEXT CompletionContext;
+} FILE_OBJECT;
+typedef struct _FILE_OBJECT *PFILE_OBJECT;
+
+#define INITIAL_PRIVILEGE_COUNT 3
+
+typedef struct _INITIAL_PRIVILEGE_SET {
+ ULONG PrivilegeCount;
+ ULONG Control;
+ LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
+} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+
+typedef struct _SECURITY_SUBJECT_CONTEXT {
+ PACCESS_TOKEN ClientToken;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ PACCESS_TOKEN PrimaryToken;
+ PVOID ProcessAuditId;
+} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
+
+typedef struct _ACCESS_STATE {
+ LUID OperationID;
+ BOOLEAN SecurityEvaluated;
+ BOOLEAN GenerateAudit;
+ BOOLEAN GenerateOnClose;
+ BOOLEAN PrivilegesAllocated;
+ ULONG Flags;
+ ACCESS_MASK RemainingDesiredAccess;
+ ACCESS_MASK PreviouslyGrantedAccess;
+ ACCESS_MASK OriginalDesiredAccess;
+ SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PVOID AuxData;
+ union {
+ INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
+ PRIVILEGE_SET PrivilegeSet;
+ } Privileges;
+
+ BOOLEAN AuditPrivileges;
+ UNICODE_STRING ObjectName;
+ UNICODE_STRING ObjectTypeName;
+} ACCESS_STATE, *PACCESS_STATE;
+
+typedef struct _IO_SECURITY_CONTEXT {
+ PSECURITY_QUALITY_OF_SERVICE SecurityQos;
+ PACCESS_STATE AccessState;
+ ACCESS_MASK DesiredAccess;
+ ULONG FullCreateOptions;
+} IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
+
+typedef struct _DEVICE_CAPABILITIES {
+ USHORT Size;
+ USHORT Version;
+ ULONG DeviceD1 : 1;
+ ULONG DeviceD2 : 1;
+ ULONG LockSupported : 1;
+ ULONG EjectSupported : 1;
+ ULONG Removable : 1;
+ ULONG DockDevice : 1;
+ ULONG UniqueID : 1;
+ ULONG SilentInstall : 1;
+ ULONG RawDeviceOK : 1;
+ ULONG SurpriseRemovalOK : 1;
+ ULONG WakeFromD0 : 1;
+ ULONG WakeFromD1 : 1;
+ ULONG WakeFromD2 : 1;
+ ULONG WakeFromD3 : 1;
+ ULONG HardwareDisabled : 1;
+ ULONG NonDynamic : 1;
+ ULONG WarmEjectSupported : 1;
+ ULONG NoDisplayInUI : 1;
+ ULONG Reserved : 14;
+ ULONG Address;
+ ULONG UINumber;
+ DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
+ SYSTEM_POWER_STATE SystemWake;
+ DEVICE_POWER_STATE DeviceWake;
+ ULONG D1Latency;
+ ULONG D2Latency;
+ ULONG D3Latency;
+} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
+
+typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
+ USHORT Version;
+ USHORT Size;
+ GUID Event;
+ GUID InterfaceClassGuid;
+ PUNICODE_STRING SymbolicLinkName;
+} DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
+
+typedef enum _INTERFACE_TYPE {
+ InterfaceTypeUndefined = -1,
+ Internal,
+ Isa,
+ Eisa,
+ MicroChannel,
+ TurboChannel,
+ PCIBus,
+ VMEBus,
+ NuBus,
+ PCMCIABus,
+ CBus,
+ MPIBus,
+ MPSABus,
+ ProcessorInternal,
+ InternalPowerBus,
+ PNPISABus,
+ PNPBus,
+ MaximumInterfaceType
+} INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
+
+#define IO_RESOURCE_PREFERRED 0x01
+#define IO_RESOURCE_DEFAULT 0x02
+#define IO_RESOURCE_ALTERNATIVE 0x08
+
+typedef struct _IO_RESOURCE_DESCRIPTOR {
+ UCHAR Option;
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ UCHAR Spare1;
+ USHORT Flags;
+ USHORT Spare2;
+ union {
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Port;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Memory;
+ struct {
+ ULONG MinimumVector;
+ ULONG MaximumVector;
+ } Interrupt;
+ struct {
+ ULONG MinimumChannel;
+ ULONG MaximumChannel;
+ } Dma;
+ struct {
+ ULONG Length;
+ ULONG Alignment;
+ PHYSICAL_ADDRESS MinimumAddress;
+ PHYSICAL_ADDRESS MaximumAddress;
+ } Generic;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Length;
+ ULONG MinBusNumber;
+ ULONG MaxBusNumber;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG Priority;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } ConfigData;
+ } u;
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
+
+typedef struct _IO_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ IO_RESOURCE_DESCRIPTOR Descriptors[1];
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
+
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
+ ULONG ListSize;
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ ULONG SlotNumber;
+ ULONG Reserved[3];
+ ULONG AlternativeLists;
+ IO_RESOURCE_LIST List[1];
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
+
+typedef enum _BUS_QUERY_ID_TYPE {
+ BusQueryDeviceID,
+ BusQueryHardwareIDs,
+ BusQueryCompatibleIDs,
+ BusQueryInstanceID,
+ BusQueryDeviceSerialNumber
+} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
+
+typedef enum {
+ DevicePropertyDeviceDescription,
+ DevicePropertyHardwareID,
+ DevicePropertyCompatibleIDs,
+ DevicePropertyBootConfiguration,
+ DevicePropertyBootConfigurationTranslated,
+ DevicePropertyClassName,
+ DevicePropertyClassGuid,
+ DevicePropertyDriverKeyName,
+ DevicePropertyManufacturer,
+ DevicePropertyFriendlyName,
+ DevicePropertyLocationInformation,
+ DevicePropertyPhysicalDeviceObjectName,
+ DevicePropertyBusTypeGuid,
+ DevicePropertyLegacyBusType,
+ DevicePropertyBusNumber,
+ DevicePropertyEnumeratorName,
+ DevicePropertyAddress,
+ DevicePropertyUINumber,
+ DevicePropertyInstallState,
+ DevicePropertyRemovalPolicy
+} DEVICE_REGISTRY_PROPERTY;
+
+typedef enum _DEVICE_TEXT_TYPE {
+ DeviceTextDescription,
+ DeviceTextLocationInformation
+} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
+
+typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
+ DeviceUsageTypeUndefined,
+ DeviceUsageTypePaging,
+ DeviceUsageTypeHibernation,
+ DeviceUsageTypeDumpFile
+} DEVICE_USAGE_NOTIFICATION_TYPE;
+
+typedef struct _POWER_SEQUENCE {
+ ULONG SequenceD1;
+ ULONG SequenceD2;
+ ULONG SequenceD3;
+} POWER_SEQUENCE, *PPOWER_SEQUENCE;
+
+typedef enum _POWER_STATE_TYPE {
+ SystemPowerState,
+ DevicePowerState
+} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
+
+typedef union _POWER_STATE {
+ SYSTEM_POWER_STATE SystemState;
+ DEVICE_POWER_STATE DeviceState;
+} POWER_STATE, *PPOWER_STATE;
+
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
+ UCHAR Type;
+ UCHAR ShareDisposition;
+ USHORT Flags;
+ union {
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Generic;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Port;
+ struct {
+ ULONG Level;
+ ULONG Vector;
+ ULONG Affinity;
+ } Interrupt;
+ struct {
+ PHYSICAL_ADDRESS Start;
+ ULONG Length;
+ } Memory;
+ struct {
+ ULONG Channel;
+ ULONG Port;
+ ULONG Reserved1;
+ } Dma;
+ struct {
+ ULONG Data[3];
+ } DevicePrivate;
+ struct {
+ ULONG Start;
+ ULONG Length;
+ ULONG Reserved;
+ } BusNumber;
+ struct {
+ ULONG DataSize;
+ ULONG Reserved1;
+ ULONG Reserved2;
+ } DeviceSpecificData;
+ } u;
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_PARTIAL_RESOURCE_LIST {
+ USHORT Version;
+ USHORT Revision;
+ ULONG Count;
+ CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
+} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
+
+typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
+ INTERFACE_TYPE InterfaceType;
+ ULONG BusNumber;
+ CM_PARTIAL_RESOURCE_LIST PartialResourceList;
+} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
+
+typedef struct _CM_RESOURCE_LIST {
+ ULONG Count;
+ CM_FULL_RESOURCE_DESCRIPTOR List[1];
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
+
+typedef NTSTATUS (WINAPI *PIO_COMPLETION_ROUTINE)(
+ IN struct _DEVICE_OBJECT *DeviceObject,
+ IN struct _IRP *Irp,
+ IN PVOID Context);
+
+#define SL_PENDING_RETURNED 0x01
+#define SL_INVOKE_ON_CANCEL 0x20
+#define SL_INVOKE_ON_SUCCESS 0x40
+#define SL_INVOKE_ON_ERROR 0x80
+
+#include <pshpack1.h>
+typedef struct _IO_STACK_LOCATION {
+ UCHAR MajorFunction;
+ UCHAR MinorFunction;
+ UCHAR Flags;
+ UCHAR Control;
+ union {
+ struct {
+ PIO_SECURITY_CONTEXT SecurityContext;
+ ULONG Options;
+ USHORT POINTER_ALIGNMENT FileAttributes;
+ USHORT ShareAccess;
+ ULONG POINTER_ALIGNMENT EaLength;
+ } Create;
+ struct {
+ ULONG Length;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Read;
+ struct {
+ ULONG Length;
+ ULONG POINTER_ALIGNMENT Key;
+ LARGE_INTEGER ByteOffset;
+ } Write;
+ struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ } QueryFile;
+ struct {
+ ULONG Length;
+ FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
+ PFILE_OBJECT FileObject;
+ union {
+ struct {
+ BOOLEAN ReplaceIfExists;
+ BOOLEAN AdvanceOnly;
+ } DUMMYSTRUCTNAME;
+ ULONG ClusterCount;
+ HANDLE DeleteHandle;
+ } DUMMYUNIONNAME;
+ } SetFile;
+ struct {
+ ULONG Length;
+ FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
+ } QueryVolume;
+ struct {
+ ULONG OutputBufferLength;
+ ULONG POINTER_ALIGNMENT InputBufferLength;
+ ULONG POINTER_ALIGNMENT IoControlCode;
+ PVOID Type3InputBuffer;
+ } DeviceIoControl;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ ULONG POINTER_ALIGNMENT Length;
+ } QuerySecurity;
+ struct {
+ SECURITY_INFORMATION SecurityInformation;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ } SetSecurity;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } MountVolume;
+ struct {
+ PVPB Vpb;
+ PDEVICE_OBJECT DeviceObject;
+ } VerifyVolume;
+ struct {
+ struct _SCSI_REQUEST_BLOCK *Srb;
+ } Scsi;
+ struct {
+ DEVICE_RELATION_TYPE Type;
+ } QueryDeviceRelations;
+ struct {
+ const GUID *InterfaceType;
+ USHORT Size;
+ USHORT Version;
+ PINTERFACE Interface;
+ PVOID InterfaceSpecificData;
+ } QueryInterface;
+ struct {
+ PDEVICE_CAPABILITIES Capabilities;
+ } DeviceCapabilities;
+ struct {
+ PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
+ } FilterResourceRequirements;
+ struct {
+ ULONG WhichSpace;
+ PVOID Buffer;
+ ULONG Offset;
+ ULONG POINTER_ALIGNMENT Length;
+ } ReadWriteConfig;
+ struct {
+ BOOLEAN Lock;
+ } SetLock;
+ struct {
+ BUS_QUERY_ID_TYPE IdType;
+ } QueryId;
+ struct {
+ DEVICE_TEXT_TYPE DeviceTextType;
+ LCID POINTER_ALIGNMENT LocaleId;
+ } QueryDeviceText;
+ struct {
+ BOOLEAN InPath;
+ BOOLEAN Reserved[3];
+ DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
+ } UsageNotification;
+ struct {
+ SYSTEM_POWER_STATE PowerState;
+ } WaitWake;
+ struct {
+ PPOWER_SEQUENCE PowerSequence;
+ } PowerSequence;
+ struct {
+ ULONG SystemContext;
+ POWER_STATE_TYPE POINTER_ALIGNMENT Type;
+ POWER_STATE POINTER_ALIGNMENT State;
+ POWER_ACTION POINTER_ALIGNMENT ShutdownType;
+ } Power;
+ struct {
+ PCM_RESOURCE_LIST AllocatedResources;
+ PCM_RESOURCE_LIST AllocatedResourcesTranslated;
+ } StartDevice;
+ struct {
+ ULONG_PTR ProviderId;
+ PVOID DataPath;
+ ULONG BufferSize;
+ PVOID Buffer;
+ } WMI;
+ struct {
+ PVOID Argument1;
+ PVOID Argument2;
+ PVOID Argument3;
+ PVOID Argument4;
+ } Others;
+ } Parameters;
+ PDEVICE_OBJECT DeviceObject;
+ PFILE_OBJECT FileObject;
+ PIO_COMPLETION_ROUTINE CompletionRoutine;
+ PVOID Context;
+} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+#include <poppack.h>
+
+/* MDL definitions */
+
+#define MDL_MAPPED_TO_SYSTEM_VA 0x0001
+#define MDL_PAGES_LOCKED 0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
+#define MDL_ALLOCATED_FIXED_SIZE 0x0008
+#define MDL_PARTIAL 0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
+#define MDL_IO_PAGE_READ 0x0040
+#define MDL_WRITE_OPERATION 0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
+#define MDL_FREE_EXTRA_PTES 0x0200
+#define MDL_DESCRIBES_AWE 0x0400
+#define MDL_IO_SPACE 0x0800
+#define MDL_NETWORK_HEADER 0x1000
+#define MDL_MAPPING_CAN_FAIL 0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED 0x4000
+#define MDL_INTERNAL 0x8000
+
+#define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
+ MDL_PAGES_LOCKED | \
+ MDL_SOURCE_IS_NONPAGED_POOL | \
+ MDL_PARTIAL_HAS_BEEN_MAPPED | \
+ MDL_PARENT_MAPPED_SYSTEM_VA | \
+ MDL_SYSTEM_VA | \
+ MDL_IO_SPACE )
+
+typedef struct _MDL {
+ struct _MDL *Next;
+ CSHORT Size;
+ CSHORT MdlFlags;
+ struct _EPROCESS *Process;
+ PVOID MappedSystemVa;
+ PVOID StartVa;
+ ULONG ByteCount;
+ ULONG ByteOffset;
+} MDL, *PMDL;
+
+typedef MDL *PMDLX;
+
+typedef struct _KTIMER {
+ DISPATCHER_HEADER Header;
+ ULARGE_INTEGER DueTime;
+ LIST_ENTRY TimerListEntry;
+ struct _KDPC *Dpc;
+ LONG Period;
+} KTIMER, *PKTIMER;
+
+typedef struct _KSYSTEM_TIME {
+ ULONG LowPart;
+ LONG High1Time;
+ LONG High2Time;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef enum _NT_PRODUCT_TYPE {
+ NtProductWinNt = 1,
+ NtProductLanManNt,
+ NtProductServer
+} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
+
+#define PROCESSOR_FEATURE_MAX 64
+
+typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
+{
+ StandardDesign,
+ NEC98x86,
+ EndAlternatives
+} ALTERNATIVE_ARCHITECTURE_TYPE;
+
+#define NX_SUPPORT_POLICY_ALWAYSOFF 0
+#define NX_SUPPORT_POLICY_ALWAYSON 1
+#define NX_SUPPORT_POLICY_OPTIN 2
+#define NX_SUPPORT_POLICY_OPTOUT 3
+
+#define MAX_WOW64_SHARED_ENTRIES 16
+
+typedef struct _KUSER_SHARED_DATA {
+ ULONG TickCountLowDeprecated;
+ ULONG TickCountMultiplier;
+ volatile KSYSTEM_TIME InterruptTime;
+ volatile KSYSTEM_TIME SystemTime;
+ volatile KSYSTEM_TIME TimeZoneBias;
+ USHORT ImageNumberLow;
+ USHORT ImageNumberHigh;
+ WCHAR NtSystemRoot[260];
+ ULONG MaxStackTraceDepth;
+ ULONG CryptoExponent;
+ ULONG TimeZoneId;
+ ULONG LargePageMinimum;
+ ULONG Reserved2[7];
+ NT_PRODUCT_TYPE NtProductType;
+ BOOLEAN ProductTypeIsValid;
+ ULONG NtMajorVersion;
+ ULONG NtMinorVersion;
+ BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
+ ULONG Reserved1;
+ ULONG Reserved3;
+ volatile ULONG TimeSlip;
+ ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
+ LARGE_INTEGER SystemExpirationDate;
+ ULONG SuiteMask;
+ BOOLEAN KdDebuggerEnabled;
+ UCHAR NXSupportPolicy;
+ volatile ULONG ActiveConsoleId;
+ volatile ULONG DismountCount;
+ ULONG ComPlusPackage;
+ ULONG LastSystemRITEventTickCount;
+ ULONG NumberOfPhysicalPages;
+ BOOLEAN SafeBootMode;
+ ULONG TraceLogging;
+ ULONGLONG TestRetInstruction;
+ ULONG SystemCall;
+ ULONG SystemCallReturn;
+ ULONGLONG SystemCallPad[3];
+ union {
+ volatile KSYSTEM_TIME TickCount;
+ volatile ULONG64 TickCountQuad;
+ } DUMMYUNIONNAME;
+ ULONG Cookie;
+ ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
+} KSHARED_USER_DATA, *PKSHARED_USER_DATA;
+
+typedef enum _MEMORY_CACHING_TYPE {
+ MmNonCached = 0,
+ MmCached = 1,
+ MmWriteCombined = 2,
+ MmHardwareCoherentCached = 3,
+ MmNonCachedUnordered = 4,
+ MmUSWCCached = 5,
+ MmMaximumCacheType = 6
+} MEMORY_CACHING_TYPE;
+
+typedef enum _MM_PAGE_PRIORITY {
+ LowPagePriority,
+ NormalPagePriority = 16,
+ HighPagePriority = 32
+} MM_PAGE_PRIORITY;
+
+typedef enum _MM_SYSTEM_SIZE
+{
+ MmSmallSystem,
+ MmMediumSystem,
+ MmLargeSystem
+} MM_SYSTEMSIZE;
+
+typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
+ BOOLEAN Removed;
+ BOOLEAN Reserved[3];
+ LONG IoCount;
+ KEVENT RemoveEvent;
+} IO_REMOVE_LOCK_COMMON_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK *PIO_REMOVE_LOCK_TRACKING_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
+ LONG Signature;
+ LONG HighWatermark;
+ LONGLONG MaxLockedTicks;
+ LONG AllocateTag;
+ LIST_ENTRY LockList;
+ KSPIN_LOCK Spin;
+ LONG LowMemoryCount;
+ ULONG Reserved1[4];
+ PVOID Reserved2;
+ PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
+} IO_REMOVE_LOCK_DBG_BLOCK;
+
+typedef struct _IO_REMOVE_LOCK {
+ IO_REMOVE_LOCK_COMMON_BLOCK Common;
+ IO_REMOVE_LOCK_DBG_BLOCK Dbg;
+} IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
+
+typedef enum {
+ IoReadAccess,
+ IoWriteAccess,
+ IoModifyAccess
+} LOCK_OPERATION;
+
+typedef struct _CALLBACK_OBJECT
+{
+ ULONG Signature;
+ KSPIN_LOCK Lock;
+ LIST_ENTRY RegisteredCallbacks;
+ BOOLEAN AllowMultipleCallbacks;
+ UCHAR reserved[3];
+} CALLBACK_OBJECT, *PCALLBACK_OBJECT;
+
+NTSTATUS WINAPI ObCloseHandle(IN HANDLE handle);
+
+#ifdef NONAMELESSUNION
+# ifdef NONAMELESSSTRUCT
+# define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation)
+# define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation - 1)
+# else
+# define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.u2.CurrentStackLocation)
+# define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.u2.CurrentStackLocation - 1)
+# endif
+#else
+# ifdef NONAMELESSSTRUCT
+# define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.CurrentStackLocation)
+# define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.CurrentStackLocation - 1)
+# else
+# define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.CurrentStackLocation)
+# define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
+# endif
+#endif
+
+#define KernelMode 0
+#define UserMode 1
+
+/* directory object access rights */
+#define DIRECTORY_QUERY 0x0001
+#define DIRECTORY_TRAVERSE 0x0002
+#define DIRECTORY_CREATE_OBJECT 0x0004
+#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
+
+/* symbolic link access rights */
+#define SYMBOLIC_LINK_QUERY 0x0001
+#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
+
+PVOID WINAPI ExAllocatePool(POOL_TYPE,SIZE_T);
+PVOID WINAPI ExAllocatePoolWithQuota(POOL_TYPE,SIZE_T);
+PVOID WINAPI ExAllocatePoolWithTag(POOL_TYPE,SIZE_T,ULONG);
+PVOID WINAPI ExAllocatePoolWithQuotaTag(POOL_TYPE,SIZE_T,ULONG);
+void WINAPI ExFreePool(PVOID);
+void WINAPI ExFreePoolWithTag(PVOID,ULONG);
+
+NTSTATUS WINAPI IoAllocateDriverObjectExtension(PDRIVER_OBJECT,PVOID,ULONG,PVOID*);
+PVOID WINAPI IoAllocateErrorLogEntry(PVOID,UCHAR);
+PIRP WINAPI IoAllocateIrp(CCHAR,BOOLEAN);
+NTSTATUS WINAPI IoCallDriver(DEVICE_OBJECT*,IRP*);
+VOID WINAPI IoCompleteRequest(IRP*,UCHAR);
+NTSTATUS WINAPI IoCreateDevice(DRIVER_OBJECT*,ULONG,UNICODE_STRING*,DEVICE_TYPE,ULONG,BOOLEAN,DEVICE_OBJECT**);
+NTSTATUS WINAPI IoCreateDriver(UNICODE_STRING*,PDRIVER_INITIALIZE);
+NTSTATUS WINAPI IoCreateSymbolicLink(UNICODE_STRING*,UNICODE_STRING*);
+void WINAPI IoDeleteDevice(DEVICE_OBJECT*);
+void WINAPI IoDeleteDriver(DRIVER_OBJECT*);
+NTSTATUS WINAPI IoDeleteSymbolicLink(UNICODE_STRING*);
+void WINAPI IoFreeIrp(IRP*);
+PEPROCESS WINAPI IoGetCurrentProcess(void);
+NTSTATUS WINAPI IoGetDeviceInterfaces(const GUID*,PDEVICE_OBJECT,ULONG,PWSTR*);
+NTSTATUS WINAPI IoGetDeviceObjectPointer(UNICODE_STRING*,ACCESS_MASK,PFILE_OBJECT*,PDEVICE_OBJECT*);
+NTSTATUS WINAPI IoGetDeviceProperty(PDEVICE_OBJECT,DEVICE_REGISTRY_PROPERTY,ULONG,PVOID,PULONG);
+PVOID WINAPI IoGetDriverObjectExtension(PDRIVER_OBJECT,PVOID);
+PDEVICE_OBJECT WINAPI IoGetRelatedDeviceObject(PFILE_OBJECT);
+void WINAPI IoInitializeIrp(IRP*,USHORT,CCHAR);
+VOID WINAPI IoInitializeRemoveLockEx(PIO_REMOVE_LOCK,ULONG,ULONG,ULONG,ULONG);
+NTSTATUS WINAPI IoWMIRegistrationControl(PDEVICE_OBJECT,ULONG);
+
+PKTHREAD WINAPI KeGetCurrentThread(void);
+void WINAPI KeQuerySystemTime(LARGE_INTEGER*);
+void WINAPI KeQueryTickCount(LARGE_INTEGER*);
+ULONG WINAPI KeQueryTimeIncrement(void);
+LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN);
+LONG WINAPI KeResetEvent(PRKEVENT);
+LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN);
+KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);
+
+PVOID WINAPI MmAllocateContiguousMemory(SIZE_T,PHYSICAL_ADDRESS);
+PVOID WINAPI MmAllocateNonCachedMemory(SIZE_T);
+PMDL WINAPI MmAllocatePagesForMdl(PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,SIZE_T);
+void WINAPI MmFreeNonCachedMemory(PVOID,SIZE_T);
+MM_SYSTEMSIZE WINAPI MmQuerySystemSize(void);
+
+NTSTATUS WINAPI ObReferenceObjectByHandle(HANDLE,ACCESS_MASK,POBJECT_TYPE,KPROCESSOR_MODE,PVOID*,POBJECT_HANDLE_INFORMATION);
+
+POWER_STATE WINAPI PoSetPowerState(PDEVICE_OBJECT,POWER_STATE_TYPE,POWER_STATE);
+NTSTATUS WINAPI PsCreateSystemThread(PHANDLE,ULONG,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PKSTART_ROUTINE,PVOID);
+#define PsGetCurrentProcess() IoGetCurrentProcess()
+#define PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
+HANDLE WINAPI PsGetCurrentProcessId(void);
+HANDLE WINAPI PsGetCurrentThreadId(void);
+BOOLEAN WINAPI PsGetVersion(ULONG*,ULONG*,ULONG*,UNICODE_STRING*);
+NTSTATUS WINAPI PsTerminateSystemThread(NTSTATUS);
+
+NTSTATUS WINAPI ZwAddBootEntry(PUNICODE_STRING,PUNICODE_STRING);
+NTSTATUS WINAPI ZwAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);
+NTSTATUS WINAPI ZwAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+NTSTATUS WINAPI ZwAlertThread(HANDLE ThreadHandle);
+NTSTATUS WINAPI ZwAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
+NTSTATUS WINAPI ZwCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
+NTSTATUS WINAPI ZwCancelTimer(HANDLE, BOOLEAN*);
+NTSTATUS WINAPI ZwClearEvent(HANDLE);
+NTSTATUS WINAPI ZwClose(HANDLE);
+NTSTATUS WINAPI ZwCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
+NTSTATUS WINAPI ZwConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSTATUS WINAPI ZwCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS WINAPI ZwCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
+NTSTATUS WINAPI ZwCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
+NTSTATUS WINAPI ZwCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSTATUS WINAPI ZwCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
+NTSTATUS WINAPI ZwCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
+NTSTATUS WINAPI ZwCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
+NTSTATUS WINAPI ZwDeleteAtom(RTL_ATOM);
+NTSTATUS WINAPI ZwDeleteFile(POBJECT_ATTRIBUTES);
+NTSTATUS WINAPI ZwDeleteKey(HANDLE);
+NTSTATUS WINAPI ZwDeleteValueKey(HANDLE,const UNICODE_STRING *);
+NTSTATUS WINAPI ZwDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS WINAPI ZwDisplayString(PUNICODE_STRING);
+NTSTATUS WINAPI ZwDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
+NTSTATUS WINAPI ZwDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+NTSTATUS WINAPI ZwEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS WINAPI ZwEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS WINAPI ZwFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+NTSTATUS WINAPI ZwFlushKey(HANDLE);
+NTSTATUS WINAPI ZwFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);
+NTSTATUS WINAPI ZwFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSTATUS WINAPI ZwFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS WINAPI ZwInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
+NTSTATUS WINAPI ZwLoadDriver(const UNICODE_STRING *);
+NTSTATUS WINAPI ZwLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
+NTSTATUS WINAPI ZwLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSTATUS WINAPI ZwMakeTemporaryObject(HANDLE);
+NTSTATUS WINAPI ZwMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
+NTSTATUS WINAPI ZwNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
+NTSTATUS WINAPI ZwOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS WINAPI ZwOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSTATUS WINAPI ZwOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
+NTSTATUS WINAPI ZwOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSTATUS WINAPI ZwOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSTATUS WINAPI ZwOpenProcessToken(HANDLE,DWORD,HANDLE *);
+NTSTATUS WINAPI ZwOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSTATUS WINAPI ZwOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSTATUS WINAPI ZwOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSTATUS WINAPI ZwOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
+NTSTATUS WINAPI ZwOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
+NTSTATUS WINAPI ZwPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
+NTSTATUS WINAPI ZwPulseEvent(HANDLE,PULONG);
+NTSTATUS WINAPI ZwQueryDefaultLocale(BOOLEAN,LCID*);
+NTSTATUS WINAPI ZwQueryDefaultUILanguage(LANGID*);
+NTSTATUS WINAPI ZwQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
+NTSTATUS WINAPI ZwQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
+NTSTATUS WINAPI ZwQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
+NTSTATUS WINAPI ZwQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
+NTSTATUS WINAPI ZwQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
+NTSTATUS WINAPI ZwQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
+NTSTATUS WINAPI ZwQueryInformationToken(HANDLE,DWORD,PVOID,DWORD,LPDWORD);
+NTSTATUS WINAPI ZwQueryInstallUILanguage(LANGID*);
+NTSTATUS WINAPI ZwQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS WINAPI ZwQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
+NTSTATUS WINAPI ZwQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
+NTSTATUS WINAPI ZwQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS WINAPI ZwQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
+NTSTATUS WINAPI ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSTATUS WINAPI ZwQueryTimerResolution(PULONG,PULONG,PULONG);
+NTSTATUS WINAPI ZwQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSTATUS WINAPI ZwQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSTATUS WINAPI ZwReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
+NTSTATUS WINAPI ZwReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
+NTSTATUS WINAPI ZwRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSTATUS WINAPI ZwResetEvent(HANDLE,PULONG);
+NTSTATUS WINAPI ZwRestoreKey(HANDLE,HANDLE,ULONG);
+NTSTATUS WINAPI ZwSaveKey(HANDLE,HANDLE);
+NTSTATUS WINAPI ZwSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSTATUS WINAPI ZwSetDefaultLocale(BOOLEAN,LCID);
+NTSTATUS WINAPI ZwSetDefaultUILanguage(LANGID);
+NTSTATUS WINAPI ZwSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
+NTSTATUS WINAPI ZwSetEvent(HANDLE,PULONG);
+NTSTATUS WINAPI ZwSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
+NTSTATUS WINAPI ZwSetInformationKey(HANDLE,const int,PVOID,ULONG);
+NTSTATUS WINAPI ZwSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
+NTSTATUS WINAPI ZwSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
+NTSTATUS WINAPI ZwSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
+NTSTATUS WINAPI ZwSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
+NTSTATUS WINAPI ZwSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+NTSTATUS WINAPI ZwSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
+NTSTATUS WINAPI ZwSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
+NTSTATUS WINAPI ZwSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
+NTSTATUS WINAPI ZwSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
+NTSTATUS WINAPI ZwSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSTATUS WINAPI ZwSuspendThread(HANDLE,PULONG);
+NTSTATUS WINAPI ZwTerminateProcess(HANDLE,LONG);
+NTSTATUS WINAPI ZwUnloadDriver(const UNICODE_STRING *);
+NTSTATUS WINAPI ZwUnloadKey(HANDLE);
+NTSTATUS WINAPI ZwUnmapViewOfSection(HANDLE,PVOID);
+NTSTATUS WINAPI ZwWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
+NTSTATUS WINAPI ZwWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
+NTSTATUS WINAPI ZwWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
+NTSTATUS WINAPI ZwYieldExecution(void);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h
new file mode 100644
index 00000000..71d47978
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winddiui.h
@@ -0,0 +1,59 @@
+/*
+ * Header for the Device Driver Interface - User Interface library
+ *
+ * Copyright 2007 Marcel Partap
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDDIUI_H
+#define __WINE_WINDDIUI_H
+
+#include <ddk/compstui.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DRIVER_EVENT_INITIALIZE 1
+#define DRIVER_EVENT_DELETE 2
+
+#define PRINTER_EVENT_ADD_CONNECTION 1
+#define PRINTER_EVENT_DELETE_CONNECTION 2
+#define PRINTER_EVENT_INITIALIZE 3
+#define PRINTER_EVENT_DELETE 4
+#define PRINTER_EVENT_CACHE_REFRESH 5
+#define PRINTER_EVENT_CACHE_DELETE 6
+#define PRINTER_EVENT_ATTRIBUTES_CHANGED 7
+
+#define PRINTER_EVENT_FLAG_NO_UI 1
+
+BOOL WINAPI DrvDriverEvent(DWORD, DWORD, LPBYTE, LPARAM);
+BOOL WINAPI DrvPrinterEvent(LPWSTR, INT, DWORD, LPARAM);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_WINDDIUI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h
new file mode 100644
index 00000000..4af7d1d4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/winsplp.h
@@ -0,0 +1,436 @@
+/*
+ * Definitions for print provider, monitor, processor and spooler
+ *
+ * Copyright 2005 Detlef Riekenberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ *
+ * "providor" is not a spelling error in this file. It's the real name.
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINSPLP_
+#define _WINSPLP_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DEFINES */
+
+#define PRINTER_NOTIFY_STATUS_ENDPOINT 1
+#define PRINTER_NOTIFY_STATUS_POLL 2
+#define PRINTER_NOTIFY_STATUS_INFO 4
+
+
+#define ROUTER_UNKNOWN 0
+#define ROUTER_SUCCESS 1
+#define ROUTER_STOP_ROUTING 2
+
+/*
+ * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
+ */
+
+
+/* TYPES */
+
+typedef struct _MONITOR {
+ BOOL (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
+ BOOL (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
+ PHANDLE pHandle, struct _MONITOR *pMonitor);
+ BOOL (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
+ DWORD JobId, DWORD Level, LPBYTE pDocInfo);
+ BOOL (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
+ LPDWORD pcbWritten);
+ BOOL (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
+ LPDWORD pcbRead);
+ BOOL (WINAPI *pfnEndDocPort)(HANDLE hPort);
+ BOOL (WINAPI *pfnClosePort)(HANDLE hPort);
+ BOOL (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+ BOOL (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
+ LPWSTR lpMonitorName);
+ BOOL (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
+ LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
+ LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
+ BOOL (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
+ DWORD reserved);
+ BOOL (WINAPI *pfnXcvOpenPort)(LPCWSTR pszObject, ACCESS_MASK GrantedAccess, PHANDLE phXcv);
+ DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
+ PBYTE pInputData, DWORD cbInputData,
+ PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
+ BOOL (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
+} MONITOR, *LPMONITOR;
+
+typedef struct _MONITOR2 {
+ DWORD cbSize;
+ BOOL (WINAPI *pfnEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL (WINAPI *pfnOpenPort)(LPWSTR pName, PHANDLE pHandle);
+ BOOL (WINAPI *pfnOpenPortEx)(LPWSTR pPortName, LPWSTR pPrinterName,
+ PHANDLE pHandle, struct _MONITOR2 *pMonitor2);
+ BOOL (WINAPI *pfnStartDocPort)(HANDLE hPort, LPWSTR pPrinterName,
+ DWORD JobId, DWORD Level, LPBYTE pDocInfo);
+ BOOL (WINAPI *pfnWritePort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
+ LPDWORD pcbWritten);
+ BOOL (WINAPI *pfnReadPort)(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
+ LPDWORD pcbRead);
+ BOOL (WINAPI *pfnEndDocPort)(HANDLE hPort);
+ BOOL (WINAPI *pfnClosePort)(HANDLE hPort);
+ BOOL (WINAPI *pfnAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+ BOOL (WINAPI *pfnAddPortEx)(LPWSTR pName, DWORD Level, LPBYTE lpBuffer,
+ LPWSTR lpMonitorName);
+ BOOL (WINAPI *pfnConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL (WINAPI *pfnDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL (WINAPI *pfnGetPrinterDataFromPort)(HANDLE hPort, DWORD ControlID,
+ LPWSTR pValueName, LPWSTR lpInBuffer, DWORD cbInBuffer,
+ LPWSTR lpOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbReturned);
+ BOOL (WINAPI *pfnSetPortTimeOuts)(HANDLE hPort, LPCOMMTIMEOUTS lpCTO,
+ DWORD reserved);
+ BOOL (WINAPI *pfnXcvOpenPort)(HANDLE hMonitor, LPCWSTR pszObject,
+ ACCESS_MASK GrantedAccess, PHANDLE phXcv);
+ DWORD (WINAPI *pfnXcvDataPort)(HANDLE hXcv, LPCWSTR pszDataName,
+ PBYTE pInputData, DWORD cbInputData,
+ PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded);
+ BOOL (WINAPI *pfnXcvClosePort)(HANDLE hXcv);
+ /* Additions from MONITOR to MONITOR2 */
+ VOID (WINAPI *pfnShutdown)(HANDLE hMonitor);
+ DWORD (WINAPI *pfnSendRecvBidiDataFromPort)(HANDLE hPort, DWORD dwAccessBit,
+ LPCWSTR pAction, PBIDI_REQUEST_CONTAINER pReqData,
+ PBIDI_RESPONSE_CONTAINER *ppResData);
+} MONITOR2, *LPMONITOR2, *PMONITOR2;
+
+typedef struct _MONITOREX {
+ DWORD dwMonitorSize;
+ MONITOR Monitor;
+} MONITOREX, *LPMONITOREX;
+
+typedef struct _MONITORREG {
+ DWORD cbSize;
+ LONG (WINAPI *fpCreateKey)(HANDLE hcKey, LPCWSTR pszSubKey, DWORD dwOptions,
+ REGSAM samDesired, PSECURITY_ATTRIBUTES pSecurityAttributes,
+ PHANDLE phckResult, PDWORD pdwDisposition, HANDLE hSpooler);
+ LONG (WINAPI *fpOpenKey)(HANDLE hcKey, LPCWSTR pszSubKey, REGSAM samDesired,
+ PHANDLE phkResult, HANDLE hSpooler);
+ LONG (WINAPI *fpCloseKey)(HANDLE hcKey, HANDLE hSpooler);
+ LONG (WINAPI *fpDeleteKey)(HANDLE hcKey, LPCWSTR pszSubKey, HANDLE hSpooler);
+ LONG (WINAPI *fpEnumKey)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszName,
+ PDWORD pcchName, PFILETIME pftLastWriteTime, HANDLE hSpooler);
+ LONG (WINAPI *fpQueryInfoKey)(HANDLE hcKey, PDWORD pcSubKeys, PDWORD pcbKey,
+ PDWORD pcValues, PDWORD pcbValue, PDWORD pcbData,
+ PDWORD pcbSecurityDescriptor, PFILETIME pftLastWriteTime,
+ HANDLE hSpooler);
+ LONG (WINAPI *fpSetValue)(HANDLE hcKey, LPCWSTR pszValue, DWORD dwType,
+ const BYTE* pData, DWORD cbData, HANDLE hSpooler);
+ LONG (WINAPI *fpDeleteValue)(HANDLE hcKey, LPCWSTR pszValue, HANDLE hSpooler);
+ LONG (WINAPI *fpEnumValue)(HANDLE hcKey, DWORD dwIndex, LPWSTR pszValue,
+ PDWORD pcbValue, PDWORD pType, PBYTE pData, PDWORD pcbData,
+ HANDLE hSpooler);
+ LONG (WINAPI *fpQueryValue)(HANDLE hcKey, LPCWSTR pszValue, PDWORD pType,
+ PBYTE pData, PDWORD pcbData, HANDLE hSpooler);
+} MONITORREG, *PMONITORREG;
+
+typedef struct _MONITORINIT {
+ DWORD cbSize;
+ HANDLE hSpooler;
+ HANDLE hckRegistryRoot;
+ PMONITORREG pMonitorReg;
+ BOOL bLocal;
+} MONITORINIT, *PMONITORINIT;
+
+typedef struct _MONITORUI {
+ DWORD dwMonitorUISize;
+ BOOL (WINAPI *pfnAddPortUI)(PCWSTR pszServer, HWND hWnd,
+ PCWSTR pszPortNameIn, PWSTR *ppszPortNameOut);
+ BOOL (WINAPI *pfnConfigurePortUI)(PCWSTR pName, HWND hWnd, PCWSTR pPortName);
+ BOOL (WINAPI *pfnDeletePortUI)(PCWSTR pszServer, HWND hWnd, PCWSTR pszPortName);
+}MONITORUI, *PMONITORUI;
+
+typedef struct _PRINTER_NOTIFY_INIT {
+ DWORD Size;
+ DWORD Reserved;
+ DWORD PollTime;
+} PRINTER_NOTIFY_INIT, *LPPRINTER_NOTIFY_INIT, *PPRINTER_NOTIFY_INIT;
+
+typedef struct _PRINTPROCESSOROPENDATA {
+ PDEVMODEW pDevMode;
+ LPWSTR pDatatype;
+ LPWSTR pParameters;
+ LPWSTR pDocumentName;
+ DWORD JobId;
+ LPWSTR pOutputFile;
+ LPWSTR pPrinterName;
+} PRINTPROCESSOROPENDATA, *LPPRINTPROCESSOROPENDATA, *PPRINTPROCESSOROPENDATA;
+
+
+/*
+ * WARNING: Many Functions are declared as "BOOL", but return ROUTER_*
+ */
+
+typedef struct _PRINTPROVIDOR {
+ BOOL (WINAPI *fpOpenPrinter)(LPWSTR lpPrinterName, HANDLE *phPrinter,
+ LPPRINTER_DEFAULTSW pDefault);
+ BOOL (WINAPI *fpSetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
+ LPBYTE pJob, DWORD Command);
+ BOOL (WINAPI *fpGetJob)(HANDLE hPrinter, DWORD JobID, DWORD Level,
+ LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpEnumJobs)(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
+ DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcReturned);
+ HANDLE (WINAPI *fpAddPrinter)(LPWSTR pName, DWORD Level, LPBYTE pPrinter);
+ BOOL (WINAPI *fpDeletePrinter)(HANDLE hPrinter);
+ BOOL (WINAPI *fpSetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+ DWORD Command);
+ BOOL (WINAPI *fpGetPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpEnumPrinters)(DWORD dwType, LPWSTR lpszName, DWORD dwLevel,
+ LPBYTE lpbPrinters, DWORD cbBuf, LPDWORD lpdwNeeded,
+ LPDWORD lpdwReturned);
+ BOOL (WINAPI *fpAddPrinterDriver)(LPWSTR pName, DWORD Level,
+ LPBYTE pDriverInfo);
+ BOOL (WINAPI *fpEnumPrinterDrivers)(LPWSTR pName, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
+ LPDWORD pcbNeeded, LPDWORD pcbReturned);
+ BOOL (WINAPI *fpGetPrinterDriver)(HANDLE hPrinter, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf,
+ LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpGetPrinterDriverDirectory)(LPWSTR pName, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pDriverDirectory, DWORD cbBuf,
+ LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpDeletePrinterDriver)(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pDriverName);
+ BOOL (WINAPI *fpAddPrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pPathName, LPWSTR pPrintProcessorName);
+ BOOL (WINAPI *fpEnumPrintProcessors)(LPWSTR pName, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
+ LPDWORD pcbNeeded, LPDWORD pcbReturned);
+ BOOL (WINAPI *fpGetPrintProcessorDirectory)(LPWSTR pName, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf,
+ LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpDeletePrintProcessor)(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pPrintProcessorName);
+ BOOL (WINAPI *fpEnumPrintProcessorDatatypes)(LPWSTR pName,
+ LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcbReturned);
+ DWORD (WINAPI *fpStartDocPrinter)(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
+ BOOL (WINAPI *fpStartPagePrinter)(HANDLE hPrinter);
+ BOOL (WINAPI *fpWritePrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+ LPDWORD pcWritten);
+ BOOL (WINAPI *fpEndPagePrinter)(HANDLE hPrinter);
+ BOOL (WINAPI *fpAbortPrinter)(HANDLE hPrinter);
+ BOOL (WINAPI *fpReadPrinter)(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+ LPDWORD pNoBytesRead);
+ BOOL (WINAPI *fpEndDocPrinter)(HANDLE hPrinter);
+ BOOL (WINAPI *fpAddJob)(HANDLE hPrinter, DWORD Level, LPBYTE pData,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpScheduleJob)(HANDLE hPrinter, DWORD JobID);
+ DWORD (WINAPI *fpGetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
+ LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+ DWORD (WINAPI *fpSetPrinterData)(HANDLE hPrinter, LPWSTR pValueName,
+ DWORD Type, LPBYTE pData, DWORD cbData);
+ DWORD (WINAPI *fpWaitForPrinterChange)(HANDLE hPrinter, DWORD Flags);
+ BOOL (WINAPI *fpClosePrinter)(HANDLE phPrinter);
+ BOOL (WINAPI *fpAddForm)(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
+ BOOL (WINAPI *fpDeleteForm)(HANDLE hPrinter, LPWSTR pFormName);
+ BOOL (WINAPI *fpGetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+ LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
+ BOOL (WINAPI *fpSetForm)(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+ LPBYTE pForm);
+ BOOL (WINAPI *fpEnumForms)(HANDLE hPrinter, DWORD Level, LPBYTE pForm,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL (WINAPI *fpEnumMonitors)(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL (WINAPI *fpEnumPorts)(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+ BOOL (WINAPI *fpAddPort)(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+ BOOL (WINAPI *fpConfigurePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ BOOL (WINAPI *fpDeletePort)(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+ HANDLE (WINAPI *fpCreatePrinterIC)(HANDLE hPrinter, LPDEVMODEW pDevMode);
+ BOOL (WINAPI *fpPlayGdiScriptOnPrinterIC)(HANDLE hPrinterIC, LPBYTE pIn,
+ DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD ul);
+ BOOL (WINAPI *fpDeletePrinterIC)(HANDLE hPrinterIC);
+ BOOL (WINAPI *fpAddPrinterConnection)(LPWSTR pName);
+ BOOL (WINAPI *fpDeletePrinterConnection)(LPWSTR pName);
+ DWORD (WINAPI *fpPrinterMessageBox)(HANDLE hPrinter, DWORD Error, HWND hWnd,
+ LPWSTR pText, LPWSTR pCaption, DWORD dwType);
+ BOOL (WINAPI *fpAddMonitor)(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
+ BOOL (WINAPI *fpDeleteMonitor)(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pMonitorName);
+ BOOL (WINAPI *fpResetPrinter)(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
+ BOOL (WINAPI *fpGetPrinterDriverEx)(HANDLE hPrinter, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded,
+ DWORD dwClientMajorVersion, DWORD dwClientMinorVersion,
+ PDWORD pdwServerMajorVersion, PDWORD pdwServerMinorVersion);
+ HANDLE (WINAPI *fpFindFirstPrinterChangeNotification)(HANDLE hPrinter,
+ DWORD fdwFlags, DWORD fdwOptions, LPVOID pPrinterNotifyOptions);
+ BOOL (WINAPI *fpFindClosePrinterChangeNotification)(HANDLE hChange);
+ BOOL (WINAPI *fpAddPortEx)(LPWSTR, DWORD, LPBYTE, LPWSTR);
+ BOOL (WINAPI *fpShutDown)(LPVOID pvReserved);
+ BOOL (WINAPI *fpRefreshPrinterChangeNotification)(HANDLE hPrinter,
+ DWORD Reserved, PVOID pvReserved, PVOID pPrinterNotifyInfo);
+ BOOL (WINAPI *fpOpenPrinterEx)(LPWSTR pPrinterName, LPHANDLE phPrinter,
+ LPPRINTER_DEFAULTSW pDefault, LPBYTE pClientInfo, DWORD Level);
+ HANDLE (WINAPI *fpAddPrinterEx)(LPWSTR pName, DWORD Level, LPBYTE pPrinter,
+ LPBYTE pClientInfo, DWORD ClientInfoLevel);
+ BOOL (WINAPI *fpSetPort)(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,
+ LPBYTE pPortInfo);
+ DWORD (WINAPI *fpEnumPrinterData)( HANDLE hPrinter, DWORD dwIndex,
+ LPWSTR pValueName, DWORD cbValueName, LPDWORD pcbValueName,
+ LPDWORD pType, LPBYTE pData, DWORD cbData, LPDWORD pcbData);
+ DWORD (WINAPI *fpDeletePrinterData)(HANDLE hPrinter, LPWSTR pValueName);
+ DWORD (WINAPI *fpClusterSplOpen)(LPCWSTR pszServer, LPCWSTR pszResource,
+ PHANDLE phSpooler, LPCWSTR pszName, LPCWSTR pszAddress);
+ DWORD (WINAPI *fpClusterSplClose)(HANDLE hSpooler);
+ DWORD (WINAPI *fpClusterSplIsAlive)(HANDLE hSpooler);
+ DWORD (WINAPI *fpSetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPCWSTR pValueName, DWORD Type, LPBYTE pData, DWORD cbData);
+ DWORD (WINAPI *fpGetPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPCWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize,
+ LPDWORD pcbNeeded);
+ DWORD (WINAPI *fpEnumPrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPBYTE pEnumValues, DWORD cbEnumValues, LPDWORD pcbEnumValues,
+ LPDWORD pnEnumValues);
+ DWORD (WINAPI *fpEnumPrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPWSTR pSubkey, DWORD cbSubkey, LPDWORD pcbSubkey);
+ DWORD (WINAPI *fpDeletePrinterDataEx)(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPCWSTR pValueName);
+ DWORD (WINAPI *fpDeletePrinterKey)(HANDLE hPrinter, LPCWSTR pKeyName);
+ BOOL (WINAPI *fpSeekPrinter)(HANDLE hPrinter, LARGE_INTEGER liDistanceToMove,
+ PLARGE_INTEGER pliNewPointer, DWORD dwMoveMethod, BOOL bWrite);
+ BOOL (WINAPI *fpDeletePrinterDriverEx)(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionNum);
+ BOOL (WINAPI *fpAddPerMachineConnection)(LPCWSTR pServer,
+ LPCWSTR pPrinterName, LPCWSTR pPrintServer, LPCWSTR pProvider);
+ BOOL (WINAPI *fpDeletePerMachineConnection)(LPCWSTR pServer,
+ LPCWSTR pPrinterName);
+ BOOL (WINAPI *fpEnumPerMachineConnections)(LPCWSTR pServer,
+ LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcReturned);
+ BOOL (WINAPI *fpXcvData)(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
+ DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
+ PDWORD pcbOutputNeeded, PDWORD pdwStatus);
+ BOOL (WINAPI *fpAddPrinterDriverEx)(LPWSTR pName, DWORD Level,
+ LPBYTE pDriverInfo, DWORD dwFileCopyFlags);
+ BOOL (WINAPI *fpSplReadPrinter)(HANDLE hPrinter, LPBYTE *pBuf, DWORD cbBuf);
+ BOOL (WINAPI *fpDriverUnloadComplete)(LPWSTR pDriverFile);
+ BOOL (WINAPI *fpGetSpoolFileInfo)(HANDLE hPrinter, LPWSTR *pSpoolDir,
+ LPHANDLE phFile, HANDLE hSpoolerProcess, HANDLE hAppProcess);
+ BOOL (WINAPI *fpCommitSpoolData)(HANDLE hPrinter, DWORD cbCommit);
+ BOOL (WINAPI *fpCloseSpoolFileHandle)(HANDLE hPrinter);
+ BOOL (WINAPI *fpFlushPrinter)(HANDLE hPrinter, LPBYTE pBuf, DWORD cbBuf,
+ LPDWORD pcWritten, DWORD cSleep);
+ DWORD (WINAPI *fpSendRecvBidiData)(HANDLE hPort, LPCWSTR pAction,
+ LPBIDI_REQUEST_CONTAINER pReqData,
+ LPBIDI_RESPONSE_CONTAINER *ppResData);
+ BOOL (WINAPI *fpAddDriverCatalog)(HANDLE hPrinter, DWORD dwLevel,
+ VOID *pvDriverInfCatInfo, DWORD dwCatalogCopyFlags);
+} PRINTPROVIDOR, *LPPRINTPROVIDOR;
+
+typedef struct _SPLCLIENT_INFO_1 {
+ DWORD dwSize;
+ LPWSTR pMachineName;
+ LPWSTR pUserName;
+ DWORD dwBuildNum;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ WORD wProcessorArchitecture;
+} SPLCLIENT_INFO_1, *LPSPLCLIENT_INFO_1, *PSPLCLIENT_INFO_1;
+
+/* DECLARATIONS */
+
+HANDLE WINAPI CreatePrinterIC(HANDLE hPrinter, LPDEVMODEW pDevMode);
+BOOL WINAPI PlayGdiScriptOnPrinterIC(HANDLE hPrinterIC, LPBYTE pIn,
+ DWORD cIn, LPBYTE pOut, DWORD cOut, DWORD ul);
+BOOL WINAPI DeletePrinterIC(HANDLE hPrinterIC);
+BOOL WINAPI DevQueryPrint(HANDLE hPrinter, LPDEVMODEW pDevMode, DWORD *pResID);
+
+/* Security and Access */
+HANDLE WINAPI RevertToPrinterSelf(VOID);
+BOOL WINAPI ImpersonatePrinterClient(HANDLE hToken);
+BOOL WINAPI OpenPrinterToken(PHANDLE phToken);
+BOOL WINAPI SetPrinterToken(HANDLE hToken);
+BOOL WINAPI ClosePrinterToken(HANDLE hToken);
+
+/* Notification */
+BOOL WINAPI ReplyPrinterChangeNotification(HANDLE hNotify, DWORD fdwFlags,
+ PDWORD pdwResult, PVOID pPrinterNotifyInfo);
+BOOL WINAPI PartialReplyPrinterChangeNotification(HANDLE hNotify,
+ PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc);
+PPRINTER_NOTIFY_INFO RouterAllocPrinterNotifyInfo(DWORD cPrinterNotifyInfoData);
+BOOL WINAPI RouterFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
+BOOL WINAPI AppendPrinterNotifyInfoData(PPRINTER_NOTIFY_INFO pInfoDest,
+ PPRINTER_NOTIFY_INFO_DATA pInfoDataSrc, DWORD fdwFlags);
+DWORD WINAPI CallRouterFindFirstPrinterChangeNotification(HANDLE hPrinter,
+ DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify, PVOID pvReserved);
+
+/* Port monitor / Language monitor / Print monitor */
+LPMONITOR2 WINAPI InitializePrintMonitor2(PMONITORINIT pMonitorInit,
+ PHANDLE phMonitor);
+PMONITORUI WINAPI InitializePrintMonitorUI(VOID);
+LPMONITOREX WINAPI InitializePrintMonitor(LPWSTR pRegistryRoot);
+BOOL WINAPI InitializeMonitorEx(LPWSTR pRegistryRoot, LPMONITOR pMonitor);
+BOOL WINAPI InitializeMonitor(LPWSTR pRegistryRoot);
+
+BOOL WINAPI OpenPort(LPWSTR pName, PHANDLE pHandle);
+BOOL WINAPI WritePort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf,
+ LPDWORD pcbWritten);
+BOOL WINAPI ReadPort(HANDLE hPort, LPBYTE pBuffer, DWORD cbBuffer,
+ LPDWORD pcbRead);
+BOOL WINAPI ClosePort(HANDLE hPort);
+
+/* Print processor */
+HANDLE WINAPI OpenPrintProcessor(LPWSTR pPrinterName,
+ PPRINTPROCESSOROPENDATA pPrintProcessorOpenData);
+BOOL WINAPI PrintDocumentOnPrintProcessor(HANDLE hPrintProcessor,
+ LPWSTR pDocumentName);
+BOOL WINAPI ClosePrintProcessor(HANDLE hPrintProcessor);
+BOOL WINAPI ControlPrintProcessor(HANDLE hPrintProcessor, DWORD Command);
+BOOL WINAPI InstallPrintProcessor(HWND hWnd);
+
+/* Print provider */
+BOOL WINAPI InitializePrintProvidor(LPPRINTPROVIDOR pPrintProvidor,
+ DWORD cbPrintProvidor, LPWSTR pFullRegistryPath);
+BOOL WINAPI ProvidorFindFirstPrinterChangeNotification(HANDLE hPrinter,
+ DWORD fdwFlags, DWORD fdwOptions, HANDLE hNotify,
+ PVOID pvReserved0, PVOID pvReserved1);
+BOOL WINAPI ProvidorFindClosePrinterChangeNotification(HANDLE hPrinter);
+
+/* Spooler */
+BOOL WINAPI SpoolerFindFirstPrinterChangeNotification(HANDLE hPrinter,
+ DWORD fdwFlags, DWORD fdwOptions, PHANDLE phEvent,
+ PVOID pPrinterNotifyOptions, PVOID pvReserved);
+BOOL WINAPI SpoolerFindNextPrinterChangeNotification(HANDLE hPrinter,
+ LPDWORD pfdwChange, PVOID pvReserved0, PVOID ppPrinterNotifyInfo);
+VOID WINAPI SpoolerFreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pInfo);
+BOOL WINAPI SpoolerFindClosePrinterChangeNotification(HANDLE hPrinter);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _WINSPLP_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h
new file mode 100644
index 00000000..10e5745c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddraw.h
@@ -0,0 +1,2740 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDRAW_INCLUDED__
+#define __DDRAW_INCLUDED__
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef DIRECTDRAW_VERSION
+#define DIRECTDRAW_VERSION 0x0700
+#endif /* DIRECTDRAW_VERSION */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+#ifndef __DDRAW_GUID_DEFINED__
+DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );
+DEFINE_GUID( CLSID_DirectDraw7, 0x3C305196,0x50DB,0x11D3,0x9C,0xFE,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
+DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );
+DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
+DEFINE_GUID( IID_IDirectDraw3, 0x618f8ad4,0x8b7a,0x11d0,0x8f,0xcc,0x0,0xc0,0x4f,0xd9,0x18,0x9d );
+DEFINE_GUID( IID_IDirectDraw4, 0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );
+DEFINE_GUID( IID_IDirectDraw7, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
+DEFINE_GUID( IID_IDirectDrawSurface, 0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );
+DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );
+DEFINE_GUID( IID_IDirectDrawSurface4, 0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );
+DEFINE_GUID( IID_IDirectDrawSurface7, 0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );
+DEFINE_GUID( IID_IDirectDrawPalette, 0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDrawClipper, 0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
+DEFINE_GUID( IID_IDirectDrawColorControl,0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );
+DEFINE_GUID( IID_IDirectDrawGammaControl,0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );
+#endif
+
+typedef struct IDirectDraw *LPDIRECTDRAW;
+typedef struct IDirectDraw2 *LPDIRECTDRAW2;
+typedef struct IDirectDraw3 *LPDIRECTDRAW3;
+typedef struct IDirectDraw4 *LPDIRECTDRAW4;
+typedef struct IDirectDraw7 *LPDIRECTDRAW7;
+typedef struct IDirectDrawClipper *LPDIRECTDRAWCLIPPER;
+typedef struct IDirectDrawPalette *LPDIRECTDRAWPALETTE;
+typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE;
+typedef struct IDirectDrawSurface2 *LPDIRECTDRAWSURFACE2;
+typedef struct IDirectDrawSurface3 *LPDIRECTDRAWSURFACE3;
+typedef struct IDirectDrawSurface4 *LPDIRECTDRAWSURFACE4;
+typedef struct IDirectDrawSurface7 *LPDIRECTDRAWSURFACE7;
+typedef struct IDirectDrawColorControl *LPDIRECTDRAWCOLORCONTROL;
+typedef struct IDirectDrawGammaControl *LPDIRECTDRAWGAMMACONTROL;
+
+
+#define DDENUMRET_CANCEL 0
+#define DDENUMRET_OK 1
+
+#define DD_OK S_OK
+#define DD_FALSE S_FALSE
+
+
+#define _FACDD 0x876
+#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code )
+
+#define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 )
+#define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 )
+#define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 )
+#define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 )
+#define DDERR_EXCEPTION MAKE_DDHRESULT( 55 )
+#define DDERR_GENERIC E_FAIL
+#define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 )
+#define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 )
+#define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 )
+#define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 )
+#define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 )
+#define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 )
+#define DDERR_INVALIDPARAMS E_INVALIDARG
+#define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 )
+#define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 )
+#define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 )
+#define DDERR_NO3D MAKE_DDHRESULT( 170 )
+#define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 )
+#define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 )
+#define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 )
+#define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 )
+#define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 )
+#define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 )
+#define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 )
+#define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 )
+#define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 )
+#define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 )
+#define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 )
+#define DDERR_NOGDI MAKE_DDHRESULT( 240 )
+#define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 )
+#define DDERR_NOTFOUND MAKE_DDHRESULT( 255 )
+#define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 )
+#define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 )
+#define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 )
+#define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 )
+#define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 )
+#define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 )
+#define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 )
+#define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 )
+#define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 )
+#define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 )
+#define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 )
+#define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 )
+#define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 )
+#define DDERR_OUTOFMEMORY E_OUTOFMEMORY
+#define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 )
+#define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 )
+#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 )
+#define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 )
+#define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 )
+#define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 )
+#define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 )
+#define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 )
+#define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 )
+#define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 )
+#define DDERR_SURFACELOST MAKE_DDHRESULT( 450 )
+#define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 )
+#define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 )
+#define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 )
+#define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 )
+#define DDERR_UNSUPPORTED E_NOTIMPL
+#define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 )
+#define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 )
+#define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 )
+#define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 )
+#define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 )
+#define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 )
+#define DDERR_XALIGN MAKE_DDHRESULT( 560 )
+#define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 )
+#define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 )
+#define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 )
+#define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 )
+#define DDERR_NOEMULATION MAKE_DDHRESULT( 565 )
+#define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 )
+#define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 )
+#define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 )
+#define DDERR_NOHWND MAKE_DDHRESULT( 569 )
+#define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 )
+#define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 )
+#define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 )
+#define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 )
+#define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 )
+#define DDERR_NOBLTHW MAKE_DDHRESULT( 575 )
+#define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 )
+#define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 )
+#define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 )
+#define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 )
+#define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 )
+#define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 )
+#define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 )
+#define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 )
+#define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 )
+#define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 )
+#define DDERR_NODC MAKE_DDHRESULT( 586 )
+#define DDERR_WRONGMODE MAKE_DDHRESULT( 587 )
+#define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 )
+#define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 )
+#define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 )
+#define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 )
+#define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 )
+#define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 )
+#define DDERR_NOTLOADED MAKE_DDHRESULT( 601 )
+#define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 )
+#define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 )
+#define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 )
+#define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 )
+#define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 )
+#define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 )
+#define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 )
+#define DDERR_MOREDATA MAKE_DDHRESULT( 690 )
+#define DDERR_EXPIRED MAKE_DDHRESULT( 691 )
+#define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 )
+#define DDERR_NEWMODE MAKE_DDHRESULT( 693 )
+#define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 )
+#define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 )
+#define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 )
+#define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 )
+#define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 )
+#define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED
+
+/* dwFlags for Blt* */
+#define DDBLT_ALPHADEST 0x00000001
+#define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002
+#define DDBLT_ALPHADESTNEG 0x00000004
+#define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008
+#define DDBLT_ALPHAEDGEBLEND 0x00000010
+#define DDBLT_ALPHASRC 0x00000020
+#define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040
+#define DDBLT_ALPHASRCNEG 0x00000080
+#define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100
+#define DDBLT_ASYNC 0x00000200
+#define DDBLT_COLORFILL 0x00000400
+#define DDBLT_DDFX 0x00000800
+#define DDBLT_DDROPS 0x00001000
+#define DDBLT_KEYDEST 0x00002000
+#define DDBLT_KEYDESTOVERRIDE 0x00004000
+#define DDBLT_KEYSRC 0x00008000
+#define DDBLT_KEYSRCOVERRIDE 0x00010000
+#define DDBLT_ROP 0x00020000
+#define DDBLT_ROTATIONANGLE 0x00040000
+#define DDBLT_ZBUFFER 0x00080000
+#define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000
+#define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000
+#define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000
+#define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000
+#define DDBLT_WAIT 0x01000000
+#define DDBLT_DEPTHFILL 0x02000000
+#define DDBLT_DONOTWAIT 0x08000000
+
+/* dwTrans for BltFast */
+#define DDBLTFAST_NOCOLORKEY 0x00000000
+#define DDBLTFAST_SRCCOLORKEY 0x00000001
+#define DDBLTFAST_DESTCOLORKEY 0x00000002
+#define DDBLTFAST_WAIT 0x00000010
+#define DDBLTFAST_DONOTWAIT 0x00000020
+
+/* dwFlags for Flip */
+#define DDFLIP_WAIT 0x00000001
+#define DDFLIP_EVEN 0x00000002 /* only valid for overlay */
+#define DDFLIP_ODD 0x00000004 /* only valid for overlay */
+#define DDFLIP_NOVSYNC 0x00000008
+#define DDFLIP_STEREO 0x00000010
+#define DDFLIP_DONOTWAIT 0x00000020
+#define DDFLIP_INTERVAL2 0x02000000
+#define DDFLIP_INTERVAL3 0x03000000
+#define DDFLIP_INTERVAL4 0x04000000
+
+
+/* dwFlags for GetBltStatus */
+#define DDGBS_CANBLT 0x00000001
+#define DDGBS_ISBLTDONE 0x00000002
+
+/* dwFlags for IDirectDrawSurface7::GetFlipStatus */
+#define DDGFS_CANFLIP __MSABI_LONG(1)
+#define DDGFS_ISFLIPDONE __MSABI_LONG(2)
+
+/* dwFlags for IDirectDrawSurface7::SetPrivateData */
+#define DDSPD_IUNKNOWNPOINTER __MSABI_LONG(1)
+#define DDSPD_VOLATILE __MSABI_LONG(2)
+
+/* DDSCAPS.dwCaps */
+/* reserved1, was 3d capable */
+#define DDSCAPS_RESERVED1 0x00000001
+/* surface contains alpha information */
+#define DDSCAPS_ALPHA 0x00000002
+/* this surface is a backbuffer */
+#define DDSCAPS_BACKBUFFER 0x00000004
+/* complex surface structure */
+#define DDSCAPS_COMPLEX 0x00000008
+/* part of surface flipping structure */
+#define DDSCAPS_FLIP 0x00000010
+/* this surface is the frontbuffer surface */
+#define DDSCAPS_FRONTBUFFER 0x00000020
+/* this is a plain offscreen surface */
+#define DDSCAPS_OFFSCREENPLAIN 0x00000040
+/* overlay */
+#define DDSCAPS_OVERLAY 0x00000080
+/* palette objects can be created and attached to us */
+#define DDSCAPS_PALETTE 0x00000100
+/* primary surface (the one the user looks at currently)(right eye)*/
+#define DDSCAPS_PRIMARYSURFACE 0x00000200
+/* primary surface for left eye */
+#define DDSCAPS_PRIMARYSURFACELEFT 0x00000400
+/* surface exists in systemmemory */
+#define DDSCAPS_SYSTEMMEMORY 0x00000800
+/* surface can be used as a texture */
+#define DDSCAPS_TEXTURE 0x00001000
+/* surface may be destination for 3d rendering */
+#define DDSCAPS_3DDEVICE 0x00002000
+/* surface exists in videomemory */
+#define DDSCAPS_VIDEOMEMORY 0x00004000
+/* surface changes immediately visible */
+#define DDSCAPS_VISIBLE 0x00008000
+/* write only surface */
+#define DDSCAPS_WRITEONLY 0x00010000
+/* zbuffer surface */
+#define DDSCAPS_ZBUFFER 0x00020000
+/* has its own DC */
+#define DDSCAPS_OWNDC 0x00040000
+/* surface should be able to receive live video */
+#define DDSCAPS_LIVEVIDEO 0x00080000
+/* should be able to have a hw codec decompress stuff into it */
+#define DDSCAPS_HWCODEC 0x00100000
+/* mode X (320x200 or 320x240) surface */
+#define DDSCAPS_MODEX 0x00200000
+/* one mipmap surface (1 level) */
+#define DDSCAPS_MIPMAP 0x00400000
+#define DDSCAPS_RESERVED2 0x00800000
+/* memory allocation delayed until Load() */
+#define DDSCAPS_ALLOCONLOAD 0x04000000
+/* Indicates that the surface will receive data from a video port */
+#define DDSCAPS_VIDEOPORT 0x08000000
+/* surface is in local videomemory */
+#define DDSCAPS_LOCALVIDMEM 0x10000000
+/* surface is in nonlocal videomemory */
+#define DDSCAPS_NONLOCALVIDMEM 0x20000000
+/* surface is a standard VGA mode surface (NOT ModeX) */
+#define DDSCAPS_STANDARDVGAMODE 0x40000000
+/* optimized? surface */
+#define DDSCAPS_OPTIMIZED 0x80000000
+
+typedef struct _DDSCAPS {
+ DWORD dwCaps; /* capabilities of surface wanted */
+} DDSCAPS,*LPDDSCAPS;
+
+/* DDSCAPS2.dwCaps2 */
+/* indicates the surface will receive data from a video port using
+ deinterlacing hardware. */
+#define DDSCAPS2_HARDWAREDEINTERLACE 0x00000002
+/* indicates the surface will be locked very frequently. */
+#define DDSCAPS2_HINTDYNAMIC 0x00000004
+/* indicates surface can be re-ordered or retiled on load() */
+#define DDSCAPS2_HINTSTATIC 0x00000008
+/* indicates surface to be managed by directdraw/direct3D */
+#define DDSCAPS2_TEXTUREMANAGE 0x00000010
+/* reserved bits */
+#define DDSCAPS2_RESERVED1 0x00000020
+#define DDSCAPS2_RESERVED2 0x00000040
+/* indicates surface will never be locked again */
+#define DDSCAPS2_OPAQUE 0x00000080
+/* set at CreateSurface() time to indicate antialiasing will be used */
+#define DDSCAPS2_HINTANTIALIASING 0x00000100
+/* set at CreateSurface() time to indicate cubic environment map */
+#define DDSCAPS2_CUBEMAP 0x00000200
+/* face flags for cube maps */
+#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400
+#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800
+#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000
+#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000
+#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000
+#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000
+/* specifies all faces of a cube for CreateSurface() */
+#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\
+ DDSCAPS2_CUBEMAP_NEGATIVEX |\
+ DDSCAPS2_CUBEMAP_POSITIVEY |\
+ DDSCAPS2_CUBEMAP_NEGATIVEY |\
+ DDSCAPS2_CUBEMAP_POSITIVEZ |\
+ DDSCAPS2_CUBEMAP_NEGATIVEZ )
+/* set for mipmap sublevels on DirectX7 and later. ignored by CreateSurface() */
+#define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000
+/* indicates texture surface to be managed by Direct3D *only* */
+#define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000
+/* indicates managed surface that can safely be lost */
+#define DDSCAPS2_DONOTPERSIST 0x00040000
+/* indicates surface is part of a stereo flipping chain */
+#define DDSCAPS2_STEREOSURFACELEFT 0x00080000
+#define DDSCAPS2_VOLUME 0x00200000
+
+typedef struct _DDSCAPS2 {
+ DWORD dwCaps; /* capabilities of surface wanted */
+ DWORD dwCaps2; /* additional capabilities */
+ DWORD dwCaps3; /* reserved capabilities */
+ DWORD dwCaps4; /* more reserved capabilities */
+} DDSCAPS2,*LPDDSCAPS2;
+
+#define DD_ROP_SPACE (256/32) /* space required to store ROP array */
+
+typedef struct _DDCAPS_DX7 /* DirectX 7 version of caps struct */
+{
+ DWORD dwSize; /* size of the DDDRIVERCAPS structure */
+ DWORD dwCaps; /* driver specific capabilities */
+ DWORD dwCaps2; /* more driver specific capabilities */
+ DWORD dwCKeyCaps; /* color key capabilities of the surface */
+ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */
+ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */
+ DWORD dwPalCaps; /* palette capabilities */
+ DWORD dwSVCaps; /* stereo vision capabilities */
+ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */
+ DWORD dwVidMemTotal; /* total amount of video memory */
+ DWORD dwVidMemFree; /* amount of free video memory */
+ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */
+ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */
+ DWORD dwNumFourCCCodes; /* number of four cc codes */
+ DWORD dwAlignBoundarySrc; /* source rectangle alignment */
+ DWORD dwAlignSizeSrc; /* source rectangle byte size */
+ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */
+ DWORD dwAlignSizeDest; /* dest rectangle byte size */
+ DWORD dwAlignStrideAlign; /* stride alignment */
+ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */
+ DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */
+ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */
+ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */
+ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */
+ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */
+ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */
+ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */
+ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */
+ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */
+ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */
+ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+ DWORD dwMaxVideoPorts; /* maximum number of usable video ports */
+ DWORD dwCurrVideoPorts; /* current number of video ports used */
+ DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */
+ DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */
+ DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */
+ DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */
+ DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */
+ DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */
+ DDSCAPS2 ddsCaps; /* surface capabilities */
+} DDCAPS_DX7,*LPDDCAPS_DX7;
+
+typedef struct _DDCAPS_DX6 /* DirectX 6 version of caps struct */
+{
+ DWORD dwSize; /* size of the DDDRIVERCAPS structure */
+ DWORD dwCaps; /* driver specific capabilities */
+ DWORD dwCaps2; /* more driver specific capabilities */
+ DWORD dwCKeyCaps; /* color key capabilities of the surface */
+ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */
+ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */
+ DWORD dwPalCaps; /* palette capabilities */
+ DWORD dwSVCaps; /* stereo vision capabilities */
+ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */
+ DWORD dwVidMemTotal; /* total amount of video memory */
+ DWORD dwVidMemFree; /* amount of free video memory */
+ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */
+ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */
+ DWORD dwNumFourCCCodes; /* number of four cc codes */
+ DWORD dwAlignBoundarySrc; /* source rectangle alignment */
+ DWORD dwAlignSizeSrc; /* source rectangle byte size */
+ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */
+ DWORD dwAlignSizeDest; /* dest rectangle byte size */
+ DWORD dwAlignStrideAlign; /* stride alignment */
+ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */
+ DDSCAPS ddsOldCaps; /* old DDSCAPS - superseded for DirectX6+ */
+ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */
+ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */
+ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */
+ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */
+ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */
+ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */
+ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */
+ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */
+ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */
+ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+ DWORD dwMaxVideoPorts; /* maximum number of usable video ports */
+ DWORD dwCurrVideoPorts; /* current number of video ports used */
+ DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */
+ DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */
+ DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */
+ DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */
+ DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */
+ DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */
+ /* and one new member for DirectX 6 */
+ DDSCAPS2 ddsCaps; /* surface capabilities */
+} DDCAPS_DX6,*LPDDCAPS_DX6;
+
+typedef struct _DDCAPS_DX5 /* DirectX5 version of caps struct */
+{
+ DWORD dwSize; /* size of the DDDRIVERCAPS structure */
+ DWORD dwCaps; /* driver specific capabilities */
+ DWORD dwCaps2; /* more driver specific capabilities */
+ DWORD dwCKeyCaps; /* color key capabilities of the surface */
+ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */
+ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */
+ DWORD dwPalCaps; /* palette capabilities */
+ DWORD dwSVCaps; /* stereo vision capabilities */
+ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */
+ DWORD dwVidMemTotal; /* total amount of video memory */
+ DWORD dwVidMemFree; /* amount of free video memory */
+ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */
+ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */
+ DWORD dwNumFourCCCodes; /* number of four cc codes */
+ DWORD dwAlignBoundarySrc; /* source rectangle alignment */
+ DWORD dwAlignSizeSrc; /* source rectangle byte size */
+ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */
+ DWORD dwAlignSizeDest; /* dest rectangle byte size */
+ DWORD dwAlignStrideAlign; /* stride alignment */
+ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */
+ DDSCAPS ddsCaps; /* DDSCAPS structure has all the general capabilities */
+ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */
+ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */
+ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */
+ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */
+ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */
+ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */
+ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */
+ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */
+ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */
+ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+ /* the following are the new DirectX 5 members */
+ DWORD dwMaxVideoPorts; /* maximum number of usable video ports */
+ DWORD dwCurrVideoPorts; /* current number of video ports used */
+ DWORD dwSVBCaps2; /* more driver specific capabilities for System->Vmem blts */
+ DWORD dwNLVBCaps; /* driver specific capabilities for non-local->local vidmem blts */
+ DWORD dwNLVBCaps2; /* more driver specific capabilities non-local->local vidmem blts */
+ DWORD dwNLVBCKeyCaps; /* driver color key capabilities for non-local->local vidmem blts */
+ DWORD dwNLVBFXCaps; /* driver FX capabilities for non-local->local blts */
+ DWORD dwNLVBRops[DD_ROP_SPACE]; /* ROPs supported for non-local->local blts */
+} DDCAPS_DX5,*LPDDCAPS_DX5;
+
+typedef struct _DDCAPS_DX3 /* DirectX3 version of caps struct */
+{
+ DWORD dwSize; /* size of the DDDRIVERCAPS structure */
+ DWORD dwCaps; /* driver specific capabilities */
+ DWORD dwCaps2; /* more driver specific capabilities */
+ DWORD dwCKeyCaps; /* color key capabilities of the surface */
+ DWORD dwFXCaps; /* driver specific stretching and effects capabilities */
+ DWORD dwFXAlphaCaps; /* alpha driver specific capabilities */
+ DWORD dwPalCaps; /* palette capabilities */
+ DWORD dwSVCaps; /* stereo vision capabilities */
+ DWORD dwAlphaBltConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaBltPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaBltSurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlayConstBitDepths; /* DDBD_2,4,8 */
+ DWORD dwAlphaOverlayPixelBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwAlphaOverlaySurfaceBitDepths; /* DDBD_1,2,4,8 */
+ DWORD dwZBufferBitDepths; /* DDBD_8,16,24,32 */
+ DWORD dwVidMemTotal; /* total amount of video memory */
+ DWORD dwVidMemFree; /* amount of free video memory */
+ DWORD dwMaxVisibleOverlays; /* maximum number of visible overlays */
+ DWORD dwCurrVisibleOverlays; /* current number of visible overlays */
+ DWORD dwNumFourCCCodes; /* number of four cc codes */
+ DWORD dwAlignBoundarySrc; /* source rectangle alignment */
+ DWORD dwAlignSizeSrc; /* source rectangle byte size */
+ DWORD dwAlignBoundaryDest; /* dest rectangle alignment */
+ DWORD dwAlignSizeDest; /* dest rectangle byte size */
+ DWORD dwAlignStrideAlign; /* stride alignment */
+ DWORD dwRops[DD_ROP_SPACE]; /* ROPs supported */
+ DDSCAPS ddsCaps; /* DDSCAPS structure has all the general capabilities */
+ DWORD dwMinOverlayStretch; /* minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxOverlayStretch; /* maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinLiveVideoStretch; /* minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxLiveVideoStretch; /* maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMinHwCodecStretch; /* minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwMaxHwCodecStretch; /* maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 */
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwSVBCaps; /* driver specific capabilities for System->Vmem blts */
+ DWORD dwSVBCKeyCaps; /* driver color key capabilities for System->Vmem blts */
+ DWORD dwSVBFXCaps; /* driver FX capabilities for System->Vmem blts */
+ DWORD dwSVBRops[DD_ROP_SPACE];/* ROPs supported for System->Vmem blts */
+ DWORD dwVSBCaps; /* driver specific capabilities for Vmem->System blts */
+ DWORD dwVSBCKeyCaps; /* driver color key capabilities for Vmem->System blts */
+ DWORD dwVSBFXCaps; /* driver FX capabilities for Vmem->System blts */
+ DWORD dwVSBRops[DD_ROP_SPACE];/* ROPs supported for Vmem->System blts */
+ DWORD dwSSBCaps; /* driver specific capabilities for System->System blts */
+ DWORD dwSSBCKeyCaps; /* driver color key capabilities for System->System blts */
+ DWORD dwSSBFXCaps; /* driver FX capabilities for System->System blts */
+ DWORD dwSSBRops[DD_ROP_SPACE];/* ROPs supported for System->System blts */
+ DWORD dwReserved4;
+ DWORD dwReserved5;
+ DWORD dwReserved6;
+} DDCAPS_DX3,*LPDDCAPS_DX3;
+
+/* set caps struct according to DIRECTDRAW_VERSION */
+
+#if DIRECTDRAW_VERSION <= 0x300
+typedef DDCAPS_DX3 DDCAPS;
+#elif DIRECTDRAW_VERSION <= 0x500
+typedef DDCAPS_DX5 DDCAPS;
+#elif DIRECTDRAW_VERSION <= 0x600
+typedef DDCAPS_DX6 DDCAPS;
+#else
+typedef DDCAPS_DX7 DDCAPS;
+#endif
+
+typedef DDCAPS *LPDDCAPS;
+
+/* DDCAPS.dwCaps */
+#define DDCAPS_3D 0x00000001
+#define DDCAPS_ALIGNBOUNDARYDEST 0x00000002
+#define DDCAPS_ALIGNSIZEDEST 0x00000004
+#define DDCAPS_ALIGNBOUNDARYSRC 0x00000008
+#define DDCAPS_ALIGNSIZESRC 0x00000010
+#define DDCAPS_ALIGNSTRIDE 0x00000020
+#define DDCAPS_BLT 0x00000040
+#define DDCAPS_BLTQUEUE 0x00000080
+#define DDCAPS_BLTFOURCC 0x00000100
+#define DDCAPS_BLTSTRETCH 0x00000200
+#define DDCAPS_GDI 0x00000400
+#define DDCAPS_OVERLAY 0x00000800
+#define DDCAPS_OVERLAYCANTCLIP 0x00001000
+#define DDCAPS_OVERLAYFOURCC 0x00002000
+#define DDCAPS_OVERLAYSTRETCH 0x00004000
+#define DDCAPS_PALETTE 0x00008000
+#define DDCAPS_PALETTEVSYNC 0x00010000
+#define DDCAPS_READSCANLINE 0x00020000
+#define DDCAPS_STEREOVIEW 0x00040000
+#define DDCAPS_VBI 0x00080000
+#define DDCAPS_ZBLTS 0x00100000
+#define DDCAPS_ZOVERLAYS 0x00200000
+#define DDCAPS_COLORKEY 0x00400000
+#define DDCAPS_ALPHA 0x00800000
+#define DDCAPS_COLORKEYHWASSIST 0x01000000
+#define DDCAPS_NOHARDWARE 0x02000000
+#define DDCAPS_BLTCOLORFILL 0x04000000
+#define DDCAPS_BANKSWITCHED 0x08000000
+#define DDCAPS_BLTDEPTHFILL 0x10000000
+#define DDCAPS_CANCLIP 0x20000000
+#define DDCAPS_CANCLIPSTRETCHED 0x40000000
+#define DDCAPS_CANBLTSYSMEM 0x80000000
+
+/* DDCAPS.dwCaps2 */
+#define DDCAPS2_CERTIFIED 0x00000001
+#define DDCAPS2_NO2DDURING3DSCENE 0x00000002
+#define DDCAPS2_VIDEOPORT 0x00000004
+#define DDCAPS2_AUTOFLIPOVERLAY 0x00000008
+#define DDCAPS2_CANBOBINTERLEAVED 0x00000010
+#define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020
+#define DDCAPS2_COLORCONTROLOVERLAY 0x00000040
+#define DDCAPS2_COLORCONTROLPRIMARY 0x00000080
+#define DDCAPS2_CANDROPZ16BIT 0x00000100
+#define DDCAPS2_NONLOCALVIDMEM 0x00000200
+#define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400
+#define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800
+#define DDCAPS2_WIDESURFACES 0x00001000
+#define DDCAPS2_CANFLIPODDEVEN 0x00002000
+#define DDCAPS2_CANBOBHARDWARE 0x00004000
+#define DDCAPS2_COPYFOURCC 0x00008000
+#define DDCAPS2_PRIMARYGAMMA 0x00020000
+#define DDCAPS2_CANRENDERWINDOWED 0x00080000
+#define DDCAPS2_CANCALIBRATEGAMMA 0x00100000
+#define DDCAPS2_FLIPINTERVAL 0x00200000
+#define DDCAPS2_FLIPNOVSYNC 0x00400000
+#define DDCAPS2_CANMANAGETEXTURE 0x00800000
+#define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000
+#define DDCAPS2_STEREO 0x02000000
+#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000
+
+
+/* Set/Get Colour Key Flags */
+#define DDCKEY_COLORSPACE 0x00000001 /* Struct is single colour space */
+#define DDCKEY_DESTBLT 0x00000002 /* To be used as dest for blt */
+#define DDCKEY_DESTOVERLAY 0x00000004 /* To be used as dest for CK overlays */
+#define DDCKEY_SRCBLT 0x00000008 /* To be used as src for blt */
+#define DDCKEY_SRCOVERLAY 0x00000010 /* To be used as src for CK overlays */
+
+typedef struct _DDCOLORKEY
+{
+ DWORD dwColorSpaceLowValue;/* low boundary of color space that is to
+ * be treated as Color Key, inclusive
+ */
+ DWORD dwColorSpaceHighValue;/* high boundary of color space that is
+ * to be treated as Color Key, inclusive
+ */
+} DDCOLORKEY,*LPDDCOLORKEY;
+
+/* ddCKEYCAPS bits */
+#define DDCKEYCAPS_DESTBLT 0x00000001
+#define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002
+#define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004
+#define DDCKEYCAPS_DESTBLTYUV 0x00000008
+#define DDCKEYCAPS_DESTOVERLAY 0x00000010
+#define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020
+#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040
+#define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080
+#define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100
+#define DDCKEYCAPS_SRCBLT 0x00000200
+#define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400
+#define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800
+#define DDCKEYCAPS_SRCBLTYUV 0x00001000
+#define DDCKEYCAPS_SRCOVERLAY 0x00002000
+#define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000
+#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000
+#define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000
+#define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000
+#define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000
+
+typedef struct _DDPIXELFORMAT {
+ DWORD dwSize; /* 0: size of structure */
+ DWORD dwFlags; /* 4: pixel format flags */
+ DWORD dwFourCC; /* 8: (FOURCC code) */
+ union {
+ DWORD dwRGBBitCount; /* C: how many bits per pixel */
+ DWORD dwYUVBitCount; /* C: how many bits per pixel */
+ DWORD dwZBufferBitDepth; /* C: how many bits for z buffers */
+ DWORD dwAlphaBitDepth; /* C: how many bits for alpha channels*/
+ DWORD dwLuminanceBitCount;
+ DWORD dwBumpBitCount;
+ } DUMMYUNIONNAME1;
+ union {
+ DWORD dwRBitMask; /* 10: mask for red bit*/
+ DWORD dwYBitMask; /* 10: mask for Y bits*/
+ DWORD dwStencilBitDepth;
+ DWORD dwLuminanceBitMask;
+ DWORD dwBumpDuBitMask;
+ } DUMMYUNIONNAME2;
+ union {
+ DWORD dwGBitMask; /* 14: mask for green bits*/
+ DWORD dwUBitMask; /* 14: mask for U bits*/
+ DWORD dwZBitMask;
+ DWORD dwBumpDvBitMask;
+ } DUMMYUNIONNAME3;
+ union {
+ DWORD dwBBitMask; /* 18: mask for blue bits*/
+ DWORD dwVBitMask; /* 18: mask for V bits*/
+ DWORD dwStencilBitMask;
+ DWORD dwBumpLuminanceBitMask;
+ } DUMMYUNIONNAME4;
+ union {
+ DWORD dwRGBAlphaBitMask; /* 1C: mask for alpha channel */
+ DWORD dwYUVAlphaBitMask; /* 1C: mask for alpha channel */
+ DWORD dwLuminanceAlphaBitMask;
+ DWORD dwRGBZBitMask; /* 1C: mask for Z channel */
+ DWORD dwYUVZBitMask; /* 1C: mask for Z channel */
+ } DUMMYUNIONNAME5;
+ /* 20: next structure */
+} DDPIXELFORMAT,*LPDDPIXELFORMAT;
+
+#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+
+/* DDCAPS.dwFXCaps */
+#define DDFXCAPS_BLTALPHA 0x00000001
+#define DDFXCAPS_OVERLAYALPHA 0x00000004
+#define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010
+#define DDFXCAPS_BLTARITHSTRETCHY 0x00000020
+#define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040
+#define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080
+#define DDFXCAPS_BLTROTATION 0x00000100
+#define DDFXCAPS_BLTROTATION90 0x00000200
+#define DDFXCAPS_BLTSHRINKX 0x00000400
+#define DDFXCAPS_BLTSHRINKXN 0x00000800
+#define DDFXCAPS_BLTSHRINKY 0x00001000
+#define DDFXCAPS_BLTSHRINKYN 0x00002000
+#define DDFXCAPS_BLTSTRETCHX 0x00004000
+#define DDFXCAPS_BLTSTRETCHXN 0x00008000
+#define DDFXCAPS_BLTSTRETCHY 0x00010000
+#define DDFXCAPS_BLTSTRETCHYN 0x00020000
+#define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000
+#define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008
+#define DDFXCAPS_OVERLAYSHRINKX 0x00080000
+#define DDFXCAPS_OVERLAYSHRINKXN 0x00100000
+#define DDFXCAPS_OVERLAYSHRINKY 0x00200000
+#define DDFXCAPS_OVERLAYSHRINKYN 0x00400000
+#define DDFXCAPS_OVERLAYSTRETCHX 0x00800000
+#define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000
+#define DDFXCAPS_OVERLAYSTRETCHY 0x02000000
+#define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000
+#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000
+#define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000
+
+#define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY
+
+/* DDCAPS.dwFXAlphaCaps */
+#define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001
+#define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002
+#define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004
+#define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008
+#define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010
+#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020
+#define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040
+#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080
+#define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100
+#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200
+
+/* DDCAPS.dwPalCaps */
+#define DDPCAPS_4BIT 0x00000001
+#define DDPCAPS_8BITENTRIES 0x00000002
+#define DDPCAPS_8BIT 0x00000004
+#define DDPCAPS_INITIALIZE 0x00000008
+#define DDPCAPS_PRIMARYSURFACE 0x00000010
+#define DDPCAPS_PRIMARYSURFACELEFT 0x00000020
+#define DDPCAPS_ALLOW256 0x00000040
+#define DDPCAPS_VSYNC 0x00000080
+#define DDPCAPS_1BIT 0x00000100
+#define DDPCAPS_2BIT 0x00000200
+#define DDPCAPS_ALPHA 0x00000400
+
+/* DDCAPS.dwSVCaps */
+/* the first 4 of these are now obsolete */
+#if DIRECTDRAW_VERSION >= 0x700 /* FIXME: I'm not sure when this switch occurred */
+#define DDSVCAPS_RESERVED1 0x00000001
+#define DDSVCAPS_RESERVED2 0x00000002
+#define DDSVCAPS_RESERVED3 0x00000004
+#define DDSVCAPS_RESERVED4 0x00000008
+#else
+#define DDSVCAPS_ENIGMA 0x00000001
+#define DDSVCAPS_FLICKER 0x00000002
+#define DDSVCAPS_REDBLUE 0x00000004
+#define DDSVCAPS_SPLIT 0x00000008
+#endif
+#define DDSVCAPS_STEREOSEQUENTIAL 0x00000010
+
+/* BitDepths */
+#define DDBD_1 0x00004000
+#define DDBD_2 0x00002000
+#define DDBD_4 0x00001000
+#define DDBD_8 0x00000800
+#define DDBD_16 0x00000400
+#define DDBD_24 0x00000200
+#define DDBD_32 0x00000100
+
+/* DDOVERLAYFX.dwDDFX */
+#define DDOVERFX_ARITHSTRETCHY 0x00000001
+#define DDOVERFX_MIRRORLEFTRIGHT 0x00000002
+#define DDOVERFX_MIRRORUPDOWN 0x00000004
+
+/* UpdateOverlay flags */
+#define DDOVER_ALPHADEST 0x00000001
+#define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002
+#define DDOVER_ALPHADESTNEG 0x00000004
+#define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008
+#define DDOVER_ALPHAEDGEBLEND 0x00000010
+#define DDOVER_ALPHASRC 0x00000020
+#define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040
+#define DDOVER_ALPHASRCNEG 0x00000080
+#define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100
+#define DDOVER_HIDE 0x00000200
+#define DDOVER_KEYDEST 0x00000400
+#define DDOVER_KEYDESTOVERRIDE 0x00000800
+#define DDOVER_KEYSRC 0x00001000
+#define DDOVER_KEYSRCOVERRIDE 0x00002000
+#define DDOVER_SHOW 0x00004000
+#define DDOVER_ADDDIRTYRECT 0x00008000
+#define DDOVER_REFRESHDIRTYRECTS 0x00010000
+#define DDOVER_REFRESHALL 0x00020000
+#define DDOVER_DDFX 0x00080000
+#define DDOVER_AUTOFLIP 0x00100000
+#define DDOVER_BOB 0x00200000
+#define DDOVER_OVERRIDEBOBWEAVE 0x00400000
+#define DDOVER_INTERLEAVED 0x00800000
+
+/* DDPIXELFORMAT.dwFlags */
+#define DDPF_ALPHAPIXELS 0x00000001
+#define DDPF_ALPHA 0x00000002
+#define DDPF_FOURCC 0x00000004
+#define DDPF_PALETTEINDEXED4 0x00000008
+#define DDPF_PALETTEINDEXEDTO8 0x00000010
+#define DDPF_PALETTEINDEXED8 0x00000020
+#define DDPF_RGB 0x00000040
+#define DDPF_COMPRESSED 0x00000080
+#define DDPF_RGBTOYUV 0x00000100
+#define DDPF_YUV 0x00000200
+#define DDPF_ZBUFFER 0x00000400
+#define DDPF_PALETTEINDEXED1 0x00000800
+#define DDPF_PALETTEINDEXED2 0x00001000
+#define DDPF_ZPIXELS 0x00002000
+#define DDPF_STENCILBUFFER 0x00004000
+#define DDPF_ALPHAPREMULT 0x00008000
+#define DDPF_LUMINANCE 0x00020000
+#define DDPF_BUMPLUMINANCE 0x00040000
+#define DDPF_BUMPDUDV 0x00080000
+
+/* SetCooperativeLevel dwFlags */
+#define DDSCL_FULLSCREEN 0x00000001
+#define DDSCL_ALLOWREBOOT 0x00000002
+#define DDSCL_NOWINDOWCHANGES 0x00000004
+#define DDSCL_NORMAL 0x00000008
+#define DDSCL_EXCLUSIVE 0x00000010
+#define DDSCL_ALLOWMODEX 0x00000040
+#define DDSCL_SETFOCUSWINDOW 0x00000080
+#define DDSCL_SETDEVICEWINDOW 0x00000100
+#define DDSCL_CREATEDEVICEWINDOW 0x00000200
+#define DDSCL_MULTITHREADED 0x00000400
+#define DDSCL_FPUSETUP 0x00000800
+#define DDSCL_FPUPRESERVE 0x00001000
+
+
+/* DDSURFACEDESC.dwFlags */
+#define DDSD_CAPS 0x00000001
+#define DDSD_HEIGHT 0x00000002
+#define DDSD_WIDTH 0x00000004
+#define DDSD_PITCH 0x00000008
+#define DDSD_BACKBUFFERCOUNT 0x00000020
+#define DDSD_ZBUFFERBITDEPTH 0x00000040
+#define DDSD_ALPHABITDEPTH 0x00000080
+#define DDSD_LPSURFACE 0x00000800
+#define DDSD_PIXELFORMAT 0x00001000
+#define DDSD_CKDESTOVERLAY 0x00002000
+#define DDSD_CKDESTBLT 0x00004000
+#define DDSD_CKSRCOVERLAY 0x00008000
+#define DDSD_CKSRCBLT 0x00010000
+#define DDSD_MIPMAPCOUNT 0x00020000
+#define DDSD_REFRESHRATE 0x00040000
+#define DDSD_LINEARSIZE 0x00080000
+#define DDSD_TEXTURESTAGE 0x00100000
+#define DDSD_FVF 0x00200000
+#define DDSD_SRCVBHANDLE 0x00400000
+#define DDSD_DEPTH 0x00800000
+#define DDSD_ALL 0x00fff9ee
+
+/* EnumSurfaces flags */
+#define DDENUMSURFACES_ALL 0x00000001
+#define DDENUMSURFACES_MATCH 0x00000002
+#define DDENUMSURFACES_NOMATCH 0x00000004
+#define DDENUMSURFACES_CANBECREATED 0x00000008
+#define DDENUMSURFACES_DOESEXIST 0x00000010
+
+/* SetDisplayMode flags */
+#define DDSDM_STANDARDVGAMODE 0x00000001
+
+/* EnumDisplayModes flags */
+#define DDEDM_REFRESHRATES 0x00000001
+#define DDEDM_STANDARDVGAMODES 0x00000002
+
+/* WaitForVerticalDisplay flags */
+
+#define DDWAITVB_BLOCKBEGIN 0x00000001
+#define DDWAITVB_BLOCKBEGINEVENT 0x00000002
+#define DDWAITVB_BLOCKEND 0x00000004
+
+typedef struct _DDSURFACEDESC
+{
+ DWORD dwSize; /* 0: size of the DDSURFACEDESC structure*/
+ DWORD dwFlags; /* 4: determines what fields are valid*/
+ DWORD dwHeight; /* 8: height of surface to be created*/
+ DWORD dwWidth; /* C: width of input surface*/
+ union {
+ LONG lPitch; /* 10: distance to start of next line (return value only)*/
+ DWORD dwLinearSize;
+ } DUMMYUNIONNAME1;
+ DWORD dwBackBufferCount;/* 14: number of back buffers requested*/
+ union {
+ DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/
+ DWORD dwZBufferBitDepth;/*18: depth of Z buffer requested*/
+ DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/
+ } DUMMYUNIONNAME2;
+ DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/
+ DWORD dwReserved; /* 20:reserved*/
+ void *lpSurface; /* 24:pointer to the associated surface memory*/
+ DDCOLORKEY ddckCKDestOverlay;/* 28: CK for dest overlay use*/
+ DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/
+ DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/
+ DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/
+ DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/
+ DDSCAPS ddsCaps; /* 68: direct draw surface caps */
+} DDSURFACEDESC,*LPDDSURFACEDESC;
+
+typedef struct _DDSURFACEDESC2
+{
+ DWORD dwSize; /* 0: size of the DDSURFACEDESC2 structure*/
+ DWORD dwFlags; /* 4: determines what fields are valid*/
+ DWORD dwHeight; /* 8: height of surface to be created*/
+ DWORD dwWidth; /* C: width of input surface*/
+ union {
+ LONG lPitch; /*10: distance to start of next line (return value only)*/
+ DWORD dwLinearSize; /*10: formless late-allocated optimized surface size */
+ } DUMMYUNIONNAME1;
+ DWORD dwBackBufferCount;/* 14: number of back buffers requested*/
+ union {
+ DWORD dwMipMapCount;/* 18:number of mip-map levels requested*/
+ DWORD dwRefreshRate;/* 18:refresh rate (used when display mode is described)*/
+ DWORD dwSrcVBHandle;/* 18:source used in VB::Optimize */
+ } DUMMYUNIONNAME2;
+ DWORD dwAlphaBitDepth;/* 1C:depth of alpha buffer requested*/
+ DWORD dwReserved; /* 20:reserved*/
+ void *lpSurface; /* 24:pointer to the associated surface memory*/
+ union {
+ DDCOLORKEY ddckCKDestOverlay; /* 28: CK for dest overlay use*/
+ DWORD dwEmptyFaceColor; /* 28: color for empty cubemap faces */
+ } DUMMYUNIONNAME3;
+ DDCOLORKEY ddckCKDestBlt; /* 30: CK for destination blt use*/
+ DDCOLORKEY ddckCKSrcOverlay;/* 38: CK for source overlay use*/
+ DDCOLORKEY ddckCKSrcBlt; /* 40: CK for source blt use*/
+
+ union {
+ DDPIXELFORMAT ddpfPixelFormat;/* 48: pixel format description of the surface*/
+ DWORD dwFVF; /* 48: vertex format description of vertex buffers */
+ } DUMMYUNIONNAME4;
+ DDSCAPS2 ddsCaps; /* 68: DDraw surface caps */
+ DWORD dwTextureStage; /* 78: stage in multitexture cascade */
+} DDSURFACEDESC2,*LPDDSURFACEDESC2;
+
+/* DDCOLORCONTROL.dwFlags */
+#define DDCOLOR_BRIGHTNESS 0x00000001
+#define DDCOLOR_CONTRAST 0x00000002
+#define DDCOLOR_HUE 0x00000004
+#define DDCOLOR_SATURATION 0x00000008
+#define DDCOLOR_SHARPNESS 0x00000010
+#define DDCOLOR_GAMMA 0x00000020
+#define DDCOLOR_COLORENABLE 0x00000040
+
+typedef struct {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LONG lBrightness;
+ LONG lContrast;
+ LONG lHue;
+ LONG lSaturation;
+ LONG lSharpness;
+ LONG lGamma;
+ LONG lColorEnable;
+ DWORD dwReserved1;
+} DDCOLORCONTROL,*LPDDCOLORCONTROL;
+
+typedef struct {
+ WORD red[256];
+ WORD green[256];
+ WORD blue[256];
+} DDGAMMARAMP,*LPDDGAMMARAMP;
+
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKA)(GUID *guid, char *driver_description, char *driver_name, void *ctx);
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKW)(GUID *guid, WCHAR *driver_description, WCHAR *driver_name, void *ctx);
+DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACK)
+
+typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK)(DDSURFACEDESC *desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMMODESCALLBACK2)(DDSURFACEDESC2 *desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK)(struct IDirectDrawSurface *surface,
+ DDSURFACEDESC *surface_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK2)(struct IDirectDrawSurface4 *surface,
+ DDSURFACEDESC2 *surface_desc, void *ctx);
+typedef HRESULT (CALLBACK *LPDDENUMSURFACESCALLBACK7)(struct IDirectDrawSurface7 *surface,
+ DDSURFACEDESC2 *surface_desc, void *ctx);
+
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXA)(GUID *guid, char *driver_description,
+ char *driver_name, void *ctx, HMONITOR monitor);
+typedef BOOL (CALLBACK *LPDDENUMCALLBACKEXW)(GUID *guid, WCHAR *driver_description,
+ WCHAR *driver_name, void *ctx, HMONITOR monitor);
+DECL_WINELIB_TYPE_AW(LPDDENUMCALLBACKEX)
+
+HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA cb, void *ctx);
+HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW cb, void *ctx);
+#define DirectDrawEnumerate WINELIB_NAME_AW(DirectDrawEnumerate)
+
+HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags);
+HRESULT WINAPI DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags);
+#define DirectDrawEnumerateEx WINELIB_NAME_AW(DirectDrawEnumerateEx)
+
+typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)(LPDDENUMCALLBACKEXA cb, void *ctx, DWORD flags);
+typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)(LPDDENUMCALLBACKEXW cb, void *ctx, DWORD flags);
+DECL_WINELIB_TYPE_AW(LPDIRECTDRAWENUMERATEEX)
+
+/* flags for DirectDrawEnumerateEx */
+#define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001
+#define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002
+#define DDENUM_NONDISPLAYDEVICES 0x00000004
+
+/* flags for DirectDrawCreate or IDirectDraw::Initialize */
+#define DDCREATE_HARDWAREONLY __MSABI_LONG(1)
+#define DDCREATE_EMULATIONONLY __MSABI_LONG(2)
+
+typedef struct _DDBLTFX
+{
+ DWORD dwSize; /* size of structure */
+ DWORD dwDDFX; /* FX operations */
+ DWORD dwROP; /* Win32 raster operations */
+ DWORD dwDDROP; /* Raster operations new for DirectDraw */
+ DWORD dwRotationAngle; /* Rotation angle for blt */
+ DWORD dwZBufferOpCode; /* ZBuffer compares */
+ DWORD dwZBufferLow; /* Low limit of Z buffer */
+ DWORD dwZBufferHigh; /* High limit of Z buffer */
+ DWORD dwZBufferBaseDest; /* Destination base value */
+ DWORD dwZDestConstBitDepth; /* Bit depth used to specify Z constant for destination */
+ union
+ {
+ DWORD dwZDestConst; /* Constant to use as Z buffer for dest */
+ struct IDirectDrawSurface *lpDDSZBufferDest; /* Surface to use as Z buffer for dest */
+ } DUMMYUNIONNAME1;
+ DWORD dwZSrcConstBitDepth; /* Bit depth used to specify Z constant for source */
+ union
+ {
+ DWORD dwZSrcConst; /* Constant to use as Z buffer for src */
+ struct IDirectDrawSurface *lpDDSZBufferSrc; /* Surface to use as Z buffer for src */
+ } DUMMYUNIONNAME2;
+ DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */
+ DWORD dwAlphaEdgeBlend; /* Alpha for edge blending */
+ DWORD dwReserved;
+ DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */
+ union
+ {
+ DWORD dwAlphaDestConst; /* Constant to use as Alpha Channel */
+ struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as Alpha Channel */
+ } DUMMYUNIONNAME3;
+ DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */
+ union
+ {
+ DWORD dwAlphaSrcConst; /* Constant to use as Alpha Channel */
+ struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as Alpha Channel */
+ } DUMMYUNIONNAME4;
+ union
+ {
+ DWORD dwFillColor; /* color in RGB or Palettized */
+ DWORD dwFillDepth; /* depth value for z-buffer */
+ DWORD dwFillPixel; /* pixel val for RGBA or RGBZ */
+ struct IDirectDrawSurface *lpDDSPattern; /* Surface to use as pattern */
+ } DUMMYUNIONNAME5;
+ DDCOLORKEY ddckDestColorkey; /* DestColorkey override */
+ DDCOLORKEY ddckSrcColorkey; /* SrcColorkey override */
+} DDBLTFX,*LPDDBLTFX;
+
+/* dwDDFX */
+/* arithmetic stretching along y axis */
+#define DDBLTFX_ARITHSTRETCHY 0x00000001
+/* mirror on y axis */
+#define DDBLTFX_MIRRORLEFTRIGHT 0x00000002
+/* mirror on x axis */
+#define DDBLTFX_MIRRORUPDOWN 0x00000004
+/* do not tear */
+#define DDBLTFX_NOTEARING 0x00000008
+/* 180 degrees clockwise rotation */
+#define DDBLTFX_ROTATE180 0x00000010
+/* 270 degrees clockwise rotation */
+#define DDBLTFX_ROTATE270 0x00000020
+/* 90 degrees clockwise rotation */
+#define DDBLTFX_ROTATE90 0x00000040
+/* dwZBufferLow and dwZBufferHigh specify limits to the copied Z values */
+#define DDBLTFX_ZBUFFERRANGE 0x00000080
+/* add dwZBufferBaseDest to every source z value before compare */
+#define DDBLTFX_ZBUFFERBASEDEST 0x00000100
+
+typedef struct _DDOVERLAYFX
+{
+ DWORD dwSize; /* size of structure */
+ DWORD dwAlphaEdgeBlendBitDepth; /* Bit depth used to specify constant for alpha edge blend */
+ DWORD dwAlphaEdgeBlend; /* Constant to use as alpha for edge blend */
+ DWORD dwReserved;
+ DWORD dwAlphaDestConstBitDepth; /* Bit depth used to specify alpha constant for destination */
+ union
+ {
+ DWORD dwAlphaDestConst; /* Constant to use as alpha channel for dest */
+ struct IDirectDrawSurface *lpDDSAlphaDest; /* Surface to use as alpha channel for dest */
+ } DUMMYUNIONNAME1;
+ DWORD dwAlphaSrcConstBitDepth; /* Bit depth used to specify alpha constant for source */
+ union
+ {
+ DWORD dwAlphaSrcConst; /* Constant to use as alpha channel for src */
+ struct IDirectDrawSurface *lpDDSAlphaSrc; /* Surface to use as alpha channel for src */
+ } DUMMYUNIONNAME2;
+ DDCOLORKEY dckDestColorkey; /* DestColorkey override */
+ DDCOLORKEY dckSrcColorkey; /* DestColorkey override */
+ DWORD dwDDFX; /* Overlay FX */
+ DWORD dwFlags; /* flags */
+} DDOVERLAYFX,*LPDDOVERLAYFX;
+
+typedef struct _DDBLTBATCH
+{
+ RECT *lprDest;
+ struct IDirectDrawSurface *lpDDSSrc;
+ RECT *lprSrc;
+ DWORD dwFlags;
+ DDBLTFX *lpDDBltFx;
+} DDBLTBATCH,*LPDDBLTBATCH;
+
+#define MAX_DDDEVICEID_STRING 512
+
+#define DDGDI_GETHOSTIDENTIFIER 1
+
+typedef struct tagDDDEVICEIDENTIFIER {
+ char szDriver[MAX_DDDEVICEID_STRING];
+ char szDescription[MAX_DDDEVICEID_STRING];
+ LARGE_INTEGER liDriverVersion;
+ DWORD dwVendorId;
+ DWORD dwDeviceId;
+ DWORD dwSubSysId;
+ DWORD dwRevision;
+ GUID guidDeviceIdentifier;
+} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER;
+
+typedef struct tagDDDEVICEIDENTIFIER2 {
+ char szDriver[MAX_DDDEVICEID_STRING]; /* user readable driver name */
+ char szDescription[MAX_DDDEVICEID_STRING]; /* user readable description */
+ LARGE_INTEGER liDriverVersion; /* driver version */
+ DWORD dwVendorId; /* vendor ID, zero if unknown */
+ DWORD dwDeviceId; /* chipset ID, zero if unknown */
+ DWORD dwSubSysId; /* board ID, zero if unknown */
+ DWORD dwRevision; /* chipset version, zero if unknown */
+ GUID guidDeviceIdentifier; /* unique ID for this driver/chipset combination */
+ DWORD dwWHQLLevel; /* Windows Hardware Quality Lab certification level */
+} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2;
+
+/*****************************************************************************
+ * IDirectDrawPalette interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirectDrawPalette
+DECLARE_INTERFACE_(IDirectDrawPalette,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawPalette methods ***/
+ STDMETHOD(GetCaps)(THIS_ LPDWORD lpdwCaps) PURE;
+ STDMETHOD(GetEntries)(THIS_ DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) PURE;
+ STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags, PALETTEENTRY *color_table) PURE;
+ STDMETHOD(SetEntries)(THIS_ DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawPalette_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawPalette_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawPalette methods ***/
+#define IDirectDrawPalette_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->lpVtbl->GetEntries(p,a,b,c,d)
+#define IDirectDrawPalette_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->lpVtbl->SetEntries(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawPalette_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawPalette_AddRef(p) (p)->AddRef()
+#define IDirectDrawPalette_Release(p) (p)->Release()
+/*** IDirectDrawPalette methods ***/
+#define IDirectDrawPalette_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectDrawPalette_GetEntries(p,a,b,c,d) (p)->GetEntries(a,b,c,d)
+#define IDirectDrawPalette_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectDrawPalette_SetEntries(p,a,b,c,d) (p)->SetEntries(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawClipper interface
+ */
+#define INTERFACE IDirectDrawClipper
+DECLARE_INTERFACE_(IDirectDrawClipper,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawClipper methods ***/
+ STDMETHOD(GetClipList)(THIS_ LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize) PURE;
+ STDMETHOD(GetHWnd)(THIS_ HWND *lphWnd) PURE;
+ STDMETHOD(Initialize)(THIS_ struct IDirectDraw *ddraw, DWORD flags) PURE;
+ STDMETHOD(IsClipListChanged)(THIS_ BOOL *lpbChanged) PURE;
+ STDMETHOD(SetClipList)(THIS_ LPRGNDATA lpClipList, DWORD dwFlags) PURE;
+ STDMETHOD(SetHWnd)(THIS_ DWORD dwFlags, HWND hWnd) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawClipper_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawClipper_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawClipper methods ***/
+#define IDirectDrawClipper_GetClipList(p,a,b,c) (p)->lpVtbl->GetClipList(p,a,b,c)
+#define IDirectDrawClipper_GetHWnd(p,a) (p)->lpVtbl->GetHWnd(p,a)
+#define IDirectDrawClipper_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->lpVtbl->IsClipListChanged(p,a)
+#define IDirectDrawClipper_SetClipList(p,a,b) (p)->lpVtbl->SetClipList(p,a,b)
+#define IDirectDrawClipper_SetHWnd(p,a,b) (p)->lpVtbl->SetHWnd(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawClipper_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawClipper_AddRef(p) (p)->AddRef()
+#define IDirectDrawClipper_Release(p) (p)->Release()
+/*** IDirectDrawClipper methods ***/
+#define IDirectDrawClipper_GetClipList(p,a,b,c) (p)->GetClipList(a,b,c)
+#define IDirectDrawClipper_GetHWnd(p,a) (p)->GetHWnd(a)
+#define IDirectDrawClipper_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectDrawClipper_IsClipListChanged(p,a) (p)->IsClipListChanged(a)
+#define IDirectDrawClipper_SetClipList(p,a,b) (p)->SetClipList(a,b)
+#define IDirectDrawClipper_SetHWnd(p,a,b) (p)->SetHWnd(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw interface
+ */
+#define INTERFACE IDirectDraw
+DECLARE_INTERFACE_(IDirectDraw,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDraw methods ***/
+ STDMETHOD(Compact)(THIS) PURE;
+ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+ IDirectDrawPalette **palette, IUnknown *outer) PURE;
+ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,
+ struct IDirectDrawSurface **surface, IUnknown *outer) PURE;
+ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,
+ struct IDirectDrawSurface **dst_surface) PURE;
+ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+ void *ctx, LPDDENUMMODESCALLBACK cb) PURE;
+ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+ STDMETHOD(FlipToGDISurface)(THIS) PURE;
+ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;
+ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+ STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) PURE;
+ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDraw_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectDraw_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw_SetDisplayMode(p,a,b,c) (p)->lpVtbl->SetDisplayMode(p,a,b,c)
+#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw_AddRef(p) (p)->AddRef()
+#define IDirectDraw_Release(p) (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw_Compact(p) (p)->Compact()
+#define IDirectDraw_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c)
+#define IDirectDraw_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c)
+#define IDirectDraw_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b)
+#define IDirectDraw_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw_FlipToGDISurface(p) (p)->FlipToGDISurface()
+#define IDirectDraw_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectDraw_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirectDraw_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b)
+#define IDirectDraw_GetGDISurface(p,a) (p)->GetGDISurface(a)
+#define IDirectDraw_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a)
+#define IDirectDraw_GetScanLine(p,a) (p)->GetScanLine(a)
+#define IDirectDraw_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw_Initialize(p,a) (p)->Initialize(a)
+#define IDirectDraw_RestoreDisplayMode(p) (p)->RestoreDisplayMode()
+#define IDirectDraw_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw_SetDisplayMode(p,a,b,c) (p)->SetDisplayMode(a,b,c)
+#define IDirectDraw_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+#endif
+
+
+/* flags for Lock() */
+#define DDLOCK_SURFACEMEMORYPTR __MSABI_LONG(0x00000000)
+#define DDLOCK_WAIT __MSABI_LONG(0x00000001)
+#define DDLOCK_EVENT __MSABI_LONG(0x00000002)
+#define DDLOCK_READONLY __MSABI_LONG(0x00000010)
+#define DDLOCK_WRITEONLY __MSABI_LONG(0x00000020)
+#define DDLOCK_NOSYSLOCK __MSABI_LONG(0x00000800)
+#define DDLOCK_NOOVERWRITE __MSABI_LONG(0x00001000)
+#define DDLOCK_DISCARDCONTENTS __MSABI_LONG(0x00002000)
+#define DDLOCK_OKTOSWAP __MSABI_LONG(0x00002000)
+#define DDLOCK_DONOTWAIT __MSABI_LONG(0x00004000)
+#define DDLOCK_HASVOLUMETEXTUREBOXRECT __MSABI_LONG(0x00008000)
+#define DDLOCK_NODIRTYUPDATE __MSABI_LONG(0x00010000)
+
+
+/*****************************************************************************
+ * IDirectDraw2 interface
+ */
+/* Note: IDirectDraw2 cannot derive from IDirectDraw because the number of
+ * arguments of SetDisplayMode has changed !
+ */
+#define INTERFACE IDirectDraw2
+DECLARE_INTERFACE_(IDirectDraw2,IUnknown)
+{
+ /*** IUnknown methods ***/
+/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDraw2 methods ***/
+/*0c*/ STDMETHOD(Compact)(THIS) PURE;
+/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+ IDirectDrawPalette **palette, IUnknown *outer) PURE;
+/*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,
+ struct IDirectDrawSurface **surface, IUnknown *outer) PURE;
+/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,
+ struct IDirectDrawSurface **dst_surface) PURE;
+/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+ void *ctx, LPDDENUMMODESCALLBACK cb) PURE;
+/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;
+/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+ /* added in v2 */
+/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDraw2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw2_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectDraw2_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw2_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw2_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw2_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw2_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw2_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw2_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw2_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw2_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw2_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw2_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw2_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw2_AddRef(p) (p)->AddRef()
+#define IDirectDraw2_Release(p) (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw2_Compact(p) (p)->Compact()
+#define IDirectDraw2_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c)
+#define IDirectDraw2_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw2_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c)
+#define IDirectDraw2_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b)
+#define IDirectDraw2_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw2_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw2_FlipToGDISurface(p) (p)->FlipToGDISurface()
+#define IDirectDraw2_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectDraw2_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirectDraw2_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b)
+#define IDirectDraw2_GetGDISurface(p,a) (p)->GetGDISurface(a)
+#define IDirectDraw2_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a)
+#define IDirectDraw2_GetScanLine(p,a) (p)->GetScanLine(a)
+#define IDirectDraw2_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw2_Initialize(p,a) (p)->Initialize(a)
+#define IDirectDraw2_RestoreDisplayMode(p) (p)->RestoreDisplayMode()
+#define IDirectDraw2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw2_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw2_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw2_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw3 interface
+ */
+#define INTERFACE IDirectDraw3
+DECLARE_INTERFACE_(IDirectDraw3,IUnknown)
+{
+ /*** IUnknown methods ***/
+/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDraw2 methods ***/
+/*0c*/ STDMETHOD(Compact)(THIS) PURE;
+/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+ IDirectDrawPalette **lplpDDPalette, IUnknown *outer) PURE;
+/*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC *surface_desc,
+ struct IDirectDrawSurface **surface, IUnknown *outer) PURE;
+/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface *src_surface,
+ struct IDirectDrawSurface **dst_surface) PURE;
+/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+ void *ctx, LPDDENUMMODESCALLBACK cb) PURE;
+/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC *surface_desc,
+ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface **surface) PURE;
+/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+ /* added in v2 */
+/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS *caps, DWORD *total, DWORD *free) PURE;
+ /* added in v3 */
+/*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface **surface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDraw3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw3_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectDraw3_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw3_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw3_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw3_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw3_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw3_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw3_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw3_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw3_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+/*** IDirectDraw3 methods ***/
+#define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw3_AddRef(p) (p)->AddRef()
+#define IDirectDraw3_Release(p) (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw3_Compact(p) (p)->Compact()
+#define IDirectDraw3_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c)
+#define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw3_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c)
+#define IDirectDraw3_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b)
+#define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw3_FlipToGDISurface(p) (p)->FlipToGDISurface()
+#define IDirectDraw3_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectDraw3_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b)
+#define IDirectDraw3_GetGDISurface(p,a) (p)->GetGDISurface(a)
+#define IDirectDraw3_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a)
+#define IDirectDraw3_GetScanLine(p,a) (p)->GetScanLine(a)
+#define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw3_Initialize(p,a) (p)->Initialize(a)
+#define IDirectDraw3_RestoreDisplayMode(p) (p)->RestoreDisplayMode()
+#define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+/*** IDirectDraw3 methods ***/
+#define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw4 interface
+ */
+#define INTERFACE IDirectDraw4
+DECLARE_INTERFACE_(IDirectDraw4,IUnknown)
+{
+ /*** IUnknown methods ***/
+/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDraw4 methods ***/
+/*0c*/ STDMETHOD(Compact)(THIS) PURE;
+/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+ IDirectDrawPalette **palette, IUnknown *outer) PURE;
+/*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc,
+ struct IDirectDrawSurface4 **surface, IUnknown *outer) PURE;
+/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface4 *src_surface,
+ struct IDirectDrawSurface4 **dst_surface) PURE;
+/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+ void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE;
+/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+ void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;
+/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface4 **surface) PURE;
+/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+ /* added in v2 */
+/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE;
+ /* added in v4 */
+/*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface4 **surface) PURE;
+/*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
+/*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+/*6c*/ STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER *identifier, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw4_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDraw4_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw4_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectDraw4_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw4_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw4_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw4_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw4_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw4_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw4_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw4_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw4_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw4_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw4_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw4_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw4_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw4_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw4_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+/*** IDirectDraw4 methods ***/
+#define IDirectDraw4_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
+#define IDirectDraw4_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p)
+#define IDirectDraw4_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw4_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw4_AddRef(p) (p)->AddRef()
+#define IDirectDraw4_Release(p) (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw4_Compact(p) (p)->Compact()
+#define IDirectDraw4_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c)
+#define IDirectDraw4_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw4_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c)
+#define IDirectDraw4_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b)
+#define IDirectDraw4_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw4_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw4_FlipToGDISurface(p) (p)->FlipToGDISurface()
+#define IDirectDraw4_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectDraw4_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirectDraw4_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b)
+#define IDirectDraw4_GetGDISurface(p,a) (p)->GetGDISurface(a)
+#define IDirectDraw4_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a)
+#define IDirectDraw4_GetScanLine(p,a) (p)->GetScanLine(a)
+#define IDirectDraw4_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw4_Initialize(p,a) (p)->Initialize(a)
+#define IDirectDraw4_RestoreDisplayMode(p) (p)->RestoreDisplayMode()
+#define IDirectDraw4_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw4_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw4_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** IDirectDraw2 methods ***/
+#define IDirectDraw4_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+/*** IDirectDraw4 methods ***/
+#define IDirectDraw4_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b)
+#define IDirectDraw4_RestoreAllSurfaces(pc) (p)->RestoreAllSurfaces()
+#define IDirectDraw4_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDraw7 interface
+ */
+/* Note: IDirectDraw7 cannot derive from IDirectDraw4; it is even documented
+ * as not interchangeable with earlier DirectDraw interfaces.
+ */
+#define INTERFACE IDirectDraw7
+DECLARE_INTERFACE_(IDirectDraw7,IUnknown)
+{
+ /*** IUnknown methods ***/
+/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDraw7 methods ***/
+/*0c*/ STDMETHOD(Compact)(THIS) PURE;
+/*10*/ STDMETHOD(CreateClipper)(THIS_ DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer) PURE;
+/*14*/ STDMETHOD(CreatePalette)(THIS_ DWORD flags, PALETTEENTRY *color_table,
+ IDirectDrawPalette **palette, IUnknown *outer) PURE;
+/*18*/ STDMETHOD(CreateSurface)(THIS_ DDSURFACEDESC2 *surface_desc,
+ struct IDirectDrawSurface7 **surface, IUnknown *outer) PURE;
+/*1c*/ STDMETHOD(DuplicateSurface)(THIS_ struct IDirectDrawSurface7 *src_surface,
+ struct IDirectDrawSurface7 **dst_surface) PURE;
+/*20*/ STDMETHOD(EnumDisplayModes)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+ void *ctx, LPDDENUMMODESCALLBACK2 cb) PURE;
+/*24*/ STDMETHOD(EnumSurfaces)(THIS_ DWORD flags, DDSURFACEDESC2 *surface_desc,
+ void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;
+/*28*/ STDMETHOD(FlipToGDISurface)(THIS) PURE;
+/*2c*/ STDMETHOD(GetCaps)(THIS_ DDCAPS *driver_caps, DDCAPS *hel_caps) PURE;
+/*30*/ STDMETHOD(GetDisplayMode)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+/*34*/ STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE;
+/*38*/ STDMETHOD(GetGDISurface)(THIS_ struct IDirectDrawSurface7 **surface) PURE;
+/*3c*/ STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+/*40*/ STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE;
+/*44*/ STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE;
+/*48*/ STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE;
+/*4c*/ STDMETHOD(RestoreDisplayMode)(THIS) PURE;
+/*50*/ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE;
+/*54*/ STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) PURE;
+/*58*/ STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE;
+ /* added in v2 */
+/*5c*/ STDMETHOD(GetAvailableVidMem)(THIS_ DDSCAPS2 *caps, DWORD *total, DWORD *free) PURE;
+ /* added in v4 */
+/*60*/ STDMETHOD(GetSurfaceFromDC)(THIS_ HDC dc, struct IDirectDrawSurface7 **surface) PURE;
+/*64*/ STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
+/*68*/ STDMETHOD(TestCooperativeLevel)(THIS) PURE;
+/*6c*/ STDMETHOD(GetDeviceIdentifier)(THIS_ DDDEVICEIDENTIFIER2 *identifier, DWORD flags) PURE;
+ /* added in v7 */
+/*70*/ STDMETHOD(StartModeTest)(THIS_ LPSIZE pModes, DWORD dwNumModes, DWORD dwFlags) PURE;
+/*74*/ STDMETHOD(EvaluateMode)(THIS_ DWORD dwFlags, DWORD *pTimeout) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDraw7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDraw7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDraw7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDraw methods ***/
+#define IDirectDraw7_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectDraw7_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c)
+#define IDirectDraw7_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d)
+#define IDirectDraw7_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c)
+#define IDirectDraw7_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b)
+#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d)
+#define IDirectDraw7_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d)
+#define IDirectDraw7_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p)
+#define IDirectDraw7_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectDraw7_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)
+#define IDirectDraw7_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b)
+#define IDirectDraw7_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a)
+#define IDirectDraw7_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a)
+#define IDirectDraw7_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a)
+#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a)
+#define IDirectDraw7_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectDraw7_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p)
+#define IDirectDraw7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e)
+#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b)
+/*** added in IDirectDraw2 ***/
+#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c)
+/*** added in IDirectDraw4 ***/
+#define IDirectDraw7_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b)
+#define IDirectDraw7_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p)
+#define IDirectDraw7_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)
+#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b)
+/*** added in IDirectDraw 7 ***/
+#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(p,a,b,c)
+#define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDraw7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDraw7_AddRef(p) (p)->AddRef()
+#define IDirectDraw7_Release(p) (p)->Release()
+/*** IDirectDraw methods ***/
+#define IDirectDraw7_Compact(p) (p)->Compact()
+#define IDirectDraw7_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c)
+#define IDirectDraw7_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d)
+#define IDirectDraw7_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c)
+#define IDirectDraw7_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b)
+#define IDirectDraw7_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d)
+#define IDirectDraw7_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d)
+#define IDirectDraw7_FlipToGDISurface(p) (p)->FlipToGDISurface()
+#define IDirectDraw7_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectDraw7_GetDisplayMode(p,a) (p)->GetDisplayMode(a)
+#define IDirectDraw7_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b)
+#define IDirectDraw7_GetGDISurface(p,a) (p)->GetGDISurface(a)
+#define IDirectDraw7_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a)
+#define IDirectDraw7_GetScanLine(p,a) (p)->GetScanLine(a)
+#define IDirectDraw7_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a)
+#define IDirectDraw7_Initialize(p,a) (p)->Initialize(a)
+#define IDirectDraw7_RestoreDisplayMode(p) (p)->RestoreDisplayMode()
+#define IDirectDraw7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectDraw7_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e)
+#define IDirectDraw7_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b)
+/*** added in IDirectDraw2 ***/
+#define IDirectDraw7_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c)
+/*** added in IDirectDraw4 ***/
+#define IDirectDraw7_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b)
+#define IDirectDraw7_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces()
+#define IDirectDraw7_TestCooperativeLevel(p) (p)->TestCooperativeLevel()
+#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b)
+/*** added in IDirectDraw 7 ***/
+#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->StartModeTest(a,b,c)
+#define IDirectDraw7_EvaluateMode(p,a,b) (p)->EvaluateMode(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface interface
+ */
+#define INTERFACE IDirectDrawSurface
+DECLARE_INTERFACE_(IDirectDrawSurface,IUnknown)
+{
+ /*** IUnknown methods ***/
+/*00*/ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+/*04*/ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+/*08*/ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawSurface methods ***/
+/*0c*/ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface *attachment) PURE;
+/*10*/ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+/*14*/ STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface *src_surface, RECT *src_rect,
+ DWORD flags, DDBLTFX *fx) PURE;
+/*18*/ STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+/*1c*/ STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface *src_surface,
+ RECT *src_rect, DWORD flags) PURE;
+/*20*/ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface *attachment) PURE;
+/*24*/ STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*28*/ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+/*2c*/ STDMETHOD(Flip)(THIS_ IDirectDrawSurface *dst_surface, DWORD flags) PURE;
+/*30*/ STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface **attachment) PURE;
+/*34*/ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+/*38*/ STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;
+/*3c*/ STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+/*40*/ STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+/*44*/ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+/*48*/ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+/*4c*/ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+/*50*/ STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+/*54*/ STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+/*58*/ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+/*5c*/ STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;
+/*60*/ STDMETHOD(IsLost)(THIS) PURE;
+/*64*/ STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;
+/*68*/ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+/*6c*/ STDMETHOD(Restore)(THIS) PURE;
+/*70*/ STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+/*74*/ STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+/*78*/ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+/*7c*/ STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+/*80*/ STDMETHOD(Unlock)(THIS_ void *data) PURE;
+/*84*/ STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface *dst_surface,
+ RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx) PURE;
+/*88*/ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+/*8c*/ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface *reference_surface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface methods ***/
+#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface_IsLost(p) (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface_Restore(p) (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface_Unlock(p,a) (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface_AddRef(p) (p)->AddRef()
+#define IDirectDrawSurface_Release(p) (p)->Release()
+/*** IDirectDrawSurface methods ***/
+#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface_Flip(p,a,b) (p)->Flip(a,b)
+#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface_GetBltStatus(p,a) (p)->GetBltStatus(a)
+#define IDirectDrawSurface_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectDrawSurface_GetClipper(p,a) (p)->GetClipper(a)
+#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->GetColorKey(a,b)
+#define IDirectDrawSurface_GetDC(p,a) (p)->GetDC(a)
+#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->GetFlipStatus(a)
+#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface_GetPalette(p,a) (p)->GetPalette(a)
+#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->GetPixelFormat(a)
+#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectDrawSurface_IsLost(p) (p)->IsLost()
+#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#define IDirectDrawSurface_Restore(p) (p)->Restore()
+#define IDirectDrawSurface_SetClipper(p,a) (p)->SetClipper(a)
+#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->SetColorKey(a,b)
+#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface_SetPalette(p,a) (p)->SetPalette(a)
+#define IDirectDrawSurface_Unlock(p,a) (p)->Unlock(a)
+#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface2 interface
+ */
+/* Cannot inherit from IDirectDrawSurface because the LPDIRECTDRAWSURFACE parameters
+ * have been converted to LPDIRECTDRAWSURFACE2.
+ */
+#define INTERFACE IDirectDrawSurface2
+DECLARE_INTERFACE_(IDirectDrawSurface2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawSurface2 methods ***/
+ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface2 *attachment) PURE;
+ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+ STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface2 *src_surface, RECT *src_rect,
+ DWORD flags, DDBLTFX *fx) PURE;
+ STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+ STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface2 *src_surface,
+ RECT *src_rect, DWORD flags) PURE;
+ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface2 *attachment) PURE;
+ STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+ STDMETHOD(Flip)(THIS_ IDirectDrawSurface2 *dst_surface, DWORD flags) PURE;
+ STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface2 **attachment) PURE;
+ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;
+ STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+ STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+ STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+ STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+ STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;
+ STDMETHOD(IsLost)(THIS) PURE;
+ STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+ STDMETHOD(Restore)(THIS) PURE;
+ STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+ STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+ STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+ STDMETHOD(Unlock)(THIS_ void *data) PURE;
+ STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface2 *dst_surface, RECT *dst_rect,
+ DWORD flags, DDOVERLAYFX *fx) PURE;
+ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface2 *reference_surface) PURE;
+ /* added in v2 */
+ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+ STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface2_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface2_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface2_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface2_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface2_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface2_IsLost(p) (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface2_Restore(p) (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface2_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface2_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface2_Unlock(p,a) (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface2_PageLock(p,a) (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface2_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface2_AddRef(p) (p)->AddRef()
+#define IDirectDrawSurface2_Release(p) (p)->Release()
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface2_Flip(p,a,b) (p)->Flip(a,b)
+#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->GetBltStatus(a)
+#define IDirectDrawSurface2_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectDrawSurface2_GetClipper(p,a) (p)->GetClipper(a)
+#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->GetColorKey(a,b)
+#define IDirectDrawSurface2_GetDC(p,a) (p)->GetDC(a)
+#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->GetFlipStatus(a)
+#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface2_GetPalette(p,a) (p)->GetPalette(a)
+#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->GetPixelFormat(a)
+#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface2_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectDrawSurface2_IsLost(p) (p)->IsLost()
+#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#define IDirectDrawSurface2_Restore(p) (p)->Restore()
+#define IDirectDrawSurface2_SetClipper(p,a) (p)->SetClipper(a)
+#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->SetColorKey(a,b)
+#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface2_SetPalette(p,a) (p)->SetPalette(a)
+#define IDirectDrawSurface2_Unlock(p,a) (p)->Unlock(a)
+#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface2_PageLock(p,a) (p)->PageLock(a)
+#define IDirectDrawSurface2_PageUnlock(p,a) (p)->PageUnlock(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface3 interface
+ */
+/* Cannot inherit from IDirectDrawSurface2 because the LPDIRECTDRAWSURFACE2 parameters
+ * have been converted to LPDIRECTDRAWSURFACE3.
+ */
+#define INTERFACE IDirectDrawSurface3
+DECLARE_INTERFACE_(IDirectDrawSurface3,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawSurface3 methods ***/
+ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface3 *attachment) PURE;
+ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+ STDMETHOD(Blt)(THIS_ RECT *dst_rest, IDirectDrawSurface3 *src_surface, RECT *src_rect,
+ DWORD flags, DDBLTFX *fx) PURE;
+ STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+ STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface3 *src_surface,
+ RECT *src_rect, DWORD flags) PURE;
+ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface3 *attachment) PURE;
+ STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb) PURE;
+ STDMETHOD(Flip)(THIS_ IDirectDrawSurface3 *dst_surface, DWORD flags) PURE;
+ STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS *caps, IDirectDrawSurface3 **attachment) PURE;
+ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DDSCAPS *caps) PURE;
+ STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+ STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+ STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+ STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc) PURE;
+ STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC *surface_desc) PURE;
+ STDMETHOD(IsLost)(THIS) PURE;
+ STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC *surface_desc, DWORD flags, HANDLE event) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+ STDMETHOD(Restore)(THIS) PURE;
+ STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+ STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+ STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+ STDMETHOD(Unlock)(THIS_ void *data) PURE;
+ STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface3 *dst_surface, RECT *dst_rect,
+ DWORD flags, DDOVERLAYFX *fx) PURE;
+ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface3 *reference_surface) PURE;
+ /* added in v2 */
+ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+ STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+ /* added in v3 */
+ STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC *surface_desc, DWORD flags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface3_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface3_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface3_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface3_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface3_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface3_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface3_IsLost(p) (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface3_Restore(p) (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface3_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface3_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface3_Unlock(p,a) (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface3_PageLock(p,a) (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface3_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface3_AddRef(p) (p)->AddRef()
+#define IDirectDrawSurface3_Release(p) (p)->Release()
+/*** IDirectDrawSurface methods (almost) ***/
+#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface3_Flip(p,a,b) (p)->Flip(a,b)
+#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->GetBltStatus(a)
+#define IDirectDrawSurface3_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectDrawSurface3_GetClipper(p,a) (p)->GetClipper(a)
+#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->GetColorKey(a,b)
+#define IDirectDrawSurface3_GetDC(p,a) (p)->GetDC(a)
+#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->GetFlipStatus(a)
+#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface3_GetPalette(p,a) (p)->GetPalette(a)
+#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->GetPixelFormat(a)
+#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface3_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectDrawSurface3_IsLost(p) (p)->IsLost()
+#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#define IDirectDrawSurface3_Restore(p) (p)->Restore()
+#define IDirectDrawSurface3_SetClipper(p,a) (p)->SetClipper(a)
+#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->SetColorKey(a,b)
+#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface3_SetPalette(p,a) (p)->SetPalette(a)
+#define IDirectDrawSurface3_Unlock(p,a) (p)->Unlock(a)
+#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface3_PageLock(p,a) (p)->PageLock(a)
+#define IDirectDrawSurface3_PageUnlock(p,a) (p)->PageUnlock(a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface4 interface
+ */
+/* Cannot inherit from IDirectDrawSurface2 because DDSCAPS changed to DDSCAPS2.
+ */
+#define INTERFACE IDirectDrawSurface4
+DECLARE_INTERFACE_(IDirectDrawSurface4,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawSurface4 methods ***/
+ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface4 *attachment) PURE;
+ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+ STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface4 *src_surface, RECT *src_rect,
+ DWORD flags, DDBLTFX *fx) PURE;
+ STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+ STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface4 *src_surface,
+ RECT *src_rect, DWORD flags) PURE;
+ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface4 *attachment) PURE;
+ STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;
+ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK2 cb) PURE;
+ STDMETHOD(Flip)(THIS_ IDirectDrawSurface4 *dst_surface, DWORD flags) PURE;
+ STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface4 **attachment) PURE;
+ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE;
+ STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+ STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+ STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+ STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+ STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE;
+ STDMETHOD(IsLost)(THIS) PURE;
+ STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+ STDMETHOD(Restore)(THIS) PURE;
+ STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+ STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+ STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+ STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE;
+ STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface4 *dst_surface, RECT *dst_rect,
+ DWORD flags, DDOVERLAYFX *fx) PURE;
+ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface4 *reference_surface) PURE;
+ /* added in v2 */
+ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+ STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+ /* added in v3 */
+ STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE;
+ /* added in v4 */
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE;
+ STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE;
+ STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface4_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface4_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface4_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface4_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface4_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface4_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface4_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface4_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface4_IsLost(p) (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface4_Restore(p) (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface4_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface4_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface4_Unlock(p,a) (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface4_PageLock(p,a) (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface4_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirectDrawSurface4_GetUniquenessValue(p,a) (p)->lpVtbl->GetUniquenessValue(p,a)
+#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface4_AddRef(p) (p)->AddRef()
+#define IDirectDrawSurface4_Release(p) (p)->Release()
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface4_Flip(p,a,b) (p)->Flip(a,b)
+#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->GetBltStatus(a)
+#define IDirectDrawSurface4_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectDrawSurface4_GetClipper(p,a) (p)->GetClipper(a)
+#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->GetColorKey(a,b)
+#define IDirectDrawSurface4_GetDC(p,a) (p)->GetDC(a)
+#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->GetFlipStatus(a)
+#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface4_GetPalette(p,a) (p)->GetPalette(a)
+#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->GetPixelFormat(a)
+#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface4_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectDrawSurface4_IsLost(p) (p)->IsLost()
+#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#define IDirectDrawSurface4_Restore(p) (p)->Restore()
+#define IDirectDrawSurface4_SetClipper(p,a) (p)->SetClipper(a)
+#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->SetColorKey(a,b)
+#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface4_SetPalette(p,a) (p)->SetPalette(a)
+#define IDirectDrawSurface4_Unlock(p,a) (p)->Unlock(a)
+#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface4_PageLock(p,a) (p)->PageLock(a)
+#define IDirectDrawSurface4_PageUnlock(p,a) (p)->PageUnlock(a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirectDrawSurface4_GetUniquenessValue(p,a) (p)->GetUniquenessValue(a)
+#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue()
+#endif
+
+
+/*****************************************************************************
+ * IDirectDrawSurface7 interface
+ */
+#define INTERFACE IDirectDrawSurface7
+DECLARE_INTERFACE_(IDirectDrawSurface7,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawSurface7 methods ***/
+ STDMETHOD(AddAttachedSurface)(THIS_ IDirectDrawSurface7 *attachment) PURE;
+ STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE;
+ STDMETHOD(Blt)(THIS_ RECT *dst_rect, IDirectDrawSurface7 *src_surface, RECT *src_rect,
+ DWORD flags, DDBLTFX *fx) PURE;
+ STDMETHOD(BltBatch)(THIS_ DDBLTBATCH *batch, DWORD count, DWORD flags) PURE;
+ STDMETHOD(BltFast)(THIS_ DWORD x, DWORD y, IDirectDrawSurface7 *src_surface,
+ RECT *src_rect, DWORD flags) PURE;
+ STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD flags, IDirectDrawSurface7 *attachment) PURE;
+ STDMETHOD(EnumAttachedSurfaces)(THIS_ void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;
+ STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK7 cb) PURE;
+ STDMETHOD(Flip)(THIS_ IDirectDrawSurface7 *dst_surface, DWORD flags) PURE;
+ STDMETHOD(GetAttachedSurface)(THIS_ DDSCAPS2 *caps, IDirectDrawSurface7 **attachment) PURE;
+ STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DDSCAPS2 *caps) PURE;
+ STDMETHOD(GetClipper)(THIS_ IDirectDrawClipper **clipper) PURE;
+ STDMETHOD(GetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE;
+ STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE;
+ STDMETHOD(GetPalette)(THIS_ IDirectDrawPalette **palette) PURE;
+ STDMETHOD(GetPixelFormat)(THIS_ DDPIXELFORMAT *format) PURE;
+ STDMETHOD(GetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc) PURE;
+ STDMETHOD(Initialize)(THIS_ IDirectDraw *ddraw, DDSURFACEDESC2 *surface_desc) PURE;
+ STDMETHOD(IsLost)(THIS) PURE;
+ STDMETHOD(Lock)(THIS_ RECT *rect, DDSURFACEDESC2 *surface_desc, DWORD flags, HANDLE event) PURE;
+ STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE;
+ STDMETHOD(Restore)(THIS) PURE;
+ STDMETHOD(SetClipper)(THIS_ IDirectDrawClipper *clipper) PURE;
+ STDMETHOD(SetColorKey)(THIS_ DWORD flags, DDCOLORKEY *color_key) PURE;
+ STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE;
+ STDMETHOD(SetPalette)(THIS_ IDirectDrawPalette *palette) PURE;
+ STDMETHOD(Unlock)(THIS_ LPRECT lpSurfaceData) PURE;
+ STDMETHOD(UpdateOverlay)(THIS_ RECT *src_rect, IDirectDrawSurface7 *dst_surface, RECT *dst_rect,
+ DWORD flags, DDOVERLAYFX *fx) PURE;
+ STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD flags, IDirectDrawSurface7 *reference_surface) PURE;
+ /* added in v2 */
+ STDMETHOD(GetDDInterface)(THIS_ void **ddraw) PURE;
+ STDMETHOD(PageLock)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(PageUnlock)(THIS_ DWORD dwFlags) PURE;
+ /* added in v3 */
+ STDMETHOD(SetSurfaceDesc)(THIS_ DDSURFACEDESC2 *surface_desc, DWORD flags) PURE;
+ /* added in v4 */
+ STDMETHOD(SetPrivateData)(THIS_ REFGUID tag, void *data, DWORD size, DWORD flags) PURE;
+ STDMETHOD(GetPrivateData)(THIS_ REFGUID tag, void *data, DWORD *size) PURE;
+ STDMETHOD(FreePrivateData)(THIS_ REFGUID tag) PURE;
+ STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD pValue) PURE;
+ STDMETHOD(ChangeUniquenessValue)(THIS) PURE;
+ /* added in v7 */
+ STDMETHOD(SetPriority)(THIS_ DWORD prio) PURE;
+ STDMETHOD(GetPriority)(THIS_ LPDWORD prio) PURE;
+ STDMETHOD(SetLOD)(THIS_ DWORD lod) PURE;
+ STDMETHOD(GetLOD)(THIS_ LPDWORD lod) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawSurface7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawSurface7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a)
+#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a)
+#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e)
+#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c)
+#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e)
+#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)
+#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)
+#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)
+#define IDirectDrawSurface7_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b)
+#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b)
+#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a)
+#define IDirectDrawSurface7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectDrawSurface7_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a)
+#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b)
+#define IDirectDrawSurface7_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)
+#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a)
+#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b)
+#define IDirectDrawSurface7_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a)
+#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a)
+#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a)
+#define IDirectDrawSurface7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectDrawSurface7_IsLost(p) (p)->lpVtbl->IsLost(p)
+#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)
+#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)
+#define IDirectDrawSurface7_Restore(p) (p)->lpVtbl->Restore(p)
+#define IDirectDrawSurface7_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a)
+#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b)
+#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b)
+#define IDirectDrawSurface7_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a)
+#define IDirectDrawSurface7_Unlock(p,a) (p)->lpVtbl->Unlock(p,a)
+#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)
+#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a)
+#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a)
+#define IDirectDrawSurface7_PageLock(p,a) (p)->lpVtbl->PageLock(p,a)
+#define IDirectDrawSurface7_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)
+#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)
+#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)
+#define IDirectDrawSurface7_GetUniquenessValue(p,a) (p)->lpVtbl->GetUniquenessValue(p,a)
+#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p)
+/*** IDirectDrawSurface7 methods ***/
+#define IDirectDrawSurface7_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)
+#define IDirectDrawSurface7_GetPriority(p,a) (p)->lpVtbl->GetPriority(p,a)
+#define IDirectDrawSurface7_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)
+#define IDirectDrawSurface7_GetLOD(p,a) (p)->lpVtbl->GetLOD(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawSurface7_AddRef(p) (p)->AddRef()
+#define IDirectDrawSurface7_Release(p) (p)->Release()
+/*** IDirectDrawSurface (almost) methods ***/
+#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a)
+#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a)
+#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e)
+#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c)
+#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e)
+#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)
+#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b)
+#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c)
+#define IDirectDrawSurface7_Flip(p,a,b) (p)->Flip(a,b)
+#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b)
+#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->GetBltStatus(a)
+#define IDirectDrawSurface7_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectDrawSurface7_GetClipper(p,a) (p)->GetClipper(a)
+#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->GetColorKey(a,b)
+#define IDirectDrawSurface7_GetDC(p,a) (p)->GetDC(a)
+#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->GetFlipStatus(a)
+#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b)
+#define IDirectDrawSurface7_GetPalette(p,a) (p)->GetPalette(a)
+#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->GetPixelFormat(a)
+#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a)
+#define IDirectDrawSurface7_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectDrawSurface7_IsLost(p) (p)->IsLost()
+#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)
+#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->ReleaseDC(a)
+#define IDirectDrawSurface7_Restore(p) (p)->Restore()
+#define IDirectDrawSurface7_SetClipper(p,a) (p)->SetClipper(a)
+#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->SetColorKey(a,b)
+#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b)
+#define IDirectDrawSurface7_SetPalette(p,a) (p)->SetPalette(a)
+#define IDirectDrawSurface7_Unlock(p,a) (p)->Unlock(a)
+#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e)
+#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a)
+#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b)
+/*** IDirectDrawSurface2 methods ***/
+#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a)
+#define IDirectDrawSurface7_PageLock(p,a) (p)->PageLock(a)
+#define IDirectDrawSurface7_PageUnlock(p,a) (p)->PageUnlock(a)
+/*** IDirectDrawSurface3 methods ***/
+#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b)
+/*** IDirectDrawSurface4 methods ***/
+#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)
+#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)
+#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->FreePrivateData(a)
+#define IDirectDrawSurface7_GetUniquenessValue(p,a) (p)->GetUniquenessValue(a)
+#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue()
+/*** IDirectDrawSurface7 methods ***/
+#define IDirectDrawSurface7_SetPriority(p,a) (p)->SetPriority(a)
+#define IDirectDrawSurface7_GetPriority(p,a) (p)->GetPriority(a)
+#define IDirectDrawSurface7_SetLOD(p,a) (p)->SetLOD(a)
+#define IDirectDrawSurface7_GetLOD(p,a) (p)->GetLOD(a)
+#endif
+
+/*****************************************************************************
+ * IDirectDrawColorControl interface
+ */
+#define INTERFACE IDirectDrawColorControl
+DECLARE_INTERFACE_(IDirectDrawColorControl,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawColorControl methods ***/
+ STDMETHOD(GetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE;
+ STDMETHOD(SetColorControls)(THIS_ DDCOLORCONTROL *color_control) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawColorControl_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawColorControl_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawColorControl methods ***/
+#define IDirectDrawColorControl_GetColorControls(p,a) (p)->lpVtbl->GetColorControls(p,a)
+#define IDirectDrawColorControl_SetColorControls(p,a) (p)->lpVtbl->SetColorControls(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawColorControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawColorControl_AddRef(p) (p)->AddRef()
+#define IDirectDrawColorControl_Release(p) (p)->Release()
+/*** IDirectDrawColorControl methods ***/
+#define IDirectDrawColorControl_GetColorControls(p,a) (p)->GetColorControls(a)
+#define IDirectDrawColorControl_SetColorControls(p,a) (p)->SetColorControls(a)
+#endif
+
+/*****************************************************************************
+ * IDirectDrawGammaControl interface
+ */
+#define INTERFACE IDirectDrawGammaControl
+DECLARE_INTERFACE_(IDirectDrawGammaControl,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectDrawGammaControl methods ***/
+ STDMETHOD(GetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE;
+ STDMETHOD(SetGammaRamp)(THIS_ DWORD flags, DDGAMMARAMP *gamma_ramp) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectDrawGammaControl_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectDrawGammaControl_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectDrawGammaControl methods ***/
+#define IDirectDrawGammaControl_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)
+#define IDirectDrawGammaControl_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectDrawGammaControl_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectDrawGammaControl_AddRef(p) (p)->AddRef()
+#define IDirectDrawGammaControl_Release(p) (p)->Release()
+/*** IDirectDrawGammaControl methods ***/
+#define IDirectDrawGammaControl_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)
+#define IDirectDrawGammaControl_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b)
+#endif
+
+
+HRESULT WINAPI DirectDrawCreate(GUID *driver_guid, IDirectDraw **ddraw, IUnknown *outer);
+HRESULT WINAPI DirectDrawCreateEx(GUID *driver_guid, void **ddraw, REFIID interface_iid, IUnknown *outer);
+HRESULT WINAPI DirectDrawCreateClipper(DWORD flags, IDirectDrawClipper **clipper, IUnknown *outer);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __DDRAW_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h
new file mode 100644
index 00000000..5853387e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawgdi.h
@@ -0,0 +1,45 @@
+/*
+ * Ddrawgdi definitions
+ *
+ * Copyright (C) 2009 Louis Lenders
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DDRAWGDI_H
+#define __WINE_DDRAWGDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DdQueryDisplaySettingsUniqueness GdiEntry13
+
+ULONG APIENTRY DdQueryDisplaySettingsUniqueness(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DDRAWGDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h
new file mode 100644
index 00000000..57704350
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddrawi.h
@@ -0,0 +1,1079 @@
+/*
+ * DirectDraw driver interface
+ * (DirectX 7 version)
+ *
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DDRAWI_INCLUDED__
+#define __DDRAWI_INCLUDED__
+
+#include <ddraw.h>
+#include <dciddi.h> /* the DD HAL is layered onto DCI escapes */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */
+typedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */
+typedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */
+
+#define DDAPI WINAPI
+
+/* the DirectDraw versions */
+#define DD_VERSION 0x0200 /* compatibility version */
+#define DD_RUNTIME_VERSION 0x0700 /* actual version */
+
+/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */
+#define DD_HAL_VERSION 0x0100
+
+/* more DCICOMMAND escapes */
+#define DDCREATEDRIVEROBJECT 10
+#define DDGET32BITDRIVERNAME 11
+#define DDNEWCALLBACKFNS 12
+#define DDVERSIONINFO 13
+
+#define MAX_DRIVER_NAME CCHDEVICENAME
+
+/*****************************************************************************
+ * Initialization stuff
+ */
+typedef struct {
+ char szName[260];
+ char szEntryPoint[64];
+ DWORD dwContext;
+} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;
+
+typedef struct {
+ DWORD dwHALVersion;
+ ULONG_PTR dwReserved1;
+ ULONG_PTR dwReserved2;
+} DDVERSIONDATA,*LPDDVERSIONDATA;
+
+typedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext);
+
+/* pointer to video memory */
+typedef ULONG_PTR FLATPTR;
+
+/* predeclare some structures */
+typedef struct _DDHALINFO *LPDDHALINFO;
+typedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;
+typedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;
+typedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;
+typedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;
+typedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;
+typedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;
+typedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;
+typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;
+typedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;
+typedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;
+typedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;
+typedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;
+typedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;
+typedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;
+typedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;
+typedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;
+typedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;
+typedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;
+
+/* structure GUIDs for GetDriverInfo */
+DEFINE_GUID( GUID_MiscellaneousCallbacks, 0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
+/* ...videport stuff here... */
+DEFINE_GUID( GUID_D3DCallbacks2, 0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );
+DEFINE_GUID( GUID_D3DCallbacks3, 0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E );
+DEFINE_GUID( GUID_NonLocalVidMemCaps, 0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 );
+/* ...kernel stuff here... */
+DEFINE_GUID( GUID_D3DExtendedCaps, 0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 );
+DEFINE_GUID( GUID_ZPixelFormats, 0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE );
+DEFINE_GUID( GUID_DDMoreSurfaceCaps, 0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );
+DEFINE_GUID( GUID_DDStereoMode, 0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 );
+/* ...more stuff here... */
+DEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 );
+/* ...motioncomp stuff here... */
+DEFINE_GUID( GUID_Miscellaneous2Callbacks, 0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A );
+
+/*****************************************************************************
+ * driver->ddraw callbacks
+ */
+typedef BOOL (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);
+typedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);
+typedef void (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);
+
+typedef struct {
+ DWORD dwSize;
+ LPDDHAL_SETINFO lpSetInfo;
+ LPDDHAL_VIDMEMALLOC lpVidMemAlloc;
+ LPDDHAL_VIDMEMFREE lpVidMemFree;
+} DDHALDDRAWFNS,*LPDDHALDDRAWFNS;
+
+/*****************************************************************************
+ * mode info structure
+ */
+typedef struct _DDHALMODEINFO {
+ DWORD dwWidth;
+ DWORD dwHeight;
+ LONG lPitch;
+ DWORD dwBPP;
+ WORD wFlags;
+ WORD wRefreshRate;
+ DWORD dwRBitMask;
+ DWORD dwGBitMask;
+ DWORD dwBBitMask;
+ DWORD dwAlphaBitMask;
+} DDHALMODEINFO,*LPDDHALMODEINFO;
+
+#define DDMODEINFO_PALETTIZED 0x0001
+#define DDMODEINFO_MODEX 0x0002
+#define DDMODEINFO_UNSUPPORTED 0x0004
+#define DDMODEINFO_STANDARDVGA 0x0008
+#define DDMODEINFO_MAXREFRESH 0x0010
+#define DDMODEINFO_STEREO 0x0020
+
+/*****************************************************************************
+ * video memory info structure
+ */
+typedef struct _VIDMEM {
+ DWORD dwFlags;
+ FLATPTR fpStart;
+ union {
+ FLATPTR fpEnd;
+ DWORD dwWidth;
+ } DUMMYUNIONNAME1;
+ DDSCAPS ddsCaps;
+ DDSCAPS ddsCapsAlt;
+ union {
+ LPVMEMHEAP lpHeap;
+ DWORD dwHeight;
+ } DUMMYUNIONNAME2;
+} VIDMEM,*LPVIDMEM;
+
+#define VIDMEM_ISLINEAR 0x00000001
+#define VIDMEM_ISRECTANGULAR 0x00000002
+#define VIDMEM_ISHEAP 0x00000004
+#define VIDMEM_ISNONLOCAL 0x00000008
+#define VIDMEM_ISWC 0x00000010
+#define VIDMEM_ISDISABLED 0x00000020
+
+typedef struct _VIDMEMINFO {
+ FLATPTR fpPrimary;
+ DWORD dwFlags;
+ DWORD dwDisplayWidth;
+ DWORD dwDisplayHeight;
+ LONG lDisplayPitch;
+ DDPIXELFORMAT ddpfDisplay;
+ DWORD dwOffscreenAlign;
+ DWORD dwOverlayAlign;
+ DWORD dwTextureAlign;
+ DWORD dwZBufferAlign;
+ DWORD dwAlphaAlign;
+ DWORD dwNumHeaps;
+ LPVIDMEM pvmList;
+} VIDMEMINFO,*LPVIDMEMINFO;
+
+typedef struct _HEAPALIAS {
+ FLATPTR fpVidMem;
+ LPVOID lpAlias;
+ DWORD dwAliasSize;
+} HEAPALIAS,*LPHEAPALIAS;
+
+typedef struct _HEAPALIASINFO {
+ DWORD dwRefCnt;
+ DWORD dwFlags;
+ DWORD dwNumHeaps;
+ LPHEAPALIAS lpAliases;
+} HEAPALIASINFO,*LPHEAPALIASINFO;
+
+#define HEAPALIASINFO_MAPPEDREAL 0x00000001
+#define HEAPALIASINFO_MAPPEDDUMMY 0x00000002
+
+/*****************************************************************************
+ * capabilities structures
+ */
+typedef struct _DDCORECAPS {
+ DWORD dwSize;
+ DWORD dwCaps;
+ DWORD dwCaps2;
+ DWORD dwCKeyCaps;
+ DWORD dwFXCaps;
+ DWORD dwFXAlphaCaps;
+ DWORD dwPalCaps;
+ DWORD dwSVCaps;
+ DWORD dwAlphaBltConstBitDepths;
+ DWORD dwAlphaBltPixelBitDepths;
+ DWORD dwAlphaBltSurfaceBitDepths;
+ DWORD dwAlphaOverlayConstBitDepths;
+ DWORD dwAlphaOverlayPixelBitDepths;
+ DWORD dwAlphaOverlaySurfaceBitDepths;
+ DWORD dwZBufferBitDepths;
+ DWORD dwVidMemTotal;
+ DWORD dwVidMemFree;
+ DWORD dwMaxVisibleOverlays;
+ DWORD dwCurrVisibleOverlays;
+ DWORD dwNumFourCCCodes;
+ DWORD dwAlignBoundarySrc;
+ DWORD dwAlignSizeSrc;
+ DWORD dwAlignBoundaryDest;
+ DWORD dwAlignSizeDest;
+ DWORD dwAlignStrideAlign;
+ DWORD dwRops[DD_ROP_SPACE];
+ DDSCAPS ddsCaps;
+ DWORD dwMinOverlayStretch;
+ DWORD dwMaxOverlayStretch;
+ DWORD dwMinLiveVideoStretch;
+ DWORD dwMaxLiveVideoStretch;
+ DWORD dwMinHwCodecStretch;
+ DWORD dwMaxHwCodecStretch;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwSVBCaps;
+ DWORD dwSVBCKeyCaps;
+ DWORD dwSVBFXCaps;
+ DWORD dwSVBRops[DD_ROP_SPACE];
+ DWORD dwVSBCaps;
+ DWORD dwVSBCKeyCaps;
+ DWORD dwVSBFXCaps;
+ DWORD dwVSBRops[DD_ROP_SPACE];
+ DWORD dwSSBCaps;
+ DWORD dwSSBCKeyCaps;
+ DWORD dwSSBFXCaps;
+ DWORD dwSSBRops[DD_ROP_SPACE];
+ DWORD dwMaxVideoPorts;
+ DWORD dwCurrVideoPorts;
+ DWORD dwSVBCaps2;
+} DDCORECAPS,*LPDDCORECAPS;
+
+typedef struct _DDNONLOCALVIDMEMCAPS {
+ DWORD dwSize;
+ DWORD dwNLVBCaps;
+ DWORD dwNLVBCaps2;
+ DWORD dwNLVBCKeyCaps;
+ DWORD dwNLVBFXCaps;
+ DWORD dwNLVBRops[DD_ROP_SPACE];
+} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;
+
+typedef struct _DDSCAPSEX {
+ DWORD dwCaps2;
+ DWORD dwCaps3;
+ DWORD dwCaps4;
+} DDSCAPSEX,*LPDDSCAPSEX;
+
+#define DDSCAPS_EXECUTEBUFFER DDSCAPS_RESERVED2
+#define DDSCAPS2_VERTEXBUFFER DDSCAPS2_RESERVED1
+#define DDSCAPS2_COMMANDBUFFER DDSCAPS2_RESERVED2
+
+/*****************************************************************************
+ * ddraw->driver callbacks
+ */
+#define DDHAL_DRIVER_NOTHANDLED 0
+#define DDHAL_DRIVER_HANDLED 1
+#define DDHAL_DRIVER_NOCKEYHW 2
+
+typedef struct _DDHAL_DESTROYDRIVERDATA *LPDDHAL_DESTROYDRIVERDATA;
+typedef struct _DDHAL_CREATESURFACEDATA *LPDDHAL_CREATESURFACEDATA;
+typedef struct _DDHAL_DRVSETCOLORKEYDATA *LPDDHAL_DRVSETCOLORKEYDATA;
+typedef struct _DDHAL_SETMODEDATA *LPDDHAL_SETMODEDATA;
+typedef struct _DDHAL_WAITFORVERTICALBLANKDATA *LPDDHAL_WAITFORVERTICALBLANKDATA;
+typedef struct _DDHAL_CANCREATESURFACEDATA *LPDDHAL_CANCREATESURFACEDATA;
+typedef struct _DDHAL_CREATEPALETTEDATA *LPDDHAL_CREATEPALETTEDATA;
+typedef struct _DDHAL_GETSCANLINEDATA *LPDDHAL_GETSCANLINEDATA;
+typedef struct _DDHAL_SETEXCLUSIVEMODEDATA *LPDDHAL_SETEXCLUSIVEMODEDATA;
+typedef struct _DDHAL_FLIPTOGDISURFACEDATA *LPDDHAL_FLIPTOGDISURFACEDATA;
+
+typedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER) (LPDDHAL_DESTROYDRIVERDATA);
+typedef DWORD (PASCAL *LPDDHAL_CREATESURFACE) (LPDDHAL_CREATESURFACEDATA);
+typedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY) (LPDDHAL_DRVSETCOLORKEYDATA);
+typedef DWORD (PASCAL *LPDDHAL_SETMODE) (LPDDHAL_SETMODEDATA);
+typedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);
+typedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE) (LPDDHAL_CANCREATESURFACEDATA );
+typedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE) (LPDDHAL_CREATEPALETTEDATA);
+typedef DWORD (PASCAL *LPDDHAL_GETSCANLINE) (LPDDHAL_GETSCANLINEDATA);
+typedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE) (LPDDHAL_SETEXCLUSIVEMODEDATA);
+typedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE) (LPDDHAL_FLIPTOGDISURFACEDATA);
+
+typedef struct _DDHAL_DDCALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHAL_DESTROYDRIVER DestroyDriver;
+ LPDDHAL_CREATESURFACE CreateSurface;
+ LPDDHAL_SETCOLORKEY SetColorKey;
+ LPDDHAL_SETMODE SetMode;
+ LPDDHAL_WAITFORVERTICALBLANK WaitForVerticalBlank;
+ LPDDHAL_CANCREATESURFACE CanCreateSurface;
+ LPDDHAL_CREATEPALETTE CreatePalette;
+ LPDDHAL_GETSCANLINE GetScanLine;
+ /* DirectX 2 */
+ LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
+ LPDDHAL_FLIPTOGDISURFACE FlipToGDISurface;
+} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;
+
+typedef struct _DDHAL_DESTROYSURFACEDATA *LPDDHAL_DESTROYSURFACEDATA;
+typedef struct _DDHAL_FLIPDATA *LPDDHAL_FLIPDATA;
+typedef struct _DDHAL_SETCLIPLISTDATA *LPDDHAL_SETCLIPLISTDATA;
+typedef struct _DDHAL_LOCKDATA *LPDDHAL_LOCKDATA;
+typedef struct _DDHAL_UNLOCKDATA *LPDDHAL_UNLOCKDATA;
+typedef struct _DDHAL_BLTDATA *LPDDHAL_BLTDATA;
+typedef struct _DDHAL_SETCOLORKEYDATA *LPDDHAL_SETCOLORKEYDATA;
+typedef struct _DDHAL_ADDATTACHEDSURFACEDATA *LPDDHAL_ADDATTACHEDSURFACEDATA;
+typedef struct _DDHAL_GETBLTSTATUSDATA *LPDDHAL_GETBLTSTATUSDATA;
+typedef struct _DDHAL_GETFLIPSTATUSDATA *LPDDHAL_GETFLIPSTATUSDATA;
+typedef struct _DDHAL_UPDATEOVERLAYDATA *LPDDHAL_UPDATEOVERLAYDATA;
+typedef struct _DDHAL_SETOVERLAYPOSITIONDATA *LPDDHAL_SETOVERLAYPOSITIONDATA;
+typedef struct _DDHAL_SETPALETTEDATA *LPDDHAL_SETPALETTEDATA;
+
+typedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE) (LPDDHAL_DESTROYSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_FLIP) (LPDDHAL_FLIPDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST) (LPDDHAL_SETCLIPLISTDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_LOCK) (LPDDHAL_LOCKDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK) (LPDDHAL_UNLOCKDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_BLT) (LPDDHAL_BLTDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY) (LPDDHAL_SETCOLORKEYDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS) (LPDDHAL_GETBLTSTATUSDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS) (LPDDHAL_GETFLIPSTATUSDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY) (LPDDHAL_UPDATEOVERLAYDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);
+typedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE) (LPDDHAL_SETPALETTEDATA);
+
+typedef struct _DDHAL_DDSURFACECALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
+ LPDDHALSURFCB_FLIP Flip;
+ LPDDHALSURFCB_SETCLIPLIST SetClipList;
+ LPDDHALSURFCB_LOCK Lock;
+ LPDDHALSURFCB_UNLOCK Unlock;
+ LPDDHALSURFCB_BLT Blt;
+ LPDDHALSURFCB_SETCOLORKEY SetColorKey;
+ LPDDHALSURFCB_ADDATTACHEDSURFACE AddAttachedSurface;
+ LPDDHALSURFCB_GETBLTSTATUS GetBltStatus;
+ LPDDHALSURFCB_GETFLIPSTATUS GetFlipStatus;
+ LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
+ LPDDHALSURFCB_SETOVERLAYPOSITION SetOverlayPosition;
+ LPVOID reserved4;
+ LPDDHALSURFCB_SETPALETTE SetPalette;
+} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;
+
+typedef struct _DDHAL_DESTROYPALETTEDATA *LPDDHAL_DESTROYPALETTEDATA;
+typedef struct _DDHAL_SETENTRIESDATA *LPDDHAL_SETENTRIESDATA;
+
+typedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);
+typedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES) (LPDDHAL_SETENTRIESDATA);
+
+typedef struct _DDHAL_DDPALETTECALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
+ LPDDHALPALCB_SETENTRIES SetEntries;
+} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;
+
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF) (LPDDHAL_CREATESURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF) (LPDDHAL_DESTROYSURFACEDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF) (LPDDHAL_LOCKDATA);
+typedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF) (LPDDHAL_UNLOCKDATA);
+
+typedef struct _DDHAL_DDEXEBUFCALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHALEXEBUFCB_CANCREATEEXEBUF CanCreateExecuteBuffer;
+ LPDDHALEXEBUFCB_CREATEEXEBUF CreateExecuteBuffer;
+ LPDDHALEXEBUFCB_DESTROYEXEBUF DestroyExecuteBuffer;
+ LPDDHALEXEBUFCB_LOCKEXEBUF LockExecuteBuffer;
+ LPDDHALEXEBUFCB_UNLOCKEXEBUF UnlockExecuteBuffer;
+} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;
+
+typedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA *LPDDHAL_GETAVAILDRIVERMEMORYDATA;
+typedef struct _DDHAL_UPDATENONLOCALHEAPDATA *LPDDHAL_UPDATENONLOCALHEAPDATA;
+typedef struct _DDHAL_GETHEAPALIGNMENTDATA *LPDDHAL_GETHEAPALIGNMENTDATA;
+
+typedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA);
+typedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP) (LPDDHAL_UPDATENONLOCALHEAPDATA);
+typedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT) (LPDDHAL_GETHEAPALIGNMENTDATA);
+
+typedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDDHAL_GETAVAILDRIVERMEMORY GetAvailDriverMemory;
+ LPDDHAL_UPDATENONLOCALHEAP UpdateNonLocalHeap;
+ LPDDHAL_GETHEAPALIGNMENT GetHeapAlignment;
+ LPDDHALSURFCB_GETBLTSTATUS GetSysmemBltStatus;
+} DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS;
+
+typedef struct _DDHAL_CREATESURFACEEXDATA *LPDDHAL_CREATESURFACEEXDATA;
+typedef struct _DDHAL_GETDRIVERSTATEDATA *LPDDHAL_GETDRIVERSTATEDATA;
+typedef struct _DDHAL_DESTROYDDLOCALDATA *LPDDHAL_DESTROYDDLOCALDATA;
+
+typedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA);
+typedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA);
+typedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA);
+
+typedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPVOID Reserved;
+ LPDDHAL_CREATESURFACEEX CreateSurfaceEx;
+ LPDDHAL_GETDRIVERSTATE GetDriverState;
+ LPDDHAL_DESTROYDDLOCAL DestroyDDLocal;
+} DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS;
+
+typedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(DDGAMMARAMP *, BYTE *);
+
+/*****************************************************************************
+ * driver info structure
+ *
+ * The HAL is queried for additional callbacks via the GetDriverInfo callback.
+ */
+typedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;
+typedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);
+
+typedef struct _DDHALINFO {
+ DWORD dwSize;
+ LPDDHAL_DDCALLBACKS lpDDCallbacks;
+ LPDDHAL_DDSURFACECALLBACKS lpDDSurfaceCallbacks;
+ LPDDHAL_DDPALETTECALLBACKS lpDDPaletteCallbacks;
+ VIDMEMINFO vmiData;
+ DDCORECAPS ddCaps;
+ DWORD dwMonitorFrequency;
+ LPDDHAL_GETDRIVERINFO GetDriverInfo;
+ DWORD dwModeIndex;
+ LPDWORD lpdwFourCC;
+ DWORD dwNumModes;
+ LPDDHALMODEINFO lpModeInfo;
+ DWORD dwFlags;
+ LPVOID lpPDevice;
+ DWORD hInstance;
+ /* DirectX 2 */
+ ULONG_PTR lpD3DGlobalDriverData;
+ ULONG_PTR lpD3DHALCallbacks;
+ LPDDHAL_DDEXEBUFCALLBACKS lpDDExeBufCallbacks;
+} DDHALINFO;
+
+#define DDHALINFO_ISPRIMARYDISPLAY 0x00000001
+#define DDHALINFO_MODEXILLEGAL 0x00000002
+#define DDHALINFO_GETDRIVERINFOSET 0x00000004
+
+/* where the high-level ddraw implementation stores the callbacks */
+typedef struct _DDHAL_CALLBACKS {
+ DDHAL_DDCALLBACKS cbDDCallbacks;
+ DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks;
+ DDHAL_DDPALETTECALLBACKS cbDDPaletteCallbacks;
+ DDHAL_DDCALLBACKS HALDD;
+ DDHAL_DDSURFACECALLBACKS HALDDSurface;
+ DDHAL_DDPALETTECALLBACKS HALDDPalette;
+ DDHAL_DDCALLBACKS HELDD;
+ DDHAL_DDSURFACECALLBACKS HELDDSurface;
+ DDHAL_DDPALETTECALLBACKS HELDDPalette;
+ DDHAL_DDEXEBUFCALLBACKS cbDDExeBufCallbacks;
+ DDHAL_DDEXEBUFCALLBACKS HALDDExeBuf;
+ DDHAL_DDEXEBUFCALLBACKS HELDDExeBuf;
+ /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */
+} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;
+
+/*****************************************************************************
+ * parameter structures
+ */
+typedef struct _DDHAL_DESTROYDRIVERDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ HRESULT ddRVal;
+ LPDDHAL_DESTROYDRIVER DestroyDriver;
+} DDHAL_DESTROYDRIVERDATA;
+
+typedef struct _DDHAL_SETMODEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ DWORD dwModeIndex;
+ HRESULT ddRVal;
+ LPDDHAL_SETMODE SetMode;
+ BOOL inexcl;
+ BOOL useRefreshRate;
+} DDHAL_SETMODEDATA;
+
+typedef struct _DDHAL_CREATESURFACEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ DDSURFACEDESC *lpDDSurfaceDesc;
+ LPDDRAWI_DDRAWSURFACE_LCL * lplpSList;
+ DWORD dwSCnt;
+ HRESULT ddRVal;
+ LPDDHAL_CREATESURFACE CreateSurface;
+} DDHAL_CREATESURFACEDATA;
+
+typedef struct _DDHAL_CANCREATESURFACEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ DDSURFACEDESC *lpDDSurfaceDesc;
+ DWORD bIsDifferentPixelFormat;
+ HRESULT ddRVal;
+ LPDDHAL_CANCREATESURFACE CanCreateSurface;
+} DDHAL_CANCREATESURFACEDATA;
+
+typedef struct _DDHAL_CREATEPALETTEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
+ LPPALETTEENTRY lpColorTable;
+ HRESULT ddRVal;
+ LPDDHAL_CREATEPALETTE CreatePalette;
+ BOOL is_excl;
+} DDHAL_CREATEPALETTEDATA;
+
+typedef struct _DDHAL_SETEXCLUSIVEMODEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ DWORD dwEnterExcl;
+ DWORD dwReserved;
+ HRESULT ddRVal;
+ LPDDHAL_SETEXCLUSIVEMODE SetExclusiveMode;
+} DDHAL_SETEXCLUSIVEMODEDATA;
+
+/* surfaces */
+typedef struct _DDHAL_DESTROYSURFACEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_DESTROYSURFACE DestroySurface;
+} DDHAL_DESTROYSURFACEDATA;
+
+typedef struct _DDHAL_FLIPDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurr;
+ LPDDRAWI_DDRAWSURFACE_LCL lpSurfTarg;
+ DWORD dwFlags;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_FLIP Flip;
+ LPDDRAWI_DDRAWSURFACE_LCL lpSurfCurrLeft;
+ LPDDRAWI_DDRAWSURFACE_LCL lpSurfTargLeft;
+} DDHAL_FLIPDATA;
+
+typedef struct _DDHAL_LOCKDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
+ DWORD bHasRect;
+ RECTL rArea;
+ LPVOID lpSurfData;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_LOCK Lock;
+ DWORD dwFlags;
+} DDHAL_LOCKDATA;
+
+typedef struct _DDHAL_UNLOCKDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_UNLOCK Unlock;
+} DDHAL_UNLOCKDATA;
+
+typedef struct _DDHAL_BLTDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;
+ RECTL rDest;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;
+ RECTL rSrc;
+ DWORD dwFlags;
+ DWORD dwROPFlags;
+ DDBLTFX bltFX;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_BLT Blt;
+ BOOL IsClipped;
+ RECTL rOrigDest;
+ RECTL rOrigSrc;
+ DWORD dwRectCnt;
+ LPRECT prDestRects;
+} DDHAL_BLTDATA;
+
+typedef struct _DDHAL_UPDATEOVERLAYDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;
+ RECTL rDest;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;
+ RECTL rSrc;
+ DWORD dwFlags;
+ DDOVERLAYFX overlayFX;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;
+} DDHAL_UPDATEOVERLAYDATA;
+
+typedef struct _DDHAL_SETPALETTEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWSURFACE_LCL lpDDSurface;
+ LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
+ HRESULT ddRVal;
+ LPDDHALSURFCB_SETPALETTE SetPalette;
+ BOOL Attach;
+} DDHAL_SETPALETTEDATA;
+
+/* palettes */
+typedef struct _DDHAL_DESTROYPALETTEDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
+ HRESULT ddRVal;
+ LPDDHALPALCB_DESTROYPALETTE DestroyPalette;
+} DDHAL_DESTROYPALETTEDATA;
+
+typedef struct _DDHAL_SETENTRIESDATA {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPDDRAWI_DDRAWPALETTE_GBL lpDDPalette;
+ DWORD dwBase;
+ DWORD dwNumEntries;
+ LPPALETTEENTRY lpEntries;
+ HRESULT ddRVal;
+ LPDDHALPALCB_SETENTRIES SetEntries;
+} DDHAL_SETENTRIESDATA;
+
+typedef struct _DDHAL_GETDRIVERINFODATA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidInfo;
+ DWORD dwExpectedSize;
+ LPVOID lpvData;
+ DWORD dwActualSize;
+ HRESULT ddRVal;
+ ULONG_PTR dwContext;
+} DDHAL_GETDRIVERINFODATA;
+
+/*****************************************************************************
+ * high-level ddraw implementation structures
+ */
+typedef struct _IUNKNOWN_LIST {
+ struct _IUNKNOWN_LIST * lpLink;
+ LPGUID lpGuid;
+ IUnknown * lpIUnknown;
+} IUNKNOWN_LIST,*LPIUNKNOWN_LIST;
+
+typedef struct _PROCESS_LIST {
+ struct _PROCESS_LIST * lpLink;
+ DWORD dwProcessId;
+ DWORD dwRefCnt;
+ DWORD dwAlphaDepth;
+ DWORD dwZDepth;
+} PROCESS_LIST,*LPPROCESS_LIST;
+
+typedef struct _ATTACHLIST {
+ DWORD dwFlags;
+ struct _ATTACHLIST * lpLink;
+ LPDDRAWI_DDRAWSURFACE_LCL lpAttached;
+ LPDDRAWI_DDRAWSURFACE_INT lpIAttached;
+} ATTACHLIST,*LPATTACHLIST;
+
+#define DDAL_IMPLICIT 0x00000001
+
+typedef struct _ACCESSRECTLIST {
+ struct _ACCESSRECTLIST * lpLink;
+ RECT rDest;
+ LPDDRAWI_DIRECTDRAW_LCL lpOwner;
+ LPVOID lpSurfaceData;
+ DWORD dwFlags;
+ LPHEAPALIASINFO lpHeapAliasInfo;
+} ACCESSRECTLIST,*LPACCESSRECTLIST;
+
+#define ACCESSRECT_VRAMSTYLE 0x00000001
+#define ACCESSRECT_NOTHOLDINGWIN16LOCK 0x00000002
+#define ACCESSRECT_BROKEN 0x00000004
+
+typedef struct _DBLNODE {
+ struct _DBLNODE * next;
+ struct _DBLNODE * prev;
+ LPDDRAWI_DDRAWSURFACE_LCL object;
+ LPDDRAWI_DDRAWSURFACE_INT object_int;
+} DBLNODE,*LPDBLNODE;
+
+typedef struct _DDRAWI_DIRECTDRAW_INT {
+ LPVOID lpVtbl;
+ LPDDRAWI_DIRECTDRAW_LCL lpLcl;
+ LPDDRAWI_DIRECTDRAW_INT lpLink;
+ DWORD dwIntRefCnt;
+} DDRAWI_DIRECTDRAW_INT;
+
+typedef struct _DDRAWI_DIRECTDRAW_LCL {
+ DWORD lpDDMore;
+ LPDDRAWI_DIRECTDRAW_GBL lpGbl;
+ DWORD dwUnused0;
+ DWORD dwLocalFlags;
+ DWORD dwLocalRefCnt;
+ DWORD dwProcessId;
+ IUnknown * pUnkOuter;
+ DWORD dwObsolete1;
+ ULONG_PTR hWnd;
+ ULONG_PTR hDC;
+ DWORD dwErrorMode;
+ LPDDRAWI_DDRAWSURFACE_INT lpPrimary;
+ LPDDRAWI_DDRAWSURFACE_INT lpCB;
+ DWORD dwPreferredMode;
+ /* DirectX 2 */
+ HINSTANCE hD3DInstance;
+ IUnknown * pD3DIUnknown;
+ LPDDHAL_CALLBACKS lpDDCB;
+ ULONG_PTR hDDVxd;
+ /* DirectX 5.0 */
+ DWORD dwAppHackFlags;
+ /* DirectX 5.0A */
+ ULONG_PTR hFocusWnd;
+ DWORD dwHotTracking;
+ DWORD dwIMEState;
+ /* DirectX 6.0 */
+ ULONG_PTR hWndPopup;
+ ULONG_PTR hDD;
+ ULONG_PTR hGammaCalibrator;
+ LPDDGAMMACALIBRATORPROC lpGammaCalibrator;
+} DDRAWI_DIRECTDRAW_LCL;
+
+#define DDRAWILCL_HASEXCLUSIVEMODE 0x00000001
+#define DDRAWILCL_ISFULLSCREEN 0x00000002
+#define DDRAWILCL_SETCOOPCALLED 0x00000004
+#define DDRAWILCL_ACTIVEYES 0x00000008
+#define DDRAWILCL_ACTIVENO 0x00000010
+#define DDRAWILCL_HOOKEDHWND 0x00000020
+#define DDRAWILCL_ALLOWMODEX 0x00000040
+#define DDRAWILCL_V1SCLBEHAVIOUR 0x00000080
+#define DDRAWILCL_MODEHASBEENCHANGED 0x00000100
+#define DDRAWILCL_CREATEDWINDOW 0x00000200
+#define DDRAWILCL_DIRTYDC 0x00000400
+#define DDRAWILCL_DISABLEINACTIVATE 0x00000800
+#define DDRAWILCL_CURSORCLIPPED 0x00001000
+#define DDRAWILCL_EXPLICITMONITOR 0x00002000
+#define DDRAWILCL_MULTITHREADED 0x00004000
+#define DDRAWILCL_FPUSETUP 0x00008000
+#define DDRAWILCL_POWEREDDOWN 0x00010000
+#define DDRAWILCL_DIRECTDRAW7 0x00020000
+#define DDRAWILCL_ATTEMPTEDD3DCONTEXT 0x00040000
+#define DDRAWILCL_FPUPRESERVE 0x00080000
+
+typedef struct _DDRAWI_DIRECTDRAW_GBL {
+ DWORD dwRefCnt;
+ DWORD dwFlags;
+ FLATPTR fpPrimaryOrig;
+ DDCORECAPS ddCaps;
+ DWORD dwInternal1;
+ DWORD dwUnused1[9];
+ LPDDHAL_CALLBACKS lpDDCBtmp;
+ LPDDRAWI_DDRAWSURFACE_INT dsList;
+ LPDDRAWI_DDRAWPALETTE_INT palList;
+ LPDDRAWI_DDRAWCLIPPER_INT clipperList;
+ LPDDRAWI_DIRECTDRAW_GBL lp16DD;
+ DWORD dwMaxOverlays;
+ DWORD dwCurrOverlays;
+ DWORD dwMonitorFrequency;
+ DDCORECAPS ddHELCaps;
+ DWORD dwUnused2[50];
+ DDCOLORKEY ddckCKDestOverlay;
+ DDCOLORKEY ddckCKSrcOverlay;
+ VIDMEMINFO vmiData;
+ LPVOID lpDriverHandle;
+ LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner;
+ DWORD dwModeIndex;
+ DWORD dwModeIndexOrig;
+ DWORD dwNumFourCC;
+ LPDWORD lpdwFourCC;
+ DWORD dwNumModes;
+ LPDDHALMODEINFO lpModeInfo;
+ PROCESS_LIST plProcessList;
+ DWORD dwSurfaceLockCount;
+ DWORD dwAliasedLockCnt;
+ ULONG_PTR dwReserved3;
+ ULONG_PTR hDD;
+ char cObsolete[12];
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DBLNODE dbnOverlayRoot;
+ volatile LPWORD lpwPDeviceFlags;
+ DWORD dwPDevice;
+ DWORD dwWin16LockCnt;
+ DWORD dwUnused3;
+ DWORD hInstance;
+ DWORD dwEvent16;
+ DWORD dwSaveNumModes;
+ /* DirectX 2 */
+ ULONG_PTR lpD3DGlobalDriverData;
+ ULONG_PTR lpD3DHALCallbacks;
+ DDCORECAPS ddBothCaps;
+ /* DirectX 5.0 */
+ LPDDVIDEOPORTCAPS lpDDVideoPortCaps;
+ LPDDRAWI_DDVIDEOPORT_INT dvpList;
+ ULONG_PTR lpD3DHALCallbacks2;
+ RECT rectDevice;
+ DWORD cMonitors;
+ LPVOID gpbmiSrc;
+ LPVOID gpbmiDest;
+ LPHEAPALIASINFO phaiHeapAliases;
+ ULONG_PTR hKernelHandle;
+ ULONG_PTR pfnNotifyProc;
+ LPDDKERNELCAPS lpDDKernelCaps;
+ LPDDNONLOCALVIDMEMCAPS lpddNLVCaps;
+ LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps;
+ LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps;
+ ULONG_PTR lpD3DExtendedCaps;
+ /* DirectX 5.0A */
+ DWORD dwDOSBoxEvent;
+ RECT rectDesktop;
+ char cDriverName[MAX_DRIVER_NAME];
+ /* DirectX 6.0 */
+ ULONG_PTR lpD3DHALCallbacks3;
+ DWORD dwNumZPixelFormats;
+ DDPIXELFORMAT *lpZPixelFormats;
+ LPDDRAWI_DDMOTIONCOMP_INT mcList;
+ DWORD hDDVxd;
+ DDSCAPSEX ddsCapsMore;
+} DDRAWI_DIRECTDRAW_GBL;
+
+#define DDRAWI_VIRTUALDESKTOP 0x00000008
+#define DDRAWI_MODEX 0x00000010
+#define DDRAWI_DISPLAYDRV 0x00000020
+#define DDRAWI_FULLSCREEN 0x00000040
+#define DDRAWI_MODECHANGED 0x00000080
+#define DDRAWI_NOHARDWARE 0x00000100
+#define DDRAWI_PALETTEINIT 0x00000200
+#define DDRAWI_NOEMULATION 0x00000400
+/* more... */
+
+/* surfaces */
+typedef struct _DDRAWI_DDRAWSURFACE_INT {
+ LPVOID lpVtbl;
+ LPDDRAWI_DDRAWSURFACE_LCL lpLcl;
+ LPDDRAWI_DDRAWSURFACE_INT lpLink;
+ DWORD dwIntRefCnt;
+} DDRAWI_DDRAWSURFACE_INT;
+
+typedef struct _DDRAWI_DDRAWSURFACE_GBL {
+ DWORD dwRefCnt;
+ DWORD dwGlobalFlags;
+ union {
+ LPACCESSRECTLIST lpRectList;
+ DWORD dwBlockSizeY;
+ } DUMMYUNIONNAME1;
+ union {
+ LPVMEMHEAP lpVidMemHeap;
+ DWORD dwBlockSizeX;
+ } DUMMYUNIONNAME2;
+ union {
+ LPDDRAWI_DIRECTDRAW_GBL lpDD;
+ LPVOID lpDDHandle;
+ } DUMMYUNIONNAME3;
+ FLATPTR fpVidMem;
+ union {
+ LONG lPitch;
+ DWORD dwLinearSize;
+ } DUMMYUNIONNAME4;
+ WORD wHeight;
+ WORD wWidth;
+ DWORD dwUsageCount;
+ ULONG_PTR dwReserved1; /* for display driver use */
+ /* optional (defaults to primary surface pixelformat) */
+ DDPIXELFORMAT ddpfSurface;
+} DDRAWI_DDRAWSURFACE_GBL;
+
+#define DDRAWISURFGBL_MEMFREE 0x00000001
+#define DDRAWISURFGBL_SYSMEMREQUESTED 0x00000002
+#define DDRAWISURFGBL_ISGDISURFACE 0x00000004
+#define DDRAWISURFGBL_SOFTWAREAUTOFLIP 0x00000008
+#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK 0x00000010
+#define DDRAWISURFGBL_LOCKVRAMSTYLE 0x00000020
+#define DDRAWISURFGBL_LOCKBROKEN 0x00000040
+#define DDRAWISURFGBL_IMPLICITHANDLE 0x00000080
+#define DDRAWISURFGBL_ISCLIENTMEM 0x00000100
+#define DDRAWISURFGBL_HARDWAREOPSOURCE 0x00000200
+#define DDRAWISURFGBL_HARDWAREOPDEST 0x00000400
+#define DDRAWISURFGBL_HARDWAREOPSTARTED 0x00000600
+#define DDRAWISURFGBL_VPORTINTERLEAVED 0x00000800
+#define DDRAWISURFGBL_VPORTDATA 0x00001000
+#define DDRAWISURFGBL_LATEALLOCATELINEAR 0x00002000
+#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER 0x00004000
+#define DDRAWISURFGBL_FASTLOCKHELD 0x00008000
+#define DDRAWISURFGBL_READONLYLOCKHELD 0x00010000
+
+typedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {
+ DWORD dwSize;
+ union {
+ DWORD dwPhysicalPageTable;
+ FLATPTR fpPhysicalVidMem;
+ } DUMMYUNIONNAME1;
+ LPDWORD pPageTable;
+ DWORD cPages;
+ ULONG_PTR dwSavedDCContext;
+ FLATPTR fpAliasedVidMem;
+ ULONG_PTR dwDriverReserved;
+ ULONG_PTR dwHELReserved;
+ DWORD cPageUnlocks;
+ ULONG_PTR hKernelSurface;
+ DWORD dwKernelRefCnt;
+ DDCOLORCONTROL *lpColorInfo;
+ FLATPTR fpNTAlias;
+ DWORD dwContentsStamp;
+ LPVOID lpvUnswappedDriverReserved;
+ LPVOID lpDDRAWReserved2;
+ DWORD dwDDRAWReserved1;
+ DWORD dwDDRAWReserved2;
+ FLATPTR fpAliasOfVidMem;
+} DDRAWI_DDRAWSURFACE_GBL_MORE;
+
+/* the MS version of this macro was somewhat obfuscated and unreadable
+ * (possibly because of mediocre MS coders)... so I simplified it...
+ * (and so I commit no copyright violations either, hah) */
+#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \
+ (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))
+
+typedef struct _DDRAWI_DDRAWSURFACE_MORE {
+ DWORD dwSize;
+ IUNKNOWN_LIST * lpIUnknowns;
+ LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
+ DWORD dwPageLockCount;
+ DWORD dwBytesAllocated;
+ LPDDRAWI_DIRECTDRAW_INT lpDD_int;
+ DWORD dwMipMapCount;
+ LPDDRAWI_DDRAWCLIPPER_INT lpDDIClipper;
+ /* DirectX 5.0 */
+ LPHEAPALIASINFO lpHeapAliasInfo;
+ DWORD dwOverlayFlags;
+ VOID *rgjunc;
+ LPDDRAWI_DDVIDEOPORT_LCL lpVideoPort;
+ DDOVERLAYFX *lpddOverlayFX;
+ DDSCAPSEX ddsCapsEx;
+ DWORD dwTextureStage;
+ LPVOID lpDDRAWReserved;
+ LPVOID lpDDRAWReserved2;
+ LPVOID lpDDrawReserved3;
+ DWORD dwDDrawReserved4;
+ LPVOID lpDDrawReserved5;
+ LPDWORD lpGammaRamp;
+ LPDWORD lpOriginalGammaRamp;
+ LPVOID lpDDrawReserved6;
+ DWORD dwSurfaceHandle;
+ DWORD qwDDrawReserved8[2];
+ LPVOID lpDDrawReserved9;
+ DWORD cSurfaces;
+ DDSURFACEDESC2 *pCreatedDDSurfaceDesc2;
+ LPDDRAWI_DDRAWSURFACE_LCL *slist;
+ DWORD dwFVF;
+ LPVOID lpVB;
+} DDRAWI_DDRAWSURFACE_MORE;
+
+typedef struct _DDRAWI_DDRAWSURFACE_LCL {
+ LPDDRAWI_DDRAWSURFACE_MORE lpSurfMore;
+ LPDDRAWI_DDRAWSURFACE_GBL lpGbl;
+ ULONG_PTR hDDSurface;
+ LPATTACHLIST lpAttachList;
+ LPATTACHLIST lpAttachListFrom;
+ DWORD dwLocalRefCnt;
+ DWORD dwProcessId;
+ DWORD dwFlags;
+ DDSCAPS ddsCaps;
+ LPDDRAWI_DDRAWPALETTE_INT lpDDPalette;
+ LPDDRAWI_DDRAWCLIPPER_LCL lpDDClipper;
+ DWORD dwModeCreatedIn;
+ DWORD dwBackBufferCount;
+ DDCOLORKEY ddckCKDestBlt;
+ DDCOLORKEY ddckCKSrcBlt;
+ ULONG_PTR hDC;
+ ULONG_PTR dwReserved1; /* for display driver use */
+ /* overlays only */
+ DDCOLORKEY ddckCKSrcOverlay;
+ DDCOLORKEY ddckCKDestOverlay;
+ LPDDRAWI_DDRAWSURFACE_INT lpSurfaceOverlaying;
+ DBLNODE dbnOverlayNode;
+ RECT rcOverlaySrc;
+ RECT rcOverlayDest;
+ DWORD dwClrXparent;
+ DWORD dwAlpha;
+ LONG lOverlayX;
+ LONG lOverlayY;
+} DDRAWI_DDRAWSURFACE_LCL;
+
+#define DDRAWISURF_ATTACHED 0x00000001
+#define DDRAWISURF_IMPLICITCREATE 0x00000002
+#define DDRAWISURF_ISFREE 0x00000004
+#define DDRAWISURF_ATTACHED_FROM 0x00000008
+#define DDRAWISURF_IMPLICITROOT 0x00000010
+#define DDRAWISURF_PARTOFPRIMARYCHAIN 0x00000020
+#define DDRAWISURF_DATAISALIASED 0x00000040
+#define DDRAWISURF_HASDC 0x00000080
+#define DDRAWISURF_HASCKEYDESTOVERLAY 0x00000100
+#define DDRAWISURF_HASCKEYDESTBLT 0x00000200
+#define DDRAWISURF_HASCKEYSRCOVERLAY 0x00000400
+#define DDRAWISURF_HASCKEYSRCBLT 0x00000800
+#define DDRAWISURF_LOCKEXCLUDEDCURSOR 0x00001000
+#define DDRAWISURF_HASPIXELFORMAT 0x00002000
+#define DDRAWISURF_HASOVERLAYDATA 0x00004000
+#define DDRAWISURF_SETGAMMA 0x00008000
+/* more... */
+#define DDRAWISURF_INVALID 0x10000000
+
+/* palettes */
+typedef struct _DDRAWI_DDRAWPALETTE_INT {
+ LPVOID lpVtbl;
+ LPDDRAWI_DDRAWPALETTE_LCL lpLcl;
+ LPDDRAWI_DDRAWPALETTE_INT lpLink;
+ DWORD dwIntRefCnt;
+} DDRAWI_DDRAWPALETTE_INT;
+
+typedef struct _DDRAWI_DDRAWPALETTE_GBL {
+ DWORD dwRefCnt;
+ DWORD dwFlags;
+ LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
+ DWORD dwProcessId;
+ LPPALETTEENTRY lpColorTable;
+ union {
+ ULONG_PTR dwReserved1; /* for display driver use */
+ HPALETTE hHELGDIPalette;
+ } DUMMYUNIONNAME1;
+ /* DirectX 5.0 */
+ DWORD dwDriverReserved;
+ DWORD dwContentsStamp;
+ /* DirectX 6.0 */
+ DWORD dwSaveStamp;
+ /* DirectX 7.0 */
+ DWORD dwHandle;
+} DDRAWI_DDRAWPALETTE_GBL;
+
+#define DDRAWIPAL_256 0x00000001
+#define DDRAWIPAL_16 0x00000002
+#define DDRAWIPAL_GDI 0x00000004
+#define DDRAWIPAL_STORED_8 0x00000008
+#define DDRAWIPAL_STORED_16 0x00000010
+#define DDRAWIPAL_STORED_24 0x00000020
+#define DDRAWIPAL_EXCLUSIVE 0x00000040
+#define DDRAWIPAL_INHEL 0x00000080
+#define DDRAWIPAL_DIRTY 0x00000100
+#define DDRAWIPAL_ALLOW256 0x00000200
+#define DDRAWIPAL_4 0x00000400
+#define DDRAWIPAL_2 0x00000800
+#define DDRAWIPAL_STORED_8INDEX 0x00001000
+#define DDRAWIPAL_ALPHA 0x00002000
+
+typedef struct _DDRAWI_DDRAWPALETTE_LCL {
+ DWORD lpPalMore;
+ LPDDRAWI_DDRAWPALETTE_GBL lpGbl;
+ ULONG_PTR dwUnused0;
+ DWORD dwLocalRefCnt;
+ IUnknown * pUnkOuter;
+ LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl;
+ ULONG_PTR dwReserved1;
+ /* DirectX 6.0 */
+ ULONG_PTR dwDDRAWReserved1;
+ ULONG_PTR dwDDRAWReserved2;
+ ULONG_PTR dwDDRAWReserved3;
+} DDRAWI_DDRAWPALETTE_LCL;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __DDRAWI_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl
new file mode 100644
index 00000000..98b686b2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ddstream.idl
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "mmstream.idl";
+
+cpp_quote("#ifndef __DDRAW_INCLUDED__")
+typedef void * LPDDSURFACEDESC;
+typedef struct tDDSURFACEDESC DDSURFACEDESC;
+interface IDirectDraw;
+interface IDirectDrawSurface;
+interface IDirectDrawPalette;
+cpp_quote("#endif")
+cpp_quote("#include <ddraw.h>")
+
+enum {
+ DDSFF_PROGRESSIVERENDER = 0x00000001
+};
+
+interface IDirectDrawMediaStream;
+interface IDirectDrawStreamSample;
+
+[
+object,
+local,
+uuid(F4104FCE-9A70-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawMediaStream : IMediaStream
+{
+ HRESULT GetFormat(
+ [out] DDSURFACEDESC *pDDSDCurrent,
+ [out] IDirectDrawPalette **ppDirectDrawPalette,
+ [out] DDSURFACEDESC *pDDSDDesired,
+ [out] DWORD *pdwFlags);
+
+ HRESULT SetFormat(
+ [in] const DDSURFACEDESC *pDDSurfaceDesc,
+ [in] IDirectDrawPalette *pDirectDrawPalette);
+
+ HRESULT GetDirectDraw(
+ [out] IDirectDraw **ppDirectDraw);
+
+ HRESULT SetDirectDraw(
+ [in] IDirectDraw *pDirectDraw);
+
+ HRESULT CreateSample(
+ [in] IDirectDrawSurface *pSurface,
+ [in] const RECT *pRect,
+ [in] DWORD dwFlags,
+ [out] IDirectDrawStreamSample **ppSample);
+
+ HRESULT GetTimePerFrame(
+ [out] STREAM_TIME *pFrameTime);
+}
+
+
+[
+object,
+local,
+uuid(F4104FCF-9A70-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IDirectDrawStreamSample : IStreamSample
+{
+ HRESULT GetSurface(
+ [out] IDirectDrawSurface ** ppDirectDrawSurface,
+ [out] RECT * pRect);
+
+ HRESULT SetRect(
+ [in] const RECT * pRect);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h
new file mode 100644
index 00000000..a491e54b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/delayloadhandler.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2013 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DELAYLOADHANDLER_H
+#define __WINE_DELAYLOADHANDLER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DELAYLOAD_GPA_FAILURE 4
+
+typedef struct _DELAYLOAD_PROC_DESCRIPTOR
+{
+ ULONG ImportDescribedByName;
+ union {
+ LPCSTR Name;
+ ULONG Ordinal;
+ } Description;
+} DELAYLOAD_PROC_DESCRIPTOR, *PDELAYLOAD_PROC_DESCRIPTOR;
+
+typedef struct _DELAYLOAD_INFO
+{
+ ULONG Size;
+ PCIMAGE_DELAYLOAD_DESCRIPTOR DelayloadDescriptor;
+ PIMAGE_THUNK_DATA ThunkAddress;
+ LPCSTR TargetDllName;
+ DELAYLOAD_PROC_DESCRIPTOR TargetApiDescriptor;
+ PVOID TargetModuleBase;
+ PVOID Unused;
+ ULONG LastError;
+} DELAYLOAD_INFO, *PDELAYLOAD_INFO;
+
+typedef PVOID (WINAPI *PDELAYLOAD_FAILURE_DLL_CALLBACK)(ULONG, PDELAYLOAD_INFO);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DELAYLOADHANDLER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl
new file mode 100644
index 00000000..ccaaa60c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devenum.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+cpp_quote("#define CDEF_CLASS_DEFAULT 0x0001")
+cpp_quote("#define CDEF_BYPASS_CLASS_MANAGER 0x0002")
+cpp_quote("#define CDEF_CLASS_LEGACY 0x0004")
+cpp_quote("#define CDEF_MERIT_ABOVE_DO_NOT_USE 0x0008")
+
+[
+ object,
+ uuid(29840822-5B84-11D0-BD3B-00A0C911CE86),
+ pointer_default(unique)
+]
+interface ICreateDevEnum : IUnknown
+{
+ HRESULT CreateClassEnumerator(
+ [in] REFCLSID clsidDeviceClass,
+ [out] IEnumMoniker ** ppEnumMoniker,
+ [in] DWORD dwFlags);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h
new file mode 100644
index 00000000..9e863342
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devguid.h
@@ -0,0 +1,115 @@
+/*
+ * Defines GUIDs for device classes
+ *
+ * Copyright (C) 2004 CodeWeavers (Aric Stewart)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+DEFINE_GUID( GUID_DEVCLASS_1394,
+ 0x6BDD1FC1, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_ADAPTER,
+ 0x4D36E964, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_APMSUPPORT,
+ 0xD45B1C18, 0xC8FA, 0x11D1, 0x9F, 0x77, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
+DEFINE_GUID( GUID_DEVCLASS_BATTERY,
+ 0x72631E54, 0x78A4, 0x11D0, 0xBC, 0xF7, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A );
+DEFINE_GUID( GUID_DEVCLASS_CDROM,
+ 0x4D36E965, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_COMPUTER,
+ 0x4D36E966, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_DECODER,
+ 0x6BDD1FC2, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_DISKDRIVE,
+ 0x4D36E967, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_DISPLAY,
+ 0x4D36E968, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_FDC,
+ 0x4D36E969, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_FLOPPYDISK,
+ 0x4D36E980, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_GPS,
+ 0x6BDD1FC3, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_HDC,
+ 0x4D36E96A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_HIDCLASS,
+ 0x745A17A0, 0x74D3, 0x11D0, 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA );
+DEFINE_GUID( GUID_DEVCLASS_IMAGE,
+ 0x6BDD1FC6, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_INFRARED,
+ 0x6BDD1FC5, 0x810F, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
+DEFINE_GUID( GUID_DEVCLASS_KEYBOARD,
+ 0x4D36E96B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_LEGACYDRIVER,
+ 0x8ECC055D, 0x047F, 0x11D1, 0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1 );
+DEFINE_GUID( GUID_DEVCLASS_MEDIA,
+ 0x4D36E96C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MEDIUM_CHANGER,
+ 0xCE5939AE, 0xEBDE, 0x11D0, 0xB1, 0x81, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xC4 );
+DEFINE_GUID( GUID_DEVCLASS_MODEM,
+ 0x4D36E96D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MONITOR,
+ 0x4D36E96E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MOUSE,
+ 0x4D36E96F, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MTD,
+ 0x4D36E970, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MULTIFUNCTION,
+ 0x4D36E971, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_MULTIPORTSERIAL,
+ 0x50906CB8, 0xBA12, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
+DEFINE_GUID( GUID_DEVCLASS_NET,
+ 0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NETCLIENT,
+ 0x4D36E973, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NETSERVICE,
+ 0x4D36E974, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NETTRANS,
+ 0x4D36E975, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_NODRIVER,
+ 0x4D36E976, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PCMCIA,
+ 0x4D36E977, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PORTS,
+ 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PRINTER,
+ 0x4D36E979, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_PRINTERUPGRADE,
+ 0x4D36E97A, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_SCSIADAPTER,
+ 0x4D36E97B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_SMARTCARDREADER,
+ 0x50DD5230, 0xBA8A, 0x11D1, 0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30 );
+DEFINE_GUID( GUID_DEVCLASS_SOUND,
+ 0x4D36E97C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_SYSTEM,
+ 0x4D36E97D, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_TAPEDRIVE,
+ 0x6D807884, 0x7D21, 0x11CF, 0x80, 0x1C, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_UNKNOWN,
+ 0x4D36E97E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
+DEFINE_GUID( GUID_DEVCLASS_USB,
+ 0x36FC9E60, 0xC465, 0x11CF, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 );
+DEFINE_GUID( GUID_DEVCLASS_VOLUME,
+ 0x71A27CDD, 0x812A, 0x11D0, 0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F );
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl
new file mode 100644
index 00000000..413f636d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devicetopology.idl
@@ -0,0 +1,745 @@
+/*
+ * Core Audio device topology definitions
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+interface IPart;
+interface IControlInterface;
+interface IDeviceTopology;
+interface IControlChangeNotify;
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "propidl.idl";
+
+cpp_quote("#ifndef E_NOTFOUND")
+cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
+cpp_quote("#endif")
+
+cpp_quote("#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 0x64726148 /* 'draH' */")
+cpp_quote("DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);")
+
+cpp_quote("#define _IKsControl_")
+cpp_quote("#include <ks.h>")
+cpp_quote("#include <ksmedia.h>")
+cpp_quote("#ifndef _KS_")
+
+typedef struct {
+ ULONG FormatSize;
+ ULONG Flags;
+ ULONG SampleSize;
+ ULONG Reserved;
+ GUID MajorFormat;
+ GUID SubFormat;
+ GUID Specifier;
+} KSDATAFORMAT;
+
+typedef KSDATAFORMAT *PKSDATAFORMAT;
+
+typedef struct
+{
+ union
+ {
+ struct {
+ GUID Set;
+ ULONG Id;
+ ULONG Flags;
+ };
+ LONGLONG Alignment;
+ };
+} KSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
+typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD;
+typedef KSIDENTIFIER KSEVENT, *PKSEVENT;
+
+typedef enum
+{
+ eConnTypeUnknown = 0,
+ eConnType3Point5mm,
+ eConnTypeQuarter,
+ eConnTypeAtapiInternal,
+ eConnTypeRCA,
+ eConnTypeOptical,
+ eConnTypeOtherDigital,
+ eConnTypeOtherAnalog,
+ eConnTypeMultichannelAnalogDIN,
+ eConnTypeXlrProfessional,
+ eConnTypeRj11Modem,
+ eConnTypeCombination
+} EPcxConnectionType;
+
+typedef enum
+{
+ eGeoLocRear = 1,
+ eGeoLocFront,
+ eGeoLocLeft,
+ eGeoLocRight,
+ eGeoLocTop,
+ eGeoLocBottom,
+ eGeoLocRearPanel,
+ eGeoLocRiser,
+ eGeoLocInsideMobileLid,
+ eGeoLocDrivebay,
+ eGeoLocHDMI,
+ eGeoLocOutsideMobileLid,
+ eGeoLocATAPI,
+ eGeoLocReserved5,
+ eGeoLocReserved6
+} EPcxGeoLocation;
+
+typedef enum
+{
+ eGenLocPrimaryBox = 0,
+ eGenLocInternal,
+ eGenLocSeparate,
+ eGenLocOther
+} EPcxGenLocation;
+
+typedef enum
+{
+ ePortConnJack = 0,
+ ePortConnIntegratedDevice,
+ ePortConnBothIntegratedAndJack,
+ ePortConnUnknown
+} EPxcPortConnection;
+
+typedef struct
+{
+ DWORD ChannelMapping;
+ COLORREF Color;
+ EPcxConnectionType ConnectionType;
+ EPcxGeoLocation GeoLocation;
+ EPcxGenLocation GenLocation;
+ EPxcPortConnection PortConnection;
+ BOOL IsConnected;
+} KSJACK_DESCRIPTION;
+
+typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;
+
+typedef struct _LUID
+{
+ DWORD LowPart;
+ LONG HighPart;
+} LUID;
+
+typedef struct _LUID *PLUID;
+
+typedef enum
+{
+ KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,
+ KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT
+} KSJACK_SINK_CONNECTIONTYPE;
+
+typedef struct _tagKSJACK_SINK_INFORMATION
+{
+ KSJACK_SINK_CONNECTIONTYPE ConnType;
+ WORD ManufacturerId;
+ WORD ProductId;
+ WORD AudioLatency;
+ BOOL HDCPCapable;
+ BOOL AICapable;
+ UCHAR SinkDescriptionLength;
+ WCHAR SinkDescription[32];
+ LUID PortId;
+} KSJACK_SINK_INFORMATION;
+
+typedef struct _tagKSJACK_DESCRIPTION2
+{
+ DWORD DeviceStateInfo;
+ DWORD JackCapabilities;
+} KSJACK_DESCRIPTION2;
+
+typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
+
+cpp_quote("#endif")
+
+typedef enum
+{
+ In = 0,
+ Out
+} DataFlow;
+
+typedef enum
+{
+ Connector = 0,
+ Subunit
+} PartType;
+
+typedef enum
+{
+ Unknown_Connector = 0,
+ Physical_Internal,
+ Physical_External,
+ Software_IO,
+ Software_Fixed,
+ Network
+} ConnectorType;
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(28f54685-06fd-11d2-b27a-00a0c9223196),
+ local,
+ object
+]
+interface IKsControl : IUnknown
+{
+ HRESULT KsProperty(
+ [in] PKSPROPERTY Property,
+ [in] ULONG PropertyLength,
+ [in,out] void *PropertyData,
+ [in] ULONG DataLength,
+ [out] ULONG *BytesReturned
+ );
+ HRESULT KsMethod(
+ [in] PKSMETHOD Method,
+ [in] ULONG MethodLength,
+ [in,out] void *MethodData,
+ [in] ULONG DataLength,
+ [out] ULONG *BytesReturned
+ );
+ HRESULT KsEvent(
+ [in] PKSEVENT Event,
+ [in] ULONG EventLength,
+ [in,out] void *EventData,
+ [in] ULONG DataLength,
+ [out] ULONG *BytesReturned
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb),
+ local,
+ object
+]
+interface IPerChannelDbLevel : IUnknown
+{
+ HRESULT GetChannelCount(
+ [out] UINT *pcChannels
+ );
+ HRESULT GetLevelRange(
+ [in] UINT nChannel,
+ [out] float *pfMinLevelDB,
+ [out] float *pfMaxLevelDB,
+ [out] float *pfStepping
+ );
+ HRESULT GetLevel(
+ [in] UINT nChannel,
+ [out] float *pfLevelDB
+ );
+ HRESULT SetLevel(
+ [in] UINT nChannel,
+ [in] float fLevelDB,
+ [in,unique] LPCGUID pguidEventContext
+ );
+ HRESULT SetLevelUniform(
+ [in] float fLevelDB,
+ [in,unique] LPCGUID pguidEventContext
+ );
+ HRESULT SetLevelAllChannels(
+ [size_is(cChannels),in] float *aLevelsDB,
+ [in] ULONG cChannels,
+ [in] LPCGUID pguidEventContext
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc),
+ local,
+ object
+]
+interface IAudioVolumeLevel : IPerChannelDbLevel
+{
+ /* Empty */
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(bb11c46f-ec28-493c-b88a-5db88062ce98),
+ local,
+ object
+]
+interface IAudioChannelConfig : IUnknown
+{
+ HRESULT SetChannelConfig(
+ [in] DWORD dwConfig,
+ [in] LPCGUID pguidEventContext
+ );
+ HRESULT GetChannelConfig(
+ [in] DWORD dwConfig,
+ [retval,out] DWORD *pdwConfig
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938),
+ local,
+ object
+]
+interface IAudioLoudness : IUnknown
+{
+ HRESULT GetEnabled(
+ [out] BOOL *pbEnabled
+ );
+ HRESULT SetEnabled(
+ [in] BOOL bEnabled,
+ [in] LPCGUID pguidEventContext
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(4f03dc02-5e6e-4653-8f72-a030c123d598),
+ local,
+ object
+]
+interface IAudioInputSelector : IUnknown
+{
+ HRESULT GetSelection(
+ [out] UINT *pnIdSelected
+ );
+ HRESULT SetSelection(
+ [in] UINT nIdSelect,
+ [unique,in] LPCGUID pguidEventContext
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
+ local,
+ object
+]
+interface IAudioOutputSelector : IUnknown
+{
+ HRESULT GetSelection(
+ [out] UINT *pnIdSelected
+ );
+ HRESULT SetSelection(
+ [in] UINT nIdSelect,
+ [unique,in] LPCGUID pguidEventContext
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
+ local,
+ object
+]
+interface IAudioMute : IUnknown
+{
+ HRESULT SetMute(
+ [in] BOOL bMute,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT GetMute(
+ [out] BOOL *pbMute
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5),
+ local,
+ object
+]
+interface IAudioBass : IPerChannelDbLevel
+{
+ /* Empty */
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf),
+ local,
+ object
+]
+interface IAudioMidRange : IPerChannelDbLevel
+{
+ /* Empty */
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(0a717812-694e-4907-b74b-bafa5cfdca7b),
+ local,
+ object
+]
+interface IAudioTreble : IPerChannelDbLevel
+{
+ /* Empty */
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab),
+ local,
+ object
+]
+interface IAudioAutoGainControl : IUnknown
+{
+ HRESULT GetEnabled(
+ [in] BOOL bEnabled,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT GetMute(
+ [out] BOOL *pbEnabled
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796),
+ local,
+ object
+]
+interface IAudioPeakMeter : IUnknown
+{
+ HRESULT GetChannelCount(
+ [out] UINT *pcChannels
+ );
+ HRESULT GetLevel(
+ [in] UINT nChannel,
+ [out] float *pfLevel
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(3b22bcbf-2586-4af0-8583-205d391b807c),
+ local,
+ object
+]
+interface IDeviceSpecificProperty : IUnknown
+{
+ HRESULT GetType(
+ [out] VARTYPE *pVType
+ );
+ HRESULT GetValue(
+ [out] VARTYPE *pvType,
+ [out,in] DWORD *pcbValue
+ );
+ HRESULT SetValue(
+ [in] void *pvValue,
+ [in] DWORD cbValue,
+ [in] LPCGUID pguidEventContext
+ );
+ HRESULT Get4BRange(
+ [out] LONG *plMin,
+ [out] LONG *plMax,
+ [out] LONG *plStepping
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5),
+ local,
+ object
+]
+interface IKsFormatSupport : IUnknown
+{
+ HRESULT IsFormatSupported(
+ [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat,
+ [in] DWORD cbFormat,
+ [out] BOOL *pbSupported
+ );
+ HRESULT GetDevicePreferredFormat(
+ [out] PKSDATAFORMAT *ppKsFormat
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(4509f757-2d46-4637-8e62-ce7db944f57b),
+ local,
+ object
+]
+interface IKsJackDescription : IUnknown
+{
+ HRESULT GetJackCount(
+ [out] UINT *pcJacks
+ );
+ HRESULT GetJackDescription(
+ [in] UINT nJack,
+ [out] KSJACK_DESCRIPTION *pDescription
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a),
+ local,
+ object
+]
+interface IKsJackDescription2 : IUnknown
+{
+ HRESULT GetJackCount(
+ [out] UINT *pcJacks
+ );
+ HRESULT GetJackDescription2(
+ [in] UINT nJack,
+ [out] KSJACK_DESCRIPTION2 *pDescription2
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532),
+ local,
+ object
+]
+interface IKsJackSinkInformation : IUnknown
+{
+ HRESULT GetJackSinkInformation(
+ [out] KSJACK_SINK_INFORMATION *pJackSinkInformation
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb),
+ local,
+ object
+]
+interface IPartsList : IUnknown
+{
+ HRESULT GetCount(
+ [out] UINT *pCount
+ );
+ HRESULT GetPart(
+ [in] UINT nIndex,
+ [out] IPart **ppPart
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9),
+ local,
+ object
+]
+interface IPart : IUnknown
+{
+ HRESULT GetName(
+ [out] LPWSTR *ppwstrName
+ );
+ HRESULT GetLocalId(
+ [out] UINT *pnId
+ );
+ HRESULT GetGlobalId(
+ [out] LPWSTR *ppwstrGlobalId
+ );
+ HRESULT GetPartType(
+ [out] PartType *pPartType
+ );
+ HRESULT GetSubType(
+ [out] GUID *pSubType
+ );
+ HRESULT GetControlInterfaceCount(
+ [out] UINT *pCount
+ );
+ HRESULT GetControlInterface(
+ [in] UINT nIndex,
+ [out] IControlInterface **ppInterfaceDesc
+ );
+ HRESULT EnumPartsIncoming(
+ [out] IPartsList **ppParts
+ );
+ HRESULT EnumPartsOutgoing(
+ [out] IPartsList **ppParts
+ );
+ HRESULT GetTopologyObjects(
+ [out] IDeviceTopology **ppTopology
+ );
+ HRESULT Activate(
+ [in] DWORD dwClsContext,
+ [in] REFIID refiid,
+ [iid_is(refiid),out] void **ppvObject
+ );
+ HRESULT RegisterControlChangeCallback(
+ [in] REFGUID riid,
+ [in] IControlChangeNotify *pNotify
+ );
+ HRESULT UnregisterControlChangeCallback(
+ [in] IControlChangeNotify *pNotify
+ );
+};
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(9c2c4058-23f5-41de-877a-df3af236a09e),
+ local,
+ object
+]
+interface IConnector : IUnknown
+{
+ HRESULT GetType(
+ [out] ConnectorType *pType
+ );
+ HRESULT GetDataFlow(
+ [out] DataFlow *pFlow
+ );
+ HRESULT ConnectTo(
+ [in] IConnector *pConnectTo
+ );
+ HRESULT Disconnect(void);
+ HRESULT IsConnected(
+ [out] BOOL *pbConnected
+ );
+ HRESULT GetConnectedTo(
+ [out] IConnector **ppConTo
+ );
+ HRESULT GetConnectorIdConnectedTo(
+ [out] LPWSTR *ppwstrConnectorId
+ );
+ HRESULT GetDeviceIdConnectedTo(
+ [out] LPWSTR *ppwstrDeviceId
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71),
+ local,
+ object
+]
+interface ISubUnit: IUnknown
+{
+ /* Empty IUnknown interface.. */
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(45d37c3f-5140-444a-ae24-400789f3cbf3),
+ local,
+ object
+]
+interface IControlInterface : IUnknown
+{
+ HRESULT GetName(
+ [out] LPWSTR *ppwstrName
+ );
+ HRESULT GetIID(
+ [out] GUID *pIID
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947),
+ local,
+ object
+]
+interface IControlChangeNotify : IUnknown
+{
+ HRESULT OnNotify(
+ [in] DWORD dwSenderProcessId,
+ [in] LPCGUID ppguidEventContext
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(2a07407e-6497-4a18-9787-32f79bd0d98f),
+ local,
+ object
+]
+interface IDeviceTopology : IUnknown
+{
+ HRESULT GetConnectorCount(
+ [out] UINT *pCount
+ );
+ HRESULT GetConnector(
+ [in] UINT nIndex,
+ [out] IConnector **ppConnector
+ );
+ HRESULT GetSubunitCount(
+ [out] UINT *pCount
+ );
+ HRESULT GetSubunit(
+ [in] UINT nIndex,
+ [out] ISubUnit **ppConnector
+ );
+ HRESULT GetPartById(
+ [in] UINT nId,
+ [out] IPart **ppPart
+ );
+ HRESULT GetDeviceId(
+ [out] LPWSTR *ppwstrDeviceId
+ );
+ HRESULT GetSignalPath(
+ [in] IPart *pIPartFrom,
+ [in] IPart *pIPartTo,
+ [in] BOOL bRejectMixedPaths,
+ [out] IPartsList **ppParts
+ );
+}
+
+[
+ version(1.0)
+]
+library DevTopologyLib
+{
+ [
+ uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59),
+ ]
+ coclass DeviceTopology
+ {
+ interface IDeviceTopology;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h
new file mode 100644
index 00000000..8382e61c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpkey.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <devpropdef.h>
+
+/* TODO: Not all DEVPROPKEYS have been defined here */
+
+DEFINE_DEVPROPKEY(DEVPKEY_NAME, 0xb725f130,0x47ef,0x101a,0xa5,0xf1,0x02,0x60,0x8c,0x9e,0xeb,0xac, 10);
+
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DeviceDesc, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_HardwareIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_CompatibleIds, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 4);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Service, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 6);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Class, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 9);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ClassGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 10);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Driver, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 11);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_ConfigFlags, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 12);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Manufacturer, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 13);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 14);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationInfo, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 15);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PDOName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 16);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Capabilities, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 17);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 18);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UpperFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 19);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LowerFilters, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 20);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusTypeGuid, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 21);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LegacyBusType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 22);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BusNumber, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 23);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_EnumeratorName, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 24);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Security, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 25);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_SecuritySDS, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 26);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_DevType, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 27);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Exclusive, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 28);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Characteristics, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 29);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_Address, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 30);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_UINumberDescFormat, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 31);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_PowerData, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 32);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicy, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 33);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyDefault, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 34);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyOverride, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 35);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 36);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37);
+DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38);
+
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3);
+DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ClassGuid, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 4);
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h
new file mode 100644
index 00000000..795c259d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/devpropdef.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _DEVPROPDEF_H_
+#define _DEVPROPDEF_H_
+
+typedef ULONG DEVPROPTYPE, *PDEVPROPTYPE;
+
+#define DEVPROP_TYPEMOD_ARRAY 0x1000
+#define DEVPROP_TYPEMOD_LIST 0x2000
+#define MAX_DEVPROP_TYPEMOD DEVPROP_TYPEMOD_LIST
+
+#define DEVPROP_TYPE_EMPTY 0x00
+#define DEVPROP_TYPE_NULL 0x01
+#define DEVPROP_TYPE_SBYTE 0x02
+#define DEVPROP_TYPE_BYTE 0x03
+#define DEVPROP_TYPE_INT16 0x04
+#define DEVPROP_TYPE_UINT16 0x05
+#define DEVPROP_TYPE_INT32 0x06
+#define DEVPROP_TYPE_UINT32 0x07
+#define DEVPROP_TYPE_INT64 0x08
+#define DEVPROP_TYPE_UINT64 0x09
+#define DEVPROP_TYPE_FLOAT 0x0a
+#define DEVPROP_TYPE_DOUBLE 0x0b
+#define DEVPROP_TYPE_DECIMAL 0x0c
+#define DEVPROP_TYPE_GUID 0x0d
+#define DEVPROP_TYPE_CURRENCY 0x0e
+#define DEVPROP_TYPE_DATE 0x0f
+#define DEVPROP_TYPE_FILETIME 0x10
+#define DEVPROP_TYPE_BOOLEAN 0x11
+#define DEVPROP_TYPE_STRING 0x12
+#define DEVPROP_TYPE_STRING_LIST (DEVPROP_TYPE_STRING|DEVPROP_TYPEMOD_LIST)
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR 0x13
+#define DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING 0x14
+#define DEVPROP_TYPE_DEVPROPKEY 0x15
+#define DEVPROP_TYPE_DEVPROPTYPE 0x16
+#define DEVPROP_TYPE_BINARY (DEVPROP_TYPE_BYTE|DEVPROP_TYPEMOD_ARRAY)
+#define DEVPROP_TYPE_ERROR 0x17
+#define DEVPROP_TYPE_NTSTATUS 0x18
+#define DEVPROP_TYPE_STRING_INDIRECT 0x19
+#define MAX_DEVPROP_TYPE DEVPROP_TYPE_STRING_INDIRECT
+
+#define DEVPROP_MASK_TYPE 0x0fff
+#define DEVPROP_MASK_TYPEMOD 0xf000
+
+typedef CHAR DEVPROP_BOOLEAN, *PDEVPROP_BOOLEAN;
+#define DEVPROP_TRUE ((DEVPROP_BOOLEAN)-1)
+#define DEVPROP_FALSE ((DEVPROP_BOOLEAN)0)
+
+#ifndef DEVPROPKEY_DEFINED
+#define DEVPROPKEY_DEFINED
+typedef GUID DEVPROPGUID, *PDEVPROPGUID;
+typedef ULONG DEVPROPID, *PDEVPROPID;
+
+typedef struct _DEVPROPKEY {
+ DEVPROPGUID fmtid;
+ DEVPROPID pid;
+} DEVPROPKEY, *PDEVPROPKEY;
+
+#define DEVPROPID_FIRST_USABLE 2
+
+#endif /*DEVPROPKEY_DEFINED*/
+
+#endif /*_DEVPROPDEF_H_*/
+
+#undef DEFINE_DEVPROPKEY
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+ EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \
+ EXTERN_C const DEVPROPKEY name = \
+ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid }
+#else
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+ const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY; \
+ const DEVPROPKEY name = \
+ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid }
+#endif
+#else
+#define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+ EXTERN_C const DEVPROPKEY name DECLSPEC_HIDDEN DECLSPEC_SELECTANY
+#endif
+
+#ifndef IsEqualDevPropKey
+#ifdef __cplusplus
+#define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid))
+#else
+#define IsEqualDevPropKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid))
+#endif
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h
new file mode 100644
index 00000000..16017b4a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/difxapi.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2013 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DIFXAPI_H
+#define __WINE_DIFXAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _INSTALLERINFO_A
+{
+ PSTR pApplicationId;
+ PSTR pDisplayName;
+ PSTR pProductName;
+ PSTR pMfgName;
+} INSTALLERINFO_A, *PINSTALLERINFO_A;
+typedef const PINSTALLERINFO_A PCINSTALLERINFO_A;
+
+typedef struct _INSTALLERINFO_W
+{
+ PWSTR pApplicationId;
+ PWSTR pDisplayName;
+ PWSTR pProductName;
+ PWSTR pMfgName;
+} INSTALLERINFO_W, *PINSTALLERINFO_W;
+typedef const PINSTALLERINFO_W PCINSTALLERINFO_W;
+
+typedef enum _DIFXAPI_LOG
+{
+ DIFXAPI_SUCCESS,
+ DIFXAPI_INFO,
+ DIFXAPI_WARNING,
+ DIFXAPI_ERROR,
+} DIFXAPI_LOG;
+
+typedef VOID (CALLBACK *DIFXAPILOGCALLBACK_A)(DIFXAPI_LOG,DWORD,PCSTR,PVOID);
+typedef VOID (CALLBACK *DIFXAPILOGCALLBACK_W)(DIFXAPI_LOG,DWORD,PCWSTR,PVOID);
+
+VOID WINAPI DIFXAPISetLogCallbackA(DIFXAPILOGCALLBACK_A,VOID*);
+VOID WINAPI DIFXAPISetLogCallbackW(DIFXAPILOGCALLBACK_W,VOID*);
+DWORD WINAPI DriverPackageGetPathA(PCSTR,PSTR,DWORD*);
+DWORD WINAPI DriverPackageGetPathW(PCWSTR,PWSTR,DWORD*);
+DWORD WINAPI DriverPackageInstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*);
+DWORD WINAPI DriverPackageInstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*);
+DWORD WINAPI DriverPackagePreinstallA(PCSTR,DWORD);
+DWORD WINAPI DriverPackagePreinstallW(PCWSTR,DWORD);
+DWORD WINAPI DriverPackageUninstallA(PCSTR,DWORD,PCINSTALLERINFO_A,BOOL*);
+DWORD WINAPI DriverPackageUninstallW(PCWSTR,DWORD,PCINSTALLERINFO_W,BOOL*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DIFXAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h
new file mode 100644
index 00000000..e4cefeec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/digitalv.h
@@ -0,0 +1,875 @@
+/*
+ * Copyright (C) 1999 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DIGITALV_H
+#define __WINE_DIGITALV_H
+
+/*
+ * Wine Digital Video extensions
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MCI_TEST __MSABI_LONG(0x00000020)
+
+/* Message values */
+
+#define MCI_CAPTURE 0x0870
+#define MCI_MONITOR 0x0871
+#define MCI_RESERVE 0x0872
+#define MCI_SETAUDIO 0x0873
+#define MCI_SIGNAL 0x0875
+#define MCI_SETVIDEO 0x0876
+#define MCI_QUALITY 0x0877
+#define MCI_LIST 0x0878
+#define MCI_UNDO 0x0879
+#define MCI_CONFIGURE 0x087A
+#define MCI_RESTORE 0x087B
+
+/* Return and string constant values */
+
+#define MCI_ON 1
+#define MCI_OFF 0
+
+#define MCI_DGV_FILE_MODE_SAVING 0x0001
+#define MCI_DGV_FILE_MODE_LOADING 0x0002
+#define MCI_DGV_FILE_MODE_EDITING 0x0003
+#define MCI_DGV_FILE_MODE_IDLE 0x0004
+
+/* These identifiers are used only by device drivers */
+
+#define MCI_ON_S __MSABI_LONG(0x00008000)
+#define MCI_OFF_S __MSABI_LONG(0x00008001)
+#define MCI_DGV_FILE_S __MSABI_LONG(0x00008002)
+#define MCI_DGV_INPUT_S __MSABI_LONG(0x00008003)
+
+#define MCI_DGV_FILE_MODE_SAVING_S __MSABI_LONG(0x00008004)
+#define MCI_DGV_FILE_MODE_LOADING_S __MSABI_LONG(0x00008005)
+#define MCI_DGV_FILE_MODE_EDITING_S __MSABI_LONG(0x00008006)
+#define MCI_DGV_FILE_MODE_IDLE_S __MSABI_LONG(0x00008007)
+
+#define MCI_DGV_SETVIDEO_SRC_NTSC_S __MSABI_LONG(0x00008010)
+#define MCI_DGV_SETVIDEO_SRC_RGB_S __MSABI_LONG(0x00008011)
+#define MCI_DGV_SETVIDEO_SRC_SVIDEO_S __MSABI_LONG(0x00008012)
+#define MCI_DGV_SETVIDEO_SRC_PAL_S __MSABI_LONG(0x00008013)
+#define MCI_DGV_SETVIDEO_SRC_SECAM_S __MSABI_LONG(0x00008014)
+#define MCI_DGV_SETVIDEO_SRC_GENERIC_S __MSABI_LONG(0x00008015)
+
+#define MCI_DGV_SETAUDIO_SRC_LEFT_S __MSABI_LONG(0x00008020)
+#define MCI_DGV_SETAUDIO_SRC_RIGHT_S __MSABI_LONG(0x00008021)
+#define MCI_DGV_SETAUDIO_SRC_AVERAGE_S __MSABI_LONG(0x00008022)
+#define MCI_DGV_SETAUDIO_SRC_STEREO_S __MSABI_LONG(0x00008023)
+
+/* Window message for signal notification */
+
+#ifndef MM_MCISIGNAL
+#define MM_MCISIGNAL 0x3CB
+#endif
+
+/* error values */
+
+#define MCIERR_DGV_DEVICE_LIMIT (MCIERR_CUSTOM_DRIVER_BASE+0)
+#define MCIERR_DGV_IOERR (MCIERR_CUSTOM_DRIVER_BASE+1)
+#define MCIERR_DGV_WORKSPACE_EMPTY (MCIERR_CUSTOM_DRIVER_BASE+2)
+#define MCIERR_DGV_DISK_FULL (MCIERR_CUSTOM_DRIVER_BASE+3)
+#define MCIERR_DGV_DEVICE_MEMORY_FULL (MCIERR_CUSTOM_DRIVER_BASE+4)
+#define MCIERR_DGV_BAD_CLIPBOARD_RANGE (MCIERR_CUSTOM_DRIVER_BASE+5)
+
+/* defines for monitor methods */
+
+#define MCI_DGV_METHOD_PRE __MSABI_LONG(0x0000a000)
+#define MCI_DGV_METHOD_POST __MSABI_LONG(0x0000a001)
+#define MCI_DGV_METHOD_DIRECT __MSABI_LONG(0x0000a002)
+
+/* defines for known file formats */
+
+#define MCI_DGV_FF_AVSS __MSABI_LONG(0x00004000)
+#define MCI_DGV_FF_AVI __MSABI_LONG(0x00004001)
+#define MCI_DGV_FF_DIB __MSABI_LONG(0x00004002)
+#define MCI_DGV_FF_RDIB __MSABI_LONG(0x00004003)
+#define MCI_DGV_FF_JPEG __MSABI_LONG(0x00004004)
+#define MCI_DGV_FF_RJPEG __MSABI_LONG(0x00004005)
+#define MCI_DGV_FF_JFIF __MSABI_LONG(0x00004006)
+#define MCI_DGV_FF_MPEG __MSABI_LONG(0x00004007)
+
+/* values for dwItem field of MCI_CAPABILITY_PARMS structure */
+
+#define MCI_DGV_GETDEVCAPS_CAN_LOCK __MSABI_LONG(0x00004000)
+#define MCI_DGV_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004001)
+#define MCI_DGV_GETDEVCAPS_CAN_FREEZE __MSABI_LONG(0x00004002)
+#define MCI_DGV_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004003)
+#define MCI_DGV_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004004)
+#define MCI_DGV_GETDEVCAPS_HAS_STILL __MSABI_LONG(0x00004005)
+#define MCI_DGV_GETDEVCAPS_PALETTES __MSABI_LONG(0x00004006)
+#define MCI_DGV_GETDEVCAPS_CAN_STR_IN __MSABI_LONG(0x00004008)
+#define MCI_DGV_GETDEVCAPS_CAN_TEST __MSABI_LONG(0x00004009)
+#define MCI_DGV_GETDEVCAPS_MAXIMUM_RATE __MSABI_LONG(0x0000400a)
+#define MCI_DGV_GETDEVCAPS_MINIMUM_RATE __MSABI_LONG(0x0000400b)
+
+/* flags for dwFlags parameter of MCI_CAPTURE command message */
+
+#define MCI_DGV_CAPTURE_AS __MSABI_LONG(0x00010000)
+#define MCI_DGV_CAPTURE_AT __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_COPY command message */
+
+#define MCI_DGV_COPY_AT __MSABI_LONG(0x00010000)
+#define MCI_DGV_COPY_AUDIO_STREAM __MSABI_LONG(0x00020000)
+#define MCI_DGV_COPY_VIDEO_STREAM __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_CUE command message */
+
+#define MCI_DGV_CUE_INPUT __MSABI_LONG(0x00010000)
+#define MCI_DGV_CUE_OUTPUT __MSABI_LONG(0x00020000)
+#define MCI_DGV_CUE_NOSHOW __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_CUT command message */
+
+#define MCI_DGV_CUT_AT __MSABI_LONG(0x00010000)
+#define MCI_DGV_CUT_AUDIO_STREAM __MSABI_LONG(0x00020000)
+#define MCI_DGV_CUT_VIDEO_STREAM __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_DELETE command message */
+
+#define MCI_DGV_DELETE_AT __MSABI_LONG(0x00010000)
+#define MCI_DGV_DELETE_AUDIO_STREAM __MSABI_LONG(0x00020000)
+#define MCI_DGV_DELETE_VIDEO_STREAM __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_FREEZE command message */
+
+#define MCI_DGV_FREEZE_AT __MSABI_LONG(0x00010000)
+#define MCI_DGV_FREEZE_OUTSIDE __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_INFO command message */
+
+#define MCI_DGV_INFO_TEXT __MSABI_LONG(0x00010000)
+#define MCI_DGV_INFO_ITEM __MSABI_LONG(0x00020000)
+
+/* values for dwItem field of MCI_DGV_INFO_PARMS structure */
+
+#define MCI_INFO_VERSION __MSABI_LONG(0x00000400)
+
+#define MCI_DGV_INFO_USAGE __MSABI_LONG(0x00004000)
+#define MCI_DGV_INFO_AUDIO_QUALITY __MSABI_LONG(0x00004001)
+#define MCI_DGV_INFO_STILL_QUALITY __MSABI_LONG(0x00004002)
+#define MCI_DGV_INFO_VIDEO_QUALITY __MSABI_LONG(0x00004003)
+#define MCI_DGV_INFO_AUDIO_ALG __MSABI_LONG(0x00004004)
+#define MCI_DGV_INFO_STILL_ALG __MSABI_LONG(0x00004005)
+#define MCI_DGV_INFO_VIDEO_ALG __MSABI_LONG(0x00004006)
+
+/* flags for dwFlags parameter of MCI_LIST command message */
+
+#define MCI_DGV_LIST_ITEM __MSABI_LONG(0x00010000)
+#define MCI_DGV_LIST_COUNT __MSABI_LONG(0x00020000)
+#define MCI_DGV_LIST_NUMBER __MSABI_LONG(0x00040000)
+#define MCI_DGV_LIST_ALG __MSABI_LONG(0x00080000)
+
+/* values for dwItem field of MCI_DGV_LIST_PARMS structure */
+
+#define MCI_DGV_LIST_AUDIO_ALG __MSABI_LONG(0x00004000)
+#define MCI_DGV_LIST_AUDIO_QUALITY __MSABI_LONG(0x00004001)
+#define MCI_DGV_LIST_AUDIO_STREAM __MSABI_LONG(0x00004002)
+#define MCI_DGV_LIST_STILL_ALG __MSABI_LONG(0x00004003)
+#define MCI_DGV_LIST_STILL_QUALITY __MSABI_LONG(0x00004004)
+#define MCI_DGV_LIST_VIDEO_ALG __MSABI_LONG(0x00004005)
+#define MCI_DGV_LIST_VIDEO_QUALITY __MSABI_LONG(0x00004006)
+#define MCI_DGV_LIST_VIDEO_STREAM __MSABI_LONG(0x00004007)
+#define MCI_DGV_LIST_VIDEO_SOURCE __MSABI_LONG(0x00004008)
+
+
+/* flags for dwFlags parameter of MCI_MONITOR command message */
+
+#define MCI_DGV_MONITOR_METHOD __MSABI_LONG(0x00010000)
+#define MCI_DGV_MONITOR_SOURCE __MSABI_LONG(0x00020000)
+
+/* values for dwSource parameter of the MCI_DGV_MONITOR_PARMS structure */
+
+#define MCI_DGV_MONITOR_INPUT __MSABI_LONG(0x00004000)
+#define MCI_DGV_MONITOR_FILE __MSABI_LONG(0x00004001)
+
+/* flags for dwFlags parameter of MCI_OPEN command message */
+
+#define MCI_DGV_OPEN_WS __MSABI_LONG(0x00010000)
+#define MCI_DGV_OPEN_PARENT __MSABI_LONG(0x00020000)
+#define MCI_DGV_OPEN_NOSTATIC __MSABI_LONG(0x00040000)
+#define MCI_DGV_OPEN_16BIT __MSABI_LONG(0x00080000)
+#define MCI_DGV_OPEN_32BIT __MSABI_LONG(0x00100000)
+
+/* flags for dwFlags parameter of MCI_PASTE command message */
+
+#define MCI_DGV_PASTE_AT __MSABI_LONG(0x00010000)
+#define MCI_DGV_PASTE_AUDIO_STREAM __MSABI_LONG(0x00020000)
+#define MCI_DGV_PASTE_VIDEO_STREAM __MSABI_LONG(0x00040000)
+#define MCI_DGV_PASTE_INSERT __MSABI_LONG(0x00080000)
+#define MCI_DGV_PASTE_OVERWRITE __MSABI_LONG(0x00100000)
+
+/* flags for dwFlags parameter of MCI_PLAY command message */
+
+#define MCI_DGV_PLAY_REPEAT __MSABI_LONG(0x00010000)
+#define MCI_DGV_PLAY_REVERSE __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_PUT command message */
+
+#define MCI_DGV_RECT __MSABI_LONG(0x00010000)
+#define MCI_DGV_PUT_SOURCE __MSABI_LONG(0x00020000)
+#define MCI_DGV_PUT_DESTINATION __MSABI_LONG(0x00040000)
+#define MCI_DGV_PUT_FRAME __MSABI_LONG(0x00080000)
+#define MCI_DGV_PUT_VIDEO __MSABI_LONG(0x00100000)
+#define MCI_DGV_PUT_WINDOW __MSABI_LONG(0x00200000)
+#define MCI_DGV_PUT_CLIENT __MSABI_LONG(0x00400000)
+
+/* flags for dwFlags parameter of MCI_QUALITY command message */
+
+#define MCI_QUALITY_ITEM __MSABI_LONG(0x00010000)
+#define MCI_QUALITY_NAME __MSABI_LONG(0x00020000)
+#define MCI_QUALITY_ALG __MSABI_LONG(0x00040000)
+#define MCI_QUALITY_DIALOG __MSABI_LONG(0x00080000)
+#define MCI_QUALITY_HANDLE __MSABI_LONG(0x00100000)
+
+/* values for dwItem field of MCI_QUALITY_PARMS structure */
+
+#define MCI_QUALITY_ITEM_AUDIO __MSABI_LONG(0x00004000)
+#define MCI_QUALITY_ITEM_STILL __MSABI_LONG(0x00004001)
+#define MCI_QUALITY_ITEM_VIDEO __MSABI_LONG(0x00004002)
+
+/* flags for dwFlags parameter of MCI_REALIZE command message */
+
+#define MCI_DGV_REALIZE_NORM __MSABI_LONG(0x00010000)
+#define MCI_DGV_REALIZE_BKGD __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_RECORD command message */
+
+#define MCI_DGV_RECORD_HOLD __MSABI_LONG(0x00020000)
+#define MCI_DGV_RECORD_AUDIO_STREAM __MSABI_LONG(0x00040000)
+#define MCI_DGV_RECORD_VIDEO_STREAM __MSABI_LONG(0x00080000)
+
+/* flags for dwFlags parameters of MCI_RESERVE command message */
+
+#define MCI_DGV_RESERVE_IN __MSABI_LONG(0x00010000)
+#define MCI_DGV_RESERVE_SIZE __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_RESTORE command message */
+
+#define MCI_DGV_RESTORE_FROM __MSABI_LONG(0x00010000)
+#define MCI_DGV_RESTORE_AT __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameters of MCI_SAVE command message */
+
+#define MCI_DGV_SAVE_ABORT __MSABI_LONG(0x00020000)
+#define MCI_DGV_SAVE_KEEPRESERVE __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameters of MCI_SET command message */
+
+#define MCI_DGV_SET_SEEK_EXACTLY __MSABI_LONG(0x00010000)
+#define MCI_DGV_SET_SPEED __MSABI_LONG(0x00020000)
+#define MCI_DGV_SET_STILL __MSABI_LONG(0x00040000)
+#define MCI_DGV_SET_FILEFORMAT __MSABI_LONG(0x00080000)
+
+/* flags for the dwFlags parameter of MCI_SETAUDIO command message */
+
+#define MCI_DGV_SETAUDIO_OVER __MSABI_LONG(0x00010000)
+#define MCI_DGV_SETAUDIO_CLOCKTIME __MSABI_LONG(0x00020000)
+#define MCI_DGV_SETAUDIO_ALG __MSABI_LONG(0x00040000)
+#define MCI_DGV_SETAUDIO_QUALITY __MSABI_LONG(0x00080000)
+#define MCI_DGV_SETAUDIO_RECORD __MSABI_LONG(0x00100000)
+#define MCI_DGV_SETAUDIO_LEFT __MSABI_LONG(0x00200000)
+#define MCI_DGV_SETAUDIO_RIGHT __MSABI_LONG(0x00400000)
+#define MCI_DGV_SETAUDIO_ITEM __MSABI_LONG(0x00800000)
+#define MCI_DGV_SETAUDIO_VALUE __MSABI_LONG(0x01000000)
+#define MCI_DGV_SETAUDIO_INPUT __MSABI_LONG(0x02000000)
+#define MCI_DGV_SETAUDIO_OUTPUT __MSABI_LONG(0x04000000)
+
+/* values for the dwItem parameter of MCI_DGV_SETAUDIO_PARMS */
+
+#define MCI_DGV_SETAUDIO_TREBLE __MSABI_LONG(0x00004000)
+#define MCI_DGV_SETAUDIO_BASS __MSABI_LONG(0x00004001)
+#define MCI_DGV_SETAUDIO_VOLUME __MSABI_LONG(0x00004002)
+#define MCI_DGV_SETAUDIO_STREAM __MSABI_LONG(0x00004003)
+#define MCI_DGV_SETAUDIO_SOURCE __MSABI_LONG(0x00004004)
+#define MCI_DGV_SETAUDIO_SAMPLESPERSEC __MSABI_LONG(0x00004005)
+#define MCI_DGV_SETAUDIO_AVGBYTESPERSEC __MSABI_LONG(0x00004006)
+#define MCI_DGV_SETAUDIO_BLOCKALIGN __MSABI_LONG(0x00004007)
+#define MCI_DGV_SETAUDIO_BITSPERSAMPLE __MSABI_LONG(0x00004008)
+
+/* values for the dwValue parameter of MCI_DGV_SETAUDIO_PARMS
+ used with MCI_DGV_SETAUDIO_SOURCE */
+
+#define MCI_DGV_SETAUDIO_SOURCE_STEREO __MSABI_LONG(0x00000000)
+#define MCI_DGV_SETAUDIO_SOURCE_LEFT __MSABI_LONG(0x00000001)
+#define MCI_DGV_SETAUDIO_SOURCE_RIGHT __MSABI_LONG(0x00000002)
+#define MCI_DGV_SETAUDIO_SOURCE_AVERAGE __MSABI_LONG(0x00004000)
+
+/* flags for the dwFlags parameter of MCI_SETVIDEO command */
+
+#define MCI_DGV_SETVIDEO_QUALITY __MSABI_LONG(0x00010000)
+#define MCI_DGV_SETVIDEO_ALG __MSABI_LONG(0x00020000)
+#define MCI_DGV_SETVIDEO_CLOCKTIME __MSABI_LONG(0x00040000)
+#define MCI_DGV_SETVIDEO_SRC_NUMBER __MSABI_LONG(0x00080000)
+#define MCI_DGV_SETVIDEO_ITEM __MSABI_LONG(0x00100000)
+#define MCI_DGV_SETVIDEO_OVER __MSABI_LONG(0x00200000)
+#define MCI_DGV_SETVIDEO_RECORD __MSABI_LONG(0x00400000)
+#define MCI_DGV_SETVIDEO_STILL __MSABI_LONG(0x00800000)
+#define MCI_DGV_SETVIDEO_VALUE __MSABI_LONG(0x01000000)
+#define MCI_DGV_SETVIDEO_INPUT __MSABI_LONG(0x02000000)
+#define MCI_DGV_SETVIDEO_OUTPUT __MSABI_LONG(0x04000000)
+
+/* values for the dwTo field of MCI_SETVIDEO_PARMS
+ used with MCI_DGV_SETVIDEO_SOURCE */
+
+#define MCI_DGV_SETVIDEO_SRC_NTSC __MSABI_LONG(0x00004000)
+#define MCI_DGV_SETVIDEO_SRC_RGB __MSABI_LONG(0x00004001)
+#define MCI_DGV_SETVIDEO_SRC_SVIDEO __MSABI_LONG(0x00004002)
+#define MCI_DGV_SETVIDEO_SRC_PAL __MSABI_LONG(0x00004003)
+#define MCI_DGV_SETVIDEO_SRC_SECAM __MSABI_LONG(0x00004004)
+#define MCI_DGV_SETVIDEO_SRC_GENERIC __MSABI_LONG(0x00004005)
+
+/* values for the dwItem field of MCI_SETVIDEO_PARMS */
+
+#define MCI_DGV_SETVIDEO_BRIGHTNESS __MSABI_LONG(0x00004000)
+#define MCI_DGV_SETVIDEO_COLOR __MSABI_LONG(0x00004001)
+#define MCI_DGV_SETVIDEO_CONTRAST __MSABI_LONG(0x00004002)
+#define MCI_DGV_SETVIDEO_TINT __MSABI_LONG(0x00004003)
+#define MCI_DGV_SETVIDEO_SHARPNESS __MSABI_LONG(0x00004004)
+#define MCI_DGV_SETVIDEO_GAMMA __MSABI_LONG(0x00004005)
+#define MCI_DGV_SETVIDEO_STREAM __MSABI_LONG(0x00004006)
+#define MCI_DGV_SETVIDEO_PALHANDLE __MSABI_LONG(0x00004007)
+#define MCI_DGV_SETVIDEO_FRAME_RATE __MSABI_LONG(0x00004008)
+#define MCI_DGV_SETVIDEO_SOURCE __MSABI_LONG(0x00004009)
+#define MCI_DGV_SETVIDEO_KEY_INDEX __MSABI_LONG(0x0000400a)
+#define MCI_DGV_SETVIDEO_KEY_COLOR __MSABI_LONG(0x0000400b)
+#define MCI_DGV_SETVIDEO_BITSPERPEL __MSABI_LONG(0x0000400c)
+
+/* flags for the dwFlags parameter of MCI_SIGNAL */
+
+#define MCI_DGV_SIGNAL_AT __MSABI_LONG(0x00010000)
+#define MCI_DGV_SIGNAL_EVERY __MSABI_LONG(0x00020000)
+#define MCI_DGV_SIGNAL_USERVAL __MSABI_LONG(0x00040000)
+#define MCI_DGV_SIGNAL_CANCEL __MSABI_LONG(0x00080000)
+#define MCI_DGV_SIGNAL_POSITION __MSABI_LONG(0x00100000)
+
+/* flags for the dwFlags parameter of MCI_STATUS command */
+
+#define MCI_DGV_STATUS_NOMINAL __MSABI_LONG(0x00020000)
+#define MCI_DGV_STATUS_REFERENCE __MSABI_LONG(0x00040000)
+#define MCI_DGV_STATUS_LEFT __MSABI_LONG(0x00080000)
+#define MCI_DGV_STATUS_RIGHT __MSABI_LONG(0x00100000)
+#define MCI_DGV_STATUS_DISKSPACE __MSABI_LONG(0x00200000)
+#define MCI_DGV_STATUS_INPUT __MSABI_LONG(0x00400000)
+#define MCI_DGV_STATUS_OUTPUT __MSABI_LONG(0x00800000)
+#define MCI_DGV_STATUS_RECORD __MSABI_LONG(0x01000000)
+
+/* values for dwItem field of MCI_STATUS_PARMS structure */
+
+#define MCI_DGV_STATUS_AUDIO_INPUT __MSABI_LONG(0x00004000)
+#define MCI_DGV_STATUS_HWND __MSABI_LONG(0x00004001)
+#define MCI_DGV_STATUS_SPEED __MSABI_LONG(0x00004003)
+#define MCI_DGV_STATUS_HPAL __MSABI_LONG(0x00004004)
+#define MCI_DGV_STATUS_BRIGHTNESS __MSABI_LONG(0x00004005)
+#define MCI_DGV_STATUS_COLOR __MSABI_LONG(0x00004006)
+#define MCI_DGV_STATUS_CONTRAST __MSABI_LONG(0x00004007)
+#define MCI_DGV_STATUS_FILEFORMAT __MSABI_LONG(0x00004008)
+#define MCI_DGV_STATUS_AUDIO_SOURCE __MSABI_LONG(0x00004009)
+#define MCI_DGV_STATUS_GAMMA __MSABI_LONG(0x0000400a)
+#define MCI_DGV_STATUS_MONITOR __MSABI_LONG(0x0000400b)
+#define MCI_DGV_STATUS_MONITOR_METHOD __MSABI_LONG(0x0000400c)
+#define MCI_DGV_STATUS_FRAME_RATE __MSABI_LONG(0x0000400e)
+#define MCI_DGV_STATUS_BASS __MSABI_LONG(0x0000400f)
+#define MCI_DGV_STATUS_SIZE __MSABI_LONG(0x00004010)
+#define MCI_DGV_STATUS_SEEK_EXACTLY __MSABI_LONG(0x00004011)
+#define MCI_DGV_STATUS_SHARPNESS __MSABI_LONG(0x00004012)
+#define MCI_DGV_STATUS_SMPTE __MSABI_LONG(0x00004013)
+#define MCI_DGV_STATUS_AUDIO __MSABI_LONG(0x00004014)
+#define MCI_DGV_STATUS_TINT __MSABI_LONG(0x00004015)
+#define MCI_DGV_STATUS_TREBLE __MSABI_LONG(0x00004016)
+#define MCI_DGV_STATUS_UNSAVED __MSABI_LONG(0x00004017)
+#define MCI_DGV_STATUS_VIDEO __MSABI_LONG(0x00004018)
+#define MCI_DGV_STATUS_VOLUME __MSABI_LONG(0x00004019)
+#define MCI_DGV_STATUS_AUDIO_RECORD __MSABI_LONG(0x0000401a)
+#define MCI_DGV_STATUS_VIDEO_SOURCE __MSABI_LONG(0x0000401b)
+#define MCI_DGV_STATUS_VIDEO_RECORD __MSABI_LONG(0x0000401c)
+#define MCI_DGV_STATUS_STILL_FILEFORMAT __MSABI_LONG(0x0000401d)
+#define MCI_DGV_STATUS_VIDEO_SRC_NUM __MSABI_LONG(0x0000401e)
+#define MCI_DGV_STATUS_FILE_MODE __MSABI_LONG(0x0000401f)
+#define MCI_DGV_STATUS_FILE_COMPLETION __MSABI_LONG(0x00004020)
+#define MCI_DGV_STATUS_WINDOW_VISIBLE __MSABI_LONG(0x00004021)
+#define MCI_DGV_STATUS_WINDOW_MINIMIZED __MSABI_LONG(0x00004022)
+#define MCI_DGV_STATUS_WINDOW_MAXIMIZED __MSABI_LONG(0x00004023)
+#define MCI_DGV_STATUS_KEY_INDEX __MSABI_LONG(0x00004024)
+#define MCI_DGV_STATUS_KEY_COLOR __MSABI_LONG(0x00004025)
+#define MCI_DGV_STATUS_PAUSE_MODE __MSABI_LONG(0x00004026)
+#define MCI_DGV_STATUS_SAMPLESPERSEC __MSABI_LONG(0x00004027)
+#define MCI_DGV_STATUS_AVGBYTESPERSEC __MSABI_LONG(0x00004028)
+#define MCI_DGV_STATUS_BLOCKALIGN __MSABI_LONG(0x00004029)
+#define MCI_DGV_STATUS_BITSPERSAMPLE __MSABI_LONG(0x0000402a)
+#define MCI_DGV_STATUS_BITSPERPEL __MSABI_LONG(0x0000402b)
+#define MCI_DGV_STATUS_FORWARD __MSABI_LONG(0x0000402c)
+#define MCI_DGV_STATUS_AUDIO_STREAM __MSABI_LONG(0x0000402d)
+#define MCI_DGV_STATUS_VIDEO_STREAM __MSABI_LONG(0x0000402e)
+
+/* flags for dwFlags parameter of MCI_STEP command message */
+
+#define MCI_DGV_STEP_REVERSE __MSABI_LONG(0x00010000)
+#define MCI_DGV_STEP_FRAMES __MSABI_LONG(0x00020000)
+
+/* flags for dwFlags parameter of MCI_STOP command message */
+
+#define MCI_DGV_STOP_HOLD __MSABI_LONG(0x00010000)
+
+/* flags for dwFlags parameter of MCI_UPDATE command message */
+
+#define MCI_DGV_UPDATE_HDC __MSABI_LONG(0x00020000)
+#define MCI_DGV_UPDATE_PAINT __MSABI_LONG(0x00040000)
+
+/* flags for dwFlags parameter of MCI_WHERE command message */
+
+#define MCI_DGV_WHERE_SOURCE __MSABI_LONG(0x00020000)
+#define MCI_DGV_WHERE_DESTINATION __MSABI_LONG(0x00040000)
+#define MCI_DGV_WHERE_FRAME __MSABI_LONG(0x00080000)
+#define MCI_DGV_WHERE_VIDEO __MSABI_LONG(0x00100000)
+#define MCI_DGV_WHERE_WINDOW __MSABI_LONG(0x00200000)
+#define MCI_DGV_WHERE_MAX __MSABI_LONG(0x00400000)
+
+/* flags for dwFlags parameter of MCI_WINDOW command message */
+
+#define MCI_DGV_WINDOW_HWND __MSABI_LONG(0x00010000)
+#define MCI_DGV_WINDOW_STATE __MSABI_LONG(0x00040000)
+#define MCI_DGV_WINDOW_TEXT __MSABI_LONG(0x00080000)
+
+/* flags for hWnd parameter of MCI_DGV_WINDOW_PARMS parameter block */
+
+#define MCI_DGV_WINDOW_DEFAULT __MSABI_LONG(0x00000000)
+
+/* parameter block for MCI_WHERE, MCI_PUT, MCI_FREEZE, MCI_UNFREEZE cmds */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ RECT rc;
+} MCI_DGV_RECT_PARMS, *LPMCI_DGV_RECT_PARMS;
+
+/* parameter block for MCI_CAPTURE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_CAPTURE_PARMSA, *LPMCI_DGV_CAPTURE_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_CAPTURE_PARMSW, *LPMCI_DGV_CAPTURE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_CAPTURE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_CAPTURE_PARMS)
+
+/* parameter block for MCI_CLOSE command message */
+
+typedef MCI_GENERIC_PARMS MCI_CLOSE_PARMS, *LPMCI_CLOSE_PARMS;
+
+/* parameter block for MCI_COPY command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_COPY_PARMS, *LPMCI_DGV_COPY_PARMS;
+
+/* parameter block for MCI_CUE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwTo;
+} MCI_DGV_CUE_PARMS, *LPMCI_DGV_CUE_PARMS;
+
+/* parameter block for MCI_CUT command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_CUT_PARMS, * LPMCI_DGV_CUT_PARMS;
+
+/* parameter block for MCI_DELETE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_DELETE_PARMS, * LPMCI_DGV_DELETE_PARMS;
+
+/* parameter block for MCI_FREEZE command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_FREEZE_PARMS, * LPMCI_DGV_FREEZE_PARMS;
+
+/* parameter block for MCI_INFO command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwItem;
+} MCI_DGV_INFO_PARMSA, * LPMCI_DGV_INFO_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwItem;
+} MCI_DGV_INFO_PARMSW, *LPMCI_DGV_INFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_INFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_INFO_PARMS)
+
+/* parameter block for MCI_LIST command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwLength;
+ DWORD dwNumber;
+ DWORD dwItem;
+ LPSTR lpstrAlgorithm;
+} MCI_DGV_LIST_PARMSA, *LPMCI_DGV_LIST_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwLength;
+ DWORD dwNumber;
+ DWORD dwItem;
+ LPWSTR lpstrAlgorithm;
+} MCI_DGV_LIST_PARMSW, *LPMCI_DGV_LIST_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_LIST_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_LIST_PARMS)
+
+/* parameter block for MCI_LOAD command message */
+
+typedef MCI_LOAD_PARMSA MCI_DGV_LOAD_PARMSA, * LPMCI_DGV_LOAD_PARMSA;
+typedef MCI_LOAD_PARMSW MCI_DGV_LOAD_PARMSW, * LPMCI_DGV_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_LOAD_PARMS)
+
+/* parameter block for MCI_MONITOR command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwSource;
+ DWORD dwMethod;
+} MCI_DGV_MONITOR_PARMS, * LPMCI_DGV_MONITOR_PARMS;
+
+/* parameter block for MCI_OPEN command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ UINT wDeviceID;
+ LPSTR lpstrDeviceType;
+ LPSTR lpstrElementName;
+ LPSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_DGV_OPEN_PARMSA, *LPMCI_DGV_OPEN_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ UINT wDeviceID;
+ LPWSTR lpstrDeviceType;
+ LPWSTR lpstrElementName;
+ LPWSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_DGV_OPEN_PARMSW, *LPMCI_DGV_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_OPEN_PARMS)
+
+/* parameter block for MCI_PAUSE command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_PAUSE_PARMS, * LPMCI_DGV_PAUSE_PARMS;
+
+/* parameter block for MCI_PASTE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_PASTE_PARMS, * LPMCI_DGV_PASTE_PARMS;
+
+/* parameter block for MCI_PLAY command message */
+
+typedef MCI_PLAY_PARMS MCI_DGV_PLAY_PARMS, * LPMCI_DGV_PLAY_PARMS;
+
+/* parameter block for MCI_PUT command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_PUT_PARMS, * LPMCI_DGV_PUT_PARMS;
+
+/* parameter block for MCI_QUALITY command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwItem;
+ LPSTR lpstrName;
+ DWORD lpstrAlgorithm;
+ DWORD dwHandle;
+} MCI_DGV_QUALITY_PARMSA, *LPMCI_DGV_QUALITY_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwItem;
+ LPWSTR lpstrName;
+ DWORD lpstrAlgorithm;
+ DWORD dwHandle;
+} MCI_DGV_QUALITY_PARMSW, *LPMCI_DGV_QUALITY_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_QUALITY_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_QUALITY_PARMS)
+
+/* parameter block for MCI_REALIZE command message */
+
+typedef MCI_GENERIC_PARMS MCI_REALIZE_PARMS, * LPMCI_REALIZE_PARMS;
+
+/* parameter block for MCI_RECORD command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_RECORD_PARMS, * LPMCI_DGV_RECORD_PARMS;
+
+/* parameter block for MCI_RESERVE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrPath;
+ DWORD dwSize;
+} MCI_DGV_RESERVE_PARMSA, *LPMCI_DGV_RESERVE_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrPath;
+ DWORD dwSize;
+} MCI_DGV_RESERVE_PARMSW, *LPMCI_DGV_RESERVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_RESERVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESERVE_PARMS)
+
+/* parameter block for MCI_RESTORE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_RESTORE_PARMSA, *LPMCI_DGV_RESTORE_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_RESTORE_PARMSW, *LPMCI_DGV_RESTORE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_RESTORE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESTORE_PARMS)
+
+/* parameter block for MCI_RESUME command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_RESUME_PARMS, * LPMCI_DGV_RESUME_PARMS;
+
+/* parameter block for MCI_SAVE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_SAVE_PARMSA, *LPMCI_DGV_SAVE_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_SAVE_PARMSW, *LPMCI_DGV_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SAVE_PARMS)
+
+/* parameter block for MCI_SET command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ DWORD dwFileFormat;
+ DWORD dwSpeed;
+} MCI_DGV_SET_PARMS, *LPMCI_DGV_SET_PARMS;
+
+/* parameter block for MCI_SETAUDIO command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPSTR lpstrAlgorithm;
+ LPSTR lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMSA, *LPMCI_DGV_SETAUDIO_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPWSTR lpstrAlgorithm;
+ LPWSTR lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMSW, *LPMCI_DGV_SETAUDIO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SETAUDIO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETAUDIO_PARMS)
+
+/* parameter block for MCI_SIGNAL command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwPosition;
+ DWORD dwPeriod;
+ DWORD dwUserParm;
+} MCI_DGV_SIGNAL_PARMS, * LPMCI_DGV_SIGNAL_PARMS;
+
+/* parameter block for MCI_SETVIDEO command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPSTR lpstrAlgorithm;
+ LPSTR lpstrQuality;
+ DWORD dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMSA, *LPMCI_DGV_SETVIDEO_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPWSTR lpstrAlgorithm;
+ LPWSTR lpstrQuality;
+ DWORD dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMSW, *LPMCI_DGV_SETVIDEO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SETVIDEO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETVIDEO_PARMS)
+
+/* parameter block for MCI_STATUS command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+ LPSTR lpstrDrive;
+ DWORD dwReference;
+} MCI_DGV_STATUS_PARMSA, *LPMCI_DGV_STATUS_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+ LPWSTR lpstrDrive;
+ DWORD dwReference;
+} MCI_DGV_STATUS_PARMSW, *LPMCI_DGV_STATUS_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_STATUS_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_STATUS_PARMS)
+
+/* parameter block for MCI_STEP command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwFrames;
+} MCI_DGV_STEP_PARMS, *LPMCI_DGV_STEP_PARMS;
+
+/* parameter block for MCI_STOP command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_STOP_PARMS, * LPMCI_DGV_STOP_PARMS;
+
+/* parameter block for MCI_UNFREEZE command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_UNFREEZE_PARMS, * LPMCI_DGV_UNFREEZE_PARMS;
+
+/* parameter block for MCI_UPDATE command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ RECT rc;
+ HDC hDC;
+} MCI_DGV_UPDATE_PARMS, * LPMCI_DGV_UPDATE_PARMS;
+
+/* parameter block for MCI_WHERE command message */
+
+typedef MCI_DGV_RECT_PARMS MCI_DGV_WHERE_PARMS, * LPMCI_DGV_WHERE_PARMS;
+
+/* parameter block for MCI_WINDOW command message */
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPSTR lpstrText;
+} MCI_DGV_WINDOW_PARMSA, *LPMCI_DGV_WINDOW_PARMSA;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPWSTR lpstrText;
+} MCI_DGV_WINDOW_PARMSW, *LPMCI_DGV_WINDOW_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_WINDOW_PARMS)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DIGITALV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl
new file mode 100644
index 00000000..012a9b8a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dimm.idl
@@ -0,0 +1,599 @@
+/*
+ * Copyright 2007 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+cpp_quote("#include <imm.h>")
+
+cpp_quote("#if 0")
+
+typedef struct {
+ LPSTR lpReading;
+ LPSTR lpWord;
+} REGISTERWORDA;
+
+typedef struct {
+ LPWSTR lpReading;
+ LPWSTR lpWord;
+} REGISTERWORDW;
+
+#define LF_FACESIZE 32
+
+typedef struct {
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ CHAR lfFaceName[LF_FACESIZE];
+} LOGFONTA;
+
+typedef struct {
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ WCHAR lfFaceName[LF_FACESIZE];
+} LOGFONTW;
+
+typedef DWORD HIMC;
+typedef DWORD HIMCC;
+
+typedef struct {
+ DWORD dwIndex;
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} CANDIDATEFORM;
+
+typedef struct {
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} COMPOSITIONFORM;
+
+typedef struct {
+ DWORD dwSize;
+ DWORD dwStyle;
+ DWORD dwCount;
+ DWORD dwSelection;
+ DWORD dwPageStart;
+ DWORD dwPageSize;
+ DWORD dwOffset[1];
+} CANDIDATELIST;
+
+#define STYLE_DESCRIPTION_SIZE 32
+
+typedef struct {
+ DWORD dwStyle;
+ CHAR szDescription[STYLE_DESCRIPTION_SIZE];
+} STYLEBUFA;
+
+typedef struct {
+ DWORD dwStyle;
+ WCHAR szDescription[STYLE_DESCRIPTION_SIZE];
+} STYLEBUFW;
+
+typedef WORD ATOM;
+
+#define IMEMENUITEM_STRING_SIZE 80
+
+typedef struct {
+ UINT cbSize;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ CHAR szString[IMEMENUITEM_STRING_SIZE];
+ HBITMAP hbmpItem;
+} IMEMENUITEMINFOA;
+
+typedef struct {
+ UINT cbSize;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ WCHAR szString[IMEMENUITEM_STRING_SIZE];
+ HBITMAP hbmpItem;
+} IMEMENUITEMINFOW;
+
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(08c03412-f96b-11d0-a475-00aa006bcc59),
+ pointer_default(unique)
+]
+interface IEnumRegisterWordA : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumRegisterWordA **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out] REGISTERWORDA *rgRegisterword,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+}
+
+[
+ object,
+ uuid(4955dd31-b159-11d0-8fcf-00aa006bcc59),
+ pointer_default(unique)
+]
+interface IEnumRegisterWordW : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumRegisterWordW **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out] REGISTERWORDW *rgRegisterword,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+}
+
+[
+ object,
+ uuid(09b5eab0-f997-11d1-93d4-0060b067b86e),
+ pointer_default(unique),
+ local
+]
+interface IEnumInputContext : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumInputContext **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out] HIMC *rgInputContext,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+}
+
+[
+ object,
+ uuid(08c0e040-62d1-11d1-9326-0060b067b86e),
+ pointer_default(unique),
+ local
+]
+interface IActiveIMMApp : IUnknown
+{
+ HRESULT AssociateContext(
+ [in] HWND hWnd,
+ [in] HIMC hIME,
+ [out] HIMC *phPrev);
+
+ HRESULT ConfigureIMEA(
+ [in] HKL hKL,
+ [in] HWND hwnd,
+ [in] DWORD dwMode,
+ [in] REGISTERWORDA *pData);
+
+ HRESULT ConfigureIMEW(
+ [in] HKL hKL,
+ [in] HWND hWnd,
+ [in] DWORD dwMode,
+ [in] REGISTERWORDW *pData);
+
+ HRESULT CreateContext(
+ [out] HIMC *phIMC);
+
+ HRESULT DestroyContext(
+ [in] HIMC hIME);
+
+ HRESULT EnumRegisterWordA(
+ [in] HKL hKL,
+ [in] LPSTR szReading,
+ [in] DWORD dwStyle,
+ [in] LPSTR szRegister,
+ [in] LPVOID pData,
+ [out] IEnumRegisterWordA **pEnum);
+
+ HRESULT EnumRegisterWordW(
+ [in] HKL hKL,
+ [in] LPWSTR szReading,
+ [in] DWORD dwStyle,
+ [in] LPWSTR szRegister,
+ [in] LPVOID pData,
+ [out] IEnumRegisterWordW **pEnum);
+
+ HRESULT EscapeA(
+ [in] HKL hKL,
+ [in] HIMC hIMC,
+ [in] UINT uEscape,
+ [in, out] LPVOID pData,
+ [out] LRESULT *plResult);
+
+ HRESULT EscapeW(
+ [in] HKL hKL,
+ [in] HIMC hIMC,
+ [in] UINT uEscape,
+ [in, out] LPVOID pData,
+ [out] LRESULT *plResult);
+
+ HRESULT GetCandidateListA(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] UINT uBufLen,
+ [out] CANDIDATELIST *pCandList,
+ [out] UINT *puCopied);
+
+ HRESULT GetCandidateListW(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] UINT uBufLen,
+ [out] CANDIDATELIST *pCandList,
+ [out] UINT *puCopied);
+
+ HRESULT GetCandidateListCountA(
+ [in] HIMC hIMC,
+ [out] DWORD *pdwListSize,
+ [out] DWORD *pdwBufLen);
+
+ HRESULT GetCandidateListCountW(
+ [in] HIMC hIMC,
+ [out] DWORD *pdwListSize,
+ [out] DWORD *pdwBufLen);
+
+ HRESULT GetCandidateWindow(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [out] CANDIDATEFORM *pCandidate);
+
+ HRESULT GetCompositionFontA(
+ [in] HIMC hIMC,
+ [out] LOGFONTA *plf);
+
+ HRESULT GetCompositionFontW(
+ [in] HIMC hIMC,
+ [out] LOGFONTW *plf);
+
+ HRESULT GetCompositionStringA(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] DWORD dwBufLen,
+ [out] LONG *plCopied,
+ [out] LPVOID pBuf);
+
+ HRESULT GetCompositionStringW(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] DWORD dwBufLen,
+ [out] LONG *plCopied,
+ [out] LPVOID pBuf);
+
+ HRESULT GetCompositionWindow(
+ [in] HIMC hIMC,
+ [out] COMPOSITIONFORM *pCompForm);
+
+ HRESULT GetContext(
+ [in] HWND hwnd,
+ [out] HIMC *phIMC);
+
+ HRESULT GetConversionListA(
+ [in] HKL hKL,
+ [in] HIMC hIMC,
+ [in] LPSTR pSrc,
+ [in] UINT uBufLen,
+ [in] UINT uFlag,
+ [out] CANDIDATELIST *pDst,
+ [out] UINT *puCopied);
+
+ HRESULT GetConversionListW(
+ [in] HKL hKL,
+ [in] HIMC hIMC,
+ [in] LPWSTR pSrc,
+ [in] UINT uBufLen,
+ [in] UINT uFlag,
+ [out] CANDIDATELIST *pDst,
+ [out] UINT *puCopied);
+
+ HRESULT GetConversionStatus(
+ [in] HIMC hIMC,
+ [out] DWORD *pfdwConversion,
+ [out] DWORD *pfdwSentence);
+
+ HRESULT GetDefaultIMEWnd(
+ [in] HWND hWnd,
+ [out] HWND *phDefWnd);
+
+ HRESULT GetDescriptionA(
+ [in] HKL hKL,
+ [in] UINT uBufLen,
+ [out] LPSTR szDescription,
+ [out] UINT *puCopied);
+
+ HRESULT GetDescriptionW(
+ [in] HKL hKL,
+ [in] UINT uBufLen,
+ [out] LPWSTR szDescription,
+ [out] UINT *puCopied);
+
+ HRESULT GetGuideLineA(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] DWORD dwBufLen,
+ [out] LPSTR pBuf,
+ [out] DWORD *pdwResult);
+
+ HRESULT GetGuideLineW(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] DWORD dwBufLen,
+ [out] LPWSTR pBuf,
+ [out] DWORD *pdwResult);
+
+ HRESULT GetIMEFileNameA(
+ [in] HKL hKL,
+ [in] UINT uBufLen,
+ [out] LPSTR szFileName,
+ [out] UINT *puCopied);
+
+ HRESULT GetIMEFileNameW(
+ [in] HKL hKL,
+ [in] UINT uBufLen,
+ [out] LPWSTR szFileName,
+ [out] UINT *puCopied);
+
+ HRESULT GetOpenStatus(
+ [in] HIMC hIMC);
+
+ HRESULT GetProperty(
+ [in] HKL hKL,
+ [in] DWORD fdwIndex,
+ [out] DWORD *pdwProperty);
+
+ HRESULT GetRegisterWordStyleA(
+ [in] HKL hKL,
+ [in] UINT nItem,
+ [out] STYLEBUFA *pStyleBuf,
+ [out] UINT *puCopied);
+
+ HRESULT GetRegisterWordStyleW(
+ [in] HKL hKL,
+ [in] UINT nItem,
+ [out] STYLEBUFW *pStyleBuf,
+ [out] UINT *puCopied);
+
+ HRESULT GetStatusWindowPos(
+ [in] HIMC hIMC,
+ [out] POINT *pptPos);
+
+ HRESULT GetVirtualKey(
+ [in] HWND hWnd,
+ [out] UINT *puVirtualKey);
+
+ HRESULT InstallIMEA(
+ [in] LPSTR szIMEFileName,
+ [in] LPSTR szLayoutText,
+ [out] HKL *phKL);
+
+ HRESULT InstallIMEW(
+ [in] LPWSTR szIMEFileName,
+ [in] LPWSTR szLayoutText,
+ [out] HKL *phKL);
+
+ HRESULT IsIME(
+ [in] HKL hKL);
+
+ HRESULT IsUIMessageA(
+ [in] HWND hWndIME,
+ [in] UINT msg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT IsUIMessageW(
+ [in] HWND hWndIME,
+ [in] UINT msg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT NotifyIME(
+ [in] HIMC hIMC,
+ [in] DWORD dwAction,
+ [in] DWORD dwIndex,
+ [in] DWORD dwValue);
+
+ HRESULT RegisterWordA(
+ [in] HKL hKL,
+ [in] LPSTR szReading,
+ [in] DWORD dwStyle,
+ [in] LPSTR szRegister);
+
+ HRESULT RegisterWordW(
+ [in] HKL hKL,
+ [in] LPWSTR szReading,
+ [in] DWORD dwStyle,
+ [in] LPWSTR szRegister);
+
+ HRESULT ReleaseContext(
+ [in] HWND hWnd,
+ [in] HIMC hIMC);
+
+ HRESULT SetCandidateWindow(
+ [in] HIMC hIMC,
+ [in] CANDIDATEFORM *pCandidate);
+
+ HRESULT SetCompositionFontA(
+ [in] HIMC hIMC,
+ [in] LOGFONTA *plf);
+
+ HRESULT SetCompositionFontW(
+ [in] HIMC hIMC,
+ [in] LOGFONTW *plf);
+
+ HRESULT SetCompositionStringA(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] LPVOID pComp,
+ [in] DWORD dwCompLen,
+ [in] LPVOID pRead,
+ [in] DWORD dwReadLen);
+
+ HRESULT SetCompositionStringW(
+ [in] HIMC hIMC,
+ [in] DWORD dwIndex,
+ [in] LPVOID pComp,
+ [in] DWORD dwCompLen,
+ [in] LPVOID pRead,
+ [in] DWORD dwReadLen);
+
+ HRESULT SetCompositionWindow(
+ [in] HIMC hIMC,
+ [in] COMPOSITIONFORM *pCompForm);
+
+ HRESULT SetConversionStatus(
+ [in] HIMC hIMC,
+ [in] DWORD fdwConversion,
+ [in] DWORD fdwSentence);
+
+ HRESULT SetOpenStatus(
+ [in] HIMC hIMC,
+ [in] BOOL fOpen);
+
+ HRESULT SetStatusWindowPos(
+ [in] HIMC hIMC,
+ [in] POINT *pptPos);
+
+ HRESULT SimulateHotKey(
+ [in] HWND hwnd,
+ [in] DWORD dwHotKeyID);
+
+ HRESULT UnregisterWordA(
+ [in] HKL hKL,
+ [in] LPSTR szReading,
+ [in] DWORD dwStyle,
+ [in] LPSTR szUnregister);
+
+ HRESULT UnregisterWordW(
+ [in] HKL hKL,
+ [in] LPWSTR szReading,
+ [in] DWORD dwStyle,
+ [in] LPWSTR szUnregister);
+
+ HRESULT Activate(
+ [in] BOOL fRestoreLayout);
+
+ HRESULT Deactivate();
+
+ HRESULT OnDefWindowProc(
+ [in] HWND hWnd,
+ [in] UINT Msg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] LRESULT *plResult);
+
+ HRESULT FilterClientWindows(
+ [in] ATOM *aaClassList,
+ [in] UINT uSize);
+
+ HRESULT GetCodePageA(
+ [in] HKL hKL,
+ [out] UINT *uCodePage);
+
+ HRESULT GetLangId(
+ [in] HKL hKL,
+ [out] LANGID *plid);
+
+ HRESULT AssociateContextEx(
+ [in] HWND hWnd,
+ [in] HIMC hIMC,
+ [in] DWORD dwFlags);
+
+ HRESULT DisableIME(
+ [in] DWORD idThread);
+
+ HRESULT GetImeMenuItemsA(
+ [in] HIMC hIMC,
+ [in] DWORD dwFlags,
+ [in] DWORD dwType,
+ [in] IMEMENUITEMINFOA *pImeParentMenu,
+ [out] IMEMENUITEMINFOA *pImeMenu,
+ [in] DWORD dwSize,
+ [out] DWORD *pdwResult);
+
+ HRESULT GetImeMenuItemsW(
+ [in] HIMC hIMC,
+ [in] DWORD dwFlags,
+ [in] DWORD dwType,
+ [in] IMEMENUITEMINFOW *pImeParentMenu,
+ [out] IMEMENUITEMINFOW *pImeMenu,
+ [in] DWORD dwSize,
+ [out] DWORD *pdwResult);
+
+ HRESULT EnumInputContext(
+ [in] DWORD idThread,
+ [out] IEnumInputContext **ppEnum);
+}
+
+[
+ uuid(4955dd33-b159-11d0-8fcf-00aa006bcc59)
+]
+coclass CActiveIMM
+{
+ [default] interface IActiveIMMApp;
+ /* interface IActiveIMMIME; */
+ /* interface IActiveIMMRegistrar; */
+ /* interface IActiveIMMMessagePumpOwner; */
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h
new file mode 100644
index 00000000..ed40997f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinput.h
@@ -0,0 +1,2511 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DINPUT_INCLUDED__
+#define __DINPUT_INCLUDED__
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef DIRECTINPUT_VERSION
+#define DIRECTINPUT_VERSION 0x0800
+#endif
+
+/* Classes */
+DEFINE_GUID(CLSID_DirectInput, 0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+DEFINE_GUID(CLSID_DirectInput8, 0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(CLSID_DirectInputDevice8, 0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+/* Interfaces */
+DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
+DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
+DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDevice2A, 0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDevice2W, 0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(IID_IDirectInputDevice7A, 0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInputDevice7W, 0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);
+DEFINE_GUID(IID_IDirectInputDevice8A, 0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);
+DEFINE_GUID(IID_IDirectInputDevice8W, 0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);
+DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+
+/* Predefined object types */
+DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_RxAxis,0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_RyAxis,0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_RzAxis,0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Slider,0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Button,0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Key, 0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_POV, 0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Unknown,0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+/* Predefined product GUIDs */
+DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysKeyboard, 0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Joystick, 0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysMouseEm2, 0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
+
+/* predefined forcefeedback effects */
+DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_RampForce, 0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Square, 0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Sine, 0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Triangle, 0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_SawtoothUp, 0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_SawtoothDown, 0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Spring, 0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Damper, 0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Inertia, 0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_Friction, 0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
+
+typedef struct IDirectInputA *LPDIRECTINPUTA;
+typedef struct IDirectInputW *LPDIRECTINPUTW;
+typedef struct IDirectInput2A *LPDIRECTINPUT2A;
+typedef struct IDirectInput2W *LPDIRECTINPUT2W;
+typedef struct IDirectInput7A *LPDIRECTINPUT7A;
+typedef struct IDirectInput7W *LPDIRECTINPUT7W;
+typedef struct IDirectInput8A *LPDIRECTINPUT8A;
+typedef struct IDirectInput8W *LPDIRECTINPUT8W;
+typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;
+typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;
+typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;
+typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;
+typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;
+typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;
+typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A;
+typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W;
+typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;
+typedef struct SysKeyboardA *LPSYSKEYBOARDA;
+typedef struct SysMouseA *LPSYSMOUSEA;
+
+#define IID_IDirectInput WINELIB_NAME_AW(IID_IDirectInput)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT)
+#define IID_IDirectInput2 WINELIB_NAME_AW(IID_IDirectInput2)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT2)
+#define IID_IDirectInput7 WINELIB_NAME_AW(IID_IDirectInput7)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT7)
+#define IID_IDirectInput8 WINELIB_NAME_AW(IID_IDirectInput8)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT8)
+#define IID_IDirectInputDevice WINELIB_NAME_AW(IID_IDirectInputDevice)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE)
+#define IID_IDirectInputDevice2 WINELIB_NAME_AW(IID_IDirectInputDevice2)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE2)
+#define IID_IDirectInputDevice7 WINELIB_NAME_AW(IID_IDirectInputDevice7)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE7)
+#define IID_IDirectInputDevice8 WINELIB_NAME_AW(IID_IDirectInputDevice8)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE8)
+
+#define DI_OK S_OK
+#define DI_NOTATTACHED S_FALSE
+#define DI_BUFFEROVERFLOW S_FALSE
+#define DI_PROPNOEFFECT S_FALSE
+#define DI_NOEFFECT S_FALSE
+#define DI_POLLEDDEVICE ((HRESULT)0x00000002)
+#define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003)
+#define DI_EFFECTRESTARTED ((HRESULT)0x00000004)
+#define DI_TRUNCATED ((HRESULT)0x00000008)
+#define DI_SETTINGSNOTSAVED ((HRESULT)0x0000000B)
+#define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000C)
+#define DI_WRITEPROTECT ((HRESULT)0x00000013)
+
+#define DIERR_OLDDIRECTINPUTVERSION \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
+#define DIERR_BETADIRECTINPUTVERSION \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)
+#define DIERR_BADDRIVERVER \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)
+#define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG
+#define DIERR_NOTFOUND \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
+#define DIERR_OBJECTNOTFOUND \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
+#define DIERR_INVALIDPARAM E_INVALIDARG
+#define DIERR_NOINTERFACE E_NOINTERFACE
+#define DIERR_GENERIC E_FAIL
+#define DIERR_OUTOFMEMORY E_OUTOFMEMORY
+#define DIERR_UNSUPPORTED E_NOTIMPL
+#define DIERR_NOTINITIALIZED \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)
+#define DIERR_ALREADYINITIALIZED \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)
+#define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION
+#define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED
+#define DIERR_INPUTLOST \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)
+#define DIERR_ACQUIRED \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)
+#define DIERR_NOTACQUIRED \
+ MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)
+#define DIERR_READONLY E_ACCESSDENIED
+#define DIERR_HANDLEEXISTS E_ACCESSDENIED
+#ifndef E_PENDING
+#define E_PENDING __MSABI_LONG(0x8000000A)
+#endif
+#define DIERR_INSUFFICIENTPRIVS __MSABI_LONG(0x80040200)
+#define DIERR_DEVICEFULL __MSABI_LONG(0x80040201)
+#define DIERR_MOREDATA __MSABI_LONG(0x80040202)
+#define DIERR_NOTDOWNLOADED __MSABI_LONG(0x80040203)
+#define DIERR_HASEFFECTS __MSABI_LONG(0x80040204)
+#define DIERR_NOTEXCLUSIVEACQUIRED __MSABI_LONG(0x80040205)
+#define DIERR_INCOMPLETEEFFECT __MSABI_LONG(0x80040206)
+#define DIERR_NOTBUFFERED __MSABI_LONG(0x80040207)
+#define DIERR_EFFECTPLAYING __MSABI_LONG(0x80040208)
+#define DIERR_UNPLUGGED __MSABI_LONG(0x80040209)
+#define DIERR_REPORTFULL __MSABI_LONG(0x8004020A)
+#define DIERR_MAPFILEFAIL __MSABI_LONG(0x8004020B)
+
+#define DIENUM_STOP 0
+#define DIENUM_CONTINUE 1
+
+#define DIEDFL_ALLDEVICES 0x00000000
+#define DIEDFL_ATTACHEDONLY 0x00000001
+#define DIEDFL_FORCEFEEDBACK 0x00000100
+#define DIEDFL_INCLUDEALIASES 0x00010000
+#define DIEDFL_INCLUDEPHANTOMS 0x00020000
+#define DIEDFL_INCLUDEHIDDEN 0x00040000
+
+#define DIDEVTYPE_DEVICE 1
+#define DIDEVTYPE_MOUSE 2
+#define DIDEVTYPE_KEYBOARD 3
+#define DIDEVTYPE_JOYSTICK 4
+#define DIDEVTYPE_HID 0x00010000
+
+#define DI8DEVCLASS_ALL 0
+#define DI8DEVCLASS_DEVICE 1
+#define DI8DEVCLASS_POINTER 2
+#define DI8DEVCLASS_KEYBOARD 3
+#define DI8DEVCLASS_GAMECTRL 4
+
+#define DI8DEVTYPE_DEVICE 0x11
+#define DI8DEVTYPE_MOUSE 0x12
+#define DI8DEVTYPE_KEYBOARD 0x13
+#define DI8DEVTYPE_JOYSTICK 0x14
+#define DI8DEVTYPE_GAMEPAD 0x15
+#define DI8DEVTYPE_DRIVING 0x16
+#define DI8DEVTYPE_FLIGHT 0x17
+#define DI8DEVTYPE_1STPERSON 0x18
+#define DI8DEVTYPE_DEVICECTRL 0x19
+#define DI8DEVTYPE_SCREENPOINTER 0x1A
+#define DI8DEVTYPE_REMOTE 0x1B
+#define DI8DEVTYPE_SUPPLEMENTAL 0x1C
+
+#define DIDEVTYPEMOUSE_UNKNOWN 1
+#define DIDEVTYPEMOUSE_TRADITIONAL 2
+#define DIDEVTYPEMOUSE_FINGERSTICK 3
+#define DIDEVTYPEMOUSE_TOUCHPAD 4
+#define DIDEVTYPEMOUSE_TRACKBALL 5
+
+#define DIDEVTYPEKEYBOARD_UNKNOWN 0
+#define DIDEVTYPEKEYBOARD_PCXT 1
+#define DIDEVTYPEKEYBOARD_OLIVETTI 2
+#define DIDEVTYPEKEYBOARD_PCAT 3
+#define DIDEVTYPEKEYBOARD_PCENH 4
+#define DIDEVTYPEKEYBOARD_NOKIA1050 5
+#define DIDEVTYPEKEYBOARD_NOKIA9140 6
+#define DIDEVTYPEKEYBOARD_NEC98 7
+#define DIDEVTYPEKEYBOARD_NEC98LAPTOP 8
+#define DIDEVTYPEKEYBOARD_NEC98106 9
+#define DIDEVTYPEKEYBOARD_JAPAN106 10
+#define DIDEVTYPEKEYBOARD_JAPANAX 11
+#define DIDEVTYPEKEYBOARD_J3100 12
+
+#define DIDEVTYPEJOYSTICK_UNKNOWN 1
+#define DIDEVTYPEJOYSTICK_TRADITIONAL 2
+#define DIDEVTYPEJOYSTICK_FLIGHTSTICK 3
+#define DIDEVTYPEJOYSTICK_GAMEPAD 4
+#define DIDEVTYPEJOYSTICK_RUDDER 5
+#define DIDEVTYPEJOYSTICK_WHEEL 6
+#define DIDEVTYPEJOYSTICK_HEADTRACKER 7
+
+#define DI8DEVTYPEMOUSE_UNKNOWN 1
+#define DI8DEVTYPEMOUSE_TRADITIONAL 2
+#define DI8DEVTYPEMOUSE_FINGERSTICK 3
+#define DI8DEVTYPEMOUSE_TOUCHPAD 4
+#define DI8DEVTYPEMOUSE_TRACKBALL 5
+#define DI8DEVTYPEMOUSE_ABSOLUTE 6
+
+#define DI8DEVTYPEKEYBOARD_UNKNOWN 0
+#define DI8DEVTYPEKEYBOARD_PCXT 1
+#define DI8DEVTYPEKEYBOARD_OLIVETTI 2
+#define DI8DEVTYPEKEYBOARD_PCAT 3
+#define DI8DEVTYPEKEYBOARD_PCENH 4
+#define DI8DEVTYPEKEYBOARD_NOKIA1050 5
+#define DI8DEVTYPEKEYBOARD_NOKIA9140 6
+#define DI8DEVTYPEKEYBOARD_NEC98 7
+#define DI8DEVTYPEKEYBOARD_NEC98LAPTOP 8
+#define DI8DEVTYPEKEYBOARD_NEC98106 9
+#define DI8DEVTYPEKEYBOARD_JAPAN106 10
+#define DI8DEVTYPEKEYBOARD_JAPANAX 11
+#define DI8DEVTYPEKEYBOARD_J3100 12
+
+#define DI8DEVTYPE_LIMITEDGAMESUBTYPE 1
+
+#define DI8DEVTYPEJOYSTICK_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEJOYSTICK_STANDARD 2
+
+#define DI8DEVTYPEGAMEPAD_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEGAMEPAD_STANDARD 2
+#define DI8DEVTYPEGAMEPAD_TILT 3
+
+#define DI8DEVTYPEDRIVING_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEDRIVING_COMBINEDPEDALS 2
+#define DI8DEVTYPEDRIVING_DUALPEDALS 3
+#define DI8DEVTYPEDRIVING_THREEPEDALS 4
+#define DI8DEVTYPEDRIVING_HANDHELD 5
+
+#define DI8DEVTYPEFLIGHT_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPEFLIGHT_STICK 2
+#define DI8DEVTYPEFLIGHT_YOKE 3
+#define DI8DEVTYPEFLIGHT_RC 4
+
+#define DI8DEVTYPE1STPERSON_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE
+#define DI8DEVTYPE1STPERSON_UNKNOWN 2
+#define DI8DEVTYPE1STPERSON_SIXDOF 3
+#define DI8DEVTYPE1STPERSON_SHOOTER 4
+
+#define DI8DEVTYPESCREENPTR_UNKNOWN 2
+#define DI8DEVTYPESCREENPTR_LIGHTGUN 3
+#define DI8DEVTYPESCREENPTR_LIGHTPEN 4
+#define DI8DEVTYPESCREENPTR_TOUCH 5
+
+#define DI8DEVTYPEREMOTE_UNKNOWN 2
+
+#define DI8DEVTYPEDEVICECTRL_UNKNOWN 2
+#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION 3
+#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4
+
+#define DI8DEVTYPESUPPLEMENTAL_UNKNOWN 2
+#define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER 3
+#define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER 4
+#define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER 5
+#define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE 6
+#define DI8DEVTYPESUPPLEMENTAL_SHIFTER 7
+#define DI8DEVTYPESUPPLEMENTAL_THROTTLE 8
+#define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE 9
+#define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS 10
+#define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS 11
+#define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS 12
+#define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS 13
+
+#define GET_DIDEVICE_TYPE(dwDevType) LOBYTE(dwDevType)
+#define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType)
+
+typedef struct DIDEVICEOBJECTINSTANCE_DX3A {
+ DWORD dwSize;
+ GUID guidType;
+ DWORD dwOfs;
+ DWORD dwType;
+ DWORD dwFlags;
+ CHAR tszName[MAX_PATH];
+} DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;
+typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;
+typedef struct DIDEVICEOBJECTINSTANCE_DX3W {
+ DWORD dwSize;
+ GUID guidType;
+ DWORD dwOfs;
+ DWORD dwType;
+ DWORD dwFlags;
+ WCHAR tszName[MAX_PATH];
+} DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;
+typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE_DX3)
+
+typedef struct DIDEVICEOBJECTINSTANCEA {
+ DWORD dwSize;
+ GUID guidType;
+ DWORD dwOfs;
+ DWORD dwType;
+ DWORD dwFlags;
+ CHAR tszName[MAX_PATH];
+ DWORD dwFFMaxForce;
+ DWORD dwFFForceResolution;
+ WORD wCollectionNumber;
+ WORD wDesignatorIndex;
+ WORD wUsagePage;
+ WORD wUsage;
+ DWORD dwDimension;
+ WORD wExponent;
+ WORD wReserved;
+} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;
+typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;
+
+typedef struct DIDEVICEOBJECTINSTANCEW {
+ DWORD dwSize;
+ GUID guidType;
+ DWORD dwOfs;
+ DWORD dwType;
+ DWORD dwFlags;
+ WCHAR tszName[MAX_PATH];
+ DWORD dwFFMaxForce;
+ DWORD dwFFForceResolution;
+ WORD wCollectionNumber;
+ WORD wDesignatorIndex;
+ WORD wUsagePage;
+ WORD wUsage;
+ DWORD dwDimension;
+ WORD wExponent;
+ WORD wReserved;
+} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;
+typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE)
+
+typedef struct DIDEVICEINSTANCE_DX3A {
+ DWORD dwSize;
+ GUID guidInstance;
+ GUID guidProduct;
+ DWORD dwDevType;
+ CHAR tszInstanceName[MAX_PATH];
+ CHAR tszProductName[MAX_PATH];
+} DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;
+typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;
+typedef struct DIDEVICEINSTANCE_DX3W {
+ DWORD dwSize;
+ GUID guidInstance;
+ GUID guidProduct;
+ DWORD dwDevType;
+ WCHAR tszInstanceName[MAX_PATH];
+ WCHAR tszProductName[MAX_PATH];
+} DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;
+typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE_DX3)
+
+typedef struct DIDEVICEINSTANCEA {
+ DWORD dwSize;
+ GUID guidInstance;
+ GUID guidProduct;
+ DWORD dwDevType;
+ CHAR tszInstanceName[MAX_PATH];
+ CHAR tszProductName[MAX_PATH];
+ GUID guidFFDriver;
+ WORD wUsagePage;
+ WORD wUsage;
+} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;
+typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
+
+typedef struct DIDEVICEINSTANCEW {
+ DWORD dwSize;
+ GUID guidInstance;
+ GUID guidProduct;
+ DWORD dwDevType;
+ WCHAR tszInstanceName[MAX_PATH];
+ WCHAR tszProductName[MAX_PATH];
+ GUID guidFFDriver;
+ WORD wUsagePage;
+ WORD wUsage;
+} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
+typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE)
+
+typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK)
+
+#define DIEDBS_MAPPEDPRI1 0x00000001
+#define DIEDBS_MAPPEDPRI2 0x00000002
+#define DIEDBS_RECENTDEVICE 0x00000010
+#define DIEDBS_NEWDEVICE 0x00000020
+
+#define DIEDBSFL_ATTACHEDONLY 0x00000000
+#define DIEDBSFL_THISUSER 0x00000010
+#define DIEDBSFL_FORCEFEEDBACK DIEDFL_FORCEFEEDBACK
+#define DIEDBSFL_AVAILABLEDEVICES 0x00001000
+#define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000
+#define DIEDBSFL_NONGAMINGDEVICES 0x00004000
+#define DIEDBSFL_VALID 0x00007110
+
+typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA,LPDIRECTINPUTDEVICE8A,DWORD,DWORD,LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW,LPDIRECTINPUTDEVICE8W,DWORD,DWORD,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESBYSEMANTICSCB)
+
+typedef BOOL (CALLBACK *LPDICONFIGUREDEVICESCALLBACK)(LPUNKNOWN,LPVOID);
+
+typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA,LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
+
+typedef BOOL (CALLBACK *LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
+
+#define DIK_ESCAPE 0x01
+#define DIK_1 0x02
+#define DIK_2 0x03
+#define DIK_3 0x04
+#define DIK_4 0x05
+#define DIK_5 0x06
+#define DIK_6 0x07
+#define DIK_7 0x08
+#define DIK_8 0x09
+#define DIK_9 0x0A
+#define DIK_0 0x0B
+#define DIK_MINUS 0x0C /* - on main keyboard */
+#define DIK_EQUALS 0x0D
+#define DIK_BACK 0x0E /* backspace */
+#define DIK_TAB 0x0F
+#define DIK_Q 0x10
+#define DIK_W 0x11
+#define DIK_E 0x12
+#define DIK_R 0x13
+#define DIK_T 0x14
+#define DIK_Y 0x15
+#define DIK_U 0x16
+#define DIK_I 0x17
+#define DIK_O 0x18
+#define DIK_P 0x19
+#define DIK_LBRACKET 0x1A
+#define DIK_RBRACKET 0x1B
+#define DIK_RETURN 0x1C /* Enter on main keyboard */
+#define DIK_LCONTROL 0x1D
+#define DIK_A 0x1E
+#define DIK_S 0x1F
+#define DIK_D 0x20
+#define DIK_F 0x21
+#define DIK_G 0x22
+#define DIK_H 0x23
+#define DIK_J 0x24
+#define DIK_K 0x25
+#define DIK_L 0x26
+#define DIK_SEMICOLON 0x27
+#define DIK_APOSTROPHE 0x28
+#define DIK_GRAVE 0x29 /* accent grave */
+#define DIK_LSHIFT 0x2A
+#define DIK_BACKSLASH 0x2B
+#define DIK_Z 0x2C
+#define DIK_X 0x2D
+#define DIK_C 0x2E
+#define DIK_V 0x2F
+#define DIK_B 0x30
+#define DIK_N 0x31
+#define DIK_M 0x32
+#define DIK_COMMA 0x33
+#define DIK_PERIOD 0x34 /* . on main keyboard */
+#define DIK_SLASH 0x35 /* / on main keyboard */
+#define DIK_RSHIFT 0x36
+#define DIK_MULTIPLY 0x37 /* * on numeric keypad */
+#define DIK_LMENU 0x38 /* left Alt */
+#define DIK_SPACE 0x39
+#define DIK_CAPITAL 0x3A
+#define DIK_F1 0x3B
+#define DIK_F2 0x3C
+#define DIK_F3 0x3D
+#define DIK_F4 0x3E
+#define DIK_F5 0x3F
+#define DIK_F6 0x40
+#define DIK_F7 0x41
+#define DIK_F8 0x42
+#define DIK_F9 0x43
+#define DIK_F10 0x44
+#define DIK_NUMLOCK 0x45
+#define DIK_SCROLL 0x46 /* Scroll Lock */
+#define DIK_NUMPAD7 0x47
+#define DIK_NUMPAD8 0x48
+#define DIK_NUMPAD9 0x49
+#define DIK_SUBTRACT 0x4A /* - on numeric keypad */
+#define DIK_NUMPAD4 0x4B
+#define DIK_NUMPAD5 0x4C
+#define DIK_NUMPAD6 0x4D
+#define DIK_ADD 0x4E /* + on numeric keypad */
+#define DIK_NUMPAD1 0x4F
+#define DIK_NUMPAD2 0x50
+#define DIK_NUMPAD3 0x51
+#define DIK_NUMPAD0 0x52
+#define DIK_DECIMAL 0x53 /* . on numeric keypad */
+#define DIK_F11 0x57
+#define DIK_F12 0x58
+#define DIK_F13 0x64 /* (NEC PC98) */
+#define DIK_F14 0x65 /* (NEC PC98) */
+#define DIK_F15 0x66 /* (NEC PC98) */
+#define DIK_KANA 0x70 /* (Japanese keyboard) */
+#define DIK_CONVERT 0x79 /* (Japanese keyboard) */
+#define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */
+#define DIK_YEN 0x7D /* (Japanese keyboard) */
+#define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */
+#define DIK_CIRCUMFLEX 0x90 /* (Japanese keyboard) */
+#define DIK_AT 0x91 /* (NEC PC98) */
+#define DIK_COLON 0x92 /* (NEC PC98) */
+#define DIK_UNDERLINE 0x93 /* (NEC PC98) */
+#define DIK_KANJI 0x94 /* (Japanese keyboard) */
+#define DIK_STOP 0x95 /* (NEC PC98) */
+#define DIK_AX 0x96 /* (Japan AX) */
+#define DIK_UNLABELED 0x97 /* (J3100) */
+#define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */
+#define DIK_RCONTROL 0x9D
+#define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */
+#define DIK_DIVIDE 0xB5 /* / on numeric keypad */
+#define DIK_SYSRQ 0xB7
+#define DIK_RMENU 0xB8 /* right Alt */
+#define DIK_PAUSE 0xC5 /* Pause */
+#define DIK_HOME 0xC7 /* Home on arrow keypad */
+#define DIK_UP 0xC8 /* UpArrow on arrow keypad */
+#define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */
+#define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */
+#define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */
+#define DIK_END 0xCF /* End on arrow keypad */
+#define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */
+#define DIK_NEXT 0xD1 /* PgDn on arrow keypad */
+#define DIK_INSERT 0xD2 /* Insert on arrow keypad */
+#define DIK_DELETE 0xD3 /* Delete on arrow keypad */
+#define DIK_LWIN 0xDB /* Left Windows key */
+#define DIK_RWIN 0xDC /* Right Windows key */
+#define DIK_APPS 0xDD /* AppMenu key */
+#define DIK_POWER 0xDE
+#define DIK_SLEEP 0xDF
+#define DIK_BACKSPACE DIK_BACK /* backspace */
+#define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */
+#define DIK_LALT DIK_LMENU /* left Alt */
+#define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */
+#define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */
+#define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */
+#define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */
+#define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */
+#define DIK_RALT DIK_RMENU /* right Alt */
+#define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */
+#define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */
+#define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */
+#define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */
+#define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */
+#define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */
+
+/* New DirectInput8 style keyboard constants */
+
+#define DIKEYBOARD_ESCAPE (DIK_ESCAPE | 0x81000400)
+#define DIKEYBOARD_1 (DIK_1 | 0x81000400)
+#define DIKEYBOARD_2 (DIK_2 | 0x81000400)
+#define DIKEYBOARD_3 (DIK_3 | 0x81000400)
+#define DIKEYBOARD_4 (DIK_4 | 0x81000400)
+#define DIKEYBOARD_5 (DIK_5 | 0x81000400)
+#define DIKEYBOARD_6 (DIK_6 | 0x81000400)
+#define DIKEYBOARD_7 (DIK_7 | 0x81000400)
+#define DIKEYBOARD_8 (DIK_8 | 0x81000400)
+#define DIKEYBOARD_9 (DIK_9 | 0x81000400)
+#define DIKEYBOARD_0 (DIK_0 | 0x81000400)
+#define DIKEYBOARD_MINUS (DIK_MINUS | 0x81000400)
+#define DIKEYBOARD_EQUALS (DIK_EQUALS | 0x81000400)
+#define DIKEYBOARD_BACK (DIK_BACK | 0x81000400)
+#define DIKEYBOARD_TAB (DIK_TAB | 0x81000400)
+#define DIKEYBOARD_Q (DIK_Q | 0x81000400)
+#define DIKEYBOARD_W (DIK_W | 0x81000400)
+#define DIKEYBOARD_E (DIK_E | 0x81000400)
+#define DIKEYBOARD_R (DIK_R | 0x81000400)
+#define DIKEYBOARD_T (DIK_T | 0x81000400)
+#define DIKEYBOARD_Y (DIK_Y | 0x81000400)
+#define DIKEYBOARD_U (DIK_U | 0x81000400)
+#define DIKEYBOARD_I (DIK_I | 0x81000400)
+#define DIKEYBOARD_O (DIK_O | 0x81000400)
+#define DIKEYBOARD_P (DIK_P | 0x81000400)
+#define DIKEYBOARD_LBRACKET (DIK_LBRACKET | 0x81000400)
+#define DIKEYBOARD_RBRACKET (DIK_RBRACKET | 0x81000400)
+#define DIKEYBOARD_RETURN (DIK_RETURN | 0x81000400)
+#define DIKEYBOARD_LCONTROL (DIK_LCONTROL | 0x81000400)
+#define DIKEYBOARD_A (DIK_A | 0x81000400)
+#define DIKEYBOARD_S (DIK_S | 0x81000400)
+#define DIKEYBOARD_D (DIK_D | 0x81000400)
+#define DIKEYBOARD_F (DIK_F | 0x81000400)
+#define DIKEYBOARD_G (DIK_G | 0x81000400)
+#define DIKEYBOARD_H (DIK_H | 0x81000400)
+#define DIKEYBOARD_J (DIK_J | 0x81000400)
+#define DIKEYBOARD_K (DIK_K | 0x81000400)
+#define DIKEYBOARD_L (DIK_L | 0x81000400)
+#define DIKEYBOARD_SEMICOLON (DIK_SEMICOLON | 0x81000400)
+#define DIKEYBOARD_APOSTROPHE (DIK_APOSTROPHE | 0x81000400)
+#define DIKEYBOARD_GRAVE (DIK_GRAVE | 0x81000400)
+#define DIKEYBOARD_LSHIFT (DIK_LSHIFT | 0x81000400)
+#define DIKEYBOARD_BACKSLASH (DIK_BACKSLASH | 0x81000400)
+#define DIKEYBOARD_Z (DIK_Z | 0x81000400)
+#define DIKEYBOARD_X (DIK_X | 0x81000400)
+#define DIKEYBOARD_C (DIK_C | 0x81000400)
+#define DIKEYBOARD_V (DIK_V | 0x81000400)
+#define DIKEYBOARD_B (DIK_B | 0x81000400)
+#define DIKEYBOARD_N (DIK_N | 0x81000400)
+#define DIKEYBOARD_M (DIK_M | 0x81000400)
+#define DIKEYBOARD_COMMA (DIK_COMMA | 0x81000400)
+#define DIKEYBOARD_PERIOD (DIK_PERIOD | 0x81000400)
+#define DIKEYBOARD_SLASH (DIK_SLASH | 0x81000400)
+#define DIKEYBOARD_RSHIFT (DIK_RSHIFT | 0x81000400)
+#define DIKEYBOARD_MULTIPLY (DIK_MULTIPLY | 0x81000400)
+#define DIKEYBOARD_LMENU (DIK_LMENU | 0x81000400)
+#define DIKEYBOARD_SPACE (DIK_SPACE | 0x81000400)
+#define DIKEYBOARD_CAPITAL (DIK_CAPITAL | 0x81000400)
+#define DIKEYBOARD_F1 (DIK_F1 | 0x81000400)
+#define DIKEYBOARD_F2 (DIK_F2 | 0x81000400)
+#define DIKEYBOARD_F3 (DIK_F3 | 0x81000400)
+#define DIKEYBOARD_F4 (DIK_F4 | 0x81000400)
+#define DIKEYBOARD_F5 (DIK_F5 | 0x81000400)
+#define DIKEYBOARD_F6 (DIK_F6 | 0x81000400)
+#define DIKEYBOARD_F7 (DIK_F7 | 0x81000400)
+#define DIKEYBOARD_F8 (DIK_F8 | 0x81000400)
+#define DIKEYBOARD_F9 (DIK_F9 | 0x81000400)
+#define DIKEYBOARD_F10 (DIK_F10 | 0x81000400)
+#define DIKEYBOARD_NUMLOCK (DIK_NUMLOCK | 0x81000400)
+#define DIKEYBOARD_SCROLL (DIK_SCROLL | 0x81000400)
+#define DIKEYBOARD_NUMPAD7 (DIK_NUMPAD7 | 0x81000400)
+#define DIKEYBOARD_NUMPAD8 (DIK_NUMPAD8 | 0x81000400)
+#define DIKEYBOARD_NUMPAD9 (DIK_NUMPAD9 | 0x81000400)
+#define DIKEYBOARD_SUBTRACT (DIK_SUBTRACT | 0x81000400)
+#define DIKEYBOARD_NUMPAD4 (DIK_NUMPAD4 | 0x81000400)
+#define DIKEYBOARD_NUMPAD5 (DIK_NUMPAD5 | 0x81000400)
+#define DIKEYBOARD_NUMPAD6 (DIK_NUMPAD6 | 0x81000400)
+#define DIKEYBOARD_ADD (DIK_ADD | 0x81000400)
+#define DIKEYBOARD_NUMPAD1 (DIK_NUMPAD1 | 0x81000400)
+#define DIKEYBOARD_NUMPAD2 (DIK_NUMPAD2 | 0x81000400)
+#define DIKEYBOARD_NUMPAD3 (DIK_NUMPAD3 | 0x81000400)
+#define DIKEYBOARD_NUMPAD0 (DIK_NUMPAD0 | 0x81000400)
+#define DIKEYBOARD_DECIMAL (DIK_DECIMAL | 0x81000400)
+#define DIKEYBOARD_F11 (DIK_F11 | 0x81000400)
+#define DIKEYBOARD_F12 (DIK_F12 | 0x81000400)
+#define DIKEYBOARD_F13 (DIK_F13 | 0x81000400)
+#define DIKEYBOARD_F14 (DIK_F14 | 0x81000400)
+#define DIKEYBOARD_F15 (DIK_F15 | 0x81000400)
+#define DIKEYBOARD_KANA (DIK_KANA | 0x81000400)
+#define DIKEYBOARD_CONVERT (DIK_CONVERT | 0x81000400)
+#define DIKEYBOARD_NOCONVERT (DIK_NOCONVERT | 0x81000400)
+#define DIKEYBOARD_YEN (DIK_YEN | 0x81000400)
+#define DIKEYBOARD_NUMPADEQUALS (DIK_NUMPADEQUALS | 0x81000400)
+#define DIKEYBOARD_CIRCUMFLEX (DIK_CIRCUMFLEX | 0x81000400)
+#define DIKEYBOARD_AT (DIK_AT | 0x81000400)
+#define DIKEYBOARD_COLON (DIK_COLON | 0x81000400)
+#define DIKEYBOARD_UNDERLINE (DIK_UNDERLINE | 0x81000400)
+#define DIKEYBOARD_KANJI (DIK_KANJI | 0x81000400)
+#define DIKEYBOARD_STOP (DIK_STOP | 0x81000400)
+#define DIKEYBOARD_AX (DIK_AX | 0x81000400)
+#define DIKEYBOARD_UNLABELED (DIK_UNLABELED | 0x81000400)
+#define DIKEYBOARD_NUMPADENTER (DIK_NUMPADENTER | 0x81000400)
+#define DIKEYBOARD_RCONTROL (DIK_RCONTROL | 0x81000400)
+#define DIKEYBOARD_NUMPADCOMMA (DIK_NUMPADCOMMA | 0x81000400)
+#define DIKEYBOARD_DIVIDE (DIK_DIVIDE | 0x81000400)
+#define DIKEYBOARD_SYSRQ (DIK_SYSRQ | 0x81000400)
+#define DIKEYBOARD_RMENU (DIK_RMENU | 0x81000400)
+#define DIKEYBOARD_PAUSE (DIK_PAUSE | 0x81000400)
+#define DIKEYBOARD_HOME (DIK_HOME | 0x81000400)
+#define DIKEYBOARD_UP (DIK_UP | 0x81000400)
+#define DIKEYBOARD_PRIOR (DIK_PRIOR | 0x81000400)
+#define DIKEYBOARD_LEFT (DIK_LEFT | 0x81000400)
+#define DIKEYBOARD_RIGHT (DIK_RIGHT | 0x81000400)
+#define DIKEYBOARD_END (DIK_END | 0x81000400)
+#define DIKEYBOARD_DOWN (DIK_DOWN | 0x81000400)
+#define DIKEYBOARD_NEXT (DIK_NEXT | 0x81000400)
+#define DIKEYBOARD_INSERT (DIK_INSERT | 0x81000400)
+#define DIKEYBOARD_DELETE (DIK_DELETE | 0x81000400)
+#define DIKEYBOARD_LWIN (DIK_LWIN | 0x81000400)
+#define DIKEYBOARD_RWIN (DIK_RWIN | 0x81000400)
+#define DIKEYBOARD_APPS (DIK_APPS | 0x81000400)
+#define DIKEYBOARD_POWER (DIK_POWER | 0x81000400)
+#define DIKEYBOARD_SLEEP (DIK_SLEEP | 0x81000400)
+#define DIKEYBOARD_BACKSPACE (DIK_BACKSPACE | 0x81000400)
+#define DIKEYBOARD_NUMPADSTAR (DIK_NUMPADSTAR | 0x81000400)
+#define DIKEYBOARD_LALT (DIK_LALT | 0x81000400)
+#define DIKEYBOARD_CAPSLOCK (DIK_CAPSLOCK | 0x81000400)
+#define DIKEYBOARD_NUMPADMINUS (DIK_NUMPADMINUS | 0x81000400)
+#define DIKEYBOARD_NUMPADPLUS (DIK_NUMPADPLUS | 0x81000400)
+#define DIKEYBOARD_NUMPADPERIOD (DIK_NUMPADPERIOD | 0x81000400)
+#define DIKEYBOARD_NUMPADSLASH (DIK_NUMPADSLASH | 0x81000400)
+#define DIKEYBOARD_RALT (DIK_RALT | 0x81000400)
+#define DIKEYBOARD_UPARROW (DIK_UPARROW | 0x81000400)
+#define DIKEYBOARD_PGUP (DIK_PGUP | 0x81000400)
+#define DIKEYBOARD_LEFTARROW (DIK_LEFTARROW | 0x81000400)
+#define DIKEYBOARD_RIGHTARROW (DIK_RIGHTARROW | 0x81000400)
+#define DIKEYBOARD_DOWNARROW (DIK_DOWNARROW | 0x81000400)
+#define DIKEYBOARD_PGDN (DIK_PGDN | 0x81000400)
+
+#define DIDFT_ALL 0x00000000
+#define DIDFT_RELAXIS 0x00000001
+#define DIDFT_ABSAXIS 0x00000002
+#define DIDFT_AXIS 0x00000003
+#define DIDFT_PSHBUTTON 0x00000004
+#define DIDFT_TGLBUTTON 0x00000008
+#define DIDFT_BUTTON 0x0000000C
+#define DIDFT_POV 0x00000010
+#define DIDFT_COLLECTION 0x00000040
+#define DIDFT_NODATA 0x00000080
+#define DIDFT_ANYINSTANCE 0x00FFFF00
+#define DIDFT_INSTANCEMASK DIDFT_ANYINSTANCE
+#define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8)
+#define DIDFT_GETTYPE(n) LOBYTE(n)
+#define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8)
+#define DIDFT_FFACTUATOR 0x01000000
+#define DIDFT_FFEFFECTTRIGGER 0x02000000
+#define DIDFT_OUTPUT 0x10000000
+#define DIDFT_VENDORDEFINED 0x04000000
+#define DIDFT_ALIAS 0x08000000
+#ifndef DIDFT_OPTIONAL
+#define DIDFT_OPTIONAL 0x80000000
+#endif
+#define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8)
+#define DIDFT_NOCOLLECTION 0x00FFFF00
+#define DIDF_ABSAXIS 0x00000001
+#define DIDF_RELAXIS 0x00000002
+
+#define DIGDD_PEEK 0x00000001
+
+#define DISEQUENCE_COMPARE(dwSq1,cmp,dwSq2) ((int)((dwSq1) - (dwSq2)) cmp 0)
+
+typedef struct DIDEVICEOBJECTDATA_DX3 {
+ DWORD dwOfs;
+ DWORD dwData;
+ DWORD dwTimeStamp;
+ DWORD dwSequence;
+} DIDEVICEOBJECTDATA_DX3,*LPDIDEVICEOBJECTDATA_DX3;
+typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX3;
+
+typedef struct DIDEVICEOBJECTDATA {
+ DWORD dwOfs;
+ DWORD dwData;
+ DWORD dwTimeStamp;
+ DWORD dwSequence;
+ UINT_PTR uAppData;
+} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
+typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;
+
+typedef struct _DIOBJECTDATAFORMAT {
+ const GUID *pguid;
+ DWORD dwOfs;
+ DWORD dwType;
+ DWORD dwFlags;
+} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;
+typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;
+
+typedef struct _DIDATAFORMAT {
+ DWORD dwSize;
+ DWORD dwObjSize;
+ DWORD dwFlags;
+ DWORD dwDataSize;
+ DWORD dwNumObjs;
+ LPDIOBJECTDATAFORMAT rgodf;
+} DIDATAFORMAT, *LPDIDATAFORMAT;
+typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
+
+#define DIDOI_FFACTUATOR 0x00000001
+#define DIDOI_FFEFFECTTRIGGER 0x00000002
+#define DIDOI_POLLED 0x00008000
+#define DIDOI_ASPECTPOSITION 0x00000100
+#define DIDOI_ASPECTVELOCITY 0x00000200
+#define DIDOI_ASPECTACCEL 0x00000300
+#define DIDOI_ASPECTFORCE 0x00000400
+#define DIDOI_ASPECTMASK 0x00000F00
+#define DIDOI_GUIDISUSAGE 0x00010000
+
+typedef struct DIPROPHEADER {
+ DWORD dwSize;
+ DWORD dwHeaderSize;
+ DWORD dwObj;
+ DWORD dwHow;
+} DIPROPHEADER,*LPDIPROPHEADER;
+typedef const DIPROPHEADER *LPCDIPROPHEADER;
+
+#define DIPH_DEVICE 0
+#define DIPH_BYOFFSET 1
+#define DIPH_BYID 2
+#define DIPH_BYUSAGE 3
+
+#define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage)
+
+typedef struct DIPROPDWORD {
+ DIPROPHEADER diph;
+ DWORD dwData;
+} DIPROPDWORD, *LPDIPROPDWORD;
+typedef const DIPROPDWORD *LPCDIPROPDWORD;
+
+typedef struct DIPROPRANGE {
+ DIPROPHEADER diph;
+ LONG lMin;
+ LONG lMax;
+} DIPROPRANGE, *LPDIPROPRANGE;
+typedef const DIPROPRANGE *LPCDIPROPRANGE;
+
+#define DIPROPRANGE_NOMIN ((LONG)0x80000000)
+#define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF)
+
+typedef struct DIPROPCAL {
+ DIPROPHEADER diph;
+ LONG lMin;
+ LONG lCenter;
+ LONG lMax;
+} DIPROPCAL, *LPDIPROPCAL;
+typedef const DIPROPCAL *LPCDIPROPCAL;
+
+typedef struct DIPROPGUIDANDPATH {
+ DIPROPHEADER diph;
+ GUID guidClass;
+ WCHAR wszPath[MAX_PATH];
+} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;
+typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
+
+typedef struct DIPROPSTRING {
+ DIPROPHEADER diph;
+ WCHAR wsz[MAX_PATH];
+} DIPROPSTRING, *LPDIPROPSTRING;
+typedef const DIPROPSTRING *LPCDIPROPSTRING;
+
+/* special property GUIDs */
+#ifdef __cplusplus
+#define MAKEDIPROP(prop) (*(const GUID *)(prop))
+#else
+#define MAKEDIPROP(prop) ((REFGUID)(prop))
+#endif
+#define DIPROP_BUFFERSIZE MAKEDIPROP(1)
+#define DIPROP_AXISMODE MAKEDIPROP(2)
+
+#define DIPROPAXISMODE_ABS 0
+#define DIPROPAXISMODE_REL 1
+
+#define DIPROP_GRANULARITY MAKEDIPROP(3)
+#define DIPROP_RANGE MAKEDIPROP(4)
+#define DIPROP_DEADZONE MAKEDIPROP(5)
+#define DIPROP_SATURATION MAKEDIPROP(6)
+#define DIPROP_FFGAIN MAKEDIPROP(7)
+#define DIPROP_FFLOAD MAKEDIPROP(8)
+#define DIPROP_AUTOCENTER MAKEDIPROP(9)
+
+#define DIPROPAUTOCENTER_OFF 0
+#define DIPROPAUTOCENTER_ON 1
+
+#define DIPROP_CALIBRATIONMODE MAKEDIPROP(10)
+
+#define DIPROPCALIBRATIONMODE_COOKED 0
+#define DIPROPCALIBRATIONMODE_RAW 1
+
+#define DIPROP_CALIBRATION MAKEDIPROP(11)
+#define DIPROP_GUIDANDPATH MAKEDIPROP(12)
+
+#define DIPROP_INSTANCENAME MAKEDIPROP(13)
+#define DIPROP_JOYSTICKID MAKEDIPROP(15)
+#define DIPROP_KEYNAME MAKEDIPROP(20)
+#define DIPROP_VIDPID MAKEDIPROP(24)
+
+#define DIPROP_KEYNAME MAKEDIPROP(20)
+#define DIPROP_CPOINTS MAKEDIPROP(21)
+#define DIPROP_APPDATA MAKEDIPROP(22)
+#define DIPROP_SCANCODE MAKEDIPROP(23)
+#define DIPROP_VIDPID MAKEDIPROP(24)
+#define DIPROP_USERNAME MAKEDIPROP(25)
+#define DIPROP_TYPENAME MAKEDIPROP(26)
+
+typedef struct DIDEVCAPS_DX3 {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDevType;
+ DWORD dwAxes;
+ DWORD dwButtons;
+ DWORD dwPOVs;
+} DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;
+
+typedef struct DIDEVCAPS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDevType;
+ DWORD dwAxes;
+ DWORD dwButtons;
+ DWORD dwPOVs;
+ DWORD dwFFSamplePeriod;
+ DWORD dwFFMinTimeResolution;
+ DWORD dwFirmwareRevision;
+ DWORD dwHardwareRevision;
+ DWORD dwFFDriverVersion;
+} DIDEVCAPS,*LPDIDEVCAPS;
+
+#define DIDC_ATTACHED 0x00000001
+#define DIDC_POLLEDDEVICE 0x00000002
+#define DIDC_EMULATED 0x00000004
+#define DIDC_POLLEDDATAFORMAT 0x00000008
+#define DIDC_FORCEFEEDBACK 0x00000100
+#define DIDC_FFATTACK 0x00000200
+#define DIDC_FFFADE 0x00000400
+#define DIDC_SATURATION 0x00000800
+#define DIDC_POSNEGCOEFFICIENTS 0x00001000
+#define DIDC_POSNEGSATURATION 0x00002000
+#define DIDC_DEADBAND 0x00004000
+#define DIDC_STARTDELAY 0x00008000
+#define DIDC_ALIAS 0x00010000
+#define DIDC_PHANTOM 0x00020000
+#define DIDC_HIDDEN 0x00040000
+
+
+/* SetCooperativeLevel dwFlags */
+#define DISCL_EXCLUSIVE 0x00000001
+#define DISCL_NONEXCLUSIVE 0x00000002
+#define DISCL_FOREGROUND 0x00000004
+#define DISCL_BACKGROUND 0x00000008
+#define DISCL_NOWINKEY 0x00000010
+
+/* Device FF flags */
+#define DISFFC_RESET 0x00000001
+#define DISFFC_STOPALL 0x00000002
+#define DISFFC_PAUSE 0x00000004
+#define DISFFC_CONTINUE 0x00000008
+#define DISFFC_SETACTUATORSON 0x00000010
+#define DISFFC_SETACTUATORSOFF 0x00000020
+
+#define DIGFFS_EMPTY 0x00000001
+#define DIGFFS_STOPPED 0x00000002
+#define DIGFFS_PAUSED 0x00000004
+#define DIGFFS_ACTUATORSON 0x00000010
+#define DIGFFS_ACTUATORSOFF 0x00000020
+#define DIGFFS_POWERON 0x00000040
+#define DIGFFS_POWEROFF 0x00000080
+#define DIGFFS_SAFETYSWITCHON 0x00000100
+#define DIGFFS_SAFETYSWITCHOFF 0x00000200
+#define DIGFFS_USERFFSWITCHON 0x00000400
+#define DIGFFS_USERFFSWITCHOFF 0x00000800
+#define DIGFFS_DEVICELOST 0x80000000
+
+/* Effect flags */
+#define DIEFT_ALL 0x00000000
+
+#define DIEFT_CONSTANTFORCE 0x00000001
+#define DIEFT_RAMPFORCE 0x00000002
+#define DIEFT_PERIODIC 0x00000003
+#define DIEFT_CONDITION 0x00000004
+#define DIEFT_CUSTOMFORCE 0x00000005
+#define DIEFT_HARDWARE 0x000000FF
+#define DIEFT_FFATTACK 0x00000200
+#define DIEFT_FFFADE 0x00000400
+#define DIEFT_SATURATION 0x00000800
+#define DIEFT_POSNEGCOEFFICIENTS 0x00001000
+#define DIEFT_POSNEGSATURATION 0x00002000
+#define DIEFT_DEADBAND 0x00004000
+#define DIEFT_STARTDELAY 0x00008000
+#define DIEFT_GETTYPE(n) LOBYTE(n)
+
+#define DIEFF_OBJECTIDS 0x00000001
+#define DIEFF_OBJECTOFFSETS 0x00000002
+#define DIEFF_CARTESIAN 0x00000010
+#define DIEFF_POLAR 0x00000020
+#define DIEFF_SPHERICAL 0x00000040
+
+#define DIEP_DURATION 0x00000001
+#define DIEP_SAMPLEPERIOD 0x00000002
+#define DIEP_GAIN 0x00000004
+#define DIEP_TRIGGERBUTTON 0x00000008
+#define DIEP_TRIGGERREPEATINTERVAL 0x00000010
+#define DIEP_AXES 0x00000020
+#define DIEP_DIRECTION 0x00000040
+#define DIEP_ENVELOPE 0x00000080
+#define DIEP_TYPESPECIFICPARAMS 0x00000100
+#define DIEP_STARTDELAY 0x00000200
+#define DIEP_ALLPARAMS_DX5 0x000001FF
+#define DIEP_ALLPARAMS 0x000003FF
+#define DIEP_START 0x20000000
+#define DIEP_NORESTART 0x40000000
+#define DIEP_NODOWNLOAD 0x80000000
+#define DIEB_NOTRIGGER 0xFFFFFFFF
+
+#define DIES_SOLO 0x00000001
+#define DIES_NODOWNLOAD 0x80000000
+
+#define DIEGES_PLAYING 0x00000001
+#define DIEGES_EMULATED 0x00000002
+
+#define DI_DEGREES 100
+#define DI_FFNOMINALMAX 10000
+#define DI_SECONDS 1000000
+
+typedef struct DICONSTANTFORCE {
+ LONG lMagnitude;
+} DICONSTANTFORCE, *LPDICONSTANTFORCE;
+typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;
+
+typedef struct DIRAMPFORCE {
+ LONG lStart;
+ LONG lEnd;
+} DIRAMPFORCE, *LPDIRAMPFORCE;
+typedef const DIRAMPFORCE *LPCDIRAMPFORCE;
+
+typedef struct DIPERIODIC {
+ DWORD dwMagnitude;
+ LONG lOffset;
+ DWORD dwPhase;
+ DWORD dwPeriod;
+} DIPERIODIC, *LPDIPERIODIC;
+typedef const DIPERIODIC *LPCDIPERIODIC;
+
+typedef struct DICONDITION {
+ LONG lOffset;
+ LONG lPositiveCoefficient;
+ LONG lNegativeCoefficient;
+ DWORD dwPositiveSaturation;
+ DWORD dwNegativeSaturation;
+ LONG lDeadBand;
+} DICONDITION, *LPDICONDITION;
+typedef const DICONDITION *LPCDICONDITION;
+
+typedef struct DICUSTOMFORCE {
+ DWORD cChannels;
+ DWORD dwSamplePeriod;
+ DWORD cSamples;
+ LPLONG rglForceData;
+} DICUSTOMFORCE, *LPDICUSTOMFORCE;
+typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;
+
+typedef struct DIENVELOPE {
+ DWORD dwSize;
+ DWORD dwAttackLevel;
+ DWORD dwAttackTime;
+ DWORD dwFadeLevel;
+ DWORD dwFadeTime;
+} DIENVELOPE, *LPDIENVELOPE;
+typedef const DIENVELOPE *LPCDIENVELOPE;
+
+typedef struct DIEFFECT_DX5 {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDuration;
+ DWORD dwSamplePeriod;
+ DWORD dwGain;
+ DWORD dwTriggerButton;
+ DWORD dwTriggerRepeatInterval;
+ DWORD cAxes;
+ LPDWORD rgdwAxes;
+ LPLONG rglDirection;
+ LPDIENVELOPE lpEnvelope;
+ DWORD cbTypeSpecificParams;
+ LPVOID lpvTypeSpecificParams;
+} DIEFFECT_DX5, *LPDIEFFECT_DX5;
+typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;
+
+typedef struct DIEFFECT {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDuration;
+ DWORD dwSamplePeriod;
+ DWORD dwGain;
+ DWORD dwTriggerButton;
+ DWORD dwTriggerRepeatInterval;
+ DWORD cAxes;
+ LPDWORD rgdwAxes;
+ LPLONG rglDirection;
+ LPDIENVELOPE lpEnvelope;
+ DWORD cbTypeSpecificParams;
+ LPVOID lpvTypeSpecificParams;
+ DWORD dwStartDelay;
+} DIEFFECT, *LPDIEFFECT;
+typedef const DIEFFECT *LPCDIEFFECT;
+typedef DIEFFECT DIEFFECT_DX6;
+typedef LPDIEFFECT LPDIEFFECT_DX6;
+
+typedef struct DIEFFECTINFOA {
+ DWORD dwSize;
+ GUID guid;
+ DWORD dwEffType;
+ DWORD dwStaticParams;
+ DWORD dwDynamicParams;
+ CHAR tszName[MAX_PATH];
+} DIEFFECTINFOA, *LPDIEFFECTINFOA;
+typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;
+
+typedef struct DIEFFECTINFOW {
+ DWORD dwSize;
+ GUID guid;
+ DWORD dwEffType;
+ DWORD dwStaticParams;
+ DWORD dwDynamicParams;
+ WCHAR tszName[MAX_PATH];
+} DIEFFECTINFOW, *LPDIEFFECTINFOW;
+typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
+
+DECL_WINELIB_TYPE_AW(DIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(LPDIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(LPCDIEFFECTINFO)
+
+typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
+typedef BOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
+
+typedef struct DIEFFESCAPE {
+ DWORD dwSize;
+ DWORD dwCommand;
+ LPVOID lpvInBuffer;
+ DWORD cbInBuffer;
+ LPVOID lpvOutBuffer;
+ DWORD cbOutBuffer;
+} DIEFFESCAPE, *LPDIEFFESCAPE;
+
+typedef struct DIJOYSTATE {
+ LONG lX;
+ LONG lY;
+ LONG lZ;
+ LONG lRx;
+ LONG lRy;
+ LONG lRz;
+ LONG rglSlider[2];
+ DWORD rgdwPOV[4];
+ BYTE rgbButtons[32];
+} DIJOYSTATE, *LPDIJOYSTATE;
+
+typedef struct DIJOYSTATE2 {
+ LONG lX;
+ LONG lY;
+ LONG lZ;
+ LONG lRx;
+ LONG lRy;
+ LONG lRz;
+ LONG rglSlider[2];
+ DWORD rgdwPOV[4];
+ BYTE rgbButtons[128];
+ LONG lVX; /* 'v' as in velocity */
+ LONG lVY;
+ LONG lVZ;
+ LONG lVRx;
+ LONG lVRy;
+ LONG lVRz;
+ LONG rglVSlider[2];
+ LONG lAX; /* 'a' as in acceleration */
+ LONG lAY;
+ LONG lAZ;
+ LONG lARx;
+ LONG lARy;
+ LONG lARz;
+ LONG rglASlider[2];
+ LONG lFX; /* 'f' as in force */
+ LONG lFY;
+ LONG lFZ;
+ LONG lFRx; /* 'fr' as in rotational force aka torque */
+ LONG lFRy;
+ LONG lFRz;
+ LONG rglFSlider[2];
+} DIJOYSTATE2, *LPDIJOYSTATE2;
+
+#define DIJOFS_X FIELD_OFFSET(DIJOYSTATE, lX)
+#define DIJOFS_Y FIELD_OFFSET(DIJOYSTATE, lY)
+#define DIJOFS_Z FIELD_OFFSET(DIJOYSTATE, lZ)
+#define DIJOFS_RX FIELD_OFFSET(DIJOYSTATE, lRx)
+#define DIJOFS_RY FIELD_OFFSET(DIJOYSTATE, lRy)
+#define DIJOFS_RZ FIELD_OFFSET(DIJOYSTATE, lRz)
+#define DIJOFS_SLIDER(n) (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
+ (n) * sizeof(LONG))
+#define DIJOFS_POV(n) (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
+ (n) * sizeof(DWORD))
+#define DIJOFS_BUTTON(n) (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
+#define DIJOFS_BUTTON0 DIJOFS_BUTTON(0)
+#define DIJOFS_BUTTON1 DIJOFS_BUTTON(1)
+#define DIJOFS_BUTTON2 DIJOFS_BUTTON(2)
+#define DIJOFS_BUTTON3 DIJOFS_BUTTON(3)
+#define DIJOFS_BUTTON4 DIJOFS_BUTTON(4)
+#define DIJOFS_BUTTON5 DIJOFS_BUTTON(5)
+#define DIJOFS_BUTTON6 DIJOFS_BUTTON(6)
+#define DIJOFS_BUTTON7 DIJOFS_BUTTON(7)
+#define DIJOFS_BUTTON8 DIJOFS_BUTTON(8)
+#define DIJOFS_BUTTON9 DIJOFS_BUTTON(9)
+#define DIJOFS_BUTTON10 DIJOFS_BUTTON(10)
+#define DIJOFS_BUTTON11 DIJOFS_BUTTON(11)
+#define DIJOFS_BUTTON12 DIJOFS_BUTTON(12)
+#define DIJOFS_BUTTON13 DIJOFS_BUTTON(13)
+#define DIJOFS_BUTTON14 DIJOFS_BUTTON(14)
+#define DIJOFS_BUTTON15 DIJOFS_BUTTON(15)
+#define DIJOFS_BUTTON16 DIJOFS_BUTTON(16)
+#define DIJOFS_BUTTON17 DIJOFS_BUTTON(17)
+#define DIJOFS_BUTTON18 DIJOFS_BUTTON(18)
+#define DIJOFS_BUTTON19 DIJOFS_BUTTON(19)
+#define DIJOFS_BUTTON20 DIJOFS_BUTTON(20)
+#define DIJOFS_BUTTON21 DIJOFS_BUTTON(21)
+#define DIJOFS_BUTTON22 DIJOFS_BUTTON(22)
+#define DIJOFS_BUTTON23 DIJOFS_BUTTON(23)
+#define DIJOFS_BUTTON24 DIJOFS_BUTTON(24)
+#define DIJOFS_BUTTON25 DIJOFS_BUTTON(25)
+#define DIJOFS_BUTTON26 DIJOFS_BUTTON(26)
+#define DIJOFS_BUTTON27 DIJOFS_BUTTON(27)
+#define DIJOFS_BUTTON28 DIJOFS_BUTTON(28)
+#define DIJOFS_BUTTON29 DIJOFS_BUTTON(29)
+#define DIJOFS_BUTTON30 DIJOFS_BUTTON(30)
+#define DIJOFS_BUTTON31 DIJOFS_BUTTON(31)
+
+/* DInput 7 structures, types */
+typedef struct DIFILEEFFECT {
+ DWORD dwSize;
+ GUID GuidEffect;
+ LPCDIEFFECT lpDiEffect;
+ CHAR szFriendlyName[MAX_PATH];
+} DIFILEEFFECT, *LPDIFILEEFFECT;
+
+typedef const DIFILEEFFECT *LPCDIFILEEFFECT;
+typedef BOOL (CALLBACK *LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID);
+
+/* DInput 8 structures and types */
+typedef struct _DIACTIONA {
+ UINT_PTR uAppData;
+ DWORD dwSemantic;
+ DWORD dwFlags;
+ union {
+ LPCSTR lptszActionName;
+ UINT uResIdString;
+ } DUMMYUNIONNAME;
+ GUID guidInstance;
+ DWORD dwObjID;
+ DWORD dwHow;
+} DIACTIONA, *LPDIACTIONA;
+typedef const DIACTIONA *LPCDIACTIONA;
+
+typedef struct _DIACTIONW {
+ UINT_PTR uAppData;
+ DWORD dwSemantic;
+ DWORD dwFlags;
+ union {
+ LPCWSTR lptszActionName;
+ UINT uResIdString;
+ } DUMMYUNIONNAME;
+ GUID guidInstance;
+ DWORD dwObjID;
+ DWORD dwHow;
+} DIACTIONW, *LPDIACTIONW;
+typedef const DIACTIONW *LPCDIACTIONW;
+
+DECL_WINELIB_TYPE_AW(DIACTION)
+DECL_WINELIB_TYPE_AW(LPDIACTION)
+DECL_WINELIB_TYPE_AW(LPCDIACTION)
+
+#define DIA_FORCEFEEDBACK 0x00000001
+#define DIA_APPMAPPED 0x00000002
+#define DIA_APPNOMAP 0x00000004
+#define DIA_NORANGE 0x00000008
+#define DIA_APPFIXED 0x00000010
+
+#define DIAH_UNMAPPED 0x00000000
+#define DIAH_USERCONFIG 0x00000001
+#define DIAH_APPREQUESTED 0x00000002
+#define DIAH_HWAPP 0x00000004
+#define DIAH_HWDEFAULT 0x00000008
+#define DIAH_DEFAULT 0x00000020
+#define DIAH_ERROR 0x80000000
+
+typedef struct _DIACTIONFORMATA {
+ DWORD dwSize;
+ DWORD dwActionSize;
+ DWORD dwDataSize;
+ DWORD dwNumActions;
+ LPDIACTIONA rgoAction;
+ GUID guidActionMap;
+ DWORD dwGenre;
+ DWORD dwBufferSize;
+ LONG lAxisMin;
+ LONG lAxisMax;
+ HINSTANCE hInstString;
+ FILETIME ftTimeStamp;
+ DWORD dwCRC;
+ CHAR tszActionMap[MAX_PATH];
+} DIACTIONFORMATA, *LPDIACTIONFORMATA;
+typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA;
+
+typedef struct _DIACTIONFORMATW {
+ DWORD dwSize;
+ DWORD dwActionSize;
+ DWORD dwDataSize;
+ DWORD dwNumActions;
+ LPDIACTIONW rgoAction;
+ GUID guidActionMap;
+ DWORD dwGenre;
+ DWORD dwBufferSize;
+ LONG lAxisMin;
+ LONG lAxisMax;
+ HINSTANCE hInstString;
+ FILETIME ftTimeStamp;
+ DWORD dwCRC;
+ WCHAR tszActionMap[MAX_PATH];
+} DIACTIONFORMATW, *LPDIACTIONFORMATW;
+typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW;
+
+DECL_WINELIB_TYPE_AW(DIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(LPDIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(LPCDIACTIONFORMAT)
+
+#define DIAFTS_NEWDEVICELOW 0xFFFFFFFF
+#define DIAFTS_NEWDEVICEHIGH 0xFFFFFFFF
+#define DIAFTS_UNUSEDDEVICELOW 0x00000000
+#define DIAFTS_UNUSEDDEVICEHIGH 0x00000000
+
+#define DIDBAM_DEFAULT 0x00000000
+#define DIDBAM_PRESERVE 0x00000001
+#define DIDBAM_INITIALIZE 0x00000002
+#define DIDBAM_HWDEFAULTS 0x00000004
+
+#define DIDSAM_DEFAULT 0x00000000
+#define DIDSAM_NOUSER 0x00000001
+#define DIDSAM_FORCESAVE 0x00000002
+
+#define DICD_DEFAULT 0x00000000
+#define DICD_EDIT 0x00000001
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+typedef struct _DICOLORSET {
+ DWORD dwSize;
+ D3DCOLOR cTextFore;
+ D3DCOLOR cTextHighlight;
+ D3DCOLOR cCalloutLine;
+ D3DCOLOR cCalloutHighlight;
+ D3DCOLOR cBorder;
+ D3DCOLOR cControlFill;
+ D3DCOLOR cHighlightFill;
+ D3DCOLOR cAreaFill;
+} DICOLORSET, *LPDICOLORSET;
+typedef const DICOLORSET *LPCDICOLORSET;
+
+typedef struct _DICONFIGUREDEVICESPARAMSA {
+ DWORD dwSize;
+ DWORD dwcUsers;
+ LPSTR lptszUserNames;
+ DWORD dwcFormats;
+ LPDIACTIONFORMATA lprgFormats;
+ HWND hwnd;
+ DICOLORSET dics;
+ LPUNKNOWN lpUnkDDSTarget;
+} DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA;
+typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA;
+
+typedef struct _DICONFIGUREDEVICESPARAMSW {
+ DWORD dwSize;
+ DWORD dwcUsers;
+ LPWSTR lptszUserNames;
+ DWORD dwcFormats;
+ LPDIACTIONFORMATW lprgFormats;
+ HWND hwnd;
+ DICOLORSET dics;
+ LPUNKNOWN lpUnkDDSTarget;
+} DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW;
+typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW;
+
+DECL_WINELIB_TYPE_AW(DICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(LPDICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(LPCDICONFIGUREDEVICESPARAMS)
+
+#define DIDIFT_CONFIGURATION 0x00000001
+#define DIDIFT_OVERLAY 0x00000002
+
+#define DIDAL_CENTERED 0x00000000
+#define DIDAL_LEFTALIGNED 0x00000001
+#define DIDAL_RIGHTALIGNED 0x00000002
+#define DIDAL_MIDDLE 0x00000000
+#define DIDAL_TOPALIGNED 0x00000004
+#define DIDAL_BOTTOMALIGNED 0x00000008
+
+typedef struct _DIDEVICEIMAGEINFOA {
+ CHAR tszImagePath[MAX_PATH];
+ DWORD dwFlags;
+ DWORD dwViewID;
+ RECT rcOverlay;
+ DWORD dwObjID;
+ DWORD dwcValidPts;
+ POINT rgptCalloutLine[5];
+ RECT rcCalloutRect;
+ DWORD dwTextAlign;
+} DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA;
+typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA;
+
+typedef struct _DIDEVICEIMAGEINFOW {
+ WCHAR tszImagePath[MAX_PATH];
+ DWORD dwFlags;
+ DWORD dwViewID;
+ RECT rcOverlay;
+ DWORD dwObjID;
+ DWORD dwcValidPts;
+ POINT rgptCalloutLine[5];
+ RECT rcCalloutRect;
+ DWORD dwTextAlign;
+} DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW;
+typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFO)
+
+typedef struct _DIDEVICEIMAGEINFOHEADERA {
+ DWORD dwSize;
+ DWORD dwSizeImageInfo;
+ DWORD dwcViews;
+ DWORD dwcButtons;
+ DWORD dwcAxes;
+ DWORD dwcPOVs;
+ DWORD dwBufferSize;
+ DWORD dwBufferUsed;
+ LPDIDEVICEIMAGEINFOA lprgImageInfoArray;
+} DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA;
+typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA;
+
+typedef struct _DIDEVICEIMAGEINFOHEADERW {
+ DWORD dwSize;
+ DWORD dwSizeImageInfo;
+ DWORD dwcViews;
+ DWORD dwcButtons;
+ DWORD dwcAxes;
+ DWORD dwcPOVs;
+ DWORD dwBufferSize;
+ DWORD dwBufferUsed;
+ LPDIDEVICEIMAGEINFOW lprgImageInfoArray;
+} DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW;
+typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW;
+
+DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFOHEADER)
+
+
+/*****************************************************************************
+ * IDirectInputEffect interface
+ */
+#define INTERFACE IDirectInputEffect
+DECLARE_INTERFACE_(IDirectInputEffect,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputEffect methods ***/
+ STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID) PURE;
+ STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;
+ STDMETHOD(GetParameters)(THIS_ LPDIEFFECT, DWORD) PURE;
+ STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT, DWORD) PURE;
+ STDMETHOD(Start)(THIS_ DWORD, DWORD) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;
+ STDMETHOD(Download)(THIS) PURE;
+ STDMETHOD(Unload)(THIS) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInputEffect methods ***/
+#define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a)
+#define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b)
+#define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b)
+#define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b)
+#define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a)
+#define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p)
+#define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p)
+#define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputEffect_AddRef(p) (p)->AddRef()
+#define IDirectInputEffect_Release(p) (p)->Release()
+/*** IDirectInputEffect methods ***/
+#define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a)
+#define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b)
+#define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b)
+#define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b)
+#define IDirectInputEffect_Stop(p) (p)->Stop()
+#define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a)
+#define IDirectInputEffect_Download(p) (p)->Download()
+#define IDirectInputEffect_Unload(p) (p)->Unload()
+#define IDirectInputEffect_Escape(p,a) (p)->Escape(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInputDeviceA interface
+ */
+#define INTERFACE IDirectInputDeviceA
+DECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceA methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDeviceW interface
+ */
+#define INTERFACE IDirectInputDeviceW
+DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceW methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice_AddRef(p) (p)->AddRef()
+#define IDirectInputDevice_Release(p) (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a)
+#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b)
+#define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b)
+#define IDirectInputDevice_Acquire(p) (p)->Acquire()
+#define IDirectInputDevice_Unacquire(p) (p)->Unacquire()
+#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
+#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a)
+#define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a)
+#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
+#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInputDevice2A interface
+ */
+#define INTERFACE IDirectInputDevice2A
+DECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceA methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+ /*** IDirectInputDevice2A methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDevice2W interface
+ */
+#define INTERFACE IDirectInputDevice2W
+DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceW methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+ /*** IDirectInputDevice2W methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
+#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
+#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
+#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
+#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
+#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
+#define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a)
+#define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p)
+#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice2_AddRef(p) (p)->AddRef()
+#define IDirectInputDevice2_Release(p) (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a)
+#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b)
+#define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b)
+#define IDirectInputDevice2_Acquire(p) (p)->Acquire()
+#define IDirectInputDevice2_Unacquire(p) (p)->Unacquire()
+#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
+#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a)
+#define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a)
+#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
+#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
+#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
+#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
+#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
+#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
+#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
+#define IDirectInputDevice2_Escape(p,a) (p)->Escape(a)
+#define IDirectInputDevice2_Poll(p) (p)->Poll()
+#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirectInputDevice7A interface
+ */
+#define INTERFACE IDirectInputDevice7A
+DECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceA methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+ /*** IDirectInputDevice2A methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+ /*** IDirectInputDevice7A methods ***/
+ STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+ STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDevice7W interface
+ */
+#define INTERFACE IDirectInputDevice7W
+DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceW methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+ /*** IDirectInputDevice2W methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+ /*** IDirectInputDevice7W methods ***/
+ STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+ STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
+#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
+#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
+#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
+#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
+#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
+#define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a)
+#define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p)
+#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
+#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice7_AddRef(p) (p)->AddRef()
+#define IDirectInputDevice7_Release(p) (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a)
+#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b)
+#define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b)
+#define IDirectInputDevice7_Acquire(p) (p)->Acquire()
+#define IDirectInputDevice7_Unacquire(p) (p)->Unacquire()
+#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
+#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a)
+#define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a)
+#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
+#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
+#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
+#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
+#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
+#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
+#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
+#define IDirectInputDevice7_Escape(p,a) (p)->Escape(a)
+#define IDirectInputDevice7_Poll(p) (p)->Poll()
+#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
+#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInputDevice8A interface
+ */
+#define INTERFACE IDirectInputDevice8A
+DECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceA methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+ /*** IDirectInputDevice2A methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA pdei, REFGUID rguid) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+ /*** IDirectInputDevice7A methods ***/
+ STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+ STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+ /*** IDirectInputDevice8A methods ***/
+ STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;
+ STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) PURE;
+ STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputDevice8W interface
+ */
+#define INTERFACE IDirectInputDevice8W
+DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputDeviceW methods ***/
+ STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS lpDIDevCaps) PURE;
+ STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetProperty)(THIS_ REFGUID rguidProp, LPDIPROPHEADER pdiph) PURE;
+ STDMETHOD(SetProperty)(THIS_ REFGUID rguidProp, LPCDIPROPHEADER pdiph) PURE;
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(GetDeviceState)(THIS_ DWORD cbData, LPVOID lpvData) PURE;
+ STDMETHOD(GetDeviceData)(THIS_ DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) PURE;
+ STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT lpdf) PURE;
+ STDMETHOD(SetEventNotification)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwFlags) PURE;
+ STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW pdidi) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) PURE;
+ /*** IDirectInputDevice2W methods ***/
+ STDMETHOD(CreateEffect)(THIS_ REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT *ppdeff, LPUNKNOWN punkOuter) PURE;
+ STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) PURE;
+ STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW pdei, REFGUID rguid) PURE;
+ STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD pdwOut) PURE;
+ STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) PURE;
+ STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE pesc) PURE;
+ STDMETHOD(Poll)(THIS) PURE;
+ STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
+ /*** IDirectInputDevice7W methods ***/
+ STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
+ STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
+ /*** IDirectInputDevice8W methods ***/
+ STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;
+ STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) PURE;
+ STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputDevice8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInputDevice8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice8_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
+#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
+#define IDirectInputDevice8_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
+#define IDirectInputDevice8_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
+#define IDirectInputDevice8_Acquire(p) (p)->lpVtbl->Acquire(p)
+#define IDirectInputDevice8_Unacquire(p) (p)->lpVtbl->Unacquire(p)
+#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
+#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
+#define IDirectInputDevice8_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
+#define IDirectInputDevice8_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
+#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
+#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
+#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
+#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
+#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
+#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
+#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
+#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
+#define IDirectInputDevice8_Escape(p,a) (p)->lpVtbl->Escape(p,a)
+#define IDirectInputDevice8_Poll(p) (p)->lpVtbl->Poll(p)
+#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
+#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
+/*** IDirectInputDevice8 methods ***/
+#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c)
+#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->lpVtbl->SetActionMap(p,a,b,c)
+#define IDirectInputDevice8_GetImageInfo(p,a) (p)->lpVtbl->GetImageInfo(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputDevice8_AddRef(p) (p)->AddRef()
+#define IDirectInputDevice8_Release(p) (p)->Release()
+/*** IDirectInputDevice methods ***/
+#define IDirectInputDevice8_GetCapabilities(p,a) (p)->GetCapabilities(a)
+#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
+#define IDirectInputDevice8_GetProperty(p,a,b) (p)->GetProperty(a,b)
+#define IDirectInputDevice8_SetProperty(p,a,b) (p)->SetProperty(a,b)
+#define IDirectInputDevice8_Acquire(p) (p)->Acquire()
+#define IDirectInputDevice8_Unacquire(p) (p)->Unacquire()
+#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
+#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
+#define IDirectInputDevice8_SetDataFormat(p,a) (p)->SetDataFormat(a)
+#define IDirectInputDevice8_SetEventNotification(p,a) (p)->SetEventNotification(a)
+#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
+#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
+#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+/*** IDirectInputDevice2 methods ***/
+#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
+#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
+#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
+#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
+#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
+#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
+#define IDirectInputDevice8_Escape(p,a) (p)->Escape(a)
+#define IDirectInputDevice8_Poll(p) (p)->Poll()
+#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
+/*** IDirectInputDevice7 methods ***/
+#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
+#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
+/*** IDirectInputDevice8 methods ***/
+#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c)
+#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->SetActionMap(a,b,c)
+#define IDirectInputDevice8_GetImageInfo(p,a) (p)->GetImageInfo(a)
+#endif
+
+/* "Standard" Mouse report... */
+typedef struct DIMOUSESTATE {
+ LONG lX;
+ LONG lY;
+ LONG lZ;
+ BYTE rgbButtons[4];
+} DIMOUSESTATE;
+
+/* "Standard" Mouse report for DInput 7... */
+typedef struct DIMOUSESTATE2 {
+ LONG lX;
+ LONG lY;
+ LONG lZ;
+ BYTE rgbButtons[8];
+} DIMOUSESTATE2;
+
+#define DIMOFS_X FIELD_OFFSET(DIMOUSESTATE, lX)
+#define DIMOFS_Y FIELD_OFFSET(DIMOUSESTATE, lY)
+#define DIMOFS_Z FIELD_OFFSET(DIMOUSESTATE, lZ)
+#define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)
+#define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
+#define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
+#define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
+#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
+#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
+#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
+#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
+
+/* New DirectInput8 mouse definitions */
+
+#define DIMOUSE_XAXISAB (0x82000200 | DIMOFS_X)
+#define DIMOUSE_YAXISAB (0x82000200 | DIMOFS_Y)
+#define DIMOUSE_XAXIS (0x82000300 | DIMOFS_X)
+#define DIMOUSE_YAXIS (0x82000300 | DIMOFS_Y)
+#define DIMOUSE_WHEEL (0x82000300 | DIMOFS_Z)
+#define DIMOUSE_BUTTON0 (0x82000400 | DIMOFS_BUTTON0)
+#define DIMOUSE_BUTTON1 (0x82000400 | DIMOFS_BUTTON1)
+#define DIMOUSE_BUTTON2 (0x82000400 | DIMOFS_BUTTON2)
+#define DIMOUSE_BUTTON3 (0x82000400 | DIMOFS_BUTTON3)
+#define DIMOUSE_BUTTON4 (0x82000400 | DIMOFS_BUTTON4)
+#define DIMOUSE_BUTTON5 (0x82000400 | DIMOFS_BUTTON5)
+#define DIMOUSE_BUTTON6 (0x82000400 | DIMOFS_BUTTON6)
+#define DIMOUSE_BUTTON7 (0x82000400 | DIMOFS_BUTTON7)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern const DIDATAFORMAT c_dfDIMouse;
+extern const DIDATAFORMAT c_dfDIMouse2; /* DX 7 */
+extern const DIDATAFORMAT c_dfDIKeyboard;
+extern const DIDATAFORMAT c_dfDIJoystick;
+extern const DIDATAFORMAT c_dfDIJoystick2;
+#ifdef __cplusplus
+};
+#endif
+
+#define DIAXIS_ANY_X_1 0xFF00C201
+#define DIAXIS_ANY_X_2 0xFF00C202
+#define DIAXIS_ANY_Y_1 0xFF014201
+#define DIAXIS_ANY_Y_2 0xFF014202
+#define DIAXIS_ANY_Z_1 0xFF01C201
+#define DIAXIS_ANY_Z_2 0xFF01C202
+#define DIAXIS_ANY_R_1 0xFF024201
+#define DIAXIS_ANY_R_2 0xFF024202
+#define DIAXIS_ANY_U_1 0xFF02C201
+#define DIAXIS_ANY_U_2 0xFF02C202
+#define DIAXIS_ANY_V_1 0xFF034201
+#define DIAXIS_ANY_V_2 0xFF034202
+#define DIAXIS_ANY_A_1 0xFF03C201
+#define DIAXIS_ANY_A_2 0xFF03C202
+#define DIAXIS_ANY_B_1 0xFF044201
+#define DIAXIS_ANY_B_2 0xFF044202
+#define DIAXIS_ANY_C_1 0xFF04C201
+#define DIAXIS_ANY_C_2 0xFF04C202
+#define DIAXIS_ANY_S_1 0xFF054201
+#define DIAXIS_ANY_S_2 0xFF054202
+#define DIAXIS_ANY_1 0xFF004201
+#define DIAXIS_ANY_2 0xFF004202
+#define DIAXIS_ANY_3 0xFF004203
+#define DIAXIS_ANY_4 0xFF004204
+#define DIPOV_ANY_1 0xFF004601
+#define DIPOV_ANY_2 0xFF004602
+#define DIPOV_ANY_3 0xFF004603
+#define DIPOV_ANY_4 0xFF004604
+#define DIBUTTON_ANY(instance) (0xFF004400 | (instance))
+
+
+/*****************************************************************************
+ * IDirectInputA interface
+ */
+#define INTERFACE IDirectInputA
+DECLARE_INTERFACE_(IDirectInputA,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputA methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInputW interface
+ */
+#define INTERFACE IDirectInputW
+DECLARE_INTERFACE_(IDirectInputW,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputW methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInput_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInput methods ***/
+#define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput_AddRef(p) (p)->AddRef()
+#define IDirectInput_Release(p) (p)->Release()
+/*** IDirectInput methods ***/
+#define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
+#define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectInput2A interface
+ */
+#define INTERFACE IDirectInput2A
+DECLARE_INTERFACE_(IDirectInput2A,IDirectInputA)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputA methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ /*** IDirectInput2A methods ***/
+ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInput2W interface
+ */
+#define INTERFACE IDirectInput2W
+DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputW methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ /*** IDirectInput2W methods ***/
+ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInput2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInput methods ***/
+#define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput2_AddRef(p) (p)->AddRef()
+#define IDirectInput2_Release(p) (p)->Release()
+/*** IDirectInput methods ***/
+#define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
+#define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectInput7A interface
+ */
+#define INTERFACE IDirectInput7A
+DECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputA methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ /*** IDirectInput2A methods ***/
+ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
+ /*** IDirectInput7A methods ***/
+ STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInput7W interface
+ */
+#define INTERFACE IDirectInput7W
+DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputW methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ /*** IDirectInput2W methods ***/
+ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
+ /*** IDirectInput7W methods ***/
+ STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, LPUNKNOWN lpUnknownOuter) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInput7_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInput methods ***/
+#define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
+/*** IDirectInput7 methods ***/
+#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput7_AddRef(p) (p)->AddRef()
+#define IDirectInput7_Release(p) (p)->Release()
+/*** IDirectInput methods ***/
+#define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
+#define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b)
+/*** IDirectInput2 methods ***/
+#define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
+/*** IDirectInput7 methods ***/
+#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectInput8A interface
+ */
+#define INTERFACE IDirectInput8A
+DECLARE_INTERFACE_(IDirectInput8A,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInput8A methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8A *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID pguidInstance) PURE;
+ STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectInput8W interface
+ */
+#define INTERFACE IDirectInput8W
+DECLARE_INTERFACE_(IDirectInput8W,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInput8W methods ***/
+ STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICE8W *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+ STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID pguidInstance) PURE;
+ STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR ptszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+ STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInput8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInput8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInput8 methods ***/
+#define IDirectInput8_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
+#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectInput8_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
+#define IDirectInput8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
+#define IDirectInput8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectInput8_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
+#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e)
+#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInput8_AddRef(p) (p)->AddRef()
+#define IDirectInput8_Release(p) (p)->Release()
+/*** IDirectInput8 methods ***/
+#define IDirectInput8_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
+#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectInput8_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
+#define IDirectInput8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
+#define IDirectInput8_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectInput8_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
+#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e)
+#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d)
+#endif
+
+
+/* Export functions */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI DirectInput8Create(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
+
+HRESULT WINAPI DirectInputCreateA(HINSTANCE,DWORD,LPDIRECTINPUTA *,LPUNKNOWN);
+HRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN);
+#define DirectInputCreate WINELIB_NAME_AW(DirectInputCreate)
+
+HRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* __DINPUT_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h
new file mode 100644
index 00000000..99090def
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dinputd.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DINPUTD_INCLUDED__
+#define __DINPUTD_INCLUDED__
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#ifndef DIRECTINPUT_VERSION
+#define DIRECTINPUT_VERSION 0x0800
+#endif
+
+DEFINE_GUID(IID_IDirectInputJoyConfig8, 0xEB0D7DFA,0x1990,0x4F27,0xB4,0xD6,0xED,0xF2,0xEE,0xC4,0xA4,0x4C);
+
+typedef struct IDirectInputJoyConfig8 *LPDIRECTINPUTJOYCONFIG8;
+
+
+typedef BOOL (CALLBACK *LPDIJOYTYPECALLBACK)(LPCWSTR, LPVOID);
+
+#define MAX_JOYSTRING 256
+#ifndef MAX_JOYSTICKOEMVXDNAME
+#define MAX_JOYSTICKOEMVXDNAME 260
+#endif
+
+#define JOY_POV_NUMDIRS 4
+#define JOY_POVVAL_FORWARD 0
+#define JOY_POVVAL_BACKWARD 1
+#define JOY_POVVAL_LEFT 2
+#define JOY_POVVAL_RIGHT 3
+
+#define DIERR_NOMOREITEMS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS)
+
+typedef struct joypos_tag
+{
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwZ;
+ DWORD dwR;
+ DWORD dwU;
+ DWORD dwV;
+} JOYPOS, *LPJOYPOS;
+
+typedef struct joyrange_tag
+{
+ JOYPOS jpMin;
+ JOYPOS jpMax;
+ JOYPOS jpCenter;
+} JOYRANGE, *LPJOYRANGE;
+
+typedef struct joyreguservalues_tag
+{
+ DWORD dwTimeOut;
+ JOYRANGE jrvRanges;
+ JOYPOS jpDeadZone;
+} JOYREGUSERVALUES, *LPJOYREGUSERVALUES;
+
+typedef struct joyreghwsettings_tag
+{
+ DWORD dwFlags;
+ DWORD dwNumButtons;
+} JOYREGHWSETTINGS, *LPJOYHWSETTINGS;
+
+typedef struct joyreghwvalues_tag
+{
+ JOYRANGE jrvHardware;
+ DWORD dwPOVValues[JOY_POV_NUMDIRS];
+ DWORD dwCalFlags;
+} JOYREGHWVALUES, *LPJOYREGHWVALUES;
+
+typedef struct joyreghwconfig_tag
+{
+ JOYREGHWSETTINGS hws;
+ DWORD dwUsageSettings;
+ JOYREGHWVALUES hwv;
+ DWORD dwType;
+ DWORD dwReserved;
+} JOYREGHWCONFIG, *LPJOYREGHWCONFIG;
+
+typedef struct DIJOYTYPEINFO_DX5
+{
+ DWORD dwSize;
+ JOYREGHWSETTINGS hws;
+ CLSID clsidConfig;
+ WCHAR wszDisplayName[MAX_JOYSTRING];
+ WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
+} DIJOYTYPEINFO_DX5, *LPDIJOYTYPEINFO_DX5;
+typedef const DIJOYTYPEINFO_DX5 *LPCDIJOYTYPEINFO_DX5;
+
+typedef struct DIJOYTYPEINFO_DX6
+{
+ DWORD dwSize;
+ JOYREGHWSETTINGS hws;
+ CLSID clsidConfig;
+ WCHAR wszDisplayName[MAX_JOYSTRING];
+ WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
+ WCHAR wszHardwareId[MAX_JOYSTRING];
+ DWORD dwFlags1;
+} DIJOYTYPEINFO_DX6, *LPDIJOYTYPEINFO_DX6;
+typedef const DIJOYTYPEINFO_DX6 *LPCDIJOYTYPEINFO_DX6;
+
+typedef struct DIJOYTYPEINFO
+{
+ DWORD dwSize;
+ JOYREGHWSETTINGS hws;
+ CLSID clsidConfig;
+ WCHAR wszDisplayName[MAX_JOYSTRING];
+ WCHAR wszCallout[MAX_JOYSTICKOEMVXDNAME];
+ WCHAR wszHardwareId[MAX_JOYSTRING];
+ DWORD dwFlags1;
+ DWORD dwFlags2;
+ WCHAR wszMapFile[MAX_JOYSTRING];
+} DIJOYTYPEINFO, *LPDIJOYTYPEINFO;
+typedef const DIJOYTYPEINFO *LPCDIJOYTYPEINFO;
+#define DIJC_GUIDINSTANCE 0x00000001
+#define DIJC_REGHWCONFIGTYPE 0x00000002
+#define DIJC_GAIN 0x00000004
+#define DIJC_CALLOUT 0x00000008
+#define DIJC_WDMGAMEPORT 0x00000010
+
+typedef struct DIJOYCONFIG_DX5
+{
+ DWORD dwSize;
+ GUID guidInstance;
+ JOYREGHWCONFIG hwc;
+ DWORD dwGain;
+ WCHAR wszType[MAX_JOYSTRING];
+ WCHAR wszCallout[MAX_JOYSTRING];
+} DIJOYCONFIG_DX5, *LPDIJOYCONFIG_DX5;
+typedef const DIJOYCONFIG_DX5 *LPCDIJOYCONFIG_DX5;
+
+typedef struct DIJOYCONFIG
+{
+ DWORD dwSize;
+ GUID guidInstance;
+ JOYREGHWCONFIG hwc;
+ DWORD dwGain;
+ WCHAR wszType[MAX_JOYSTRING];
+ WCHAR wszCallout[MAX_JOYSTRING];
+ GUID guidGameport;
+} DIJOYCONFIG, *LPDIJOYCONFIG;
+typedef const DIJOYCONFIG *LPCDIJOYCONFIG;
+
+typedef struct DIJOYUSERVALUES
+{
+ DWORD dwSize;
+ JOYREGUSERVALUES ruv;
+ WCHAR wszGlobalDriver[MAX_JOYSTRING];
+ WCHAR wszGameportEmulator[MAX_JOYSTRING];
+} DIJOYUSERVALUES, *LPDIJOYUSERVALUES;
+typedef const DIJOYUSERVALUES *LPCDIJOYUSERVALUES;
+
+
+/*****************************************************************************
+ * IDirectInputJoyConfig8 interface
+ */
+#define INTERFACE IDirectInputJoyConfig8
+DECLARE_INTERFACE_(IDirectInputJoyConfig8, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectInputJoyConfig8 methods ***/
+ STDMETHOD(Acquire)(THIS) PURE;
+ STDMETHOD(Unacquire)(THIS) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
+ STDMETHOD(SendNotify)(THIS) PURE;
+ STDMETHOD(EnumTypes)(THIS_ LPDIJOYTYPECALLBACK, LPVOID) PURE;
+ STDMETHOD(GetTypeInfo)(THIS_ LPCWSTR, LPDIJOYTYPEINFO, DWORD) PURE;
+ STDMETHOD(SetTypeInfo)(THIS_ LPCWSTR, LPCDIJOYTYPEINFO, DWORD, LPWSTR) PURE;
+ STDMETHOD(DeleteType)(THIS_ LPCWSTR) PURE;
+ STDMETHOD(GetConfig)(THIS_ UINT, LPDIJOYCONFIG, DWORD) PURE;
+ STDMETHOD(SetConfig)(THIS_ UINT, LPCDIJOYCONFIG, DWORD) PURE;
+ STDMETHOD(DeleteConfig)(THIS_ UINT) PURE;
+ STDMETHOD(GetUserValues)(THIS_ LPDIJOYUSERVALUES, DWORD) PURE;
+ STDMETHOD(SetUserValues)(THIS_ LPCDIJOYUSERVALUES, DWORD) PURE;
+ STDMETHOD(AddNewHardware)(THIS_ HWND, REFGUID) PURE;
+ STDMETHOD(OpenTypeKey)(THIS_ LPCWSTR, DWORD, PHKEY) PURE;
+ STDMETHOD(OpenAppStatusKey)(THIS_ PHKEY) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectInputJoyConfig8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectInputJoyConfig8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectInputJoyConfig8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectInputJoyConfig8 methods ***/
+#define IDirectInputJoyConfig8_Acquire(p) (p)->lpVtbl->Acquire(p)
+#define IDirectInputJoyConfig8_Unacquire(p) (p)->lpVtbl->Unacquire(p)
+#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectInputJoyConfig8_SendNotify(p) (p)->lpVtbl->SendNotify(p)
+#define IDirectInputJoyConfig8_EnumTypes(p,a,b) (p)->lpVtbl->EnumTypes(p,a,b)
+#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c)
+#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d) (p)->lpVtbl->SetTypeInfo(p,a,b,c,d)
+#define IDirectInputJoyConfig8_DeleteType(p,a) (p)->lpVtbl->DeleteType(p,a)
+#define IDirectInputJoyConfig8_GetConfig(p,a,b,c) (p)->lpVtbl->GetConfig(p,a,b,c)
+#define IDirectInputJoyConfig8_SetConfig(p,a,b,c) (p)->lpVtbl->SetConfig(p,a,b,c)
+#define IDirectInputJoyConfig8_DeleteConfig(p,a) (p)->lpVtbl->DeleteConfig(p,a)
+#define IDirectInputJoyConfig8_GetUserValues(p,a,b) (p)->lpVtbl->GetUserValues(p,a,b)
+#define IDirectInputJoyConfig8_SetUserValues(p,a,b) (p)->lpVtbl->SetUserValues(p,a,b)
+#define IDirectInputJoyConfig8_AddNewHardware(p,a,b) (p)->lpVtbl->AddNewHardware(p,a,b)
+#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c) (p)->lpVtbl->OpenTypeKey(p,a,b,c)
+#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a) (p)->lpVtbl->OpenAppStatusKey(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectInputJoyConfig8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectInputJoyConfig8_AddRef(p) (p)->AddRef()
+#define IDirectInputJoyConfig8_Release(p) (p)->Release()
+/*** IDirectInputJoyConfig8 methods ***/
+#define IDirectInputJoyConfig8_Acquire(p) (p)->Acquire()
+#define IDirectInputJoyConfig8_Unacquire(p) (p)->Unacquire()
+#define IDirectInputJoyConfig8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectInputJoyConfig8_SendNotify(p) (p)->SendNotify()
+#define IDirectInputJoyConfig8_EnumTypes(p,a,b) (p)->EnumTypes(a,b)
+#define IDirectInputJoyConfig8_GetTypeInfo(p,a,b,c) (p)->GetTypeInfo(a,b,c)
+#define IDirectInputJoyConfig8_SetTypeInfo(p,a,b,c,d) (p)->SetTypeInfo(a,b,c,d)
+#define IDirectInputJoyConfig8_DeleteType(p,a) (p)->DeleteType(a)
+#define IDirectInputJoyConfig8_GetConfig(p,a,b,c) (p)->GetConfig(a,b,c)
+#define IDirectInputJoyConfig8_SetConfig(p,a,b,c) (p)->SetConfig(a,b,c)
+#define IDirectInputJoyConfig8_DeleteConfig(p,a) (p)->DeleteConfig(a)
+#define IDirectInputJoyConfig8_GetUserValues(p,a,b) (p)->GetUserValues(a,b)
+#define IDirectInputJoyConfig8_SetUserValues(p,a,b) (p)->SetUserValues(a,b)
+#define IDirectInputJoyConfig8_AddNewHardware(p,a,b) (p)->AddNewHardware(a,b)
+#define IDirectInputJoyConfig8_OpenTypeKey(p,a,b,c) (p)->OpenTypeKey(a,b,c)
+#define IDirectInputJoyConfig8_OpenAppStatusKey(p,a) (p)->OpenAppStatusKey(a)
+#endif
+
+#endif /* __DINPUTD_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h
new file mode 100644
index 00000000..372807f0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispdib.h
@@ -0,0 +1,53 @@
+/*
+ * DISPDIB.dll
+ *
+ * Copyright 1998 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DISPDIB_H
+#define __WINE_DISPDIB_H
+
+/* error codes */
+#define DISPLAYDIB_NOERROR 0x0000
+#define DISPLAYDIB_NOTSUPPORTED 0x0001
+#define DISPLAYDIB_INVALIDDIB 0x0002
+#define DISPLAYDIB_INVALIDFORMAT 0x0003
+#define DISPLAYDIB_INVALIDTASK 0x0004
+
+/* flags */
+#define DISPLAYDIB_NOPALETTE 0x0010
+#define DISPLAYDIB_NOCENTER 0x0020
+#define DISPLAYDIB_NOWAIT 0x0040
+#define DISPLAYDIB_BEGIN 0x8000
+#define DISPLAYDIB_END 0x4000
+#define DISPLAYDIB_MODE 0x000F /* mask */
+#define DISPLAYDIB_MODE_DEFAULT 0x0000
+#define DISPLAYDIB_MODE_320x200x8 0x0001
+#define DISPLAYDIB_MODE_320x240x8 0x0005
+
+WORD WINAPI DisplayDib( LPBITMAPINFO lpbi, LPSTR lpBits, WORD wFlags );
+
+#endif /* __WINE_DISPDIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl
new file mode 100644
index 00000000..925e3a80
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dispex.idl
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2004 Kevin Koltzau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "servprov.idl";
+#endif
+
+cpp_quote("DEFINE_GUID(SID_VariantConversion, 0x1f101481,0xbccd,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);")
+cpp_quote("DEFINE_GUID(SID_GetCaller, 0x4717cc40,0xbcb9,0x11d0,0x93,0x36,0x00,0xa0,0xc9,0xd,0xca,0xa9);")
+
+cpp_quote("#define fdexNameCaseSensitive 0x00000001L")
+cpp_quote("#define fdexNameEnsure 0x00000002L")
+cpp_quote("#define fdexNameImplicit 0x00000004L")
+cpp_quote("#define fdexNameCaseInsensitive 0x00000008L")
+cpp_quote("#define fdexNameInternal 0x00000010L")
+cpp_quote("#define fdexNameNoDynamicProperties 0x00000020L")
+
+cpp_quote("#define fdexPropCanGet 0x00000001L")
+cpp_quote("#define fdexPropCannotGet 0x00000002L")
+cpp_quote("#define fdexPropCanPut 0x00000004L")
+cpp_quote("#define fdexPropCannotPut 0x00000008L")
+cpp_quote("#define fdexPropCanPutRef 0x00000010L")
+cpp_quote("#define fdexPropCannotPutRef 0x00000020L")
+cpp_quote("#define fdexPropNoSideEffects 0x00000040L")
+cpp_quote("#define fdexPropDynamicType 0x00000080L")
+cpp_quote("#define fdexPropCanCall 0x00000100L")
+cpp_quote("#define fdexPropCannotCall 0x00000200L")
+cpp_quote("#define fdexPropCanConstruct 0x00000400L")
+cpp_quote("#define fdexPropCannotConstruct 0x00000800L")
+cpp_quote("#define fdexPropCanSourceEvents 0x00001000L")
+cpp_quote("#define fdexPropCannotSourceEvents 0x00002000L")
+
+cpp_quote("#define fdexEnumDefault 0x00000001L")
+cpp_quote("#define fdexEnumAll 0x00000002L")
+
+cpp_quote("#define grfdexPropCanAll \\")
+cpp_quote(" (fdexPropCanGet | fdexPropCanPut | fdexPropCanPutRef | \\")
+cpp_quote(" fdexPropCanCall | fdexPropCanConstruct | fdexPropCanSourceEvents)")
+cpp_quote("#define grfdexPropCannotAll \\")
+cpp_quote(" (fdexPropCannotGet | fdexPropCannotPut | fdexPropCannotPutRef | \\")
+cpp_quote(" fdexPropCannotCall | fdexPropCannotConstruct | fdexPropCannotSourceEvents)")
+cpp_quote("#define grfdexPropExtraAll \\")
+cpp_quote(" (fdexPropNoSideEffects | fdexPropDynamicType)")
+cpp_quote("#define grfdexPropAll \\")
+cpp_quote(" (grfdexPropCanAll | grfdexPropCannotAll | grfdexPropExtraAll)")
+
+cpp_quote("#define DISPATCH_CONSTRUCT 0x4000")
+
+cpp_quote("#define DISPID_THIS (-613)")
+cpp_quote("#define DISPID_STARTENUM DISPID_UNKNOWN")
+
+[
+object,
+uuid(A6EF9860-C720-11d0-9337-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IDispatchEx : IDispatch
+{
+ HRESULT GetDispID(
+ [in] BSTR bstrName,
+ [in] DWORD grfdex,
+ [out] DISPID *pid);
+
+ [local]
+ HRESULT InvokeEx(
+ [in, annotation("__in")] DISPID id,
+ [in, annotation("__in")] LCID lcid,
+ [in, annotation("__in")] WORD wFlags,
+ [in, annotation("__in")] DISPPARAMS *pdp,
+ [out, annotation("__out_opt")] VARIANT *pvarRes,
+ [out, annotation("__out_opt")] EXCEPINFO *pei,
+ [in, unique, annotation("__in_opt")] IServiceProvider *pspCaller);
+
+ [call_as(InvokeEx)]
+ HRESULT RemoteInvokeEx(
+ [in] DISPID id,
+ [in] LCID lcid,
+ [in] DWORD dwFlags,
+ [in] DISPPARAMS *pdp,
+ [out] VARIANT *pvarRes,
+ [out] EXCEPINFO *pei,
+ [in, unique] IServiceProvider *pspCaller,
+ [in] UINT cvarRefArg,
+ [in, size_is(cvarRefArg)] UINT *rgiRefArg,
+ [in, out, size_is(cvarRefArg)] VARIANT *rgvarRefArg);
+
+ HRESULT DeleteMemberByName(
+ [in] BSTR bstrName,
+ [in] DWORD grfdex);
+
+ HRESULT DeleteMemberByDispID(
+ [in] DISPID id);
+
+ HRESULT GetMemberProperties(
+ [in] DISPID id,
+ [in] DWORD grfdexFetch,
+ [out] DWORD *pgrfdex);
+
+ HRESULT GetMemberName(
+ [in] DISPID id,
+ [out] BSTR *pbstrName);
+
+ HRESULT GetNextDispID(
+ [in] DWORD grfdex,
+ [in] DISPID id,
+ [out] DISPID *pid);
+
+ HRESULT GetNameSpaceParent([out] IUnknown **ppunk);
+}
+
+[
+object,
+uuid(A6EF9861-C720-11d0-9337-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IDispError : IUnknown
+{
+ HRESULT QueryErrorInfo(
+ [in] GUID guidErrorType,
+ [out] IDispError **ppde);
+
+ HRESULT GetNext(
+ [out] IDispError **ppde);
+
+ HRESULT GetHresult(
+ [out] HRESULT *phr);
+
+ HRESULT GetSource(
+ [out] BSTR *pbstrSource);
+
+ HRESULT GetHelpInfo(
+ [out] BSTR *pbstrFileName,
+ [out] DWORD *pdwContext);
+
+ HRESULT GetDescription(
+ [out] BSTR *pbstrDescription);
+}
+
+[
+object,
+uuid(A6EF9862-C720-11d0-9337-00A0C90DCAA9),
+pointer_default(unique)
+]
+interface IVariantChangeType : IUnknown
+{
+ HRESULT ChangeType(
+ [in, out, unique] VARIANT *pvarDst,
+ [in, unique] VARIANT *pvarSrc,
+ [in] LCID lcid,
+ [in] VARTYPE vtNew);
+}
+
+
+[
+object,
+uuid(CA04B7E6-0D21-11d1-8CC5-00C04FC2B085),
+pointer_default(unique)
+]
+interface IObjectIdentity : IUnknown
+{
+ HRESULT IsEqualObject(
+ [in] IUnknown *punk);
+}
+
+[
+ object,
+ uuid(c5598e60-b307-11d1-b27d-006008c3fbfb),
+ pointer_default(unique)
+]
+interface ICanHandleException : IUnknown
+{
+ HRESULT CanHandleException(
+ [in] EXCEPINFO *pExcepInfo,
+ [in] VARIANT *pvar);
+}
+
+[
+ object,
+ uuid(10e2414a-ec59-49d2-bc51-5add2c36febc),
+ pointer_default(unique)
+]
+interface IProvideRuntimeContext : IUnknown
+{
+ HRESULT GetCurrentSourceContext(
+ [out] DWORD_PTR *pdwContext,
+ [out] VARIANT_BOOL *pfExecutingGlobalCode);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h
new file mode 100644
index 00000000..b2e363c5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dlgs.h
@@ -0,0 +1,233 @@
+/*
+ * Common dialog's dialog control ID numbers
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DLGS_H
+#define __WINE_DLGS_H
+
+#define ctlFirst 0x0400
+#define ctlLast 0x04ff
+ /* Push buttons */
+#define psh1 0x0400
+#define psh2 0x0401
+#define psh3 0x0402
+#define psh4 0x0403
+#define psh5 0x0404
+#define psh6 0x0405
+#define psh7 0x0406
+#define psh8 0x0407
+#define psh9 0x0408
+#define psh10 0x0409
+#define psh11 0x040a
+#define psh12 0x040b
+#define psh13 0x040c
+#define psh14 0x040d
+#define psh15 0x040e
+#define pshHelp psh15
+#define psh16 0x040f
+ /* Checkboxes */
+#define chx1 0x0410
+#define chx2 0x0411
+#define chx3 0x0412
+#define chx4 0x0413
+#define chx5 0x0414
+#define chx6 0x0415
+#define chx7 0x0416
+#define chx8 0x0417
+#define chx9 0x0418
+#define chx10 0x0419
+#define chx11 0x041a
+#define chx12 0x041b
+#define chx13 0x041c
+#define chx14 0x041d
+#define chx15 0x041e
+#define chx16 0x041f
+ /* Radio buttons */
+#define rad1 0x0420
+#define rad2 0x0421
+#define rad3 0x0422
+#define rad4 0x0423
+#define rad5 0x0424
+#define rad6 0x0425
+#define rad7 0x0426
+#define rad8 0x0427
+#define rad9 0x0428
+#define rad10 0x0429
+#define rad11 0x042a
+#define rad12 0x042b
+#define rad13 0x042c
+#define rad14 0x042d
+#define rad15 0x042e
+#define rad16 0x042f
+ /* Groups, frames, rectangles, and icons */
+#define grp1 0x0430
+#define grp2 0x0431
+#define grp3 0x0432
+#define grp4 0x0433
+#define frm1 0x0434
+#define frm2 0x0435
+#define frm3 0x0436
+#define frm4 0x0437
+#define rct1 0x0438
+#define rct2 0x0439
+#define rct3 0x043a
+#define rct4 0x043b
+#define ico1 0x043c
+#define ico2 0x043d
+#define ico3 0x043e
+#define ico4 0x043f
+ /* Static text */
+#define stc1 0x0440
+#define stc2 0x0441
+#define stc3 0x0442
+#define stc4 0x0443
+#define stc5 0x0444
+#define stc6 0x0445
+#define stc7 0x0446
+#define stc8 0x0447
+#define stc9 0x0448
+#define stc10 0x0449
+#define stc11 0x044a
+#define stc12 0x044b
+#define stc13 0x044c
+#define stc14 0x044d
+#define stc15 0x044e
+#define stc16 0x044f
+#define stc17 0x0450
+#define stc18 0x0451
+#define stc19 0x0452
+#define stc20 0x0453
+#define stc21 0x0454
+#define stc22 0x0455
+#define stc23 0x0456
+#define stc24 0x0457
+#define stc25 0x0458
+#define stc26 0x0459
+#define stc27 0x045a
+#define stc28 0x045b
+#define stc29 0x045c
+#define stc30 0x045d
+#define stc31 0x045e
+#define stc32 0x045f
+ /* Listboxes */
+#define lst1 0x0460
+#define lst2 0x0461
+#define lst3 0x0462
+#define lst4 0x0463
+#define lst5 0x0464
+#define lst6 0x0465
+#define lst7 0x0466
+#define lst8 0x0467
+#define lst9 0x0468
+#define lst10 0x0469
+#define lst11 0x046a
+#define lst12 0x046b
+#define lst13 0x046c
+#define lst14 0x046d
+#define lst15 0x046e
+#define lst16 0x046f
+ /* Combo boxes */
+#define cmb1 0x0470
+#define cmb2 0x0471
+#define cmb3 0x0472
+#define cmb4 0x0473
+#define cmb5 0x0474
+#define cmb6 0x0475
+#define cmb7 0x0476
+#define cmb8 0x0477
+#define cmb9 0x0478
+#define cmb10 0x0479
+#define cmb11 0x047a
+#define cmb12 0x047b
+#define cmb13 0x047c
+#define cmb14 0x047d
+#define cmb15 0x047e
+#define cmb16 0x047f
+ /* Edit controls */
+#define edt1 0x0480
+#define edt2 0x0481
+#define edt3 0x0482
+#define edt4 0x0483
+#define edt5 0x0484
+#define edt6 0x0485
+#define edt7 0x0486
+#define edt8 0x0487
+#define edt9 0x0488
+#define edt10 0x0489
+#define edt11 0x048a
+#define edt12 0x048b
+#define edt13 0x048c
+#define edt14 0x048d
+#define edt15 0x048e
+#define edt16 0x048f
+ /* Scroll bars */
+#define scr1 0x0490
+#define scr2 0x0491
+#define scr3 0x0492
+#define scr4 0x0493
+#define scr5 0x0494
+#define scr6 0x0495
+#define scr7 0x0496
+#define scr8 0x0497
+
+/*
+ * Controls
+ */
+#define ctl1 0x04A0
+
+/* These dialog resource ordinals really start at 0x0600, but the
+ * RC Compiler can't handle hex for resource IDs, hence the decimal.
+ */
+#define FILEOPENORD 1536
+#define MULTIFILEOPENORD 1537
+#define PRINTDLGORD 1538
+#define PRNSETUPDLGORD 1539
+#define FINDDLGORD 1540
+#define REPLACEDLGORD 1541
+#define FONTDLGORD 1542
+#define FORMATDLGORD31 1543
+#define FORMATDLGORD30 1544
+#define PAGESETUPDLGORD 1546
+#define NEWFILEOPENORD 1547
+#define PRINTDLGEXORD 1549
+#define PAGESETUPDLGORDMOTIF 1550
+#define COLORMGMTDLGORD 1551
+#define NEWFILEOPENV2ORD 1552
+#define NEWFILEOPENV3ORD 1553
+#define NEWFORMATDLGWITHLINK 1591
+#define IDC_MANAGE_LINK 1592
+
+typedef struct tagCRGB
+{
+ BYTE bRed;
+ BYTE bGreen;
+ BYTE bBlue;
+ BYTE bExtra;
+} CRGB;
+
+#endif /* #ifdef __WINE_DLGS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h
new file mode 100644
index 00000000..cdad5898
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls1.h
@@ -0,0 +1,212 @@
+/* Defines and Structures for Instrument Collection Form RIFF DLS1
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+
+#ifndef __WINE_INCLUDE_DLS1_H
+#define __WINE_INCLUDE_DLS1_H
+
+/*****************************************************************************
+ * FOURCCs
+ */
+#define FOURCC_DLS mmioFOURCC('D','L','S',' ')
+#define FOURCC_DLID mmioFOURCC('d','l','i','d')
+#define FOURCC_COLH mmioFOURCC('c','o','l','h')
+#define FOURCC_WVPL mmioFOURCC('w','v','p','l')
+#define FOURCC_PTBL mmioFOURCC('p','t','b','l')
+#define FOURCC_PATH mmioFOURCC('p','a','t','h')
+#define FOURCC_wave mmioFOURCC('w','a','v','e')
+#define FOURCC_LINS mmioFOURCC('l','i','n','s')
+#define FOURCC_INS mmioFOURCC('i','n','s',' ')
+#define FOURCC_INSH mmioFOURCC('i','n','s','h')
+#define FOURCC_LRGN mmioFOURCC('l','r','g','n')
+#define FOURCC_RGN mmioFOURCC('r','g','n',' ')
+#define FOURCC_RGNH mmioFOURCC('r','g','n','h')
+#define FOURCC_LART mmioFOURCC('l','a','r','t')
+#define FOURCC_ART1 mmioFOURCC('a','r','t','1')
+#define FOURCC_WLNK mmioFOURCC('w','l','n','k')
+#define FOURCC_WSMP mmioFOURCC('w','s','m','p')
+#define FOURCC_VERS mmioFOURCC('v','e','r','s')
+
+/*****************************************************************************
+ * Flags
+ */
+
+#define CONN_DST_NONE 0x000
+#define CONN_DST_ATTENUATION 0x001
+#define CONN_DST_PITCH 0x003
+#define CONN_DST_PAN 0x004
+
+#define CONN_DST_LFO_FREQUENCY 0x104
+#define CONN_DST_LFO_STARTDELAY 0x105
+
+#define CONN_DST_EG1_ATTACKTIME 0x206
+#define CONN_DST_EG1_DECAYTIME 0x207
+#define CONN_DST_EG1_RELEASETIME 0x209
+#define CONN_DST_EG1_SUSTAINLEVEL 0x20A
+
+#define CONN_DST_EG2_ATTACKTIME 0x30A
+#define CONN_DST_EG2_DECAYTIME 0x30B
+#define CONN_DST_EG2_RELEASETIME 0x30D
+#define CONN_DST_EG2_SUSTAINLEVEL 0x30E
+
+#define CONN_SRC_NONE 0x000
+#define CONN_SRC_LFO 0x001
+#define CONN_SRC_KEYONVELOCITY 0x002
+#define CONN_SRC_KEYNUMBER 0x003
+#define CONN_SRC_EG1 0x004
+#define CONN_SRC_EG2 0x005
+#define CONN_SRC_PITCHWHEEL 0x006
+
+#define CONN_SRC_CC1 0x081
+#define CONN_SRC_CC7 0x087
+#define CONN_SRC_CC10 0x08A
+#define CONN_SRC_CC11 0x08B
+
+#define CONN_TRN_NONE 0x000
+#define CONN_TRN_CONCAVE 0x001
+
+#define F_INSTRUMENT_DRUMS 0x80000000
+
+#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x1
+
+#define F_WAVELINK_PHASE_MASTER 0x1
+
+#define F_WSMP_NO_TRUNCATION 0x1
+#define F_WSMP_NO_COMPRESSION 0x2
+
+#define POOL_CUE_NULL 0xFFFFFFFF
+
+#define WAVELINK_CHANNEL_LEFT 0x1
+#define WAVELINK_CHANNEL_RIGHT 0x2
+
+#define WLOOP_TYPE_FORWARD 0x0
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DLSID DLSID, *LPDLSID;
+typedef struct _DLSVERSION DLSVERSION, *LPDLSVERSION;
+typedef struct _CONNECTION CONNECTION, *LPCONNECTION;
+typedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST;
+typedef struct _RGNRANGE RGNRANGE, *LPRGNRANGE;
+typedef struct _MIDILOCALE MIDILOCALE, *LPMIDILOCALE;
+typedef struct _RGNHEADER RGNHEADER, *LPRGNHEADER;
+typedef struct _INSTHEADER INSTHEADER, *LPINSTHEADER;
+typedef struct _DLSHEADER DLSHEADER, *LPDLSHEADER;
+typedef struct _WAVELINK WAVELINK, *LPWAVELINK;
+typedef struct _POOLCUE POOLCUE, *LPPOOLCUE;
+typedef struct _POOLTABLE POOLTABLE, *LPPOOLTABLE;
+typedef struct _rwsmp WSMPL, *LPWSMPL;
+typedef struct _rloop WLOOP, *LPWLOOP;
+
+/* actual structures */
+struct _DLSID {
+ ULONG ulData1;
+ USHORT usData2;
+ USHORT usData3;
+ BYTE abData4[8];
+};
+
+struct _DLSVERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+};
+
+struct _CONNECTION {
+ USHORT usSource;
+ USHORT usControl;
+ USHORT usDestination;
+ USHORT usTransform;
+ LONG lScale;
+};
+
+struct _CONNECTIONLIST {
+ ULONG cbSize;
+ ULONG cConnections;
+};
+
+struct _RGNRANGE {
+ USHORT usLow;
+ USHORT usHigh;
+};
+
+struct _MIDILOCALE {
+ ULONG ulBank;
+ ULONG ulInstrument;
+};
+
+struct _RGNHEADER {
+ RGNRANGE RangeKey;
+ RGNRANGE RangeVelocity;
+ USHORT fusOptions;
+ USHORT usKeyGroup;
+};
+
+struct _INSTHEADER {
+ ULONG cRegions;
+ MIDILOCALE Locale;
+};
+
+struct _DLSHEADER {
+ ULONG cInstruments;
+};
+
+struct _WAVELINK {
+ USHORT fusOptions;
+ USHORT usPhaseGroup;
+ ULONG ulChannel;
+ ULONG ulTableIndex;
+};
+
+struct _POOLCUE {
+ ULONG ulOffset;
+};
+
+struct _POOLTABLE {
+ ULONG cbSize;
+ ULONG cCues;
+};
+
+struct _rwsmp {
+ ULONG cbSize;
+ USHORT usUnityNote;
+ SHORT sFineTune;
+ LONG lAttenuation;
+ ULONG fulOptions;
+ ULONG cSampleLoops;
+};
+
+struct _rloop {
+ ULONG cbSize;
+ ULONG ulType;
+ ULONG ulStart;
+ ULONG ulLength;
+};
+
+#endif /* __WINE_INCLUDE_DLS1_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h
new file mode 100644
index 00000000..225771ad
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dls2.h
@@ -0,0 +1,116 @@
+/* Defines and Structures for Instrument Collection Form RIFF DLS2
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_INCLUDE_DLS2_H
+#define __WINE_INCLUDE_DLS2_H
+
+/*****************************************************************************
+ * DLSIDs - property set
+ */
+DEFINE_GUID(DLSID_GMInHardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_GSInHardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_ManufacturersID, 0xb03e1181,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_ProductID, 0xb03e1182,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_SupportsDLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_SupportsDLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(DLSID_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_XGInHardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+/*****************************************************************************
+ * FOURCCs
+ */
+#define FOURCC_RGN2 mmioFOURCC('r','g','n','2')
+#define FOURCC_LAR2 mmioFOURCC('l','a','r','2')
+#define FOURCC_ART2 mmioFOURCC('a','r','t','2')
+#define FOURCC_CDL mmioFOURCC('c','d','l',' ')
+#define FOURCC_DLID mmioFOURCC('d','l','i','d')
+
+/*****************************************************************************
+ * Flags
+ */
+#define CONN_DST_GAIN 0x001
+#define CONN_DST_KEYNUMBER 0x005
+
+#define CONN_DST_LEFT 0x010
+#define CONN_DST_RIGHT 0x011
+#define CONN_DST_CENTER 0x012
+#define CONN_DST_LEFTREAR 0x013
+#define CONN_DST_RIGHTREAR 0x014
+#define CONN_DST_LFE_CHANNEL 0x015
+#define CONN_DST_CHORUS 0x080
+#define CONN_DST_REVERB 0x081
+
+#define CONN_DST_VIB_FREQUENCY 0x114
+#define CONN_DST_VIB_STARTDELAY 0x115
+
+#define CONN_DST_EG1_DELAYTIME 0x20B
+#define CONN_DST_EG1_HOLDTIME 0x20C
+#define CONN_DST_EG1_SHUTDOWNTIME 0x20D
+
+#define CONN_DST_EG2_DELAYTIME 0x30F
+#define CONN_DST_EG2_HOLDTIME 0x310
+
+#define CONN_DST_FILTER_CUTOFF 0x500
+#define CONN_DST_FILTER_Q 0x501
+
+#define CONN_SRC_POLYPRESSURE 0x007
+#define CONN_SRC_CHANNELPRESSURE 0x008
+#define CONN_SRC_VIBRATO 0x009
+#define CONN_SRC_MONOPRESSURE 0x00A
+
+#define CONN_SRC_CC91 0x0DB
+#define CONN_SRC_CC93 0x0DD
+
+#define CONN_TRN_CONVEX 0x002
+#define CONN_TRN_SWITCH 0x003
+
+#define DLS_CDL_AND 0x01
+#define DLS_CDL_OR 0x02
+#define DLS_CDL_XOR 0x03
+#define DLS_CDL_ADD 0x04
+#define DLS_CDL_SUBTRACT 0x05
+#define DLS_CDL_MULTIPLY 0x06
+#define DLS_CDL_DIVIDE 0x07
+#define DLS_CDL_LOGICAL_AND 0x08
+#define DLS_CDL_LOGICAL_OR 0x09
+#define DLS_CDL_LT 0x0A
+#define DLS_CDL_LE 0x0B
+#define DLS_CDL_GT 0x0C
+#define DLS_CDL_GE 0x0D
+#define DLS_CDL_EQ 0x0E
+#define DLS_CDL_NOT 0x0F
+#define DLS_CDL_CONST 0x10
+#define DLS_CDL_QUERY 0x11
+#define DLS_CDL_QUERYSUPPORTED 0x12
+
+#define F_WAVELINK_MULTICHANNEL 0x2
+
+#define WLOOP_TYPE_RELEASE 0x1
+
+#endif /* __WINE_INCLUDE_DLS2_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h
new file mode 100644
index 00000000..5e69fd01
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmdls.h
@@ -0,0 +1,219 @@
+/* DirectMusic DLS Download Definitions
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+
+#ifndef __WINE_DMUSIC_DLS_H
+#define __WINE_DMUSIC_DLS_H
+
+#include <dls1.h>
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef LONG GCENT;
+typedef LONG PCENT;
+typedef LONG PERCENT;
+typedef LONG TCENT;
+
+typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;
+
+/*****************************************************************************
+ * FOURCC definition
+ */
+#ifndef mmioFOURCC
+typedef DWORD FOURCC;
+#define mmioFOURCC(ch0,ch1,ch2,ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_DEFAULT_SIZE_OFFSETTABLE 0x1
+
+#define DMUS_DOWNLOADINFO_INSTRUMENT 0x1
+#define DMUS_DOWNLOADINFO_WAVE 0x2
+#define DMUS_DOWNLOADINFO_INSTRUMENT2 0x3
+#define DMUS_DOWNLOADINFO_WAVEARTICULATION 0x4
+#define DMUS_DOWNLOADINFO_STREAMINGWAVE 0x5
+#define DMUS_DOWNLOADINFO_ONESHOTWAVE 0x6
+
+#define DMUS_INSTRUMENT_GM_INSTRUMENT 0x1
+
+#define DMUS_MIN_DATA_SIZE 0x4
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_DOWNLOADINFO DMUS_DOWNLOADINFO, *LPDMUS_DOWNLOADINFO;
+typedef struct _DMUS_OFFSETTABLE DMUS_OFFSETTABLE, *LPDMUS_OFFSETTABLE;
+typedef struct _DMUS_INSTRUMENT DMUS_INSTRUMENT, *LPDMUS_INSTRUMENT;
+typedef struct _DMUS_REGION DMUS_REGION, *LPDMUS_REGION;
+typedef struct _DMUS_LFOPARAMS DMUS_LFOPARAMS, *LPDMUS_LFOPARAMS;
+typedef struct _DMUS_VEGPARAMS DMUS_VEGPARAMS, *LPDMUS_VEGPARAMS;
+typedef struct _DMUS_PEGPARAMS DMUS_PEGPARAMS, *LPDMUS_PEGPARAMS;
+typedef struct _DMUS_MSCPARAMS DMUS_MSCPARAMS, *LPDMUS_MSCPARAMS;
+typedef struct _DMUS_ARTICPARAMS DMUS_ARTICPARAMS, *LPDMUS_ARTICPARAMS;
+typedef struct _DMUS_ARTICULATION DMUS_ARTICULATION, *LPDMUS_ARTICULATION;
+typedef struct _DMUS_ARTICULATION2 DMUS_ARTICULATION2, *LPDMUS_ARTICULATION2;
+typedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK;
+typedef struct _DMUS_COPYRIGHT DMUS_COPYRIGHT, *LPDMUS_COPYRIGHT;
+typedef struct _DMUS_WAVEDATA DMUS_WAVEDATA, *LPDMUS_WAVEDATA;
+typedef struct _DMUS_WAVE DMUS_WAVE, *LPDMUS_WAVE;
+typedef struct _DMUS_NOTERANGE DMUS_NOTERANGE, *LPDMUS_NOTERANGE;
+typedef struct _DMUS_WAVEARTDL DMUS_WAVEARTDL, *LPDMUS_WAVEARTDL;
+typedef struct _DMUS_WAVEDL DMUS_WAVEDL, *LPDMUS_WAVEDL;
+
+/* actual structures */
+struct _DMUS_DOWNLOADINFO {
+ DWORD dwDLType;
+ DWORD dwDLId;
+ DWORD dwNumOffsetTableEntries;
+ DWORD cbSize;
+};
+
+struct _DMUS_OFFSETTABLE {
+ ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
+};
+
+struct _DMUS_INSTRUMENT {
+ ULONG ulPatch;
+ ULONG ulFirstRegionIdx;
+ ULONG ulGlobalArtIdx;
+ ULONG ulFirstExtCkIdx;
+ ULONG ulCopyrightIdx;
+ ULONG ulFlags;
+};
+
+struct _DMUS_REGION {
+ RGNRANGE RangeKey;
+ RGNRANGE RangeVelocity;
+ USHORT fusOptions;
+ USHORT usKeyGroup;
+ ULONG ulRegionArtIdx;
+ ULONG ulNextRegionIdx;
+ ULONG ulFirstExtCkIdx;
+ WAVELINK WaveLink;
+ WSMPL WSMP;
+ WLOOP WLOOP[1];
+};
+
+struct _DMUS_LFOPARAMS {
+ PCENT pcFrequency;
+ TCENT tcDelay;
+ GCENT gcVolumeScale;
+ PCENT pcPitchScale;
+ GCENT gcMWToVolume;
+ PCENT pcMWToPitch;
+};
+
+struct _DMUS_VEGPARAMS {
+ TCENT tcAttack;
+ TCENT tcDecay;
+ PERCENT ptSustain;
+ TCENT tcRelease;
+ TCENT tcVel2Attack;
+ TCENT tcKey2Decay;
+};
+
+struct _DMUS_PEGPARAMS {
+ TCENT tcAttack;
+ TCENT tcDecay;
+ PERCENT ptSustain;
+ TCENT tcRelease;
+ TCENT tcVel2Attack;
+ TCENT tcKey2Decay;
+ PCENT pcRange;
+};
+
+struct _DMUS_MSCPARAMS {
+ PERCENT ptDefaultPan;
+};
+
+struct _DMUS_ARTICPARAMS {
+ DMUS_LFOPARAMS LFO;
+ DMUS_VEGPARAMS VolEG;
+ DMUS_PEGPARAMS PitchEG;
+ DMUS_MSCPARAMS Misc;
+};
+
+struct _DMUS_ARTICULATION {
+ ULONG ulArt1Idx;
+ ULONG ulFirstExtCkIdx;
+};
+
+struct _DMUS_ARTICULATION2 {
+ ULONG ulArtIdx;
+ ULONG ulFirstExtCkIdx;
+ ULONG ulNextArtIdx;
+};
+
+struct _DMUS_EXTENSIONCHUNK {
+ ULONG cbSize;
+ ULONG ulNextExtCkIdx;
+ FOURCC ExtCkID;
+ BYTE byExtCk[DMUS_MIN_DATA_SIZE];
+};
+
+struct _DMUS_COPYRIGHT {
+ ULONG cbSize;
+ BYTE byCopyright[DMUS_MIN_DATA_SIZE];
+};
+
+struct _DMUS_WAVEDATA {
+ ULONG cbSize;
+ BYTE byData[DMUS_MIN_DATA_SIZE];
+};
+
+struct _DMUS_WAVE {
+ ULONG ulFirstExtCkIdx;
+ ULONG ulCopyrightIdx;
+ ULONG ulWaveDataIdx;
+ WAVEFORMATEX WaveformatEx;
+};
+
+struct _DMUS_NOTERANGE {
+ DWORD dwLowNote;
+ DWORD dwHighNote;
+};
+
+struct _DMUS_WAVEARTDL {
+ ULONG ulDownloadIdIdx;
+ ULONG ulBus;
+ ULONG ulBuffers;
+ ULONG ulMasterDLId;
+ USHORT usOptions;
+};
+
+struct _DMUS_WAVEDL {
+ ULONG cbWaveData;
+};
+
+#endif /* __WINE_DMUSIC_DLS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h
new file mode 100644
index 00000000..1f5f19f7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmerror.h
@@ -0,0 +1,173 @@
+/* DirectMusic Error Codes
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_ERROR_H
+#define __WINE_DMUSIC_ERROR_H
+
+/*****************************************************************************
+ * Error code handling
+ */
+#define FACILITY_DIRECTMUSIC 0x878
+#define DMUS_ERRBASE 0x1000
+
+#ifndef MAKE_HRESULT
+#define MAKE_HRESULT(sev,fac,code) \
+ ((HRESULT) (((ULONG)(sev)<<31) | ((ULONG)(fac)<<16) | ((ULONG)(code))) )
+#endif
+
+#define MAKE_DMHRESULTSUCCESS(code) MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
+#define MAKE_DMHRESULTERROR(code) MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
+
+/*****************************************************************************
+ * Error codes
+ */
+
+#define DMUS_S_PARTIALLOAD MAKE_DMHRESULTSUCCESS(0x091)
+#define DMUS_S_PARTIALDOWNLOAD MAKE_DMHRESULTSUCCESS(0x092)
+#define DMUS_S_REQUEUE MAKE_DMHRESULTSUCCESS(0x200)
+#define DMUS_S_FREE MAKE_DMHRESULTSUCCESS(0x201)
+#define DMUS_S_END MAKE_DMHRESULTSUCCESS(0x202)
+#define DMUS_S_STRING_TRUNCATED MAKE_DMHRESULTSUCCESS(0x210)
+#define DMUS_S_LAST_TOOL MAKE_DMHRESULTSUCCESS(0x211)
+#define DMUS_S_OVER_CHORD MAKE_DMHRESULTSUCCESS(0x212)
+#define DMUS_S_UP_OCTAVE MAKE_DMHRESULTSUCCESS(0x213)
+#define DMUS_S_DOWN_OCTAVE MAKE_DMHRESULTSUCCESS(0x214)
+#define DMUS_S_NOBUFFERCONTROL MAKE_DMHRESULTSUCCESS(0x215)
+#define DMUS_S_GARBAGE_COLLECTED MAKE_DMHRESULTSUCCESS(0x216)
+
+#define DMUS_E_DRIVER_FAILED MAKE_DMHRESULTERROR(0x0101)
+#define DMUS_E_PORTS_OPEN MAKE_DMHRESULTERROR(0x0102)
+#define DMUS_E_DEVICE_IN_USE MAKE_DMHRESULTERROR(0x0103)
+#define DMUS_E_INSUFFICIENTBUFFER MAKE_DMHRESULTERROR(0x0104)
+#define DMUS_E_BUFFERNOTSET MAKE_DMHRESULTERROR(0x0105)
+#define DMUS_E_BUFFERNOTAVAILABLE MAKE_DMHRESULTERROR(0x0106)
+#define DMUS_E_NOTADLSCOL MAKE_DMHRESULTERROR(0x0108)
+#define DMUS_E_INVALIDOFFSET MAKE_DMHRESULTERROR(0x0109)
+#define DMUS_E_ALREADY_LOADED MAKE_DMHRESULTERROR(0x0111)
+#define DMUS_E_INVALIDPOS MAKE_DMHRESULTERROR(0x0113)
+#define DMUS_E_INVALIDPATCH MAKE_DMHRESULTERROR(0x0114)
+#define DMUS_E_CANNOTSEEK MAKE_DMHRESULTERROR(0x0115)
+#define DMUS_E_CANNOTWRITE MAKE_DMHRESULTERROR(0x0116)
+#define DMUS_E_CHUNKNOTFOUND MAKE_DMHRESULTERROR(0x0117)
+#define DMUS_E_INVALID_DOWNLOADID MAKE_DMHRESULTERROR(0x0119)
+#define DMUS_E_NOT_DOWNLOADED_TO_PORT MAKE_DMHRESULTERROR(0x0120)
+#define DMUS_E_ALREADY_DOWNLOADED MAKE_DMHRESULTERROR(0x0121)
+#define DMUS_E_UNKNOWN_PROPERTY MAKE_DMHRESULTERROR(0x0122)
+#define DMUS_E_SET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0123)
+#define DMUS_E_GET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0124)
+#define DMUS_E_NOTMONO MAKE_DMHRESULTERROR(0x0125)
+#define DMUS_E_BADARTICULATION MAKE_DMHRESULTERROR(0x0126)
+#define DMUS_E_BADINSTRUMENT MAKE_DMHRESULTERROR(0x0127)
+#define DMUS_E_BADWAVELINK MAKE_DMHRESULTERROR(0x0128)
+#define DMUS_E_NOARTICULATION MAKE_DMHRESULTERROR(0x0129)
+#define DMUS_E_NOTPCM MAKE_DMHRESULTERROR(0x012A)
+#define DMUS_E_BADWAVE MAKE_DMHRESULTERROR(0x012B)
+#define DMUS_E_BADOFFSETTABLE MAKE_DMHRESULTERROR(0x012C)
+#define DMUS_E_UNKNOWNDOWNLOAD MAKE_DMHRESULTERROR(0x012D)
+#define DMUS_E_NOSYNTHSINK MAKE_DMHRESULTERROR(0x012E)
+#define DMUS_E_ALREADYOPEN MAKE_DMHRESULTERROR(0x012F)
+#define DMUS_E_ALREADYCLOSED MAKE_DMHRESULTERROR(0x0130)
+#define DMUS_E_SYNTHNOTCONFIGURED MAKE_DMHRESULTERROR(0x0131)
+#define DMUS_E_SYNTHACTIVE MAKE_DMHRESULTERROR(0x0132)
+#define DMUS_E_CANNOTREAD MAKE_DMHRESULTERROR(0x0133)
+#define DMUS_E_DMUSIC_RELEASED MAKE_DMHRESULTERROR(0x0134)
+#define DMUS_E_BUFFER_EMPTY MAKE_DMHRESULTERROR(0x0135)
+#define DMUS_E_BUFFER_FULL MAKE_DMHRESULTERROR(0x0136)
+#define DMUS_E_PORT_NOT_CAPTURE MAKE_DMHRESULTERROR(0x0137)
+#define DMUS_E_PORT_NOT_RENDER MAKE_DMHRESULTERROR(0x0138)
+#define DMUS_E_DSOUND_NOT_SET MAKE_DMHRESULTERROR(0x0139)
+#define DMUS_E_ALREADY_ACTIVATED MAKE_DMHRESULTERROR(0x013A)
+#define DMUS_E_INVALIDBUFFER MAKE_DMHRESULTERROR(0x013B)
+#define DMUS_E_WAVEFORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x013C)
+#define DMUS_E_SYNTHINACTIVE MAKE_DMHRESULTERROR(0x013D)
+#define DMUS_E_DSOUND_ALREADY_SET MAKE_DMHRESULTERROR(0x013E)
+#define DMUS_E_INVALID_EVENT MAKE_DMHRESULTERROR(0x013F)
+#define DMUS_E_UNSUPPORTED_STREAM MAKE_DMHRESULTERROR(0x0150)
+#define DMUS_E_ALREADY_INITED MAKE_DMHRESULTERROR(0x0151)
+#define DMUS_E_INVALID_BAND MAKE_DMHRESULTERROR(0x0152)
+#define DMUS_E_TRACK_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0155)
+#define DMUS_E_TOOL_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0156)
+#define DMUS_E_INVALID_TRACK_HDR MAKE_DMHRESULTERROR(0x0157)
+#define DMUS_E_INVALID_TOOL_HDR MAKE_DMHRESULTERROR(0x0158)
+#define DMUS_E_ALL_TOOLS_FAILED MAKE_DMHRESULTERROR(0x0159)
+#define DMUS_E_ALL_TRACKS_FAILED MAKE_DMHRESULTERROR(0x0160)
+#define DMUS_E_NOT_FOUND MAKE_DMHRESULTERROR(0x0161)
+#define DMUS_E_NOT_INIT MAKE_DMHRESULTERROR(0x0162)
+#define DMUS_E_TYPE_DISABLED MAKE_DMHRESULTERROR(0x0163)
+#define DMUS_E_TYPE_UNSUPPORTED MAKE_DMHRESULTERROR(0x0164)
+#define DMUS_E_TIME_PAST MAKE_DMHRESULTERROR(0x0165)
+#define DMUS_E_TRACK_NOT_FOUND MAKE_DMHRESULTERROR(0x0166)
+#define DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT MAKE_DMHRESULTERROR(0x0167)
+#define DMUS_E_NO_MASTER_CLOCK MAKE_DMHRESULTERROR(0x0170)
+#define DMUS_E_LOADER_NOCLASSID MAKE_DMHRESULTERROR(0x0180)
+#define DMUS_E_LOADER_BADPATH MAKE_DMHRESULTERROR(0x0181)
+#define DMUS_E_LOADER_FAILEDOPEN MAKE_DMHRESULTERROR(0x0182)
+#define DMUS_E_LOADER_FORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x0183)
+#define DMUS_E_LOADER_FAILEDCREATE MAKE_DMHRESULTERROR(0x0184)
+#define DMUS_E_LOADER_OBJECTNOTFOUND MAKE_DMHRESULTERROR(0x0185)
+#define DMUS_E_LOADER_NOFILENAME MAKE_DMHRESULTERROR(0x0186)
+#define DMUS_E_INVALIDFILE MAKE_DMHRESULTERROR(0x0200)
+#define DMUS_E_ALREADY_EXISTS MAKE_DMHRESULTERROR(0x0201)
+#define DMUS_E_OUT_OF_RANGE MAKE_DMHRESULTERROR(0x0202)
+#define DMUS_E_SEGMENT_INIT_FAILED MAKE_DMHRESULTERROR(0x0203)
+#define DMUS_E_ALREADY_SENT MAKE_DMHRESULTERROR(0x0204)
+#define DMUS_E_CANNOT_FREE MAKE_DMHRESULTERROR(0x0205)
+#define DMUS_E_CANNOT_OPEN_PORT MAKE_DMHRESULTERROR(0x0206)
+#define DMUS_E_CANNOT_CONVERT MAKE_DMHRESULTERROR(0x0207)
+#define DMUS_E_DESCEND_CHUNK_FAIL MAKE_DMHRESULTERROR(0x0210)
+#define DMUS_E_NOT_LOADED MAKE_DMHRESULTERROR(0x0211)
+#define DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE MAKE_DMHRESULTERROR(0x0213)
+#define DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE MAKE_DMHRESULTERROR(0x0214)
+#define DMUS_E_SCRIPT_ERROR_IN_SCRIPT MAKE_DMHRESULTERROR(0x0215)
+#define DMUS_E_SCRIPT_CANTLOAD_OLEAUT32 MAKE_DMHRESULTERROR(0x0216)
+#define DMUS_E_SCRIPT_LOADSCRIPT_ERROR MAKE_DMHRESULTERROR(0x0217)
+#define DMUS_E_SCRIPT_INVALID_FILE MAKE_DMHRESULTERROR(0x0218)
+#define DMUS_E_INVALID_SCRIPTTRACK MAKE_DMHRESULTERROR(0x0219)
+#define DMUS_E_SCRIPT_VARIABLE_NOT_FOUND MAKE_DMHRESULTERROR(0x021A)
+#define DMUS_E_SCRIPT_ROUTINE_NOT_FOUND MAKE_DMHRESULTERROR(0x021B)
+#define DMUS_E_SCRIPT_CONTENT_READONLY MAKE_DMHRESULTERROR(0x021C)
+#define DMUS_E_SCRIPT_NOT_A_REFERENCE MAKE_DMHRESULTERROR(0x021D)
+#define DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED MAKE_DMHRESULTERROR(0x021E)
+#define DMUS_E_INVALID_SEGMENTTRIGGERTRACK MAKE_DMHRESULTERROR(0x0220)
+#define DMUS_E_INVALID_LYRICSTRACK MAKE_DMHRESULTERROR(0x0221)
+#define DMUS_E_INVALID_PARAMCONTROLTRACK MAKE_DMHRESULTERROR(0x0222)
+#define DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR MAKE_DMHRESULTERROR(0x0223)
+#define DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR MAKE_DMHRESULTERROR(0x0224)
+#define DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE MAKE_DMHRESULTERROR(0x0225)
+#define DMUS_E_AUDIOPATHS_NOT_VALID MAKE_DMHRESULTERROR(0x0226)
+#define DMUS_E_AUDIOPATHS_IN_USE MAKE_DMHRESULTERROR(0x0227)
+#define DMUS_E_NO_AUDIOPATH_CONFIG MAKE_DMHRESULTERROR(0x0228)
+#define DMUS_E_AUDIOPATH_INACTIVE MAKE_DMHRESULTERROR(0x0229)
+#define DMUS_E_AUDIOPATH_NOBUFFER MAKE_DMHRESULTERROR(0x022A)
+#define DMUS_E_AUDIOPATH_NOPORT MAKE_DMHRESULTERROR(0x022B)
+#define DMUS_E_NO_AUDIOPATH MAKE_DMHRESULTERROR(0x022C)
+#define DMUS_E_INVALIDCHUNK MAKE_DMHRESULTERROR(0x022D)
+#define DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER MAKE_DMHRESULTERROR(0x022E)
+#define DMUS_E_INVALID_CONTAINER_OBJECT MAKE_DMHRESULTERROR(0x022F)
+
+#endif /* __WINE_DMUSIC_ERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h
new file mode 100644
index 00000000..70b8aa5e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmksctrl.h
@@ -0,0 +1,119 @@
+/*
+ * Definition of IKsControl
+ *
+ * Copyright (C) 2012 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _DMKSCTRL_
+#define _DMKSCTRL_
+
+#include <pshpack8.h>
+
+#include <objbase.h>
+
+#ifndef _KS_
+#define _KS_
+
+typedef struct {
+ union {
+ struct {
+ GUID Set;
+ ULONG Id;
+ ULONG Flags;
+ } DUMMYSTRUCTNAME;
+ LONGLONG Alignment;
+ } DUMMYUNIONNAME;
+} KSIDENTIFIER, *PKSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT;
+
+#define KSMETHOD_TYPE_NONE 0x00000000
+#define KSMETHOD_TYPE_READ 0x00000001
+#define KSMETHOD_TYPE_WRITE 0x00000002
+#define KSMETHOD_TYPE_MODIFY 0x00000003
+#define KSMETHOD_TYPE_SOURCE 0x00000004
+
+#define KSMETHOD_TYPE_SEND 0x00000001
+#define KSMETHOD_TYPE_SETSUPPORT 0x00000100
+#define KSMETHOD_TYPE_BASICSUPPORT 0x00000200
+
+#define KSPROPERTY_TYPE_GET 0x00000001
+#define KSPROPERTY_TYPE_SET 0x00000002
+#define KSPROPERTY_TYPE_SETSUPPORT 0x00000100
+#define KSPROPERTY_TYPE_BASICSUPPORT 0x00000200
+#define KSPROPERTY_TYPE_RELATIONS 0x00000400
+#define KSPROPERTY_TYPE_SERIALIZESET 0x00000800
+#define KSPROPERTY_TYPE_UNSERIALIZESET 0x00001000
+#define KSPROPERTY_TYPE_SERIALIZERAW 0x00002000
+#define KSPROPERTY_TYPE_UNSERIALIZERAW 0x00004000
+#define KSPROPERTY_TYPE_SERIALIZESIZE 0x00008000
+#define KSPROPERTY_TYPE_DEFAULTVALUES 0x00010000
+
+#define KSPROPERTY_TYPE_TOPOLOGY 0x10000000
+
+#define INTERFACE IKsControl
+DECLARE_INTERFACE_(IKsControl,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IKsControl methods ***/
+ STDMETHOD(KsProperty)(THIS_ PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData,
+ ULONG DataLength, ULONG* BytesReturned) PURE;
+ STDMETHOD(KsMethod)(THIS_ PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData,
+ ULONG DataLength, ULONG* BytesReturned) PURE;
+ STDMETHOD(KsEvent)(THIS_ PKSEVENT Event, ULONG EventLength, LPVOID EventData,
+ ULONG DataLength, ULONG* BytesReturned) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IKsControl_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IKsControl_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IKsControl_Release(p) (p)->lpVtbl->Release(p)
+/*** IKsControl methods ***/
+#define IKsControl_KsProperty(p,a,b,c,d,e) (p)->lpVtbl->KsProperty(p,a,b,c,d,e)
+#define IKsControl_KsMethod(p,a,b,c,d,e) (p)->lpVtbl->KsMethod(p,a,b,c,d,e)
+#define IKsControl_KsEvent(p,a,b,c,d,e) (p)->lpVtbl->KsEvent(p,a,b,c,d,e)
+#endif
+
+#endif /* _KS_ */
+
+#include <poppack.h>
+
+
+DEFINE_GUID(IID_IKsControl, 0x28f54685, 0x06fd, 0x11d2, 0xb2, 0x7a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96);
+
+#ifndef _KSMEDIA_
+
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_MIDI, 0x1d262760, 0xe957, 0x11cf, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_DIRECTMUSIC, 0x1a82f8bc, 0x3f8b, 0x11d2, 0xb7, 0x74, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
+
+#endif
+
+#endif /* _DMKSCTRL_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h
new file mode 100644
index 00000000..5ab0c4e8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmo.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DMO_H__
+#define __DMO_H__
+
+#include <mediaerr.h>
+
+#ifdef FIX_LOCK_NAME
+#define Lock DMOLock
+#endif
+#include <mediaobj.h>
+#ifdef FIX_LOCK_NAME
+#undef Lock
+#endif
+#include <dmoreg.h>
+#include <dmort.h>
+
+#endif /* __DMO_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h
new file mode 100644
index 00000000..cf9f8404
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmoreg.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DMOREG_H__
+#define __DMOREG_H__
+
+#include "mediaobj.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _DMO_PARTIAL_MEDIATYPE
+{
+ GUID type;
+ GUID subtype;
+} DMO_PARTIAL_MEDIATYPE, *PDMO_PARTIAL_MEDIATYPE;
+
+enum DMO_REGISTER_FLAGS
+{
+ DMO_REGISTERF_IS_KEYED = 1
+};
+
+enum DMO_ENUM_FLAGS
+{
+ DMO_ENUMF_INCLUDE_KEYED = 1
+};
+
+HRESULT WINAPI DMORegister(LPCWSTR,REFCLSID,REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,
+ DWORD,const DMO_PARTIAL_MEDIATYPE*);
+HRESULT WINAPI DMOUnregister(REFCLSID,REFGUID);
+HRESULT WINAPI DMOEnum(REFGUID,DWORD,DWORD,const DMO_PARTIAL_MEDIATYPE*,DWORD,
+ const DMO_PARTIAL_MEDIATYPE*,IEnumDMO**);
+HRESULT WINAPI DMOGetTypes(REFCLSID,ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*,
+ ULONG,ULONG*,DMO_PARTIAL_MEDIATYPE*);
+HRESULT WINAPI DMOGetName(REFCLSID,WCHAR[80]);
+
+DEFINE_GUID(DMOCATEGORY_AUDIO_DECODER,
+ 0x57f2db8b,0xe6bb,0x4513,0x9d,0x43,0xdc,0xd2,0xa6,0x59,0x31,0x25);
+DEFINE_GUID(DMOCATEGORY_AUDIO_ENCODER,
+ 0x33d9a761,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86);
+DEFINE_GUID(DMOCATEGORY_VIDEO_DECODER,
+ 0x4a69b442,0x28be,0x4991,0x96,0x9c,0xb5,0x00,0xad,0xf5,0xd8,0xa8);
+DEFINE_GUID(DMOCATEGORY_VIDEO_ENCODER,
+ 0x33d9a760,0x90c8,0x11d0,0xbd,0x43,0x00,0xa0,0xc9,0x11,0xce,0x86);
+DEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT,
+ 0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb);
+DEFINE_GUID(DMOCATEGORY_VIDEO_EFFECT,
+ 0xd990ee14,0x776c,0x4723,0xbe,0x46,0x3d,0xa2,0xf5,0x6f,0x10,0xb9);
+DEFINE_GUID(DMOCATEGORY_AUDIO_CAPTURE_EFFECT,
+ 0xf665aaba,0x3e09,0x4920,0xaa,0x5f,0x21,0x98,0x11,0x14,0x8f,0x09);
+DEFINE_GUID(DMOCATEGORY_ACOUSTIC_ECHO_CANCEL,
+ 0xbf963d80,0xc559,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1);
+DEFINE_GUID(DMOCATEGORY_AUDIO_NOISE_SUPPRESS,
+ 0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5);
+DEFINE_GUID(DMOCATEGORY_AGC,
+ 0xe88c9ba0,0xc557,0x11d0,0x8a,0x2b,0x00,0xa0,0xc9,0x25,0x5a,0xc1);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DMOREG_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h
new file mode 100644
index 00000000..1df3dd16
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmort.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DMORT_H__
+#define __DMORT_H__
+
+HRESULT WINAPI MoCopyMediaType(DMO_MEDIA_TYPE*,const DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoCreateMediaType(DMO_MEDIA_TYPE**,DWORD);
+HRESULT WINAPI MoDeleteMediaType(DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoDuplicateMediaType(DMO_MEDIA_TYPE**,const DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoFreeMediaType(DMO_MEDIA_TYPE*);
+HRESULT WINAPI MoInitMediaType(DMO_MEDIA_TYPE*,DWORD);
+
+#endif /* __DMORT_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h
new file mode 100644
index 00000000..51e89a86
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmplugin.h
@@ -0,0 +1,308 @@
+/*
+ * DirectMusic Performance Layer Plugins API
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_PLUGIN_H
+#define __WINE_DMUSIC_PLUGIN_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+#include <dmusici.h>
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * Registry path
+ */
+#define DMUS_REGSTR_PATH_TOOLS "Software\\Microsoft\\DirectMusic\\Tools"
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusicBandTrack, 0xd2ac2894,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordTrack, 0xd2ac288b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordMapTrack, 0xd2ac2896,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicCommandTrack, 0xd2ac288c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicLyricsTrack, 0x995c1cf5,0x54ff,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicMarkerTrack, 0x55a8fd00,0x4288,0x11d3,0x9b,0xd1,0x8a,0x0d,0x61,0xc8,0x88,0x35);
+DEFINE_GUID(CLSID_DirectMusicMotifTrack, 0xd2ac288e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicMuteTrack, 0xd2ac2898,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicParamControlTrack, 0x4be0537b,0x5c19,0x11d3,0x8b,0xdc,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptTrack, 0x4108fa85,0x3586,0x11d3,0x8b,0xd7,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSeqTrack, 0xd2ac2886,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSignPostTrack, 0xf17e8672,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyleTrack, 0xd2ac288d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSysExTrack, 0xd2ac2887,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicTempoTrack, 0xd2ac2885,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicTimeSigTrack, 0xd2ac2888,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicWaveTrack, 0xeed36461,0x9ea5,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */
+DEFINE_GUID(CLSID_DirectMusicMelodyFormulationTrack, 0xb0684266,0xb57f,0x11d2,0x97,0xf9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicTool, 0xd2ac28ba,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicTool8, 0x0e674303,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
+DEFINE_GUID(IID_IDirectMusicTrack, 0xf96029a1,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicTrack8, 0x0e674304,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
+
+/* typedef definitions */
+typedef struct IDirectMusicTrack *LPDIRECTMUSICTRACK;
+typedef struct IDirectMusicTrack8 *LPDIRECTMUSICTRACK8;
+typedef struct IDirectMusicTool *LPDIRECTMUSICTOOL;
+typedef struct IDirectMusicTool8 *LPDIRECTMUSICTOOL8;
+/* these are from dmusici.h and are needed here */
+typedef struct IDirectMusicPerformance *LPDIRECTMUSICPERFORMANCE;
+typedef struct IDirectMusicPerformance8 *LPDIRECTMUSICPERFORMANCE8;
+typedef struct IDirectMusicSegment *LPDIRECTMUSICSEGMENT;
+typedef struct IDirectMusicSegment8 *LPDIRECTMUSICSEGMENT8;
+typedef struct IDirectMusicSegmentState *LPDIRECTMUSICSEGMENTSTATE;
+typedef struct IDirectMusicSegmentState8 *LPDIRECTMUSICSEGMENTSTATE8;
+typedef struct IDirectMusicGraph *LPDIRECTMUSICGRAPH;
+typedef struct IDirectMusicGraph IDirectMusicGraph8, *LPDIRECTMUSICGRAPH8;
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef struct _DMUS_PMSG DMUS_PMSG;
+typedef LONG MUSIC_TIME;
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_TRACK_PARAMF_CLOCK 0x1
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_TRACKF_FLAGS DMUS_TRACKF_FLAGS;
+
+/* actual enumerations */
+enum enumDMUS_TRACKF_FLAGS {
+ DMUS_TRACKF_SEEK = 0x001,
+ DMUS_TRACKF_LOOP = 0x002,
+ DMUS_TRACKF_START = 0x004,
+ DMUS_TRACKF_FLUSH = 0x008,
+ DMUS_TRACKF_DIRTY = 0x010,
+ DMUS_TRACKF_NOTIFY_OFF = 0x020,
+ DMUS_TRACKF_PLAY_OFF = 0x040,
+ DMUS_TRACKF_LOOPEND = 0x080,
+ DMUS_TRACKF_STOP = 0x100,
+ DMUS_TRACKF_RECOMPOSE = 0x200,
+ DMUS_TRACKF_CLOCK = 0x400,
+};
+
+/*****************************************************************************
+ * IDirectMusicTool interface
+ */
+#define INTERFACE IDirectMusicTool
+DECLARE_INTERFACE_(IDirectMusicTool,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicTool methods ***/
+ STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+ STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE;
+ STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE;
+ STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE;
+ STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTool_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTool_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicTool methods ***/
+#define IDirectMusicTool_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTool_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a)
+#define IDirectMusicTool_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
+#define IDirectMusicTool_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b)
+#define IDirectMusicTool_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b)
+#define IDirectMusicTool_Flush(p,a,b,c) (p)->lpVtbl->Flush(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicTool8 interface
+ */
+#define INTERFACE IDirectMusicTool8
+DECLARE_INTERFACE_(IDirectMusicTool8,IDirectMusicTool)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicTool methods ***/
+ STDMETHOD(Init)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+ STDMETHOD(GetMsgDeliveryType)(THIS_ DWORD *pdwDeliveryType) PURE;
+ STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD *pdwNumElements) PURE;
+ STDMETHOD(GetMediaTypes)(THIS_ DWORD **padwMediaTypes, DWORD dwNumElements) PURE;
+ STDMETHOD(ProcessPMsg)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(Flush)(THIS_ struct IDirectMusicPerformance *pPerf, DMUS_PMSG *pPMSG, REFERENCE_TIME rtTime) PURE;
+ /*** IDirectMusicTool8 methods ***/
+ STDMETHOD(Clone)(THIS_ IDirectMusicTool **ppTool) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTool8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTool8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTool8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicTool methods ***/
+#define IDirectMusicTool8_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTool8_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a)
+#define IDirectMusicTool8_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
+#define IDirectMusicTool8_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b)
+#define IDirectMusicTool8_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b)
+#define IDirectMusicTool8_Flush(p,a,b) (p)->lpVtbl->Flush(p,a,b)
+/*** IDirectMusicTool8 methods ***/
+#define IDirectMusicTool8_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicTrack interface
+ */
+#define INTERFACE IDirectMusicTrack
+DECLARE_INTERFACE_(IDirectMusicTrack,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicTrack methods ***/
+ STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE;
+ STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE;
+ STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE;
+ STDMETHOD(Play)(THIS_ void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;
+ STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+ STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE;
+ STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE;
+ STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTrack_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTrack_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicTrack methods ***/
+#define IDirectMusicTrack_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTrack_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
+#define IDirectMusicTrack_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a)
+#define IDirectMusicTrack_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d)
+#define IDirectMusicTrack_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c)
+#define IDirectMusicTrack_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a)
+#define IDirectMusicTrack_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicTrack_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicTrack_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicTrack8 interface
+ */
+#define INTERFACE IDirectMusicTrack8
+DECLARE_INTERFACE_(IDirectMusicTrack8,IDirectMusicTrack)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicTrack methods ***/
+ STDMETHOD(Init)(THIS_ struct IDirectMusicSegment *pSegment) PURE;
+ STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState *pSegmentState, struct IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags) PURE;
+ STDMETHOD(EndPlay)(THIS_ void *pStateData) PURE;
+ STDMETHOD(Play)(THIS_ void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;
+ STDMETHOD(GetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+ STDMETHOD(SetParam)(THIS_ REFGUID rguidType, MUSIC_TIME mtTime, void *pParam) PURE;
+ STDMETHOD(IsParamSupported)(THIS_ REFGUID rguidType) PURE;
+ STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack) PURE;
+ /*** IDirectMusicTrack8 methods ***/
+ STDMETHOD(PlayEx)(THIS_ void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, struct IDirectMusicPerformance *pPerf, struct IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID) PURE;
+ STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags) PURE;
+ STDMETHOD(SetParamEx)(THIS_ REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags) PURE;
+ STDMETHOD(Compose)(THIS_ IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE;
+ STDMETHOD(Join)(THIS_ IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicTrack8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTrack8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTrack8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicTrack methods ***/
+#define IDirectMusicTrack8_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTrack8_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
+#define IDirectMusicTrack8_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a)
+#define IDirectMusicTrack8_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack8_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d)
+#define IDirectMusicTrack8_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c)
+#define IDirectMusicTrack8_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a)
+#define IDirectMusicTrack8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicTrack8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicTrack8_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+/*** IDirectMusicTrack8 methods ***/
+#define IDirectMusicTrack8_PlayEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlayEx(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack8_GetParamEx(p,a,b,c,d,e,f) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f)
+#define IDirectMusicTrack8_SetParamEx(p,a,b,c,d,e) (p)->lpVtbl->SetParamEx(p,a,b,c,d,e)
+#define IDirectMusicTrack8_Compose(p,a,b,c) (p)->lpVtbl->Compose(p,a,b,c)
+#define IDirectMusicTrack8_Join(p,a,b,c,d,e) (p)->lpVtbl->Join(p,a,b,c,d,e)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_PLUGIN_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h
new file mode 100644
index 00000000..b44bff50
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusbuff.h
@@ -0,0 +1,61 @@
+/* DirectMusic Buffer Format
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_BUFFER_H
+#define __WINE_DMUSIC_BUFFER_H
+
+#include <dmdls.h>
+
+/*****************************************************************************
+ * Misc. definitions
+ */
+#define QWORD_ALIGN(x) (((x) + 7) & ~7)
+#define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_EVENT_STRUCTURED 0x1
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_EVENTHEADER DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER;
+
+/* actual structure*/
+#include <pshpack4.h>
+struct _DMUS_EVENTHEADER {
+ DWORD cbEvent;
+ DWORD dwChannelGroup;
+ REFERENCE_TIME rtDelta;
+ DWORD dwFlags;
+};
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_BUFFER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h
new file mode 100644
index 00000000..ff9991bf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicc.h
@@ -0,0 +1,775 @@
+/* DirectMusic Core API Stuff
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_CORE_H
+#define __WINE_DMUSIC_CORE_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+
+#include <dls1.h>
+#include <dmerror.h>
+#include <dmdls.h>
+#include <dsound.h>
+#include <dmusbuff.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusic, 0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21);
+DEFINE_GUID(CLSID_DirectMusicCollection, 0x480ff4b0,0x28b2,0x11d1,0xbe,0xf7,0x00,0xc0,0x4f,0xbf,0x8f,0xef);
+DEFINE_GUID(CLSID_DirectMusicSynth, 0x58c2b4d0,0x46e7,0x11d1,0x89,0xac,0x00,0xa0,0xc9,0x05,0x41,0x29);
+
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusic, 0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusic2, 0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusic8, 0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);
+DEFINE_GUID(IID_IDirectMusicBuffer, 0xd2ac2878,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicCollection, 0xd2ac287c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicDownload, 0xd2ac287b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicInstrument, 0xd2ac287d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusicPortDownload, 0xd2ac287a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+#define IID_IDirectMusicCollection8 IID_IDirectMusicCollection
+#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload
+#define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument
+#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument
+#define IID_IDirectMusicPort8 IID_IDirectMusicPort
+#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload
+#define IID_IDirectMusicThru8 IID_IDirectMusicThru
+
+/* GUIDs - property set */
+DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps, 0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND, 0x0aa97844,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE, 0x0aa97845,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_WavesReverb, 0x04cb5622,0x32e5,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_WriteLatency, 0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_WritePeriod, 0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+/* typedef definitions */
+typedef struct IDirectMusic *LPDIRECTMUSIC;
+typedef struct IDirectMusic8 *LPDIRECTMUSIC8;
+typedef struct IDirectMusicBuffer *LPDIRECTMUSICBUFFER;
+typedef struct IDirectMusicBuffer IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8;
+typedef struct IDirectMusicInstrument *LPDIRECTMUSICINSTRUMENT;
+typedef struct IDirectMusicInstrument IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8;
+typedef struct IDirectMusicDownloadedInstrument *LPDIRECTMUSICDOWNLOADEDINSTRUMENT;
+typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;
+typedef struct IDirectMusicCollection *LPDIRECTMUSICCOLLECTION;
+typedef struct IDirectMusicCollection IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8;
+typedef struct IDirectMusicDownload *LPDIRECTMUSICDOWNLOAD;
+typedef struct IDirectMusicDownload IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8;
+typedef struct IDirectMusicPortDownload *LPDIRECTMUSICPORTDOWNLOAD;
+typedef struct IDirectMusicPortDownload IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8;
+typedef struct IDirectMusicPort *LPDIRECTMUSICPORT;
+typedef struct IDirectMusicPort IDirectMusicPort8, *LPDIRECTMUSICPORT8;
+typedef struct IDirectMusicThru *LPDIRECTMUSICTHRU;
+typedef struct IDirectMusicThru IDirectMusicThru8, *LPDIRECTMUSICTHRU8;
+typedef struct IReferenceClock *LPREFERENCECLOCK;
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef ULONGLONG SAMPLE_TIME, *LPSAMPLE_TIME;
+typedef ULONGLONG SAMPLE_POSITION, *LPSAMPLE_POSITION;
+
+
+/*****************************************************************************
+ * Flags
+ */
+#ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_
+#define _DIRECTAUDIO_PRIORITIES_DEFINED_
+
+#define DAUD_CRITICAL_VOICE_PRIORITY 0xF0000000
+#define DAUD_HIGH_VOICE_PRIORITY 0xC0000000
+#define DAUD_STANDARD_VOICE_PRIORITY 0x80000000
+#define DAUD_LOW_VOICE_PRIORITY 0x40000000
+#define DAUD_PERSIST_VOICE_PRIORITY 0x10000000
+
+#define DAUD_CHAN1_VOICE_PRIORITY_OFFSET 0x0000000E
+#define DAUD_CHAN2_VOICE_PRIORITY_OFFSET 0x0000000D
+#define DAUD_CHAN3_VOICE_PRIORITY_OFFSET 0x0000000C
+#define DAUD_CHAN4_VOICE_PRIORITY_OFFSET 0x0000000B
+#define DAUD_CHAN5_VOICE_PRIORITY_OFFSET 0x0000000A
+#define DAUD_CHAN6_VOICE_PRIORITY_OFFSET 0x00000009
+#define DAUD_CHAN7_VOICE_PRIORITY_OFFSET 0x00000008
+#define DAUD_CHAN8_VOICE_PRIORITY_OFFSET 0x00000007
+#define DAUD_CHAN9_VOICE_PRIORITY_OFFSET 0x00000006
+#define DAUD_CHAN10_VOICE_PRIORITY_OFFSET 0x0000000F
+#define DAUD_CHAN11_VOICE_PRIORITY_OFFSET 0x00000005
+#define DAUD_CHAN12_VOICE_PRIORITY_OFFSET 0x00000004
+#define DAUD_CHAN13_VOICE_PRIORITY_OFFSET 0x00000003
+#define DAUD_CHAN14_VOICE_PRIORITY_OFFSET 0x00000002
+#define DAUD_CHAN15_VOICE_PRIORITY_OFFSET 0x00000001
+#define DAUD_CHAN16_VOICE_PRIORITY_OFFSET 0x00000000
+
+#define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)
+#endif /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */
+
+#define DMUS_CLOCKF_GLOBAL 0x1
+
+#define DMUS_EFFECT_NONE 0x0
+#define DMUS_EFFECT_REVERB 0x1
+#define DMUS_EFFECT_CHORUS 0x2
+#define DMUS_EFFECT_DELAY 0x4
+
+#define DMUS_MAX_DESCRIPTION 0x80
+#define DMUS_MAX_DRIVER 0x80
+
+#define DMUS_PC_INPUTCLASS 0x0
+#define DMUS_PC_OUTPUTCLASS 0x1
+
+#define DMUS_PC_DLS 0x00000001
+#define DMUS_PC_EXTERNAL 0x00000002
+#define DMUS_PC_SOFTWARESYNTH 0x00000004
+#define DMUS_PC_MEMORYSIZEFIXED 0x00000008
+#define DMUS_PC_GMINHARDWARE 0x00000010
+#define DMUS_PC_GSINHARDWARE 0x00000020
+#define DMUS_PC_XGINHARDWARE 0x00000040
+#define DMUS_PC_DIRECTSOUND 0x00000080
+#define DMUS_PC_SHAREABLE 0x00000100
+#define DMUS_PC_DLS2 0x00000200
+#define DMUS_PC_AUDIOPATH 0x00000400
+#define DMUS_PC_WAVE 0x00000800
+#define DMUS_PC_SYSTEMMEMORY 0x7FFFFFFF
+
+#define DMUS_PORT_WINMM_DRIVER 0x0
+#define DMUS_PORT_USER_MODE_SYNTH 0x1
+#define DMUS_PORT_KERNEL_MODE 0x2
+
+#define DMUS_PORT_FEATURE_AUDIOPATH 0x1
+#define DMUS_PORT_FEATURE_STREAMING 0x2
+
+#define DMUS_PORTPARAMS_VOICES 0x01
+#define DMUS_PORTPARAMS_CHANNELGROUPS 0x02
+#define DMUS_PORTPARAMS_AUDIOCHANNELS 0x04
+#define DMUS_PORTPARAMS_SAMPLERATE 0x08
+#define DMUS_PORTPARAMS_EFFECTS 0x20
+#define DMUS_PORTPARAMS_SHARE 0x40
+#define DMUS_PORTPARAMS_FEATURES 0x80
+
+#define DMUS_VOLUME_MAX 2000
+#define DMUS_VOLUME_MIN -20000
+
+#define DMUS_SYNTHSTATS_VOICES 0x01
+#define DMUS_SYNTHSTATS_TOTAL_CPU 0x02
+#define DMUS_SYNTHSTATS_CPU_PER_VOICE 0x04
+#define DMUS_SYNTHSTATS_LOST_NOTES 0x08
+#define DMUS_SYNTHSTATS_PEAK_VOLUME 0x10
+#define DMUS_SYNTHSTATS_FREE_MEMORY 0x20
+#define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY
+
+#define DSBUSID_FIRST_SPKR_LOC 0x00000000
+#define DSBUSID_FRONT_LEFT 0x00000000
+#define DSBUSID_LEFT 0x00000000
+#define DSBUSID_FRONT_RIGHT 0x00000001
+#define DSBUSID_RIGHT 0x00000001
+#define DSBUSID_FRONT_CENTER 0x00000002
+#define DSBUSID_LOW_FREQUENCY 0x00000003
+#define DSBUSID_BACK_LEFT 0x00000004
+#define DSBUSID_BACK_RIGHT 0x00000005
+#define DSBUSID_FRONT_LEFT_OF_CENTER 0x00000006
+#define DSBUSID_FRONT_RIGHT_OF_CENTER 0x00000007
+#define DSBUSID_BACK_CENTER 0x00000008
+#define DSBUSID_SIDE_LEFT 0x00000009
+#define DSBUSID_SIDE_RIGHT 0x0000000A
+#define DSBUSID_TOP_CENTER 0x0000000B
+#define DSBUSID_TOP_FRONT_LEFT 0x0000000C
+#define DSBUSID_TOP_FRONT_CENTER 0x0000000D
+#define DSBUSID_TOP_FRONT_RIGHT 0x0000000E
+#define DSBUSID_TOP_BACK_LEFT 0x0000000F
+#define DSBUSID_TOP_BACK_CENTER 0x00000010
+#define DSBUSID_TOP_BACK_RIGHT 0x011
+#define DSBUSID_LAST_SPKR_LOC 0x00000011
+#define DSBUSID_IS_SPKR_LOC(id) (((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC))
+
+#define DSBUSID_REVERB_SEND 0x00000040
+#define DSBUSID_CHORUS_SEND 0x00000041
+
+#define DSBUSID_DYNAMIC_0 0x00000200
+
+#define DSBUSID_NULL 0xFFFFFFFF
+
+/*****************************************************************************
+ * Enumerations
+ */
+typedef enum {
+ DMUS_CLOCK_SYSTEM = 0x0,
+ DMUS_CLOCK_WAVE = 0x1
+} DMUS_CLOCKTYPE;
+
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_BUFFERDESC DMUS_BUFFERDESC, *LPDMUS_BUFFERDESC;
+typedef struct _DMUS_PORTCAPS DMUS_PORTCAPS, *LPDMUS_PORTCAPS;
+typedef struct _DMUS_PORTPARAMS DMUS_PORTPARAMS7, *LPDMUS_PORTPARAMS7;
+typedef struct _DMUS_PORTPARAMS8 DMUS_PORTPARAMS8, *LPDMUS_PORTPARAMS8;
+typedef DMUS_PORTPARAMS8 DMUS_PORTPARAMS, *LPDMUS_PORTPARAMS;
+typedef struct _DMUS_SYNTHSTATS DMUS_SYNTHSTATS, *LPDMUS_SYNTHSTATS;
+typedef struct _DMUS_SYNTHSTATS8 DMUS_SYNTHSTATS8, *LPDMUS_SYNTHSTATS8;
+typedef struct _DMUS_WAVES_REVERB_PARAMS DMUS_WAVES_REVERB_PARAMS, *LPDMUS_WAVES_REVERB_PARAMS;
+typedef struct _DMUS_CLOCKINFO7 DMUS_CLOCKINFO7, *LPDMUS_CLOCKINFO7;
+typedef struct _DMUS_CLOCKINFO8 DMUS_CLOCKINFO8, *LPDMUS_CLOCKINFO8;
+typedef DMUS_CLOCKINFO8 DMUS_CLOCKINFO, *LPDMUS_CLOCKINFO;
+
+
+/* actual structures */
+struct _DMUS_BUFFERDESC {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidBufferFormat;
+ DWORD cbBuffer;
+} ;
+
+struct _DMUS_PORTCAPS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidPort;
+ DWORD dwClass;
+ DWORD dwType;
+ DWORD dwMemorySize;
+ DWORD dwMaxChannelGroups;
+ DWORD dwMaxVoices;
+ DWORD dwMaxAudioChannels;
+ DWORD dwEffectFlags;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+};
+
+struct _DMUS_PORTPARAMS {
+ DWORD dwSize;
+ DWORD dwValidParams;
+ DWORD dwVoices;
+ DWORD dwChannelGroups;
+ DWORD dwAudioChannels;
+ DWORD dwSampleRate;
+ DWORD dwEffectFlags;
+ BOOL fShare;
+};
+
+struct _DMUS_PORTPARAMS8 {
+ DWORD dwSize;
+ DWORD dwValidParams;
+ DWORD dwVoices;
+ DWORD dwChannelGroups;
+ DWORD dwAudioChannels;
+ DWORD dwSampleRate;
+ DWORD dwEffectFlags;
+ BOOL fShare;
+ DWORD dwFeatures;
+};
+
+struct _DMUS_SYNTHSTATS {
+ DWORD dwSize;
+ DWORD dwValidStats;
+ DWORD dwVoices;
+ DWORD dwTotalCPU;
+ DWORD dwCPUPerVoice;
+ DWORD dwLostNotes;
+ DWORD dwFreeMemory;
+ LONG lPeakVolume;
+};
+
+struct _DMUS_SYNTHSTATS8 {
+ DWORD dwSize;
+ DWORD dwValidStats;
+ DWORD dwVoices;
+ DWORD dwTotalCPU;
+ DWORD dwCPUPerVoice;
+ DWORD dwLostNotes;
+ DWORD dwFreeMemory;
+ LONG lPeakVolume;
+ DWORD dwSynthMemUse;
+};
+
+struct _DMUS_WAVES_REVERB_PARAMS {
+ float fInGain;
+ float fReverbMix;
+ float fReverbTime;
+ float fHighFreqRTRatio;
+};
+
+struct _DMUS_CLOCKINFO7 {
+ DWORD dwSize;
+ DMUS_CLOCKTYPE ctType;
+ GUID guidClock;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+};
+
+struct _DMUS_CLOCKINFO8 {
+ DWORD dwSize;
+ DMUS_CLOCKTYPE ctType;
+ GUID guidClock;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+ DWORD dwFlags;
+};
+
+
+/*****************************************************************************
+ * IDirectMusic interface
+ */
+#define INTERFACE IDirectMusic
+DECLARE_INTERFACE_(IDirectMusic,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusic methods ***/
+ STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE;
+ STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE;
+ STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE;
+ STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+ STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE;
+ STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusic_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusic_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusic_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusic methods ***/
+#define IDirectMusic_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b)
+#define IDirectMusic_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
+#define IDirectMusic_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d)
+#define IDirectMusic_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b)
+#define IDirectMusic_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b)
+#define IDirectMusic_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusic_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusic_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a)
+#define IDirectMusic_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusic8 interface
+ */
+#define INTERFACE IDirectMusic8
+DECLARE_INTERFACE_(IDirectMusic8,IDirectMusic)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusic methods ***/
+ STDMETHOD(EnumPort)(THIS_ DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) PURE;
+ STDMETHOD(CreateMusicBuffer)(THIS_ LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER *ppBuffer, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(CreatePort)(THIS_ REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT *ppPort, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumMasterClock)(THIS_ DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) PURE;
+ STDMETHOD(GetMasterClock)(THIS_ LPGUID pguidClock, struct IReferenceClock **ppReferenceClock) PURE;
+ STDMETHOD(SetMasterClock)(THIS_ REFGUID rguidClock) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+ STDMETHOD(GetDefaultPort)(THIS_ LPGUID pguidPort) PURE;
+ STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+ /*** IDirectMusic8 methods ***/
+ STDMETHOD(SetExternalMasterClock)(THIS_ struct IReferenceClock *pClock) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusic8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusic8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusic8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusic methods ***/
+#define IDirectMusic8_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b)
+#define IDirectMusic8_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
+#define IDirectMusic8_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d)
+#define IDirectMusic8_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b)
+#define IDirectMusic8_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b)
+#define IDirectMusic8_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusic8_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusic8_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a)
+#define IDirectMusic8_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+/*** IDirectMusic8 methods ***/
+#define IDirectMusic8_SetExternalMasterClock(p,a) (p)->lpVtbl->SetExternalMasterClock(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicBuffer interface
+ */
+#define INTERFACE IDirectMusicBuffer
+DECLARE_INTERFACE_(IDirectMusicBuffer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicBuffer methods ***/
+ STDMETHOD(Flush)(THIS) PURE;
+ STDMETHOD(TotalTime)(THIS_ LPREFERENCE_TIME prtTime) PURE;
+ STDMETHOD(PackStructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) PURE;
+ STDMETHOD(PackUnstructured)(THIS_ REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) PURE;
+ STDMETHOD(ResetReadPtr)(THIS) PURE;
+ STDMETHOD(GetNextEvent)(THIS_ LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE *ppData) PURE;
+ STDMETHOD(GetRawBufferPtr)(THIS_ LPBYTE *ppData) PURE;
+ STDMETHOD(GetStartTime)(THIS_ LPREFERENCE_TIME prt) PURE;
+ STDMETHOD(GetUsedBytes)(THIS_ LPDWORD pcb) PURE;
+ STDMETHOD(GetMaxBytes)(THIS_ LPDWORD pcb) PURE;
+ STDMETHOD(GetBufferFormat)(THIS_ LPGUID pGuidFormat) PURE;
+ STDMETHOD(SetStartTime)(THIS_ REFERENCE_TIME rt) PURE;
+ STDMETHOD(SetUsedBytes)(THIS_ DWORD cb) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicBuffer methods ***/
+#define IDirectMusicBuffer_Flush(p) (p)->lpVtbl->Flush(p)
+#define IDirectMusicBuffer_TotalTime(p,a) (p)->lpVtbl->TotalTime(p,a)
+#define IDirectMusicBuffer_PackStructured(p,a,b,c) (p)->lpVtbl->PackStructured(p,a,b,c)
+#define IDirectMusicBuffer_PackUnstructured(p,a,b,c,d) (p)->lpVtbl->PackUnstructured(p,a,b,c,d)
+#define IDirectMusicBuffer_ResetReadPtr(p) (p)->lpVtbl->ResetReadPtr(p)
+#define IDirectMusicBuffer_GetNextEvent(p,a,b,c,d) (p)->lpVtbl->GetNextEvent(p,a,b,c,d)
+#define IDirectMusicBuffer_GetRawBufferPtr(p,a) (p)->lpVtbl->GetRawBufferPtr(p,a)
+#define IDirectMusicBuffer_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicBuffer_GetUsedBytes(p,a) (p)->lpVtbl->GetUsedBytes(p,a)
+#define IDirectMusicBuffer_GetMaxBytes(p,a) (p)->lpVtbl->GetMaxBytes(p,a)
+#define IDirectMusicBuffer_GetBufferFormat(p,a) (p)->lpVtbl->GetBufferFormat(p,a)
+#define IDirectMusicBuffer_SetStartTime(p,a) (p)->lpVtbl->SetStartTime(p,a)
+#define IDirectMusicBuffer_SetUsedBytes(p,a) (p)->lpVtbl->SetUsedBytes(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicInstrument interface
+ */
+#define INTERFACE IDirectMusicInstrument
+DECLARE_INTERFACE_(IDirectMusicInstrument,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicInstrument methods ***/
+ STDMETHOD(GetPatch)(THIS_ DWORD *pdwPatch) PURE;
+ STDMETHOD(SetPatch)(THIS_ DWORD dwPatch) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicInstrument_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicInstrument_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicInstrument methods ***/
+#define IDirectMusicInstrument_GetPatch(p,a) (p)->lpVtbl->GetPatch(p,a)
+#define IDirectMusicInstrument_SetPatch(p,a) (p)->lpVtbl->SetPatch(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicDownloadedInstrument interface
+ */
+#define INTERFACE IDirectMusicDownloadedInstrument
+DECLARE_INTERFACE_(IDirectMusicDownloadedInstrument,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /* no IDirectMusicDownloadedInstrument methods at this time */
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicDownloadedInstrument_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicDownloadedInstrument_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicDownloadedInstrument methods ***/
+/* none at this time */
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicCollection interface
+ */
+#define INTERFACE IDirectMusicCollection
+DECLARE_INTERFACE_(IDirectMusicCollection,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicCollection methods ***/
+ STDMETHOD(GetInstrument)(THIS_ DWORD dwPatch, IDirectMusicInstrument **ppInstrument) PURE;
+ STDMETHOD(EnumInstrument)(THIS_ DWORD dwIndex, DWORD *pdwPatch, LPWSTR pwszName, DWORD dwNameLen) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicCollection_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicCollection_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicCollection_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicCollection methods ***/
+#define IDirectMusicCollection_GetInstrument(p,a,b) (p)->lpVtbl->GetInstrument(p,a,b)
+#define IDirectMusicCollection_EnumInstrument(p,a,b,c,d) (p)->lpVtbl->EnumInstrument(p,a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicDownload interface
+ */
+#define INTERFACE IDirectMusicDownload
+DECLARE_INTERFACE_(IDirectMusicDownload,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicDownload methods ***/
+ STDMETHOD(GetBuffer)(THIS_ void **ppvBuffer, DWORD *pdwSize) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicDownload_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicDownload_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicDownload methods ***/
+#define IDirectMusicDownload_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPortDownload interface
+ */
+#define INTERFACE IDirectMusicPortDownload
+DECLARE_INTERFACE_(IDirectMusicPortDownload,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicPortDownload methods ***/
+ STDMETHOD(GetBuffer)(THIS_ DWORD dwDLId, IDirectMusicDownload **ppIDMDownload) PURE;
+ STDMETHOD(AllocateBuffer)(THIS_ DWORD dwSize, IDirectMusicDownload **ppIDMDownload) PURE;
+ STDMETHOD(GetDLId)(THIS_ DWORD *pdwStartDLId, DWORD dwCount) PURE;
+ STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+ STDMETHOD(Download)(THIS_ IDirectMusicDownload *pIDMDownload) PURE;
+ STDMETHOD(Unload)(THIS_ IDirectMusicDownload *pIDMDownload) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPortDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPortDownload_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPortDownload_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicPortDownload methods ***/
+#define IDirectMusicPortDownload_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
+#define IDirectMusicPortDownload_AllocateBuffer(p,a,b) (p)->lpVtbl->AllocateBuffer(p,a,b)
+#define IDirectMusicPortDownload_GetDLId(p,a,b) (p)->lpVtbl->GetDLId(p,a,b)
+#define IDirectMusicPortDownload_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a)
+#define IDirectMusicPortDownload_Download(p,a) (p)->lpVtbl->Download(p,a)
+#define IDirectMusicPortDownload_Unload(p,a) (p)->lpVtbl->GetBuffer(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPort interface
+ */
+#define INTERFACE IDirectMusicPort
+DECLARE_INTERFACE_(IDirectMusicPort,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicPort methods ***/
+ STDMETHOD(PlayBuffer)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
+ STDMETHOD(SetReadNotificationHandle)(THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(Read)(THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
+ STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInstrument, IDirectMusicDownloadedInstrument **ppDownloadedInstrument, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges) PURE;
+ STDMETHOD(UnloadInstrument)(THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE;
+ STDMETHOD(GetLatencyClock)(THIS_ struct IReferenceClock **ppClock) PURE;
+ STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+ STDMETHOD(Compact)(THIS) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDMUS_PORTCAPS pPortCaps) PURE;
+ STDMETHOD(DeviceIoControl)(THIS_ DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) PURE;
+ STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwChannelGroups) PURE;
+ STDMETHOD(GetNumChannelGroups)(THIS_ LPDWORD pdwChannelGroups) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fActive) PURE;
+ STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+ STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+ STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPort_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPort_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPort_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicPort methods ***/
+#define IDirectMusicPort_PlayBuffer(p,a) (p)->lpVtbl->PlayBuffer(p,a)
+#define IDirectMusicPort_SetReadNotificationHandle(p,a) (p)->lpVtbl->SetReadNotificationHandle(p,a)
+#define IDirectMusicPort_Read(p,a) (p)->lpVtbl->Read(p,a)
+#define IDirectMusicPort_DownloadInstrument(p,a,b,c,d) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d)
+#define IDirectMusicPort_UnloadInstrument(p,a) (p)->lpVtbl->UnloadInstrument(p,a)
+#define IDirectMusicPort_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicPort_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicPort_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectMusicPort_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) (p)->lpVtbl->DeviceIoControl(p,a,b,c,d,e,f,g)
+#define IDirectMusicPort_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicPort_GetNumChannelGroups(p,a) (p)->lpVtbl->GetNumChannelGroups(p,a)
+#define IDirectMusicPort_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicPort_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicPort_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicPort_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusicPort_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicThru interface
+ */
+#define INTERFACE IDirectMusicThru
+DECLARE_INTERFACE_(IDirectMusicThru,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicThru methods ***/
+ STDMETHOD(ThruChannel)(THIS_ DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicThru_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicThru_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicThru_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicThru methods ***/
+#define IDirectMusicThru_ThruChannel(p,a,b,c,d,e) (p)->lpVtbl->ThruChannel(p,a,b,c,d,e)
+#endif
+
+
+#ifndef __IReferenceClock_INTERFACE_DEFINED__
+#define __IReferenceClock_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
+
+/*****************************************************************************
+ * IReferenceClock interface
+ */
+#define INTERFACE IReferenceClock
+DECLARE_INTERFACE_(IReferenceClock,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IReferenceClock methods ***/
+ STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *pTime) PURE;
+ STDMETHOD(AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD *pdwAdviseCookie) PURE;
+ STDMETHOD(AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD *pdwAdviseCookie) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD dwAdviseCookie) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IReferenceClock_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IReferenceClock_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IReferenceClock_Release(p) (p)->lpVtbl->Release(p)
+/*** IReferenceClock methods ***/
+#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a)
+#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d)
+#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)
+#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
+#endif
+
+#endif /* __IReferenceClock_INTERFACE_DEFINED__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_CORE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h
new file mode 100644
index 00000000..a64e580e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusicf.h
@@ -0,0 +1,918 @@
+/*
+ * DirectMusic File Formats
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_FILEFORMATS_H
+#define __WINE_DMUSIC_FILEFORMATS_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*****************************************************************************
+ * FOURCC Definitions
+ */
+/* Common chunks */
+#define DMUS_FOURCC_GUID_CHUNK mmioFOURCC('g','u','i','d')
+#define DMUS_FOURCC_INFO_LIST mmioFOURCC('I','N','F','O')
+#define DMUS_FOURCC_UNFO_LIST mmioFOURCC('U','N','F','O')
+#define DMUS_FOURCC_UNAM_CHUNK mmioFOURCC('U','N','A','M')
+#define DMUS_FOURCC_UART_CHUNK mmioFOURCC('U','A','R','T')
+#define DMUS_FOURCC_UCOP_CHUNK mmioFOURCC('U','C','O','P')
+#define DMUS_FOURCC_USBJ_CHUNK mmioFOURCC('U','S','B','J')
+#define DMUS_FOURCC_UCMT_CHUNK mmioFOURCC('U','C','M','T')
+#define DMUS_FOURCC_CATEGORY_CHUNK mmioFOURCC('c','a','t','g')
+#define DMUS_FOURCC_VERSION_CHUNK mmioFOURCC('v','e','r','s')
+/* AudioPath */
+#define DMUS_FOURCC_AUDIOPATH_FORM mmioFOURCC('D','M','A','P')
+#define DMUS_FOURCC_PORTCONFIGS_LIST mmioFOURCC('p','c','s','l')
+#define DMUS_FOURCC_PORTCONFIG_LIST mmioFOURCC('p','c','f','l')
+#define DMUS_FOURCC_PORTCONFIG_ITEM mmioFOURCC('p','c','f','h')
+#define DMUS_FOURCC_PORTPARAMS_ITEM mmioFOURCC('p','p','r','h')
+#define DMUS_FOURCC_DSBUFFER_LIST mmioFOURCC('d','b','f','l')
+#define DMUS_FOURCC_DSBUFFATTR_ITEM mmioFOURCC('d','d','a','h')
+#define DMUS_FOURCC_PCHANNELS_LIST mmioFOURCC('p','c','h','l')
+#define DMUS_FOURCC_PCHANNELS_ITEM mmioFOURCC('p','c','h','h')
+/* Band */
+#define DMUS_FOURCC_BAND_FORM mmioFOURCC('D','M','B','D')
+#define DMUS_FOURCC_INSTRUMENTS_LIST mmioFOURCC('l','b','i','l')
+#define DMUS_FOURCC_INSTRUMENT_LIST mmioFOURCC('l','b','i','n')
+#define DMUS_FOURCC_INSTRUMENT_CHUNK mmioFOURCC('b','i','n','s')
+/* Chordmap */
+#define DMUS_FOURCC_CHORDMAP_FORM mmioFOURCC('D','M','P','R')
+#define DMUS_FOURCC_IOCHORDMAP_CHUNK mmioFOURCC('p','e','r','h')
+#define DMUS_FOURCC_SUBCHORD_CHUNK mmioFOURCC('c','h','d','t')
+#define DMUS_FOURCC_CHORDENTRY_CHUNK mmioFOURCC('c','h','e','h')
+#define DMUS_FOURCC_SUBCHORDID_CHUNK mmioFOURCC('s','b','c','n')
+#define DMUS_FOURCC_IONEXTCHORD_CHUNK mmioFOURCC('n','c','r','d')
+#define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK mmioFOURCC('n','c','s','q')
+#define DMUS_FOURCC_IOSIGNPOST_CHUNK mmioFOURCC('s','p','s','h')
+#define DMUS_FOURCC_CHORDNAME_CHUNK mmioFOURCC('I','N','A','M')
+#define DMUS_FOURCC_CHORDENTRY_LIST mmioFOURCC('c','h','o','e')
+#define DMUS_FOURCC_CHORDMAP_LIST mmioFOURCC('c','m','a','p')
+#define DMUS_FOURCC_CHORD_LIST mmioFOURCC('c','h','r','d')
+#define DMUS_FOURCC_CHORDPALETTE_LIST mmioFOURCC('c','h','p','l')
+#define DMUS_FOURCC_CADENCE_LIST mmioFOURCC('c','a','d','e')
+#define DMUS_FOURCC_SIGNPOSTITEM_LIST mmioFOURCC('s','p','s','t')
+#define DMUS_FOURCC_SIGNPOST_LIST mmioFOURCC('s','p','s','q')
+/* Container */
+#define DMUS_FOURCC_CONTAINER_FORM mmioFOURCC('D','M','C','N')
+#define DMUS_FOURCC_CONTAINER_CHUNK mmioFOURCC('c','o','n','h')
+#define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK mmioFOURCC('c','o','b','a')
+#define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK mmioFOURCC('c','o','b','h')
+#define DMUS_FOURCC_CONTAINED_OBJECTS_LIST mmioFOURCC('c','o','s','l')
+#define DMUS_FOURCC_CONTAINED_OBJECT_LIST mmioFOURCC('c','o','b','l')
+/* DirectSound Buffer Configuration */
+#define DMUS_FOURCC_DSBC_FORM mmioFOURCC('D','S','B','C')
+#define DMUS_FOURCC_DSBD_CHUNK mmioFOURCC('d','s','b','d')
+#define DMUS_FOURCC_BSID_CHUNK mmioFOURCC('b','s','i','d')
+#define DMUS_FOURCC_DS3D_CHUNK mmioFOURCC('d','s','3','d')
+#define DMUS_FOURCC_DSBC_LIST mmioFOURCC('f','x','l','s')
+/* Effects */
+#define DMUS_FOURCC_DSFX_FORM mmioFOURCC('D','S','F','X')
+#define DMUS_FOURCC_DSFX_CHUNK mmioFOURCC('f','x','h','r')
+#define DMUS_FOURCC_DSFX_DATA mmioFOURCC('d','a','t','a')
+/* Reference */
+#define DMUS_FOURCC_REF_LIST mmioFOURCC('D','M','R','F')
+#define DMUS_FOURCC_REF_CHUNK mmioFOURCC('r','e','f','h')
+#define DMUS_FOURCC_DATE_CHUNK mmioFOURCC('d','a','t','e')
+#define DMUS_FOURCC_NAME_CHUNK mmioFOURCC('n','a','m','e')
+#define DMUS_FOURCC_FILE_CHUNK mmioFOURCC('f','i','l','e')
+/* Script */
+#define DMUS_FOURCC_SCRIPT_FORM mmioFOURCC('D','M','S','C')
+#define DMUS_FOURCC_SCRIPT_CHUNK mmioFOURCC('s','c','h','d')
+#define DMUS_FOURCC_SCRIPTVERSION_CHUNK mmioFOURCC('s','c','v','e')
+#define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK mmioFOURCC('s','c','l','a')
+#define DMUS_FOURCC_SCRIPTSOURCE_CHUNK mmioFOURCC('s','c','s','r')
+/* Segment */
+#define DMUS_FOURCC_SEGMENT_FORM mmioFOURCC('D','M','S','G')
+#define DMUS_FOURCC_SEGMENT_CHUNK mmioFOURCC('s','e','g','h')
+#define DMUS_FOURCC_TRACK_LIST mmioFOURCC('t','r','k','l')
+/* Style chunks */
+#define DMUS_FOURCC_STYLE_FORM mmioFOURCC('D','M','S','T')
+#define DMUS_FOURCC_STYLE_CHUNK mmioFOURCC('s','t','y','h')
+#define DMUS_FOURCC_PART_LIST mmioFOURCC('p','a','r','t')
+#define DMUS_FOURCC_PART_CHUNK mmioFOURCC('p','r','t','h')
+#define DMUS_FOURCC_NOTE_CHUNK mmioFOURCC('n','o','t','e')
+#define DMUS_FOURCC_CURVE_CHUNK mmioFOURCC('c','r','v','e')
+#define DMUS_FOURCC_MARKER_CHUNK mmioFOURCC('m','r','k','r')
+#define DMUS_FOURCC_RESOLUTION_CHUNK mmioFOURCC('r','s','l','n')
+#define DMUS_FOURCC_ANTICIPATION_CHUNK mmioFOURCC('a','n','p','n')
+#define DMUS_FOURCC_PATTERN_LIST mmioFOURCC('p','t','t','n')
+#define DMUS_FOURCC_PATTERN_CHUNK mmioFOURCC('p','t','n','h')
+#define DMUS_FOURCC_RHYTHM_CHUNK mmioFOURCC('r','h','t','m')
+#define DMUS_FOURCC_PARTREF_LIST mmioFOURCC('p','r','e','f')
+#define DMUS_FOURCC_PARTREF_CHUNK mmioFOURCC('p','r','f','c')
+#define DMUS_FOURCC_STYLE_PERS_REF_LIST mmioFOURCC('p','r','r','f')
+#define DMUS_FOURCC_MOTIFSETTINGS_CHUNK mmioFOURCC('m','t','f','s')
+/* Tool */
+#define DMUS_FOURCC_TOOL_FORM mmioFOURCC('D','M','T','L')
+#define DMUS_FOURCC_TOOL_CHUNK mmioFOURCC('t','o','l','h')
+/* ToolGraph */
+#define DMUS_FOURCC_TOOLGRAPH_FORM mmioFOURCC('D','M','T','G')
+#define DMUS_FOURCC_TOOL_LIST mmioFOURCC('t','o','l','l')
+/* Track */
+#define DMUS_FOURCC_TRACK_FORM mmioFOURCC('D','M','T','K')
+#define DMUS_FOURCC_TRACK_CHUNK mmioFOURCC('t','r','k','h')
+#define DMUS_FOURCC_TRACK_EXTRAS_CHUNK mmioFOURCC('t','r','k','x')
+/* Band Track */
+#define DMUS_FOURCC_BANDTRACK_FORM mmioFOURCC('D','M','B','T')
+#define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h')
+#define DMUS_FOURCC_BANDS_LIST mmioFOURCC('l','b','d','l')
+#define DMUS_FOURCC_BAND_LIST mmioFOURCC('l','b','n','d')
+#define DMUS_FOURCC_BANDITEM_CHUNK mmioFOURCC('b','d','i','h')
+#define DMUS_FOURCC_BANDITEM_CHUNK2 mmioFOURCC('b','d','2','h')
+/* Chord Track */
+#define DMUS_FOURCC_CHORDTRACK_LIST mmioFOURCC('c','o','r','d')
+#define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK mmioFOURCC('c','r','d','h')
+#define DMUS_FOURCC_CHORDTRACKBODY_CHUNK mmioFOURCC('c','r','d','b')
+/* Chordmap Track */
+#define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p','f','t','r')
+#define DMUS_FOURCC_PERS_REF_LIST mmioFOURCC('p','f','r','f')
+#define DMUS_FOURCC_TIME_STAMP_CHUNK mmioFOURCC('s','t','m','p')
+/* Command Track */
+#define DMUS_FOURCC_COMMANDTRACK_CHUNK mmioFOURCC('c','m','n','d')
+/* Lyrics Track */
+#define DMUS_FOURCC_LYRICSTRACK_LIST mmioFOURCC('l','y','r','t')
+#define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST mmioFOURCC('l','y','r','l')
+#define DMUS_FOURCC_LYRICSTRACKEVENT_LIST mmioFOURCC('l','y','r','e')
+#define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK mmioFOURCC('l','y','r','h')
+#define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK mmioFOURCC('l','y','r','n')
+/* Marker Track */
+#define DMUS_FOURCC_MARKERTRACK_LIST mmioFOURCC('M','A','R','K')
+#define DMUS_FOURCC_VALIDSTART_CHUNK mmioFOURCC('v','a','l','s')
+#define DMUS_FOURCC_PLAYMARKER_CHUNK mmioFOURCC('p','l','a','y')
+/* Mute Track */
+#define DMUS_FOURCC_MUTE_CHUNK mmioFOURCC('m','u','t','e')
+/* Parameter Control Track */
+#define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST mmioFOURCC('p','r','m','t')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST mmioFOURCC('p','r','o','l')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST mmioFOURCC('p','r','p','l')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK mmioFOURCC('p','r','p','h')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c')
+/* Pattern Track */
+#define DMUS_FOURCC_PATTERN_FORM mmioFOURCC('D','M','P','T')
+/* Script Track */
+#define DMUS_FOURCC_SCRIPTTRACK_LIST mmioFOURCC('s','c','r','t')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST mmioFOURCC('s','c','r','l')
+#define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST mmioFOURCC('s','c','r','e')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK mmioFOURCC('s','c','r','h')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK mmioFOURCC('s','c','r','n')
+/* Segment Trgigger Track */
+#define DMUS_FOURCC_SEGTRACK_LIST mmioFOURCC('s','e','g','t')
+#define DMUS_FOURCC_SEGTRACK_CHUNK mmioFOURCC('s','g','t','h')
+#define DMUS_FOURCC_SEGMENTS_LIST mmioFOURCC('l','s','g','l')
+#define DMUS_FOURCC_SEGMENT_LIST mmioFOURCC('l','s','e','g')
+#define DMUS_FOURCC_SEGMENTITEM_CHUNK mmioFOURCC('s','g','i','h')
+#define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK mmioFOURCC('s','n','a','m')
+/* Sequence Track */
+#define DMUS_FOURCC_SEQ_TRACK mmioFOURCC('s','e','q','t')
+#define DMUS_FOURCC_SEQ_LIST mmioFOURCC('e','v','t','l')
+#define DMUS_FOURCC_CURVE_LIST mmioFOURCC('c','u','r','l')
+/* Signpost Track */
+#define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK mmioFOURCC('s','g','n','p')
+/* Style Track */
+#define DMUS_FOURCC_STYLE_TRACK_LIST mmioFOURCC('s','t','t','r')
+#define DMUS_FOURCC_STYLE_REF_LIST mmioFOURCC('s','t','r','f')
+/* SysEx Track */
+#define DMUS_FOURCC_SYSEX_TRACK mmioFOURCC('s','y','e','x')
+/* Tempo Track */
+#define DMUS_FOURCC_TEMPO_TRACK mmioFOURCC('t','e','t','r')
+/* Time Signature Track */
+#define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s')
+#define DMUS_FOURCC_TIMESIGTRACK_LIST mmioFOURCC('T','I','M','S')
+#define DMUS_FOURCC_TIMESIG_CHUNK DMUS_FOURCC_TIMESIGNATURE_TRACK
+/* Wave Track */
+#define DMUS_FOURCC_WAVETRACK_LIST mmioFOURCC('w','a','v','t')
+#define DMUS_FOURCC_WAVETRACK_CHUNK mmioFOURCC('w','a','t','h')
+#define DMUS_FOURCC_WAVEPART_LIST mmioFOURCC('w','a','v','p')
+#define DMUS_FOURCC_WAVEPART_CHUNK mmioFOURCC('w','a','p','h')
+#define DMUS_FOURCC_WAVEITEM_LIST mmioFOURCC('w','a','v','i')
+#define DMUS_FOURCC_WAVE_LIST mmioFOURCC('w','a','v','e')
+#define DMUS_FOURCC_WAVEITEM_CHUNK mmioFOURCC('w','a','i','h')
+/* Wave Header */
+#define DMUS_FOURCC_WAVEHEADER_CHUNK mmioFOURCC('w','a','v','h')
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_BUFFERF_SHARED 0x1
+#define DMUS_BUFFERF_DEFINED 0x2
+#define DMUS_BUFFERF_MIXIN 0x8
+
+#define DMUS_CHORDMAPF_VERSION8 0x1
+
+#define DMUS_CONTAINED_OBJF_KEEP 0x1
+
+#define DMUS_CONTAINER_NOLOADS 0x2
+
+#define DMUS_IO_INST_PATCH 0x0001
+#define DMUS_IO_INST_BANKSELECT 0x0002
+#define DMUS_IO_INST_ASSIGN_PATCH 0x0008
+#define DMUS_IO_INST_NOTERANGES 0x0010
+#define DMUS_IO_INST_PAN 0x0020
+#define DMUS_IO_INST_VOLUME 0x0040
+#define DMUS_IO_INST_TRANSPOSE 0x0080
+#define DMUS_IO_INST_GM 0x0100
+#define DMUS_IO_INST_GS 0x0200
+#define DMUS_IO_INST_XG 0x0400
+#define DMUS_IO_INST_CHANNEL_PRIORITY 0x0800
+#define DMUS_IO_INST_USE_DEFAULT_GM_SET 0x1000
+#define DMUS_IO_INST_PITCHBENDRANGE 0x2000
+
+#define DMUS_IO_SCRIPTTRACKF_PREPARE 0x1
+#define DMUS_IO_SCRIPTTRACKF_QUEUE 0x2
+#define DMUS_IO_SCRIPTTRACKF_ATTIME 0x4
+
+#define DMUS_MARKERF_START 0x1
+#define DMUS_MARKERF_STOP 0x2
+#define DMUS_MARKERF_CHORD_ALIGN 0x4
+
+#define DMUS_PATTERNF_PERSIST_CONTROL 0x1
+
+#define DMUS_PARTF_USE_MARKERS 0x1
+#define DMUS_PARTF_ALIGN_CHORDS 0x2
+
+#define DMUS_PORTCONFIGF_DRUMSON10 0x1
+#define DMUS_PORTCONFIGF_USEDEFAULT 0x2
+
+#define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT 0x1
+#define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS 0x2
+
+#define DMUS_SEGIOF_REFLENGTH 0x1
+#define DMUS_SEGIOF_CLOCKTIME 0x2
+
+#define DMUS_SEGMENTTRACKF_MOTIF 0x1
+
+/* Song flags; MS doesn't support this in DX 9.0 anymore */
+#define DMUS_SONG_MAXSEGID 0x7FFFFFFF
+#define DMUS_SONG_ANYSEG 0x80000000
+#define DMUS_SONG_NOSEG 0xFFFFFFFF
+#define DMUS_SONG_NOFROMSEG 0x80000001
+
+#define DMUS_SIGNPOSTF_A 0x0001
+#define DMUS_SIGNPOSTF_B 0x0002
+#define DMUS_SIGNPOSTF_C 0x0004
+#define DMUS_SIGNPOSTF_D 0x0008
+#define DMUS_SIGNPOSTF_E 0x0010
+#define DMUS_SIGNPOSTF_F 0x0020
+#define DMUS_SIGNPOSTF_1 0x0100
+#define DMUS_SIGNPOSTF_2 0x0200
+#define DMUS_SIGNPOSTF_3 0x0400
+#define DMUS_SIGNPOSTF_4 0x0800
+#define DMUS_SIGNPOSTF_5 0x1000
+#define DMUS_SIGNPOSTF_6 0x2000
+#define DMUS_SIGNPOSTF_7 0x4000
+#define DMUS_SIGNPOSTF_CADENCE 0x8000
+#define DMUS_SIGNPOSTF_LETTER (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
+#define DMUS_SIGNPOSTF_ROOT (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)
+
+#define DMUS_SPOSTCADENCEF_1 0x2
+#define DMUS_SPOSTCADENCEF_2 0x4
+
+#define DMUS_VARIATIONF_MAJOR 0x0000007F
+#define DMUS_VARIATIONF_MINOR 0x00003F80
+#define DMUS_VARIATIONF_OTHER 0x001FC000
+#define DMUS_VARIATIONF_ROOT_SCALE 0x00200000
+#define DMUS_VARIATIONF_ROOT_FLAT 0x00400000
+#define DMUS_VARIATIONF_ROOT_SHARP 0x00800000
+#define DMUS_VARIATIONF_TYPE_TRIAD 0x01000000
+#define DMUS_VARIATIONF_TYPE_6AND7 0x02000000
+#define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000
+#define DMUS_VARIATIONF_DEST_TO1 0x08000000
+#define DMUS_VARIATIONF_DEST_TO5 0x10000000
+#define DMUS_VARIATIONF_DEST_OTHER 0x40000000
+#define DMUS_VARIATIONF_MODES 0xE0000000
+#define DMUS_VARIATIONF_MODES_EX (0x20000000 | 0x80000000)
+#define DMUS_VARIATIONF_IMA25_MODE 0x00000000
+#define DMUS_VARIATIONF_DMUS_MODE 0x20000000
+
+#define DMUS_WAVETRACKF_SYNC_VAR 0x1
+#define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2
+
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_VARIATIONT_TYPES DMUS_VARIATIONT_TYPES;
+typedef enum enumDMUS_EMBELLISHT_TYPES DMUS_EMBELLISHT_TYPES;
+typedef enum enumDMUS_PATTERNT_TYPES DMUS_PATTERNT_TYPES;
+
+/* actual enumerations */
+enum enumDMUS_VARIATIONT_TYPES {
+ DMUS_VARIATIONT_SEQUENTIAL = 0x0,
+ DMUS_VARIATIONT_RANDOM = 0x1,
+ DMUS_VARIATIONT_RANDOM_START = 0x2,
+ DMUS_VARIATIONT_NO_REPEAT = 0x3,
+ DMUS_VARIATIONT_RANDOM_ROW = 0x4
+};
+
+enum enumDMUS_EMBELLISHT_TYPES {
+ DMUS_EMBELLISHT_NORMAL = 0x0000,
+ DMUS_EMBELLISHT_FILL = 0x0001,
+ DMUS_EMBELLISHT_BREAK = 0x0002,
+ DMUS_EMBELLISHT_INTRO = 0x0004,
+ DMUS_EMBELLISHT_END = 0x0008,
+ DMUS_EMBELLISHT_MOTIF = 0x0010,
+ DMUS_EMBELLISHT_ALL = 0xFFFF
+};
+
+enum enumDMUS_PATTERNT_TYPES {
+ DMUS_PATTERNT_RANDOM = 0x0,
+ DMUS_PATTERNT_REPEAT = 0x1,
+ DMUS_PATTERNT_SEQUENTIAL = 0x2,
+ DMUS_PATTERNT_RANDOM_START = 0x3,
+ DMUS_PATTERNT_NO_REPEAT = 0x4,
+ DMUS_PATTERNT_RANDOM_ROW = 0x5
+};
+
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_IO_SEQ_ITEM DMUS_IO_SEQ_ITEM, *LPDMUS_IO_SEQ_ITEM;
+typedef struct _DMUS_IO_CURVE_ITEM DMUS_IO_CURVE_ITEM, *LPDMUS_IO_CURVE_ITEM;
+typedef struct _DMUS_IO_TEMPO_ITEM DMUS_IO_TEMPO_ITEM, *LPDMUS_IO_TEMPO_ITEM;
+typedef struct _DMUS_IO_SYSEX_ITEM DMUS_IO_SYSEX_ITEM, *LPDMUS_IO_SYSEX_ITEM;
+typedef struct DMUS_CHORD_KEY DMUS_CHORD_PARAM, *LPDMUS_CHORD_PARAM; /* in dmusici.h */
+typedef struct _DMUS_RHYTHM_PARAM DMUS_RHYTHM_PARAM, *LPDMUS_RHYTHM_PARAM;
+typedef struct _DMUS_TEMPO_PARAM DMUS_TEMPO_PARAM, *LPDMUS_TEMPO_PARAM;
+typedef struct _DMUS_MUTE_PARAM DMUS_MUTE_PARAM, *LPDMUS_MUTE_PARAM;
+typedef struct _DMUS_IO_TIMESIG DMUS_IO_TIMESIG, *LPDMUS_IO_TIMESIG;
+typedef struct _DMUS_IO_STYLE DMUS_IO_STYLE, *LPDMUS_IO_STYLE;
+typedef struct _DMUS_IO_VERSION DMUS_IO_VERSION, *LPDMUS_IO_VERSION;
+typedef struct _DMUS_IO_PATTERN DMUS_IO_PATTERN, *LPDMUS_IO_PATTERN;
+typedef struct _DMUS_IO_STYLEPART DMUS_IO_STYLEPART, *LPDMUS_IO_STYLEPART;
+typedef struct _DMUS_IO_PARTREF DMUS_IO_PARTREF, *LPDMUS_IO_PARTREF;
+typedef struct _DMUS_IO_STYLENOTE DMUS_IO_STYLENOTE, *LPDMUS_IO_STYLENOTE;
+typedef struct _DMUS_IO_STYLECURVE DMUS_IO_STYLECURVE, *LPDMUS_IO_STYLECURVE;
+typedef struct _DMUS_IO_STYLEMARKER DMUS_IO_STYLEMARKER, *LPDMUS_IO_STYLEMARKER;
+typedef struct _DMUS_IO_STYLERESOLUTION DMUS_IO_STYLERESOLUTION, *LPDMUS_IO_STYLERESOLUTION;
+typedef struct _DMUS_IO_STYLE_ANTICIPATION DMUS_IO_STYLE_ANTICIPATION, *LPDMUS_IO_STYLE_ANTICIPATION;
+typedef struct _DMUS_IO_MOTIFSETTINGS DMUS_IO_MOTIFSETTINGS, *LPDMUS_IO_MOTIFSETTINGS;
+typedef struct _DMUS_IO_CHORD DMUS_IO_CHORD, *LPDMUS_IO_CHORD;
+typedef struct _DMUS_IO_SUBCHORD DMUS_IO_SUBCHORD, *LPDMUS_IO_SUBCHORD;
+typedef struct _DMUS_IO_COMMAND DMUS_IO_COMMAND, *LPDMUS_IO_COMMAND;
+typedef struct _DMUS_IO_TOOL_HEADER DMUS_IO_TOOL_HEADER, *LPDMUS_IO_TOOL_HEADER;
+typedef struct _DMUS_IO_PORTCONFIG_HEADER DMUS_IO_PORTCONFIG_HEADER, *LPDMUS_IO_PORTCONFIG_HEADER;
+typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER DMUS_IO_PCHANNELTOBUFFER_HEADER, *LPDMUS_IO_PCHANNELTOBUFFER_HEADER;
+typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER DMUS_IO_BUFFER_ATTRIBUTES_HEADER, *LPDMUS_IO_BUFFER_ATTRIBUTES_HEADER;
+typedef struct _DMUS_IO_BAND_TRACK_HEADER DMUS_IO_BAND_TRACK_HEADER, *LPDMUS_IO_BAND_TRACK_HEADER;
+typedef struct _DMUS_IO_BAND_ITEM_HEADER DMUS_IO_BAND_ITEM_HEADER, *LPDMUS_IO_BAND_ITEM_HEADER;
+typedef struct _DMUS_IO_BAND_ITEM_HEADER2 DMUS_IO_BAND_ITEM_HEADER2, *LPDMUS_IO_BAND_ITEM_HEADER2;
+typedef struct _DMUS_IO_INSTRUMENT DMUS_IO_INSTRUMENT, *LPDMUS_IO_INSTRUMENT;
+typedef struct _DMUS_IO_WAVE_HEADER DMUS_IO_WAVE_HEADER, *LPDMUS_IO_WAVE_HEADER;
+typedef struct _DMUS_IO_WAVE_TRACK_HEADER DMUS_IO_WAVE_TRACK_HEADER, *LPDMUS_IO_WAVE_TRACK_HEADER;
+typedef struct _DMUS_IO_WAVE_PART_HEADER DMUS_IO_WAVE_PART_HEADER, *LPDMUS_IO_WAVE_PART_HEADER;
+typedef struct _DMUS_IO_WAVE_ITEM_HEADER DMUS_IO_WAVE_ITEM_HEADER, *LPDMUS_IO_WAVE_ITEM_HEADER;
+typedef struct _DMUS_IO_CONTAINER_HEADER DMUS_IO_CONTAINER_HEADER, *LPDMUS_IO_CONTAINER_HEADER;
+typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER DMUS_IO_CONTAINED_OBJECT_HEADER, *LPDMUS_IO_CONTAINED_OBJECT_HEADER;
+typedef struct _DMUS_IO_SEGMENT_HEADER DMUS_IO_SEGMENT_HEADER, *LPDMUS_IO_SEGMENT_HEADER;
+typedef struct _DMUS_IO_TRACK_HEADER DMUS_IO_TRACK_HEADER, *LPDMUS_IO_TRACK_HEADER;
+typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER DMUS_IO_TRACK_EXTRAS_HEADER, *LPDMUS_IO_TRACK_EXTRAS_HEADER;
+typedef struct _DMUS_IO_REFERENCE DMUS_IO_REFERENCE, *LPDMUS_IO_REFERENCE;
+typedef struct _DMUS_IO_CHORDMAP DMUS_IO_CHORDMAP, *LPDMUS_IO_CHORDMAP;
+typedef struct _DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_CHORDMAP_SUBCHORD, *LPDMUS_IO_CHORDMAP_SUBCHORD;
+typedef struct _DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_PERS_SUBCHORD, *LPDMUS_IO_PERS_SUBCHORD;
+typedef struct _DMUS_IO_CHORDENTRY DMUS_IO_CHORDENTRY, *LPDMUS_IO_CHORDENTRY;
+typedef struct _DMUS_IO_NEXTCHORD DMUS_IO_NEXTCHORD, *LPDMUS_IO_NEXTCHORD;
+typedef struct _DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_CHORDMAP_SIGNPOST, *LPDMUS_IO_CHORDMAP_SIGNPOST;
+typedef struct _DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_PERS_SIGNPOST, *LPDMUS_IO_PERS_SIGNPOST;
+typedef struct _DMUS_IO_SCRIPT_HEADER DMUS_IO_SCRIPT_HEADER, *LPDMUS_IO_SCRIPT_HEADER;
+typedef struct _DMUS_IO_SIGNPOST DMUS_IO_SIGNPOST, *LPDMUS_IO_SIGNPOST;
+typedef struct _DMUS_IO_MUTE DMUS_IO_MUTE, *LPDMUS_IO_MUTE;
+typedef struct _DMUS_IO_TIMESIGNATURE_ITEM DMUS_IO_TIMESIGNATURE_ITEM, *LPDMUS_IO_TIMESIGNATURE_ITEM;
+typedef struct _DMUS_IO_VALID_START DMUS_IO_VALID_START, *LPDMUS_IO_VALID_START;
+typedef struct _DMUS_IO_PLAY_MARKER DMUS_IO_PLAY_MARKER, *LPDMUS_IO_PLAY_MARKER;
+typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER DMUS_IO_SEGMENT_TRACK_HEADER, *LPDMUS_IO_SEGMENT_TRACK_HEADER;
+typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER DMUS_IO_SEGMENT_ITEM_HEADER, *LPDMUS_IO_SEGMENT_ITEM_HEADER;
+typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER DMUS_IO_SCRIPTTRACK_EVENTHEADER, *LPDMUS_IO_SCRIPTTRACK_EVENTHEADER;
+typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER DMUS_IO_LYRICSTRACK_EVENTHEADER, *LPDMUS_IO_LYRICSTRACK_EVENTHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO DMUS_IO_PARAMCONTROLTRACK_CURVEINFO, *LPDMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
+typedef struct _DSOUND_IO_DSBUFFERDESC DSOUND_IO_DSBUFFERDESC, *LPDSOUND_IO_DSBUFFERDESC;
+typedef struct _DSOUND_IO_DSBUSID DSOUND_IO_DSBUSID, *LPDSOUND_IO_DSBUSID;
+typedef struct _DSOUND_IO_3D DSOUND_IO_3D, *LPDSOUND_IO_3D;
+typedef struct _DSOUND_IO_DXDMO_HEADER DSOUND_IO_DXDMO_HEADER, *LPDSOUND_IO_DXDMO_HEADER;
+typedef struct _DSOUND_IO_DXDMO_DATA DSOUND_IO_DXDMO_DATA, *LPDSOUND_IO_DXDMO_DATA;
+
+/* actual structures */
+struct _DMUS_IO_SEQ_ITEM {
+ MUSIC_TIME mtTime;
+ MUSIC_TIME mtDuration;
+ DWORD dwPChannel;
+ short nOffset;
+ BYTE bStatus;
+ BYTE bByte1;
+ BYTE bByte2;
+};
+
+struct _DMUS_IO_CURVE_ITEM {
+ MUSIC_TIME mtStart;
+ MUSIC_TIME mtDuration;
+ MUSIC_TIME mtResetDuration;
+ DWORD dwPChannel;
+ short nOffset;
+ short nStartValue;
+ short nEndValue;
+ short nResetValue;
+ BYTE bType;
+ BYTE bCurveShape;
+ BYTE bCCData;
+ BYTE bFlags;
+ /* DX8 */
+ WORD wParamType;
+ WORD wMergeIndex;
+};
+
+struct _DMUS_IO_TEMPO_ITEM {
+ MUSIC_TIME lTime;
+ double dblTempo;
+};
+
+struct _DMUS_IO_SYSEX_ITEM {
+ MUSIC_TIME mtTime;
+ DWORD dwPChannel;
+ DWORD dwSysExLength;
+};
+
+struct _DMUS_RHYTHM_PARAM {
+ DMUS_TIMESIGNATURE TimeSig;
+ DWORD dwRhythmPattern;
+};
+
+struct _DMUS_TEMPO_PARAM {
+ MUSIC_TIME mtTime;
+ double dblTempo;
+};
+
+struct _DMUS_MUTE_PARAM {
+ DWORD dwPChannel;
+ DWORD dwPChannelMap;
+ BOOL fMute;
+};
+
+#pragma pack(2)
+struct _DMUS_IO_TIMESIG {
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
+
+struct _DMUS_IO_STYLE {
+ DMUS_IO_TIMESIG timeSig;
+ double dblTempo;
+};
+
+struct _DMUS_IO_VERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+};
+
+struct _DMUS_IO_PATTERN {
+ DMUS_IO_TIMESIG timeSig;
+ BYTE bGrooveBottom;
+ BYTE bGrooveTop;
+ WORD wEmbellishment;
+ WORD wNbrMeasures;
+ BYTE bDestGrooveBottom;
+ BYTE bDestGrooveTop;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_STYLEPART {
+ DMUS_IO_TIMESIG timeSig;
+ DWORD dwVariationChoices[32];
+ GUID guidPartID;
+ WORD wNbrMeasures;
+ BYTE bPlayModeFlags;
+ BYTE bInvertUpper;
+ BYTE bInvertLower;
+ BYTE bPad[3];
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_PARTREF {
+ GUID guidPartID;
+ WORD wLogicalPartID;
+ BYTE bVariationLockID;
+ BYTE bSubChordLevel;
+ BYTE bPriority;
+ BYTE bRandomVariation;
+ WORD wPad;
+ DWORD dwPChannel;
+};
+
+
+struct _DMUS_IO_STYLENOTE {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ MUSIC_TIME mtDuration;
+ short nTimeOffset;
+ WORD wMusicValue;
+ BYTE bVelocity;
+ BYTE bTimeRange;
+ BYTE bDurRange;
+ BYTE bVelRange;
+ BYTE bInversionID;
+ BYTE bPlayModeFlags;
+ /* DX8 */
+ BYTE bNoteFlags;
+};
+
+struct _DMUS_IO_STYLECURVE {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ MUSIC_TIME mtDuration;
+ MUSIC_TIME mtResetDuration;
+ short nTimeOffset;
+ short nStartValue;
+ short nEndValue;
+ short nResetValue;
+ BYTE bEventType;
+ BYTE bCurveShape;
+ BYTE bCCData;
+ BYTE bFlags;
+ /* DX8 */
+ WORD wParamType;
+ WORD wMergeIndex;
+};
+
+struct _DMUS_IO_STYLEMARKER {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ WORD wMarkerFlags;
+};
+
+struct _DMUS_IO_STYLERESOLUTION {
+ DWORD dwVariation;
+ WORD wMusicValue;
+ BYTE bInversionID;
+ BYTE bPlayModeFlags;
+};
+
+struct _DMUS_IO_STYLE_ANTICIPATION {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ short nTimeOffset;
+ BYTE bTimeRange;
+};
+
+struct _DMUS_IO_MOTIFSETTINGS {
+ DWORD dwRepeats;
+ MUSIC_TIME mtPlayStart;
+ MUSIC_TIME mtLoopStart;
+ MUSIC_TIME mtLoopEnd;
+ DWORD dwResolution;
+};
+#pragma pack()
+
+struct _DMUS_IO_CHORD {
+ WCHAR wszName[16];
+ MUSIC_TIME mtTime;
+ WORD wMeasure;
+ BYTE bBeat;
+ BYTE bFlags;
+};
+
+struct _DMUS_IO_SUBCHORD {
+ DWORD dwChordPattern;
+ DWORD dwScalePattern;
+ DWORD dwInversionPoints;
+ DWORD dwLevels;
+ BYTE bChordRoot;
+ BYTE bScaleRoot;
+};
+
+struct _DMUS_IO_COMMAND {
+ MUSIC_TIME mtTime;
+ WORD wMeasure;
+ BYTE bBeat;
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+};
+
+struct _DMUS_IO_TOOL_HEADER {
+ GUID guidClassID;
+ LONG lIndex;
+ DWORD cPChannels;
+ FOURCC ckid;
+ FOURCC fccType;
+ DWORD dwPChannels[1];
+};
+
+struct _DMUS_IO_PORTCONFIG_HEADER {
+ GUID guidPort;
+ DWORD dwPChannelBase;
+ DWORD dwPChannelCount;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_PCHANNELTOBUFFER_HEADER {
+ DWORD dwPChannelBase;
+ DWORD dwPChannelCount;
+ DWORD dwBufferCount;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER {
+ GUID guidBufferID;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_BAND_TRACK_HEADER {
+ BOOL bAutoDownload;
+};
+
+struct _DMUS_IO_BAND_ITEM_HEADER {
+ MUSIC_TIME lBandTime;
+};
+
+struct _DMUS_IO_BAND_ITEM_HEADER2 {
+ MUSIC_TIME lBandTimeLogical;
+ MUSIC_TIME lBandTimePhysical;
+};
+
+struct _DMUS_IO_INSTRUMENT {
+ DWORD dwPatch;
+ DWORD dwAssignPatch;
+ DWORD dwNoteRanges[4];
+ DWORD dwPChannel;
+ DWORD dwFlags;
+ BYTE bPan;
+ BYTE bVolume;
+ short nTranspose;
+ DWORD dwChannelPriority;
+ short nPitchBendRange;
+};
+
+struct _DMUS_IO_WAVE_HEADER {
+ REFERENCE_TIME rtReadAhead;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_WAVE_TRACK_HEADER {
+ LONG lVolume;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_WAVE_PART_HEADER {
+ LONG lVolume;
+ DWORD dwVariations;
+ DWORD dwPChannel;
+ DWORD dwLockToPart;
+ DWORD dwFlags;
+ DWORD dwIndex;
+};
+
+struct _DMUS_IO_WAVE_ITEM_HEADER {
+ LONG lVolume;
+ LONG lPitch;
+ DWORD dwVariations;
+ REFERENCE_TIME rtTime;
+ REFERENCE_TIME rtStartOffset;
+ REFERENCE_TIME rtReserved;
+ REFERENCE_TIME rtDuration;
+ MUSIC_TIME mtLogicalTime;
+ DWORD dwLoopStart;
+ DWORD dwLoopEnd;
+ DWORD dwFlags;
+ WORD wVolumeRange;
+ WORD wPitchRange;
+};
+
+struct _DMUS_IO_CONTAINER_HEADER {
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_CONTAINED_OBJECT_HEADER {
+ GUID guidClassID;
+ DWORD dwFlags;
+ FOURCC ckid;
+ FOURCC fccType;
+};
+
+struct _DMUS_IO_SEGMENT_HEADER {
+ DWORD dwRepeats;
+ MUSIC_TIME mtLength;
+ MUSIC_TIME mtPlayStart;
+ MUSIC_TIME mtLoopStart;
+ MUSIC_TIME mtLoopEnd;
+ DWORD dwResolution;
+ /* DX8 */
+ REFERENCE_TIME rtLength;
+ DWORD dwFlags;
+ DWORD dwReserved;
+ /* DX9 */
+ REFERENCE_TIME rtLoopStart;
+ REFERENCE_TIME rtLoopEnd;
+ REFERENCE_TIME rtPlayStart;
+};
+
+struct _DMUS_IO_TRACK_HEADER {
+ GUID guidClassID;
+ DWORD dwPosition;
+ DWORD dwGroup;
+ FOURCC ckid;
+ FOURCC fccType;
+};
+
+struct _DMUS_IO_TRACK_EXTRAS_HEADER {
+ DWORD dwFlags;
+ DWORD dwPriority;
+};
+
+struct _DMUS_IO_REFERENCE {
+ GUID guidClassID;
+ DWORD dwValidData;
+};
+
+struct _DMUS_IO_CHORDMAP {
+ WCHAR wszLoadName[20];
+ DWORD dwScalePattern;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_CHORDMAP_SUBCHORD {
+ DWORD dwChordPattern;
+ DWORD dwScalePattern;
+ DWORD dwInvertPattern;
+ BYTE bChordRoot;
+ BYTE bScaleRoot;
+ WORD wCFlags;
+ DWORD dwLevels;
+};
+
+struct _DMUS_IO_CHORDENTRY {
+ DWORD dwFlags;
+ WORD wConnectionID;
+};
+
+struct _DMUS_IO_NEXTCHORD {
+ DWORD dwFlags;
+ WORD nWeight;
+ WORD wMinBeats;
+ WORD wMaxBeats;
+ WORD wConnectionID;
+};
+
+struct _DMUS_IO_CHORDMAP_SIGNPOST {
+ DWORD dwChords;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SCRIPT_HEADER {
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SIGNPOST {
+ MUSIC_TIME mtTime;
+ DWORD dwChords;
+ WORD wMeasure;
+};
+
+struct _DMUS_IO_MUTE {
+ MUSIC_TIME mtTime;
+ DWORD dwPChannel;
+ DWORD dwPChannelMap;
+};
+
+struct _DMUS_IO_TIMESIGNATURE_ITEM {
+ MUSIC_TIME lTime;
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
+
+struct _DMUS_IO_VALID_START {
+ MUSIC_TIME mtTime;
+};
+
+struct _DMUS_IO_PLAY_MARKER {
+ MUSIC_TIME mtTime;
+};
+
+struct _DMUS_IO_SEGMENT_TRACK_HEADER {
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SEGMENT_ITEM_HEADER {
+ MUSIC_TIME lTimeLogical;
+ MUSIC_TIME lTimePhysical;
+ DWORD dwPlayFlags;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER {
+ DWORD dwFlags;
+ MUSIC_TIME lTimeLogical;
+ MUSIC_TIME lTimePhysical;
+};
+
+struct _DMUS_IO_LYRICSTRACK_EVENTHEADER {
+ DWORD dwFlags;
+ DWORD dwTimingFlags;
+ MUSIC_TIME lTimeLogical;
+ MUSIC_TIME lTimePhysical;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER {
+ DWORD dwFlags;
+ GUID guidTimeFormat;
+ DWORD dwPChannel;
+ DWORD dwStage;
+ DWORD dwBuffer;
+ GUID guidObject;
+ DWORD dwIndex;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER {
+ DWORD dwFlags;
+ DWORD dwIndex;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO {
+ MUSIC_TIME mtStartTime;
+ MUSIC_TIME mtEndTime;
+ float fltStartValue;
+ float fltEndValue;
+ DWORD dwCurveType;
+ DWORD dwFlags;
+};
+
+struct _DSOUND_IO_DSBUFFERDESC {
+ DWORD dwFlags;
+ WORD nChannels;
+ LONG lVolume;
+ LONG lPan;
+ DWORD dwReserved;
+};
+
+struct _DSOUND_IO_DSBUSID {
+ DWORD busid[1];
+};
+
+struct _DSOUND_IO_3D {
+ GUID guid3DAlgorithm;
+ DS3DBUFFER ds3d;
+};
+
+struct _DSOUND_IO_DXDMO_HEADER {
+ DWORD dwEffectFlags;
+ GUID guidDSFXClass;
+ GUID guidReserved;
+ GUID guidSendBuffer;
+ DWORD dwReserved;
+};
+
+struct _DSOUND_IO_DXDMO_DATA {
+ DWORD data[1];
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_FILEFORMATS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h
new file mode 100644
index 00000000..1d23d0c8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusici.h
@@ -0,0 +1,1743 @@
+/*
+ * DirectMusic Performance API
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_PERFORMANCE_H
+#define __WINE_DMUSIC_PERFORMANCE_H
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <mmsystem.h>
+#include <dmusicc.h>
+#include <dmplugin.h>
+#include <pshpack8.h>
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef AddPort
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusicAudioPathConfig, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(CLSID_DirectMusicBand, 0x79ba9e00,0xb6ee,0x11d1,0x86,0xbe,0x00,0xc0,0x4f,0xbf,0x8f,0xef);
+DEFINE_GUID(CLSID_DirectMusicChordMap, 0xd2ac288f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicComposer, 0xd2ac2890,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicContainer, 0x9301e380,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
+DEFINE_GUID(CLSID_DirectMusicGraph, 0xd2ac2884,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicLoader, 0xd2ac2892,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicPatternTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicPerformance, 0xd2ac2881,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicScript, 0x810b5013,0xe88d,0x11d2,0x8b,0xc1,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSegment, 0xd2ac2882,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegmentState, 0xd2ac2883,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyle, 0xd2ac288a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectSoundWave, 0x8a667154,0xf9cb,0x11d2,0xad,0x8a,0x00,0x60,0xb0,0x57,0x5a,0xbc);
+/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */
+DEFINE_GUID(CLSID_DirectMusicSong, 0xaed5f0a5,0xd972,0x483d,0xa3,0x84,0x64,0x9d,0xfe,0xb9,0xc1,0x81);
+/* these CLSIDs aren't officially declared in any dmusic header, but are used by wine's regsvr implementations*/
+DEFINE_GUID(CLSID_DirectMusicSynthSink, 0xaec17ce3,0xa514,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSection, 0x3f037241,0x414e,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
+DEFINE_GUID(CLSID_DirectMusicAuditionTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicAudioPath, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(CLSID_DirectMusicTemplate, 0xd30bcc65,0x60e8,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegment, 0x4062c116,0x0270,0x11d3,0x8b,0xcb,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_AudioVBScript, 0x4ee17959,0x931e,0x49e4,0xa2,0xc6,0x97,0x7e,0xcf,0x36,0x28,0xf3);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpPerformance, 0xa861c6e2,0xfcfc,0x11d2,0x8b,0xc9,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptSourceCodeLoader, 0xc70eb77f,0xefd4,0x4678,0xa2,0x7b,0xbf,0x16,0x48,0xf3,0x0d,0x04);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegmentState, 0xebf2320a,0x2502,0x11d3,0x8b,0xd1,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPathConfig, 0x1cebde3e,0x6b91,0x484a,0xaf,0x48,0x5e,0x4f,0x4e,0xd6,0xb1,0xe1);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPath, 0x2c5f9b72,0x7148,0x4d97,0xbf,0xc9,0x68,0xa0,0xe0,0x76,0xbe,0xbd);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSong, 0xa16f1761,0xb6d8,0x42eb,0x8d,0x57,0x4a,0x44,0xfe,0xdd,0x3b,0xd2);
+
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicAudioPath, 0xc87631f5,0x23be,0x4986,0x88,0x36,0x05,0x83,0x2f,0xcc,0x48,0xf9);
+DEFINE_GUID(IID_IDirectMusicBand, 0xd2ac28c0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicChordMap, 0xd2ac28be,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicComposer, 0xd2ac28bf,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicContainer, 0x9301e386,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
+DEFINE_GUID(IID_IDirectMusicGetLoader, 0x68a04844,0xd13d,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicGraph, 0x2befc277,0x5497,0x11d2,0xbc,0xcb,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(IID_IDirectMusicLoader, 0x2ffaaca2,0x5dca,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicLoader8, 0x19e7c08c,0x0a44,0x4e6a,0xa1,0x16,0x59,0x5a,0x7c,0xd5,0xde,0x8c);
+DEFINE_GUID(IID_IDirectMusicObject, 0xd2ac28b5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPatternTrack, 0x51c22e10,0xb49f,0x46fc,0xbe,0xc2,0xe6,0x28,0x8f,0xb9,0xed,0xe6);
+DEFINE_GUID(IID_IDirectMusicPerformance, 0x07d43d03,0x6523,0x11d2,0x87,0x1d,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPerformance2, 0x6fc2cae0,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicPerformance8, 0x679c4137,0xc62e,0x4147,0xb2,0xb4,0x9d,0x56,0x9a,0xcb,0x25,0x4c);
+DEFINE_GUID(IID_IDirectMusicScript, 0x2252373a,0x5814,0x489b,0x82,0x09,0x31,0xfe,0xde,0xba,0xf1,0x37);
+DEFINE_GUID(IID_IDirectMusicSegment, 0xf96029a2,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment2, 0xd38894d1,0xc052,0x11d2,0x87,0x2f,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment8, 0xc6784488,0x41a3,0x418f,0xaa,0x15,0xb3,0x50,0x93,0xba,0x42,0xd4);
+DEFINE_GUID(IID_IDirectMusicSegmentState, 0xa3afdcc7,0xd3ee,0x11d1,0xbc,0x8d,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(IID_IDirectMusicSegmentState8, 0xa50e4730,0x0ae4,0x48a7,0x98,0x39,0xbc,0x04,0xbf,0xe0,0x77,0x72);
+DEFINE_GUID(IID_IDirectMusicStyle, 0xd2ac28bd,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicStyle8, 0xfd24ad8a,0xa260,0x453d,0xbf,0x50,0x6f,0x93,0x84,0xf7,0x09,0x85);
+
+/* IIDs of unchanged interfaces */
+#define IID_IDirectMusicAudioPath8 IID_IDirectMusicAudioPath
+#define IID_IDirectMusicBand8 IID_IDirectMusicBand
+#define IID_IDirectMusicChordMap8 IID_IDirectMusicChordMap
+#define IID_IDirectMusicComposer8 IID_IDirectMusicComposer
+#define IID_IDirectMusicContainer8 IID_IDirectMusicContainer
+#define IID_IDirectMusicGetLoader8 IID_IDirectMusicGetLoader
+#define IID_IDirectMusicGraph8 IID_IDirectMusicGraph
+#define IID_IDirectMusicObject8 IID_IDirectMusicObject
+#define IID_IDirectMusicPatternTrack8 IID_IDirectMusicPatternTrack
+#define IID_IDirectMusicScript8 IID_IDirectMusicScript
+
+/* typedef definitions */
+typedef struct IDirectMusicBand *LPDIRECTMUSICBAND;
+typedef struct IDirectMusicBand IDirectMusicBand8, *LPDIRECTMUSICBAND8;
+typedef struct IDirectMusicObject *LPDIRECTMUSICOBJECT;
+typedef struct IDirectMusicObject IDirectMusicObject8, *LPDIRECTMUSICOBJECT8;
+typedef struct IDirectMusicLoader *LPDIRECTMUSICLOADER;
+typedef struct IDirectMusicLoader8 *LPDIRECTMUSICLOADER8;
+typedef struct IDirectMusicGetLoader *LPDIRECTMUSICGETLOADER;
+typedef struct IDirectMusicGetLoader IDirectMusicGetLoader8, *LPDIRECTMUSICGETLOADER8;
+typedef struct IDirectMusicAudioPath *LPDIRECTMUSICAUDIOPATH;
+typedef struct IDirectMusicAudioPath IDirectMusicAudioPath8, *LPDIRECTMUSICAUDIOPATH8;
+typedef struct IDirectMusicStyle *LPDIRECTMUSICSTYLE;
+typedef struct IDirectMusicStyle8 *LPDIRECTMUSICSTYLE8;
+typedef struct IDirectMusicChordMap *LPDIRECTMUSICCHORDMAP;
+typedef struct IDirectMusicChordMap IDirectMusicChordMap8, *LPDIRECTMUSICCHORDMAP8;
+typedef struct IDirectMusicComposer *LPDIRECTMUSICCOMPOSER;
+typedef struct IDirectMusicComposer IDirectMusicComposer8, *LPDIRECTMUSICCOMPOSER8;
+typedef struct IDirectMusicPatternTrack *LPDIRECTMUSICPATTERNTRACK;
+typedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack8, *LPDIRECTMUSICPATTERNTRACK8;
+typedef struct IDirectMusicScript *LPDIRECTMUSICSCRIPT;
+typedef struct IDirectMusicScript IDirectMusicScript8, *LPDIRECTMUSICSCRIPT8;
+typedef struct IDirectMusicContainer *LPDIRECTMUSICCONTAINER;
+typedef struct IDirectMusicContainer IDirectMusicContainer8, *LPDIRECTMUSICCONTAINER8;
+
+/* RPC declarations */
+typedef struct IDirectMusicBand *LPDMUS_BAND;
+typedef struct IDirectMusicLoader *LPDMUS_LOADER;
+typedef struct IDirectMusicObject *LPDMUS_OBJECT;
+
+/* GUIDs - all types loader */
+DEFINE_GUID(GUID_DirectMusicAllTypes, 0xd2ac2893,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUIDs - notification */
+DEFINE_GUID(GUID_NOTIFICATION_CHORD, 0xd2ac289b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_COMMAND, 0xd2ac289c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT, 0xd2ac289a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE, 0x81f75bc5,0x4e5d,0x11d2,0xbc,0xc7,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE, 0xd348372b,0x945b,0x45ae,0xa5,0x22,0x45,0x0f,0x12,0x5b,0x84,0xa5);
+DEFINE_GUID(GUID_NOTIFICATION_SEGMENT, 0xd2ac2899,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUIDs - param types */
+DEFINE_GUID(GUID_BandParam, 0x02bb1938,0xcb8b,0x11d2,0x8b,0xb9,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(GUID_ChordParam, 0xd2ac289e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_CommandParam, 0xd2ac289d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_CommandParam2, 0x28f97ef7,0x9538,0x11d2,0x97,0xa9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_CommandParamNext, 0x472afe7a,0x281b,0x11d3,0x81,0x7d,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_IDirectMusicBand, 0xd2ac28ac,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_IDirectMusicChordMap, 0xd2ac28ad,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_IDirectMusicStyle, 0xd2ac28a1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_MuteParam, 0xd2ac28af,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_Play_Marker, 0xd8761a41,0x801a,0x11d3,0x9b,0xd1,0xda,0xf7,0xe1,0xc3,0xd8,0x34);
+DEFINE_GUID(GUID_RhythmParam, 0xd2ac289f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_TempoParam, 0xd2ac28a5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_TimeSignature, 0xd2ac28a4,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_Valid_Start_Time, 0x7f6b1760,0x1fdb,0x11d3,0x82,0x26,0x44,0x45,0x53,0x54,0x00,0x00);
+/* GUIDs - param setting */
+DEFINE_GUID(GUID_Clear_All_Bands, 0xd2ac28ab,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_ConnectToDLSCollection, 0x1db1ae6b,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);
+DEFINE_GUID(GUID_Disable_Auto_Download, 0xd2ac28aa,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DisableTempo, 0x45fc707d,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_DisableTimeSig, 0x45fc707b,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_Download, 0xd2ac28a7,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DownloadToAudioPath, 0x9f2c0341,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Enable_Auto_Download, 0xd2ac28a9,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_EnableTempo, 0x45fc707e,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_EnableTimeSig, 0x45fc707c,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+#define GUID_IgnoreBankSelectForGM GUID_StandardMIDIFile
+DEFINE_GUID(GUID_SeedVariations, 0x65b76fa5,0xff37,0x11d2,0x81,0x4e,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_StandardMIDIFile, 0x06621075,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);
+DEFINE_GUID(GUID_Unload, 0xd2ac28a8,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_UnloadFromAudioPath, 0x9f2c0342,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Variations, 0x11f72cce,0x26e6,0x4ecd,0xaf,0x2e,0xd6,0x68,0xe6,0x67,0x07,0xd8);
+/* GUIDs - global data */
+DEFINE_GUID(GUID_PerfMasterTempo, 0xd2ac28b0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfMasterVolume, 0xd2ac28b1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfMasterGrooveLevel, 0xd2ac28b2,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfAutoDownload, 0xfb09565b,0x3631,0x11d2,0xbc,0xb8,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+/* GUID - default DLS collection */
+DEFINE_GUID(GUID_DefaultGMCollection, 0xf17e8673,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUID - default synthesizer */
+DEFINE_GUID(GUID_Synth_Default, 0x26bb9432,0x45fe,0x48d3,0xa3,0x75,0x24,0x72,0xc5,0xe3,0xe7,0x86);
+/* GUIDs - define default buffer configuration */
+DEFINE_GUID(GUID_Buffer_Reverb, 0x186cc541,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_EnvReverb, 0x186cc542,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_Stereo, 0x186cc545,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_3D_Dry, 0x186cc546,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_Mono, 0x186cc547,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef WORD TRANSITION_TYPE, *LPTRANSITION_TYPE;
+/*
+ * typedef __int64 REFERENCE_TIME, *LPREFERENCE_TIME;
+ * typedef LONG MUSIC_TIME, *LPMUSIC_TIME;
+ */
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_APATH_SHARED_STEREOPLUSREVERB 0x1
+#define DMUS_APATH_DYNAMIC_3D 0x6
+#define DMUS_APATH_DYNAMIC_MONO 0x7
+#define DMUS_APATH_DYNAMIC_STEREO 0x8
+
+#define DMUS_AUDIOF_3D 0x01
+#define DMUS_AUDIOF_ENVIRON 0x02
+#define DMUS_AUDIOF_EAX 0x04
+#define DMUS_AUDIOF_DMOS 0x08
+#define DMUS_AUDIOF_STREAMING 0x10
+#define DMUS_AUDIOF_BUFFERS 0x20
+#define DMUS_AUDIOF_ALL 0x3F
+
+#define DMUS_AUDIOPARAMS_FEATURES 0x1
+#define DMUS_AUDIOPARAMS_VOICES 0x2
+#define DMUS_AUDIOPARAMS_SAMPLERATE 0x4
+#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x8
+
+#define DMUS_CURVET_PBCURVE 0x03
+#define DMUS_CURVET_CCCURVE 0x04
+#define DMUS_CURVET_MATCURVE 0x05
+#define DMUS_CURVET_PATCURVE 0x06
+#define DMUS_CURVET_RPNCURVE 0x07
+#define DMUS_CURVET_NRPNCURVE 0x08
+
+#define DMUS_MASTERTEMPO_MAX 100.0f
+#define DMUS_MASTERTEMPO_MIN 0.01f
+
+#define DMUS_MAX_NAME 0x40
+#define DMUS_MAX_CATEGORY 0x40
+#define DMUS_MAX_FILENAME MAX_PATH
+
+#define DMUS_MAXSUBCHORD 0x8
+
+#define DMUS_NOTIFICATION_SEGSTART 0x0
+#define DMUS_NOTIFICATION_SEGEND 0x1
+#define DMUS_NOTIFICATION_SEGALMOSTEND 0x2
+#define DMUS_NOTIFICATION_SEGLOOP 0x3
+#define DMUS_NOTIFICATION_SEGABORT 0x4
+#define DMUS_NOTIFICATION_MUSICSTARTED 0x0
+#define DMUS_NOTIFICATION_MUSICSTOPPED 0x1
+#define DMUS_NOTIFICATION_MUSICALMOSTEND 0x2
+#define DMUS_NOTIFICATION_MEASUREBEAT 0x0
+#define DMUS_NOTIFICATION_CHORD 0x0
+#define DMUS_NOTIFICATION_GROOVE 0x0
+#define DMUS_NOTIFICATION_EMBELLISHMENT 0x1
+#define DMUS_NOTIFICATION_RECOMPOSE 0x0
+
+#define DMUS_OBJ_OBJECT 0x001
+#define DMUS_OBJ_CLASS 0x002
+#define DMUS_OBJ_NAME 0x004
+#define DMUS_OBJ_CATEGORY 0x008
+#define DMUS_OBJ_FILENAME 0x010
+#define DMUS_OBJ_FULLPATH 0x020
+#define DMUS_OBJ_URL 0x040
+#define DMUS_OBJ_VERSION 0x080
+#define DMUS_OBJ_DATE 0x100
+#define DMUS_OBJ_LOADED 0x200
+#define DMUS_OBJ_MEMORY 0x400
+#define DMUS_OBJ_STREAM 0x800
+
+#define DMUS_PATH_SEGMENT 0x1000
+#define DMUS_PATH_SEGMENT_TRACK 0x1100
+#define DMUS_PATH_SEGMENT_GRAPH 0x1200
+#define DMUS_PATH_SEGMENT_TOOL 0x1300
+#define DMUS_PATH_AUDIOPATH 0x2000
+#define DMUS_PATH_AUDIOPATH_GRAPH 0x2200
+#define DMUS_PATH_AUDIOPATH_TOOL 0x2300
+#define DMUS_PATH_PERFORMANCE 0x3000
+#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200
+#define DMUS_PATH_PERFORMANCE_TOOL 0x3300
+#define DMUS_PATH_PORT 0x4000
+#define DMUS_PATH_BUFFER 0x6000
+#define DMUS_PATH_BUFFER_DMO 0x6100
+#define DMUS_PATH_MIXIN_BUFFER 0x7000
+#define DMUS_PATH_MIXIN_BUFFER_DMO 0x7100
+#define DMUS_PATH_PRIMARY_BUFFER 0x8000
+
+#define DMUS_PCHANNEL_BROADCAST_PERFORMANCE 0xFFFFFFFF
+#define DMUS_PCHANNEL_BROADCAST_AUDIOPATH 0xFFFFFFFE
+#define DMUS_PCHANNEL_BROADCAST_SEGMENT 0xFFFFFFFD
+#define DMUS_PCHANNEL_BROADCAST_GROUPS 0xFFFFFFFC
+#define DMUS_PCHANNEL_ALL 0xFFFFFFFB
+
+#define DMUS_PLAYMODE_FIXED 0x0
+#define DMUS_PLAYMODE_FIXEDTOKEY DMUS_PLAYMODE_KEY_ROOT
+#define DMUS_PLAYMODE_FIXEDTOCHORD DMUS_PLAYMODE_CHORD_ROOT
+#define DMUS_PLAYMODE_PEDALPOINT (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
+#define DMUS_PLAYMODE_MELODIC (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
+#define DMUS_PLAYMODE_NORMALCHORD (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)
+#define DMUS_PLAYMODE_ALWAYSPLAY (DMUS_PLAYMODE_MELODIC | DMUS_PLAYMODE_NORMALCHORD)
+#define DMUS_PLAYMODE_PEDALPOINTCHORD (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)
+#define DMUS_PLAYMODE_PEDALPOINTALWAYS (DMUS_PLAYMODE_PEDALPOINT | DMUS_PLAYMODE_PEDALPOINTCHORD)
+#define DMUS_PLAYMODE_PURPLEIZED DMUS_PLAYMODE_ALWAYSPLAY
+#define DMUS_PLAYMODE_SCALE_ROOT DMUS_PLAYMODE_KEY_ROOT
+#define DMUS_PLAYMODE_FIXEDTOSCALE DMUS_PLAYMODE_FIXEDTOKEY
+
+#define DMUS_PPQ 768
+
+#define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF
+#define DMUS_SEG_ALLTRACKS 0x80000000
+#define DMUS_SEG_ANYTRACK 0x80000000
+
+#define DMUS_TEMPO_MAX 1000
+#define DMUS_TEMPO_MIN 1
+
+#define DMUS_TRACKCONFIG_OVERRIDE_ALL 0x00001
+#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY 0x00002
+#define DMUS_TRACKCONFIG_FALLBACK 0x00004
+#define DMUS_TRACKCONFIG_CONTROL_ENABLED 0x00008
+#define DMUS_TRACKCONFIG_PLAY_ENABLED 0x00010
+#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED 0x00020
+#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME 0x00040
+#define DMUS_TRACKCONFIG_PLAY_COMPOSE 0x00080
+#define DMUS_TRACKCONFIG_LOOP_COMPOSE 0x00100
+#define DMUS_TRACKCONFIG_COMPOSING 0x00200
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART 0x00400
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x00800
+#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART 0x01000
+#define DMUS_TRACKCONFIG_CONTROL_PLAY 0x10000
+#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION 0x20000
+#define DMUS_TRACKCONFIG_DEFAULT (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)
+
+#define DMUS_WAVEF_OFF 0x01
+#define DMUS_WAVEF_STREAMING 0x02
+#define DMUS_WAVEF_NOINVALIDATE 0x04
+#define DMUS_WAVEF_NOPREROLL 0x08
+#define DMUS_WAVEF_IGNORELOOPS 0x20
+
+#define DMUSB_LOADED 0x1
+#define DMUSB_DEFAULT 0x2
+
+#define MT_MIN 0x80000000
+#define MT_MAX 0x7FFFFFFF
+
+
+/*****************************************************************************
+ * Definitions
+ */
+#define DMUS_PMSG_PART \
+ DWORD dwSize; \
+ REFERENCE_TIME rtTime; \
+ MUSIC_TIME mtTime; \
+ DWORD dwFlags; \
+ DWORD dwPChannel; \
+ DWORD dwVirtualTrackID; \
+ IDirectMusicTool* pTool; \
+ struct IDirectMusicGraph* pGraph; \
+ DWORD dwType; \
+ DWORD dwVoiceID; \
+ DWORD dwGroupID; \
+ IUnknown* punkUser;
+
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_STYLET_TYPES DMUS_STYLET_TYPES;
+typedef enum enumDMUS_COMMANDT_TYPES DMUS_COMMANDT_TYPES;
+typedef enum enumDMUS_SHAPET_TYPES DMUS_SHAPET_TYPES;
+typedef enum enumDMUS_COMPOSEF_FLAGS DMUS_COMPOSEF_FLAGS;
+typedef enum enumDMUS_PMSGF_FLAGS DMUS_PMSGF_FLAGS;
+typedef enum enumDMUS_PMSGT_TYPES DMUS_PMSGT_TYPES;
+typedef enum enumDMUS_SEGF_FLAGS DMUS_SEGF_FLAGS;
+typedef enum enumDMUS_TIME_RESOLVE_FLAGS DMUS_TIME_RESOLVE_FLAGS;
+typedef enum enumDMUS_CHORDKEYF_FLAGS DMUS_CHORDKEYF_FLAGS;
+typedef enum enumDMUS_NOTEF_FLAGS DMUS_NOTEF_FLAGS;
+typedef enum enumDMUS_PLAYMODE_FLAGS DMUS_PLAYMODE_FLAGS;
+typedef enum enumDMUS_CURVE_FLAGS DMUS_CURVE_FLAGS;
+
+
+
+/* actual enumerations */
+enum enumDMUS_STYLET_TYPES {
+ DMUS_STYLET_PATTERN = 0x0,
+ DMUS_STYLET_MOTIF = 0x1,
+};
+
+enum enumDMUS_COMMANDT_TYPES {
+ DMUS_COMMANDT_GROOVE = 0x0,
+ DMUS_COMMANDT_FILL = 0x1,
+ DMUS_COMMANDT_INTRO = 0x2,
+ DMUS_COMMANDT_BREAK = 0x3,
+ DMUS_COMMANDT_END = 0x4,
+ DMUS_COMMANDT_ENDANDINTRO = 0x5
+};
+
+enum enumDMUS_SHAPET_TYPES {
+ DMUS_SHAPET_FALLING = 0x0,
+ DMUS_SHAPET_LEVEL = 0x1,
+ DMUS_SHAPET_LOOPABLE = 0x2,
+ DMUS_SHAPET_LOUD = 0x3,
+ DMUS_SHAPET_QUIET = 0x4,
+ DMUS_SHAPET_PEAKING = 0x5,
+ DMUS_SHAPET_RANDOM = 0x6,
+ DMUS_SHAPET_RISING = 0x7,
+ DMUS_SHAPET_SONG = 0x8
+};
+
+enum enumDMUS_COMPOSEF_FLAGS {
+ DMUS_COMPOSEF_NONE = 0x000000,
+ DMUS_COMPOSEF_ALIGN = 0x000001,
+ DMUS_COMPOSEF_OVERLAP = 0x000002,
+ DMUS_COMPOSEF_IMMEDIATE = 0x000004,
+ DMUS_COMPOSEF_GRID = 0x000008,
+ DMUS_COMPOSEF_BEAT = 0x000010,
+ DMUS_COMPOSEF_MEASURE = 0x000020,
+ DMUS_COMPOSEF_AFTERPREPARETIME = 0x000040,
+ DMUS_COMPOSEF_VALID_START_BEAT = 0x000080,
+ DMUS_COMPOSEF_VALID_START_GRID = 0x000100,
+ DMUS_COMPOSEF_VALID_START_TICK = 0x000200,
+ DMUS_COMPOSEF_SEGMENTEND = 0x000400,
+ DMUS_COMPOSEF_MARKER = 0x000800,
+ DMUS_COMPOSEF_MODULATE = 0x001000,
+ DMUS_COMPOSEF_LONG = 0x002000,
+ DMUS_COMPOSEF_ENTIRE_TRANSITION = 0x004000,
+ DMUS_COMPOSEF_1BAR_TRANSITION = 0x008000,
+ DMUS_COMPOSEF_ENTIRE_ADDITION = 0x010000,
+ DMUS_COMPOSEF_1BAR_ADDITION = 0x020000,
+ DMUS_COMPOSEF_VALID_START_MEASURE = 0x040000,
+ DMUS_COMPOSEF_DEFAULT = 0x080000,
+ DMUS_COMPOSEF_NOINVALIDATE = 0x100000,
+ DMUS_COMPOSEF_USE_AUDIOPATH = 0x200000,
+ DMUS_COMPOSEF_INVALIDATE_PRI = 0x400000
+};
+
+enum enumDMUS_PMSGF_FLAGS {
+ DMUS_PMSGF_REFTIME = 1,
+ DMUS_PMSGF_MUSICTIME = 2,
+ DMUS_PMSGF_TOOL_IMMEDIATE = 4,
+ DMUS_PMSGF_TOOL_QUEUE = 8,
+ DMUS_PMSGF_TOOL_ATTIME = 0x10,
+ DMUS_PMSGF_TOOL_FLUSH = 0x20,
+ DMUS_PMSGF_LOCKTOREFTIME = 0x40,
+ DMUS_PMSGF_DX8 = 0x80
+};
+
+enum enumDMUS_PMSGT_TYPES {
+ DMUS_PMSGT_MIDI = 0x00,
+ DMUS_PMSGT_NOTE = 0x01,
+ DMUS_PMSGT_SYSEX = 0x02,
+ DMUS_PMSGT_NOTIFICATION = 0x03,
+ DMUS_PMSGT_TEMPO = 0x04,
+ DMUS_PMSGT_CURVE = 0x05,
+ DMUS_PMSGT_TIMESIG = 0x06,
+ DMUS_PMSGT_PATCH = 0x07,
+ DMUS_PMSGT_TRANSPOSE = 0x08,
+ DMUS_PMSGT_CHANNEL_PRIORITY = 0x09,
+ DMUS_PMSGT_STOP = 0x0A,
+ DMUS_PMSGT_DIRTY = 0x0B,
+ DMUS_PMSGT_WAVE = 0x0C,
+ DMUS_PMSGT_LYRIC = 0x0D,
+ DMUS_PMSGT_SCRIPTLYRIC = 0x0E,
+ DMUS_PMSGT_USER = 0xFF
+};
+
+enum enumDMUS_SEGF_FLAGS {
+ DMUS_SEGF_REFTIME = 0x000040,
+ DMUS_SEGF_SECONDARY = 0x000080,
+ DMUS_SEGF_QUEUE = 0x000100,
+ DMUS_SEGF_CONTROL = 0x000200,
+ DMUS_SEGF_AFTERPREPARETIME = 0x000400,
+ DMUS_SEGF_GRID = 0x000800,
+ DMUS_SEGF_BEAT = 0x001000,
+ DMUS_SEGF_MEASURE = 0x002000,
+ DMUS_SEGF_DEFAULT = 0x004000,
+ DMUS_SEGF_NOINVALIDATE = 0x008000,
+ DMUS_SEGF_ALIGN = 0x0010000,
+ DMUS_SEGF_VALID_START_BEAT = 0x0020000,
+ DMUS_SEGF_VALID_START_GRID = 0x0040000,
+ DMUS_SEGF_VALID_START_TICK = 0x0080000,
+ DMUS_SEGF_AUTOTRANSITION = 0x0100000,
+ DMUS_SEGF_AFTERQUEUETIME = 0x0200000,
+ DMUS_SEGF_AFTERLATENCYTIME = 0x0400000,
+ DMUS_SEGF_SEGMENTEND = 0x0800000,
+ DMUS_SEGF_MARKER = 0x01000000,
+ DMUS_SEGF_TIMESIG_ALWAYS = 0x02000000,
+ DMUS_SEGF_USE_AUDIOPATH = 0x04000000,
+ DMUS_SEGF_VALID_START_MEASURE = 0x08000000,
+ DMUS_SEGF_INVALIDATE_PRI = 0x10000000
+};
+
+enum enumDMUS_TIME_RESOLVE_FLAGS {
+ DMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME,
+ DMUS_TIME_RESOLVE_AFTERQUEUETIME = DMUS_SEGF_AFTERQUEUETIME,
+ DMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME,
+ DMUS_TIME_RESOLVE_GRID = DMUS_SEGF_GRID,
+ DMUS_TIME_RESOLVE_BEAT = DMUS_SEGF_BEAT,
+ DMUS_TIME_RESOLVE_MEASURE = DMUS_SEGF_MEASURE,
+ DMUS_TIME_RESOLVE_MARKER = DMUS_SEGF_MARKER,
+ DMUS_TIME_RESOLVE_SEGMENTEND = DMUS_SEGF_SEGMENTEND,
+};
+
+enum enumDMUS_CHORDKEYF_FLAGS {
+ DMUS_CHORDKEYF_SILENT = 0x1,
+};
+
+enum enumDMUS_NOTEF_FLAGS {
+ DMUS_NOTEF_NOTEON = 0x01,
+ /* DX8 */
+ DMUS_NOTEF_NOINVALIDATE = 0x02,
+ DMUS_NOTEF_NOINVALIDATE_INSCALE = 0x04,
+ DMUS_NOTEF_NOINVALIDATE_INCHORD = 0x08,
+ DMUS_NOTEF_REGENERATE = 0x10,
+};
+
+enum enumDMUS_PLAYMODE_FLAGS {
+ DMUS_PLAYMODE_KEY_ROOT = 0x01,
+ DMUS_PLAYMODE_CHORD_ROOT = 0x02,
+ DMUS_PLAYMODE_SCALE_INTERVALS = 0x04,
+ DMUS_PLAYMODE_CHORD_INTERVALS = 0x08,
+ DMUS_PLAYMODE_NONE = 0x10,
+};
+
+enum enumDMUS_CURVE_FLAGS {
+ DMUS_CURVE_RESET = 0x1,
+ DMUS_CURVE_START_FROM_CURRENT = 0x2
+};
+
+enum {
+ DMUS_CURVES_LINEAR = 0x0,
+ DMUS_CURVES_INSTANT = 0x1,
+ DMUS_CURVES_EXP = 0x2,
+ DMUS_CURVES_LOG = 0x3,
+ DMUS_CURVES_SINE = 0x4
+};
+
+
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+/*typedef struct _DMUS_PMSG DMUS_PMSG, *LPDMUS_PMSG; */
+typedef struct _DMUS_AUDIOPARAMS DMUS_AUDIOPARAMS, *LPDMUS_AUDIOPARAMS;
+typedef struct _DMUS_SUBCHORD DMUS_SUBCHORD, *LPDMUS_SUBCHORD;
+typedef struct _DMUS_CHORD_KEY DMUS_CHORD_KEY, *LPDMUS_CHORD_KEY;
+typedef struct _DMUS_NOTE_PMSG DMUS_NOTE_PMSG, *LPDMUS_NOTE_PMSG;
+typedef struct _DMUS_MIDI_PMSG DMUS_MIDI_PMSG, *LPDMUS_MIDI_PMSG;
+typedef struct _DMUS_PATCH_PMSG DMUS_PATCH_PMSG, *LPDMUS_PATCH_PMSG;
+typedef struct _DMUS_TRANSPOSE_PMSG DMUS_TRANSPOSE_PMSG, *LPDMUS_TRANSPOSE_PMSG;
+typedef struct _DMUS_CHANNEL_PRIORITY_PMSG DMUS_CHANNEL_PRIORITY_PMSG, *LPDMUS_CHANNEL_PRIORITY_PMSG;
+typedef struct _DMUS_TEMPO_PMSG DMUS_TEMPO_PMSG, *LPDMUS_TEMPO_PMSG;
+typedef struct _DMUS_SYSEX_PMSG DMUS_SYSEX_PMSG, *LPDMUS_SYSEX_PMSG;
+typedef struct _DMUS_CURVE_PMSG DMUS_CURVE_PMSG, *LPDMUS_CURVE_PMSG;
+typedef struct _DMUS_TIMESIG_PMSG DMUS_TIMESIG_PMSG, *LPDMUS_TIMESIG_PMSG;
+typedef struct _DMUS_NOTIFICATION_PMSG DMUS_NOTIFICATION_PMSG, *LPDMUS_NOTIFICATION_PMSG;
+typedef struct _DMUS_WAVE_PMSG DMUS_WAVE_PMSG, *LPDMUS_WAVE_PMSG;
+typedef struct _DMUS_LYRIC_PMSG DMUS_LYRIC_PMSG, *LPDMUS_LYRIC_PMSG;
+typedef struct _DMUS_VERSION DMUS_VERSION, *LPDMUS_VERSION;
+typedef struct _DMUS_TIMESIGNATURE DMUS_TIMESIGNATURE, *LPDMUS_TIMESIGNATURE;
+typedef struct _DMUS_VALID_START_PARAM DMUS_VALID_START_PARAM, *LPDMUS_VALID_START_PARAM;
+typedef struct _DMUS_PLAY_MARKER_PARAM DMUS_PLAY_MARKER_PARAM, *LPDMUS_PLAY_MARKER_PARAM;
+typedef struct _DMUS_OBJECTDESC DMUS_OBJECTDESC, *LPDMUS_OBJECTDESC;
+typedef struct _DMUS_SCRIPT_ERRORINFO DMUS_SCRIPT_ERRORINFO, *LPDMUS_SCRIPT_ERRORINFO;
+typedef struct _DMUS_COMMAND_PARAM DMUS_COMMAND_PARAM, *LPDMUS_COMMAND_PARAM;
+typedef struct _DMUS_COMMAND_PARAM_2 DMUS_COMMAND_PARAM_2, *LPDMUS_COMMAND_PARAM_2;
+typedef struct _DMUS_BAND_PARAM DMUS_BAND_PARAM, *LPDMUS_BAND_PARAM;
+typedef struct _DMUS_VARIATIONS_PARAM DMUS_VARIATIONS_PARAM, *LPDMUS_VARIATIONS_PARAM;
+
+/* actual structures */
+struct _DMUS_PMSG {
+ DMUS_PMSG_PART
+};
+
+struct _DMUS_AUDIOPARAMS {
+ DWORD dwSize;
+ BOOL fInitNow;
+ DWORD dwValidData;
+ DWORD dwFeatures;
+ DWORD dwVoices;
+ DWORD dwSampleRate;
+ CLSID clsidDefaultSynth;
+};
+
+struct _DMUS_SUBCHORD {
+ DWORD dwChordPattern;
+ DWORD dwScalePattern;
+ DWORD dwInversionPoints;
+ DWORD dwLevels;
+ BYTE bChordRoot;
+ BYTE bScaleRoot;
+};
+
+struct _DMUS_CHORD_KEY {
+ WCHAR wszName[16];
+ WORD wMeasure;
+ BYTE bBeat;
+ BYTE bSubChordCount;
+ DMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD];
+ DWORD dwScale;
+ BYTE bKey;
+ BYTE bFlags;
+};
+
+struct _DMUS_NOTE_PMSG {
+ DMUS_PMSG_PART
+ MUSIC_TIME mtDuration;
+ WORD wMusicValue;
+ WORD wMeasure;
+ short nOffset;
+ BYTE bBeat;
+ BYTE bGrid;
+ BYTE bVelocity;
+ BYTE bFlags;
+ BYTE bTimeRange;
+ BYTE bDurRange;
+ BYTE bVelRange;
+ BYTE bPlayModeFlags;
+ BYTE bSubChordLevel;
+ BYTE bMidiValue;
+ char cTranspose;
+};
+
+struct _DMUS_MIDI_PMSG {
+ DMUS_PMSG_PART
+ BYTE bStatus;
+ BYTE bByte1;
+ BYTE bByte2;
+ BYTE bPad[1];
+};
+
+struct _DMUS_PATCH_PMSG {
+ DMUS_PMSG_PART
+ BYTE byInstrument;
+ BYTE byMSB;
+ BYTE byLSB;
+ BYTE byPad[1];
+};
+
+struct _DMUS_TRANSPOSE_PMSG {
+ DMUS_PMSG_PART
+ short nTranspose;
+ /* DX8 */
+ WORD wMergeIndex;
+};
+
+struct _DMUS_CHANNEL_PRIORITY_PMSG {
+ DMUS_PMSG_PART
+ DWORD dwChannelPriority;
+};
+
+struct _DMUS_TEMPO_PMSG {
+ DMUS_PMSG_PART
+ double dblTempo;
+};
+
+struct _DMUS_SYSEX_PMSG {
+ DMUS_PMSG_PART
+ DWORD dwLen;
+ BYTE abData[1];
+};
+
+struct _DMUS_CURVE_PMSG {
+ DMUS_PMSG_PART
+ MUSIC_TIME mtDuration;
+ MUSIC_TIME mtOriginalStart;
+ MUSIC_TIME mtResetDuration;
+ short nStartValue;
+ short nEndValue;
+ short nResetValue;
+ WORD wMeasure;
+ short nOffset;
+ BYTE bBeat;
+ BYTE bGrid;
+ BYTE bType;
+ BYTE bCurveShape;
+ BYTE bCCData;
+ BYTE bFlags;
+ /* DX8 */
+ WORD wParamType;
+ WORD wMergeIndex;
+};
+
+struct _DMUS_TIMESIG_PMSG {
+ DMUS_PMSG_PART
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
+
+struct _DMUS_NOTIFICATION_PMSG {
+ DMUS_PMSG_PART
+ GUID guidNotificationType;
+ DWORD dwNotificationOption;
+ DWORD dwField1;
+ DWORD dwField2;
+};
+
+struct _DMUS_WAVE_PMSG {
+ DMUS_PMSG_PART
+ REFERENCE_TIME rtStartOffset;
+ REFERENCE_TIME rtDuration;
+ LONG lOffset;
+ LONG lVolume;
+ LONG lPitch;
+ BYTE bFlags;
+};
+
+struct _DMUS_LYRIC_PMSG {
+ DMUS_PMSG_PART
+ WCHAR wszString[1];
+};
+
+struct _DMUS_VERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+};
+
+struct _DMUS_TIMESIGNATURE {
+ MUSIC_TIME mtTime;
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
+
+struct _DMUS_VALID_START_PARAM {
+ MUSIC_TIME mtTime;
+};
+
+struct _DMUS_PLAY_MARKER_PARAM {
+ MUSIC_TIME mtTime;
+};
+
+struct _DMUS_OBJECTDESC {
+ DWORD dwSize;
+ DWORD dwValidData;
+ GUID guidObject;
+ GUID guidClass;
+ FILETIME ftDate;
+ DMUS_VERSION vVersion;
+ WCHAR wszName[DMUS_MAX_NAME];
+ WCHAR wszCategory[DMUS_MAX_CATEGORY];
+ WCHAR wszFileName[DMUS_MAX_FILENAME];
+ LONGLONG llMemLength;
+ LPBYTE pbMemData;
+ IStream* pStream;
+};
+
+struct _DMUS_SCRIPT_ERRORINFO {
+ DWORD dwSize;
+ HRESULT hr;
+ ULONG ulLineNumber;
+ LONG ichCharPosition;
+ WCHAR wszSourceFile[DMUS_MAX_FILENAME];
+ WCHAR wszSourceComponent[DMUS_MAX_FILENAME];
+ WCHAR wszDescription[DMUS_MAX_FILENAME];
+ WCHAR wszSourceLineText[DMUS_MAX_FILENAME];
+};
+
+struct _DMUS_COMMAND_PARAM {
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+};
+
+struct _DMUS_COMMAND_PARAM_2 {
+ MUSIC_TIME mtTime;
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+};
+
+struct _DMUS_BAND_PARAM {
+ MUSIC_TIME mtTimePhysical;
+ struct IDirectMusicBand *pBand;
+};
+
+struct _DMUS_VARIATIONS_PARAM {
+ DWORD dwPChannelsUsed;
+ DWORD* padwPChannels;
+ DWORD* padwVariations;
+};
+
+
+/*****************************************************************************
+ * IDirectMusicBand interface
+ */
+#define INTERFACE IDirectMusicBand
+DECLARE_INTERFACE_(IDirectMusicBand,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicBand methods ***/
+ STDMETHOD(CreateSegment)(THIS_ struct IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(Download)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE;
+ STDMETHOD(Unload)(THIS_ struct IDirectMusicPerformance *pPerformance) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicBand_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicBand_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicBand methods ***/
+#define IDirectMusicBand_CreateSegment(p,a) (p)->lpVtbl->CreateSegment(p,a)
+#define IDirectMusicBand_Download(p,a) (p)->lpVtbl->Download(p,a)
+#define IDirectMusicBand_Unload(p,a) (p)->lpVtbl->Unload(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicObject interface
+ */
+#define INTERFACE IDirectMusicObject
+DECLARE_INTERFACE_(IDirectMusicObject,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicObject methods ***/
+ STDMETHOD(GetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(SetDescriptor)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(ParseDescriptor)(THIS_ LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicObject_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicObject methods ***/
+#define IDirectMusicObject_GetDescriptor(p,a) (p)->lpVtbl->GetDescriptor(p,a)
+#define IDirectMusicObject_SetDescriptor(p,a) (p)->lpVtbl->SetDescriptor(p,a)
+#define IDirectMusicObject_ParseDescriptor(p,a,b) (p)->lpVtbl->ParseDescriptor(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicLoader interface
+ */
+#define INTERFACE IDirectMusicLoader
+DECLARE_INTERFACE_(IDirectMusicLoader,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicLoader methods ***/
+ STDMETHOD(_GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE;
+ STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;
+ STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;
+ STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE;
+ STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE;
+ STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE;
+ STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE;
+ STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicLoader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicLoader_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicLoader_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicLoader methods ***/
+#define IDirectMusicLoader_GetObject(p,a,b,c) (p)->lpVtbl->_GetObject(p,a,b,c)
+#define IDirectMusicLoader_SetObject(p,a) (p)->lpVtbl->SetObject(p,a)
+#define IDirectMusicLoader_SetSearchDirectory(p,a,b,c) (p)->lpVtbl->SetSearchDirectory(p,a,b,c)
+#define IDirectMusicLoader_ScanDirectory(p,a,b,c) (p)->lpVtbl->ScanDirectory(p,a,b,c)
+#define IDirectMusicLoader_CacheObject(p,a) (p)->lpVtbl->CacheObject(p,a)
+#define IDirectMusicLoader_ReleaseObject(p,a) (p)->lpVtbl->ReleaseObject(p,a)
+#define IDirectMusicLoader_ClearCache(p,a) (p)->lpVtbl->ClearCache(p,a)
+#define IDirectMusicLoader_EnableCache(p,a,b) (p)->lpVtbl->EnableCache(p,a,b)
+#define IDirectMusicLoader_EnumObject(p,a,b,c) (p)->lpVtbl->EnumObject(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicLoader8 interface
+ */
+#define INTERFACE IDirectMusicLoader8
+DECLARE_INTERFACE_(IDirectMusicLoader8,IDirectMusicLoader)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicLoader methods ***/
+ STDMETHOD(_GetObject)(THIS_ LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID *ppv) PURE;
+ STDMETHOD(SetObject)(THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(SetSearchDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzPath, BOOL fClear) PURE;
+ STDMETHOD(ScanDirectory)(THIS_ REFGUID rguidClass, WCHAR *pwzFileExtension, WCHAR *pwzScanFileName) PURE;
+ STDMETHOD(CacheObject)(THIS_ IDirectMusicObject *pObject) PURE;
+ STDMETHOD(ReleaseObject)(THIS_ IDirectMusicObject *pObject) PURE;
+ STDMETHOD(ClearCache)(THIS_ REFGUID rguidClass) PURE;
+ STDMETHOD(EnableCache)(THIS_ REFGUID rguidClass, BOOL fEnable) PURE;
+ STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) PURE;
+ /*** IDirectMusicLoader8 methods ***/
+ STDMETHOD_(void,CollectGarbage)(THIS) PURE;
+ STDMETHOD(ReleaseObjectByUnknown)(THIS_ IUnknown *pObject) PURE;
+ STDMETHOD(LoadObjectFromFile)(THIS_ REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR *pwzFilePath, void **ppObject) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicLoader8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicLoader8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicLoader8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicLoader methods ***/
+#define IDirectMusicLoader8_GetObject(p,a,b,c) (p)->lpVtbl->_GetObject(p,a,b,c)
+#define IDirectMusicLoader8_SetObject(p,a) (p)->lpVtbl->SetObject(p,a)
+#define IDirectMusicLoader8_SetSearchDirectory(p,a,b,c) (p)->lpVtbl->SetSearchDirectory(p,a,b,c)
+#define IDirectMusicLoader8_ScanDirectory(p,a,b,c) (p)->lpVtbl->ScanDirectory(p,a,b,c)
+#define IDirectMusicLoader8_CacheObject(p,a) (p)->lpVtbl->CacheObject(p,a)
+#define IDirectMusicLoader8_ReleaseObject(p,a) (p)->lpVtbl->ReleaseObject(p,a)
+#define IDirectMusicLoader8_ClearCache(p,a) (p)->lpVtbl->ClearCache(p,a)
+#define IDirectMusicLoader8_EnableCache(p,a,b) (p)->lpVtbl->EnableCache(p,a,b)
+#define IDirectMusicLoader8_EnumObject(p,a,b,c) (p)->lpVtbl->EnumObject(p,a,b,c)
+/*** IDirectMusicLoader8 methods ***/
+#define IDirectMusicLoader8_CollectGarbage(p) (p)->lpVtbl->CollectGarbage(p)
+#define IDirectMusicLoader8_ReleaseObjectByUnknown(p,a) (p)->lpVtbl->ReleaseObjectByUnknown(p,a)
+#define IDirectMusicLoader8_LoadObjectFromFile(p,a,b,c,d) (p)->lpVtbl->LoadObjectFromFile(p,a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicGetLoader interface
+ */
+#define INTERFACE IDirectMusicGetLoader
+DECLARE_INTERFACE_(IDirectMusicGetLoader,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicGetLoader methods ***/
+ STDMETHOD(GetLoader)(THIS_ IDirectMusicLoader **ppLoader) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicGetLoader_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicGetLoader_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicGetLoader_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicGetLoader methods ***/
+#define IDirectMusicGetLoader_GetLoader(p,a) (p)->lpVtbl->GetLoader(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegment interface
+ */
+#define INTERFACE IDirectMusicSegment
+DECLARE_INTERFACE_(IDirectMusicSegment,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSegment methods ***/
+ STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE;
+ STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE;
+ STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+ STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE;
+ STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE;
+ STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE;
+ STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE;
+ STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE;
+ STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE;
+ STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE;
+ STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD dwFlags) PURE;
+ STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+ STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+ STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+ STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+ STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE;
+ STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+ STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;
+ STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE;
+ STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegment_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegment_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegment_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegment methods ***/
+#define IDirectMusicSegment_GetLength(p,a) (p)->lpVtbl->GetLength(p,a)
+#define IDirectMusicSegment_SetLength(p,a) (p)->lpVtbl->SetLength(p,a)
+#define IDirectMusicSegment_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegment_SetRepeats(p,a) (p)->lpVtbl->SetRepeats(p,a)
+#define IDirectMusicSegment_GetDefaultResolution(p,a) (p)->lpVtbl->GetDefaultResolution(p,a)
+#define IDirectMusicSegment_SetDefaultResolution(p,a) (p)->lpVtbl->SetDefaultResolution(p,a)
+#define IDirectMusicSegment_GetTrack(p,a,b,c,d) (p)->lpVtbl->GetTrack(p,a,b,c,d)
+#define IDirectMusicSegment_GetTrackGroup(p,a,b) (p)->lpVtbl->GetTrackGroup(p,a,b)
+#define IDirectMusicSegment_InsertTrack(p,a,b) (p)->lpVtbl->InsertTrack(p,a,b)
+#define IDirectMusicSegment_RemoveTrack(p,a) (p)->lpVtbl->RemoveTrack(p,a)
+#define IDirectMusicSegment_InitPlay(p,a,b,c) (p)->lpVtbl->InitPlay(p,a,b,c)
+#define IDirectMusicSegment_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicSegment_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicSegment_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicSegment_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicSegment_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicSegment_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicSegment_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirectMusicSegment_SetStartPoint(p,a) (p)->lpVtbl->SetStartPoint(p,a)
+#define IDirectMusicSegment_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a)
+#define IDirectMusicSegment_SetLoopPoints(p,a,b) (p)->lpVtbl->SetLoopPoints(p,a,b)
+#define IDirectMusicSegment_GetLoopPoints(p,a,b) (p)->lpVtbl->GetLoopPoints(p,a,b)
+#define IDirectMusicSegment_SetPChannelsUsed(p,a,b) (p)->lpVtbl->SetPChannelsUsed(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegment8 interface
+ */
+#define INTERFACE IDirectMusicSegment8
+DECLARE_INTERFACE_(IDirectMusicSegment8,IDirectMusicSegment)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSegment methods ***/
+ STDMETHOD(GetLength)(THIS_ MUSIC_TIME *pmtLength) PURE;
+ STDMETHOD(SetLength)(THIS_ MUSIC_TIME mtLength) PURE;
+ STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+ STDMETHOD(SetRepeats)(THIS_ DWORD dwRepeats) PURE;
+ STDMETHOD(GetDefaultResolution)(THIS_ DWORD *pdwResolution) PURE;
+ STDMETHOD(SetDefaultResolution)(THIS_ DWORD dwResolution) PURE;
+ STDMETHOD(GetTrack)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) PURE;
+ STDMETHOD(GetTrackGroup)(THIS_ IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) PURE;
+ STDMETHOD(InsertTrack)(THIS_ IDirectMusicTrack *pTrack, DWORD dwGroupBits) PURE;
+ STDMETHOD(RemoveTrack)(THIS_ IDirectMusicTrack *pTrack) PURE;
+ STDMETHOD(InitPlay)(THIS_ struct IDirectMusicSegmentState **ppSegState, struct IDirectMusicPerformance *pPerformance, DWORD dwFlags) PURE;
+ STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+ STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+ STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+ STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+ STDMETHOD(Clone)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(SetStartPoint)(THIS_ MUSIC_TIME mtStart) PURE;
+ STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+ STDMETHOD(SetLoopPoints)(THIS_ MUSIC_TIME mtStart, MUSIC_TIME mtEnd) PURE;
+ STDMETHOD(GetLoopPoints)(THIS_ MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) PURE;
+ STDMETHOD(SetPChannelsUsed)(THIS_ DWORD dwNumPChannels, DWORD *paPChannels) PURE;
+ /*** IDirectMusicSegment8 methods ***/
+ STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE;
+ STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE;
+ STDMETHOD(Compose)(THIS_ MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) PURE;
+ STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE;
+ STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegment8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegment8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegment8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegment methods ***/
+#define IDirectMusicSegment8_GetLength(p,a) (p)->lpVtbl->GetLength(p,a)
+#define IDirectMusicSegment8_SetLength(p,a) (p)->lpVtbl->SetLength(p,a)
+#define IDirectMusicSegment8_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegment8_SetRepeats(p,a) (p)->lpVtbl->SetRepeats(p,a)
+#define IDirectMusicSegment8_GetDefaultResolution(p,a) (p)->lpVtbl->GetDefaultResolution(p,a)
+#define IDirectMusicSegment8_SetDefaultResolution(p,a) (p)->lpVtbl->SetDefaultResolution(p,a)
+#define IDirectMusicSegment8_GetTrack(p,a,b,c,d) (p)->lpVtbl->GetTrack(p,a,b,c,d)
+#define IDirectMusicSegment8_GetTrackGroup(p,a,b) (p)->lpVtbl->GetTrackGroup(p,a,b)
+#define IDirectMusicSegment8_InsertTrack(p,a,b) (p)->lpVtbl->InsertTrack(p,a,b)
+#define IDirectMusicSegment8_RemoveTrack(p,a) (p)->lpVtbl->RemoveTrack(p,a)
+#define IDirectMusicSegment8_InitPlay(p,a,b,c) (p)->lpVtbl->InitPlay(p,a,b,c)
+#define IDirectMusicSegment8_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicSegment8_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicSegment8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicSegment8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicSegment8_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicSegment8_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicSegment8_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirectMusicSegment8_SetStartPoint(p,a) (p)->lpVtbl->SetStartPoint(p,a)
+#define IDirectMusicSegment8_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a)
+#define IDirectMusicSegment8_SetLoopPoints(p,a,b) (p)->lpVtbl->SetLoopPoints(p,a,b)
+#define IDirectMusicSegment8_GetLoopPoints(p,a,b) (p)->lpVtbl->GetLoopPoints(p,a,b)
+#define IDirectMusicSegment8_SetPChannelsUsed(p,a,b) (p)->lpVtbl->SetPChannelsUsed(p,a,b)
+/*** IDirectMusicSegment8 methods ***/
+#define IDirectMusicSegment8_SetTrackConfig(p,a,b,c,d,e) (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e)
+#define IDirectMusicSegment8_GetAudioPathConfig(p,a) (p)->lpVtbl->GetAudioPathConfig(p,a)
+#define IDirectMusicSegment8_Compose(p,a,b,c,d) (p)->lpVtbl->Compose(p,a,b,c,d)
+#define IDirectMusicSegment8_Download(p,a) (p)->lpVtbl->Download(p,a)
+#define IDirectMusicSegment8_Unload(p,a) (p)->lpVtbl->Unload(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegmentState interface
+ */
+#define INTERFACE IDirectMusicSegmentState
+DECLARE_INTERFACE_(IDirectMusicSegmentState,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSegmentState methods ***/
+ STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+ STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE;
+ STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE;
+ STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegmentState_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegmentState_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegmentState_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegmentState methods ***/
+#define IDirectMusicSegmentState_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegmentState_GetSegment(p,a) (p)->lpVtbl->GetSegment(p,a)
+#define IDirectMusicSegmentState_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicSegmentState_GetSeek(p,a) (p)->lpVtbl->GetSeek(p,a)
+#define IDirectMusicSegmentState_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSegmentState8 interface
+ */
+#define INTERFACE IDirectMusicSegmentState8
+DECLARE_INTERFACE_(IDirectMusicSegmentState8,IDirectMusicSegmentState)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSegmentState methods ***/
+ STDMETHOD(GetRepeats)(THIS_ DWORD *pdwRepeats) PURE;
+ STDMETHOD(GetSegment)(THIS_ IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(GetStartTime)(THIS_ MUSIC_TIME *pmtStart) PURE;
+ STDMETHOD(GetSeek)(THIS_ MUSIC_TIME *pmtSeek) PURE;
+ STDMETHOD(GetStartPoint)(THIS_ MUSIC_TIME *pmtStart) PURE;
+ /*** IDirectMusicSegmentState8 methods ***/
+ STDMETHOD(SetTrackConfig)(THIS_ REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) PURE;
+ STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSegmentState8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegmentState8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegmentState8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSegmentState methods ***/
+#define IDirectMusicSegmentState8_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegmentState8_GetSegment(p,a) (p)->lpVtbl->GetSegment(p,a)
+#define IDirectMusicSegmentState8_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicSegmentState8_GetSeek(p,a) (p)->lpVtbl->GetSeek(p,a)
+#define IDirectMusicSegmentState8_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a)
+/*** IDirectMusicSegmentState8 methods ***/
+#define IDirectMusicSegmentState8_SetTrackConfig(p,a,b,c,d,e) (p)->lpVtbl->SetTrackConfig(p,a,b,c,d,e)
+#define IDirectMusicSegmentState8_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicAudioPath interface
+ */
+#define INTERFACE IDirectMusicAudioPath
+DECLARE_INTERFACE_(IDirectMusicAudioPath,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicAudioPath methods ***/
+ STDMETHOD(GetObjectInPath)(THIS_ DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void **ppObject) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fActivate) PURE;
+ STDMETHOD(SetVolume)(THIS_ LONG lVolume, DWORD dwDuration) PURE;
+ STDMETHOD(ConvertPChannel)(THIS_ DWORD dwPChannelIn, DWORD *pdwPChannelOut) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicAudioPath_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicAudioPath_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicAudioPath_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicAudioPath methods ***/
+#define IDirectMusicAudioPath_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)
+#define IDirectMusicAudioPath_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicAudioPath_SetVolume(p,a,b) (p)->lpVtbl->SetVolume(p,a,b)
+#define IDirectMusicAudioPath_ConvertPChannel(p,a,b) (p)->lpVtbl->ConvertPChannel(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPerformance interface
+ */
+#define INTERFACE IDirectMusicPerformance
+DECLARE_INTERFACE_(IDirectMusicPerformance,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicPerformance methods ***/
+ STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+ STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE;
+ STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+ STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE;
+ STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE;
+ STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE;
+ STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE;
+ STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE;
+ STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE;
+ STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE;
+ STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE;
+ STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+ STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+ STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;
+ STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE;
+ STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE;
+ STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE;
+ STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE;
+ STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE;
+ STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+ STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+ STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+ STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+ STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+ STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+ STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+ STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+ STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+ STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE;
+ STDMETHOD(CloseDown)(THIS) PURE;
+ STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE;
+ STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE;
+ STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE;
+ STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE;
+ STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPerformance_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPerformance_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPerformance_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicPerformance methods ***/
+#define IDirectMusicPerformance_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c)
+#define IDirectMusicPerformance_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d)
+#define IDirectMusicPerformance_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d)
+#define IDirectMusicPerformance_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b)
+#define IDirectMusicPerformance_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a)
+#define IDirectMusicPerformance_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a)
+#define IDirectMusicPerformance_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a)
+#define IDirectMusicPerformance_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a)
+#define IDirectMusicPerformance_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a)
+#define IDirectMusicPerformance_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b)
+#define IDirectMusicPerformance_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
+#define IDirectMusicPerformance_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b)
+#define IDirectMusicPerformance_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
+#define IDirectMusicPerformance_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b)
+#define IDirectMusicPerformance_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a)
+#define IDirectMusicPerformance_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicPerformance_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicPerformance_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b)
+#define IDirectMusicPerformance_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a)
+#define IDirectMusicPerformance_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicPerformance_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicPerformance_AddPort(p,a) (p)->lpVtbl->AddPort(p,a)
+#define IDirectMusicPerformance_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a)
+#define IDirectMusicPerformance_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
+#define IDirectMusicPerformance_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
+#define IDirectMusicPerformance_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
+#define IDirectMusicPerformance_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b)
+#define IDirectMusicPerformance_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicPerformance_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a)
+#define IDirectMusicPerformance_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a)
+#define IDirectMusicPerformance_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a)
+#define IDirectMusicPerformance_CloseDown(p) (p)->lpVtbl->CloseDown(p)
+#define IDirectMusicPerformance_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c)
+#define IDirectMusicPerformance_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
+#define IDirectMusicPerformance_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
+#define IDirectMusicPerformance_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPerformance8 interface
+ */
+#define INTERFACE IDirectMusicPerformance8
+DECLARE_INTERFACE_(IDirectMusicPerformance8,IDirectMusicPerformance)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicPerformance methods ***/
+ STDMETHOD(Init)(THIS_ IDirectMusic **ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) PURE;
+ STDMETHOD(PlaySegment)(THIS_ IDirectMusicSegment *pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState) PURE;
+ STDMETHOD(Stop)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+ STDMETHOD(GetSegmentState)(THIS_ IDirectMusicSegmentState **ppSegmentState, MUSIC_TIME mtTime) PURE;
+ STDMETHOD(SetPrepareTime)(THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetPrepareTime)(THIS_ DWORD *pdwMilliSeconds) PURE;
+ STDMETHOD(SetBumperLength)(THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetBumperLength)(THIS_ DWORD *pdwMilliSeconds) PURE;
+ STDMETHOD(SendPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(MusicToReferenceTime)(THIS_ MUSIC_TIME mtTime, REFERENCE_TIME *prtTime) PURE;
+ STDMETHOD(ReferenceToMusicTime)(THIS_ REFERENCE_TIME rtTime, MUSIC_TIME *pmtTime) PURE;
+ STDMETHOD(IsPlaying)(THIS_ IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState) PURE;
+ STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *prtNow, MUSIC_TIME *pmtNow) PURE;
+ STDMETHOD(AllocPMsg)(THIS_ ULONG cb, DMUS_PMSG **ppPMSG) PURE;
+ STDMETHOD(FreePMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(GetGraph)(THIS_ struct IDirectMusicGraph **ppGraph) PURE;
+ STDMETHOD(SetGraph)(THIS_ struct IDirectMusicGraph *pGraph) PURE;
+ STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification, REFERENCE_TIME rtMinimum) PURE;
+ STDMETHOD(GetNotificationPMsg)(THIS_ DMUS_NOTIFICATION_PMSG **ppNotificationPMsg) PURE;
+ STDMETHOD(AddNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(AddPort)(THIS_ IDirectMusicPort *pPort) PURE;
+ STDMETHOD(RemovePort)(THIS_ IDirectMusicPort *pPort) PURE;
+ STDMETHOD(AssignPChannelBlock)(THIS_ DWORD dwBlockNum, IDirectMusicPort *pPort, DWORD dwGroup) PURE;
+ STDMETHOD(AssignPChannel)(THIS_ DWORD dwPChannel, IDirectMusicPort *pPort, DWORD dwGroup, DWORD dwMChannel) PURE;
+ STDMETHOD(PChannelInfo)(THIS_ DWORD dwPChannel, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+ STDMETHOD(DownloadInstrument)(THIS_ IDirectMusicInstrument *pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument **ppDownInst, DMUS_NOTERANGE *pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort **ppPort, DWORD *pdwGroup, DWORD *pdwMChannel) PURE;
+ STDMETHOD(Invalidate)(THIS_ MUSIC_TIME mtTime, DWORD dwFlags) PURE;
+ STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+ STDMETHOD(SetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) PURE;
+ STDMETHOD(GetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+ STDMETHOD(SetGlobalParam)(THIS_ REFGUID rguidType, void *pParam, DWORD dwSize) PURE;
+ STDMETHOD(GetLatencyTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+ STDMETHOD(GetQueueTime)(THIS_ REFERENCE_TIME *prtTime) PURE;
+ STDMETHOD(AdjustTime)(THIS_ REFERENCE_TIME rtAmount) PURE;
+ STDMETHOD(CloseDown)(THIS) PURE;
+ STDMETHOD(GetResolvedTime)(THIS_ REFERENCE_TIME rtTime, REFERENCE_TIME *prtResolved, DWORD dwTimeResolveFlags) PURE;
+ STDMETHOD(MIDIToMusic)(THIS_ BYTE bMIDIValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, WORD *pwMusicValue) PURE;
+ STDMETHOD(MusicToMIDI)(THIS_ WORD wMusicValue, DMUS_CHORD_KEY *pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE *pbMIDIValue) PURE;
+ STDMETHOD(TimeToRhythm)(THIS_ MUSIC_TIME mtTime, DMUS_TIMESIGNATURE *pTimeSig, WORD *pwMeasure, BYTE *pbBeat, BYTE *pbGrid, short *pnOffset) PURE;
+ STDMETHOD(RhythmToTime)(THIS_ WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE *pTimeSig, MUSIC_TIME *pmtTime) PURE;
+ /*** IDirectMusicPerformance8 methods ***/
+ STDMETHOD(InitAudio)(THIS_ IDirectMusic **ppDirectMusic, IDirectSound **ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS *pParams) PURE;
+ STDMETHOD(PlaySegmentEx)(THIS_ IUnknown *pSource, WCHAR *pwzSegmentName, IUnknown *pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState **ppSegmentState, IUnknown *pFrom, IUnknown *pAudioPath) PURE;
+ STDMETHOD(StopEx)(THIS_ IUnknown *pObjectToStop, __int64 i64StopTime, DWORD dwFlags) PURE;
+ STDMETHOD(ClonePMsg)(THIS_ DMUS_PMSG *pSourcePMSG, DMUS_PMSG **ppCopyPMSG) PURE;
+ STDMETHOD(CreateAudioPath)(THIS_ IUnknown *pSourceConfig, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE;
+ STDMETHOD(CreateStandardAudioPath)(THIS_ DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath **ppNewPath) PURE;
+ STDMETHOD(SetDefaultAudioPath)(THIS_ IDirectMusicAudioPath *pAudioPath) PURE;
+ STDMETHOD(GetDefaultAudioPath)(THIS_ IDirectMusicAudioPath **ppAudioPath) PURE;
+ STDMETHOD(GetParamEx)(THIS_ REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPerformance8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPerformance8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPerformance8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicPerformance methods ***/
+#define IDirectMusicPerformance8_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c)
+#define IDirectMusicPerformance8_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d)
+#define IDirectMusicPerformance8_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d)
+#define IDirectMusicPerformance8_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b)
+#define IDirectMusicPerformance8_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a)
+#define IDirectMusicPerformance8_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a)
+#define IDirectMusicPerformance8_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a)
+#define IDirectMusicPerformance8_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a)
+#define IDirectMusicPerformance8_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a)
+#define IDirectMusicPerformance8_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b)
+#define IDirectMusicPerformance8_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
+#define IDirectMusicPerformance8_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b)
+#define IDirectMusicPerformance8_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
+#define IDirectMusicPerformance8_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b)
+#define IDirectMusicPerformance8_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a)
+#define IDirectMusicPerformance8_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicPerformance8_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicPerformance8_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b)
+#define IDirectMusicPerformance8_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a)
+#define IDirectMusicPerformance8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicPerformance8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicPerformance8_AddPort(p,a) (p)->lpVtbl->AddPort(p,a)
+#define IDirectMusicPerformance8_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a)
+#define IDirectMusicPerformance8_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
+#define IDirectMusicPerformance8_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
+#define IDirectMusicPerformance8_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
+#define IDirectMusicPerformance8_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance8_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b)
+#define IDirectMusicPerformance8_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance8_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance8_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a)
+#define IDirectMusicPerformance8_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a)
+#define IDirectMusicPerformance8_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a)
+#define IDirectMusicPerformance8_CloseDown(p) (p)->lpVtbl->CloseDown(p)
+#define IDirectMusicPerformance8_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c)
+#define IDirectMusicPerformance8_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
+ /* IDirectMusicPerformance8 methods*/
+#define IDirectMusicPerformance8_InitAudio(p,a,b,c,d,e,f,g) (p)->lpVtbl->InitAudio(p,a,b,c,d,e,f,g)
+#define IDirectMusicPerformance8_PlaySegmentEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlaySegmentEx(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance8_StopEx(p,a,b,c) (p)->lpVtbl->StopEx(p,a,b,c)
+#define IDirectMusicPerformance8_ClonePMsg(p,a,b) (p)->lpVtbl->ClonePMsg(p,a,b)
+#define IDirectMusicPerformance8_CreateAudioPath(p,a,b,c) (p)->lpVtbl->CreateAudioPath(p,a,b,c)
+#define IDirectMusicPerformance8_CreateStandardAudioPath(p,a,b,c,d) (p)->lpVtbl->CreateStandardAudioPath(p,a,b,c,d)
+#define IDirectMusicPerformance8_SetDefaultAudioPath(p,a) (p)->lpVtbl->SetDefaultAudioPath(p,a)
+#define IDirectMusicPerformance8_GetDefaultAudioPath(p,a) (p)->lpVtbl->GetDefaultAudioPath(p,a)
+#define IDirectMusicPerformance8_GetParamEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f,g)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicGraph interface
+ */
+#define INTERFACE IDirectMusicGraph
+DECLARE_INTERFACE_(IDirectMusicGraph,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicGraph methods ***/
+ STDMETHOD(StampPMsg)(THIS_ DMUS_PMSG *pPMSG) PURE;
+ STDMETHOD(InsertTool)(THIS_ IDirectMusicTool *pTool, DWORD *pdwPChannels, DWORD cPChannels, LONG lIndex) PURE;
+ STDMETHOD(GetTool)(THIS_ DWORD dwIndex, IDirectMusicTool **ppTool) PURE;
+ STDMETHOD(RemoveTool)(THIS_ IDirectMusicTool *pTool) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicGraph_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicGraph_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicGraph_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicGraph methods ***/
+#define IDirectMusicGraph_StampPMsg(p,a) (p)->lpVtbl->StampPMsg(p,a)
+#define IDirectMusicGraph_InsertTool(p,a,b,c,d) (p)->lpVtbl->InsertTool(p,a,b,c,d)
+#define IDirectMusicGraph_GetTool(p,a,b) (p)->lpVtbl->GetTool(p,a,b)
+#define IDirectMusicGraph_RemoveTool(p,a) (p)->lpVtbl->RemoveTool(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicStyle interface
+ */
+#define INTERFACE IDirectMusicStyle
+DECLARE_INTERFACE_(IDirectMusicStyle,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicStyle methods ***/
+ STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE;
+ STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE;
+ STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE;
+ STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE;
+ STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE;
+ STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE;
+ STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicStyle_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicStyle_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicStyle_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicStyle methods ***/
+#define IDirectMusicStyle_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b)
+#define IDirectMusicStyle_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b)
+#define IDirectMusicStyle_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a)
+#define IDirectMusicStyle_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b)
+#define IDirectMusicStyle_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b)
+#define IDirectMusicStyle_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a)
+#define IDirectMusicStyle_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b)
+#define IDirectMusicStyle_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b)
+#define IDirectMusicStyle_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a)
+#define IDirectMusicStyle_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
+#define IDirectMusicStyle_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicStyle8 interface
+ */
+#define INTERFACE IDirectMusicStyle8
+DECLARE_INTERFACE_(IDirectMusicStyle8,IDirectMusicStyle)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicStyle methods ***/
+ STDMETHOD(GetBand)(THIS_ WCHAR *pwszName, IDirectMusicBand **ppBand) PURE;
+ STDMETHOD(EnumBand)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(GetDefaultBand)(THIS_ IDirectMusicBand **ppBand) PURE;
+ STDMETHOD(EnumMotif)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(GetMotif)(THIS_ WCHAR *pwszName, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(GetDefaultChordMap)(THIS_ struct IDirectMusicChordMap **ppChordMap) PURE;
+ STDMETHOD(EnumChordMap)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(GetChordMap)(THIS_ WCHAR *pwszName, struct IDirectMusicChordMap **ppChordMap) PURE;
+ STDMETHOD(GetTimeSignature)(THIS_ DMUS_TIMESIGNATURE *pTimeSig) PURE;
+ STDMETHOD(GetEmbellishmentLength)(THIS_ DWORD dwType, DWORD dwLevel, DWORD *pdwMin, DWORD *pdwMax) PURE;
+ STDMETHOD(GetTempo)(THIS_ double *pTempo) PURE;
+ /*** IDirectMusicStyle8 methods ***/
+ STDMETHOD(EnumPattern)(THIS_ DWORD dwIndex, DWORD dwPatternType, WCHAR *pwszName) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicStyle8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicStyle8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicStyle8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicStyle methods ***/
+#define IDirectMusicStyle8_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b)
+#define IDirectMusicStyle8_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b)
+#define IDirectMusicStyle8_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a)
+#define IDirectMusicStyle8_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b)
+#define IDirectMusicStyle8_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b)
+#define IDirectMusicStyle8_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a)
+#define IDirectMusicStyle8_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b)
+#define IDirectMusicStyle8_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b)
+#define IDirectMusicStyle8_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a)
+#define IDirectMusicStyle8_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
+#define IDirectMusicStyle8_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a)
+/*** IDirectMusicStyle8 methods ***/
+#define IDirectMusicStyle8_EnumPattern(p,a,b,c) (p)->lpVtbl->EnumPattern(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicChordMap interface
+ */
+#define INTERFACE IDirectMusicChordMap
+DECLARE_INTERFACE_(IDirectMusicChordMap,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicChordMap methods ***/
+ STDMETHOD(GetScale)(THIS_ DWORD *pdwScale) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicChordMap_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicChordMap_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicChordMap_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicChordMap methods ***/
+#define IDirectMusicChordMap_GetScale(p,a) (p)->lpVtbl->GetScale(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicComposer interface
+ */
+#define INTERFACE IDirectMusicComposer
+DECLARE_INTERFACE_(IDirectMusicComposer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicComposer methods ***/
+ STDMETHOD(ComposeSegmentFromTemplate)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment *pTemplate, WORD wActivity, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(ComposeSegmentFromShape)(THIS_ IDirectMusicStyle *pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(ComposeTransition)(THIS_ IDirectMusicSegment *pFromSeg, IDirectMusicSegment *pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg) PURE;
+ STDMETHOD(AutoTransition)(THIS_ IDirectMusicPerformance *pPerformance, IDirectMusicSegment *pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap *pChordMap, IDirectMusicSegment **ppTransSeg, IDirectMusicSegmentState **ppToSegState, IDirectMusicSegmentState **ppTransSegState) PURE;
+ STDMETHOD(ComposeTemplateFromShape)(THIS_ WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment **ppTemplate) PURE;
+ STDMETHOD(ChangeChordMap)(THIS_ IDirectMusicSegment *pSegment, BOOL fTrackScale, IDirectMusicChordMap *pChordMap) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicComposer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicComposer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicComposer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicComposer methods ***/
+#define IDirectMusicComposer_ComposeSegmentFromTemplate(p,a,b,c,d,e) (p)->lpVtbl->ComposeSegmentFromTemplate(p,a,b,c,d,e)
+#define IDirectMusicComposer_ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeSegmentFromShape(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicComposer_ComposeTransition(p,a,b,c,d,e,f,g) (p)->lpVtbl->ComposeTransition(p,a,b,c,d,e,f,g)
+#define IDirectMusicComposer_AutoTransition(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->AutoTransition(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicComposer_ComposeTemplateFromShape(p,a,b,c,d,e,f) (p)->lpVtbl->ComposeTemplateFromShape(p,a,b,c,d,e,f)
+#define IDirectMusicComposer_ChangeChordMap(p,a,b,c) (p)->lpVtbl->ChangeChordMap(p,a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicPatternTrack interface
+ */
+#define INTERFACE IDirectMusicPatternTrack
+DECLARE_INTERFACE_(IDirectMusicPatternTrack,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicPatternTrack methods ***/
+ STDMETHOD(CreateSegment)(THIS_ IDirectMusicStyle *pStyle, IDirectMusicSegment **ppSegment) PURE;
+ STDMETHOD(SetVariation)(THIS_ IDirectMusicSegmentState *pSegState, DWORD dwVariationFlags, DWORD dwPart) PURE;
+ STDMETHOD(SetPatternByName)(THIS_ IDirectMusicSegmentState *pSegState, WCHAR *wszName, IDirectMusicStyle *pStyle, DWORD dwPatternType, DWORD *pdwLength) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicPatternTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPatternTrack_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPatternTrack_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicPatternTrack methods ***/
+#define IDirectMusicPatternTrack_CreateSegment(p,a,b) (p)->lpVtbl->CreateSegment(p,a,b)
+#define IDirectMusicPatternTrack_SetVariation(p,a,b,c) (p)->lpVtbl->SetVariation(p,a,b,c)
+#define IDirectMusicPatternTrack_SetPatternByName(p,a,b,c,d,e) (p)->lpVtbl->SetPatternByName(p,a,b,c,d,e)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicScript interface
+ */
+#define INTERFACE IDirectMusicScript
+DECLARE_INTERFACE_(IDirectMusicScript,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicScript methods ***/
+ STDMETHOD(Init)(THIS_ IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(CallRoutine)(THIS_ WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(SetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(GetVariableVariant)(THIS_ WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(SetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(GetVariableNumber)(THIS_ WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(SetVariableObject)(THIS_ WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(GetVariableObject)(THIS_ WCHAR *pwszVariableName, REFIID riid, LPVOID *ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(EnumRoutine)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+ STDMETHOD(EnumVariable)(THIS_ DWORD dwIndex, WCHAR *pwszName) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicScript_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicScript_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicScript_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicScript methods ***/
+#define IDirectMusicPatternTrack_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
+#define IDirectMusicPatternTrack_CallRoutine(p,a,b) (p)->lpVtbl->CallRoutine(p,a,b)
+#define IDirectMusicPatternTrack_SetVariableVariant(p,a,b,c,d) (p)->lpVtbl->SetVariableVariant(p,a,b,c,d)
+#define IDirectMusicPatternTrack_GetVariableVariant(p,a,b,c) (p)->lpVtbl->GetVariableVariant(p,a,b,c)
+#define IDirectMusicPatternTrack_SetVariableNumber(p,a,b,c) (p)->lpVtbl->SetVariableNumber(p,a,b,c)
+#define IDirectMusicPatternTrack_GetVariableNumber(p,a,b,c) (p)->lpVtbl->GetVariableNumber(p,a,b,c)
+#define IDirectMusicPatternTrack_SetVariableObject(p,a,b,c) (p)->lpVtbl->SetVariableObject(p,a,b,c)
+#define IDirectMusicPatternTrack_GetVariableObject(p,a,b,c,d) (p)->lpVtbl->GetVariableObject(p,a,b,c,d)
+#define IDirectMusicPatternTrack_EnumRoutine(p,a,b) (p)->lpVtbl->EnumRoutine(p,a,b)
+#define IDirectMusicPatternTrack_EnumVariable(p,a,b) (p)->lpVtbl->EnumVariable(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicContainer interface
+ */
+#define INTERFACE IDirectMusicContainer
+DECLARE_INTERFACE_(IDirectMusicContainer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicContainer methods ***/
+ STDMETHOD(EnumObject)(THIS_ REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR *pwszAlias) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicContainer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicContainer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicContainer methods ***/
+#define IDirectMusicContainer_EnumObject(p,a,b,c,d) (p)->lpVtbl->EnumObject(p,a,b,c,d)
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_DMUSIC_PERFORMANCE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h
new file mode 100644
index 00000000..127bc6b9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dmusics.h
@@ -0,0 +1,246 @@
+/*
+ * DirectMusic Software Synth Definitions
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DMUSIC_SOFTWARESYNTH_H
+#define __WINE_DMUSIC_SOFTWARESYNTH_H
+
+#include <dmusicc.h>
+
+/*****************************************************************************
+ * Registry path
+ */
+#define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicSynth, 0x09823661,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicSynth8, 0x53cab625,0x2711,0x4c9f,0x9d,0xe7,0x1b,0x7f,0x92,0x5f,0x6f,0xc8);
+DEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+
+/* typedef definitions */
+typedef struct IDirectMusicSynth *LPDIRECTMUSICSYNTH;
+typedef struct IDirectMusicSynth8 *LPDIRECTMUSICSYNTH8;
+typedef struct IDirectMusicSynthSink *LPDIRECTMUSICSYNTHSINK;
+
+/* GUIDs - property set */
+DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink, 0x0a3a5ba5,0x37b6,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857,0x8952,0x11d2,0xba,0x1c,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define REFRESH_F_LASTBUFFER 0x1
+
+
+/*****************************************************************************
+ * Structures
+ */
+#ifndef _DMUS_VOICE_STATE_DEFINED
+#define _DMUS_VOICE_STATE_DEFINED
+
+/* typedef definition */
+typedef struct _DMUS_VOICE_STATE DMUS_VOICE_STATE, *LPDMUS_VOICE_STATE;
+
+/* actual structure */
+struct _DMUS_VOICE_STATE {
+ BOOL bExists;
+ SAMPLE_POSITION spPosition;
+};
+#endif /* _DMUS_VOICE_STATE_DEFINED */
+
+
+/*****************************************************************************
+ * IDirectMusicSynth interface
+ */
+#define INTERFACE IDirectMusicSynth
+DECLARE_INTERFACE_(IDirectMusicSynth,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSynth methods ***/
+ STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
+ STDMETHOD(Close)(THIS) PURE;
+ STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;
+ STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;
+ STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;
+ STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
+ STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+ STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;
+ STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+ STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+ STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;
+ STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
+ STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+ STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;
+ STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSynth_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSynth_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSynth_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSynth methods ***/
+#define IDirectMusicSynth_Open(p,a) (p)->lpVtbl->Open(p,a)
+#define IDirectMusicSynth_Close(p) (p)->lpVtbl->Close(p)
+#define IDirectMusicSynth_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicSynth_Download(p,a,b,c) (p)->lpVtbl->Download(p,a,b,c)
+#define IDirectMusicSynth_Unload(p,a,b,c) (p)->lpVtbl->Unload(p,a,b,c)
+#define IDirectMusicSynth_PlayBuffer(p,a,b,c) (p)->lpVtbl->PlayBuffer(p,a,b,c)
+#define IDirectMusicSynth_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicSynth_GetPortCaps(p,a) (p)->lpVtbl->GetPortCaps(p,a)
+#define IDirectMusicSynth_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusicSynth_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicSynth_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicSynth_SetSynthSink(p,a) (p)->lpVtbl->SetSynthSink(p,a)
+#define IDirectMusicSynth_Render(p,a,b,c) (p)->lpVtbl->Render(p,a,b,c)
+#define IDirectMusicSynth_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth_GetFormat(p,a,b) (p)->lpVtbl->GetFormat(p,a,b)
+#define IDirectMusicSynth_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSynth8 interface
+ */
+#define INTERFACE IDirectMusicSynth8
+DECLARE_INTERFACE_(IDirectMusicSynth8,IDirectMusicSynth)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSynth methods ***/
+ STDMETHOD(Open)(THIS_ LPDMUS_PORTPARAMS pPortParams) PURE;
+ STDMETHOD(Close)(THIS) PURE;
+ STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwGroups) PURE;
+ STDMETHOD(Download)(THIS_ LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) PURE;
+ STDMETHOD(Unload)(THIS_ HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) PURE;
+ STDMETHOD(PlayBuffer)(THIS_ REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) PURE;
+ STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+ STDMETHOD(GetPortCaps)(THIS_ LPDMUS_PORTCAPS pCaps) PURE;
+ STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+ STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+ STDMETHOD(SetSynthSink)(THIS_ struct IDirectMusicSynthSink *pSynthSink) PURE;
+ STDMETHOD(Render)(THIS_ short *pBuffer, DWORD dwLength, LONGLONG llPosition) PURE;
+ STDMETHOD(SetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+ STDMETHOD(GetChannelPriority)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) PURE;
+ STDMETHOD(GetAppend)(THIS_ DWORD *pdwAppend) PURE;
+ /*** IDirectMusicSynth8 methods ***/
+ STDMETHOD(PlayVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, LONG prPitch, LONG vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) PURE;
+ STDMETHOD(StopVoice)(THIS_ REFERENCE_TIME rt, DWORD dwVoiceId) PURE;
+ STDMETHOD(GetVoiceState)(THIS_ DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) PURE;
+ STDMETHOD(Refresh)(THIS_ DWORD dwDownloadID, DWORD dwFlags) PURE;
+ STDMETHOD(AssignChannelToBuses)(THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSynth8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSynth8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSynth8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSynth methods ***/
+#define IDirectMusicSynth8_Open(p,a) (p)->lpVtbl->Open(p,a)
+#define IDirectMusicSynth8_Close(p) (p)->lpVtbl->Close(p)
+#define IDirectMusicSynth8_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicSynth8_Download(p,a,b,c) (p)->lpVtbl->Download(p,a,b,c)
+#define IDirectMusicSynth8_Unload(p,a,b,c) (p)->lpVtbl->Unload(p,a,b,c)
+#define IDirectMusicSynth8_PlayBuffer(p,a,b,c) (p)->lpVtbl->PlayBuffer(p,a,b,c)
+#define IDirectMusicSynth8_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicSynth8_GetPortCaps(p,a) (p)->lpVtbl->GetPortCaps(p,a)
+#define IDirectMusicSynth8_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusicSynth8_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicSynth8_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicSynth8_SetSynthSink(p,a) (p)->lpVtbl->SetSynthSink(p,a)
+#define IDirectMusicSynth8_Render(p,a,b,c) (p)->lpVtbl->Render(p,a,b,c)
+#define IDirectMusicSynth8_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth8_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicSynth8_GetFormat(p,a,b) (p)->lpVtbl->GetFormat(p,a,b)
+#define IDirectMusicSynth8_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a)
+/*** IDirectMusicSynth8 methods ***/
+#define IDirectMusicSynth8_PlayVoice(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->PlayVoice(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirectMusicSynth8_StopVoice(p,a,b) (p)->lpVtbl->StopVoice(p,a,b)
+#define IDirectMusicSynth8_GetVoiceState(p,a,b,c) (p)->lpVtbl->GetVoiceState(p,a,b,c)
+#define IDirectMusicSynth8_Refresh(p,a,b) (p)->lpVtbl->Refresh(p,a,b)
+#define IDirectMusicSynth8_AssignChannelToBuses(p,a,b,c,d) (p)->lpVtbl->AssignChannelToBuses(p,a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectMusicSynthSink interface
+ */
+#define INTERFACE IDirectMusicSynthSink
+DECLARE_INTERFACE_(IDirectMusicSynthSink,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectMusicSynthSink methods ***/
+ STDMETHOD(Init)(THIS_ IDirectMusicSynth *pSynth) PURE;
+ STDMETHOD(SetMasterClock)(THIS_ IReferenceClock *pClock) PURE;
+ STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE;
+ STDMETHOD(Activate)(THIS_ BOOL fEnable) PURE;
+ STDMETHOD(SampleToRefTime)(THIS_ LONGLONG llSampleTime, REFERENCE_TIME *prfTime) PURE;
+ STDMETHOD(RefTimeToSample)(THIS_ REFERENCE_TIME rfTime, LONGLONG *pllSampleTime) PURE;
+ STDMETHOD(SetDirectSound)(THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
+ STDMETHOD(GetDesiredBufferSize)(THIS_ LPDWORD pdwBufferSizeInSamples) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectMusicSynthSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSynthSink_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSynthSink_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectMusicSynth methods ***/
+#define IDirectMusicSynthSink_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicSynthSink_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusicSynthSink_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicSynthSink_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicSynthSink_SampleToRefTime(p,a,b) (p)->lpVtbl->SampleToRefTime(p,a,b)
+#define IDirectMusicSynthSink_RefTimeToSample(p,a,b) (p)->lpVtbl->RefTimeToSample(p,a,b)
+#define IDirectMusicSynthSink_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusicSynthSink_GetDesiredBufferSize(p,a) (p)->lpVtbl->GetDesiredBufferSize(p,a)
+#endif
+
+#endif /* __WINE_DMUSIC_SOFTWARESYNTH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl
new file mode 100644
index 00000000..a69bc39b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobj.idl
@@ -0,0 +1,420 @@
+/*
+ * Copyright (C) 1999 Paul Quinn
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "servprov.idl";
+
+
+interface IOleDocumentView;
+interface IEnumOleDocumentViews;
+
+
+/*****************************************************************************
+ * IOleDocument interface
+ */
+[
+ object,
+ uuid(b722bcc5-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IOleDocument : IUnknown
+{
+ typedef [unique] IOleDocument *LPOLEDOCUMENT;
+
+ typedef enum
+ {
+ DOCMISC_CANCREATEMULTIPLEVIEWS = 1,
+ DOCMISC_SUPPORTCOMPLEXRECTANGLES = 2,
+ DOCMISC_CANTOPENEDIT = 4,
+ DOCMISC_NOFILESUPPORT = 8
+ } DOCMISC;
+
+ HRESULT CreateView(
+ [in, unique] IOleInPlaceSite *pIPSite,
+ [in, unique] IStream *pstm,
+ [in] DWORD dwReserved,
+ [out] IOleDocumentView **ppView);
+
+ HRESULT GetDocMiscStatus(
+ [out] DWORD *pdwStatus);
+
+ HRESULT EnumViews(
+ [out] IEnumOleDocumentViews **ppEnum,
+ [out] IOleDocumentView **ppView);
+}
+
+
+/*****************************************************************************
+ * IOleDocumentSite interface
+ */
+[
+ object,
+ uuid(b722bcc7-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IOleDocumentSite : IUnknown
+{
+ typedef [unique] IOleDocumentSite *LPOLEDOCUMENTSITE;
+
+ HRESULT ActivateMe( [in] IOleDocumentView *pViewToActivate );
+}
+
+
+/*****************************************************************************
+ * IOleDocumentView interface
+ */
+[
+ object,
+ uuid(b722bcc6-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IOleDocumentView : IUnknown
+{
+ typedef [unique] IOleDocumentView *LPOLEDOCUMENTVIEW;
+
+ HRESULT SetInPlaceSite( [in, unique] IOleInPlaceSite *pIPSite );
+
+ HRESULT GetInPlaceSite( [out] IOleInPlaceSite **ppIPSite );
+
+ HRESULT GetDocument( [out] IUnknown **ppunk );
+
+ HRESULT SetRect( [in] LPRECT prcView );
+
+ HRESULT GetRect( [out] LPRECT prcView );
+
+ HRESULT SetRectComplex(
+ [in, unique] LPRECT prcView,
+ [in, unique] LPRECT prcHScroll,
+ [in, unique] LPRECT prcVScroll,
+ [in, unique] LPRECT prcSizeBox);
+
+ HRESULT Show( [in] BOOL fShow );
+
+ HRESULT UIActivate( [in] BOOL fUIActivate );
+
+ HRESULT Open();
+
+ HRESULT CloseView( [in] DWORD dwReserved );
+
+ HRESULT SaveViewState( [in] LPSTREAM pstm );
+
+ HRESULT ApplyViewState( [in] LPSTREAM pstm );
+
+ HRESULT Clone(
+ [in] IOleInPlaceSite *pIPSiteNew,
+ [out] IOleDocumentView **ppViewNew);
+}
+
+
+/*****************************************************************************
+ * IEnumOleDocumentViews interface
+ */
+[
+ object,
+ uuid(b722bcc8-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IEnumOleDocumentViews : IUnknown
+{
+ typedef [unique] IEnumOleDocumentViews *LPENUMOLEDOCUMENTVIEWS;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG cViews,
+ [out] IOleDocumentView **rgpView,
+ [out] ULONG *pcFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG cViews,
+ [out, size_is(cViews), length_is(*pcFetched)] IOleDocumentView **rgpView,
+ [out] ULONG *pcFetched);
+
+ HRESULT Skip( [in] ULONG cViews );
+
+ HRESULT Reset();
+
+ HRESULT Clone( [out] IEnumOleDocumentViews **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IOleCommandTarget interface
+ */
+[
+ object,
+ uuid(b722bccb-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IOleCommandTarget : IUnknown
+{
+ typedef [unique] IOleCommandTarget *LPOLECOMMANDTARGET;
+
+ typedef enum OLECMDF
+ {
+ OLECMDF_SUPPORTED = 0x1,
+ OLECMDF_ENABLED = 0x2,
+ OLECMDF_LATCHED = 0x4,
+ OLECMDF_NINCHED = 0x8,
+ OLECMDF_INVISIBLE = 0x10,
+ OLECMDF_DEFHIDEONCTXTMENU = 0x20
+ } OLECMDF;
+
+ typedef struct _tagOLECMD
+ {
+ ULONG cmdID;
+ DWORD cmdf;
+ } OLECMD;
+
+ typedef struct _tagOLECMDTEXT
+ {
+ DWORD cmdtextf;
+ ULONG cwActual;
+ ULONG cwBuf;
+ [size_is(cwBuf)] WCHAR rgwz[];
+ } OLECMDTEXT;
+
+ typedef enum OLECMDTEXTF
+ {
+ OLECMDTEXTF_NONE = 0,
+ OLECMDTEXTF_NAME = 1,
+ OLECMDTEXTF_STATUS = 2
+ } OLECMDTEXTF;
+
+ typedef enum OLECMDEXECOPT
+ {
+ OLECMDEXECOPT_DODEFAULT = 0,
+ OLECMDEXECOPT_PROMPTUSER = 1,
+ OLECMDEXECOPT_DONTPROMPTUSER = 2,
+ OLECMDEXECOPT_SHOWHELP = 3
+ } OLECMDEXECOPT;
+
+ typedef enum OLECMDID
+ {
+ OLECMDID_OPEN = 1,
+ OLECMDID_NEW = 2,
+ OLECMDID_SAVE = 3,
+ OLECMDID_SAVEAS = 4,
+ OLECMDID_SAVECOPYAS = 5,
+ OLECMDID_PRINT = 6,
+ OLECMDID_PRINTPREVIEW = 7,
+ OLECMDID_PAGESETUP = 8,
+ OLECMDID_SPELL = 9,
+ OLECMDID_PROPERTIES = 10,
+ OLECMDID_CUT = 11,
+ OLECMDID_COPY = 12,
+ OLECMDID_PASTE = 13,
+ OLECMDID_PASTESPECIAL = 14,
+ OLECMDID_UNDO = 15,
+ OLECMDID_REDO = 16,
+ OLECMDID_SELECTALL = 17,
+ OLECMDID_CLEARSELECTION = 18,
+ OLECMDID_ZOOM = 19,
+ OLECMDID_GETZOOMRANGE = 20,
+ OLECMDID_UPDATECOMMANDS = 21,
+ OLECMDID_REFRESH = 22,
+ OLECMDID_STOP = 23,
+ OLECMDID_HIDETOOLBARS = 24,
+ OLECMDID_SETPROGRESSMAX = 25,
+ OLECMDID_SETPROGRESSPOS = 26,
+ OLECMDID_SETPROGRESSTEXT = 27,
+ OLECMDID_SETTITLE = 28,
+ OLECMDID_SETDOWNLOADSTATE = 29,
+ OLECMDID_STOPDOWNLOAD = 30,
+ OLECMDID_ONTOOLBARACTIVATED = 31,
+ OLECMDID_FIND = 32,
+ OLECMDID_DELETE = 33,
+ OLECMDID_HTTPEQUIV = 34,
+ OLECMDID_HTTPEQUIV_DONE = 35,
+ OLECMDID_ENABLE_INTERACTION = 36,
+ OLECMDID_ONUNLOAD = 37,
+ OLECMDID_PROPERTYBAG2 = 38,
+ OLECMDID_PREREFRESH = 39,
+ /* iexplorer uses ... 44 */
+ OLECMDID_SHOWSCRIPTERROR = 40,
+ OLECMDID_SHOWMESSAGE = 41,
+ OLECMDID_SHOWFIND = 42,
+ OLECMDID_SHOWPAGESETUP = 43,
+ OLECMDID_SHOWPRINT = 44,
+ OLECMDID_CLOSE = 45,
+ OLECMDID_ALLOWUILESSSAVEAS = 46,
+ OLECMDID_DONTDOWNLOADCSS = 47,
+ OLECMDID_UPDATEPAGESTATUS = 48,
+ OLECMDID_PRINT2 = 49,
+ OLECMDID_PRINTPREVIEW2 = 50,
+ OLECMDID_SETPRINTTEMPLATE = 51,
+ OLECMDID_GETPRINTTEMPLATE = 52,
+ OLECMDID_PAGEACTIONBLOCKED = 55,
+ OLECMDID_PAGEACTIONUIQUERY = 56,
+ OLECMDID_FOCUSVIEWCONTROLS = 57,
+ OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
+ OLECMDID_SHOWPAGEACTIONMENU = 59,
+ OLECMDID_ADDTRAVELENTRY = 60,
+ OLECMDID_UPDATETRAVELENTRY = 61,
+ OLECMDID_UPDATEBACKFORWARDSTATE = 62,
+ OLECMDID_OPTICAL_ZOOM = 63,
+ OLECMDID_OPTICAL_GETZOOMRANGE = 64,
+ OLECMDID_WINDOWSTATECHANGED = 65,
+ OLECMDID_ACTIVEXINSTALLSCOPE = 66,
+ OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67
+ } OLECMDID;
+
+ HRESULT QueryStatus(
+ [in, unique] const GUID *pguidCmdGroup,
+ [in] ULONG cCmds,
+ [in, out, size_is(cCmds)] OLECMD prgCmds[],
+ [in, out, unique] OLECMDTEXT *pCmdText);
+
+ HRESULT Exec(
+ [in, unique] const GUID *pguidCmdGroup,
+ [in] DWORD nCmdID,
+ [in] DWORD nCmdexecopt,
+ [in, unique] VARIANT *pvaIn,
+ [in, out, unique] VARIANT *pvaOut);
+}
+
+
+/*****************************************************************************
+ * IContinueCallback interface
+ */
+[
+ object,
+ uuid(b722bcca-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IContinueCallback : IUnknown
+{
+ typedef [unique] IContinueCallback *LPCONTINUECALLBACK;
+
+ HRESULT FContinue();
+
+ HRESULT FContinuePrinting(
+ [in] LONG nCntPrinted,
+ [in] LONG nCurPage,
+ [in, unique] WCHAR *pwszPrintStatus);
+}
+
+
+/*****************************************************************************
+ * IPrint interface
+ */
+[
+ object,
+ uuid(b722bcc9-4e68-101b-a2bc-00aa00404770),
+ pointer_default(unique)
+]
+interface IPrint : IUnknown
+{
+ typedef [unique] IPrint *LPPRINT;
+
+ typedef enum
+ {
+ PRINTFLAG_MAYBOTHERUSER = 1,
+ PRINTFLAG_PROMPTUSER = 2,
+ PRINTFLAG_USERMAYCHANGEPRINTER = 4,
+ PRINTFLAG_RECOMPOSETODEVICE = 8,
+ PRINTFLAG_DONTACTUALLYPRINT = 16,
+ PRINTFLAG_FORCEPROPERTIES = 32,
+ PRINTFLAG_PRINTTOFILE = 64
+ } PRINTFLAG;
+
+ typedef struct tagPAGERANGE
+ {
+ LONG nFromPage;
+ LONG nToPage;
+ } PAGERANGE;
+
+ typedef struct tagPAGESET
+ {
+ ULONG cbStruct;
+ BOOL fOddPages;
+ BOOL fEvenPages;
+ ULONG cPageRange;
+ [size_is(cPageRange)] PAGERANGE rgPages[];
+ } PAGESET;
+
+ HRESULT SetInitialPageNum(
+ [in] LONG nFirstPage);
+
+ HRESULT GetPageInfo(
+ [out] LONG *pnFirstPage,
+ [out] LONG *pcPages);
+
+ [local]
+ HRESULT Print(
+ [in] DWORD grfFlags,
+ [in, out] DVTARGETDEVICE **pptd,
+ [in, out] PAGESET **ppPageSet,
+ [in, out, unique] STGMEDIUM *pstgmOptions,
+ [in] IContinueCallback *pcallback,
+ [in] LONG nFirstPage,
+ [out] LONG *pcPagesPrinted,
+ [out] LONG *pnLastPage);
+
+ [call_as(Print)]
+ HRESULT RemotePrint(
+ [in] DWORD grfFlags,
+ [in, out] DVTARGETDEVICE **pptd,
+ [in, out] PAGESET **pppageset,
+ [in, out, unique] RemSTGMEDIUM *pstgmOptions,
+ [in] IContinueCallback *pcallback,
+ [in] LONG nFirstPage,
+ [out] LONG *pcPagesPrinted,
+ [out] LONG *pnLastPage);
+}
+
+
+cpp_quote("#define OLECMDERR_E_FIRST (OLE_E_LAST+1)")
+cpp_quote("#define OLECMDERR_E_NOTSUPPORTED (OLECMDERR_E_FIRST)")
+cpp_quote("#define OLECMDERR_E_DISABLED (OLECMDERR_E_FIRST+1)")
+cpp_quote("#define OLECMDERR_E_NOHELP (OLECMDERR_E_FIRST+2)")
+cpp_quote("#define OLECMDERR_E_CANCELED (OLECMDERR_E_FIRST+3)")
+cpp_quote("#define OLECMDERR_E_UNKNOWNGROUP (OLECMDERR_E_FIRST+4)")
+
+cpp_quote("#define MSOCMDERR_E_FIRST OLECMDERR_E_FIRST")
+cpp_quote("#define MSOCMDERR_E_NOTSUPPORTED OLECMDERR_E_NOTSUPPORTED")
+cpp_quote("#define MSOCMDERR_E_DISABLED OLECMDERR_E_DISABLED")
+cpp_quote("#define MSOCMDERR_E_NOHELP OLECMDERR_E_NOHELP")
+cpp_quote("#define MSOCMDERR_E_CANCELED OLECMDERR_E_CANCELED")
+cpp_quote("#define MSOCMDERR_E_UNKNOWNGROUP OLECMDERR_E_UNKNOWNGROUP")
+
+cpp_quote("#define LPMSODOCUMENT LPOLEDOCUMENT")
+cpp_quote("#define LPMSODOCUMENTSITE LPOLEDOCUMENTSITE")
+cpp_quote("#define LPMSOVIEW LPOLEDOCUMENTVIEW")
+cpp_quote("#define LPENUMMSOVIEW LPENUMOLEDOCUMENTVIEWS")
+cpp_quote("#define LPMSOCOMMANDTARGET LPOLECOMMANDTARGET")
+cpp_quote("#define IID_IMsoDocument IID_IOleDocument")
+cpp_quote("#define IID_IMsoDocumentSite IID_IOleDocumentSite")
+cpp_quote("#define IID_IMsoView IID_IOleDocumentView")
+cpp_quote("#define IID_IEnumMsoView IID_IEnumOleDocumentViews")
+cpp_quote("#define IID_IMsoCommandTarget IID_IOleCommandTarget")
+
+cpp_quote("EXTERN_C const GUID SID_SContainerDispatch;")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl
new file mode 100644
index 00000000..c6893ab0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/docobjectservice.idl
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2011 Piotr Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "mshtml.idl";
+
+[
+ local,
+ object,
+ uuid(3050f801-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IDocObjectService : IUnknown
+{
+ HRESULT FireBeforeNavigate2(
+ [in] IDispatch *pDispatch,
+ [in] LPCWSTR lpszUrl,
+ [in] DWORD dwFlags,
+ [in] LPCWSTR lpszFrameName,
+ [in] BYTE *pPostData,
+ [in] DWORD cbPostData,
+ [in] LPCWSTR lpszHeaders,
+ [in] BOOL fPlayNavSound,
+ [out] BOOL *pfCancel);
+
+ HRESULT FireNavigateComplete2(
+ [in] IHTMLWindow2 *pHTMLWindow2,
+ [in] DWORD dwFlags);
+
+ HRESULT FireDownloadBegin(void);
+
+ HRESULT FireDownloadComplete(void);
+
+ HRESULT FireDocumentComplete(
+ [in] IHTMLWindow2 *pHTMLWindow,
+ [in] DWORD dwFlags);
+
+ HRESULT UpdateDesktopComponent(
+ [in] IHTMLWindow2 *pHTMLWindow);
+
+ HRESULT GetPendingUrl(
+ [out] BSTR *pbstrPendingUrl);
+
+ HRESULT ActiveElementChanged(
+ [in] IHTMLElement *pHTMLElement);
+
+ HRESULT GetUrlSearchComponent(
+ [out] BSTR *pbstrSearch);
+
+ HRESULT IsErrorUrl(
+ [in] LPCWSTR lpszUrl,
+ [out] BOOL *pfIsError);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl
new file mode 100644
index 00000000..6bfa37a9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/downloadmgr.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+[
+ object,
+ uuid(988934A4-064B-11D3-BB80-00104B35E7F9),
+ pointer_default(unique),
+ local
+]
+interface IDownloadManager : IUnknown
+{
+ HRESULT Download(
+ [in] IMoniker *pmk,
+ [in] IBindCtx *pbc,
+ [in] DWORD dwBindVerb,
+ [in] LONG grfBINDF,
+ [in] BINDINFO *pBindInfo,
+ [in] LPCOLESTR pszHeaders,
+ [in] LPCOLESTR pszRedir,
+ [in] UINT uiCP);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h
new file mode 100644
index 00000000..93cea7a2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpaddr.h
@@ -0,0 +1,367 @@
+/*
+ * Copyright (C) 2003-2005 Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLAY8_DPADDR_H
+#define __WINE_DPLAY8_DPADDR_H
+
+#include <ole2.h>
+#include <dplay8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef REFIID DPNAREFIID;
+typedef struct sockaddr SOCKADDR;
+
+/*****************************************************************************
+ * DirectPlay8Addr defines
+ */
+#define DPNA_DATATYPE_STRING 0x00000001
+#define DPNA_DATATYPE_DWORD 0x00000002
+#define DPNA_DATATYPE_GUID 0x00000003
+#define DPNA_DATATYPE_BINARY 0x00000004
+#define DPNA_DATATYPE_STRING_ANSI 0x00000005
+#define DPNA_DPNSVR_PORT 6073
+#define DPNA_INDEX_INVALID 0xFFFFFFFF
+
+#define DPNA_SEPARATOR_KEYVALUE L'='
+#define DPNA_SEPARATOR_KEYVALUE_A '='
+#define DPNA_SEPARATOR_USERDATA L'#'
+#define DPNA_SEPARATOR_USERDATA_A '#'
+#define DPNA_SEPARATOR_COMPONENT L';'
+#define DPNA_SEPARATOR_COMPONENT_A ';'
+#define DPNA_ESCAPECHAR L'%'
+#define DPNA_ESCAPECHAR_A '%'
+
+#define DPNA_HEADER_A "x-directplay:/"
+#define DPNA_KEY_APPLICATION_INSTANCE_A "applicationinstance"
+#define DPNA_KEY_BAUD_A "baud"
+#define DPNA_KEY_DEVICE_A "device"
+#define DPNA_KEY_FLOWCONTROL_A "flowcontrol"
+#define DPNA_KEY_HOSTNAME_A "hostname"
+#define DPNA_KEY_NAMEINFO_A "nameinfo"
+#define DPNA_KEY_PARITY_A "parity"
+#define DPNA_KEY_PHONENUMBER_A "phonenumber"
+#define DPNA_KEY_PORT_A "port"
+#define DPNA_KEY_PROCESSOR_A "processor"
+#define DPNA_KEY_PROGRAM_A "program"
+#define DPNA_KEY_PROVIDER_A "provider"
+#define DPNA_KEY_SCOPE_A "scope"
+#define DPNA_KEY_STOPBITS_A "stopbits"
+#define DPNA_KEY_TRAVERSALMODE_A "traversalmode"
+
+#define DPNA_STOP_BITS_ONE_A "1"
+#define DPNA_STOP_BITS_ONE_FIVE_A "1.5"
+#define DPNA_STOP_BITS_TWO_A "2"
+#define DPNA_PARITY_NONE_A "NONE"
+#define DPNA_PARITY_EVEN_A "EVEN"
+#define DPNA_PARITY_ODD_A "ODD"
+#define DPNA_PARITY_MARK_A "MARK"
+#define DPNA_PARITY_SPACE_A "SPACE"
+#define DPNA_FLOW_CONTROL_NONE_A "NONE"
+#define DPNA_FLOW_CONTROL_XONXOFF_A "XONXOFF"
+#define DPNA_FLOW_CONTROL_RTS_A "RTS"
+#define DPNA_FLOW_CONTROL_DTR_A "DTR"
+#define DPNA_FLOW_CONTROL_RTSDTR_A "RTSDTR"
+#define DPNA_VALUE_TCPIPPROVIDER_A "IP"
+#define DPNA_VALUE_IPXPROVIDER_A "IPX"
+#define DPNA_VALUE_MODEMPROVIDER_A "MODEM"
+#define DPNA_VALUE_SERIALPROVIDER_A "SERIAL"
+
+/* And now the same thing but as Unicode strings */
+#if defined(__GNUC__)
+
+# define DPNA_HEADER (const WCHAR []){ 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 }
+# define DPNA_KEY_APPLICATION_INSTANCE (const WCHAR []){ 'a','p','p','l','i','c','a','t','i','o','n','i','n','s','t','a','n','c','e',0 }
+# define DPNA_KEY_BAUD (const WCHAR []){ 'b','a','u','d',0 }
+# define DPNA_KEY_DEVICE (const WCHAR []){ 'd','e','v','i','c','e',0 }
+# define DPNA_KEY_FLOWCONTROL (const WCHAR []){ 'f','l','o','w','c','o','n','t','r','o','l',0 }
+# define DPNA_KEY_HOSTNAME (const WCHAR []){ 'h','o','s','t','n','a','m','e',0 }
+# define DPNA_KEY_NAMEINFO (const WCHAR []){ 'n','a','m','e','i','n','f','o',0 }
+# define DPNA_KEY_PARITY (const WCHAR []){ 'p','a','r','i','t','y',0 }
+# define DPNA_KEY_PHONENUMBER (const WCHAR []){ 'p','h','o','n','e','n','u','m','b','e','r',0 }
+# define DPNA_KEY_PORT (const WCHAR []){ 'p','o','r','t',0 }
+# define DPNA_KEY_PROCESSOR (const WCHAR []){ 'p','r','o','c','e','s','s','o','r',0 }
+# define DPNA_KEY_PROGRAM (const WCHAR []){ 'p','r','o','g','r','a','m',0 }
+# define DPNA_KEY_PROVIDER (const WCHAR []){ 'p','r','o','v','i','d','e','r',0 }
+# define DPNA_KEY_SCOPE (const WCHAR []){ 's','c','o','p','e',0 }
+# define DPNA_KEY_STOPBITS (const WCHAR []){ 's','t','o','p','b','i','t','s',0 }
+# define DPNA_KEY_TRAVERSALMODE (const WCHAR []){ 't','r','a','v','e','r','s','a','l','m','o','d','e',0 }
+# define DPNA_STOP_BITS_ONE (const WCHAR []){ '1',0 }
+# define DPNA_STOP_BITS_ONE_FIVE (const WCHAR []){ '1','.','5',0 }
+# define DPNA_STOP_BITS_TWO (const WCHAR []){ '2',0 }
+# define DPNA_PARITY_NONE (const WCHAR []){ 'N','O','N','E',0 }
+# define DPNA_PARITY_EVEN (const WCHAR []){ 'E','V','E','N',0 }
+# define DPNA_PARITY_ODD (const WCHAR []){ 'O','D','D',0 }
+# define DPNA_PARITY_MARK (const WCHAR []){ 'M','A','R','K',0 }
+# define DPNA_PARITY_SPACE (const WCHAR []){ 'S','P','A','C','E',0 }
+# define DPNA_FLOW_CONTROL_NONE (const WCHAR []){ 'N','O','N','E',0 }
+# define DPNA_FLOW_CONTROL_XONXOFF (const WCHAR []){ 'X','O','N','X','O','F','F',0 }
+# define DPNA_FLOW_CONTROL_RTS (const WCHAR []){ 'R','T','S',0 }
+# define DPNA_FLOW_CONTROL_DTR (const WCHAR []){ 'D','T','R',0 }
+# define DPNA_FLOW_CONTROL_RTSDTR (const WCHAR []){ 'R','T','S','D','T','R',0 }
+# define DPNA_VALUE_TCPIPPROVIDER (const WCHAR []){ 'I','P',0 }
+# define DPNA_VALUE_IPXPROVIDER (const WCHAR []){ 'I','P','X',0 }
+# define DPNA_VALUE_MODEMPROVIDER (const WCHAR []){ 'M','O','D','E','M',0 }
+# define DPNA_VALUE_SERIALPROVIDER (const WCHAR []){ 'S','E','R','I','A','L',0 }
+
+#elif defined(_MSC_VER)
+
+# define DPNA_HEADER L"x-directplay:/"
+# define DPNA_KEY_APPLICATION_INSTANCE L"applicationinstance"
+# define DPNA_KEY_BAUD L"baud"
+# define DPNA_KEY_DEVICE L"device"
+# define DPNA_KEY_FLOWCONTROL L"flowcontrol"
+# define DPNA_KEY_HOSTNAME L"hostname"
+# define DPNA_KEY_NAMEINFO L"nameinfo"
+# define DPNA_KEY_PARITY L"parity"
+# define DPNA_KEY_PHONENUMBER L"phonenumber"
+# define DPNA_KEY_PORT L"port"
+# define DPNA_KEY_PROCESSOR L"processor"
+# define DPNA_KEY_PROGRAM L"program"
+# define DPNA_KEY_PROVIDER L"provider"
+# define DPNA_KEY_SCOPE L"scope"
+# define DPNA_KEY_STOPBITS L"stopbits"
+# define DPNA_KEY_TRAVERSALMODE L"traversalmode"
+# define DPNA_STOP_BITS_ONE L"1"
+# define DPNA_STOP_BITS_ONE_FIVE L"1.5"
+# define DPNA_STOP_BITS_TWO L"2"
+# define DPNA_PARITY_NONE L"NONE"
+# define DPNA_PARITY_EVEN L"EVEN"
+# define DPNA_PARITY_ODD L"ODD"
+# define DPNA_PARITY_MARK L"MARK"
+# define DPNA_PARITY_SPACE L"SPACE"
+# define DPNA_FLOW_CONTROL_NONE L"NONE"
+# define DPNA_FLOW_CONTROL_XONXOFF L"XONXOFF"
+# define DPNA_FLOW_CONTROL_RTS L"RTS"
+# define DPNA_FLOW_CONTROL_DTR L"DTR"
+# define DPNA_FLOW_CONTROL_RTSDTR L"RTSDTR"
+# define DPNA_VALUE_TCPIPPROVIDER L"IP"
+# define DPNA_VALUE_IPXPROVIDER L"IPX"
+# define DPNA_VALUE_MODEMPROVIDER L"MODEM"
+# define DPNA_VALUE_SERIALPROVIDER L"SERIAL"
+
+#else
+
+static const WCHAR DPNA_HEADER[] = { 'x','-','d','i','r','e','c','t','p','l','a','y',':','/',0 };
+static const WCHAR DPNA_KEY_APPLICATION_INSTANCE[] = { 'a','p','p','l','i','c','a','t','i','o','n','i','n','s','t','a','n','c','e',0 };
+static const WCHAR DPNA_KEY_BAUD[] = { 'b','a','u','d',0 };
+static const WCHAR DPNA_KEY_DEVICE[] = { 'd','e','v','i','c','e',0 };
+static const WCHAR DPNA_KEY_FLOWCONTROL[] = { 'f','l','o','w','c','o','n','t','r','o','l',0 };
+static const WCHAR DPNA_KEY_HOSTNAME[] = { 'h','o','s','t','n','a','m','e',0 };
+static const WCHAR DPNA_KEY_NAMEINFO[] = { 'n','a','m','e','i','n','f','o',0 };
+static const WCHAR DPNA_KEY_PARITY[] = { 'p','a','r','i','t','y',0 };
+static const WCHAR DPNA_KEY_PHONENUMBER[] = { 'p','h','o','n','e','n','u','m','b','e','r',0 };
+static const WCHAR DPNA_KEY_PORT[] = { 'p','o','r','t',0 };
+static const WCHAR DPNA_KEY_PROCESSOR[] = { 'p','r','o','c','e','s','s','o','r',0 };
+static const WCHAR DPNA_KEY_PROGRAM[] = { 'p','r','o','g','r','a','m',0 };
+static const WCHAR DPNA_KEY_PROVIDER[] = { 'p','r','o','v','i','d','e','r',0 };
+static const WCHAR DPNA_KEY_SCOPE[] = { 's','c','o','p','e',0 };
+static const WCHAR DPNA_KEY_STOPBITS[] = { 's','t','o','p','b','i','t','s',0 };
+static const WCHAR DPNA_KEY_TRAVERSALMODE[] = { 't','r','a','v','e','r','s','a','l','m','o','d','e',0 };
+static const WCHAR DPNA_STOP_BITS_ONE[] = { '1',0 };
+static const WCHAR DPNA_STOP_BITS_ONE_FIVE[] = { '1','.','5',0 };
+static const WCHAR DPNA_STOP_BITS_TWO[] = { '2',0 };
+static const WCHAR DPNA_PARITY_NONE[] = { 'N','O','N','E',0 };
+static const WCHAR DPNA_PARITY_EVEN[] = { 'E','V','E','N',0 };
+static const WCHAR DPNA_PARITY_ODD[] = { 'O','D','D',0 };
+static const WCHAR DPNA_PARITY_MARK[] = { 'M','A','R','K',0 };
+static const WCHAR DPNA_PARITY_SPACE[] = { 'S','P','A','C','E',0 };
+static const WCHAR DPNA_FLOW_CONTROL_NONE[] = { 'N','O','N','E',0 };
+static const WCHAR DPNA_FLOW_CONTROL_XONXOFF[] = { 'X','O','N','X','O','F','F',0 };
+static const WCHAR DPNA_FLOW_CONTROL_RTS[] = { 'R','T','S',0 };
+static const WCHAR DPNA_FLOW_CONTROL_DTR[] = { 'D','T','R',0 };
+static const WCHAR DPNA_FLOW_CONTROL_RTSDTR[] = { 'R','T','S','D','T','R',0 };
+static const WCHAR DPNA_VALUE_TCPIPPROVIDER[] = { 'I','P',0 };
+static const WCHAR DPNA_VALUE_IPXPROVIDER[] = { 'I','P','X',0 };
+static const WCHAR DPNA_VALUE_MODEMPROVIDER[] = { 'M','O','D','E','M',0 };
+static const WCHAR DPNA_VALUE_SERIALPROVIDER[] = { 'S','E','R','I','A','L',0 };
+
+
+#endif
+
+#define DPNA_BAUD_RATE_9600 9600
+#define DPNA_BAUD_RATE_14400 14400
+#define DPNA_BAUD_RATE_19200 19200
+#define DPNA_BAUD_RATE_38400 38400
+#define DPNA_BAUD_RATE_56000 56000
+#define DPNA_BAUD_RATE_57600 57600
+#define DPNA_BAUD_RATE_115200 115200
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay8Address, 0x934a9523, 0xa3ca, 0x4bc5, 0xad, 0xa0, 0xd6, 0xd9, 0x5d, 0x97, 0x94, 0x21);
+
+DEFINE_GUID(IID_IDirectPlay8Address, 0x83783300, 0x4063, 0x4c8a, 0x9d, 0xb3, 0x82, 0x83, 0xa, 0x7f, 0xeb, 0x31);
+typedef struct IDirectPlay8Address *PDIRECTPLAY8ADDRESS, *LPDIRECTPLAY8ADDRESS;
+DEFINE_GUID(IID_IDirectPlay8AddressIP, 0xe5a0e990, 0x2bad, 0x430b, 0x87, 0xda, 0xa1, 0x42, 0xcf, 0x75, 0xde, 0x58);
+typedef struct IDirectPlay8AddressIP *PDIRECTPLAY8ADDRESSIP, *LPDIRECTPLAY8ADDRESSIP;
+
+
+/*****************************************************************************
+ * IDirectPlay8Address interface
+ */
+#define INTERFACE IDirectPlay8Address
+DECLARE_INTERFACE_(IDirectPlay8Address,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8Address methods ***/
+ STDMETHOD(BuildFromURLW)(THIS_ WCHAR* pwszSourceURL) PURE;
+ STDMETHOD(BuildFromURLA)(THIS_ CHAR* pszSourceURL) PURE;
+ STDMETHOD(Duplicate)(THIS_ PDIRECTPLAY8ADDRESS* ppdpaNewAddress) PURE;
+ STDMETHOD(SetEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress) PURE;
+ STDMETHOD(IsEqual)(THIS_ PDIRECTPLAY8ADDRESS pdpaAddress) PURE;
+ STDMETHOD(Clear)(THIS) PURE;
+ STDMETHOD(GetURLW)(THIS_ WCHAR* pwszURL, PDWORD pdwNumChars) PURE;
+ STDMETHOD(GetURLA)(THIS_ CHAR* pszURL, PDWORD pdwNumChars) PURE;
+ STDMETHOD(GetSP)(THIS_ GUID* pguidSP) PURE;
+ STDMETHOD(GetUserData)(THIS_ LPVOID pvUserData, PDWORD pdwBufferSize) PURE;
+ STDMETHOD(SetSP)(THIS_ const GUID* pguidSP) PURE;
+ STDMETHOD(SetUserData)(THIS_ const void* pvUserData, DWORD dwDataSize) PURE;
+ STDMETHOD(GetNumComponents)(THIS_ PDWORD pdwNumComponents) PURE;
+ STDMETHOD(GetComponentByName)(THIS_ const WCHAR* pwszName, LPVOID pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE;
+ STDMETHOD(GetComponentByIndex)(THIS_ DWORD dwComponentID, WCHAR* pwszName, PDWORD pdwNameLen, void* pvBuffer, PDWORD pdwBufferSize, PDWORD pdwDataType) PURE;
+ STDMETHOD(AddComponent)(THIS_ const WCHAR* pwszName, const void* lpvData, DWORD dwDataSize, DWORD dwDataType) PURE;
+ STDMETHOD(GetDevice)(THIS_ GUID* pDevGuid) PURE;
+ STDMETHOD(SetDevice)(THIS_ const GUID* devGuid) PURE;
+ STDMETHOD(BuildFromDirectPlay4Address)(THIS_ LPVOID pvAddress, DWORD dwDataSize) PURE;
+};
+#undef INTERFACE
+
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8Address_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8Address_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8Address_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Address methods ***/
+#define IDirectPlay8Address_BuildFromURLW(p,a) (p)->lpVtbl->BuildFromURLW(p,a)
+#define IDirectPlay8Address_BuildFromURLA(p,a) (p)->lpVtbl->BuildFromURLA(p,a)
+#define IDirectPlay8Address_Duplicate(p,a) (p)->lpVtbl->Duplicate(p,a)
+#define IDirectPlay8Address_SetEqual(p,a) (p)->lpVtbl->SetEqual(p,a)
+#define IDirectPlay8Address_IsEqual(p,a) (p)->lpVtbl->IsEqual(p,a)
+#define IDirectPlay8Address_Clear(p) (p)->lpVtbl->Clear(p)
+#define IDirectPlay8Address_GetURLW(p,a,b) (p)->lpVtbl->GetURLW(p,a,b)
+#define IDirectPlay8Address_GetURLA(p,a,b) (p)->lpVtbl->GetURLA(p,a,b)
+#define IDirectPlay8Address_GetSP(p,a) (p)->lpVtbl->GetSP(p,a)
+#define IDirectPlay8Address_GetUserData(p,a,b) (p)->lpVtbl->GetUserData(p,a,b)
+#define IDirectPlay8Address_SetSP(p,a) (p)->lpVtbl->SetSP(p,a)
+#define IDirectPlay8Address_SetUserData(p,a,b) (p)->lpVtbl->SetUserData(p,a,b)
+#define IDirectPlay8Address_GetNumComponents(p,a) (p)->lpVtbl->GetNumComponents(p,a)
+#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->lpVtbl->GetComponentByName(p,a,b,c,d)
+#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->lpVtbl->GetComponentByIndex(p,a,b,c,d,e,f)
+#define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->lpVtbl->AddComponent(p,a,b,c,d)
+#define IDirectPlay8Address_SetDevice(p,a) (p)->lpVtbl->SetDevice(p,a)
+#define IDirectPlay8Address_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)
+#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->lpVtbl->BuildFromDirectPlay4Address(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8Address_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8Address_AddRef(p) (p)->AddRef()
+#define IDirectPlay8Address_Release(p) (p)->Release()
+/*** IDirectPlay8Address methods ***/
+#define IDirectPlay8Address_BuildFromURLW(p,a) (p)->BuildFromURLW(a)
+#define IDirectPlay8Address_BuildFromURLA(p,a) (p)->BuildFromURLA(a)
+#define IDirectPlay8Address_Duplicate(p,a) (p)->Duplicate(a)
+#define IDirectPlay8Address_SetEqual(p,a) (p)->SetEqual(a)
+#define IDirectPlay8Address_IsEqual(p,a) (p)->IsEqual(a)
+#define IDirectPlay8Address_Clear(p) (p)->Clear()
+#define IDirectPlay8Address_GetURLW(p,a,b) (p)->GetURLW(a,b)
+#define IDirectPlay8Address_GetURLA(p,a,b) (p)->GetURLA(a,b)
+#define IDirectPlay8Address_GetSP(p,a) (p)->GetSP(a)
+#define IDirectPlay8Address_GetUserData(p,a,b) (p)->GetUserData(a,b)
+#define IDirectPlay8Address_SetSP(p,a) (p)->SetSP(a)
+#define IDirectPlay8Address_SetUserData(p,a,b) (p)->SetUserData(a,b)
+#define IDirectPlay8Address_GetNumComponents(p,a) (p)->GetNumComponents(a)
+#define IDirectPlay8Address_GetComponentByName(p,a,b,c,d) (p)->GetComponentByName(a,b,c,d)
+#define IDirectPlay8Address_GetComponentByIndex(p,a,b,c,d,e,f) (p)->GetComponentByIndex(a,b,c,d,e,f)
+#define IDirectPlay8Address_AddComponent(p,a,b,c,d) (p)->AddComponent(a,b,c,d)
+#define IDirectPlay8Address_SetDevice(p,a) (p)->SetDevice(a)
+#define IDirectPlay8Address_GetDevice(p,a) (p)->GetDevice(a)
+#define IDirectPlay8Address_BuildFromDirectPlay4Address(p,a,b) (p)->BuildFromDirectPlay4Address(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8AddressIP interface
+ */
+#define INTERFACE IDirectPlay8AddressIP
+DECLARE_INTERFACE_(IDirectPlay8AddressIP,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8AddressIP methods ***/
+ STDMETHOD(BuildFromSockAddr)(THIS_ const SOCKADDR* pSockAddr) PURE;
+ STDMETHOD(BuildAddress)(THIS_ const WCHAR* wszAddress, USHORT usPort) PURE;
+ STDMETHOD(BuildLocalAddress)(THIS_ const GUID* pguidAdapter, USHORT usPort) PURE;
+ STDMETHOD(GetSockAddress)(THIS_ SOCKADDR* pSockAddr, PDWORD) PURE;
+ STDMETHOD(GetLocalAddress)(THIS_ GUID* pguidAdapter, USHORT* pusPort) PURE;
+ STDMETHOD(GetAddress)(THIS_ WCHAR* wszAddress, PDWORD pdwAddressLength, USHORT* psPort) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(a,b)
+#define IDirectPlay8AddressIP_AddRef(p) (p)->lpVtbl->AddRef()
+#define IDirectPlay8AddressIP_Release(p) (p)->lpVtbl->Release()
+/*** IDirectPlay8AddressIP methods ***/
+#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->lpVtbl->BuildFromSockAddr(a)
+#define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->lpVtbl->BuildAddress(a,b)
+#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->lpVtbl->BuildLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->lpVtbl->GetSockAddress(a,b)
+#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->lpVtbl->GetLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->lpVtbl->GetAddress(a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8AddressIP_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8AddressIP_AddRef(p) (p)->AddRef()
+#define IDirectPlay8AddressIP_Release(p) (p)->Release()
+/*** IDirectPlay8AddressIP methods ***/
+#define IDirectPlay8AddressIP_BuildFromSockAddr(p,a) (p)->BuildFromSockAddr(a)
+#define IDirectPlay8AddressIP_BuildAddress(p,a,b) (p)->BuildAddress(a,b)
+#define IDirectPlay8AddressIP_BuildLocalAddress(p,a,b) (p)->BuildLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetSockAddress(p,a,b) (p)->GetSockAddress(a,b)
+#define IDirectPlay8AddressIP_GetLocalAddress(p,a,b) (p)->GetLocalAddress(a,b)
+#define IDirectPlay8AddressIP_GetAddress(p,a,b,c) (p)->GetAddress(a,b,c)
+#endif
+
+/* Export functions */
+
+HRESULT WINAPI DirectPlay8AddressCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h
new file mode 100644
index 00000000..dc2d02cc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay.h
@@ -0,0 +1,1282 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLAY_H
+#define __WINE_DPLAY_H
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef LPVOID (*LPRGLPVOID)[];
+typedef LPRGLPVOID PRGPVOID, LPRGPVOID, PRGLPVOID, PAPVOID, LPAPVOID, PALPVOID, LPALPVOID;
+
+#define VOL volatile
+typedef VOID * volatile LPVOIDV;
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+
+DEFINE_GUID(IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72);
+typedef struct IDirectPlay *LPDIRECTPLAY;
+
+DEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
+typedef struct IDirectPlay2 *LPDIRECTPLAY2;
+
+DEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
+typedef struct IDirectPlay2 IDirectPlay2A,*LPDIRECTPLAY2A;
+
+DEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+typedef struct IDirectPlay3 *LPDIRECTPLAY3;
+
+DEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+typedef struct IDirectPlay3 IDirectPlay3A,*LPDIRECTPLAY3A;
+
+DEFINE_GUID(IID_IDirectPlay4, 0xab1c530, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlay4 *LPDIRECTPLAY4;
+
+DEFINE_GUID(IID_IDirectPlay4A,0xab1c531, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlay4 IDirectPlay4A,*LPDIRECTPLAY4A;
+
+
+/*
+ * GUIDS used by Service Providers shipped with DirectPlay
+ * Use these to identify Service Provider returned by EnumConnections
+ */
+
+/* GUID for IPX service provider {685BC400-9D2C-11cf-A9CD-00AA006886E3} */
+DEFINE_GUID(DPSPGUID_IPX, 0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
+
+/* GUID for TCP/IP service provider {36E95EE0-8577-11cf-960C-0080C7534E82} */
+DEFINE_GUID(DPSPGUID_TCPIP, 0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82);
+
+/* GUID for Serial service provider {0F1D6860-88D9-11cf-9C4E-00A0C905425E} */
+DEFINE_GUID(DPSPGUID_SERIAL, 0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* GUID for Modem service provider {44EAA760-CB68-11cf-9C4E-00A0C905425E} */
+DEFINE_GUID(DPSPGUID_MODEM, 0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+
+/*****************************************************************************
+ * Miscellaneous
+ */
+
+/* Return Values for Direct Play */
+#define _FACDP 0x877
+#define MAKE_DPHRESULT( code ) MAKE_HRESULT( 1, _FACDP, code )
+
+#define DP_OK S_OK
+#define DPERR_ALREADYINITIALIZED MAKE_DPHRESULT( 5 )
+#define DPERR_ACCESSDENIED MAKE_DPHRESULT( 10 )
+#define DPERR_ACTIVEPLAYERS MAKE_DPHRESULT( 20 )
+#define DPERR_BUFFERTOOSMALL MAKE_DPHRESULT( 30 )
+#define DPERR_CANTADDPLAYER MAKE_DPHRESULT( 40 )
+#define DPERR_CANTCREATEGROUP MAKE_DPHRESULT( 50 )
+#define DPERR_CANTCREATEPLAYER MAKE_DPHRESULT( 60 )
+#define DPERR_CANTCREATESESSION MAKE_DPHRESULT( 70 )
+#define DPERR_CAPSNOTAVAILABLEYET MAKE_DPHRESULT( 80 )
+#define DPERR_EXCEPTION MAKE_DPHRESULT( 90 )
+#define DPERR_GENERIC E_FAIL
+#define DPERR_INVALIDFLAGS MAKE_DPHRESULT( 120 )
+#define DPERR_INVALIDOBJECT MAKE_DPHRESULT( 130 )
+#define DPERR_INVALIDPARAM E_INVALIDARG
+#define DPERR_INVALIDPARAMS DPERR_INVALIDPARAM
+#define DPERR_INVALIDPLAYER MAKE_DPHRESULT( 150 )
+#define DPERR_INVALIDGROUP MAKE_DPHRESULT( 155 )
+#define DPERR_NOCAPS MAKE_DPHRESULT( 160 )
+#define DPERR_NOCONNECTION MAKE_DPHRESULT( 170 )
+#define DPERR_NOMEMORY E_OUTOFMEMORY
+#define DPERR_OUTOFMEMORY DPERR_NOMEMORY
+#define DPERR_NOMESSAGES MAKE_DPHRESULT( 190 )
+#define DPERR_NONAMESERVERFOUND MAKE_DPHRESULT( 200 )
+#define DPERR_NOPLAYERS MAKE_DPHRESULT( 210 )
+#define DPERR_NOSESSIONS MAKE_DPHRESULT( 220 )
+#define DPERR_PENDING E_PENDING
+#define DPERR_SENDTOOBIG MAKE_DPHRESULT( 230 )
+#define DPERR_TIMEOUT MAKE_DPHRESULT( 240 )
+#define DPERR_UNAVAILABLE MAKE_DPHRESULT( 250 )
+#define DPERR_UNSUPPORTED E_NOTIMPL
+#define DPERR_BUSY MAKE_DPHRESULT( 270 )
+#define DPERR_USERCANCEL MAKE_DPHRESULT( 280 )
+#define DPERR_NOINTERFACE E_NOINTERFACE
+#define DPERR_CANNOTCREATESERVER MAKE_DPHRESULT( 290 )
+#define DPERR_PLAYERLOST MAKE_DPHRESULT( 300 )
+#define DPERR_SESSIONLOST MAKE_DPHRESULT( 310 )
+#define DPERR_UNINITIALIZED MAKE_DPHRESULT( 320 )
+#define DPERR_NONEWPLAYERS MAKE_DPHRESULT( 330 )
+#define DPERR_INVALIDPASSWORD MAKE_DPHRESULT( 340 )
+#define DPERR_CONNECTING MAKE_DPHRESULT( 350 )
+#define DPERR_CONNECTIONLOST MAKE_DPHRESULT( 360 )
+#define DPERR_UNKNOWNMESSAGE MAKE_DPHRESULT( 370 )
+#define DPERR_CANCELFAILED MAKE_DPHRESULT( 380 )
+#define DPERR_INVALIDPRIORITY MAKE_DPHRESULT( 390 )
+#define DPERR_NOTHANDLED MAKE_DPHRESULT( 400 )
+#define DPERR_CANCELLED MAKE_DPHRESULT( 410 )
+#define DPERR_ABORTED MAKE_DPHRESULT( 420 )
+#define DPERR_BUFFERTOOLARGE MAKE_DPHRESULT( 1000 )
+#define DPERR_CANTCREATEPROCESS MAKE_DPHRESULT( 1010 )
+#define DPERR_APPNOTSTARTED MAKE_DPHRESULT( 1020 )
+#define DPERR_INVALIDINTERFACE MAKE_DPHRESULT( 1030 )
+#define DPERR_NOSERVICEPROVIDER MAKE_DPHRESULT( 1040 )
+#define DPERR_UNKNOWNAPPLICATION MAKE_DPHRESULT( 1050 )
+#define DPERR_NOTLOBBIED MAKE_DPHRESULT( 1070 )
+#define DPERR_SERVICEPROVIDERLOADED MAKE_DPHRESULT( 1080 )
+#define DPERR_ALREADYREGISTERED MAKE_DPHRESULT( 1090 )
+#define DPERR_NOTREGISTERED MAKE_DPHRESULT( 1100 )
+#define DPERR_AUTHENTICATIONFAILED MAKE_DPHRESULT( 2000 )
+#define DPERR_CANTLOADSSPI MAKE_DPHRESULT( 2010 )
+#define DPERR_ENCRYPTIONFAILED MAKE_DPHRESULT( 2020 )
+#define DPERR_SIGNFAILED MAKE_DPHRESULT( 2030 )
+#define DPERR_CANTLOADSECURITYPACKAGE MAKE_DPHRESULT( 2040 )
+#define DPERR_ENCRYPTIONNOTSUPPORTED MAKE_DPHRESULT( 2050 )
+#define DPERR_CANTLOADCAPI MAKE_DPHRESULT( 2060 )
+#define DPERR_NOTLOGGEDIN MAKE_DPHRESULT( 2070 )
+#define DPERR_LOGONDENIED MAKE_DPHRESULT( 2080 )
+
+
+/* DPID - DirectPlay player and group ID */
+typedef DWORD DPID, *LPDPID;
+
+/* DPID from whence originate messages - just an ID */
+#define DPID_SYSMSG 0 /* DPID of system */
+#define DPID_ALLPLAYERS 0 /* DPID of all players */
+#define DPID_SERVERPLAYER 1 /* DPID of the server player */
+#define DPID_UNKNOWN 0xFFFFFFFF /* Player ID is unknown */
+
+/* DPCAPS - Used to obtain the capabilities of a DirectPlay object */
+typedef struct tagDPCAPS
+{
+ DWORD dwSize; /* Size of structure in bytes */
+ DWORD dwFlags;
+ DWORD dwMaxBufferSize;
+ DWORD dwMaxQueueSize; /* Obsolete. */
+ DWORD dwMaxPlayers; /* Maximum players/groups (local + remote) */
+ DWORD dwHundredBaud; /* Bandwidth in 100 bits per second units;
+ * i.e. 24 is 2400, 96 is 9600, etc.
+ */
+ DWORD dwLatency; /* Estimated latency; 0 = unknown */
+ DWORD dwMaxLocalPlayers; /* Maximum # of locally created players */
+ DWORD dwHeaderLength; /* Maximum header length in bytes */
+ DWORD dwTimeout; /* Service provider's suggested timeout value
+ * This is how long DirectPlay will wait for
+ * responses to system messages
+ */
+} DPCAPS, *LPDPCAPS;
+
+typedef struct tagDPNAME
+{
+ DWORD dwSize;
+ DWORD dwFlags; /* Not used must be 0 */
+
+ union /*playerShortName */ /* Player's Handle? */
+ {
+ LPWSTR lpszShortName;
+ LPSTR lpszShortNameA;
+ } DUMMYUNIONNAME1;
+
+ union /*playerLongName */ /* Player's formal/real name */
+ {
+ LPWSTR lpszLongName;
+ LPSTR lpszLongNameA;
+ } DUMMYUNIONNAME2;
+
+} DPNAME, *LPDPNAME;
+
+#define DPLONGNAMELEN 52
+#define DPSHORTNAMELEN 20
+#define DPSESSIONNAMELEN 32
+#define DPPASSWORDLEN 16
+#define DPUSERRESERVED 16
+
+typedef struct tagDPSESSIONDESC
+{
+ DWORD dwSize;
+ GUID guidSession;
+ DWORD dwSession;
+ DWORD dwMaxPlayers;
+ DWORD dwCurrentPlayers;
+ DWORD dwFlags;
+ char szSessionName[ DPSESSIONNAMELEN ];
+ char szUserField[ DPUSERRESERVED ];
+ DWORD dwReserved1;
+ char szPassword[ DPPASSWORDLEN ];
+ DWORD dwReserved2;
+ DWORD dwUser1;
+ DWORD dwUser2;
+ DWORD dwUser3;
+ DWORD dwUser4;
+} DPSESSIONDESC, *LPDPSESSIONDESC;
+
+typedef struct tagDPSESSIONDESC2
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidInstance;
+ GUID guidApplication; /* GUID of the DP application, GUID_NULL if
+ * all applications! */
+
+ DWORD dwMaxPlayers;
+ DWORD dwCurrentPlayers; /* (read only value) */
+
+ union /* Session name */
+ {
+ LPWSTR lpszSessionName;
+ LPSTR lpszSessionNameA;
+ } DUMMYUNIONNAME1;
+
+ union /* Optional password */
+ {
+ LPWSTR lpszPassword;
+ LPSTR lpszPasswordA;
+ } DUMMYUNIONNAME2;
+
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+
+ DWORD dwUser1; /* For use by the application */
+ DWORD dwUser2;
+ DWORD dwUser3;
+ DWORD dwUser4;
+} DPSESSIONDESC2, *LPDPSESSIONDESC2;
+typedef const DPSESSIONDESC2* LPCDPSESSIONDESC2;
+
+#define DPOPEN_JOIN 0x00000001
+#define DPOPEN_CREATE 0x00000002
+#define DPOPEN_RETURNSTATUS DPENUMSESSIONS_RETURNSTATUS
+
+#define DPSESSION_NEWPLAYERSDISABLED 0x00000001
+#define DPSESSION_MIGRATEHOST 0x00000004
+#define DPSESSION_NOMESSAGEID 0x00000008
+#define DPSESSION_JOINDISABLED 0x00000020
+#define DPSESSION_KEEPALIVE 0x00000040
+#define DPSESSION_NODATAMESSAGES 0x00000080
+#define DPSESSION_SECURESERVER 0x00000100
+#define DPSESSION_PRIVATE 0x00000200
+#define DPSESSION_PASSWORDREQUIRED 0x00000400
+#define DPSESSION_MULTICASTSERVER 0x00000800
+#define DPSESSION_CLIENTSERVER 0x00001000
+#define DPSESSION_DIRECTPLAYPROTOCOL 0x00002000
+#define DPSESSION_NOPRESERVEORDER 0x00004000
+#define DPSESSION_OPTIMIZELATENCY 0x00008000
+
+typedef struct tagDPLCONNECTION
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPDPSESSIONDESC2 lpSessionDesc; /* Ptr to session desc to use for connect */
+ LPDPNAME lpPlayerName; /* Ptr to player name structure */
+ GUID guidSP; /* GUID of Service Provider to use */
+ LPVOID lpAddress; /* Ptr to Address of Service Provider to use */
+ DWORD dwAddressSize; /* Size of address data */
+} DPLCONNECTION, *LPDPLCONNECTION;
+
+/* DPLCONNECTION flags (for dwFlags) */
+#define DPLCONNECTION_CREATESESSION DPOPEN_CREATE
+#define DPLCONNECTION_JOINSESSION DPOPEN_JOIN
+
+typedef struct tagDPCHAT
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ union
+ { /* Message string */
+ LPWSTR lpszMessage; /* Unicode */
+ LPSTR lpszMessageA; /* ANSI */
+ } DUMMYUNIONNAME;
+} DPCHAT, *LPDPCHAT;
+
+typedef struct
+{
+ UINT len;
+ PUCHAR pData;
+} SGBUFFER, *PSGBUFFER, *LPSGBUFFER;
+
+
+typedef struct tagDPSECURITYDESC
+{
+ DWORD dwSize; /* Size of structure */
+ DWORD dwFlags; /* Not used. Must be zero. */
+ union
+ { /* SSPI provider name */
+ LPWSTR lpszSSPIProvider; /* Unicode */
+ LPSTR lpszSSPIProviderA; /* ANSI */
+ } DUMMYUNIONNAME1;
+ union
+ { /* CAPI provider name */
+ LPWSTR lpszCAPIProvider; /* Unicode */
+ LPSTR lpszCAPIProviderA; /* ANSI */
+ } DUMMYUNIONNAME2;
+ DWORD dwCAPIProviderType; /* Crypto Service Provider type */
+ DWORD dwEncryptionAlgorithm; /* Encryption Algorithm type */
+} DPSECURITYDESC, *LPDPSECURITYDESC;
+
+typedef const DPSECURITYDESC *LPCDPSECURITYDESC;
+
+typedef struct tagDPCREDENTIALS
+{
+ DWORD dwSize; /* Size of structure */
+ DWORD dwFlags; /* Not used. Must be zero. */
+ union
+ { /* User name of the account */
+ LPWSTR lpszUsername; /* Unicode */
+ LPSTR lpszUsernameA; /* ANSI */
+ } DUMMYUNIONNAME1;
+ union
+ { /* Password of the account */
+ LPWSTR lpszPassword; /* Unicode */
+ LPSTR lpszPasswordA; /* ANSI */
+ } DUMMYUNIONNAME2;
+ union
+ { /* Domain name of the account */
+ LPWSTR lpszDomain; /* Unicode */
+ LPSTR lpszDomainA; /* ANSI */
+ } DUMMYUNIONNAME3;
+} DPCREDENTIALS, *LPDPCREDENTIALS;
+
+typedef const DPCREDENTIALS *LPCDPCREDENTIALS;
+
+
+
+typedef BOOL (CALLBACK *LPDPENUMDPCALLBACKW)(
+ LPGUID lpguidSP,
+ LPWSTR lpSPName,
+ DWORD dwMajorVersion,
+ DWORD dwMinorVersion,
+ LPVOID lpContext);
+
+typedef BOOL (CALLBACK *LPDPENUMDPCALLBACKA)(
+ LPGUID lpguidSP,
+ LPSTR lpSPName, /* ptr to str w/ driver description */
+ DWORD dwMajorVersion, /* Major # of driver spec in lpguidSP */
+ DWORD dwMinorVersion, /* Minor # of driver spec in lpguidSP */
+ LPVOID lpContext); /* User given */
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+typedef const DPNAME *LPCDPNAME;
+
+typedef BOOL (CALLBACK *LPDPENUMCONNECTIONSCALLBACK)(
+ LPCGUID lpguidSP,
+ LPVOID lpConnection,
+ DWORD dwConnectionSize,
+ LPCDPNAME lpName,
+ DWORD dwFlags,
+ LPVOID lpContext);
+
+typedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK)(
+ LPDPSESSIONDESC lpDPSessionDesc,
+ LPVOID lpContext,
+ LPDWORD lpdwTimeOut,
+ DWORD dwFlags);
+
+
+extern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID );
+extern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACKW, LPVOID );
+extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnk );
+
+typedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK)(
+ DPID dpId,
+ LPSTR lpFriendlyName,
+ LPSTR lpFormalName,
+ DWORD dwFlags,
+ LPVOID lpContext );
+
+typedef BOOL (CALLBACK *LPDPENUMPLAYERSCALLBACK2)(
+ DPID dpId,
+ DWORD dwPlayerType,
+ LPCDPNAME lpName,
+ DWORD dwFlags,
+ LPVOID lpContext );
+
+typedef BOOL (CALLBACK *LPDPENUMSESSIONSCALLBACK2)(
+ LPCDPSESSIONDESC2 lpThisSD,
+ LPDWORD lpdwTimeOut,
+ DWORD dwFlags,
+ LPVOID lpContext );
+
+#define DPESC_TIMEDOUT 0x00000001
+
+/*****************************************************************************
+ * IDirectPlay interface
+ */
+#define INTERFACE IDirectPlay
+DECLARE_INTERFACE_(IDirectPlay,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay methods ***/
+ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(Close)(THIS) PURE;
+ STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPSTR lpPlayerName, LPSTR, LPHANDLE) PURE;
+ STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPSTR lpGroupName, LPSTR) PURE;
+ STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+ STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+ STDMETHOD(EnableNewPlayers)(THIS_ BOOL) PURE;
+ STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroups)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumPlayers)(THIS_ DWORD, LPDPENUMPLAYERSCALLBACK lpEnumPlayersCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK lpEnumSessionsCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps) PURE;
+ STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+ STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps) PURE;
+ STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPSTR, LPDWORD, LPSTR, LPDWORD) PURE;
+ STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+ STDMETHOD(Open)(THIS_ LPDPSESSIONDESC lpsd) PURE;
+ STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(SaveSession)(THIS_ LPSTR) PURE;
+ STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+ STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPSTR lpPlayerName, LPSTR) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay methods ***/
+#define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlay_Close(p) (p)->lpVtbl->Close(p)
+#define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->lpVtbl->CreatePlayer(p,a,b,c,d)
+#define IDirectPlay_CreateGroup(p,a,b,c) (p)->lpVtbl->CreateGroup(p,a,b,c)
+#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlay_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlay_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlay_EnableNewPlayers(p,a) (p)->lpVtbl->EnableNewPlayers(p,a)
+#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d)
+#define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlay_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectPlay_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlay_GetPlayerCaps(p,a,b) (p)->lpVtbl->GetPlayerCaps(p,a,b)
+#define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e)
+#define IDirectPlay_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlay_Open(p,a) (p)->lpVtbl->Open(p,a)
+#define IDirectPlay_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlay_SaveSession(p,a) (p)->lpVtbl->SaveSession(p,a)
+#define IDirectPlay_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlay_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay_AddRef(p) (p)->AddRef()
+#define IDirectPlay_Release(p) (p)->Release()
+/*** IDirectPlay methods ***/
+#define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b)
+#define IDirectPlay_Close(p) (p)->Close()
+#define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->CreatePlayer(a,b,c,d)
+#define IDirectPlay_CreateGroup(p,a,b,c) (p)->CreateGroup(a,b,c)
+#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlay_DestroyPlayer(p,a) (p)->DestroyPlayer(a)
+#define IDirectPlay_DestroyGroup(p,a) (p)->DestroyGroup(a)
+#define IDirectPlay_EnableNewPlayers(p,a) (p)->EnableNewPlayers(a)
+#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->EnumGroupPlayers(a,b,c,d)
+#define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d)
+#define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlay_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectPlay_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b)
+#define IDirectPlay_GetPlayerCaps(p,a,b) (p)->GetPlayerCaps(a,b)
+#define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->GetPlayerName(a,b,c,d,e)
+#define IDirectPlay_Initialize(p,a) (p)->Initialize(a)
+#define IDirectPlay_Open(p,a) (p)->Open(a)
+#define IDirectPlay_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e)
+#define IDirectPlay_SaveSession(p,a) (p)->SaveSession(a)
+#define IDirectPlay_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e)
+#define IDirectPlay_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c)
+#endif
+
+
+/*****************************************************************************
+ * IDirectPlay2 and IDirectPlay2A interface
+ */
+#define INTERFACE IDirectPlay2
+DECLARE_INTERFACE_(IDirectPlay2,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay2 methods ***/
+ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(Close)(THIS) PURE;
+ STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+ STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+ STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+ STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+ STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;
+ STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+ STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;
+ STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;
+ STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay2_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlay2_Close(p) (p)->lpVtbl->Close(p)
+#define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlay2_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlay2_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlay2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d)
+#define IDirectPlay2_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c)
+#define IDirectPlay2_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
+#define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
+#define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
+#define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c)
+#define IDirectPlay2_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b)
+#define IDirectPlay2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlay2_Open(p,a,b) (p)->lpVtbl->Open(p,a,b)
+#define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlay2_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d)
+#define IDirectPlay2_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c)
+#define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
+#define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlay2_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay2_AddRef(p) (p)->AddRef()
+#define IDirectPlay2_Release(p) (p)->Release()
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b)
+#define IDirectPlay2_Close(p) (p)->Close()
+#define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f)
+#define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlay2_DestroyGroup(p,a) (p)->DestroyGroup(a)
+#define IDirectPlay2_DestroyPlayer(p,a) (p)->DestroyPlayer(a)
+#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)
+#define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d)
+#define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlay2_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d)
+#define IDirectPlay2_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c)
+#define IDirectPlay2_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b)
+#define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c)
+#define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c)
+#define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d)
+#define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c)
+#define IDirectPlay2_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b)
+#define IDirectPlay2_Initialize(p,a) (p)->Initialize(a)
+#define IDirectPlay2_Open(p,a,b) (p)->Open(a,b)
+#define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e)
+#define IDirectPlay2_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e)
+#define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d)
+#define IDirectPlay2_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c)
+#define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d)
+#define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c)
+#define IDirectPlay2_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectPlay3 and IDirectPlay3A interface
+ */
+#define INTERFACE IDirectPlay3
+DECLARE_INTERFACE_(IDirectPlay3,IDirectPlay2)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay2 methods ***/
+ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(Close)(THIS) PURE;
+ STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+ STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+ STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+ STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+ STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;
+ STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+ STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;
+ STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;
+ STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;
+ /*** IDirectPlay3 methods ***/
+ STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+ STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+ STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE;
+ STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE;
+ STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE;
+ STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE;
+ STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE;
+ STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE;
+ STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE;
+ STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay3_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay3_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlay3_Close(p) (p)->lpVtbl->Close(p)
+#define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlay3_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlay3_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlay3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d)
+#define IDirectPlay3_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c)
+#define IDirectPlay3_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
+#define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
+#define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
+#define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c)
+#define IDirectPlay3_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b)
+#define IDirectPlay3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlay3_Open(p,a,b) (p)->lpVtbl->Open(p,a,b)
+#define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlay3_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d)
+#define IDirectPlay3_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c)
+#define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
+#define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlay3_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b)
+#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
+#define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
+#define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d)
+#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
+#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
+#define IDirectPlay3_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b)
+#define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d)
+#define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
+#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
+#define IDirectPlay3_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b)
+#define IDirectPlay3_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b)
+#define IDirectPlay3_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b)
+#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
+#define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay3_AddRef(p) (p)->AddRef()
+#define IDirectPlay3_Release(p) (p)->Release()
+/*** IDirectPlay2 methods ***/
+#define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b)
+#define IDirectPlay3_Close(p) (p)->Close()
+#define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f)
+#define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlay3_DestroyGroup(p,a) (p)->DestroyGroup(a)
+#define IDirectPlay3_DestroyPlayer(p,a) (p)->DestroyPlayer(a)
+#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)
+#define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d)
+#define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlay3_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d)
+#define IDirectPlay3_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c)
+#define IDirectPlay3_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b)
+#define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c)
+#define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c)
+#define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d)
+#define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c)
+#define IDirectPlay3_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b)
+#define IDirectPlay3_Initialize(p,a) (p)->Initialize(a)
+#define IDirectPlay3_Open(p,a,b) (p)->Open(a,b)
+#define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e)
+#define IDirectPlay3_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e)
+#define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d)
+#define IDirectPlay3_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c)
+#define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d)
+#define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c)
+#define IDirectPlay3_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->AddGroupToGroup(a,b)
+#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f)
+#define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->DeleteGroupFromGroup(a,b)
+#define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->EnumConnections(a,b,c,d)
+#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e)
+#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)
+#define IDirectPlay3_InitializeConnection(p,a,b) (p)->InitializeConnection(a,b)
+#define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->SecureOpen(a,b,c,d)
+#define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->SendChatMessage(a,b,c,d)
+#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c)
+#define IDirectPlay3_StartSession(p,a,b) (p)->StartSession(a,b)
+#define IDirectPlay3_GetGroupFlags(p,a,b) (p)->GetGroupFlags(a,b)
+#define IDirectPlay3_GetGroupParent(p,a,b) (p)->GetGroupParent(a,b)
+#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->GetPlayerAccount(a,b,c,d)
+#define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->GetPlayerFlags(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay4 and IDirectPlay4A interface
+ */
+#define INTERFACE IDirectPlay4
+DECLARE_INTERFACE_(IDirectPlay4,IDirectPlay3)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay2 methods ***/
+ STDMETHOD(AddPlayerToGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(Close)(THIS) PURE;
+ STDMETHOD(CreateGroup)(THIS_ LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(CreatePlayer)(THIS_ LPDPID lpidPlayer, LPDPNAME lpPlayerName, HANDLE hEvent, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID idGroup, DPID idPlayer) PURE;
+ STDMETHOD(DestroyGroup)(THIS_ DPID idGroup) PURE;
+ STDMETHOD(DestroyPlayer)(THIS_ DPID idPlayer) PURE;
+ STDMETHOD(EnumGroupPlayers)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroups)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumPlayers)(THIS_ LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumPlayersCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumSessions)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwTimeout, LPDPENUMSESSIONSCALLBACK2 lpEnumSessionsCallback2, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDPCAPS lpDPCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupData)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupName)(THIS_ DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetMessageCount)(THIS_ DPID idPlayer, LPDWORD lpdwCount) PURE;
+ STDMETHOD(GetPlayerAddress)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetPlayerCaps)(THIS_ DPID idPlayer, LPDPCAPS lpPlayerCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerName)(THIS_ DPID idPlayer, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetSessionDesc)(THIS_ LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(Initialize)(THIS_ LPGUID lpGUID) PURE;
+ STDMETHOD(Open)(THIS_ LPDPSESSIONDESC2 lpsd, DWORD dwFlags) PURE;
+ STDMETHOD(Receive)(THIS_ LPDPID lpidFrom, LPDPID lpidTo, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(Send)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPVOID lpData, DWORD dwDataSize) PURE;
+ STDMETHOD(SetGroupData)(THIS_ DPID idGroup, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetGroupName)(THIS_ DPID idGroup, LPDPNAME lpGroupName, DWORD dwFlags) PURE;
+ STDMETHOD(SetPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetPlayerName)(THIS_ DPID idPlayer, LPDPNAME lpPlayerName, DWORD dwFlags) PURE;
+ STDMETHOD(SetSessionDesc)(THIS_ LPDPSESSIONDESC2 lpSessDesc, DWORD dwFlags) PURE;
+ /*** IDirectPlay3 methods ***/
+ STDMETHOD(AddGroupToGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+ STDMETHOD(CreateGroupInGroup)(THIS_ DPID idParentGroup, LPDPID lpidGroup, LPDPNAME lpGroupName, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(DeleteGroupFromGroup)(THIS_ DPID idParentGroup, DPID idGroup) PURE;
+ STDMETHOD(EnumConnections)(THIS_ LPCGUID lpguidApplication, LPDPENUMCONNECTIONSCALLBACK lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroupsInGroup)(THIS_ DPID idGroup, LPGUID lpguidInstance, LPDPENUMPLAYERSCALLBACK2 lpEnumCallback, LPVOID lpContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(InitializeConnection)(THIS_ LPVOID lpConnection, DWORD dwFlags) PURE;
+ STDMETHOD(SecureOpen)(THIS_ LPCDPSESSIONDESC2 lpsd, DWORD dwFlags, LPCDPSECURITYDESC lpSecurity, LPCDPCREDENTIALS lpCredentials) PURE;
+ STDMETHOD(SendChatMessage)(THIS_ DPID idFrom, DPID idTo, DWORD dwFlags, LPDPCHAT lpChatMessage) PURE;
+ STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD dwFlags, DPID idGroup, LPDPLCONNECTION lpConnection) PURE;
+ STDMETHOD(StartSession)(THIS_ DWORD dwFlags, DPID idGroup) PURE;
+ STDMETHOD(GetGroupFlags)(THIS_ DPID idGroup, LPDWORD lpdwFlags) PURE;
+ STDMETHOD(GetGroupParent)(THIS_ DPID idGroup, LPDPID lpidParent) PURE;
+ STDMETHOD(GetPlayerAccount)(THIS_ DPID idPlayer, DWORD dwFlags, LPVOID lpData, LPDWORD lpdwDataSize) PURE;
+ STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwFlags) PURE;
+ /*** IDirectPlay4 methods ***/
+ STDMETHOD(GetGroupOwner)(THIS_ DPID , LPDPID ) PURE;
+ STDMETHOD(SetGroupOwner)(THIS_ DPID , DPID ) PURE;
+ STDMETHOD(SendEx)(THIS_ DPID , DPID , DWORD , LPVOID , DWORD , DWORD , DWORD , LPVOID , LPDWORD ) PURE;
+ STDMETHOD(GetMessageQueue)(THIS_ DPID , DPID , DWORD , LPDWORD , LPDWORD ) PURE;
+ STDMETHOD(CancelMessage)(THIS_ DWORD , DWORD ) PURE;
+ STDMETHOD(CancelPriority)(THIS_ DWORD , DWORD , DWORD ) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlayX_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlayX_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlayX_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay2 methods ***/
+#define IDirectPlayX_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b)
+#define IDirectPlayX_Close(p) (p)->lpVtbl->Close(p)
+#define IDirectPlayX_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f)
+#define IDirectPlayX_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b)
+#define IDirectPlayX_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a)
+#define IDirectPlayX_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a)
+#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e)
+#define IDirectPlayX_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d)
+#define IDirectPlayX_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d)
+#define IDirectPlayX_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e)
+#define IDirectPlayX_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlayX_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d)
+#define IDirectPlayX_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c)
+#define IDirectPlayX_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b)
+#define IDirectPlayX_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c)
+#define IDirectPlayX_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c)
+#define IDirectPlayX_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d)
+#define IDirectPlayX_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c)
+#define IDirectPlayX_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b)
+#define IDirectPlayX_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlayX_Open(p,a,b) (p)->lpVtbl->Open(p,a,b)
+#define IDirectPlayX_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e)
+#define IDirectPlayX_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e)
+#define IDirectPlayX_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d)
+#define IDirectPlayX_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c)
+#define IDirectPlayX_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d)
+#define IDirectPlayX_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c)
+#define IDirectPlayX_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlayX_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b)
+#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f)
+#define IDirectPlayX_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b)
+#define IDirectPlayX_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d)
+#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e)
+#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d)
+#define IDirectPlayX_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b)
+#define IDirectPlayX_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d)
+#define IDirectPlayX_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d)
+#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c)
+#define IDirectPlayX_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b)
+#define IDirectPlayX_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b)
+#define IDirectPlayX_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b)
+#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d)
+#define IDirectPlayX_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b)
+/*** IDirectPlay4 methods ***/
+#define IDirectPlayX_GetGroupOwner(p,a,b) (p)->lpVtbl->GetGroupOwner(p,a,b)
+#define IDirectPlayX_SetGroupOwner(p,a,b) (p)->lpVtbl->SetGroupOwner(p,a,b)
+#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->SendEx(p,a,b,c,d,e,f,g,h,i)
+#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e) (p)->lpVtbl->GetMessageQueue(p,a,b,c,d,e)
+#define IDirectPlayX_CancelMessage(p,a,b) (p)->lpVtbl->CancelMessage(p,a,b)
+#define IDirectPlayX_CancelPriority(p,a,b,c) (p)->lpVtbl->CancelPriority(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlayX_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlayX_AddRef(p) (p)->AddRef()
+#define IDirectPlayX_Release(p) (p)->Release()
+/*** IDirectPlay2 methods ***/
+#define IDirectPlayX_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b)
+#define IDirectPlayX_Close(p) (p)->Close()
+#define IDirectPlayX_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f)
+#define IDirectPlayX_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b)
+#define IDirectPlayX_DestroyGroup(p,a) (p)->DestroyGroup(a)
+#define IDirectPlayX_DestroyPlayer(p,a) (p)->DestroyPlayer(a)
+#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e)
+#define IDirectPlayX_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d)
+#define IDirectPlayX_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d)
+#define IDirectPlayX_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e)
+#define IDirectPlayX_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectPlayX_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d)
+#define IDirectPlayX_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c)
+#define IDirectPlayX_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b)
+#define IDirectPlayX_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c)
+#define IDirectPlayX_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c)
+#define IDirectPlayX_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d)
+#define IDirectPlayX_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c)
+#define IDirectPlayX_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b)
+#define IDirectPlayX_Initialize(p,a) (p)->Initialize(a)
+#define IDirectPlayX_Open(p,a,b) (p)->Open(a,b)
+#define IDirectPlayX_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e)
+#define IDirectPlayX_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e)
+#define IDirectPlayX_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d)
+#define IDirectPlayX_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c)
+#define IDirectPlayX_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d)
+#define IDirectPlayX_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c)
+#define IDirectPlayX_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b)
+/*** IDirectPlay3 methods ***/
+#define IDirectPlayX_AddGroupToGroup(p,a,b) (p)->AddGroupToGroup(a,b)
+#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f)
+#define IDirectPlayX_DeleteGroupFromGroup(p,a,b) (p)->DeleteGroupFromGroup(a,b)
+#define IDirectPlayX_EnumConnections(p,a,b,c,d) (p)->EnumConnections(a,b,c,d)
+#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e)
+#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d)
+#define IDirectPlayX_InitializeConnection(p,a,b) (p)->InitializeConnection(a,b)
+#define IDirectPlayX_SecureOpen(p,a,b,c,d) (p)->SecureOpen(a,b,c,d)
+#define IDirectPlayX_SendChatMessage(p,a,b,c,d) (p)->SendChatMessage(a,b,c,d)
+#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c)
+#define IDirectPlayX_StartSession(p,a,b) (p)->StartSession(a,b)
+#define IDirectPlayX_GetGroupFlags(p,a,b) (p)->GetGroupFlags(a,b)
+#define IDirectPlayX_GetGroupParent(p,a,b) (p)->GetGroupParent(a,b)
+#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d) (p)->GetPlayerAccount(a,b,c,d)
+#define IDirectPlayX_GetPlayerFlags(p,a,b) (p)->GetPlayerFlags(a,b)
+/*** IDirectPlay4 methods ***/
+#define IDirectPlayX_GetGroupOwner(p,a,b) (p)->GetGroupOwner(a,b)
+#define IDirectPlayX_SetGroupOwner(p,a,b) (p)->SetGroupOwner(a,b)
+#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i) (p)->SendEx(a,b,c,d,e,f,g,h,i)
+#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e) (p)->GetMessageQueue(a,b,c,d,e)
+#define IDirectPlayX_CancelMessage(p,a,b) (p)->CancelMessage(a,b)
+#define IDirectPlayX_CancelPriority(p,a,b,c) (p)->CancelPriority(a,b,c)
+#endif
+
+
+/* For DirectPlay::EnumConnections */
+#define DPCONNECTION_DIRECTPLAY 0x00000001
+#define DPCONNECTION_DIRECTPLAYLOBBY 0x00000002
+
+/* For DirectPlay::EnumPlayers and DirectPlay::EnumGroups */
+#define DPENUMPLAYERS_ALL 0x00000000
+#define DPENUMPLAYERS_LOCAL 0x00000008
+#define DPENUMPLAYERS_REMOTE 0x00000010
+#define DPENUMPLAYERS_GROUP 0x00000020
+#define DPENUMPLAYERS_SESSION 0x00000080
+#define DPENUMPLAYERS_SERVERPLAYER 0x00000100
+#define DPENUMPLAYERS_SPECTATOR 0x00000200
+#define DPENUMPLAYERS_OWNER 0x00002000
+
+#define DPENUMGROUPS_ALL DPENUMPLAYERS_ALL
+#define DPENUMGROUPS_LOCAL DPENUMPLAYERS_LOCAL
+#define DPENUMGROUPS_REMOTE DPENUMPLAYERS_REMOTE
+#define DPENUMGROUPS_SESSION DPENUMPLAYERS_SESSION
+#define DPENUMGROUPS_SHORTCUT 0x00000400
+#define DPENUMGROUPS_STAGINGAREA 0x00000800
+#define DPENUMGROUPS_HIDDEN 0x00001000
+
+
+/* For DirectPlay::CreatePlayer */
+#define DPPLAYER_SERVERPLAYER DPENUMPLAYERS_SERVERPLAYER
+#define DPPLAYER_SPECTATOR DPENUMPLAYERS_SPECTATOR
+#define DPPLAYER_LOCAL DPENUMPLAYERS_LOCAL
+#define DPPLAYER_OWNER DPENUMPLAYERS_OWNER
+
+/* For DirectPlay::CreateGroup */
+#define DPGROUP_STAGINGAREA DPENUMGROUPS_STAGINGAREA
+#define DPGROUP_LOCAL DPENUMGROUPS_LOCAL
+#define DPGROUP_HIDDEN DPENUMGROUPS_HIDDEN
+
+/* For DirectPlay::EnumSessions */
+#define DPENUMSESSIONS_AVAILABLE 0x00000001
+#define DPENUMSESSIONS_ALL 0x00000002
+#define DPENUMSESSIONS_ASYNC 0x00000010
+#define DPENUMSESSIONS_STOPASYNC 0x00000020
+#define DPENUMSESSIONS_PASSWORDREQUIRED 0x00000040
+#define DPENUMSESSIONS_RETURNSTATUS 0x00000080
+
+/* For DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */
+#define DPGETCAPS_GUARANTEED 0x00000001
+
+/* For DirectPlay::GetGroupData and DirectPlay::GetPlayerData */
+#define DPGET_REMOTE 0x00000000
+#define DPGET_LOCAL 0x00000001
+
+/* For DirectPlay::Receive */
+#define DPRECEIVE_ALL 0x00000001
+#define DPRECEIVE_TOPLAYER 0x00000002
+#define DPRECEIVE_FROMPLAYER 0x00000004
+#define DPRECEIVE_PEEK 0x00000008
+
+/* For DirectPlay::Send */
+#define DPSEND_NONGUARANTEED 0x00000000
+#define DPSEND_GUARANTEED 0x00000001
+#define DPSEND_HIGHPRIORITY 0x00000002
+#define DPSEND_OPENSTREAM 0x00000008
+#define DPSEND_CLOSESTREAM 0x00000010
+#define DPSEND_SIGNED 0x00000020
+#define DPSEND_ENCRYPTED 0x00000040
+#define DPSEND_LOBBYSYSTEMMESSAGE 0x00000080
+#define DPSEND_ASYNC 0x00000200
+#define DPSEND_NOSENDCOMPLETEMSG 0x00000400
+
+#define DPSEND_MAX_PRI 0x0000FFFF
+#define DPSEND_MAX_PRIORITY DPSEND_MAX_PRI
+
+
+/* For DirectPlay::SetGroupData, DirectPlay::SetGroupName,
+ * DirectPlay::SetPlayerData, DirectPlay::SetPlayerName and
+ * DirectPlay::SetSessionDesc.
+ */
+#define DPSET_REMOTE 0x00000000
+#define DPSET_LOCAL 0x00000001
+#define DPSET_GUARANTEED 0x00000002
+
+/* For DirectPlay::GetMessageQueue */
+#define DPMESSAGEQUEUE_SEND 0x00000001
+#define DPMESSAGEQUEUE_RECEIVE 0x00000002
+
+/* DirectPlay::Connect */
+#define DPCONNECT_RETURNSTATUS (DPENUMSESSIONS_RETURNSTATUS)
+
+/* DirectPlay::GetCaps and DirectPlay::GetPlayerCaps */
+#define DPCAPS_ISHOST 0x00000002
+#define DPCAPS_GROUPOPTIMIZED 0x00000008
+#define DPCAPS_KEEPALIVEOPTIMIZED 0x00000010
+#define DPCAPS_GUARANTEEDOPTIMIZED 0x00000020
+#define DPCAPS_GUARANTEEDSUPPORTED 0x00000040
+#define DPCAPS_SIGNINGSUPPORTED 0x00000080
+#define DPCAPS_ENCRYPTIONSUPPORTED 0x00000100
+#define DPPLAYERCAPS_LOCAL 0x00000800
+#define DPCAPS_ASYNCCANCELSUPPORTED 0x00001000
+#define DPCAPS_ASYNCCANCELALLSUPPORTED 0x00002000
+#define DPCAPS_SENDTIMEOUTSUPPORTED 0x00004000
+#define DPCAPS_SENDPRIORITYSUPPORTED 0x00008000
+#define DPCAPS_ASYNCSUPPORTED 0x00010000
+
+/** DirectPlay system messages **/
+
+/* A new player or group has been created in the session */
+#define DPSYS_CREATEPLAYERORGROUP 0x0003
+
+/* A player or group has been deleted from the session */
+#define DPSYS_DESTROYPLAYERORGROUP 0x0005
+
+/* A player has been added to a group */
+#define DPSYS_ADDPLAYERTOGROUP 0x0007
+
+/* A player has been deleted from a group */
+#define DPSYS_DELETEPLAYERFROMGROUP 0x0021
+
+/* Session lost for this object - ie lost contact with all players */
+#define DPSYS_SESSIONLOST 0x0031
+
+/* The current host has left the session */
+#define DPSYS_HOST 0x0101
+
+/* Player or group data has changed */
+#define DPSYS_SETPLAYERORGROUPDATA 0x0102
+
+/* The name of a player or group has changed */
+#define DPSYS_SETPLAYERORGROUPNAME 0x0103
+
+/* The session description has changed */
+#define DPSYS_SETSESSIONDESC 0x0104
+
+/* A group has been added to a group */
+#define DPSYS_ADDGROUPTOGROUP 0x0105
+
+/* A group has been deleted from a group */
+#define DPSYS_DELETEGROUPFROMGROUP 0x0106
+
+/* A secure player to player message has arrived */
+#define DPSYS_SECUREMESSAGE 0x0107
+
+/* Start a new session */
+#define DPSYS_STARTSESSION 0x0108
+
+/* A chat message has arrived */
+#define DPSYS_CHAT 0x0109
+
+/* The owner of a group has changed */
+#define DPSYS_SETGROUPOWNER 0x010A
+
+/* An async send is done (finished normally, failed or cancelled) */
+#define DPSYS_SENDCOMPLETE 0x010d
+
+/** DirectPlay System Messages **/
+
+#define DPPLAYERTYPE_GROUP 0x00000000
+#define DPPLAYERTYPE_PLAYER 0x00000001
+
+
+/* NOTE: DPMSG_HOST and DPMSG_GENERIC share the same format */
+typedef struct tagDPMSG_GENERIC
+{
+ DWORD dwType; /* Use message type as described above */
+} DPMSG_GENERIC, *LPDPMSG_GENERIC,
+ DPMSG_HOST, *LPDPMSG_HOST,
+ DPMSG_SESSIONLOST, *LPDPMSG_SESSIONLOST;
+
+typedef struct tagDPMSG_CREATEPLAYERORGROUP
+{
+ DWORD dwType; /* Use message type as described above */
+ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+ DPID dpId; /* ID of the player/group */
+ DWORD dwCurrentPlayers; /* Current number of players/groups in session */
+ LPVOID lpData; /* Pointer to data */
+ DWORD dwDataSize; /* Size of data */
+ DPNAME dpnName; /* Name info */
+
+ /* dpIdParent and dwFlags are only valid in DirectPlay3 and later. What
+ * does that mean about the message size before? -PH */
+ DPID dpIdParent; /* id of parent group */
+ DWORD dwFlags; /* Flags for the player/group */
+} DPMSG_CREATEPLAYERORGROUP, *LPDPMSG_CREATEPLAYERORGROUP;
+
+typedef struct tagDPMSG_DESTROYPLAYERORGROUP
+{
+ DWORD dwType; /* Use message type as described above */
+ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+ DPID dpId; /* ID of player/group to be deleted */
+ LPVOID lpLocalData; /* Pointer to local data */
+ DWORD dwLocalDataSize; /* Sizeof local data */
+ LPVOID lpRemoteData; /* Pointer to remote data */
+ DWORD dwRemoteDataSize; /* Sizeof remote data */
+
+ /* dpnName, dpIdParent and dwFlags are only valid in DirectPlay3 and later. What
+ * does that mean about the message size before? -PH */
+ DPNAME dpnName; /* Name info */
+ DPID dpIdParent; /* id of parent group */
+ DWORD dwFlags; /* Flags for the player/group */
+} DPMSG_DESTROYPLAYERORGROUP, *LPDPMSG_DESTROYPLAYERORGROUP;
+
+/* NOTE: DPMSG_ADDPLAYERTOGROUP and DPMSG_DELETEPLAYERFROMGROUP are the same */
+typedef struct tagDPMSG_ADDPLAYERTOGROUP
+{
+ DWORD dwType; /* Use message type as described above */
+ DPID dpIdGroup; /* Group ID to add player into */
+ DPID dpIdPlayer; /* ID of player to add */
+} DPMSG_ADDPLAYERTOGROUP, *LPDPMSG_ADDPLAYERTOGROUP,
+ DPMSG_DELETEPLAYERFROMGROUP, *LPDPMSG_DELETEPLAYERFROMGROUP;
+
+/* NOTE: DPMSG_ADDGROUPTOGROUP and DPMSG_DELETEGROUPFROMGROUP are the same */
+typedef struct tagDPMSG_ADDGROUPTOGROUP
+{
+ DWORD dwType; /* Use message type as described above */
+ DPID dpIdParentGroup; /* Group ID to add group into */
+ DPID dpIdGroup; /* ID of group to add */
+} DPMSG_ADDGROUPTOGROUP, *LPDPMSG_ADDGROUPTOGROUP,
+ DPMSG_DELETEGROUPFROMGROUP, *LPDPMSG_DELETEGROUPFROMGROUP;
+
+typedef struct tagDPMSG_SETPLAYERORGROUPDATA
+{
+ DWORD dwType; /* Use message type as described above */
+ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+ DPID dpId; /* ID of player/group */
+ LPVOID lpData; /* Pointer to data */
+ DWORD dwDataSize; /* Size of data */
+} DPMSG_SETPLAYERORGROUPDATA, *LPDPMSG_SETPLAYERORGROUPDATA;
+
+typedef struct tagDPMSG_SETPLAYERORGROUPNAME
+{
+ DWORD dwType; /* Use message type as described above */
+ DWORD dwPlayerType; /* Use DPPLAYERTYPE_GROUP or DPPLAYERTYPE_PLAYER */
+ DPID dpId; /* ID of player/group */
+ DPNAME dpnName; /* New name */
+} DPMSG_SETPLAYERORGROUPNAME, *LPDPMSG_SETPLAYERORGROUPNAME;
+
+typedef struct tagDPMSG_SETSESSIONDESC
+{
+ DWORD dwType; /* Use message type as described above */
+ DPSESSIONDESC2 dpDesc; /* New session desc */
+} DPMSG_SETSESSIONDESC, *LPDPMSG_SETSESSIONDESC;
+
+typedef struct tagDPMSG_SECUREMESSAGE
+{
+ DWORD dwType; /* Use message type as described above */
+ DWORD dwFlags; /* Signed/Encrypted */
+ DPID dpIdFrom; /* ID of from player */
+ LPVOID lpData; /* Message sent */
+ DWORD dwDataSize; /* Size of message */
+} DPMSG_SECUREMESSAGE, *LPDPMSG_SECUREMESSAGE;
+
+typedef struct tagDPMSG_STARTSESSION
+{
+ DWORD dwType; /* Use message type as described above */
+ LPDPLCONNECTION lpConn; /* DPLCONNECTION structure */
+} DPMSG_STARTSESSION, *LPDPMSG_STARTSESSION;
+
+typedef struct tagDPMSG_CHAT
+{
+ DWORD dwType; /* Use message type as described above */
+ DWORD dwFlags; /* Message flags */
+ DPID idFromPlayer; /* ID of sender */
+ DPID idToPlayer; /* ID of who msg is for */
+ DPID idToGroup; /* ID of what group msg is for */
+ LPDPCHAT lpChat; /* Chat message */
+} DPMSG_CHAT, *LPDPMSG_CHAT;
+
+typedef struct tagDPMSG_SETGROUPOWNER
+{
+ DWORD dwType; /* Use message type as described above */
+ DPID idGroup; /* Group ID */
+ DPID idNewOwner; /* ID of player who now owns group */
+ DPID idOldOwner; /* ID of player who used to own group */
+} DPMSG_SETGROUPOWNER, *LPDPMSG_SETGROUPOWNER;
+
+typedef struct
+{
+ DWORD dwType; /* Use message type as described above */
+ DPID idFrom; /* ID from */
+ DPID idTo; /* ID to */
+ DWORD dwFlags;
+ DWORD dwPriority;
+ DWORD dwTimeout;
+ LPVOID lpvContext;
+ DWORD dwMsgID;
+ HRESULT hr;
+ DWORD dwSendTime; /* When sent ? */
+} DPMSG_SENDCOMPLETE, *LPDPMSG_SENDCOMPLETE;
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DPLAY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h
new file mode 100644
index 00000000..337044d9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplay8.h
@@ -0,0 +1,1010 @@
+/*
+ * Copyright (C) 2003-2005 Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLAY8_H
+#define __WINE_DPLAY8_H
+
+#include <ole2.h>
+#include <dpaddr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+
+typedef HRESULT (WINAPI *PFNDPNMESSAGEHANDLER)(PVOID, DWORD, PVOID);
+typedef DWORD DPNID, *PDPNID;
+typedef DWORD DPNHANDLE, *PDPNHANDLE;
+
+/*****************************************************************************
+ * DirectPlay8 Message Id
+ */
+#define DPN_MSGID_OFFSET 0xFFFF0000
+#define DPN_MSGID_ADD_PLAYER_TO_GROUP (DPN_MSGID_OFFSET | 0x0001)
+#define DPN_MSGID_APPLICATION_DESC (DPN_MSGID_OFFSET | 0x0002)
+#define DPN_MSGID_ASYNC_OP_COMPLETE (DPN_MSGID_OFFSET | 0x0003)
+#define DPN_MSGID_CLIENT_INFO (DPN_MSGID_OFFSET | 0x0004)
+#define DPN_MSGID_CONNECT_COMPLETE (DPN_MSGID_OFFSET | 0x0005)
+#define DPN_MSGID_CREATE_GROUP (DPN_MSGID_OFFSET | 0x0006)
+#define DPN_MSGID_CREATE_PLAYER (DPN_MSGID_OFFSET | 0x0007)
+#define DPN_MSGID_DESTROY_GROUP (DPN_MSGID_OFFSET | 0x0008)
+#define DPN_MSGID_DESTROY_PLAYER (DPN_MSGID_OFFSET | 0x0009)
+#define DPN_MSGID_ENUM_HOSTS_QUERY (DPN_MSGID_OFFSET | 0x000A)
+#define DPN_MSGID_ENUM_HOSTS_RESPONSE (DPN_MSGID_OFFSET | 0x000B)
+#define DPN_MSGID_GROUP_INFO (DPN_MSGID_OFFSET | 0x000C)
+#define DPN_MSGID_HOST_MIGRATE (DPN_MSGID_OFFSET | 0x000D)
+#define DPN_MSGID_INDICATE_CONNECT (DPN_MSGID_OFFSET | 0x000E)
+#define DPN_MSGID_INDICATED_CONNECT_ABORTED (DPN_MSGID_OFFSET | 0x000F)
+#define DPN_MSGID_PEER_INFO (DPN_MSGID_OFFSET | 0x0010)
+#define DPN_MSGID_RECEIVE (DPN_MSGID_OFFSET | 0x0011)
+#define DPN_MSGID_REMOVE_PLAYER_FROM_GROUP (DPN_MSGID_OFFSET | 0x0012)
+#define DPN_MSGID_RETURN_BUFFER (DPN_MSGID_OFFSET | 0x0013)
+#define DPN_MSGID_SEND_COMPLETE (DPN_MSGID_OFFSET | 0x0014)
+#define DPN_MSGID_SERVER_INFO (DPN_MSGID_OFFSET | 0x0015)
+#define DPN_MSGID_TERMINATE_SESSION (DPN_MSGID_OFFSET | 0x0016)
+#define DPN_MSGID_CREATE_THREAD (DPN_MSGID_OFFSET | 0x0017)
+#define DPN_MSGID_DESTROY_THREAD (DPN_MSGID_OFFSET | 0x0018)
+#define DPN_MSGID_NAT_RESOLVER_QUERY (DPN_MSGID_OFFSET | 0x0101)
+
+/*****************************************************************************
+ * DirectPlay8 Errors
+ */
+#define _DPN_FACILITY_CODE 0x015
+#define _DPNHRESULT_BASE 0x8000
+#define MAKE_DPNHRESULT(code) MAKE_HRESULT(1, _DPN_FACILITY_CODE, (code + _DPNHRESULT_BASE))
+
+#define DPNSUCCESS_EQUAL MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x05 + _DPNHRESULT_BASE))
+#define DPNSUCCESS_NOTEQUAL MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0A + _DPNHRESULT_BASE))
+#define DPNSUCCESS_PENDING MAKE_HRESULT(0, _DPN_FACILITY_CODE, (0x0E + _DPNHRESULT_BASE))
+
+#define DPN_OK S_OK
+#define DPNERR_GENERIC E_FAIL
+#define DPNERR_INVALIDPARAM E_INVALIDARG
+#define DPNERR_UNSUPPORTED E_NOTIMPL
+#define DPNERR_NOINTERFACE E_NOINTERFACE
+#define DPNERR_OUTOFMEMORY E_OUTOFMEMORY
+#define DPNERR_INVALIDPOINTER E_POINTER
+#define DPNERR_PENDING DPNSUCCESS_PENDING
+#define DPNERR_ABORTED MAKE_DPNHRESULT(0x030)
+#define DPNERR_ADDRESSING MAKE_DPNHRESULT(0x040)
+#define DPNERR_ALREADYCLOSING MAKE_DPNHRESULT(0x050)
+#define DPNERR_ALREADYCONNECTED MAKE_DPNHRESULT(0x060)
+#define DPNERR_ALREADYDISCONNECTING MAKE_DPNHRESULT(0x070)
+#define DPNERR_ALREADYINITIALIZED MAKE_DPNHRESULT(0x080)
+#define DPNERR_ALREADYREGISTERED MAKE_DPNHRESULT(0x090)
+#define DPNERR_BUFFERTOOSMALL MAKE_DPNHRESULT(0x100)
+#define DPNERR_CANNOTCANCEL MAKE_DPNHRESULT(0x110)
+#define DPNERR_CANTCREATEGROUP MAKE_DPNHRESULT(0x120)
+#define DPNERR_CANTCREATEPLAYER MAKE_DPNHRESULT(0x130)
+#define DPNERR_CANTLAUNCHAPPLICATION MAKE_DPNHRESULT(0x140)
+#define DPNERR_CONNECTING MAKE_DPNHRESULT(0x150)
+#define DPNERR_CONNECTIONLOST MAKE_DPNHRESULT(0x160)
+#define DPNERR_CONVERSION MAKE_DPNHRESULT(0x170)
+#define DPNERR_DATATOOLARGE MAKE_DPNHRESULT(0x175)
+#define DPNERR_DOESNOTEXIST MAKE_DPNHRESULT(0x180)
+#define DPNERR_DPNSVRNOTAVAILABLE MAKE_DPNHRESULT(0x185)
+#define DPNERR_DUPLICATECOMMAND MAKE_DPNHRESULT(0x190)
+#define DPNERR_ENDPOINTNOTRECEIVING MAKE_DPNHRESULT(0x200)
+#define DPNERR_ENUMQUERYTOOLARGE MAKE_DPNHRESULT(0x210)
+#define DPNERR_ENUMRESPONSETOOLARGE MAKE_DPNHRESULT(0x220)
+#define DPNERR_EXCEPTION MAKE_DPNHRESULT(0x230)
+#define DPNERR_GROUPNOTEMPTY MAKE_DPNHRESULT(0x240)
+#define DPNERR_HOSTING MAKE_DPNHRESULT(0x250)
+#define DPNERR_HOSTREJECTEDCONNECTION MAKE_DPNHRESULT(0x260)
+#define DPNERR_HOSTTERMINATEDSESSION MAKE_DPNHRESULT(0x270)
+#define DPNERR_INCOMPLETEADDRESS MAKE_DPNHRESULT(0x280)
+#define DPNERR_INVALIDADDRESSFORMAT MAKE_DPNHRESULT(0x290)
+#define DPNERR_INVALIDAPPLICATION MAKE_DPNHRESULT(0x300)
+#define DPNERR_INVALIDCOMMAND MAKE_DPNHRESULT(0x310)
+#define DPNERR_INVALIDDEVICEADDRESS MAKE_DPNHRESULT(0x320)
+#define DPNERR_INVALIDENDPOINT MAKE_DPNHRESULT(0x330)
+#define DPNERR_INVALIDFLAGS MAKE_DPNHRESULT(0x340)
+#define DPNERR_INVALIDGROUP MAKE_DPNHRESULT(0x350)
+#define DPNERR_INVALIDHANDLE MAKE_DPNHRESULT(0x360)
+#define DPNERR_INVALIDHOSTADDRESS MAKE_DPNHRESULT(0x370)
+#define DPNERR_INVALIDINSTANCE MAKE_DPNHRESULT(0x380)
+#define DPNERR_INVALIDINTERFACE MAKE_DPNHRESULT(0x390)
+#define DPNERR_INVALIDOBJECT MAKE_DPNHRESULT(0x400)
+#define DPNERR_INVALIDPASSWORD MAKE_DPNHRESULT(0x410)
+#define DPNERR_INVALIDPLAYER MAKE_DPNHRESULT(0x420)
+#define DPNERR_INVALIDPRIORITY MAKE_DPNHRESULT(0x430)
+#define DPNERR_INVALIDSTRING MAKE_DPNHRESULT(0x440)
+#define DPNERR_INVALIDURL MAKE_DPNHRESULT(0x450)
+#define DPNERR_INVALIDVERSION MAKE_DPNHRESULT(0x460)
+#define DPNERR_NOCAPS MAKE_DPNHRESULT(0x470)
+#define DPNERR_NOCONNECTION MAKE_DPNHRESULT(0x480)
+#define DPNERR_NOHOSTPLAYER MAKE_DPNHRESULT(0x490)
+#define DPNERR_NOMOREADDRESSCOMPONENTS MAKE_DPNHRESULT(0x500)
+#define DPNERR_NORESPONSE MAKE_DPNHRESULT(0x510)
+#define DPNERR_NOTALLOWED MAKE_DPNHRESULT(0x520)
+#define DPNERR_NOTHOST MAKE_DPNHRESULT(0x530)
+#define DPNERR_NOTREADY MAKE_DPNHRESULT(0x540)
+#define DPNERR_NOTREGISTERED MAKE_DPNHRESULT(0x550)
+#define DPNERR_PLAYERALREADYINGROUP MAKE_DPNHRESULT(0x560)
+#define DPNERR_PLAYERLOST MAKE_DPNHRESULT(0x570)
+#define DPNERR_PLAYERNOTINGROUP MAKE_DPNHRESULT(0x580)
+#define DPNERR_PLAYERNOTREACHABLE MAKE_DPNHRESULT(0x590)
+#define DPNERR_SENDTOOLARGE MAKE_DPNHRESULT(0x600)
+#define DPNERR_SESSIONFULL MAKE_DPNHRESULT(0x610)
+#define DPNERR_TABLEFULL MAKE_DPNHRESULT(0x620)
+#define DPNERR_TIMEDOUT MAKE_DPNHRESULT(0x630)
+#define DPNERR_UNINITIALIZED MAKE_DPNHRESULT(0x640)
+#define DPNERR_USERCANCEL MAKE_DPNHRESULT(0x650)
+
+/*****************************************************************************
+ * DirectPlay8 defines
+ */
+#define DPNID_ALL_PLAYERS_GROUP 0
+#define DPNDESTROYGROUPREASON_NORMAL 0x0001
+#define DPNDESTROYGROUPREASON_AUTODESTRUCTED 0x0002
+#define DPNDESTROYGROUPREASON_SESSIONTERMINATED 0x0003
+#define DPNDESTROYPLAYERREASON_NORMAL 0x0001
+#define DPNDESTROYPLAYERREASON_CONNECTIONLOST 0x0002
+#define DPNDESTROYPLAYERREASON_SESSIONTERMINATED 0x0003
+#define DPNDESTROYPLAYERREASON_HOSTDESTROYEDPLAYER 0x0004
+#define DPN_MAX_APPDESC_RESERVEDDATA_SIZE 64
+
+#define DPNOP_SYNC 0x80000000
+#define DPNADDPLAYERTOGROUP_SYNC DPNOP_SYNC
+#define DPNCANCEL_CONNECT 0x0001
+#define DPNCANCEL_ENUM 0x0002
+#define DPNCANCEL_SEND 0x0004
+#define DPNCANCEL_ALL_OPERATIONS 0x8000
+#define DPNCANCEL_PLAYER_SENDS 0x80000000
+#define DPNCANCEL_PLAYER_SENDS_PRIORITY_HIGH (DPNCANCEL_PLAYER_SENDS | 0x00010000)
+#define DPNCANCEL_PLAYER_SENDS_PRIORITY_NORMAL (DPNCANCEL_PLAYER_SENDS | 0x00020000)
+#define DPNCANCEL_PLAYER_SENDS_PRIORITY_LOW (DPNCANCEL_PLAYER_SENDS | 0x00040000)
+#define DPNCLOSE_IMMEDIATE 0x00000001
+#define DPNCONNECT_SYNC DPNOP_SYNC
+#define DPNCONNECT_OKTOQUERYFORADDRESSING 0x0001
+#define DPNCREATEGROUP_SYNC DPNOP_SYNC
+#define DPNDESTROYGROUP_SYNC DPNOP_SYNC
+#define DPNENUM_PLAYERS 0x0001
+#define DPNENUM_GROUPS 0x0010
+#define DPNENUMHOSTS_SYNC DPNOP_SYNC
+#define DPNENUMHOSTS_OKTOQUERYFORADDRESSING 0x0001
+#define DPNENUMHOSTS_NOBROADCASTFALLBACK 0x0002
+#define DPNENUMSERVICEPROVIDERS_ALL 0x0001
+#define DPNGETLOCALHOSTADDRESSES_COMBINED 0x0001
+#define DPNGETSENDQUEUEINFO_PRIORITY_NORMAL 0x0001
+#define DPNGETSENDQUEUEINFO_PRIORITY_HIGH 0x0002
+#define DPNGETSENDQUEUEINFO_PRIORITY_LOW 0x0004
+#define DPNGROUP_AUTODESTRUCT 0x0001
+#define DPNHOST_OKTOQUERYFORADDRESSING 0x0001
+#define DPNINFO_NAME 0x0001
+#define DPNINFO_DATA 0x0002
+#define DPNINITIALIZE_DISABLEPARAMVAL 0x0001
+#define DPNINITIALIZE_HINT_LANSESSION 0x0002
+#define DPNINITIALIZE_DISABLELINKTUNING 0x0004
+#define DPNLOBBY_REGISTER 0x0001
+#define DPNLOBBY_UNREGISTER 0x0002
+#define DPNPLAYER_LOCAL 0x0002
+#define DPNPLAYER_HOST 0x0004
+#define DPNRECEIVE_GUARANTEED 0x0001
+#define DPNRECEIVE_COALESCED 0x0002
+#define DPNREMOVEPLAYERFROMGROUP_SYNC DPNOP_SYNC
+#define DPNSEND_SYNC DPNOP_SYNC
+#define DPNSEND_NOCOPY 0x0001
+#define DPNSEND_NOCOMPLETE 0x0002
+#define DPNSEND_COMPLETEONPROCESS 0x0004
+#define DPNSEND_GUARANTEED 0x0008
+#define DPNSEND_NONSEQUENTIAL 0x0010
+#define DPNSEND_NOLOOPBACK 0x0020
+#define DPNSEND_PRIORITY_LOW 0x0040
+#define DPNSEND_PRIORITY_HIGH 0x0080
+#define DPNSEND_COALESCE 0x0100
+#define DPNSENDCOMPLETE_GUARANTEED 0x0001
+#define DPNSENDCOMPLETE_COALESCED 0x0002
+#define DPNSESSION_CLIENT_SERVER 0x0001
+#define DPNSESSION_MIGRATE_HOST 0x0004
+#define DPNSESSION_NODPNSVR 0x0040
+#define DPNSESSION_REQUIREPASSWORD 0x0080
+#define DPNSESSION_NOENUMS 0x0100
+#define DPNSESSION_FAST_SIGNED 0x0200
+#define DPNSESSION_FULL_SIGNED 0x0400
+#define DPNSETCLIENTINFO_SYNC DPNOP_SYNC
+#define DPNSETGROUPINFO_SYNC DPNOP_SYNC
+#define DPNSETPEERINFO_SYNC DPNOP_SYNC
+#define DPNSETSERVERINFO_SYNC DPNOP_SYNC
+#define DPNSPCAPS_SUPPORTSDPNSRV 0x0001
+#define DPNSPCAPS_SUPPORTSBROADCAST 0x0002
+#define DPNSPCAPS_SUPPORTSALLADAPTERS 0x0004
+#define DPNSPCAPS_SUPPORTSTHREADPOOL 0x0008
+#define DPNSPCAPS_NETWORKSIMULATOR 0x0010
+#define DPNSPINFO_NETWORKSIMULATORDEVICE 0x0001
+
+
+/*****************************************************************************
+ * DirectPlay8 structures Typedefs
+ */
+typedef struct _DPN_APPLICATION_DESC {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidInstance;
+ GUID guidApplication;
+ DWORD dwMaxPlayers;
+ DWORD dwCurrentPlayers;
+ WCHAR* pwszSessionName;
+ WCHAR* pwszPassword;
+ PVOID pvReservedData;
+ DWORD dwReservedDataSize;
+ PVOID pvApplicationReservedData;
+ DWORD dwApplicationReservedDataSize;
+} DPN_APPLICATION_DESC, *PDPN_APPLICATION_DESC;
+
+typedef struct _BUFFERDESC {
+ DWORD dwBufferSize;
+ BYTE* pBufferData;
+} BUFFERDESC, DPN_BUFFER_DESC, *PDPN_BUFFER_DESC, *PBUFFERDESC;
+
+typedef struct _DPN_CAPS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwConnectTimeout;
+ DWORD dwConnectRetries;
+ DWORD dwTimeoutUntilKeepAlive;
+} DPN_CAPS, *PDPN_CAPS;
+
+typedef struct _DPN_CAPS_EX {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwConnectTimeout;
+ DWORD dwConnectRetries;
+ DWORD dwTimeoutUntilKeepAlive;
+ DWORD dwMaxRecvMsgSize;
+ DWORD dwNumSendRetries;
+ DWORD dwMaxSendRetryInterval;
+ DWORD dwDropThresholdRate;
+ DWORD dwThrottleRate;
+ DWORD dwNumHardDisconnectSends;
+ DWORD dwMaxHardDisconnectPeriod;
+} DPN_CAPS_EX, *PDPN_CAPS_EX;
+
+typedef struct _DPN_CONNECTION_INFO {
+ DWORD dwSize;
+ DWORD dwRoundTripLatencyMS;
+ DWORD dwThroughputBPS;
+ DWORD dwPeakThroughputBPS;
+ DWORD dwBytesSentGuaranteed;
+ DWORD dwPacketsSentGuaranteed;
+ DWORD dwBytesSentNonGuaranteed;
+ DWORD dwPacketsSentNonGuaranteed;
+ DWORD dwBytesRetried;
+ DWORD dwPacketsRetried;
+ DWORD dwBytesDropped;
+ DWORD dwPacketsDropped;
+ DWORD dwMessagesTransmittedHighPriority;
+ DWORD dwMessagesTimedOutHighPriority;
+ DWORD dwMessagesTransmittedNormalPriority;
+ DWORD dwMessagesTimedOutNormalPriority;
+ DWORD dwMessagesTransmittedLowPriority;
+ DWORD dwMessagesTimedOutLowPriority;
+ DWORD dwBytesReceivedGuaranteed;
+ DWORD dwPacketsReceivedGuaranteed;
+ DWORD dwBytesReceivedNonGuaranteed;
+ DWORD dwPacketsReceivedNonGuaranteed;
+ DWORD dwMessagesReceived;
+} DPN_CONNECTION_INFO, *PDPN_CONNECTION_INFO;
+
+typedef struct _DPN_GROUP_INFO {
+ DWORD dwSize;
+ DWORD dwInfoFlags;
+ PWSTR pwszName;
+ PVOID pvData;
+ DWORD dwDataSize;
+ DWORD dwGroupFlags;
+} DPN_GROUP_INFO, *PDPN_GROUP_INFO;
+
+typedef struct _DPN_PLAYER_INFO {
+ DWORD dwSize;
+ DWORD dwInfoFlags;
+ PWSTR pwszName;
+ PVOID pvData;
+ DWORD dwDataSize;
+ DWORD dwPlayerFlags;
+} DPN_PLAYER_INFO, *PDPN_PLAYER_INFO;
+
+typedef struct _DPN_SERVICE_PROVIDER_INFO {
+ DWORD dwFlags;
+ GUID guid;
+ WCHAR* pwszName;
+ PVOID pvReserved;
+ DWORD dwReserved;
+} DPN_SERVICE_PROVIDER_INFO, *PDPN_SERVICE_PROVIDER_INFO;
+
+typedef struct _DPN_SP_CAPS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwNumThreads;
+ DWORD dwDefaultEnumCount;
+ DWORD dwDefaultEnumRetryInterval;
+ DWORD dwDefaultEnumTimeout;
+ DWORD dwMaxEnumPayloadSize;
+ DWORD dwBuffersPerThread;
+ DWORD dwSystemBufferSize;
+} DPN_SP_CAPS, *PDPN_SP_CAPS;
+
+typedef struct _DPN_SECURITY_CREDENTIALS DPN_SECURITY_CREDENTIALS, *PDPN_SECURITY_CREDENTIALS;
+typedef struct _DPN_SECURITY_DESC DPN_SECURITY_DESC, *PDPN_SECURITY_DESC;
+
+typedef struct _DPNMSG_ADD_PLAYER_TO_GROUP {
+ DWORD dwSize;
+ DPNID dpnidGroup;
+ PVOID pvGroupContext;
+ DPNID dpnidPlayer;
+ PVOID pvPlayerContext;
+} DPNMSG_ADD_PLAYER_TO_GROUP, *PDPNMSG_ADD_PLAYER_TO_GROUP;
+
+typedef struct _DPNMSG_ASYNC_OP_COMPLETE {
+ DWORD dwSize;
+ DPNHANDLE hAsyncOp;
+ PVOID pvUserContext;
+ HRESULT hResultCode;
+} DPNMSG_ASYNC_OP_COMPLETE, *PDPNMSG_ASYNC_OP_COMPLETE;
+
+typedef struct _DPNMSG_CLIENT_INFO {
+ DWORD dwSize;
+ DPNID dpnidClient;
+ PVOID pvPlayerContext;
+} DPNMSG_CLIENT_INFO, *PDPNMSG_CLIENT_INFO;
+
+typedef struct _DPNMSG_CONNECT_COMPLETE {
+ DWORD dwSize;
+ DPNHANDLE hAsyncOp;
+ PVOID pvUserContext;
+ HRESULT hResultCode;
+ PVOID pvApplicationReplyData;
+ DWORD dwApplicationReplyDataSize;
+ /** DirectX 9 */
+ DPNID dpnidLocal;
+} DPNMSG_CONNECT_COMPLETE, *PDPNMSG_CONNECT_COMPLETE;
+
+typedef struct _DPNMSG_CREATE_GROUP {
+ DWORD dwSize;
+ DPNID dpnidGroup;
+ DPNID dpnidOwner;
+ PVOID pvGroupContext;
+ /** DirectX 9 */
+ PVOID pvOwnerContext;
+} DPNMSG_CREATE_GROUP, *PDPNMSG_CREATE_GROUP;
+
+typedef struct _DPNMSG_CREATE_PLAYER {
+ DWORD dwSize;
+ DPNID dpnidPlayer;
+ PVOID pvPlayerContext;
+} DPNMSG_CREATE_PLAYER, *PDPNMSG_CREATE_PLAYER;
+
+typedef struct _DPNMSG_DESTROY_GROUP {
+ DWORD dwSize;
+ DPNID dpnidGroup;
+ PVOID pvGroupContext;
+ DWORD dwReason;
+} DPNMSG_DESTROY_GROUP, *PDPNMSG_DESTROY_GROUP;
+
+typedef struct _DPNMSG_DESTROY_PLAYER {
+ DWORD dwSize;
+ DPNID dpnidPlayer;
+ PVOID pvPlayerContext;
+ DWORD dwReason;
+} DPNMSG_DESTROY_PLAYER, *PDPNMSG_DESTROY_PLAYER;
+
+typedef struct _DPNMSG_ENUM_HOSTS_QUERY {
+ DWORD dwSize;
+ IDirectPlay8Address* pAddressSender;
+ IDirectPlay8Address* pAddressDevice;
+ PVOID pvReceivedData;
+ DWORD dwReceivedDataSize;
+ DWORD dwMaxResponseDataSize;
+ PVOID pvResponseData;
+ DWORD dwResponseDataSize;
+ PVOID pvResponseContext;
+} DPNMSG_ENUM_HOSTS_QUERY, *PDPNMSG_ENUM_HOSTS_QUERY;
+
+typedef struct _DPNMSG_ENUM_HOSTS_RESPONSE {
+ DWORD dwSize;
+ IDirectPlay8Address* pAddressSender;
+ IDirectPlay8Address* pAddressDevice;
+ const DPN_APPLICATION_DESC* pApplicationDescription;
+ PVOID pvResponseData;
+ DWORD dwResponseDataSize;
+ PVOID pvUserContext;
+ DWORD dwRoundTripLatencyMS;
+} DPNMSG_ENUM_HOSTS_RESPONSE, *PDPNMSG_ENUM_HOSTS_RESPONSE;
+
+typedef struct _DPNMSG_GROUP_INFO {
+ DWORD dwSize;
+ DPNID dpnidGroup;
+ PVOID pvGroupContext;
+} DPNMSG_GROUP_INFO, *PDPNMSG_GROUP_INFO;
+
+typedef struct _DPNMSG_HOST_MIGRATE {
+ DWORD dwSize;
+ DPNID dpnidNewHost;
+ PVOID pvPlayerContext;
+} DPNMSG_HOST_MIGRATE, *PDPNMSG_HOST_MIGRATE;
+
+typedef struct _DPNMSG_INDICATE_CONNECT {
+ DWORD dwSize;
+ PVOID pvUserConnectData;
+ DWORD dwUserConnectDataSize;
+ PVOID pvReplyData;
+ DWORD dwReplyDataSize;
+ PVOID pvReplyContext;
+ PVOID pvPlayerContext;
+ IDirectPlay8Address* pAddressPlayer;
+ IDirectPlay8Address* pAddressDevice;
+} DPNMSG_INDICATE_CONNECT, *PDPNMSG_INDICATE_CONNECT;
+
+typedef struct _DPNMSG_INDICATED_CONNECT_ABORTED {
+ DWORD dwSize;
+ PVOID pvPlayerContext;
+} DPNMSG_INDICATED_CONNECT_ABORTED, *PDPNMSG_INDICATED_CONNECT_ABORTED;
+
+typedef struct _DPNMSG_PEER_INFO {
+ DWORD dwSize;
+ DPNID dpnidPeer;
+ PVOID pvPlayerContext;
+} DPNMSG_PEER_INFO, *PDPNMSG_PEER_INFO;
+
+typedef struct _DPNMSG_RECEIVE {
+ DWORD dwSize;
+ DPNID dpnidSender;
+ PVOID pvPlayerContext;
+ PBYTE pReceiveData;
+ DWORD dwReceiveDataSize;
+ DPNHANDLE hBufferHandle;
+ /** DirectX 9 */
+ DWORD dwReceiveFlags;
+} DPNMSG_RECEIVE, *PDPNMSG_RECEIVE;
+
+typedef struct _DPNMSG_REMOVE_PLAYER_FROM_GROUP {
+ DWORD dwSize;
+ DPNID dpnidGroup;
+ PVOID pvGroupContext;
+ DPNID dpnidPlayer;
+ PVOID pvPlayerContext;
+} DPNMSG_REMOVE_PLAYER_FROM_GROUP, *PDPNMSG_REMOVE_PLAYER_FROM_GROUP;
+
+typedef struct _DPNMSG_RETURN_BUFFER {
+ DWORD dwSize;
+ HRESULT hResultCode;
+ PVOID pvBuffer;
+ PVOID pvUserContext;
+} DPNMSG_RETURN_BUFFER, *PDPNMSG_RETURN_BUFFER;
+
+typedef struct _DPNMSG_SEND_COMPLETE {
+ DWORD dwSize;
+ DPNHANDLE hAsyncOp;
+ PVOID pvUserContext;
+ HRESULT hResultCode;
+ DWORD dwSendTime;
+ /** DirectX 9 */
+ DWORD dwFirstFrameRTT;
+ DWORD dwFirstFrameRetryCount;
+ DWORD dwSendCompleteFlags;
+ DPN_BUFFER_DESC* pBuffers;
+ DWORD dwNumBuffers;
+} DPNMSG_SEND_COMPLETE, *PDPNMSG_SEND_COMPLETE;
+
+typedef struct _DPNMSG_SERVER_INFO {
+ DWORD dwSize;
+ DPNID dpnidServer;
+ PVOID pvPlayerContext;
+} DPNMSG_SERVER_INFO, *PDPNMSG_SERVER_INFO;
+
+typedef struct _DPNMSG_TERMINATE_SESSION {
+ DWORD dwSize;
+ HRESULT hResultCode;
+ PVOID pvTerminateData;
+ DWORD dwTerminateDataSize;
+} DPNMSG_TERMINATE_SESSION, *PDPNMSG_TERMINATE_SESSION;
+
+typedef struct _DPNMSG_CREATE_THREAD {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwProcessorNum;
+ PVOID pvUserContext;
+} DPNMSG_CREATE_THREAD, *PDPNMSG_CREATE_THREAD;
+
+typedef struct _DPNMSG_DESTROY_THREAD {
+ DWORD dwSize;
+ DWORD dwProcessorNum;
+ PVOID pvUserContext;
+} DPNMSG_DESTROY_THREAD, *PDPNMSG_DESTROY_THREAD;
+
+typedef struct _DPNMSG_NAT_RESOLVER_QUERY {
+ DWORD dwSize;
+ IDirectPlay8Address* pAddressSender;
+ IDirectPlay8Address* pAddressDevice;
+ WCHAR* pwszUserString;
+} DPNMSG_NAT_RESOLVER_QUERY, *PDPNMSG_NAT_RESOLVER_QUERY;
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay8Peer, 0x286f484d,0x375e,0x4458,0xa2,0x72,0xb1,0x38,0xe2,0xf8,0x0a,0x6a);
+DEFINE_GUID(CLSID_DirectPlay8Client, 0x743f1dc6,0x5aba,0x429f,0x8b,0xdf,0xc5,0x4d,0x03,0x25,0x3d,0xc2);
+DEFINE_GUID(CLSID_DirectPlay8Server, 0xda825e1b,0x6830,0x43d7,0x83,0x5d,0x0b,0x5a,0xd8,0x29,0x56,0xa2);
+/** DirectX 9 */
+DEFINE_GUID(CLSID_DirectPlay8ThreadPool, 0xfc47060e,0x6153,0x4b34,0xb9,0x75,0x8e,0x41,0x21,0xeb,0x7f,0x3c);
+DEFINE_GUID(CLSID_DirectPlay8NATResolver, 0xe4c1d9a2,0xcbf7,0x48bd,0x9a,0x69,0x34,0xa5,0x5e,0x0d,0x89,0x41);
+
+DEFINE_GUID(IID_IDirectPlay8Peer, 0x5102dacf,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8Peer *PDIRECTPLAY8PEER;
+DEFINE_GUID(IID_IDirectPlay8Client, 0x5102dacd,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8Client *PDIRECTPLAY8CLIENT;
+DEFINE_GUID(IID_IDirectPlay8Server, 0x5102dace,0x241b,0x11d3,0xae,0xa7,0x0,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8Server *PDIRECTPLAY8SERVER;
+/** DirectX 9 */
+DEFINE_GUID(IID_IDirectPlay8ThreadPool, 0x0d22ee73,0x4a46,0x4a0d,0x89,0xb2,0x04,0x5b,0x4d,0x66,0x64,0x25);
+typedef struct IDirectPlay8ThreadPool *PDIRECTPLAY8THREADPOOL;
+DEFINE_GUID(IID_IDirectPlay8NATResolver, 0xa9e213f2,0x9a60,0x486f,0xbf,0x3b,0x53,0x40,0x8b,0x6d,0x1c,0xbb);
+typedef struct IDirectPlay8NATResolver *PDIRECTPLAY8NATRESOLVER;
+
+DEFINE_GUID(CLSID_DP8SP_IPX, 0x53934290,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+DEFINE_GUID(CLSID_DP8SP_TCPIP, 0xebfe7ba0,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+DEFINE_GUID(CLSID_DP8SP_SERIAL, 0x743b5d60,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+DEFINE_GUID(CLSID_DP8SP_MODEM, 0x6d4a3650,0x628d,0x11d2,0xae,0x0f,0x0,0x60,0x97,0xb0,0x14,0x11);
+/** DirectX 9 */
+DEFINE_GUID(CLSID_DP8SP_BLUETOOTH, 0x995513af,0x3027,0x4b9a,0x95,0x6e,0xc7,0x72,0xb3,0xf7,0x80,0x06);
+
+typedef struct IDirectPlay8LobbiedApplication *PIDirectPlay8LobbiedApplication, DNLOBBIEDAPPLICATION;
+
+
+/*****************************************************************************
+ * IDirectPlay8Client interface
+ */
+#define INTERFACE IDirectPlay8Client
+DECLARE_INTERFACE_(IDirectPlay8Client,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8Client methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+ STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE;
+ STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC pApplicationDesc,IDirectPlay8Address *pAddrHost,IDirectPlay8Address *pDeviceInfo, PVOID pUserEnumData, DWORD dwUserEnumDataSize, DWORD dwEnumCount, DWORD dwRetryInterval, DWORD dwTimeOut, PVOID pvUserContext, DPNHANDLE *pAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(Connect)(THIS_ const DPN_APPLICATION_DESC *pdnAppDesc,IDirectPlay8Address *pHostAddr,IDirectPlay8Address *pDeviceInfo, const DPN_SECURITY_DESC *pdnSecurity, const DPN_SECURITY_CREDENTIALS *pdnCredentials, const void *pvUserConnectData, DWORD dwUserConnectDataSize,void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(Send)(THIS_ const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetSendQueueInfo)(THIS_ DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE;
+ STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetClientInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetServerInfo)(THIS_ DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetServerAddress)(THIS_ IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+ STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+ STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE;
+ STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetConnectionInfo)(THIS_ DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE;
+ STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8Client_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8Client_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8Client_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Client methods ***/
+#define IDirectPlay8Client_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
+#define IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b)
+#define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j)
+#define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->lpVtbl->Send(p,a,b,c,d,e,f)
+#define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c)
+#define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
+#define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->lpVtbl->SetClientInfo(p,a,b,c,d)
+#define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->lpVtbl->GetServerInfo(p,a,b,c)
+#define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->lpVtbl->GetServerAddress(p,a,b)
+#define IDirectPlay8Client_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b)
+#define IDirectPlay8Client_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay8Client_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b)
+#define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c)
+#define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c)
+#define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->lpVtbl->GetConnectionInfo(p,a,b)
+#define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8Client_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8Client_AddRef(p) (p)->AddRef()
+#define IDirectPlay8Client_Release(p) (p)->Release()
+/*** IDirectPlay8Client methods ***/
+#define IDirectPlay8Client_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectPlay8Client_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f)
+#define IDirectPlay8Client_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Client_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b)
+#define IDirectPlay8Client_Connect(p,a,b,c,d,e,f,g,h,i,j) (p)->Connect(a,b,c,d,e,f,g,h,i,j)
+#define IDirectPlay8Client_Send(p,a,b,c,d,e,f) (p)->Send(a,b,c,d,e,f)
+#define IDirectPlay8Client_GetSendQueueInfo(p,a,b,c) (p)->GetSendQueueInfo(a,b,c)
+#define IDirectPlay8Client_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c)
+#define IDirectPlay8Client_SetClientInfo(p,a,b,c,d) (p)->SetClientInfo(a,b,c,d)
+#define IDirectPlay8Client_GetServerInfo(p,a,b,c) (p)->GetServerInfo(a,b,c)
+#define IDirectPlay8Client_GetServerAddress(p,a,b) (p)->GetServerAddress(a,b)
+#define IDirectPlay8Client_Close(p,a) (p)->Close(a)
+#define IDirectPlay8Client_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b)
+#define IDirectPlay8Client_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectPlay8Client_SetCaps(p,a,b) (p)->SetCaps(a,b)
+#define IDirectPlay8Client_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c)
+#define IDirectPlay8Client_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c)
+#define IDirectPlay8Client_GetConnectionInfo(p,a,b) (p)->GetConnectionInfo(a,b)
+#define IDirectPlay8Client_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8Server interface
+ */
+#define INTERFACE IDirectPlay8Server
+DECLARE_INTERFACE_(IDirectPlay8Server,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8Server methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+ STDMETHOD(EnumServiceProviders)(THIS_ const GUID *pguidServiceProvider, const GUID *pguidApplication, DPN_SERVICE_PROVIDER_INFO *pSPInfoBuffer, PDWORD pcbEnumData, PDWORD pcReturned, DWORD dwFlags) PURE;
+ STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD *pdwNumMsgs, DWORD *pdwNumBytes, DWORD dwFlags) PURE;
+ STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC *pAppDescBuffer, DWORD *pcbDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetServerInfo)(THIS_ const DPN_PLAYER_INFO *pdpnPlayerInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetClientInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO *pdpnPlayerInfo, DWORD *pdwSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetClientAddress)(THIS_ DPNID dpnid, IDirectPlay8Address ** pAddress, DWORD dwFlags) PURE;
+ STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address ** prgpAddress, DWORD *pcAddress, DWORD dwFlags) PURE;
+ STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC *pad, DWORD dwFlags) PURE;
+ STDMETHOD(Host)(THIS_ const DPN_APPLICATION_DESC *pdnAppDesc, IDirectPlay8Address ** prgpDeviceInfo, DWORD cDeviceInfo, const DPN_SECURITY_DESC *pdnSecurity, const DPN_SECURITY_CREDENTIALS *pdnCredentials, void *pvPlayerContext, DWORD dwFlags) PURE;
+ STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC *prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO *pdpnGroupInfo, void *pvGroupContext, void *pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, PVOID pvAsyncContext, DPNHANDLE *phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO *pdpnGroupInfo, DWORD *pdwSize, DWORD dwFlags) PURE;
+ STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID *prgdpnid, DWORD *pcdpnid, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(DestroyClient)(THIS_ DPNID dpnidClient, const void *pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid, PVOID *ppvPlayerContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid, PVOID *ppvGroupContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+ STDMETHOD(SetCaps)(THIS_ const DPN_CAPS *pdpCaps, DWORD dwFlags) PURE;
+ STDMETHOD(SetSPCaps)(THIS_ const GUID *pguidSP, const DPN_SP_CAPS *pdpspCaps, DWORD dwFlags ) PURE;
+ STDMETHOD(GetSPCaps)(THIS_ const GUID *pguidSP, DPN_SP_CAPS *pdpspCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO *pdpConnectionInfo, DWORD dwFlags) PURE;
+ STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication *pIDP8LobbiedApplication, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8Server_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8Server_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8Server_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Server methods ***/
+#define IDirectPlay8Server_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
+#define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b)
+#define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)
+#define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
+#define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->lpVtbl->SetServerInfo(p,a,b,c,d)
+#define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->lpVtbl->GetClientInfo(p,a,b,c,d)
+#define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->lpVtbl->GetClientAddress(p,a,b,c)
+#define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)
+#define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b)
+#define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)
+#define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)
+#define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d)
+#define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)
+#define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)
+#define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)
+#define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)
+#define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)
+#define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)
+#define IDirectPlay8Server_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->lpVtbl->DestroyClient(p,a,b,c,d)
+#define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b)
+#define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c)
+#define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c)
+#define IDirectPlay8Server_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay8Server_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b)
+#define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c)
+#define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c)
+#define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c)
+#define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8Server_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8Server_AddRef(p) (p)->AddRef()
+#define IDirectPlay8Server_Release(p) (p)->Release()
+/*** IDirectPlay8Server methods ***/
+#define IDirectPlay8Server_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectPlay8Server_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f)
+#define IDirectPlay8Server_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b)
+#define IDirectPlay8Server_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d)
+#define IDirectPlay8Server_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c)
+#define IDirectPlay8Server_SetServerInfo(p,a,b,c,d) (p)->SetServerInfo(a,b,c,d)
+#define IDirectPlay8Server_GetClientInfo(p,a,b,c,d) (p)->GetClientInfo(a,b,c,d)
+#define IDirectPlay8Server_GetClientAddress(p,a,b,c) (p)->GetClientAddress(a,b,c)
+#define IDirectPlay8Server_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c)
+#define IDirectPlay8Server_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b)
+#define IDirectPlay8Server_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g)
+#define IDirectPlay8Server_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g)
+#define IDirectPlay8Server_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlay8Server_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d)
+#define IDirectPlay8Server_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e)
+#define IDirectPlay8Server_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e)
+#define IDirectPlay8Server_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e)
+#define IDirectPlay8Server_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d)
+#define IDirectPlay8Server_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c)
+#define IDirectPlay8Server_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d)
+#define IDirectPlay8Server_Close(p,a) (p)->Close(a)
+#define IDirectPlay8Server_DestroyClient(p,a,b,c,d) (p)->DestroyClient(a,b,c,d)
+#define IDirectPlay8Server_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b)
+#define IDirectPlay8Server_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c)
+#define IDirectPlay8Server_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c)
+#define IDirectPlay8Server_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectPlay8Server_SetCaps(p,a,b) (p)->SetCaps(a,b)
+#define IDirectPlay8Server_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c)
+#define IDirectPlay8Server_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c)
+#define IDirectPlay8Server_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c)
+#define IDirectPlay8Server_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8Peer interface
+ */
+#define INTERFACE IDirectPlay8Peer
+DECLARE_INTERFACE_(IDirectPlay8Peer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8Peer methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+ STDMETHOD(EnumServiceProviders)(THIS_ const GUID* pguidServiceProvider, const GUID* pguidApplication, DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, DWORD* pcbEnumData, DWORD* pcReturned, DWORD dwFlags) PURE;
+ STDMETHOD(CancelAsyncOperation)(THIS_ DPNHANDLE hAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(Connect)(THIS_ const DPN_APPLICATION_DESC* pdnAppDesc, IDirectPlay8Address* pHostAddr, IDirectPlay8Address* pDeviceInfo, const DPN_SECURITY_DESC* pdnSecurity, const DPN_SECURITY_CREDENTIALS* pdnCredentials, const void* pvUserConnectData, DWORD dwUserConnectDataSize, void* pvPlayerContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(SendTo)(THIS_ DPNID dpnid, const DPN_BUFFER_DESC* prgBufferDesc, DWORD cBufferDesc, DWORD dwTimeOut, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetSendQueueInfo)(THIS_ DPNID dpnid, DWORD* pdwNumMsgs, DWORD* pdwNumBytes, DWORD dwFlags) PURE;
+ STDMETHOD(Host)(THIS_ const DPN_APPLICATION_DESC* pdnAppDesc, IDirectPlay8Address **prgpDeviceInfo, DWORD cDeviceInfo, const DPN_SECURITY_DESC* pdnSecurity, const DPN_SECURITY_CREDENTIALS* pdnCredentials, void* pvPlayerContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetApplicationDesc)(THIS_ DPN_APPLICATION_DESC* pAppDescBuffer, DWORD* pcbDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetApplicationDesc)(THIS_ const DPN_APPLICATION_DESC* pad, DWORD dwFlags) PURE;
+ STDMETHOD(CreateGroup)(THIS_ const DPN_GROUP_INFO* pdpnGroupInfo, void* pvGroupContext, void* pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(DestroyGroup)(THIS_ DPNID idGroup, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(AddPlayerToGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(RemovePlayerFromGroup)(THIS_ DPNID idGroup, DPNID idClient, PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(SetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupInfo)(THIS_ DPNID dpnid, DPN_GROUP_INFO* pdpnGroupInfo, DWORD* pdwSize, DWORD dwFlags) PURE;
+ STDMETHOD(EnumPlayersAndGroups)(THIS_ DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE;
+ STDMETHOD(EnumGroupMembers)(THIS_ DPNID dpnid, DPNID* prgdpnid, DWORD* pcdpnid, DWORD dwFlags) PURE;
+ STDMETHOD(SetPeerInfo)(THIS_ const DPN_PLAYER_INFO* pdpnPlayerInfo,PVOID pvAsyncContext, DPNHANDLE* phAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetPeerInfo)(THIS_ DPNID dpnid, DPN_PLAYER_INFO* pdpnPlayerInfo, DWORD* pdwSize, DWORD dwFlags) PURE;
+ STDMETHOD(GetPeerAddress)(THIS_ DPNID dpnid, IDirectPlay8Address** pAddress, DWORD dwFlags) PURE;
+ STDMETHOD(GetLocalHostAddresses)(THIS_ IDirectPlay8Address** prgpAddress, DWORD* pcAddress, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumHosts)(THIS_ PDPN_APPLICATION_DESC pApplicationDesc, IDirectPlay8Address* pAddrHost, IDirectPlay8Address* pDeviceInfo,PVOID pUserEnumData, DWORD dwUserEnumDataSize, DWORD dwEnumCount, DWORD dwRetryInterval, DWORD dwTimeOut,PVOID pvUserContext, DPNHANDLE* pAsyncHandle, DWORD dwFlags) PURE;
+ STDMETHOD(DestroyPeer)(THIS_ DPNID dpnidClient, const void* pvDestroyData, DWORD dwDestroyDataSize, DWORD dwFlags) PURE;
+ STDMETHOD(ReturnBuffer)(THIS_ DPNHANDLE hBufferHandle, DWORD dwFlags) PURE;
+ STDMETHOD(GetPlayerContext)(THIS_ DPNID dpnid,PVOID* ppvPlayerContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetGroupContext)(THIS_ DPNID dpnid,PVOID* ppvGroupContext, DWORD dwFlags) PURE;
+ STDMETHOD(GetCaps)(THIS_ DPN_CAPS* pdpCaps, DWORD dwFlags) PURE;
+ STDMETHOD(SetCaps)(THIS_ const DPN_CAPS* pdpCaps, DWORD dwFlags) PURE;
+ STDMETHOD(SetSPCaps)(THIS_ const GUID* pguidSP, const DPN_SP_CAPS* pdpspCaps, DWORD dwFlags ) PURE;
+ STDMETHOD(GetSPCaps)(THIS_ const GUID* pguidSP, DPN_SP_CAPS* pdpspCaps, DWORD dwFlags) PURE;
+ STDMETHOD(GetConnectionInfo)(THIS_ DPNID dpnid, DPN_CONNECTION_INFO* pdpConnectionInfo, DWORD dwFlags) PURE;
+ STDMETHOD(RegisterLobby)(THIS_ DPNHANDLE dpnHandle, struct IDirectPlay8LobbiedApplication* pIDP8LobbiedApplication, DWORD dwFlags) PURE;
+ STDMETHOD(TerminateSession)(THIS_ void* pvTerminateData, DWORD dwTerminateDataSize, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8Peer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8Peer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8Peer methods ***/
+#define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->lpVtbl->EnumServiceProviders(p,a,b,c,d,e,f)
+#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->lpVtbl->CancelAsyncOperation(p,a,b)
+#define IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->Connect(p,a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->lpVtbl->SendTo(p,a,b,c,d,e,f,g)
+#define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->lpVtbl->GetSendQueueInfo(p,a,b,c,d)
+#define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->lpVtbl->Host(p,a,b,c,d,e,f,g)
+#define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->lpVtbl->GetApplicationDesc(p,a,b,c)
+#define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->lpVtbl->SetApplicationDesc(p,a,b)
+#define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e)
+#define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->lpVtbl->DestroyGroup(p,a,b,c,d)
+#define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->lpVtbl->AddPlayerToGroup(p,a,b,c,d,e)
+#define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->lpVtbl->RemovePlayerFromGroup(p,a,b,c,d,e)
+#define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->lpVtbl->SetGroupInfo(p,a,b,c,d,e)
+#define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->lpVtbl->GetGroupInfo(p,a,b,c,d)
+#define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->lpVtbl->EnumPlayersAndGroups(p,a,b,c)
+#define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->lpVtbl->EnumGroupMembers(p,a,b,c,d)
+#define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->lpVtbl->SetPeerInfo(p,a,b,c,d)
+#define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->lpVtbl->GetPeerInfo(p,a,b,c,d)
+#define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->lpVtbl->GetPeerAddress(p,a,b,c)
+#define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->lpVtbl->GetLocalHostAddresses(p,a,b,c)
+#define IDirectPlay8Peer_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->lpVtbl->EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->lpVtbl->DestroyPeer(p,a,b,c,d)
+#define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->lpVtbl->ReturnBuffer(p,a,b)
+#define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->lpVtbl->GetPlayerContext(p,a,b,c)
+#define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->lpVtbl->GetGroupContext(p,a,b,c)
+#define IDirectPlay8Peer_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlay8Peer_SetCaps(p,a,b) (p)->lpVtbl->SetCaps(p,a,b)
+#define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->lpVtbl->SetSPCaps(p,a,b,c)
+#define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->lpVtbl->GetSPCaps(p,a,b,c)
+#define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->lpVtbl->GetConnectionInfo(p,a,b,c)
+#define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->lpVtbl->RegisterLobby(p,a,b,c)
+#define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->lpVtbl->TerminateSession(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8Peer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8Peer_AddRef(p) (p)->AddRef()
+#define IDirectPlay8Peer_Release(p) (p)->Release()
+/*** IDirectPlay8Peer methods ***/
+#define IDirectPlay8Peer_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectPlay8Peer_EnumServiceProviders(p,a,b,c,d,e,f) (p)->EnumServiceProviders(a,b,c,d,e,f)
+#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Peer_CancelAsyncOperation(p,a,b) (p)->CancelAsyncOperation(a,b)
+#define IDirectPlay8Peer_Connect(p,a,b,c,d,e,f,g,h,i,j,k) (p)->Connect(a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Peer_SendTo(p,a,b,c,d,e,f,g) (p)->SendTo(a,b,c,d,e,f,g)
+#define IDirectPlay8Peer_GetSendQueueInfo(p,a,b,c,d) (p)->GetSendQueueInfo(a,b,c,d)
+#define IDirectPlay8Peer_Host(p,a,b,c,d,e,f,g) (p)->Host(a,b,c,d,e,f,g)
+#define IDirectPlay8Peer_GetApplicationDesc(p,a,b,c) (p)->GetApplicationDesc(a,b,c)
+#define IDirectPlay8Peer_SetApplicationDesc(p,a,b) (p)->SetApplicationDesc(a,b)
+#define IDirectPlay8Peer_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e)
+#define IDirectPlay8Peer_DestroyGroup(p,a,b,c,d) (p)->DestroyGroup(a,b,c,d)
+#define IDirectPlay8Peer_AddPlayerToGroup(p,a,b,c,d,e) (p)->AddPlayerToGroup(a,b,c,d,e)
+#define IDirectPlay8Peer_RemovePlayerFromGroup(p,a,b,c,d,e) (p)->RemovePlayerFromGroup(a,b,c,d,e)
+#define IDirectPlay8Peer_SetGroupInfo(p,a,b,c,d,e) (p)->SetGroupInfo(a,b,c,d,e)
+#define IDirectPlay8Peer_GetGroupInfo(p,a,b,c,d) (p)->GetGroupInfo(a,b,c,d)
+#define IDirectPlay8Peer_EnumPlayersAndGroups(p,a,b,c) (p)->EnumPlayersAndGroups(a,b,c)
+#define IDirectPlay8Peer_EnumGroupMembers(p,a,b,c,d) (p)->EnumGroupMembers(a,b,c,d)
+#define IDirectPlay8Peer_SetPeerInfo(p,a,b,c,d) (p)->SetPeerInfo(a,b,c,d)
+#define IDirectPlay8Peer_GetPeerInfo(p,a,b,c,d) (p)->GetPeerInfo(a,b,c,d)
+#define IDirectPlay8Peer_GetPeerAddress(p,a,b,c) (p)->GetPeerAddress(a,b,c)
+#define IDirectPlay8Peer_GetLocalHostAddresses(p,a,b,c) (p)->GetLocalHostAddresses(a,b,c)
+#define IDirectPlay8Peer_Close(p,a) (p)->Close(a)
+#define IDirectPlay8Peer_EnumHosts(p,a,b,c,d,e,f,g,h,i,j,k) (p)->EnumHosts(a,b,c,d,e,f,g,h,i,j,k)
+#define IDirectPlay8Peer_DestroyPeer(p,a,b,c,d) (p)->DestroyPeer(a,b,c,d)
+#define IDirectPlay8Peer_ReturnBuffer(p,a,b) (p)->ReturnBuffer(a,b)
+#define IDirectPlay8Peer_GetPlayerContext(p,a,b,c) (p)->GetPlayerContext(a,b,c)
+#define IDirectPlay8Peer_GetGroupContext(p,a,b,c) (p)->GetGroupContext(a,b,c)
+#define IDirectPlay8Peer_GetCaps(p,a,b) (p)->GetCaps(a,b)
+#define IDirectPlay8Peer_SetCaps(p,a,b) (p)->SetCaps(a,b)
+#define IDirectPlay8Peer_SetSPCaps(p,a,b,c) (p)->SetSPCaps(a,b,c)
+#define IDirectPlay8Peer_GetSPCaps(p,a,b,c) (p)->GetSPCaps(a,b,c)
+#define IDirectPlay8Peer_GetConnectionInfo(p,a,b,c) (p)->GetConnectionInfo(a,b,c)
+#define IDirectPlay8Peer_RegisterLobby(p,a,b,c) (p)->RegisterLobby(a,b,c)
+#define IDirectPlay8Peer_TerminateSession(p,a,b,c) (p)->TerminateSession(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8ThreadPool interface
+ */
+#define INTERFACE IDirectPlay8ThreadPool
+DECLARE_INTERFACE_(IDirectPlay8ThreadPool,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8ThreadPool methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD* pdwNumThreads, DWORD dwFlags) PURE;
+ STDMETHOD(SetThreadCount)(THIS_ DWORD dwProcessorNum, DWORD dwNumThreads, DWORD dwFlags) PURE;
+ STDMETHOD(DoWork)(THIS_ DWORD dwAllowedTimeSlice, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8ThreadPool_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8ThreadPool_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8ThreadPool methods ***/
+#define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8ThreadPool_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->lpVtbl->GetThreadCount(p,a,b,c)
+#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->lpVtbl->SetThreadCount(p,a,b,c)
+#define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->lpVtbl->DoWork(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8ThreadPool_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8ThreadPool_AddRef(p) (p)->AddRef()
+#define IDirectPlay8ThreadPool_Release(p) (p)->Release()
+/*** IDirectPlay8ThreadPool methods ***/
+#define IDirectPlay8ThreadPool_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectPlay8ThreadPool_Close(p,a) (p)->Close(a)
+#define IDirectPlay8ThreadPool_GetThreadCount(p,a,b,c) (p)->GetThreadCount(a,b,c)
+#define IDirectPlay8ThreadPool_SetThreadCount(p,a,b,c) (p)->SetThreadCount(a,b,c)
+#define IDirectPlay8ThreadPool_DoWork(p,a,b) (p)->DoWork(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8NATResolver interface
+ */
+#define INTERFACE IDirectPlay8NATResolver
+DECLARE_INTERFACE_(IDirectPlay8NATResolver,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8NATResolver methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+ STDMETHOD(Start)(THIS_ IDirectPlay8Address** ppDevices, DWORD dwNumDevices, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(EnumDevices)(THIS_ DPN_SERVICE_PROVIDER_INFO* pSPInfoBuffer, PDWORD pdwBufferSize, PDWORD pdwNumDevices, DWORD dwFlags) PURE;
+ STDMETHOD(GetAddresses)(THIS_ IDirectPlay8Address** ppAddresses, DWORD* pdwNumAddresses, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8NATResolver_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8NATResolver_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8NATResolver methods ***/
+#define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->lpVtbl->Start(p,a,b,c)
+#define IDirectPlay8NATResolver_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
+#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->lpVtbl->GetAddresses(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8NATResolver_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8NATResolver_AddRef(p) (p)->AddRef()
+#define IDirectPlay8NATResolver_Release(p) (p)->Release()
+/*** IDirectPlay8NATResolver methods ***/
+#define IDirectPlay8NATResolver_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectPlay8NATResolver_Start(p,a,b,c) (p)->Start(a,b,c)
+#define IDirectPlay8NATResolver_Close(p,a) (p)->Close(a)
+#define IDirectPlay8NATResolver_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
+#define IDirectPlay8NATResolver_GetAddresses(p,a,b,c) (p)->GetAddresses(a,b,c)
+#endif
+
+/* Export functions */
+
+HRESULT WINAPI DirectPlay8Create(const CLSID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h
new file mode 100644
index 00000000..d2af3137
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby.h
@@ -0,0 +1,518 @@
+/*
+ * Copyright (C) 1999 Francois Gouget
+ * Copyright (C) 1999 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLOBBY_H
+#define __WINE_DPLOBBY_H
+
+#include <dplay.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlayLobby, 0x2fe8f810, 0xb2a5, 0x11d0, 0xa7, 0x87, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+
+DEFINE_GUID(IID_IDirectPlayLobby, 0xaf465c71, 0x9588, 0x11cf, 0xa0, 0x20, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);
+typedef struct IDirectPlayLobby *LPDIRECTPLAYLOBBY;
+
+DEFINE_GUID(IID_IDirectPlayLobbyA, 0x26c66a70, 0xb367, 0x11cf, 0xa0, 0x24, 0x0, 0xaa, 0x0, 0x61, 0x57, 0xac);
+typedef struct IDirectPlayLobby IDirectPlayLobbyA,*LPDIRECTPLAYLOBBYA;
+
+DEFINE_GUID(IID_IDirectPlayLobby2, 0x194c220, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+typedef struct IDirectPlayLobby2 *LPDIRECTPLAYLOBBY2;
+
+DEFINE_GUID(IID_IDirectPlayLobby2A, 0x1bb4af80, 0xa303, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+typedef struct IDirectPlayLobby2 IDirectPlayLobby2A, *LPDIRECTPLAYLOBBY2A;
+
+DEFINE_GUID(IID_IDirectPlayLobby3, 0x2db72490, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlayLobby3 *LPDIRECTPLAYLOBBY3;
+
+DEFINE_GUID(IID_IDirectPlayLobby3A, 0x2db72491, 0x652c, 0x11d1, 0xa7, 0xa8, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+typedef struct IDirectPlayLobby3 IDirectPlayLobby3A, *LPDIRECTPLAYLOBBY3A;
+
+
+/*****************************************************************************
+ * DirectPlayLobby Property GUIDs used in lobby messages
+ */
+
+/* DPLPROPERTY_MessagesSupported {762CCDA1-D916-11d0-BA39-00C04FD7ED67}.
+ * Purpose: Request if the lobby supports standard (?).
+ * Response: Answer is a BOOL. TRUE if supports the standard (?) and FALSE otherwise. Of course, it might not respond at all.
+ */
+DEFINE_GUID(DPLPROPERTY_MessagesSupported, 0x762ccda1, 0xd916, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+/* DPLPROPERTY_LobbyGuid {F56920A0-D218-11d0-BA39-00C04FD7ED67}.
+ * Purpose: Request the GUID that identifies the lobby version that the application is communicating with.
+ * Response: The GUID which identifies the lobby version
+ */
+DEFINE_GUID(DPLPROPERTY_LobbyGuid, 0xf56920a0, 0xd218, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+/* DPLPROPERTY_PlayerGuid {B4319322-D20D-11d0-BA39-00C04FD7ED67}
+ * Purpose: Request the GUID that identifies the player for this particular machine.
+ * Response: DPLDATA_PLAYERDATA structure.
+ */
+DEFINE_GUID(DPLPROPERTY_PlayerGuid, 0xb4319322, 0xd20d, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+/* DPLPROPERTY_PlayerScore {48784000-D219-11d0-BA39-00C04FD7ED67}
+ * Purpose: Used to send a score of a player to the lobby. The format is an array of long integers.
+ * Response: I don't think there is one.
+ */
+DEFINE_GUID(DPLPROPERTY_PlayerScore, 0x48784000, 0xd219, 0x11d0, 0xba, 0x39, 0x0, 0xc0, 0x4f, 0xd7, 0xed, 0x67);
+
+
+
+/*****************************************************************************
+ * LOBBY structures associated with GUID messages
+ */
+
+typedef struct tagDPLDATA_PLAYERGUID
+{
+ GUID guidPlayer;
+ DWORD dwPlayerFlags;
+} DPLDATA_PLAYERGUID, *LPDPLDATA_PLAYERGUID;
+
+typedef struct tagDPLDATA_PLAYERSCORE
+{
+ DWORD dwScoreCount;
+ LONG Score[1];
+} DPLDATA_PLAYERSCORE, *LPDPLDATA_PLAYERSCORE;
+
+
+/*****************************************************************************
+ * LOBBY messages and message data structures.
+ *
+ * System messages can be identified by dwMessageFlags having a value of DPLMSG_SYSTEM
+ * after a call to ReceiveLobbyMessage.
+ *
+ * Standard messages can be identified by dwMessageFlags having a value of DPLMSG_STANDARD
+ * after a call to ReceiveLobbyMessage.
+ */
+
+/* DPLobby1 definition required for backwards compatibility */
+#define DPLMSG_SYSTEM 0x00000001
+#define DPLMSG_STANDARD 0x00000002
+#define DPLAD_SYSTEM DPLMSG_SYSTEM
+
+
+/* System messages - dwType field for messages */
+#define DPLSYS_CONNECTIONSETTINGSREAD 0x00000001
+#define DPLSYS_DPLAYCONNECTFAILED 0x00000002
+#define DPLSYS_DPLAYCONNECTSUCCEEDED 0x00000003
+#define DPLSYS_APPTERMINATED 0x00000004
+#define DPLSYS_SETPROPERTY 0x00000005
+#define DPLSYS_SETPROPERTYRESPONSE 0x00000006
+#define DPLSYS_GETPROPERTY 0x00000007
+#define DPLSYS_GETPROPERTYRESPONSE 0x00000008
+#define DPLSYS_NEWSESSIONHOST 0x00000009
+#define DPLSYS_NEWCONNECTIONSETTINGS 0x0000000A
+
+
+
+/* Used to identify the message type */
+typedef struct tagDPLMSG_GENERIC
+{
+ DWORD dwType; /* Message type */
+} DPLMSG_GENERIC, *LPDPLMSG_GENERIC;
+
+/* Generic format for system messages - see above */
+typedef struct tagDPLMSG_SYSTEMMESSAGE
+{
+ DWORD dwType; /* Message type */
+ GUID guidInstance; /* Instance GUID of the dplay session the message corresponds to */
+} DPLMSG_SYSTEMMESSAGE, *LPDPLMSG_SYSTEMMESSAGE;
+
+/* Generic message to set a property - see property GUIDs above */
+typedef struct tagDPLMSG_SETPROPERTY
+{
+ DWORD dwType; /* Message type */
+ DWORD dwRequestID; /* Request ID (DPL_NOCONFIRMATION if no confirmation desired) */
+ GUID guidPlayer; /* Player GUID */
+ GUID guidPropertyTag; /* Property GUID */
+ DWORD dwDataSize; /* Size of data */
+ DWORD dwPropertyData[1]; /* Buffer containing data */
+} DPLMSG_SETPROPERTY, *LPDPLMSG_SETPROPERTY;
+
+#define DPL_NOCONFIRMATION 0
+
+/* Reply to DPLMSG_SETPROPERTY */
+typedef struct tagDPLMSG_SETPROPERTYRESPONSE
+{
+ DWORD dwType; /* Message type */
+ DWORD dwRequestID; /* Request ID */
+ GUID guidPlayer; /* Player GUID */
+ GUID guidPropertyTag; /* Property GUID */
+ HRESULT hr; /* Return Code */
+} DPLMSG_SETPROPERTYRESPONSE, *LPDPLMSG_SETPROPERTYRESPONSE;
+
+/* Request to get the present value of a property */
+typedef struct tagDPLMSG_GETPROPERTY
+{
+ DWORD dwType; /* Message type */
+ DWORD dwRequestID; /* Request ID */
+ GUID guidPlayer; /* Player GUID */
+ GUID guidPropertyTag; /* Property GUID */
+} DPLMSG_GETPROPERTY, *LPDPLMSG_GETPROPERTY;
+
+/* Response to a request to get the present value of a property */
+typedef struct tagDPLMSG_GETPROPERTYRESPONSE
+{
+ DWORD dwType; /* Message type */
+ DWORD dwRequestID; /* Request ID */
+ GUID guidPlayer; /* Player GUID */
+ GUID guidPropertyTag; /* Property GUID */
+ HRESULT hr; /* Return Code */
+ DWORD dwDataSize; /* Size of data */
+ DWORD dwPropertyData[1]; /* Buffer containing data */
+} DPLMSG_GETPROPERTYRESPONSE, *LPDPLMSG_GETPROPERTYRESPONSE;
+
+/* Standard message in response to a session host migration to a new client */
+typedef struct tagDPLMSG_NEWSESSIONHOST
+{
+ DWORD dwType; /* Message type */
+ GUID guidInstance; /* GUID Instance of the session */
+} DPLMSG_NEWSESSIONHOST, *LPDPLMSG_NEWSESSIONHOST;
+
+/*****************************************************************************
+ * DirectPlay Address ID's
+ * A DirectPlay address is composed of multiple data chunks, each associated with
+ * a GUID to give significance to the type of data. All chunks have an associated
+ * size so that unknown chunks can be ignored for backwards compatibility!
+ * EnumAddresses function is used to parse the address data chunks.
+ */
+
+/* DPAID_TotalSize {1318F560-912C-11d0-9DAA-00A0C90A43CB}
+ * Chunk purpose: Chunk is a DWORD containing the size of the entire DPADDRESS struct
+ */
+DEFINE_GUID(DPAID_TotalSize, 0x1318f560, 0x912c, 0x11d0, 0x9d, 0xaa, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb);
+
+/* DPAID_ServiceProvider {07D916C0-E0AF-11cf-9C4E-00A0C905425E}
+ * Chunk purpose: Chunk is a GUID indicated what service provider created the chunk.
+ */
+DEFINE_GUID(DPAID_ServiceProvider, 0x7d916c0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_LobbyProvider {59B95640-9667-11d0-A77D-0000F803ABFC}
+ * Chunk purpose: Chunk is a GUID indicating what lobby provider created the chunk.
+ */
+DEFINE_GUID(DPAID_LobbyProvider, 0x59b95640, 0x9667, 0x11d0, 0xa7, 0x7d, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc);
+
+/* DPAID_Phone {78EC89A0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI
+ * DPAID_PhoneW {BA5A7A70-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE
+ * Chunk purpose: Chunk is a phone number in ANSI or UNICODE format
+ */
+DEFINE_GUID(DPAID_Phone, 0x78ec89a0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+DEFINE_GUID(DPAID_PhoneW, 0xba5a7a70, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_Modem {F6DCC200-A2FE-11d0-9C4F-00A0C905425E} -- ANSI
+ * DPAID_ModemW {01FD92E0-A2FF-11d0-9C4F-00A0C905425E} -- UNICODE
+ * Chunk purpose: Chunk is a modem name registered with TAPI
+ */
+DEFINE_GUID(DPAID_Modem, 0xf6dcc200, 0xa2fe, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+DEFINE_GUID(DPAID_ModemW, 0x1fd92e0, 0xa2ff, 0x11d0, 0x9c, 0x4f, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_INet {C4A54DA0-E0AF-11cf-9C4E-00A0C905425E} -- ANSI
+ * DPAID_INetW {E63232A0-9DBF-11d0-9CC1-00A0C905425E} -- UNICODE
+ * Chunk purpose: Chunk is a string containing a TCP/IP host name or IP address
+ */
+DEFINE_GUID(DPAID_INet, 0xc4a54da0, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+DEFINE_GUID(DPAID_INetW, 0xe63232a0, 0x9dbf, 0x11d0, 0x9c, 0xc1, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+/* DPAID_INetPort {E4524541-8EA5-11d1-8A96-006097B01411}
+ * Chunk purpose: Chunk is a port number used for creating TCP and UDP sockets. (WORD)
+ */
+DEFINE_GUID(DPAID_INetPort, 0xe4524541, 0x8ea5, 0x11d1, 0x8a, 0x96, 0x0, 0x60, 0x97, 0xb0, 0x14, 0x11);
+
+/* DPAID_ComPort {F2F0CE00-E0AF-11cf-9C4E-00A0C905425E}
+ * Chunk purpose: Chunk contains the description of a serial port.
+ */
+DEFINE_GUID(DPAID_ComPort, 0xf2f0ce00, 0xe0af, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e);
+
+
+/* Header block for address data elements */
+typedef struct tagDPADDRESS
+{
+ GUID guidDataType;
+ DWORD dwDataSize;
+} DPADDRESS, *LPDPADDRESS;
+
+
+/* Used for specification of a communication port. Baud rate, stop bits and
+ * parity bits can be found in winbase.h. These are flow control constants only.
+ */
+#define DPCPA_NOFLOW 0 /* no flow control */
+#define DPCPA_XONXOFFFLOW 1 /* software flow control */
+#define DPCPA_RTSFLOW 2 /* hardware flow control with RTS */
+#define DPCPA_DTRFLOW 3 /* hardware flow control with DTR */
+#define DPCPA_RTSDTRFLOW 4 /* hardware flow control with RTS and DTR */
+
+typedef struct tagDPCOMPORTADDRESS
+{
+ DWORD dwComPort; /* COM port to use (1-4) */
+ DWORD dwBaudRate; /* baud rate (100-256k) */
+ DWORD dwStopBits; /* no. stop bits (1-2) */
+ DWORD dwParity; /* parity (none, odd, even, mark) */
+ DWORD dwFlowControl; /* flow control (none, xon/xoff, rts, dtr) */
+} DPCOMPORTADDRESS, *LPDPCOMPORTADDRESS;
+
+
+
+/****************************************************************************
+ * Miscellaneous
+ */
+
+typedef struct tagDPLAPPINFO
+{
+ DWORD dwSize;
+ GUID guidApplication;
+
+ union
+ {
+ LPSTR lpszAppNameA;
+ LPWSTR lpszAppName;
+ } DUMMYUNIONNAME;
+
+} DPLAPPINFO, *LPDPLAPPINFO;
+typedef const DPLAPPINFO *LPCDPLAPPINFO;
+
+typedef struct DPCOMPOUNDADDRESSELEMENT
+{
+ GUID guidDataType;
+ DWORD dwDataSize;
+ LPVOID lpData;
+} DPCOMPOUNDADDRESSELEMENT, *LPDPCOMPOUNDADDRESSELEMENT;
+typedef const DPCOMPOUNDADDRESSELEMENT *LPCDPCOMPOUNDADDRESSELEMENT;
+
+typedef struct tagDPAPPLICATIONDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+
+ union
+ {
+ LPSTR lpszApplicationNameA;
+ LPWSTR lpszApplicationName;
+ } DUMMYUNIONNAME1;
+
+ GUID guidApplication;
+
+ union
+ {
+ LPSTR lpszFilenameA;
+ LPWSTR lpszFilename;
+ } DUMMYUNIONNAME2;
+
+ union
+ {
+ LPSTR lpszCommandLineA;
+ LPWSTR lpszCommandLine;
+ } DUMMYUNIONNAME3;
+
+ union
+ {
+ LPSTR lpszPathA;
+ LPWSTR lpszPath;
+ } DUMMYUNIONNAME4;
+
+ union
+ {
+ LPSTR lpszCurrentDirectoryA;
+ LPWSTR lpszCurrentDirectory;
+ } DUMMYUNIONNAME5;
+
+ LPSTR lpszDescriptionA;
+ LPWSTR lpszDescriptionW;
+
+} DPAPPLICATIONDESC, *LPDPAPPLICATIONDESC;
+
+
+
+extern HRESULT WINAPI DirectPlayLobbyCreateW(LPGUID, LPDIRECTPLAYLOBBY*, IUnknown*, LPVOID, DWORD );
+extern HRESULT WINAPI DirectPlayLobbyCreateA(LPGUID, LPDIRECTPLAYLOBBYA*, IUnknown*, LPVOID, DWORD );
+#define DirectPlayLobbyCreate WINELIB_NAME_AW(DirectPlayLobbyCreate)
+
+
+typedef BOOL (CALLBACK *LPDPENUMADDRESSCALLBACK)(
+ REFGUID guidDataType,
+ DWORD dwDataSize,
+ LPCVOID lpData,
+ LPVOID lpContext );
+
+typedef BOOL (CALLBACK *LPDPLENUMADDRESSTYPESCALLBACK)(
+ REFGUID guidDataType,
+ LPVOID lpContext,
+ DWORD dwFlags );
+
+typedef BOOL (CALLBACK *LPDPLENUMLOCALAPPLICATIONSCALLBACK)(
+ LPCDPLAPPINFO lpAppInfo,
+ LPVOID lpContext,
+ DWORD dwFlags );
+
+/*****************************************************************************
+ * IDirectPlayLobby and IDirectPlayLobbyA interface
+ */
+#define INTERFACE IDirectPlayLobby
+DECLARE_INTERFACE_(IDirectPlayLobby,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlayLobby methods ***/
+ STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;
+ STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
+ STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
+ STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;
+ STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;
+ STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;
+ STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;
+ STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectPlayLobby2 and IDirectPlayLobby2A interface
+ */
+#define INTERFACE IDirectPlayLobby2
+DECLARE_INTERFACE_(IDirectPlayLobby2,IDirectPlayLobby)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlayLobby methods ***/
+ STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;
+ STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
+ STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
+ STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;
+ STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;
+ STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;
+ STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;
+ STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;
+ /*** IDirectPlayLobby2 methods ***/
+ STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;
+};
+#undef INTERFACE
+
+/*****************************************************************************
+ * IDirectPlayLobby3 and IDirectPlayLobby3A interface
+ */
+#define INTERFACE IDirectPlayLobby3
+DECLARE_INTERFACE_(IDirectPlayLobby3,IDirectPlayLobby2)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlayLobby methods ***/
+ STDMETHOD(Connect)(THIS_ DWORD, LPDIRECTPLAY2*, IUnknown*) PURE;
+ STDMETHOD(CreateAddress)(THIS_ REFGUID, REFGUID, LPCVOID, DWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK, LPCVOID, DWORD, LPVOID) PURE;
+ STDMETHOD(EnumAddressTypes)(THIS_ LPDPLENUMADDRESSTYPESCALLBACK, REFGUID, LPVOID, DWORD) PURE;
+ STDMETHOD(EnumLocalApplications)(THIS_ LPDPLENUMLOCALAPPLICATIONSCALLBACK, LPVOID, DWORD) PURE;
+ STDMETHOD(GetConnectionSettings)(THIS_ DWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(ReceiveLobbyMessage)(THIS_ DWORD, DWORD, LPDWORD, LPVOID, LPDWORD) PURE;
+ STDMETHOD(RunApplication)(THIS_ DWORD, LPDWORD, LPDPLCONNECTION, HANDLE) PURE;
+ STDMETHOD(SendLobbyMessage)(THIS_ DWORD, DWORD, LPVOID, DWORD) PURE;
+ STDMETHOD(SetConnectionSettings)(THIS_ DWORD, DWORD, LPDPLCONNECTION) PURE;
+ STDMETHOD(SetLobbyMessageEvent)(THIS_ DWORD, DWORD, HANDLE) PURE;
+ /*** IDirectPlayLobby2 methods ***/
+ STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT, DWORD, LPVOID, LPDWORD) PURE;
+ /*** IDirectPlayLobby3 methods ***/
+ STDMETHOD(ConnectEx)(THIS_ DWORD, REFIID, LPVOID *, IUnknown *) PURE;
+ STDMETHOD(RegisterApplication)(THIS_ DWORD, LPDPAPPLICATIONDESC) PURE;
+ STDMETHOD(UnregisterApplication)(THIS_ DWORD, REFGUID) PURE;
+ STDMETHOD(WaitForConnectionSettings)(THIS_ DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlayLobby_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlayLobby_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlayLobby_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlayLobby methods ***/
+#define IDirectPlayLobby_Connect(p,a,b,c) (p)->lpVtbl->Connect(p,a,b,c)
+#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)
+#define IDirectPlayLobby_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d)
+#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d) (p)->lpVtbl->EnumAddressTypes(p,a,b,c,d)
+#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c) (p)->lpVtbl->EnumLocalApplications(p,a,b,c)
+#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c) (p)->lpVtbl->GetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->lpVtbl->ReceiveLobbyMessage(p,a,b,c,d,e)
+#define IDirectPlayLobby_RunApplication(p,a,b,c,d) (p)->lpVtbl->RunApplication(p,a,b,c,d)
+#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d) (p)->lpVtbl->SendLobbyMessage(p,a,b,c,d)
+#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
+#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c) (p)->lpVtbl->SetLobbyMessageEvent(p,a,b,c)
+/*** IDirectPlayLobby2 methods ***/
+#define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)
+/*** IDirectPlayLobby3 methods ***/
+#define IDirectPlayLobby_ConnectEx(p,a,b,c,d) (p)->lpVtbl->ConnectEx(p,a,b,c,d)
+#define IDirectPlayLobby_RegisterApplication(p,a,b) (p)->lpVtbl->RegisterApplication(p,a,b)
+#define IDirectPlayLobby_UnregisterApplication(p,a,b) (p)->lpVtbl->UnregisterApplication(p,a,b)
+#define IDirectPlayLobby_WaitForConnectionSettings(p,a) (p)->lpVtbl->WaitForConnectionSettings(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlayLobby_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlayLobby_AddRef(p) (p)->AddRef()
+#define IDirectPlayLobby_Release(p) (p)->Release()
+/*** IDirectPlayLobby methods ***/
+#define IDirectPlayLobby_Connect(p,a,b,c) (p)->Connect(a,b,c)
+#define IDirectPlayLobby_CreateAddress(p,a,b,c,d,e,f) (p)->CreateAddress(a,b,c,d,e,f)
+#define IDirectPlayLobby_EnumAddress(p,a,b,c,d) (p)->EnumAddress(a,b,c,d)
+#define IDirectPlayLobby_EnumAddressTypes(p,a,b,c,d) (p)->EnumAddressTypes(a,b,c,d)
+#define IDirectPlayLobby_EnumLocalApplications(p,a,b,c) (p)->EnumLocalApplications(a,b,c)
+#define IDirectPlayLobby_GetConnectionSettings(p,a,b,c) (p)->GetConnectionSettings(a,b,c)
+#define IDirectPlayLobby_ReceiveLobbyMessage(p,a,b,c,d,e) (p)->ReceiveLobbyMessage(a,b,c,d,e)
+#define IDirectPlayLobby_RunApplication(p,a,b,c,d) (p)->RunApplication(a,b,c,d)
+#define IDirectPlayLobby_SendLobbyMessage(p,a,b,c,d) (p)->SendLobbyMessage(a,b,c,d)
+#define IDirectPlayLobby_SetConnectionSettings(p,a,b,c) (p)->SetConnectionSettings(a,b,c)
+#define IDirectPlayLobby_SetLobbyMessageEvent(p,a,b,c) (p)->SetLobbyMessageEvent(a,b,c)
+/*** IDirectPlayLobby2 methods ***/
+#define IDirectPlayLobby_CreateCompoundAddress(p,a,b,c,d) (p)->CreateCompoundAddress(a,b,c,d)
+/*** IDirectPlayLobby3 methods ***/
+#define IDirectPlayLobby_ConnectEx(p,a,b,c,d) (p)->ConnectEx(a,b,c,d)
+#define IDirectPlayLobby_RegisterApplication(p,a,b) (p)->RegisterApplication(a,b)
+#define IDirectPlayLobby_UnregisterApplication(p,a,b) (p)->UnregisterApplication(a,b)
+#define IDirectPlayLobby_WaitForConnectionSettings(p,a) (p)->WaitForConnectionSettings(a)
+#endif
+
+/* Used for WaitForConnectionSettings */
+#define DPLWAIT_CANCEL 0x00000001
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DPLOBBY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h
new file mode 100644
index 00000000..f675f085
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dplobby8.h
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2003-2005 Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DPLOBBY8_H
+#define __WINE_DPLOBBY8_H
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * DirectPlay8Lobby defines
+ */
+#define DPL_MSGID_LOBBY 0x8000
+#define DPL_MSGID_RECEIVE (0x0001 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_CONNECT (0x0002 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_DISCONNECT (0x0003 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_SESSION_STATUS (0x0004 | DPL_MSGID_LOBBY)
+#define DPL_MSGID_CONNECTION_SETTINGS (0x0005 | DPL_MSGID_LOBBY)
+#define DPLHANDLE_ALLCONNECTIONS 0xFFFFFFFF
+#define DPLSESSION_CONNECTED 0x0001
+#define DPLSESSION_COULDNOTCONNECT 0x0002
+#define DPLSESSION_DISCONNECTED 0x0003
+#define DPLSESSION_TERMINATED 0x0004
+#define DPLSESSION_HOSTMIGRATED 0x0005
+#define DPLSESSION_HOSTMIGRATEDHERE 0x0006
+#define DPLAVAILABLE_ALLOWMULTIPLECONNECT 0x0001
+#define DPLCONNECT_LAUNCHNEW 0x0001
+#define DPLCONNECT_LAUNCHNOTFOUND 0x0002
+#define DPLCONNECTSETTINGS_HOST 0x0001
+#define DPLINITIALIZE_DISABLEPARAMVAL 0x0001
+
+/*****************************************************************************
+ * DirectPlay8Lobby structures Typedefs
+ */
+typedef struct _DPL_APPLICATION_INFO {
+ GUID guidApplication;
+ PWSTR pwszApplicationName;
+ DWORD dwNumRunning;
+ DWORD dwNumWaiting;
+ DWORD dwFlags;
+} DPL_APPLICATION_INFO, *PDPL_APPLICATION_INFO;
+
+typedef struct _DPL_CONNECTION_SETTINGS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DPN_APPLICATION_DESC dpnAppDesc;
+ IDirectPlay8Address* pdp8HostAddress;
+ IDirectPlay8Address** ppdp8DeviceAddresses;
+ DWORD cNumDeviceAddresses;
+ PWSTR pwszPlayerName;
+} DPL_CONNECTION_SETTINGS, *PDPL_CONNECTION_SETTINGS;
+
+typedef struct _DPL_CONNECT_INFO {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidApplication;
+ PDPL_CONNECTION_SETTINGS pdplConnectionSettings;
+ PVOID pvLobbyConnectData;
+ DWORD dwLobbyConnectDataSize;
+} DPL_CONNECT_INFO, *PDPL_CONNECT_INFO;
+
+typedef struct _DPL_PROGRAM_DESC {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidApplication;
+ PWSTR pwszApplicationName;
+ PWSTR pwszCommandLine;
+ PWSTR pwszCurrentDirectory;
+ PWSTR pwszDescription;
+ PWSTR pwszExecutableFilename;
+ PWSTR pwszExecutablePath;
+ PWSTR pwszLauncherFilename;
+ PWSTR pwszLauncherPath;
+} DPL_PROGRAM_DESC, *PDPL_PROGRAM_DESC;
+
+typedef struct _DPL_MESSAGE_CONNECT {
+ DWORD dwSize;
+ DPNHANDLE hConnectId;
+ PDPL_CONNECTION_SETTINGS pdplConnectionSettings;
+ PVOID pvLobbyConnectData;
+ DWORD dwLobbyConnectDataSize;
+ PVOID pvConnectionContext;
+} DPL_MESSAGE_CONNECT, *PDPL_MESSAGE_CONNECT;
+
+typedef struct _DPL_MESSAGE_CONNECTION_SETTINGS {
+ DWORD dwSize;
+ DPNHANDLE hSender;
+ PDPL_CONNECTION_SETTINGS pdplConnectionSettings;
+ PVOID pvConnectionContext;
+} DPL_MESSAGE_CONNECTION_SETTINGS, *PDPL_MESSAGE_CONNECTION_SETTINGS;
+
+typedef struct _DPL_MESSAGE_DISCONNECT {
+ DWORD dwSize;
+ DPNHANDLE hDisconnectId;
+ HRESULT hrReason;
+ PVOID pvConnectionContext;
+} DPL_MESSAGE_DISCONNECT, *PDPL_MESSAGE_DISCONNECT;
+
+typedef struct _DPL_MESSAGE_RECEIVE {
+ DWORD dwSize;
+ DPNHANDLE hSender;
+ BYTE* pBuffer;
+ DWORD dwBufferSize;
+ PVOID pvConnectionContext;
+} DPL_MESSAGE_RECEIVE, *PDPL_MESSAGE_RECEIVE;
+
+typedef struct _DPL_MESSAGE_SESSION_STATUS {
+ DWORD dwSize;
+ DPNHANDLE hSender;
+ DWORD dwStatus;
+ PVOID pvConnectionContext;
+} DPL_MESSAGE_SESSION_STATUS, *PDPL_MESSAGE_SESSION_STATUS;
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectPlay8LobbiedApplication, 0x667955ad,0x6b3b,0x43ca,0xb9,0x49,0xbc,0x69,0xb5,0xba,0xff,0x7f);
+DEFINE_GUID(CLSID_DirectPlay8LobbyClient, 0x3b2b6775,0x70b6,0x45af,0x8d,0xea,0xa2,0x09,0xc6,0x95,0x59,0xf3);
+
+DEFINE_GUID(IID_IDirectPlay8LobbiedApplication, 0x819074a3,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8LobbiedApplication *PDIRECTPLAY8LOBBIEDAPPLICATION;
+DEFINE_GUID(IID_IDirectPlay8LobbyClient, 0x819074a2,0x16c,0x11d3,0xae,0x14,0x00,0x60,0x97,0xb0,0x14,0x11);
+typedef struct IDirectPlay8LobbyClient *PDIRECTPLAY8LOBBYCLIENT;
+
+/*****************************************************************************
+ * IDirectPlay8LobbiedApplication interface
+ */
+#define INTERFACE IDirectPlay8LobbiedApplication
+DECLARE_INTERFACE_(IDirectPlay8LobbiedApplication,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8LobbiedApplication methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DPNHANDLE* pdpnhConnection, DWORD dwFlags) PURE;
+ STDMETHOD(RegisterProgram)(THIS_ PDPL_PROGRAM_DESC pdplProgramDesc, DWORD dwFlags) PURE;
+ STDMETHOD(UnRegisterProgram)(THIS_ GUID* pguidApplication, DWORD dwFlags) PURE;
+ STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetAppAvailable)(THIS_ BOOL fAvailable, DWORD dwFlags) PURE;
+ STDMETHOD(UpdateStatus)(THIS_ DPNHANDLE hConnection, DWORD dwStatus, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8LobbiedApplication_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8LobbiedApplication_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8LobbiedApplication methods ***/
+#define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d) (p)->lpVtbl->Initialize(p,a,b,c,d)
+#define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b) (p)->lpVtbl->RegisterProgram(p,a,b)
+#define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b) (p)->lpVtbl->UnRegisterProgram(p,a,b)
+#define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d) (p)->lpVtbl->Send(p,a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b) (p)->lpVtbl->SetAppAvailable(p,a,b)
+#define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c) (p)->lpVtbl->UpdateStatus(p,a,b,c)
+#define IDirectPlay8LobbiedApplication_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbiedApplication_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8LobbiedApplication_AddRef(p) (p)->AddRef()
+#define IDirectPlay8LobbiedApplication_Release(p) (p)->Release()
+/*** IDirectPlay8LobbiedApplication methods ***/
+#define IDirectPlay8LobbiedApplication_Initialize(p,a,b,c,d) (p)->Initialize(a,b,c,d)
+#define IDirectPlay8LobbiedApplication_RegisterProgram(p,a,b) (p)->RegisterProgram(a,b)
+#define IDirectPlay8LobbiedApplication_UnRegisterProgram(p,a,b) (p)->UnRegisterProgram(a,b)
+#define IDirectPlay8LobbiedApplication_Send(p,a,b,c,d) (p)->Send(a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetAppAvailable(p,a,b) (p)->SetAppAvailable(a,b)
+#define IDirectPlay8LobbiedApplication_UpdateStatus(p,a,b,c) (p)->UpdateStatus(a,b,c)
+#define IDirectPlay8LobbiedApplication_Close(p,a) (p)->Close(a)
+#define IDirectPlay8LobbiedApplication_GetConnectionSettings(p,a,b,c,d) (p)->GetConnectionSettings(a,b,c,d)
+#define IDirectPlay8LobbiedApplication_SetConnectionSettings(p,a,b,c) (p)->SetConnectionSettings(a,b,c)
+#endif
+
+/*****************************************************************************
+ * IDirectPlay8LobbyClient interface
+ */
+#define INTERFACE IDirectPlay8LobbyClient
+DECLARE_INTERFACE_(IDirectPlay8LobbyClient,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlay8LobbyClient methods ***/
+ STDMETHOD(Initialize)(THIS_ PVOID pvUserContext, PFNDPNMESSAGEHANDLER pfn, DWORD dwFlags) PURE;
+ STDMETHOD(EnumLocalPrograms)(THIS_ GUID* pGuidApplication, BYTE* pEnumData, DWORD* pdwEnumData, DWORD* pdwItems, DWORD dwFlags) PURE;
+ STDMETHOD(ConnectApplication)(THIS_ DPL_CONNECT_INFO* pdplConnectionInfo, PVOID pvConnectionContext, DPNHANDLE* hApplication, DWORD dwTimeOut, DWORD dwFlags) PURE;
+ STDMETHOD(Send)(THIS_ DPNHANDLE hConnection, BYTE* pBuffer, DWORD pBufferSize, DWORD dwFlags) PURE;
+ STDMETHOD(ReleaseApplication)(THIS_ DPNHANDLE hConnection, DWORD dwFlags) PURE;
+ STDMETHOD(Close)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(GetConnectionSettings)(THIS_ DPNHANDLE hConnection, DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD* pdwInfoSize, DWORD dwFlags) PURE;
+ STDMETHOD(SetConnectionSettings)(THIS_ DPNHANDLE hConnection, const DPL_CONNECTION_SETTINGS* pdplSessionInfo, DWORD dwFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbyClient_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlay8LobbyClient_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlay8LobbyClient_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlay8LobbyClient methods ***/
+#define IDirectPlay8LobbyClient_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
+#define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e) (p)->lpVtbl->EnumLocalPrograms(p,a,b,c,d,e)
+#define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e) (p)->lpVtbl->ConnectApplication(p,a,b,c,d,e)
+#define IDirectPlay8LobbyClient_Send(p,a,b,c,d) (p)->lpVtbl->Send(p,a,b,c,d)
+#define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b) (p)->lpVtbl->ReleaseApplication(p,a,b)
+#define IDirectPlay8LobbyClient_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetConnectionSettings(p,a,b,c,d)
+#define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c) (p)->lpVtbl->SetConnectionSettings(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IDirectPlay8LobbyClient_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectPlay8LobbyClient_AddRef(p) (p)->AddRef()
+#define IDirectPlay8LobbyClient_Release(p) (p)->Release()
+/*** IDirectPlay8LobbyClient methods ***/
+#define IDirectPlay8LobbyClient_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
+#define IDirectPlay8LobbyClient_EnumLocalPrograms(p,a,b,c,d,e) (p)->EnumLocalPrograms(a,b,c,d,e)
+#define IDirectPlay8LobbyClient_ConnectApplication(p,a,b,c,d,e) (p)->ConnectApplication(a,b,c,d,e)
+#define IDirectPlay8LobbyClient_Send(p,a,b,c,d) (p)->Send(a,b,c,d)
+#define IDirectPlay8LobbyClient_ReleaseApplication(p,a,b) (p)->ReleaseApplication(a,b)
+#define IDirectPlay8LobbyClient_Close(p,a) (p)->Close(a)
+#define IDirectPlay8LobbyClient_GetConnectionSettings(p,a,b,c,d) (p)->GetConnectionSettings(a,b,c,d)
+#define IDirectPlay8LobbyClient_SetConnectionSettings(p,a,b,c) (p)->SetConnectionSettings(a,b,c)
+#endif
+
+
+/* Export functions */
+
+HRESULT WINAPI DirectPlay8LobbyCreate(const GUID* pcIID, LPVOID* ppvInterface, IUnknown* pUnknown);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h
new file mode 100644
index 00000000..48075b96
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dpnathlp.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2006 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DPNATHLP_H__
+#define __DPNATHLP_H__
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT DirectPlayNATHelpCreate(LPCGUID pIID, LPVOID *ppvInterface);
+
+DEFINE_GUID(CLSID_DirectPlayNATHelpUPnP, 0xb9c2e9c4,0x68c1,0x4d42,0xa7,0xa1,0xe7,0x6a,0x26,0x98,0x2a,0xd6);
+DEFINE_GUID(CLSID_DirectPlayNATHelpPAST, 0x963ab779,0x16a1,0x477c,0xa3,0x6d,0xcb,0x5e,0x71,0x19,0x38,0xf7);
+DEFINE_GUID(IID_IDirectPlayNATHelp, 0x154940b6,0x2278,0x4a2f,0x91,0x01,0x9b,0xa9,0xf4,0x31,0xf6,0x03);
+
+#define DPNHGETCAPS_UPDATESERVERSTATUS 0x01
+
+#define DPNHREGISTERPORTS_TCP 0x01
+#define DPNHREGISTERPORTS_FIXEDPORTS 0x02
+#define DPNHREGISTERPORTS_SHAREDPORTS 0x04
+
+#define DPNHADDRESSTYPE_TCP 0x01
+#define DPNHADDRESSTYPE_FIXEDPORTS 0x02
+#define DPNHADDRESSTYPE_SHAREDPORTS 0x04
+#define DPNHADDRESSTYPE_LOCALFIREWALL 0x08
+#define DPNHADDRESSTYPE_GATEWAY 0x10
+#define DPNHADDRESSTYPE_GATEWAYISLOCAL 0x20
+
+#define DPNHCAPSFLAG_LOCALFIREWALLPRESENT 0x01
+#define DPNHCAPSFLAG_GATEWAYPRESENT 0x02
+#define DPNHCAPSFLAG_GATEWAYISLOCAL 0x04
+#define DPNHCAPSFLAG_PUBLICADDRESSAVAILABLE 0x08
+#define DPNHCAPSFLAG_NOTALLSUPPORTACTIVENOTIFY 0x10
+
+#define DPNHINITIALIZE_DISABLEGATEWAYSUPPORT 0x01
+#define DPNHINITIALIZE_DISABLELOCALFIREWALLSUPPORT 0x02
+
+#define DPNHQUERYADDRESS_TCP 0x01
+#define DPNHQUERYADDRESS_CACHEFOUND 0x02
+#define DPNHQUERYADDRESS_CACHENOTFOUND 0x04
+#define DPNHQUERYADDRESS_CHECKFORPRIVATEBUTUNMAPPED 0x08
+
+#define DPNHGETREGISTEREDADDRESSES_LOCALFIREWALLREMAPONLY 0x01
+
+#define _DPNH_FACILITY_CODE 0x015
+#define _DPNH_HRESULT_BASE 0xF000
+
+#define MAKE_DPNHSUCCESS(code) \
+ MAKE_HRESULT(0, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE))
+#define MAKE_DPNHFAILURE(code) \
+ MAKE_HRESULT(1, _DPNH_FACILITY_CODE, (code + _DPNH_HRESULT_BASE))
+
+#define DPNH_OK S_OK
+#define DPNHSUCCESS_ADDRESSESCHANGED MAKE_DPNHSUCCESS(0x10)
+
+#define DPNHERR_ALREADYINITIALIZED MAKE_DPNHFAILURE(0x10)
+#define DPNHERR_BUFFERTOOSMALL MAKE_DPNHFAILURE(0x20)
+#define DPNHERR_GENERIC E_FAIL
+#define DPNHERR_INVALIDFLAGS MAKE_DPNHFAILURE(0x30)
+#define DPNHERR_INVALIDOBJECT MAKE_DPNHFAILURE(0x40)
+#define DPNHERR_INVALIDPARAM E_INVALIDARG
+#define DPNHERR_INVALIDPOINTER E_POINTER
+#define DPNHERR_NOMAPPING MAKE_DPNHFAILURE(0x50)
+#define DPNHERR_NOMAPPINGBUTPRIVATE MAKE_DPNHFAILURE(0x60)
+#define DPNHERR_NOTINITIALIZED MAKE_DPNHFAILURE(0x70)
+#define DPNHERR_OUTOFMEMORY E_OUTOFMEMORY
+#define DPNHERR_PORTALREADYREGISTERED MAKE_DPNHFAILURE(0x80)
+#define DPNHERR_PORTUNAVAILABLE MAKE_DPNHFAILURE(0x90)
+#define DPNHERR_REENTRANT MAKE_DPNHFAILURE(0x95)
+#define DPNHERR_SERVERNOTAVAILABLE MAKE_DPNHFAILURE(0xA0)
+#define DPNHERR_UPDATESERVERSTATUS MAKE_DPNHFAILURE(0xC0)
+
+typedef DWORD_PTR DPNHHANDLE;
+typedef DWORD_PTR *PDPNHHANDLE;
+
+typedef struct _DPNHCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwNumRegisteredPorts;
+ DWORD dwMinLeaseTimeRemaining;
+ DWORD dwRecommendedGetCapsInterval;
+} DPNHCAPS, *PDPNHCAPS;
+
+
+#define INTERFACE IDirectPlayNATHelp
+DECLARE_INTERFACE_(IDirectPlayNATHelp,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObject) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*** IDirectPlayNATHelp functions ***/
+ STDMETHOD(Initialize) (THIS_
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(Close) (THIS_
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(GetCaps) (THIS_
+ PDPNHCAPS pCaps,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(RegisterPorts) (THIS_
+ PSOCKADDR aLocalAddresses,
+ DWORD dwAddressSize,
+ DWORD dwAddresses,
+ DWORD dwTime,
+ PDPNHHANDLE phRegisteredPorts,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(GetRegisteredAddresses) (THIS_
+ PDPNHHANDLE hRegisteredPorts,
+ PSOCKADDR paPublicAddresses,
+ const DWORD *dwAddressSize,
+ const DWORD *dwAddressFlags,
+ const DWORD *dwRemaining,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(DeregisterPorts)(THIS_
+ DPNHHANDLE hRegPorts,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(QueryAddress) (THIS_
+ PSOCKADDR pSource,
+ PSOCKADDR pQuery,
+ PSOCKADDR pResponse,
+ INT iAddresses,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(SetAlertEvent) (THIS_
+ HANDLE hEvent,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(SetAlertIOCompletionPort)(THIS_
+ HANDLE hIOCompletionPort,
+ DWORD dwCompletion,
+ DWORD dwMaxThreads,
+ DWORD dwFlags) PURE;
+
+ STDMETHOD(ExtendRegisteredPortsLease)(THIS_
+ DPNHHANDLE hRegisteredPorts,
+ DWORD dwLeaseTime,
+ DWORD dwFlags) PURE;
+};
+
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define IDirectPlayNATHelp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlayNATHelp_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlayNATHelp_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectPlayNATHelp_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDirectPlayNATHelp_Close(p,a) (p)->lpVtbl->Close(p,a)
+#define IDirectPlayNATHelp_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)
+#define IDirectPlayNATHelp_RegisterPorts(p,a,b,c,d,e,f) (p)->lpVtbl->RegisterPorts(p,a,b,c,d,e,f)
+#define IDirectPlayNATHelp_GetRegisteredAddresses(p,a,b,c,d,e,f) (p)->lpVtbl->GetRegisteredAddresses(p,a,b,c,d,e,f)
+#define IDirectPlayNATHelp_DeregisterPorts(p,a,b) (p)->lpVtbl->DeregisterPorts(p,a,b)
+#define IDirectPlayNATHelp_QueryAddress(p,a,b,c,d,e) (p)->lpVtbl->QueryAddress(p,a,b,c,d,e)
+#define IDirectPlayNATHelp_SetAlertEvent(p,a,b) (p)->lpVtbl->SetAlertEvent(p,a,b)
+#define IDirectPlayNATHelp_SetAlertIOCompletionPort(p,a,b,c,d) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c,d)
+#define IDirectPlayNATHelp_ExtendRegisteredPortsLease(p,a,b,c) (p)->lpVtbl->SetAlertIOCompletionPort(p,a,b,c)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __DPNATHLP_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h
new file mode 100644
index 00000000..0d8d9c0f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsconf.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2003 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DSCONF_H
+#define __WINE_DSCONF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectSoundPrivate, 0x11ab3ec0,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca);
+
+DEFINE_GUID(DSPROPSETID_DirectSoundDevice, 0x84624f82,0x25ec,0x11d1,0xa4,0xd8,0x00,0xc0,0x4f,0xc2,0x8a,0xca);
+
+typedef enum
+{
+ DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A = 1,
+ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1 = 2,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 = 3,
+ DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W = 4,
+ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A = 5,
+ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W = 6,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A = 7,
+ DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W = 8,
+} DSPROPERTY_DIRECTSOUNDDEVICE;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A
+#endif
+
+typedef enum
+{
+ DIRECTSOUNDDEVICE_TYPE_EMULATED,
+ DIRECTSOUNDDEVICE_TYPE_VXD,
+ DIRECTSOUNDDEVICE_TYPE_WDM
+} DIRECTSOUNDDEVICE_TYPE;
+
+typedef enum
+{
+ DIRECTSOUNDDEVICE_DATAFLOW_RENDER,
+ DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE
+} DIRECTSOUNDDEVICE_DATAFLOW;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA
+{
+ LPSTR DeviceName;
+ DIRECTSOUNDDEVICE_DATAFLOW DataFlow;
+ GUID DeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA
+{
+ LPWSTR DeviceName;
+ DIRECTSOUNDDEVICE_DATAFLOW DataFlow;
+ GUID DeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W_DATA
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A_DATA
+#endif
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA
+{
+ GUID DeviceId;
+ CHAR DescriptionA[0x100];
+ WCHAR DescriptionW[0x100];
+ CHAR ModuleA[MAX_PATH];
+ WCHAR ModuleW[MAX_PATH];
+ DIRECTSOUNDDEVICE_TYPE Type;
+ DIRECTSOUNDDEVICE_DATAFLOW DataFlow;
+ ULONG WaveDeviceId;
+ ULONG Devnode;
+} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA
+{
+ DIRECTSOUNDDEVICE_TYPE Type;
+ DIRECTSOUNDDEVICE_DATAFLOW DataFlow;
+ GUID DeviceId;
+ LPSTR Description;
+ LPSTR Module;
+ LPSTR Interface;
+ ULONG WaveDeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA
+{
+ DIRECTSOUNDDEVICE_TYPE Type;
+ DIRECTSOUNDDEVICE_DATAFLOW DataFlow;
+ GUID DeviceId;
+ LPWSTR Description;
+ LPWSTR Module;
+ LPWSTR Interface;
+ ULONG WaveDeviceId;
+} DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA
+#endif
+
+typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA, LPVOID);
+typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA, LPVOID);
+typedef BOOL (CALLBACK *LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW)(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA, LPVOID);
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA
+{
+ LPFNDIRECTSOUNDDEVICEENUMERATECALLBACK1 Callback;
+ LPVOID Context;
+} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA
+{
+ LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKA Callback;
+ LPVOID Context;
+} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA;
+
+typedef struct _DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA
+{
+ LPFNDIRECTSOUNDDEVICEENUMERATECALLBACKW Callback;
+ LPVOID Context;
+} DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA, *PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA;
+
+#ifdef UNICODE
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA
+#else
+#define DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA
+#define PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA PDSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DSCONF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h
new file mode 100644
index 00000000..5e730e9b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsgetdc.h
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2006 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DSGETDC_H
+#define __WINE_DSGETDC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DS_FORCE_REDISCOVERY 0x00000001
+#define DS_DIRECTORY_SERVICE_REQUIRED 0x00000010
+#define DS_DIRECTORY_SERVICE_PREFERRED 0x00000020
+#define DS_GC_SERVER_REQUIRED 0x00000040
+#define DS_PDC_REQUIRED 0x00000080
+#define DS_BACKGROUND_ONLY 0x00000100
+#define DS_IP_REQUIRED 0x00000200
+#define DS_KDC_REQUIRED 0x00000400
+#define DS_TIMESERV_REQUIRED 0x00000800
+#define DS_WRITABLE_REQUIRED 0x00001000
+#define DS_GOOD_TIMESERV_PREFERRED 0x00002000
+#define DS_AVOID_SELF 0x00004000
+#define DS_ONLY_LDAP_NEEDED 0x00008000
+
+#define DS_IS_FLAT_NAME 0x00010000
+#define DS_IS_DNS_NAME 0x00020000
+
+#define DS_RETURN_DNS_NAME 0x40000000
+#define DS_RETURN_FLAT_NAME 0x80000000
+
+#define DSGETDC_VALID_FLAGS ( \
+ DS_FORCE_REDISCOVERY | \
+ DS_DIRECTORY_SERVICE_REQUIRED | \
+ DS_DIRECTORY_SERVICE_PREFERRED | \
+ DS_GC_SERVER_REQUIRED | \
+ DS_PDC_REQUIRED | \
+ DS_BACKGROUND_ONLY | \
+ DS_IP_REQUIRED | \
+ DS_KDC_REQUIRED | \
+ DS_TIMESERV_REQUIRED | \
+ DS_WRITABLE_REQUIRED | \
+ DS_GOOD_TIMESERV_PREFERRED | \
+ DS_AVOID_SELF | \
+ DS_ONLY_LDAP_NEEDED | \
+ DS_IS_FLAT_NAME | \
+ DS_IS_DNS_NAME | \
+ DS_RETURN_FLAT_NAME | \
+ DS_RETURN_DNS_NAME )
+
+typedef struct _DOMAIN_CONTROLLER_INFOA {
+ LPSTR DomainControllerName;
+ LPSTR DomainControllerAddress;
+ ULONG DomainControllerAddressType;
+ GUID DomainGuid;
+ LPSTR DomainName;
+ LPSTR DnsForestName;
+ ULONG Flags;
+ LPSTR DcSiteName;
+ LPSTR ClientSiteName;
+} DOMAIN_CONTROLLER_INFOA, *PDOMAIN_CONTROLLER_INFOA;
+
+typedef struct _DOMAIN_CONTROLLER_INFOW {
+ LPWSTR DomainControllerName;
+ LPWSTR DomainControllerAddress;
+ ULONG DomainControllerAddressType;
+ GUID DomainGuid;
+ LPWSTR DomainName;
+ LPWSTR DnsForestName;
+ ULONG Flags;
+ LPWSTR DcSiteName;
+ LPWSTR ClientSiteName;
+} DOMAIN_CONTROLLER_INFOW, *PDOMAIN_CONTROLLER_INFOW;
+
+DECL_WINELIB_TYPE_AW(DOMAIN_CONTROLLER_INFO)
+
+DWORD WINAPI DsGetDcNameA(LPCSTR,LPCSTR,GUID*,LPCSTR,ULONG,PDOMAIN_CONTROLLER_INFOA*);
+DWORD WINAPI DsGetDcNameW(LPCWSTR,LPCWSTR,GUID*,LPCWSTR,ULONG,PDOMAIN_CONTROLLER_INFOW*);
+#define DsGetDcName WINELIB_NAME_AW(DsGetDcName)
+
+DWORD WINAPI DsGetSiteNameA(LPCSTR ComputerName, LPSTR *SiteName);
+DWORD WINAPI DsGetSiteNameW(LPCWSTR ComputerName, LPWSTR *SiteName);
+#define DsGetSiteName WINELIB_NAME_AW(DsGetSiteName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DSGETDC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h
new file mode 100644
index 00000000..008e9329
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dshow.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DSHOW_INCLUDED__
+#define __DSHOW_INCLUDED__
+
+#define AM_NOVTABLE
+
+#include <windows.h>
+#ifndef __WINESRC__
+# include <windowsx.h>
+#endif
+#include <olectl.h>
+#include <ddraw.h>
+#include <mmsystem.h>
+#ifndef NO_DSHOW_STRSAFE
+#define NO_SHLWAPI_STRFCNS
+#include <strsafe.h>
+#endif
+
+#ifndef NUMELMS
+#define NUMELMS(array) (sizeof(array)/sizeof((array)[0]))
+#endif
+
+#include <strmif.h>
+#include <amvideo.h>
+#ifdef DSHOW_USE_AMAUDIO
+#include <amaudio.h>
+#endif
+#include <control.h>
+#include <evcode.h>
+#include <uuids.h>
+#include <errors.h>
+/* FIXME: #include <edevdefs.h> */
+#include <audevcod.h>
+/* FIXME: #include <dvdevcod.h> */
+
+#ifndef OATRUE
+#define OATRUE (-1)
+#endif
+#ifndef OAFALSE
+#define OAFALSE (0)
+#endif
+
+#endif /* __DSHOW_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h
new file mode 100644
index 00000000..27f33ef4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsound.h
@@ -0,0 +1,1211 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DSOUND_INCLUDED__
+#define __DSOUND_INCLUDED__
+
+#ifndef DIRECTSOUND_VERSION
+#define DIRECTSOUND_VERSION 0x0900
+#endif
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <float.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef DX_SHARED_DEFINES
+
+typedef float D3DVALUE, *LPD3DVALUE;
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR, *LPD3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+ float x;
+ float y;
+ float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+#ifndef LPD3DVECTOR_DEFINED
+typedef D3DVECTOR *LPD3DVECTOR;
+#define LPD3DVECTOR_DEFINED
+#endif
+
+#define DX_SHARED_DEFINES
+#endif /* DX_SHARED_DEFINES */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00);
+DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b);
+DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16);
+DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1);
+DEFINE_GUID(CLSID_DirectSoundFullDuplex,0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d);
+
+DEFINE_GUID(IID_IDirectSound, 0x279AFA83,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSound *LPDIRECTSOUND,**LPLPDIRECTSOUND;
+
+DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93,0xF395,0x4834,0x9E,0xF6,0x7F,0xA9,0x9D,0xE5,0x09,0x66);
+typedef struct IDirectSound8 *LPDIRECTSOUND8,**LPLPDIRECTSOUND8;
+
+DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER,**LPLPDIRECTSOUNDBUFFER;
+
+DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825A449,0x7524,0x4D82,0x92,0x0F,0x50,0xE3,0x6A,0xB3,0xAB,0x1E);
+typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8,**LPLPDIRECTSOUNDBUFFER8;
+
+DEFINE_GUID(IID_IDirectSoundNotify, 0xB0210783,0x89cd,0x11d0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
+typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY,**LPLPDIRECTSOUNDNOTIFY;
+#define IID_IDirectSoundNotify8 IID_IDirectSoundNotify
+
+DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER,**LPLPDIRECTSOUND3DLISTENER;
+
+DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86,0x4981,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60);
+typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER,**LPLPDIRECTSOUND3DBUFFER;
+
+DEFINE_GUID(IID_IDirectSoundCapture, 0xB0210781,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
+typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE,**LPLPDIRECTSOUNDCAPTURE;
+#define IID_IDirectSoundCapture8 IID_IDirectSoundCapture
+typedef struct IDirectSoundCapture IDirectSoundCapture8,*LPDIRECTSOUNDCAPTURE8,**LPLPDIRECTSOUNDCAPTURE8;
+
+DEFINE_GUID(IID_IDirectSoundCaptureBuffer,0xB0210782,0x89CD,0x11D0,0xAF,0x08,0x00,0xA0,0xC9,0x25,0xCD,0x16);
+typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER,**LPLPDIRECTSOUNDCAPTUREBUFFER;
+
+DEFINE_GUID(IID_IDirectSoundCaptureBuffer8,0x00990DF4,0x0DBB,0x4872,0x83,0x3E,0x6D,0x30,0x3E,0x80,0xAE,0xB6);
+typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8,**LPLPDIRECTSOUNDCAPTUREBUFFER8;
+
+DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xEDCB4C7A,0xDAAB,0x4216,0xA4,0x2E,0x6C,0x50,0x59,0x6D,0xDC,0x1D);
+typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX,**LPLPDIRECTSOUNDFULLDUPLEX;
+#define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex
+
+DEFINE_GUID(DSDEVID_DefaultPlayback, 0xDEF00000,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+DEFINE_GUID(DSDEVID_DefaultCapture, 0xDEF00001,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+DEFINE_GUID(DSDEVID_DefaultVoicePlayback,0xDEF00002,0x9C6D,0x47Ed,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xDEF00003,0x9C6D,0x47ED,0xAA,0xF1,0x4D,0xDA,0x8F,0x2B,0x5C,0x03);
+
+DEFINE_GUID(DSDEVID_WinePlayback, 0x40316A1D,0x605B,0xD611,0x87,0xC6,0x00,0x80,0xAD,0x00,0x02,0xFE);
+
+#define _FACDS 0x878
+#define MAKE_DSHRESULT(code) MAKE_HRESULT(1,_FACDS,code)
+
+#define DS_OK 0
+#define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10)
+#define DS_INCOMPLETE MAKE_HRESULT(0, _FACDS, 20)
+#define DSERR_ALLOCATED MAKE_DSHRESULT(10)
+#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30)
+#define DSERR_INVALIDPARAM E_INVALIDARG
+#define DSERR_INVALIDCALL MAKE_DSHRESULT(50)
+#define DSERR_GENERIC E_FAIL
+#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70)
+#define DSERR_OUTOFMEMORY E_OUTOFMEMORY
+#define DSERR_BADFORMAT MAKE_DSHRESULT(100)
+#define DSERR_UNSUPPORTED E_NOTIMPL
+#define DSERR_NODRIVER MAKE_DSHRESULT(120)
+#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130)
+#define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION
+#define DSERR_BUFFERLOST MAKE_DSHRESULT(150)
+#define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160)
+#define DSERR_UNINITIALIZED MAKE_DSHRESULT(170)
+#define DSERR_NOINTERFACE E_NOINTERFACE
+#define DSERR_ACCESSDENIED E_ACCESSDENIED
+#define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180)
+#define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190)
+#define DSERR_SENDLOOP MAKE_DSHRESULT(200)
+#define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210)
+#define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220)
+#define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449)
+
+#define DSCAPS_PRIMARYMONO 0x00000001
+#define DSCAPS_PRIMARYSTEREO 0x00000002
+#define DSCAPS_PRIMARY8BIT 0x00000004
+#define DSCAPS_PRIMARY16BIT 0x00000008
+#define DSCAPS_CONTINUOUSRATE 0x00000010
+#define DSCAPS_EMULDRIVER 0x00000020
+#define DSCAPS_CERTIFIED 0x00000040
+#define DSCAPS_SECONDARYMONO 0x00000100
+#define DSCAPS_SECONDARYSTEREO 0x00000200
+#define DSCAPS_SECONDARY8BIT 0x00000400
+#define DSCAPS_SECONDARY16BIT 0x00000800
+
+#define DSSCL_NORMAL 1
+#define DSSCL_PRIORITY 2
+#define DSSCL_EXCLUSIVE 3
+#define DSSCL_WRITEPRIMARY 4
+
+typedef struct _DSCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwMinSecondarySampleRate;
+ DWORD dwMaxSecondarySampleRate;
+ DWORD dwPrimaryBuffers;
+ DWORD dwMaxHwMixingAllBuffers;
+ DWORD dwMaxHwMixingStaticBuffers;
+ DWORD dwMaxHwMixingStreamingBuffers;
+ DWORD dwFreeHwMixingAllBuffers;
+ DWORD dwFreeHwMixingStaticBuffers;
+ DWORD dwFreeHwMixingStreamingBuffers;
+ DWORD dwMaxHw3DAllBuffers;
+ DWORD dwMaxHw3DStaticBuffers;
+ DWORD dwMaxHw3DStreamingBuffers;
+ DWORD dwFreeHw3DAllBuffers;
+ DWORD dwFreeHw3DStaticBuffers;
+ DWORD dwFreeHw3DStreamingBuffers;
+ DWORD dwTotalHwMemBytes;
+ DWORD dwFreeHwMemBytes;
+ DWORD dwMaxContigFreeHwMemBytes;
+ DWORD dwUnlockTransferRateHwBuffers;
+ DWORD dwPlayCpuOverheadSwBuffers;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} DSCAPS,*LPDSCAPS;
+typedef const DSCAPS *LPCDSCAPS;
+
+#define DSBPLAY_LOOPING 0x00000001
+#define DSBPLAY_LOCHARDWARE 0x00000002
+#define DSBPLAY_LOCSOFTWARE 0x00000004
+#define DSBPLAY_TERMINATEBY_TIME 0x00000008
+#define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010
+#define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020
+
+#define DSBSTATUS_PLAYING 0x00000001
+#define DSBSTATUS_BUFFERLOST 0x00000002
+#define DSBSTATUS_LOOPING 0x00000004
+#define DSBSTATUS_LOCHARDWARE 0x00000008
+#define DSBSTATUS_LOCSOFTWARE 0x00000010
+#define DSBSTATUS_TERMINATED 0x00000020
+
+#define DSBLOCK_FROMWRITECURSOR 0x00000001
+#define DSBLOCK_ENTIREBUFFER 0x00000002
+
+#define DSBCAPS_PRIMARYBUFFER 0x00000001
+#define DSBCAPS_STATIC 0x00000002
+#define DSBCAPS_LOCHARDWARE 0x00000004
+#define DSBCAPS_LOCSOFTWARE 0x00000008
+#define DSBCAPS_CTRL3D 0x00000010
+#define DSBCAPS_CTRLFREQUENCY 0x00000020
+#define DSBCAPS_CTRLPAN 0x00000040
+#define DSBCAPS_CTRLVOLUME 0x00000080
+#define DSBCAPS_CTRLDEFAULT 0x000000E0 /* Pan + volume + frequency. */
+#define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100
+#define DSBCAPS_CTRLFX 0x00000200
+#define DSBCAPS_CTRLALL 0x000001F0 /* All control capabilities */
+#define DSBCAPS_STICKYFOCUS 0x00004000
+#define DSBCAPS_GLOBALFOCUS 0x00008000
+#define DSBCAPS_GETCURRENTPOSITION2 0x00010000 /* More accurate play cursor under emulation*/
+#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000
+#define DSBCAPS_LOCDEFER 0x00040000
+
+#define DSBSIZE_MIN 4
+#define DSBSIZE_MAX 0xFFFFFFF
+#define DSBPAN_LEFT -10000
+#define DSBPAN_CENTER 0
+#define DSBPAN_RIGHT 10000
+#define DSBVOLUME_MAX 0
+#define DSBVOLUME_MIN -10000
+#define DSBFREQUENCY_MIN 100
+#define DSBFREQUENCY_MAX 200000
+#define DSBFREQUENCY_ORIGINAL 0
+
+#define DSBNOTIFICATIONS_MAX 100000U
+
+typedef struct _DSBCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwUnlockTransferRate;
+ DWORD dwPlayCpuOverhead;
+} DSBCAPS,*LPDSBCAPS;
+typedef const DSBCAPS *LPCDSBCAPS;
+
+#define DSSCL_NORMAL 1
+#define DSSCL_PRIORITY 2
+#define DSSCL_EXCLUSIVE 3
+#define DSSCL_WRITEPRIMARY 4
+
+typedef struct _DSEFFECTDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidDSFXClass;
+ DWORD_PTR dwReserved1;
+ DWORD_PTR dwReserved2;
+} DSEFFECTDESC,*LPDSEFFECTDESC;
+typedef const DSEFFECTDESC *LPCDSEFFECTDESC;
+
+#define DSFX_LOCHARDWARE 0x00000001
+#define DSFX_LOCSOFTWARE 0x00000002
+
+enum
+{
+ DSFXR_PRESENT,
+ DSFXR_LOCHARDWARE,
+ DSFXR_LOCSOFTWARE,
+ DSFXR_UNALLOCATED,
+ DSFXR_FAILED,
+ DSFXR_UNKNOWN,
+ DSFXR_SENDLOOP
+};
+
+typedef struct _DSBUFFERDESC1
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+} DSBUFFERDESC1,*LPDSBUFFERDESC1;
+typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1;
+
+typedef struct _DSBUFFERDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+ GUID guid3DAlgorithm;
+} DSBUFFERDESC,*LPDSBUFFERDESC;
+typedef const DSBUFFERDESC *LPCDSBUFFERDESC;
+
+typedef struct _DSBPOSITIONNOTIFY
+{
+ DWORD dwOffset;
+ HANDLE hEventNotify;
+} DSBPOSITIONNOTIFY,*LPDSBPOSITIONNOTIFY;
+typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;
+
+#define DSSPEAKER_DIRECTOUT 0
+#define DSSPEAKER_HEADPHONE 1
+#define DSSPEAKER_MONO 2
+#define DSSPEAKER_QUAD 3
+#define DSSPEAKER_STEREO 4
+#define DSSPEAKER_SURROUND 5
+#define DSSPEAKER_5POINT1 6
+#define DSSPEAKER_5POINT1_BACK 6
+#define DSSPEAKER_7POINT1 7
+#define DSSPEAKER_7POINT1_WIDE 7
+#define DSSPEAKER_7POINT1_SURROUND 8
+#define DSSPEAKER_5POINT1_SURROUND 9
+
+#define DSSPEAKER_GEOMETRY_MIN 0x00000005 /* 5 degrees */
+#define DSSPEAKER_GEOMETRY_NARROW 0x0000000A /* 10 degrees */
+#define DSSPEAKER_GEOMETRY_WIDE 0x00000014 /* 20 degrees */
+#define DSSPEAKER_GEOMETRY_MAX 0x000000B4 /* 180 degrees */
+
+#define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
+#define DSSPEAKER_CONFIG(a) ((BYTE)(a))
+#define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
+
+#define DS_CERTIFIED 0x00000000
+#define DS_UNCERTIFIED 0x00000001
+
+typedef struct _DSCEFFECTDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidDSCFXClass;
+ GUID guidDSCFXInstance;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} DSCEFFECTDESC, *LPDSCEFFECTDESC;
+typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC;
+
+#define DSCFX_LOCHARDWARE 0x00000001
+#define DSCFX_LOCSOFTWARE 0x00000002
+
+#define DSCFXR_LOCHARDWARE 0x00000010
+#define DSCFXR_LOCSOFTWARE 0x00000020
+
+typedef struct _DSCBUFFERDESC1
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+} DSCBUFFERDESC1, *LPDSCBUFFERDESC1;
+
+typedef struct _DSCBUFFERDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+ DWORD dwFXCount;
+ LPDSCEFFECTDESC lpDSCFXDesc;
+} DSCBUFFERDESC, *LPDSCBUFFERDESC;
+typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC;
+
+typedef struct _DSCCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwFormats;
+ DWORD dwChannels;
+} DSCCAPS, *LPDSCCAPS;
+typedef const DSCCAPS *LPCDSCCAPS;
+
+typedef struct _DSCBCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+} DSCBCAPS, *LPDSCBCAPS;
+typedef const DSCBCAPS *LPCDSCBCAPS;
+
+#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER
+#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED
+#define DSCCAPS_MULTIPLECAPTURE 0x00000001
+
+#define DSCBCAPS_WAVEMAPPED 0x80000000
+#define DSCBCAPS_CTRLFX 0x00000200
+
+#define DSCBLOCK_ENTIREBUFFER 0x00000001
+#define DSCBSTART_LOOPING 0x00000001
+#define DSCBPN_OFFSET_STOP 0xffffffff
+
+#define DSCBSTATUS_CAPTURING 0x00000001
+#define DSCBSTATUS_LOOPING 0x00000002
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID,LPCWSTR,LPCWSTR,LPVOID);
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID,LPCSTR,LPCSTR,LPVOID);
+DECL_WINELIB_TYPE_AW(LPDSENUMCALLBACK)
+
+extern HRESULT WINAPI DirectSoundCreate(LPCGUID lpGUID,LPDIRECTSOUND *ppDS,LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID);
+extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID);
+#define DirectSoundEnumerate WINELIB_NAME_AW(DirectSoundEnumerate)
+extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID);
+extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID);
+#define DirectSoundCaptureEnumerate WINELIB_NAME_AW(DirectSoundCaptureEnumerate)
+
+extern HRESULT WINAPI DirectSoundCreate8(LPCGUID lpGUID,LPDIRECTSOUND8 *ppDS8,LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID lpGUID, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice,
+ LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, DWORD dwLevel,
+ LPDIRECTSOUNDFULLDUPLEX *ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter);
+#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate
+extern HRESULT WINAPI GetDeviceID(LPCGUID lpGuidSrc, LPGUID lpGuidDest);
+
+
+/*****************************************************************************
+ * IDirectSound interface
+ */
+#define INTERFACE IDirectSound
+DECLARE_INTERFACE_(IDirectSound,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSound methods ***/
+ STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE;
+ STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE;
+ STDMETHOD(Compact)(THIS) PURE;
+ STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE;
+ STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSound_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSound methods ***/
+#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
+#define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
+#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a)
+#define IDirectSound_SetSpeakerConfig(p,a) (p)->lpVtbl->SetSpeakerConfig(p,a)
+#define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound_AddRef(p) (p)->AddRef()
+#define IDirectSound_Release(p) (p)->Release()
+/*** IDirectSound methods ***/
+#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c)
+#define IDirectSound_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)
+#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectSound_Compact(p) (p)->Compact()
+#define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a)
+#define IDirectSound_SetSpeakerConfig(p,a) (p)->SetSpeakerConfig(a)
+#define IDirectSound_Initialize(p,a) (p)->Initialize(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSound8 interface
+ */
+#define INTERFACE IDirectSound8
+DECLARE_INTERFACE_(IDirectSound8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSound8 methods ***/
+ STDMETHOD(CreateSoundBuffer)(THIS_ LPCDSBUFFERDESC lpcDSBufferDesc, LPLPDIRECTSOUNDBUFFER lplpDirectSoundBuffer, IUnknown *pUnkOuter) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDSCAPS lpDSCaps) PURE;
+ STDMETHOD(DuplicateSoundBuffer)(THIS_ LPDIRECTSOUNDBUFFER lpDsbOriginal, LPLPDIRECTSOUNDBUFFER lplpDsbDuplicate) PURE;
+ STDMETHOD(SetCooperativeLevel)(THIS_ HWND hwnd, DWORD dwLevel) PURE;
+ STDMETHOD(Compact)(THIS) PURE;
+ STDMETHOD(GetSpeakerConfig)(THIS_ LPDWORD lpdwSpeakerConfig) PURE;
+ STDMETHOD(SetSpeakerConfig)(THIS_ DWORD dwSpeakerConfig) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCGUID lpcGuid) PURE;
+ STDMETHOD(VerifyCertification)(THIS_ LPDWORD pdwCertified) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSound8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSound methods ***/
+#define IDirectSound8_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
+#define IDirectSound8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
+#define IDirectSound8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectSound8_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectSound8_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a)
+#define IDirectSound8_SetSpeakerConfig(p,a) (p)->lpVtbl->SetSpeakerConfig(p,a)
+#define IDirectSound8_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+/*** IDirectSound8 methods ***/
+#define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound8_AddRef(p) (p)->AddRef()
+#define IDirectSound8_Release(p) (p)->Release()
+/*** IDirectSound methods ***/
+#define IDirectSound8_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c)
+#define IDirectSound8_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSound8_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)
+#define IDirectSound8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectSound8_Compact(p) (p)->Compact()
+#define IDirectSound8_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a)
+#define IDirectSound8_SetSpeakerConfig(p,a) (p)->SetSpeakerConfig(a)
+#define IDirectSound8_Initialize(p,a) (p)->Initialize(a)
+/*** IDirectSound8 methods ***/
+#define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSoundBuffer interface
+ */
+#define INTERFACE IDirectSoundBuffer
+DECLARE_INTERFACE_(IDirectSoundBuffer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundBuffer methods ***/
+ STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE;
+ STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+ STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE;
+ STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE;
+ STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+ STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+ STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE;
+ STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE;
+ STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE;
+ STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;
+ STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE;
+ STDMETHOD(SetPan)(THIS_ LONG lPan) PURE;
+ STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE;
+ STDMETHOD(Restore)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a)
+#define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a)
+#define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a)
+#define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c)
+#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a)
+#define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
+#define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a)
+#define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a)
+#define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a)
+#define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
+#define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundBuffer_AddRef(p) (p)->AddRef()
+#define IDirectSoundBuffer_Release(p) (p)->Release()
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c)
+#define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a)
+#define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a)
+#define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a)
+#define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a)
+#define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c)
+#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a)
+#define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a)
+#define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a)
+#define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a)
+#define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a)
+#define IDirectSoundBuffer_Stop(p) (p)->Stop()
+#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d)
+#define IDirectSoundBuffer_Restore(p) (p)->Restore()
+#endif
+
+
+/*****************************************************************************
+ * IDirectSoundBuffer8 interface
+ */
+#define INTERFACE IDirectSoundBuffer8
+DECLARE_INTERFACE_(IDirectSoundBuffer8,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundBuffer8 methods ***/
+ STDMETHOD(GetCaps)(THIS_ LPDSBCAPS lpDSBufferCaps) PURE;
+ STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCurrentPlayCursor, LPDWORD lpdwCurrentWriteCursor) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+ STDMETHOD(GetVolume)(THIS_ LPLONG lplVolume) PURE;
+ STDMETHOD(GetPan)(THIS_ LPLONG lplpan) PURE;
+ STDMETHOD(GetFrequency)(THIS_ LPDWORD lpdwFrequency) PURE;
+ STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+ STDMETHOD(Initialize)(THIS_ LPDIRECTSOUND lpDirectSound, LPCDSBUFFERDESC lpcDSBufferDesc) PURE;
+ STDMETHOD(Lock)(THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Play)(THIS_ DWORD dwReserved1, DWORD dwReserved2, DWORD dwFlags) PURE;
+ STDMETHOD(SetCurrentPosition)(THIS_ DWORD dwNewPosition) PURE;
+ STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;
+ STDMETHOD(SetVolume)(THIS_ LONG lVolume) PURE;
+ STDMETHOD(SetPan)(THIS_ LONG lPan) PURE;
+ STDMETHOD(SetFrequency)(THIS_ DWORD dwFrequency) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(Unlock)(THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioPtr2) PURE;
+ STDMETHOD(Restore)(THIS) PURE;
+ STDMETHOD(SetFX)(THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE;
+ STDMETHOD(AcquireResources)(THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE;
+ STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundBuffer8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundBuffer8_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundBuffer8_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a)
+#define IDirectSoundBuffer8_GetPan(p,a) (p)->lpVtbl->GetPan(p,a)
+#define IDirectSoundBuffer8_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a)
+#define IDirectSoundBuffer8_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundBuffer8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundBuffer8_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c)
+#define IDirectSoundBuffer8_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a)
+#define IDirectSoundBuffer8_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
+#define IDirectSoundBuffer8_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a)
+#define IDirectSoundBuffer8_SetPan(p,a) (p)->lpVtbl->SetPan(p,a)
+#define IDirectSoundBuffer8_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a)
+#define IDirectSoundBuffer8_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
+#define IDirectSoundBuffer8_Restore(p) (p)->lpVtbl->Restore(p)
+/*** IDirectSoundBuffer8 methods ***/
+#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c)
+#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c)
+#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundBuffer8_AddRef(p) (p)->AddRef()
+#define IDirectSoundBuffer8_Release(p) (p)->Release()
+/*** IDirectSoundBuffer methods ***/
+#define IDirectSoundBuffer8_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundBuffer8_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c)
+#define IDirectSoundBuffer8_GetVolume(p,a) (p)->GetVolume(a)
+#define IDirectSoundBuffer8_GetPan(p,a) (p)->GetPan(a)
+#define IDirectSoundBuffer8_GetFrequency(p,a) (p)->GetFrequency(a)
+#define IDirectSoundBuffer8_GetStatus(p,a) (p)->GetStatus(a)
+#define IDirectSoundBuffer8_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundBuffer8_Play(p,a,b,c) (p)->Play(a,b,c)
+#define IDirectSoundBuffer8_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a)
+#define IDirectSoundBuffer8_SetFormat(p,a) (p)->SetFormat(a)
+#define IDirectSoundBuffer8_SetVolume(p,a) (p)->SetVolume(a)
+#define IDirectSoundBuffer8_SetPan(p,a) (p)->SetPan(a)
+#define IDirectSoundBuffer8_SetFrequency(p,a) (p)->SetFrequency(a)
+#define IDirectSoundBuffer8_Stop(p) (p)->Stop()
+#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d)
+#define IDirectSoundBuffer8_Restore(p) (p)->Restore()
+/*** IDirectSoundBuffer8 methods ***/
+#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c)
+#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c)
+#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSoundCapture interface
+ */
+#define INTERFACE IDirectSoundCapture
+DECLARE_INTERFACE_(IDirectSoundCapture,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundCapture methods ***/
+ STDMETHOD(CreateCaptureBuffer)(THIS_ LPCDSCBUFFERDESC lpcDSCBufferDesc,LPDIRECTSOUNDCAPTUREBUFFER *lplpDSCaptureBuffer, LPUNKNOWN pUnk) PURE;
+ STDMETHOD(GetCaps)(THIS_ LPDSCCAPS lpDSCCaps) PURE;
+ STDMETHOD(Initialize)(THIS_ LPCGUID lpcGUID) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundCapture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundCapture_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundCapture_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundCapture methods ***/
+#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c)
+#define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundCapture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundCapture_AddRef(p) (p)->AddRef()
+#define IDirectSoundCapture_Release(p) (p)->Release()
+/*** IDirectSoundCapture methods ***/
+#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c)
+#define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a)
+#endif
+
+/*****************************************************************************
+ * IDirectSoundCaptureBuffer interface
+ */
+#define INTERFACE IDirectSoundCaptureBuffer
+DECLARE_INTERFACE_(IDirectSoundCaptureBuffer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundCaptureBuffer methods ***/
+ STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE;
+ STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+ STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+ STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE;
+ STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundCaptureBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundCaptureBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a)
+#define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundCaptureBuffer_AddRef(p) (p)->AddRef()
+#define IDirectSoundCaptureBuffer_Release(p) (p)->Release()
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c)
+#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a)
+#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a)
+#define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop()
+#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IDirectSoundCaptureBuffer8 interface
+ */
+#define INTERFACE IDirectSoundCaptureBuffer8
+DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8,IDirectSoundCaptureBuffer)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundCaptureBuffer methods ***/
+ STDMETHOD(GetCaps)(THIS_ LPDSCBCAPS lpDSCBCaps) PURE;
+ STDMETHOD(GetCurrentPosition)(THIS_ LPDWORD lpdwCapturePosition,LPDWORD lpdwReadPosition) PURE;
+ STDMETHOD(GetFormat)(THIS_ LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten) PURE;
+ STDMETHOD(GetStatus)(THIS_ LPDWORD lpdwStatus) PURE;
+ STDMETHOD(Initialize)(THIS_ LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc) PURE;
+ STDMETHOD(Lock)(THIS_ DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Start)(THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(Stop)(THIS) PURE;
+ STDMETHOD(Unlock)(THIS_ LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2) PURE;
+ /*** IDirectSoundCaptureBuffer8 methods ***/
+ STDMETHOD(GetObjectInPath)(THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;
+ STDMETHOD(GetFXStatus)(THIS_ DWORD dwFXCount, LPDWORD pdwFXStatus) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundCaptureBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundCaptureBuffer8_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer8_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundCaptureBuffer8_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer8_Start(p,a) (p)->lpVtbl->Start(p,a)
+#define IDirectSoundCaptureBuffer8_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
+/*** IDirectSoundCaptureBuffer8 methods ***/
+#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)
+#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundCaptureBuffer8_AddRef(p) (p)->AddRef()
+#define IDirectSoundCaptureBuffer8_Release(p) (p)->Release()
+/*** IDirectSoundCaptureBuffer methods ***/
+#define IDirectSoundCaptureBuffer8_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c)
+#define IDirectSoundCaptureBuffer8_GetStatus(p,a) (p)->GetStatus(a)
+#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer8_Start(p,a) (p)->Start(a)
+#define IDirectSoundCaptureBuffer8_Stop(p) (p)->Stop()
+#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d)
+/*** IDirectSoundCaptureBuffer8 methods ***/
+#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d)
+#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b)
+#endif
+
+/*****************************************************************************
+ * IDirectSoundNotify interface
+ */
+#define WINE_NOBUFFER 0x80000000
+
+#define DSBPN_OFFSETSTOP -1
+
+#define INTERFACE IDirectSoundNotify
+DECLARE_INTERFACE_(IDirectSoundNotify,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundNotify methods ***/
+ STDMETHOD(SetNotificationPositions)(THIS_ DWORD cPositionNotifies, LPCDSBPOSITIONNOTIFY lpcPositionNotifies) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundNotify_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundNotify_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundNotify methods ***/
+#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundNotify_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundNotify_AddRef(p) (p)->AddRef()
+#define IDirectSoundNotify_Release(p) (p)->Release()
+/*** IDirectSoundNotify methods ***/
+#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b)
+#endif
+
+
+/*****************************************************************************
+ * IDirectSound3DListener interface
+ */
+#define DS3DMODE_NORMAL 0x00000000
+#define DS3DMODE_HEADRELATIVE 0x00000001
+#define DS3DMODE_DISABLE 0x00000002
+
+#define DS3D_IMMEDIATE 0x00000000
+#define DS3D_DEFERRED 0x00000001
+
+#define DS3D_MINDISTANCEFACTOR FLT_MIN
+#define DS3D_MAXDISTANCEFACTOR FLT_MAX
+#define DS3D_DEFAULTDISTANCEFACTOR 1.0f
+
+#define DS3D_MINROLLOFFFACTOR 0.0f
+#define DS3D_MAXROLLOFFFACTOR 10.0f
+#define DS3D_DEFAULTROLLOFFFACTOR 1.0f
+
+#define DS3D_MINDOPPLERFACTOR 0.0f
+#define DS3D_MAXDOPPLERFACTOR 10.0f
+#define DS3D_DEFAULTDOPPLERFACTOR 1.0f
+
+#define DS3D_DEFAULTMINDISTANCE 1.0f
+#define DS3D_DEFAULTMAXDISTANCE 1000000000.0f
+
+#define DS3D_MINCONEANGLE 0
+#define DS3D_MAXCONEANGLE 360
+#define DS3D_DEFAULTCONEANGLE 360
+
+#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX
+
+typedef struct _DS3DLISTENER {
+ DWORD dwSize;
+ D3DVECTOR vPosition;
+ D3DVECTOR vVelocity;
+ D3DVECTOR vOrientFront;
+ D3DVECTOR vOrientTop;
+ D3DVALUE flDistanceFactor;
+ D3DVALUE flRolloffFactor;
+ D3DVALUE flDopplerFactor;
+} DS3DLISTENER, *LPDS3DLISTENER;
+
+typedef const DS3DLISTENER *LPCDS3DLISTENER;
+
+#define INTERFACE IDirectSound3DListener
+DECLARE_INTERFACE_(IDirectSound3DListener,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSound3DListener methods ***/
+ STDMETHOD(GetAllParameters)(THIS_ LPDS3DLISTENER lpListener) PURE;
+ STDMETHOD(GetDistanceFactor)(THIS_ LPD3DVALUE lpflDistanceFactor) PURE;
+ STDMETHOD(GetDopplerFactor)(THIS_ LPD3DVALUE lpflDopplerFactor) PURE;
+ STDMETHOD(GetOrientation)(THIS_ LPD3DVECTOR lpvOrientFront, LPD3DVECTOR lpvOrientTop) PURE;
+ STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE;
+ STDMETHOD(GetRolloffFactor)(THIS_ LPD3DVALUE lpflRolloffFactor) PURE;
+ STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE;
+ STDMETHOD(SetAllParameters)(THIS_ LPCDS3DLISTENER lpcListener, DWORD dwApply) PURE;
+ STDMETHOD(SetDistanceFactor)(THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE;
+ STDMETHOD(SetDopplerFactor)(THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE;
+ STDMETHOD(SetOrientation)(THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE;
+ STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(SetRolloffFactor)(THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE;
+ STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(CommitDeferredSettings)(THIS) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound3DListener_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSound3DListener_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSound3DListener methods ***/
+#define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a)
+#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a)
+#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b)
+#define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a)
+#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a)
+#define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a)
+#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b)
+#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b)
+#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b)
+#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b)
+#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d)
+#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound3DListener_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound3DListener_AddRef(p) (p)->AddRef()
+#define IDirectSound3DListener_Release(p) (p)->Release()
+/*** IDirectSound3DListener methods ***/
+#define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a)
+#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a)
+#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b)
+#define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a)
+#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a)
+#define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a)
+#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b)
+#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b)
+#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b)
+#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b)
+#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d)
+#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings()
+#endif
+
+
+/*****************************************************************************
+ * IDirectSound3DBuffer interface
+ */
+typedef struct _DS3DBUFFER {
+ DWORD dwSize;
+ D3DVECTOR vPosition;
+ D3DVECTOR vVelocity;
+ DWORD dwInsideConeAngle;
+ DWORD dwOutsideConeAngle;
+ D3DVECTOR vConeOrientation;
+ LONG lConeOutsideVolume;
+ D3DVALUE flMinDistance;
+ D3DVALUE flMaxDistance;
+ DWORD dwMode;
+} DS3DBUFFER, *LPDS3DBUFFER;
+
+typedef const DS3DBUFFER *LPCDS3DBUFFER;
+
+#define INTERFACE IDirectSound3DBuffer
+DECLARE_INTERFACE_(IDirectSound3DBuffer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSound3DBuffer methods ***/
+ STDMETHOD(GetAllParameters)(THIS_ LPDS3DBUFFER lpDs3dBuffer) PURE;
+ STDMETHOD(GetConeAngles)(THIS_ LPDWORD lpdwInsideConeAngle, LPDWORD lpdwOutsideConeAngle) PURE;
+ STDMETHOD(GetConeOrientation)(THIS_ LPD3DVECTOR lpvOrientation) PURE;
+ STDMETHOD(GetConeOutsideVolume)(THIS_ LPLONG lplConeOutsideVolume) PURE;
+ STDMETHOD(GetMaxDistance)(THIS_ LPD3DVALUE lpflMaxDistance) PURE;
+ STDMETHOD(GetMinDistance)(THIS_ LPD3DVALUE lpflMinDistance) PURE;
+ STDMETHOD(GetMode)(THIS_ LPDWORD lpwdMode) PURE;
+ STDMETHOD(GetPosition)(THIS_ LPD3DVECTOR lpvPosition) PURE;
+ STDMETHOD(GetVelocity)(THIS_ LPD3DVECTOR lpvVelocity) PURE;
+ STDMETHOD(SetAllParameters)(THIS_ LPCDS3DBUFFER lpcDs3dBuffer, DWORD dwApply) PURE;
+ STDMETHOD(SetConeAngles)(THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE;
+ STDMETHOD(SetConeOrientation)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(SetConeOutsideVolume)(THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE;
+ STDMETHOD(SetMaxDistance)(THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE;
+ STDMETHOD(SetMinDistance)(THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE;
+ STDMETHOD(SetMode)(THIS_ DWORD dwMode, DWORD dwApply) PURE;
+ STDMETHOD(SetPosition)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(SetVelocity)(THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSound3DBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSound3DBuffer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSound3DBuffer methods ***/
+#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b)
+#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a)
+#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a)
+#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a)
+#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a)
+#define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a)
+#define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a)
+#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a)
+#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b)
+#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c)
+#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d)
+#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b)
+#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b)
+#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b)
+#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b)
+#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d)
+#else
+/*** IUnknown methods ***/
+#define IDirectSound3DBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSound3DBuffer_AddRef(p) (p)->AddRef()
+#define IDirectSound3DBuffer_Release(p) (p)->Release()
+/*** IDirectSound3DBuffer methods ***/
+#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b)
+#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a)
+#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a)
+#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a)
+#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a)
+#define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a)
+#define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a)
+#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a)
+#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b)
+#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c)
+#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d)
+#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b)
+#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b)
+#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b)
+#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b)
+#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d)
+#endif
+
+/*****************************************************************************
+ * IKsPropertySet interface
+ */
+#ifndef _IKsPropertySet_
+#define _IKsPropertySet_
+
+typedef struct IKsPropertySet *LPKSPROPERTYSET;
+
+DEFINE_GUID(IID_IKsPropertySet,0x31EFAC30,0x515C,0x11D0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93);
+
+#define KSPROPERTY_SUPPORT_GET 1
+#define KSPROPERTY_SUPPORT_SET 2
+
+#define INTERFACE IKsPropertySet
+DECLARE_INTERFACE_(IKsPropertySet,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IKsPropertySet methods ***/
+ STDMETHOD(Get)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3,ULONG *px4) PURE;
+ STDMETHOD(Set)(THIS_ REFGUID rgid,ULONG x1,LPVOID p1,ULONG x2,LPVOID p2,ULONG x3) PURE;
+ STDMETHOD(QuerySupport)(THIS_ REFGUID rgid,ULONG x1,ULONG *px2) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IKsPropertySet_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IKsPropertySet_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IKsPropertySet_Release(p) (p)->lpVtbl->Release(p)
+/*** IKsPropertySet methods ***/
+#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)
+#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f)
+#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c)
+#else
+/*** IUnknown methods ***/
+#define IKsPropertySet_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IKsPropertySet_AddRef(p) (p)->AddRef()
+#define IKsPropertySet_Release(p) (p)->Release()
+/*** IKsPropertySet methods ***/
+#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g)
+#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f)
+#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c)
+#endif
+
+#endif /* _IKsPropertySet_ */
+
+/*****************************************************************************
+ * IDirectSoundFullDuplex interface
+ */
+#define INTERFACE IDirectSoundFullDuplex
+DECLARE_INTERFACE_(IDirectSoundFullDuplex,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectSoundFullDuplex methods ***/
+ STDMETHOD(Initialize)(THIS_ LPCGUID pCaptureGuid,LPCGUID pRendererGuid,LPCDSCBUFFERDESC lpDscBufferDesc,LPCDSBUFFERDESC lpDsBufferDesc,HWND hWnd,DWORD dwLevel,LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectSoundFullDuplex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectSoundFullDuplex_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectSoundFullDuplex_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectSoundFullDuplex methods ***/
+#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h)
+#else
+/*** IUnknown methods ***/
+#define IDirectSoundFullDuplex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDirectSoundFullDuplex_AddRef(p) (p)->AddRef()
+#define IDirectSoundFullDuplex_Release(p) (p)->Release()
+/*** IDirectSoundFullDuplex methods ***/
+#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __DSOUND_INCLUDED__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h
new file mode 100644
index 00000000..a37e21ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dsrole.h
@@ -0,0 +1,101 @@
+/*
+ * Directory Services definitions
+ *
+ * Copyright 2005 Paul Vriens
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DSROLE_H
+#define __WINE_DSROLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DSROLE_PRIMARY_DS_RUNNING 0x00000001
+#define DSROLE_PRIMARY_DS_MIXED_MODE 0x00000002
+#define DSROLE_UPGRADE_IN_PROGRESS 0x00000004
+#define DSROLE_PRIMARY_DOMAIN_GUID_PRESENT 0x01000000
+
+typedef enum _DSROLE_PRIMARY_DOMAIN_INFO_LEVEL
+{
+ DsRolePrimaryDomainInfoBasic = 1,
+ DsRoleUpgradeStatus,
+ DsRoleOperationState
+} DSROLE_PRIMARY_DOMAIN_INFO_LEVEL;
+
+typedef enum _DSROLE_MACHINE_ROLE
+{
+ DsRole_RoleStandaloneWorkstation = 0,
+ DsRole_RoleMemberWorkstation,
+ DsRole_RoleStandaloneServer,
+ DsRole_RoleMemberServer,
+ DsRole_RoleBackupDomainController,
+ DsRole_RolePrimaryDomainController
+} DSROLE_MACHINE_ROLE;
+
+typedef enum _DSROLE_SERVER_STATE
+{
+ DsRoleServerUnknown = 0,
+ DsRoleServerPrimary,
+ DsRoleServerBackup
+} DSROLE_SERVER_STATE;
+
+typedef enum _DSROLE_OPERATION_STATE
+{
+ DsRoleOperationIdle = 0,
+ DsRoleOperationActive,
+ DsRoleOperationNeedReboot
+} DSROLE_OPERATION_STATE;
+
+typedef struct _DSROLE_PRIMARY_DOMAIN_INFO_BASIC
+{
+ DSROLE_MACHINE_ROLE MachineRole;
+ ULONG Flags;
+ LPWSTR DomainNameFlat;
+ LPWSTR DomainNameDns;
+ LPWSTR DomainForestName;
+ GUID DomainGuid;
+} DSROLE_PRIMARY_DOMAIN_INFO_BASIC, *PDSROLE_PRIMARY_DOMAIN_INFO_BASIC;
+
+typedef struct _DSROLE_UPGRADE_STATUS_INFO
+{
+ ULONG OperationState;
+ DSROLE_SERVER_STATE PreviousServerState;
+} DSROLE_UPGRADE_STATUS_INFO, *PDSROLE_UPGRADE_STATUS_INFO;
+
+typedef struct _DSROLE_OPERATION_STATE_INFO
+{
+ DSROLE_OPERATION_STATE OperationState;
+} DSROLE_OPERATION_STATE_INFO, *PDSROLE_OPERATION_STATE_INFO;
+
+VOID WINAPI DsRoleFreeMemory(IN PVOID Buffer);
+DWORD WINAPI DsRoleGetPrimaryDomainInformation(IN LPCWSTR lpServer OPTIONAL, IN DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, OUT PBYTE *Buffer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DSROLE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h
new file mode 100644
index 00000000..7ff75271
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dvdmedia.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2008 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __DVDMEDIA_H__
+#define __DVDMEDIA_H__
+
+#define AMCONTROL_USED 0x00000001
+#define AMCONTROL_PAD_TO_4x3 0x00000002
+#define AMCONTROL_PAD_TO_16x9 0x00000004
+
+typedef struct tagVIDEOINFOHEADER2 {
+ RECT rcSource;
+ RECT rcTarget;
+ DWORD dwBitRate;
+ DWORD dwBitErrorRate;
+ REFERENCE_TIME AvgTimePerFrame;
+ DWORD dwInterlaceFlags;
+ DWORD dwCopyProtectFlags;
+ DWORD dwPictAspectRatioX;
+ DWORD dwPictAspectRatioY;
+ union {
+ DWORD dwControlFlags;
+ DWORD dwReserved1;
+ } DUMMYUNIONNAME;
+ DWORD dwReserved2;
+ BITMAPINFOHEADER bmiHeader;
+} VIDEOINFOHEADER2;
+
+typedef struct tagMPEG2VIDEOINFO {
+ VIDEOINFOHEADER2 hdr;
+ DWORD dwStartTimeCode;
+ DWORD cbSequenceHeader;
+ DWORD dwProfile;
+ DWORD dwLevel;
+ DWORD dwFlags;
+ DWORD dwSequenceHeader[1];
+} MPEG2VIDEOINFO;
+
+#endif /* __DVDMEDIA_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h
new file mode 100644
index 00000000..48a5e601
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwmapi.h
@@ -0,0 +1,137 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DWMAPI_H
+#define __WINE_DWMAPI_H
+
+#include "wtypes.h"
+#include "uxtheme.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef DWMAPI
+# define DWMAPI STDAPI
+# define DWMAPI_(type) STDAPI_(type)
+#endif
+
+DECLARE_HANDLE(HTHUMBNAIL);
+typedef HTHUMBNAIL *PHTHUMBNAIL;
+
+#include <pshpack1.h>
+
+typedef ULONGLONG DWM_FRAME_COUNT;
+typedef ULONGLONG QPC_TIME;
+
+typedef struct _UNSIGNED_RATIO {
+ UINT32 uiNumerator;
+ UINT32 uiDenominator;
+} UNSIGNED_RATIO;
+
+typedef struct _DWM_TIMING_INFO {
+ UINT32 cbSize;
+ UNSIGNED_RATIO rateRefresh;
+ QPC_TIME qpcRefreshPeriod;
+ UNSIGNED_RATIO rateCompose;
+ QPC_TIME qpcVBlank;
+ DWM_FRAME_COUNT cRefresh;
+ UINT cDXRefresh;
+ QPC_TIME qpcCompose;
+ DWM_FRAME_COUNT cFrame;
+ UINT cDXPresent;
+ DWM_FRAME_COUNT cRefreshFrame;
+ DWM_FRAME_COUNT cFrameSubmitted;
+ UINT cDXPresentSubmitted;
+ DWM_FRAME_COUNT cFrameConfirmed;
+ UINT cDXPresentConfirmed;
+ DWM_FRAME_COUNT cRefreshConfirmed;
+ UINT cDXRefreshConfirmed;
+ DWM_FRAME_COUNT cFramesLate;
+ UINT cFramesOutstanding;
+ DWM_FRAME_COUNT cFrameDisplayed;
+ QPC_TIME qpcFrameDisplayed;
+ DWM_FRAME_COUNT cRefreshFrameDisplayed;
+ DWM_FRAME_COUNT cFrameComplete;
+ QPC_TIME qpcFrameComplete;
+ DWM_FRAME_COUNT cFramePending;
+ QPC_TIME qpcFramePending;
+ DWM_FRAME_COUNT cFramesDisplayed;
+ DWM_FRAME_COUNT cFramesComplete;
+ DWM_FRAME_COUNT cFramesPending;
+ DWM_FRAME_COUNT cFramesAvailable;
+ DWM_FRAME_COUNT cFramesDropped;
+ DWM_FRAME_COUNT cFramesMissed;
+ DWM_FRAME_COUNT cRefreshNextDisplayed;
+ DWM_FRAME_COUNT cRefreshNextPresented;
+ DWM_FRAME_COUNT cRefreshesDisplayed;
+ DWM_FRAME_COUNT cRefreshesPresented;
+ DWM_FRAME_COUNT cRefreshStarted;
+ ULONGLONG cPixelsReceived;
+ ULONGLONG cPixelsDrawn;
+ DWM_FRAME_COUNT cBuffersEmpty;
+} DWM_TIMING_INFO;
+
+typedef struct _MilMatrix3x2D
+{
+ DOUBLE S_11;
+ DOUBLE S_12;
+ DOUBLE S_21;
+ DOUBLE S_22;
+ DOUBLE DX;
+ DOUBLE DY;
+} MilMatrix3x2D;
+
+#include <poppack.h>
+
+#define DWM_BB_ENABLE 0x00000001
+#define DWM_BB_BLURREGION 0x00000002
+#define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004
+
+typedef struct _DWM_BLURBEHIND
+{
+ DWORD dwFlags;
+ BOOL fEnable;
+ HRGN hRgnBlur;
+ BOOL fTransitionOnMaximized;
+} DWM_BLURBEHIND, *PDWM_BLURBEHIND;
+
+DWMAPI DwmDefWindowProc(HWND, UINT, WPARAM, LPARAM, LRESULT*);
+DWMAPI DwmEnableBlurBehindWindow(HWND, const DWM_BLURBEHIND *);
+DWMAPI DwmEnableComposition(UINT);
+DWMAPI DwmEnableMMCSS(BOOL);
+DWMAPI DwmExtendFrameIntoClientArea(HWND,const MARGINS*);
+DWMAPI DwmGetColorizationColor(DWORD*,BOOL);
+DWMAPI DwmGetCompositionTimingInfo(HWND,DWM_TIMING_INFO*);
+DWMAPI DwmIsCompositionEnabled(BOOL*);
+DWMAPI DwmRegisterThumbnail(HWND, HWND, PHTHUMBNAIL);
+DWMAPI DwmSetWindowAttribute(HWND, DWORD, LPCVOID, DWORD);
+DWMAPI DwmUnregisterThumbnail(HTHUMBNAIL);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_DWMAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl
new file mode 100644
index 00000000..6e684ec3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite.idl
@@ -0,0 +1,1420 @@
+/*
+ * Copyright 2012 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "dcommon.h";
+
+interface IDWriteFactory;
+interface IDWriteFontCollection;
+interface IDWriteFontFamily;
+interface IDWriteFontFace;
+interface IDWriteInlineObject;
+
+interface ID2D1SimplifiedGeometrySink;
+typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink;
+
+cpp_quote("#ifndef _WINDEF_")
+/* already defined in windef.h but needed for WIDL */
+typedef void *HMONITOR;
+cpp_quote("#endif /* _WINDEF_ */")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetGlyphIndices")
+cpp_quote("#endif")
+
+typedef enum DWRITE_FACTORY_TYPE
+{
+ DWRITE_FACTORY_TYPE_SHARED,
+ DWRITE_FACTORY_TYPE_ISOLATED
+} DWRITE_FACTORY_TYPE;
+
+typedef enum DWRITE_FONT_FILE_TYPE
+{
+ DWRITE_FONT_FILE_TYPE_UNKNOWN,
+ DWRITE_FONT_FILE_TYPE_CFF,
+ DWRITE_FONT_FILE_TYPE_TRUETYPE,
+ DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION,
+ DWRITE_FONT_FILE_TYPE_TYPE1_PFM,
+ DWRITE_FONT_FILE_TYPE_TYPE1_PFB,
+ DWRITE_FONT_FILE_TYPE_VECTOR,
+ DWRITE_FONT_FILE_TYPE_BITMAP
+} DWRITE_FONT_FILE_TYPE;
+
+typedef enum DWRITE_FONT_FACE_TYPE
+{
+ DWRITE_FONT_FACE_TYPE_CFF,
+ DWRITE_FONT_FACE_TYPE_TRUETYPE,
+ DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION,
+ DWRITE_FONT_FACE_TYPE_TYPE1,
+ DWRITE_FONT_FACE_TYPE_VECTOR,
+ DWRITE_FONT_FACE_TYPE_BITMAP,
+ DWRITE_FONT_FACE_TYPE_UNKNOWN
+} DWRITE_FONT_FACE_TYPE;
+
+typedef enum DWRITE_FONT_WEIGHT
+{
+ DWRITE_FONT_WEIGHT_THIN = 100,
+ DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200,
+ DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200,
+ DWRITE_FONT_WEIGHT_LIGHT = 300,
+ DWRITE_FONT_WEIGHT_NORMAL = 400,
+ DWRITE_FONT_WEIGHT_REGULAR = 400,
+ DWRITE_FONT_WEIGHT_MEDIUM = 500,
+ DWRITE_FONT_WEIGHT_DEMI_BOLD = 600,
+ DWRITE_FONT_WEIGHT_SEMI_BOLD = 600,
+ DWRITE_FONT_WEIGHT_BOLD = 700,
+ DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800,
+ DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800,
+ DWRITE_FONT_WEIGHT_BLACK = 900,
+ DWRITE_FONT_WEIGHT_HEAVY = 900,
+ DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950,
+ DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950
+} DWRITE_FONT_WEIGHT;
+
+typedef enum DWRITE_FONT_STRETCH
+{
+ DWRITE_FONT_STRETCH_UNDEFINED = 0,
+ DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1,
+ DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2,
+ DWRITE_FONT_STRETCH_CONDENSED = 3,
+ DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4,
+ DWRITE_FONT_STRETCH_NORMAL = 5,
+ DWRITE_FONT_STRETCH_MEDIUM = 5,
+ DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6,
+ DWRITE_FONT_STRETCH_EXPANDED = 7,
+ DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8,
+ DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9
+} DWRITE_FONT_STRETCH;
+
+typedef enum DWRITE_FONT_STYLE
+{
+ DWRITE_FONT_STYLE_NORMAL,
+ DWRITE_FONT_STYLE_OBLIQUE,
+ DWRITE_FONT_STYLE_ITALIC
+} DWRITE_FONT_STYLE;
+
+typedef enum DWRITE_INFORMATIONAL_STRING_ID
+{
+ DWRITE_INFORMATIONAL_STRING_NONE,
+ DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE,
+ DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS,
+ DWRITE_INFORMATIONAL_STRING_TRADEMARK,
+ DWRITE_INFORMATIONAL_STRING_MANUFACTURER,
+ DWRITE_INFORMATIONAL_STRING_DESIGNER,
+ DWRITE_INFORMATIONAL_STRING_DESIGNER_URL,
+ DWRITE_INFORMATIONAL_STRING_DESCRIPTION,
+ DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL,
+ DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION,
+ DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL,
+ DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES,
+ DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT
+} DWRITE_INFORMATIONAL_STRING_ID;
+
+typedef enum DWRITE_FONT_SIMULATIONS
+{
+ DWRITE_FONT_SIMULATIONS_NONE = 0x0000,
+ DWRITE_FONT_SIMULATIONS_BOLD = 0x0001,
+ DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002
+} DWRITE_FONT_SIMULATIONS;
+
+typedef enum DWRITE_PIXEL_GEOMETRY
+{
+ DWRITE_PIXEL_GEOMETRY_FLAT,
+ DWRITE_PIXEL_GEOMETRY_RGB,
+ DWRITE_PIXEL_GEOMETRY_BGR
+} DWRITE_PIXEL_GEOMETRY;
+
+typedef enum DWRITE_RENDERING_MODE
+{
+ DWRITE_RENDERING_MODE_DEFAULT,
+ DWRITE_RENDERING_MODE_ALIASED,
+ DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC,
+ DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL,
+ DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL,
+ DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC,
+ DWRITE_RENDERING_MODE_OUTLINE
+} DWRITE_RENDERING_MODE;
+
+typedef enum DWRITE_TEXT_ALIGNMENT
+{
+ DWRITE_TEXT_ALIGNMENT_LEADING,
+ DWRITE_TEXT_ALIGNMENT_TRAILING,
+ DWRITE_TEXT_ALIGNMENT_CENTER,
+ DWRITE_TEXT_ALIGNMENT_JUSTIFIED
+} DWRITE_TEXT_ALIGNMENT;
+
+typedef enum DWRITE_PARAGRAPH_ALIGNMENT
+{
+ DWRITE_PARAGRAPH_ALIGNMENT_NEAR,
+ DWRITE_PARAGRAPH_ALIGNMENT_FAR,
+ DWRITE_PARAGRAPH_ALIGNMENT_CENTER
+} DWRITE_PARAGRAPH_ALIGNMENT;
+
+typedef enum DWRITE_WORD_WRAPPING
+{
+ DWRITE_WORD_WRAPPING_WRAP,
+ DWRITE_WORD_WRAPPING_NO_WRAP
+} DWRITE_WORD_WRAPPING;
+
+typedef enum DWRITE_READING_DIRECTION
+{
+ DWRITE_READING_DIRECTION_LEFT_TO_RIGHT,
+ DWRITE_READING_DIRECTION_RIGHT_TO_LEFT
+} DWRITE_READING_DIRECTION;
+
+typedef enum DWRITE_FLOW_DIRECTION
+{
+ DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM
+} DWRITE_FLOW_DIRECTION;
+
+typedef enum DWRITE_TRIMMING_GRANULARITY
+{
+ DWRITE_TRIMMING_GRANULARITY_NONE,
+ DWRITE_TRIMMING_GRANULARITY_CHARACTER,
+ DWRITE_TRIMMING_GRANULARITY_WORD
+} DWRITE_TRIMMING_GRANULARITY;
+
+typedef enum DWRITE_BREAK_CONDITION
+{
+ DWRITE_BREAK_CONDITION_NEUTRAL,
+ DWRITE_BREAK_CONDITION_CAN_BREAK,
+ DWRITE_BREAK_CONDITION_MAY_NOT_BREAK,
+ DWRITE_BREAK_CONDITION_MUST_BREAK
+} DWRITE_BREAK_CONDITION;
+
+typedef enum DWRITE_LINE_SPACING_METHOD
+{
+ DWRITE_LINE_SPACING_METHOD_DEFAULT,
+ DWRITE_LINE_SPACING_METHOD_UNIFORM
+} DWRITE_LINE_SPACING_METHOD;
+
+typedef enum DWRITE_FONT_FEATURE_TAG
+{
+ DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661, /* 'afrc' */
+ DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263, /* 'c2pc' */
+ DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263, /* 'c2sc' */
+ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163, /* 'calt' */
+ DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163, /* 'case' */
+ DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, /* 'ccmp' */
+ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63, /* 'clig' */
+ DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063, /* 'cpsp' */
+ DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363, /* 'cswh' */
+ DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563, /* 'curs' */
+ DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664, /* 'dflt' */
+ DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64, /* 'dlig' */
+ DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865, /* 'expt' */
+ DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266, /* 'frac' */
+ DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766, /* 'fwid' */
+ DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168, /* 'half' */
+ DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168, /* 'haln' */
+ DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168, /* 'halt' */
+ DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968, /* 'hist' */
+ DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68, /* 'hkna' */
+ DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68, /* 'hlig' */
+ DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768, /* 'hwid' */
+ DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68, /* 'hojo' */
+ DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a, /* 'jp04' */
+ DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a, /* 'jp78' */
+ DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a, /* 'jp83' */
+ DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a, /* 'jp90' */
+ DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b, /* 'kern' */
+ DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c, /* 'liga' */
+ DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c, /* 'lnum' */
+ DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c, /* 'locl' */
+ DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d, /* 'mark' */
+ DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d, /* 'mgrk' */
+ DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d, /* 'mkmk' */
+ DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e, /* 'nalt' */
+ DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e, /* 'nlck' */
+ DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f, /* 'onum' */
+ DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f, /* 'ordn' */
+ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170, /* 'palt' */
+ DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370, /* 'pcap' */
+ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70, /* 'pnum' */
+ DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770, /* 'pwid' */
+ DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771, /* 'qwid' */
+ DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72, /* 'rlig' */
+ DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572, /* 'ruby' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173, /* 'salt' */
+ DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973, /* 'sinf' */
+ DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73, /* 'smcp' */
+ DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73, /* 'smpl' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373, /* 'ss01' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373, /* 'ss02' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373, /* 'ss03' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373, /* 'ss04' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373, /* 'ss05' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373, /* 'ss06' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373, /* 'ss07' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373, /* 'ss08' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373, /* 'ss09' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373, /* 'ss10' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373, /* 'ss11' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373, /* 'ss12' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373, /* 'ss13' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373, /* 'ss14' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373, /* 'ss15' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373, /* 'ss16' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373, /* 'ss17' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373, /* 'ss18' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373, /* 'ss19' */
+ DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373, /* 'ss20' */
+ DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573, /* 'subs' */
+ DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573, /* 'sups' */
+ DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773, /* 'swsh' */
+ DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974, /* 'titl' */
+ DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74, /* 'tnam' */
+ DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74, /* 'tnum' */
+ DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274, /* 'trad' */
+ DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774, /* 'twid' */
+ DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75, /* 'unic' */
+ DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a, /* 'zero' */
+} DWRITE_FONT_FEATURE_TAG;
+
+typedef enum DWRITE_SCRIPT_SHAPES
+{
+ DWRITE_SCRIPT_SHAPES_DEFAULT = 0,
+ DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1
+} DWRITE_SCRIPT_SHAPES;
+
+typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD
+{
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL,
+ DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL
+} DWRITE_NUMBER_SUBSTITUTION_METHOD;
+
+typedef enum DWRITE_TEXTURE_TYPE
+{
+ DWRITE_TEXTURE_ALIASED_1x1,
+ DWRITE_TEXTURE_CLEARTYPE_3x1
+} DWRITE_TEXTURE_TYPE;
+
+typedef struct DWRITE_FONT_METRICS
+{
+ UINT16 designUnitsPerEm;
+ UINT16 ascent;
+ UINT16 descent;
+ INT16 lineGap;
+ UINT16 capHeight;
+ UINT16 xHeight;
+ INT16 underlinePosition;
+ UINT16 underlineThickness;
+ INT16 strikethroughPosition;
+ UINT16 strikethroughThickness;
+} DWRITE_FONT_METRICS;
+
+typedef struct DWRITE_GLYPH_METRICS
+{
+ INT32 leftSideBearing;
+ UINT32 advanceWidth;
+ INT32 rightSideBearing;
+ INT32 topSideBearing;
+ UINT32 advanceHeight;
+ INT32 bottomSideBearing;
+ INT32 verticalOriginY;
+} DWRITE_GLYPH_METRICS;
+
+typedef struct DWRITE_GLYPH_OFFSET
+{
+ FLOAT advanceOffset;
+ FLOAT ascenderOffset;
+} DWRITE_GLYPH_OFFSET;
+
+typedef struct DWRITE_MATRIX
+{
+ FLOAT m11;
+ FLOAT m12;
+ FLOAT m21;
+ FLOAT m22;
+ FLOAT dx;
+ FLOAT dy;
+} DWRITE_MATRIX;
+
+typedef struct DWRITE_TRIMMING
+{
+ DWRITE_TRIMMING_GRANULARITY granularity;
+ UINT32 delimiter;
+ UINT32 delimiterCount;
+} DWRITE_TRIMMING;
+
+typedef struct DWRITE_GLYPH_RUN
+{
+ IDWriteFontFace* fontFace;
+ FLOAT fontEmSize;
+ UINT32 glyphCount;
+ UINT16 const* glyphIndices;
+ FLOAT const* glyphAdvances;
+ DWRITE_GLYPH_OFFSET const* glyphOffsets;
+ BOOL isSideways;
+ UINT32 bidiLevel;
+} DWRITE_GLYPH_RUN;
+
+typedef struct DWRITE_GLYPH_RUN_DESCRIPTION
+{
+ WCHAR const* localeName;
+ WCHAR const* string;
+ UINT32 stringLength;
+ UINT16 const* clusterMap;
+ UINT32 textPosition;
+} DWRITE_GLYPH_RUN_DESCRIPTION;
+
+typedef struct DWRITE_UNDERLINE
+{
+ FLOAT width;
+ FLOAT thickness;
+ FLOAT offset;
+ FLOAT runHeight;
+ DWRITE_READING_DIRECTION readingDirection;
+ DWRITE_FLOW_DIRECTION flowDirection;
+ WCHAR const* localeName;
+ DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_UNDERLINE;
+
+typedef struct DWRITE_STRIKETHROUGH
+{
+ FLOAT width;
+ FLOAT thickness;
+ FLOAT offset;
+ DWRITE_READING_DIRECTION readingDirection;
+ DWRITE_FLOW_DIRECTION flowDirection;
+ WCHAR const* localeName;
+ DWRITE_MEASURING_MODE measuringMode;
+} DWRITE_STRIKETHROUGH;
+
+typedef struct DWRITE_INLINE_OBJECT_METRICS
+{
+ FLOAT width;
+ FLOAT height;
+ FLOAT baseline;
+ BOOL supportsSideways;
+} DWRITE_INLINE_OBJECT_METRICS;
+
+typedef struct DWRITE_OVERHANG_METRICS
+{
+ FLOAT left;
+ FLOAT top;
+ FLOAT right;
+ FLOAT bottom;
+} DWRITE_OVERHANG_METRICS;
+
+typedef struct DWRITE_FONT_FEATURE
+{
+ DWRITE_FONT_FEATURE_TAG nameTag;
+ UINT32 parameter;
+} DWRITE_FONT_FEATURE;
+
+typedef struct DWRITE_TEXT_RANGE
+{
+ UINT32 startPosition;
+ UINT32 length;
+} DWRITE_TEXT_RANGE;
+
+typedef struct DWRITE_LINE_METRICS
+{
+ UINT32 length;
+ UINT32 trailingWhitespaceLength;
+ UINT32 newlineLength;
+ FLOAT height;
+ FLOAT baseline;
+ BOOL isTrimmed;
+} DWRITE_LINE_METRICS;
+
+typedef struct DWRITE_TEXT_METRICS
+{
+ FLOAT left;
+ FLOAT top;
+ FLOAT width;
+ FLOAT widthIncludingTrailingWhitespace;
+ FLOAT height;
+ FLOAT layoutWidth;
+ FLOAT layoutHeight;
+ UINT32 maxBidiReorderingDepth;
+ UINT32 lineCount;
+} DWRITE_TEXT_METRICS;
+
+typedef struct DWRITE_CLUSTER_METRICS
+{
+ FLOAT width;
+ UINT16 length;
+ UINT16 canWrapLineAfter : 1;
+ UINT16 isWhitespace : 1;
+ UINT16 isNewline : 1;
+ UINT16 isSoftHyphen : 1;
+ UINT16 isRightToLeft : 1;
+ UINT16 padding : 11;
+} DWRITE_CLUSTER_METRICS;
+
+typedef struct DWRITE_HIT_TEST_METRICS
+{
+ UINT32 textPosition;
+ UINT32 length;
+ FLOAT left;
+ FLOAT top;
+ FLOAT width;
+ FLOAT height;
+ UINT32 bidiLevel;
+ BOOL isText;
+ BOOL isTrimmed;
+} DWRITE_HIT_TEST_METRICS;
+
+typedef struct DWRITE_SCRIPT_ANALYSIS
+{
+ UINT16 script;
+ DWRITE_SCRIPT_SHAPES shapes;
+} DWRITE_SCRIPT_ANALYSIS;
+
+typedef struct DWRITE_LINE_BREAKPOINT
+{
+ UINT8 breakConditionBefore : 2;
+ UINT8 breakConditionAfter : 2;
+ UINT8 isWhitespace : 1;
+ UINT8 isSoftHyphen : 1;
+ UINT8 padding : 2;
+} DWRITE_LINE_BREAKPOINT;
+
+typedef struct DWRITE_TYPOGRAPHIC_FEATURES
+{
+ DWRITE_FONT_FEATURE* features;
+ UINT32 featureCount;
+} DWRITE_TYPOGRAPHIC_FEATURES;
+
+typedef struct DWRITE_SHAPING_TEXT_PROPERTIES
+{
+ UINT16 isShapedAlone : 1;
+ UINT16 reserved : 15;
+} DWRITE_SHAPING_TEXT_PROPERTIES;
+
+typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES
+{
+ UINT16 justification : 4;
+ UINT16 isClusterStart : 1;
+ UINT16 isDiacritic : 1;
+ UINT16 isZeroWidthSpace : 1;
+ UINT16 reserved : 9;
+} DWRITE_SHAPING_GLYPH_PROPERTIES;
+
+[
+local,
+object,
+uuid(6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0)
+]
+interface IDWriteFontFileStream : IUnknown
+{
+ HRESULT ReadFileFragment(
+ void const **fragment_start,
+ UINT64 offset,
+ UINT64 fragment_size,
+ void **fragment_context);
+
+ void ReleaseFileFragment(void *fragment_context);
+ HRESULT GetFileSize(UINT64 *size);
+ HRESULT GetLastWriteTime(UINT64 *last_writetime);
+}
+
+[
+local,
+object,
+uuid(727cad4e-d6af-4c9e-8a08-d695b11caa49)
+]
+interface IDWriteFontFileLoader : IUnknown
+{
+ HRESULT CreateStreamFromKey(
+ void const *key,
+ UINT32 key_size,
+ IDWriteFontFileStream **stream);
+}
+
+[
+local,
+object,
+uuid(739d886a-cef5-47dc-8769-1a8b41bebbb0)
+]
+interface IDWriteFontFile : IUnknown
+{
+ HRESULT GetReferenceKey(
+ void const **key,
+ UINT32 *key_size);
+
+ HRESULT GetLoader(IDWriteFontFileLoader **loader);
+
+ HRESULT Analyze(
+ BOOL *is_supported_fonttype,
+ DWRITE_FONT_FILE_TYPE *file_type,
+ DWRITE_FONT_FACE_TYPE *face_type,
+ UINT32 *faces_num);
+}
+
+[
+local,
+object,
+uuid(72755049-5ff7-435d-8348-4be97cfa6c7c)
+]
+interface IDWriteFontFileEnumerator : IUnknown
+{
+ HRESULT MoveNext(BOOL *has_current_file);
+ HRESULT GetCurrentFontFile(IDWriteFontFile **font_file);
+};
+
+[
+local,
+object,
+uuid(cca920e4-52f0-492b-bfa8-29c72ee0a468)
+]
+interface IDWriteFontCollectionLoader : IUnknown
+{
+ HRESULT CreateEnumeratorFromKey(
+ IDWriteFactory* factory,
+ void const* key,
+ UINT32 key_size,
+ IDWriteFontFileEnumerator **enumerator);
+}
+
+[
+local,
+object,
+uuid(08256209-099a-4b34-b86d-c22b110e7771)
+]
+interface IDWriteLocalizedStrings : IUnknown
+{
+ UINT32 GetCount();
+
+ HRESULT FindLocaleName(
+ WCHAR const *locale_name,
+ UINT32 *index,
+ BOOL *exists);
+
+ HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length);
+ HRESULT GetLocaleName(UINT32 index, WCHAR *locale_name, UINT32 size);
+ HRESULT GetStringLength(UINT32 index, UINT32 *length);
+ HRESULT GetString(UINT32 index, WCHAR *buffer, UINT32 size);
+}
+
+[
+local,
+object,
+uuid(2f0da53a-2add-47cd-82ee-d9ec34688e75)
+]
+interface IDWriteRenderingParams : IUnknown
+{
+ FLOAT GetGamma();
+ FLOAT GetEnhancedContrast();
+ FLOAT GetClearTypeLevel();
+ DWRITE_PIXEL_GEOMETRY GetPixelGeometry();
+ DWRITE_RENDERING_MODE GetRenderingMode();
+}
+
+[
+local,
+object,
+uuid(5f49804d-7024-4d43-bfa9-d25984f53849)
+]
+interface IDWriteFontFace : IUnknown
+{
+ DWRITE_FONT_FACE_TYPE GetType();
+ HRESULT GetFiles(UINT32 *number_of_files, IDWriteFontFile **fontfiles);
+ UINT32 GetIndex();
+ DWRITE_FONT_SIMULATIONS GetSimulations();
+ BOOL IsSymbolFont();
+ void GetMetrics(DWRITE_FONT_METRICS *metrics);
+ UINT16 GetGlyphCount();
+
+ HRESULT GetDesignGlyphMetrics(
+ UINT16 const *glyph_indices,
+ UINT32 glyph_count,
+ DWRITE_GLYPH_METRICS *metrics,
+ [defaultvalue(FALSE)] BOOL is_sideways);
+
+ HRESULT GetGlyphIndices(
+ UINT32 const *codepoints,
+ UINT32 count,
+ UINT16 *glyph_indices);
+
+ HRESULT TryGetFontTable(
+ UINT32 table_tag,
+ const void **table_data,
+ UINT32 *table_size,
+ void **context,
+ BOOL *exists);
+
+ void ReleaseFontTable(void *table_context);
+
+ HRESULT GetGlyphRunOutline(
+ FLOAT emSize,
+ UINT16 const *glyph_indices,
+ FLOAT const* glyph_advances,
+ DWRITE_GLYPH_OFFSET const *glyph_offsets,
+ UINT32 glyph_count,
+ BOOL is_sideways,
+ BOOL is_rtl,
+ IDWriteGeometrySink *geometrysink);
+
+ HRESULT GetRecommendedRenderingMode(
+ FLOAT emSize,
+ FLOAT pixels_per_dip,
+ DWRITE_MEASURING_MODE mode,
+ IDWriteRenderingParams* params,
+ DWRITE_RENDERING_MODE* rendering_mode);
+
+ HRESULT GetGdiCompatibleMetrics(
+ FLOAT emSize,
+ FLOAT pixels_per_dip,
+ DWRITE_MATRIX const *transform,
+ DWRITE_FONT_METRICS *metrics);
+
+ HRESULT GetGdiCompatibleGlyphMetrics(
+ FLOAT emSize,
+ FLOAT pixels_per_dip,
+ DWRITE_MATRIX const *transform,
+ BOOL use_gdi_natural,
+ UINT16 const *glyph_indices,
+ UINT32 glyph_count,
+ DWRITE_GLYPH_METRICS *metrics,
+ [defaultvalue(FALSE)] BOOL is_sideways);
+}
+
+[
+local,
+object,
+uuid(acd16696-8c14-4f5d-877e-fe3fc1d32737)
+]
+interface IDWriteFont : IUnknown
+{
+ HRESULT GetFontFamily(IDWriteFontFamily **family);
+ DWRITE_FONT_WEIGHT GetWeight();
+ DWRITE_FONT_STRETCH GetStretch();
+ DWRITE_FONT_STYLE GetStyle();
+ BOOL IsSymbolFont();
+
+ HRESULT GetFaceNames(IDWriteLocalizedStrings **names);
+ HRESULT GetInformationalStrings(
+ DWRITE_INFORMATIONAL_STRING_ID stringid,
+ IDWriteLocalizedStrings **strings,
+ BOOL *exists);
+
+ DWRITE_FONT_SIMULATIONS GetSimulations();
+ void GetMetrics(DWRITE_FONT_METRICS *metrics);
+ HRESULT HasCharacter(UINT32 value, BOOL *exists);
+ HRESULT CreateFontFace(IDWriteFontFace **face);
+}
+
+[
+local,
+object,
+uuid(1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb)
+]
+interface IDWriteFontList : IUnknown
+{
+ HRESULT GetFontCollection(IDWriteFontCollection **collection);
+ UINT32 GetFontCount();
+ HRESULT GetFont(UINT32 index, IDWriteFont **font);
+}
+
+[
+local,
+object,
+uuid(da20d8ef-812a-4c43-9802-62ec4abd7add)
+]
+interface IDWriteFontFamily : IDWriteFontList
+{
+ HRESULT GetFamilyNames(IDWriteLocalizedStrings **names);
+
+ HRESULT GetFirstMatchingFont(
+ DWRITE_FONT_WEIGHT weight,
+ DWRITE_FONT_STRETCH stretch,
+ DWRITE_FONT_STYLE style,
+ IDWriteFont **font);
+
+ HRESULT GetMatchingFonts(
+ DWRITE_FONT_WEIGHT weight,
+ DWRITE_FONT_STRETCH stretch,
+ DWRITE_FONT_STYLE style,
+ IDWriteFontList **fonts);
+}
+
+[
+local,
+object,
+uuid(a84cee02-3eea-4eee-a827-87c1a02a0fcc)
+]
+interface IDWriteFontCollection : IUnknown
+{
+ UINT32 GetFontFamilyCount();
+ HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily **family);
+ HRESULT FindFamilyName(WCHAR const *name, UINT32 *index, BOOL *exists);
+ HRESULT GetFontFromFontFace(IDWriteFontFace *face, IDWriteFont **font);
+}
+
+[
+local,
+object,
+uuid(eaf3a2da-ecf4-4d24-b644-b34f6842024b)
+]
+interface IDWritePixelSnapping : IUnknown
+{
+ HRESULT IsPixelSnappingDisabled(
+ void *client_drawingcontext,
+ BOOL *disabled);
+
+ HRESULT GetCurrentTransform(
+ void *client_drawingcontext,
+ DWRITE_MATRIX *transform);
+
+ HRESULT GetPixelsPerDip(
+ void *client_drawingcontext,
+ FLOAT *pixels_per_dip);
+}
+
+[
+local,
+object,
+uuid(ef8a8135-5cc6-45fe-8825-c5a0724eb819)
+]
+interface IDWriteTextRenderer : IDWritePixelSnapping
+{
+ HRESULT DrawGlyphRun(
+ void* client_drawingcontext,
+ FLOAT baselineOriginX,
+ FLOAT baselineOriginY,
+ DWRITE_MEASURING_MODE mode,
+ DWRITE_GLYPH_RUN const *glyph_run,
+ DWRITE_GLYPH_RUN_DESCRIPTION const *run_descr,
+ IUnknown *drawing_effect);
+
+ HRESULT DrawUnderline(
+ void *client_drawingcontext,
+ FLOAT baselineOriginX,
+ FLOAT baselineOriginY,
+ DWRITE_UNDERLINE const* underline,
+ IUnknown *drawing_effect);
+
+ HRESULT DrawStrikethrough(
+ void *client_drawingcontext,
+ FLOAT baselineOriginX,
+ FLOAT baselineOriginY,
+ DWRITE_STRIKETHROUGH const* strikethrough,
+ IUnknown *drawing_effect);
+
+ HRESULT DrawInlineObject(
+ void *client_drawingcontext,
+ FLOAT originX,
+ FLOAT originY,
+ IDWriteInlineObject *object,
+ BOOL is_sideways,
+ BOOL is_rtl,
+ IUnknown *drawing_effect);
+}
+
+[
+local,
+object,
+uuid(8339fde3-106f-47ab-8373-1c6295eb10b3)
+]
+interface IDWriteInlineObject : IUnknown
+{
+ HRESULT Draw(
+ void* client_drawingontext,
+ IDWriteTextRenderer* renderer,
+ FLOAT originX,
+ FLOAT originY,
+ BOOL is_sideways,
+ BOOL is_rtl,
+ IUnknown *drawing_effect);
+
+ HRESULT GetMetrics(DWRITE_INLINE_OBJECT_METRICS *metrics);
+ HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);
+ HRESULT GetBreakConditions(
+ DWRITE_BREAK_CONDITION* condition_before,
+ DWRITE_BREAK_CONDITION* condition_after);
+}
+
+[
+local,
+object,
+uuid(9c906818-31d7-4fd3-a151-7c5e225db55a)
+]
+interface IDWriteTextFormat : IUnknown
+{
+ HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT alignment);
+ HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT alignment);
+ HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wrapping);
+ HRESULT SetReadingDirection(DWRITE_READING_DIRECTION direction);
+ HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION direction);
+ HRESULT SetIncrementalTabStop(FLOAT tabstop);
+ HRESULT SetTrimming(DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign);
+ HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline);
+ DWRITE_TEXT_ALIGNMENT GetTextAlignment();
+ DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment();
+ DWRITE_WORD_WRAPPING GetWordWrapping();
+ DWRITE_READING_DIRECTION GetReadingDirection();
+ DWRITE_FLOW_DIRECTION GetFlowDirection();
+ FLOAT GetIncrementalTabStop();
+ HRESULT GetTrimming(DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign);
+
+ HRESULT GetLineSpacing(
+ DWRITE_LINE_SPACING_METHOD *method,
+ FLOAT *spacing,
+ FLOAT *baseline);
+
+ HRESULT GetFontCollection(IDWriteFontCollection **collection);
+ UINT32 GetFontFamilyNameLength();
+ HRESULT GetFontFamilyName(WCHAR *name, UINT32 size);
+ DWRITE_FONT_WEIGHT GetFontWeight();
+ DWRITE_FONT_STYLE GetFontStyle();
+ DWRITE_FONT_STRETCH GetFontStretch();
+ FLOAT GetFontSize();
+ UINT32 GetLocaleNameLength();
+ HRESULT GetLocaleName(WCHAR *name, UINT32 size);
+}
+
+[
+local,
+object,
+uuid(55f1112b-1dc2-4b3c-9541-f46894ed85b6)
+]
+interface IDWriteTypography : IUnknown
+{
+ HRESULT AddFontFeature(DWRITE_FONT_FEATURE feature);
+ UINT32 GetFontFeatureCount();
+ HRESULT GetFontFeature(UINT32 index, DWRITE_FONT_FEATURE *feature);
+}
+
+[
+local,
+object,
+uuid(5e5a32a3-8dff-4773-9ff6-0696eab77267)
+]
+interface IDWriteBitmapRenderTarget : IUnknown
+{
+ HRESULT DrawGlyphRun(
+ FLOAT baselineOriginX,
+ FLOAT baselineOriginY,
+ DWRITE_MEASURING_MODE measuring_mode,
+ DWRITE_GLYPH_RUN const* glyph_run,
+ IDWriteRenderingParams* params,
+ COLORREF textColor,
+ [defaultvalue(NULL)] RECT *blackbox_rect);
+
+ HDC GetMemoryDC();
+ FLOAT GetPixelsPerDip();
+ HRESULT SetPixelsPerDip(FLOAT pixels_per_dip);
+ HRESULT GetCurrentTransform(DWRITE_MATRIX *transform);
+ HRESULT SetCurrentTransform(DWRITE_MATRIX const *transform);
+ HRESULT GetSize(SIZE *size);
+ HRESULT Resize(UINT32 width, UINT32 height);
+}
+
+cpp_quote("#ifndef _WINGDI_")
+/* already defined in wingdi.h but needed for WIDL */
+#define LF_FACESIZE 32
+
+ typedef struct tagLOGFONTW
+ {
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ WCHAR lfFaceName[LF_FACESIZE];
+ } LOGFONTW, *PLOGFONTW, *LPLOGFONTW;
+cpp_quote("#endif /* _WINGDI_ */")
+
+[
+local,
+object,
+uuid(1edd9491-9853-4299-898f-6432983b6f3a)
+]
+interface IDWriteGdiInterop : IUnknown
+{
+ HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFont **font);
+ HRESULT ConvertFontToLOGFONT(
+ IDWriteFont* font,
+ LOGFONTW* logfont,
+ BOOL *is_systemfont);
+
+ HRESULT ConvertFontFaceToLOGFONT(IDWriteFontFace* font, LOGFONTW* logfont);
+ HRESULT CreateFontFaceFromHdc(HDC hdc, IDWriteFontFace **fontface);
+ HRESULT CreateBitmapRenderTarget(HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target);
+}
+
+[
+local,
+object,
+uuid(53737037-6d14-410b-9bfe-0b182bb70961)
+]
+interface IDWriteTextLayout : IDWriteTextFormat
+{
+ HRESULT SetMaxWidth(FLOAT maxWidth);
+ HRESULT SetMaxHeight(FLOAT maxHeight);
+ HRESULT SetFontCollection(IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range);
+ HRESULT SetFontFamilyName(WCHAR const *name, DWRITE_TEXT_RANGE range);
+ HRESULT SetFontWeight(DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range);
+ HRESULT SetFontStyle(DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range);
+ HRESULT SetFontStretch(DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range);
+ HRESULT SetFontSize(FLOAT size, DWRITE_TEXT_RANGE range);
+ HRESULT SetUnderline(BOOL underline, DWRITE_TEXT_RANGE range);
+ HRESULT SetStrikethrough(BOOL strikethrough, DWRITE_TEXT_RANGE range);
+ HRESULT SetDrawingEffect(IUnknown* effect, DWRITE_TEXT_RANGE range);
+ HRESULT SetInlineObject(IDWriteInlineObject *object, DWRITE_TEXT_RANGE range);
+ HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE range);
+ HRESULT SetLocaleName(WCHAR const* locale, DWRITE_TEXT_RANGE range);
+
+ FLOAT GetMaxWidth();
+ FLOAT GetMaxHeight();
+ HRESULT GetFontCollection(
+ UINT32 pos,
+ IDWriteFontCollection** collection,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetFontFamilyNameLength(
+ UINT32 pos,
+ UINT32* len,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetFontFamilyName(
+ UINT32 position,
+ WCHAR* name,
+ UINT32 name_size,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetFontWeight(
+ UINT32 position,
+ DWRITE_FONT_WEIGHT *weight,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetFontStyle(
+ UINT32 currentPosition,
+ DWRITE_FONT_STYLE *style,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetFontStretch(
+ UINT32 position,
+ DWRITE_FONT_STRETCH *stretch,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetFontSize(
+ UINT32 position,
+ FLOAT *size,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetUnderline(
+ UINT32 position,
+ BOOL *has_underline,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetStrikethrough(
+ UINT32 position,
+ BOOL *has_strikethrough,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetDrawingEffect(
+ UINT32 position,
+ IUnknown **effect,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetInlineObject(
+ UINT32 position,
+ IDWriteInlineObject **object,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetTypography(
+ UINT32 position,
+ IDWriteTypography** typography,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetLocaleNameLength(
+ UINT32 position,
+ UINT32* length,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT GetLocaleName(
+ UINT32 position,
+ WCHAR* name,
+ UINT32 name_size,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+
+ HRESULT Draw(
+ void *context,
+ IDWriteTextRenderer* renderer,
+ FLOAT originX,
+ FLOAT originY);
+
+ HRESULT GetLineMetrics(
+ DWRITE_LINE_METRICS *metrics,
+ UINT32 max_count,
+ UINT32 *actual_count);
+
+ HRESULT GetMetrics(DWRITE_TEXT_METRICS *metrics);
+ HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs);
+ HRESULT GetClusterMetrics(
+ DWRITE_CLUSTER_METRICS *metrics,
+ UINT32 max_count,
+ UINT32* act_count);
+
+ HRESULT DetermineMinWidth(FLOAT* min_width);
+ HRESULT HitTestPoint(
+ FLOAT pointX,
+ FLOAT pointY,
+ BOOL* is_trailinghit,
+ BOOL* is_inside,
+ DWRITE_HIT_TEST_METRICS *metrics);
+
+ HRESULT HitTestTextPosition(
+ UINT32 textPosition,
+ BOOL is_trailinghit,
+ FLOAT* pointX,
+ FLOAT* pointY,
+ DWRITE_HIT_TEST_METRICS *metrics);
+
+ HRESULT HitTestTextRange(
+ UINT32 textPosition,
+ UINT32 textLength,
+ FLOAT originX,
+ FLOAT originY,
+ DWRITE_HIT_TEST_METRICS *metrics,
+ UINT32 max_metricscount,
+ UINT32* actual_metricscount);
+}
+
+[
+local,
+object,
+uuid(14885cc9-bab0-4f90-b6ed-5c366a2cd03d)
+]
+interface IDWriteNumberSubstitution : IUnknown
+{
+}
+
+[
+local,
+object,
+uuid(688e1a58-5094-47c8-adc8-fbcea60ae92b)
+]
+interface IDWriteTextAnalysisSource : IUnknown
+{
+ HRESULT GetTextAtPosition(
+ UINT32 position,
+ WCHAR const** text,
+ UINT32* text_len);
+
+ HRESULT GetTextBeforePosition(
+ UINT32 position,
+ WCHAR const** text,
+ UINT32* text_len);
+
+ DWRITE_READING_DIRECTION GetParagraphReadingDirection();
+ HRESULT GetLocaleName(
+ UINT32 position,
+ UINT32* text_len,
+ WCHAR const** locale);
+
+ HRESULT GetNumberSubstitution(
+ UINT32 position,
+ UINT32* text_len,
+ IDWriteNumberSubstitution **substitution);
+}
+
+[
+local,
+object,
+uuid(5810cd44-0ca0-4701-b3fa-bec5182ae4f6)
+]
+interface IDWriteTextAnalysisSink : IUnknown
+{
+ HRESULT SetScriptAnalysis(
+ UINT32 position,
+ UINT32 length,
+ DWRITE_SCRIPT_ANALYSIS const* scriptanalysis);
+
+ HRESULT SetLineBreakpoints(
+ UINT32 position,
+ UINT32 length,
+ DWRITE_LINE_BREAKPOINT const* breakpoints);
+
+ HRESULT SetBidiLevel(
+ UINT32 position,
+ UINT32 length,
+ UINT8 explicitLevel,
+ UINT8 resolvedLevel);
+
+ HRESULT SetNumberSubstitution(
+ UINT32 position,
+ UINT32 length,
+ IDWriteNumberSubstitution* substitution);
+}
+
+[
+local,
+object,
+uuid(b7e6163e-7f46-43b4-84b3-e4e6249c365d)
+]
+interface IDWriteTextAnalyzer : IUnknown
+{
+ HRESULT AnalyzeScript(
+ IDWriteTextAnalysisSource* source,
+ UINT32 position,
+ UINT32 length,
+ IDWriteTextAnalysisSink* sink);
+
+ HRESULT AnalyzeBidi(
+ IDWriteTextAnalysisSource* source,
+ UINT32 position,
+ UINT32 length,
+ IDWriteTextAnalysisSink* sink);
+
+ HRESULT AnalyzeNumberSubstitution(
+ IDWriteTextAnalysisSource* source,
+ UINT32 position,
+ UINT32 length,
+ IDWriteTextAnalysisSink* sink);
+
+ HRESULT AnalyzeLineBreakpoints(
+ IDWriteTextAnalysisSource* source,
+ UINT32 position,
+ UINT32 length,
+ IDWriteTextAnalysisSink* sink);
+
+ HRESULT GetGlyphs(
+ WCHAR const* text,
+ UINT32 length,
+ IDWriteFontFace* font_face,
+ BOOL is_sideways,
+ BOOL is_rtl,
+ DWRITE_SCRIPT_ANALYSIS const* analysis,
+ WCHAR const* locale,
+ IDWriteNumberSubstitution* substitution,
+ DWRITE_TYPOGRAPHIC_FEATURES const** features,
+ UINT32 const* feature_range_len,
+ UINT32 feature_ranges,
+ UINT32 max_glyph_count,
+ UINT16* clustermap,
+ DWRITE_SHAPING_TEXT_PROPERTIES* text_props,
+ UINT16* glyph_indices,
+ DWRITE_SHAPING_GLYPH_PROPERTIES* glyph_props,
+ UINT32* actual_glyph_count);
+
+ HRESULT GetGlyphPlacements(
+ WCHAR const* text,
+ UINT16 const* clustermap,
+ DWRITE_SHAPING_TEXT_PROPERTIES* props,
+ UINT32 text_len,
+ UINT16 const* glyph_indices,
+ DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,
+ UINT32 glyph_count,
+ IDWriteFontFace * font_face,
+ FLOAT fontEmSize,
+ BOOL is_sideways,
+ BOOL is_rtl,
+ DWRITE_SCRIPT_ANALYSIS const* analysis,
+ WCHAR const* locale,
+ DWRITE_TYPOGRAPHIC_FEATURES const** features,
+ UINT32 const* feature_range_len,
+ UINT32 feature_ranges,
+ FLOAT* glyph_advances,
+ DWRITE_GLYPH_OFFSET* glyph_offsets);
+
+ HRESULT GetGdiCompatibleGlyphPlacements(
+ WCHAR const* text,
+ UINT16 const* clustermap,
+ DWRITE_SHAPING_TEXT_PROPERTIES* props,
+ UINT32 text_len,
+ UINT16 const* glyph_indices,
+ DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props,
+ UINT32 glyph_count,
+ IDWriteFontFace * font_face,
+ FLOAT fontEmSize,
+ FLOAT pixels_per_dip,
+ DWRITE_MATRIX const* transform,
+ BOOL use_gdi_natural,
+ BOOL is_sideways,
+ BOOL is_rtl,
+ DWRITE_SCRIPT_ANALYSIS const* analysis,
+ WCHAR const* locale,
+ DWRITE_TYPOGRAPHIC_FEATURES const** features,
+ UINT32 const* feature_range_lengths,
+ UINT32 feature_ranges,
+ FLOAT* glyph_advances,
+ DWRITE_GLYPH_OFFSET* glyph_offsets);
+}
+
+[
+local,
+object,
+uuid(7d97dbf7-e085-42d4-81e3-6a883bded118)
+]
+interface IDWriteGlyphRunAnalysis : IUnknown
+{
+ HRESULT GetAlphaTextureBounds(DWRITE_TEXTURE_TYPE type, RECT* bounds);
+ HRESULT CreateAlphaTexture(DWRITE_TEXTURE_TYPE type, RECT const* bounds, BYTE* alphaValues, UINT32 bufferSize);
+ HRESULT GetAlphaBlendParams(
+ IDWriteRenderingParams* renderingParams,
+ FLOAT* blendGamma,
+ FLOAT* blendEnhancedContrast,
+ FLOAT* blendClearTypeLevel);
+}
+
+[
+local,
+object,
+uuid(b859ee5a-d838-4b5b-a2e8-1adc7d93db48)
+]
+interface IDWriteFactory : IUnknown
+{
+ HRESULT GetSystemFontCollection(IDWriteFontCollection **collection,
+ [defaultvalue(FALSE)] BOOL check_for_updates);
+
+ HRESULT CreateCustomFontCollection(
+ IDWriteFontCollectionLoader *loader,
+ void const *key,
+ UINT32 key_size,
+ IDWriteFontCollection **collection);
+
+ HRESULT RegisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);
+
+ HRESULT UnregisterFontCollectionLoader(IDWriteFontCollectionLoader *loader);
+
+ HRESULT CreateFontFileReference(
+ WCHAR const *path,
+ FILETIME const *writetime,
+ IDWriteFontFile **font_file);
+
+ HRESULT CreateCustomFontFileReference(
+ void const *reference_key,
+ UINT32 key_size,
+ IDWriteFontFileLoader *loader,
+ IDWriteFontFile **font_file);
+
+ HRESULT CreateFontFace(
+ DWRITE_FONT_FACE_TYPE facetype,
+ UINT32 files_number,
+ IDWriteFontFile* const* font_files,
+ UINT32 index,
+ DWRITE_FONT_SIMULATIONS sim_flags,
+ IDWriteFontFace **font_face);
+
+ HRESULT CreateRenderingParams(IDWriteRenderingParams **params);
+
+ HRESULT CreateMonitorRenderingParams(
+ HMONITOR monitor,
+ IDWriteRenderingParams **params);
+
+ HRESULT CreateCustomRenderingParams(
+ FLOAT gamma,
+ FLOAT enhancedContrast,
+ FLOAT cleartype_level,
+ DWRITE_PIXEL_GEOMETRY geometry,
+ DWRITE_RENDERING_MODE mode,
+ IDWriteRenderingParams **params);
+
+ HRESULT RegisterFontFileLoader(IDWriteFontFileLoader *loader);
+
+ HRESULT UnregisterFontFileLoader(IDWriteFontFileLoader *loader);
+
+ HRESULT CreateTextFormat(
+ WCHAR const* family_name,
+ IDWriteFontCollection *collection,
+ DWRITE_FONT_WEIGHT weight,
+ DWRITE_FONT_STYLE style,
+ DWRITE_FONT_STRETCH stretch,
+ FLOAT size,
+ WCHAR const *locale,
+ IDWriteTextFormat **format);
+
+ HRESULT CreateTypography(IDWriteTypography **typography);
+
+ HRESULT GetGdiInterop(IDWriteGdiInterop **gdi_interop);
+
+ HRESULT CreateTextLayout(
+ WCHAR const* string,
+ UINT32 len,
+ IDWriteTextFormat *format,
+ FLOAT max_width,
+ FLOAT max_height,
+ IDWriteTextLayout **layout);
+
+ HRESULT CreateGdiCompatibleTextLayout(
+ WCHAR const* string,
+ UINT32 len,
+ IDWriteTextFormat *format,
+ FLOAT layout_width,
+ FLOAT layout_height,
+ FLOAT pixels_per_dip,
+ DWRITE_MATRIX const* transform,
+ BOOL use_gdi_natural,
+ IDWriteTextLayout **layout);
+
+ HRESULT CreateEllipsisTrimmingSign(
+ IDWriteTextFormat *format,
+ IDWriteInlineObject **trimming_sign);
+
+ HRESULT CreateTextAnalyzer(IDWriteTextAnalyzer **analyzer);
+
+ HRESULT CreateNumberSubstitution(
+ DWRITE_NUMBER_SUBSTITUTION_METHOD method,
+ WCHAR const* locale,
+ BOOL ignore_user_override,
+ IDWriteNumberSubstitution **substitution);
+
+ HRESULT CreateGlyphRunAnalysis(
+ DWRITE_GLYPH_RUN const *glyph_run,
+ FLOAT pixels_per_dip,
+ DWRITE_MATRIX const* transform,
+ DWRITE_RENDERING_MODE rendering_mode,
+ DWRITE_MEASURING_MODE measuring_mode,
+ FLOAT baseline_x,
+ FLOAT baseline_y,
+ IDWriteGlyphRunAnalysis **analysis);
+}
+
+cpp_quote("HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE,REFIID,IUnknown**);")
+
+/* error codes */
+cpp_quote("#define FACILITY_DWRITE 0x898")
+cpp_quote("#define DWRITE_ERR_BASE 0x5000")
+cpp_quote("#define MAKE_DWRITE_HR(severity, code) MAKE_HRESULT(severity, FACILITY_DWRITE, (DWRITE_ERR_BASE + code))")
+cpp_quote("#define MAKE_DWRITE_HR_ERR(code) MAKE_DWRITE_HR(SEVERITY_ERROR, code)")
+
+cpp_quote("#define DWRITE_E_FILEFORMAT MAKE_DWRITE_HR_ERR(0x0)")
+cpp_quote("#define DWRITE_E_UNEXPECTED MAKE_DWRITE_HR_ERR(0x1)")
+cpp_quote("#define DWRITE_E_NOFONT MAKE_DWRITE_HR_ERR(0x2)")
+cpp_quote("#define DWRITE_E_FILENOTFOUND MAKE_DWRITE_HR_ERR(0x3)")
+cpp_quote("#define DWRITE_E_FILEACCESS MAKE_DWRITE_HR_ERR(0x4)")
+cpp_quote("#define DWRITE_E_FONTCOLLECTIONOBSOLETE MAKE_DWRITE_HR_ERR(0x5)")
+cpp_quote("#define DWRITE_E_ALREADYREGISTERED MAKE_DWRITE_HR_ERR(0x6)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl
new file mode 100644
index 00000000..3810840d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dwrite_1.idl
@@ -0,0 +1,833 @@
+/*
+ * Copyright 2013 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "dwrite.idl";
+
+typedef enum DWRITE_PANOSE_FAMILY
+{
+ DWRITE_PANOSE_FAMILY_ANY,
+ DWRITE_PANOSE_FAMILY_NO_FIT,
+ DWRITE_PANOSE_FAMILY_TEXT_DISPLAY,
+ DWRITE_PANOSE_FAMILY_SCRIPT,
+ DWRITE_PANOSE_FAMILY_DECORATIVE,
+ DWRITE_PANOSE_FAMILY_SYMBOL,
+ DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY_SYMBOL
+} DWRITE_PANOSE_FAMILY;
+
+typedef enum DWRITE_PANOSE_SERIF_STYLE
+{
+ DWRITE_PANOSE_SERIF_STYLE_ANY,
+ DWRITE_PANOSE_SERIF_STYLE_NO_FIT,
+ DWRITE_PANOSE_SERIF_STYLE_COVE,
+ DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE,
+ DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE,
+ DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE,
+ DWRITE_PANOSE_SERIF_STYLE_SQUARE,
+ DWRITE_PANOSE_SERIF_STYLE_THIN,
+ DWRITE_PANOSE_SERIF_STYLE_OVAL,
+ DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED,
+ DWRITE_PANOSE_SERIF_STYLE_TRIANGLE,
+ DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS,
+ DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS,
+ DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+ DWRITE_PANOSE_SERIF_STYLE_FLARED,
+ DWRITE_PANOSE_SERIF_STYLE_ROUNDED,
+ DWRITE_PANOSE_SERIF_STYLE_SCRIPT,
+ DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS,
+ DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE_OVAL
+} DWRITE_PANOSE_SERIF_STYLE;
+
+typedef enum DWRITE_PANOSE_WEIGHT
+{
+ DWRITE_PANOSE_WEIGHT_ANY,
+ DWRITE_PANOSE_WEIGHT_NO_FIT,
+ DWRITE_PANOSE_WEIGHT_VERY_LIGHT,
+ DWRITE_PANOSE_WEIGHT_LIGHT,
+ DWRITE_PANOSE_WEIGHT_THIN,
+ DWRITE_PANOSE_WEIGHT_BOOK,
+ DWRITE_PANOSE_WEIGHT_MEDIUM,
+ DWRITE_PANOSE_WEIGHT_DEMI,
+ DWRITE_PANOSE_WEIGHT_BOLD,
+ DWRITE_PANOSE_WEIGHT_HEAVY,
+ DWRITE_PANOSE_WEIGHT_BLACK,
+ DWRITE_PANOSE_WEIGHT_EXTRA_BLACK,
+ DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT_EXTRA_BLACK
+} DWRITE_PANOSE_WEIGHT;
+
+typedef enum DWRITE_PANOSE_PROPORTION
+{
+ DWRITE_PANOSE_PROPORTION_ANY,
+ DWRITE_PANOSE_PROPORTION_NO_FIT,
+ DWRITE_PANOSE_PROPORTION_OLD_STYLE,
+ DWRITE_PANOSE_PROPORTION_MODERN,
+ DWRITE_PANOSE_PROPORTION_EVEN_WIDTH,
+ DWRITE_PANOSE_PROPORTION_EXPANDED,
+ DWRITE_PANOSE_PROPORTION_CONDENSED,
+ DWRITE_PANOSE_PROPORTION_VERY_EXPANDED,
+ DWRITE_PANOSE_PROPORTION_VERY_CONDENSED,
+ DWRITE_PANOSE_PROPORTION_MONOSPACED
+} DWRITE_PANOSE_PROPORTION;
+
+typedef enum DWRITE_PANOSE_CONTRAST
+{
+ DWRITE_PANOSE_CONTRAST_ANY,
+ DWRITE_PANOSE_CONTRAST_NO_FIT,
+ DWRITE_PANOSE_CONTRAST_NONE,
+ DWRITE_PANOSE_CONTRAST_VERY_LOW,
+ DWRITE_PANOSE_CONTRAST_LOW,
+ DWRITE_PANOSE_CONTRAST_MEDIUM_LOW,
+ DWRITE_PANOSE_CONTRAST_MEDIUM,
+ DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH,
+ DWRITE_PANOSE_CONTRAST_HIGH,
+ DWRITE_PANOSE_CONTRAST_VERY_HIGH,
+ DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW,
+ DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM,
+ DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH,
+ DWRITE_PANOSE_CONTRAST_BROKEN
+} DWRITE_PANOSE_CONTRAST;
+
+typedef enum DWRITE_PANOSE_STROKE_VARIATION
+{
+ DWRITE_PANOSE_STROKE_VARIATION_ANY,
+ DWRITE_PANOSE_STROKE_VARIATION_NO_FIT,
+ DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION,
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL,
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL,
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL,
+ DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL,
+ DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL,
+ DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL,
+ DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL,
+ DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL
+} DWRITE_PANOSE_STROKE_VARIANTION;
+
+typedef enum DWRITE_PANOSE_ARM_STYLE
+{
+ DWRITE_PANOSE_ARM_STYLE_ANY,
+ DWRITE_PANOSE_ARM_STYLE_NO_FIT,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF,
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+ DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL,
+ DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL,
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL,
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE,
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL,
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF,
+ DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF
+} DWRITE_PANOSE_ARM_STYLE;
+
+typedef enum DWRITE_PANOSE_LETTERFORM
+{
+ DWRITE_PANOSE_LETTERFORM_ANY,
+ DWRITE_PANOSE_LETTERFORM_NO_FIT,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER,
+ DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER,
+ DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE
+} DWRITE_PANOSE_LETTERFORM;
+
+typedef enum DWRITE_PANOSE_MIDLINE
+{
+ DWRITE_PANOSE_MIDLINE_ANY,
+ DWRITE_PANOSE_MIDLINE_NO_FIT,
+ DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED,
+ DWRITE_PANOSE_MIDLINE_STANDARD_POINTED,
+ DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED,
+ DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED,
+ DWRITE_PANOSE_MIDLINE_HIGH_POINTED,
+ DWRITE_PANOSE_MIDLINE_HIGH_SERIFED,
+ DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED,
+ DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED,
+ DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED,
+ DWRITE_PANOSE_MIDLINE_LOW_TRIMMED,
+ DWRITE_PANOSE_MIDLINE_LOW_POINTED,
+ DWRITE_PANOSE_MIDLINE_LOW_SERIFED
+} DWRITE_PANOSE_MIDLINE;
+
+typedef enum DWRITE_PANOSE_XHEIGHT
+{
+ DWRITE_PANOSE_XHEIGHT_ANY,
+ DWRITE_PANOSE_XHEIGHT_NO_FIT,
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL,
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE,
+ DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL,
+ DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD,
+ DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE,
+ DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD,
+ DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD
+} DWRITE_PANOSE_XHEIGHT;
+
+typedef enum DWRITE_PANOSE_TOOL_KIND
+{
+ DWRITE_PANOSE_TOOL_KIND_ANY,
+ DWRITE_PANOSE_TOOL_KIND_NO_FIT,
+ DWRITE_PANOSE_TOOL_KIND_FLAT_NIB,
+ DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT,
+ DWRITE_PANOSE_TOOL_KIND_ENGRAVED,
+ DWRITE_PANOSE_TOOL_KIND_BALL,
+ DWRITE_PANOSE_TOOL_KIND_BRUSH,
+ DWRITE_PANOSE_TOOL_KIND_ROUGH,
+ DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP,
+ DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH
+} DWRITE_PANOSE_TOOL_KIND;
+
+typedef enum DWRITE_PANOSE_SPACING
+{
+ DWRITE_PANOSE_SPACING_ANY,
+ DWRITE_PANOSE_SPACING_NO_FIT,
+ DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED,
+ DWRITE_PANOSE_SPACING_MONOSPACED
+} DWRITE_PANOSE_SPACING;
+
+typedef enum DWRITE_PANOSE_ASPECT_RATIO
+{
+ DWRITE_PANOSE_ASPECT_RATIO_ANY,
+ DWRITE_PANOSE_ASPECT_RATIO_NO_FIT,
+ DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED,
+ DWRITE_PANOSE_ASPECT_RATIO_CONDENSED,
+ DWRITE_PANOSE_ASPECT_RATIO_NORMAL,
+ DWRITE_PANOSE_ASPECT_RATIO_EXPANDED,
+ DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED
+} DWRITE_PANOSE_ASPECT_RATIO;
+
+typedef enum DWRITE_PANOSE_SCRIPT_TOPOLOGY
+{
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING,
+ DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED
+} DWRITE_PANOSE_SCRIPT_TOPOLOGY;
+
+typedef enum DWRITE_PANOSE_SCRIPT_FORM
+{
+ DWRITE_PANOSE_SCRIPT_FORM_ANY,
+ DWRITE_PANOSE_SCRIPT_FORM_NO_FIT,
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING,
+ DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING
+} DWRITE_PANOSE_SCRIPT_FORM;
+
+typedef enum DWRITE_PANOSE_FINIALS
+{
+ DWRITE_PANOSE_FINIALS_ANY,
+ DWRITE_PANOSE_FINIALS_NO_FIT,
+ DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS,
+ DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS,
+ DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS,
+ DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS,
+ DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS,
+ DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS,
+ DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS,
+ DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS,
+ DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS,
+ DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS,
+ DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS,
+ DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS
+} DWRITE_PANOSE_FINIALS;
+
+typedef enum DWRITE_PANOSE_XASCENT
+{
+ DWRITE_PANOSE_XASCENT_ANY,
+ DWRITE_PANOSE_XASCENT_NO_FIT,
+ DWRITE_PANOSE_XASCENT_VERY_LOW,
+ DWRITE_PANOSE_XASCENT_LOW,
+ DWRITE_PANOSE_XASCENT_MEDIUM,
+ DWRITE_PANOSE_XASCENT_HIGH,
+ DWRITE_PANOSE_XASCENT_VERY_HIGH
+} DWRITE_PANOSE_XASCENT;
+
+typedef enum DWRITE_PANOSE_DECORATIVE_CLASS
+{
+ DWRITE_PANOSE_DECORATIVE_CLASS_ANY,
+ DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT,
+ DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE,
+ DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY,
+ DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS,
+ DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT,
+ DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS,
+ DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON,
+ DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS,
+ DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED,
+ DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND,
+ DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE,
+ DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE
+} DWRITE_PANOSE_DECORATIVE_CLASS;
+
+typedef enum DWRITE_PANOSE_ASPECT
+{
+ DWRITE_PANOSE_ASPECT_ANY,
+ DWRITE_PANOSE_ASPECT_NO_FIT,
+ DWRITE_PANOSE_ASPECT_SUPER_CONDENSED,
+ DWRITE_PANOSE_ASPECT_VERY_CONDENSED,
+ DWRITE_PANOSE_ASPECT_CONDENSED,
+ DWRITE_PANOSE_ASPECT_NORMAL,
+ DWRITE_PANOSE_ASPECT_EXTENDED,
+ DWRITE_PANOSE_ASPECT_VERY_EXTENDED,
+ DWRITE_PANOSE_ASPECT_SUPER_EXTENDED,
+ DWRITE_PANOSE_ASPECT_MONOSPACED
+} DWRITE_PANOSE_ASPECT;
+
+typedef enum DWRITE_PANOSE_FILL
+{
+ DWRITE_PANOSE_FILL_ANY,
+ DWRITE_PANOSE_FILL_NO_FIT,
+ DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL,
+ DWRITE_PANOSE_FILL_NO_FILL,
+ DWRITE_PANOSE_FILL_PATTERNED_FILL,
+ DWRITE_PANOSE_FILL_COMPLEX_FILL,
+ DWRITE_PANOSE_FILL_SHAPED_FILL,
+ DWRITE_PANOSE_FILL_DRAWN_DISTRESSED
+} DWRITE_PANOSE_FILL;
+
+typedef enum DWRITE_PANOSE_LINING
+{
+ DWRITE_PANOSE_LINING_ANY,
+ DWRITE_PANOSE_LINING_NO_FIT,
+ DWRITE_PANOSE_LINING_NONE,
+ DWRITE_PANOSE_LINING_INLINE,
+ DWRITE_PANOSE_LINING_OUTLINE,
+ DWRITE_PANOSE_LINING_ENGRAVED,
+ DWRITE_PANOSE_LINING_SHADOW,
+ DWRITE_PANOSE_LINING_RELIEF,
+ DWRITE_PANOSE_LINING_BACKDROP
+} DWRITE_PANOSE_LINING;
+
+typedef enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY
+{
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER,
+ DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE
+} DWRITE_PANOSE_DECORATIVE_TOPOLOGY;
+
+typedef enum DWRITE_PANOSE_CHARACTER_RANGES
+{
+ DWRITE_PANOSE_CHARACTER_RANGES_ANY,
+ DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT,
+ DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION,
+ DWRITE_PANOSE_CHARACTER_RANGES_LITERALS,
+ DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE,
+ DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS
+} DWRITE_PANOSE_CHARACTER_RANGES;
+
+typedef enum DWRITE_PANOSE_SYMBOL_KIND
+{
+ DWRITE_PANOSE_SYMBOL_KIND_ANY,
+ DWRITE_PANOSE_SYMBOL_KIND_NO_FIT,
+ DWRITE_PANOSE_SYMBOL_KIND_MONTAGES,
+ DWRITE_PANOSE_SYMBOL_KIND_PICTURES,
+ DWRITE_PANOSE_SYMBOL_KIND_SHAPES,
+ DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC,
+ DWRITE_PANOSE_SYMBOL_KIND_MUSIC,
+ DWRITE_PANOSE_SYMBOL_KIND_EXPERT,
+ DWRITE_PANOSE_SYMBOL_KIND_PATTERNS,
+ DWRITE_PANOSE_SYMBOL_KIND_BOARDERS,
+ DWRITE_PANOSE_SYMBOL_KIND_ICONS,
+ DWRITE_PANOSE_SYMBOL_KIND_LOGOS,
+ DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC
+} DWRITE_PANOSE_SYMBOL_KIND;
+
+typedef enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO
+{
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW,
+ DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW
+} DWRITE_PANOSE_SYMBOL_ASPECT_RATIO;
+
+typedef enum DWRITE_OUTLINE_THRESHOLD
+{
+ DWRITE_OUTLINE_THRESHOLD_ANTIALIASED,
+ DWRITE_OUTLINE_THRESHOLD_ALIASED
+} DWRITE_OUTLINE_THRESHOLD;
+
+typedef enum DWRITE_BASELINE
+{
+ DWRITE_BASELINE_DEFAULT,
+ DWRITE_BASELINE_ROMAN,
+ DWRITE_BASELINE_CENTRAL,
+ DWRITE_BASELINE_MATH,
+ DWRITE_BASELINE_HANGING,
+ DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM,
+ DWRITE_BASELINE_IDEOGRAPHIC_TOP,
+ DWRITE_BASELINE_MINIMUM,
+ DWRITE_BASELINE_MAXIMUM
+} DWRITE_BASELINE;
+
+typedef enum DWRITE_VERTICAL_GLYPH_ORIENTATION
+{
+ DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT,
+ DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED
+} DWRITE_VERTICAL_GLYPH_ORIENTATION;
+
+typedef enum DWRITE_GLYPH_ORIENTATION_ANGLE
+{
+ DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES,
+ DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES,
+ DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES,
+ DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES
+} DWRITE_GLYPH_ORIENTATION_ANGLE;
+
+typedef struct DWRITE_FONT_METRICS1
+{
+ UINT16 designUnitsPerEm;
+ UINT16 ascent;
+ UINT16 descent;
+ INT16 lineGap;
+ UINT16 capHeight;
+ UINT16 xHeight;
+ INT16 underlinePosition;
+ UINT16 underlineThickness;
+ INT16 strikethroughPosition;
+ UINT16 strikethroughThickness;
+ INT16 glyphBoxLeft;
+ INT16 glyphBoxTop;
+ INT16 glyphBoxRight;
+ INT16 glyphBoxBottom;
+ INT16 subscriptPositionX;
+ INT16 subscriptPositionY;
+ INT16 subscriptSizeX;
+ INT16 subscriptSizeY;
+ INT16 superscriptPositionX;
+ INT16 superscriptPositionY;
+ INT16 superscriptSizeX;
+ INT16 superscriptSizeY;
+ BOOL hasTypographicMetrics;
+} DWRITE_FONT_METRICS1;
+
+typedef struct DWRITE_CARET_METRICS
+{
+ INT16 slopeRise;
+ INT16 slopeRun;
+ INT16 offset;
+} DWRITE_CARET_METRICS;
+
+typedef union DWRITE_PANOSE
+{
+ UINT8 values[10];
+ UINT8 familyKind;
+ struct
+ {
+ UINT8 familyKind;
+ UINT8 serifStyle;
+ UINT8 weight;
+ UINT8 proportion;
+ UINT8 contrast;
+ UINT8 strokeVariation;
+ UINT8 armStyle;
+ UINT8 letterform;
+ UINT8 midline;
+ UINT8 xHeight;
+ } text;
+ struct
+ {
+ UINT8 familyKind;
+ UINT8 toolKind;
+ UINT8 weight;
+ UINT8 spacing;
+ UINT8 aspectRatio;
+ UINT8 contrast;
+ UINT8 scriptTopology;
+ UINT8 scriptForm;
+ UINT8 finials;
+ UINT8 xAscent;
+ } script;
+ struct
+ {
+ UINT8 familyKind;
+ UINT8 decorativeClass;
+ UINT8 weight;
+ UINT8 aspect;
+ UINT8 contrast;
+ UINT8 serifVariant;
+ UINT8 fill;
+ UINT8 lining;
+ UINT8 decorativeTopology;
+ UINT8 characterRange;
+ } decorative;
+ struct
+ {
+ UINT8 familyKind;
+ UINT8 symbolKind;
+ UINT8 weight;
+ UINT8 spacing;
+ UINT8 aspectRatioAndContrast;
+ UINT8 aspectRatio94;
+ UINT8 aspectRatio119;
+ UINT8 aspectRatio157;
+ UINT8 aspectRatio163;
+ UINT8 aspectRatio211;
+ } symbol;
+} DWRITE_PANOSE;
+
+typedef struct DWRITE_UNICODE_RANGE
+{
+ UINT32 first;
+ UINT32 last;
+} DWRITE_UNICODE_RANGE;
+
+typedef struct DWRITE_SCRIPT_PROPERTIES
+{
+ UINT32 isoScriptCode;
+ UINT32 isoScriptNumber;
+ UINT32 clusterLookahead;
+ UINT32 justificationCharacter;
+ UINT32 restrictCaretToClusters : 1;
+ UINT32 usesWordDividers : 1;
+ UINT32 isDiscreteWriting : 1;
+ UINT32 isBlockWriting : 1;
+ UINT32 isDistributedWithinCluster : 1;
+ UINT32 isConnectedWriting : 1;
+ UINT32 isCursiveWriting : 1;
+ UINT32 reserved : 25;
+} DWRITE_SCRIPT_PROPERTIES;
+
+typedef struct DWRITE_JUSTIFICATION_OPPORTUNITY
+{
+ FLOAT expansionMinimum;
+ FLOAT expansionMaximum;
+ FLOAT compressionMaximum;
+ UINT32 expansionPriority : 8;
+ UINT32 compressionPriority : 8;
+ UINT32 allowResidualExpansion : 1;
+ UINT32 allowResidualCompression : 1;
+ UINT32 applyToLeadingEdge : 1;
+ UINT32 applyToTrailingEdge : 1;
+ UINT32 reserved : 12;
+} DWRITE_JUSTIFICATION_OPPORTUNITY;
+
+interface IDWriteTextAnalysisSource1;
+interface IDWriteTextAnalysisSink1;
+interface IDWriteRenderingParams1;
+
+[
+local,
+object,
+uuid(30572f99-dac6-41db-a16e-0486307e606a)
+]
+interface IDWriteFactory1 : IDWriteFactory
+{
+ HRESULT GetEudcFontCollection(IDWriteFontCollection **collection,
+ [defaultvalue(FALSE)] BOOL check_for_updates);
+ HRESULT CreateCustomRenderingParams(FLOAT gamma,
+ FLOAT enhcontrast,
+ FLOAT enhcontrast_grayscale,
+ FLOAT cleartype_level,
+ DWRITE_PIXEL_GEOMETRY geometry,
+ DWRITE_RENDERING_MODE mode,
+ IDWriteRenderingParams1** params);
+};
+
+[
+local,
+object,
+uuid(a71efdb4-9fdb-4838-ad90-cfc3be8c3daf)
+]
+interface IDWriteFontFace1 : IDWriteFontFace
+{
+ HRESULT GetMetrics(DWRITE_FONT_METRICS1 *metrics);
+ HRESULT GetGdiCompatibleMetrics(FLOAT em_size,
+ FLOAT pixels_per_dip,
+ const DWRITE_MATRIX *transform,
+ DWRITE_FONT_METRICS1 *metrics);
+ void GetCaretMetrics(DWRITE_CARET_METRICS *metrics);
+ HRESULT GetUnicodeRanges(UINT32 max_count,
+ DWRITE_UNICODE_RANGE *ranges,
+ UINT32 *count);
+ BOOL IsMonospacedFont();
+ HRESULT GetDesignGlyphAdvances(UINT32 glyph_count,
+ UINT16 const *indices,
+ INT32 *advances,
+ [defaultvalue(FALSE)] BOOL is_sideways);
+ HRESULT GetGdiCompatibleGlyphAdvances(FLOAT em_size,
+ FLOAT pixels_per_dip,
+ const DWRITE_MATRIX *transform,
+ BOOL use_gdi_natural,
+ BOOL is_sideways,
+ UINT32 glyph_count,
+ const UINT16 *indices,
+ INT32 *advances);
+
+ HRESULT GetKerningPairAdjustments(UINT32 glyph_count,
+ const UINT16 *indices,
+ INT32 *adjustments);
+ BOOL HasKerningPairs();
+ HRESULT GetRecommendedRenderingMode(FLOAT font_emsize,
+ FLOAT dpiX,
+ FLOAT dpiY,
+ const DWRITE_MATRIX *transform,
+ BOOL is_sideways,
+ DWRITE_OUTLINE_THRESHOLD threshold,
+ DWRITE_MEASURING_MODE measuring_mode,
+ DWRITE_RENDERING_MODE *rendering_mode);
+
+ HRESULT GetVerticalGlyphVariants(UINT32 glyph_count,
+ const UINT16 *nominal_indices,
+ UINT16 *vertical_indices);
+ BOOL HasVerticalGlyphVariants();
+};
+
+[
+local,
+object,
+uuid(acd16696-8c14-4f5d-877e-fe3fc1d32738)
+]
+interface IDWriteFont1 : IDWriteFont
+{
+ void GetMetrics(DWRITE_FONT_METRICS1 *metrics);
+ void GetPanose(DWRITE_PANOSE *panose);
+ HRESULT GetUnicodeRanges(UINT32 max_count,
+ DWRITE_UNICODE_RANGE *ranges,
+ UINT32 *count);
+ BOOL IsMonospacedFont();
+};
+
+[
+local,
+object,
+uuid(94413cf4-a6fc-4248-8b50-6674348fcad3)
+]
+interface IDWriteRenderingParams1 : IDWriteRenderingParams
+{
+ FLOAT GetGrayscaleEnhancedContrast();
+};
+
+[
+local,
+object,
+uuid(80dad800-e21f-4e83-96ce-bfcce500db7c)
+]
+interface IDWriteTextAnalyzer1 : IDWriteTextAnalyzer
+{
+ HRESULT ApplyCharacterSpacing(FLOAT leading_spacing,
+ FLOAT trailing_spacing,
+ FLOAT min_advance_width,
+ UINT32 len,
+ UINT32 glyph_count,
+ UINT16 const *clustermap,
+ FLOAT const *advances,
+ DWRITE_GLYPH_OFFSET const *offsets,
+ DWRITE_SHAPING_GLYPH_PROPERTIES const *props,
+ FLOAT *modified_advances,
+ DWRITE_GLYPH_OFFSET *modified_offsets);
+ HRESULT GetBaseline(IDWriteFontFace *face,
+ DWRITE_BASELINE baseline,
+ BOOL vertical,
+ BOOL is_simulation_allowed,
+ DWRITE_SCRIPT_ANALYSIS sa,
+ const WCHAR *localeName,
+ INT32 *baseline_coord,
+ BOOL *exists);
+
+ HRESULT AnalyzeVerticalGlyphOrientation(
+ IDWriteTextAnalysisSource1* source,
+ UINT32 text_pos,
+ UINT32 len,
+ IDWriteTextAnalysisSink1 *sink);
+
+ HRESULT GetGlyphOrientationTransform(
+ DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+ BOOL is_sideways,
+ DWRITE_MATRIX *transform);
+
+ HRESULT GetScriptProperties(DWRITE_SCRIPT_ANALYSIS sa, DWRITE_SCRIPT_PROPERTIES *props);
+
+ HRESULT GetTextComplexity(const WCHAR *text,
+ UINT32 len,
+ IDWriteFontFace *face,
+ BOOL *is_simple,
+ UINT32 *len_read,
+ UINT16 *indices);
+ HRESULT GetJustificationOpportunities(
+ IDWriteFontFace *face,
+ FLOAT font_em_size,
+ DWRITE_SCRIPT_ANALYSIS sa,
+ UINT32 length,
+ UINT32 glyph_count,
+ const WCHAR *text,
+ const UINT16 *clustermap,
+ const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+ DWRITE_JUSTIFICATION_OPPORTUNITY *jo);
+
+ HRESULT JustifyGlyphAdvances(
+ FLOAT width,
+ UINT32 glyph_count,
+ const DWRITE_JUSTIFICATION_OPPORTUNITY *jo,
+ const FLOAT *advances,
+ const DWRITE_GLYPH_OFFSET *offsets,
+ FLOAT *justifiedadvances,
+ DWRITE_GLYPH_OFFSET *justifiedoffsets);
+
+ HRESULT GetJustifiedGlyphs(
+ IDWriteFontFace *face,
+ FLOAT font_em_size,
+ DWRITE_SCRIPT_ANALYSIS sa,
+ UINT32 length,
+ UINT32 glyph_count,
+ UINT32 max_glyphcount,
+ const UINT16 *clustermap,
+ const UINT16 *indices,
+ const FLOAT *advances,
+ const FLOAT *justifiedadvances,
+ const DWRITE_GLYPH_OFFSET *justifiedoffsets,
+ const DWRITE_SHAPING_GLYPH_PROPERTIES *prop,
+ UINT32 *actual_count,
+ UINT16 *modified_clustermap,
+ UINT16 *modified_indices,
+ FLOAT *modified_advances,
+ DWRITE_GLYPH_OFFSET *modified_offsets);
+};
+
+[
+local,
+object,
+uuid(639cfad8-0fb4-4b21-a58a-067920120009)
+]
+interface IDWriteTextAnalysisSource1 : IDWriteTextAnalysisSource
+{
+ HRESULT GetVerticalGlyphOrientation(
+ UINT32 pos,
+ UINT32 *length,
+ DWRITE_VERTICAL_GLYPH_ORIENTATION *orientation,
+ UINT8 *bidi_level);
+};
+
+[
+local,
+object,
+uuid(b0d941a0-85e7-4d8b-9fd3-5ced9934482a)
+]
+interface IDWriteTextAnalysisSink1 : IDWriteTextAnalysisSink
+{
+ HRESULT SetGlyphOrientation(
+ UINT32 pos,
+ UINT32 length,
+ DWRITE_GLYPH_ORIENTATION_ANGLE angle,
+ UINT8 adjusted_bidilevel,
+ BOOL is_sideways,
+ BOOL is_rtl);
+};
+
+[
+local,
+object,
+uuid(9064d822-80a7-465c-a986-df65f78b8feb)
+]
+interface IDWriteTextLayout1 : IDWriteTextLayout
+{
+ HRESULT SetPairKerning(
+ BOOL is_pairkerning_enabled,
+ DWRITE_TEXT_RANGE range);
+
+ HRESULT GetPairKerning(
+ UINT32 position,
+ BOOL *is_pairkerning_enabled,
+ DWRITE_TEXT_RANGE *range);
+
+ HRESULT SetCharacterSpacing(
+ FLOAT leading_spacing,
+ FLOAT trailing_spacing,
+ FLOAT minimum_advance_width,
+ DWRITE_TEXT_RANGE range);
+
+ HRESULT GetCharacterSpacing(
+ UINT32 position,
+ FLOAT* leading_spacing,
+ FLOAT* trailing_spacing,
+ FLOAT* minimum_advance_width,
+ [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range);
+};
+
+typedef enum DWRITE_TEXT_ANTIALIAS_MODE
+{
+ DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
+ DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE
+} DWRITE_TEXT_ANTIALIAS_MODE;
+
+[
+local,
+object,
+uuid(791e8298-3ef3-4230-9880-c9bdecc42064)
+]
+interface IDWriteBitmapRenderTarget1 : IDWriteBitmapRenderTarget
+{
+ DWRITE_TEXT_ANTIALIAS_MODE GetTextAntialiasMode();
+ HRESULT SetTextAntialiasMode(DWRITE_TEXT_ANTIALIAS_MODE mode);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h
new file mode 100644
index 00000000..88877051
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxdiag.h
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2004 Raphael Junqueira
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXDIAG_H
+#define __WINE_DXDIAG_H
+
+#include <ole2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * #defines and error codes
+ */
+#define DXDIAG_DX9_SDK_VERSION 111
+
+#define _FACDXDIAG 0x007
+#define MAKE_DXDIAGHRESULT( code ) MAKE_HRESULT( 1, _FACDXDIAG, code )
+
+/*
+ * DXDiag Errors
+ */
+#define DXDIAG_E_INSUFFICIENT_BUFFER MAKE_DXDIAGHRESULT(0x007A)
+
+
+/*****************************************************************************
+ * DXDiag structures Typedefs
+ */
+typedef struct _DXDIAG_INIT_PARAMS {
+ DWORD dwSize;
+ DWORD dwDxDiagHeaderVersion;
+ BOOL bAllowWHQLChecks;
+ VOID* pReserved;
+} DXDIAG_INIT_PARAMS;
+
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+/* CLSIDs */
+DEFINE_GUID(CLSID_DxDiagProvider, 0xA65B8071, 0x3BFE, 0x4213, 0x9A, 0x5B, 0x49, 0x1D, 0xA4, 0x46, 0x1C, 0xA7);
+
+/* IIDs */
+DEFINE_GUID(IID_IDxDiagProvider, 0x9C6B4CB0, 0x23F8, 0x49CC, 0xA3, 0xED, 0x45, 0xA5, 0x50, 0x00, 0xA6, 0xD2);
+DEFINE_GUID(IID_IDxDiagContainer, 0x7D0F462F, 0x4064, 0x4862, 0xBC, 0x7F, 0x93, 0x3E, 0x50, 0x58, 0xC1, 0x0F);
+
+/* typedef definitions */
+typedef struct IDxDiagProvider *LPDXDIAGPROVIDER, *PDXDIAGPROVIDER;
+typedef struct IDxDiagContainer *LPDXDIAGCONTAINER, *PDXDIAGCONTAINER;
+
+/*****************************************************************************
+ * IDxDiagContainer interface
+ */
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetProp
+#endif
+
+#define INTERFACE IDxDiagContainer
+DECLARE_INTERFACE_(IDxDiagContainer,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDxDiagContainer methods ***/
+ STDMETHOD(GetNumberOfChildContainers)(THIS_ DWORD* pdwCount) PURE;
+ STDMETHOD(EnumChildContainerNames)(THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE;
+ STDMETHOD(GetChildContainer)(THIS_ LPCWSTR pwszContainer, IDxDiagContainer** ppInstance) PURE;
+ STDMETHOD(GetNumberOfProps)(THIS_ DWORD* pdwCount) PURE;
+ STDMETHOD(EnumPropNames)(THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE;
+ STDMETHOD(GetProp)(THIS_ LPCWSTR pwszPropName, VARIANT* pvarProp) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDxDiagContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDxDiagContainer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDxDiagContainer_Release(p) (p)->lpVtbl->Release(p)
+/*** IDxDiagContainer methods ***/
+#define IDxDiagContainer_GetNumberOfChildContainers(p,a) (p)->lpVtbl->GetNumberOfChildContainers(p,a)
+#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c) (p)->lpVtbl->EnumChildContainerNames(p,a,b,c)
+#define IDxDiagContainer_GetChildContainer(p,a,b) (p)->lpVtbl->GetChildContainer(p,a,b)
+#define IDxDiagContainer_GetNumberOfProps(p,a) (p)->lpVtbl->GetNumberOfProps(p,a)
+#define IDxDiagContainer_EnumPropNames(p,a,b,c) (p)->lpVtbl->EnumPropNames(p,a,b,c)
+#define IDxDiagContainer_GetProp(p,a,b) (p)->lpVtbl->GetProp(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IDxDiagContainer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDxDiagContainer_AddRef(p) (p)->AddRef()
+#define IDxDiagContainer_Release(p) (p)->Release()
+/*** IDxDiagContainer methods ***/
+#define IDxDiagContainer_GetNumberOfChildContainers(p,a) (p)->GetNumberOfChildContainers(a)
+#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c) (p)->EnumChildContainerNames(a,b,c)
+#define IDxDiagContainer_GetChildContainer(p,a,b) (p)->GetChildContainer(a,b)
+#define IDxDiagContainer_GetNumberOfProps(p,a) (p)->GetNumberOfProps(a)
+#define IDxDiagContainer_EnumPropNames(p,a,b,c) (p)->EnumPropNames(a,b,c)
+#define IDxDiagContainer_GetProp(p,a,b) (p)->GetProp(a,b)
+#endif
+
+/*****************************************************************************
+ * IDxDiagProvider interface
+ */
+#define INTERFACE IDxDiagProvider
+DECLARE_INTERFACE_(IDxDiagProvider,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDxDiagProvider methods ***/
+ STDMETHOD(Initialize)(THIS_ DXDIAG_INIT_PARAMS* pParams) PURE;
+ STDMETHOD(GetRootContainer)(THIS_ IDxDiagContainer** ppInstance) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDxDiagProvider_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDxDiagProvider_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDxDiagProvider_Release(p) (p)->lpVtbl->Release(p)
+/*** IDxDiagProvider methods ***/
+#define IDxDiagProvider_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#define IDxDiagProvider_GetRootContainer(p,a) (p)->lpVtbl->GetRootContainer(p,a)
+#else
+/*** IUnknown methods ***/
+#define IDxDiagProvider_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IDxDiagProvider_AddRef(p) (p)->AddRef()
+#define IDxDiagProvider_Release(p) (p)->Release()
+/*** IDxDiagProvider methods ***/
+#define IDxDiagProvider_Initialize(p,a) (p)->Initialize(a)
+#define IDxDiagProvider_GetRootContainer(p,a) (p)->GetRootContainer(a)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h
new file mode 100644
index 00000000..9f52a7a3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr8.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXERR8_H
+#define __WINE_DXERR8_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+const char* WINAPI DXGetErrorString8A(HRESULT hr);
+const WCHAR* WINAPI DXGetErrorString8W(HRESULT hr);
+#define DXGetErrorString8 WINELIB_NAME_AW(DXGetErrorString8)
+
+const char* WINAPI DXGetErrorDescription8A(HRESULT hr);
+const WCHAR* WINAPI DXGetErrorDescription8W(HRESULT hr);
+#define DXGetErrorDescription8 WINELIB_NAME_AW(DXGetErrorDescription8)
+
+HRESULT WINAPI DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char* strMsg, BOOL bPopMsgBox);
+HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);
+#define DXTrace WINELIB_NAME_AW(DXTrace)
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXTRACE_MSG(str) DXTrace(__FILE__, (DWORD)__LINE__, 0, str, FALSE)
+#define DXTRACE_ERR(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE)
+#else
+#define DXTRACE_MSG(str) __MSABI_LONG(0)
+#define DXTRACE_ERR(str,hr) (hr)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) (hr)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DXERR8_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h
new file mode 100644
index 00000000..0d16d647
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxerr9.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXERR9_H
+#define __WINE_DXERR9_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+const char* WINAPI DXGetErrorString9A(HRESULT hr);
+const WCHAR* WINAPI DXGetErrorString9W(HRESULT hr);
+#define DXGetErrorString9 WINELIB_NAME_AW(DXGetErrorString9)
+
+const char* WINAPI DXGetErrorDescription9A(HRESULT hr);
+const WCHAR* WINAPI DXGetErrorDescription9W(HRESULT hr);
+#define DXGetErrorDescription9 WINELIB_NAME_AW(DXGetErrorDescription9)
+
+HRESULT WINAPI DXTraceA(const char* strFile, DWORD dwLine, HRESULT hr, const char* strMsg, BOOL bPopMsgBox);
+HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);
+#define DXTrace WINELIB_NAME_AW(DXTrace)
+
+#if defined(DEBUG) || defined(_DEBUG)
+#define DXTRACE_MSG(str) DXTrace(__FILE__, (DWORD)__LINE__, 0, str, FALSE)
+#define DXTRACE_ERR(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, TRUE)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace(__FILE__, (DWORD)__LINE__, hr, str, FALSE)
+#else
+#define DXTRACE_MSG(str) __MSABI_LONG(0)
+#define DXTRACE_ERR(str,hr) (hr)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) (hr)
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DXERR9_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h
new file mode 100644
index 00000000..f7e1fdc8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxfile.h
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DXFILE_H
+#define __WINE_DXFILE_H
+
+#include <objbase.h>
+#include <winnt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef DWORD DXFILEFORMAT;
+
+#define DXFILEFORMAT_BINARY 0
+#define DXFILEFORMAT_TEXT 1
+#define DXFILEFORMAT_COMPRESSED 2
+
+typedef DWORD DXFILELOADOPTIONS;
+
+#define DXFILELOAD_FROMFILE __MSABI_LONG(0x00)
+#define DXFILELOAD_FROMRESOURCE __MSABI_LONG(0x01)
+#define DXFILELOAD_FROMMEMORY __MSABI_LONG(0x02)
+#define DXFILELOAD_FROMSTREAM __MSABI_LONG(0x04)
+#define DXFILELOAD_FROMURL __MSABI_LONG(0x08)
+
+typedef struct _DXFILELOADRESOURCE {
+ HMODULE hModule;
+ LPCSTR /*LPCTSTR*/ lpName;
+ LPCSTR /*LPCTSTR*/ lpType;
+} DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE;
+
+typedef struct _DXFILELOADMEMORY {
+ LPVOID lpMemory;
+ DWORD dSize;
+} DXFILELOADMEMORY, *LPDXFILELOADMEMORY;
+
+typedef struct IDirectXFile *LPDIRECTXFILE;
+typedef struct IDirectXFileEnumObject *LPDIRECTXFILEENUMOBJECT;
+typedef struct IDirectXFileSaveObject *LPDIRECTXFILESAVEOBJECT;
+typedef struct IDirectXFileObject *LPDIRECTXFILEOBJECT;
+typedef struct IDirectXFileData *LPDIRECTXFILEDATA;
+typedef struct IDirectXFileDataReference *LPDIRECTXFILEDATAREFERENCE;
+typedef struct IDirectXFileBinary *LPDIRECTXFILEBINARY;
+
+STDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile);
+
+#define INTERFACE IDirectXFile
+DECLARE_INTERFACE_(IDirectXFile,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectXFile methods ***/
+ STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS, LPDIRECTXFILEENUMOBJECT *) PURE;
+ STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT, LPDIRECTXFILESAVEOBJECT *) PURE;
+ STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFile_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFile_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFile methods ***/
+#define IDirectXFile_CreateEnumObject(p,a,b,c) (p)->lpVtbl->CreateEnumObject(p,a,b,c)
+#define IDirectXFile_CreateSaveObject(p,a,b,c) (p)->lpVtbl->CreateSaveObject(p,a,b,c)
+#define IDirectXFile_RegisterTemplates(p,a,b) (p)->lpVtbl->RegisterTemplates(p,a,b)
+#endif
+
+#define INTERFACE IDirectXFileEnumObject
+DECLARE_INTERFACE_(IDirectXFileEnumObject,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectXFileEnumObject methods ***/
+ STDMETHOD(GetNextDataObject) (THIS_ LPDIRECTXFILEDATA *) PURE;
+ STDMETHOD(GetDataObjectById) (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE;
+ STDMETHOD(GetDataObjectByName) (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFileEnumObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileEnumObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFileEnumObject_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFileEnumObject methods ***/
+#define IDirectXFileEnumObject_GetNextDataObject(p,a) (p)->lpVtbl->GetNextDataObject(p,a)
+#define IDirectXFileEnumObject_GetDataObjectById(p,a,b) (p)->lpVtbl->GetDataObjectById(p,a,b)
+#define IDirectXFileEnumObject_GetDataObjectByName(p,a,b) (p)->lpVtbl->GetDataObjectByName(p,a,b)
+#endif
+
+#define INTERFACE IDirectXFileSaveObject
+DECLARE_INTERFACE_(IDirectXFileSaveObject,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectXFileSaveObject methods ***/
+ STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE;
+ STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *, DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE;
+ STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFileSaveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileSaveObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFileSaveObject_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFileSaveObject methods ***/
+#define IDirectXFileSaveObject_SaveTemplates(p,a,b) (p)->lpVtbl->SaveTemplates(p,a,b)
+#define IDirectXFileSaveObject_CreateDataObject(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDataObject(p,a,b,c,d,e,f)
+#define IDirectXFileSaveObject_SaveData(p,a) (p)->lpVtbl->SaveData(p,a)
+#endif
+
+#define IUNKNOWN_METHODS(kind) \
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) kind; \
+ STDMETHOD_(ULONG,AddRef)(THIS) kind; \
+ STDMETHOD_(ULONG,Release)(THIS) kind
+
+#define IDIRECTXFILEOBJECT_METHODS(kind) \
+ STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) kind; \
+ STDMETHOD(GetId) (THIS_ LPGUID) kind
+
+#define INTERFACE IDirectXFileObject
+DECLARE_INTERFACE_(IDirectXFileObject,IUnknown)
+{
+ IUNKNOWN_METHODS(PURE);
+ IDIRECTXFILEOBJECT_METHODS(PURE);
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFileObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFileObject_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFileObject methods ***/
+#define IDirectXFileObject_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileObject_GetId(p,a) (p)->lpVtbl->GetId(p,a)
+#endif
+
+#define INTERFACE IDirectXFileData
+DECLARE_INTERFACE_(IDirectXFileData,IDirectXFileObject)
+{
+ IUNKNOWN_METHODS(PURE);
+ IDIRECTXFILEOBJECT_METHODS(PURE);
+ /*** IDirectXFileData methods ***/
+ STDMETHOD(GetData) (THIS_ LPCSTR, DWORD *, void **) PURE;
+ STDMETHOD(GetType) (THIS_ const GUID **) PURE;
+ STDMETHOD(GetNextObject) (THIS_ LPDIRECTXFILEOBJECT *) PURE;
+ STDMETHOD(AddDataObject) (THIS_ LPDIRECTXFILEDATA) PURE;
+ STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE;
+ STDMETHOD(AddBinaryObject) (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFileData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileData_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFileData_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFileObject methods ***/
+#define IDirectXFileData_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileData_GetId(p,a) (p)->lpVtbl->GetId(p,a)
+ /*** IDirectXFileData methods ***/
+#define IDirectXFileData_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)
+#define IDirectXFileData_GetType(p,a) (p)->lpVtbl->GetType(p,a)
+#define IDirectXFileData_GetNextObject(p,a) (p)->lpVtbl->GetNextObject(p,a)
+#define IDirectXFileData_AddDataObject(p,a) (p)->lpVtbl->AddDataObject(p,a)
+#define IDirectXFileData_AddDataReference(p,a,b) (p)->lpVtbl->AddDataReference(p,a,b)
+#define IDirectXFileData_AddBinaryObject(p,a,b,c,d,e) (p)->lpVtbl->AddBinaryObject(p,a,b,c,d,e)
+#endif
+
+#define INTERFACE IDirectXFileDataReference
+DECLARE_INTERFACE_(IDirectXFileDataReference,IDirectXFileObject)
+{
+ IUNKNOWN_METHODS(PURE);
+ IDIRECTXFILEOBJECT_METHODS(PURE);
+ /*** IDirectXFileDataReference methods ***/
+ STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFileDataReference_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileDataReference_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFileDataReference_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFileObject methods ***/
+#define IDirectXFileDataReference_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileDataReference_GetId(p,a) (p)->lpVtbl->GetId(p,a)
+ /*** IDirectXFileDataReference methods ***/
+#define IDirectXFileDataReference_Resolve(p,a) (p)->lpVtbl->Resolve(p,a)
+#endif
+
+#define INTERFACE IDirectXFileBinary
+DECLARE_INTERFACE_(IDirectXFileBinary,IDirectXFileObject)
+{
+ IUNKNOWN_METHODS(PURE);
+ IDIRECTXFILEOBJECT_METHODS(PURE);
+ /*** IDirectXFileBinary methods ***/
+ STDMETHOD(GetSize) (THIS_ DWORD *) PURE;
+ STDMETHOD(GetMimeType) (THIS_ LPCSTR *) PURE;
+ STDMETHOD(Read) (THIS_ LPVOID, DWORD, LPDWORD) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IDirectXFileBinary_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectXFileBinary_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectXFileBinary_Release(p) (p)->lpVtbl->Release(p)
+ /*** IDirectXFileObject methods ***/
+#define IDirectXFileBinary_GetName(p,a,b) (p)->lpVtbl->GetName(p,a,b)
+#define IDirectXFileBinary_GetId(p,a) (p)->lpVtbl->GetId(p,a)
+ /*** IDirectXFileBinary methods ***/
+#define IDirectXFileBinary_GetSize(p,a) (p)->lpVtbl->GetSize(p,a)
+#define IDirectXFileBinary_GetMimeType(p,a) (p)->lpVtbl->GetMimeType(p,a)
+#define IDirectXFileBinary_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c)
+#endif
+
+/* DirectXFile Object CLSID */
+DEFINE_GUID(CLSID_CDirectXFile, 0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
+
+/* DirectX File Interface GUIDs */
+DEFINE_GUID(IID_IDirectXFile, 0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileEnumObject, 0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileSaveObject, 0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileObject, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileData, 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileDataReference, 0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+DEFINE_GUID(IID_IDirectXFileBinary, 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+/* DirectX File Header template's GUID */
+DEFINE_GUID(TID_DXFILEHeader, 0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+/* DirectX File errors */
+#define _FACDD 0x876
+#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code )
+
+#define DXFILE_OK 0
+
+#define DXFILEERR_BADOBJECT MAKE_DDHRESULT(850)
+#define DXFILEERR_BADVALUE MAKE_DDHRESULT(851)
+#define DXFILEERR_BADTYPE MAKE_DDHRESULT(852)
+#define DXFILEERR_BADSTREAMHANDLE MAKE_DDHRESULT(853)
+#define DXFILEERR_BADALLOC MAKE_DDHRESULT(854)
+#define DXFILEERR_NOTFOUND MAKE_DDHRESULT(855)
+#define DXFILEERR_NOTDONEYET MAKE_DDHRESULT(856)
+#define DXFILEERR_FILENOTFOUND MAKE_DDHRESULT(857)
+#define DXFILEERR_RESOURCENOTFOUND MAKE_DDHRESULT(858)
+#define DXFILEERR_URLNOTFOUND MAKE_DDHRESULT(859)
+#define DXFILEERR_BADRESOURCE MAKE_DDHRESULT(860)
+#define DXFILEERR_BADFILETYPE MAKE_DDHRESULT(861)
+#define DXFILEERR_BADFILEVERSION MAKE_DDHRESULT(862)
+#define DXFILEERR_BADFILEFLOATSIZE MAKE_DDHRESULT(863)
+#define DXFILEERR_BADFILECOMPRESSIONTYPE MAKE_DDHRESULT(864)
+#define DXFILEERR_BADFILE MAKE_DDHRESULT(865)
+#define DXFILEERR_PARSEERROR MAKE_DDHRESULT(866)
+#define DXFILEERR_NOTEMPLATE MAKE_DDHRESULT(867)
+#define DXFILEERR_BADARRAYSIZE MAKE_DDHRESULT(868)
+#define DXFILEERR_BADDATAREFERENCE MAKE_DDHRESULT(869)
+#define DXFILEERR_INTERNALERROR MAKE_DDHRESULT(870)
+#define DXFILEERR_NOMOREOBJECTS MAKE_DDHRESULT(871)
+#define DXFILEERR_BADINTRINSICS MAKE_DDHRESULT(872)
+#define DXFILEERR_NOMORESTREAMHANDLES MAKE_DDHRESULT(873)
+#define DXFILEERR_NOMOREDATA MAKE_DDHRESULT(874)
+#define DXFILEERR_BADCACHEFILE MAKE_DDHRESULT(875)
+#define DXFILEERR_NOINTERNET MAKE_DDHRESULT(876)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_DXFILE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl
new file mode 100644
index 00000000..32ba3f86
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgi.idl
@@ -0,0 +1,465 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "dxgitype.h";
+
+const UINT _FACDXGI = 0x87a;
+
+cpp_quote("#define MAKE_DXGI_STATUS(x) MAKE_HRESULT(0, _FACDXGI, x)")
+cpp_quote("#define DXGI_STATUS_OCCLUDED MAKE_DXGI_STATUS(1)")
+cpp_quote("#define DXGI_STATUS_CLIPPED MAKE_DXGI_STATUS(2)")
+cpp_quote("#define DXGI_STATUS_NO_REDIRECTION MAKE_DXGI_STATUS(4)")
+cpp_quote("#define DXGI_STATUS_NO_DESKTOP_ACCESS MAKE_DXGI_STATUS(5)")
+cpp_quote("#define DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE MAKE_DXGI_STATUS(6)")
+cpp_quote("#define DXGI_STATUS_MODE_CHANGED MAKE_DXGI_STATUS(7)")
+cpp_quote("#define DXGI_STATUS_MODE_CHANGE_IN_PROGRESS MAKE_DXGI_STATUS(8)")
+
+cpp_quote("#define MAKE_DXGI_HRESULT(x) MAKE_HRESULT(1, _FACDXGI, x)")
+cpp_quote("#define DXGI_ERROR_INVALID_CALL MAKE_DXGI_HRESULT(1)")
+cpp_quote("#define DXGI_ERROR_NOT_FOUND MAKE_DXGI_HRESULT(2)")
+cpp_quote("#define DXGI_ERROR_MORE_DATA MAKE_DXGI_HRESULT(3)")
+cpp_quote("#define DXGI_ERROR_UNSUPPORTED MAKE_DXGI_HRESULT(4)")
+cpp_quote("#define DXGI_ERROR_DEVICE_REMOVED MAKE_DXGI_HRESULT(5)")
+cpp_quote("#define DXGI_ERROR_DEVICE_HUNG MAKE_DXGI_HRESULT(6)")
+cpp_quote("#define DXGI_ERROR_DEVICE_RESET MAKE_DXGI_HRESULT(7)")
+cpp_quote("#define DXGI_ERROR_WAS_STILL_DRAWING MAKE_DXGI_HRESULT(10)")
+cpp_quote("#define DXGI_ERROR_FRAME_STATISTICS_DISJOINT MAKE_DXGI_HRESULT(11)")
+cpp_quote("#define DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE MAKE_DXGI_HRESULT(12)")
+cpp_quote("#define DXGI_ERROR_DRIVER_INTERNAL_ERROR MAKE_DXGI_HRESULT(32)")
+cpp_quote("#define DXGI_ERROR_NONEXCLUSIVE MAKE_DXGI_HRESULT(33)")
+cpp_quote("#define DXGI_ERROR_NOT_CURRENTLY_AVAILABLE MAKE_DXGI_HRESULT(34)")
+
+cpp_quote("#if 0")
+typedef HANDLE HMONITOR;
+typedef struct _LUID {
+ DWORD LowPart;
+ LONG HighPart;
+} LUID, *PLUID;
+cpp_quote("#endif")
+
+typedef UINT DXGI_USAGE;
+const DXGI_USAGE DXGI_USAGE_SHADER_INPUT = 0x10L;
+const DXGI_USAGE DXGI_USAGE_RENDER_TARGET_OUTPUT = 0x20L;
+const DXGI_USAGE DXGI_USAGE_BACK_BUFFER = 0x40L;
+const DXGI_USAGE DXGI_USAGE_SHARED = 0x80L;
+const DXGI_USAGE DXGI_USAGE_READ_ONLY = 0x100L;
+
+const UINT DXGI_ENUM_MODES_INTERLACED = 1;
+const UINT DXGI_ENUM_MODES_SCALING = 2;
+
+typedef enum DXGI_SWAP_EFFECT {
+ DXGI_SWAP_EFFECT_DISCARD = 0,
+ DXGI_SWAP_EFFECT_SEQUENTIAL = 1,
+} DXGI_SWAP_EFFECT;
+
+typedef enum DXGI_RESIDENCY {
+ DXGI_RESIDENCY_FULLY_RESIDENT = 1,
+ DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2,
+ DXGI_RESIDENCY_EVICTED_TO_DISK = 3,
+} DXGI_RESIDENCY;
+
+typedef struct DXGI_SURFACE_DESC {
+ UINT Width;
+ UINT Height;
+ DXGI_FORMAT Format;
+ DXGI_SAMPLE_DESC SampleDesc;
+} DXGI_SURFACE_DESC;
+
+typedef struct DXGI_MAPPED_RECT {
+ INT Pitch;
+ BYTE *pBits;
+} DXGI_MAPPED_RECT;
+
+typedef struct DXGI_OUTPUT_DESC {
+ WCHAR DeviceName[32];
+ RECT DesktopCoordinates;
+ BOOL AttachedToDesktop;
+ DXGI_MODE_ROTATION Rotation;
+ HMONITOR Monitor;
+} DXGI_OUTPUT_DESC;
+
+typedef struct DXGI_FRAME_STATISTICS {
+ UINT PresentCount;
+ UINT PresentRefreshCount;
+ UINT SyncRefreshCount;
+ LARGE_INTEGER SyncQPCTime;
+ LARGE_INTEGER SyncGPUTime;
+} DXGI_FRAME_STATISTICS;
+
+typedef struct DXGI_ADAPTER_DESC {
+ WCHAR Description[128];
+ UINT VendorId;
+ UINT DeviceId;
+ UINT SubSysId;
+ UINT Revision;
+ SIZE_T DedicatedVideoMemory;
+ SIZE_T DedicatedSystemMemory;
+ SIZE_T SharedSystemMemory;
+ LUID AdapterLuid;
+} DXGI_ADAPTER_DESC;
+
+typedef enum DXGI_SWAP_CHAIN_FLAG {
+ DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1,
+ DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2,
+ DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE = 4
+} DXGI_SWAP_CHAIN_FLAG;
+
+typedef struct DXGI_SWAP_CHAIN_DESC {
+ DXGI_MODE_DESC BufferDesc;
+ DXGI_SAMPLE_DESC SampleDesc;
+ DXGI_USAGE BufferUsage;
+ UINT BufferCount;
+ HWND OutputWindow;
+ BOOL Windowed;
+ DXGI_SWAP_EFFECT SwapEffect;
+ UINT Flags;
+} DXGI_SWAP_CHAIN_DESC;
+
+typedef struct DXGI_SHARED_RESOURCE {
+ HANDLE Handle;
+} DXGI_SHARED_RESOURCE;
+
+[
+ object,
+ local,
+ uuid(aec22fb8-76f3-4639-9be0-28eb43a67a2e)
+]
+interface IDXGIObject : IUnknown
+{
+ HRESULT SetPrivateData(
+ [in] REFGUID guid,
+ [in] UINT data_size,
+ [in] const void *data
+ );
+ HRESULT SetPrivateDataInterface(
+ [in] REFGUID guid,
+ [in] const IUnknown *object
+ );
+ HRESULT GetPrivateData(
+ [in] REFGUID guid,
+ [in, out] UINT *data_size,
+ [out] void *data
+ );
+ HRESULT GetParent(
+ [in] REFIID riid,
+ [out] void **parent
+ );
+}
+
+[
+ object,
+ local,
+ uuid(3d3e0379-f9de-4d58-bb6c-18d62992f1a6)
+]
+interface IDXGIDeviceSubObject : IDXGIObject
+{
+ HRESULT GetDevice(
+ [in] REFIID riid,
+ [out] void **device
+ );
+}
+
+[
+ object,
+ uuid(035f3ab4-482e-4e50-b41f-8a7f8bd8960b),
+ local,
+ pointer_default(unique)
+]
+interface IDXGIResource : IDXGIDeviceSubObject
+{
+ HRESULT GetSharedHandle([out] HANDLE *pSharedHandle);
+ HRESULT GetUsage([out] DXGI_USAGE *pUsage);
+ HRESULT SetEvictionPriority([in] UINT EvictionPriority);
+ HRESULT GetEvictionPriority([out, retval] UINT *pEvictionPriority);
+}
+
+[
+ object,
+ uuid(9d8e1289-d7b3-465f-8126-250e349af85d),
+ local,
+ pointer_default(unique)
+]
+interface IDXGIKeyedMutex : IDXGIDeviceSubObject
+{
+ HRESULT AcquireSync([in] UINT64 Key, [in] DWORD dwMilliseconds);
+ HRESULT ReleaseSync([in] UINT64 Key);
+}
+
+[
+ object,
+ local,
+ uuid(cafcb56c-6ac3-4889-bf47-9e23bbd260ec)
+]
+interface IDXGISurface : IDXGIDeviceSubObject
+{
+ HRESULT GetDesc(
+ [out] DXGI_SURFACE_DESC *desc
+ );
+ HRESULT Map(
+ [out] DXGI_MAPPED_RECT *mapped_rect,
+ [in] UINT flags
+ );
+ HRESULT Unmap(
+ );
+}
+
+[
+ object,
+ local,
+ uuid(ae02eedb-c735-4690-8d52-5a8dc20213aa)
+]
+interface IDXGIOutput : IDXGIObject
+{
+ HRESULT GetDesc(
+ [out] DXGI_OUTPUT_DESC *desc
+ );
+ HRESULT GetDisplayModeList(
+ [in] DXGI_FORMAT format,
+ [in] UINT flags,
+ [in, out] UINT *mode_count,
+ [out] DXGI_MODE_DESC *desc
+ );
+ HRESULT FindClosestMatchingMode(
+ [in] const DXGI_MODE_DESC *mode,
+ [out] DXGI_MODE_DESC *closest_match,
+ [in] IUnknown *device
+ );
+ HRESULT WaitForVBlank(
+ );
+ HRESULT TakeOwnership(
+ [in] IUnknown *device,
+ [in] BOOL exclusive
+ );
+ void ReleaseOwnership(
+ );
+ HRESULT GetGammaControlCapabilities(
+ [out] DXGI_GAMMA_CONTROL_CAPABILITIES *gamma_caps
+ );
+ HRESULT SetGammaControl(
+ [in] const DXGI_GAMMA_CONTROL *gamma_control
+ );
+ HRESULT GetGammaControl(
+ [out] DXGI_GAMMA_CONTROL *gamma_control
+ );
+ HRESULT SetDisplaySurface(
+ [in] IDXGISurface *surface
+ );
+ HRESULT GetDisplaySurfaceData(
+ [in] IDXGISurface *surface
+ );
+ HRESULT GetFrameStatistics(
+ [out] DXGI_FRAME_STATISTICS *stats
+ );
+}
+
+[
+ object,
+ local,
+ uuid(2411e7e1-12ac-4ccf-bd14-9798e8534dc0)
+]
+interface IDXGIAdapter : IDXGIObject
+{
+ HRESULT EnumOutputs(
+ [in] UINT output_idx,
+ [in, out] IDXGIOutput **output
+ );
+ HRESULT GetDesc(
+ [out] DXGI_ADAPTER_DESC *desc
+ );
+ HRESULT CheckInterfaceSupport(
+ [in] REFGUID guid,
+ [out] LARGE_INTEGER *umd_version
+ );
+}
+
+cpp_quote("#define DXGI_MAX_SWAP_CHAIN_BUFFERS (16)")
+
+cpp_quote("#define DXGI_PRESENT_TEST __MSABI_LONG(0x00000001U)")
+cpp_quote("#define DXGI_PRESENT_DO_NOT_SEQUENCE __MSABI_LONG(0x00000002U)")
+cpp_quote("#define DXGI_PRESENT_RESTART __MSABI_LONG(0x00000004U)")
+cpp_quote("#define DXGI_PRESENT_DO_NOT_WAIT __MSABI_LONG(0x00000008U)")
+cpp_quote("#define DXGI_PRESENT_STEREO_PREFER_RIGHT __MSABI_LONG(0x00000010U)")
+cpp_quote("#define DXGI_PRESENT_STEREO_TEMPORARY_MONO __MSABI_LONG(0x00000020U)")
+cpp_quote("#define DXGI_PRESENT_RESTRICT_TO_OUTPUT __MSABI_LONG(0x00000040U)")
+
+[
+ object,
+ local,
+ uuid(310d36a0-d2e7-4c0a-aa04-6a9d23b8886a)
+]
+interface IDXGISwapChain : IDXGIDeviceSubObject
+{
+ HRESULT Present(
+ [in] UINT sync_interval,
+ [in] UINT flags
+ );
+ HRESULT GetBuffer(
+ [in] UINT buffer_idx,
+ [in] REFIID riid,
+ [in, out] void **surface
+ );
+ HRESULT SetFullscreenState(
+ [in] BOOL fullscreen,
+ [in] IDXGIOutput *target
+ );
+ HRESULT GetFullscreenState(
+ [out] BOOL *fullscreen,
+ [out] IDXGIOutput **target
+ );
+ HRESULT GetDesc(
+ [out] DXGI_SWAP_CHAIN_DESC *desc
+ );
+ HRESULT ResizeBuffers(
+ [in] UINT buffer_count,
+ [in] UINT width,
+ [in] UINT height,
+ [in] DXGI_FORMAT format,
+ [in] UINT flags
+ );
+ HRESULT ResizeTarget(
+ [in] const DXGI_MODE_DESC *target_mode_desc
+ );
+ HRESULT GetContainingOutput(
+ [out] IDXGIOutput **output
+ );
+ HRESULT GetFrameStatistics(
+ [out] DXGI_FRAME_STATISTICS *stats
+ );
+ HRESULT GetLastPresentCount(
+ [out] UINT *last_present_count
+ );
+}
+
+cpp_quote("#define DXGI_MWA_NO_WINDOW_CHANGES 0x1")
+cpp_quote("#define DXGI_MWA_NO_ALT_ENTER 0x2")
+cpp_quote("#define DXGI_MWA_NO_PRINT_SCREEN 0x4")
+cpp_quote("#define DXGI_MWA_VALID 0x7")
+
+[
+ object,
+ local,
+ uuid(7b7166ec-21c7-44ae-b21a-c9ae321ae369)
+]
+interface IDXGIFactory : IDXGIObject
+{
+ HRESULT EnumAdapters(
+ [in] UINT adapter_idx,
+ [out] IDXGIAdapter **adapter
+ );
+ HRESULT MakeWindowAssociation(
+ [in] HWND window,
+ [in] UINT flags
+ );
+ HRESULT GetWindowAssociation(
+ [in] HWND *window
+ );
+ HRESULT CreateSwapChain(
+ [in] IUnknown *device,
+ [in] DXGI_SWAP_CHAIN_DESC *desc,
+ [out] IDXGISwapChain **swapchain
+ );
+ HRESULT CreateSoftwareAdapter(
+ [in] HMODULE swrast,
+ [out] IDXGIAdapter **adapter
+ );
+}
+
+[local] HRESULT __stdcall CreateDXGIFactory(REFIID riid, void **factory);
+
+[
+ object,
+ local,
+ uuid(54ec77fa-1377-44e6-8c32-88fd5f44c84c)
+]
+interface IDXGIDevice : IDXGIObject
+{
+ HRESULT GetAdapter(
+ [out] IDXGIAdapter **adapter
+ );
+ HRESULT CreateSurface(
+ [in] const DXGI_SURFACE_DESC *desc,
+ [in] UINT surface_count,
+ [in] DXGI_USAGE usage,
+ [in] const DXGI_SHARED_RESOURCE *shared_resource,
+ [out] IDXGISurface **surface
+ );
+ HRESULT QueryResourceResidency(
+ [in] IUnknown *const *resources,
+ [out] DXGI_RESIDENCY *residency,
+ [in] UINT resource_count
+ );
+ HRESULT SetGPUThreadPriority(
+ [in] INT priority
+ );
+ HRESULT GetGPUThreadPriority(
+ [out] INT *priority
+ );
+}
+
+typedef enum DXGI_ADAPTER_FLAG {
+ DXGI_ADAPTER_FLAG_NONE = 0,
+ DXGI_ADAPTER_FLAG_REMOTE = 1,
+ DXGI_ADAPTER_FLAG_FORCE_DWORD = 0xFFFFFFFF
+} DXGI_ADAPTER_FLAG;
+
+typedef struct DXGI_ADAPTER_DESC1 {
+ WCHAR Description[128];
+ UINT VendorId;
+ UINT DeviceId;
+ UINT SubSysId;
+ UINT Revision;
+ SIZE_T DedicatedVideoMemory;
+ SIZE_T DedicatedSystemMemory;
+ SIZE_T SharedSystemMemory;
+ LUID AdapterLuid;
+ UINT Flags;
+} DXGI_ADAPTER_DESC1;
+
+[
+ object,
+ uuid(29038f61-3839-4626-91fd-086879011a05),
+ local,
+ pointer_default(unique)
+]
+interface IDXGIAdapter1 : IDXGIAdapter
+{
+ HRESULT GetDesc1([out] DXGI_ADAPTER_DESC1 *pDesc);
+}
+
+[
+ object,
+ uuid(770aae78-f26f-4dba-a829-253c83d1b387),
+ local,
+ pointer_default(unique)
+ ]
+interface IDXGIFactory1 : IDXGIFactory
+{
+ HRESULT EnumAdapters1([in] UINT Adapter, [out] IDXGIAdapter1 **ppAdapter);
+ BOOL IsCurrent();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h
new file mode 100644
index 00000000..0c731b5c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgiformat.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __dxgiformat_h__
+#define __dxgiformat_h__
+
+#define DXGI_FORMAT_DEFINED 1
+
+typedef enum DXGI_FORMAT {
+ DXGI_FORMAT_UNKNOWN = 0,
+ DXGI_FORMAT_R32G32B32A32_TYPELESS = 1,
+ DXGI_FORMAT_R32G32B32A32_FLOAT = 2,
+ DXGI_FORMAT_R32G32B32A32_UINT = 3,
+ DXGI_FORMAT_R32G32B32A32_SINT = 4,
+ DXGI_FORMAT_R32G32B32_TYPELESS = 5,
+ DXGI_FORMAT_R32G32B32_FLOAT = 6,
+ DXGI_FORMAT_R32G32B32_UINT = 7,
+ DXGI_FORMAT_R32G32B32_SINT = 8,
+ DXGI_FORMAT_R16G16B16A16_TYPELESS = 9,
+ DXGI_FORMAT_R16G16B16A16_FLOAT = 10,
+ DXGI_FORMAT_R16G16B16A16_UNORM = 11,
+ DXGI_FORMAT_R16G16B16A16_UINT = 12,
+ DXGI_FORMAT_R16G16B16A16_SNORM = 13,
+ DXGI_FORMAT_R16G16B16A16_SINT = 14,
+ DXGI_FORMAT_R32G32_TYPELESS = 15,
+ DXGI_FORMAT_R32G32_FLOAT = 16,
+ DXGI_FORMAT_R32G32_UINT = 17,
+ DXGI_FORMAT_R32G32_SINT = 18,
+ DXGI_FORMAT_R32G8X24_TYPELESS = 19,
+ DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20,
+ DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS= 21,
+ DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
+ DXGI_FORMAT_R10G10B10A2_TYPELESS = 23,
+ DXGI_FORMAT_R10G10B10A2_UNORM = 24,
+ DXGI_FORMAT_R10G10B10A2_UINT = 25,
+ DXGI_FORMAT_R11G11B10_FLOAT = 26,
+ DXGI_FORMAT_R8G8B8A8_TYPELESS = 27,
+ DXGI_FORMAT_R8G8B8A8_UNORM = 28,
+ DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29,
+ DXGI_FORMAT_R8G8B8A8_UINT = 30,
+ DXGI_FORMAT_R8G8B8A8_SNORM = 31,
+ DXGI_FORMAT_R8G8B8A8_SINT = 32,
+ DXGI_FORMAT_R16G16_TYPELESS = 33,
+ DXGI_FORMAT_R16G16_FLOAT = 34,
+ DXGI_FORMAT_R16G16_UNORM = 35,
+ DXGI_FORMAT_R16G16_UINT = 36,
+ DXGI_FORMAT_R16G16_SNORM = 37,
+ DXGI_FORMAT_R16G16_SINT = 38,
+ DXGI_FORMAT_R32_TYPELESS = 39,
+ DXGI_FORMAT_D32_FLOAT = 40,
+ DXGI_FORMAT_R32_FLOAT = 41,
+ DXGI_FORMAT_R32_UINT = 42,
+ DXGI_FORMAT_R32_SINT = 43,
+ DXGI_FORMAT_R24G8_TYPELESS = 44,
+ DXGI_FORMAT_D24_UNORM_S8_UINT = 45,
+ DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46,
+ DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47,
+ DXGI_FORMAT_R8G8_TYPELESS = 48,
+ DXGI_FORMAT_R8G8_UNORM = 49,
+ DXGI_FORMAT_R8G8_UINT = 50,
+ DXGI_FORMAT_R8G8_SNORM = 51,
+ DXGI_FORMAT_R8G8_SINT = 52,
+ DXGI_FORMAT_R16_TYPELESS = 53,
+ DXGI_FORMAT_R16_FLOAT = 54,
+ DXGI_FORMAT_D16_UNORM = 55,
+ DXGI_FORMAT_R16_UNORM = 56,
+ DXGI_FORMAT_R16_UINT = 57,
+ DXGI_FORMAT_R16_SNORM = 58,
+ DXGI_FORMAT_R16_SINT = 59,
+ DXGI_FORMAT_R8_TYPELESS = 60,
+ DXGI_FORMAT_R8_UNORM = 61,
+ DXGI_FORMAT_R8_UINT = 62,
+ DXGI_FORMAT_R8_SNORM = 63,
+ DXGI_FORMAT_R8_SINT = 64,
+ DXGI_FORMAT_A8_UNORM = 65,
+ DXGI_FORMAT_R1_UNORM = 66,
+ DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67,
+ DXGI_FORMAT_R8G8_B8G8_UNORM = 68,
+ DXGI_FORMAT_G8R8_G8B8_UNORM = 69,
+ DXGI_FORMAT_BC1_TYPELESS = 70,
+ DXGI_FORMAT_BC1_UNORM = 71,
+ DXGI_FORMAT_BC1_UNORM_SRGB = 72,
+ DXGI_FORMAT_BC2_TYPELESS = 73,
+ DXGI_FORMAT_BC2_UNORM = 74,
+ DXGI_FORMAT_BC2_UNORM_SRGB = 75,
+ DXGI_FORMAT_BC3_TYPELESS = 76,
+ DXGI_FORMAT_BC3_UNORM = 77,
+ DXGI_FORMAT_BC3_UNORM_SRGB = 78,
+ DXGI_FORMAT_BC4_TYPELESS = 79,
+ DXGI_FORMAT_BC4_UNORM = 80,
+ DXGI_FORMAT_BC4_SNORM = 81,
+ DXGI_FORMAT_BC5_TYPELESS = 82,
+ DXGI_FORMAT_BC5_UNORM = 83,
+ DXGI_FORMAT_BC5_SNORM = 84,
+ DXGI_FORMAT_B5G6R5_UNORM = 85,
+ DXGI_FORMAT_B5G5R5A1_UNORM = 86,
+ DXGI_FORMAT_B8G8R8A8_UNORM = 87,
+ DXGI_FORMAT_B8G8R8X8_UNORM = 88,
+ DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
+ DXGI_FORMAT_B8G8R8A8_TYPELESS = 90,
+ DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91,
+ DXGI_FORMAT_B8G8R8X8_TYPELESS = 92,
+ DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,
+ DXGI_FORMAT_BC6H_TYPELESS = 94,
+ DXGI_FORMAT_BC6H_UF16 = 95,
+ DXGI_FORMAT_BC6H_SF16 = 96,
+ DXGI_FORMAT_BC7_TYPELESS = 97,
+ DXGI_FORMAT_BC7_UNORM = 98,
+ DXGI_FORMAT_BC7_UNORM_SRGB = 99,
+ DXGI_FORMAT_AYUV = 100,
+ DXGI_FORMAT_Y410 = 101,
+ DXGI_FORMAT_Y416 = 102,
+ DXGI_FORMAT_NV12 = 103,
+ DXGI_FORMAT_P010 = 104,
+ DXGI_FORMAT_P016 = 105,
+ DXGI_FORMAT_420_OPAQUE = 106,
+ DXGI_FORMAT_YUY2 = 107,
+ DXGI_FORMAT_Y210 = 108,
+ DXGI_FORMAT_Y216 = 109,
+ DXGI_FORMAT_NV11 = 110,
+ DXGI_FORMAT_AI44 = 111,
+ DXGI_FORMAT_IA44 = 112,
+ DXGI_FORMAT_P8 = 113,
+ DXGI_FORMAT_A8P8 = 114,
+ DXGI_FORMAT_B4G4R4A4_UNORM = 115,
+ DXGI_FORMAT_FORCE_UINT = 0xffffffff
+} DXGI_FORMAT;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h
new file mode 100644
index 00000000..9e1562af
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dxgitype.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2007 Andras Kovacs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __dxgitype_h__
+#define __dxgitype_h__
+
+#include "dxgiformat.h"
+
+typedef struct DXGI_SAMPLE_DESC {
+ UINT Count;
+ UINT Quality;
+} DXGI_SAMPLE_DESC;
+
+typedef enum DXGI_MODE_ROTATION {
+ DXGI_MODE_ROTATION_UNSPECIFIED = 0,
+ DXGI_MODE_ROTATION_IDENTITY = 1,
+ DXGI_MODE_ROTATION_ROTATE90 = 2,
+ DXGI_MODE_ROTATION_ROTATE180 = 3,
+ DXGI_MODE_ROTATION_ROTATE270 = 4,
+} DXGI_MODE_ROTATION;
+
+typedef enum DXGI_MODE_SCANLINE_ORDER {
+ DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED = 0,
+ DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE = 1,
+ DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST = 2,
+ DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST = 3,
+} DXGI_MODE_SCANLINE_ORDER;
+
+typedef enum DXGI_MODE_SCALING {
+ DXGI_MODE_SCALING_UNSPECIFIED = 0,
+ DXGI_MODE_SCALING_CENTERED = 1,
+ DXGI_MODE_SCALING_STRETCHED = 2,
+} DXGI_MODE_SCALING;
+
+typedef struct DXGI_RATIONAL {
+ UINT Numerator;
+ UINT Denominator;
+} DXGI_RATIONAL;
+
+typedef struct DXGI_MODE_DESC {
+ UINT Width;
+ UINT Height;
+ DXGI_RATIONAL RefreshRate;
+ DXGI_FORMAT Format;
+ DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
+ DXGI_MODE_SCALING Scaling;
+} DXGI_MODE_DESC;
+
+typedef struct DXGI_GAMMA_CONTROL_CAPABILITIES {
+ BOOL ScaleAndOffsetSupported;
+ float MaxConvertedValue;
+ float MinConvertedValue;
+ UINT NumGammaControlPoints;
+ float ControlPointPositions[1025];
+} DXGI_GAMMA_CONTROL_CAPABILITIES;
+
+typedef struct DXGI_RGB {
+ float Red;
+ float Green;
+ float Blue;
+} DXGI_RGB;
+
+typedef struct DXGI_GAMMA_CONTROL {
+ DXGI_RGB Scale;
+ DXGI_RGB Offset;
+ DXGI_RGB GammaCurve[1025];
+} DXGI_GAMMA_CONTROL;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl
new file mode 100644
index 00000000..3b725f1b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/dyngraph.idl
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+interface IPinConnection;
+interface IPinFlowControl;
+interface IGraphConfig;
+interface IGraphConfigCallback;
+
+[
+ local,
+ object,
+ uuid(4a9a62d3-27d4-403d-91e9-89f540e55534),
+ pointer_default(unique)
+]
+interface IPinConnection : IUnknown
+{
+ HRESULT DynamicQueryAccept([in] const AM_MEDIA_TYPE *pmt);
+
+ HRESULT NotifyEndOfStream([in] HANDLE hNotifyEvent);
+
+ HRESULT IsEndPin();
+
+ HRESULT DynamicDisconnect();
+}
+
+[
+ local,
+ object,
+ uuid(c56e9858-dbf3-4f6b-8119-384af2060deb),
+ pointer_default(unique)
+]
+interface IPinFlowControl : IUnknown
+{
+ HRESULT Block([in] DWORD dwBlockFlags, [in] HANDLE hEvent);
+}
+
+enum _AM_PIN_FLOW_CONTROL_BLOCK_FLAGS
+{
+ AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001,
+};
+
+typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS
+{
+ AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,
+ AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,
+ AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004
+} AM_GRAPH_CONFIG_RECONNECT_FLAGS;
+
+enum _REM_FILTER_FLAGS
+{
+ REMFILTERF_LEAVECONNECTED = 0x00000001
+};
+
+typedef enum _AM_FILTER_FLAGS
+{
+ AM_FILTER_FLAGS_REMOVABLE = 0x00000001
+} AM_FILTER_FLAGS;
+
+[
+ local,
+ object,
+ uuid(03A1EB8E-32BF-4245-8502-114D08A9CB88),
+ pointer_default(unique)
+]
+interface IGraphConfig : IUnknown
+{
+ HRESULT Reconnect(
+ [in] IPin *pOutputPin,
+ [in] IPin *pInputPin,
+ [in] const AM_MEDIA_TYPE *pmtFirstConnection,
+ [in] IBaseFilter *pUsingFilter,
+ [in] HANDLE hAbortEvent,
+ [in] DWORD dwFlags);
+
+ HRESULT Reconfigure(
+ [in] IGraphConfigCallback *pCallback,
+ [in] PVOID pvContext,
+ [in] DWORD dwFlags,
+ [in] HANDLE hAbortEvent);
+
+ HRESULT AddFilterToCache([in] IBaseFilter *pFilter);
+
+ HRESULT EnumCacheFilter([out] IEnumFilters **pEnum);
+
+ HRESULT RemoveFilterFromCache([in]IBaseFilter *pFilter);
+
+ HRESULT GetStartTime([out] REFERENCE_TIME *prtStart);
+
+ HRESULT PushThroughData(
+ [in] IPin *pOutputPin,
+ [in] IPinConnection *pConnection,
+ [in] HANDLE hEventAbort);
+
+ HRESULT SetFilterFlags([in] IBaseFilter *pFilter, [in] DWORD dwFlags);
+
+ HRESULT GetFilterFlags([in] IBaseFilter *pFilter, [out] DWORD *pdwFlags);
+
+ HRESULT RemoveFilterEx([in] IBaseFilter *pFilter, DWORD Flags);
+}
+
+[
+ local,
+ object,
+ uuid(ade0fd60-d19d-11d2-abf6-00a0c905f375),
+ pointer_default(unique)
+]
+interface IGraphConfigCallback : IUnknown
+{
+ HRESULT Reconfigure(PVOID pvContext, DWORD dwFlags);
+}
+
+[
+ local,
+ object,
+ uuid(DCFBDCF6-0DC2-45f5-9AB2-7C330EA09C29),
+ pointer_default(unique)
+]
+interface IFilterChain : IUnknown
+{
+ HRESULT StartChain(
+ [in] IBaseFilter *pStartFilter,
+ [in] IBaseFilter *pEndFilter);
+
+ HRESULT PauseChain(
+ [in] IBaseFilter *pStartFilter,
+ [in] IBaseFilter *pEndFilter);
+
+ HRESULT StopChain(
+ [in] IBaseFilter *pStartFilter,
+ [in] IBaseFilter *pEndFilter);
+
+ HRESULT RemoveChain(
+ [in] IBaseFilter *pStartFilter,
+ [in] IBaseFilter *pEndFilter);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl
new file mode 100644
index 00000000..76a1465f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/endpointvolume.idl
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "devicetopology.idl";
+
+typedef struct AUDIO_VOLUME_NOTIFICATION_DATA
+{
+ GUID guidEventContext;
+ BOOL bMuted;
+ FLOAT fMasterVolume;
+ UINT nChannels;
+ FLOAT afChannelVolumes[1];
+} AUDIO_VOLUME_NOTIFICATION_DATA;
+
+cpp_quote("typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA;")
+
+cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_VOLUME 0x1")
+cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_MUTE 0x2")
+cpp_quote("#define ENDPOINT_HARDWARE_SUPPORT_METER 0x4")
+
+interface IAudioEndpointVolumeCallback;
+interface IAudioEndpointVolume;
+interface IAudioEndpointVolumeEx;
+interface IAudioMeterInformation;
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(657804fa-d6ad-4496-8a60-352752af4f89),
+ local,
+ object
+]
+interface IAudioEndpointVolumeCallback : IUnknown
+{
+ HRESULT OnNotify(
+ AUDIO_VOLUME_NOTIFICATION_DATA *pNotify
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(5cdf2c82-841e-4546-9722-0cf74078229a),
+ local,
+ object
+]
+interface IAudioEndpointVolume : IUnknown
+{
+ HRESULT RegisterControlChangeNotify(
+ [in] IAudioEndpointVolumeCallback *pNotify
+ );
+ HRESULT UnregisterControlChangeNotify(
+ [in] IAudioEndpointVolumeCallback *pNotify
+ );
+ HRESULT GetChannelCount(
+ [out] UINT *pnChannelCount
+ );
+ HRESULT SetMasterVolumeLevel(
+ [in] FLOAT fLevelDB,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT SetMasterVolumeLevelScalar(
+ [in] FLOAT fLevel,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT GetMasterVolumeLevel(
+ [out] FLOAT *fLevelDB
+ );
+ HRESULT GetMasterVolumeLevelScalar(
+ [out] FLOAT *fLevel
+ );
+ HRESULT SetChannelVolumeLevel(
+ [in] UINT nChannel,
+ [in] FLOAT fLevelDB,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT SetChannelVolumeLevelScalar(
+ [in] UINT nChannel,
+ [in] FLOAT fLevel,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT GetChannelVolumeLevel(
+ [in] UINT nChannel,
+ [out] FLOAT *fLevelDB
+ );
+ HRESULT GetChannelVolumeLevelScalar(
+ [in] UINT nChannel,
+ [out] FLOAT *fLevel
+ );
+ HRESULT SetMute(
+ [in] BOOL bMute,
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT GetMute(
+ [out] BOOL *bMute
+ );
+ HRESULT GetVolumeStepInfo(
+ [out] UINT *pnStep,
+ [out] UINT *pnStepCount
+ );
+ HRESULT VolumeStepUp(
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT VolumeStepDown(
+ [unique,in] LPCGUID pguidEventContext
+ );
+ HRESULT QueryHardwareSupport(
+ [out] DWORD *pdwHardwareSupportMask
+ );
+ HRESULT GetVolumeRange(
+ [out] FLOAT *pflVolumeMindB,
+ [out] FLOAT *pflVolumeMaxdB,
+ [out] FLOAT *pflVolumeIncrementdB
+ );
+}
+
+[
+ pointer_default(unique),
+ nonextensible,
+ uuid(66e11784-f695-4f28-a505-a7080081a78f),
+ local,
+ object
+]
+interface IAudioEndpointVolumeEx : IAudioEndpointVolume
+{
+ HRESULT GetVolumeRangeChannel(
+ [in] UINT iChannel,
+ [out] FLOAT *pflVolumeMindB,
+ [out] FLOAT *pflVolumeMaxdB,
+ [out] FLOAT *pflVolumeIncrementdB
+ );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h
new file mode 100644
index 00000000..5f31b878
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/errorrep.h
@@ -0,0 +1,52 @@
+/*
+ * errorrep.h - error reporting APIs (implemented in faultrep.dll)
+ *
+ * Copyright 2007 Google (Mikolaj Zalewski)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ERRORREP_H
+#define __WINE_ERRORREP_H
+
+typedef enum tagEFaultRepRetVal
+{
+ frrvOk,
+ frrvOkManifest,
+ frrvOkQueued,
+ frrvOkErr,
+ frrvErrNoDW,
+ frrvErrTimeout,
+ frrvLaunchDebugger,
+ frrvOkHeadless,
+ frrvErrAnotherInstance
+} EFaultRepRetVal;
+
+EFaultRepRetVal WINAPI ReportFault(LPEXCEPTION_POINTERS, DWORD);
+
+BOOL WINAPI AddERExcludedApplicationA(LPCSTR);
+BOOL WINAPI AddERExcludedApplicationW(LPCWSTR);
+#define AddERExcludedApplication WINELIB_NAME_AW(AddERExcludedApplication)
+
+#endif /* __WINE_ERORREP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h
new file mode 100644
index 00000000..270df3c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/errors.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2006 Hans Leidekker
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __ERRORS__
+#define __ERRORS__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define AMOVIEAPI
+
+#define VFW_FIRST_CODE 0x200
+#define MAX_ERROR_TEXT_LEN 160
+
+#include <vfwmsgs.h>
+
+typedef BOOL (WINAPI* AMGETERRORTEXTPROCA)(HRESULT,char*,DWORD);
+typedef BOOL (WINAPI* AMGETERRORTEXTPROCW)(HRESULT,WCHAR*,DWORD);
+DECL_WINELIB_TYPE_AW(AMGETERRORTEXTPROC)
+
+DWORD WINAPI AMGetErrorTextA(HRESULT,LPSTR,DWORD);
+DWORD WINAPI AMGetErrorTextW(HRESULT,LPWSTR,DWORD);
+#define AMGetErrorText WINELIB_NAME_AW(AMGetErrorText)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __ERRORS__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl
new file mode 100644
index 00000000..f3149228
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/errrec.idl
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2013 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a67-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IErrorRecords : IUnknown
+{
+
+cpp_quote("#define IDENTIFIER_SDK_MASK 0xF0000000")
+cpp_quote("#define IDENTIFIER_SDK_ERROR 0x10000000")
+
+typedef struct tagERRORINFO
+{
+ HRESULT hrError;
+ DWORD dwMinor;
+ CLSID clsid;
+ IID iid;
+ DISPID dispid;
+} ERRORINFO;
+
+ [local]
+ HRESULT AddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,
+ [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID);
+
+ [call_as(AddErrorRecord)]
+ HRESULT RemoteAddErrorRecord([in] ERRORINFO * pErrorInfo, [in] DWORD dwLookupID, [in] DISPPARAMS * pdispparams,
+ [in] IUnknown * punkCustomError, [in] DWORD dwDynamicErrorID, [out] IErrorInfo ** ppErrorInfoRem);
+
+ [local]
+ HRESULT GetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo);
+
+ [call_as(GetBasicErrorInfo)]
+ HRESULT RemoteGetBasicErrorInfo([in] ULONG ulRecordNum, [out] ERRORINFO * pErrorInfo, [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject);
+
+ [call_as(GetCustomErrorObject)]
+ HRESULT RemoteGetCustomErrorObject([in] ULONG ulRecordNum, [in] REFIID riid, [out] IUnknown ** ppObject,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo);
+
+ [call_as(GetErrorInfo)]
+ HRESULT RemoteGetErrorInfo([in] ULONG ulRecordNum, [in] LCID lcid, [out] IErrorInfo **ppErrorInfo,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams);
+
+ [call_as(GetErrorParameters)]
+ HRESULT RemoteGetErrorParameters([in] ULONG ulRecordNum, [out] DISPPARAMS * pdispparams, [out] IErrorInfo ** ppErrorInfoRem);
+
+ [local]
+ HRESULT GetRecordCount([out] ULONG *records);
+
+ [call_as(GetRecordCount)]
+ HRESULT RemoteGetRecordCount([out] ULONG * pcRecords, [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h
new file mode 100644
index 00000000..eb5b737a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/evcode.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_EVCODE_H
+#define __WINE_EVCODE_H
+
+#define EC_SYSTEMBASE 0x00
+#define EC_USER 0x8000
+
+#define EC_COMPLETE 0x01
+#define EC_USERABORT 0x02
+#define EC_ERRORABORT 0x03
+#define EC_TIME 0x04
+#define EC_REPAINT 0x05
+#define EC_STREAM_ERROR_STOPPED 0x06
+#define EC_STREAM_ERROR_STILLPLAYING 0x07
+#define EC_ERROR_STILLPLAYING 0x08
+#define EC_PALETTE_CHANGED 0x09
+#define EC_VIDEO_SIZE_CHANGED 0x0A
+#define EC_QUALITY_CHANGE 0x0B
+#define EC_SHUTTING_DOWN 0x0C
+#define EC_CLOCK_CHANGED 0x0D
+#define EC_PAUSED 0x0E
+#define EC_OPENING_FILE 0x10
+#define EC_BUFFERING_DATA 0x11
+#define EC_FULLSCREEN_LOST 0x12
+#define EC_ACTIVATE 0x13
+#define EC_NEED_RESTART 0x14
+#define EC_WINDOW_DESTROYED 0x15
+#define EC_DISPLAY_CHANGED 0x16
+#define EC_STARVATION 0x17
+#define EC_OLE_EVENT 0x18
+#define EC_NOTIFY_WINDOW 0x19
+#define EC_STREAM_CONTROL_STOPPED 0x1A
+#define EC_STREAM_CONTROL_STARTED 0x1B
+#define EC_END_OF_SEGMENT 0x1C
+#define EC_SEGMENT_STARTED 0x1D
+#define EC_LENGTH_CHANGED 0x1E
+#define EC_DEVICE_LOST 0x1F
+#define EC_SAMPLE_NEEDED 0x20
+#define EC_PROCESSING_LATENCY 0x21
+#define EC_SAMPLE_LATENCY 0x22
+#define EC_SCRUB_TIME 0x23
+#define EC_STEP_COMPLETE 0x24
+
+#define EC_NEW_PIN 0x20
+#define EC_RENDER_FINISHED 0x21
+
+#define EC_TIMECODE_AVAILABLE 0x30
+#define EC_EXTDEVICE_MODE_CHANGE 0x31
+#define EC_STATE_CHANGE 0x32
+
+#define EC_PLEASE_REOPEN 0x40
+#define EC_STATUS 0x41
+#define EC_MARKER_HIT 0x42
+#define EC_LOADSTATUS 0x43
+#define EC_FILE_CLOSED 0x44
+#define EC_ERRORABORTEX 0x45
+#define EC_EOS_SOON 0x46
+#define EC_CONTENTPROPERTY_CHANGED 0x47
+#define EC_BANDWIDTHCHANGE 0x48
+#define EC_VIDEOFRAMEREADY 0x49
+#define EC_GRAPH_CHANGED 0x50
+#define EC_CLOCK_UNSET 0x51
+
+#define EC_VMR_RENDERDEVICE_SET 0x53
+#define EC_VMR_SURFACE_FLIPPED 0x54
+#define EC_VMR_RECONNECTION_FAILED 0x55
+#define EC_PREPROCESS_COMPLETE 0x56
+#define EC_CODECAPI_EVENT 0x57
+
+#define EC_BUILT 0x300
+#define EC_UNBUILT 0x301
+
+#define EC_WMT_EVENT_BASE 0x0251
+#define EC_WMT_INDEX_EVENT EC_WMT_EVENT_BASE
+#define EC_WMT_EVENT EC_WMT_EVENT_BASE+1
+
+#endif /* __WINE_EVCODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h
new file mode 100644
index 00000000..df444c94
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntprov.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2010 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _EVNTPROV_H_
+#define _EVNTPROV_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EVENT_LEVEL_MIN 0x00
+#define EVENT_LEVEL_MAX 0xff
+
+typedef ULONGLONG REGHANDLE, *PREGHANDLE;
+
+typedef struct _EVENT_DATA_DESCRIPTOR
+{
+ ULONGLONG Ptr;
+ ULONG Size;
+ ULONG Reserved;
+} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
+
+typedef struct _EVENT_DESCRIPTOR
+{
+ USHORT Id;
+ UCHAR Version;
+ UCHAR Channel;
+ UCHAR Level;
+ UCHAR Opcode;
+ USHORT Task;
+ ULONGLONG Keyword;
+} EVENT_DESCRIPTOR;
+
+typedef EVENT_DESCRIPTOR *PEVENT_DESCRIPTOR;
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+typedef struct _EVENT_FILTER_DESCRIPTOR
+{
+ ULONGLONG Ptr;
+ ULONG Size;
+ ULONG Type;
+
+} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
+
+typedef VOID (NTAPI *PENABLECALLBACK)(LPCGUID,ULONG,UCHAR,ULONGLONG,ULONGLONG,PEVENT_FILTER_DESCRIPTOR,PVOID);
+
+BOOLEAN WINAPI EventEnabled(REGHANDLE, PCEVENT_DESCRIPTOR);
+ULONG WINAPI EventRegister(LPCGUID,PENABLECALLBACK,PVOID,PREGHANDLE);
+ULONG WINAPI EventUnregister(REGHANDLE);
+ULONG WINAPI EventWrite(REGHANDLE,PCEVENT_DESCRIPTOR,ULONG,PEVENT_DATA_DESCRIPTOR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EVNTPROV_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h
new file mode 100644
index 00000000..db3e5716
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/evntrace.h
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _EVNTRACE_
+#define _EVNTRACE_
+
+#include <guiddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EVENT_TRACE_CONTROL_QUERY 0
+#define EVENT_TRACE_CONTROL_STOP 1
+#define EVENT_TRACE_CONTROL_UPDATE 2
+#define EVENT_TRACE_CONTROL_FLUSH 3
+
+typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
+
+struct _EVENT_TRACE_LOGFILEA;
+struct _EVENT_TRACE_LOGFILEW;
+
+typedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA, *PEVENT_TRACE_LOGFILEA;
+typedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW, *PEVENT_TRACE_LOGFILEW;
+
+typedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKA)( PEVENT_TRACE_LOGFILEA );
+typedef ULONG (WINAPI * PEVENT_TRACE_BUFFER_CALLBACKW)( PEVENT_TRACE_LOGFILEW );
+
+typedef ULONG (WINAPI * WMIDPREQUEST)( WMIDPREQUESTCODE, PVOID, ULONG*, PVOID );
+
+typedef struct _TRACE_GUID_REGISTRATION
+{
+ LPCGUID Guid;
+ HANDLE RegHandle;
+} TRACE_GUID_REGISTRATION, *PTRACE_GUID_REGISTRATION;
+
+typedef struct _TRACE_GUID_PROPERTIES {
+ GUID Guid;
+ ULONG GuidType;
+ ULONG LoggerId;
+ ULONG EnableLevel;
+ ULONG EnableFlags;
+ BOOLEAN IsEnable;
+} TRACE_GUID_PROPERTIES, *PTRACE_GUID_PROPERTIES;
+
+typedef struct _EVENT_TRACE_HEADER
+{
+ USHORT Size;
+ union
+ {
+ USHORT FieldTypeFlags;
+ struct
+ {
+ UCHAR HeaderType;
+ UCHAR MarkerFlags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ union
+ {
+ ULONG Version;
+ struct
+ {
+ UCHAR Type;
+ UCHAR Level;
+ USHORT Version;
+ } Class;
+ } DUMMYUNIONNAME1;
+ ULONG ThreadId;
+ ULONG ProcessId;
+ LARGE_INTEGER TimeStamp;
+ union
+ {
+ GUID Guid;
+ ULONGLONG GuidPtr;
+ } DUMMYUNIONNAME2;
+ union
+ {
+ struct
+ {
+ ULONG ClientContext;
+ ULONG Flags;
+ } DUMMYSTRUCTNAME1;
+ struct
+ {
+ ULONG KernelTime;
+ ULONG UserTime;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME3;
+} EVENT_TRACE_HEADER, *PEVENT_TRACE_HEADER;
+
+typedef struct _EVENT_TRACE
+{
+ EVENT_TRACE_HEADER Header;
+ ULONG InstanceId;
+ ULONG ParentInstanceId;
+ GUID ParentGuid;
+ PVOID MofData;
+ ULONG MofLength;
+ ULONG ClientContext;
+} EVENT_TRACE, *PEVENT_TRACE;
+
+typedef VOID (WINAPI * PEVENT_CALLBACK)( PEVENT_TRACE );
+
+typedef struct _TRACE_LOGFILE_HEADER
+{
+ ULONG BufferSize;
+ union
+ {
+ ULONG Version;
+ struct
+ {
+ UCHAR MajorVersion;
+ UCHAR MinorVersion;
+ UCHAR SubVersion;
+ UCHAR SubMinorVersion;
+ } VersionDetail;
+ } DUMMYUNIONNAME;
+ ULONG ProviderVersion;
+ ULONG NumberOfProcessors;
+ LARGE_INTEGER EndTime;
+ ULONG TimerResolution;
+ ULONG MaximumFileSize;
+ ULONG LogFileMode;
+ ULONG BuffersWritten;
+ union
+ {
+ GUID LogInstanceGuid;
+ struct
+ {
+ ULONG StartBuffers;
+ ULONG PointerSize;
+ ULONG EventsLost;
+ ULONG CpuSpeedInMHZ;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME1;
+ LPWSTR LoggerName;
+ LPWSTR LogFileName;
+ TIME_ZONE_INFORMATION TimeZone;
+ LARGE_INTEGER BootTime;
+ LARGE_INTEGER PerfFreq;
+ LARGE_INTEGER StartTime;
+ ULONG ReservedTime;
+ ULONG BuffersLost;
+} TRACE_LOGFILE_HEADER, *PTRACE_LOGFILE_HEADER;
+
+struct _EVENT_TRACE_LOGFILEW
+{
+ LPWSTR LogFileName;
+ LPWSTR LoggerName;
+ LONGLONG CurrentTime;
+ ULONG LogFileMode;
+ EVENT_TRACE CurrentEvent;
+ TRACE_LOGFILE_HEADER LogfileHeader;
+ PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback;
+ ULONG BufferSize;
+ ULONG Filled;
+ ULONG EventsLost;
+ PEVENT_CALLBACK EventCallback;
+ PVOID Context;
+};
+
+struct _EVENT_TRACE_LOGFILEA
+{
+ LPSTR LogFileName;
+ LPSTR LoggerName;
+ LONGLONG CurrentTime;
+ ULONG LogFileMode;
+ EVENT_TRACE CurrentEvent;
+ TRACE_LOGFILE_HEADER LogfileHeader;
+ PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback;
+ ULONG BufferSize;
+ ULONG Filled;
+ ULONG EventsLost;
+ PEVENT_CALLBACK EventCallback;
+ PVOID Context;
+};
+
+typedef struct _EVENT_TRACE_PROPERTIES
+{
+ WNODE_HEADER Wnode;
+ ULONG BufferSize;
+ ULONG MinimumBuffers;
+ ULONG MaximumBuffers;
+ ULONG MaximumFileSize;
+ ULONG LogFileMode;
+ ULONG FlushTimer;
+ LONG AgeLimit;
+ ULONG NumberOfBuffers;
+ ULONG FreeBuffers;
+ ULONG EventsLost;
+ ULONG BuffersWritten;
+ ULONG LogBuffersLost;
+ ULONG RealTimeBuffersLost;
+ HANDLE LoggerThreadId;
+ ULONG LoggerFileNameOffset;
+ ULONG LoggerNameOffset;
+} EVENT_TRACE_PROPERTIES, *PEVENT_TRACE_PROPERTIES;
+
+#define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)~(ULONG_PTR)0)
+
+ULONG WINAPI CloseTrace(TRACEHANDLE);
+ULONG WINAPI ControlTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES,ULONG);
+ULONG WINAPI ControlTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES,ULONG);
+#define ControlTrace WINELIB_NAME_AW(ControlTrace)
+ULONG WINAPI EnableTrace(ULONG,ULONG,ULONG,LPCGUID,TRACEHANDLE);
+ULONG WINAPI FlushTraceA(TRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES);
+ULONG WINAPI FlushTraceW(TRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES);
+#define FlushTrace WINELIB_NAME_AW(FlushTrace)
+ULONG WINAPI QueryAllTracesA(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG);
+ULONG WINAPI QueryAllTracesW(PEVENT_TRACE_PROPERTIES*,ULONG,PULONG);
+#define QueryAllTraces WINELIB_NAME_AW(QueryAllTraces)
+ULONG WINAPI RegisterTraceGuidsA(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCSTR,LPCSTR,PTRACEHANDLE);
+ULONG WINAPI RegisterTraceGuidsW(WMIDPREQUEST,PVOID,LPCGUID,ULONG,PTRACE_GUID_REGISTRATION,LPCWSTR,LPCWSTR,PTRACEHANDLE);
+#define RegisterTraceGuids WINELIB_NAME_AW(RegisterTraceGuids)
+ULONG WINAPI StartTraceA(PTRACEHANDLE,LPCSTR,PEVENT_TRACE_PROPERTIES);
+ULONG WINAPI StartTraceW(PTRACEHANDLE,LPCWSTR,PEVENT_TRACE_PROPERTIES);
+#define StartTrace WINELIB_NAME_AW(StartTrace)
+ULONG WINAPI TraceEvent(TRACEHANDLE,PEVENT_TRACE_HEADER);
+ULONG WINAPIV TraceMessage(TRACEHANDLE,ULONG,LPGUID,USHORT,...);
+ULONG WINAPI TraceMessageVa(TRACEHANDLE,ULONG,LPGUID,USHORT,__ms_va_list);
+ULONG WINAPI UnregisterTraceGuids(TRACEHANDLE);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EVNTRACE_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h
new file mode 100644
index 00000000..c1031e91
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/excpt.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2002 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_EXCPT_H
+#define __WINE_EXCPT_H
+
+/*
+ * Return values from the actual exception handlers
+ */
+typedef enum _EXCEPTION_DISPOSITION
+{
+ ExceptionContinueExecution,
+ ExceptionContinueSearch,
+ ExceptionNestedException,
+ ExceptionCollidedUnwind
+} EXCEPTION_DISPOSITION;
+
+/*
+ * Return values from filters in except() and from UnhandledExceptionFilter
+ */
+#define EXCEPTION_EXECUTE_HANDLER 1
+#define EXCEPTION_CONTINUE_SEARCH 0
+#define EXCEPTION_CONTINUE_EXECUTION -1
+
+
+#if defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS)
+#define GetExceptionCode _exception_code
+#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
+#define AbnormalTermination _abnormal_termination
+
+unsigned long __cdecl _exception_code(void);
+void * __cdecl _exception_info(void);
+int __cdecl _abnormal_termination(void);
+#endif /* defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) */
+
+#endif /* __WINE_EXCPT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl
new file mode 100644
index 00000000..0bf09ecd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdisp.idl
@@ -0,0 +1,1055 @@
+/*
+ * Defines the COM interfaces and APIs related to the IE Web browser
+ *
+ * Copyright (C) 2001 John R. Sheets (for CodeWeavers)
+ * Copyright (C) 2003 Alexandre Julliard
+ * Copyright (C) 2004 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "docobj.idl";
+
+#include <olectl.h>
+#include <exdispid.h>
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef FindText")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * SHDocVw library
+ */
+[
+ uuid(EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B),
+ version(1.1),
+ helpstring("Microsoft Internet Controls")
+]
+library SHDocVw
+{
+
+importlib("stdole2.tlb");
+
+
+/*****************************************************************************
+ * IWebBrowser interface
+ */
+[
+ object,
+ oleautomation,
+ uuid(eab22ac1-30c1-11cf-a7eb-0000c05bae0b),
+ hidden,
+ dual
+]
+interface IWebBrowser : IDispatch
+{
+ typedef enum BrowserNavConstants
+ {
+ navOpenInNewWindow = 0x1,
+ navNoHistory = 0x2,
+ navNoReadFromCache = 0x4,
+ navNoWriteToCache = 0x8,
+ navAllowAutosearch = 0x10,
+ navBrowserBar = 0x20,
+ navHyperlink = 0x40,
+ navEnforceRestricted = 0x80
+ } BrowserNavConstants;
+
+ typedef enum RefreshConstants
+ {
+ REFRESH_NORMAL = 0,
+ REFRESH_IFEXPIRED = 1,
+ REFRESH_COMPLETELY = 3
+ } RefreshConstants;
+
+ [id(100)] HRESULT GoBack();
+ [id(101)] HRESULT GoForward();
+ [id(102)] HRESULT GoHome();
+ [id(103)] HRESULT GoSearch();
+
+ [id(104)]
+ HRESULT Navigate(
+ [in] BSTR URL,
+ [in, optional] VARIANT *Flags,
+ [in, optional] VARIANT *TargetFrameName,
+ [in, optional] VARIANT *PostData,
+ [in, optional] VARIANT *Headers);
+
+ [id(DISPID_REFRESH)] HRESULT Refresh();
+ [id(105)] HRESULT Refresh2([in, optional] VARIANT *Level);
+ [id(106)] HRESULT Stop();
+ [id(200), propget] HRESULT Application([out, retval] IDispatch** ppDisp);
+ [id(201), propget] HRESULT Parent([out, retval] IDispatch** ppDisp);
+ [id(202), propget] HRESULT Container([out, retval] IDispatch** ppDisp);
+ [id(203), propget] HRESULT Document([out, retval] IDispatch** ppDisp);
+ [id(204), propget] HRESULT TopLevelContainer([out, retval] VARIANT_BOOL* pBool);
+ [id(205), propget] HRESULT Type([out, retval] BSTR* Type);
+ [id(206), propget] HRESULT Left([out, retval] long *pl);
+ [id(206), propput] HRESULT Left([in] long Left);
+ [id(207), propget] HRESULT Top([out, retval] long *pl);
+ [id(207), propput] HRESULT Top([in] long Top);
+ [id(208), propget] HRESULT Width([out, retval] long *pl);
+ [id(208), propput] HRESULT Width([in] long Width);
+ [id(209), propget] HRESULT Height([out, retval] long *pl);
+ [id(209), propput] HRESULT Height([in] long Height);
+ [id(210), propget] HRESULT LocationName([out, retval] BSTR *LocationName);
+ [id(211), propget] HRESULT LocationURL([out, retval] BSTR *LocationURL);
+ [id(212), propget] HRESULT Busy([out, retval] VARIANT_BOOL *pBool);
+}
+
+/*****************************************************************************
+ * DWebBrowserEvents dispinterface
+ */
+[
+ uuid(eab22ac2-30c1-11CF-a7eb-0000C05bae0b),
+ hidden
+]
+dispinterface DWebBrowserEvents
+{
+ properties:
+ methods:
+ [id(DISPID_BEFORENAVIGATE)]
+ void BeforeNavigate(
+ [in] BSTR URL,
+ long Flags,
+ BSTR TargetFrameName,
+ VARIANT *PostData,
+ BSTR Headers,
+ [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_NAVIGATECOMPLETE)]
+ void NavigateComplete([in] BSTR URL);
+
+ [id(DISPID_STATUSTEXTCHANGE)]
+ void StatusTextChange([in] BSTR Text);
+
+ [id(DISPID_PROGRESSCHANGE)]
+ void ProgressChange([in] long Progress, [in] long ProgressMax);
+
+ [id(DISPID_DOWNLOADCOMPLETE)]
+ void DownloadComplete();
+
+ [id(DISPID_COMMANDSTATECHANGE)]
+ void CommandStateChange([in] long Command, [in]VARIANT_BOOL Enable);
+
+ [id(DISPID_DOWNLOADBEGIN)]
+ void DownloadBegin();
+
+ [id(DISPID_NEWWINDOW)]
+ void NewWindow(
+ [in] BSTR URL,
+ [in] long Flags,
+ [in] BSTR TargetFrameName,
+ [in] VARIANT *PostData,
+ [in] BSTR Headers,
+ [in,out] VARIANT_BOOL *Processed);
+
+ [id(DISPID_TITLECHANGE)]
+ void TitleChange([in] BSTR Text);
+
+ [id(DISPID_FRAMEBEFORENAVIGATE)]
+ void FrameBeforeNavigate(
+ [in] BSTR URL,
+ long Flags,
+ BSTR TargetFrameName,
+ VARIANT *PostData,
+ BSTR Headers,
+ [in, out]VARIANT_BOOL *Cancel);
+
+ [id(DISPID_FRAMENAVIGATECOMPLETE)]
+ void FrameNavigateComplete([in] BSTR URL);
+
+ [id(DISPID_FRAMENEWWINDOW)]
+ void FrameNewWindow(
+ [in] BSTR URL,
+ [in] long Flags,
+ [in] BSTR TargetFrameName,
+ [in] VARIANT *PostData,
+ [in] BSTR Headers,
+ [in,out] VARIANT_BOOL *Processed);
+
+ [id(DISPID_QUIT)]
+ void Quit([in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_WINDOWMOVE)]
+ void WindowMove();
+
+ [id(DISPID_WINDOWRESIZE)]
+ void WindowResize();
+
+ [id(DISPID_WINDOWACTIVATE)]
+ void WindowActivate();
+
+ [id(DISPID_PROPERTYCHANGE)]
+ void PropertyChange([in] BSTR Property);
+}
+
+typedef
+[
+ uuid(34a226e0-df30-11cf-89a9-00a0c9054129)
+]
+enum CommandStateChangeConstants {
+ CSC_UPDATECOMMANDS = -1,
+ CSC_NAVIGATEFORWARD = 1,
+ CSC_NAVIGATEBACK = 2
+} CommandStateChangeConstants;
+
+/*****************************************************************************
+ * IWebBrowserApp interface
+ */
+[
+ object,
+ oleautomation,
+ uuid(0002df05-0000-0000-c000-000000000046),
+ hidden,
+ dual
+]
+interface IWebBrowserApp : IWebBrowser
+{
+ [id(300)] HRESULT Quit();
+ [id(301)] HRESULT ClientToWindow([in,out] int* pcx, [in,out] int* pcy);
+ [id(302)] HRESULT PutProperty([in] BSTR Property, [in] VARIANT vtValue);
+ [id(303)] HRESULT GetProperty([in] BSTR Property, [out, retval] VARIANT *pvtValue);
+ [id(0), propget] HRESULT Name([out, retval] BSTR* Name);
+ [id(DISPID_HWND), propget] HRESULT HWND([out, retval] SHANDLE_PTR *pHWND);
+ [id(400), propget] HRESULT FullName([out, retval] BSTR* FullName);
+ [id(401), propget] HRESULT Path([out, retval] BSTR* Path);
+ [id(402), propget] HRESULT Visible([out, retval] VARIANT_BOOL* pBool);
+ [id(402), propput] HRESULT Visible([in] VARIANT_BOOL Value);
+ [id(403), propget] HRESULT StatusBar([out, retval] VARIANT_BOOL* pBool);
+ [id(403), propput] HRESULT StatusBar([in] VARIANT_BOOL Value);
+ [id(404), propget] HRESULT StatusText([out, retval] BSTR *StatusText);
+ [id(404), propput] HRESULT StatusText([in] BSTR StatusText);
+ [id(405), propget] HRESULT ToolBar([out, retval] int * Value);
+ [id(405), propput] HRESULT ToolBar([in] int Value);
+ [id(406), propget] HRESULT MenuBar([out, retval] VARIANT_BOOL *Value);
+ [id(406), propput] HRESULT MenuBar([in] VARIANT_BOOL Value);
+ [id(407), propget] HRESULT FullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
+ [id(407), propput] HRESULT FullScreen([in] VARIANT_BOOL bFullScreen);
+}
+
+/*****************************************************************************
+ * IWebBrowser2 interface
+ */
+[
+ object,
+ oleautomation,
+ uuid(d30c1661-cdaf-11d0-8a3e-00c04fc9e26e),
+ hidden,
+ dual
+]
+interface IWebBrowser2 : IWebBrowserApp
+{
+ [id(500)] HRESULT Navigate2(
+ [in] VARIANT *URL,
+ [in, optional] VARIANT *Flags,
+ [in, optional] VARIANT *TargetFrameName,
+ [in, optional] VARIANT *PostData,
+ [in, optional] VARIANT *Headers);
+
+ [id(501)] HRESULT QueryStatusWB(
+ [in] OLECMDID cmdID,
+ [out, retval] OLECMDF *pcmdf);
+
+ [id(502)] HRESULT ExecWB(
+ [in] OLECMDID cmdID,
+ [in] OLECMDEXECOPT cmdexecopt,
+ [in, optional] VARIANT *pvaIn,
+ [out, in, optional] VARIANT *pvaOut);
+
+ [id(503)] HRESULT ShowBrowserBar(
+ [in] VARIANT *pvaClsid,
+ [in, optional] VARIANT *pvarShow,
+ [in, optional] VARIANT *pvarSize);
+
+ [id(DISPID_READYSTATE), propget, bindable]
+ HRESULT ReadyState([out, retval] READYSTATE *plReadyState);
+
+ [id(550), propget] HRESULT Offline([out, retval] VARIANT_BOOL *pbOffline);
+ [id(550), propput] HRESULT Offline([in] VARIANT_BOOL bOffline);
+ [id(551), propget] HRESULT Silent([out, retval] VARIANT_BOOL *pbSilent);
+ [id(551), propput] HRESULT Silent([in] VARIANT_BOOL bSilent);
+ [id(552), propget] HRESULT RegisterAsBrowser([out, retval] VARIANT_BOOL *pbRegister);
+ [id(552), propput] HRESULT RegisterAsBrowser([in] VARIANT_BOOL bRegister);
+ [id(553), propget] HRESULT RegisterAsDropTarget([out, retval] VARIANT_BOOL *pbRegister);
+ [id(553), propput] HRESULT RegisterAsDropTarget([in] VARIANT_BOOL bRegister);
+ [id(554), propget] HRESULT TheaterMode([out, retval] VARIANT_BOOL *pbRegister);
+ [id(554), propput] HRESULT TheaterMode([in] VARIANT_BOOL bRegister);
+ [id(555), propget] HRESULT AddressBar([out, retval] VARIANT_BOOL *Value);
+ [id(555), propput] HRESULT AddressBar([in] VARIANT_BOOL Value);
+ [id(556), propget] HRESULT Resizable([out, retval] VARIANT_BOOL *Value);
+ [id(556), propput] HRESULT Resizable([in] VARIANT_BOOL Value);
+}
+
+typedef
+[
+ uuid(65507be0-91a8-11d3-a845-009027220e6d)
+]
+enum SecureLockIconConstants {
+ secureLockIconUnsecure = 0,
+ secureLockIconMixed = 1,
+ secureLockIconSecureUnknownBits = 2,
+ secureLockIconSecure40Bit = 3,
+ secureLockIconSecure56Bit = 4,
+ secureLockIconSecureFortezza = 5,
+ secureLockIconSecure128Bit = 6
+} SecureLockIconConstants;
+
+/*****************************************************************************
+ * DWebBrowserEvents2 dispinterface
+ */
+[
+ uuid(34a715a0-6587-11d0-924a-0020afc7ac4d),
+ hidden
+]
+dispinterface DWebBrowserEvents2
+{
+ properties:
+ methods:
+ [id(DISPID_STATUSTEXTCHANGE)]
+ void StatusTextChange([in] BSTR Text);
+
+ [id(DISPID_PROGRESSCHANGE)]
+ void ProgressChange([in] long Progress, [in] long ProgressMax);
+
+ [id(DISPID_COMMANDSTATECHANGE)]
+ void CommandStateChange([in] long Command, [in] VARIANT_BOOL Enable);
+
+ [id(DISPID_DOWNLOADBEGIN)]
+ void DownloadBegin();
+
+ [id(DISPID_DOWNLOADCOMPLETE)]
+ void DownloadComplete();
+
+ [id(DISPID_TITLECHANGE)]
+ void TitleChange([in] BSTR Text);
+
+ [id(DISPID_PROPERTYCHANGE)]
+ void PropertyChange([in] BSTR szProperty);
+
+ [id(DISPID_BEFORENAVIGATE2)]
+ void BeforeNavigate2(
+ [in] IDispatch *pDisp,
+ [in] VARIANT *URL,
+ [in] VARIANT *Flags,
+ [in] VARIANT *TargetFrameName,
+ [in] VARIANT *PostData,
+ [in] VARIANT *Headers,
+ [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_NEWWINDOW2)]
+ void NewWindow2([in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_NAVIGATECOMPLETE2)]
+ void NavigateComplete2([in] IDispatch *pDisp, [in] VARIANT *URL);
+
+ [id(DISPID_DOCUMENTCOMPLETE)]
+ void DocumentComplete([in] IDispatch *pDisp, [in] VARIANT *URL);
+
+ [id(DISPID_ONQUIT)]
+ void OnQuit();
+
+ [id(DISPID_ONVISIBLE)]
+ void OnVisible([in] VARIANT_BOOL Visible);
+
+ [id(DISPID_ONTOOLBAR)]
+ void OnToolBar([in] VARIANT_BOOL ToolBar);
+
+ [id(DISPID_ONMENUBAR)]
+ void OnMenuBar([in] VARIANT_BOOL MenuBar);
+
+ [id(DISPID_ONSTATUSBAR)]
+ void OnStatusBar([in] VARIANT_BOOL StatusBar);
+
+ [id(DISPID_ONFULLSCREEN)]
+ void OnFullScreen([in] VARIANT_BOOL FullScreen);
+
+ [id(DISPID_ONTHEATERMODE)]
+ void OnTheaterMode([in] VARIANT_BOOL TheaterMode);
+
+ [id(DISPID_WINDOWSETRESIZABLE)]
+ void WindowSetResizable([in] VARIANT_BOOL Resizable);
+
+ [id(DISPID_WINDOWSETLEFT)]
+ void WindowSetLeft([in] long Left);
+
+ [id(DISPID_WINDOWSETTOP)]
+ void WindowSetTop([in] long Top);
+
+ [id(DISPID_WINDOWSETWIDTH)]
+ void WindowSetWidth([in] long Width);
+
+ [id(DISPID_WINDOWSETHEIGHT)]
+ void WindowSetHeight([in] long Height);
+
+ [id(DISPID_WINDOWCLOSING)]
+ void WindowClosing(
+ [in] VARIANT_BOOL IsChildWindow,
+ [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_CLIENTTOHOSTWINDOW)]
+ void ClientToHostWindow(
+ [in, out] long *CX,
+ [in, out] long *CY);
+
+ [id(DISPID_SETSECURELOCKICON)]
+ void SetSecureLockIcon([in] long SecureLockIcon);
+
+ [id(DISPID_FILEDOWNLOAD)]
+ void FileDownload(
+ [in] VARIANT_BOOL ActiveDocument,
+ [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_NAVIGATEERROR)]
+ void NavigateError(
+ [in] IDispatch *pDisp,
+ [in] VARIANT *URL,
+ [in] VARIANT *Frame,
+ [in] VARIANT *StatusCode,
+ [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_PRINTTEMPLATEINSTANTIATION)]
+ void PrintTemplateInstantiation([in] IDispatch *pDisp);
+
+ [id(DISPID_PRINTTEMPLATETEARDOWN)]
+ void PrintTemplateTeardown([in] IDispatch *pDisp);
+
+ [id(DISPID_UPDATEPAGESTATUS)]
+ void UpdatePageStatus(
+ [in] IDispatch *pDisp,
+ [in] VARIANT *nPage,
+ [in] VARIANT *fDone);
+
+ [id(DISPID_PRIVACYIMPACTEDSTATECHANGE)]
+ void PrivacyImpactedStateChange([in] VARIANT_BOOL bImpacted);
+
+ [id(DISPID_NEWWINDOW3)]
+ void NewWindow3(
+ [in, out] IDispatch **ppDisp,
+ [in, out] VARIANT_BOOL *Cancel,
+ [in] DWORD dwFlags,
+ [in] BSTR bstrUrlContext,
+ [in] BSTR bstrUrl);
+
+ [id(DISPID_SETPHISHINGFILTERSTATUS)]
+ void SetPhishingFilterStatus([in] long PhishingFilterStatus);
+
+ [id(DISPID_WINDOWSTATECHANGED)]
+ void WindowStateChanged(
+ [in] DWORD dwWindowStateFlags,
+ [in] DWORD dwValidFlagsMask);
+
+ [id(DISPID_NEWPROCESS)]
+ void NewProcess(
+ [in] long lCauseFlag,
+ [in] IDispatch *pWB2,
+ [in, out] VARIANT_BOOL *Cancel);
+
+ [id(DISPID_THIRDPARTYURLBLOCKED)]
+ void ThirdPartyUrlBlocked(
+ [in] VARIANT *URL,
+ [in] DWORD dwCount);
+
+ [id(DISPID_REDIRECTXDOMAINBLOCKED)]
+ void RedirectXDomainBlocked(
+ [in] IDispatch *pDisp,
+ [in] VARIANT *StartURL,
+ [in] VARIANT *RedirectURL,
+ [in] VARIANT *Frame,
+ [in] VARIANT *StatusCode);
+}
+
+[
+ helpstring("Microsoft Web Browser Version 1"),
+ threading(apartment),
+ progid("Shell.Explorer.1"),
+ vi_progid("Shell.Explorer"),
+ uuid(eab22ac3-30c1-11cf-a7eb-0000c05bae0b),
+ control
+]
+coclass WebBrowser_V1
+{
+ interface IWebBrowser2;
+ [default] interface IWebBrowser;
+ [source] dispinterface DWebBrowserEvents2;
+ [default, source] dispinterface DWebBrowserEvents;
+}
+
+[
+ helpstring("Microsoft Web Browser"),
+ threading(apartment),
+ progid("Shell.Explorer.2"),
+ vi_progid("Shell.Explorer"),
+ uuid(8856f961-340a-11d0-a96b-00c04fd705a2),
+ control
+]
+coclass WebBrowser
+{
+ [default] interface IWebBrowser2;
+ interface IWebBrowser;
+ [default, source] dispinterface DWebBrowserEvents2;
+ [source] dispinterface DWebBrowserEvents;
+}
+
+[
+ helpstring("Internet Explorer(Ver 1.0)"),
+ progid("InternetExplorer.Application.1"),
+ vi_progid("InternetExplorer.Application"),
+ uuid(0002df01-0000-0000-c000-000000000046)
+]
+coclass InternetExplorer
+{
+ [default] interface IWebBrowser2;
+ interface IWebBrowserApp;
+ [default, source] dispinterface DWebBrowserEvents2;
+ [source] dispinterface DWebBrowserEvents;
+}
+
+[
+ uuid(C08AFD90-F2A1-11D1-8455-00A0C91F3880),
+ hidden
+]
+coclass ShellBrowserWindow
+{
+ [default] interface IWebBrowser2;
+ interface IWebBrowserApp;
+ [default, source] dispinterface DWebBrowserEvents2;
+ [source] dispinterface DWebBrowserEvents;
+}
+
+typedef
+[
+ uuid(f41e6981-28e5-11d0-82b4-00a0c90c29c5)
+]
+enum ShellWindowTypeConstants {
+ SWC_EXPLORER = 0,
+ SWC_BROWSER = 1,
+ SWC_3RDPARTY = 2,
+ SWC_CALLBACK = 4,
+ SWC_DESKTOP = 8
+} ShellWindowTypeConstants;
+
+typedef
+[
+ uuid(7716a370-38Ca-11d0-a48B-00a0c90a8f39)
+]
+enum ShellWindowFindWindowOptions {
+ SWFO_NEEDDISPATCH = 1,
+ SWFO_INCLUDEPENDING = 2,
+ SWFO_COOKIEPASSED = 4
+} ShellWindowFindWindowOptions;
+
+[
+ uuid(FE4106E0-399A-11D0-A48C-00A0C90A8F39)
+]
+dispinterface DShellWindowsEvents {
+ properties:
+ methods:
+ [id(DISPID_WINDOWREGISTERED)]
+ void WindowRegistered([in] long lCookie);
+
+ [id(DISPID_WINDOWREVOKED)]
+ void WindowRevoked([in] long lCookie);
+}
+
+[
+ object,
+ oleautomation,
+ uuid(85cb6900-4d95-11cf-960c-0080c7f4ee85),
+ dual
+]
+interface IShellWindows : IDispatch
+{
+ [propget] HRESULT Count([out, retval] long *Count);
+
+ [id(0)] HRESULT Item(
+ [in, optional] VARIANT index,
+ [out, retval] IDispatch **Folder);
+
+ [id(-4)] HRESULT _NewEnum([out, retval] IUnknown **ppunk);
+
+ [hidden] HRESULT Register(
+ [in] IDispatch *pid,
+ [in] long hWnd,
+ [in] int swClass,
+ [out] long *plCookie);
+
+ [hidden] HRESULT RegisterPending(
+ [in] long lThreadId,
+ [in] VARIANT *pvarloc,
+ [in] VARIANT *pvarlocRoot,
+ [in] int swClass,
+ [out] long *plCookie);
+
+ [hidden] HRESULT Revoke([in] long lCookie);
+ [hidden] HRESULT OnNavigate([in] long lCookie, [in] VARIANT *pvarLoc);
+ [hidden] HRESULT OnActivated([in] long lCookie, [in] VARIANT_BOOL fActive);
+ [hidden] HRESULT FindWindowSW(
+ [in] VARIANT *pvarLoc,
+ [in] VARIANT *pvarLocRoot,
+ [in] int swClass,
+ [out] long *phwnd,
+ [in] int swfwOptions,
+ [out, retval] IDispatch **ppdispOut);
+
+ [hidden] HRESULT OnCreated([in] long lCookie, [in] IUnknown *punk);
+ [hidden] HRESULT ProcessAttachDetach([in] VARIANT_BOOL fAttach);
+}
+
+[
+ threading(apartment),
+ uuid(9ba05972-f6a8-11cf-a442-00a0c90a8f39)
+]
+coclass ShellWindows
+{
+ [default] interface IShellWindows;
+ [default, source] dispinterface DShellWindowsEvents;
+}
+
+[
+ odl,
+ uuid(729fe2f8-1ea8-11d1-8f85-00C04fc2fbe1),
+ dual,
+ oleautomation
+]
+interface IShellUIHelper : IDispatch {
+ [id(1), hidden] HRESULT ResetFirstBootMode();
+ [id(2), hidden] HRESULT ResetSafeMode();
+ [id(3), hidden] HRESULT RefreshOfflineDesktop();
+
+ [id(4)] HRESULT AddFavorite(
+ [in] BSTR URL,
+ [in, optional] VARIANT* Title);
+
+ [id(5)] HRESULT AddChannel([in] BSTR URL);
+
+ [id(6)] HRESULT AddDesktopComponent(
+ [in] BSTR URL,
+ [in] BSTR Type,
+ [in, optional] VARIANT *Left,
+ [in, optional] VARIANT *Top,
+ [in, optional] VARIANT *Width,
+ [in, optional] VARIANT *Height);
+
+ [id(7)] HRESULT IsSubscribed(
+ [in] BSTR URL,
+ [out, retval] VARIANT_BOOL *pBool);
+
+ [id(8)] HRESULT NavigateAndFind(
+ [in] BSTR URL,
+ [in] BSTR strQuery,
+ [in] VARIANT *varTargetFrame);
+
+ [id(9)] HRESULT ImportExportFavorites(
+ [in] VARIANT_BOOL fImport,
+ [in] BSTR strImpExpPath);
+
+ [id(10)] HRESULT AutoCompleteSaveForm([in, optional] VARIANT *Form);
+
+ [id(11)] HRESULT AutoScan(
+ [in] BSTR strSearch,
+ [in] BSTR strFailureUrl,
+ [in, optional] VARIANT *pvarTargetFrame);
+
+ [id(12), hidden] HRESULT AutoCompleteAttach([in, optional] VARIANT *Reserved);
+
+ [id(13)] HRESULT ShowBrowserUI(
+ [in] BSTR bstrName,
+ [in] VARIANT *pvarIn,
+ [out, retval] VARIANT *pvarOut);
+}
+
+[
+ uuid(a7fe6eda-1932-4281-b881-87b31b8bc52c),
+ oleautomation,
+ dual
+]
+interface IShellUIHelper2 : IShellUIHelper {
+ [id(DISPID_ADDSEARCHPROVIDER)]
+ HRESULT AddSearchProvider([in] BSTR URL);
+
+ [id(DISPID_RUNONCESHOWN)]
+ HRESULT RunOnceShown();
+
+ [id(DISPID_SKIPRUNONCE)]
+ HRESULT SkipRunOnce();
+
+ [id(DISPID_CUSTOMIZESETTINGS)] HRESULT CustomizeSettings(
+ [in] VARIANT_BOOL fSQM,
+ [in] VARIANT_BOOL fPhishing,
+ [in] BSTR bstrLocale);
+
+ [id(DISPID_SQMENABLED)]
+ HRESULT SqmEnabled([out, retval] VARIANT_BOOL *pfEnabled);
+
+ [id(DISPID_PHISHINGENABLED)]
+ HRESULT PhishingEnabled([out, retval] VARIANT_BOOL *pfEnabled);
+
+ [id(DISPID_BRANDIMAGEURI)]
+ HRESULT BrandImageUri([out, retval] BSTR *pbstrUri);
+
+ [id(DISPID_SKIPTABSWELCOME)]
+ HRESULT SkipTabsWelcome();
+
+ [id(DISPID_DIAGNOSECONNECTION)]
+ HRESULT DiagnoseConnection();
+
+ [id(DISPID_CUSTOMIZECLEARTYPE)]
+ HRESULT CustomizeClearType([in] VARIANT_BOOL fSet);
+
+ [id(DISPID_ISSEARCHPROVIDERINSTALLED)]
+ HRESULT IsSearchProviderInstalled(
+ [in] BSTR URL,
+ [out, retval] DWORD *pdwResult);
+
+ [id(DISPID_ISSEARCHMIGRATED)]
+ HRESULT IsSearchMigrated([out, retval] VARIANT_BOOL *pfMigrated);
+
+ [id(DISPID_DEFAULTSEARCHPROVIDER)]
+ HRESULT DefaultSearchProvider([out, retval] BSTR *pbstrName);
+
+ [id(DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE)]
+ HRESULT RunOnceRequiredSettingsComplete([in] VARIANT_BOOL fComplete);
+
+ [id(DISPID_RUNONCEHASSHOWN)]
+ HRESULT RunOnceHasShown([out, retval] VARIANT_BOOL *pfShown);
+
+ [id(DISPID_SEARCHGUIDEURL)]
+ HRESULT SearchGuideUrl([out, retval] BSTR *pbstrUrl);
+}
+
+[
+ helpstring("Microsoft Shell UI Helper"),
+ threading(apartment),
+ progid("Shell.UIHelper.1"),
+ vi_progid("Shell.UIHelper"),
+ uuid(64ab4bb7-111e-11d1-8f79-00c04fc2fbe1)
+]
+coclass ShellUIHelper {
+ [default] interface IShellUIHelper2;
+}
+
+[
+ uuid(55136806-b2de-11d1-b9f2-00a0c98bc547)
+]
+dispinterface DShellNameSpaceEvents {
+ properties:
+ methods:
+ [id(1)] void FavoritesSelectionChange(
+ [in] long cItems,
+ [in] long hItem,
+ [in] BSTR strName,
+ [in] BSTR strUrl,
+ [in] long cVisits,
+ [in] BSTR strDate,
+ [in] long fAvailableOffline);
+
+ [id(2)] void SelectionChange();
+ [id(3)] void DoubleClick();
+ [id(4)] void Initialized();
+}
+
+[
+ odl,
+ uuid(55136804-b2de-11d1-b9f2-00a0c98bc547),
+ hidden,
+ dual,
+ oleautomation
+]
+interface IShellFavoritesNameSpace : IDispatch {
+ [id(1)] HRESULT MoveSelectionUp();
+ [id(2)] HRESULT MoveSelectionDown();
+ [id(3)] HRESULT ResetSort();
+ [id(4)] HRESULT NewFolder();
+ [id(5)] HRESULT Synchronize();
+ [id(6)] HRESULT Import();
+ [id(7)] HRESULT Export();
+ [id(8)] HRESULT InvokeContextMenuCommand([in] BSTR strCommand);
+ [id(9)] HRESULT MoveSelectionTo();
+ [id(10), propget] HRESULT SubscriptionsEnabled([out, retval] VARIANT_BOOL *pBool);
+ [id(11)] HRESULT CreateSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);
+ [id(12)] HRESULT DeleteSubscriptionForSelection([out, retval] VARIANT_BOOL *pBool);
+ [id(13)] HRESULT SetRoot([in] BSTR bstrFullPath);
+}
+
+[
+ odl,
+ uuid(e572d3c9-37be-4ae2-825d-d521763e3108),
+ hidden,
+ dual,
+ oleautomation
+]
+interface IShellNameSpace : IShellFavoritesNameSpace {
+ [id(14), propget] HRESULT EnumOptions([out, retval] long* pgrfEnumFlags);
+ [id(14), propput] HRESULT EnumOptions([in] long pgrfEnumFlags);
+
+ [id(15), propget] HRESULT SelectedItem([out, retval] IDispatch **pItem);
+ [id(15), propput] HRESULT SelectedItem([in] IDispatch *pItem);
+
+ [id(16), propget] HRESULT Root([out, retval] VARIANT *pvar);
+ [id(16), propput] HRESULT Root([in] VARIANT pvar);
+
+ [id(17), propget] HRESULT Depth([out, retval] int *piDepth);
+ [id(17), propput] HRESULT Depth([in] int piDepth);
+
+ [id(18), propget] HRESULT Mode([out, retval] unsigned int *puMode);
+ [id(18), propput] HRESULT Mode([in] unsigned int puMode);
+
+ [id(19), propget] HRESULT Flags([out, retval] unsigned long *pdwFlags);
+ [id(19), propput] HRESULT Flags([in] unsigned long pdwFlags);
+
+ [id(20), propput] HRESULT TVFlags([in] unsigned long dwFlags);
+ [id(20), propget] HRESULT TVFlags([out, retval] unsigned long *dwFlags);
+
+ [id(21), propget] HRESULT Columns([out, retval] BSTR *bstrColumns);
+ [id(21), propput] HRESULT Columns([in] BSTR bstrColumns);
+
+ [id(22), propget] HRESULT CountViewTypes([out, retval] int *piTypes);
+
+ [id(23)] HRESULT SetViewType([in] int iType);
+ [id(24)] HRESULT SelectedItems([out, retval] IDispatch **ppid);
+ [id(25)] HRESULT Expand([in] VARIANT var, int iDepth);
+ [id(26)] HRESULT UnselectAll();
+}
+
+[
+ helpstring("Shell Name Space"),
+ threading(apartment),
+ progid("ShellNameSpace.ShellNameSpace.1"),
+ vi_progid("ShellNameSpace.ShellNameSpace"),
+ uuid(2f2f1f96-2bc1-4b1c-be28-ea3774f4676a)
+]
+coclass ShellShellNameSpace {
+ [default] interface IShellNameSpace;
+ [default, source] dispinterface DShellNameSpaceEvents;
+}
+
+[
+ helpstring("Shell Name Space"),
+ threading(apartment),
+ progid("ShellNameSpace.ShellNameSpace.1"),
+ vi_progid("ShellNameSpace.ShellNameSpace"),
+ uuid(55136805-b2de-11d1-b9f2-00a0c98bc547)
+]
+coclass ShellNameSpace {
+ [default] interface IShellNameSpace;
+ [default, source] dispinterface DShellNameSpaceEvents;
+}
+
+[
+ odl,
+ uuid(f3470f24-15fd-11d2-bb2e-00805ff7efca),
+ hidden,
+ dual,
+ oleautomation
+]
+interface IScriptErrorList : IDispatch {
+ [id(10)] HRESULT advanceError();
+ [id(11)] HRESULT retreatError();
+ [id(12)] HRESULT canAdvanceError([out, retval] long *pfCanAdvance);
+ [id(13)] HRESULT canRetreatError([out, retval] long *pfCanRetreat);
+ [id(14)] HRESULT getErrorLine([out, retval] long *plLine);
+ [id(15)] HRESULT getErrorChar([out, retval] long *plChar);
+ [id(16)] HRESULT getErrorCode([out, retval] long *plCode);
+ [id(17)] HRESULT getErrorMsg([out, retval] BSTR *pstr);
+ [id(18)] HRESULT getErrorUrl([out, retval] BSTR *pstr);
+ [id(23)] HRESULT getAlwaysShowLockState([out, retval] long *pfAlwaysShowLocked);
+ [id(19)] HRESULT getDetailsPaneOpen([out, retval] long *pfDetailsPaneOpen);
+ [id(20)] HRESULT setDetailsPaneOpen(long fDetailsPaneOpen);
+ [id(21)] HRESULT getPerErrorDisplay([out, retval] long *pfPerErrorDisplay);
+ [id(22)] HRESULT setPerErrorDisplay(long fPerErrorDisplay);
+}
+
+[
+ uuid(efd01300-160f-11d2-bb2e-00805ff7efca),
+ hidden,
+ noncreatable
+]
+coclass CScriptErrorList {
+ [default] interface IScriptErrorList;
+}
+
+[
+ odl,
+ uuid(ba9239a4-3dd5-11d2-bf8b-00c04fb93661),
+ hidden,
+ dual,
+ oleautomation
+]
+interface ISearch : IDispatch {
+ [propget] HRESULT Title([out, retval] BSTR *pbstrTitle);
+ [propget] HRESULT Id([out, retval] BSTR *pbstrId);
+ [propget] HRESULT URL([out, retval] BSTR *pbstrUrl);
+}
+
+[
+ odl,
+ uuid(47c922a2-3dd5-11d2-bf8b-00c04fb93661),
+ hidden,
+ dual,
+ oleautomation
+]
+interface ISearches : IDispatch {
+ [propget] HRESULT Count([out, retval] long *plCount);
+ [propget] HRESULT Default([out, retval] BSTR *pbstrDefault);
+
+ HRESULT Item(
+ [in, optional] VARIANT index,
+ [out, retval] ISearch **ppid);
+
+ [id(-4)] HRESULT _NewEnum([out, retval] IUnknown **ppunk);
+}
+
+[
+ odl,
+ uuid(72423e8f-8011-11d2-be79-00a0c9a83da1),
+ hidden,
+ dual,
+ oleautomation
+]
+interface ISearchAssistantOC : IDispatch {
+ [id(1)] HRESULT AddNextMenuItem([in] BSTR bstrText, [in] long idItem);
+ [id(2)] HRESULT SetDefaultSearchUrl([in] BSTR bstrUrl);
+ [id(3)] HRESULT NavigateToDefaultSearch();
+
+ [id(4)] HRESULT IsRestricted(
+ [in] BSTR bstrGuid,
+ [out, retval] VARIANT_BOOL *pVal);
+
+ [id(5), propget] HRESULT ShellFeaturesEnabled([out, retval] VARIANT_BOOL *pVal);
+ [id(6), propget] HRESULT SearchAssistantDefault([out, retval] VARIANT_BOOL *pVal);
+ [id(7), propget] HRESULT Searches([out, retval] ISearches **ppid);
+ [id(8), propget] HRESULT InWebFolder([out, retval] VARIANT_BOOL *pVal);
+
+ [id(9)] HRESULT PutProperty(
+ [in] VARIANT_BOOL bPerLocale,
+ [in] BSTR bstrName,
+ [in] BSTR bstrValue);
+
+ [id(10)] HRESULT GetProperty(
+ [in] VARIANT_BOOL bPerLocale,
+ [in] BSTR bstrName,
+ [out, retval] BSTR *pbstrValue);
+
+ [id(11), propput] HRESULT EventHandled([in] VARIANT_BOOL rhs);
+ [id(12)] HRESULT ResetNextMenu();
+ [id(13)] HRESULT FindOnWeb();
+ [id(14)] HRESULT FindFilesOrFolders();
+ [id(15)] HRESULT FindComputer();
+ [id(16)] HRESULT FindPrinter();
+ [id(17)] HRESULT FindPeople();
+
+ [id(18)] HRESULT GetSearchAssistantURL(
+ [in] VARIANT_BOOL bSubstitute,
+ [in] VARIANT_BOOL bCustomize,
+ [out, retval] BSTR *pbstrValue);
+
+ [id(19)] HRESULT NotifySearchSettingsChanged();
+
+ [id(20), propput] HRESULT ASProvider([in] BSTR pProvider);
+ [id(20), propget] HRESULT ASProvider([out, retval] BSTR *pProvider);
+
+ [id(21), propput] HRESULT ASSetting([in] int pSetting);
+ [id(21), propget] HRESULT ASSetting([out, retval] int *pSetting);
+
+ [id(22)] HRESULT NETDetectNextNavigate();
+ [id(23)] HRESULT PutFindText([in] BSTR FindText);
+ [id(24), propget] HRESULT Version([out, retval] int *pVersion);
+
+ [id(25)] HRESULT EncodeString(
+ [in] BSTR bstrValue,
+ [in] BSTR bstrCharSet,
+ [in] VARIANT_BOOL bUseUTF8,
+ [out, retval] BSTR* pbstrResult);
+}
+
+[
+ odl,
+ uuid(72423e8f-8011-11d2-be79-00a0c9a83da2),
+ hidden,
+ dual,
+ oleautomation
+]
+interface ISearchAssistantOC2 : ISearchAssistantOC {
+ [id(26), propget] HRESULT ShowFindPrinter([out, retval] VARIANT_BOOL *pbShowFindPrinter);
+}
+
+[
+ odl,
+ uuid(72423e8f-8011-11d2-be79-00a0c9a83da3),
+ hidden,
+ dual,
+ oleautomation
+]
+interface ISearchAssistantOC3 : ISearchAssistantOC2 {
+ [id(27), propget] HRESULT SearchCompanionAvailable([out, retval] VARIANT_BOOL *pbAvailable);
+
+ [id(28), propput] HRESULT UseSearchCompanion([in] VARIANT_BOOL pbUseSC);
+ [id(28), propget] HRESULT UseSearchCompanion([out, retval] VARIANT_BOOL *pbUseSC);
+}
+
+[
+ uuid(1611fdda-445b-11d2-85de-00C04fa35c89),
+ hidden
+]
+dispinterface _SearchAssistantEvents {
+ properties:
+ methods:
+ [id(1)] void OnNextMenuSelect([in] long idItem);
+ [id(2)] void OnNewSearch();
+}
+
+[
+ helpstring("SearchAssistantOC"),
+ threading(apartment),
+ progid("SearchAssistantOC.SearchAssistantOC.1"),
+ vi_progid("SearchAssistantOC.SearchAssistantOC"),
+ uuid(2e71fd0f-aab1-42c0-9146-6d2c4edcf07d),
+ hidden
+]
+coclass ShellSearchAssistantOC {
+ [default] interface ISearchAssistantOC3;
+ [default, source] dispinterface _SearchAssistantEvents;
+}
+
+[
+ threading(apartment),
+ progid("SearchAssistantOC.SearchAssistantOC.1"),
+ vi_progid("SearchAssistantOC.SearchAssistantOC"),
+ uuid(b45ff030-4447-11d2-85de-00C04fa35c89),
+ hidden
+]
+coclass SearchAssistantOC {
+ [default] interface ISearchAssistantOC3;
+ [default, source] dispinterface _SearchAssistantEvents;
+}
+
+} /* library */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h
new file mode 100644
index 00000000..3b23a737
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/exdispid.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2004 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef EXDISPID_H_
+#define EXDISPID_H_
+
+#define DISPID_BEFORENAVIGATE 100
+#define DISPID_NAVIGATECOMPLETE 101
+#define DISPID_STATUSTEXTCHANGE 102
+#define DISPID_QUIT 103
+#define DISPID_DOWNLOADCOMPLETE 104
+#define DISPID_COMMANDSTATECHANGE 105
+#define DISPID_DOWNLOADBEGIN 106
+#define DISPID_NEWWINDOW 107
+#define DISPID_PROGRESSCHANGE 108
+#define DISPID_WINDOWMOVE 109
+#define DISPID_WINDOWRESIZE 110
+#define DISPID_WINDOWACTIVATE 111
+#define DISPID_PROPERTYCHANGE 112
+#define DISPID_TITLECHANGE 113
+#define DISPID_TITLEICONCHANGE 114
+
+#define DISPID_FRAMEBEFORENAVIGATE 200
+#define DISPID_FRAMENAVIGATECOMPLETE 201
+
+#define DISPID_FRAMENEWWINDOW 204
+
+#define DISPID_BEFORENAVIGATE2 250
+#define DISPID_NEWWINDOW2 251
+#define DISPID_NAVIGATECOMPLETE2 252
+#define DISPID_ONQUIT 253
+#define DISPID_ONVISIBLE 254
+#define DISPID_ONTOOLBAR 255
+#define DISPID_ONMENUBAR 256
+#define DISPID_ONSTATUSBAR 257
+#define DISPID_ONFULLSCREEN 258
+#define DISPID_DOCUMENTCOMPLETE 259
+#define DISPID_ONTHEATERMODE 260
+#define DISPID_ONADDRESSBAR 261
+#define DISPID_WINDOWSETRESIZABLE 262
+#define DISPID_WINDOWCLOSING 263
+#define DISPID_WINDOWSETLEFT 264
+#define DISPID_WINDOWSETTOP 265
+#define DISPID_WINDOWSETWIDTH 266
+#define DISPID_WINDOWSETHEIGHT 267
+#define DISPID_CLIENTTOHOSTWINDOW 268
+#define DISPID_SETSECURELOCKICON 269
+#define DISPID_FILEDOWNLOAD 270
+#define DISPID_NAVIGATEERROR 271
+#define DISPID_PRIVACYIMPACTEDSTATECHANGE 272
+#define DISPID_NEWWINDOW3 273
+#define DISPID_VIEWUPDATE 281
+#define DISPID_SETPHISHINGFILTERSTATUS 282
+#define DISPID_WINDOWSTATECHANGED 283
+#define DISPID_NEWPROCESS 284
+#define DISPID_THIRDPARTYURLBLOCKED 285
+#define DISPID_REDIRECTXDOMAINBLOCKED 286
+
+#define DISPID_PRINTTEMPLATEINSTANTIATION 225
+#define DISPID_PRINTTEMPLATETEARDOWN 226
+#define DISPID_UPDATEPAGESTATUS 227
+
+#define DISPID_WINDOWREGISTERED 200
+#define DISPID_WINDOWREVOKED 201
+
+#define DISPID_RESETFIRSTBOOTMODE 1
+#define DISPID_RESETSAFEMODE 2
+#define DISPID_REFRESHOFFLINEDESKTOP 3
+#define DISPID_ADDFAVORITE 4
+#define DISPID_ADDCHANNEL 5
+#define DISPID_ADDDESKTOPCOMPONENT 6
+#define DISPID_ISSUBSCRIBED 7
+#define DISPID_NAVIGATEANDFIND 8
+#define DISPID_IMPORTEXPORTFAVORITES 9
+#define DISPID_AUTOCOMPLETESAVEFORM 10
+#define DISPID_AUTOSCAN 11
+#define DISPID_AUTOCOMPLETEATTACH 12
+#define DISPID_SHOWBROWSERUI 13
+#define DISPID_ADDSEARCHPROVIDER 14
+#define DISPID_RUNONCESHOWN 15
+#define DISPID_SKIPRUNONCE 16
+#define DISPID_CUSTOMIZESETTINGS 17
+#define DISPID_SQMENABLED 18
+#define DISPID_PHISHINGENABLED 19
+#define DISPID_BRANDIMAGEURI 20
+#define DISPID_SKIPTABSWELCOME 21
+#define DISPID_DIAGNOSECONNECTION 22
+#define DISPID_CUSTOMIZECLEARTYPE 23
+#define DISPID_ISSEARCHPROVIDERINSTALLED 24
+#define DISPID_ISSEARCHMIGRATED 25
+#define DISPID_DEFAULTSEARCHPROVIDER 26
+#define DISPID_RUNONCEREQUIREDSETTINGSCOMPLETE 27
+#define DISPID_RUNONCEHASSHOWN 28
+#define DISPID_SEARCHGUIDEURL 29
+#define DISPID_ADDSERVICE 30
+#define DISPID_ISSERVICEINSTALLED 31
+#define DISPID_ADDTOFAVORITESBAR 32
+#define DISPID_BUILDNEWTABPAGE 33
+#define DISPID_SETRECENTLYCLOSEDVISIBLE 34
+#define DISPID_SETACTIVITIESVISIBLE 35
+#define DISPID_CONTENTDISCOVERYRESET 36
+#define DISPID_INPRIVATEFILTERINGENABLED 37
+#define DISPID_SUGGESTEDSITESENABLED 38
+#define DISPID_ENABLESUGGESTEDSITES 39
+#define DISPID_NAVIGATETOSUGGESTEDSITES 40
+#define DISPID_SHOWTABSHELP 41
+#define DISPID_SHOWINPRIVATEHELP 42
+#define DISPID_SHELLUIHELPERLAST 43
+
+#define DISPID_ADVANCEERROR 10
+#define DISPID_RETREATERROR 11
+#define DISPID_CANADVANCEERROR 12
+#define DISPID_CANRETREATERROR 13
+#define DISPID_GETERRORLINE 14
+#define DISPID_GETERRORCHAR 15
+#define DISPID_GETERRORCODE 16
+#define DISPID_GETERRORMSG 17
+#define DISPID_GETERRORURL 18
+#define DISPID_GETDETAILSSTATE 19
+#define DISPID_SETDETAILSSTATE 20
+#define DISPID_GETPERERRSTATE 21
+#define DISPID_SETPERERRSTATE 22
+#define DISPID_GETALWAYSSHOWLOCKSTATE 23
+
+#define DISPID_FAVSELECTIONCHANGE 1
+#define DISPID_SELECTIONCHANGE 2
+#define DISPID_DOUBLECLICK 3
+#define DISPID_INITIALIZED 4
+
+#define DISPID_MOVESELECTIONUP 1
+#define DISPID_MOVESELECTIONDOWN 2
+#define DISPID_RESETSORT 3
+#define DISPID_NEWFOLDER 4
+#define DISPID_SYNCHRONIZE 5
+#define DISPID_IMPORT 6
+#define DISPID_EXPORT 7
+#define DISPID_INVOKECONTEXTMENU 8
+#define DISPID_MOVESELECTIONTO 9
+#define DISPID_SUBSCRIPTIONSENABLED 10
+#define DISPID_CREATESUBSCRIPTION 11
+#define DISPID_DELETESUBSCRIPTION 12
+#define DISPID_SETROOT 13
+#define DISPID_ENUMOPTIONS 14
+#define DISPID_SELECTEDITEM 15
+#define DISPID_ROOT 16
+#define DISPID_DEPTH 17
+#define DISPID_MODE 18
+#define DISPID_FLAGS 19
+#define DISPID_TVFLAGS 20
+#define DISPID_NSCOLUMNS 21
+#define DISPID_COUNTVIEWTYPES 22
+#define DISPID_SETVIEWTYPE 23
+#define DISPID_SELECTEDITEMS 24
+#define DISPID_EXPAND 25
+#define DISPID_UNSELECTALL 26
+
+#endif /* EXDISPID_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h
new file mode 100644
index 00000000..6dcb3eda
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fci.h
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_FCI_H
+#define __WINE_FCI_H
+
+#include <basetsd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <pshpack4.h>
+#endif
+
+#ifndef INCLUDED_TYPES_FCI_FDI
+#define INCLUDED_TYPES_FCI_FDI 1
+
+/***********************************************************************
+ * Common FCI/TDI declarations
+ */
+
+typedef ULONG CHECKSUM;
+
+typedef ULONG UOFF;
+typedef ULONG COFF;
+
+/**********************************************************************/
+
+typedef struct {
+ int erfOper; /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */
+ int erfType; /* Optional error value filled in by FCI/FDI. */
+ BOOL fError; /* TRUE => error present */
+} ERF, *PERF;
+
+/**********************************************************************/
+
+#define CB_MAX_CHUNK 32768U
+#define CB_MAX_DISK __MSABI_LONG(0x7fffffff)
+#define CB_MAX_FILENAME 256
+#define CB_MAX_CABINET_NAME 256
+#define CB_MAX_CAB_PATH 256
+#define CB_MAX_DISK_NAME 256
+
+/**********************************************************************/
+
+typedef unsigned short TCOMP;
+
+#define tcompMASK_TYPE 0x000F /* Mask for compression type */
+#define tcompTYPE_NONE 0x0000 /* No compression */
+#define tcompTYPE_MSZIP 0x0001 /* MSZIP */
+#define tcompTYPE_QUANTUM 0x0002 /* Quantum */
+#define tcompTYPE_LZX 0x0003 /* LZX */
+#define tcompBAD 0x000F /* Unspecified compression type */
+
+#define tcompMASK_LZX_WINDOW 0x1F00 /* Mask for LZX Compression Memory */
+#define tcompLZX_WINDOW_LO 0x0F00 /* Lowest LZX Memory (15) */
+#define tcompLZX_WINDOW_HI 0x1500 /* Highest LZX Memory (21) */
+#define tcompSHIFT_LZX_WINDOW 8 /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_LEVEL 0x00F0 /* Mask for Quantum Compression Level */
+#define tcompQUANTUM_LEVEL_LO 0x0010 /* Lowest Quantum Level (1) */
+#define tcompQUANTUM_LEVEL_HI 0x0070 /* Highest Quantum Level (7) */
+#define tcompSHIFT_QUANTUM_LEVEL 4 /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_MEM 0x1F00 /* Mask for Quantum Compression Memory */
+#define tcompQUANTUM_MEM_LO 0x0A00 /* Lowest Quantum Memory (10) */
+#define tcompQUANTUM_MEM_HI 0x1500 /* Highest Quantum Memory (21) */
+#define tcompSHIFT_QUANTUM_MEM 8 /* Amount to shift over to get int */
+
+#define tcompMASK_RESERVED 0xE000 /* Reserved bits (high 3 bits) */
+
+/**********************************************************************/
+
+#define CompressionTypeFromTCOMP(tc) \
+ ((tc) & tcompMASK_TYPE)
+
+#define CompressionLevelFromTCOMP(tc) \
+ (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)
+
+#define CompressionMemoryFromTCOMP(tc) \
+ (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)
+
+#define TCOMPfromTypeLevelMemory(t, l, m) \
+ (((m) << tcompSHIFT_QUANTUM_MEM ) | \
+ ((l) << tcompSHIFT_QUANTUM_LEVEL) | \
+ ( t ))
+
+#define LZXCompressionWindowFromTCOMP(tc) \
+ (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)
+
+#define TCOMPfromLZXWindow(w) \
+ (((w) << tcompSHIFT_LZX_WINDOW) | \
+ ( tcompTYPE_LZX ))
+
+#endif /* !defined(INCLUDED_TYPES_FCI_FDI) */
+
+/***********************************************************************
+ * FCI declarations
+ */
+
+typedef enum {
+ FCIERR_NONE,
+ FCIERR_OPEN_SRC,
+ FCIERR_READ_SRC,
+ FCIERR_ALLOC_FAIL,
+ FCIERR_TEMP_FILE,
+ FCIERR_BAD_COMPR_TYPE,
+ FCIERR_CAB_FILE,
+ FCIERR_USER_ABORT,
+ FCIERR_MCI_FAIL,
+} FCIERROR;
+
+/**********************************************************************/
+
+#ifndef _A_NAME_IS_UTF
+#define _A_NAME_IS_UTF 0x80
+#endif
+
+#ifndef _A_EXEC
+#define _A_EXEC 0x40
+#endif
+
+/**********************************************************************/
+
+typedef void *HFCI;
+
+/**********************************************************************/
+
+typedef struct {
+ ULONG cb; /* Size available for cabinet on this media */
+ ULONG cbFolderThresh; /* Threshold for forcing a new Folder */
+
+ UINT cbReserveCFHeader; /* Space to reserve in CFHEADER */
+ UINT cbReserveCFFolder; /* Space to reserve in CFFOLDER */
+ UINT cbReserveCFData; /* Space to reserve in CFDATA */
+ int iCab; /* Sequential numbers for cabinets */
+ int iDisk; /* Disk number */
+#ifndef REMOVE_CHICAGO_M6_HACK
+ int fFailOnIncompressible; /* TRUE => Fail if a block is incompressible */
+#endif
+
+ USHORT setID; /* Cabinet set ID */
+
+ char szDisk[CB_MAX_DISK_NAME]; /* Current disk name */
+ char szCab[CB_MAX_CABINET_NAME]; /* Current cabinet name */
+ char szCabPath[CB_MAX_CAB_PATH]; /* Path for creating cabinet */
+} CCAB, *PCCAB;
+
+/**********************************************************************/
+
+typedef void * (__cdecl __WINE_ALLOC_SIZE(1) *PFNFCIALLOC)(ULONG cb);
+#define FNFCIALLOC(fn) void * __cdecl fn(ULONG cb)
+
+typedef void (__cdecl *PFNFCIFREE)(void *memory);
+#define FNFCIFREE(fn) void __cdecl fn(void *memory)
+
+typedef INT_PTR (__cdecl *PFNFCIOPEN) (char *pszFile, int oflag, int pmode, int *err, void *pv);
+#define FNFCIOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode, int *err, void *pv)
+
+typedef UINT (__cdecl *PFNFCIREAD) (INT_PTR hf, void *memory, UINT cb, int *err, void *pv);
+#define FNFCIREAD(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
+
+typedef UINT (__cdecl *PFNFCIWRITE)(INT_PTR hf, void *memory, UINT cb, int *err, void *pv);
+#define FNFCIWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
+
+typedef int (__cdecl *PFNFCICLOSE)(INT_PTR hf, int *err, void *pv);
+#define FNFCICLOSE(fn) int __cdecl fn(INT_PTR hf, int *err, void *pv)
+
+typedef LONG (__cdecl *PFNFCISEEK) (INT_PTR hf, LONG dist, int seektype, int *err, void *pv);
+#define FNFCISEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype, int *err, void *pv)
+
+typedef int (__cdecl *PFNFCIDELETE) (char *pszFile, int *err, void *pv);
+#define FNFCIDELETE(fn) int __cdecl fn(char *pszFile, int *err, void *pv)
+
+typedef BOOL (__cdecl *PFNFCIGETNEXTCABINET)(PCCAB pccab, ULONG cbPrevCab, void *pv);
+#define FNFCIGETNEXTCABINET(fn) BOOL __cdecl fn(PCCAB pccab, \
+ ULONG cbPrevCab, \
+ void *pv)
+
+typedef int (__cdecl *PFNFCIFILEPLACED)(PCCAB pccab,
+ char *pszFile,
+ LONG cbFile,
+ BOOL fContinuation,
+ void *pv);
+#define FNFCIFILEPLACED(fn) int __cdecl fn(PCCAB pccab, \
+ char *pszFile, \
+ LONG cbFile, \
+ BOOL fContinuation, \
+ void *pv)
+
+typedef INT_PTR (__cdecl *PFNFCIGETOPENINFO)(char *pszName,
+ USHORT *pdate,
+ USHORT *ptime,
+ USHORT *pattribs,
+ int *err,
+ void *pv);
+#define FNFCIGETOPENINFO(fn) INT_PTR __cdecl fn(char *pszName, \
+ USHORT *pdate, \
+ USHORT *ptime, \
+ USHORT *pattribs, \
+ int *err, \
+ void *pv)
+
+#define statusFile 0 /* Add File to Folder callback */
+#define statusFolder 1 /* Add Folder to Cabinet callback */
+#define statusCabinet 2 /* Write out a completed cabinet callback */
+
+typedef LONG (__cdecl *PFNFCISTATUS)(UINT typeStatus,
+ ULONG cb1,
+ ULONG cb2,
+ void *pv);
+#define FNFCISTATUS(fn) LONG __cdecl fn(UINT typeStatus, \
+ ULONG cb1, \
+ ULONG cb2, \
+ void *pv)
+
+typedef BOOL (__cdecl *PFNFCIGETTEMPFILE)(char *pszTempName,
+ int cbTempName,
+ void *pv);
+#define FNFCIGETTEMPFILE(fn) BOOL __cdecl fn(char *pszTempName, \
+ int cbTempName, \
+ void *pv)
+
+/**********************************************************************/
+
+HFCI __cdecl FCICreate(PERF, PFNFCIFILEPLACED, PFNFCIALLOC, PFNFCIFREE,
+ PFNFCIOPEN, PFNFCIREAD, PFNFCIWRITE, PFNFCICLOSE,
+ PFNFCISEEK, PFNFCIDELETE, PFNFCIGETTEMPFILE, PCCAB,
+ void *);
+BOOL __cdecl FCIAddFile(HFCI, char *, char *, BOOL, PFNFCIGETNEXTCABINET,
+ PFNFCISTATUS, PFNFCIGETOPENINFO, TCOMP);
+BOOL __cdecl FCIFlushCabinet(HFCI, BOOL, PFNFCIGETNEXTCABINET, PFNFCISTATUS);
+BOOL __cdecl FCIFlushFolder(HFCI, PFNFCIGETNEXTCABINET, PFNFCISTATUS);
+BOOL __cdecl FCIDestroy(HFCI hfci);
+
+/**********************************************************************/
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_FCI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h
new file mode 100644
index 00000000..e4847680
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fdi.h
@@ -0,0 +1,310 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_FDI_H
+#define __WINE_FDI_H
+
+#include <basetsd.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <pshpack4.h>
+#endif
+
+#ifndef INCLUDED_TYPES_FCI_FDI
+#define INCLUDED_TYPES_FCI_FDI 1
+
+/***********************************************************************
+ * Common FCI/TDI declarations
+ */
+
+typedef ULONG CHECKSUM;
+
+typedef ULONG UOFF;
+typedef ULONG COFF;
+
+/**********************************************************************/
+
+typedef struct {
+ int erfOper; /* FCI/FDI error code - see {FCI,FDI}ERROR_XXX for details. */
+ int erfType; /* Optional error value filled in by FCI/FDI. */
+ BOOL fError; /* TRUE => error present */
+} ERF, *PERF;
+
+/**********************************************************************/
+
+#define CB_MAX_CHUNK 32768U
+#define CB_MAX_DISK __MSABI_LONG(0x7fffffff)
+#define CB_MAX_FILENAME 256
+#define CB_MAX_CABINET_NAME 256
+#define CB_MAX_CAB_PATH 256
+#define CB_MAX_DISK_NAME 256
+
+/**********************************************************************/
+
+typedef unsigned short TCOMP;
+
+#define tcompMASK_TYPE 0x000F /* Mask for compression type */
+#define tcompTYPE_NONE 0x0000 /* No compression */
+#define tcompTYPE_MSZIP 0x0001 /* MSZIP */
+#define tcompTYPE_QUANTUM 0x0002 /* Quantum */
+#define tcompTYPE_LZX 0x0003 /* LZX */
+#define tcompBAD 0x000F /* Unspecified compression type */
+
+#define tcompMASK_LZX_WINDOW 0x1F00 /* Mask for LZX Compression Memory */
+#define tcompLZX_WINDOW_LO 0x0F00 /* Lowest LZX Memory (15) */
+#define tcompLZX_WINDOW_HI 0x1500 /* Highest LZX Memory (21) */
+#define tcompSHIFT_LZX_WINDOW 8 /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_LEVEL 0x00F0 /* Mask for Quantum Compression Level */
+#define tcompQUANTUM_LEVEL_LO 0x0010 /* Lowest Quantum Level (1) */
+#define tcompQUANTUM_LEVEL_HI 0x0070 /* Highest Quantum Level (7) */
+#define tcompSHIFT_QUANTUM_LEVEL 4 /* Amount to shift over to get int */
+
+#define tcompMASK_QUANTUM_MEM 0x1F00 /* Mask for Quantum Compression Memory */
+#define tcompQUANTUM_MEM_LO 0x0A00 /* Lowest Quantum Memory (10) */
+#define tcompQUANTUM_MEM_HI 0x1500 /* Highest Quantum Memory (21) */
+#define tcompSHIFT_QUANTUM_MEM 8 /* Amount to shift over to get int */
+
+#define tcompMASK_RESERVED 0xE000 /* Reserved bits (high 3 bits) */
+
+/**********************************************************************/
+
+#define CompressionTypeFromTCOMP(tc) \
+ ((tc) & tcompMASK_TYPE)
+
+#define CompressionLevelFromTCOMP(tc) \
+ (((tc) & tcompMASK_QUANTUM_LEVEL) >> tcompSHIFT_QUANTUM_LEVEL)
+
+#define CompressionMemoryFromTCOMP(tc) \
+ (((tc) & tcompMASK_QUANTUM_MEM) >> tcompSHIFT_QUANTUM_MEM)
+
+#define TCOMPfromTypeLevelMemory(t, l, m) \
+ (((m) << tcompSHIFT_QUANTUM_MEM ) | \
+ ((l) << tcompSHIFT_QUANTUM_LEVEL) | \
+ ( t ))
+
+#define LZXCompressionWindowFromTCOMP(tc) \
+ (((tc) & tcompMASK_LZX_WINDOW) >> tcompSHIFT_LZX_WINDOW)
+
+#define TCOMPfromLZXWindow(w) \
+ (((w) << tcompSHIFT_LZX_WINDOW) | \
+ ( tcompTYPE_LZX ))
+
+#endif /* !defined(INCLUDED_TYPES_FCI_FDI) */
+
+/***********************************************************************
+ * FDI declarations
+ */
+
+typedef enum {
+ FDIERROR_NONE,
+ FDIERROR_CABINET_NOT_FOUND,
+ FDIERROR_NOT_A_CABINET,
+ FDIERROR_UNKNOWN_CABINET_VERSION,
+ FDIERROR_CORRUPT_CABINET,
+ FDIERROR_ALLOC_FAIL,
+ FDIERROR_BAD_COMPR_TYPE,
+ FDIERROR_MDI_FAIL,
+ FDIERROR_TARGET_FILE,
+ FDIERROR_RESERVE_MISMATCH,
+ FDIERROR_WRONG_CABINET,
+ FDIERROR_USER_ABORT,
+} FDIERROR;
+
+/**********************************************************************/
+
+#ifndef _A_NAME_IS_UTF
+#define _A_NAME_IS_UTF 0x80
+#endif
+
+#ifndef _A_EXEC
+#define _A_EXEC 0x40
+#endif
+
+/**********************************************************************/
+
+typedef void *HFDI;
+
+/**********************************************************************/
+
+typedef struct {
+ LONG cbCabinet; /* Total length of cabinet file */
+ USHORT cFolders; /* Count of folders in cabinet */
+ USHORT cFiles; /* Count of files in cabinet */
+ USHORT setID; /* Cabinet set ID */
+ USHORT iCabinet; /* Cabinet number in set (0 based) */
+ BOOL fReserve; /* TRUE => RESERVE present in cabinet */
+ BOOL hasprev; /* TRUE => Cabinet is chained prev */
+ BOOL hasnext; /* TRUE => Cabinet is chained next */
+} FDICABINETINFO, *PFDICABINETINFO; /* pfdici */
+
+/**********************************************************************/
+
+typedef enum {
+ fdidtNEW_CABINET, /* New cabinet */
+ fdidtNEW_FOLDER, /* New folder */
+ fdidtDECRYPT, /* Decrypt a data block */
+} FDIDECRYPTTYPE;
+
+/**********************************************************************/
+
+typedef struct {
+ FDIDECRYPTTYPE fdidt; /* Command type (selects union below) */
+
+ void *pvUser; /* Decryption context */
+
+ union {
+ struct { /* fdidtNEW_CABINET */
+ void *pHeaderReserve; /* RESERVE section from CFHEADER */
+ USHORT cbHeaderReserve; /* Size of pHeaderReserve */
+ USHORT setID; /* Cabinet set ID */
+ int iCabinet; /* Cabinet number in set (0 based) */
+ } cabinet;
+
+ struct { /* fdidtNEW_FOLDER */
+ void *pFolderReserve; /* RESERVE section from CFFOLDER */
+ USHORT cbFolderReserve; /* Size of pFolderReserve */
+ USHORT iFolder; /* Folder number in cabinet (0 based) */
+ } folder;
+
+ struct { /* fdidtDECRYPT */
+ void *pDataReserve; /* RESERVE section from CFDATA */
+ USHORT cbDataReserve; /* Size of pDataReserve */
+ void *pbData; /* Data buffer */
+ USHORT cbData; /* Size of data buffer */
+ BOOL fSplit; /* TRUE if this is a split data block */
+ USHORT cbPartial; /* 0 if this is not a split block, or
+ * the first piece of a split block;
+ * Greater than 0 if this is the
+ * second piece of a split block.
+ */
+ } decrypt;
+ } DUMMYUNIONNAME;
+} FDIDECRYPT, *PFDIDECRYPT;
+
+/**********************************************************************/
+
+typedef void * (__cdecl *PFNALLOC)(ULONG cb);
+#define FNALLOC(fn) void * __cdecl fn(ULONG cb)
+
+typedef void (__cdecl *PFNFREE)(void *pv);
+#define FNFREE(fn) void __cdecl fn(void *pv)
+
+typedef INT_PTR (__cdecl *PFNOPEN) (char *pszFile, int oflag, int pmode);
+#define FNOPEN(fn) INT_PTR __cdecl fn(char *pszFile, int oflag, int pmode)
+
+typedef UINT (__cdecl *PFNREAD) (INT_PTR hf, void *pv, UINT cb);
+#define FNREAD(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb)
+
+typedef UINT (__cdecl *PFNWRITE)(INT_PTR hf, void *pv, UINT cb);
+#define FNWRITE(fn) UINT __cdecl fn(INT_PTR hf, void *pv, UINT cb)
+
+typedef int (__cdecl *PFNCLOSE)(INT_PTR hf);
+#define FNCLOSE(fn) int __cdecl fn(INT_PTR hf)
+
+typedef LONG (__cdecl *PFNSEEK) (INT_PTR hf, LONG dist, int seektype);
+#define FNSEEK(fn) LONG __cdecl fn(INT_PTR hf, LONG dist, int seektype)
+
+typedef int (__cdecl *PFNFDIDECRYPT)(PFDIDECRYPT pfdid);
+#define FNFDIDECRYPT(fn) int __cdecl fn(PFDIDECRYPT pfdid)
+
+typedef struct {
+ LONG cb;
+ char *psz1;
+ char *psz2;
+ char *psz3; /* Points to a 256 character buffer */
+ void *pv; /* Value for client */
+
+ INT_PTR hf;
+
+ USHORT date;
+ USHORT time;
+ USHORT attribs;
+
+ USHORT setID; /* Cabinet set ID */
+ USHORT iCabinet; /* Cabinet number (0-based) */
+ USHORT iFolder; /* Folder number (0-based) */
+
+ FDIERROR fdie;
+} FDINOTIFICATION, *PFDINOTIFICATION;
+
+typedef enum {
+ fdintCABINET_INFO, /* General information about cabinet */
+ fdintPARTIAL_FILE, /* First file in cabinet is continuation */
+ fdintCOPY_FILE, /* File to be copied */
+ fdintCLOSE_FILE_INFO, /* Close the file, set relevant info */
+ fdintNEXT_CABINET, /* File continued to next cabinet */
+ fdintENUMERATE, /* Enumeration status */
+} FDINOTIFICATIONTYPE;
+
+typedef INT_PTR (__cdecl *PFNFDINOTIFY)(FDINOTIFICATIONTYPE fdint,
+ PFDINOTIFICATION pfdin);
+#define FNFDINOTIFY(fn) INT_PTR __cdecl fn(FDINOTIFICATIONTYPE fdint, \
+ PFDINOTIFICATION pfdin)
+
+#ifndef _WIN64
+#include <pshpack1.h>
+#endif
+
+typedef struct {
+ char ach[2]; /* Set to { '*', '\0' } */
+ LONG cbFile; /* Required spill file size */
+} FDISPILLFILE, *PFDISPILLFILE;
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#define cpuUNKNOWN (-1) /* FDI does detection */
+#define cpu80286 (0) /* '286 opcodes only */
+#define cpu80386 (1) /* '386 opcodes used */
+
+/**********************************************************************/
+
+HFDI __cdecl FDICreate(PFNALLOC, PFNFREE, PFNOPEN, PFNREAD, PFNWRITE,
+ PFNCLOSE, PFNSEEK, int, PERF);
+BOOL __cdecl FDIIsCabinet(HFDI, INT_PTR, PFDICABINETINFO);
+BOOL __cdecl FDICopy(HFDI, char *, char *, int, PFNFDINOTIFY,
+ PFNFDIDECRYPT, void *pvUser);
+BOOL __cdecl FDIDestroy(HFDI);
+BOOL __cdecl FDITruncateCabinet(HFDI, char *, USHORT);
+
+/**********************************************************************/
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_FDI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h
new file mode 100644
index 00000000..c23dcbd9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fileapi.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2013 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_FILEAPI_H
+#define __WINE_FILEAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _CREATEFILE2_EXTENDED_PARAMETERS {
+ DWORD dwSize;
+ DWORD dwFileAttributes;
+ DWORD dwFileFlags;
+ DWORD dwSecurityQosFlags;
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes;
+ HANDLE hTemplateFile;
+} CREATEFILE2_EXTENDED_PARAMETERS, *PCREATEFILE2_EXTENDED_PARAMETERS, *LPCREATEFILE2_EXTENDED_PARAMETERS;
+
+WINBASEAPI HANDLE WINAPI CreateFile2(LPCWSTR,DWORD,DWORD,DWORD,LPCREATEFILE2_EXTENDED_PARAMETERS);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_FILEAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h
new file mode 100644
index 00000000..393dd586
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fltdefs.h
@@ -0,0 +1,142 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#ifndef _FLTDEFS_H
+#define _FLTDEFS_H
+
+typedef PVOID FILTER_HANDLE,*PFILTER_HANDLE;
+typedef PVOID INTERFACE_HANDLE,*PINTERFACE_HANDLE;
+
+#ifdef __cplusplus
+#define EXTERNCDECL EXTERN_C
+#else
+#define EXTERNCDECL
+#endif
+
+#define PFAPIENTRY EXTERNCDECL DWORD WINAPI
+
+typedef enum _GlobalFilter {
+ GF_FRAGMENTS = 2,GF_STRONGHOST = 8,GF_FRAGCACHE = 9
+} GLOBAL_FILTER,*PGLOBAL_FILTER;
+
+typedef enum _PfForwardAction {
+ PF_ACTION_FORWARD = 0,PF_ACTION_DROP
+} PFFORWARD_ACTION,*PPFFORWARD_ACTION;
+
+typedef enum _PfAddresType {
+ PF_IPV4,PF_IPV6
+} PFADDRESSTYPE,*PPFADDRESSTYPE;
+
+#define FILTER_PROTO(ProtoId) MAKELONG(MAKEWORD((ProtoId),0x00),0x00000)
+
+#define FILTER_PROTO_ANY FILTER_PROTO(0x00)
+#define FILTER_PROTO_ICMP FILTER_PROTO(0x01)
+#define FILTER_PROTO_TCP FILTER_PROTO(0x06)
+#define FILTER_PROTO_UDP FILTER_PROTO(0x11)
+
+#define FILTER_TCPUDP_PORT_ANY (WORD)0x0000
+
+#define FILTER_ICMP_TYPE_ANY (BYTE)0xff
+#define FILTER_ICMP_CODE_ANY (BYTE)0xff
+
+typedef struct _PF_FILTER_DESCRIPTOR {
+ DWORD dwFilterFlags;
+ DWORD dwRule;
+ PFADDRESSTYPE pfatType;
+ PBYTE SrcAddr;
+ PBYTE SrcMask;
+ PBYTE DstAddr;
+ PBYTE DstMask;
+ DWORD dwProtocol;
+ DWORD fLateBound;
+ WORD wSrcPort;
+ WORD wDstPort;
+ WORD wSrcPortHighRange;
+ WORD wDstPortHighRange;
+} PF_FILTER_DESCRIPTOR,*PPF_FILTER_DESCRIPTOR;
+
+typedef struct _PF_FILTER_STATS {
+ DWORD dwNumPacketsFiltered;
+ PF_FILTER_DESCRIPTOR info;
+} PF_FILTER_STATS,*PPF_FILTER_STATS;
+
+typedef struct _PF_INTERFACE_STATS {
+ PVOID pvDriverContext;
+ DWORD dwFlags;
+ DWORD dwInDrops;
+ DWORD dwOutDrops;
+ PFFORWARD_ACTION eaInAction;
+ PFFORWARD_ACTION eaOutAction;
+ DWORD dwNumInFilters;
+ DWORD dwNumOutFilters;
+ DWORD dwFrag;
+ DWORD dwSpoof;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ LARGE_INTEGER liSYN;
+ LARGE_INTEGER liTotalLogged;
+ DWORD dwLostLogEntries;
+ PF_FILTER_STATS FilterInfo[1];
+} PF_INTERFACE_STATS,*PPF_INTERFACE_STATS;
+
+#define FILTERSIZE (sizeof(PF_FILTER_DESCRIPTOR) - (DWORD)(&((PPF_FILTER_DESCRIPTOR)0)->SrcAddr))
+
+#define FD_FLAGS_NOSYN 0x1
+
+#define FD_FLAGS_ALLFLAGS FD_FLAGS_NOSYN
+
+#define LB_SRC_ADDR_USE_SRCADDR_FLAG 0x00000001
+#define LB_SRC_ADDR_USE_DSTADDR_FLAG 0x00000002
+#define LB_DST_ADDR_USE_SRCADDR_FLAG 0x00000004
+#define LB_DST_ADDR_USE_DSTADDR_FLAG 0x00000008
+#define LB_SRC_MASK_LATE_FLAG 0x00000010
+#define LB_DST_MASK_LATE_FLAG 0x00000020
+
+typedef struct _PF_LATEBIND_INFO {
+ PBYTE SrcAddr;
+ PBYTE DstAddr;
+ PBYTE Mask;
+} PF_LATEBIND_INFO,*PPF_LATEBIND_INFO;
+
+typedef enum _PfFrameType {
+ PFFT_FILTER = 1,PFFT_FRAG = 2,PFFT_SPOOF = 3
+} PFFRAMETYPE,*PPFFRAMETYPE;
+
+typedef struct _pfLogFrame {
+ LARGE_INTEGER Timestamp;
+ PFFRAMETYPE pfeTypeOfFrame;
+ DWORD dwTotalSizeUsed;
+ DWORD dwFilterRule;
+ WORD wSizeOfAdditionalData;
+ WORD wSizeOfIpHeader;
+ DWORD dwInterfaceName;
+ DWORD dwIPIndex;
+ BYTE bPacketData[1];
+} PFLOGFRAME,*PPFLOGFRAME;
+
+#define ERROR_BASE 23000
+
+#define PFERROR_NO_PF_INTERFACE (ERROR_BASE + 0)
+#define PFERROR_NO_FILTERS_GIVEN (ERROR_BASE + 1)
+#define PFERROR_BUFFER_TOO_SMALL (ERROR_BASE + 2)
+#define ERROR_IPV6_NOT_IMPLEMENTED (ERROR_BASE + 3)
+
+PFAPIENTRY PfCreateInterface(DWORD dwName,PFFORWARD_ACTION inAction,PFFORWARD_ACTION outAction,BOOL bUseLog,BOOL bMustBeUnique,INTERFACE_HANDLE *ppInterface);
+PFAPIENTRY PfDeleteInterface(INTERFACE_HANDLE pInterface);
+PFAPIENTRY PfAddFiltersToInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut,PFILTER_HANDLE pfHandle);
+PFAPIENTRY PfRemoveFiltersFromInterface(INTERFACE_HANDLE ih,DWORD cInFilters,PPF_FILTER_DESCRIPTOR pfiltIn,DWORD cOutFilters,PPF_FILTER_DESCRIPTOR pfiltOut);
+PFAPIENTRY PfRemoveFilterHandles(INTERFACE_HANDLE pInterface,DWORD cFilters,PFILTER_HANDLE pvHandles);
+PFAPIENTRY PfUnBindInterface(INTERFACE_HANDLE pInterface);
+PFAPIENTRY PfBindInterfaceToIndex(INTERFACE_HANDLE pInterface,DWORD dwIndex,PFADDRESSTYPE pfatLinkType,PBYTE LinkIPAddress);
+PFAPIENTRY PfBindInterfaceToIPAddress(INTERFACE_HANDLE pInterface,PFADDRESSTYPE pfatType,PBYTE IPAddress);
+PFAPIENTRY PfRebindFilters(INTERFACE_HANDLE pInterface,PPF_LATEBIND_INFO pLateBindInfo);
+PFAPIENTRY PfAddGlobalFilterToInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);
+PFAPIENTRY PfRemoveGlobalFilterFromInterface(INTERFACE_HANDLE pInterface,GLOBAL_FILTER gfFilter);
+PFAPIENTRY PfMakeLog(HANDLE hEvent);
+PFAPIENTRY PfSetLogBuffer(PBYTE pbBuffer,DWORD dwSize,DWORD dwThreshold,DWORD dwEntries,PDWORD pdwLoggedEntries,PDWORD pdwLostEntries,PDWORD pdwSizeUsed);
+PFAPIENTRY PfDeleteLog(VOID);
+PFAPIENTRY PfGetInterfaceStatistics(INTERFACE_HANDLE pInterface,PPF_INTERFACE_STATS ppfStats,PDWORD pdwBufferSize,BOOL fResetCounters);
+PFAPIENTRY PfTestPacket(INTERFACE_HANDLE pInInterface,INTERFACE_HANDLE pOutInterface,DWORD cBytes,PBYTE pbPacket,PPFFORWARD_ACTION ppAction);
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl
new file mode 100644
index 00000000..5ca8af0b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/fusion.idl
@@ -0,0 +1,365 @@
+/*
+ * Copyright 2008 James Hawkins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+interface IAssemblyCache;
+interface IAssemblyCacheItem;
+interface IAssemblyEnum;
+interface IAssemblyName;
+
+typedef enum
+{
+ ASM_CACHE_ZAP = 0x1,
+ ASM_CACHE_GAC = 0x2,
+ ASM_CACHE_DOWNLOAD = 0x4,
+ ASM_CACHE_ROOT = 0x8,
+ ASM_CACHE_ROOT_EX = 0x80
+} ASM_CACHE_FLAGS;
+
+typedef enum
+{
+ peNone = 0x00000000,
+ peMSIL = 0x00000001,
+ peI386 = 0x00000002,
+ peIA64 = 0x00000003,
+ peAMD64 = 0x00000004,
+ peARM = 0x00000005,
+ peInvalid = 0xffffffff
+} PEKIND;
+
+typedef enum _tagAssemblyComparisonResult
+{
+ ACR_Unknown,
+ ACR_EquivalentFullMatch,
+ ACR_EquivalentWeakNamed,
+ ACR_EquivalentFXUnified,
+ ACR_EquivalentUnified,
+ ACR_NonEquivalentVersion,
+ ACR_NonEquivalent,
+ ACR_EquivalentPartialMatch,
+ ACR_EquivalentPartialWeakNamed,
+ ACR_EquivalentPartialUnified,
+ ACR_EquivalentPartialFXUnified,
+ ACR_NonEquivalentPartialVersion
+} AssemblyComparisonResult;
+
+[
+ local,
+ object,
+ uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
+ pointer_default(unique)
+]
+interface IAssemblyCache : IUnknown
+{
+ typedef struct _FUSION_INSTALL_REFERENCE_
+ {
+ DWORD cbSize;
+ DWORD dwFlags;
+ GUID guidScheme;
+ LPCWSTR szIdentifier;
+ LPCWSTR szNonCannonicalData;
+ } FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
+
+ typedef const FUSION_INSTALL_REFERENCE *LPCFUSION_INSTALL_REFERENCE;
+
+ typedef struct _ASSEMBLY_INFO
+ {
+ ULONG cbAssemblyInfo;
+ DWORD dwAssemblyFlags;
+ ULARGE_INTEGER uliAssemblySizeInKB;
+ LPWSTR pszCurrentAssemblyPathBuf;
+ ULONG cchBuf;
+ } ASSEMBLY_INFO;
+
+ cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_REFRESH 0x00000001")
+ cpp_quote("#define IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH 0x00000002")
+
+ cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED 1")
+ cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE 2")
+ cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED 3")
+ cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING 4")
+ cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES 5")
+ cpp_quote("#define IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND 6")
+
+ cpp_quote("#define QUERYASMINFO_FLAG_VALIDATE 0x00000001")
+ cpp_quote("#define QUERYASMINFO_FLAG_GETSIZE 0x00000002")
+
+ cpp_quote("#define ASSEMBLYINFO_FLAG_INSTALLED 0x00000001")
+ cpp_quote("#define ASSEMBLYINFO_FLAG_PAYLOADRESIDENT 0x00000002")
+
+ HRESULT UninstallAssembly(
+ [in] DWORD dwFlags,
+ [in] LPCWSTR pszAssemblyName,
+ [in] LPCFUSION_INSTALL_REFERENCE pRefData,
+ [out, optional] ULONG *pulDisposition);
+
+ HRESULT QueryAssemblyInfo(
+ [in] DWORD dwFlags,
+ [in] LPCWSTR pszAssemblyName,
+ [in, out] ASSEMBLY_INFO *pAsmInfo);
+
+ HRESULT CreateAssemblyCacheItem(
+ [in] DWORD dwFlags,
+ [in] PVOID pvReserved,
+ [out] IAssemblyCacheItem **ppAsmItem,
+ [in, optional] LPCWSTR pszAssemblyName);
+
+ HRESULT CreateAssemblyScavenger([out] IUnknown **ppUnkReserved);
+
+ HRESULT InstallAssembly(
+ [in] DWORD dwFlags,
+ [in] LPCWSTR pszManifestFilePath,
+ [in] LPCFUSION_INSTALL_REFERENCE pRefData);
+}
+
+[
+ local,
+ object,
+ uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
+ pointer_default(unique)
+]
+interface IAssemblyCacheItem : IUnknown
+{
+ cpp_quote("#define STREAM_FORMAT_COMPLIB_MODULE 0")
+ cpp_quote("#define STREAM_FORMAT_COMPLIB_MANIFEST 1")
+ cpp_quote("#define STREAM_FORMAT_WIN32_MODULE 2")
+ cpp_quote("#define STREAM_FORMAT_WIN32_MANIFEST 4")
+
+ cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_REFRESH 0x00000001")
+ cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_FLAG_FORCE_REFRESH 0x00000002")
+
+ cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_INSTALLED 1")
+ cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_REFRESHED 2")
+ cpp_quote("#define IASSEMBLYCACHEITEM_COMMIT_DISPOSITION_ALREADY_INSTALLED 3")
+
+ HRESULT CreateStream(
+ [in] DWORD dwFlags,
+ [in] LPCWSTR pszStreamName,
+ [in] DWORD dwFormat,
+ [in] DWORD dwFormatFlags,
+ [out] IStream **ppIStream,
+ [in, optional] ULARGE_INTEGER *puliMaxSize);
+
+ HRESULT Commit(
+ [in] DWORD dwFlags,
+ [out, optional] ULONG *pulDisposition);
+
+ HRESULT AbortItem();
+}
+
+[
+ local,
+ object,
+ uuid(CD193BC0-B4BC-11d2-9833-00C04FC31D2E),
+ pointer_default(unique)
+]
+interface IAssemblyName: IUnknown
+{
+ typedef [unique] IAssemblyName *LPASSEMBLYNAME;
+
+ typedef enum
+ {
+ CANOF_PARSE_DISPLAY_NAME = 0x1,
+ CANOF_SET_DEFAULT_VALUES = 0x2,
+ CANOF_VERIFY_FRIEND_ASSEMBLYNAME = 0x4,
+ CANOF_PARSE_FRIEND_DISPLAY_NAME = CANOF_PARSE_DISPLAY_NAME |
+ CANOF_VERIFY_FRIEND_ASSEMBLYNAME
+ } CREATE_ASM_NAME_OBJ_FLAGS;
+
+ typedef enum
+ {
+ ASM_NAME_PUBLIC_KEY = 0,
+ ASM_NAME_PUBLIC_KEY_TOKEN,
+ ASM_NAME_HASH_VALUE,
+ ASM_NAME_NAME,
+ ASM_NAME_MAJOR_VERSION,
+ ASM_NAME_MINOR_VERSION,
+ ASM_NAME_BUILD_NUMBER,
+ ASM_NAME_REVISION_NUMBER,
+ ASM_NAME_CULTURE,
+ ASM_NAME_PROCESSOR_ID_ARRAY,
+ ASM_NAME_OSINFO_ARRAY,
+ ASM_NAME_HASH_ALGID,
+ ASM_NAME_ALIAS,
+ ASM_NAME_CODEBASE_URL,
+ ASM_NAME_CODEBASE_LASTMOD,
+ ASM_NAME_NULL_PUBLIC_KEY,
+ ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
+ ASM_NAME_CUSTOM,
+ ASM_NAME_NULL_CUSTOM,
+ ASM_NAME_MVID,
+ ASM_NAME_FILE_MAJOR_VERSION,
+ ASM_NAME_FILE_MINOR_VERSION,
+ ASM_NAME_FILE_BUILD_NUMBER,
+ ASM_NAME_FILE_REVISION_NUMBER,
+ ASM_NAME_RETARGET,
+ ASM_NAME_SIGNATURE_BLOB,
+ ASM_NAME_CONFIG_MASK,
+ ASM_NAME_ARCHITECTURE,
+ ASM_NAME_MAX_PARAMS
+ } ASM_NAME;
+
+ typedef enum
+ {
+ ASM_DISPLAYF_VERSION = 0x1,
+ ASM_DISPLAYF_CULTURE = 0x2,
+ ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
+ ASM_DISPLAYF_PUBLIC_KEY = 0x8,
+ ASM_DISPLAYF_CUSTOM = 0x10,
+ ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
+ ASM_DISPLAYF_LANGUAGEID = 0x40,
+ ASM_DISPLAYF_RETARGET = 0x80,
+ ASM_DISPLAYF_CONFIG_MASK = 0x100,
+ ASM_DISPLAYF_MVID = 0x200,
+
+ ASM_DISPLAYF_FULL = ASM_DISPLAYF_VERSION |
+ ASM_DISPLAYF_CULTURE |
+ ASM_DISPLAYF_PUBLIC_KEY_TOKEN |
+ ASM_DISPLAYF_RETARGET |
+ ASM_DISPLAYF_PROCESSORARCHITECTURE,
+ } ASM_DISPLAY_FLAGS;
+
+ typedef enum
+ {
+ ASM_CMPF_NAME = 0x1,
+ ASM_CMPF_MAJOR_VERSION = 0x2,
+ ASM_CMPF_MINOR_VERSION = 0x4,
+ ASM_CMPF_BUILD_NUMBER = 0x8,
+ ASM_CMPF_REVISION_NUMBER = 0x10,
+ ASM_CMPF_VERSION = ASM_CMPF_MAJOR_VERSION |
+ ASM_CMPF_MINOR_VERSION |
+ ASM_CMPF_BUILD_NUMBER |
+ ASM_CMPF_REVISION_NUMBER,
+ ASM_CMPF_PUBLIC_KEY_TOKEN = 0x20,
+ ASM_CMPF_CULTURE = 0x40,
+ ASM_CMPF_CUSTOM = 0x80,
+ ASM_CMPF_DEFAULT = 0x100,
+ ASM_CMPF_RETARGET = 0x200,
+ ASM_CMPF_ARCHITECTURE = 0x400,
+ ASM_CMPF_CONFIG_MASK = 0x800,
+ ASM_CMPF_MVID = 0x1000,
+ ASM_CMPF_SIGNATURE = 0x2000,
+ ASM_CMPF_IL_ALL = ASM_CMPF_NAME |
+ ASM_CMPF_VERSION |
+ ASM_CMPF_PUBLIC_KEY_TOKEN |
+ ASM_CMPF_CULTURE,
+ ASM_CMPF_IL_NO_VERSION = ASM_CMPF_NAME |
+ ASM_CMPF_PUBLIC_KEY_TOKEN |
+ ASM_CMPF_CULTURE
+ } ASM_CMP_FLAGS;
+
+ HRESULT SetProperty(
+ [in] DWORD PropertyId,
+ [in] LPVOID pvProperty,
+ [in] DWORD cbProperty);
+
+ HRESULT GetProperty(
+ [in] DWORD PropertyId,
+ [out] LPVOID pvProperty,
+ [in, out] LPDWORD pcbProperty);
+
+ HRESULT Finalize();
+
+ HRESULT GetDisplayName(
+ [out] LPOLESTR szDisplayName,
+ [in, out] LPDWORD pccDisplayName,
+ [in] DWORD dwDisplayFlags);
+
+ HRESULT Reserved(
+ [in] REFIID refIID,
+ [in] IUnknown *pUnkReserved1,
+ [in] IUnknown *pUnkReserved2,
+ [in] LPCOLESTR szReserved,
+ [in] LONGLONG llReserved,
+ [in] LPVOID pvReserved,
+ [in] DWORD cbReserved,
+ [out] LPVOID *ppReserved);
+
+ HRESULT GetName(
+ [in, out] LPDWORD lpcwBuffer,
+ [out] WCHAR *pwzName);
+
+ HRESULT GetVersion(
+ [out] LPDWORD pdwVersionHi,
+ [out] LPDWORD pdwVersionLow);
+
+ HRESULT IsEqual(
+ [in] IAssemblyName *pName,
+ [in] DWORD dwCmpFlags);
+
+ HRESULT Clone([out] IAssemblyName **pName);
+}
+
+[
+ local,
+ object,
+ uuid(21b8916c-f28e-11d2-a473-00c04f8ef448),
+ pointer_default(unique)
+]
+interface IAssemblyEnum : IUnknown
+{
+ HRESULT GetNextAssembly(
+ [in] LPVOID pvReserved,
+ [out] IAssemblyName **ppName,
+ [in] DWORD dwFlags);
+
+ HRESULT Reset(void);
+
+ HRESULT Clone([out] IAssemblyEnum **ppEnum);
+}
+
+[
+ local,
+ object,
+ uuid(582dac66-e678-449f-aba6-6faaec8a9394),
+ pointer_default(unique)
+]
+interface IInstallReferenceItem : IUnknown
+{
+
+}
+
+[
+ local,
+ object,
+ uuid(56b1a988-7c0c-4aa2-8639-c3eb5a90226f),
+ pointer_default(unique)
+]
+interface IInstallReferenceEnum : IUnknown
+{
+
+}
+
+cpp_quote("HRESULT WINAPI ClearDownloadCache(void);")
+cpp_quote("HRESULT WINAPI CompareAssemblyIdentity(LPCWSTR,BOOL,LPCWSTR,BOOL,BOOL*,AssemblyComparisonResult*);")
+cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateAssemblyEnum(IAssemblyEnum**,IUnknown*,IAssemblyName*,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME*,LPCWSTR,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI CreateInstallReferenceEnum(IInstallReferenceEnum**,IAssemblyName*,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI GetAssemblyIdentityFromFile(LPCWSTR,REFIID,IUnknown**);")
+cpp_quote("HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS,LPWSTR,PDWORD);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl
new file mode 100644
index 00000000..bc4d312f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gameux.idl
@@ -0,0 +1,210 @@
+ /*
+ * Defines the COM interfaces of Game Explorer
+ *
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Mariusz Pluciński
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "shobjidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ uuid(4F48A59C-942D-4F3C-83C9-4EFFE84E4959),
+ version(1.0),
+ helpstring("gameux public 1.0 Type Library")
+]
+library gameuxLib
+{
+ importlib("stdole2.tlb");
+
+ cpp_quote("#define ID_GDF_XML __GDF_XML")
+ cpp_quote("#define ID_GDF_THUMBNAIL __GDF_THUMBNAIL")
+ cpp_quote("#define ID_ICON_ICO __ICON_ICO")
+
+ cpp_quote("#if defined(__GNUC__)")
+ cpp_quote("#define ID_GDF_XML_STR (const WCHAR[]){'_','_','G','D','F','_','X','M','L',0}")
+ cpp_quote("#define ID_GDF_THUMBNAIL_STR (const WCHAR[]){'_','_','G','D','F','_','T','H','U','M','B','N','A','I','L',0}")
+ cpp_quote("#elif defined(_MSC_VER)")
+ cpp_quote("#define ID_GDF_XML_STR L\"__GDF_XML\"")
+ cpp_quote("#define ID_GDF_THUMBNAIL_STR L\"__GDF_THUMBNAIL\"")
+ cpp_quote("#endif")
+
+ typedef enum
+ {
+ GIS_NOT_INSTALLED = 1,
+ GIS_CURRENT_USER = 2,
+ GIS_ALL_USERS = 3
+ } GAME_INSTALL_SCOPE;
+
+ typedef enum
+ {
+ GAMESTATS_OPEN_OPENORCREATE = 0,
+ GAMESTATS_OPEN_OPENONLY = 1
+ } GAMESTATS_OPEN_TYPE;
+
+ typedef enum
+ {
+ GAMESTATS_OPEN_CREATED = 0,
+ GAMESTATS_OPEN_OPENED = 1
+ } GAMESTATS_OPEN_RESULT;
+
+ [
+ object,
+ uuid(E7B2FB72-D728-49B3-A5F2-18EBF5F1349E)
+ ]
+ interface IGameExplorer : IUnknown
+ {
+ HRESULT AddGame([in] BSTR sGDFBinaryPath,
+ [in] BSTR sInstallDirectory,
+ [in] GAME_INSTALL_SCOPE installScope,
+ [in, out] GUID* pguidInstanceID);
+
+ HRESULT RemoveGame([in] GUID instanceID);
+
+ HRESULT UpdateGame([in] GUID instanceID);
+
+ HRESULT VerifyAccess([in] BSTR sGDFBinaryPath,
+ [out] BOOL* pHasAccess);
+ };
+
+ [
+ object,
+ uuid(3887C9CA-04A0-42ae-BC4C-5FA6C7721145)
+ ]
+ interface IGameStatistics : IUnknown
+ {
+ HRESULT GetMaxCategoryLength(
+ [retval, out] UINT* cch);
+
+ HRESULT GetMaxNameLength(
+ [retval, out] UINT* cch);
+
+ HRESULT GetMaxValueLength(
+ [retval, out] UINT* cch);
+
+ HRESULT GetMaxCategories(
+ [retval, out] WORD* pMax);
+
+ HRESULT GetMaxStatsPerCategory(
+ [retval, out] WORD* pMax);
+
+ HRESULT SetCategoryTitle(
+ [in] WORD categoryIndex,
+ [string, in] LPCWSTR title);
+
+ HRESULT GetCategoryTitle(
+ [in] WORD categoryIndex,
+ [retval, string, out] LPWSTR* pTitle);
+
+ HRESULT GetStatistic(
+ [in] WORD categoryIndex,
+ [in] WORD statIndex,
+ [string, unique, out, in] LPWSTR* pName,
+ [string, unique, out, in] LPWSTR* pValue);
+
+ HRESULT SetStatistic(
+ [in] WORD categoryIndex,
+ [in] WORD statIndex,
+ [string, in] LPCWSTR name,
+ [string, in] LPCWSTR value);
+
+ HRESULT Save(
+ [in] BOOL trackChanges);
+
+ HRESULT SetLastPlayedCategory(
+ [in] UINT categoryIndex);
+
+ HRESULT GetLastPlayedCategory(
+ [retval, out] UINT* pCategoryIndex);
+ };
+
+ [
+ object,
+ uuid(AFF3EA11-E70E-407d-95DD-35E612C41CE2)
+ ]
+ interface IGameStatisticsMgr : IUnknown
+ {
+ HRESULT GetGameStatistics(
+ [string, in] LPCWSTR GDFBinaryPath,
+ [in] GAMESTATS_OPEN_TYPE openType,
+ [out] GAMESTATS_OPEN_RESULT* pOpenResult,
+ [retval, out] IGameStatistics** ppiStats);
+
+ HRESULT RemoveGameStatistics(
+ [string, in] LPCWSTR GDFBinaryPath);
+ };
+
+ [
+ object,
+ uuid(86874AA7-A1ED-450d-A7EB-B89E20B2FFF3)
+ ]
+ interface IGameExplorer2 : IUnknown
+ {
+ HRESULT InstallGame(
+ [string, in] LPCWSTR binaryGDFPath,
+ [unique, in] LPCWSTR installDirectory,
+ [in] GAME_INSTALL_SCOPE installScope);
+
+ HRESULT UninstallGame(
+ [string, in] LPCWSTR binaryGDFPath);
+
+ HRESULT CheckAccess(
+ [string, in] LPCWSTR binaryGDFPath,
+ [retval, out] BOOL* pHasAccess);
+
+ }
+
+ [
+ helpstring("GameExplorer Class"),
+ threading(both),
+ progid("gameux.GameExplorer.1"),
+ vi_progid("gameux.GameExplorer"),
+ uuid(9A5EA990-3034-4D6F-9128-01F3C61022BC)
+ ]
+ coclass GameExplorer
+ {
+ [default] interface IGameExplorer;
+ };
+
+ [
+ helpstring("GameStatistics Class"),
+ threading(apartment),
+ progid("gameux.GameStatistics.1"),
+ vi_progid("gameux.GameStatistics"),
+ uuid(DBC85A2C-C0DC-4961-B6E2-D28B62C11AD4)
+ ]
+ coclass GameStatistics
+ {
+ [default] interface IGameStatistics;
+ };
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h
new file mode 100644
index 00000000..dfc54a95
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplus.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUS_H
+#define _GDIPLUS_H
+
+#ifdef __cplusplus
+
+namespace Gdiplus
+{
+ namespace DllExports
+ {
+#include "gdiplusmem.h"
+ };
+
+#include "gdiplusenums.h"
+#include "gdiplustypes.h"
+#include "gdiplusinit.h"
+#include "gdipluspixelformats.h"
+#include "gdiplusmetaheader.h"
+#include "gdiplusimaging.h"
+#include "gdipluscolor.h"
+#include "gdipluscolormatrix.h"
+#include "gdiplusgpstubs.h"
+
+ namespace DllExports
+ {
+#include "gdiplusflat.h"
+ };
+};
+
+#else /* end c++ includes */
+
+#include "gdiplusmem.h"
+
+#include "gdiplusenums.h"
+#include "gdiplustypes.h"
+#include "gdiplusinit.h"
+#include "gdipluspixelformats.h"
+#include "gdiplusmetaheader.h"
+#include "gdiplusimaging.h"
+#include "gdipluscolor.h"
+#include "gdipluscolormatrix.h"
+#include "gdiplusgpstubs.h"
+
+#include "gdiplusflat.h"
+
+#endif /* end c includes */
+
+#endif /* _GDIPLUS_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h
new file mode 100644
index 00000000..91160986
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolor.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2808 Google (Lei Zhang)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSCOLOR_H
+#define _GDIPLUSCOLOR_H
+
+enum ColorChannelFlags
+{
+ ColorChannelFlagsC,
+ ColorChannelFlagsM,
+ ColorChannelFlagsY,
+ ColorChannelFlagsK,
+ ColorChannelFlagsLast
+};
+
+#ifdef __cplusplus
+
+/* FIXME: missing the methods. */
+class Color
+{
+protected:
+ ARGB Argb;
+};
+
+#else /* end of c++ typedefs */
+
+typedef struct Color
+{
+ ARGB Argb;
+} Color;
+
+typedef enum ColorChannelFlags ColorChannelFlags;
+
+#endif /* end of c typedefs */
+
+#endif /* _GDIPLUSCOLOR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h
new file mode 100644
index 00000000..5c994879
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluscolormatrix.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSCOLORMATRIX_H
+#define _GDIPLUSCOLORMATRIX_H
+
+struct ColorMatrix
+{
+ REAL m[5][5];
+};
+
+enum ColorMatrixFlags
+{
+ ColorMatrixFlagsDefault = 0,
+ ColorMatrixFlagsSkipGrays = 1,
+ ColorMatrixFlagsAltGray = 2
+};
+
+enum ColorAdjustType
+{
+ ColorAdjustTypeDefault,
+ ColorAdjustTypeBitmap,
+ ColorAdjustTypeBrush,
+ ColorAdjustTypePen,
+ ColorAdjustTypeText,
+ ColorAdjustTypeCount,
+ ColorAdjustTypeAny
+};
+
+struct ColorMap
+{
+ Color oldColor;
+ Color newColor;
+};
+
+#ifndef __cplusplus
+
+typedef enum ColorAdjustType ColorAdjustType;
+typedef enum ColorMatrixFlags ColorMatrixFlags;
+typedef struct ColorMatrix ColorMatrix;
+typedef struct ColorMap ColorMap;
+
+#endif /* end of c typedefs */
+
+#endif /* _GDIPLUSCOLORMATRIX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h
new file mode 100644
index 00000000..155284c6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusenums.h
@@ -0,0 +1,767 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSENUMS_H
+#define _GDIPLUSENUMS_H
+
+typedef UINT GraphicsState;
+typedef UINT GraphicsContainer;
+
+enum Unit
+{
+ UnitWorld = 0,
+ UnitDisplay = 1,
+ UnitPixel = 2,
+ UnitPoint = 3,
+ UnitInch = 4,
+ UnitDocument = 5,
+ UnitMillimeter = 6
+};
+
+enum BrushType
+{
+ BrushTypeSolidColor = 0,
+ BrushTypeHatchFill = 1,
+ BrushTypeTextureFill = 2,
+ BrushTypePathGradient = 3,
+ BrushTypeLinearGradient = 4
+};
+
+enum DriverStringOptions
+{
+ DriverStringOptionsCmapLookup = 1,
+ DriverStringOptionsVertical = 2,
+ DriverStringOptionsRealizedAdvance = 4,
+ DriverStringOptionsLimitSubpixel = 4
+};
+
+enum FillMode
+{
+ FillModeAlternate = 0,
+ FillModeWinding = 1
+};
+
+enum LineCap
+{
+ LineCapFlat = 0x00,
+ LineCapSquare = 0x01,
+ LineCapRound = 0x02,
+ LineCapTriangle = 0x03,
+
+ LineCapNoAnchor = 0x10,
+ LineCapSquareAnchor = 0x11,
+ LineCapRoundAnchor = 0x12,
+ LineCapDiamondAnchor = 0x13,
+ LineCapArrowAnchor = 0x14,
+
+ LineCapCustom = 0xff,
+ LineCapAnchorMask = 0xf0
+};
+
+enum PathPointType{
+ PathPointTypeStart = 0, /* start of a figure */
+ PathPointTypeLine = 1,
+ PathPointTypeBezier = 3,
+ PathPointTypePathTypeMask = 7,
+ PathPointTypePathDashMode = 16, /* not used */
+ PathPointTypePathMarker = 32,
+ PathPointTypeCloseSubpath = 128, /* end of a closed figure */
+ PathPointTypeBezier3 = 3
+};
+
+enum PenType
+{
+ PenTypeSolidColor = BrushTypeSolidColor,
+ PenTypeHatchFill = BrushTypeHatchFill,
+ PenTypeTextureFill = BrushTypeTextureFill,
+ PenTypePathGradient = BrushTypePathGradient,
+ PenTypeLinearGradient = BrushTypeLinearGradient,
+ PenTypeUnknown = -1
+};
+
+enum LineJoin
+{
+ LineJoinMiter = 0,
+ LineJoinBevel = 1,
+ LineJoinRound = 2,
+ LineJoinMiterClipped = 3
+};
+
+enum QualityMode
+{
+ QualityModeInvalid = -1,
+ QualityModeDefault = 0,
+ QualityModeLow = 1,
+ QualityModeHigh = 2
+};
+
+enum SmoothingMode
+{
+ SmoothingModeInvalid = QualityModeInvalid,
+ SmoothingModeDefault = QualityModeDefault,
+ SmoothingModeHighSpeed = QualityModeLow,
+ SmoothingModeHighQuality = QualityModeHigh,
+ SmoothingModeNone,
+ SmoothingModeAntiAlias
+};
+
+enum CompositingQuality
+{
+ CompositingQualityInvalid = QualityModeInvalid,
+ CompositingQualityDefault = QualityModeDefault,
+ CompositingQualityHighSpeed = QualityModeLow,
+ CompositingQualityHighQuality = QualityModeHigh,
+ CompositingQualityGammaCorrected,
+ CompositingQualityAssumeLinear
+};
+
+enum InterpolationMode
+{
+ InterpolationModeInvalid = QualityModeInvalid,
+ InterpolationModeDefault = QualityModeDefault,
+ InterpolationModeLowQuality = QualityModeLow,
+ InterpolationModeHighQuality = QualityModeHigh,
+ InterpolationModeBilinear,
+ InterpolationModeBicubic,
+ InterpolationModeNearestNeighbor,
+ InterpolationModeHighQualityBilinear,
+ InterpolationModeHighQualityBicubic
+};
+
+enum PenAlignment
+{
+ PenAlignmentCenter = 0,
+ PenAlignmentInset = 1
+};
+
+enum PixelOffsetMode
+{
+ PixelOffsetModeInvalid = QualityModeInvalid,
+ PixelOffsetModeDefault = QualityModeDefault,
+ PixelOffsetModeHighSpeed = QualityModeLow,
+ PixelOffsetModeHighQuality = QualityModeHigh,
+ PixelOffsetModeNone,
+ PixelOffsetModeHalf
+};
+
+enum DashCap
+{
+ DashCapFlat = 0,
+ DashCapRound = 2,
+ DashCapTriangle = 3
+};
+
+enum DashStyle
+{
+ DashStyleSolid,
+ DashStyleDash,
+ DashStyleDot,
+ DashStyleDashDot,
+ DashStyleDashDotDot,
+ DashStyleCustom
+};
+
+enum MatrixOrder
+{
+ MatrixOrderPrepend = 0,
+ MatrixOrderAppend = 1
+};
+
+enum ImageType
+{
+ ImageTypeUnknown,
+ ImageTypeBitmap,
+ ImageTypeMetafile
+};
+
+enum WarpMode {
+ WarpModePerspective,
+ WarpModeBilinear
+};
+
+enum WrapMode
+{
+ WrapModeTile,
+ WrapModeTileFlipX,
+ WrapModeTileFlipY,
+ WrapModeTileFlipXY,
+ WrapModeClamp
+};
+
+enum MetafileType
+{
+ MetafileTypeInvalid,
+ MetafileTypeWmf,
+ MetafileTypeWmfPlaceable,
+ MetafileTypeEmf,
+ MetafileTypeEmfPlusOnly,
+ MetafileTypeEmfPlusDual
+};
+
+enum LinearGradientMode
+{
+ LinearGradientModeHorizontal,
+ LinearGradientModeVertical,
+ LinearGradientModeForwardDiagonal,
+ LinearGradientModeBackwardDiagonal
+};
+
+enum EmfType
+{
+ EmfTypeEmfOnly = MetafileTypeEmf,
+ EmfTypeEmfPlusOnly = MetafileTypeEmfPlusOnly,
+ EmfTypeEmfPlusDual = MetafileTypeEmfPlusDual
+};
+
+enum CompositingMode
+{
+ CompositingModeSourceOver,
+ CompositingModeSourceCopy
+};
+
+enum TextRenderingHint
+{
+ TextRenderingHintSystemDefault = 0,
+ TextRenderingHintSingleBitPerPixelGridFit,
+ TextRenderingHintSingleBitPerPixel,
+ TextRenderingHintAntiAliasGridFit,
+ TextRenderingHintAntiAlias,
+ TextRenderingHintClearTypeGridFit
+};
+
+enum StringAlignment
+{
+ StringAlignmentNear = 0,
+ StringAlignmentCenter = 1,
+ StringAlignmentFar = 2
+};
+
+enum StringDigitSubstitute
+{
+ StringDigitSubstituteUser = 0,
+ StringDigitSubstituteNone = 1,
+ StringDigitSubstituteNational = 2,
+ StringDigitSubstituteTraditional = 3
+};
+
+enum StringFormatFlags
+{
+ StringFormatFlagsDirectionRightToLeft = 0x00000001,
+ StringFormatFlagsDirectionVertical = 0x00000002,
+ StringFormatFlagsNoFitBlackBox = 0x00000004,
+ StringFormatFlagsDisplayFormatControl = 0x00000020,
+ StringFormatFlagsNoFontFallback = 0x00000400,
+ StringFormatFlagsMeasureTrailingSpaces = 0x00000800,
+ StringFormatFlagsNoWrap = 0x00001000,
+ StringFormatFlagsLineLimit = 0x00002000,
+ StringFormatFlagsNoClip = 0x00004000
+};
+
+enum StringTrimming
+{
+ StringTrimmingNone = 0,
+ StringTrimmingCharacter = 1,
+ StringTrimmingWord = 2,
+ StringTrimmingEllipsisCharacter = 3,
+ StringTrimmingEllipsisWord = 4,
+ StringTrimmingEllipsisPath = 5
+};
+
+enum FontStyle
+{
+ FontStyleRegular = 0,
+ FontStyleBold = 1,
+ FontStyleItalic = 2,
+ FontStyleBoldItalic = 3,
+ FontStyleUnderline = 4,
+ FontStyleStrikeout = 8
+};
+
+enum HotkeyPrefix
+{
+ HotkeyPrefixNone = 0,
+ HotkeyPrefixShow = 1,
+ HotkeyPrefixHide = 2
+};
+
+enum ImageCodecFlags
+{
+ ImageCodecFlagsEncoder = 1,
+ ImageCodecFlagsDecoder = 2,
+ ImageCodecFlagsSupportBitmap = 4,
+ ImageCodecFlagsSupportVector = 8,
+ ImageCodecFlagsSeekableEncode = 16,
+ ImageCodecFlagsBlockingDecode = 32,
+ ImageCodecFlagsBuiltin = 65536,
+ ImageCodecFlagsSystem = 131072,
+ ImageCodecFlagsUser = 262144
+};
+
+enum ImageFlags
+{
+ ImageFlagsNone = 0,
+ ImageFlagsScalable = 0x0001,
+ ImageFlagsHasAlpha = 0x0002,
+ ImageFlagsHasTranslucent = 0x0004,
+ ImageFlagsPartiallyScalable = 0x0008,
+ ImageFlagsColorSpaceRGB = 0x0010,
+ ImageFlagsColorSpaceCMYK = 0x0020,
+ ImageFlagsColorSpaceGRAY = 0x0040,
+ ImageFlagsColorSpaceYCBCR = 0x0080,
+ ImageFlagsColorSpaceYCCK = 0x0100,
+ ImageFlagsHasRealDPI = 0x1000,
+ ImageFlagsHasRealPixelSize = 0x2000,
+ ImageFlagsReadOnly = 0x00010000,
+ ImageFlagsCaching = 0x00020000
+};
+
+enum CombineMode
+{
+ CombineModeReplace,
+ CombineModeIntersect,
+ CombineModeUnion,
+ CombineModeXor,
+ CombineModeExclude,
+ CombineModeComplement
+};
+
+enum FlushIntention
+{
+ FlushIntentionFlush = 0,
+ FlushIntentionSync = 1
+};
+
+enum CoordinateSpace
+{
+ CoordinateSpaceWorld,
+ CoordinateSpacePage,
+ CoordinateSpaceDevice
+};
+
+enum GpTestControlEnum
+{
+ TestControlForceBilinear = 0,
+ TestControlNoICM = 1,
+ TestControlGetBuildNumber = 2
+};
+
+enum MetafileFrameUnit
+{
+ MetafileFrameUnitPixel = UnitPixel,
+ MetafileFrameUnitPoint = UnitPoint,
+ MetafileFrameUnitInch = UnitInch,
+ MetafileFrameUnitDocument = UnitDocument,
+ MetafileFrameUnitMillimeter = UnitMillimeter,
+ MetafileFrameUnitGdi
+};
+
+enum HatchStyle
+{
+ HatchStyleHorizontal = 0,
+ HatchStyleVertical = 1,
+ HatchStyleForwardDiagonal = 2,
+ HatchStyleBackwardDiagonal = 3,
+ HatchStyleCross = 4,
+ HatchStyleDiagonalCross = 5,
+ HatchStyle05Percent = 6,
+ HatchStyle10Percent = 7,
+ HatchStyle20Percent = 8,
+ HatchStyle25Percent = 9,
+ HatchStyle30Percent = 10,
+ HatchStyle40Percent = 11,
+ HatchStyle50Percent = 12,
+ HatchStyle60Percent = 13,
+ HatchStyle70Percent = 14,
+ HatchStyle75Percent = 15,
+ HatchStyle80Percent = 16,
+ HatchStyle90Percent = 17,
+ HatchStyleLightDownwardDiagonal = 18,
+ HatchStyleLightUpwardDiagonal = 19,
+ HatchStyleDarkDownwardDiagonal = 20,
+ HatchStyleDarkUpwardDiagonal = 21,
+ HatchStyleWideDownwardDiagonal = 22,
+ HatchStyleWideUpwardDiagonal = 23,
+ HatchStyleLightVertical = 24,
+ HatchStyleLightHorizontal = 25,
+ HatchStyleNarrowVertical = 26,
+ HatchStyleNarrowHorizontal = 27,
+ HatchStyleDarkVertical = 28,
+ HatchStyleDarkHorizontal = 29,
+ HatchStyleDashedDownwardDiagonal = 30,
+ HatchStyleDashedUpwardDiagonal = 31,
+ HatchStyleDashedHorizontal = 32,
+ HatchStyleDashedVertical = 33,
+ HatchStyleSmallConfetti = 34,
+ HatchStyleLargeConfetti = 35,
+ HatchStyleZigZag = 36,
+ HatchStyleWave = 37,
+ HatchStyleDiagonalBrick = 38,
+ HatchStyleHorizontalBrick = 39,
+ HatchStyleWeave = 40,
+ HatchStylePlaid = 41,
+ HatchStyleDivot = 42,
+ HatchStyleDottedGrid = 43,
+ HatchStyleDottedDiamond = 44,
+ HatchStyleShingle = 45,
+ HatchStyleTrellis = 46,
+ HatchStyleSphere = 47,
+ HatchStyleSmallGrid = 48,
+ HatchStyleSmallCheckerBoard = 49,
+ HatchStyleLargeCheckerBoard = 50,
+ HatchStyleOutlinedDiamond = 51,
+ HatchStyleSolidDiamond = 52,
+ HatchStyleTotal = 53,
+ HatchStyleLargeGrid = HatchStyleCross,
+ HatchStyleMin = HatchStyleHorizontal,
+ HatchStyleMax = HatchStyleTotal - 1
+};
+
+#define GDIP_EMFPLUS_RECORD_BASE 0x00004000
+#define GDIP_WMF_RECORD_BASE 0x00010000
+#define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((x)|GDIP_WMF_RECORD_BASE)
+
+enum EmfPlusRecordType {
+ WmfRecordTypeSetBkColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
+ WmfRecordTypeSetBkMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
+ WmfRecordTypeSetMapMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
+ WmfRecordTypeSetROP2 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
+ WmfRecordTypeSetRelAbs = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
+ WmfRecordTypeSetPolyFillMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
+ WmfRecordTypeSetStretchBltMode = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
+ WmfRecordTypeSetTextCharExtra = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
+ WmfRecordTypeSetTextColor = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
+ WmfRecordTypeSetTextJustification = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
+ WmfRecordTypeSetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
+ WmfRecordTypeSetWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
+ WmfRecordTypeSetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
+ WmfRecordTypeSetViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
+ WmfRecordTypeOffsetWindowOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
+ WmfRecordTypeScaleWindowExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
+ WmfRecordTypeOffsetViewportOrg = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
+ WmfRecordTypeScaleViewportExt = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
+ WmfRecordTypeLineTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
+ WmfRecordTypeMoveTo = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
+ WmfRecordTypeExcludeClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
+ WmfRecordTypeIntersectClipRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
+ WmfRecordTypeArc = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
+ WmfRecordTypeEllipse = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
+ WmfRecordTypeFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
+ WmfRecordTypePie = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
+ WmfRecordTypeRectangle = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
+ WmfRecordTypeRoundRect = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
+ WmfRecordTypePatBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
+ WmfRecordTypeSaveDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
+ WmfRecordTypeSetPixel = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
+ WmfRecordTypeOffsetClipRgn = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
+ WmfRecordTypeTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
+ WmfRecordTypeBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
+ WmfRecordTypeStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
+ WmfRecordTypePolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
+ WmfRecordTypePolyline = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
+ WmfRecordTypeEscape = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
+ WmfRecordTypeRestoreDC = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
+ WmfRecordTypeFillRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
+ WmfRecordTypeFrameRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
+ WmfRecordTypeInvertRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
+ WmfRecordTypePaintRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
+ WmfRecordTypeSelectClipRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
+ WmfRecordTypeSelectObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
+ WmfRecordTypeSetTextAlign = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
+ WmfRecordTypeDrawText = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),
+ WmfRecordTypeChord = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
+ WmfRecordTypeSetMapperFlags = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
+ WmfRecordTypeExtTextOut = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
+ WmfRecordTypeSetDIBToDev = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
+ WmfRecordTypeSelectPalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
+ WmfRecordTypeRealizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
+ WmfRecordTypeAnimatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
+ WmfRecordTypeSetPalEntries = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
+ WmfRecordTypePolyPolygon = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
+ WmfRecordTypeResizePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
+ WmfRecordTypeDIBBitBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
+ WmfRecordTypeDIBStretchBlt = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
+ WmfRecordTypeDIBCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
+ WmfRecordTypeStretchDIB = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
+ WmfRecordTypeExtFloodFill = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
+ WmfRecordTypeSetLayout = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),
+ WmfRecordTypeResetDC = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),
+ WmfRecordTypeStartDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),
+ WmfRecordTypeStartPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),
+ WmfRecordTypeEndPage = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),
+ WmfRecordTypeAbortDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),
+ WmfRecordTypeEndDoc = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),
+ WmfRecordTypeDeleteObject = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
+ WmfRecordTypeCreatePalette = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
+ WmfRecordTypeCreateBrush = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),
+ WmfRecordTypeCreatePatternBrush = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
+ WmfRecordTypeCreatePenIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
+ WmfRecordTypeCreateFontIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
+ WmfRecordTypeCreateBrushIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
+ WmfRecordTypeCreateBitmapIndirect = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),
+ WmfRecordTypeCreateBitmap = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),
+ WmfRecordTypeCreateRegion = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
+ EmfRecordTypeHeader = EMR_HEADER,
+ EmfRecordTypePolyBezier = EMR_POLYBEZIER,
+ EmfRecordTypePolygon = EMR_POLYGON,
+ EmfRecordTypePolyline = EMR_POLYLINE,
+ EmfRecordTypePolyBezierTo = EMR_POLYBEZIERTO,
+ EmfRecordTypePolyLineTo = EMR_POLYLINETO,
+ EmfRecordTypePolyPolyline = EMR_POLYPOLYLINE,
+ EmfRecordTypePolyPolygon = EMR_POLYPOLYGON,
+ EmfRecordTypeSetWindowExtEx = EMR_SETWINDOWEXTEX,
+ EmfRecordTypeSetWindowOrgEx = EMR_SETWINDOWORGEX,
+ EmfRecordTypeSetViewportExtEx = EMR_SETVIEWPORTEXTEX,
+ EmfRecordTypeSetViewportOrgEx = EMR_SETVIEWPORTORGEX,
+ EmfRecordTypeSetBrushOrgEx = EMR_SETBRUSHORGEX,
+ EmfRecordTypeEOF = EMR_EOF,
+ EmfRecordTypeSetPixelV = EMR_SETPIXELV,
+ EmfRecordTypeSetMapperFlags = EMR_SETMAPPERFLAGS,
+ EmfRecordTypeSetMapMode = EMR_SETMAPMODE,
+ EmfRecordTypeSetBkMode = EMR_SETBKMODE,
+ EmfRecordTypeSetPolyFillMode = EMR_SETPOLYFILLMODE,
+ EmfRecordTypeSetROP2 = EMR_SETROP2,
+ EmfRecordTypeSetStretchBltMode = EMR_SETSTRETCHBLTMODE,
+ EmfRecordTypeSetTextAlign = EMR_SETTEXTALIGN,
+ EmfRecordTypeSetColorAdjustment = EMR_SETCOLORADJUSTMENT,
+ EmfRecordTypeSetTextColor = EMR_SETTEXTCOLOR,
+ EmfRecordTypeSetBkColor = EMR_SETBKCOLOR,
+ EmfRecordTypeOffsetClipRgn = EMR_OFFSETCLIPRGN,
+ EmfRecordTypeMoveToEx = EMR_MOVETOEX,
+ EmfRecordTypeSetMetaRgn = EMR_SETMETARGN,
+ EmfRecordTypeExcludeClipRect = EMR_EXCLUDECLIPRECT,
+ EmfRecordTypeIntersectClipRect = EMR_INTERSECTCLIPRECT,
+ EmfRecordTypeScaleViewportExtEx = EMR_SCALEVIEWPORTEXTEX,
+ EmfRecordTypeScaleWindowExtEx = EMR_SCALEWINDOWEXTEX,
+ EmfRecordTypeSaveDC = EMR_SAVEDC,
+ EmfRecordTypeRestoreDC = EMR_RESTOREDC,
+ EmfRecordTypeSetWorldTransform = EMR_SETWORLDTRANSFORM,
+ EmfRecordTypeModifyWorldTransform = EMR_MODIFYWORLDTRANSFORM,
+ EmfRecordTypeSelectObject = EMR_SELECTOBJECT,
+ EmfRecordTypeCreatePen = EMR_CREATEPEN,
+ EmfRecordTypeCreateBrushIndirect = EMR_CREATEBRUSHINDIRECT,
+ EmfRecordTypeDeleteObject = EMR_DELETEOBJECT,
+ EmfRecordTypeAngleArc = EMR_ANGLEARC,
+ EmfRecordTypeEllipse = EMR_ELLIPSE,
+ EmfRecordTypeRectangle = EMR_RECTANGLE,
+ EmfRecordTypeRoundRect = EMR_ROUNDRECT,
+ EmfRecordTypeArc = EMR_ARC,
+ EmfRecordTypeChord = EMR_CHORD,
+ EmfRecordTypePie = EMR_PIE,
+ EmfRecordTypeSelectPalette = EMR_SELECTPALETTE,
+ EmfRecordTypeCreatePalette = EMR_CREATEPALETTE,
+ EmfRecordTypeSetPaletteEntries = EMR_SETPALETTEENTRIES,
+ EmfRecordTypeResizePalette = EMR_RESIZEPALETTE,
+ EmfRecordTypeRealizePalette = EMR_REALIZEPALETTE,
+ EmfRecordTypeExtFloodFill = EMR_EXTFLOODFILL,
+ EmfRecordTypeLineTo = EMR_LINETO,
+ EmfRecordTypeArcTo = EMR_ARCTO,
+ EmfRecordTypePolyDraw = EMR_POLYDRAW,
+ EmfRecordTypeSetArcDirection = EMR_SETARCDIRECTION,
+ EmfRecordTypeSetMiterLimit = EMR_SETMITERLIMIT,
+ EmfRecordTypeBeginPath = EMR_BEGINPATH,
+ EmfRecordTypeEndPath = EMR_ENDPATH,
+ EmfRecordTypeCloseFigure = EMR_CLOSEFIGURE,
+ EmfRecordTypeFillPath = EMR_FILLPATH,
+ EmfRecordTypeStrokeAndFillPath = EMR_STROKEANDFILLPATH,
+ EmfRecordTypeStrokePath = EMR_STROKEPATH,
+ EmfRecordTypeFlattenPath = EMR_FLATTENPATH,
+ EmfRecordTypeWidenPath = EMR_WIDENPATH,
+ EmfRecordTypeSelectClipPath = EMR_SELECTCLIPPATH,
+ EmfRecordTypeAbortPath = EMR_ABORTPATH,
+ EmfRecordTypeReserved_069 = 69,
+ EmfRecordTypeGdiComment = EMR_GDICOMMENT,
+ EmfRecordTypeFillRgn = EMR_FILLRGN,
+ EmfRecordTypeFrameRgn = EMR_FRAMERGN,
+ EmfRecordTypeInvertRgn = EMR_INVERTRGN,
+ EmfRecordTypePaintRgn = EMR_PAINTRGN,
+ EmfRecordTypeExtSelectClipRgn = EMR_EXTSELECTCLIPRGN,
+ EmfRecordTypeBitBlt = EMR_BITBLT,
+ EmfRecordTypeStretchBlt = EMR_STRETCHBLT,
+ EmfRecordTypeMaskBlt = EMR_MASKBLT,
+ EmfRecordTypePlgBlt = EMR_PLGBLT,
+ EmfRecordTypeSetDIBitsToDevice = 80,
+ EmfRecordTypeStretchDIBits = EMR_STRETCHDIBITS,
+ EmfRecordTypeExtCreateFontIndirect = EMR_EXTCREATEFONTINDIRECTW,
+ EmfRecordTypeExtTextOutA = EMR_EXTTEXTOUTA,
+ EmfRecordTypeExtTextOutW = EMR_EXTTEXTOUTW,
+ EmfRecordTypePolyBezier16 = EMR_POLYBEZIER16,
+ EmfRecordTypePolygon16 = EMR_POLYGON16,
+ EmfRecordTypePolyline16 = EMR_POLYLINE16,
+ EmfRecordTypePolyBezierTo16 = EMR_POLYBEZIERTO16,
+ EmfRecordTypePolylineTo16 = EMR_POLYLINETO16,
+ EmfRecordTypePolyPolyline16 = EMR_POLYPOLYLINE16,
+ EmfRecordTypePolyPolygon16 = EMR_POLYPOLYGON16,
+ EmfRecordTypePolyDraw16 = EMR_POLYDRAW16,
+ EmfRecordTypeCreateMonoBrush = EMR_CREATEMONOBRUSH,
+ EmfRecordTypeCreateDIBPatternBrushPt = EMR_CREATEDIBPATTERNBRUSHPT,
+ EmfRecordTypeExtCreatePen = EMR_EXTCREATEPEN,
+ EmfRecordTypePolyTextOutA = EMR_POLYTEXTOUTA,
+ EmfRecordTypePolyTextOutW = EMR_POLYTEXTOUTW,
+ EmfRecordTypeSetICMMode = 98,
+ EmfRecordTypeCreateColorSpace = 99,
+ EmfRecordTypeSetColorSpace = 100,
+ EmfRecordTypeDeleteColorSpace = 101,
+ EmfRecordTypeGLSRecord = 102,
+ EmfRecordTypeGLSBoundedRecord = 103,
+ EmfRecordTypePixelFormat = 104,
+ EmfRecordTypeDrawEscape = 105,
+ EmfRecordTypeExtEscape = 106,
+ EmfRecordTypeStartDoc = 107,
+ EmfRecordTypeSmallTextOut = 108,
+ EmfRecordTypeForceUFIMapping = 109,
+ EmfRecordTypeNamedEscape = 110,
+ EmfRecordTypeColorCorrectPalette = 111,
+ EmfRecordTypeSetICMProfileA = 112,
+ EmfRecordTypeSetICMProfileW = 113,
+ EmfRecordTypeAlphaBlend = 114,
+ EmfRecordTypeSetLayout = 115,
+ EmfRecordTypeTransparentBlt = 116,
+ EmfRecordTypeReserved_117 = 117,
+ EmfRecordTypeGradientFill = 118,
+ EmfRecordTypeSetLinkedUFIs = 119,
+ EmfRecordTypeSetTextJustification = 120,
+ EmfRecordTypeColorMatchToTargetW = 121,
+ EmfRecordTypeCreateColorSpaceW = 122,
+ EmfRecordTypeMax = 122,
+ EmfRecordTypeMin = 1,
+ EmfPlusRecordTypeInvalid = GDIP_EMFPLUS_RECORD_BASE,
+ EmfPlusRecordTypeHeader,
+ EmfPlusRecordTypeEndOfFile,
+ EmfPlusRecordTypeComment,
+ EmfPlusRecordTypeGetDC,
+ EmfPlusRecordTypeMultiFormatStart,
+ EmfPlusRecordTypeMultiFormatSection,
+ EmfPlusRecordTypeMultiFormatEnd,
+ EmfPlusRecordTypeObject,
+ EmfPlusRecordTypeClear,
+ EmfPlusRecordTypeFillRects,
+ EmfPlusRecordTypeDrawRects,
+ EmfPlusRecordTypeFillPolygon,
+ EmfPlusRecordTypeDrawLines,
+ EmfPlusRecordTypeFillEllipse,
+ EmfPlusRecordTypeDrawEllipse,
+ EmfPlusRecordTypeFillPie,
+ EmfPlusRecordTypeDrawPie,
+ EmfPlusRecordTypeDrawArc,
+ EmfPlusRecordTypeFillRegion,
+ EmfPlusRecordTypeFillPath,
+ EmfPlusRecordTypeDrawPath,
+ EmfPlusRecordTypeFillClosedCurve,
+ EmfPlusRecordTypeDrawClosedCurve,
+ EmfPlusRecordTypeDrawCurve,
+ EmfPlusRecordTypeDrawBeziers,
+ EmfPlusRecordTypeDrawImage,
+ EmfPlusRecordTypeDrawImagePoints,
+ EmfPlusRecordTypeDrawString,
+ EmfPlusRecordTypeSetRenderingOrigin,
+ EmfPlusRecordTypeSetAntiAliasMode,
+ EmfPlusRecordTypeSetTextRenderingHint,
+ EmfPlusRecordTypeSetTextContrast,
+ EmfPlusRecordTypeSetGammaValue,
+ EmfPlusRecordTypeSetInterpolationMode,
+ EmfPlusRecordTypeSetPixelOffsetMode,
+ EmfPlusRecordTypeSetCompositingMode,
+ EmfPlusRecordTypeSetCompositingQuality,
+ EmfPlusRecordTypeSave,
+ EmfPlusRecordTypeRestore,
+ EmfPlusRecordTypeBeginContainer,
+ EmfPlusRecordTypeBeginContainerNoParams,
+ EmfPlusRecordTypeEndContainer,
+ EmfPlusRecordTypeSetWorldTransform,
+ EmfPlusRecordTypeResetWorldTransform,
+ EmfPlusRecordTypeMultiplyWorldTransform,
+ EmfPlusRecordTypeTranslateWorldTransform,
+ EmfPlusRecordTypeScaleWorldTransform,
+ EmfPlusRecordTypeRotateWorldTransform,
+ EmfPlusRecordTypeSetPageTransform,
+ EmfPlusRecordTypeResetClip,
+ EmfPlusRecordTypeSetClipRect,
+ EmfPlusRecordTypeSetClipPath,
+ EmfPlusRecordTypeSetClipRegion,
+ EmfPlusRecordTypeOffsetClip,
+ EmfPlusRecordTypeDrawDriverString,
+ EmfPlusRecordTypeStrokeFillPath,
+ EmfPlusRecordTypeSerializableObject,
+ EmfPlusRecordTypeSetTSGraphics,
+ EmfPlusRecordTypeSetTSClip,
+ EmfPlusRecordTotal,
+ EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
+ EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader
+};
+
+#define FlatnessDefault 0.25f
+
+#ifndef __cplusplus
+
+typedef enum Unit Unit;
+typedef enum BrushType BrushType;
+typedef enum DriverStringOptions DriverStringOptions;
+typedef enum FillMode FillMode;
+typedef enum LineCap LineCap;
+typedef enum PathPointType PathPointType;
+typedef enum LineJoin LineJoin;
+typedef enum QualityMode QualityMode;
+typedef enum SmoothingMode SmoothingMode;
+typedef enum CompositingQuality CompositingQuality;
+typedef enum InterpolationMode InterpolationMode;
+typedef enum PixelOffsetMode PixelOffsetMode;
+typedef enum DashCap DashCap;
+typedef enum DashStyle DashStyle;
+typedef enum MatrixOrder MatrixOrder;
+typedef enum ImageType ImageType;
+typedef enum ImageFlags ImageFlags;
+typedef enum WarpMode WarpMode;
+typedef enum WrapMode WrapMode;
+typedef enum MetafileType MetafileType;
+typedef enum LinearGradientMode LinearGradientMode;
+typedef enum EmfType EmfType;
+typedef enum CompositingMode CompositingMode;
+typedef enum TextRenderingHint TextRenderingHint;
+typedef enum StringAlignment StringAlignment;
+typedef enum StringDigitSubstitute StringDigitSubstitute;
+typedef enum StringTrimming StringTrimming;
+typedef enum FontStyle FontStyle;
+typedef enum StringFormatFlags StringFormatFlags;
+typedef enum HotkeyPrefix HotkeyPrefix;
+typedef enum PenAlignment PenAlignment;
+typedef enum PaletteFlags PaletteFlags;
+typedef enum ImageCodecFlags ImageCodecFlags;
+typedef enum CombineMode CombineMode;
+typedef enum FlushIntention FlushIntention;
+typedef enum CoordinateSpace CoordinateSpace;
+typedef enum GpTestControlEnum GpTestControlEnum;
+typedef enum MetafileFrameUnit MetafileFrameUnit;
+typedef enum PenType PenType;
+typedef enum HatchStyle HatchStyle;
+typedef enum EmfPlusRecordType EmfPlusRecordType;
+
+#endif /* end of c typedefs */
+
+#undef GDIP_WMF_RECORD_TO_EMFPLUS
+#define GDIP_WMF_RECORD_TO_EMFPLUS(x) ((EmfPlusRecordType)((x)|GDIP_WMF_RECORD_BASE))
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h
new file mode 100644
index 00000000..959ec788
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusflat.h
@@ -0,0 +1,753 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _FLATAPI_H
+#define _FLATAPI_H
+
+#define WINGDIPAPI __stdcall
+
+#define GDIPCONST const
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* AdjustableArrowCap */
+GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL);
+
+/* Bitmap */
+GpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap*,CGpEffect*,RECT*,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap**,INT,CGpEffect*,RECT*,RECT*,GpBitmap**,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*);
+GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT,
+ PixelFormat,BitmapData*);
+GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB);
+GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL);
+GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*);
+GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP, HPALETTE, GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON, GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,
+ GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);
+GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);
+GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*);
+GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,const VOID*,const UINT);
+
+/* Brush */
+GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
+GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
+GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
+
+/* CachedBitmap */
+GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*,
+ GpCachedBitmap**);
+GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*);
+GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT);
+
+/* CustomLineCap */
+GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL,
+ GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,
+ GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);
+GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
+
+/* Font */
+GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*, REAL, INT, Unit,
+ GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**);
+GpStatus WINGDIPAPI GdipDeleteFont(GpFont*);
+GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*);
+GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*);
+GpStatus WINGDIPAPI GdipGetFamily(GpFont*, GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*);
+GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*);
+GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*, INT*);
+GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*, GDIPCONST GpGraphics*,
+ REAL*);
+GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*);
+
+/* FontCollection */
+GpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*,
+ GDIPCONST void*,INT);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT,
+ GpFontFamily*[], INT*);
+
+/* FontFamily */
+GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**);
+GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*,
+ GpFontCollection*, GpFontFamily**);
+GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*);
+GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID);
+GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*);
+GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*);
+
+/* Graphics */
+GpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention);
+GpStatus WINGDIPAPI GdipBeginContainer(GpGraphics*,GDIPCONST GpRectF*,GDIPCONST GpRectF*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics*,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainerI(GpGraphics*,GDIPCONST GpRect*,GDIPCONST GpRect*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipEndContainer(GpGraphics*,GraphicsContainer);
+GpStatus WINGDIPAPI GdipComment(GpGraphics*,UINT,GDIPCONST BYTE*);
+GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**);
+HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void);
+GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *);
+GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT,
+ GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImagePointRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImagePoints(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointsI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*,
+ GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit,
+ GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*,
+ GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit,
+ GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL,
+ REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,
+ VOID*);
+GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT,
+ INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,
+ VOID*);
+GpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*);
+GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*, INT);
+GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*, INT);
+GpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT,
+ GDIPCONST GpFont*,GDIPCONST RectF*, GDIPCONST GpStringFormat*,
+ GDIPCONST GpBrush*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*,
+ GDIPCONST GpPointF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*,
+ GDIPCONST GpPoint*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*,
+ GDIPCONST GpRectF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*,
+ GDIPCONST GpRect*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*,
+ GDIPCONST GpMetafile*,GDIPCONST GpPointF*,INT,GDIPCONST GpRectF*,Unit,
+ EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,
+ REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,
+ REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillClosedCurve(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillClosedCurveI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillEllipse(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*);
+GpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPieI(GpGraphics*,GpBrush*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,
+ INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,
+ INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*);
+GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
+GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);
+GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*);
+GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);
+GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);
+GpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*);
+GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);
+GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);
+GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*);
+GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*);
+GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB);
+GpStatus WINGDIPAPI GdipGetVisibleClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetVisibleClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*, BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRect(GpGraphics*,REAL,REAL,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*,
+ INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT,
+ GpRegion**);
+GpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT,
+ GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*);
+GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT,
+ GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*);
+GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType,
+ GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType,
+ GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*,
+ MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC);
+GpStatus WINGDIPAPI GdipResetClip(GpGraphics*);
+GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*);
+GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState);
+GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
+GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode);
+GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode);
+GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);
+GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);
+GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
+GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
+GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
+GpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
+GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT);
+GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint);
+GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace,
+ GpPointF *, INT);
+GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace,
+ GpPoint *, INT);
+GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+
+/* GraphicsPath */
+GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3(GpPath*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);
+GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipAddPathString(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST RectF*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipAddPathStringI(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST Rect*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*);
+GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);
+GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
+GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT,
+ GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipDeletePath(GpPath*);
+GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*,
+ GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*,
+ GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*);
+GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);
+GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*);
+GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*);
+GpStatus WINGDIPAPI GdipResetPath(GpPath*);
+GpStatus WINGDIPAPI GdipReversePath(GpPath*);
+GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode);
+GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*);
+GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*);
+GpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL,
+ REAL,REAL,REAL,WarpMode,REAL);
+GpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL);
+
+/* HatchBrush */
+GpStatus WINGDIPAPI GdipCreateHatchBrush(HatchStyle,ARGB,ARGB,GpHatch**);
+GpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*);
+GpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*);
+GpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,HatchStyle*);
+
+/* Image */
+GpStatus WINGDIPAPI GdipCloneImage(GpImage*, GpImage**);
+GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**);
+GpStatus WINGDIPAPI GdipDisposeImage(GpImage*);
+GpStatus WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE,UINT,LPBYTE,INT,INT);
+GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT);
+GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*);
+GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);
+GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*);
+GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*);
+GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);
+GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*);
+GpStatus WINGDIPAPI GdipImageForceValidation(GpImage*);
+GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT);
+GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType);
+GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage*,GDIPCONST GUID*,UINT);
+GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage*,PROPID);
+GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*,
+ GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*);
+GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*);
+
+/* ImageAttributes */
+GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);
+GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);
+GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*,
+ BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*,
+ ColorAdjustType,BOOL,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*,
+ ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*,
+ ColorMatrixFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*,
+ ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*,
+ ColorAdjustType,BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*,
+ ColorAdjustType,BOOL,ColorChannelFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(
+ GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*,
+ ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*);
+GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*,
+ ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*,
+ ColorAdjustType);
+GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode,
+ ARGB,BOOL);
+GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*,
+ ColorAdjustType);
+
+/* LinearGradientBrush */
+GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*,
+ ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*,
+ ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB,
+ LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB,
+ LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*,
+ ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*,
+ ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*,
+ GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*,
+ GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetLineTransform(GpLineGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*);
+GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL,
+ GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL);
+GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL,
+ GpMatrixOrder);
+
+/* Matrix */
+GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**);
+GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*);
+GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*);
+GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+
+/* Metafile */
+GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics*,GpMetafile*,INT*,
+ EmfType,const WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT*,const WCHAR*,EmfType,const WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL,
+ GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*,
+ GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream*,GpMetafile**);
+GpStatus WINGDIPAPI GdipGetHemfFromMetafile(GpMetafile*,HENHMETAFILE*);
+GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile*,EmfPlusRecordType,UINT,UINT,GDIPCONST BYTE*);
+GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT);
+GpStatus WINGDIPAPI GdipRecordMetafile(HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+
+/* MetafileHeader */
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromWmf(HMETAFILE,GDIPCONST WmfPlaceableFileHeader*,MetafileHeader*);
+
+/* Notification */
+GpStatus WINAPI GdiplusNotificationHook(ULONG_PTR*);
+void WINAPI GdiplusNotificationUnhook(ULONG_PTR);
+
+/* PathGradientBrush */
+GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*,
+ GpPathGradient**);
+GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
+GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,
+ GDIPCONST ARGB*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*,
+ ARGB*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GpPointF*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
+GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL);
+GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*,
+ GDIPCONST ARGB*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient*,INT*);
+
+/* PathIterator */
+GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*);
+GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*);
+GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*,
+ INT,INT);
+GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*);
+GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*);
+
+/* Pen */
+GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**);
+GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipDeletePen(GpPen*);
+GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**);
+GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);
+GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);
+GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
+GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);
+GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);
+GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
+GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
+GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap);
+GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);
+GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*);
+GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap);
+GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin);
+GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment);
+GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*);
+GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*);
+
+/* Region */
+GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *, GpRegion **);
+GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *, GpPath *, CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *, GDIPCONST GpRectF *, CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *, GDIPCONST GpRect *, CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *, GpRegion *, CombineMode);
+GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE *, INT, GpRegion **);
+GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN, GpRegion **);
+GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *);
+GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *, GpGraphics *, GpRectF *);
+GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion *, GpGraphics *, GpRect *);
+GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *, BYTE *, UINT, UINT *);
+GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *, UINT *);
+GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *, GpGraphics *, HRGN *);
+GpStatus WINGDIPAPI GdipGetRegionScans(GpRegion *, GpRectF *, INT *, GpMatrix *);
+GpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion *, GpRect *, INT *, GpMatrix *);
+GpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion *, UINT *, GpMatrix *);
+GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion *, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion *, GpRegion *, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion *, REAL, REAL, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion *, INT, INT, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion *, REAL, REAL, REAL, REAL, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion *, INT, INT, INT, INT, GpGraphics *, BOOL *);
+GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *);
+GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *);
+GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *, GpMatrix *);
+GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion *, REAL, REAL);
+GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *, INT, INT);
+
+/* SolidBrush */
+GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);
+GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*);
+GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB);
+
+/* StringFormat */
+GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**);
+GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**);
+GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*);
+GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*,
+ StringDigitSubstitute*);
+GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount(
+ GDIPCONST GpStringFormat*, INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*);
+GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute);
+GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT);
+GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(
+ GpStringFormat*, INT, GDIPCONST CharacterRange*);
+GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*);
+GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming);
+GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*, INT);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **);
+
+/* Texture */
+GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*,
+ REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,
+ INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*, GpWrapMode*);
+GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*,
+ GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*);
+GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*, GpWrapMode);
+GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL,
+ GpMatrixOrder);
+
+/* Without wrapper methods */
+GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**);
+GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size);
+GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders);
+GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h
new file mode 100644
index 00000000..9cc5c027
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusgpstubs.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSGPSTUBS_H
+#define _GDIPLUSGPSTUBS_H
+
+#ifdef __cplusplus
+
+class GpGraphics {};
+class GpPen {};
+class GpBrush {};
+class GpHatch : public GpBrush {};
+class GpSolidFill : public GpBrush {};
+class GpPath {};
+class GpMatrix {};
+class GpPathIterator {};
+class GpCustomLineCap {};
+class GpAdjustableArrowCap : public GpCustomLineCap {};
+class GpImage {};
+class GpMetafile : public GpImage {};
+class GpImageAttributes {};
+class GpCachedBitmap {};
+class GpBitmap : public GpImage {};
+class GpPathGradient : public GpBrush {};
+class GpLineGradient : public GpBrush {};
+class GpTexture : public GpBrush {};
+class GpFont {};
+class GpFontCollection {};
+class GpFontFamily {};
+class GpStringFormat {};
+class GpRegion {};
+class CGpEffect {};
+
+#else /* end of c++ declarations */
+
+typedef struct GpGraphics GpGraphics;
+typedef struct GpPen GpPen;
+typedef struct GpBrush GpBrush;
+typedef struct GpHatch GpHatch;
+typedef struct GpSolidFill GpSolidFill;
+typedef struct GpPath GpPath;
+typedef struct GpMatrix GpMatrix;
+typedef struct GpPathIterator GpPathIterator;
+typedef struct GpCustomLineCap GpCustomLineCap;
+typedef struct GpAdjustableArrowCap GpAdjustableArrowCap;
+typedef struct GpImage GpImage;
+typedef struct GpMetafile GpMetafile;
+typedef struct GpImageAttributes GpImageAttributes;
+typedef struct GpCachedBitmap GpCachedBitmap;
+typedef struct GpBitmap GpBitmap;
+typedef struct GpPathGradient GpPathGradient;
+typedef struct GpLineGradient GpLineGradient;
+typedef struct GpTexture GpTexture;
+typedef struct GpFont GpFont;
+typedef struct GpFontCollection GpFontCollection;
+typedef struct GpFontFamily GpFontFamily;
+typedef struct GpStringFormat GpStringFormat;
+typedef struct GpRegion GpRegion;
+typedef struct CGpEffect CGpEffect;
+
+#endif /* end of c declarations */
+
+typedef Status GpStatus;
+typedef Unit GpUnit;
+typedef BrushType GpBrushType;
+typedef PointF GpPointF;
+typedef FillMode GpFillMode;
+typedef PathData GpPathData;
+typedef LineCap GpLineCap;
+typedef RectF GpRectF;
+typedef Rect GpRect;
+typedef LineJoin GpLineJoin;
+typedef DashCap GpDashCap;
+typedef DashStyle GpDashStyle;
+typedef MatrixOrder GpMatrixOrder;
+typedef Point GpPoint;
+typedef WrapMode GpWrapMode;
+typedef Color GpColor;
+typedef FlushIntention GpFlushIntention;
+typedef CoordinateSpace GpCoordinateSpace;
+typedef PenAlignment GpPenAlignment;
+typedef PenType GpPenType;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h
new file mode 100644
index 00000000..10a5c141
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusimaging.h
@@ -0,0 +1,462 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSIMAGING_H
+#define _GDIPLUSIMAGING_H
+
+DEFINE_GUID(ImageFormatUndefined, 0xb96b3ca9, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatMemoryBMP, 0xb96b3caa, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatBMP, 0xb96b3cab, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatEMF, 0xb96b3cac, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatWMF, 0xb96b3cad, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatPNG, 0xb96b3caf, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatGIF, 0xb96b3cb0, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatTIFF, 0xb96b3cb1, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatEXIF, 0xb96b3cb2, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+DEFINE_GUID(ImageFormatIcon, 0xb96b3cb5, 0x728, 0x11d3, 0x9d, 0x7b, 0, 0, 0xf8, 0x1e, 0xf3, 0x2e);
+
+DEFINE_GUID(FrameDimensionTime, 0x6aedbd6d, 0x3fb5, 0x418a, 0x83, 0xa6, 0x7f, 0x45, 0x22, 0x9d, 0xc8, 0x72);
+DEFINE_GUID(FrameDimensionPage, 0x7462dc86, 0x6180, 0x4c7e, 0x8e, 0x3f, 0xee, 0x73, 0x33, 0xa7, 0xa4, 0x83);
+DEFINE_GUID(FrameDimensionResolution, 0x84236f7b, 0x3bd3, 0x428f, 0x8d, 0xab, 0x4e, 0xa1, 0x43, 0x9c, 0xa3, 0x15);
+
+enum ImageLockMode
+{
+ ImageLockModeRead = 1,
+ ImageLockModeWrite = 2,
+ ImageLockModeUserInputBuf = 4
+};
+
+enum RotateFlipType
+{
+ RotateNoneFlipNone = 0,
+ Rotate180FlipXY = RotateNoneFlipNone,
+
+ Rotate90FlipNone = 1,
+ Rotate270FlipXY = Rotate90FlipNone,
+
+ Rotate180FlipNone = 2,
+ RotateNoneFlipXY = Rotate180FlipNone,
+
+ Rotate270FlipNone = 3,
+ Rotate90FlipXY = Rotate270FlipNone,
+
+ RotateNoneFlipX = 4,
+ Rotate180FlipY = RotateNoneFlipX,
+
+ Rotate90FlipX = 5,
+ Rotate270FlipY = Rotate90FlipX,
+
+ Rotate180FlipX = 6,
+ RotateNoneFlipY = Rotate180FlipX,
+
+ Rotate270FlipX = 7,
+ Rotate90FlipY = Rotate270FlipX
+};
+
+#ifdef __cplusplus
+class EncoderParameter
+{
+public:
+ GUID Guid;
+ ULONG NumberOfValues;
+ ULONG Type;
+ VOID* Value;
+};
+
+class EncoderParameters
+{
+public:
+ UINT Count;
+ EncoderParameter Parameter[1];
+};
+
+class ImageCodecInfo
+{
+public:
+ CLSID Clsid;
+ GUID FormatID;
+ const WCHAR* CodecName;
+ const WCHAR* DllName;
+ const WCHAR* FormatDescription;
+ const WCHAR* FilenameExtension;
+ const WCHAR* MimeType;
+ DWORD Flags;
+ DWORD Version;
+ DWORD SigCount;
+ DWORD SigSize;
+ const BYTE* SigPattern;
+ const BYTE* SigMask;
+};
+
+class BitmapData
+{
+public:
+ UINT Width;
+ UINT Height;
+ INT Stride;
+ Gdiplus::PixelFormat PixelFormat;
+ VOID* Scan0;
+ UINT_PTR Reserved;
+};
+
+class ImageItemData
+{
+public:
+ UINT Size;
+ UINT Position;
+ VOID* Desc;
+ UINT DescSize;
+ VOID* Data;
+ UINT DataSize;
+ UINT Cookie;
+};
+
+class PropertyItem
+{
+public:
+ PROPID id;
+ ULONG length;
+ WORD type;
+ VOID* value;
+};
+
+#else /* end of c++ typedefs */
+
+typedef enum ImageLockMode ImageLockMode;
+typedef enum RotateFlipType RotateFlipType;
+
+typedef struct EncoderParameter
+{
+ GUID Guid;
+ ULONG NumberOfValues;
+ ULONG Type;
+ VOID* Value;
+} EncoderParameter;
+
+typedef struct EncoderParameters
+{
+ UINT Count;
+ EncoderParameter Parameter[1];
+} EncoderParameters;
+
+typedef struct ImageCodecInfo
+{
+ CLSID Clsid;
+ GUID FormatID;
+ const WCHAR* CodecName;
+ const WCHAR* DllName;
+ const WCHAR* FormatDescription;
+ const WCHAR* FilenameExtension;
+ const WCHAR* MimeType;
+ DWORD Flags;
+ DWORD Version;
+ DWORD SigCount;
+ DWORD SigSize;
+ const BYTE* SigPattern;
+ const BYTE* SigMask;
+} ImageCodecInfo;
+
+typedef struct BitmapData
+{
+ UINT Width;
+ UINT Height;
+ INT Stride;
+ PixelFormat PixelFormat;
+ VOID* Scan0;
+ UINT_PTR Reserved; /* undocumented: stores the lock mode */
+} BitmapData;
+
+typedef struct ImageItemData
+{
+ UINT Size;
+ UINT Position;
+ VOID* Desc;
+ UINT DescSize;
+ VOID* Data;
+ UINT DataSize;
+ UINT Cookie;
+} ImageItemData;
+
+typedef struct PropertyItem
+{
+ PROPID id;
+ ULONG length;
+ WORD type;
+ VOID* value;
+} PropertyItem;
+
+#endif /* end of c typedefs */
+
+/* property types */
+#define PropertyTagTypeByte 1
+#define PropertyTagTypeASCII 2
+#define PropertyTagTypeShort 3
+#define PropertyTagTypeLong 4
+#define PropertyTagTypeRational 5
+#define PropertyTagTypeUndefined 7
+#define PropertyTagTypeSLONG 9
+#define PropertyTagTypeSRational 10
+
+/* property IDs */
+#define PropertyTagExifIFD 0x8769
+#define PropertyTagGpsIFD 0x8825
+
+#define PropertyTagNewSubfileType 0x00FE
+#define PropertyTagSubfileType 0x00FF
+#define PropertyTagImageWidth 0x0100
+#define PropertyTagImageHeight 0x0101
+#define PropertyTagBitsPerSample 0x0102
+#define PropertyTagCompression 0x0103
+#define PropertyTagPhotometricInterp 0x0106
+#define PropertyTagThreshHolding 0x0107
+#define PropertyTagCellWidth 0x0108
+#define PropertyTagCellHeight 0x0109
+#define PropertyTagFillOrder 0x010A
+#define PropertyTagDocumentName 0x010D
+#define PropertyTagImageDescription 0x010E
+#define PropertyTagEquipMake 0x010F
+#define PropertyTagEquipModel 0x0110
+#define PropertyTagStripOffsets 0x0111
+#define PropertyTagOrientation 0x0112
+#define PropertyTagSamplesPerPixel 0x0115
+#define PropertyTagRowsPerStrip 0x0116
+#define PropertyTagStripBytesCount 0x0117
+#define PropertyTagMinSampleValue 0x0118
+#define PropertyTagMaxSampleValue 0x0119
+#define PropertyTagXResolution 0x011A
+#define PropertyTagYResolution 0x011B
+#define PropertyTagPlanarConfig 0x011C
+#define PropertyTagPageName 0x011D
+#define PropertyTagXPosition 0x011E
+#define PropertyTagYPosition 0x011F
+#define PropertyTagFreeOffset 0x0120
+#define PropertyTagFreeByteCounts 0x0121
+#define PropertyTagGrayResponseUnit 0x0122
+#define PropertyTagGrayResponseCurve 0x0123
+#define PropertyTagT4Option 0x0124
+#define PropertyTagT6Option 0x0125
+#define PropertyTagResolutionUnit 0x0128
+#define PropertyTagPageNumber 0x0129
+#define PropertyTagTransferFuncition 0x012D
+#define PropertyTagSoftwareUsed 0x0131
+#define PropertyTagDateTime 0x0132
+#define PropertyTagArtist 0x013B
+#define PropertyTagHostComputer 0x013C
+#define PropertyTagPredictor 0x013D
+#define PropertyTagWhitePoint 0x013E
+#define PropertyTagPrimaryChromaticities 0x013F
+#define PropertyTagColorMap 0x0140
+#define PropertyTagHalftoneHints 0x0141
+#define PropertyTagTileWidth 0x0142
+#define PropertyTagTileLength 0x0143
+#define PropertyTagTileOffset 0x0144
+#define PropertyTagTileByteCounts 0x0145
+#define PropertyTagInkSet 0x014C
+#define PropertyTagInkNames 0x014D
+#define PropertyTagNumberOfInks 0x014E
+#define PropertyTagDotRange 0x0150
+#define PropertyTagTargetPrinter 0x0151
+#define PropertyTagExtraSamples 0x0152
+#define PropertyTagSampleFormat 0x0153
+#define PropertyTagSMinSampleValue 0x0154
+#define PropertyTagSMaxSampleValue 0x0155
+#define PropertyTagTransferRange 0x0156
+
+#define PropertyTagJPEGProc 0x0200
+#define PropertyTagJPEGInterFormat 0x0201
+#define PropertyTagJPEGInterLength 0x0202
+#define PropertyTagJPEGRestartInterval 0x0203
+#define PropertyTagJPEGLosslessPredictors 0x0205
+#define PropertyTagJPEGPointTransforms 0x0206
+#define PropertyTagJPEGQTables 0x0207
+#define PropertyTagJPEGDCTables 0x0208
+#define PropertyTagJPEGACTables 0x0209
+
+#define PropertyTagYCbCrCoefficients 0x0211
+#define PropertyTagYCbCrSubsampling 0x0212
+#define PropertyTagYCbCrPositioning 0x0213
+#define PropertyTagREFBlackWhite 0x0214
+
+#define PropertyTagICCProfile 0x8773
+
+#define PropertyTagGamma 0x0301
+#define PropertyTagICCProfileDescriptor 0x0302
+#define PropertyTagSRGBRenderingIntent 0x0303
+
+#define PropertyTagImageTitle 0x0320
+#define PropertyTagCopyright 0x8298
+
+#define PropertyTagResolutionXUnit 0x5001
+#define PropertyTagResolutionYUnit 0x5002
+#define PropertyTagResolutionXLengthUnit 0x5003
+#define PropertyTagResolutionYLengthUnit 0x5004
+#define PropertyTagPrintFlags 0x5005
+#define PropertyTagPrintFlagsVersion 0x5006
+#define PropertyTagPrintFlagsCrop 0x5007
+#define PropertyTagPrintFlagsBleedWidth 0x5008
+#define PropertyTagPrintFlagsBleedWidthScale 0x5009
+#define PropertyTagHalftoneLPI 0x500A
+#define PropertyTagHalftoneLPIUnit 0x500B
+#define PropertyTagHalftoneDegree 0x500C
+#define PropertyTagHalftoneShape 0x500D
+#define PropertyTagHalftoneMisc 0x500E
+#define PropertyTagHalftoneScreen 0x500F
+#define PropertyTagJPEGQuality 0x5010
+#define PropertyTagGridSize 0x5011
+#define PropertyTagThumbnailFormat 0x5012
+#define PropertyTagThumbnailWidth 0x5013
+#define PropertyTagThumbnailHeight 0x5014
+#define PropertyTagThumbnailColorDepth 0x5015
+#define PropertyTagThumbnailPlanes 0x5016
+#define PropertyTagThumbnailRawBytes 0x5017
+#define PropertyTagThumbnailSize 0x5018
+#define PropertyTagThumbnailCompressedSize 0x5019
+#define PropertyTagColorTransferFunction 0x501A
+#define PropertyTagThumbnailData 0x501B
+
+#define PropertyTagThumbnailImageWidth 0x5020
+#define PropertyTagThumbnailImageHeight 0x5021
+#define PropertyTagThumbnailBitsPerSample 0x5022
+#define PropertyTagThumbnailCompression 0x5023
+#define PropertyTagThumbnailPhotometricInterp 0x5024
+#define PropertyTagThumbnailImageDescription 0x5025
+#define PropertyTagThumbnailEquipMake 0x5026
+#define PropertyTagThumbnailEquipModel 0x5027
+#define PropertyTagThumbnailStripOffsets 0x5028
+#define PropertyTagThumbnailOrientation 0x5029
+#define PropertyTagThumbnailSamplesPerPixel 0x502A
+#define PropertyTagThumbnailRowsPerStrip 0x502B
+#define PropertyTagThumbnailStripBytesCount 0x502C
+#define PropertyTagThumbnailResolutionX 0x502D
+#define PropertyTagThumbnailResolutionY 0x502E
+#define PropertyTagThumbnailPlanarConfig 0x502F
+#define PropertyTagThumbnailResolutionUnit 0x5030
+#define PropertyTagThumbnailTransferFunction 0x5031
+#define PropertyTagThumbnailSoftwareUsed 0x5032
+#define PropertyTagThumbnailDateTime 0x5033
+#define PropertyTagThumbnailArtist 0x5034
+#define PropertyTagThumbnailWhitePoint 0x5035
+#define PropertyTagThumbnailPrimaryChromaticities 0x5036
+#define PropertyTagThumbnailYCbCrCoefficients 0x5037
+#define PropertyTagThumbnailYCbCrSubsampling 0x5038
+#define PropertyTagThumbnailYCbCrPositioning 0x5039
+#define PropertyTagThumbnailRefBlackWhite 0x503A
+#define PropertyTagThumbnailCopyRight 0x503B
+
+#define PropertyTagLuminanceTable 0x5090
+#define PropertyTagChrominanceTable 0x5091
+
+#define PropertyTagFrameDelay 0x5100
+#define PropertyTagLoopCount 0x5101
+#define PropertyTagGlobalPalette 0x5102
+#define PropertyTagIndexBackground 0x5103
+#define PropertyTagIndexTransparent 0x5104
+
+#define PropertyTagPixelUnit 0x5110
+#define PropertyTagPixelPerUnitX 0x5111
+#define PropertyTagPixelPerUnitY 0x5112
+#define PropertyTagPaletteHistogram 0x5113
+
+#define PropertyTagExifExposureTime 0x829A
+#define PropertyTagExifFNumber 0x829D
+
+#define PropertyTagExifExposureProg 0x8822
+#define PropertyTagExifSpectralSense 0x8824
+#define PropertyTagExifISOSpeed 0x8827
+#define PropertyTagExifOECF 0x8828
+
+#define PropertyTagExifVer 0x9000
+#define PropertyTagExifDTOrig 0x9003
+#define PropertyTagExifDTDigitized 0x9004
+
+#define PropertyTagExifCompConfig 0x9101
+#define PropertyTagExifCompBPP 0x9102
+
+#define PropertyTagExifShutterSpeed 0x9201
+#define PropertyTagExifAperture 0x9202
+#define PropertyTagExifBrightness 0x9203
+#define PropertyTagExifExposureBias 0x9204
+#define PropertyTagExifMaxAperture 0x9205
+#define PropertyTagExifSubjectDist 0x9206
+#define PropertyTagExifMeteringMode 0x9207
+#define PropertyTagExifLightSource 0x9208
+#define PropertyTagExifFlash 0x9209
+#define PropertyTagExifFocalLength 0x920A
+#define PropertyTagExifMakerNote 0x927C
+#define PropertyTagExifUserComment 0x9286
+#define PropertyTagExifDTSubsec 0x9290
+#define PropertyTagExifDTOrigSS 0x9291
+#define PropertyTagExifDTDigSS 0x9292
+
+#define PropertyTagExifFPXVer 0xA000
+#define PropertyTagExifColorSpace 0xA001
+#define PropertyTagExifPixXDim 0xA002
+#define PropertyTagExifPixYDim 0xA003
+#define PropertyTagExifRelatedWav 0xA004
+#define PropertyTagExifInterop 0xA005
+#define PropertyTagExifFlashEnergy 0xA20B
+#define PropertyTagExifSpatialFR 0xA20C
+#define PropertyTagExifFocalXRes 0xA20E
+#define PropertyTagExifFocalYRes 0xA20F
+#define PropertyTagExifFocalResUnit 0xA210
+#define PropertyTagExifSubjectLoc 0xA214
+#define PropertyTagExifExposureIndex 0xA215
+#define PropertyTagExifSensingMethod 0xA217
+#define PropertyTagExifFileSource 0xA300
+#define PropertyTagExifSceneType 0xA301
+#define PropertyTagExifCfaPattern 0xA302
+
+#define PropertyTagGpsVer 0x0000
+#define PropertyTagGpsLatitudeRef 0x0001
+#define PropertyTagGpsLatitude 0x0002
+#define PropertyTagGpsLongitudeRef 0x0003
+#define PropertyTagGpsLongitude 0x0004
+#define PropertyTagGpsAltitudeRef 0x0005
+#define PropertyTagGpsAltitude 0x0006
+#define PropertyTagGpsGpsTime 0x0007
+#define PropertyTagGpsGpsSatellites 0x0008
+#define PropertyTagGpsGpsStatus 0x0009
+#define PropertyTagGpsGpsMeasureMode 0x000A
+#define PropertyTagGpsGpsDop 0x000B
+#define PropertyTagGpsSpeedRef 0x000C
+#define PropertyTagGpsSpeed 0x000D
+#define PropertyTagGpsTrackRef 0x000E
+#define PropertyTagGpsTrack 0x000F
+#define PropertyTagGpsImgDirRef 0x0010
+#define PropertyTagGpsImgDir 0x0011
+#define PropertyTagGpsMapDatum 0x0012
+#define PropertyTagGpsDestLatRef 0x0013
+#define PropertyTagGpsDestLat 0x0014
+#define PropertyTagGpsDestLongRef 0x0015
+#define PropertyTagGpsDestLong 0x0016
+#define PropertyTagGpsDestBearRef 0x0017
+#define PropertyTagGpsDestBear 0x0018
+#define PropertyTagGpsDestDistRef 0x0019
+#define PropertyTagGpsDestDist 0x001A
+
+#endif /* _GDIPLUSIMAGING_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h
new file mode 100644
index 00000000..d1227083
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusinit.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSINIT_H
+#define _GDIPLUSINIT_H
+
+enum DebugEventLevel
+{
+ DebugEventLevelFatal,
+ DebugEventLevelWarning
+};
+
+typedef VOID (WINAPI *DebugEventProc)(enum DebugEventLevel, CHAR *);
+typedef Status (WINAPI *NotificationHookProc)(ULONG_PTR *);
+typedef void (WINAPI *NotificationUnhookProc)(ULONG_PTR);
+
+struct GdiplusStartupInput
+{
+ UINT32 GdiplusVersion;
+ DebugEventProc DebugEventCallback;
+ BOOL SuppressBackgroundThread;
+ BOOL SuppressExternalCodecs;
+
+#ifdef __cplusplus
+ GdiplusStartupInput(DebugEventProc debugEventCallback = NULL,
+ BOOL suppressBackgroundThread = FALSE,
+ BOOL suppressExternalCodecs = FALSE)
+ {
+ GdiplusVersion = 1;
+ DebugEventCallback = debugEventCallback;
+ SuppressBackgroundThread = suppressBackgroundThread;
+ SuppressExternalCodecs = suppressExternalCodecs;
+ }
+#endif
+};
+
+struct GdiplusStartupOutput
+{
+ NotificationHookProc NotificationHook;
+ NotificationUnhookProc NotificationUnhook;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+Status WINAPI GdiplusStartup(ULONG_PTR *, const struct GdiplusStartupInput *, struct GdiplusStartupOutput *);
+void WINAPI GdiplusShutdown(ULONG_PTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h
new file mode 100644
index 00000000..1c012dea
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmem.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSMEM_H
+#define _GDIPLUSMEM_H
+
+#define WINGDIPAPI __stdcall
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* WINGDIPAPI GdipAlloc(SIZE_T) __WINE_ALLOC_SIZE(1);
+void WINGDIPAPI GdipFree(void*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h
new file mode 100644
index 00000000..805ae838
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplusmetaheader.h
@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSMETAHEADER_H
+#define _GDIPLUSMETAHEADER_H
+
+typedef struct
+{
+ DWORD iType;
+ DWORD nSize;
+ RECTL rclBounds;
+ RECTL rclFrame;
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD nBytes;
+ DWORD nRecords;
+ WORD nHandles;
+ WORD sReserved;
+ DWORD nDescription;
+ DWORD offDescription;
+ DWORD nPalEntries;
+ SIZEL szlDevice;
+ SIZEL szlMillimeters;
+} ENHMETAHEADER3;
+
+#include <pshpack2.h>
+
+typedef struct
+{
+ INT16 Left;
+ INT16 Top;
+ INT16 Right;
+ INT16 Bottom;
+} PWMFRect16;
+
+typedef struct
+{
+ UINT32 Key;
+ INT16 Hmf;
+ PWMFRect16 BoundingBox;
+ INT16 Inch;
+ UINT32 Reserved;
+ INT16 Checksum;
+} WmfPlaceableFileHeader;
+
+#include <poppack.h>
+
+#define GDIP_EMFPLUSFLAGS_DISPLAY 0x00000001
+
+#ifdef __cplusplus
+class MetafileHeader
+{
+public:
+ MetafileType Type;
+ UINT Size;
+ UINT Version;
+ UINT EmfPlusFlags;
+ REAL DpiX;
+ REAL DpiY;
+ INT X;
+ INT Y;
+ INT Width;
+ INT Height;
+ union
+ {
+ METAHEADER WmfHeader;
+ ENHMETAHEADER3 EmfHeader;
+ };
+ INT EmfPlusHeaderSize;
+ INT LogicalDpiX;
+ INT LogicalDpiY;
+
+public:
+ MetafileType GetType() const { return Type; }
+
+ UINT GetMetafileSize() const { return Size; }
+
+ UINT GetVersion() const { return Version; }
+
+ UINT GetEmfPlusFlags() const { return EmfPlusFlags; }
+
+ REAL GetDpiX() const { return DpiX; }
+
+ REAL GetDpiY() const { return DpiY; }
+
+ VOID GetBounds (OUT Rect *r) const
+ {
+ r->X = X;
+ r->Y = Y;
+ r->Width = Width;
+ r->Height = Height;
+ }
+
+ BOOL IsWmf() const
+ {
+ return ((Type == MetafileTypeWmf) || (Type == MetafileTypeWmfPlaceable));
+ }
+
+ BOOL IsWmfPlaceable() const { return (Type == MetafileTypeWmfPlaceable); }
+
+ BOOL IsEmf() const { return (Type == MetafileTypeEmf); }
+
+ BOOL IsEmfOrEmfPlus() const { return (Type >= MetafileTypeEmf); }
+
+ BOOL IsEmfPlus() const { return (Type >= MetafileTypeEmfPlusOnly); }
+
+ BOOL IsEmfPlusDual() const { return (Type == MetafileTypeEmfPlusDual); }
+
+ BOOL IsEmfPlusOnly() const { return (Type == MetafileTypeEmfPlusOnly); }
+
+ BOOL IsDisplay() const
+ {
+ return IsEmfPlus() && ((EmfPlusFlags & GDIP_EMFPLUSFLAGS_DISPLAY) != 0);
+ }
+
+ const METAHEADER * GetWmfHeader() const
+ {
+ return IsWmf() ? &WmfHeader : NULL;
+ }
+
+ const ENHMETAHEADER3 * GetEmfHeader() const
+ {
+ return IsEmfOrEmfPlus() ? &EmfHeader : NULL;
+ }
+};
+#else /* end of c++ typedefs */
+
+typedef struct MetafileHeader
+{
+ MetafileType Type;
+ UINT Size;
+ UINT Version;
+ UINT EmfPlusFlags;
+ REAL DpiX;
+ REAL DpiY;
+ INT X;
+ INT Y;
+ INT Width;
+ INT Height;
+ union
+ {
+ METAHEADER WmfHeader;
+ ENHMETAHEADER3 EmfHeader;
+ } DUMMYUNIONNAME;
+ INT EmfPlusHeaderSize;
+ INT LogicalDpiX;
+ INT LogicalDpiY;
+} MetafileHeader;
+
+#endif /* end of c typedefs */
+
+#endif /* _GDIPLUSMETAHEADER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h
new file mode 100644
index 00000000..de01c9ff
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdipluspixelformats.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSPIXELFORMATS_H
+#define _GDIPLUSPIXELFORMATS_H
+
+typedef DWORD ARGB;
+typedef INT PixelFormat;
+
+#define PixelFormatIndexed 0x00010000
+#define PixelFormatGDI 0x00020000
+#define PixelFormatAlpha 0x00040000
+#define PixelFormatPAlpha 0x00080000
+#define PixelFormatExtended 0x00100000
+#define PixelFormatCanonical 0x00200000
+
+#define PixelFormatUndefined 0
+#define PixelFormatDontCare 0
+
+#define PixelFormat1bppIndexed (1 | ( 1 << 8) | PixelFormatIndexed | PixelFormatGDI)
+#define PixelFormat4bppIndexed (2 | ( 4 << 8) | PixelFormatIndexed | PixelFormatGDI)
+#define PixelFormat8bppIndexed (3 | ( 8 << 8) | PixelFormatIndexed | PixelFormatGDI)
+#define PixelFormat16bppGrayScale (4 | (16 << 8) | PixelFormatExtended)
+#define PixelFormat16bppRGB555 (5 | (16 << 8) | PixelFormatGDI)
+#define PixelFormat16bppRGB565 (6 | (16 << 8) | PixelFormatGDI)
+#define PixelFormat16bppARGB1555 (7 | (16 << 8) | PixelFormatAlpha | PixelFormatGDI)
+#define PixelFormat24bppRGB (8 | (24 << 8) | PixelFormatGDI)
+#define PixelFormat32bppRGB (9 | (32 << 8) | PixelFormatGDI)
+#define PixelFormat32bppARGB (10 | (32 << 8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical)
+#define PixelFormat32bppPARGB (11 | (32 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI)
+#define PixelFormat48bppRGB (12 | (48 << 8) | PixelFormatExtended)
+#define PixelFormat64bppARGB (13 | (64 << 8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended)
+#define PixelFormat64bppPARGB (14 | (64 << 8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended)
+#define PixelFormat32bppCMYK (15 | (32 << 8))
+#define PixelFormatMax 16
+
+static inline BOOL IsIndexedPixelFormat(PixelFormat format)
+{
+ return (format & PixelFormatIndexed) != 0;
+}
+
+static inline BOOL IsAlphaPixelFormat(PixelFormat format)
+{
+ return (format & PixelFormatAlpha) != 0;
+}
+
+static inline BOOL IsCanonicalPixelFormat(PixelFormat format)
+{
+ return (format & PixelFormatCanonical) != 0;
+}
+
+static inline BOOL IsExtendedPixelFormat(PixelFormat format)
+{
+ return (format & PixelFormatExtended) != 0;
+}
+
+static inline UINT GetPixelFormatSize(PixelFormat format)
+{
+ return (format >> 8) & 0xff;
+}
+
+enum PaletteFlags
+{
+ PaletteFlagsHasAlpha = 1,
+ PaletteFlagsGrayScale = 2,
+ PaletteFlagsHalftone = 4
+};
+
+#ifdef __cplusplus
+
+struct ColorPalette
+{
+public:
+ UINT Flags;
+ UINT Count;
+ ARGB Entries[1];
+};
+
+#else /* end of c++ typedefs */
+
+typedef struct ColorPalette
+{
+ UINT Flags;
+ UINT Count;
+ ARGB Entries[1];
+} ColorPalette;
+
+#endif /* end of c typedefs */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h
new file mode 100644
index 00000000..71dfffa8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/gdiplustypes.h
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2007 Google (Evan Stade)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _GDIPLUSTYPES_H
+#define _GDIPLUSTYPES_H
+
+typedef float REAL;
+
+enum Status{
+ Ok = 0,
+ GenericError = 1,
+ InvalidParameter = 2,
+ OutOfMemory = 3,
+ ObjectBusy = 4,
+ InsufficientBuffer = 5,
+ NotImplemented = 6,
+ Win32Error = 7,
+ WrongState = 8,
+ Aborted = 9,
+ FileNotFound = 10,
+ ValueOverflow = 11,
+ AccessDenied = 12,
+ UnknownImageFormat = 13,
+ FontFamilyNotFound = 14,
+ FontStyleNotFound = 15,
+ NotTrueTypeFont = 16,
+ UnsupportedGdiplusVersion = 17,
+ GdiplusNotInitialized = 18,
+ PropertyNotFound = 19,
+ PropertyNotSupported = 20,
+ ProfileNotFound = 21
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef BOOL (CALLBACK * ImageAbort)(VOID *);
+typedef ImageAbort DrawImageAbort;
+typedef ImageAbort GetThumbnailImageAbort;
+
+typedef BOOL (CALLBACK * EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#ifdef __cplusplus
+
+class Point
+{
+public:
+ Point()
+ {
+ X = Y = 0;
+ }
+
+ Point(IN const Point &pt)
+ {
+ X = pt.X;
+ Y = pt.Y;
+ }
+
+ /* FIXME: missing constructor that takes a Size */
+
+ Point(IN INT x, IN INT y)
+ {
+ X = x;
+ Y = y;
+ }
+
+ Point operator+(IN const Point& pt) const
+ {
+ return Point(X + pt.X, Y + pt.Y);
+ }
+
+ Point operator-(IN const Point& pt) const
+ {
+ return Point(X - pt.X, Y - pt.Y);
+ }
+
+ BOOL Equals(IN const Point& pt)
+ {
+ return (X == pt.X) && (Y == pt.Y);
+ }
+
+public:
+ INT X;
+ INT Y;
+};
+
+class PointF
+{
+public:
+ PointF()
+ {
+ X = Y = 0.0f;
+ }
+
+ PointF(IN const PointF &pt)
+ {
+ X = pt.X;
+ Y = pt.Y;
+ }
+
+ /* FIXME: missing constructor that takes a SizeF */
+
+ PointF(IN REAL x, IN REAL y)
+ {
+ X = x;
+ Y = y;
+ }
+
+ PointF operator+(IN const PointF& pt) const
+ {
+ return PointF(X + pt.X, Y + pt.Y);
+ }
+
+ PointF operator-(IN const PointF& pt) const
+ {
+ return PointF(X - pt.X, Y - pt.Y);
+ }
+
+ BOOL Equals(IN const PointF& pt)
+ {
+ return (X == pt.X) && (Y == pt.Y);
+ }
+
+public:
+ REAL X;
+ REAL Y;
+};
+
+class PathData
+{
+public:
+ PathData()
+ {
+ Count = 0;
+ Points = NULL;
+ Types = NULL;
+ }
+
+ ~PathData()
+ {
+ if (Points != NULL)
+ {
+ delete Points;
+ }
+
+ if (Types != NULL)
+ {
+ delete Types;
+ }
+ }
+
+private:
+ PathData(const PathData &);
+ PathData& operator=(const PathData &);
+
+public:
+ INT Count;
+ PointF* Points;
+ BYTE* Types;
+};
+
+/* FIXME: missing the methods. */
+class RectF
+{
+public:
+ REAL X;
+ REAL Y;
+ REAL Width;
+ REAL Height;
+};
+
+/* FIXME: missing the methods. */
+class Rect
+{
+public:
+ INT X;
+ INT Y;
+ INT Width;
+ INT Height;
+};
+
+class CharacterRange
+{
+public:
+ CharacterRange()
+ {
+ First = Length = 0;
+ }
+
+ CharacterRange(INT first, INT length)
+ {
+ First = first;
+ Length = length;
+ }
+
+ CharacterRange& operator=(const CharacterRange& rhs)
+ {
+ First = rhs.First;
+ Length = rhs.Length;
+ return *this;
+ }
+public:
+ INT First;
+ INT Length;
+};
+
+#else /* end of c++ typedefs */
+
+typedef struct Point
+{
+ INT X;
+ INT Y;
+} Point;
+
+typedef struct PointF
+{
+ REAL X;
+ REAL Y;
+} PointF;
+
+typedef struct PathData
+{
+ INT Count;
+ PointF* Points;
+ BYTE* Types;
+} PathData;
+
+typedef struct RectF
+{
+ REAL X;
+ REAL Y;
+ REAL Width;
+ REAL Height;
+} RectF;
+
+typedef struct Rect
+{
+ INT X;
+ INT Y;
+ INT Width;
+ INT Height;
+} Rect;
+
+typedef struct CharacterRange
+{
+ INT First;
+ INT Length;
+} CharacterRange;
+
+typedef enum Status Status;
+
+#endif /* end of c typedefs */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h
new file mode 100644
index 00000000..0f8280b0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/guiddef.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+
+#ifdef __WIDL__
+typedef struct
+{
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ byte Data4[ 8 ];
+} GUID;
+#else
+typedef struct _GUID
+{
+#ifdef _MSC_VER
+ unsigned long Data1;
+#else
+ unsigned int Data1;
+#endif
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[ 8 ];
+} GUID;
+#endif
+
+/* Macros for __uuidof emulation */
+#if defined(__cplusplus) && !defined(_MSC_VER)
+
+extern "C++" {
+ template<typename T> const GUID &__wine_uuidof();
+}
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ extern "C++" { \
+ template<> inline const GUID &__wine_uuidof<type>() { \
+ static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
+ return __uuid_inst; \
+ } \
+ template<> inline const GUID &__wine_uuidof<type*>() { \
+ return __wine_uuidof<type>(); \
+ } \
+ }
+
+#define __uuidof(type) __wine_uuidof<typeof(type)>()
+
+#else
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#endif
+
+#endif
+
+#undef DEFINE_GUID
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name DECLSPEC_HIDDEN; \
+ EXTERN_C const GUID name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ const GUID name DECLSPEC_HIDDEN; \
+ const GUID name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#endif
+#else
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name DECLSPEC_HIDDEN
+#endif
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+#ifndef _GUIDDEF_H_
+#define _GUIDDEF_H_
+
+#ifndef __LPGUID_DEFINED__
+#define __LPGUID_DEFINED__
+typedef GUID *LPGUID;
+#endif
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef GUID IID,*LPIID;
+typedef GUID CLSID,*LPCLSID;
+typedef GUID FMTID,*LPFMTID;
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
+#define IID_NULL GUID_NULL
+#define CLSID_NULL GUID_NULL
+#define FMTID_NULL GUID_NULL
+
+#ifdef __midl_proxy
+#define __MIDL_CONST
+#else
+#define __MIDL_CONST const
+#endif
+
+#endif /* ndef __IID_DEFINED__ */
+
+#ifdef __cplusplus
+#define REFGUID const GUID &
+#define REFCLSID const CLSID &
+#define REFIID const IID &
+#define REFFMTID const FMTID &
+#else /* !defined(__cplusplus) && !defined(CINTERFACE) */
+#define REFGUID const GUID* __MIDL_CONST
+#define REFCLSID const CLSID* __MIDL_CONST
+#define REFIID const IID* __MIDL_CONST
+#define REFFMTID const FMTID* __MIDL_CONST
+#endif /* !defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
+#else /* defined(__cplusplus) && !defined(CINTERFACE) */
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#endif /* defined(__cplusplus) && !defined(CINTERFACE) */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#include <string.h>
+inline bool operator==(const GUID& guidOne, const GUID& guidOther)
+{
+ return !memcmp(&guidOne,&guidOther,sizeof(GUID));
+}
+inline bool operator!=(const GUID& guidOne, const GUID& guidOther)
+{
+ return !(guidOne == guidOther);
+}
+#endif
+
+extern const IID GUID_NULL;
+
+#endif /* _GUIDDEF_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h
new file mode 100644
index 00000000..042bfd96
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlguids.h
@@ -0,0 +1,40 @@
+/*
+ * Implementation of hyperlinking (hlink.dll)
+ *
+ * Copyright 2005 Aric Stewart for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HLGUIDS_H__
+#define __WINE_HLGUIDS_H__
+
+DEFINE_GUID(CLSID_StdHlink,
+ 0x79eac9d0, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);
+DEFINE_GUID(CLSID_StdHlinkBrowseContext,
+ 0x79eac9d1, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);
+DEFINE_GUID(CLSID_IID_IExtensionServices,
+ 0x79eac9cb, 0xbaf9, 0x11ce, 0x8c, 0x82, 0x00, 0xaa,0x00,0x4b,0xa9,0x0b);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl
new file mode 100644
index 00000000..c6fb8e77
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/hlink.idl
@@ -0,0 +1,450 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "urlmon.idl";
+
+interface IHlink;
+interface IHlinkSite;
+interface IHlinkFrame;
+interface IHlinkBrowseContext;
+
+cpp_quote("HRESULT WINAPI HlinkCreateFromMoniker(IMoniker*, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkCreateFromString(LPCWSTR, LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkCreateFromData(IDataObject*, IHlinkSite*, DWORD dwSiteData, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkCreateExtensionServices(LPCWSTR, HWND, LPCWSTR, LPCWSTR, IUnknown*, REFIID, void**);")
+cpp_quote("HRESULT WINAPI HlinkQueryCreateFromData(IDataObject*);")
+cpp_quote("HRESULT WINAPI HlinkClone(IHlink*, REFIID, IHlinkSite*, DWORD, void **);")
+cpp_quote("HRESULT WINAPI HlinkCreateBrowseContext(IUnknown*, REFIID, void **);")
+cpp_quote("HRESULT WINAPI HlinkNavigateToStringReference(LPCWSTR, LPCWSTR, IHlinkSite*, DWORD, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);")
+cpp_quote("HRESULT WINAPI HlinkNavigate(IHlink*, IHlinkFrame*, DWORD, LPBC, IBindStatusCallback*, IHlinkBrowseContext*);")
+cpp_quote("HRESULT WINAPI HlinkOnNavigate(IHlinkFrame*, IHlinkBrowseContext*, DWORD, IMoniker*, LPCWSTR, LPCWSTR, ULONG*);")
+cpp_quote("HRESULT WINAPI HlinkIsShortcut(LPCWSTR);")
+cpp_quote("HRESULT WINAPI HlinkTranslateURL(LPCWSTR,DWORD,LPWSTR*);")
+cpp_quote("HRESULT WINAPI HlinkParseDisplayName(LPBC,LPCWSTR,BOOL,ULONG*,IMoniker**);")
+cpp_quote("HRESULT WINAPI HlinkResolveMonikerForData(LPMONIKER,DWORD,LPBC,ULONG,FORMATETC*,IBindStatusCallback*,LPMONIKER);")
+cpp_quote("HRESULT WINAPI HlinkUpdateStackItem(IHlinkFrame*, IHlinkBrowseContext*, ULONG, IMoniker*, LPCWSTR, LPCWSTR);")
+
+typedef enum _HLSR_NOREDEF10 {
+ HLSR_HOME,
+ HLSR_SEARCHPAGE,
+ HLSR_HISTORYFOLDER
+} HLSR;
+
+cpp_quote("HRESULT WINAPI HlinkSetSpecialReference(ULONG uReference, LPCWSTR pwzReference);")
+cpp_quote("HRESULT WINAPI HlinkGetSpecialReference(ULONG uReference, LPWSTR *ppwzReference);")
+
+cpp_quote("#define SID_SHlinkFrame IID_IHlinkFrame")
+
+/*****************************************************************************
+ * IHlink interface
+ */
+[
+ object,
+ uuid(79EAC9C3-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IHlink: IUnknown
+{
+ typedef [unique] IHlink *LPHLINK;
+
+ typedef enum {
+ HLNF_INTERNALJUMP = 0x00000001,
+ HLNF_OPENINNEWWINDOW = 0x00000002,
+ HLNF_NAVIGATINGBACK = 0x00000004,
+ HLNF_NAVIGATINGFORWARD = 0x00000008,
+ HLNF_NAVIGATINGTOSTACKITEM = 0x00000010,
+ HLNF_CREATENOHISTORY = 0x00000020
+ } HLNF;
+
+ typedef enum {
+ HLINKGETREF_DEFAULT = 0,
+ HLINKGETREF_ABSOLUTE = 1,
+ HLINKGETREF_RELATIVE = 2,
+ } HLINKGETREF;
+
+ typedef enum {
+ HLFNAMEF_DEFAULT = 0x00000000,
+ HLFNAMEF_TRYCACHE = 0x00000001,
+ HLFNAMEF_TRYPRETTYTARGET = 0x00000002,
+ HLFNAMEF_TRYFULLTARGET = 0x00000004,
+ HLFNAMEF_TRYWIN95SHORTCUT = 0x00000008
+ } HLFNAMEF;
+
+ typedef enum {
+ HLINKMISC_RELATIVE = 0x00000001,
+ } HLINKMISC;
+
+ typedef enum {
+ HLINKSETF_TARGET = 0x00000001,
+ HLINKSETF_LOCATION = 0x00000002
+ } HLINKSETF;
+
+ HRESULT SetHlinkSite(
+ [in, unique] IHlinkSite *pihlSite,
+ [in] DWORD dwSiteData);
+
+ HRESULT GetHlinkSite(
+ [out] IHlinkSite **ppihlSite,
+ [out] DWORD *pdwSiteData);
+
+ HRESULT SetMonikerReference(
+ [in] DWORD grfHLSETF,
+ [in, unique] IMoniker *pimkTarget,
+ [in, unique] LPCWSTR pwzLocation);
+
+ HRESULT GetMonikerReference(
+ [in] DWORD dwWhichRef,
+ [out] IMoniker **ppimkTarget,
+ [out] LPWSTR *ppwzLocation);
+
+ HRESULT SetStringReference(
+ [in] DWORD grfHLSETF,
+ [in, unique] LPCWSTR pwzTarget,
+ [in, unique] LPCWSTR pwzLocation);
+
+ HRESULT GetStringReference(
+ [in] DWORD dwWhichRef,
+ [out] LPWSTR *ppwzTarget,
+ [out] LPWSTR *ppwzLocation);
+
+ HRESULT SetFriendlyName(
+ [in, unique] LPCWSTR pwzFriendlyName);
+
+ HRESULT GetFriendlyName(
+ [in] DWORD grfHLFNAMEF,
+ [out] LPWSTR *ppwzFriendlyName);
+
+ HRESULT SetTargetFrameName(
+ [in, unique] LPCWSTR pwzTargetFrameName);
+
+ HRESULT GetTargetFrameName(
+ [out] LPWSTR *ppwzTargetFrameName);
+
+ HRESULT GetMiscStatus(
+ [out] DWORD *pdwStatus);
+
+ HRESULT Navigate(
+ [in] DWORD grfHLNF,
+ [in, unique] LPBC pibc,
+ [in, unique] IBindStatusCallback *pibsc,
+ [in, unique] IHlinkBrowseContext *pihlbc);
+
+ HRESULT SetAdditionalParams(
+ [in, unique] LPCWSTR pwzAdditionalParams);
+
+ HRESULT GetAdditionalParams(
+ [out] LPWSTR *ppwzAdditionalParams);
+}
+
+/*****************************************************************************
+ * IHlinkSite interface
+ */
+[
+ object,
+ uuid(79EAC9C2-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IHlinkSite: IUnknown
+{
+ typedef [unique] IHlinkSite *LPHLINKSITE;
+
+ typedef enum {
+ HLINKWHICHMK_CONTAINER = 1,
+ HLINKWHICHMK_BASE = 2,
+ } HLINKWHICHMK;
+
+ HRESULT QueryService(
+ [in] DWORD dwSiteData,
+ [in] REFGUID guidService,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppiunk);
+
+ HRESULT GetMoniker(
+ [in] DWORD dwSiteData,
+ [in] DWORD dwAssign,
+ [in] DWORD dwWhich,
+ [out] IMoniker **ppimk);
+
+ HRESULT ReadyToNavigate(
+ [in] DWORD dwSiteData,
+ [in] DWORD dwReserved);
+
+ HRESULT OnNavigationComplete(
+ [in] DWORD dwSiteData,
+ [in] DWORD dwreserved,
+ [in] HRESULT hrError,
+ [in, unique] LPCWSTR pwzError);
+}
+
+/*****************************************************************************
+ * IEnumHLITEM interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9C6-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IEnumHLITEM : IUnknown
+{
+ typedef [unique] IEnumHLITEM *LPENUMHLITEM;
+
+ typedef struct tagHLITEM {
+ ULONG uHLID;
+ LPWSTR pwzFriendlyName;
+ } HLITEM;
+ typedef [unique] HLITEM *LPHLITEM;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] HLITEM *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumHLITEM **ppienumhlitem);
+}
+
+/*****************************************************************************
+ * IHlinkBrowseContext interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9C7-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IHlinkBrowseContext : IUnknown
+{
+ typedef [unique] IHlinkBrowseContext *LPHLINKBROWSECONTEXT;
+
+ enum {
+ HLTB_DOCKEDLEFT = 0,
+ HLTB_DOCKEDTOP = 1,
+ HLTB_DOCKEDRIGHT = 2,
+ HLTB_DOCKEDBOTTOM = 3,
+ HLTB_FLOATING = 4
+ };
+
+ typedef struct _tagHLTBINFO {
+ ULONG uDockType;
+ RECT rcTbPos;
+ } HLTBINFO;
+
+ enum {
+ HLBWIF_HASFRAMEWNDINFO = 0x00000001,
+ HLBWIF_HASDOCWNDINFO = 0x00000002,
+ HLBWIF_FRAMEWNDMAXIMIZED = 0x00000004,
+ HLBWIF_DOCWNDMAXIMIZED = 0x00000008,
+ HLBWIF_HASWEBTOOLBARINFO = 0x00000010,
+ HLBWIF_WEBTOOLBARHIDDEN = 0x00000020
+ };
+
+ typedef struct _tagHLBWINFO {
+ ULONG cbSize;
+ DWORD grfHLBWIF;
+ RECT rcFramePos;
+ RECT rcDocPos;
+ HLTBINFO hltbinfo;
+ } HLBWINFO;
+
+ typedef [unique] HLBWINFO *LPHLBWINFO;
+
+ enum {
+ HLID_INVALID = 0x00000000,
+ HLID_PREVIOUS = 0xFFFFFFFF,
+ HLID_NEXT = 0xFFFFFFFE,
+ HLID_CURRENT = 0xFFFFFFFD,
+ HLID_STACKBOTTOM = 0xFFFFFFFC,
+ HLID_STACKTOP = 0xFFFFFFFB
+ };
+
+ enum {
+ HLQF_ISVALID = 0x00000001,
+ HLQF_ISCURRENT = 0x00000002
+ };
+
+ HRESULT Register(
+ [in] DWORD reserved,
+ [in, unique] IUnknown *piunk,
+ [in, unique] IMoniker *pimk,
+ [out] DWORD *pdwRegister);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetObject")
+cpp_quote("#endif")
+
+ HRESULT GetObject(
+ [in, unique] IMoniker *pimk,
+ [in] BOOL fBindIfRootRegistered,
+ [out] IUnknown **ppiunk);
+
+ HRESULT Revoke(
+ [in] DWORD dwRegister);
+
+ HRESULT SetBrowseWindowInfo(
+ [in, unique] HLBWINFO *phlbwi);
+
+ HRESULT GetBrowseWindowInfo(
+ [out] HLBWINFO *phlbwi);
+
+ HRESULT SetInitialHlink(
+ [in, unique] IMoniker * pimkTarget,
+ [in, unique] LPCWSTR pwzLocation,
+ [in, unique] LPCWSTR pwzFriendlyName);
+
+ HRESULT OnNavigateHlink(
+ [in] DWORD grfHLNF,
+ [in, unique] IMoniker *pimkTarget,
+ [in, unique] LPCWSTR pwzLocation,
+ [in, unique] LPCWSTR pwzFriendlyName,
+ [out] ULONG *puHLID);
+
+ HRESULT UpdateHlink(
+ [in] ULONG uHLID,
+ [in, unique] IMoniker *pimkTarget,
+ [in, unique] LPCWSTR pwzLocation,
+ [in, unique] LPCWSTR pwzFriendlyName);
+
+ HRESULT EnumNavigationStack(
+ [in] DWORD dwReserved,
+ [in] DWORD grfHLFNAMEF,
+ [out] IEnumHLITEM **ppienumhlitem);
+
+ HRESULT QueryHlink(
+ [in] DWORD grfHLQF,
+ [in] ULONG uHLID);
+
+ HRESULT GetHlink(
+ [in] ULONG uHLID,
+ [out] IHlink **ppihl);
+
+ HRESULT SetCurrentHlink(
+ [in] ULONG uHLID);
+
+ HRESULT Clone(
+ [in, unique] IUnknown *piunkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppiunkObj);
+
+ HRESULT Close(
+ [in] DWORD reserved);
+}
+
+
+/*****************************************************************************
+ * IHlinkTarget interface
+ */
+[
+ object,
+ uuid(79EAC9C4-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IHlinkTarget : IUnknown
+{
+ typedef [unique] IHlinkTarget *LPHLINKTARGET;
+
+ HRESULT SetBrowseContext(
+ [in, unique] IHlinkBrowseContext *pihlbc);
+
+ HRESULT GetBrowseContext(
+ [out] IHlinkBrowseContext **ppihlbc);
+
+ HRESULT Navigate(
+ [in] DWORD grfHLNF,
+ [in, unique] LPCWSTR pwzJumpLocation);
+
+ HRESULT GetMoniker(
+ [in,unique] LPCWSTR pwzLocation,
+ [in] DWORD dwAssign,
+ [out] IMoniker **ppimkLocation);
+
+ HRESULT GetFriendlyName(
+ [in,unique] LPCWSTR pwzLocation,
+ [out] LPWSTR *ppwzFriendlyName);
+}
+
+/*****************************************************************************
+ * IHlinkFrame interface
+ */
+[
+ object,
+ uuid(79eac9c5-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+
+interface IHlinkFrame : IUnknown
+{
+ typedef IHlinkFrame *LPHLINKFRAME;
+
+ HRESULT SetBrowseContext(
+ [in, unique] IHlinkBrowseContext * pihlbc);
+ HRESULT GetBrowseContext(
+ [out] IHlinkBrowseContext ** ppihlbc);
+ HRESULT Navigate(
+ [in] DWORD grfHLNF,
+ [in, unique] LPBC pbc,
+ [in, unique] IBindStatusCallback *pibsc,
+ [in, unique] IHlink *pihlNavigate);
+ HRESULT OnNavigate(
+ [in] DWORD grfHLNF,
+ [in, unique] IMoniker *pimkTarget,
+ [in, unique] LPCWSTR pwzLocation,
+ [in, unique] LPCWSTR pwzFriendlyName,
+ [in] DWORD dwreserved);
+ HRESULT UpdateHlink(
+ [in] ULONG uHLID,
+ [in, unique] IMoniker *pimkTarget,
+ [in, unique] LPCWSTR pwzLocation,
+ [in, unique] LPCWSTR pwzFriendlyName);
+}
+
+/*****************************************************************************
+ * IExtensionServices interface
+ */
+[
+ object,
+ uuid(79eac9cb-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+
+interface IExtensionServices: IUnknown
+{
+ typedef IExtensionServices *LPEXTENSIONSERVICES;
+
+ HRESULT SetAdditionalHeaders(
+ [in] LPCWSTR pwzAdditionalHeaders);
+
+ HRESULT SetAuthenticateData(
+ [in] HWND phwnd,
+ [in] LPCWSTR pwzUsername,
+ [in] LPCWSTR pwzPassword);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl
new file mode 100644
index 00000000..e51c9204
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiface.idl
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2006,2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "urlmon.idl";
+
+cpp_quote("#include <htiframe.h>")
+
+
+/*****************************************************************************
+ * ITargetFrame interface
+ */
+[
+ object,
+ uuid(d5f78c80-5252-11cf-90fa-00aa0042106e),
+ pointer_default(unique)
+]
+interface ITargetFrame: IUnknown
+{
+ typedef [unique] ITargetFrame *LPTARGETFRAME;
+
+ typedef enum {
+ NAVIGATEFRAME_FL_RECORD = 0x01,
+ NAVIGATEFRAME_FL_POST = 0x02,
+ NAVIGATEFRAME_FL_NO_DOC_CACHE = 0x04,
+ NAVIGATEFRAME_FL_NO_IMAGE_CACHE = 0x08,
+ NAVIGATEFRAME_FL_AUTH_FAIL_CACHE_OK = 0x10,
+ NAVIGATEFRAME_FL_SENDING_FROM_FORM = 0x20,
+ NAVIGATEFRAME_FL_REALLY_SENDING_FROM_FORM = 0x40
+ } NAVIGATEFRAME_FLAGS;
+
+ typedef struct tagNavigateData {
+ ULONG ulTarget;
+ ULONG ulURL;
+ ULONG ulRefURL;
+ ULONG ulPostData;
+ DWORD dwFlags;
+ } NAVIGATEDATA;
+
+ HRESULT SetFrameName([in] LPCWSTR pszFrameName);
+ HRESULT GetFrameName([out] LPWSTR *ppszFrameName);
+ HRESULT GetParentFrame([out] IUnknown **ppunkParent);
+
+ HRESULT FindFrame(
+ [in] LPCWSTR pszTargetName,
+ [in] IUnknown *ppunkContextFrame,
+ [in] DWORD dwFlags,
+ [out] IUnknown **ppunkTargetFrame);
+
+ HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc);
+ HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc);
+}
+
+/*****************************************************************************
+ * ITargetFramePriv interface
+ */
+[
+ object,
+ uuid(9216e421-2bf5-11d0-82b4-00a0c90c29c5),
+ pointer_default(unique)
+]
+interface ITargetFramePriv : IUnknown
+{
+ typedef [unique] ITargetFramePriv *LPTARGETFRAMEPRIV;
+
+ HRESULT FindFrameDownwards(
+ [in] LPCWSTR pszTargetName,
+ [in] DWORD dwFlags,
+ [out] IUnknown **ppunkTargetFrame);
+
+ HRESULT FindFrameInContext(
+ [in] LPCWSTR pszTargetName,
+ [in] IUnknown *punkContextFrame,
+ [in] DWORD dwFlags,
+ [out] IUnknown **ppunkTargetFrame);
+
+ HRESULT OnChildFrameActivate([in] IUnknown *pUnkChildFrame);
+ HRESULT OnChildFrameDeactivate([in] IUnknown *pUnkChildFrame);
+
+ HRESULT NavigateHack(
+ [in] DWORD grfHLNF,
+ [in, unique] LPBC pbc,
+ [in, unique] IBindStatusCallback *pibsc,
+ [in, unique] LPCWSTR pszTargetName,
+ [in] LPCWSTR pszUrl,
+ [in, unique] LPCWSTR pszLocation);
+
+ HRESULT FindBrowserByIndex(
+ [in] DWORD dwID,
+ [out] IUnknown **ppunkBrowser);
+}
+
+/*****************************************************************************
+ * ITargetFramePriv2 interface
+ */
+[
+ object,
+ uuid(b2c867e6-69d6-46f2-a611-ded9a4bd7fef),
+ pointer_default(unique)
+]
+interface ITargetFramePriv2 : ITargetFramePriv
+{
+ typedef [unique] ITargetFramePriv2 *LPTARGETFRAMEPRIV2;
+
+ HRESULT AggregatedNavigation2(
+ [in] DWORD grfHLNF,
+ [in, unique] LPBC pbc,
+ [in, unique] IBindStatusCallback *pibsc,
+ [in, unique] LPCWSTR pszTargetName,
+ [in] IUri *pUri,
+ [in, unique] LPCWSTR pszLocation);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl
new file mode 100644
index 00000000..5e73bbcd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/htiframe.idl
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2006,2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+/*****************************************************************************
+ * ITargetNotify interface
+ */
+[
+ object,
+ uuid(863a99a0-21bc-11d0-82b4-00a0c90c29c5),
+ pointer_default(unique)
+]
+interface ITargetNotify : IUnknown
+{
+ typedef [unique] ITargetNotify *LPTARGETNOTIFY;
+
+ HRESULT OnCreate(
+ [in] IUnknown *pUnkDestination,
+ [in] ULONG cbCookie);
+
+ HRESULT OnReuse([in] IUnknown *pUnkDestination);
+}
+
+/*****************************************************************************
+ * ITargetNotify2 interface
+ */
+[
+ object,
+ uuid(3050f6b1-98b5-11cf-bb82-00aa00bdce0b),
+ pointer_default(unique)
+]
+interface ITargetNotify2 : ITargetNotify
+{
+ typedef [unique] ITargetNotify2 *LPTARGETNOTIFY2;
+
+ HRESULT GetOptionString([in,out] BSTR *pbstrOptions);
+}
+
+/*****************************************************************************
+ * ITargetFrame2 interface
+ */
+[
+ object,
+ uuid(86d52e11-94a8-11d0-82af-00c04fd5ae38),
+ pointer_default(unique)
+]
+interface ITargetFrame2 : IUnknown
+{
+ typedef [unique] ITargetFrame2 *LPTARGETFRAME2;
+
+ typedef enum {
+ FINDFRAME_NONE = 0,
+ FINDFRAME_JUSTTESTEXISTENCE = 1,
+ FINDFRAME_INTERNAL = 0x80000000
+ } FINDFRAME_FLAGS;
+
+ typedef enum {
+ FRAMEOPTIONS_SCROLL_YES = 0x00000001,
+ FRAMEOPTIONS_SCROLL_NO = 0x00000002,
+ FRAMEOPTIONS_SCROLL_AUTO = 0x00000004,
+ FRAMEOPTIONS_NORESIZE = 0x00000008,
+ FRAMEOPTIONS_NO3DBORDER = 0x00000010,
+ FRAMEOPTIONS_DESKTOP = 0x00000020,
+ FRAMEOPTIONS_BROWSERBAND = 0x00000040
+ } FRAMEOPTIONS_FLAGS;
+
+ HRESULT SetFrameName([in] LPCWSTR pszFrameName);
+
+ HRESULT GetFrameName([out] LPWSTR *ppszFrameName);
+
+ HRESULT GetParentFrame([out] IUnknown **ppunkParent);
+
+ HRESULT SetFrameSrc([in] LPCWSTR pszFrameSrc);
+
+ HRESULT GetFrameSrc([out] LPWSTR *ppszFrameSrc);
+
+ HRESULT GetFramesContainer([out] IOleContainer **ppContainer);
+
+ HRESULT SetFrameOptions([in] DWORD dwFlags);
+
+ HRESULT GetFrameOptions([out] DWORD *pdwFlags);
+
+ HRESULT SetFrameMargins(
+ [in] DWORD dwWidth,
+ [in] DWORD dwHeight);
+
+ HRESULT GetFrameMargins(
+ [out] DWORD *pdwWidth,
+ [out] DWORD *pdwHeight);
+
+ HRESULT FindFrame(
+ [in,unique] LPCWSTR pszTargetName,
+ [in] DWORD dwFlags,
+ [out] IUnknown **ppunkTargetFrame);
+
+ HRESULT GetTargetAlias(
+ [in,unique] LPCWSTR pszTargetName,
+ [out] LPWSTR *ppszTargetAlias);
+}
+
+/*****************************************************************************
+ * ITargetContainer interface
+ */
+[
+ object,
+ uuid(7847ec01-2bec-11d0-82b4-00a0c90C29c5),
+ pointer_default(unique)
+]
+interface ITargetContainer : IUnknown
+{
+ typedef [unique] ITargetContainer *LPTARGETCONTAINER;
+
+ HRESULT GetFrameUrl([out] LPWSTR *ppszFrameSrc);
+
+ HRESULT GetFramesContainer([out] IOleContainer **ppContainer);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h
new file mode 100644
index 00000000..19128c75
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/htmlhelp.h
@@ -0,0 +1,461 @@
+/*
+ * Copyright 2004 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __HTMLHELP_H__
+#define __HTMLHELP_H__
+
+#define HH_DISPLAY_TOPIC 0x00
+#define HH_HELP_FINDER 0x00
+#define HH_DISPLAY_TOC 0x01
+#define HH_DISPLAY_INDEX 0x02
+#define HH_DISPLAY_SEARCH 0x03
+#define HH_SET_WIN_TYPE 0x04
+#define HH_GET_WIN_TYPE 0x05
+#define HH_GET_WIN_HANDLE 0x06
+#define HH_ENUM_INFO_TYPE 0x07
+#define HH_SET_INFO_TYPE 0x08
+#define HH_SYNC 0x09
+#define HH_RESERVED1 0x0A
+#define HH_RESERVED2 0x0B
+#define HH_RESERVED3 0x0C
+#define HH_KEYWORD_LOOKUP 0x0D
+#define HH_DISPLAY_TEXT_POPUP 0x0E
+#define HH_HELP_CONTEXT 0x0F
+#define HH_TP_HELP_CONTEXTMENU 0x10
+#define HH_TP_HELP_WM_HELP 0x11
+#define HH_CLOSE_ALL 0x12
+#define HH_ALINK_LOOKUP 0x13
+#define HH_GET_LAST_ERROR 0x14
+#define HH_ENUM_CATEGORY 0x15
+#define HH_ENUM_CATEGORY_IT 0x16
+#define HH_RESET_IT_FILTER 0x17
+#define HH_SET_INCLUSIVE_FILTER 0x18
+#define HH_SET_EXCLUSIVE_FILTER 0x19
+#define HH_INITIALIZE 0x1C
+#define HH_UNINITIALIZE 0x1D
+#define HH_SAFE_DISPLAY_TOPIC 0x20
+#define HH_PRETRANSLATEMESSAGE 0xFD
+#define HH_SET_GLOBAL_PROPERTY 0xFC
+
+#define HHWIN_PROP_TAB_AUTOHIDESHOW 0x00000001
+#define HHWIN_PROP_ONTOP 0x00000002
+#define HHWIN_PROP_NOTITLEBAR 0x00000004
+#define HHWIN_PROP_NODEF_STYLES 0x00000008
+#define HHWIN_PROP_NODEF_EXSTYLES 0x00000010
+#define HHWIN_PROP_TRI_PANE 0x00000020
+#define HHWIN_PROP_NOTB_TEXT 0x00000040
+#define HHWIN_PROP_POST_QUIT 0x00000080
+#define HHWIN_PROP_AUTO_SYNC 0x00000100
+#define HHWIN_PROP_TRACKING 0x00000200
+#define HHWIN_PROP_TAB_SEARCH 0x00000400
+#define HHWIN_PROP_TAB_HISTORY 0x00000800
+#define HHWIN_PROP_TAB_FAVORITES 0x00001000
+#define HHWIN_PROP_CHANGE_TITLE 0x00002000
+#define HHWIN_PROP_NAV_ONLY_WIN 0x00004000
+#define HHWIN_PROP_NO_TOOLBAR 0x00008000
+#define HHWIN_PROP_MENU 0x00010000
+#define HHWIN_PROP_TAB_ADVSEARCH 0x00020000
+#define HHWIN_PROP_USER_POS 0x00040000
+#define HHWIN_PROP_TAB_CUSTOM1 0x00080000
+#define HHWIN_PROP_TAB_CUSTOM2 0x00100000
+#define HHWIN_PROP_TAB_CUSTOM3 0x00200000
+#define HHWIN_PROP_TAB_CUSTOM4 0x00400000
+#define HHWIN_PROP_TAB_CUSTOM5 0x00800000
+#define HHWIN_PROP_TAB_CUSTOM6 0x01000000
+#define HHWIN_PROP_TAB_CUSTOM7 0x02000000
+#define HHWIN_PROP_TAB_CUSTOM8 0x04000000
+#define HHWIN_PROP_TAB_CUSTOM9 0x08000000
+#define HHWIN_TB_MARGIN 0x10000000
+
+#define HHWIN_PARAM_PROPERTIES 0x00000002
+#define HHWIN_PARAM_STYLES 0x00000004
+#define HHWIN_PARAM_EXSTYLES 0x00000008
+#define HHWIN_PARAM_RECT 0x00000010
+#define HHWIN_PARAM_NAV_WIDTH 0x00000020
+#define HHWIN_PARAM_SHOWSTATE 0x00000040
+#define HHWIN_PARAM_INFOTYPES 0x00000080
+#define HHWIN_PARAM_TB_FLAGS 0x00000100
+#define HHWIN_PARAM_EXPANSION 0x00000200
+#define HHWIN_PARAM_TABPOS 0x00000400
+#define HHWIN_PARAM_TABORDER 0x00000800
+#define HHWIN_PARAM_HISTORY_COUNT 0x00001000
+#define HHWIN_PARAM_CUR_TAB 0x00002000
+
+#define HHWIN_BUTTON_EXPAND 0x00000002
+#define HHWIN_BUTTON_BACK 0x00000004
+#define HHWIN_BUTTON_FORWARD 0x00000008
+#define HHWIN_BUTTON_STOP 0x00000010
+#define HHWIN_BUTTON_REFRESH 0x00000020
+#define HHWIN_BUTTON_HOME 0x00000040
+#define HHWIN_BUTTON_BROWSE_FWD 0x00000080
+#define HHWIN_BUTTON_BROWSE_BCK 0x00000100
+#define HHWIN_BUTTON_NOTES 0x00000200
+#define HHWIN_BUTTON_CONTENTS 0x00000400
+#define HHWIN_BUTTON_SYNC 0x00000800
+#define HHWIN_BUTTON_OPTIONS 0x00001000
+#define HHWIN_BUTTON_PRINT 0x00002000
+#define HHWIN_BUTTON_INDEX 0x00004000
+#define HHWIN_BUTTON_SEARCH 0x00008000
+#define HHWIN_BUTTON_HISTORY 0x00010000
+#define HHWIN_BUTTON_FAVORITES 0x00020000
+#define HHWIN_BUTTON_JUMP1 0x00040000
+#define HHWIN_BUTTON_JUMP2 0x00080000
+#define HHWIN_BUTTON_ZOOM 0x00100000
+#define HHWIN_BUTTON_TOC_NEXT 0x00200000
+#define HHWIN_BUTTON_TOC_PREV 0x00400000
+
+#define HHWIN_DEF_BUTTONS \
+ (HHWIN_BUTTON_EXPAND | HHWIN_BUTTON_BACK | HHWIN_BUTTON_OPTIONS | HHWIN_BUTTON_PRINT)
+
+#define IDTB_EXPAND 200
+#define IDTB_CONTRACT 201
+#define IDTB_STOP 202
+#define IDTB_REFRESH 203
+#define IDTB_BACK 204
+#define IDTB_HOME 205
+#define IDTB_SYNC 206
+#define IDTB_PRINT 207
+#define IDTB_OPTIONS 208
+#define IDTB_FORWARD 209
+#define IDTB_NOTES 210
+#define IDTB_BROWSE_FWD 211
+#define IDTB_BROWSE_BACK 212
+#define IDTB_CONTENTS 213
+#define IDTB_INDEX 214
+#define IDTB_SEARCH 215
+#define IDTB_HISTORY 216
+#define IDTB_FAVORITES 217
+#define IDTB_JUMP1 218
+#define IDTB_JUMP2 219
+#define IDTB_CUSTOMIZE 221
+#define IDTB_ZOOM 222
+#define IDTB_TOC_NEXT 223
+#define IDTB_TOC_PREV 224
+
+#define HHN_FIRST (0U-860U)
+#define HHN_LAST (0U-879U)
+#define HHN_NAVCOMPLETE HHN_FIRST
+#define HHN_TRACK (HHN_FIRST-1)
+#define HHN_WINDOW_CREATE (HHN_FIRST-2)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagHH_NOTIFY {
+ NMHDR hdr;
+ PCSTR pszurl;
+} HH_NOTIFY;
+
+typedef struct tagHH_POPUPA {
+ int cbStruct;
+ HINSTANCE hinst;
+ UINT idString;
+ LPCSTR pszText;
+ POINT pt;
+ COLORREF clrForeground;
+ COLORREF clrBackground;
+ RECT rcMargins;
+ LPCSTR pszFont;
+} HH_POPUPA;
+
+typedef struct tagHH_POPUPW {
+ int cbStruct;
+ HINSTANCE hinst;
+ UINT idString;
+ LPCWSTR pszText;
+ POINT pt;
+ COLORREF clrForeground;
+ COLORREF clrBackground;
+ RECT rcMargins;
+ LPCWSTR pszFont;
+} HH_POPUPW;
+
+DECL_WINELIB_TYPE_AW(HH_POPUP)
+
+typedef struct tagHH_ALINKA {
+ int cbStruct;
+ BOOL fReserved;
+ LPCSTR pszKeywords;
+ LPCSTR pszUrl;
+ LPCSTR pszMsgText;
+ LPCSTR pszMsgTitle;
+ LPCSTR pszWindow;
+ BOOL fIndexOnFail;
+} HH_ALINKA;
+
+typedef struct tagHH_ALINKW {
+ int cbStruct;
+ BOOL fReserved;
+ LPCWSTR pszKeywords;
+ LPCWSTR pszUrl;
+ LPCWSTR pszMsgText;
+ LPCWSTR pszMsgTitle;
+ LPCWSTR pszWindow;
+ BOOL fIndexOnFail;
+} HH_ALINKW;
+
+DECL_WINELIB_TYPE_AW(HH_ALINK)
+
+enum {
+ HHWIN_NAVTYPE_TOC,
+ HHWIN_NAVTYPE_INDEX,
+ HHWIN_NAVTYPE_SEARCH,
+ HHWIN_NAVTYPE_FAVORITES,
+ HHWIN_NAVTYPE_HISTORY,
+ HHWIN_NAVTYPE_AUTHOR,
+ HHWIN_NAVTYPE_CUSTOM_FIRST = 11
+};
+
+enum {
+ IT_INCLUSIVE,
+ IT_EXCLUSIVE,
+ IT_HIDDEN
+};
+
+typedef struct tagHH_ENUM_IT {
+ int cbStruct;
+ int iType;
+ LPCSTR pszCatName;
+ LPCSTR pszITName;
+ LPCSTR pszITDescription;
+} HH_ENUM_IT, *PHH_ENUM_IT;
+
+typedef struct tagHH_ENUM_CAT {
+ int cbStruct;
+ LPCSTR pszCatName;
+ LPCSTR pszCatDescription;
+} HH_ENUM_CAT, *PHH_ENUM_CAT;
+
+typedef struct tagHH_SET_INFOTYPE {
+ int cbStruct;
+ LPCSTR pszCatName;
+ LPCSTR pszInfoTypeName;
+} HH_SET_INFOTYPE;
+
+typedef DWORD HH_INFOTYPE, *PHH_INFOTYPE;
+
+enum {
+ HHWIN_NAVTAB_TOP,
+ HHWIN_NAVTAB_LEFT,
+ HHWIN_NAVTAB_BOTTOM
+};
+
+#define HH_MAX_TABS 19
+
+enum {
+ HH_TAB_CONTENTS,
+ HH_TAB_INDEX,
+ HH_TAB_SEARCH,
+ HH_TAB_FAVORITES,
+ HH_TAB_HISTORY,
+ HH_TAB_AUTHOR,
+ HH_TAB_CUSTOM_FIRST = 11,
+ HH_TAB_CUSTOM_LAST = HH_MAX_TABS
+};
+
+#define HH_MAX_TABS_CUSTOM (HH_TAB_CUSTOM_LAST-HH_TAB_CUSTOM_FIRST+1)
+#define HH_FTS_DEFAULT_PROXIMITY -1
+
+typedef struct tagHH_FTS_QUERYA {
+ int cbStruct;
+ BOOL fUniCodeStrings;
+ LPCSTR pszSearchQuery;
+ LONG iProximity;
+ BOOL fStemmedSearch;
+ BOOL fTitleOnly;
+ BOOL fExecute;
+ LPCSTR pszWindow;
+} HH_FTS_QUERYA;
+
+typedef struct tagHH_FTS_QUERYW {
+ int cbStruct;
+ BOOL fUniCodeStrings;
+ LPCWSTR pszSearchQuery;
+ LONG iProximity;
+ BOOL fStemmedSearch;
+ BOOL fTitleOnly;
+ BOOL fExecute;
+ LPCWSTR pszWindow;
+} HH_FTS_QUERYW;
+
+DECL_WINELIB_TYPE_AW(HH_FTS_QUERY)
+
+typedef struct tagHH_WINTYPEA {
+ int cbStruct;
+ BOOL fUniCodeStrings;
+ LPCSTR pszType;
+ DWORD fsValidMembers;
+ DWORD fsWinProperties;
+ LPCSTR pszCaption;
+ DWORD dwStyles;
+ DWORD dwExStyles;
+ RECT rcWindowPos;
+ int nShowState;
+ HWND hwndHelp;
+ HWND hwndCaller;
+ PHH_INFOTYPE paInfoTypes;
+ HWND hwndToolBar;
+ HWND hwndNavigation;
+ HWND hwndHTML;
+ int iNavWidth;
+ RECT rcHTML;
+ LPCSTR pszToc;
+ LPCSTR pszIndex;
+ LPCSTR pszFile;
+ LPCSTR pszHome;
+ DWORD fsToolBarFlags;
+ BOOL fNotExpanded;
+ int curNavType;
+ int tabpos;
+ int idNotify;
+ BYTE tabOrder[HH_MAX_TABS+1];
+ int cHistory;
+ LPCSTR pszJump1;
+ LPCSTR pszJump2;
+ LPCSTR pszUrlJump1;
+ LPCSTR pszUrlJump2;
+ RECT rcMinSize;
+ int cbInfoTypes;
+ LPCSTR pszCustomTabs;
+} HH_WINTYPEA, *PHH_WINTYPEA;
+
+typedef struct tagHH_WINTYPEW {
+ int cbStruct;
+ BOOL fUniCodeStrings;
+ LPCWSTR pszType;
+ DWORD fsValidMembers;
+ DWORD fsWinProperties;
+ LPCWSTR pszCaption;
+ DWORD dwStyles;
+ DWORD dwExStyles;
+ RECT rcWindowPos;
+ int nShowState;
+ HWND hwndHelp;
+ HWND hwndCaller;
+ PHH_INFOTYPE paInfoTypes;
+ HWND hwndToolBar;
+ HWND hwndNavigation;
+ HWND hwndHTML;
+ int iNavWidth;
+ RECT rcHTML;
+ LPCWSTR pszToc;
+ LPCWSTR pszIndex;
+ LPCWSTR pszFile;
+ LPCWSTR pszHome;
+ DWORD fsToolBarFlags;
+ BOOL fNotExpanded;
+ int curNavType;
+ int tabpos;
+ int idNotify;
+ BYTE tabOrder[HH_MAX_TABS+1];
+ int cHistory;
+ LPCWSTR pszJump1;
+ LPCWSTR pszJump2;
+ LPCWSTR pszUrlJump1;
+ LPCWSTR pszUrlJump2;
+ RECT rcMinSize;
+ int cbInfoTypes;
+ LPCWSTR pszCustomTabs;
+} HH_WINTYPEW, *PHH_WINTYPEW;
+
+DECL_WINELIB_TYPE_AW(HH_WINTYPE)
+
+enum {
+ HHACT_TAB_CONTENTS,
+ HHACT_TAB_INDEX,
+ HHACT_TAB_SEARCH,
+ HHACT_TAB_HISTORY,
+ HHACT_TAB_FAVORITES,
+ HHACT_EXPAND,
+ HHACT_CONTRACT,
+ HHACT_BACK,
+ HHACT_FORWARD,
+ HHACT_STOP,
+ HHACT_REFRESH,
+ HHACT_HOME,
+ HHACT_SYNC,
+ HHACT_OPTIONS,
+ HHACT_PRINT,
+ HHACT_HIGHLIGHT,
+ HHACT_CUSTOMIZE,
+ HHACT_JUMP1,
+ HHACT_JUMP2,
+ HHACT_ZOOM,
+ HHACT_TOC_NEXT,
+ HHACT_TOC_PREV,
+ HHACT_NOTES,
+ HHACT_LAST_ENUM
+};
+
+typedef struct tagHH_NTRACKA {
+ NMHDR hdr;
+ PCSTR pszCurUrl;
+ int idAction;
+ PHH_WINTYPEA phhWinType;
+} HH_NTRACKA;
+
+typedef struct tagHH_NTRACKW {
+ NMHDR hdr;
+ PCSTR pszCurUrl;
+ int idAction;
+ PHH_WINTYPEW phhWinType;
+} HH_NTRACKW;
+
+DECL_WINELIB_TYPE_AW(HH_NTRACK)
+
+HWND WINAPI HtmlHelpA(HWND,LPCSTR,UINT,DWORD_PTR);
+HWND WINAPI HtmlHelpW(HWND,LPCWSTR,UINT,DWORD_PTR);
+#define HtmlHelp WINELIB_NAME_AW(HtmlHelp)
+
+#define ATOM_HTMLHELP_API_ANSI (LPTSTR)14
+#define ATOM_HTMLHELP_API_UNICODE (LPTSTR)15
+
+typedef enum tagHH_GPROPID {
+ HH_GPROPID_SINGLETHREAD = 1,
+ HH_GPROPID_TOOLBAR_MARGIN = 2,
+ HH_GPROPID_UI_LANGUAGE = 3,
+ HH_GPROPID_CURRENT_SUBSET = 4,
+ HH_GPROPID_CONTENT_LANGUAGE = 5
+} HH_GPROPID;
+
+#ifdef __oaidl_h__
+
+typedef struct tagHH_GLOBAL_PROPERTY
+{
+ HH_GPROPID id;
+ VARIANT var;
+} HH_GLOBAL_PROPERTY ;
+
+#endif /* __oaidl_h__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HTMLHELP_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/http.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/http.h
new file mode 100644
index 00000000..4124e5ed
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/http.h
@@ -0,0 +1,75 @@
+/*
+ * HTTP Server API definitions
+ *
+ * Copyright (C) 2009 Andrey Turkin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HTTP_H
+#define __WINE_HTTP_H
+
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _HTTPAPI_VERSION
+{
+ USHORT HttpApiMajorVersion;
+ USHORT HttpApiMinorVersion;
+} HTTPAPI_VERSION, *PHTTPAPI_VERSION;
+
+#define HTTPAPI_VERSION_1 {1,0}
+#define HTTPAPI_VERSION_2 {2,0}
+
+/* HttpInitialize and HttpTerminate flags */
+#define HTTP_INITIALIZE_SERVER 0x00000001
+#define HTTP_INITIALIZE_CONFIG 0x00000002
+
+typedef enum _HTTP_SERVICE_CONFIG_ID
+{
+ HttpServiceConfigIPListenList,
+ HttpServiceConfigSSLCertInfo,
+ HttpServiceConfigUrlAclInfo,
+ HttpServiceConfigTimeout,
+ HttpServiceConfigMax
+} HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID;
+
+ULONG WINAPI HttpInitialize(HTTPAPI_VERSION,ULONG,PVOID);
+ULONG WINAPI HttpTerminate(ULONG,PVOID);
+
+ULONG WINAPI HttpAddUrl(HANDLE,PCWSTR,PVOID);
+ULONG WINAPI HttpCreateHttpHandle(PHANDLE,ULONG);
+ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);
+ULONG WINAPI HttpQueryServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,PVOID,ULONG,PULONG,LPOVERLAPPED);
+ULONG WINAPI HttpSetServiceConfiguration(HANDLE,HTTP_SERVICE_CONFIG_ID,PVOID,ULONG,LPOVERLAPPED);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_HTTP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl
new file mode 100644
index 00000000..d4d1ddd1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequest.idl
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2011 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "httprequestid.h"
+
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ uuid(662901fc-6951-4854-9eb2-d9a2570f2b2e),
+ helpstring("Microsoft WinHTTP Services, version 5.1"),
+ lcid(0x0000),
+ version(5.1)
+]
+library WinHttp {
+
+importlib ("stdole2.tlb");
+
+typedef [public] LONG HTTPREQUEST_PROXY_SETTING;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DEFAULT = 0x00000000;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PRECONFIG = 0x00000000;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_DIRECT = 0x00000001;
+const HTTPREQUEST_PROXY_SETTING HTTPREQUEST_PROXYSETTING_PROXY = 0x00000002;
+
+typedef [public] LONG HTTPREQUEST_SETCREDENTIALS_FLAGS;
+const HTTPREQUEST_SETCREDENTIALS_FLAGS HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0x00000000;
+const HTTPREQUEST_SETCREDENTIALS_FLAGS HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 0x00000001;
+
+typedef
+[uuid(12782009-fe90-4877-9730-e5e183669b19)]
+enum WinHttpRequestOption
+{
+ WinHttpRequestOption_UserAgentString,
+ WinHttpRequestOption_URL,
+ WinHttpRequestOption_URLCodePage,
+ WinHttpRequestOption_EscapePercentInURL,
+ WinHttpRequestOption_SslErrorIgnoreFlags,
+ WinHttpRequestOption_SelectCertificate,
+ WinHttpRequestOption_EnableRedirects,
+ WinHttpRequestOption_UrlEscapeDisable,
+ WinHttpRequestOption_UrlEscapeDisableQuery,
+ WinHttpRequestOption_SecureProtocols,
+ WinHttpRequestOption_EnableTracing,
+ WinHttpRequestOption_RevertImpersonationOverSsl,
+ WinHttpRequestOption_EnableHttpsToHttpRedirects,
+ WinHttpRequestOption_EnablePassportAuthentication,
+ WinHttpRequestOption_MaxAutomaticRedirects,
+ WinHttpRequestOption_MaxResponseHeaderSize,
+ WinHttpRequestOption_MaxResponseDrainSize,
+ WinHttpRequestOption_EnableHttp1_1,
+ WinHttpRequestOption_EnableCertificateRevocationCheck,
+ WinHttpRequestOption_RejectUserpwd
+} WinHttpRequestOption;
+
+typedef
+[uuid(9d8a6df8-13de-4b1f-a330-67c719d62514)]
+enum WinHttpRequestAutoLogonPolicy
+{
+ AutoLogonPolicy_Always,
+ AutoLogonPolicy_OnlyIfBypassProxy,
+ AutoLogonPolicy_Never
+} WinHttpRequestAutoLogonPolicy;
+
+[
+ object,
+ uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b),
+ odl,
+ dual,
+ oleautomation,
+ nonextensible,
+ pointer_default(unique)
+]
+interface IWinHttpRequest : IDispatch
+{
+ [id(DISPID_HTTPREQUEST_SETPROXY)]
+ HRESULT SetProxy(
+ [in] HTTPREQUEST_PROXY_SETTING proxy_setting,
+ [in, optional] VARIANT proxy_server,
+ [in, optional] VARIANT bypass_list);
+
+ [id(DISPID_HTTPREQUEST_SETCREDENTIALS)]
+ HRESULT SetCredentials(
+ [in] BSTR username,
+ [in] BSTR password,
+ [in] HTTPREQUEST_SETCREDENTIALS_FLAGS flags);
+
+ [id(DISPID_HTTPREQUEST_OPEN)]
+ HRESULT Open(
+ [in] BSTR method,
+ [in] BSTR url,
+ [in, optional] VARIANT async);
+
+ [id(DISPID_HTTPREQUEST_SETREQUESTHEADER)]
+ HRESULT SetRequestHeader(
+ [in] BSTR header,
+ [in] BSTR value);
+
+ [id(DISPID_HTTPREQUEST_GETRESPONSEHEADER)]
+ HRESULT GetResponseHeader(
+ [in] BSTR header,
+ [out, retval] BSTR *value);
+
+ [id(DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS)]
+ HRESULT GetAllResponseHeaders(
+ [out, retval] BSTR *headers);
+
+ [id(DISPID_HTTPREQUEST_SEND)]
+ HRESULT Send(
+ [in, optional] VARIANT body);
+
+ [propget, id(DISPID_HTTPREQUEST_STATUS)]
+ HRESULT Status(
+ [out, retval] LONG *status);
+
+ [propget, id(DISPID_HTTPREQUEST_STATUSTEXT)]
+ HRESULT StatusText(
+ [out, retval] BSTR *status);
+
+ [propget, id(DISPID_HTTPREQUEST_RESPONSETEXT)]
+ HRESULT ResponseText(
+ [out, retval] BSTR *body);
+
+ [propget, id(DISPID_HTTPREQUEST_RESPONSEBODY)]
+ HRESULT ResponseBody(
+ [out, retval] VARIANT *body);
+
+ [propget, id(DISPID_HTTPREQUEST_RESPONSESTREAM)]
+ HRESULT ResponseStream(
+ [out, retval] VARIANT *body);
+
+ [propget, id(DISPID_HTTPREQUEST_OPTION)]
+ HRESULT Option(
+ [in] WinHttpRequestOption option,
+ [out, retval] VARIANT *value);
+
+ [propput, id(DISPID_HTTPREQUEST_OPTION)]
+ HRESULT Option(
+ [in] WinHttpRequestOption option,
+ [in] VARIANT value);
+
+ [id(DISPID_HTTPREQUEST_WAITFORRESPONSE)]
+ HRESULT WaitForResponse(
+ [in, optional] VARIANT timeout,
+ [out, retval] VARIANT_BOOL *succeeded);
+
+ [id(DISPID_HTTPREQUEST_ABORT)]
+ HRESULT Abort();
+
+ [id(DISPID_HTTPREQUEST_SETTIMEOUTS)]
+ HRESULT SetTimeouts(
+ [in] LONG resolve_timeout,
+ [in] LONG connect_timeout,
+ [in] LONG send_timeout,
+ [in] LONG receive_timeout);
+
+ [id(DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE)]
+ HRESULT SetClientCertificate(
+ [in] BSTR certificate);
+
+ [id(DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY)]
+ HRESULT SetAutoLogonPolicy(
+ [in] WinHttpRequestAutoLogonPolicy policy);
+}
+[
+ helpstring("WinHttpRequest Component version 5.1"),
+ threading(apartment),
+ progid("WinHttp.WinHttpRequest.5.1"),
+ uuid(2087c2f4-2cef-4953-a8ab-66779b670495)
+]
+coclass WinHttpRequest { interface IWinHttpRequest; }
+
+} /* WinHttp */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h
new file mode 100644
index 00000000..95f20fce
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/httprequestid.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2011 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_HTTPREQUESTID_H
+#define __WINE_HTTPREQUESTID_H
+
+#define DISPID_HTTPREQUEST_BASE 1
+#define DISPID_HTTPREQUEST_OPEN (DISPID_HTTPREQUEST_BASE)
+#define DISPID_HTTPREQUEST_SETREQUESTHEADER (DISPID_HTTPREQUEST_BASE + 1)
+#define DISPID_HTTPREQUEST_GETRESPONSEHEADER (DISPID_HTTPREQUEST_BASE + 2)
+#define DISPID_HTTPREQUEST_GETALLRESPONSEHEADERS (DISPID_HTTPREQUEST_BASE + 3)
+#define DISPID_HTTPREQUEST_SEND (DISPID_HTTPREQUEST_BASE + 4)
+#define DISPID_HTTPREQUEST_OPTION (DISPID_HTTPREQUEST_BASE + 5)
+#define DISPID_HTTPREQUEST_STATUS (DISPID_HTTPREQUEST_BASE + 6)
+#define DISPID_HTTPREQUEST_STATUSTEXT (DISPID_HTTPREQUEST_BASE + 7)
+#define DISPID_HTTPREQUEST_RESPONSETEXT (DISPID_HTTPREQUEST_BASE + 8)
+#define DISPID_HTTPREQUEST_RESPONSEBODY (DISPID_HTTPREQUEST_BASE + 9)
+#define DISPID_HTTPREQUEST_RESPONSESTREAM (DISPID_HTTPREQUEST_BASE + 10)
+#define DISPID_HTTPREQUEST_ABORT (DISPID_HTTPREQUEST_BASE + 11)
+#define DISPID_HTTPREQUEST_SETPROXY (DISPID_HTTPREQUEST_BASE + 12)
+#define DISPID_HTTPREQUEST_SETCREDENTIALS (DISPID_HTTPREQUEST_BASE + 13)
+#define DISPID_HTTPREQUEST_WAITFORRESPONSE (DISPID_HTTPREQUEST_BASE + 14)
+#define DISPID_HTTPREQUEST_SETTIMEOUTS (DISPID_HTTPREQUEST_BASE + 15)
+#define DISPID_HTTPREQUEST_SETCLIENTCERTIFICATE (DISPID_HTTPREQUEST_BASE + 16)
+#define DISPID_HTTPREQUEST_SETAUTOLOGONPOLICY (DISPID_HTTPREQUEST_BASE + 17)
+
+#endif /* __WINE_HTTPREQUESTID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h
new file mode 100644
index 00000000..7370d025
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/i_cryptasn1tls.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_I_CRYPTASN1TLS_H
+#define __WINE_I_CRYPTASN1TLS_H
+
+typedef void *ASN1decoding_t;
+typedef void *ASN1encoding_t;
+typedef void *ASN1module_t;
+typedef DWORD HCRYPTASN1MODULE;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ASN1decoding_t WINAPI I_CryptGetAsn1Decoder(HCRYPTASN1MODULE);
+ASN1encoding_t WINAPI I_CryptGetAsn1Encoder(HCRYPTASN1MODULE);
+BOOL WINAPI I_CryptInstallAsn1Module(ASN1module_t, DWORD, void*);
+BOOL WINAPI I_CryptUninstallAsn1Module(HCRYPTASN1MODULE);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_I_CRYPTASN1TLS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl
new file mode 100644
index 00000000..7f478253
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iads.idl
@@ -0,0 +1,788 @@
+/*
+ * Copyright 2005 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+typedef enum
+{
+ ADS_RIGHT_DS_CREATE_CHILD = 0x00000001,
+ ADS_RIGHT_DS_DELETE_CHILD = 0x00000002,
+ ADS_RIGHT_ACTRL_DS_LIST = 0x00000004,
+ ADS_RIGHT_DS_SELF = 0x00000008,
+ ADS_RIGHT_DS_READ_PROP = 0x00000010,
+ ADS_RIGHT_DS_WRITE_PROP = 0x00000020,
+ ADS_RIGHT_DS_DELETE_TREE = 0x00000040,
+ ADS_RIGHT_DS_LIST_OBJECT = 0x00000080,
+ ADS_RIGHT_DS_CONTROL_ACCESS = 0x00000100,
+
+ ADS_RIGHT_DELETE = 0x00010000,
+ ADS_RIGHT_READ_CONTROL = 0x00020000,
+ ADS_RIGHT_WRITE_DAC = 0x00040000,
+ ADS_RIGHT_WRITE_OWNER = 0x00080000,
+ ADS_RIGHT_SYNCHRONIZE = 0x00100000,
+ ADS_RIGHT_ACCESS_SYSTEM_SECURITY = 0x00200000,
+
+ ADS_RIGHT_GENERIC_ALL = 0x10000000,
+ ADS_RIGHT_GENERIC_EXECUTE = 0x20000000,
+ ADS_RIGHT_GENERIC_WRITE = 0x40000000,
+ ADS_RIGHT_GENERIC_READ = 0x80000000
+} ADS_RIGHTS_ENUM;
+
+typedef enum
+{
+ ADS_SECURE_AUTHENTICATION = 0x1,
+ ADS_USE_ENCRYPTION = 0x2,
+ ADS_USE_SSL = 0x2,
+ ADS_READONLY_SERVER = 0x4,
+ ADS_PROMPT_CREDENTIALS = 0x8,
+ ADS_NO_AUTHENTICATION = 0x10,
+ ADS_FAST_BIND = 0x20,
+ ADS_USE_SIGNING = 0x40,
+ ADS_USE_SEALING = 0x80,
+ ADS_USE_DELEGATION = 0x100,
+ ADS_SERVER_BIND = 0x200,
+ ADS_NO_REFERRAL_CHASING = 0x400,
+ ADS_AUTH_RESERVED = 0x80000000
+} ADS_AUTHENTICATION_ENUM;
+
+typedef enum
+{
+ ADS_SEARCHPREF_ASYNCHRONOUS,
+ ADS_SEARCHPREF_DEREF_ALIASES,
+ ADS_SEARCHPREF_SIZE_LIMIT,
+ ADS_SEARCHPREF_TIME_LIMIT,
+ ADS_SEARCHPREF_ATTRIBTYPES_ONLY,
+ ADS_SEARCHPREF_SEARCH_SCOPE,
+ ADS_SEARCHPREF_TIMEOUT,
+ ADS_SEARCHPREF_PAGESIZE,
+ ADS_SEARCHPREF_PAGED_TIME_LIMIT,
+ ADS_SEARCHPREF_CHASE_REFERRALS,
+ ADS_SEARCHPREF_SORT_ON,
+ ADS_SEARCHPREF_CACHE_RESULTS,
+ ADS_SEARCHPREF_DIRSYNC,
+ ADS_SEARCHPREF_TOMBSTONE,
+ ADS_SEARCHPREF_VLV,
+ ADS_SEARCHPREF_ATTRIBUTE_QUERY,
+ ADS_SEARCHPREF_SECURITY_MASK,
+ ADS_SEARCHPREF_DIRSYNC_FLAG,
+ ADS_SEARCHPREF_EXTENDED_DN
+} ADS_SEARCHPREF_ENUM;
+
+typedef ADS_SEARCHPREF_ENUM *PADS_SEARCHPREF_INFO;
+
+typedef enum
+{
+ ADS_STATUS_S_OK,
+ ADS_STATUS_INVALID_SEARCHPREF,
+ ADS_STATUS_INVALID_SEARCHPREFVALUE
+} ADS_STATUSENUM;
+
+typedef enum
+{
+ ADSTYPE_INVALID,
+ ADSTYPE_DN_STRING,
+ ADSTYPE_CASE_EXACT_STRING,
+ ADSTYPE_CASE_IGNORE_STRING,
+ ADSTYPE_PRINTABLE_STRING,
+ ADSTYPE_NUMERIC_STRING,
+ ADSTYPE_BOOLEAN,
+ ADSTYPE_INTEGER,
+ ADSTYPE_OCTET_STRING,
+ ADSTYPE_UTC_TIME,
+ ADSTYPE_LARGE_INTEGER,
+ ADSTYPE_PROV_SPECIFIC,
+ ADSTYPE_OBJECT_CLASS,
+ ADSTYPE_CASEIGNORE_LIST,
+ ADSTYPE_OCTET_LIST,
+ ADSTYPE_PATH,
+ ADSTYPE_POSTALADDRESS,
+ ADSTYPE_TIMESTAMP,
+ ADSTYPE_BACKLINK,
+ ADSTYPE_TYPEDNAME,
+ ADSTYPE_HOLD,
+ ADSTYPE_NETADDRESS,
+ ADSTYPE_REPLICAPOINTER,
+ ADSTYPE_FAXNUMBER,
+ ADSTYPE_EMAIL,
+ ADSTYPE_NT_SECURITY_DESCRIPTOR,
+ ADSTYPE_UNKNOWN,
+ ADSTYPE_DN_WITH_BINARY,
+ ADSTYPE_DN_WITH_STRING
+} ADSTYPEENUM;
+
+typedef enum
+{
+ ADS_PASSWORD_ENCODE_REQUIRE_SSL,
+ ADS_PASSWORD_ENCODE_CLEAR
+} ADS_PASSWORD_ENCODING_ENUM;
+
+typedef struct _ADS_CASEIGNORE_LIST
+{
+ struct _ADS_CASEIGNORE_LIST *Next;
+ LPWSTR String;
+} ADS_CASEIGNORE_LIST;
+
+typedef struct _ADS_OCTET_LIST
+{
+ struct _ADS_OCTET_LIST *Next;
+ DWORD Length;
+ BYTE *Data;
+} ADS_OCTET_LIST;
+
+typedef struct
+{
+ DWORD Type;
+ LPWSTR VolumeName;
+ LPWSTR Path;
+} ADS_PATH, *PADS_PATH;
+
+typedef struct
+{
+ DWORD WholeSeconds;
+ DWORD EventID;
+} ADS_TIMESTAMP;
+
+
+typedef ADSTYPEENUM ADSTYPE;
+typedef LPWSTR ADS_DN_STRING;
+typedef LPWSTR *PADS_DN_STRING;
+typedef LPWSTR ADS_CASE_EXACT_STRING;
+typedef LPWSTR *PADS_CASE_EXACT_STRING;
+typedef LPWSTR ADS_CASE_IGNORE_STRING;
+typedef LPWSTR *PADS_CASE_IGNORE_STRING;
+typedef LPWSTR ADS_PRINTABLE_STRING;
+typedef LPWSTR *PADS_PRINTABLE_STRING;
+typedef LPWSTR ADS_NUMERIC_STRING;
+typedef LPWSTR *PADS_NUMERIC_STRING;
+typedef DWORD ADS_BOOLEAN;
+typedef DWORD *LPNDS_BOOLEAN;
+typedef DWORD ADS_INTEGER;
+typedef DWORD *PADS_INTEGER;
+typedef SYSTEMTIME ADS_UTC_TIME;
+typedef SYSTEMTIME *PADS_UTC_TIME;
+typedef LARGE_INTEGER ADS_LARGE_INTEGER;
+typedef LARGE_INTEGER *PADS_LARGE_INTEGER;
+typedef LPWSTR ADS_OBJECT_CLASS;
+typedef LPWSTR *PADS_OBJECT_CLASS;
+typedef struct _ADS_OCTET_LIST *PADS_OCTET_LIST;
+typedef struct _ADS_CASEIGNORE_LIST *PADS_CASEIGNORE_LIST;
+typedef ADS_STATUSENUM ADS_STATUS;
+typedef ADS_SEARCHPREF_ENUM ADS_SEARCHPREF;
+typedef HANDLE ADS_SEARCH_HANDLE;
+typedef HANDLE *PADS_SEARCH_HANDLE;
+
+
+typedef struct
+{
+ DWORD dwLength;
+ BYTE *lpValue;
+} ADS_OCTET_STRING;
+
+typedef struct
+{
+ DWORD dwLength;
+ BYTE *lpValue;
+} ADS_PROV_SPECIFIC;
+
+typedef struct
+{
+ LPWSTR PostalAddress[ 6 ];
+} ADS_POSTALADDRESS, *PADS_POSTALADDRESS;
+
+typedef struct
+{
+ LPWSTR ObjectName;
+ DWORD Level;
+ DWORD Interval;
+} ADS_TYPEDNAME, *PADS_TYPEDNAME;
+
+typedef struct
+{
+ DWORD RemoteID;
+ LPWSTR ObjectName;
+} ADS_BACKLINK;
+
+typedef struct
+{
+ LPWSTR ObjectName;
+ DWORD Amount;
+} ADS_HOLD;
+
+typedef struct
+{
+ DWORD AddressType;
+ DWORD AddressLength;
+ BYTE *Address;
+} ADS_NETADDRESS, *PADS_NETADDRESS;
+
+typedef struct
+{
+ LPWSTR ServerName;
+ DWORD ReplicaType;
+ DWORD ReplicaNumber;
+ DWORD Count;
+ PADS_NETADDRESS ReplicaAddressHints;
+} ADS_REPLICAPOINTER, *PADS_REPLICAPOINTER;
+
+typedef struct
+{
+ LPWSTR TelephoneNumber;
+ DWORD NumberOfBits;
+ BYTE *Parameters;
+} ADS_FAXNUMBER, *PADS_FAXNUMBER;
+
+
+typedef struct
+{
+ LPWSTR Address;
+ DWORD Type;
+} ADS_EMAIL, *PADS_EMAIL;
+
+typedef struct
+{
+ DWORD dwLength;
+ BYTE *lpValue;
+} ADS_NT_SECURITY_DESCRIPTOR;
+
+typedef struct
+{
+ DWORD dwLength;
+ BYTE *lpBinaryValue;
+ LPWSTR pszDNString;
+} ADS_DN_WITH_BINARY, *PADS_DN_WITH_BINARY;
+
+typedef struct
+{
+ LPWSTR pszStringValue;
+ LPWSTR pszDNString;
+} ADS_DN_WITH_STRING, *PADS_DN_WITH_STRING;
+
+typedef struct _adsvalue
+{
+ ADSTYPE dwType;
+ union
+ {
+ ADS_DN_STRING DNString;
+ ADS_CASE_EXACT_STRING CaseExactString;
+ ADS_CASE_IGNORE_STRING CaseIgnoreString;
+ ADS_PRINTABLE_STRING PrintableString;
+ ADS_NUMERIC_STRING NumericString;
+ ADS_BOOLEAN Boolean;
+ ADS_INTEGER Integer;
+ ADS_OCTET_STRING OctetString;
+ ADS_UTC_TIME UTCTime;
+ ADS_LARGE_INTEGER LargeInteger;
+ ADS_OBJECT_CLASS ClassName;
+ ADS_PROV_SPECIFIC ProviderSpecific;
+ PADS_CASEIGNORE_LIST pCaseIgnoreList;
+ PADS_OCTET_LIST pOctetList;
+ PADS_PATH pPath;
+ PADS_POSTALADDRESS pPostalAddress;
+ ADS_TIMESTAMP Timestamp;
+ ADS_BACKLINK BackLink;
+ PADS_TYPEDNAME pTypedName;
+ ADS_HOLD Hold;
+ PADS_NETADDRESS pNetAddress;
+ PADS_REPLICAPOINTER pReplicaPointer;
+ PADS_FAXNUMBER pFaxNumber;
+ ADS_EMAIL Email;
+ ADS_NT_SECURITY_DESCRIPTOR SecurityDescriptor;
+ PADS_DN_WITH_BINARY pDNWithBinary;
+ PADS_DN_WITH_STRING pDNWithString;
+ };
+} ADSVALUE, *PADSVALUE;
+
+typedef struct ads_searchpref_info
+{
+ ADS_SEARCHPREF dwSearchPref;
+ ADSVALUE vValue;
+ ADS_STATUS dwStatus;
+} ADS_SEARCHPREF_INFO;
+
+typedef struct ads_search_column
+{
+ LPWSTR pszAttrName;
+ ADSTYPE dwADsType;
+ PADSVALUE pADsValues;
+ DWORD dwNumValues;
+ HANDLE hReserved;
+} ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN;
+
+/*****************************************************************************
+ * IADsContainer interface
+ */
+[
+ object,
+ uuid(001677d0-fd16-11ce-abc4-02608c9e7553)
+]
+interface IADsContainer: IDispatch
+{
+ [propget] HRESULT Count(
+ [out, retval] long *retval);
+ [propget, restricted] HRESULT _NewEnum(
+ [out, retval] IUnknown **retval);
+ [propget] HRESULT Filter(
+ [out, retval] VARIANT *pvFilter);
+ [propput] HRESULT Filter(
+ [in] VARIANT vFilter);
+ [propget] HRESULT Hints(
+ [out, retval] VARIANT *pvHints);
+ [propput] HRESULT Hints(
+ [in] VARIANT vHints);
+ HRESULT GetObject(
+ [in] BSTR bstrClassName,
+ [in] BSTR bstrRelativeName,
+ [out, retval] IDispatch **ppObject);
+ HRESULT Create(
+ [in] BSTR bstrClassName,
+ [in] BSTR bstrRelativeName,
+ [out, retval] IDispatch **ppObject);
+ HRESULT Delete(
+ [in] BSTR bstrClassName,
+ [in] BSTR bstrRelativeName);
+ HRESULT CopyHere(
+ [in] BSTR bstrSourceName,
+ [in] BSTR bstrNewName,
+ [out, retval] IDispatch **ppObject);
+ HRESULT MoveHere(
+ [in] BSTR bstrSourceName,
+ [in] BSTR bstrNewName,
+ [out, retval] IDispatch **ppObject);
+}
+
+/*****************************************************************************
+ * IADs interface
+ */
+[
+ odl,
+ uuid(FD8256D0-FD15-11CE-ABC4-02608C9E7553),
+ dual,
+ oleautomation
+]
+interface IADs : IDispatch
+{
+ [id(0x00000002), propget]
+ HRESULT Name([out, retval] BSTR* retval);
+
+ [id(0x00000003), propget]
+ HRESULT Class([out, retval] BSTR* retval);
+
+ [id(0x00000004), propget]
+ HRESULT GUID([out, retval] BSTR* retval);
+
+ [id(0x00000005), propget]
+ HRESULT ADsPath([out, retval] BSTR* retval);
+
+ [id(0x00000006), propget]
+ HRESULT Parent([out, retval] BSTR* retval);
+
+ [id(0x00000007), propget]
+ HRESULT Schema([out, retval] BSTR* retval);
+
+ [id(0x00000008)]
+ HRESULT GetInfo();
+
+ [id(0x00000009)]
+ HRESULT SetInfo();
+
+ [id(0x0000000a)]
+ HRESULT Get([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
+
+ [id(0x0000000b)]
+ HRESULT Put([in] BSTR bstrName, [in] VARIANT vProp);
+
+ [id(0x0000000c)]
+ HRESULT GetEx([in] BSTR bstrName, [out, retval] VARIANT* pvProp);
+
+ [id(0x0000000d)]
+ HRESULT PutEx([in] long lnControlCode, [in] BSTR bstrName, [in] VARIANT vProp);
+
+ [id(0x0000000e)]
+ HRESULT GetInfoEx( [in] VARIANT vProperties, [in] long lnReserved);
+};
+
+/*****************************************************************************
+ * IADsMembers interface
+ */
+[
+ odl,
+ uuid(451A0030-72EC-11CF-B03B-00AA006E0975),
+ dual,
+ oleautomation
+]
+interface IADsMembers : IDispatch
+{
+ [id(0x00000002), propget]
+ HRESULT Count([out, retval] long* plCount);
+
+ [id(0xfffffffc), propget]
+ HRESULT _NewEnum([out, retval] IUnknown** ppEnumerator);
+
+ [id(0x00000003), propget]
+ HRESULT Filter([out, retval] VARIANT* pvFilter);
+
+ [id(0x00000003), propput]
+ HRESULT Filter([in] VARIANT pvFilter);
+};
+
+/*****************************************************************************
+ * IADsGroup interface
+ */
+[
+ odl,
+ uuid(27636B00-410F-11CF-B1FF-02608C9E7553),
+ dual,
+ oleautomation
+]
+interface IADsGroup : IADs {
+ [id(0x0000000f), propget]
+ HRESULT Description([out, retval] BSTR* retval);
+
+ [id(0x0000000f), propput]
+ HRESULT Description([in] BSTR retval);
+
+ [id(0x00000010)]
+ HRESULT Members([out, retval] IADsMembers** ppMembers);
+
+ [id(0x00000011)]
+ HRESULT IsMember([in] BSTR bstrMember, [out, retval] VARIANT_BOOL* bMember);
+
+ [id(0x00000012)]
+ HRESULT Add([in] BSTR bstrNewItem);
+
+ [id(0x00000013)]
+ HRESULT Remove([in] BSTR bstrItemToBeRemoved);
+};
+
+/*****************************************************************************
+ * IADsUser interface
+ */
+[
+ odl,
+ uuid(3E37E320-17E2-11CF-ABC4-02608C9E7553),
+ dual,
+ oleautomation
+]
+interface IADsUser : IADs
+{
+ [id(0x00000035), propget]
+ HRESULT BadLoginAddress([out, retval] BSTR* retval);
+
+ [id(0x00000036), propget]
+ HRESULT BadLoginCount([out, retval] long* retval);
+
+ [id(0x00000038), propget]
+ HRESULT LastLogin([out, retval] DATE* retval);
+
+ [id(0x00000039), propget]
+ HRESULT LastLogoff([out, retval] DATE* retval);
+
+ [id(0x0000003a), propget]
+ HRESULT LastFailedLogin([out, retval] DATE* retval);
+
+ [id(0x0000003b), propget]
+ HRESULT PasswordLastChanged([out, retval] DATE* retval);
+
+ [id(0x0000000f), propget]
+ HRESULT Description([out, retval] BSTR* retval);
+
+ [id(0x0000000f), propput]
+ HRESULT Description([in] BSTR retval);
+
+ [id(0x00000013), propget]
+ HRESULT Division([out, retval] BSTR* retval);
+
+ [id(0x00000013), propput]
+ HRESULT Division([in] BSTR retval);
+
+ [id(0x0000007a), propget]
+ HRESULT Department([out, retval] BSTR* retval);
+
+ [id(0x0000007a), propput]
+ HRESULT Department([in] BSTR retval);
+
+ [id(0x00000014), propget]
+ HRESULT EmployeeID([out, retval] BSTR* retval);
+
+ [id(0x00000014), propput]
+ HRESULT EmployeeID([in] BSTR retval);
+
+ [id(0x00000017), propget]
+ HRESULT FullName([out, retval] BSTR* retval);
+
+ [id(0x00000017), propput]
+ HRESULT FullName([in] BSTR retval);
+
+ [id(0x00000016), propget]
+ HRESULT FirstName([out, retval] BSTR* retval);
+
+ [id(0x00000016), propput]
+ HRESULT FirstName([in] BSTR retval);
+
+ [id(0x00000019), propget]
+ HRESULT LastName([out, retval] BSTR* retval);
+
+ [id(0x00000019), propput]
+ HRESULT LastName([in] BSTR retval);
+
+ [id(0x0000001b), propget]
+ HRESULT OtherName([out, retval] BSTR* retval);
+
+ [id(0x0000001b), propput]
+ HRESULT OtherName([in] BSTR retval);
+
+ [id(0x00000072), propget]
+ HRESULT NamePrefix([out, retval] BSTR* retval);
+
+ [id(0x00000072), propput]
+ HRESULT NamePrefix([in] BSTR retval);
+
+ [id(0x00000073), propget]
+ HRESULT NameSuffix([out, retval] BSTR* retval);
+
+ [id(0x00000073), propput]
+ HRESULT NameSuffix([in] BSTR retval);
+
+ [id(0x00000024), propget]
+ HRESULT Title([out, retval] BSTR* retval);
+
+ [id(0x00000024), propput]
+ HRESULT Title([in] BSTR retval);
+
+ [id(0x0000001a), propget]
+ HRESULT Manager([out, retval] BSTR* retval);
+
+ [id(0x0000001a), propput]
+ HRESULT Manager([in] BSTR retval);
+
+ [id(0x00000020), propget]
+ HRESULT TelephoneHome([out, retval] VARIANT* retval);
+
+ [id(0x00000020), propput]
+ HRESULT TelephoneHome([in] VARIANT retval);
+
+ [id(0x00000021), propget]
+ HRESULT TelephoneMobile([out, retval] VARIANT* retval);
+
+ [id(0x00000021), propput]
+ HRESULT TelephoneMobile([in] VARIANT retval);
+
+ [id(0x00000022), propget]
+ HRESULT TelephoneNumber([out, retval] VARIANT* retval);
+
+ [id(0x00000022), propput]
+ HRESULT TelephoneNumber([in] VARIANT retval);
+
+ [id(0x00000011), propget]
+ HRESULT TelephonePager([out, retval] VARIANT* retval);
+
+ [id(0x00000011), propput]
+ HRESULT TelephonePager([in] VARIANT retval);
+
+ [id(0x00000010), propget]
+ HRESULT FaxNumber([out, retval] VARIANT* retval);
+
+ [id(0x00000010), propput]
+ HRESULT FaxNumber([in] VARIANT retval);
+
+ [id(0x0000001c), propget]
+ HRESULT OfficeLocations([out, retval] VARIANT* retval);
+
+ [id(0x0000001c), propput]
+ HRESULT OfficeLocations([in] VARIANT retval);
+
+ [id(0x0000001e), propget]
+ HRESULT PostalAddresses([out, retval] VARIANT* retval);
+
+ [id(0x0000001e), propput]
+ HRESULT PostalAddresses([in] VARIANT retval);
+
+ [id(0x0000001f), propget]
+ HRESULT PostalCodes([out, retval] VARIANT* retval);
+
+ [id(0x0000001f), propput]
+ HRESULT PostalCodes([in] VARIANT retval);
+
+ [id(0x00000075), propget]
+ HRESULT SeeAlso([out, retval] VARIANT* retval);
+
+ [id(0x00000075), propput]
+ HRESULT SeeAlso([in] VARIANT retval);
+
+ [id(0x00000025), propget]
+ HRESULT AccountDisabled([out, retval] VARIANT_BOOL* retval);
+
+ [id(0x00000025), propput]
+ HRESULT AccountDisabled([in] VARIANT_BOOL retval);
+
+ [id(0x00000026), propget]
+ HRESULT AccountExpirationDate([out, retval] DATE* retval);
+
+ [id(0x00000026), propput]
+ HRESULT AccountExpirationDate([in] DATE retval);
+
+ [id(0x00000029), propget]
+ HRESULT GraceLoginsAllowed([out, retval] long* retval);
+
+ [id(0x00000029), propput]
+ HRESULT GraceLoginsAllowed([in] long retval);
+
+ [id(0x0000002a), propget]
+ HRESULT GraceLoginsRemaining([out, retval] long* retval);
+
+ [id(0x0000002a), propput]
+ HRESULT GraceLoginsRemaining([in] long retval);
+
+ [id(0x0000002b), propget]
+ HRESULT IsAccountLocked([out, retval] VARIANT_BOOL* retval);
+
+ [id(0x0000002b), propput]
+ HRESULT IsAccountLocked([in] VARIANT_BOOL retval);
+
+ [id(0x0000002d), propget]
+ HRESULT LoginHours([out, retval] VARIANT* retval);
+
+ [id(0x0000002d), propput]
+ HRESULT LoginHours([in] VARIANT retval);
+
+ [id(0x0000002e), propget]
+ HRESULT LoginWorkstations([out, retval] VARIANT* retval);
+
+ [id(0x0000002e), propput]
+ HRESULT LoginWorkstations([in] VARIANT retval);
+
+ [id(0x0000002f), propget]
+ HRESULT MaxLogins([out, retval] long* retval);
+
+ [id(0x0000002f), propput]
+ HRESULT MaxLogins([in] long retval);
+
+ [id(0x00000030), propget]
+ HRESULT MaxStorage([out, retval] long* retval);
+
+ [id(0x00000030), propput]
+ HRESULT MaxStorage([in] long retval);
+
+ [id(0x00000031), propget]
+ HRESULT PasswordExpirationDate([out, retval] DATE* retval);
+
+ [id(0x00000031), propput]
+ HRESULT PasswordExpirationDate([in] DATE retval);
+
+ [id(0x00000032), propget]
+ HRESULT PasswordMinimumLength([out, retval] long* retval);
+
+ [id(0x00000032), propput]
+ HRESULT PasswordMinimumLength([in] long retval);
+
+ [id(0x00000033), propget]
+ HRESULT PasswordRequired([out, retval] VARIANT_BOOL* retval);
+
+ [id(0x00000033), propput]
+ HRESULT PasswordRequired([in] VARIANT_BOOL retval);
+
+ [id(0x00000034), propget]
+ HRESULT RequireUniquePassword([out, retval] VARIANT_BOOL* retval);
+
+ [id(0x00000034), propput]
+ HRESULT RequireUniquePassword([in] VARIANT_BOOL retval);
+
+ [id(0x0000003c), propget]
+ HRESULT EmailAddress([out, retval] BSTR* retval);
+
+ [id(0x0000003c), propput]
+ HRESULT EmailAddress([in] BSTR retval);
+
+ [id(0x0000003d), propget]
+ HRESULT HomeDirectory([out, retval] BSTR* retval);
+
+ [id(0x0000003d), propput]
+ HRESULT HomeDirectory([in] BSTR retval);
+
+ [id(0x0000003e), propget]
+ HRESULT Languages([out, retval] VARIANT* retval);
+
+ [id(0x0000003e), propput]
+ HRESULT Languages([in] VARIANT retval);
+
+ [id(0x0000003f), propget]
+ HRESULT Profile([out, retval] BSTR* retval);
+
+ [id(0x0000003f), propput]
+ HRESULT Profile([in] BSTR retval);
+
+ [id(0x00000040), propget]
+ HRESULT LoginScript([out, retval] BSTR* retval);
+
+ [id(0x00000040), propput]
+ HRESULT LoginScript([in] BSTR retval);
+
+ [id(0x00000041), propget]
+ HRESULT Picture([out, retval] VARIANT* retval);
+
+ [id(0x00000041), propput]
+ HRESULT Picture([in] VARIANT retval);
+
+ [id(0x00000078), propget]
+ HRESULT HomePage([out, retval] BSTR* retval);
+
+ [id(0x00000078), propput]
+ HRESULT HomePage([in] BSTR retval);
+
+ [id(0x00000042)]
+ HRESULT Groups([out, retval] IADsMembers** ppGroups);
+
+ [id(0x00000043)]
+ HRESULT SetPassword([in] BSTR NewPassword);
+
+ [id(0x00000044)]
+ HRESULT ChangePassword([in] BSTR bstrOldPassword, [in] BSTR bstrNewPassword);
+};
+
+/*****************************************************************************
+ * IDirectorySearch interface
+ */
+[
+ odl,
+ local,
+ uuid(109BA8EC-92F0-11D0-A790-00C04FD8D5A8)
+]
+interface IDirectorySearch : IUnknown
+{
+ HRESULT SetSearchPreference([in] PADS_SEARCHPREF_INFO pSearchPrefs, [in] DWORD dwNumPrefs);
+ HRESULT ExecuteSearch([in] LPWSTR pszSearchFilter, [in] LPWSTR* pAttributeNames,
+ [in] DWORD dwNumberAttributes, [out] PADS_SEARCH_HANDLE phSearchResult);
+ HRESULT AbandonSearch([in] ADS_SEARCH_HANDLE phSearchResult);
+ HRESULT GetFirstRow([in] ADS_SEARCH_HANDLE hSearchResult);
+ HRESULT GetNextRow([in] ADS_SEARCH_HANDLE hSearchResult);
+ HRESULT GetPreviousRow([in] ADS_SEARCH_HANDLE hSearchResult);
+ HRESULT GetNextColumnName([in] ADS_SEARCH_HANDLE hSearchHandle, [out] LPWSTR* ppszColumnName);
+ HRESULT GetColumn( [in] ADS_SEARCH_HANDLE hSearchResult, [in] LPWSTR szColumnName,
+ [out] PADS_SEARCH_COLUMN pSearchColumn);
+ HRESULT FreeColumn([in] PADS_SEARCH_COLUMN pSearchColumn);
+ HRESULT CloseSearchHandle([in] ADS_SEARCH_HANDLE hSearchResult);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl
new file mode 100644
index 00000000..8a6c8551
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/icftypes.idl
@@ -0,0 +1,78 @@
+/*
+ * Types for the ICF api
+ *
+ * Copyright 2007 Jeff Latimer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+typedef enum NET_FW_PROFILE_TYPE_
+{
+ NET_FW_PROFILE_DOMAIN,
+ NET_FW_PROFILE_STANDARD,
+ NET_FW_PROFILE_CURRENT,
+ NET_FW_PROFILE_TYPE_MAX
+} NET_FW_PROFILE_TYPE;
+
+typedef enum NET_FW_IP_VERSION_
+{
+ NET_FW_IP_VERSION_V4,
+ NET_FW_IP_VERSION_V6,
+ NET_FW_IP_VERSION_ANY,
+ NET_FW_IP_VERSION_MAX
+} NET_FW_IP_VERSION;
+
+typedef enum NET_FW_POLICY_TYPE_
+{
+ NET_FW_POLICY_GROUP,
+ NET_FW_POLICY_LOCAL,
+ NET_FW_POLICY_EFFECTIVE,
+ NET_FW_POLICY_TYPE_MAX
+} NET_FW_POLICY_TYPE;
+
+typedef enum NET_FW_SCOPE_
+{
+ NET_FW_SCOPE_ALL,
+ NET_FW_SCOPE_LOCAL_SUBNET,
+ NET_FW_SCOPE_CUSTOM,
+ NET_FW_SCOPE_MAX
+} NET_FW_SCOPE;
+
+typedef enum NET_FW_SERVICE_TYPE_
+{
+ NET_FW_SERVICE_FILE_AND_PRINT,
+ NET_FW_SERVICE_UPNP,
+ NET_FW_SERVICE_REMOTE_DESKTOP,
+ NET_FW_SERVICE_NONE,
+ NET_FW_SERVICE_TYPE_MAX
+} NET_FW_SERVICE_TYPE;
+
+typedef enum NET_FW_IP_PROTOCOL_
+{
+ NET_FW_IP_PROTOCOL_TCP = 6,
+ NET_FW_IP_PROTOCOL_UDP = 17
+} NET_FW_IP_PROTOCOL;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h
new file mode 100644
index 00000000..d50c6159
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/icm.h
@@ -0,0 +1,445 @@
+/*
+ * Copyright 2004 (C) Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ICM_H
+#define __WINE_ICM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef HANDLE HPROFILE;
+typedef HPROFILE *PHPROFILE;
+typedef HANDLE HTRANSFORM;
+
+typedef DWORD TAGTYPE, *PTAGTYPE, *LPTAGTYPE;
+
+typedef char COLOR_NAME[32];
+typedef COLOR_NAME *PCOLOR_NAME, *LPCOLOR_NAME;
+
+typedef struct tagNAMED_PROFILE_INFO
+{
+ DWORD dwFlags;
+ DWORD dwCount;
+ DWORD dwCountDevCoordinates;
+ COLOR_NAME szPrefix;
+ COLOR_NAME szSuffix;
+} NAMED_PROFILE_INFO, *PNAMED_PROFILE_INFO, *LPNAMED_PROFILE_INFO;
+
+#define MAX_COLOR_CHANNELS 8
+
+struct GRAYCOLOR
+{
+ WORD gray;
+};
+
+struct RGBCOLOR
+{
+ WORD red;
+ WORD green;
+ WORD blue;
+};
+
+struct CMYKCOLOR
+{
+ WORD cyan;
+ WORD magenta;
+ WORD yellow;
+ WORD black;
+};
+
+struct XYZCOLOR
+{
+ WORD X;
+ WORD Y;
+ WORD Z;
+};
+
+struct YxyCOLOR
+{
+ WORD Y;
+ WORD x;
+ WORD y;
+};
+
+struct LabCOLOR
+{
+ WORD L;
+ WORD a;
+ WORD b;
+};
+
+struct GENERIC3CHANNEL
+{
+ WORD ch1;
+ WORD ch2;
+ WORD ch3;
+};
+
+struct NAMEDCOLOR
+{
+ DWORD dwIndex;
+};
+
+struct HiFiCOLOR
+{
+ BYTE channel[MAX_COLOR_CHANNELS];
+};
+
+typedef union tagCOLOR
+{
+ struct GRAYCOLOR gray;
+ struct RGBCOLOR rgb;
+ struct CMYKCOLOR cmyk;
+ struct XYZCOLOR XYZ;
+ struct YxyCOLOR Yxy;
+ struct LabCOLOR Lab;
+ struct GENERIC3CHANNEL gen3ch;
+ struct NAMEDCOLOR named;
+ struct HiFiCOLOR hifi;
+ struct
+ {
+ DWORD reserved1;
+ VOID *reserved2;
+ } DUMMYSTRUCTNAME;
+} COLOR, *PCOLOR, *LPCOLOR;
+
+typedef enum
+{
+ COLOR_GRAY = 1,
+ COLOR_RGB,
+ COLOR_XYZ,
+ COLOR_Yxy,
+ COLOR_Lab,
+ COLOR_3_CHANNEL,
+ COLOR_CMYK,
+ COLOR_5_CHANNEL,
+ COLOR_6_CHANNEL,
+ COLOR_7_CHANNEL,
+ COLOR_8_CHANNEL,
+ COLOR_NAMED,
+} COLORTYPE, *PCOLORTYPE, *LPCOLORTYPE;
+
+typedef enum
+{
+ BM_x555RGB = 0x00,
+ BM_565RGB = 0x01,
+ BM_RGBTRIPLETS = 0x02,
+ BM_BGRTRIPLETS = 0x04,
+ BM_xRGBQUADS = 0x08,
+ BM_10b_RGB = 0x09,
+ BM_16b_RGB = 0x0a,
+ BM_xBGRQUADS = 0x10,
+ BM_CMYKQUADS = 0x20,
+ BM_x555XYZ = 0x101,
+ BM_x555Yxz,
+ BM_x555Lab,
+ BM_x555G3CH,
+ BM_XYZTRIPLETS = 0x201,
+ BM_YxyTRIPLETS,
+ BM_LabTRIPLETS,
+ BM_G3CHTRIPLETS,
+ BM_5CHANNEL,
+ BM_6CHANNEL,
+ BM_7CHANNEL,
+ BM_8CHANNEL,
+ BM_GRAY,
+ BM_xXYZQUADS = 0x301,
+ BM_xYxyQUADS,
+ BM_xLabQUADS,
+ BM_xG3CHQUADS,
+ BM_KYMCQUADS,
+ BM_10b_XYZ = 0x401,
+ BM_10b_Yxy,
+ BM_10b_Lab,
+ BM_10b_G3CH,
+ BM_NAMED_INDEX,
+ BM_16b_XYZ = 0x501,
+ BM_16b_Yxy,
+ BM_16b_Lab,
+ BM_16b_G3CH,
+ BM_16b_GRAY,
+} BMFORMAT, *PBMFORMAT, *LPBMFORMAT;
+
+typedef BOOL (CALLBACK *PBMCALLBACKFN)(ULONG,ULONG,LPARAM);
+typedef PBMCALLBACKFN LPPBMCALLBACKFN;
+
+#define INTENT_PERCEPTUAL 0
+#define INTENT_RELATIVE_COLORIMETRIC 1
+#define INTENT_SATURATION 2
+#define INTENT_ABSOLUTE_COLORIMETRIC 3
+
+typedef struct tagPROFILEHEADER
+{
+ DWORD phSize;
+ DWORD phCMMType;
+ DWORD phVersion;
+ DWORD phClass;
+ DWORD phDataColorSpace;
+ DWORD phConnectionSpace;
+ DWORD phDateTime[3];
+ DWORD phSignature;
+ DWORD phPlatform;
+ DWORD phProfileFlags;
+ DWORD phManufacturer;
+ DWORD phModel;
+ DWORD phAttributes[2];
+ DWORD phRenderingIntent;
+ CIEXYZ phIlluminant;
+ DWORD phCreator;
+ BYTE phReserved[44];
+} PROFILEHEADER, *PPROFILEHEADER, *LPPROFILEHEADER;
+
+typedef struct tagPROFILE
+{
+ DWORD dwType;
+ PVOID pProfileData;
+ DWORD cbDataSize;
+} PROFILE, *PPROFILE, *LPPROFILE;
+
+#define ENUM_TYPE_VERSION 0x0300
+
+typedef struct tagENUMTYPEA
+{
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFields;
+ PCSTR pDeviceName;
+ DWORD dwMediaType;
+ DWORD dwDitheringMode;
+ DWORD dwResolution[2];
+ DWORD dwCMMType;
+ DWORD dwClass;
+ DWORD dwDataColorSpace;
+ DWORD dwConnectionSpace;
+ DWORD dwSignature;
+ DWORD dwPlatform;
+ DWORD dwProfileFlags;
+ DWORD dwManufacturer;
+ DWORD dwModel;
+ DWORD dwAttributes[2];
+ DWORD dwRenderingIntent;
+ DWORD dwCreator;
+ DWORD dwDeviceClass;
+} ENUMTYPEA, *PENUMTYPEA, *LPENUMTYPEA;
+
+typedef struct tagENUMTYPEW
+{
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFields;
+ PCWSTR pDeviceName;
+ DWORD dwMediaType;
+ DWORD dwDitheringMode;
+ DWORD dwResolution[2];
+ DWORD dwCMMType;
+ DWORD dwClass;
+ DWORD dwDataColorSpace;
+ DWORD dwConnectionSpace;
+ DWORD dwSignature;
+ DWORD dwPlatform;
+ DWORD dwProfileFlags;
+ DWORD dwManufacturer;
+ DWORD dwModel;
+ DWORD dwAttributes[2];
+ DWORD dwRenderingIntent;
+ DWORD dwCreator;
+ DWORD dwDeviceClass;
+} ENUMTYPEW, *PENUMTYPEW, *LPENUMTYPEW;
+
+#define ET_DEVICENAME 0x00000001
+#define ET_MEDIATYPE 0x00000002
+#define ET_DITHERMODE 0x00000004
+#define ET_RESOLUTION 0x00000008
+#define ET_CMMTYPE 0x00000010
+#define ET_CLASS 0x00000020
+#define ET_DATACOLORSPACE 0x00000040
+#define ET_CONNECTIONSPACE 0x00000080
+#define ET_SIGNATURE 0x00000100
+#define ET_PLATFORM 0x00000200
+#define ET_PROFILEFLAGS 0x00000400
+#define ET_MANUFACTURER 0x00000800
+#define ET_MODEL 0x00001000
+#define ET_ATTRIBUTES 0x00002000
+#define ET_RENDERINGINTENT 0x00004000
+#define ET_CREATOR 0x00008000
+#define ET_DEVICECLASS 0x00010000
+
+struct _tagCOLORMATCHSETUPA;
+struct _tagCOLORMATCHSETUPW;
+
+typedef BOOL (WINAPI *PCMSCALLBACKA)(struct _tagCOLORMATCHSETUPA*,LPARAM);
+typedef BOOL (WINAPI *PCMSCALLBACKW)(struct _tagCOLORMATCHSETUPW*,LPARAM);
+
+typedef struct _tagCOLORMATCHSETUPA
+{
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ HWND hwndOwner;
+ PCSTR pSourceName;
+ PCSTR pDisplayName;
+ PCSTR pPrinterName;
+ DWORD dwRenderIntent;
+ DWORD dwProofingIntent;
+ PSTR pMonitorProfile;
+ DWORD ccMonitorProfile;
+ PSTR pPrinterProfile;
+ DWORD ccPrinterProfile;
+ PSTR pTargetProfile;
+ DWORD ccTargetProfile;
+ DLGPROC lpfnHook;
+ LPARAM lParam;
+ PCMSCALLBACKA lpfnApplyCallback;
+ LPARAM lParamApplyCallback;
+} COLORMATCHSETUPA, *PCOLORMATCHSETUPA, *LPCOLORMATCHSETUPA;
+
+typedef struct _tagCOLORMATCHSETUPW
+{
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ HWND hwndOwner;
+ PCWSTR pSourceName;
+ PCWSTR pDisplayName;
+ PCWSTR pPrinterName;
+ DWORD dwRenderIntent;
+ DWORD dwProofingIntent;
+ PWSTR pMonitorProfile;
+ DWORD ccMonitorProfile;
+ PWSTR pPrinterProfile;
+ DWORD ccPrinterProfile;
+ PWSTR pTargetProfile;
+ DWORD ccTargetProfile;
+ DLGPROC lpfnHook;
+ LPARAM lParam;
+ PCMSCALLBACKW lpfnApplyCallback;
+ LPARAM lParamApplyCallback;
+} COLORMATCHSETUPW, *PCOLORMATCHSETUPW, *LPCOLORMATCHSETUPW;
+
+BOOL WINAPI AssociateColorProfileWithDeviceA(PCSTR,PCSTR,PCSTR);
+BOOL WINAPI AssociateColorProfileWithDeviceW(PCWSTR,PCWSTR,PCWSTR);
+#define AssociateColorProfileWithDevice WINELIB_NAME_AW(AssociateColorProfileWithDevice)
+BOOL WINAPI CheckBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PBYTE,PBMCALLBACKFN,LPARAM);
+BOOL WINAPI CheckColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PBYTE);
+BOOL WINAPI ConvertColorNameToIndex(HPROFILE,PCOLOR_NAME,PDWORD,DWORD);
+BOOL WINAPI ConvertIndexToColorName(HPROFILE,PDWORD,PCOLOR_NAME,DWORD);
+BOOL WINAPI CloseColorProfile(HPROFILE);
+HTRANSFORM WINAPI CreateColorTransformA(LPLOGCOLORSPACEA,HPROFILE,HPROFILE,DWORD);
+HTRANSFORM WINAPI CreateColorTransformW(LPLOGCOLORSPACEW,HPROFILE,HPROFILE,DWORD);
+#define CreateColorTransform WINELIB_NAME_AW(CreateColorTransform)
+BOOL WINAPI CreateDeviceLinkProfile(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD);
+HTRANSFORM WINAPI CreateMultiProfileTransform(PHPROFILE,DWORD,PDWORD,DWORD,DWORD,DWORD);
+BOOL WINAPI CreateProfileFromLogColorSpaceA(LPLOGCOLORSPACEA,PBYTE*);
+BOOL WINAPI CreateProfileFromLogColorSpaceW(LPLOGCOLORSPACEW,PBYTE*);
+#define CreateProfileFromLogColorSpace WINELIB_NAME_AW(CreateProfileFromLogColorSpace)
+BOOL WINAPI DeleteColorTransform(HTRANSFORM);
+BOOL WINAPI DisassociateColorProfileFromDeviceA(PCSTR,PCSTR,PCSTR);
+BOOL WINAPI DisassociateColorProfileFromDeviceW(PCWSTR,PCWSTR,PCWSTR);
+#define DisassociateColorProfileFromDevice WINELIB_NAME_AW(DisassociateColorProfileFromDevice)
+BOOL WINAPI EnumColorProfilesA(PCSTR,PENUMTYPEA,PBYTE,PDWORD,PDWORD);
+BOOL WINAPI EnumColorProfilesW(PCWSTR,PENUMTYPEW,PBYTE,PDWORD,PDWORD);
+#define EnumColorProfiles WINELIB_NAME_AW(EnumColorProfiles)
+DWORD WINAPI GenerateCopyFilePaths(LPCWSTR,LPCWSTR,LPBYTE,DWORD,LPWSTR,LPDWORD,LPWSTR,LPDWORD,DWORD);
+DWORD WINAPI GetCMMInfo(HTRANSFORM,DWORD);
+BOOL WINAPI GetColorDirectoryA(PCSTR,PSTR,PDWORD);
+BOOL WINAPI GetColorDirectoryW(PCWSTR,PWSTR,PDWORD);
+#define GetColorDirectory WINELIB_NAME_AW(GetColorDirectory)
+BOOL WINAPI GetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID,PBOOL);
+BOOL WINAPI GetColorProfileElementTag(HPROFILE,DWORD,PTAGTYPE);
+BOOL WINAPI GetColorProfileFromHandle(HPROFILE,PBYTE,PDWORD);
+BOOL WINAPI GetColorProfileHeader(HPROFILE,PPROFILEHEADER);
+BOOL WINAPI GetCountColorProfileElements(HPROFILE,PDWORD);
+BOOL WINAPI GetNamedProfileInfo(HPROFILE,PNAMED_PROFILE_INFO);
+BOOL WINAPI GetPS2ColorRenderingDictionary(HPROFILE,DWORD,PBYTE,PDWORD,PBOOL);
+BOOL WINAPI GetPS2ColorRenderingIntent(HPROFILE,DWORD,PBYTE,PDWORD);
+BOOL WINAPI GetPS2ColorSpaceArray(HPROFILE,DWORD,DWORD,PBYTE,PDWORD,PBOOL);
+BOOL WINAPI GetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR,PDWORD);
+BOOL WINAPI GetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR,PDWORD);
+#define GetStandardColorSpaceProfile WINELIB_NAME_AW(GetStandardColorSpaceProfile)
+BOOL WINAPI InstallColorProfileA(PCSTR,PCSTR);
+BOOL WINAPI InstallColorProfileW(PCWSTR,PCWSTR);
+#define InstallColorProfile WINELIB_NAME_AW(InstallColorProfile)
+BOOL WINAPI IsColorProfileTagPresent(HPROFILE,TAGTYPE,PBOOL);
+BOOL WINAPI IsColorProfileValid(HPROFILE,PBOOL);
+HPROFILE WINAPI OpenColorProfileA(PPROFILE,DWORD,DWORD,DWORD);
+HPROFILE WINAPI OpenColorProfileW(PPROFILE,DWORD,DWORD,DWORD);
+#define OpenColorProfile WINELIB_NAME_AW(OpenColorProfile)
+BOOL WINAPI RegisterCMMA(PCSTR,DWORD,PCSTR);
+BOOL WINAPI RegisterCMMW(PCWSTR,DWORD,PCWSTR);
+#define RegisterCMM WINELIB_NAME_AW(RegisterCMM)
+BOOL WINAPI SelectCMM(DWORD id);
+BOOL WINAPI SetColorProfileElement(HPROFILE,TAGTYPE,DWORD,PDWORD,PVOID);
+BOOL WINAPI SetColorProfileElementReference(HPROFILE,TAGTYPE,TAGTYPE);
+BOOL WINAPI SetColorProfileElementSize(HPROFILE,TAGTYPE,DWORD);
+BOOL WINAPI SetColorProfileHeader(HPROFILE,PPROFILEHEADER);
+BOOL WINAPI SetStandardColorSpaceProfileA(PCSTR,DWORD,PSTR);
+BOOL WINAPI SetStandardColorSpaceProfileW(PCWSTR,DWORD,PWSTR);
+#define SetStandardColorSpaceProfile WINELIB_NAME_AW(SetStandardColorSpaceProfile)
+BOOL WINAPI SetupColorMatchingA(PCOLORMATCHSETUPA);
+BOOL WINAPI SetupColorMatchingW(PCOLORMATCHSETUPW);
+#define SetupColorMatching WINELIB_NAME_AW(SetupColorMatching)
+BOOL WINAPI SpoolerCopyFileEvent(LPWSTR,LPWSTR,DWORD);
+BOOL WINAPI TranslateBitmapBits(HTRANSFORM,PVOID,BMFORMAT,DWORD,DWORD,DWORD,PVOID,BMFORMAT,DWORD,PBMCALLBACKFN,ULONG);
+BOOL WINAPI TranslateColors(HTRANSFORM,PCOLOR,DWORD,COLORTYPE,PCOLOR,COLORTYPE);
+BOOL WINAPI UninstallColorProfileA(PCSTR,PCSTR,BOOL);
+BOOL WINAPI UninstallColorProfileW(PCWSTR,PCWSTR,BOOL);
+#define UninstallColorProfile WINELIB_NAME_AW(UninstallColorProfile)
+BOOL WINAPI UnregisterCMMA(PCSTR,DWORD);
+BOOL WINAPI UnregisterCMMW(PCWSTR,DWORD);
+#define UnregisterCMM WINELIB_NAME_AW(UnregisterCMM)
+
+#define PROFILE_FILENAME 1
+#define PROFILE_MEMBUFFER 2
+
+#define PROFILE_READ 1
+#define PROFILE_READWRITE 2
+
+#define SPACE_XYZ 0x58595A20 /* 'XYZ ' */
+#define SPACE_Lab 0x4C616220 /* 'Lab ' */
+#define SPACE_Luv 0x4C757620 /* 'Luv ' */
+#define SPACE_YCbCr 0x59436272 /* 'YCbr' */
+#define SPACE_Yxy 0x59787920 /* 'Yxy ' */
+#define SPACE_RGB 0x52474220 /* 'RGB ' */
+#define SPACE_GRAY 0x47524159 /* 'GRAY' */
+#define SPACE_HSV 0x48535620 /* 'HSV ' */
+#define SPACE_HLS 0x484C5320 /* 'HLS ' */
+#define SPACE_CMYK 0x434D594B /* 'CMYK' */
+#define SPACE_CMY 0x434D5920 /* 'CMY ' */
+#define SPACE_2_CHANNEL 0x32434c52 /* '2CLR' */
+#define SPACE_3_CHANNEL 0x33434c52 /* '3CLR' */
+#define SPACE_4_CHANNEL 0x34434c52 /* '4CLR' */
+#define SPACE_5_CHANNEL 0x35434c52 /* '5CLR' */
+#define SPACE_6_CHANNEL 0x36434c52 /* '6CLR' */
+#define SPACE_7_CHANNEL 0x37434c52 /* '7CLR' */
+#define SPACE_8_CHANNEL 0x38434c52 /* '8CLR' */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ICM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h
new file mode 100644
index 00000000..b910a52e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/icmpapi.h
@@ -0,0 +1,62 @@
+/*
+ * Interface to the ICMP functions.
+ *
+ * Copyright (C) 1999 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ICMPAPI_H
+#define __WINE_ICMPAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+HANDLE WINAPI IcmpCreateFile(
+ VOID
+ );
+
+BOOL WINAPI IcmpCloseHandle(
+ HANDLE IcmpHandle
+ );
+
+DWORD WINAPI IcmpSendEcho(
+ HANDLE IcmpHandle,
+ IPAddr DestinationAddress,
+ LPVOID RequestData,
+ WORD RequestSize,
+ PIP_OPTION_INFORMATION RequestOptions,
+ LPVOID ReplyBuffer,
+ DWORD ReplySize,
+ DWORD Timeout
+ );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_ICMPAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h
new file mode 100644
index 00000000..11ac4064
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/idispids.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IDISPIDS_H__
+#define __WINE_IDISPIDS_H__
+
+#define DISPID_READYSTATE (-525)
+#define DISPID_READYSTATECHANGE (-609)
+#define DISPID_AMBIENT_TRANSFERPRIORITY (-728)
+#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED (-5501)
+#define DISPID_AMBIENT_SILENT (-5502)
+
+#ifndef DISPID_AMBIENT_CODEPAGE
+#define DISPID_AMBIENT_CODEPAGE (-725)
+#define DISPID_AMBIENT_CHARSET (-727)
+#endif /* DISPID_AMBIENT_CODEPAGE */
+
+#endif /* __WINE_IDISPIDS_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl
new file mode 100644
index 00000000..0ed0ec39
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iextag.idl
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+ object,
+ uuid(7e8bc44d-aeff-11d1-89c2-00c04fb6bfc4),
+ dual,
+ pointer_default(unique)
+ ]
+interface IClientCaps : IDispatch
+{
+ [propget, id(1)]
+ HRESULT javaEnabled([out, retval] VARIANT_BOOL *pVal);
+
+ [propget, id(2)]
+ HRESULT cookieEnabled([out, retval] VARIANT_BOOL *pVal);
+
+ [propget, id(3)]
+ HRESULT cpuClass([out, retval] BSTR *p);
+
+ [propget, id(4)]
+ HRESULT systemLanguage([out, retval] BSTR *p);
+
+ [propget, id(6)]
+ HRESULT userLanguage([out, retval] BSTR *p);
+
+ [propget, id(7)]
+ HRESULT platform([out, retval] BSTR *p);
+
+ [propget, id(9)]
+ HRESULT connectionSpeed([out, retval] long *p);
+
+ [propget, id(10)]
+ HRESULT onLine([out, retval] VARIANT_BOOL *p);
+
+ [propget, id(11)]
+ HRESULT colorDepth([out, retval] long *p);
+
+ [propget, id(12)]
+ HRESULT bufferDepth([out, retval] long *p);
+
+ [propget, id(13)]
+ HRESULT width([out, retval] long *p);
+
+ [propget, id(14)]
+ HRESULT height([out, retval] long *p);
+
+ [propget, id(15)]
+ HRESULT availHeight([out, retval] long *p);
+
+ [propget, id(16)]
+ HRESULT availWidth([out, retval] long *p);
+
+ [propget, id(17)]
+ HRESULT connectionType([out, retval] BSTR *p);
+
+ [id(18)]
+ HRESULT isComponentInstalled(
+ [in] BSTR bstrName,
+ [in] BSTR bstrType,
+ [in, defaultvalue("")] BSTR bStrVer,
+ [out, retval] VARIANT_BOOL *p);
+
+ [id(19)]
+ HRESULT getComponentVersion(
+ [in] BSTR bstrName,
+ [in] BSTR bstrType,
+ [out, retval] BSTR *pbstrVer);
+
+ [id(20)]
+ HRESULT compareVersions(
+ [in] BSTR bstrVer1,
+ [in] BSTR bstrVer2,
+ [out, retval] long *p);
+
+ [id(21)]
+ HRESULT addComponentRequest(
+ [in] BSTR bstrName,
+ [in] BSTR bstrType,
+ [in, defaultvalue("")] BSTR bstrVer);
+
+ [id(22)]
+ HRESULT doComponentRequest([out, retval] VARIANT_BOOL *p);
+
+ [id(23)]
+ HRESULT clearComponentRequest();
+}
+
+[
+ uuid(7e8bc440-aeff-11d1-89c2-00c04fb6bfc4),
+ version(1.0)
+]
+library IEXTagLib
+{
+ [
+ uuid(7e8bc44e-aeff-11d1-89c2-00C04fb6bfc4)
+ ]
+ coclass ClientCaps
+ {
+ [default] interface IClientCaps;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h
new file mode 100644
index 00000000..57cfca1b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifdef.h
@@ -0,0 +1,239 @@
+/* WINE ifdef.h
+ * Copyright 2010 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IFDEF_H
+#define WINE_IFDEF_H
+
+#include <ipifcons.h>
+
+typedef ULONG32 NET_IF_OBJECT_ID, *PNET_IF_OBJECT_ID;
+typedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID;
+typedef GUID NET_IF_NETWORK_GUID, *PNET_IF_NETWORK_GUID;
+typedef ULONG NET_IFINDEX, *PNET_IFINDEX;
+typedef NET_IFINDEX IF_INDEX, *PIF_INDEX;
+typedef UINT16 NET_IFTYPE, *PNET_IFTYPE;
+
+#define NET_IF_OPER_STATUS_DOWN_NOT_AUTHENTICATED 0x00000001
+#define NET_IF_OPER_STATUS_DOWN_NOT_MEDIA_CONNECTED 0x00000002
+#define NET_IF_OPER_STATUS_DORMANT_PAUSED 0x00000004
+#define NET_IF_OPER_STATUS_DORMANT_LOW_POWER 0x00000008
+
+#define NET_IF_COMPARTMENT_ID_UNSPECIFIED 0
+#define NET_IF_COMPARTMENT_ID_PRIMARY 1
+
+#define NET_IF_OID_IF_ALIAS 0x00000001
+#define NET_IF_OID_COMPARTMENT_ID 0x00000002
+#define NET_IF_OID_NETWORK_GUID 0x00000003
+#define NET_IF_OID_IF_ENTRY 0x00000004
+
+#define NET_SET_UNSPECIFIED_NETWORK_GUID(x)
+#define NET_IS_UNSPECIFIED_NETWORK_GUID(x)
+
+#define NET_SITEID_UNSPECIFIED 0
+#define NET_SITEID_MAXUSER 0x07ffffff
+#define NET_SITEID_MAXSYSTEM 0x0fffffff
+
+#define NET_IFINDEX_UNSPECIFIED 0
+#define IFI_UNSPECIFIED NET_IFINDEX_UNSPECIFIED
+
+#define NET_IFLUID_UNSPECIFIED 0
+
+#define NIIF_HARDWARE_INTERFACE 0x00000001
+#define NIIF_FILTER_INTERFACE 0x00000002
+#define NIIF_NDIS_WDM_INTERFACE 0x00000020
+#define NIIF_NDIS_ENDPOINT_INTERFACE 0x00000040
+#define NIIF_NDIS_ISCSI_INTERFACE 0x00000080
+#define NIIF_WAN_TUNNEL_TYPE_UNKNOWN 0xffffffff
+
+#define NET_BUS_NUMBER_UNKNOWN 0xffffffff
+#define NET_SLOT_NUMBER_UNKNOWN 0xffffffff
+#define NET_FUNCTION_NUMBER_UNKNOWN 0xffffffff
+
+#define IF_MAX_STRING_SIZE 256
+#define IF_MAX_PHYS_ADDRESS_LENGTH 32
+
+typedef enum _NET_IF_ADMIN_STATUS {
+ NET_IF_ADMIN_STATUS_UP = 1,
+ NET_IF_ADMIN_STATUS_DOWN = 2,
+ NET_IF_ADMIN_STATUS_TESTING = 3
+} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
+
+typedef enum _NET_IF_OPER_STATUS {
+ NET_IF_OPER_STATUS_UP = 1,
+ NET_IF_OPER_STATUS_DOWN = 2,
+ NET_IF_OPER_STATUS_TESTING = 3,
+ NET_IF_OPER_STATUS_UNKNOWN = 4,
+ NET_IF_OPER_STATUS_DORMANT = 5,
+ NET_IF_OPER_STATUS_NOT_PRESENT = 6,
+ NET_IF_OPER_STATUS_LOWER_LAYER_DOWN = 7
+} NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS;
+
+typedef enum _NET_IF_RCV_ADDRESS_TYPE {
+ NET_IF_RCV_ADDRESS_TYPE_OTHER = 1,
+ NET_IF_RCV_ADDRESS_TYPE_VOLATILE = 2,
+ NET_IF_RCV_ADDRESS_TYPE_NON_VOLATILE = 3
+} NET_IF_RCV_ADDRESS_TYPE, *PNET_IF_RCV_ADDRESS_TYPE;
+
+typedef struct _NET_IF_RCV_ADDRESS_LH {
+ NET_IF_RCV_ADDRESS_TYPE ifRcvAddressType;
+ USHORT ifRcvAddressLength;
+ USHORT ifRcvAddressOffset;
+} NET_IF_RCV_ADDRESS_LH, *PNET_IF_RCV_ADDRESS_LH;
+typedef NET_IF_RCV_ADDRESS_LH NET_IF_RCV_ADDRESS;
+typedef NET_IF_RCV_ADDRESS_LH *PNET_IF_RCV_ADDRESS;
+
+typedef union _NET_LUID_LH {
+ ULONG64 Value;
+ struct {
+ ULONG64 Reserved : 24;
+ ULONG64 NetLuidIndex : 24;
+ ULONG64 IfType : 16;
+ } Info;
+} NET_LUID_LH, *PNET_LUID_LH;
+typedef NET_LUID_LH NET_LUID;
+typedef NET_LUID *PNET_LUID;
+typedef NET_LUID IF_LUID;
+typedef NET_LUID *PIF_LUID;
+
+typedef enum _NET_IF_ACCESS_TYPE {
+ NET_IF_ACCESS_LOOPBACK = 1,
+ NET_IF_ACCESS_BROADCAST = 2,
+ NET_IF_ACCESS_POINT_TO_POINT = 2,
+ NET_IF_ACCESS_POINT_TO_MULTI_POINT = 4,
+ NET_IF_ACCESS_MAXIMUM = 5
+} NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;
+
+typedef enum _NET_IF_DIRECTION_TYPE {
+ NET_IF_DIRECTION_SENDRECEIVE = 0,
+ NET_IF_DIRECTION_SENDONLY = 1,
+ NET_IF_DIRECTION_RECEIVEONLY = 2,
+ NET_IF_DIRECTION_MAXIMUM = 3
+} NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;
+
+typedef enum _NET_IF_CONNECTION_TYPE {
+ NET_IF_CONNECTION_DEDICATED = 1,
+ NET_IF_CONNECTION_PASSIVE = 2,
+ NET_IF_CONNECTION_DEMAND = 3,
+ NET_IF_CONNECTION_MAXIMUM = 4,
+} NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;
+
+typedef enum _NET_IF_MEDIA_CONNECT_STATE {
+ MediaConnectStateUnknown = 0,
+ MediaConnectStateConnected = 1,
+ MediaConnectStateDisconnected = 2
+} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
+
+typedef enum _NET_IF_MEDIA_DUPLEX_STATE {
+ MediaDuplexStateUnknown = 0,
+ MediaDuplexStateHalf = 1,
+ MediaDuplexStateFull = 2
+} NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;
+
+typedef struct _NET_PHYSICAL_LOCATION_LH {
+ ULONG BusNumber;
+ ULONG SlotNumber;
+ ULONG FunctionNumber;
+} NET_PHYSICAL_LOCATION_LH, *PNET_PHYSICAL_LOCATION_LH;
+typedef NET_PHYSICAL_LOCATION_LH NET_PHYSICAL_LOCATION;
+typedef NET_PHYSICAL_LOCATION *PNET_PHYSICAL_LOCATION;
+
+typedef struct _IF_COUNTED_STRING_LH {
+ USHORT Length;
+ WCHAR String[IF_MAX_STRING_SIZE + 1];
+} IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH;
+typedef IF_COUNTED_STRING_LH IF_COUNTED_STRING;
+typedef IF_COUNTED_STRING *PIF_COUNTED_STRING;
+
+typedef struct _IF_PHYSICAL_ADDRESS_LH {
+ USHORT Length;
+ UCHAR Address[IF_MAX_PHYS_ADDRESS_LENGTH];
+} IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH;
+typedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS;
+typedef IF_PHYSICAL_ADDRESS *PIF_PHYSICAL_ADDRESS;
+
+typedef enum {
+ TUNNEL_TYPE_NONE = 0,
+ TUNNEL_TYPE_OTHER = 1,
+ TUNNEL_TYPE_DIRECT = 2,
+ TUNNEL_TYPE_6TO4 = 11,
+ TUNNEL_TYPE_ISATAP = 13,
+ TUNNEL_TYPE_TEREDO = 14,
+ TUNNEL_TYPE_IPHTTPS = 15,
+} TUNNEL_TYPE;
+
+typedef enum _IF_ADMINISTRATIVE_STATE {
+ IF_ADMINISTRATIVE_STATE_DISABLED = 0,
+ IF_ADMINISTRATIVE_STATE_ENABLED = 1,
+ IF_ADMINISTRATIVE_STATE_DEMANDDIAL = 2
+} IF_ADMINISTRATIVE_STATE, *PIF_ADMINISTRATIVE_STATE;
+
+typedef enum {
+ IfOperStatusUp = 1,
+ IfOperStatusDown,
+ IfOperStatusTesting,
+ IfOperStatusUnknown,
+ IfOperStatusDormant,
+ IfOperStatusNotPresent,
+ IfOperStatusLowerLayerDown
+} IF_OPER_STATUS;
+
+typedef struct _NDIS_INTERFACE_INFORMATION {
+ NET_IF_OPER_STATUS ifOperStatus;
+ ULONG ifOperStatusFlags;
+ NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
+ NET_IF_MEDIA_DUPLEX_STATE MediaDuplexState;
+ ULONG ifMtu;
+ BOOLEAN ifPromiscuousMode;
+ BOOLEAN ifDeviceWakeUpEnable;
+ ULONG64 XmitLinkSpeed;
+ ULONG64 RcvLinkSpeed;
+ ULONG64 ifLastChange;
+ ULONG64 ifCounterDiscontinuityTime;
+ ULONG64 ifInUnknownProtos;
+ ULONG64 ifInDiscards;
+ ULONG64 ifInErrors;
+ ULONG64 ifHCInOctets;
+ ULONG64 ifHCInUcastPkts;
+ ULONG64 ifHCInMulticastPkts;
+ ULONG64 ifHCInBroadcastPkts;
+ ULONG64 ifHCOutOctets;
+ ULONG64 ifHCOutUcastPkts;
+ ULONG64 ifHCOutMulticastPkts;
+ ULONG64 ifHCOutBroadcastPkts;
+ ULONG64 ifOutErrors;
+ ULONG64 ifOutDiscards;
+ ULONG64 ifHCInUcastOctets;
+ ULONG64 ifHCInMulticastOctets;
+ ULONG64 ifHCInBroadcastOctets;
+ ULONG64 ifHCOutUcastOctets;
+ ULONG64 ifHCOutMulticastOctets;
+ ULONG64 ifHCOutBroadcastOctets;
+ NET_IF_COMPARTMENT_ID CompartmentId;
+ ULONG SupportedStatistics;
+} NDIS_INTERFACE_INFORMATION, *PNDIS_INTERFACE_INFORMATION;
+
+#endif /* WINE_IFDEF_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h
new file mode 100644
index 00000000..0b9f0e9c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ifmib.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IFMIB_H
+#define __WINE_IFMIB_H
+
+#include <ifdef.h>
+
+typedef struct _MIB_IFNUMBER
+{
+ DWORD dwValue;
+} MIB_IFNUMBER, *PMIB_IFNUMBER;
+
+
+/* Interface table */
+
+#define MAX_INTERFACE_NAME_LEN 256
+#define MAXLEN_PHYSADDR 8
+#define MAXLEN_IFDESCR 256
+
+typedef struct _MIB_IFROW
+{
+ WCHAR wszName[MAX_INTERFACE_NAME_LEN];
+ DWORD dwIndex;
+ DWORD dwType;
+ DWORD dwMtu;
+ DWORD dwSpeed;
+ DWORD dwPhysAddrLen;
+ UCHAR bPhysAddr[MAXLEN_PHYSADDR];
+ DWORD dwAdminStatus;
+ INTERNAL_IF_OPER_STATUS dwOperStatus;
+ DWORD dwLastChange;
+ DWORD dwInOctets;
+ DWORD dwInUcastPkts;
+ DWORD dwInNUcastPkts;
+ DWORD dwInDiscards;
+ DWORD dwInErrors;
+ DWORD dwInUnknownProtos;
+ DWORD dwOutOctets;
+ DWORD dwOutUcastPkts;
+ DWORD dwOutNUcastPkts;
+ DWORD dwOutDiscards;
+ DWORD dwOutErrors;
+ DWORD dwOutQLen;
+ DWORD dwDescrLen;
+ BYTE bDescr[MAXLEN_IFDESCR];
+} MIB_IFROW, *PMIB_IFROW;
+
+typedef struct _MIB_IFTABLE
+{
+ DWORD dwNumEntries;
+ MIB_IFROW table[1];
+} MIB_IFTABLE, *PMIB_IFTABLE;
+
+
+#endif /* __WINE_IFMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h
new file mode 100644
index 00000000..c96f2a8e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imagehlp.h
@@ -0,0 +1,1409 @@
+/*
+ * Declarations for IMAGEHLP
+ *
+ * Copyright (C) 1998 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IMAGEHLP_H
+#define __WINE_IMAGEHLP_H
+
+#include <wintrust.h>
+
+/* A set of documentation macros (see also dbghelp.h) */
+#ifndef __deref_out
+# define __deref_out
+#endif
+#ifndef __deref_out_opt
+# define __deref_out_opt
+#endif
+#ifndef __deref_opt_out
+# define __deref_opt_out
+#endif
+#ifndef __in
+# define __in
+#endif
+#ifndef __in_opt
+# define __in_opt
+#endif
+#ifndef __in_bcount
+# define __in_bcount(x)
+#endif
+#ifndef __in_bcount_opt
+# define __in_bcount_opt(x)
+#endif
+#ifndef __in_ecount
+# define __in_ecount(x)
+#endif
+#ifndef __inout
+# define __inout
+#endif
+#ifndef __inout_opt
+# define __inout_opt
+#endif
+#ifndef __inout_bcount
+# define __inout_bcount(x)
+#endif
+#ifndef __inout_ecount
+# define __inout_ecount(x)
+#endif
+#ifndef __out
+# define __out
+#endif
+#ifndef __out_opt
+# define __out_opt
+#endif
+#ifndef __out_bcount
+# define __out_bcount(x)
+#endif
+#ifndef __out_bcount_opt
+# define __out_bcount_opt(x)
+#endif
+#ifndef __out_ecount
+# define __out_ecount(x)
+#endif
+#ifndef __out_ecount_opt
+# define __out_ecount_opt(x)
+#endif
+#ifndef __out_xcount
+# define __out_xcount(x)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define IMAGEAPI WINAPI
+#define DBHLPAPI IMAGEAPI
+
+#define API_VERSION_NUMBER 7 /* 7 is the default */
+
+/***********************************************************************
+ * Types
+ */
+
+typedef PVOID DIGEST_HANDLE;
+
+/***********************************************************************
+ * Enums/Defines
+ */
+
+typedef enum _IMAGEHLP_STATUS_REASON {
+ BindOutOfMemory,
+ BindRvaToVaFailed,
+ BindNoRoomInImage,
+ BindImportModuleFailed,
+ BindImportProcedureFailed,
+ BindImportModule,
+ BindImportProcedure,
+ BindForwarder,
+ BindForwarderNOT,
+ BindImageModified,
+ BindExpandFileHeaders,
+ BindImageComplete,
+ BindMismatchedSymbols,
+ BindSymbolsNotUpdated
+} IMAGEHLP_STATUS_REASON;
+
+#define BIND_NO_BOUND_IMPORTS 0x00000001
+#define BIND_NO_UPDATE 0x00000002
+#define BIND_ALL_IMAGES 0x00000004
+#define BIND_CACHE_IMPORT_DLLS 0x00000008
+
+#define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 0x01
+#define CERT_PE_IMAGE_DIGEST_RESOURCES 0x02
+#define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04
+#define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 0x08
+
+#define CERT_SECTION_TYPE_ANY 0xFF
+
+#define SPLITSYM_REMOVE_PRIVATE 0x00000001
+#define SPLITSYM_EXTRACT_ALL 0x00000002
+#define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004
+
+#define FRAME_FPO 0
+#define FRAME_TRAP 1
+#define FRAME_TSS 2
+#define FRAME_NONFPO 3
+
+#define CHECKSUM_SUCCESS 0
+#define CHECKSUM_OPEN_FAILURE 1
+#define CHECKSUM_MAP_FAILURE 2
+#define CHECKSUM_MAPVIEW_FAILURE 3
+#define CHECKSUM_UNICODE_FAILURE 4
+
+typedef enum _ADDRESS_MODE {
+ AddrMode1616,
+ AddrMode1632,
+ AddrModeReal,
+ AddrModeFlat
+} ADDRESS_MODE;
+
+#define SYMOPT_CASE_INSENSITIVE 0x00000001
+#define SYMOPT_UNDNAME 0x00000002
+#define SYMOPT_DEFERRED_LOADS 0x00000004
+#define SYMOPT_NO_CPP 0x00000008
+#define SYMOPT_LOAD_LINES 0x00000010
+#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
+
+#define SYMF_OMAP_GENERATED 0x00000001
+#define SYMF_OMAP_MODIFIED 0x00000002
+/* 0x00000004 has been obsoleted */
+#define SYMF_REGISTER 0x00000008
+#define SYMF_REGREL 0x00000010
+#define SYMF_FRAMEREL 0x00000020
+#define SYMF_PARAMETER 0x00000040
+#define SYMF_LOCAL 0x00000080
+#define SYMF_CONSTANT 0x00000100
+#define SYMF_EXPORT 0x00000200
+#define SYMF_FORWARDER 0x00000400
+#define SYMF_FUNCTION 0x00000800
+
+typedef enum {
+ SymNone,
+ SymCoff,
+ SymCv,
+ SymPdb,
+ SymExport,
+ SymDeferred,
+ SymSym,
+ SymDia,
+ SymVirtual,
+ NumSymTypes
+} SYM_TYPE;
+
+#define UNDNAME_COMPLETE 0x0000
+#define UNDNAME_NO_LEADING_UNDERSCORES 0x0001
+#define UNDNAME_NO_MS_KEYWORDS 0x0002
+#define UNDNAME_NO_FUNCTION_RETURNS 0x0004
+#define UNDNAME_NO_ALLOCATION_MODEL 0x0008
+#define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010
+#define UNDNAME_NO_MS_THISTYPE 0x0020
+#define UNDNAME_NO_CV_THISTYPE 0x0040
+#define UNDNAME_NO_THISTYPE 0x0060
+#define UNDNAME_NO_ACCESS_SPECIFIERS 0x0080
+#define UNDNAME_NO_THROW_SIGNATURES 0x0100
+#define UNDNAME_NO_MEMBER_TYPE 0x0200
+#define UNDNAME_NO_RETURN_UDT_MODEL 0x0400
+#define UNDNAME_32_BIT_DECODE 0x0800
+#define UNDNAME_NAME_ONLY 0x1000
+#define UNDNAME_NO_ARGUMENTS 0x2000
+#define UNDNAME_NO_SPECIAL_SYMS 0x4000
+
+#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
+#define CBA_SYMBOLS_UNLOADED 0x00000004
+#define CBA_DUPLICATE_SYMBOL 0x00000005
+
+/***********************************************************************
+ * Structures
+ */
+
+typedef struct _LOADED_IMAGE
+{
+ PSTR ModuleName;
+ HANDLE hFile;
+ PUCHAR MappedAddress;
+ PIMAGE_NT_HEADERS FileHeader;
+ PIMAGE_SECTION_HEADER LastRvaSection;
+ ULONG NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+ ULONG Characteristics;
+ BOOLEAN fSystemImage;
+ BOOLEAN fDOSImage;
+ BOOLEAN fReadOnly;
+ UCHAR Version;
+ LIST_ENTRY Links;
+ ULONG SizeOfImage;
+} LOADED_IMAGE, *PLOADED_IMAGE;
+
+typedef struct _API_VERSION {
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ USHORT Revision;
+ USHORT Reserved;
+} API_VERSION, *LPAPI_VERSION;
+
+typedef struct _IMAGE_DEBUG_INFORMATION {
+ LIST_ENTRY List;
+ DWORD Size;
+ PVOID MappedBase;
+ USHORT Machine;
+ USHORT Characteristics;
+ DWORD CheckSum;
+ DWORD ImageBase;
+ DWORD SizeOfImage;
+
+ DWORD NumberOfSections;
+ PIMAGE_SECTION_HEADER Sections;
+
+ DWORD ExportedNamesSize;
+ PSTR ExportedNames;
+
+ DWORD NumberOfFunctionTableEntries;
+ PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
+ DWORD LowestFunctionStartingAddress;
+ DWORD HighestFunctionEndingAddress;
+
+ DWORD NumberOfFpoTableEntries;
+ PFPO_DATA FpoTableEntries;
+
+ DWORD SizeOfCoffSymbols;
+ PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
+
+ DWORD SizeOfCodeViewSymbols;
+ PVOID CodeViewSymbols;
+
+ PSTR ImageFilePath;
+ PSTR ImageFileName;
+ PSTR DebugFilePath;
+
+ DWORD TimeDateStamp;
+
+ BOOL RomImage;
+ PIMAGE_DEBUG_DIRECTORY DebugDirectory;
+ DWORD NumberOfDebugDirectories;
+
+ DWORD Reserved[3];
+} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
+
+typedef struct _ADDRESS {
+ DWORD Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS, *LPADDRESS;
+
+typedef struct _ADDRESS64 {
+ DWORD64 Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS64, *LPADDRESS64;
+
+typedef struct _KDHELP {
+ DWORD Thread;
+ DWORD ThCallbackStack;
+ DWORD NextCallback;
+ DWORD FramePointer;
+ DWORD KiCallUserMode;
+ DWORD KeUserCallbackDispatcher;
+ DWORD SystemRangeStart;
+} KDHELP, *PKDHELP;
+
+typedef struct _KDHELP64 {
+ DWORD64 Thread;
+ DWORD ThCallbackStack;
+ DWORD ThCallbackBStore;
+ DWORD NextCallback;
+ DWORD FramePointer;
+ DWORD64 KiCallUserMode;
+ DWORD64 KeUserCallbackDispatcher;
+ DWORD64 SystemRangeStart;
+ DWORD64 Reserved[8];
+} KDHELP64, *PKDHELP64;
+
+typedef struct _STACKFRAME {
+ ADDRESS AddrPC;
+ ADDRESS AddrReturn;
+ ADDRESS AddrFrame;
+ ADDRESS AddrStack;
+ PVOID FuncTableEntry;
+ DWORD Params[4];
+ BOOL Far;
+ BOOL Virtual;
+ DWORD Reserved[3];
+ KDHELP KdHelp;
+} STACKFRAME, *LPSTACKFRAME;
+
+typedef struct _STACKFRAME64 {
+ ADDRESS64 AddrPC;
+ ADDRESS64 AddrReturn;
+ ADDRESS64 AddrFrame;
+ ADDRESS64 AddrStack;
+ ADDRESS64 AddrBStore;
+ PVOID FuncTableEntry;
+ DWORD64 Params[4];
+ BOOL Far;
+ BOOL Virtual;
+ DWORD64 Reserved[3];
+ KDHELP64 KdHelp;
+} STACKFRAME64, *LPSTACKFRAME64;
+
+typedef struct _SOURCEFILE {
+ DWORD64 ModBase;
+ PCHAR FileName;
+} SOURCEFILE, *PSOURCEFILE;
+
+typedef struct _SOURCEFILEW
+{
+ DWORD64 ModBase;
+ PWSTR FileName;
+} SOURCEFILEW, *PSOURCEFILEW;
+
+typedef struct _IMAGEHLP_STACK_FRAME
+{
+ DWORD InstructionOffset;
+ DWORD ReturnOffset;
+ DWORD FrameOffset;
+ DWORD StackOffset;
+ DWORD BackingStoreOffset;
+ DWORD FuncTableEntry;
+ DWORD Params[4];
+ DWORD Reserved[5];
+ DWORD Virtual;
+ DWORD Reserved2;
+} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
+
+typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
+
+typedef struct _IMAGEHLP_SYMBOL {
+ DWORD SizeOfStruct;
+ DWORD Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ CHAR Name[ANYSIZE_ARRAY];
+} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
+
+typedef struct _IMAGEHLP_SYMBOLW {
+ DWORD SizeOfStruct;
+ DWORD Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ WCHAR Name[ANYSIZE_ARRAY];
+} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
+
+typedef struct _IMAGEHLP_SYMBOL64
+{
+ DWORD SizeOfStruct;
+ DWORD64 Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ CHAR Name[1];
+} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
+
+typedef struct _IMAGEHLP_SYMBOLW64
+{
+ DWORD SizeOfStruct;
+ DWORD64 Address;
+ DWORD Size;
+ DWORD Flags;
+ DWORD MaxNameLength;
+ WCHAR Name[1];
+} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
+
+typedef struct _IMAGEHLP_MODULE {
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ CHAR ModuleName[32];
+ CHAR ImageName[256];
+ CHAR LoadedImageName[256];
+} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
+
+typedef struct _IMAGEHLP_MODULEW {
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ WCHAR ModuleName[32];
+ WCHAR ImageName[256];
+ WCHAR LoadedImageName[256];
+} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
+
+typedef struct _IMAGEHLP_MODULE64
+{
+ DWORD SizeOfStruct;
+ DWORD64 BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ CHAR ModuleName[32];
+ CHAR ImageName[256];
+ CHAR LoadedImageName[256];
+ CHAR LoadedPdbName[256];
+ DWORD CVSig;
+ CHAR CVData[MAX_PATH*3];
+ DWORD PdbSig;
+ GUID PdbSig70;
+ DWORD PdbAge;
+ BOOL PdbUnmatched;
+ BOOL DbgUnmatched;
+ BOOL LineNumbers;
+ BOOL GlobalSymbols;
+ BOOL TypeInfo;
+ BOOL SourceIndexed;
+ BOOL Publics;
+} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
+
+typedef struct _IMAGEHLP_MODULEW64
+{
+ DWORD SizeOfStruct;
+ DWORD64 BaseOfImage;
+ DWORD ImageSize;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD NumSyms;
+ SYM_TYPE SymType;
+ WCHAR ModuleName[32];
+ WCHAR ImageName[256];
+ WCHAR LoadedImageName[256];
+ WCHAR LoadedPdbName[256];
+ DWORD CVSig;
+ WCHAR CVData[MAX_PATH*3];
+ DWORD PdbSig;
+ GUID PdbSig70;
+ DWORD PdbAge;
+ BOOL PdbUnmatched;
+ BOOL DbgUnmatched;
+ BOOL LineNumbers;
+ BOOL GlobalSymbols;
+ BOOL TypeInfo;
+ BOOL SourceIndexed;
+ BOOL Publics;
+} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
+
+typedef struct _IMAGEHLP_LINE {
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PCHAR FileName;
+ DWORD Address;
+} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
+
+typedef struct _IMAGEHLP_LINEW {
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PWSTR FileName;
+ DWORD Address;
+} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
+
+typedef struct _IMAGEHLP_LINE64 {
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PCHAR FileName;
+ DWORD64 Address;
+} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
+
+typedef struct _IMAGEHLP_LINEW64 {
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD LineNumber;
+ PWSTR FileName;
+ DWORD64 Address;
+} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
+
+typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
+ DWORD SizeOfStruct;
+ DWORD BaseOfImage;
+ DWORD CheckSum;
+ DWORD TimeDateStamp;
+ CHAR FileName[MAX_PATH];
+ BOOLEAN Reparse;
+} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+
+typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
+ DWORD SizeOfStruct;
+ DWORD NumberOfDups;
+ PIMAGEHLP_SYMBOL Symbol;
+ ULONG SelectedSymbol;
+} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
+
+typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
+{
+ TI_GET_SYMTAG,
+ TI_GET_SYMNAME,
+ TI_GET_LENGTH,
+ TI_GET_TYPE,
+ TI_GET_TYPEID,
+ TI_GET_BASETYPE,
+ TI_GET_ARRAYINDEXTYPEID,
+ TI_FINDCHILDREN,
+ TI_GET_DATAKIND,
+ TI_GET_ADDRESSOFFSET,
+ TI_GET_OFFSET,
+ TI_GET_VALUE,
+ TI_GET_COUNT,
+ TI_GET_CHILDRENCOUNT,
+ TI_GET_BITPOSITION,
+ TI_GET_VIRTUALBASECLASS,
+ TI_GET_VIRTUALTABLESHAPEID,
+ TI_GET_VIRTUALBASEPOINTEROFFSET,
+ TI_GET_CLASSPARENTID,
+ TI_GET_NESTED,
+ TI_GET_SYMINDEX,
+ TI_GET_LEXICALPARENT,
+ TI_GET_ADDRESS,
+ TI_GET_THISADJUST,
+ TI_GET_UDTKIND,
+ TI_IS_EQUIV_TO,
+ TI_GET_CALLING_CONVENTION,
+} IMAGEHLP_SYMBOL_TYPE_INFO;
+
+#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001
+#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002
+typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
+{
+ ULONG SizeOfStruct;
+ ULONG Flags;
+ ULONG NumIds;
+ PULONG TypeIds;
+ ULONG64 TagFilter;
+ ULONG NumReqs;
+ IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
+ PULONG_PTR ReqOffsets;
+ PULONG ReqSizes;
+ ULONG_PTR ReqStride;
+ ULONG_PTR BufferSize;
+ PVOID Buffer;
+ ULONG EntriesMatched;
+ ULONG EntriesFilled;
+ ULONG64 TagsFound;
+ ULONG64 AllReqsValid;
+ ULONG NumReqsValid;
+ PULONG64 ReqsValid;
+} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
+
+#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
+#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
+#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
+#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
+#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
+#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
+#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
+#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
+
+#define MAX_SYM_NAME 2000
+
+typedef struct _SYMBOL_INFO {
+ ULONG SizeOfStruct;
+ ULONG TypeIndex;
+ ULONG64 Reserved[2];
+ ULONG info;
+ ULONG Size;
+ ULONG64 ModBase;
+ ULONG Flags;
+ ULONG64 Value;
+ ULONG64 Address;
+ ULONG Register;
+ ULONG Scope;
+ ULONG Tag;
+ ULONG NameLen;
+ ULONG MaxNameLen;
+ CHAR Name[1];
+} SYMBOL_INFO, *PSYMBOL_INFO;
+
+typedef struct _SYMBOL_INFOW
+{
+ ULONG SizeOfStruct;
+ ULONG TypeIndex;
+ ULONG64 Reserved[2];
+ ULONG Index;
+ ULONG Size;
+ ULONG64 ModBase;
+ ULONG Flags;
+ ULONG64 Value;
+ ULONG64 Address;
+ ULONG Register;
+ ULONG Scope;
+ ULONG Tag;
+ ULONG NameLen;
+ ULONG MaxNameLen;
+ WCHAR Name[1];
+} SYMBOL_INFOW, *PSYMBOL_INFOW;
+
+typedef struct _SYMBOL_INFO_PACKAGE
+{
+ SYMBOL_INFO si;
+ CHAR name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
+
+typedef struct _SYMBOL_INFO_PACKAGEW
+{
+ SYMBOL_INFOW si;
+ WCHAR name[MAX_SYM_NAME+1];
+} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
+
+#define DBHHEADER_DEBUGDIRS 0x1
+typedef struct _MODLOAD_DATA
+{
+ DWORD ssize;
+ DWORD ssig;
+ PVOID data;
+ DWORD size;
+ DWORD flags;
+} MODLOAD_DATA, *PMODLOAD_DATA;
+
+typedef struct _SRCCODEINFO
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD64 ModBase;
+ CHAR Obj[MAX_PATH+1];
+ CHAR FileName[MAX_PATH+1];
+ DWORD LineNumber;
+ DWORD64 Address;
+} SRCCODEINFO, *PSRCCODEINFO;
+
+typedef struct _SRCCODEINFOW
+{
+ DWORD SizeOfStruct;
+ PVOID Key;
+ DWORD64 ModBase;
+ WCHAR Obj[MAX_PATH+1];
+ WCHAR FileName[MAX_PATH+1];
+ DWORD LineNumber;
+ DWORD64 Address;
+} SRCCODEINFOW, *PSRCCODEINFOW;
+
+/***********************************************************************
+ * Callbacks
+ */
+
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(
+ PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(
+ PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
+ PCSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize,
+ PVOID UserContext
+);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(
+ PCSTR, DWORD64, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(
+ PCWSTR, DWORD64, ULONG, PVOID
+);
+
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(
+ HANDLE, PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(
+ HANDLE, PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(
+ HANDLE, PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(
+ HANDLE, PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(
+ PCSTR, PVOID
+);
+typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(
+ PCWSTR, PVOID
+);
+
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE)(
+ IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,
+ ULONG_PTR Va, ULONG_PTR Parameter
+);
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE32)(
+ IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,
+ ULONG Va, ULONG_PTR Parameter
+);
+typedef BOOL (CALLBACK *PIMAGEHLP_STATUS_ROUTINE64)(
+ IMAGEHLP_STATUS_REASON Reason, PCSTR ImageName, PCSTR DllName,
+ ULONG64 Va, ULONG_PTR Parameter
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(
+ PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(
+ PSYMBOL_INFOW pSymInfo, ULONG SymbolSize, PVOID UserContext
+);
+
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(
+ PSRCCODEINFO, PVOID
+);
+typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(
+ PSRCCODEINFOW, PVOID
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(
+ PSOURCEFILE pSourceFile, PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(
+ PSOURCEFILEW pSourceFile, PVOID UserContext
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
+ PCSTR ModuleName, ULONG BaseOfDll, PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(
+ PCSTR, DWORD64, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(
+ PCWSTR, DWORD64, PVOID
+);
+
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
+ PCSTR, ULONG, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(
+ PCWSTR, ULONG, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(
+ PCSTR, DWORD64, ULONG, PVOID
+);
+typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(
+ PCWSTR, DWORD64, ULONG, PVOID
+);
+
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
+ HANDLE, DWORD, PVOID
+);
+typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(
+ HANDLE, ULONG64, ULONG64
+);
+
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
+ HANDLE hProcess, ULONG ActionCode, PVOID CallbackData,
+ PVOID UserContext
+);
+typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(
+ HANDLE, ULONG, ULONG64, ULONG64
+);
+
+typedef BOOL (CALLBACK *DIGEST_FUNCTION)(
+ DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength
+);
+
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(
+ HANDLE hProcess, DWORD lpBaseAddress, PVOID lpBuffer,
+ DWORD nSize, PDWORD lpNumberOfBytesRead
+);
+
+typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(
+ HANDLE hProcess, DWORD64 lpBaseAddress, PVOID lpBuffer,
+ DWORD nSize, LPDWORD lpNumberOfBytesRead
+);
+
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(
+ HANDLE hProcess, DWORD AddrBase
+);
+
+typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
+ HANDLE hProcess, DWORD64 AddrBase
+);
+
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(
+ HANDLE hProcess, DWORD ReturnAddress);
+
+typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(
+ HANDLE hProcess, DWORD64 ReturnAddress);
+
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(
+ HANDLE hProcess, HANDLE hThread, LPADDRESS lpaddr
+);
+
+typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(
+ HANDLE hProcess, HANDLE hThread, LPADDRESS64 lpaddr
+);
+
+
+/***********************************************************************
+ * Functions
+ */
+
+BOOL WINAPI BindImage(
+ PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath
+);
+BOOL WINAPI BindImageEx(
+ DWORD Flags, PCSTR ImageName, PCSTR DllPath, PCSTR SymbolPath,
+ PIMAGEHLP_STATUS_ROUTINE StatusRoutine
+);
+PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
+ LPVOID BaseAddress, DWORD FileLength,
+ LPDWORD HeaderSum, LPDWORD CheckSum
+);
+BOOL WINAPI EnumDirTree(
+ HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID
+);
+BOOL WINAPI EnumDirTreeW(
+ HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID
+);
+BOOL WINAPI EnumerateLoadedModules(
+ HANDLE hProcess,
+ PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
+ PVOID UserContext
+);
+BOOL WINAPI EnumerateLoadedModules64(
+ HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID
+);
+BOOL WINAPI EnumerateLoadedModulesW64(
+ HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID
+);
+HANDLE WINAPI FindDebugInfoFile(
+ PCSTR FileName, PCSTR SymbolPath, PSTR DebugFilePath
+);
+HANDLE WINAPI FindDebugInfoFileEx(
+ PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID
+);
+HANDLE WINAPI FindDebugInfoFileExW(
+ PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID
+);
+HANDLE WINAPI FindExecutableImage(
+ PCSTR, PCSTR, PSTR
+);
+HANDLE WINAPI FindExecutableImageEx(
+ PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID
+);
+HANDLE WINAPI FindExecutableImageExW(
+ PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID
+);
+BOOL WINAPI FindFileInPath(
+ HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+ PSTR, PFINDFILEINPATHCALLBACK, PVOID
+);
+BOOL WINAPI GetImageConfigInformation(
+ PLOADED_IMAGE LoadedImage,
+ PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
+);
+DWORD WINAPI GetImageUnusedHeaderBytes(
+ PLOADED_IMAGE LoadedImage,
+ LPDWORD SizeUnusedHeaderBytes
+);
+DWORD WINAPI GetTimestampForLoadedLibrary(
+ HMODULE Module
+);
+BOOL WINAPI ImageAddCertificate(
+ HANDLE FileHandle, LPWIN_CERTIFICATE Certificate, PDWORD Index
+);
+PVOID WINAPI ImageDirectoryEntryToData(
+ PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size
+);
+BOOL WINAPI ImageEnumerateCertificates(
+ HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount,
+ PDWORD Indices, DWORD IndexCount
+);
+BOOL WINAPI ImageGetCertificateData(
+ HANDLE FileHandle, DWORD CertificateIndex,
+ LPWIN_CERTIFICATE Certificate, PDWORD RequiredLength
+);
+BOOL WINAPI ImageGetCertificateHeader(
+ HANDLE FileHandle, DWORD CertificateIndex,
+ LPWIN_CERTIFICATE Certificateheader
+);
+BOOL WINAPI ImageGetDigestStream(
+ HANDLE FileHandle, DWORD DigestLevel,
+ DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle
+);
+PLOADED_IMAGE WINAPI ImageLoad(
+ PCSTR DllName, PCSTR DllPath
+);
+PIMAGE_NT_HEADERS WINAPI ImageNtHeader(
+ PVOID Base
+);
+BOOL WINAPI ImageRemoveCertificate(
+ HANDLE FileHandle, DWORD Index
+);
+PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(
+ PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva
+);
+PVOID WINAPI ImageRvaToVa(
+ PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,
+ PIMAGE_SECTION_HEADER *LastRvaSection
+);
+BOOL WINAPI ImageUnload(
+ PLOADED_IMAGE LoadedImage
+);
+LPAPI_VERSION WINAPI ImagehlpApiVersion(
+ void
+);
+LPAPI_VERSION WINAPI ImagehlpApiVersionEx(
+ LPAPI_VERSION AppVersion
+);
+BOOL WINAPI MakeSureDirectoryPathExists(
+ PCSTR DirPath
+);
+BOOL WINAPI MapAndLoad(
+ PCSTR ImageName, PCSTR DllPath, PLOADED_IMAGE LoadedImage,
+ BOOL DotDll, BOOL ReadOnly
+);
+PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(
+ HANDLE FileHandle, PCSTR FileName,
+ PCSTR SymbolPath, ULONG ImageBase
+);
+DWORD WINAPI MapFileAndCheckSumA(
+ PCSTR Filename, PDWORD HeaderSum, PDWORD CheckSum
+);
+DWORD WINAPI MapFileAndCheckSumW(
+ PCWSTR Filename, PDWORD HeaderSum, PDWORD CheckSum
+);
+BOOL WINAPI ReBaseImage(
+ PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase,
+ BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
+ ULONG *OldImageSize, ULONG_PTR *OldImageBase, ULONG *NewImageSize,
+ ULONG_PTR *NewImageBase, ULONG TimeStamp
+);
+BOOL WINAPI ReBaseImage64(
+ PCSTR CurrentImageName, PCSTR SymbolPath, BOOL fReBase,
+ BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
+ ULONG *OldImageSize, ULONG64 *OldImageBase, ULONG *NewImageSize,
+ ULONG64 *NewImageBase, ULONG TimeStamp
+);
+BOOL WINAPI RemovePrivateCvSymbolic(
+ PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize
+);
+BOOL WINAPI SearchTreeForFile(
+ PCSTR RootPath, PCSTR InputPathName, PSTR OutputPathBuffer
+);
+BOOL WINAPI SearchTreeForFileW(
+ PCWSTR RootPath, PCWSTR InputPathName, PWSTR OutputPathBuffer
+);
+BOOL WINAPI SetImageConfigInformation(
+ PLOADED_IMAGE LoadedImage,
+ PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
+);
+BOOL WINAPI SplitSymbols(
+ PSTR ImageName, PCSTR SymbolsPath,
+ PSTR SymbolFilePath, ULONG Flags
+);
+BOOL WINAPI StackWalk(
+ DWORD MachineType, HANDLE hProcess, HANDLE hThread,
+ LPSTACKFRAME StackFrame, PVOID ContextRecord,
+ PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
+ PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
+ PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
+ PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
+);
+BOOL WINAPI StackWalk64(
+ DWORD MachineType, HANDLE hProcess, HANDLE hThread,
+ LPSTACKFRAME64 StackFrame, PVOID ContextRecord,
+ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
+ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
+ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
+ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress
+);
+BOOL WINAPI SymAddSymbol(
+ HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD
+);
+BOOL WINAPI SymAddSymbolW(
+ HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD
+);
+BOOL WINAPI SymCleanup(
+ HANDLE hProcess
+);
+BOOL WINAPI SymDeleteSymbol(
+ HANDLE, ULONG64, PCSTR, DWORD64, DWORD
+);
+BOOL WINAPI SymDeleteSymbolW(
+ HANDLE, ULONG64, PCWSTR, DWORD64, DWORD
+);
+BOOL WINAPI SymEnumerateModules(
+ HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
+ PVOID UserContext
+);
+BOOL WINAPI SymEnumerateModules64(
+ HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID
+);
+BOOL WINAPI SymEnumerateModulesW64(
+ HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID
+);
+BOOL WINAPI SymEnumerateSymbols(
+ HANDLE hProcess, DWORD BaseOfDll,
+ PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumerateSymbolsW(
+ HANDLE hProcess, DWORD BaseOfDll,
+ PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumerateSymbols64(
+ HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID
+);
+BOOL WINAPI SymEnumerateSymbolsW64(
+ HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID
+);
+BOOL WINAPI SymEnumLines(
+ HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumLinesW(
+ HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID
+);
+BOOL WINAPI SymEnumSourceFiles(
+ HANDLE hProcess, ULONG64 ModBase, PCSTR Mask,
+ PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles, PVOID UserContext
+);
+BOOL WINAPI SymEnumSourceFilesW(
+ HANDLE hProcess, ULONG64 ModBase, PCWSTR Mask,
+ PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles, PVOID UserContext
+);
+BOOL WINAPI SymEnumSourceLines(
+ HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumSourceLinesW(
+ HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID
+);
+BOOL WINAPI SymEnumSymbols(
+ HANDLE hProcess, DWORD BaseOfDll, PCSTR Mask,
+ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumSymbolsW(
+ HANDLE hProcess, DWORD BaseOfDll, PCWSTR Mask,
+ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext
+);
+BOOL WINAPI SymEnumSymbolsForAddr(
+ HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumSymbolsForAddrW(
+ HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID
+);
+BOOL WINAPI SymEnumTypes(
+ HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID
+);
+BOOL WINAPI SymEnumTypesW(
+ HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID
+);
+HANDLE WINAPI SymFindExecutableImage(
+ HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID
+);
+HANDLE WINAPI SymFindExecutableImageW(
+ HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID
+);
+BOOL WINAPI SymFindFileInPath(
+ HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
+ PSTR, PFINDFILEINPATHCALLBACK, PVOID
+);
+BOOL WINAPI SymFindFileInPathW(
+ HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
+ PWSTR, PFINDFILEINPATHCALLBACKW, PVOID
+);
+BOOL WINAPI SymFromAddr(
+ HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*
+);
+BOOL WINAPI SymFromAddrW(
+ HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*
+);
+BOOL WINAPI SymFromIndex(
+ HANDLE, ULONG64, DWORD, PSYMBOL_INFO
+);
+BOOL WINAPI SymFromIndexW(
+ HANDLE, ULONG64, DWORD, PSYMBOL_INFOW
+);
+BOOL WINAPI SymFromName(
+ HANDLE, PCSTR, PSYMBOL_INFO
+);
+BOOL WINAPI SymFromNameW(
+ HANDLE, PCWSTR, PSYMBOL_INFOW
+);
+BOOL WINAPI SymFromToken(
+ HANDLE, DWORD64, DWORD, PSYMBOL_INFO
+);
+BOOL WINAPI SymFromTokenW(
+ HANDLE, DWORD64, DWORD, PSYMBOL_INFOW
+);
+PVOID WINAPI SymFunctionTableAccess(
+ HANDLE hProcess, DWORD AddrBase
+);
+PVOID WINAPI SymFunctionTableAccess64(
+ HANDLE hProcess, DWORD64 AddrBase
+);
+ULONG WINAPI SymGetFileLineOffsets64(
+ HANDLE, PCSTR, PCSTR, PDWORD64, ULONG
+);
+PCHAR WINAPI SymGetHomeDirectory(
+ DWORD, PSTR, size_t
+);
+PWSTR WINAPI SymGetHomeDirectoryW(
+ DWORD, PWSTR, size_t
+);
+BOOL WINAPI SymGetLineFromAddr(
+ HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLineFromAddrW(
+ HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW
+);
+BOOL WINAPI SymGetLineFromAddr64(
+ HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLineFromAddrW64(
+ HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64
+);
+BOOL WINAPI SymGetLineFromName(
+ HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLineFromName64(
+ HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLineFromNameW64(
+ HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64
+);
+BOOL WINAPI SymGetLineNext(
+ HANDLE, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLineNextW(
+ HANDLE, PIMAGEHLP_LINEW
+);
+BOOL WINAPI SymGetLineNext64(
+ HANDLE, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLineNextW64(
+ HANDLE, PIMAGEHLP_LINEW64
+);
+BOOL WINAPI SymGetLinePrev(
+ HANDLE, PIMAGEHLP_LINE
+);
+BOOL WINAPI SymGetLinePrevW(
+ HANDLE, PIMAGEHLP_LINEW
+);
+BOOL WINAPI SymGetLinePrev64(
+ HANDLE, PIMAGEHLP_LINE64
+);
+BOOL WINAPI SymGetLinePrevW64(
+ HANDLE, PIMAGEHLP_LINEW64
+);
+DWORD WINAPI SymGetModuleBase(
+ HANDLE hProcess, DWORD dwAddr
+);
+BOOL WINAPI SymGetModuleInfo(
+ HANDLE hProcess, DWORD dwAddr,
+ PIMAGEHLP_MODULE ModuleInfo
+);
+BOOL WINAPI SymGetModuleInfoW(
+ HANDLE, DWORD, PIMAGEHLP_MODULEW
+);
+BOOL WINAPI SymGetModuleInfo64(
+ HANDLE, DWORD64, PIMAGEHLP_MODULE64
+);
+BOOL WINAPI SymGetModuleInfoW64(
+ HANDLE, DWORD64, PIMAGEHLP_MODULEW64
+);
+DWORD WINAPI SymGetOptions(
+ void
+);
+BOOL WINAPI SymGetScope(
+ HANDLE, ULONG64, DWORD, PSYMBOL_INFO
+);
+BOOL WINAPI SymGetScopeW(
+ HANDLE, ULONG64, DWORD, PSYMBOL_INFOW
+);
+BOOL WINAPI SymGetSearchPath(
+ HANDLE hProcess, PSTR szSearchPath, DWORD SearchPathLength
+);
+BOOL WINAPI SymGetSearchPathW(
+ HANDLE hProcess, PWSTR szSearchPath, DWORD SearchPathLength
+);
+BOOL WINAPI SymGetSourceFile(
+ HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileW(
+ HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileFromToken(
+ HANDLE, PVOID, PCSTR, PSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileFromTokenW(
+ HANDLE, PVOID, PCWSTR, PWSTR, DWORD
+);
+BOOL WINAPI SymGetSourceFileToken(
+ HANDLE, ULONG64, PCSTR, PVOID*, DWORD*
+);
+BOOL WINAPI SymGetSourceFileTokenW(
+ HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*
+);
+BOOL WINAPI SymGetSourceVarFromToken(
+ HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD
+);
+BOOL WINAPI SymGetSourceVarFromTokenW(
+ HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD
+);
+BOOL WINAPI SymGetSymFromAddr(
+ HANDLE hProcess, DWORD dwAddr,
+ PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymFromAddr64(
+ HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetSymFromName(
+ HANDLE hProcess, PCSTR Name, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymFromName64(
+ HANDLE, PCSTR, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetSymNext(
+ HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymNext64(
+ HANDLE, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetSymPrev(
+ HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
+);
+BOOL WINAPI SymGetSymPrev64(
+ HANDLE, PIMAGEHLP_SYMBOL64
+);
+BOOL WINAPI SymGetTypeFromName(
+ HANDLE, ULONG64, PCSTR, PSYMBOL_INFO
+);
+BOOL WINAPI SymGetTypeFromNameW(
+ HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW
+);
+BOOL WINAPI SymGetTypeInfo(
+ HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID
+);
+BOOL WINAPI SymGetTypeInfoEx(
+ HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS
+);
+BOOL WINAPI SymInitialize(
+ HANDLE hProcess, PCSTR UserSearchPath, BOOL fInvadeProcess
+);
+BOOL WINAPI SymInitializeW(
+ HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeProcess
+);
+DWORD WINAPI SymLoadModule(
+ HANDLE hProcess, HANDLE hFile, PCSTR ImageName, PCSTR ModuleName,
+ DWORD BaseOfDll, DWORD SizeOfDll
+);
+DWORD64 WINAPI SymLoadModule64(
+ HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD
+);
+DWORD64 WINAPI SymLoadModuleEx(
+ HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD
+);
+DWORD64 WINAPI SymLoadModuleExW(
+ HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD
+);
+BOOL WINAPI SymMatchFileName(
+ PCSTR, PCSTR, PSTR*, PSTR*
+);
+BOOL WINAPI SymMatchFileNameW(
+ PCWSTR, PCWSTR, PWSTR*, PWSTR*
+);
+BOOL WINAPI SymMatchString(
+ PCSTR, PCSTR, BOOL
+);
+BOOL WINAPI SymMatchStringA(
+ PCSTR, PCSTR, BOOL
+);
+BOOL WINAPI SymMatchStringW(
+ PCWSTR, PCWSTR, BOOL
+);
+BOOL WINAPI SymRegisterCallback(
+ HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
+ PVOID UserContext
+);
+BOOL WINAPI SymRegisterCallback64(
+ HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64
+);
+BOOL WINAPI SymRegisterCallbackW64(
+ HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64
+);
+BOOL WINAPI SymRegisterFunctionEntryCallback(
+ HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID
+);
+BOOL WINAPI SymRegisterFunctionEntryCallback64(
+ HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64
+);
+BOOL WINAPI SymSearch(
+ HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64,
+ PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD
+);
+BOOL WINAPI SymSearchW(
+ HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64,
+ PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD
+);
+DWORD WINAPI SymSetContext(
+ HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame,
+ PIMAGEHLP_CONTEXT Context
+);
+PCHAR WINAPI SymSetHomeDirectory(
+ HANDLE, PCSTR
+);
+PWSTR WINAPI SymSetHomeDirectoryW(
+ HANDLE, PCWSTR
+);
+DWORD WINAPI SymSetOptions(
+ DWORD SymOptions
+);
+BOOL WINAPI SymSetParentWindow(
+ HWND
+);
+BOOL WINAPI SymSetSearchPath(
+ HANDLE hProcess, PCSTR szSearchPath
+);
+BOOL WINAPI SymSetSearchPathW(
+ HANDLE hProcess, PCWSTR szSearchPath
+);
+BOOL WINAPI SymUnDName(
+ PIMAGEHLP_SYMBOL sym, PSTR UnDecName, DWORD UnDecNameLength
+);
+BOOL WINAPI SymUnDName64(
+ PIMAGEHLP_SYMBOL64, PSTR, DWORD
+);
+BOOL WINAPI SymUnloadModule(
+ HANDLE hProcess, DWORD BaseOfDll
+);
+BOOL WINAPI TouchFileTimes(
+ HANDLE FileHandle, LPSYSTEMTIME lpSystemTime
+);
+DWORD WINAPI UnDecorateSymbolName(
+ PCSTR DecoratedName, PSTR UnDecoratedName,
+ DWORD UndecoratedLength, DWORD Flags
+);
+DWORD WINAPI UnDecorateSymbolNameW(
+ PCWSTR DecoratedName, PWSTR UnDecoratedName,
+ DWORD UndecoratedLength, DWORD Flags
+);
+BOOL WINAPI UnMapAndLoad(
+ PLOADED_IMAGE LoadedImage
+);
+BOOL WINAPI UnmapDebugInformation(
+ PIMAGE_DEBUG_INFORMATION DebugInfo
+);
+BOOL WINAPI UpdateDebugInfoFile(
+ PCSTR ImageFileName, PCSTR SymbolPath,
+ PSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders
+);
+BOOL WINAPI UpdateDebugInfoFileEx(
+ PCSTR ImageFileName, PCSTR SymbolPath, PSTR DebugFilePath,
+ PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum
+);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_IMAGEHLP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h
new file mode 100644
index 00000000..64e8de8a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imm.h
@@ -0,0 +1,587 @@
+/*
+ * Declarations for IMM32
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IMM_H
+#define __WINE_IMM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef HANDLE HIMC;
+typedef HANDLE HIMCC;
+
+typedef struct tagREGISTERWORDA {
+ LPSTR lpReading;
+ LPSTR lpWord;
+} REGISTERWORDA, *PREGISTERWORDA, *NPREGISTERWORDA, *LPREGISTERWORDA;
+
+typedef struct tagREGISTERWORDW {
+ LPWSTR lpReading;
+ LPWSTR lpWord;
+} REGISTERWORDW, *PREGISTERWORDW, *NPREGISTERWORDW, *LPREGISTERWORDW;
+
+typedef int (CALLBACK *REGISTERWORDENUMPROCA)(LPCSTR, DWORD, LPCSTR, LPVOID);
+typedef int (CALLBACK *REGISTERWORDENUMPROCW)(LPCWSTR, DWORD, LPCWSTR, LPVOID);
+
+typedef struct tagCANDIDATEFORM
+{
+ DWORD dwIndex;
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} CANDIDATEFORM, *LPCANDIDATEFORM;
+
+typedef struct tagCANDIDATELIST
+{
+ DWORD dwSize;
+ DWORD dwStyle;
+ DWORD dwCount;
+ DWORD dwSelection;
+ DWORD dwPageStart;
+ DWORD dwPageSize;
+ DWORD dwOffset[1];
+} CANDIDATELIST, *LPCANDIDATELIST;
+
+typedef struct tagSTYLEBUFA
+{
+ DWORD dwStyle;
+ CHAR szDescription[32];
+} STYLEBUFA, *LPSTYLEBUFA;
+
+typedef struct tagSTYLEBUFW
+{
+ DWORD dwStyle;
+ WCHAR szDescription[32];
+} STYLEBUFW, *LPSTYLEBUFW;
+
+DECL_WINELIB_TYPE_AW(STYLEBUF)
+DECL_WINELIB_TYPE_AW(LPSTYLEBUF)
+
+typedef struct tagRECONVERTSTRING
+{
+ DWORD dwSize;
+ DWORD dwVersion;
+ DWORD dwStrLen;
+ DWORD dwStrOffset;
+ DWORD dwCompStrLen;
+ DWORD dwCompStrOffset;
+ DWORD dwTargetStrLen;
+ DWORD dwTargetStrOffset;
+} RECONVERTSTRING, *LPRECONVERTSTRING;
+
+
+#define IMEMENUITEM_STRING_SIZE 80
+
+typedef struct tagIMEMENUITEMINFOA
+{
+ UINT cbSize;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ CHAR szString[IMEMENUITEM_STRING_SIZE];
+ HBITMAP hbmpItem;
+} IMEMENUITEMINFOA, *LPIMEMENUITEMINFOA;
+
+typedef struct tagIMEMENUITEMINFOW
+{
+ UINT cbSize;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ WCHAR szString[IMEMENUITEM_STRING_SIZE];
+ HBITMAP hbmpItem;
+} IMEMENUITEMINFOW, *LPIMEMENUITEMINFOW;
+
+DECL_WINELIB_TYPE_AW(IMEMENUITEMINFO)
+DECL_WINELIB_TYPE_AW(LPIMEMENUITEMINFO)
+
+
+typedef struct _tagCOMPOSITIONFORM
+{
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} COMPOSITIONFORM, *LPCOMPOSITIONFORM;
+
+typedef BOOL (CALLBACK* IMCENUMPROC)(HIMC, LPARAM);
+
+typedef struct _tagIMECHARPOSITION
+{
+ DWORD dwSize;
+ DWORD dwCharPos;
+ POINT pt;
+ UINT cLineHeight;
+ RECT rcDocument;
+} IMECHARPOSITION, *LPIMECHARPOSITION;
+
+/* wParam for WM_IME_CONTROL */
+#define IMC_GETCANDIDATEPOS 0x0007
+#define IMC_SETCANDIDATEPOS 0x0008
+#define IMC_GETCOMPOSITIONFONT 0x0009
+#define IMC_SETCOMPOSITIONFONT 0x000A
+#define IMC_GETCOMPOSITIONWINDOW 0x000B
+#define IMC_SETCOMPOSITIONWINDOW 0x000C
+#define IMC_GETSTATUSWINDOWPOS 0x000F
+#define IMC_SETSTATUSWINDOWPOS 0x0010
+#define IMC_CLOSESTATUSWINDOW 0x0021
+#define IMC_OPENSTATUSWINDOW 0x0022
+
+/*
+ * wParam for WM_IME_CONTROL to the soft keyboard
+ * dwAction for ImmNotifyIME
+ */
+#define NI_OPENCANDIDATE 0x0010
+#define NI_CLOSECANDIDATE 0x0011
+#define NI_SELECTCANDIDATESTR 0x0012
+#define NI_CHANGECANDIDATELIST 0x0013
+#define NI_FINALIZECONVERSIONRESULT 0x0014
+#define NI_COMPOSITIONSTR 0x0015
+#define NI_SETCANDIDATE_PAGESTART 0x0016
+#define NI_SETCANDIDATE_PAGESIZE 0x0017
+#define NI_IMEMENUSELECTED 0x0018
+
+/* lParam for WM_IME_SETCONTEXT */
+#define ISC_SHOWUICANDIDATEWINDOW 0x00000001
+#define ISC_SHOWUICOMPOSITIONWINDOW 0x80000000
+#define ISC_SHOWUIGUIDELINE 0x40000000
+#define ISC_SHOWUIALLCANDIDATEWINDOW 0x0000000F
+#define ISC_SHOWUIALL 0xC000000F
+
+
+/* dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR */
+#define CPS_COMPLETE 0x0001
+#define CPS_CONVERT 0x0002
+#define CPS_REVERT 0x0003
+#define CPS_CANCEL 0x0004
+
+
+/* the modifiers of hot key */
+#define MOD_ALT 0x0001
+#define MOD_CONTROL 0x0002
+#define MOD_SHIFT 0x0004
+
+#define MOD_LEFT 0x8000
+#define MOD_RIGHT 0x4000
+
+#define MOD_ON_KEYUP 0x0800
+#define MOD_IGNORE_ALL_MODIFIER 0x0400
+
+
+/* Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F */
+#define IME_CHOTKEY_IME_NONIME_TOGGLE 0x10
+#define IME_CHOTKEY_SHAPE_TOGGLE 0x11
+#define IME_CHOTKEY_SYMBOL_TOGGLE 0x12
+
+/* Windows for Japanese Edition hot key ID from 0x30 - 0x4F */
+#define IME_JHOTKEY_CLOSE_OPEN 0x30
+
+/* Windows for Korean Edition hot key ID from 0x50 - 0x6F */
+#define IME_KHOTKEY_SHAPE_TOGGLE 0x50
+#define IME_KHOTKEY_HANJACONVERT 0x51
+#define IME_KHOTKEY_ENGLISH 0x52
+/* Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F */
+#define IME_THOTKEY_IME_NONIME_TOGGLE 0x70
+#define IME_THOTKEY_SHAPE_TOGGLE 0x71
+#define IME_THOTKEY_SYMBOL_TOGGLE 0x72
+
+/* direct switch hot key ID from 0x100 - 0x11F */
+#define IME_HOTKEY_DSWITCH_FIRST 0x100
+#define IME_HOTKEY_DSWITCH_LAST 0x11F
+
+/* IME private hot key from 0x200 - 0x21F */
+#define IME_HOTKEY_PRIVATE_FIRST 0x200
+#define IME_ITHOTKEY_RESEND_RESULTSTR 0x200
+#define IME_ITHOTKEY_PREVIOUS_COMPOSITION 0x201
+#define IME_ITHOTKEY_UISTYLE_TOGGLE 0x202
+#define IME_ITHOTKEY_RECONVERTSTRING 0x203
+#define IME_HOTKEY_PRIVATE_LAST 0x21F
+
+
+/*
+ * dwSystemInfoFlags bits
+ * parameter of ImmGetCompositionString
+ */
+#define GCS_COMPREADSTR 0x0001
+#define GCS_COMPREADATTR 0x0002
+#define GCS_COMPREADCLAUSE 0x0004
+#define GCS_COMPSTR 0x0008
+#define GCS_COMPATTR 0x0010
+#define GCS_COMPCLAUSE 0x0020
+#define GCS_CURSORPOS 0x0080
+#define GCS_DELTASTART 0x0100
+#define GCS_RESULTREADSTR 0x0200
+#define GCS_RESULTREADCLAUSE 0x0400
+#define GCS_RESULTSTR 0x0800
+#define GCS_RESULTCLAUSE 0x1000
+
+/* style bit flags for WM_IME_COMPOSITION */
+#define CS_INSERTCHAR 0x2000
+#define CS_NOMOVECARET 0x4000
+
+
+/*
+ * bits of fdwInit of INPUTCONTEXT
+ * IME version constants
+ */
+#define IMEVER_0310 0x0003000A
+#define IMEVER_0400 0x00040000
+
+
+/* IME property bits */
+#define IME_PROP_AT_CARET 0x00010000
+#define IME_PROP_SPECIAL_UI 0x00020000
+#define IME_PROP_CANDLIST_START_FROM_1 0x00040000
+#define IME_PROP_UNICODE 0x00080000
+#define IME_PROP_COMPLETE_ON_UNSELECT 0x00100000
+
+
+/* IME UICapability bits */
+#define UI_CAP_2700 0x00000001
+#define UI_CAP_ROT90 0x00000002
+#define UI_CAP_ROTANY 0x00000004
+/* ImmSetCompositionString Capability bits */
+#define SCS_CAP_COMPSTR 0x00000001
+#define SCS_CAP_MAKEREAD 0x00000002
+#define SCS_CAP_SETRECONVERTSTRING 0x00000004
+
+
+/* IME WM_IME_SELECT inheritance Capability bits */
+#define SELECT_CAP_CONVERSION 0x00000001
+#define SELECT_CAP_SENTENCE 0x00000002
+
+
+/* ID for deIndex of ImmGetGuideLine */
+#define GGL_LEVEL 0x00000001
+#define GGL_INDEX 0x00000002
+#define GGL_STRING 0x00000003
+#define GGL_PRIVATE 0x00000004
+
+/* ID for dwLevel of GUIDELINE Structure */
+#define GL_LEVEL_NOGUIDELINE 0x00000000
+#define GL_LEVEL_FATAL 0x00000001
+#define GL_LEVEL_ERROR 0x00000002
+#define GL_LEVEL_WARNING 0x00000003
+#define GL_LEVEL_INFORMATION 0x00000004
+
+/* ID for dwIndex of GUIDELINE Structure */
+#define GL_ID_UNKNOWN 0x00000000
+#define GL_ID_NOMODULE 0x00000001
+#define GL_ID_NODICTIONARY 0x00000010
+#define GL_ID_CANNOTSAVE 0x00000011
+#define GL_ID_NOCONVERT 0x00000020
+#define GL_ID_TYPINGERROR 0x00000021
+#define GL_ID_TOOMANYSTROKE 0x00000022
+#define GL_ID_READINGCONFLICT 0x00000023
+#define GL_ID_INPUTREADING 0x00000024
+#define GL_ID_INPUTRADICAL 0x00000025
+#define GL_ID_INPUTCODE 0x00000026
+#define GL_ID_INPUTSYMBOL 0x00000027
+#define GL_ID_CHOOSECANDIDATE 0x00000028
+#define GL_ID_REVERSECONVERSION 0x00000029
+#define GL_ID_PRIVATE_FIRST 0x00008000
+#define GL_ID_PRIVATE_LAST 0x0000FFFF
+
+/* ID for dwIndex of ImmGetProperty */
+#define IGP_GETIMEVERSION (DWORD)(-4)
+#define IGP_PROPERTY 0x00000004
+#define IGP_CONVERSION 0x00000008
+#define IGP_SENTENCE 0x0000000c
+#define IGP_UI 0x00000010
+#define IGP_SETCOMPSTR 0x00000014
+#define IGP_SELECT 0x00000018
+
+
+/* dwIndex for ImmSetCompositionString API */
+#define SCS_SETSTR (GCS_COMPREADSTR|GCS_COMPSTR)
+#define SCS_CHANGEATTR (GCS_COMPREADATTR|GCS_COMPATTR)
+#define SCS_CHANGECLAUSE (GCS_COMPREADCLAUSE|GCS_COMPCLAUSE)
+#define SCS_SETRECONVERTSTRING 0x00010000
+#define SCS_QUERYRECONVERTSTRING 0x00020000
+
+/* attribute for COMPOSITIONSTRING Structure */
+#define ATTR_INPUT 0x00
+#define ATTR_TARGET_CONVERTED 0x01
+#define ATTR_CONVERTED 0x02
+#define ATTR_TARGET_NOTCONVERTED 0x03
+#define ATTR_INPUT_ERROR 0x04
+#define ATTR_FIXEDCONVERTED 0x05
+
+
+/* bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW */
+#define CFS_DEFAULT 0x0000
+#define CFS_RECT 0x0001
+#define CFS_POINT 0x0002
+#define CFS_FORCE_POSITION 0x0020
+#define CFS_CANDIDATEPOS 0x0040
+#define CFS_EXCLUDE 0x0080
+
+/* conversion direction for ImmGetConversionList */
+#define GCL_CONVERSION 0x0001
+#define GCL_REVERSECONVERSION 0x0002
+#define GCL_REVERSE_LENGTH 0x0003
+
+
+/* bit field for conversion mode */
+#define IME_CMODE_ALPHANUMERIC 0x0000
+#define IME_CMODE_NATIVE 0x0001
+#define IME_CMODE_CHINESE IME_CMODE_NATIVE
+/* IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually. */
+#define IME_CMODE_HANGEUL IME_CMODE_NATIVE
+#define IME_CMODE_HANGUL IME_CMODE_NATIVE
+#define IME_CMODE_JAPANESE IME_CMODE_NATIVE
+#define IME_CMODE_KATAKANA 0x0002 /* only effect under IME_CMODE_NATIVE */
+#define IME_CMODE_LANGUAGE 0x0003
+#define IME_CMODE_FULLSHAPE 0x0008
+#define IME_CMODE_ROMAN 0x0010
+#define IME_CMODE_CHARCODE 0x0020
+#define IME_CMODE_HANJACONVERT 0x0040
+#define IME_CMODE_SOFTKBD 0x0080
+#define IME_CMODE_NOCONVERSION 0x0100
+#define IME_CMODE_EUDC 0x0200
+#define IME_CMODE_SYMBOL 0x0400
+#define IME_CMODE_FIXED 0x0800
+
+
+#define IME_SMODE_NONE 0x0000
+#define IME_SMODE_PLAURALCLAUSE 0x0001
+#define IME_SMODE_SINGLECONVERT 0x0002
+#define IME_SMODE_AUTOMATIC 0x0004
+#define IME_SMODE_PHRASEPREDICT 0x0008
+#define IME_SMODE_CONVERSATION 0x0010
+
+/* style of candidate */
+#define IME_CAND_UNKNOWN 0x0000
+#define IME_CAND_READ 0x0001
+#define IME_CAND_CODE 0x0002
+#define IME_CAND_MEANING 0x0003
+#define IME_CAND_RADICAL 0x0004
+#define IME_CAND_STROKE 0x0005
+
+
+/* wParam of report message WM_IME_NOTIFY */
+#define IMN_CLOSESTATUSWINDOW 0x0001
+#define IMN_OPENSTATUSWINDOW 0x0002
+#define IMN_CHANGECANDIDATE 0x0003
+#define IMN_CLOSECANDIDATE 0x0004
+#define IMN_OPENCANDIDATE 0x0005
+#define IMN_SETCONVERSIONMODE 0x0006
+#define IMN_SETSENTENCEMODE 0x0007
+#define IMN_SETOPENSTATUS 0x0008
+#define IMN_SETCANDIDATEPOS 0x0009
+#define IMN_SETCOMPOSITIONFONT 0x000A
+#define IMN_SETCOMPOSITIONWINDOW 0x000B
+#define IMN_SETSTATUSWINDOWPOS 0x000C
+#define IMN_GUIDELINE 0x000D
+#define IMN_PRIVATE 0x000E
+
+
+/* wParam of report message WM_IME_REQUEST */
+#define IMR_COMPOSITIONWINDOW 0x0001
+#define IMR_CANDIDATEWINDOW 0x0002
+#define IMR_COMPOSITIONFONT 0x0003
+#define IMR_RECONVERTSTRING 0x0004
+#define IMR_CONFIRMRECONVERTSTRING 0x0005
+#define IMR_QUERYCHARPOSITION 0x0006
+#define IMR_DOCUMENTFEED 0x0007
+
+
+/* error code of ImmGetCompositionString */
+#define IMM_ERROR_NODATA (-1)
+#define IMM_ERROR_GENERAL (-2)
+
+
+/* dialog mode of ImmConfigureIME */
+#define IME_CONFIG_GENERAL 1
+#define IME_CONFIG_REGISTERWORD 2
+#define IME_CONFIG_SELECTDICTIONARY 3
+
+/* dialog mode of ImmEscape */
+#define IME_ESC_QUERY_SUPPORT 0x0003
+#define IME_ESC_RESERVED_FIRST 0x0004
+#define IME_ESC_RESERVED_LAST 0x07FF
+#define IME_ESC_PRIVATE_FIRST 0x0800
+#define IME_ESC_PRIVATE_LAST 0x0FFF
+#define IME_ESC_SEQUENCE_TO_INTERNAL 0x1001
+#define IME_ESC_GET_EUDC_DICTIONARY 0x1003
+#define IME_ESC_SET_EUDC_DICTIONARY 0x1004
+#define IME_ESC_MAX_KEY 0x1005
+#define IME_ESC_IME_NAME 0x1006
+#define IME_ESC_SYNC_HOTKEY 0x1007
+#define IME_ESC_HANJA_MODE 0x1008
+#define IME_ESC_AUTOMATA 0x1009
+#define IME_ESC_PRIVATE_HOTKEY 0x100a
+#define IME_ESC_GETHELPFILENAME 0x100b
+
+
+/* style of word registration */
+#define IME_REGWORD_STYLE_EUDC 0x00000001
+#define IME_REGWORD_STYLE_USER_FIRST 0x80000000
+#define IME_REGWORD_STYLE_USER_LAST 0xFFFFFFFF
+
+
+/* dwFlags for ImmAssociateContextEx */
+#define IACE_CHILDREN 0x0001
+#define IACE_DEFAULT 0x0010
+#define IACE_IGNORENOCONTEXT 0x0020
+
+/* dwFlags for ImmGetImeMenuItems */
+#define IGIMIF_RIGHTMENU 0x0001
+
+/* dwType for ImmGetImeMenuItems */
+#define IGIMII_CMODE 0x0001
+#define IGIMII_SMODE 0x0002
+#define IGIMII_CONFIGURE 0x0004
+#define IGIMII_TOOLS 0x0008
+#define IGIMII_HELP 0x0010
+#define IGIMII_OTHER 0x0020
+#define IGIMII_INPUTTOOLS 0x0040
+
+/* fType of IMEMENUITEMINFO structure */
+#define IMFT_RADIOCHECK 0x00001
+#define IMFT_SEPARATOR 0x00002
+#define IMFT_SUBMENU 0x00004
+
+/* fState of IMEMENUITEMINFO structure */
+#define IMFS_GRAYED MFS_GRAYED
+#define IMFS_DISABLED MFS_DISABLED
+#define IMFS_CHECKED MFS_CHECKED
+#define IMFS_HILITE MFS_HILITE
+#define IMFS_ENABLED MFS_ENABLED
+#define IMFS_UNCHECKED MFS_UNCHECKED
+#define IMFS_UNHILITE MFS_UNHILITE
+#define IMFS_DEFAULT MFS_DEFAULT
+
+
+/*
+ * type of soft keyboard
+ * for Windows Traditional Chinese Edition
+ */
+#define SOFTKEYBOARD_TYPE_T1 0x0001
+/* for Windows Simplified Chinese Edition */
+#define SOFTKEYBOARD_TYPE_C1 0x0002
+
+
+HIMC WINAPI ImmAssociateContext(HWND, HIMC);
+BOOL WINAPI ImmAssociateContextEx(HWND, HIMC, DWORD);
+BOOL WINAPI ImmConfigureIMEA(HKL, HWND, DWORD, LPVOID);
+BOOL WINAPI ImmConfigureIMEW(HKL, HWND, DWORD, LPVOID);
+#define ImmConfigureIME WINELIB_NAME_AW(ImmConfigureIME)
+HIMC WINAPI ImmCreateContext(void);
+BOOL WINAPI ImmDestroyContext(HIMC hIMC);
+BOOL WINAPI ImmDisableIME(DWORD idThread);
+BOOL WINAPI ImmEnumInputContext(DWORD, IMCENUMPROC, LPARAM);
+UINT WINAPI ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID);
+UINT WINAPI ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
+#define ImmEnumRegisterWord WINELIB_NAME_AW(ImmEnumRegisterWord)
+LRESULT WINAPI ImmEscapeA(HKL, HIMC, UINT, LPVOID);
+LRESULT WINAPI ImmEscapeW(HKL, HIMC, UINT, LPVOID);
+#define ImmEscape WINELIB_NAME_AW(ImmEscape)
+DWORD WINAPI ImmGetCandidateListA(HIMC, DWORD, LPCANDIDATELIST, DWORD);
+DWORD WINAPI ImmGetCandidateListW(HIMC, DWORD, LPCANDIDATELIST, DWORD);
+#define ImmGetCandidateList WINELIB_NAME_AW(ImmGetCandidateList)
+DWORD WINAPI ImmGetCandidateListCountA(HIMC, LPDWORD);
+DWORD WINAPI ImmGetCandidateListCountW(HIMC, LPDWORD);
+#define ImmGetCandidateListCount WINELIB_NAME_AW(ImmGetCandidateListCount)
+BOOL WINAPI ImmGetCandidateWindow(HIMC, DWORD, LPCANDIDATEFORM);
+#if defined(_WINGDI_) && !defined(NOGDI)
+BOOL WINAPI ImmGetCompositionFontA(HIMC, LPLOGFONTA);
+BOOL WINAPI ImmGetCompositionFontW(HIMC, LPLOGFONTW);
+#define ImmGetCompositionFont WINELIB_NAME_AW(ImmGetCompositionFont)
+BOOL WINAPI ImmSetCompositionFontA(HIMC, LPLOGFONTA);
+BOOL WINAPI ImmSetCompositionFontW(HIMC, LPLOGFONTW);
+#define ImmSetCompositionFont WINELIB_NAME_AW(ImmSetCompositionFont)
+#endif
+LONG WINAPI ImmGetCompositionStringA(HIMC, DWORD, LPVOID, DWORD);
+LONG WINAPI ImmGetCompositionStringW(HIMC, DWORD, LPVOID, DWORD);
+#define ImmGetCompositionString WINELIB_NAME_AW(ImmGetCompositionString)
+BOOL WINAPI ImmGetCompositionWindow(HIMC, LPCOMPOSITIONFORM);
+HIMC WINAPI ImmGetContext(HWND);
+DWORD WINAPI ImmGetConversionListA(HKL, HIMC, LPCSTR, LPCANDIDATELIST, DWORD, UINT);
+DWORD WINAPI ImmGetConversionListW(HKL, HIMC, LPCWSTR, LPCANDIDATELIST, DWORD, UINT);
+#define ImmGetConversionList WINELIB_NAME_AW(ImmGetConversionList)
+BOOL WINAPI ImmGetConversionStatus(HIMC, LPDWORD, LPDWORD);
+HWND WINAPI ImmGetDefaultIMEWnd(HWND);
+UINT WINAPI ImmGetDescriptionA(HKL, LPSTR, UINT);
+UINT WINAPI ImmGetDescriptionW(HKL, LPWSTR, UINT);
+#define ImmGetDescription WINELIB_NAME_AW(ImmGetDescription)
+DWORD WINAPI ImmGetGuideLineA(HIMC, DWORD, LPSTR, DWORD);
+DWORD WINAPI ImmGetGuideLineW(HIMC, DWORD, LPWSTR, DWORD);
+#define ImmGetGuideLine WINELIB_NAME_AW(ImmGetGuideLine)
+UINT WINAPI ImmGetIMEFileNameA(HKL, LPSTR, UINT);
+UINT WINAPI ImmGetIMEFileNameW(HKL, LPWSTR, UINT);
+#define ImmGetIMEFileName WINELIB_NAME_AW(ImmGetIMEFileName)
+DWORD WINAPI ImmGetImeMenuItemsA(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD);
+DWORD WINAPI ImmGetImeMenuItemsW(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
+#define ImmGetImeMenuItems WINELIB_NAME_AW(ImmGetImeMenuItems)
+BOOL WINAPI ImmGetOpenStatus(HIMC);
+DWORD WINAPI ImmGetProperty(HKL, DWORD);
+UINT WINAPI ImmGetRegisterWordStyleA(HKL, UINT, LPSTYLEBUFA);
+UINT WINAPI ImmGetRegisterWordStyleW(HKL, UINT, LPSTYLEBUFW);
+#define ImmGetRegisterWordStyle WINELIB_NAME_AW(ImmGetRegisterWordStyle)
+BOOL WINAPI ImmGetStatusWindowPos(HIMC, LPPOINT);
+UINT WINAPI ImmGetVirtualKey(HWND);
+HKL WINAPI ImmInstallIMEA(LPCSTR, LPCSTR);
+HKL WINAPI ImmInstallIMEW(LPCWSTR, LPCWSTR);
+#define ImmInstallIME WINELIB_NAME_AW(ImmInstallIME)
+BOOL WINAPI ImmIsIME(HKL);
+BOOL WINAPI ImmIsUIMessageA(HWND, UINT, WPARAM, LPARAM);
+BOOL WINAPI ImmIsUIMessageW(HWND, UINT, WPARAM, LPARAM);
+#define ImmIsUIMessage WINELIB_NAME_AW(ImmIsUIMessage)
+BOOL WINAPI ImmNotifyIME(HIMC, DWORD, DWORD, DWORD);
+BOOL WINAPI ImmProcessKey(HWND, HKL, UINT, LPARAM, DWORD);
+BOOL WINAPI ImmRegisterWordA(HKL, LPCSTR, DWORD, LPCSTR);
+BOOL WINAPI ImmRegisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR);
+#define ImmRegisterWord WINELIB_NAME_AW(ImmRegisterWord)
+BOOL WINAPI ImmReleaseContext(HWND, HIMC);
+BOOL WINAPI ImmSetCandidateWindow(HIMC, LPCANDIDATEFORM);
+BOOL WINAPI ImmSetCompositionStringA(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
+BOOL WINAPI ImmSetCompositionStringW(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
+#define ImmSetCompositionString WINELIB_NAME_AW(ImmSetCompositionString)
+BOOL WINAPI ImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM);
+BOOL WINAPI ImmSetConversionStatus(HIMC, DWORD, DWORD);
+BOOL WINAPI ImmSetOpenStatus(HIMC, BOOL);
+BOOL WINAPI ImmSetStatusWindowPos(HIMC, LPPOINT);
+BOOL WINAPI ImmSimulateHotKey(HWND, DWORD);
+BOOL WINAPI ImmUnregisterWordA(HKL, LPCSTR, DWORD, LPCSTR);
+BOOL WINAPI ImmUnregisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR);
+#define ImmUnregisterWord WINELIB_NAME_AW(ImmUnregisterWord)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_IMM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl
new file mode 100644
index 00000000..0a9bbd52
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnact.idl
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2006 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+interface IImnAccount;
+
+cpp_quote("#ifndef HR_E")
+cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+cpp_quote("#ifndef HR_S")
+cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+
+typedef enum tagSMTPAUTHTYPE
+{
+ SMTP_AUTH_NONE,
+ SMTP_AUTH_SICILY,
+ SMTP_AUTH_USE_POP3ORIMAP_SETTINGS,
+ SMTP_AUTH_USE_SMTP_SETTINGS,
+} SMTPAUTHTYPE;
+
+const SHORT CCHMAX_ORG_NAME = 256;
+const SHORT CCHMAX_DISPLAY_NAME = 256;
+const SHORT CCHMAX_ACCOUNT_NAME = 256;
+const SHORT CCHMAX_SERVER_NAME = 256;
+const SHORT CCHMAX_PASSWORD = 256;
+const SHORT CCHMAX_USERNAME = 256;
+const SHORT CCHMAX_EMAIL_ADDRESS = 256;
+const SHORT CCHMAX_CONNECTOID = 256;
+const SHORT CCHMAX_SEARCH_BASE = 256;
+const SHORT CCHMAX_ROOT_FOLDER = 256;
+const SHORT CCHMAX_SIGNATURE = 16;
+const SHORT CCHMAX_SERVICE = 256;
+
+[
+ object,
+ uuid(0A06BD31-166F-11D0-81B9-00C04FD85AB4),
+ pointer_default(unique)
+]
+interface IImnAdviseAccount : IUnknown
+{
+ typedef enum
+ {
+ ACCT_NEWS,
+ ACCT_MAIL,
+ ACCT_DIR_SERV,
+ ACCT_LAST
+ } ACCTTYPE;
+
+ typedef struct tagAccountContext
+ {
+ ACCTTYPE AcctType;
+ LPSTR pszAccountID;
+ LPSTR pszOldName;
+ DWORD dwServerType;
+ } ACTX;
+
+ HRESULT AdviseAccount(
+ [in] DWORD dwAdviseType,
+ [in] ACTX *pAcctCtx);
+}
+
+[
+ object,
+ uuid(8D0AED11-1638-11D0-81B9-00C04FD85AB4),
+ pointer_default(unique)
+]
+interface IImnAdviseMigrateServer : IUnknown
+{
+ HRESULT MigrateServer(
+ [in] DWORD dwSrvType,
+ [in] IImnAccount *pAccount);
+}
+
+[
+ object,
+ uuid(FD465483-1384-11D0-ABBD-0020AFDFD10A),
+ pointer_default(unique)
+]
+interface IImnEnumAccounts : IUnknown
+{
+ HRESULT GetCount(
+ [out] ULONG *pcItems);
+
+ HRESULT SortByAccountName();
+
+ HRESULT GetNext(
+ [out] IImnAccount **ppAccount);
+
+ HRESULT Reset();
+}
+
+[
+ object,
+ uuid(FD465481-1384-11D0-ABBD-0020AFDFD10A),
+ pointer_default(unique)
+]
+interface IImnAccountManager : IUnknown
+{
+ typedef struct tagACCTLISTINFO
+ {
+ DWORD cbSize;
+ ACCTTYPE AcctTypeInit;
+ DWORD dwAcctFlags;
+ DWORD dwFlags;
+ } ACCTLISTINFO;
+
+ HRESULT Init(
+ [in] IImnAdviseMigrateServer *pAdviseMigrateServer);
+
+ HRESULT CreateAccountObject(
+ [in] ACCTTYPE AcctType,
+ [out] IImnAccount **ppAccount);
+
+ HRESULT Enumerate(
+ [in] DWORD dwSrvTypes,
+ [out] IImnEnumAccounts **ppEnumAccounts);
+
+ HRESULT GetAccountCount(
+ [in] ACCTTYPE AcctType,
+ [out] ULONG *pcServers);
+
+ HRESULT FindAccount(
+ [in] DWORD dwPropTag,
+ [in] LPCSTR pszSearchData,
+ [out] IImnAccount **ppAccount);
+
+ HRESULT GetDefaultAccountName(
+ [in] ACCTTYPE AcctType,
+ [in,ref] LPSTR pszAccount,
+ [in] ULONG cchMax);
+
+ HRESULT ProcessNotification(
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT ValidateDefaultSendAccount();
+
+ HRESULT AccountListDialog(
+ [in] HWND hwnd,
+ [in] ACCTLISTINFO *pinfo);
+
+ HRESULT Advise(
+ [in] IImnAdviseAccount *pAdviseAccount,
+ [out] DWORD *pdwConnection);
+
+ HRESULT Unadvise(
+ [in] DWORD dwConnection);
+
+ HRESULT GetUniqueAccountName(
+ [in] LPSTR szName,
+ [in] UINT cch);
+
+ HRESULT InitEx(
+ [in] IImnAdviseMigrateServer *pAdviseMigrateServer,
+ [in] DWORD dwFlags);
+}
+
+[
+ object,
+ uuid(C43DFC6F-62BB-11D2-A727-00C04F79E7C8),
+ pointer_default(unique)
+]
+interface IImnAccountManager2 : IImnAccountManager
+{
+ HRESULT InitUser(
+ [in] IImnAdviseMigrateServer *pAdviseMigrateServer,
+ [in] REFGUID rguidID,
+ [in] DWORD dwFlags);
+
+ HRESULT GetIncompleteAccount(
+ [in] ACCTTYPE AcctType,
+ [in,ref] LPSTR pszAccountId,
+ [in] ULONG cchMax);
+
+ HRESULT SetIncompleteAccount(
+ [in] ACCTTYPE AcctType,
+ [in] LPCSTR pszAccountId);
+}
+
+[
+ object,
+ uuid(FD465484-1384-11D0-ABBD-0020AFDFD10A),
+ pointer_default(unique)
+]
+interface IPropertyContainer : IUnknown
+{
+ typedef enum
+ {
+ TYPE_ERROR = 1000,
+ TYPE_DWORD,
+ TYPE_LONG,
+ TYPE_WORD,
+ TYPE_SHORT,
+ TYPE_BYTE,
+ TYPE_CHAR,
+ TYPE_FILETIME,
+ TYPE_STRING,
+ TYPE_BINARY,
+ TYPE_FLAGS,
+ TYPE_STREAM,
+ TYPE_WSTRING,
+ TYPE_BOOL,
+ TYPE_PASS,
+ TYPE_LAST
+ } PROPTYPE;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetProp")
+cpp_quote("#undef SetProp")
+cpp_quote("#endif")
+
+ HRESULT GetProp(
+ [in] DWORD dwPropTag,
+ [in,size_is(*pcb),ref] BYTE *pb,
+ [in] ULONG *pcb);
+
+ HRESULT GetPropDw(
+ [in] DWORD dwPropTag,
+ [out] DWORD *pdw);
+
+ HRESULT GetPropSz(
+ [in] DWORD dwPropTag,
+ [in,ref] LPSTR psz,
+ [in] ULONG cchMax);
+
+ HRESULT SetProp(
+ [in] DWORD dwPropTag,
+ [in,size_is(cb)] BYTE *pb,
+ [in] ULONG cb);
+
+ HRESULT SetPropDw(
+ [in] DWORD dwPropTag,
+ [in] DWORD dw);
+
+ HRESULT SetPropSz(
+ [in] DWORD dwPropTag,
+ [in] LPSTR psz);
+}
+
+[
+ object,
+ uuid(FD465482-1384-11D0-ABBD-0020AFDFD10A),
+ pointer_default(unique)
+]
+interface IImnAccount : IPropertyContainer
+{
+ HRESULT Exist();
+
+ HRESULT SetAsDefault();
+
+ HRESULT Delete();
+
+ HRESULT SaveChanges();
+
+ HRESULT GetAccountType(
+ [out] ACCTTYPE *pAcctType);
+
+ HRESULT GetServerTypes(
+ [out] DWORD *pdwSrvTypes);
+
+ HRESULT ShowProperties(
+ [in] HWND hwnd,
+ [in] DWORD dwFlags);
+
+ HRESULT ValidateProperty(
+ [in] DWORD dwPropTag,
+ [in,size_is(cb)] BYTE *pb,
+ [in] ULONG cb);
+
+ HRESULT DoWizard(
+ [in] HWND hwnd,
+ [in] DWORD dwFlags);
+
+ HRESULT DoImportWizard(
+ [in] HWND hwnd,
+ [in] CLSID clsid,
+ [in] DWORD dwFlags);
+}
+
+cpp_quote("HRESULT WINAPI HrCreateAccountManager(IImnAccountManager **ppAccountManager);")
+cpp_quote("HRESULT WINAPI ValidEmailAddress(LPSTR lpAddress);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl
new file mode 100644
index 00000000..b30e17c9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/imnxport.idl
@@ -0,0 +1,1123 @@
+/*
+ * Copyright 2006 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "imnact.idl";
+
+interface IInternetTransport;
+interface ISMTPTransport;
+interface IPOP3Transport;
+interface IIMAPTransport;
+
+/* CLSIDs */
+
+cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+
+/* Error Codes */
+
+cpp_quote("#ifndef HR_E")
+cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+cpp_quote("#ifndef HR_S")
+cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+
+/* General Error Codes */
+cpp_quote("#define IXP_E_LOAD_SICILY_FAILED HR_E(0xCC00)")
+cpp_quote("#define IXP_E_INVALID_CERT_CN HR_E(0xCC01)")
+cpp_quote("#define IXP_E_INVALID_CERT_DATE HR_E(0xCC02)")
+cpp_quote("#define IXP_E_ALREADY_CONNECTED HR_E(0xCC03)")
+cpp_quote("#define IXP_E_CONN HR_E(0xCC04)")
+cpp_quote("#define IXP_E_NOT_CONNECTED HR_E(0xCC05)")
+cpp_quote("#define IXP_E_CONN_SEND HR_E(0xCC06)")
+cpp_quote("#define IXP_E_WOULD_BLOCK HR_E(0xCC07)")
+cpp_quote("#define IXP_E_INVALID_STATE HR_E(0xCC08)")
+cpp_quote("#define IXP_E_CONN_RECV HR_E(0xCC09)")
+cpp_quote("#define IXP_E_INCOMPLETE HR_E(0xCC0A)")
+cpp_quote("#define IXP_E_BUSY HR_E(0xCC0B)")
+cpp_quote("#define IXP_E_NOT_INIT HR_E(0xCC0C)")
+cpp_quote("#define IXP_E_CANT_FIND_HOST HR_E(0xCC0D)")
+cpp_quote("#define IXP_E_FAILED_TO_CONNECT HR_E(0xCC0E)")
+cpp_quote("#define IXP_E_CONNECTION_DROPPED HR_E(0xCC0F)")
+cpp_quote("#define IXP_E_INVALID_ADDRESS HR_E(0xCC10)")
+cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST HR_E(0xCC11)")
+cpp_quote("#define IXP_E_SOCKET_READ_ERROR HR_E(0xCC12)")
+cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR HR_E(0xCC13)")
+cpp_quote("#define IXP_E_SCOKET_INIT_ERROR HR_E(0xCC14)")
+cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR HR_E(0xCC15)")
+cpp_quote("#define IXP_E_INVALID_ACCOUNT HR_E(0xCC16)")
+cpp_quote("#define IXP_E_USER_CANCEL HR_E(0xCC17)")
+cpp_quote("#define IXP_E_SICILY_LOGON_FAILED HR_E(0xCC18)")
+cpp_quote("#define IXP_E_TIMEOUT HR_E(0xCC19)")
+cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED HR_E(0xCC1A)")
+
+/* SMTP Failure Statuses */
+cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR HR_E(0xCC60)")
+cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE HR_E(0xCC61)")
+cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR HR_E(0xCC62)")
+cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX HR_E(0xCC63)")
+cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL HR_E(0xCC64)")
+cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ HR_E(0xCC65)")
+cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
+cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE HR_E(0xCC67)")
+cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY HR_E(0xCC68)")
+cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND HR_E(0xCC69)")
+cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING HR_E(0xCC6A)")
+cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL HR_E(0xCC6B)")
+cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE HR_E(0xCC6C)")
+cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW HR_E(0xCC6D)")
+cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX HR_E(0xCC6E)")
+cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED HR_E(0xCC6F)")
+
+/* SMTP Success Statuses */
+cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS HR_S(0xCC70)")
+cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE HR_S(0xCC71)")
+cpp_quote("#define IXP_E_SMTP_220_READY HR_S(0xCC72)")
+cpp_quote("#define IXP_E_SMTP_221_CLOSING HR_S(0xCC73)")
+cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY HR_S(0xCC74)")
+cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL HR_S(0xCC75)")
+cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT HR_S(0xCC76)")
+cpp_quote("#define IXP_E_SMTP_CONTINUE HR_S(0xCC77)")
+cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE HR_S(0xCC78)")
+cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS HR_S(0xCC79)")
+
+/* More SMTP Failure Statuses */
+cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER HR_E(0xCC78)")
+cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS HR_E(0xCC79)")
+cpp_quote("#define IXP_E_SMTP_NO_SENDER HR_E(0xCC7A)")
+cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS HR_E(0xCC7B)")
+cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED HR_E(0xCC7C)")
+cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT HR_E(0xCC7D)")
+cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT HR_E(0xCC7E)")
+cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED HR_E(0xCC7F)")
+
+const SHORT CCHMAX_DOMAIN = 256;
+const SHORT CCHMAX_PHONE_NUMBER = 128;
+
+const DWORD DEFAULT_IMAP_PORT = 143;
+const DWORD DEFAULT_POP3_PORT = 110;
+const DWORD DEFAULT_SMTP_PORT = 25;
+const DWORD DEFAULT_NNTP_PORT = 119;
+
+typedef enum tagINETADDRTYPE
+{
+ ADDR_TO,
+ ADDR_FROM,
+ ADDR_DSN_NEVER = 16,
+ ADDR_DSN_SUCCESS = 32,
+ ADDR_DSN_FAILURE = 64,
+ ADDR_DSN_DELAY = 128
+} INETADDRTYPE;
+
+const DWORD ADDR_TOFROM_MASK = 0x1;
+const DWORD ADDR_DSN_MASK = 0xf0;
+
+typedef enum tagDSNRET
+{
+ DSNRET_DEFAULT,
+ DSNRET_HDRS,
+ DSNRET_FULL,
+} DSNRET;
+
+typedef struct tagINETADDR
+{
+ INETADDRTYPE addrtype;
+ CHAR szEmail[CCHMAX_EMAIL_ADDRESS];
+} INETADDR, *LPINETADDR;
+
+typedef struct tagINETADDRLIST
+{
+ ULONG cAddress;
+ LPINETADDR prgAddress;
+} INETADDRLIST, *LPINETADDRLIST;
+
+typedef enum tagRASCONNTYPE
+{
+ RAS_CONNECT_LAN,
+ RAS_CONNECT_MANUAL,
+ RAS_CONNECT_RAS
+} RASCONNTYPE;
+
+typedef enum tagHTTPMAILPROPTYPE
+{
+ HTTPMAIL_PROP_INVALID,
+ HTTPMAIL_PROP_ADBAR,
+ HTTPMAIL_PROP_CONTACTS,
+ HTTPMAIL_PROP_INBOX,
+ HTTPMAIL_PROP_OUTBOX,
+ HTTPMAIL_PROP_SENDMSG,
+ HTTPMAIL_PROP_SENTITEMS,
+ HTTPMAIL_PROP_DELETEDITEMS,
+ HTTPMAIL_PROP_DRAFTS,
+ HTTPMAIL_PROP_MSGFOLDERROOT,
+ HTTPMAIL_PROP_SIG,
+ HTTPMAIL_PROP_LAST
+} HTTPMAILPROPTYPE;
+
+typedef enum tagHTTPMAILSPECIALFOLDER
+{
+ HTTPMAIL_SF_NONE,
+ HTTPMAIL_SF_UNRECOGNIZED,
+ HTTPMAIL_SF_INBOX,
+ HTTPMAIL_SF_DELETEDITEMS,
+ HTTPMAIL_SF_DRAFTS,
+ HTTPMAIL_SF_OUTBOX,
+ HTTPMAIL_SF_SENTITEMS,
+ HTTPMAIL_SF_CONTACTS,
+ HTTPMAIL_SF_CALENDAR,
+ HTTPMAIL_SF_MSNPROMO,
+ HTTPMAIL_SF_LAST
+} HTTPMAILSPECIALFOLDER;
+
+typedef enum tagHTTPMAILCONTACTTYPE
+{
+ HTTPMAIL_CT_CONTACT,
+ HTTPMAIL_CT_GROUP,
+ HTTPMAIL_CT_LAST
+} HTTPMAILCONTACTTYPE;
+
+const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
+const DWORD DAVNAMESPACE_DAV = 0;
+const DWORD DAVNAMESPACE_HOTMAIL = 1;
+const DWORD DAVNAMESPACE_HTTPMAIL = 2;
+const DWORD DAVNAMESPACE_MAIL = 3;
+const DWORD DAVNAMESPACE_CONTACTS = 4;
+
+cpp_quote("#define ISF_SMTP_USEIPFORHELO 0x01")
+cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD 0x02")
+/* for SMTP - send EHLO and use STARTTLS if available: */
+cpp_quote("#define ISF_SSLONSAMEPORT 0x04")
+cpp_quote("#define ISF_QUERYDSNSUPPORT 0x08")
+/* for SMTP - send EHLO and use AUTH if available: */
+cpp_quote("#define ISF_QUERYAUTHSUPPORT 0x10")
+
+typedef struct INETSERVER
+{
+ CHAR szAccount[CCHMAX_ACCOUNT_NAME];
+ CHAR szUserName[CCHMAX_USERNAME];
+ CHAR szPassword[CCHMAX_PASSWORD];
+ CHAR szServerName[CCHMAX_SERVER_NAME];
+ CHAR szConnectoid[CCHMAX_CONNECTOID];
+ RASCONNTYPE rasconntype;
+ DWORD dwPort;
+ BOOL fSSL;
+ BOOL fTrySicily;
+ DWORD dwTimeout;
+ DWORD dwFlags;
+} INETSERVER, *LPINETSERVER;
+
+typedef enum tagIXPTYPE
+{
+ IXP_NNTP,
+ IXP_SMTP,
+ IXP_POP3,
+ IXP_IMAP,
+ IXP_RAS,
+ IXP_HTTPMail
+} IXPTYPE;
+
+typedef enum tagIXPSTATUS
+{
+ IXP_FINDINGHOST,
+ IXP_CONNECTING,
+ IXP_SECURING,
+ IXP_CONNECTED,
+ IXP_AUTHORIZING,
+ IXP_AUTHRETRY,
+ IXP_AUTHORIZED,
+ IXP_DISCONNECTING,
+ IXP_DISCONNECTED,
+ IXP_LAST
+} IXPSTATUS;
+
+const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
+
+typedef DWORD MEMBERINFOFLAGS;
+
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;
+
+typedef DWORD IMAP_MSGFLAGS;
+
+const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;
+const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;
+const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;
+const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;
+const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;
+const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;
+const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;
+
+[
+ object,
+ uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),
+ local
+]
+interface ITransportCallbackService : IUnknown
+{
+ HRESULT GetParentWindow(
+ [in] DWORD dwReserved,
+ [out] HWND *phwndParent);
+
+ HRESULT GetAccount(
+ [out] LPDWORD pdwServerType,
+ [out] IImnAccount **ppAccount);
+}
+
+[
+ object,
+ uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),
+ local
+]
+interface ITransportCallback : IUnknown
+{
+ typedef struct tagIXPRESULT
+ {
+ HRESULT hrResult;
+ LPSTR pszResponse;
+ UINT uiServerError;
+ HRESULT hrServerError;
+ DWORD dwSocketError;
+ LPSTR pszProblem;
+ } IXPRESULT, *LPIXPRESULT;
+
+ typedef enum tagCMDTYPE
+ {
+ CMD_SEND,
+ CMD_RESP
+ } CMDTYPE;
+
+ HRESULT OnTimeout(
+ [in,out] DWORD *pdwTimeout,
+ [in] IInternetTransport *pTransport);
+
+ HRESULT OnLogonPrompt(
+ [in,out] LPINETSERVER pInetServer,
+ [in] IInternetTransport *pTransport);
+
+ INT OnPrompt(
+ [in] HRESULT hrError,
+ [in] LPCSTR pszText,
+ [in] LPCSTR pszCaption,
+ [in] UINT uType,
+ [in] IInternetTransport *pTransport);
+
+ HRESULT OnStatus(
+ [in] IXPSTATUS ixpstatus,
+ [in] IInternetTransport *pTransport);
+
+ HRESULT OnError(
+ [in] IXPSTATUS ixpstatus,
+ [in] LPIXPRESULT pResult,
+ [in] IInternetTransport *pTransport);
+
+ HRESULT OnCommand(
+ [in] CMDTYPE cmdtype,
+ [in] LPSTR pszLine,
+ [in] HRESULT hrResponse,
+ [in] IInternetTransport *pTransport);
+}
+
+[
+ object,
+ uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),
+ local
+]
+interface IInternetTransport : IUnknown
+{
+ const boolean iitAUTHENTICATE = TRUE;
+ const boolean iitDONT_AUTHENTICATe = FALSE;
+ const boolean iitENABLE_ONCOMMAND = TRUE;
+ const boolean iitDISABLE_ONCOMMAND = FALSE;
+
+ typedef enum tagIXPISSTATE
+ {
+ IXP_IS_CONNECTED,
+ IXP_IS_BUSY,
+ IXP_IS_READY,
+ IXP_IS_AUTHENTICATED
+ } IXPISSTATE;
+
+ HRESULT GetServerInfo(
+ [in,out] LPINETSERVER pInetServer);
+
+ IXPTYPE GetIXPType();
+
+ HRESULT IsState(
+ [in] IXPISSTATE isstate);
+
+ HRESULT InetServerFromAccount(
+ [in] IImnAccount *pAccount,
+ [in,out] LPINETSERVER pInetServer);
+
+ HRESULT Connect(
+ [in] LPINETSERVER pInetServer,
+ [in] boolean fAuthenticate,
+ [in] boolean fCommandLogging);
+
+ HRESULT HandsOffCallback();
+
+ HRESULT Disconnect();
+
+ HRESULT DropConnection();
+
+ HRESULT GetStatus(
+ [out] IXPSTATUS *pCurrentStatus);
+}
+
+[
+ object,
+ uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),
+ local
+]
+interface ISMTPCallback : ITransportCallback
+{
+ typedef enum tagSMTPCOMMAND
+ {
+ SMTP_NONE,
+ SMTP_BANNER,
+ SMTP_CONNECTED,
+ SMTP_SEND_MESSAGE,
+ SMTP_AUTH,
+ SMTP_EHLO,
+ SMTP_HELO,
+ SMTP_MAIL,
+ SMTP_RCPT,
+ SMTP_RSET,
+ SMTP_QUIT,
+ SMTP_DATA,
+ SMTP_DOT,
+ SMTP_SEND_STREAM,
+ SMTP_CUSTOM
+ } SMTPCOMMAND;
+
+ typedef struct tagSMTPSTREAM
+ {
+ DWORD cbIncrement;
+ DWORD cbCurrent;
+ DWORD cbTotal;
+ } SMTPSTREAM, *LPSMTPSTREAM;
+
+ typedef struct tagSMTPRESPONSE
+ {
+ SMTPCOMMAND command;
+ BOOL fDone;
+ IXPRESULT rIxpResult;
+ ISMTPTransport *pTransport;
+
+ [switch_type(SMTPCOMMAND), switch_is(command)]
+ union
+ {
+ [case(SMTP_SEND_STREAM)] SMTPSTREAM rStreamInfo;
+ [default];
+ };
+ } SMTPRESPONSE, *LPSMTPRESPONSE;
+
+ HRESULT OnResponse(
+ [in] LPSMTPRESPONSE pResponse);
+}
+
+[
+ object,
+ uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),
+ local
+]
+interface ISMTPTransport : IInternetTransport
+{
+ typedef struct tagSMTPMESSAGE
+ {
+ ULONG cbSize;
+ LPSTREAM pstmMsg;
+ INETADDRLIST rAddressList;
+ } SMTPMESSAGE, *LPSMTPMESSAGE;
+
+ HRESULT InitNew(
+ [in] LPSTR pszLogFilePath,
+ [in] ISMTPCallback *pCallback);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef SendMessage")
+cpp_quote("#endif")
+
+ HRESULT SendMessage(
+ [in] LPSMTPMESSAGE pMessage);
+
+ HRESULT CommandMAIL(
+ [in] LPSTR pszEmailFrom);
+
+ HRESULT CommandRCPT(
+ [in] LPSTR pszEmailTo);
+
+ HRESULT CommandEHLO();
+
+ HRESULT CommandHELO();
+
+ HRESULT CommandAUTH(
+ [in] LPSTR pszAuthType);
+
+ HRESULT CommandQUIT();
+
+ HRESULT CommandRSET();
+
+ HRESULT CommandDATA();
+
+ HRESULT CommandDOT();
+
+ HRESULT SendDataStream(
+ [in] IStream *pStream,
+ [in] ULONG cbSize);
+}
+
+[
+ object,
+ uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),
+ local
+]
+interface ISMTPTransport2 : ISMTPTransport
+{
+ typedef struct tagSMTPMESSAGE2
+ {
+ SMTPMESSAGE smtpMsg;
+ LPSTR pszDSNENVID;
+ DSNRET dsnRet;
+ DWORD dwReserved;
+ DWORD dwReserved2;
+ } SMTPMESSAGE2, *LPSMTPMESSAGE2;
+
+ HRESULT SetWindow();
+
+ HRESULT ResetWindow();
+
+ HRESULT SendMessage2(
+ [in] LPSMTPMESSAGE2 pMessage);
+
+ HRESULT CommandRCPT2(
+ [in] LPSTR pszEmailTo,
+ [in] INETADDRTYPE atDSN);
+}
+
+/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */
+
+[
+ object,
+ uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),
+ local
+]
+interface IPOP3Callback : ITransportCallback
+{
+ typedef enum tagPOP3COMMAND
+ {
+ POP3_NONE,
+ POP3_BANNER,
+ POP3_CONNECTED,
+ POP3_USER,
+ POP3_PASS,
+ POP3_AUTH,
+ POP3_UIDL,
+ POP3_STAT,
+ POP3_LIST,
+ POP3_DELE,
+ POP3_RETR,
+ POP3_TOP,
+ POP3_NOOP,
+ POP3_QUIT,
+ POP3_RSET,
+ POP3_CUSTOM
+ } POP3COMMAND;
+
+ typedef struct tagPOP3RETR
+ {
+ BOOL fHeader;
+ BOOL fBody;
+ DWORD dwPopId;
+ DWORD cbSoFar;
+ LPSTR pszLines;
+ ULONG cbLines;
+ } POP3RETR, *LPPOP3RETR;
+
+ typedef struct tagPOP3TOP
+ {
+ BOOL fHeader;
+ BOOL fBody;
+ DWORD dwPopId;
+ DWORD cPreviewLines;
+ DWORD cbSoFar;
+ LPSTR pszLines;
+ ULONG cbLines;
+ } POP3TOP, *LPPOP3TOP;
+
+ typedef struct tagPOP3LIST
+ {
+ DWORD dwPopId;
+ DWORD cbSize;
+ } POP3LIST, *LPPOP3LIST;
+
+ typedef struct tagPOP3UIDL
+ {
+ DWORD dwPopId;
+ LPSTR pszUidl;
+ } POP3UIDL, *LPPOP3UIDL;
+
+ typedef struct tagPOP3STAT
+ {
+ DWORD cMessages;
+ DWORD cbMessages;
+ } POP3STAT, *LPPOP3STAT;
+
+ typedef struct tagPOP3RESPONSE
+ {
+ POP3COMMAND command;
+ BOOL fDone;
+ IXPRESULT rIxpResult;
+ IPOP3Transport *pTransport;
+ BOOL fValidInfo;
+ [switch_type(POP3COMMAND), switch_is(command)]
+ union
+ {
+ [case(POP3_UIDL)] POP3UIDL rUidlInfo;
+ [case(POP3_STAT)] POP3STAT rStatInfo;
+ [case(POP3_LIST)] POP3LIST rListInfo;
+ [case(POP3_DELE)] DWORD dwPopId;
+ [case(POP3_RETR)] POP3RETR rRetrInfo;
+ [case(POP3_TOP)] POP3TOP rTopInfo;
+ [default];
+ };
+ } POP3RESPONSE, *LPPOP3RESPONSE;
+
+ HRESULT OnResponse(
+ [in] LPPOP3RESPONSE pResponse);
+}
+
+[
+ object,
+ uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),
+ local
+]
+interface IPOP3Transport : IInternetTransport
+{
+ typedef enum tagPOP3CMDTYPE
+ {
+ POP3CMD_GET_POPID,
+ POP3CMD_GET_MARKED,
+ POP3CMD_GET_ALL
+ } POP3CMDTYPE;
+
+ typedef enum tagPOP3MARKTYPE
+ {
+ POP3_MARK_FOR_TOP = 0x01,
+ POP3_MARK_FOR_RETR = 0x02,
+ POP3_MARK_FOR_DELE = 0x04,
+ POP3_MARK_FOR_UIDL = 0x08,
+ POP3_MARK_FOR_LIST = 0x10
+ } POP3MARKTYPE;
+
+ HRESULT InitNew(
+ [in] LPSTR pszLogFilePath,
+ [in] IPOP3Callback *pCallback);
+
+ HRESULT MarkItem(
+ [in] POP3MARKTYPE marktype,
+ [in] DWORD dwPopId,
+ [in] boolean fMarked);
+
+ HRESULT CommandAUTH(
+ [in] LPSTR pszAuthType);
+
+ HRESULT CommandUSER(
+ [in] LPSTR pszUserName);
+
+ HRESULT CommandPASS(
+ [in] LPSTR pszPassword);
+
+ HRESULT CommandLIST(
+ [in] POP3CMDTYPE cmdtype,
+ [in] DWORD dwPopId);
+
+ HRESULT CommandTOP(
+ [in] POP3CMDTYPE cmdtype,
+ [in] DWORD dwPopId,
+ [in] DWORD cPreviewLines);
+
+ HRESULT CommandQUIT();
+
+ HRESULT CommandSTAT();
+
+ HRESULT CommandNOOP();
+
+ HRESULT CommandRSET();
+
+ HRESULT CommandUIDL(
+ [in] POP3CMDTYPE cmdtype,
+ [in] DWORD dwPopId);
+
+ HRESULT CommandDELE(
+ [in] POP3CMDTYPE cmdtype,
+ [in] DWORD dwPopId);
+
+ HRESULT CommandRETR(
+ [in] POP3CMDTYPE cmdtype,
+ [in] DWORD dwPopId);
+}
+
+/* FIXME: INNTPCallback, INNTPTransport */
+
+[
+ object,
+ uuid(8C438160-4EF6-11d0-874F-00AA00530EE9),
+ local,
+]
+interface IRangeList : IUnknown
+{
+ const ULONG RL_RANGE_ERROR = ((ULONG)-1);
+ const ULONG RL_LAST_MESSAGE = ((ULONG)-1);
+
+ HRESULT Clear();
+
+ HRESULT IsInRange(
+ [in] const ULONG value);
+
+ HRESULT Min(
+ [out] ULONG *pulMin);
+
+ HRESULT Max(
+ [out] ULONG *pulMax);
+
+ HRESULT Save(
+ [out] byte **ppbDestination,
+ [out] ULONG *pulSizeOfDestination);
+
+ HRESULT Load(
+ [in, size_is(ulSizeOfSource)] byte *pbSource,
+ [in] const ULONG ulSizeOfSource);
+
+ HRESULT AddRange(
+ [in] const ULONG low,
+ [in] const ULONG high);
+
+ HRESULT AddSingleValue(
+ [in] const ULONG value);
+
+ HRESULT AddRangeList(
+ [in] const IRangeList *prl);
+
+ HRESULT DeleteRange(
+ [in] const ULONG low,
+ [in] const ULONG high);
+
+ HRESULT DeleteSingleValue(
+ [in] const ULONG value);
+
+ HRESULT DeleteRangeList(
+ [in] const IRangeList *prl);
+
+ HRESULT MinOfRange(
+ [in] const ULONG value,
+ [out] ULONG *pulMinOfRange);
+
+ HRESULT MaxOfRange(
+ [in] const ULONG value,
+ [out] ULONG *pulMaxOfRange);
+
+ HRESULT RangeToIMAPString(
+ [out] LPSTR *ppszDestination,
+ [out] LPDWORD pdwLengthOfDestination);
+
+ HRESULT Next(
+ [in] const ULONG current,
+ [out] ULONG *pulNext);
+
+ HRESULT Prev(
+ [in] const ULONG current,
+ [out] ULONG *pulPrev);
+
+ HRESULT Cardinality(
+ [out] ULONG *pulCardinality);
+
+ HRESULT CardinalityFrom(
+ [in] const ULONG ulStartPoint,
+ [out] ULONG *pulCardinalityFrom);
+}
+
+[
+ object,
+ uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9),
+ local
+]
+interface IIMAPCallback : ITransportCallback
+{
+ typedef DWORD IMAP_MBOXFLAGS;
+ const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0;
+ const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1;
+ const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2;
+ const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4;
+ const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8;
+ const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf;
+
+ typedef enum tagIMAP_RESPONSE_TYPE
+ {
+ irtERROR_NOTIFICATION,
+ irtCOMMAND_COMPLETION,
+ irtSERVER_ALERT,
+ irtPARSE_ERROR,
+ irtMAILBOX_UPDATE,
+ irtDELETED_MSG,
+ irtFETCH_BODY,
+ irtUPDATE_MSG,
+ irtAPPLICABLE_FLAGS,
+ irtPERMANENT_FLAGS,
+ irtUIDVALIDITY,
+ irtREADWRITE_STATUS,
+ irtTRYCREATE,
+ irtSEARCH,
+ irtMAILBOX_LISTING,
+ irtMAILBOX_STATUS,
+ irtAPPEND_PROGRESS,
+ irtUPDATE_MSG_EX
+ } IMAP_RESPONSE_TYPE;
+
+ typedef struct tagFETCH_BODY_PART
+ {
+ DWORD dwMsgSeqNum;
+ LPSTR pszBodyTag;
+ DWORD dwTotalBytes;
+ DWORD dwSizeOfData;
+ DWORD dwOffset;
+ BOOL fDone;
+ LPSTR pszData;
+ LPARAM lpFetchCookie1;
+ LPARAM lpFetchCookie2;
+ } FETCH_BODY_PART;
+
+ typedef struct tagFETCH_CMD_RESULTS
+ {
+ DWORD dwMsgSeqNum;
+ BOOL bMsgFlags;
+ IMAP_MSGFLAGS mfMsgFlags;
+ BOOL bRFC822Size;
+ DWORD dwRFC822Size;
+ BOOL bUID;
+ DWORD dwUID;
+ BOOL bInternalDate;
+ FILETIME ftInternalDate;
+ LPARAM lpFetchCookie1;
+ LPARAM lpFetchCookie2;
+ } FETCH_CMD_RESULTS;
+
+ typedef struct tagIMAPADDR
+ {
+ LPSTR pszName;
+ LPSTR pszADL;
+ LPSTR pszMailbox;
+ LPSTR pszHost;
+ struct tagIMAPADDR *pNext;
+ } IMAPADDR;
+
+ typedef struct tagFETCH_CMD_RESULTS_EX
+ {
+ DWORD dwMsgSeqNum;
+ BOOL bMsgFlags;
+ IMAP_MSGFLAGS mfMsgFlags;
+ BOOL bRFC822Size;
+ DWORD dwRFC822Size;
+ BOOL bUID;
+ DWORD dwUID;
+ BOOL bInternalDate;
+ FILETIME ftInternalDate;
+ LPARAM lpFetchCookie1;
+ LPARAM lpFetchCookie2;
+ BOOL bEnvelope;
+ FILETIME ftENVDate;
+ LPSTR pszENVSubject;
+ IMAPADDR *piaENVFrom;
+ IMAPADDR *piaENVSender;
+ IMAPADDR *piaENVReplyTo;
+ IMAPADDR *piaENVTo;
+ IMAPADDR *piaENVCc;
+ IMAPADDR *piaENVBcc;
+ LPSTR pszENVInReplyTo;
+ LPSTR pszENVMessageID;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ } FETCH_CMD_RESULTS_EX;
+
+ typedef struct tagMBOX_MSGCOUNT
+ {
+ BOOL bGotExistsResponse;
+ DWORD dwExists;
+ BOOL bGotRecentResponse;
+ DWORD dwRecent;
+ BOOL bGotUnseenResponse;
+ DWORD dwUnseen;
+ } MBOX_MSGCOUNT;
+
+ typedef struct tagIMAP_LISTLSUB_RESPONSE
+ {
+ LPSTR pszMailboxName;
+ IMAP_MBOXFLAGS imfMboxFlags;
+ char cHierarchyChar;
+ } IMAP_LISTLSUB_RESPONSE;
+
+ typedef struct tagIMAP_STATUS_RESPONSE
+ {
+ LPSTR pszMailboxName;
+ BOOL fMessages;
+ DWORD dwMessages;
+ BOOL fRecent;
+ DWORD dwRecent;
+ BOOL fUIDNext;
+ DWORD dwUIDNext;
+ BOOL fUIDValidity;
+ DWORD dwUIDValidity;
+ BOOL fUnseen;
+ DWORD dwUnseen;
+ } IMAP_STATUS_RESPONSE;
+
+ typedef struct tagAPPEND_PROGRESS
+ {
+ DWORD dwUploaded;
+ DWORD dwTotal;
+ } APPEND_PROGRESS;
+
+ typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA
+ {
+ [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount;
+ [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum;
+ [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart;
+ [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults;
+ [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags;
+ [case (irtUIDVALIDITY)] DWORD dwUIDValidity;
+ [case (irtREADWRITE_STATUS)] BOOL bReadWrite;
+ [case (irtSEARCH)] IRangeList *prlSearchResults;
+ [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing;
+ [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse;
+ [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress;
+ [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx;
+ } IMAP_RESPONSE_DATA;
+
+ typedef struct tagIMAP_RESPONSE
+ {
+ WPARAM wParam;
+ LPARAM lParam;
+ HRESULT hrResult;
+ LPSTR lpszResponseText;
+ IMAP_RESPONSE_TYPE irtResponseType;
+ [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData;
+ } IMAP_RESPONSE;
+
+ HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse);
+}
+
+[
+object,
+uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9),
+local,
+]
+interface IIMAPTransport : IInternetTransport
+{
+ const DWORD IMAP_CAPABILITY_IMAP4 = 0x1;
+ const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2;
+ const DWORD IMAP_CAPABILITY_IDLE = 0x4;
+ const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7;
+
+ HRESULT InitNew(
+ [in] LPSTR pszLogFilePath,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT NewIRangeList(
+ [out] IRangeList **pprlNewRangeList);
+
+ HRESULT Capability(
+ [out] DWORD *pdwCapabilityFlags);
+
+ HRESULT Select(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Examine(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Create(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Delete(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Rename(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName,
+ [in] LPSTR lpszNewMailboxName);
+
+ HRESULT Subscribe(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Unsubscribe(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT List(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxNameReference,
+ [in] LPSTR lpszMailboxNamePattern);
+
+ HRESULT Lsub(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxNameReference,
+ [in] LPSTR lpszMailboxNamePattern);
+
+ HRESULT Append(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszMailboxName,
+ [in] LPSTR lpszMessageFlags,
+ [in] FILETIME ftMessageDateTime,
+ [in] LPSTREAM lpstmMessageToSave);
+
+ HRESULT Close(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT Expunge(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT Search(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR lpszSearchCriteria,
+ [in] boolean bReturnUIDs,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDRangeList);
+
+ HRESULT Fetch(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDMsgRange,
+ [in] LPSTR lpszFetchArgs);
+
+ HRESULT Store(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDRangeList,
+ [in] LPSTR lpszStoreArgs);
+
+ HRESULT Copy(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] IRangeList *pMsgRange,
+ [in] boolean bUIDRangeList,
+ [in] LPSTR lpszMailboxName);
+
+ HRESULT Noop(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT ResizeMsgSeqNumTable(
+ [in] DWORD dwSizeOfMbox);
+
+ HRESULT UpdateSeqNumToUID(
+ [in] DWORD dwMsgSeqNum,
+ [in] DWORD dwUID);
+
+ HRESULT RemoveSequenceNum(
+ [in] DWORD dwDeletedMsgSeqNum);
+
+ HRESULT MsgSeqNumToUID(
+ [in] DWORD dwMsgSeqNum,
+ [out] DWORD *pdwUID);
+
+ HRESULT GetMsgSeqNumToUIDArray(
+ [out] DWORD **ppdwMsgSeqNumToUIDArray,
+ [out] DWORD *pdwNumberOfElements);
+
+ HRESULT GetHighestMsgSeqNum(
+ [out] DWORD *pdwHighestMSN);
+
+ HRESULT ResetMsgSeqNumToUID();
+
+ HRESULT SetDefaultCBHandler(
+ [in] IIMAPCallback *pCBHandler);
+
+ HRESULT Status(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] IIMAPCallback *pCBHandler,
+ [in] LPSTR pszMailboxName,
+ [in] LPSTR pszStatusCmdArgs);
+}
+
+#if 0
+cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
+#endif
+cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
+cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h
new file mode 100644
index 00000000..69a0a39f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/in6addr.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 Jeff Latimer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __IN6ADDR__
+#define __IN6ADDR__
+
+#ifdef USE_WS_PREFIX
+#define WS(x) WS_##x
+#else
+#define WS(x) x
+#endif
+
+typedef struct WS(in6_addr) {
+ union {
+ UCHAR Byte[16];
+ USHORT Word[8];
+ } u;
+} IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
+
+#define in_addr6 WS(in6_addr)
+
+#ifdef USE_WS_PREFIX
+#define WS__S6_un u
+#define WS__S6_u8 Byte
+#define WS_s6_addr WS__S6_un.WS__S6_u8
+#else
+#define _S6_un u
+#define _S6_u8 Byte
+#define s6_addr _S6_un._S6_u8
+#endif
+
+#define s6_bytes u.Byte
+#define s6_words u.Word
+
+#undef WS
+
+#endif /* __IN6ADDR__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h
new file mode 100644
index 00000000..061b7dd7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/inaddr.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010 Detlef Riekenberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __INADDR_H__
+#define __INADDR_H__
+
+#ifdef USE_WS_PREFIX
+#define WS(x) WS_##x
+#else
+#define WS(x) x
+#endif
+
+typedef struct WS(in_addr)
+{
+ union {
+ struct {
+ UCHAR s_b1,s_b2,s_b3,s_b4;
+ } S_un_b;
+ struct {
+ USHORT s_w1,s_w2;
+ } S_un_w;
+ ULONG S_addr;
+ } S_un;
+} IN_ADDR, *PIN_ADDR, *LPIN_ADDR;
+
+#undef WS
+
+#ifndef USE_WS_PREFIX
+#define s_addr S_un.S_addr
+#define s_net S_un.S_un_b.s_b1
+#define s_host S_un.S_un_b.s_b2
+#define s_lh S_un.S_un_b.s_b3
+#define s_impno S_un.S_un_b.s_b4
+#define s_imp S_un.S_un_w.s_w2
+#else
+#define WS_s_addr S_un.S_addr
+#define WS_s_net S_un.S_un_b.s_b1
+#define WS_s_host S_un.S_un_b.s_b2
+#define WS_s_lh S_un.S_un_b.s_b3
+#define WS_s_impno S_un.S_un_b.s_b4
+#define WS_s_imp S_un.S_un_w.s_w2
+#endif /* USE_WS_PREFIX */
+
+#endif /* __INADDR_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl
new file mode 100644
index 00000000..61188a0c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/indexsrv.idl
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+/* FIXME: import "filter.idl"; */
+
+/*
+ * widl doesn't like the declaration of PFNFILLTEXTBUFFER, so work around it...
+ * Not sure that function pointers are even legal in idl.
+ */
+cpp_quote("struct tagTEXT_SOURCE;")
+cpp_quote("typedef HRESULT (WINAPI *PFNFILLTEXTBUFFER)(struct tagTEXT_SOURCE *pTextSource);")
+cpp_quote("#if 0")
+typedef void* PFNFILLTEXTBUFFER;
+cpp_quote("#endif")
+
+typedef struct tagTEXT_SOURCE
+{
+ PFNFILLTEXTBUFFER pfnFillTextBuffer;
+ const WCHAR *awcBuffer;
+ ULONG iEnd;
+ ULONG iCur;
+} TEXT_SOURCE;
+
+typedef enum tagWORDREP_BREAK_TYPE
+{
+ WORDREP_BREAK_EOW = 0,
+ WORDREP_BREAK_EOS = 1,
+ WORDREP_BREAK_EOP = 2,
+ WORDREP_BREAK_EOC = 3
+} WORDREP_BREAK_TYPE;
+
+
+/*****************************************************************************
+ * IWordSink interface
+ */
+[
+ uuid(cc907054-c058-101a-b554-08002b33b0e6),
+ object,
+ local
+]
+interface IWordSink : IUnknown
+{
+ HRESULT PutWord(
+ [in] ULONG cwc,
+ [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf,
+ [in] ULONG cwcSrcLen,
+ [in] ULONG cwcSrcPos);
+ HRESULT PutAltWord(
+ [in] ULONG cwc,
+ [size_is(cwcSrcLen)][in] const WCHAR *pwcInBuf,
+ [in] ULONG cwcSrcLen,
+ [in] ULONG cwcSrcPos);
+ HRESULT StartAltPhrase(void);
+ HRESULT EndAltPhrase(void);
+ HRESULT PutBreak(
+ [in] WORDREP_BREAK_TYPE breakType);
+}
+
+/*****************************************************************************
+ * IPhraseSink interface
+ */
+[
+ uuid(cc906ff0-c058-101a-b554-08002b33b0e6),
+ object,
+ local
+]
+interface IPhraseSink: IUnknown
+{
+ HRESULT PutSmallPhrase(
+ [size_is(cwcNoun)][in] const WCHAR *pwcNoun,
+ [in] ULONG cwcNoun,
+ [size_is(cwcModifier)][in] const WCHAR *pwcModifier,
+ [in] ULONG cwcModifier,
+ [in] ULONG ulAttachmentType);
+ HRESULT PutPhrase(
+ [size_is(cwcPhrase)][in] const WCHAR *pwcPhrase,
+ [in] ULONG cwcPhrase);
+}
+
+/*****************************************************************************
+ * IWordBreaker interface
+ */
+[
+ uuid(d53552c8-77e3-101a-b552-08002b33b0e6),
+ object,
+ local
+]
+interface IWordBreaker: IUnknown
+{
+ HRESULT Init(
+ [in] BOOL fQuery,
+ [in] ULONG ulMaxTokenSize,
+ [out] BOOL *pfLicense);
+ HRESULT BreakText(
+ [in] TEXT_SOURCE *pTextSource,
+ [in] IWordSink *pWordSink,
+ [in] IPhraseSink *pPhraseSink);
+ HRESULT ComposePhrase(
+ [size_is(cwcNoun)][in] const WCHAR *pwcNoun,
+ [in] ULONG cwcNoun,
+ [size_is(cwcModifier)][in] const WCHAR *pwcModifier,
+ [in] ULONG cwcModifier,
+ [in] ULONG ulAttachmentType,
+ [size_is(*pcwcPhrase)][out] WCHAR *pwcPhrase,
+ [out][in] ULONG *pcwcPhrase);
+ HRESULT GetLicenseToUse(
+ [string][out] const WCHAR **ppwcsLicense);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h
new file mode 100644
index 00000000..33c7e1a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/initguid.h
@@ -0,0 +1,35 @@
+/*
+ * Defines a minimum set of macros create GUID's to keep the size
+ * small
+ *
+ * This file should be included into "only GUID definition *.h" like
+ * shlguid.h
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define INITGUID
+#include <guiddef.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl
new file mode 100644
index 00000000..059b6f8c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/inputscope.idl
@@ -0,0 +1,93 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+typedef enum {
+ IS_DEFAULT = 0,
+ IS_URL = 1,
+ IS_FILE_FULLFILEPATH = 2,
+ IS_FILE_FILENAME = 3,
+ IS_EMAIL_USERNAME = 4,
+ IS_EMAIL_SMTPEMAILADDRESS = 5,
+ IS_LOGINNAME = 6,
+ IS_PERSONALNAME_FULLNAME = 7,
+ IS_PERSONALNAME_PREFIX = 8,
+ IS_PERSONALNAME_GIVENNAME = 9,
+ IS_PERSONALNAME_MIDDLENAME = 10,
+ IS_PERSONALNAME_SURNAME = 11,
+ IS_PERSONALNAME_SUFFIX = 12,
+ IS_ADDRESS_FULLPOSTALADDRESS = 13,
+ IS_ADDRESS_POSTALCODE = 14,
+ IS_ADDRESS_STREET = 15,
+ IS_ADDRESS_STATEORPROVINCE = 16,
+ IS_ADDRESS_CITY = 17,
+ IS_ADDRESS_COUNTRYNAME = 18,
+ IS_ADDRESS_COUNTRYSHORTNAME = 19,
+ IS_CURRENCY_AMOUNTANDSYMBOL = 20,
+ IS_CURRENCY_AMOUNT = 21,
+ IS_DATE_FULLDATE = 22,
+ IS_DATE_MONTH = 23,
+ IS_DATE_DAY = 24,
+ IS_DATE_YEAR = 25,
+ IS_DATE_MONTHNAME = 26,
+ IS_DATE_DAYNAME = 27,
+ IS_DIGITS = 28,
+ IS_NUMBER = 29,
+ IS_ONECHAR = 30,
+ IS_PASSWORD = 31,
+ IS_TELEPHONE_FULLTELEPHONENUMBER = 32,
+ IS_TELEPHONE_COUNTRYCODE = 33,
+ IS_TELEPHONE_AREACODE = 34,
+ IS_TELEPHONE_LOCALNUMBER = 35,
+ IS_TIME_FULLTIME = 36,
+ IS_TIME_HOUR = 37,
+ IS_TIME_MINORSEC = 38,
+ IS_NUMBER_FULLWIDTH = 39,
+ IS_ALPHANUMERIC_HALFWIDTH = 40,
+ IS_ALPHANUMERIC_FULLWIDTH = 41,
+ IS_CURRENCY_CHINESE = 42,
+ IS_BOPOMOFO = 43,
+ IS_HIRAGANA = 44,
+ IS_KATAKANA_HALFWIDTH = 45,
+ IS_KATAKANA_FULLWIDTH = 46,
+ IS_HANJA = 47,
+ IS_HANGUL_HALFWIDTH = 48,
+ IS_HANGUL_FULLWIDTH = 49,
+ IS_SEARCH = 50,
+ IS_FORMULA = 51,
+ IS_SEARCH_INCREMENTAL = 52,
+ IS_CHINESE_HALFWIDTH = 53,
+ IS_CHINESE_FULLWIDTH = 54,
+ IS_NATIVE_SCRIPT = 55,
+
+ IS_PHRASELIST = -1,
+ IS_REGULAREXPRESSION = -2,
+ IS_SRGS = -3,
+ IS_XML = -4,
+ IS_ENUMSTRING = -5
+} InputScope;
+
+cpp_quote("HRESULT WINAPI SetInputScope(HWND hwnd,InputScope inputscope);")
+cpp_quote("HRESULT WINAPI SetInputScopes(HWND hwnd,const InputScope *pInputScopes,UINT cInputScopes,WCHAR **ppszPhraseList,UINT cPhrases,WCHAR *pszRegExp,WCHAR *pszSRGS);")
+cpp_quote("HRESULT WINAPI SetInputScopeXML(HWND hwnd,WCHAR *pszXML);")
+
+cpp_quote("DEFINE_GUID(GUID_PROP_INPUTSCOPE,0x1713dd5a,0x68e7,0x4a5b,0x9a,0xf6,0x59,0x2a,0x59,0x5c,0x77,0x8d);")
+
+[
+ object,
+ uuid(fde1eaee-6924-4cdf-91e7-da38cff5559d),
+ pointer_default(unique)
+]
+interface ITfInputScope : IUnknown
+{
+ HRESULT GetInputScopes([out, size_is(,*pcCount)] InputScope **pprgInputScopes, [out] UINT *pcCount);
+ HRESULT GetPhrase([out, size_is(,*pcCount)] BSTR **ppbstrPhrases, [out] UINT *pcCount);
+ HRESULT GetRegularExpression([out] BSTR *pbstrRegExp);
+ HRESULT GetSRGS([out] BSTR *pbstrSRGS);
+ HRESULT GetXML([out] BSTR *pbstrXML);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h
new file mode 100644
index 00000000..426b8ca0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/intshcut.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_INTSHCUT_H
+#define __WINE_INTSHCUT_H
+
+#include <isguids.h>
+
+#define INTSHCUTAPI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define E_FLAGS MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1000)
+#define IS_E_EXEC_FAILED MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x2002)
+#define URL_E_INVALID_SYNTAX MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1001)
+#define URL_E_UNREGISTERED_PROTOCOL MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x1002)
+
+typedef enum iurl_seturl_flags {
+ IURL_SETURL_FL_GUESS_PROTOCOL=1,
+ IURL_SETURL_FL_USE_DEFAULT_PROTOCOL,
+ ALL_IURL_SETURL_FLAGS=(IURL_SETURL_FL_GUESS_PROTOCOL|IURL_SETURL_FL_USE_DEFAULT_PROTOCOL)
+} IURL_SETURL_FLAGS;
+
+typedef enum iurl_invokecommand_flags {
+ IURL_INVOKECOMMAND_FL_ALLOW_UI=1,
+ IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB,
+ ALL_IURL_INVOKECOMMAND_FLAGS=(IURL_INVOKECOMMAND_FL_ALLOW_UI|IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB)
+} IURL_INVOKECOMMAND_FLAGS;
+
+typedef struct urlinvokecommandinfoA {
+ DWORD dwcbSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ LPCSTR pcszVerb;
+} URLINVOKECOMMANDINFOA, *PURLINVOKECOMMANDINFOA;
+typedef const URLINVOKECOMMANDINFOA CURLINVOKECOMMANDINFOA;
+typedef const URLINVOKECOMMANDINFOA *PCURLINVOKECOMMANDINFOA;
+
+typedef struct urlinvokecommandinfoW {
+ DWORD dwcbSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ LPCWSTR pcszVerb;
+} URLINVOKECOMMANDINFOW, *PURLINVOKECOMMANDINFOW;
+typedef const URLINVOKECOMMANDINFOW CURLINVOKECOMMANDINFOW;
+typedef const URLINVOKECOMMANDINFOW *PCURLINVOKECOMMANDINFOW;
+
+#define INTERFACE IUniformResourceLocatorA
+DECLARE_INTERFACE_(IUniformResourceLocatorA,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IUniformResourceLocatorA methods ***/
+ STDMETHOD(SetURL)(THIS_ LPCSTR pcszURL, DWORD dwInFlags) PURE;
+ STDMETHOD(GetURL)(THIS_ LPSTR *ppszURL) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOA pURLCommandInfo) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IUniformResourceLocatorW
+DECLARE_INTERFACE_(IUniformResourceLocatorW,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, VOID **ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IUniformResourceLocatorW methods ***/
+ STDMETHOD(SetURL)(THIS_ LPCWSTR pcszURL, DWORD dwInFlags) PURE;
+ STDMETHOD(GetURL)(THIS_ LPWSTR *ppszURL) PURE;
+ STDMETHOD(InvokeCommand)(THIS_ PURLINVOKECOMMANDINFOW pURLCommandInfo) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(URLINVOKECOMMANDINFO)
+DECL_WINELIB_TYPE_AW(PURLINVOKECOMMANDINFO)
+DECL_WINELIB_TYPE_AW(CURLINVOKECOMMANDINFO)
+DECL_WINELIB_TYPE_AW(PCURLINVOKECOMMANDINFO)
+
+
+typedef enum translateurl_in_flags {
+ TRANSLATEURL_FL_GUESS_PROTOCOL=1,
+ TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL
+} TRANSLATEURL_IN_FLAGS;
+
+HRESULT WINAPI TranslateURLA(LPCSTR, DWORD, LPSTR *);
+HRESULT WINAPI TranslateURLW(LPCWSTR, DWORD, LPWSTR *);
+#define TranslateURL WINELIB_NAME_AW(TranslateURL)
+
+BOOL WINAPI InetIsOffline(DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_INTSHCUT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h
new file mode 100644
index 00000000..9a138ad7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipexport.h
@@ -0,0 +1,128 @@
+/*
+ * Defines the types and macros used by the ICMP API, see icmpapi.h.
+ *
+ * Copyright (C) 1999 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IPEXPORT_H
+#define __WINE_IPEXPORT_H
+
+#include <in6addr.h>
+#include <inaddr.h>
+
+typedef ULONG IPAddr;
+typedef ULONG IPMask;
+typedef ULONG IP_STATUS;
+
+struct ip_option_information
+{
+ unsigned char Ttl;
+ unsigned char Tos;
+ unsigned char Flags;
+ unsigned char OptionsSize;
+ unsigned char* OptionsData;
+};
+
+#define IP_FLAG_DF 0x2
+
+#define IP_OPT_EOL 0
+#define IP_OPT_NOP 1
+#define IP_OPT_SECURITY 0x82
+#define IP_OPT_LSRR 0x83
+#define IP_OPT_SSRR 0x89
+#define IP_OPT_RR 0x7
+#define IP_OPT_TS 0x44
+#define IP_OPT_SID 0x88
+
+#define MAX_OPT_SIZE 40
+
+
+struct icmp_echo_reply
+{
+ IPAddr Address;
+ ULONG Status;
+ ULONG RoundTripTime;
+ unsigned short DataSize;
+ unsigned short Reserved;
+ void* Data;
+ struct ip_option_information Options;
+};
+
+typedef struct ip_option_information IP_OPTION_INFORMATION, *PIP_OPTION_INFORMATION;
+
+typedef struct icmp_echo_reply ICMP_ECHO_REPLY, *PICMP_ECHO_REPLY;
+
+
+#define IP_STATUS_BASE 11000
+
+#define IP_SUCCESS 0
+#define IP_BUF_TOO_SMALL (IP_STATUS_BASE + 1)
+#define IP_DEST_NET_UNREACHABLE (IP_STATUS_BASE + 2)
+#define IP_DEST_HOST_UNREACHABLE (IP_STATUS_BASE + 3)
+#define IP_DEST_PROT_UNREACHABLE (IP_STATUS_BASE + 4)
+#define IP_DEST_PORT_UNREACHABLE (IP_STATUS_BASE + 5)
+#define IP_NO_RESOURCES (IP_STATUS_BASE + 6)
+#define IP_BAD_OPTION (IP_STATUS_BASE + 7)
+#define IP_HW_ERROR (IP_STATUS_BASE + 8)
+#define IP_PACKET_TOO_BIG (IP_STATUS_BASE + 9)
+#define IP_REQ_TIMED_OUT (IP_STATUS_BASE + 10)
+#define IP_BAD_REQ (IP_STATUS_BASE + 11)
+#define IP_BAD_ROUTE (IP_STATUS_BASE + 12)
+#define IP_TTL_EXPIRED_TRANSIT (IP_STATUS_BASE + 13)
+#define IP_TTL_EXPIRED_REASSEM (IP_STATUS_BASE + 14)
+#define IP_PARAM_PROBLEM (IP_STATUS_BASE + 15)
+#define IP_SOURCE_QUENCH (IP_STATUS_BASE + 16)
+#define IP_OPTION_TOO_BIG (IP_STATUS_BASE + 17)
+#define IP_BAD_DESTINATION (IP_STATUS_BASE + 18)
+
+#define IP_ADDR_DELETED (IP_STATUS_BASE + 19)
+#define IP_SPEC_MTU_CHANGE (IP_STATUS_BASE + 20)
+#define IP_MTU_CHANGE (IP_STATUS_BASE + 21)
+#define IP_UNLOAD (IP_STATUS_BASE + 22)
+
+#define IP_GENERAL_FAILURE (IP_STATUS_BASE + 50)
+#define MAX_IP_STATUS IP_GENERAL_FAILURE
+#define IP_PENDING (IP_STATUS_BASE + 255)
+
+
+#define MAX_ADAPTER_NAME 128
+
+typedef struct _IP_ADAPTER_INDEX_MAP {
+ ULONG Index;
+ WCHAR Name[MAX_ADAPTER_NAME];
+} IP_ADAPTER_INDEX_MAP, *PIP_ADAPTER_INDEX_MAP;
+
+typedef struct _IP_INTERFACE_INFO {
+ LONG NumAdapters;
+ IP_ADAPTER_INDEX_MAP Adapter[1];
+} IP_INTERFACE_INFO,*PIP_INTERFACE_INFO;
+
+typedef struct _IP_UNIDIRECTIONAL_ADAPTER_ADDRESS {
+ ULONG NumAdapters;
+ IPAddr Address[1];
+} IP_UNIDIRECTIONAL_ADAPTER_ADDRESS, *PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS;
+
+#endif /* __WINE_IPEXPORT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h
new file mode 100644
index 00000000..83ad42f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iphlpapi.h
@@ -0,0 +1,171 @@
+/* WINE iphlpapi.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPHLPAPI_H__
+#define WINE_IPHLPAPI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <iprtrmib.h>
+#include <ipexport.h>
+#include <iptypes.h>
+
+DWORD WINAPI GetExtendedTcpTable(PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder,
+ ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Reserved);
+
+DWORD WINAPI GetExtendedUdpTable(PVOID pUdpTable, PDWORD pdwSize, BOOL bOrder,
+ ULONG ulAf, UDP_TABLE_CLASS TableClass, ULONG Reserved);
+
+DWORD WINAPI GetNumberOfInterfaces(PDWORD pdwNumIf);
+
+DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow);
+
+DWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetIpAddrTable(PMIB_IPADDRTABLE pIpAddrTable, PULONG pdwSize,
+ BOOL bOrder);
+
+DWORD WINAPI GetIpNetTable(PMIB_IPNETTABLE pIpNetTable, PULONG pdwSize,
+ BOOL bOrder);
+
+DWORD WINAPI GetIpForwardTable(PMIB_IPFORWARDTABLE pIpForwardTable,
+ PULONG pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetTcpTable(PMIB_TCPTABLE pTcpTable, PDWORD pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetUdpTable(PMIB_UDPTABLE pUdpTable, PDWORD pdwSize, BOOL bOrder);
+
+DWORD WINAPI GetIpStatistics(PMIB_IPSTATS pStats);
+
+DWORD WINAPI GetIpStatisticsEx(PMIB_IPSTATS pStats, DWORD dwFamily);
+
+DWORD WINAPI GetIcmpStatistics(PMIB_ICMP pStats);
+
+DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS pStats);
+
+DWORD WINAPI GetTcpStatisticsEx(PMIB_TCPSTATS pStats, DWORD dwFamily);
+
+DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS pStats);
+
+DWORD WINAPI GetUdpStatisticsEx(PMIB_UDPSTATS pStats, DWORD dwFamily);
+
+DWORD WINAPI SetIfEntry(PMIB_IFROW pIfRow);
+
+DWORD WINAPI CreateIpForwardEntry(PMIB_IPFORWARDROW pRoute);
+
+DWORD WINAPI SetIpForwardEntry(PMIB_IPFORWARDROW pRoute);
+
+DWORD WINAPI DeleteIpForwardEntry(PMIB_IPFORWARDROW pRoute);
+
+DWORD WINAPI SetIpStatistics(PMIB_IPSTATS pIpStats);
+
+DWORD WINAPI SetIpTTL(UINT nTTL);
+
+DWORD WINAPI CreateIpNetEntry(PMIB_IPNETROW pArpEntry);
+
+DWORD WINAPI SetIpNetEntry(PMIB_IPNETROW pArpEntry);
+
+DWORD WINAPI DeleteIpNetEntry(PMIB_IPNETROW pArpEntry);
+
+DWORD WINAPI FlushIpNetTable(DWORD dwIfIndex);
+
+DWORD WINAPI CreateProxyArpEntry(DWORD dwAddress, DWORD dwMask,
+ DWORD dwIfIndex);
+
+DWORD WINAPI DeleteProxyArpEntry(DWORD dwAddress, DWORD dwMask,
+ DWORD dwIfIndex);
+
+DWORD WINAPI SetTcpEntry(PMIB_TCPROW pTcpRow);
+
+DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen);
+
+DWORD WINAPI GetUniDirectionalAdapterInfo(
+ PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS pIPIfInfo, PULONG dwOutBufLen);
+
+DWORD WINAPI GetBestInterface(IPAddr dwDestAddr, PDWORD pdwBestIfIndex);
+
+#ifdef __WINE_WINSOCKAPI_STDLIB_H
+DWORD WINAPI GetBestInterfaceEx(
+#ifdef USE_WS_PREFIX
+ struct WS_sockaddr *pDestAddr,
+#else
+ struct sockaddr *pDestAddr,
+#endif
+ PDWORD pdwBestIfIndex);
+#endif
+
+DWORD WINAPI GetBestRoute(DWORD dwDestAddr, DWORD dwSourceAddr,
+ PMIB_IPFORWARDROW pBestRoute);
+
+DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped);
+
+DWORD WINAPI NotifyRouteChange(PHANDLE Handle, LPOVERLAPPED overlapped);
+
+BOOL WINAPI CancelIPChangeNotify(LPOVERLAPPED overlapped);
+
+DWORD WINAPI GetAdapterIndex(IN LPWSTR AdapterName, OUT PULONG IfIndex);
+
+DWORD WINAPI AddIPAddress(IPAddr Address, IPMask IpMask, DWORD IfIndex,
+ PULONG NTEContext, PULONG NTEInstance);
+
+DWORD WINAPI DeleteIPAddress(ULONG NTEContext);
+
+DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen);
+
+DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);
+
+DWORD WINAPI GetPerAdapterInfo(ULONG IfIndex,
+ PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen);
+
+DWORD WINAPI IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo);
+
+DWORD WINAPI IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo);
+
+DWORD WINAPI SendARP(IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr,
+ PULONG PhyAddrLen);
+
+BOOL WINAPI GetRTTAndHopCount(IPAddr DestIpAddress, PULONG HopCount,
+ ULONG MaxHops, PULONG RTT);
+
+DWORD WINAPI GetFriendlyIfIndex(DWORD IfIndex);
+
+DWORD WINAPI EnableRouter(HANDLE* pHandle, OVERLAPPED* pOverlapped);
+
+DWORD WINAPI UnenableRouter(OVERLAPPED* pOverlapped, LPDWORD lpdwEnableCount);
+
+#ifdef _WINSOCK2API_
+ULONG WINAPI GetAdaptersAddresses(ULONG family, ULONG flags, PVOID reserved,
+ PIP_ADAPTER_ADDRESSES aa, PULONG buflen);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WINE_IPHLPAPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h
new file mode 100644
index 00000000..e593489f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipifcons.h
@@ -0,0 +1,254 @@
+/* WINE ipifcons.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPIFCONS_H__
+#define WINE_IPIFCONS_H__
+
+#define IF_TYPE_OTHER 1
+#define IF_TYPE_REGULAR_1822 2
+#define IF_TYPE_HDH_1822 3
+#define IF_TYPE_DDN_X25 4
+#define IF_TYPE_RFC877_X25 5
+#define IF_TYPE_ETHERNET_CSMACD 6
+#define IF_TYPE_IS088023_CSMACD 7
+#define IF_TYPE_ISO88024_TOKENBUS 8
+#define IF_TYPE_ISO88025_TOKENRING 9
+#define IF_TYPE_ISO88026_MAN 10
+#define IF_TYPE_STARLAN 11
+#define IF_TYPE_PROTEON_10MBIT 12
+#define IF_TYPE_PROTEON_80MBIT 13
+#define IF_TYPE_HYPERCHANNEL 14
+#define IF_TYPE_FDDI 15
+#define IF_TYPE_LAP_B 16
+#define IF_TYPE_SDLC 17
+#define IF_TYPE_DS1 18
+#define IF_TYPE_E1 19
+#define IF_TYPE_BASIC_ISDN 20
+#define IF_TYPE_PRIMARY_ISDN 21
+#define IF_TYPE_PROP_POINT2POINT_SERIAL 22
+#define IF_TYPE_PPP 23
+#define IF_TYPE_SOFTWARE_LOOPBACK 24
+#define IF_TYPE_EON 25
+#define IF_TYPE_ETHERNET_3MBIT 26
+#define IF_TYPE_NSIP 27
+#define IF_TYPE_SLIP 28
+#define IF_TYPE_ULTRA 29
+#define IF_TYPE_DS3 30
+#define IF_TYPE_SIP 31
+#define IF_TYPE_FRAMERELAY 32
+#define IF_TYPE_RS232 33
+#define IF_TYPE_PARA 34
+#define IF_TYPE_ARCNET 35
+#define IF_TYPE_ARCNET_PLUS 36
+#define IF_TYPE_ATM 37
+#define IF_TYPE_MIO_X25 38
+#define IF_TYPE_SONET 39
+#define IF_TYPE_X25_PLE 40
+#define IF_TYPE_ISO88022_LLC 41
+#define IF_TYPE_LOCALTALK 42
+#define IF_TYPE_SMDS_DXI 43
+#define IF_TYPE_FRAMERELAY_SERVICE 44
+#define IF_TYPE_V35 45
+#define IF_TYPE_HSSI 46
+#define IF_TYPE_HIPPI 47
+#define IF_TYPE_MODEM 48
+#define IF_TYPE_AAL5 49
+#define IF_TYPE_SONET_PATH 50
+#define IF_TYPE_SONET_VT 51
+#define IF_TYPE_SMDS_ICIP 52
+#define IF_TYPE_PROP_VIRTUAL 53
+#define IF_TYPE_PROP_MULTIPLEXOR 54
+#define IF_TYPE_IEEE80212 55
+#define IF_TYPE_FIBRECHANNEL 56
+#define IF_TYPE_HIPPIINTERFACE 57
+#define IF_TYPE_FRAMERELAY_INTERCONNECT 58
+#define IF_TYPE_AFLANE_8023 59
+#define IF_TYPE_AFLANE_8025 60
+#define IF_TYPE_CCTEMUL 61
+#define IF_TYPE_FASTETHER 62
+#define IF_TYPE_ISDN 63
+#define IF_TYPE_V11 64
+#define IF_TYPE_V36 65
+#define IF_TYPE_G703_64K 66
+#define IF_TYPE_G703_2MB 67
+#define IF_TYPE_QLLC 68
+#define IF_TYPE_FASTETHER_FX 69
+#define IF_TYPE_CHANNEL 70
+#define IF_TYPE_IEEE80211 71
+#define IF_TYPE_IBM370PARCHAN 72
+#define IF_TYPE_ESCON 73
+#define IF_TYPE_DLSW 74
+#define IF_TYPE_ISDN_S 75
+#define IF_TYPE_ISDN_U 76
+#define IF_TYPE_LAP_D 77
+#define IF_TYPE_IPSWITCH 78
+#define IF_TYPE_RSRB 79
+#define IF_TYPE_ATM_LOGICAL 80
+#define IF_TYPE_DS0 81
+#define IF_TYPE_DS0_BUNDLE 82
+#define IF_TYPE_BSC 83
+#define IF_TYPE_ASYNC 84
+#define IF_TYPE_CNR 85
+#define IF_TYPE_ISO88025R_DTR 86
+#define IF_TYPE_EPLRS 87
+#define IF_TYPE_ARAP 88
+#define IF_TYPE_PROP_CNLS 89
+#define IF_TYPE_HOSTPAD 90
+#define IF_TYPE_TERMPAD 91
+#define IF_TYPE_FRAMERELAY_MPI 92
+#define IF_TYPE_X213 93
+#define IF_TYPE_ADSL 94
+#define IF_TYPE_RADSL 95
+#define IF_TYPE_SDSL 96
+#define IF_TYPE_VDSL 97
+#define IF_TYPE_ISO88025_CRFPRINT 98
+#define IF_TYPE_MYRINET 99
+#define IF_TYPE_VOICE_EM 100
+#define IF_TYPE_VOICE_FXO 101
+#define IF_TYPE_VOICE_FXS 102
+#define IF_TYPE_VOICE_ENCAP 103
+#define IF_TYPE_VOICE_OVERIP 104
+#define IF_TYPE_ATM_DXI 105
+#define IF_TYPE_ATM_FUNI 106
+#define IF_TYPE_ATM_IMA 107
+#define IF_TYPE_PPPMULTILINKBUNDLE 108
+#define IF_TYPE_IPOVER_CDLC 109
+#define IF_TYPE_IPOVER_CLAW 110
+#define IF_TYPE_STACKTOSTACK 111
+#define IF_TYPE_VIRTUALIPADDRESS 112
+#define IF_TYPE_MPC 113
+#define IF_TYPE_IPOVER_ATM 114
+#define IF_TYPE_ISO88025_FIBER 115
+#define IF_TYPE_TDLC 116
+#define IF_TYPE_GIGABITETHERNET 117
+#define IF_TYPE_HDLC 118
+#define IF_TYPE_LAP_F 119
+#define IF_TYPE_V37 120
+#define IF_TYPE_X25_MLP 121
+#define IF_TYPE_X25_HUNTGROUP 122
+#define IF_TYPE_TRANSPHDLC 123
+#define IF_TYPE_INTERLEAVE 124
+#define IF_TYPE_FAST 125
+#define IF_TYPE_IP 126
+#define IF_TYPE_DOCSCABLE_MACLAYER 127
+#define IF_TYPE_DOCSCABLE_DOWNSTREAM 128
+#define IF_TYPE_DOCSCABLE_UPSTREAM 129
+#define IF_TYPE_A12MPPSWITCH 130
+#define IF_TYPE_TUNNEL 131
+#define IF_TYPE_COFFEE 132
+#define IF_TYPE_CES 133
+#define IF_TYPE_ATM_SUBINTERFACE 134
+#define IF_TYPE_L2_VLAN 135
+#define IF_TYPE_L3_IPVLAN 136
+#define IF_TYPE_L3_IPXVLAN 137
+#define IF_TYPE_DIGITALPOWERLINE 138
+#define IF_TYPE_MEDIAMAILOVERIP 139
+#define IF_TYPE_DTM 140
+#define IF_TYPE_DCN 141
+#define IF_TYPE_IPFORWARD 142
+#define IF_TYPE_MSDSL 143
+#define IF_TYPE_IEEE1394 144
+#define IF_TYPE_IF_GSN 145
+#define IF_TYPE_DVBRCC_MACLAYER 146
+#define IF_TYPE_DVBRCC_DOWNSTREAM 147
+#define IF_TYPE_DVBRCC_UPSTREAM 148
+#define IF_TYPE_ATM_VIRTUAL 149
+#define IF_TYPE_MPLS_TUNNEL 150
+#define IF_TYPE_SRP 151
+#define IF_TYPE_VOICEOVERATM 152
+#define IF_TYPE_VOICEOVERFRAMERELAY 153
+#define IF_TYPE_IDSL 154
+#define IF_TYPE_COMPOSITELINK 155
+#define IF_TYPE_SS7_SIGLINK 156
+#define IF_TYPE_PROP_WIRELESS_P2P 157
+#define IF_TYPE_FR_FORWARD 158
+#define IF_TYPE_RFC1483 159
+#define IF_TYPE_USB 160
+#define IF_TYPE_IEEE8023AD_LAG 161
+#define IF_TYPE_BGP_POLICY_ACCOUNTING 162
+#define IF_TYPE_FRF16_MFR_BUNDLE 163
+#define IF_TYPE_H323_GATEKEEPER 164
+#define IF_TYPE_H323_PROXY 165
+#define IF_TYPE_MPLS 166
+#define IF_TYPE_MF_SIGLINK 167
+#define IF_TYPE_HDSL2 168
+#define IF_TYPE_SHDSL 169
+#define IF_TYPE_DS1_FDL 170
+#define IF_TYPE_POS 171
+#define IF_TYPE_DVB_ASI_IN 172
+#define IF_TYPE_DVB_ASI_OUT 173
+#define IF_TYPE_PLC 175
+#define IF_TYPE_NFAS 175
+#define IF_TYPE_TR008 176
+#define IF_TYPE_GR303_RDT 177
+#define IF_TYPE_GR303_IDT 178
+#define IF_TYPE_ISUP 179
+#define IF_TYPE_PROP_DOCS_WIRELESS_MACLAYER 180
+#define IF_TYPE_PROP_DOCS_WIRELESS_DOWNSTREAM 181
+#define IF_TYPE_PROP_DOCS_WIRELESS_UPSTREAM 182
+#define IF_TYPE_HIPERLAN2 183
+#define IF_TYPE_PROP_BWA_P2MP 184
+#define IF_TYPE_SONET_OVERHEAD_CHANNEL 185
+#define IF_TYPE_DIGITAL_WRAPPER_OVERHEAD_CHANNEL 186
+#define IF_TYPE_AAL2 187
+#define IF_TYPE_RADIO_MAC 188
+#define IF_TYPE_ATM_RADIO 189
+#define IF_TYPE_IMT 190
+#define IF_TYPE_MVL 191
+#define IF_TYPE_REACH_DSL 192
+#define IF_TYPE_FR_DLCI_ENDPT 193
+#define IF_TYPE_ATM_VCI_ENDPT 194
+#define IF_TYPE_OPTICAL_CHANNEL 195
+#define IF_TYPE_OPTICAL_TRANSPORT 196
+#define IF_TYPE_IEEE80216_WANN 237
+#define IF_TYPE_WWANPP 243
+#define IF_TYPE_WWANPP2 244
+#define MAX_IF_TYPE 244
+
+#define MIB_IF_TYPE_OTHER 1
+#define MIB_IF_TYPE_ETHERNET 6
+#define MIB_IF_TYPE_TOKENRING 9
+#define MIB_IF_TYPE_FDDI 15
+#define MIB_IF_TYPE_PPP 23
+#define MIB_IF_TYPE_LOOPBACK 24
+#define MIB_IF_TYPE_SLIP 28
+
+#define MIB_IF_ADMIN_STATUS_UP 1
+#define MIB_IF_ADMIN_STATUS_DOWN 2
+#define MIB_IF_ADMIN_STATUS_TESTING 3
+
+typedef enum _INTERNAL_IF_OPER_STATUS
+{
+ MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0,
+ MIB_IF_OPER_STATUS_UNREACHABLE = 1,
+ MIB_IF_OPER_STATUS_DISCONNECTED = 2,
+ MIB_IF_OPER_STATUS_CONNECTING = 3,
+ MIB_IF_OPER_STATUS_CONNECTED = 4,
+ MIB_IF_OPER_STATUS_OPERATIONAL = 5,
+} INTERNAL_IF_OPER_STATUS;
+
+#endif /* WINE_IPIFCONS_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h
new file mode 100644
index 00000000..a4d63b45
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ipmib.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_IPMIB_H
+#define __WINE_IPMIB_H
+
+#include <ifmib.h>
+#include <nldef.h>
+
+
+/* IPADDR table */
+
+typedef struct _MIB_IPADDRROW
+{
+ DWORD dwAddr;
+ IF_INDEX dwIndex;
+ DWORD dwMask;
+ DWORD dwBCastAddr;
+ DWORD dwReasmSize;
+ unsigned short unused1;
+ unsigned short wType;
+} MIB_IPADDRROW, *PMIB_IPADDRROW;
+
+typedef struct _MIB_IPADDRTABLE
+{
+ DWORD dwNumEntries;
+ MIB_IPADDRROW table[1];
+} MIB_IPADDRTABLE, *PMIB_IPADDRTABLE;
+
+
+/* IPFORWARD table */
+
+typedef struct _MIB_IPFORWARDNUMBER
+{
+ DWORD dwValue;
+} MIB_IPFORWARDNUMBER, *PMIB_IPFORWARDNUMBER;
+
+typedef enum
+{
+ MIB_IPROUTE_TYPE_OTHER = 1,
+ MIB_IPROUTE_TYPE_INVALID = 2,
+ MIB_IPROUTE_TYPE_DIRECT = 3,
+ MIB_IPROUTE_TYPE_INDIRECT = 4,
+} MIB_IPFORWARD_TYPE;
+
+typedef NL_ROUTE_PROTOCOL MIB_IPFORWARD_PROTO;
+
+typedef struct _MIB_IPFORWARDROW
+{
+ DWORD dwForwardDest;
+ DWORD dwForwardMask;
+ DWORD dwForwardPolicy;
+ DWORD dwForwardNextHop;
+ IF_INDEX dwForwardIfIndex;
+ union
+ {
+ DWORD dwForwardType;
+ MIB_IPFORWARD_TYPE ForwardType;
+ } DUMMYUNIONNAME1;
+ union
+ {
+ DWORD dwForwardProto;
+ MIB_IPFORWARD_PROTO ForwardProto;
+ } DUMMYUNIONNAME2;
+ DWORD dwForwardAge;
+ DWORD dwForwardNextHopAS;
+ DWORD dwForwardMetric1;
+ DWORD dwForwardMetric2;
+ DWORD dwForwardMetric3;
+ DWORD dwForwardMetric4;
+ DWORD dwForwardMetric5;
+} MIB_IPFORWARDROW, *PMIB_IPFORWARDROW;
+
+typedef struct _MIB_IPFORWARDTABLE
+{
+ DWORD dwNumEntries;
+ MIB_IPFORWARDROW table[1];
+} MIB_IPFORWARDTABLE, *PMIB_IPFORWARDTABLE;
+
+
+/* IPNET table */
+
+typedef enum
+{
+ MIB_IPNET_TYPE_OTHER = 1,
+ MIB_IPNET_TYPE_INVALID = 2,
+ MIB_IPNET_TYPE_DYNAMIC = 3,
+ MIB_IPNET_TYPE_STATIC = 4,
+} MIB_IPNET_TYPE;
+
+typedef struct _MIB_IPNETROW
+{
+ DWORD dwIndex;
+ DWORD dwPhysAddrLen;
+ BYTE bPhysAddr[MAXLEN_PHYSADDR];
+ DWORD dwAddr;
+ union
+ {
+ DWORD dwType;
+ MIB_IPNET_TYPE Type;
+ } DUMMYUNIONNAME;
+} MIB_IPNETROW, *PMIB_IPNETROW;
+
+typedef struct _MIB_IPNETTABLE
+{
+ DWORD dwNumEntries;
+ MIB_IPNETROW table[1];
+} MIB_IPNETTABLE, *PMIB_IPNETTABLE;
+
+
+/* IP statistics */
+
+typedef enum
+{
+ MIB_IP_FORWARDING = 1,
+ MIB_IP_NOT_FORWARDING = 2,
+} MIB_IPSTATS_FORWARDING, *PMIB_IPSTATS_FORWARDING;
+
+typedef struct _MIB_IPSTATS
+{
+ union
+ {
+ DWORD dwForwarding;
+ MIB_IPSTATS_FORWARDING Forwarding;
+ } DUMMYUNIONNAME;
+ DWORD dwDefaultTTL;
+ DWORD dwInReceives;
+ DWORD dwInHdrErrors;
+ DWORD dwInAddrErrors;
+ DWORD dwForwDatagrams;
+ DWORD dwInUnknownProtos;
+ DWORD dwInDiscards;
+ DWORD dwInDelivers;
+ DWORD dwOutRequests;
+ DWORD dwRoutingDiscards;
+ DWORD dwOutDiscards;
+ DWORD dwOutNoRoutes;
+ DWORD dwReasmTimeout;
+ DWORD dwReasmReqds;
+ DWORD dwReasmOks;
+ DWORD dwReasmFails;
+ DWORD dwFragOks;
+ DWORD dwFragFails;
+ DWORD dwFragCreates;
+ DWORD dwNumIf;
+ DWORD dwNumAddr;
+ DWORD dwNumRoutes;
+} MIB_IPSTATS, *PMIB_IPSTATS;
+
+
+/* ICMP statistics */
+
+typedef struct _MIBICMPSTATS
+{
+ DWORD dwMsgs;
+ DWORD dwErrors;
+ DWORD dwDestUnreachs;
+ DWORD dwTimeExcds;
+ DWORD dwParmProbs;
+ DWORD dwSrcQuenchs;
+ DWORD dwRedirects;
+ DWORD dwEchos;
+ DWORD dwEchoReps;
+ DWORD dwTimestamps;
+ DWORD dwTimestampReps;
+ DWORD dwAddrMasks;
+ DWORD dwAddrMaskReps;
+} MIBICMPSTATS, *PMIBICMPSTATS;
+
+typedef struct _MIBICMPINFO
+{
+ MIBICMPSTATS icmpInStats;
+ MIBICMPSTATS icmpOutStats;
+} MIBICMPINFO;
+
+typedef struct _MIB_ICMP
+{
+ MIBICMPINFO stats;
+} MIB_ICMP, *PMIB_ICMP;
+
+typedef enum
+{
+ ICMP4_ECHO_REPLY = 0,
+ ICMP4_DST_UNREACH = 3,
+ ICMP4_SOURCE_QUENCH = 4,
+ ICMP4_REDIRECT = 5,
+ ICMP4_ECHO_REQUEST = 8,
+ ICMP4_ROUTER_ADVERT = 9,
+ ICMP4_ROUTER_SOLICIT = 10,
+ ICMP4_TIME_EXCEEDED = 11,
+ ICMP4_PARAM_PROB = 12,
+ ICMP4_TIMESTAMP_REQUEST = 13,
+ ICMP4_TIMESTAMP_REPLY = 14,
+ ICMP4_MASK_REQUEST = 17,
+ ICMP4_MASK_REPLY = 18,
+} ICMP4_TYPE, *PICMP4_TYPE;
+
+typedef enum
+{
+ ICMP6_DST_UNREACH = 1,
+ ICMP6_PACKET_TOO_BIG = 2,
+ ICMP6_TIME_EXCEEDED = 3,
+ ICMP6_PARAM_PROB = 4,
+ ICMP6_ECHO_REQUEST = 128,
+ ICMP6_ECHO_REPLY = 129,
+ ICMP6_MEMBERSHIP_QUERY = 130,
+ ICMP6_MEMBERSHIP_REPORT = 131,
+ ICMP6_MEMBERSHIP_REDUCTION = 132,
+ ND_ROUTER_SOLICIT = 133,
+ ND_ROUTER_ADVERT = 134,
+ ND_NEIGHBOR_SOLICIT = 135,
+ ND_NEIGHBOR_ADVERT = 136,
+ ND_REDIRECT = 137,
+ ICMP6_V2_MEMBERSHIP_REPORT = 143,
+} ICMP6_TYPE, *PICMP6_TYPE;
+
+typedef struct _MIBICMPSTATS_EX
+{
+ DWORD dwMsgs;
+ DWORD dwErrors;
+ DWORD rgdwTypeCount[256];
+} MIBICMPSTATS_EX, *PMIBICMPSTATS_EX;
+
+typedef struct _MIB_ICMP_EX
+{
+ MIBICMPSTATS_EX icmpInStats;
+ MIBICMPSTATS_EX icmpOutStats;
+} MIB_ICMP_EX, *PMIB_ICMP_EX;
+
+#endif /* __WINE_IPMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h
new file mode 100644
index 00000000..bc6a6e8d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iprtrmib.h
@@ -0,0 +1,58 @@
+/* WINE iprtrmib.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPRTRMIB_H__
+#define WINE_IPRTRMIB_H__
+
+#include <mprapi.h>
+#include <ipifcons.h>
+
+#include <ipmib.h>
+#include <tcpmib.h>
+#include <udpmib.h>
+
+typedef enum _TCP_TABLE_CLASS
+{
+ TCP_TABLE_BASIC_LISTENER,
+ TCP_TABLE_BASIC_CONNECTIONS,
+ TCP_TABLE_BASIC_ALL,
+ TCP_TABLE_OWNER_PID_LISTENER,
+ TCP_TABLE_OWNER_PID_CONNECTIONS,
+ TCP_TABLE_OWNER_PID_ALL,
+ TCP_TABLE_OWNER_MODULE_LISTENER,
+ TCP_TABLE_OWNER_MODULE_CONNECTIONS,
+ TCP_TABLE_OWNER_MODULE_ALL
+} TCP_TABLE_CLASS, *PTCP_TABLE_CLASS;
+
+typedef enum _UDP_TABLE_CLASS
+{
+ UDP_TABLE_BASIC,
+ UDP_TABLE_OWNER_PID,
+ UDP_TABLE_OWNER_MODULE
+} UDP_TABLE_CLASS, *PUDP_TABLE_CLASS;
+
+#endif /* WINE_IPRTRMIB_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h
new file mode 100644
index 00000000..8908d5c1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/iptypes.h
@@ -0,0 +1,269 @@
+/* WINE iptypes.h
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef WINE_IPTYPES_H_
+#define WINE_IPTYPES_H_
+
+#include <time.h>
+#include <ifdef.h>
+#include <nldef.h>
+
+#define MAX_ADAPTER_DESCRIPTION_LENGTH 128
+#define MAX_ADAPTER_NAME_LENGTH 256
+#define MAX_ADAPTER_ADDRESS_LENGTH 8
+#define MAX_HOSTNAME_LEN 128
+#define MAX_DOMAIN_NAME_LEN 128
+#define MAX_SCOPE_ID_LEN 256
+#define MAX_DHCPV6_DUID_LENGTH 130
+#define MAX_DNS_SUFFIX_STRING_LENGTH 256
+
+#define BROADCAST_NODETYPE 1
+#define PEER_TO_PEER_NODETYPE 2
+#define MIXED_NODETYPE 4
+#define HYBRID_NODETYPE 8
+
+typedef struct {
+ char String[4 * 4];
+} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
+
+typedef struct _IP_ADDR_STRING {
+ struct _IP_ADDR_STRING* Next;
+ IP_ADDRESS_STRING IpAddress;
+ IP_MASK_STRING IpMask;
+ DWORD Context;
+} IP_ADDR_STRING, *PIP_ADDR_STRING;
+
+typedef struct _IP_ADAPTER_INFO {
+ struct _IP_ADAPTER_INFO* Next;
+ DWORD ComboIndex;
+ char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
+ char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
+ UINT AddressLength;
+ BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
+ DWORD Index;
+ UINT Type;
+ UINT DhcpEnabled;
+ PIP_ADDR_STRING CurrentIpAddress;
+ IP_ADDR_STRING IpAddressList;
+ IP_ADDR_STRING GatewayList;
+ IP_ADDR_STRING DhcpServer;
+ BOOL HaveWins;
+ IP_ADDR_STRING PrimaryWinsServer;
+ IP_ADDR_STRING SecondaryWinsServer;
+ time_t LeaseObtained;
+ time_t LeaseExpires;
+} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
+
+typedef struct _IP_PER_ADAPTER_INFO {
+ UINT AutoconfigEnabled;
+ UINT AutoconfigActive;
+ PIP_ADDR_STRING CurrentDnsServer;
+ IP_ADDR_STRING DnsServerList;
+} IP_PER_ADAPTER_INFO, *PIP_PER_ADAPTER_INFO;
+
+typedef struct {
+ char HostName[MAX_HOSTNAME_LEN + 4] ;
+ char DomainName[MAX_DOMAIN_NAME_LEN + 4];
+ PIP_ADDR_STRING CurrentDnsServer;
+ IP_ADDR_STRING DnsServerList;
+ UINT NodeType;
+ char ScopeId[MAX_SCOPE_ID_LEN + 4];
+ UINT EnableRouting;
+ UINT EnableProxy;
+ UINT EnableDns;
+} FIXED_INFO, *PFIXED_INFO;
+
+typedef NL_PREFIX_ORIGIN IP_PREFIX_ORIGIN;
+typedef NL_SUFFIX_ORIGIN IP_SUFFIX_ORIGIN;
+typedef NL_DAD_STATE IP_DAD_STATE;
+
+#ifdef _WINSOCK2API_
+
+typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
+ union {
+ struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
+ SOCKET_ADDRESS Address;
+ IP_PREFIX_ORIGIN PrefixOrigin;
+ IP_SUFFIX_ORIGIN SuffixOrigin;
+ IP_DAD_STATE DadState;
+ ULONG ValidLifetime;
+ ULONG PreferredLifetime;
+ ULONG LeaseLifetime;
+} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
+
+typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD Reserved;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
+
+typedef struct _IP_ADAPTER_PREFIX {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD Flags;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_PREFIX *Next;
+ SOCKET_ADDRESS Address;
+ ULONG PrefixLength;
+} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
+
+typedef struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD Reserved;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_WINS_SERVER_ADDRESS_LH *Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_WINS_SERVER_ADDRESS_LH, *PIP_ADAPTER_WINS_SERVER_ADDRESS_LH;
+typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH IP_ADAPTER_WINS_SERVER_ADDRESS;
+typedef IP_ADAPTER_WINS_SERVER_ADDRESS_LH *PIP_ADAPTER_WINS_SERVER_ADDRESS;
+
+typedef struct _IP_ADAPTER_GATEWAY_ADDRESS_LH {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD Reserved;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_GATEWAY_ADDRESS_LH *Next;
+ SOCKET_ADDRESS Address;
+} IP_ADAPTER_GATEWAY_ADDRESS_LH, *PIP_ADAPTER_GATEWAY_ADDRESS_LH;
+typedef IP_ADAPTER_GATEWAY_ADDRESS_LH IP_ADAPTER_GATEWAY_ADDRESS;
+typedef IP_ADAPTER_GATEWAY_ADDRESS_LH *PIP_ADAPTER_GATEWAY_ADDRESS;
+
+#define IP_ADAPTER_DDNS_ENABLED 0x1
+#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x2
+#define IP_ADAPTER_DHCP_ENABLED 0x4
+#define IP_ADAPTER_RECEIVE_ONLY 0x8
+#define IP_ADAPTER_NO_MULTICAST 0x10
+#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x20
+#define IP_ADAPTER_NETBIOS_OVER_TCPIP_ENABLED 0x40
+#define IP_ADAPTER_IPV4_ENABLED 0x80
+#define IP_ADAPTER_IPV6_ENABLED 0x100
+#define IP_ADAPTER_IPV6_MANAGE_ADDRESS_CONFIG 0x200
+
+typedef struct _IP_ADAPTER_ADDRESSES {
+ union {
+ ULONGLONG Alignment;
+ struct {
+ ULONG Length;
+ DWORD IfIndex;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ struct _IP_ADAPTER_ADDRESSES *Next;
+ PCHAR AdapterName;
+ PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
+ PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
+ PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
+ PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
+ PWCHAR DnsSuffix;
+ PWCHAR Description;
+ PWCHAR FriendlyName;
+ BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
+ DWORD PhysicalAddressLength;
+ DWORD Flags;
+ DWORD Mtu;
+ DWORD IfType;
+ IF_OPER_STATUS OperStatus;
+ DWORD Ipv6IfIndex;
+ DWORD ZoneIndices[16];
+ PIP_ADAPTER_PREFIX FirstPrefix;
+ ULONG64 TransmitLinkSpeed;
+ ULONG64 ReceiveLinkSpeed;
+ PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
+ PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress;
+ ULONG Ipv4Metric;
+ ULONG Ipv6Metric;
+ IF_LUID Luid;
+ SOCKET_ADDRESS Dhcpv4Server;
+ NET_IF_COMPARTMENT_ID CompartmentId;
+ NET_IF_NETWORK_GUID NetworkGuid;
+ NET_IF_CONNECTION_TYPE ConnectionType;
+ TUNNEL_TYPE TunnelType;
+ SOCKET_ADDRESS Dhcpv6Server;
+ BYTE Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
+ ULONG Dhcpv6ClientDuidLength;
+ ULONG Dhcpv6Iaid;
+} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
+
+#define GAA_FLAG_SKIP_UNICAST 0x00000001
+#define GAA_FLAG_SKIP_ANYCAST 0x00000002
+#define GAA_FLAG_SKIP_MULTICAST 0x00000004
+#define GAA_FLAG_SKIP_DNS_SERVER 0x00000008
+#define GAA_FLAG_INCLUDE_PREFIX 0x00000010
+#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x00000020
+#define GAA_FLAG_INCLUDE_WINS_INFO 0x00000040
+#define GAA_FLAG_INCLUDE_ALL_GATEWAYS 0x00000080
+#define GAA_FLAG_INCLUDE_ALL_INTERFACES 0x00000100
+#define GAA_FLAG_INCLUDE_ALL_COMPARTMENTS 0x00000200
+#define GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER 0x00000400
+
+#endif /* _WINSOCK2API_ */
+
+#endif /* WINE_IPTYPES_H_*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h
new file mode 100644
index 00000000..43e6a70b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/isguids.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2007 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _ISGUIDS_H_
+#define _ISGUIDS_H_
+
+DEFINE_GUID(CLSID_InternetShortcut, 0xfbf23b40,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8);
+
+DEFINE_GUID(IID_IUniformResourceLocatorA, 0xfbf23b80,0xe3f0,0x101b,0x84,0x88,0x00,0xaa,0x00,0x3e,0x56,0xf8);
+DEFINE_GUID(IID_IUniformResourceLocatorW, 0xcabb0da0,0xda57,0x11cf,0x99,0x74,0x00,0x20,0xaf,0xd7,0x97,0x62);
+#define IID_IUniformResourceLocator WINELIB_NAME_AW(IID_IUniformResourceLocator)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h
new file mode 100644
index 00000000..2cb19b4f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/knownfolders.h
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2010 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifdef DEFINE_KNOWN_FOLDER
+#undef DEFINE_KNOWN_FOLDER
+#endif
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name DECLSPEC_HIDDEN; \
+ EXTERN_C const GUID name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#else
+#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ const GUID name DECLSPEC_HIDDEN; \
+ const GUID name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#endif
+#else
+#define DEFINE_KNOWN_FOLDER(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name DECLSPEC_HIDDEN
+#endif
+
+DEFINE_KNOWN_FOLDER(FOLDERID_AddNewPrograms, 0xde61d971, 0x5ebc, 0x4f02, 0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04);
+DEFINE_KNOWN_FOLDER(FOLDERID_AdminTools, 0x724ef170, 0xa42d, 0x4fef, 0x9f, 0x26, 0xb6, 0x0e, 0x84, 0x6f, 0xba, 0x4f);
+DEFINE_KNOWN_FOLDER(FOLDERID_AppUpdates, 0xa305ce99, 0xf527, 0x492b, 0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4);
+DEFINE_KNOWN_FOLDER(FOLDERID_CDBurning, 0x9e52ab10, 0xf80d, 0x49df, 0xac, 0xb8, 0x43, 0x30, 0xf5, 0x68, 0x78, 0x55);
+DEFINE_KNOWN_FOLDER(FOLDERID_ChangeRemovePrograms, 0xdf7266ac, 0x9274, 0x4867, 0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonAdminTools, 0xd0384e7d, 0xbac3, 0x4797, 0x8f, 0x14, 0xcb, 0xa2, 0x29, 0xb3, 0x92, 0xb5);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonOEMLinks, 0xc1bae2d0, 0x10df, 0x4334, 0xbe, 0xdd, 0x7a, 0xa2, 0x0b, 0x22, 0x7a, 0x9d);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonPrograms, 0x0139d44e, 0x6afe, 0x49f2, 0x86, 0x90, 0x3d, 0xaf, 0xca, 0xe6, 0xff, 0xb8);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonStartMenu, 0xa4115719, 0xd62e, 0x491d, 0xaa, 0x7c, 0xe7, 0x4b, 0x8b, 0xe3, 0xb0, 0x67);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonStartup, 0x82a5ea35, 0xd9cd, 0x47c5, 0x96, 0x29, 0xe1, 0x5d, 0x2f, 0x71, 0x4e, 0x6e);
+DEFINE_KNOWN_FOLDER(FOLDERID_CommonTemplates, 0xb94237e7, 0x57ac, 0x4347, 0x91, 0x51, 0xb0, 0x8c, 0x6c, 0x32, 0xd1, 0xf7);
+DEFINE_KNOWN_FOLDER(FOLDERID_ComputerFolder, 0x0ac0837c, 0xbbf8, 0x452a, 0x85, 0x0d, 0x79, 0xd0, 0x8e, 0x66, 0x7c, 0xa7);
+DEFINE_KNOWN_FOLDER(FOLDERID_ConflictFolder, 0x4bfefb45, 0x347d, 0x4006, 0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92);
+DEFINE_KNOWN_FOLDER(FOLDERID_ConnectionsFolder, 0x6f0cd92b, 0x2e97, 0x45d1, 0x88, 0xff, 0xb0, 0xd1, 0x86, 0xb8, 0xde, 0xdd);
+DEFINE_KNOWN_FOLDER(FOLDERID_Contacts, 0x56784854, 0xc6cb, 0x462b, 0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82);
+DEFINE_KNOWN_FOLDER(FOLDERID_ControlPanelFolder, 0x82a74aeb, 0xaeb4, 0x465c, 0xa0, 0x14, 0xd0, 0x97, 0xee, 0x34, 0x6d, 0x63);
+DEFINE_KNOWN_FOLDER(FOLDERID_Cookies, 0x2b0f765d, 0xc0e9, 0x4171, 0x90, 0x8e, 0x08, 0xa6, 0x11, 0xb8, 0x4f, 0xf6);
+DEFINE_KNOWN_FOLDER(FOLDERID_Desktop, 0xb4bfcc3a, 0xdb2c, 0x424c, 0xb0, 0x29, 0x7f, 0xe9, 0x9a, 0x87, 0xc6, 0x41);
+DEFINE_KNOWN_FOLDER(FOLDERID_DeviceMetadataStore, 0x5ce4a5e9, 0xe4eb, 0x479d, 0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55);
+DEFINE_KNOWN_FOLDER(FOLDERID_Documents, 0xfdd39ad0, 0x238f, 0x46af, 0xad, 0xb4, 0x6c, 0x85, 0x48, 0x03, 0x69, 0xc7);
+DEFINE_KNOWN_FOLDER(FOLDERID_DocumentsLibrary, 0x7b0db17d, 0x9cd2, 0x4a93, 0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c);
+DEFINE_KNOWN_FOLDER(FOLDERID_Downloads, 0x374de290, 0x123f, 0x4565, 0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b);
+DEFINE_KNOWN_FOLDER(FOLDERID_Favorites, 0x1777f761, 0x68ad, 0x4d8a, 0x87, 0xbd, 0x30, 0xb7, 0x59, 0xfa, 0x33, 0xdd);
+DEFINE_KNOWN_FOLDER(FOLDERID_Fonts, 0xfd228cb7, 0xae11, 0x4ae3, 0x86, 0x4c, 0x16, 0xf3, 0x91, 0x0a, 0xb8, 0xfe);
+DEFINE_KNOWN_FOLDER(FOLDERID_Games, 0xcac52c1a, 0xb53d, 0x4edc, 0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34);
+DEFINE_KNOWN_FOLDER(FOLDERID_GameTasks, 0x054fae61, 0x4dd8, 0x4787, 0x80, 0xb6, 0x09, 0x02, 0x20, 0xc4, 0xb7, 0x00);
+DEFINE_KNOWN_FOLDER(FOLDERID_History, 0xd9dc8a3b, 0xb784, 0x432e, 0xa7, 0x81, 0x5a, 0x11, 0x30, 0xa7, 0x59, 0x63);
+DEFINE_KNOWN_FOLDER(FOLDERID_HomeGroup, 0x52528a6b, 0xb9e3, 0x4add, 0xb6, 0x0d, 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d);
+DEFINE_KNOWN_FOLDER(FOLDERID_ImplicitAppShortcuts, 0xbcb5256f, 0x79f6, 0x4cee, 0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x02, 0xfd, 0x46);
+DEFINE_KNOWN_FOLDER(FOLDERID_InternetCache, 0x352481e8, 0x33be, 0x4251, 0xba, 0x85, 0x60, 0x07, 0xca, 0xed, 0xcf, 0x9d);
+DEFINE_KNOWN_FOLDER(FOLDERID_InternetFolder, 0x4d9f7874, 0x4e0c, 0x4904, 0x96, 0x7b, 0x40, 0xb0, 0xd2, 0x0c, 0x3e, 0x4b);
+DEFINE_KNOWN_FOLDER(FOLDERID_Libraries, 0x1b3ea5dc, 0xb587, 0x4786, 0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae);
+DEFINE_KNOWN_FOLDER(FOLDERID_Links, 0xbfb9d5e0, 0xc6a9, 0x404c, 0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68);
+DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppData, 0xf1b32785, 0x6fba, 0x4fcf, 0x9d, 0x55, 0x7b, 0x8e, 0x7f, 0x15, 0x70, 0x91);
+DEFINE_KNOWN_FOLDER(FOLDERID_LocalAppDataLow, 0xa520a1a4, 0x1780, 0x4ff6, 0xbd, 0x18, 0x16, 0x73, 0x43, 0xc5, 0xaf, 0x16);
+DEFINE_KNOWN_FOLDER(FOLDERID_LocalizedResourcesDir, 0x2a00375e, 0x224c, 0x49de, 0xb8, 0xd1, 0x44, 0x0d, 0xf7, 0xef, 0x3d, 0xdc);
+DEFINE_KNOWN_FOLDER(FOLDERID_Music, 0x4bd8d571, 0x6d19, 0x48d3, 0xbe, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0e, 0x43);
+DEFINE_KNOWN_FOLDER(FOLDERID_MusicLibrary, 0x2112ab0a, 0xc86a, 0x4ffe, 0xa3, 0x68, 0x0d, 0xe9, 0x6e, 0x47, 0x01, 0x2e);
+DEFINE_KNOWN_FOLDER(FOLDERID_NetHood, 0xc5abbf53, 0xe17f, 0x4121, 0x89, 0x00, 0x86, 0x62, 0x6f, 0xc2, 0xc9, 0x73);
+DEFINE_KNOWN_FOLDER(FOLDERID_NetworkFolder, 0xd20beec4, 0x5ca8, 0x4905, 0xae, 0x3b, 0xbf, 0x25, 0x1e, 0xa0, 0x9b, 0x53);
+DEFINE_KNOWN_FOLDER(FOLDERID_OriginalImages, 0x2c36c0aa, 0x5812, 0x4b87, 0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39);
+DEFINE_KNOWN_FOLDER(FOLDERID_PhotoAlbums, 0x69d2cf90, 0xfc33, 0x4fb7, 0x9a, 0x0c, 0xeb, 0xb0, 0xf0, 0xfc, 0xb4, 0x3c);
+DEFINE_KNOWN_FOLDER(FOLDERID_Pictures, 0x33e28130, 0x4e1e, 0x4676, 0x83, 0x5a, 0x98, 0x39, 0x5c, 0x3b, 0xc3, 0xbb);
+DEFINE_KNOWN_FOLDER(FOLDERID_PicturesLibrary, 0xa990ae9f, 0xa03b, 0x4e80, 0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x04);
+DEFINE_KNOWN_FOLDER(FOLDERID_Playlists, 0xde92c1c7, 0x837f, 0x4f69, 0xa3, 0xbb, 0x86, 0xe6, 0x31, 0x20, 0x4a, 0x23);
+DEFINE_KNOWN_FOLDER(FOLDERID_PrintersFolder, 0x76fc4e2d, 0xd6ad, 0x4519, 0xa6, 0x63, 0x37, 0xbd, 0x56, 0x06, 0x81, 0x85);
+DEFINE_KNOWN_FOLDER(FOLDERID_PrintHood, 0x9274bd8d, 0xcfd1, 0x41c3, 0xb3, 0x5e, 0xb1, 0x3f, 0x55, 0xa7, 0x58, 0xf4);
+DEFINE_KNOWN_FOLDER(FOLDERID_Profile, 0x5e6c858f, 0x0e22, 0x4760, 0x9a, 0xfe, 0xea, 0x33, 0x17, 0xb6, 0x71, 0x73);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramData, 0x62ab5d82, 0xfdc1, 0x4dc3, 0xa9, 0xdd, 0x07, 0x0d, 0x1d, 0x49, 0x5d, 0x97);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFiles, 0x905e63b6, 0xc1bf, 0x494e, 0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommon, 0xf7f1ed05, 0x9f6d, 0x47a2, 0xaa, 0xae, 0x29, 0xd3, 0x17, 0xc6, 0xf0, 0x66);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX64, 0x6365d5a7, 0x0f0d, 0x45e5, 0x87, 0xf6, 0x0d, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesCommonX86, 0xde974d24, 0xd9c6, 0x4d3e, 0xbf, 0x91, 0xf4, 0x45, 0x51, 0x20, 0xb9, 0x17);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX64, 0x6d809377, 0x6af0, 0x444b, 0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e);
+DEFINE_KNOWN_FOLDER(FOLDERID_ProgramFilesX86, 0x7c5a40ef, 0xa0fb, 0x4bfc, 0x87, 0x4a, 0xc0, 0xf2, 0xe0, 0xb9, 0xfa, 0x8e);
+DEFINE_KNOWN_FOLDER(FOLDERID_Programs, 0xa77f5d77, 0x2e2b, 0x44c3, 0xa6, 0xa2, 0xab, 0xa6, 0x01, 0x05, 0x4a, 0x51);
+DEFINE_KNOWN_FOLDER(FOLDERID_Public, 0xdfdf76a2, 0xc82a, 0x4d63, 0x90, 0x6a, 0x56, 0x44, 0xac, 0x45, 0x73, 0x85);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicDesktop, 0xc4aa340d, 0xf20f, 0x4863, 0xaf, 0xef, 0xf8, 0x7e, 0xf2, 0xe6, 0xba, 0x25);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicDocuments, 0xed4824af, 0xdce4, 0x45a8, 0x81, 0xe2, 0xfc, 0x79, 0x65, 0x08, 0x36, 0x34);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicDownloads, 0x3d644c9b, 0x1fb8, 0x4f30, 0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicGameTasks, 0xdebf2536, 0xe1a8, 0x4c59, 0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicLibraries, 0x48daf80b, 0xe6cf, 0x4f4e, 0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicMusic, 0x3214fab5, 0x9757, 0x4298, 0xbb, 0x61, 0x92, 0xa9, 0xde, 0xaa, 0x44, 0xff);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicPictures, 0xb6ebfb86, 0x6907, 0x413c, 0x9a, 0xf7, 0x4f, 0xc2, 0xab, 0xf0, 0x7c, 0xc5);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicRingtones, 0xe555ab60, 0x153b, 0x4d17, 0x9f, 0x04, 0xa5, 0xfe, 0x99, 0xfc, 0x15, 0xec);
+DEFINE_KNOWN_FOLDER(FOLDERID_PublicVideos, 0x2400183a, 0x6185, 0x49fb, 0xa2, 0xd8, 0x4a, 0x39, 0x2a, 0x60, 0x2b, 0xa3);
+DEFINE_KNOWN_FOLDER(FOLDERID_QuickLaunch, 0x52a4f021, 0x7b75, 0x48a9, 0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f);
+DEFINE_KNOWN_FOLDER(FOLDERID_Recent, 0xae50c081, 0xebd2, 0x438a, 0x86, 0x55, 0x8a, 0x09, 0x2e, 0x34, 0x98, 0x7a);
+DEFINE_KNOWN_FOLDER(FOLDERID_RecordedTV, 0xbd85e001, 0x112e, 0x431e, 0x98, 0x3b, 0x7b, 0x15, 0xac, 0x09, 0xff, 0xf1);
+DEFINE_KNOWN_FOLDER(FOLDERID_RecordedTVLibrary, 0x1a6fdba2, 0xf42d, 0x4358, 0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5);
+DEFINE_KNOWN_FOLDER(FOLDERID_RecycleBinFolder, 0xb7534046, 0x3ecb, 0x4c18, 0xbe, 0x4e, 0x64, 0xcd, 0x4c, 0xb7, 0xd6, 0xac);
+DEFINE_KNOWN_FOLDER(FOLDERID_ResourceDir, 0x8ad10c31, 0x2adb, 0x4296, 0xa8, 0xf7, 0xe4, 0x70, 0x12, 0x32, 0xc9, 0x72);
+DEFINE_KNOWN_FOLDER(FOLDERID_Ringtones, 0xc870044b, 0xf49e, 0x4126, 0xa9, 0xc3, 0xb5, 0x2a, 0x1f, 0xf4, 0x11, 0xe8);
+DEFINE_KNOWN_FOLDER(FOLDERID_RoamingAppData, 0x3eb685db, 0x65f9, 0x4cf6, 0xa0, 0x3a, 0xe3, 0xef, 0x65, 0x72, 0x9f, 0x3d);
+DEFINE_KNOWN_FOLDER(FOLDERID_SampleMusic, 0xb250c668, 0xf57d, 0x4ee1, 0xa6, 0x3c, 0x29, 0x0e, 0xe7, 0xd1, 0xaa, 0x1f);
+DEFINE_KNOWN_FOLDER(FOLDERID_SamplePictures, 0xc4900540, 0x2379, 0x4c75, 0x84, 0x4b, 0x64, 0xe6, 0xfa, 0xf8, 0x71, 0x6b);
+DEFINE_KNOWN_FOLDER(FOLDERID_SamplePlaylists, 0x15ca69b3, 0x30ee, 0x49c1, 0xac, 0xe1, 0x6b, 0x5e, 0xc3, 0x72, 0xaf, 0xb5);
+DEFINE_KNOWN_FOLDER(FOLDERID_SampleVideos, 0x859ead94, 0x2e85, 0x48ad, 0xa7, 0x1a, 0x09, 0x69, 0xcb, 0x56, 0xa6, 0xcd);
+DEFINE_KNOWN_FOLDER(FOLDERID_SavedGames, 0x4c5c32ff, 0xbb9d, 0x43b0, 0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4);
+DEFINE_KNOWN_FOLDER(FOLDERID_SavedSearches, 0x7d1d3a04, 0xdebb, 0x4115, 0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda);
+DEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_CSC, 0xee32e446, 0x31ca, 0x4aba, 0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e);
+DEFINE_KNOWN_FOLDER(FOLDERID_SearchHome, 0x190337d1, 0xb8ca, 0x4121, 0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a);
+DEFINE_KNOWN_FOLDER(FOLDERID_SEARCH_MAPI, 0x98ec0e18, 0x2098, 0x4d44, 0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81);
+DEFINE_KNOWN_FOLDER(FOLDERID_SendTo, 0x8983036c, 0x27c0, 0x404b, 0x8f, 0x08, 0x10, 0x2d, 0x10, 0xdc, 0xfd, 0x74);
+DEFINE_KNOWN_FOLDER(FOLDERID_SidebarDefaultParts, 0x7b396e54, 0x9ec5, 0x4300, 0xbe, 0x0a, 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26);
+DEFINE_KNOWN_FOLDER(FOLDERID_SidebarParts, 0xa75d362e, 0x50fc, 0x4fb7, 0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93);
+DEFINE_KNOWN_FOLDER(FOLDERID_StartMenu, 0x625b53c3, 0xab48, 0x4ec1, 0xba, 0x1f, 0xa1, 0xef, 0x41, 0x46, 0xfc, 0x19);
+DEFINE_KNOWN_FOLDER(FOLDERID_Startup, 0xb97d20bb, 0xf46a, 0x4c97, 0xba, 0x10, 0x5e, 0x36, 0x08, 0x43, 0x08, 0x54);
+DEFINE_KNOWN_FOLDER(FOLDERID_SyncManagerFolder, 0x43668bf8, 0xc14e, 0x49b2, 0x97, 0xc9, 0x74, 0x77, 0x84, 0xd7, 0x84, 0xb7);
+DEFINE_KNOWN_FOLDER(FOLDERID_SyncResultsFolder, 0x289a9a43, 0xbe44, 0x4057, 0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9);
+DEFINE_KNOWN_FOLDER(FOLDERID_SyncSetupFolder, 0x0f214138, 0xb1d3, 0x4a90, 0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a);
+DEFINE_KNOWN_FOLDER(FOLDERID_System, 0x1ac14e77, 0x02e7, 0x4e5d, 0xb7, 0x44, 0x2e, 0xb1, 0xae, 0x51, 0x98, 0xb7);
+DEFINE_KNOWN_FOLDER(FOLDERID_SystemX86, 0xd65231b0, 0xb2f1, 0x4857, 0xa4, 0xce, 0xa8, 0xe7, 0xc6, 0xea, 0x7d, 0x27);
+DEFINE_KNOWN_FOLDER(FOLDERID_Templates, 0xa63293e8, 0x664e, 0x48db, 0xa0, 0x79, 0xdf, 0x75, 0x9e, 0x05, 0x09, 0xf7);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserPinned, 0x9e3995ab, 0x1f9c, 0x4f13, 0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserProfiles, 0x0762d272, 0xc50a, 0x4bb0, 0xa3, 0x82, 0x69, 0x7d, 0xcd, 0x72, 0x9b, 0x80);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFiles, 0x5cd7aee2, 0x2219, 0x4a67, 0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb);
+DEFINE_KNOWN_FOLDER(FOLDERID_UserProgramFilesCommon, 0xbcbd3057, 0xca5c, 0x4622, 0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16);
+DEFINE_KNOWN_FOLDER(FOLDERID_UsersFiles, 0xf3ce0f7c, 0x4901, 0x4acc, 0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f);
+DEFINE_KNOWN_FOLDER(FOLDERID_UsersLibraries, 0xa302545d, 0xdeff, 0x464b, 0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b);
+DEFINE_KNOWN_FOLDER(FOLDERID_Videos, 0x18989b1d, 0x99b5, 0x455b, 0x84, 0x1c, 0xab, 0x7c, 0x74, 0xe4, 0xdd, 0xfc);
+DEFINE_KNOWN_FOLDER(FOLDERID_VideosLibrary, 0x491e922f, 0x5643, 0x4af4, 0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74);
+DEFINE_KNOWN_FOLDER(FOLDERID_Windows, 0xf38bf404, 0x1d43, 0x42f2, 0x93, 0x05, 0x67, 0xde, 0x0b, 0x28, 0xfc, 0x23);
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h
new file mode 100644
index 00000000..6ff726a5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ks.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _KS_
+#define _KS_
+
+typedef union tagKSIDENTIFIER
+{
+ struct
+ {
+ GUID Set;
+ ULONG Id;
+ ULONG Flags;
+ } DUMMYSTRUCTNAME;
+ LONGLONG Alignment;
+} KSIDENTIFIER;
+
+typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY, KSMETHOD, *PKSMETHOD, KSEVENT, *PKSEVENT;
+
+typedef enum
+{
+ KSPIN_DATAFLOW_IN = 1,
+ KSPIN_DATAFLOW_OUT
+} KSPIN_DATAFLOW, *PKSPIN_DATAFLOW;
+
+#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION 0
+#define KSDATAFORMAT_BIT_ATTRIBUTES 1
+#define KSDATAFORMAT_TEMPORAL_COMPRESSION (1 << 0)
+#define KSDATAFORMAT_ATTRIBUTES 1 (1 << 1)
+
+#define KSDATARANGE_BIT_ATTRIBUTES 1
+#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES 2
+#define KSDATARANGE_ATTRIBUTES (1 << 1)
+#define KSDATARANGE_REQUIRED_ATTRIBUTES (1 << 2)
+
+typedef union unionKSDATAFORMAT
+{
+ struct
+ {
+ ULONG FormatSize;
+ ULONG Flags;
+ ULONG SampleSize;
+ ULONG Reserved;
+ GUID MajorFormat;
+ GUID SubFormat;
+ GUID Specifier;
+ } DUMMYSTRUCTNAME;
+ LONGLONG Alignment;
+} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;
+
+#endif /* _KS_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h
new file mode 100644
index 00000000..13c03e3b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksguid.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define INITGUID
+#include <guiddef.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h
new file mode 100644
index 00000000..5a7f9202
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ksmedia.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2004 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _KS_
+#error must include ks.h before ksmedia.h
+#endif
+
+#ifndef _KSMEDIA_
+#define _KSMEDIA_
+
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, 0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_MULAW, 0x00000007, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+DEFINE_GUID(KSDATAFORMAT_SUBTYPE_ALAW, 0x00000006, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
+
+#define KSAUDIO_SPEAKER_DIRECTOUT 0
+#define KSAUDIO_SPEAKER_MONO SPEAKER_FRONT_CENTER
+#define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
+#define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
+#define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
+#define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
+/* 5:1 SIDE or BACK is not distinguished, only 0x3F shall be used (BACK) */
+#define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)
+#define KSAUDIO_SPEAKER_7POINT1 (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
+/* 7:1 home theater 0x63F */
+#define KSAUDIO_SPEAKER_7POINT1_SURROUND (KSAUDIO_SPEAKER_5POINT1 | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)
+
+#ifndef REFERENCE_TIME_DEFINED
+#define REFERENCE_TIME_DEFINED
+typedef LONGLONG REFERENCE_TIME;
+#endif
+
+typedef enum
+{
+ eConnTypeUnknown = 0,
+ eConnType3Point5mm,
+ eConnTypeQuarter,
+ eConnTypeAtapiInternal,
+ eConnTypeRCA,
+ eConnTypeOptical,
+ eConnTypeOtherDigital,
+ eConnTypeOtherAnalog,
+ eConnTypeMultichannelAnalogDIN,
+ eConnTypeXlrProfessional,
+ eConnTypeRj11Modem,
+ eConnTypeCombination
+} EPcxConnectionType;
+
+typedef enum
+{
+ eGeoLocRear = 1,
+ eGeoLocFront,
+ eGeoLocLeft,
+ eGeoLocRight,
+ eGeoLocTop,
+ eGeoLocBottom,
+ eGeoLocRearPanel,
+ eGeoLocRiser,
+ eGeoLocInsideMobileLid,
+ eGeoLocDrivebay,
+ eGeoLocHDMI,
+ eGeoLocOutsideMobileLid,
+ eGeoLocATAPI,
+ eGeoLocReserved5,
+ eGeoLocReserved6
+} EPcxGeoLocation;
+
+typedef enum
+{
+ eGenLocPrimaryBox = 0,
+ eGenLocInternal,
+ eGenLocSeparate,
+ eGenLocOther
+} EPcxGenLocation;
+
+typedef enum
+{
+ ePortConnJack = 0,
+ ePortConnIntegratedDevice,
+ ePortConnBothIntegratedAndJack,
+ ePortConnUnknown
+} EPxcPortConnection;
+
+typedef struct
+{
+ DWORD ChannelMapping;
+ COLORREF Color;
+ EPcxConnectionType ConnectionType;
+ EPcxGeoLocation GeoLocation;
+ EPcxGenLocation GenLocation;
+ EPxcPortConnection PortConnection;
+ BOOL IsConnected;
+} KSJACK_DESCRIPTION;
+
+typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION;
+
+typedef enum
+{
+ KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,
+ KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT
+} KSJACK_SINK_CONNECTIONTYPE;
+
+#define MAX_SINK_DESCRIPTION_NAME_LENGTH 32
+
+typedef struct _tagKSJACK_SINK_INFORMATION
+{
+ KSJACK_SINK_CONNECTIONTYPE ConnType;
+ WORD ManufacturerId;
+ WORD ProductId;
+ WORD AudioLatency;
+ BOOL HDCPCapable;
+ BOOL AICapable;
+ UCHAR SinkDescriptionLength;
+ WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH];
+ LUID PortId;
+} KSJACK_SINK_INFORMATION;
+
+#define JACKDESC2_PRESENCE_DETECT_CAPABILITY 0x1
+#define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x2
+
+typedef struct _tagKSJACK_DESCRIPTION2
+{
+ DWORD DeviceStateInfo;
+ DWORD JackCapabilities;
+} KSJACK_DESCRIPTION2;
+
+typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
+
+#endif /* _KSMEDIA_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h
new file mode 100644
index 00000000..63baea5c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lm.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * General lm header which includes other lm headers.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LM_H
+#define __WINE_LM_H
+
+#include <lmcons.h>
+#include <lmerr.h>
+#include <lmshare.h>
+#include <lmaccess.h>
+#include <lmserver.h>
+#include <lmwksta.h>
+#include <lmapibuf.h>
+#include <lmstats.h>
+#include <lmjoin.h>
+#include <lmmsg.h>
+#include <lmuse.h>
+/* FIXME: #include <lmalert.h> */
+/* FIXME: #include <lmremutl.h> */
+/* FIXME: #include <lmrepl.h> */
+/* FIXME: #include <lmsvc.h> */
+/* FIXME: #include <lmerrlog.h> */
+/* FIXME: #include <lmconfig.h> */
+/* FIXME: #include <lmaudit.h> */
+
+/* The following are obsolete headers */
+#include <lmbrowsr.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h
new file mode 100644
index 00000000..d6cdf808
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmaccess.h
@@ -0,0 +1,487 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * User information Net API.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMACCESS_H
+#define __WINE_LMACCESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <lmcons.h>
+
+#define UF_SCRIPT 0x000001
+#define UF_ACCOUNTDISABLE 0x000002
+#define UF_HOMEDIR_REQUIRED 0x000008
+#define UF_LOCKOUT 0x000010
+#define UF_PASSWD_NOTREQD 0x000020
+#define UF_PASSWD_CANT_CHANGE 0x000040
+#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x000080
+#define UF_TEMP_DUPLICATE_ACCOUNT 0x000100
+#define UF_NORMAL_ACCOUNT 0x000200
+#define UF_INTERDOMAIN_TRUST_ACCOUNT 0x000800
+#define UF_WORKSTATION_TRUST_ACCOUNT 0x001000
+#define UF_SERVER_TRUST_ACCOUNT 0x002000
+#define UF_DONT_EXPIRE_PASSWD 0x010000
+#define UF_MNS_LOGON_ACCOUNT 0x020000
+#define UF_SMARTCARD_REQUIRED 0x040000
+#define UF_TRUSTED_FOR_DELEGATION 0x080000
+#define UF_NOT_DELEGATED 0x100000
+#define UF_USE_DES_KEY_ONLY 0x200000
+#define UF_DONT_REQUIRE_PREAUTH 0x400000
+#define UF_PASSWORD_EXPIRED 0x800000
+
+
+#define UF_MACHINE_ACCOUNT_MASK ( \
+ UF_INTERDOMAIN_TRUST_ACCOUNT | \
+ UF_WORKSTATION_TRUST_ACCOUNT | \
+ UF_SERVER_TRUST_ACCOUNT)
+
+#define UF_ACCOUNT_TYPE_MASK ( \
+ UF_TEMP_DUPLICATE_ACCOUNT | \
+ UF_NORMAL_ACCOUNT | \
+ UF_INTERDOMAIN_TRUST_ACCOUNT | \
+ UF_WORKSTATION_TRUST_ACCOUNT | \
+ UF_SERVER_TRUST_ACCOUNT)
+
+#define UF_SETTABLE_BITS ( \
+ UF_SCRIPT | \
+ UF_ACCOUNTDISABLE | \
+ UF_LOCKOUT | \
+ UF_HOMEDIR_REQUIRED | \
+ UF_PASSWD_NOTREQD | \
+ UF_PASSWD_CANT_CHANGE | \
+ UF_ACCOUNT_TYPE_MASK | \
+ UF_DONT_EXPIRE_PASSWD | \
+ UF_MNS_LOGON_ACCOUNT |\
+ UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED |\
+ UF_SMARTCARD_REQUIRED | \
+ UF_TRUSTED_FOR_DELEGATION | \
+ UF_NOT_DELEGATED | \
+ UF_USE_DES_KEY_ONLY | \
+ UF_DONT_REQUIRE_PREAUTH |\
+ UF_PASSWORD_EXPIRED)
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_USERS (const WCHAR []){ 'U','S','E','R','S',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_USERS L"USERS"
+#else
+static const WCHAR GROUP_SPECIALGRP_USERS[] = { 'U','S','E','R','S',0 };
+#endif
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_ADMINS (const WCHAR []){ 'A','D','M','I','N','S',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_ADMINS L"ADMINS"
+#else
+static const WCHAR GROUP_SPECIALGRP_ADMINS[] = { 'A','D','M','I','N','S',0 };
+#endif
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_GUESTS (const WCHAR []){ 'G','U','E','S','T','S',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_GUESTS L"GUESTS"
+#else
+static const WCHAR GROUP_SPECIALGRP_GUESTS[] = { 'G','U','E','S','T','S',0 };
+#endif
+
+#if defined(__GNUC__)
+# define GROUP_SPECIALGRP_LOCAL (const WCHAR []){ 'L','O','C','A','L',0 }
+#elif defined(_MSC_VER)
+# define GROUP_SPECIALGRP_LOCAL L"LOCAL"
+#else
+static const WCHAR GROUP_SPECIALGRP_LOCAL[] = { 'L','O','C','A','L',0 };
+#endif
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+#ifndef WINE_PNTSTATUS_DECLARED
+#define WINE_PNTSTATUS_DECLARED
+typedef NTSTATUS *PNTSTATUS;
+#endif
+
+/* NetGetUserInfo structures */
+typedef struct _USER_INFO_0 {
+ LPWSTR usri0_name;
+} USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;
+
+typedef struct _USER_INFO_1 {
+ LPWSTR usri1_name;
+ LPWSTR usri1_password;
+ DWORD usri1_password_age;
+ DWORD usri1_priv;
+ LPWSTR usri1_home_dir;
+ LPWSTR usri1_comment;
+ DWORD usri1_flags;
+ LPWSTR usri1_script_path;
+} USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
+
+typedef struct _USER_INFO_2 {
+ LPWSTR usri2_name;
+ LPWSTR usri2_password;
+ DWORD usri2_password_age;
+ DWORD usri2_priv;
+ LPWSTR usri2_home_dir;
+ LPWSTR usri2_comment;
+ DWORD usri2_flags;
+ LPWSTR usri2_script_path;
+ DWORD usri2_auth_flags;
+ LPWSTR usri2_full_name;
+ LPWSTR usri2_usr_comment;
+ LPWSTR usri2_parms;
+ LPWSTR usri2_workstations;
+ DWORD usri2_last_logon;
+ DWORD usri2_last_logoff;
+ DWORD usri2_acct_expires;
+ DWORD usri2_max_storage;
+ DWORD usri2_units_per_week;
+ PBYTE usri2_logon_hours;
+ DWORD usri2_bad_pw_count;
+ DWORD usri2_num_logons;
+ LPWSTR usri2_logon_server;
+ DWORD usri2_country_code;
+ DWORD usri2_code_page;
+} USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;
+
+typedef struct _USER_INFO_3 {
+ LPWSTR usri3_name;
+ LPWSTR usri3_password;
+ DWORD usri3_password_age;
+ DWORD usri3_priv;
+ LPWSTR usri3_home_dir;
+ LPWSTR usri3_comment;
+ DWORD usri3_flags;
+ LPWSTR usri3_script_path;
+ DWORD usri3_auth_flags;
+ LPWSTR usri3_full_name;
+ LPWSTR usri3_usr_comment;
+ LPWSTR usri3_parms;
+ LPWSTR usri3_workstations;
+ DWORD usri3_last_logon;
+ DWORD usri3_last_logoff;
+ DWORD usri3_acct_expires;
+ DWORD usri3_max_storage;
+ DWORD usri3_units_per_week;
+ PBYTE usri3_logon_hours;
+ DWORD usri3_bad_pw_count;
+ DWORD usri3_num_logons;
+ LPWSTR usri3_logon_server;
+ DWORD usri3_country_code;
+ DWORD usri3_code_page;
+ DWORD usri3_user_id;
+ DWORD usri3_primary_group_id;
+ LPWSTR usri3_profile;
+ LPWSTR usri3_home_dir_drive;
+ DWORD usri3_password_expired;
+} USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;
+
+typedef struct _USER_INFO_4 {
+ LPWSTR usri4_name;
+ LPWSTR usri4_password;
+ DWORD usri4_password_age;
+ DWORD usri4_priv;
+ LPWSTR usri4_home_dir;
+ LPWSTR usri4_comment;
+ DWORD usri4_flags;
+ LPWSTR usri4_script_path;
+ DWORD usri4_auth_flags;
+ LPWSTR usri4_full_name;
+ LPWSTR usri4_usr_comment;
+ LPWSTR usri4_parms;
+ LPWSTR usri4_workstations;
+ DWORD usri4_last_logon;
+ DWORD usri4_last_logoff;
+ DWORD usri4_acct_expires;
+ DWORD usri4_max_storage;
+ DWORD usri4_units_per_week;
+ PBYTE usri4_logon_hours;
+ DWORD usri4_bad_pw_count;
+ DWORD usri4_num_logons;
+ LPWSTR usri4_logon_server;
+ DWORD usri4_country_code;
+ DWORD usri4_code_page;
+ PSID usri4_user_sid;
+ DWORD usri4_primary_group_id;
+ LPWSTR usri4_profile;
+ LPWSTR usri4_home_dir_drive;
+ DWORD usri4_password_expired;
+} USER_INFO_4, *PUSER_INFO_4, *LPUSER_INFO_4;
+
+typedef struct _USER_INFO_10 {
+ LPWSTR usri10_name;
+ LPWSTR usri10_comment;
+ LPWSTR usri10_usr_comment;
+ LPWSTR usri10_full_name;
+} USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10;
+
+typedef struct _USER_INFO_11 {
+ LPWSTR usri11_name;
+ LPWSTR usri11_comment;
+ LPWSTR usri11_usr_comment;
+ LPWSTR usri11_full_name;
+ DWORD usri11_priv;
+ DWORD usri11_auth_flags;
+ DWORD usri11_password_age;
+ LPWSTR usri11_home_dir;
+ LPWSTR usri11_parms;
+ DWORD usri11_last_logon;
+ DWORD usri11_last_logoff;
+ DWORD usri11_bad_pw_count;
+ DWORD usri11_num_logons;
+ LPWSTR usri11_logon_server;
+ DWORD usri11_country_code;
+ LPWSTR usri11_workstations;
+ DWORD usri11_max_storage;
+ DWORD usri11_units_per_week;
+ PBYTE usri11_logon_hours;
+ DWORD usri11_code_page;
+} USER_INFO_11, *PUSER_INFO_11, *LPUSER_INFO_11;
+
+typedef struct _USER_INFO_20 {
+ LPWSTR usri20_name;
+ LPWSTR usri20_full_name;
+ LPWSTR usri20_comment;
+ DWORD usri20_flags;
+ DWORD usri20_user_id;
+} USER_INFO_20, *PUSER_INFO_20, *LPUSER_INFO_20;
+
+typedef struct _USER_INFO_23 {
+ LPWSTR usri23_name;
+ LPWSTR usri23_full_name;
+ LPWSTR usri23_comment;
+ DWORD usri23_flags;
+ PSID usri23_user_sid;
+} USER_INFO_23, *PUSER_INFO_23, *LPUSER_INFO_23;
+
+typedef struct _USER_INFO_1003 {
+ LPWSTR usri1003_password;
+} USER_INFO_1003, *PUSER_INFO_1003, *LPUSER_INFO_1003;
+
+typedef struct _USER_INFO_1005 {
+ DWORD usri1005_priv;
+} USER_INFO_1005, *PUSER_INFO_1005, *LPUSER_INFO_1005;
+
+typedef struct _USER_INFO_1006 {
+ LPWSTR usri1006_home_dir;
+} USER_INFO_1006, *PUSER_INFO_1006, *LPUSER_INFO_1006;
+
+typedef struct _USER_INFO_1007 {
+ LPWSTR usri1007_comment;
+} USER_INFO_1007, *PUSER_INFO_1007, *LPUSER_INFO_1007;
+
+typedef struct _USER_INFO_1008 {
+ DWORD usri1008_flags;
+} USER_INFO_1008, *PUSER_INFO_1008, *LPUSER_INFO_1008;
+
+typedef struct _USER_INFO_1009 {
+ LPWSTR usri1009_script_path;
+} USER_INFO_1009, *PUSER_INFO_1009, *LPUSER_INFO_1009;
+
+typedef struct _USER_INFO_1010 {
+ DWORD usri1010_auth_flags;
+} USER_INFO_1010, *PUSER_INFO_1010, *LPUSER_INFO_1010;
+
+typedef struct _USER_INFO_1011 {
+ LPWSTR usri1011_full_name;
+} USER_INFO_1011, *PUSER_INFO_1011, *LPUSER_INFO_1011;
+
+typedef struct _USER_INFO_1012 {
+ LPWSTR usri1012_usr_comment;
+} USER_INFO_1012, *PUSER_INFO_1012, *LPUSER_INFO_1012;
+
+typedef struct _USER_INFO_1013 {
+ LPWSTR usri1013_parms;
+} USER_INFO_1013, *PUSER_INFO_1013, *LPUSER_INFO_1013;
+
+typedef struct _USER_INFO_1014 {
+ LPWSTR usri1014_workstations;
+} USER_INFO_1014, *PUSER_INFO_1014, *LPUSER_INFO_1014;
+
+typedef struct _USER_INFO_1017 {
+ DWORD usri1017_acct_expires;
+} USER_INFO_1017, *PUSER_INFO_1017, *LPUSER_INFO_1017;
+
+typedef struct _USER_INFO_1018 {
+ DWORD usri1018_max_storage;
+} USER_INFO_1018, *PUSER_INFO_1018, *LPUSER_INFO_1018;
+
+typedef struct _USER_INFO_1020 {
+ DWORD usri1020_units_per_week;
+ LPBYTE usri1020_logon_hours;
+} USER_INFO_1020, *PUSER_INFO_1020, *LPUSER_INFO_1020;
+
+typedef struct _USER_INFO_1023 {
+ LPWSTR usri1023_logon_server;
+} USER_INFO_1023, *PUSER_INFO_1023, *LPUSER_INFO_1023;
+
+typedef struct _USER_INFO_1024 {
+ DWORD usri1024_country_code;
+} USER_INFO_1024, *PUSER_INFO_1024, *LPUSER_INFO_1024;
+
+typedef struct _USER_INFO_1025 {
+ DWORD usri1025_code_page;
+} USER_INFO_1025, *PUSER_INFO_1025, *LPUSER_INFO_1025;
+
+typedef struct _USER_INFO_1051 {
+ DWORD usri1051_primary_group_id;
+} USER_INFO_1051, *PUSER_INFO_1051, *LPUSER_INFO_1051;
+
+typedef struct _USER_INFO_1052 {
+ LPWSTR usri1052_profile;
+} USER_INFO_1052, *PUSER_INFO_1052, *LPUSER_INFO_1052;
+
+typedef struct _USER_INFO_1053 {
+ LPWSTR usri1053_home_dir_drive;
+} USER_INFO_1053, *PUSER_INFO_1053, *LPUSER_INFO_1053;
+
+typedef struct _USER_MODALS_INFO_0 {
+ DWORD usrmod0_min_passwd_len;
+ DWORD usrmod0_max_passwd_age;
+ DWORD usrmod0_min_passwd_age;
+ DWORD usrmod0_force_logoff;
+ DWORD usrmod0_password_hist_len;
+} USER_MODALS_INFO_0, *PUSER_MODALS_INFO_0, *LPUSER_MODALS_INFO_0;
+
+typedef struct _USER_MODALS_INFO_1 {
+ DWORD usrmod1_role;
+ LPWSTR usrmod1_primary;
+} USER_MODALS_INFO_1, *PUSER_MODALS_INFO_1, *LPUSER_MODALS_INFO_1;
+
+typedef struct _USER_MODALS_INFO_2 {
+ LPWSTR usrmod2_domain_name;
+ PSID usrmod2_domain_id;
+} USER_MODALS_INFO_2, *PUSER_MODALS_INFO_2, *LPUSER_MODALS_INFO_2;
+
+typedef struct _USER_MODALS_INFO_3 {
+ DWORD usrmod3_lockout_duration;
+ DWORD usrmod3_lockout_observation_window;
+ DWORD usrmod3_lockout_threshold;
+} USER_MODALS_INFO_3, *PUSER_MODALS_INFO_3, *LPUSER_MODALS_INFO_3;
+
+typedef struct _NET_DISPLAY_USER {
+ LPWSTR usri1_name;
+ LPWSTR usri1_comment;
+ DWORD usri1_flags;
+ LPWSTR usri1_full_name;
+ DWORD usri1_user_id;
+ DWORD usri1_next_index;
+} NET_DISPLAY_USER, *PNET_DISPLAY_USER;
+
+typedef struct _NET_DISPLAY_MACHINE {
+ LPWSTR usri2_name;
+ LPWSTR usri2_comment;
+ DWORD usri2_flags;
+ DWORD usri2_user_id;
+ DWORD usri2_next_index;
+} NET_DISPLAY_MACHINE, *PNET_DISPLAY_MACHINE;
+
+typedef struct _NET_DISPLAY_GROUP {
+ LPWSTR grpi3_name;
+ LPWSTR grpi3_comment;
+ DWORD grpi3_group_id;
+ DWORD grpi3_attributes;
+ DWORD grpi3_next_index;
+} NET_DISPLAY_GROUP, *PNET_DISPLAY_GROUP;
+
+typedef struct _LOCALGROUP_INFO_0 {
+ LPWSTR lgrpi0_name;
+} LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;
+
+typedef struct _LOCALGROUP_INFO_1 {
+ LPWSTR lgrpi1_name;
+ LPWSTR lgrpi1_comment;
+} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;
+
+typedef struct _LOCALGROUP_INFO_1002 {
+ LPWSTR lgrpi1002_comment;
+} LOCALGROUP_INFO_1002, *PLOCALGROUP_INFO_1002, *LPLOCALGROUP_INFO_1002;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
+ PSID lgrmi0_sid;
+} LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0, *LPLOCALGROUP_MEMBERS_INFO_0;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_1 {
+ PSID lgrmi1_sid;
+ SID_NAME_USE lgrmi1_sidusage;
+ LPWSTR lgrmi1_name;
+} LOCALGROUP_MEMBERS_INFO_1, *PLOCALGROUP_MEMBERS_INFO_1, *LPLOCALGROUP_MEMBERS_INFO_1;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_2 {
+ PSID lgrmi2_sid;
+ SID_NAME_USE lgrmi2_sidusage;
+ LPWSTR lgrmi2_domainandname;
+} LOCALGROUP_MEMBERS_INFO_2, *PLOCALGROUP_MEMBERS_INFO_2, *LPLOCALGROUP_MEMBERS_INFO_2;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
+ LPWSTR lgrmi3_domainandname;
+} LOCALGROUP_MEMBERS_INFO_3, *PLOCALGROUP_MEMBERS_INFO_3, *LPLOCALGROUP_MEMBERS_INFO_3;
+
+typedef struct _LOCALGROUP_USERS_INFO_0 {
+ LPWSTR lgrui0_name;
+} LOCALGROUP_USERS_INFO_0, *PLOCALGROUP_USERS_INFO_0, *LPLOCALGROUP_USERS_INFO_0;
+
+#define USER_PRIV_GUEST 0
+#define USER_PRIV_USER 1
+#define USER_PRIV_ADMIN 2
+#define USER_PRIV_MASK 3
+
+#define LOCALGROUP_NAME_PARMNUM 1
+#define LOCALGROUP_COMMENT_PARMNUM 2
+
+NET_API_STATUS WINAPI NetGetDCName(LPCWSTR,LPCWSTR,LPBYTE*);
+NET_API_STATUS WINAPI NetGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetLocalGroupAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetLocalGroupAddMember(LPCWSTR,LPCWSTR,PSID);
+NET_API_STATUS WINAPI NetLocalGroupAddMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetLocalGroupDelMember(LPCWSTR,LPCWSTR,PSID);
+NET_API_STATUS WINAPI NetLocalGroupDelMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
+NET_API_STATUS WINAPI NetLocalGroupEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR);
+NET_API_STATUS WINAPI NetLocalGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetLocalGroupGetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,PDWORD_PTR);
+NET_API_STATUS WINAPI NetLocalGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetLocalGroupSetMembers(LPCWSTR,LPCWSTR,DWORD,LPBYTE,DWORD);
+NET_API_STATUS WINAPI NetQueryDisplayInformation(LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPDWORD,PVOID*);
+NET_API_STATUS WINAPI NetUserAdd(LPCWSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetUserDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS WINAPI NetUserEnum(LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR,LPCWSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetUserGetGroups(LPCWSTR,LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUserGetLocalGroups(LPCWSTR,LPCWSTR,DWORD,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUserModalsGet(LPCWSTR,DWORD,LPBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h
new file mode 100644
index 00000000..d265f9b6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmapibuf.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Net API buffer calls
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMAPIBUF_H
+#define __WINE_LMAPIBUF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Buffer functions */
+NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID* Buffer);
+NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer);
+NET_API_STATUS WINAPI NetApiBufferReallocate(LPVOID OldBuffer, DWORD NewByteCount,
+ LPVOID* NewBuffer);
+NET_API_STATUS WINAPI NetApiBufferSize(LPVOID Buffer, LPDWORD ByteCount);
+NET_API_STATUS WINAPI NetapipBufferAllocate(DWORD ByteCount, LPVOID* Buffer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h
new file mode 100644
index 00000000..3c887118
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmat.h
@@ -0,0 +1,44 @@
+/*
+ * Schedule Service Functions
+ *
+ * Copyright (C) 2011 Louis Lenders
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMAT_H
+#define __WINE_LMAT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+NET_API_STATUS WINAPI NetScheduleJobAdd(LPCWSTR,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetScheduleJobEnum(LPCWSTR,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_LMAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h
new file mode 100644
index 00000000..55f1d068
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmbrowsr.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * Browser NET API calls
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMBROWSR_H
+#define __WINE_LMBROWSR_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _BROWSER_EMULATED_DOMAIN {
+ LPWSTR DomainName;
+ LPWSTR EmulatedServerName;
+ DWORD Role;
+} BROWSER_EMULATED_DOMAIN, *PBROWSER_EMULATED_DOMAIN;
+
+NET_API_STATUS WINAPI I_BrowserSetNetlogonState(
+ LPWSTR ServerName, LPWSTR DomainName, LPWSTR EmulatedServerName,
+ DWORD Role);
+
+NET_API_STATUS WINAPI I_BrowserQueryEmulatedDomains(
+ LPWSTR ServerName, PBROWSER_EMULATED_DOMAIN *EmulatedDomains,
+ LPDWORD EntriesRead);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h
new file mode 100644
index 00000000..dea8082e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmcons.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 1999 Rein Klazes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMCONS_H
+#define __WINE_LMCONS_H
+
+/* Types */
+
+#define NET_API_STATUS DWORD
+#define API_RET_TYPE NET_API_STATUS
+#define NET_API_FUNCTION WINAPI
+
+#define MAX_PREFERRED_LENGTH ((DWORD) -1)
+
+/* Lan manager API defines */
+
+#define UNLEN 256
+#define LM20_UNLEN 20
+#define GNLEN UNLEN
+#define LM20_GNLEN LM20_UNLEN
+#define PWLEN 256
+#define LM20_PWLEN 14
+#define SHPWLEN 8
+#define CNLEN 15
+#define LM20_CNLEN CNLEN
+#define DNLEN CNLEN
+#define LM20_DNLEN DNLEN
+#define UNCLEN (CNLEN+2)
+#define LM20_UNCLEN (LM20_CNLEN+2)
+#define NNLEN 80
+#define LM20_NNLEN 12
+#define RMLEN (UNCLEN+1+NNLEN)
+#define LM20_RMLEN (LM20_UNCLEN+1+LM20_NNLEN)
+#define SNLEN 80
+#define LM20_SNLEN 15
+#define STXTLEN 256
+#define LM20_STXTLEN 63
+#define PATHLEN 256
+#define LM20_PATHLEN 256
+#define DEVLEN 80
+#define LM20_DEVLEN 8
+#define EVLEN 16
+#define CLTYPE_LEN 12
+
+/* platform IDs */
+#define PLATFORM_ID_DOS 300
+#define PLATFORM_ID_OS2 400
+#define PLATFORM_ID_NT 500
+#define PLATFORM_ID_OSF 600
+#define PLATFORM_ID_VMS 700
+
+#define LMSTR LPWSTR
+#define LMCSTR LPCWSTR
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h
new file mode 100644
index 00000000..28685790
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmerr.h
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * NERR error codes.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMERR_H
+#define __WINE_LMERR_H
+
+#include <winerror.h>
+
+#define NERR_Success 0
+
+#define NERR_BASE 2100
+
+#define NERR_NetNotStarted (NERR_BASE + 2)
+#define NERR_UnknownServer (NERR_BASE + 3)
+#define NERR_ShareMem (NERR_BASE + 4)
+#define NERR_NoNetworkResource (NERR_BASE + 5)
+#define NERR_RemoteOnly (NERR_BASE + 6)
+#define NERR_DevNotRedirected (NERR_BASE + 7)
+#define NERR_ServerNotStarted (NERR_BASE + 14)
+#define NERR_ItemNotFound (NERR_BASE + 15)
+#define NERR_UnknownDevDir (NERR_BASE + 16)
+#define NERR_RedirectedPath (NERR_BASE + 17)
+#define NERR_DuplicateShare (NERR_BASE + 18)
+#define NERR_NoRoom (NERR_BASE + 19)
+#define NERR_TooManyItems (NERR_BASE + 21)
+#define NERR_InvalidMaxUsers (NERR_BASE + 22)
+#define NERR_BufTooSmall (NERR_BASE + 23)
+#define NERR_RemoteErr (NERR_BASE + 27)
+#define NERR_LanmanIniError (NERR_BASE + 31)
+#define NERR_NetworkError (NERR_BASE + 36)
+#define NERR_WkstaInconsistentState (NERR_BASE + 37)
+#define NERR_WkstaNotStarted (NERR_BASE + 38)
+#define NERR_BrowserNotStarted (NERR_BASE + 39)
+#define NERR_InternalError (NERR_BASE + 40)
+#define NERR_BadTransactConfig (NERR_BASE + 41)
+#define NERR_InvalidAPI (NERR_BASE + 42)
+#define NERR_BadEventName (NERR_BASE + 43)
+#define NERR_DupNameReboot (NERR_BASE + 44)
+#define NERR_CfgCompNotFound (NERR_BASE + 46)
+#define NERR_CfgParamNotFound (NERR_BASE + 47)
+#define NERR_LineTooLong (NERR_BASE + 49)
+#define NERR_QNotFound (NERR_BASE + 50)
+#define NERR_JobNotFound (NERR_BASE + 51)
+#define NERR_DestNotFound (NERR_BASE + 52)
+#define NERR_DestExists (NERR_BASE + 53)
+#define NERR_QExists (NERR_BASE + 54)
+#define NERR_QNoRoom (NERR_BASE + 55)
+#define NERR_JobNoRoom (NERR_BASE + 56)
+#define NERR_DestNoRoom (NERR_BASE + 57)
+#define NERR_DestIdle (NERR_BASE + 58)
+#define NERR_DestInvalidOp (NERR_BASE + 59)
+#define NERR_ProcNoRespond (NERR_BASE + 60)
+#define NERR_SpoolerNotLoaded (NERR_BASE + 61)
+#define NERR_DestInvalidState (NERR_BASE + 62)
+#define NERR_QInvalidState (NERR_BASE + 63)
+#define NERR_JobInvalidState (NERR_BASE + 64)
+#define NERR_SpoolNoMemory (NERR_BASE + 65)
+#define NERR_DriverNotFound (NERR_BASE + 66)
+#define NERR_DataTypeInvalid (NERR_BASE + 67)
+#define NERR_ProcNotFound (NERR_BASE + 68)
+#define NERR_ServiceTableLocked (NERR_BASE + 80)
+#define NERR_ServiceTableFull (NERR_BASE + 81)
+#define NERR_ServiceInstalled (NERR_BASE + 82)
+#define NERR_ServiceEntryLocked (NERR_BASE + 83)
+#define NERR_ServiceNotInstalled (NERR_BASE + 84)
+#define NERR_BadServiceName (NERR_BASE + 85)
+#define NERR_ServiceCtlTimeout (NERR_BASE + 86)
+#define NERR_ServiceCtlBusy (NERR_BASE + 87)
+#define NERR_BadServiceProgName (NERR_BASE + 88)
+#define NERR_ServiceNotCtrl (NERR_BASE + 89)
+#define NERR_ServiceKillProc (NERR_BASE + 90)
+#define NERR_ServiceCtlNotValid (NERR_BASE + 91)
+#define NERR_NotInDispatchTbl (NERR_BASE + 92)
+#define NERR_BadControlRecv (NERR_BASE + 93)
+#define NERR_ServiceNotStarting (NERR_BASE + 94)
+#define NERR_AlreadyLoggedOn (NERR_BASE + 100)
+#define NERR_NotLoggedOn (NERR_BASE + 101)
+#define NERR_BadUsername (NERR_BASE + 102)
+#define NERR_BadPassword (NERR_BASE + 103)
+#define NERR_UnableToAddName_W (NERR_BASE + 104)
+#define NERR_UnableToAddName_F (NERR_BASE + 105)
+#define NERR_UnableToDelName_W (NERR_BASE + 106)
+#define NERR_UnableToDelName_F (NERR_BASE + 107)
+#define NERR_LogonsPaused (NERR_BASE + 109)
+#define NERR_LogonServerConflict (NERR_BASE + 110)
+#define NERR_LogonNoUserPath (NERR_BASE + 111)
+#define NERR_LogonScriptError (NERR_BASE + 112)
+#define NERR_StandaloneLogon (NERR_BASE + 114)
+#define NERR_LogonServerNotFound (NERR_BASE + 115)
+#define NERR_LogonDomainExists (NERR_BASE + 116)
+#define NERR_NonValidatedLogon (NERR_BASE + 117)
+#define NERR_ACFNotFound (NERR_BASE + 119)
+#define NERR_GroupNotFound (NERR_BASE + 120)
+#define NERR_UserNotFound (NERR_BASE + 121)
+#define NERR_ResourceNotFound (NERR_BASE + 122)
+#define NERR_GroupExists (NERR_BASE + 123)
+#define NERR_UserExists (NERR_BASE + 124)
+#define NERR_ResourceExists (NERR_BASE + 125)
+#define NERR_NotPrimary (NERR_BASE + 126)
+#define NERR_ACFNotLoaded (NERR_BASE + 127)
+#define NERR_ACFNoRoom (NERR_BASE + 128)
+#define NERR_ACFFileIOFail (NERR_BASE + 129)
+#define NERR_ACFTooManyLists (NERR_BASE + 130)
+#define NERR_UserLogon (NERR_BASE + 131)
+#define NERR_ACFNoParent (NERR_BASE + 132)
+#define NERR_CanNotGrowSegment (NERR_BASE + 133)
+#define NERR_SpeGroupOp (NERR_BASE + 134)
+#define NERR_NotInCache (NERR_BASE + 135)
+#define NERR_UserInGroup (NERR_BASE + 136)
+#define NERR_UserNotInGroup (NERR_BASE + 137)
+#define NERR_AccountUndefined (NERR_BASE + 138)
+#define NERR_AccountExpired (NERR_BASE + 139)
+#define NERR_InvalidWorkstation (NERR_BASE + 140)
+#define NERR_InvalidLogonHours (NERR_BASE + 141)
+#define NERR_PasswordExpired (NERR_BASE + 142)
+#define NERR_PasswordCantChange (NERR_BASE + 143)
+#define NERR_PasswordHistConflict (NERR_BASE + 144)
+#define NERR_PasswordTooShort (NERR_BASE + 145)
+#define NERR_PasswordTooRecent (NERR_BASE + 146)
+#define NERR_InvalidDatabase (NERR_BASE + 147)
+#define NERR_DatabaseUpToDate (NERR_BASE + 148)
+#define NERR_SyncRequired (NERR_BASE + 149)
+#define NERR_UseNotFound (NERR_BASE + 150)
+#define NERR_BadAsgType (NERR_BASE + 151)
+#define NERR_DeviceIsShared (NERR_BASE + 152)
+#define NERR_NoComputerName (NERR_BASE + 170)
+#define NERR_MsgAlreadyStarted (NERR_BASE + 171)
+#define NERR_MsgInitFailed (NERR_BASE + 172)
+#define NERR_NameNotFound (NERR_BASE + 173)
+#define NERR_AlreadyForwarded (NERR_BASE + 174)
+#define NERR_AddForwarded (NERR_BASE + 175)
+#define NERR_AlreadyExists (NERR_BASE + 176)
+#define NERR_TooManyNames (NERR_BASE + 177)
+#define NERR_DelComputerName (NERR_BASE + 178)
+#define NERR_LocalForward (NERR_BASE + 179)
+#define NERR_GrpMsgProcessor (NERR_BASE + 180)
+#define NERR_PausedRemote (NERR_BASE + 181)
+#define NERR_BadReceive (NERR_BASE + 182)
+#define NERR_NameInUse (NERR_BASE + 183)
+#define NERR_MsgNotStarted (NERR_BASE + 184)
+#define NERR_NotLocalName (NERR_BASE + 185)
+#define NERR_NoForwardName (NERR_BASE + 186)
+#define NERR_RemoteFull (NERR_BASE + 187)
+#define NERR_NameNotForwarded (NERR_BASE + 188)
+#define NERR_TruncatedBroadcast (NERR_BASE + 189)
+#define NERR_InvalidDevice (NERR_BASE + 194)
+#define NERR_WriteFault (NERR_BASE + 195)
+#define NERR_DuplicateName (NERR_BASE + 197)
+#define NERR_DeleteLater (NERR_BASE + 198)
+#define NERR_IncompleteDel (NERR_BASE + 199)
+#define NERR_MultipleNets (NERR_BASE + 200)
+#define NERR_NetNameNotFound (NERR_BASE + 210)
+#define NERR_DeviceNotShared (NERR_BASE + 211)
+#define NERR_ClientNameNotFound (NERR_BASE + 212)
+#define NERR_FileIdNotFound (NERR_BASE + 214)
+#define NERR_ExecFailure (NERR_BASE + 215)
+#define NERR_TmpFile (NERR_BASE + 216)
+#define NERR_TooMuchData (NERR_BASE + 217)
+#define NERR_DeviceShareConflict (NERR_BASE + 218)
+#define NERR_BrowserTableIncomplete (NERR_BASE + 219)
+#define NERR_NotLocalDomain (NERR_BASE + 220)
+#define NERR_IsDfsShare (NERR_BASE + 221)
+#define NERR_DevInvalidOpCode (NERR_BASE + 231)
+#define NERR_DevNotFound (NERR_BASE + 232)
+#define NERR_DevNotOpen (NERR_BASE + 233)
+#define NERR_BadQueueDevString (NERR_BASE + 234)
+#define NERR_BadQueuePriority (NERR_BASE + 235)
+#define NERR_NoCommDevs (NERR_BASE + 237)
+#define NERR_QueueNotFound (NERR_BASE + 238)
+#define NERR_BadDevString (NERR_BASE + 240)
+#define NERR_BadDev (NERR_BASE + 241)
+#define NERR_InUseBySpooler (NERR_BASE + 242)
+#define NERR_CommDevInUse (NERR_BASE + 243)
+#define NERR_InvalidComputer (NERR_BASE + 251)
+#define NERR_MaxLenExceeded (NERR_BASE + 254)
+#define NERR_BadComponent (NERR_BASE + 256)
+#define NERR_CantType (NERR_BASE + 257)
+#define NERR_TooManyEntries (NERR_BASE + 262)
+#define NERR_ProfileFileTooBig (NERR_BASE + 270)
+#define NERR_ProfileOffset (NERR_BASE + 271)
+#define NERR_ProfileCleanup (NERR_BASE + 272)
+#define NERR_ProfileUnknownCmd (NERR_BASE + 273)
+#define NERR_ProfileLoadErr (NERR_BASE + 274)
+#define NERR_ProfileSaveErr (NERR_BASE + 275)
+#define NERR_LogOverflow (NERR_BASE + 277)
+#define NERR_LogFileChanged (NERR_BASE + 278)
+#define NERR_LogFileCorrupt (NERR_BASE + 279)
+#define NERR_SourceIsDir (NERR_BASE + 280)
+#define NERR_BadSource (NERR_BASE + 281)
+#define NERR_BadDest (NERR_BASE + 282)
+#define NERR_DifferentServers (NERR_BASE + 283)
+#define NERR_RunSrvPaused (NERR_BASE + 285)
+#define NERR_ErrCommRunSrv (NERR_BASE + 289)
+#define NERR_ErrorExecingGhost (NERR_BASE + 291)
+#define NERR_ShareNotFound (NERR_BASE + 292)
+#define NERR_InvalidLana (NERR_BASE + 300)
+#define NERR_OpenFiles (NERR_BASE + 301)
+#define NERR_ActiveConns (NERR_BASE + 302)
+#define NERR_BadPasswordCore (NERR_BASE + 303)
+#define NERR_DevInUse (NERR_BASE + 304)
+#define NERR_LocalDrive (NERR_BASE + 305)
+#define NERR_AlertExists (NERR_BASE + 330)
+#define NERR_TooManyAlerts (NERR_BASE + 331)
+#define NERR_NoSuchAlert (NERR_BASE + 332)
+#define NERR_BadRecipient (NERR_BASE + 333)
+#define NERR_AcctLimitExceeded (NERR_BASE + 334)
+#define NERR_InvalidLogSeek (NERR_BASE + 340)
+#define NERR_BadUasConfig (NERR_BASE + 350)
+#define NERR_InvalidUASOp (NERR_BASE + 351)
+#define NERR_LastAdmin (NERR_BASE + 352)
+#define NERR_DCNotFound (NERR_BASE + 353)
+#define NERR_LogonTrackingError (NERR_BASE + 354)
+#define NERR_NetlogonNotStarted (NERR_BASE + 355)
+#define NERR_CanNotGrowUASFile (NERR_BASE + 356)
+#define NERR_TimeDiffAtDC (NERR_BASE + 357)
+#define NERR_PasswordMismatch (NERR_BASE + 358)
+#define NERR_NoSuchServer (NERR_BASE + 360)
+#define NERR_NoSuchSession (NERR_BASE + 361)
+#define NERR_NoSuchConnection (NERR_BASE + 362)
+#define NERR_TooManyServers (NERR_BASE + 363)
+#define NERR_TooManySessions (NERR_BASE + 364)
+#define NERR_TooManyConnections (NERR_BASE + 365)
+#define NERR_TooManyFiles (NERR_BASE + 366)
+#define NERR_NoAlternateServers (NERR_BASE + 367)
+#define NERR_TryDownLevel (NERR_BASE + 370)
+#define NERR_UPSDriverNotStarted (NERR_BASE + 380)
+#define NERR_UPSInvalidConfig (NERR_BASE + 381)
+#define NERR_UPSInvalidCommPort (NERR_BASE + 382)
+#define NERR_UPSSignalAsserted (NERR_BASE + 383)
+#define NERR_UPSShutdownFailed (NERR_BASE + 384)
+#define NERR_BadDosRetCode (NERR_BASE + 400)
+#define NERR_ProgNeedsExtraMem (NERR_BASE + 401)
+#define NERR_BadDosFunction (NERR_BASE + 402)
+#define NERR_RemoteBootFailed (NERR_BASE + 403)
+#define NERR_BadFileCheckSum (NERR_BASE + 404)
+#define NERR_NoRplBootSystem (NERR_BASE + 405)
+#define NERR_RplLoadrNetBiosErr (NERR_BASE + 406)
+#define NERR_RplLoadrDiskErr (NERR_BASE + 407)
+#define NERR_ImageParamErr (NERR_BASE + 408)
+#define NERR_TooManyImageParams (NERR_BASE + 409)
+#define NERR_NonDosFloppyUsed (NERR_BASE + 410)
+#define NERR_RplBootRestart (NERR_BASE + 411)
+#define NERR_RplSrvrCallFailed (NERR_BASE + 412)
+#define NERR_CantConnectRplSrvr (NERR_BASE + 413)
+#define NERR_CantOpenImageFile (NERR_BASE + 414)
+#define NERR_CallingRplSrvr (NERR_BASE + 415)
+#define NERR_StartingRplBoot (NERR_BASE + 416)
+#define NERR_RplBootServiceTerm (NERR_BASE + 417)
+#define NERR_RplBootStartFailed (NERR_BASE + 418)
+#define NERR_RPL_CONNECTED (NERR_BASE + 419)
+#define NERR_BrowserConfiguredToNotRun (NERR_BASE + 450)
+#define NERR_RplNoAdaptersStarted (NERR_BASE + 510)
+#define NERR_RplBadRegistry (NERR_BASE + 511)
+#define NERR_RplBadDatabase (NERR_BASE + 512)
+#define NERR_RplRplfilesShare (NERR_BASE + 513)
+#define NERR_RplNotRplServer (NERR_BASE + 514)
+#define NERR_RplCannotEnum (NERR_BASE + 515)
+#define NERR_RplWkstaInfoCorrupted (NERR_BASE + 516)
+#define NERR_RplWkstaNotFound (NERR_BASE + 517)
+#define NERR_RplWkstaNameUnavailable (NERR_BASE + 518)
+#define NERR_RplProfileInfoCorrupted (NERR_BASE + 519)
+#define NERR_RplProfileNotFound (NERR_BASE + 520)
+#define NERR_RplProfileNameUnavailable (NERR_BASE + 521)
+#define NERR_RplProfileNotEmpty (NERR_BASE + 522)
+#define NERR_RplConfigInfoCorrupted (NERR_BASE + 523)
+#define NERR_RplConfigNotFound (NERR_BASE + 524)
+#define NERR_RplAdapterInfoCorrupted (NERR_BASE + 525)
+#define NERR_RplInternal (NERR_BASE + 526)
+#define NERR_RplVendorInfoCorrupted (NERR_BASE + 527)
+#define NERR_RplBootInfoCorrupted (NERR_BASE + 528)
+#define NERR_RplWkstaNeedsUserAcct (NERR_BASE + 529)
+#define NERR_RplNeedsRPLUSERAcct (NERR_BASE + 530)
+#define NERR_RplBootNotFound (NERR_BASE + 531)
+#define NERR_RplIncompatibleProfile (NERR_BASE + 532)
+#define NERR_RplAdapterNameUnavailable (NERR_BASE + 533)
+#define NERR_RplConfigNotEmpty (NERR_BASE + 534)
+#define NERR_RplBootInUse (NERR_BASE + 535)
+#define NERR_RplBackupDatabase (NERR_BASE + 536)
+#define NERR_RplAdapterNotFound (NERR_BASE + 537)
+#define NERR_RplVendorNotFound (NERR_BASE + 538)
+#define NERR_RplVendorNameUnavailable (NERR_BASE + 539)
+#define NERR_RplBootNameUnavailable (NERR_BASE + 540)
+#define NERR_RplConfigNameUnavailable (NERR_BASE + 541)
+#define NERR_DfsInternalCorruption (NERR_BASE + 560)
+#define NERR_DfsVolumeDataCorrupt (NERR_BASE + 561)
+#define NERR_DfsNoSuchVolume (NERR_BASE + 562)
+#define NERR_DfsVolumeAlreadyExists (NERR_BASE + 563)
+#define NERR_DfsAlreadyShared (NERR_BASE + 564)
+#define NERR_DfsNoSuchShare (NERR_BASE + 565)
+#define NERR_DfsNotALeafVolume (NERR_BASE + 566)
+#define NERR_DfsLeafVolume (NERR_BASE + 567)
+#define NERR_DfsVolumeHasMultipleServers (NERR_BASE + 568)
+#define NERR_DfsCantCreateJunctionPoint (NERR_BASE + 569)
+#define NERR_DfsServerNotDfsAware (NERR_BASE + 570)
+#define NERR_DfsBadRenamePath (NERR_BASE + 571)
+#define NERR_DfsVolumeIsOffline (NERR_BASE + 572)
+#define NERR_DfsInternalError (NERR_BASE + 590)
+
+#define MAX_NERR (NERR_BASE + 899)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h
new file mode 100644
index 00000000..0be32104
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmjoin.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2005 Ulrich Czekalla (For CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMJOIN_H
+#define __WINE_LMJOIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum tagNETSETUP_JOIN_STATUS
+{
+ NetSetupUnknownStatus = 0,
+ NetSetupUnjoined,
+ NetSetupWorkgroupName,
+ NetSetupDomainName
+} NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS;
+
+NET_API_STATUS NET_API_FUNCTION NetGetJoinInformation(
+ LPCWSTR Server,
+ LPWSTR *Name,
+ PNETSETUP_JOIN_STATUS type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h
new file mode 100644
index 00000000..c05a27c2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmmsg.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2006 Robert Reif
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMMSG_
+#define _LMMSG_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MSGNAME_NOT_FORWARDED 0x00
+#define MSGNAME_FORWARDED_TO 0x04
+#define MSGNAME_FORWARDED_FROM 0x10
+
+typedef struct _MSG_INFO_0
+{
+ LPWSTR msgi0_name;
+} MSG_INFO_0, *PMSG_INFO_0, *LPMSG_INFO_0;
+
+typedef struct _MSG_INFO_1
+{
+ LPWSTR msgi1_name;
+ DWORD msgi1_forward_flag;
+ LPWSTR msgi1_forward;
+} MSG_INFO_1, *PMSG_INFO_1, *LPMSG_INFO_1;
+
+NET_API_STATUS NET_API_FUNCTION NetMessageBufferSend(LPCWSTR,LPCWSTR,LPCWSTR,LPBYTE,DWORD);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameAdd(LPCWSTR,LPCWSTR);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameDel(LPCWSTR,LPCWSTR);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameEnum(LPCWSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS NET_API_FUNCTION NetMessageNameGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h
new file mode 100644
index 00000000..4c762dd3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmserver.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMSERVER_
+#define _LMSERVER_
+
+#include <winsvc.h>
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _SERVER_INFO_100 {
+ DWORD sv100_platform_id;
+ LMSTR sv100_name;
+} SERVER_INFO_100, *PSERVER_INFO_100, *LPSERVER_INFO_100;
+
+typedef struct _SERVER_INFO_101 {
+ DWORD sv101_platform_id;
+ LMSTR sv101_name;
+ DWORD sv101_version_major;
+ DWORD sv101_version_minor;
+ DWORD sv101_type;
+ LMSTR sv101_comment;
+} SERVER_INFO_101, *PSERVER_INFO_101, *LPSERVER_INFO_101;
+
+NET_API_STATUS WINAPI NetServerEnum(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LPDWORD);
+NET_API_STATUS WINAPI NetServerEnumEx(LMCSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,DWORD,LMCSTR,LMCSTR);
+NET_API_STATUS WINAPI NetServerGetInfo(LMSTR,DWORD,LPBYTE*);
+BOOL WINAPI SetServiceBits(SERVICE_STATUS_HANDLE,DWORD,BOOL,BOOL);
+
+#define SV_TYPE_WORKSTATION 0x00000001
+#define SV_TYPE_SERVER 0x00000002
+#define SV_TYPE_SQLSERVER 0x00000004
+#define SV_TYPE_DOMAIN_CTRL 0x00000008
+#define SV_TYPE_DOMAIN_BAKCTRL 0x00000010
+#define SV_TYPE_TIME_SOURCE 0x00000020
+#define SV_TYPE_AFP 0x00000040
+#define SV_TYPE_NOVELL 0x00000080
+#define SV_TYPE_DOMAIN_MEMBER 0x00000100
+#define SV_TYPE_PRINTQ_SERVER 0x00000200
+#define SV_TYPE_DIALIN_SERVER 0x00000400
+#define SV_TYPE_XENIX_SERVER 0x00000800
+#define SV_TYPE_SERVER_UNIX SV_TYPE_XENIX_SERVER
+#define SV_TYPE_NT 0x00001000
+#define SV_TYPE_WFW 0x00002000
+#define SV_TYPE_SERVER_MFPN 0x00004000
+#define SV_TYPE_SERVER_NT 0x00008000
+#define SV_TYPE_POTENTIAL_BROWSER 0x00010000
+#define SV_TYPE_BACKUP_BROWSER 0x00020000
+#define SV_TYPE_MASTER_BROWSER 0x00040000
+#define SV_TYPE_DOMAIN_MASTER 0x00080000
+#define SV_TYPE_SERVER_OSF 0x00100000
+#define SV_TYPE_SERVER_VMS 0x00200000
+#define SV_TYPE_WINDOWS 0x00400000
+#define SV_TYPE_DFS 0x00800000
+#define SV_TYPE_ALTERNATE_XPORT 0x20000000
+#define SV_TYPE_LOCAL_LIST_ONLY 0x40000000
+#define SV_TYPE_DOMAIN_ENUM 0x80000000
+#define SV_TYPE_ALL 0xFFFFFFFF
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _LMSERVER_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h
new file mode 100644
index 00000000..df7180b1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmshare.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMSHARE_H
+#define _LMSHARE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <lmcons.h>
+
+typedef struct _SHARE_INFO_0 {
+ LMSTR shi0_netname;
+} SHARE_INFO_0, *PSHARE_INFO_0, *LPSHARE_INFO_0;
+
+typedef struct _SHARE_INFO_1 {
+ LMSTR shi1_netname;
+ DWORD shi1_type;
+ LMSTR shi1_remark;
+} SHARE_INFO_1, *PSHARE_INFO_1, *LPSHARE_INFO_1;
+
+NET_API_STATUS WINAPI NetShareAdd(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetShareCheck(LMSTR,LMSTR,LPDWORD);
+NET_API_STATUS WINAPI NetShareDel(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetShareDelEx(LMSTR,DWORD,LPBYTE);
+NET_API_STATUS WINAPI NetShareDelSticky(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetShareEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetShareEnumSticky(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetShareGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetShareSetInfo(LMSTR,LMSTR,DWORD,LPBYTE,LPDWORD);
+
+#define STYPE_DISKTREE 0
+#define STYPE_PRINTQ 1
+#define STYPE_DEVICE 2
+#define STYPE_IPC 3
+#define STYPE_SPECIAL 0x80000000
+
+NET_API_STATUS WINAPI NetSessionDel(LMSTR,LMSTR,LMSTR);
+NET_API_STATUS WINAPI NetSessionEnum(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetSessionGetInfo(LMSTR,LMSTR,LMSTR,DWORD,LPBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef _LMSHARE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h
new file mode 100644
index 00000000..a179cc6d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmstats.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2003 Geoff Thorpe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMSTATS_H
+#define __WINE_LMSTATS_H
+
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _STAT_WORKSTATION_0 {
+ LARGE_INTEGER StatisticsStartTime;
+ LARGE_INTEGER BytesReceived;
+ LARGE_INTEGER SmbsReceived;
+ LARGE_INTEGER PagingReadBytesRequested;
+ LARGE_INTEGER NonPagingReadBytesRequested;
+ LARGE_INTEGER CacheReadBytesRequested;
+ LARGE_INTEGER NetworkReadBytesRequested;
+ LARGE_INTEGER BytesTransmitted;
+ LARGE_INTEGER SmbsTransmitted;
+ LARGE_INTEGER PagingWriteBytesRequested;
+ LARGE_INTEGER NonPagingWriteBytesRequested;
+ LARGE_INTEGER CacheWriteBytesRequested;
+ LARGE_INTEGER NetworkWriteBytesRequested;
+ DWORD InitiallyFailedOperations;
+ DWORD FailedCompletionOperations;
+ DWORD ReadOperations;
+ DWORD RandomReadOperations;
+ DWORD ReadSmbs;
+ DWORD LargeReadSmbs;
+ DWORD SmallReadSmbs;
+ DWORD WriteOperations;
+ DWORD RandomWriteOperations;
+ DWORD WriteSmbs;
+ DWORD LargeWriteSmbs;
+ DWORD SmallWriteSmbs;
+ DWORD RawReadsDenied;
+ DWORD RawWritesDenied;
+ DWORD NetworkErrors;
+ DWORD Sessions;
+ DWORD FailedSessions;
+ DWORD Reconnects;
+ DWORD CoreConnects;
+ DWORD Lanman20Connects;
+ DWORD Lanman21Connects;
+ DWORD LanmanNtConnects;
+ DWORD ServerDisconnects;
+ DWORD HungSessions;
+ DWORD UseCount;
+ DWORD FailedUseCount;
+ DWORD CurrentCommands;
+} STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0;
+
+typedef struct _STAT_SERVER_0 {
+ DWORD sts0_start;
+ DWORD sts0_fopens;
+ DWORD sts0_devopens;
+ DWORD sts0_jobsqueued;
+ DWORD sts0_sopens;
+ DWORD sts0_stimedout;
+ DWORD sts0_serrorout;
+ DWORD sts0_pwerrors;
+ DWORD sts0_permerrors;
+ DWORD sts0_syserrors;
+ DWORD sts0_bytessent_low;
+ DWORD sts0_bytessent_high;
+ DWORD sts0_bytesrcvd_low;
+ DWORD sts0_bytesrcvd_high;
+ DWORD sts0_avresponse;
+ DWORD sts0_reqbufneed;
+ DWORD sts0_bigbufneed;
+} STAT_SERVER_0, *PSTAT_SERVER_0, *LPSTAT_SERVER_0;
+
+NET_API_STATUS WINAPI NetStatisticsGet(LPWSTR server, LPWSTR service, DWORD level,
+ DWORD options, LPBYTE *bufptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h
new file mode 100644
index 00000000..73687477
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuse.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2007 Tim Schwartz
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _LMUSE_H
+#define _LMUSE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "lmcons.h"
+#include "lmuseflg.h"
+
+
+#define USE_LOCAL_PARMNUM 1
+#define USE_REMOTE_PARMNUM 2
+#define USE_PASSWORD_PARMNUM 3
+#define USE_ASGTYPE_PARMNUM 4
+#define USE_USERNAME_PARMNUM 5
+#define USE_DOMAINNAME_PARMNUM 6
+
+#define USE_OK 0
+#define USE_PAUSED 1
+#define USE_SESSLOST 2
+#define USE_DISCONN USE_SESSLOST
+#define USE_NETERR 3
+#define USE_CONN 4
+#define USE_RECONN 5
+
+#define USE_WILDCARD ((DWORD)-1)
+#define USE_DISKDEV 0
+#define USE_SPOOLDEV 1
+#define USE_CHARDEV 2
+#define USE_IPC 3
+
+typedef struct _USE_INFO_1
+{
+ LMSTR ui1_local;
+ LMSTR ui1_remote;
+ LMSTR ui1_password;
+ DWORD ui1_status;
+ DWORD ui1_asg_type;
+ DWORD ui1_refcount;
+ DWORD ui1_usecount;
+} USE_INFO_1, *PUSE_INFO_1, *LPUSE_INFO_1;
+
+typedef struct _USE_INFO_2
+{
+ LMSTR ui2_local;
+ LMSTR ui2_remote;
+ LMSTR ui2_password;
+ DWORD ui2_status;
+ DWORD ui2_asg_type;
+ DWORD ui2_refcount;
+ DWORD ui2_usecount;
+ LMSTR ui2_username;
+ LMSTR ui2_domainname;
+} USE_INFO_2, *PUSE_INFO_2, *LPUSE_INFO_2;
+
+NET_API_STATUS WINAPI NetUseAdd(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetUseDel(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetUseEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetUseGetInfo(LMSTR,LMSTR,DWORD,LPBYTE*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LMUSE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h
new file mode 100644
index 00000000..cbf91341
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmuseflg.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMUSEFLG_H
+#define __WINE_LMUSEFLG_H
+
+#define USE_NOFORCE 0
+#define USE_FORCE 1
+#define USE_LOTS_OF_FORCE 2
+
+#endif /* __WINE_LMUSEFLG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h
new file mode 100644
index 00000000..0cc02fca
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lmwksta.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2002 Andriy Palamarchuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LMWKSTA_H
+#define __WINE_LMWKSTA_H
+
+#include <lmcons.h>
+#include <lmuseflg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _WKSTA_TRANSPORT_INFO_0 {
+ DWORD wkti0_quality_of_service;
+ DWORD wkti0_number_of_vcs;
+ LMSTR wkti0_transport_name;
+ LMSTR wkti0_transport_address;
+ BOOL wkti0_wan_ish;
+} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
+
+typedef struct _WKSTA_USER_INFO_0 {
+ LMSTR wkui0_username;
+} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
+
+typedef struct _WKSTA_USER_INFO_1 {
+ LMSTR wkui1_username;
+ LMSTR wkui1_logon_domain;
+ LMSTR wkui1_oth_domains;
+ LMSTR wkui1_logon_server;
+} WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;
+
+typedef struct _WKSTA_USER_INFO_1101 {
+ LMSTR wkui1101_oth_domains;
+} WKSTA_USER_INFO_1101, *PWKSTA_USER_INFO_1101, *LPWKSTA_USER_INFO_1101;
+
+typedef struct _WKSTA_INFO_100 {
+ DWORD wki100_platform_id;
+ LMSTR wki100_computername;
+ LMSTR wki100_langroup;
+ DWORD wki100_ver_major;
+ DWORD wki100_ver_minor;
+} WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100;
+
+typedef struct _WKSTA_INFO_101 {
+ DWORD wki101_platform_id;
+ LMSTR wki101_computername;
+ LMSTR wki101_langroup;
+ DWORD wki101_ver_major;
+ DWORD wki101_ver_minor;
+ LMSTR wki101_lanroot;
+} WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101;
+
+typedef struct _WKSTA_INFO_102 {
+ DWORD wki102_platform_id;
+ LMSTR wki102_computername;
+ LMSTR wki102_langroup;
+ DWORD wki102_ver_major;
+ DWORD wki102_ver_minor;
+ LMSTR wki102_lanroot;
+ DWORD wki102_logged_on_users;
+} WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102;
+
+/* workstation */
+NET_API_STATUS WINAPI NetWkstaGetInfo(LMSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetWkstaSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaTransportAdd(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaTransportDel(LMSTR,LMSTR,DWORD);
+NET_API_STATUS WINAPI NetWkstaTransportEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR,DWORD,LPBYTE*);
+NET_API_STATUS WINAPI NetWkstaUserSetInfo(LMSTR,DWORD,LPBYTE,LPDWORD);
+NET_API_STATUS WINAPI NetWkstaUserEnum(LMSTR,DWORD,LPBYTE*,DWORD,LPDWORD,LPDWORD,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h
new file mode 100644
index 00000000..773ec32d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/loadperf.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 Andrey Turkin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LOADPERF_H
+#define __WINE_LOADPERF_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI InstallPerfDllA(LPCSTR, LPCSTR, ULONG_PTR);
+DWORD WINAPI InstallPerfDllW(LPCWSTR, LPCWSTR, ULONG_PTR);
+#define InstallPerfDll WINELIB_NAME_AW(InstallPerfDll);
+
+DWORD WINAPI LoadPerfCounterTextStringsA(LPCSTR, BOOL);
+DWORD WINAPI LoadPerfCounterTextStringsW(LPCWSTR, BOOL);
+#define LoadPerfCounterTextStrings WINELIB_NAME_AW(LoadPerfCounterTextStrings)
+
+DWORD WINAPI UnloadPerfCounterTextStringsA(LPCSTR, BOOL);
+DWORD WINAPI UnloadPerfCounterTextStringsW(LPCWSTR, BOOL);
+#define UnloadPerfCounterTextStrings WINELIB_NAME_AW(UnloadPerfCounterTextStrings)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_LOADPERF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h
new file mode 100644
index 00000000..65d970c4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/lzexpand.h
@@ -0,0 +1,64 @@
+/* Includefile for the decompression library, lzexpand
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LZEXPAND_H
+#define __WINE_LZEXPAND_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define LZERROR_BADINHANDLE -1 /* -1 */
+#define LZERROR_BADOUTHANDLE -2 /* -2 */
+#define LZERROR_READ -3 /* -3 */
+#define LZERROR_WRITE -4 /* -4 */
+#define LZERROR_GLOBALLOC -5 /* -5 */
+#define LZERROR_GLOBLOCK -6 /* -6 */
+#define LZERROR_BADVALUE -7 /* -7 */
+#define LZERROR_UNKNOWNALG -8 /* -8 */
+
+VOID WINAPI LZDone(void);
+LONG WINAPI CopyLZFile(HFILE,HFILE);
+HFILE WINAPI LZOpenFileA(LPSTR,LPOFSTRUCT,WORD);
+HFILE WINAPI LZOpenFileW(LPWSTR,LPOFSTRUCT,WORD);
+#define LZOpenFile WINELIB_NAME_AW(LZOpenFile)
+INT WINAPI LZRead(INT,LPSTR,INT);
+INT WINAPI LZStart(void);
+void WINAPI LZClose(HFILE);
+LONG WINAPI LZCopy(HFILE,HFILE);
+HFILE WINAPI LZInit(HFILE);
+LONG WINAPI LZSeek(HFILE,LONG,INT);
+INT WINAPI GetExpandedNameA(LPSTR,LPSTR);
+INT WINAPI GetExpandedNameW(LPWSTR,LPWSTR);
+#define GetExpandedName WINELIB_NAME_AW(GetExpandedName)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_LZEXPAND_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h
new file mode 100644
index 00000000..7d68215c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapi.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPI_H
+#define MAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Some types */
+
+#ifndef __LHANDLE
+#define __LHANDLE
+typedef ULONG_PTR LHANDLE, *LPLHANDLE;
+#endif
+#define lhSessionNull ((LHANDLE)0)
+
+#ifndef WINE_FLAGS_DEFINED
+#define WINE_FLAGS_DEFINED
+typedef ULONG FLAGS;
+#endif
+typedef ULONG *LPULONG;
+
+typedef struct
+{
+ ULONG ulReserved;
+ ULONG flFlags;
+ ULONG nPosition;
+ LPSTR lpszPathName;
+ LPSTR lpszFileName;
+ LPVOID lpFileType;
+} MapiFileDesc, *lpMapiFileDesc;
+
+typedef struct
+{
+ ULONG ulReserved;
+ ULONG flFlags;
+ ULONG nPosition;
+ PWSTR lpszPathName;
+ PWSTR lpszFileName;
+ PVOID lpFileType;
+} MapiFileDescW, *lpMapiFileDescW;
+
+#ifndef MAPI_ORIG
+#define MAPI_ORIG 0
+#define MAPI_TO 1
+#define MAPI_CC 2
+#define MAPI_BCC 3
+#endif
+
+typedef struct
+{
+ ULONG ulReserved;
+ ULONG ulRecipClass;
+ LPSTR lpszName;
+ LPSTR lpszAddress;
+ ULONG ulEIDSize;
+ LPVOID lpEntryID;
+} MapiRecipDesc, *lpMapiRecipDesc;
+
+typedef struct
+{
+ ULONG ulReserved;
+ ULONG ulRecipClass;
+ PWSTR lpszName;
+ PWSTR lpszAddress;
+ ULONG ulEIDSize;
+ PVOID lpEntryID;
+} MapiRecipDescW, *lpMapiRecipDescW;
+
+typedef struct
+{
+ ULONG ulReserved;
+ LPSTR lpszSubject;
+ LPSTR lpszNoteText;
+ LPSTR lpszMessageType;
+ LPSTR lpszDateReceived;
+ LPSTR lpszConversationID;
+ FLAGS flFlags;
+ lpMapiRecipDesc lpOriginator;
+ ULONG nRecipCount;
+ lpMapiRecipDesc lpRecips;
+ ULONG nFileCount;
+ lpMapiFileDesc lpFiles;
+} MapiMessage, *lpMapiMessage;
+
+typedef struct
+{
+ ULONG ulReserved;
+ PWSTR lpszSubject;
+ PWSTR lpszNoteText;
+ PWSTR lpszMessageType;
+ PWSTR lpszDateReceived;
+ PWSTR lpszConversationID;
+ FLAGS flFlags;
+ lpMapiRecipDescW lpOriginator;
+ ULONG nRecipCount;
+ lpMapiRecipDescW lpRecips;
+ ULONG nFileCount;
+ lpMapiFileDescW lpFiles;
+} MapiMessageW, *lpMapiMessageW;
+
+/* Error codes */
+
+#ifndef SUCCESS_SUCCESS
+#define SUCCESS_SUCCESS 0
+#endif
+
+#define MAPI_USER_ABORT 1
+#define MAPI_E_USER_ABORT MAPI_USER_ABORT
+#define MAPI_E_FAILURE 2
+#define MAPI_E_LOGON_FAILURE 3
+#define MAPI_E_LOGIN_FAILURE MAPI_E_LOGON_FAILURE
+#define MAPI_E_DISK_FULL 4
+#define MAPI_E_INSUFFICIENT_MEMORY 5
+#define MAPI_E_ACCESS_DENIED 6
+#define MAPI_E_TOO_MANY_SESSIONS 8
+#define MAPI_E_TOO_MANY_FILES 9
+#define MAPI_E_TOO_MANY_RECIPIENTS 10
+#define MAPI_E_ATTACHMENT_NOT_FOUND 11
+#define MAPI_E_ATTACHMENT_OPEN_FAILURE 12
+#define MAPI_E_ATTACHMENT_WRITE_FAILURE 13
+#define MAPI_E_UNKNOWN_RECIPIENT 14
+#define MAPI_E_BAD_RECIPTYPE 15
+#define MAPI_E_NO_MESSAGES 16
+#define MAPI_E_INVALID_MESSAGE 17
+#define MAPI_E_TEXT_TOO_LARGE 18
+#define MAPI_E_INVALID_SESSION 19
+#define MAPI_E_TYPE_NOT_SUPPORTED 20
+#define MAPI_E_AMBIGUOUS_RECIPIENT 21
+#define MAPI_E_AMBIG_RECIP MAPI_E_AMBIGUOUS_RECIPIENT
+#define MAPI_E_MESSAGE_IN_USE 22
+#define MAPI_E_NETWORK_FAILURE 23
+#define MAPI_E_INVALID_EDITFIELDS 24
+#define MAPI_E_INVALID_RECIPS 25
+#define MAPI_E_NOT_SUPPORTED 26
+#define MAPI_E_UNICODE_NOT_SUPPORTED 27
+
+
+/* MAPILogon */
+
+#ifndef MAPI_LOGON_UI
+#define MAPI_LOGON_UI 0x00000001
+#endif
+#ifndef MAPI_NEW_SESSION
+#define MAPI_NEW_SESSION 0x00000002
+#endif
+#ifndef MAPI_EXTENDED
+#define MAPI_EXTENDED 0x00000020
+#endif
+#ifndef MAPI_FORCE_DOWNLOAD
+#define MAPI_FORCE_DOWNLOAD 0x00001000
+#endif
+#ifndef MAPI_PASSWORD_UI
+#define MAPI_PASSWORD_UI 0x00020000
+#endif
+
+
+/* MAPISendMail */
+
+#define MAPI_DIALOG 0x00000008
+
+/* MAPISendMailW */
+
+#define MAPI_FORCE_UNICODE 0x00040000
+
+
+/* API typedefs and prototypes */
+
+typedef ULONG (WINAPI MAPIADDRESS)(LHANDLE,ULONG_PTR,LPSTR,ULONG,LPSTR,ULONG,lpMapiRecipDesc,FLAGS,ULONG,LPULONG,lpMapiRecipDesc*);
+typedef MAPIADDRESS *LPMAPIADDRESS;
+MAPIADDRESS MAPIAddress;
+
+typedef ULONG (WINAPI MAPIDELETEMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG);
+typedef MAPIDELETEMAIL *LPMAPIDELETEMAIL;
+MAPIDELETEMAIL MAPIDeleteMail;
+
+typedef ULONG (WINAPI MAPIDETAILS)(LHANDLE,ULONG_PTR,lpMapiRecipDesc,FLAGS,ULONG);
+typedef MAPIDETAILS *LPMAPIDETAILS;
+MAPIDETAILS MAPIDetails;
+
+typedef ULONG (WINAPI MAPIFINDNEXT)(LHANDLE,ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPSTR);
+typedef MAPIFINDNEXT *LPMAPIFINDNEXT;
+MAPIFINDNEXT MAPIFindNext;
+
+#ifndef MAPIFREEBUFFER_DEFINED
+#define MAPIFREEBUFFER_DEFINED
+typedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID);
+typedef MAPIFREEBUFFER *LPMAPIFREEBUFFER;
+MAPIFREEBUFFER MAPIFreeBuffer;
+#endif
+
+typedef ULONG (WINAPI MAPILOGOFF)(LHANDLE,ULONG_PTR,FLAGS,ULONG);
+typedef MAPILOGOFF *LPMAPILOGOFF;
+MAPILOGOFF MAPILogoff;
+
+typedef ULONG (WINAPI MAPILOGON)(ULONG_PTR,LPSTR,LPSTR,FLAGS,ULONG,LPLHANDLE);
+typedef MAPILOGON *LPMAPILOGON;
+MAPILOGON MAPILogon;
+
+typedef ULONG (WINAPI MAPIREADMAIL)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiMessage);
+typedef MAPIREADMAIL *LPMAPIREADMAIL;
+MAPIREADMAIL MAPIReadMail;
+
+typedef ULONG (WINAPI MAPIRESOLVENAME)(LHANDLE,ULONG_PTR,LPSTR,FLAGS,ULONG,lpMapiRecipDesc*);
+typedef MAPIRESOLVENAME *LPMAPIRESOLVENAME;
+MAPIRESOLVENAME MAPIResolveName;
+
+typedef ULONG (WINAPI MAPISAVEMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG,LPSTR);
+typedef MAPISAVEMAIL *LPMAPISAVEMAIL;
+MAPISAVEMAIL MAPISaveMail;
+
+typedef ULONG (WINAPI MAPISENDDOCUMENTS)(ULONG_PTR,LPSTR,LPSTR,LPSTR,ULONG);
+typedef MAPISENDDOCUMENTS *LPMAPISENDDOCUMENTS;
+MAPISENDDOCUMENTS MAPISendDocuments;
+
+typedef ULONG (WINAPI MAPISENDMAIL)(LHANDLE,ULONG_PTR,lpMapiMessage,FLAGS,ULONG);
+typedef MAPISENDMAIL *LPMAPISENDMAIL;
+MAPISENDMAIL MAPISendMail;
+
+typedef ULONG (WINAPI MAPISENDMAILW)(LHANDLE,ULONG_PTR,lpMapiMessageW,FLAGS,ULONG);
+typedef MAPISENDMAILW *LPMAPISENDMAILW;
+MAPISENDMAILW MAPISendMailW;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h
new file mode 100644
index 00000000..f09ec4b1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapicode.h
@@ -0,0 +1,123 @@
+/*
+ * Status codes returned by MAPI
+ *
+ * Copyright (C) 2002 Aric Stewart
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPICODE_H
+#define MAPICODE_H
+
+#include <winerror.h>
+
+#define MAKE_MAPI_SCODE(sev,fac,code) \
+ ((SCODE)(((ULONG)(sev)<<31)|((ULONG)(fac)<<16)|((ULONG)(code))))
+
+#define MAKE_MAPI_E(e) (MAKE_MAPI_SCODE(1,FACILITY_ITF,(e)))
+#define MAKE_MAPI_S(e) (MAKE_MAPI_SCODE(0,FACILITY_ITF,(e)))
+
+#ifndef SUCCESS_SUCCESS
+#define SUCCESS_SUCCESS __MSABI_LONG(0)
+#endif
+
+/* Errors */
+#define MAPI_E_ACCOUNT_DISABLED ((SCODE)0x80040124)
+#define MAPI_E_AMBIGUOUS_RECIP ((SCODE)0x80040700)
+#define MAPI_E_BAD_CHARWIDTH ((SCODE)0x80040103)
+#define MAPI_E_BAD_COLUMN ((SCODE)0x80040118)
+#define MAPI_E_BAD_VALUE ((SCODE)0x80040301)
+#define MAPI_E_BUSY ((SCODE)0x8004010B)
+#define MAPI_E_CALL_FAILED E_FAIL
+#define MAPI_E_CANCEL ((SCODE)0x80040501)
+#define MAPI_E_COLLISION ((SCODE)0x80040604)
+#define MAPI_E_COMPUTED ((SCODE)0x8004011A)
+#define MAPI_E_CORRUPT_DATA ((SCODE)0x8004011B)
+#define MAPI_E_CORRUPT_STORE ((SCODE)0x80040600)
+#define MAPI_E_DECLINE_COPY ((SCODE)0x80040306)
+#define MAPI_E_DISK_ERROR ((SCODE)0x80040116)
+#define MAPI_E_END_OF_SESSION ((SCODE)0x80040200)
+#define MAPI_E_EXTENDED_ERROR ((SCODE)0x80040119)
+#define MAPI_E_FAILONEPROVIDER ((SCODE)0x8004011D)
+#define MAPI_E_FOLDER_CYCLE ((SCODE)0x8004060B)
+#define MAPI_E_HAS_FOLDERS ((SCODE)0x80040609)
+#define MAPI_E_HAS_MESSAGES ((SCODE)0x8004060A)
+#define MAPI_E_INTERFACE_NOT_SUPPORTED E_NOINTERFACE
+#define MAPI_E_INVALID_ACCESS_TIME ((SCODE)0x80040123)
+#define MAPI_E_INVALID_BOOKMARK ((SCODE)0x80040405)
+#define MAPI_E_INVALID_ENTRYID ((SCODE)0x80040107)
+#define MAPI_E_INVALID_OBJECT ((SCODE)0x80040108)
+#define MAPI_E_INVALID_PARAMETER E_INVALIDARG
+#define MAPI_E_INVALID_TYPE ((SCODE)0x80040302)
+#define MAPI_E_INVALID_WORKSTATION_ACCOUNT ((SCODE)0x80040122)
+#define MAPI_E_LOGON_FAILED ((SCODE)0x80040111)
+#define MAPI_E_MISSING_REQUIRED_COLUMN ((SCODE)0x80040202)
+#define MAPI_E_NETWORK_ERROR ((SCODE)0x80040115)
+#define MAPI_E_NO_ACCESS E_ACCESSDENIED
+#define MAPI_E_NON_STANDARD ((SCODE)0x80040606)
+#define MAPI_E_NO_RECIPIENTS ((SCODE)0x80040607)
+#define MAPI_E_NO_SUPPORT ((SCODE)0x80040102)
+#define MAPI_E_NO_SUPPRESS ((SCODE)0x80040602)
+#define MAPI_E_NOT_ENOUGH_DISK ((SCODE)0x8004010D)
+#define MAPI_E_NOT_ENOUGH_MEMORY E_OUTOFMEMORY
+#define MAPI_E_NOT_ENOUGH_RESOURCES ((SCODE)0x8004010E)
+#define MAPI_E_NOT_FOUND ((SCODE)0x8004010F)
+#define MAPI_E_NOT_INITIALIZED ((SCODE)0x80040605)
+#define MAPI_E_NOT_IN_QUEUE ((SCODE)0x80040601)
+#define MAPI_E_NOT_ME ((SCODE)0x80040502)
+#define MAPI_E_OBJECT_CHANGED ((SCODE)0x80040109)
+#define MAPI_E_OBJECT_DELETED ((SCODE)0x8004010A)
+#define MAPI_E_PASSWORD_CHANGE_REQUIRED ((SCODE)0x80040120)
+#define MAPI_E_PASSWORD_EXPIRED ((SCODE)0x80040121)
+#define MAPI_E_SESSION_LIMIT ((SCODE)0x80040112)
+#define MAPI_E_STRING_TOO_LONG ((SCODE)0x80040105)
+#define MAPI_E_SUBMITTED ((SCODE)0x80040608)
+#define MAPI_E_TABLE_EMPTY ((SCODE)0x80040402)
+#define MAPI_E_TABLE_TOO_BIG ((SCODE)0x80040403)
+#define MAPI_E_TIMEOUT ((SCODE)0x80040401)
+#define MAPI_E_TOO_BIG ((SCODE)0x80040305)
+#define MAPI_E_TOO_COMPLEX ((SCODE)0x80040117)
+#define MAPI_E_TYPE_NO_SUPPORT ((SCODE)0x80040303)
+#define MAPI_E_UNABLE_TO_ABORT ((SCODE)0x80040114)
+#define MAPI_E_UNABLE_TO_COMPLETE ((SCODE)0x80040400)
+#define MAPI_E_UNCONFIGURED ((SCODE)0x8004011C)
+#define MAPI_E_UNEXPECTED_ID ((SCODE)0x80040307)
+#define MAPI_E_UNEXPECTED_TYPE ((SCODE)0x80040304)
+#define MAPI_E_UNKNOWN_CPID ((SCODE)0x8004011E)
+#define MAPI_E_UNKNOWN_ENTRYID ((SCODE)0x80040201)
+#define MAPI_E_UNKNOWN_FLAGS ((SCODE)0x80040106)
+#define MAPI_E_UNKNOWN_LCID ((SCODE)0x8004011F)
+#define MAPI_E_USER_CANCEL ((SCODE)0x80040113)
+#define MAPI_E_VERSION ((SCODE)0x80040110)
+#define MAPI_E_WAIT ((SCODE)0x80040500)
+
+/* Warnings */
+#define MAPI_W_APPROX_COUNT ((SCODE)0x00040482)
+#define MAPI_W_CANCEL_MESSAGE ((SCODE)0x00040580)
+#define MAPI_W_ERRORS_RETURNED ((SCODE)0x00040380)
+#define MAPI_W_NO_SERVICE ((SCODE)0x00040203)
+#define MAPI_W_PARTIAL_COMPLETION ((SCODE)0x00040680)
+#define MAPI_W_POSITION_CHANGED ((SCODE)0x00040481)
+
+#endif /* MAPICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h
new file mode 100644
index 00000000..fe2c5c37
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapidefs.h
@@ -0,0 +1,1332 @@
+/*
+ * Copyright (C) 1998 Justin Bradford
+ * Copyright (c) 2009 Owen Rudge for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIDEFS_H
+#define MAPIDEFS_H
+
+#include <windows.h>
+#include <winerror.h>
+#include <objbase.h>
+#include <stddef.h>
+
+/* Some types from other headers */
+#ifndef __LHANDLE
+#define __LHANDLE
+typedef ULONG_PTR LHANDLE, *LPLHANDLE;
+#endif
+
+#ifndef _tagCY_DEFINED
+#define _tagCY_DEFINED
+typedef union tagCY
+{
+ struct
+ {
+#ifdef WORDS_BIGENDIAN
+ LONG Hi;
+ ULONG Lo;
+#else
+ ULONG Lo;
+ LONG Hi;
+#endif
+ } DUMMYSTRUCTNAME;
+ LONGLONG int64;
+} CY;
+typedef CY CURRENCY;
+#endif /* _tagCY_DEFINED */
+
+
+#ifndef _FILETIME_
+#define _FILETIME_
+typedef struct _FILETIME
+{
+#ifdef WORDS_BIGENDIAN
+ DWORD dwHighDateTime;
+ DWORD dwLowDateTime;
+#else
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#endif
+
+/* Memory allocation routines */
+typedef SCODE (WINAPI ALLOCATEBUFFER)(ULONG,LPVOID*);
+typedef SCODE (WINAPI ALLOCATEMORE)(ULONG,LPVOID,LPVOID*);
+typedef ULONG (WINAPI FREEBUFFER)(LPVOID);
+
+typedef ALLOCATEBUFFER *LPALLOCATEBUFFER;
+typedef ALLOCATEMORE *LPALLOCATEMORE;
+typedef FREEBUFFER *LPFREEBUFFER;
+
+/* MAPI exposed interfaces */
+typedef const IID *LPCIID;
+
+typedef struct IAddrBook IAddrBook;
+typedef IAddrBook *LPADRBOOK;
+typedef struct IABContainer IABContainer;
+typedef IABContainer *LPABCONT;
+typedef struct IAttach *LPATTACH;
+typedef struct IDistList IDistList;
+typedef IDistList *LPDISTLIST;
+typedef struct IMailUser IMailUser;
+typedef IMailUser *LPMAILUSER;
+typedef struct IMAPIAdviseSink *LPMAPIADVISESINK;
+typedef struct IMAPIContainer *LPMAPICONTAINER;
+typedef struct IMAPIFolder *LPMAPIFOLDER;
+typedef struct IMAPIProgress IMAPIProgress;
+typedef IMAPIProgress *LPMAPIPROGRESS;
+typedef struct IMAPIStatus IMAPIStatus;
+typedef IMAPIStatus *LPMAPISTATUS;
+typedef struct IMessage *LPMESSAGE;
+typedef struct IProfSect IProfSect;
+typedef IProfSect *LPPROFSECT;
+typedef struct IProviderAdmin IProviderAdmin;
+typedef IProviderAdmin *LPPROVIDERADMIN;
+
+#ifndef MAPI_DIM
+# define MAPI_DIM 1 /* Default to one dimension for variable length arrays */
+#endif
+
+/* Flags for abFlags[0] */
+#define MAPI_NOTRESERVED 0x08
+#define MAPI_NOW 0x10
+#define MAPI_THISSESSION 0x20
+#define MAPI_NOTRECIP 0x40
+#define MAPI_SHORTTERM 0x80
+
+/* Flags for abFlags[1] */
+#define MAPI_COMPOUND 0x80
+
+typedef struct _ENTRYID
+{
+ BYTE abFlags[4];
+ BYTE ab[MAPI_DIM];
+} ENTRYID, *LPENTRYID;
+
+/* MAPI GUID's */
+typedef struct _MAPIUID
+{
+ BYTE ab[sizeof(GUID)];
+} MAPIUID, *LPMAPIUID;
+
+#define IsEqualMAPIUID(pl,pr) (!memcmp((pl),(pr),sizeof(MAPIUID)))
+
+#define MAPI_ONE_OFF_UID { 0x81,0x2b,0x1f,0xa4,0xbe,0xa3,0x10,0x19,0x9d,0x6e, \
+ 0x00,0xdd,0x01,0x0f,0x54,0x02 }
+#define MAPI_ONE_OFF_UNICODE 0x8000
+#define MAPI_ONE_OFF_NO_RICH_INFO 0x0001
+
+/* Object types */
+#define MAPI_STORE 1U
+#define MAPI_ADDRBOOK 2U
+#define MAPI_FOLDER 3U
+#define MAPI_ABCONT 4U
+#define MAPI_MESSAGE 5U
+#define MAPI_MAILUSER 6U
+#define MAPI_ATTACH 7U
+#define MAPI_DISTLIST 8U
+#define MAPI_PROFSECT 9U
+#define MAPI_STATUS 10U
+#define MAPI_SESSION 11U
+#define MAPI_FORMINFO 12U
+
+/* Flags for various calls */
+#define MAPI_MODIFY 0x00000001U /* Object can be modified */
+#define MAPI_CREATE 0x00000002U /* Object can be created */
+#define MAPI_ACCESS_MODIFY MAPI_MODIFY /* Want write access */
+#define MAPI_ACCESS_READ 0x00000002U /* Want read access */
+#define MAPI_ACCESS_DELETE 0x00000004U /* Want delete access */
+#define MAPI_ACCESS_CREATE_HIERARCHY 0x00000008U
+#define MAPI_ACCESS_CREATE_CONTENTS 0x00000010U
+#define MAPI_ACCESS_CREATE_ASSOCIATED 0x00000020U
+#define MAPI_USE_DEFAULT 0x00000040U
+#define MAPI_UNICODE 0x80000000U /* Strings in this call are Unicode */
+
+#if defined (UNICODE) || defined (__WINESRC__)
+#define fMapiUnicode MAPI_UNICODE
+#else
+#define fMapiUnicode 0U
+#endif
+
+/* IMAPISession::OpenMessageStore() flags */
+#define MDB_NO_DIALOG 0x00000001
+
+/* Types of message receivers */
+#ifndef MAPI_ORIG
+#define MAPI_ORIG 0 /* The original author */
+#define MAPI_TO 1 /* The primary message receiver */
+#define MAPI_CC 2 /* A carbon copy receiver */
+#define MAPI_BCC 3 /* A blind carbon copy receiver */
+#define MAPI_P1 0x10000000 /* A message resend */
+#define MAPI_SUBMITTED 0x80000000 /* This message has already been sent */
+#endif
+
+#ifndef cchProfileNameMax
+#define cchProfileNameMax 64 /* Maximum length of a profile name */
+#define cchProfilePassMax 64 /* Maximum length of a profile password */
+#endif
+
+/* Properties: The are the contents of cells in MAPI tables, as well as the
+ * values returned when object properties are queried.
+ */
+
+/* Property types */
+#define PT_UNSPECIFIED 0U
+#define PT_NULL 1U
+#define PT_I2 2U
+#define PT_SHORT PT_I2
+#define PT_LONG 3U
+#define PT_I4 PT_LONG
+#define PT_R4 4U
+#define PT_FLOAT PT_R4
+#define PT_DOUBLE 5U
+#define PT_R8 PT_DOUBLE
+#define PT_CURRENCY 6U
+#define PT_APPTIME 7U
+#define PT_ERROR 10U
+#define PT_BOOLEAN 11U
+#define PT_OBJECT 13U
+#define PT_I8 20U
+#define PT_LONGLONG PT_I8
+#define PT_STRING8 30U
+#define PT_UNICODE 31U
+#define PT_SYSTIME 64U
+#define PT_CLSID 72U
+#define PT_BINARY 258U
+
+#define MV_FLAG 0x1000 /* This property type is multi-valued (an array) */
+#define MV_INSTANCE 0x2000
+#define MVI_FLAG (MV_FLAG|MV_INSTANCE)
+#define MVI_PROP(t) ((t)|MVI_FLAG)
+
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+# define PT_TSTRING PT_UNICODE
+# define PT_MV_TSTRING (MV_FLAG|PT_UNICODE)
+# define LPSZ lpszW
+# define LPPSZ lppszW
+# define MVSZ MVszW
+# else
+# define PT_TSTRING PT_STRING8
+# define PT_MV_TSTRING (MV_FLAG|PT_STRING8)
+# define LPSZ lpszA
+# define LPPSZ lppszA
+# define MVSZ MVszA
+# endif
+#endif
+
+#define PROP_TYPE_MASK 0xFFFFU
+#define PROP_TYPE(t) ((t) & PROP_TYPE_MASK)
+#define PROP_ID(t) ((t) >> 16)
+#define PROP_TAG(t,id) (((id) << 16) | t)
+#define PROP_ID_NULL 0
+#define PROP_ID_INVALID 0xFFFF
+#define PR_NULL PROP_TAG(PT_NULL, PROP_ID_NULL)
+
+#define CHANGE_PROP_TYPE(t,typ) ((0xFFFF0000 & t) | typ)
+
+/* Multi-valued property types */
+#define PT_MV_I2 (MV_FLAG|PT_I2)
+#define PT_MV_SHORT PT_MV_I2
+#define PT_MV_LONG (MV_FLAG|PT_LONG)
+#define PT_MV_I4 PT_MV_LONG
+#define PT_MV_R4 (MV_FLAG|PT_R4)
+#define PT_MV_FLOAT PT_MV_R4
+#define PT_MV_DOUBLE (MV_FLAG|PT_DOUBLE)
+#define PT_MV_R8 PT_MV_DOUBLE
+#define PT_MV_CURRENCY (MV_FLAG|PT_CURRENCY)
+#define PT_MV_APPTIME (MV_FLAG|PT_APPTIME)
+#define PT_MV_SYSTIME (MV_FLAG|PT_SYSTIME)
+#define PT_MV_STRING8 (MV_FLAG|PT_STRING8)
+#define PT_MV_BINARY (MV_FLAG|PT_BINARY)
+#define PT_MV_UNICODE (MV_FLAG|PT_UNICODE)
+#define PT_MV_CLSID (MV_FLAG|PT_CLSID)
+#define PT_MV_I8 (MV_FLAG|PT_I8)
+#define PT_MV_LONGLONG PT_MV_I8
+
+
+/* The property tag structure. This describes a list of columns */
+typedef struct _SPropTagArray
+{
+ ULONG cValues; /* Number of elements in aulPropTag */
+ ULONG aulPropTag[MAPI_DIM]; /* Property tags */
+} SPropTagArray, *LPSPropTagArray;
+
+#define CbNewSPropTagArray(c) (offsetof(SPropTagArray,aulPropTag)+(c)*sizeof(ULONG))
+#define CbSPropTagArray(p) CbNewSPropTagArray((p)->cValues)
+#define SizedSPropTagArray(n,id) \
+ struct _SPropTagArray_##id { ULONG cValues; ULONG aulPropTag[n]; } id
+
+/* Multi-valued PT_APPTIME property value */
+typedef struct _SAppTimeArray
+{
+ ULONG cValues; /* Number of doubles in lpat */
+ double *lpat; /* Pointer to double array of length cValues */
+} SAppTimeArray;
+
+/* PT_BINARY property value */
+typedef struct _SBinary
+{
+ ULONG cb; /* Number of bytes in lpb */
+ LPBYTE lpb; /* Pointer to byte array of length cb */
+} SBinary, *LPSBinary;
+
+/* Multi-valued PT_BINARY property value */
+typedef struct _SBinaryArray
+{
+ ULONG cValues; /* Number of SBinarys in lpbin */
+ SBinary *lpbin; /* Pointer to SBinary array of length cValues */
+} SBinaryArray;
+
+typedef SBinaryArray ENTRYLIST, *LPENTRYLIST;
+
+/* Multi-valued PT_CY property value */
+typedef struct _SCurrencyArray
+{
+ ULONG cValues; /* Number of CYs in lpcu */
+ CY *lpcur; /* Pointer to CY array of length cValues */
+} SCurrencyArray;
+
+/* Multi-valued PT_SYSTIME property value */
+typedef struct _SDateTimeArray
+{
+ ULONG cValues; /* Number of FILETIMEs in lpft */
+ FILETIME *lpft; /* Pointer to FILETIME array of length cValues */
+} SDateTimeArray;
+
+/* Multi-valued PT_DOUBLE property value */
+typedef struct _SDoubleArray
+{
+ ULONG cValues; /* Number of doubles in lpdbl */
+ double *lpdbl; /* Pointer to double array of length cValues */
+} SDoubleArray;
+
+/* Multi-valued PT_CLSID property value */
+typedef struct _SGuidArray
+{
+ ULONG cValues; /* Number of GUIDs in lpguid */
+ GUID *lpguid; /* Pointer to GUID array of length cValues */
+} SGuidArray;
+
+/* Multi-valued PT_LONGLONG property value */
+typedef struct _SLargeIntegerArray
+{
+ ULONG cValues; /* Number of long64s in lpli */
+ LARGE_INTEGER *lpli; /* Pointer to long64 array of length cValues */
+} SLargeIntegerArray;
+
+/* Multi-valued PT_LONG property value */
+typedef struct _SLongArray
+{
+ ULONG cValues; /* Number of longs in lpl */
+ LONG *lpl; /* Pointer to long array of length cValues */
+} SLongArray;
+
+/* Multi-valued PT_STRING8 property value */
+typedef struct _SLPSTRArray
+{
+ ULONG cValues; /* Number of Ascii strings in lppszA */
+ LPSTR *lppszA; /* Pointer to Ascii string array of length cValues */
+} SLPSTRArray;
+
+/* Multi-valued PT_FLOAT property value */
+typedef struct _SRealArray
+{
+ ULONG cValues; /* Number of floats in lpflt */
+ float *lpflt; /* Pointer to float array of length cValues */
+} SRealArray;
+
+/* Multi-valued PT_SHORT property value */
+typedef struct _SShortArray
+{
+ ULONG cValues; /* Number of shorts in lpb */
+ short int *lpi; /* Pointer to short array of length cValues */
+} SShortArray;
+
+/* Multi-valued PT_UNICODE property value */
+typedef struct _SWStringArray
+{
+ ULONG cValues; /* Number of Unicode strings in lppszW */
+ LPWSTR *lppszW; /* Pointer to Unicode string array of length cValues */
+} SWStringArray;
+
+/* A property value */
+typedef union _PV
+{
+ short int i;
+ LONG l;
+ ULONG ul;
+ float flt;
+ double dbl;
+ unsigned short b;
+ CY cur;
+ double at;
+ FILETIME ft;
+ LPSTR lpszA;
+ SBinary bin;
+ LPWSTR lpszW;
+ LPGUID lpguid;
+ LARGE_INTEGER li;
+ SShortArray MVi;
+ SLongArray MVl;
+ SRealArray MVflt;
+ SDoubleArray MVdbl;
+ SCurrencyArray MVcur;
+ SAppTimeArray MVat;
+ SDateTimeArray MVft;
+ SBinaryArray MVbin;
+ SLPSTRArray MVszA;
+ SWStringArray MVszW;
+ SGuidArray MVguid;
+ SLargeIntegerArray MVli;
+ SCODE err;
+ LONG x;
+} __UPV;
+
+/* Property value structure. This is essentially a mini-Variant */
+typedef struct _SPropValue
+{
+ ULONG ulPropTag; /* The property type */
+ ULONG dwAlignPad; /* Alignment, treat as reserved */
+ union _PV Value; /* The property value */
+} SPropValue, *LPSPropValue;
+
+/* Structure describing a table row (a collection of property values) */
+typedef struct _SRow
+{
+ ULONG ulAdrEntryPad; /* Padding, treat as reserved */
+ ULONG cValues; /* Count of property values in lpProbs */
+ LPSPropValue lpProps; /* Pointer to an array of property values of length cValues */
+} SRow, *LPSRow;
+
+/* Structure describing a set of table rows */
+typedef struct _SRowSet
+{
+ ULONG cRows; /* Count of rows in aRow */
+ SRow aRow[MAPI_DIM]; /* Array of rows of length cRows */
+} SRowSet, *LPSRowSet;
+
+#define CbNewSRowSet(c) (offsetof(SRowSet,aRow)+(c)*sizeof(SRow))
+#define CbSRowSet(p) CbNewSRowSet((p)->cRows)
+#define SizedSRowSet(n,id) \
+ struct _SRowSet_##id { ULONG cRows; SRow aRow[n]; } id
+
+/* Structure describing a problem with a property */
+typedef struct _SPropProblem
+{
+ ULONG ulIndex; /* Index of the property */
+ ULONG ulPropTag; /* Property tag of the property */
+ SCODE scode; /* Error code of the problem */
+} SPropProblem, *LPSPropProblem;
+
+/* A collection of property problems */
+typedef struct _SPropProblemArray
+{
+ ULONG cProblem; /* Number of problems in aProblem */
+ SPropProblem aProblem[MAPI_DIM]; /* Array of problems of length cProblem */
+} SPropProblemArray, *LPSPropProblemArray;
+
+/* FPropContainsProp flags */
+#define FL_FULLSTRING ((ULONG)0x00000) /* Exact string match */
+#define FL_SUBSTRING ((ULONG)0x00001) /* Substring match */
+#define FL_PREFIX ((ULONG)0x00002) /* Prefix match */
+#define FL_IGNORECASE ((ULONG)0x10000) /* Case insensitive */
+#define FL_IGNORENONSPACE ((ULONG)0x20000) /* Ignore non spacing characters */
+#define FL_LOOSE ((ULONG)0x40000) /* Try very hard to match */
+
+
+/* Table types returned by IMAPITable_GetStatus() */
+#define TBLTYPE_SNAPSHOT 0U /* Table is fixed at creation time and contents do not change */
+#define TBLTYPE_KEYSET 1U /* Table has a fixed number of rows, but row values may change */
+#define TBLTYPE_DYNAMIC 2U /* Table values and the number of rows may change */
+
+/* Table status returned by IMAPITable_GetStatus() */
+#define TBLSTAT_COMPLETE 0U /* All operations have completed (normal status) */
+#define TBLSTAT_QCHANGED 7U /* Table data has changed as expected */
+#define TBLSTAT_SORTING 9U /* Table is being asynchronously sorted */
+#define TBLSTAT_SORT_ERROR 10U /* An error occurred while sorting the table */
+#define TBLSTAT_SETTING_COLS 11U /* Table columns are being asynchronously changed */
+#define TBLSTAT_SETCOL_ERROR 13U /* An error occurred during column changing */
+#define TBLSTAT_RESTRICTING 14U /* Table rows are being asynchronously restricted */
+#define TBLSTAT_RESTRICT_ERROR 15U /* An error occurred during row restriction */
+
+/* Flags for IMAPITable operations that can be asynchronous */
+#define TBL_NOWAIT 1U /* Perform the operation asynchronously */
+#define TBL_BATCH 2U /* Perform the operation when the results are needed */
+#define TBL_ASYNC TBL_NOWAIT /* Synonym for TBL_NOWAIT */
+
+/* Flags for IMAPITable_FindRow() */
+#define DIR_BACKWARD 1U /* Read rows backwards from the start bookmark */
+
+/* Table bookmarks */
+typedef ULONG BOOKMARK;
+
+#define BOOKMARK_BEGINNING ((BOOKMARK)0) /* The first row */
+#define BOOKMARK_CURRENT ((BOOKMARK)1) /* The curent table row */
+#define BOOKMARK_END ((BOOKMARK)2) /* The last row */
+
+/* Row restrictions */
+typedef struct _SRestriction* LPSRestriction;
+
+typedef struct _SAndRestriction
+{
+ ULONG cRes;
+ LPSRestriction lpRes;
+} SAndRestriction;
+
+typedef struct _SBitMaskRestriction
+{
+ ULONG relBMR;
+ ULONG ulPropTag;
+ ULONG ulMask;
+} SBitMaskRestriction;
+
+typedef struct _SCommentRestriction
+{
+ ULONG cValues;
+ LPSRestriction lpRes;
+ LPSPropValue lpProp;
+} SCommentRestriction;
+
+#define RELOP_LT 0U
+#define RELOP_LE 1U
+#define RELOP_GT 2U
+#define RELOP_GE 3U
+#define RELOP_EQ 4U
+#define RELOP_NE 5U
+#define RELOP_RE 6U
+
+typedef struct _SComparePropsRestriction
+{
+ ULONG relop;
+ ULONG ulPropTag1;
+ ULONG ulPropTag2;
+} SComparePropsRestriction;
+
+typedef struct _SContentRestriction
+{
+ ULONG ulFuzzyLevel;
+ ULONG ulPropTag;
+ LPSPropValue lpProp;
+} SContentRestriction;
+
+typedef struct _SExistRestriction
+{
+ ULONG ulReserved1;
+ ULONG ulPropTag;
+ ULONG ulReserved2;
+} SExistRestriction;
+
+typedef struct _SNotRestriction
+{
+ ULONG ulReserved;
+ LPSRestriction lpRes;
+} SNotRestriction;
+
+typedef struct _SOrRestriction
+{
+ ULONG cRes;
+ LPSRestriction lpRes;
+} SOrRestriction;
+
+typedef struct _SPropertyRestriction
+{
+ ULONG relop;
+ ULONG ulPropTag;
+ LPSPropValue lpProp;
+} SPropertyRestriction;
+
+typedef struct _SSizeRestriction
+{
+ ULONG relop;
+ ULONG ulPropTag;
+ ULONG cb;
+} SSizeRestriction;
+
+typedef struct _SSubRestriction
+{
+ ULONG ulSubObject;
+ LPSRestriction lpRes;
+} SSubRestriction;
+
+/* Restriction types */
+#define RES_AND 0U
+#define RES_OR 1U
+#define RES_NOT 2U
+#define RES_CONTENT 3U
+#define RES_PROPERTY 4U
+#define RES_COMPAREPROPS 5U
+#define RES_BITMASK 6U
+#define RES_SIZE 7U
+#define RES_EXIST 8U
+#define RES_SUBRESTRICTION 9U
+#define RES_COMMENT 10U
+
+typedef struct _SRestriction
+{
+ ULONG rt;
+ union
+ {
+ SAndRestriction resAnd;
+ SBitMaskRestriction resBitMask;
+ SCommentRestriction resComment;
+ SComparePropsRestriction resCompareProps;
+ SContentRestriction resContent;
+ SExistRestriction resExist;
+ SNotRestriction resNot;
+ SOrRestriction resOr;
+ SPropertyRestriction resProperty;
+ SSizeRestriction resSize;
+ SSubRestriction resSub;
+ } res;
+} SRestriction;
+
+/* Errors */
+typedef struct _MAPIERROR
+{
+ ULONG ulVersion; /* Mapi version */
+#if defined (UNICODE) || defined (__WINESRC__)
+ LPWSTR lpszError; /* Error and component strings. These are Ascii */
+ LPWSTR lpszComponent; /* unless the MAPI_UNICODE flag is passed in */
+#else
+ LPSTR lpszError;
+ LPSTR lpszComponent;
+#endif
+ ULONG ulLowLevelError;
+ ULONG ulContext;
+} MAPIERROR, *LPMAPIERROR;
+
+/* Sorting */
+#define TABLE_SORT_ASCEND 0U
+#define TABLE_SORT_DESCEND 1U
+#define TABLE_SORT_COMBINE 2U
+
+typedef struct _SSortOrder
+{
+ ULONG ulPropTag;
+ ULONG ulOrder;
+} SSortOrder, *LPSSortOrder;
+
+typedef struct _SSortOrderSet
+{
+ ULONG cSorts;
+ ULONG cCategories;
+ ULONG cExpanded;
+ SSortOrder aSort[MAPI_DIM];
+} SSortOrderSet, * LPSSortOrderSet;
+
+#define MNID_ID 0
+#define MNID_STRING 1
+
+typedef struct _MAPINAMEID
+{
+ LPGUID lpguid;
+ ULONG ulKind;
+ union
+ {
+ LONG lID;
+ LPWSTR lpwstrName;
+ } Kind;
+} MAPINAMEID, *LPMAPINAMEID;
+
+/* Desired notification types (bitflags) */
+#define fnevCriticalError ((ULONG)0x00000001)
+#define fnevNewMail ((ULONG)0x00000002)
+#define fnevObjectCreated ((ULONG)0x00000004)
+#define fnevObjectDeleted ((ULONG)0x00000008)
+#define fnevObjectModified ((ULONG)0x00000010)
+#define fnevObjectMoved ((ULONG)0x00000020)
+#define fnevObjectCopied ((ULONG)0x00000040)
+#define fnevSearchComplete ((ULONG)0x00000080)
+#define fnevTableModified ((ULONG)0x00000100)
+#define fnevStatusObjectModified ((ULONG)0x00000200)
+#define fnevReservedForMapi ((ULONG)0x40000000)
+#define fnevExtended ((ULONG)0x80000000)
+
+/* Type of notification event */
+#define TABLE_CHANGED 1U
+#define TABLE_ERROR 2U
+#define TABLE_ROW_ADDED 3U
+#define TABLE_ROW_DELETED 4U
+#define TABLE_ROW_MODIFIED 5U
+#define TABLE_SORT_DONE 6U
+#define TABLE_RESTRICT_DONE 7U
+#define TABLE_SETCOL_DONE 8U
+#define TABLE_RELOAD 9U
+
+/* fnevCriticalError notification */
+typedef struct _ERROR_NOTIFICATION
+{
+ ULONG cbEntryID;
+ LPENTRYID lpEntryID;
+ SCODE scode;
+ ULONG ulFlags;
+ LPMAPIERROR lpMAPIError;
+} ERROR_NOTIFICATION;
+
+/* fnevNewMail notification */
+typedef struct _NEWMAIL_NOTIFICATION
+{
+ ULONG cbEntryID;
+ LPENTRYID lpEntryID;
+ ULONG cbParentID;
+ LPENTRYID lpParentID;
+ ULONG ulFlags;
+#if defined (UNICODE) || defined (__WINESRC__)
+ LPWSTR lpszMessageClass;
+#else
+ LPSTR lpszMessageClass;
+#endif
+ ULONG ulMessageFlags;
+} NEWMAIL_NOTIFICATION;
+
+/* fnevObjectCreated/Deleted/Modified/Moved/Copied notification */
+typedef struct _OBJECT_NOTIFICATION
+{
+ ULONG cbEntryID;
+ LPENTRYID lpEntryID;
+ ULONG ulObjType;
+ ULONG cbParentID;
+ LPENTRYID lpParentID;
+ ULONG cbOldID;
+ LPENTRYID lpOldID;
+ ULONG cbOldParentID;
+ LPENTRYID lpOldParentID;
+ LPSPropTagArray lpPropTagArray;
+} OBJECT_NOTIFICATION;
+
+/* fnevTableModified notification */
+typedef struct _TABLE_NOTIFICATION
+{
+ ULONG ulTableEvent;
+ HRESULT hResult;
+ SPropValue propIndex;
+ SPropValue propPrior;
+ SRow row;
+ ULONG ulPad;
+} TABLE_NOTIFICATION;
+
+/* fnevExtended notification */
+typedef struct _EXTENDED_NOTIFICATION
+{
+ ULONG ulEvent;
+ ULONG cb;
+ LPBYTE pbEventParameters;
+} EXTENDED_NOTIFICATION;
+
+/* fnevStatusObjectModified notification */
+typedef struct
+{
+ ULONG cbEntryID;
+ LPENTRYID lpEntryID;
+ ULONG cValues;
+ LPSPropValue lpPropVals;
+} STATUS_OBJECT_NOTIFICATION;
+
+/* The notification structure passed to advise sinks */
+typedef struct _NOTIFICATION
+{
+ ULONG ulEventType;
+ ULONG ulAlignPad;
+ union
+ {
+ ERROR_NOTIFICATION err;
+ NEWMAIL_NOTIFICATION newmail;
+ OBJECT_NOTIFICATION obj;
+ TABLE_NOTIFICATION tab;
+ EXTENDED_NOTIFICATION ext;
+ STATUS_OBJECT_NOTIFICATION statobj;
+ } info;
+} NOTIFICATION, *LPNOTIFICATION;
+
+typedef LONG (WINAPI NOTIFCALLBACK)(LPVOID,ULONG,LPNOTIFICATION);
+typedef NOTIFCALLBACK *LPNOTIFCALLBACK;
+
+/* IMAPIContainer::OpenEntry flags */
+#define MAPI_BEST_ACCESS 0x00000010
+
+/*****************************************************************************
+ * IMAPITable interface
+ *
+ * This is the read-only 'view' over an I(MAPI)TableData object.
+ */
+#define INTERFACE IMAPITable
+DECLARE_INTERFACE_(IMAPITable,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPITable methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppError) PURE;
+ STDMETHOD(Advise)(THIS_ ULONG ulMask, LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;
+ STDMETHOD(Unadvise)(THIS_ ULONG ulCxn) PURE;
+ STDMETHOD(GetStatus)(THIS_ ULONG *lpStatus, ULONG *lpType) PURE;
+ STDMETHOD(SetColumns)(THIS_ LPSPropTagArray lpProps, ULONG ulFlags) PURE;
+ STDMETHOD(QueryColumns)(THIS_ ULONG ulFlags, LPSPropTagArray *lpCols) PURE;
+ STDMETHOD(GetRowCount)(THIS_ ULONG ulFlags, ULONG *lpCount) PURE;
+ STDMETHOD(SeekRow)(THIS_ BOOKMARK lpStart, LONG lRows, LONG *lpSeeked) PURE;
+ STDMETHOD(SeekRowApprox)(THIS_ ULONG ulNum, ULONG ulDenom) PURE;
+ STDMETHOD(QueryPosition)(THIS_ ULONG *lpRow, ULONG *lpNum, ULONG *lpDenom) PURE;
+ STDMETHOD(FindRow)(THIS_ LPSRestriction lpRestrict, BOOKMARK lpOrigin, ULONG ulFlags) PURE;
+ STDMETHOD(Restrict)(THIS_ LPSRestriction lpRestrict, ULONG ulFlags) PURE;
+ STDMETHOD(CreateBookmark)(THIS_ BOOKMARK *lppPos) PURE;
+ STDMETHOD(FreeBookmark)(THIS_ BOOKMARK lpPos) PURE;
+ STDMETHOD(SortTable)(THIS_ LPSSortOrderSet lpSortOpts, ULONG ulFlags) PURE;
+ STDMETHOD(QuerySortOrder)(THIS_ LPSSortOrderSet *lppSortOpts) PURE;
+ STDMETHOD(QueryRows)(THIS_ LONG lRows, ULONG ulFlags, LPSRowSet *lppRows) PURE;
+ STDMETHOD(Abort) (THIS) PURE;
+ STDMETHOD(ExpandRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulRows,
+ ULONG ulFlags, LPSRowSet *lppRows, ULONG *lpMore) PURE;
+ STDMETHOD(CollapseRow)(THIS_ ULONG cbKey, LPBYTE lpKey, ULONG ulFlags, ULONG *lpRows) PURE;
+ STDMETHOD(WaitForCompletion)(THIS_ ULONG ulFlags, ULONG ulTime, ULONG *lpState) PURE;
+ STDMETHOD(GetCollapseState)(THIS_ ULONG ulFlags, ULONG cbKey, LPBYTE lpKey,
+ ULONG *lpStateLen, LPBYTE *lpState) PURE;
+ STDMETHOD(SetCollapseState)(THIS_ ULONG ulFlags, ULONG ulLen,
+ LPBYTE lpStart, BOOKMARK *lppWhere) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMAPITable_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPITable_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMAPITable_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPITable methods ***/
+#define IMAPITable_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPITable_Advise(p,a,b,c) (p)->lpVtbl->Advise(p,a,b,c)
+#define IMAPITable_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
+#define IMAPITable_GetStatus(p,a,b) (p)->lpVtbl->GetStatus(p,a,b)
+#define IMAPITable_SetColumns(p,a,b) (p)->lpVtbl->SetColumns(p,a,b)
+#define IMAPITable_QueryColumns(p,a,b) (p)->lpVtbl->QueryColumns(p,a,b)
+#define IMAPITable_GetRowCount(p,a,b) (p)->lpVtbl->GetRowCount(p,a,b)
+#define IMAPITable_SeekRow(p,a,b) (p)->lpVtbl->SeekRow(p,a,b)
+#define IMAPITable_SeekRowApprox(p,a,b) (p)->lpVtbl->SeekRowApprox(p,a,b)
+#define IMAPITable_QueryPosition(p,a,b) (p)->lpVtbl->QueryPosition(p,a,b)
+#define IMAPITable_FindRow(p,a,b,c) (p)->lpVtbl->FindRow(p,a,b,c)
+#define IMAPITable_Restrict(p,a,b) (p)->lpVtbl->Recstrict(p,a,b)
+#define IMAPITable_CreateBookmark(p,a) (p)->lpVtbl->CreateBookmark(p,a)
+#define IMAPITable_FreeBookmark(p,a) (p)->lpVtbl->FreeBookmark(p,a)
+#define IMAPITable_SortTable(p,a,b) (p)->lpVtbl->SortTable(p,a,b)
+#define IMAPITable_QuerySortOrder(p,a) (p)->lpVtbl->QuerySortOrder(p,a)
+#define IMAPITable_QueryRows(p,a,b,c) (p)->lpVtbl->QueryRows(p,a,b,c)
+#define IMAPITable_Abort(p) (p)->lpVtbl->Abort(p)
+#define IMAPITable_ExpandRow(p,a,b,c,d,e,f) (p)->lpVtbl->ExpandRow(p,a,b,c,d,e,f)
+#define IMAPITable_CollapseRow(p,a,b,c,d) (p)->lpVtbl->CollapseRow(p,a,b,c,d)
+#define IMAPITable_WaitForCompletion(p,a,b,c) (p)->lpVtbl->WaitForCompletion(p,a,b,c)
+#define IMAPITable_GetCollapseState(p,a,b,c,d,e) (p)->lpVtbl->GetCollapseState(p,a,b,c,d,e)
+#define IMAPITable_SetCollapseState(p,a,b,c,d) (p)->lpVtbl->SetCollapseState(p,a,b,c,d)
+#endif
+
+typedef IMAPITable *LPMAPITABLE;
+
+/*****************************************************************************
+ * IMAPIAdviseSink interface
+ */
+#define INTERFACE IMAPIAdviseSink
+DECLARE_INTERFACE_(IMAPIAdviseSink,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIAdviseSink methods ***/
+ STDMETHOD(OnNotify)(THIS_ ULONG NumNotif, LPNOTIFICATION lpNotif) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMAPIAdviseSink_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIAdviseSink_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMAPIAdviseSink_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIAdviseSink methods ***/
+#define IMAPIAdviseSink_OnNotify(p,a,b) (p)->lpVtbl->OnNotify(p,a,b)
+#endif
+
+/*****************************************************************************
+ * IMAPIProp interface
+ */
+#define INTERFACE IMAPIProp
+DECLARE_INTERFACE_(IMAPIProp,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMAPIProp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIProp_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMAPIProp_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IMAPIProp_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPIProp_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IMAPIProp_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMAPIProp_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IMAPIProp_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMAPIProp_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMAPIProp_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMAPIProp_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMAPIProp_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMAPIProp_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMAPIProp_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+#endif
+
+typedef IMAPIProp *LPMAPIPROP;
+
+#define KEEP_OPEN_READONLY (0x00000001U)
+#define KEEP_OPEN_READWRITE (0x00000002U)
+#define FORCE_SAVE (0x00000004U)
+
+/*****************************************************************************
+ * IMsgStore interface
+ */
+#define INTERFACE IMsgStore
+DECLARE_INTERFACE_(IMsgStore,IMAPIProp)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+ /*** IMsgStore methods ***/
+ STDMETHOD(Advise)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulEventMask, LPMAPIADVISESINK lpAdviseSink,
+ ULONG * lpulConnection) PURE;
+ STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;
+ STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbEntryID1, LPENTRYID lpEntryID1, ULONG cbEntryID2, LPENTRYID lpEntryID2,
+ ULONG ulFlags, ULONG * lpulResult) PURE;
+ STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags, ULONG *lpulObjType,
+ LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;
+ STDMETHOD(GetReceiveFolder)(THIS_ LPSTR lpszMessageClass, ULONG ulFlags, ULONG * lpcbEntryID, LPENTRYID *lppEntryID,
+ LPSTR *lppszExplicitClass) PURE;
+ STDMETHOD(GetReceiveFolderTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+ STDMETHOD(StoreLogoff)(THIS_ ULONG * lpulFlags) PURE;
+ STDMETHOD(AbortSubmit)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags) PURE;
+ STDMETHOD(GetOutgoingQueue)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+ STDMETHOD(SetLockState)(THIS_ LPMESSAGE lpMessage, ULONG ulLockState) PURE;
+ STDMETHOD(FinishedMsg)(THIS_ ULONG ulFlags, ULONG cbEntryID, LPENTRYID lpEntryID) PURE;
+ STDMETHOD(NotifyNewMail)(THIS_ LPNOTIFICATION lpNotification) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMsgStore_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMsgStore_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMsgStore_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IMsgStore_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMsgStore_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IMsgStore_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMsgStore_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IMsgStore_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMsgStore_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMsgStore_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMsgStore_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMsgStore_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMsgStore_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMsgStore_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+ /*** IMsgStore methods ***/
+#define IMsgStore_Advise(p,a,b,c,d,e) (p)->lpVtbl->Advise(p,a,b,c,d,e)
+#define IMsgStore_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
+#define IMsgStore_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)
+#define IMsgStore_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMsgStore_SetReceiveFolder(p,a,b,c,d) (p)->lpVtbl->SetReceiveFolder(p,a,b,c,d)
+#define IMsgStore_GetReceiveFolder(p,a,b,c,d,e) (p)->lpVtbl->GetReceiveFolder(p,a,b,c,d,e)
+#define IMsgStore_GetReceiveFolderTable(p,a,b) (p)->lpVtbl->GetReceiveFolderTable(p,a,b)
+#define IMsgStore_StoreLogoff(p,a) (p)->lpVtbl->StoreLogoff(p,a)
+#define IMsgStore_AbortSubmit(p,a,b,c) (p)->lpVtbl->AbortSubmit(p,a,b,c)
+#define IMsgStore_GetOutgoingQueue(p,a,b) (p)->lpVtbl->GetOutgoingQueue(p,a,b)
+#define IMsgStore_SetLockState(p,a,b) (p)->lpVtbl->SetLockState(p,a,b)
+#define IMsgStore_FinishedMsg(p,a,b,c) (p)->lpVtbl->FinishedMsg(p,a,b,c)
+#define IMsgStore_NotifyNewMail(p,a) (p)->lpVtbl->NotifyNewMail(p,a)
+
+#endif
+
+typedef IMsgStore *LPMDB;
+
+/*****************************************************************************
+ * IMAPIContainer interface
+ */
+#define INTERFACE IMAPIContainer
+DECLARE_INTERFACE_(IMAPIContainer,IMAPIProp)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+ /*** IMAPIContainer methods ***/
+ STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+ STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+ STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,
+ ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;
+ STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;
+ STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,
+ ULONG * lpulSearchState) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMAPIContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIContainer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMAPIContainer_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IMAPIContainer_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPIContainer_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IMAPIContainer_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMAPIContainer_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IMAPIContainer_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMAPIContainer_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMAPIContainer_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMAPIContainer_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMAPIContainer_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMAPIContainer_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMAPIContainer_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+ /*** IMAPIContainer methods ***/
+#define IMAPIContainer_GetContentsTable(p,a,b) (p)->lpVtbl->GetContentsTable(p,a,b)
+#define IMAPIContainer_GetHierarchyTable(p,a,b) (p)->lpVtbl->GetHierarchyTable(p,a,b)
+#define IMAPIContainer_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMAPIContainer_SetSearchCriteria(p,a,b,c) (p)->lpVtbl->SetSearchCriteria(p,a,b,c)
+#define IMAPIContainer_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)
+
+#endif
+
+/*****************************************************************************
+ * IMAPIFolder interface
+ */
+#define INTERFACE IMAPIFolder
+DECLARE_INTERFACE_(IMAPIFolder,IMAPIContainer)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+ /*** IMAPIContainer methods ***/
+ STDMETHOD(GetContentsTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+ STDMETHOD(GetHierarchyTable)(THIS_ ULONG ulFlags, LPMAPITABLE * lppTable) PURE;
+ STDMETHOD(OpenEntry)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, ULONG ulFlags,
+ ULONG * lpulObjType, LPUNKNOWN * lppUnk) PURE;
+ STDMETHOD(SetSearchCriteria)(THIS_ LPSRestriction lpRestriction, LPENTRYLIST lpContainerList, ULONG ulSearchFlags) PURE;
+ STDMETHOD(GetSearchCriteria)(THIS_ ULONG ulFlags, LPSRestriction * lppRestriction, LPENTRYLIST * lppContainerList,
+ ULONG * lpulSearchState) PURE;
+ /*** IMAPIFolder methods ***/
+ STDMETHOD(CreateMessage)(THIS_ LPCIID lpInterface, ULONG ulFlags, LPMESSAGE *lppMessage) PURE;
+ STDMETHOD(CopyMessages)(THIS_ LPENTRYLIST lpMsgList, LPCIID lpInterface, LPVOID lpDestFolder, ULONG ulUIParam,
+ LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+ STDMETHOD(DeleteMessages)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+ STDMETHOD(CreateFolder)(THIS_ ULONG ulFolderType, LPSTR lpszFolderName, LPSTR lpszFolderComment, LPCIID lpInterface,
+ ULONG ulFlags, LPMAPIFOLDER lppFolder) PURE;
+ STDMETHOD(CopyFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, LPCIID lpInterface, LPVOID lpDestFolder,
+ LPSTR lpszNewFolderName, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+ STDMETHOD(DeleteFolder)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulUIParam, LPMAPIPROGRESS lpProgress,
+ ULONG ulFlags) PURE;
+ STDMETHOD(SetReadFlags)(THIS_ LPENTRYLIST lpMsgList, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+ STDMETHOD(GetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulFlags, ULONG * lpulMessageStatus) PURE;
+ STDMETHOD(SetMessageStatus)(THIS_ ULONG cbEntryID, LPENTRYID lpEntryID, ULONG ulNewStatus,
+ ULONG ulNewStatusMask, ULONG * lpulOldStatus) PURE;
+ STDMETHOD(SaveContentsSort)(THIS_ LPSSortOrderSet lpSortCriteria, ULONG ulFlags) PURE;
+ STDMETHOD(EmptyFolder) (THIS_ ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMAPIFolder_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPIFolder_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMAPIFolder_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IMAPIFolder_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPIFolder_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IMAPIFolder_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMAPIFolder_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IMAPIFolder_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMAPIFolder_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMAPIFolder_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMAPIFolder_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMAPIFolder_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMAPIFolder_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMAPIFolder_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+ /*** IMAPIContainer methods ***/
+#define IMAPIFolder_GetContentsTable(p,a,b) (p)->lpVtbl->GetContentsTable(p,a,b)
+#define IMAPIFolder_GetHierarchyTable(p,a,b) (p)->lpVtbl->GetHierarchyTable(p,a,b)
+#define IMAPIFolder_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMAPIFolder_SetSearchCriteria(p,a,b,c) (p)->lpVtbl->SetSearchCriteria(p,a,b,c)
+#define IMAPIFolder_GetSearchCriteria(p,a,b,c,d) (p)->lpVtbl->GetSearchCriteria(p,a,b,c,d)
+ /*** IMAPIFolder methods ***/
+#define IMAPIFolder_CreateMessage(p,a,b,c) (p)->lpVtbl->CreateMessage(p,a,b,c)
+#define IMAPIFolder_CopyMessages(p,a,b,c,d,e,f) (p)->lpVtbl->CopyMessages(p,a,b,c,d,e,f)
+#define IMAPIFolder_DeleteMessages(p,a,b,c,d) (p)->lpVtbl->DeleteMessages(p,a,b,c,d)
+#define IMAPIFolder_CreateFolder(p,a,b,c,d,e,f) (p)->lpVtbl->CreateFolder(p,a,b,c,d,e,f)
+#define IMAPIFolder_CopyFolder(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CopyFolder(p,a,b,c,d,e,f,g,h)
+#define IMAPIFolder_DeleteFolder(p,a,b,c,d,e) (p)->lpVtbl->CreateFolder(p,a,b,c,d,e)
+#define IMAPIFolder_SetReadFlags(p,a,b,c,d) (p)->lpVtbl->SetReadFlags(p,a,b,c,d)
+#define IMAPIFolder_GetMessageStatus(p,a,b,c,d) (p)->lpVtbl->GetMessageStatus(p,a,b,c,d)
+#define IMAPIFolder_SetMessageStatus(p,a,b,c,d,e) (p)->lpVtbl->SetMessageStatus(p,a,b,c,d,e)
+#define IMAPIFolder_SaveContentsSort(p,a,b) (p)->lpVtbl->SaveContentsSort(p,a,b)
+#define IMAPIFolder_EmptyFolder(p,a,b,c) (p)->lpVtbl->EmptyFolder(p,a,b,c)
+
+#endif
+
+typedef struct
+{
+ ULONG cb;
+ BYTE abEntry[MAPI_DIM];
+} FLATENTRY, *LPFLATENTRY;
+
+typedef struct
+{
+ ULONG cEntries;
+ ULONG cbEntries;
+ BYTE abEntries[MAPI_DIM];
+} FLATENTRYLIST, *LPFLATENTRYLIST;
+
+typedef struct
+{
+ ULONG cb;
+ BYTE ab[MAPI_DIM];
+} MTSID, *LPMTSID;
+
+typedef struct
+{
+ ULONG cMTSIDs;
+ ULONG cbMTSIDs;
+ BYTE abMTSIDs[MAPI_DIM];
+} FLATMTSIDLIST, *LPFLATMTSIDLIST;
+
+typedef struct _ADRENTRY
+{
+ ULONG ulReserved1;
+ ULONG cValues;
+ LPSPropValue rgPropVals;
+} ADRENTRY, *LPADRENTRY;
+
+typedef struct _ADRLIST
+{
+ ULONG cEntries;
+ ADRENTRY aEntries[MAPI_DIM];
+} ADRLIST, *LPADRLIST;
+
+/*****************************************************************************
+ * IMessage interface
+ */
+#define INTERFACE IMessage
+DECLARE_INTERFACE_(IMessage,IMAPIProp)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+ /*** IMessage methods ***/
+ STDMETHOD(GetAttachmentTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+ STDMETHOD(OpenAttach)(THIS_ ULONG ulAttachmentNum, LPCIID lpInterface, ULONG ulFlags, LPATTACH *lppAttach) PURE;
+ STDMETHOD(CreateAttach)(THIS_ LPCIID lpInterface, ULONG ulFlags, ULONG *lpulAttachmentNum, LPATTACH *lppAttach) PURE;
+ STDMETHOD(DeleteAttach)(THIS_ ULONG ulAttachmentNum, ULONG ulUIParam, LPMAPIPROGRESS lpProgress, ULONG ulFlags) PURE;
+ STDMETHOD(GetRecipientTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+ STDMETHOD(ModifyRecipients)(THIS_ ULONG ulFlags, LPADRLIST lpMods) PURE;
+ STDMETHOD(SubmitMessage)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(SetReadFlag)(THIS_ ULONG ulFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMessage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMessage_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMessage_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IMessage_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMessage_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IMessage_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IMessage_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IMessage_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IMessage_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IMessage_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IMessage_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IMessage_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IMessage_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IMessage_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+ /*** IMessage methods ***/
+#define IMessage_GetAttachmentTable(p,a,b) (p)->lpVtbl->GetAttachmentTable(p,a,b)
+#define IMessage_OpenAttach(p,a,b,c,d) (p)->lpVtbl->OpenAttach(p,a,b,c,d)
+#define IMessage_CreateAttach(p,a,b,c,d) (p)->lpVtbl->CreateAttach(p,a,b,c,d)
+#define IMessage_DeleteAttach(p,a,b,c,d) (p)->lpVtbl->DeleteAttach(p,a,b,c,d)
+#define IMessage_GetRecipientTable(p,a,b) (p)->lpVtbl->GetRecipientTable(p,a,b)
+#define IMessage_ModifyRecipients(p,a,b) (p)->lpVtbl->ModifyRecipients(p,a,b)
+#define IMessage_SubmitMessage(p,a) (p)->lpVtbl->SubmitMessage(p,a)
+#define IMessage_SetReadFlag(p,a) (p)->lpVtbl->SetReadFlag(p,a)
+
+#endif
+
+/* Message flags (PR_MESSAGE_FLAGS) */
+
+#define MSGFLAG_READ 0x00000001U
+#define MSGFLAG_UNMODIFIED 0x00000002U
+#define MSGFLAG_SUBMIT 0x00000004U
+#define MSGFLAG_UNSENT 0x00000008U
+#define MSGFLAG_HASATTACH 0x00000010U
+#define MSGFLAG_FROMME 0x00000020U
+
+/*****************************************************************************
+ * IAttach interface
+ */
+#define INTERFACE IAttach
+DECLARE_INTERFACE_(IAttach,IMAPIProp)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IAttach_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAttach_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IAttach_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IAttach_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IAttach_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IAttach_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IAttach_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IAttach_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IAttach_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IAttach_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IAttach_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IAttach_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IAttach_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IAttach_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+#endif
+
+/* Attachment flags */
+
+#define NO_ATTACHMENT 0x00000000U
+#define ATTACH_BY_VALUE 0x00000001U
+
+#endif /*MAPIDEFS_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h
new file mode 100644
index 00000000..058be52d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiform.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 1998 Justin Bradford
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIFORM_H
+#define MAPIFORM_H
+
+#include <mapidefs.h>
+#include <mapicode.h>
+#include <mapiguid.h>
+#include <mapitags.h>
+
+
+typedef ULONG HFRMREG;
+#define HFRMREG_DEFAULT 0
+#define HFRMREG_LOCAL 1
+#define HFRMREG_PERSONAL 2
+#define HFRMREG_FOLDER 3
+
+typedef const char **LPPCSTR;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HRESULT WINAPI MAPIOpenLocalFormContainer(LPVOID*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIFORM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h
new file mode 100644
index 00000000..9efb5439
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiguid.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIGUID_H
+#define MAPIGUID_H
+
+#define DEFINE_MAPIGUID(n,l,w1,w2) DEFINE_OLEGUID(n,l,w1,w2)
+
+DEFINE_MAPIGUID(IID_IABContainer,0x2030D,0,0);
+DEFINE_MAPIGUID(IID_IABLogon,0x20314,0,0);
+DEFINE_MAPIGUID(IID_IABProvider,0x20311,0,0);
+DEFINE_MAPIGUID(IID_IAddrBook,0x20309,0,0);
+DEFINE_MAPIGUID(IID_IAttachment,0x20308,0,0);
+DEFINE_MAPIGUID(IID_IDistList,0x2030E,0,0);
+DEFINE_MAPIGUID(IID_IEnumMAPIFormProp,0x20323,0,0);
+DEFINE_MAPIGUID(IID_IMailUser,0x2030A,0,0);
+DEFINE_MAPIGUID(IID_IMAPIAdviseSink,0x20302,0,0);
+DEFINE_MAPIGUID(IID_IMAPIContainer,0x2030B,0,0);
+DEFINE_MAPIGUID(IID_IMAPIControl,0x2031B,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFolder,0x2030C,0,0);
+DEFINE_MAPIGUID(IID_IMAPIForm,0x20327,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormAdviseSink,0x2032F,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormContainer,0x2032E,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormFactory,0x20350,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormInfo,0x20324,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormMgr,0x20322,0,0);
+DEFINE_MAPIGUID(IID_IMAPIFormProp,0x2032D,0,0);
+DEFINE_MAPIGUID(IID_IMAPIMessageSite,0x20370,0,0);
+DEFINE_MAPIGUID(IID_IMAPIProgress,0x2031F,0,0);
+DEFINE_MAPIGUID(IID_IMAPIProp,0x20303,0,0);
+DEFINE_MAPIGUID(IID_IMAPIPropData,0x2031A,0,0);
+DEFINE_MAPIGUID(IID_IMAPISession,0x20300,0,0);
+DEFINE_MAPIGUID(IID_IMAPISpoolerInit,0x20317,0,0);
+DEFINE_MAPIGUID(IID_IMAPISpoolerService,0x2031E,0,0);
+DEFINE_MAPIGUID(IID_IMAPISpoolerSession,0x20318,0,0);
+DEFINE_MAPIGUID(IID_IMAPIStatus,0x20305,0,0);
+DEFINE_MAPIGUID(IID_IMAPISup,0x2030F,0,0);
+DEFINE_MAPIGUID(IID_IMAPITable,0x20301,0,0);
+DEFINE_MAPIGUID(IID_IMAPITableData,0x20316,0,0);
+DEFINE_MAPIGUID(IID_IMAPIViewAdviseSink,0x2032B,0,0);
+DEFINE_MAPIGUID(IID_IMAPIViewContext,0x20321,0,0);
+DEFINE_MAPIGUID(IID_IMessage,0x20307,0,0);
+DEFINE_MAPIGUID(IID_IMsgServiceAdmin,0x2031D,0,0);
+DEFINE_MAPIGUID(IID_IMsgStore,0x20306,0,0);
+DEFINE_MAPIGUID(IID_IMSLogon,0x20313,0,0);
+DEFINE_MAPIGUID(IID_IMSProvider,0x20310,0,0);
+DEFINE_MAPIGUID(IID_IPersistMessage,0x2032A,0,0);
+DEFINE_MAPIGUID(IID_IProfAdmin,0x2031C,0,0);
+DEFINE_MAPIGUID(IID_IProfSect,0x20304,0,0);
+DEFINE_MAPIGUID(IID_IProviderAdmin,0x20325,0,0);
+DEFINE_MAPIGUID(IID_ISpoolerHook,0x20320,0,0);
+DEFINE_MAPIGUID(IID_IStreamDocfile,0x2032C,0,0);
+DEFINE_MAPIGUID(IID_IStreamTnef,0x20330,0,0);
+DEFINE_MAPIGUID(IID_ITNEF,0x20319,0,0);
+DEFINE_MAPIGUID(IID_IXPLogon,0x20315,0,0);
+DEFINE_MAPIGUID(IID_IXPProvider,0x20312,0,0);
+DEFINE_MAPIGUID(MUID_PROFILE_INSTANCE,0x20385,0,0);
+DEFINE_MAPIGUID(PS_MAPI,0x20328,0,0);
+DEFINE_MAPIGUID(PS_PUBLIC_STRINGS,0x20329,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_ADDRTYPE,0x20381,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_DISPLAY_NAME,0x20382,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_EMAIL_ADDRESSES,0x20380,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_ENTRYID,0x20383,0,0);
+DEFINE_MAPIGUID(PS_ROUTING_SEARCH_KEY,0x20384,0,0);
+
+#endif/* MAPIGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h
new file mode 100644
index 00000000..18513271
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapitags.h
@@ -0,0 +1,824 @@
+/*
+ * MAPI property tag declarations
+ *
+ * Copyright 2004 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPITAGS_H
+#define MAPITAGS_H
+
+#define FIsTransmittable(t) (PROP_ID(t) < 0x0E00 || PROP_ID(t) >= 0x8000 || \
+ (PROP_ID(t) >= 0x1000 && PROP_ID(t) < 0x6000) || \
+ (PROP_ID(t) >= 0x6800 && PROP_ID(t) < 0x7C00))
+
+#define PR_ACKNOWLEDGEMENT_MODE PROP_TAG(PT_I4,0x01)
+#define PR_ALTERNATE_RECIPIENT_ALLOWED PROP_TAG(PT_BOOLEAN,0x02)
+#define PR_AUTHORIZING_USERS PROP_TAG(PT_BINARY,0x03)
+/* Comment on an automatically forwarded message */
+#define PR_AUTO_FORWARD_COMMENT_W PROP_TAG(PT_UNICODE,0x04)
+#define PR_AUTO_FORWARD_COMMENT_A PROP_TAG(PT_STRING8,0x04)
+#define PR_AUTO_FORWARD_COMMENT WINELIB_NAME_AW(PR_AUTO_FORWARD_COMMENT_)
+/* Whether a message has been automatically forwarded */
+#define PR_AUTO_FORWARDED PROP_TAG(PT_BOOLEAN,0x05)
+#define PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID PROP_TAG(PT_BINARY,0x06)
+#define PR_CONTENT_CORRELATOR PROP_TAG(PT_BINARY,0x07)
+#define PR_CONTENT_IDENTIFIER_W PROP_TAG(PT_UNICODE,0x08)
+#define PR_CONTENT_IDENTIFIER_A PROP_TAG(PT_STRING8,0x08)
+#define PR_CONTENT_IDENTIFIER WINELIB_NAME_AW(PR_CONTENT_IDENTIFIER_)
+/* MIME content length */
+#define PR_CONTENT_LENGTH PROP_TAG(PT_I4,0x09)
+#define PR_CONTENT_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0A)
+#define PR_CONVERSATION_KEY PROP_TAG(PT_BINARY,0x0B)
+#define PR_CONVERSION_EITS PROP_TAG(PT_BINARY,0x0C)
+#define PR_CONVERSION_WITH_LOSS_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0D)
+#define PR_CONVERTED_EITS PROP_TAG(PT_BINARY,0x0E)
+/* Time to deliver for delayed delivery messages */
+#define PR_DEFERRED_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0F)
+#define PR_DELIVER_TIME PROP_TAG(PT_SYSTIME,0x10)
+/* Reason a message was discarded */
+#define PR_DISCARD_REASON PROP_TAG(PT_I4,0x11)
+#define PR_DISCLOSURE_OF_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x12)
+#define PR_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x13)
+#define PR_DL_EXPANSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x14)
+#define PR_EXPIRY_TIME PROP_TAG(PT_SYSTIME,0x15)
+#define PR_IMPLICIT_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x16)
+/* Message importance */
+#define PR_IMPORTANCE PROP_TAG(PT_I4,0x17)
+#define PR_IPM_ID PROP_TAG(PT_BINARY,0x18)
+#define PR_LATEST_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x19)
+#define PR_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x1A)
+#define PR_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x1A)
+#define PR_MESSAGE_CLASS WINELIB_NAME_AW(PR_MESSAGE_CLASS_)
+#define PR_MESSAGE_DELIVERY_ID PROP_TAG(PT_BINARY,0x1B)
+#define PR_MESSAGE_SECURITY_LABEL PROP_TAG(PT_BINARY,0x1E)
+#define PR_OBSOLETED_IPMS PROP_TAG(PT_BINARY,0x1F)
+/* Person a message was originally for */
+#define PR_ORIGINALLY_INTENDED_RECIPIENT_NAME PROP_TAG(PT_BINARY,0x20)
+#define PR_ORIGINAL_EITS PROP_TAG(PT_BINARY,0x21)
+#define PR_ORIGINATOR_CERTIFICATE PROP_TAG(PT_BINARY,0x22)
+#define PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x23)
+/* Address of the message sender */
+#define PR_ORIGINATOR_RETURN_ADDRESS PROP_TAG(PT_BINARY,0x24)
+#define PR_PARENT_KEY PROP_TAG(PT_BINARY,0x25)
+#define PR_PRIORITY PROP_TAG(PT_I4,0x26)
+#define PR_ORIGIN_CHECK PROP_TAG(PT_BINARY,0x27)
+#define PR_PROOF_OF_SUBMISSION_REQUESTED PROP_TAG(PT_BOOLEAN,0x28)
+/* Whether a read receipt is desired */
+#define PR_READ_RECEIPT_REQUESTED PROP_TAG(PT_BOOLEAN,0x29)
+/* Time a message was received */
+#define PR_RECEIPT_TIME PROP_TAG(PT_SYSTIME,0x2A)
+#define PR_RECIPIENT_REASSIGNMENT_PROHIBITED PROP_TAG(PT_BOOLEAN,0x2B)
+#define PR_REDIRECTION_HISTORY PROP_TAG(PT_BINARY,0x2C)
+#define PR_RELATED_IPMS PROP_TAG(PT_BINARY,0x2D)
+/* Sensitivity of the original message */
+#define PR_ORIGINAL_SENSITIVITY PROP_TAG(PT_I4,0x2E)
+#define PR_LANGUAGES_W PROP_TAG(PT_UNICODE,0x2F)
+#define PR_LANGUAGES_A PROP_TAG(PT_STRING8,0x2F)
+#define PR_LANGUAGES WINELIB_NAME_AW(PR_LANGUAGES_)
+#define PR_REPLY_TIME PROP_TAG(PT_SYSTIME,0x30)
+#define PR_REPORT_TAG PROP_TAG(PT_BINARY,0x31)
+#define PR_REPORT_TIME PROP_TAG(PT_SYSTIME,0x32)
+#define PR_RETURNED_IPM PROP_TAG(PT_BOOLEAN,0x33)
+#define PR_SECURITY PROP_TAG(PT_I4,0x34)
+#define PR_INCOMPLETE_COPY PROP_TAG(PT_BOOLEAN,0x35)
+#define PR_SENSITIVITY PROP_TAG(PT_I4,0x36)
+/* The message subject */
+#define PR_SUBJECT_W PROP_TAG(PT_UNICODE,0x37)
+#define PR_SUBJECT_A PROP_TAG(PT_STRING8,0x37)
+#define PR_SUBJECT WINELIB_NAME_AW(PR_SUBJECT_)
+#define PR_SUBJECT_IPM PROP_TAG(PT_BINARY,0x38)
+#define PR_CLIENT_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x39)
+#define PR_REPORT_NAME_W PROP_TAG(PT_UNICODE,0x3A)
+#define PR_REPORT_NAME_A PROP_TAG(PT_STRING8,0x3A)
+#define PR_REPORT_NAME WINELIB_NAME_AW(PR_REPORT_NAME_)
+#define PR_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x3B)
+#define PR_X400_CONTENT_TYPE PROP_TAG(PT_BINARY,0x3C)
+#define PR_SUBJECT_PREFIX_W PROP_TAG(PT_UNICODE,0x3D)
+#define PR_SUBJECT_PREFIX_A PROP_TAG(PT_STRING8,0x3D)
+#define PR_SUBJECT_PREFIX WINELIB_NAME_AW(PR_SUBJECT_PREFIX_)
+#define PR_NON_RECEIPT_REASON PROP_TAG(PT_I4,0x3E)
+#define PR_RECEIVED_BY_ENTRYID PROP_TAG(PT_BINARY,0x3F)
+/* Received by: entry */
+#define PR_RECEIVED_BY_NAME_W PROP_TAG(PT_UNICODE,0x40)
+#define PR_RECEIVED_BY_NAME_A PROP_TAG(PT_STRING8,0x40)
+#define PR_RECEIVED_BY_NAME WINELIB_NAME_AW(PR_RECEIVED_BY_NAME_)
+#define PR_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x41)
+#define PR_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x42)
+#define PR_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x42)
+#define PR_SENT_REPRESENTING_NAME WINELIB_NAME_AW(PR_SENT_REPRESENTING_NAME_)
+#define PR_RCVD_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x43)
+#define PR_RCVD_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x44)
+#define PR_RCVD_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x44)
+#define PR_RCVD_REPRESENTING_NAME WINELIB_NAME_AW(PR_RCVD_REPRESENTING_NAME_)
+#define PR_REPORT_ENTRYID PROP_TAG(PT_BINARY,0x45)
+#define PR_READ_RECEIPT_ENTRYID PROP_TAG(PT_BINARY,0x46)
+#define PR_MESSAGE_SUBMISSION_ID PROP_TAG(PT_BINARY,0x47)
+#define PR_PROVIDER_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x48)
+/* Subject of the original message */
+#define PR_ORIGINAL_SUBJECT_W PROP_TAG(PT_UNICODE,0x49)
+#define PR_ORIGINAL_SUBJECT_A PROP_TAG(PT_STRING8,0x49)
+#define PR_ORIGINAL_SUBJECT WINELIB_NAME_AW(PR_ORIGINAL_SUBJECT_)
+#define PR_DISC_VAL PROP_TAG(PT_BOOLEAN,0x4A)
+#define PR_ORIG_MESSAGE_CLASS_W PROP_TAG(PT_UNICODE,0x4B)
+#define PR_ORIG_MESSAGE_CLASS_A PROP_TAG(PT_STRING8,0x4B)
+#define PR_ORIG_MESSAGE_CLASS WINELIB_NAME_AW(PR_ORIG_MESSAGE_CLASS_)
+#define PR_ORIGINAL_AUTHOR_ENTRYID PROP_TAG(PT_BINARY,0x4C)
+/* Author of the original message */
+#define PR_ORIGINAL_AUTHOR_NAME_W PROP_TAG(PT_UNICODE,0x4D)
+#define PR_ORIGINAL_AUTHOR_NAME_A PROP_TAG(PT_STRING8,0x4D)
+#define PR_ORIGINAL_AUTHOR_NAME WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_NAME_)
+/* Time the original message was submitted */
+#define PR_ORIGINAL_SUBMIT_TIME PROP_TAG(PT_SYSTIME,0x4E)
+#define PR_REPLY_RECIPIENT_ENTRIES PROP_TAG(PT_BINARY,0x4F)
+#define PR_REPLY_RECIPIENT_NAMES_W PROP_TAG(PT_UNICODE,0x50)
+#define PR_REPLY_RECIPIENT_NAMES_A PROP_TAG(PT_STRING8,0x50)
+#define PR_REPLY_RECIPIENT_NAMES WINELIB_NAME_AW(PR_REPLY_RECIPIENT_NAMES_)
+#define PR_RECEIVED_BY_SEARCH_KEY PROP_TAG(PT_BINARY,0x51)
+#define PR_RCVD_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x52)
+#define PR_READ_RECEIPT_SEARCH_KEY PROP_TAG(PT_BINARY,0x53)
+#define PR_REPORT_SEARCH_KEY PROP_TAG(PT_BINARY,0x54)
+#define PR_ORIGINAL_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x55)
+#define PR_ORIGINAL_AUTHOR_SEARCH_KEY PROP_TAG(PT_BINARY,0x56)
+#define PR_MESSAGE_TO_ME PROP_TAG(PT_BOOLEAN,0x57)
+#define PR_MESSAGE_CC_ME PROP_TAG(PT_BOOLEAN,0x58)
+#define PR_MESSAGE_RECIP_ME PROP_TAG(PT_BOOLEAN,0x59)
+/* Sender of the original message */
+#define PR_ORIGINAL_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x5A)
+#define PR_ORIGINAL_SENDER_NAME_A PROP_TAG(PT_STRING8,0x5A)
+#define PR_ORIGINAL_SENDER_NAME WINELIB_NAME_AW(PR_ORIGINAL_SENDER_NAME_)
+#define PR_ORIGINAL_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x5B)
+#define PR_ORIGINAL_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x5C)
+#define PR_ORIGINAL_SENT_REPRESENTING_NAME_W PROP_TAG(PT_UNICODE,0x5D)
+#define PR_ORIGINAL_SENT_REPRESENTING_NAME_A PROP_TAG(PT_STRING8,0x5D)
+#define PR_ORIGINAL_SENT_REPRESENTING_NAME WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_NAME_)
+#define PR_ORIGINAL_SENT_REPRESENTING_ENTRYID PROP_TAG(PT_BINARY,0x5E)
+#define PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY PROP_TAG(PT_BINARY,0x5F)
+#define PR_START_DATE PROP_TAG(PT_SYSTIME,0x60)
+#define PR_END_DATE PROP_TAG(PT_SYSTIME,0x61)
+#define PR_OWNER_APPT_ID PROP_TAG(PT_I4,0x62)
+/* Whether a response to the message is desired */
+#define PR_RESPONSE_REQUESTED PROP_TAG(PT_BOOLEAN,0x63)
+#define PR_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x64)
+#define PR_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x64)
+#define PR_SENT_REPRESENTING_ADDRTYPE WINELIB_NAME_AW(PR_SENT_REPRESENTING_ADDRTYPE_)
+#define PR_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x65)
+#define PR_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x65)
+#define PR_SENT_REPRESENTING_EMAIL_ADDRESS WINELIB_NAME_AW(PR_SENT_REPRESENTING_EMAIL_ADDRESS_)
+#define PR_ORIGINAL_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x66)
+#define PR_ORIGINAL_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x66)
+#define PR_ORIGINAL_SENDER_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINAL_SENDER_ADDRTYPE_)
+/* Email of the original message sender */
+#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x67)
+#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x67)
+#define PR_ORIGINAL_SENDER_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINAL_SENDER_EMAIL_ADDRESS_)
+#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x68)
+#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x68)
+#define PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_)
+#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x69)
+#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x69)
+#define PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_)
+#define PR_CONVERSATION_TOPIC_W PROP_TAG(PT_UNICODE,0x70)
+#define PR_CONVERSATION_TOPIC_A PROP_TAG(PT_STRING8,0x70)
+#define PR_CONVERSATION_TOPIC WINELIB_NAME_AW(PR_CONVERSATION_TOPIC_)
+#define PR_CONVERSATION_INDEX PROP_TAG(PT_BINARY,0x71)
+#define PR_ORIGINAL_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x72)
+#define PR_ORIGINAL_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x72)
+#define PR_ORIGINAL_DISPLAY_BCC WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_BCC_)
+#define PR_ORIGINAL_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x73)
+#define PR_ORIGINAL_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x73)
+#define PR_ORIGINAL_DISPLAY_CC WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_CC_)
+#define PR_ORIGINAL_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x74)
+#define PR_ORIGINAL_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x74)
+#define PR_ORIGINAL_DISPLAY_TO WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_TO_)
+#define PR_RECEIVED_BY_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x75)
+#define PR_RECEIVED_BY_ADDRTYPE_A PROP_TAG(PT_STRING8,0x75)
+#define PR_RECEIVED_BY_ADDRTYPE WINELIB_NAME_AW(PR_RECEIVED_BY_ADDRTYPE_)
+#define PR_RECEIVED_BY_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x76)
+#define PR_RECEIVED_BY_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x76)
+#define PR_RECEIVED_BY_EMAIL_ADDRESS WINELIB_NAME_AW(PR_RECEIVED_BY_EMAIL_ADDRESS_)
+#define PR_RCVD_REPRESENTING_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x77)
+#define PR_RCVD_REPRESENTING_ADDRTYPE_A PROP_TAG(PT_STRING8,0x77)
+#define PR_RCVD_REPRESENTING_ADDRTYPE WINELIB_NAME_AW(PR_RCVD_REPRESENTING_ADDRTYPE_)
+#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x78)
+#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x78)
+#define PR_RCVD_REPRESENTING_EMAIL_ADDRESS WINELIB_NAME_AW(PR_RCVD_REPRESENTING_EMAIL_ADDRESS_)
+#define PR_ORIGINAL_AUTHOR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x79)
+#define PR_ORIGINAL_AUTHOR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x79)
+#define PR_ORIGINAL_AUTHOR_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_ADDRTYPE_)
+#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7A)
+#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7A)
+#define PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_)
+#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x7B)
+#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_A PROP_TAG(PT_STRING8,0x7B)
+#define PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_)
+#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x7C)
+#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x7C)
+#define PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS WINELIB_NAME_AW(PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_)
+#define PR_TRANSPORT_MESSAGE_HEADERS_W PROP_TAG(PT_UNICODE,0x7D)
+#define PR_TRANSPORT_MESSAGE_HEADERS_A PROP_TAG(PT_STRING8,0x7D)
+#define PR_TRANSPORT_MESSAGE_HEADERS WINELIB_NAME_AW(PR_TRANSPORT_MESSAGE_HEADERS_)
+#define PR_DELEGATION PROP_TAG(PT_BINARY,0x7E)
+#define PR_TNEF_CORRELATION_KEY PROP_TAG(PT_BINARY,0x7F)
+#define PR_BODY_W PROP_TAG(PT_UNICODE,0x1000)
+#define PR_BODY_A PROP_TAG(PT_STRING8,0x1000)
+#define PR_BODY WINELIB_NAME_AW(PR_BODY_)
+#define PR_REPORT_TEXT_W PROP_TAG(PT_UNICODE,0x1001)
+#define PR_REPORT_TEXT_A PROP_TAG(PT_STRING8,0x1001)
+#define PR_REPORT_TEXT WINELIB_NAME_AW(PR_REPORT_TEXT_)
+#define PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY PROP_TAG(PT_BINARY,0x1002)
+#define PR_REPORTING_DL_NAME PROP_TAG(PT_BINARY,0x1003)
+#define PR_REPORTING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x1004)
+#define PR_RTF_SYNC_BODY_CRC PROP_TAG(PT_I4,0x1006)
+#define PR_RTF_SYNC_BODY_COUNT PROP_TAG(PT_I4,0x1007)
+#define PR_RTF_SYNC_BODY_TAG_W PROP_TAG(PT_UNICODE,0x1008)
+#define PR_RTF_SYNC_BODY_TAG_A PROP_TAG(PT_STRING8,0x1008)
+#define PR_RTF_SYNC_BODY_TAG WINELIB_NAME_AW(PR_RTF_SYNC_BODY_TAG_)
+#define PR_RTF_COMPRESSED PROP_TAG(PT_BINARY,0x1009)
+#define PR_RTF_SYNC_PREFIX_COUNT PROP_TAG(PT_I4,0x1010)
+#define PR_RTF_SYNC_TRAILING_COUNT PROP_TAG(PT_I4,0x1011)
+#define PR_ORIGINALLY_INTENDED_RECIP_ENTRYID PROP_TAG(PT_BINARY,0x1012)
+#define PR_CONTENT_INTEGRITY_CHECK PROP_TAG(PT_BINARY,0x0C00)
+#define PR_EXPLICIT_CONVERSION PROP_TAG(PT_I4,0x0C01)
+#define PR_IPM_RETURN_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C02)
+#define PR_MESSAGE_TOKEN PROP_TAG(PT_BINARY,0x0C03)
+#define PR_NDR_REASON_CODE PROP_TAG(PT_I4,0x0C04)
+#define PR_NDR_DIAG_CODE PROP_TAG(PT_I4,0x0C05)
+#define PR_NON_RECEIPT_NOTIFICATION_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C06)
+#define PR_DELIVERY_POINT PROP_TAG(PT_I4,0x0C07)
+#define PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C08)
+#define PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x0C09)
+#define PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY PROP_TAG(PT_BOOLEAN,0x0C0A)
+#define PR_PHYSICAL_DELIVERY_MODE PROP_TAG(PT_I4,0x0C0B)
+#define PR_PHYSICAL_DELIVERY_REPORT_REQUEST PROP_TAG(PT_I4,0x0C0C)
+#define PR_PHYSICAL_FORWARDING_ADDRESS PROP_TAG(PT_BINARY,0x0C0D)
+#define PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C0E)
+#define PR_PHYSICAL_FORWARDING_PROHIBITED PROP_TAG(PT_BOOLEAN,0x0C0F)
+#define PR_PHYSICAL_RENDITION_ATTRIBUTES PROP_TAG(PT_BINARY,0x0C10)
+#define PR_PROOF_OF_DELIVERY PROP_TAG(PT_BINARY,0x0C11)
+#define PR_PROOF_OF_DELIVERY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C12)
+#define PR_RECIPIENT_CERTIFICATE PROP_TAG(PT_BINARY,0x0C13)
+#define PR_RECIPIENT_NUMBER_FOR_ADVICE_W PROP_TAG(PT_UNICODE,0x0C14)
+#define PR_RECIPIENT_NUMBER_FOR_ADVICE_A PROP_TAG(PT_STRING8,0x0C14)
+#define PR_RECIPIENT_NUMBER_FOR_ADVICE WINELIB_NAME_AW(PR_RECIPIENT_NUMBER_FOR_ADVICE_)
+#define PR_RECIPIENT_TYPE PROP_TAG(PT_I4,0x0C15)
+#define PR_REGISTERED_MAIL_TYPE PROP_TAG(PT_I4,0x0C16)
+#define PR_REPLY_REQUESTED PROP_TAG(PT_BOOLEAN,0x0C17)
+#define PR_REQUESTED_DELIVERY_METHOD PROP_TAG(PT_I4,0x0C18)
+#define PR_SENDER_ENTRYID PROP_TAG(PT_BINARY,0x0C19)
+#define PR_SENDER_NAME_W PROP_TAG(PT_UNICODE,0x0C1A)
+#define PR_SENDER_NAME_A PROP_TAG(PT_STRING8,0x0C1A)
+#define PR_SENDER_NAME WINELIB_NAME_AW(PR_SENDER_NAME_)
+#define PR_SUPPLEMENTARY_INFO_W PROP_TAG(PT_UNICODE,0x0C1B)
+#define PR_SUPPLEMENTARY_INFO_A PROP_TAG(PT_STRING8,0x0C1B)
+#define PR_SUPPLEMENTARY_INFO WINELIB_NAME_AW(PR_SUPPLEMENTARY_INFO_)
+#define PR_TYPE_OF_MTS_USER PROP_TAG(PT_I4,0x0C1C)
+#define PR_SENDER_SEARCH_KEY PROP_TAG(PT_BINARY,0x0C1D)
+#define PR_SENDER_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x0C1E)
+#define PR_SENDER_ADDRTYPE_A PROP_TAG(PT_STRING8,0x0C1E)
+#define PR_SENDER_ADDRTYPE WINELIB_NAME_AW(PR_SENDER_ADDRTYPE_)
+#define PR_SENDER_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x0C1F)
+#define PR_SENDER_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x0C1F)
+#define PR_SENDER_EMAIL_ADDRESS WINELIB_NAME_AW(PR_SENDER_EMAIL_ADDRESS_)
+#define PR_CURRENT_VERSION PROP_TAG(PT_I8,0x0E00)
+#define PR_DELETE_AFTER_SUBMIT PROP_TAG(PT_BOOLEAN,0x0E01)
+#define PR_DISPLAY_BCC_W PROP_TAG(PT_UNICODE,0x0E02)
+#define PR_DISPLAY_BCC_A PROP_TAG(PT_STRING8,0x0E02)
+#define PR_DISPLAY_BCC WINELIB_NAME_AW(PR_DISPLAY_BCC_)
+#define PR_DISPLAY_CC_W PROP_TAG(PT_UNICODE,0x0E03)
+#define PR_DISPLAY_CC_A PROP_TAG(PT_STRING8,0x0E03)
+#define PR_DISPLAY_CC WINELIB_NAME_AW(PR_DISPLAY_CC_)
+#define PR_DISPLAY_TO_W PROP_TAG(PT_UNICODE,0x0E04)
+#define PR_DISPLAY_TO_A PROP_TAG(PT_STRING8,0x0E04)
+#define PR_DISPLAY_TO WINELIB_NAME_AW(PR_DISPLAY_TO_)
+#define PR_PARENT_DISPLAY_W PROP_TAG(PT_UNICODE,0x0E05)
+#define PR_PARENT_DISPLAY_A PROP_TAG(PT_STRING8,0x0E05)
+#define PR_PARENT_DISPLAY WINELIB_NAME_AW(PR_PARENT_DISPLAY_)
+#define PR_MESSAGE_DELIVERY_TIME PROP_TAG(PT_SYSTIME,0x0E06)
+#define PR_MESSAGE_FLAGS PROP_TAG(PT_I4,0x0E07)
+#define PR_MESSAGE_SIZE PROP_TAG(PT_I4,0x0E08)
+#define PR_PARENT_ENTRYID PROP_TAG(PT_BINARY,0x0E09)
+#define PR_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x0E0A)
+#define PR_CORRELATE PROP_TAG(PT_BOOLEAN,0x0E0C)
+#define PR_CORRELATE_MTSID PROP_TAG(PT_BINARY,0x0E0D)
+#define PR_DISCRETE_VALUES PROP_TAG(PT_BOOLEAN,0x0E0E)
+#define PR_RESPONSIBILITY PROP_TAG(PT_BOOLEAN,0x0E0F)
+#define PR_SPOOLER_STATUS PROP_TAG(PT_I4,0x0E10)
+#define PR_TRANSPORT_STATUS PROP_TAG(PT_I4,0x0E11)
+#define PR_MESSAGE_RECIPIENTS PROP_TAG(PT_OBJECT,0x0E12)
+#define PR_MESSAGE_ATTACHMENTS PROP_TAG(PT_OBJECT,0x0E13)
+#define PR_SUBMIT_FLAGS PROP_TAG(PT_I4,0x0E14)
+#define PR_RECIPIENT_STATUS PROP_TAG(PT_I4,0x0E15)
+#define PR_TRANSPORT_KEY PROP_TAG(PT_I4,0x0E16)
+#define PR_MSG_STATUS PROP_TAG(PT_I4,0x0E17)
+#define PR_MESSAGE_DOWNLOAD_TIME PROP_TAG(PT_I4,0x0E18)
+#define PR_CREATION_VERSION PROP_TAG(PT_I8,0x0E19)
+#define PR_MODIFY_VERSION PROP_TAG(PT_I8,0x0E1A)
+#define PR_HASATTACH PROP_TAG(PT_BOOLEAN,0x0E1B)
+#define PR_BODY_CRC PROP_TAG(PT_I4, 0x0E1C)
+#define PR_NORMALIZED_SUBJECT_W PROP_TAG(PT_UNICODE,0x0E1D)
+#define PR_NORMALIZED_SUBJECT_A PROP_TAG(PT_STRING8,0x0E1D)
+#define PR_NORMALIZED_SUBJECT WINELIB_NAME_AW(PR_NORMALIZED_SUBJECT_)
+#define PR_RTF_IN_SYNC PROP_TAG(PT_BOOLEAN,0x0E1F)
+#define PR_ATTACH_SIZE PROP_TAG(PT_I4,0x0E20)
+#define PR_ATTACH_NUM PROP_TAG(PT_I4,0x0E21)
+#define PR_PREPROCESS PROP_TAG(PT_BOOLEAN,0x0E22)
+#define PR_ORIGINATING_MTA_CERTIFICATE PROP_TAG(PT_BINARY,0x0E25)
+#define PR_PROOF_OF_SUBMISSION PROP_TAG(PT_BINARY,0x0E26)
+/* A unique identifier for editing the properties of a MAPI object */
+#define PR_ENTRYID PROP_TAG(PT_BINARY,0x0FFF)
+/* The type of an object */
+#define PR_OBJECT_TYPE PROP_TAG(PT_I4,0x0FFE)
+#define PR_ICON PROP_TAG(PT_BINARY,0x0FFD)
+#define PR_MINI_ICON PROP_TAG(PT_BINARY,0x0FFC)
+#define PR_STORE_ENTRYID PROP_TAG(PT_BINARY,0x0FFB)
+#define PR_STORE_RECORD_KEY PROP_TAG(PT_BINARY,0x0FFA)
+/* Binary identifier for an individual object */
+#define PR_RECORD_KEY PROP_TAG(PT_BINARY,0x0FF9)
+#define PR_MAPPING_SIGNATURE PROP_TAG(PT_BINARY,0x0FF8)
+#define PR_ACCESS_LEVEL PROP_TAG(PT_I4,0x0FF7)
+/* The primary key of a column in a table */
+#define PR_INSTANCE_KEY PROP_TAG(PT_BINARY,0x0FF6)
+#define PR_ROW_TYPE PROP_TAG(PT_I4,0x0FF5)
+#define PR_ACCESS PROP_TAG(PT_I4,0x0FF4)
+#define PR_ROWID PROP_TAG(PT_I4,0x3000)
+/* The name to display for a given MAPI object */
+#define PR_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3001)
+#define PR_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3001)
+#define PR_DISPLAY_NAME WINELIB_NAME_AW(PR_DISPLAY_NAME_)
+#define PR_ADDRTYPE_W PROP_TAG(PT_UNICODE,0x3002)
+#define PR_ADDRTYPE_A PROP_TAG(PT_STRING8,0x3002)
+#define PR_ADDRTYPE WINELIB_NAME_AW(PR_ADDRTYPE_)
+/* An email address */
+#define PR_EMAIL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3003)
+#define PR_EMAIL_ADDRESS_A PROP_TAG(PT_STRING8,0x3003)
+#define PR_EMAIL_ADDRESS WINELIB_NAME_AW(PR_EMAIL_ADDRESS_)
+/* A comment field */
+#define PR_COMMENT_W PROP_TAG(PT_UNICODE,0x3004)
+#define PR_COMMENT_A PROP_TAG(PT_STRING8,0x3004)
+#define PR_COMMENT WINELIB_NAME_AW(PR_COMMENT_)
+#define PR_DEPTH PROP_TAG(PT_I4,0x3005)
+/* Provider-defined display name for a service provider */
+#define PR_PROVIDER_DISPLAY_W PROP_TAG(PT_UNICODE,0x3006)
+#define PR_PROVIDER_DISPLAY_A PROP_TAG(PT_STRING8,0x3006)
+#define PR_PROVIDER_DISPLAY WINELIB_NAME_AW(PR_PROVIDER_DISPLAY_)
+/* The time an object was created */
+#define PR_CREATION_TIME PROP_TAG(PT_SYSTIME,0x3007)
+/* The time an object was last modified */
+#define PR_LAST_MODIFICATION_TIME PROP_TAG(PT_SYSTIME,0x3008)
+/* Flags describing a service provider, message service, or status object */
+#define PR_RESOURCE_FLAGS PROP_TAG(PT_I4,0x3009)
+/* The name of a provider dll, minus any "32" suffix and ".dll" */
+#define PR_PROVIDER_DLL_NAME_W PROP_TAG(PT_UNICODE,0x300A)
+#define PR_PROVIDER_DLL_NAME_A PROP_TAG(PT_STRING8,0x300A)
+#define PR_PROVIDER_DLL_NAME WINELIB_NAME_AW(PR_PROVIDER_DLL_NAME_)
+#define PR_SEARCH_KEY PROP_TAG(PT_BINARY,0x300B)
+#define PR_PROVIDER_UID PROP_TAG(PT_BINARY,0x300C)
+#define PR_PROVIDER_ORDINAL PROP_TAG(PT_I4,0x300D)
+#define PR_FORM_VERSION_W PROP_TAG(PT_UNICODE,0x3301)
+#define PR_FORM_VERSION_A PROP_TAG(PT_STRING8,0x3301)
+#define PR_FORM_VERSION WINELIB_NAME_AW(PR_FORM_VERSION_)
+#define PR_FORM_CLSID PROP_TAG(PT_CLSID,0x3302)
+#define PR_FORM_CONTACT_NAME_W PROP_TAG(PT_UNICODE,0x3303)
+#define PR_FORM_CONTACT_NAME_A PROP_TAG(PT_STRING8,0x3303)
+#define PR_FORM_CONTACT_NAME WINELIB_NAME_AW(PR_FORM_CONTACT_NAME_)
+#define PR_FORM_CATEGORY_W PROP_TAG(PT_UNICODE,0x3304)
+#define PR_FORM_CATEGORY_A PROP_TAG(PT_STRING8,0x3304)
+#define PR_FORM_CATEGORY WINELIB_NAME_AW(PR_FORM_CATEGORY_)
+#define PR_FORM_CATEGORY_SUB_W PROP_TAG(PT_UNICODE,0x3305)
+#define PR_FORM_CATEGORY_SUB_A PROP_TAG(PT_STRING8,0x3305)
+#define PR_FORM_CATEGORY_SUB WINELIB_NAME_AW(PR_FORM_CATEGORY_SUB_)
+#define PR_FORM_HOST_MAP PROP_TAG(PT_MV_LONG,0x3306)
+#define PR_FORM_HIDDEN PROP_TAG(PT_BOOLEAN,0x3307)
+#define PR_FORM_DESIGNER_NAME_W PROP_TAG(PT_UNICODE,0x3308)
+#define PR_FORM_DESIGNER_NAME_A PROP_TAG(PT_STRING8,0x3308)
+#define PR_FORM_DESIGNER_NAME WINELIB_NAME_AW(PR_FORM_DESIGNER_NAME_)
+#define PR_FORM_DESIGNER_GUID PROP_TAG(PT_CLSID,0x3309)
+#define PR_FORM_MESSAGE_BEHAVIOR PROP_TAG(PT_I4,0x330A)
+/* Is this row the default message store? */
+#define PR_DEFAULT_STORE PROP_TAG(PT_BOOLEAN,0x3400)
+#define PR_STORE_SUPPORT_MASK PROP_TAG(PT_I4,0x340D)
+#define PR_STORE_STATE PROP_TAG(PT_I4,0x340E)
+#define PR_IPM_SUBTREE_SEARCH_KEY PROP_TAG(PT_BINARY,0x3410)
+#define PR_IPM_OUTBOX_SEARCH_KEY PROP_TAG(PT_BINARY,0x3411)
+#define PR_IPM_WASTEBASKET_SEARCH_KEY PROP_TAG(PT_BINARY,0x3412)
+#define PR_IPM_SENTMAIL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3413)
+/* Provider-defined message store type */
+#define PR_MDB_PROVIDER PROP_TAG(PT_BINARY,0x3414)
+#define PR_RECEIVE_FOLDER_SETTINGS PROP_TAG(PT_OBJECT,0x3415)
+#define PR_VALID_FOLDER_MASK PROP_TAG(PT_I4,0x35DF)
+#define PR_IPM_SUBTREE_ENTRYID PROP_TAG(PT_BINARY,0x35E0)
+#define PR_IPM_OUTBOX_ENTRYID PROP_TAG(PT_BINARY,0x35E2)
+#define PR_IPM_WASTEBASKET_ENTRYID PROP_TAG(PT_BINARY,0x35E3)
+#define PR_IPM_SENTMAIL_ENTRYID PROP_TAG(PT_BINARY,0x35E4)
+#define PR_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E5)
+#define PR_COMMON_VIEWS_ENTRYID PROP_TAG(PT_BINARY,0x35E6)
+#define PR_FINDER_ENTRYID PROP_TAG(PT_BINARY,0x35E7)
+#define PR_CONTAINER_FLAGS PROP_TAG(PT_I4,0x3600)
+#define PR_FOLDER_TYPE PROP_TAG(PT_I4,0x3601)
+#define PR_CONTENT_COUNT PROP_TAG(PT_I4,0x3602)
+#define PR_CONTENT_UNREAD PROP_TAG(PT_I4,0x3603)
+#define PR_CREATE_TEMPLATES PROP_TAG(PT_OBJECT,0x3604)
+#define PR_DETAILS_TABLE PROP_TAG(PT_OBJECT,0x3605)
+#define PR_SEARCH PROP_TAG(PT_OBJECT,0x3607)
+#define PR_SELECTABLE PROP_TAG(PT_BOOLEAN,0x3609)
+#define PR_SUBFOLDERS PROP_TAG(PT_BOOLEAN,0x360A)
+#define PR_STATUS PROP_TAG(PT_I4,0x360B)
+#define PR_ANR_W PROP_TAG(PT_UNICODE,0x360C)
+#define PR_ANR_A PROP_TAG(PT_STRING8,0x360C)
+#define PR_ANR WINELIB_NAME_AW(PR_ANR_)
+#define PR_CONTENTS_SORT_ORDER PROP_TAG(PT_MV_LONG,0x360D)
+#define PR_CONTAINER_HIERARCHY PROP_TAG(PT_OBJECT,0x360E)
+#define PR_CONTAINER_CONTENTS PROP_TAG(PT_OBJECT,0x360F)
+#define PR_FOLDER_ASSOCIATED_CONTENTS PROP_TAG(PT_OBJECT,0x3610)
+#define PR_DEF_CREATE_DL PROP_TAG(PT_BINARY,0x3611)
+#define PR_DEF_CREATE_MAILUSER PROP_TAG(PT_BINARY,0x3612)
+#define PR_CONTAINER_CLASS_W PROP_TAG(PT_UNICODE,0x3613)
+#define PR_CONTAINER_CLASS_A PROP_TAG(PT_STRING8,0x3613)
+#define PR_CONTAINER_CLASS WINELIB_NAME_AW(PR_CONTAINER_CLASS_)
+#define PR_CONTAINER_MODIFY_VERSION PROP_TAG(PT_I8,0x3614)
+#define PR_AB_PROVIDER_ID PROP_TAG(PT_BINARY,0x3615)
+#define PR_DEFAULT_VIEW_ENTRYID PROP_TAG(PT_BINARY,0x3616)
+#define PR_ASSOC_CONTENT_COUNT PROP_TAG(PT_I4,0x3617)
+#define PR_IPM_DRAFTS_ENTRYID PROP_TAG(PT_BINARY,0x36D7)
+#define PR_ATTACHMENT_X400_PARAMETERS PROP_TAG(PT_BINARY,0x3700)
+#define PR_ATTACH_DATA_OBJ PROP_TAG(PT_OBJECT,0x3701)
+#define PR_ATTACH_DATA_BIN PROP_TAG(PT_BINARY,0x3701)
+#define PR_ATTACH_ENCODING PROP_TAG(PT_BINARY,0x3702)
+#define PR_ATTACH_EXTENSION_W PROP_TAG(PT_UNICODE,0x3703)
+#define PR_ATTACH_EXTENSION_A PROP_TAG(PT_STRING8,0x3703)
+#define PR_ATTACH_EXTENSION WINELIB_NAME_AW(PR_ATTACH_EXTENSION_)
+#define PR_ATTACH_FILENAME_W PROP_TAG(PT_UNICODE,0x3704)
+#define PR_ATTACH_FILENAME_A PROP_TAG(PT_STRING8,0x3704)
+#define PR_ATTACH_FILENAME WINELIB_NAME_AW(PR_ATTACH_FILENAME_)
+#define PR_ATTACH_METHOD PROP_TAG(PT_I4,0x3705)
+#define PR_ATTACH_LONG_FILENAME_W PROP_TAG(PT_UNICODE,0x3707)
+#define PR_ATTACH_LONG_FILENAME_A PROP_TAG(PT_STRING8,0x3707)
+#define PR_ATTACH_LONG_FILENAME WINELIB_NAME_AW(PR_ATTACH_LONG_FILENAME_)
+#define PR_ATTACH_PATHNAME_W PROP_TAG(PT_UNICODE,0x3708)
+#define PR_ATTACH_PATHNAME_A PROP_TAG(PT_STRING8,0x3708)
+#define PR_ATTACH_PATHNAME WINELIB_NAME_AW(PR_ATTACH_PATHNAME_)
+#define PR_ATTACH_RENDERING PROP_TAG(PT_BINARY, 0x3709)
+#define PR_ATTACH_TAG PROP_TAG(PT_BINARY,0x370A)
+#define PR_RENDERING_POSITION PROP_TAG(PT_I4,0x370B)
+#define PR_ATTACH_TRANSPORT_NAME_W PROP_TAG(PT_UNICODE,0x370C)
+#define PR_ATTACH_TRANSPORT_NAME_A PROP_TAG(PT_STRING8,0x370C)
+#define PR_ATTACH_TRANSPORT_NAME WINELIB_NAME_AW(PR_ATTACH_TRANSPORT_NAME_)
+#define PR_ATTACH_LONG_PATHNAME_W PROP_TAG(PT_UNICODE,0x370D)
+#define PR_ATTACH_LONG_PATHNAME_A PROP_TAG(PT_STRING8,0x370D)
+#define PR_ATTACH_LONG_PATHNAME WINELIB_NAME_AW(PR_ATTACH_LONG_PATHNAME_)
+#define PR_ATTACH_MIME_TAG_W PROP_TAG(PT_UNICODE,0x370E)
+#define PR_ATTACH_MIME_TAG_A PROP_TAG(PT_STRING8,0x370E)
+#define PR_ATTACH_MIME_TAG WINELIB_NAME_AW(PR_ATTACH_MIME_TAG_)
+#define PR_ATTACH_ADDITIONAL_INFO PROP_TAG(PT_BINARY,0x370F)
+#define PR_DISPLAY_TYPE PROP_TAG(PT_I4,0x3900)
+#define PR_TEMPLATEID PROP_TAG(PT_BINARY,0x3902)
+#define PR_PRIMARY_CAPABILITY PROP_TAG(PT_BINARY,0x3904)
+#define PR_7BIT_DISPLAY_NAME PROP_TAG(PT_STRING8,0x39FF)
+#define PR_ACCOUNT_W PROP_TAG(PT_UNICODE,0x3A00)
+#define PR_ACCOUNT_A PROP_TAG(PT_STRING8,0x3A00)
+#define PR_ACCOUNT WINELIB_NAME_AW(PR_ACCOUNT_)
+#define PR_ALTERNATE_RECIPIENT PROP_TAG(PT_BINARY,0x3A01)
+#define PR_CALLBACK_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A02)
+#define PR_CALLBACK_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A02)
+#define PR_CALLBACK_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_CALLBACK_TELEPHONE_NUMBER_)
+#define PR_CONVERSION_PROHIBITED PROP_TAG(PT_BOOLEAN,0x3A03)
+#define PR_DISCLOSE_RECIPIENTS PROP_TAG(PT_BOOLEAN,0x3A04)
+#define PR_GENERATION_W PROP_TAG(PT_UNICODE,0x3A05)
+#define PR_GENERATION_A PROP_TAG(PT_STRING8,0x3A05)
+#define PR_GENERATION WINELIB_NAME_AW(PR_GENERATION_)
+#define PR_GIVEN_NAME_W PROP_TAG(PT_UNICODE,0x3A06)
+#define PR_GIVEN_NAME_A PROP_TAG(PT_STRING8,0x3A06)
+#define PR_GIVEN_NAME WINELIB_NAME_AW(PR_GIVEN_NAME_)
+#define PR_GOVERNMENT_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A07)
+#define PR_GOVERNMENT_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A07)
+#define PR_GOVERNMENT_ID_NUMBER WINELIB_NAME_AW(PR_GOVERNMENT_ID_NUMBER_)
+#define PR_BUSINESS_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A08)
+#define PR_BUSINESS_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A08)
+#define PR_BUSINESS_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_BUSINESS_TELEPHONE_NUMBER_)
+#define PR_OFFICE_TELEPHONE_NUMBER_W PR_BUSINESS_TELEPHONE_NUMBER_W
+#define PR_OFFICE_TELEPHONE_NUMBER_A PR_BUSINESS_TELEPHONE_NUMBER_A
+#define PR_OFFICE_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_OFFICE_TELEPHONE_NUMBER_)
+#define PR_HOME_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A09)
+#define PR_HOME_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A09)
+#define PR_HOME_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_HOME_TELEPHONE_NUMBER_)
+#define PR_INITIALS_W PROP_TAG(PT_UNICODE,0x3A0A)
+#define PR_INITIALS_A PROP_TAG(PT_STRING8,0x3A0A)
+#define PR_INITIALS WINELIB_NAME_AW(PR_INITIALS_)
+#define PR_KEYWORD_W PROP_TAG(PT_UNICODE,0x3A0B)
+#define PR_KEYWORD_A PROP_TAG(PT_STRING8,0x3A0B)
+#define PR_KEYWORD WINELIB_NAME_AW(PR_KEYWORD_)
+#define PR_LANGUAGE_W PROP_TAG(PT_UNICODE,0x3A0C)
+#define PR_LANGUAGE_A PROP_TAG(PT_STRING8,0x3A0C)
+#define PR_LANGUAGE WINELIB_NAME_AW(PR_LANGUAGE_)
+#define PR_LOCATION_W PROP_TAG(PT_UNICODE,0x3A0D)
+#define PR_LOCATION_A PROP_TAG(PT_STRING8,0x3A0D)
+#define PR_LOCATION WINELIB_NAME_AW(PR_LOCATION_)
+#define PR_MAIL_PERMISSION PROP_TAG(PT_BOOLEAN,0x3A0E)
+#define PR_MHS_COMMON_NAME_W PROP_TAG(PT_UNICODE,0x3A0F)
+#define PR_MHS_COMMON_NAME_A PROP_TAG(PT_STRING8,0x3A0F)
+#define PR_MHS_COMMON_NAME WINELIB_NAME_AW(PR_MHS_COMMON_NAME_)
+#define PR_ORGANIZATIONAL_ID_NUMBER_W PROP_TAG(PT_UNICODE,0x3A10)
+#define PR_ORGANIZATIONAL_ID_NUMBER_A PROP_TAG(PT_STRING8,0x3A10)
+#define PR_ORGANIZATIONAL_ID_NUMBER WINELIB_NAME_AW(PR_ORGANIZATIONAL_ID_NUMBER_)
+#define PR_SURNAME_W PROP_TAG(PT_UNICODE,0x3A11)
+#define PR_SURNAME_A PROP_TAG(PT_STRING8,0x3A11)
+#define PR_SURNAME WINELIB_NAME_AW(PR_SURNAME_)
+#define PR_ORIGINAL_ENTRYID PROP_TAG(PT_BINARY,0x3A12)
+#define PR_ORIGINAL_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A13)
+#define PR_ORIGINAL_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A13)
+#define PR_ORIGINAL_DISPLAY_NAME WINELIB_NAME_AW(PR_ORIGINAL_DISPLAY_NAME_)
+#define PR_ORIGINAL_SEARCH_KEY PROP_TAG(PT_BINARY,0x3A14)
+#define PR_POSTAL_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A15)
+#define PR_POSTAL_ADDRESS_A PROP_TAG(PT_STRING8,0x3A15)
+#define PR_POSTAL_ADDRESS WINELIB_NAME_AW(PR_POSTAL_ADDRESS_)
+#define PR_COMPANY_NAME_W PROP_TAG(PT_UNICODE,0x3A16)
+#define PR_COMPANY_NAME_A PROP_TAG(PT_STRING8,0x3A16)
+#define PR_COMPANY_NAME WINELIB_NAME_AW(PR_COMPANY_NAME_)
+#define PR_TITLE_W PROP_TAG(PT_UNICODE,0x3A17)
+#define PR_TITLE_A PROP_TAG(PT_STRING8,0x3A17)
+#define PR_TITLE WINELIB_NAME_AW(PR_TITLE_)
+#define PR_DEPARTMENT_NAME_W PROP_TAG(PT_UNICODE,0x3A18)
+#define PR_DEPARTMENT_NAME_A PROP_TAG(PT_STRING8,0x3A18)
+#define PR_DEPARTMENT_NAME WINELIB_NAME_AW(PR_DEPARTMENT_NAME_)
+#define PR_OFFICE_LOCATION_W PROP_TAG(PT_UNICODE,0x3A19)
+#define PR_OFFICE_LOCATION_A PROP_TAG(PT_STRING8,0x3A19)
+#define PR_OFFICE_LOCATION WINELIB_NAME_AW(PR_OFFICE_LOCATION_)
+#define PR_PRIMARY_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1A)
+#define PR_PRIMARY_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1A)
+#define PR_PRIMARY_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_PRIMARY_TELEPHONE_NUMBER_)
+#define PR_BUSINESS2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1B)
+#define PR_BUSINESS2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1B)
+#define PR_BUSINESS2_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_BUSINESS2_TELEPHONE_NUMBER_)
+#define PR_OFFICE2_TELEPHONE_NUMBER_W PR_BUSINESS2_TELEPHONE_NUMBER_W
+#define PR_OFFICE2_TELEPHONE_NUMBER_A PR_BUSINESS2_TELEPHONE_NUMBER_A
+#define PR_OFFICE2_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_OFFICE2_TELEPHONE_NUMBER_)
+#define PR_MOBILE_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1C)
+#define PR_MOBILE_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1C)
+#define PR_MOBILE_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_MOBILE_TELEPHONE_NUMBER_)
+#define PR_CELLULAR_TELEPHONE_NUMBER_W PR_MOBILE_TELEPHONE_NUMBER_W
+#define PR_CELLULAR_TELEPHONE_NUMBER_A PR_MOBILE_TELEPHONE_NUMBER_A
+#define PR_CELLULAR_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_CELLULAR_TELEPHONE_NUMBER_)
+#define PR_RADIO_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1D)
+#define PR_RADIO_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1D)
+#define PR_RADIO_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_RADIO_TELEPHONE_NUMBER_)
+#define PR_CAR_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1E)
+#define PR_CAR_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1E)
+#define PR_CAR_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_CAR_TELEPHONE_NUMBER_)
+#define PR_OTHER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A1F)
+#define PR_OTHER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A1F)
+#define PR_OTHER_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_OTHER_TELEPHONE_NUMBER_)
+#define PR_TRANSMITABLE_DISPLAY_NAME_W PROP_TAG(PT_UNICODE,0x3A20)
+#define PR_TRANSMITABLE_DISPLAY_NAME_A PROP_TAG(PT_STRING8,0x3A20)
+#define PR_TRANSMITABLE_DISPLAY_NAME WINELIB_NAME_AW(PR_TRANSMITABLE_DISPLAY_NAME_)
+#define PR_PAGER_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A21)
+#define PR_PAGER_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A21)
+#define PR_PAGER_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_PAGER_TELEPHONE_NUMBER_)
+#define PR_BEEPER_TELEPHONE_NUMBER_W PR_PAGER_TELEPHONE_NUMBER_W
+#define PR_BEEPER_TELEPHONE_NUMBER_A PR_PAGER_TELEPHONE_NUMBER_A
+#define PR_BEEPER_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_BEEPER_TELEPHONE_NUMBER_)
+#define PR_USER_CERTIFICATE PROP_TAG(PT_BINARY,0x3A22)
+#define PR_PRIMARY_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A23)
+#define PR_PRIMARY_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A23)
+#define PR_PRIMARY_FAX_NUMBER WINELIB_NAME_AW(PR_PRIMARY_FAX_NUMBER_)
+#define PR_BUSINESS_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A24)
+#define PR_BUSINESS_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A24)
+#define PR_BUSINESS_FAX_NUMBER WINELIB_NAME_AW(PR_BUSINESS_FAX_NUMBER_)
+#define PR_HOME_FAX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A25)
+#define PR_HOME_FAX_NUMBER_A PROP_TAG(PT_STRING8,0x3A25)
+#define PR_HOME_FAX_NUMBER WINELIB_NAME_AW(PR_HOME_FAX_NUMBER_)
+#define PR_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A26)
+#define PR_COUNTRY_A PROP_TAG(PT_STRING8,0x3A26)
+#define PR_COUNTRY WINELIB_NAME_AW(PR_COUNTRY_)
+#define PR_BUSINESS_ADDRESS_COUNTRY_W PR_COUNTRY_W
+#define PR_BUSINESS_ADDRESS_COUNTRY_A PR_COUNTRY_A
+#define PR_BUSINESS_ADDRESS_COUNTRY WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_COUNTRY_)
+#define PR_LOCALITY_W PROP_TAG(PT_UNICODE,0x3A27)
+#define PR_LOCALITY_A PROP_TAG(PT_STRING8,0x3A27)
+#define PR_LOCALITY WINELIB_NAME_AW(PR_LOCALITY_)
+#define PR_BUSINESS_ADDRESS_CITY_W PR_LOCALITY_W
+#define PR_BUSINESS_ADDRESS_CITY_A PR_LOCALITY_A
+#define PR_BUSINESS_ADDRESS_CITY WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_CITY_)
+#define PR_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A28)
+#define PR_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A28)
+#define PR_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_STATE_OR_PROVINCE_)
+#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_W PR_STATE_OR_PROVINCE_W
+#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_A PR_STATE_OR_PROVINCE_A
+#define PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STATE_OR_PROVINCE_)
+#define PR_STREET_ADDRESS_W PROP_TAG(PT_UNICODE,0x3A29)
+#define PR_STREET_ADDRESS_A PROP_TAG(PT_STRING8,0x3A29)
+#define PR_STREET_ADDRESS WINELIB_NAME_AW(PR_STREET_ADDRESS_)
+#define PR_BUSINESS_ADDRESS_STREET_W PR_STREET_ADDRESS_W
+#define PR_BUSINESS_ADDRESS_STREET_A PR_STREET_ADDRESS_A
+#define PR_BUSINESS_ADDRESS_STREET WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_STREET_)
+#define PR_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A2A)
+#define PR_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A2A)
+#define PR_POSTAL_CODE WINELIB_NAME_AW(PR_POSTAL_CODE_)
+#define PR_BUSINESS_ADDRESS_POSTAL_CODE_W PR_POSTAL_CODE_W
+#define PR_BUSINESS_ADDRESS_POSTAL_CODE_A PR_POSTAL_CODE_A
+#define PR_BUSINESS_ADDRESS_POSTAL_CODE WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POSTAL_CODE_)
+#define PR_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A2B)
+#define PR_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A2B)
+#define PR_POST_OFFICE_BOX WINELIB_NAME_AW(PR_POST_OFFICE_BOX_)
+#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_W PR_POST_OFFICE_BOX_W
+#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_A PR_POST_OFFICE_BOX_A
+#define PR_BUSINESS_ADDRESS_POST_OFFICE_BOX WINELIB_NAME_AW(PR_BUSINESS_ADDRESS_POST_OFFICE_BOX_)
+#define PR_TELEX_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2C)
+#define PR_TELEX_NUMBER_A PROP_TAG(PT_STRING8,0x3A2C)
+#define PR_TELEX_NUMBER WINELIB_NAME_AW(PR_TELEX_NUMBER_)
+#define PR_ISDN_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2D)
+#define PR_ISDN_NUMBER_A PROP_TAG(PT_STRING8,0x3A2D)
+#define PR_ISDN_NUMBER WINELIB_NAME_AW(PR_ISDN_NUMBER_)
+#define PR_ASSISTANT_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2E)
+#define PR_ASSISTANT_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2E)
+#define PR_ASSISTANT_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_ASSISTANT_TELEPHONE_NUMBER_)
+#define PR_HOME2_TELEPHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A2F)
+#define PR_HOME2_TELEPHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A2F)
+#define PR_HOME2_TELEPHONE_NUMBER WINELIB_NAME_AW(PR_HOME2_TELEPHONE_NUMBER_)
+#define PR_ASSISTANT_W PROP_TAG(PT_UNICODE,0x3A30)
+#define PR_ASSISTANT_A PROP_TAG(PT_STRING8,0x3A30)
+#define PR_ASSISTANT WINELIB_NAME_AW(PR_ASSISTANT_)
+#define PR_SEND_RICH_INFO PROP_TAG(PT_BOOLEAN,0x3A40)
+#define PR_WEDDING_ANNIVERSARY PROP_TAG(PT_SYSTIME,0x3A41)
+#define PR_BIRTHDAY PROP_TAG(PT_SYSTIME,0x3A42)
+#define PR_HOBBIES_W PROP_TAG(PT_UNICODE,0x3A43)
+#define PR_HOBBIES_A PROP_TAG(PT_STRING8,0x3A43)
+#define PR_HOBBIES WINELIB_NAME_AW(PR_HOBBIES_)
+#define PR_MIDDLE_NAME_W PROP_TAG(PT_UNICODE,0x3A44)
+#define PR_MIDDLE_NAME_A PROP_TAG(PT_STRING8,0x3A44)
+#define PR_MIDDLE_NAME WINELIB_NAME_AW(PR_MIDDLE_NAME_)
+#define PR_DISPLAY_NAME_PREFIX_W PROP_TAG(PT_UNICODE,0x3A45)
+#define PR_DISPLAY_NAME_PREFIX_A PROP_TAG(PT_STRING8,0x3A45)
+#define PR_DISPLAY_NAME_PREFIX WINELIB_NAME_AW(PR_DISPLAY_NAME_PREFIX_)
+#define PR_PROFESSION_W PROP_TAG(PT_UNICODE,0x3A46)
+#define PR_PROFESSION_A PROP_TAG(PT_STRING8,0x3A46)
+#define PR_PROFESSION WINELIB_NAME_AW(PR_PROFESSION_)
+#define PR_PREFERRED_BY_NAME_W PROP_TAG(PT_UNICODE,0x3A47)
+#define PR_PREFERRED_BY_NAME_A PROP_TAG(PT_STRING8,0x3A47)
+#define PR_PREFERRED_BY_NAME WINELIB_NAME_AW(PR_PREFERRED_BY_NAME_)
+#define PR_SPOUSE_NAME_W PROP_TAG(PT_UNICODE,0x3A48)
+#define PR_SPOUSE_NAME_A PROP_TAG(PT_STRING8,0x3A48)
+#define PR_SPOUSE_NAME WINELIB_NAME_AW(PR_SPOUSE_NAME_)
+#define PR_COMPUTER_NETWORK_NAME_W PROP_TAG(PT_UNICODE,0x3A49)
+#define PR_COMPUTER_NETWORK_NAME_A PROP_TAG(PT_STRING8,0x3A49)
+#define PR_COMPUTER_NETWORK_NAME WINELIB_NAME_AW(PR_COMPUTER_NETWORK_NAME_)
+#define PR_CUSTOMER_ID_W PROP_TAG(PT_UNICODE,0x3A4A)
+#define PR_CUSTOMER_ID_A PROP_TAG(PT_STRING8,0x3A4A)
+#define PR_CUSTOMER_ID WINELIB_NAME_AW(PR_CUSTOMER_ID_)
+#define PR_TTYTDD_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A4B)
+#define PR_TTYTDD_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A4B)
+#define PR_TTYTDD_PHONE_NUMBER WINELIB_NAME_AW(PR_TTYTDD_PHONE_NUMBER_)
+#define PR_FTP_SITE_W PROP_TAG(PT_UNICODE,0x3A4C)
+#define PR_FTP_SITE_A PROP_TAG(PT_STRING8,0x3A4C)
+#define PR_FTP_SITE WINELIB_NAME_AW(PR_FTP_SITE_)
+#define PR_GENDER PROP_TAG(PT_I2,0x3A4D)
+#define PR_MANAGER_NAME_W PROP_TAG(PT_UNICODE,0x3A4E)
+#define PR_MANAGER_NAME_A PROP_TAG(PT_STRING8,0x3A4E)
+#define PR_MANAGER_NAME WINELIB_NAME_AW(PR_MANAGER_NAME_)
+#define PR_NICKNAME_W PROP_TAG(PT_UNICODE,0x3A4F)
+#define PR_NICKNAME_A PROP_TAG(PT_STRING8,0x3A4F)
+#define PR_NICKNAME WINELIB_NAME_AW(PR_NICKNAME_)
+#define PR_PERSONAL_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A50)
+#define PR_PERSONAL_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A50)
+#define PR_PERSONAL_HOME_PAGE WINELIB_NAME_AW(PR_PERSONAL_HOME_PAGE_)
+#define PR_BUSINESS_HOME_PAGE_W PROP_TAG(PT_UNICODE,0x3A51)
+#define PR_BUSINESS_HOME_PAGE_A PROP_TAG(PT_STRING8,0x3A51)
+#define PR_BUSINESS_HOME_PAGE WINELIB_NAME_AW(PR_BUSINESS_HOME_PAGE_)
+#define PR_CONTACT_VERSION PROP_TAG(PT_CLSID,0x3A52)
+#define PR_CONTACT_ENTRYIDS PROP_TAG(PT_MV_BINARY,0x3A53)
+#define PR_CONTACT_ADDRTYPES_W PROP_TAG(PT_MV_UNICODE,0x3A54)
+#define PR_CONTACT_ADDRTYPES_A PROP_TAG(PT_MV_STRING8,0x3A54)
+#define PR_CONTACT_ADDRTYPES WINELIB_NAME_AW(PR_CONTACT_ADDRTYPES_)
+#define PR_CONTACT_DEFAULT_ADDRESS_INDEX PROP_TAG(PT_I4,0x3A55)
+#define PR_CONTACT_EMAIL_ADDRESSES_W PROP_TAG(PT_MV_UNICODE,0x3A56)
+#define PR_CONTACT_EMAIL_ADDRESSES_A PROP_TAG(PT_MV_STRING8,0x3A56)
+#define PR_CONTACT_EMAIL_ADDRESSES WINELIB_NAME_AW(PR_CONTACT_EMAIL_ADDRESSES_)
+#define PR_COMPANY_MAIN_PHONE_NUMBER_W PROP_TAG(PT_UNICODE,0x3A57)
+#define PR_COMPANY_MAIN_PHONE_NUMBER_A PROP_TAG(PT_STRING8,0x3A57)
+#define PR_COMPANY_MAIN_PHONE_NUMBER WINELIB_NAME_AW(PR_COMPANY_MAIN_PHONE_NUMBER_)
+#define PR_CHILDRENS_NAMES_W PROP_TAG(PT_MV_UNICODE,0x3A58)
+#define PR_CHILDRENS_NAMES_A PROP_TAG(PT_MV_STRING8,0x3A58)
+#define PR_CHILDRENS_NAMES WINELIB_NAME_AW(PR_CHILDRENS_NAMES_)
+#define PR_HOME_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A59)
+#define PR_HOME_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A59)
+#define PR_HOME_ADDRESS_CITY WINELIB_NAME_AW(PR_HOME_ADDRESS_CITY_)
+#define PR_HOME_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A5A)
+#define PR_HOME_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A5A)
+#define PR_HOME_ADDRESS_COUNTRY WINELIB_NAME_AW(PR_HOME_ADDRESS_COUNTRY_)
+#define PR_HOME_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A5B)
+#define PR_HOME_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A5B)
+#define PR_HOME_ADDRESS_POSTAL_CODE WINELIB_NAME_AW(PR_HOME_ADDRESS_POSTAL_CODE_)
+#define PR_HOME_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A5C)
+#define PR_HOME_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A5C)
+#define PR_HOME_ADDRESS_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_HOME_ADDRESS_STATE_OR_PROVINCE_)
+#define PR_HOME_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A5D)
+#define PR_HOME_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A5D)
+#define PR_HOME_ADDRESS_STREET WINELIB_NAME_AW(PR_HOME_ADDRESS_STREET_)
+#define PR_HOME_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A5E)
+#define PR_HOME_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A5E)
+#define PR_HOME_ADDRESS_POST_OFFICE_BOX WINELIB_NAME_AW(PR_HOME_ADDRESS_POST_OFFICE_BOX_)
+#define PR_OTHER_ADDRESS_CITY_W PROP_TAG(PT_UNICODE,0x3A5F)
+#define PR_OTHER_ADDRESS_CITY_A PROP_TAG(PT_STRING8,0x3A5F)
+#define PR_OTHER_ADDRESS_CITY WINELIB_NAME_AW(PR_OTHER_ADDRESS_CITY_)
+#define PR_OTHER_ADDRESS_COUNTRY_W PROP_TAG(PT_UNICODE,0x3A60)
+#define PR_OTHER_ADDRESS_COUNTRY_A PROP_TAG(PT_STRING8,0x3A60)
+#define PR_OTHER_ADDRESS_COUNTRY WINELIB_NAME_AW(PR_OTHER_ADDRESS_COUNTRY_)
+#define PR_OTHER_ADDRESS_POSTAL_CODE_W PROP_TAG(PT_UNICODE,0x3A61)
+#define PR_OTHER_ADDRESS_POSTAL_CODE_A PROP_TAG(PT_STRING8,0x3A61)
+#define PR_OTHER_ADDRESS_POSTAL_CODE WINELIB_NAME_AW(PR_OTHER_ADDRESS_POSTAL_CODE_)
+#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_W PROP_TAG(PT_UNICODE,0x3A62)
+#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE_A PROP_TAG(PT_STRING8,0x3A62)
+#define PR_OTHER_ADDRESS_STATE_OR_PROVINCE WINELIB_NAME_AW(PR_OTHER_ADDRESS_STATE_OR_PROVINCE_)
+#define PR_OTHER_ADDRESS_STREET_W PROP_TAG(PT_UNICODE,0x3A63)
+#define PR_OTHER_ADDRESS_STREET_A PROP_TAG(PT_STRING8,0x3A63)
+#define PR_OTHER_ADDRESS_STREET WINELIB_NAME_AW(PR_OTHER_ADDRESS_STREET_)
+#define PR_OTHER_ADDRESS_POST_OFFICE_BOX_W PROP_TAG(PT_UNICODE,0x3A64)
+#define PR_OTHER_ADDRESS_POST_OFFICE_BOX_A PROP_TAG(PT_STRING8,0x3A64)
+#define PR_OTHER_ADDRESS_POST_OFFICE_BOX WINELIB_NAME_AW(PR_OTHER_ADDRESS_POST_OFFICE_BOX_)
+#define PR_STORE_PROVIDERS PROP_TAG(PT_BINARY,0x3D00)
+#define PR_AB_PROVIDERS PROP_TAG(PT_BINARY,0x3D01)
+#define PR_TRANSPORT_PROVIDERS PROP_TAG(PT_BINARY,0x3D02)
+#define PR_DEFAULT_PROFILE PROP_TAG(PT_BOOLEAN,0x3D04)
+#define PR_AB_SEARCH_PATH PROP_TAG(PT_MV_BINARY,0x3D05)
+#define PR_AB_DEFAULT_DIR PROP_TAG(PT_BINARY,0x3D06)
+#define PR_AB_DEFAULT_PAB PROP_TAG(PT_BINARY,0x3D07)
+#define PR_FILTERING_HOOKS PROP_TAG(PT_BINARY, 0x3D08)
+#define PR_SERVICE_NAME_W PROP_TAG(PT_UNICODE,0x3D09)
+#define PR_SERVICE_NAME_A PROP_TAG(PT_STRING8,0x3D09)
+#define PR_SERVICE_NAME WINELIB_NAME_AW(PR_SERVICE_NAME_)
+#define PR_SERVICE_DLL_NAME_W PROP_TAG(PT_UNICODE,0x3D0A)
+#define PR_SERVICE_DLL_NAME_A PROP_TAG(PT_STRING8,0x3D0A)
+#define PR_SERVICE_DLL_NAME WINELIB_NAME_AW(PR_SERVICE_DLL_NAME_)
+#define PR_SERVICE_ENTRY_NAME PROP_TAG(PT_STRING8,0x3D0B)
+#define PR_SERVICE_UID PROP_TAG(PT_BINARY,0x3D0C)
+#define PR_SERVICE_EXTRA_UIDS PROP_TAG(PT_BINARY,0x3D0D)
+#define PR_SERVICES PROP_TAG(PT_BINARY,0x3D0E)
+#define PR_SERVICE_SUPPORT_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D0F)
+#define PR_SERVICE_SUPPORT_FILES_A PROP_TAG(PT_MV_STRING8,0x3D0F)
+#define PR_SERVICE_SUPPORT_FILES WINELIB_NAME_AW(PR_SERVICE_SUPPORT_FILES_)
+#define PR_SERVICE_DELETE_FILES_W PROP_TAG(PT_MV_UNICODE,0x3D10)
+#define PR_SERVICE_DELETE_FILES_A PROP_TAG(PT_MV_STRING8,0x3D10)
+#define PR_SERVICE_DELETE_FILES WINELIB_NAME_AW(PR_SERVICE_DELETE_FILES_)
+#define PR_AB_SEARCH_PATH_UPDATE PROP_TAG(PT_BINARY,0x3D11)
+#define PR_PROFILE_NAME_A PROP_TAG(PT_STRING8,0x3D12)
+#define PR_PROFILE_NAME_W PROP_TAG(PT_UNICODE,0x3D12)
+#define PR_PROFILE_NAME WINELIB_NAME_AW(PR_PROFILE_NAME_)
+#define PR_IDENTITY_DISPLAY_W PROP_TAG(PT_UNICODE,0x3E00)
+#define PR_IDENTITY_DISPLAY_A PROP_TAG(PT_STRING8,0x3E00)
+#define PR_IDENTITY_DISPLAY WINELIB_NAME_AW(PR_IDENTITY_DISPLAY_)
+#define PR_IDENTITY_ENTRYID PROP_TAG(PT_BINARY,0x3E01)
+#define PR_RESOURCE_METHODS PROP_TAG(PT_I4,0x3E02)
+/* Service provider type */
+#define PR_RESOURCE_TYPE PROP_TAG(PT_I4,0x3E03)
+#define PR_STATUS_CODE PROP_TAG(PT_I4,0x3E04)
+#define PR_IDENTITY_SEARCH_KEY PROP_TAG(PT_BINARY,0x3E05)
+#define PR_OWN_STORE_ENTRYID PROP_TAG(PT_BINARY,0x3E06)
+#define PR_RESOURCE_PATH_W PROP_TAG(PT_UNICODE,0x3E07)
+#define PR_RESOURCE_PATH_A PROP_TAG(PT_STRING8,0x3E07)
+#define PR_RESOURCE_PATH WINELIB_NAME_AW(PR_RESOURCE_PATH_)
+#define PR_STATUS_STRING_W PROP_TAG(PT_UNICODE,0x3E08)
+#define PR_STATUS_STRING_A PROP_TAG(PT_STRING8,0x3E08)
+#define PR_STATUS_STRING WINELIB_NAME_AW(PR_STATUS_STRING_)
+#define PR_X400_DEFERRED_DELIVERY_CANCEL PROP_TAG(PT_BOOLEAN,0x3E09)
+#define PR_HEADER_FOLDER_ENTRYID PROP_TAG(PT_BINARY,0x3E0A)
+#define PR_REMOTE_PROGRESS PROP_TAG(PT_I4,0x3E0B)
+#define PR_REMOTE_PROGRESS_TEXT_W PROP_TAG(PT_UNICODE,0x3E0C)
+#define PR_REMOTE_PROGRESS_TEXT_A PROP_TAG(PT_STRING8,0x3E0C)
+#define PR_REMOTE_PROGRESS_TEXT WINELIB_NAME_AW(PR_REMOTE_PROGRESS_TEXT_)
+#define PR_REMOTE_VALIDATE_OK PROP_TAG(PT_BOOLEAN,0x3E0D)
+#define PR_CONTROL_FLAGS PROP_TAG(PT_I4,0x3F00)
+#define PR_CONTROL_STRUCTURE PROP_TAG(PT_BINARY,0x3F01)
+#define PR_CONTROL_TYPE PROP_TAG(PT_I4,0x3F02)
+#define PR_DELTAX PROP_TAG(PT_I4,0x3F03)
+#define PR_DELTAY PROP_TAG(PT_I4,0x3F04)
+#define PR_XPOS PROP_TAG(PT_I4,0x3F05)
+#define PR_YPOS PROP_TAG(PT_I4,0x3F06)
+#define PR_CONTROL_ID PROP_TAG(PT_BINARY,0x3F07)
+#define PR_INITIAL_DETAILS_PANE PROP_TAG(PT_I4,0x3F08)
+
+#define PROP_ID_SECURE_MIN 0x67F0
+#define PROP_ID_SECURE_MAX 0x67FF
+
+#endif /* MAPITAGS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h
new file mode 100644
index 00000000..7ca005a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapiutil.h
@@ -0,0 +1,286 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIUTIL_H_
+#define MAPIUTIL_H_
+
+#include <mapix.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define TAD_ALL_ROWS 1 /* Delete all rows */
+
+LPMALLOC WINAPI MAPIGetDefaultMalloc(void);
+
+#define SOF_UNIQUEFILENAME 0x80000000U /* Create a unique (temporary) filename */
+
+#if defined (UNICODE) || defined (__WINESRC__)
+typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER,
+ ULONG,LPWSTR,LPWSTR,LPSTREAM*);
+HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER,
+ ULONG,LPWSTR,LPWSTR,LPSTREAM*);
+#else
+typedef HRESULT (WINAPI * LPOPENSTREAMONFILE)(LPALLOCATEBUFFER,LPFREEBUFFER,
+ ULONG,LPSTR,LPSTR,LPSTREAM*);
+HRESULT WINAPI OpenStreamOnFile(LPALLOCATEBUFFER,LPFREEBUFFER,
+ ULONG,LPSTR,LPSTR,LPSTREAM*);
+#endif
+#define OPENSTREAMONFILE "OpenStreamOnFile"
+
+BOOL WINAPI FEqualNames(LPMAPINAMEID,LPMAPINAMEID);
+
+typedef struct IPropData *LPPROPDATA;
+
+#define IPROP_READONLY 0x00001U
+#define IPROP_READWRITE 0x00002U
+#define IPROP_CLEAN 0x10000U
+#define IPROP_DIRTY 0x20000U
+
+SCODE WINAPI CreateIProp(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*,
+ LPVOID,LPPROPDATA*);
+SCODE WINAPI PropCopyMore(LPSPropValue,LPSPropValue,ALLOCATEMORE*,LPVOID);
+ULONG WINAPI UlPropSize(LPSPropValue);
+VOID WINAPI GetInstance(LPSPropValue,LPSPropValue,ULONG);
+BOOL WINAPI FPropContainsProp(LPSPropValue,LPSPropValue,ULONG);
+BOOL WINAPI FPropCompareProp(LPSPropValue,ULONG,LPSPropValue);
+LONG WINAPI LPropCompareProp(LPSPropValue,LPSPropValue);
+
+HRESULT WINAPI HrAddColumns(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,LPFREEBUFFER);
+HRESULT WINAPI HrAddColumnsEx(LPMAPITABLE,LPSPropTagArray,LPALLOCATEBUFFER,
+ LPFREEBUFFER,void (*)(LPSPropTagArray));
+HRESULT WINAPI HrAllocAdviseSink(LPNOTIFCALLBACK,LPVOID,LPMAPIADVISESINK*);
+HRESULT WINAPI HrThisThreadAdviseSink(LPMAPIADVISESINK,LPMAPIADVISESINK*);
+HRESULT WINAPI HrDispatchNotifications (ULONG);
+
+ULONG WINAPI UlAddRef(void*);
+ULONG WINAPI UlRelease(void*);
+
+HRESULT WINAPI HrGetOneProp(LPMAPIPROP,ULONG,LPSPropValue*);
+HRESULT WINAPI HrSetOneProp(LPMAPIPROP,LPSPropValue);
+BOOL WINAPI FPropExists(LPMAPIPROP,ULONG);
+void WINAPI FreePadrlist(LPADRLIST);
+void WINAPI FreeProws(LPSRowSet);
+HRESULT WINAPI HrQueryAllRows(LPMAPITABLE,LPSPropTagArray,LPSRestriction,
+ LPSSortOrderSet,LONG,LPSRowSet*);
+LPSPropValue WINAPI PpropFindProp(LPSPropValue,ULONG,ULONG);
+
+#if defined (UNICODE) || defined (__WINESRC__)
+BOOL WINAPI FBinFromHex(LPWSTR,LPBYTE);
+SCODE WINAPI ScBinFromHexBounded(LPWSTR,LPBYTE,ULONG);
+void WINAPI HexFromBin(LPBYTE,int,LPWSTR);
+ULONG WINAPI UlFromSzHex(LPCWSTR);
+LPWSTR WINAPI SzFindCh(LPCWSTR,USHORT);
+LPWSTR WINAPI SzFindLastCh(LPCWSTR,USHORT);
+LPWSTR WINAPI SzFindSz(LPCWSTR,LPCWSTR);
+UINT WINAPI UFromSz(LPCSTR);
+#else
+BOOL WINAPI FBinFromHex(LPSTR,LPBYTE);
+SCODE WINAPI ScBinFromHexBounded(LPSTR,LPBYTE,ULONG);
+void WINAPI HexFromBin(LPBYTE,int,LPSTR);
+ULONG WINAPI UlFromSzHex(LPCSTR);
+LPSTR WINAPI SzFindCh(LPCSTR,USHORT);
+LPSTR WINAPI SzFindLastCh(LPCSTR,USHORT);
+LPSTR WINAPI SzFindSz(LPCSTR,LPCSTR);
+UINT WINAPI UFromSz(LPCSTR);
+#endif
+
+SCODE WINAPI ScInitMapiUtil(ULONG);
+void WINAPI DeinitMapiUtil(void);
+
+#define szHrDispatchNotifications "_HrDispatchNotifications@4"
+#define szScCreateConversationIndex "_ScCreateConversationIndex@16"
+
+typedef HRESULT (WINAPI DISPATCHNOTIFICATIONS)(ULONG);
+typedef DISPATCHNOTIFICATIONS *LPDISPATCHNOTIFICATIONS;
+typedef SCODE (WINAPI CREATECONVERSATIONINDEX)(ULONG,LPBYTE,ULONG*,LPBYTE*);
+typedef CREATECONVERSATIONINDEX *LPCREATECONVERSATIONINDEX;
+
+typedef struct ITableData *LPTABLEDATA;
+
+typedef void (WINAPI CALLERRELEASE)(ULONG,LPTABLEDATA,LPMAPITABLE);
+
+/*****************************************************************************
+ * ITableData interface
+ *
+ * The underlying table data structure for IMAPITable.
+ */
+#define INTERFACE ITableData
+DECLARE_INTERFACE_(ITableData,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** ITableData methods ***/
+ STDMETHOD(HrGetView)(THIS_ LPSSortOrderSet lpSort, CALLERRELEASE *lpRel,
+ ULONG ulData, LPMAPITABLE *lppTable) PURE;
+ STDMETHOD(HrModifyRow)(THIS_ LPSRow lpRow) PURE;
+ STDMETHOD(HrDeleteRow)(THIS_ LPSPropValue lpKey) PURE;
+ STDMETHOD(HrQueryRow)(THIS_ LPSPropValue lpKey, LPSRow *lppRow, ULONG *lpRowNum) PURE;
+ STDMETHOD(HrEnumRow)(THIS_ ULONG ulRowNum, LPSRow *lppRow) PURE;
+ STDMETHOD(HrNotify)(THIS_ ULONG ulFlags, ULONG cValues, LPSPropValue lpValues) PURE;
+ STDMETHOD(HrInsertRow)(THIS_ ULONG ulRow, LPSRow lpRow) PURE;
+ STDMETHOD(HrModifyRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows) PURE;
+ STDMETHOD(HrDeleteRows)(THIS_ ULONG ulFlags, LPSRowSet lpRows, ULONG *lpCount) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define ITableData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITableData_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITableData_Release(p) (p)->lpVtbl->Release(p)
+ /*** ITableData methods ***/
+#define ITableData_HrGetView(p,a,b,c,d) (p)->lpVtbl->HrGetView(p,a,b,c,d)
+#define ITableData_HrModifyRow(p,a) (p)->lpVtbl->HrModifyRow(p,a)
+#define ITableData_HrDeleteRow(p,a) (p)->lpVtbl->HrDeleteRow(p,a)
+#define ITableData_HrQueryRow(p,a,b,c) (p)->lpVtbl->HrQueryRow(p,a,b,c)
+#define ITableData_HrEnumRow(p,a,b) (p)->lpVtbl->HrEnumRow(p,a,b)
+#define ITableData_HrNotify(p,a,b,c) (p)->lpVtbl->HrNotify(p,a,b,c)
+#define ITableData_HrInsertRow(p,a,b) (p)->lpVtbl->HrInsertRow(p,a,b)
+#define ITableData_HrModifyRows(p,a,b) (p)->lpVtbl->HrModifyRows(p,a,b)
+#define ITableData_HrDeleteRows(p,a,b,c) (p)->lpVtbl->HrDeleteRows(p,a,b,c)
+#endif
+
+SCODE WINAPI CreateTable(LPCIID,ALLOCATEBUFFER*,ALLOCATEMORE*,FREEBUFFER*,
+ LPVOID,ULONG,ULONG,LPSPropTagArray,LPTABLEDATA*);
+
+SCODE WINAPI ScCountNotifications(int,LPNOTIFICATION,ULONG*);
+SCODE WINAPI ScCountProps(int,LPSPropValue,ULONG*);
+SCODE WINAPI ScCopyNotifications(int,LPNOTIFICATION,LPVOID,ULONG*);
+SCODE WINAPI ScCopyProps(int,LPSPropValue,LPVOID,ULONG*);
+SCODE WINAPI ScDupPropset(int,LPSPropValue,LPALLOCATEBUFFER,LPSPropValue*);
+SCODE WINAPI ScRelocNotifications(int,LPNOTIFICATION,LPVOID,LPVOID,ULONG*);
+SCODE WINAPI ScRelocProps(int,LPSPropValue,LPVOID,LPVOID,ULONG*);
+
+LPSPropValue WINAPI LpValFindProp(ULONG,ULONG,LPSPropValue);
+
+static inline FILETIME FtAddFt(FILETIME ftLeft, FILETIME ftRight)
+{
+ LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight;
+ union { FILETIME ft; LONG64 ll; } ftmap;
+ ftmap.ll = *pl + *pr;
+ return ftmap.ft;
+}
+
+static inline FILETIME FtSubFt(FILETIME ftLeft, FILETIME ftRight)
+{
+ LONG64 *pl = (LONG64*)&ftLeft, *pr = (LONG64*)&ftRight;
+ union { FILETIME ft; LONG64 ll; } ftmap;
+ ftmap.ll = *pl - *pr;
+ return ftmap.ft;
+}
+
+static inline FILETIME FtNegFt(FILETIME ftLeft)
+{
+ LONG64 *p = (LONG64*)&ftLeft;
+ union { FILETIME ft; LONG64 ll; } ftmap;
+ ftmap.ll = -*p;
+ return ftmap.ft;
+}
+
+static inline FILETIME FtMulDw(DWORD dwLeft, FILETIME ftRight)
+{
+ LONG64 l = (LONG64)dwLeft, *pr = (LONG64*)&ftRight;
+ union { FILETIME ft; LONG64 ll; } ftmap;
+ ftmap.ll = l * (*pr);
+ return ftmap.ft;
+}
+
+static inline FILETIME FtMulDwDw(DWORD dwLeft, DWORD dwRight)
+{
+ LONG64 l = (LONG64)dwLeft, r = (LONG64)dwRight;
+ union { FILETIME ft; LONG64 ll; } ftmap;
+ ftmap.ll = l * r;
+ return ftmap.ft;
+}
+
+/*****************************************************************************
+ * IPropData interface
+ *
+ */
+#define INTERFACE IPropData
+DECLARE_INTERFACE_(IPropData,IMAPIProp)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPIProp methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hRes, ULONG ulFlags, LPMAPIERROR *lppErr) PURE;
+ STDMETHOD(SaveChanges)(THIS_ ULONG ulFlags) PURE;
+ STDMETHOD(GetProps)(THIS_ LPSPropTagArray lpPropTags, ULONG ulFlags, ULONG *lpValues, LPSPropValue *lppProps) PURE;
+ STDMETHOD(GetPropList)(THIS_ ULONG ulFlags, LPSPropTagArray *lppPropTagArray) PURE;
+ STDMETHOD(OpenProperty)(THIS_ ULONG ulPropTag, LPCIID lpIid, ULONG ulOpts, ULONG ulFlags, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(SetProps)(THIS_ ULONG cValues, LPSPropValue lpProps, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(DeleteProps)(THIS_ LPSPropTagArray lpPropTags, LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyTo)(THIS_ ULONG ciidExclude, LPCIID lpIid, LPSPropTagArray lpProps, ULONG ulParam,
+ LPMAPIPROGRESS lpProgress, LPCIID lpIface,LPVOID lpDest, ULONG ulFlags,
+ LPSPropProblemArray *lppProbs) PURE;
+ STDMETHOD(CopyProps)(THIS_ LPSPropTagArray lpIncludeProps, ULONG ulParam, LPMAPIPROGRESS lpProgress,
+ LPCIID lpIid, LPVOID lpDestObj, ULONG ulFlags, LPSPropProblemArray *lppProblems) PURE;
+ STDMETHOD(GetNamesFromIDs)(THIS_ LPSPropTagArray *lppPropTags, LPGUID lpIid, ULONG ulFlags, ULONG *lpCount,
+ LPMAPINAMEID **lpppNames) PURE;
+ STDMETHOD(GetIDsFromNames)(THIS_ ULONG cPropNames, LPMAPINAMEID *lppNames, ULONG ulFlags, LPSPropTagArray *lppPropTags) PURE;
+ /*** IPropData methods ***/
+ STDMETHOD(HrSetObjAccess)(THIS_ ULONG ulAccess) PURE;
+ STDMETHOD(HrSetPropAccess)(THIS_ LPSPropTagArray lpPropTags, ULONG *lpAccess) PURE;
+ STDMETHOD(HrGetPropAccess)(THIS_ LPSPropTagArray *lppPropTags, ULONG **lppAccess) PURE;
+ STDMETHOD(HrAddObjProps)(THIS_ LPSPropTagArray lppPropTags, LPSPropProblemArray *lppProbs) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IPropData_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IPropData_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IPropData_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPIProp methods ***/
+#define IPropData_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IPropData_SaveChanges(p,a) (p)->lpVtbl->SaveChanges(p,a)
+#define IPropData_GetProps(p,a,b,c,d) (p)->lpVtbl->GetProps(p,a,b,c,d)
+#define IPropData_GetPropList(p,a,b) (p)->lpVtbl->GetPropList(p,a,b)
+#define IPropData_OpenProperty(p,a,b,c,d,e) (p)->lpVtbl->OpenProperty(p,a,b,c,d,e)
+#define IPropData_SetProps(p,a,b,c) (p)->lpVtbl->SetProps(p,a,b,c)
+#define IPropData_DeleteProps(p,a,b) (p)->lpVtbl->DeleteProps(p,a,b)
+#define IPropData_CopyTo(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CopyTo(p,a,b,c,d,e,f,g,h,i)
+#define IPropData_CopyProps(p,a,b,c,d,e,f,g) (p)->lpVtbl->CopyProps(p,a,b,c,d,e,f,g)
+#define IPropData_GetNamesFromIDs(p,a,b,c,d,e) (p)->lpVtbl->GetNamesFromIDs(p,a,b,c,d,e)
+#define IPropData_GetIDsFromNames(p,a,b,c,d) (p)->lpVtbl->GetIDsFromNames(p,a,b,c,d)
+#define IPropData_HrSetObjAccess(p,a) (p)->lpVtbl->HrSetObjAccess(p,a)
+#define IPropData_HrSetPropAccess(p,a,b) (p)->lpVtbl->HrSetPropAccess(p,a,b)
+#define IPropData_HrGetPropAccess(p,a,b) (p)->lpVtbl->HrGetPropAccess(p,a,b)
+#define IPropData_HrAddObjProps(p,a,b) (p)->lpVtbl->HrAddObjProps(p,a,b)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIUTIL_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h
new file mode 100644
index 00000000..eaea3244
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapival.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIVAL_H
+#define MAPIVAL_H
+
+#include <mapiutil.h>
+#include <stddef.h>
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI FBadRglpszW(LPWSTR*,ULONG);
+BOOL WINAPI FBadRowSet(LPSRowSet);
+BOOL WINAPI FBadRglpNameID(LPMAPINAMEID*,ULONG);
+BOOL WINAPI FBadEntryList(LPENTRYLIST);
+ULONG WINAPI FBadRestriction(LPSRestriction);
+ULONG WINAPI FBadPropTag(ULONG);
+ULONG WINAPI FBadRow(LPSRow);
+ULONG WINAPI FBadProp(LPSPropValue);
+ULONG WINAPI FBadSortOrderSet(LPSSortOrderSet);
+ULONG WINAPI FBadColumnSet(LPSPropTagArray);
+
+#define FBadRgPropVal(p,n) FAILED(ScCountProps((n),(p),NULL))
+#define FBadPropVal(p) FBadRgPropVal(1,(p))
+#define FBadAdrList(p) FBadRowSet((LPSRowSet)(p))
+
+#define BAD_STANDARD_OBJ(a,b,c,d) FALSE
+#define FBadUnknown(a) FALSE
+#define FBadQueryInterface(a,b,c) FALSE
+#define FBadAddRef(a) FALSE
+#define FBadRelease(a) FALSE
+#define FBadGetLastError(a,b,c,d) FALSE
+#define FBadSaveChanges(a,b) FALSE
+#define FBadGetProps(a,b,c,d) FALSE
+#define FBadGetPropList(a,b) FALSE
+#define FBadOpenProperty(a,b,c,d,e,f) FALSE
+#define FBadSetProps(a,b,c,d) FALSE
+#define FBadDeleteProps(a,b,c) FALSE
+#define FBadCopyTo(a,b,c,d,e,f,g,h,i,j) FALSE
+#define FBadCopyProps(a,b,c,d,e,f,g,h) FALSE
+#define FBadGetNamesFromIDs(a,b,c,d,e,f) FALSE
+#define FBadGetIDsFromNames(a,b,c,d,e) FALSE
+
+#define ValidateParms(x) do { } while(0)
+#define UlValidateParms(x) do { } while(0)
+#define CheckParms(x) do { } while(0)
+
+#define ValidateParameters1(a,b) do { } while(0)
+#define ValidateParameters2(a,b,c) do { } while(0)
+#define ValidateParameters3(a,b,c,d) do { } while(0)
+#define ValidateParameters4(a,b,c,d,e) do { } while(0)
+#define ValidateParameters5(a,b,c,d,e,f) do { } while(0)
+#define ValidateParameters6(a,b,c,d,e,f,g) do { } while(0)
+#define ValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0)
+#define ValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)
+#define ValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)
+#define ValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)
+#define ValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)
+#define ValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)
+#define ValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)
+#define ValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)
+#define ValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)
+#define ValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)
+
+#define UlValidateParameters1(a,b) do { } while(0)
+#define UlValidateParameters2(a,b,c) do { } while(0)
+#define UlValidateParameters3(a,b,c,d) do { } while(0)
+#define UlValidateParameters4(a,b,c,d,e) do { } while(0)
+#define UlValidateParameters5(a,b,c,d,e,f) do { } while(0)
+#define UlValidateParameters6(a,b,c,d,e,f,g) do { } while(0)
+#define UlValidateParameters7(a,b,c,d,e,f,g,h) do { } while(0)
+#define UlValidateParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)
+#define UlValidateParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)
+#define UlValidateParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)
+#define UlValidateParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)
+#define UlValidateParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)
+#define UlValidateParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)
+#define UlValidateParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)
+#define UlValidateParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)
+#define UlValidateParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)
+
+#define CheckParameters1(a,b) do { } while(0)
+#define CheckParameters2(a,b,c) do { } while(0)
+#define CheckParameters3(a,b,c,d) do { } while(0)
+#define CheckParameters4(a,b,c,d,e) do { } while(0)
+#define CheckParameters5(a,b,c,d,e,f) do { } while(0)
+#define CheckParameters6(a,b,c,d,e,f,g) do { } while(0)
+#define CheckParameters7(a,b,c,d,e,f,g,h) do { } while(0)
+#define CheckParameters8(a,b,c,d,e,f,g,h,i) do { } while(0)
+#define CheckParameters9(a,b,c,d,e,f,g,h,i,j) do { } while(0)
+#define CheckParameters10(a,b,c,d,e,f,g,h,i,j,k) do { } while(0)
+#define CheckParameters11(a,b,c,d,e,f,g,h,i,j,k,l) do { } while(0)
+#define CheckParameters12(a,b,c,d,e,f,g,h,i,j,k,l,m) do { } while(0)
+#define CheckParameters13(a,b,c,d,e,f,g,h,i,j,k,l,m,n) do { } while(0)
+#define CheckParameters14(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) do { } while(0)
+#define CheckParameters15(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) do { } while(0)
+#define CheckParameters16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) do { } while(0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIVAL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h
new file mode 100644
index 00000000..74c970be
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mapix.h
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2004 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef MAPIX_H
+#define MAPIX_H
+
+#include <mapidefs.h>
+#include <mapicode.h>
+#include <mapiguid.h>
+#include <mapitags.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct IProfAdmin IProfAdmin;
+typedef IProfAdmin *LPPROFADMIN;
+typedef struct IMsgServiceAdmin IMsgServiceAdmin;
+typedef IMsgServiceAdmin *LPSERVICEADMIN;
+typedef struct IMAPISession *LPMAPISESSION;
+
+#ifndef WINE_FLAGS_DEFINED
+#define WINE_FLAGS_DEFINED
+typedef ULONG FLAGS;
+#endif
+
+/* Flags for MAPILogon and MAPILogonEx */
+#ifndef MAPI_LOGON_UI
+#define MAPI_LOGON_UI 0x00000001
+#endif
+#ifndef MAPI_NEW_SESSION
+#define MAPI_NEW_SESSION 0x00000002
+#endif
+#define MAPI_ALLOW_OTHERS 0x00000008
+#define MAPI_EXPLICIT_PROFILE 0x00000010
+#ifndef MAPI_EXTENDED
+#define MAPI_EXTENDED 0x00000020
+#endif
+#ifndef MAPI_FORCE_DOWNLOAD
+#define MAPI_FORCE_DOWNLOAD 0x00001000
+#endif
+#ifndef MAPI_PASSWORD_UI
+#define MAPI_PASSWORD_UI 0x00020000
+#endif
+#define MAPI_SERVICE_UI_ALWAYS 0x00002000
+#define MAPI_NO_MAIL 0x00008000
+#define MAPI_NT_SERVICE 0x00010000
+#define MAPI_TIMEOUT_SHORT 0x00100000
+
+#define MAPI_SIMPLE_DEFAULT (MAPI_LOGON_UI|MAPI_ALLOW_OTHERS|MAPI_FORCE_DOWNLOAD)
+#define MAPI_SIMPLE_EXPLICIT (MAPI_NEW_SESSION|MAPI_EXPLICIT_PROFILE|MAPI_FORCE_DOWNLOAD)
+
+typedef struct tagMAPIINIT_0
+{
+ ULONG ulVersion;
+ ULONG ulFlags;
+} MAPIINIT_0, *LPMAPIINIT_0;
+
+typedef MAPIINIT_0 MAPIINIT, *LPMAPIINIT;
+
+#define MAPI_INIT_VERSION 0U
+
+typedef HRESULT (WINAPI MAPIINITIALIZE)(void*);
+typedef MAPIINITIALIZE *LPMAPIINITIALIZE;
+MAPIINITIALIZE MAPIInitialize;
+
+typedef void (WINAPI MAPIUNINITIALIZE)(void);
+typedef MAPIUNINITIALIZE *LPMAPIUNINITIALIZE;
+MAPIUNINITIALIZE MAPIUninitialize;
+
+#if defined (UNICODE) || defined (__WINESRC__)
+typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPWSTR,LPWSTR,ULONG,LPMAPISESSION*);
+#else
+typedef HRESULT (STDMETHODCALLTYPE MAPILOGONEX)(ULONG_PTR,LPSTR,LPSTR,ULONG,LPMAPISESSION *);
+#endif
+typedef MAPILOGONEX *LPMAPILOGONEX;
+MAPILOGONEX MAPILogonEx;
+
+typedef SCODE (WINAPI MAPIALLOCATEBUFFER)(ULONG,LPVOID*);
+typedef MAPIALLOCATEBUFFER *LPMAPIALLOCATEBUFFER;
+MAPIALLOCATEBUFFER MAPIAllocateBuffer;
+
+typedef SCODE (WINAPI MAPIALLOCATEMORE)(ULONG,LPVOID,LPVOID*);
+typedef MAPIALLOCATEMORE *LPMAPIALLOCATEMORE;
+MAPIALLOCATEMORE MAPIAllocateMore;
+
+#ifndef MAPIFREEBUFFER_DEFINED
+#define MAPIFREEBUFFER_DEFINED
+typedef ULONG (WINAPI MAPIFREEBUFFER)(LPVOID);
+typedef MAPIFREEBUFFER *LPMAPIFREEBUFFER;
+MAPIFREEBUFFER MAPIFreeBuffer;
+#endif
+
+typedef HRESULT (WINAPI MAPIADMINPROFILES)(ULONG,LPPROFADMIN*);
+typedef MAPIADMINPROFILES *LPMAPIADMINPROFILES;
+MAPIADMINPROFILES MAPIAdminProfiles;
+
+/*****************************************************************************
+ * IMAPISession interface
+ */
+#define INTERFACE IMAPISession
+DECLARE_INTERFACE_(IMAPISession,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IMAPISession methods ***/
+ STDMETHOD(GetLastError)(THIS_ HRESULT hResult, ULONG ulFlags, LPMAPIERROR *lppMAPIError) PURE;
+ STDMETHOD(GetMsgStoresTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+ STDMETHOD(OpenMsgStore)(THIS_ ULONG_PTR ulUIParam, ULONG cbId,
+ LPENTRYID lpId, LPCIID lpIFace, ULONG ulFlags, LPMDB *lppMDB) PURE;
+ STDMETHOD(OpenAddressBook)(THIS_ ULONG_PTR ulUIParam, LPCIID iid, ULONG ulFlags, LPADRBOOK *lppAdrBook) PURE;
+ STDMETHOD(OpenProfileSection)(THIS_ LPMAPIUID lpUID, LPCIID iid, ULONG ulFlags, LPPROFSECT *lppProf) PURE;
+ STDMETHOD(GetStatusTable)(THIS_ ULONG ulFlags, LPMAPITABLE *lppTable) PURE;
+ STDMETHOD(OpenEntry)(THIS_ ULONG cbId, LPENTRYID lpId, LPCIID iid,
+ ULONG ulFlags, ULONG *lpType, LPUNKNOWN *lppUnk) PURE;
+ STDMETHOD(CompareEntryIDs)(THIS_ ULONG cbLID, LPENTRYID lpLID, ULONG cbRID,
+ LPENTRYID lpRID, ULONG ulFlags, ULONG *lpRes) PURE;
+ STDMETHOD(Advise)(THIS_ ULONG cbId, LPENTRYID lpId, ULONG ulMask,
+ LPMAPIADVISESINK lpSink, ULONG *lpCxn) PURE;
+ STDMETHOD(Unadvise)(THIS_ ULONG ulConnection) PURE;
+ STDMETHOD(MessageOptions)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, LPSTR lpszAddr, LPMESSAGE lpMsg) PURE;
+ STDMETHOD(QueryDefaultMessageOpt)(THIS_ LPSTR lpszAddr, ULONG ulFlags,
+ ULONG *lpcVals, LPSPropValue *lppOpts) PURE;
+ STDMETHOD(EnumAdrTypes)(THIS_ ULONG ulFlags, ULONG *lpcTypes, LPSTR **lpppszTypes) PURE;
+ STDMETHOD(QueryIdentity)(THIS_ ULONG *lpcbId, LPENTRYID *lppEntryID) PURE;
+ STDMETHOD(Logoff)(THIS_ ULONG_PTR ulUIParam, ULONG ulFlags, ULONG ulReserved) PURE;
+ STDMETHOD(SetDefaultStore)(THIS_ ULONG ulFlags, ULONG cbId, LPENTRYID lpId) PURE;
+ STDMETHOD(AdminServices)(THIS_ ULONG ulFlags, LPSERVICEADMIN *lppAdmin) PURE;
+ STDMETHOD(ShowForm)(THIS_ ULONG_PTR ulUIParam, LPMDB lpStore,
+ LPMAPIFOLDER lpParent, LPCIID iid, ULONG ulToken,
+ LPMESSAGE lpSent, ULONG ulFlags, ULONG ulStatus,
+ ULONG ulMsgFlags, ULONG ulAccess, LPSTR lpszClass) PURE;
+ STDMETHOD(PrepareForm)(THIS_ LPCIID lpIFace, LPMESSAGE lpMsg, ULONG *lpToken) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+ /*** IUnknown methods ***/
+#define IMAPISession_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IMAPISession_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IMAPISession_Release(p) (p)->lpVtbl->Release(p)
+ /*** IMAPISession methods ***/
+#define IMAPISession_GetLastError(p,a,b,c) (p)->lpVtbl->GetLastError(p,a,b,c)
+#define IMAPISession_GetMsgStoresTable(p,a,b) (p)->lpVtbl->GetMsgStoresTable(p,a,b)
+#define IMAPISession_OpenMsgStore(p,a,b,c,d,e,f) (p)->lpVtbl->OpenMsgStore(p,a,b,c,d,e,f)
+#define IMAPISession_OpenAddressBook(p,a,b,c,d) (p)->lpVtbl->OpenAddressBook(p,a,b,c,d)
+#define IMAPISession_OpenProfileSection(p,a,b,c,d) (p)->lpVtbl->OpenProfileSection(p,a,b,c,d)
+#define IMAPISession_GetStatusTable(p,a,b) (p)->lpVtbl->GetStatusTable(p,a,b)
+#define IMAPISession_OpenEntry(p,a,b,c,d,e,f) (p)->lpVtbl->OpenEntry(p,a,b,c,d,e,f)
+#define IMAPISession_CompareEntryIDs(p,a,b,c,d,e,f) (p)->lpVtbl->CompareEntryIDs(p,a,b,c,d,e,f)
+#define IMAPISession_Advise(p,a,b,c,d,e) (p)->lpVtbl->Advise(p,a,b,c,d,e)
+#define IMAPISession_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
+#define IMAPISession_MessageOptions(p,a,b,c,d) (p)->lpVtbl->MessageOptions)(p,a,b,c,d)
+#define IMAPISession_QueryDefaultMessageOpt(p,a,b,c,d) \
+ (p)->lpVtbl->QueryDefaultMessageOpt(p,a,b,c,d)
+#define IMAPISession_EnumAdrTypes(p,a,b,c) (p)->lpVtbl->EnumAdrTypes(p,a,b,c)
+#define IMAPISession_QueryIdentity(p,a,b) (p)->lpVtbl->QueryIdentity(p,a,b)
+#define IMAPISession_Logoff(p,a,b,c) (p)->lpVtbl->Logoff(p,a,b,c)
+#define IMAPISession_SetDefaultStore(p,a,b,c) (p)->lpVtbl->SetDefaultStore(p,a,b,c)
+#define IMAPISession_AdminServices(p,a,b) (p)->lpVtbl->AdminServices(p,a,b)
+#define IMAPISession_ShowForm(p,a,b,c,d,e,f,g,h,i,j,k) \
+ (p)->lpVtbl->ShowForm(p,a,b,c,d,e,f,g,h,i,j,k)
+#define IMAPISession_PrepareForm(p,a,b,c) (p)->lpVtbl->PrepareForm(p,a,b,c)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MAPIX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h
new file mode 100644
index 00000000..f767a5cb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mciavi.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2001 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define MCI_MCIAVI_PLAY_WINDOW __MSABI_LONG(0x01000000)
+#define MCI_MCIAVI_PLAY_FULLSCREEN __MSABI_LONG(0x02000000)
+#define MCI_MCIAVI_PLAY_FULLBY2 __MSABI_LONG(0x04000000)
+
+#define MCI_AVI_STATUS_FRAMES_SKIPPED __MSABI_LONG(0x8001)
+
+#define MCI_AVI_STATUS_LAST_PLAY_SPEED __MSABI_LONG(0x8002)
+
+#define MCI_AVI_STATUS_AUDIO_BREAKS __MSABI_LONG(0x8003)
+
+#define MCI_AVI_SETVIDEO_DRAW_PROCEDURE __MSABI_LONG(0x8000)
+
+#define MCI_AVI_SETVIDEO_PALETTE_COLOR __MSABI_LONG(0x8100)
+
+#define MCI_AVI_SETVIDEO_PALETTE_HALFTONE __MSABI_LONG(0x0000FFFF)
+
+#define MCIERR_AVI_OLDAVIFORMAT (MCIERR_CUSTOM_DRIVER_BASE + 100)
+#define MCIERR_AVI_NOTINTERLEAVED (MCIERR_CUSTOM_DRIVER_BASE + 101)
+#define MCIERR_AVI_NODISPDIB (MCIERR_CUSTOM_DRIVER_BASE + 102)
+#define MCIERR_AVI_CANTPLAYFULLSCREEN (MCIERR_CUSTOM_DRIVER_BASE + 103)
+#define MCIERR_AVI_TOOBIGFORVGA (MCIERR_CUSTOM_DRIVER_BASE + 104)
+#define MCIERR_AVI_NOCOMPRESSOR (MCIERR_CUSTOM_DRIVER_BASE + 105)
+#define MCIERR_AVI_DISPLAYERROR (MCIERR_CUSTOM_DRIVER_BASE + 106)
+#define MCIERR_AVI_AUDIOERROR (MCIERR_CUSTOM_DRIVER_BASE + 107)
+#define MCIERR_AVI_BADPALETTE (MCIERR_CUSTOM_DRIVER_BASE + 108)
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h
new file mode 100644
index 00000000..1fcf1200
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mcx.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MCX_H
+#define __WINE_MCX_H
+
+typedef struct tagMODEMDEVCAPS {
+ DWORD dwActualSize;
+ DWORD dwRequiredSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwModemProviderVersion;
+ DWORD dwModemManufacturerOffset;
+ DWORD dwModemManufacturerSize;
+ DWORD dwModemModelOffset;
+ DWORD dwModemModelSize;
+ DWORD dwModemVersionOffset;
+ DWORD dwModemVersionSize;
+ DWORD dwDialOptions;
+ DWORD dwCallSetupFailTimer;
+ DWORD dwInactivityTimeout;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerMode;
+ DWORD dwModemoptions;
+ DWORD dwMaxDTERate;
+ DWORD dwMaxDCERate;
+ BYTE abVariablePortion[1];
+} MODEMDEVCAPS, *LPMODEMDEVCAPS;
+
+typedef struct tagMODEMSETTINGS {
+ DWORD dwActualSize;
+ DWORD dwRequiredSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwCallSetupFailTimer;
+ DWORD dwInactivityTimeout;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerMode;
+ DWORD dwPreferredModemOptions;
+ DWORD dwNegotiatedModemOptions;
+ DWORD dwNegotiatedDCERate;
+ BYTE abVariablePortion[1];
+} MODEMSETTINGS, *LPMODEMSETTINGS;
+
+#endif /* __WINE_MCX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h
new file mode 100644
index 00000000..f4620b41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaerr.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _MEDIAERR_H_
+#define _MEDIAERR_H_
+
+#define DMO_E_INVALIDSTREAMINDEX 0x80040201
+#define DMO_E_INVALIDTYPE 0x80040202
+#define DMO_E_TYPE_NOT_SET 0x80040203
+#define DMO_E_NOTACCEPTING 0x80040204
+#define DMO_E_TYPE_NOT_ACCEPTED 0x80040205
+#define DMO_E_NO_MORE_ITEMS 0x80040206
+
+#endif /* _MEDIAERR_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl
new file mode 100644
index 00000000..299c4234
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mediaobj.idl
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ * Copyright (C) 2004 Vincent Béron
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+
+interface IDMOQualityControl;
+interface IDMOVideoOutputOptimizations;
+interface IMediaBuffer;
+interface IMediaObject;
+interface IMediaObjectInPlace;
+
+typedef struct _DMOMediaType
+{
+ GUID majortype;
+ GUID subtype;
+ BOOL bFixedSizeSamples;
+ BOOL bTemporalCompression;
+ ULONG lSampleSize;
+ GUID formattype;
+ IUnknown *pUnk;
+ ULONG cbFormat;
+ BYTE *pbFormat;
+} DMO_MEDIA_TYPE;
+
+/*****************************************************************************
+ * IEnumDMO interface
+ */
+[
+ object,
+ uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F),
+ pointer_default(unique)
+]
+interface IEnumDMO : IUnknown
+{
+ [local]
+ HRESULT Next(
+ [in] DWORD cItemsToFetch,
+ [out] CLSID *pCLSID,
+ [out] WCHAR **Names,
+ [out] DWORD *pcItemsFetched
+ );
+
+ HRESULT Skip(
+ [in] DWORD cItemsToSkip
+ );
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumDMO **ppEnum
+ );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl
new file mode 100644
index 00000000..ea287c57
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/metahost.idl
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2010 Vincent Povirk for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "ocidl.idl";
+import "mscoree.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef LoadLibrary")
+cpp_quote("#endif")
+
+typedef enum
+{
+ METAHOST_POLICY_HIGHCOMPAT = 0,
+ METAHOST_POLICY_APPLY_UPGRADE_POLICY = 0x08,
+ METAHOST_POLICY_EMULATE_EXE_LAUNCH = 0x10,
+ METAHOST_POLICY_SHOW_ERROR_DIALOG = 0x20,
+ METAHOST_POLICY_USE_PROCESS_IMAGE_PATH = 0x40,
+ METAHOST_POLICY_ENSURE_SKU_SUPPORTED = 0x80
+} METAHOST_POLICY_FLAGS;
+
+typedef enum
+{
+ CLR_DEBUGGING_MANAGED_EVENT_PENDING = 1
+} CLR_DEBUGGING_PROCESS_FLAGS;
+
+typedef struct _CLR_DEBUGGING_VERSION
+{
+ WORD wStructVersion;
+ WORD wMajor;
+ WORD wMinor;
+ WORD wBuild;
+ WORD wRevision;
+} CLR_DEBUGGING_VERSION;
+
+[
+ object,
+ local,
+ uuid(bd39d1d2-ba2f-486a-89b0-b4b0cb466891)
+]
+interface ICLRRuntimeInfo : IUnknown
+{
+ HRESULT GetVersionString(
+ [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+ [in, out] DWORD *pcchBuffer);
+
+ HRESULT GetRuntimeDirectory(
+ [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+ [in, out] DWORD *pcchBuffer);
+
+ HRESULT IsLoaded(
+ [in] HANDLE hndProcess,
+ [out, retval] BOOL *pbLoaded);
+
+ HRESULT LoadErrorString(
+ [in] UINT iResourceID,
+ [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+ [in, out] DWORD *pcchBuffer,
+ [in] LONG iLocaleid);
+
+ HRESULT LoadLibrary(
+ [in] LPCWSTR pwzDllName,
+ [out, retval] HMODULE *phndModule);
+
+ HRESULT GetProcAddress(
+ [in] LPCSTR pszProcName,
+ [out, retval] LPVOID *ppProc);
+
+ HRESULT GetInterface(
+ [in] REFCLSID rclsid,
+ [in] REFIID riid,
+ [out, iid_is(riid), retval] LPVOID *ppUnk);
+
+ HRESULT IsLoadable(
+ [out, retval] BOOL *pbLoadable);
+
+ HRESULT SetDefaultStartupFlags(
+ [in] DWORD dwStartupFlags,
+ [in] LPCWSTR pwzHostConfigFile);
+
+ HRESULT GetDefaultStartupFlags(
+ [out] DWORD *pdwStartupFlags,
+ [out, size_is(*pcchHostConfigFile)] LPWSTR pwzHostConfigFile,
+ [in, out] DWORD *pcchHostConfigFile);
+
+ HRESULT BindAsLegacyV2Runtime();
+
+ HRESULT IsStarted(
+ [out] BOOL *pbStarted,
+ [out] DWORD *pdwStartupFlags);
+};
+
+typedef HRESULT (__stdcall *CallbackThreadSetFnPtr)();
+typedef HRESULT (__stdcall *CallbackThreadUnsetFnPtr)();
+
+typedef void (__stdcall *RuntimeLoadedCallbackFnPtr)(
+ ICLRRuntimeInfo *pRuntimeInfo,
+ CallbackThreadSetFnPtr pfnCallbackThreadSet,
+ CallbackThreadUnsetFnPtr pfnCallbackThreadUnset);
+
+cpp_quote("DEFINE_GUID(CLSID_CLRDebuggingLegacy, 0xDF8395B5,0xA4BA,0x450b,0xA7,0x7C,0xA9,0xA4,0x77,0x62,0xC5,0x20);")
+cpp_quote("DEFINE_GUID(CLSID_CLRMetaHost, 0x9280188d,0x0e8e,0x4867,0xb3,0x0c,0x7f,0xa8,0x38,0x84,0xe8,0xde);")
+
+[
+ object,
+ local,
+ uuid(d332db9e-b9b3-4125-8207-a14884f53216)
+]
+interface ICLRMetaHost : IUnknown
+{
+ HRESULT GetRuntime(
+ [in] LPCWSTR pwzVersion,
+ [in] REFIID iid,
+ [out, iid_is(iid), retval] LPVOID *ppRuntime);
+
+ HRESULT GetVersionFromFile(
+ [in] LPCWSTR pwzFilePath,
+ [out, size_is(*pcchBuffer)] LPWSTR pwzBuffer,
+ [in, out] DWORD *pcchBuffer);
+
+ HRESULT EnumerateInstalledRuntimes(
+ [out, retval] IEnumUnknown **ppEnumerator);
+
+ HRESULT EnumerateLoadedRuntimes(
+ [in] HANDLE hndProcess,
+ [out, retval] IEnumUnknown **ppEnumerator);
+
+ HRESULT RequestRuntimeLoadedNotification(
+ [in] RuntimeLoadedCallbackFnPtr pCallbackFunction);
+
+ HRESULT QueryLegacyV2RuntimeBinding(
+ [in] REFIID riid,
+ [out, iid_is(riid), retval] LPVOID *ppUnk);
+
+ HRESULT ExitProcess(
+ [in] INT32 iExitCode);
+};
+
+[
+ object,
+ local,
+ uuid(e2190695-77b2-492e-8e14-c4b3a7fdd593)
+]
+interface ICLRMetaHostPolicy : IUnknown
+{
+ HRESULT GetRequestedRuntime([in] METAHOST_POLICY_FLAGS dwPolicyFlags,
+ [in] LPCWSTR pwzBinary, [in] IStream *pCfgStream,
+ [in, out] LPWSTR pwzVersion, [in, out] DWORD *pcchVersion,
+ [out] LPWSTR pwzImageVersion, [out, in] DWORD *pcchImageVersion,
+ [out] DWORD *pdwConfigFlags, [in] REFIID riid, [retval, out] LPVOID *ppRuntime);
+}
+
+[
+ uuid(2ebcd49a-1b47-4a61-b13a-4a03701e594b)
+]
+coclass CLRMetaHostPolicy
+{
+ [default] interface ICLRMetaHostPolicy;
+}
+
+[
+ object,
+ local,
+ uuid(3151c08d-4d09-4f9b-8838-2880bf18fe51)
+]
+interface ICLRDebuggingLibraryProvider : IUnknown
+{
+ HRESULT ProvideLibrary([in] const WCHAR *pwszFileName,
+ [in] DWORD dwTimestamp, [in] DWORD dwSizeOfImage,
+ [out] HMODULE *phModule);
+}
+
+[
+ object,
+ local,
+ uuid(d28f3c5a-9634-4206-a509-477552eefb10)
+]
+interface ICLRDebugging : IUnknown
+{
+ HRESULT OpenVirtualProcess([in] ULONG64 moduleBaseAddress,
+ [in] IUnknown *pDataTarget, [in] ICLRDebuggingLibraryProvider *pLibraryProvider,
+ [in] CLR_DEBUGGING_VERSION *pMaxDebuggerSupportedVersion,
+ [in] REFIID riidProcess, [out] IUnknown **ppProcess,
+ [out, in] CLR_DEBUGGING_VERSION *pVersion,
+ [out] CLR_DEBUGGING_PROCESS_FLAGS *pdwFlags);
+
+ HRESULT CanUnloadNow(HMODULE hModule);
+}
+
+cpp_quote("HRESULT WINAPI CLRCreateInstance(REFCLSID clsid, REFIID riid, LPVOID *ppInterface);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h
new file mode 100644
index 00000000..a8517cc9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/midles.h
@@ -0,0 +1,142 @@
+/*
+ * NDR Serialization Services
+ *
+ * Copyright (c) 2007 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MIDLES_H__
+#define __WINE_MIDLES_H__
+
+#include <rpcndr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+ MES_ENCODE,
+ MES_DECODE
+} MIDL_ES_CODE;
+
+typedef enum
+{
+ MES_INCREMENTAL_HANDLE,
+ MES_FIXED_BUFFER_HANDLE,
+ MES_DYNAMIC_BUFFER_HANDLE
+} MIDL_ES_HANDLE_STYLE;
+
+typedef void (__RPC_USER * MIDL_ES_ALLOC)(void *,char **,unsigned int *);
+typedef void (__RPC_USER * MIDL_ES_WRITE)(void *,char *,unsigned int);
+typedef void (__RPC_USER * MIDL_ES_READ)(void *,char **,unsigned int *);
+
+typedef struct _MIDL_ES_MESSAGE
+{
+ MIDL_STUB_MESSAGE StubMsg;
+ MIDL_ES_CODE Operation;
+ void *UserState;
+ ULONG MesVersion : 8;
+ ULONG HandleStyle : 8;
+ ULONG HandleFlags : 8;
+ ULONG Reserve : 8;
+ MIDL_ES_ALLOC Alloc;
+ MIDL_ES_WRITE Write;
+ MIDL_ES_READ Read;
+ unsigned char *Buffer;
+ ULONG BufferSize;
+ unsigned char **pDynBuffer;
+ ULONG *pEncodedSize;
+ RPC_SYNTAX_IDENTIFIER InterfaceId;
+ ULONG ProcNumber;
+ ULONG AlienDataRep;
+ ULONG IncrDataSize;
+ ULONG ByteCount;
+} MIDL_ES_MESSAGE, *PMIDL_ES_MESSAGE;
+
+typedef PMIDL_ES_MESSAGE MIDL_ES_HANDLE;
+
+typedef struct _MIDL_TYPE_PICKLING_INFO
+{
+ ULONG Version;
+ ULONG Flags;
+ UINT_PTR Reserved[3];
+} MIDL_TYPE_PICKLING_INFO, *PMIDL_TYPE_PICKLING_INFO;
+
+RPC_STATUS RPC_ENTRY
+ MesEncodeIncrementalHandleCreate(void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesDecodeIncrementalHandleCreate(void *,MIDL_ES_READ,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesIncrementalHandleReset(handle_t,void *,MIDL_ES_ALLOC,MIDL_ES_WRITE,MIDL_ES_READ,MIDL_ES_CODE);
+
+RPC_STATUS RPC_ENTRY
+ MesEncodeFixedBufferHandleCreate(char *,ULONG,ULONG *,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesEncodeDynBufferHandleCreate(char **,ULONG *,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesDecodeBufferHandleCreate(char *,ULONG,handle_t *);
+RPC_STATUS RPC_ENTRY
+ MesBufferHandleReset(handle_t,ULONG,MIDL_ES_CODE,char **,ULONG,ULONG *);
+
+RPC_STATUS RPC_ENTRY
+ MesHandleFree(handle_t);
+
+RPC_STATUS RPC_ENTRY
+ MesInqProcEncodingId(handle_t,PRPC_SYNTAX_IDENTIFIER,ULONG *);
+
+SIZE_T RPC_ENTRY
+ NdrMesSimpleTypeAlignSize(handle_t);
+void RPC_ENTRY
+ NdrMesSimpleTypeDecode(handle_t,void *,short);
+void RPC_ENTRY
+ NdrMesSimpleTypeEncode(handle_t,const MIDL_STUB_DESC *,const void *,short);
+
+SIZE_T RPC_ENTRY
+ NdrMesTypeAlignSize(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeEncode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);
+
+SIZE_T RPC_ENTRY
+ NdrMesTypeAlignSize2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeEncode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,const void *);
+void RPC_ENTRY
+ NdrMesTypeDecode2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);
+void RPC_ENTRY
+ NdrMesTypeFree2(handle_t,const MIDL_TYPE_PICKLING_INFO *,const MIDL_STUB_DESC *,PFORMAT_STRING,void *);
+
+void RPC_VAR_ENTRY
+ NdrMesProcEncodeDecode(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...);
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+ NdrMesProcEncodeDeocde2(handle_t,const MIDL_STUB_DESC *,PFORMAT_STRING,...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MIDLES_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl
new file mode 100644
index 00000000..97cd1ab4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeinfo.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+[
+ local,
+ object,
+ uuid(f77459a0-bf9a-11cf-ba4e-00c04fd70816),
+ pointer_default(unique)
+]
+interface IMimeInfo : IUnknown
+{
+ typedef [unique] IMimeInfo *LPMIMEINFO;
+
+ HRESULT GetMimeCLSIDMapping( [out] UINT *pcTypes,
+ [out] LPCSTR * *ppszTypes,
+ [out] CLSID * *ppclsID );
+}
+
+cpp_quote("#define SID_IMimeInfo IID_IMimeInfo")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl
new file mode 100644
index 00000000..b69dd269
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl
@@ -0,0 +1,1346 @@
+/*
+ * Copyright 2007 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "objidl.idl";
+import "propidl.idl";
+
+#define DECLARE_HANDLE(name) typedef void *name
+
+interface IMimeMessageCallback;
+interface IMimeEnumAddressTypes;
+interface IMimeMessageParts;
+interface IMimeMessageTree;
+interface IMimeBody;
+interface IMimeEnumProperties;
+
+cpp_quote("DEFINE_GUID(CLSID_IMimeBody, 0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeMessage, 0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IMimeSecurity, 0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+
+cpp_quote("#define MIME_E_REG_CREATE_KEY 0x800cce01")
+cpp_quote("#define MIME_E_REG_QUERY_INFO 0x800cce02")
+cpp_quote("#define MIME_E_INVALID_ENCTYPE 0x800cce03")
+cpp_quote("#define MIME_E_BOUNDARY_MISMATCH 0x800cce04")
+cpp_quote("#define MIME_E_NOT_FOUND 0x800cce05")
+cpp_quote("#define MIME_E_NO_DATA 0x800cce05")
+cpp_quote("#define MIME_E_BUFFER_TOO_SMALL 0x800cce06")
+cpp_quote("#define MIME_E_INVALID_ITEM_FLAGS 0x800cce07")
+cpp_quote("#define MIME_E_ONE_LINE_ITEME 0x800cce08")
+cpp_quote("#define MIME_E_INVALID_HANDLE 0x800cce09")
+cpp_quote("#define MIME_E_CHARSET_TRANSLATE 0x800cce0a")
+cpp_quote("#define MIME_E_NOT_INITIALIZED 0x800cce0b")
+
+cpp_quote("#define MIME_E_INVALID_CHARSET_TYPE 0x800cce31")
+
+cpp_quote("#define MIME_E_INVALID_TEXT_TYPE 0x800cce38")
+
+cpp_quote("#define MIME_E_SECURITY_NOOP 0x800cceb1")
+cpp_quote("#define MIME_S_SECURITY_NOOP 0x000cceb1")
+
+cpp_quote("typedef enum tagMIMEPROPID {")
+cpp_quote(" PID_HDR_NEWSGROUP = 2,")
+cpp_quote(" PID_HDR_NEWSGROUPS = 3,")
+cpp_quote(" PID_HDR_REFS = 4,")
+cpp_quote(" PID_HDR_SUBJECT = 5,")
+cpp_quote(" PID_HDR_FROM = 6,")
+cpp_quote(" PID_HDR_MESSAGEID = 7,")
+cpp_quote(" PID_HDR_RETURNPATH = 8,")
+cpp_quote(" PID_HDR_RR = 9,")
+cpp_quote(" PID_HDR_RETRCPTO = 10,")
+cpp_quote(" PID_HDR_APPARTO = 11,")
+cpp_quote(" PID_HDR_DATE = 12,")
+cpp_quote(" PID_HDR_RECEIVED = 13,")
+cpp_quote(" PID_HDR_REPLYTO = 14,")
+cpp_quote(" PID_HDR_XMAILER = 15,")
+cpp_quote(" PID_HDR_BCC = 16,")
+cpp_quote(" PID_HDR_MIMEVER = 17,")
+cpp_quote(" PID_HDR_CNTTYPE = 18,")
+cpp_quote(" PID_HDR_CNTXFER = 19,")
+cpp_quote(" PID_HDR_CNTID = 20,")
+cpp_quote(" PID_HDR_CNTDESC = 21,")
+cpp_quote(" PID_HDR_CNTDISP = 22,")
+cpp_quote(" PID_HDR_CNTBASE = 23,")
+cpp_quote(" PID_HDR_CNTLOC = 24,")
+cpp_quote(" PID_HDR_TO = 25,")
+cpp_quote(" PID_HDR_PATH = 26,")
+cpp_quote(" PID_HDR_FOLLOWUPTO = 27,")
+cpp_quote(" PID_HDR_EXPIRES = 28,")
+cpp_quote(" PID_HDR_CC = 29,")
+
+cpp_quote(" PID_HDR_SENDER = 61,")
+
+cpp_quote(" PID_HDR_INREPLYTO = 77,")
+cpp_quote("} MIMEPROPID;")
+
+cpp_quote("#define TYPEDID_MASK ((ULONG)0xffff)")
+cpp_quote("#define TYPEDID_TYPE(t) ((VARTYPE)((t) & TYPEDID_MASK))")
+
+cpp_quote("#define OID_HIDE_TNEF_ATTACHMENTS (0x000e0000 | VT_BOOL)")
+cpp_quote("#define OID_SECURITY_TYPE (0x00180000 | VT_UI4)")
+cpp_quote("#define OID_SECURITY_HWND_OWNER (0x00320000 | VT_UI4)")
+cpp_quote("#define OID_HEADER_RELOAD_TYPE (0x00370000 | VT_UI4)")
+cpp_quote("#define OID_SHOW_MACBINARY (0x00390000 | VT_BOOL)")
+
+
+[
+ uuid(e4b28371-83b0-11d0-8259-00c04fd85ab4),
+ version(1.0)
+]
+library MIMEOLE
+{
+ importlib("stdole2.tlb");
+
+ DECLARE_HANDLE(HCHARSET);
+ DECLARE_HANDLE(HBODY);
+ DECLARE_HANDLE(HHEADERROW);
+
+ typedef HCHARSET *LPHCHARSET;
+ typedef HBODY *LPHBODY;
+ typedef HHEADERROW *LPHHEADERROW;
+ typedef DWORD TYPEDID;
+ typedef const PROPVARIANT *LPCPROPVARIANT;
+ typedef const BLOB *LPCBLOB;
+
+ typedef enum tagRELOADTYPE
+ {
+ RELOAD_HEADER_NONE,
+ RELOAD_HEADER_RESET,
+ RELOAD_HEADER_APPEND,
+ RELOAD_HEADER_REPLACE,
+ } RELOADTYPE;
+
+ typedef enum tagMIMESAVETYPE
+ {
+ SAVE_RFC822,
+ SAVE_RFC1521,
+ } MIMESAVETYPE;
+
+ typedef enum tagCSETAPPLYTYPE
+ {
+ CSET_APPLY_UNTAGGED,
+ CSET_APPLY_ALL,
+ CSET_APPLY_TAG_ALL,
+ } CSETAPPLYTYPE;
+
+ typedef enum tagENCODINGTYPE
+ {
+ IET_BINARY,
+ IET_BASE64,
+ IET_UUENCODE,
+ IET_QP,
+ IET_7BIT,
+ IET_8BIT,
+ IET_INETCSET,
+ IET_UNICODE,
+ IET_RFC1522,
+ IET_ENCODED,
+ IET_CURRENT,
+ IET_UNKNOWN,
+ IET_BINHEX40,
+ IET_LAST
+ } ENCODINGTYPE;
+
+ const SHORT IET_DECODED = IET_BINARY;
+
+ const SHORT CCHMAX_HEADER_LINE = 1000;
+
+ [
+ uuid(c5588349-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeInternational : IUnknown
+ {
+ typedef [unique] IMimeInternational *LPMIMEINTERNATIONAL;
+ typedef DWORD CODEPAGEID;
+
+ const CODEPAGEID CP_USASCII = 1252;
+ const CODEPAGEID CP_UNICODE = 1200;
+ const CODEPAGEID CP_JAUTODETECT = 50932;
+ const CODEPAGEID CP_KAUTODETECT = 50949;
+ const CODEPAGEID CP_ISO2022JPESC = 50221;
+ const CODEPAGEID CP_ISO2022JPSIO = 50222;
+
+ const SHORT CCHMAX_CSET_NAME = 128;
+ const SHORT CCHMAX_LANG_NAME = 128;
+ const SHORT CCHMAX_FACE_NAME = 128;
+
+ typedef struct tagINETCSETINFO
+ {
+ CHAR szName[CCHMAX_CSET_NAME];
+ HCHARSET hCharset;
+ CODEPAGEID cpiWindows;
+ CODEPAGEID cpiInternet;
+ DWORD dwReserved1;
+ } INETCSETINFO, *LPINETCSETINFO;
+
+ typedef enum tagINETLANGMASK
+ {
+ ILM_FAMILY = 0x01,
+ ILM_NAME = 0x02,
+ ILM_BODYCSET = 0x04,
+ ILM_HEADERCSET = 0x08,
+ ILM_WEBCSET = 0x10,
+ ILM_FIXEDFONT = 0x20,
+ ILM_VARIABLEFONT = 0x40,
+ } INETLANGMASK;
+
+ typedef struct tagCODEPAGEINFO
+ {
+ DWORD dwMask;
+ CODEPAGEID cpiCodePage;
+ BOOL fIsValidCodePage;
+ ULONG ulMaxCharSize;
+ BOOL fInternetCP;
+ CODEPAGEID cpiFamily;
+ CHAR szName[CCHMAX_LANG_NAME];
+ CHAR szBodyCset[CCHMAX_CSET_NAME];
+ CHAR szHeaderCset[CCHMAX_CSET_NAME];
+ CHAR szWebCset[CCHMAX_CSET_NAME];
+ CHAR szFixedFont[CCHMAX_FACE_NAME];
+ CHAR szVariableFont[CCHMAX_FACE_NAME];
+ ENCODINGTYPE ietNewsDefault;
+ ENCODINGTYPE ietMailDefault;
+ DWORD dwReserved1;
+ } CODEPAGEINFO, *LPCODEPAGEINFO;
+
+ typedef struct tagRFC1522INFO
+ {
+ BOOL fRfc1522Allowed;
+ BOOL fRfc1522Used;
+ BOOL fAllow8bit;
+ HCHARSET hRfc1522Cset;
+ } RFC1522INFO, *LPRFC1522INFO;
+
+ typedef enum tagCHARSETTYPE
+ {
+ CHARSET_BODY,
+ CHARSET_HEADER,
+ CHARSET_WEB,
+ } CHARSETTYPE;
+
+
+ HRESULT SetDefaultCharset(
+ [in] HCHARSET hCharset);
+ HRESULT GetDefaultCharset(
+ [out] LPHCHARSET phCharset);
+ HRESULT GetCodePageCharset(
+ [in] CODEPAGEID cpiCodePage,
+ [in] CHARSETTYPE ctCsetType,
+ [out] LPHCHARSET phCharset);
+ HRESULT FindCharset(
+ [in] LPCSTR pszCharset,
+ [out] LPHCHARSET phCharset);
+ HRESULT GetCharsetInfo(
+ [in] HCHARSET hCharset,
+ [in, out] LPINETCSETINFO pCsetInfo);
+ HRESULT GetCodePageInfo(
+ [in] CODEPAGEID cpiCodePage,
+ [in, out] LPCODEPAGEINFO pCodePageInfo);
+ HRESULT CanConvertCodePages(
+ [in] CODEPAGEID cpiSource,
+ [in] CODEPAGEID cpiDest);
+ HRESULT DecodeHeader(
+ [in] HCHARSET hCharset,
+ [in] LPCSTR pszData,
+ [in, out] LPPROPVARIANT pDecoded,
+ [in, out] LPRFC1522INFO pRfc1522Info);
+ HRESULT EncodeHeader(
+ [in] HCHARSET hCharset,
+ [in] LPPROPVARIANT pData,
+ [out] LPSTR *ppszEncoded,
+ [in, out] LPRFC1522INFO pRfc1522Info);
+ HRESULT ConvertBuffer(
+ [in] CODEPAGEID cpiSource,
+ [in] CODEPAGEID cpiDest,
+ [in] LPBLOB pIn,
+ [in, out] LPBLOB pOut,
+ [out] ULONG *pcbRead);
+ HRESULT ConvertString(
+ [in] CODEPAGEID cpiSource,
+ [in] CODEPAGEID cpiDest,
+ [in] LPPROPVARIANT pIn,
+ [in, out] LPPROPVARIANT pOut);
+ HRESULT MLANG_ConvertInetReset(void);
+ HRESULT MLANG_ConvertInetString(
+ [in] CODEPAGEID cpiSource,
+ [in] CODEPAGEID cpiDest,
+ [in] LPCSTR pSource,
+ [in] int *pnSizeOfSource,
+ [in,out,unique] LPSTR pDestination,
+ [in] int *pnDstSize);
+ HRESULT Rfc1522Decode(
+ [in] LPCSTR pszValue,
+ [in,ref] LPSTR pszCharset,
+ [in] ULONG cchmax,
+ [out] LPSTR *ppszDecoded);
+ HRESULT Rfc1522Encode(
+ [in] LPCSTR pszValue,
+ [in] HCHARSET hCharset,
+ [out] LPSTR *ppszEncoded);
+ }
+
+ [
+ uuid(c5588353-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeSecurity : IUnknown
+ {
+ typedef [unique] IMimeSecurity *LPMIMESECURITY;
+
+ cpp_quote("#ifdef __WINE_WINCRYPT_H")
+ cpp_quote("typedef PCCERT_CONTEXT PCX509CERT;")
+ cpp_quote("#else")
+ typedef const void *PCX509CERT;
+ typedef void *HCERTSTORE;
+ cpp_quote("#endif")
+
+ typedef BLOB THUMBBLOB;
+ typedef void *HCAPICERTSTORE;
+
+ cpp_quote("#define MST_NONE 0x00000000")
+ cpp_quote("#define MST_THIS_SIGN 0x00000001")
+ cpp_quote("#define MST_THIS_ENCRYPT 0x00000002")
+ cpp_quote("#define MST_BLOB_FLAG 0x00000004")
+ cpp_quote("#define MST_THIS_BLOBSIGN (MST_BLOB_FLAG | MST_THIS_SIGN)")
+ cpp_quote("#define MST_CHILD_SIGN 0x00000100")
+ cpp_quote("#define MST_CHILD_ENCRYPT 0x00000200")
+ cpp_quote("#define MST_SUBMSG_SIGN 0x00001000")
+ cpp_quote("#define MST_SUBMSG_ENCRYPT 0x00002000")
+ cpp_quote("#define MST_RECEIPT_REQUEST 0x00010000")
+ cpp_quote("#define MST_CLASS_SMIME_V1 0x00000000")
+ cpp_quote("#define MST_CLASS_PGP 0x01000000")
+
+ typedef enum tagCERTSTATE
+ {
+ CERTIFICATE_OK,
+ CERTIFICATE_NOT_PRESENT,
+ CERTIFICATE_EXPIRED,
+ CERTIFICATE_CHAIN_TOO_LONG,
+ CERTIFICATE_MISSING_ISSUER,
+ CERTIFICATE_CRL_LISTED,
+ CERTIFICATE_NOT_TRUSTED,
+ CERTIFICATE_INVALID,
+ CERTIFICATE_ERROR,
+ CERTIFICATE_NOPRINT,
+ CERTIFICATE_UNKNOWN
+ } CERTSTATE;
+
+ typedef enum tagCERTNAMETYPE
+ {
+ SIMPLE,
+ OID,
+ X500,
+ } CERTNAMETYPE;
+
+ typedef enum tagCERTDATAID
+ {
+ CDID_EMAIL,
+ CDID_MAX
+ } CERTDATAID;
+
+ typedef struct tagX509CERTRESULT
+ {
+ DWORD cEntries;
+ CERTSTATE *rgcs;
+ PCX509CERT *rgpCert;
+ } X509CERTRESULT, *PX509CERTRESULT;
+ typedef const X509CERTRESULT *PCX509CERTRESULT;
+
+ HRESULT InitNew(void);
+
+ HRESULT CheckInit(void);
+
+ HRESULT EncodeMessage(
+ [in] IMimeMessageTree */*const*/ pTree,
+ [in] DWORD dwFlags);
+
+ HRESULT EncodeBody(
+ [in] IMimeMessageTree */*const*/ pTree,
+ [in] HBODY hEncodeRoot,
+ [in] DWORD dwFlags);
+
+ HRESULT DecodeMessage(
+ [in] IMimeMessageTree */*const*/ pTree,
+ [in] DWORD dwFlags);
+
+ HRESULT DecodeBody(
+ [in] IMimeMessageTree */*const*/ pTree,
+ [in] HBODY hDecodeRoot,
+ [in] DWORD dwFlags);
+
+ HRESULT EnumCertificates(
+ [in] HCAPICERTSTORE hc,
+ [in] DWORD dwUsage,
+ [in] PCX509CERT pPrev,
+ [out] PCX509CERT *ppCert);
+
+ HRESULT GetCertificateName(
+ [in] const PCX509CERT pX509Cert,
+ [in] const CERTNAMETYPE cn,
+ [out] LPSTR *ppszName);
+
+ HRESULT GetMessageType(
+ [in] const HWND hwndParent,
+ [in] IMimeBody */*const*/ pBody,
+ [out] DWORD */*const*/ pdwSecType);
+
+ HRESULT GetCertData(
+ [in] const PCX509CERT pX509Cert,
+ [in] const CERTDATAID dataid,
+ [out, ref] LPPROPVARIANT pValue);
+ }
+
+ [
+ uuid(fd853cd1-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeHeaderTable : IPersistStream
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(fd853cec-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimePropertySchema : IUnknown
+ {
+ typedef enum tagMIMEPROPFLAGS
+ {
+ MPF_INETCSET = 0x01,
+ MPF_RFC1522 = 0x02,
+ MPF_ADDRESS = 0x04,
+ MPF_HASPARAMS = 0x08,
+ MPF_MIME = 0x10,
+ MPF_READONLY = 0x20
+ } MIMEPROPFLAGS;
+
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(fd853cd3-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimePropertySet : IPersistStreamInit
+ {
+ typedef [unique] IMimePropertySet *LPMIMEPROPERTYSET;
+
+ cpp_quote("#define PDF_ENCODED 0x00000001")
+ cpp_quote("#define PDF_NAMEINDATA 0x00000002")
+ cpp_quote("#define PDF_HEADERFORMAT (0x00000004 | PDF_ENCODED)")
+ cpp_quote("#define PDF_NOCOMMENTS 0x00000008")
+ cpp_quote("#define PDF_SAVENOENCODE 0x00000010")
+ cpp_quote("#define PDF_VECTOR 0x00000020")
+
+ typedef struct tagMIMEPARAMINFO
+ {
+ LPSTR pszName;
+ LPSTR pszData;
+ } MIMEPARAMINFO, *LPMIMEPARAMINFO;
+
+ typedef enum tagPROPINFOMASK
+ {
+ PIM_CHARSET = 0x01,
+ PIM_ENCODINGTYPE = 0x02,
+ PIM_ROWNUMBER = 0x04,
+ PIM_FLAGS = 0x08,
+ PIM_PROPID = 0x10,
+ PIM_VALUES = 0x20,
+ PIM_VTDEFAULT = 0x40,
+ PIM_VTCURRENT = 0x80
+ } PROPINFOMASK;
+
+ typedef struct tagMIMEPROPINFO
+ {
+ DWORD dwMask;
+ HCHARSET hCharset;
+ ENCODINGTYPE ietEncoding;
+ DWORD dwRowNumber;
+ DWORD dwFlags;
+ DWORD dwPropId;
+ DWORD cValues;
+ VARTYPE vtDefault;
+ VARTYPE vtCurrent;
+ } MIMEPROPINFO, *LPMIMEPROPINFO;
+ typedef const MIMEPROPINFO *LPCMIMEPROPINFO;
+
+ HRESULT GetPropInfo(
+ [in] LPCSTR pszName,
+ [in,out] LPMIMEPROPINFO pInfo);
+
+ HRESULT SetPropInfo(
+ [in] LPCSTR pszName,
+ [in] LPCMIMEPROPINFO pInfo);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetProp")
+cpp_quote("#undef SetProp")
+cpp_quote("#undef EnumProps")
+cpp_quote("#endif")
+ HRESULT GetProp(
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in,out] LPPROPVARIANT pValue);
+
+ HRESULT SetProp(
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in] LPCPROPVARIANT pValue);
+
+ HRESULT AppendProp(
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in] LPPROPVARIANT pValue);
+
+ HRESULT DeleteProp(
+ [in] LPCSTR pszName);
+
+ HRESULT CopyProps(
+ [in] ULONG cNames,
+ [in,unique] LPCSTR *prgszName,
+ [in] IMimePropertySet *pPropertySet);
+
+ HRESULT MoveProps(
+ [in] ULONG cNames,
+ [in] LPCSTR *prgszName,
+ [in] IMimePropertySet *pPropertySet);
+
+ HRESULT DeleteExcept(
+ [in] ULONG cNames,
+ [in] LPCSTR *prgszName);
+
+ HRESULT QueryProp(
+ [in] LPCSTR pszName,
+ [in] LPCSTR pszCriteria,
+ [in] boolean fSubString,
+ [in] boolean fCaseSensitive);
+
+ HRESULT GetCharset(
+ [out] LPHCHARSET phCharset);
+
+ HRESULT SetCharset(
+ [in] HCHARSET hCharset,
+ [in] CSETAPPLYTYPE applytype);
+
+ HRESULT GetParameters(
+ [in] LPCSTR pszName,
+ [out] ULONG *pcParams,
+ [out] LPMIMEPARAMINFO *pprgParam);
+
+ HRESULT IsContentType(
+ [in] LPCSTR pszPriType,
+ [in,unique] LPCSTR pszSubType);
+
+ HRESULT BindToObject(
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppvObject);
+
+ HRESULT Clone(
+ [out] IMimePropertySet **ppPropertySet);
+
+ HRESULT SetOption(
+ [in] const TYPEDID oid,
+ [in] LPCPROPVARIANT pValue);
+
+ HRESULT GetOption(
+ [in] const TYPEDID oid,
+ [in,out] LPPROPVARIANT pValue);
+
+ cpp_quote("#define EPF_NONAME 0x00000001")
+
+ HRESULT EnumProps(
+ [in] DWORD dwFlags,
+ [out] IMimeEnumProperties **ppEnum);
+
+ }
+
+ [
+ uuid(c558834a-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeAddressTable : IUnknown
+ {
+ typedef [unique] IMimeAddressTable *LPMIMEADDRESSTABLE;
+
+ DECLARE_HANDLE(HADDRESS);
+ typedef HADDRESS *LPHADDRESS;
+ typedef DWORD IADDRESSTYPE;
+
+ typedef enum tagADDRESSFORMAT
+ {
+ AFT_DISPLAY_FRIENDLY,
+ AFT_DISPLAY_EMAIL,
+ AFT_DISPLAY_BOTH,
+ AFT_RFC822_DECODED,
+ AFT_RFC822_ENCODED,
+ AFT_RFC822_TRANSMIT,
+ } ADDRESSFORMAT;
+
+ typedef struct tagADDRESSPROPS
+ {
+ DWORD dwProps;
+ HADDRESS hAddress;
+ ENCODINGTYPE ietFriendly;
+ HCHARSET hCharset;
+ DWORD dwAdrType;
+ LPSTR pszFriendly;
+ LPWSTR pwszReserved;
+ LPSTR pszEmail;
+ CERTSTATE certstate;
+ THUMBBLOB tbSigning;
+ THUMBBLOB tbEncryption;
+ DWORD dwCookie;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ } ADDRESSPROPS, *LPADDRESSPROPS;
+
+ typedef struct tagADDRESSLIST
+ {
+ ULONG cAdrs;
+ LPADDRESSPROPS prgAdr;
+ } ADDRESSLIST, *LPADDRESSLIST;
+
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(ee519f11-851a-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeWebDocument : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(c558834c-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeBody : IMimePropertySet
+ {
+ typedef [unique] IMimeBody *LPMIMEBODY;
+
+ typedef enum tagIMSGBODYTYPE
+ {
+ IBT_SECURE,
+ IBT_ATTACHMENT,
+ IBT_EMPTY,
+ IBT_CSETTAGGED,
+ IBT_AUTOATTACH,
+ } IMSGBODYTYPE;
+
+ typedef struct tagBODYOFFSETS
+ {
+ DWORD cbBoundaryStart;
+ DWORD cbHeaderStart;
+ DWORD cbBodyStart;
+ DWORD cbBodyEnd;
+ } BODYOFFSETS, *LPBODYOFFSETS;
+
+ typedef struct tagTRANSMITINFO
+ {
+ ENCODINGTYPE ietCurrent;
+ ENCODINGTYPE ietXmitMime;
+ ENCODINGTYPE ietXmit822;
+ ULONG cbLongestLine;
+ ULONG cExtended;
+ ULONG ulPercentExt;
+ ULONG cbSize;
+ ULONG cLines;
+ } TRANSMITINFO, *LPTRANSMITINFO;
+
+ HRESULT IsType(
+ [in] IMSGBODYTYPE bodytype);
+
+ HRESULT SetDisplayName(
+ [in] LPCSTR pszDisplay);
+
+ HRESULT GetDisplayName(
+ [out] LPSTR *ppszDisplay);
+
+ HRESULT GetOffsets(
+ [out] LPBODYOFFSETS pOffsets);
+
+ HRESULT GetCurrentEncoding(
+ [out] ENCODINGTYPE *pietEncoding);
+
+ HRESULT SetCurrentEncoding(
+ [in] ENCODINGTYPE ietEncoding);
+
+ HRESULT GetEstimatedSize(
+ [in] ENCODINGTYPE ietEncoding,
+ [out] ULONG *pcbSize);
+
+ HRESULT GetDataHere(
+ [in] ENCODINGTYPE ietEncoding,
+ [in] IStream *pStream);
+
+ HRESULT GetData(
+ [in] ENCODINGTYPE ietEncoding,
+ [out] IStream **ppStream);
+
+ HRESULT SetData(
+ [in] ENCODINGTYPE ietEncoding,
+ [in,unique] LPCSTR pszPriType,
+ [in,unique] LPCSTR pszSubType,
+ [in] REFIID riid,
+ [in,iid_is(riid)] LPVOID pvObject);
+
+ HRESULT EmptyData(void);
+
+ HRESULT CopyTo(
+ [in] IMimeBody *pBody);
+
+ HRESULT GetTransmitInfo(
+ [in,out] LPTRANSMITINFO pTransmitInfo);
+
+ HRESULT SaveToFile(
+ [in] ENCODINGTYPE ietEncoding,
+ [in] LPCSTR pszFilePath);
+
+ HRESULT GetHandle(
+ [out] LPHBODY phBody);
+
+ }
+
+ [
+ uuid(fd853cd4-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeMessageTree : IPersistStreamInit
+ {
+ typedef [unique] IMimeMessageTree *LPMIMEMESSAGETREE;
+
+ const HBODY HBODY_ROOT = (HBODY)-1;
+
+ typedef enum tagBODYLOCATION
+ {
+ IBL_ROOT,
+ IBL_PARENT,
+ IBL_FIRST,
+ IBL_LAST,
+ IBL_NEXT,
+ IBL_PREVIOUS,
+ } BODYLOCATION;
+
+ typedef struct tagFINDBODY
+ {
+ LPSTR pszPriType;
+ LPSTR pszSubType;
+ DWORD dwReserved;
+ } FINDBODY, *LPFINDBODY;
+
+ HRESULT GetMessageSource(
+ [out] IStream **ppStream,
+ [in] DWORD dwFlags);
+
+ HRESULT GetMessageSize(
+ [out] ULONG *pcbSize,
+ [in] DWORD dwFlags);
+
+ HRESULT LoadOffsetTable(
+ [in] IStream *pStream);
+
+ HRESULT SaveOffsetTable(
+ [in] IStream *pStream,
+ [in] DWORD dwFlags);
+
+ HRESULT GetFlags(
+ [out] DWORD *pdwFlags);
+
+ HRESULT Commit(
+ [in] DWORD dwFlags);
+
+ HRESULT HandsOffStorage();
+
+ HRESULT BindToObject(
+ [in] const HBODY hBody,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObject);
+
+ HRESULT SaveBody(
+ [in] HBODY hBody,
+ [in] DWORD dwFlags,
+ [in] IStream *pStream);
+
+ HRESULT InsertBody(
+ [in] BODYLOCATION location,
+ [in] HBODY hPivot,
+ [out] LPHBODY phBody);
+
+ HRESULT GetBody(
+ [in] BODYLOCATION location,
+ [in] HBODY hPivot,
+ [out] LPHBODY phBody);
+
+ HRESULT DeleteBody(
+ [in] HBODY hBody,
+ [in] DWORD dwFlags);
+
+ HRESULT MoveBody(
+ [in] HBODY hBody,
+ [in] BODYLOCATION location);
+
+ HRESULT CountBodies(
+ [in] HBODY hParent,
+ [in] boolean fRecurse,
+ [out] ULONG *pcBodies);
+
+ HRESULT FindFirst(
+ [in, out] LPFINDBODY pFindBody,
+ [out] LPHBODY phBody);
+
+ HRESULT FindNext(
+ [in, out] LPFINDBODY pFindBody,
+ [out] LPHBODY phBody);
+
+ HRESULT ResolveURL(
+ [in] HBODY hRelated,
+ [in] LPCSTR pszBase,
+ [in] LPCSTR pszURL,
+ [in] DWORD dwFlags,
+ [out] LPHBODY phBody);
+
+ HRESULT ToMultipart(
+ [in] HBODY hBody,
+ [in] LPCSTR pszSubType,
+ [out] LPHBODY phMultipart);
+
+ HRESULT GetBodyOffsets(
+ [in] HBODY hBody,
+ [in, out] LPBODYOFFSETS pOffsets);
+
+ HRESULT GetCharset(
+ [out] LPHCHARSET phCharset);
+
+ HRESULT SetCharset(
+ [in] HCHARSET hCharset,
+ [in] CSETAPPLYTYPE applytype);
+
+ HRESULT IsBodyType(
+ [in] HBODY hBody,
+ [in] IMSGBODYTYPE bodytype);
+
+ HRESULT IsContentType(
+ [in] HBODY hBody,
+ [in] LPCSTR pszPriType,
+ [in] LPCSTR pszSubType);
+
+ HRESULT QueryBodyProp(
+ [in] HBODY hBody,
+ [in] LPCSTR pszName,
+ [in] LPCSTR pszCriteria,
+ [in] boolean fSubString,
+ [in] boolean fCaseSensitive);
+
+ HRESULT GetBodyProp(
+ [in] HBODY hBody,
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in, out] LPPROPVARIANT pValue);
+
+ HRESULT SetBodyProp(
+ [in] HBODY hBody,
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in] LPCPROPVARIANT pValue);
+
+ HRESULT DeleteBodyProp(
+ [in] HBODY hBody,
+ [in] LPCSTR pszName);
+
+ HRESULT SetOption(
+ [in] const TYPEDID oid,
+ [in] LPCPROPVARIANT pValue);
+
+ HRESULT GetOption(
+ [in] const TYPEDID oid,
+ [in, out] LPPROPVARIANT pValue);
+ }
+
+ [
+ uuid(fd853cd5-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeMessage : IMimeMessageTree
+ {
+ typedef [unique] IMimeMessage *LPMIMEMESSAGE;
+
+ typedef DWORD TEXTTYPE;
+
+ typedef enum tagIMSGFLAGS
+ {
+ IMF_ATTACHMENTS = 0x00000001,
+ IMF_MULTIPART = 0x00000002,
+ IMF_SUBMULTIPART = 0x00000004,
+ IMF_MIME = 0x00000008,
+ IMF_HTML = 0x00000010,
+ IMF_PLAIN = 0x00000020,
+ IMF_PARTIAL = 0x00000040,
+ IMF_SIGNED = 0x00000080,
+ IMF_ENCRYPTED = 0x00000100,
+ IMF_TNEF = 0x00000200,
+ IMF_MHTML = 0x00000400,
+ IMF_SECURE = 0x00000800,
+ IMF_TEXT = 0x00001000,
+ IMF_CSETTAGGED = 0x00002000,
+ IMF_NEWS = 0x00004000,
+ IMF_VOICEMAIL = 0x00008000,
+ IMF_HASVCARD = 0x00010000,
+ IMF_RFC1154 = 0x00020000,
+ } IMSGFLAGS;
+
+ typedef enum tagIMSGPRIORITY
+ {
+ IMSG_PRI_LOW = 5,
+ IMSG_PRI_NORMAL = 3,
+ IMSG_PRI_HIGH = 1,
+ } IMSGPRIORITY;
+
+ cpp_quote("#define WPF_HTML 0x00000001")
+ cpp_quote("#define WPF_AUTOINLINE 0x00000002")
+ cpp_quote("#define WPF_SLIDESHOW 0x00000004")
+ cpp_quote("#define WPF_ATTACHLINKS 0x00000008")
+ cpp_quote("#define WPF_IMAGESONLY 0x00000010")
+ cpp_quote("#define WPF_NOMETACHARSET 0x00000020")
+
+ typedef struct tagWEPAGEOPTIONS
+ {
+ DWORD cbSize;
+ DWORD dwFlags;
+ DWORD dwDelay;
+ WCHAR wchQuote;
+ } WEBPAGEOPTIONS, *LPWEBPAGEOPTIONS;
+
+ cpp_quote("#define TXT_PLAIN 1")
+ cpp_quote("#define TXT_HTML 2")
+
+ HRESULT CreateWebPage(
+ [in] IStream *pRootStm,
+ [in] LPWEBPAGEOPTIONS pOptions,
+ [in] IMimeMessageCallback *pCallback,
+ [out] IMoniker **ppMoniker);
+
+ HRESULT GetProp(
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in,out] LPPROPVARIANT pValue);
+
+ HRESULT SetProp(
+ [in] LPCSTR pszName,
+ [in] DWORD dwFlags,
+ [in] LPCPROPVARIANT pValue);
+
+ HRESULT DeleteProp(
+ [in] LPCSTR pszName);
+
+ HRESULT QueryProp(
+ [in] LPCSTR pszName,
+ [in] LPCSTR pszCriteria,
+ [in] boolean fSubString,
+ [in] boolean fCaseSensitive);
+
+ HRESULT GetTextBody(
+ [in] DWORD dwTxtType,
+ [in] ENCODINGTYPE ietEncoding,
+ [out] IStream **pStream,
+ [out] LPHBODY phBody);
+
+ HRESULT SetTextBody(
+ [in] DWORD dwTxtType,
+ [in] ENCODINGTYPE ietEncoding,
+ [in] HBODY hAlternative,
+ [in] IStream *pStream,
+ [out] LPHBODY phBody);
+
+ HRESULT AttachObject(
+ [in] REFIID riid,
+ [in, iid_is(riid)] void *pvObject,
+ [out] LPHBODY phBody);
+
+ HRESULT AttachFile(
+ [in] LPCSTR pszFilePath,
+ [in] IStream *pstmFile,
+ [out] LPHBODY phBody);
+
+ HRESULT AttachURL(
+ [in] LPCSTR pszBase,
+ [in] LPCSTR pszURL,
+ [in] DWORD dwFlags,
+ [in] IStream *pstmURL,
+ [out] LPSTR *ppszCIDURL,
+ [out] LPHBODY phBody);
+
+ HRESULT GetAttachments(
+ [out] ULONG *pcAttach,
+ [out] LPHBODY *pprghAttach);
+
+ HRESULT GetAddressTable(
+ [out] IMimeAddressTable **ppTable);
+
+ HRESULT GetSender(
+ [in, out] LPADDRESSPROPS pAddress);
+
+ HRESULT GetAddressTypes(
+ [in] DWORD dwAdrTypes,
+ [in] DWORD dwProps,
+ [in, out] LPADDRESSLIST pList);
+
+ HRESULT GetAddressFormat(
+ [in] DWORD dwAdrTypes,
+ [in] ADDRESSFORMAT format,
+ [out] LPSTR *ppszFormat);
+
+ HRESULT EnumAddressTypes(
+ [in] DWORD dwAdrTypes,
+ [in] DWORD dwProps,
+ [out] IMimeEnumAddressTypes **ppEnum);
+
+ HRESULT SplitMessage(
+ [in] ULONG cbMaxPart,
+ [out] IMimeMessageParts **ppParts);
+
+ HRESULT GetRootMoniker(
+ [out] IMoniker **ppMoniker);
+ }
+
+ [
+ uuid(761aa741-7bda-11d1-8aa9-00c04fb951f3),
+ object
+ ]
+ interface IMimeMessageCallback : IUnknown
+ {
+ HRESULT OnWebPageSplitter(
+ [in] DWORD cInlined,
+ [in] IStream *ppStream);
+ }
+
+ [
+ uuid(de4ad8da-555f-11d1-8dd0-00c04fb951f9),
+ object
+ ]
+ interface IPersistMime : IPersist
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(c558834f-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeMessageParts : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(c558834d-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeEnumHeaderRows : IUnknown
+ {
+ typedef struct tagENUMHEADERROW
+ {
+ HHEADERROW hRow;
+ LPSTR pszHeader;
+ LPSTR pszData;
+ ULONG cchData;
+ DWORD_PTR dwReserved;
+ } ENUMHEADERROW, *LPENUMHEADERROW;
+
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(fd853cee-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeEnumProperties : IUnknown
+ {
+ typedef [unique] IMimeEnumProperties *LPMIMEENUMPROPERTIES;
+
+ typedef struct tagENUMPROPERTY
+ {
+ LPSTR pszName;
+ HHEADERROW hRow;
+ DWORD dwPropId;
+ } ENUMPROPERTY, *LPENUMPROPERTY;
+
+ HRESULT Next(
+ [in] ULONG cFetch,
+ [in, out] LPENUMPROPERTY prgProp,
+ [out] ULONG *pcFetched);
+
+ HRESULT Skip(
+ [in] ULONG cItems);
+
+ HRESULT Reset(void);
+
+ HRESULT Clone(
+ [out] IMimeEnumProperties **ppEnum);
+
+ HRESULT Count(
+ [out] ULONG *pcItems);
+
+ }
+
+ [
+ uuid(c5588354-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeEnumAddressTypes : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(c5588350-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeEnumMessageParts : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(64577981-86d7-11d1-bdfc-00c04fa31009),
+ object
+ ]
+ interface IHashTable : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(c5588351-7f86-11d0-8252-00c04fd85ab4),
+ object
+ ]
+ interface IMimeAllocator : IMalloc
+ {
+ typedef [unique] IMimeAllocator *LPMIMEALLOCATOR;
+
+ HRESULT FreeParamInfoArray(
+ [in] ULONG cParams,
+ [in] LPMIMEPARAMINFO prgParam,
+ [in] boolean fFreeArray);
+
+ HRESULT FreeAddressList(
+ [in,out] LPADDRESSLIST pList);
+
+ HRESULT FreeAddressProps(
+ [in,out] LPADDRESSPROPS pAddress);
+
+ HRESULT ReleaseObjects(
+ [in] ULONG cObjects,
+ [in] IUnknown **prgpUnknown,
+ [in] boolean fFreeArray);
+
+ HRESULT FreeEnumHeaderRowArray(
+ [in] ULONG cRows,
+ [in] LPENUMHEADERROW prgRow,
+ [in] boolean fFreeArray);
+
+ HRESULT FreeEnumPropertyArray(
+ [in] ULONG cProps,
+ [in] LPENUMPROPERTY prgProp,
+ [in] boolean fFreeArray);
+
+ HRESULT FreeThumbprint(
+ [in] THUMBBLOB *pthumbprint);
+
+ HRESULT PropVariantClear(
+ [in] LPPROPVARIANT pProp);
+
+ }
+
+ [
+ uuid(feceaffd-c441-11d1-960e-00c04fbd7c09),
+ object
+ ]
+ interface IMimeObjResolver : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(b0d17fc2-7bc4-11d1-bdfa-00c04fa31009),
+ object
+ ]
+ interface IFontCache : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(b0d17fc5-7bc4-11d1-bdfa-00c04fa31009),
+ object
+ ]
+ interface IFontCacheNotify : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(70183210-7b36-11d2-8c12-00c04fa31009),
+ object
+ ]
+ interface IMimeEditTag : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(d09ee528-7b38-11d2-8c12-00c04fa31009),
+ object
+ ]
+ interface IMimeEditTagCollection : IUnknown
+ {
+ /* FIXME: fill this in */
+ }
+
+ [
+ uuid(ba715ae0-a740-11d2-8b22-0080c76b34c6),
+ local
+ ]
+ interface IMimeSecurityCallback : IUnknown
+ {
+ /* FIXME: fill this in */
+
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN 0")
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS 1")
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE 2")
+ cpp_quote("#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST 3")
+
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE 0")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS 1")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER 2")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE 3")
+ cpp_quote("#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE 4")
+
+ cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE 0")
+ cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL 1")
+ cpp_quote("#define CMS_RECIPIENT_INFO_KEYID_KEY_ID 2")
+
+ }
+}
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote(" extern \"C\" {")
+cpp_quote("#endif")
+
+cpp_quote("")
+cpp_quote("HRESULT WINAPI MimeOleSetCompatMode(DWORD);")
+cpp_quote("HRESULT WINAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);")
+cpp_quote("HRESULT WINAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);")
+cpp_quote("HRESULT WINAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);")
+cpp_quote("HRESULT WINAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);")
+cpp_quote("HRESULT WINAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);")
+cpp_quote("HRESULT WINAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);")
+cpp_quote("HRESULT WINAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);")
+cpp_quote("HRESULT WINAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);")
+cpp_quote("HRESULT WINAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);")
+cpp_quote("HRESULT WINAPI MimeOleCreateByteStream(IStream**);")
+cpp_quote("HRESULT WINAPI MimeOlGetPropertySchema(IMimePropertySchema**);")
+cpp_quote("HRESULT WINAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);")
+cpp_quote("HRESULT WINAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);")
+cpp_quote("HRESULT WINAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);")
+cpp_quote("HRESULT WINAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);")
+cpp_quote("HRESULT WINAPI MimeOleVariantFree(LPPROPVARIANT);")
+cpp_quote("HRESULT WINAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);")
+cpp_quote("HRESULT WINAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);")
+cpp_quote("HRESULT WINAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);")
+cpp_quote("HRESULT WINAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);")
+cpp_quote("HRESULT WINAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetInternat(IMimeInternational**);")
+cpp_quote("HRESULT WINAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);")
+cpp_quote("HRESULT WINAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);")
+cpp_quote("HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleSetDefaultCharset(HCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);")
+cpp_quote("HRESULT WINAPI MimeOleCreateVirtualStream(IStream**);")
+cpp_quote("HRESULT WINAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);")
+cpp_quote("HRESULT WINAPI MimeOleIsTnefStream(IStream*);")
+cpp_quote("HRESULT WINAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);")
+cpp_quote("HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity**);")
+cpp_quote("HRESULT WINAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);")
+cpp_quote("HRESULT WINAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);")
+cpp_quote("HRESULT WINAPI MimeOleCreateMessageParts(IMimeMessageParts**);")
+cpp_quote("HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator**);")
+cpp_quote("HRESULT WINAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);")
+cpp_quote("HRESULT WINAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);")
+cpp_quote("HRESULT WINAPI MimeOleMergePartialHeaders(IStream*,IStream*);")
+cpp_quote("HRESULT WINAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleCreateBody(IMimeBody**);")
+cpp_quote("HRESULT WINAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);")
+cpp_quote("HRESULT WINAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);")
+cpp_quote("HRESULT WINAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);")
+cpp_quote("HRESULT WINAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);")
+cpp_quote("HRESULT WINAPI MimeOleClearDirtyTree(IMimeMessageTree*);")
+cpp_quote("HRESULT WINAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapRelease(LPVOID);")
+cpp_quote("HRESULT WINAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);")
+cpp_quote("HRESULT WINAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);")
+cpp_quote("HRESULT WINAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);")
+cpp_quote("HRESULT WINAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);")
+
+cpp_quote("HRESULT WINAPI MimeEditViewSource(HWND,IMimeMessage*);")
+cpp_quote("HRESULT WINAPI MimeEditIsSafeToRun(HWND,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);")
+cpp_quote("HRESULT WINAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);")
+cpp_quote("HRESULT WINAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);")
+cpp_quote("HRESULT WINAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);")
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("}")
+cpp_quote("#endif")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h
new file mode 100644
index 00000000..ac53fde1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/minmax.h
@@ -0,0 +1,40 @@
+/*
+ * min/max macros
+ *
+ * Copyright 2001 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MINMAX_H
+#define __WINE_MINMAX_H
+
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+#endif /* __WINE_MINMAX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl
new file mode 100644
index 00000000..110fd217
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mlang.idl
@@ -0,0 +1,766 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+interface IStream;
+
+cpp_quote("#define CPIOD_PEEK 0x40000000")
+cpp_quote("#define CPIOD_FORCE_PROMPT 0x80000000")
+
+[
+ object,
+ uuid(359f3443-bd4a-11d0-b188-00aa0038c969),
+ pointer_default(unique)
+]
+interface IMLangCodePages : IUnknown
+{
+ HRESULT GetCharCodePages(
+ [in] WCHAR chSrc,
+ [out] DWORD *pdwCodePages);
+ HRESULT GetStrCodePages(
+ [in, size_is(cchSrc)] const WCHAR *pszSrc,
+ [in] LONG cchSrc,
+ [in] DWORD dwPriorityCodePages,
+ [out] DWORD *pdwCodePages,
+ [out] LONG *pcchCodePages);
+ HRESULT CodePageToCodePages(
+ [in] UINT uCodePage,
+ [out] DWORD *pdwCodePages);
+ HRESULT CodePagesToCodePage(
+ [in] DWORD dwCodePages,
+ [in] UINT uDefaultCodePage,
+ [out] UINT *puCodePage);
+}
+
+[
+ object,
+ uuid(359f3441-bd4a-11d0-b188-00aa0038c969),
+ pointer_default(unique)
+]
+interface IMLangFontLink : IMLangCodePages
+{
+ HRESULT GetFontCodePages(
+ [in] HDC hDC,
+ [in] HFONT hFont,
+ [out] DWORD *pdwCodePages );
+
+ HRESULT MapFont(
+ [in] HDC hDC,
+ [in] DWORD dwCodePages,
+ [in] HFONT hSrcFont,
+ [out] HFONT *phDestFont);
+
+ HRESULT ReleaseFont(
+ [in] HFONT hFont);
+
+ HRESULT ResetFontMapping();
+}
+
+[
+ object,
+ uuid(ae5f1430-388b-11d2-8380-00c04f8f5da1),
+ pointer_default(unique)
+]
+interface IEnumScript : IUnknown
+{
+ const USHORT MAX_SCRIPT_NAME = 48;
+ const USHORT MAX_MIMEFACE_NAME = 32;
+
+ typedef BYTE SCRIPT_ID;
+ typedef __int64 SCRIPT_IDS;
+
+ typedef enum tagSCRIPTCONTF
+ {
+ sidDefault = 0,
+ sidMerge = sidDefault + 1,
+ sidAsciiSym = sidMerge + 1,
+ sidAsciiLatin = sidAsciiSym + 1,
+ sidLatin = sidAsciiLatin + 1,
+ sidGreek = sidLatin + 1,
+ sidCyrillic = sidGreek + 1,
+ sidArmenian = sidCyrillic + 1,
+ sidHebrew = sidArmenian + 1,
+ sidArabic = sidHebrew + 1,
+ sidDevanagari = sidArabic + 1,
+ sidBengali = sidDevanagari + 1,
+ sidGurmukhi = sidBengali + 1,
+ sidGujarati = sidGurmukhi + 1,
+ sidOriya = sidGujarati + 1,
+ sidTamil = sidOriya + 1,
+ sidTelugu = sidTamil + 1,
+ sidKannada = sidTelugu + 1,
+ sidMalayalam = sidKannada + 1,
+ sidThai = sidMalayalam + 1,
+ sidLao = sidThai + 1,
+ sidTibetan = sidLao + 1,
+ sidGeorgian = sidTibetan + 1,
+ sidHangul = sidGeorgian + 1,
+ sidKana = sidHangul + 1,
+ sidBopomofo = sidKana + 1,
+ sidHan = sidBopomofo + 1,
+ sidEthiopic = sidHan + 1,
+ sidCanSyllabic = sidEthiopic + 1,
+ sidCherokee = sidCanSyllabic + 1,
+ sidYi = sidCherokee + 1,
+ sidBraille = sidYi + 1,
+ sidRunic = sidBraille + 1,
+ sidOgham = sidRunic + 1,
+ sidSinhala = sidOgham + 1,
+ sidSyriac = sidSinhala + 1,
+ sidBurmese = sidSyriac + 1,
+ sidKhmer = sidBurmese + 1,
+ sidThaana = sidKhmer + 1,
+ sidMongolian = sidThaana + 1,
+ sidUserDefined = sidMongolian + 1,
+ sidLim = sidUserDefined + 1,
+ sidFEFirst = sidHangul,
+ sidFELast = sidHan
+ } SCRIPTCONTF;
+
+ typedef enum tagSCRIPTFONTCONTF
+ {
+ SCRIPTCONTF_FIXED_FONT = 0x1,
+ SCRIPTCONTF_PROPORTIONAL_FONT = 0x2,
+ SCRIPTCONTF_SCRIPT_USER = 0x10000,
+ SCRIPTCONTF_SCRIPT_HIDE = 0x20000,
+ SCRIPTCONTF_SCRIPT_SYSTEM = 0x40000
+ } SCRIPTFONTCONTF;
+
+ typedef struct tagSCRIPFONTINFO
+ {
+ SCRIPT_IDS scripts;
+ WCHAR wszFont[MAX_MIMEFACE_NAME];
+ } SCRIPTFONTINFO, *PSCRIPTFONTINFO;
+
+ typedef struct tagSCRIPTINFO {
+ SCRIPT_ID ScriptId;
+ UINT uiCodePage;
+ WCHAR wszDescription[MAX_SCRIPT_NAME];
+ WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
+ WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
+ } SCRIPTINFO, *PSCRIPTINFO;
+
+ HRESULT Clone(
+ [out] IEnumScript **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] PSCRIPTINFO rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG celt);
+}
+
+[
+ object,
+ uuid(dccfc162-2b38-11d2-b7ec-00c04f8f5d9a),
+ pointer_default(unique)
+]
+interface IMLangFontLink2 : IMLangCodePages
+{
+ typedef struct tagUNICODERANGE
+ {
+ WCHAR wcFrom;
+ WCHAR wcTo;
+ } UNICODERANGE;
+
+ typedef [unique] IMLangFontLink2 *PMLANGFONTLINK2;
+
+ HRESULT GetFontCodePages(
+ [in] HDC hDC,
+ [in] HFONT hFont,
+ [out] DWORD *pdwCodePages );
+
+ HRESULT ReleaseFont(
+ [in] HFONT hFont);
+
+ HRESULT ResetFontMapping();
+
+ HRESULT MapFont(
+ [in] HDC hDC,
+ [in] DWORD dwCodePages,
+ [in] WCHAR chSrc,
+ [out] HFONT *pFont);
+
+ HRESULT GetFontUnicodeRanges(
+ [in] HDC hDC,
+ [in,out] UINT *puiRanges,
+ [out] UNICODERANGE* pUranges);
+
+ HRESULT GetScriptFontInfo(
+ [in] SCRIPT_ID sid,
+ [in] DWORD dwFlags,
+ [in,out] UINT *puiFonts,
+ [out] SCRIPTFONTINFO* pScriptFont);
+
+ HRESULT CodePageToScriptID(
+ [in] UINT uiCodePage,
+ [out] SCRIPT_ID *pSid);
+}
+
+[
+ object,
+ uuid(c04d65ce-b70d-11d0-b188-00aa0038c969),
+ pointer_default(unique)
+]
+interface IMLangString : IUnknown
+{
+#ifdef NEWMLSTR
+ HRESULT LockMLStr(
+ [in] LONG lPos,
+ [in] DWORD dwFlags,
+ [out] DWORD* pdwCookie,
+ [out] LONG* plActualPos,
+ [out] LONG* plActualLen);
+
+ HRESULT UnlockMLStr(
+ [in] DWORD dwCookie);
+#else
+ HRESULT Sync(
+ [in] BOOL fNoAccess);
+#endif
+ HRESULT GetLength(
+ [out, retval] LONG* plLen);
+ HRESULT SetMLStr(
+ [in] LONG lDestPos,
+ [in] LONG lDestLen,
+ [in] IUnknown *pSrcMLStr,
+ [in] LONG lSrcPos,
+ [in] LONG lSrcLen);
+#ifdef NEWMLSTR
+ HRESULT RegisterAttr(
+ [in] IUnknown *pUnk,
+ [out] DWORD* pdwCookie);
+ HRESULT UnregisterAttr(
+ [in] DWORD dwCookie);
+ HRESULT EnumAttr(
+ [out] IEnumUnknown **ppEnumUnk);
+ HRESULT FindAttr(
+ [in] REFIID riid,
+ [in] LPARAM lParam,
+ [out] IUnknown **ppUnk);
+#else
+ HRESULT GetMLStr(
+ [in] LONG lSrcPos,
+ [in] LONG lSrcLen,
+ [in] IUnknown *pUnkOuter,
+ [in] DWORD dwClsContext,
+ [in] const IID* piid,
+ [out] IUnknown** ppDestMLStr,
+ [out] LONG* plDestPos,
+ [out] LONG* plDestLen);
+#endif
+}
+
+[
+ object,
+ uuid(f5be2ee1-bfd7-11d0-b188-00aa0038c969),
+ pointer_default(unique)
+]
+interface IMLangLineBreakConsole : IUnknown
+{
+ HRESULT BreakLineML(
+ [in] IMLangString* pSrcMLStr,
+ [in] LONG lSrcPos,
+ [in] LONG lSrcLen,
+ [in] LONG cMinColumns,
+ [in] LONG cMaxColumns,
+ [out] LONG* plLineLen,
+ [out] LONG* plSkipLen);
+
+ HRESULT BreakLineW(
+ [in] LCID locale,
+ [in, size_is(cchSrc)] const WCHAR* pszSrc,
+ [in] LONG cchSrc,
+ [in] LONG cMaxColumns,
+ [out] LONG* pcchLine,
+ [out] LONG* pcchSkip );
+
+ HRESULT BreakLineA(
+ [in] LCID locale,
+ [in] UINT uCodePage,
+ [in, size_is(cchSrc)] const CHAR* pszSrc,
+ [in] LONG cchSrc,
+ [in] LONG cMaxColumns,
+ [out] LONG* pcchLine,
+ [out] LONG* pcchSkip);
+}
+
+[
+ object,
+ uuid(275c23e3-3747-11d0-9fea-00aa003f8646),
+ pointer_default(unique)
+]
+interface IEnumCodePage : IUnknown
+{
+ const USHORT MAX_MIMECP_NAME = 64;
+ const USHORT MAX_MIMECSET_NAME = 50;
+
+ typedef enum tagMIMECONTF
+ {
+ MIMECONTF_MAILNEWS = 0x00000001,
+ MIMECONTF_BROWSER = 0x00000002,
+ MIMECONTF_MINIMAL = 0x00000004,
+ MIMECONTF_IMPORT = 0x00000008,
+ MIMECONTF_SAVABLE_MAILNEWS = 0x00000100,
+ MIMECONTF_SAVABLE_BROWSER = 0x00000200,
+ MIMECONTF_EXPORT = 0x00000400,
+ MIMECONTF_PRIVCONVERTER = 0x00010000,
+ MIMECONTF_VALID = 0x00020000,
+ MIMECONTF_VALID_NLS = 0x00040000,
+ MIMECONTF_MIME_IE4 = 0x10000000,
+ MIMECONTF_MIME_LATEST = 0x20000000,
+ MIMECONTF_MIME_REGISTRY = 0x40000000
+ } MIMECONTF;
+
+ typedef struct tagMIMECPINFO {
+ DWORD dwFlags;
+ UINT uiCodePage;
+ UINT uiFamilyCodePage;
+ WCHAR wszDescription[MAX_MIMECP_NAME];
+ WCHAR wszWebCharset[MAX_MIMECSET_NAME];
+ WCHAR wszHeaderCharset[MAX_MIMECSET_NAME];
+ WCHAR wszBodyCharset[MAX_MIMECSET_NAME];
+ WCHAR wszFixedWidthFont[MAX_MIMEFACE_NAME];
+ WCHAR wszProportionalFont[MAX_MIMEFACE_NAME];
+ BYTE bGDICharset;
+ } MIMECPINFO, *PMIMECPINFO;
+
+ typedef struct tagMIMECSETINFO
+ {
+ UINT uiCodePage;
+ UINT uiInternetEncoding;
+ WCHAR wszCharset[MAX_MIMECSET_NAME];
+ } MIMECSETINFO, *PMIMECSETINFO;
+
+ HRESULT Clone(
+ [out] IEnumCodePage **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] PMIMECPINFO rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG celt);
+}
+
+[
+ object,
+ uuid(d66d6f98-cdaa-11d0-b822-00c04fc9b31f),
+ pointer_default(unique)
+]
+interface IMLangConvertCharset : IUnknown
+{
+ typedef enum tagMLCONVCHARF
+ {
+ MLCONVCHARF_AUTODETECT = 1,
+ MLCONVCHARF_ENTITIZE = 2,
+ MLCONVCHARF_NCR_ENTITIZE = 2,
+ MLCONVCHARF_NAME_ENTITIZE = 4,
+ MLCONVCHARF_USEDEFCHAR = 8,
+ MLCONVCHARF_NOBESTFITCHARS = 16,
+ MLCONVCHARF_DETECTJPN = 32
+ } MLCONVCHAR;
+
+ HRESULT Initialize(
+ [in] UINT uiSrcCodePage,
+ [in] UINT uiDstCodePage,
+ [in] DWORD dwProperty);
+
+ HRESULT GetSourceCodePage(
+ [out] UINT *puiSrcCodePage);
+
+ HRESULT GetDestinationCodePage(
+ [out] UINT *puiDstCodePage);
+
+ HRESULT GetProperty(
+ [out] DWORD *pdwProperty);
+
+ HRESULT DoConversion(
+ [in] BYTE *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] BYTE *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT DoConversionToUnicode(
+ [in] CHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] WCHAR *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT DoConversionFromUnicode(
+ [in] WCHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] CHAR *pDstStr,
+ [in,out] UINT *pcDstSize);
+}
+
+[
+ uuid(d66d6f99-cdaa-11d0-b822-00c04fc9b31f)
+]
+coclass CMLangConvertCharset
+{
+ [default] interface IMLangConvertCharset;
+};
+
+[
+ object,
+ uuid(3dc39d1d-c030-11d0-b81b-00c04fc9b31f),
+ pointer_default(unique)
+]
+interface IEnumRfc1766 : IUnknown
+{
+ const USHORT MAX_RFC1766_NAME = 6;
+ const USHORT MAX_LOCALE_NAME = 32;
+
+ typedef struct tagRFC1766INFO
+ {
+ LCID lcid;
+ WCHAR wszRfc1766[MAX_RFC1766_NAME];
+ WCHAR wszLocaleName[MAX_LOCALE_NAME];
+ } RFC1766INFO, *PRFC1766INFO;
+
+ HRESULT Clone(
+ [out] IEnumRfc1766 **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] PRFC1766INFO rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG celt);
+}
+
+[
+ object,
+ uuid(275c23e1-3747-11d0-9fea-00aa003f8646),
+ pointer_default(unique)
+]
+interface IMultiLanguage : IUnknown
+{
+ HRESULT GetNumberOfCodePageInfo(
+ [out] UINT *pcCodePage);
+
+ HRESULT GetCodePageInfo(
+ [in] UINT uiCodePage,
+ [out] PMIMECPINFO pCodePageInfo);
+
+ HRESULT GetFamilyCodePage(
+ [in] UINT uiCodePage,
+ [out] UINT *puiFamilyCodePage);
+
+ HRESULT EnumCodePages(
+ [in] DWORD grfFlags,
+ [out] IEnumCodePage **ppEnumCodePage);
+
+ HRESULT GetCharsetInfo(
+ [in] BSTR Charset,
+ [in] PMIMECSETINFO pCharsetInfo);
+
+ HRESULT IsConvertible(
+ [in] DWORD dwSrcEncoding,
+ [in] DWORD dwDstEncoding);
+
+ HRESULT ConvertString(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwSrcEncoding,
+ [in] DWORD dwDstEncoding,
+ [in] BYTE *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] BYTE *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT ConvertStringToUnicode(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwEncoding,
+ [in] CHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] WCHAR *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT ConvertStringFromUnicode(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwEncoding,
+ [in] WCHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] CHAR *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT ConvertStringReset();
+
+ HRESULT GetRfc1766FromLcid(
+ [in] LCID Locale,
+ [out] BSTR *pbstrRfc1766);
+
+ HRESULT GetLcidFromRfc1766(
+ [out] LCID *pLocale,
+ [in] BSTR bstrRfc1766);
+
+ HRESULT EnumRfc1766(
+ [out] IEnumRfc1766 **ppEnumRfc1766);
+
+ HRESULT GetRfc1766Info(
+ [in] LCID Locale,
+ [out] PRFC1766INFO pRfc1766Info);
+
+ HRESULT CreateConvertCharset(
+ [in] UINT uiSrcCodePage,
+ [in] UINT uiDstCodePage,
+ [in] DWORD dwProperty,
+ [out] IMLangConvertCharset **ppMLangConvertCharset);
+
+}
+
+[
+ object,
+ uuid(dccfc164-2b38-11d2-b7ec-00c04f8f5d9a),
+ pointer_default(unique)
+]
+interface IMultiLanguage2 : IUnknown
+{
+ typedef struct tagDetectEncodingInfo
+ {
+ UINT nLangID;
+ UINT nCodePage;
+ INT nDocPercent;
+ INT nConfidence;
+ } DetectEncodingInfo, *pDetectEncodingInfo;
+
+ HRESULT GetNumberOfCodePageInfo(
+ [out] UINT *pcCodePage);
+
+ HRESULT GetCodePageInfo(
+ [in] UINT uiCodePage,
+ [in] LANGID LangId,
+ [out] PMIMECPINFO pCodePageInfo);
+
+ HRESULT GetFamilyCodePage(
+ [in] UINT uiCodePage,
+ [out] UINT *puiFamilyCodePage);
+
+ HRESULT EnumCodePages(
+ [in] DWORD grfFlags,
+ [in] LANGID LangId,
+ [out] IEnumCodePage **ppEnumCodePage);
+
+ HRESULT GetCharsetInfo(
+ [in] BSTR Charset,
+ [in] PMIMECSETINFO pCharsetInfo);
+
+ HRESULT IsConvertible(
+ [in] DWORD dwSrcEncoding,
+ [in] DWORD dwDstEncoding);
+
+ HRESULT ConvertString(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwSrcEncoding,
+ [in] DWORD dwDstEncoding,
+ [in] BYTE *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] BYTE *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT ConvertStringToUnicode(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwEncoding,
+ [in] CHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] WCHAR *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT ConvertStringFromUnicode(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwEncoding,
+ [in] WCHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] CHAR *pDstStr,
+ [in,out] UINT *pcDstSize);
+
+ HRESULT ConvertStringReset();
+
+ HRESULT GetRfc1766FromLcid(
+ [in] LCID Locale,
+ [out] BSTR *pbstrRfc1766);
+
+ HRESULT GetLcidFromRfc1766(
+ [out] LCID *pLocale,
+ [in] BSTR bstrRfc1766);
+
+ HRESULT EnumRfc1766(
+ [in] LANGID LangId,
+ [out] IEnumRfc1766 **ppEnumRfc1766);
+
+ HRESULT GetRfc1766Info(
+ [in] LCID Locale,
+ [in] LANGID LangId,
+ [out] PRFC1766INFO pRfc1766Info);
+
+ HRESULT CreateConvertCharset(
+ [in] UINT uiSrcCodePage,
+ [in] UINT uiDstCodePage,
+ [in] DWORD dwProperty,
+ [out] IMLangConvertCharset **ppMLangConvertCharset);
+
+ HRESULT ConvertStringInIStream(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwFlag,
+ [in] WCHAR *lpFallBack,
+ [in] DWORD dwSrcEncoding,
+ [in] DWORD dwDstEncoding,
+ [in] IStream *pstmIn,
+ [in] IStream *pstmOut);
+
+ HRESULT ConvertStringToUnicodeEx(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwEncoding,
+ [in] CHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] WCHAR *pDstStr,
+ [in,out] UINT *pcDstSize,
+ [in] DWORD dwFlag,
+ [in] WCHAR *lpFallBack);
+
+ HRESULT ConvertStringFromUnicodeEx(
+ [in,out] DWORD *pdwMode,
+ [in] DWORD dwEncoding,
+ [in] WCHAR *pSrcStr,
+ [in,out] UINT *pcSrcSize,
+ [in] CHAR *pDstStr,
+ [in,out] UINT *pcDstSize,
+ [in] DWORD dwFlag,
+ [in] WCHAR *lpFallBack);
+
+ HRESULT DetectCodepageInIStream(
+ [in] DWORD dwFlag,
+ [in] DWORD dwPrefWinCodePage,
+ [in] IStream *pstmIn,
+ [in,out] DetectEncodingInfo *lpEncoding,
+ [in,out] INT *pnScores);
+
+ HRESULT DetectInputCodepage(
+ [in] DWORD dwFlag,
+ [in] DWORD dwPrefWinCodePage,
+ [in] CHAR *pSrcStr,
+ [in,out] INT *pcSrcSize,
+ [in,out] DetectEncodingInfo *lpEncoding,
+ [in,out] INT *pnScores);
+
+ HRESULT ValidateCodePage(
+ [in] UINT uiCodePage,
+ [in] HWND hwnd);
+
+ HRESULT GetCodePageDescription(
+ [in] UINT uiCodePage,
+ [in] LCID lcid,
+ [in,out,size_is(cchWideChar)] LPWSTR lpWideCharStr,
+ [in] int cchWideChar);
+
+ HRESULT IsCodePageInstallable(
+ [in] UINT uiCodePage);
+
+ HRESULT SetMimeDBSource(
+ [in] MIMECONTF dwSource);
+
+ HRESULT GetNumberOfScripts(
+ [out] UINT *pnScripts);
+
+ HRESULT EnumScripts(
+ [in] DWORD dwFlags,
+ [in] LANGID LangId,
+ [out] IEnumScript **ppEnumScript);
+
+ HRESULT ValidateCodePageEx( /* undocumented on MSDN */
+ [in] UINT uiCodePage,
+ [in] HWND hwnd,
+ [in] DWORD dwfIODControl);
+}
+
+[
+ object,
+ uuid(4e5868ab-b157-4623-9acc-6a1d9caebe04),
+ pointer_default(unique)
+]
+interface IMultiLanguage3 : IMultiLanguage2
+{
+ typedef [unique] IMultiLanguage3 *LPMULTILANGUAGE3;
+ HRESULT DetectOutboundCodePage(
+ [in] DWORD dwFlags,
+ [in] LPCWSTR lpWideCharStr,
+ [in] UINT cchWideChar,
+ [in] UINT *puiPreferredCodePages,
+ [in] UINT nPreferredCodePages,
+ [in] UINT *puiDetectedCodePages,
+ [in, out] UINT *pnDetectedCodePages,
+ [in] WCHAR *lpSpecialChar);
+
+ HRESULT DetectOutboundCodePageInIStream(
+ [in] DWORD dwFlags,
+ [in] IStream *pStrIn,
+ [in] UINT *puiPreferredCodePages,
+ [in] UINT nPreferredCodePages,
+ [in] UINT *puiDetectedCodePages,
+ [in, out] UINT *pnDetectedCodePages,
+ [in] WCHAR *lpSpecialChar);
+}
+
+[
+ uuid(275C23E2-3747-11d0-9FEA-00AA003f8646)
+]
+coclass CMultiLanguage
+{
+ [default] interface IMultiLanguage;
+ interface IMLangCodePages;
+ interface IMLangFontLink;
+ /* interface IMLangLineBreakConsole; */
+ interface IMLangFontLink2;
+}
+
+cpp_quote("STDAPI LcidToRfc1766A(LCID, LPSTR, INT);")
+cpp_quote("STDAPI LcidToRfc1766W(LCID, LPWSTR, INT);")
+cpp_quote("#define LcidToRfc1766 WINELIB_NAME_AW(LcidToRfc1766)")
+
+cpp_quote("STDAPI Rfc1766ToLcidA(LCID *, LPCSTR);")
+cpp_quote("STDAPI Rfc1766ToLcidW(LCID *, LPCWSTR);")
+cpp_quote("#define Rfc1766ToLcid WINELIB_NAME_AW(Rfc1766ToLcid)")
+
+cpp_quote("STDAPI GetGlobalFontLinkObject(void **unknown);")
+cpp_quote("STDAPI IsConvertINetStringAvailable(DWORD, DWORD);")
+cpp_quote("STDAPI ConvertINetString(LPDWORD, DWORD, DWORD, LPCSTR, LPINT, LPSTR, LPINT);")
+cpp_quote("STDAPI ConvertINetMultiByteToUnicode(LPDWORD, DWORD, LPCSTR, LPINT, LPWSTR, LPINT);")
+cpp_quote("STDAPI ConvertINetUnicodeToMultiByte(LPDWORD, DWORD, LPCWSTR, LPINT, LPSTR, LPINT);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl
new file mode 100644
index 00000000..f7bfe41f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmc.idl
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright 2011 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "basetsd.h";
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ uuid(A8D2C5FE-CDCB-4B9D-BDE5-A27343FF54BC),
+]
+interface IMMCVersionInfo : IUnknown
+{
+ HRESULT GetMMCVersion([out] long * pVersionMajor, [out] long * pVersionMinor);
+}
+
+
+[
+ uuid(9EECDD85-B715-4188-8A72-61159ABDB8C4),
+ version(1.0),
+]
+library MMCVersionLib
+{
+ importlib("stdole2.tlb");
+
+ [
+ helpstring("MMCVersionInfo 1.0 Object"),
+ uuid(D6FEDB1D-CF21-4BD9-AF3B-C5468E9C6684),
+ threading(apartment),
+ progid("NODEMGR.MMCVersionInfo.1"),
+ vi_progid("NODEMGR.MMCVersionInfo")
+ ]
+ coclass MMCVersionInfo
+ {
+ [default] interface IMMCVersionInfo;
+ }
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h
new file mode 100644
index 00000000..183d6b7b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmddk.h
@@ -0,0 +1,480 @@
+/*
+ * Copyright 1998, Luiz Otavio L. Zorzella
+ * 1999, Eric Pouech
+ *
+ * Purpose: multimedia declarations (external to WINMM & MMSYSTEM DLLs
+ * for other DLLs (MCI, drivers...))
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MMDDK_H
+#define __MMDDK_H
+
+#include <mmsystem.h>
+#include <winbase.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MAX_MIDIINDRV (16)
+/* For now I'm making 16 the maximum number of midi devices one can
+ * have. This should be more than enough for everybody. But as a purist,
+ * I intend to make it unbounded in the future, as soon as I figure
+ * a good way to do so.
+ */
+#define MAX_MIDIOUTDRV (16)
+
+/* ==================================
+ * Multimedia DDK compatible part
+ * ================================== */
+
+#include <pshpack1.h>
+
+#define DRVM_INIT 100
+#define DRVM_EXIT 101
+#define DRVM_DISABLE 102
+#define DRVM_ENABLE 103
+
+/* messages that have IOCTL format
+ * dw1 = NULL or handle
+ * dw2 = NULL or ptr to DRVM_IOCTL_DATA
+ * return is MMRESULT
+ */
+#define DRVM_IOCTL 0x100
+#define DRVM_ADD_THRU (DRVM_IOCTL+1)
+#define DRVM_REMOVE_THRU (DRVM_IOCTL+2)
+#define DRVM_IOCTL_LAST (DRVM_IOCTL+5)
+typedef struct {
+ DWORD dwSize; /* size of this structure */
+ DWORD dwCmd; /* IOCTL command code, 0x80000000 and above reserved for system */
+} DRVM_IOCTL_DATA, *LPDRVM_IOCTL_DATA;
+
+/* command code ranges for dwCmd field of DRVM_IOCTL message
+ * - codes from 0 to 0x7FFFFFFF are user defined
+ * - codes from 0x80000000 to 0xFFFFFFFF are reserved for future definition by microsoft
+ */
+#define DRVM_IOCTL_CMD_USER __MSABI_LONG(0x00000000)
+#define DRVM_IOCTL_CMD_SYSTEM __MSABI_LONG(0x80000000)
+
+#define DRVM_MAPPER 0x2000
+#define DRVM_USER 0x4000
+#define DRVM_MAPPER_STATUS (DRVM_MAPPER+0)
+#define DRVM_MAPPER_RECONFIGURE (DRVM_MAPPER+1)
+#define DRVM_MAPPER_PREFERRED_GET (DRVM_MAPPER+21)
+#define DRVM_MAPPER_CONSOLEVOICECOM_GET (DRVM_MAPPER+23)
+
+#define DRV_QUERYDRVENTRY (DRV_RESERVED + 1)
+#define DRV_QUERYDEVNODE (DRV_RESERVED + 2)
+#define DRV_QUERYNAME (DRV_RESERVED + 3)
+#define DRV_QUERYDRIVERIDS (DRV_RESERVED + 4)
+#define DRV_QUERYMAPPABLE (DRV_RESERVED + 5)
+#define DRV_QUERYMODULE (DRV_RESERVED + 9)
+#define DRV_PNPINSTALL (DRV_RESERVED + 11)
+#define DRV_QUERYDEVICEINTERFACE (DRV_RESERVED + 12)
+#define DRV_QUERYDEVICEINTERFACESIZE (DRV_RESERVED + 13)
+#define DRV_QUERYSTRINGID (DRV_RESERVED + 14)
+#define DRV_QUERYSTRINGIDSIZE (DRV_RESERVED + 15)
+#define DRV_QUERYIDFROMSTRINGID (DRV_RESERVED + 16)
+#define DRV_QUERYFUNCTIONINSTANCEID (DRV_RESERVED + 17)
+#define DRV_QUERYFUNCTIONINSTANCEIDSIZE (DRV_RESERVED + 18)
+
+#define DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY 0x00000001
+
+#define WODM_INIT DRVM_INIT
+#define WODM_GETNUMDEVS 3
+#define WODM_GETDEVCAPS 4
+#define WODM_OPEN 5
+#define WODM_CLOSE 6
+#define WODM_PREPARE 7
+#define WODM_UNPREPARE 8
+#define WODM_WRITE 9
+#define WODM_PAUSE 10
+#define WODM_RESTART 11
+#define WODM_RESET 12
+#define WODM_GETPOS 13
+#define WODM_GETPITCH 14
+#define WODM_SETPITCH 15
+#define WODM_GETVOLUME 16
+#define WODM_SETVOLUME 17
+#define WODM_GETPLAYBACKRATE 18
+#define WODM_SETPLAYBACKRATE 19
+#define WODM_BREAKLOOP 20
+#define WODM_PREFERRED 21
+
+#define WODM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0)
+#define WAVEOUT_MAPPER_STATUS_DEVICE 0
+#define WAVEOUT_MAPPER_STATUS_MAPPED 1
+#define WAVEOUT_MAPPER_STATUS_FORMAT 2
+
+#define WODM_BUSY 21
+
+#define WIDM_INIT DRVM_INIT
+#define WIDM_GETNUMDEVS 50
+#define WIDM_GETDEVCAPS 51
+#define WIDM_OPEN 52
+#define WIDM_CLOSE 53
+#define WIDM_PREPARE 54
+#define WIDM_UNPREPARE 55
+#define WIDM_ADDBUFFER 56
+#define WIDM_START 57
+#define WIDM_STOP 58
+#define WIDM_RESET 59
+#define WIDM_GETPOS 60
+#define WIDM_PREFERRED 61
+#define WIDM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0)
+#define WAVEIN_MAPPER_STATUS_DEVICE 0
+#define WAVEIN_MAPPER_STATUS_MAPPED 1
+#define WAVEIN_MAPPER_STATUS_FORMAT 2
+
+#define MODM_INIT DRVM_INIT
+#define MODM_GETNUMDEVS 1
+#define MODM_GETDEVCAPS 2
+#define MODM_OPEN 3
+#define MODM_CLOSE 4
+#define MODM_PREPARE 5
+#define MODM_UNPREPARE 6
+#define MODM_DATA 7
+#define MODM_LONGDATA 8
+#define MODM_RESET 9
+#define MODM_GETVOLUME 10
+#define MODM_SETVOLUME 11
+#define MODM_CACHEPATCHES 12
+#define MODM_CACHEDRUMPATCHES 13
+
+#define MIDM_INIT DRVM_INIT
+#define MIDM_GETNUMDEVS 53
+#define MIDM_GETDEVCAPS 54
+#define MIDM_OPEN 55
+#define MIDM_CLOSE 56
+#define MIDM_PREPARE 57
+#define MIDM_UNPREPARE 58
+#define MIDM_ADDBUFFER 59
+#define MIDM_START 60
+#define MIDM_STOP 61
+#define MIDM_RESET 62
+
+
+#define AUXM_INIT DRVM_INIT
+#define AUXDM_GETNUMDEVS 3
+#define AUXDM_GETDEVCAPS 4
+#define AUXDM_GETVOLUME 5
+#define AUXDM_SETVOLUME 6
+
+#define MXDM_INIT DRVM_INIT
+#define MXDM_USER DRVM_USER
+#define MXDM_MAPPER DRVM_MAPPER
+
+#define MXDM_GETNUMDEVS 1
+#define MXDM_GETDEVCAPS 2
+#define MXDM_OPEN 3
+#define MXDM_CLOSE 4
+#define MXDM_GETLINEINFO 5
+#define MXDM_GETLINECONTROLS 6
+#define MXDM_GETCONTROLDETAILS 7
+#define MXDM_SETCONTROLDETAILS 8
+
+/* pre-defined joystick types */
+#define JOY_HW_NONE 0
+#define JOY_HW_CUSTOM 1
+#define JOY_HW_2A_2B_GENERIC 2
+#define JOY_HW_2A_4B_GENERIC 3
+#define JOY_HW_2B_GAMEPAD 4
+#define JOY_HW_2B_FLIGHTYOKE 5
+#define JOY_HW_2B_FLIGHTYOKETHROTTLE 6
+#define JOY_HW_3A_2B_GENERIC 7
+#define JOY_HW_3A_4B_GENERIC 8
+#define JOY_HW_4B_GAMEPAD 9
+#define JOY_HW_4B_FLIGHTYOKE 10
+#define JOY_HW_4B_FLIGHTYOKETHROTTLE 11
+#define JOY_HW_LASTENTRY 12
+
+/* calibration flags */
+#define JOY_ISCAL_XY __MSABI_LONG(0x00000001) /* XY are calibrated */
+#define JOY_ISCAL_Z __MSABI_LONG(0x00000002) /* Z is calibrated */
+#define JOY_ISCAL_R __MSABI_LONG(0x00000004) /* R is calibrated */
+#define JOY_ISCAL_U __MSABI_LONG(0x00000008) /* U is calibrated */
+#define JOY_ISCAL_V __MSABI_LONG(0x00000010) /* V is calibrated */
+#define JOY_ISCAL_POV __MSABI_LONG(0x00000020) /* POV is calibrated */
+
+/* point of view constants */
+#define JOY_POV_NUMDIRS 4
+#define JOY_POVVAL_FORWARD 0
+#define JOY_POVVAL_BACKWARD 1
+#define JOY_POVVAL_LEFT 2
+#define JOY_POVVAL_RIGHT 3
+
+/* Specific settings for joystick hardware */
+#define JOY_HWS_HASZ __MSABI_LONG(0x00000001) /* has Z info? */
+#define JOY_HWS_HASPOV __MSABI_LONG(0x00000002) /* point of view hat present */
+#define JOY_HWS_POVISBUTTONCOMBOS __MSABI_LONG(0x00000004) /* pov done through combo of buttons */
+#define JOY_HWS_POVISPOLL __MSABI_LONG(0x00000008) /* pov done through polling */
+#define JOY_HWS_ISYOKE __MSABI_LONG(0x00000010) /* joystick is a flight yoke */
+#define JOY_HWS_ISGAMEPAD __MSABI_LONG(0x00000020) /* joystick is a game pad */
+#define JOY_HWS_ISCARCTRL __MSABI_LONG(0x00000040) /* joystick is a car controller */
+/* X defaults to J1 X axis */
+#define JOY_HWS_XISJ1Y __MSABI_LONG(0x00000080) /* X is on J1 Y axis */
+#define JOY_HWS_XISJ2X __MSABI_LONG(0x00000100) /* X is on J2 X axis */
+#define JOY_HWS_XISJ2Y __MSABI_LONG(0x00000200) /* X is on J2 Y axis */
+/* Y defaults to J1 Y axis */
+#define JOY_HWS_YISJ1X __MSABI_LONG(0x00000400) /* Y is on J1 X axis */
+#define JOY_HWS_YISJ2X __MSABI_LONG(0x00000800) /* Y is on J2 X axis */
+#define JOY_HWS_YISJ2Y __MSABI_LONG(0x00001000) /* Y is on J2 Y axis */
+/* Z defaults to J2 Y axis */
+#define JOY_HWS_ZISJ1X __MSABI_LONG(0x00002000) /* Z is on J1 X axis */
+#define JOY_HWS_ZISJ1Y __MSABI_LONG(0x00004000) /* Z is on J1 Y axis */
+#define JOY_HWS_ZISJ2X __MSABI_LONG(0x00008000) /* Z is on J2 X axis */
+/* POV defaults to J2 Y axis, if it is not button based */
+#define JOY_HWS_POVISJ1X __MSABI_LONG(0x00010000) /* pov done through J1 X axis */
+#define JOY_HWS_POVISJ1Y __MSABI_LONG(0x00020000) /* pov done through J1 Y axis */
+#define JOY_HWS_POVISJ2X __MSABI_LONG(0x00040000) /* pov done through J2 X axis */
+/* R defaults to J2 X axis */
+#define JOY_HWS_HASR __MSABI_LONG(0x00080000) /* has R (4th axis) info */
+#define JOY_HWS_RISJ1X __MSABI_LONG(0x00100000) /* R done through J1 X axis */
+#define JOY_HWS_RISJ1Y __MSABI_LONG(0x00200000) /* R done through J1 Y axis */
+#define JOY_HWS_RISJ2Y __MSABI_LONG(0x00400000) /* R done through J2 X axis */
+/* U & V for future hardware */
+#define JOY_HWS_HASU __MSABI_LONG(0x00800000) /* has U (5th axis) info */
+#define JOY_HWS_HASV __MSABI_LONG(0x01000000) /* has V (6th axis) info */
+
+/* Usage settings */
+#define JOY_US_HASRUDDER __MSABI_LONG(0x00000001) /* joystick configured with rudder */
+#define JOY_US_PRESENT __MSABI_LONG(0x00000002) /* is joystick actually present? */
+#define JOY_US_ISOEM __MSABI_LONG(0x00000004) /* joystick is an OEM defined type */
+
+
+/* struct for storing x,y, z, and rudder values */
+typedef struct joypos_tag {
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwZ;
+ DWORD dwR;
+ DWORD dwU;
+ DWORD dwV;
+} JOYPOS, *LPJOYPOS;
+
+/* struct for storing ranges */
+typedef struct joyrange_tag {
+ JOYPOS jpMin;
+ JOYPOS jpMax;
+ JOYPOS jpCenter;
+} JOYRANGE,*LPJOYRANGE;
+
+typedef struct joyreguservalues_tag {
+ DWORD dwTimeOut; /* value at which to timeout joystick polling */
+ JOYRANGE jrvRanges; /* range of values app wants returned for axes */
+ JOYPOS jpDeadZone; /* area around center to be considered
+ as "dead". specified as a percentage
+ (0-100). Only X & Y handled by system driver */
+} JOYREGUSERVALUES, *LPJOYREGUSERVALUES;
+
+typedef struct joyreghwsettings_tag {
+ DWORD dwFlags;
+ DWORD dwNumButtons; /* number of buttons */
+} JOYREGHWSETTINGS, *LPJOYHWSETTINGS;
+
+/* range of values returned by the hardware (filled in by calibration) */
+typedef struct joyreghwvalues_tag {
+ JOYRANGE jrvHardware; /* values returned by hardware */
+ DWORD dwPOVValues[JOY_POV_NUMDIRS];/* POV values returned by hardware */
+ DWORD dwCalFlags; /* what has been calibrated */
+} JOYREGHWVALUES, *LPJOYREGHWVALUES;
+
+/* hardware configuration */
+typedef struct joyreghwconfig_tag {
+ JOYREGHWSETTINGS hws; /* hardware settings */
+ DWORD dwUsageSettings;/* usage settings */
+ JOYREGHWVALUES hwv; /* values returned by hardware */
+ DWORD dwType; /* type of joystick */
+ DWORD dwReserved; /* reserved for OEM drivers */
+} JOYREGHWCONFIG, *LPJOYREGHWCONFIG;
+
+/* joystick calibration info structure */
+typedef struct joycalibrate_tag {
+ UINT wXbase;
+ UINT wXdelta;
+ UINT wYbase;
+ UINT wYdelta;
+ UINT wZbase;
+ UINT wZdelta;
+} JOYCALIBRATE;
+typedef JOYCALIBRATE *LPJOYCALIBRATE;
+
+/* prototype for joystick message function */
+typedef UINT (CALLBACK * JOYDEVMSGPROC)(DWORD dwID, UINT uMessage, LPARAM lParam1, LPARAM lParam2);
+typedef JOYDEVMSGPROC *LPJOYDEVMSGPROC;
+
+/* messages sent to joystick driver's DriverProc() function */
+#define JDD_GETNUMDEVS (DRV_RESERVED + 0x0001)
+#define JDD_GETDEVCAPS (DRV_RESERVED + 0x0002)
+#define JDD_GETPOS (DRV_RESERVED + 0x0101)
+#define JDD_SETCALIBRATION (DRV_RESERVED + 0x0102)
+#define JDD_CONFIGCHANGED (DRV_RESERVED + 0x0103)
+#define JDD_GETPOSEX (DRV_RESERVED + 0x0104)
+
+#define MCI_MAX_DEVICE_TYPE_LENGTH 80
+
+#define MCI_FALSE (MCI_STRING_OFFSET + 19)
+#define MCI_TRUE (MCI_STRING_OFFSET + 20)
+
+#define MCI_FORMAT_RETURN_BASE MCI_FORMAT_MILLISECONDS_S
+#define MCI_FORMAT_MILLISECONDS_S (MCI_STRING_OFFSET + 21)
+#define MCI_FORMAT_HMS_S (MCI_STRING_OFFSET + 22)
+#define MCI_FORMAT_MSF_S (MCI_STRING_OFFSET + 23)
+#define MCI_FORMAT_FRAMES_S (MCI_STRING_OFFSET + 24)
+#define MCI_FORMAT_SMPTE_24_S (MCI_STRING_OFFSET + 25)
+#define MCI_FORMAT_SMPTE_25_S (MCI_STRING_OFFSET + 26)
+#define MCI_FORMAT_SMPTE_30_S (MCI_STRING_OFFSET + 27)
+#define MCI_FORMAT_SMPTE_30DROP_S (MCI_STRING_OFFSET + 28)
+#define MCI_FORMAT_BYTES_S (MCI_STRING_OFFSET + 29)
+#define MCI_FORMAT_SAMPLES_S (MCI_STRING_OFFSET + 30)
+#define MCI_FORMAT_TMSF_S (MCI_STRING_OFFSET + 31)
+
+#define MCI_VD_FORMAT_TRACK_S (MCI_VD_OFFSET + 5)
+
+#define WAVE_FORMAT_PCM_S (MCI_WAVE_OFFSET + 0)
+#define WAVE_MAPPER_S (MCI_WAVE_OFFSET + 1)
+
+#define MCI_SEQ_MAPPER_S (MCI_SEQ_OFFSET + 5)
+#define MCI_SEQ_FILE_S (MCI_SEQ_OFFSET + 6)
+#define MCI_SEQ_MIDI_S (MCI_SEQ_OFFSET + 7)
+#define MCI_SEQ_SMPTE_S (MCI_SEQ_OFFSET + 8)
+#define MCI_SEQ_FORMAT_SONGPTR_S (MCI_SEQ_OFFSET + 9)
+#define MCI_SEQ_NONE_S (MCI_SEQ_OFFSET + 10)
+#define MIDIMAPPER_S (MCI_SEQ_OFFSET + 11)
+
+#define MCI_RESOURCE_RETURNED 0x00010000 /* resource ID */
+#define MCI_COLONIZED3_RETURN 0x00020000 /* colonized ID, 3 bytes data */
+#define MCI_COLONIZED4_RETURN 0x00040000 /* colonized ID, 4 bytes data */
+#define MCI_INTEGER_RETURNED 0x00080000 /* integer conversion needed */
+#define MCI_RESOURCE_DRIVER 0x00100000 /* driver owns returned resource */
+
+#define MCI_NO_COMMAND_TABLE 0xFFFF
+
+#define MCI_COMMAND_HEAD 0
+#define MCI_STRING 1
+#define MCI_INTEGER 2
+#define MCI_END_COMMAND 3
+#define MCI_RETURN 4
+#define MCI_FLAG 5
+#define MCI_END_COMMAND_LIST 6
+#define MCI_RECT 7
+#define MCI_CONSTANT 8
+#define MCI_END_CONSTANT 9
+#define MCI_HWND 10
+#define MCI_HPAL 11
+#define MCI_HDC 12
+
+#ifdef _WIN64
+#define MCI_INTEGER64 13
+#endif /* _WIN64 */
+
+#define MAKEMCIRESOURCE(wRet, wRes) MAKELRESULT((wRet), (wRes))
+
+typedef struct {
+ HWAVE hWave;
+ LPWAVEFORMATEX lpFormat;
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwInstance;
+ UINT uMappedDeviceID;
+ DWORD_PTR dnDevNode;
+} WAVEOPENDESC, *LPWAVEOPENDESC;
+
+typedef struct {
+ DWORD dwStreamID;
+ WORD wDeviceID;
+} MIDIOPENSTRMID;
+
+typedef struct {
+ HMIDI hMidi;
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwInstance;
+ DWORD_PTR dnDevNode;
+ DWORD cIds;
+ MIDIOPENSTRMID rgIds;
+} MIDIOPENDESC, *LPMIDIOPENDESC;
+
+typedef struct tMIXEROPENDESC
+{
+ HMIXEROBJ hmx;
+ LPVOID pReserved0;
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwInstance;
+ DWORD_PTR dnDevNode;
+} MIXEROPENDESC, *LPMIXEROPENDESC;
+
+typedef struct {
+ UINT wDeviceID; /* device ID */
+ LPSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */
+ UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */
+ UINT wType; /* driver type (filled in by the driver) */
+} MCI_OPEN_DRIVER_PARMSA, *LPMCI_OPEN_DRIVER_PARMSA;
+
+typedef struct {
+ UINT wDeviceID; /* device ID */
+ LPWSTR lpstrParams; /* parameter string for entry in SYSTEM.INI */
+ UINT wCustomCommandTable; /* custom command table (0xFFFF if none) * filled in by the driver */
+ UINT wType; /* driver type (filled in by the driver) */
+} MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW;
+DECL_WINELIB_TYPE_AW(MCI_OPEN_DRIVER_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OPEN_DRIVER_PARMS)
+
+DWORD_PTR WINAPI mciGetDriverData(UINT uDeviceID);
+BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData);
+UINT WINAPI mciDriverYield(UINT uDeviceID);
+BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID,
+ UINT uStatus);
+UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance,
+ LPCWSTR lpResName, UINT uType);
+BOOL WINAPI mciFreeCommandResource(UINT uTable);
+
+#define DCB_NULL 0x0000
+#define DCB_WINDOW 0x0001 /* dwCallback is a HWND */
+#define DCB_TASK 0x0002 /* dwCallback is a HTASK */
+#define DCB_FUNCTION 0x0003 /* dwCallback is a FARPROC */
+#define DCB_EVENT 0x0005 /* dwCallback is an EVENT Handler */
+#define DCB_TYPEMASK 0x0007
+#define DCB_NOSWITCH 0x0008 /* don't switch stacks for callback */
+
+BOOL WINAPI DriverCallback(DWORD_PTR dwCallBack, DWORD uFlags, HDRVR hDev,
+ DWORD wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
+
+typedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst);
+
+#define TASKERR_NOTASKSUPPORT 1
+#define TASKERR_OUTOFMEMORY 2
+UINT WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD_PTR);
+VOID WINAPI mmTaskBlock(DWORD);
+BOOL WINAPI mmTaskSignal(DWORD);
+VOID WINAPI mmTaskYield(VOID);
+DWORD WINAPI mmGetCurrentTask(VOID);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MMDDK_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl
new file mode 100644
index 00000000..0aa872d4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmdeviceapi.idl
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "propsys.idl";
+
+cpp_quote("#ifndef E_NOTFOUND")
+cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)")
+cpp_quote("#endif")
+cpp_quote("#ifndef E_UNSUPPORTED_TYPE")
+cpp_quote("#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)")
+cpp_quote("#endif")
+
+
+cpp_quote("#define DEVICE_STATE_ACTIVE 0x1")
+cpp_quote("#define DEVICE_STATE_DISABLED 0x2")
+cpp_quote("#define DEVICE_STATE_NOTPRESENT 0x4")
+cpp_quote("#define DEVICE_STATE_UNPLUGGED 0x8")
+cpp_quote("#define DEVICE_STATEMASK_ALL 0xf")
+
+/* Generic PKEY_AudioEndPoint ID for grepping: {1da5d803-d492-4edd-8c23-e0c0ffee7f0e} */
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,0);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,1);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,2);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,3);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,4);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,5);")
+
+cpp_quote("#define ENDPOINT_SYSFX_ENABLED 0")
+cpp_quote("#define ENDPOINT_SYSFX_DISABLED 1")
+
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,6);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Supports_EventDriven_Mode,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,7);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_JackSubType,0x1da5d803,0xd492,0x4edd,0x8c,0x23,0xe0,0xc0,0xff,0xee,0x7f,0x0e,8);")
+
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat,0xf19f064d,0x082c,0x4e27,0xbc,0x73,0x68,0x82,0xa1,0xbb,0x8e,0x4c,0);")
+cpp_quote("DEFINE_PROPERTYKEY(PKEY_AudioEngine_OEMFormat,0xe4870e26,0x3cc5,0x4cd2,0xba,0x46,0xca,0x0a,0x9a,0x70,0xed,0x04,3);")
+
+typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS
+{
+ DWORD cbDirectXAudioActivationParams;
+ GUID guidAudioSession;
+ DWORD dwAudioStreamFlags;
+} DIRECTX_AUDIO_ACTIVATION_PARAMS, *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
+
+typedef enum _EDataFlow
+{
+ eRender,
+ eCapture,
+ eAll,
+ EDataFlow_enum_count
+} EDataFlow;
+
+typedef enum _ERole
+{
+ eConsole,
+ eMultimedia,
+ eCommunications,
+ ERole_enum_count
+} ERole;
+
+typedef enum _EndpointFormFactor
+{
+ RemoteNetworkDevice,
+ Speakers,
+ LineLevel,
+ Headphones,
+ Microphone,
+ Headset,
+ Handset,
+ UnknownDigitalPassthrough,
+ SPDIF,
+ DigitalAudioDisplayDevice,
+ UnknownFormFactor,
+ EndpointFormFactor_enum_count
+} EndpointFormFactor;
+
+cpp_quote("#define HDMI DigitalAudioDisplayDevice")
+
+[
+ object,
+ local,
+ uuid(7991eec9-7e89-4d85-8390-6c703cec60c0),
+ nonextensible,
+ pointer_default(unique)
+]
+interface IMMNotificationClient : IUnknown
+{
+ [id(1)] HRESULT OnDeviceStateChanged(
+ [in] LPCWSTR pwstrDeviceId,
+ [in] DWORD dwNewState
+ );
+ [id(2)] HRESULT OnDeviceAdded(
+ [in] LPCWSTR pwstrDeviceId
+ );
+ [id(3)] HRESULT OnDeviceRemoved(
+ [in] LPCWSTR pwstrDeviceId
+ );
+ [id(4)] HRESULT OnDefaultDeviceChanged(
+ [in] EDataFlow flow,
+ [in] ERole role,
+ [in] LPCWSTR pwstrDeviceId
+ );
+ [id(5)] HRESULT OnPropertyValueChanged(
+ [in] LPCWSTR pwstrDeviceId,
+ [in] const PROPERTYKEY key
+ );
+}
+
+[
+ object,
+ local,
+ uuid(d666063f-1587-4e43-81f1-b948e807363f),
+ nonextensible,
+ pointer_default(unique)
+]
+interface IMMDevice : IUnknown
+{
+ [id(1)] HRESULT Activate(
+ [in] REFIID iid,
+ [in] DWORD dwClsCtx,
+ [in,unique] PROPVARIANT *pActivationParams,
+ [out,iid_is(iid)] void **ppv
+ );
+ [id(2)] HRESULT OpenPropertyStore(
+ [in] DWORD stgmAccess,
+ [out] IPropertyStore **ppProperties
+ );
+ [id(3)] HRESULT GetId(
+ [out] LPWSTR *ppstrId
+ );
+ [id(4)] HRESULT GetState(
+ [out] DWORD *pdwState
+ );
+}
+
+[
+ object,
+ local,
+ uuid(0bd7a1be-7a1a-44db-8397-cc5392387b5e),
+ nonextensible,
+ pointer_default(unique)
+]
+interface IMMDeviceCollection : IUnknown
+{
+ [id(1)] HRESULT GetCount(
+ [out] UINT *pcDevices
+ );
+ [id(2)] HRESULT Item(
+ [in] UINT nDevice,
+ [out] IMMDevice **ppdevice
+ );
+}
+
+[
+ object,
+ local,
+ uuid(1be09788-6894-4089-8586-9a2a6c265ac5),
+ nonextensible,
+ pointer_default(unique)
+]
+interface IMMEndpoint : IUnknown
+{
+ [id(1)] HRESULT GetDataFlow(
+ [out] EDataFlow *pDataFlow
+ );
+}
+
+[
+ object,
+ local,
+ uuid(a95664d2-9614-4f35-a746-de8db63617e6),
+ nonextensible,
+ pointer_default(unique)
+]
+interface IMMDeviceEnumerator : IUnknown
+{
+ [id(1)] HRESULT EnumAudioEndpoints(
+ [in] EDataFlow dataFlow,
+ [in] DWORD dwStateMask,
+ [out] IMMDeviceCollection **ppDevices
+ );
+ [id(2)] HRESULT GetDefaultAudioEndpoint(
+ [in] EDataFlow dataFlow,
+ [in] ERole role,
+ [out] IMMDevice **ppEndpoint
+ );
+ [id(3)] HRESULT GetDevice(
+ [in] LPCWSTR pwstrId,
+ [out] IMMDevice **ppDevice
+ );
+ [id(4)] HRESULT RegisterEndpointNotificationCallback(
+ [in] IMMNotificationClient *pClient
+ );
+ [id(5)] HRESULT UnregisterEndpointNotificationCallback(
+ [in] IMMNotificationClient *pClient
+ );
+}
+
+[
+ object,
+ local,
+ uuid(3b0d0ea4-d0a9-4b0e-935b-09516746fac0),
+ nonextensible,
+ pointer_default(unique)
+]
+interface IMMDeviceActivator : IUnknown
+{
+ [id(1)] HRESULT Activate(
+ [in] REFIID iid,
+ [in] IMMDevice *pDevice,
+ [in] PROPVARIANT *pActivationParams,
+ [out,iid_is(iid)] void **ppv
+ );
+}
+
+typedef struct _AudioExtensionParams
+{
+ LPARAM AddPageParam;
+ IMMDevice *pEndPoint;
+ IMMDevice *pPnpInterface;
+ IMMDevice *pPnpDevnode;
+} AudioExtensionParams;
+
+[
+ uuid(2fdaafa3-7523-4f66-9957-9d5e7fe698f6),
+ version(1.0)
+]
+library MMDeviceAPILib
+{
+ [ uuid(bcde0395-e52f-467c-8e3d-c4579291692e) ] coclass MMDeviceEnumerator
+ {
+ [default] interface IMMDeviceEnumerator;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h
new file mode 100644
index 00000000..ee404f8d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmreg.h
@@ -0,0 +1,508 @@
+/*
+ * Declarations for MultiMedia-REGistration
+ *
+ * Copyright (C) 1999 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MMREG_H
+#define __WINE_MMREG_H
+
+/***********************************************************************
+ * Defines/Enums
+ */
+
+#ifndef _ACM_WAVEFILTER
+#define _ACM_WAVEFILTER
+
+#define WAVE_FILTER_UNKNOWN 0x0000
+#define WAVE_FILTER_DEVELOPMENT 0xFFFF
+
+typedef struct _WAVEFILTER {
+ DWORD cbStruct;
+ DWORD dwFilterTag;
+ DWORD fdwFilter;
+ DWORD dwReserved[5];
+} WAVEFILTER, *PWAVEFILTER, *NPWAVEFILTER, *LPWAVEFILTER;
+#endif /* _ACM_WAVEFILTER */
+
+#ifndef WAVE_FILTER_VOLUME
+#define WAVE_FILTER_VOLUME 0x0001
+
+typedef struct _WAVEFILTER_VOLUME {
+ WAVEFILTER wfltr;
+ DWORD dwVolume;
+} VOLUMEWAVEFILTER, *PVOLUMEWAVEFILTER, *NPVOLUMEWAVEFILTER, *LPVOLUMEWAVEFILTER;
+#endif /* WAVE_FILTER_VOLUME */
+
+#ifndef WAVE_FILTER_ECHO
+#define WAVE_FILTER_ECHO 0x0002
+
+typedef struct WAVEFILTER_ECHO {
+ WAVEFILTER wfltr;
+ DWORD dwVolume;
+ DWORD dwDelay;
+} ECHOWAVEFILTER, *PECHOWAVEFILTER, *NPECHOWAVEFILTER, *LPECHOWAVEFILTER;
+#endif /* WAVEFILTER_ECHO */
+
+#ifndef _WAVEFORMATEX_
+#define _WAVEFORMATEX_
+typedef struct _WAVEFORMATEX {
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wBitsPerSample;
+ WORD cbSize;
+} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
+#endif /* _WAVEFORMATEX_ */
+
+/* WAVE form wFormatTag IDs */
+#define WAVE_FORMAT_UNKNOWN 0x0000 /* Microsoft Corporation */
+#define WAVE_FORMAT_ADPCM 0x0002 /* Microsoft Corporation */
+#define WAVE_FORMAT_IEEE_FLOAT 0x0003 /* Microsoft Corporation */
+#define WAVE_FORMAT_IBM_CVSD 0x0005 /* IBM Corporation */
+#define WAVE_FORMAT_ALAW 0x0006 /* Microsoft Corporation */
+#define WAVE_FORMAT_MULAW 0x0007 /* Microsoft Corporation */
+#define WAVE_FORMAT_OKI_ADPCM 0x0010 /* OKI */
+#define WAVE_FORMAT_DVI_ADPCM 0x0011 /* Intel Corporation */
+#define WAVE_FORMAT_IMA_ADPCM (WAVE_FORMAT_DVI_ADPCM) /* Intel Corporation */
+#define WAVE_FORMAT_MEDIASPACE_ADPCM 0x0012 /* Videologic */
+#define WAVE_FORMAT_SIERRA_ADPCM 0x0013 /* Sierra Semiconductor Corp */
+#define WAVE_FORMAT_G723_ADPCM 0x0014 /* Antex Electronics Corporation */
+#define WAVE_FORMAT_DIGISTD 0x0015 /* DSP Solutions, Inc. */
+#define WAVE_FORMAT_DIGIFIX 0x0016 /* DSP Solutions, Inc. */
+#define WAVE_FORMAT_DIALOGIC_OKI_ADPCM 0x0017 /* Dialogic Corporation */
+#define WAVE_FORMAT_YAMAHA_ADPCM 0x0020 /* Yamaha Corporation of America */
+#define WAVE_FORMAT_SONARC 0x0021 /* Speech Compression */
+#define WAVE_FORMAT_DSPGROUP_TRUESPEECH 0x0022 /* DSP Group, Inc */
+#define WAVE_FORMAT_ECHOSC1 0x0023 /* Echo Speech Corporation */
+#define WAVE_FORMAT_AUDIOFILE_AF36 0x0024 /* */
+#define WAVE_FORMAT_APTX 0x0025 /* Audio Processing Technology */
+#define WAVE_FORMAT_AUDIOFILE_AF10 0x0026 /* */
+#define WAVE_FORMAT_DOLBY_AC2 0x0030 /* Dolby Laboratories */
+#define WAVE_FORMAT_GSM610 0x0031 /* Microsoft Corporation */
+#define WAVE_FORMAT_ANTEX_ADPCME 0x0033 /* Antex Electronics Corporation */
+#define WAVE_FORMAT_CONTROL_RES_VQLPC 0x0034 /* Control Resources Limited */
+#define WAVE_FORMAT_DIGIREAL 0x0035 /* DSP Solutions, Inc. */
+#define WAVE_FORMAT_DIGIADPCM 0x0036 /* DSP Solutions, Inc. */
+#define WAVE_FORMAT_CONTROL_RES_CR10 0x0037 /* Control Resources Limited */
+#define WAVE_FORMAT_NMS_VBXADPCM 0x0038 /* Natural MicroSystems */
+#define WAVE_FORMAT_G721_ADPCM 0x0040 /* Antex Electronics Corporation */
+#define WAVE_FORMAT_MPEG 0x0050 /* Microsoft Corporation */
+#define WAVE_FORMAT_MPEGLAYER3 0x0055
+#define WAVE_FORMAT_CREATIVE_ADPCM 0x0200 /* Creative Labs, Inc */
+#define WAVE_FORMAT_CREATIVE_FASTSPEECH8 0x0202 /* Creative Labs, Inc */
+#define WAVE_FORMAT_CREATIVE_FASTSPEECH10 0x0203 /* Creative Labs, Inc */
+#define WAVE_FORMAT_FM_TOWNS_SND 0x0300 /* Fujitsu Corp. */
+#define WAVE_FORMAT_OLIGSM 0x1000 /* Ing C. Olivetti & C., S.p.A. */
+#define WAVE_FORMAT_OLIADPCM 0x1001 /* Ing C. Olivetti & C., S.p.A. */
+#define WAVE_FORMAT_OLICELP 0x1002 /* Ing C. Olivetti & C., S.p.A. */
+#define WAVE_FORMAT_OLISBC 0x1003 /* Ing C. Olivetti & C., S.p.A. */
+#define WAVE_FORMAT_OLIOPR 0x1004 /* Ing C. Olivetti & C., S.p.A. */
+
+#if !defined(WAVE_FORMAT_EXTENSIBLE)
+#define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* Microsoft */
+#endif
+
+#define WAVE_FORMAT_DEVELOPMENT (0xFFFF)
+
+typedef struct adpcmcoef_tag {
+ short iCoef1;
+ short iCoef2;
+} ADPCMCOEFSET;
+typedef ADPCMCOEFSET *PADPCMCOEFSET,
+ *NPADPCMCOEFSET, *LPADPCMCOEFSET;
+
+typedef struct adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+ WORD wNumCoef;
+ /* FIXME: this should be aCoef[0] */
+ ADPCMCOEFSET aCoef[1];
+} ADPCMWAVEFORMAT;
+typedef ADPCMWAVEFORMAT *PADPCMWAVEFORMAT,
+ *NPADPCMWAVEFORMAT, *LPADPCMWAVEFORMAT;
+
+typedef struct dvi_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} DVIADPCMWAVEFORMAT;
+typedef DVIADPCMWAVEFORMAT *PDVIADPCMWAVEFORMAT,
+ *NPDVIADPCMWAVEFORMAT, *LPDVIADPCMWAVEFORMAT;
+
+typedef struct ima_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} IMAADPCMWAVEFORMAT;
+typedef IMAADPCMWAVEFORMAT *PIMAADPCMWAVEFORMAT, *NPIMAADPCMWAVEFORMAT,
+ *LPIMAADPCMWAVEFORMAT;
+
+typedef struct mediaspace_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+} MEDIASPACEADPCMWAVEFORMAT;
+typedef MEDIASPACEADPCMWAVEFORMAT *PMEDIASPACEADPCMWAVEFORMAT,
+ *NPMEDIASPACEADPCMWAVEFORMAT, *LPMEDIASPACEADPCMWAVEFORMAT;
+
+typedef struct sierra_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+} SIERRAADPCMWAVEFORMAT;
+typedef SIERRAADPCMWAVEFORMAT *PSIERRAADPCMWAVEFORMAT,
+ *NPSIERRAADPCMWAVEFORMAT, *LPSIERRAADPCMWAVEFORMAT;
+
+typedef struct g723_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD cbExtraSize;
+ WORD nAuxBlockSize;
+} G723_ADPCMWAVEFORMAT;
+typedef G723_ADPCMWAVEFORMAT *PG723_ADPCMWAVEFORMAT,
+ *NPG723_ADPCMWAVEFORMAT, *LPG723_ADPCMWAVEFORMAT;
+
+typedef struct digistdwaveformat_tag {
+ WAVEFORMATEX wfx;
+} DIGISTDWAVEFORMAT;
+typedef DIGISTDWAVEFORMAT *PDIGISTDWAVEFORMAT,
+ *NPDIGISTDWAVEFORMAT, *LPDIGISTDWAVEFORMAT;
+
+typedef struct digifixwaveformat_tag {
+ WAVEFORMATEX wfx;
+} DIGIFIXWAVEFORMAT;
+typedef DIGIFIXWAVEFORMAT *PDIGIFIXWAVEFORMAT,
+ *NPDIGIFIXWAVEFORMAT, *LPDIGIFIXWAVEFORMAT;
+
+typedef struct creative_fastspeechformat_tag {
+ WAVEFORMATEX ewf;
+} DIALOGICOKIADPCMWAVEFORMAT;
+typedef DIALOGICOKIADPCMWAVEFORMAT *PDIALOGICOKIADPCMWAVEFORMAT,
+ *NPDIALOGICOKIADPCMWAVEFORMAT, *LPDIALOGICOKIADPCMWAVEFORMAT;
+
+typedef struct yamaha_adpmcwaveformat_tag {
+ WAVEFORMATEX wfx;
+} YAMAHA_ADPCMWAVEFORMAT;
+typedef YAMAHA_ADPCMWAVEFORMAT *PYAMAHA_ADPCMWAVEFORMAT,
+ *NPYAMAHA_ADPCMWAVEFORMAT, *LPYAMAHA_ADPCMWAVEFORMAT;
+
+typedef struct sonarcwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wCompType;
+} SONARCWAVEFORMAT;
+typedef SONARCWAVEFORMAT *PSONARCWAVEFORMAT,
+ *NPSONARCWAVEFORMAT,*LPSONARCWAVEFORMAT;
+
+typedef struct truespeechwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+ WORD nSamplesPerBlock;
+ BYTE abReserved[28];
+} TRUESPEECHWAVEFORMAT;
+typedef TRUESPEECHWAVEFORMAT *PTRUESPEECHWAVEFORMAT,
+ *NPTRUESPEECHWAVEFORMAT, *LPTRUESPEECHWAVEFORMAT;
+
+typedef struct echosc1waveformat_tag {
+ WAVEFORMATEX wfx;
+} ECHOSC1WAVEFORMAT;
+typedef ECHOSC1WAVEFORMAT *PECHOSC1WAVEFORMAT,
+ *NPECHOSC1WAVEFORMAT, *LPECHOSC1WAVEFORMAT;
+
+typedef struct audiofile_af36waveformat_tag {
+ WAVEFORMATEX wfx;
+} AUDIOFILE_AF36WAVEFORMAT;
+typedef AUDIOFILE_AF36WAVEFORMAT *PAUDIOFILE_AF36WAVEFORMAT,
+ *NPAUDIOFILE_AF36WAVEFORMAT, *LPAUDIOFILE_AF36WAVEFORMAT;
+
+typedef struct aptxwaveformat_tag {
+ WAVEFORMATEX wfx;
+} APTXWAVEFORMAT;
+typedef APTXWAVEFORMAT *PAPTXWAVEFORMAT,
+ *NPAPTXWAVEFORMAT, *LPAPTXWAVEFORMAT;
+
+typedef struct audiofile_af10waveformat_tag {
+ WAVEFORMATEX wfx;
+} AUDIOFILE_AF10WAVEFORMAT;
+typedef AUDIOFILE_AF10WAVEFORMAT *PAUDIOFILE_AF10WAVEFORMAT,
+ *NPAUDIOFILE_AF10WAVEFORMAT, *LPAUDIOFILE_AF10WAVEFORMAT;
+
+typedef struct dolbyac2waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD nAuxBitsCode;
+} DOLBYAC2WAVEFORMAT;
+
+typedef struct gsm610waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} GSM610WAVEFORMAT;
+typedef GSM610WAVEFORMAT *PGSM610WAVEFORMAT,
+ *NPGSM610WAVEFORMAT, *LPGSM610WAVEFORMAT;
+
+typedef struct adpcmewaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} ADPCMEWAVEFORMAT;
+typedef ADPCMEWAVEFORMAT *PADPCMEWAVEFORMAT,
+ *NPADPCMEWAVEFORMAT, *LPADPCMEWAVEFORMAT;
+
+typedef struct contres_vqlpcwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} CONTRESVQLPCWAVEFORMAT;
+typedef CONTRESVQLPCWAVEFORMAT *PCONTRESVQLPCWAVEFORMAT,
+ *NPCONTRESVQLPCWAVEFORMAT, *LPCONTRESVQLPCWAVEFORMAT;
+
+typedef struct digirealwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} DIGIREALWAVEFORMAT;
+typedef DIGIREALWAVEFORMAT *PDIGIREALWAVEFORMAT,
+ *NPDIGIREALWAVEFORMAT, *LPDIGIREALWAVEFORMAT;
+
+typedef struct digiadpcmmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} DIGIADPCMWAVEFORMAT;
+typedef DIGIADPCMWAVEFORMAT *PDIGIADPCMWAVEFORMAT,
+ *NPDIGIADPCMWAVEFORMAT, *LPDIGIADPCMWAVEFORMAT;
+
+typedef struct contres_cr10waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} CONTRESCR10WAVEFORMAT;
+typedef CONTRESCR10WAVEFORMAT *PCONTRESCR10WAVEFORMAT,
+ *NPCONTRESCR10WAVEFORMAT, *LPCONTRESCR10WAVEFORMAT;
+
+typedef struct nms_vbxadpcmmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wSamplesPerBlock;
+} NMS_VBXADPCMWAVEFORMAT;
+typedef NMS_VBXADPCMWAVEFORMAT *PNMS_VBXADPCMWAVEFORMAT,
+ *NPNMS_VBXADPCMWAVEFORMAT, *LPNMS_VBXADPCMWAVEFORMAT;
+
+typedef struct g721_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD nAuxBlockSize;
+} G721_ADPCMWAVEFORMAT;
+typedef G721_ADPCMWAVEFORMAT *PG721_ADPCMWAVEFORMAT,
+ *NG721_ADPCMWAVEFORMAT, *LPG721_ADPCMWAVEFORMAT;
+
+typedef struct creative_adpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+} CREATIVEADPCMWAVEFORMAT;
+typedef CREATIVEADPCMWAVEFORMAT *PCREATIVEADPCMWAVEFORMAT,
+ *NPCREATIVEADPCMWAVEFORMAT, *LPCREATIVEADPCMWAVEFORMAT;
+
+typedef struct creative_fastspeech8format_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+} CREATIVEFASTSPEECH8WAVEFORMAT;
+typedef CREATIVEFASTSPEECH8WAVEFORMAT *PCREATIVEFASTSPEECH8WAVEFORMAT,
+ *NPCREATIVEFASTSPEECH8WAVEFORMAT, *LPCREATIVEFASTSPEECH8WAVEFORMAT;
+
+typedef struct creative_fastspeech10format_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+} CREATIVEFASTSPEECH10WAVEFORMAT;
+typedef CREATIVEFASTSPEECH10WAVEFORMAT *PCREATIVEFASTSPEECH10WAVEFORMAT,
+ *NPCREATIVEFASTSPEECH10WAVEFORMAT, *LPCREATIVEFASTSPEECH10WAVEFORMAT;
+
+typedef struct fmtowns_snd_waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wRevision;
+} FMTOWNS_SND_WAVEFORMAT;
+typedef FMTOWNS_SND_WAVEFORMAT *PFMTOWNS_SND_WAVEFORMAT,
+ *NPFMTOWNS_SND_WAVEFORMAT, *LPFMTOWNS_SND_WAVEFORMAT;
+
+typedef struct oligsmwaveformat_tag {
+ WAVEFORMATEX wfx;
+} OLIGSMWAVEFORMAT;
+typedef OLIGSMWAVEFORMAT *POLIGSMWAVEFORMAT,
+ *NPOLIGSMWAVEFORMAT, *LPOLIGSMWAVEFORMAT;
+
+typedef struct oliadpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+} OLIADPCMWAVEFORMAT;
+typedef OLIADPCMWAVEFORMAT *POLIADPCMWAVEFORMAT,
+ *NPOLIADPCMWAVEFORMAT, *LPOLIADPCMWAVEFORMAT;
+
+typedef struct olicelpwaveformat_tag {
+ WAVEFORMATEX wfx;
+} OLICELPWAVEFORMAT;
+typedef OLICELPWAVEFORMAT *POLICELPWAVEFORMAT,
+ *NPOLICELPWAVEFORMAT, *LPOLICELPWAVEFORMAT;
+
+typedef struct olisbcwaveformat_tag {
+ WAVEFORMATEX wfx;
+} OLISBCWAVEFORMAT;
+typedef OLISBCWAVEFORMAT *POLISBCWAVEFORMAT,
+ *NPOLISBCWAVEFORMAT, *LPOLISBCWAVEFORMAT;
+
+typedef struct olioprwaveformat_tag {
+ WAVEFORMATEX wfx;
+} OLIOPRWAVEFORMAT;
+typedef OLIOPRWAVEFORMAT *POLIOPRWAVEFORMAT,
+ *NPOLIOPRWAVEFORMAT, *LPOLIOPRWAVEFORMAT;
+
+typedef struct csimaadpcmwaveformat_tag {
+ WAVEFORMATEX wfx;
+} CSIMAADPCMWAVEFORMAT;
+typedef CSIMAADPCMWAVEFORMAT *PCSIMAADPCMWAVEFORMAT,
+ *NPCSIMAADPCMWAVEFORMAT, *LPCSIMAADPCMWAVEFORMAT;
+
+typedef struct mpeg1waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD fwHeadLayer;
+ DWORD dwHeadBitrate;
+ WORD fwHeadMode;
+ WORD fwHeadModeExt;
+ WORD wHeadEmphasis;
+ WORD fwHeadFlags;
+ DWORD dwPTSLow;
+ DWORD dwPTSHigh;
+} MPEG1WAVEFORMAT,* PMPEG1WAVEFORMAT;
+
+#define ACM_MPEG_LAYER1 0x0001
+#define ACM_MPEG_LAYER2 0x0002
+#define ACM_MPEG_LAYER3 0x0004
+
+#define ACM_MPEG_STEREO 0x0001
+#define ACM_MPEG_JOINTSTEREO 0x0002
+#define ACM_MPEG_DUALCHANNEL 0x0004
+#define ACM_MPEG_SINGLECHANNEL 0x0008
+#define ACM_MPEG_PRIVATEBIT 0x0001
+#define ACM_MPEG_COPYRIGHT 0x0002
+#define ACM_MPEG_ORIGINALHOME 0x0004
+#define ACM_MPEG_PROTECTIONBIT 0x0008
+#define ACM_MPEG_ID_MPEG1 0x0010
+
+typedef struct mpeglayer3waveformat_tag {
+ WAVEFORMATEX wfx;
+ WORD wID;
+ DWORD fdwFlags;
+ WORD nBlockSize;
+ WORD nFramesPerBlock;
+ WORD nCodecDelay;
+} MPEGLAYER3WAVEFORMAT;
+
+#define MPEGLAYER3_WFX_EXTRA_BYTES 12
+
+#define MPEGLAYER3_ID_UNKNOWN 0
+#define MPEGLAYER3_ID_MPEG 1
+#define MPEGLAYER3_ID_CONSTANTFRAMESIZE 2
+
+#define MPEGLAYER3_FLAG_PADDING_ISO 0x00000000
+#define MPEGLAYER3_FLAG_PADDING_ON 0x00000001
+#define MPEGLAYER3_FLAG_PADDING_OFF 0x00000002
+
+#ifdef GUID_DEFINED
+
+#ifndef _WAVEFORMATEXTENSIBLE_
+#define _WAVEFORMATEXTENSIBLE_
+typedef struct {
+ WAVEFORMATEX Format;
+ union {
+ WORD wValidBitsPerSample;
+ WORD wSamplesPerBlock;
+ WORD wReserved;
+ } Samples;
+ DWORD dwChannelMask;
+ GUID SubFormat;
+} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
+#endif /* _WAVEFORMATEXTENSIBLE_ */
+
+#endif /* GUID_DEFINED */
+
+typedef WAVEFORMATEXTENSIBLE WAVEFORMATPCMEX;
+typedef WAVEFORMATPCMEX* PWAVEFORMATPCMEX;
+typedef WAVEFORMATPCMEX* NPWAVEFORMATPCMEX;
+typedef WAVEFORMATPCMEX* LPWAVEFORMATPCMEX;
+
+typedef WAVEFORMATEXTENSIBLE WAVEFORMATIEEEFLOATEX;
+typedef WAVEFORMATIEEEFLOATEX* PWAVEFORMATIEEEFLOATEX;
+typedef WAVEFORMATIEEEFLOATEX* NPWAVEFORMATIEEEFLOATEX;
+typedef WAVEFORMATIEEEFLOATEX* LPWAVEFORMATIEEEFLOATEX;
+
+#ifndef _SPEAKER_POSITIONS_
+#define _SPEAKER_POSITIONS_
+
+#define SPEAKER_FRONT_LEFT 0x00000001
+#define SPEAKER_FRONT_RIGHT 0x00000002
+#define SPEAKER_FRONT_CENTER 0x00000004
+#define SPEAKER_LOW_FREQUENCY 0x00000008
+#define SPEAKER_BACK_LEFT 0x00000010
+#define SPEAKER_BACK_RIGHT 0x00000020
+#define SPEAKER_FRONT_LEFT_OF_CENTER 0x00000040
+#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00000080
+#define SPEAKER_BACK_CENTER 0x00000100
+#define SPEAKER_SIDE_LEFT 0x00000200
+#define SPEAKER_SIDE_RIGHT 0x00000400
+#define SPEAKER_TOP_CENTER 0x00000800
+#define SPEAKER_TOP_FRONT_LEFT 0x00001000
+#define SPEAKER_TOP_FRONT_CENTER 0x00002000
+#define SPEAKER_TOP_FRONT_RIGHT 0x00004000
+#define SPEAKER_TOP_BACK_LEFT 0x00008000
+#define SPEAKER_TOP_BACK_CENTER 0x00010000
+#define SPEAKER_TOP_BACK_RIGHT 0x00020000
+#define SPEAKER_RESERVED 0x7FFC0000
+#define SPEAKER_ALL 0x80000000
+
+#endif /* _SPEAKER_POSITIONS_ */
+
+
+/* DIB stuff */
+
+#ifndef BI_BITFIELDS
+#define BI_BITFIELDS 3
+#endif
+
+#ifndef QUERYDIBSUPPORT
+#define QUERYDIBSUPPORT 3073
+#define QDI_SETDIBITS 1
+#define QDI_GETDIBITS 2
+#define QDI_DIBTOSCREEN 4
+#define QDI_STRETCHDIB 8
+#endif
+
+#ifndef NOBITMAP
+typedef struct tagEXBMINFOHEADER {
+ BITMAPINFOHEADER bmi;
+ DWORD biExtDataOffset;
+} EXBMINFOHEADER;
+#endif
+
+
+/* Video stuff */
+
+#ifndef NONEWIC
+
+#ifndef ICTYPE_VIDEO
+#define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c')
+#define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c')
+#endif
+
+#endif
+
+#endif /* __WINE_MMREG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl
new file mode 100644
index 00000000..35b39538
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmstream.idl
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2004 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#define MS_ERROR_CODE(x) MAKE_HRESULT(1, FACILITY_ITF, (x) + 0x400)")
+cpp_quote("#define MS_SUCCESS_CODE(x) MAKE_HRESULT(0, FACILITY_ITF, x)")
+cpp_quote("#define MS_S_PENDING MS_SUCCESS_CODE(1)")
+cpp_quote("#define MS_S_NOUPDATE MS_SUCCESS_CODE(2)")
+cpp_quote("#define MS_S_ENDOFSTREAM MS_SUCCESS_CODE(3)")
+
+cpp_quote("#define MS_E_SAMPLEALLOC MS_ERROR_CODE(1)")
+cpp_quote("#define MS_E_PURPOSEID MS_ERROR_CODE(2)")
+cpp_quote("#define MS_E_NOSTREAM MS_ERROR_CODE(3)")
+cpp_quote("#define MS_E_NOSEEKING MS_ERROR_CODE(4)")
+cpp_quote("#define MS_E_INCOMPATIBLE MS_ERROR_CODE(5)")
+cpp_quote("#define MS_E_BUSY MS_ERROR_CODE(6)")
+cpp_quote("#define MS_E_NOTINIT MS_ERROR_CODE(7)")
+cpp_quote("#define MS_E_SOURCEALREADYDEFINED MS_ERROR_CODE(8)")
+cpp_quote("#define MS_E_INVALIDSTREAMTYPE MS_ERROR_CODE(9)")
+cpp_quote("#define MS_E_NOTRUNNING MS_ERROR_CODE(10)")
+
+cpp_quote("DEFINE_GUID(MSPID_PrimaryVideo, 0xa35ff56a, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+cpp_quote("DEFINE_GUID(MSPID_PrimaryAudio, 0xa35ff56b, 0x9fda, 0x11d0, 0x8f, 0xdf, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
+
+cpp_quote("#if 0")
+typedef void* PAPCFUNC;
+cpp_quote("#endif")
+
+typedef LONGLONG STREAM_TIME;
+
+typedef GUID MSPID;
+typedef REFGUID REFMSPID;
+
+typedef enum {
+ STREAMTYPE_READ = 0,
+ STREAMTYPE_WRITE = 1,
+ STREAMTYPE_TRANSFORM = 2
+} STREAM_TYPE;
+
+typedef enum {
+ STREAMSTATE_STOP = 0,
+ STREAMSTATE_RUN = 1
+} STREAM_STATE;
+
+
+typedef enum {
+ COMPSTAT_NOUPDATEOK = 0x00000001,
+ COMPSTAT_WAIT = 0x00000002,
+ COMPSTAT_ABORT = 0x00000004
+} COMPLETION_STATUS_FLAGS;
+
+enum {
+ MMSSF_HASCLOCK = 0x00000001,
+ MMSSF_SUPPORTSEEK = 0x00000002,
+ MMSSF_ASYNCHRONOUS = 0x00000004
+};
+
+enum {
+ SSUPDATE_ASYNC = 0x00000001,
+ SSUPDATE_CONTINUOUS = 0x00000002
+};
+
+interface IMultiMediaStream;
+interface IMediaStream;
+interface IStreamSample;
+
+
+[
+object,
+local,
+uuid(B502D1BC-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMultiMediaStream : IUnknown {
+
+ HRESULT GetInformation(
+ [out, optional] DWORD *pdwFlags,
+ [out, optional] STREAM_TYPE *pStreamType);
+
+ HRESULT GetMediaStream(
+ [in] REFMSPID idPurpose,
+ [out] IMediaStream **ppMediaStream);
+
+ HRESULT EnumMediaStreams(
+ [in] long Index,
+ [out] IMediaStream **ppMediaStream);
+
+ HRESULT GetState(
+ [out] STREAM_STATE *pCurrentState);
+
+ HRESULT SetState(
+ [in] STREAM_STATE NewState);
+
+ HRESULT GetTime(
+ [out] STREAM_TIME *pCurrentTime);
+
+ HRESULT GetDuration(
+ [out] STREAM_TIME *pDuration);
+
+ HRESULT Seek(
+ [in] STREAM_TIME SeekTime);
+
+ HRESULT GetEndOfStreamEventHandle(
+ [out] HANDLE *phEOS);
+}
+
+
+[
+object,
+uuid(B502D1BD-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IMediaStream : IUnknown {
+
+ HRESULT GetMultiMediaStream(
+ [out] IMultiMediaStream **ppMultiMediaStream);
+
+ HRESULT GetInformation(
+ [out, optional] MSPID *pPurposeId,
+ [out, optional] STREAM_TYPE *pType);
+
+ HRESULT SetSameFormat(
+ [in] IMediaStream *pStreamThatHasDesiredFormat,
+ [in] DWORD dwFlags);
+
+ HRESULT AllocateSample(
+ [in] DWORD dwFlags,
+ [out] IStreamSample **ppSample);
+
+ HRESULT CreateSharedSample(
+ [in] IStreamSample *pExistingSample,
+ [in] DWORD dwFlags,
+ [out] IStreamSample **ppNewSample);
+
+ HRESULT SendEndOfStream(DWORD dwFlags);
+}
+
+
+[
+object,
+local,
+uuid(B502D1BE-9A57-11d0-8FDE-00C04FD9189D),
+pointer_default(unique)
+]
+interface IStreamSample : IUnknown {
+
+ HRESULT GetMediaStream(
+ [in] IMediaStream **ppMediaStream);
+
+ HRESULT GetSampleTimes(
+ [out, optional] STREAM_TIME * pStartTime,
+ [out, optional] STREAM_TIME * pEndTime,
+ [out, optional] STREAM_TIME * pCurrentTime);
+
+ HRESULT SetSampleTimes(
+ [in, optional] const STREAM_TIME *pStartTime,
+ [in, optional] const STREAM_TIME *pEndTime);
+
+ HRESULT Update(
+ [in] DWORD dwFlags,
+ [in, optional] HANDLE hEvent,
+ [in, optional] PAPCFUNC pfnAPC,
+ [in, optional] DWORD dwAPCData);
+
+ HRESULT CompletionStatus(
+ [in] DWORD dwFlags,
+ [in, optional] DWORD dwMilliseconds);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h
new file mode 100644
index 00000000..9325c655
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mmsystem.h
@@ -0,0 +1,2531 @@
+/*
+ * MMSYSTEM - Multimedia Wine Extension ... :-)
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MMSYSTEM_H
+#define __WINE_MMSYSTEM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LPSTR HPSTR; /* a huge version of LPSTR */
+typedef LPCSTR HPCSTR; /* a huge version of LPCSTR */
+typedef UINT* LPUINT;
+
+DECLARE_HANDLE(HDRVR);
+DECLARE_HANDLE(HWAVE);
+DECLARE_HANDLE(HWAVEIN);
+DECLARE_HANDLE(HWAVEOUT);
+DECLARE_HANDLE(HMIDI);
+DECLARE_HANDLE(HMIDIIN);
+DECLARE_HANDLE(HMIDIOUT);
+DECLARE_HANDLE(HMIDISTRM);
+DECLARE_HANDLE(HMIXER);
+DECLARE_HANDLE(HMIXEROBJ);
+DECLARE_HANDLE(HMMIO);
+
+typedef HMIDI *LPHMIDI;
+typedef HMIDIIN *LPHMIDIIN;
+typedef HMIDIOUT *LPHMIDIOUT;
+typedef HMIDISTRM *LPHMIDISTRM;
+typedef HMIXER *LPHMIXER;
+typedef HMIXEROBJ *LPHMIXEROBJ;
+typedef HWAVEIN *LPHWAVEIN;
+typedef HWAVEOUT *LPHWAVEOUT;
+
+#include <pshpack1.h>
+
+typedef LRESULT (CALLBACK *DRIVERPROC)(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);
+
+#define MAXWAVEDRIVERS 10
+#define MAXMIDIDRIVERS 10
+#define MAXAUXDRIVERS 10
+#define MAXMCIDRIVERS 32
+#define MAXMIXERDRIVERS 10
+
+#define MAXPNAMELEN 32 /* max product name length (including NULL) */
+#define MAXERRORLENGTH 256 /* max error text length (including NULL) */
+#define MAX_JOYSTICKOEMVXDNAME 260
+
+#ifndef _MCIERROR_
+#define _MCIERROR_
+typedef DWORD MCIERROR;
+#endif
+typedef UINT MMVERSION;
+#ifndef _MCIDEVICEID_
+#define _MCIDEVICEID_
+typedef UINT MCIDEVICEID;
+#endif
+typedef UINT MMRESULT;
+
+typedef struct mmtime_tag {
+ UINT wType;
+ union {
+ DWORD ms;
+ DWORD sample;
+ DWORD cb;
+ DWORD ticks;
+ struct {
+ BYTE hour;
+ BYTE min;
+ BYTE sec;
+ BYTE frame;
+ BYTE fps;
+ BYTE dummy;
+ BYTE pad[2];
+ } smpte;
+ struct {
+ DWORD songptrpos;
+ } midi;
+ } u;
+} MMTIME, *PMMTIME, *LPMMTIME;
+
+#define TIME_MS 0x0001 /* time in milliseconds */
+#define TIME_SAMPLES 0x0002 /* number of wave samples */
+#define TIME_BYTES 0x0004 /* current byte offset */
+#define TIME_SMPTE 0x0008 /* SMPTE time */
+#define TIME_MIDI 0x0010 /* MIDI time */
+#define TIME_TICKS 0x0020 /* MIDI ticks */
+
+#define MM_JOY1MOVE 0x3A0 /* joystick */
+#define MM_JOY2MOVE 0x3A1
+#define MM_JOY1ZMOVE 0x3A2
+#define MM_JOY2ZMOVE 0x3A3
+#define MM_JOY1BUTTONDOWN 0x3B5
+#define MM_JOY2BUTTONDOWN 0x3B6
+#define MM_JOY1BUTTONUP 0x3B7
+#define MM_JOY2BUTTONUP 0x3B8
+
+#define MM_MCINOTIFY 0x3B9 /* MCI */
+
+#define MM_WOM_OPEN 0x3BB /* waveform output */
+#define MM_WOM_CLOSE 0x3BC
+#define MM_WOM_DONE 0x3BD
+
+#define MM_WIM_OPEN 0x3BE /* waveform input */
+#define MM_WIM_CLOSE 0x3BF
+#define MM_WIM_DATA 0x3C0
+
+#define MM_MIM_OPEN 0x3C1 /* MIDI input */
+#define MM_MIM_CLOSE 0x3C2
+#define MM_MIM_DATA 0x3C3
+#define MM_MIM_LONGDATA 0x3C4
+#define MM_MIM_ERROR 0x3C5
+#define MM_MIM_LONGERROR 0x3C6
+
+#define MM_MOM_OPEN 0x3C7 /* MIDI output */
+#define MM_MOM_CLOSE 0x3C8
+#define MM_MOM_DONE 0x3C9
+#define MM_MOM_POSITIONCB 0x3CA
+
+#define MM_MIM_MOREDATA 0x3CC
+
+#define MM_MIXM_LINE_CHANGE 0x3D0
+#define MM_MIXM_CONTROL_CHANGE 0x3D1
+
+#define MMSYSERR_BASE 0
+#define WAVERR_BASE 32
+#define MIDIERR_BASE 64
+#define TIMERR_BASE 96
+#define JOYERR_BASE 160
+#define MCIERR_BASE 256
+
+#define MCI_STRING_OFFSET 512
+#define MCI_VD_OFFSET 1024
+#define MCI_CD_OFFSET 1088
+#define MCI_WAVE_OFFSET 1152
+#define MCI_SEQ_OFFSET 1216
+
+#define MMSYSERR_NOERROR 0
+#define MMSYSERR_ERROR (MMSYSERR_BASE + 1)
+#define MMSYSERR_BADDEVICEID (MMSYSERR_BASE + 2)
+#define MMSYSERR_NOTENABLED (MMSYSERR_BASE + 3)
+#define MMSYSERR_ALLOCATED (MMSYSERR_BASE + 4)
+#define MMSYSERR_INVALHANDLE (MMSYSERR_BASE + 5)
+#define MMSYSERR_NODRIVER (MMSYSERR_BASE + 6)
+#define MMSYSERR_NOMEM (MMSYSERR_BASE + 7)
+#define MMSYSERR_NOTSUPPORTED (MMSYSERR_BASE + 8)
+#define MMSYSERR_BADERRNUM (MMSYSERR_BASE + 9)
+#define MMSYSERR_INVALFLAG (MMSYSERR_BASE + 10)
+#define MMSYSERR_INVALPARAM (MMSYSERR_BASE + 11)
+#define MMSYSERR_HANDLEBUSY (MMSYSERR_BASE + 12)
+#define MMSYSERR_INVALIDALIAS (MMSYSERR_BASE + 13)
+#define MMSYSERR_BADDB (MMSYSERR_BASE + 14)
+#define MMSYSERR_KEYNOTFOUND (MMSYSERR_BASE + 15)
+#define MMSYSERR_READERROR (MMSYSERR_BASE + 16)
+#define MMSYSERR_WRITEERROR (MMSYSERR_BASE + 17)
+#define MMSYSERR_DELETEERROR (MMSYSERR_BASE + 18)
+#define MMSYSERR_VALNOTFOUND (MMSYSERR_BASE + 19)
+#define MMSYSERR_NODRIVERCB (MMSYSERR_BASE + 20)
+#define MMSYSERR_MOREDATA (MMSYSERR_BASE + 21)
+#define MMSYSERR_LASTERROR (MMSYSERR_BASE + 21)
+
+#define CALLBACK_TYPEMASK __MSABI_LONG(0x00070000) /* callback type mask */
+#define CALLBACK_NULL __MSABI_LONG(0x00000000) /* no callback */
+#define CALLBACK_WINDOW __MSABI_LONG(0x00010000) /* dwCallback is a HWND */
+#define CALLBACK_TASK __MSABI_LONG(0x00020000) /* dwCallback is a HTASK */
+#define CALLBACK_THREAD (CALLBACK_TASK) /* dwCallback is a thread ID */
+#define CALLBACK_FUNCTION __MSABI_LONG(0x00030000) /* dwCallback is a FARPROC */
+#define CALLBACK_EVENT __MSABI_LONG(0x00050000) /* dwCallback is an EVENT Handler */
+
+#define DRV_LOAD 0x0001
+#define DRV_ENABLE 0x0002
+#define DRV_OPEN 0x0003
+#define DRV_CLOSE 0x0004
+#define DRV_DISABLE 0x0005
+#define DRV_FREE 0x0006
+#define DRV_CONFIGURE 0x0007
+#define DRV_QUERYCONFIGURE 0x0008
+#define DRV_INSTALL 0x0009
+#define DRV_REMOVE 0x000A
+#define DRV_EXITSESSION 0x000B
+#define DRV_EXITAPPLICATION 0x000C
+#define DRV_POWER 0x000F
+
+#define DRV_RESERVED 0x0800
+#define DRV_MCI_FIRST DRV_RESERVED
+#define DRV_MCI_LAST (0xFFF + DRV_MCI_FIRST)
+#define DRV_USER 0x4000
+
+#define DRVCNF_CANCEL 0x0000
+#define DRVCNF_OK 0x0001
+#define DRVCNF_RESTART 0x0002
+
+#define DRVEA_NORMALEXIT 0x0001
+#define DRVEA_ABNORMALEXIT 0x0002
+
+#define DRV_SUCCESS 0x0001
+#define DRV_FAILURE 0x0000
+
+#define GND_FIRSTINSTANCEONLY 0x00000001
+
+#define GND_FORWARD 0x00000000
+#define GND_REVERSE 0x00000002
+
+typedef struct tagDRVCONFIGINFO {
+ DWORD dwDCISize;
+ LPCWSTR lpszDCISectionName;
+ LPCWSTR lpszDCIAliasName;
+} DRVCONFIGINFO, *LPDRVCONFIGINFO;
+
+
+LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM);
+/* this sounds odd, but it's the way it is. OpenDriverA even disappeared
+ * from latest SDK
+ */
+HDRVR WINAPI OpenDriverA(LPCSTR szDriverName, LPCSTR szSectionName,
+ LPARAM lParam2);
+HDRVR WINAPI OpenDriver(LPCWSTR szDriverName, LPCWSTR szSectionName,
+ LPARAM lParam2);
+LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
+LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT message,
+ LPARAM lParam1, LPARAM lParam2);
+HMODULE WINAPI GetDriverModuleHandle(HDRVR hDriver);
+
+DWORD WINAPI GetDriverFlags(HDRVR hDriver);
+
+typedef void (CALLBACK *LPDRVCALLBACK)(HDRVR,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);
+
+#define MM_MICROSOFT 1 /* Microsoft Corp. */
+#define MM_CREATIVE 2 /* Creative labs */
+
+#define MM_MIDI_MAPPER 1 /* MIDI Mapper */
+#define MM_WAVE_MAPPER 2 /* Wave Mapper */
+
+#define MM_SNDBLST_MIDIOUT 3 /* Sound Blaster MIDI output port */
+#define MM_SNDBLST_MIDIIN 4 /* Sound Blaster MIDI input port */
+#define MM_SNDBLST_SYNTH 5 /* Sound Blaster internal synthesizer */
+#define MM_SNDBLST_WAVEOUT 6 /* Sound Blaster waveform output */
+#define MM_SNDBLST_WAVEIN 7 /* Sound Blaster waveform input */
+
+#define MM_ADLIB 9 /* Ad Lib-compatible synthesizer */
+
+#define MM_MPU401_MIDIOUT 10 /* MPU401-compatible MIDI output port */
+#define MM_MPU401_MIDIIN 11 /* MPU401-compatible MIDI input port */
+
+#define MM_PC_JOYSTICK 12 /* Joystick adapter */
+
+#define MM_CREATIVE_SBP16_WAVEOUT 104
+
+UINT WINAPI mmsystemGetVersion(void);
+BOOL WINAPI sndPlaySoundA(LPCSTR lpszSound, UINT fuSound);
+BOOL WINAPI sndPlaySoundW(LPCWSTR lpszSound, UINT fuSound);
+#define sndPlaySound WINELIB_NAME_AW(sndPlaySound)
+BOOL WINAPI PlaySoundA(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);
+BOOL WINAPI PlaySoundW(LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound);
+#define PlaySound WINELIB_NAME_AW(PlaySound)
+
+#define SND_SYNC 0x0000 /* play synchronously (default) */
+#define SND_ASYNC 0x0001 /* play asynchronously */
+#define SND_NODEFAULT 0x0002 /* don't use default sound */
+#define SND_MEMORY 0x0004 /* lpszSoundName points to a memory file */
+#define SND_LOOP 0x0008 /* loop the sound until next sndPlaySound */
+#define SND_NOSTOP 0x0010 /* don't stop any currently playing sound */
+
+#define SND_NOWAIT __MSABI_LONG(0x00002000) /* don't wait if the driver is busy */
+#define SND_ALIAS __MSABI_LONG(0x00010000) /* name is a registry alias */
+#define SND_ALIAS_ID __MSABI_LONG(0x00110000) /* alias is a predefined ID */
+#define SND_FILENAME __MSABI_LONG(0x00020000) /* name is file name */
+#define SND_RESOURCE __MSABI_LONG(0x00040004) /* name is resource name or atom */
+#define SND_PURGE __MSABI_LONG(0x00000040) /* purge all sounds */
+#define SND_APPLICATION __MSABI_LONG(0x00000080) /* look for application specific association */
+
+#define SND_ALIAS_START 0
+
+#define sndAlias(ch0, ch1) (SND_ALIAS_START + ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8)))
+
+#define SND_ALIAS_SYSTEMASTERISK sndAlias('S', '*')
+#define SND_ALIAS_SYSTEMQUESTION sndAlias('S', '?')
+#define SND_ALIAS_SYSTEMHAND sndAlias('S', 'H')
+#define SND_ALIAS_SYSTEMEXIT sndAlias('S', 'E')
+#define SND_ALIAS_SYSTEMSTART sndAlias('S', 'S')
+#define SND_ALIAS_SYSTEMWELCOME sndAlias('S', 'W')
+#define SND_ALIAS_SYSTEMEXCLAMATION sndAlias('S', '!')
+#define SND_ALIAS_SYSTEMDEFAULT sndAlias('S', 'D')
+
+/* waveform audio error return values */
+#define WAVERR_BADFORMAT (WAVERR_BASE + 0) /* unsupported wave format */
+#define WAVERR_STILLPLAYING (WAVERR_BASE + 1) /* still something playing */
+#define WAVERR_UNPREPARED (WAVERR_BASE + 2) /* header not prepared */
+#define WAVERR_SYNC (WAVERR_BASE + 3) /* device is synchronous */
+#define WAVERR_LASTERROR (WAVERR_BASE + 3) /* last error in range */
+
+typedef LPDRVCALLBACK LPWAVECALLBACK;
+
+#define WOM_OPEN MM_WOM_OPEN
+#define WOM_CLOSE MM_WOM_CLOSE
+#define WOM_DONE MM_WOM_DONE
+#define WIM_OPEN MM_WIM_OPEN
+#define WIM_CLOSE MM_WIM_CLOSE
+#define WIM_DATA MM_WIM_DATA
+
+#define WAVE_MAPPER (-1)
+
+#define WAVE_FORMAT_QUERY 0x0001
+#define WAVE_ALLOWSYNC 0x0002
+#define WAVE_MAPPED 0x0004
+#define WAVE_FORMAT_DIRECT 0x0008
+#define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
+
+typedef struct wavehdr_tag {
+ LPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD_PTR dwUser;
+ DWORD dwFlags;
+ DWORD dwLoops;
+ struct wavehdr_tag *lpNext;
+ DWORD_PTR reserved;
+} WAVEHDR, *PWAVEHDR, *NPWAVEHDR, *LPWAVEHDR;
+
+#define WHDR_DONE 0x00000001
+#define WHDR_PREPARED 0x00000002
+#define WHDR_BEGINLOOP 0x00000004
+#define WHDR_ENDLOOP 0x00000008
+#define WHDR_INQUEUE 0x00000010
+
+typedef struct tagWAVEOUTCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ DWORD dwSupport;
+} WAVEOUTCAPSA, *LPWAVEOUTCAPSA;
+
+typedef struct tagWAVEOUTCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ DWORD dwSupport;
+} WAVEOUTCAPSW, *LPWAVEOUTCAPSW;
+DECL_WINELIB_TYPE_AW(WAVEOUTCAPS)
+DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS)
+
+typedef struct tagWAVEOUTCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} WAVEOUTCAPS2A, *LPWAVEOUTCAPS2A;
+
+typedef struct tagWAVEOUTCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} WAVEOUTCAPS2W, *LPWAVEOUTCAPS2W;
+DECL_WINELIB_TYPE_AW(WAVEOUTCAPS2)
+DECL_WINELIB_TYPE_AW(LPWAVEOUTCAPS2)
+
+#define WAVECAPS_PITCH 0x0001 /* supports pitch control */
+#define WAVECAPS_PLAYBACKRATE 0x0002 /* supports playback rate control */
+#define WAVECAPS_VOLUME 0x0004 /* supports volume control */
+#define WAVECAPS_LRVOLUME 0x0008 /* separate left-right volume control */
+#define WAVECAPS_SYNC 0x0010 /* driver is synchronous and playing is blocking */
+#define WAVECAPS_SAMPLEACCURATE 0x0020 /* position is sample accurate */
+#define WAVECAPS_DIRECTSOUND 0x0040 /* ? */
+
+typedef struct tagWAVEINCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+} WAVEINCAPSA, *LPWAVEINCAPSA;
+typedef struct tagWAVEINCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+} WAVEINCAPSW, *LPWAVEINCAPSW;
+DECL_WINELIB_TYPE_AW(WAVEINCAPS)
+DECL_WINELIB_TYPE_AW(LPWAVEINCAPS)
+
+typedef struct tagWAVEINCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} WAVEINCAPS2A, *LPWAVEINCAPS2A;
+typedef struct tagWAVEINCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwFormats;
+ WORD wChannels;
+ WORD wReserved1;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} WAVEINCAPS2W, *LPWAVEINCAPS2W;
+DECL_WINELIB_TYPE_AW(WAVEINCAPS2)
+DECL_WINELIB_TYPE_AW(LPWAVEINCAPS2)
+
+#define WAVE_INVALIDFORMAT 0x00000000 /* invalid format */
+#define WAVE_FORMAT_1M08 0x00000001 /* 11.025 kHz, Mono, 8-bit */
+#define WAVE_FORMAT_1S08 0x00000002 /* 11.025 kHz, Stereo, 8-bit */
+#define WAVE_FORMAT_1M16 0x00000004 /* 11.025 kHz, Mono, 16-bit */
+#define WAVE_FORMAT_1S16 0x00000008 /* 11.025 kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_2M08 0x00000010 /* 22.05 kHz, Mono, 8-bit */
+#define WAVE_FORMAT_2S08 0x00000020 /* 22.05 kHz, Stereo, 8-bit */
+#define WAVE_FORMAT_2M16 0x00000040 /* 22.05 kHz, Mono, 16-bit */
+#define WAVE_FORMAT_2S16 0x00000080 /* 22.05 kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_4M08 0x00000100 /* 44.1 kHz, Mono, 8-bit */
+#define WAVE_FORMAT_4S08 0x00000200 /* 44.1 kHz, Stereo, 8-bit */
+#define WAVE_FORMAT_4M16 0x00000400 /* 44.1 kHz, Mono, 16-bit */
+#define WAVE_FORMAT_4S16 0x00000800 /* 44.1 kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_48M08 0x00001000 /* 48 kHz, Mono, 8-bit */
+#define WAVE_FORMAT_48S08 0x00002000 /* 48 kHz, Stereo, 8-bit */
+#define WAVE_FORMAT_48M16 0x00004000 /* 48 kHz, Mono, 16-bit */
+#define WAVE_FORMAT_48S16 0x00008000 /* 48 kHz, Stereo, 16-bit */
+#define WAVE_FORMAT_96M08 0x00010000 /* 96 kHz, Mono, 8-bit */
+#define WAVE_FORMAT_96S08 0x00020000 /* 96 kHz, Stereo, 8-bit */
+#define WAVE_FORMAT_96M16 0x00040000 /* 96 kHz, Mono, 16-bit */
+#define WAVE_FORMAT_96S16 0x00080000 /* 96 kHz, Stereo, 16-bit */
+
+/* General format structure common to all formats, same for Win16 and Win32 */
+typedef struct waveformat_tag {
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+} WAVEFORMAT, *LPWAVEFORMAT;
+
+#define WAVE_FORMAT_PCM 1
+
+typedef struct pcmwaveformat_tag {
+ WAVEFORMAT wf;
+ WORD wBitsPerSample;
+} PCMWAVEFORMAT, *LPPCMWAVEFORMAT;
+
+#ifndef _WAVEFORMATEX_
+#define _WAVEFORMATEX_
+/* ditto same for Win16 / Win32 */
+typedef struct tWAVEFORMATEX {
+ WORD wFormatTag;
+ WORD nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ WORD nBlockAlign;
+ WORD wBitsPerSample;
+ WORD cbSize;
+} WAVEFORMATEX, *LPWAVEFORMATEX, *NPWAVEFORMATEX, *PWAVEFORMATEX;
+#endif
+typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
+
+UINT WINAPI waveOutGetNumDevs(void);
+UINT WINAPI waveOutGetDevCapsA(UINT_PTR,LPWAVEOUTCAPSA,UINT);
+UINT WINAPI waveOutGetDevCapsW(UINT_PTR,LPWAVEOUTCAPSW,UINT);
+#define waveOutGetDevCaps WINELIB_NAME_AW(waveOutGetDevCaps)
+UINT WINAPI waveOutGetVolume(HWAVEOUT,DWORD*);
+UINT WINAPI waveOutSetVolume(HWAVEOUT,DWORD);
+UINT WINAPI waveOutGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI waveOutGetErrorTextW(UINT,LPWSTR,UINT);
+#define waveOutGetErrorText WINELIB_NAME_AW(waveOutGetErrorText)
+MMRESULT WINAPI waveOutOpen(HWAVEOUT*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);
+UINT WINAPI waveOutClose(HWAVEOUT);
+UINT WINAPI waveOutPrepareHeader(HWAVEOUT,WAVEHDR*,UINT);
+UINT WINAPI waveOutUnprepareHeader(HWAVEOUT,WAVEHDR*,UINT);
+UINT WINAPI waveOutWrite(HWAVEOUT,WAVEHDR*,UINT);
+UINT WINAPI waveOutPause(HWAVEOUT);
+UINT WINAPI waveOutRestart(HWAVEOUT);
+UINT WINAPI waveOutReset(HWAVEOUT);
+UINT WINAPI waveOutBreakLoop(HWAVEOUT);
+UINT WINAPI waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT);
+UINT WINAPI waveOutGetPitch(HWAVEOUT,DWORD*);
+UINT WINAPI waveOutSetPitch(HWAVEOUT,DWORD);
+UINT WINAPI waveOutGetPlaybackRate(HWAVEOUT,DWORD*);
+UINT WINAPI waveOutSetPlaybackRate(HWAVEOUT,DWORD);
+UINT WINAPI waveOutGetID(HWAVEOUT,UINT*);
+UINT WINAPI waveOutMessage(HWAVEOUT,UINT,DWORD_PTR,DWORD_PTR);
+UINT WINAPI waveInGetNumDevs(void);
+UINT WINAPI waveInGetDevCapsA(UINT_PTR,LPWAVEINCAPSA,UINT);
+UINT WINAPI waveInGetDevCapsW(UINT_PTR,LPWAVEINCAPSW,UINT);
+#define waveInGetDevCaps WINELIB_NAME_AW(waveInGetDevCaps)
+UINT WINAPI waveInGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI waveInGetErrorTextW(UINT,LPWSTR,UINT);
+#define waveInGetErrorText WINELIB_NAME_AW(waveInGetErrorText)
+MMRESULT WINAPI waveInOpen(HWAVEIN*,UINT,LPCWAVEFORMATEX,DWORD_PTR,DWORD_PTR,DWORD);
+UINT WINAPI waveInClose(HWAVEIN);
+UINT WINAPI waveInPrepareHeader(HWAVEIN,WAVEHDR*,UINT);
+UINT WINAPI waveInUnprepareHeader(HWAVEIN,WAVEHDR*,UINT);
+UINT WINAPI waveInAddBuffer(HWAVEIN,WAVEHDR*,UINT);
+UINT WINAPI waveInStart(HWAVEIN);
+UINT WINAPI waveInStop(HWAVEIN);
+UINT WINAPI waveInReset(HWAVEIN);
+UINT WINAPI waveInGetPosition(HWAVEIN,LPMMTIME,UINT);
+UINT WINAPI waveInGetID(HWAVEIN,UINT*);
+UINT WINAPI waveInMessage(HWAVEIN,UINT,DWORD_PTR,DWORD_PTR);
+
+#define MIDIERR_UNPREPARED (MIDIERR_BASE + 0)
+#define MIDIERR_STILLPLAYING (MIDIERR_BASE + 1)
+#define MIDIERR_NOMAP (MIDIERR_BASE + 2)
+#define MIDIERR_NOTREADY (MIDIERR_BASE + 3)
+#define MIDIERR_NODEVICE (MIDIERR_BASE + 4)
+#define MIDIERR_INVALIDSETUP (MIDIERR_BASE + 5)
+#define MIDIERR_BADOPENMODE (MIDIERR_BASE + 6)
+#define MIDIERR_DONT_CONTINUE (MIDIERR_BASE + 7)
+#define MIDIERR_LASTERROR (MIDIERR_BASE + 7)
+
+typedef LPDRVCALLBACK LPMIDICALLBACK;
+#define MIDIPATCHSIZE 128
+typedef WORD PATCHARRAY[MIDIPATCHSIZE];
+typedef WORD *LPPATCHARRAY;
+typedef WORD KEYARRAY[MIDIPATCHSIZE];
+typedef WORD *LPKEYARRAY;
+
+#define MIM_OPEN MM_MIM_OPEN
+#define MIM_CLOSE MM_MIM_CLOSE
+#define MIM_DATA MM_MIM_DATA
+#define MIM_LONGDATA MM_MIM_LONGDATA
+#define MIM_ERROR MM_MIM_ERROR
+#define MIM_LONGERROR MM_MIM_LONGERROR
+#define MIM_MOREDATA MM_MIM_MOREDATA
+
+#define MOM_OPEN MM_MOM_OPEN
+#define MOM_CLOSE MM_MOM_CLOSE
+#define MOM_DONE MM_MOM_DONE
+#define MOM_POSITIONCB MM_MOM_POSITIONCB
+
+/* device ID for MIDI mapper */
+
+#define MIDIMAPPER (-1)
+#define MIDI_MAPPER (-1)
+
+/* Only on Win95 and up */
+#define MIDI_IO_STATUS __MSABI_LONG(0x00000020)
+
+/* flags for wFlags parm of
+ midiOutCachePatches(),
+ midiOutCacheDrumPatches() */
+#define MIDI_CACHE_ALL 1
+#define MIDI_CACHE_BESTFIT 2
+#define MIDI_CACHE_QUERY 3
+#define MIDI_UNCACHE 4
+
+typedef struct tagMIDIOUTCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+} MIDIOUTCAPSA, *LPMIDIOUTCAPSA;
+
+typedef struct tagMIDIOUTCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+} MIDIOUTCAPSW, *LPMIDIOUTCAPSW;
+
+DECL_WINELIB_TYPE_AW(MIDIOUTCAPS)
+DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS)
+
+typedef struct tagMIDIOUTCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} MIDIOUTCAPS2A, *LPMIDIOUTCAPS2A;
+
+typedef struct tagMIDIOUTCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wVoices;
+ WORD wNotes;
+ WORD wChannelMask;
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} MIDIOUTCAPS2W, *LPMIDIOUTCAPS2W;
+
+DECL_WINELIB_TYPE_AW(MIDIOUTCAPS2)
+DECL_WINELIB_TYPE_AW(LPMIDIOUTCAPS2)
+
+#define MOD_MIDIPORT 1 /* output port */
+#define MOD_SYNTH 2 /* generic internal synth */
+#define MOD_SQSYNTH 3 /* square wave internal synth */
+#define MOD_FMSYNTH 4 /* FM internal synth */
+#define MOD_MAPPER 5 /* MIDI mapper */
+#define MOD_WAVETABLE 6 /* hardware wavetable internal synth */
+#define MOD_SWSYNTH 7 /* software synth */
+
+#define MIDICAPS_VOLUME 0x0001 /* supports volume control */
+#define MIDICAPS_LRVOLUME 0x0002 /* separate left-right volume control */
+#define MIDICAPS_CACHE 0x0004
+#define MIDICAPS_STREAM 0x0008 /* capable of supporting stream buffer */
+
+typedef struct tagMIDIINCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwSupport;
+} MIDIINCAPSA, *LPMIDIINCAPSA;
+
+typedef struct tagMIDIINCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwSupport;
+} MIDIINCAPSW, *LPMIDIINCAPSW;
+
+DECL_WINELIB_TYPE_AW(MIDIINCAPS)
+DECL_WINELIB_TYPE_AW(LPMIDIINCAPS)
+
+typedef struct tagMIDIINCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} MIDIINCAPS2A, *LPMIDIINCAPS2A;
+
+typedef struct tagMIDIINCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} MIDIINCAPS2W, *LPMIDIINCAPS2W;
+
+DECL_WINELIB_TYPE_AW(MIDIINCAPS2)
+DECL_WINELIB_TYPE_AW(LPMIDIINCAPS2)
+
+/* It seems that Win32 has a slightly different structure than Win 16.
+ * sigh....
+ */
+typedef struct midihdr_tag {
+ LPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD_PTR dwUser;
+ DWORD dwFlags;
+ struct midihdr_tag *lpNext;
+ DWORD_PTR reserved;
+ /* Win 32 extended the structure with these 2 fields */
+ DWORD dwOffset;
+ DWORD_PTR dwReserved[8];
+} MIDIHDR, *LPMIDIHDR;
+
+#define MHDR_DONE 0x00000001 /* done bit */
+#define MHDR_PREPARED 0x00000002 /* set if header prepared */
+#define MHDR_INQUEUE 0x00000004 /* reserved for driver */
+#define MHDR_ISSTRM 0x00000008 /* data is sent by Stream functions */
+
+typedef struct midiproptempo_tag {
+ DWORD cbStruct;
+ DWORD dwTempo;
+} MIDIPROPTEMPO, *LPMIDIPROPTEMPO;
+
+typedef struct midiproptimediv_tag {
+ DWORD cbStruct;
+ DWORD dwTimeDiv;
+} MIDIPROPTIMEDIV, *LPMIDIPROPTIMEDIV;
+
+#define MIDIPROP_GET 0x40000000
+#define MIDIPROP_SET 0x80000000
+#define MIDIPROP_TEMPO 0x00000002
+#define MIDIPROP_TIMEDIV 0x00000001
+
+typedef struct midievent_tag {
+ DWORD dwDeltaTime; /* Time, in MIDI ticks, between the previous
+ * event and the current event. */
+ DWORD dwStreamID; /* Reserved; must be zero. */
+ DWORD dwEvent; /* event => see MEVT_XXX macros */
+ DWORD dwParms[1]; /* extra pmts to dwEvent if F_LONG is set */
+} MIDIEVENT, *LPMIDIEVENT;
+
+#define MEVT_EVENTTYPE(x) ((BYTE) (((x)>>24)&0xFF))
+#define MEVT_EVENTPARM(x) ((DWORD) ((x)&0x00FFFFFF))
+
+#define MEVT_F_CALLBACK __MSABI_LONG(0x40000000)
+#define MEVT_F_LONG __MSABI_LONG(0x80000000)
+#define MEVT_F_SHORT __MSABI_LONG(0x00000000)
+#define MEVT_COMMENT ((BYTE)0x82)
+#define MEVT_LONGMSG ((BYTE)0x80)
+#define MEVT_NOP ((BYTE)0x02)
+#define MEVT_SHORTMSG ((BYTE)0x00)
+#define MEVT_TEMPO ((BYTE)0x01)
+#define MEVT_VERSION ((BYTE)0x84)
+
+UINT WINAPI midiOutGetNumDevs(void);
+UINT WINAPI midiOutGetDevCapsA(UINT_PTR,LPMIDIOUTCAPSA,UINT);
+UINT WINAPI midiOutGetDevCapsW(UINT_PTR,LPMIDIOUTCAPSW,UINT);
+#define midiOutGetDevCaps WINELIB_NAME_AW(midiOutGetDevCaps)
+UINT WINAPI midiOutGetVolume(HMIDIOUT,DWORD*);
+UINT WINAPI midiOutSetVolume(HMIDIOUT,DWORD);
+UINT WINAPI midiOutGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI midiOutGetErrorTextW(UINT,LPWSTR,UINT);
+#define midiOutGetErrorText WINELIB_NAME_AW(midiOutGetErrorText)
+UINT WINAPI midiOutOpen(LPHMIDIOUT,UINT,DWORD_PTR,DWORD_PTR,DWORD);
+UINT WINAPI midiOutClose(HMIDIOUT);
+UINT WINAPI midiOutPrepareHeader(HMIDIOUT,MIDIHDR*,UINT);
+UINT WINAPI midiOutUnprepareHeader(HMIDIOUT,MIDIHDR*,UINT);
+UINT WINAPI midiOutShortMsg(HMIDIOUT,DWORD);
+UINT WINAPI midiOutLongMsg(HMIDIOUT,MIDIHDR*,UINT);
+UINT WINAPI midiOutReset(HMIDIOUT);
+UINT WINAPI midiOutCachePatches(HMIDIOUT,UINT,WORD*,UINT);
+UINT WINAPI midiOutCacheDrumPatches(HMIDIOUT,UINT,WORD*,UINT);
+UINT WINAPI midiOutGetID(HMIDIOUT,UINT*);
+UINT WINAPI midiOutMessage(HMIDIOUT,UINT,DWORD_PTR,DWORD_PTR);
+
+UINT WINAPI midiInGetNumDevs(void);
+UINT WINAPI midiInGetDevCapsA(UINT_PTR,LPMIDIINCAPSA,UINT);
+UINT WINAPI midiInGetDevCapsW(UINT_PTR,LPMIDIINCAPSW,UINT);
+#define midiInGetDevCaps WINELIB_NAME_AW(midiInGetDevCaps)
+UINT WINAPI midiInGetErrorTextA(UINT,LPSTR,UINT);
+UINT WINAPI midiInGetErrorTextW(UINT,LPWSTR,UINT);
+#define midiInGetErrorText WINELIB_NAME_AW(midiInGetErrorText)
+UINT WINAPI midiInOpen(LPHMIDIIN,UINT,DWORD_PTR,DWORD_PTR,DWORD);
+UINT WINAPI midiInClose(HMIDIIN);
+UINT WINAPI midiInPrepareHeader(HMIDIIN,MIDIHDR*,UINT);
+UINT WINAPI midiInUnprepareHeader(HMIDIIN,MIDIHDR*,UINT);
+UINT WINAPI midiInAddBuffer(HMIDIIN,MIDIHDR*,UINT);
+UINT WINAPI midiInStart(HMIDIIN);
+UINT WINAPI midiInStop(HMIDIIN);
+UINT WINAPI midiInReset(HMIDIIN);
+UINT WINAPI midiInGetID(HMIDIIN,UINT*);
+UINT WINAPI midiInMessage(HMIDIIN,UINT,DWORD_PTR,DWORD_PTR);
+MMRESULT WINAPI midiStreamClose(HMIDISTRM hms);
+MMRESULT WINAPI midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD_PTR,DWORD_PTR,DWORD);
+MMRESULT WINAPI midiStreamOut(HMIDISTRM hms, LPMIDIHDR lpMidiHdr, UINT cbMidiHdr);
+MMRESULT WINAPI midiStreamPause(HMIDISTRM hms);
+MMRESULT WINAPI midiStreamPosition(HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt);
+MMRESULT WINAPI midiStreamProperty(HMIDISTRM hms, LPBYTE lpPropData, DWORD dwProperty);
+MMRESULT WINAPI midiStreamRestart(HMIDISTRM hms);
+MMRESULT WINAPI midiStreamStop(HMIDISTRM hms);
+
+#define AUX_MAPPER (-1)
+
+typedef struct tagAUXCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wReserved1;
+ DWORD dwSupport;
+} AUXCAPSA, *LPAUXCAPSA;
+
+typedef struct tagAUXCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wReserved1;
+ DWORD dwSupport;
+} AUXCAPSW, *LPAUXCAPSW;
+
+DECL_WINELIB_TYPE_AW(AUXCAPS)
+DECL_WINELIB_TYPE_AW(LPAUXCAPS)
+
+typedef struct tagAUXCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wReserved1;
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} AUXCAPS2A, *LPAUXCAPS2A;
+
+typedef struct tagAUXCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ WORD wTechnology;
+ WORD wReserved1;
+ DWORD dwSupport;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} AUXCAPS2W, *LPAUXCAPS2W;
+
+DECL_WINELIB_TYPE_AW(AUXCAPS2)
+DECL_WINELIB_TYPE_AW(LPAUXCAPS2)
+
+#define AUXCAPS_CDAUDIO 1 /* audio from internal CD-ROM drive */
+#define AUXCAPS_AUXIN 2 /* audio from auxiliary input jacks */
+
+#define AUXCAPS_VOLUME 0x0001 /* supports volume control */
+#define AUXCAPS_LRVOLUME 0x0002 /* separate left-right volume control */
+
+UINT WINAPI auxGetNumDevs(void);
+UINT WINAPI auxGetDevCapsA(UINT_PTR,LPAUXCAPSA,UINT);
+UINT WINAPI auxGetDevCapsW(UINT_PTR,LPAUXCAPSW,UINT);
+#define auxGetDevCaps WINELIB_NAME_AW(auxGetDevCaps)
+UINT WINAPI auxSetVolume(UINT,DWORD);
+UINT WINAPI auxGetVolume(UINT,LPDWORD);
+UINT WINAPI auxOutMessage(UINT,UINT,DWORD_PTR,DWORD_PTR);
+
+#define TIMERR_NOERROR (0) /* no error */
+#define TIMERR_NOCANDO (TIMERR_BASE+1) /* request not completed */
+#define TIMERR_STRUCT (TIMERR_BASE+33) /* time struct size */
+
+typedef void (CALLBACK *LPTIMECALLBACK)(UINT,UINT,DWORD_PTR,DWORD_PTR,DWORD_PTR);
+
+#define TIME_ONESHOT 0x0000 /* program timer for single event */
+#define TIME_PERIODIC 0x0001 /* program for continuous periodic event */
+#define TIME_CALLBACK_FUNCTION 0x0000 /* callback is function */
+#define TIME_CALLBACK_EVENT_SET 0x0010 /* callback is event - use SetEvent */
+#define TIME_CALLBACK_EVENT_PULSE 0x0020 /* callback is event - use PulseEvent */
+#define TIME_KILL_SYNCHRONOUS 0x0100
+
+typedef struct timecaps_tag {
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+} TIMECAPS, *LPTIMECAPS;
+
+
+MMRESULT WINAPI timeGetSystemTime(LPMMTIME,UINT);
+DWORD WINAPI timeGetTime(void); /* same for win32/win16 */
+MMRESULT WINAPI timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD_PTR,UINT);
+MMRESULT WINAPI timeKillEvent(UINT);
+MMRESULT WINAPI timeGetDevCaps(LPTIMECAPS,UINT);
+MMRESULT WINAPI timeBeginPeriod(UINT);
+MMRESULT WINAPI timeEndPeriod(UINT);
+
+#define JOYERR_NOERROR (0) /* no error */
+#define JOYERR_PARMS (JOYERR_BASE+5) /* bad parameters */
+#define JOYERR_NOCANDO (JOYERR_BASE+6) /* request not completed */
+#define JOYERR_UNPLUGGED (JOYERR_BASE+7) /* joystick is unplugged */
+
+/* JOYINFO, JOYINFOEX, MM_JOY* */
+#define JOY_BUTTON1 0x0001
+#define JOY_BUTTON2 0x0002
+#define JOY_BUTTON3 0x0004
+#define JOY_BUTTON4 0x0008
+#define JOY_BUTTON1CHG 0x0100
+#define JOY_BUTTON2CHG 0x0200
+#define JOY_BUTTON3CHG 0x0400
+#define JOY_BUTTON4CHG 0x0800
+
+#define JOYSTICKID1 0
+#define JOYSTICKID2 1
+
+/* JOYCAPS.wCaps */
+#define JOYCAPS_HASZ 0x0001
+#define JOYCAPS_HASR 0x0002
+#define JOYCAPS_HASU 0x0004
+#define JOYCAPS_HASV 0x0008
+#define JOYCAPS_HASPOV 0x0010
+#define JOYCAPS_POV4DIR 0x0020
+#define JOYCAPS_POVCTS 0x0040
+
+/* JOYINFOEX stuff */
+#define JOY_POVCENTERED (WORD) -1
+#define JOY_POVFORWARD 0
+#define JOY_POVRIGHT 9000
+#define JOY_POVBACKWARD 18000
+#define JOY_POVLEFT 27000
+
+#define JOY_RETURNX 0x00000001
+#define JOY_RETURNY 0x00000002
+#define JOY_RETURNZ 0x00000004
+#define JOY_RETURNR 0x00000008
+#define JOY_RETURNU 0x00000010
+#define JOY_RETURNV 0x00000020
+#define JOY_RETURNPOV 0x00000040
+#define JOY_RETURNBUTTONS 0x00000080
+#define JOY_RETURNRAWDATA 0x00000100
+#define JOY_RETURNPOVCTS 0x00000200
+#define JOY_RETURNCENTERED 0x00000400
+#define JOY_USEDEADZONE 0x00000800
+#define JOY_RETURNALL (JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | \
+ JOY_RETURNR | JOY_RETURNU | JOY_RETURNV | \
+ JOY_RETURNPOV | JOY_RETURNBUTTONS)
+#define JOY_CAL_READALWAYS 0x00010000
+#define JOY_CAL_READXYONLY 0x00020000
+#define JOY_CAL_READ3 0x00040000
+#define JOY_CAL_READ4 0x00080000
+#define JOY_CAL_READXONLY 0x00100000
+#define JOY_CAL_READYONLY 0x00200000
+#define JOY_CAL_READ5 0x00400000
+#define JOY_CAL_READ6 0x00800000
+#define JOY_CAL_READZONLY 0x01000000
+#define JOY_CAL_READRONLY 0x02000000
+#define JOY_CAL_READUONLY 0x04000000
+#define JOY_CAL_READVONLY 0x08000000
+
+typedef struct tagJOYCAPSA {
+ WORD wMid;
+ WORD wPid;
+ CHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ CHAR szRegKey[MAXPNAMELEN];
+ CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPSA, *LPJOYCAPSA;
+
+typedef struct tagJOYCAPSW {
+ WORD wMid;
+ WORD wPid;
+ WCHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ WCHAR szRegKey[MAXPNAMELEN];
+ WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPSW, *LPJOYCAPSW;
+DECL_WINELIB_TYPE_AW(JOYCAPS)
+DECL_WINELIB_TYPE_AW(LPJOYCAPS)
+
+typedef struct tagJOYCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ CHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ CHAR szRegKey[MAXPNAMELEN];
+ CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} JOYCAPS2A, *LPJOYCAPS2A;
+
+typedef struct tagJOYCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ WCHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ WCHAR szRegKey[MAXPNAMELEN];
+ WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} JOYCAPS2W, *LPJOYCAPS2W;
+DECL_WINELIB_TYPE_AW(JOYCAPS2)
+DECL_WINELIB_TYPE_AW(LPJOYCAPS2)
+
+typedef struct joyinfo_tag {
+ UINT wXpos;
+ UINT wYpos;
+ UINT wZpos;
+ UINT wButtons;
+} JOYINFO, *LPJOYINFO;
+
+typedef struct joyinfoex_tag {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwXpos;
+ DWORD dwYpos;
+ DWORD dwZpos;
+ DWORD dwRpos;
+ DWORD dwUpos;
+ DWORD dwVpos;
+ DWORD dwButtons;
+ DWORD dwButtonNumber;
+ DWORD dwPOV;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} JOYINFOEX,*LPJOYINFOEX;
+
+
+MMRESULT WINAPI joyGetDevCapsA(UINT_PTR,LPJOYCAPSA,UINT);
+MMRESULT WINAPI joyGetDevCapsW(UINT_PTR,LPJOYCAPSW,UINT);
+#define joyGetDevCaps WINELIB_NAME_AW(joyGetDevCaps)
+UINT WINAPI joyGetNumDevs(void);
+MMRESULT WINAPI joyGetPos(UINT,LPJOYINFO);
+MMRESULT WINAPI joyGetPosEx(UINT,LPJOYINFOEX);
+MMRESULT WINAPI joyGetThreshold(UINT,UINT*);
+MMRESULT WINAPI joyReleaseCapture(UINT);
+MMRESULT WINAPI joySetCapture(HWND,UINT,UINT,BOOL);
+MMRESULT WINAPI joySetThreshold(UINT,UINT);
+
+#define MIXERR_BASE 1024
+#define MIXERR_INVALLINE (MIXERR_BASE + 0)
+#define MIXERR_INVALCONTROL (MIXERR_BASE + 1)
+#define MIXERR_INVALVALUE (MIXERR_BASE + 2)
+#define MIXERR_LASTERROR (MIXERR_BASE + 2)
+
+typedef struct tagMIXERCAPSA {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD fdwSupport;
+ DWORD cDestinations;
+} MIXERCAPSA,*LPMIXERCAPSA;
+
+typedef struct tagMIXERCAPSW {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD fdwSupport;
+ DWORD cDestinations;
+} MIXERCAPSW,*LPMIXERCAPSW;
+
+DECL_WINELIB_TYPE_AW(MIXERCAPS)
+DECL_WINELIB_TYPE_AW(LPMIXERCAPS)
+
+typedef struct tagMIXERCAPS2A {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ DWORD fdwSupport;
+ DWORD cDestinations;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} MIXERCAPS2A,*LPMIXERCAPS2A;
+
+typedef struct tagMIXERCAPS2W {
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ DWORD fdwSupport;
+ DWORD cDestinations;
+ GUID ManufacturerGuid;
+ GUID ProductGuid;
+ GUID NameGuid;
+} MIXERCAPS2W,*LPMIXERCAPS2W;
+
+DECL_WINELIB_TYPE_AW(MIXERCAPS2)
+DECL_WINELIB_TYPE_AW(LPMIXERCAPS2)
+
+#define MIXER_SHORT_NAME_CHARS 16
+#define MIXER_LONG_NAME_CHARS 64
+
+/* MIXERLINE.fdwLine */
+#define MIXERLINE_LINEF_ACTIVE 0x00000001
+#define MIXERLINE_LINEF_DISCONNECTED 0x00008000
+#define MIXERLINE_LINEF_SOURCE 0x80000000
+
+/* Mixer flags */
+#define MIXER_OBJECTF_HANDLE __MSABI_LONG(0x80000000)
+#define MIXER_OBJECTF_MIXER __MSABI_LONG(0x00000000)
+#define MIXER_OBJECTF_HMIXER (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER)
+#define MIXER_OBJECTF_WAVEOUT __MSABI_LONG(0x10000000)
+#define MIXER_OBJECTF_HWAVEOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT)
+#define MIXER_OBJECTF_WAVEIN __MSABI_LONG(0x20000000)
+#define MIXER_OBJECTF_HWAVEIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN)
+#define MIXER_OBJECTF_MIDIOUT __MSABI_LONG(0x30000000)
+#define MIXER_OBJECTF_HMIDIOUT (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT)
+#define MIXER_OBJECTF_MIDIIN __MSABI_LONG(0x40000000)
+#define MIXER_OBJECTF_HMIDIIN (MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN)
+#define MIXER_OBJECTF_AUX __MSABI_LONG(0x50000000)
+
+/* MIXERLINE.dwComponentType */
+/* component types for destinations and sources */
+#define MIXERLINE_COMPONENTTYPE_DST_FIRST __MSABI_LONG(0x00000000)
+#define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0)
+#define MIXERLINE_COMPONENTTYPE_DST_DIGITAL (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1)
+#define MIXERLINE_COMPONENTTYPE_DST_LINE (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2)
+#define MIXERLINE_COMPONENTTYPE_DST_MONITOR (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3)
+#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4)
+#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5)
+#define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6)
+#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7)
+#define MIXERLINE_COMPONENTTYPE_DST_VOICEIN (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
+#define MIXERLINE_COMPONENTTYPE_DST_LAST (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8)
+
+#define MIXERLINE_COMPONENTTYPE_SRC_FIRST __MSABI_LONG(0x00001000)
+#define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0)
+#define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1)
+#define MIXERLINE_COMPONENTTYPE_SRC_LINE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2)
+#define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3)
+#define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4)
+#define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5)
+#define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6)
+#define MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7)
+#define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8)
+#define MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9)
+#define MIXERLINE_COMPONENTTYPE_SRC_ANALOG (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
+#define MIXERLINE_COMPONENTTYPE_SRC_LAST (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10)
+
+/* MIXERLINE.Target.dwType */
+#define MIXERLINE_TARGETTYPE_UNDEFINED 0
+#define MIXERLINE_TARGETTYPE_WAVEOUT 1
+#define MIXERLINE_TARGETTYPE_WAVEIN 2
+#define MIXERLINE_TARGETTYPE_MIDIOUT 3
+#define MIXERLINE_TARGETTYPE_MIDIIN 4
+#define MIXERLINE_TARGETTYPE_AUX 5
+
+typedef struct tagMIXERLINEA {
+ DWORD cbStruct;
+ DWORD dwDestination;
+ DWORD dwSource;
+ DWORD dwLineID;
+ DWORD fdwLine;
+ DWORD_PTR dwUser;
+ DWORD dwComponentType;
+ DWORD cChannels;
+ DWORD cConnections;
+ DWORD cControls;
+ CHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+ struct {
+ DWORD dwType;
+ DWORD dwDeviceID;
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ CHAR szPname[MAXPNAMELEN];
+ } Target;
+} MIXERLINEA, *LPMIXERLINEA;
+
+typedef struct tagMIXERLINEW {
+ DWORD cbStruct;
+ DWORD dwDestination;
+ DWORD dwSource;
+ DWORD dwLineID;
+ DWORD fdwLine;
+ DWORD_PTR dwUser;
+ DWORD dwComponentType;
+ DWORD cChannels;
+ DWORD cConnections;
+ DWORD cControls;
+ WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ WCHAR szName[MIXER_LONG_NAME_CHARS];
+ struct {
+ DWORD dwType;
+ DWORD dwDeviceID;
+ WORD wMid;
+ WORD wPid;
+ MMVERSION vDriverVersion;
+ WCHAR szPname[MAXPNAMELEN];
+ } Target;
+} MIXERLINEW, *LPMIXERLINEW;
+
+DECL_WINELIB_TYPE_AW(MIXERLINE)
+DECL_WINELIB_TYPE_AW(LPMIXERLINE)
+
+/* MIXERCONTROL.fdwControl */
+#define MIXERCONTROL_CONTROLF_UNIFORM __MSABI_LONG(0x00000001)
+#define MIXERCONTROL_CONTROLF_MULTIPLE __MSABI_LONG(0x00000002)
+#define MIXERCONTROL_CONTROLF_DISABLED __MSABI_LONG(0x80000000)
+
+/* MIXERCONTROL_CONTROLTYPE_xxx building block defines */
+#define MIXERCONTROL_CT_CLASS_MASK __MSABI_LONG(0xF0000000)
+#define MIXERCONTROL_CT_CLASS_CUSTOM __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_CLASS_METER __MSABI_LONG(0x10000000)
+#define MIXERCONTROL_CT_CLASS_SWITCH __MSABI_LONG(0x20000000)
+#define MIXERCONTROL_CT_CLASS_NUMBER __MSABI_LONG(0x30000000)
+#define MIXERCONTROL_CT_CLASS_SLIDER __MSABI_LONG(0x40000000)
+#define MIXERCONTROL_CT_CLASS_FADER __MSABI_LONG(0x50000000)
+#define MIXERCONTROL_CT_CLASS_TIME __MSABI_LONG(0x60000000)
+#define MIXERCONTROL_CT_CLASS_LIST __MSABI_LONG(0x70000000)
+
+#define MIXERCONTROL_CT_SUBCLASS_MASK __MSABI_LONG(0x0F000000)
+
+#define MIXERCONTROL_CT_SC_SWITCH_BOOLEAN __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_SC_SWITCH_BUTTON __MSABI_LONG(0x01000000)
+
+#define MIXERCONTROL_CT_SC_METER_POLLED __MSABI_LONG(0x00000000)
+
+#define MIXERCONTROL_CT_SC_TIME_MICROSECS __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_SC_TIME_MILLISECS __MSABI_LONG(0x01000000)
+
+#define MIXERCONTROL_CT_SC_LIST_SINGLE __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_SC_LIST_MULTIPLE __MSABI_LONG(0x01000000)
+
+#define MIXERCONTROL_CT_UNITS_MASK __MSABI_LONG(0x00FF0000)
+#define MIXERCONTROL_CT_UNITS_CUSTOM __MSABI_LONG(0x00000000)
+#define MIXERCONTROL_CT_UNITS_BOOLEAN __MSABI_LONG(0x00010000)
+#define MIXERCONTROL_CT_UNITS_SIGNED __MSABI_LONG(0x00020000)
+#define MIXERCONTROL_CT_UNITS_UNSIGNED __MSABI_LONG(0x00030000)
+#define MIXERCONTROL_CT_UNITS_DECIBELS __MSABI_LONG(0x00040000) /* in 10ths */
+#define MIXERCONTROL_CT_UNITS_PERCENT __MSABI_LONG(0x00050000) /* in 10ths */
+
+/* Commonly used control types for specifying MIXERCONTROL.dwControlType */
+#define MIXERCONTROL_CONTROLTYPE_CUSTOM (MIXERCONTROL_CT_CLASS_CUSTOM | MIXERCONTROL_CT_UNITS_CUSTOM)
+#define MIXERCONTROL_CONTROLTYPE_BOOLEANMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_SIGNEDMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PEAKMETER (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1)
+#define MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER (MIXERCONTROL_CT_CLASS_METER | MIXERCONTROL_CT_SC_METER_POLLED | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_BOOLEAN (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BOOLEAN | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_ONOFF (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1)
+#define MIXERCONTROL_CONTROLTYPE_MUTE (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2)
+#define MIXERCONTROL_CONTROLTYPE_MONO (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3)
+#define MIXERCONTROL_CONTROLTYPE_LOUDNESS (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4)
+#define MIXERCONTROL_CONTROLTYPE_STEREOENH (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5)
+#define MIXERCONTROL_CONTROLTYPE_BASS_BOOST (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 0x00002277)
+#define MIXERCONTROL_CONTROLTYPE_BUTTON (MIXERCONTROL_CT_CLASS_SWITCH | MIXERCONTROL_CT_SC_SWITCH_BUTTON | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_DECIBELS (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_DECIBELS)
+#define MIXERCONTROL_CONTROLTYPE_SIGNED (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_UNSIGNED (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PERCENT (MIXERCONTROL_CT_CLASS_NUMBER | MIXERCONTROL_CT_UNITS_PERCENT)
+#define MIXERCONTROL_CONTROLTYPE_SLIDER (MIXERCONTROL_CT_CLASS_SLIDER | MIXERCONTROL_CT_UNITS_SIGNED)
+#define MIXERCONTROL_CONTROLTYPE_PAN (MIXERCONTROL_CONTROLTYPE_SLIDER + 1)
+#define MIXERCONTROL_CONTROLTYPE_QSOUNDPAN (MIXERCONTROL_CONTROLTYPE_SLIDER + 2)
+#define MIXERCONTROL_CONTROLTYPE_FADER (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_VOLUME (MIXERCONTROL_CONTROLTYPE_FADER + 1)
+#define MIXERCONTROL_CONTROLTYPE_BASS (MIXERCONTROL_CONTROLTYPE_FADER + 2)
+#define MIXERCONTROL_CONTROLTYPE_TREBLE (MIXERCONTROL_CONTROLTYPE_FADER + 3)
+#define MIXERCONTROL_CONTROLTYPE_EQUALIZER (MIXERCONTROL_CONTROLTYPE_FADER + 4)
+#define MIXERCONTROL_CONTROLTYPE_SINGLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_SINGLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_MUX (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1)
+#define MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT (MIXERCONTROL_CT_CLASS_LIST | MIXERCONTROL_CT_SC_LIST_MULTIPLE | MIXERCONTROL_CT_UNITS_BOOLEAN)
+#define MIXERCONTROL_CONTROLTYPE_MIXER (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1)
+#define MIXERCONTROL_CONTROLTYPE_MICROTIME (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MICROSECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
+#define MIXERCONTROL_CONTROLTYPE_MILLITIME (MIXERCONTROL_CT_CLASS_TIME | MIXERCONTROL_CT_SC_TIME_MILLISECS | MIXERCONTROL_CT_UNITS_UNSIGNED)
+
+
+typedef struct tagMIXERCONTROLA {
+ DWORD cbStruct;
+ DWORD dwControlID;
+ DWORD dwControlType;
+ DWORD fdwControl;
+ DWORD cMultipleItems;
+ CHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+ union {
+ struct {
+ LONG lMinimum;
+ LONG lMaximum;
+ } DUMMYSTRUCTNAME;
+ struct {
+ DWORD dwMinimum;
+ DWORD dwMaximum;
+ } DUMMYSTRUCTNAME1;
+ DWORD dwReserved[6];
+ } Bounds;
+ union {
+ DWORD cSteps;
+ DWORD cbCustomData;
+ DWORD dwReserved[6];
+ } Metrics;
+} MIXERCONTROLA, *LPMIXERCONTROLA;
+
+typedef struct MIXERCONTROLW {
+ DWORD cbStruct;
+ DWORD dwControlID;
+ DWORD dwControlType;
+ DWORD fdwControl;
+ DWORD cMultipleItems;
+ WCHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ WCHAR szName[MIXER_LONG_NAME_CHARS];
+ union {
+ struct {
+ LONG lMinimum;
+ LONG lMaximum;
+ } DUMMYSTRUCTNAME;
+ struct {
+ DWORD dwMinimum;
+ DWORD dwMaximum;
+ } DUMMYSTRUCTNAME1;
+ DWORD dwReserved[6];
+ } Bounds;
+ union {
+ DWORD cSteps;
+ DWORD cbCustomData;
+ DWORD dwReserved[6];
+ } Metrics;
+} MIXERCONTROLW, *LPMIXERCONTROLW;
+
+DECL_WINELIB_TYPE_AW(MIXERCONTROL)
+DECL_WINELIB_TYPE_AW(LPMIXERCONTROL)
+
+typedef struct tagMIXERLINECONTROLSA {
+ DWORD cbStruct;
+ DWORD dwLineID;
+ union {
+ DWORD dwControlID;
+ DWORD dwControlType;
+ } DUMMYUNIONNAME;
+ DWORD cControls;
+ DWORD cbmxctrl;
+ LPMIXERCONTROLA pamxctrl;
+} MIXERLINECONTROLSA, *LPMIXERLINECONTROLSA;
+
+typedef struct tagMIXERLINECONTROLSW {
+ DWORD cbStruct;
+ DWORD dwLineID;
+ union {
+ DWORD dwControlID;
+ DWORD dwControlType;
+ } DUMMYUNIONNAME;
+ DWORD cControls;
+ DWORD cbmxctrl;
+ LPMIXERCONTROLW pamxctrl;
+} MIXERLINECONTROLSW, *LPMIXERLINECONTROLSW;
+
+DECL_WINELIB_TYPE_AW(MIXERLINECONTROLS)
+DECL_WINELIB_TYPE_AW(LPMIXERLINECONTROLS)
+
+typedef struct tMIXERCONTROLDETAILS {
+ DWORD cbStruct;
+ DWORD dwControlID;
+ DWORD cChannels;
+ union {
+ HWND hwndOwner;
+ DWORD cMultipleItems;
+ } DUMMYUNIONNAME;
+ DWORD cbDetails;
+ LPVOID paDetails;
+} MIXERCONTROLDETAILS,*LPMIXERCONTROLDETAILS;
+
+typedef struct tagMIXERCONTROLDETAILS_LISTTEXTA {
+ DWORD dwParam1;
+ DWORD dwParam2;
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXTA,*LPMIXERCONTROLDETAILS_LISTTEXTA;
+
+typedef struct tagMIXERCONTROLDETAILS_LISTTEXTW {
+ DWORD dwParam1;
+ DWORD dwParam2;
+ WCHAR szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXTW,*LPMIXERCONTROLDETAILS_LISTTEXTW;
+
+DECL_WINELIB_TYPE_AW(MIXERCONTROLDETAILS_LISTTEXT)
+DECL_WINELIB_TYPE_AW(LPMIXERCONTROLDETAILS_LISTTEXT)
+
+/* MIXER_GETCONTROLDETAILSF_VALUE */
+typedef struct {
+ LONG fValue;
+} MIXERCONTROLDETAILS_BOOLEAN,*LPMIXERCONTROLDETAILS_BOOLEAN;
+
+typedef struct {
+ LONG lValue;
+} MIXERCONTROLDETAILS_SIGNED,*LPMIXERCONTROLDETAILS_SIGNED;
+
+typedef struct {
+ DWORD dwValue;
+} MIXERCONTROLDETAILS_UNSIGNED,*LPMIXERCONTROLDETAILS_UNSIGNED;
+
+/* bits passed to mixerGetLineInfo.fdwInfo */
+#define MIXER_GETLINEINFOF_DESTINATION __MSABI_LONG(0x00000000)
+#define MIXER_GETLINEINFOF_SOURCE __MSABI_LONG(0x00000001)
+#define MIXER_GETLINEINFOF_LINEID __MSABI_LONG(0x00000002)
+#define MIXER_GETLINEINFOF_COMPONENTTYPE __MSABI_LONG(0x00000003)
+#define MIXER_GETLINEINFOF_TARGETTYPE __MSABI_LONG(0x00000004)
+#define MIXER_GETLINEINFOF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+/* bitmask passed to mixerGetLineControl */
+#define MIXER_GETLINECONTROLSF_ALL __MSABI_LONG(0x00000000)
+#define MIXER_GETLINECONTROLSF_ONEBYID __MSABI_LONG(0x00000001)
+#define MIXER_GETLINECONTROLSF_ONEBYTYPE __MSABI_LONG(0x00000002)
+#define MIXER_GETLINECONTROLSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+/* bitmask passed to mixerGetControlDetails */
+#define MIXER_GETCONTROLDETAILSF_VALUE __MSABI_LONG(0x00000000)
+#define MIXER_GETCONTROLDETAILSF_LISTTEXT __MSABI_LONG(0x00000001)
+#define MIXER_GETCONTROLDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+/* bitmask passed to mixerSetControlDetails */
+#define MIXER_SETCONTROLDETAILSF_VALUE __MSABI_LONG(0x00000000)
+#define MIXER_SETCONTROLDETAILSF_CUSTOM __MSABI_LONG(0x00000001)
+#define MIXER_SETCONTROLDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+UINT WINAPI mixerGetNumDevs(void);
+UINT WINAPI mixerOpen(LPHMIXER,UINT,DWORD_PTR,DWORD_PTR,DWORD);
+UINT WINAPI mixerClose(HMIXER);
+DWORD WINAPI mixerMessage(HMIXER,UINT,DWORD_PTR,DWORD_PTR);
+UINT WINAPI mixerGetDevCapsA(UINT_PTR,LPMIXERCAPSA,UINT);
+UINT WINAPI mixerGetDevCapsW(UINT_PTR,LPMIXERCAPSW,UINT);
+#define mixerGetDevCaps WINELIB_NAME_AW(mixerGetDevCaps)
+UINT WINAPI mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD);
+UINT WINAPI mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD);
+#define mixerGetLineInfo WINELIB_NAME_AW(mixerGetLineInfo)
+UINT WINAPI mixerGetID(HMIXEROBJ,LPUINT,DWORD);
+UINT WINAPI mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD);
+UINT WINAPI mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD);
+#define mixerGetLineControls WINELIB_NAME_AW(mixerGetLineControls)
+UINT WINAPI mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+UINT WINAPI mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+#define mixerGetControlDetails WINELIB_NAME_AW(mixerGetControlDetails)
+UINT WINAPI mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD);
+
+#define MMIOERR_BASE 256
+#define MMIOERR_FILENOTFOUND (MMIOERR_BASE + 1) /* file not found */
+#define MMIOERR_OUTOFMEMORY (MMIOERR_BASE + 2) /* out of memory */
+#define MMIOERR_CANNOTOPEN (MMIOERR_BASE + 3) /* cannot open */
+#define MMIOERR_CANNOTCLOSE (MMIOERR_BASE + 4) /* cannot close */
+#define MMIOERR_CANNOTREAD (MMIOERR_BASE + 5) /* cannot read */
+#define MMIOERR_CANNOTWRITE (MMIOERR_BASE + 6) /* cannot write */
+#define MMIOERR_CANNOTSEEK (MMIOERR_BASE + 7) /* cannot seek */
+#define MMIOERR_CANNOTEXPAND (MMIOERR_BASE + 8) /* cannot expand file */
+#define MMIOERR_CHUNKNOTFOUND (MMIOERR_BASE + 9) /* chunk not found */
+#define MMIOERR_UNBUFFERED (MMIOERR_BASE + 10) /* file is unbuffered */
+#define MMIOERR_PATHNOTFOUND (MMIOERR_BASE + 11)
+#define MMIOERR_ACCESSDENIED (MMIOERR_BASE + 12)
+#define MMIOERR_SHARINGVIOLATION (MMIOERR_BASE + 13)
+#define MMIOERR_NETWORKERROR (MMIOERR_BASE + 14)
+#define MMIOERR_TOOMANYOPENFILES (MMIOERR_BASE + 15)
+#define MMIOERR_INVALIDFILE (MMIOERR_BASE + 16)
+
+#define CFSEPCHAR '+' /* compound file name separator char. */
+
+typedef DWORD FOURCC; /* a four character code */
+typedef LRESULT (CALLBACK *LPMMIOPROC) (LPSTR lpmmioinfo, UINT uMessage,
+ LPARAM lParam1, LPARAM lParam2);
+
+typedef struct _MMIOINFO {
+ DWORD dwFlags;
+ FOURCC fccIOProc;
+ LPMMIOPROC pIOProc;
+ UINT wErrorRet;
+ HTASK hTask;
+ /* fields maintained by MMIO functions during buffered I/O */
+ LONG cchBuffer;
+ HPSTR pchBuffer;
+ HPSTR pchNext;
+ HPSTR pchEndRead;
+ HPSTR pchEndWrite;
+ LONG lBufOffset;
+ /* fields maintained by I/O procedure */
+ LONG lDiskOffset;
+ DWORD adwInfo[3];
+ /* other fields maintained by MMIO */
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ HMMIO hmmio;
+} MMIOINFO, *PMMIOINFO, *LPMMIOINFO;
+
+
+typedef struct _MMCKINFO
+{
+ FOURCC ckid; /* chunk ID */
+ DWORD cksize; /* chunk size */
+ FOURCC fccType; /* form type or list type */
+ DWORD dwDataOffset; /* offset of data portion of chunk */
+ DWORD dwFlags; /* flags used by MMIO functions */
+} MMCKINFO, *LPMMCKINFO;
+
+#define MMIO_RWMODE 0x00000003 /* open file for reading/writing/both */
+#define MMIO_SHAREMODE 0x00000070 /* file sharing mode number */
+
+#define MMIO_CREATE 0x00001000 /* create new file (or truncate file) */
+#define MMIO_PARSE 0x00000100 /* parse new file returning path */
+#define MMIO_DELETE 0x00000200 /* create new file (or truncate file) */
+#define MMIO_EXIST 0x00004000 /* checks for existence of file */
+#define MMIO_ALLOCBUF 0x00010000 /* mmioOpen() should allocate a buffer */
+#define MMIO_GETTEMP 0x00020000 /* mmioOpen() should retrieve temp name */
+
+#define MMIO_DIRTY 0x10000000 /* I/O buffer is dirty */
+
+#define MMIO_READ 0x00000000 /* open file for reading only */
+#define MMIO_WRITE 0x00000001 /* open file for writing only */
+#define MMIO_READWRITE 0x00000002 /* open file for reading and writing */
+
+#define MMIO_COMPAT 0x00000000 /* compatibility mode */
+#define MMIO_EXCLUSIVE 0x00000010 /* exclusive-access mode */
+#define MMIO_DENYWRITE 0x00000020 /* deny writing to other processes */
+#define MMIO_DENYREAD 0x00000030 /* deny reading to other processes */
+#define MMIO_DENYNONE 0x00000040 /* deny nothing to other processes */
+
+#define MMIO_FHOPEN 0x0010 /* mmioClose: keep file handle open */
+#define MMIO_EMPTYBUF 0x0010 /* mmioFlush: empty the I/O buffer */
+#define MMIO_TOUPPER 0x0010 /* mmioStringToFOURCC: to u-case */
+#define MMIO_INSTALLPROC 0x00010000 /* mmioInstallIOProc: install MMIOProc */
+#define MMIO_GLOBALPROC 0x10000000 /* mmioInstallIOProc: install globally */
+#define MMIO_REMOVEPROC 0x00020000 /* mmioInstallIOProc: remove MMIOProc */
+#define MMIO_FINDPROC 0x00040000 /* mmioInstallIOProc: find an MMIOProc */
+#define MMIO_FINDCHUNK 0x0010 /* mmioDescend: find a chunk by ID */
+#define MMIO_FINDRIFF 0x0020 /* mmioDescend: find a LIST chunk */
+#define MMIO_FINDLIST 0x0040 /* mmioDescend: find a RIFF chunk */
+#define MMIO_CREATERIFF 0x0020 /* mmioCreateChunk: make a LIST chunk */
+#define MMIO_CREATELIST 0x0040 /* mmioCreateChunk: make a RIFF chunk */
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+#endif /* SEEK_SET */
+
+#define MMIOM_READ MMIO_READ /* read */
+#define MMIOM_WRITE MMIO_WRITE /* write */
+#define MMIOM_SEEK 2 /* seek to a new position in file */
+#define MMIOM_OPEN 3 /* open file */
+#define MMIOM_CLOSE 4 /* close file */
+#define MMIOM_WRITEFLUSH 5 /* write and flush */
+
+#define MMIOM_RENAME 6 /* rename specified file */
+
+#define MMIOM_USER 0x8000 /* beginning of user-defined messages */
+
+#define FOURCC_RIFF mmioFOURCC('R', 'I', 'F', 'F')
+#define FOURCC_LIST mmioFOURCC('L', 'I', 'S', 'T')
+
+#define FOURCC_DOS mmioFOURCC('D', 'O', 'S', ' ')
+#define FOURCC_MEM mmioFOURCC('M', 'E', 'M', ' ')
+
+#define MMIO_DEFAULTBUFFER 8192 /* default buffer size */
+
+#define mmioFOURCC( ch0, ch1, ch2, ch3 ) \
+ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
+ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+
+LPMMIOPROC WINAPI mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD);
+LPMMIOPROC WINAPI mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD);
+#define mmioInstallIOProc WINELIB_NAME_AW(mmioInstallIOProc)
+
+FOURCC WINAPI mmioStringToFOURCCA(LPCSTR,UINT);
+FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR,UINT);
+#define mmioStringToFOURCC WINELIB_NAME_AW(mmioStringToFOURCC)
+HMMIO WINAPI mmioOpenA(LPSTR,MMIOINFO*,DWORD);
+HMMIO WINAPI mmioOpenW(LPWSTR,MMIOINFO*,DWORD);
+#define mmioOpen WINELIB_NAME_AW(mmioOpen)
+
+MMRESULT WINAPI mmioRenameA(LPCSTR szFileName, LPCSTR szNewFileName,
+ const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);
+MMRESULT WINAPI mmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName,
+ const MMIOINFO * lpmmioinfo, DWORD dwRenameFlags);
+#define mmioRename WINELIB_NAME_AW(mmioRename)
+
+MMRESULT WINAPI mmioClose(HMMIO,UINT);
+LONG WINAPI mmioRead(HMMIO,HPSTR,LONG);
+LONG WINAPI mmioWrite(HMMIO,HPCSTR,LONG);
+LONG WINAPI mmioSeek(HMMIO,LONG,INT);
+MMRESULT WINAPI mmioGetInfo(HMMIO,MMIOINFO*,UINT);
+MMRESULT WINAPI mmioSetInfo(HMMIO,const MMIOINFO*,UINT);
+MMRESULT WINAPI mmioSetBuffer(HMMIO,LPSTR,LONG,UINT);
+MMRESULT WINAPI mmioFlush(HMMIO,UINT);
+MMRESULT WINAPI mmioAdvance(HMMIO,MMIOINFO*,UINT);
+LRESULT WINAPI mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM);
+MMRESULT WINAPI mmioDescend(HMMIO,MMCKINFO*,const MMCKINFO*,UINT);
+MMRESULT WINAPI mmioAscend(HMMIO,MMCKINFO*,UINT);
+MMRESULT WINAPI mmioCreateChunk(HMMIO,MMCKINFO*,UINT);
+
+typedef UINT (CALLBACK *YIELDPROC)(MCIDEVICEID,DWORD);
+
+BOOL WINAPI mciExecute(LPCSTR);
+DWORD WINAPI mciSendCommandA(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);
+DWORD WINAPI mciSendCommandW(MCIDEVICEID,UINT,DWORD_PTR,DWORD_PTR);
+#define mciSendCommand WINELIB_NAME_AW(mciSendCommand)
+DWORD WINAPI mciSendStringA(LPCSTR,LPSTR,UINT,HWND);
+DWORD WINAPI mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND);
+#define mciSendString WINELIB_NAME_AW(mciSendString)
+MCIDEVICEID WINAPI mciGetDeviceIDA(LPCSTR);
+MCIDEVICEID WINAPI mciGetDeviceIDW(LPCWSTR);
+#define mciGetDeviceID WINELIB_NAME_AW(mciGetDeviceID)
+MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA(DWORD,LPCSTR);
+MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR);
+#define mciGetDeviceIDFromElementID WINELIB_NAME_AW(mciGetDeviceIDFromElementID)
+BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT);
+BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT);
+#define mciGetErrorString WINELIB_NAME_AW(mciGetErrorString)
+BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD);
+HTASK WINAPI mciGetCreatorTask(MCIDEVICEID);
+YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,DWORD*);
+
+#define MCIERR_INVALID_DEVICE_ID (MCIERR_BASE + 1)
+#define MCIERR_UNRECOGNIZED_KEYWORD (MCIERR_BASE + 3)
+#define MCIERR_UNRECOGNIZED_COMMAND (MCIERR_BASE + 5)
+#define MCIERR_HARDWARE (MCIERR_BASE + 6)
+#define MCIERR_INVALID_DEVICE_NAME (MCIERR_BASE + 7)
+#define MCIERR_OUT_OF_MEMORY (MCIERR_BASE + 8)
+#define MCIERR_DEVICE_OPEN (MCIERR_BASE + 9)
+#define MCIERR_CANNOT_LOAD_DRIVER (MCIERR_BASE + 10)
+#define MCIERR_MISSING_COMMAND_STRING (MCIERR_BASE + 11)
+#define MCIERR_PARAM_OVERFLOW (MCIERR_BASE + 12)
+#define MCIERR_MISSING_STRING_ARGUMENT (MCIERR_BASE + 13)
+#define MCIERR_BAD_INTEGER (MCIERR_BASE + 14)
+#define MCIERR_PARSER_INTERNAL (MCIERR_BASE + 15)
+#define MCIERR_DRIVER_INTERNAL (MCIERR_BASE + 16)
+#define MCIERR_MISSING_PARAMETER (MCIERR_BASE + 17)
+#define MCIERR_UNSUPPORTED_FUNCTION (MCIERR_BASE + 18)
+#define MCIERR_FILE_NOT_FOUND (MCIERR_BASE + 19)
+#define MCIERR_DEVICE_NOT_READY (MCIERR_BASE + 20)
+#define MCIERR_INTERNAL (MCIERR_BASE + 21)
+#define MCIERR_DRIVER (MCIERR_BASE + 22)
+#define MCIERR_CANNOT_USE_ALL (MCIERR_BASE + 23)
+#define MCIERR_MULTIPLE (MCIERR_BASE + 24)
+#define MCIERR_EXTENSION_NOT_FOUND (MCIERR_BASE + 25)
+#define MCIERR_OUTOFRANGE (MCIERR_BASE + 26)
+#define MCIERR_FLAGS_NOT_COMPATIBLE (MCIERR_BASE + 28)
+#define MCIERR_FILE_NOT_SAVED (MCIERR_BASE + 30)
+#define MCIERR_DEVICE_TYPE_REQUIRED (MCIERR_BASE + 31)
+#define MCIERR_DEVICE_LOCKED (MCIERR_BASE + 32)
+#define MCIERR_DUPLICATE_ALIAS (MCIERR_BASE + 33)
+#define MCIERR_BAD_CONSTANT (MCIERR_BASE + 34)
+#define MCIERR_MUST_USE_SHAREABLE (MCIERR_BASE + 35)
+#define MCIERR_MISSING_DEVICE_NAME (MCIERR_BASE + 36)
+#define MCIERR_BAD_TIME_FORMAT (MCIERR_BASE + 37)
+#define MCIERR_NO_CLOSING_QUOTE (MCIERR_BASE + 38)
+#define MCIERR_DUPLICATE_FLAGS (MCIERR_BASE + 39)
+#define MCIERR_INVALID_FILE (MCIERR_BASE + 40)
+#define MCIERR_NULL_PARAMETER_BLOCK (MCIERR_BASE + 41)
+#define MCIERR_UNNAMED_RESOURCE (MCIERR_BASE + 42)
+#define MCIERR_NEW_REQUIRES_ALIAS (MCIERR_BASE + 43)
+#define MCIERR_NOTIFY_ON_AUTO_OPEN (MCIERR_BASE + 44)
+#define MCIERR_NO_ELEMENT_ALLOWED (MCIERR_BASE + 45)
+#define MCIERR_NONAPPLICABLE_FUNCTION (MCIERR_BASE + 46)
+#define MCIERR_ILLEGAL_FOR_AUTO_OPEN (MCIERR_BASE + 47)
+#define MCIERR_FILENAME_REQUIRED (MCIERR_BASE + 48)
+#define MCIERR_EXTRA_CHARACTERS (MCIERR_BASE + 49)
+#define MCIERR_DEVICE_NOT_INSTALLED (MCIERR_BASE + 50)
+#define MCIERR_GET_CD (MCIERR_BASE + 51)
+#define MCIERR_SET_CD (MCIERR_BASE + 52)
+#define MCIERR_SET_DRIVE (MCIERR_BASE + 53)
+#define MCIERR_DEVICE_LENGTH (MCIERR_BASE + 54)
+#define MCIERR_DEVICE_ORD_LENGTH (MCIERR_BASE + 55)
+#define MCIERR_NO_INTEGER (MCIERR_BASE + 56)
+
+#define MCIERR_WAVE_OUTPUTSINUSE (MCIERR_BASE + 64)
+#define MCIERR_WAVE_SETOUTPUTINUSE (MCIERR_BASE + 65)
+#define MCIERR_WAVE_INPUTSINUSE (MCIERR_BASE + 66)
+#define MCIERR_WAVE_SETINPUTINUSE (MCIERR_BASE + 67)
+#define MCIERR_WAVE_OUTPUTUNSPECIFIED (MCIERR_BASE + 68)
+#define MCIERR_WAVE_INPUTUNSPECIFIED (MCIERR_BASE + 69)
+#define MCIERR_WAVE_OUTPUTSUNSUITABLE (MCIERR_BASE + 70)
+#define MCIERR_WAVE_SETOUTPUTUNSUITABLE (MCIERR_BASE + 71)
+#define MCIERR_WAVE_INPUTSUNSUITABLE (MCIERR_BASE + 72)
+#define MCIERR_WAVE_SETINPUTUNSUITABLE (MCIERR_BASE + 73)
+
+#define MCIERR_SEQ_DIV_INCOMPATIBLE (MCIERR_BASE + 80)
+#define MCIERR_SEQ_PORT_INUSE (MCIERR_BASE + 81)
+#define MCIERR_SEQ_PORT_NONEXISTENT (MCIERR_BASE + 82)
+#define MCIERR_SEQ_PORT_MAPNODEVICE (MCIERR_BASE + 83)
+#define MCIERR_SEQ_PORT_MISCERROR (MCIERR_BASE + 84)
+#define MCIERR_SEQ_TIMER (MCIERR_BASE + 85)
+#define MCIERR_SEQ_PORTUNSPECIFIED (MCIERR_BASE + 86)
+#define MCIERR_SEQ_NOMIDIPRESENT (MCIERR_BASE + 87)
+
+#define MCIERR_NO_WINDOW (MCIERR_BASE + 90)
+#define MCIERR_CREATEWINDOW (MCIERR_BASE + 91)
+#define MCIERR_FILE_READ (MCIERR_BASE + 92)
+#define MCIERR_FILE_WRITE (MCIERR_BASE + 93)
+
+#define MCIERR_NO_IDENTITY (MCIERR_BASE + 94)
+
+#define MCIERR_CUSTOM_DRIVER_BASE (MCIERR_BASE + 256)
+
+#define MCI_OPEN_DRIVER 0x0801
+#define MCI_CLOSE_DRIVER 0x0802
+#define MCI_OPEN 0x0803
+#define MCI_CLOSE 0x0804
+#define MCI_ESCAPE 0x0805
+#define MCI_PLAY 0x0806
+#define MCI_SEEK 0x0807
+#define MCI_STOP 0x0808
+#define MCI_PAUSE 0x0809
+#define MCI_INFO 0x080A
+#define MCI_GETDEVCAPS 0x080B
+#define MCI_SPIN 0x080C
+#define MCI_SET 0x080D
+#define MCI_STEP 0x080E
+#define MCI_RECORD 0x080F
+#define MCI_SYSINFO 0x0810
+#define MCI_BREAK 0x0811
+#define MCI_SOUND 0x0812
+#define MCI_SAVE 0x0813
+#define MCI_STATUS 0x0814
+#define MCI_CUE 0x0830
+#define MCI_REALIZE 0x0840
+#define MCI_WINDOW 0x0841
+#define MCI_PUT 0x0842
+#define MCI_WHERE 0x0843
+#define MCI_FREEZE 0x0844
+#define MCI_UNFREEZE 0x0845
+#define MCI_LOAD 0x0850
+#define MCI_CUT 0x0851
+#define MCI_COPY 0x0852
+#define MCI_PASTE 0x0853
+#define MCI_UPDATE 0x0854
+#define MCI_RESUME 0x0855
+#define MCI_DELETE 0x0856
+
+#define MCI_USER_MESSAGES (0x400 + DRV_MCI_FIRST)
+
+#define MCI_ALL_DEVICE_ID 0xFFFFFFFF
+
+#define MCI_DEVTYPE_VCR (MCI_STRING_OFFSET + 1)
+#define MCI_DEVTYPE_VIDEODISC (MCI_STRING_OFFSET + 2)
+#define MCI_DEVTYPE_OVERLAY (MCI_STRING_OFFSET + 3)
+#define MCI_DEVTYPE_CD_AUDIO (MCI_STRING_OFFSET + 4)
+#define MCI_DEVTYPE_DAT (MCI_STRING_OFFSET + 5)
+#define MCI_DEVTYPE_SCANNER (MCI_STRING_OFFSET + 6)
+#define MCI_DEVTYPE_ANIMATION (MCI_STRING_OFFSET + 7)
+#define MCI_DEVTYPE_DIGITAL_VIDEO (MCI_STRING_OFFSET + 8)
+#define MCI_DEVTYPE_OTHER (MCI_STRING_OFFSET + 9)
+#define MCI_DEVTYPE_WAVEFORM_AUDIO (MCI_STRING_OFFSET + 10)
+#define MCI_DEVTYPE_SEQUENCER (MCI_STRING_OFFSET + 11)
+
+#define MCI_DEVTYPE_FIRST MCI_DEVTYPE_VCR
+#define MCI_DEVTYPE_LAST MCI_DEVTYPE_SEQUENCER
+
+#define MCI_MODE_NOT_READY (MCI_STRING_OFFSET + 12)
+#define MCI_MODE_STOP (MCI_STRING_OFFSET + 13)
+#define MCI_MODE_PLAY (MCI_STRING_OFFSET + 14)
+#define MCI_MODE_RECORD (MCI_STRING_OFFSET + 15)
+#define MCI_MODE_SEEK (MCI_STRING_OFFSET + 16)
+#define MCI_MODE_PAUSE (MCI_STRING_OFFSET + 17)
+#define MCI_MODE_OPEN (MCI_STRING_OFFSET + 18)
+
+#define MCI_FORMAT_MILLISECONDS 0
+#define MCI_FORMAT_HMS 1
+#define MCI_FORMAT_MSF 2
+#define MCI_FORMAT_FRAMES 3
+#define MCI_FORMAT_SMPTE_24 4
+#define MCI_FORMAT_SMPTE_25 5
+#define MCI_FORMAT_SMPTE_30 6
+#define MCI_FORMAT_SMPTE_30DROP 7
+#define MCI_FORMAT_BYTES 8
+#define MCI_FORMAT_SAMPLES 9
+#define MCI_FORMAT_TMSF 10
+
+#define MCI_MSF_MINUTE(msf) ((BYTE)(msf))
+#define MCI_MSF_SECOND(msf) ((BYTE)(((WORD)(msf)) >> 8))
+#define MCI_MSF_FRAME(msf) ((BYTE)((msf)>>16))
+
+#define MCI_MAKE_MSF(m, s, f) ((DWORD)(((BYTE)(m) | \
+ ((WORD)(s)<<8)) | \
+ (((DWORD)(BYTE)(f))<<16)))
+
+#define MCI_TMSF_TRACK(tmsf) ((BYTE)(tmsf))
+#define MCI_TMSF_MINUTE(tmsf) ((BYTE)(((WORD)(tmsf)) >> 8))
+#define MCI_TMSF_SECOND(tmsf) ((BYTE)((tmsf)>>16))
+#define MCI_TMSF_FRAME(tmsf) ((BYTE)((tmsf)>>24))
+
+#define MCI_MAKE_TMSF(t, m, s, f) ((DWORD)(((BYTE)(t) | \
+ ((WORD)(m)<<8)) | \
+ (((DWORD)(BYTE)(s) | \
+ ((WORD)(f)<<8))<<16)))
+
+#define MCI_HMS_HOUR(hms) ((BYTE)(hms))
+#define MCI_HMS_MINUTE(hms) ((BYTE)(((WORD)(hms)) >> 8))
+#define MCI_HMS_SECOND(hms) ((BYTE)((hms)>>16))
+
+#define MCI_MAKE_HMS(h, m, s) ((DWORD)(((BYTE)(h) | \
+ ((WORD)(m)<<8)) | \
+ (((DWORD)(BYTE)(s))<<16)))
+
+#define MCI_NOTIFY_SUCCESSFUL 0x0001
+#define MCI_NOTIFY_SUPERSEDED 0x0002
+#define MCI_NOTIFY_ABORTED 0x0004
+#define MCI_NOTIFY_FAILURE 0x0008
+
+#define MCI_NOTIFY __MSABI_LONG(0x00000001)
+#define MCI_WAIT __MSABI_LONG(0x00000002)
+#define MCI_FROM __MSABI_LONG(0x00000004)
+#define MCI_TO __MSABI_LONG(0x00000008)
+#define MCI_TRACK __MSABI_LONG(0x00000010)
+
+#define MCI_OPEN_SHAREABLE __MSABI_LONG(0x00000100)
+#define MCI_OPEN_ELEMENT __MSABI_LONG(0x00000200)
+#define MCI_OPEN_ALIAS __MSABI_LONG(0x00000400)
+#define MCI_OPEN_ELEMENT_ID __MSABI_LONG(0x00000800)
+#define MCI_OPEN_TYPE_ID __MSABI_LONG(0x00001000)
+#define MCI_OPEN_TYPE __MSABI_LONG(0x00002000)
+
+#define MCI_SEEK_TO_START __MSABI_LONG(0x00000100)
+#define MCI_SEEK_TO_END __MSABI_LONG(0x00000200)
+
+#define MCI_STATUS_ITEM __MSABI_LONG(0x00000100)
+#define MCI_STATUS_START __MSABI_LONG(0x00000200)
+
+#define MCI_STATUS_LENGTH __MSABI_LONG(0x00000001)
+#define MCI_STATUS_POSITION __MSABI_LONG(0x00000002)
+#define MCI_STATUS_NUMBER_OF_TRACKS __MSABI_LONG(0x00000003)
+#define MCI_STATUS_MODE __MSABI_LONG(0x00000004)
+#define MCI_STATUS_MEDIA_PRESENT __MSABI_LONG(0x00000005)
+#define MCI_STATUS_TIME_FORMAT __MSABI_LONG(0x00000006)
+#define MCI_STATUS_READY __MSABI_LONG(0x00000007)
+#define MCI_STATUS_CURRENT_TRACK __MSABI_LONG(0x00000008)
+
+#define MCI_INFO_PRODUCT __MSABI_LONG(0x00000100)
+#define MCI_INFO_FILE __MSABI_LONG(0x00000200)
+#define MCI_INFO_MEDIA_UPC __MSABI_LONG(0x00000400)
+#define MCI_INFO_MEDIA_IDENTITY __MSABI_LONG(0x00000800)
+#define MCI_INFO_NAME __MSABI_LONG(0x00001000)
+#define MCI_INFO_COPYRIGHT __MSABI_LONG(0x00002000)
+
+#define MCI_GETDEVCAPS_ITEM __MSABI_LONG(0x00000100)
+
+#define MCI_GETDEVCAPS_CAN_RECORD __MSABI_LONG(0x00000001)
+#define MCI_GETDEVCAPS_HAS_AUDIO __MSABI_LONG(0x00000002)
+#define MCI_GETDEVCAPS_HAS_VIDEO __MSABI_LONG(0x00000003)
+#define MCI_GETDEVCAPS_DEVICE_TYPE __MSABI_LONG(0x00000004)
+#define MCI_GETDEVCAPS_USES_FILES __MSABI_LONG(0x00000005)
+#define MCI_GETDEVCAPS_COMPOUND_DEVICE __MSABI_LONG(0x00000006)
+#define MCI_GETDEVCAPS_CAN_EJECT __MSABI_LONG(0x00000007)
+#define MCI_GETDEVCAPS_CAN_PLAY __MSABI_LONG(0x00000008)
+#define MCI_GETDEVCAPS_CAN_SAVE __MSABI_LONG(0x00000009)
+
+#define MCI_SYSINFO_QUANTITY __MSABI_LONG(0x00000100)
+#define MCI_SYSINFO_OPEN __MSABI_LONG(0x00000200)
+#define MCI_SYSINFO_NAME __MSABI_LONG(0x00000400)
+#define MCI_SYSINFO_INSTALLNAME __MSABI_LONG(0x00000800)
+
+#define MCI_SET_DOOR_OPEN __MSABI_LONG(0x00000100)
+#define MCI_SET_DOOR_CLOSED __MSABI_LONG(0x00000200)
+#define MCI_SET_TIME_FORMAT __MSABI_LONG(0x00000400)
+#define MCI_SET_AUDIO __MSABI_LONG(0x00000800)
+#define MCI_SET_VIDEO __MSABI_LONG(0x00001000)
+#define MCI_SET_ON __MSABI_LONG(0x00002000)
+#define MCI_SET_OFF __MSABI_LONG(0x00004000)
+
+#define MCI_SET_AUDIO_ALL __MSABI_LONG(0x00000000)
+#define MCI_SET_AUDIO_LEFT __MSABI_LONG(0x00000001)
+#define MCI_SET_AUDIO_RIGHT __MSABI_LONG(0x00000002)
+
+#define MCI_BREAK_KEY __MSABI_LONG(0x00000100)
+#define MCI_BREAK_HWND __MSABI_LONG(0x00000200)
+#define MCI_BREAK_OFF __MSABI_LONG(0x00000400)
+
+#define MCI_RECORD_INSERT __MSABI_LONG(0x00000100)
+#define MCI_RECORD_OVERWRITE __MSABI_LONG(0x00000200)
+
+#define MCI_SOUND_NAME __MSABI_LONG(0x00000100)
+
+#define MCI_SAVE_FILE __MSABI_LONG(0x00000100)
+
+#define MCI_LOAD_FILE __MSABI_LONG(0x00000100)
+
+typedef struct tagMCI_GENERIC_PARMS {
+ DWORD_PTR dwCallback;
+} MCI_GENERIC_PARMS, *LPMCI_GENERIC_PARMS;
+
+typedef struct tagMCI_OPEN_PARMSA {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+} MCI_OPEN_PARMSA, *LPMCI_OPEN_PARMSA;
+
+typedef struct tagMCI_OPEN_PARMSW {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+} MCI_OPEN_PARMSW, *LPMCI_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OPEN_PARMS)
+
+typedef struct tagMCI_PLAY_PARMS{
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_PLAY_PARMS, *LPMCI_PLAY_PARMS;
+
+typedef struct tagMCI_SEEK_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwTo;
+} MCI_SEEK_PARMS, *LPMCI_SEEK_PARMS;
+
+typedef struct tagMCI_STATUS_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+} MCI_STATUS_PARMS, *LPMCI_STATUS_PARMS;
+
+typedef struct tagMCI_INFO_PARMSA {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+} MCI_INFO_PARMSA, *LPMCI_INFO_PARMSA;
+
+typedef struct tagMCI_INFO_PARMSW {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwRetSize;
+} MCI_INFO_PARMSW, *LPMCI_INFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_INFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_INFO_PARMS)
+
+typedef struct tagMCI_GETDEVCAPS_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+} MCI_GETDEVCAPS_PARMS, *LPMCI_GETDEVCAPS_PARMS;
+
+typedef struct tagMCI_SYSINFO_PARMSA {
+ DWORD_PTR dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwNumber;
+ UINT wDeviceType;
+} MCI_SYSINFO_PARMSA, *LPMCI_SYSINFO_PARMSA;
+
+typedef struct tagMCI_SYSINFO_PARMSW {
+ DWORD_PTR dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwNumber;
+ UINT wDeviceType;
+} MCI_SYSINFO_PARMSW, *LPMCI_SYSINFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_SYSINFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_SYSINFO_PARMS)
+
+typedef struct tagMCI_SET_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+} MCI_SET_PARMS, *LPMCI_SET_PARMS;
+
+typedef struct tagMCI_BREAK_PARMS {
+ DWORD_PTR dwCallback;
+ INT nVirtKey;
+ HWND hwndBreak;
+} MCI_BREAK_PARMS, *LPMCI_BREAK_PARMS;
+
+
+typedef struct tagMCI_SOUND_PARMSA {
+ DWORD_PTR dwCallback;
+ LPCSTR lpstrSoundName;
+} MCI_SOUND_PARMSA, *LPMCI_SOUND_PARMSA;
+
+typedef struct tagMCI_SOUND_PARMSW {
+ DWORD_PTR dwCallback;
+ LPCWSTR lpstrSoundName;
+} MCI_SOUND_PARMSW, *LPMCI_SOUND_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_SOUND_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_SOUND_PARMS)
+
+typedef struct tagMCI_SAVE_PARMSA {
+ DWORD_PTR dwCallback;
+ LPCSTR lpfilename;
+} MCI_SAVE_PARMSA, *LPMCI_SAVE_PARMSA;
+
+typedef struct tagMCI_SAVE_PARMSW {
+ DWORD_PTR dwCallback;
+ LPCWSTR lpfilename;
+} MCI_SAVE_PARMSW, *LPMCI_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_SAVE_PARMS)
+
+typedef struct tagMCI_LOAD_PARMSA {
+ DWORD_PTR dwCallback;
+ LPCSTR lpfilename;
+} MCI_LOAD_PARMSA, *LPMCI_LOAD_PARMSA;
+
+typedef struct tagMCI_LOAD_PARMSW {
+ DWORD_PTR dwCallback;
+ LPCWSTR lpfilename;
+} MCI_LOAD_PARMSW, *LPMCI_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_LOAD_PARMS)
+
+typedef struct tagMCI_RECORD_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_RECORD_PARMS, *LPMCI_RECORD_PARMS;
+
+#define MCI_CDA_STATUS_TYPE_TRACK 0x00004001
+
+#define MCI_CDA_TRACK_AUDIO (MCI_CD_OFFSET + 0)
+#define MCI_CDA_TRACK_OTHER (MCI_CD_OFFSET + 1)
+
+#define MCI_VD_MODE_PARK (MCI_VD_OFFSET + 1)
+
+#define MCI_VD_MEDIA_CLV (MCI_VD_OFFSET + 2)
+#define MCI_VD_MEDIA_CAV (MCI_VD_OFFSET + 3)
+#define MCI_VD_MEDIA_OTHER (MCI_VD_OFFSET + 4)
+
+#define MCI_VD_FORMAT_TRACK 0x4001
+
+#define MCI_VD_PLAY_REVERSE __MSABI_LONG(0x00010000)
+#define MCI_VD_PLAY_FAST __MSABI_LONG(0x00020000)
+#define MCI_VD_PLAY_SPEED __MSABI_LONG(0x00040000)
+#define MCI_VD_PLAY_SCAN __MSABI_LONG(0x00080000)
+#define MCI_VD_PLAY_SLOW __MSABI_LONG(0x00100000)
+
+#define MCI_VD_SEEK_REVERSE __MSABI_LONG(0x00010000)
+
+#define MCI_VD_STATUS_SPEED __MSABI_LONG(0x00004002)
+#define MCI_VD_STATUS_FORWARD __MSABI_LONG(0x00004003)
+#define MCI_VD_STATUS_MEDIA_TYPE __MSABI_LONG(0x00004004)
+#define MCI_VD_STATUS_SIDE __MSABI_LONG(0x00004005)
+#define MCI_VD_STATUS_DISC_SIZE __MSABI_LONG(0x00004006)
+
+#define MCI_VD_GETDEVCAPS_CLV __MSABI_LONG(0x00010000)
+#define MCI_VD_GETDEVCAPS_CAV __MSABI_LONG(0x00020000)
+
+#define MCI_VD_SPIN_UP __MSABI_LONG(0x00010000)
+#define MCI_VD_SPIN_DOWN __MSABI_LONG(0x00020000)
+
+#define MCI_VD_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004002)
+#define MCI_VD_GETDEVCAPS_FAST_RATE __MSABI_LONG(0x00004003)
+#define MCI_VD_GETDEVCAPS_SLOW_RATE __MSABI_LONG(0x00004004)
+#define MCI_VD_GETDEVCAPS_NORMAL_RATE __MSABI_LONG(0x00004005)
+
+#define MCI_VD_STEP_FRAMES __MSABI_LONG(0x00010000)
+#define MCI_VD_STEP_REVERSE __MSABI_LONG(0x00020000)
+
+#define MCI_VD_ESCAPE_STRING __MSABI_LONG(0x00000100)
+
+typedef struct tagMCI_VD_PLAY_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ DWORD dwSpeed;
+} MCI_VD_PLAY_PARMS, *LPMCI_VD_PLAY_PARMS;
+
+typedef struct tagMCI_VD_STEP_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwFrames;
+} MCI_VD_STEP_PARMS, *LPMCI_VD_STEP_PARMS;
+
+typedef struct tagMCI_VD_ESCAPE_PARMSA {
+ DWORD_PTR dwCallback;
+ LPCSTR lpstrCommand;
+} MCI_VD_ESCAPE_PARMSA, *LPMCI_VD_ESCAPE_PARMSA;
+
+typedef struct tagMCI_VD_ESCAPE_PARMSW {
+ DWORD_PTR dwCallback;
+ LPCWSTR lpstrCommand;
+} MCI_VD_ESCAPE_PARMSW, *LPMCI_VD_ESCAPE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_VD_ESCAPE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_VD_ESCAPE_PARMS)
+
+#define MCI_WAVE_OPEN_BUFFER __MSABI_LONG(0x00010000)
+
+#define MCI_WAVE_SET_FORMATTAG __MSABI_LONG(0x00010000)
+#define MCI_WAVE_SET_CHANNELS __MSABI_LONG(0x00020000)
+#define MCI_WAVE_SET_SAMPLESPERSEC __MSABI_LONG(0x00040000)
+#define MCI_WAVE_SET_AVGBYTESPERSEC __MSABI_LONG(0x00080000)
+#define MCI_WAVE_SET_BLOCKALIGN __MSABI_LONG(0x00100000)
+#define MCI_WAVE_SET_BITSPERSAMPLE __MSABI_LONG(0x00200000)
+
+#define MCI_WAVE_INPUT __MSABI_LONG(0x00400000)
+#define MCI_WAVE_OUTPUT __MSABI_LONG(0x00800000)
+
+#define MCI_WAVE_STATUS_FORMATTAG __MSABI_LONG(0x00004001)
+#define MCI_WAVE_STATUS_CHANNELS __MSABI_LONG(0x00004002)
+#define MCI_WAVE_STATUS_SAMPLESPERSEC __MSABI_LONG(0x00004003)
+#define MCI_WAVE_STATUS_AVGBYTESPERSEC __MSABI_LONG(0x00004004)
+#define MCI_WAVE_STATUS_BLOCKALIGN __MSABI_LONG(0x00004005)
+#define MCI_WAVE_STATUS_BITSPERSAMPLE __MSABI_LONG(0x00004006)
+#define MCI_WAVE_STATUS_LEVEL __MSABI_LONG(0x00004007)
+
+#define MCI_WAVE_SET_ANYINPUT __MSABI_LONG(0x04000000)
+#define MCI_WAVE_SET_ANYOUTPUT __MSABI_LONG(0x08000000)
+
+#define MCI_WAVE_GETDEVCAPS_INPUTS __MSABI_LONG(0x00004001)
+#define MCI_WAVE_GETDEVCAPS_OUTPUTS __MSABI_LONG(0x00004002)
+
+typedef struct tagMCI_WAVE_OPEN_PARMSA {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+ DWORD dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMSA, *LPMCI_WAVE_OPEN_PARMSA;
+
+typedef struct tagMCI_WAVE_OPEN_PARMSW {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+ DWORD dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMSW, *LPMCI_WAVE_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_WAVE_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_WAVE_OPEN_PARMS)
+
+typedef struct tagMCI_WAVE_DELETE_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_WAVE_DELETE_PARMS, *LPMCI_WAVE_DELETE_PARMS;
+
+typedef struct tagMCI_WAVE_SET_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ UINT wInput;
+ UINT wOutput;
+ UINT wFormatTag;
+ UINT nChannels;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ UINT nBlockAlign;
+ UINT wBitsPerSample;
+} MCI_WAVE_SET_PARMS, * LPMCI_WAVE_SET_PARMS;
+
+
+#define MCI_SEQ_DIV_PPQN (0 + MCI_SEQ_OFFSET)
+#define MCI_SEQ_DIV_SMPTE_24 (1 + MCI_SEQ_OFFSET)
+#define MCI_SEQ_DIV_SMPTE_25 (2 + MCI_SEQ_OFFSET)
+#define MCI_SEQ_DIV_SMPTE_30DROP (3 + MCI_SEQ_OFFSET)
+#define MCI_SEQ_DIV_SMPTE_30 (4 + MCI_SEQ_OFFSET)
+
+#define MCI_SEQ_FORMAT_SONGPTR 0x4001
+#define MCI_SEQ_FILE 0x4002
+#define MCI_SEQ_MIDI 0x4003
+#define MCI_SEQ_SMPTE 0x4004
+#define MCI_SEQ_NONE 65533
+
+#define MCI_SEQ_STATUS_TEMPO __MSABI_LONG(0x00004002)
+#define MCI_SEQ_STATUS_PORT __MSABI_LONG(0x00004003)
+#define MCI_SEQ_STATUS_SLAVE __MSABI_LONG(0x00004007)
+#define MCI_SEQ_STATUS_MASTER __MSABI_LONG(0x00004008)
+#define MCI_SEQ_STATUS_OFFSET __MSABI_LONG(0x00004009)
+#define MCI_SEQ_STATUS_DIVTYPE __MSABI_LONG(0x0000400A)
+
+#define MCI_SEQ_SET_TEMPO __MSABI_LONG(0x00010000)
+#define MCI_SEQ_SET_PORT __MSABI_LONG(0x00020000)
+#define MCI_SEQ_SET_SLAVE __MSABI_LONG(0x00040000)
+#define MCI_SEQ_SET_MASTER __MSABI_LONG(0x00080000)
+#define MCI_SEQ_SET_OFFSET __MSABI_LONG(0x01000000)
+
+typedef struct tagMCI_SEQ_SET_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ DWORD dwTempo;
+ DWORD dwPort;
+ DWORD dwSlave;
+ DWORD dwMaster;
+ DWORD dwOffset;
+} MCI_SEQ_SET_PARMS, *LPMCI_SEQ_SET_PARMS;
+
+#define MCI_ANIM_OPEN_WS __MSABI_LONG(0x00010000)
+#define MCI_ANIM_OPEN_PARENT __MSABI_LONG(0x00020000)
+#define MCI_ANIM_OPEN_NOSTATIC __MSABI_LONG(0x00040000)
+
+#define MCI_ANIM_PLAY_SPEED __MSABI_LONG(0x00010000)
+#define MCI_ANIM_PLAY_REVERSE __MSABI_LONG(0x00020000)
+#define MCI_ANIM_PLAY_FAST __MSABI_LONG(0x00040000)
+#define MCI_ANIM_PLAY_SLOW __MSABI_LONG(0x00080000)
+#define MCI_ANIM_PLAY_SCAN __MSABI_LONG(0x00100000)
+
+#define MCI_ANIM_STEP_REVERSE __MSABI_LONG(0x00010000)
+#define MCI_ANIM_STEP_FRAMES __MSABI_LONG(0x00020000)
+
+#define MCI_ANIM_STATUS_SPEED __MSABI_LONG(0x00004001)
+#define MCI_ANIM_STATUS_FORWARD __MSABI_LONG(0x00004002)
+#define MCI_ANIM_STATUS_HWND __MSABI_LONG(0x00004003)
+#define MCI_ANIM_STATUS_HPAL __MSABI_LONG(0x00004004)
+#define MCI_ANIM_STATUS_STRETCH __MSABI_LONG(0x00004005)
+
+#define MCI_ANIM_INFO_TEXT __MSABI_LONG(0x00010000)
+
+#define MCI_ANIM_GETDEVCAPS_CAN_REVERSE __MSABI_LONG(0x00004001)
+#define MCI_ANIM_GETDEVCAPS_FAST_RATE __MSABI_LONG(0x00004002)
+#define MCI_ANIM_GETDEVCAPS_SLOW_RATE __MSABI_LONG(0x00004003)
+#define MCI_ANIM_GETDEVCAPS_NORMAL_RATE __MSABI_LONG(0x00004004)
+#define MCI_ANIM_GETDEVCAPS_PALETTES __MSABI_LONG(0x00004006)
+#define MCI_ANIM_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004007)
+#define MCI_ANIM_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004008)
+
+#define MCI_ANIM_REALIZE_NORM __MSABI_LONG(0x00010000)
+#define MCI_ANIM_REALIZE_BKGD __MSABI_LONG(0x00020000)
+
+#define MCI_ANIM_WINDOW_HWND __MSABI_LONG(0x00010000)
+#define MCI_ANIM_WINDOW_STATE __MSABI_LONG(0x00040000)
+#define MCI_ANIM_WINDOW_TEXT __MSABI_LONG(0x00080000)
+#define MCI_ANIM_WINDOW_ENABLE_STRETCH __MSABI_LONG(0x00100000)
+#define MCI_ANIM_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000)
+
+#define MCI_ANIM_WINDOW_DEFAULT __MSABI_LONG(0x00000000)
+
+#define MCI_ANIM_RECT __MSABI_LONG(0x00010000)
+#define MCI_ANIM_PUT_SOURCE __MSABI_LONG(0x00020000)
+#define MCI_ANIM_PUT_DESTINATION __MSABI_LONG(0x00040000)
+
+#define MCI_ANIM_WHERE_SOURCE __MSABI_LONG(0x00020000)
+#define MCI_ANIM_WHERE_DESTINATION __MSABI_LONG(0x00040000)
+
+#define MCI_ANIM_UPDATE_HDC __MSABI_LONG(0x00020000)
+
+typedef struct tagMCI_ANIM_OPEN_PARMSA {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_ANIM_OPEN_PARMSA, *LPMCI_ANIM_OPEN_PARMSA;
+
+typedef struct tagMCI_ANIM_OPEN_PARMSW {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_ANIM_OPEN_PARMSW, *LPMCI_ANIM_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_ANIM_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_ANIM_OPEN_PARMS)
+
+typedef struct tagMCI_ANIM_PLAY_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ DWORD dwSpeed;
+} MCI_ANIM_PLAY_PARMS, *LPMCI_ANIM_PLAY_PARMS;
+
+typedef struct tagMCI_ANIM_STEP_PARMS {
+ DWORD_PTR dwCallback;
+ DWORD dwFrames;
+} MCI_ANIM_STEP_PARMS, *LPMCI_ANIM_STEP_PARMS;
+
+typedef struct tagMCI_ANIM_WINDOW_PARMSA {
+ DWORD_PTR dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCSTR lpstrText;
+} MCI_ANIM_WINDOW_PARMSA, *LPMCI_ANIM_WINDOW_PARMSA;
+
+typedef struct tagMCI_ANIM_WINDOW_PARMSW {
+ DWORD_PTR dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCWSTR lpstrText;
+} MCI_ANIM_WINDOW_PARMSW, *LPMCI_ANIM_WINDOW_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_ANIM_WINDOW_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_ANIM_WINDOW_PARMS)
+
+typedef struct tagMCI_ANIM_RECT_PARMS {
+ DWORD_PTR dwCallback;
+#ifdef MCI_USE_OFFEXT
+ POINT ptOffset;
+ POINT ptExtent;
+#else /* ifdef MCI_USE_OFFEXT */
+ RECT rc;
+#endif /* ifdef MCI_USE_OFFEXT */
+} MCI_ANIM_RECT_PARMS, *LPMCI_ANIM_RECT_PARMS;
+
+
+typedef struct tagMCI_ANIM_UPDATE_PARMS {
+ DWORD_PTR dwCallback;
+ RECT rc;
+ HDC hDC;
+} MCI_ANIM_UPDATE_PARMS, *LPMCI_ANIM_UPDATE_PARMS;
+
+
+#define MCI_OVLY_OPEN_WS __MSABI_LONG(0x00010000)
+#define MCI_OVLY_OPEN_PARENT __MSABI_LONG(0x00020000)
+
+#define MCI_OVLY_STATUS_HWND __MSABI_LONG(0x00004001)
+#define MCI_OVLY_STATUS_STRETCH __MSABI_LONG(0x00004002)
+
+#define MCI_OVLY_INFO_TEXT __MSABI_LONG(0x00010000)
+
+#define MCI_OVLY_GETDEVCAPS_CAN_STRETCH __MSABI_LONG(0x00004001)
+#define MCI_OVLY_GETDEVCAPS_CAN_FREEZE __MSABI_LONG(0x00004002)
+#define MCI_OVLY_GETDEVCAPS_MAX_WINDOWS __MSABI_LONG(0x00004003)
+
+#define MCI_OVLY_WINDOW_HWND __MSABI_LONG(0x00010000)
+#define MCI_OVLY_WINDOW_STATE __MSABI_LONG(0x00040000)
+#define MCI_OVLY_WINDOW_TEXT __MSABI_LONG(0x00080000)
+#define MCI_OVLY_WINDOW_ENABLE_STRETCH __MSABI_LONG(0x00100000)
+#define MCI_OVLY_WINDOW_DISABLE_STRETCH __MSABI_LONG(0x00200000)
+
+#define MCI_OVLY_WINDOW_DEFAULT __MSABI_LONG(0x00000000)
+
+#define MCI_OVLY_RECT __MSABI_LONG(0x00010000)
+#define MCI_OVLY_PUT_SOURCE __MSABI_LONG(0x00020000)
+#define MCI_OVLY_PUT_DESTINATION __MSABI_LONG(0x00040000)
+#define MCI_OVLY_PUT_FRAME __MSABI_LONG(0x00080000)
+#define MCI_OVLY_PUT_VIDEO __MSABI_LONG(0x00100000)
+
+#define MCI_OVLY_WHERE_SOURCE __MSABI_LONG(0x00020000)
+#define MCI_OVLY_WHERE_DESTINATION __MSABI_LONG(0x00040000)
+#define MCI_OVLY_WHERE_FRAME __MSABI_LONG(0x00080000)
+#define MCI_OVLY_WHERE_VIDEO __MSABI_LONG(0x00100000)
+
+typedef struct tagMCI_OVLY_OPEN_PARMSA {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_OVLY_OPEN_PARMSA, *LPMCI_OVLY_OPEN_PARMSA;
+
+typedef struct tagMCI_OVLY_OPEN_PARMSW {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCWSTR lpstrDeviceType;
+ LPCWSTR lpstrElementName;
+ LPCWSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_OVLY_OPEN_PARMSW, *LPMCI_OVLY_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_OPEN_PARMS)
+
+typedef struct tagMCI_OVLY_WINDOW_PARMSA {
+ DWORD_PTR dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCSTR lpstrText;
+} MCI_OVLY_WINDOW_PARMSA, *LPMCI_OVLY_WINDOW_PARMSA;
+
+typedef struct tagMCI_OVLY_WINDOW_PARMSW {
+ DWORD_PTR dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPCWSTR lpstrText;
+} MCI_OVLY_WINDOW_PARMSW, *LPMCI_OVLY_WINDOW_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_WINDOW_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_WINDOW_PARMS)
+
+typedef struct tagMCI_OVLY_RECT_PARMS {
+ DWORD_PTR dwCallback;
+#ifdef MCI_USE_OFFEXT
+ POINT ptOffset;
+ POINT ptExtent;
+#else /* ifdef MCI_USE_OFFEXT */
+ RECT rc;
+#endif /* ifdef MCI_USE_OFFEXT */
+} MCI_OVLY_RECT_PARMS, *LPMCI_OVLY_RECT_PARMS;
+
+
+typedef struct tagMCI_OVLY_SAVE_PARMSA {
+ DWORD_PTR dwCallback;
+ LPCSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_SAVE_PARMSA, *LPMCI_OVLY_SAVE_PARMSA;
+
+typedef struct tagMCI_OVLY_SAVE_PARMSW {
+ DWORD_PTR dwCallback;
+ LPCWSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_SAVE_PARMSW, *LPMCI_OVLY_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_SAVE_PARMS)
+
+typedef struct tagMCI_OVLY_LOAD_PARMSA {
+ DWORD_PTR dwCallback;
+ LPCSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_LOAD_PARMSA, *LPMCI_OVLY_LOAD_PARMSA;
+
+typedef struct tagMCI_OVLY_LOAD_PARMSW {
+ DWORD_PTR dwCallback;
+ LPCWSTR lpfilename;
+ RECT rc;
+} MCI_OVLY_LOAD_PARMSW, *LPMCI_OVLY_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_OVLY_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_OVLY_LOAD_PARMS)
+
+#ifndef NEWTRANSPARENT
+#define NEWTRANSPARENT 3
+#define QUERYROPSUPPORT 40
+#endif
+
+#define SELECTDIB 41
+#define DIBINDEX(n) MAKELONG((n),0x10FF)
+
+#ifndef SC_SCREENSAVE
+#define SC_SCREENSAVE 0xf140
+#endif
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MMSYSTEM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h
new file mode 100644
index 00000000..8903a6bd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprapi.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2006 Dmitry Timoshkov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MPRAPI_H
+#define __WINE_MPRAPI_H
+
+#include <lmcons.h>
+#include <ras.h>
+#include <in6addr.h>
+#include <wincrypt.h>
+
+#define MAX_DEVICE_NAME 128
+#define MAX_DEVICETYPE_NAME 16
+#define MAX_INTERFACE_NAME_LEN 256
+#define MAX_MEDIA_NAME 16
+#define MAX_PHONE_NUMBER_LEN 128
+#define MAX_PORT_NAME 16
+#define MAX_TRANSPORT_NAME_LEN 40
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL APIENTRY MprAdminIsServiceRunning(LPWSTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MPRAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h
new file mode 100644
index 00000000..ac87e815
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mprerror.h
@@ -0,0 +1,74 @@
+/*
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given:
+ * The w64 mingw-runtime package and its code is distributed in the hope that it
+ * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR
+ * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to
+ * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef _MPRERROR_H_
+#define _MPRERROR_H_
+
+#define ROUTEBASE 900
+#define SUCCESS 0
+
+#define ERROR_ROUTER_STOPPED (ROUTEBASE+0)
+#define ERROR_ALREADY_CONNECTED (ROUTEBASE+1)
+#define ERROR_UNKNOWN_PROTOCOL_ID (ROUTEBASE+2)
+#define ERROR_DDM_NOT_RUNNING (ROUTEBASE+3)
+#define ERROR_INTERFACE_ALREADY_EXISTS (ROUTEBASE+4)
+#define ERROR_NO_SUCH_INTERFACE (ROUTEBASE+5)
+#define ERROR_INTERFACE_NOT_CONNECTED (ROUTEBASE+6)
+#define ERROR_PROTOCOL_STOP_PENDING (ROUTEBASE+7)
+#define ERROR_INTERFACE_CONNECTED (ROUTEBASE+8)
+#define ERROR_NO_INTERFACE_CREDENTIALS_SET (ROUTEBASE+9)
+#define ERROR_ALREADY_CONNECTING (ROUTEBASE+10)
+#define ERROR_UPDATE_IN_PROGRESS (ROUTEBASE+11)
+#define ERROR_INTERFACE_CONFIGURATION (ROUTEBASE+12)
+#define ERROR_NOT_CLIENT_PORT (ROUTEBASE+13)
+#define ERROR_NOT_ROUTER_PORT (ROUTEBASE+14)
+#define ERROR_CLIENT_INTERFACE_ALREADY_EXISTS (ROUTEBASE+15)
+#define ERROR_INTERFACE_DISABLED (ROUTEBASE+16)
+#define ERROR_AUTH_PROTOCOL_REJECTED (ROUTEBASE+17)
+#define ERROR_NO_AUTH_PROTOCOL_AVAILABLE (ROUTEBASE+18)
+#define ERROR_PEER_REFUSED_AUTH (ROUTEBASE+19)
+#define ERROR_REMOTE_NO_DIALIN_PERMISSION (ROUTEBASE+20)
+#define ERROR_REMOTE_PASSWD_EXPIRED (ROUTEBASE+21)
+#define ERROR_REMOTE_ACCT_DISABLED (ROUTEBASE+22)
+#define ERROR_REMOTE_RESTRICTED_LOGON_HOURS (ROUTEBASE+23)
+#define ERROR_REMOTE_AUTHENTICATION_FAILURE (ROUTEBASE+24)
+#define ERROR_INTERFACE_HAS_NO_DEVICES (ROUTEBASE+25)
+#define ERROR_IDLE_DISCONNECTED (ROUTEBASE+26)
+#define ERROR_INTERFACE_UNREACHABLE (ROUTEBASE+27)
+#define ERROR_SERVICE_IS_PAUSED (ROUTEBASE+28)
+#define ERROR_INTERFACE_DISCONNECTED (ROUTEBASE+29)
+#define ERROR_AUTH_SERVER_TIMEOUT (ROUTEBASE+30)
+#define ERROR_PORT_LIMIT_REACHED (ROUTEBASE+31)
+#define ERROR_PPP_SESSION_TIMEOUT (ROUTEBASE+32)
+#define ERROR_MAX_LAN_INTERFACE_LIMIT (ROUTEBASE+33)
+#define ERROR_MAX_WAN_INTERFACE_LIMIT (ROUTEBASE+34)
+#define ERROR_MAX_CLIENT_INTERFACE_LIMIT (ROUTEBASE+35)
+#define ERROR_BAP_DISCONNECTED (ROUTEBASE+36)
+#define ERROR_USER_LIMIT (ROUTEBASE+37)
+#define ERROR_NO_RADIUS_SERVERS (ROUTEBASE+38)
+#define ERROR_INVALID_RADIUS_RESPONSE (ROUTEBASE+39)
+#define ERROR_DIALIN_HOURS_RESTRICTION (ROUTEBASE+40)
+#define ERROR_ALLOWED_PORT_TYPE_RESTRICTION (ROUTEBASE+41)
+#define ERROR_AUTH_PROTOCOL_RESTRICTION (ROUTEBASE+42)
+#define ERROR_BAP_REQUIRED (ROUTEBASE+43)
+#define ERROR_DIALOUT_HOURS_RESTRICTION (ROUTEBASE+44)
+#define ERROR_ROUTER_CONFIG_INCOMPATIBLE (ROUTEBASE+45)
+#define WARNING_NO_MD5_MIGRATION (ROUTEBASE+46)
+#define ERROR_PROTOCOL_ALREADY_INSTALLED (ROUTEBASE+48)
+#define ERROR_INVALID_SIGNATURE_LENGTH (ROUTEBASE+49)
+#define ERROR_INVALID_SIGNATURE (ROUTEBASE+50)
+#define ERROR_NO_SIGNATURE (ROUTEBASE+51)
+#define ERROR_INVALID_PACKET_LENGTH_OR_ID (ROUTEBASE+52)
+#define ERROR_INVALID_ATTRIBUTE_LENGTH (ROUTEBASE+53)
+#define ERROR_INVALID_PACKET (ROUTEBASE+54)
+#define ERROR_AUTHENTICATOR_MISMATCH (ROUTEBASE+55)
+#define ROUTEBASEEND (ROUTEBASE+56)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h
new file mode 100644
index 00000000..5913f044
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacm.h
@@ -0,0 +1,801 @@
+/*
+ * Declarations for MSACM
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSACM_H
+#define __WINE_MSACM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#include <pshpack1.h>
+
+#define ACMAPI WINAPI
+
+/***********************************************************************
+ * Defines/Enums
+ */
+#define ACMERR_BASE 512
+#define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0)
+#define ACMERR_BUSY (ACMERR_BASE + 1)
+#define ACMERR_UNPREPARED (ACMERR_BASE + 2)
+#define ACMERR_CANCELED (ACMERR_BASE + 3)
+
+#define MM_ACM_OPEN MM_STREAM_OPEN
+#define MM_ACM_CLOSE MM_STREAM_CLOSE
+#define MM_ACM_DONE MM_STREAM_DONE
+
+#define ACM_DRIVERADDF_NAME __MSABI_LONG(0x00000001)
+#define ACM_DRIVERADDF_FUNCTION __MSABI_LONG(0x00000003)
+#define ACM_DRIVERADDF_NOTIFYHWND __MSABI_LONG(0x00000004)
+#define ACM_DRIVERADDF_TYPEMASK __MSABI_LONG(0x00000007)
+#define ACM_DRIVERADDF_LOCAL __MSABI_LONG(0x00000000)
+#define ACM_DRIVERADDF_GLOBAL __MSABI_LONG(0x00000008)
+
+#define ACMDRIVERDETAILS_SHORTNAME_CHARS 32
+#define ACMDRIVERDETAILS_LONGNAME_CHARS 128
+#define ACMDRIVERDETAILS_COPYRIGHT_CHARS 80
+#define ACMDRIVERDETAILS_LICENSING_CHARS 128
+#define ACMDRIVERDETAILS_FEATURES_CHARS 512
+
+#define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')
+#define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED mmioFOURCC('\0', '\0', '\0', '\0')
+
+#define ACMDRIVERDETAILS_SUPPORTF_CODEC __MSABI_LONG(0x00000001)
+#define ACMDRIVERDETAILS_SUPPORTF_CONVERTER __MSABI_LONG(0x00000002)
+#define ACMDRIVERDETAILS_SUPPORTF_FILTER __MSABI_LONG(0x00000004)
+#define ACMDRIVERDETAILS_SUPPORTF_HARDWARE __MSABI_LONG(0x00000008)
+#define ACMDRIVERDETAILS_SUPPORTF_ASYNC __MSABI_LONG(0x00000010)
+#define ACMDRIVERDETAILS_SUPPORTF_LOCAL __MSABI_LONG(0x40000000)
+#define ACMDRIVERDETAILS_SUPPORTF_DISABLED __MSABI_LONG(0x80000000)
+
+#define ACM_DRIVERENUMF_NOLOCAL __MSABI_LONG(0x40000000)
+#define ACM_DRIVERENUMF_DISABLED __MSABI_LONG(0x80000000)
+
+#define ACM_DRIVERPRIORITYF_ENABLE __MSABI_LONG(0x00000001)
+#define ACM_DRIVERPRIORITYF_DISABLE __MSABI_LONG(0x00000002)
+#define ACM_DRIVERPRIORITYF_ABLEMASK __MSABI_LONG(0x00000003)
+#define ACM_DRIVERPRIORITYF_BEGIN __MSABI_LONG(0x00010000)
+#define ACM_DRIVERPRIORITYF_END __MSABI_LONG(0x00020000)
+#define ACM_DRIVERPRIORITYF_DEFERMASK __MSABI_LONG(0x00030000)
+
+#define MM_ACM_FILTERCHOOSE 0x8000
+
+#define FILTERCHOOSE_MESSAGE 0
+#define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0)
+#define FILTERCHOOSE_FILTER_VERIFY (FILTERCHOOSE_MESSAGE+1)
+#define FILTERCHOOSE_CUSTOM_VERIFY (FILTERCHOOSE_MESSAGE+2)
+
+#define ACMFILTERCHOOSE_STYLEF_SHOWHELP __MSABI_LONG(0x00000004)
+#define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK __MSABI_LONG(0x00000008)
+#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE __MSABI_LONG(0x00000010)
+#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)
+#define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT __MSABI_LONG(0x00000040)
+#define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP __MSABI_LONG(0x00000080)
+
+#define ACMFILTERDETAILS_FILTER_CHARS 128
+
+#define ACM_FILTERDETAILSF_INDEX __MSABI_LONG(0x00000000)
+#define ACM_FILTERDETAILSF_FILTER __MSABI_LONG(0x00000001)
+#define ACM_FILTERDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
+
+#define ACM_FILTERTAGDETAILSF_INDEX __MSABI_LONG(0x00000000)
+#define ACM_FILTERTAGDETAILSF_FILTERTAG __MSABI_LONG(0x00000001)
+#define ACM_FILTERTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002)
+#define ACM_FILTERTAGDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACM_FILTERENUMF_DWFILTERTAG __MSABI_LONG(0x00010000)
+
+#define ACMHELPMSGSTRINGA "acmchoose_help"
+#if defined(__GNUC__)
+# define ACMHELPMSGSTRINGW (const WCHAR []){ 'a','c','m', \
+ 'c','h','o','o','s','e','_','h','e','l','p',0 }
+#elif defined(_MSC_VER)
+# define ACMHELPMSGSTRINGW L"acmchoose_help"
+#else
+static const WCHAR ACMHELPMSGSTRINGW[] = { 'a','c','m',
+ 'c','h','o','o','s','e','_','h','e','l','p',0 };
+#endif
+#define ACMHELPMSGSTRING WINELIB_NAME_AW(ACMHELPMSGSTRING)
+
+#define ACMHELPMSGCONTEXTMENUA "acmchoose_contextmenu"
+#if defined(__GNUC__)
+# define ACMHELPMSGCONTEXTMENUW (const WCHAR []){ 'a','c','m', \
+ 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 }
+#elif defined(_MSC_VER)
+# define ACMHELPMSGCONTEXTMENUW L"acmchoose_contextmenu"
+#else
+static const WCHAR ACMHELPMSGCONTEXTMENUW[] = { 'a','c','m',
+ 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 };
+#endif
+#define ACMHELPMSGCONTEXTMENU WINELIB_NAME_AW(ACMHELPMSGCONTEXTMENU)
+
+#define ACMHELPMSGCONTEXTHELPA "acmchoose_contexthelp"
+#if defined(__GNUC__)
+# define ACMHELPMSGCONTEXTHELPW (const WCHAR []){ 'a','c','m', \
+ 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 }
+#elif defined(_MSC_VER)
+# define ACMHELPMSGCONTEXTHELPW L"acmchoose_contexthelp"
+#else
+static const WCHAR ACMHELPMSGCONTEXTHELPW[] = { 'a','c','m',
+ 'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 };
+#endif
+#define ACMHELPMSGCONTEXTHELP WINELIB_NAME_AW(ACMHELPMSGCONTEXTHELP)
+
+#define MM_ACM_FORMATCHOOSE 0x8000
+
+#define FORMATCHOOSE_MESSAGE 0
+#define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0)
+#define FORMATCHOOSE_FORMAT_VERIFY (FORMATCHOOSE_MESSAGE+1)
+#define FORMATCHOOSE_CUSTOM_VERIFY (FORMATCHOOSE_MESSAGE+2)
+
+#define ACMFORMATCHOOSE_STYLEF_SHOWHELP __MSABI_LONG(0x00000004)
+#define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK __MSABI_LONG(0x00000008)
+#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE __MSABI_LONG(0x00000010)
+#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE __MSABI_LONG(0x00000020)
+#define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT __MSABI_LONG(0x00000040)
+#define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP __MSABI_LONG(0x00000080)
+
+#define ACMFORMATDETAILS_FORMAT_CHARS 128
+
+#define ACM_FORMATDETAILSF_INDEX __MSABI_LONG(0x00000000)
+#define ACM_FORMATDETAILSF_FORMAT __MSABI_LONG(0x00000001)
+#define ACM_FORMATDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACM_FORMATENUMF_WFORMATTAG __MSABI_LONG(0x00010000)
+#define ACM_FORMATENUMF_NCHANNELS __MSABI_LONG(0x00020000)
+#define ACM_FORMATENUMF_NSAMPLESPERSEC __MSABI_LONG(0x00040000)
+#define ACM_FORMATENUMF_WBITSPERSAMPLE __MSABI_LONG(0x00080000)
+#define ACM_FORMATENUMF_CONVERT __MSABI_LONG(0x00100000)
+#define ACM_FORMATENUMF_SUGGEST __MSABI_LONG(0x00200000)
+#define ACM_FORMATENUMF_HARDWARE __MSABI_LONG(0x00400000)
+#define ACM_FORMATENUMF_INPUT __MSABI_LONG(0x00800000)
+#define ACM_FORMATENUMF_OUTPUT __MSABI_LONG(0x01000000)
+
+#define ACM_FORMATSUGGESTF_WFORMATTAG __MSABI_LONG(0x00010000)
+#define ACM_FORMATSUGGESTF_NCHANNELS __MSABI_LONG(0x00020000)
+#define ACM_FORMATSUGGESTF_NSAMPLESPERSEC __MSABI_LONG(0x00040000)
+#define ACM_FORMATSUGGESTF_WBITSPERSAMPLE __MSABI_LONG(0x00080000)
+#define ACM_FORMATSUGGESTF_TYPEMASK __MSABI_LONG(0x00FF0000)
+
+#define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
+
+#define ACM_FORMATTAGDETAILSF_INDEX __MSABI_LONG(0x00000000)
+#define ACM_FORMATTAGDETAILSF_FORMATTAG __MSABI_LONG(0x00000001)
+#define ACM_FORMATTAGDETAILSF_LARGESTSIZE __MSABI_LONG(0x00000002)
+#define ACM_FORMATTAGDETAILSF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACM_METRIC_COUNT_DRIVERS 1
+#define ACM_METRIC_COUNT_CODECS 2
+#define ACM_METRIC_COUNT_CONVERTERS 3
+#define ACM_METRIC_COUNT_FILTERS 4
+#define ACM_METRIC_COUNT_DISABLED 5
+#define ACM_METRIC_COUNT_HARDWARE 6
+#define ACM_METRIC_COUNT_LOCAL_DRIVERS 20
+#define ACM_METRIC_COUNT_LOCAL_CODECS 21
+#define ACM_METRIC_COUNT_LOCAL_CONVERTERS 22
+#define ACM_METRIC_COUNT_LOCAL_FILTERS 23
+#define ACM_METRIC_COUNT_LOCAL_DISABLED 24
+#define ACM_METRIC_HARDWARE_WAVE_INPUT 30
+#define ACM_METRIC_HARDWARE_WAVE_OUTPUT 31
+#define ACM_METRIC_MAX_SIZE_FORMAT 50
+#define ACM_METRIC_MAX_SIZE_FILTER 51
+#define ACM_METRIC_DRIVER_SUPPORT 100
+#define ACM_METRIC_DRIVER_PRIORITY 101
+
+#define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004
+#define ACM_STREAMCONVERTF_START 0x00000010
+#define ACM_STREAMCONVERTF_END 0x00000020
+
+#define ACMSTREAMHEADER_STATUSF_DONE __MSABI_LONG(0x00010000)
+#define ACMSTREAMHEADER_STATUSF_PREPARED __MSABI_LONG(0x00020000)
+#define ACMSTREAMHEADER_STATUSF_INQUEUE __MSABI_LONG(0x00100000)
+
+#define ACM_STREAMOPENF_QUERY 0x00000001
+#define ACM_STREAMOPENF_ASYNC 0x00000002
+#define ACM_STREAMOPENF_NONREALTIME 0x00000004
+
+#define ACM_STREAMSIZEF_SOURCE __MSABI_LONG(0x00000000)
+#define ACM_STREAMSIZEF_DESTINATION __MSABI_LONG(0x00000001)
+#define ACM_STREAMSIZEF_QUERYMASK __MSABI_LONG(0x0000000F)
+
+#define ACMDM_USER (DRV_USER + 0x0000)
+#define ACMDM_RESERVED_LOW (DRV_USER + 0x2000)
+#define ACMDM_RESERVED_HIGH (DRV_USER + 0x2FFF)
+
+#define ACMDM_BASE ACMDM_RESERVED_LOW
+
+#define ACMDM_DRIVER_ABOUT (ACMDM_BASE + 11)
+
+/* handles */
+
+DECLARE_HANDLE(HACMDRIVERID);
+DECLARE_HANDLE(HACMDRIVER);
+DECLARE_HANDLE(HACMSTREAM);
+DECLARE_HANDLE(HACMOBJ);
+typedef HACMDRIVERID *PHACMDRIVERID, *LPHACMDRIVERID;
+typedef HACMDRIVER *PHACMDRIVER, *LPHACMDRIVER;
+typedef HACMSTREAM *PHACMSTREAM, *LPHACMSTREAM;
+typedef HACMOBJ *PHACMOBJ, *LPHACMOBJ;
+
+/***********************************************************************
+ * Callbacks
+ */
+
+typedef BOOL (CALLBACK *ACMDRIVERENUMCB)(
+ HACMDRIVERID hadid, DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(
+ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+
+typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(
+ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+#define ACMFILTERCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFILTERCHOOSEHOOKPROC)
+
+typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(
+ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+
+typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(
+ HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
+);
+#define ACMFORMATCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFORMATCHOOSEHOOKPROC)
+
+/***********************************************************************
+ * Structures
+ */
+
+typedef struct _ACMDRIVERDETAILSA
+{
+ DWORD cbStruct;
+
+ FOURCC fccType;
+ FOURCC fccComp;
+
+ WORD wMid;
+ WORD wPid;
+
+ DWORD vdwACM;
+ DWORD vdwDriver;
+
+ DWORD fdwSupport;
+ DWORD cFormatTags;
+ DWORD cFilterTags;
+
+ HICON hicon;
+
+ CHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+ CHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+ CHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+ CHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+ CHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+} ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA;
+
+typedef struct _ACMDRIVERDETAILSW
+{
+ DWORD cbStruct;
+
+ FOURCC fccType;
+ FOURCC fccComp;
+
+ WORD wMid;
+ WORD wPid;
+
+ DWORD vdwACM;
+ DWORD vdwDriver;
+
+ DWORD fdwSupport;
+ DWORD cFormatTags;
+ DWORD cFilterTags;
+
+ HICON hicon;
+
+ WCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+ WCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+ WCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+ WCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+ WCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+} ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMDRIVERDETAILS)
+DECL_WINELIB_TYPE_AW(PACMDRIVERDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMDRIVERDETAILS)
+
+typedef struct _ACMFILTERCHOOSEA
+{
+ DWORD cbStruct;
+ DWORD fdwStyle;
+
+ HWND hwndOwner;
+
+ PWAVEFILTER pwfltr;
+ DWORD cbwfltr;
+
+ LPCSTR pszTitle;
+
+ CHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+ CHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+ LPSTR pszName;
+ DWORD cchName;
+
+ DWORD fdwEnum;
+ PWAVEFILTER pwfltrEnum;
+
+ HINSTANCE hInstance;
+ LPCSTR pszTemplateName;
+ LPARAM lCustData;
+ ACMFILTERCHOOSEHOOKPROCA pfnHook;
+} ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, *LPACMFILTERCHOOSEA;
+
+typedef struct _ACMFILTERCHOOSEW
+{
+ DWORD cbStruct;
+ DWORD fdwStyle;
+
+ HWND hwndOwner;
+
+ PWAVEFILTER pwfltr;
+ DWORD cbwfltr;
+
+ LPCWSTR pszTitle;
+
+ WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+ WCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+ LPWSTR pszName;
+ DWORD cchName;
+
+ DWORD fdwEnum;
+ PWAVEFILTER pwfltrEnum;
+
+ HINSTANCE hInstance;
+ LPCWSTR pszTemplateName;
+ LPARAM lCustData;
+ ACMFILTERCHOOSEHOOKPROCW pfnHook;
+} ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, *LPACMFILTERCHOOSEW;
+
+DECL_WINELIB_TYPE_AW(ACMFILTERCHOOSE)
+DECL_WINELIB_TYPE_AW(PACMFILTERCHOOSE)
+DECL_WINELIB_TYPE_AW(LPACMFILTERCHOOSE)
+
+typedef struct _ACMFILTERDETAILSA
+{
+ DWORD cbStruct;
+ DWORD dwFilterIndex;
+ DWORD dwFilterTag;
+ DWORD fdwSupport;
+ PWAVEFILTER pwfltr;
+ DWORD cbwfltr;
+ CHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+} ACMFILTERDETAILSA, *PACMFILTERDETAILSA, *LPACMFILTERDETAILSA;
+
+typedef struct _ACMFILTERDETAILSW
+{
+ DWORD cbStruct;
+ DWORD dwFilterIndex;
+ DWORD dwFilterTag;
+ DWORD fdwSupport;
+ PWAVEFILTER pwfltr;
+ DWORD cbwfltr;
+ WCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+} ACMFILTERDETAILSW, *PACMFILTERDETAILSW, *LPACMFILTERDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFILTERDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFILTERDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFILTERDETAILS)
+
+typedef struct _ACMFILTERTAGDETAILSA
+{
+ DWORD cbStruct;
+ DWORD dwFilterTagIndex;
+ DWORD dwFilterTag;
+ DWORD cbFilterSize;
+ DWORD fdwSupport;
+ DWORD cStandardFilters;
+ CHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+} ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, *LPACMFILTERTAGDETAILSA;
+
+typedef struct _ACMFILTERTAGDETAILSW
+{
+ DWORD cbStruct;
+ DWORD dwFilterTagIndex;
+ DWORD dwFilterTag;
+ DWORD cbFilterSize;
+ DWORD fdwSupport;
+ DWORD cStandardFilters;
+ WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+} ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, *LPACMFILTERTAGDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFILTERTAGDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFILTERTAGDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFILTERTAGDETAILS)
+
+typedef struct _ACMFORMATCHOOSEA
+{
+ DWORD cbStruct;
+ DWORD fdwStyle;
+
+ HWND hwndOwner;
+
+ PWAVEFORMATEX pwfx;
+ DWORD cbwfx;
+ LPCSTR pszTitle;
+
+ CHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+ CHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+
+ LPSTR pszName;
+ DWORD cchName;
+
+ DWORD fdwEnum;
+ PWAVEFORMATEX pwfxEnum;
+
+ HINSTANCE hInstance;
+ LPCSTR pszTemplateName;
+ LPARAM lCustData;
+ ACMFORMATCHOOSEHOOKPROCA pfnHook;
+} ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, *LPACMFORMATCHOOSEA;
+
+typedef struct _ACMFORMATCHOOSEW
+{
+ DWORD cbStruct;
+ DWORD fdwStyle;
+
+ HWND hwndOwner;
+
+ PWAVEFORMATEX pwfx;
+ DWORD cbwfx;
+ LPCWSTR pszTitle;
+
+ WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+ WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+
+ LPWSTR pszName;
+ DWORD cchName;
+
+ DWORD fdwEnum;
+ LPWAVEFORMATEX pwfxEnum;
+
+ HINSTANCE hInstance;
+ LPCWSTR pszTemplateName;
+ LPARAM lCustData;
+ ACMFORMATCHOOSEHOOKPROCW pfnHook;
+} ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, *LPACMFORMATCHOOSEW;
+
+DECL_WINELIB_TYPE_AW(ACMFORMATCHOOSE)
+DECL_WINELIB_TYPE_AW(PACMFORMATCHOOSE)
+DECL_WINELIB_TYPE_AW(LPACMFORMATCHOOSE)
+
+typedef struct _ACMFORMATDETAILSA
+{
+ DWORD cbStruct;
+ DWORD dwFormatIndex;
+ DWORD dwFormatTag;
+ DWORD fdwSupport;
+ PWAVEFORMATEX pwfx;
+ DWORD cbwfx;
+ CHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+} ACMFORMATDETAILSA, *PACMFORMATDETAILSA, *LPACMFORMATDETAILSA;
+
+typedef struct _ACMFORMATDETAILSW
+{
+ DWORD cbStruct;
+ DWORD dwFormatIndex;
+ DWORD dwFormatTag;
+ DWORD fdwSupport;
+ PWAVEFORMATEX pwfx;
+ DWORD cbwfx;
+ WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+} ACMFORMATDETAILSW, *PACMFORMATDETAILSW, *LPACMFORMATDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFORMATDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFORMATDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFORMATDETAILS)
+
+typedef struct _ACMFORMATTAGDETAILSA
+{
+ DWORD cbStruct;
+ DWORD dwFormatTagIndex;
+ DWORD dwFormatTag;
+ DWORD cbFormatSize;
+ DWORD fdwSupport;
+ DWORD cStandardFormats;
+ CHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+} ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA;
+
+typedef struct _ACMFORMATTAGDETAILSW
+{
+ DWORD cbStruct;
+ DWORD dwFormatTagIndex;
+ DWORD dwFormatTag;
+ DWORD cbFormatSize;
+ DWORD fdwSupport;
+ DWORD cStandardFormats;
+ WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+} ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW;
+
+DECL_WINELIB_TYPE_AW(ACMFORMATTAGDETAILS)
+DECL_WINELIB_TYPE_AW(PACMFORMATTAGDETAILS)
+DECL_WINELIB_TYPE_AW(LPACMFORMATTAGDETAILS)
+
+#ifdef _WIN64
+# define _ACMSTREAMHEADERRESERVE 15
+#else
+# define _ACMSTREAMHEADERRESERVE 10
+#endif
+
+typedef struct _ACMSTREAMHEADER
+{
+ DWORD cbStruct;
+ DWORD fdwStatus;
+ DWORD_PTR dwUser;
+ LPBYTE pbSrc;
+ DWORD cbSrcLength;
+ DWORD cbSrcLengthUsed;
+ DWORD_PTR dwSrcUser;
+ LPBYTE pbDst;
+ DWORD cbDstLength;
+ DWORD cbDstLengthUsed;
+ DWORD_PTR dwDstUser;
+ DWORD dwReservedDriver[_ACMSTREAMHEADERRESERVE];
+} ACMSTREAMHEADER, *PACMSTREAMHEADER, *LPACMSTREAMHEADER;
+
+#undef _ACMSTREAMHEADERRESERVE
+
+/***********************************************************************
+ * Callbacks 2
+ */
+
+typedef BOOL (CALLBACK *ACMFILTERENUMCBA)(
+ HACMDRIVERID hadid, PACMFILTERDETAILSA pafd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFILTERENUMCBW)(
+ HACMDRIVERID hadid, PACMFILTERDETAILSW pafd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFILTERENUMCB WINELIB_NAME_AW(ACMFILTERENUMCB)
+
+typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)(
+ HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)(
+ HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFILTERTAGENUMCB WINELIB_NAME_AW(ACMFILTERTAGENUMCB)
+
+typedef BOOL (CALLBACK *ACMFORMATENUMCBA)(
+ HACMDRIVERID hadid, PACMFORMATDETAILSA pafd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFORMATENUMCBW)(
+ HACMDRIVERID hadid, PACMFORMATDETAILSW pafd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFORMATENUMCB WINELIB_NAME_AW(ACMFORMATENUMCB)
+
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)(
+ HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)(
+ HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd,
+ DWORD_PTR dwInstance, DWORD fdwSupport
+);
+
+#define ACMFORMATTAGENUMCB WINELIB_NAME_AW(ACMFORMATTAGENUMCB)
+
+/***********************************************************************
+ * Functions - Win32
+ */
+
+MMRESULT WINAPI acmDriverAddA(
+ PHACMDRIVERID phadid, HINSTANCE hinstModule,
+ LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
+);
+MMRESULT WINAPI acmDriverAddW(
+ PHACMDRIVERID phadid, HINSTANCE hinstModule,
+ LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
+);
+#define acmDriverAdd WINELIB_NAME_AW(acmDriverAdd)
+
+MMRESULT WINAPI acmDriverClose(
+ HACMDRIVER had, DWORD fdwClose
+);
+MMRESULT WINAPI acmDriverDetailsA(
+ HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmDriverDetailsW(
+ HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails
+);
+#define acmDriverDetails WINELIB_NAME_AW(acmDriverDetails)
+
+MMRESULT WINAPI acmDriverEnum(
+ ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmDriverID(
+ HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID
+);
+LRESULT WINAPI acmDriverMessage(
+ HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2
+);
+MMRESULT WINAPI acmDriverOpen(
+ PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen
+);
+MMRESULT WINAPI acmDriverPriority(
+ HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority
+);
+MMRESULT WINAPI acmDriverRemove(
+ HACMDRIVERID hadid, DWORD fdwRemove
+);
+MMRESULT WINAPI acmFilterChooseA(
+ PACMFILTERCHOOSEA pafltrc
+);
+MMRESULT WINAPI acmFilterChooseW(
+ PACMFILTERCHOOSEW pafltrc
+);
+#define acmFilterChoose WINELIB_NAME_AW(acmFilterChoose)
+
+MMRESULT WINAPI acmFilterDetailsA(
+ HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFilterDetailsW(
+ HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails
+);
+#define acmFilterDetails WINELIB_NAME_AW(acmFilterDetails)
+
+MMRESULT WINAPI acmFilterEnumA(
+ HACMDRIVER had, PACMFILTERDETAILSA pafd,
+ ACMFILTERENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFilterEnumW(
+ HACMDRIVER had, PACMFILTERDETAILSW pafd,
+ ACMFILTERENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFilterEnum WINELIB_NAME_AW(acmFilterEnum)
+
+MMRESULT WINAPI acmFilterTagDetailsA(
+ HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFilterTagDetailsW(
+ HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails
+);
+#define acmFilterTagDetails WINELIB_NAME_AW(acmFilterTagDetails)
+
+MMRESULT WINAPI acmFilterTagEnumA(
+ HACMDRIVER had, PACMFILTERTAGDETAILSA paftd,
+ ACMFILTERTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFilterTagEnumW(
+ HACMDRIVER had, PACMFILTERTAGDETAILSW paftd,
+ ACMFILTERTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFilterTagEnum WINELIB_NAME_AW(acmFilterTagEnum)
+
+MMRESULT WINAPI acmFormatChooseA(
+ PACMFORMATCHOOSEA pafmtc
+);
+MMRESULT WINAPI acmFormatChooseW(
+ PACMFORMATCHOOSEW pafmtc
+);
+#define acmFormatChoose WINELIB_NAME_AW(acmFormatChoose)
+
+MMRESULT WINAPI acmFormatDetailsA(
+ HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFormatDetailsW(
+ HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails
+);
+#define acmFormatDetails WINELIB_NAME_AW(acmFormatDetails)
+
+MMRESULT WINAPI acmFormatEnumA(
+ HACMDRIVER had, PACMFORMATDETAILSA pafd,
+ ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFormatEnumW(
+ HACMDRIVER had, PACMFORMATDETAILSW pafd,
+ ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFormatEnum WINELIB_NAME_AW(acmFormatEnum)
+
+MMRESULT WINAPI acmFormatSuggest(
+ HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,
+ DWORD cbwfxDst, DWORD fdwSuggest
+);
+MMRESULT WINAPI acmFormatTagDetailsA(
+ HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails
+);
+MMRESULT WINAPI acmFormatTagDetailsW(
+ HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails
+);
+#define acmFormatTagDetails WINELIB_NAME_AW(acmFormatTagDetails)
+
+MMRESULT WINAPI acmFormatTagEnumA(
+ HACMDRIVER had, PACMFORMATTAGDETAILSA paftd,
+ ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+MMRESULT WINAPI acmFormatTagEnumW(
+ HACMDRIVER had, PACMFORMATTAGDETAILSW paftd,
+ ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum
+);
+#define acmFormatTagEnum WINELIB_NAME_AW(acmFormatTagEnum)
+
+DWORD WINAPI acmGetVersion(void
+);
+MMRESULT WINAPI acmMetrics(
+ HACMOBJ hao, UINT uMetric, LPVOID pMetric
+);
+MMRESULT WINAPI acmStreamClose(
+ HACMSTREAM has, DWORD fdwClose
+);
+MMRESULT WINAPI acmStreamConvert(
+ HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert
+);
+MMRESULT WINAPI acmStreamMessage(
+ HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2
+);
+MMRESULT WINAPI acmStreamOpen(
+ PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
+ PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD_PTR dwCallback,
+ DWORD_PTR dwInstance, DWORD fdwOpen
+);
+MMRESULT WINAPI acmStreamPrepareHeader(
+ HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare
+);
+MMRESULT WINAPI acmStreamReset(
+ HACMSTREAM has, DWORD fdwReset
+);
+MMRESULT WINAPI acmStreamSize(
+ HACMSTREAM has, DWORD cbInput,
+ LPDWORD pdwOutputBytes, DWORD fdwSize
+);
+MMRESULT WINAPI acmStreamUnprepareHeader(
+ HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare
+);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_MSACM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h
new file mode 100644
index 00000000..bac72d2d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdlg.h
@@ -0,0 +1,45 @@
+/*
+ * definitions for MSACM dialog boxes
+ *
+ * Copyright (C) 2001 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define DLG_ACMFORMATCHOOSE_ID 70
+#define IDD_ACMFORMATCHOOSE_BTN_HELP 9
+#define IDD_ACMFORMATCHOOSE_CMB_CUSTOM 100
+#define IDD_ACMFORMATCHOOSE_CMB_FORMATTAG 101
+#define IDD_ACMFORMATCHOOSE_CMB_FORMAT 102
+#define IDD_ACMFORMATCHOOSE_BTN_SETNAME 103
+#define IDD_ACMFORMATCHOOSE_BTN_DELNAME 104
+
+#define DLG_ACMFILTERCHOOSE_ID 71
+#define IDD_ACMFILTERCHOOSE_BTN_HELP 9
+#define IDD_ACMFILTERCHOOSE_CMB_CUSTOM 100
+#define IDD_ACMFILTERCHOOSE_CMB_FILTERTAG 101
+#define IDD_ACMFILTERCHOOSE_CMB_FILTER 102
+#define IDD_ACMFILTERCHOOSE_BTN_SETNAME 103
+#define IDD_ACMFILTERCHOOSE_BTN_DELNAME 104
+
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h
new file mode 100644
index 00000000..50a3118f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msacmdrv.h
@@ -0,0 +1,168 @@
+/*
+ * Declarations for MSACM driver
+ *
+ * Copyright 1998 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSACMDRV_H
+#define __WINE_MSACMDRV_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <mmsystem.h>
+#include <mmreg.h>
+#include <msacm.h>
+
+/***********************************************************************
+ * Types
+ */
+
+/***********************************************************************
+ * Defines/Enums
+ */
+
+#define MAKE_ACM_VERSION(mjr, mnr, bld) \
+ (((LONG)(mjr)<<24) | ((LONG)(mnr)<<16) | ((LONG)bld))
+
+#define ACMDRVOPENDESC_SECTIONNAME_CHARS
+
+#define ACMDM_DRIVER_NOTIFY (ACMDM_BASE + 1)
+#define ACMDM_DRIVER_DETAILS (ACMDM_BASE + 10)
+
+#define ACMDM_HARDWARE_WAVE_CAPS_INPUT (ACMDM_BASE + 20)
+#define ACMDM_HARDWARE_WAVE_CAPS_OUTPUT (ACMDM_BASE + 21)
+
+#define ACMDM_FORMATTAG_DETAILS (ACMDM_BASE + 25)
+#define ACMDM_FORMAT_DETAILS (ACMDM_BASE + 26)
+#define ACMDM_FORMAT_SUGGEST (ACMDM_BASE + 27)
+
+#define ACMDM_FILTERTAG_DETAILS (ACMDM_BASE + 50)
+#define ACMDM_FILTER_DETAILS (ACMDM_BASE + 51)
+
+#define ACMDM_STREAM_OPEN (ACMDM_BASE + 76)
+#define ACMDM_STREAM_CLOSE (ACMDM_BASE + 77)
+#define ACMDM_STREAM_SIZE (ACMDM_BASE + 78)
+#define ACMDM_STREAM_CONVERT (ACMDM_BASE + 79)
+#define ACMDM_STREAM_RESET (ACMDM_BASE + 80)
+#define ACMDM_STREAM_PREPARE (ACMDM_BASE + 81)
+#define ACMDM_STREAM_UNPREPARE (ACMDM_BASE + 82)
+#define ACMDM_STREAM_UPDATE (ACMDM_BASE + 83)
+
+/***********************************************************************
+ * Structures
+ */
+
+typedef struct _ACMDRVOPENDESCA
+{
+ DWORD cbStruct;
+ FOURCC fccType;
+ FOURCC fccComp;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ DWORD dwError;
+ LPCSTR pszSectionName;
+ LPCSTR pszAliasName;
+ DWORD dnDevNode;
+} ACMDRVOPENDESCA, *PACMDRVOPENDESCA;
+
+typedef struct _ACMDRVOPENDESCW
+{
+ DWORD cbStruct;
+ FOURCC fccType;
+ FOURCC fccComp;
+ DWORD dwVersion;
+ DWORD dwFlags;
+ DWORD dwError;
+ LPCWSTR pszSectionName;
+ LPCWSTR pszAliasName;
+ DWORD dnDevNode;
+} ACMDRVOPENDESCW, *PACMDRVOPENDESCW;
+
+typedef struct _ACMDRVSTREAMINSTANCE
+{
+ DWORD cbStruct;
+ PWAVEFORMATEX pwfxSrc;
+ PWAVEFORMATEX pwfxDst;
+ PWAVEFILTER pwfltr;
+ DWORD_PTR dwCallback;
+ DWORD_PTR dwInstance;
+ DWORD fdwOpen;
+ DWORD fdwDriver;
+ DWORD_PTR dwDriver;
+ HACMSTREAM has;
+} ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE;
+
+typedef struct _ACMDRVSTREAMHEADER *PACMDRVSTREAMHEADER;
+#include <pshpack1.h>
+typedef struct _ACMDRVSTREAMHEADER {
+ DWORD cbStruct;
+ DWORD fdwStatus;
+ DWORD_PTR dwUser;
+ LPBYTE pbSrc;
+ DWORD cbSrcLength;
+ DWORD cbSrcLengthUsed;
+ DWORD_PTR dwSrcUser;
+ LPBYTE pbDst;
+ DWORD cbDstLength;
+ DWORD cbDstLengthUsed;
+ DWORD_PTR dwDstUser;
+
+ DWORD fdwConvert;
+ PACMDRVSTREAMHEADER *padshNext;
+ DWORD fdwDriver;
+ DWORD_PTR dwDriver;
+
+ /* Internal fields for ACM */
+ DWORD fdwPrepared;
+ DWORD_PTR dwPrepared;
+ LPBYTE pbPreparedSrc;
+ DWORD cbPreparedSrcLength;
+ LPBYTE pbPreparedDst;
+ DWORD cbPreparedDstLength;
+} ACMDRVSTREAMHEADER;
+#include <poppack.h>
+
+typedef struct _ACMDRVSTREAMSIZE
+{
+ DWORD cbStruct;
+ DWORD fdwSize;
+ DWORD cbSrcLength;
+ DWORD cbDstLength;
+} ACMDRVSTREAMSIZE, *PACMDRVSTREAMSIZE;
+
+typedef struct _ACMDRVFORMATSUGGEST
+{
+ DWORD cbStruct;
+ DWORD fdwSuggest;
+ PWAVEFORMATEX pwfxSrc;
+ DWORD cbwfxSrc;
+ PWAVEFORMATEX pwfxDst;
+ DWORD cbwfxDst;
+} ACMDRVFORMATSUGGEST, *PACMDRVFORMATSUGGEST;
+
+#endif /* __WINE_MSACMDRV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h
new file mode 100644
index 00000000..2b5380a5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscat.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSCAT_H
+#define __WINE_MSCAT_H
+
+#include <mssip.h>
+
+typedef HANDLE HCATADMIN;
+typedef HANDLE HCATINFO;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CRYPTCAT_OPEN_CREATENEW 0x00000001
+#define CRYPTCAT_OPEN_ALWAYS 0x00000002
+#define CRYPTCAT_OPEN_EXISTING 0x00000004
+#define CRYPTCAT_OPEN_EXCLUDE_PAGE_HASHES 0x00010000
+#define CRYPTCAT_OPEN_INCLUDE_PAGE_HASHES 0x00020000
+#define CRYPTCAT_OPEN_VERIFYSIGHASH 0x10000000
+#define CRYPTCAT_OPEN_NO_CONTENT_HCRYPTMSG 0x20000000
+#define CRYPTCAT_OPEN_SORTED 0x40000000
+#define CRYPTCAT_OPEN_FLAGS_MASK 0xffff0000
+
+#define CRYPTCAT_E_AREA_HEADER 0x00000000
+#define CRYPTCAT_E_AREA_MEMBER 0x00010000
+#define CRYPTCAT_E_AREA_ATTRIBUTE 0x00020000
+
+#define CRYPTCAT_E_CDF_UNSUPPORTED 0x00000001
+#define CRYPTCAT_E_CDF_DUPLICATE 0x00000002
+#define CRYPTCAT_E_CDF_TAGNOTFOUND 0x00000004
+
+#define CRYPTCAT_E_CDF_MEMBER_FILE_PATH 0x00010001
+#define CRYPTCAT_E_CDF_MEMBER_INDIRECTDATA 0x00010002
+#define CRYPTCAT_E_CDF_MEMBER_FILENOTFOUND 0x00010004
+
+#define CRYPTCAT_E_CDF_BAD_GUID_CONV 0x00020001
+#define CRYPTCAT_E_CDF_ATTR_TOOFEWVALUES 0x00020002
+#define CRYPTCAT_E_CDF_ATTR_TYPECOMBO 0x00020004
+
+#include <pshpack8.h>
+
+typedef struct CRYPTCATATTRIBUTE_
+{
+ DWORD cbStruct;
+ LPWSTR pwszReferenceTag;
+ DWORD dwAttrTypeAndAction;
+ DWORD cbValue;
+ BYTE *pbValue;
+ DWORD dwReserved;
+} CRYPTCATATTRIBUTE;
+
+typedef struct CRYPTCATMEMBER_
+{
+ DWORD cbStruct;
+ LPWSTR pwszReferenceTag;
+ LPWSTR pwszFileName;
+ GUID gSubjectType;
+ DWORD fdwMemberFlags;
+ struct SIP_INDIRECT_DATA_* pIndirectData;
+ DWORD dwCertVersion;
+ DWORD dwReserved;
+ HANDLE hReserved;
+ CRYPT_ATTR_BLOB sEncodedIndirectData;
+ CRYPT_ATTR_BLOB sEncodedMemberInfo;
+} CRYPTCATMEMBER;
+
+typedef struct CATALOG_INFO_
+{
+ DWORD cbStruct;
+ WCHAR wszCatalogFile[MAX_PATH];
+} CATALOG_INFO;
+
+typedef struct CRYPTCATCDF_
+{
+ DWORD cbStruct;
+ HANDLE hFile;
+ DWORD dwCurFilePos;
+ DWORD dwLastMemberOffset;
+ BOOL fEOF;
+ LPWSTR pwszResultDir;
+ HANDLE hCATStore;
+} CRYPTCATCDF;
+
+#include <poppack.h>
+
+typedef void (WINAPI *PFN_CDF_PARSE_ERROR_CALLBACK)(DWORD, DWORD, WCHAR *);
+
+BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN*,const GUID*,DWORD);
+HCATINFO WINAPI CryptCATAdminAddCatalog(HCATADMIN,PWSTR,PWSTR,DWORD);
+BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(HANDLE,DWORD*,BYTE*,DWORD);
+HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN,BYTE*,DWORD,DWORD,HCATINFO*);
+BOOL WINAPI CryptCATAdminReleaseCatalogContext(HCATADMIN,HCATINFO,DWORD);
+BOOL WINAPI CryptCATAdminReleaseContext(HCATADMIN,DWORD);
+BOOL WINAPI CryptCATAdminRemoveCatalog(HCATADMIN,LPCWSTR,DWORD);
+BOOL WINAPI CryptCATAdminResolveCatalogPath(HCATADMIN, WCHAR *, CATALOG_INFO *, DWORD);
+BOOL WINAPI CryptCATCatalogInfoFromContext(HCATINFO, CATALOG_INFO *, DWORD);
+BOOL WINAPI CryptCATCDFClose(CRYPTCATCDF *);
+CRYPTCATATTRIBUTE * WINAPI CryptCATCDFEnumCatAttributes(CRYPTCATCDF *, CRYPTCATATTRIBUTE *,
+ PFN_CDF_PARSE_ERROR_CALLBACK);
+LPWSTR WINAPI CryptCATCDFEnumMembersByCDFTagEx(CRYPTCATCDF *, LPWSTR,
+ PFN_CDF_PARSE_ERROR_CALLBACK,
+ CRYPTCATMEMBER **, BOOL, LPVOID);
+CRYPTCATCDF * WINAPI CryptCATCDFOpen(LPWSTR, PFN_CDF_PARSE_ERROR_CALLBACK);
+BOOL WINAPI CryptCATClose(HANDLE);
+CRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateAttr(HANDLE, CRYPTCATMEMBER *, CRYPTCATATTRIBUTE *);
+CRYPTCATATTRIBUTE * WINAPI CryptCATEnumerateCatAttr(HANDLE, CRYPTCATATTRIBUTE *);
+CRYPTCATMEMBER * WINAPI CryptCATEnumerateMember(HANDLE,CRYPTCATMEMBER *);
+CRYPTCATATTRIBUTE * WINAPI CryptCATGetAttrInfo(HANDLE, CRYPTCATMEMBER *, LPWSTR);
+CRYPTCATATTRIBUTE * WINAPI CryptCATGetCatAttrInfo(HANDLE, LPWSTR);
+CRYPTCATMEMBER * WINAPI CryptCATGetMemberInfo(HANDLE, LPWSTR);
+HANDLE WINAPI CryptCATOpen(LPWSTR,DWORD,HCRYPTPROV,DWORD,DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl
new file mode 100644
index 00000000..8387598a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mscoree.idl
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+cpp_quote("/* FIXME: #include <gcghost.h> */")
+cpp_quote("/* FIXME: #include <ivalidator.h> */")
+
+cpp_quote("HRESULT WINAPI CorBindToRuntimeHost(LPCWSTR,LPCWSTR,LPCWSTR,VOID*,DWORD,REFCLSID,REFIID,LPVOID*);")
+cpp_quote("void WINAPI CorExitProcess(int);")
+cpp_quote("HRESULT WINAPI GetCORSystemDirectory(LPWSTR,DWORD,DWORD*);")
+cpp_quote("HRESULT WINAPI GetCORVersion(LPWSTR,DWORD,DWORD*);")
+cpp_quote("HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPWSTR,DWORD,DWORD*,LPWSTR,DWORD,DWORD*);")
+cpp_quote("HRESULT WINAPI LoadLibraryShim(LPCWSTR,LPCWSTR,LPVOID,HMODULE*);")
+cpp_quote("#ifdef WINE_STRICT_PROTOTYPES")
+cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)(void);")
+cpp_quote("#else")
+cpp_quote("typedef HRESULT (__stdcall *FLockClrVersionCallback)();")
+cpp_quote("#endif")
+cpp_quote("HRESULT WINAPI LockClrVersion(FLockClrVersionCallback,FLockClrVersionCallback*,FLockClrVersionCallback*);")
+
+typedef void* HDOMAINENUM;
+
+typedef enum RUNTIME_INFO_FLAGS {
+ RUNTIME_INFO_UPGRADE_VERSION = 0x1,
+ RUNTIME_INFO_REQUEST_IA64 = 0x2,
+ RUNTIME_INFO_REQUEST_AMD64 = 0x4,
+ RUNTIME_INFO_REQUEST_X86 = 0x8,
+ RUNTIME_INFO_DONT_RETURN_DIRECTORY = 0x10,
+ RUNTIME_INFO_DONT_RETURN_VERSION = 0x20,
+ RUNTIME_INFO_DONT_SHOW_ERROR_DIALOG = 0x40
+} RUNTIME_INFO_FLAGS;
+
+typedef HRESULT (__stdcall *FExecuteInAppDomainCallback)([in] void* cookie);
+
+[
+ uuid(F31D1788-C397-4725-87A5-6AF3472C2791),
+ version(1.0),
+ object,
+ local
+]
+interface IGCThreadControl : IUnknown
+{
+ HRESULT ThreadIsBlockingForSuspension();
+
+ HRESULT SuspensionStarting();
+
+ HRESULT SuspensionEnding(DWORD generation);
+}
+
+[
+ uuid(5513D564-8374-4cb9-AED9-0083F4160A1D),
+ version(1.1),
+ local,
+ object
+]
+interface IGCHostControl : IUnknown
+{
+ HRESULT RequestVirtualMemLimit([in] SIZE_T nMaxVirtualMemMB,
+ [in, out] SIZE_T* nNewMaxVirtualMemMB);
+}
+
+[
+ uuid(23D86786-0BB5-4774-8FB5-E3522ADD6246),
+ version(1.0),
+ local,
+ object
+]
+interface IDebuggerThreadControl : IUnknown
+{
+ HRESULT ThreadIsBlockingForDebugger();
+
+ HRESULT ReleaseAllRuntimeThreads();
+
+ HRESULT StartBlockingForDebugger(DWORD dwUnused);
+}
+
+[
+ uuid(5C2B07A5-1E98-11d3-872F-00C04F79ED0D),
+ version(1.0),
+ local,
+ object
+]
+interface ICorConfiguration : IUnknown
+{
+ HRESULT SetGCThreadControl([in] IGCThreadControl* GCThreadControl);
+
+ HRESULT SetGCHostControl([in] IGCHostControl* GCHostControl);
+
+ HRESULT SetDebuggerThreadControl([in] IDebuggerThreadControl* debuggerThreadControl);
+
+ HRESULT AddDebuggerSpecialThread([in] DWORD specialThreadId);
+}
+
+[
+ uuid(9065597E-D1A1-4fb2-B6BA-7E1FCE230F61),
+ version(1.0),
+ local
+]
+interface ICLRControl : IUnknown
+{
+ HRESULT GetCLRManager([in] REFIID riid, [out] void **ppObject);
+
+ HRESULT SetAppDomainManagerType([in] LPCWSTR appDomainManagerAssembly,
+ [in] LPCWSTR appDomainManagerType);
+}
+
+[
+ uuid(02CA073C-7079-4860-880A-C2F7A449C991),
+ version(1.0),
+ local
+]
+interface IHostControl : IUnknown
+{
+ HRESULT GetHostManager( [in] REFIID riid, [out] void **ppObject);
+
+ HRESULT SetAppDomainManager([in] DWORD appDomainID,
+ [in] IUnknown* appDomainManager);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_CorRuntimeHost, 0xcb2f6723,0xab3a,0x11d2,0x9c,0x40,0x00,0xc0,0x4f,0xa3,0x0a,0x3e);")
+
+[
+ uuid(CB2F6722-AB3A-11d2-9C40-00C04FA30A3E),
+ version(1.0),
+ local,
+ object
+]
+interface ICorRuntimeHost : IUnknown
+{
+ HRESULT CreateLogicalThreadState();
+ HRESULT DeleteLogicalThreadState();
+ HRESULT SwitchInLogicalThreadState([in] DWORD *fiberCookie);
+
+ HRESULT SwitchOutLogicalThreadState([out] DWORD **fiberCookie);
+
+ HRESULT LocksHeldByLogicalThread( [out] DWORD *pCount );
+
+ HRESULT MapFile([in] HANDLE hFile, [out] HMODULE* mapAddress);
+
+ HRESULT GetConfiguration([out] ICorConfiguration** pConfiguration);
+
+ HRESULT Start();
+
+ HRESULT Stop();
+
+ HRESULT CreateDomain([in] LPCWSTR friendlyName,
+ [in] IUnknown* identityArray,
+ [out] IUnknown** appDomain);
+
+ HRESULT GetDefaultDomain([out] IUnknown** pAppDomain);
+
+ HRESULT EnumDomains([out] HDOMAINENUM *hEnum);
+
+ HRESULT NextDomain([in] HDOMAINENUM hEnum, [out] IUnknown** appDomain);
+
+ HRESULT CloseEnum([in] HDOMAINENUM hEnum);
+
+ HRESULT CreateDomainEx([in] LPCWSTR friendlyName,
+ [in] IUnknown* setup,
+ [in] IUnknown* evidence,
+ [out] IUnknown** appDomain);
+
+ HRESULT CreateDomainSetup([out] IUnknown** appDomainSetup);
+
+ HRESULT CreateEvidence([out] IUnknown** evidence);
+
+ HRESULT UnloadDomain([in] IUnknown* appDomain);
+
+ HRESULT CurrentDomain([out] IUnknown** appDomain);
+};
+
+cpp_quote("DEFINE_GUID(CLSID_CLRRuntimeHost, 0x90f1a06e,0x7712,0x4762,0x86,0xb5,0x7a,0x5e,0xba,0x6b,0xdb,0x02);")
+
+[
+ uuid(90f1a06c-7712-4762-86b5-7a5eba6bdb02),
+ local,
+ object
+]
+interface ICLRRuntimeHost : IUnknown
+{
+ HRESULT Start();
+
+ HRESULT Stop();
+
+ HRESULT SetHostControl([in] IHostControl *pHostControl);
+
+ HRESULT GetCLRControl([out] ICLRControl **pCLRControl);
+
+ HRESULT UnloadAppDomain([in] DWORD dwAppDomainId,
+ [in] BOOL fWaitUntilDone);
+
+ HRESULT ExecuteInAppDomain([in] DWORD dwAppDomainId,
+ [in] FExecuteInAppDomainCallback pCallback,
+ [in] void *cookie);
+
+ HRESULT GetCurrentAppDomainId([out] DWORD *pdwAppDomainId);
+
+ HRESULT ExecuteApplication([in] LPCWSTR pwzAppFullName,
+ [in] DWORD dwManifestPaths,
+ [in] LPCWSTR *ppwzManifestPaths,
+ [in] DWORD dwActivationData,
+ [in] LPCWSTR *ppwzActivationData,
+ [out] int *pReturnValue);
+
+ HRESULT ExecuteInDefaultAppDomain([in] LPCWSTR pwzAssemblyPath,
+ [in] LPCWSTR pwzTypeName,
+ [in] LPCWSTR pwzMethodName,
+ [in] LPCWSTR pwzArgument,
+ [out] DWORD *pReturnValue);
+}
+
+[
+ uuid(C3FCC19E-A970-11d2-8B5A-00A0C9B7C9C4),
+ local,
+ object
+]
+interface IManagedObject : IUnknown
+{
+ HRESULT GetSerializedBuffer([out] BSTR *pBSTR);
+
+ HRESULT GetObjectIdentity([out] BSTR *pBSTRGUID,
+ [out] int *AppDomainID,
+ [out] int *pCCW);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl
new file mode 100644
index 00000000..a21f9778
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msctf.idl
@@ -0,0 +1,1533 @@
+/*
+ * Copyright 2008 Aric Stewart, CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+import "comcat.idl";
+import "textstor.idl";
+import "ctfutb.idl";
+#endif
+cpp_quote("#include <winuser.h>")
+
+cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)")
+cpp_quote("#define TF_E_DISCONNECTED MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0504)")
+cpp_quote("#define TF_E_ALREADY_EXISTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0506)")
+cpp_quote("#define TF_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
+
+cpp_quote("HRESULT WINAPI TF_CreateThreadMgr(ITfThreadMgr **pptim);")
+cpp_quote("HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim);")
+cpp_quote("HRESULT WINAPI TF_CreateInputProcessorProfiles(ITfInputProcessorProfiles **ppipr);")
+cpp_quote("HRESULT WINAPI TF_CreateLangBarMgr(ITfLangBarMgr **pppbm);")
+cpp_quote("HRESULT WINAPI TF_CreateLangBarItemMgr(ITfLangBarItemMgr **pplbim);")
+cpp_quote("HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(void);")
+
+cpp_quote("EXTERN_C const GUID GUID_PROP_TEXTOWNER;")
+cpp_quote("DEFINE_GUID(GUID_PROP_ATTRIBUTE,0x34b45670,0x7526,0x11d2,0xa1,0x47,0x00,0x10,0x5a,0x27,0x99,0xb5);")
+cpp_quote("EXTERN_C const GUID GUID_PROP_LANGID;")
+cpp_quote("EXTERN_C const GUID GUID_PROP_READING;")
+cpp_quote("EXTERN_C const GUID GUID_PROP_COMPOSING;")
+
+cpp_quote("EXTERN_C const CLSID CLSID_TF_ThreadMgr;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_InputProcessorProfiles;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_LangBarMgr;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_CategoryMgr;")
+cpp_quote("EXTERN_C const CLSID CLSID_TF_DisplayAttributeMgr;")
+
+/* GUIDs for Compartments */
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_DISABLED;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_KEYBOARD_OPENCLOSE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_HANDWRITING_OPENCLOSE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_DISABLED;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_OPENCLOSE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_SPEECH_GLOBALSTATE;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_PERSISTMENUENABLED;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_EMPTYCONTEXT;")
+cpp_quote("EXTERN_C const GUID GUID_COMPARTMENT_TIPUISTATUS;")
+
+/* GUIDs for Categories */
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_KEYBOARD;")
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_SPEECH;")
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_TIP_HANDWRITING;")
+cpp_quote("EXTERN_C const GUID GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER;")
+
+typedef [uuid(7213778c-7bb0-4270-b050-6189ee594e97)] DWORD TfEditCookie;
+typedef [uuid(de403c21-89fd-4f85-8b87-64584d063fbc)] DWORD TfClientId;
+typedef [uuid(88a9c478-f3ec-4763-8345-cd9250443f8d)] DWORD TfGuidAtom;
+
+cpp_quote("#define TF_MOD_ALT 0x0001")
+cpp_quote("#define TF_MOD_CONTROL 0x0002")
+cpp_quote("#define TF_MOD_SHIFT 0x0004")
+cpp_quote("#define TF_MOD_RALT 0x0008")
+cpp_quote("#define TF_MOD_RCONTROL 0x0010")
+cpp_quote("#define TF_MOD_RSHIFT 0x0020")
+cpp_quote("#define TF_MOD_LALT 0x0040")
+cpp_quote("#define TF_MOD_LCONTROL 0x0080")
+cpp_quote("#define TF_MOD_LSHIFT 0x0100")
+cpp_quote("#define TF_MOD_ON_KEYUP 0x0200")
+cpp_quote("#define TF_MOD_IGNORE_ALL_MODIFIER 0x0400")
+
+cpp_quote("#define TF_PROFILETYPE_INPUTPROCESSOR 0x0001")
+cpp_quote("#define TF_PROFILETYPE_KEYBOARDLAYOUT 0x0002")
+
+interface ITfDocumentMgr;
+interface ITfContext;
+interface IEnumTfDocumentMgrs;
+interface IEnumTfContexts;
+interface ITfFunctionProvider;
+interface IEnumTfFunctionProviders;
+interface ITfCompartmentMgr;
+interface ITfEditSession;
+interface ITfRange;
+interface ITfContextView;
+interface IEnumTfContextViews;
+interface ITfProperty;
+interface ITfReadOnlyProperty;
+interface IEnumTfProperties;
+interface ITfRangeBackup;
+interface IEnumTfLanguageProfiles;
+interface ITfEditRecord;
+interface ITfCompositionView;
+interface ITfKeyEventSink;
+
+cpp_quote("#if 0")
+typedef [uuid(4f5d560f-5ab5-4dde-8c4d-404592857ab0)] UINT_PTR HKL;
+cpp_quote("#endif")
+
+typedef [uuid(e26d9e1d-691e-4f29-90d7-338dcf1f8cef)] struct TF_PERSISTENT_PROPERTY_HEADER_ACP
+{
+ GUID guidType;
+ LONG ichStart;
+ LONG cch;
+ ULONG cb;
+ DWORD dwPrivate;
+ CLSID clsidTIP;
+} TF_PERSISTENT_PROPERTY_HEADER_ACP;
+
+typedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE
+{
+ CLSID clsid;
+ LANGID langid;
+ GUID catid;
+ BOOL fActive;
+ GUID guidProfile;
+} TF_LANGUAGEPROFILE;
+
+typedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY
+{
+ UINT uVKey;
+ UINT uModifiers;
+} TF_PRESERVEDKEY;
+
+typedef [uuid(5a886226-ae9a-489b-b991-2b1e25ee59a9)] enum { TF_ANCHOR_START = 0, TF_ANCHOR_END = 1 } TfAnchor;
+
+[
+ object,
+ uuid(aa80e801-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfThreadMgr: IUnknown
+{
+ HRESULT Activate(
+ [out] TfClientId *ptid);
+
+ HRESULT Deactivate();
+
+ HRESULT CreateDocumentMgr(
+ [out] ITfDocumentMgr **ppdim);
+
+ HRESULT EnumDocumentMgrs(
+ [out] IEnumTfDocumentMgrs **ppEnum);
+
+ HRESULT GetFocus(
+ [out] ITfDocumentMgr **ppdimFocus);
+
+ HRESULT SetFocus(
+ [in] ITfDocumentMgr *pdimFocus);
+
+ HRESULT AssociateFocus(
+ [in] HWND hwnd,
+ [in, unique] ITfDocumentMgr *pdimNew,
+ [out] ITfDocumentMgr **ppdimPrev);
+
+ HRESULT IsThreadFocus(
+ [out] BOOL *pfThreadFocus);
+
+ HRESULT GetFunctionProvider(
+ [in] REFCLSID clsid,
+ [out] ITfFunctionProvider **ppFuncProv);
+
+ HRESULT EnumFunctionProviders(
+ [out] IEnumTfFunctionProviders **ppEnum);
+
+ HRESULT GetGlobalCompartment(
+ [out] ITfCompartmentMgr **ppCompMgr);
+};
+
+[
+ object,
+ uuid(d7540241-f9a1-4364-befc-dbcd2c4395b7),
+ pointer_default(unique)
+]
+interface ITfCompositionView : IUnknown
+{
+ HRESULT GetOwnerClsid([out] CLSID *pclsid);
+
+ HRESULT GetRange([out] ITfRange **ppRange);
+}
+
+[
+ object,
+ uuid(aa80e7f4-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfDocumentMgr: IUnknown
+{
+ HRESULT CreateContext(
+ [in] TfClientId tidOwner,
+ [in] DWORD dwFlags,
+ [in, unique] IUnknown *punk,
+ [out] ITfContext **ppic,
+ [out] TfEditCookie *pecTextStore);
+
+ HRESULT Push(
+ [in] ITfContext *pic);
+
+ const DWORD TF_POPF_ALL = 0x0001;
+
+ HRESULT Pop(
+ [in] DWORD dwFlags);
+
+ HRESULT GetTop(
+ [out] ITfContext **ppic);
+
+ HRESULT GetBase(
+ [out] ITfContext **ppic);
+
+ HRESULT EnumContexts(
+ [out] IEnumTfContexts **ppEnum);
+};
+
+[
+ object,
+ uuid(aa80e7fd-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfContext : IUnknown
+{
+ const DWORD TF_ES_ASYNCDONTCARE = 0x0;
+ const DWORD TF_ES_SYNC = 0x1;
+ const DWORD TF_ES_READ = 0x2;
+ const DWORD TF_ES_READWRITE = 0x6;
+ const DWORD TF_ES_ASYNC = 0x8;
+
+ HRESULT RequestEditSession(
+ [in] TfClientId tid,
+ [in] ITfEditSession *pes,
+ [in] DWORD dwFlags,
+ [out] HRESULT *phrSession);
+
+ HRESULT InWriteSession(
+ [in] TfClientId tid,
+ [out] BOOL *pfWriteSession);
+
+ typedef [uuid(1690be9b-d3e9-49f6-8d8b-51b905af4c43)] enum { TF_AE_NONE, TF_AE_START, TF_AE_END } TfActiveSelEnd;
+
+ typedef [uuid(36ae42a4-6989-4bdc-b48a-6137b7bf2e42)] struct TF_SELECTIONSTYLE
+ {
+ TfActiveSelEnd ase;
+ BOOL fInterimChar;
+ } TF_SELECTIONSTYLE;
+
+ typedef [uuid(75eb22f2-b0bf-46a8-8006-975a3b6efcf1)] struct TF_SELECTION
+ {
+ ITfRange *range;
+ TF_SELECTIONSTYLE style;
+ } TF_SELECTION;
+
+ const ULONG TF_DEFAULT_SELECTION = TS_DEFAULT_SELECTION;
+
+ HRESULT GetSelection(
+ [in] TfEditCookie ec,
+ [in] ULONG ulIndex,
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] TF_SELECTION *pSelection,
+ [out] ULONG *pcFetched);
+
+ HRESULT SetSelection(
+ [in] TfEditCookie ec,
+ [in] ULONG ulCount,
+ [in, size_is(ulCount)] const TF_SELECTION *pSelection);
+
+ HRESULT GetStart(
+ [in] TfEditCookie ec,
+ [out] ITfRange **ppStart);
+
+ HRESULT GetEnd(
+ [in] TfEditCookie ec,
+ [out] ITfRange **ppEnd);
+
+ typedef [uuid(bc7d979a-846a-444d-afef-0a9bfa82b961)] TS_STATUS TF_STATUS;
+ const DWORD TF_SD_READONLY = TS_SD_READONLY;
+ const DWORD TF_SD_LOADING = TS_SD_LOADING;
+ const DWORD TF_SS_DISJOINTSEL = TS_SS_DISJOINTSEL;
+ const DWORD TF_SS_REGIONS = TS_SS_REGIONS;
+ const DWORD TF_SS_TRANSITORY = TS_SS_TRANSITORY;
+
+
+ HRESULT GetActiveView(
+ [out] ITfContextView **ppView);
+
+ HRESULT EnumViews(
+ [out] IEnumTfContextViews **ppEnum);
+
+ HRESULT GetStatus(
+ [out] TF_STATUS *pdcs);
+
+ HRESULT GetProperty(
+ [in] REFGUID guidProp,
+ [out] ITfProperty **ppProp);
+
+ HRESULT GetAppProperty(
+ [in] REFGUID guidProp,
+ [out] ITfReadOnlyProperty **ppProp);
+
+ HRESULT TrackProperties(
+ [in, size_is(cProp)] const GUID **prgProp,
+ [in] ULONG cProp,
+ [in, size_is(cAppProp)] const GUID **prgAppProp,
+ [in] ULONG cAppProp,
+ [out] ITfReadOnlyProperty **ppProperty);
+
+ HRESULT EnumProperties(
+ [out] IEnumTfProperties **ppEnum);
+
+ HRESULT GetDocumentMgr(
+ [out] ITfDocumentMgr **ppDm);
+
+ HRESULT CreateRangeBackup(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [out] ITfRangeBackup **ppBackup);
+
+};
+
+[
+ object,
+ uuid(4ea48a35-60ae-446f-8fd6-e6a8d82459f7),
+ pointer_default(unique)
+]
+interface ITfSource : IUnknown
+{
+ HRESULT AdviseSink(
+ [in] REFIID riid,
+ [in, iid_is(riid)] IUnknown *punk,
+ [out] DWORD *pdwCookie);
+
+ HRESULT UnadviseSink(
+ [in] DWORD dwCookie);
+};
+
+[
+ object,
+ local,
+ uuid(1F02B6C5-7842-4EE6-8A0B-9A24183A95CA),
+ pointer_default(unique)
+]
+interface ITfInputProcessorProfiles : IUnknown
+{
+ HRESULT Register(
+ [in] REFCLSID rclsid);
+
+ HRESULT Unregister(
+ [in] REFCLSID rclsid);
+
+ HRESULT AddLanguageProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [in, size_is(cchDesc)] const WCHAR *pchDesc,
+ [in] ULONG cchDesc,
+ [in, size_is(cchFile)] const WCHAR *pchIconFile,
+ [in] ULONG cchFile,
+ [in] ULONG uIconIndex);
+
+ HRESULT RemoveLanguageProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile);
+
+ HRESULT EnumInputProcessorInfo(
+ [out] IEnumGUID **ppEnum);
+
+ HRESULT GetDefaultLanguageProfile(
+ [in] LANGID langid,
+ [in] REFGUID catid,
+ [out] CLSID *pclsid,
+ [out] GUID *pguidProfile);
+
+ HRESULT SetDefaultLanguageProfile(
+ [in] LANGID langid,
+ [in] REFCLSID rclsid,
+ [in] REFGUID guidProfiles);
+
+ HRESULT ActivateLanguageProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfiles);
+
+ HRESULT GetActiveLanguageProfile(
+ [in] REFCLSID rclsid,
+ [out] LANGID *plangid,
+ [out] GUID *pguidProfile);
+
+ HRESULT GetLanguageProfileDescription(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [out] BSTR *pbstrProfile);
+
+ HRESULT GetCurrentLanguage(
+ [out] LANGID *plangid);
+
+ HRESULT ChangeCurrentLanguage(
+ [in] LANGID langid);
+
+ HRESULT GetLanguageList(
+ [out] LANGID **ppLangId,
+ [out] ULONG *pulCount);
+
+ HRESULT EnumLanguageProfiles(
+ [in] LANGID langid,
+ [out] IEnumTfLanguageProfiles **ppEnum);
+
+ HRESULT EnableLanguageProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [in] BOOL fEnable);
+
+ HRESULT IsEnabledLanguageProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [out] BOOL *pfEnable);
+
+ HRESULT EnableLanguageProfileByDefault(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [in] BOOL fEnable);
+
+ HRESULT SubstituteKeyboardLayout(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [in] HKL hKL);
+};
+
+typedef [uuid(44d2825a-10e5-43b2-877f-6cb2f43b7e7e)]
+struct TF_INPUTPROCESSORPROFILE {
+ DWORD dwProfileType;
+ LANGID langid;
+ CLSID clsid;
+ GUID guidProfile;
+ GUID catid;
+ HKL hklSubstitute;
+ DWORD dwCaps;
+ HKL hkl;
+ DWORD dwFlags;
+} TF_INPUTPROCESSORPROFILE;
+
+[
+ object,
+ uuid(71c6e74d-0f28-11d8-a82a-00065b84435c),
+ pointer_default(unique)
+]
+interface IEnumTfInputProcessorProfiles : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumTfInputProcessorProfiles **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetch)] TF_INPUTPROCESSORPROFILE *pProfile,
+ [out] ULONG *pcFetch);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+}
+
+[
+ object,
+ uuid(71c6e74c-0f28-11d8-a82a-00065b84435c),
+ pointer_default(unique)
+]
+interface ITfInputProcessorProfileMgr : IUnknown
+{
+ HRESULT ActivateProfile(
+ [in] DWORD dwProfileType,
+ [in] LANGID langid,
+ [in] REFCLSID clsid,
+ [in] REFGUID guidProfile,
+ [in] HKL hkl,
+ [in] DWORD dwFlags);
+
+ HRESULT DeactivateProfile(
+ [in] DWORD dwProfileType,
+ [in] LANGID langid,
+ [in] REFCLSID clsid,
+ [in] REFGUID guidProfile,
+ [in] HKL hkl,
+ [in] DWORD dwFlags);
+
+ HRESULT GetProfile(
+ [in] DWORD dwProfileType,
+ [in] LANGID langid,
+ [in] REFCLSID clsid,
+ [in] REFGUID guidProfile,
+ [in] HKL hkl,
+ [out] TF_INPUTPROCESSORPROFILE *pProfile);
+
+
+ HRESULT EnumProfiles(
+ [in] LANGID langid,
+ [out] IEnumTfInputProcessorProfiles **ppEnum);
+
+ HRESULT ReleaseInputProcessor(
+ [in] REFCLSID rclsid,
+ [in] DWORD dwFlags);
+
+ HRESULT RegisterProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [in, size_is(cchDesc)] const WCHAR *pchDesc,
+ [in] ULONG cchDesc,
+ [in, size_is(cchFile)] const WCHAR *pchIconFile,
+ [in] ULONG cchFile,
+ [in] ULONG uIconIndex,
+ [in] HKL hklsubstitute,
+ [in] DWORD dwPreferredLayout,
+ [in] BOOL bEnabledByDefault,
+ [in] DWORD dwFlags);
+
+ HRESULT UnregisterProfile(
+ [in] REFCLSID rclsid,
+ [in] LANGID langid,
+ [in] REFGUID guidProfile,
+ [in] DWORD dwFlags);
+
+ HRESULT GetActiveProfile(
+ [in] REFGUID catid,
+ [out] TF_INPUTPROCESSORPROFILE *pProfile);
+}
+
+typedef [uuid(c4cc07f1-80cc-4a7b-bc54-98512782cbe3)]
+enum {
+ TF_LS_NONE = 0,
+ TF_LS_SOLID = 1,
+ TF_LS_DOT = 2,
+ TF_LS_DASH = 3,
+ TF_LS_SQUIGGLE = 4
+} TF_DA_LINESTYLE;
+
+typedef [uuid(d9b92e21-084a-401b-9c64-1e6dad91a1ab)]
+enum {
+ TF_CT_NONE = 0,
+ TF_CT_SYSCOLOR = 1,
+ TF_CT_COLORREF = 2
+} TF_DA_COLORTYPE;
+
+typedef [uuid(90d0cb5e-6520-4a0f-b47c-c39bd955f0d6)]
+struct TF_DA_COLOR {
+ TF_DA_COLORTYPE type;
+ [switch_type(TF_DA_COLORTYPE), switch_is(type)]
+ union {
+ [case(TF_CT_SYSCOLOR)] int nIndex;
+ [case(TF_CT_COLORREF)] COLORREF cr;
+ };
+} TF_DA_COLOR;
+
+typedef [uuid(33d2fe4b-6c24-4f67-8d75-3bc1819e4126)]
+enum {
+ TF_ATTR_INPUT = 0,
+ TF_ATTR_TARGET_CONVERTED = 1,
+ TF_ATTR_CONVERTED = 2,
+ TF_ATTR_TARGET_NOTCONVERTED = 3,
+ TF_ATTR_INPUT_ERROR = 4,
+ TF_ATTR_FIXEDCONVERTED = 5,
+ TF_ATTR_OTHER = -1
+} TF_DA_ATTR_INFO;
+
+typedef [uuid(1bf1c305-419b-4182-a4d2-9bfadc3f021f)]
+struct TF_DISPLAYATTRIBUTE {
+ TF_DA_COLOR crText;
+ TF_DA_COLOR crBk;
+ TF_DA_LINESTYLE lsStyle;
+ BOOL fBoldLine;
+ TF_DA_COLOR crLine;
+ TF_DA_ATTR_INFO bAttr;
+} TF_DISPLAYATTRIBUTE;
+
+[
+ object,
+ uuid(70528852-2f26-4aea-8c96-215150578932),
+ pointer_default(unique)
+]
+interface ITfDisplayAttributeInfo : IUnknown
+{
+ HRESULT GetGUID([out] GUID *pguid);
+
+ HRESULT GetDescription([out] BSTR *pbstrDesc);
+
+ HRESULT GetAttributeInfo([out] TF_DISPLAYATTRIBUTE *pda);
+
+ HRESULT SetAttributeInfo([in] const TF_DISPLAYATTRIBUTE *pda);
+
+ HRESULT Reset();
+}
+
+[
+ object,
+ uuid(7cef04d7-cb75-4e80-a7ab-5f5bc7d332de),
+ pointer_default(unique)
+]
+interface IEnumTfDisplayAttributeInfo : IUnknown
+{
+ HRESULT Clone([out] IEnumTfDisplayAttributeInfo **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] ITfDisplayAttributeInfo **rgInfo,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip([in] ULONG ulCount);
+}
+
+[
+ object,
+ local,
+ uuid(8ded7393-5db1-475c-9e71-a39111b0ff67),
+ pointer_default(unique)
+]
+interface ITfDisplayAttributeMgr : IUnknown
+{
+ HRESULT OnUpdateInfo();
+
+ HRESULT EnumDisplayAttributeInfo([out] IEnumTfDisplayAttributeInfo **ppEnum);
+
+ HRESULT GetDisplayAttributeInfo(
+ [in] REFGUID guid,
+ [out] ITfDisplayAttributeInfo **ppInfo,
+ [out] CLSID *pclsidOwner);
+
+}
+
+[
+ object,
+ local,
+ uuid(c3acefb5-f69d-4905-938f-fcadcf4be830),
+ pointer_default(unique)
+]
+interface ITfCategoryMgr : IUnknown
+{
+ HRESULT RegisterCategory([in] REFCLSID rclsid,
+ [in] REFGUID rcatid,
+ [in] REFGUID rguid);
+
+ HRESULT UnregisterCategory([in] REFCLSID rclsid,
+ [in] REFGUID rcatid,
+ [in] REFGUID rguid);
+
+ HRESULT EnumCategoriesInItem([in] REFGUID rguid,
+ [out] IEnumGUID **ppEnum);
+
+ HRESULT EnumItemsInCategory([in] REFGUID rcatid,
+ [out] IEnumGUID **ppEnum);
+
+ HRESULT FindClosestCategory([in] REFGUID rguid,
+ [out] GUID *pcatid,
+ [in, size_is(ulCount)] const GUID **ppcatidList,
+ [in] ULONG ulCount);
+
+ HRESULT RegisterGUIDDescription([in] REFCLSID rclsid,
+ [in] REFGUID rguid,
+ [in, size_is(cch)] const WCHAR *pchDesc,
+ [in] ULONG cch);
+
+ HRESULT UnregisterGUIDDescription([in] REFCLSID rclsid,
+ [in] REFGUID rguid);
+
+ HRESULT GetGUIDDescription([in] REFGUID rguid,
+ [out] BSTR *pbstrDesc);
+
+ HRESULT RegisterGUIDDWORD([in] REFCLSID rclsid,
+ [in] REFGUID rguid,
+ [in] DWORD dw);
+
+ HRESULT UnregisterGUIDDWORD([in] REFCLSID rclsid,
+ [in] REFGUID rguid);
+
+ HRESULT GetGUIDDWORD([in] REFGUID rguid,
+ [out] DWORD *pdw);
+
+ HRESULT RegisterGUID([in] REFGUID rguid,
+ [out] TfGuidAtom *pguidatom);
+
+ HRESULT GetGUID([in] TfGuidAtom guidatom,
+ [out] GUID *pguid);
+
+ HRESULT IsEqualTfGuidAtom([in] TfGuidAtom guidatom,
+ [in] REFGUID rguid,
+ [out] BOOL *pfEqual);
+};
+
+[
+ object,
+ uuid(8127d409-ccd3-4683-967a-b43d5b482bf7),
+ pointer_default(unique)
+]
+interface ITfTextEditSink : IUnknown
+{
+ HRESULT OnEndEdit(
+ [in] ITfContext *pic,
+ [in] TfEditCookie ecReadOnly,
+ [in] ITfEditRecord *pEditRecord);
+};
+
+[
+ object,
+ uuid(5F20AA40-B57A-4F34-96AB-3576F377CC79),
+ pointer_default(unique)
+]
+interface ITfContextOwnerCompositionSink : IUnknown
+{
+ HRESULT OnStartComposition(
+ [in] ITfCompositionView *pComposition,
+ [out] BOOL *pfOk);
+
+ HRESULT OnUpdateComposition(
+ [in] ITfCompositionView *pComposition,
+ [in] ITfRange *pRangeNew);
+
+ HRESULT OnEndComposition(
+ [in] ITfCompositionView *pComposition);
+};
+
+[
+ object,
+ uuid(3d61bf11-ac5f-42c8-a4cb-931bcc28c744),
+ pointer_default(unique)
+]
+interface IEnumTfLanguageProfiles : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumTfLanguageProfiles **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetch)] TF_LANGUAGEPROFILE *pProfile,
+ [out] ULONG *pcFetch);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+};
+
+[
+ object,
+ local,
+ uuid(aa80e7f7-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfTextInputProcessor : IUnknown
+{
+ HRESULT Activate(
+ [in] ITfThreadMgr *ptim,
+ [in] TfClientId tid);
+
+ HRESULT Deactivate();
+};
+
+[
+ object,
+ uuid(aa80e80e-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfThreadMgrEventSink : IUnknown
+{
+ HRESULT OnInitDocumentMgr(
+ [in] ITfDocumentMgr *pdim);
+
+ HRESULT OnUninitDocumentMgr(
+ [in] ITfDocumentMgr *pdim);
+
+ HRESULT OnSetFocus(
+ [in] ITfDocumentMgr *pdimFocus,
+ [in] ITfDocumentMgr *pdimPrevFocus);
+
+ HRESULT OnPushContext(
+ [in] ITfContext *pic);
+
+ HRESULT OnPopContext(
+ [in] ITfContext *pic);
+};
+
+[
+ object,
+ local,
+ uuid(aa80e7f0-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfKeystrokeMgr : IUnknown
+{
+ HRESULT AdviseKeyEventSink(
+ [in] TfClientId tid,
+ [in] ITfKeyEventSink *pSink,
+ [in] BOOL fForeground);
+
+ HRESULT UnadviseKeyEventSink(
+ [in] TfClientId tid);
+
+ HRESULT GetForeground(
+ [out] CLSID *pclsid);
+
+ HRESULT TestKeyDown(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT TestKeyUp(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT KeyDown(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT KeyUp(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT GetPreservedKey(
+ [in] ITfContext *pic,
+ [in] const TF_PRESERVEDKEY *pprekey,
+ [out] GUID *pguid);
+
+ HRESULT IsPreservedKey(
+ [in] REFGUID rguid,
+ [in] const TF_PRESERVEDKEY *pprekey,
+ [out] BOOL *pfRegistered);
+
+ HRESULT PreserveKey(
+ [in] TfClientId tid,
+ [in] REFGUID rguid,
+ [in] const TF_PRESERVEDKEY *prekey,
+ [in, size_is(cchDesc)] const WCHAR *pchDesc,
+ [in] ULONG cchDesc);
+
+ HRESULT UnpreserveKey(
+ [in] REFGUID rguid,
+ [in] const TF_PRESERVEDKEY *pprekey);
+
+ HRESULT SetPreservedKeyDescription(
+ [in] REFGUID rguid,
+ [in, size_is(cchDesc)] const WCHAR *pchDesc,
+ [in] ULONG cchDesc);
+
+ HRESULT GetPreservedKeyDescription(
+ [in] REFGUID rguid,
+ [out] BSTR *pbstrDesc);
+
+ HRESULT SimulatePreservedKey(
+ [in] ITfContext *pic,
+ [in] REFGUID rguid,
+ [out] BOOL *pfEaten);
+};
+
+[
+ object,
+ local,
+ uuid(aa80e7f5-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfKeyEventSink : IUnknown
+{
+ HRESULT OnSetFocus(
+ [in] BOOL fForeground);
+
+ HRESULT OnTestKeyDown(
+ [in] ITfContext *pic,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT OnTestKeyUp(
+ [in] ITfContext *pic,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT OnKeyDown(
+ [in] ITfContext *pic,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT OnKeyUp(
+ [in] ITfContext *pic,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT OnPreservedKey(
+ [in] ITfContext *pic,
+ [in] REFGUID rguid,
+ [out] BOOL *pfEaten);
+};
+
+[
+ object,
+ local,
+ uuid(8f1b8ad8-0b6b-4874-90c5-bd76011e8f7c),
+ pointer_default(unique)
+]
+interface ITfMessagePump : IUnknown
+{
+ HRESULT PeekMessageA(
+ [out] LPMSG pMsg,
+ [in] HWND hwnd,
+ [in] UINT wMsgFilterMin,
+ [in] UINT wMsgFilterMax,
+ [in] UINT wRemoveMsg,
+ [out] BOOL *pfResult);
+
+ HRESULT GetMessageA(
+ [out] LPMSG pMsg,
+ [in] HWND hwnd,
+ [in] UINT wMsgFilterMin,
+ [in] UINT wMsgFilterMax,
+ [out] BOOL *pfResult);
+
+ HRESULT PeekMessageW(
+ [out] LPMSG pMsg,
+ [in] HWND hwnd,
+ [in] UINT wMsgFilterMin,
+ [in] UINT wMsgFilterMax,
+ [in] UINT wRemoveMsg,
+ [out] BOOL *pfResult);
+
+ HRESULT GetMessageW(
+ [out] LPMSG pMsg,
+ [in] HWND hwnd,
+ [in] UINT wMsgFilterMin,
+ [in] UINT wMsgFilterMax,
+ [out] BOOL *pfResult);
+};
+
+[
+ object,
+ local,
+ uuid(d60a7b49-1b9f-4be2-b702-47e9dc05dec3),
+ pointer_default(unique)
+]
+interface ITfClientId : IUnknown
+{
+ HRESULT GetClientId(
+ [in] REFCLSID rclsid,
+ [out] TfClientId *ptid);
+};
+
+[
+ object,
+ uuid(43c9fe15-f494-4c17-9de2-b8a4ac350aa8),
+ pointer_default(unique)
+]
+interface ITfLanguageProfileNotifySink : IUnknown
+{
+ HRESULT OnLanguageChange(
+ [in] LANGID langid,
+ [out] BOOL *pfAccept);
+
+ HRESULT OnLanguageChanged();
+}
+
+[
+ object,
+ uuid(aa80e803-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfEditSession : IUnknown
+{
+ HRESULT DoEditSession(
+ [in] TfEditCookie ec);
+}
+
+[
+ object,
+ uuid(aa80e7ff-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfRange : IUnknown
+{
+ const WCHAR TF_CHAR_EMBEDDED = TS_CHAR_EMBEDDED;
+
+ typedef [uuid(cf610f06-2882-46f6-abe5-298568b664c4)] enum { TF_GRAVITY_BACKWARD = 0, TF_GRAVITY_FORWARD = 1 } TfGravity;
+
+ typedef [uuid(1e512533-bbdc-4530-9a8e-a1dc0af67468)] enum { TF_SD_BACKWARD = 0, TF_SD_FORWARD = 1 } TfShiftDir;
+
+ const DWORD TF_HF_OBJECT = 1;
+ const DWORD TF_TF_MOVESTART = 1;
+ const DWORD TF_TF_IGNOREEND = 2;
+ const DWORD TF_ST_CORRECTION = 1;
+ const DWORD TF_IE_CORRECTION = 1;
+
+ typedef [uuid(49930d51-7d93-448c-a48c-fea5dac192b1)] struct TF_HALTCOND
+ {
+ ITfRange *pHaltRange;
+ TfAnchor aHaltPos;
+ DWORD dwFlags;
+ } TF_HALTCOND;
+
+ HRESULT GetText(
+ [in] TfEditCookie ec,
+ [in] DWORD dwFlags,
+ [out, size_is(cchMax), length_is(*pcch)] WCHAR *pchText,
+ [in] ULONG cchMax,
+ [out] ULONG *pcch);
+
+ HRESULT SetText(
+ [in] TfEditCookie ec,
+ [in] DWORD dwFlags,
+ [in, size_is(cch), unique] const WCHAR *pchText,
+ [in] LONG cch);
+
+ HRESULT GetFormattedText(
+ [in] TfEditCookie ec,
+ [out] IDataObject **ppDataObject);
+
+ HRESULT GetEmbedded(
+ [in] TfEditCookie ec,
+ [in] REFGUID rguidService,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppunk);
+
+ HRESULT InsertEmbedded(
+ [in] TfEditCookie ec,
+ [in] DWORD dwFlags,
+ [in] IDataObject *pDataObject);
+
+ HRESULT ShiftStart(
+ [in] TfEditCookie ec,
+ [in] LONG cchReq,
+ [out] LONG *pcch,
+ [in, unique] const TF_HALTCOND *pHalt);
+
+ HRESULT ShiftEnd(
+ [in] TfEditCookie ec,
+ [in] LONG cchReq,
+ [out] LONG *pcch,
+ [in, unique] const TF_HALTCOND *pHalt);
+
+ HRESULT ShiftStartToRange(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [in] TfAnchor aPos);
+
+ HRESULT ShiftEndToRange(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [in] TfAnchor aPos);
+
+ HRESULT ShiftStartRegion(
+ [in] TfEditCookie ec,
+ [in] TfShiftDir dir,
+ [out] BOOL *pfNoRegion);
+
+ HRESULT ShiftEndRegion(
+ [in] TfEditCookie ec,
+ [in] TfShiftDir dir,
+ [out] BOOL *pfNoRegion);
+
+ HRESULT IsEmpty(
+ [in] TfEditCookie ec,
+ [out] BOOL *pfEmpty);
+
+ HRESULT Collapse(
+ [in] TfEditCookie ec,
+ [in] TfAnchor aPos);
+
+ HRESULT IsEqualStart(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pWith,
+ [in] TfAnchor aPos,
+ [out] BOOL *pfEqual);
+
+ HRESULT IsEqualEnd(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pWith,
+ [in] TfAnchor aPos,
+ [out] BOOL *pfEqual);
+
+ HRESULT CompareStart(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pWith,
+ [in] TfAnchor aPos,
+ [out] LONG *plResult);
+
+ HRESULT CompareEnd(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pWith,
+ [in] TfAnchor aPos,
+ [out] LONG *plResult);
+
+ HRESULT AdjustForInsert(
+ [in] TfEditCookie ec,
+ [in] ULONG cchInsert,
+ [out] BOOL *pfInsertOk);
+
+ HRESULT GetGravity(
+ [out] TfGravity *pgStart,
+ [out] TfGravity *pgEnd);
+
+ HRESULT SetGravity(
+ [in] TfEditCookie ec,
+ [in] TfGravity gStart,
+ [in] TfGravity gEnd);
+
+ HRESULT Clone(
+ [out] ITfRange **ppClone);
+
+ HRESULT GetContext(
+ [out] ITfContext **ppContext);
+};
+
+[
+ object,
+ uuid(057a6296-029b-4154-b79a-0d461d4ea94c),
+ pointer_default(unique)
+]
+interface ITfRangeACP : ITfRange
+{
+ HRESULT GetExtent([out] LONG *pacpAnchor,
+ [out] LONG *pcch);
+
+ HRESULT SetExtent([in] LONG acpAnchor,
+ [in] LONG cch);
+}
+
+[
+ object,
+ uuid(55ce16ba-3014-41c1-9ceb-fade1446ac6c),
+ pointer_default(unique)
+]
+interface ITfInsertAtSelection : IUnknown
+{
+ const DWORD TF_IAS_NOQUERY = 0x1;
+ const DWORD TF_IAS_QUERYONLY = 0x2;
+ const DWORD TF_IAS_NO_DEFAULT_COMPOSITION = 0x80000000;
+
+ HRESULT InsertTextAtSelection(
+ [in] TfEditCookie ec,
+ [in] DWORD dwFlags,
+ [in, size_is(cch)] const WCHAR *pchText,
+ [in] LONG cch,
+ [out] ITfRange **ppRange);
+
+ HRESULT InsertEmbeddedAtSelection(
+ [in] TfEditCookie ec,
+ [in] DWORD dwFlags,
+ [in] IDataObject *pDataObject,
+ [out] ITfRange **ppRange);
+};
+
+[
+ object,
+ uuid(6834b120-88cb-11d2-bf45-00105a2799b5),
+ pointer_default(unique)
+]
+interface ITfPropertyStore : IUnknown
+{
+ const DWORD TF_TU_CORRECTION = 0x1;
+
+ HRESULT GetType([out] GUID *pguid);
+
+ HRESULT GetDataType([out] DWORD *pdwReserved);
+
+ HRESULT GetData([out] VARIANT *pvarValue);
+
+ HRESULT OnTextUpdated(
+ [in] DWORD dwFlags,
+ [in] ITfRange *pRangeNew,
+ [out] BOOL *pfAccept);
+
+ HRESULT Shrink(
+ [in] ITfRange *pRangeNew,
+ [out] BOOL *pfFree);
+
+ HRESULT Divide(
+ [in] ITfRange *pRangeThis,
+ [in] ITfRange *pRangeNew,
+ [out] ITfPropertyStore **ppPropStore);
+
+ HRESULT Clone(
+ [out] ITfPropertyStore **pPropStore);
+
+ HRESULT GetPropertyRangeCreator(
+ [out] CLSID *pclsid);
+
+ HRESULT Serialize(
+ [in] IStream *pStream,
+ [out] ULONG *pcb);
+}
+
+[
+ object,
+ uuid(f99d3f40-8e32-11d2-bf46-00105a2799b5),
+ pointer_default(unique)
+]
+interface IEnumTfRanges : IUnknown
+{
+ HRESULT Clone([out] IEnumTfRanges **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] ITfRange **ppRange,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(ULONG ulCount);
+}
+
+[
+ object,
+ uuid(5efd22Ba-7838-46cb-88e2-cadb14124f8f),
+ pointer_default(unique)
+]
+interface IEnumITfCompositionView : IUnknown
+{
+ HRESULT Clone([out] IEnumITfCompositionView **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] ITfCompositionView **rgCompositionView,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip([in] ULONG ulCount);
+}
+
+[
+ object,
+ uuid(20168d64-5a8f-4a5a-b7bd-cfa29f4D0fd9),
+ pointer_default(unique)
+]
+interface ITfComposition : IUnknown
+{
+ HRESULT GetRange([out] ITfRange **ppRange);
+
+ HRESULT ShiftStart(
+ [in] TfEditCookie ecWrite,
+ [in] ITfRange *pNewStart);
+
+ HRESULT ShiftEnd(
+ [in] TfEditCookie ecWrite,
+ [in] ITfRange *pNewEnd);
+
+ HRESULT EndComposition([in] TfEditCookie ecWrite);
+}
+
+[
+ object,
+ uuid(a781718c-579a-4b15-a280-32b8577acc5e),
+ pointer_default(unique)
+]
+interface ITfCompositionSink : IUnknown
+{
+ HRESULT OnCompositionTerminated(
+ [in] TfEditCookie ecWrite,
+ [in] ITfComposition *pComposition);
+}
+
+[
+ object,
+ uuid(d40C8aae-aC92-4fc7-9a11-0ee0e23aa39b),
+ pointer_default(unique)
+]
+interface ITfContextComposition : IUnknown
+{
+ HRESULT StartComposition(
+ [in] TfEditCookie ecWrite,
+ [in] ITfRange *pCompositionRange,
+ [in] ITfCompositionSink *pSink,
+ [out] ITfComposition **ppComposition);
+
+ HRESULT EnumCompositions([out] IEnumITfCompositionView **ppEnum);
+
+ HRESULT FindComposition(
+ [in] TfEditCookie ecRead,
+ [in] ITfRange *pTestRange,
+ [out] IEnumITfCompositionView **ppEnum);
+
+ HRESULT TakeOwnership(
+ [in] TfEditCookie ecWrite,
+ [in] ITfCompositionView *pComposition,
+ [in] ITfCompositionSink *pSink,
+ [out] ITfComposition **ppComposition);
+}
+
+[
+ object,
+ uuid(86462810-593b-4916-9764-19c08e9ce110),
+ pointer_default(unique)
+]
+interface ITfContextOwnerCompositionServices : ITfContextComposition
+{
+ HRESULT TerminateComposition([in] ITfCompositionView *pComposition);
+}
+
+[
+ object,
+ uuid(4ef89150-0807-11d3-8df0-00105a2799b5),
+ pointer_default(unique)
+]
+interface ITfPersistentPropertyLoaderACP : IUnknown
+{
+ HRESULT LoadProperty(
+ [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
+ [out] IStream **ppStream);
+}
+
+[
+ object,
+ uuid(b23eb630-3e1c-11d3-a745-0050040ab407),
+ pointer_default(unique)
+]
+interface ITfContextOwnerServices : IUnknown
+{
+ HRESULT OnLayoutChange();
+
+ HRESULT OnStatusChange([in] DWORD dwFlags);
+
+ HRESULT OnAttributeChange([in] REFGUID rguidAttribute);
+
+ HRESULT Serialize(
+ [in] ITfProperty *pProp,
+ [in] ITfRange *pRange,
+ [out] TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
+ [in] IStream *pStream);
+
+ HRESULT Unserialize(
+ [in] ITfProperty *pProp,
+ [in] const TF_PERSISTENT_PROPERTY_HEADER_ACP *pHdr,
+ [in] IStream *pStream,
+ [in] ITfPersistentPropertyLoaderACP *pLoader);
+
+ HRESULT ForceLoadProperty([in] ITfProperty *pProp);
+
+ HRESULT CreateRange(
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [out] ITfRangeACP **ppRange);
+}
+
+[
+ object,
+ uuid(17d49a3d-f8b8-4b2f-b254-52319dd64c53),
+ pointer_default(unique)
+]
+interface ITfReadOnlyProperty : IUnknown
+{
+ HRESULT GetType([out] GUID *pguid);
+
+ HRESULT EnumRanges(
+ [in] TfEditCookie ec,
+ [out] IEnumTfRanges **ppEnum,
+ [in] ITfRange *pTargetRange);
+
+ HRESULT GetValue(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [out] VARIANT *pvarValue);
+
+ HRESULT GetContext([out] ITfContext **ppContext);
+}
+
+[
+ object,
+ uuid(e2449660-9542-11d2-bf46-00105a2799b5),
+ pointer_default(unique)
+]
+interface ITfProperty : ITfReadOnlyProperty
+{
+ HRESULT FindRange(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [out] ITfRange **ppRange,
+ [in] TfAnchor aPos);
+
+ HRESULT SetValueStore(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [in] ITfPropertyStore *pPropStore);
+
+ HRESULT SetValue(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange,
+ [in] const VARIANT *pvarValue);
+
+ HRESULT Clear(
+ [in] TfEditCookie ec,
+ [in] ITfRange *pRange);
+}
+
+[
+ object,
+ uuid(bb08f7a9-607a-4384-8623-056892b64371),
+ pointer_default(unique)
+]
+interface ITfCompartment : IUnknown
+{
+ HRESULT SetValue(
+ [in] TfClientId tid,
+ [in] const VARIANT *pvarValue);
+
+ HRESULT GetValue(
+ [out] VARIANT *pvarValue);
+};
+
+[
+ object,
+ uuid(7dcf57ac-18ad-438b-824d-979bffb74b7c),
+ pointer_default(unique)
+]
+interface ITfCompartmentMgr : IUnknown
+{
+ HRESULT GetCompartment(
+ [in] REFGUID rguid,
+ [out] ITfCompartment **ppcomp);
+
+ HRESULT ClearCompartment(
+ [in] TfClientId tid,
+ [in] REFGUID rguid);
+
+ HRESULT EnumCompartments(
+ [out] IEnumGUID **ppEnum);
+};
+
+[
+ object,
+ uuid(743abd5f-f26d-48df-8cc5-238492419b64),
+ pointer_default(unique)
+]
+interface ITfCompartmentEventSink : IUnknown
+{
+ HRESULT OnChange(
+ [in] REFGUID rguid);
+}
+
+[
+ object,
+ uuid(8f1a7ea6-1654-4502-a86e-b2902344d507),
+ pointer_default(unique)
+]
+interface IEnumTfContexts : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumTfContexts **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] ITfContext **rgContext,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+};
+
+[
+ object,
+ uuid(aa80e808-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface IEnumTfDocumentMgrs : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumTfDocumentMgrs **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] ITfDocumentMgr **rgDocumentMgr,
+ [out] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+};
+
+[
+ object,
+ uuid(73131f9c-56a9-49dd-b0ee-d046633f7528),
+ pointer_default(unique)
+]
+interface ITfSourceSingle : IUnknown
+{
+ HRESULT AdviseSingleSink(
+ [in] TfClientId tid,
+ [in] REFIID riid,
+ [in, iid_is(riid)] IUnknown *punk);
+
+ HRESULT UnadviseSingleSink(
+ [in] TfClientId tid,
+ [in] REFIID riid);
+};
+
+[
+ object,
+ local,
+ uuid(c0f1db0c-3a20-405c-a303-96b6010a885f),
+ pointer_default(unique)
+]
+interface ITfThreadFocusSink : IUnknown
+{
+ HRESULT OnSetThreadFocus();
+
+ HRESULT OnKillThreadFocus();
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl
new file mode 100644
index 00000000..2fec429a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdadc.idl
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "oledb.idl";
+
+[
+ object,
+ pointer_default(unique),
+ uuid(0c733a8d-2a1c-11ce-ade5-00aa0044773d)
+]
+interface IDataConvert : IUnknown
+{
+ typedef DWORD DBDATACONVERT;
+
+ enum DBDATACONVERTENUM
+ {
+ DBDATACONVERT_DEFAULT = 0,
+ DBDATACONVERT_SETDATABEHAVIOR = 1,
+ DBDATACONVERT_LENGTHFROMNTS = 2,
+ DBDATACONVERT_DSTISFIXEDLENGTH = 4,
+ DBDATACONVERT_DECIMALSCALE = 8
+ };
+
+ [local] HRESULT DataConvert([in] DBTYPE wSrcType,
+ [in] DBTYPE wDstType,
+ [in] DBLENGTH cbSrcLength,
+ [in, out] DBLENGTH *pcbDstLength,
+ [in] void *pSrc,
+ [out] void *pDst,
+ [in] DBLENGTH cbDstMaxLength,
+ [in] DBSTATUS dbsSrcStatus,
+ [out] DBSTATUS *pdbsDstStatus,
+ [in] BYTE bPrecision,
+ [in] BYTE bScale,
+ [in] DBDATACONVERT dwFlags);
+
+
+ HRESULT CanConvert([in] DBTYPE wSrcType,
+ [in] DBTYPE wDstType);
+
+
+ [local] HRESULT GetConversionSize([in] DBTYPE wSrcType,
+ [in] DBTYPE wDstType,
+ [in] DBLENGTH *pcbSrcLength,
+ [out] DBLENGTH *pcbDstLength,
+ [in, size_is(*pcbSrcLength)] void *pSrc);
+};
+
+[
+ object,
+ pointer_default(unique),
+ uuid(0c733a9c-2a1c-11ce-ade5-00aa0044773d)
+]
+interface IDCInfo : IUnknown
+{
+ typedef DWORD DCINFOTYPE;
+
+ enum DCINFOTYPEENUM
+ {
+ DCINFOTYPE_VERSION = 1
+ };
+
+ typedef struct tagDCINFO
+ {
+ DCINFOTYPE eInfoType;
+ VARIANT vData;
+ } DCINFO;
+
+ HRESULT GetInfo([in] ULONG cInfo,
+ [in, size_is(cInfo)] DCINFOTYPE rgeInfoType[],
+ [out, size_is(cInfo)] DCINFO **prgInfo);
+
+ HRESULT SetInfo([in] ULONG cInfo,
+ [in, size_is(cInfo)] DCINFO prgInfo[]);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h
new file mode 100644
index 00000000..dba15de5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdaguid.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSDAGUID_H
+#define __WINE_MSDAGUID_H
+
+DEFINE_GUID(CLSID_EXTENDEDERRORINFO, 0xc8b522cf, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+DEFINE_GUID(CLSID_OLEDB_ENUMERATOR, 0xc8b522d0, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+DEFINE_GUID(CLSID_OLEDB_CONVERSIONLIBRARY, 0xc8b522d1, 0x5cf3, 0x11ce, 0xad, 0xe5, 0x00, 0xaa, 0x00, 0x44, 0x77, 0x3d);
+DEFINE_GUID(CLSID_OLEDB_ROWPOSITIONLIBRARY,0x2048eee6, 0x7fa2, 0x11d0, 0x9e, 0x6a, 0x00, 0xa0, 0xc9, 0x13, 0x8c, 0x29);
+
+#endif /*__WINE_MSDAGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl
new file mode 100644
index 00000000..3320f510
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msdasc.idl
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2012 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "oledb.idl";
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+typedef LONG_PTR COMPATIBLE_LONG;
+
+[
+ uuid(2206CEB0-19C1-11D1-89E0-00C04FD7A829),
+ version(1.0)
+]
+library MSDASC
+{
+ importlib("stdole2.tlb");
+
+ typedef DWORD DBPROMPTOPTIONS;
+
+ typedef enum tagDBPROMPTOPTIONSENUM
+ {
+ DBPROMPTOPTIONS_NONE = 0x00,
+ DBPROMPTOPTIONS_WIZARDSHEET = 0x01,
+ DBPROMPTOPTIONS_PROPERTYSHEET = 0x02,
+ DBPROMPTOPTIONS_BROWSEONLY = 0x08,
+ DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION = 0x10,
+ DBPROMPTOPTIONS_DISABLESAVEPASSWORD = 0x20
+ } DBPROMPTOPTIONSENUM;
+
+ [
+ odl,
+ uuid(2206CCB2-19C1-11D1-89E0-00C04FD7A829),
+ helpstring("OLE DB Service Component Automation Interface"),
+ dual,
+ oleautomation
+ ]
+ interface IDataSourceLocator : IDispatch
+ {
+ [id(0x60020000), propget]
+ HRESULT hWnd([out, retval] COMPATIBLE_LONG* phwndParent);
+
+ [id(0x60020000), propput]
+ HRESULT hWnd([in] COMPATIBLE_LONG hwndParent);
+
+ [id(0x60020002), helpstring("PromptNew")]
+ HRESULT PromptNew([out, retval] IDispatch** ppADOConnection);
+
+ [id(0x60020003), helpstring("PromptEdit")]
+ HRESULT PromptEdit([in, out] IDispatch** ppADOConnection, [out, retval] VARIANT_BOOL* pbSuccess);
+ }
+
+ [
+ odl,
+ uuid(2206CCB0-19C1-11D1-89E0-00C04FD7A829),
+ restricted
+ ]
+ interface IDBPromptInitialize : IUnknown
+ {
+ HRESULT _stdcall PromptDataSource([in] IUnknown* pUnkOuter, [in] HWND hWndParent,
+ [in] DBPROMPTOPTIONS dwPromptOptions, [in] ULONG cSourceTypeFilter,
+ [in] DBSOURCETYPE* rgSourceTypeFilter, [in] LPWSTR pwszszzProviderFilter,
+ [in] GUID* riid, [in, out] IUnknown** ppDataSource);
+
+ HRESULT _stdcall PromptFileName([in] HWND hWndParent, [in] ULONG dwPromptOptions,
+ [in] LPWSTR pwszInitialDirectory, [in] LPWSTR pwszInitialFile, [out] LPWSTR* ppwszSelectedFile);
+ }
+
+ [
+ uuid(2206CCB1-19C1-11D1-89E0-00C04FD7A829),
+ ]
+ interface IDataInitialize : IUnknown
+ {
+ HRESULT GetDataSource([in] IUnknown* pUnkOuter, [in] DWORD dwClsCtx,
+ [in] LPWSTR pwszInitializationString, [in] REFIID riid,
+ [in, out] IUnknown** ppDataSource);
+
+ HRESULT GetInitializationString([in] IUnknown* pDataSource, [in] boolean fIncludePassword,
+ [out] LPWSTR* ppwszInitString);
+
+ HRESULT CreateDBInstance([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter,
+ [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved,
+ [in] REFIID riid, [out] IUnknown** ppDataSource);
+
+ HRESULT RemoteCreateDBInstanceEx([in] REFCLSID clsidProvider, [in] IUnknown* pUnkOuter,
+ [in] DWORD dwClsCtx, [in] LPWSTR pwszReserved, [in] COSERVERINFO* pServerInfo,
+ [in] DWORD cmq, [in] GUID** rgpIID, [out] IUnknown** rgpItf,
+ [out] HRESULT* rghr);
+
+ HRESULT LoadStringFromStorage([in] LPWSTR pwszFileName, [out] LPWSTR* ppwszInitializationString);
+
+ HRESULT WriteStringToStorage([in] LPWSTR pwszFileName, [in] LPWSTR pwszInitializationString,
+ [in] DWORD dwCreationDisposition);
+ }
+
+ [
+ uuid(2206CDB0-19C1-11D1-89E0-00C04FD7A829),
+ threading(both),
+ progid("MSDASC.MSDAINITIALIZE.1"),
+ vi_progid("MSDASC.MSDAINITIALIZE"),
+ ]
+ coclass MSDAINITIALIZE
+ {
+ [default] interface IDataInitialize;
+ }
+
+ [
+ uuid(2206CDB2-19C1-11D1-89E0-00C04FD7A829),
+ threading(both),
+ progid("DataLinks")
+ ]
+ coclass DataLinks
+ {
+ [default] interface IDataSourceLocator;
+ interface IDBPromptInitialize;
+ interface IDataInitialize;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h
new file mode 100644
index 00000000..84c5ed8c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmcid.h
@@ -0,0 +1,434 @@
+/*
+ * Copyright 2006 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __mshtmcid_h__
+#define __mshtmcid_h__
+
+#define IDM_UNKNOWN 0
+#define IDM_ALIGNBOTTOM 1
+#define IDM_ALIGNHORIZONTALCENTERS 2
+#define IDM_ALIGNLEFT 3
+#define IDM_ALIGNRIGHT 4
+#define IDM_ALIGNTOGRID 5
+#define IDM_ALIGNTOP 6
+#define IDM_ALIGNVERTICALCENTERS 7
+#define IDM_ARRANGEBOTTOM 8
+#define IDM_ARRANGERIGHT 9
+#define IDM_BRINGFORWARD 10
+#define IDM_BRINGTOFRONT 11
+#define IDM_CENTERHORIZONTALLY 12
+#define IDM_CENTERVERTICALLY 13
+#define IDM_CODE 14
+#define IDM_COPY 15
+#define IDM_CUT 16
+#define IDM_DELETE 17
+#define IDM_FONTNAME 18
+#define IDM_FONTSIZE 19
+#define IDM_GROUP 20
+#define IDM_HORIZSPACECONCATENATE 21
+#define IDM_HORIZSPACEDECREASE 22
+#define IDM_HORIZSPACEINCREASE 23
+#define IDM_HORIZSPACEMAKEEQUAL 24
+#define IDM_INSERTOBJECT 25
+#define IDM_PASTE 26
+#define IDM_PRINT 27
+#define IDM_PROPERTIES 28
+#define IDM_REDO 29
+#define IDM_MULTILEVELREDO 30
+#define IDM_SELECTALL 31
+#define IDM_SENDBACKWARD 32
+#define IDM_SENDTOBACK 33
+#define IDM_SHOWTABLE 34
+#define IDM_SIZETOCONTROL 35
+#define IDM_SIZETOCONTROLHEIGHT 36
+#define IDM_SIZETOCONTROLWIDTH 37
+#define IDM_SIZETOFIT 38
+#define IDM_SIZETOGRID 39
+#define IDM_SNAPTOGRID 40
+#define IDM_TABORDER 41
+#define IDM_TOOLBOX 42
+#define IDM_UNDO 43
+#define IDM_MULTILEVELUNDO 44
+#define IDM_UNGROUP 45
+#define IDM_VERTSPACECONCATENATE 46
+#define IDM_VERTSPACEDECREASE 47
+#define IDM_VERTSPACEINCREASE 48
+#define IDM_VERTSPACEMAKEEQUAL 49
+#define IDM_JUSTIFYFULL 50
+#define IDM_ZOOMPERCENT 50
+#define IDM_BACKCOLOR 51
+#define IDM_BOLD 52
+#define IDM_BORDERCOLOR 53
+#define IDM_FLAT 54
+#define IDM_FORECOLOR 55
+#define IDM_ITALIC 56
+#define IDM_JUSTIFYCENTER 57
+#define IDM_JUSTIFYGENERAL 58
+#define IDM_JUSTIFYLEFT 59
+#define IDM_JUSTIFYRIGHT 60
+#define IDM_RAISED 61
+#define IDM_SUNKEN 62
+#define IDM_UNDERLINE 63
+#define IDM_CHISELED 64
+#define IDM_ETCHED 65
+#define IDM_SHADOWED 66
+#define IDM_FIND 67
+#define IDM_GETZOOM 68
+#define IDM_SHOWGRID 69
+#define IDM_SAVE 70
+#define IDM_SAVEAS 71
+#define IDM_OBJECTVERBLIST0 72
+#define IDM_OBJECTVERBLIST1 73
+#define IDM_OBJECTVERBLIST2 74
+#define IDM_OBJECTVERBLIST3 75
+#define IDM_OBJECTVERBLIST4 76
+#define IDM_OBJECTVERBLIST5 77
+#define IDM_OBJECTVERBLIST6 78
+#define IDM_OBJECTVERBLIST7 79
+#define IDM_OBJECTVERBLIST8 80
+#define IDM_OBJECTVERBLIST9 81
+
+#define IDM_OBJECTVERBLISTLAST IDM_OBJECTVERBLIST9
+
+#define IDM_CONVERTOBJECT 82
+#define IDM_CUSTOMCONTROL 83
+#define IDM_CUSTOMIZEITEM 84
+#define IDM_RENAME 85
+#define IDM_IMPORT 86
+#define IDM_NEWPAGE 87
+#define IDM_MOVE 88
+#define IDM_CANCEL 89
+#define IDM_FONT 90
+#define IDM_STRIKETHROUGH 91
+#define IDM_DELETEWORD 92
+#define IDM_EXECPRINT 93
+#define IDM_JUSTIFYNONE 94
+#define IDM_TRISTATEBOLD 95
+#define IDM_TRISTATEITALIC 96
+#define IDM_TRISTATEUNDERLINE 97
+
+#define IDM_OPEN 2000
+#define IDM_NEW 2001
+#define IDM_SAVECOPYAS 2002
+#define IDM_PRINTPREVIEW 2003
+#define IDM_PAGESETUP 2004
+#define IDM_SPELL 2005
+#define IDM_PASTESPECIAL 2006
+#define IDM_CLEARSELECTION 2007
+#define IDM_FOLLOW_ANCHOR 2008
+
+#define IDM_SHOWPRINT 2010
+#define IDM_SHOWPAGESETUP 2011
+
+#define IDM_INSINPUTIMAGE 2114
+#define IDM_INSINPUTBUTTON 2115
+#define IDM_INSINPUTRESET 2116
+#define IDM_INSINPUTSUBMIT 2117
+#define IDM_INSINPUTUPLOAD 2118
+#define IDM_INSFIELDSET 2119
+#define IDM_PASTEINSERT 2120
+#define IDM_REPLACE 2121
+#define IDM_EDITSOURCE 2122
+#define IDM_BOOKMARK 2123
+#define IDM_HYPERLINK 2124
+#define IDM_UNLINK 2125
+#define IDM_BROWSEMODE 2126
+#define IDM_EDITMODE 2127
+#define IDM_UNBOOKMARK 2128
+
+#define IDM_TOOLBARS 2130
+#define IDM_STATUSBAR 2131
+#define IDM_FORMATMARK 2132
+#define IDM_TEXTONLY 2133
+
+#define IDM_OPTIONS 2135
+#define IDM_FOLLOWLINKC 2136
+#define IDM_FOLLOWLINKN 2137
+#define IDM_STOP 2138
+#define IDM_VIEWSOURCE 2139
+#define IDM_ZOOMPOPUP 2140
+#define IDM_BASELINEFONT1 2141
+#define IDM_BASELINEFONT2 2142
+#define IDM_BASELINEFONT3 2143
+#define IDM_BASELINEFONT4 2144
+#define IDM_BASELINEFONT5 2145
+
+#define IDM_HORIZONTALLINE 2150
+#define IDM_LINEBREAKNORMAL 2151
+#define IDM_LINEBREAKLEFT 2152
+#define IDM_LINEBREAKRIGHT 2153
+#define IDM_LINEBREAKBOTH 2154
+#define IDM_NONBREAK 2155
+#define IDM_SPECIALCHAR 2156
+#define IDM_HTMLSOURCE 2157
+#define IDM_IFRAME 2158
+#define IDM_HTMLCONTAIN 2159
+
+#define IDM_TEXTBOX 2161
+#define IDM_TEXTAREA 2162
+#define IDM_CHECKBOX 2163
+#define IDM_RADIOBUTTON 2164
+#define IDM_DROPDOWNBOX 2165
+#define IDM_LISTBOX 2166
+#define IDM_BUTTON 2167
+#define IDM_IMAGE 2168
+#define IDM_OBJECT 2169
+#define IDM_1D 2170
+#define IDM_IMAGEMAP 2171
+#define IDM_FILE 2172
+#define IDM_COMMENT 2173
+#define IDM_SCRIPT 2174
+#define IDM_JAVAAPPLET 2175
+#define IDM_PLUGIN 2176
+#define IDM_PAGEBREAK 2177
+#define IDM_HTMLAREA 2178
+
+#define IDM_PARAGRAPH 2180
+#define IDM_FORM 2181
+#define IDM_MARQUEE 2182
+#define IDM_LIST 2183
+#define IDM_ORDERLIST 2184
+#define IDM_UNORDERLIST 2185
+#define IDM_INDENT 2186
+#define IDM_OUTDENT 2187
+#define IDM_PREFORMATTED 2188
+#define IDM_ADDRESS 2189
+#define IDM_BLINK 2190
+#define IDM_DIV 2191
+
+#define IDM_TABLEINSERT 2200
+#define IDM_RCINSERT 2201
+#define IDM_CELLINSERT 2202
+#define IDM_CAPTIONINSERT 2203
+#define IDM_CELLMERGE 2204
+#define IDM_CELLSPLIT 2205
+#define IDM_CELLSELECT 2206
+#define IDM_ROWSELECT 2207
+#define IDM_COLUMNSELECT 2208
+#define IDM_TABLESELECT 2209
+#define IDM_TABLEPROPERTIES 2210
+#define IDM_CELLPROPERTIES 2211
+#define IDM_ROWINSERT 2212
+#define IDM_COLUMNINSERT 2213
+
+#define IDM_HELP_CONTENT 2220
+#define IDM_HELP_ABOUT 2221
+#define IDM_HELP_README 2222
+
+#define IDM_REMOVEFORMAT 2230
+#define IDM_PAGEINFO 2231
+#define IDM_TELETYPE 2232
+#define IDM_GETBLOCKFMTS 2233
+#define IDM_BLOCKFMT 2234
+#define IDM_SHOWHIDE_CODE 2235
+#define IDM_TABLE 2236
+#define IDM_COPYFORMAT 2237
+#define IDM_PASTEFORMAT 2238
+#define IDM_GOTO 2239
+#define IDM_CHANGEFONT 2240
+#define IDM_CHANGEFONTSIZE 2241
+
+#define IDM_CHANGECASE 2246
+#define IDM_SUBSCRIPT 2247
+#define IDM_SUPERSCRIPT 2248
+#define IDM_SHOWSPECIALCHAR 2249
+#define IDM_CENTERALIGNPARA 2250
+#define IDM_LEFTALIGNPARA 2251
+#define IDM_RIGHTALIGNPARA 2252
+#define IDM_REMOVEPARAFORMAT 2253
+#define IDM_APPLYNORMAL 2254
+#define IDM_APPLYHEADING1 2255
+#define IDM_APPLYHEADING2 2256
+#define IDM_APPLYHEADING3 2257
+
+#define IDM_DOCPROPERTIES 2260
+#define IDM_ADDFAVORITES 2261
+#define IDM_COPYSHORTCUT 2262
+#define IDM_SAVEBACKGROUND 2263
+#define IDM_SETWALLPAPER 2264
+#define IDM_COPYBACKGROUND 2265
+#define IDM_CREATESHORTCUT 2266
+#define IDM_PAGE 2267
+#define IDM_SAVETARGET 2268
+#define IDM_SHOWPICTURE 2269
+#define IDM_SAVEPICTURE 2270
+#define IDM_DYNSRCPLAY 2271
+#define IDM_DYNSRCSTOP 2272
+#define IDM_PRINTTARGET 2273
+#define IDM_IMGARTPLAY 2274
+#define IDM_IMGARTSTOP 2275
+#define IDM_IMGARTREWIND 2276
+#define IDM_PRINTQUERYJOBSPENDING 2277
+#define IDM_SETDESKTOPITEM 2278
+
+#define IDM_CONTEXTMENU 2280
+
+#define IDM_GOBACKWARD 2282
+#define IDM_GOFORWARD 2283
+#define IDM_PRESTOP 2284
+
+#define IDM_MP_MYPICS 2287
+#define IDM_MP_EMAILPICTURE 2288
+#define IDM_MP_PRINTPICTURE 2289
+#define IDM_CREATELINK 2290
+#define IDM_COPYCONTENT 2291
+#define IDM_LANGUAGE 2292
+
+#define IDM_GETPRINTTEMPLATE 2295
+#define IDM_SETPRINTTEMPLATE 2296
+#define IDM_TEMPLATE_PAGESETUP 2298
+
+#define IDM_REFRESH 2300
+#define IDM_STOPDOWNLOAD 2301
+#define IDM_ENABLE_INTERACTION 2302
+
+#define IDM_LAUNCHDEBUGGER 2310
+#define IDM_BREAKATNEXT 2311
+#define IDM_INSINPUTHIDDEN 2312
+#define IDM_INSINPUTPASSWORD 2313
+#define IDM_OVERWRITE 2314
+#define IDM_PARSECOMPLETE 2315
+#define IDM_HTMLEDITMODE 2316
+#define IDM_REGISTRYREFRESH 2317
+#define IDM_COMPOSESETTINGS 2318
+
+#define IDM_SHOWMISCTAGS 2320
+#define IDM_SHOWALIGNEDSITETAGS 2321
+#define IDM_SHOWSCRIPTTAGS 2322
+#define IDM_SHOWSTYLETAGS 2323
+#define IDM_SHOWCOMMENTTAGS 2324
+#define IDM_SHOWAREATAGS 2325
+#define IDM_SHOWUNKNOWNTAGS 2326
+#define IDM_SHOWALLTAGS 2327
+#define IDM_SHOWZEROBORDERATDESIGNTIME 2328
+#define IDM_AUTODETECT 2329
+#define IDM_SCRIPTDEBUGGER 2330
+#define IDM_GETBYTESDOWNLOADED 2331
+#define IDM_NOACTIVATENORMALOLECONTROLS 2332
+#define IDM_NOACTIVATEDESIGNTIMECONTROLS 2333
+#define IDM_NOACTIVATEJAVAAPPLETS 2334
+#define IDM_NOFIXUPURLSONPASTE 2335
+#define IDM_EMPTYGLYPHTABLE 2336
+#define IDM_ADDTOGLYPHTABLE 2337
+#define IDM_REMOVEFROMGLYPHTABLE 2338
+#define IDM_REPLACEGLYPHCONTENTS 2339
+#define IDM_SHOWWBRTAGS 2340
+#define IDM_PERSISTSTREAMSYNC 2341
+#define IDM_SETDIRTY 2342
+#define IDM_RUNURLSCRIPT 2343
+
+#ifdef IE5_ZOOM
+#define IDM_ZOOMRATIO 2344
+#define IDM_GETZOOMNUMERATOR 2345
+#define IDM_GETZOOMDENOMINATOR 2346
+#endif
+
+#define IDM_DIRLTR 2350
+#define IDM_DIRRTL 2351
+#define IDM_BLOCKDIRLTR 2352
+#define IDM_BLOCKDIRRTL 2353
+#define IDM_INLINEDIRLTR 2354
+#define IDM_INLINEDIRRTL 2355
+#define IDM_ISTRUSTEDDLG 2356
+#define IDM_INSERTSPAN 2357
+#define IDM_LOCALIZEEDITOR 2358
+
+#define IDM_SAVEPRETRANSFORMSOURCE 2370
+#define IDM_VIEWPRETRANSFORMSOURCE 2371
+
+#define IDM_SCROLL_HERE 2380
+#define IDM_SCROLL_TOP 2381
+#define IDM_SCROLL_BOTTOM 2382
+#define IDM_SCROLL_PAGEUP 2383
+#define IDM_SCROLL_PAGEDOWN 2384
+#define IDM_SCROLL_UP 2385
+#define IDM_SCROLL_DOWN 2386
+#define IDM_SCROLL_LEFTEDGE 2387
+#define IDM_SCROLL_RIGHTEDGE 2388
+#define IDM_SCROLL_PAGELEFT 2389
+#define IDM_SCROLL_PAGERIGHT 2390
+#define IDM_SCROLL_LEFT 2391
+#define IDM_SCROLL_RIGHT 2392
+#define IDM_MULTIPLESELECTION 2393
+#define IDM_2D_POSITION 2394
+#define IDM_2D_ELEMENT 2395
+#define IDM_1D_ELEMENT 2396
+#define IDM_ABSOLUTE_POSITION 2397
+#define IDM_LIVERESIZE 2398
+#define IDM_ATOMICSELECTION 2399
+#define IDM_AUTOURLDETECT_MODE 2400
+#define IDM_IE50_PASTE 2401
+#define IDM_IE50_PASTE_MODE 2402
+#define IDM_GETIPRINT 2403
+#define IDM_DISABLE_EDITFOCUS_UI 2404
+#define IDM_RESPECTVISIBILITY_INDESIGN 2405
+#define IDM_CSSEDITING_LEVEL 2406
+#define IDM_UI_OUTDENT 2407
+#define IDM_UPDATEPAGESTATUS 2408
+#define IDM_IME_ENABLE_RECONVERSION 2409
+#define IDM_KEEPSELECTION 2410
+#define IDM_UNLOADDOCUMENT 2411
+
+#define IDM_OVERRIDE_CURSOR 2420
+
+#define IDM_PEERHITTESTSAMEINEDIT 2423
+
+#define IDM_TRUSTAPPCACHE 2425
+
+#define IDM_BACKGROUNDIMAGECACHE 2430
+
+#define IDM_MIMECSET__FIRST_ 3609
+#define IDM_MIMECSET__LAST__ 3699
+
+#define IDM_MENUEXT_FIRST__ 3700
+#define IDM_MENUEXT_LAST__ 3732
+#define IDM_MENUEXT_COUNT 3733
+
+#define IDM_DEFAULTBLOCK 6046
+
+#define IDM_NEW_TOPLEVELWINDOW 7050
+
+#define IDM_PRESERVEUNDOALWAYS 6049
+#define IDM_PERSISTDEFAULTVALUES 7100
+#define IDM_PROTECTMETATAGS 7101
+
+#define IDM_GETFRAMEZONE 6037
+
+#define IDM_FIRE_PRINTTEMPLATEUP 15000
+#define IDM_FIRE_PRINTTEMPLATEDOWN 15001
+#define IDM_SETPRINTHANDLES 15002
+
+#define CMD_ZOOM_PAGEWIDTH -1
+#define CMD_ZOOM_ONEPAGE -2
+#define CMD_ZOOM_TWOPAGES -3
+#define CMD_ZOOM_SELECTION -4
+#define CMD_ZOOM_FIT -5
+
+#define IDM_CONTEXT 1
+#define IDM_HWND 2
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h
new file mode 100644
index 00000000..0d75d89c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmdid.h
@@ -0,0 +1,3105 @@
+/*
+ * Copyright 2004,2006 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSHTMDID_H__
+#define __MSHTMDID_H__
+
+#define DISPID_NORMAL_FIRST 1000
+#define DISPID_IE8_NORMAL_FIRST (DISPID_NORMAL_FIRST+150)
+
+#define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST
+#define DISPID_DATATRANSFER DISPID_NORMAL_FIRST
+#define DISPID_ANCHOR DISPID_NORMAL_FIRST
+#define DISPID_BLOCK DISPID_NORMAL_FIRST
+#define DISPID_BR DISPID_NORMAL_FIRST
+#define DISPID_BGSOUND DISPID_NORMAL_FIRST
+#define DISPID_DD DISPID_NORMAL_FIRST
+#define DISPID_DIR DISPID_NORMAL_FIRST
+#define DISPID_DIV DISPID_NORMAL_FIRST
+#define DISPID_DL DISPID_NORMAL_FIRST
+#define DISPID_DT DISPID_NORMAL_FIRST
+#define DISPID_EFONT DISPID_NORMAL_FIRST
+#define DISPID_FORM DISPID_NORMAL_FIRST
+#define DISPID_HEADER DISPID_NORMAL_FIRST
+#define DISPID_HEDELEMS DISPID_NORMAL_FIRST
+#define DISPID_HR DISPID_NORMAL_FIRST
+#define DISPID_LABEL DISPID_NORMAL_FIRST
+#define DISPID_LI DISPID_NORMAL_FIRST
+#define DISPID_IMGBASE DISPID_NORMAL_FIRST
+#define DISPID_MENU DISPID_NORMAL_FIRST
+#define DISPID_OL DISPID_NORMAL_FIRST
+#define DISPID_PARA DISPID_NORMAL_FIRST
+#define DISPID_SELECT DISPID_NORMAL_FIRST
+#define DISPID_SELECTOBJ DISPID_NORMAL_FIRST
+#define DISPID_TABLE DISPID_NORMAL_FIRST
+#define DISPID_TEXTSITE DISPID_NORMAL_FIRST
+#define DISPID_UL DISPID_NORMAL_FIRST
+#define DISPID_PHRASE DISPID_NORMAL_FIRST
+#define DISPID_UNKNOWNPDL DISPID_NORMAL_FIRST
+#define DISPID_COMMENTPDL DISPID_NORMAL_FIRST
+#define DISPID_RANGE DISPID_NORMAL_FIRST
+#define DISPID_SELECTION DISPID_NORMAL_FIRST
+#define DISPID_OPTION DISPID_NORMAL_FIRST
+#define DISPID_RANGE DISPID_NORMAL_FIRST
+#define DISPID_SELECTION DISPID_NORMAL_FIRST
+#define DISPID_OPTION DISPID_NORMAL_FIRST
+#define DISPID_RANGE DISPID_NORMAL_FIRST
+#define DISPID_SELECTION DISPID_NORMAL_FIRST
+#define DISPID_OPTION DISPID_NORMAL_FIRST
+#define DISPID_RANGE DISPID_NORMAL_FIRST
+#define DISPID_SELECTION DISPID_NORMAL_FIRST
+#define DISPID_OPTION DISPID_NORMAL_FIRST
+#define DISPID_RANGE DISPID_NORMAL_FIRST
+#define DISPID_SELECTION DISPID_NORMAL_FIRST
+#define DISPID_OPTION DISPID_NORMAL_FIRST
+#define DISPID_MAP DISPID_NORMAL_FIRST
+#define DISPID_AREA DISPID_NORMAL_FIRST
+#define DISPID_PARAM DISPID_NORMAL_FIRST
+#define DISPID_TABLESECTION DISPID_NORMAL_FIRST
+#define DISPID_TABLEROW DISPID_NORMAL_FIRST
+#define DISPID_TABLECOL DISPID_NORMAL_FIRST
+#define DISPID_SCRIPT DISPID_NORMAL_FIRST
+#define DISPID_STYLESHEET DISPID_NORMAL_FIRST
+#define DISPID_STYLERULE DISPID_NORMAL_FIRST
+#define DISPID_STYLEPAGE DISPID_NORMAL_FIRST
+#define DISPID_STYLESHEETS_COL DISPID_NORMAL_FIRST
+#define DISPID_STYLERULES_COL DISPID_NORMAL_FIRST
+#define DISPID_STYLEPAGES_COL DISPID_NORMAL_FIRST
+#define DISPID_MIMETYPES_COL DISPID_NORMAL_FIRST
+#define DISPID_PLUGINS_COL DISPID_NORMAL_FIRST
+#define DISPID_2D DISPID_NORMAL_FIRST
+#define DISPID_OMWINDOW DISPID_NORMAL_FIRST
+#define DISPID_EVENTOBJ DISPID_NORMAL_FIRST
+#define DISPID_OLESITE DISPID_NORMAL_FIRST
+#define DISPID_FRAMESET DISPID_NORMAL_FIRST
+#define DISPID_LINK DISPID_NORMAL_FIRST
+#define DISPID_STYLEELEMENT DISPID_NORMAL_FIRST
+#define DISPID_FILTERS DISPID_NORMAL_FIRST
+#define DISPID_TABLESECTION DISPID_NORMAL_FIRST
+#define DISPID_OMRECT DISPID_NORMAL_FIRST
+#define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST
+#define DISPID_SCREEN DISPID_NORMAL_FIRST
+#define DISPID_DOMATTRIBUTE DISPID_NORMAL_FIRST
+#define DISPID_DOMTEXTNODE DISPID_NORMAL_FIRST
+#define DISPID_GENERIC DISPID_NORMAL_FIRST
+#define DISPID_URN_COLL DISPID_NORMAL_FIRST
+#define DISPID_NAMESPACE_COLLECTION DISPID_NORMAL_FIRST
+#define DISPID_NAMESPACE DISPID_NORMAL_FIRST
+#define DISPID_TAGNAMES_COLLECTION DISPID_NORMAL_FIRST
+#define DISPID_XMLHTTPREQUEST DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFO_COLLECTION DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFO DISPID_NORMAL_FIRST
+#define DISPID_XDOMAINREQUEST DISPID_NORMAL_FIRST
+#define DISPID_DOMSTORAGEITEM DISPID_NORMAL_FIRST
+#define DISPID_DOMSTORAGE DISPID_NORMAL_FIRST
+#define DISPID_DOMSTORAGELIST DISPID_NORMAL_FIRST
+#define DISPID_RULESAPPLIED DISPID_NORMAL_FIRST
+#define DISPID_RULESAPPLIED_COLLECTION DISPID_NORMAL_FIRST
+#define DISPID_STYLESHEETRULESAPPLIED_COLLECTION DISPID_NORMAL_FIRST
+#define DISPID_PROCESSINGINSTRUCTION DISPID_NORMAL_FIRST
+
+#define DISPID_DOMEVENT DISPID_NORMAL_FIRST
+#define DISPID_DOMUIEVENT (DISPID_DOMEVENT+25)
+#define DISPID_DOMMOUSEEVENT (DISPID_DOMUIEVENT+25)
+#define DISPID_DOMMOUSEWHEELEVENT (DISPID_DOMMOUSEEVENT+25)
+#define DISPID_DOMWHEELEVENT (DISPID_DOMMOUSEWHEELEVENT+25)
+#define DISPID_DOMTEXTEVENT (DISPID_DOMWHEELEVENT+25)
+#define DISPID_DOMKEYBOARDEVENT (DISPID_DOMTEXTEVENT+25)
+#define DISPID_DOMCOMPOSITIONEVENT (DISPID_DOMKEYBOARDEVENT+25)
+#define DISPID_DOMCUSTOMEVENT (DISPID_DOMCOMPOSITIONEVENT+25)
+#define DISPID_DOMMUTATIONEVENT (DISPID_DOMCUSTOMEVENT+25)
+#define DISPID_DOMFOCUSEVENT (DISPID_DOMMUTATIONEVENT+25)
+#define DISPID_SVGZOOMEVENT (DISPID_DOMFOCUSEVENT+25)
+#define DISPID_DOMSITEMODEEVENT (DISPID_SVGZOOMEVENT+25)
+#define DISPID_DOMMESSAGEEVENT (DISPID_DOMSITEMODEEVENT+25)
+#define DISPID_DOMSTORAGEEVENT (DISPID_DOMMESSAGEEVENT+25)
+#define DISPID_DOMBEFOREUNLOADEVENT (DISPID_DOMSTORAGEEVENT+25)
+#define DISPID_DOMDRAGEVENT (DISPID_DOMBEFOREUNLOADEVENT+25)
+
+#define DISPID_DOMIMPLEMENTATION DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFO DISPID_NORMAL_FIRST
+#define DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION DISPID_NORMAL_FIRST
+
+#define DISPID_IE8_ANCHOR DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_AREA DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_BASE DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_BODY DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_FORM DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_HEAD DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_IMG DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_INPUT DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_LINK DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_MOD DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_SCRIPT DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_ATTR DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_NAMEDNODEMAP DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_COLLECTION DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_PARAM DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_EMBED DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_BLOCK DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_META DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_STYLE DISPID_IE8_NORMAL_FIRST
+#define DISPID_IE8_SELECT DISPID_IE8_NORMAL_FIRST
+
+#define DISPID_IE8_ELEMENTBASE (DISPID_ELEMENT+200)
+#define DISPID_IE8_ELEMENTMAX (DISPID_SITE-1)
+#define DISPID_IE8_ELEMENT DISPID_IE8_ELEMENTBASE
+
+#define DISPID_IE8_FRAMESITEBASE (DISPID_FRAMESITE+1120)
+#define DISPID_IE8_FRAMEMAX (WEBOC_DISPIDBASE-1)
+#define DISPID_IE8_FRAME DISPID_IE8_FRAMESITEBASE
+#define DISPID_IE8_IFRAME DISPID_IE8_FRAMESITEBASE
+
+#define DISPID_IE8_OBJECTBASE (DISPID_OBJECT+30)
+#define DISPID_IE8_OBJECTMAX (DISPID_STYLE-1)
+#define DISPID_IE8_OBJECT DISPID_IE8_OBJECTBASE
+
+#define DISPID_COLLECTION (DISPID_NORMAL_FIRST+500)
+#define DISPID_OPTIONS_COL (DISPID_NORMAL_FIRST+500)
+#define DISPID_IMG (DISPID_IMGBASE+1000)
+#define DISPID_INPUTIMAGE (DISPID_IMGBASE+1000)
+#define DISPID_INPUT (DISPID_TEXTSITE+1000)
+#define DISPID_TABLECELL (DISPID_TEXTSITE+1000)
+#define DISPID_1D (DISPID_TEXTSITE+1000)
+#define DISPID_BODY (DISPID_TEXTSITE+1000)
+#define DISPID_INPUTTEXTBASE (DISPID_INPUT+1000)
+#define DISPID_INPUTTEXT (DISPID_INPUTTEXTBASE+1000)
+#define DISPID_TEXTAREA (DISPID_INPUTTEXT+1000)
+#define DISPID_MARQUEE (DISPID_TEXTAREA+1000)
+#define DISPID_RICHTEXT (DISPID_MARQUEE+1000)
+#define DISPID_BUTTON (DISPID_RICHTEXT+1000)
+
+#define DISPID_XOBJ_MIN 0x80010000
+#define DISPID_XOBJ_MAX 0x8001FFFF
+#define DISPID_XOBJ_BASE DISPID_XOBJ_MIN
+#define DISPID_HTMLOBJECT (DISPID_XOBJ_BASE+500)
+#define DISPID_ELEMENT (DISPID_HTMLOBJECT+500)
+#define DISPID_SITE (DISPID_ELEMENT+1000)
+#define DISPID_OBJECT (DISPID_SITE+1000)
+#define DISPID_STYLE (DISPID_OBJECT+1000)
+#define DISPID_ATTRS (DISPID_STYLE+1000)
+#define DISPID_EVENTS (DISPID_ATTRS+1000)
+#define DISPID_XOBJ_EXPANDO (DISPID_EVENTS+1000)
+#define DISPID_XOBJ_ORDINAL (DISPID_XOBJ_EXPANDO+1000)
+#define DISPID_RADIO (DISPID_CHECKBOX+1000)
+#define DISPID_FRAMESITE (DISPID_SITE+1000)
+#define DISPID_FRAME (DISPID_FRAMESITE+1000)
+#define DISPID_IFRAME (DISPID_FRAMESITE+1000)
+
+#define DISPID_WINDOW 1
+#define DISPID_HISTORY 1
+#define DISPID_LOCATION 1
+#define DISPID_NAVIGATOR 1
+
+#define STDPROPID_XOBJ_NAME (DISPID_XOBJ_BASE+0)
+#define STDPROPID_XOBJ_INDEX (DISPID_XOBJ_BASE+1)
+#define STDPROPID_XOBJ_BASEHREF (DISPID_XOBJ_BASE+2)
+#define STDPROPID_XOBJ_LEFT (DISPID_XOBJ_BASE+3)
+#define STDPROPID_XOBJ_TOP (DISPID_XOBJ_BASE+4)
+#define STDPROPID_XOBJ_WIDTH (DISPID_XOBJ_BASE+5)
+#define STDPROPID_XOBJ_HEIGHT (DISPID_XOBJ_BASE+6)
+#define STDPROPID_XOBJ_VISIBLE (DISPID_XOBJ_BASE+7)
+#define STDPROPID_XOBJ_PARENT (DISPID_XOBJ_BASE+8)
+#define STDPROPID_XOBJ_DRAGMODE (DISPID_XOBJ_BASE+9)
+#define STDPROPID_XOBJ_DRAGICON (DISPID_XOBJ_BASE+10)
+#define STDPROPID_XOBJ_TAG (DISPID_XOBJ_BASE+11)
+#define STDPROPID_XOBJ_TABSTOP (DISPID_XOBJ_BASE+14)
+#define STDPROPID_XOBJ_TABINDEX (DISPID_XOBJ_BASE+15)
+#define STDPROPID_XOBJ_HELPCONTEXTID (DISPID_XOBJ_BASE+50)
+#define STDPROPID_XOBJ_DEFAULT (DISPID_XOBJ_BASE+55)
+#define STDPROPID_XOBJ_CANCEL (DISPID_XOBJ_BASE+56)
+#define STDPROPID_XOBJ_LEFTNORUN (DISPID_XOBJ_BASE+57)
+#define STDPROPID_XOBJ_TOPNORUN (DISPID_XOBJ_BASE+58)
+#define STDPROPID_XOBJ_ALIGNPERSIST (DISPID_XOBJ_BASE+60)
+#define STDPROPID_XOBJ_LINKTIMEOUT (DISPID_XOBJ_BASE+61)
+#define STDPROPID_XOBJ_LINKTOPIC (DISPID_XOBJ_BASE+62)
+#define STDPROPID_XOBJ_LINKITEM (DISPID_XOBJ_BASE+63)
+#define STDPROPID_XOBJ_LINKMODE (DISPID_XOBJ_BASE+64)
+#define STDPROPID_XOBJ_DATACHANGED (DISPID_XOBJ_BASE+65)
+#define STDPROPID_XOBJ_DATAFIELD (DISPID_XOBJ_BASE+66)
+#define STDPROPID_XOBJ_DATASOURCE (DISPID_XOBJ_BASE+67)
+#define STDPROPID_XOBJ_WHATSTHISHELPID (DISPID_XOBJ_BASE+68)
+#define STDPROPID_XOBJ_CONTROLTIPTEXT (DISPID_XOBJ_BASE+69)
+#define STDPROPID_XOBJ_STATUSBARTEXT (DISPID_XOBJ_BASE+70)
+#define STDPROPID_XOBJ_APPLICATION (DISPID_XOBJ_BASE+71)
+#define STDPROPID_XOBJ_BLOCKALIGN (DISPID_XOBJ_BASE+72)
+#define STDPROPID_XOBJ_CONTROLALIGN (DISPID_XOBJ_BASE+73)
+#define STDPROPID_XOBJ_STYLE (DISPID_XOBJ_BASE+74)
+#define STDPROPID_XOBJ_COUNT (DISPID_XOBJ_BASE+75)
+#define STDPROPID_XOBJ_DISABLED (DISPID_XOBJ_BASE+76)
+#define STDPROPID_XOBJ_RIGHT (DISPID_XOBJ_BASE+77)
+#define STDPROPID_XOBJ_BOTTOM (DISPID_XOBJ_BASE+78)
+
+#define STDDISPID_XOBJ_ONBLUR (DISPID_XOBJ_BASE+0)
+#define STDDISPID_XOBJ_ONFOCUS (DISPID_XOBJ_BASE+1)
+#define STDDISPID_XOBJ_BEFOREUPDATE (DISPID_XOBJ_BASE+4)
+#define STDDISPID_XOBJ_AFTERUPDATE (DISPID_XOBJ_BASE+5)
+#define STDDISPID_XOBJ_ONROWEXIT (DISPID_XOBJ_BASE+6)
+#define STDDISPID_XOBJ_ONROWENTER (DISPID_XOBJ_BASE+7)
+#define STDDISPID_XOBJ_ONMOUSEOVER (DISPID_XOBJ_BASE+8)
+#define STDDISPID_XOBJ_ONMOUSEOUT (DISPID_XOBJ_BASE+9)
+#define STDDISPID_XOBJ_ONHELP (DISPID_XOBJ_BASE+10)
+#define STDDISPID_XOBJ_ONDRAGSTART (DISPID_XOBJ_BASE+11)
+#define STDDISPID_XOBJ_ONSELECTSTART (DISPID_XOBJ_BASE+12)
+#define STDDISPID_XOBJ_ERRORUPDATE (DISPID_XOBJ_BASE+13)
+#define STDDISPID_XOBJ_ONDATASETCHANGED (DISPID_XOBJ_BASE+14)
+#define STDDISPID_XOBJ_ONDATAAVAILABLE (DISPID_XOBJ_BASE+15)
+#define STDDISPID_XOBJ_ONDATASETCOMPLETE (DISPID_XOBJ_BASE+16)
+#define STDDISPID_XOBJ_ONFILTER (DISPID_XOBJ_BASE+17)
+#define STDDISPID_XOBJ_ONLOSECAPTURE (DISPID_XOBJ_BASE+18)
+#define STDDISPID_XOBJ_ONPROPERTYCHANGE (DISPID_XOBJ_BASE+19)
+#define STDDISPID_XOBJ_ONDRAG (DISPID_XOBJ_BASE+20)
+#define STDDISPID_XOBJ_ONDRAGEND (DISPID_XOBJ_BASE+21)
+#define STDDISPID_XOBJ_ONDRAGENTER (DISPID_XOBJ_BASE+22)
+#define STDDISPID_XOBJ_ONDRAGOVER (DISPID_XOBJ_BASE+23)
+#define STDDISPID_XOBJ_ONDRAGLEAVE (DISPID_XOBJ_BASE+24)
+#define STDDISPID_XOBJ_ONDROP (DISPID_XOBJ_BASE+25)
+#define STDDISPID_XOBJ_ONCUT (DISPID_XOBJ_BASE+26)
+#define STDDISPID_XOBJ_ONCOPY (DISPID_XOBJ_BASE+27)
+#define STDDISPID_XOBJ_ONPASTE (DISPID_XOBJ_BASE+28)
+#define STDDISPID_XOBJ_ONBEFORECUT (DISPID_XOBJ_BASE+29)
+#define STDDISPID_XOBJ_ONBEFORECOPY (DISPID_XOBJ_BASE+30)
+#define STDDISPID_XOBJ_ONBEFOREPASTE (DISPID_XOBJ_BASE+31)
+#define STDDISPID_XOBJ_ONROWSDELETE (DISPID_XOBJ_BASE+32)
+#define STDDISPID_XOBJ_ONROWSINSERTED (DISPID_XOBJ_BASE+33)
+#define STDDISPID_XOBJ_ONCELLCHANGE (DISPID_XOBJ_BASE+34)
+
+#define DISPID_A_FIRST DISPID_ATTRS
+#define DISPID_A_BACKGROUNDIMAGE (DISPID_A_FIRST+1)
+#define DISPID_A_COLOR (DISPID_A_FIRST+2)
+#define DISPID_A_TEXTTRANSFORM (DISPID_A_FIRST+4)
+#define DISPID_A_NOWRAP (DISPID_A_FIRST+5)
+#define DISPID_A_LINEHEIGHT (DISPID_A_FIRST+6)
+#define DISPID_A_TEXTINDENT (DISPID_A_FIRST+7)
+#define DISPID_A_LETTERSPACING (DISPID_A_FIRST+8)
+#define DISPID_A_LANG (DISPID_A_FIRST+9)
+#define DISPID_A_OVERFLOW (DISPID_A_FIRST+10)
+#define DISPID_A_PADDING (DISPID_A_FIRST+11)
+#define DISPID_A_PADDINGTOP (DISPID_A_FIRST+12)
+#define DISPID_A_PADDINGRIGHT (DISPID_A_FIRST+13)
+#define DISPID_A_PADDINGBOTTOM (DISPID_A_FIRST+14)
+#define DISPID_A_PADDINGLEFT (DISPID_A_FIRST+15)
+#define DISPID_A_CLEAR (DISPID_A_FIRST+16)
+#define DISPID_A_LISTTYPE (DISPID_A_FIRST+17)
+#define DISPID_A_FONTFACE (DISPID_A_FIRST+18)
+#define DISPID_A_FONTSIZE (DISPID_A_FIRST+19)
+#define DISPID_A_TEXTDECORATIONLINETHROUGH (DISPID_A_FIRST+20)
+#define DISPID_A_TEXTDECORATIONUNDERLINE (DISPID_A_FIRST+21)
+#define DISPID_A_TEXTDECORATIONBLINK (DISPID_A_FIRST+22)
+#define DISPID_A_TEXTDECORATIONNONE (DISPID_A_FIRST+23)
+#define DISPID_A_FONTSTYLE (DISPID_A_FIRST+24)
+#define DISPID_A_FONTVARIANT (DISPID_A_FIRST+25)
+#define DISPID_A_BASEFONT (DISPID_A_FIRST+26)
+#define DISPID_A_FONTWEIGHT (DISPID_A_FIRST+27)
+#define DISPID_A_TABLEBORDERCOLOR (DISPID_A_FIRST+28)
+#define DISPID_A_TABLEBORDERCOLORLIGHT (DISPID_A_FIRST+29)
+#define DISPID_A_TABLEBORDERCOLORDARK (DISPID_A_FIRST+30)
+#define DISPID_A_TABLEVALIGN (DISPID_A_FIRST+31)
+#define DISPID_A_BACKGROUND (DISPID_A_FIRST+32)
+#define DISPID_A_BACKGROUNDPOSX (DISPID_A_FIRST+33)
+#define DISPID_A_BACKGROUNDPOSY (DISPID_A_FIRST+34)
+#define DISPID_A_TEXTDECORATION (DISPID_A_FIRST+35)
+#define DISPID_A_MARGIN (DISPID_A_FIRST+36)
+#define DISPID_A_MARGINTOP (DISPID_A_FIRST+37)
+#define DISPID_A_MARGINRIGHT (DISPID_A_FIRST+38)
+#define DISPID_A_MARGINBOTTOM (DISPID_A_FIRST+39)
+#define DISPID_A_MARGINLEFT (DISPID_A_FIRST+40)
+#define DISPID_A_FONT (DISPID_A_FIRST+41)
+#define DISPID_A_FONTSIZEKEYWORD (DISPID_A_FIRST+42)
+#define DISPID_A_FONTSIZECOMBINE (DISPID_A_FIRST+43)
+#define DISPID_A_BACKGROUNDREPEAT (DISPID_A_FIRST+44)
+#define DISPID_A_BACKGROUNDATTACHMENT (DISPID_A_FIRST+45)
+#define DISPID_A_BACKGROUNDPOSITION (DISPID_A_FIRST+46)
+#define DISPID_A_WORDSPACING (DISPID_A_FIRST+47)
+#define DISPID_A_VERTICALALIGN (DISPID_A_FIRST+48)
+#define DISPID_A_BORDER (DISPID_A_FIRST+49)
+#define DISPID_A_BORDERTOP (DISPID_A_FIRST+50)
+#define DISPID_A_BORDERRIGHT (DISPID_A_FIRST+51)
+#define DISPID_A_BORDERBOTTOM (DISPID_A_FIRST+52)
+#define DISPID_A_BORDERLEFT (DISPID_A_FIRST+53)
+#define DISPID_A_BORDERCOLOR (DISPID_A_FIRST+54)
+#define DISPID_A_BORDERTOPCOLOR (DISPID_A_FIRST+55)
+#define DISPID_A_BORDERRIGHTCOLOR (DISPID_A_FIRST+56)
+#define DISPID_A_BORDERBOTTOMCOLOR (DISPID_A_FIRST+57)
+#define DISPID_A_BORDERLEFTCOLOR (DISPID_A_FIRST+58)
+#define DISPID_A_BORDERWIDTH (DISPID_A_FIRST+59)
+#define DISPID_A_BORDERTOPWIDTH (DISPID_A_FIRST+60)
+#define DISPID_A_BORDERRIGHTWIDTH (DISPID_A_FIRST+61)
+#define DISPID_A_BORDERBOTTOMWIDTH (DISPID_A_FIRST+62)
+#define DISPID_A_BORDERLEFTWIDTH (DISPID_A_FIRST+63)
+#define DISPID_A_BORDERSTYLE (DISPID_A_FIRST+64)
+#define DISPID_A_BORDERTOPSTYLE (DISPID_A_FIRST+65)
+#define DISPID_A_BORDERRIGHTSTYLE (DISPID_A_FIRST+66)
+#define DISPID_A_BORDERBOTTOMSTYLE (DISPID_A_FIRST+67)
+#define DISPID_A_BORDERLEFTSTYLE (DISPID_A_FIRST+68)
+#define DISPID_A_TEXTDECORATIONOVERLINE (DISPID_A_FIRST+69)
+#define DISPID_A_FLOAT (DISPID_A_FIRST+70)
+#define DISPID_A_DISPLAY (DISPID_A_FIRST+71)
+#define DISPID_A_LISTSTYLETYPE (DISPID_A_FIRST+72)
+#define DISPID_A_LISTSTYLEPOSITION (DISPID_A_FIRST+73)
+#define DISPID_A_LISTSTYLEIMAGE (DISPID_A_FIRST+74)
+#define DISPID_A_LISTSTYLE (DISPID_A_FIRST+75)
+#define DISPID_A_WHITESPACE (DISPID_A_FIRST+76)
+#define DISPID_A_PAGEBREAKBEFORE (DISPID_A_FIRST+77)
+#define DISPID_A_PAGEBREAKAFTER (DISPID_A_FIRST+78)
+#define DISPID_A_SCROLL (DISPID_A_FIRST+79)
+#define DISPID_A_VISIBILITY (DISPID_A_FIRST+80)
+#define DISPID_A_HIDDEN (DISPID_A_FIRST+81)
+#define DISPID_A_FILTER (DISPID_A_FIRST+82)
+#define DISPID_DEFAULTVALUE (DISPID_A_FIRST+83)
+#define DISPID_A_BORDERCOLLAPSE (DISPID_A_FIRST+84)
+#define DISPID_A_POSITION (DISPID_A_FIRST+90)
+#define DISPID_A_ZINDEX (DISPID_A_FIRST+91)
+#define DISPID_A_CLIP (DISPID_A_FIRST+92)
+#define DISPID_A_CLIPRECTTOP (DISPID_A_FIRST+93)
+#define DISPID_A_CLIPRECTRIGHT (DISPID_A_FIRST+94)
+#define DISPID_A_CLIPRECTBOTTOM (DISPID_A_FIRST+95)
+#define DISPID_A_CLIPRECTLEFT (DISPID_A_FIRST+96)
+#define DISPID_A_FONTFACESRC (DISPID_A_FIRST+97)
+#define DISPID_A_TABLELAYOUT (DISPID_A_FIRST+98)
+#define DISPID_A_STYLETEXT (DISPID_A_FIRST+99)
+#define DISPID_A_LANGUAGE (DISPID_A_FIRST+100)
+#define DISPID_A_VALUE (DISPID_A_FIRST+101)
+#define DISPID_A_CURSOR (DISPID_A_FIRST+102)
+#define DISPID_A_EVENTSINK (DISPID_A_FIRST+103)
+#define DISPID_A_PROPNOTIFYSINK (DISPID_A_FIRST+104)
+#define DISPID_A_ROWSETNOTIFYSINK (DISPID_A_FIRST+105)
+#define DISPID_INTERNAL_INLINESTYLEAA (DISPID_A_FIRST+106)
+#define DISPID_INTERNAL_CSTYLEPTRCACHE (DISPID_A_FIRST+107)
+#define DISPID_INTERNAL_CRUNTIMESTYLEPTRCACHE (DISPID_A_FIRST+108)
+#define DISPID_INTERNAL_INVOKECONTEXT (DISPID_A_FIRST+109)
+#define DISPID_A_BGURLIMGCTXCACHEINDEX (DISPID_A_FIRST+110)
+#define DISPID_A_LIURLIMGCTXCACHEINDEX (DISPID_A_FIRST+111)
+#define DISPID_A_ROWSETASYNCHNOTIFYSINK (DISPID_A_FIRST+112)
+#define DISPID_INTERNAL_FILTERPTRCACHE (DISPID_A_FIRST+113)
+#define DISPID_A_ROWPOSITIONCHANGESINK (DISPID_A_FIRST+114)
+#define DISPID_A_BEHAVIOR (DISPID_A_FIRST+115)
+#define DISPID_A_READYSTATE (DISPID_A_FIRST+116)
+#define DISPID_A_DIR (DISPID_A_FIRST+117)
+#define DISPID_A_UNICODEBIDI (DISPID_A_FIRST+118)
+#define DISPID_A_DIRECTION (DISPID_A_FIRST+119)
+#define DISPID_A_IMEMODE (DISPID_A_FIRST+120)
+#define DISPID_A_RUBYALIGN (DISPID_A_FIRST+121)
+#define DISPID_A_RUBYPOSITION (DISPID_A_FIRST+122)
+#define DISPID_A_RUBYOVERHANG (DISPID_A_FIRST+123)
+#define DISPID_INTERNAL_ONBEHAVIOR_CONTENTREADY (DISPID_A_FIRST+124)
+#define DISPID_INTERNAL_ONBEHAVIOR_DOCUMENTREADY (DISPID_A_FIRST+125)
+#define DISPID_INTERNAL_CDOMCHILDRENPTRCACHE (DISPID_A_FIRST+126)
+#define DISPID_A_LAYOUTGRIDCHAR (DISPID_A_FIRST+127)
+#define DISPID_A_LAYOUTGRIDLINE (DISPID_A_FIRST+128)
+#define DISPID_A_LAYOUTGRIDMODE (DISPID_A_FIRST+129)
+#define DISPID_A_LAYOUTGRIDTYPE (DISPID_A_FIRST+130)
+#define DISPID_A_LAYOUTGRID (DISPID_A_FIRST+131)
+#define DISPID_A_TEXTAUTOSPACE (DISPID_A_FIRST+132)
+#define DISPID_A_LINEBREAK (DISPID_A_FIRST+133)
+#define DISPID_A_WORDBREAK (DISPID_A_FIRST+134)
+#define DISPID_A_TEXTJUSTIFY (DISPID_A_FIRST+135)
+#define DISPID_A_TEXTJUSTIFYTRIM (DISPID_A_FIRST+136)
+#define DISPID_A_TEXTKASHIDA (DISPID_A_FIRST+137)
+#define DISPID_A_OVERFLOWX (DISPID_A_FIRST+139)
+#define DISPID_A_OVERFLOWY (DISPID_A_FIRST+140)
+#define DISPID_A_HTCDISPATCHITEM_VALUE (DISPID_A_FIRST+141)
+#define DISPID_A_DOCFRAGMENT (DISPID_A_FIRST+142)
+#define DISPID_A_HTCDD_ELEMENT (DISPID_A_FIRST+143)
+#define DISPID_A_HTCDD_CREATEEVENTOBJECT (DISPID_A_FIRST+144)
+#define DISPID_A_URNATOM (DISPID_A_FIRST+145)
+#define DISPID_A_UNIQUEPEERNUMBER (DISPID_A_FIRST+146)
+#define DISPID_A_ACCELERATOR (DISPID_A_FIRST+147)
+#define DISPID_INTERNAL_ONBEHAVIOR_APPLYSTYLE (DISPID_A_FIRST+148)
+#define DISPID_INTERNAL_RUNTIMESTYLEAA (DISPID_A_FIRST+149)
+#define DISPID_A_HTCDISPATCHITEM_VALUE_SCRIPTSONLY (DISPID_A_FIRST+150)
+#define DISPID_A_EXTENDEDTAGDESC (DISPID_A_FIRST+151)
+#define DISPID_A_ROTATE (DISPID_A_FIRST+152)
+#define DISPID_A_ZOOM (DISPID_A_FIRST+153)
+#define DISPID_A_HTCDD_PROTECTEDELEMENT (DISPID_A_FIRST+154)
+#define DISPID_A_LAYOUTFLOW (DISPID_A_FIRST+155)
+#define DISPID_A_HTCDD_ISMARKUPSHARED (DISPID_A_FIRST+157)
+#define DISPID_A_WORDWRAP (DISPID_A_FIRST+158)
+#define DISPID_A_TEXTUNDERLINEPOSITION (DISPID_A_FIRST+159)
+#define DISPID_A_HASLAYOUT (DISPID_A_FIRST+160)
+#define DISPID_A_MEDIA (DISPID_A_FIRST+161)
+#define DISPID_A_EDITABLE (DISPID_A_FIRST+162)
+#define DISPID_A_HIDEFOCUS (DISPID_A_FIRST+163)
+#define DISPID_INTERNAL_LAYOUTRECTREGISTRYPTRCACHE (DISPID_A_FIRST+164)
+#define DISPID_A_HTCDD_DEFAULTS (DISPID_A_FIRST+165)
+#define DISPID_A_TEXTLINETHROUGHSTYLE (DISPID_A_FIRST+166)
+#define DISPID_A_TEXTUNDERLINESTYLE (DISPID_A_FIRST+167)
+#define DISPID_A_TEXTEFFECT (DISPID_A_FIRST+168)
+#define DISPID_A_TEXTBACKGROUNDCOLOR (DISPID_A_FIRST+169)
+#define DISPID_A_RENDERINGPRIORITY (DISPID_A_FIRST+170)
+#define DISPID_INTERNAL_DWNPOSTPTRCACHE (DISPID_A_FIRST+171)
+#define DISPID_INTERNAL_CODEPAGESETTINGSPTRCACHE (DISPID_A_FIRST+172)
+#define DISPID_INTERNAL_DWNDOCPTRCACHE (DISPID_A_FIRST+173)
+#define DISPID_INTERNAL_DATABINDTASKPTRCACHE (DISPID_A_FIRST+174)
+#define DISPID_INTERNAL_URLLOCATIONCACHE (DISPID_A_FIRST+175)
+#define DISPID_INTERNAL_ARYELEMENTRELEASENOTIFYPTRCACHE (DISPID_A_FIRST+176)
+#define DISPID_INTERNAL_PEERFACTORYURLMAPPTRCACHE (DISPID_A_FIRST+177)
+#define DISPID_INTERNAL_STMDIRTYPTRCACHE (DISPID_A_FIRST+178)
+#define DISPID_INTERNAL_COMPUTEFORMATSTATECACHE (DISPID_A_FIRST+179)
+#define DISPID_A_SCROLLBARBASECOLOR (DISPID_A_FIRST+180)
+#define DISPID_A_SCROLLBARFACECOLOR (DISPID_A_FIRST+181)
+#define DISPID_A_SCROLLBAR3DLIGHTCOLOR (DISPID_A_FIRST+182)
+#define DISPID_A_SCROLLBARSHADOWCOLOR (DISPID_A_FIRST+183)
+#define DISPID_A_SCROLLBARHIGHLIGHTCOLOR (DISPID_A_FIRST+184)
+#define DISPID_A_SCROLLBARDARKSHADOWCOLOR (DISPID_A_FIRST+185)
+#define DISPID_A_SCROLLBARARROWCOLOR (DISPID_A_FIRST+186)
+#define DISPID_INTERNAL_ONBEHAVIOR_CONTENTSAVE (DISPID_A_FIRST+187)
+#define DISPID_A_DEFAULTTEXTSELECTION (DISPID_A_FIRST+188)
+#define DISPID_A_TEXTDECORATIONCOLOR (DISPID_A_FIRST+189)
+#define DISPID_A_TEXTCOLOR (DISPID_A_FIRST+190)
+#define DISPID_A_STYLETEXTDECORATION (DISPID_A_FIRST+191)
+#define DISPID_A_WRITINGMODE (DISPID_A_FIRST+192)
+#define DISPID_INTERNAL_MEDIA_REFERENCE (DISPID_A_FIRST+193)
+#define DISPID_INTERNAL_GENERICCOMPLUSREF (DISPID_A_FIRST+194)
+#define DISPID_INTERNAL_FOCUSITEMS (DISPID_A_FIRST+195)
+#define DISPID_A_SCROLLBARTRACKCOLOR (DISPID_A_FIRST+196)
+#define DISPID_INTERNAL_DWNHEADERCACHE (DISPID_A_FIRST+197)
+#define DISPID_A_FROZEN (DISPID_A_FIRST+198)
+#define DISPID_A_VIEWINHERITSTYLE (DISPID_A_FIRST+199)
+#define DISPID_INTERNAL_FRAMESCOLLECTION (DISPID_A_FIRST+200)
+#define DISPID_A_BGURLIMGCTXCACHEINDEX_FLINE (DISPID_A_FIRST+201)
+#define DISPID_A_BGURLIMGCTXCACHEINDEX_FLETTER (DISPID_A_FIRST+202)
+#define DISPID_A_TEXTALIGNLAST (DISPID_A_FIRST+203)
+#define DISPID_A_TEXTKASHIDASPACE (DISPID_A_FIRST+204)
+#define DISPID_INTERNAL_FONTHISTORYINDEX (DISPID_A_FIRST+205)
+#define DISPID_A_ALLOWTRANSPARENCY (DISPID_A_FIRST+206)
+#define DISPID_INTERNAL_URLSEARCHCACHE (DISPID_A_FIRST+207)
+#define DISPID_A_ISBLOCK (DISPID_A_FIRST+208)
+#define DISPID_A_TEXTOVERFLOW (DISPID_A_FIRST+209)
+#define DISPID_INTERNAL_CATTRIBUTECOLLPTRCACHE (DISPID_A_FIRST+210)
+#define DISPID_A_MINHEIGHT (DISPID_A_FIRST+211)
+#define DISPID_INTERNAL_INVOKECONTEXTDOCUMENT (DISPID_A_FIRST+212)
+#define DISPID_A_INTERPOLATION (DISPID_A_FIRST+213)
+#define DISPID_A_MAXHEIGHT (DISPID_A_FIRST+214)
+#define DISPID_A_MINWIDTH (DISPID_A_FIRST+215)
+#define DISPID_A_MAXWIDTH (DISPID_A_FIRST+216)
+#define DISPID_INTERNAL_ARYOBJECTRELEASECLEANUPPTRCACHE (DISPID_A_FIRST+217)
+#define DISPID_A_CONTENT (DISPID_A_FIRST+218)
+#define DISPID_A_CAPTIONSIDE (DISPID_A_FIRST+219)
+#define DISPID_A_COUNTERINCREMENT (DISPID_A_FIRST+220)
+#define DISPID_A_COUNTERRESET (DISPID_A_FIRST+221)
+#define DISPID_A_OUTLINE (DISPID_A_FIRST+222)
+#define DISPID_A_OUTLINEWIDTH (DISPID_A_FIRST+223)
+#define DISPID_A_OUTLINESTYLE (DISPID_A_FIRST+224)
+#define DISPID_A_OUTLINECOLOR (DISPID_A_FIRST+225)
+#define DISPID_A_BOXSIZING (DISPID_A_FIRST+226)
+#define DISPID_A_BORDERSPACING (DISPID_A_FIRST+227)
+#define DISPID_A_ORPHANS (DISPID_A_FIRST+228)
+#define DISPID_A_WIDOWS (DISPID_A_FIRST+229)
+#define DISPID_A_PAGEBREAKINSIDE (DISPID_A_FIRST+230)
+#define DISPID_A_MS_BEHAVIOR (DISPID_A_FIRST+231)
+#define DISPID_A_MS_SCROLLBARBASECOLOR (DISPID_A_FIRST+232)
+#define DISPID_A_MS_SCROLLBARFACECOLOR (DISPID_A_FIRST+233)
+#define DISPID_A_MS_SCROLLBAR3DLIGHTCOLOR (DISPID_A_FIRST+234)
+#define DISPID_A_MS_SCROLLBARSHADOWCOLOR (DISPID_A_FIRST+235)
+#define DISPID_A_MS_SCROLLBARHIGHLIGHTCOLOR (DISPID_A_FIRST+236)
+#define DISPID_A_MS_SCROLLBARDARKSHADOWCOLOR (DISPID_A_FIRST+237)
+#define DISPID_A_MS_SCROLLBARARROWCOLOR (DISPID_A_FIRST+238)
+#define DISPID_A_MS_SCROLLBARTRACKCOLOR (DISPID_A_FIRST+239)
+#define DISPID_A_MS_TEXTALIGNLAST (DISPID_A_FIRST+240)
+#define DISPID_A_MS_TEXTOVERFLOW (DISPID_A_FIRST+241)
+#define DISPID_A_MS_TEXTUNDERLINEPOSITION (DISPID_A_FIRST+242)
+#define DISPID_A_MS_WRITINGMODE (DISPID_A_FIRST+243)
+#define DISPID_A_MS_IMEMODE (DISPID_A_FIRST+244)
+#define DISPID_A_MS_BACKGROUNDPOSX (DISPID_A_FIRST+245)
+#define DISPID_A_MS_BACKGROUNDPOSY (DISPID_A_FIRST+246)
+#define DISPID_A_MS_ACCELERATOR (DISPID_A_FIRST+247)
+#define DISPID_A_MS_LAYOUTFLOW (DISPID_A_FIRST+248)
+#define DISPID_A_MS_ZOOM (DISPID_A_FIRST+249)
+#define DISPID_A_EMPTYCELLS (DISPID_A_FIRST+250)
+#define DISPID_A_MS_BLOCKPROGRESSION (DISPID_A_FIRST+251)
+#define DISPID_A_QUOTES (DISPID_A_FIRST+252)
+
+#define DISPID_WINDOWOBJECT (-5500)
+#define DISPID_LOCATIONOBJECT (-5506)
+#define DISPID_HISTORYOBJECT (-5507)
+#define DISPID_NAVIGATOROBJECT (-5508)
+#define DISPID_SECURITYCTX (-5511)
+#define DISPID_AMBIENT_DLCONTROL (-5512)
+#define DISPID_AMBIENT_USERAGENT (-5513)
+#define DISPID_SECURITYDOMAIN (-5514)
+
+#define DLCTL_DLIMAGES 0x00000010
+#define DLCTL_VIDEOS 0x00000020
+#define DLCTL_BGSOUNDS 0x00000040
+#define DLCTL_NO_SCRIPTS 0x00000080
+#define DLCTL_NO_JAVA 0x00000100
+#define DLCTL_NO_RUNACTIVEXCTLS 0x00000200
+#define DLCTL_NO_DLACTIVEXCTLS 0x00000400
+#define DLCTL_DOWNLOADONLY 0x00000800
+#define DLCTL_NO_FRAMEDOWNLOAD 0x00001000
+#define DLCTL_RESYNCHRONIZE 0x00002000
+#define DLCTL_PRAGMA_NO_CACHE 0x00004000
+#define DLCTL_FORCEOFFLINE 0x10000000
+#define DLCTL_NO_CLIENTPULL 0x20000000
+#define DLCTL_SILENT 0x40000000
+#define DLCTL_OFFLINEIFNOTCONNECTED 0x80000000
+#define DLCTL_OFFLINE DLCTL_OFFLINEIFNOTCONNECTED
+
+/* events */
+#define DISPID_EVPROP_ONMOUSEOVER (DISPID_EVENTS+0)
+#define DISPID_EVPROP_ONMOUSEOUT (DISPID_EVENTS+1)
+#define DISPID_EVPROP_ONMOUSEDOWN (DISPID_EVENTS+2)
+#define DISPID_EVPROP_ONMOUSEUP (DISPID_EVENTS+3)
+#define DISPID_EVPROP_ONMOUSEMOVE (DISPID_EVENTS+4)
+#define DISPID_EVPROP_ONKEYDOWN (DISPID_EVENTS+5)
+#define DISPID_EVPROP_ONKEYUP (DISPID_EVENTS+6)
+#define DISPID_EVPROP_ONKEYPRESS (DISPID_EVENTS+7)
+#define DISPID_EVPROP_ONCLICK (DISPID_EVENTS+8)
+#define DISPID_EVPROP_ONDBLCLICK (DISPID_EVENTS+9)
+#define DISPID_EVPROP_ONSELECT (DISPID_EVENTS+10)
+#define DISPID_EVPROP_ONSUBMIT (DISPID_EVENTS+11)
+#define DISPID_EVPROP_ONRESET (DISPID_EVENTS+12)
+#define DISPID_EVPROP_ONHELP (DISPID_EVENTS+13)
+#define DISPID_EVPROP_ONFOCUS (DISPID_EVENTS+14)
+#define DISPID_EVPROP_ONBLUR (DISPID_EVENTS+15)
+#define DISPID_EVPROP_ONROWEXIT (DISPID_EVENTS+18)
+#define DISPID_EVPROP_ONROWENTER (DISPID_EVENTS+19)
+#define DISPID_EVPROP_ONBOUNCE (DISPID_EVENTS+20)
+#define DISPID_EVPROP_ONBEFOREUPDATE (DISPID_EVENTS+21)
+#define DISPID_EVPROP_ONAFTERUPDATE (DISPID_EVENTS+22)
+#define DISPID_EVPROP_ONBEFOREDRAGOVER (DISPID_EVENTS+23)
+#define DISPID_EVPROP_ONBEFOREDROPORPASTE (DISPID_EVENTS+24)
+#define DISPID_EVPROP_ONREADYSTATECHANGE (DISPID_EVENTS+25)
+#define DISPID_EVPROP_ONFINISH (DISPID_EVENTS+26)
+#define DISPID_EVPROP_ONSTART (DISPID_EVENTS+27)
+#define DISPID_EVPROP_ONABORT (DISPID_EVENTS+28)
+#define DISPID_EVPROP_ONERROR (DISPID_EVENTS+29)
+#define DISPID_EVPROP_ONCHANGE (DISPID_EVENTS+30)
+#define DISPID_EVPROP_ONSCROLL (DISPID_EVENTS+31)
+#define DISPID_EVPROP_ONLOAD (DISPID_EVENTS+32)
+#define DISPID_EVPROP_ONUNLOAD (DISPID_EVENTS+33)
+#define DISPID_EVPROP_ONLAYOUT (DISPID_EVENTS+34)
+#define DISPID_EVPROP_ONDRAGSTART (DISPID_EVENTS+35)
+#define DISPID_EVPROP_ONRESIZE (DISPID_EVENTS+36)
+#define DISPID_EVPROP_ONSELECTSTART (DISPID_EVENTS+37)
+#define DISPID_EVPROP_ONERRORUPDATE (DISPID_EVENTS+38)
+#define DISPID_EVPROP_ONBEFOREUNLOAD (DISPID_EVENTS+39)
+#define DISPID_EVPROP_ONDATASETCHANGED (DISPID_EVENTS+40)
+#define DISPID_EVPROP_ONDATAAVAILABLE (DISPID_EVENTS+41)
+#define DISPID_EVPROP_ONDATASETCOMPLETE (DISPID_EVENTS+42)
+#define DISPID_EVPROP_ONFILTER (DISPID_EVENTS+43)
+#define DISPID_EVPROP_ONCHANGEFOCUS (DISPID_EVENTS+44)
+#define DISPID_EVPROP_ONCHANGEBLUR (DISPID_EVENTS+45)
+#define DISPID_EVPROP_ONLOSECAPTURE (DISPID_EVENTS+46)
+#define DISPID_EVPROP_ONPROPERTYCHANGE (DISPID_EVENTS+47)
+#define DISPID_EVPROP_ONPERSISTSAVE (DISPID_EVENTS+48)
+#define DISPID_EVPROP_ONDRAG (DISPID_EVENTS+49)
+#define DISPID_EVPROP_ONDRAGEND (DISPID_EVENTS+50)
+#define DISPID_EVPROP_ONDRAGENTER (DISPID_EVENTS+51)
+#define DISPID_EVPROP_ONDRAGOVER (DISPID_EVENTS+52)
+#define DISPID_EVPROP_ONDRAGLEAVE (DISPID_EVENTS+53)
+#define DISPID_EVPROP_ONDROP (DISPID_EVENTS+54)
+#define DISPID_EVPROP_ONCUT (DISPID_EVENTS+55)
+#define DISPID_EVPROP_ONCOPY (DISPID_EVENTS+56)
+#define DISPID_EVPROP_ONPASTE (DISPID_EVENTS+57)
+#define DISPID_EVPROP_ONBEFORECUT (DISPID_EVENTS+58)
+#define DISPID_EVPROP_ONBEFORECOPY (DISPID_EVENTS+59)
+#define DISPID_EVPROP_ONBEFOREPASTE (DISPID_EVENTS+60)
+#define DISPID_EVPROP_ONPERSISTLOAD (DISPID_EVENTS+61)
+#define DISPID_EVPROP_ONROWSDELETE (DISPID_EVENTS+62)
+#define DISPID_EVPROP_ONROWSINSERTED (DISPID_EVENTS+63)
+#define DISPID_EVPROP_ONCELLCHANGE (DISPID_EVENTS+64)
+#define DISPID_EVPROP_ONCONTEXTMENU (DISPID_EVENTS+65)
+#define DISPID_EVPROP_ONBEFOREPRINT (DISPID_EVENTS+66)
+#define DISPID_EVPROP_ONAFTERPRINT (DISPID_EVENTS+67)
+#define DISPID_EVPROP_ONSTOP (DISPID_EVENTS+68)
+#define DISPID_EVPROP_ONBEFOREEDITFOCUS (DISPID_EVENTS+69)
+#define DISPID_EVPROP_ONATTACHEVENT (DISPID_EVENTS+70)
+#define DISPID_EVPROP_ONMOUSEHOVER (DISPID_EVENTS+71)
+#define DISPID_EVPROP_ONCONTENTREADY (DISPID_EVENTS+72)
+#define DISPID_EVPROP_ONLAYOUTCOMPLETE (DISPID_EVENTS+73)
+#define DISPID_EVPROP_ONPAGE (DISPID_EVENTS+74)
+#define DISPID_EVPROP_ONLINKEDOVERFLOW (DISPID_EVENTS+75)
+#define DISPID_EVPROP_ONMOUSEWHEEL (DISPID_EVENTS+76)
+#define DISPID_EVPROP_ONBEFOREDEACTIVATE (DISPID_EVENTS+77)
+#define DISPID_EVPROP_ONMOVE (DISPID_EVENTS+78)
+#define DISPID_EVPROP_ONCONTROLSELECT (DISPID_EVENTS+79)
+#define DISPID_EVPROP_ONSELECTIONCHANGE (DISPID_EVENTS+80)
+#define DISPID_EVPROP_ONMOVESTART (DISPID_EVENTS+81)
+#define DISPID_EVPROP_ONMOVEEND (DISPID_EVENTS+82)
+#define DISPID_EVPROP_ONRESIZESTART (DISPID_EVENTS+83)
+#define DISPID_EVPROP_ONRESIZEEND (DISPID_EVENTS+84)
+#define DISPID_EVPROP_ONMOUSEENTER (DISPID_EVENTS+85)
+#define DISPID_EVPROP_ONMOUSELEAVE (DISPID_EVENTS+86)
+#define DISPID_EVPROP_ONACTIVATE (DISPID_EVENTS+87)
+#define DISPID_EVPROP_ONDEACTIVATE (DISPID_EVENTS+88)
+#define DISPID_EVPROP_ONMULTILAYOUTCLEANUP (DISPID_EVENTS+89)
+#define DISPID_EVPROP_ONBEFOREACTIVATE (DISPID_EVENTS+90)
+#define DISPID_EVPROP_ONFOCUSIN (DISPID_EVENTS+91)
+#define DISPID_EVPROP_ONFOCUSOUT (DISPID_EVENTS+92)
+#define DISPID_EVPROP_ONVALUECHANGE (DISPID_EVENTS+93)
+#define DISPID_EVPROP_ONSELECTADD (DISPID_EVENTS+94)
+#define DISPID_EVPROP_ONSELECTREMOV (DISPID_EVENTS+95)
+#define DISPID_EVPROP_ONSELECTWITHI (DISPID_EVENTS+96)
+#define DISPID_EVPROP_ONSYSTEMSCROLLINGSTART (DISPID_EVENTS+97)
+#define DISPID_EVPROP_ONSYSTEMSCROLLINGEND (DISPID_EVENTS+98)
+#define DISPID_EVPROP_ONOBJECTCONTENTSCROLLED (DISPID_EVENTS+99)
+#define DISPID_EVPROP_ONSTORAGE (DISPID_EVENTS+100)
+#define DISPID_EVPROP_ONSTORAGECOMMIT (DISPID_EVENTS+101)
+#define DISPID_EVPROP_ONSHOW (DISPID_EVENTS+102)
+#define DISPID_EVPROP_ONHIDE (DISPID_EVENTS+103)
+#define DISPID_EVPROP_ONALERT (DISPID_EVENTS+104)
+#define DISPID_EVPROP_ONPOPUPMENUSTART (DISPID_EVENTS+105)
+#define DISPID_EVPROP_ONPOPUPMENUEND (DISPID_EVENTS+106)
+#define DISPID_EVPROP_ONONLINE (DISPID_EVENTS+107)
+#define DISPID_EVPROP_ONOFFLINE (DISPID_EVENTS+108)
+#define DISPID_EVPROP_ONHASHCHANGE (DISPID_EVENTS+109)
+#define DISPID_EVPROP_ONMESSAGE (DISPID_EVENTS+110)
+#define DISPID_EVPROP_ONDOMMUTATION (DISPID_EVENTS+111)
+#define DISPID_EVPROP_TIMEOUT (DISPID_EVENTS+112)
+#define DISPID_EVPROP_WHEEL (DISPID_EVENTS+113)
+#define DISPID_EVPROP_SVGLOAD (DISPID_EVENTS+114)
+#define DISPID_EVPROP_SVGUNLOAD (DISPID_EVENTS+115)
+#define DISPID_EVPROP_SVGABORT (DISPID_EVENTS+116)
+#define DISPID_EVPROP_SVGERROR (DISPID_EVENTS+117)
+#define DISPID_EVPROP_SVGRESIZE (DISPID_EVENTS+118)
+#define DISPID_EVPROP_SVGSCROLL (DISPID_EVENTS+119)
+#define DISPID_EVPROP_SVGZOOM (DISPID_EVENTS+120)
+#define DISPID_EVPROP_ONMSTHUMBNAILCLICK (DISPID_EVENTS+121)
+#define DISPID_EVPROP_COMPOSITIONSTART (DISPID_EVENTS+122)
+#define DISPID_EVPROP_COMPOSITIONUPDATE (DISPID_EVENTS+123)
+#define DISPID_EVPROP_COMPOSITIONEND (DISPID_EVENTS+124)
+#define DISPID_EVPROP_DOMATTRMODIFIED (DISPID_EVENTS+125)
+#define DISPID_EVPROP_DOMCONTENTLOADED (DISPID_EVENTS+126)
+#define DISPID_EVPROP_INPUT (DISPID_EVENTS+127)
+#define DISPID_EVPROP_DOMCHARDATAMODIFIE (DISPID_EVENTS+128)
+#define DISPID_EVPROP_TEXTINPUT (DISPID_EVENTS+129)
+#define DISPID_EVPROP_ONMSSITEMODEJUMPLISTITEMREMOVED (DISPID_EVENTS+130)
+#define DISPID_EVPROP_DOMNODEINSERTED (DISPID_EVENTS+131)
+#define DISPID_EVPROP_DOMNODEREMOVED (DISPID_EVENTS+132)
+#define DISPID_EVPROP_DOMSUBTREEMODIFIED (DISPID_EVENTS+133)
+#define DISPID_EVPROP_CANPLAY (DISPID_EVENTS+134)
+#define DISPID_EVPROP_CANPLAYTHROUGH (DISPID_EVENTS+135)
+#define DISPID_EVPROP_DURATIONCHANGE (DISPID_EVENTS+136)
+#define DISPID_EVPROP_EMPTIED (DISPID_EVENTS+137)
+#define DISPID_EVPROP_ENDED (DISPID_EVENTS+138)
+#define DISPID_EVPROP_LOADEDDATA (DISPID_EVENTS+139)
+#define DISPID_EVPROP_LOADEDMETADATA (DISPID_EVENTS+140)
+#define DISPID_EVPROP_LOADSTART (DISPID_EVENTS+141)
+#define DISPID_EVPROP_PAUSE (DISPID_EVENTS+142)
+#define DISPID_EVPROP_PLAY (DISPID_EVENTS+143)
+#define DISPID_EVPROP_PLAYING (DISPID_EVENTS+144)
+#define DISPID_EVPROP_PROGRESS (DISPID_EVENTS+145)
+#define DISPID_EVPROP_RATECHANGE (DISPID_EVENTS+146)
+#define DISPID_EVPROP_SEEKED (DISPID_EVENTS+147)
+#define DISPID_EVPROP_SEEKING (DISPID_EVENTS+148)
+#define DISPID_EVPROP_STALLED (DISPID_EVENTS+149)
+#define DISPID_EVPROP_SUSPEND (DISPID_EVENTS+150)
+#define DISPID_EVPROP_TIMEUPDATE (DISPID_EVENTS+151)
+#define DISPID_EVPROP_VOLUMECHANGE (DISPID_EVENTS+152)
+#define DISPID_EVPROP_WAITING (DISPID_EVENTS+153)
+#define DISPID_EVPROPS_COUNT 154
+
+#define DISPID_EVMETH_ONMOUSEOVER STDDISPID_XOBJ_ONMOUSEOVER
+#define DISPID_EVMETH_ONMOUSEOUT STDDISPID_XOBJ_ONMOUSEOUT
+#define DISPID_EVMETH_ONMOUSEDOWN DISPID_MOUSEDOWN
+#define DISPID_EVMETH_ONMOUSEUP DISPID_MOUSEUP
+#define DISPID_EVMETH_ONMOUSEMOVE DISPID_MOUSEMOVE
+#define DISPID_EVMETH_ONKEYDOWN DISPID_KEYDOWN
+#define DISPID_EVMETH_ONKEYUP DISPID_KEYUP
+#define DISPID_EVMETH_ONKEYPRESS DISPID_KEYPRESS
+#define DISPID_EVMETH_ONCLICK DISPID_CLICK
+#define DISPID_EVMETH_ONDBLCLICK DISPID_DBLCLICK
+#define DISPID_EVMETH_ONSELECT DISPID_ONSELECT
+#define DISPID_EVMETH_ONSUBMIT DISPID_ONSUBMIT
+#define DISPID_EVMETH_ONRESET DISPID_ONRESET
+#define DISPID_EVMETH_ONHELP STDDISPID_XOBJ_ONHELP
+#define DISPID_EVMETH_ONFOCUS STDDISPID_XOBJ_ONFOCUS
+#define DISPID_EVMETH_ONBLUR STDDISPID_XOBJ_ONBLUR
+#define DISPID_EVMETH_ONROWEXIT STDDISPID_XOBJ_ONROWEXIT
+#define DISPID_EVMETH_ONROWENTER STDDISPID_XOBJ_ONROWENTER
+#define DISPID_EVMETH_ONBOUNCE DISPID_ONBOUNCE
+#define DISPID_EVMETH_ONBEFOREUPDATE STDDISPID_XOBJ_BEFOREUPDATE
+#define DISPID_EVMETH_ONAFTERUPDATE STDDISPID_XOBJ_AFTERUPDATE
+#define DISPID_EVMETH_ONBEFOREDRAGOVER EVENTID_CommonCtrlEvent_BeforeDragOver
+#define DISPID_EVMETH_ONBEFOREDROPORPASTE EVENTID_CommonCtrlEvent_BeforeDropOrPaste
+#define DISPID_EVMETH_ONREADYSTATECHANGE DISPID_READYSTATECHANGE
+#define DISPID_EVMETH_ONFINISH DISPID_ONFINISH
+#define DISPID_EVMETH_ONSTART DISPID_ONSTART
+#define DISPID_EVMETH_ONABORT DISPID_ONABORT
+#define DISPID_EVMETH_ONERROR DISPID_ONERROR
+#define DISPID_EVMETH_ONCHANGE DISPID_ONCHANGE
+#define DISPID_EVMETH_ONSCROLL DISPID_ONSCROLL
+#define DISPID_EVMETH_ONLOAD DISPID_ONLOAD
+#define DISPID_EVMETH_ONUNLOAD DISPID_ONUNLOAD
+#define DISPID_EVMETH_ONLAYOUT DISPID_ONLAYOUT
+#define DISPID_EVMETH_ONDRAGSTART STDDISPID_XOBJ_ONDRAGSTART
+#define DISPID_EVMETH_ONRESIZE DISPID_ONRESIZE
+#define DISPID_EVMETH_ONSELECTSTART STDDISPID_XOBJ_ONSELECTSTART
+#define DISPID_EVMETH_ONERRORUPDATE STDDISPID_XOBJ_ERRORUPDATE
+#define DISPID_EVMETH_ONBEFOREUNLOAD DISPID_ONBEFOREUNLOAD
+#define DISPID_EVMETH_ONDATASETCHANGED STDDISPID_XOBJ_ONDATASETCHANGED
+#define DISPID_EVMETH_ONDATAAVAILABLE STDDISPID_XOBJ_ONDATAAVAILABLE
+#define DISPID_EVMETH_ONDATASETCOMPLETE STDDISPID_XOBJ_ONDATASETCOMPLETE
+#define DISPID_EVMETH_ONFILTER STDDISPID_XOBJ_ONFILTER
+#define DISPID_EVMETH_ONCHANGEFOCUS DISPID_ONCHANGEFOCUS
+#define DISPID_EVMETH_ONCHANGEBLUR DISPID_ONCHANGEBLUR
+#define DISPID_EVMETH_ONLOSECAPTURE STDDISPID_XOBJ_ONLOSECAPTURE
+#define DISPID_EVMETH_ONPROPERTYCHANGE STDDISPID_XOBJ_ONPROPERTYCHANGE
+#define DISPID_EVMETH_ONPERSISTSAVE DISPID_ONPERSISTSAVE
+#define DISPID_EVMETH_ONDRAG STDDISPID_XOBJ_ONDRAG
+#define DISPID_EVMETH_ONDRAGEND STDDISPID_XOBJ_ONDRAGEND
+#define DISPID_EVMETH_ONDRAGENTER STDDISPID_XOBJ_ONDRAGENTER
+#define DISPID_EVMETH_ONDRAGOVER STDDISPID_XOBJ_ONDRAGOVER
+#define DISPID_EVMETH_ONDRAGLEAVE STDDISPID_XOBJ_ONDRAGLEAVE
+#define DISPID_EVMETH_ONDROP STDDISPID_XOBJ_ONDROP
+#define DISPID_EVMETH_ONCUT STDDISPID_XOBJ_ONCUT
+#define DISPID_EVMETH_ONCOPY STDDISPID_XOBJ_ONCOPY
+#define DISPID_EVMETH_ONPASTE STDDISPID_XOBJ_ONPASTE
+#define DISPID_EVMETH_ONBEFORECUT STDDISPID_XOBJ_ONBEFORECUT
+#define DISPID_EVMETH_ONBEFORECOPY STDDISPID_XOBJ_ONBEFORECOPY
+#define DISPID_EVMETH_ONBEFOREPASTE STDDISPID_XOBJ_ONBEFOREPASTE
+#define DISPID_EVMETH_ONPERSISTLOAD DISPID_ONPERSISTLOAD
+#define DISPID_EVMETH_ONROWSDELETE STDDISPID_XOBJ_ONROWSDELETE
+#define DISPID_EVMETH_ONROWSINSERTED STDDISPID_XOBJ_ONROWSINSERTED
+#define DISPID_EVMETH_ONCELLCHANGE STDDISPID_XOBJ_ONCELLCHANGE
+#define DISPID_EVMETH_ONCONTEXTMENU DISPID_ONCONTEXTMENU
+#define DISPID_EVMETH_ONBEFOREPRINT DISPID_ONBEFOREPRINT
+#define DISPID_EVMETH_ONAFTERPRINT DISPID_ONAFTERPRINT
+#define DISPID_EVMETH_ONSTOP DISPID_ONSTOP
+#define DISPID_EVMETH_ONBEFOREEDITFOCUS DISPID_ONBEFOREEDITFOCUS
+#define DISPID_EVMETH_ONMOUSEHOVER DISPID_ONMOUSEHOVER
+#define DISPID_EVMETH_ONCONTENTREADY DISPID_ONCONTENTREADY
+#define DISPID_EVMETH_ONLAYOUTCOMPLETE DISPID_ONLAYOUTCOMPLETE
+#define DISPID_EVMETH_ONPAGE DISPID_ONPAGE
+#define DISPID_EVMETH_ONLINKEDOVERFLOW DISPID_ONLINKEDOVERFLOW
+#define DISPID_EVMETH_ONMOUSEWHEEL DISPID_ONMOUSEWHEEL
+#define DISPID_EVMETH_ONBEFOREDEACTIVATE DISPID_ONBEFOREDEACTIVATE
+#define DISPID_EVMETH_ONMOVE DISPID_ONMOVE
+#define DISPID_EVMETH_ONCONTROLSELECT DISPID_ONCONTROLSELECT
+#define DISPID_EVMETH_ONSELECTIONCHANGE DISPID_ONSELECTIONCHANGE
+#define DISPID_EVMETH_ONMOVESTART DISPID_ONMOVESTART
+#define DISPID_EVMETH_ONMOVEEND DISPID_ONMOVEEND
+#define DISPID_EVMETH_ONRESIZESTART DISPID_ONRESIZESTART
+#define DISPID_EVMETH_ONRESIZEEND DISPID_ONRESIZEEND
+#define DISPID_EVMETH_ONMOUSEENTER DISPID_ONMOUSEENTER
+#define DISPID_EVMETH_ONMOUSELEAVE DISPID_ONMOUSELEAVE
+#define DISPID_EVMETH_ONACTIVATE DISPID_ONACTIVATE
+#define DISPID_EVMETH_ONDEACTIVATE DISPID_ONDEACTIVATE
+#define DISPID_EVMETH_ONMULTILAYOUTCLEANUP DISPID_ONMULTILAYOUTCLEANUP
+#define DISPID_EVMETH_ONBEFOREACTIVATE DISPID_ONBEFOREACTIVATE
+#define DISPID_EVMETH_ONFOCUSIN DISPID_ONFOCUSIN
+#define DISPID_EVMETH_ONFOCUSOUT DISPID_ONFOCUSOUT
+#define DISPID_EVMETH_ONSTORAGE DISPID_ONSTORAGE
+#define DISPID_EVMETH_ONSTORAGECOMMIT DISPID_ONSTORAGECOMMIT
+
+#define DISPID_ONABORT (DISPID_NORMAL_FIRST)
+#define DISPID_ONCHANGE (DISPID_NORMAL_FIRST+1)
+#define DISPID_ONERROR (DISPID_NORMAL_FIRST+2)
+#define DISPID_ONLOAD (DISPID_NORMAL_FIRST+3)
+#define DISPID_ONSELECT (DISPID_NORMAL_FIRST+6)
+#define DISPID_ONSUBMIT (DISPID_NORMAL_FIRST+7)
+#define DISPID_ONUNLOAD (DISPID_NORMAL_FIRST+8)
+#define DISPID_ONBOUNCE (DISPID_NORMAL_FIRST+9)
+#define DISPID_ONFINISH (DISPID_NORMAL_FIRST+10)
+#define DISPID_ONSTART (DISPID_NORMAL_FIRST+11)
+#define DISPID_ONLAYOUT (DISPID_NORMAL_FIRST+13)
+#define DISPID_ONSCROLL (DISPID_NORMAL_FIRST+14)
+#define DISPID_ONRESET (DISPID_NORMAL_FIRST+15)
+#define DISPID_ONRESIZE (DISPID_NORMAL_FIRST+16)
+#define DISPID_ONBEFOREUNLOAD (DISPID_NORMAL_FIRST+17)
+#define DISPID_ONCHANGEFOCUS (DISPID_NORMAL_FIRST+18)
+#define DISPID_ONCHANGEBLUR (DISPID_NORMAL_FIRST+19)
+#define DISPID_ONPERSIST (DISPID_NORMAL_FIRST+20)
+#define DISPID_ONPERSISTSAVE (DISPID_NORMAL_FIRST+21)
+#define DISPID_ONPERSISTLOAD (DISPID_NORMAL_FIRST+22)
+#define DISPID_ONCONTEXTMENU (DISPID_NORMAL_FIRST+23)
+#define DISPID_ONBEFOREPRINT (DISPID_NORMAL_FIRST+24)
+#define DISPID_ONAFTERPRINT (DISPID_NORMAL_FIRST+25)
+#define DISPID_ONSTOP (DISPID_NORMAL_FIRST+26)
+#define DISPID_ONBEFOREEDITFOCUS (DISPID_NORMAL_FIRST+27)
+#define DISPID_ONMOUSEHOVER (DISPID_NORMAL_FIRST+28)
+#define DISPID_ONCONTENTREADY (DISPID_NORMAL_FIRST+29)
+#define DISPID_ONLAYOUTCOMPLETE (DISPID_NORMAL_FIRST+30)
+#define DISPID_ONPAGE (DISPID_NORMAL_FIRST+31)
+#define DISPID_ONLINKEDOVERFLOW (DISPID_NORMAL_FIRST+32)
+#define DISPID_ONMOUSEWHEEL (DISPID_NORMAL_FIRST+33)
+#define DISPID_ONBEFOREDEACTIVATE (DISPID_NORMAL_FIRST+34)
+#define DISPID_ONMOVE (DISPID_NORMAL_FIRST+35)
+#define DISPID_ONCONTROLSELECT (DISPID_NORMAL_FIRST+36)
+#define DISPID_ONSELECTIONCHANGE (DISPID_NORMAL_FIRST+37)
+#define DISPID_ONMOVESTART (DISPID_NORMAL_FIRST+38)
+#define DISPID_ONMOVEEND (DISPID_NORMAL_FIRST+39)
+#define DISPID_ONRESIZESTART (DISPID_NORMAL_FIRST+40)
+#define DISPID_ONRESIZEEND (DISPID_NORMAL_FIRST+41)
+#define DISPID_ONMOUSEENTER (DISPID_NORMAL_FIRST+42)
+#define DISPID_ONMOUSELEAVE (DISPID_NORMAL_FIRST+43)
+#define DISPID_ONACTIVATE (DISPID_NORMAL_FIRST+44)
+#define DISPID_ONDEACTIVATE (DISPID_NORMAL_FIRST+45)
+#define DISPID_ONMULTILAYOUTCLEANUP (DISPID_NORMAL_FIRST+46)
+#define DISPID_ONBEFOREACTIVATE (DISPID_NORMAL_FIRST+47)
+#define DISPID_ONFOCUSIN (DISPID_NORMAL_FIRST+48)
+#define DISPID_ONFOCUSOUT (DISPID_NORMAL_FIRST+49)
+#define DISPID_ONSTORAGE (DISPID_NORMAL_FIRST+50)
+#define DISPID_ONSTORAGECOMMIT (DISPID_NORMAL_FIRST+51)
+
+/* HTMLDocumentEvents */
+#define DISPID_HTMLDOCUMENTEVENTS_ONHELP DISPID_EVMETH_ONHELP
+#define DISPID_HTMLDOCUMENTEVENTS_ONCLICK DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLDOCUMENTEVENTS_ONKEYUP DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWENTER DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLDOCUMENTEVENTS_ONSTOP DISPID_EVMETH_ONSTOP
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS DISPID_EVMETH_ONBEFOREEDITFOCUS
+#define DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE DISPID_EVMETH_ONSELECTIONCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL
+#define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT
+#define DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE
+
+/* HTMLDocumentEvents2 */
+#define DISPID_HTMLDOCUMENTEVENTS2_ONHELP DISPID_EVMETH_ONHELP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCLICK DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLDOCUMENTEVENTS2_ONSTOP DISPID_EVMETH_ONSTOP
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS DISPID_EVMETH_ONBEFOREEDITFOCUS
+#define DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE DISPID_EVMETH_ONSELECTIONCHANGE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL
+#define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT
+#define DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE
+
+/* IHTMLDocument */
+#define DISPID_IHTMLDOCUMENT_SCRIPT (DISPID_OMDOCUMENT+1)
+
+/* IHTMLDocument2 */
+#define DISPID_IHTMLDOCUMENT2_ALL (DISPID_OMDOCUMENT+3)
+#define DISPID_IHTMLDOCUMENT2_BODY (DISPID_OMDOCUMENT+4)
+#define DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT (DISPID_OMDOCUMENT+5)
+#define DISPID_IHTMLDOCUMENT2_APPLETS (DISPID_OMDOCUMENT+8)
+#define DISPID_IHTMLDOCUMENT2_ANCHORS (DISPID_OMDOCUMENT+7)
+#define DISPID_IHTMLDOCUMENT2_LINKS (DISPID_OMDOCUMENT+9)
+#define DISPID_IHTMLDOCUMENT2_FORMS (DISPID_OMDOCUMENT+10)
+#define DISPID_IHTMLDOCUMENT2_IMAGES (DISPID_OMDOCUMENT+11)
+#define DISPID_IHTMLDOCUMENT2_TITLE (DISPID_OMDOCUMENT+12)
+#define DISPID_IHTMLDOCUMENT2_SCRIPTS (DISPID_OMDOCUMENT+13)
+#define DISPID_IHTMLDOCUMENT2_DESIGNMODE (DISPID_OMDOCUMENT+14)
+#define DISPID_IHTMLDOCUMENT2_EMBEDS (DISPID_OMDOCUMENT+15)
+#define DISPID_IHTMLDOCUMENT2_SELECTION (DISPID_OMDOCUMENT+17)
+#define DISPID_IHTMLDOCUMENT2_READYSTATE (DISPID_OMDOCUMENT+18)
+#define DISPID_IHTMLDOCUMENT2_FRAMES (DISPID_OMDOCUMENT+19)
+#define DISPID_IHTMLDOCUMENT2_PLUGINS (DISPID_OMDOCUMENT+21)
+#define DISPID_IHTMLDOCUMENT2_ALINKCOLOR (DISPID_OMDOCUMENT+22)
+#define DISPID_IHTMLDOCUMENT2_VLINKCOLOR (DISPID_OMDOCUMENT+23)
+#define DISPID_IHTMLDOCUMENT2_LINKCOLOR (DISPID_OMDOCUMENT+24)
+#define DISPID_IHTMLDOCUMENT2_URL (DISPID_OMDOCUMENT+25)
+#define DISPID_IHTMLDOCUMENT2_LOCATION (DISPID_OMDOCUMENT+26)
+#define DISPID_IHTMLDOCUMENT2_REFERRER (DISPID_OMDOCUMENT+27)
+#define DISPID_IHTMLDOCUMENT2_LASTMODIFIED (DISPID_OMDOCUMENT+28)
+#define DISPID_IHTMLDOCUMENT2_DOMAIN (DISPID_OMDOCUMENT+29)
+#define DISPID_IHTMLDOCUMENT2_COOKIE (DISPID_OMDOCUMENT+30)
+#define DISPID_IHTMLDOCUMENT2_EXPANDO (DISPID_OMDOCUMENT+31)
+#define DISPID_IHTMLDOCUMENT2_CHARSET (DISPID_OMDOCUMENT+32)
+#define DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET (DISPID_OMDOCUMENT+33)
+#define DISPID_IHTMLDOCUMENT2_PARENTWINDOW (DISPID_OMDOCUMENT+34)
+#define DISPID_IHTMLDOCUMENT2_MIMETYPE (DISPID_OMDOCUMENT+41)
+#define DISPID_IHTMLDOCUMENT2_FILESIZE (DISPID_OMDOCUMENT+42)
+#define DISPID_IHTMLDOCUMENT2_FILECREATEDDATE (DISPID_OMDOCUMENT+43)
+#define DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE (DISPID_OMDOCUMENT+44)
+#define DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE (DISPID_OMDOCUMENT+45)
+#define DISPID_IHTMLDOCUMENT2_SECURITY (DISPID_OMDOCUMENT+46)
+#define DISPID_IHTMLDOCUMENT2_PROTOCOL (DISPID_OMDOCUMENT+47)
+#define DISPID_IHTMLDOCUMENT2_NAMEPROP (DISPID_OMDOCUMENT+48)
+#define DISPID_IHTMLDOCUMENT2_WRITE (DISPID_OMDOCUMENT+54)
+#define DISPID_IHTMLDOCUMENT2_WRITELN (DISPID_OMDOCUMENT+55)
+#define DISPID_IHTMLDOCUMENT2_OPEN (DISPID_OMDOCUMENT+56)
+#define DISPID_IHTMLDOCUMENT2_CLOSE (DISPID_OMDOCUMENT+57)
+#define DISPID_IHTMLDOCUMENT2_CLEAR (DISPID_OMDOCUMENT+58)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED (DISPID_OMDOCUMENT+59)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED (DISPID_OMDOCUMENT+60)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE (DISPID_OMDOCUMENT+61)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM (DISPID_OMDOCUMENT+62)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT (DISPID_OMDOCUMENT+63)
+#define DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE (DISPID_OMDOCUMENT+64)
+#define DISPID_IHTMLDOCUMENT2_EXECCOMMAND (DISPID_OMDOCUMENT+65)
+#define DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP (DISPID_OMDOCUMENT+66)
+#define DISPID_IHTMLDOCUMENT2_CREATEELEMENT (DISPID_OMDOCUMENT+67)
+#define DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT (DISPID_OMDOCUMENT+68)
+#define DISPID_IHTMLDOCUMENT2_STYLESHEETS (DISPID_OMDOCUMENT+69)
+#define DISPID_IHTMLDOCUMENT2_TOSTRING (DISPID_OMDOCUMENT+70)
+#define DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET (DISPID_OMDOCUMENT+71)
+#define DISPID_IHTMLDOCUMENT2_ONHELP DISPID_EVPROP_ONHELP
+#define DISPID_IHTMLDOCUMENT2_ONCLICK DISPID_EVPROP_ONCLICK
+#define DISPID_IHTMLDOCUMENT2_ONDBLCLICK DISPID_EVPROP_ONDBLCLICK
+#define DISPID_IHTMLDOCUMENT2_ONKEYUP DISPID_EVPROP_ONKEYUP
+#define DISPID_IHTMLDOCUMENT2_ONKEYDOWN DISPID_EVPROP_ONKEYDOWN
+#define DISPID_IHTMLDOCUMENT2_ONKEYPRESS DISPID_EVPROP_ONKEYPRESS
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEUP DISPID_EVPROP_ONMOUSEUP
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN DISPID_EVPROP_ONMOUSEDOWN
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE DISPID_EVPROP_ONMOUSEMOVE
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEOUT DISPID_EVPROP_ONMOUSEOUT
+#define DISPID_IHTMLDOCUMENT2_ONMOUSEOVER DISPID_EVPROP_ONMOUSEOVER
+#define DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE DISPID_EVPROP_ONAFTERUPDATE
+#define DISPID_IHTMLDOCUMENT2_ONROWEXIT DISPID_EVPROP_ONROWEXIT
+#define DISPID_IHTMLDOCUMENT2_ONROWENTER DISPID_EVPROP_ONROWENTER
+#define DISPID_IHTMLDOCUMENT2_ONDRAGSTART DISPID_EVPROP_ONDRAGSTART
+#define DISPID_IHTMLDOCUMENT2_ONSELECTSTART DISPID_EVPROP_ONSELECTSTART
+#define DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE DISPID_EVPROP_ONBEFOREUPDATE
+#define DISPID_IHTMLDOCUMENT2_ONERRORUPDATE DISPID_EVPROP_ONERRORUPDATE
+#define DISPID_IHTMLDOCUMENT2_BGCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLDOCUMENT2_FGCOLOR DISPID_A_COLOR
+
+/* IHTMLDocument3 */
+#define DISPID_IHTMLDOCUMENT3_RELEASECAPTURE DISPID_OMDOCUMENT+72
+#define DISPID_IHTMLDOCUMENT3_RECALC DISPID_OMDOCUMENT+73
+#define DISPID_IHTMLDOCUMENT3_CREATETEXTNODE DISPID_OMDOCUMENT+74
+#define DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT DISPID_OMDOCUMENT+75
+#define DISPID_IHTMLDOCUMENT3_UNIQUEID DISPID_OMDOCUMENT+77
+#define DISPID_IHTMLDOCUMENT3_ATTACHEVENT DISPID_HTMLOBJECT+7
+#define DISPID_IHTMLDOCUMENT3_DETACHEVENT DISPID_HTMLOBJECT+8
+#define DISPID_IHTMLDOCUMENT3_ONROWSDELETE DISPID_EVPROP_ONROWSDELETE
+#define DISPID_IHTMLDOCUMENT3_ONROWSINSERTED DISPID_EVPROP_ONROWSINSERTED
+#define DISPID_IHTMLDOCUMENT3_ONCELLCHANGE DISPID_EVPROP_ONCELLCHANGE
+#define DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED DISPID_EVPROP_ONDATASETCHANGED
+#define DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE DISPID_EVPROP_ONDATAAVAILABLE
+#define DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE DISPID_EVPROP_ONDATASETCOMPLETE
+#define DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE DISPID_EVPROP_ONPROPERTYCHANGE
+#define DISPID_IHTMLDOCUMENT3_DIR DISPID_A_DIR
+#define DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU DISPID_EVPROP_ONCONTEXTMENU
+#define DISPID_IHTMLDOCUMENT3_ONSTOP DISPID_EVPROP_ONSTOP
+#define DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT DISPID_OMDOCUMENT+76
+#define DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT DISPID_OMDOCUMENT+78
+#define DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD DISPID_OMDOCUMENT+79
+#define DISPID_IHTMLDOCUMENT3_BASEURL DISPID_OMDOCUMENT+80
+#define DISPID_IHTMLDOCUMENT3_CHILDNODES DISPID_ELEMENT+49
+#define DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS DISPID_OMDOCUMENT+82
+#define DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS DISPID_EVPROP_ONBEFOREEDITFOCUS
+#define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME DISPID_OMDOCUMENT+86
+#define DISPID_IHTMLDOCUMENT3_GETELEMENTBYID DISPID_OMDOCUMENT+88
+#define DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME DISPID_OMDOCUMENT+87
+
+
+/* IHTMLDocument4 */
+#define DISPID_IHTMLDOCUMENT4_FOCUS DISPID_OMDOCUMENT+89
+#define DISPID_IHTMLDOCUMENT4_HASFOCUS DISPID_OMDOCUMENT+90
+#define DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE DISPID_EVPROP_ONSELECTIONCHANGE
+#define DISPID_IHTMLDOCUMENT4_NAMESPACES DISPID_OMDOCUMENT+91
+#define DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL DISPID_OMDOCUMENT+92
+#define DISPID_IHTMLDOCUMENT4_MEDIA DISPID_OMDOCUMENT+93
+#define DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT DISPID_OMDOCUMENT+94
+#define DISPID_IHTMLDOCUMENT4_FIREEVENT DISPID_OMDOCUMENT+95
+#define DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE DISPID_OMDOCUMENT+96
+#define DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT DISPID_EVPROP_ONCONTROLSELECT
+#define DISPID_IHTMLDOCUMENT4_URLUNENCODED DISPID_OMDOCUMENT+97
+
+/* IHTMLDocument5 */
+#define DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL
+#define DISPID_IHTMLDOCUMENT5_DOCTYPE DISPID_OMDOCUMENT+98
+#define DISPID_IHTMLDOCUMENT5_IMPLEMENTATION DISPID_OMDOCUMENT+99
+#define DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE DISPID_OMDOCUMENT+100
+#define DISPID_IHTMLDOCUMENT5_CREATECOMMENT DISPID_OMDOCUMENT+101
+#define DISPID_IHTMLDOCUMENT5_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN
+#define DISPID_IHTMLDOCUMENT5_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT
+#define DISPID_IHTMLDOCUMENT5_ONACTIVATE DISPID_EVPROP_ONACTIVATE
+#define DISPID_IHTMLDOCUMENT5_ONDEACTIVATE DISPID_EVPROP_ONDEACTIVATE
+#define DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE DISPID_EVPROP_ONBEFOREACTIVATE
+#define DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE DISPID_EVPROP_ONBEFOREDEACTIVATE
+#define DISPID_IHTMLDOCUMENT5_COMPATMODE DISPID_OMDOCUMENT+102
+
+/* IHTMLDocument6 */
+#define DISPID_IHTMLDOCUMENT6_COMPATIBLE DISPID_OMDOCUMENT+103
+#define DISPID_IHTMLDOCUMENT6_DOCUMENTMODE DISPID_OMDOCUMENT+104
+#define DISPID_IHTMLDOCUMENT6_ONSTORAGE DISPID_EVPROP_ONSTORAGE
+#define DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT DISPID_EVPROP_ONSTORAGECOMMIT
+#define DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID DISPID_OMDOCUMENT+105
+#define DISPID_IHTMLDOCUMENT6_UPDATESETTINGS DISPID_OMDOCUMENT+106
+
+/* DWebBridgeEvents */
+#define DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT 1
+#define DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE
+#define DISPID_DWEBBRIDGEEVENTS_ONCLICK DISPID_HTMLDOCUMENTEVENTS_ONCLICK
+#define DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK
+#define DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN
+#define DISPID_DWEBBRIDGEEVENTS_ONKEYUP DISPID_HTMLDOCUMENTEVENTS_ONKEYUP
+#define DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS
+#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN
+#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE
+#define DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP
+
+/* IWebBridge */
+#define DISPID_IWEBBRIDGE_URL 1
+#define DISPID_IWEBBRIDGE_SCROLLBAR 2
+#define DISPID_IWEBBRIDGE_EMBED 3
+#define DISPID_IWEBBRIDGE_EVENT DISPID_IHTMLWINDOW2_EVENT
+#define DISPID_IWEBBRIDGE_READYSTATE DISPID_READYSTATE
+#define DISPID_IWEBBRIDGE_ABOUTBOX DISPID_ABOUTBOX
+
+/* IHTMLEmbedElement */
+#define DISPID_IHTMLEMBEDELEMENT_HIDDEN DISPID_OBJECT+10
+#define DISPID_IHTMLEMBEDELEMENT_PALETTE DISPID_OBJECT+4
+#define DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE DISPID_OBJECT+5
+#define DISPID_IHTMLEMBEDELEMENT_SRC DISPID_OBJECT+6
+#define DISPID_IHTMLEMBEDELEMENT_UNITS DISPID_OBJECT+8
+#define DISPID_IHTMLEMBEDELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLEMBEDELEMENT_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLEMBEDELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT
+
+/* IHTMLEmbedElement2 */
+#define DISPID_IHTMLEMBEDELEMENT2_IE8_SRC DISPID_IE8_EMBED
+#define DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE DISPID_IE8_EMBED+1
+
+/* IHTMLElementCollection */
+#define DISPID_IHTMLELEMENTCOLLECTION_LENGTH DISPID_COLLECTION
+#define DISPID_IHTMLELEMENTCOLLECTION_TOSTRING (DISPID_COLLECTION+1)
+#define DISPID_IHTMLELEMENTCOLLECTION_TAGS (DISPID_COLLECTION+2)
+#define DISPID_IHTMLELEMENTCOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLELEMENTCOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLElementCollection2 */
+#define DISPID_IHTMLELEMENTCOLLECTION2_URNS DISPID_COLLECTION+5
+
+/* IHTMLElementCollection3 */
+#define DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM DISPID_COLLECTION+6
+
+
+/* IHTMLAttributeCollection */
+#define DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH DISPID_COLLECTION
+#define DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLATTRIBUTECOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLAttributeCollection2 */
+#define DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM DISPID_COLLECTION+1
+#define DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM DISPID_COLLECTION+2
+#define DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM DISPID_COLLECTION+3
+
+/* IHTMLAttributeCollection3 */
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM DISPID_IE8_NAMEDNODEMAP
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM DISPID_IE8_NAMEDNODEMAP+1
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM DISPID_IE8_NAMEDNODEMAP+2
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM DISPID_IE8_NAMEDNODEMAP+4
+#define DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH DISPID_IE8_NAMEDNODEMAP+3
+
+/* IHTMLDOMChildrenCollection */
+#define DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH DISPID_COLLECTION
+#define DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM DISPID_VALUE
+
+/* HTMLElementEvents */
+#define DISPID_HTMLELEMENTEVENTS_ONHELP DISPID_EVMETH_ONHELP
+#define DISPID_HTMLELEMENTEVENTS_ONCLICK DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLELEMENTEVENTS_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLELEMENTEVENTS_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLELEMENTEVENTS_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLELEMENTEVENTS_ONKEYUP DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLELEMENTEVENTS_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE DISPID_EVMETH_ONFILTER
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLELEMENTEVENTS_ONROWEXIT DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLELEMENTEVENTS_ONROWENTER DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE DISPID_EVMETH_ONLOSECAPTURE
+#define DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLELEMENTEVENTS_ONSCROLL DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLELEMENTEVENTS_ONFOCUS DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLELEMENTEVENTS_ONBLUR DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLELEMENTEVENTS_ONRESIZE DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLELEMENTEVENTS_ONDRAG DISPID_EVMETH_ONDRAG
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGEND DISPID_EVMETH_ONDRAGEND
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGENTER DISPID_EVMETH_ONDRAGENTER
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGOVER DISPID_EVMETH_ONDRAGOVER
+#define DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE DISPID_EVMETH_ONDRAGLEAVE
+#define DISPID_HTMLELEMENTEVENTS_ONDROP DISPID_EVMETH_ONDROP
+#define DISPID_HTMLELEMENTEVENTS_ONBEFORECUT DISPID_EVMETH_ONBEFORECUT
+#define DISPID_HTMLELEMENTEVENTS_ONCUT DISPID_EVMETH_ONCUT
+#define DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY DISPID_EVMETH_ONBEFORECOPY
+#define DISPID_HTMLELEMENTEVENTS_ONCOPY DISPID_EVMETH_ONCOPY
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE DISPID_EVMETH_ONBEFOREPASTE
+#define DISPID_HTMLELEMENTEVENTS_ONPASTE DISPID_EVMETH_ONPASTE
+#define DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLELEMENTEVENTS_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS DISPID_EVMETH_ONBEFOREEDITFOCUS
+#define DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE DISPID_EVMETH_ONLAYOUTCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS_ONPAGE DISPID_EVMETH_ONPAGE
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONMOVE DISPID_EVMETH_ONMOVE
+#define DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLELEMENTEVENTS_ONMOVESTART DISPID_EVMETH_ONMOVESTART
+#define DISPID_HTMLELEMENTEVENTS_ONMOVEEND DISPID_EVMETH_ONMOVEEND
+#define DISPID_HTMLELEMENTEVENTS_ONRESIZESTART DISPID_EVMETH_ONRESIZESTART
+#define DISPID_HTMLELEMENTEVENTS_ONRESIZEEND DISPID_EVMETH_ONRESIZEEND
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER DISPID_EVMETH_ONMOUSEENTER
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE DISPID_EVMETH_ONMOUSELEAVE
+#define DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL
+#define DISPID_HTMLELEMENTEVENTS_ONACTIVATE DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT
+
+/* HTMLElementEvents2 */
+
+#define DISPID_HTMLELEMENTEVENTS2_ONHELP DISPID_EVMETH_ONHELP
+#define DISPID_HTMLELEMENTEVENTS2_ONCLICK DISPID_EVMETH_ONCLICK
+#define DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK DISPID_EVMETH_ONDBLCLICK
+#define DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS DISPID_EVMETH_ONKEYPRESS
+#define DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN DISPID_EVMETH_ONKEYDOWN
+#define DISPID_HTMLELEMENTEVENTS2_ONKEYUP DISPID_EVMETH_ONKEYUP
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT DISPID_EVMETH_ONMOUSEOUT
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER DISPID_EVMETH_ONMOUSEOVER
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE DISPID_EVMETH_ONMOUSEMOVE
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN DISPID_EVMETH_ONMOUSEDOWN
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP DISPID_EVMETH_ONMOUSEUP
+#define DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART DISPID_EVMETH_ONSELECTSTART
+#define DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE DISPID_EVMETH_ONFILTER
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART DISPID_EVMETH_ONDRAGSTART
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE DISPID_EVMETH_ONBEFOREUPDATE
+#define DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE DISPID_EVMETH_ONAFTERUPDATE
+#define DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE DISPID_EVMETH_ONERRORUPDATE
+#define DISPID_HTMLELEMENTEVENTS2_ONROWEXIT DISPID_EVMETH_ONROWEXIT
+#define DISPID_HTMLELEMENTEVENTS2_ONROWENTER DISPID_EVMETH_ONROWENTER
+#define DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED DISPID_EVMETH_ONDATASETCHANGED
+#define DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE DISPID_EVMETH_ONDATAAVAILABLE
+#define DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE DISPID_EVMETH_ONDATASETCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE DISPID_EVMETH_ONLOSECAPTURE
+#define DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE DISPID_EVMETH_ONPROPERTYCHANGE
+#define DISPID_HTMLELEMENTEVENTS2_ONSCROLL DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLELEMENTEVENTS2_ONFOCUS DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLELEMENTEVENTS2_ONBLUR DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLELEMENTEVENTS2_ONRESIZE DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAG DISPID_EVMETH_ONDRAG
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGEND DISPID_EVMETH_ONDRAGEND
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER DISPID_EVMETH_ONDRAGENTER
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER DISPID_EVMETH_ONDRAGOVER
+#define DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE DISPID_EVMETH_ONDRAGLEAVE
+#define DISPID_HTMLELEMENTEVENTS2_ONDROP DISPID_EVMETH_ONDROP
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT DISPID_EVMETH_ONBEFORECUT
+#define DISPID_HTMLELEMENTEVENTS2_ONCUT DISPID_EVMETH_ONCUT
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY DISPID_EVMETH_ONBEFORECOPY
+#define DISPID_HTMLELEMENTEVENTS2_ONCOPY DISPID_EVMETH_ONCOPY
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE DISPID_EVMETH_ONBEFOREPASTE
+#define DISPID_HTMLELEMENTEVENTS2_ONPASTE DISPID_EVMETH_ONPASTE
+#define DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU DISPID_EVMETH_ONCONTEXTMENU
+#define DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE DISPID_EVMETH_ONROWSDELETE
+#define DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED DISPID_EVMETH_ONROWSINSERTED
+#define DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE DISPID_EVMETH_ONCELLCHANGE
+#define DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE DISPID_EVMETH_ONREADYSTATECHANGE
+#define DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE DISPID_EVMETH_ONLAYOUTCOMPLETE
+#define DISPID_HTMLELEMENTEVENTS2_ONPAGE DISPID_EVMETH_ONPAGE
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER DISPID_EVMETH_ONMOUSEENTER
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE DISPID_EVMETH_ONMOUSELEAVE
+#define DISPID_HTMLELEMENTEVENTS2_ONACTIVATE DISPID_EVMETH_ONACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE DISPID_EVMETH_ONDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE DISPID_EVMETH_ONBEFOREDEACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE DISPID_EVMETH_ONBEFOREACTIVATE
+#define DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN DISPID_EVMETH_ONFOCUSIN
+#define DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT DISPID_EVMETH_ONFOCUSOUT
+#define DISPID_HTMLELEMENTEVENTS2_ONMOVE DISPID_EVMETH_ONMOVE
+#define DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT DISPID_EVMETH_ONCONTROLSELECT
+#define DISPID_HTMLELEMENTEVENTS2_ONMOVESTART DISPID_EVMETH_ONMOVESTART
+#define DISPID_HTMLELEMENTEVENTS2_ONMOVEEND DISPID_EVMETH_ONMOVEEND
+#define DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART DISPID_EVMETH_ONRESIZESTART
+#define DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND DISPID_EVMETH_ONRESIZEEND
+#define DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL DISPID_EVMETH_ONMOUSEWHEEL
+
+/* IHTMLElement */
+#define DISPID_IHTMLELEMENT_SETATTRIBUTE (DISPID_HTMLOBJECT+1)
+#define DISPID_IHTMLELEMENT_GETATTRIBUTE (DISPID_HTMLOBJECT+2)
+#define DISPID_IHTMLELEMENT_REMOVEATTRIBUTE (DISPID_HTMLOBJECT+3)
+#define DISPID_IHTMLELEMENT_CLASSNAME (DISPID_ELEMENT+1)
+#define DISPID_IHTMLELEMENT_ID (DISPID_ELEMENT+2)
+#define DISPID_IHTMLELEMENT_TAGNAME (DISPID_ELEMENT+4)
+#define DISPID_IHTMLELEMENT_OFFSETLEFT (DISPID_ELEMENT+8)
+#define DISPID_IHTMLELEMENT_OFFSETTOP (DISPID_ELEMENT+9)
+#define DISPID_IHTMLELEMENT_OFFSETWIDTH (DISPID_ELEMENT+10)
+#define DISPID_IHTMLELEMENT_OFFSETHEIGHT (DISPID_ELEMENT+11)
+#define DISPID_IHTMLELEMENT_OFFSETPARENT (DISPID_ELEMENT+12)
+#define DISPID_IHTMLELEMENT_DOCUMENT (DISPID_ELEMENT+18)
+#define DISPID_IHTMLELEMENT_SCROLLINTOVIEW (DISPID_ELEMENT+19)
+#define DISPID_IHTMLELEMENT_CONTAINS (DISPID_ELEMENT+20)
+#define DISPID_IHTMLELEMENT_SOURCEINDEX (DISPID_ELEMENT+24)
+#define DISPID_IHTMLELEMENT_RECORDNUMBER (DISPID_ELEMENT+25)
+#define DISPID_IHTMLELEMENT_INNERHTML (DISPID_ELEMENT+26)
+#define DISPID_IHTMLELEMENT_INNERTEXT (DISPID_ELEMENT+27)
+#define DISPID_IHTMLELEMENT_OUTERHTML (DISPID_ELEMENT+28)
+#define DISPID_IHTMLELEMENT_OUTERTEXT (DISPID_ELEMENT+29)
+#define DISPID_IHTMLELEMENT_INSERTADJACENTHTML (DISPID_ELEMENT+30)
+#define DISPID_IHTMLELEMENT_INSERTADJACENTTEXT (DISPID_ELEMENT+31)
+#define DISPID_IHTMLELEMENT_PARENTTEXTEDIT (DISPID_ELEMENT+32)
+#define DISPID_IHTMLELEMENT_ISTEXTEDIT (DISPID_ELEMENT+34)
+#define DISPID_IHTMLELEMENT_CLICK (DISPID_ELEMENT+33)
+#define DISPID_IHTMLELEMENT_FILTERS (DISPID_ELEMENT+35)
+#define DISPID_IHTMLELEMENT_TOSTRING (DISPID_ELEMENT+36)
+#define DISPID_IHTMLELEMENT_CHILDREN (DISPID_ELEMENT+37)
+#define DISPID_IHTMLELEMENT_ALL (DISPID_ELEMENT+38)
+#define DISPID_IHTMLELEMENT_PARENTELEMENT STDPROPID_XOBJ_PARENT
+#define DISPID_IHTMLELEMENT_STYLE STDPROPID_XOBJ_STYLE
+#define DISPID_IHTMLELEMENT_ONHELP DISPID_EVPROP_ONHELP
+#define DISPID_IHTMLELEMENT_ONCLICK DISPID_EVPROP_ONCLICK
+#define DISPID_IHTMLELEMENT_ONDBLCLICK DISPID_EVPROP_ONDBLCLICK
+#define DISPID_IHTMLELEMENT_ONKEYDOWN DISPID_EVPROP_ONKEYDOWN
+#define DISPID_IHTMLELEMENT_ONKEYUP DISPID_EVPROP_ONKEYUP
+#define DISPID_IHTMLELEMENT_ONKEYPRESS DISPID_EVPROP_ONKEYPRESS
+#define DISPID_IHTMLELEMENT_ONMOUSEOUT DISPID_EVPROP_ONMOUSEOUT
+#define DISPID_IHTMLELEMENT_ONMOUSEOVER DISPID_EVPROP_ONMOUSEOVER
+#define DISPID_IHTMLELEMENT_ONMOUSEMOVE DISPID_EVPROP_ONMOUSEMOVE
+#define DISPID_IHTMLELEMENT_ONMOUSEDOWN DISPID_EVPROP_ONMOUSEDOWN
+#define DISPID_IHTMLELEMENT_ONMOUSEUP DISPID_EVPROP_ONMOUSEUP
+#define DISPID_IHTMLELEMENT_TITLE STDPROPID_XOBJ_CONTROLTIPTEXT
+#define DISPID_IHTMLELEMENT_LANGUAGE DISPID_A_LANGUAGE
+#define DISPID_IHTMLELEMENT_ONSELECTSTART DISPID_EVPROP_ONSELECTSTART
+#define DISPID_IHTMLELEMENT_LANG DISPID_A_LANG
+#define DISPID_IHTMLELEMENT_ONDRAGSTART DISPID_EVPROP_ONDRAGSTART
+#define DISPID_IHTMLELEMENT_ONBEFOREUPDATE DISPID_EVPROP_ONBEFOREUPDATE
+#define DISPID_IHTMLELEMENT_ONAFTERUPDATE DISPID_EVPROP_ONAFTERUPDATE
+#define DISPID_IHTMLELEMENT_ONERRORUPDATE DISPID_EVPROP_ONERRORUPDATE
+#define DISPID_IHTMLELEMENT_ONROWEXIT DISPID_EVPROP_ONROWEXIT
+#define DISPID_IHTMLELEMENT_ONROWENTER DISPID_EVPROP_ONROWENTER
+#define DISPID_IHTMLELEMENT_ONDATASETCHANGED DISPID_EVPROP_ONDATASETCHANGED
+#define DISPID_IHTMLELEMENT_ONDATAAVAILABLE DISPID_EVPROP_ONDATAAVAILABLE
+#define DISPID_IHTMLELEMENT_ONDATASETCOMPLETE DISPID_EVPROP_ONDATASETCOMPLETE
+#define DISPID_IHTMLELEMENT_ONFILTERCHANGE DISPID_EVPROP_ONFILTER
+
+/* IHTMLElement2 */
+#define DISPID_IHTMLELEMENT2_SCOPENAME DISPID_ELEMENT+39
+#define DISPID_IHTMLELEMENT2_SETCAPTURE DISPID_ELEMENT+40
+#define DISPID_IHTMLELEMENT2_RELEASECAPTURE DISPID_ELEMENT+41
+#define DISPID_IHTMLELEMENT2_ONLOSECAPTURE DISPID_EVPROP_ONLOSECAPTURE
+#define DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT DISPID_ELEMENT+42
+#define DISPID_IHTMLELEMENT2_DOSCROLL DISPID_ELEMENT+43
+#define DISPID_IHTMLELEMENT2_ONSCROLL DISPID_EVPROP_ONSCROLL
+#define DISPID_IHTMLELEMENT2_ONDRAG DISPID_EVPROP_ONDRAG
+#define DISPID_IHTMLELEMENT2_ONDRAGEND DISPID_EVPROP_ONDRAGEND
+#define DISPID_IHTMLELEMENT2_ONDRAGENTER DISPID_EVPROP_ONDRAGENTER
+#define DISPID_IHTMLELEMENT2_ONDRAGOVER DISPID_EVPROP_ONDRAGOVER
+#define DISPID_IHTMLELEMENT2_ONDRAGLEAVE DISPID_EVPROP_ONDRAGLEAVE
+#define DISPID_IHTMLELEMENT2_ONDROP DISPID_EVPROP_ONDROP
+#define DISPID_IHTMLELEMENT2_ONBEFORECUT DISPID_EVPROP_ONBEFORECUT
+#define DISPID_IHTMLELEMENT2_ONCUT DISPID_EVPROP_ONCUT
+#define DISPID_IHTMLELEMENT2_ONBEFORECOPY DISPID_EVPROP_ONBEFORECOPY
+#define DISPID_IHTMLELEMENT2_ONCOPY DISPID_EVPROP_ONCOPY
+#define DISPID_IHTMLELEMENT2_ONBEFOREPASTE DISPID_EVPROP_ONBEFOREPASTE
+#define DISPID_IHTMLELEMENT2_ONPASTE DISPID_EVPROP_ONPASTE
+#define DISPID_IHTMLELEMENT2_CURRENTSTYLE DISPID_ELEMENT+7
+#define DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE DISPID_EVPROP_ONPROPERTYCHANGE
+#define DISPID_IHTMLELEMENT2_GETCLIENTRECTS DISPID_ELEMENT+44
+#define DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT DISPID_ELEMENT+45
+#define DISPID_IHTMLELEMENT2_SETEXPRESSION DISPID_HTMLOBJECT+4
+#define DISPID_IHTMLELEMENT2_GETEXPRESSION DISPID_HTMLOBJECT+5
+#define DISPID_IHTMLELEMENT2_REMOVEEXPRESSION DISPID_HTMLOBJECT+6
+#define DISPID_IHTMLELEMENT2_TABINDEX STDPROPID_XOBJ_TABINDEX
+#define DISPID_IHTMLELEMENT2_FOCUS DISPID_SITE
+#define DISPID_IHTMLELEMENT2_ACCESSKEY DISPID_SITE+5
+#define DISPID_IHTMLELEMENT2_ONBLUR DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLELEMENT2_ONFOCUS DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLELEMENT2_ONRESIZE DISPID_EVPROP_ONRESIZE
+#define DISPID_IHTMLELEMENT2_BLUR DISPID_SITE+2
+#define DISPID_IHTMLELEMENT2_ADDFILTER DISPID_SITE+17
+#define DISPID_IHTMLELEMENT2_REMOVEFILTER DISPID_SITE+18
+#define DISPID_IHTMLELEMENT2_CLIENTHEIGHT DISPID_SITE+19
+#define DISPID_IHTMLELEMENT2_CLIENTWIDTH DISPID_SITE+20
+#define DISPID_IHTMLELEMENT2_CLIENTTOP DISPID_SITE+21
+#define DISPID_IHTMLELEMENT2_CLIENTLEFT DISPID_SITE+22
+#define DISPID_IHTMLELEMENT2_ATTACHEVENT DISPID_HTMLOBJECT+7
+#define DISPID_IHTMLELEMENT2_DETACHEVENT DISPID_HTMLOBJECT+8
+#define DISPID_IHTMLELEMENT2_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLELEMENT2_ONROWSDELETE DISPID_EVPROP_ONROWSDELETE
+#define DISPID_IHTMLELEMENT2_ONROWSINSERTED DISPID_EVPROP_ONROWSINSERTED
+#define DISPID_IHTMLELEMENT2_ONCELLCHANGE DISPID_EVPROP_ONCELLCHANGE
+#define DISPID_IHTMLELEMENT2_DIR DISPID_A_DIR
+#define DISPID_IHTMLELEMENT2_CREATECONTROLRANGE DISPID_ELEMENT+56
+#define DISPID_IHTMLELEMENT2_SCROLLHEIGHT DISPID_ELEMENT+57
+#define DISPID_IHTMLELEMENT2_SCROLLWIDTH DISPID_ELEMENT+58
+#define DISPID_IHTMLELEMENT2_SCROLLTOP DISPID_ELEMENT+59
+#define DISPID_IHTMLELEMENT2_SCROLLLEFT DISPID_ELEMENT+60
+#define DISPID_IHTMLELEMENT2_CLEARATTRIBUTES DISPID_ELEMENT+62
+#define DISPID_IHTMLELEMENT2_MERGEATTRIBUTES DISPID_ELEMENT+63
+#define DISPID_IHTMLELEMENT2_ONCONTEXTMENU DISPID_EVPROP_ONCONTEXTMENU
+#define DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT DISPID_ELEMENT+69
+#define DISPID_IHTMLELEMENT2_APPLYELEMENT DISPID_ELEMENT+65
+#define DISPID_IHTMLELEMENT2_GETADJACENTTEXT DISPID_ELEMENT+70
+#define DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT DISPID_ELEMENT+71
+#define DISPID_IHTMLELEMENT2_CANHAVECHILDREN DISPID_ELEMENT+72
+#define DISPID_IHTMLELEMENT2_ADDBEHAVIOR DISPID_ELEMENT+80
+#define DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR DISPID_ELEMENT+81
+#define DISPID_IHTMLELEMENT2_RUNTIMESTYLE DISPID_ELEMENT+64
+#define DISPID_IHTMLELEMENT2_BEHAVIORURNS DISPID_ELEMENT+82
+#define DISPID_IHTMLELEMENT2_TAGURN DISPID_ELEMENT+83
+#define DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS DISPID_EVPROP_ONBEFOREEDITFOCUS
+#define DISPID_IHTMLELEMENT2_READYSTATEVALUE DISPID_ELEMENT+84
+#define DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME DISPID_ELEMENT+85
+
+/* IHTMLElement3 */
+#define DISPID_IHTMLELEMENT3_MERGEATTRIBUTES DISPID_ELEMENT+96
+#define DISPID_IHTMLELEMENT3_ISMULTILINE DISPID_ELEMENT+97
+#define DISPID_IHTMLELEMENT3_CANHAVEHTML DISPID_ELEMENT+98
+#define DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE DISPID_EVPROP_ONLAYOUTCOMPLETE
+#define DISPID_IHTMLELEMENT3_ONPAGE DISPID_EVPROP_ONPAGE
+#define DISPID_IHTMLELEMENT3_INFLATEBLOCK DISPID_ELEMENT+100
+#define DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE DISPID_EVPROP_ONBEFOREDEACTIVATE
+#define DISPID_IHTMLELEMENT3_SETACTIVE DISPID_ELEMENT+101
+#define DISPID_IHTMLELEMENT3_CONTENTEDITABLE DISPID_A_EDITABLE
+#define DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE DISPID_ELEMENT+102
+#define DISPID_IHTMLELEMENT3_HIDEFOCUS DISPID_A_HIDEFOCUS
+#define DISPID_IHTMLELEMENT3_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLELEMENT3_ISDISABLED DISPID_ELEMENT+105
+#define DISPID_IHTMLELEMENT3_ONMOVE DISPID_EVPROP_ONMOVE
+#define DISPID_IHTMLELEMENT3_ONCONTROLSELECT DISPID_EVPROP_ONCONTROLSELECT
+#define DISPID_IHTMLELEMENT3_FIREEVENT DISPID_ELEMENT+106
+#define DISPID_IHTMLELEMENT3_ONRESIZESTART DISPID_EVPROP_ONRESIZESTART
+#define DISPID_IHTMLELEMENT3_ONRESIZEEND DISPID_EVPROP_ONRESIZEEND
+#define DISPID_IHTMLELEMENT3_ONMOVESTART DISPID_EVPROP_ONMOVESTART
+#define DISPID_IHTMLELEMENT3_ONMOVEEND DISPID_EVPROP_ONMOVEEND
+#define DISPID_IHTMLELEMENT3_ONMOUSEENTER DISPID_EVPROP_ONMOUSEENTER
+#define DISPID_IHTMLELEMENT3_ONMOUSELEAVE DISPID_EVPROP_ONMOUSELEAVE
+#define DISPID_IHTMLELEMENT3_ONACTIVATE DISPID_EVPROP_ONACTIVATE
+#define DISPID_IHTMLELEMENT3_ONDEACTIVATE DISPID_EVPROP_ONDEACTIVATE
+#define DISPID_IHTMLELEMENT3_DRAGDROP DISPID_ELEMENT+107
+#define DISPID_IHTMLELEMENT3_GLYPHMODE DISPID_ELEMENT+108
+
+/* IHTMLElement4 */
+#define DISPID_IHTMLELEMENT4_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL
+#define DISPID_IHTMLELEMENT4_NORMALIZE DISPID_ELEMENT+112
+#define DISPID_IHTMLELEMENT4_GETATTRIBUTENODE DISPID_ELEMENT+109
+#define DISPID_IHTMLELEMENT4_SETATTRIBUTENODE DISPID_ELEMENT+110
+#define DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE DISPID_ELEMENT+111
+#define DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE DISPID_EVPROP_ONBEFOREACTIVATE
+#define DISPID_IHTMLELEMENT4_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN
+#define DISPID_IHTMLELEMENT4_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT
+
+/* IElementSelector */
+#define DISPID_IELEMENTSELECTOR_QUERYSELECTOR DISPID_ELEMENT+114
+#define DISPID_IELEMENTSELECTOR_QUERYSELECTORALL DISPID_ELEMENT+115
+
+/* IHTMLElement5 */
+#define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE DISPID_IE8_ELEMENT
+#define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE DISPID_IE8_ELEMENT+1
+#define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE DISPID_IE8_ELEMENT+2
+#define DISPID_IHTMLELEMENT5_HASATTRIBUTE DISPID_IE8_ELEMENT+3
+#define DISPID_IHTMLELEMENT5_ROLE DISPID_IE8_ELEMENT+4
+#define DISPID_IHTMLELEMENT5_ARIABUSY DISPID_IE8_ELEMENT+5
+#define DISPID_IHTMLELEMENT5_ARIACHECKED DISPID_IE8_ELEMENT+6
+#define DISPID_IHTMLELEMENT5_ARIADISABLED DISPID_IE8_ELEMENT+7
+#define DISPID_IHTMLELEMENT5_ARIAEXPANDED DISPID_IE8_ELEMENT+8
+#define DISPID_IHTMLELEMENT5_ARIAHASPOPUP DISPID_IE8_ELEMENT+9
+#define DISPID_IHTMLELEMENT5_ARIAHIDDEN DISPID_IE8_ELEMENT+10
+#define DISPID_IHTMLELEMENT5_ARIAINVALID DISPID_IE8_ELEMENT+11
+#define DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE DISPID_IE8_ELEMENT+12
+#define DISPID_IHTMLELEMENT5_ARIAPRESSED DISPID_IE8_ELEMENT+13
+#define DISPID_IHTMLELEMENT5_ARIAREADONLY DISPID_IE8_ELEMENT+14
+#define DISPID_IHTMLELEMENT5_ARIAREQUIRED DISPID_IE8_ELEMENT+15
+#define DISPID_IHTMLELEMENT5_ARIASECRET DISPID_IE8_ELEMENT+16
+#define DISPID_IHTMLELEMENT5_ARIASELECTED DISPID_IE8_ELEMENT+17
+#define DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE DISPID_IE8_ELEMENT+18
+#define DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE DISPID_IE8_ELEMENT+19
+#define DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE DISPID_IE8_ELEMENT+20
+#define DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES DISPID_IE8_ELEMENT+21
+#define DISPID_IHTMLELEMENT5_ARIAVALUENOW DISPID_IE8_ELEMENT+22
+#define DISPID_IHTMLELEMENT5_ARIAPOSINSET DISPID_IE8_ELEMENT+23
+#define DISPID_IHTMLELEMENT5_ARIASETSIZE DISPID_IE8_ELEMENT+24
+#define DISPID_IHTMLELEMENT5_ARIALEVEL DISPID_IE8_ELEMENT+25
+#define DISPID_IHTMLELEMENT5_ARIAVALUEMIN DISPID_IE8_ELEMENT+26
+#define DISPID_IHTMLELEMENT5_ARIAVALUEMAX DISPID_IE8_ELEMENT+27
+#define DISPID_IHTMLELEMENT5_ARIACONTROLS DISPID_IE8_ELEMENT+28
+#define DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY DISPID_IE8_ELEMENT+29
+#define DISPID_IHTMLELEMENT5_ARIAFLOWTO DISPID_IE8_ELEMENT+30
+#define DISPID_IHTMLELEMENT5_ARIALABELLEDBY DISPID_IE8_ELEMENT+31
+#define DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT DISPID_IE8_ELEMENT+32
+#define DISPID_IHTMLELEMENT5_ARIAOWNS DISPID_IE8_ELEMENT+33
+#define DISPID_IHTMLELEMENT5_HASATTRIBUTES DISPID_IE8_ELEMENT+34
+#define DISPID_IHTMLELEMENT5_ARIALIVE DISPID_IE8_ELEMENT+35
+#define DISPID_IHTMLELEMENT5_ARIARELEVANT DISPID_IE8_ELEMENT+36
+
+/* IHTMLGenericElement */
+#define DISPID_IHTMLGENERICELEMENT_RECORDSET DISPID_GENERIC+1
+#define DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET DISPID_GENERIC+2
+
+/* IHTMLUniqueName */
+#define DISPID_IHTMLUNIQUENAME_UNIQUENUMBER DISPID_ELEMENT+54
+#define DISPID_IHTMLUNIQUENAME_UNIQUEID DISPID_ELEMENT+55
+
+/* IHTMLDatabinding */
+#define DISPID_IHTMLDATABINDING_DATAFLD DISPID_ELEMENT+21
+#define DISPID_IHTMLDATABINDING_DATASRC DISPID_ELEMENT+22
+#define DISPID_IHTMLDATABINDING_DATAFORMATAS DISPID_ELEMENT+23
+
+/* IHTMLDOMConstructor */
+#define DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR DISPID_HTMLOBJECT+9
+#define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPGETTER
+#define DISPID_IHTMLDOMCONSTRUCTOR_LOOKUPSETTER
+#define DISPID_IHTMLDOMCONSTRUCTOR_DEFINEGETTER
+#define DISPID_IHTMLDOMCONSTRUCTOR_DEFINESETTER
+
+/* IHTMLStyle */
+#define DISPID_IHTMLSTYLE_PIXELTOP DISPID_STYLE
+#define DISPID_IHTMLSTYLE_PIXELLEFT (DISPID_STYLE+1)
+#define DISPID_IHTMLSTYLE_PIXELWIDTH (DISPID_STYLE+2)
+#define DISPID_IHTMLSTYLE_PIXELHEIGHT (DISPID_STYLE+3)
+#define DISPID_IHTMLSTYLE_POSTOP (DISPID_STYLE+4)
+#define DISPID_IHTMLSTYLE_POSLEFT (DISPID_STYLE+5)
+#define DISPID_IHTMLSTYLE_POSWIDTH (DISPID_STYLE+6)
+#define DISPID_IHTMLSTYLE_POSHEIGHT (DISPID_STYLE+7)
+#define DISPID_IHTMLSTYLE_TOSTRING (DISPID_STYLE+8)
+#define DISPID_IHTMLSTYLE_SETATTRIBUTE (DISPID_HTMLOBJECT+1)
+#define DISPID_IHTMLSTYLE_GETATTRIBUTE (DISPID_HTMLOBJECT+2)
+#define DISPID_IHTMLSTYLE_REMOVEATTRIBUTE (DISPID_HTMLOBJECT+3)
+#define DISPID_IHTMLSTYLE_FONTFAMILY DISPID_A_FONTFACE
+#define DISPID_IHTMLSTYLE_FONTSTYLE DISPID_A_FONTSTYLE
+#define DISPID_IHTMLSTYLE_FONTVARIANT DISPID_A_FONTVARIANT
+#define DISPID_IHTMLSTYLE_FONTWEIGHT DISPID_A_FONTWEIGHT
+#define DISPID_IHTMLSTYLE_FONTSIZE DISPID_A_FONTSIZE
+#define DISPID_IHTMLSTYLE_FONT DISPID_A_FONT
+#define DISPID_IHTMLSTYLE_COLOR DISPID_A_COLOR
+#define DISPID_IHTMLSTYLE_BACKGROUND DISPID_A_BACKGROUND
+#define DISPID_IHTMLSTYLE_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLSTYLE_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT
+#define DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITION DISPID_A_BACKGROUNDPOSITION
+#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX
+#define DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY
+#define DISPID_IHTMLSTYLE_WORDSPACING DISPID_A_WORDSPACING
+#define DISPID_IHTMLSTYLE_LETTERSPACING DISPID_A_LETTERSPACING
+#define DISPID_IHTMLSTYLE_TEXTDECORATION DISPID_A_TEXTDECORATION
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONNONE DISPID_A_TEXTDECORATIONNONE
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE DISPID_A_TEXTDECORATIONUNDERLINE
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE DISPID_A_TEXTDECORATIONOVERLINE
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH DISPID_A_TEXTDECORATIONLINETHROUGH
+#define DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK DISPID_A_TEXTDECORATIONBLINK
+#define DISPID_IHTMLSTYLE_VERTICALALIGN DISPID_A_VERTICALALIGN
+#define DISPID_IHTMLSTYLE_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM
+#define DISPID_IHTMLSTYLE_TEXTINDENT DISPID_A_TEXTINDENT
+#define DISPID_IHTMLSTYLE_LINEHEIGHT DISPID_A_LINEHEIGHT
+#define DISPID_IHTMLSTYLE_MARGINTOP DISPID_A_MARGINTOP
+#define DISPID_IHTMLSTYLE_MARGINRIGHT DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLSTYLE_MARGINBOTTOM DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLSTYLE_MARGINLEFT DISPID_A_MARGINLEFT
+#define DISPID_IHTMLSTYLE_MARGIN DISPID_A_MARGIN
+#define DISPID_IHTMLSTYLE_PADDINGTOP DISPID_A_PADDINGTOP
+#define DISPID_IHTMLSTYLE_PADDINGRIGHT DISPID_A_PADDINGRIGHT
+#define DISPID_IHTMLSTYLE_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM
+#define DISPID_IHTMLSTYLE_PADDINGLEFT DISPID_A_PADDINGLEFT
+#define DISPID_IHTMLSTYLE_PADDING DISPID_A_PADDING
+#define DISPID_IHTMLSTYLE_BORDER DISPID_A_BORDER
+#define DISPID_IHTMLSTYLE_BORDERTOP DISPID_A_BORDERTOP
+#define DISPID_IHTMLSTYLE_BORDERRIGHT DISPID_A_BORDERRIGHT
+#define DISPID_IHTMLSTYLE_BORDERBOTTOM DISPID_A_BORDERBOTTOM
+#define DISPID_IHTMLSTYLE_BORDERLEFT DISPID_A_BORDERLEFT
+#define DISPID_IHTMLSTYLE_BORDERCOLOR DISPID_A_BORDERCOLOR
+#define DISPID_IHTMLSTYLE_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR
+#define DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR
+#define DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR
+#define DISPID_IHTMLSTYLE_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR
+#define DISPID_IHTMLSTYLE_BORDERWIDTH DISPID_A_BORDERWIDTH
+#define DISPID_IHTMLSTYLE_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH
+#define DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH
+#define DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH
+#define DISPID_IHTMLSTYLE_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH
+#define DISPID_IHTMLSTYLE_BORDERSTYLE DISPID_A_BORDERSTYLE
+#define DISPID_IHTMLSTYLE_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE
+#define DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE
+#define DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE
+#define DISPID_IHTMLSTYLE_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE
+#define DISPID_IHTMLSTYLE_STYLEFLOAT DISPID_A_FLOAT
+#define DISPID_IHTMLSTYLE_CLEAR DISPID_A_CLEAR
+#define DISPID_IHTMLSTYLE_DISPLAY DISPID_A_DISPLAY
+#define DISPID_IHTMLSTYLE_VISIBILITY DISPID_A_VISIBILITY
+#define DISPID_IHTMLSTYLE_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE
+#define DISPID_IHTMLSTYLE_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION
+#define DISPID_IHTMLSTYLE_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE
+#define DISPID_IHTMLSTYLE_LISTSTYLE DISPID_A_LISTSTYLE
+#define DISPID_IHTMLSTYLE_WHITESPACE DISPID_A_WHITESPACE
+#define DISPID_IHTMLSTYLE_POSITION DISPID_A_POSITION
+#define DISPID_IHTMLSTYLE_ZINDEX DISPID_A_ZINDEX
+#define DISPID_IHTMLSTYLE_OVERFLOW DISPID_A_OVERFLOW
+#define DISPID_IHTMLSTYLE_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE
+#define DISPID_IHTMLSTYLE_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER
+#define DISPID_IHTMLSTYLE_CSSTEXT DISPID_A_STYLETEXT
+#define DISPID_IHTMLSTYLE_CURSOR DISPID_A_CURSOR
+#define DISPID_IHTMLSTYLE_CLIP DISPID_A_CLIP
+#define DISPID_IHTMLSTYLE_FILTER DISPID_A_FILTER
+#define DISPID_IHTMLSTYLE_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLSTYLE_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLSTYLE_TOP STDPROPID_XOBJ_TOP
+#define DISPID_IHTMLSTYLE_LEFT STDPROPID_XOBJ_LEFT
+#define DISPID_IHTMLSTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR
+
+/* IHTMLStyle2 */
+#define DISPID_IHTMLSTYLE2_TABLELAYOUT DISPID_A_TABLELAYOUT
+#define DISPID_IHTMLSTYLE2_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE
+#define DISPID_IHTMLSTYLE2_DIRECTION DISPID_A_DIRECTION
+#define DISPID_IHTMLSTYLE2_BEHAVIOR DISPID_A_BEHAVIOR
+#define DISPID_IHTMLSTYLE2_SETEXPRESSION DISPID_HTMLOBJECT+4
+#define DISPID_IHTMLSTYLE2_GETEXPRESSION DISPID_HTMLOBJECT+5
+#define DISPID_IHTMLSTYLE2_REMOVEEXPRESSION DISPID_HTMLOBJECT+6
+#define DISPID_IHTMLSTYLE2_POSITION DISPID_A_POSITION
+#define DISPID_IHTMLSTYLE2_UNICODEBIDI DISPID_A_UNICODEBIDI
+#define DISPID_IHTMLSTYLE2_BOTTOM STDPROPID_XOBJ_BOTTOM
+#define DISPID_IHTMLSTYLE2_RIGHT STDPROPID_XOBJ_RIGHT
+#define DISPID_IHTMLSTYLE2_PIXELBOTTOM DISPID_STYLE+9
+#define DISPID_IHTMLSTYLE2_PIXELRIGHT DISPID_STYLE+10
+#define DISPID_IHTMLSTYLE2_POSBOTTOM DISPID_STYLE+11
+#define DISPID_IHTMLSTYLE2_POSRIGHT DISPID_STYLE+12
+#define DISPID_IHTMLSTYLE2_IMEMODE DISPID_A_IMEMODE
+#define DISPID_IHTMLSTYLE2_RUBYALIGN DISPID_A_RUBYALIGN
+#define DISPID_IHTMLSTYLE2_RUBYPOSITION DISPID_A_RUBYPOSITION
+#define DISPID_IHTMLSTYLE2_RUBYOVERHANG DISPID_A_RUBYOVERHANG
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE
+#define DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE
+#define DISPID_IHTMLSTYLE2_LAYOUTGRID DISPID_A_LAYOUTGRID
+#define DISPID_IHTMLSTYLE2_WORDBREAK DISPID_A_WORDBREAK
+#define DISPID_IHTMLSTYLE2_LINEBREAK DISPID_A_LINEBREAK
+#define DISPID_IHTMLSTYLE2_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY
+#define DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM
+#define DISPID_IHTMLSTYLE2_TEXTKASHIDA DISPID_A_TEXTKASHIDA
+#define DISPID_IHTMLSTYLE2_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE
+#define DISPID_IHTMLSTYLE2_OVERFLOWX DISPID_A_OVERFLOWX
+#define DISPID_IHTMLSTYLE2_OVERFLOWY DISPID_A_OVERFLOWY
+#define DISPID_IHTMLSTYLE2_ACCELERATOR DISPID_A_ACCELERATOR
+
+/* IHTMLStyle3 */
+#define DISPID_IHTMLSTYLE3_LAYOUTFLOW DISPID_A_LAYOUTFLOW
+#define DISPID_IHTMLSTYLE3_ZOOM DISPID_A_ZOOM
+#define DISPID_IHTMLSTYLE3_WORDWRAP DISPID_A_WORDWRAP
+#define DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION
+#define DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR
+#define DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR
+#define DISPID_IHTMLSTYLE3_WRITINGMODE DISPID_A_WRITINGMODE
+#define DISPID_IHTMLSTYLE3_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST
+#define DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE
+
+/* IHTMLStyle4 */
+#define DISPID_IHTMLSTYLE4_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW
+#define DISPID_IHTMLSTYLE4_MINHEIGHT DISPID_A_MINHEIGHT
+
+/* IHTMLStyle5 */
+#define DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE DISPID_A_INTERPOLATION
+#define DISPID_IHTMLSTYLE5_MAXHEIGHT DISPID_A_MAXHEIGHT
+#define DISPID_IHTMLSTYLE5_MINWIDTH DISPID_A_MINWIDTH
+#define DISPID_IHTMLSTYLE5_MAXWIDTH DISPID_A_MAXWIDTH
+
+/* IHTMLStyle6 */
+#define DISPID_IHTMLSTYLE6_CONTENT DISPID_A_CONTENT
+#define DISPID_IHTMLSTYLE6_CAPTIONSIDE DISPID_A_CAPTIONSIDE
+#define DISPID_IHTMLSTYLE6_COUNTERINCREMENT DISPID_A_COUNTERINCREMENT
+#define DISPID_IHTMLSTYLE6_COUNTERRESET DISPID_A_COUNTERRESET
+#define DISPID_IHTMLSTYLE6_OUTLINE DISPID_A_OUTLINE
+#define DISPID_IHTMLSTYLE6_OUTLINEWIDTH DISPID_A_OUTLINEWIDTH
+#define DISPID_IHTMLSTYLE6_OUTLINESTYLE DISPID_A_OUTLINESTYLE
+#define DISPID_IHTMLSTYLE6_OUTLINECOLOR DISPID_A_OUTLINECOLOR
+#define DISPID_IHTMLSTYLE6_BOXSIZING DISPID_A_BOXSIZING
+#define DISPID_IHTMLSTYLE6_BORDERSPACING DISPID_A_BORDERSPACING
+#define DISPID_IHTMLSTYLE6_ORPHANS DISPID_A_ORPHANS
+#define DISPID_IHTMLSTYLE6_WIDOWS DISPID_A_WIDOWS
+#define DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE DISPID_A_PAGEBREAKINSIDE
+#define DISPID_IHTMLSTYLE6_EMPTYCELLS DISPID_A_EMPTYCELLS
+#define DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION DISPID_A_MS_BLOCKPROGRESSION
+#define DISPID_IHTMLSTYLE6_QUOTES DISPID_A_QUOTES
+
+/* IHTMLFiltersCollection */
+#define DISPID_IHTMLFILTERSCOLLECTION_LENGTH (DISPID_FILTERS+1)
+#define DISPID_IHTMLFILTERSCOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLFILTERSCOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLSelectionObject */
+#define DISPID_IHTMLSELECTIONOBJECT_CREATERANGE (DISPID_SELECTOBJ+1)
+#define DISPID_IHTMLSELECTIONOBJECT_EMPTY (DISPID_SELECTOBJ+2)
+#define DISPID_IHTMLSELECTIONOBJECT_CLEAR (DISPID_SELECTOBJ+3)
+#define DISPID_IHTMLSELECTIONOBJECT_TYPE (DISPID_SELECTOBJ+4)
+
+/* IHTMLFramesCollection2 */
+#define DISPID_IHTMLFRAMESCOLLECTION2_ITEM 0
+#define DISPID_IHTMLFRAMESCOLLECTION2_LENGTH 1001
+
+/* IHTMLLocation */
+#define DISPID_IHTMLLOCATION_HOST (DISPID_LOCATION+1)
+#define DISPID_IHTMLLOCATION_HOSTNAME (DISPID_LOCATION+2)
+#define DISPID_IHTMLLOCATION_PORT (DISPID_LOCATION+3)
+#define DISPID_IHTMLLOCATION_PATHNAME (DISPID_LOCATION+4)
+#define DISPID_IHTMLLOCATION_SEARCH (DISPID_LOCATION+5)
+#define DISPID_IHTMLLOCATION_HASH (DISPID_LOCATION+6)
+#define DISPID_IHTMLLOCATION_RELOAD (DISPID_LOCATION+7)
+#define DISPID_IHTMLLOCATION_REPLACE (DISPID_LOCATION+8)
+#define DISPID_IHTMLLOCATION_ASSIGN (DISPID_LOCATION+9)
+#define DISPID_IHTMLLOCATION_TOSTRING (DISPID_LOCATION+10)
+#define DISPID_IHTMLLOCATION_HREF DISPID_VALUE
+#define DISPID_IHTMLLOCATION_PROTOCOL DISPID_LOCATION
+
+/* IHTMLBookmarkCollection */
+#define DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH DISPID_OPTIONS_COL+1
+#define DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLBOOKMARKCOLLECTION_ITEM DISPID_VALUE
+
+/* HTMLWindowEvents */
+#define DISPID_HTMLWINDOWEVENTS_ONLOAD DISPID_EVMETH_ONLOAD
+#define DISPID_HTMLWINDOWEVENTS_ONUNLOAD DISPID_EVMETH_ONUNLOAD
+#define DISPID_HTMLWINDOWEVENTS_ONHELP DISPID_EVMETH_ONHELP
+#define DISPID_HTMLWINDOWEVENTS_ONFOCUS DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLWINDOWEVENTS_ONBLUR DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLWINDOWEVENTS_ONERROR DISPID_EVMETH_ONERROR
+#define DISPID_HTMLWINDOWEVENTS_ONRESIZE DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLWINDOWEVENTS_ONSCROLL DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD DISPID_EVMETH_ONBEFOREUNLOAD
+#define DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT DISPID_EVMETH_ONBEFOREPRINT
+#define DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT DISPID_EVMETH_ONAFTERPRINT
+
+/* HTMLWindowEvents2 */
+#define DISPID_HTMLWINDOWEVENTS2_ONLOAD DISPID_EVMETH_ONLOAD
+#define DISPID_HTMLWINDOWEVENTS2_ONUNLOAD DISPID_EVMETH_ONUNLOAD
+#define DISPID_HTMLWINDOWEVENTS2_ONHELP DISPID_EVMETH_ONHELP
+#define DISPID_HTMLWINDOWEVENTS2_ONFOCUS DISPID_EVMETH_ONFOCUS
+#define DISPID_HTMLWINDOWEVENTS2_ONBLUR DISPID_EVMETH_ONBLUR
+#define DISPID_HTMLWINDOWEVENTS2_ONERROR DISPID_EVMETH_ONERROR
+#define DISPID_HTMLWINDOWEVENTS2_ONRESIZE DISPID_EVMETH_ONRESIZE
+#define DISPID_HTMLWINDOWEVENTS2_ONSCROLL DISPID_EVMETH_ONSCROLL
+#define DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD DISPID_EVMETH_ONBEFOREUNLOAD
+#define DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT DISPID_EVMETH_ONBEFOREPRINT
+#define DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT DISPID_EVMETH_ONAFTERPRINT
+
+/* IHTMLWindow2 */
+#define DISPID_IHTMLWINDOW2_HISTORY 2
+#define DISPID_IHTMLWINDOW2_CLOSE 3
+#define DISPID_IHTMLWINDOW2_OPENER 4
+#define DISPID_IHTMLWINDOW2_NAVIGATOR 5
+#define DISPID_IHTMLWINDOW2_MOVETO 6
+#define DISPID_IHTMLWINDOW2_MOVEBY 7
+#define DISPID_IHTMLWINDOW2_RESIZETO 9
+#define DISPID_IHTMLWINDOW2_RESIZEBY 8
+#define DISPID_IHTMLWINDOW2_NAME 11
+#define DISPID_IHTMLWINDOW2_PARENT 12
+#define DISPID_IHTMLWINDOW2_OPEN 13
+#define DISPID_IHTMLWINDOW2_LOCATION 14
+#define DISPID_IHTMLWINDOW2_SELF 20
+#define DISPID_IHTMLWINDOW2_TOP 21
+#define DISPID_IHTMLWINDOW2_WINDOW 22
+#define DISPID_IHTMLWINDOW2_CLOSED 23
+#define DISPID_IHTMLWINDOW2_NAVIGATE 25
+#define DISPID_IHTMLWINDOW2_FRAMES 1100
+#define DISPID_IHTMLWINDOW2_DEFAULTSTATUS 1101
+#define DISPID_IHTMLWINDOW2_STATUS 1102
+#define DISPID_IHTMLWINDOW2_SETTIMEOUT 1172
+#define DISPID_IHTMLWINDOW2_CLEARTIMEOUT 1104
+#define DISPID_IHTMLWINDOW2_ALERT 1105
+#define DISPID_IHTMLWINDOW2_CONFIRM 1110
+#define DISPID_IHTMLWINDOW2_PROMPT 1111
+#define DISPID_IHTMLWINDOW2_IMAGE 1125
+#define DISPID_IHTMLWINDOW2_DOCUMENT 1151
+#define DISPID_IHTMLWINDOW2_EVENT 1152
+#define DISPID_IHTMLWINDOW2__NEWENUM 1153
+#define DISPID_IHTMLWINDOW2_SHOWMODALDIALOG 1154
+#define DISPID_IHTMLWINDOW2_SHOWHELP 1155
+#define DISPID_IHTMLWINDOW2_SCREEN 1156
+#define DISPID_IHTMLWINDOW2_OPTION 1157
+#define DISPID_IHTMLWINDOW2_FOCUS 1158
+#define DISPID_IHTMLWINDOW2_BLUR 1159
+#define DISPID_IHTMLWINDOW2_SCROLL 1160
+#define DISPID_IHTMLWINDOW2_CLIENTINFORMATION 1161
+#define DISPID_IHTMLWINDOW2_SETINTERVAL 1173
+#define DISPID_IHTMLWINDOW2_CLEARINTERVAL 1163
+#define DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING 1164
+#define DISPID_IHTMLWINDOW2_EXECSCRIPT 1165
+#define DISPID_IHTMLWINDOW2_TOSTRING 1166
+#define DISPID_IHTMLWINDOW2_SCROLLBY 1167
+#define DISPID_IHTMLWINDOW2_SCROLLTO 1168
+#define DISPID_IHTMLWINDOW2_EXTERNAL 1169
+#define DISPID_IHTMLWINDOW2_ONFOCUS DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLWINDOW2_ONBLUR DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLWINDOW2_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD DISPID_EVPROP_ONBEFOREUNLOAD
+#define DISPID_IHTMLWINDOW2_ONUNLOAD DISPID_EVPROP_ONUNLOAD
+#define DISPID_IHTMLWINDOW2_ONHELP DISPID_EVPROP_ONHELP
+#define DISPID_IHTMLWINDOW2_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLWINDOW2_ONRESIZE DISPID_EVPROP_ONRESIZE
+#define DISPID_IHTMLWINDOW2_ONSCROLL DISPID_EVPROP_ONSCROLL
+
+/* IHTMLWindow3 */
+#define DISPID_IHTMLWINDOW3_SCREENLEFT 1170
+#define DISPID_IHTMLWINDOW3_SCREENTOP 1171
+#define DISPID_IHTMLWINDOW3_ATTACHEVENT DISPID_HTMLOBJECT+7
+#define DISPID_IHTMLWINDOW3_DETACHEVENT DISPID_HTMLOBJECT+8
+#define DISPID_IHTMLWINDOW3_SETTIMEOUT 1103
+#define DISPID_IHTMLWINDOW3_SETINTERVAL 1162
+#define DISPID_IHTMLWINDOW3_PRINT 1174
+#define DISPID_IHTMLWINDOW3_ONBEFOREPRINT DISPID_EVPROP_ONBEFOREPRINT
+#define DISPID_IHTMLWINDOW3_ONAFTERPRINT DISPID_EVPROP_ONAFTERPRINT
+#define DISPID_IHTMLWINDOW3_CLIPBOARDDATA 1175
+#define DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG 1176
+
+/* IHTMLWindow4 */
+#define DISPID_IHTMLWINDOW4_CREATEPOPUP 1180
+#define DISPID_IHTMLWINDOW4_FRAMEELEMENT 1181
+
+/* IHTMLWindow5 */
+#define DISPID_IHTMLWINDOW5_XMLHTTPREQUEST 1190
+
+/* IHTMLWindow6 */
+#define DISPID_IHTMLWINDOW6_XDOMAINREQUEST 1191
+#define DISPID_IHTMLWINDOW6_SESSIONSTORAGE 1192
+#define DISPID_IHTMLWINDOW6_LOCALSTORAGE 1193
+#define DISPID_IHTMLWINDOW6_ONHASHCHANGE DISPID_EVPROP_ONHASHCHANGE
+#define DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER 1194
+#define DISPID_IHTMLWINDOW6_POSTMESSAGE 1196
+#define DISPID_IHTMLWINDOW6_TOSTATICHTML 1197
+#define DISPID_IHTMLWINDOW6_ONMESSAGE DISPID_EVPROP_ONMESSAGE
+#define DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK 1198
+
+/* IHTMLImageElementFactory */
+#define DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE DISPID_VALUE
+
+/* IHTMLImgElement */
+#define DISPID_IHTMLIMGELEMENT_BORDER (DISPID_IMGBASE+4)
+#define DISPID_IHTMLIMGELEMENT_VSPACE (DISPID_IMGBASE+5)
+#define DISPID_IHTMLIMGELEMENT_HSPACE (DISPID_IMGBASE+6)
+#define DISPID_IHTMLIMGELEMENT_ALT (DISPID_IMGBASE+2)
+#define DISPID_IHTMLIMGELEMENT_SRC (DISPID_IMGBASE+3)
+#define DISPID_IHTMLIMGELEMENT_LOWSRC (DISPID_IMGBASE+7)
+#define DISPID_IHTMLIMGELEMENT_VRML (DISPID_IMGBASE+8)
+#define DISPID_IHTMLIMGELEMENT_DYNSRC (DISPID_IMGBASE+9)
+#define DISPID_IHTMLIMGELEMENT_READYSTATE (DISPID_IMGBASE+12)
+#define DISPID_IHTMLIMGELEMENT_COMPLETE (DISPID_IMGBASE+10)
+#define DISPID_IHTMLIMGELEMENT_LOOP (DISPID_IMGBASE+11)
+#define DISPID_IHTMLIMGELEMENT_ISMAP (DISPID_IMG+2)
+#define DISPID_IHTMLIMGELEMENT_USEMAP (DISPID_IMG+8)
+#define DISPID_IHTMLIMGELEMENT_MIMETYPE (DISPID_IMG+10)
+#define DISPID_IHTMLIMGELEMENT_FILESIZE (DISPID_IMG+11)
+#define DISPID_IHTMLIMGELEMENT_FILECREATEDDATE (DISPID_IMG+12)
+#define DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE (DISPID_IMG+13)
+#define DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE (DISPID_IMG+14)
+#define DISPID_IHTMLIMGELEMENT_PROTOCOL (DISPID_IMG+15)
+#define DISPID_IHTMLIMGELEMENT_HREF (DISPID_IMG+16)
+#define DISPID_IHTMLIMGELEMENT_NAMEPROP (DISPID_IMG+17)
+#define DISPID_IHTMLIMGELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLIMGELEMENT_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLIMGELEMENT_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLIMGELEMENT_ONABORT DISPID_EVPROP_ONABORT
+#define DISPID_IHTMLIMGELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLIMGELEMENT_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLIMGELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLIMGELEMENT_START DISPID_IMGBASE+13
+
+/* IHTMLImgElement2 */
+#define DISPID_IHTMLIMGELEMENT2_LONGDESC DISPID_IMG+19
+
+/* IHTMLXMLHttpRequest */
+#define DISPID_IHTMLXMLHTTPREQUEST_READYSTATE DISPID_XMLHTTPREQUEST+2
+#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY DISPID_XMLHTTPREQUEST+3
+#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT DISPID_XMLHTTPREQUEST+4
+#define DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML DISPID_XMLHTTPREQUEST+5
+#define DISPID_IHTMLXMLHTTPREQUEST_STATUS DISPID_XMLHTTPREQUEST+6
+#define DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT DISPID_XMLHTTPREQUEST+7
+#define DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLXMLHTTPREQUEST_ABORT DISPID_XMLHTTPREQUEST+9
+#define DISPID_IHTMLXMLHTTPREQUEST_OPEN DISPID_XMLHTTPREQUEST+10
+#define DISPID_IHTMLXMLHTTPREQUEST_SEND DISPID_XMLHTTPREQUEST+11
+#define DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS DISPID_XMLHTTPREQUEST+12
+#define DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER DISPID_XMLHTTPREQUEST+13
+#define DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER DISPID_XMLHTTPREQUEST+14
+
+/* IHTMLXMLHttpRequest2 */
+#define DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT DISPID_XMLHTTPREQUEST+15
+#define DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT DISPID_EVPROP_TIMEOUT
+
+/* IHTMLXMLHttpRequestFactory */
+#define DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE DISPID_VALUE
+
+/* HTMLXMLHttpRequestEvents */
+#define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONTIMEOUT DISPID_XMLHTTPREQUEST+16
+#define DISPID_HTMLXMLHTTPREQUESTEVENTS_ONREADYSTATECHANGE DISPID_XMLHTTPREQUEST+8
+
+/* IOmHistory */
+#define DISPID_IOMHISTORY_LENGTH DISPID_HISTORY
+#define DISPID_IOMHISTORY_BACK (DISPID_HISTORY+1)
+#define DISPID_IOMHISTORY_FORWARD (DISPID_HISTORY+2)
+#define DISPID_IOMHISTORY_GO (DISPID_HISTORY+3)
+
+/* IOmNavigator */
+#define DISPID_IOMNAVIGATOR_APPCODENAME DISPID_NAVIGATOR
+#define DISPID_IOMNAVIGATOR_APPNAME (DISPID_NAVIGATOR+1)
+#define DISPID_IOMNAVIGATOR_APPVERSION (DISPID_NAVIGATOR+2)
+#define DISPID_IOMNAVIGATOR_USERAGENT (DISPID_NAVIGATOR+3)
+#define DISPID_IOMNAVIGATOR_JAVAENABLED (DISPID_NAVIGATOR+4)
+#define DISPID_IOMNAVIGATOR_TAINTENABLED (DISPID_NAVIGATOR+5)
+#define DISPID_IOMNAVIGATOR_MIMETYPES (DISPID_NAVIGATOR+6)
+#define DISPID_IOMNAVIGATOR_PLUGINS (DISPID_NAVIGATOR+7)
+#define DISPID_IOMNAVIGATOR_COOKIEENABLED (DISPID_NAVIGATOR+8)
+#define DISPID_IOMNAVIGATOR_OPSPROFILE (DISPID_NAVIGATOR+9)
+#define DISPID_IOMNAVIGATOR_TOSTRING (DISPID_NAVIGATOR+10)
+#define DISPID_IOMNAVIGATOR_CPUCLASS (DISPID_NAVIGATOR+11)
+#define DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE (DISPID_NAVIGATOR+12)
+#define DISPID_IOMNAVIGATOR_BROWSERLANGUAGE (DISPID_NAVIGATOR+13)
+#define DISPID_IOMNAVIGATOR_USERLANGUAGE (DISPID_NAVIGATOR+14)
+#define DISPID_IOMNAVIGATOR_PLATFORM (DISPID_NAVIGATOR+15)
+#define DISPID_IOMNAVIGATOR_APPMINORVERSION (DISPID_NAVIGATOR+16)
+#define DISPID_IOMNAVIGATOR_CONNECTIONSPEED (DISPID_NAVIGATOR+17)
+#define DISPID_IOMNAVIGATOR_ONLINE (DISPID_NAVIGATOR+18)
+#define DISPID_IOMNAVIGATOR_USERPROFILE (DISPID_NAVIGATOR+19)
+
+/* IHTMLMimeTypesCollection */
+#define DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH 1
+
+/* IHTMLPluginsCollection */
+#define DISPID_IHTMLPLUGINSCOLLECTION_LENGTH 1
+#define DISPID_IHTMLPLUGINSCOLLECTION_REFRESH 2
+
+/* IHTMLOpsProfile */
+#define DISPID_IHTMLOPSPROFILE_ADDREQUEST 1
+#define DISPID_IHTMLOPSPROFILE_CLEARREQUEST 2
+#define DISPID_IHTMLOPSPROFILE_DOREQUEST 3
+#define DISPID_IHTMLOPSPROFILE_GETATTRIBUTE 4
+#define DISPID_IHTMLOPSPROFILE_SETATTRIBUTE 5
+#define DISPID_IHTMLOPSPROFILE_COMMITCHANGES 6
+#define DISPID_IHTMLOPSPROFILE_ADDREADREQUEST 7
+#define DISPID_IHTMLOPSPROFILE_DOREADREQUEST 8
+#define DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST 9
+
+/* IHTMLDataTransfer */
+#define DISPID_IHTMLDATATRANSFER_SETDATA DISPID_DATATRANSFER+1
+#define DISPID_IHTMLDATATRANSFER_GETDATA DISPID_DATATRANSFER+2
+#define DISPID_IHTMLDATATRANSFER_CLEARDATA DISPID_DATATRANSFER+3
+#define DISPID_IHTMLDATATRANSFER_DROPEFFECT DISPID_DATATRANSFER+4
+#define DISPID_IHTMLDATATRANSFER_EFFECTALLOWED DISPID_DATATRANSFER+5
+
+/* IHTMLEventObj */
+#define DISPID_IHTMLEVENTOBJ_SRCELEMENT (DISPID_EVENTOBJ+1)
+#define DISPID_IHTMLEVENTOBJ_ALTKEY (DISPID_EVENTOBJ+2)
+#define DISPID_IHTMLEVENTOBJ_CTRLKEY (DISPID_EVENTOBJ+3)
+#define DISPID_IHTMLEVENTOBJ_SHIFTKEY (DISPID_EVENTOBJ+4)
+#define DISPID_IHTMLEVENTOBJ_X (DISPID_EVENTOBJ+5)
+#define DISPID_IHTMLEVENTOBJ_Y (DISPID_EVENTOBJ+6)
+#define DISPID_IHTMLEVENTOBJ_RETURNVALUE (DISPID_EVENTOBJ+7)
+#define DISPID_IHTMLEVENTOBJ_CANCELBUBBLE (DISPID_EVENTOBJ+8)
+#define DISPID_IHTMLEVENTOBJ_FROMELEMENT (DISPID_EVENTOBJ+9)
+#define DISPID_IHTMLEVENTOBJ_TOELEMENT (DISPID_EVENTOBJ+10)
+#define DISPID_IHTMLEVENTOBJ_KEYCODE (DISPID_EVENTOBJ+11)
+#define DISPID_IHTMLEVENTOBJ_BUTTON (DISPID_EVENTOBJ+12)
+#define DISPID_IHTMLEVENTOBJ_TYPE (DISPID_EVENTOBJ+13)
+#define DISPID_IHTMLEVENTOBJ_QUALIFIER (DISPID_EVENTOBJ+14)
+#define DISPID_IHTMLEVENTOBJ_REASON (DISPID_EVENTOBJ+15)
+#define DISPID_IHTMLEVENTOBJ_CLIENTX (DISPID_EVENTOBJ+20)
+#define DISPID_IHTMLEVENTOBJ_CLIENTY (DISPID_EVENTOBJ+21)
+#define DISPID_IHTMLEVENTOBJ_OFFSETX (DISPID_EVENTOBJ+22)
+#define DISPID_IHTMLEVENTOBJ_OFFSETY (DISPID_EVENTOBJ+23)
+#define DISPID_IHTMLEVENTOBJ_SCREENX (DISPID_EVENTOBJ+24)
+#define DISPID_IHTMLEVENTOBJ_SCREENY (DISPID_EVENTOBJ+25)
+#define DISPID_IHTMLEVENTOBJ_SRCFILTER (DISPID_EVENTOBJ+26)
+
+/* IHTMLEventObj2 */
+#define DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE DISPID_HTMLOBJECT+1
+#define DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE DISPID_HTMLOBJECT+2
+#define DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE DISPID_HTMLOBJECT+3
+#define DISPID_IHTMLEVENTOBJ2_PROPERTYNAME DISPID_EVENTOBJ+27
+#define DISPID_IHTMLEVENTOBJ2_BOOKMARKS DISPID_EVENTOBJ+31
+#define DISPID_IHTMLEVENTOBJ2_RECORDSET DISPID_EVENTOBJ+32
+#define DISPID_IHTMLEVENTOBJ2_DATAFLD DISPID_EVENTOBJ+33
+#define DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS DISPID_EVENTOBJ+34
+#define DISPID_IHTMLEVENTOBJ2_REPEAT DISPID_EVENTOBJ+35
+#define DISPID_IHTMLEVENTOBJ2_SRCURN DISPID_EVENTOBJ+36
+#define DISPID_IHTMLEVENTOBJ2_SRCELEMENT DISPID_EVENTOBJ+1
+#define DISPID_IHTMLEVENTOBJ2_ALTKEY DISPID_EVENTOBJ+2
+#define DISPID_IHTMLEVENTOBJ2_CTRLKEY DISPID_EVENTOBJ+3
+#define DISPID_IHTMLEVENTOBJ2_SHIFTKEY DISPID_EVENTOBJ+4
+#define DISPID_IHTMLEVENTOBJ2_FROMELEMENT DISPID_EVENTOBJ+9
+#define DISPID_IHTMLEVENTOBJ2_TOELEMENT DISPID_EVENTOBJ+10
+#define DISPID_IHTMLEVENTOBJ2_BUTTON DISPID_EVENTOBJ+12
+#define DISPID_IHTMLEVENTOBJ2_TYPE DISPID_EVENTOBJ+13
+#define DISPID_IHTMLEVENTOBJ2_QUALIFIER DISPID_EVENTOBJ+14
+#define DISPID_IHTMLEVENTOBJ2_REASON DISPID_EVENTOBJ+15
+#define DISPID_IHTMLEVENTOBJ2_X DISPID_EVENTOBJ+5
+#define DISPID_IHTMLEVENTOBJ2_Y DISPID_EVENTOBJ+6
+#define DISPID_IHTMLEVENTOBJ2_CLIENTX DISPID_EVENTOBJ+20
+#define DISPID_IHTMLEVENTOBJ2_CLIENTY DISPID_EVENTOBJ+21
+#define DISPID_IHTMLEVENTOBJ2_OFFSETX DISPID_EVENTOBJ+22
+#define DISPID_IHTMLEVENTOBJ2_OFFSETY DISPID_EVENTOBJ+23
+#define DISPID_IHTMLEVENTOBJ2_SCREENX DISPID_EVENTOBJ+24
+#define DISPID_IHTMLEVENTOBJ2_SCREENY DISPID_EVENTOBJ+25
+#define DISPID_IHTMLEVENTOBJ2_SRCFILTER DISPID_EVENTOBJ+26
+#define DISPID_IHTMLEVENTOBJ2_DATATRANSFER DISPID_EVENTOBJ+37
+
+/* IHTMLEventObj3 */
+#define DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW DISPID_EVENTOBJ+38
+#define DISPID_IHTMLEVENTOBJ3_SHIFTLEFT DISPID_EVENTOBJ+39
+#define DISPID_IHTMLEVENTOBJ3_ALTLEFT DISPID_EVENTOBJ+40
+#define DISPID_IHTMLEVENTOBJ3_CTRLLEFT DISPID_EVENTOBJ+41
+#define DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE DISPID_EVENTOBJ+42
+#define DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND DISPID_EVENTOBJ+43
+#define DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA DISPID_EVENTOBJ+44
+#define DISPID_IHTMLEVENTOBJ3_IMEREQUEST DISPID_EVENTOBJ+46
+#define DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA DISPID_EVENTOBJ+47
+#define DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT DISPID_EVENTOBJ+45
+#define DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE DISPID_EVENTOBJ+48
+#define DISPID_IHTMLEVENTOBJ3_BEHAVIORPART DISPID_EVENTOBJ+49
+#define DISPID_IHTMLEVENTOBJ3_NEXTPAGE DISPID_EVENTOBJ+50
+
+/* IHTMLEventObj4 */
+#define DISPID_IHTMLEVENTOBJ4_WHEELDELTA DISPID_EVENTOBJ+51
+
+/* IHTMLScreen */
+#define DISPID_IHTMLSCREEN_COLORDEPTH (DISPID_SCREEN+1)
+#define DISPID_IHTMLSCREEN_BUFFERDEPTH (DISPID_SCREEN+2)
+#define DISPID_IHTMLSCREEN_WIDTH (DISPID_SCREEN+3)
+#define DISPID_IHTMLSCREEN_HEIGHT (DISPID_SCREEN+4)
+#define DISPID_IHTMLSCREEN_UPDATEINTERVAL (DISPID_SCREEN+5)
+#define DISPID_IHTMLSCREEN_AVAILHEIGHT (DISPID_SCREEN+6)
+#define DISPID_IHTMLSCREEN_AVAILWIDTH (DISPID_SCREEN+7)
+#define DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED (DISPID_SCREEN+8)
+
+/* IHTMLScreen2 */
+#define DISPID_IHTMLSCREEN2_LOGICALXDPI DISPID_SCREEN+9
+#define DISPID_IHTMLSCREEN2_LOGICALYDPI DISPID_SCREEN+10
+#define DISPID_IHTMLSCREEN2_DEVICEXDPI DISPID_SCREEN+11
+#define DISPID_IHTMLSCREEN2_DEVICEYDPI DISPID_SCREEN+12
+
+/* IHTMLScreen3 */
+#define DISPID_IHTMLSCREEN3_SYSTEMXDPI DISPID_SCREEN+13
+#define DISPID_IHTMLSCREEN3_SYSTEMYDPI DISPID_SCREEN+14
+
+/* IHTMLOptionElementFactory */
+#define DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE DISPID_VALUE
+
+/* IHTMLOptionElement */
+#define DISPID_IHTMLOPTIONELEMENT_SELECTED (DISPID_OPTION+1)
+#define DISPID_IHTMLOPTIONELEMENT_VALUE (DISPID_OPTION+2)
+#define DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED (DISPID_OPTION+3)
+#define DISPID_IHTMLOPTIONELEMENT_INDEX (DISPID_OPTION+5)
+#define DISPID_IHTMLOPTIONELEMENT_TEXT (DISPID_OPTION+4)
+#define DISPID_IHTMLOPTIONELEMENT_FORM (DISPID_OPTION+6)
+
+/* IHTMLOptionElement3 */
+#define DISPID_IHTMLOPTIONELEMENT3_LABEL DISPID_OPTION+7
+
+/* IHTMLFormElement */
+#define DISPID_IHTMLFORMELEMENT_ACTION (DISPID_FORM+1)
+#define DISPID_IHTMLFORMELEMENT_DIR (DISPID_FORM+2)
+#define DISPID_IHTMLFORMELEMENT_ENCODING (DISPID_FORM+3)
+#define DISPID_IHTMLFORMELEMENT_METHOD (DISPID_FORM+4)
+#define DISPID_IHTMLFORMELEMENT_ELEMENTS (DISPID_FORM+5)
+#define DISPID_IHTMLFORMELEMENT_TARGET (DISPID_FORM+6)
+#define DISPID_IHTMLFORMELEMENT_SUBMIT (DISPID_FORM+9)
+#define DISPID_IHTMLFORMELEMENT_RESET (DISPID_FORM+10)
+#define DISPID_IHTMLFORMELEMENT_TAGS (DISPID_COLLECTION+2)
+#define DISPID_IHTMLFORMELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLFORMELEMENT_ONSUBMIT DISPID_EVPROP_ONSUBMIT
+#define DISPID_IHTMLFORMELEMENT_ONRESET DISPID_EVPROP_ONRESET
+#define DISPID_IHTMLFORMELEMENT_LENGTH DISPID_COLLECTION
+#define DISPID_IHTMLFORMELEMENT__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLFORMELEMENT_ITEM DISPID_VALUE
+
+/* HTMLFormElementEvents */
+#define DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT DISPID_EVMETH_ONSUBMIT
+#define DISPID_HTMLFORMELEMENTEVENTS_ONRESET DISPID_EVMETH_ONRESET
+
+/* HTMLFormElementEvents2 */
+#define DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT DISPID_EVMETH_ONSUBMIT
+#define DISPID_HTMLFORMELEMENTEVENTS2_ONRESET DISPID_EVMETH_ONRESET
+
+/* IHTMLStyleSheetsCollection */
+#define DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH (DISPID_STYLESHEETS_COL+1)
+#define DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLStyleSheet */
+#define DISPID_IHTMLSTYLESHEET_TITLE (DISPID_STYLESHEET+1)
+#define DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET (DISPID_STYLESHEET+2)
+#define DISPID_IHTMLSTYLESHEET_OWNINGELEMENT (DISPID_STYLESHEET+3)
+#define DISPID_IHTMLSTYLESHEET_READONLY (DISPID_STYLESHEET+4)
+#define DISPID_IHTMLSTYLESHEET_IMPORTS (DISPID_STYLESHEET+5)
+#define DISPID_IHTMLSTYLESHEET_HREF (DISPID_STYLESHEET+6)
+#define DISPID_IHTMLSTYLESHEET_TYPE (DISPID_STYLESHEET+7)
+#define DISPID_IHTMLSTYLESHEET_ID (DISPID_STYLESHEET+8)
+#define DISPID_IHTMLSTYLESHEET_ADDIMPORT (DISPID_STYLESHEET+9)
+#define DISPID_IHTMLSTYLESHEET_ADDRULE (DISPID_STYLESHEET+10)
+#define DISPID_IHTMLSTYLESHEET_REMOVEIMPORT (DISPID_STYLESHEET+11)
+#define DISPID_IHTMLSTYLESHEET_REMOVERULE (DISPID_STYLESHEET+12)
+#define DISPID_IHTMLSTYLESHEET_MEDIA (DISPID_STYLESHEET+13)
+#define DISPID_IHTMLSTYLESHEET_CSSTEXT (DISPID_STYLESHEET+14)
+#define DISPID_IHTMLSTYLESHEET_RULES (DISPID_STYLESHEET+15)
+#define DISPID_IHTMLSTYLESHEET_DISABLED STDPROPID_XOBJ_DISABLED
+
+/* IHTMLStyleSheet2 */
+#define DISPID_IHTMLSTYLESHEET2_PAGES (DISPID_STYLESHEET+16)
+#define DISPID_IHTMLSTYLESHEET2_ADDPAGERULE (DISPID_STYLESHEET+17)
+
+/* IHTMLStyleSheetRulesCollection */
+#define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH (DISPID_STYLERULES_COL+1)
+#define DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLStyleSheetPage */
+#define DISPID_IHTMLSTYLESHEETPAGE_SELECTOR (DISPID_STYLEPAGE+1)
+#define DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS (DISPID_STYLEPAGE+2)
+
+/* IHTMLStyleSheetPagesCollection */
+#define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH (DISPID_STYLEPAGES_COL+1)
+#define DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLStyleSheetRule */
+#define DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT (DISPID_STYLERULE+1)
+#define DISPID_IHTMLSTYLESHEETRULE_READONLY (DISPID_STYLERULE+2)
+#define DISPID_IHTMLSTYLESHEETRULE_STYLE STDPROPID_XOBJ_STYLE
+
+/* IHTMLRuleStyle */
+#define DISPID_IHTMLRULESTYLE_SETATTRIBUTE (DISPID_HTMLOBJECT+1)
+#define DISPID_IHTMLRULESTYLE_GETATTRIBUTE (DISPID_HTMLOBJECT+2)
+#define DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE (DISPID_HTMLOBJECT+3)
+#define DISPID_IHTMLRULESTYLE_FONTFAMILY DISPID_A_FONTFACE
+#define DISPID_IHTMLRULESTYLE_FONTSTYLE DISPID_A_FONTSTYLE
+#define DISPID_IHTMLRULESTYLE_FONTVARIANT DISPID_A_FONTVARIANT
+#define DISPID_IHTMLRULESTYLE_FONTWEIGHT DISPID_A_FONTWEIGHT
+#define DISPID_IHTMLRULESTYLE_FONTSIZE DISPID_A_FONTSIZE
+#define DISPID_IHTMLRULESTYLE_FONT DISPID_A_FONT
+#define DISPID_IHTMLRULESTYLE_COLOR DISPID_A_COLOR
+#define DISPID_IHTMLRULESTYLE_BACKGROUND DISPID_A_BACKGROUND
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION DISPID_A_BACKGROUNDPOSITION
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY
+#define DISPID_IHTMLRULESTYLE_WORDSPACING DISPID_A_WORDSPACING
+#define DISPID_IHTMLRULESTYLE_LETTERSPACING DISPID_A_LETTERSPACING
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATION DISPID_A_TEXTDECORATION
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE DISPID_A_TEXTDECORATIONNONE
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE DISPID_A_TEXTDECORATIONUNDERLINE
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE DISPID_A_TEXTDECORATIONOVERLINE
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH DISPID_A_TEXTDECORATIONLINETHROUGH
+#define DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK DISPID_A_TEXTDECORATIONBLINK
+#define DISPID_IHTMLRULESTYLE_VERTICALALIGN DISPID_A_VERTICALALIGN
+#define DISPID_IHTMLRULESTYLE_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM
+#define DISPID_IHTMLRULESTYLE_TEXTINDENT DISPID_A_TEXTINDENT
+#define DISPID_IHTMLRULESTYLE_LINEHEIGHT DISPID_A_LINEHEIGHT
+#define DISPID_IHTMLRULESTYLE_MARGINTOP DISPID_A_MARGINTOP
+#define DISPID_IHTMLRULESTYLE_MARGINRIGHT DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLRULESTYLE_MARGINBOTTOM DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLRULESTYLE_MARGINLEFT DISPID_A_MARGINLEFT
+#define DISPID_IHTMLRULESTYLE_MARGIN DISPID_A_MARGIN
+#define DISPID_IHTMLRULESTYLE_PADDINGTOP DISPID_A_PADDINGTOP
+#define DISPID_IHTMLRULESTYLE_PADDINGRIGHT DISPID_A_PADDINGRIGHT
+#define DISPID_IHTMLRULESTYLE_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM
+#define DISPID_IHTMLRULESTYLE_PADDINGLEFT DISPID_A_PADDINGLEFT
+#define DISPID_IHTMLRULESTYLE_PADDING DISPID_A_PADDING
+#define DISPID_IHTMLRULESTYLE_BORDER DISPID_A_BORDER
+#define DISPID_IHTMLRULESTYLE_BORDERTOP DISPID_A_BORDERTOP
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHT DISPID_A_BORDERRIGHT
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOM DISPID_A_BORDERBOTTOM
+#define DISPID_IHTMLRULESTYLE_BORDERLEFT DISPID_A_BORDERLEFT
+#define DISPID_IHTMLRULESTYLE_BORDERCOLOR DISPID_A_BORDERCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR
+#define DISPID_IHTMLRULESTYLE_BORDERWIDTH DISPID_A_BORDERWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH
+#define DISPID_IHTMLRULESTYLE_BORDERSTYLE DISPID_A_BORDERSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE
+#define DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE
+#define DISPID_IHTMLRULESTYLE_STYLEFLOAT DISPID_A_FLOAT
+#define DISPID_IHTMLRULESTYLE_CLEAR DISPID_A_CLEAR
+#define DISPID_IHTMLRULESTYLE_DISPLAY DISPID_A_DISPLAY
+#define DISPID_IHTMLRULESTYLE_VISIBILITY DISPID_A_VISIBILITY
+#define DISPID_IHTMLRULESTYLE_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE
+#define DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION
+#define DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE
+#define DISPID_IHTMLRULESTYLE_LISTSTYLE DISPID_A_LISTSTYLE
+#define DISPID_IHTMLRULESTYLE_WHITESPACE DISPID_A_WHITESPACE
+#define DISPID_IHTMLRULESTYLE_POSITION DISPID_A_POSITION
+#define DISPID_IHTMLRULESTYLE_ZINDEX DISPID_A_ZINDEX
+#define DISPID_IHTMLRULESTYLE_OVERFLOW DISPID_A_OVERFLOW
+#define DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE
+#define DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER
+#define DISPID_IHTMLRULESTYLE_CSSTEXT DISPID_A_STYLETEXT
+#define DISPID_IHTMLRULESTYLE_CURSOR DISPID_A_CURSOR
+#define DISPID_IHTMLRULESTYLE_CLIP DISPID_A_CLIP
+#define DISPID_IHTMLRULESTYLE_FILTER DISPID_A_FILTER
+#define DISPID_IHTMLRULESTYLE_TOP STDPROPID_XOBJ_TOP
+#define DISPID_IHTMLRULESTYLE_LEFT STDPROPID_XOBJ_LEFT
+#define DISPID_IHTMLRULESTYLE_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLRULESTYLE_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLRULESTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR
+
+/* IHTMLDOMNode */
+#define DISPID_IHTMLDOMNODE_NODETYPE DISPID_ELEMENT+46
+#define DISPID_IHTMLDOMNODE_PARENTNODE DISPID_ELEMENT+47
+#define DISPID_IHTMLDOMNODE_HASCHILDNODES DISPID_ELEMENT+48
+#define DISPID_IHTMLDOMNODE_CHILDNODES DISPID_ELEMENT+49
+#define DISPID_IHTMLDOMNODE_ATTRIBUTES DISPID_ELEMENT+50
+#define DISPID_IHTMLDOMNODE_INSERTBEFORE DISPID_ELEMENT+51
+#define DISPID_IHTMLDOMNODE_REMOVECHILD DISPID_ELEMENT+52
+#define DISPID_IHTMLDOMNODE_REPLACECHILD DISPID_ELEMENT+53
+#define DISPID_IHTMLDOMNODE_CLONENODE DISPID_ELEMENT+61
+#define DISPID_IHTMLDOMNODE_REMOVENODE DISPID_ELEMENT+66
+#define DISPID_IHTMLDOMNODE_SWAPNODE DISPID_ELEMENT+68
+#define DISPID_IHTMLDOMNODE_REPLACENODE DISPID_ELEMENT+67
+#define DISPID_IHTMLDOMNODE_APPENDCHILD DISPID_ELEMENT+73
+#define DISPID_IHTMLDOMNODE_NODENAME DISPID_ELEMENT+74
+#define DISPID_IHTMLDOMNODE_NODEVALUE DISPID_ELEMENT+75
+#define DISPID_IHTMLDOMNODE_FIRSTCHILD DISPID_ELEMENT+76
+#define DISPID_IHTMLDOMNODE_LASTCHILD DISPID_ELEMENT+77
+#define DISPID_IHTMLDOMNODE_PREVIOUSSIBLING DISPID_ELEMENT+78
+#define DISPID_IHTMLDOMNODE_NEXTSIBLING DISPID_ELEMENT+79
+
+/* IHTMLLinkElement */
+#define DISPID_IHTMLLINKELEMENT_HREF DISPID_HEDELEMS+5
+#define DISPID_IHTMLLINKELEMENT_REL DISPID_HEDELEMS+6
+#define DISPID_IHTMLLINKELEMENT_REV DISPID_HEDELEMS+7
+#define DISPID_IHTMLLINKELEMENT_TYPE DISPID_HEDELEMS+8
+#define DISPID_IHTMLLINKELEMENT_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLLINKELEMENT_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLLINKELEMENT_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLLINKELEMENT_STYLESHEET DISPID_HEDELEMS+14
+#define DISPID_IHTMLLINKELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLLINKELEMENT_MEDIA DISPID_HEDELEMS+16
+
+/* IHTMLLinkElement2 */
+#define DISPID_IHTMLLINKELEMENT2_TARGET DISPID_HEDELEMS+17
+
+/* IHTMLLinkElement3 */
+#define DISPID_IHTMLLINKELEMENT3_CHARSET DISPID_HEDELEMS+18
+#define DISPID_IHTMLLINKELEMENT3_HREFLANG DISPID_HEDELEMS+19
+
+/* IHTMLLinkElement4 */
+#define DISPID_IHTMLLINKELEMENT4_IE8_HREF DISPID_IE8_LINK
+
+/* IHTMLDOMNode2 */
+#define DISPID_IHTMLDOMNODE2_OWNERDOCUMENT DISPID_ELEMENT+113
+
+/* IHTMLDOMTextNode */
+#define DISPID_IHTMLDOMTEXTNODE_DATA DISPID_DOMTEXTNODE
+#define DISPID_IHTMLDOMTEXTNODE_TOSTRING DISPID_DOMTEXTNODE+1
+#define DISPID_IHTMLDOMTEXTNODE_LENGTH DISPID_DOMTEXTNODE+2
+#define DISPID_IHTMLDOMTEXTNODE_SPLITTEXT DISPID_DOMTEXTNODE+3
+
+/* IHTMLDOMTextNode2 */
+#define DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA DISPID_DOMTEXTNODE+4
+#define DISPID_IHTMLDOMTEXTNODE2_APPENDDATA DISPID_DOMTEXTNODE+5
+#define DISPID_IHTMLDOMTEXTNODE2_INSERTDATA DISPID_DOMTEXTNODE+6
+#define DISPID_IHTMLDOMTEXTNODE2_DELETEDATA DISPID_DOMTEXTNODE+7
+#define DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA DISPID_DOMTEXTNODE+8
+
+/* IHTMLRenderStyle */
+#define DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE DISPID_A_TEXTLINETHROUGHSTYLE
+#define DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE DISPID_A_TEXTUNDERLINESTYLE
+#define DISPID_IHTMLRENDERSTYLE_TEXTEFFECT DISPID_A_TEXTEFFECT
+#define DISPID_IHTMLRENDERSTYLE_TEXTCOLOR DISPID_A_TEXTCOLOR
+#define DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR DISPID_A_TEXTBACKGROUNDCOLOR
+#define DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR DISPID_A_TEXTDECORATIONCOLOR
+#define DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY DISPID_A_RENDERINGPRIORITY
+#define DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION DISPID_A_DEFAULTTEXTSELECTION
+#define DISPID_IHTMLRENDERSTYLE_TEXTDECORATION DISPID_A_STYLETEXTDECORATION
+
+/* IHTMLDOMImplementation */
+#define DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE DISPID_DOMIMPLEMENTATION
+
+/* IHTMLDOMAttribute */
+#define DISPID_IHTMLDOMATTRIBUTE_NODENAME DISPID_DOMATTRIBUTE
+#define DISPID_IHTMLDOMATTRIBUTE_NODEVALUE DISPID_DOMATTRIBUTE+2
+#define DISPID_IHTMLDOMATTRIBUTE_SPECIFIED DISPID_DOMATTRIBUTE+1
+
+/* IHTMLDOMAttribute2 */
+#define DISPID_IHTMLDOMATTRIBUTE2_NAME DISPID_DOMATTRIBUTE+3
+#define DISPID_IHTMLDOMATTRIBUTE2_VALUE DISPID_DOMATTRIBUTE+4
+#define DISPID_IHTMLDOMATTRIBUTE2_EXPANDO DISPID_DOMATTRIBUTE+5
+#define DISPID_IHTMLDOMATTRIBUTE2_NODETYPE DISPID_DOMATTRIBUTE+6
+#define DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE DISPID_DOMATTRIBUTE+7
+#define DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES DISPID_DOMATTRIBUTE+8
+#define DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD DISPID_DOMATTRIBUTE+9
+#define DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD DISPID_DOMATTRIBUTE+10
+#define DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING DISPID_DOMATTRIBUTE+11
+#define DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING DISPID_DOMATTRIBUTE+12
+#define DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES DISPID_DOMATTRIBUTE+13
+#define DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT DISPID_DOMATTRIBUTE+14
+#define DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE DISPID_DOMATTRIBUTE+15
+#define DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD DISPID_DOMATTRIBUTE+16
+#define DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD DISPID_DOMATTRIBUTE+17
+#define DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD DISPID_DOMATTRIBUTE+18
+#define DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES DISPID_DOMATTRIBUTE+19
+#define DISPID_IHTMLDOMATTRIBUTE2_CLONENODE DISPID_DOMATTRIBUTE+20
+
+/* IHTMLDOMAttribute3 */
+#define DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE DISPID_IE8_ATTR+3
+#define DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE DISPID_IE8_ATTR+4
+#define DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED DISPID_IE8_ATTR
+#define DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT DISPID_IE8_ATTR+1
+
+/* IHTMLDocumentCompatibleInfo */
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT DISPID_DOCUMENTCOMPATIBLEINFO
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION DISPID_DOCUMENTCOMPATIBLEINFO+1
+
+/* IHTMLDocumentCompatibleInfoCollection */
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION
+#define DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH DISPID_DOCUMENTCOMPATIBLEINFOCOLLECTION+1
+
+/* IHTMLBodyElement */
+#define DISPID_IHTMLBODYELEMENT_BACKGROUND DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLBODYELEMENT_BGPROPERTIES DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLBODYELEMENT_LEFTMARGIN DISPID_A_MARGINLEFT
+#define DISPID_IHTMLBODYELEMENT_TOPMARGIN DISPID_A_MARGINTOP
+#define DISPID_IHTMLBODYELEMENT_RIGHTMARGIN DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLBODYELEMENT_NOWRAP DISPID_A_NOWRAP
+#define DISPID_IHTMLBODYELEMENT_BGCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLBODYELEMENT_TEXT DISPID_A_COLOR
+#define DISPID_IHTMLBODYELEMENT_LINK DISPID_BODY+10
+#define DISPID_IHTMLBODYELEMENT_VLINK DISPID_BODY+12
+#define DISPID_IHTMLBODYELEMENT_ALINK DISPID_BODY+11
+#define DISPID_IHTMLBODYELEMENT_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLBODYELEMENT_ONUNLOAD DISPID_EVPROP_ONUNLOAD
+#define DISPID_IHTMLBODYELEMENT_SCROLL DISPID_A_SCROLL
+#define DISPID_IHTMLBODYELEMENT_ONSELECT DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD DISPID_EVPROP_ONBEFOREUNLOAD
+#define DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE DISPID_BODY+13
+
+/* IHTMLBodyElement2 */
+#define DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT DISPID_EVPROP_ONBEFOREPRINT
+#define DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT DISPID_EVPROP_ONAFTERPRINT
+
+/* IHTMLAnchorElement */
+#define DISPID_IHTMLANCHORELEMENT_HREF DISPID_VALUE
+#define DISPID_IHTMLANCHORELEMENT_TARGET DISPID_ANCHOR+3
+#define DISPID_IHTMLANCHORELEMENT_REL DISPID_ANCHOR+5
+#define DISPID_IHTMLANCHORELEMENT_REV DISPID_ANCHOR+6
+#define DISPID_IHTMLANCHORELEMENT_URN DISPID_ANCHOR+7
+#define DISPID_IHTMLANCHORELEMENT_METHODS DISPID_ANCHOR+8
+#define DISPID_IHTMLANCHORELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLANCHORELEMENT_HOST DISPID_ANCHOR+12
+#define DISPID_IHTMLANCHORELEMENT_HOSTNAME DISPID_ANCHOR+13
+#define DISPID_IHTMLANCHORELEMENT_PATHNAME DISPID_ANCHOR+14
+#define DISPID_IHTMLANCHORELEMENT_PORT DISPID_ANCHOR+15
+#define DISPID_IHTMLANCHORELEMENT_PROTOCOL DISPID_ANCHOR+16
+#define DISPID_IHTMLANCHORELEMENT_SEARCH DISPID_ANCHOR+17
+#define DISPID_IHTMLANCHORELEMENT_HASH DISPID_ANCHOR+18
+#define DISPID_IHTMLANCHORELEMENT_ONBLUR DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLANCHORELEMENT_ONFOCUS DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLANCHORELEMENT_ACCESSKEY DISPID_SITE+5
+#define DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG DISPID_ANCHOR+31
+#define DISPID_IHTMLANCHORELEMENT_MIMETYPE DISPID_ANCHOR+30
+#define DISPID_IHTMLANCHORELEMENT_NAMEPROP DISPID_ANCHOR+32
+#define DISPID_IHTMLANCHORELEMENT_TABINDEX STDPROPID_XOBJ_TABINDEX
+#define DISPID_IHTMLANCHORELEMENT_FOCUS DISPID_SITE+0
+#define DISPID_IHTMLANCHORELEMENT_BLUR DISPID_SITE+2
+
+/* IHTMLAnchorElement2 */
+#define DISPID_IHTMLANCHORELEMENT2_CHARSET DISPID_ANCHOR+23
+#define DISPID_IHTMLANCHORELEMENT2_COORDS DISPID_ANCHOR+24
+#define DISPID_IHTMLANCHORELEMENT2_HREFLANG DISPID_ANCHOR+25
+#define DISPID_IHTMLANCHORELEMENT2_SHAPE DISPID_ANCHOR+26
+#define DISPID_IHTMLANCHORELEMENT2_TYPE DISPID_ANCHOR+27
+
+/* IHTMLAnchorElement3 */
+#define DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE DISPID_IE8_ANCHOR+1
+#define DISPID_IHTMLANCHORELEMENT3_IE8_COORDS DISPID_IE8_ANCHOR+2
+#define DISPID_IHTMLANCHORELEMENT3_IE8_HREF DISPID_IE8_ANCHOR+3
+
+/* IHTMLLabelElement */
+#define DISPID_IHTMLLABELELEMENT_HTMLFOR DISPID_LABEL
+#define DISPID_IHTMLLABELELEMENT_ACCESSKEY DISPID_SITE+5
+
+/* IHTMLLabelElement2 */
+#define DISPID_IHTMLLABELELEMENT2_FORM DISPID_LABEL+2
+
+/* IHTMLTxtRange */
+#define DISPID_IHTMLTXTRANGE_HTMLTEXT DISPID_RANGE+3
+#define DISPID_IHTMLTXTRANGE_TEXT DISPID_RANGE+4
+#define DISPID_IHTMLTXTRANGE_PARENTELEMENT DISPID_RANGE+6
+#define DISPID_IHTMLTXTRANGE_DUPLICATE DISPID_RANGE+8
+#define DISPID_IHTMLTXTRANGE_INRANGE DISPID_RANGE+10
+#define DISPID_IHTMLTXTRANGE_ISEQUAL DISPID_RANGE+11
+#define DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW DISPID_RANGE+12
+#define DISPID_IHTMLTXTRANGE_COLLAPSE DISPID_RANGE+13
+#define DISPID_IHTMLTXTRANGE_EXPAND DISPID_RANGE+14
+#define DISPID_IHTMLTXTRANGE_MOVE DISPID_RANGE+15
+#define DISPID_IHTMLTXTRANGE_MOVESTART DISPID_RANGE+16
+#define DISPID_IHTMLTXTRANGE_MOVEEND DISPID_RANGE+17
+#define DISPID_IHTMLTXTRANGE_SELECT DISPID_RANGE+24
+#define DISPID_IHTMLTXTRANGE_PASTEHTML DISPID_RANGE+26
+#define DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT DISPID_RANGE+1
+#define DISPID_IHTMLTXTRANGE_SETENDPOINT DISPID_RANGE+25
+#define DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS DISPID_RANGE+18
+#define DISPID_IHTMLTXTRANGE_FINDTEXT DISPID_RANGE+19
+#define DISPID_IHTMLTXTRANGE_MOVETOPOINT DISPID_RANGE+20
+#define DISPID_IHTMLTXTRANGE_GETBOOKMARK DISPID_RANGE+21
+#define DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK DISPID_RANGE+9
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED DISPID_RANGE+27
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED DISPID_RANGE+28
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE DISPID_RANGE+29
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM DISPID_RANGE+30
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT DISPID_RANGE+31
+#define DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE DISPID_RANGE+32
+#define DISPID_IHTMLTXTRANGE_EXECCOMMAND DISPID_RANGE+33
+#define DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP DISPID_RANGE+34
+
+/* IHTMLTextAreaElement */
+#define DISPID_IHTMLTEXTAREAELEMENT_TYPE DISPID_INPUT
+#define DISPID_IHTMLTEXTAREAELEMENT_VALUE DISPID_A_VALUE
+#define DISPID_IHTMLTEXTAREAELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLTEXTAREAELEMENT_STATUS DISPID_INPUT+1
+#define DISPID_IHTMLTEXTAREAELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLTEXTAREAELEMENT_FORM DISPID_SITE+4
+#define DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE DISPID_DEFAULTVALUE
+#define DISPID_IHTMLTEXTAREAELEMENT_SELECT DISPID_RICHTEXT+5
+#define DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLTEXTAREAELEMENT_ONSELECT DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLTEXTAREAELEMENT_READONLY DISPID_RICHTEXT+4
+#define DISPID_IHTMLTEXTAREAELEMENT_ROWS DISPID_RICHTEXT+1
+#define DISPID_IHTMLTEXTAREAELEMENT_COLS DISPID_RICHTEXT+2
+#define DISPID_IHTMLTEXTAREAELEMENT_WRAP DISPID_RICHTEXT+3
+#define DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE DISPID_RICHTEXT+6
+
+/* IHTMLButtonElement */
+#define DISPID_IHTMLBUTTONELEMENT_TYPE DISPID_INPUT
+#define DISPID_IHTMLBUTTONELEMENT_VALUE DISPID_A_VALUE
+#define DISPID_IHTMLBUTTONELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLBUTTONELEMENT_STATUS DISPID_BUTTON+1
+#define DISPID_IHTMLBUTTONELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLBUTTONELEMENT_FORM DISPID_SITE+4
+#define DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE DISPID_BUTTON+2
+
+/* IHTMLInputElement */
+#define DISPID_IHTMLINPUTELEMENT_TYPE DISPID_INPUT
+#define DISPID_IHTMLINPUTELEMENT_VALUE DISPID_A_VALUE
+#define DISPID_IHTMLINPUTELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLINPUTELEMENT_STATUS DISPID_INPUT+1
+#define DISPID_IHTMLINPUTELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLINPUTELEMENT_FORM DISPID_SITE+4
+#define DISPID_IHTMLINPUTELEMENT_SIZE DISPID_INPUT+2
+#define DISPID_IHTMLINPUTELEMENT_MAXLENGTH DISPID_INPUT+3
+#define DISPID_IHTMLINPUTELEMENT_SELECT DISPID_INPUT+4
+#define DISPID_IHTMLINPUTELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLINPUTELEMENT_ONSELECT DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE DISPID_DEFAULTVALUE
+#define DISPID_IHTMLINPUTELEMENT_READONLY DISPID_INPUT+5
+#define DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE DISPID_INPUT+6
+#define DISPID_IHTMLINPUTELEMENT_INDETERMINATE DISPID_INPUT+7
+#define DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED DISPID_INPUT+8
+#define DISPID_IHTMLINPUTELEMENT_CHECKED DISPID_INPUT+9
+#define DISPID_IHTMLINPUTELEMENT_BORDER DISPID_INPUT+12
+#define DISPID_IHTMLINPUTELEMENT_VSPACE DISPID_INPUT+13
+#define DISPID_IHTMLINPUTELEMENT_HSPACE DISPID_INPUT+14
+#define DISPID_IHTMLINPUTELEMENT_ALT DISPID_INPUT+10
+#define DISPID_IHTMLINPUTELEMENT_SRC DISPID_INPUT+11
+#define DISPID_IHTMLINPUTELEMENT_LOWSRC DISPID_INPUT+15
+#define DISPID_IHTMLINPUTELEMENT_VRML DISPID_INPUT+16
+#define DISPID_IHTMLINPUTELEMENT_DYNSRC DISPID_INPUT+17
+#define DISPID_IHTMLINPUTELEMENT_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLINPUTELEMENT_COMPLETE DISPID_INPUT+18
+#define DISPID_IHTMLINPUTELEMENT_LOOP DISPID_INPUT+19
+#define DISPID_IHTMLINPUTELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLINPUTELEMENT_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLINPUTELEMENT_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLINPUTELEMENT_ONABORT DISPID_EVPROP_ONABORT
+#define DISPID_IHTMLINPUTELEMENT_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLINPUTELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLINPUTELEMENT_START DISPID_INPUT+20
+
+/* IHTMLInputElement2 */
+#define DISPID_IHTMLINPUTELEMENT2_ACCEPT DISPID_INPUT+22
+#define DISPID_IHTMLINPUTELEMENT2_USEMAP DISPID_INPUT+23
+
+/* IHTMLInputTextElement */
+#define DISPID_IHTMLINPUTTEXTELEMENT_TYPE DISPID_INPUT
+#define DISPID_IHTMLINPUTTEXTELEMENT_VALUE DISPID_A_VALUE
+#define DISPID_IHTMLINPUTTEXTELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLINPUTTEXTELEMENT_STATUS DISPID_INPUT+21
+#define DISPID_IHTMLINPUTTEXTELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLINPUTTEXTELEMENT_FORM DISPID_SITE+4
+#define DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE DISPID_DEFAULTVALUE
+#define DISPID_IHTMLINPUTTEXTELEMENT_SIZE DISPID_INPUT+2
+#define DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH DISPID_INPUT+3
+#define DISPID_IHTMLINPUTTEXTELEMENT_SELECT DISPID_INPUT+4
+#define DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT DISPID_EVPROP_ONSELECT
+#define DISPID_IHTMLINPUTTEXTELEMENT_READONLY DISPID_INPUT+5
+#define DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE DISPID_INPUT+6
+
+/* IHTMLSelectElement */
+#define DISPID_IHTMLSELECTELEMENT_SIZE DISPID_SELECT+2
+#define DISPID_IHTMLSELECTELEMENT_MULTIPLE DISPID_SELECT+3
+#define DISPID_IHTMLSELECTELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLSELECTELEMENT_OPTIONS DISPID_SELECT+5
+#define DISPID_IHTMLSELECTELEMENT_ONCHANGE DISPID_EVPROP_ONCHANGE
+#define DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX DISPID_SELECT+10
+#define DISPID_IHTMLSELECTELEMENT_TYPE DISPID_SELECT+12
+#define DISPID_IHTMLSELECTELEMENT_VALUE DISPID_SELECT+11
+#define DISPID_IHTMLSELECTELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLSELECTELEMENT_FORM DISPID_SITE+4
+#define DISPID_IHTMLSELECTELEMENT_ADD DISPID_COLLECTION+3
+#define DISPID_IHTMLSELECTELEMENT_REMOVE DISPID_COLLECTION+4
+#define DISPID_IHTMLSELECTELEMENT_LENGTH DISPID_COLLECTION
+#define DISPID_IHTMLSELECTELEMENT__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLSELECTELEMENT_ITEM DISPID_VALUE
+#define DISPID_IHTMLSELECTELEMENT_TAGS DISPID_COLLECTION+2
+
+/* IHTMLSelectElement2 */
+#define DISPID_IHTMLSELECTELEMENT2_URNS DISPID_COLLECTION+5
+
+/* IHTMLSelectElement4 */
+#define DISPID_IHTMLSELECTELEMENT4_NAMEDITEM DISPID_COLLECTION+6
+
+/* IHTMLHeadElement */
+#define DISPID_IHTMLHEADELEMENT_PROFILE DISPID_HEDELEMS+1
+
+/* IHTMLHeadElement2 */
+#define DISPID_IHTMLHEADELEMENT2_IE8_PROFILE DISPID_IE8_HEAD
+
+/* IHTMLTitleElement */
+#define DISPID_IHTMLTITLEELEMENT_TEXT DISPID_A_VALUE
+
+/* IHTMLMetaElement */
+#define DISPID_IHTMLMETAELEMENT_HTTPEQUIV DISPID_HEDELEMS+1
+#define DISPID_IHTMLMETAELEMENT_CONTENT DISPID_HEDELEMS+2
+#define DISPID_IHTMLMETAELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLMETAELEMENT_URL DISPID_HEDELEMS+3
+#define DISPID_IHTMLMETAELEMENT_CHARSET DISPID_HEDELEMS+13
+
+/* IHTMLMetaElement2 */
+#define DISPID_IHTMLMETAELEMENT2_SCHEME DISPID_HEDELEMS+20
+
+/* IHTMLMetaElement3 */
+#define DISPID_IHTMLMETAELEMENT3_IE8_URL DISPID_IE8_META
+
+/* IHTMLRect */
+#define DISPID_IHTMLRECT_LEFT DISPID_OMRECT+1
+#define DISPID_IHTMLRECT_TOP DISPID_OMRECT+2
+#define DISPID_IHTMLRECT_RIGHT DISPID_OMRECT+3
+#define DISPID_IHTMLRECT_BOTTOM DISPID_OMRECT+4
+
+/* IHTMLRectCollection */
+#define DISPID_IHTMLRECTCOLLECTION_LENGTH DISPID_COLLECTION
+#define DISPID_IHTMLRECTCOLLECTION__NEWENUM DISPID_NEWENUM
+#define DISPID_IHTMLRECTCOLLECTION_ITEM DISPID_VALUE
+
+/* IHTMLCurrentStyle */
+#define DISPID_IHTMLCURRENTSTYLE_POSITION DISPID_A_POSITION
+#define DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT DISPID_A_FLOAT
+#define DISPID_IHTMLCURRENTSTYLE_COLOR DISPID_A_COLOR
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_FONTFAMILY DISPID_A_FONTFACE
+#define DISPID_IHTMLCURRENTSTYLE_FONTSTYLE DISPID_A_FONTSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_FONTVARIANT DISPID_A_FONTVARIANT
+#define DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT DISPID_A_FONTWEIGHT
+#define DISPID_IHTMLCURRENTSTYLE_FONTSIZE DISPID_A_FONTSIZE
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX DISPID_A_BACKGROUNDPOSX
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY DISPID_A_BACKGROUNDPOSY
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT DISPID_A_BACKGROUNDREPEAT
+#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR DISPID_A_BORDERLEFTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR DISPID_A_BORDERTOPCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR DISPID_A_BORDERRIGHTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR DISPID_A_BORDERBOTTOMCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE DISPID_A_BORDERTOPSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE DISPID_A_BORDERRIGHTSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE DISPID_A_BORDERBOTTOMSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE DISPID_A_BORDERLEFTSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH DISPID_A_BORDERTOPWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH DISPID_A_BORDERRIGHTWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH DISPID_A_BORDERBOTTOMWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH DISPID_A_BORDERLEFTWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_LEFT STDPROPID_XOBJ_LEFT
+#define DISPID_IHTMLCURRENTSTYLE_TOP STDPROPID_XOBJ_TOP
+#define DISPID_IHTMLCURRENTSTYLE_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLCURRENTSTYLE_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT DISPID_A_PADDINGLEFT
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGTOP DISPID_A_PADDINGTOP
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT DISPID_A_PADDINGRIGHT
+#define DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM DISPID_A_PADDINGBOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION DISPID_A_TEXTDECORATION
+#define DISPID_IHTMLCURRENTSTYLE_DISPLAY DISPID_A_DISPLAY
+#define DISPID_IHTMLCURRENTSTYLE_VISIBILITY DISPID_A_VISIBILITY
+#define DISPID_IHTMLCURRENTSTYLE_ZINDEX DISPID_A_ZINDEX
+#define DISPID_IHTMLCURRENTSTYLE_LETTERSPACING DISPID_A_LETTERSPACING
+#define DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT DISPID_A_LINEHEIGHT
+#define DISPID_IHTMLCURRENTSTYLE_TEXTINDENT DISPID_A_TEXTINDENT
+#define DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN DISPID_A_VERTICALALIGN
+#define DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT DISPID_A_BACKGROUNDATTACHMENT
+#define DISPID_IHTMLCURRENTSTYLE_MARGINTOP DISPID_A_MARGINTOP
+#define DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT DISPID_A_MARGINRIGHT
+#define DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM DISPID_A_MARGINBOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_MARGINLEFT DISPID_A_MARGINLEFT
+#define DISPID_IHTMLCURRENTSTYLE_CLEAR DISPID_A_CLEAR
+#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE DISPID_A_LISTSTYLETYPE
+#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION DISPID_A_LISTSTYLEPOSITION
+#define DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE DISPID_A_LISTSTYLEIMAGE
+#define DISPID_IHTMLCURRENTSTYLE_CLIPTOP DISPID_A_CLIPRECTTOP
+#define DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT DISPID_A_CLIPRECTRIGHT
+#define DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM DISPID_A_CLIPRECTBOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_CLIPLEFT DISPID_A_CLIPRECTLEFT
+#define DISPID_IHTMLCURRENTSTYLE_OVERFLOW DISPID_A_OVERFLOW
+#define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE DISPID_A_PAGEBREAKBEFORE
+#define DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER DISPID_A_PAGEBREAKAFTER
+#define DISPID_IHTMLCURRENTSTYLE_CURSOR DISPID_A_CURSOR
+#define DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT DISPID_A_TABLELAYOUT
+#define DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE
+#define DISPID_IHTMLCURRENTSTYLE_DIRECTION DISPID_A_DIRECTION
+#define DISPID_IHTMLCURRENTSTYLE_BEHAVIOR DISPID_A_BEHAVIOR
+#define DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE DISPID_HTMLOBJECT+2
+#define DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI DISPID_A_UNICODEBIDI
+#define DISPID_IHTMLCURRENTSTYLE_RIGHT STDPROPID_XOBJ_RIGHT
+#define DISPID_IHTMLCURRENTSTYLE_BOTTOM STDPROPID_XOBJ_BOTTOM
+#define DISPID_IHTMLCURRENTSTYLE_IMEMODE DISPID_A_IMEMODE
+#define DISPID_IHTMLCURRENTSTYLE_RUBYALIGN DISPID_A_RUBYALIGN
+#define DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION DISPID_A_RUBYPOSITION
+#define DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG DISPID_A_RUBYOVERHANG
+#define DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE
+#define DISPID_IHTMLCURRENTSTYLE_LINEBREAK DISPID_A_LINEBREAK
+#define DISPID_IHTMLCURRENTSTYLE_WORDBREAK DISPID_A_WORDBREAK
+#define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY
+#define DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM
+#define DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA DISPID_A_TEXTKASHIDA
+#define DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION DISPID_A_DIR
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE
+#define DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE DISPID_A_BORDERSTYLE
+#define DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR DISPID_A_BORDERCOLOR
+#define DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH DISPID_A_BORDERWIDTH
+#define DISPID_IHTMLCURRENTSTYLE_PADDING DISPID_A_PADDING
+#define DISPID_IHTMLCURRENTSTYLE_MARGIN DISPID_A_MARGIN
+#define DISPID_IHTMLCURRENTSTYLE_ACCELERATOR DISPID_A_ACCELERATOR
+#define DISPID_IHTMLCURRENTSTYLE_OVERFLOWX DISPID_A_OVERFLOWX
+#define DISPID_IHTMLCURRENTSTYLE_OVERFLOWY DISPID_A_OVERFLOWY
+#define DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM DISPID_A_TEXTTRANSFORM
+
+/* IHTMLCurrentStyle2 */
+#define DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW DISPID_A_LAYOUTFLOW
+#define DISPID_IHTMLCURRENTSTYLE2_WORDWRAP DISPID_A_WORDWRAP
+#define DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION
+#define DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT DISPID_A_HASLAYOUT
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR
+#define DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE DISPID_A_WRITINGMODE
+#define DISPID_IHTMLCURRENTSTYLE2_ZOOM DISPID_A_ZOOM
+#define DISPID_IHTMLCURRENTSTYLE2_FILTER DISPID_A_FILTER
+#define DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST
+#define DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE
+#define DISPID_IHTMLCURRENTSTYLE2_ISBLOCK DISPID_A_ISBLOCK
+
+/* IHTMLCurrentStyle3 */
+#define DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW
+#define DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT DISPID_A_MINHEIGHT
+#define DISPID_IHTMLCURRENTSTYLE3_WORDSPACING DISPID_A_WORDSPACING
+#define DISPID_IHTMLCURRENTSTYLE3_WHITESPACE DISPID_A_WHITESPACE
+
+/* IHTMLCurrentStyle4 */
+#define DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE DISPID_A_INTERPOLATION
+#define DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT DISPID_A_MAXHEIGHT
+#define DISPID_IHTMLCURRENTSTYLE4_MINWIDTH DISPID_A_MINWIDTH
+#define DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH DISPID_A_MAXWIDTH
+
+/* HTMLTextContainerEvents2 */
+#define DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE DISPID_EVMETH_ONCHANGE
+#define DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT DISPID_EVMETH_ONSELECT
+
+/* HTMLTextContainerEvents */
+#define DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE DISPID_EVMETH_ONCHANGE
+#define DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT DISPID_EVMETH_ONSELECT
+
+/* IHTMLTextContainer */
+#define DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE DISPID_TEXTSITE+1
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT DISPID_TEXTSITE+2
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH DISPID_TEXTSITE+3
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLTOP DISPID_TEXTSITE+4
+#define DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT DISPID_TEXTSITE+5
+#define DISPID_IHTMLTEXTCONTAINER_ONSCROLL DISPID_EVPROP_ONSCROLL
+
+/* IHTMLTableCaption */
+#define DISPID_IHTMLTABLECAPTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLECAPTION_VALIGN DISPID_A_TABLEVALIGN
+
+ /* IHTMLCommentElement */
+#define DISPID_IHTMLCOMMENTELEMENT_TEXT DISPID_COMMENTPDL+1
+#define DISPID_IHTMLCOMMENTELEMENT_ATOMIC DISPID_COMMENTPDL+2
+
+ /* IHTMLCommentElement2 */
+#define DISPID_IHTMLCOMMENTELEMENT2_DATA DISPID_COMMENTPDL+3
+#define DISPID_IHTMLCOMMENTELEMENT2_LENGTH DISPID_COMMENTPDL+4
+#define DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA DISPID_COMMENTPDL+5
+#define DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA DISPID_COMMENTPDL+6
+#define DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA DISPID_COMMENTPDL+7
+#define DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA DISPID_COMMENTPDL+8
+#define DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA DISPID_COMMENTPDL+9
+
+/* IHTMLTable */
+#define DISPID_IHTMLTABLE_COLS DISPID_TABLE+1
+#define DISPID_IHTMLTABLE_BORDER DISPID_TABLE+2
+#define DISPID_IHTMLTABLE_FRAME DISPID_TABLE+4
+#define DISPID_IHTMLTABLE_RULES DISPID_TABLE+3
+#define DISPID_IHTMLTABLE_CELLSPACING DISPID_TABLE+5
+#define DISPID_IHTMLTABLE_CELLPADDING DISPID_TABLE+6
+#define DISPID_IHTMLTABLE_BACKGROUND DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLTABLE_BGCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLE_BORDERCOLOR DISPID_A_TABLEBORDERCOLOR
+#define DISPID_IHTMLTABLE_BORDERCOLORLIGHT DISPID_A_TABLEBORDERCOLORLIGHT
+#define DISPID_IHTMLTABLE_BORDERCOLORDARK DISPID_A_TABLEBORDERCOLORDARK
+#define DISPID_IHTMLTABLE_ALIGN STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLTABLE_REFRESH DISPID_TABLE+15
+#define DISPID_IHTMLTABLE_ROWS DISPID_TABLE+16
+#define DISPID_IHTMLTABLE_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLTABLE_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLTABLE_DATAPAGESIZE DISPID_TABLE+17
+#define DISPID_IHTMLTABLE_NEXTPAGE DISPID_TABLE+18
+#define DISPID_IHTMLTABLE_PREVIOUSPAGE DISPID_TABLE+19
+#define DISPID_IHTMLTABLE_THEAD DISPID_TABLE+20
+#define DISPID_IHTMLTABLE_TFOOT DISPID_TABLE+21
+#define DISPID_IHTMLTABLE_TBODIES DISPID_TABLE+24
+#define DISPID_IHTMLTABLE_CAPTION DISPID_TABLE+25
+#define DISPID_IHTMLTABLE_CREATETHEAD DISPID_TABLE+26
+#define DISPID_IHTMLTABLE_DELETETHEAD DISPID_TABLE+27
+#define DISPID_IHTMLTABLE_CREATETFOOT DISPID_TABLE+28
+#define DISPID_IHTMLTABLE_DELETETFOOT DISPID_TABLE+29
+#define DISPID_IHTMLTABLE_CREATECAPTION DISPID_TABLE+30
+#define DISPID_IHTMLTABLE_DELETECAPTION DISPID_TABLE+31
+#define DISPID_IHTMLTABLE_INSERTROW DISPID_TABLE+32
+#define DISPID_IHTMLTABLE_DELETEROW DISPID_TABLE+33
+#define DISPID_IHTMLTABLE_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLTABLE_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+
+/* IHTMLTable2 */
+#define DISPID_IHTMLTABLE2_FIRSTPAGE DISPID_TABLE+35
+#define DISPID_IHTMLTABLE2_LASTPAGE DISPID_TABLE+36
+#define DISPID_IHTMLTABLE2_CELLS DISPID_TABLE+37
+#define DISPID_IHTMLTABLE2_MOVEROW DISPID_TABLE+38
+
+/* IHTMLTable3 */
+#define DISPID_IHTMLTABLE3_SUMMARY DISPID_TABLE+39
+
+/* IHTMLTableSection */
+#define DISPID_IHTMLTABLESECTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLESECTION_VALIGN DISPID_A_TABLEVALIGN
+#define DISPID_IHTMLTABLESECTION_BGCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLESECTION_ROWS DISPID_TABLESECTION
+#define DISPID_IHTMLTABLESECTION_INSERTROW DISPID_TABLESECTION+1
+#define DISPID_IHTMLTABLESECTION_DELETEROW DISPID_TABLESECTION+2
+
+/* IHTMLTableRow */
+#define DISPID_IHTMLTABLEROW_ALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLEROW_VALIGN DISPID_A_TABLEVALIGN
+#define DISPID_IHTMLTABLEROW_BGCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLEROW_BORDERCOLOR DISPID_A_TABLEBORDERCOLOR
+#define DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT DISPID_A_TABLEBORDERCOLORLIGHT
+#define DISPID_IHTMLTABLEROW_BORDERCOLORDARK DISPID_A_TABLEBORDERCOLORDARK
+#define DISPID_IHTMLTABLEROW_ROWINDEX DISPID_TABLEROW
+#define DISPID_IHTMLTABLEROW_SECTIONROWINDEX DISPID_TABLEROW+1
+#define DISPID_IHTMLTABLEROW_CELLS DISPID_TABLEROW+2
+#define DISPID_IHTMLTABLEROW_INSERTCELL DISPID_TABLEROW+3
+#define DISPID_IHTMLTABLEROW_DELETECELL DISPID_TABLEROW+4
+
+/* IHTMLTableRow2 */
+#define DISPID_IHTMLTABLEROW2_HEIGHT STDPROPID_XOBJ_HEIGHT
+
+/* IHTMLTableRow3 */
+#define DISPID_IHTMLTABLEROW3_CH DISPID_TABLEROW+9
+#define DISPID_IHTMLTABLEROW3_CHOFF DISPID_TABLEROW+10
+
+/* IHTMLTableCell */
+#define DISPID_IHTMLTABLECELL_ROWSPAN DISPID_TABLECELL+1
+#define DISPID_IHTMLTABLECELL_COLSPAN DISPID_TABLECELL+2
+#define DISPID_IHTMLTABLECELL_ALIGN STDPROPID_XOBJ_BLOCKALIGN
+#define DISPID_IHTMLTABLECELL_VALIGN DISPID_A_TABLEVALIGN
+#define DISPID_IHTMLTABLECELL_BGCOLOR DISPID_BACKCOLOR
+#define DISPID_IHTMLTABLECELL_NOWRAP DISPID_A_NOWRAP
+#define DISPID_IHTMLTABLECELL_BACKGROUND DISPID_A_BACKGROUNDIMAGE
+#define DISPID_IHTMLTABLECELL_BORDERCOLOR DISPID_A_TABLEBORDERCOLOR
+#define DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT DISPID_A_TABLEBORDERCOLORLIGHT
+#define DISPID_IHTMLTABLECELL_BORDERCOLORDARK DISPID_A_TABLEBORDERCOLORDARK
+#define DISPID_IHTMLTABLECELL_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLTABLECELL_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLTABLECELL_CELLINDEX DISPID_TABLECELL+3
+
+/* IHTMLTableCell2 */
+#define DISPID_IHTMLTABLECELL2_ABBR DISPID_TABLECELL+4
+#define DISPID_IHTMLTABLECELL2_AXIS DISPID_TABLECELL+5
+#define DISPID_IHTMLTABLECELL2_CH DISPID_TABLECELL+6
+#define DISPID_IHTMLTABLECELL2_CHOFF DISPID_TABLECELL+7
+#define DISPID_IHTMLTABLECELL2_HEADERS DISPID_TABLECELL+8
+#define DISPID_IHTMLTABLECELL2_SCOPE DISPID_TABLECELL+9
+
+/* IHTMLTableCell3 */
+#define DISPID_IHTMLTABLECELL3_IE9_CH DISPID_TABLECELL+10
+#define DISPID_IHTMLTABLECELL3_IE9_CHOFF DISPID_TABLECELL+11
+
+/* IHTMLScriptElement */
+#define DISPID_IHTMLSCRIPTELEMENT_SRC DISPID_SCRIPT+1
+#define DISPID_IHTMLSCRIPTELEMENT_HTMLFOR DISPID_SCRIPT+4
+#define DISPID_IHTMLSCRIPTELEMENT_EVENT DISPID_SCRIPT+5
+#define DISPID_IHTMLSCRIPTELEMENT_TEXT DISPID_SCRIPT+6
+#define DISPID_IHTMLSCRIPTELEMENT_DEFER DISPID_SCRIPT+7
+#define DISPID_IHTMLSCRIPTELEMENT_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLSCRIPTELEMENT_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLSCRIPTELEMENT_TYPE DISPID_SCRIPT+9
+
+/* IHTMLScriptElement2 */
+#define DISPID_IHTMLSCRIPTELEMENT2_CHARSET DISPID_SCRIPT+10
+
+/* IHTMLScriptElement3 */
+#define DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC DISPID_IE8_SCRIPT
+
+/* IHTMLObjectElement */
+#define DISPID_IHTMLOBJECTELEMENT_OBJECT DISPID_OBJECT+1
+#define DISPID_IHTMLOBJECTELEMENT_CLASSID DISPID_OBJECT+2
+#define DISPID_IHTMLOBJECTELEMENT_DATA DISPID_OBJECT+3
+#define DISPID_IHTMLOBJECTELEMENT_RECORDSET DISPID_OBJECT+5
+#define DISPID_IHTMLOBJECTELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN
+#define DISPID_IHTMLOBJECTELEMENT_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLOBJECTELEMENT_CODEBASE DISPID_OBJECT+6
+#define DISPID_IHTMLOBJECTELEMENT_CODETYPE DISPID_OBJECT+7
+#define DISPID_IHTMLOBJECTELEMENT_CODE DISPID_OBJECT+8
+#define DISPID_IHTMLOBJECTELEMENT_BASEHREF STDPROPID_XOBJ_BASEHREF
+#define DISPID_IHTMLOBJECTELEMENT_TYPE DISPID_OBJECT+9
+#define DISPID_IHTMLOBJECTELEMENT_FORM DISPID_SITE+4
+#define DISPID_IHTMLOBJECTELEMENT_WIDTH STDPROPID_XOBJ_WIDTH
+#define DISPID_IHTMLOBJECTELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLOBJECTELEMENT_READYSTATE DISPID_OBJECT+10
+#define DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLOBJECTELEMENT_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLOBJECTELEMENT_ALTHTML DISPID_OBJECT+11
+#define DISPID_IHTMLOBJECTELEMENT_VSPACE DISPID_OBJECT+12
+#define DISPID_IHTMLOBJECTELEMENT_HSPACE DISPID_OBJECT+13
+
+/* IHTMLObjectElement2 */
+#define DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET DISPID_OBJECT+14
+#define DISPID_IHTMLOBJECTELEMENT2_CLASSID DISPID_OBJECT+2
+#define DISPID_IHTMLOBJECTELEMENT2_DATA DISPID_OBJECT+3
+
+/* IHTMLObjectElement3 */
+#define DISPID_IHTMLOBJECTELEMENT3_ARCHIVE DISPID_OBJECT+15
+#define DISPID_IHTMLOBJECTELEMENT3_ALT DISPID_OBJECT+16
+#define DISPID_IHTMLOBJECTELEMENT3_DECLARE DISPID_OBJECT+17
+#define DISPID_IHTMLOBJECTELEMENT3_STANDBY DISPID_OBJECT+18
+#define DISPID_IHTMLOBJECTELEMENT3_BORDER DISPID_OBJECT+19
+#define DISPID_IHTMLOBJECTELEMENT3_USEMAP DISPID_OBJECT+20
+
+/* IHTMLObjectElement4 */
+#define DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT DISPID_IE8_OBJECT
+#define DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE DISPID_IE8_OBJECT+1
+#define DISPID_IHTMLOBJECTELEMENT4_IE8_DATA DISPID_IE8_OBJECT+2
+
+/* IHTMLParamElement */
+#define DISPID_IHTMLPARAMELEMENT_NAME DISPID_PARAM+1
+#define DISPID_IHTMLPARAMELEMENT_VALUE DISPID_PARAM+2
+#define DISPID_IHTMLPARAMELEMENT_TYPE DISPID_PARAM+3
+#define DISPID_IHTMLPARAMELEMENT_VALUETYPE DISPID_PARAM+4
+
+/* IHTMLParamElement2 */
+#define DISPID_IHTMLPARAMELEMENT2_NAME DISPID_PARAM+1
+#define DISPID_IHTMLPARAMELEMENT2_TYPE DISPID_PARAM+3
+#define DISPID_IHTMLPARAMELEMENT2_VALUE DISPID_PARAM+2
+#define DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE DISPID_IE8_PARAM
+
+/* IHTMLFrameBase */
+#define DISPID_IHTMLFRAMEBASE_SRC DISPID_FRAMESITE+0
+#define DISPID_IHTMLFRAMEBASE_NAME STDPROPID_XOBJ_NAME
+#define DISPID_IHTMLFRAMEBASE_BORDER DISPID_FRAMESITE+2
+#define DISPID_IHTMLFRAMEBASE_FRAMEBORDER DISPID_FRAMESITE+3
+#define DISPID_IHTMLFRAMEBASE_FRAMESPACING DISPID_FRAMESITE+4
+#define DISPID_IHTMLFRAMEBASE_MARGINWIDTH DISPID_FRAMESITE+5
+#define DISPID_IHTMLFRAMEBASE_MARGINHEIGHT DISPID_FRAMESITE+6
+#define DISPID_IHTMLFRAMEBASE_NORESIZE DISPID_FRAMESITE+7
+#define DISPID_IHTMLFRAMEBASE_SCROLLING DISPID_FRAMESITE+8
+
+/* IHTMLFrameBase2 */
+#define DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW DISPID_FRAMESITE+9
+#define DISPID_IHTMLFRAMEBASE2_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLFRAMEBASE2_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY DISPID_A_ALLOWTRANSPARENCY
+
+/* IHTMLFrameBase3 */
+#define DISPID_IHTMLFRAMEBASE3_LONGDESC DISPID_FRAMESITE+10
+
+/* IHTMLFrameElement */
+#define DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR DISPID_FRAME+1
+
+/* IHTMLFrameElement2 */
+#define DISPID_IHTMLFRAMEELEMENT2_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLFRAMEELEMENT2_WIDTH STDPROPID_XOBJ_WIDTH
+
+/* IHTMLFrameElement3 */
+#define DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT DISPID_IE8_FRAME
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_SRC DISPID_IE8_FRAME+1
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC DISPID_IE8_FRAME+2
+#define DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER DISPID_IE8_FRAME+3
+
+/* IHTMLIFrameElement */
+#define DISPID_IHTMLIFRAMEELEMENT_VSPACE DISPID_IFRAME+1
+#define DISPID_IHTMLIFRAMEELEMENT_HSPACE DISPID_IFRAME+2
+#define DISPID_IHTMLIFRAMEELEMENT_ALIGN STDPROPID_XOBJ_CONTROLALIGN
+
+/* IHTMLIFrameElement2 */
+#define DISPID_IHTMLIFRAMEELEMENT2_HEIGHT STDPROPID_XOBJ_HEIGHT
+#define DISPID_IHTMLIFRAMEELEMENT2_WIDTH STDPROPID_XOBJ_WIDTH
+
+/* IHTMLIFrameElement3 */
+#define DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT DISPID_IE8_IFRAME
+#define DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC DISPID_IE8_IFRAME+1
+#define DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC DISPID_IE8_IFRAME+2
+#define DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER DISPID_IE8_IFRAME+3
+
+/* IHTMLStyleElement */
+#define DISPID_IHTMLSTYLEELEMENT_TYPE DISPID_STYLEELEMENT+2
+#define DISPID_IHTMLSTYLEELEMENT_READYSTATE DISPID_A_READYSTATE
+#define DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE DISPID_EVPROP_ONREADYSTATECHANGE
+#define DISPID_IHTMLSTYLEELEMENT_ONLOAD DISPID_EVPROP_ONLOAD
+#define DISPID_IHTMLSTYLEELEMENT_ONERROR DISPID_EVPROP_ONERROR
+#define DISPID_IHTMLSTYLEELEMENT_STYLESHEET DISPID_STYLEELEMENT+4
+#define DISPID_IHTMLSTYLEELEMENT_DISABLED STDPROPID_XOBJ_DISABLED
+#define DISPID_IHTMLSTYLEELEMENT_MEDIA DISPID_STYLEELEMENT+6
+
+/* IHTMLStorage */
+#define DISPID_IHTMLSTORAGE_LENGTH DISPID_DOMSTORAGE+1
+#define DISPID_IHTMLSTORAGE_REMAININGSPACE DISPID_DOMSTORAGE+2
+#define DISPID_IHTMLSTORAGE_KEY DISPID_DOMSTORAGE+6
+#define DISPID_IHTMLSTORAGE_GETITEM DISPID_DOMSTORAGE+3
+#define DISPID_IHTMLSTORAGE_SETITEM DISPID_DOMSTORAGE+4
+#define DISPID_IHTMLSTORAGE_REMOVEITEM DISPID_DOMSTORAGE+5
+#define DISPID_IHTMLSTORAGE_CLEAR DISPID_DOMSTORAGE+7
+
+/* IHTMLDOMConstructorCollection */
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR DISPID_WINDOW+8001+DomConstructorAttr
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION DISPID_WINDOW+8001+DomConstructorBehaviorUrnsCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION DISPID_WINDOW+8001+DomConstructorBookmarkCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO DISPID_WINDOW+8001+DomConstructorCompatibleInfo
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION DISPID_WINDOW+8001+DomConstructorCompatibleInfoCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION DISPID_WINDOW+8001+DomConstructorControlRangeCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION DISPID_WINDOW+8001+DomConstructorCSSCurrentStyleDeclaration
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST DISPID_WINDOW+8001+DomConstructorCSSRuleList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION DISPID_WINDOW+8001+DomConstructorCSSRuleStyleDeclaration
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION DISPID_WINDOW+8001+DomConstructorCSSStyleDeclaration
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE DISPID_WINDOW+8001+DomConstructorCSSStyleRule
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET DISPID_WINDOW+8001+DomConstructorCSSStyleSheet
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER DISPID_WINDOW+8001+DomConstructorDataTransfer
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION DISPID_WINDOW+8001+DomConstructorDOMImplementation
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT DISPID_WINDOW+8001+DomConstructorElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT DISPID_WINDOW+8001+DomConstructorEvent
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY DISPID_WINDOW+8001+DomConstructorHistory
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS DISPID_WINDOW+8001+DomConstructorHTCElementBehaviorDefaults
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT DISPID_WINDOW+8001+DomConstructorHTMLAnchorElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT DISPID_WINDOW+8001+DomConstructorHTMLAreaElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLAreasCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBaseElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBaseFontElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBGSoundElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBlockElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBodyElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT DISPID_WINDOW+8001+DomConstructorHTMLBRElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLButtonElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLCommentElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDDElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDivElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT DISPID_WINDOW+8001+DomConstructorHTMLDocument
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDListElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLDTElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLEmbedElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFieldSetElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFontElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFormElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFrameElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT DISPID_WINDOW+8001+DomConstructorHTMLFrameSetElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT DISPID_WINDOW+8001+DomConstructorHTMLGenericElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHeadElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHeadingElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHRElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT DISPID_WINDOW+8001+DomConstructorHTMLHtmlElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLIFrameElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLImageElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLInputElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT DISPID_WINDOW+8001+DomConstructorHTMLIsIndexElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLabelElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLegendElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLIElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT DISPID_WINDOW+8001+DomConstructorHTMLLinkElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT DISPID_WINDOW+8001+DomConstructorHTMLMapElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLMarqueeElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT DISPID_WINDOW+8001+DomConstructorHTMLMetaElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG DISPID_WINDOW+8001+DomConstructorHTMLModelessDialog
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfo
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLNamespaceInfoCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT DISPID_WINDOW+8001+DomConstructorHTMLNextIdElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT DISPID_WINDOW+8001+DomConstructorHTMLNoShowElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLObjectElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLOListElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLOptionElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT DISPID_WINDOW+8001+DomConstructorHTMLParagraphElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT DISPID_WINDOW+8001+DomConstructorHTMLParamElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLPhraseElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION DISPID_WINDOW+8001+DomConstructorHTMLPluginsCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP DISPID_WINDOW+8001+DomConstructorHTMLPopup
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLScriptElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLSelectElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT DISPID_WINDOW+8001+DomConstructorHTMLSpanElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLStyleElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableCaptionElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableCellElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableColElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableRowElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTableSectionElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTextAreaElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTextElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT DISPID_WINDOW+8001+DomConstructorHTMLTitleElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT DISPID_WINDOW+8001+DomConstructorHTMLUListElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT DISPID_WINDOW+8001+DomConstructorHTMLUnknownElement
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE DISPID_WINDOW+8001+DomConstructorImage
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION DISPID_WINDOW+8001+DomConstructorLocation
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP DISPID_WINDOW+8001+DomConstructorNamedNodeMap
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR DISPID_WINDOW+8001+DomConstructorNavigator
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST DISPID_WINDOW+8001+DomConstructorNodeList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION DISPID_WINDOW+8001+DomConstructorOption
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN DISPID_WINDOW+8001+DomConstructorScreen
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION DISPID_WINDOW+8001+DomConstructorSelection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST DISPID_WINDOW+8001+DomConstructorStaticNodeList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE DISPID_WINDOW+8001+DomConstructorStorage
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST DISPID_WINDOW+8001+DomConstructorStyleSheetList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE DISPID_WINDOW+8001+DomConstructorStyleSheetPage
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST DISPID_WINDOW+8001+DomConstructorStyleSheetPageList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT DISPID_WINDOW+8001+DomConstructorText
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE DISPID_WINDOW+8001+DomConstructorTextRange
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION DISPID_WINDOW+8001+DomConstructorTextRangeCollection
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE DISPID_WINDOW+8001+DomConstructorTextRectangle
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST DISPID_WINDOW+8001+DomConstructorTextRectangleList
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW DISPID_WINDOW+8001+DomConstructorWindow
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST DISPID_WINDOW+8001+DomConstructorXDomainRequest
+#define DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST DISPID_WINDOW+8001+DomConstructorXMLHttpRequest
+
+/* IEventTarget */
+#define DISPID_IEVENTTARGET_ADDEVENTLISTENER DISPID_HTMLOBJECT+10
+#define DISPID_IEVENTTARGET_REMOVEEVENTLISTENER DISPID_HTMLOBJECT+11
+#define DISPID_IEVENTTARGET_DISPATCHEVENT DISPID_HTMLOBJECT+12
+
+/* IDOMEvent */
+#define DISPID_IDOMEVENT_BUBBLES DISPID_DOMEVENT+1
+#define DISPID_IDOMEVENT_CANCELABLE DISPID_DOMEVENT+2
+#define DISPID_IDOMEVENT_CURRENTTARGET DISPID_DOMEVENT+3
+#define DISPID_IDOMEVENT_DEFAULTPREVENTED DISPID_DOMEVENT+4
+#define DISPID_IDOMEVENT_EVENTPHASE DISPID_DOMEVENT+5
+#define DISPID_IDOMEVENT_TARGET DISPID_DOMEVENT+6
+#define DISPID_IDOMEVENT_TIMESTAMP DISPID_DOMEVENT+7
+#define DISPID_IDOMEVENT_TYPE DISPID_DOMEVENT+8
+#define DISPID_IDOMEVENT_INITEVENT DISPID_DOMEVENT+9
+#define DISPID_IDOMEVENT_PREVENTDEFAULT DISPID_DOMEVENT+10
+#define DISPID_IDOMEVENT_STOPPROPAGATION DISPID_DOMEVENT+11
+#define DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION DISPID_DOMEVENT+12
+#define DISPID_IDOMEVENT_ISTRUSTED DISPID_DOMEVENT+13
+#define DISPID_IDOMEVENT_CANCELBUBBLE DISPID_DOMEVENT+14
+#define DISPID_IDOMEVENT_SRCELEMENT DISPID_DOMEVENT+15
+
+/* IHTMLControlElement */
+#define DISPID_IHTMLCONTROLELEMENT_TABINDEX STDPROPID_XOBJ_TABINDEX
+#define DISPID_IHTMLCONTROLELEMENT_FOCUS (DISPID_SITE+0)
+#define DISPID_IHTMLCONTROLELEMENT_ACCESSKEY (DISPID_SITE+5)
+#define DISPID_IHTMLCONTROLELEMENT_ONBLUR DISPID_EVPROP_ONBLUR
+#define DISPID_IHTMLCONTROLELEMENT_ONFOCUS DISPID_EVPROP_ONFOCUS
+#define DISPID_IHTMLCONTROLELEMENT_ONRESIZE DISPID_EVPROP_ONRESIZE
+#define DISPID_IHTMLCONTROLELEMENT_BLUR (DISPID_SITE+2)
+#define DISPID_IHTMLCONTROLELEMENT_ADDFILTER (DISPID_SITE+17)
+#define DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER (DISPID_SITE+18)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT (DISPID_SITE+19)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH (DISPID_SITE+20)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTTOP (DISPID_SITE+21)
+#define DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT (DISPID_SITE+22)
+
+#endif /* __MSHTMDID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl
new file mode 100644
index 00000000..ca3fd029
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtmhst.idl
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2005 Jacek Caban
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "docobj.idl";
+
+cpp_quote("#define CONTEXT_MENU_DEFAULT 0")
+cpp_quote("#define CONTEXT_MENU_IMAGE 1")
+cpp_quote("#define CONTEXT_MENU_CONTROL 2")
+cpp_quote("#define CONTEXT_MENU_TABLE 3")
+cpp_quote("#define CONTEXT_MENU_TEXTSELECT 4")
+cpp_quote("#define CONTEXT_MENU_ANCHOR 5")
+cpp_quote("#define CONTEXT_MENU_UNKNOWN 6")
+cpp_quote("#define CONTEXT_MENU_IMGDYNSRC 7")
+cpp_quote("#define CONTEXT_MENU_IMGART 8")
+cpp_quote("#define CONTEXT_MENU_DEBUG 9")
+cpp_quote("#define CONTEXT_MENU_VSCROLL 10")
+cpp_quote("#define CONTEXT_MENU_HSCROLL 11")
+
+cpp_quote("#define MENUEXT_SHOWDIALOG 1")
+
+cpp_quote("#define DOCHOSTUIFLAG_BROWSER (DOCHOSTUIFLAG_DISABLE_HELP_MENU|DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE)")
+
+cpp_quote("#define HTMLDLG_NOUI 0x0010")
+cpp_quote("#define HTMLDLG_MODAL 0x0020")
+cpp_quote("#define HTMLDLG_MODELESS 0x0040")
+cpp_quote("#define HTMLDLG_PRINT_TEMPLATE 0x0080")
+cpp_quote("#define HTMLDLG_VERIFY 0x0100")
+
+cpp_quote("#define PRINT_DONTBOTHERUSER 0x0001")
+cpp_quote("#define PRINT_WAITFORCOMPLETION 0x0002")
+
+cpp_quote("DEFINE_GUID(CGID_MSHTML, 0xde4ba900,0x59ca,0x11cf,0x95,0x92,0x44,0x45,0x53,0x54,0x00,0x00);")
+cpp_quote("#define CMDSETID_Forms3 CGID_MSHTML")
+
+cpp_quote("#if defined(__GNUC__)")
+cpp_quote("#define SZ_HTML_CLIENTSITE_OBJECTPARAM (const WCHAR[]) {'{','d','4','d','b','6','8','5','0','-','5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a','0','c','9','0','a','9','0','a','c','}',0}")
+cpp_quote("#elif defined(_MSC_VER)")
+cpp_quote("#define SZ_HTML_CLIENTSITE_OBJECTPARAM L\"{d4db6850-5385-11d0-89e9-00a0c90a90ac}\"")
+cpp_quote("#else")
+cpp_quote("static const WCHAR SZ_HTML_CLIENTSITE_OBJECTPARAM[] = {'{','d','4','d','b','6','8','5','0','-','5','3','8','5','-','1','1','d','0','-','8','9','e','9','-','0','0','a','0','c','9','0','a','9','0','a','c','}',0};")
+cpp_quote("#endif")
+
+cpp_quote("#ifndef __IHTMLWindow2_FWD_DEFINED__")
+cpp_quote("#define __IHTMLWindow2_FWD_DEFINED__")
+cpp_quote("typedef interface IHTMLWindow2 IHTMLWindow2;")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * IHostDialogHelper interface
+ */
+[
+ object,
+ uuid(53DEC138-A51E-11d2-861E-00C04FA35C89),
+ pointer_default(unique),
+ local
+]
+interface IHostDialogHelper : IUnknown
+{
+ HRESULT ShowHTMLDialog(
+ HWND hwndParent,
+ IMoniker *pMk,
+ VARIANT *pvarArgIn,
+ WCHAR *pchOptions,
+ VARIANT *pvarArgOut,
+ IUnknown *punkHost);
+}
+
+/*****************************************************************************
+ * HostDialogHelper coclass
+ */
+[
+ uuid(429AF92C-A51F-11d2-861E-00C04FA35C89)
+]
+coclass HostDialogHelper
+{
+ [default] interface IHostDialogHelper;
+}
+
+/*****************************************************************************
+ * IDocHostUIHandler interface
+ */
+
+typedef enum tagDOCHOSTUITYPE {
+ DOCHOSTUITYPE_BROWSE = 0,
+ DOCHOSTUITYPE_AUTHOR = 1
+} DOCHOSTUITYPE;
+
+typedef enum tagDOCHOSTUIDBLCLK
+{
+ DOCHOSTUIDBLCLK_DEFAULT = 0,
+ DOCHOSTUIDBLCLK_SHOWPROPERTIES = 1,
+ DOCHOSTUIDBLCLK_SHOWCODE = 2
+} DOCHOSTUIDBLCLK;
+
+typedef enum tagDOCHOSTUIFLAG
+{
+ DOCHOSTUIFLAG_DIALOG = 0x00000001,
+ DOCHOSTUIFLAG_DISABLE_HELP_MENU = 0x00000002,
+ DOCHOSTUIFLAG_NO3DBORDER = 0x00000004,
+ DOCHOSTUIFLAG_SCROLL_NO = 0x00000008,
+ DOCHOSTUIFLAG_DISABLE_SCRIPT_INACTIVE = 0x00000010,
+ DOCHOSTUIFLAG_OPENNEWWIN = 0x00000020,
+ DOCHOSTUIFLAG_DISABLE_OFFSCREEN = 0x00000040,
+ DOCHOSTUIFLAG_FLAT_SCROLLBAR = 0x00000080,
+ DOCHOSTUIFLAG_DIV_BLOCKDEFAULT = 0x00000100,
+ DOCHOSTUIFLAG_ACTIVATE_CLIENTHIT_ONLY = 0x00000200,
+ DOCHOSTUIFLAG_OVERRIDEBEHAVIORFACTORY = 0x00000400,
+ DOCHOSTUIFLAG_CODEPAGELINKEDFONTS = 0x00000800,
+ DOCHOSTUIFLAG_URL_ENCODING_DISABLE_UTF8 = 0x00001000,
+ DOCHOSTUIFLAG_URL_ENCODING_ENABLE_UTF8 = 0x00002000,
+ DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE = 0x00004000,
+ DOCHOSTUIFLAG_ENABLE_INPLACE_NAVIGATION = 0x00010000,
+ DOCHOSTUIFLAG_IME_ENABLE_RECONVERSION = 0x00020000,
+ DOCHOSTUIFLAG_THEME = 0x00040000,
+ DOCHOSTUIFLAG_NOTHEME = 0x00080000,
+ DOCHOSTUIFLAG_NOPICS = 0x00100000,
+ DOCHOSTUIFLAG_NO3DOUTERBORDER = 0x00200000,
+ DOCHOSTUIFLAG_DISABLE_EDIT_NS_FIXUP = 0x00400000,
+ DOCHOSTUIFLAG_LOCAL_MACHINE_ACCESS_CHECK = 0x00800000,
+ DOCHOSTUIFLAG_DISABLE_UNTRUSTEDPROTOCOL = 0x01000000
+} DOCHOSTUIFLAG;
+
+[
+ object,
+ uuid(BD3F23C0-D43E-11CF-893B-00AA00BDCE1A),
+ pointer_default(unique),
+ local
+]
+interface IDocHostUIHandler : IUnknown
+{
+ typedef struct _DOCHOSTUIINFO
+ {
+ ULONG cbSize;
+ DWORD dwFlags;
+ DWORD dwDoubleClick;
+ OLECHAR *pchHostCss;
+ OLECHAR *pchHostNS;
+ } DOCHOSTUIINFO;
+
+ HRESULT ShowContextMenu(
+ [in] DWORD dwID,
+ [in] POINT *ppt,
+ [in] IUnknown *pcmdtReserved,
+ [in] IDispatch *pdispReserved);
+
+ HRESULT GetHostInfo([in, out] DOCHOSTUIINFO *pInfo);
+
+ HRESULT ShowUI(
+ [in] DWORD dwID,
+ [in] IOleInPlaceActiveObject *pActiveObject,
+ [in] IOleCommandTarget *pCommandTarget,
+ [in] IOleInPlaceFrame *pFrame,
+ [in] IOleInPlaceUIWindow *pDoc);
+
+ HRESULT HideUI();
+
+ HRESULT UpdateUI();
+
+ HRESULT EnableModeless([in] BOOL fEnable);
+
+ HRESULT OnDocWindowActivate([in] BOOL fActivate);
+
+ HRESULT OnFrameWindowActivate([in] BOOL fActivate);
+
+ HRESULT ResizeBorder(
+ [in] LPCRECT prcBorder,
+ [in] IOleInPlaceUIWindow *pUIWindow,
+ [in] BOOL fRameWindow);
+
+ HRESULT TranslateAccelerator(
+ [in] LPMSG lpMsg,
+ [in] const GUID *pguidCmdGroup,
+ [in] DWORD nCmdID);
+
+ HRESULT GetOptionKeyPath(
+ [out] LPOLESTR *pchKey,
+ [in] DWORD dw);
+
+ HRESULT GetDropTarget(
+ [in] IDropTarget *pDropTarget,
+ [out] IDropTarget **ppDropTarget);
+
+ HRESULT GetExternal([out] IDispatch **ppDispatch);
+
+ HRESULT TranslateUrl(
+ [in] DWORD dwTranslate,
+ [in] OLECHAR *pchURLIn,
+ [out] OLECHAR **ppchURLOut);
+
+ HRESULT FilterDataObject(
+ [in] IDataObject *pDO,
+ [out] IDataObject **ppDORet);
+}
+
+cpp_quote("DEFINE_GUID(CGID_DocHostCommandHandler,0xf38bc242,0xb950,0x11d1,0x89,0x18,0x00,0xc0,0x4f,0xc2,0xc8,0x36);")
+
+[
+ object,
+ uuid(3050F6D0-98b5-11CF-BB82-00AA00BDCE0B),
+ pointer_default(unique),
+ local
+]
+interface IDocHostUIHandler2 : IDocHostUIHandler
+{
+ HRESULT GetOverrideKeyPath(
+ [out] LPOLESTR *pchKey,
+ [in] DWORD dw);
+}
+
+/*****************************************************************************
+ * ICustomDoc interface
+ */
+[
+ object,
+ uuid(3050f3f0-98b5-11cf-bb82-00aa00bdce0b),
+ pointer_default(unique),
+ local
+]
+interface ICustomDoc : IUnknown
+{
+ HRESULT SetUIHandler([in] IDocHostUIHandler *pUIHandler);
+}
+
+/*****************************************************************************
+ * IDocHostShowUI interface
+ */
+[
+ object,
+ uuid(c4d244b0-d43e-11cf-893b-00aa00bdce1a),
+ pointer_default(unique),
+ local
+]
+interface IDocHostShowUI : IUnknown
+{
+ HRESULT ShowMessage(
+ [in] HWND hwnd,
+ [in] LPOLESTR lpstrText,
+ [in] LPOLESTR lpstrCaption,
+ [in] DWORD dwType,
+ [in] LPOLESTR lpstrHelpFile,
+ [in] DWORD dwHelpContext,
+ [out] LRESULT *plResult);
+
+ HRESULT ShowHelp(
+ [in] HWND hwnd,
+ [in] LPOLESTR pszHelpFile,
+ [in] UINT uCommand,
+ [in] DWORD dwData,
+ [in] POINT ptMouse,
+ [out] IDispatch *pDispatchObjectHit);
+}
+
+/*****************************************************************************
+ * IClassFactoryEx interface
+ */
+
+cpp_quote("#define IClassFactory3 IClassFactoryEx")
+cpp_quote("#define IID_IClassFactory3 IID_IClassFactoryEx")
+
+[
+ object,
+ uuid(342D1EA0-AE25-11D1-89C5-006008C3FBFC),
+ pointer_default(unique),
+ local
+]
+interface IClassFactoryEx : IClassFactory
+{
+ HRESULT CreateInstanceWithContext(
+ IUnknown *punkContext,
+ IUnknown *punkOuter,
+ REFIID riid,
+ [out] void **ppv);
+}
+
+cpp_quote("typedef HRESULT WINAPI SHOWHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("typedef HRESULT WINAPI SHOWHTMLDIALOGEXFN(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("typedef HRESULT WINAPI SHOWMODELESSHTMLDIALOGFN(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);")
+
+cpp_quote("EXTERN_C HRESULT WINAPI ShowHTMLDialog(HWND,IMoniker*,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("EXTERN_C HRESULT WINAPI ShowHTMLDialogEx(HWND,IMoniker*,DWORD,VARIANT*,WCHAR*,VARIANT*);")
+cpp_quote("EXTERN_C HRESULT WINAPI ShowModelessHTMLDialog(HWND,IMoniker*,VARIANT*,VARIANT*,IHTMLWindow2**);")
+cpp_quote("EXTERN_C HRESULT WINAPI RunHTMLApplication(HINSTANCE,HINSTANCE,LPSTR,int);")
+cpp_quote("EXTERN_C HRESULT WINAPI CreateHTMLPropertyPage(IMoniker*,IPropertyPage**);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl
new file mode 100644
index 00000000..913755d2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mshtml.idl
@@ -0,0 +1,18564 @@
+/*
+ * Copyright 2004-2010 Jacek Caban for CodeWeavers
+ * Copyright 2008 Konstantin Kondratyuk (Etersoft)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <mshtmdid.h>
+#include <mshtmcid.h>
+#include <olectl.h>
+
+import "ocidl.idl";
+import "dimm.idl";
+import "shtypes.idl";
+import "dispex.idl";
+
+cpp_quote("#include <olectl.h>")
+
+cpp_quote("DEFINE_GUID(SID_SEditCommandTarget, 0x3050f4b5,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
+cpp_quote("DEFINE_GUID(SID_SHTMLEditHost, 0x3050f6a0,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
+cpp_quote("DEFINE_GUID(SID_SHTMLEditServices, 0x3050f7f9,0x98b5,0x11cf,0xbb,0x82,0x00,0xaa,0x00,0xbd,0xce,0x0b);")
+cpp_quote("#define SID_SHTMLWindow IID_IHTMLWindow2")
+cpp_quote("#define SID_SElementBehaviorFactory IID_IElementBehaviorFactory")
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef FindText")
+cpp_quote("#endif")
+
+typedef enum {
+ POINTER_GRAVITY_Left,
+ POINTER_GRAVITY_Right,
+ POINTER_GRAVITY_Max = 2147483647
+} POINTER_GRAVITY;
+
+typedef enum {
+ CONTEXT_TYPE_None,
+ CONTEXT_TYPE_Text,
+ CONTEXT_TYPE_EnterScope,
+ CONTEXT_TYPE_ExitScope,
+ CONTEXT_TYPE_NoScope,
+ MARKUP_CONTEXT_TYPE_Max = 2147483647
+} MARKUP_CONTEXT_TYPE;
+
+typedef enum {
+ ELEM_ADJ_BeforeBegin,
+ ELEM_ADJ_AfterBegin,
+ ELEM_ADJ_BeforeEnd,
+ ELEM_ADJ_AfterEnd,
+ ELEMENT_ADJACENCY_Max = 2147483647
+} ELEMENT_ADJACENCY;
+
+typedef enum {
+ MOVEUNIT_PREVCHAR,
+ MOVEUNIT_NEXTCHAR,
+ MOVEUNIT_PREVCLUSTERBEG,
+ MOVEUNIT_NEXTCLUSTERBEG,
+ MOVEUNIT_PREVCLUSTEREND,
+ MOVEUNIT_NEXTCLUSTEREND,
+ MOVEUNIT_PREVWORDBEG,
+ MOVEUNIT_NEXTWORDBEG,
+ MOVEUNIT_PREVWORDEND,
+ MOVEUNIT_NEXTWORDEND,
+ MOVEUNIT_PREVPROOFWORD,
+ MOVEUNIT_NEXTPROOFWORD,
+ MOVEUNIT_NEXTURLBEG,
+ MOVEUNIT_PREVURLBEG,
+ MOVEUNIT_NEXTURLEND,
+ MOVEUNIT_PREVURLEND,
+ MOVEUNIT_PREVSENTENCE,
+ MOVEUNIT_NEXTSENTENCE,
+ MOVEUNIT_PREVBLOCK,
+ MOVEUNIT_NEXTBLOCK,
+ MOVEUNIT_ACTION_Max = 2147483647
+} MOVEUNIT_ACTION;
+
+typedef enum _SELECTION_TYPE {
+ SELECTION_TYPE_None,
+ SELECTION_TYPE_Caret,
+ SELECTION_TYPE_Text,
+ SELECTION_TYPE_Control,
+ SELECTION_TYPE_Max = 2147483647
+} SELECTION_TYPE;
+
+[
+ version(4.0),
+ uuid(3050F1C5-98B5-11CF-BB82-00AA00BDCE0B)
+]
+library MSHTML
+{
+
+importlib("stdole2.tlb");
+
+typedef enum _DomConstructor {
+ DomConstructorObject = 0,
+ DomConstructorAttr = 1,
+ DomConstructorBehaviorUrnsCollection = 2,
+ DomConstructorBookmarkCollection = 3,
+ DomConstructorCompatibleInfo = 4,
+ DomConstructorCompatibleInfoCollection = 5,
+ DomConstructorControlRangeCollection = 6,
+ DomConstructorCSSCurrentStyleDeclaration = 7,
+ DomConstructorCSSRuleList = 8,
+ DomConstructorCSSRuleStyleDeclaration = 9,
+ DomConstructorCSSStyleDeclaration = 10,
+ DomConstructorCSSStyleRule = 11,
+ DomConstructorCSSStyleSheet = 12,
+ DomConstructorDataTransfer = 13,
+ DomConstructorDOMImplementation = 14,
+ DomConstructorElement = 15,
+ DomConstructorEvent = 16,
+ DomConstructorHistory = 17,
+ DomConstructorHTCElementBehaviorDefaults = 18,
+ DomConstructorHTMLAnchorElement = 19,
+ DomConstructorHTMLAreaElement = 20,
+ DomConstructorHTMLAreasCollection = 21,
+ DomConstructorHTMLBaseElement = 22,
+ DomConstructorHTMLBaseFontElement = 23,
+ DomConstructorHTMLBGSoundElement = 24,
+ DomConstructorHTMLBlockElement = 25,
+ DomConstructorHTMLBodyElement = 26,
+ DomConstructorHTMLBRElement = 27,
+ DomConstructorHTMLButtonElement = 28,
+ DomConstructorHTMLCollection = 29,
+ DomConstructorHTMLCommentElement = 30,
+ DomConstructorHTMLDDElement = 31,
+ DomConstructorHTMLDivElement = 32,
+ DomConstructorHTMLDocument = 33,
+ DomConstructorHTMLDListElement = 34,
+ DomConstructorHTMLDTElement = 35,
+ DomConstructorHTMLEmbedElement = 36,
+ DomConstructorHTMLFieldSetElement = 37,
+ DomConstructorHTMLFontElement = 38,
+ DomConstructorHTMLFormElement = 39,
+ DomConstructorHTMLFrameElement = 40,
+ DomConstructorHTMLFrameSetElement = 41,
+ DomConstructorHTMLGenericElement = 42,
+ DomConstructorHTMLHeadElement = 43,
+ DomConstructorHTMLHeadingElement = 44,
+ DomConstructorHTMLHRElement = 45,
+ DomConstructorHTMLHtmlElement = 46,
+ DomConstructorHTMLIFrameElement = 47,
+ DomConstructorHTMLImageElement = 48,
+ DomConstructorHTMLInputElement = 49,
+ DomConstructorHTMLIsIndexElement = 50,
+ DomConstructorHTMLLabelElement = 51,
+ DomConstructorHTMLLegendElement = 52,
+ DomConstructorHTMLLIElement = 53,
+ DomConstructorHTMLLinkElement = 54,
+ DomConstructorHTMLMapElement = 55,
+ DomConstructorHTMLMarqueeElement = 56,
+ DomConstructorHTMLMetaElement = 57,
+ DomConstructorHTMLModelessDialog = 58,
+ DomConstructorHTMLNamespaceInfo = 59,
+ DomConstructorHTMLNamespaceInfoCollection = 60,
+ DomConstructorHTMLNextIdElement = 61,
+ DomConstructorHTMLNoShowElement = 62,
+ DomConstructorHTMLObjectElement = 63,
+ DomConstructorHTMLOListElement = 64,
+ DomConstructorHTMLOptionElement = 65,
+ DomConstructorHTMLParagraphElement = 66,
+ DomConstructorHTMLParamElement = 67,
+ DomConstructorHTMLPhraseElement = 68,
+ DomConstructorHTMLPluginsCollection = 69,
+ DomConstructorHTMLPopup = 70,
+ DomConstructorHTMLScriptElement = 71,
+ DomConstructorHTMLSelectElement = 72,
+ DomConstructorHTMLSpanElement = 73,
+ DomConstructorHTMLStyleElement = 74,
+ DomConstructorHTMLTableCaptionElement = 75,
+ DomConstructorHTMLTableCellElement = 76,
+ DomConstructorHTMLTableColElement = 77,
+ DomConstructorHTMLTableElement = 78,
+ DomConstructorHTMLTableRowElement = 79,
+ DomConstructorHTMLTableSectionElement = 80,
+ DomConstructorHTMLTextAreaElement = 81,
+ DomConstructorHTMLTextElement = 82,
+ DomConstructorHTMLTitleElement = 83,
+ DomConstructorHTMLUListElement = 84,
+ DomConstructorHTMLUnknownElement = 85,
+ DomConstructorImage = 86,
+ DomConstructorLocation = 87,
+ DomConstructorNamedNodeMap = 88,
+ DomConstructorNavigator = 89,
+ DomConstructorNodeList = 90,
+ DomConstructorOption = 91,
+ DomConstructorScreen = 92,
+ DomConstructorSelection = 93,
+ DomConstructorStaticNodeList = 94,
+ DomConstructorStorage = 95,
+ DomConstructorStyleSheetList = 96,
+ DomConstructorStyleSheetPage = 97,
+ DomConstructorStyleSheetPageList = 98,
+ DomConstructorText = 99,
+ DomConstructorTextRange = 100,
+ DomConstructorTextRangeCollection = 101,
+ DomConstructorTextRectangle = 102,
+ DomConstructorTextRectangleList = 103,
+ DomConstructorWindow = 104,
+ DomConstructorXDomainRequest = 105,
+ DomConstructorXMLHttpRequest = 106,
+ DomConstructorMax = 107,
+ DomConstructor_Max = 2147483647L
+} DomConstructor;
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051049b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMConstructor : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ HRESULT constructor([retval, out] IDispatch* * p);
+
+ HRESULT LookupGetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);
+
+ HRESULT LookupSetter([in] BSTR propname, [retval, out] VARIANT* ppDispHandler);
+
+ HRESULT DefineGetter([in] BSTR propname, [in] VARIANT* pdispHandler);
+
+ HRESULT DefineSetter([in] BSTR propname, [in] VARIANT* pdispHandler);
+}
+
+#define WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL \
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden] \
+ IDispatch *constructor()
+
+interface IHTMLDocument2;
+interface IHTMLElement2;
+interface IHTMLStyleSheetsCollection;
+interface IHTMLFrameBase;
+interface IHTMLStorage;
+interface IDOMEvent;
+
+/*****************************************************************************
+ * IHTMLFiltersCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F3EE-98B5-11Cf-BB82-00AA00BDCE0B)
+]
+interface IHTMLFiltersCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLFILTERSCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLFILTERSCOLLECTION__NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLFILTERSCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] VARIANT *pvarIndex,
+ [retval, out] VARIANT *pvarResult);
+}
+
+/*****************************************************************************
+ * IHTMLStyle interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F25E-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyle : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
+ HRESULT fontFamily([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), bindable, displaybind]
+ HRESULT fontFamily([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
+ HRESULT fontStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), bindable, displaybind]
+ HRESULT fontStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
+ HRESULT fontVariant([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), bindable, displaybind]
+ HRESULT fontVariant([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
+ HRESULT fontWeight([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), bindable, displaybind]
+ HRESULT fontWeight([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
+ HRESULT fontSize([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), bindable, displaybind]
+ HRESULT fontSize([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
+ HRESULT font([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONT), bindable, displaybind]
+ HRESULT font([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
+ HRESULT color([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_COLOR), bindable, displaybind]
+ HRESULT color([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
+ HRESULT background([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), bindable, displaybind]
+ HRESULT background([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+ HRESULT backgroundColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+ HRESULT backgroundColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+ HRESULT backgroundImage([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+ HRESULT backgroundImage([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+ HRESULT backgroundRepeat([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+ HRESULT backgroundRepeat([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+ HRESULT backgroundAttachment([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+ HRESULT backgroundAttachment([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+ HRESULT backgroundPosition([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+ HRESULT backgroundPosition([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+ HRESULT backgroundPositionX([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+ HRESULT backgroundPositionX([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+ HRESULT backgroundPositionY([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+ HRESULT backgroundPositionY([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
+ HRESULT wordSpacing([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), bindable, displaybind]
+ HRESULT wordSpacing([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
+ HRESULT letterSpacing([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), bindable, displaybind]
+ HRESULT letterSpacing([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
+ HRESULT textDecoration([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), bindable, displaybind]
+ HRESULT textDecoration([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+ HRESULT textDecorationNone([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+ HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+ HRESULT textDecorationUnderline([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+ HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+ HRESULT textDecorationOverline([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+ HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+ HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+ HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+ HRESULT textDecorationBlink([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+ HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
+ HRESULT verticalAlign([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), bindable, displaybind]
+ HRESULT verticalAlign([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
+ HRESULT textTransform([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), bindable, displaybind]
+ HRESULT textTransform([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
+ HRESULT textAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), bindable, displaybind]
+ HRESULT textAlign([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
+ HRESULT textIndent([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), bindable, displaybind]
+ HRESULT textIndent([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
+ HRESULT lineHeight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), bindable, displaybind]
+ HRESULT lineHeight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
+ HRESULT marginTop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), bindable, displaybind]
+ HRESULT marginTop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
+ HRESULT marginRight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), bindable, displaybind]
+ HRESULT marginRight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
+ HRESULT marginBottom([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), bindable, displaybind]
+ HRESULT marginBottom([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
+ HRESULT marginLeft([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), bindable, displaybind]
+ HRESULT marginLeft([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
+ HRESULT margin([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGIN), bindable, displaybind]
+ HRESULT margin([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
+ HRESULT paddingTop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), bindable, displaybind]
+ HRESULT paddingTop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
+ HRESULT paddingRight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), bindable, displaybind]
+ HRESULT paddingRight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
+ HRESULT paddingBottom([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), bindable, displaybind]
+ HRESULT paddingBottom([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
+ HRESULT paddingLeft([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), bindable, displaybind]
+ HRESULT paddingLeft([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
+ HRESULT padding([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDING), bindable, displaybind]
+ HRESULT padding([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
+ HRESULT border([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDER), bindable, displaybind]
+ HRESULT border([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
+ HRESULT borderTop([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), bindable, displaybind]
+ HRESULT borderTop([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
+ HRESULT borderRight([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), bindable, displaybind]
+ HRESULT borderRight([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
+ HRESULT borderBottom([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), bindable, displaybind]
+ HRESULT borderBottom([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
+ HRESULT borderLeft([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), bindable, displaybind]
+ HRESULT borderLeft([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
+ HRESULT borderColor([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), bindable, displaybind]
+ HRESULT borderColor([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
+ HRESULT borderTopColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), bindable, displaybind]
+ HRESULT borderTopColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+ HRESULT borderRightColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+ HRESULT borderRightColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+ HRESULT borderBottomColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+ HRESULT borderBottomColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+ HRESULT borderLeftColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+ HRESULT borderLeftColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
+ HRESULT borderWidth([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), bindable, displaybind]
+ HRESULT borderWidth([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
+ HRESULT borderTopWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), bindable, displaybind]
+ HRESULT borderTopWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+ HRESULT borderRightWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+ HRESULT borderRightWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+ HRESULT borderBottomWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+ HRESULT borderBottomWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+ HRESULT borderLeftWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+ HRESULT borderLeftWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
+ HRESULT borderStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), bindable, displaybind]
+ HRESULT borderStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
+ HRESULT borderTopStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), bindable, displaybind]
+ HRESULT borderTopStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+ HRESULT borderRightStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+ HRESULT borderRightStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+ HRESULT borderBottomStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+ HRESULT borderBottomStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+ HRESULT borderLeftStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+ HRESULT borderLeftStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_WIDTH), bindable, displaybind]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_HEIGHT), bindable, displaybind]
+ HRESULT height([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
+ HRESULT styleFloat([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), bindable, displaybind]
+ HRESULT styleFloat([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
+ HRESULT clear([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CLEAR), bindable, displaybind]
+ HRESULT clear([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
+ HRESULT display([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_DISPLAY), bindable, displaybind]
+ HRESULT display([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
+ HRESULT visibility([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), bindable, displaybind]
+ HRESULT visibility([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
+ HRESULT listStyleType([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), bindable, displaybind]
+ HRESULT listStyleType([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+ HRESULT listStylePosition([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+ HRESULT listStylePosition([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+ HRESULT listStyleImage([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+ HRESULT listStyleImage([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
+ HRESULT listStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), bindable, displaybind]
+ HRESULT listStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
+ HRESULT whiteSpace([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), bindable, displaybind]
+ HRESULT whiteSpace([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
+ HRESULT top([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TOP), bindable, displaybind]
+ HRESULT top([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
+ HRESULT left([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LEFT), bindable, displaybind]
+ HRESULT left([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSITION), bindable, displaybind]
+ HRESULT position([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
+ HRESULT zIndex([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_ZINDEX), bindable, displaybind]
+ HRESULT zIndex([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
+ HRESULT overflow([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), bindable, displaybind]
+ HRESULT overflow([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+ HRESULT pageBreakBefore([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+ HRESULT pageBreakBefore([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
+ HRESULT pageBreakAfter([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), bindable, displaybind]
+ HRESULT pageBreakAfter([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
+ HRESULT cssText([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), bindable, displaybind]
+ HRESULT cssText([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
+ HRESULT pixelTop([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), bindable, displaybind, hidden]
+ HRESULT pixelTop([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
+ HRESULT pixelLeft([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), bindable, displaybind, hidden]
+ HRESULT pixelLeft([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
+ HRESULT pixelWidth([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), bindable, displaybind, hidden]
+ HRESULT pixelWidth([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
+ HRESULT pixelHeight([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), bindable, displaybind, hidden]
+ HRESULT pixelHeight([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
+ HRESULT posTop([in] float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSTOP), bindable, displaybind]
+ HRESULT posTop([retval, out] float *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
+ HRESULT posLeft([in] float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSLEFT), bindable, displaybind]
+ HRESULT posLeft([retval, out] float *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
+ HRESULT posWidth([in] float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), bindable, displaybind]
+ HRESULT posWidth([retval, out] float *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
+ HRESULT posHeight([in] float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), bindable, displaybind]
+ HRESULT posHeight([retval, out] float *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
+ HRESULT cursor([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CURSOR), bindable, displaybind]
+ HRESULT cursor([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
+ HRESULT clip([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CLIP), bindable, displaybind]
+ HRESULT clip([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
+ HRESULT filter([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FILTER), bindable, displaybind]
+ HRESULT filter([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR strAttributeName,
+ [in] VARIANT AttributeValue,
+ [defaultvalue(1), in] LONG lFlags);
+
+ [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(0), in] LONG lFlags,
+ [retval, out] VARIANT *AttributeValue);
+
+ [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(1), in]
+ LONG lFlags,
+ [retval, out] VARIANT_BOOL *pfSuccess);
+
+ [id(DISPID_IHTMLSTYLE_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+}
+
+/*****************************************************************************
+ * IHTMLStyle2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4a2-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+ HRESULT tableLayout([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+ HRESULT tableLayout([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+ HRESULT borderCollapse([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+ HRESULT borderCollapse([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+ HRESULT direction([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+ HRESULT direction([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+ HRESULT behavior([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+ HRESULT behavior([out, retval] BSTR *p);
+
+ [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
+ HRESULT setExpression(
+ [in] BSTR propname,
+ [in] BSTR expression,
+ [in, defaultvalue("")] BSTR language);
+
+ [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
+ HRESULT getExpression(
+ [in] BSTR propname,
+ [out, retval] VARIANT *expression);
+
+ [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
+ HRESULT removeExpression(
+ [in] BSTR propname,
+ [out, retval] VARIANT_BOOL *pfSuccess);
+
+ [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+ HRESULT position([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+ HRESULT position([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+ HRESULT unicodeBidi([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+ HRESULT unicodeBidi([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+ HRESULT bottom([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+ HRESULT bottom([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+ HRESULT right([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+ HRESULT right([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+ HRESULT pixelBottom([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+ HRESULT pixelBottom([out, retval] LONG *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+ HRESULT pixelRight([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+ HRESULT pixelRight([out, retval] LONG *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+ HRESULT posBottom([in] float v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+ HRESULT posBottom([out, retval] float *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+ HRESULT posRight([in] float v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+ HRESULT posRight([out, retval] float *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+ HRESULT imeMode([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+ HRESULT imeMode([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+ HRESULT rubyAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+ HRESULT rubyAlign([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+ HRESULT rubyPosition([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+ HRESULT rubyPosition([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+ HRESULT rubyOverhang([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+ HRESULT rubyOverhang([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+ HRESULT layoutGridChar([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+ HRESULT layoutGridChar([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+ HRESULT layoutGridLine([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+ HRESULT layoutGridLine([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+ HRESULT layoutGridMode([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+ HRESULT layoutGridMode([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+ HRESULT layoutGridType([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+ HRESULT layoutGridType([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+ HRESULT layoutGrid([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+ HRESULT layoutGrid([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+ HRESULT wordBreak([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+ HRESULT wordBreak([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+ HRESULT lineBreak([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+ HRESULT lineBreak([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+ HRESULT textJustify([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+ HRESULT textJustify([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+ HRESULT textJustifyTrim([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+ HRESULT textJustifyTrim([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+ HRESULT textKashida([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+ HRESULT textKashida([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+ HRESULT textAutospace([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+ HRESULT textAutospace([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+ HRESULT overflowX([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+ HRESULT overflowX([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+ HRESULT overflowY([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+ HRESULT overflowY([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+ HRESULT accelerator([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+ HRESULT accelerator([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLRuleStyle interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F3CF-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLRuleStyle : IDispatch
+{
+ [propput, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
+ HRESULT fontFamily([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FONTFAMILY), bindable, displaybind]
+ HRESULT fontFamily([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
+ HRESULT fontStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FONTSTYLE), bindable, displaybind]
+ HRESULT fontStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
+ HRESULT fontVariant([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FONTVARIANT), bindable, displaybind]
+ HRESULT fontVariant([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
+ HRESULT fontWeight([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FONTWEIGHT), bindable, displaybind]
+ HRESULT fontWeight([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
+ HRESULT fontSize([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FONTSIZE), bindable, displaybind]
+ HRESULT fontSize([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
+ HRESULT font([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FONT), bindable, displaybind]
+ HRESULT font([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
+ HRESULT color([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_COLOR), bindable, displaybind]
+ HRESULT color([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
+ HRESULT background([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUND), bindable, displaybind]
+ HRESULT background([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+ HRESULT backgroundColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDCOLOR), bindable, displaybind]
+ HRESULT backgroundColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+ HRESULT backgroundImage([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDIMAGE), bindable, displaybind]
+ HRESULT backgroundImage([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+ HRESULT backgroundRepeat([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDREPEAT), bindable, displaybind]
+ HRESULT backgroundRepeat([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+ HRESULT backgroundAttachment([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDATTACHMENT), bindable, displaybind]
+ HRESULT backgroundAttachment([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+ HRESULT backgroundPosition([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITION), bindable, displaybind]
+ HRESULT backgroundPosition([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+ HRESULT backgroundPositionX([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONX), bindable, displaybind]
+ HRESULT backgroundPositionX([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+ HRESULT backgroundPositionY([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BACKGROUNDPOSITIONY), bindable, displaybind]
+ HRESULT backgroundPositionY([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
+ HRESULT wordSpacing([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_WORDSPACING), bindable, displaybind]
+ HRESULT wordSpacing([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
+ HRESULT letterSpacing([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LETTERSPACING), bindable, displaybind]
+ HRESULT letterSpacing([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
+ HRESULT textDecoration([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATION), bindable, displaybind]
+ HRESULT textDecoration([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+ HRESULT textDecorationNone([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONNONE), bindable, displaybind]
+ HRESULT textDecorationNone([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+ HRESULT textDecorationUnderline([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONUNDERLINE), bindable, displaybind]
+ HRESULT textDecorationUnderline([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+ HRESULT textDecorationOverline([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONOVERLINE), bindable, displaybind]
+ HRESULT textDecorationOverline([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+ HRESULT textDecorationLineThrough([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONLINETHROUGH), bindable, displaybind]
+ HRESULT textDecorationLineThrough([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+ HRESULT textDecorationBlink([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTDECORATIONBLINK), bindable, displaybind]
+ HRESULT textDecorationBlink([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
+ HRESULT verticalAlign([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_VERTICALALIGN), bindable, displaybind]
+ HRESULT verticalAlign([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
+ HRESULT textTransform([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTTRANSFORM), bindable, displaybind]
+ HRESULT textTransform([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
+ HRESULT textAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTALIGN), bindable, displaybind]
+ HRESULT textAlign([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
+ HRESULT textIndent([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TEXTINDENT), bindable, displaybind]
+ HRESULT textIndent([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
+ HRESULT lineHeight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LINEHEIGHT), bindable, displaybind]
+ HRESULT lineHeight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
+ HRESULT marginTop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_MARGINTOP), bindable, displaybind]
+ HRESULT marginTop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
+ HRESULT marginRight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_MARGINRIGHT), bindable, displaybind]
+ HRESULT marginRight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
+ HRESULT marginBottom([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_MARGINBOTTOM), bindable, displaybind]
+ HRESULT marginBottom([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
+ HRESULT marginLeft([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_MARGINLEFT), bindable, displaybind]
+ HRESULT marginLeft([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
+ HRESULT margin([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_MARGIN), bindable, displaybind]
+ HRESULT margin([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
+ HRESULT paddingTop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PADDINGTOP), bindable, displaybind]
+ HRESULT paddingTop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
+ HRESULT paddingRight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PADDINGRIGHT), bindable, displaybind]
+ HRESULT paddingRight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
+ HRESULT paddingBottom([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PADDINGBOTTOM), bindable, displaybind]
+ HRESULT paddingBottom([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
+ HRESULT paddingLeft([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PADDINGLEFT), bindable, displaybind]
+ HRESULT paddingLeft([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
+ HRESULT padding([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PADDING), bindable, displaybind]
+ HRESULT padding([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
+ HRESULT border([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDER), bindable, displaybind]
+ HRESULT border([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
+ HRESULT borderTop([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOP), bindable, displaybind]
+ HRESULT borderTop([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
+ HRESULT borderRight([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHT), bindable, displaybind]
+ HRESULT borderRight([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
+ HRESULT borderBottom([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOM), bindable, displaybind]
+ HRESULT borderBottom([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
+ HRESULT borderLeft([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFT), bindable, displaybind]
+ HRESULT borderLeft([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
+ HRESULT borderColor([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERCOLOR), bindable, displaybind]
+ HRESULT borderColor([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
+ HRESULT borderTopColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPCOLOR), bindable, displaybind]
+ HRESULT borderTopColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+ HRESULT borderRightColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTCOLOR), bindable, displaybind]
+ HRESULT borderRightColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+ HRESULT borderBottomColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMCOLOR), bindable, displaybind]
+ HRESULT borderBottomColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+ HRESULT borderLeftColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTCOLOR), bindable, displaybind]
+ HRESULT borderLeftColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
+ HRESULT borderWidth([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERWIDTH), bindable, displaybind]
+ HRESULT borderWidth([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
+ HRESULT borderTopWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPWIDTH), bindable, displaybind]
+ HRESULT borderTopWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+ HRESULT borderRightWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTWIDTH), bindable, displaybind]
+ HRESULT borderRightWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+ HRESULT borderBottomWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMWIDTH), bindable, displaybind]
+ HRESULT borderBottomWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+ HRESULT borderLeftWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTWIDTH), bindable, displaybind]
+ HRESULT borderLeftWidth([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
+ HRESULT borderStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERSTYLE), bindable, displaybind]
+ HRESULT borderStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
+ HRESULT borderTopStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERTOPSTYLE), bindable, displaybind]
+ HRESULT borderTopStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+ HRESULT borderRightStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERRIGHTSTYLE), bindable, displaybind]
+ HRESULT borderRightStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+ HRESULT borderBottomStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERBOTTOMSTYLE), bindable, displaybind]
+ HRESULT borderBottomStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+ HRESULT borderLeftStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_BORDERLEFTSTYLE), bindable, displaybind]
+ HRESULT borderLeftStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_WIDTH), bindable, displaybind]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_HEIGHT), bindable, displaybind]
+ HRESULT height([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
+ HRESULT styleFloat([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_STYLEFLOAT), bindable, displaybind]
+ HRESULT styleFloat([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
+ HRESULT clear([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_CLEAR), bindable, displaybind]
+ HRESULT clear([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
+ HRESULT display([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_DISPLAY), bindable, displaybind]
+ HRESULT display([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
+ HRESULT visibility([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_VISIBILITY), bindable, displaybind]
+ HRESULT visibility([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
+ HRESULT listStyleType([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLETYPE), bindable, displaybind]
+ HRESULT listStyleType([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+ HRESULT listStylePosition([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEPOSITION), bindable, displaybind]
+ HRESULT listStylePosition([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+ HRESULT listStyleImage([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLEIMAGE), bindable, displaybind]
+ HRESULT listStyleImage([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
+ HRESULT listStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LISTSTYLE), bindable, displaybind]
+ HRESULT listStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
+ HRESULT whiteSpace([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_WHITESPACE), bindable, displaybind]
+ HRESULT whiteSpace([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
+ HRESULT top([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_TOP), bindable, displaybind]
+ HRESULT top([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
+ HRESULT left([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_LEFT), bindable, displaybind]
+ HRESULT left([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_POSITION), bindable, displaybind]
+ HRESULT position([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
+ HRESULT zIndex([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_ZINDEX), bindable, displaybind]
+ HRESULT zIndex([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
+ HRESULT overflow([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_OVERFLOW), bindable, displaybind]
+ HRESULT overflow([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+ HRESULT pageBreakBefore([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKBEFORE), bindable, displaybind]
+ HRESULT pageBreakBefore([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
+ HRESULT pageBreakAfter([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_PAGEBREAKAFTER), bindable, displaybind]
+ HRESULT pageBreakAfter([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
+ HRESULT cssText([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_CSSTEXT), bindable, displaybind]
+ HRESULT cssText([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
+ HRESULT cursor([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_CURSOR), bindable, displaybind]
+ HRESULT cursor([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
+ HRESULT clip([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_CLIP), bindable, displaybind]
+ HRESULT clip([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
+ HRESULT filter([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRULESTYLE_FILTER), bindable, displaybind]
+ HRESULT filter([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLRULESTYLE_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR strAttributeName,
+ [in] VARIANT AttributeValue,
+ [defaultvalue(1), in] LONG lFlags);
+
+ [id(DISPID_IHTMLRULESTYLE_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(0), in] LONG lFlags,
+ [retval, out] VARIANT *AttributeValue);
+
+ [id(DISPID_IHTMLRULESTYLE_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(1), in] LONG lFlags,
+ [retval, out] VARIANT_BOOL *pfSuccess);
+}
+
+/*****************************************************************************
+ * DispHTMLStyle dispinterface
+ */
+[
+ hidden,
+ uuid(3050f55a-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyle
+{
+properties:
+methods:
+ [propput, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
+ void fontFamily(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTFAMILY), displaybind, bindable]
+ BSTR fontFamily();
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
+ void fontStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTSTYLE), displaybind, bindable]
+ BSTR fontStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
+ void fontVariant(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTVARIANT), displaybind, bindable]
+ BSTR fontVariant();
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
+ void fontWeight(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTWEIGHT), displaybind, bindable]
+ BSTR fontWeight();
+
+ [propput, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
+ void fontSize(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONTSIZE), displaybind, bindable]
+ VARIANT fontSize();
+
+ [propput, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
+ void font(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FONT), displaybind, bindable, nonbrowsable]
+ BSTR font();
+
+ [propput, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
+ void color(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_COLOR), displaybind, bindable]
+ VARIANT color();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
+ void background(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUND), displaybind, bindable, nonbrowsable]
+ BSTR background();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+ void backgroundColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+ VARIANT backgroundColor();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+ void backgroundImage(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+ BSTR backgroundImage();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+ void backgroundRepeat(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+ BSTR backgroundRepeat();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+ void backgroundAttachment(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+ BSTR backgroundAttachment();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
+ void backgroundPosition(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITION), displaybind, bindable, nonbrowsable]
+ BSTR backgroundPosition();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+ void backgroundPositionX(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+ VARIANT backgroundPositionX();
+
+ [propput, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+ void backgroundPositionY(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+ VARIANT backgroundPositionY();
+
+ [propput, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
+ void wordSpacing(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_WORDSPACING), displaybind, bindable]
+ VARIANT wordSpacing();
+
+ [propput, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
+ void letterSpacing(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LETTERSPACING), displaybind, bindable]
+ VARIANT letterSpacing();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
+ void textDecoration(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATION), displaybind, bindable]
+ BSTR textDecoration();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
+ void textDecorationNone(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONNONE), displaybind, bindable]
+ VARIANT_BOOL textDecorationNone();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
+ void textDecorationUnderline(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONUNDERLINE), displaybind, bindable]
+ VARIANT_BOOL textDecorationUnderline();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
+ void textDecorationOverline(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONOVERLINE), displaybind, bindable]
+ VARIANT_BOOL textDecorationOverline();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
+ void textDecorationLineThrough(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONLINETHROUGH), displaybind, bindable]
+ VARIANT_BOOL textDecorationLineThrough();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
+ void textDecorationBlink(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTDECORATIONBLINK), displaybind, bindable]
+ VARIANT_BOOL textDecorationBlink();
+
+ [propput, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
+ void verticalAlign(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_VERTICALALIGN), displaybind, bindable]
+ VARIANT verticalAlign();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
+ void textTransform(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTTRANSFORM), displaybind, bindable]
+ BSTR textTransform();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
+ void textAlign(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTALIGN), displaybind, bindable]
+ BSTR textAlign();
+
+ [propput, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
+ void textIndent(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TEXTINDENT), displaybind, bindable]
+ VARIANT textIndent();
+
+ [propput, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
+ void lineHeight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LINEHEIGHT), displaybind, bindable]
+ VARIANT lineHeight();
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
+ void marginTop(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINTOP), displaybind, bindable]
+ VARIANT marginTop();
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
+ void marginRight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINRIGHT), displaybind, bindable]
+ VARIANT marginRight();
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
+ void marginBottom(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINBOTTOM), displaybind, bindable]
+ VARIANT marginBottom();
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
+ void marginLeft(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGINLEFT), displaybind, bindable]
+ VARIANT marginLeft();
+
+ [propput, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
+ void margin(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_MARGIN), displaybind, bindable, nonbrowsable]
+ BSTR margin();
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
+ void paddingTop(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGTOP), displaybind, bindable]
+ VARIANT paddingTop();
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
+ void paddingRight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGRIGHT), displaybind, bindable]
+ VARIANT paddingRight();
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
+ void paddingBottom(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGBOTTOM), displaybind, bindable]
+ VARIANT paddingBottom();
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
+ void paddingLeft(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDINGLEFT), displaybind, bindable]
+ VARIANT paddingLeft();
+
+ [propput, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
+ void padding(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PADDING), displaybind, bindable, nonbrowsable]
+ BSTR padding();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
+ void border(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDER), displaybind, bindable, nonbrowsable]
+ BSTR border();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
+ void borderTop(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOP), displaybind, bindable]
+ BSTR borderTop();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
+ void borderRight(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHT), displaybind, bindable]
+ BSTR borderRight();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
+ void borderBottom(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOM), displaybind, bindable]
+ BSTR borderBottom();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
+ void borderLeft(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFT), displaybind, bindable]
+ BSTR borderLeft();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
+ void borderColor(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERCOLOR), displaybind, bindable]
+ BSTR borderColor();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+ void borderTopColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+ VARIANT borderTopColor();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+ void borderRightColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+ VARIANT borderRightColor();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+ void borderBottomColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+ VARIANT borderBottomColor();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+ void borderLeftColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+ VARIANT borderLeftColor();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
+ void borderWidth(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERWIDTH), displaybind, bindable]
+ BSTR borderWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+ void borderTopWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+ VARIANT borderTopWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+ void borderRightWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+ VARIANT borderRightWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+ void borderBottomWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+ VARIANT borderBottomWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+ void borderLeftWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+ VARIANT borderLeftWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
+ void borderStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERSTYLE), displaybind, bindable]
+ BSTR borderStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+ void borderTopStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+ BSTR borderTopStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+ void borderRightStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+ BSTR borderRightStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+ void borderBottomStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+ BSTR borderBottomStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+ void borderLeftStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+ BSTR borderLeftStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_WIDTH), displaybind, bindable]
+ VARIANT width();
+
+ [propput, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_HEIGHT), displaybind, bindable]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
+ void styleFloat(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_STYLEFLOAT), displaybind, bindable]
+ BSTR styleFloat();
+
+ [propput, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
+ void clear(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CLEAR), displaybind, bindable]
+ BSTR clear();
+
+ [propput, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
+ void display(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_DISPLAY), displaybind, bindable]
+ BSTR display();
+
+ [propput, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
+ void visibility(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_VISIBILITY), displaybind, bindable]
+ BSTR visibility();
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
+ void listStyleType(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLETYPE), displaybind, bindable]
+ BSTR listStyleType();
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+ void listStylePosition(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+ BSTR listStylePosition();
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+ void listStyleImage(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+ BSTR listStyleImage();
+
+ [propput, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
+ void listStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LISTSTYLE), displaybind, bindable, nonbrowsable]
+ BSTR listStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
+ void whiteSpace(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_WHITESPACE), displaybind, bindable]
+ BSTR whiteSpace();
+
+ [propput, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
+ void top(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_TOP), displaybind, bindable]
+ VARIANT top();
+
+ [propput, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
+ void left(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_LEFT), displaybind, bindable]
+ VARIANT left();
+
+ [propput, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
+ void zIndex(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE_ZINDEX), displaybind, bindable]
+ VARIANT zIndex();
+
+ [propput, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
+ void overflow(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_OVERFLOW), displaybind, bindable]
+ BSTR overflow();
+
+ [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+ void pageBreakBefore(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+ BSTR pageBreakBefore();
+
+ [propput, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+ void pageBreakAfter(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+ BSTR pageBreakAfter();
+
+ [propput, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
+ void cssText(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CSSTEXT), displaybind, bindable, nonbrowsable]
+ BSTR cssText();
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
+ void pixelTop(LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELTOP), displaybind, bindable, hidden]
+ LONG pixelTop();
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
+ void pixelLeft(LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELLEFT), displaybind, bindable, hidden]
+ LONG pixelLeft();
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
+ void pixelWidth(LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELWIDTH), displaybind, bindable, hidden]
+ LONG pixelWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
+ void pixelHeight(LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE_PIXELHEIGHT), displaybind, bindable, hidden]
+ LONG pixelHeight();
+
+ [propput, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
+ void posTop(float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSTOP), displaybind, bindable]
+ float posTop();
+
+ [propput, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
+ void posLeft(float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSLEFT), displaybind, bindable]
+ float posLeft();
+
+ [propput, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
+ void posWidth(float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSWIDTH), displaybind, bindable]
+ float posWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
+ void posHeight(float v);
+
+ [propget, id(DISPID_IHTMLSTYLE_POSHEIGHT), displaybind, bindable]
+ float posHeight();
+
+ [propput, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
+ void cursor(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CURSOR), displaybind, bindable]
+ BSTR cursor();
+
+ [propput, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
+ void clip(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_CLIP), displaybind, bindable]
+ BSTR clip();
+
+ [propput, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
+ void filter(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE_FILTER), displaybind, bindable]
+ BSTR filter();
+
+ [id(DISPID_IHTMLSTYLE_SETATTRIBUTE)]
+ void setAttribute(
+ [in] BSTR strAttributeName,
+ [in] VARIANT AttributeValue,
+ [in, defaultvalue(1)] LONG lFlags);
+
+ [id(DISPID_IHTMLSTYLE_GETATTRIBUTE)]
+ VARIANT getAttribute(
+ [in] BSTR strAttributeName,
+ [in, defaultvalue(0)] LONG lFlags);
+
+ [id(DISPID_IHTMLSTYLE_REMOVEATTRIBUTE)]
+ VARIANT_BOOL removeAttribute(
+ [in] BSTR strAttributeName,
+ [in, defaultvalue(1)] LONG lFlags);
+
+ [id(DISPID_IHTMLSTYLE_TOSTRING)]
+ BSTR toString();
+
+ [propput, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+ void tableLayout(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TABLELAYOUT), displaybind, bindable]
+ BSTR tableLayout();
+
+ [propput, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+ void borderCollapse(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_BORDERCOLLAPSE), displaybind, bindable]
+ BSTR borderCollapse();
+
+ [propput, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+ void direction(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_DIRECTION), displaybind, bindable]
+ BSTR direction();
+
+ [propput, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+ void behavior(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_BEHAVIOR), displaybind, bindable]
+ BSTR behavior();
+
+ [id(DISPID_IHTMLSTYLE2_SETEXPRESSION)]
+ void setExpression(
+ [in] BSTR propname,
+ [in] BSTR expression,
+ [in, defaultvalue("")] BSTR language);
+
+ [id(DISPID_IHTMLSTYLE2_GETEXPRESSION)]
+ VARIANT getExpression([in] BSTR propname);
+
+ [id(DISPID_IHTMLSTYLE2_REMOVEEXPRESSION)]
+ VARIANT_BOOL removeExpression([in] BSTR propname);
+
+ [propput, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+ void position(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_POSITION), displaybind, bindable]
+ BSTR position();
+
+ [propput, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+ void unicodeBidi(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_UNICODEBIDI), displaybind, bindable]
+ BSTR unicodeBidi();
+
+ [propput, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+ void bottom(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_BOTTOM), displaybind, bindable]
+ VARIANT bottom();
+
+ [propput, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+ void right(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RIGHT), displaybind, bindable]
+ VARIANT right();
+
+ [propput, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+ void pixelBottom(LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_PIXELBOTTOM), displaybind, bindable, hidden]
+ LONG pixelBottom();
+
+ [propput, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+ void pixelRight(LONG v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_PIXELRIGHT), displaybind, bindable, hidden]
+ LONG pixelRight();
+
+ [propput, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+ void posBottom(float v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_POSBOTTOM), displaybind, bindable]
+ float posBottom();
+
+ [propput, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+ void posRight(float v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_POSRIGHT), displaybind, bindable]
+ float posRight();
+
+ [propput, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+ void imeMode(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_IMEMODE), displaybind, bindable]
+ BSTR imeMode();
+
+ [propput, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+ void rubyAlign(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RUBYALIGN), displaybind, bindable]
+ BSTR rubyAlign();
+
+ [propput, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+ void rubyPosition(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RUBYPOSITION), displaybind, bindable]
+ BSTR rubyPosition();
+
+ [propput, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+ void rubyOverhang(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_RUBYOVERHANG), displaybind, bindable]
+ BSTR rubyOverhang();
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+ void layoutGridChar(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR), displaybind, bindable]
+ VARIANT layoutGridChar();
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+ void layoutGridLine(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE), displaybind, bindable]
+ VARIANT layoutGridLine();
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+ void layoutGridMode(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE), displaybind, bindable]
+ BSTR layoutGridMode();
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+ void layoutGridType(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE), displaybind, bindable]
+ BSTR layoutGridType();
+
+ [propput, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+ void layoutGrid(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LAYOUTGRID), displaybind, bindable, nonbrowsable]
+ BSTR layoutGrid();
+
+ [propput, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+ void wordBreak(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_WORDBREAK), displaybind, bindable]
+ BSTR wordBreak();
+
+ [propput, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+ void lineBreak(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_LINEBREAK), displaybind, bindable]
+ BSTR lineBreak();
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+ void textJustify(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFY), displaybind, bindable]
+ BSTR textJustify();
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+ void textJustifyTrim(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM), displaybind, bindable]
+ BSTR textJustifyTrim();
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+ void textKashida(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTKASHIDA), displaybind, bindable]
+ VARIANT textKashida();
+
+ [propput, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+ void textAutospace(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_TEXTAUTOSPACE), displaybind, bindable]
+ BSTR textAutospace();
+
+ [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+ void overflowX(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWX), displaybind, bindable]
+ BSTR overflowX();
+
+ [propput, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+ void overflowY(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_OVERFLOWY), displaybind, bindable]
+ BSTR overflowY();
+
+ [propput, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+ void accelerator(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE2_ACCELERATOR), displaybind, bindable]
+ BSTR accelerator();
+
+ [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+ void layoutFlow(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+ BSTR layoutFlow();
+
+ [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+ void zoom(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+ VARIANT zoom();
+
+ [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+ void wordWrap(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+ BSTR wordWrap();
+
+ [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+ void textUnderlinePosition(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+ BSTR textUnderlinePosition();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+ void scrollbarBaseColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+ VARIANT scrollbarBaseColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+ void scrollbarFaceColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+ VARIANT scrollbarFaceColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+ void scrollbar3dLightColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+ VARIANT scrollbar3dLightColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+ void scrollbarShadowColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+ VARIANT scrollbarShadowColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+ void scrollbarHighlightColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+ VARIANT scrollbarHighlightColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+ void scrollbarDarkShadowColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+ VARIANT scrollbarDarkShadowColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+ void scrollbarArrowColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+ VARIANT scrollbarArrowColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+ void scrollbarTrackColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+ VARIANT scrollbarTrackColor();
+
+ [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+ void writingMode(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+ BSTR writingMode();
+
+ [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+ void textAlignLast(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+ BSTR textAlignLast();
+
+ [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+ void textKashidaSpace(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+ VARIANT textKashidaSpace();
+
+ [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+ void textOverflow(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+ BSTR textOverflow();
+
+ [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+ void minHeight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+ VARIANT minHeight();
+
+ [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+ void msInterpolationMode(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+ BSTR msInterpolationMode();
+
+ [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+ void maxHeight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+ VARIANT maxHeight();
+
+ [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+ void minWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+ VARIANT minWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+ void maxWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+ VARIANT maxWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+ void content(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+ BSTR content();
+
+ [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+ void captionSide(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+ BSTR captionSide();
+
+ [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+ void counterIncrement(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+ BSTR counterIncrement();
+
+ [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+ void counterReset(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+ BSTR counterReset();
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+ void outline(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+ BSTR outline();
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+ void outlineWidth(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+ VARIANT outlineWidth();
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+ void outlineStyle(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+ BSTR outlineStyle();
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+ void outlineColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+ VARIANT outlineColor();
+
+ [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+ void boxSizing(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+ BSTR boxSizing();
+
+ [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+ void borderSpacing(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+ BSTR borderSpacing();
+
+ [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+ void orphans(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+ VARIANT orphans();
+
+ [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+ void widows(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+ VARIANT widows();
+
+ [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+ void pageBreakInside(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+ BSTR pageBreakInside();
+
+ [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+ void emptyCells(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+ BSTR emptyCells();
+
+ [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+ void msBlockProgression(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+ BSTR msBlockProgression();
+
+ [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+ void quotes(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+ BSTR quotes();
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f656-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle3 : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+ HRESULT layoutFlow([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_LAYOUTFLOW), displaybind, bindable]
+ HRESULT layoutFlow([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+ HRESULT zoom([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_ZOOM), displaybind, bindable]
+ HRESULT zoom([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+ HRESULT wordWrap([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_WORDWRAP), displaybind, bindable]
+ HRESULT wordWrap([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+ HRESULT textUnderlinePosition([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION), displaybind, bindable]
+ HRESULT textUnderlinePosition([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+ HRESULT scrollbarBaseColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR), displaybind, bindable]
+ HRESULT scrollbarBaseColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+ HRESULT scrollbarFaceColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR), displaybind, bindable]
+ HRESULT scrollbarFaceColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+ HRESULT scrollbar3dLightColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+ HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+ HRESULT scrollbarShadowColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+ HRESULT scrollbarShadowColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+ HRESULT scrollbarHighlightColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+ HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+ HRESULT scrollbarDarkShadowColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+ HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+ HRESULT scrollbarArrowColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR), displaybind, bindable]
+ HRESULT scrollbarArrowColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+ HRESULT scrollbarTrackColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR), displaybind, bindable]
+ HRESULT scrollbarTrackColor([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+ HRESULT writingMode([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_WRITINGMODE), displaybind, bindable]
+ HRESULT writingMode([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+ HRESULT textAlignLast([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_TEXTALIGNLAST), displaybind, bindable]
+ HRESULT textAlignLast([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+ HRESULT textKashidaSpace([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE), displaybind, bindable]
+ HRESULT textKashidaSpace([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ * IHTMLSytyle4 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f816-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle4 : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+ HRESULT textOverflow([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE4_TEXTOVERFLOW), displaybind, bindable]
+ HRESULT textOverflow([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+ HRESULT minHeight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE4_MINHEIGHT), displaybind, bindable]
+ HRESULT minHeight([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ * IHTMLSytyle5 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f33a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle5 : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+ HRESULT msInterpolationMode([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MSINTERPOLATIONMODE), displaybind, bindable]
+ HRESULT msInterpolationMode([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+ HRESULT maxHeight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MAXHEIGHT), displaybind, bindable]
+ HRESULT maxHeight([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+ HRESULT minWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MINWIDTH), displaybind, bindable]
+ HRESULT minWidth([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+ HRESULT maxWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE5_MAXWIDTH), displaybind, bindable]
+ HRESULT maxWidth([out, retval] VARIANT *p);
+}
+
+/*****************************************************************************
+ * IHTMLSytyle6 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510480-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyle6 : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+ HRESULT content([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_CONTENT), displaybind, bindable]
+ HRESULT content([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+ HRESULT captionSide([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_CAPTIONSIDE), displaybind, bindable]
+ HRESULT captionSide([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+ HRESULT counterIncrement([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_COUNTERINCREMENT), displaybind, bindable]
+ HRESULT counterIncrement([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+ HRESULT counterReset([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_COUNTERRESET), displaybind, bindable]
+ HRESULT counterReset([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+ HRESULT outline([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINE), displaybind, bindable]
+ HRESULT outline([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+ HRESULT outlineWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINEWIDTH), displaybind, bindable]
+ HRESULT outlineWidth([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+ HRESULT outlineStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINESTYLE), displaybind, bindable]
+ HRESULT outlineStyle([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+ HRESULT outlineColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_OUTLINECOLOR), displaybind, bindable]
+ HRESULT outlineColor([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+ HRESULT boxSizing([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_BOXSIZING), displaybind, bindable]
+ HRESULT boxSizing([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+ HRESULT borderSpacing([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_BORDERSPACING), displaybind, bindable]
+ HRESULT borderSpacing([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+ HRESULT orphans([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_ORPHANS), displaybind, bindable]
+ HRESULT orphans([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+ HRESULT widows([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_WIDOWS), displaybind, bindable]
+ HRESULT widows([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+ HRESULT pageBreakInside([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_PAGEBREAKINSIDE), displaybind, bindable]
+ HRESULT pageBreakInside([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+ HRESULT emptyCells([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_EMPTYCELLS), displaybind, bindable]
+ HRESULT emptyCells([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+ HRESULT msBlockProgression([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_MSBLOCKPROGRESSION), displaybind, bindable]
+ HRESULT msBlockProgression([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+ HRESULT quotes([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLE6_QUOTES), displaybind, bindable]
+ HRESULT quotes([out, retval] BSTR *p);
+}
+
+[
+ noncreatable,
+ uuid(3050f285-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyle
+{
+ [default] dispinterface DispHTMLStyle;
+ interface IHTMLStyle;
+ interface IHTMLStyle2;
+ interface IHTMLStyle3;
+ interface IHTMLStyle4;
+ interface IHTMLStyle5;
+ interface IHTMLStyle6;
+}
+
+/*****************************************************************************
+ * IHTMLRenderStyle interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f6ae-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLRenderStyle : IDispatch
+{
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
+ HRESULT textLineThroughStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE), displaybind, bindable]
+ HRESULT textLineThroughStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
+ HRESULT textUnderlineStyle([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE), displaybind, bindable]
+ HRESULT textUnderlineStyle([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
+ HRESULT textEffect([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTEFFECT), displaybind, bindable]
+ HRESULT textEffect([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
+ HRESULT textColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTCOLOR), displaybind, bindable]
+ HRESULT textColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
+ HRESULT textBackgroundColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTBACKGROUNDCOLOR), displaybind, bindable]
+ HRESULT textBackgroundColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
+ HRESULT textDecorationColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATIONCOLOR), displaybind, bindable]
+ HRESULT textDecorationColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
+ HRESULT renderingPriority([in] LONG v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_RENDERINGPRIORITY), displaybind, bindable]
+ HRESULT renderingPriority([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
+ HRESULT defaultTextSelection([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_DEFAULTTEXTSELECTION), displaybind, bindable]
+ HRESULT defaultTextSelection([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
+ HRESULT textDecoration([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLRENDERSTYLE_TEXTDECORATION), displaybind, bindable]
+ HRESULT textDecoration([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLCurrentStyle interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f3db-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle : IDispatch
+{
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
+ HRESULT position([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
+ HRESULT styleFloat([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
+ HRESULT color([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+ HRESULT backgroundColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
+ HRESULT fontFamily([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
+ HRESULT fontStyle([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
+ HRESULT fontVariant([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
+ HRESULT fontWeight([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
+ HRESULT fontSize([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+ HRESULT backgroundImage([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+ HRESULT backgroundPositionX([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+ HRESULT backgroundPositionY([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+ HRESULT backgroundRepeat([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+ HRESULT borderLeftColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+ HRESULT borderTopColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+ HRESULT borderRightColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+ HRESULT borderBottomColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+ HRESULT borderTopStyle([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+ HRESULT borderRightStyle([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+ HRESULT borderBottomStyle([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+ HRESULT borderLeftStyle([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+ HRESULT borderTopWidth([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+ HRESULT borderRightWidth([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+ HRESULT borderBottomWidth([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+ HRESULT borderLeftWidth([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
+ HRESULT left([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
+ HRESULT top([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
+ HRESULT height([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
+ HRESULT paddingLeft([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
+ HRESULT paddingTop([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
+ HRESULT paddingRight([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
+ HRESULT paddingBottom([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
+ HRESULT textAlign([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
+ HRESULT textDecoration([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
+ HRESULT display([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
+ HRESULT visibility([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
+ HRESULT zIndex([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
+ HRESULT letterSpacing([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
+ HRESULT lineHeight([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
+ HRESULT textIndent([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
+ HRESULT verticalAlign([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+ HRESULT backgroundAttachment([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
+ HRESULT marginTop([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
+ HRESULT marginRight([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
+ HRESULT marginBottom([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
+ HRESULT marginLeft([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
+ HRESULT clear([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
+ HRESULT listStyleType([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+ HRESULT listStylePosition([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+ HRESULT listStyleImage([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
+ HRESULT clipTop([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
+ HRESULT clipRight([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
+ HRESULT clipBottom([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
+ HRESULT clipLeft([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
+ HRESULT overflow([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+ HRESULT pageBreakBefore([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+ HRESULT pageBreakAfter([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
+ HRESULT cursor([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
+ HRESULT tableLayout([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
+ HRESULT borderCollapse([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
+ HRESULT direction([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
+ HRESULT behavior([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(0), in] LONG lFlags,
+ [retval, out] VARIANT *AttributeValue);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
+ HRESULT unicodeBidi([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
+ HRESULT right([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
+ HRESULT bottom([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
+ HRESULT imeMode([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
+ HRESULT rubyAlign([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
+ HRESULT rubyPosition([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
+ HRESULT rubyOverhang([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
+ HRESULT textAutospace([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
+ HRESULT lineBreak([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
+ HRESULT wordBreak([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
+ HRESULT textJustify([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
+ HRESULT textJustifyTrim([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
+ HRESULT textKashida([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
+ HRESULT blockDirection([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
+ HRESULT layoutGridChar([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
+ HRESULT layoutGridLine([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
+ HRESULT layoutGridMode([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
+ HRESULT layoutGridType([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
+ HRESULT borderStyle([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
+ HRESULT borderColor([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
+ HRESULT borderWidth([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
+ HRESULT padding([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
+ HRESULT margin([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
+ HRESULT accelerator([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
+ HRESULT overflowX([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
+ HRESULT overflowY([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
+ HRESULT textTransform([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLCurrentStyle2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f658-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
+ HRESULT layoutFlow([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
+ HRESULT wordWrap([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
+ HRESULT textUnderlinePosition([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
+ HRESULT hasLayout([retval, out] VARIANT_BOOL * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
+ HRESULT scrollbarBaseColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
+ HRESULT scrollbarFaceColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+ HRESULT scrollbar3dLightColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+ HRESULT scrollbarShadowColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+ HRESULT scrollbarHighlightColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+ HRESULT scrollbarDarkShadowColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
+ HRESULT scrollbarArrowColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
+ HRESULT scrollbarTrackColor([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
+ HRESULT writingMode([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
+ HRESULT zoom([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
+ HRESULT filter([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
+ HRESULT textAlignLast([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
+ HRESULT textKashidaSpace([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
+ HRESULT isBlock([retval, out] VARIANT_BOOL * p);
+}
+
+/*****************************************************************************
+ * IHTMLCurrentStyle3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f818-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle3 : IDispatch
+{
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
+ HRESULT textOverflow([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
+ HRESULT minHeight([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
+ HRESULT wordSpacing([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
+ HRESULT whiteSpace([retval, out] BSTR * p);
+}
+
+/*****************************************************************************
+ * IHTMLCurrentStyle4 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f33b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCurrentStyle4 : IDispatch
+{
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]
+ HRESULT msInterpolationMode([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]
+ HRESULT maxHeight([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]
+ HRESULT minWidth([retval, out] VARIANT * p);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
+ HRESULT maxWidth([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ * DispHTMLCurrentStyle dispinterface
+ */
+[
+ hidden,
+ uuid(3050f557-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLCurrentStyle
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_POSITION), displaybind, bindable]
+ BSTR position();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_STYLEFLOAT), displaybind, bindable]
+ BSTR styleFloat();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_COLOR), displaybind, bindable]
+ VARIANT color();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDCOLOR), displaybind, bindable]
+ VARIANT backgroundColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTFAMILY), displaybind, bindable]
+ BSTR fontFamily();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSTYLE), displaybind, bindable]
+ BSTR fontStyle();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTVARIANT), displaybind, bindable, hidden]
+ BSTR fontVariant();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTWEIGHT), displaybind, bindable]
+ VARIANT fontWeight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_FONTSIZE), displaybind, bindable]
+ VARIANT fontSize();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDIMAGE), displaybind, bindable]
+ BSTR backgroundImage();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONX), displaybind, bindable]
+ VARIANT backgroundPositionX();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDPOSITIONY), displaybind, bindable]
+ VARIANT backgroundPositionY();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDREPEAT), displaybind, bindable]
+ BSTR backgroundRepeat();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTCOLOR), displaybind, bindable]
+ VARIANT borderLeftColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPCOLOR), displaybind, bindable]
+ VARIANT borderTopColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTCOLOR), displaybind, bindable]
+ VARIANT borderRightColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMCOLOR), displaybind, bindable]
+ VARIANT borderBottomColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPSTYLE), displaybind, bindable]
+ BSTR borderTopStyle();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTSTYLE), displaybind, bindable]
+ BSTR borderRightStyle();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMSTYLE), displaybind, bindable]
+ BSTR borderBottomStyle();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTSTYLE), displaybind, bindable]
+ BSTR borderLeftStyle();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERTOPWIDTH), displaybind, bindable]
+ VARIANT borderTopWidth();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERRIGHTWIDTH), displaybind, bindable]
+ VARIANT borderRightWidth();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERBOTTOMWIDTH), displaybind, bindable]
+ VARIANT borderBottomWidth();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERLEFTWIDTH), displaybind, bindable]
+ VARIANT borderLeftWidth();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LEFT), displaybind, bindable]
+ VARIANT left();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TOP), displaybind, bindable]
+ VARIANT top();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_WIDTH), displaybind, bindable]
+ VARIANT width();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_HEIGHT), displaybind, bindable]
+ VARIANT height();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGLEFT), displaybind, bindable]
+ VARIANT paddingLeft();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGTOP), displaybind, bindable]
+ VARIANT paddingTop();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGRIGHT), displaybind, bindable]
+ VARIANT paddingRight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDINGBOTTOM), displaybind, bindable]
+ VARIANT paddingBottom();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTALIGN), displaybind, bindable]
+ BSTR textAlign();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTDECORATION), displaybind, bindable]
+ BSTR textDecoration();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_DISPLAY), displaybind, bindable]
+ BSTR display();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_VISIBILITY), displaybind, bindable]
+ BSTR visibility();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_ZINDEX), displaybind, bindable]
+ VARIANT zIndex();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LETTERSPACING), displaybind, bindable]
+ VARIANT letterSpacing();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEHEIGHT), displaybind, bindable]
+ VARIANT lineHeight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTINDENT), displaybind, bindable]
+ VARIANT textIndent();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_VERTICALALIGN), displaybind, bindable]
+ VARIANT verticalAlign();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BACKGROUNDATTACHMENT), displaybind, bindable]
+ BSTR backgroundAttachment();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINTOP), displaybind, bindable]
+ VARIANT marginTop();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINRIGHT), displaybind, bindable]
+ VARIANT marginRight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINBOTTOM), displaybind, bindable]
+ VARIANT marginBottom();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGINLEFT), displaybind, bindable]
+ VARIANT marginLeft();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLEAR), displaybind, bindable]
+ BSTR clear();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLETYPE), displaybind, bindable]
+ BSTR listStyleType();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEPOSITION), displaybind, bindable]
+ BSTR listStylePosition();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LISTSTYLEIMAGE), displaybind, bindable]
+ BSTR listStyleImage();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPTOP), displaybind, bindable]
+ VARIANT clipTop();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPRIGHT), displaybind, bindable]
+ VARIANT clipRight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPBOTTOM), displaybind, bindable]
+ VARIANT clipBottom();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CLIPLEFT), displaybind, bindable]
+ VARIANT clipLeft();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOW), displaybind, bindable]
+ BSTR overflow();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKBEFORE), displaybind, bindable]
+ BSTR pageBreakBefore();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PAGEBREAKAFTER), displaybind, bindable]
+ BSTR pageBreakAfter();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_CURSOR), displaybind, bindable]
+ BSTR cursor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TABLELAYOUT), displaybind, bindable]
+ BSTR tableLayout();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLLAPSE), displaybind, bindable]
+ BSTR borderCollapse();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_DIRECTION), displaybind, bindable]
+ BSTR direction();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BEHAVIOR), displaybind, bindable]
+ BSTR behavior();
+
+ [id(DISPID_IHTMLCURRENTSTYLE_GETATTRIBUTE)]
+ VARIANT getAttribute(
+ [in] BSTR strAttributeName,
+ [in, defaultvalue(0)] LONG lFlags);
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_UNICODEBIDI), displaybind, bindable]
+ BSTR unicodeBidi();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RIGHT), displaybind, bindable]
+ VARIANT right();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BOTTOM), displaybind, bindable]
+ VARIANT bottom();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_IMEMODE), displaybind, bindable]
+ BSTR imeMode();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYALIGN), displaybind, bindable]
+ BSTR rubyAlign();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYPOSITION), displaybind, bindable]
+ BSTR rubyPosition();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_RUBYOVERHANG), displaybind, bindable]
+ BSTR rubyOverhang();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTAUTOSPACE), displaybind, bindable]
+ BSTR textAutospace();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LINEBREAK), displaybind, bindable]
+ BSTR lineBreak();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_WORDBREAK), displaybind, bindable]
+ BSTR wordBreak();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFY), displaybind, bindable]
+ BSTR textJustify();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTJUSTIFYTRIM), displaybind, bindable]
+ BSTR textJustifyTrim();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTKASHIDA), displaybind, bindable]
+ VARIANT textKashida();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BLOCKDIRECTION), displaybind, bindable]
+ BSTR blockDirection();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDCHAR), displaybind, bindable]
+ VARIANT layoutGridChar();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDLINE), displaybind, bindable]
+ VARIANT layoutGridLine();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDMODE), displaybind, bindable]
+ BSTR layoutGridMode();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_LAYOUTGRIDTYPE), displaybind, bindable]
+ BSTR layoutGridType();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERSTYLE), displaybind, bindable]
+ BSTR borderStyle();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERCOLOR), displaybind, bindable]
+ BSTR borderColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_BORDERWIDTH), displaybind, bindable]
+ BSTR borderWidth();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_PADDING), displaybind, bindable]
+ BSTR padding();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_MARGIN), displaybind, bindable]
+ BSTR margin();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_ACCELERATOR), displaybind, bindable]
+ BSTR accelerator();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWX), displaybind, bindable]
+ BSTR overflowX();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_OVERFLOWY), displaybind, bindable]
+ BSTR overflowY();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE_TEXTTRANSFORM), displaybind, bindable]
+ BSTR textTransform();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_LAYOUTFLOW), displaybind, bindable]
+ BSTR layoutFlow();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_WORDWRAP), displaybind, bindable]
+ BSTR wordWrap();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTUNDERLINEPOSITION), displaybind, bindable]
+ BSTR textUnderlinePosition();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_HASLAYOUT), displaybind, bindable]
+ VARIANT_BOOL hasLayout();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARBASECOLOR), displaybind, bindable]
+ VARIANT scrollbarBaseColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARFACECOLOR), displaybind, bindable]
+ VARIANT scrollbarFaceColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBAR3DLIGHTCOLOR), displaybind, bindable]
+ VARIANT scrollbar3dLightColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARSHADOWCOLOR), displaybind, bindable]
+ VARIANT scrollbarShadowColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARHIGHLIGHTCOLOR), displaybind, bindable]
+ VARIANT scrollbarHighlightColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARDARKSHADOWCOLOR), displaybind, bindable]
+ VARIANT scrollbarDarkShadowColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARARROWCOLOR), displaybind, bindable]
+ VARIANT scrollbarArrowColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_SCROLLBARTRACKCOLOR), displaybind, bindable]
+ VARIANT scrollbarTrackColor();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_WRITINGMODE), displaybind, bindable]
+ BSTR writingMode();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_ZOOM), displaybind, bindable]
+ VARIANT zoom();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_FILTER), displaybind, bindable]
+ BSTR filter();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTALIGNLAST), displaybind, bindable]
+ BSTR textAlignLast();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_TEXTKASHIDASPACE), displaybind, bindable]
+ VARIANT textKashidaSpace();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE2_ISBLOCK), displaybind, bindable, hidden, restricted, nonbrowsable]
+ VARIANT_BOOL isBlock();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_TEXTOVERFLOW), displaybind, bindable]
+ BSTR textOverflow();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_MINHEIGHT), displaybind, bindable]
+ VARIANT minHeight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_WORDSPACING), displaybind, bindable]
+ VARIANT wordSpacing();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE3_WHITESPACE), displaybind, bindable]
+ BSTR whiteSpace();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MSINTERPOLATIONMODE), displaybind, bindable]
+ BSTR msInterpolationMode();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXHEIGHT), displaybind, bindable]
+ VARIANT maxHeight();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MINWIDTH), displaybind, bindable]
+ VARIANT minWidth();
+
+ [propget, id(DISPID_IHTMLCURRENTSTYLE4_MAXWIDTH), displaybind, bindable]
+ VARIANT maxWidth();
+}
+
+[
+ noncreatable,
+ uuid(3050f3dc-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLCurrentStyle
+{
+ [default] dispinterface DispHTMLCurrentStyle;
+ interface IHTMLCurrentStyle;
+ interface IHTMLCurrentStyle2;
+ interface IHTMLCurrentStyle3;
+ interface IHTMLCurrentStyle4;
+}
+
+/*****************************************************************************
+ * IHTMLRect interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4a3-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLRect : IDispatch
+{
+ [propput, id(DISPID_IHTMLRECT_LEFT)]
+ HRESULT left([in] LONG v);
+
+ [propget, id(DISPID_IHTMLRECT_LEFT)]
+ HRESULT left([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLRECT_TOP)]
+ HRESULT top([in] LONG v);
+
+ [propget, id(DISPID_IHTMLRECT_TOP)]
+ HRESULT top([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLRECT_RIGHT)]
+ HRESULT right([in] LONG v);
+
+ [propget, id(DISPID_IHTMLRECT_RIGHT)]
+ HRESULT right([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLRECT_BOTTOM)]
+ HRESULT bottom([in] LONG v);
+
+ [propget, id(DISPID_IHTMLRECT_BOTTOM)]
+ HRESULT bottom([retval, out] LONG *p);
+}
+
+/*****************************************************************************
+ * IHTMLRectCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4a4-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLRectCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLRECTCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLRECTCOLLECTION__NEWENUM), hidden, restricted]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLRECTCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] VARIANT *pvarIndex,
+ [retval, out] VARIANT *pvarResult);
+}
+
+/*****************************************************************************
+ * IHTMLDOMNode interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f5da-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMNode : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)]
+ HRESULT nodeType([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)]
+ HRESULT parentNode([retval, out] IHTMLDOMNode **p);
+
+ [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)]
+ HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);
+
+ [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)]
+ HRESULT childNodes([retval, out] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)]
+ HRESULT attributes([retval, out] IDispatch **p);
+
+ [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)]
+ HRESULT insertBefore(
+ [in] IHTMLDOMNode *newChild,
+ [optional, in] VARIANT refChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMNODE_REMOVECHILD)]
+ HRESULT removeChild(
+ [in] IHTMLDOMNode *oldChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMNODE_REPLACECHILD)]
+ HRESULT replaceChild(
+ [in] IHTMLDOMNode *newChild,
+ [in] IHTMLDOMNode *oldChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMNODE_CLONENODE)]
+ HRESULT cloneNode(
+ [in] VARIANT_BOOL fDeep,
+ [retval, out] IHTMLDOMNode **clonedNode);
+
+ [id(DISPID_IHTMLDOMNODE_REMOVENODE)]
+ HRESULT removeNode(
+ [defaultvalue(0), in] VARIANT_BOOL fDeep,
+ [retval, out] IHTMLDOMNode **removed);
+
+ [id(DISPID_IHTMLDOMNODE_SWAPNODE)]
+ HRESULT swapNode(
+ [in] IHTMLDOMNode *otherNode,
+ [retval, out] IHTMLDOMNode **swappedNode);
+
+ [id(DISPID_IHTMLDOMNODE_REPLACENODE)]
+ HRESULT replaceNode(
+ [in] IHTMLDOMNode *replacement,
+ [retval, out] IHTMLDOMNode **replaced);
+
+ [id(DISPID_IHTMLDOMNODE_APPENDCHILD)]
+ HRESULT appendChild(
+ [in] IHTMLDOMNode *newChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [propget, id(DISPID_IHTMLDOMNODE_NODENAME)]
+ HRESULT nodeName([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+ HRESULT nodeValue([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)]
+ HRESULT nodeValue([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)]
+ HRESULT firstChild([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)]
+ HRESULT lastChild([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)]
+ HRESULT previousSibling([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)]
+ HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
+}
+
+#define WINE_IHTMLDOMNODE_DISPINTERFACE_DECL \
+ [propget, id(DISPID_IHTMLDOMNODE_NODETYPE)] \
+ LONG nodeType(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_PARENTNODE)] \
+ IHTMLDOMNode* parentNode(); \
+ \
+ [id(DISPID_IHTMLDOMNODE_HASCHILDNODES)] \
+ VARIANT_BOOL hasChildNodes(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_CHILDNODES)] \
+ IDispatch* childNodes(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_ATTRIBUTES)] \
+ IDispatch* attributes(); \
+ \
+ [id(DISPID_IHTMLDOMNODE_INSERTBEFORE)] \
+ IHTMLDOMNode* insertBefore( \
+ [in] IHTMLDOMNode* newChild, \
+ [optional, in] VARIANT refChild); \
+ \
+ [id(DISPID_IHTMLDOMNODE_REMOVECHILD)] \
+ IHTMLDOMNode* removeChild([in] IHTMLDOMNode* oldChild); \
+ \
+ [id(DISPID_IHTMLDOMNODE_REPLACECHILD)] \
+ IHTMLDOMNode* replaceChild( \
+ [in] IHTMLDOMNode* newChild, \
+ [in] IHTMLDOMNode* oldChild); \
+ \
+ [id(DISPID_IHTMLDOMNODE_CLONENODE)] \
+ IHTMLDOMNode* cloneNode([in] VARIANT_BOOL fDeep); \
+ \
+ [id(DISPID_IHTMLDOMNODE_REMOVENODE)] \
+ IHTMLDOMNode* removeNode([defaultvalue(0), in] VARIANT_BOOL fDeep); \
+ \
+ [id(DISPID_IHTMLDOMNODE_SWAPNODE)] \
+ IHTMLDOMNode* swapNode([in] IHTMLDOMNode* otherNode); \
+ \
+ [id(DISPID_IHTMLDOMNODE_REPLACENODE)] \
+ IHTMLDOMNode* replaceNode([in] IHTMLDOMNode* replacement); \
+ \
+ [id(DISPID_IHTMLDOMNODE_APPENDCHILD)] \
+ IHTMLDOMNode* appendChild([in] IHTMLDOMNode* newChild); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_NODENAME)] \
+ BSTR nodeName(); \
+ \
+ [propput, id(DISPID_IHTMLDOMNODE_NODEVALUE)] \
+ void nodeValue(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_NODEVALUE)] \
+ VARIANT nodeValue(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_FIRSTCHILD)] \
+ IHTMLDOMNode* firstChild(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_LASTCHILD)] \
+ IHTMLDOMNode* lastChild(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_PREVIOUSSIBLING)] \
+ IHTMLDOMNode* previousSibling(); \
+ \
+ [propget, id(DISPID_IHTMLDOMNODE_NEXTSIBLING)] \
+ IHTMLDOMNode* nextSibling()
+
+/*****************************************************************************
+ * IHTMLDOMNode2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f80b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMNode2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)]
+ HRESULT ownerDocument([retval, out] IDispatch **p);
+}
+
+#define WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL \
+ [propget, id(DISPID_IHTMLDOMNODE2_OWNERDOCUMENT)] \
+ IDispatch *ownerDocument()
+
+#define WINE_HTMLDOMNODE_DISPINTERFACE_DECL \
+ WINE_IHTMLDOMNODE_DISPINTERFACE_DECL; \
+ WINE_IHTMLDOMNODE2_DISPINTERFACE_DECL
+
+/*****************************************************************************
+ * IHTMLDOMAttribute interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4b0-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMAttribute : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
+ HRESULT nodeName([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+ HRESULT nodeValue([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+ HRESULT nodeValue([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
+ HRESULT specified([retval, out] VARIANT_BOOL *p);
+}
+
+/*****************************************************************************
+ * IHTMLDOMAttribute2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f810-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMAttribute2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]
+ HRESULT expando([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]
+ HRESULT nodeType([retval, out] long *p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]
+ HRESULT parentNode([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]
+ HRESULT childNodes([retval, out] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]
+ HRESULT firstChild([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]
+ HRESULT lastChild([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]
+ HRESULT previousSibling([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]
+ HRESULT nextSibling([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]
+ HRESULT attributes([retval, out] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]
+ HRESULT ownerDocument([retval, out] IDispatch **p);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]
+ HRESULT insertBefore(
+ [in] IHTMLDOMNode *newChild,
+ [optional, in] VARIANT refChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]
+ HRESULT replaceChild(
+ [in] IHTMLDOMNode *newChild,
+ [in] IHTMLDOMNode *oldChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]
+ HRESULT removeChild(
+ [in] IHTMLDOMNode *oldChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]
+ HRESULT appendChild(
+ [in] IHTMLDOMNode *newChild,
+ [retval, out] IHTMLDOMNode **node);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]
+ HRESULT hasChildNodes([retval, out] VARIANT_BOOL *fChildren);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]
+ HRESULT cloneNode(
+ [in] VARIANT_BOOL fDeep,
+ [retval, out] IHTMLDOMAttribute **clonedNode);
+}
+
+/*****************************************************************************
+ * IHTMLDOMTextNode interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4b1-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMTextNode : IDispatch
+{
+ [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+ HRESULT data([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+ HRESULT data([out, retval] BSTR *p);
+
+ [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
+ HRESULT toString([out, retval] BSTR *String);
+
+ [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
+ HRESULT length([out, retval] LONG *p);
+
+ [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
+ HRESULT splitText(
+ [in] LONG offset,
+ [out, retval] IHTMLDOMNode **pRetNode);
+}
+
+/*****************************************************************************
+ * IHTMLDOMTextNode2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f809-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMTextNode2 : IDispatch
+{
+ [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
+ HRESULT substringData([in] LONG offset,[in] LONG Count,[retval, out] BSTR* pbstrsubString);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
+ HRESULT appendData([in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
+ HRESULT insertData([in] LONG offset,[in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
+ HRESULT deleteData([in] LONG offset,[in] LONG Count);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
+ HRESULT replaceData([in] LONG offset,[in] LONG Count,[in] BSTR bstrstring);
+}
+
+[
+ noncreatable,
+ uuid(3050f4ba-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLDOMTextNode
+{
+ [default] dispinterface DispHTMLDOMTextNode;
+ interface IHTMLDOMTextNode;
+ interface IHTMLDOMTextNode2;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+}
+
+/*****************************************************************************
+ * IHTMLDOMImplementation interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f80d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMImplementation : IDispatch
+{
+ [id(DISPID_IHTMLDOMIMPLEMENTATION_HASFEATURE)]
+ HRESULT hasFeature(
+ [in] BSTR bstrfeature,
+ [optional, in] VARIANT version,
+ [retval, out] VARIANT_BOOL *pfHasFeature);
+}
+
+/*****************************************************************************
+ * DispHTMLDOMAttribute dispinterface
+ */
+[
+ hidden,
+ uuid(3050f564-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLDOMAttribute
+{
+ properties:
+ methods:
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODENAME)]
+ BSTR nodeName();
+
+ [propput, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+ void nodeValue(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE_NODEVALUE)]
+ VARIANT nodeValue();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE_SPECIFIED)]
+ VARIANT_BOOL specified();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NAME)]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_VALUE)]
+ BSTR value();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_EXPANDO)]
+ VARIANT_BOOL expando();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NODETYPE)]
+ long nodeType();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PARENTNODE)]
+ IHTMLDOMNode *parentNode();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_CHILDNODES)]
+ IDispatch *childNodes();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_FIRSTCHILD)]
+ IHTMLDOMNode *firstChild();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_LASTCHILD)]
+ IHTMLDOMNode *lastChild();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_PREVIOUSSIBLING)]
+ IHTMLDOMNode *previousSibling();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_NEXTSIBLING)]
+ IHTMLDOMNode *nextSibling();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_ATTRIBUTES)]
+ IDispatch *attributes();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE2_OWNERDOCUMENT)]
+ IDispatch *ownerDocument();
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_INSERTBEFORE)]
+ IHTMLDOMNode *insertBefore(
+ [in] IHTMLDOMNode *newChild,
+ [optional, in] VARIANT refChild);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_REPLACECHILD)]
+ IHTMLDOMNode *replaceChild(
+ [in] IHTMLDOMNode *newChild,
+ [in] IHTMLDOMNode *oldChild);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_REMOVECHILD)]
+ IHTMLDOMNode *removeChild([in] IHTMLDOMNode *oldChild);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_APPENDCHILD)]
+ IHTMLDOMNode *appendChild([in] IHTMLDOMNode *newChild);
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_HASCHILDNODES)]
+ VARIANT_BOOL hasChildNodes();
+
+ [id(DISPID_IHTMLDOMATTRIBUTE2_CLONENODE)]
+ IHTMLDOMAttribute *cloneNode([in] VARIANT_BOOL fDeep);
+
+ [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]
+ void ie8_nodeValue(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_NODEVALUE)]
+ VARIANT ie8_nodeValue();
+
+ [propput, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]
+ void ie8_value(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_VALUE)]
+ BSTR ie8_value();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE3_IE8_SPECIFIED)]
+ VARIANT_BOOL ie8_specified();
+
+ [propget, id(DISPID_IHTMLDOMATTRIBUTE3_OWNERELEMENT)]
+ IHTMLElement2 *ownerElement();
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ * IHTMLDocumentCompatibleInfo interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051041a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocumentCompatibleInfo : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_USERAGENT)]
+ HRESULT userAgent([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFO_VERSION)]
+ HRESULT version([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLDocumentCompatibleInfoCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510418-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocumentCompatibleInfoCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] long *p);
+
+ [id(DISPID_IHTMLDOCUMENTCOMPATIBLEINFOCOLLECTION_ITEM)]
+ HRESULT item([in] long i, [retval, out]IHTMLDocumentCompatibleInfo **p);
+}
+
+/*****************************************************************************
+ * DispHTMLDOMTextNode dispinterface
+ */
+[
+ hidden,
+ uuid(3050f565-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLDOMTextNode
+{
+properties:
+methods:
+ [propput, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+ void data(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOMTEXTNODE_DATA)]
+ BSTR data();
+
+ [id(DISPID_IHTMLDOMTEXTNODE_TOSTRING)]
+ BSTR toString();
+
+ [propget, id(DISPID_IHTMLDOMTEXTNODE_LENGTH)]
+ LONG length();
+
+ [id(DISPID_IHTMLDOMTEXTNODE_SPLITTEXT)]
+ IHTMLDOMNode *splitText([in] LONG offset);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA)]
+ BSTR substringData(
+ [in] LONG offset,
+ [in] LONG Count);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_APPENDDATA)]
+ void appendData([in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_INSERTDATA)]
+ void insertData(
+ [in] LONG offset,
+ [in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_DELETEDATA)]
+ void deleteData(
+ [in] LONG offset,
+ [in] LONG Count);
+
+ [id(DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA)]
+ void replaceData(
+ [in] LONG offset,
+ [in] LONG Count,
+ [in] BSTR bstrstring);
+
+ WINE_HTMLDOMNODE_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ * IHTMLAttributeCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4c3-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLAttributeCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]
+ HRESULT length(
+ [retval, out] long *p);
+
+ [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]
+ HRESULT _newEnum(
+ [retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]
+ HRESULT item(
+ [optional, in] VARIANT *name,
+ [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ * IHTMLAttributeCollection2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f80a-98b5-11cf-bb82-00aa00bdce0b)
+ ]
+interface IHTMLAttributeCollection2 : IDispatch
+{
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]
+ HRESULT getNamedItem(
+ [in] BSTR bstrName,
+ [retval, out] IHTMLDOMAttribute **newretNode);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]
+ HRESULT setNamedItem(
+ [in] IHTMLDOMAttribute *ppNode,
+ [retval, out] IHTMLDOMAttribute **newretNode);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]
+ HRESULT removeNamedItem(
+ [in] BSTR bstrName,
+ [retval, out] IHTMLDOMAttribute **newretNode);
+}
+
+/*****************************************************************************
+ * IHTMLAttributeCollection3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510469-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLAttributeCollection3 : IDispatch
+{
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]
+ HRESULT getNamedItem(
+ [in] BSTR bstrName,
+ [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]
+ HRESULT setNamedItem(
+ [in] IHTMLDOMAttribute *pNodeIn,
+ [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]
+ HRESULT removeNamedItem(
+ [in] BSTR bstrName,
+ [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]
+ HRESULT item(
+ [in] long index,
+ [retval, out] IHTMLDOMAttribute **ppNodeOut);
+
+ [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]
+ HRESULT length([retval, out] long *p);
+}
+
+/*****************************************************************************
+ * DispHTMLAttributeCollection dispinterface
+ */
+[
+ hidden,
+ uuid(3050f56c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLAttributeCollection
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION_LENGTH)]
+ long length();
+
+ [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION_ITEM)]
+ IDispatch *item([optional, in] VARIANT *name);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION2_GETNAMEDITEM)]
+ IHTMLDOMAttribute *getNamedItem([in] BSTR bstrName);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION2_SETNAMEDITEM)]
+ IHTMLDOMAttribute *setNamedItem([in] IHTMLDOMAttribute *ppNode);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION2_REMOVENAMEDITEM)]
+ IHTMLDOMAttribute *removeNamedItem([in] BSTR bstrName);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_GETNAMEDITEM)]
+ IHTMLDOMAttribute *ie8_getNamedItem([in] BSTR bstrName);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_SETNAMEDITEM)]
+ IHTMLDOMAttribute *ie8_setNamedItem([in] IHTMLDOMAttribute *pNodeIn);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_REMOVENAMEDITEM)]
+ IHTMLDOMAttribute *ie8_removeNamedItem([in] BSTR bstrName);
+
+ [id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_ITEM)]
+ IHTMLDOMAttribute *ie8_item([in] long index);
+
+ [propget, id(DISPID_IHTMLATTRIBUTECOLLECTION3_IE8_LENGTH)]
+ long ie8_length();
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+/*****************************************************************************
+ * IHTMLDOMChildrenCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f5ab-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMChildrenCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
+ HRESULT length([out, retval] LONG *p);
+
+ [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
+ HRESULT _newEnum([out, retval] IUnknown **p);
+
+ [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] LONG index,
+ [out, retval] IDispatch **ppItem);
+}
+
+/*****************************************************************************
+ * DispDOMChildrenCollection dispinterface
+ */
+[
+ hidden,
+ uuid(3050f577-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispDOMChildrenCollection
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH)]
+ LONG length();
+
+ [propget, id(DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM)]
+ IDispatch *item([in] LONG index);
+}
+
+interface IHTMLElementCollection;
+
+/*****************************************************************************
+ * IHTMLElement interface
+ */
+[
+ odl,
+ dual,
+ oleautomation,
+ uuid(3050f1FF-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLElement : IDispatch
+{
+ [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR strAttributeName,
+ [in] VARIANT AttributeValue,
+ [defaultvalue(1), in] LONG lFlags);
+
+ [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(0), in] LONG lFlags,
+ [retval, out] VARIANT *AttributeValue);
+
+ [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR strAttributeName,
+ [defaultvalue(1), in] LONG lFlags,
+ [retval, out] VARIANT_BOOL *pfSuccess);
+
+ [propput, id(DISPID_IHTMLELEMENT_CLASSNAME)]
+ HRESULT className([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_CLASSNAME)]
+ HRESULT className([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ID)]
+ HRESULT id([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ID)]
+ HRESULT id([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_TAGNAME)]
+ HRESULT tagName([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)]
+ HRESULT parentElement([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLELEMENT_STYLE)]
+ HRESULT style([retval, out] IHTMLStyle **p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONHELP)]
+ HRESULT onhelp([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONHELP)]
+ HRESULT onhelp([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONCLICK)]
+ HRESULT onclick([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONCLICK)]
+ HRESULT onclick([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
+ HRESULT ondblclick([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK)]
+ HRESULT ondblclick([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
+ HRESULT onkeydown([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN)]
+ HRESULT onkeydown([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONKEYUP)]
+ HRESULT onkeyup([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONKEYUP)]
+ HRESULT onkeyup([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
+ HRESULT onkeypress([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS)]
+ HRESULT onkeypress([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
+ HRESULT onmouseout([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT)]
+ HRESULT onmouseout([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
+ HRESULT onmouseover([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER)]
+ HRESULT onmouseover([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
+ HRESULT onmousemove([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE)]
+ HRESULT onmousemove([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
+ HRESULT onmousedown([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN)]
+ HRESULT onmousedown([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
+ HRESULT onmouseup([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP)]
+ HRESULT onmouseup([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)]
+ HRESULT document([retval, out] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLELEMENT_TITLE)]
+ HRESULT title([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_TITLE)]
+ HRESULT title([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_LANGUAGE)]
+ HRESULT language([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_LANGUAGE)]
+ HRESULT language([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
+ HRESULT onselectstart([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART)]
+ HRESULT onselectstart([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)]
+ HRESULT scrollIntoView([optional, in] VARIANT varargStart);
+
+ [id(DISPID_IHTMLELEMENT_CONTAINS)]
+ HRESULT contains(
+ [in] IHTMLElement *pChild,
+ [retval, out] VARIANT_BOOL *pfResult);
+
+ [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX)]
+ HRESULT sourceIndex([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)]
+ HRESULT recordNumber([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_LANG)]
+ HRESULT lang([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_LANG)]
+ HRESULT lang([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)]
+ HRESULT offsetLeft([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)]
+ HRESULT offsetTop([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)]
+ HRESULT offsetWidth([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)]
+ HRESULT offsetHeight([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)]
+ HRESULT offsetParent([retval, out] IHTMLElement **p);
+
+ [propput, id(DISPID_IHTMLELEMENT_INNERHTML)]
+ HRESULT innerHTML([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_INNERHTML)]
+ HRESULT innerHTML([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)]
+ HRESULT innerText([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)]
+ HRESULT innerText([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)]
+ HRESULT outerHTML([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)]
+ HRESULT outerHTML([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
+ HRESULT outerText([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)]
+ HRESULT outerText([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)]
+ HRESULT insertAdjacentHTML([in] BSTR where, [in] BSTR html);
+
+ [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)]
+ HRESULT insertAdjacentText([in] BSTR where, [in] BSTR text);
+
+ [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)]
+ HRESULT parentTextEdit([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)]
+ HRESULT isTextEdit([retval, out] VARIANT_BOOL *p);
+
+ [id(DISPID_IHTMLELEMENT_CLICK)]
+ HRESULT click();
+
+ [propget, id(DISPID_IHTMLELEMENT_FILTERS)]
+ HRESULT filters([retval, out] IHTMLFiltersCollection **p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
+ HRESULT ondragstart([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART)]
+ HRESULT ondragstart([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLELEMENT_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
+ HRESULT onbeforeupdate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE)]
+ HRESULT onbeforeupdate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
+ HRESULT onafterupdate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE)]
+ HRESULT onafterupdate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
+ HRESULT onerrorupdate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE)]
+ HRESULT onerrorupdate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
+ HRESULT onrowexit([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT)]
+ HRESULT onrowexit([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONROWENTER)]
+ HRESULT onrowenter([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONROWENTER)]
+ HRESULT onrowenter([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
+ HRESULT ondatasetchanged([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED)]
+ HRESULT ondatasetchanged([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
+ HRESULT ondatasetcomplete([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE)]
+ HRESULT ondatasetcomplete([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
+ HRESULT onfilterchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE)]
+ HRESULT onfilterchange([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLELEMENT_CHILDREN)]
+ HRESULT children([retval, out] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLELEMENT_ALL)]
+ HRESULT all([retval, out] IDispatch **p);
+}
+
+#define WINE_IHTMLELEMENT_DISPINTERFACE_DECL \
+ [id(DISPID_IHTMLELEMENT_SETATTRIBUTE)] \
+ void setAttribute( \
+ [in] BSTR strAttributeName, \
+ [in] VARIANT AttValue, \
+ [defaultvalue(1), in] LONG lFlags); \
+ \
+ [id(DISPID_IHTMLELEMENT_GETATTRIBUTE)] \
+ VARIANT getAttribute( \
+ [in] BSTR strAttributeName, \
+ [defaultvalue(0), in] LONG lFlags); \
+ \
+ [id(DISPID_IHTMLELEMENT_REMOVEATTRIBUTE)] \
+ VARIANT_BOOL removeAttribute( \
+ [in] BSTR strAttributeName, \
+ [defaultvalue(1), in] LONG lFlags); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] \
+ void className(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_CLASSNAME), bindable] \
+ BSTR className(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ID), bindable] \
+ void id(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ID), bindable] \
+ BSTR id(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_TAGNAME)] \
+ BSTR tagName(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_PARENTELEMENT)] \
+ IHTMLElement *parentElement(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_STYLE), nonbrowsable] \
+ IHTMLStyle *style(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] \
+ void onhelp(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONHELP), displaybind, bindable] \
+ VARIANT onhelp(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] \
+ void onclick(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONCLICK), displaybind, bindable] \
+ VARIANT onclick(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\
+ void ondblclick(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONDBLCLICK), displaybind, bindable]\
+ VARIANT ondblclick(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \
+ void onkeydown(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONKEYDOWN), displaybind, bindable] \
+ VARIANT onkeydown(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] \
+ void onkeyup(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONKEYUP), displaybind, bindable] \
+ VARIANT onkeyup(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\
+ void onkeypress(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONKEYPRESS), displaybind, bindable]\
+ VARIANT onkeypress(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\
+ void onmouseout(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOUT), displaybind, bindable]\
+ VARIANT onmouseout(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \
+ void onmouseover(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEOVER), displaybind, bindable] \
+ VARIANT onmouseover(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \
+ void onmousemove(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEMOVE), displaybind, bindable] \
+ VARIANT onmousemove(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \
+ void onmousedown(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEDOWN), displaybind, bindable] \
+ VARIANT onmousedown(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \
+ void onmouseup(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONMOUSEUP), displaybind, bindable] \
+ VARIANT onmouseup(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_DOCUMENT)] IDispatch* document(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] \
+ void title(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_TITLE), displaybind, bindable] \
+ BSTR title(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] \
+ void language(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_LANGUAGE), displaybind, bindable] \
+ BSTR language(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \
+ void onselectstart(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONSELECTSTART), displaybind, bindable] \
+ VARIANT onselectstart(); \
+ \
+ [id(DISPID_IHTMLELEMENT_SCROLLINTOVIEW)] \
+ void scrollIntoView([optional, in] VARIANT varargStart); \
+ \
+ [id(DISPID_IHTMLELEMENT_CONTAINS)] \
+ VARIANT_BOOL contains([in] IHTMLElement* pChild); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_SOURCEINDEX), bindable] \
+ LONG sourceIndex(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_RECORDNUMBER)] \
+ VARIANT recordNumber(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_LANG)] \
+ void lang(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_LANG)] \
+ BSTR lang(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETLEFT)] \
+ LONG offsetLeft(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETTOP)] \
+ LONG offsetTop(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETWIDTH)] \
+ LONG offsetWidth(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETHEIGHT)] \
+ LONG offsetHeight(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OFFSETPARENT)] \
+ IHTMLElement* offsetParent(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_INNERHTML)] \
+ void innerHTML(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_INNERHTML)] \
+ BSTR innerHTML(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_INNERTEXT)] \
+ void innerText(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_INNERTEXT)] \
+ BSTR innerText(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_OUTERHTML)] \
+ void outerHTML(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OUTERHTML)] \
+ BSTR outerHTML(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_OUTERTEXT)] \
+ void outerText(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_OUTERTEXT)] \
+ BSTR outerText(); \
+ \
+ [id(DISPID_IHTMLELEMENT_INSERTADJACENTHTML)] \
+ void insertAdjacentHTML( \
+ [in] BSTR where, \
+ [in] BSTR html); \
+ \
+ [id(DISPID_IHTMLELEMENT_INSERTADJACENTTEXT)] \
+ void insertAdjacentText( \
+ [in] BSTR where, \
+ [in] BSTR text); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_PARENTTEXTEDIT)] \
+ IHTMLElement* parentTextEdit(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ISTEXTEDIT)] \
+ VARIANT_BOOL isTextEdit(); \
+ \
+ [id(DISPID_IHTMLELEMENT_CLICK)] \
+ void click(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_FILTERS)] \
+ IHTMLFiltersCollection* filters(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \
+ void ondragstart(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONDRAGSTART), displaybind, bindable] \
+ VARIANT ondragstart(); \
+ \
+ [id(DISPID_IHTMLELEMENT_TOSTRING)] \
+ BSTR toString(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \
+ void onbeforeupdate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONBEFOREUPDATE), displaybind, bindable] \
+ VARIANT onbeforeupdate(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \
+ void onafterupdate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONAFTERUPDATE), displaybind, bindable] \
+ VARIANT onafterupdate(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \
+ void onerrorupdate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONERRORUPDATE), displaybind, bindable] \
+ VARIANT onerrorupdate(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \
+ void onrowexit(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONROWEXIT), displaybind, bindable] \
+ VARIANT onrowexit(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \
+ void onrowenter(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONROWENTER), displaybind, bindable] \
+ VARIANT onrowenter(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \
+ void ondatasetchanged(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONDATASETCHANGED), displaybind, bindable] \
+ VARIANT ondatasetchanged(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \
+ void ondataavailable(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONDATAAVAILABLE), displaybind, bindable] \
+ VARIANT ondataavailable(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \
+ void ondatasetcomplete(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONDATASETCOMPLETE), displaybind, bindable] \
+ VARIANT ondatasetcomplete(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \
+ void onfilterchange(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ONFILTERCHANGE), displaybind, bindable] \
+ VARIANT onfilterchange(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_CHILDREN)] \
+ IDispatch* children(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT_ALL)] \
+ IDispatch* all()
+
+/*****************************************************************************
+ * IHTMLElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f434-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLElement2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)]
+ HRESULT scopeName([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLELEMENT2_SETCAPTURE)]
+ HRESULT setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture);
+
+ [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)]
+ HRESULT releaseCapture();
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
+ HRESULT onlosecapture([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable]
+ HRESULT onlosecapture([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)]
+ HRESULT componentFromPoint(
+ [in] LONG x,
+ [in] LONG y,
+ [retval, out] BSTR *component);
+
+ [id(DISPID_IHTMLELEMENT2_DOSCROLL)]
+ HRESULT doScroll([optional, in] VARIANT component);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
+ HRESULT onscroll([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable]
+ HRESULT onscroll([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
+ HRESULT ondrag([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable]
+ HRESULT ondrag([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
+ HRESULT ondragend([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable]
+ HRESULT ondragend([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
+ HRESULT ondragenter([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable]
+ HRESULT ondragenter([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
+ HRESULT ondragover([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable]
+ HRESULT ondragover([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
+ HRESULT ondragleave([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable]
+ HRESULT ondragleave([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
+ HRESULT ondrop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable]
+ HRESULT ondrop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
+ HRESULT onbeforecut([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable]
+ HRESULT onbeforecut([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
+ HRESULT oncut([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable]
+ HRESULT oncut([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
+ HRESULT onbeforecopy([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable]
+ HRESULT onbeforecopy([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
+ HRESULT oncopy([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable]
+ HRESULT oncopy([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
+ HRESULT onbeforepaste([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable]
+ HRESULT onbeforepaste([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
+ HRESULT onpaste([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable]
+ HRESULT onpaste([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable]
+ HRESULT currentStyle([retval, out] IHTMLCurrentStyle **p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
+ HRESULT onpropertychange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable]
+ HRESULT onpropertychange([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)]
+ HRESULT getClientRects([retval, out] IHTMLRectCollection **pRectCol);
+
+ [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)]
+ HRESULT getBoundingClientRect([retval, out] IHTMLRect **pRect);
+
+ [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)]
+ HRESULT setExpression(
+ [in] BSTR propname,
+ [in] BSTR expression,
+ [defaultvalue(""), in] BSTR language);
+
+ [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)]
+ HRESULT getExpression(
+ [in] BSTR propname,
+ [retval, out] VARIANT *expression);
+
+ [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)]
+ HRESULT removeExpression(
+ [in] BSTR propname,
+ [retval, out] VARIANT_BOOL *pfSuccess);
+
+ [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
+ HRESULT tabIndex([in] short v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable]
+ HRESULT tabIndex([retval, out] short *p);
+
+ [id(DISPID_IHTMLELEMENT2_FOCUS)]
+ HRESULT focus();
+
+ [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
+ HRESULT onblur([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable]
+ HRESULT onblur([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
+ HRESULT onfocus([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable]
+ HRESULT onfocus([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
+ HRESULT onresize([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable]
+ HRESULT onresize([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLELEMENT2_BLUR)]
+ HRESULT blur();
+
+ [id(DISPID_IHTMLELEMENT2_ADDFILTER)]
+ HRESULT addFilter([in] IUnknown *pUnk);
+
+ [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)]
+ HRESULT removeFilter([in] IUnknown *pUnk);
+
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable]
+ HRESULT clientHeight([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable]
+ HRESULT clientWidth([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable]
+ HRESULT clientTop([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable]
+ HRESULT clientLeft([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)]
+ HRESULT attachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp,
+ [retval, out] VARIANT_BOOL *pfResult);
+
+ [id(DISPID_IHTMLELEMENT2_DETACHEVENT)]
+ HRESULT detachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)]
+ HRESULT readyState([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
+ HRESULT onrowsdelete([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable]
+ HRESULT onrowsdelete([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
+ HRESULT onrowsinserted([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable]
+ HRESULT onrowsinserted([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
+ HRESULT oncellchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable]
+ HRESULT oncellchange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
+ HRESULT dir([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable]
+ HRESULT dir([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)]
+ HRESULT createControlRange([retval, out] IDispatch **range);
+
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable]
+ HRESULT scrollHeight([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable]
+ HRESULT scrollWidth([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
+ HRESULT scrollTop([in] LONG v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]
+ HRESULT scrollTop([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
+ HRESULT scrollLeft([in] LONG v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable]
+ HRESULT scrollLeft([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)]
+ HRESULT clearAttributes();
+
+ [id(DISPID_IHTMLELEMENT2_MERGEATTRIBUTES)]
+ HRESULT mergeAttributes([in] IHTMLElement *mergeThis);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
+ HRESULT oncontextmenu([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable]
+ HRESULT oncontextmenu([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)]
+ HRESULT insertAdjacentElement(
+ [in] BSTR where,
+ [in] IHTMLElement *insertedElement,
+ [retval, out] IHTMLElement **inserted);
+
+ [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)]
+ HRESULT applyElement(
+ [in] IHTMLElement *apply,
+ [in] BSTR where,
+ [retval, out] IHTMLElement **applied);
+
+ [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)]
+ HRESULT getAdjacentText(
+ [in] BSTR where,
+ [retval, out] BSTR *text);
+
+ [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)]
+ HRESULT replaceAdjacentText(
+ [in] BSTR where,
+ [in] BSTR newText,
+ [retval, out] BSTR *oldText);
+
+ [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)]
+ HRESULT canHaveChildren([retval, out] VARIANT_BOOL *p);
+
+ [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)]
+ HRESULT addBehavior(
+ [in] BSTR bstrUrl,
+ [optional, in] VARIANT *pvarFactory,
+ [retval, out] LONG *pCookie);
+
+ [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)]
+ HRESULT removeBehavior(
+ [in] LONG cookie,
+ [retval, out] VARIANT_BOOL *pfResult);
+
+ [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable]
+ HRESULT runtimeStyle([retval, out] IHTMLStyle **p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)]
+ HRESULT behaviorUrns([retval, out] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_TAGURN)]
+ HRESULT tagUrn([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_TAGURN)]
+ HRESULT tagUrn([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
+ HRESULT onbeforeeditfocus([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable]
+ HRESULT onbeforeeditfocus([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted]
+ HRESULT readyStateValue([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName(
+ [in] BSTR v,
+ [retval, out] IHTMLElementCollection **pelColl);
+}
+
+#define WINE_IHTMLELEMENT2_DISPINTERFACE_DECL \
+ [propget, id(DISPID_IHTMLELEMENT2_SCOPENAME)] \
+ BSTR scopeName(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_SETCAPTURE)] \
+ void setCapture([defaultvalue(-1), in] VARIANT_BOOL containerCapture); \
+ \
+ [id(DISPID_IHTMLELEMENT2_RELEASECAPTURE)] \
+ void releaseCapture(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \
+ void onlosecapture(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONLOSECAPTURE), displaybind, bindable] \
+ VARIANT onlosecapture(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_COMPONENTFROMPOINT)] \
+ BSTR componentFromPoint([in] LONG x,[in] LONG y); \
+ \
+ [id(DISPID_IHTMLELEMENT2_DOSCROLL)] \
+ void doScroll([optional, in] VARIANT component); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \
+ void onscroll(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONSCROLL), displaybind, bindable] \
+ VARIANT onscroll(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] \
+ void ondrag(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAG), displaybind, bindable] \
+ VARIANT ondrag(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \
+ void ondragend(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGEND), displaybind, bindable] \
+ VARIANT ondragend(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \
+ void ondragenter(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGENTER), displaybind, bindable] \
+ VARIANT ondragenter(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \
+ void ondragover(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGOVER), displaybind, bindable] \
+ VARIANT ondragover(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \
+ void ondragleave(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONDRAGLEAVE), displaybind, bindable] \
+ VARIANT ondragleave(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] \
+ void ondrop(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONDROP), displaybind, bindable] \
+ VARIANT ondrop(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \
+ void onbeforecut(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECUT), displaybind, bindable] \
+ VARIANT onbeforecut(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] \
+ void oncut(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONCUT), displaybind, bindable] \
+ VARIANT oncut(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \
+ void onbeforecopy(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFORECOPY), displaybind, bindable] \
+ VARIANT onbeforecopy(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] \
+ void oncopy(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONCOPY), displaybind, bindable] \
+ VARIANT oncopy(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \
+ void onbeforepaste(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREPASTE), displaybind, bindable] \
+ VARIANT onbeforepaste(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] \
+ void onpaste(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONPASTE), displaybind, bindable] \
+ VARIANT onpaste(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_CURRENTSTYLE), nonbrowsable] \
+ IHTMLCurrentStyle* currentStyle(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \
+ void onpropertychange(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONPROPERTYCHANGE), displaybind, bindable] \
+ VARIANT onpropertychange(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_GETCLIENTRECTS)] \
+ IHTMLRectCollection* getClientRects(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_GETBOUNDINGCLIENTRECT)] \
+ IHTMLRect* getBoundingClientRect(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_SETEXPRESSION)] \
+ void setExpression( \
+ [in] BSTR propname, \
+ [in] BSTR expr, \
+ [defaultvalue(""), in] BSTR lang); \
+ \
+ [id(DISPID_IHTMLELEMENT2_GETEXPRESSION)] \
+ VARIANT getExpression([in] BSTR propname); \
+ \
+ [id(DISPID_IHTMLELEMENT2_REMOVEEXPRESSION)] \
+ VARIANT_BOOL removeExpression([in] BSTR propname); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \
+ void tabIndex(short v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_TABINDEX), displaybind, bindable] \
+ short tabIndex(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_FOCUS)] \
+ void focus(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\
+ void accessKey(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ACCESSKEY), displaybind, bindable]\
+ BSTR accessKey(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] \
+ void onblur(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONBLUR), displaybind, bindable] \
+ VARIANT onblur(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] \
+ void onfocus(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONFOCUS), displaybind, bindable] \
+ VARIANT onfocus(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \
+ void onresize(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONRESIZE), displaybind, bindable] \
+ VARIANT onresize(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_BLUR)] \
+ void blur(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_ADDFILTER)] \
+ void addFilter([in] IUnknown* pUnk); \
+ \
+ [id(DISPID_IHTMLELEMENT2_REMOVEFILTER)] \
+ void removeFilter([in] IUnknown* pUnk); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTHEIGHT), displaybind, bindable] \
+ LONG clientHeight(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTWIDTH), displaybind, bindable] \
+ LONG clientWidth(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTTOP), displaybind, bindable] \
+ LONG clientTop(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_CLIENTLEFT), displaybind, bindable] \
+ LONG clientLeft(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_ATTACHEVENT)] \
+ VARIANT_BOOL attachEvent( \
+ [in] BSTR event, \
+ [in] IDispatch* pDisp); \
+ \
+ [id(DISPID_IHTMLELEMENT2_DETACHEVENT)] \
+ void detachEvent( \
+ [in] BSTR event, \
+ [in] IDispatch* pDisp); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_READYSTATE)] VARIANT readyState(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \
+ void onreadystatechange(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONREADYSTATECHANGE), displaybind, bindable] \
+ VARIANT onreadystatechange(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \
+ void onrowsdelete(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONROWSDELETE), displaybind, bindable] \
+ VARIANT onrowsdelete(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \
+ void onrowsinserted(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONROWSINSERTED), displaybind, bindable] \
+ VARIANT onrowsinserted(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \
+ void oncellchange(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONCELLCHANGE), displaybind, bindable] \
+ VARIANT oncellchange(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] \
+ void dir(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_DIR), displaybind, bindable] \
+ BSTR dir(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_CREATECONTROLRANGE)] \
+ IDispatch* createControlRange(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLHEIGHT), displaybind, bindable] \
+ LONG scrollHeight(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLWIDTH), displaybind, bindable] \
+ LONG scrollWidth(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\
+ void scrollTop(LONG v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLTOP), displaybind, bindable]\
+ LONG scrollTop(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \
+ void scrollLeft(LONG v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_SCROLLLEFT), displaybind, bindable] \
+ LONG scrollLeft(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_CLEARATTRIBUTES)] \
+ void clearAttributes(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \
+ void oncontextmenu(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONCONTEXTMENU), displaybind, bindable] \
+ VARIANT oncontextmenu(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_INSERTADJACENTELEMENT)] \
+ IHTMLElement* insertAdjacentElement( \
+ [in] BSTR where, \
+ [in] IHTMLElement* insertedElement); \
+ \
+ [id(DISPID_IHTMLELEMENT2_APPLYELEMENT)] \
+ IHTMLElement* applyElement([in] IHTMLElement* apply,[in] BSTR where); \
+ \
+ [id(DISPID_IHTMLELEMENT2_GETADJACENTTEXT)] \
+ BSTR getAdjacentText([in] BSTR where); \
+ \
+ [id(DISPID_IHTMLELEMENT2_REPLACEADJACENTTEXT)] \
+ BSTR replaceAdjacentText([in] BSTR where,[in] BSTR newText); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_CANHAVECHILDREN)] \
+ VARIANT_BOOL canHaveChildren(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_ADDBEHAVIOR)] \
+ LONG addBehavior([in] BSTR bstrUrl,[optional, in] VARIANT* pvarFactory); \
+ \
+ [id(DISPID_IHTMLELEMENT2_REMOVEBEHAVIOR)] \
+ VARIANT_BOOL removeBehavior([in] LONG cookie); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_RUNTIMESTYLE), nonbrowsable] \
+ IHTMLStyle* runtimeStyle(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_BEHAVIORURNS)] \
+ IDispatch* behaviorUrns(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_TAGURN)] \
+ void tagUrn(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_TAGURN)] \
+ BSTR tagUrn(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \
+ void onbeforeeditfocus(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_ONBEFOREEDITFOCUS), displaybind, bindable] \
+ VARIANT onbeforeeditfocus(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT2_READYSTATEVALUE), hidden, restricted] \
+ LONG readyStateValue(); \
+ \
+ [id(DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME)] \
+ IHTMLElementCollection* getElementsByTagName([in] BSTR v)
+
+/*****************************************************************************
+ * IHTMLElement3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f673-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLElement3 : IDispatch
+{
+ [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] HRESULT mergeAttributes([in]
+ IHTMLElement* mergeThis,[optional, in] VARIANT* pvarFlags);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)]
+ HRESULT isMultiLine([retval, out] VARIANT_BOOL * p);
+
+ [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)]
+ HRESULT canHaveHTML([retval, out] VARIANT_BOOL * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
+ HRESULT onlayoutcomplete([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable]
+ HRESULT onlayoutcomplete([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
+ HRESULT onpage([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable]
+ HRESULT onpage([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
+ HRESULT inflateBlock([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable]
+ HRESULT inflateBlock([retval, out] VARIANT_BOOL * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
+ HRESULT onbeforedeactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable]
+ HRESULT onbeforedeactivate([retval, out] VARIANT * p);
+
+ [id(DISPID_IHTMLELEMENT3_SETACTIVE)] HRESULT setActive();
+
+ [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
+ HRESULT contentEditable([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable]
+ HRESULT contentEditable([retval, out] BSTR * p);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)]
+ HRESULT isContentEditable([retval, out] VARIANT_BOOL * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
+ HRESULT hideFocus([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]
+ HRESULT hideFocus([retval, out] VARIANT_BOOL * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable]
+ HRESULT disabled([retval, out] VARIANT_BOOL * p);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)]
+ HRESULT isDisabled([retval, out] VARIANT_BOOL * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
+ HRESULT onmove([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable]
+ HRESULT onmove([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
+ HRESULT oncontrolselect([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable]
+ HRESULT oncontrolselect([retval, out] VARIANT * p);
+
+ [id(DISPID_IHTMLELEMENT3_FIREEVENT)]
+ HRESULT fireEvent(
+ [in] BSTR bstrEventName,
+ [optional, in] VARIANT* pvarEventObject,
+ [retval, out] VARIANT_BOOL* pfCancelled);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
+ HRESULT onresizestart([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable]
+ HRESULT onresizestart([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
+ HRESULT onresizeend([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable]
+ HRESULT onresizeend([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
+ HRESULT onmovestart([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable]
+ HRESULT onmovestart([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
+ HRESULT onmoveend([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]
+ HRESULT onmoveend([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
+ HRESULT onmouseenter([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable]
+ HRESULT onmouseenter([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
+ HRESULT onmouseleave([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable]
+ HRESULT onmouseleave([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
+ HRESULT onactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable]
+ HRESULT onactivate([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
+ HRESULT ondeactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable]
+ HRESULT ondeactivate([retval, out] VARIANT * p);
+
+ [id(DISPID_IHTMLELEMENT3_DRAGDROP)] HRESULT dragDrop([retval, out]
+ VARIANT_BOOL* pfRet);
+
+ [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable]
+ HRESULT glyphMode([retval, out] LONG * p);
+}
+
+#define WINE_IHTMLELEMENT3_DISPINTERFACE_DECL \
+ \
+ [id(DISPID_IHTMLELEMENT3_MERGEATTRIBUTES)] \
+ void mergeAttributes( \
+ [in] IHTMLElement* mergeThis, \
+ [optional, in] VARIANT* pvarFlags); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ISMULTILINE)] \
+ VARIANT_BOOL isMultiLine(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_CANHAVEHTML)] \
+ VARIANT_BOOL canHaveHTML(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \
+ void onlayoutcomplete(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE), displaybind, bindable] \
+ VARIANT onlayoutcomplete(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] \
+ void onpage(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONPAGE), displaybind, bindable] \
+ VARIANT onpage(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \
+ void inflateBlock(VARIANT_BOOL v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_INFLATEBLOCK), hidden, restricted, nonbrowsable] \
+ VARIANT_BOOL inflateBlock(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \
+ void onbeforedeactivate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE), displaybind, bindable] \
+ VARIANT onbeforedeactivate(); \
+ \
+ [id(DISPID_IHTMLELEMENT3_SETACTIVE)] \
+ void setActive(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \
+ void contentEditable(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_CONTENTEDITABLE), displaybind, bindable] \
+ BSTR contentEditable(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE)] \
+ VARIANT_BOOL isContentEditable(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\
+ void hideFocus(VARIANT_BOOL v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_HIDEFOCUS), displaybind, bindable]\
+ VARIANT_BOOL hideFocus(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \
+ void disabled(VARIANT_BOOL v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_DISABLED), displaybind, bindable] \
+ VARIANT_BOOL disabled(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ISDISABLED)] \
+ VARIANT_BOOL isDisabled(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] \
+ void onmove(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOVE), displaybind, bindable] \
+ VARIANT onmove(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \
+ void oncontrolselect(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONCONTROLSELECT), displaybind, bindable] \
+ VARIANT oncontrolselect(); \
+ \
+ [id(DISPID_IHTMLELEMENT3_FIREEVENT)] \
+ VARIANT_BOOL fireEvent( \
+ [in] BSTR bstrEventName, \
+ [optional, in] VARIANT* pvarEventObject); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \
+ void onresizestart(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONRESIZESTART), displaybind, bindable] \
+ VARIANT onresizestart(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \
+ void onresizeend(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONRESIZEEND), displaybind, bindable] \
+ VARIANT onresizeend(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \
+ void onmovestart(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOVESTART), displaybind, bindable] \
+ VARIANT onmovestart(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\
+ void onmoveend(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOVEEND), displaybind, bindable]\
+ VARIANT onmoveend(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \
+ void onmouseenter(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOUSEENTER), displaybind, bindable] \
+ VARIANT onmouseenter(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \
+ void onmouseleave(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONMOUSELEAVE), displaybind, bindable] \
+ VARIANT onmouseleave(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \
+ void onactivate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONACTIVATE), displaybind, bindable] \
+ VARIANT onactivate(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \
+ void ondeactivate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_ONDEACTIVATE), displaybind, bindable] \
+ VARIANT ondeactivate(); \
+ \
+ [id(DISPID_IHTMLELEMENT3_DRAGDROP)] \
+ VARIANT_BOOL dragDrop(); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT3_GLYPHMODE), hidden, restricted, nonbrowsable] \
+ LONG glyphMode()
+
+/*****************************************************************************
+ * IHTMLElement4 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f80f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLElement4 : IDispatch
+{
+ [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
+ HRESULT onmousewheel([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable]
+ HRESULT onmousewheel([retval, out] VARIANT * p);
+
+ [id(DISPID_IHTMLELEMENT4_NORMALIZE)]
+ HRESULT normalize();
+
+ [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)]
+ HRESULT getAttributeNode([in] BSTR bstrname,
+ [retval, out] IHTMLDOMAttribute** ppAttribute);
+
+ [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)]
+ HRESULT setAttributeNode(
+ [in] IHTMLDOMAttribute* pattr,
+ [retval, out] IHTMLDOMAttribute** ppretAttribute);
+
+ [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)]
+ HRESULT removeAttributeNode(
+ [in] IHTMLDOMAttribute* pattr,
+ [retval, out] IHTMLDOMAttribute** ppretAttribute);
+
+ [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
+ HRESULT onbeforeactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable]
+ HRESULT onbeforeactivate([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
+ HRESULT onfocusin([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]
+ HRESULT onfocusin([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
+ HRESULT onfocusout([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable]
+ HRESULT onfocusout([retval, out] VARIANT * p);
+}
+
+#define WINE_IHTMLELEMENT4_DISPINTERFACE_DECL \
+ [propput, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \
+ void onmousewheel(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT4_ONMOUSEWHEEL), displaybind, bindable] \
+ VARIANT onmousewheel(); \
+ \
+ [id(DISPID_IHTMLELEMENT4_NORMALIZE)] \
+ void normalize(); \
+ \
+ [id(DISPID_IHTMLELEMENT4_GETATTRIBUTENODE)] \
+ IHTMLDOMAttribute* getAttributeNode([in] BSTR bstrname); \
+ \
+ [id(DISPID_IHTMLELEMENT4_SETATTRIBUTENODE)] \
+ IHTMLDOMAttribute* setAttributeNode([in] IHTMLDOMAttribute* pattr); \
+ \
+ [id(DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE)] \
+ IHTMLDOMAttribute* removeAttributeNode([in] IHTMLDOMAttribute* pattr); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \
+ void onbeforeactivate(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE), displaybind, bindable] \
+ VARIANT onbeforeactivate(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\
+ void onfocusin(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSIN), displaybind, bindable]\
+ VARIANT onfocusin(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \
+ void onfocusout(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT4_ONFOCUSOUT), displaybind, bindable] \
+ VARIANT onfocusout()
+
+#define WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL \
+ [id(DISPID_IELEMENTSELECTOR_QUERYSELECTOR)] \
+ IHTMLElement *querySelector([in] BSTR v); \
+ \
+ [id(DISPID_IELEMENTSELECTOR_QUERYSELECTORALL)] \
+ IHTMLDOMChildrenCollection *querySelectorAll([in] BSTR v)
+
+/*****************************************************************************
+ * IHTMLUniqueName interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4d0-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLUniqueName : IDispatch
+{
+ [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden]
+ HRESULT uniqueNumber([retval, out] LONG * p);
+
+ [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden]
+ HRESULT uniqueID([retval, out] BSTR * p);
+}
+
+#define WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL \
+ [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUENUMBER), hidden] \
+ LONG uniqueNumber(); \
+ \
+ [propget, id(DISPID_IHTMLUNIQUENAME_UNIQUEID), hidden] \
+ BSTR uniqueID()
+
+#define WINE_IHTMLELEMENT5_DISPINTERFACE_DECL \
+ [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTENODE)] \
+ IHTMLDOMAttribute2 *ie8_getAttributeNode([in] BSTR bstrname); \
+ \
+ [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTENODE)] \
+ IHTMLDOMAttribute2 *ie8_setAttributeNode([in] IHTMLDOMAttribute2 *pattr); \
+ \
+ [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTENODE)] \
+ IHTMLDOMAttribute2 *ie8_removeAttributeNode([in] IHTMLDOMAttribute2 *pattr); \
+ \
+ [id(DISPID_IHTMLELEMENT5_HASATTRIBUTE)] \
+ VARIANT_BOOL hasAttribute([in] BSTR name); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable] \
+ void role(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ROLE), displaybind, bindable] \
+ BSTR role(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \
+ void ariaBusy(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIABUSY), displaybind, bindable] \
+ BSTR ariaBusy(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \
+ void ariaChecked(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIACHECKED), displaybind, bindable] \
+ BSTR ariaChecked(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \
+ void ariaDisabled(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIADISABLED), displaybind, bindable] \
+ BSTR ariaDisabled(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \
+ void ariaExpanded(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAEXPANDED), displaybind, bindable] \
+ BSTR ariaExpanded(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable]\
+ void ariaHaspopup(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAHASPOPUP), displaybind, bindable] \
+ BSTR ariaHaspopup(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \
+ void ariaHidden(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAHIDDEN), displaybind, bindable] \
+ BSTR ariaHidden(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \
+ void ariaInvalid(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAINVALID), displaybind, bindable] \
+ BSTR ariaInvalid(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \
+ void ariaMultiselectable(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAMULTISELECTABLE), displaybind, bindable] \
+ BSTR ariaMultiselectable(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \
+ void ariaPressed(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAPRESSED), displaybind, bindable] \
+ BSTR ariaPressed(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \
+ void ariaReadonly(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAREADONLY), displaybind, bindable] \
+ BSTR ariaReadonly(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \
+ void ariaRequired(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAREQUIRED), displaybind, bindable] \
+ BSTR ariaRequired(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \
+ void ariaSecret(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIASECRET), displaybind, bindable] \
+ BSTR ariaSecret(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \
+ void ariaSelected(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIASELECTED), displaybind, bindable] \
+ BSTR ariaSelected(); \
+ \
+ [id(DISPID_IHTMLELEMENT5_IE8_GETATTRIBUTE)] \
+ VARIANT ie8_getAttribute([in] BSTR strAttributeName); \
+ \
+ [id(DISPID_IHTMLELEMENT5_IE8_SETATTRIBUTE)] \
+ void ie8_setAttribute([in] BSTR strAttributeName,[in] VARIANT AttributeValue); \
+ \
+ [id(DISPID_IHTMLELEMENT5_IE8_REMOVEATTRIBUTE)] \
+ VARIANT_BOOL ie8_removeAttribute([in] BSTR strAttributeName); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_IE8_ATTRIBUTES)] \
+ IHTMLAttributeCollection3 *ie8_attributes(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \
+ void ariaValuenow(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUENOW), displaybind, bindable] \
+ BSTR ariaValuenow(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \
+ void ariaPosinset(short v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAPOSINSET), displaybind, bindable] \
+ short ariaPosinset(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \
+ void ariaSetsize(short v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIASETSIZE), displaybind, bindable] \
+ short ariaSetsize(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\
+ void ariaLevel(short v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIALEVEL), displaybind, bindable]\
+ short ariaLevel(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \
+ void ariaValuemin(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMIN), displaybind, bindable] \
+ BSTR ariaValuemin(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \
+ void ariaValuemax(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAVALUEMAX), displaybind, bindable] \
+ BSTR ariaValuemax(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \
+ void ariaControls(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIACONTROLS), displaybind, bindable] \
+ BSTR ariaControls(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \
+ void ariaDescribedby(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIADESCRIBEDBY), displaybind, bindable] \
+ BSTR ariaDescribedby(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \
+ void ariaFlowto(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAFLOWTO), displaybind, bindable] \
+ BSTR ariaFlowto(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \
+ void ariaLabelledby(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIALABELLEDBY), displaybind, bindable] \
+ BSTR ariaLabelledby(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \
+ void ariaActivedescendant(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAACTIVEDESCENDANT), displaybind, bindable] \
+ BSTR ariaActivedescendant(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \
+ void ariaOwns(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIAOWNS), displaybind, bindable] \
+ BSTR ariaOwns(); \
+ \
+ [id(DISPID_IHTMLELEMENT5_HASATTRIBUTES)] \
+ VARIANT_BOOL hasAttributes(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \
+ void ariaLive(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIALIVE), displaybind, bindable] \
+ BSTR ariaLive(); \
+ \
+ [propput, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \
+ void ariaRelevant(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLELEMENT5_ARIARELEVANT), displaybind, bindable] \
+ BSTR ariaRelevant()
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f3f2-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDatabinding : IDispatch
+{
+ [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)]
+ HRESULT dataFld([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)]
+ HRESULT dataFld([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLDATABINDING_DATASRC)]
+ HRESULT dataSrc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDATABINDING_DATASRC)]
+ HRESULT dataSrc([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
+ HRESULT dataFormatAs([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)]
+ HRESULT dataFormatAs([retval, out] BSTR * p);
+}
+
+#define WINE_IHTMLDATABINDING_DISPINTERFACE_DECL \
+ [propput, id(DISPID_IHTMLDATABINDING_DATAFLD)] \
+ void dataFld(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLDATABINDING_DATAFLD)] \
+ BSTR dataFld(); \
+ \
+ [propput, id(DISPID_IHTMLDATABINDING_DATASRC)] \
+ void dataSrc(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLDATABINDING_DATASRC)] \
+ BSTR dataSrc(); \
+ \
+ [propput, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \
+ void dataFormatAs(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLDATABINDING_DATAFORMATAS)] \
+ BSTR dataFormatAs()
+
+#define WINE_HTMLELEMENT_DISPINTERFACE_DECL \
+ WINE_IHTMLELEMENT_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT2_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT3_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT4_DISPINTERFACE_DECL; \
+ WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL; \
+ WINE_HTMLDOMNODE_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT5_DISPINTERFACE_DECL; \
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL
+
+#define WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL \
+ WINE_IHTMLELEMENT_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT2_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT3_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT4_DISPINTERFACE_DECL; \
+ WINE_IHTMLUNIQUENAME_DISPINTERFACE_DECL; \
+ WINE_HTMLDOMNODE_DISPINTERFACE_DECL; \
+ WINE_IHTMLDATABINDING_DISPINTERFACE_DECL; \
+ WINE_IHTMLELEMENT5_DISPINTERFACE_DECL; \
+ WINE_IELEMENTSELECTOR_DISPINTERFACE_DECL; \
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL
+
+/*****************************************************************************
+ * IHTMLGenericElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4b7-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLGenericElement : IDispatch
+{
+ [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
+ HRESULT recordset([out, retval] IDispatch **p);
+
+ [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
+ HRESULT namedRecordset(
+ [in] BSTR dataMember,
+ [in, optional] VARIANT *hierarchy,
+ [out, retval] IDispatch **ppRecordset);
+}
+
+/*****************************************************************************
+ * DispHTMLGenericElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f563-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLGenericElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propget, id(DISPID_IHTMLGENERICELEMENT_RECORDSET), hidden]
+ IDispatch *recordset();
+
+ [id(DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET)]
+ IDispatch *namedRecordset(
+ [in] BSTR dataMember,
+ [in, optional] VARIANT *hierarchy);
+}
+
+/*****************************************************************************
+ * IHTMLStyleSheetRule interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F357-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheetRule : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+ HRESULT selectorText([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+ HRESULT selectorText([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE)]
+ HRESULT style([retval, out] IHTMLRuleStyle **p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
+ HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+}
+
+[
+ hidden,
+ uuid(3050f50e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetRule
+{
+properties:
+methods:
+ [propput, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+ void selectorText(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEETRULE_SELECTORTEXT)]
+ BSTR selectorText();
+
+ [propget, id(DISPID_IHTMLSTYLESHEETRULE_STYLE), nonbrowsable]
+ IHTMLRuleStyle* style();
+
+ [propget, id(DISPID_IHTMLSTYLESHEETRULE_READONLY)]
+ VARIANT_BOOL readOnly();
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+ noncreatable,
+ uuid(3050f3ce-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetRule
+{
+ [default] dispinterface DispHTMLStyleSheetRule;
+ interface IHTMLStyleSheetRule;
+ interface IHTMLDOMConstructor;
+}
+
+/*****************************************************************************
+ * IHTMLStyleSheetRulesCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F2E5-98B5-11Cf-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheetRulesCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] LONG index,
+ [retval, out] IHTMLStyleSheetRule **ppHTMLStyleSheetRule);
+}
+
+[
+ hidden,
+ uuid(3050f52f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetRulesCollection
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_LENGTH)]
+ long length();
+
+ [id(DISPID_IHTMLSTYLESHEETRULESCOLLECTION_ITEM)]
+ IHTMLStyleSheetRule* item([in] long index);
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+ noncreatable,
+ uuid(3050f3cd-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetRulesCollection
+{
+ [default] dispinterface DispHTMLStyleSheetRulesCollection;
+ interface IHTMLStyleSheetRulesCollection;
+ interface IHTMLDOMConstructor;
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f7ee-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleSheetPage : IDispatch
+{
+ [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]
+ HRESULT selector([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]
+ HRESULT pseudoClass([retval, out] BSTR *p);
+}
+
+[
+ hidden,
+ uuid(3050f540-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetPage
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLSTYLESHEETPAGE_SELECTOR)]
+ BSTR selector();
+
+ [propget, id(DISPID_IHTMLSTYLESHEETPAGE_PSEUDOCLASS)]
+ BSTR pseudoClass();
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+[
+ noncreatable,
+ uuid(3050f7ef-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetPage
+{
+ [default] dispinterface DispHTMLStyleSheetPage;
+ interface IHTMLStyleSheetPage;
+ interface IHTMLDOMConstructor;
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f7f0-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleSheetPagesCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] LONG index,
+ [retval, out] IHTMLStyleSheetPage **ppHTMLStyleSheetPage);
+}
+
+[
+ hidden,
+ uuid(3050f543-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetPagesCollection
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_LENGTH)]
+ long length();
+
+ [id(DISPID_IHTMLSTYLESHEETPAGESCOLLECTION_ITEM)]
+ IHTMLStyleSheetPage* item([in] long index);
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+ noncreatable,
+ uuid(3050f7f1-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetPagesCollection
+{
+ [default] dispinterface DispHTMLStyleSheetPagesCollection;
+ interface IHTMLStyleSheetPagesCollection;
+ interface IHTMLDOMConstructor;
+}
+
+/*****************************************************************************
+ * IHTMLStyleSheet interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F2E3-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheet : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+ HRESULT title([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+ HRESULT title([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
+ HRESULT parentStyleSheet([retval, out] IHTMLStyleSheet **p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
+ HRESULT owningElement([retval, out] IHTMLElement **p);
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+ HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
+ HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
+ HRESULT imports([retval, out] IHTMLStyleSheetsCollection **p);
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
+ HRESULT href([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
+ HRESULT href([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
+ HRESULT id([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
+ HRESULT addImport(
+ [in] BSTR bstrURL,
+ [defaultvalue(-1), in] LONG lIndex,
+ [retval, out] LONG *plIndex);
+
+ [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
+ HRESULT addRule(
+ [in] BSTR bstrSelector,
+ [in] BSTR bstrStyle,
+ [defaultvalue(-1), in] LONG lIndex,
+ [retval, out] LONG *plNewIndex);
+
+ [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
+ HRESULT removeImport([in] LONG lIndex);
+
+ [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
+ HRESULT removeRule([in] LONG lIndex);
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+ HRESULT media([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+ HRESULT media([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+ HRESULT cssText([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+ HRESULT cssText([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
+ HRESULT rules([retval, out] IHTMLStyleSheetRulesCollection **p);
+}
+
+/*****************************************************************************
+ * IHTMLStyleSheet2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f3d1-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleSheet2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]
+ HRESULT pages([retval, out] IHTMLStyleSheetPagesCollection **p);
+
+ [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]
+ HRESULT addPageRule(
+ [in] BSTR bstrSelector,
+ [in] BSTR bstrStyle,
+ [defaultvalue(-1), in] LONG lIndex,
+ [retval, out] LONG *plNewIndex);
+}
+
+[
+ hidden,
+ uuid(3050f58d-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheet
+{
+properties:
+methods:
+ [propput, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+ void title(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_TITLE)]
+ BSTR title();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_PARENTSTYLESHEET)]
+ IHTMLStyleSheet* parentStyleSheet();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_OWNINGELEMENT)]
+ IHTMLElement* owningElement();
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+ void disabled(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_DISABLED)]
+ VARIANT_BOOL disabled();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_READONLY)]
+ VARIANT_BOOL readOnly();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_IMPORTS)]
+ IHTMLStyleSheetsCollection* imports();
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_HREF)]
+ void href(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_HREF)]
+ BSTR href();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_TYPE)]
+ BSTR type();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_ID)]
+ BSTR id();
+
+ [id(DISPID_IHTMLSTYLESHEET_ADDIMPORT)]
+ LONG addImport(
+ [in] BSTR bstrURL,
+ [defaultvalue(-1), in] LONG lIndex);
+
+ [id(DISPID_IHTMLSTYLESHEET_ADDRULE)]
+ LONG addRule(
+ [in] BSTR bstrSelector,
+ [in] BSTR bstrStyle,
+ [defaultvalue(-1), in] LONG lIndex);
+
+ [id(DISPID_IHTMLSTYLESHEET_REMOVEIMPORT)]
+ void removeImport([in] LONG lIndex);
+
+ [id(DISPID_IHTMLSTYLESHEET_REMOVERULE)]
+ void removeRule([in] LONG lIndex);
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+ void media(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_MEDIA)]
+ BSTR media();
+
+ [propput, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+ void cssText(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_CSSTEXT)]
+ BSTR cssText();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET_RULES)]
+ IHTMLStyleSheetRulesCollection* rules();
+
+ [propget, id(DISPID_IHTMLSTYLESHEET2_PAGES)]
+ IHTMLStyleSheetPagesCollection* pages();
+
+ [id(DISPID_IHTMLSTYLESHEET2_ADDPAGERULE)]
+ LONG addPageRule(
+ [in] BSTR bstrSelector,
+ [in] BSTR bstrStyle,
+ [defaultvalue(-1), in] LONG lIndex);
+}
+
+[
+ noncreatable,
+ uuid(3050f2e4-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheet
+{
+ [default] dispinterface DispHTMLStyleSheet;
+ interface IHTMLStyleSheet;
+ interface IHTMLStyleSheet2;
+}
+
+/*****************************************************************************
+ * IHTMLStyleSheetsCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F37E-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLStyleSheetsCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] VARIANT *pvarIndex,
+ [retval, out] VARIANT *pvarResult);
+}
+
+/*****************************************************************************
+ * DispHTMLStyleSheetsCollection dispinterface
+ */
+[
+ hidden,
+ uuid(3050f547-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleSheetsCollection
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION_LENGTH)]
+ long length();
+
+ [propget, id(DISPID_IHTMLSTYLESHEETSCOLLECTION__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLSTYLESHEETSCOLLECTION_ITEM)]
+ VARIANT item([in] VARIANT *pvarIndex);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+/*****************************************************************************
+ * IHTMLLinkElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f205-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+ HRESULT href([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+ HRESULT href([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+ HRESULT rel([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+ HRESULT rel([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+ HRESULT rev([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+ HRESULT rev([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([out, retval] BSTR *p);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_READYSTATE)]
+ HRESULT readyState([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([out, retval] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)]
+ HRESULT styleSheet([out, retval] IHTMLStyleSheet **p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([out, retval] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]
+ HRESULT media([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]\
+ HRESULT media([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLLinkElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4e5-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+ HRESULT target([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+ HRESULT target([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLLinkElement3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f81e-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement3 : IDispatch
+{
+ [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+ HRESULT charset([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+ HRESULT charset([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+ HRESULT hreflang([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+ HRESULT hreflang([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLLinkElement4 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051043a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLinkElement4 : IDispatch
+{
+ [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+ HRESULT href([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+ HRESULT href([retval, out] BSTR * p);
+}
+
+/*****************************************************************************
+ * DispHTMLLinkElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f524-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLLinkElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+ void href(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_HREF), displaybind, bindable]
+ BSTR href();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+ void rel(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_REL), displaybind, bindable]
+ BSTR rel();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+ void rev(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_REV), displaybind, bindable]
+ BSTR rev();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+ void onload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_STYLESHEET)]
+ IHTMLStyleSheet *styleSheet();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]
+ void media(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT_MEDIA), displaybind, bindable]
+ BSTR media();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+ void target(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT2_TARGET), displaybind, bindable]
+ BSTR target();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+ void charset(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT3_CHARSET), displaybind, bindable]
+ BSTR charset();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+ void hreflang(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT3_HREFLANG), displaybind, bindable]
+ BSTR hreflang();
+
+ [propput, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+ void ie8_href(BSTR v);
+
+ [propget, id(DISPID_IHTMLLINKELEMENT4_IE8_HREF)]
+ BSTR ie8_href();
+}
+
+/*****************************************************************************
+ * IHTMLTxtRange interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f220-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTxtRange : IDispatch
+{
+ [propget, id(DISPID_IHTMLTXTRANGE_HTMLTEXT)]
+ HRESULT htmlText([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTXTRANGE_TEXT)]
+ HRESULT text([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTXTRANGE_TEXT)]
+ HRESULT text([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLTXTRANGE_PARENTELEMENT)]
+ HRESULT parentElement([retval, out] IHTMLElement **parent);
+
+ [id(DISPID_IHTMLTXTRANGE_DUPLICATE)]
+ HRESULT duplicate([retval, out] IHTMLTxtRange **Duplicate);
+
+ [id(DISPID_IHTMLTXTRANGE_INRANGE)]
+ HRESULT inRange(
+ [in] IHTMLTxtRange *Range,
+ [retval, out] VARIANT_BOOL *InRange);
+
+ [id(DISPID_IHTMLTXTRANGE_ISEQUAL)]
+ HRESULT isEqual(
+ [in] IHTMLTxtRange *Range,
+ [retval, out] VARIANT_BOOL *IsEqual);
+
+ [id(DISPID_IHTMLTXTRANGE_SCROLLINTOVIEW)]
+ HRESULT scrollIntoView([defaultvalue(-1), in] VARIANT_BOOL fStart);
+
+ [id(DISPID_IHTMLTXTRANGE_COLLAPSE)]
+ HRESULT collapse([defaultvalue(-1), in] VARIANT_BOOL Start);
+
+ [id(DISPID_IHTMLTXTRANGE_EXPAND)]
+ HRESULT expand(
+ [in] BSTR Unit,
+ [retval, out] VARIANT_BOOL *Success);
+
+ [id(DISPID_IHTMLTXTRANGE_MOVE)]
+ HRESULT move(
+ [in] BSTR Unit,
+ [defaultvalue(1), in] LONG Count,
+ [retval, out] LONG *ActualCount);
+
+ [id(DISPID_IHTMLTXTRANGE_MOVESTART)]
+ HRESULT moveStart(
+ [in] BSTR Unit,
+ [defaultvalue(1), in] LONG Count,
+ [retval, out] LONG *ActualCount);
+
+ [id(DISPID_IHTMLTXTRANGE_MOVEEND)]
+ HRESULT moveEnd(
+ [in] BSTR Unit,
+ [defaultvalue(1), in] LONG Count,
+ [retval, out] LONG *ActualCount);
+
+ [id(DISPID_IHTMLTXTRANGE_SELECT)]
+ HRESULT select();
+
+ [id(DISPID_IHTMLTXTRANGE_PASTEHTML)]
+ HRESULT pasteHTML([in] BSTR html);
+
+ [id(DISPID_IHTMLTXTRANGE_MOVETOELEMENTTEXT)]
+ HRESULT moveToElementText([in] IHTMLElement *element);
+
+ [id(DISPID_IHTMLTXTRANGE_SETENDPOINT)]
+ HRESULT setEndPoint(
+ [in] BSTR how,
+ [in] IHTMLTxtRange *SourceRange);
+
+ [id(DISPID_IHTMLTXTRANGE_COMPAREENDPOINTS)]
+ HRESULT compareEndPoints(
+ [in] BSTR how,
+ [in] IHTMLTxtRange *SourceRange,
+ [retval, out] LONG *ret);
+
+ [id(DISPID_IHTMLTXTRANGE_FINDTEXT)]
+ HRESULT findText(
+ [in] BSTR String,
+ [defaultvalue(1073741823), in] LONG count,
+ [defaultvalue(0), in] LONG Flags,
+ [retval, out] VARIANT_BOOL *Success);
+
+ [id(DISPID_IHTMLTXTRANGE_MOVETOPOINT)]
+ HRESULT moveToPoint(
+ [in] LONG x,
+ [in] LONG y);
+
+ [id(DISPID_IHTMLTXTRANGE_GETBOOKMARK)]
+ HRESULT getBookmark([retval, out] BSTR *Boolmark);
+
+ [id(DISPID_IHTMLTXTRANGE_MOVETOBOOKMARK)]
+ HRESULT moveToBookmark(
+ [in] BSTR Bookmark,
+ [retval, out] VARIANT_BOOL *Success);
+
+ [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSUPPORTED)]
+ HRESULT queryCommandSupported(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDENABLED)]
+ HRESULT queryCommandEnabled(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDSTATE)]
+ HRESULT queryCommandState(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDINDETERM)]
+ HRESULT queryCommandIndeterm(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDTEXT)]
+ HRESULT queryCommandText(
+ [in] BSTR cmdID,
+ [retval, out] BSTR *pcmdText);
+
+ [id(DISPID_IHTMLTXTRANGE_QUERYCOMMANDVALUE)]
+ HRESULT queryCommandValue(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT *pcmdValue);
+
+ [id(DISPID_IHTMLTXTRANGE_EXECCOMMAND)]
+ HRESULT execCommand(
+ [in] BSTR cmdID,
+ [defaultvalue(0), in] VARIANT_BOOL showUI,
+ [optional, in] VARIANT value,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLTXTRANGE_EXECCOMMANDSHOWHELP)]
+ HRESULT execCommandShowHelp(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+}
+
+[
+ noncreatable,
+ uuid(3050f37f-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLStyleSheetsCollection
+{
+ [default] interface IHTMLStyleSheetsCollection;
+}
+
+/*****************************************************************************
+ * IHTMLFormElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F1F7-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLFormElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+ HRESULT action([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+ HRESULT action([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_DIR)]
+ HRESULT dir([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_DIR)]
+ HRESULT dir([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+ HRESULT encoding([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+ HRESULT encoding([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+ HRESULT method([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+ HRESULT method([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
+ HRESULT elements([retval, out] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+ HRESULT target([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+ HRESULT target([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+ HRESULT onsubmit([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+ HRESULT onsubmit([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+ HRESULT onreset([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+ HRESULT onreset([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
+ HRESULT submit();
+
+ [id(DISPID_IHTMLFORMELEMENT_RESET)]
+ HRESULT reset();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+ HRESULT length([in] LONG v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLFORMELEMENT_ITEM)]
+ HRESULT item(
+ [optional, in] VARIANT name,
+ [optional, in] VARIANT index,
+ [retval, out] IDispatch **pdisp);
+
+ [id(DISPID_IHTMLFORMELEMENT_TAGS)]
+ HRESULT tags(
+ [in] VARIANT tagName,
+ [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ * DispHTMLFormElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050F510-98B5-11CF-BB82-00AA00BDCE0B)
+]
+dispinterface DispHTMLFormElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+ void action(BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ACTION)]
+ BSTR action();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+ void encoding(BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ENCODING)]
+ BSTR encoding();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+ void method(BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_METHOD)]
+ BSTR method();
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ELEMENTS)]
+ IDispatch *elements();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+ void target(BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_TARGET)]
+ BSTR target();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_NAME)]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_NAME)]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+ void onsubmit(VARIANT v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ONSUBMIT)]
+ VARIANT onsubmit();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+ void onreset(VARIANT v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_ONRESET)]
+ VARIANT onreset();
+
+ [id(DISPID_IHTMLFORMELEMENT_SUBMIT)]
+ void submit();
+
+ [id(DISPID_IHTMLFORMELEMENT_RESET)]
+ void reset();
+
+ [propput, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+ void length(long v);
+
+ [propget, id(DISPID_IHTMLFORMELEMENT_LENGTH)]
+ long length();
+
+ [propget, id(DISPID_IHTMLFORMELEMENT__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLFORMELEMENT_ITEM)]
+ IDispatch *item(VARIANT name, VARIANT index);
+
+ [id(DISPID_IHTMLFORMELEMENT_TAGS)]
+ IDispatch *tags(VARIANT tagName);
+}
+
+[
+ hidden,
+ uuid(3050F364-98B5-11CF-BB82-00AA00BDCE0B)
+]
+dispinterface HTMLFormElementEvents
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+ VARIANT_BOOL onhelp();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+ VARIANT_BOOL onclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+ void onkeydown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+ void onkeyup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+ void onmouseout();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+ void onmouseover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+ void onmousemove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+ void onmousedown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+ void onmouseup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+ void onfilterchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+ void onafterupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+ VARIANT_BOOL onrowexit();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+ void onrowenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+ void ondatasetchanged();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+ void ondataavailable();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+ void ondatasetcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+ void onlosecapture();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+ void onpropertychange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+ void onscroll();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+ void onfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+ void onblur();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+ void onresize();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+ VARIANT_BOOL ondrag();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+ void ondragend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+ VARIANT_BOOL ondragover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+ void ondragleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+ VARIANT_BOOL ondrop();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+ VARIANT_BOOL oncut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+ VARIANT_BOOL oncopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+ VARIANT_BOOL onpaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+ void onrowsdelete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+ void onrowsinserted();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+ void oncellchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+ void onreadystatechange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+ void onbeforeeditfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+ void onpage();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+ void onmove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+ VARIANT_BOOL onmovestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+ void onmoveend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+ void onresizeend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+ void onmouseenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+ void onmouseleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+ void onactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+ void ondeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+ void onfocusin();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+ void onfocusout();
+
+ [id(DISPID_HTMLFORMELEMENTEVENTS_ONSUBMIT)]
+ VARIANT_BOOL onsubmit();
+
+ [id(DISPID_HTMLFORMELEMENTEVENTS_ONRESET)]
+ VARIANT_BOOL onreset();
+}
+
+interface IHTMLEventObj;
+
+[
+ hidden,
+ uuid(3050F614-98B5-11CF-BB82-00AA00BDCE0B)
+]
+dispinterface HTMLFormElementEvents2
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+ VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+ VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+ void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+ void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+ void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+ void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+ void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+ void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+ void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+ void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+ void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+ VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+ void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+ void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+ void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+ void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+ void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+ void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+ void onscroll([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+ void onfocus([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+ void onblur([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+ void onresize([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+ VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+ void ondragend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+ VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+ void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+ VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+ VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+ VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+ VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+ void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+ void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+ void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+ void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+ void onpage([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+ void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+ void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+ void onactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+ void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+ void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+ void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+ void onmove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+ VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+ void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+ void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLFORMELEMENTEVENTS2_ONSUBMIT)]
+ VARIANT_BOOL onsubmit([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLFORMELEMENTEVENTS2_ONRESET)]
+ VARIANT_BOOL onreset([in] IHTMLEventObj* pEvtObj);
+}
+
+[
+ noncreatable,
+ uuid(3050F24D-98B5-11CF-BB82-00AA00BDCE0B)
+]
+coclass HTMLFormElement
+{
+ [default] dispinterface DispHTMLFormElement;
+ [source, default] dispinterface HTMLFormElementEvents;
+ [source] dispinterface HTMLFormElementEvents2;
+ interface IHTMLElement;
+ interface IHTMLElement2;
+ interface IHTMLElement3;
+ interface IHTMLElement4;
+ interface IHTMLUniqueName;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+ interface IHTMLDOMConstructor;
+ interface IHTMLFormElement;
+}
+
+/*****************************************************************************
+ * IHTMLTextContainer interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f230-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTextContainer : IDispatch
+{
+ [id(DISPID_IHTMLTEXTCONTAINER_CREATECONTROLRANGE)]
+ HRESULT createControlRange([retval, out] IDispatch **range);
+
+ [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLHEIGHT), displaybind, bindable]
+ HRESULT scrollHeight([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLWIDTH), displaybind, bindable]
+ HRESULT scrollWidth([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
+ HRESULT scrollTop([in] LONG v);
+
+ [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLTOP), displaybind, bindable]
+ HRESULT scrollTop([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
+ HRESULT scrollLeft([in] LONG v);
+
+ [propget, id(DISPID_IHTMLTEXTCONTAINER_SCROLLLEFT), displaybind, bindable]
+ HRESULT scrollLeft([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
+ HRESULT onscroll([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTCONTAINER_ONSCROLL), displaybind, bindable]
+ HRESULT onscroll([retval, out] VARIANT *p);
+}
+
+/*****************************************************************************
+ * IHTMLImgElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F240-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLImgElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
+ HRESULT isMap([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP)]
+ HRESULT isMap([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
+ HRESULT useMap([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP)]
+ HRESULT useMap([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
+ HRESULT mimeType([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
+ HRESULT fileSize([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
+ HRESULT fileCreatedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
+ HRESULT fileModifiedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
+ HRESULT fileUpdatedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
+ HRESULT protocol([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
+ HRESULT href([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
+ HRESULT nameProp([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_BORDER)]
+ HRESULT border([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_BORDER)]
+ HRESULT border([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
+ HRESULT vspace([in] LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE)]
+ HRESULT vspace([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
+ HRESULT hspace([in] LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE)]
+ HRESULT hspace([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ALT)]
+ HRESULT alt([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ALT)]
+ HRESULT alt([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_SRC)]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_SRC)]
+ HRESULT src([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
+ HRESULT lowsrc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC)]
+ HRESULT lowsrc([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_VRML)]
+ HRESULT vrml([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_VRML)]
+ HRESULT vrml([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
+ HRESULT dynsrc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC)]
+ HRESULT dynsrc([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
+ HRESULT complete([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_LOOP)]
+ HRESULT loop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_LOOP)]
+ HRESULT loop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN)]
+ HRESULT align([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD)]
+ HRESULT onload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR)]
+ HRESULT onerror([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
+ HRESULT onabort([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT)]
+ HRESULT onabort([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_NAME)]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_NAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+ HRESULT width([in] LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+ HRESULT width([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+ HRESULT height([in] LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+ HRESULT height([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_START)]
+ HRESULT start([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_START)]
+ HRESULT start([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLImageElementFactory interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F38E-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLImageElementFactory : IDispatch
+{
+ [id(DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE)]
+ HRESULT create(
+ [optional, in] VARIANT width,
+ [optional, in] VARIANT height,
+ [retval, out] IHTMLImgElement **elem);
+}
+
+/*****************************************************************************
+ * DispHTMLImg interface
+ */
+[
+ hidden,
+ uuid(3050f51c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLImg
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
+ void isMap(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ISMAP), displaybind, bindable]
+ VARIANT_BOOL isMap();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
+ void useMap(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_USEMAP), displaybind, bindable]
+ BSTR useMap();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_MIMETYPE)]
+ BSTR mimeType();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILESIZE)]
+ BSTR fileSize();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILECREATEDDATE)]
+ BSTR fileCreatedDate();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILEMODIFIEDDATE)]
+ BSTR fileModifiedDate();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_FILEUPDATEDDATE)]
+ BSTR fileUpdatedDate();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_PROTOCOL)]
+ BSTR protocol();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_HREF)]
+ BSTR href();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_NAMEPROP)]
+ BSTR nameProp();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
+ void border(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_BORDER), displaybind, bindable]
+ VARIANT border();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
+ void vspace(LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_VSPACE), displaybind, bindable]
+ LONG vspace();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
+ void hspace(LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_HSPACE), displaybind, bindable]
+ LONG hspace();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
+ void alt(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ALT), displaybind, bindable]
+ BSTR alt();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
+ void src(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_SRC), displaybind, bindable]
+ BSTR src();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
+ void lowsrc(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_LOWSRC), displaybind, bindable]
+ BSTR lowsrc();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
+ void vrml(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_VRML), displaybind, bindable]
+ BSTR vrml();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
+ void dynsrc(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_DYNSRC), displaybind, bindable]
+ BSTR dynsrc();
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_COMPLETE)]
+ VARIANT_BOOL complete();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
+ void loop(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_LOOP), displaybind, bindable]
+ VARIANT loop();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ALIGN), displaybind, bindable]
+ BSTR align();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
+ void onload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
+ void onabort(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_ONABORT), displaybind, bindable]
+ VARIANT onabort();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+ void width(LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_WIDTH)]
+ LONG width();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+ void height(LONG v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_HEIGHT)]
+ LONG height();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
+ void start(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT_START), displaybind, bindable]
+ BSTR start();
+
+ [propput, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
+ void longDesc(BSTR v);
+
+ [propget, id(DISPID_IHTMLIMGELEMENT2_LONGDESC), displaybind, bindable]
+ BSTR longDesc();
+}
+
+/*****************************************************************************
+ * IHTMLXMLHttpRequest interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051040a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLXMLHttpRequest : IDispatch
+{
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]
+ HRESULT readyState([out, retval] long *p);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]
+ HRESULT responseBody([out, retval] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]
+ HRESULT responseText([out, retval] BSTR *p);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]
+ HRESULT responseXML([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]
+ HRESULT status([out, retval] long *p);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]
+ HRESULT statusText([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([out, retval] VARIANT *p);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)] HRESULT abort();
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]
+ HRESULT open(
+ [in] BSTR bstrMethod,
+ [in] BSTR bstrUrl,
+ [in] VARIANT varAsync,
+ [in, optional] VARIANT varUser,
+ [in, optional] VARIANT varPassword);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]
+ HRESULT send([in, optional] VARIANT varBody);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]
+ HRESULT getAllResponseHeaders([out, retval] BSTR *p);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]
+ HRESULT getResponseHeader(
+ [in] BSTR bstrHeader,
+ [out, retval] BSTR *p);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]
+ HRESULT setRequestHeader(
+ [in] BSTR bstrHeader,
+ [in] BSTR bstrValue);
+}
+
+/*****************************************************************************
+ * IHTMLXMLHttpRequest2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510482-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLXMLHttpRequest2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+ HRESULT timeout([in] long v);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+ HRESULT timeout([out, retval] long *p);
+
+ [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+ HRESULT ontimeout([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+ HRESULT ontimeout([out, retval] VARIANT *p);
+}
+
+/*****************************************************************************
+ * IHTMLXMLHttpRequestFactory interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051040c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLXMLHttpRequestFactory : IDispatch
+{
+ [id(DISPID_IHTMLXMLHTTPREQUESTFACTORY_CREATE)]
+ HRESULT create([out, retval] IHTMLXMLHttpRequest **p);
+}
+
+/*****************************************************************************
+ * DispHTMLXMLHttpRequest dispinterface
+ */
+[
+ hidden,
+ uuid(3050f596-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLXMLHttpRequest
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_READYSTATE)]
+ long readyState();
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEBODY)]
+ VARIANT responseBody();
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSETEXT)]
+ BSTR responseText();
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_RESPONSEXML)]
+ IDispatch *responseXML();
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUS)]
+ long status();
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_STATUSTEXT)]
+ BSTR statusText();
+
+ [propput, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+ void onreadystatechange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST_ONREADYSTATECHANGE), displaybind, bindable]
+ VARIANT onreadystatechange();
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_ABORT)]
+ void abort();
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_OPEN)]
+ void open(
+ [in] BSTR bstrMethod,
+ [in] BSTR bstrUrl,
+ [in] VARIANT varAsync,
+ [in, optional] VARIANT varUser,
+ [in, optional] VARIANT varPassword);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_SEND)]
+ void send([in, optional] VARIANT varBody);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_GETALLRESPONSEHEADERS)]
+ BSTR getAllResponseHeaders();
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_GETRESPONSEHEADER)]
+ BSTR getResponseHeader([in] BSTR bstrHeader);
+
+ [id(DISPID_IHTMLXMLHTTPREQUEST_SETREQUESTHEADER)]
+ void setRequestHeader(
+ [in] BSTR bstrHeader,
+ [in] BSTR bstrValue);
+
+ [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+ void timeout(long v);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_TIMEOUT)]
+ long timeout();
+
+ [propput, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+ void ontimeout(VARIANT v);
+
+ [propget, id(DISPID_IHTMLXMLHTTPREQUEST2_ONTIMEOUT), displaybind, bindable]
+ VARIANT ontimeout();
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+
+
+ [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]
+ void addEventListener(
+ [in] BSTR type,
+ [in] IDispatch *listener,
+ [in] VARIANT_BOOL useCapture);
+
+ [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]
+ void removeEventListener(
+ [in] BSTR type,
+ [in] IDispatch *listener,
+ [in] VARIANT_BOOL useCapture);
+
+ [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]
+ VARIANT_BOOL dispatchEvent([in] IDOMEvent *evt);
+}
+
+/*****************************************************************************
+ * IHTMLControlElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4e9-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLControlElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
+ HRESULT tabIndex([in] short v);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_TABINDEX), displaybind, bindable]
+ HRESULT tabIndex([retval, out] short * p);
+
+ [id(DISPID_IHTMLCONTROLELEMENT_FOCUS)]
+ HRESULT focus();
+
+ [propput, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
+ HRESULT onblur([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_ONBLUR), displaybind, bindable]
+ HRESULT onblur([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
+ HRESULT onfocus([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_ONFOCUS), displaybind, bindable]
+ HRESULT onfocus([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
+ HRESULT onresize([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_ONRESIZE), displaybind, bindable]
+ HRESULT onresize([retval, out] VARIANT * p);
+
+ [id(DISPID_IHTMLCONTROLELEMENT_BLUR)]
+ HRESULT blur();
+
+ [id(DISPID_IHTMLCONTROLELEMENT_ADDFILTER)]
+ HRESULT addFilter([in] IUnknown* pUnk);
+
+ [id(DISPID_IHTMLCONTROLELEMENT_REMOVEFILTER)]
+ HRESULT removeFilter([in] IUnknown* pUnk);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTHEIGHT), displaybind, bindable]
+ HRESULT clientHeight([retval, out] LONG * p);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTWIDTH), displaybind, bindable]
+ HRESULT clientWidth([retval, out] LONG * p);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTTOP), displaybind, bindable]
+ HRESULT clientTop([retval, out] LONG * p);
+
+ [propget, id(DISPID_IHTMLCONTROLELEMENT_CLIENTLEFT), displaybind, bindable]
+ HRESULT clientLeft([retval, out] LONG * p);
+}
+
+/*****************************************************************************
+ * IHTMLBodyElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f1d8-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLBodyElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+ HRESULT background([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+ HRESULT background([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+ HRESULT bgProperties([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+ HRESULT bgProperties([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+ HRESULT leftMargin([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+ HRESULT leftMargin([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+ HRESULT topMargin([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+ HRESULT topMargin([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+ HRESULT rightMargin([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+ HRESULT rightMargin([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+ HRESULT bottomMargin([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+ HRESULT bottomMargin([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+ HRESULT noWrap([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+ HRESULT noWrap([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+ HRESULT bgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+ HRESULT bgColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+ HRESULT text([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+ HRESULT text([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+ HRESULT link([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+ HRESULT link([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+ HRESULT vLink([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+ HRESULT vLink([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+ HRESULT aLink([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+ HRESULT aLink([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+ HRESULT onunload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+ HRESULT onunload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+ HRESULT scroll([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+ HRESULT scroll([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+ HRESULT onbeforeunload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+ HRESULT onbeforeunload([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
+ HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+}
+
+/*****************************************************************************
+ * IHTMLBodyElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f5c5-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLBodyElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+ HRESULT onbeforeprint([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+ HRESULT onbeforeprint([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+ HRESULT onafterprint([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+ HRESULT onafterprint([retval, out] VARIANT *p);
+}
+
+[
+ hidden,
+ uuid(3050f507-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLBody
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+ void background(BSTR v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BACKGROUND), displaybind, bindable]
+ BSTR background();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+ void bgProperties(BSTR v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BGPROPERTIES), displaybind, bindable]
+ BSTR bgProperties();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+ void leftMargin(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_LEFTMARGIN), displaybind, bindable]
+ VARIANT leftMargin();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+ void topMargin(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_TOPMARGIN), displaybind, bindable]
+ VARIANT topMargin();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+ void rightMargin(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_RIGHTMARGIN), displaybind, bindable]
+ VARIANT rightMargin();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+ void bottomMargin(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BOTTOMMARGIN), displaybind, bindable]
+ VARIANT bottomMargin();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+ void noWrap(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_NOWRAP), displaybind, bindable]
+ VARIANT_BOOL noWrap();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+ void bgColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_BGCOLOR), displaybind, bindable]
+ VARIANT bgColor();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+ void text(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_TEXT), displaybind, bindable]
+ VARIANT text();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+ void link(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_LINK), displaybind, bindable]
+ VARIANT link();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+ void vLink(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_VLINK), displaybind, bindable]
+ VARIANT vLink();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+ void aLink(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ALINK), displaybind, bindable]
+ VARIANT aLink();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+ void onload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+ void onunload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONUNLOAD), displaybind, bindable]
+ VARIANT onunload();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+ void scroll(BSTR v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_SCROLL), displaybind, bindable]
+ BSTR scroll();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+ void onselect(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONSELECT), displaybind, bindable]
+ VARIANT onselect();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+ void onbeforeunload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT_ONBEFOREUNLOAD), displaybind, bindable]
+ VARIANT onbeforeunload();
+
+ [id(DISPID_IHTMLBODYELEMENT_CREATETEXTRANGE)]
+ IHTMLTxtRange* createTextRange();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+ void onbeforeprint(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT2_ONBEFOREPRINT), displaybind, bindable]
+ VARIANT onbeforeprint();
+
+ [propput, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+ void onafterprint(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBODYELEMENT2_ONAFTERPRINT), displaybind, bindable]
+ VARIANT onafterprint();
+}
+
+[
+ uuid(3050f24a-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLBody
+{
+ [default] dispinterface DispHTMLBody;
+ [source, default] dispinterface HTMLTextContainerEvents;
+ [source] dispinterface HTMLTextContainerEvents2;
+ interface IHTMLElement;
+ interface IHTMLElement2;
+ interface IHTMLElement3;
+ interface IHTMLElement4;
+ interface IHTMLUniqueName;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+ interface IHTMLControlElement;
+ interface IHTMLTextContainer;
+ interface IHTMLBodyElement;
+ interface IHTMLBodyElement2;
+}
+
+/*****************************************************************************
+ * IHTMLAnchorElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f1da-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLAnchorElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+ HRESULT href([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+ HRESULT href([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+ HRESULT target([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+ HRESULT target([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+ HRESULT rel([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+ HRESULT rel([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+ HRESULT rev([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+ HRESULT rev([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+ HRESULT urn([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+ HRESULT urn([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+ HRESULT Methods([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+ HRESULT Methods([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+ HRESULT host([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+ HRESULT host([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+ HRESULT hostname([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+ HRESULT hostname([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+ HRESULT pathname([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+ HRESULT pathname([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+ HRESULT port([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+ HRESULT port([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+ HRESULT protocol([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+ HRESULT protocol([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+ HRESULT search([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+ HRESULT search([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+ HRESULT hash([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+ HRESULT hash([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
+ HRESULT onblur([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_ONBLUR), displaybind, bindable]
+ HRESULT onblur([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
+ HRESULT onfocus([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_ONFOCUS), displaybind, bindable]
+ HRESULT onfocus([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
+ HRESULT protocolLong([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
+ HRESULT mimeType([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
+ HRESULT nameProp([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
+ HRESULT tabIndex([in] short v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_TABINDEX), displaybind, bindable]
+ HRESULT tabIndex([retval, out] short *p);
+
+ [id(DISPID_IHTMLANCHORELEMENT_FOCUS)]
+ HRESULT focus();
+
+ [id(DISPID_IHTMLANCHORELEMENT_BLUR)]
+ HRESULT blur();
+}
+
+/*****************************************************************************
+ * DispHTMLAnchorElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f502-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLAnchorElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+ void href(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HREF), displaybind, bindable]
+ BSTR href();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+ void target(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_TARGET), displaybind, bindable]
+ BSTR target();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+ void rel(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_REL), displaybind, bindable]
+ BSTR rel();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+ void rev(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_REV), displaybind, bindable]
+ BSTR rev();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+ void urn(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_URN), displaybind, bindable]
+ BSTR urn();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+ void Methods(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_METHODS), displaybind, bindable]
+ BSTR Methods();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+ void host(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HOST)]
+ BSTR host();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+ void hostname(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HOSTNAME)]
+ BSTR hostname();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+ void pathname(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PATHNAME)]
+ BSTR pathname();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+ void port(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PORT)]
+ BSTR port();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+ void protocol(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOL)]
+ BSTR protocol();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+ void search(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_SEARCH)]
+ BSTR search();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+ void hash(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_HASH)]
+ BSTR hash();
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_PROTOCOLLONG)]
+ BSTR protocolLong();
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_MIMETYPE)]
+ BSTR mimeType();
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT_NAMEPROP)]
+ BSTR nameProp();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]
+ void charset(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT2_CHARSET), displaybind, bindable]
+ BSTR charset();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]
+ void coords(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT2_COORDS), displaybind, bindable]
+ BSTR coords();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]
+ void hreflang(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT2_HREFLANG), displaybind, bindable]
+ BSTR hreflang();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]
+ void shape(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT2_SHAPE), displaybind, bindable]
+ BSTR shape();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT2_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]
+ void ie8_shape(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_SHAPE)]
+ BSTR ie8_shape();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]
+ void ie8_coords(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_COORDS)]
+ BSTR ie8_coords();
+
+ [propput, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]
+ void ie8_href(BSTR v);
+
+ [propget, id(DISPID_IHTMLANCHORELEMENT3_IE8_HREF)]
+ BSTR ie8_href();
+}
+
+/*****************************************************************************
+ * IHTMLLabelElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f32a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLabelElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+ HRESULT htmlFor([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+ HRESULT htmlFor([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLABELELEMENT_ACCESSKEY), displaybind, bindable]
+ HRESULT accessKey([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLLabelElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f832-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLLabelElement2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)]
+ HRESULT form([out, retval] IHTMLFormElement **p);
+}
+
+/*****************************************************************************
+ * DispHTMLLabelElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f522-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLLabelElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+ void htmlFor(BSTR v);
+
+ [propget, id(DISPID_IHTMLLABELELEMENT_HTMLFOR), displaybind, bindable]
+ BSTR htmlFor();
+
+ [propget, id(DISPID_IHTMLLABELELEMENT2_FORM)]
+ IHTMLFormElement *form();
+}
+
+/*****************************************************************************
+ * IHTMLElementCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F21F-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLElementCollection : IDispatch
+{
+ [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+
+ [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+ HRESULT length([in] LONG v);
+
+ [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
+ HRESULT item(
+ [optional, in] VARIANT name,
+ [optional, in] VARIANT index,
+ [retval, out] IDispatch **pdisp);
+
+ [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
+ HRESULT tags(
+ [in] VARIANT tagName,
+ [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ * DispHTMLElementCollection dispinterface
+ */
+[
+ hidden,
+ uuid(3050f56b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLElementCollection
+{
+properties:
+methods:
+ [id(DISPID_IHTMLELEMENTCOLLECTION_TOSTRING)]
+ BSTR toString();
+
+ [propput, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+ void length(LONG v);
+
+ [propget, id(DISPID_IHTMLELEMENTCOLLECTION_LENGTH)]
+ LONG length();
+
+ [propget, id(DISPID_IHTMLELEMENTCOLLECTION__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLELEMENTCOLLECTION_ITEM)]
+ IDispatch *item(
+ [in, optional] VARIANT name,
+ [in, optional] VARIANT index);
+
+ [id(DISPID_IHTMLELEMENTCOLLECTION_TAGS)]
+ IDispatch *tags(
+ [in] VARIANT tagName);
+
+ [id(DISPID_IHTMLELEMENTCOLLECTION2_URNS)]
+ IDispatch *urns([in] VARIANT urn);
+
+ [id(DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM)]
+ IDispatch *namedItem([in] BSTR name);
+}
+
+/*****************************************************************************
+ * IHTMLSelectElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f244-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLSelectElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+ HRESULT size([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+ HRESULT size([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+ HRESULT multiple([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+ HRESULT multiple([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
+ HRESULT options([retval, out] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+ HRESULT selectedIndex([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+ HRESULT selectedIndex([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
+ HRESULT form([retval, out] IHTMLFormElement **p);
+
+ [id(DISPID_IHTMLSELECTELEMENT_ADD)]
+ HRESULT add(
+ [in] IHTMLElement *element,
+ [optional, in] VARIANT before);
+
+ [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
+ HRESULT remove([defaultvalue(-1), in] LONG index);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+ HRESULT length([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
+ HRESULT item(
+ [optional, in] VARIANT name,
+ [optional, in] VARIANT index,
+ [retval, out] IDispatch **pdisp);
+
+ [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
+ HRESULT tags(
+ [in] VARIANT tagName,
+ [retval, out] IDispatch **pdisp);
+}
+
+/*****************************************************************************
+ * DispHTMLSelectElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f531-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLSelectElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+ void size(LONG v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_SIZE), displaybind, bindable]
+ LONG size();
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+ void multiple(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_MULTIPLE), displaybind, bindable]
+ VARIANT_BOOL multiple();
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_OPTIONS)]
+ IDispatch *options();
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+ void onchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_ONCHANGE), displaybind, bindable]
+ VARIANT onchange();
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+ void selectedIndex(LONG v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_SELECTEDINDEX)]
+ LONG selectedIndex();
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_VALUE), displaybind, bindable]
+ BSTR value();
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_FORM)]
+ IHTMLFormElement *form();
+
+ [id(DISPID_IHTMLSELECTELEMENT_ADD)]
+ void add(
+ [in] IHTMLElement *element,
+ [in, optional] VARIANT before);
+
+ [id(DISPID_IHTMLSELECTELEMENT_REMOVE)]
+ void remove([in, defaultvalue(-1)] LONG index);
+
+ [propput, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+ void length(LONG v);
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT_LENGTH)]
+ LONG length();
+
+ [propget, id(DISPID_IHTMLSELECTELEMENT__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLSELECTELEMENT_ITEM)]
+ IDispatch *item(
+ [in, optional] VARIANT name,
+ [in, optional] VARIANT index);
+
+ [id(DISPID_IHTMLSELECTELEMENT_TAGS)]
+ IDispatch *tags([in] VARIANT tagName);
+
+ [id(DISPID_IHTMLSELECTELEMENT2_URNS)]
+ IDispatch *urns([in] VARIANT urn);
+
+ [id(DISPID_IHTMLSELECTELEMENT4_NAMEDITEM)]
+ IDispatch *namedItem([in] BSTR name);
+}
+
+/*****************************************************************************
+ * IHTMLSelectionObject interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F25A-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLSelectionObject : IDispatch
+{
+ [id(DISPID_IHTMLSELECTIONOBJECT_CREATERANGE)]
+ HRESULT createRange([retval, out] IDispatch **range);
+
+ [id(DISPID_IHTMLSELECTIONOBJECT_EMPTY)]
+ HRESULT empty();
+
+ [id(DISPID_IHTMLSELECTIONOBJECT_CLEAR)]
+ HRESULT clear();
+
+ [propget, id(DISPID_IHTMLSELECTIONOBJECT_TYPE)]
+ HRESULT type([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLOptionElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F211-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLOptionElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+ HRESULT selected([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+ HRESULT selected([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+ HRESULT defaultSelected([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+ HRESULT defaultSelected([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+ HRESULT index([in] LONG v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+ HRESULT index([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+ HRESULT text([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+ HRESULT text([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
+ HRESULT form([retval, out] IHTMLFormElement **p);
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f820-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLOptionElement3 : IDispatch
+{
+ [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+ HRESULT label([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+ HRESULT label([retval, out] BSTR * p);
+}
+
+/*****************************************************************************
+ * IHTMLOptionElementFactory interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F38C-98B5-11Cf-BB82-00AA00BDCE0B)
+]
+interface IHTMLOptionElementFactory : IDispatch
+{
+ [id(DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE)]
+ HRESULT create(
+ [optional, in] VARIANT text,
+ [optional, in] VARIANT value,
+ [optional, in] VARIANT defaultselected,
+ [optional, in] VARIANT selected,
+ [retval, out] IHTMLOptionElement **optelem);
+}
+
+/*****************************************************************************
+ * DispHTMLOptionElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f52b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLOptionElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+ void selected(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_SELECTED)]
+ VARIANT_BOOL selected();
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_VALUE)]
+ BSTR value();
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+ void defaultSelected(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_DEFAULTSELECTED)]
+ VARIANT_BOOL defaultSelected();
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+ void index(LONG v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_INDEX)]
+ LONG index();
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+ void text(BSTR v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_TEXT)]
+ BSTR text();
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT_FORM)]
+ IHTMLFormElement *form();
+
+ [propput, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+ void label(BSTR v);
+
+ [propget, id(DISPID_IHTMLOPTIONELEMENT3_LABEL), displaybind, bindable]
+ BSTR label();
+}
+
+[
+ noncreatable,
+ uuid(3050f24d-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLOptionElement
+{
+ [default] dispinterface DispHTMLOptionElement;
+ [source, default] dispinterface HTMLElementEvents;
+ [source] dispinterface HTMLElementEvents2;
+ interface IHTMLElement;
+ interface IHTMLElement2;
+ interface IHTMLElement3;
+ interface IHTMLElement4;
+ interface IHTMLUniqueName;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+ interface IHTMLDatabinding;
+ interface IHTMLOptionElement;
+ interface IHTMLOptionElement3;
+}
+
+/*****************************************************************************
+ * IHTMLInputElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f5d2-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLInputElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+ HRESULT status([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+ HRESULT status([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
+ HRESULT form([retval, out] IHTMLFormElement **p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+ HRESULT size([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+ HRESULT size([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+ HRESULT maxLength([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+ HRESULT maxLength([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
+ HRESULT select();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ HRESULT defaultValue([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ HRESULT defaultValue([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+ HRESULT readOnly([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+ HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+ [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
+ HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+ HRESULT indeterminate([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+ HRESULT indeterminate([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+ HRESULT defaultChecked([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+ HRESULT defaultChecked([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+ HRESULT checked([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+ HRESULT checked([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+ HRESULT border([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+ HRESULT border([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+ HRESULT vspace([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+ HRESULT vspace([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+ HRESULT hspace([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+ HRESULT hspace([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+ HRESULT alt([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+ HRESULT alt([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+ HRESULT src([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+ HRESULT lowsrc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+ HRESULT lowsrc([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+ HRESULT vrml([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+ HRESULT vrml([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+ HRESULT dynsrc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+ HRESULT dynsrc([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
+ HRESULT complete([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+ HRESULT loop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+ HRESULT loop([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+ HRESULT align([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+ HRESULT onabort([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+ HRESULT onabort([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+ HRESULT width([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+ HRESULT width([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+ HRESULT height([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+ HRESULT height([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+ HRESULT start([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+ HRESULT start([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLInputTextElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f2a6-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLInputTextElement : IDispatch
+{
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_TYPE)]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
+ HRESULT status([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_STATUS)]
+ HRESULT status([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_FORM)]
+ HRESULT form([retval, out] IHTMLFormElement **p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ HRESULT defaultValue([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ HRESULT defaultValue([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
+ HRESULT size([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_SIZE), displaybind, bindable]
+ HRESULT size([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
+ HRESULT maxLength([in] LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_MAXLENGTH), displaybind, bindable]
+ HRESULT maxLength([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLINPUTTEXTELEMENT_SELECT)]
+ HRESULT select();
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
+ HRESULT readOnly([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTTEXTELEMENT_READONLY), displaybind, bindable]
+ HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+ [id(DISPID_IHTMLINPUTTEXTELEMENT_CREATETEXTRANGE)]
+ HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+}
+
+[
+ hidden,
+ uuid(3050f57d-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLInputElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_TYPE)]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_VALUE), displaybind, bindable]
+ BSTR value();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+ void status(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_STATUS)]
+ VARIANT_BOOL status();
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_FORM)]
+ IHTMLFormElement *form();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+ void size(LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_SIZE), displaybind, bindable]
+ LONG size();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+ void maxLength(LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_MAXLENGTH), displaybind, bindable]
+ LONG maxLength();
+
+ [id(DISPID_IHTMLINPUTELEMENT_SELECT)]
+ void select();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+ void onchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONCHANGE), displaybind, bindable]
+ VARIANT onchange();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+ void onselect(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONSELECT), displaybind, bindable]
+ VARIANT onselect();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ void defaultValue(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ BSTR defaultValue();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+ void readOnly(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_READONLY), displaybind, bindable]
+ VARIANT_BOOL readOnly();
+
+ [id(DISPID_IHTMLINPUTELEMENT_CREATETEXTRANGE)]
+ IHTMLTxtRange *createTextRange();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+ void indeterminate(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_INDETERMINATE), bindable]
+ VARIANT_BOOL indeterminate();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+ void defaultChecked(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DEFAULTCHECKED), bindable]
+ VARIANT_BOOL defaultChecked();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+ void checked(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_CHECKED), bindable]
+ VARIANT_BOOL checked();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+ void border(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_BORDER), displaybind, bindable]
+ VARIANT border();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+ void vspace(LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_VSPACE), displaybind, bindable]
+ LONG vspace();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+ void hspace(LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_HSPACE), displaybind, bindable]
+ LONG hspace();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+ void alt(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ALT), displaybind, bindable]
+ BSTR alt();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+ void src(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_SRC), displaybind, bindable]
+ BSTR src();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+ void lowsrc(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_LOWSRC), displaybind, bindable]
+ BSTR lowsrc();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+ void vrml(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_VRML), displaybind, bindable]
+ BSTR vrml();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+ void dynsrc(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_DYNSRC), displaybind, bindable]
+ BSTR dynsrc();
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_COMPLETE)]
+ VARIANT_BOOL complete();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+ void loop(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_LOOP), displaybind, bindable]
+ VARIANT loop();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ALIGN), displaybind, bindable]
+ BSTR align();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+ void onload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+ void onabort(VARIANT v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_ONABORT), displaybind, bindable]
+ VARIANT onabort();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+ void width(LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_WIDTH)]
+ LONG width();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+ void height(LONG v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_HEIGHT)]
+ LONG height();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+ void start(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT_START), displaybind, bindable]
+ BSTR start();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
+ void accept(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT2_ACCEPT), displaybind, bindable]
+ BSTR accept();
+
+ [propput, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
+ void useMap(BSTR v);
+
+ [propget, id(DISPID_IHTMLINPUTELEMENT2_USEMAP), displaybind, bindable]
+ BSTR useMap();
+}
+
+/*****************************************************************************
+ * IHTMLTextAreaElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f2aa-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTextAreaElement : IDispatch
+{
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+ HRESULT status([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+ HRESULT status([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
+ HRESULT form([retval, out] IHTMLFormElement **p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ HRESULT defaultValue([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ HRESULT defaultValue([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
+ HRESULT select();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+ HRESULT onchange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+ HRESULT onselect([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+ HRESULT readOnly([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+ HRESULT readOnly([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+ HRESULT rows([in] LONG v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+ HRESULT rows([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+ HRESULT cols([in] LONG v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+ HRESULT cols([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+ HRESULT wrap([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+ HRESULT wrap([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
+ HRESULT createTextRange([retval, out] IHTMLTxtRange **range);
+}
+
+/*****************************************************************************
+ * DispHTMLTextAreaElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f521-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTextAreaElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_TYPE)]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_VALUE), displaybind, bindable]
+ BSTR value();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+ void status(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_STATUS)]
+ VARIANT status();
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_FORM)]
+ IHTMLFormElement *form();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ void defaultValue(BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_DEFAULTVALUE), displaybind, bindable, hidden]
+ BSTR defaultValue();
+
+ [id(DISPID_IHTMLTEXTAREAELEMENT_SELECT)]
+ void select();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+ void onchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONCHANGE), displaybind, bindable]
+ VARIANT onchange();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+ void onselect(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ONSELECT), displaybind, bindable]
+ VARIANT onselect();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+ void readOnly(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_READONLY), displaybind, bindable]
+ VARIANT_BOOL readOnly();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+ void rows(LONG v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_ROWS), displaybind, bindable]
+ LONG rows();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+ void cols(LONG v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_COLS), displaybind, bindable]
+ LONG cols();
+
+ [propput, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+ void wrap(BSTR v);
+
+ [propget, id(DISPID_IHTMLTEXTAREAELEMENT_WRAP), displaybind, bindable]
+ BSTR wrap();
+
+ [id(DISPID_IHTMLTEXTAREAELEMENT_CREATETEXTRANGE)]
+ IHTMLTxtRange *createTextRange();
+}
+
+/*****************************************************************************
+ * IHTMLButtonElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f2bb-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLButtonElement : IDispatch
+{
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)]
+ HRESULT type([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+ HRESULT name([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+ HRESULT status([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+ HRESULT status([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([out, retval] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)]
+ HRESULT form([out, retval] IHTMLFormElement **p);
+
+ [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)]
+ HRESULT createTextRange([out, retval] IHTMLTxtRange **range);
+}
+
+/*****************************************************************************
+ * DispHTMLButtonElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f51f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLButtonElement
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_TYPE)]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_VALUE), displaybind, bindable]
+ BSTR value();
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+ void status(VARIANT v);
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_STATUS)]
+ VARIANT status();
+
+ [propget, id(DISPID_IHTMLBUTTONELEMENT_FORM)]
+ IHTMLFormElement *form();
+
+ [id(DISPID_IHTMLBUTTONELEMENT_CREATETEXTRANGE)]
+ IHTMLTxtRange *createTextRange();
+}
+
+/*****************************************************************************
+ * IHTMLHeadElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f81d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLHeadElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+ HRESULT profile([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+ HRESULT profile([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLHeadElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051042f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLHeadElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+ HRESULT profile([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+ HRESULT profile([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLTitleElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f322-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTitleElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+ HRESULT text([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+ HRESULT text([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLMetaElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f203-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLMetaElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+ HRESULT httpEquiv([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+ HRESULT httpEquiv([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+ HRESULT content([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+ HRESULT content([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+ HRESULT name([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+ HRESULT url([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+ HRESULT url([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+ HRESULT charset([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+ HRESULT charset([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLMetaElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f81f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLMetaElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+ HRESULT scheme([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+ HRESULT scheme([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLMetaElement3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510495-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLMetaElement3 : IDispatch
+{
+ [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+ HRESULT url([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+ HRESULT url([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * DispHTMLHeadElement interface
+ */
+[
+ hidden,
+ uuid(3050f561-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLHeadElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+ void profile(BSTR v);
+
+ [propget, id(DISPID_IHTMLHEADELEMENT_PROFILE), displaybind, bindable]
+ BSTR profile();
+
+ [propput, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+ void ie8_profile(BSTR v);
+
+ [propget, id(DISPID_IHTMLHEADELEMENT2_IE8_PROFILE), displaybind, bindable]
+ BSTR ie8_profile();
+}
+
+/*****************************************************************************
+ * DispHTMLTitleElement interface
+ */
+[
+ hidden,
+ uuid(3050f516-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTitleElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+ void text(BSTR v);
+
+ [propget, id(DISPID_IHTMLTITLEELEMENT_TEXT), bindable]
+ BSTR text();
+}
+
+/*****************************************************************************
+ * DispHTMLMetaElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f517-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLMetaElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+ void httpEquiv(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_HTTPEQUIV), displaybind, bindable]
+ BSTR httpEquiv();
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+ void content(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_CONTENT), displaybind, bindable]
+ BSTR content();
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+ void url(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_URL), displaybind, bindable]
+ BSTR url();
+
+ [propput, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+ void charset(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT_CHARSET), displaybind, bindable]
+ BSTR charset();
+
+ [propput, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+ void scheme(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT2_SCHEME), displaybind, bindable]
+ BSTR scheme();
+
+ [propput, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+ void ie8_url(BSTR v);
+
+ [propget, id(DISPID_IHTMLMETAELEMENT3_IE8_URL)]
+ BSTR ie8_url();
+}
+
+/*****************************************************************************
+ * DispHTMLUnknownElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f539-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLUnknownElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ * IOmHistory interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(FECEAAA2-8405-11CF-8BA1-00AA00476DA6)
+]
+interface IOmHistory : IDispatch
+{
+ [propget, id(DISPID_IOMHISTORY_LENGTH)]
+ HRESULT length([retval, out] short *p);
+
+ [id(DISPID_IOMHISTORY_BACK)]
+ HRESULT back([optional, in] VARIANT *pvargdistance);
+
+ [id(DISPID_IOMHISTORY_FORWARD)]
+ HRESULT forward([optional, in] VARIANT *pvargdistance);
+
+ [id(DISPID_IOMHISTORY_GO)]
+ HRESULT go([optional, in] VARIANT *pvargdistance);
+}
+
+[
+ noncreatable,
+ uuid(FECEAAA3-8405-11cf-8BA1-00AA00476DA6)
+]
+coclass HTMLHistory
+{
+ [default] interface IOmHistory;
+}
+
+/*****************************************************************************
+ * IHTMLMimeTypesCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F3FC-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLMimeTypesCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLMIMETYPESCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+}
+
+[
+ noncreatable,
+ uuid(3050f3fe-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass CMimeTypes
+{
+ [default] interface IHTMLMimeTypesCollection;
+}
+
+/*****************************************************************************
+ * IHTMLPluginsCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F3FD-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLPluginsCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
+ HRESULT refresh([defaultvalue(0), in] VARIANT_BOOL reload);
+}
+
+[
+ hidden,
+ uuid(3050f54a-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispCPlugins
+{
+ properties:
+methods:
+ [propget, id(DISPID_IHTMLPLUGINSCOLLECTION_LENGTH)]
+ long length();
+
+ [id(DISPID_IHTMLPLUGINSCOLLECTION_REFRESH)]
+ void refresh([defaultvalue(0), in] VARIANT_BOOL reload);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+[
+ noncreatable,
+ uuid(3050f3ff-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass CPlugins
+{
+ [default] dispinterface DispCPlugins;
+ interface IHTMLPluginsCollection;
+ interface IHTMLDOMConstructor;
+}
+
+/*****************************************************************************
+ * IHTMLOpsProfile interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F401-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLOpsProfile : IDispatch
+{
+ [id(DISPID_IHTMLOPSPROFILE_ADDREQUEST)]
+ HRESULT addRequest(
+ [in] BSTR name,
+ [optional, in] VARIANT reserved,
+ [retval, out] VARIANT_BOOL *success);
+
+ [id(DISPID_IHTMLOPSPROFILE_CLEARREQUEST)]
+ HRESULT clearRequest();
+
+ [id(DISPID_IHTMLOPSPROFILE_DOREQUEST)]
+ HRESULT doRequest(
+ [in] VARIANT usage,
+ [optional, in] VARIANT fname,
+ [optional, in] VARIANT domain,
+ [optional, in] VARIANT path,
+ [optional, in] VARIANT expire,
+ [optional, in] VARIANT reserved);
+
+ [id(DISPID_IHTMLOPSPROFILE_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR name,
+ [retval, out] BSTR *value);
+
+ [id(DISPID_IHTMLOPSPROFILE_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR name,
+ [in] BSTR value,
+ [optional, in] VARIANT prefs,
+ [retval, out] VARIANT_BOOL *success);
+
+ [id(DISPID_IHTMLOPSPROFILE_COMMITCHANGES)]
+ HRESULT commitChanges([retval, out] VARIANT_BOOL *success);
+
+ [id(DISPID_IHTMLOPSPROFILE_ADDREADREQUEST)]
+ HRESULT addReadRequest(
+ [in] BSTR name,
+ [optional, in] VARIANT reserved,
+ [retval, out] VARIANT_BOOL *success);
+
+ [id(DISPID_IHTMLOPSPROFILE_DOREADREQUEST)]
+ HRESULT doReadRequest(
+ [in] VARIANT usage,
+ [optional, in] VARIANT fname,
+ [optional, in] VARIANT domain,
+ [optional, in] VARIANT path,
+ [optional, in] VARIANT expire,
+ [optional, in] VARIANT reserved);
+
+ [id(DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST)]
+ HRESULT doWriteRequest([retval, out] VARIANT_BOOL *success);
+}
+
+[
+ noncreatable,
+ uuid(3050f402-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass COpsProfile
+{
+ [default] interface IHTMLOpsProfile;
+}
+
+/*****************************************************************************
+ * IOmNavigator interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(FECEAAA5-8405-11CF-8BA1-00AA00476DA6)
+]
+interface IOmNavigator : IDispatch
+{
+ [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
+ HRESULT appCodeName([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
+ HRESULT appName([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
+ HRESULT appVersion([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
+ HRESULT userAgent([retval, out] BSTR *p);
+
+ [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
+ HRESULT javaEnabled([retval, out] VARIANT_BOOL *enabled);
+
+ [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
+ HRESULT taintEnabled([retval, out] VARIANT_BOOL *enabled);
+
+ [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
+ HRESULT mimeTypes([retval, out] IHTMLMimeTypesCollection **p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
+ HRESULT plugins([retval, out] IHTMLPluginsCollection **p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
+ HRESULT cookieEnabled([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
+ HRESULT opsProfile([retval, out] IHTMLOpsProfile **p);
+
+ [id(DISPID_IOMNAVIGATOR_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+
+ [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
+ HRESULT cpuClass([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
+ HRESULT systemLanguage([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]
+ HRESULT browserLanguage([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
+ HRESULT userLanguage([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
+ HRESULT platform([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
+ HRESULT appMinorVersion([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]
+ HRESULT connectionSpeed([retval, out] LONG *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
+ HRESULT onLine([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
+ HRESULT userProfile([retval, out] IHTMLOpsProfile **p);
+}
+
+/*****************************************************************************
+ * DispHTMLNavigator dispinterface
+ */
+[
+ hidden,
+ uuid(3050f54c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLNavigator
+{
+properties:
+methods:
+ [propget, id(DISPID_IOMNAVIGATOR_APPCODENAME)]
+ BSTR appCodeName();
+
+ [propget, id(DISPID_IOMNAVIGATOR_APPNAME)]
+ BSTR appName();
+
+ [propget, id(DISPID_IOMNAVIGATOR_APPVERSION)]
+ BSTR appVersion();
+
+ [propget, id(DISPID_IOMNAVIGATOR_USERAGENT)]
+ BSTR userAgent();
+
+ [id(DISPID_IOMNAVIGATOR_JAVAENABLED)]
+ VARIANT_BOOL javaEnabled();
+
+ [id(DISPID_IOMNAVIGATOR_TAINTENABLED)]
+ VARIANT_BOOL taintEnabled();
+
+ [propget, id(DISPID_IOMNAVIGATOR_MIMETYPES)]
+ IHTMLMimeTypesCollection *mimeTypes();
+
+ [propget, id(DISPID_IOMNAVIGATOR_PLUGINS)]
+ IHTMLPluginsCollection *plugins();
+
+ [propget, id(DISPID_IOMNAVIGATOR_COOKIEENABLED)]
+ VARIANT_BOOL cookieEnabled();
+
+ [propget, id(DISPID_IOMNAVIGATOR_OPSPROFILE)]
+ IHTMLOpsProfile *opsProfile();
+
+ [id(DISPID_IOMNAVIGATOR_TOSTRING)]
+ BSTR toString();
+
+ [propget, id(DISPID_IOMNAVIGATOR_CPUCLASS)]
+ BSTR cpuClass();
+
+ [propget, id(DISPID_IOMNAVIGATOR_SYSTEMLANGUAGE)]
+ BSTR systemLanguage();
+
+ [propget, id(DISPID_IOMNAVIGATOR_BROWSERLANGUAGE), hidden]
+ BSTR browserLanguage();
+
+ [propget, id(DISPID_IOMNAVIGATOR_USERLANGUAGE)]
+ BSTR userLanguage();
+
+ [propget, id(DISPID_IOMNAVIGATOR_PLATFORM)]
+ BSTR platform();
+
+ [propget, id(DISPID_IOMNAVIGATOR_APPMINORVERSION)]
+ BSTR appMinorVersion();
+
+ [propget, id(DISPID_IOMNAVIGATOR_CONNECTIONSPEED), hidden]
+ LONG connectionSpeed();
+
+ [propget, id(DISPID_IOMNAVIGATOR_ONLINE)]
+ VARIANT_BOOL onLine();
+
+ [propget, id(DISPID_IOMNAVIGATOR_USERPROFILE)]
+ IHTMLOpsProfile *userProfile();
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+ noncreatable,
+ uuid(FECEAAA6-8405-11cf-8BA1-00AA00476DA6)
+]
+coclass HTMLNavigator
+{
+ [default] dispinterface DispHTMLNavigator;
+ interface IOmNavigator;
+}
+
+/*****************************************************************************
+ * IHTMLLocation interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(163BB1E0-6E00-11cf-837A-48DC04C10000)
+]
+interface IHTMLLocation : IDispatch
+{
+ [propput, id(DISPID_IHTMLLOCATION_HREF)]
+ HRESULT href([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HREF)]
+ HRESULT href([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+ HRESULT protocol([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+ HRESULT protocol([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_HOST)]
+ HRESULT host([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HOST)]
+ HRESULT host([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+ HRESULT hostname([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+ HRESULT hostname([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_PORT)]
+ HRESULT port([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_PORT)]
+ HRESULT port([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
+ HRESULT pathname([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
+ HRESULT pathname([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
+ HRESULT search([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
+ HRESULT search([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLLOCATION_HASH)]
+ HRESULT hash([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HASH)]
+ HRESULT hash([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLLOCATION_RELOAD)]
+ HRESULT reload([defaultvalue(0), in] VARIANT_BOOL flag);
+
+ [id(DISPID_IHTMLLOCATION_REPLACE)]
+ HRESULT replace([in] BSTR bstr);
+
+ [id(DISPID_IHTMLLOCATION_ASSIGN)]
+ HRESULT assign([in] BSTR bstr);
+
+ [id(DISPID_IHTMLLOCATION_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+}
+
+/*****************************************************************************
+ * DispHTMLHistory dispinterface
+ */
+[
+ hidden,
+ uuid(3050f549-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLHistory
+{
+properties:
+methods:
+ [propget, id(DISPID_IOMHISTORY_LENGTH)]
+ short length();
+
+ [id(DISPID_IOMHISTORY_BACK)]
+ void back([optional, in] VARIANT *pvargdistance);
+
+ [id(DISPID_IOMHISTORY_FORWARD)]
+ void forward([optional, in] VARIANT *pvargdistance);
+
+ [id(DISPID_IOMHISTORY_GO)]
+ void go([optional, in] VARIANT *pvargdistance);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+/*****************************************************************************
+ * DispHTMLLocation dispinterface
+ */
+[
+ hidden,
+ uuid(3050f54e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLLocation
+{
+properties:
+methods:
+ [propput, id(DISPID_IHTMLLOCATION_HREF)]
+ void href(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HREF)]
+ BSTR href();
+
+ [propput, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+ void protocol(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_PROTOCOL)]
+ BSTR protocol();
+
+ [propput, id(DISPID_IHTMLLOCATION_HOST)]
+ void host(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HOST)]
+ BSTR host();
+
+ [propput, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+ void hostname(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HOSTNAME)]
+ BSTR hostname();
+
+ [propput, id(DISPID_IHTMLLOCATION_PORT)]
+ void port(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_PORT)]
+ BSTR port();
+
+ [propput, id(DISPID_IHTMLLOCATION_PATHNAME)]
+ void pathname(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_PATHNAME)]
+ BSTR pathname();
+
+ [propput, id(DISPID_IHTMLLOCATION_SEARCH)]
+ void search(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_SEARCH)]
+ BSTR search();
+
+ [propput, id(DISPID_IHTMLLOCATION_HASH)]
+ void hash(BSTR v);
+
+ [propget, id(DISPID_IHTMLLOCATION_HASH)]
+ BSTR hash();
+
+ [id(DISPID_IHTMLLOCATION_RELOAD)]
+ void reload([in, defaultvalue(0)] VARIANT_BOOL flag);
+
+ [id(DISPID_IHTMLLOCATION_REPLACE)]
+ void replace([in] BSTR bstr);
+
+ [id(DISPID_IHTMLLOCATION_ASSIGN)]
+ void assign([in] BSTR bstr);
+
+ [id(DISPID_IHTMLLOCATION_TOSTRING)]
+ BSTR toString();
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+[
+ noncreatable,
+ uuid(163BB1E1-6E00-11cf-837A-48DC04C10000)
+]
+coclass HTMLLocation
+{
+ [default] dispinterface DispHTMLLocation;
+ interface IHTMLLocation;
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4ce-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLBookmarkCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION_LENGTH), hidden]
+ HRESULT length([out, retval] LONG *p);
+
+ [propget, id(DISPID_IHTMLBOOKMARKCOLLECTION__NEWENUM), hidden, restricted]
+ HRESULT _newEnum([out, retval] IUnknown **p);
+
+ [id(DISPID_IHTMLBOOKMARKCOLLECTION_ITEM)]
+ HRESULT item(
+ [in] LONG index,
+ [out, retval] VARIANT *pVarBookmark);
+}
+
+/*****************************************************************************
+ * IHTMLDataTransfer interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4b3-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDataTransfer : IDispatch
+{
+ [id(DISPID_IHTMLDATATRANSFER_SETDATA)]
+ HRESULT setData(
+ [in] BSTR format,
+ [in] VARIANT *data,
+ [out, retval] VARIANT_BOOL *pret);
+
+ [id(DISPID_IHTMLDATATRANSFER_GETDATA)]
+ HRESULT getData(
+ [in] BSTR format,
+ [out, retval] VARIANT *pvarRet);
+
+ [id(DISPID_IHTMLDATATRANSFER_CLEARDATA)]
+ HRESULT clearData(
+ [in] BSTR format,
+ [out, retval] VARIANT_BOOL *pret);
+
+ [propput, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
+ HRESULT dropEffect([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDATATRANSFER_DROPEFFECT)]
+ HRESULT dropEffect([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
+ HRESULT effectAllowed([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDATATRANSFER_EFFECTALLOWED)]
+ HRESULT effectAllowed([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLEventObj interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050F32D-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLEventObj : IDispatch
+{
+ [propget, id(DISPID_IHTMLEVENTOBJ_SRCELEMENT)]
+ HRESULT srcElement([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_ALTKEY)]
+ HRESULT altKey([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_CTRLKEY)]
+ HRESULT ctrlKey([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_SHIFTKEY)]
+ HRESULT shiftKey([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+ HRESULT returnValue([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+ HRESULT returnValue([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+ HRESULT cancelBubble([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+ HRESULT cancelBubble([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_FROMELEMENT)]
+ HRESULT fromElement([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_TOELEMENT)]
+ HRESULT toElement([retval, out] IHTMLElement **p);
+
+ [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+ HRESULT keyCode([in] LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+ HRESULT keyCode([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_BUTTON)]
+ HRESULT button([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_TYPE)]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_QUALIFIER)]
+ HRESULT qualifier([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_REASON)]
+ HRESULT reason([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_X)]
+ HRESULT x([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_Y)]
+ HRESULT y([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTX)]
+ HRESULT clientX([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_CLIENTY)]
+ HRESULT clientY([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETX)]
+ HRESULT offsetX([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_OFFSETY)]
+ HRESULT offsetY([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_SCREENX)]
+ HRESULT screenX([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_SCREENY)]
+ HRESULT screenY([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_SRCFILTER)]
+ HRESULT srcFilter([retval, out] IDispatch **p);
+}
+
+/*****************************************************************************
+ * DispCEventObj dispinterface
+ */
+[
+ hidden,
+ uuid(3050f558-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispCEventObj
+{
+properties:
+methods:
+ [propput, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+ void returnValue(VARIANT v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_RETURNVALUE)]
+ VARIANT returnValue();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+ void cancelBubble(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_CANCELBUBBLE)]
+ VARIANT_BOOL cancelBubble();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+ void keyCode(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ_KEYCODE)]
+ LONG keyCode();
+
+ [id(DISPID_IHTMLEVENTOBJ2_SETATTRIBUTE)]
+ void setAttribute(
+ [in] BSTR strAttributeName,
+ [in] VARIANT AttributeValue,
+ [in, defaultvalue(1)] LONG lFlags);
+
+ [id(DISPID_IHTMLEVENTOBJ2_GETATTRIBUTE)]
+ VARIANT getAttribute(
+ [in] BSTR strAttributeName,
+ [in, defaultvalue(0)] LONG lFlags);
+
+ [id(DISPID_IHTMLEVENTOBJ2_REMOVEATTRIBUTE)]
+ VARIANT_BOOL removeAttribute(
+ [in] BSTR strAttributeName,
+ [in, defaultvalue(1)] LONG lFlags);
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
+ void propertyName(BSTR v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_PROPERTYNAME)]
+ BSTR propertyName();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
+ void bookmarks(IHTMLBookmarkCollection *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_BOOKMARKS)]
+ IHTMLBookmarkCollection *bookmarks();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
+ void recordset(IDispatch *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_RECORDSET)]
+ IDispatch *recordset();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
+ void dataFld(BSTR v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_DATAFLD)]
+ BSTR dataFld();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
+ void boundElements(IHTMLElementCollection *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_BOUNDELEMENTS)]
+ IHTMLElementCollection *boundElements();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
+ void repeat(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_REPEAT)]
+ VARIANT_BOOL repeat();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
+ void srcUrn(BSTR v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_SRCURN)]
+ BSTR srcUrn();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
+ void srcElement(IHTMLElement *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_SRCELEMENT)]
+ IHTMLElement *srcElement();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
+ void altKey(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_ALTKEY)]
+ VARIANT_BOOL altKey();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
+ void ctrlKey(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_CTRLKEY)]
+ VARIANT_BOOL ctrlKey();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
+ void shiftKey(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_SHIFTKEY)]
+ VARIANT_BOOL shiftKey();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
+ void fromElement(IHTMLElement *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_FROMELEMENT)]
+ IHTMLElement *fromElement();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
+ void toElement(IHTMLElement *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_TOELEMENT)]
+ IHTMLElement *toElement();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
+ void button(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_BUTTON)]
+ LONG button();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_TYPE)]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
+ void qualifier(BSTR v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_QUALIFIER)]
+ BSTR qualifier();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_REASON)]
+ void reason(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_REASON)]
+ LONG reason();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_X)]
+ void x(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_X)]
+ LONG x();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_Y)]
+ void y(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_Y)]
+ LONG y();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
+ void clientX(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTX)]
+ LONG clientX();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
+ void clientY(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_CLIENTY)]
+ LONG clientY();
+ [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
+ void offsetX(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETX)]
+ LONG offsetX();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
+ void offsetY(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_OFFSETY)]
+ LONG offsetY();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
+ void screenX(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENX)]
+ LONG screenX();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
+ void screenY(LONG v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_SCREENY)]
+ LONG screenY();
+
+ [propputref, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
+ void srcFilter(IDispatch *v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_SRCFILTER)]
+ IDispatch *srcFilter();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ2_DATATRANSFER)]
+ IHTMLDataTransfer *dataTransfer();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_CONTENTOVERFLOW)]
+ VARIANT_BOOL contentOverflow();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
+ void shiftLeft(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_SHIFTLEFT)]
+ VARIANT_BOOL shiftLeft();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
+ void altLeft(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_ALTLEFT)]
+ VARIANT_BOOL altLeft();
+
+ [propput, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
+ void ctrlLeft(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_CTRLLEFT)]
+ VARIANT_BOOL ctrlLeft();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_IMECOMPOSITIONCHANGE), hidden, restricted, nonbrowsable]
+ LONG_PTR imeCompositionChange();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYCOMMAND), hidden, restricted, nonbrowsable]
+ LONG_PTR imeNotifyCommand();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_IMENOTIFYDATA), hidden, restricted, nonbrowsable]
+ LONG_PTR imeNotifyData();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUEST), hidden, restricted, nonbrowsable]
+ LONG_PTR imeRequest();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_IMEREQUESTDATA), hidden, restricted, nonbrowsable]
+ LONG_PTR imeRequestData();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_KEYBOARDLAYOUT), hidden, restricted, nonbrowsable]
+ LONG_PTR keyboardLayout();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORCOOKIE)]
+ LONG behaviorCookie();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_BEHAVIORPART)]
+ LONG behaviorPart();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ3_NEXTPAGE)]
+ BSTR nextPage();
+
+ [propget, id(DISPID_IHTMLEVENTOBJ4_WHEELDELTA)]
+ LONG wheelDelta();
+}
+
+/*****************************************************************************
+ * IHTMLFramesCollection2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(332C4426-26CB-11D0-B483-00C04FD90119)
+]
+interface IHTMLFramesCollection2 : IDispatch
+{
+ [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
+ HRESULT item(
+ [in] VARIANT *pvarIndex,
+ [retval, out] VARIANT *pvarResult);
+
+ [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
+ HRESULT length([retval, out] LONG *p);
+}
+
+/*****************************************************************************
+ * IHTMLScreen interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f35C-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IHTMLScreen : IDispatch
+{
+ [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
+ HRESULT colorDepth([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+ HRESULT bufferDepth([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+ HRESULT bufferDepth([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
+ HRESULT width([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
+ HRESULT height([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+ HRESULT updateInterval([in] LONG v);
+
+ [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+ HRESULT updateInterval([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
+ HRESULT availHeight([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
+ HRESULT availWidth([retval, out] LONG *p);
+
+ [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
+ HRESULT fontSmoothingEnabled([retval, out] VARIANT_BOOL *p);
+}
+
+/*****************************************************************************
+ * IHTMLWindow2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(332C4427-26CB-11D0-B483-00C04FD90119)
+]
+interface IHTMLWindow2 : IHTMLFramesCollection2
+{
+ [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
+ HRESULT frames([retval, out] IHTMLFramesCollection2 **p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+ HRESULT defaultStatus([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+ HRESULT defaultStatus([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
+ HRESULT status([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
+ HRESULT status([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLWINDOW2_SETTIMEOUT)]
+ HRESULT setTimeout(
+ [in] BSTR expression,
+ [in] LONG msec,
+ [optional, in] VARIANT *language,
+ [retval, out] LONG *timerID);
+
+ [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
+ HRESULT clearTimeout([in] LONG timerID);
+
+ [id(DISPID_IHTMLWINDOW2_ALERT)]
+ HRESULT alert([defaultvalue(""), in] BSTR message);
+
+ [id(DISPID_IHTMLWINDOW2_CONFIRM)]
+ HRESULT confirm(
+ [defaultvalue(""), in] BSTR message,
+ [retval, out] VARIANT_BOOL *confirmed);
+
+ [id(DISPID_IHTMLWINDOW2_PROMPT)]
+ HRESULT prompt(
+ [defaultvalue(""), in] BSTR message,
+ [defaultvalue("undefined"), in] BSTR defstr,
+ [retval, out] VARIANT *textdata);
+
+ [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
+ HRESULT Image([retval, out] IHTMLImageElementFactory **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
+ HRESULT location([retval, out] IHTMLLocation **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
+ HRESULT history([retval, out] IOmHistory **p);
+
+ [id(DISPID_IHTMLWINDOW2_CLOSE)]
+ HRESULT close();
+
+ [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
+ HRESULT opener([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
+ HRESULT opener([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
+ HRESULT navigator([retval, out] IOmNavigator **p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_NAME)]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_NAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
+ HRESULT parent([retval, out] IHTMLWindow2 **p);
+
+ [id(DISPID_IHTMLWINDOW2_OPEN)]
+ HRESULT open(
+ [defaultvalue(""), in] BSTR url,
+ [defaultvalue(""), in] BSTR name,
+ [defaultvalue(""), in] BSTR features,
+ [defaultvalue(0), in] VARIANT_BOOL replace,
+ [retval, out] IHTMLWindow2 **pomWindowResult);
+
+ [propget, id(DISPID_IHTMLWINDOW2_SELF)]
+ HRESULT self([retval, out] IHTMLWindow2 **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_TOP)]
+ HRESULT top([retval, out] IHTMLWindow2 **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
+ HRESULT window([retval, out] IHTMLWindow2 **p);
+
+ [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
+ HRESULT navigate([in] BSTR url);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
+ HRESULT onfocus([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS)]
+ HRESULT onfocus([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONBLUR)]
+ HRESULT onblur([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONBLUR)]
+ HRESULT onblur([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONLOAD)]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONLOAD)]
+ HRESULT onload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
+ HRESULT onbeforeunload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD)]
+ HRESULT onbeforeunload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
+ HRESULT onunload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD)]
+ HRESULT onunload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONHELP)]
+ HRESULT onhelp([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONHELP)]
+ HRESULT onhelp([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONERROR)]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONERROR)]
+ HRESULT onerror([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
+ HRESULT onresize([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE)]
+ HRESULT onresize([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
+ HRESULT onscroll([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL)]
+ HRESULT onscroll([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT)]
+ HRESULT document([retval, out] IHTMLDocument2 **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
+ HRESULT event([retval, out] IHTMLEventObj **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2__NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **p);
+
+ [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
+ HRESULT showModalDialog(
+ [in] BSTR dialog,
+ [optional, in] VARIANT *varArgIn,
+ [optional, in] VARIANT *varOptions,
+ [retval, out] VARIANT *varArgOut);
+
+ [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
+ HRESULT showHelp(
+ [in] BSTR helpURL,
+ [optional, in] VARIANT helpArg,
+ [defaultvalue(""), in] BSTR features);
+
+ [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
+ HRESULT screen([retval, out] IHTMLScreen **p);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
+ HRESULT Option([retval, out] IHTMLOptionElementFactory **p);
+
+ [id(DISPID_IHTMLWINDOW2_FOCUS)]
+ HRESULT focus();
+
+ [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
+ HRESULT closed([retval, out] VARIANT_BOOL *p);
+
+ [id(DISPID_IHTMLWINDOW2_BLUR)]
+ HRESULT blur();
+
+ [id(DISPID_IHTMLWINDOW2_SCROLL)]
+ HRESULT scroll([in] LONG x, [in] LONG y);
+
+ [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
+ HRESULT clientInformation([retval, out] IOmNavigator **p);
+
+ [id(DISPID_IHTMLWINDOW2_SETINTERVAL)]
+ HRESULT setInterval([
+ in] BSTR expression,
+ [in] LONG msec,
+ [optional, in] VARIANT *language,
+ [retval, out] LONG *timerID);
+
+ [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
+ HRESULT clearInterval([in] LONG timerID);
+
+ [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+ HRESULT offscreenBuffering([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+ HRESULT offscreenBuffering([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
+ HRESULT execScript(
+ [in] BSTR scode,
+ [defaultvalue("JScript"), in] BSTR language,
+ [retval, out] VARIANT *pvarRet);
+
+ [id(DISPID_IHTMLWINDOW2_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+
+ [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
+ HRESULT scrollBy([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
+ HRESULT scrollTo([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_MOVETO)]
+ HRESULT moveTo([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_MOVEBY)]
+ HRESULT moveBy([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_RESIZETO)]
+ HRESULT resizeTo([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
+ HRESULT resizeBy([in] LONG x, [in] LONG y);
+
+ [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
+ HRESULT external([retval, out] IDispatch **p);
+}
+
+/*****************************************************************************
+ * IHTMLWindow3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4ae-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow3 : IDispatch
+{
+ [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
+ HRESULT screenLeft([out, retval] LONG *p);
+
+ [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
+ HRESULT screenTop([out, retval] LONG *p);
+
+ [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
+ HRESULT attachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp,
+ [out, retval] VARIANT_BOOL *pfResult);
+
+ [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
+ HRESULT detachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
+ HRESULT setTimeout(
+ [in] VARIANT *expression,
+ [in] LONG msec,
+ [in, optional] VARIANT *language,
+ [out, retval] LONG *timerID);
+
+ [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
+ HRESULT setInterval(
+ [in] VARIANT *expression,
+ [in] LONG msec,
+ [in, optional] VARIANT *language,
+ [out, retval] LONG *timerID);
+
+ [id(DISPID_IHTMLWINDOW3_PRINT)]
+ HRESULT print();
+
+ [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+ HRESULT onbeforeprint([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+ HRESULT onbeforeprint([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+ HRESULT onafterprint([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+ HRESULT onafterprint([out, retval] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
+ HRESULT clipboardData([out, retval] IHTMLDataTransfer **p);
+
+ [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
+ HRESULT showModelessDialog(
+ [in, defaultvalue("")] BSTR url,
+ [in, optional] VARIANT *varArgIn,
+ [in, optional] VARIANT *options,
+ [out, retval] IHTMLWindow2 **pDialog);
+}
+
+/*****************************************************************************
+ * IHTMLWindow4 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f6cf-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow4 : IDispatch
+{
+ [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
+ HRESULT createPopup([optional, in] VARIANT* varArgIn,
+ [retval, out] IDispatch** ppPopup);
+
+ [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
+ HRESULT frameElement([retval, out] IHTMLFrameBase* * p);
+}
+
+/*****************************************************************************
+ * IHTMLWindow5 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051040e-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow5 : IDispatch
+{
+ [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+ HRESULT XMLHttpRequest([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+ HRESULT XMLHttpRequest([retval, out] VARIANT * p);
+}
+
+/*****************************************************************************
+ * IHTMLWindow6 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510453-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLWindow6 : IDispatch
+{
+ [propput, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]
+ HRESULT XDomainRequest([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_XDOMAINREQUEST)]
+ HRESULT XDomainRequest([out, retval] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
+ HRESULT sessionStorage([out, retval] IHTMLStorage **p);
+
+ [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
+ HRESULT localStorage([out, retval] IHTMLStorage **p);
+
+ [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+ HRESULT onhashchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+ HRESULT onhashchange([out, retval] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
+ HRESULT maxConnectionsPerServer([out, retval] long *p);
+
+ [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
+ HRESULT postMessage(
+ [in] BSTR msg,
+ [in, optional] VARIANT targetOrigin);
+
+ [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
+ HRESULT toStaticHTML(
+ [in] BSTR bstrHTML,
+ [out, retval] BSTR *pbstrStaticHTML);
+
+ [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+ HRESULT onmessage([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+ HRESULT onmessage([out, retval] VARIANT *p);
+
+ [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
+ HRESULT msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
+}
+
+/*****************************************************************************
+ * DispHTMLScreen dispinterface
+ */
+[
+ hidden,
+ uuid(3050f591-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLScreen
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
+ long colorDepth();
+
+ [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+ void bufferDepth(long v);
+
+ [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+ long bufferDepth();
+
+ [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
+ long width();
+
+ [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
+ long height();
+
+ [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+ void updateInterval(long v);
+
+ [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+ long updateInterval();
+
+ [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
+ long availHeight();
+
+ [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
+ long availWidth();
+
+ [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
+ VARIANT_BOOL fontSmoothingEnabled();
+
+ [propget, id(DISPID_IHTMLSCREEN2_LOGICALXDPI)]
+ long logicalXDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN2_LOGICALYDPI)]
+ long logicalYDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN2_DEVICEXDPI)]
+ long deviceXDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN2_DEVICEYDPI)]
+ long deviceYDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN3_SYSTEMXDPI)]
+ long systemXDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN3_SYSTEMYDPI)]
+ long systemYDPI();
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+/*****************************************************************************
+ * DispHTMLWindow2 dispinterface
+ */
+[
+ hidden,
+ uuid(3050f55d-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLWindow2
+{
+properties:
+methods:
+ [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
+ VARIANT item([in] VARIANT *pvarIndex);
+
+ [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
+ LONG length();
+
+ [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
+ IHTMLFramesCollection2 *frames();
+
+ [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+ void defaultStatus(BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+ BSTR defaultStatus();
+
+ [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
+ void status(BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
+ BSTR status();
+
+ [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
+ void clearTimeout([in] LONG timerID);
+
+ [id(DISPID_IHTMLWINDOW2_ALERT)]
+ void alert([in, defaultvalue("")] BSTR message);
+
+ [id(DISPID_IHTMLWINDOW2_CONFIRM)]
+ VARIANT_BOOL confirm([in, defaultvalue("")] BSTR message);
+
+ [id(DISPID_IHTMLWINDOW2_PROMPT)]
+ VARIANT prompt(
+ [in, defaultvalue("")] BSTR message,
+ [in, defaultvalue("undefined")] BSTR defstr);
+
+ [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
+ IHTMLImageElementFactory *Image();
+
+ [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
+ IHTMLLocation *location();
+
+ [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
+ IOmHistory *history();
+
+ [id(DISPID_IHTMLWINDOW2_CLOSE)]
+ void close();
+
+ [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
+ void opener(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
+ VARIANT opener();
+
+ [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
+ IOmNavigator *navigator();
+
+ [propput, id(DISPID_IHTMLWINDOW2_NAME)]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_NAME)]
+ BSTR name();
+
+ [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
+ IHTMLWindow2 *parent();
+
+ [id(DISPID_IHTMLWINDOW2_OPEN)]
+ IHTMLWindow2 *open(
+ [in, defaultvalue("")] BSTR url,
+ [in, defaultvalue("")] BSTR name,
+ [in, defaultvalue("")] BSTR features,
+ [in, defaultvalue(0)] VARIANT_BOOL replace);
+
+ [propget, id(DISPID_IHTMLWINDOW2_SELF)]
+ IHTMLWindow2 *self();
+
+ [propget, id(DISPID_IHTMLWINDOW2_TOP)]
+ IHTMLWindow2 *top();
+
+ [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
+ IHTMLWindow2 *window();
+
+ [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
+ void navigate([in] BSTR url);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+ void onfocus(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+ VARIANT onfocus();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+ void onblur(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+ VARIANT onblur();
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+ void onbeforeunload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+ VARIANT onbeforeunload();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+ void onunload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+ VARIANT onunload();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+ void onhelp(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+ VARIANT onhelp();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+ void onresize(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+ VARIANT onresize();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+ void onscroll(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+ VARIANT onscroll();
+
+ [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
+ IHTMLDocument2 *document();
+
+ [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
+ IHTMLEventObj *event();
+
+ [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
+ IUnknown *_newEnum();
+
+ [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
+ VARIANT showModalDialog(
+ [in] BSTR dialog,
+ [in, optional] VARIANT *varArgIn,
+ [in, optional] VARIANT *varOptions);
+
+ [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
+ void showHelp(
+ [in] BSTR helpURL,
+ [in, optional] VARIANT helpArg,
+ [in, defaultvalue("")] BSTR features);
+
+ [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
+ IHTMLScreen *screen();
+
+ [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
+ IHTMLOptionElementFactory *Option();
+
+ [id(DISPID_IHTMLWINDOW2_FOCUS)]
+ void focus();
+
+ [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
+ VARIANT_BOOL closed();
+
+ [id(DISPID_IHTMLWINDOW2_BLUR)]
+ void blur();
+
+ [id(DISPID_IHTMLWINDOW2_SCROLL)]
+ void scroll([in] LONG x, [in] LONG y);
+
+ [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
+ IOmNavigator *clientInformation();
+
+ [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
+ void clearInterval([in] LONG timerID);
+
+ [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+ void offscreenBuffering(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+ VARIANT offscreenBuffering();
+
+ [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
+ VARIANT execScript(
+ [in] BSTR _code,
+ [in, defaultvalue("JScript")] BSTR language);
+
+ [id(DISPID_IHTMLWINDOW2_TOSTRING)]
+ BSTR toString();
+
+ [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
+ void scrollBy([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
+ void scrollTo([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_MOVETO)]
+ void moveTo([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_MOVEBY)]
+ void moveBy([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_RESIZETO)]
+ void resizeTo([in] LONG x, [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
+ void resizeBy([in] LONG x, [in] LONG y);
+
+ [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
+ IDispatch *external();
+
+ [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
+ LONG screenLeft();
+
+ [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
+ LONG screenTop();
+
+ [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
+ VARIANT_BOOL attachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
+ void detachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
+ LONG setTimeout(
+ [in] VARIANT *expression,
+ [in] LONG msec,
+ [in, optional] VARIANT *language);
+
+ [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
+ LONG setInterval(
+ [in] VARIANT *expression,
+ [in] LONG msec,
+ [in, optional] VARIANT *language);
+
+ [id(DISPID_IHTMLWINDOW3_PRINT)]
+ void print();
+
+ [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+ void onbeforeprint(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+ VARIANT onbeforeprint();
+
+ [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+ void onafterprint(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+ VARIANT onafterprint();
+
+ [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
+ IHTMLDataTransfer *clipboardData();
+
+ [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
+ IHTMLWindow2 *showModelessDialog(
+ [in, defaultvalue("")] BSTR url,
+ [in, optional] VARIANT *varArgIn,
+ [in, optional] VARIANT *options);
+
+ [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
+ IDispatch *createPopup([in, optional] VARIANT *varArgIn);
+
+ [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
+ IHTMLFrameBase *frameElement();
+
+ [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
+ IHTMLStorage *sessionStorage();
+
+ [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
+ IHTMLStorage *localStorage();
+
+ [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+ void onhashchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+ VARIANT onhashchange();
+
+ [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
+ long maxConnectionsPerServer();
+
+ [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
+ void postMessage(
+ [in] BSTR msg,
+ [in, optional] VARIANT targetOrigin);
+
+ [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
+ BSTR toStaticHTML([in] BSTR bstrHTML);
+
+ [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+ void onmessage(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+ VARIANT onmessage();
+
+ [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
+ void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ * DispHTMLWindowProxy dispinterface
+ */
+[
+ hidden,
+ uuid(3050f55e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLWindowProxy
+{
+properties:
+methods:
+ [id(DISPID_IHTMLFRAMESCOLLECTION2_ITEM)]
+ VARIANT item([in] VARIANT* pvarIndex);
+
+ [propget, id(DISPID_IHTMLFRAMESCOLLECTION2_LENGTH)]
+ LONG length();
+
+ [propget, id(DISPID_IHTMLWINDOW2_FRAMES)]
+ IHTMLFramesCollection2* frames();
+
+ [propput, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+ void defaultStatus(BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_DEFAULTSTATUS)]
+ BSTR defaultStatus();
+
+ [propput, id(DISPID_IHTMLWINDOW2_STATUS)]
+ void status(BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_STATUS)]
+ BSTR status();
+
+ [id(DISPID_IHTMLWINDOW2_CLEARTIMEOUT)]
+ void clearTimeout([in] LONG timerID);
+
+ [id(DISPID_IHTMLWINDOW2_ALERT)]
+ void alert([defaultvalue(""), in] BSTR message);
+
+ [id(DISPID_IHTMLWINDOW2_CONFIRM)]
+ VARIANT_BOOL confirm([defaultvalue(""), in] BSTR message);
+
+ [id(DISPID_IHTMLWINDOW2_PROMPT)]
+ VARIANT prompt([defaultvalue(""), in] BSTR message,
+ [defaultvalue("undefined"), in] BSTR defstr);
+
+ [propget, id(DISPID_IHTMLWINDOW2_IMAGE)]
+ IHTMLImageElementFactory* Image();
+
+ [propget, id(DISPID_IHTMLWINDOW2_LOCATION)]
+ IHTMLLocation* location();
+
+ [propget, id(DISPID_IHTMLWINDOW2_HISTORY)]
+ IOmHistory* history();
+
+ [id(DISPID_IHTMLWINDOW2_CLOSE)]
+ void close();
+
+ [propput, id(DISPID_IHTMLWINDOW2_OPENER)]
+ void opener(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OPENER)]
+ VARIANT opener();
+
+ [propget, id(DISPID_IHTMLWINDOW2_NAVIGATOR)]
+ IOmNavigator* navigator();
+
+ [propput, id(DISPID_IHTMLWINDOW2_NAME)]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_NAME)]
+ BSTR name();
+
+ [propget, id(DISPID_IHTMLWINDOW2_PARENT)]
+ IHTMLWindow2* parent();
+
+ [id(DISPID_IHTMLWINDOW2_OPEN)]
+ IHTMLWindow2* open([defaultvalue(""), in] BSTR url,
+ [defaultvalue(""), in] BSTR name,
+ [defaultvalue(""), in] BSTR features,
+ [defaultvalue(0), in] VARIANT_BOOL replace);
+
+ [propget, id(DISPID_IHTMLWINDOW2_SELF)]
+ IHTMLWindow2* self();
+
+ [propget, id(DISPID_IHTMLWINDOW2_TOP)]
+ IHTMLWindow2* top();
+
+ [propget, id(DISPID_IHTMLWINDOW2_WINDOW)]
+ IHTMLWindow2* window();
+
+ [id(DISPID_IHTMLWINDOW2_NAVIGATE)]
+ void navigate([in] BSTR url);
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+ void onfocus(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONFOCUS), displaybind, bindable]
+ VARIANT onfocus();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+ void onblur(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONBLUR), displaybind, bindable]
+ VARIANT onblur();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
+ void onload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+ void onbeforeunload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONBEFOREUNLOAD), displaybind, bindable]
+ VARIANT onbeforeunload();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+ void onunload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONUNLOAD), displaybind, bindable]
+ VARIANT onunload();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+ void onhelp(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONHELP), displaybind, bindable]
+ VARIANT onhelp();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+ void onresize(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONRESIZE), displaybind, bindable]
+ VARIANT onresize();
+
+ [propput, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+ void onscroll(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_ONSCROLL), displaybind, bindable]
+ VARIANT onscroll();
+
+ [propget, id(DISPID_IHTMLWINDOW2_DOCUMENT), source]
+ IHTMLDocument2* document();
+
+ [propget, id(DISPID_IHTMLWINDOW2_EVENT)]
+ IHTMLEventObj* event();
+
+ [propget, id(DISPID_IHTMLWINDOW2__NEWENUM), hidden, restricted]
+ IUnknown* _newEnum();
+
+ [id(DISPID_IHTMLWINDOW2_SHOWMODALDIALOG)]
+ VARIANT showModalDialog([in] BSTR dialog,
+ [optional, in] VARIANT* varArgIn,
+ [optional, in] VARIANT* varOptions);
+
+ [id(DISPID_IHTMLWINDOW2_SHOWHELP)]
+ void showHelp([in] BSTR helpURL,
+ [optional, in] VARIANT helpArg,
+ [defaultvalue(""), in] BSTR features);
+
+ [propget, id(DISPID_IHTMLWINDOW2_SCREEN)]
+ IHTMLScreen* screen();
+
+ [propget, id(DISPID_IHTMLWINDOW2_OPTION)]
+ IHTMLOptionElementFactory* Option();
+
+ [id(DISPID_IHTMLWINDOW2_FOCUS)]
+ void focus();
+
+ [propget, id(DISPID_IHTMLWINDOW2_CLOSED)]
+ VARIANT_BOOL closed();
+
+ [id(DISPID_IHTMLWINDOW2_BLUR)]
+ void blur();
+
+ [id(DISPID_IHTMLWINDOW2_SCROLL)]
+ void scroll([in] LONG x,
+ [in] LONG y);
+
+ [propget, id(DISPID_IHTMLWINDOW2_CLIENTINFORMATION)]
+ IOmNavigator* clientInformation();
+
+ [id(DISPID_IHTMLWINDOW2_CLEARINTERVAL)]
+ void clearInterval([in] LONG timerID);
+
+ [propput, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+ void offscreenBuffering(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING)]
+ VARIANT offscreenBuffering();
+
+ [id(DISPID_IHTMLWINDOW2_EXECSCRIPT)]
+ VARIANT execScript([in] BSTR code,
+ [defaultvalue("JScript"), in] BSTR language);
+
+ [id(DISPID_IHTMLWINDOW2_TOSTRING)]
+ BSTR toString();
+
+ [id(DISPID_IHTMLWINDOW2_SCROLLBY)]
+ void scrollBy([in] LONG x,
+ [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_SCROLLTO)]
+ void scrollTo([in] LONG x,
+ [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_MOVETO)]
+ void moveTo([in] LONG x,
+ [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_MOVEBY)]
+ void moveBy([in] LONG x,
+ [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_RESIZETO)]
+ void resizeTo([in] LONG x,
+ [in] LONG y);
+
+ [id(DISPID_IHTMLWINDOW2_RESIZEBY)]
+ void resizeBy([in] LONG x,
+ [in] LONG y);
+
+ [propget, id(DISPID_IHTMLWINDOW2_EXTERNAL)]
+ IDispatch* external();
+
+ [propget, id(DISPID_IHTMLWINDOW3_SCREENLEFT)]
+ LONG screenLeft();
+
+ [propget, id(DISPID_IHTMLWINDOW3_SCREENTOP)]
+ LONG screenTop();
+
+ [id(DISPID_IHTMLWINDOW3_ATTACHEVENT)]
+ VARIANT_BOOL attachEvent([in] BSTR event,
+ [in] IDispatch* pDisp);
+
+ [id(DISPID_IHTMLWINDOW3_DETACHEVENT)]
+ void detachEvent([in] BSTR event,
+ [in] IDispatch* pDisp);
+
+ [id(DISPID_IHTMLWINDOW3_SETTIMEOUT)]
+ LONG setTimeout([in] VARIANT* expression,
+ [in] LONG msec,
+ [optional, in] VARIANT* language);
+
+ [id(DISPID_IHTMLWINDOW3_SETINTERVAL)]
+ LONG setInterval([in] VARIANT* expression,
+ [in] LONG msec,
+ [optional, in] VARIANT* language);
+
+ [id(DISPID_IHTMLWINDOW3_PRINT)]
+ void print();
+
+ [propput, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+ void onbeforeprint(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW3_ONBEFOREPRINT), displaybind, bindable]
+ VARIANT onbeforeprint();
+
+ [propput, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+ void onafterprint(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW3_ONAFTERPRINT), displaybind, bindable]
+ VARIANT onafterprint();
+
+ [propget, id(DISPID_IHTMLWINDOW3_CLIPBOARDDATA)]
+ IHTMLDataTransfer* clipboardData();
+
+ [id(DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG)]
+ IHTMLWindow2* showModelessDialog([defaultvalue(""), in] BSTR url,
+ [optional, in] VARIANT* varArgIn,
+ [optional, in] VARIANT* options);
+
+ [id(DISPID_IHTMLWINDOW4_CREATEPOPUP)]
+ IDispatch* createPopup([optional, in] VARIANT* varArgIn);
+
+ [propget, id(DISPID_IHTMLWINDOW4_FRAMEELEMENT)]
+ IHTMLFrameBase* frameElement();
+
+ [propput, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+ void XMLHttpRequest(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW5_XMLHTTPREQUEST)]
+ VARIANT XMLHttpRequest();
+
+ [propget, id(DISPID_IHTMLWINDOW6_SESSIONSTORAGE)]
+ IHTMLStorage *sessionStorage();
+
+ [propget, id(DISPID_IHTMLWINDOW6_LOCALSTORAGE)]
+ IHTMLStorage *localStorage();
+
+ [propput, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+ void onhashchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_ONHASHCHANGE), displaybind, bindable]
+ VARIANT onhashchange();
+
+ [propget, id(DISPID_IHTMLWINDOW6_MAXCONNECTIONSPERSERVER)]
+ long maxConnectionsPerServer();
+
+ [id(DISPID_IHTMLWINDOW6_POSTMESSAGE)]
+ void postMessage(
+ [in] BSTR msg,
+ [in, optional] VARIANT targetOrigin);
+
+ [id(DISPID_IHTMLWINDOW6_TOSTATICHTML)]
+ BSTR toStaticHTML([in] BSTR bstrHTML);
+
+ [propput, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+ void onmessage(VARIANT v);
+
+ [propget, id(DISPID_IHTMLWINDOW6_ONMESSAGE), displaybind, bindable]
+ VARIANT onmessage();
+
+ [id(DISPID_IHTMLWINDOW6_MSWRITEPROFILERMARK)]
+ void msWriteProfilerMark([in] BSTR bstrProfilerMarkName);
+
+ WINE_IHTMLDOMCONSTRUCTOR_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ * HTMLWindowEvents interface
+ */
+[
+ hidden,
+ uuid(96A0A4E0-D062-11cf-94B6-00AA0060275C)
+]
+dispinterface HTMLWindowEvents
+{
+properties:
+methods:
+ [id(DISPID_HTMLWINDOWEVENTS_ONLOAD)]
+ void onload();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONUNLOAD)]
+ void onunload();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONHELP)]
+ VARIANT_BOOL onhelp();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONFOCUS)]
+ void onfocus();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONBLUR)]
+ void onblur();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONERROR)]
+ void onerror([in] BSTR description,
+ [in] BSTR url,
+ [in] LONG line);
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONRESIZE)]
+ void onresize();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONSCROLL)]
+ void onscroll();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREUNLOAD)]
+ void onbeforeunload();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONBEFOREPRINT)]
+ void onbeforeprint();
+
+ [id(DISPID_HTMLWINDOWEVENTS_ONAFTERPRINT)]
+ void onafterprint();
+}
+
+/*****************************************************************************
+ * HTMLWindowEvents2 interface
+ */
+[
+ hidden,
+ uuid(3050f625-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLWindowEvents2
+{
+properties:
+methods:
+ [id(DISPID_HTMLWINDOWEVENTS2_ONLOAD)]
+ void onload([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONUNLOAD)]
+ void onunload([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONHELP)]
+ VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONFOCUS)]
+ void onfocus([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONBLUR)]
+ void onblur([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONERROR)]
+ void onerror([in] BSTR description,
+ [in] BSTR url,
+ [in] LONG line);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONRESIZE)]
+ void onresize([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONSCROLL)]
+ void onscroll([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREUNLOAD)]
+ void onbeforeunload([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONBEFOREPRINT)]
+ void onbeforeprint([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLWINDOWEVENTS2_ONAFTERPRINT)]
+ void onafterprint([in] IHTMLEventObj* pEvtObj);
+}
+
+/*****************************************************************************
+ * HTMLWindowProxy class
+ */
+[
+ uuid(3050f391-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLWindowProxy
+{
+ [default] dispinterface DispHTMLWindowProxy;
+ [source, default] dispinterface HTMLWindowEvents;
+ [source] dispinterface HTMLWindowEvents2;
+ interface IHTMLWindow2;
+ interface IHTMLWindow3;
+ interface IHTMLWindow4;
+ interface IHTMLWindow5;
+}
+
+/*****************************************************************************
+ * HTMLDocumentEvents2 interface
+ */
+[
+ hidden,
+ uuid(3050f613-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLDocumentEvents2
+{
+ properties:
+ methods:
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONHELP)]
+ VARIANT_BOOL onhelp([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONCLICK)]
+ VARIANT_BOOL onclick([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYDOWN)]
+ void onkeydown([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP)]
+ void onkeyup([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEDOWN)]
+ void onmousedown([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEMOVE)]
+ void onmousemove([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEUP)]
+ void onmouseup([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOUT)]
+ void onmouseout([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEOVER)]
+ void onmouseover([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONREADYSTATECHANGE)]
+ void onreadystatechange([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONAFTERUPDATE)]
+ void onafterupdate([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWEXIT)]
+ VARIANT_BOOL onrowexit([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWENTER)]
+ void onrowenter([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONSTOP)]
+ VARIANT_BOOL onstop([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSDELETE)]
+ void onrowsdelete([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONROWSINSERTED)]
+ void onrowsinserted([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONCELLCHANGE)]
+ void oncellchange([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONPROPERTYCHANGE)]
+ void onpropertychange([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCHANGED)]
+ void ondatasetchanged([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATAAVAILABLE)]
+ void ondataavailable([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONDATASETCOMPLETE)]
+ void ondatasetcomplete([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREEDITFOCUS)]
+ void onbeforeeditfocus([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONSELECTIONCHANGE)]
+ void onselectionchange([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSIN)]
+ void onfocusin([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONFOCUSOUT)]
+ void onfocusout([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONACTIVATE)]
+ void onactivate([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONDEACTIVATE)]
+ void ondeactivate([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj *pEvtObj);
+
+ [id(DISPID_HTMLDOCUMENTEVENTS2_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj *pEvtObj);
+}
+
+/*****************************************************************************
+ * HTMLDocumentEvents interface
+ */
+[
+ hidden,
+ uuid(3050f260-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLDocumentEvents
+{
+ properties:
+ methods:
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONHELP)]
+ VARIANT_BOOL onhelp();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONCLICK)]
+ VARIANT_BOOL onclick();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYDOWN)]
+ void onkeydown();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYUP)]
+ void onkeyup();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEDOWN)]
+ void onmousedown();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEMOVE)]
+ void onmousemove();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEUP)]
+ void onmouseup();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOUT)]
+ void onmouseout();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEOVER)]
+ void onmouseover();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONREADYSTATECHANGE)]
+ void onreadystatechange();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONAFTERUPDATE)]
+ void onafterupdate();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONROWEXIT)]
+ VARIANT_BOOL onrowexit();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONROWENTER)]
+ void onrowenter();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONSTOP)]
+ VARIANT_BOOL onstop();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSDELETE)]
+ void onrowsdelete();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONROWSINSERTED)]
+ void onrowsinserted();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONCELLCHANGE)]
+ void oncellchange();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONPROPERTYCHANGE)]
+ void onpropertychange();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCHANGED)]
+ void ondatasetchanged();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONDATAAVAILABLE)]
+ void ondataavailable();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONDATASETCOMPLETE)]
+ void ondatasetcomplete();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREEDITFOCUS)]
+ void onbeforeeditfocus();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONSELECTIONCHANGE)]
+ void onselectionchange();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSIN)]
+ void onfocusin();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONFOCUSOUT)]
+ void onfocusout();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONACTIVATE)]
+ void onactivate();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONDEACTIVATE)]
+ void ondeactivate();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate();
+
+ [id(DISPID_HTMLDOCUMENTEVENTS_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate();
+}
+
+/*****************************************************************************
+ * HTMLTextContainerEvents interface
+ */
+[
+ hidden,
+ uuid(1ff6aa72-5842-11cf-a707-00aa00c0098d)
+]
+dispinterface HTMLTextContainerEvents
+{
+properties:
+
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+ VARIANT_BOOL onhelp();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+ VARIANT_BOOL onclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+ void onkeydown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+ void onkeyup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+ void onmouseout();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+ void onmouseover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+ void onmousemove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+ void onmousedown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+ void onmouseup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+ void onfilterchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+ void onafterupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+ VARIANT_BOOL onrowexit();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+ void onrowenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+ void ondatasetchanged();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+ void ondataavailable();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+ void ondatasetcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+ void onlosecapture();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+ void onpropertychange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+ void onscroll();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+ void onfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+ void onblur();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+ void onresize();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+ VARIANT_BOOL ondrag();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+ void ondragend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+ VARIANT_BOOL ondragover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+ void ondragleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+ VARIANT_BOOL ondrop();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+ VARIANT_BOOL oncut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+ VARIANT_BOOL oncopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+ VARIANT_BOOL onpaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+ void onrowsdelete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+ void onrowsinserted();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+ void oncellchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+ void onreadystatechange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+ void onbeforeeditfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+ void onpage();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+ void onmove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+ VARIANT_BOOL onmovestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+ void onmoveend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+ void onresizeend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+ void onmouseenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+ void onmouseleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+ void onactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+ void ondeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+ void onfocusin();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+ void onfocusout();
+
+ [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONCHANGE)]
+ void onchange();
+
+ [id(DISPID_HTMLTEXTCONTAINEREVENTS_ONSELECT)]
+ void onselect();
+}
+
+/*****************************************************************************
+ * HTMLTextContainerEvents2 interface
+ */
+[
+ hidden,
+ uuid(3050f624-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLTextContainerEvents2
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+ VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+ VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+ void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+ void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+ void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+ void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+ void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+ void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+ void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+ void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+ void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+ VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+ void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+ void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+ void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+ void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+ void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+ void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+ void onscroll([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+ void onfocus([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+ void onblur([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+ void onresize([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+ VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+ void ondragend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+ VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+ void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+ VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+ VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+ VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+ VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+ void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+ void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+ void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+ void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+ void onpage([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+ void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+ void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+ void onactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+ void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+ void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+ void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+ void onmove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+ VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+ void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+ void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONCHANGE)]
+ void onchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLTEXTCONTAINEREVENTS2_ONSELECT)]
+ void onselect([in] IHTMLEventObj* pEvtObj);
+}
+
+/*****************************************************************************
+ * IHTMLDocument interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(626FC520-A41E-11CF-A731-00A0C9082637)
+]
+interface IHTMLDocument : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT)]
+ HRESULT Script([retval, out] IDispatch **p);
+}
+
+/*****************************************************************************
+ * IHTMLDocument2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(332C4425-26CB-11D0-B483-00C04FD90119)
+]
+interface IHTMLDocument2 : IHTMLDocument
+{
+ [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
+ HRESULT all([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
+ HRESULT body([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
+ HRESULT activeElement([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
+ HRESULT images([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
+ HRESULT applets([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
+ HRESULT links([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
+ HRESULT forms([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
+ HRESULT anchors([retval, out] IHTMLElementCollection **p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+ HRESULT title([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+ HRESULT title([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
+ HRESULT scripts([retval, out] IHTMLElementCollection **p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
+ HRESULT designMode([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE)]
+ HRESULT designMode([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
+ HRESULT selection([retval, out] IHTMLSelectionObject **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
+ HRESULT frames([retval, out] IHTMLFramesCollection2 **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
+ HRESULT embeds([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
+ HRESULT plugins([retval, out] IHTMLElementCollection **p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+ HRESULT alinkColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+ HRESULT alinkColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+ HRESULT bgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+ HRESULT bgColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+ HRESULT fgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+ HRESULT fgColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+ HRESULT linkColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+ HRESULT linkColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+ HRESULT vlinkColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+ HRESULT vlinkColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
+ HRESULT referrer([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
+ HRESULT location([retval, out] IHTMLLocation **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
+ HRESULT lastModified([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
+ HRESULT URL([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
+ HRESULT URL([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+ HRESULT domain([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+ HRESULT domain([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+ HRESULT cookie([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+ HRESULT cookie([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
+ HRESULT expando([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO)]
+ HRESULT expando([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
+ HRESULT charset([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET)]
+ HRESULT charset([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+ HRESULT defaultCharset([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+ HRESULT defaultCharset([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
+ HRESULT mimeType([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
+ HRESULT fileSize([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
+ HRESULT fileCreatedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
+ HRESULT fileModifiedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
+ HRESULT fileUpdatedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
+ HRESULT security([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
+ HRESULT protocol([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
+ HRESULT nameProp([retval, out] BSTR *p);
+
+ [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
+ HRESULT write([in] SAFEARRAY(VARIANT) psarray);
+
+ [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
+ HRESULT writeln([in] SAFEARRAY(VARIANT) psarray);
+
+ [id(DISPID_IHTMLDOCUMENT2_OPEN)]
+ HRESULT open(
+ [defaultvalue("text/html"), in] BSTR url,
+ [optional, in] VARIANT name,
+ [optional, in] VARIANT features,
+ [optional, in] VARIANT replace,
+ [retval, out] IDispatch **pomWindowResult);
+
+ [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
+ HRESULT close();
+
+ [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
+ HRESULT clear();
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
+ HRESULT queryCommandSupported(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
+ HRESULT queryCommandEnabled(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
+ HRESULT queryCommandState(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
+ HRESULT queryCommandIndeterm(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
+ HRESULT queryCommandText(
+ [in] BSTR cmdID,
+ [retval, out] BSTR *pcmdText);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
+ HRESULT queryCommandValue(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT *pcmdValue);
+
+ [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
+ HRESULT execCommand(
+ [in] BSTR cmdID,
+ [defaultvalue(0), in] VARIANT_BOOL showUI,
+ [optional, in] VARIANT value,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
+ HRESULT execCommandShowHelp(
+ [in] BSTR cmdID,
+ [retval, out] VARIANT_BOOL *pfRet);
+
+ [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
+ HRESULT createElement(
+ [in] BSTR eTag,
+ [retval, out] IHTMLElement **newElem);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
+ HRESULT onhelp([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP)]
+ HRESULT onhelp([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
+ HRESULT onclick([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK)]
+ HRESULT onclick([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
+ HRESULT ondblclick([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK)]
+ HRESULT ondblclick([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
+ HRESULT onkeyup([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP)]
+ HRESULT onkeyup([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
+ HRESULT onkeydown([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN)]
+ HRESULT onkeydown([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
+ HRESULT onkeypress([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS)]
+ HRESULT onkeypress([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
+ HRESULT onmouseup([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP)]
+ HRESULT onmouseup([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
+ HRESULT onmousedown([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN)]
+ HRESULT onmousedown([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
+ HRESULT onmousemove([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE)]
+ HRESULT onmousemove([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
+ HRESULT onmouseout([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT)]
+ HRESULT onmouseout([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
+ HRESULT onmouseover([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER)]
+ HRESULT onmouseover([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
+ HRESULT onafterupdate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE)]
+ HRESULT onafterupdate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
+ HRESULT onrowexit([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT)]
+ HRESULT onrowexit([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
+ HRESULT onrowenter([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER)]
+ HRESULT onrowenter([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
+ HRESULT ondragstart([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART)]
+ HRESULT ondragstart([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
+ HRESULT onselectstart([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART)]
+ HRESULT onselectstart([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
+ HRESULT elementFromPoint(
+ [in] LONG x,
+ [in] LONG y,
+ [retval, out] IHTMLElement **elementHit);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
+ HRESULT parentWindow([retval, out] IHTMLWindow2 **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
+ HRESULT styleSheets([retval, out] IHTMLStyleSheetsCollection **p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
+ HRESULT onbeforeupdate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE)]
+ HRESULT onbeforeupdate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
+ HRESULT onerrorupdate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE)]
+ HRESULT onerrorupdate([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
+ HRESULT toString([retval, out] BSTR *String);
+
+ [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
+ HRESULT createStyleSheet(
+ [defaultvalue(""), in] BSTR bstrHref,
+ [defaultvalue(-1), in] LONG lIndex,
+ [retval, out] IHTMLStyleSheet **ppnewStyleSheet);
+}
+
+/*****************************************************************************
+ * IHTMLDocument3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f485-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument3 : IDispatch
+{
+ [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
+ HRESULT releaseCapture();
+
+ [id(DISPID_IHTMLDOCUMENT3_RECALC)]
+ HRESULT recalc([defaultvalue(0), in] VARIANT_BOOL fForce);
+
+ [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
+ HRESULT createTextNode(
+ [in] BSTR text,
+ [retval, out] IHTMLDOMNode **newTextNode);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
+ HRESULT documentElement([retval, out] IHTMLElement **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
+ HRESULT uniqueID([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
+ HRESULT attachEvent(
+ [in] BSTR event,
+ [in] IDispatch* pDisp,
+ [retval, out] VARIANT_BOOL *pfResult);
+
+ [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
+ HRESULT detachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+ HRESULT onrowsdelete([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+ HRESULT onrowsdelete([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+ HRESULT onrowsinserted([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+ HRESULT onrowsinserted([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+ HRESULT oncellchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+ HRESULT oncellchange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+ HRESULT ondatasetchanged([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+ HRESULT ondatasetchanged([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+ HRESULT ondataavailable([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+ HRESULT ondataavailable([retval, out] VARIANT * p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+ HRESULT ondatasetcomplete([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+ HRESULT ondatasetcomplete([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+ HRESULT onpropertychange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+ HRESULT onpropertychange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
+ HRESULT dir([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
+ HRESULT dir([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+ HRESULT oncontextmenu([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+ HRESULT oncontextmenu([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+ HRESULT onstop([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+ HRESULT onstop([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
+ HRESULT createDocumentFragment([retval, out] IHTMLDocument2 **pNewDoc);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
+ HRESULT parentDocument([retval, out] IHTMLDocument2 **p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+ HRESULT enableDownload([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+ HRESULT enableDownload([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+ HRESULT baseUrl([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+ HRESULT baseUrl([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_CHILDNODES)]
+ HRESULT childNodes([retval, out] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+ HRESULT inheritStyleSheets([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+ HRESULT inheritStyleSheets([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+ HRESULT onbeforeeditfocus([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+ HRESULT onbeforeeditfocus([retval, out] VARIANT *p);
+
+ [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
+ HRESULT getElementsByName(
+ [in] BSTR v,
+ [retval, out] IHTMLElementCollection **pelColl);
+
+ [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
+ HRESULT getElementById(
+ [in] BSTR v,
+ [retval, out] IHTMLElement **pel);
+
+ [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName(
+ [in] BSTR v,
+ [retval, out] IHTMLElementCollection **pelColl);
+}
+
+/*****************************************************************************
+ * IHTMLDocument4 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f69a-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument4 : IDispatch
+{
+ [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
+ HRESULT focus();
+
+ [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
+ HRESULT hasFocus([retval, out] VARIANT_BOOL *pfFocus);
+
+ [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+ HRESULT onselectionchange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+ HRESULT onselectionchange([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
+ HRESULT namespaces([retval, out] IDispatch **p);
+
+ [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
+ HRESULT createDocumentFromUrl(
+ [in] BSTR bstrUrl,
+ [in] BSTR bstrOptions,
+ [retval, out] IHTMLDocument2 **newDoc);
+
+ [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+ HRESULT media([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+ HRESULT media([retval, out] BSTR *p);
+
+ [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
+ HRESULT createEventObject(
+ [optional, in] VARIANT *pvarEventObject,
+ [retval, out] IHTMLEventObj **ppEventObj);
+
+ [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
+ HRESULT fireEvent(
+ [in] BSTR bstrEventName,
+ [optional, in] VARIANT *pvarEventObject,
+ [retval, out] VARIANT_BOOL *pfCancelled);
+
+ [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
+ HRESULT createRenderStyle(
+ [in] BSTR v,
+ [retval, out] IHTMLRenderStyle **ppIHTMLRenderStyle);
+
+ [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+ HRESULT oncontrolselect([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+ HRESULT oncontrolselect([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
+ HRESULT URLUnencoded([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLDocument5 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f80c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument5 : IDispatch
+{
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+ HRESULT onmousewheel([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+ HRESULT onmousewheel([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
+ HRESULT doctype([retval, out] IHTMLDOMNode **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
+ HRESULT implementation([retval, out] IHTMLDOMImplementation **p);
+
+ [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
+ HRESULT createAttribute(
+ [in] BSTR bstrattrName,
+ [retval, out] IHTMLDOMAttribute **ppattribute);
+
+ [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
+ HRESULT createComment(
+ [in] BSTR bstrdata,
+ [retval, out] IHTMLDOMNode **ppRetNode);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+ HRESULT onfocusin([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+ HRESULT onfocusin([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+ HRESULT onfocusout([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+ HRESULT onfocusout([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+ HRESULT onactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+ HRESULT onactivate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+ HRESULT ondeactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+ HRESULT ondeactivate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+ HRESULT onbeforeactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+ HRESULT onbeforeactivate([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+ HRESULT onbeforedeactivate([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+ HRESULT onbeforedeactivate([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
+ HRESULT compatMode([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLDocument6 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510417-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDocument6 : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]
+ HRESULT compatible([retval, out] IHTMLDocumentCompatibleInfoCollection **p);
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]
+ HRESULT documentMode([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+ HRESULT onstorage([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+ HRESULT onstorage([out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+ HRESULT onstoragecommit([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+ HRESULT onstoragecommit([out] VARIANT *p);
+
+ [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]
+ HRESULT getElementById(
+ [in] BSTR bstrId,
+ [retval, out] IHTMLElement2 **p);
+
+ [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]
+ HRESULT updateSettings();
+}
+
+/*****************************************************************************
+ * DispHTMLDocument dispinterface
+ */
+[
+ hidden,
+ uuid(3050f55f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLDocument
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLDOCUMENT_SCRIPT), hidden, nonbrowsable]
+ IDispatch *Script();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ALL)]
+ IHTMLElementCollection *all();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_BODY)]
+ IHTMLElement *body();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ACTIVEELEMENT)]
+ IHTMLElement *activeElement();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_IMAGES)]
+ IHTMLElementCollection *images();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_APPLETS)]
+ IHTMLElementCollection *applets();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LINKS)]
+ IHTMLElementCollection *links();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FORMS)]
+ IHTMLElementCollection *forms();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ANCHORS)]
+ IHTMLElementCollection *anchors();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+ void title(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_TITLE)]
+ BSTR title();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_SCRIPTS)]
+ IHTMLElementCollection *scripts();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
+ void designMode(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_DESIGNMODE), hidden]
+ BSTR designMode();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_SELECTION)]
+ IHTMLSelectionObject *selection();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_READYSTATE), bindable]
+ BSTR readyState();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FRAMES)]
+ IHTMLFramesCollection2 *frames();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_EMBEDS)]
+ IHTMLElementCollection *embeds();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_PLUGINS)]
+ IHTMLElementCollection *plugins();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+ void alinkColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ALINKCOLOR)]
+ VARIANT alinkColor();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+ void bgColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_BGCOLOR)]
+ VARIANT bgColor();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+ void fgColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FGCOLOR)]
+ VARIANT fgColor();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+ void linkColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LINKCOLOR)]
+ VARIANT linkColor();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+ void vlinkColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_VLINKCOLOR)]
+ VARIANT vlinkColor();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_REFERRER)]
+ BSTR referrer();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LOCATION)]
+ IHTMLLocation *location();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_LASTMODIFIED)]
+ BSTR lastModified();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_URL)]
+ void URL(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_URL)]
+ BSTR URL();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+ void domain(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_DOMAIN)]
+ BSTR domain();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+ void cookie(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_COOKIE)]
+ BSTR cookie();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
+ void expando(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_EXPANDO), bindable, hidden]
+ VARIANT_BOOL expando();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
+ void charset(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_CHARSET), hidden]
+ BSTR charset();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+ void defaultCharset(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_DEFAULTCHARSET)]
+ BSTR defaultCharset();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_MIMETYPE)]
+ BSTR mimeType();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILESIZE)]
+ BSTR fileSize();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILECREATEDDATE)]
+ BSTR fileCreatedDate();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILEMODIFIEDDATE)]
+ BSTR fileModifiedDate();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_FILEUPDATEDDATE)]
+ BSTR fileUpdatedDate();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_SECURITY)]
+ BSTR security();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_PROTOCOL)]
+ BSTR protocol();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_NAMEPROP)]
+ BSTR nameProp();
+
+ [vararg, id(DISPID_IHTMLDOCUMENT2_WRITE)]
+ void write([in] SAFEARRAY(VARIANT) psarray);
+
+ [vararg, id(DISPID_IHTMLDOCUMENT2_WRITELN)]
+ void writeln([in] SAFEARRAY(VARIANT) psarray);
+
+ [id(DISPID_IHTMLDOCUMENT2_OPEN)]
+ IDispatch *open(
+ [defaultvalue("text/html"), in] BSTR url,
+ [optional, in] VARIANT name,
+ [optional, in] VARIANT features,
+ [optional, in] VARIANT replace);
+
+ [id(DISPID_IHTMLDOCUMENT2_CLOSE)]
+ void close();
+
+ [id(DISPID_IHTMLDOCUMENT2_CLEAR)]
+ void clear();
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSUPPORTED)]
+ VARIANT_BOOL queryCommandSupported([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDENABLED)]
+ VARIANT_BOOL queryCommandEnabled([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDSTATE)]
+ VARIANT_BOOL queryCommandState([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDINDETERM)]
+ VARIANT_BOOL queryCommandIndeterm([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDTEXT)]
+ BSTR queryCommandText([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_QUERYCOMMANDVALUE)]
+ VARIANT queryCommandValue([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_EXECCOMMAND)]
+ VARIANT_BOOL execCommand(
+ [in] BSTR cmdID,
+ [defaultvalue(0), in] VARIANT_BOOL showUI,
+ [optional, in] VARIANT value);
+
+ [id(DISPID_IHTMLDOCUMENT2_EXECCOMMANDSHOWHELP)]
+ VARIANT_BOOL execCommandShowHelp([in] BSTR cmdID);
+
+ [id(DISPID_IHTMLDOCUMENT2_CREATEELEMENT)]
+ IHTMLElement *createElement([in] BSTR eTag);
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
+ void onhelp(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONHELP), displaybind, bindable]
+ VARIANT onhelp();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
+ void onclick(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONCLICK), displaybind, bindable]
+ VARIANT onclick();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
+ void ondblclick(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONDBLCLICK), displaybind, bindable]
+ VARIANT ondblclick();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
+ void onkeyup(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYUP), displaybind, bindable]
+ VARIANT onkeyup();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
+ void onkeydown(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYDOWN), displaybind, bindable]
+ VARIANT onkeydown();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
+ void onkeypress(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONKEYPRESS), displaybind, bindable]
+ VARIANT onkeypress();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
+ void onmouseup(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEUP), displaybind, bindable]
+ VARIANT onmouseup();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
+ void onmousedown(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEDOWN), displaybind, bindable]
+ VARIANT onmousedown();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
+ void onmousemove(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEMOVE), displaybind, bindable]
+ VARIANT onmousemove();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
+ void onmouseout(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOUT), displaybind, bindable]
+ VARIANT onmouseout();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
+ void onmouseover(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONMOUSEOVER), displaybind, bindable]
+ VARIANT onmouseover();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+ void onreadystatechange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONREADYSTATECHANGE), displaybind, bindable]
+ VARIANT onreadystatechange();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
+ void onafterupdate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONAFTERUPDATE), displaybind, bindable]
+ VARIANT onafterupdate();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
+ void onrowexit(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONROWEXIT), displaybind, bindable]
+ VARIANT onrowexit();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
+ void onrowenter(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONROWENTER), displaybind, bindable]
+ VARIANT onrowenter();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
+ void ondragstart(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONDRAGSTART), displaybind, bindable]
+ VARIANT ondragstart();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
+ void onselectstart(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONSELECTSTART), displaybind, bindable]
+ VARIANT onselectstart();
+
+ [id(DISPID_IHTMLDOCUMENT2_ELEMENTFROMPOINT)]
+ IHTMLElement *elementFromPoint(
+ [in] LONG x,
+ [in] LONG y);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_PARENTWINDOW)]
+ IHTMLWindow2 *parentWindow();
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_STYLESHEETS)]
+ IHTMLStyleSheetsCollection *styleSheets();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
+ void onbeforeupdate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONBEFOREUPDATE), displaybind, bindable]
+ VARIANT onbeforeupdate();
+
+ [propput, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
+ void onerrorupdate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT2_ONERRORUPDATE), displaybind, bindable]
+ VARIANT onerrorupdate();
+
+ [id(DISPID_IHTMLDOCUMENT2_TOSTRING)]
+ BSTR toString();
+
+ [id(DISPID_IHTMLDOCUMENT2_CREATESTYLESHEET)]
+ IHTMLStyleSheet *createStyleSheet(
+ [defaultvalue(""), in] BSTR bstrHref,
+ [defaultvalue(-1), in] LONG lIndex);
+
+ [id(DISPID_IHTMLDOCUMENT3_RELEASECAPTURE)]
+ void releaseCapture();
+
+ [id(DISPID_IHTMLDOCUMENT3_RECALC)]
+ void recalc([defaultvalue(0), in] VARIANT_BOOL fForce);
+
+ [id(DISPID_IHTMLDOCUMENT3_CREATETEXTNODE)]
+ IHTMLDOMNode *createTextNode([in] BSTR text);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_DOCUMENTELEMENT)]
+ IHTMLElement *documentElement();
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_UNIQUEID), hidden]
+ BSTR uniqueID();
+
+ [id(DISPID_IHTMLDOCUMENT3_ATTACHEVENT)]
+ VARIANT_BOOL attachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [id(DISPID_IHTMLDOCUMENT3_DETACHEVENT)]
+ void detachEvent(
+ [in] BSTR event,
+ [in] IDispatch *pDisp);
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+ void onrowsdelete(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSDELETE), displaybind, bindable]
+ VARIANT onrowsdelete();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+ void onrowsinserted(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONROWSINSERTED), displaybind, bindable]
+ VARIANT onrowsinserted();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+ void oncellchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONCELLCHANGE), displaybind, bindable]
+ VARIANT oncellchange();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+ void ondatasetchanged(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCHANGED), displaybind, bindable]
+ VARIANT ondatasetchanged();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+ void ondataavailable(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONDATAAVAILABLE), displaybind, bindable]
+ VARIANT ondataavailable();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+ void ondatasetcomplete(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONDATASETCOMPLETE), displaybind, bindable]
+ VARIANT ondatasetcomplete();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+ void onpropertychange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONPROPERTYCHANGE), displaybind, bindable]
+ VARIANT onpropertychange();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_DIR)]
+ void dir(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_DIR)]
+ BSTR dir();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+ void oncontextmenu(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONCONTEXTMENU), displaybind, bindable]
+ VARIANT oncontextmenu();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+ void onstop(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONSTOP), displaybind, bindable]
+ VARIANT onstop();
+
+ [id(DISPID_IHTMLDOCUMENT3_CREATEDOCUMENTFRAGMENT)]
+ IHTMLDocument2 *createDocumentFragment();
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_PARENTDOCUMENT), hidden, restricted]
+ IHTMLDocument2 *parentDocument();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+ void enableDownload(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ENABLEDOWNLOAD), hidden, restricted]
+ VARIANT_BOOL enableDownload();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+ void baseUrl(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_BASEURL), hidden, restricted]
+ BSTR baseUrl();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+ void inheritStyleSheets(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_INHERITSTYLESHEETS), hidden, restricted]
+ VARIANT_BOOL inheritStyleSheets();
+
+ [propput, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+ void onbeforeeditfocus(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT3_ONBEFOREEDITFOCUS), displaybind, bindable]
+ VARIANT onbeforeeditfocus();
+
+ [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYNAME)]
+ IHTMLElementCollection *getElementsByName([in] BSTR v);
+
+ [id(DISPID_IHTMLDOCUMENT3_GETELEMENTBYID)]
+ IHTMLElement *getElementById([in] BSTR v);
+
+ [id(DISPID_IHTMLDOCUMENT3_GETELEMENTSBYTAGNAME)]
+ IHTMLElementCollection *getElementsByTagName([in] BSTR v);
+
+ [id(DISPID_IHTMLDOCUMENT4_FOCUS)]
+ void focus();
+
+ [id(DISPID_IHTMLDOCUMENT4_HASFOCUS)]
+ VARIANT_BOOL hasFocus();
+
+ [propput, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+ void onselectionchange(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_ONSELECTIONCHANGE), displaybind, bindable]
+ VARIANT onselectionchange();
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_NAMESPACES)]
+ IDispatch *namespaces();
+
+ [id(DISPID_IHTMLDOCUMENT4_CREATEDOCUMENTFROMURL)]
+ IHTMLDocument2 *createDocumentFromUrl(
+ [in] BSTR bstrUrl,
+ [in] BSTR bstrOptions);
+
+ [propput, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+ void media(BSTR v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_MEDIA)]
+ BSTR media();
+
+ [id(DISPID_IHTMLDOCUMENT4_CREATEEVENTOBJECT)]
+ IHTMLEventObj *createEventObject([optional, in] VARIANT *pvarEventObject);
+
+ [id(DISPID_IHTMLDOCUMENT4_FIREEVENT)]
+ VARIANT_BOOL fireEvent(
+ [in] BSTR bstrEventName,
+ [optional, in] VARIANT *pvarEventObject);
+
+ [id(DISPID_IHTMLDOCUMENT4_CREATERENDERSTYLE)]
+ IHTMLRenderStyle *createRenderStyle([in] BSTR v);
+
+ [propput, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+ void oncontrolselect(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_ONCONTROLSELECT), displaybind, bindable]
+ VARIANT oncontrolselect();
+
+ [propget, id(DISPID_IHTMLDOCUMENT4_URLUNENCODED)]
+ BSTR URLUnencoded();
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+ void onmousewheel(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONMOUSEWHEEL), displaybind, bindable]
+ VARIANT onmousewheel();
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_DOCTYPE)]
+ IHTMLDOMNode *doctype();
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_IMPLEMENTATION)]
+ IHTMLDOMImplementation *implementation();
+
+ [id(DISPID_IHTMLDOCUMENT5_CREATEATTRIBUTE)]
+ IHTMLDOMAttribute *createAttribute([in] BSTR bstrattrName);
+
+ [id(DISPID_IHTMLDOCUMENT5_CREATECOMMENT)]
+ IHTMLDOMNode *createComment([in] BSTR bstrdata);
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+ void onfocusin(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSIN), displaybind, bindable]
+ VARIANT onfocusin();
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+ void onfocusout(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONFOCUSOUT), displaybind, bindable]
+ VARIANT onfocusout();
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+ void onactivate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONACTIVATE), displaybind, bindable]
+ VARIANT onactivate();
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+ void ondeactivate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONDEACTIVATE), displaybind, bindable]
+ VARIANT ondeactivate();
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+ void onbeforeactivate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREACTIVATE), displaybind, bindable]
+ VARIANT onbeforeactivate();
+
+ [propput, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+ void onbeforedeactivate(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_ONBEFOREDEACTIVATE), displaybind, bindable]
+ VARIANT onbeforedeactivate();
+
+ [propget, id(DISPID_IHTMLDOCUMENT5_COMPATMODE)]
+ BSTR compatMode();
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_COMPATIBLE)]
+ IHTMLDocumentCompatibleInfoCollection *compatible();
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_DOCUMENTMODE)]
+ VARIANT documentMode();
+
+ [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+ void onstorage(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGE), displaybind, bindable]
+ VARIANT onstorage();
+
+ [propput, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+ void onstoragecommit(VARIANT v);
+
+ [propget, id(DISPID_IHTMLDOCUMENT6_ONSTORAGECOMMIT), displaybind, bindable]
+ VARIANT onstoragecommit();
+
+ [id(DISPID_IHTMLDOCUMENT6_IE8_GETELEMENTBYID)]
+ IHTMLElement2 *ie8_getElementById([in] BSTR bstrId);
+
+ [id(DISPID_IHTMLDOCUMENT6_UPDATESETTINGS)]
+ void updateSettings();
+
+ WINE_HTMLDOMNODE_DISPINTERFACE_DECL;
+}
+
+/*****************************************************************************
+ * HTMLDocument coclass
+ */
+[
+ uuid(25336920-03F9-11cf-8FD0-00AA00686F13)
+]
+coclass HTMLDocument
+{
+ [default] dispinterface DispHTMLDocument;
+ [source, default] dispinterface HTMLDocumentEvents;
+ [source] dispinterface HTMLDocumentEvents2;
+ interface IHTMLDocument2;
+ interface IHTMLDocument3;
+ interface IHTMLDocument4;
+ interface IHTMLDocument5;
+ interface IHTMLDocument6;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+}
+
+/*****************************************************************************
+ * DWebBridgeEvents dispinterface
+ */
+[
+ hidden,
+ uuid(a6d897ff-0a95-11d1-b0ba-006008166e11)
+]
+dispinterface DWebBridgeEvents
+{
+properties:
+methods:
+ [id(DISPID_DWEBBRIDGEEVENTS_ONSCRIPTLETEVENT)]
+ void onscriptletevent([in] BSTR name,[in] VARIANT eventData);
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONREADYSTATECHANGE)]
+ void onreadystatechange();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONCLICK)]
+ VARIANT_BOOL onclick();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONKEYDOWN)]
+ void onkeydown();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONKEYUP)]
+ void onkeyup();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEDOWN)]
+ void onmousedown();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEMOVE)]
+ void onmousemove();
+
+ [id(DISPID_DWEBBRIDGEEVENTS_ONMOUSEUP)]
+ void onmouseup();
+}
+
+/*****************************************************************************
+ * IWebBridge interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(ae24fdad-03c6-11d1-8b76-0080c744f389)
+]
+interface IWebBridge : IDispatch
+{
+ [propput, id(DISPID_IWEBBRIDGE_URL)]
+ HRESULT URL([in] BSTR v);
+
+ [propget, id(DISPID_IWEBBRIDGE_URL)]
+ HRESULT URL([retval, out] BSTR * p);
+
+ [propput, id(DISPID_IWEBBRIDGE_SCROLLBAR)]
+ HRESULT Scrollbar([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IWEBBRIDGE_SCROLLBAR)]
+ HRESULT Scrollbar([retval, out] VARIANT_BOOL * p);
+
+ [propput, id(DISPID_IWEBBRIDGE_EMBED)]
+ HRESULT embed([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IWEBBRIDGE_EMBED)]
+ HRESULT embed([retval, out] VARIANT_BOOL * p);
+
+ [propget, id(DISPID_IWEBBRIDGE_EVENT)]
+ HRESULT event([retval, out] IDispatch* * p);
+
+ [propget, id(DISPID_IWEBBRIDGE_READYSTATE)]
+ HRESULT readyState([retval, out] long * p);
+
+ [id(DISPID_IWEBBRIDGE_ABOUTBOX)]
+ HRESULT AboutBox();
+}
+
+/*****************************************************************************
+ * Scriptlet coclass
+ */
+[
+ control,
+ helpstring("Microsoft Scriptlet Component"),
+ progid("ScriptBridge.ScriptBridge.1"),
+ vi_progid("ScriptBridge.ScriptBridge"),
+ uuid(ae24fdae-03c6-11d1-8b76-0080c744f389)
+]
+coclass Scriptlet
+{
+ [default] interface IWebBridge;
+ [source, default] dispinterface DWebBridgeEvents;
+}
+
+/*****************************************************************************
+ * IHTMLEmbedElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f25f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLEmbedElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+ HRESULT hidden([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+ HRESULT hidden([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]
+ HRESULT palette([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]
+ HRESULT pluginspage([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+ HRESULT src([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+ HRESULT units([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+ HRESULT units([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+ HRESULT height([retval, out] VARIANT *p);
+}
+
+/*****************************************************************************
+ * DispHTMLEmbedElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f52e-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLEmbed
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+ void hidden(BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_HIDDEN)]
+ BSTR hidden();
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_PALETTE)]
+ BSTR palette();
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_PLUGINSPAGE)]
+ BSTR pluginspage();
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+ void src(BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_SRC)]
+ BSTR src();
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+ void units(BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_UNITS)]
+ BSTR units();
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_WIDTH)]
+ VARIANT width();
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT_HEIGHT)]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]
+ void ie8_src(BSTR v);
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_SRC)]
+ BSTR ie8_src();
+
+ [propget, id(DISPID_IHTMLEMBEDELEMENT2_IE8_PLUGINSPAGE)]
+ BSTR ie8_pluginspage();
+}
+
+/*****************************************************************************
+ * IHTMLCommentElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f20c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCommentElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+ HRESULT text([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+ HRESULT text([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+ HRESULT atomic([in] LONG v);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+ HRESULT atomic([out, retval] LONG *p);
+}
+
+/*****************************************************************************
+ * IHTMLCommentElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f813-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLCommentElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+ HRESULT data([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+ HRESULT data([out, retval] BSTR *p);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
+ HRESULT length([out, retval] LONG *p);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
+ HRESULT substringData(
+ [in] LONG offset,
+ [in] LONG Count,
+ [out, retval] BSTR *pbstrsubString);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
+ HRESULT appendData([in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
+ HRESULT insertData(
+ [in] LONG offset,
+ [in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
+ HRESULT deleteData(
+ [in] LONG offset,
+ [in] LONG Count);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
+ HRESULT replaceData(
+ [in] LONG offset,
+ [in] LONG Count,
+ [in] BSTR bstrstring);
+}
+
+/*****************************************************************************
+ * DispHTMLCommentElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f50a-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLCommentElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+ void text(BSTR v);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT_TEXT), displaybind, bindable]
+ BSTR text();
+
+ [propput, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+ void atomic(LONG v);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT_ATOMIC), displaybind, bindable]
+ LONG atomic();
+
+ [propput, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+ void data(BSTR v);
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT2_DATA)]
+ BSTR data();
+
+ [propget, id(DISPID_IHTMLCOMMENTELEMENT2_LENGTH)]
+ LONG length();
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA)]
+ BSTR substringData(
+ [in] LONG offset,
+ [in] LONG Count);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA)]
+ void appendData([in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA)]
+ void insertData(
+ [in] LONG offset,
+ [in] BSTR bstrstring);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA)]
+ void deleteData(
+ [in] LONG offset,
+ [in] LONG Count);
+
+ [id(DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA)]
+ void replaceData(
+ [in] LONG offset,
+ [in] LONG Count,
+ [in] BSTR bstrstring);
+}
+
+[
+ hidden,
+ uuid(3050f60f-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLElementEvents2
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+ VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+ VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+ void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+ void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+ void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+ void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+ void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+ void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+ void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+ void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+ void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+ VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+ void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+ void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+ void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+ void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+ void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+ void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+ void onscroll([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+ void onfocus([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+ void onblur([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+ void onresize([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+ VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+ void ondragend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+ VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+ void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+ VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+ VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+ VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+ VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+ void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+ void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+ void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+ void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+ void onpage([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+ void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+ void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+ void onactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+ void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+ void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+ void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+ void onmove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+ VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+ void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+ void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+}
+
+[
+ hidden,
+ uuid(3050f33c-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLElementEvents
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+ VARIANT_BOOL onhelp();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+ VARIANT_BOOL onclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+ void onkeydown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+ void onkeyup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+ void onmouseout();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+ void onmouseover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+ void onmousemove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+ void onmousedown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+ void onmouseup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+ void onfilterchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+ void onafterupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+ VARIANT_BOOL onrowexit();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+ void onrowenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+ void ondatasetchanged();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+ void ondataavailable();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+ void ondatasetcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+ void onlosecapture();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+ void onpropertychange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+ void onscroll();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+ void onfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+ void onblur();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+ void onresize();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+ VARIANT_BOOL ondrag();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+ void ondragend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+ VARIANT_BOOL ondragover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+ void ondragleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+ VARIANT_BOOL ondrop();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+ VARIANT_BOOL oncut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+ VARIANT_BOOL oncopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+ VARIANT_BOOL onpaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+ void onrowsdelete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+ void onrowsinserted();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+ void oncellchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+ void onreadystatechange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+ void onbeforeeditfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+ void onpage();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+ void onmove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+ VARIANT_BOOL onmovestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+ void onmoveend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+ void onresizeend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+ void onmouseenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+ void onmouseleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+ void onactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+ void ondeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+ void onfocusin();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+ void onfocusout();
+}
+
+[
+ noncreatable,
+ uuid(3050f317-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLCommentElement
+{
+ [default] dispinterface DispHTMLCommentElement;
+ [source, default] dispinterface HTMLElementEvents;
+ [source] dispinterface HTMLElementEvents2;
+ interface IHTMLElement;
+ interface IHTMLElement2;
+ interface IHTMLElement3;
+ interface IHTMLElement4;
+ interface IHTMLUniqueName;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+ interface IHTMLCommentElement;
+ interface IHTMLCommentElement2;
+}
+
+/*****************************************************************************
+ * HTMLTableEvents dispinterface
+ */
+[
+ hidden,
+ uuid(3050f407-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLTableEvents
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS_ONHELP)]
+ VARIANT_BOOL onhelp();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCLICK)]
+ VARIANT_BOOL onclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYDOWN)]
+ void onkeydown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONKEYUP)]
+ void onkeyup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOUT)]
+ void onmouseout();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER)]
+ void onmouseover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE)]
+ void onmousemove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEDOWN)]
+ void onmousedown();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEUP)]
+ void onmouseup();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFILTERCHANGE)]
+ void onfilterchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONAFTERUPDATE)]
+ void onafterupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWEXIT)]
+ VARIANT_BOOL onrowexit();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWENTER)]
+ void onrowenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCHANGED)]
+ void ondatasetchanged();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATAAVAILABLE)]
+ void ondataavailable();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDATASETCOMPLETE)]
+ void ondatasetcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLOSECAPTURE)]
+ void onlosecapture();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPROPERTYCHANGE)]
+ void onpropertychange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONSCROLL)]
+ void onscroll();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUS)]
+ void onfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBLUR)]
+ void onblur();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZE)]
+ void onresize();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAG)]
+ VARIANT_BOOL ondrag();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGEND)]
+ void ondragend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGOVER)]
+ VARIANT_BOOL ondragover();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDRAGLEAVE)]
+ void ondragleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDROP)]
+ VARIANT_BOOL ondrop();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCUT)]
+ VARIANT_BOOL oncut();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCOPY)]
+ VARIANT_BOOL oncopy();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPASTE)]
+ VARIANT_BOOL onpaste();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSDELETE)]
+ void onrowsdelete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONROWSINSERTED)]
+ void onrowsinserted();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCELLCHANGE)]
+ void oncellchange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONREADYSTATECHANGE)]
+ void onreadystatechange();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREEDITFOCUS)]
+ void onbeforeeditfocus();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONPAGE)]
+ void onpage();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVE)]
+ void onmove();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVESTART)]
+ VARIANT_BOOL onmovestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOVEEND)]
+ void onmoveend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONRESIZEEND)]
+ void onresizeend();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEENTER)]
+ void onmouseenter();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSELEAVE)]
+ void onmouseleave();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONACTIVATE)]
+ void onactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONDEACTIVATE)]
+ void ondeactivate();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSIN)]
+ void onfocusin();
+
+ [id(DISPID_HTMLELEMENTEVENTS_ONFOCUSOUT)]
+ void onfocusout();
+}
+
+[
+ hidden,
+ uuid(3050f623-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface HTMLTableEvents2
+{
+properties:
+methods:
+ [id(DISPID_HTMLELEMENTEVENTS2_ONHELP)]
+ VARIANT_BOOL onhelp([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCLICK)]
+ VARIANT_BOOL onclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDBLCLICK)]
+ VARIANT_BOOL ondblclick([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS)]
+ VARIANT_BOOL onkeypress([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN)]
+ void onkeydown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONKEYUP)]
+ void onkeyup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOUT)]
+ void onmouseout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER)]
+ void onmouseover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEMOVE)]
+ void onmousemove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEDOWN)]
+ void onmousedown([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEUP)]
+ void onmouseup([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSELECTSTART)]
+ VARIANT_BOOL onselectstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFILTERCHANGE)]
+ void onfilterchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGSTART)]
+ VARIANT_BOOL ondragstart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREUPDATE)]
+ VARIANT_BOOL onbeforeupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONAFTERUPDATE)]
+ void onafterupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONERRORUPDATE)]
+ VARIANT_BOOL onerrorupdate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWEXIT)]
+ VARIANT_BOOL onrowexit([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWENTER)]
+ void onrowenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCHANGED)]
+ void ondatasetchanged([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATAAVAILABLE)]
+ void ondataavailable([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDATASETCOMPLETE)]
+ void ondatasetcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLOSECAPTURE)]
+ void onlosecapture([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPROPERTYCHANGE)]
+ void onpropertychange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONSCROLL)]
+ void onscroll([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUS)]
+ void onfocus([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBLUR)]
+ void onblur([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZE)]
+ void onresize([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAG)]
+ VARIANT_BOOL ondrag([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGEND)]
+ void ondragend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGENTER)]
+ VARIANT_BOOL ondragenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGOVER)]
+ VARIANT_BOOL ondragover([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDRAGLEAVE)]
+ void ondragleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDROP)]
+ VARIANT_BOOL ondrop([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECUT)]
+ VARIANT_BOOL onbeforecut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCUT)]
+ VARIANT_BOOL oncut([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFORECOPY)]
+ VARIANT_BOOL onbeforecopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCOPY)]
+ VARIANT_BOOL oncopy([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREPASTE)]
+ VARIANT_BOOL onbeforepaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPASTE)]
+ VARIANT_BOOL onpaste([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTEXTMENU)]
+ VARIANT_BOOL oncontextmenu([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSDELETE)]
+ void onrowsdelete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONROWSINSERTED)]
+ void onrowsinserted([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCELLCHANGE)]
+ void oncellchange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONREADYSTATECHANGE)]
+ void onreadystatechange([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONLAYOUTCOMPLETE)]
+ void onlayoutcomplete([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONPAGE)]
+ void onpage([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEENTER)]
+ void onmouseenter([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSELEAVE)]
+ void onmouseleave([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONACTIVATE)]
+ void onactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONDEACTIVATE)]
+ void ondeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREDEACTIVATE)]
+ VARIANT_BOOL onbeforedeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONBEFOREACTIVATE)]
+ VARIANT_BOOL onbeforeactivate([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSIN)]
+ void onfocusin([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONFOCUSOUT)]
+ void onfocusout([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVE)]
+ void onmove([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONCONTROLSELECT)]
+ VARIANT_BOOL oncontrolselect([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVESTART)]
+ VARIANT_BOOL onmovestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOVEEND)]
+ void onmoveend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZESTART)]
+ VARIANT_BOOL onresizestart([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONRESIZEEND)]
+ void onresizeend([in] IHTMLEventObj* pEvtObj);
+
+ [id(DISPID_HTMLELEMENTEVENTS2_ONMOUSEWHEEL)]
+ VARIANT_BOOL onmousewheel([in] IHTMLEventObj* pEvtObj);
+}
+
+/*****************************************************************************
+ * IHTMLTableCaption interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f2eb-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableCaption : IDispatch
+{
+ [propput, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECAPTION_ALIGN)]
+ HRESULT align([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
+ HRESULT vAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECAPTION_VALIGN)]
+ HRESULT vAlign([retval, out] BSTR *p);
+}
+
+interface IHTMLTableSection;
+
+/*****************************************************************************
+ * IHTMLTable interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f21e-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTable : IDispatch
+{
+ [propput, id(DISPID_IHTMLTABLE_COLS)]
+ HRESULT cols([in] LONG v);
+
+ [propget, id(DISPID_IHTMLTABLE_COLS)]
+ HRESULT cols([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLTABLE_BORDER)]
+ HRESULT border([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDER)]
+ HRESULT border([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_FRAME)]
+ HRESULT frame([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_FRAME)]
+ HRESULT frame([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLE_RULES)]
+ HRESULT rules([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_RULES)]
+ HRESULT rules([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
+ HRESULT cellSpacing([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
+ HRESULT cellSpacing([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
+ HRESULT cellPadding([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
+ HRESULT cellPadding([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
+ HRESULT background([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
+ HRESULT background([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
+ HRESULT bgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
+ HRESULT bgColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+ HRESULT borderColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+ HRESULT borderColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+ HRESULT borderColorLight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+ HRESULT borderColorLight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+ HRESULT borderColorDark([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+ HRESULT borderColorDark([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_ALIGN)]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_ALIGN)]
+ HRESULT align([retval, out] BSTR * p);
+
+ [id(DISPID_IHTMLTABLE_REFRESH)]
+ HRESULT refresh();
+
+ [propget, id(DISPID_IHTMLTABLE_ROWS)]
+ HRESULT rows([retval, out] IHTMLElementCollection **p);
+
+ [propput, id(DISPID_IHTMLTABLE_WIDTH)]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_WIDTH)]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
+ HRESULT height([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+ HRESULT dataPageSize([in] LONG v);
+
+ [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+ HRESULT dataPageSize([retval, out] LONG *p);
+
+ [id(DISPID_IHTMLTABLE_NEXTPAGE)]
+ HRESULT nextPage();
+
+ [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
+ HRESULT previousPage();
+
+ [propget, id(DISPID_IHTMLTABLE_THEAD)]
+ HRESULT tHead([retval, out] IHTMLTableSection **p);
+
+ [propget, id(DISPID_IHTMLTABLE_TFOOT)]
+ HRESULT tFoot([retval, out] IHTMLTableSection **p);
+
+ [propget, id(DISPID_IHTMLTABLE_TBODIES)]
+ HRESULT tBodies([retval, out] IHTMLElementCollection **p);
+
+ [propget, id(DISPID_IHTMLTABLE_CAPTION)]
+ HRESULT caption([retval, out] IHTMLTableCaption **p);
+
+ [id(DISPID_IHTMLTABLE_CREATETHEAD)]
+ HRESULT createTHead([retval, out] IDispatch **head);
+
+ [id(DISPID_IHTMLTABLE_DELETETHEAD)]
+ HRESULT deleteTHead();
+
+ [id(DISPID_IHTMLTABLE_CREATETFOOT)]
+ HRESULT createTFoot([retval, out] IDispatch **foot);
+
+ [id(DISPID_IHTMLTABLE_DELETETFOOT)]
+ HRESULT deleteTFoot();
+
+ [id(DISPID_IHTMLTABLE_CREATECAPTION)]
+ HRESULT createCaption([retval, out] IHTMLTableCaption **caption);
+
+ [id(DISPID_IHTMLTABLE_DELETECAPTION)]
+ HRESULT deleteCaption();
+
+ [id(DISPID_IHTMLTABLE_INSERTROW)]
+ HRESULT insertRow(
+ [defaultvalue(-1), in] LONG index,
+ [retval, out] IDispatch **row);
+
+ [id(DISPID_IHTMLTABLE_DELETEROW)]
+ HRESULT deleteRow([defaultvalue(-1), in] LONG index);
+
+ [propget, id(DISPID_IHTMLTABLE_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([retval, out] VARIANT *p);
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4ad-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTable2 : IDispatch
+{
+ [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
+ HRESULT firstPage();
+
+ [id(DISPID_IHTMLTABLE2_LASTPAGE)]
+ HRESULT lastPage();
+
+ [propget, id(DISPID_IHTMLTABLE2_CELLS)]
+ HRESULT cells([retval, out] IHTMLElementCollection* * p);
+
+ [id(DISPID_IHTMLTABLE2_MOVEROW)]
+ HRESULT moveRow([defaultvalue(-1), in] LONG indexFrom,
+ [defaultvalue(-1), in] LONG indexTo,
+ [retval, out] IDispatch** row);
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f829-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTable3 : IDispatch
+{
+ [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+ HRESULT summary([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+ HRESULT summary([retval, out] BSTR * p);
+}
+
+[
+ noncreatable,
+ uuid(3050f26b-98b5-11cf-bb82-00aa00bdce0b)
+]
+coclass HTMLTable
+{
+ [default] dispinterface DispHTMLTable;
+ [source, default] dispinterface HTMLTableEvents;
+ [source] dispinterface HTMLTableEvents2;
+ interface IHTMLElement;
+ interface IHTMLElement2;
+ interface IHTMLElement3;
+ interface IHTMLElement4;
+ interface IHTMLUniqueName;
+ interface IHTMLDOMNode;
+ interface IHTMLDOMNode2;
+ interface IHTMLDatabinding;
+ interface IHTMLControlElement;
+ interface IHTMLTable;
+ interface IHTMLTable2;
+ interface IHTMLTable3;
+}
+
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f23b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableSection : IDispatch
+{
+ [propput, id(DISPID_IHTMLTABLESECTION_ALIGN)]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLESECTION_ALIGN)]
+ HRESULT align([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLESECTION_VALIGN)]
+ HRESULT vAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLESECTION_VALIGN)]
+ HRESULT vAlign([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
+ HRESULT bgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLESECTION_BGCOLOR)]
+ HRESULT bgColor([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLTABLESECTION_ROWS)]
+ HRESULT rows([retval, out] IHTMLElementCollection **p);
+
+ [id(DISPID_IHTMLTABLESECTION_INSERTROW)]
+ HRESULT insertRow(
+ [defaultvalue(-1), in] LONG index,
+ [retval, out] IDispatch **row);
+
+ [id(DISPID_IHTMLTABLESECTION_DELETEROW)]
+ HRESULT deleteRow([defaultvalue(-1), in] LONG index);
+}
+
+/*****************************************************************************
+ * IHTMLTableRow interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f23c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableRow : IDispatch
+{
+ [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
+ HRESULT align([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
+ HRESULT vAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
+ HRESULT vAlign([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+ HRESULT bgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+ HRESULT bgColor([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+ HRESULT borderColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+ HRESULT borderColor([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+ HRESULT borderColorLight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+ HRESULT borderColorLight([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+ HRESULT borderColorDark([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+ HRESULT borderColorDark([out, retval] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
+ HRESULT rowIndex([out, retval] LONG *p);
+
+ [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
+ HRESULT sectionRowIndex([out, retval] LONG *p);
+
+ [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
+ HRESULT cells([out, retval] IHTMLElementCollection **p);
+
+ [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
+ HRESULT insertCell(
+ [in, defaultvalue(-1)] LONG index,
+ [out, retval] IDispatch **row);
+
+ [id(DISPID_IHTMLTABLEROW_DELETECELL)]
+ HRESULT deleteCell([in, defaultvalue(-1)] LONG index);
+}
+
+/*****************************************************************************
+ * IHTMLTableCell interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f23d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLTableCell : IDispatch
+{
+ [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+ HRESULT rowSpan([in] long v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+ HRESULT rowSpan([retval, out] long *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+ HRESULT colSpan([in] long v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+ HRESULT colSpan([retval, out] long *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]
+ HRESULT align([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]
+ HRESULT vAlign([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]
+ HRESULT vAlign([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+ HRESULT bgColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+ HRESULT bgColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+ HRESULT noWrap([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+ HRESULT noWrap([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+ HRESULT background([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+ HRESULT background([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+ HRESULT borderColor([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+ HRESULT borderColor([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+ HRESULT borderColorLight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+ HRESULT borderColorLight([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+ HRESULT borderColorDark([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+ HRESULT borderColorDark([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+ HRESULT height([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]
+ HRESULT cellIndex([retval, out] long *p);
+}
+
+/*****************************************************************************
+ * DispHTMLTable dispinterface
+ */
+[
+ hidden,
+ uuid(3050f532-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTable
+{
+properties:
+methods:
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLTABLE_COLS)]
+ void cols(LONG v);
+
+ [propget, id(DISPID_IHTMLTABLE_COLS)]
+ LONG cols();
+
+ [propput, id(DISPID_IHTMLTABLE_BORDER)]
+ void border(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDER)]
+ VARIANT border();
+
+ [propput, id(DISPID_IHTMLTABLE_FRAME)]
+ void frame(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_FRAME)]
+ BSTR frame();
+
+ [propput, id(DISPID_IHTMLTABLE_RULES)]
+ void rules(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_RULES)]
+ BSTR rules();
+
+ [propput, id(DISPID_IHTMLTABLE_CELLSPACING)]
+ void cellSpacing(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_CELLSPACING)]
+ VARIANT cellSpacing();
+
+ [propput, id(DISPID_IHTMLTABLE_CELLPADDING)]
+ void cellPadding(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_CELLPADDING)]
+ VARIANT cellPadding();
+
+ [propput, id(DISPID_IHTMLTABLE_BACKGROUND)]
+ void background(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_BACKGROUND)]
+ BSTR background();
+
+ [propput, id(DISPID_IHTMLTABLE_BGCOLOR)]
+ void bgColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BGCOLOR)]
+ VARIANT bgColor();
+
+ [propput, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+ void borderColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDERCOLOR)]
+ VARIANT borderColor();
+
+ [propput, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+ void borderColorLight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDERCOLORLIGHT)]
+ VARIANT borderColorLight();
+
+ [propput, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+ void borderColorDark(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_BORDERCOLORDARK)]
+ VARIANT borderColorDark();
+
+ [propput, id(DISPID_IHTMLTABLE_ALIGN)]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE_ALIGN)]
+ BSTR align();
+
+ [id(DISPID_IHTMLTABLE_REFRESH)]
+ void refresh();
+
+ [propget, id(DISPID_IHTMLTABLE_ROWS)]
+ IHTMLElementCollection *rows();
+
+ [propput, id(DISPID_IHTMLTABLE_WIDTH)]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_WIDTH)]
+ VARIANT width();
+
+ [propput, id(DISPID_IHTMLTABLE_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLE_HEIGHT)]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+ void dataPageSize(LONG v);
+
+ [propget, id(DISPID_IHTMLTABLE_DATAPAGESIZE)]
+ LONG dataPageSize();
+
+ [id(DISPID_IHTMLTABLE_NEXTPAGE)]
+ void nextPage();
+
+ [id(DISPID_IHTMLTABLE_PREVIOUSPAGE)]
+ void previousPage();
+
+ [propget, id(DISPID_IHTMLTABLE_THEAD)]
+ IHTMLTableSection *tHead();
+
+ [propget, id(DISPID_IHTMLTABLE_TFOOT)]
+ IHTMLTableSection *tFoot();
+
+ [propget, id(DISPID_IHTMLTABLE_TBODIES)]
+ IHTMLElementCollection *tBodies();
+
+ [propget, id(DISPID_IHTMLTABLE_CAPTION)]
+ IHTMLTableCaption *caption();
+
+ [id(DISPID_IHTMLTABLE_CREATETHEAD)]
+ IDispatch *createTHead();
+
+ [id(DISPID_IHTMLTABLE_DELETETHEAD)]
+ void deleteTHead();
+
+ [id(DISPID_IHTMLTABLE_CREATETFOOT)]
+ IDispatch *createTFoot();
+
+ [id(DISPID_IHTMLTABLE_DELETETFOOT)]
+ void deleteTFoot();
+
+ [id(DISPID_IHTMLTABLE_CREATECAPTION)]
+ IHTMLTableCaption *createCaption();
+
+ [id(DISPID_IHTMLTABLE_DELETECAPTION)]
+ void deleteCaption();
+
+ [id(DISPID_IHTMLTABLE_INSERTROW)]
+ IDispatch *insertRow([in, defaultvalue(-1)] LONG index);
+
+ [id(DISPID_IHTMLTABLE_DELETEROW)]
+ void deleteRow([in, defaultvalue(-1)] LONG index);
+
+ [id(DISPID_IHTMLTABLE2_FIRSTPAGE)]
+ void firstPage();
+
+ [id(DISPID_IHTMLTABLE2_LASTPAGE)]
+ void lastPage();
+
+ [propget, id(DISPID_IHTMLTABLE2_CELLS)]
+ IHTMLElementCollection *cells();
+
+ [id(DISPID_IHTMLTABLE2_MOVEROW)]
+ IDispatch *moveRow(
+ [in, defaultvalue(-1)] LONG indexFrom,
+ [in, defaultvalue(-1)] LONG indexTo);
+
+ [propput, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+ void summary(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLE3_SUMMARY), displaybind, bindable]
+ BSTR summary();
+}
+
+/*****************************************************************************
+ * DispHTMLTableRow dispinterface
+ */
+[
+ hidden,
+ uuid(3050f535-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTableRow
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLTABLEROW_ALIGN)]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_ALIGN)]
+ BSTR align();
+
+ [propput, id(DISPID_IHTMLTABLEROW_VALIGN)]
+ void vAlign(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_VALIGN)]
+ BSTR vAlign();
+
+ [propput, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+ void bgColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BGCOLOR)]
+ VARIANT bgColor();
+
+ [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+ void borderColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLOR)]
+ VARIANT borderColor();
+
+ [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+ void borderColorLight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORLIGHT)]
+ VARIANT borderColorLight();
+
+ [propput, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+ void borderColorDark(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW_BORDERCOLORDARK)]
+ VARIANT borderColorDark();
+
+ [propget, id(DISPID_IHTMLTABLEROW_ROWINDEX)]
+ LONG rowIndex();
+
+ [propget, id(DISPID_IHTMLTABLEROW_SECTIONROWINDEX)]
+ LONG sectionRowIndex();
+
+ [propget, id(DISPID_IHTMLTABLEROW_CELLS)]
+ IHTMLElementCollection *cells();
+
+ [id(DISPID_IHTMLTABLEROW_INSERTCELL)]
+ IDispatch *insertCell([in, defaultvalue(-1)] LONG index);
+
+ [id(DISPID_IHTMLTABLEROW_DELETECELL)]
+ void deleteCell([in, defaultvalue(-1)] LONG index);
+
+ [propput, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLEROW2_HEIGHT)]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
+ void ch(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLEROW3_CH), displaybind, bindable]
+ BSTR ch();
+
+ [propput, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
+ void chOff(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLEROW3_CHOFF), displaybind, bindable]
+ BSTR chOff();
+}
+
+/*****************************************************************************
+ * DispHTMLTableCell dispinterface
+ */
+[
+ hidden,
+ uuid(3050f536-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLTableCell
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+ void rowSpan(long v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_ROWSPAN)]
+ long rowSpan();
+
+ [propput, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+ void colSpan(long v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_COLSPAN)]
+ long colSpan();
+
+ [propput, id(DISPID_IHTMLTABLECELL_ALIGN)]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_ALIGN)]
+ BSTR align();
+
+ [propput, id(DISPID_IHTMLTABLECELL_VALIGN)]
+ void vAlign(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_VALIGN)]
+ BSTR vAlign();
+
+ [propput, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+ void bgColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BGCOLOR)]
+ VARIANT bgColor();
+
+ [propput, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+ void noWrap(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_NOWRAP)]
+ VARIANT_BOOL noWrap();
+
+ [propput, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+ void background(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BACKGROUND)]
+ BSTR background();
+
+ [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+ void borderColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLOR)]
+ VARIANT borderColor();
+
+ [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+ void borderColorLight(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORLIGHT)]
+ VARIANT borderColorLight();
+
+ [propput, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+ void borderColorDark(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_BORDERCOLORDARK)]
+ VARIANT borderColorDark();
+
+ [propput, id(DISPID_IHTMLTABLECELL_WIDTH)]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_WIDTH)]
+ VARIANT width();
+
+ [propput, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLTABLECELL_HEIGHT)]
+ VARIANT height();
+
+ [propget, id(DISPID_IHTMLTABLECELL_CELLINDEX)]
+ long cellIndex();
+
+ [propput, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]
+ void abbr(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL2_ABBR), displaybind, bindable]
+ BSTR abbr();
+
+ [propput, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]
+ void axis(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL2_AXIS), displaybind, bindable]
+ BSTR axis();
+
+ [propput, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]
+ void ch(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL2_CH), displaybind, bindable]
+ BSTR ch();
+
+ [propput, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]
+ void chOff(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL2_CHOFF), displaybind, bindable]
+ BSTR chOff();
+
+ [propput, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]
+ void headers(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL2_HEADERS), displaybind, bindable]
+ BSTR headers();
+
+ [propput, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]
+ void scope(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL2_SCOPE), displaybind, bindable]
+ BSTR scope();
+
+ [propput, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]
+ void ie9_ch(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL3_IE9_CH), displaybind, bindable]
+ BSTR ie9_ch();
+
+ [propput, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]
+ void ie9_chOff(BSTR v);
+
+ [propget, id(DISPID_IHTMLTABLECELL3_IE9_CHOFF), displaybind, bindable]
+ BSTR ie9_chOff();
+}
+
+/*****************************************************************************
+ * IHTMLScriptElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f28b-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLScriptElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+ HRESULT src([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+ HRESULT htmlFor([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+ HRESULT htmlFor([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+ HRESULT event([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+ HRESULT event([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+ HRESULT text([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+ HRESULT text([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+ HRESULT defer([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+ HRESULT defer([retval, out] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLScriptElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f828-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLScriptElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+ HRESULT charset([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+ HRESULT charset([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * DispHTMLScriptElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f530-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLScriptElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+ void src(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_SRC), displaybind, bindable]
+ BSTR src();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+ void htmlFor(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_HTMLFOR), displaybind, bindable]
+ BSTR htmlFor();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+ void event(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_EVENT), displaybind, bindable]
+ BSTR event();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+ void text(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_TEXT), displaybind, bindable]
+ BSTR text();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+ void defer(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_DEFER), displaybind, bindable]
+ VARIANT_BOOL defer();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+ void charset(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT2_CHARSET), displaybind, bindable]
+ BSTR charset();
+
+ [propput, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
+ void ie8_src(BSTR v);
+
+ [propget, id(DISPID_IHTMLSCRIPTELEMENT3_IE8_SRC)]
+ BSTR ie8_src();
+}
+
+/*****************************************************************************
+ * IHTMLObjectElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f24f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLObjectElement : IDispatch
+{
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]
+ HRESULT object([retval, out] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CLASSID), hidden]
+ HRESULT classid([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_DATA), hidden]
+ HRESULT data([retval, out] BSTR *p);
+
+ [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+ HRESULT recordset([in] IDispatch *v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+ HRESULT recordset([retval, out] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+ HRESULT align([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+ HRESULT codeBase([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+ HRESULT codeBase([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+ HRESULT codeType([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+ HRESULT codeType([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+ HRESULT code([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+ HRESULT code([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]
+ HRESULT BaseHref([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]
+ HRESULT form([retval, out] IHTMLFormElement **p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+ HRESULT width([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+ HRESULT height([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_READYSTATE), hidden]
+ HRESULT readyState([retval, out] long *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+ HRESULT altHtml([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+ HRESULT altHtml([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+ HRESULT vspace([in] long v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+ HRESULT vspace([retval, out] long *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+ HRESULT hspace([in] long v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+ HRESULT hspace([retval, out] long *p);
+}
+
+/*****************************************************************************
+ * IHTMLObjectElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4cd-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLObjectElement2 : IDispatch
+{
+ [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]
+ HRESULT namedRecordset(
+ [in] BSTR dataMember,
+ [in, optional] VARIANT *hierarchy,
+ [out, retval] IDispatch **ppRecordset);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+ HRESULT classid([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+ HRESULT classid([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+ HRESULT data([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+ HRESULT data([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLParamElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f83d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLParamElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+ HRESULT valueType([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+ HRESULT valueType([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLParamElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510444-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLParamElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT2_NAME), displaybind, bindable]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT2_TYPE), displaybind, bindable]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]
+ HRESULT value([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT2_VALUE), displaybind, bindable]
+ HRESULT value([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+ HRESULT valueType([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+ HRESULT valueType([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * DispHTMLObjectElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f529-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLObjectElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_OBJECT), hidden]
+ IDispatch *object();
+
+ [propputref, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+ void recordset(IDispatch *v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_RECORDSET), hidden]
+ IDispatch *recordset();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ALIGN), displaybind, bindable]
+ BSTR align();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+ void codeBase(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CODEBASE), displaybind, bindable]
+ BSTR codeBase();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+ void codeType(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CODETYPE), displaybind, bindable]
+ BSTR codeType();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+ void code(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_CODE), displaybind, bindable]
+ BSTR code();
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_BASEHREF)]
+ BSTR BaseHref();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_FORM)]
+ IHTMLFormElement *form();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_WIDTH)]
+ VARIANT width();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_HEIGHT)]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+ void altHtml(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_ALTHTML)]
+ BSTR altHtml();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+ void vspace(long v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_VSPACE)]
+ long vspace();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+ void hspace(long v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT_HSPACE)]
+ long hspace();
+
+ [id(DISPID_IHTMLOBJECTELEMENT2_NAMEDRECORDSET)]
+ IDispatch *namedRecordset(
+ [in] BSTR dataMember,
+ [optional, in] VARIANT *hierarchy);
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+ void classid(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT2_CLASSID), hidden]
+ BSTR classid();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+ void data(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT2_DATA), hidden]
+ BSTR data();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]
+ void archive(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT3_ARCHIVE), displaybind, bindable]
+ BSTR archive();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]
+ void alt(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT3_ALT), displaybind, bindable]
+ BSTR alt();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]
+ void declare(VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT3_DECLARE), displaybind, bindable]
+ VARIANT_BOOL declare();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]
+ void standby(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT3_STANDBY), displaybind, bindable]
+ BSTR standby();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]
+ void border(VARIANT v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT3_BORDER)]
+ VARIANT border();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]
+ void useMap(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT3_USEMAP), displaybind, bindable]
+ BSTR useMap();
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT4_CONTENTDOCUMENT)]
+ IDispatch *contentDocument();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]
+ void ie8_codeBase(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_CODEBASE)]
+ BSTR ie8_codeBase();
+
+ [propput, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]
+ void ie8_data(BSTR v);
+
+ [propget, id(DISPID_IHTMLOBJECTELEMENT4_IE8_DATA)]
+ BSTR ie8_data();
+}
+
+/*****************************************************************************
+ * DispHTMLParamElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f590-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLParamElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+ void name(BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_NAME), displaybind, bindable]
+ BSTR name();
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+ void value(BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_VALUE), displaybind, bindable]
+ BSTR value();
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+ void valueType(BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT_VALUETYPE), displaybind, bindable]
+ BSTR valueType();
+
+ [propput, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+ void ie8_valueType(BSTR v);
+
+ [propget, id(DISPID_IHTMLPARAMELEMENT2_IE8_VALUETYPE)]
+ BSTR ie8_valueType();
+}
+
+/*****************************************************************************
+ * IHTMLFrameBase interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f311-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLFrameBase : IDispatch
+{
+ [propput, id(DISPID_IHTMLFRAMEBASE_SRC)]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_SRC)]
+ HRESULT src([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_NAME)]
+ HRESULT name([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_NAME)]
+ HRESULT name([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)]
+ HRESULT border([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)]
+ HRESULT border([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
+ HRESULT frameBorder([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)]
+ HRESULT frameBorder([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
+ HRESULT frameSpacing([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)]
+ HRESULT frameSpacing([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
+ HRESULT marginWidth([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)]
+ HRESULT marginWidth([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
+ HRESULT marginHeight([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)]
+ HRESULT marginHeight([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
+ HRESULT noResize([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)]
+ HRESULT noResize([out, retval] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
+ HRESULT scrolling([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)]
+ HRESULT scrolling([out, retval] BSTR *p);
+}
+
+#define WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL \
+ [propput, id(DISPID_IHTMLFRAMEBASE_SRC)] \
+ void src(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_SRC)] \
+ BSTR src(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_NAME)] \
+ void name(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_NAME)] \
+ BSTR name(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_BORDER)] \
+ void border(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_BORDER)] \
+ VARIANT border(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] \
+ void frameBorder(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_FRAMEBORDER)] \
+ BSTR frameBorder(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] \
+ void frameSpacing(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_FRAMESPACING)] \
+ VARIANT frameSpacing(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] \
+ void marginWidth(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_MARGINWIDTH)] \
+ VARIANT marginWidth(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] \
+ void marginHeight(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_MARGINHEIGHT)] \
+ VARIANT marginHeight(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] \
+ void noResize(VARIANT_BOOL v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_NORESIZE)] \
+ VARIANT_BOOL noResize(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] \
+ void scrolling(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE_SCROLLING)] \
+ BSTR scrolling()
+
+/*****************************************************************************
+ * IHTMLFrameBase2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f6db-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLFrameBase2 : IDispatch
+{
+ [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)]
+ HRESULT contentWindow([retval, out] IHTMLWindow2 **p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable]
+ HRESULT onload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE2_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE2_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
+ HRESULT allowTransparency([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)]
+ HRESULT allowTransparency([retval, out] VARIANT_BOOL *p);
+}
+
+#define WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL \
+ [propget, id(DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW)] \
+ IHTMLWindow2 *contentWindow(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
+ void onload(VARIANT v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE2_ONLOAD), displaybind, bindable] \
+ VARIANT onload(); \
+ \
+ [propput, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)] \
+ void allowTransparency(VARIANT_BOOL v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE2_ALLOWTRANSPARENCY)] \
+ VARIANT_BOOL allowTransparency()
+
+#define WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL \
+ [propput, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
+ void longDesc(BSTR v); \
+ \
+ [propget, id(DISPID_IHTMLFRAMEBASE3_LONGDESC), displaybind, bindable] \
+ BSTR longDesc()
+
+
+#define WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL \
+ WINE_HTMLDATAELEMENT_DISPINTERFACE_DECL; \
+ WINE_IHTMLFRAMEBASE_DISPINTERFACE_DECL; \
+ WINE_IHTMLFRAMEBASE2_DISPINTERFACE_DECL; \
+ WINE_IHTMLFRAMEBASE3_DISPINTERFACE_DECL
+
+/*****************************************************************************
+ * IHTMLFrameElement3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051042d-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLFrameElement3 : IDispatch
+{
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
+ HRESULT contentDocument([out, retval] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+ HRESULT src([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+ HRESULT longDesc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+ HRESULT longDesc([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ HRESULT frameBorder([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ HRESULT frameBorder([out, retval] BSTR * p);
+}
+
+/*****************************************************************************
+ * DispHTMLFrameElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f513-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLFrameElement
+{
+properties:
+methods:
+ WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
+ void borderColor(VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT_BORDERCOLOR)]
+ VARIANT borderColor();
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT2_HEIGHT)]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT2_WIDTH)]
+ VARIANT width();
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_CONTENTDOCUMENT)]
+ IDispatch *contentDocument();
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+ void ie8_src(BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_SRC)]
+ BSTR ie8_src();
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+ void ie8_longDesc(BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_LONGDESC)]
+ BSTR ie8_longDesc();
+
+ [propput, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ void ie8_frameBorder(BSTR v);
+
+ [propget, id(DISPID_IHTMLFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ BSTR ie8_frameBorder();
+}
+
+/*****************************************************************************
+ * IHTMLIFrameElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f315-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+ HRESULT vspace([in] LONG v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+ HRESULT vspace([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+ HRESULT hspace([in] LONG v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+ HRESULT hspace([retval, out] LONG *p);
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+ HRESULT align([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+ HRESULT align([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * IHTMLIFrameElement2 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f4e6-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement2 : IDispatch
+{
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+ HRESULT height([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+ HRESULT height([out, retval] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+ HRESULT width([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+ HRESULT width([out, retval] VARIANT *p);
+}
+
+/*****************************************************************************
+ * IHTMLIFrameElement3 interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510433-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLIFrameElement3 : IDispatch
+{
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)]
+ HRESULT contentDocument([out, retval] IDispatch **p);
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+ HRESULT src([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+ HRESULT src([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+ HRESULT longDesc([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+ HRESULT longDesc([out, retval] BSTR *p);
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ HRESULT frameBorder([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ HRESULT frameBorder([out, retval] BSTR *p);
+}
+
+/*****************************************************************************
+ * DispHTMLIFrame dispinterface
+ */
+[
+ hidden,
+ uuid(3050f51b-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLIFrame
+{
+properties:
+methods:
+ WINE_HTMLFRAMEBASE_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+ void vspace(LONG v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT_VSPACE)]
+ LONG vspace();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+ void hspace(LONG v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT_HSPACE)]
+ LONG hspace();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+ void align(BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT_ALIGN), displaybind, bindable]
+ BSTR align();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+ void height(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT2_HEIGHT)]
+ VARIANT height();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+ void width(VARIANT v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT2_WIDTH)]
+ VARIANT width();
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_CONTENTDOCUMENT)]
+ IDispatch *contentDocument();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+ void ie8_src(BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_SRC)]
+ BSTR ie8_src();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+ void ie8_longDesc(BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_LONGDESC)]
+ BSTR ie8_longDesc();
+
+ [propput, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ void ie8_frameBorder(BSTR v);
+
+ [propget, id(DISPID_IHTMLIFRAMEELEMENT3_IE8_FRAMEBORDER)]
+ BSTR ie8_frameBorder();
+}
+
+/*****************************************************************************
+ * IHTMLStyleElement interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3050f375-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStyleElement : IDispatch
+{
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+ HRESULT type([retval, out] BSTR *p);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_READYSTATE)]
+ HRESULT readyState([retval, out] BSTR *p);
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_ONREADYSTATECHANGE), displaybind, bindable]
+ HRESULT onreadystatechange([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+ HRESULT onload([retval, out] VARIANT *p);
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([in] VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+ HRESULT onerror([retval, out] VARIANT *p);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]
+ HRESULT styleSheet([retval, out] IHTMLStyleSheet **p);
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_DISABLED), displaybind, bindable]
+ HRESULT disabled([retval, out] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+ HRESULT media([in] BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+ HRESULT media([retval, out] BSTR *p);
+}
+
+/*****************************************************************************
+ * DispHTMLStyleElement dispinterface
+ */
+[
+ hidden,
+ uuid(3050f511-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLStyleElement
+{
+properties:
+methods:
+ WINE_HTMLELEMENT_DISPINTERFACE_DECL;
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+ void type(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_TYPE), displaybind, bindable]
+ BSTR type();
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+ void onload(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_ONLOAD), displaybind, bindable]
+ VARIANT onload();
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+ void onerror(VARIANT v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_ONERROR), displaybind, bindable]
+ VARIANT onerror();
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_STYLESHEET)]
+ IHTMLStyleSheet *styleSheet();
+
+ [propput, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+ void media(BSTR v);
+
+ [propget, id(DISPID_IHTMLSTYLEELEMENT_MEDIA), displaybind, bindable]
+ BSTR media();
+}
+
+/*****************************************************************************
+ * IHTMLStorage interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(30510474-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLStorage : IDispatch
+{
+ [propget, id(DISPID_IHTMLSTORAGE_LENGTH), hidden]
+ HRESULT length([out, retval] long *p);
+
+ [propget, id(DISPID_IHTMLSTORAGE_REMAININGSPACE), hidden]
+ HRESULT remainingSpace([out, retval] long *p);
+
+ [id(DISPID_IHTMLSTORAGE_KEY)]
+ HRESULT key(
+ [in] long lIndex,
+ [out, retval] BSTR *);
+
+ [id(DISPID_IHTMLSTORAGE_GETITEM)]
+ HRESULT getItem(
+ [in] BSTR bstrKey,
+ [out, retval] VARIANT *);
+
+ [id(DISPID_IHTMLSTORAGE_SETITEM)]
+ HRESULT setItem(
+ [in] BSTR bstrKey,
+ [in] BSTR bstrValue);
+
+ [id(DISPID_IHTMLSTORAGE_REMOVEITEM)]
+ HRESULT removeItem([in] BSTR bstrKey);
+
+ [id(DISPID_IHTMLSTORAGE_CLEAR)]
+ HRESULT clear();
+}
+
+/*****************************************************************************
+ * IDOMEventTarget interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(305104b9-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IEventTarget : IDispatch
+{
+ [id(DISPID_IEVENTTARGET_ADDEVENTLISTENER)]
+ HRESULT addEventListener(
+ [in] BSTR type,
+ [in] IDispatch *listener,
+ [in] VARIANT_BOOL useCapture);
+
+ [id(DISPID_IEVENTTARGET_REMOVEEVENTLISTENER)]
+ HRESULT removeEventListener(
+ [in] BSTR type,
+ [in] IDispatch *listener,
+ [in] VARIANT_BOOL useCapture);
+
+ [id(DISPID_IEVENTTARGET_DISPATCHEVENT)]
+ HRESULT dispatchEvent(
+ [in] IDOMEvent *evt,
+ [out, retval] VARIANT_BOOL *pfResult);
+}
+
+/*****************************************************************************
+ * IDOMEvent interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(305104ba-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IDOMEvent : IDispatch
+{
+ [propget, id(DISPID_IDOMEVENT_BUBBLES)]
+ HRESULT bubbles([out, retval] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IDOMEVENT_CANCELABLE)]
+ HRESULT cancelable([out, retval] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IDOMEVENT_CURRENTTARGET)]
+ HRESULT currentTarget([out, retval] IEventTarget **p);
+
+ [propget, id(DISPID_IDOMEVENT_DEFAULTPREVENTED)]
+ HRESULT defaultPrevented([out, retval] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IDOMEVENT_EVENTPHASE)]
+ HRESULT eventPhase([out, retval] USHORT *p);
+
+ [propget, id(DISPID_IDOMEVENT_TARGET)]
+ HRESULT target([out, retval] IEventTarget **p);
+
+ [propget, id(DISPID_IDOMEVENT_TIMESTAMP)]
+ HRESULT timeStamp([out, retval] ULONGLONG *p);
+
+ [propget, id(DISPID_IDOMEVENT_TYPE)]
+ HRESULT type([out, retval] BSTR *p);
+
+ [id(DISPID_IDOMEVENT_INITEVENT)]
+ HRESULT initEvent(
+ [in] BSTR eventType,
+ [in] VARIANT_BOOL canBubble,
+ [in] VARIANT_BOOL cancelable);
+
+ [id(DISPID_IDOMEVENT_PREVENTDEFAULT)]
+ HRESULT preventDefault();
+
+ [id(DISPID_IDOMEVENT_STOPPROPAGATION)]
+ HRESULT stopPropagation();
+
+ [id(DISPID_IDOMEVENT_STOPIMMEDIATEPROPAGATION)]
+ HRESULT stopImmediatePropagation();
+
+ [propget, id(DISPID_IDOMEVENT_ISTRUSTED)]
+ HRESULT isTrusted([out, retval] VARIANT_BOOL *p);
+
+ [propput, id(DISPID_IDOMEVENT_CANCELBUBBLE)]
+ HRESULT cancelBubble([in] VARIANT_BOOL v);
+
+ [propget, id(DISPID_IDOMEVENT_CANCELBUBBLE)]
+ HRESULT cancelBubble([out, retval] VARIANT_BOOL *p);
+
+ [propget, id(DISPID_IDOMEVENT_SRCELEMENT)]
+ HRESULT srcElement([out, retval] IHTMLElement **p);
+}
+
+/*****************************************************************************
+ * IMarkupContainer interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f5f9-98b5-11cf-bb82-00aa00bdce0B)
+]
+interface IMarkupContainer : IUnknown
+{
+ HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);
+}
+
+/*****************************************************************************
+ * IMarkupPointer interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f49f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IMarkupPointer : IUnknown
+{
+ HRESULT OwningDoc([out] IHTMLDocument2 **ppDoc);
+
+ HRESULT Gravity([out] POINTER_GRAVITY *pGravity);
+
+ HRESULT SetGravity([in] POINTER_GRAVITY Gravity);
+
+ HRESULT Cling([out] BOOL *pfCling);
+
+ HRESULT SetCling([in] BOOL fCLing);
+
+ HRESULT UnPosition();
+
+ HRESULT IsPositioned([out] BOOL *pfPositioned);
+
+ HRESULT GetContainer([out] IMarkupContainer **ppContainer);
+
+ HRESULT MoveAdjacentToElement(
+ [in] IHTMLElement *pElement,
+ [in] ELEMENT_ADJACENCY eAdj);
+
+ HRESULT MoveToPointer([in] IMarkupPointer *pPointer);
+
+ HRESULT MoveToContainer(
+ [in] IMarkupContainer *pContainer,
+ [in] BOOL fAtStart);
+
+ HRESULT Left(
+ [in] BOOL fMove,
+ [out] MARKUP_CONTEXT_TYPE *pContext,
+ [out] IHTMLElement **ppElement,
+ [in, out] LONG *pcch,
+ [out, size_is(*pcch)] OLECHAR *pchText);
+
+ HRESULT Right(
+ [in] BOOL fMove,
+ [out] MARKUP_CONTEXT_TYPE *pContext,
+ [out] IHTMLElement **ppElement,
+ [in, out] LONG *pcch,
+ [out, size_is(*pcch)] OLECHAR *pchText);
+
+ HRESULT CurrentScope([out] IHTMLElement **ppElemCurrent);
+
+ HRESULT IsLeftOf(
+ [in] IMarkupPointer *pPointerThat,
+ [out] BOOL *pfResult);
+
+ HRESULT IsLeftOfOrEqualTo(
+ [in] IMarkupPointer *pPointerThat,
+ [out] BOOL *pfResult);
+
+ HRESULT IsRightOf(
+ [in] IMarkupPointer *pPointerThat,
+ [out] BOOL *pfResult);
+
+ HRESULT IsRightOfOrEqualTo(
+ [in] IMarkupPointer *pPointerThat,
+ [out] BOOL *pfResult);
+
+ HRESULT IsEqualTo(
+ [in] IMarkupPointer *pPointerThat,
+ [out] BOOL *pfAreEqual);
+
+ HRESULT MoveUnit([in] MOVEUNIT_ACTION muAction);
+
+ HRESULT FindText(
+ [in] OLECHAR *pchFindText,
+ [in] DWORD dwFlags,
+ [in] IMarkupPointer *pIEndMatch,
+ [in] IMarkupPointer *pIEndSearch);
+}
+
+/*****************************************************************************
+ * IHTMLDOMConstructorCollection interface
+ */
+[
+ odl,
+ oleautomation,
+ dual,
+ uuid(3051049c-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLDOMConstructorCollection : IDispatch
+{
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ATTR)]
+ HRESULT Attr([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BEHAVIORURNSCOLLECTION)]
+ HRESULT BehaviorUrnsCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_BOOKMARKCOLLECTION)]
+ HRESULT BookmarkCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFO)]
+ HRESULT CompatibleInfo([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_COMPATIBLEINFOCOLLECTION)]
+ HRESULT CompatibleInfoCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CONTROLRANGECOLLECTION)]
+ HRESULT ControlRangeCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSCURRENTSTYLEDECLARATION)]
+ HRESULT CSSCurrentStyleDeclaration([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULELIST)]
+ HRESULT CSSRuleList([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSRULESTYLEDECLARATION)]
+ HRESULT CSSRuleStyleDeclaration([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLEDECLARATION)]
+ HRESULT CSSStyleDeclaration([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLERULE)]
+ HRESULT CSSStyleRule([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_CSSSTYLESHEET)]
+ HRESULT CSSStyleSheet([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DATATRANSFER)]
+ HRESULT DataTransfer([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_DOMIMPLEMENTATION)]
+ HRESULT DOMImplementation([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_ELEMENT)]
+ HRESULT Element([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_EVENT)]
+ HRESULT Event([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HISTORY)]
+ HRESULT History([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTCELEMENTBEHAVIORDEFAULTS)]
+ HRESULT HTCElementBehaviorDefaults([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLANCHORELEMENT)]
+ HRESULT HTMLAnchorElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREAELEMENT)]
+ HRESULT HTMLAreaElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLAREASCOLLECTION)]
+ HRESULT HTMLAreasCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEELEMENT)]
+ HRESULT HTMLBaseElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBASEFONTELEMENT)]
+ HRESULT HTMLBaseFontElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBGSOUNDELEMENT)]
+ HRESULT HTMLBGSoundElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBLOCKELEMENT)]
+ HRESULT HTMLBlockElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBODYELEMENT)]
+ HRESULT HTMLBodyElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBRELEMENT)]
+ HRESULT HTMLBRElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLBUTTONELEMENT)]
+ HRESULT HTMLButtonElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOLLECTION)]
+ HRESULT HTMLCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLCOMMENTELEMENT)]
+ HRESULT HTMLCommentElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDDELEMENT)]
+ HRESULT HTMLDDElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDIVELEMENT)]
+ HRESULT HTMLDivElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDOCUMENT)]
+ HRESULT HTMLDocument([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDLISTELEMENT)]
+ HRESULT HTMLDListElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLDTELEMENT)]
+ HRESULT HTMLDTElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLEMBEDELEMENT)]
+ HRESULT HTMLEmbedElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFIELDSETELEMENT)]
+ HRESULT HTMLFieldSetElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFONTELEMENT)]
+ HRESULT HTMLFontElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFORMELEMENT)]
+ HRESULT HTMLFormElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMEELEMENT)]
+ HRESULT HTMLFrameElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLFRAMESETELEMENT)]
+ HRESULT HTMLFrameSetElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLGENERICELEMENT)]
+ HRESULT HTMLGenericElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADELEMENT)]
+ HRESULT HTMLHeadElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHEADINGELEMENT)]
+ HRESULT HTMLHeadingElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHRELEMENT)]
+ HRESULT HTMLHRElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLHTMLELEMENT)]
+ HRESULT HTMLHtmlElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIFRAMEELEMENT)]
+ HRESULT HTMLIFrameElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLIMAGEELEMENT)]
+ HRESULT HTMLImageElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLINPUTELEMENT)]
+ HRESULT HTMLInputElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLISINDEXELEMENT)]
+ HRESULT HTMLIsIndexElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLABELELEMENT)]
+ HRESULT HTMLLabelElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLEGENDELEMENT)]
+ HRESULT HTMLLegendElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLIELEMENT)]
+ HRESULT HTMLLIElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLLINKELEMENT)]
+ HRESULT HTMLLinkElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMAPELEMENT)]
+ HRESULT HTMLMapElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMARQUEEELEMENT)]
+ HRESULT HTMLMarqueeElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMETAELEMENT)]
+ HRESULT HTMLMetaElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLMODELESSDIALOG)]
+ HRESULT HTMLModelessDialog([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFO)]
+ HRESULT HTMLNamespaceInfo([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNAMESPACEINFOCOLLECTION)]
+ HRESULT HTMLNamespaceInfoCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNEXTIDELEMENT)]
+ HRESULT HTMLNextIdElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLNOSHOWELEMENT)]
+ HRESULT HTMLNoShowElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOBJECTELEMENT)]
+ HRESULT HTMLObjectElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOLISTELEMENT)]
+ HRESULT HTMLOListElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLOPTIONELEMENT)]
+ HRESULT HTMLOptionElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAGRAPHELEMENT)]
+ HRESULT HTMLParagraphElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPARAMELEMENT)]
+ HRESULT HTMLParamElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPHRASEELEMENT)]
+ HRESULT HTMLPhraseElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPLUGINSCOLLECTION)]
+ HRESULT HTMLPluginsCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLPOPUP)]
+ HRESULT HTMLPopup([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSCRIPTELEMENT)]
+ HRESULT HTMLScriptElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSELECTELEMENT)]
+ HRESULT HTMLSelectElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSPANELEMENT)]
+ HRESULT HTMLSpanElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLSTYLEELEMENT)]
+ HRESULT HTMLStyleElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECAPTIONELEMENT)]
+ HRESULT HTMLTableCaptionElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECELLELEMENT)]
+ HRESULT HTMLTableCellElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLECOLELEMENT)]
+ HRESULT HTMLTableColElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEELEMENT)]
+ HRESULT HTMLTableElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLEROWELEMENT)]
+ HRESULT HTMLTableRowElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTABLESECTIONELEMENT)]
+ HRESULT HTMLTableSectionElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTAREAELEMENT)]
+ HRESULT HTMLTextAreaElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTEXTELEMENT)]
+ HRESULT HTMLTextElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLTITLEELEMENT)]
+ HRESULT HTMLTitleElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLULISTELEMENT)]
+ HRESULT HTMLUListElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_HTMLUNKNOWNELEMENT)]
+ HRESULT HTMLUnknownElement([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_IMAGE)]
+ HRESULT Image([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_LOCATION)]
+ HRESULT Location([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAMEDNODEMAP)]
+ HRESULT NamedNodeMap([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NAVIGATOR)]
+ HRESULT Navigator([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_NODELIST)]
+ HRESULT NodeList([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_OPTION)]
+ HRESULT Option([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SCREEN)]
+ HRESULT Screen([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_SELECTION)]
+ HRESULT Selection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STATICNODELIST)]
+ HRESULT StaticNodeList([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STORAGE)]
+ HRESULT Storage([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETLIST)]
+ HRESULT StyleSheetList([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGE)]
+ HRESULT StyleSheetPage([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_STYLESHEETPAGELIST)]
+ HRESULT StyleSheetPageList([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXT)]
+ HRESULT Text([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGE)]
+ HRESULT TextRange([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRANGECOLLECTION)]
+ HRESULT TextRangeCollection([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLE)]
+ HRESULT TextRectangle([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_TEXTRECTANGLELIST)]
+ HRESULT TextRectangleList([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_WINDOW)]
+ HRESULT Window([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XDOMAINREQUEST)]
+ HRESULT XDomainRequest([out, retval] IDispatch **p);
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTORCOLLECTION_XMLHTTPREQUEST)]
+ HRESULT XMLHttpRequest([out, retval] IDispatch **p);
+}
+
+/*****************************************************************************
+ * IXMLGenericParse interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(E4E23071-4D07-11d2-AE76-0080C73BC199)
+]
+interface IXMLGenericParse : IUnknown
+{
+ HRESULT SetGenericParse(
+ [in] VARIANT_BOOL fDoGeneric);
+}
+
+/*****************************************************************************
+ * ISegment interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f683-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface ISegment : IUnknown
+{
+ HRESULT GetPointers(
+ [in] IMarkupPointer *pIStart,
+ [in] IMarkupPointer *pIEnd);
+}
+
+/*****************************************************************************
+ * IElementSegment interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f68f-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IElementSegment : ISegment
+{
+ HRESULT GetElement([out] IHTMLElement **ppIElement);
+
+ HRESULT SetPrimary([in] BOOL fPrimary);
+
+ HRESULT IsPrimary([out] BOOL *pfPrimary);
+}
+
+/*****************************************************************************
+ * ISelectionServicesListener interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f699-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface ISelectionServicesListener : IUnknown
+{
+ HRESULT BeginSelectionUndo();
+
+ HRESULT EndSelectionUndo();
+
+ HRESULT OnSelectedElementExit(
+ [in] IMarkupPointer *pIElementStart,
+ [in] IMarkupPointer *pIElementEnd,
+ [in] IMarkupPointer *pIElementContentStart,
+ [in] IMarkupPointer *pIElementContentEnd);
+
+ HRESULT OnChangeType(
+ [in] SELECTION_TYPE eType,
+ [in] ISelectionServicesListener *pIListener);
+
+ HRESULT GetTypeDetail([out] BSTR *pTypeDetail);
+}
+
+/*****************************************************************************
+ * ISelectionServices interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f684-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface ISelectionServices : IUnknown
+{
+ HRESULT SetSelectionType(
+ [in] SELECTION_TYPE eType,
+ [in] ISelectionServicesListener *pIListener);
+
+ HRESULT GetMarkupContainer([out] IMarkupContainer **ppIContainer);
+
+ HRESULT AddSegment(
+ [in] IMarkupPointer *pIStart,
+ [in] IMarkupPointer *pIEnd,
+ [out] ISegment **ppISegmentAdded);
+
+ HRESULT AddElementSegment(
+ [in] IHTMLElement *pIElement,
+ [out] IElementSegment **ppISegmentAdded);
+
+ HRESULT RemoveSegment([in] ISegment *pISegment);
+
+ HRESULT GetSelectionServicesListener([out] ISelectionServicesListener **ppISelectionServicesListener);
+}
+
+/*****************************************************************************
+ * IHTMLEditDesigner interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f662-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLEditDesigner : IUnknown
+{
+ HRESULT PreHandleEvent(
+ [in] DISPID inEvtDispId,
+ [in] IHTMLEventObj *pIEventObj);
+
+ HRESULT PostHandleEvent(
+ [in] DISPID inEvtDispId,
+ [in] IHTMLEventObj *pIEventObj);
+
+ HRESULT TranslateAccelerator(
+ [in] DISPID inEvtDispId,
+ [in] IHTMLEventObj *pIEventObj);
+
+ HRESULT PostEditorEventNotify(
+ [in] DISPID inEvtDispId,
+ [in] IHTMLEventObj *pIEventObj);
+}
+
+/*****************************************************************************
+ * IHTMLEditServices interface
+ */
+[
+ object,
+ pointer_default(unique),
+ uuid(3050f663-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IHTMLEditServices : IUnknown
+{
+ HRESULT AddDesigner([in] IHTMLEditDesigner *pIDesigner);
+
+ HRESULT RemoveDesigner([in] IHTMLEditDesigner *pIDesigner);
+
+ HRESULT GetSelectionServices(
+ [in] IMarkupContainer *pIContainer,
+ [out] ISelectionServices **ppSelSvc);
+
+ HRESULT MoveToSelectionAnchor([in] IMarkupPointer *pIStartAnchor);
+
+ HRESULT MoveToSelectionEnd([in] IMarkupPointer *pIEndAnchor);
+
+ HRESULT SelectRange(
+ [in] IMarkupPointer* pStart,
+ [in] IMarkupPointer* pEnd,
+ [in] SELECTION_TYPE eType);
+}
+
+/*****************************************************************************
+ * IElementBehaviorSite interface
+ */
+[
+ odl,
+ uuid(3050F427-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IElementBehaviorSite : IUnknown {
+ HRESULT GetElement([out, retval] IHTMLElement **ppElement);
+ HRESULT RegisterNotification([in] long lEvent);
+}
+
+/*****************************************************************************
+ * IElementBehavior interface
+ */
+[
+ odl,
+ uuid(3050F425-98B5-11CF-BB82-00AA00BDCE0B)
+]
+interface IElementBehavior : IUnknown {
+ HRESULT Init([in] IElementBehaviorSite *pBehaviorSite);
+ HRESULT Notify([in] long lEvent, [in, out] VARIANT *pVar);
+ HRESULT Detach();
+}
+
+/*****************************************************************************
+ * IElementBehaviorFactory interface
+ */
+[
+ odl,
+ uuid(3050f429-98b5-11cf-bb82-00aa00bdce0b)
+]
+interface IElementBehaviorFactory : IUnknown
+{
+ HRESULT FindBehavior(
+ [in] BSTR bstrBehavior,
+ [in] BSTR bstrBehaviorUrl,
+ [in] IElementBehaviorSite *pSite,
+ [out] IElementBehavior **ppBehavior);
+}
+
+} /* library MSHTML */
+
+interface IOleCommandTarget;
+
+/*****************************************************************************
+ * IHTMLPrivateWindow interface
+ */
+[
+ object,
+ uuid(3050f6dc-98b5-11cf-bb82-00aa00bdce0b),
+ local
+]
+interface IHTMLPrivateWindow : IUnknown
+{
+ HRESULT SuperNavigate(BSTR url, BSTR arg2, BSTR arg3, BSTR arg4, VARIANT *post_data, VARIANT *headers, ULONG flags);
+ HRESULT GetPendingUrl(BSTR *url);
+ HRESULT SetPICSTarget(IOleCommandTarget *cmdtrg);
+ HRESULT PICSComplete(int arg);
+ HRESULT FindWindowByName(LPCWSTR name, IHTMLWindow2 **ret);
+ HRESULT GetAddressBarUrl(BSTR *url);
+}
+
+/*****************************************************************************
+ * IWebBrowserPriv interface
+ */
+[
+ object,
+ uuid(3050f804-98b5-11cf-bb82-00aa00bdce0b),
+ local
+]
+interface IWebBrowserPriv : IUnknown
+{
+ HRESULT NavigateWithBindCtx(VARIANT *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,
+ VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment);
+ HRESULT OnClose();
+}
+
+/*****************************************************************************
+ * IWebBrowserPriv2IE8 interface
+ */
+[
+ object,
+ uuid(3ed72303-6ffc-4214-ba90-faf1862dec8a),
+ local
+]
+interface IWebBrowserPriv2IE8 : IUnknown
+{
+ HRESULT NavigateWithBindCtx2(IUri *uri, VARIANT *flags, VARIANT *target_frame, VARIANT *post_data,
+ VARIANT *headers, IBindCtx *bind_ctx, LPOLESTR url_fragment);
+ HRESULT SetBrowserFrameOptions(DWORD opt1, DWORD opt2);
+ HRESULT DetachConnectionPoints();
+ HRESULT GetProcessId(DWORD *pid);
+ HRESULT CompatAttachEditEvents();
+ HRESULT HandleOpenOptions(IUnknown *obj, BSTR bstr, int options);
+ HRESULT SetSearchTerm(BSTR term);
+ HRESULT GetSearchTerm(BSTR *term);
+ HRESULT GetCurrentDocument(IDispatch** doc);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h
new file mode 100644
index 00000000..c712e3f0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msi.h
@@ -0,0 +1,719 @@
+/*
+ * Copyright (C) 2002,2003 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSI_H
+#define __WINE_MSI_H
+
+#ifndef _MSI_NO_CRYPTO
+#include <wincrypt.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ULONG MSIHANDLE;
+
+typedef enum tagINSTALLSTATE
+{
+ INSTALLSTATE_NOTUSED = -7,
+ INSTALLSTATE_BADCONFIG = -6,
+ INSTALLSTATE_INCOMPLETE = -5,
+ INSTALLSTATE_SOURCEABSENT = -4,
+ INSTALLSTATE_MOREDATA = -3,
+ INSTALLSTATE_INVALIDARG = -2,
+ INSTALLSTATE_UNKNOWN = -1,
+ INSTALLSTATE_BROKEN = 0,
+ INSTALLSTATE_ADVERTISED = 1,
+ INSTALLSTATE_ABSENT = 2,
+ INSTALLSTATE_LOCAL = 3,
+ INSTALLSTATE_SOURCE = 4,
+ INSTALLSTATE_DEFAULT = 5
+} INSTALLSTATE;
+
+typedef enum tagMSIPATCHSTATE
+{
+ MSIPATCHSTATE_INVALID = 0,
+ MSIPATCHSTATE_APPLIED = 1,
+ MSIPATCHSTATE_SUPERSEDED = 2,
+ MSIPATCHSTATE_OBSOLETED = 4,
+ MSIPATCHSTATE_REGISTERED = 8,
+ MSIPATCHSTATE_ALL = (MSIPATCHSTATE_APPLIED | MSIPATCHSTATE_SUPERSEDED |
+ MSIPATCHSTATE_OBSOLETED | MSIPATCHSTATE_REGISTERED)
+} MSIPATCHSTATE;
+
+typedef enum tagINSTALLUILEVEL
+{
+ INSTALLUILEVEL_NOCHANGE = 0,
+ INSTALLUILEVEL_DEFAULT = 1,
+ INSTALLUILEVEL_NONE = 2,
+ INSTALLUILEVEL_BASIC = 3,
+ INSTALLUILEVEL_REDUCED = 4,
+ INSTALLUILEVEL_FULL = 5,
+ INSTALLUILEVEL_HIDECANCEL = 0x20,
+ INSTALLUILEVEL_PROGRESSONLY = 0x40,
+ INSTALLUILEVEL_ENDDIALOG = 0x80,
+ INSTALLUILEVEL_SOURCERESONLY = 0x100
+} INSTALLUILEVEL;
+
+typedef enum tagUSERINFOSTATE
+{
+ USERINFOSTATE_MOREDATA = -3,
+ USERINFOSTATE_INVALIDARG = -2,
+ USERINFOSTATE_UNKNOWN = -1,
+ USERINFOSTATE_ABSENT = 0,
+ USERINFOSTATE_PRESENT = 1,
+} USERINFOSTATE;
+
+typedef enum tagINSTALLLEVEL
+{
+ INSTALLLEVEL_DEFAULT = 0,
+ INSTALLLEVEL_MINIMUM = 1,
+ INSTALLLEVEL_MAXIMUM = 0xFFFF
+} INSTALLLEVEL;
+
+typedef enum tagINSTALLMESSAGE
+{
+ INSTALLMESSAGE_FATALEXIT = 0,
+ INSTALLMESSAGE_ERROR = 0x01000000,
+ INSTALLMESSAGE_WARNING = 0x02000000,
+ INSTALLMESSAGE_USER = 0x03000000,
+ INSTALLMESSAGE_INFO = 0x04000000,
+ INSTALLMESSAGE_FILESINUSE = 0x05000000,
+ INSTALLMESSAGE_RESOLVESOURCE = 0x06000000,
+ INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000,
+ INSTALLMESSAGE_ACTIONSTART = 0x08000000,
+ INSTALLMESSAGE_ACTIONDATA = 0x09000000,
+ INSTALLMESSAGE_PROGRESS = 0x0a000000,
+ INSTALLMESSAGE_COMMONDATA = 0x0b000000,
+ INSTALLMESSAGE_INITIALIZE = 0x0c000000,
+ INSTALLMESSAGE_TERMINATE = 0x0d000000,
+ INSTALLMESSAGE_SHOWDIALOG = 0x0e000000
+} INSTALLMESSAGE;
+
+typedef enum tagREINSTALLMODE
+{
+ REINSTALLMODE_REPAIR = 0x00000001,
+ REINSTALLMODE_FILEMISSING = 0x00000002,
+ REINSTALLMODE_FILEOLDERVERSION = 0x00000004,
+ REINSTALLMODE_FILEEQUALVERSION = 0x00000008,
+ REINSTALLMODE_FILEEXACT = 0x00000010,
+ REINSTALLMODE_FILEVERIFY = 0x00000020,
+ REINSTALLMODE_FILEREPLACE = 0x00000040,
+ REINSTALLMODE_MACHINEDATA = 0x00000080,
+ REINSTALLMODE_USERDATA = 0x00000100,
+ REINSTALLMODE_SHORTCUT = 0x00000200,
+ REINSTALLMODE_PACKAGE = 0x00000400
+} REINSTALLMODE;
+
+typedef enum tagINSTALLLOGMODE
+{
+ INSTALLLOGMODE_FATALEXIT = (1 << (INSTALLMESSAGE_FATALEXIT >> 24)),
+ INSTALLLOGMODE_ERROR = (1 << (INSTALLMESSAGE_ERROR >> 24)),
+ INSTALLLOGMODE_WARNING = (1 << (INSTALLMESSAGE_WARNING >> 24)),
+ INSTALLLOGMODE_USER = (1 << (INSTALLMESSAGE_USER >> 24)),
+ INSTALLLOGMODE_INFO = (1 << (INSTALLMESSAGE_INFO >> 24)),
+ INSTALLLOGMODE_RESOLVESOURCE = (1 << (INSTALLMESSAGE_RESOLVESOURCE >> 24)),
+ INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)),
+ INSTALLLOGMODE_ACTIONSTART = (1 << (INSTALLMESSAGE_ACTIONSTART >> 24)),
+ INSTALLLOGMODE_ACTIONDATA = (1 << (INSTALLMESSAGE_ACTIONDATA >> 24)),
+ INSTALLLOGMODE_COMMONDATA = (1 << (INSTALLMESSAGE_COMMONDATA >> 24)),
+ INSTALLLOGMODE_PROPERTYDUMP = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),
+ INSTALLLOGMODE_VERBOSE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
+ INSTALLLOGMODE_EXTRADEBUG = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),
+ INSTALLLOGMODE_PROGRESS = (1 << (INSTALLMESSAGE_PROGRESS >> 24)),
+ INSTALLLOGMODE_INITIALIZE = (1 << (INSTALLMESSAGE_INITIALIZE >> 24)),
+ INSTALLLOGMODE_TERMINATE = (1 << (INSTALLMESSAGE_TERMINATE >> 24)),
+ INSTALLLOGMODE_SHOWDIALOG = (1 << (INSTALLMESSAGE_SHOWDIALOG >> 24))
+} INSTALLLOGMODE;
+
+typedef enum tagINSTALLLOGATTRIBUTES
+{
+ INSTALLLOGATTRIBUTES_APPEND = 0x00000001,
+ INSTALLLOGATTRIBUTES_FLUSHEACHLINE = 0x00000002
+} INSTALLLOGATTRIBUTES;
+
+typedef enum tagINSTALLMODE
+{
+ INSTALLMODE_NODETECTION_ANY = -4,
+ INSTALLMODE_NOSOURCERESOLUTION = -3,
+ INSTALLMODE_NODETECTION = -2,
+ INSTALLMODE_EXISTING = -1,
+ INSTALLMODE_DEFAULT = 0
+} INSTALLMODE;
+
+typedef enum tagADVERTISEFLAGS
+{
+ ADVERTISEFLAGS_MACHINEASSIGN = 0,
+ ADVERTISEFLAGS_USERASSIGN = 1
+} ADVERTISEFLAGS;
+
+typedef enum tagSCRIPTFLAGS
+{
+ SCRIPTFLAGS_CACHEINFO = 1,
+ SCRIPTFLAGS_SHORTCUTS = 4,
+ SCRIPTFLAGS_MACHINEASSIGN = 8,
+ SCRIPTFLAGS_REGDATA_APPINFO = 0x10,
+ SCRIPTFLAGS_REGDATA_CNFGINFO = 0x20,
+ SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x40,
+ SCRIPTFLAGS_REGDATA_CLASSINFO = 0x80,
+ SCRIPTFLAGS_REGDATA_EXTENSIONINFO = 0x100,
+} SCRIPTFLAGS;
+
+typedef enum tagINSTALLTYPE
+{
+ INSTALLTYPE_DEFAULT = 0,
+ INSTALLTYPE_NETWORK_IMAGE = 1,
+ INSTALLTYPE_SINGLE_INSTANCE = 2,
+} INSTALLTYPE;
+
+typedef enum tagMSIINSTALLCONTEXT
+{
+ MSIINSTALLCONTEXT_FIRSTVISIBLE = 0,
+ MSIINSTALLCONTEXT_NONE = 0,
+ MSIINSTALLCONTEXT_USERMANAGED = 1,
+ MSIINSTALLCONTEXT_USERUNMANAGED = 2,
+ MSIINSTALLCONTEXT_MACHINE = 4,
+ MSIINSTALLCONTEXT_ALL = (MSIINSTALLCONTEXT_USERMANAGED | MSIINSTALLCONTEXT_USERUNMANAGED | MSIINSTALLCONTEXT_MACHINE),
+ MSIINSTALLCONTEXT_ALLUSERMANAGED= 8,
+} MSIINSTALLCONTEXT;
+
+typedef enum tagMSISOURCETYPE
+{
+ MSISOURCETYPE_UNKNOWN = __MSABI_LONG(0x00000000),
+ MSISOURCETYPE_NETWORK = __MSABI_LONG(0x00000001),
+ MSISOURCETYPE_URL = __MSABI_LONG(0x00000002),
+ MSISOURCETYPE_MEDIA = __MSABI_LONG(0x00000004)
+} MSISOURCETYPE;
+
+typedef enum tagMSICODE
+{
+ MSICODE_PRODUCT = __MSABI_LONG(0x00000000),
+ MSICODE_PATCH = __MSABI_LONG(0x40000000)
+} MSICODE;
+
+typedef enum tagINSTALLFEATUREATTRIBUTE
+{
+ INSTALLFEATUREATTRIBUTE_FAVORLOCAL = 1 << 0,
+ INSTALLFEATUREATTRIBUTE_FAVORSOURCE = 1 << 1,
+ INSTALLFEATUREATTRIBUTE_FOLLOWPARENT = 1 << 2,
+ INSTALLFEATUREATTRIBUTE_FAVORADVERTISE = 1 << 3,
+ INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE = 1 << 4,
+ INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5
+} INSTALLFEATUREATTRIBUTE;
+
+typedef struct _MSIFILEHASHINFO {
+ ULONG dwFileHashInfoSize;
+ ULONG dwData[4];
+} MSIFILEHASHINFO, *PMSIFILEHASHINFO;
+
+typedef enum tagMSIPATCHDATATYPE
+{
+ MSIPATCH_DATATYPE_PATCHFILE = 0,
+ MSIPATCH_DATATYPE_XMLPATH = 1,
+ MSIPATCH_DATATYPE_XMLBLOB = 2,
+} MSIPATCHDATATYPE, *PMSIPATCHDATATYPE;
+
+typedef struct tagMSIPATCHSEQUENCEINFOA
+{
+ LPCSTR szPatchData;
+ MSIPATCHDATATYPE ePatchDataType;
+ DWORD dwOrder;
+ UINT uStatus;
+} MSIPATCHSEQUENCEINFOA, *PMSIPATCHSEQUENCEINFOA;
+
+typedef struct tagMSIPATCHSEQUENCEINFOW
+{
+ LPCWSTR szPatchData;
+ MSIPATCHDATATYPE ePatchDataType;
+ DWORD dwOrder;
+ UINT uStatus;
+} MSIPATCHSEQUENCEINFOW, *PMSIPATCHSEQUENCEINFOW;
+
+#define MAX_FEATURE_CHARS 38
+
+#define ERROR_PATCH_TARGET_NOT_FOUND 1642
+
+/* Strings defined in msi.h */
+/* Advertised Information */
+
+#define INSTALLPROPERTY_PACKAGENAMEA "PackageName"
+static const WCHAR INSTALLPROPERTY_PACKAGENAMEW[] = {'P','a','c','k','a','g','e','N','a','m','e',0};
+#define INSTALLPROPERTY_PACKAGENAME WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGENAME)
+
+#define INSTALLPROPERTY_TRANSFORMSA "Transforms"
+static const WCHAR INSTALLPROPERTY_TRANSFORMSW[] = {'T','r','a','n','s','f','o','r','m','s',0};
+#define INSTALLPROPERTY_TRANSFORMS WINELIB_NAME_AW(INSTALLPROPERTY_TRANSFORMS)
+
+#define INSTALLPROPERTY_LANGUAGEA "Language"
+static const WCHAR INSTALLPROPERTY_LANGUAGEW[] = {'L','a','n','g','u','a','g','e',0};
+#define INSTALLPROPERTY_LANGUAGE WINELIB_NAME_AW(INSTALLPROPERTY_LANGUAGE)
+
+#define INSTALLPROPERTY_PRODUCTNAMEA "ProductName"
+static const WCHAR INSTALLPROPERTY_PRODUCTNAMEW[] = {'P','r','o','d','u','c','t','N','a','m','e',0};
+#define INSTALLPROPERTY_PRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTNAME)
+
+#define INSTALLPROPERTY_ASSIGNMENTTYPEA "AssignmentType"
+static const WCHAR INSTALLPROPERTY_ASSIGNMENTTYPEW[] = {'A','s','s','i','g','n','m','e','n','t','T','y','p','e',0};
+#define INSTALLPROPERTY_ASSIGNMENTTYPE WINELIB_NAME_AW(INSTALLPROPERTY_ASSIGNMENTTYPE)
+
+#define INSTALLPROPERTY_PACKAGECODEA "PackageCode"
+static const WCHAR INSTALLPROPERTY_PACKAGECODEW[] = {'P','a','c','k','a','g','e','C','o','d','e',0};
+#define INSTALLPROPERTY_PACKAGECODE WINELIB_NAME_AW(INSTALLPROPERTY_PACKAGECODE)
+
+#define INSTALLPROPERTY_VERSIONA "Version"
+static const WCHAR INSTALLPROPERTY_VERSIONW[]= {'V','e','r','s','i','o','n',0};
+#define INSTALLPROPERTY_VERSION WINELIB_NAME_AW(INSTALLPROPERTY_VERSION)
+
+/* MSI version 1.1 and above */
+
+#define INSTALLPROPERTY_PRODUCTICONA "ProductIcon"
+static const WCHAR INSTALLPROPERTY_PRODUCTICONW[] = {'P','r','o','d','u','c','t','I','c','o','n',0};
+#define INSTALLPROPERTY_PRODUCTICON WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTICON)
+
+/* MSI version 1.5 and above */
+#define INSTALLPROPERTY_INSTANCETYPEA "InstanceType"
+static const WCHAR INSTALLPROPERTY_INSTANCETYPEW[] = {'I','n','s','t','a','n','c','e','T','y','p','e',0};
+#define INSTALLPROPERTY_INSTANCETYPE WINELIB_NAME_AW(INSTALLPROPERTY_INSTANCETYPE)
+
+/* MSI version 3 and above */
+#define INSTALLPROPERTY_AUTHORIZED_LUA_APPA "AuthorizedLUAApp"
+static const WCHAR INSTALLPROPERTY_AUTHORIZED_LUA_APPW[] = {'A','u','t','h','o','r','i','z','e','d','L','U','A','A','p','p',0};
+#define INSTALLPROPERTY_AUTHORIZED_LUA_APP WINELIB_NAME_AW(INSTALLPROPERTY_AUTHORIZED_LUA_APP)
+
+
+/* Installed Information */
+#define INSTALLPROPERTY_INSTALLEDPRODUCTNAMEA "InstalledProductName"
+static const WCHAR INSTALLPROPERTY_INSTALLEDPRODUCTNAMEW[] = {'I','n','s','t','a','l','l','e','d','P','r','o','d','u','c','t','N','a','m','e',0};
+#define INSTALLPROPERTY_INSTALLEDPRODUCTNAME WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLEDPRODUCTNAME)
+
+#define INSTALLPROPERTY_VERSIONSTRINGA "VersionString"
+static const WCHAR INSTALLPROPERTY_VERSIONSTRINGW[] = {'V','e','r','s','i','o','n','S','t','r','i','n','g',0};
+#define INSTALLPROPERTY_VERSIONSTRING WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONSTRING)
+
+#define INSTALLPROPERTY_HELPLINKA "HelpLink"
+static const WCHAR INSTALLPROPERTY_HELPLINKW[] = {'H','e','l','p','L','i','n','k',0};
+#define INSTALLPROPERTY_HELPLINK WINELIB_NAME_AW(INSTALLPROPERTY_HELPLINK)
+
+#define INSTALLPROPERTY_HELPTELEPHONEA "HelpTelephone"
+static const WCHAR INSTALLPROPERTY_HELPTELEPHONEW[] = {'H','e','l','p','T','e','l','e','p','h','o','n','e',0};
+#define INSTALLPROPERTY_HELPTELEPHONE WINELIB_NAME_AW(INSTALLPROPERTY_HELPTELEPHONE)
+
+#define INSTALLPROPERTY_INSTALLLOCATIONA "InstallLocation"
+static const WCHAR INSTALLPROPERTY_INSTALLLOCATIONW[] = {'I','n','s','t','a','l','l','L','o','c','a','t','i','o','n',0};
+#define INSTALLPROPERTY_INSTALLLOCATION WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLLOCATION)
+
+#define INSTALLPROPERTY_INSTALLSOURCEA "InstallSource"
+static const WCHAR INSTALLPROPERTY_INSTALLSOURCEW[] = {'I','n','s','t','a','l','l','S','o','u','r','c','e',0};
+#define INSTALLPROPERTY_INSTALLSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLSOURCE)
+
+#define INSTALLPROPERTY_INSTALLDATEA "InstallDate"
+static const WCHAR INSTALLPROPERTY_INSTALLDATEW[] = {'I','n','s','t','a','l','l','D','a','t','e',0};
+#define INSTALLPROPERTY_INSTALLDATE WINELIB_NAME_AW(INSTALLPROPERTY_INSTALLDATE)
+
+#define INSTALLPROPERTY_PUBLISHERA "Publisher"
+static const WCHAR INSTALLPROPERTY_PUBLISHERW[] ={'P','u','b','l','i','s','h','e','r',0};
+#define INSTALLPROPERTY_PUBLISHER WINELIB_NAME_AW(INSTALLPROPERTY_PUBLISHER)
+
+#define INSTALLPROPERTY_LOCALPACKAGEA "LocalPackage"
+static const WCHAR INSTALLPROPERTY_LOCALPACKAGEW[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0};
+#define INSTALLPROPERTY_LOCALPACKAGE WINELIB_NAME_AW(INSTALLPROPERTY_LOCALPACKAGE)
+
+#define INSTALLPROPERTY_URLINFOABOUTA "URLInfoAbout"
+static const WCHAR INSTALLPROPERTY_URLINFOABOUTW[] = {'U','R','L','I','n','f','o','A','b','o','u','t',0};
+#define INSTALLPROPERTY_URLINFOABOUT WINELIB_NAME_AW(INSTALLPROPERTY_URLINFOABOUT)
+
+#define INSTALLPROPERTY_URLUPDATEINFOA "URLUpdateInfo"
+static const WCHAR INSTALLPROPERTY_URLUPDATEINFOW[] = {'U','R','L','U','p','d','a','t','e','I','n','f','o',0};
+#define INSTALLPROPERTY_URLUPDATEINFO WINELIB_NAME_AW(INSTALLPROPERTY_URLUPDATEINFO)
+
+#define INSTALLPROPERTY_VERSIONMINORA "VersionMinor"
+static const WCHAR INSTALLPROPERTY_VERSIONMINORW[] = {'V','e','r','s','i','o','n','M','i','n','o','r',0};
+#define INSTALLPROPERTY_VERSIONMINOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMINOR)
+
+#define INSTALLPROPERTY_VERSIONMAJORA "VersionMajor"
+static const WCHAR INSTALLPROPERTY_VERSIONMAJORW[] = {'V','e','r','s','i','o','n','M','a','j','o','r',0};
+#define INSTALLPROPERTY_VERSIONMAJOR WINELIB_NAME_AW(INSTALLPROPERTY_VERSIONMAJOR)
+
+#define INSTALLPROPERTY_PRODUCTIDA "ProductID"
+static const WCHAR INSTALLPROPERTY_PRODUCTIDW[] = {'P','r','o','d','u','c','t','I','D',0};
+#define INSTALLPROPERTY_PRODUCTID WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTID)
+
+#define INSTALLPROPERTY_REGCOMPANYA "RegCompany"
+static const WCHAR INSTALLPROPERTY_REGCOMPANYW[] = {'R','e','g','C','o','m','p','a','n','y',0};
+#define INSTALLPROPERTY_REGCOMPANY WINELIB_NAME_AW(INSTALLPROPERTY_REGCOMPANY)
+
+#define INSTALLPROPERTY_REGOWNERA "RegOwner"
+static const WCHAR INSTALLPROPERTY_REGOWNERW[] = {'R','e','g','O','w','n','e','r',0};
+#define INSTALLPROPERTY_REGOWNER WINELIB_NAME_AW(INSTALLPROPERTY_REGOWNER)
+
+/* MSI Version 3.0 and greater */
+#define INSTALLPROPERTY_UNINSTALLABLEA "Uninstallable"
+static const WCHAR INSTALLPROPERTY_UNINSTALLABLEW[] = {'U','n','i','n','s','t','a','l','l','a','b','l','e',0};
+#define INSTALLPROPERTY_UNINSTALLABLE WINELIB_NAME_AW(INSTALLPROPERTY_UNINSTALLABLE)
+
+#define INSTALLPROPERTY_PRODUCTSTATEA "State"
+static const WCHAR INSTALLPROPERTY_PRODUCTSTATEW[] = {'S','t','a','t','e',0};
+#define INSTALLPROPERTY_PRODUCTSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PRODUCTSTATE)
+
+#define INSTALLPROPERTY_PATCHSTATEA "State"
+static const WCHAR INSTALLPROPERTY_PATCHSTATEW[] ={'S','t','a','t','e',0};
+#define INSTALLPROPERTY_PATCHSTATE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHSTATE)
+
+#define INSTALLPROPERTY_PATCHTYPEA "PatchType"
+static const WCHAR INSTALLPROPERTY_PATCHTYPEW[] = {'P','a','t','c','h','T','y','p','e',0};
+#define INSTALLPROPERTY_PATCHTYPE WINELIB_NAME_AW(INSTALLPROPERTY_PATCHTYPE)
+
+#define INSTALLPROPERTY_LUAENABLEDA "LUAEnabled"
+static const WCHAR INSTALLPROPERTY_LUAENABLEDW[] = {'L','U','A','E','n','a','b','l','e','d',0};
+#define INSTALLPROPERTY_LUAENABLED WINELIB_NAME_AW(INSTALLPROPERTY_LUAENABLED)
+
+#define INSTALLPROPERTY_DISPLAYNAMEA "DisplayName"
+static const WCHAR INSTALLPROPERTY_DISPLAYNAMEW[] = {'D','i','s','p','l','a','y','N','a','m','e',0};
+#define INSTALLPROPERTY_DISPLAYNAME WINELIB_NAME_AW(INSTALLPROPERTY_DISPLAYNAME)
+
+#define INSTALLPROPERTY_MOREINFOURLA "MoreInfoURL"
+static const WCHAR INSTALLPROPERTY_MOREINFOURLW[] = {'M','o','r','e','I','n','f','o','U','R','L',0};
+#define INSTALLPROPERTY_MOREINFOURL WINELIB_NAME_AW(INSTALLPROPERTY_MOREINFOURL)
+
+/* Source List Info */
+#define INSTALLPROPERTY_LASTUSEDSOURCEA "LastUsedSource"
+static const WCHAR INSTALLPROPERTY_LASTUSEDSOURCEW[] = {'L','a','s','t','U','s','e','d','S','o','u','r','c','e',0};
+#define INSTALLPROPERTY_LASTUSEDSOURCE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDSOURCE)
+
+#define INSTALLPROPERTY_LASTUSEDTYPEA "LastUsedType"
+static const WCHAR INSTALLPROPERTY_LASTUSEDTYPEW[] = {'L','a','s','t','U','s','e','d','T','y','p','e',0};
+#define INSTALLPROPERTY_LASTUSEDTYPE WINELIB_NAME_AW(INSTALLPROPERTY_LASTUSEDTYPE)
+
+#define INSTALLPROPERTY_MEDIAPACKAGEPATHA "MediaPackagePath"
+static const WCHAR INSTALLPROPERTY_MEDIAPACKAGEPATHW[] = {'M','e','d','i','a','P','a','c','k','a','g','e','P','a','t','h',0};
+#define INSTALLPROPERTY_MEDIAPACKAGEPATH WINELIB_NAME_AW(INSTALLPROPERTY_MEDIAPACKAGEPATH)
+
+#define INSTALLPROPERTY_DISKPROMPTA "DiskPrompt"
+static const WCHAR INSTALLPROPERTY_DISKPROMPTW[] = {'D','i','s','k','P','r','o','m','p','t',0};
+#define INSTALLPROPERTY_DISKPROMPT WINELIB_NAME_AW(INSTALLPROPERTY_DISKPROMPT)
+
+typedef INT (CALLBACK *INSTALLUI_HANDLERA)(LPVOID, UINT, LPCSTR);
+typedef INT (CALLBACK *INSTALLUI_HANDLERW)(LPVOID, UINT, LPCWSTR);
+typedef INT (CALLBACK *INSTALLUI_HANDLER_RECORD)(LPVOID, UINT, MSIHANDLE);
+typedef INSTALLUI_HANDLER_RECORD* PINSTALLUI_HANDLER_RECORD;
+
+UINT WINAPI MsiAdvertiseProductA(LPCSTR, LPCSTR, LPCSTR, LANGID);
+UINT WINAPI MsiAdvertiseProductW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID);
+#define MsiAdvertiseProduct WINELIB_NAME_AW(MsiAdvertiseProduct)
+
+UINT WINAPI MsiAdvertiseProductExA(LPCSTR, LPCSTR, LPCSTR, LANGID, DWORD, DWORD);
+UINT WINAPI MsiAdvertiseProductExW(LPCWSTR, LPCWSTR, LPCWSTR, LANGID, DWORD, DWORD);
+#define MsiAdvertiseProductEx WINELIB_NAME_AW(MsiAdvertiseProductEx)
+
+UINT WINAPI MsiInstallProductA(LPCSTR, LPCSTR);
+UINT WINAPI MsiInstallProductW(LPCWSTR, LPCWSTR);
+#define MsiInstallProduct WINELIB_NAME_AW(MsiInstallProduct)
+
+UINT WINAPI MsiReinstallProductA(LPCSTR, DWORD);
+UINT WINAPI MsiReinstallProductW(LPCWSTR, DWORD);
+#define MsiReinstallProduct WINELIB_NAME_AW(MsiReinstallProduct)
+
+UINT WINAPI MsiApplyPatchA(LPCSTR, LPCSTR, INSTALLTYPE, LPCSTR);
+UINT WINAPI MsiApplyPatchW(LPCWSTR, LPCWSTR, INSTALLTYPE, LPCWSTR);
+#define MsiApplyPatch WINELIB_NAME_AW(MsiApplyPatch)
+
+UINT WINAPI MsiEnumComponentCostsA(MSIHANDLE, LPCSTR, DWORD, INSTALLSTATE, LPSTR, LPDWORD, LPINT, LPINT);
+UINT WINAPI MsiEnumComponentCostsW(MSIHANDLE, LPCWSTR, DWORD, INSTALLSTATE, LPWSTR, LPDWORD, LPINT, LPINT);
+#define MsiEnumComponentCosts WINELIB_NAME_AW(MsiEnumComponentCosts)
+
+UINT WINAPI MsiEnumProductsA(DWORD, LPSTR);
+UINT WINAPI MsiEnumProductsW(DWORD, LPWSTR);
+#define MsiEnumProducts WINELIB_NAME_AW(MsiEnumProducts)
+
+UINT WINAPI MsiEnumProductsExA(LPCSTR, LPCSTR, DWORD, DWORD, CHAR[39], MSIINSTALLCONTEXT*, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumProductsExW(LPCWSTR, LPCWSTR, DWORD, DWORD, WCHAR[39], MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);
+#define MsiEnumProductsEx WINELIB_NAME_AW(MsiEnumProductsEx)
+
+UINT WINAPI MsiEnumFeaturesA(LPCSTR, DWORD, LPSTR, LPSTR);
+UINT WINAPI MsiEnumFeaturesW(LPCWSTR, DWORD, LPWSTR, LPWSTR);
+#define MsiEnumFeatures WINELIB_NAME_AW(MsiEnumFeatures)
+
+UINT WINAPI MsiEnumComponentsA(DWORD, LPSTR);
+UINT WINAPI MsiEnumComponentsW(DWORD, LPWSTR);
+#define MsiEnumComponents WINELIB_NAME_AW(MsiEnumComponents)
+
+UINT WINAPI MsiEnumComponentsExA(LPCSTR, DWORD, DWORD, CHAR[39],
+ MSIINSTALLCONTEXT *, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumComponentsExW(LPCWSTR, DWORD, DWORD, WCHAR[39],
+ MSIINSTALLCONTEXT *, LPWSTR, LPDWORD);
+#define MsiEnumComponentsEx WINELIB_NAME_AW(MsiEnumComponentsEx)
+
+UINT WINAPI MsiEnumClientsA(LPCSTR, DWORD, LPSTR);
+UINT WINAPI MsiEnumClientsW(LPCWSTR, DWORD, LPWSTR);
+#define MsiEnumClients WINELIB_NAME_AW(MsiEnumClients)
+
+UINT WINAPI MsiOpenPackageA(LPCSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenPackageW(LPCWSTR, MSIHANDLE*);
+#define MsiOpenPackage WINELIB_NAME_AW(MsiOpenPackage)
+
+UINT WINAPI MsiOpenPackageExA(LPCSTR, DWORD, MSIHANDLE*);
+UINT WINAPI MsiOpenPackageExW(LPCWSTR, DWORD, MSIHANDLE*);
+#define MsiOpenPackageEx WINELIB_NAME_AW(MsiOpenPackageEx)
+
+UINT WINAPI MsiOpenProductA(LPCSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenProductW(LPCWSTR, MSIHANDLE*);
+#define MsiOpenProduct WINELIB_NAME_AW(MsiOpenProduct)
+
+UINT WINAPI MsiGetProductPropertyA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
+UINT WINAPI MsiGetProductPropertyW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define MsiGetProductProperty WINELIB_NAME_AW(MsiGetProductProperty)
+
+UINT WINAPI MsiVerifyPackageA(LPCSTR);
+UINT WINAPI MsiVerifyPackageW(LPCWSTR);
+#define MsiVerifyPackage WINELIB_NAME_AW(MsiVerifyPackage)
+
+UINT WINAPI MsiQueryComponentStateA(LPCSTR,LPCSTR,MSIINSTALLCONTEXT,LPCSTR,INSTALLSTATE*);
+UINT WINAPI MsiQueryComponentStateW(LPCWSTR,LPCWSTR,MSIINSTALLCONTEXT,LPCWSTR,INSTALLSTATE*);
+#define MsiQueryComponentState WINELIB_NAME_AW(MsiQueryComponentState)
+
+INSTALLSTATE WINAPI MsiQueryProductStateA(LPCSTR);
+INSTALLSTATE WINAPI MsiQueryProductStateW(LPCWSTR);
+#define MsiQueryProductState WINELIB_NAME_AW(MsiQueryProductState)
+
+UINT WINAPI MsiConfigureProductA(LPCSTR, int, INSTALLSTATE);
+UINT WINAPI MsiConfigureProductW(LPCWSTR, int, INSTALLSTATE);
+#define MsiConfigureProduct WINELIB_NAME_AW(MsiConfigureProduct);
+
+UINT WINAPI MsiConfigureProductExA(LPCSTR, int, INSTALLSTATE, LPCSTR);
+UINT WINAPI MsiConfigureProductExW(LPCWSTR, int, INSTALLSTATE, LPCWSTR);
+#define MsiConfigureProductEx WINELIB_NAME_AW(MsiConfigureProductEx);
+
+UINT WINAPI MsiConfigureFeatureA(LPCSTR, LPCSTR, INSTALLSTATE);
+UINT WINAPI MsiConfigureFeatureW(LPCWSTR, LPCWSTR, INSTALLSTATE);
+#define MsiConfigureFeature WINELIB_NAME_AW(MsiConfigureFeature);
+
+UINT WINAPI MsiGetProductCodeA(LPCSTR, LPSTR);
+UINT WINAPI MsiGetProductCodeW(LPCWSTR, LPWSTR);
+#define MsiGetProductCode WINELIB_NAME_AW(MsiGetProductCode)
+
+UINT WINAPI MsiGetProductInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetProductInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetProductInfo WINELIB_NAME_AW(MsiGetProductInfo)
+
+UINT WINAPI MsiGetProductInfoExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetProductInfoExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetProductInfoEx WINELIB_NAME_AW(MsiGetProductInfoEx)
+
+UINT WINAPI MsiGetPatchInfoExA(LPCSTR, LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetPatchInfoExW(LPCWSTR, LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetPatchInfoEx WINELIB_NAME_AW(MsiGetPatchInfoEx)
+
+UINT WINAPI MsiGetPatchInfoA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetPatchInfoW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetPatchInfo WINELIB_NAME_AW(MsiGetPatchInfo)
+
+UINT WINAPI MsiEnableLogA(DWORD, LPCSTR, DWORD);
+UINT WINAPI MsiEnableLogW(DWORD, LPCWSTR, DWORD);
+#define MsiEnableLog WINELIB_NAME_AW(MsiEnableLog)
+
+INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA, DWORD, LPVOID);
+INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW, DWORD, LPVOID);
+#define MsiSetExternalUI WINELIB_NAME_AW(MsiSetExternalUI)
+
+INSTALLSTATE WINAPI MsiGetComponentPathA(LPCSTR, LPCSTR, LPSTR, LPDWORD);
+INSTALLSTATE WINAPI MsiGetComponentPathW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetComponentPath WINELIB_NAME_AW(MsiGetComponentPath)
+
+INSTALLSTATE WINAPI MsiQueryFeatureStateA(LPCSTR, LPCSTR);
+INSTALLSTATE WINAPI MsiQueryFeatureStateW(LPCWSTR, LPCWSTR);
+#define MsiQueryFeatureState WINELIB_NAME_AW(MsiQueryFeatureState)
+
+UINT WINAPI MsiQueryFeatureStateExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, LPCSTR, INSTALLSTATE*);
+UINT WINAPI MsiQueryFeatureStateExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, LPCWSTR, INSTALLSTATE*);
+#define MsiQueryFeatureStateEx WINELIB_NAME_AW(MsiQueryFeatureStateEx)
+
+UINT WINAPI MsiGetFeatureInfoA(MSIHANDLE, LPCSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiGetFeatureInfoW(MSIHANDLE, LPCWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiGetFeatureInfo WINELIB_NAME_AW(MsiGetFeatureInfo)
+
+UINT WINAPI MsiGetFeatureUsageA(LPCSTR, LPCSTR, LPDWORD, LPWORD);
+UINT WINAPI MsiGetFeatureUsageW(LPCWSTR, LPCWSTR, LPDWORD, LPWORD);
+#define MsiGetFeatureUsage WINELIB_NAME_AW(MsiGetFeatureUsage)
+
+UINT WINAPI MsiEnumRelatedProductsA(LPCSTR, DWORD, DWORD, LPSTR);
+UINT WINAPI MsiEnumRelatedProductsW(LPCWSTR, DWORD, DWORD, LPWSTR);
+#define MsiEnumRelatedProducts WINELIB_NAME_AW(MsiEnumRelatedProducts)
+
+UINT WINAPI MsiProvideAssemblyA(LPCSTR, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiProvideAssemblyW(LPCWSTR, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);
+#define MsiProvideAssembly WINELIB_NAME_AW(MsiProvideAssembly)
+
+UINT WINAPI MsiEnumComponentQualifiersA(LPCSTR, DWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumComponentQualifiersW(LPCWSTR, DWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiEnumComponentQualifiers WINELIB_NAME_AW(MsiEnumComponentQualifiers)
+
+UINT WINAPI MsiGetFileVersionA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiGetFileVersionW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiGetFileVersion WINELIB_NAME_AW(MsiGetFileVersion)
+
+UINT WINAPI MsiMessageBoxA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);
+UINT WINAPI MsiMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);
+#define MsiMessageBox WINELIB_NAME_AW(MsiMessageBox)
+
+UINT WINAPI MsiProvideQualifiedComponentExA(LPCSTR, LPCSTR, DWORD, LPCSTR, DWORD, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR, DWORD, DWORD, LPWSTR, LPDWORD);
+#define MsiProvideQualifiedComponentEx WINELIB_NAME_AW(MsiProvideQualifiedComponentEx)
+
+UINT WINAPI MsiProvideQualifiedComponentA(LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiProvideQualifiedComponentW(LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD);
+#define MsiProvideQualifiedComponent WINELIB_NAME_AW(MsiProvideQualifiedComponent)
+
+USERINFOSTATE WINAPI MsiGetUserInfoA(LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, LPSTR, LPDWORD);
+USERINFOSTATE WINAPI MsiGetUserInfoW(LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiGetUserInfo WINELIB_NAME_AW(MsiGetUserInfo)
+
+UINT WINAPI MsiCollectUserInfoA(LPCSTR);
+UINT WINAPI MsiCollectUserInfoW(LPCWSTR);
+#define MsiCollectUserInfo WINELIB_NAME_AW(MsiCollectUserInfo)
+
+UINT WINAPI MsiReinstallFeatureA(LPCSTR, LPCSTR, DWORD);
+UINT WINAPI MsiReinstallFeatureW(LPCWSTR, LPCWSTR, DWORD);
+#define MsiReinstallFeature WINELIB_NAME_AW(MsiReinstallFeature)
+
+UINT WINAPI MsiGetShortcutTargetA(LPCSTR, LPSTR, LPSTR, LPSTR);
+UINT WINAPI MsiGetShortcutTargetW(LPCWSTR, LPWSTR, LPWSTR, LPWSTR);
+#define MsiGetShortcutTarget WINELIB_NAME_AW(MsiGetShortcutTarget)
+
+INSTALLSTATE WINAPI MsiUseFeatureW(LPCWSTR, LPCWSTR);
+INSTALLSTATE WINAPI MsiUseFeatureA(LPCSTR, LPCSTR);
+#define MsiUseFeature WINELIB_NAME_AW(MsiUseFeature)
+
+INSTALLSTATE WINAPI MsiUseFeatureExW(LPCWSTR, LPCWSTR, DWORD, DWORD);
+INSTALLSTATE WINAPI MsiUseFeatureExA(LPCSTR, LPCSTR, DWORD, DWORD);
+#define MsiUseFeatureEx WINELIB_NAME_AW(MsiUseFeatureEx)
+
+HRESULT WINAPI MsiGetFileSignatureInformationA(LPCSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);
+HRESULT WINAPI MsiGetFileSignatureInformationW(LPCWSTR, DWORD, PCCERT_CONTEXT*, LPBYTE, LPDWORD);
+#define MsiGetFileSignatureInformation WINELIB_NAME_AW(MsiGetFileSignatureInformation)
+
+INSTALLSTATE WINAPI MsiLocateComponentA(LPCSTR, LPSTR, LPDWORD);
+INSTALLSTATE WINAPI MsiLocateComponentW(LPCWSTR, LPWSTR, LPDWORD);
+#define MsiLocateComponent WINELIB_NAME_AW(MsiLocateComponent)
+
+UINT WINAPI MsiSourceListAddSourceA(LPCSTR, LPCSTR, DWORD, LPCSTR);
+UINT WINAPI MsiSourceListAddSourceW(LPCWSTR, LPCWSTR, DWORD, LPCWSTR);
+#define MsiSourceListAddSource WINELIB_NAME_AW(MsiSourceListAddSource)
+
+UINT WINAPI MsiSourceListEnumMediaDisksA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,
+ LPSTR, LPDWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPDWORD,
+ LPWSTR, LPDWORD, LPWSTR, LPDWORD);
+#define MsiSourceListEnumMediaDisks WINELIB_NAME_AW(MsiSourceListEnumMediaDisks)
+
+UINT WINAPI MsiSourceListEnumSourcesA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPWSTR, LPDWORD);
+#define MsiSourceListEnumSources WINELIB_NAME_AW(MsiSourceListEnumSources)
+
+UINT WINAPI MsiSourceListClearSourceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR);
+UINT WINAPI MsiSourceListClearSourceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR);
+#define MsiSourceListClearSource WINELIB_NAME_AW(MsiSourceListClearSource)
+
+UINT WINAPI MsiSourceListClearAllA(LPCSTR, LPCSTR, DWORD);
+UINT WINAPI MsiSourceListClearAllW(LPCWSTR, LPCWSTR, DWORD);
+#define MsiSourceListClearAll WINELIB_NAME_AW(MsiSourceListClearAll)
+
+UINT WINAPI MsiSourceListGetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiSourceListGetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiSourceListGetInfo WINELIB_NAME_AW(MsiSourceListGetInfo)
+
+UINT WINAPI MsiSourceListSetInfoA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, LPCSTR);
+UINT WINAPI MsiSourceListSetInfoW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, LPCWSTR);
+#define MsiSourceListSetInfo WINELIB_NAME_AW(MsiSourceListSetInfo)
+
+UINT WINAPI MsiSourceListAddSourceExA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, LPCSTR, DWORD);
+UINT WINAPI MsiSourceListAddSourceExW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, LPCWSTR, DWORD);
+#define MsiSourceListAddSourceEx WINELIB_NAME_AW(MsiSourceListAddSourceEx)
+
+UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR);
+UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCWSTR, LPCWSTR);
+#define MsiSourceListAddMediaDisk WINELIB_NAME_AW(MsiSourceListAddMediaDisk)
+
+UINT WINAPI MsiEnumPatchesA(LPCSTR, DWORD, LPSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumPatchesW(LPCWSTR, DWORD, LPWSTR, LPWSTR, LPDWORD);
+#define MsiEnumPatches WINELIB_NAME_AW(MsiEnumPatches)
+
+UINT WINAPI MsiEnumPatchesExA(LPCSTR, LPCSTR, DWORD, DWORD, DWORD, LPSTR, LPSTR,
+ MSIINSTALLCONTEXT*, LPSTR, LPDWORD);
+UINT WINAPI MsiEnumPatchesExW(LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, LPWSTR, LPWSTR,
+ MSIINSTALLCONTEXT*, LPWSTR, LPDWORD);
+#define MsiEnumPatchesEx WINELIB_NAME_AW(MsiEnumPatchesEx)
+
+UINT WINAPI MsiGetFileHashA(LPCSTR, DWORD, PMSIFILEHASHINFO);
+UINT WINAPI MsiGetFileHashW(LPCWSTR, DWORD, PMSIFILEHASHINFO);
+#define MsiGetFileHash WINELIB_NAME_AW(MsiGetFileHash)
+
+UINT WINAPI MsiAdvertiseScriptA(LPCSTR, DWORD, PHKEY, BOOL);
+UINT WINAPI MsiAdvertiseScriptW(LPCWSTR, DWORD, PHKEY, BOOL);
+#define MsiAdvertiseScript WINELIB_NAME_AW(MsiAdvertiseScript)
+
+UINT WINAPI MsiIsProductElevatedA(LPCSTR, BOOL *);
+UINT WINAPI MsiIsProductElevatedW(LPCWSTR, BOOL *);
+#define MsiIsProductElevated WINELIB_NAME_AW(MsiIsProductElevated)
+
+UINT WINAPI MsiDatabaseMergeA(MSIHANDLE, MSIHANDLE, LPCSTR);
+UINT WINAPI MsiDatabaseMergeW(MSIHANDLE, MSIHANDLE, LPCWSTR);
+#define MsiDatabaseMerge WINELIB_NAME_AW(MsiDatabaseMerge)
+
+UINT WINAPI MsiInstallMissingComponentA(LPCSTR, LPCSTR, INSTALLSTATE);
+UINT WINAPI MsiInstallMissingComponentW(LPCWSTR, LPCWSTR, INSTALLSTATE);
+#define MsiInstallMissingComponent WINELIB_NAME_AW(MsiInstallMissingComponent)
+
+UINT WINAPI MsiDetermineApplicablePatchesA(LPCSTR, DWORD, PMSIPATCHSEQUENCEINFOA);
+UINT WINAPI MsiDetermineApplicablePatchesW(LPCWSTR, DWORD, PMSIPATCHSEQUENCEINFOW);
+#define MsiDetermineApplicablePatches WINELIB_NAME_AW(MsiDetermineApplicablePatches)
+
+UINT WINAPI MsiDeterminePatchSequenceA(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOA);
+UINT WINAPI MsiDeterminePatchSequenceW(LPCWSTR, LPCWSTR, MSIINSTALLCONTEXT, DWORD, PMSIPATCHSEQUENCEINFOW);
+#define MsiDeterminePatchSequence WINELIB_NAME_AW(MsiDeterminePatchSequence)
+
+UINT WINAPI MsiApplyMultiplePatchesA(LPCSTR, LPCSTR, LPCSTR);
+UINT WINAPI MsiApplyMultiplePatchesW(LPCWSTR, LPCWSTR, LPCWSTR);
+#define MsiApplyMultiplePatches WINELIB_NAME_AW(MsiApplyMultiplePatches)
+
+UINT WINAPI MsiBeginTransactionA(LPCSTR, DWORD, MSIHANDLE *, HANDLE *);
+UINT WINAPI MsiBeginTransactionW(LPCWSTR, DWORD, MSIHANDLE *, HANDLE *);
+#define MsiBeginTransaction WINELIB_NAME_AW(MsiBeginTransaction)
+
+UINT WINAPI MsiEndTransaction(DWORD);
+
+/* Non Unicode */
+UINT WINAPI MsiCloseHandle(MSIHANDLE);
+UINT WINAPI MsiCloseAllHandles(void);
+INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL, HWND*);
+UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD, DWORD, LPVOID, PINSTALLUI_HANDLER_RECORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MSI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h
new file mode 100644
index 00000000..2ab01376
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msidefs.h
@@ -0,0 +1,290 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSIDEFS_H
+#define __WINE_MSIDEFS_H
+
+enum msidbUpgradeAttributes {
+ msidbUpgradeAttributesMigrateFeatures = 0x0000001,
+ msidbUpgradeAttributesOnlyDetect = 0x00000002,
+ msidbUpgradeAttributesIgnoreRemoveFailure = 0x00000004,
+ msidbUpgradeAttributesVersionMinInclusive = 0x00000100,
+ msidbUpgradeAttributesVersionMaxInclusive = 0x00000200,
+ msidbUpgradeAttributesLanguagesExclusive = 0x00000400
+};
+
+enum msidbFileAttributes {
+ msidbFileAttributesReadOnly = 0x00000001,
+ msidbFileAttributesHidden = 0x00000002,
+ msidbFileAttributesSystem = 0x00000004,
+ msidbFileAttributesVital = 0x00000200,
+ msidbFileAttributesChecksum = 0x00000400,
+ msidbFileAttributesPatchAdded = 0x00001000,
+ msidbFileAttributesNoncompressed = 0x00002000,
+ msidbFileAttributesCompressed = 0x00004000
+};
+
+enum msidbPatchAttributes {
+ msidbPatchAttributesNonVital = 0x00000001
+};
+
+enum msidbDialogAttributes {
+ msidbDialogAttributesVisible = 0x00000001,
+ msidbDialogAttributesModal = 0x00000002,
+ msidbDialogAttributesMinimize = 0x00000004,
+ msidbDialogAttributesSysModal = 0x00000008,
+ msidbDialogAttributesKeepModeless = 0x00000010,
+ msidbDialogAttributesTrackDiskSpace = 0x00000020,
+ msidbDialogAttributesUseCustomPalette = 0x00000040,
+ msidbDialogAttributesRTLRO = 0x00000080,
+ msidbDialogAttributesRightAligned = 0x00000100,
+ msidbDialogAttributesLeftScroll = 0x00000200,
+ msidbDialogAttributesBidi = 0x00000380,
+ msidbDialogAttributesError = 0x00010000
+};
+
+enum msidbControlAttributes {
+ msidbControlAttributesVisible = 0x00000001,
+ msidbControlAttributesEnabled = 0x00000002,
+ msidbControlAttributesSunken = 0x00000004,
+ msidbControlAttributesIndirect = 0x00000008,
+ msidbControlAttributesInteger = 0x00000010,
+ msidbControlAttributesRTLRO = 0x00000020,
+ msidbControlAttributesRightAligned = 0x00000040,
+ msidbControlAttributesLeftScroll = 0x00000080,
+ msidbControlAttributesBiDi = 0x000000c0,
+
+ msidbControlAttributesTransparent = 0x00010000,
+ msidbControlAttributesNoPrefix = 0x00020000,
+ msidbControlAttributesNoWrap = 0x00040000,
+ msidbControlAttributesFormatSize = 0x00080000,
+ msidbControlAttributesUsersLanguage = 0x00100000,
+
+ msidbControlAttributesMultiline = 0x00010000,
+ msidbControlAttributesPasswordInput = 0x00200000,
+
+ msidbControlAttributesProgress95 = 0x00010000,
+
+ msidbControlAttributesRemovableVolume = 0x00010000,
+ msidbControlAttributesFixedVolume = 0x00020000,
+ msidbControlAttributesRemoteVolume = 0x00040000,
+ msidbControlAttributesCDROMVolume = 0x00080000,
+ msidbControlAttributesRAMdiskVolume = 0x00100000,
+ msidbControlAttributesFloppyVolume = 0x00200000,
+ msidbControlShowRollbackCost = 0x00400000,
+
+ msidbControlAttributesSorted = 0x00010000,
+ msidbControlAttributesComboList = 0x00020000,
+
+ msidbControlAttributesImageHandle = 0x00010000,
+ msidbControlAttributesPushLike = 0x00020000,
+ msidbControlAttributesBitmap = 0x00040000,
+ msidbControlAttributesIcon = 0x00080000,
+ msidbControlAttributesFixedSize = 0x00100000,
+ msidbControlAttributesIconSize16 = 0x00200000,
+ msidbControlAttributesIconSize32 = 0x00400000,
+ msidbControlAttributesIconSize48 = 0x00600000,
+
+ msidbControlAttributesHasBorder = 0x01000000,
+};
+
+enum msidbTextStyleStyleBits
+{
+ msidbTextStyleStyleBitsBold = 0x00000001,
+ msidbTextStyleStyleBitsItalic = 0x00000002,
+ msidbTextStyleStyleBitsUnderline = 0x00000004,
+ msidbTextStyleStyleBitsStrike = 0x00000008,
+};
+
+enum msidbCustomActionType
+{
+ msidbCustomActionTypeDll = 0x00000001,
+ msidbCustomActionTypeExe = 0x00000002,
+ msidbCustomActionTypeTextData = 0x00000003,
+ msidbCustomActionTypeJScript = 0x00000005,
+ msidbCustomActionTypeVBScript = 0x00000006,
+ msidbCustomActionTypeInstall = 0x00000007,
+
+ msidbCustomActionTypeBinaryData = 0x00000000,
+ msidbCustomActionTypeSourceFile = 0x00000010,
+ msidbCustomActionTypeDirectory = 0x00000020,
+ msidbCustomActionTypeProperty = 0x00000030,
+
+ msidbCustomActionTypeContinue = 0x00000040,
+ msidbCustomActionTypeAsync = 0x00000080,
+
+ msidbCustomActionTypeFirstSequence = 0x00000100,
+ msidbCustomActionTypeOncePerProcess = 0x00000200,
+ msidbCustomActionTypeClientRepeat = 0x00000300,
+ msidbCustomActionTypeInScript = 0x00000400,
+
+ msidbCustomActionTypeRollback = 0x00000100,
+ msidbCustomActionTypeCommit = 0x00000200,
+
+ msidbCustomActionTypeNoImpersonate = 0x00000800,
+ msidbCustomActionTypeTSAware = 0x00004000,
+
+ msidbCustomActionType64BitScript = 0x00001000,
+ msidbCustomActionTypeHideTarget = 0x00002000
+};
+
+enum msidbFeatureAttributes
+{
+ msidbFeatureAttributesFavorLocal = 0x00000000,
+ msidbFeatureAttributesFavorSource = 0x00000001,
+ msidbFeatureAttributesFollowParent = 0x00000002,
+ msidbFeatureAttributesFavorAdvertise = 0x00000004,
+ msidbFeatureAttributesDisallowAdvertise = 0x00000008,
+ msidbFeatureAttributesUIDisallowAbsent = 0x00000010,
+ msidbFeatureAttributesNoUnsupportedAdvertise = 0x00000020
+};
+
+enum msidbComponentAttributes
+{
+ msidbComponentAttributesLocalOnly = 0x00000000,
+ msidbComponentAttributesSourceOnly = 0x00000001,
+ msidbComponentAttributesOptional = 0x00000002,
+ msidbComponentAttributesRegistryKeyPath = 0x00000004,
+ msidbComponentAttributesSharedDllRefCount = 0x00000008,
+ msidbComponentAttributesPermanent = 0x00000010,
+ msidbComponentAttributesODBCDataSource = 0x00000020,
+ msidbComponentAttributesTransitive = 0x00000040,
+ msidbComponentAttributesNeverOverwrite = 0x00000080,
+ msidbComponentAttributes64bit = 0x00000100
+};
+
+enum msidbODBCDataSourceRegistration
+{
+ msidbODBCDataSourceRegistrationPerMachine = 0x00000000,
+ msidbODBCDataSourceRegistrationPerUser = 0x00000001
+};
+
+enum msidbRegistryRoot
+{
+ msidbRegistryRootClassesRoot = 0,
+ msidbRegistryRootCurrentUser = 1,
+ msidbRegistryRootLocalMachine = 2,
+ msidbRegistryRootUsers = 3,
+};
+
+enum msidbLocatorType
+{
+ msidbLocatorTypeDirectory = 0x000,
+ msidbLocatorTypeFileName = 0x001,
+ msidbLocatorTypeRawValue = 0x002,
+ msidbLocatorType64bit = 0x010,
+};
+
+enum msidbServiceControlEvent
+{
+ msidbServiceControlEventStart = 0x00000001,
+ msidbServiceControlEventStop = 0x00000002,
+ msidbServiceControlEventDelete = 0x00000008,
+ msidbServiceControlEventUninstallStart = 0x00000010,
+ msidbServiceControlEventUninstallStop = 0x00000020,
+ msidbServiceControlEventUninstallDelete = 0x00000080,
+};
+
+enum msidbMoveFileOptions
+{
+ msidbMoveFileOptionsMove = 0x00000001,
+};
+
+enum msidbAssemblyAttributes
+{
+ msidbAssemblyAttributesURT = 0x00000000,
+ msidbAssemblyAttributesWin32 = 0x00000001,
+};
+
+enum msidbSumInfoSourceType
+{
+ msidbSumInfoSourceTypeSFN = 0x00000001,
+ msidbSumInfoSourceTypeCompressed = 0x00000002,
+ msidbSumInfoSourceTypeAdminImage = 0x00000004,
+ msidbSumInfoSourceTypeLUAPackage = 0x00000008,
+};
+
+enum msidbRemoveFileInstallMode
+{
+ msidbRemoveFileInstallModeOnInstall = 0x00000001,
+ msidbRemoveFileInstallModeOnRemove = 0x00000002,
+ msidbRemoveFileInstallModeOnBoth = 0x00000003,
+};
+
+enum
+{
+ msidbIniFileActionAddLine = 0x00000000,
+ msidbIniFileActionCreateLine = 0x00000001,
+ msidbIniFileActionRemoveLine = 0x00000002,
+ msidbIniFileActionAddTag = 0x00000003,
+ msidbIniFileActionRemoveTag = 0x00000004
+};
+
+/*
+ * Windows SDK braindamage alert
+ *
+ * PID_DICTIONARY and PID_CODEPAGE are defined by propidl.h too
+ * PID_SECURITY is defined in propidl.h with a different value!
+ * So these need to be undefined first.
+ */
+#ifdef PID_DICTIONARY
+#undef PID_DICTIONARY
+#endif
+
+#ifdef PID_CODEPAGE
+#undef PID_CODEPAGE
+#endif
+
+#ifdef PID_SECURITY
+#undef PID_SECURITY
+#endif
+
+#define PID_DICTIONARY 0
+#define PID_CODEPAGE 1
+#define PID_TITLE 2
+#define PID_SUBJECT 3
+#define PID_AUTHOR 4
+#define PID_KEYWORDS 5
+#define PID_COMMENTS 6
+#define PID_TEMPLATE 7
+#define PID_LASTAUTHOR 8
+#define PID_REVNUMBER 9
+#define PID_EDITTIME 10
+#define PID_LASTPRINTED 11
+#define PID_CREATE_DTM 12
+#define PID_LASTSAVE_DTM 13
+#define PID_PAGECOUNT 14
+#define PID_WORDCOUNT 15
+#define PID_CHARCOUNT 16
+#define PID_THUMBNAIL 17
+#define PID_APPNAME 18
+#define PID_SECURITY 19
+#define PID_MSIVERSION PID_PAGECOUNT
+#define PID_MSISOURCE PID_WORDCOUNT
+#define PID_MSIRESTRICT PID_CHARCOUNT
+
+#endif /* __WINE_MSIDEFS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl
new file mode 100644
index 00000000..62350b51
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msident.idl
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "ocidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+#endif
+
+cpp_quote("#define E_IDENTITIES_DISABLED _HRESULT_TYPEDEF_(0x80007110)")
+cpp_quote("#define S_IDENTITIES_DISABLED _HRESULT_TYPEDEF_(0x00007110)")
+cpp_quote("#define E_NO_CURRENT_IDENTITY _HRESULT_TYPEDEF_(0x80007111)")
+cpp_quote("#define E_USER_CANCELLED _HRESULT_TYPEDEF_(0x80007112)")
+cpp_quote("#define E_PROCESS_CANCELLED_SWITCH _HRESULT_TYPEDEF_(0x80007113)")
+cpp_quote("#define E_IDENTITY_NOT_FOUND _HRESULT_TYPEDEF_(0x80007114)")
+cpp_quote("#define E_IDENTITY_EXISTS _HRESULT_TYPEDEF_(0x80007115)")
+cpp_quote("#define E_IDENTITY_CHANGING _HRESULT_TYPEDEF_(0x80007116)")
+
+[
+ uuid(a9ae6c8e-1d1b-11d2-b21a-00c04fa357fa),
+]
+interface IUserIdentity : IUnknown
+{
+ HRESULT GetCookie([out] GUID *puidCookie);
+
+ HRESULT GetName(
+ [in] WCHAR *pszName,
+ [in] ULONG ulBuffSize);
+
+ [local]
+ HRESULT OpenIdentityRegKey(
+ [in]DWORD dwDesiredAccess,
+ [out] HKEY *phKey);
+
+ HRESULT GetIdentityFolder(
+ [in] DWORD dwFlags,
+ [in] WCHAR *pszPath,
+ [in] ULONG ulBuffSize);
+
+cpp_quote("#define GIF_ROAMING_FOLDER 0x0001")
+cpp_quote("#define GIF_NON_ROAMING_FOLDER 0x0002")
+}
+
+[
+ uuid(a9ae6c8f-1d1b-11d2-b21a-00c04fa357fa),
+ odl
+]
+interface IEnumUserIdentity : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] IUnknown **rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip([in] ULONG celt);
+ HRESULT Reset();
+ HRESULT Clone([out] IEnumUserIdentity **ppenum);
+ HRESULT GetCount([out] ULONG *pnCount);
+}
+
+[
+ uuid(a9ae6c90-1d1b-11d2-b21a-00c04fa357fa)
+]
+interface IUserIdentityManager : IUnknown
+{
+ HRESULT EnumIdentities([out] IEnumUserIdentity **ppEnumUser);
+ HRESULT ManageIdentities([in] HWND hwndParent, [in] DWORD dwFlags);
+
+cpp_quote("#define UIMI_CREATE_NEW_IDENTITY 0x0001")
+ HRESULT Logon([in] HWND hwndParent, [in] DWORD dwFlags, [out] IUserIdentity **ppIdentity);
+
+cpp_quote("#define UIL_FORCE_UI 0x80000001")
+ HRESULT Logoff([in] HWND hwndParent);
+
+ HRESULT GetIdentityByCookie([in] GUID *uidCookie, [out] IUserIdentity **ppIdentity);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_UserIdentityManager, 0xa9ae6c91,0x1d1b,0x11d2,0xb2,0x1a,0x00,0xc0,0x4f,0xa3,0x57,0xfa);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl
new file mode 100644
index 00000000..c4f54c3d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msinkaut.idl
@@ -0,0 +1,1018 @@
+/* Copyright (C) 2007 C John Klehm
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+ uuid(7D868ACD-1A5D-4A47-A247-F39741353012),
+ version(1.0)
+]
+library MSINKAUTLib
+{
+ importlib("stdole2.tlb");
+
+ typedef float single;
+
+ typedef enum InkBoundingBoxMode {
+ IBBM_Default = 0,
+ IBBM_NoCurveFit = 1,
+ IBBM_CurveFit = 2,
+ IBBM_PointsOnly = 3,
+ IBBM_Union = 4
+ } InkBoundingBoxMode;
+
+ typedef enum InkExtractFlags {
+ IEF_CopyFromOriginal = 0x0,
+ IEF_RemoveFromOriginal = 0x1,
+ IEF_Default = IEF_RemoveFromOriginal
+ } InkExtractFlags;
+
+ typedef enum InkPersistenceFormat {
+ IPF_InkSerializeFormat = 0,
+ IPF_Base64InkSerializedFormat = 1,
+ IPF_GIF = 2,
+ IPF_Base64GIF = 3
+ } InkPersistenceFormat;
+
+ typedef enum InkPersistenceCompressionMode
+ {
+ IPCM_Default = 0,
+ IPCM_MaximumCompression = 1,
+ IPCM_NoCompression = 2
+ } InkPersistenceCompressionMode;
+
+ typedef enum InkPenTip {
+ IPT_Ball = 0,
+ IPT_Rectangle = 1
+ } InkPenTip;
+
+ typedef enum InkRasterOperation {
+ IRO_Black = 1,
+ IRO_NotMergePen,
+ IRO_MaskNotPen,
+ IRO_NotCopyPen,
+ IRO_MaskPenNot,
+ IRO_Not,
+ IRO_XOrPen,
+ IRO_NotMaskPen,
+ IRO_MaskPen,
+ IRO_NotXOrPen,
+ IRO_NoOperation,
+ IRO_MergeNotPen,
+ IRO_CopyPen,
+ IRO_MergePenNot,
+ IRO_MergePen,
+ IRO_White
+ } InkRasterOperation;
+
+ typedef enum InkClipboardModes {
+ ICB_Copy = 0,
+ ICB_Cut = 0x1,
+ ICB_DelayedCopy = 0x20,
+ ICB_ExtractOnly = 0x30,
+ ICB_Default = ICB_Copy
+ } InkClipboardModes;
+
+ typedef enum InkClipboardFormats {
+ ICF_None = 0,
+ ICF_InkSerializedFormat = 0x1,
+ ICF_SketchInk = 0x2,
+ ICF_TextInk = 0x6,
+ ICF_EnhancedMetafile = 0x8,
+ ICF_Metafile = 0x20,
+ ICF_Bitmap = 0x40,
+ ICF_PasteMask = 0x7,
+ ICF_CopyMask = 0x7f,
+ ICF_Default = ICF_CopyMask
+ } InkClipboardFormats;
+
+ typedef enum InkRecognitionConfidence
+ {
+ IRC_Strong = 0,
+ IRC_Intermediate = 1,
+ IRC_Poor = 2
+ } InkRecognitionConfidence;
+
+ [
+ odl,
+ uuid(DB489209-B7C3-411D-90F6-1548CFFF271E),
+ dual,
+ oleautomation
+ ]
+ interface IInkExtendedProperty : IDispatch {
+ [id(0x00000001), propget] HRESULT Guid([out, retval] BSTR* Guid);
+ [id(0x00000002), propget] HRESULT Data([out, retval] VARIANT* Data);
+ [id(0x00000002), propput] HRESULT Data([in] VARIANT Data);
+ };
+
+ [
+ odl,
+ uuid(89F2A8BE-95A9-4530-8B8F-88E971E3E25F),
+ dual,
+ oleautomation
+ ]
+ interface IInkExtendedProperties : IDispatch {
+ HRESULT Count([out, retval] long* Count);
+ HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
+ HRESULT Item(
+ [in] VARIANT Identifier,
+ [out, retval] IInkExtendedProperty** Item);
+ HRESULT Add(
+ [in] BSTR Guid,
+ [in] VARIANT Data,
+ [out, retval] IInkExtendedProperty** InkExtendedProperty);
+ HRESULT Remove([in] VARIANT Identifier);
+ HRESULT Clear();
+ HRESULT DoesPropertyExist(
+ [in] BSTR Guid,
+ [out, retval] VARIANT_BOOL* DoesPropertyExist);
+ };
+
+ [
+ odl,
+ uuid(BF519B75-0A15-4623-ADC9-C00D436A8092),
+ dual,
+ oleautomation
+ ]
+ interface IInkDrawingAttributes : IDispatch {
+ [id(0x00000002), propget] HRESULT Color(
+ [out, retval] long* CurrentColor);
+ [id(0x00000002), propput] HRESULT Color([in] long CurrentColor);
+ [id(0x00000003), propget] HRESULT Width(
+ [out, retval] single* CurrentWidth);
+ [id(0x00000003), propput] HRESULT Width([in] single CurrentWidth);
+ [id(0x00000001), propget] HRESULT Height(
+ [out, retval] single* CurrentHeight);
+ [id(0x00000001), propput] HRESULT Height([in] single CurrentHeight);
+ [id(0x00000004), propget] HRESULT FitToCurve(
+ [out, retval] VARIANT_BOOL* Flag);
+ [id(0x00000004), propput] HRESULT FitToCurve([in] VARIANT_BOOL Flag);
+ [id(0x00000005), propget] HRESULT IgnorePressure(
+ [out, retval] VARIANT_BOOL* Flag);
+ [id(0x00000005), propput] HRESULT IgnorePressure(
+ [in] VARIANT_BOOL Flag);
+ [id(0x00000006), propget] HRESULT AntiAliased(
+ [out, retval] VARIANT_BOOL* Flag);
+ [id(0x00000006), propput] HRESULT AntiAliased([in] VARIANT_BOOL Flag);
+ [id(0x00000007), propget] HRESULT Transparency(
+ [out, retval] long* CurrentTransparency);
+ [id(0x00000007), propput] HRESULT Transparency(
+ [in] long CurrentTransparency);
+ [id(0x00000008), propget] HRESULT RasterOperation(
+ [out, retval] InkRasterOperation* CurrentRasterOperation);
+ [id(0x00000008), propput] HRESULT RasterOperation(
+ [in] InkRasterOperation CurrentRasterOperation);
+ [id(0x00000009), propget] HRESULT PenTip(
+ [out, retval] InkPenTip* CurrentPenTip);
+ [id(0x00000009), propput] HRESULT PenTip([in] InkPenTip CurrentPenTip);
+ [id(0x0000000b), propget] HRESULT ExtendedProperties(
+ [out, retval] IInkExtendedProperties** Properties);
+ [id(0x0000000a)] HRESULT Clone(
+ [out, retval] IInkDrawingAttributes** DrawingAttributes);
+ };
+
+cpp_quote("#ifndef _WINGDI_")
+/* already defined in wingdi.h but needed for WIDL */
+ typedef struct tagXFORM {
+ single eM11;
+ single eM12;
+ single eM21;
+ single eM22;
+ single eDx;
+ single eDy;
+ } XFORM;
+cpp_quote("#endif /* _WINGDI_ */")
+
+ [
+ odl,
+ uuid(615F1D43-8703-4565-88E2-8201D2ECD7B7),
+ dual,
+ oleautomation
+ ]
+ interface IInkTransform : IDispatch {
+ [id(0x00000001)] HRESULT Reset();
+ [id(0x00000002)] HRESULT Translate(
+ [in] single HorizontalComponent,
+ [in] single VerticalComponent);
+ [id(0x00000003)] HRESULT Rotate(
+ [in] single Degrees,
+ [in, optional, defaultvalue(0)] single x,
+ [in, optional, defaultvalue(0)] single y);
+ [id(0x00000004)] HRESULT Reflect(
+ [in] VARIANT_BOOL Horizontally,
+ [in] VARIANT_BOOL Vertically);
+ [id(0x00000005)] HRESULT Shear(
+ [in] single HorizontalComponent,
+ [in] single VerticalComponent);
+ [id(0x00000006)] HRESULT ScaleTransform(
+ [in] single HorizontalMultiplier,
+ [in] single VerticalMultiplier);
+ [id(0x0000000d)] HRESULT GetTransform(
+ [out] single* eM11,
+ [out] single* eM12,
+ [out] single* eM21,
+ [out] single* eM22,
+ [out] single* eDx,
+ [out] single* eDy);
+ [id(0x0000000e)] HRESULT SetTransform(
+ [in] single eM11,
+ [in] single eM12,
+ [in] single eM21,
+ [in] single eM22,
+ [in] single eDx,
+ [in] single eDy);
+ [id(0x00000007), propget, hidden] HRESULT eM11(
+ [out, retval] single* Value);
+ [id(0x00000007), propput, hidden] HRESULT eM11([in] single Value);
+ [id(0x00000008), propget, hidden] HRESULT eM12(
+ [out, retval] single* Value);
+ [id(0x00000008), propput, hidden] HRESULT eM12([in] single Value);
+ [id(0x00000009), propget, hidden] HRESULT eM21(
+ [out, retval] single* Value);
+ [id(0x00000009), propput, hidden] HRESULT eM21([in] single Value);
+ [id(0x0000000a), propget, hidden] HRESULT eM22(
+ [out, retval] single* Value);
+ [id(0x0000000a), propput, hidden] HRESULT eM22([in] single Value);
+ [id(0x0000000b), propget, hidden] HRESULT eDx(
+ [out, retval] single* Value);
+ [id(0x0000000b), propput, hidden] HRESULT eDx([in] single Value);
+ [id(0x0000000c), propget, hidden] HRESULT eDy(
+ [out, retval] single* Value);
+ [id(0x0000000c), propput, hidden] HRESULT eDy([in] single Value);
+ [id(0x0000000f), propget, hidden] HRESULT Data(
+ [out, retval] XFORM* XFORM);
+ [id(0x0000000f), propput, hidden] HRESULT Data([in] XFORM XFORM);
+ };
+
+ interface IInkDisp;
+
+ [
+ odl,
+ uuid(9794FF82-6071-4717-8A8B-6AC7C64A686E),
+ dual,
+ oleautomation
+ ]
+ interface IInkRectangle
+ {
+ [id(1), propget] HRESULT Top([out, retval] long* Units);
+ [id(1), propput] HRESULT Top([in] long Units);
+ [id(2), propget] HRESULT Left([out, retval] long* Units);
+ [id(2), propput] HRESULT Left([in] long Units);
+ [id(3), propget] HRESULT Bottom([out, retval] long* Units);
+ [id(3), propput] HRESULT Bottom([in] long Units);
+ [id(4), propget] HRESULT Right([out, retval] long* Units);
+ [id(4), propput] HRESULT Right([in] long Units);
+ [id(7), propget] HRESULT Data([out, retval] RECT* Rect);
+ [id(7), propput] HRESULT Data([in] RECT Rect);
+ [id(5)] HRESULT GetRectangle(
+ [out] long* Top,
+ [out] long* Left,
+ [out] long* Bottom,
+ [out] long* Right);
+ [id(6)] HRESULT SetRectangle(
+ [in] long Top,
+ [in] long Left,
+ [in] long Bottom,
+ [in] long Right);
+ };
+
+ interface IInkStrokes;
+
+ typedef enum {
+ TPMU_Default,
+ TPMU_Inches,
+ TPMU_Centimeters,
+ TPMU_Degrees,
+ TPMU_Radians,
+ TPMU_Seconds,
+ TPMU_Pounds,
+ TPMU_Grams
+ } TabletPropertyMetricUnit;
+
+ [
+ odl,
+ uuid(43242FEA-91D1-4A72-963E-FBB91829CFA2),
+ dual,
+ oleautomation
+ ]
+ interface IInkStrokeDisp : IDispatch {
+ [id(0x00000002), propget] HRESULT Id([out, retval] long* Id);
+ [id(0x0000000d), propget] HRESULT BezierPoints(
+ [out, retval] VARIANT* Points);
+ [id(0x00000004), propget] HRESULT DrawingAttributes(
+ [out, retval] IInkDrawingAttributes** DrawAttrs);
+ [id(0x00000004), propputref] HRESULT DrawingAttributes(
+ [in] IInkDrawingAttributes* DrawAttrs);
+ [id(0x0000000c), propget] HRESULT Ink([out, retval] IInkDisp** Ink);
+ [id(0x0000000b), propget] HRESULT ExtendedProperties(
+ [out, retval] IInkExtendedProperties** Properties);
+ [id(0x0000000e), propget] HRESULT PolylineCusps(
+ [out, retval] VARIANT* Cusps);
+ [id(0x0000000f), propget] HRESULT BezierCusps(
+ [out, retval] VARIANT* Cusps);
+ [id(0x00000010), propget] HRESULT SelfIntersections(
+ [out, retval] VARIANT* Intersections);
+ [id(0x00000011), propget] HRESULT PacketCount(
+ [out, retval] long* plCount);
+ [id(0x00000012), propget] HRESULT PacketSize(
+ [out, retval] long* plSize);
+ [id(0x00000013), propget] HRESULT PacketDescription(
+ [out, retval] VARIANT* PacketDescription);
+ [id(0x00000014), propget] HRESULT Deleted(
+ [out, retval] VARIANT_BOOL* Deleted);
+ [id(0x00000003)] HRESULT GetBoundingBox(
+ [in, optional, defaultvalue(0)] InkBoundingBoxMode BoundingBoxMode,
+ [out, retval] IInkRectangle** Rectangle);
+ [id(0x00000005)] HRESULT FindIntersections(
+ [in] IInkStrokes* Strokes,
+ [out, retval] VARIANT* Intersections);
+ [id(0x00000006)] HRESULT GetRectangleIntersections(
+ [in] IInkRectangle* Rectangle,
+ [out, retval] VARIANT* Intersections);
+ [id(0x00000007)] HRESULT Clip(
+ [in] IInkRectangle* Rectangle);
+ [id(0x00000008)] HRESULT HitTestCircle(
+ [in] long x,
+ [in] long y,
+ [in] single radius,
+ [out, retval] VARIANT_BOOL* Intersects);
+ [id(0x00000009)] HRESULT NearestPoint(
+ [in] long x,
+ [in] long y,
+ [in, out, optional, defaultvalue(0)] single* Distance,
+ [out, retval] single* Point);
+ [id(0x0000000a)] HRESULT Split(
+ [in] single SplitAt,
+ [out, retval] IInkStrokeDisp** NewStroke);
+ [id(0x00000015)] HRESULT GetPacketDescriptionPropertyMetrics(
+ [in] BSTR propertyName,
+ [out] long* Minimum,
+ [out] long* Maximum,
+ [out] TabletPropertyMetricUnit* Units,
+ [out] single* Resolution);
+ [id(0x00000016)] HRESULT GetPoints(
+ [in, optional, defaultvalue(0)] long Index,
+ [in, optional, defaultvalue(-1)] long Count,
+ [out, retval] VARIANT* Points);
+ [id(0x00000017)] HRESULT SetPoints(
+ [in] VARIANT Points,
+ [in, optional, defaultvalue(0)] long Index,
+ [in, optional, defaultvalue(-1)] long Count,
+ [out, retval] long* NumberOfPointsSet);
+ [id(0x00000018)] HRESULT GetPacketData(
+ [in, optional, defaultvalue(0)] long Index,
+ [in, optional, defaultvalue(-1)] long Count,
+ [out, retval] VARIANT* PacketData);
+ [id(0x00000019)] HRESULT GetPacketValuesByProperty(
+ [in] BSTR propertyName,
+ [in, optional, defaultvalue(0)] long Index,
+ [in, optional, defaultvalue(-1)] long Count,
+ [out, retval] VARIANT* PacketValues);
+ [id(0x0000001a)] HRESULT SetPacketValuesByProperty(
+ [in] BSTR bstrPropertyName,
+ [in] VARIANT PacketValues,
+ [in, optional, defaultvalue(0)] long Index,
+ [in, optional, defaultvalue(-1)] long Count,
+ [out, retval] long* NumberOfPacketsSet);
+ [id(0x0000001b)] HRESULT GetFlattenedBezierPoints(
+ [in, optional, defaultvalue(0)] long FittingError,
+ [out, retval] VARIANT* FlattenedBezierPoints);
+ [id(0x0000001d)] HRESULT Transform(
+ [in] IInkTransform* Transform,
+ [in, optional, defaultvalue(0)] VARIANT_BOOL ApplyOnPenWidth);
+ [id(0x0000001c)] HRESULT ScaleToRectangle(
+ [in] IInkRectangle* Rectangle);
+ [id(0x0000001e)] HRESULT Move(
+ [in] single HorizontalComponent,
+ [in] single VerticalComponent);
+ [id(0x0000001f)] HRESULT Rotate(
+ [in] single Degrees,
+ [in, optional, defaultvalue(0)] single x,
+ [in, optional, defaultvalue(0)] single y);
+ [id(0x00000020)] HRESULT Shear(
+ [in] single HorizontalMultiplier,
+ [in] single VerticalMultiplier);
+ [id(0x00000021)] HRESULT ScaleTransform(
+ [in] single HorizontalMultiplier,
+ [in] single VerticalMultiplier);
+ };
+
+ interface IInkRecognitionResult;
+
+ [
+ odl,
+ uuid(F1F4C9D8-590A-4963-B3AE-1935671BB6F3),
+ dual,
+ oleautomation
+ ]
+ interface IInkStrokes : IDispatch {
+ [propget] HRESULT Count(
+ [out, retval] long *Count);
+ [propget, restricted] HRESULT _NewEnum(
+ [out, retval] IUnknown **_NewEnum);
+ [propget] HRESULT Ink(
+ [out, retval] IInkDisp **Ink);
+ [propget] HRESULT RecognitionResult(
+ [out, retval] IInkRecognitionResult **RecognitionResult);
+ HRESULT ToString(
+ [out, retval] BSTR *ToString);
+ HRESULT Item(
+ [in] long Index,
+ [out, retval] IInkStrokeDisp **Stroke);
+ HRESULT Add(
+ [in] IInkStrokeDisp *InkStroke);
+ HRESULT AddStrokes(
+ [in] IInkStrokes *InkStrokes);
+ HRESULT Remove(
+ [in] IInkStrokeDisp *InkStroke);
+ HRESULT RemoveStrokes(
+ [in] IInkStrokes *InkStrokes);
+ HRESULT ModifyDrawingAttributes(
+ [in] IInkDrawingAttributes *DrawAttrs);
+ HRESULT GetBoundingBox(
+ [in] InkBoundingBoxMode BoundingBoxMode,
+ [out, retval] IInkRectangle **BoundingBox);
+ HRESULT Transform(
+ [in] IInkTransform *Transform,
+ [in] VARIANT_BOOL ApplyOnPenWidth);
+ HRESULT ScaleToRectangle(
+ [in] IInkRectangle *Rectangle);
+ HRESULT Move(
+ [in] float HorizontalComponent,
+ [in] float VerticalComponent);
+ HRESULT Rotate(
+ [in] float Degrees,
+ [in] float x,
+ [in] float y);
+ HRESULT Shear(
+ [in] float HorizontalMultiplier,
+ [in] float VerticalMultiplier);
+ HRESULT ScaleTransform(
+ [in] float HorizontalMultiplier,
+ [in] float VerticalMultiplier);
+ HRESULT Clip(
+ [in] IInkRectangle *Rectangle);
+ HRESULT RemoveRecognitionResult();
+ };
+
+ [
+ odl,
+ uuid(7E23A88F-C30E-420f-9BDB-28902543F0C1),
+ dual,
+ oleautomation
+ ]
+ interface IInkCustomStrokes : IDispatch {
+ [propget] HRESULT Count(
+ [out, retval] long *Count);
+ [propget] HRESULT _NewEnum(
+ [out, retval] IUnknown **_NewEnum);
+ HRESULT Item(
+ [in] VARIANT Identifier,
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT Add(
+ [in] BSTR Name,
+ [in] IInkStrokes *Strokes);
+ HRESULT Remove(
+ [in] VARIANT Identifier);
+ HRESULT Clear();
+ };
+
+ interface IInkRecognitionAlternate;
+ interface IInkRecognitionAlternates;
+
+ [
+ odl,
+ uuid(3BC129A8-86CD-45ad-BDE8-E0D32D61C16D),
+ dual,
+ oleautomation
+ ]
+ interface IInkRecognitionResult : IDispatch {
+ [propget] HRESULT TopString(
+ [out, retval] BSTR *TopString);
+ [propget] HRESULT TopAlternate(
+ [out, retval] IInkRecognitionAlternate **TopAlternate);
+ [propget] HRESULT TopConfidence(
+ [out, retval] InkRecognitionConfidence *TopConfidence);
+ [propget] HRESULT Strokes(
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT AlternatesFromSelection(
+ [in] long selectionStart,
+ [in] long selectionLength,
+ [in] long maximumAlternates,
+ [out, retval] IInkRecognitionAlternates **AlternatesFromSelection);
+ HRESULT ModifyTopAlternate(
+ [in] IInkRecognitionAlternate *Alternate);
+ HRESULT SetResultOnStrokes();
+ };
+
+ [
+ odl,
+ uuid(B7E660AD-77E4-429b-ADDA-873780D1FC4A),
+ dual,
+ oleautomation
+ ]
+ interface IInkRecognitionAlternate : IDispatch {
+ [propget] HRESULT String(
+ [out, retval] BSTR *RecoString);
+ [propget] HRESULT Confidence(
+ [out, retval] InkRecognitionConfidence *Confidence);
+ [propget] HRESULT Baseline(
+ [out, retval] VARIANT *Baseline);
+ [propget] HRESULT Midline(
+ [out, retval] VARIANT *Midline);
+ [propget] HRESULT Ascender(
+ [out, retval] VARIANT *Ascender);
+ [propget] HRESULT Descender(
+ [out, retval] VARIANT *Descender);
+ [propget] HRESULT LineNumber(
+ [out, retval] long *LineNumber);
+ [propget] HRESULT Strokes(
+ [out, retval] IInkStrokes **Strokes);
+ [propget] HRESULT LineAlternates(
+ [out, retval] IInkRecognitionAlternates **LineAlternates);
+ [propget] HRESULT ConfidenceAlternates(
+ [out, retval] IInkRecognitionAlternates **ConfidenceAlternates);
+ HRESULT GetStrokesFromStrokeRanges(
+ [in] IInkStrokes *Stroke,
+ [out, retval] IInkStrokes **GetStrokesFromTextRange);
+ HRESULT GetStrokesFromTextRange(
+ [in, out] long *selectionStart,
+ [in, out] long *selectionLength,
+ [out, retval] IInkStrokes **GetStrokesFromTextRange);
+ HRESULT GetTextRangeFromStrokes(
+ [in] IInkStrokes *Strokes,
+ [in, out] long *selectionStart,
+ [in, out] long *selectionLength);
+ HRESULT AlternatesWithConstantPropertyValues(
+ [in] BSTR PropertyType,
+ [out, retval] IInkRecognitionAlternates **AlternatesWithConstantPropertyValues);
+ HRESULT GetPropertyValue(
+ [in] BSTR PropertyType,
+ [out, retval] VARIANT *PropertyValue);
+ };
+
+ [
+ odl,
+ uuid(286A167F-9F19-4c61-9D53-4F07BE622B84),
+ dual,
+ oleautomation
+ ]
+ interface IInkRecognitionAlternates : IDispatch {
+ [propget] HRESULT Count(
+ [out, retval] long *Count);
+ [propget, restricted] HRESULT _NewEnum(
+ [out, retval] IUnknown **_NewEnum);
+ [propget] HRESULT Strokes(
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT Item(
+ [in] long Index,
+ [out, retval] IInkRecognitionAlternate **InkRecoAlternate);
+ };
+
+ [
+ odl,
+ uuid(9D398FA0-C4E2-4fcd-9973-975CAAF47EA6),
+ dual,
+ oleautomation
+ ]
+ interface IInkDisp : IDispatch {
+ [propget] HRESULT Strokes(
+ [out, retval] IInkStrokes **Strokes);
+ [propget] HRESULT ExtendedProperties(
+ [out, retval] IInkExtendedProperties **Properties);
+ [propget] HRESULT Dirty(
+ [out, retval] VARIANT_BOOL *Dirty);
+ [propput] HRESULT Dirty(
+ [in] VARIANT_BOOL Dirty);
+ [propget] HRESULT CustomStrokes(
+ [out, retval] IInkCustomStrokes **CustomStrokes);
+ HRESULT GetBoundingBox(
+ [in] InkBoundingBoxMode BoundingBoxMode,
+ [out] IInkRectangle **Rectangle);
+ HRESULT DeleteStrokes(
+ [in, unique] IInkStrokes *Strokes);
+ HRESULT DeleteStroke(
+ [in] IInkStrokeDisp *Stroke);
+ HRESULT ExtractStrokes(
+ [in] IInkStrokes *Strokes,
+ [in] InkExtractFlags ExtractFlags,
+ [out, retval] IInkDisp **ExtractedInk);
+ HRESULT ExtractWithRectangle(
+ [in] IInkRectangle *Rectangle,
+ [in] InkExtractFlags ExtractFlags,
+ [out, retval] IInkDisp **ExtractedInk);
+ HRESULT Clip(
+ [in] IInkRectangle *Rectangle);
+ HRESULT Clone(
+ [out, retval] IInkDisp **NewInk);
+ HRESULT HitTestCircle(
+ [in] long X,
+ [in] long Y,
+ [in] float radius,
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT HitTestWithRectangle(
+ [in] IInkRectangle *SelectionRectangle,
+ [in] float IntersectPercent,
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT HitTestWithLasso(
+ [in] VARIANT Points,
+ [in] float IntersectPercent,
+ [in, out, unique] VARIANT *LassoPoints,
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT NearestPoint(
+ [in] long X,
+ [in] long Y,
+ [in, out] float *PointOnStroke,
+ [in, out] float *DistanceFromPacket,
+ [out, retval] IInkStrokeDisp **Stroke);
+ HRESULT CreateStrokes(
+ [in] VARIANT StrokeIds,
+ [out, retval] IInkStrokes **Strokes);
+ HRESULT AddStrokesAtRectangle(
+ [in] IInkStrokes *SourceStrokes,
+ [in] IInkRectangle *TargetRectangle);
+ HRESULT Save(
+ [in] InkPersistenceFormat PersistenceFormat,
+ [in] InkPersistenceCompressionMode CompressionMode,
+ [out, retval] VARIANT *Data);
+ HRESULT Load(
+ [in] VARIANT Data);
+ HRESULT CreateStroke(
+ [in] VARIANT PacketData,
+ [in] VARIANT PacketDescription,
+ [out, retval] IInkStrokeDisp **Stroke);
+ HRESULT ClipboardCopyWithRectangle(
+ [in] IInkRectangle *Rectangle,
+ [in] InkClipboardFormats ClipboardFormats,
+ [in] InkClipboardModes ClipboardModes,
+ [out, retval] IDataObject **DataObject);
+ HRESULT ClipboardCopy(
+ [in] IInkStrokes *strokes,
+ [in] InkClipboardFormats ClipboardFormats,
+ [in] InkClipboardModes ClipboardModes,
+ [out, retval] IDataObject **DataObject);
+ HRESULT CanPaste(
+ [in] IDataObject *DataObject,
+ [out, retval] VARIANT_BOOL *CanPaste);
+ HRESULT ClipboardPaste(
+ [in] long x,
+ [in] long y,
+ [in, unique] IDataObject *DataObject,
+ [out, retval] IInkStrokes **Strokes);
+ };
+
+ [
+ odl,
+ uuid(E6257A9C-B511-4F4C-A8B0-A7DBC9506B83),
+ dual,
+ oleautomation
+ ]
+ interface IInkRenderer : IDispatch {
+ HRESULT GetViewTransform([in] IInkTransform* ViewTransform);
+ HRESULT SetViewTransform([in] IInkTransform* ViewTransform);
+ HRESULT GetObjectTransform([in] IInkTransform* ObjectTransform);
+ HRESULT SetObjectTransform([in] IInkTransform* ObjectTransform);
+ HRESULT Draw(
+ [in] long hDC,
+ [in] IInkStrokes* Strokes);
+ HRESULT DrawStroke(
+ [in] long hDC,
+ [in] IInkStrokeDisp* Stroke,
+ [in, optional, defaultvalue(0)]
+ IInkDrawingAttributes* DrawingAttributes);
+ HRESULT PixelToInkSpace(
+ [in] long hDC,
+ [in, out] long* x,
+ [in, out] long* y);
+ HRESULT InkSpaceToPixel(
+ [in] long hdcDisplay,
+ [in, out] long* x,
+ [in, out] long* y);
+ HRESULT PixelToInkSpaceFromPoints(
+ [in] long hDC,
+ [in, out] VARIANT* Points);
+ HRESULT InkSpaceToPixelFromPoints(
+ [in] long hDC,
+ [in, out] VARIANT* Points);
+ HRESULT Measure(
+ [in] IInkStrokes* Strokes,
+ [out, retval] IInkRectangle** Rectangle);
+ HRESULT MeasureStroke(
+ [in] IInkStrokeDisp* Stroke,
+ [in, optional, defaultvalue(0)] IInkDrawingAttributes* DrawingAttributes,
+ [out, retval] IInkRectangle** Rectangle);
+ HRESULT Move(
+ [in] single HorizontalComponent,
+ [in] single VerticalComponent);
+ HRESULT Rotate(
+ [in] single Degrees,
+ [in, optional, defaultvalue(0)] single x,
+ [in, optional, defaultvalue(0)] single y);
+ HRESULT ScaleTransform(
+ [in] single HorizontalMultiplier,
+ [in] single VerticalMultiplier,
+ [in, optional, defaultvalue(-1)] VARIANT_BOOL ApplyOnPenWidth);
+ };
+
+ typedef enum {
+ ICM_InkOnly,
+ ICM_GestureOnly,
+ ICM_InkAndGesture
+ } InkCollectionMode;
+
+ typedef enum {
+ IMP_Default,
+ IMP_Arrow,
+ IMP_Crosshair,
+ IMP_Ibeam,
+ IMP_SizeNESW,
+ IMP_SizeNS,
+ IMP_SizeNWSE,
+ IMP_SizeWE,
+ IMP_UpArrow,
+ IMP_Hourglass,
+ IMP_NoDrop,
+ IMP_ArrowHourglass,
+ IMP_ArrowQuestion,
+ IMP_SizeAll,
+ IMP_Hand,
+ IMP_Custom = 99
+ } InkMousePointer;
+
+ typedef enum {
+ THWC_Integrated = 1,
+ THWC_CursorMustTouch = 2,
+ THWC_HardProximity = 4,
+ THWC_CursorsHavePhysicalIds = 8
+ } TabletHardwareCapabilities;
+
+ [
+ odl,
+ uuid(2DE25EAA-6EF8-42D5-AEE9-185BC81B912D),
+ dual,
+ oleautomation
+ ]
+ interface IInkTablet : IDispatch {
+ [propget] HRESULT Name([out, retval] BSTR* Name);
+ [propget] HRESULT PlugAndPlayId([out, retval] BSTR* Id);
+ [propget] HRESULT MaximumInputRectangle([out, retval] IInkRectangle** Rectangle);
+ [propget] HRESULT HardwareCapabilities(
+ [out, retval] TabletHardwareCapabilities* Capabilities);
+ HRESULT IsPacketPropertySupported(
+ [in] BSTR packetPropertyName,
+ [out, retval] VARIANT_BOOL* Supported);
+ HRESULT GetPropertyMetrics(
+ [in] BSTR propertyName,
+ [out] long* Minimum,
+ [out] long* Maximum,
+ [out] TabletPropertyMetricUnit* Units,
+ [out] single* Resolution);
+ };
+
+ typedef enum {
+ ICBS_Unavailable,
+ ICBS_Up,
+ ICBS_Down
+ } InkCursorButtonState;
+
+ [
+ odl,
+ uuid(85EF9417-1D59-49B2-A13C-702C85430894),
+ dual,
+ oleautomation
+ ]
+ interface IInkCursorButton : IDispatch {
+ [propget] HRESULT Name([out, retval] BSTR* Name);
+ [propget] HRESULT Id([out, retval] BSTR* Id);
+ [propget] HRESULT State([out, retval] InkCursorButtonState* CurrentState);
+ };
+
+ [
+ odl,
+ uuid(3671CC40-B624-4671-9FA0-DB119D952D54),
+ dual,
+ oleautomation
+ ]
+ interface IInkCursorButtons : IDispatch {
+ [propget] HRESULT Count([out, retval] long* Count);
+ [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
+ HRESULT Item(
+ [in] VARIANT Identifier,
+ [out, retval] IInkCursorButton** Button);
+ };
+
+ [
+ odl,
+ uuid(AD30C630-40C5-4350-8405-9C71012FC558),
+ dual,
+ oleautomation
+ ]
+ interface IInkCursor : IDispatch {
+ [id(0x00000000), propget] HRESULT Name([out, retval] BSTR* Name);
+ [id(0x00000001), propget] HRESULT Id([out, retval] long* Id);
+ [id(0x00000004), propget] HRESULT Inverted(
+ [out, retval] VARIANT_BOOL* Status);
+ [id(0x00000002), propget] HRESULT DrawingAttributes(
+ [out, retval] IInkDrawingAttributes** Attributes);
+ [id(0x00000002), propputref] HRESULT DrawingAttributes(
+ [in] IInkDrawingAttributes* Attributes);
+ [id(0x00000005), propget] HRESULT Tablet(
+ [out, retval] IInkTablet** Tablet);
+ [id(0x00000003), propget] HRESULT Buttons(
+ [out, retval] IInkCursorButtons** Buttons);
+ };
+
+ [
+ odl,
+ uuid(A248C1AC-C698-4E06-9E5C-D57F77C7E647),
+ dual,
+ oleautomation
+ ]
+ interface IInkCursors : IDispatch {
+ [propget] HRESULT Count([out, retval] long* Count);
+ [propget] HRESULT _NewEnum([out, retval] IUnknown** _NewEnum);
+ HRESULT Item(
+ [in] long Index,
+ [out, retval] IInkCursor** Cursor);
+ };
+
+ typedef enum {
+ IAG_AllGestures = 0,
+ IAG_NoGesture = 61440,
+ IAG_Scratchout = 61441,
+ IAG_Triangle = 61442,
+ IAG_Square = 61443,
+ IAG_Star = 61444,
+ IAG_Check = 61445,
+ IAG_Curlicue = 61456,
+ IAG_DoubleCurlicue = 61457,
+ IAG_Circle = 61472,
+ IAG_DoubleCircle = 61473,
+ IAG_SemiCircleLeft = 61480,
+ IAG_SemiCircleRight = 61481,
+ IAG_ChevronUp = 61488,
+ IAG_ChevronDown = 61489,
+ IAG_ChevronLeft = 61490,
+ IAG_ChevronRight = 61491,
+ IAG_ArrowUp = 61496,
+ IAG_ArrowDown = 61497,
+ IAG_ArrowLeft = 61498,
+ IAG_ArrowRight = 61499,
+ IAG_Up = 61528,
+ IAG_Down = 61529,
+ IAG_Left = 61530,
+ IAG_Right = 61531,
+ IAG_UpDown = 61536,
+ IAG_DownUp = 61537,
+ IAG_LeftRight = 61538,
+ IAG_RightLeft = 61539,
+ IAG_UpLeftLong = 61540,
+ IAG_UpRightLong = 61541,
+ IAG_DownLeftLong = 61542,
+ IAG_DownRightLong = 61543,
+ IAG_UpLeft = 61544,
+ IAG_UpRight = 61545,
+ IAG_DownLeft = 61546,
+ IAG_DownRight = 61547,
+ IAG_LeftUp = 61548,
+ IAG_LeftDown = 61549,
+ IAG_RightUp = 61550,
+ IAG_RightDown = 61551,
+ IAG_Exclamation = 61604,
+ IAG_Tap = 61680,
+ IAG_DoubleTap = 61681
+ } InkApplicationGesture;
+
+ typedef enum {
+ ICEI_DefaultEvents = -1,
+ ICEI_CursorDown = 0,
+ ICEI_Stroke,
+ ICEI_NewPackets,
+ ICEI_NewInAirPackets,
+ ICEI_CursorButtonDown,
+ ICEI_CursorButtonUp,
+ ICEI_CursorInRange,
+ ICEI_CursorOutOfRange,
+ ICEI_SystemGesture,
+ ICEI_TabletAdded,
+ ICEI_TabletRemoved,
+ ICEI_MouseDown,
+ ICEI_MouseMove,
+ ICEI_MouseUp,
+ ICEI_MouseWheel,
+ ICEI_DblClick,
+ ICEI_AllEvents
+ } InkCollectorEventInterest;
+
+ [
+ odl,
+ uuid(F0F060B5-8B1F-4A7C-89EC-880692588A4F),
+ dual,
+ oleautomation
+ ]
+ interface IInkCollector : IDispatch {
+ [id(0x00000002), propget] HRESULT hWnd(
+ [out, retval] long* CurrentWindow);
+ [id(0x00000002), propput] HRESULT hWnd([in] long CurrentWindow);
+ [id(0x00000001), propget] HRESULT Enabled(
+ [out, retval] VARIANT_BOOL* Collecting);
+ [id(0x00000001), propput] HRESULT Enabled(
+ [in] VARIANT_BOOL Collecting);
+ [id(0x00000005), propget] HRESULT DefaultDrawingAttributes(
+ [out, retval] IInkDrawingAttributes** CurrentAttributes);
+ [id(0x00000005), propputref] HRESULT DefaultDrawingAttributes(
+ [in] IInkDrawingAttributes* CurrentAttributes);
+ [id(0x00000006), propget] HRESULT Renderer(
+ [out, retval] IInkRenderer** CurrentInkRenderer);
+ [id(0x00000006), propputref] HRESULT Renderer(
+ [in] IInkRenderer* CurrentInkRenderer);
+ [id(0x00000007), propget] HRESULT Ink([out, retval] IInkDisp** Ink);
+ [id(0x00000007), propputref] HRESULT Ink([in] IInkDisp* Ink);
+ [id(0x00000008), propget] HRESULT AutoRedraw(
+ [out, retval] VARIANT_BOOL* AutoRedraw);
+ [id(0x00000008), propput] HRESULT AutoRedraw(
+ [in] VARIANT_BOOL AutoRedraw);
+ [id(0x00000009), propget] HRESULT CollectingInk(
+ [out, retval] VARIANT_BOOL* Collecting);
+ [id(0x0000001c), propget] HRESULT CollectionMode(
+ [out, retval] InkCollectionMode* Mode);
+ [id(0x0000001c), propput] HRESULT CollectionMode(
+ [in] InkCollectionMode Mode);
+ [id(0x0000001f), propget] HRESULT DynamicRendering(
+ [out, retval] VARIANT_BOOL* Enabled);
+ [id(0x0000001f), propput] HRESULT DynamicRendering(
+ [in] VARIANT_BOOL Enabled);
+ [id(0x00000020), propget] HRESULT DesiredPacketDescription(
+ [out, retval] VARIANT* PacketGuids);
+ [id(0x00000020), propput] HRESULT DesiredPacketDescription(
+ [in] VARIANT PacketGuids);
+ [id(0x00000023), propget] HRESULT MouseIcon(
+ [out, retval] IPictureDisp** MouseIcon);
+ [id(0x00000023), propput] HRESULT MouseIcon(
+ [in] IPictureDisp* MouseIcon);
+ [id(0x00000023), propputref] HRESULT MouseIcon(
+ [in] IPictureDisp* MouseIcon);
+ [id(0x00000024), propget] HRESULT MousePointer(
+ [out, retval] InkMousePointer* MousePointer);
+ [id(0x00000024), propput] HRESULT MousePointer(
+ [in] InkMousePointer MousePointer);
+ [id(0x00000014), propget] HRESULT Cursors(
+ [out, retval] IInkCursors** Cursors);
+ [id(0x00000015), propget] HRESULT MarginX(
+ [out, retval] long* MarginX);
+ [id(0x00000015), propput] HRESULT MarginX([in] long MarginX);
+ [id(0x00000016), propget] HRESULT MarginY(
+ [out, retval] long* MarginY);
+ [id(0x00000016), propput] HRESULT MarginY([in] long MarginY);
+ [id(0x00000019), propget] HRESULT Tablet(
+ [out, retval] IInkTablet** SingleTablet);
+ [id(0x00000026), propget] HRESULT SupportHighContrastInk(
+ [out, retval] VARIANT_BOOL* Support);
+ [id(0x00000026), propput] HRESULT SupportHighContrastInk(
+ [in] VARIANT_BOOL Support);
+ [id(0x0000001d)] HRESULT SetGestureStatus(
+ [in] InkApplicationGesture Gesture,
+ [in] VARIANT_BOOL Listen);
+ [id(0x0000001e)] HRESULT GetGestureStatus(
+ [in] InkApplicationGesture Gesture,
+ [out, retval] VARIANT_BOOL* Listening);
+ [id(0x00000018)] HRESULT GetWindowInputRectangle(
+ [in, out] IInkRectangle** WindowInputRectangle);
+ [id(0x00000017)] HRESULT SetWindowInputRectangle(
+ [in] IInkRectangle* WindowInputRectangle);
+ [id(0x0000001a)] HRESULT SetAllTabletsMode(
+ [in, optional, defaultvalue(-1)] VARIANT_BOOL UseMouseForInput);
+ [id(0x0000001b)] HRESULT SetSingleTabletIntegratedMode(
+ [in] IInkTablet* Tablet);
+ [id(0x0000000b)] HRESULT GetEventInterest(
+ [in] InkCollectorEventInterest EventId,
+ [out, retval] VARIANT_BOOL* Listen);
+ [id(0x0000000a)] HRESULT SetEventInterest(
+ [in] InkCollectorEventInterest EventId,
+ [in] VARIANT_BOOL Listen);
+ };
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h
new file mode 100644
index 00000000..537e07a0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msiquery.h
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2002,2003 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSIQUERY_H
+#define __WINE_MSIQUERY_H
+
+#include <msi.h>
+
+typedef enum tagMSICONDITION
+{
+ MSICONDITION_FALSE = 0,
+ MSICONDITION_TRUE = 1,
+ MSICONDITION_NONE = 2,
+ MSICONDITION_ERROR = 3,
+} MSICONDITION;
+
+#define MSI_NULL_INTEGER 0x80000000
+
+typedef enum tagMSICOLINFO
+{
+ MSICOLINFO_NAMES = 0,
+ MSICOLINFO_TYPES = 1
+} MSICOLINFO;
+
+typedef enum tagMSICOSTTREE
+{
+ MSICOSTTREE_SELFONLY = 0,
+ MSICOSTTREE_CHILDREN = 1,
+ MSICOSTTREE_PARENTS = 2,
+ MSICOSTTREE_PRODUCT = 3,
+} MSICOSTTREE;
+
+typedef enum tagMSIMODIFY
+{
+ MSIMODIFY_SEEK = -1,
+ MSIMODIFY_REFRESH = 0,
+ MSIMODIFY_INSERT = 1,
+ MSIMODIFY_UPDATE = 2,
+ MSIMODIFY_ASSIGN = 3,
+ MSIMODIFY_REPLACE = 4,
+ MSIMODIFY_MERGE = 5,
+ MSIMODIFY_DELETE = 6,
+ MSIMODIFY_INSERT_TEMPORARY = 7,
+ MSIMODIFY_VALIDATE = 8,
+ MSIMODIFY_VALIDATE_NEW = 9,
+ MSIMODIFY_VALIDATE_FIELD = 10,
+ MSIMODIFY_VALIDATE_DELETE = 11
+} MSIMODIFY;
+
+#ifndef WINE_NO_UNICODE_MACROS
+#define MSIDBOPEN_READONLY (LPCTSTR)0
+#define MSIDBOPEN_TRANSACT (LPCTSTR)1
+#define MSIDBOPEN_DIRECT (LPCTSTR)2
+#define MSIDBOPEN_CREATE (LPCTSTR)3
+#define MSIDBOPEN_CREATEDIRECT (LPCTSTR)4
+#else
+#define MSIDBOPEN_READONLY (LPCWSTR)0
+#define MSIDBOPEN_TRANSACT (LPCWSTR)1
+#define MSIDBOPEN_DIRECT (LPCWSTR)2
+#define MSIDBOPEN_CREATE (LPCWSTR)3
+#define MSIDBOPEN_CREATEDIRECT (LPCWSTR)4
+#endif
+
+#define MSIDBOPEN_PATCHFILE 32 / sizeof(*MSIDBOPEN_READONLY)
+
+typedef enum tagMSIRUNMODE
+{
+ MSIRUNMODE_ADMIN = 0,
+ MSIRUNMODE_ADVERTISE = 1,
+ MSIRUNMODE_MAINTENANCE = 2,
+ MSIRUNMODE_ROLLBACKENABLED = 3,
+ MSIRUNMODE_LOGENABLED = 4,
+ MSIRUNMODE_OPERATIONS = 5,
+ MSIRUNMODE_REBOOTATEND = 6,
+ MSIRUNMODE_REBOOTNOW = 7,
+ MSIRUNMODE_CABINET = 8,
+ MSIRUNMODE_SOURCESHORTNAMES = 9,
+ MSIRUNMODE_TARGETSHORTNAMES = 10,
+ MSIRUNMODE_RESERVED11 = 11,
+ MSIRUNMODE_WINDOWS9X = 12,
+ MSIRUNMODE_ZAWENABLED = 13,
+ MSIRUNMODE_RESERVED14 = 14,
+ MSIRUNMODE_RESERVED15 = 15,
+ MSIRUNMODE_SCHEDULED = 16,
+ MSIRUNMODE_ROLLBACK = 17,
+ MSIRUNMODE_COMMIT = 18
+} MSIRUNMODE;
+
+typedef enum tagMSIDBERROR
+{
+ MSIDBERROR_INVALIDARG = -3,
+ MSIDBERROR_MOREDATA = -2,
+ MSIDBERROR_FUNCTIONERROR = -1,
+ MSIDBERROR_NOERROR = 0,
+ MSIDBERROR_DUPLICATEKEY = 1,
+ MSIDBERROR_REQUIRED = 2,
+ MSIDBERROR_BADLINK = 3,
+ MSIDBERROR_OVERFLOW = 4,
+ MSIDBERROR_UNDERFLOW = 5,
+ MSIDBERROR_NOTINSET = 6,
+ MSIDBERROR_BADVERSION = 7,
+ MSIDBERROR_BADCASE = 8,
+ MSIDBERROR_BADGUID = 9,
+ MSIDBERROR_BADWILDCARD = 10,
+ MSIDBERROR_BADIDENTIFIER = 11,
+ MSIDBERROR_BADLANGUAGE = 12,
+ MSIDBERROR_BADFILENAME = 13,
+ MSIDBERROR_BADPATH = 14,
+ MSIDBERROR_BADCONDITION = 15,
+ MSIDBERROR_BADFORMATTED = 16,
+ MSIDBERROR_BADTEMPLATE = 17,
+ MSIDBERROR_BADDEFAULTDIR = 18,
+ MSIDBERROR_BADREGPATH = 19,
+ MSIDBERROR_BADCUSTOMSOURCE = 20,
+ MSIDBERROR_BADPROPERTY = 21,
+ MSIDBERROR_MISSINGDATA = 22,
+ MSIDBERROR_BADCATEGORY = 23,
+ MSIDBERROR_BADKEYTABLE = 24,
+ MSIDBERROR_BADMAXMINVALUES = 25,
+ MSIDBERROR_BADCABINET = 26,
+ MSIDBERROR_BADSHORTCUT= 27,
+ MSIDBERROR_STRINGOVERFLOW = 28,
+ MSIDBERROR_BADLOCALIZEATTRIB = 29
+} MSIDBERROR;
+
+typedef enum tagMSIDBSTATE
+{
+ MSIDBSTATE_ERROR = -1,
+ MSIDBSTATE_READ = 0,
+ MSIDBSTATE_WRITE = 1
+} MSIDBSTATE;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* view manipulation */
+UINT WINAPI MsiViewFetch(MSIHANDLE,MSIHANDLE*);
+UINT WINAPI MsiViewExecute(MSIHANDLE,MSIHANDLE);
+UINT WINAPI MsiViewClose(MSIHANDLE);
+UINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE,LPCSTR,MSIHANDLE*);
+UINT WINAPI MsiDatabaseOpenViewW(MSIHANDLE,LPCWSTR,MSIHANDLE*);
+#define MsiDatabaseOpenView WINELIB_NAME_AW(MsiDatabaseOpenView)
+MSIDBERROR WINAPI MsiViewGetErrorA(MSIHANDLE,LPSTR,LPDWORD);
+MSIDBERROR WINAPI MsiViewGetErrorW(MSIHANDLE,LPWSTR,LPDWORD);
+#define MsiViewGetError WINELIB_NAME_AW(MsiViewGetError)
+
+MSIDBSTATE WINAPI MsiGetDatabaseState(MSIHANDLE);
+
+/* record manipulation */
+MSIHANDLE WINAPI MsiCreateRecord(UINT);
+UINT WINAPI MsiRecordClearData(MSIHANDLE);
+UINT WINAPI MsiRecordSetInteger(MSIHANDLE,UINT,int);
+UINT WINAPI MsiRecordSetStringA(MSIHANDLE,UINT,LPCSTR);
+UINT WINAPI MsiRecordSetStringW(MSIHANDLE,UINT,LPCWSTR);
+#define MsiRecordSetString WINELIB_NAME_AW(MsiRecordSetString)
+UINT WINAPI MsiRecordGetStringA(MSIHANDLE,UINT,LPSTR,LPDWORD);
+UINT WINAPI MsiRecordGetStringW(MSIHANDLE,UINT,LPWSTR,LPDWORD);
+#define MsiRecordGetString WINELIB_NAME_AW(MsiRecordGetString)
+UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE);
+int WINAPI MsiRecordGetInteger(MSIHANDLE,UINT);
+UINT WINAPI MsiRecordDataSize(MSIHANDLE,UINT);
+BOOL WINAPI MsiRecordIsNull(MSIHANDLE,UINT);
+UINT WINAPI MsiFormatRecordA(MSIHANDLE,MSIHANDLE,LPSTR,LPDWORD);
+UINT WINAPI MsiFormatRecordW(MSIHANDLE,MSIHANDLE,LPWSTR,LPDWORD);
+#define MsiFormatRecord WINELIB_NAME_AW(MsiFormatRecord)
+UINT WINAPI MsiRecordSetStreamA(MSIHANDLE,UINT,LPCSTR);
+UINT WINAPI MsiRecordSetStreamW(MSIHANDLE,UINT,LPCWSTR);
+#define MsiRecordSetStream WINELIB_NAME_AW(MsiRecordSetStream)
+UINT WINAPI MsiRecordReadStream(MSIHANDLE,UINT,char*,LPDWORD);
+
+UINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE,LPCSTR,MSIHANDLE*);
+UINT WINAPI MsiDatabaseGetPrimaryKeysW(MSIHANDLE,LPCWSTR,MSIHANDLE*);
+#define MsiDatabaseGetPrimaryKeys WINELIB_NAME_AW(MsiDatabaseGetPrimaryKeys)
+
+/* installing */
+UINT WINAPI MsiDoActionA(MSIHANDLE,LPCSTR );
+UINT WINAPI MsiDoActionW(MSIHANDLE,LPCWSTR );
+#define MsiDoAction WINELIB_NAME_AW(MsiDoAction)
+
+/* database transforms */
+UINT WINAPI MsiDatabaseApplyTransformA(MSIHANDLE,LPCSTR,int);
+UINT WINAPI MsiDatabaseApplyTransformW(MSIHANDLE,LPCWSTR,int);
+#define MsiDatabaseApplyTransform WINELIB_NAME_AW(MsiDatabaseApplyTransform)
+UINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE,MSIHANDLE,LPCSTR,int,int);
+UINT WINAPI MsiDatabaseGenerateTransformW(MSIHANDLE,MSIHANDLE,LPCWSTR,int,int);
+#define MsiDatabaseGenerateTransform WINELIB_NAME_AW(MsiDatabaseGenerateTransform)
+
+UINT WINAPI MsiDatabaseCommit(MSIHANDLE);
+
+/* install state */
+UINT WINAPI MsiGetFeatureStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*);
+UINT WINAPI MsiGetFeatureStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*);
+#define MsiGetFeatureState WINELIB_NAME_AW(MsiGetFeatureState)
+UINT WINAPI MsiGetFeatureValidStatesA(MSIHANDLE,LPCSTR,LPDWORD);
+UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE,LPCWSTR,LPDWORD);
+#define MsiGetFeatureValidStates WINELIB_NAME_AW(MsiGetFeatureValidStates)
+UINT WINAPI MsiSetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE);
+UINT WINAPI MsiSetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE);
+#define MsiSetComponentState WINELIB_NAME_AW(MsiSetComponentState)
+UINT WINAPI MsiGetComponentStateA(MSIHANDLE,LPCSTR,INSTALLSTATE*,INSTALLSTATE*);
+UINT WINAPI MsiGetComponentStateW(MSIHANDLE,LPCWSTR,INSTALLSTATE*,INSTALLSTATE*);
+#define MsiGetComponentState WINELIB_NAME_AW(MsiGetComponentState)
+
+MSICONDITION WINAPI MsiEvaluateConditionA(MSIHANDLE,LPCSTR);
+MSICONDITION WINAPI MsiEvaluateConditionW(MSIHANDLE,LPCWSTR);
+#define MsiEvaluateCondition WINELIB_NAME_AW(MsiEvaluateCondition)
+
+/* property functions */
+UINT WINAPI MsiGetPropertyA(MSIHANDLE, LPCSTR, LPSTR, LPDWORD);
+UINT WINAPI MsiGetPropertyW(MSIHANDLE, LPCWSTR, LPWSTR, LPDWORD);
+#define MsiGetProperty WINELIB_NAME_AW(MsiGetProperty)
+
+UINT WINAPI MsiSetPropertyA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiSetPropertyW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define MsiSetProperty WINELIB_NAME_AW(MsiSetProperty)
+
+UINT WINAPI MsiGetTargetPathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
+UINT WINAPI MsiGetTargetPathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define MsiGetTargetPath WINELIB_NAME_AW(MsiGetTargetPath)
+
+UINT WINAPI MsiSetTargetPathA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiSetTargetPathW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define MsiSetTargetPath WINELIB_NAME_AW(MsiSetTargetPath)
+
+UINT WINAPI MsiGetSourcePathA(MSIHANDLE,LPCSTR,LPSTR,LPDWORD);
+UINT WINAPI MsiGetSourcePathW(MSIHANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define MsiGetSourcePath WINELIB_NAME_AW(MsiGetSourcePath)
+
+MSIHANDLE WINAPI MsiGetActiveDatabase(MSIHANDLE);
+
+UINT WINAPI MsiViewGetColumnInfo(MSIHANDLE, MSICOLINFO, MSIHANDLE*);
+INT WINAPI MsiProcessMessage(MSIHANDLE, INSTALLMESSAGE, MSIHANDLE);
+
+UINT WINAPI MsiSetFeatureAttributesA(MSIHANDLE, LPCSTR, DWORD);
+UINT WINAPI MsiSetFeatureAttributesW(MSIHANDLE, LPCWSTR, DWORD);
+#define MsiSetFeatureAttributes WINELIB_NAME_AW(MsiSetFeatureAttributes)
+
+UINT WINAPI MsiSetFeatureStateA(MSIHANDLE, LPCSTR, INSTALLSTATE);
+UINT WINAPI MsiSetFeatureStateW(MSIHANDLE, LPCWSTR, INSTALLSTATE);
+#define MsiSetFeatureState WINELIB_NAME_AW(MsiSetFeatureState)
+
+UINT WINAPI MsiPreviewDialogA(MSIHANDLE, LPCSTR);
+UINT WINAPI MsiPreviewDialogW(MSIHANDLE, LPCWSTR);
+#define MsiPreviewDialog WINELIB_NAME_AW(MsiPreviewDialog)
+
+UINT WINAPI MsiPreviewBillboardA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiPreviewBillboardW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define MsiPreviewBillboard WINELIB_NAME_AW(MsiPreviewBillboard)
+
+UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE, MSIHANDLE, LPCSTR, int, int);
+UINT WINAPI MsiCreateTransformSummaryInfoW(MSIHANDLE, MSIHANDLE, LPCWSTR, int, int);
+#define MsiCreateTransformSummaryInfo WINELIB_NAME_AW(MsiCreateTransformSummaryInfo)
+
+UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE, LPCSTR, UINT, MSIHANDLE *);
+UINT WINAPI MsiGetSummaryInformationW(MSIHANDLE, LPCWSTR, UINT, MSIHANDLE *);
+#define MsiGetSummaryInformation WINELIB_NAME_AW(MsiGetSummaryInformation)
+
+UINT WINAPI MsiSummaryInfoGetPropertyA(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPSTR,LPDWORD);
+UINT WINAPI MsiSummaryInfoGetPropertyW(MSIHANDLE,UINT,PUINT,LPINT,FILETIME*,LPWSTR,LPDWORD);
+#define MsiSummaryInfoGetProperty WINELIB_NAME_AW(MsiSummaryInfoGetProperty)
+
+UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCSTR);
+UINT WINAPI MsiSummaryInfoSetPropertyW(MSIHANDLE, UINT, UINT, INT, FILETIME*, LPCWSTR);
+#define MsiSummaryInfoSetProperty WINELIB_NAME_AW(MsiSummaryInfoSetProperty)
+
+UINT WINAPI MsiDatabaseExportA(MSIHANDLE, LPCSTR, LPCSTR, LPCSTR);
+UINT WINAPI MsiDatabaseExportW(MSIHANDLE, LPCWSTR, LPCWSTR, LPCWSTR);
+#define MsiDatabaseExport WINELIB_NAME_AW(MsiDatabaseExport)
+
+UINT WINAPI MsiDatabaseImportA(MSIHANDLE, LPCSTR, LPCSTR);
+UINT WINAPI MsiDatabaseImportW(MSIHANDLE, LPCWSTR, LPCWSTR);
+#define MsiDatabaseImport WINELIB_NAME_AW(MsiDatabaseImport)
+
+UINT WINAPI MsiOpenDatabaseW(LPCWSTR, LPCWSTR, MSIHANDLE*);
+UINT WINAPI MsiOpenDatabaseA(LPCSTR, LPCSTR, MSIHANDLE*);
+#define MsiOpenDatabase WINELIB_NAME_AW(MsiOpenDatabase)
+
+MSICONDITION WINAPI MsiDatabaseIsTablePersistentA(MSIHANDLE, LPCSTR);
+MSICONDITION WINAPI MsiDatabaseIsTablePersistentW(MSIHANDLE, LPCWSTR);
+#define MsiDatabaseIsTablePersistent WINELIB_NAME_AW(MsiDatabaseIsTablePersistent)
+
+UINT WINAPI MsiSequenceA(MSIHANDLE, LPCSTR, INT);
+UINT WINAPI MsiSequenceW(MSIHANDLE, LPCWSTR, INT);
+#define MsiSequence WINELIB_NAME_AW(MsiSequence)
+
+UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE);
+UINT WINAPI MsiSummaryInfoGetPropertyCount(MSIHANDLE,PUINT);
+
+UINT WINAPI MsiEnableUIPreview(MSIHANDLE, MSIHANDLE*);
+BOOL WINAPI MsiGetMode(MSIHANDLE, MSIRUNMODE);
+UINT WINAPI MsiSetMode(MSIHANDLE, MSIRUNMODE, BOOL);
+
+UINT WINAPI MsiViewModify(MSIHANDLE, MSIMODIFY, MSIHANDLE);
+
+UINT WINAPI MsiGetFeatureCostA(MSIHANDLE, LPCSTR, MSICOSTTREE, INSTALLSTATE, LPINT);
+UINT WINAPI MsiGetFeatureCostW(MSIHANDLE, LPCWSTR, MSICOSTTREE, INSTALLSTATE, LPINT);
+#define MsiGetFeatureCost WINELIB_NAME_AW(MsiGetFeatureCost)
+
+LANGID WINAPI MsiGetLanguage(MSIHANDLE);
+
+UINT WINAPI MsiSetInstallLevel(MSIHANDLE, int);
+
+MSIHANDLE WINAPI MsiGetLastErrorRecord(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MSIQUERY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h
new file mode 100644
index 00000000..0621f2a9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mssip.h
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSSIP_H
+#define __WINE_MSSIP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/**********************************************************************/
+
+typedef CRYPT_HASH_BLOB CRYPT_DIGEST_DATA;
+
+/**********************************************************************/
+
+#define MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE 0x00010000
+#define MSSIP_FLAGS_USE_CATALOG 0x00020000
+
+#define SPC_INC_PE_RESOURCES_FLAG 0x80
+#define SPC_INC_PE_DEBUG_INFO_FLAG 0x40
+#define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20
+
+#define MSSIP_ADDINFO_NONE 0
+#define MSSIP_ADDINFO_FLAT 1
+#define MSSIP_ADDINFO_CATMEMBER 2
+#define MSSIP_ADDINFO_BLOB 3
+#define MSSIP_ADDINFO_NONMSSIP 500
+
+#define SIP_MAX_MAGIC_NUMBER 4
+
+/**********************************************************************/
+
+#include <pshpack8.h>
+typedef struct SIP_SUBJECTINFO_ {
+ DWORD cbSize;
+ GUID *pgSubjectType;
+ HANDLE hFile;
+ LPCWSTR pwsFileName;
+ LPCWSTR pwsDisplayName;
+
+ DWORD dwReserved1;
+ DWORD dwIntVersion;
+
+ HCRYPTPROV hProv;
+ CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
+ DWORD dwFlags;
+ DWORD dwEncodingType;
+ DWORD dwReserved2;
+ DWORD fdwCAPISettings;
+ DWORD fdwSecuritySettings;
+ DWORD dwIndex;
+
+ DWORD dwUnionChoice;
+ union {
+ struct MS_ADDINFO_FLAT_ *psFlat;
+ struct MS_ADDINFO_CATALOGMEMBER_ *psCatMember;
+ struct MS_ADDINFO_BLOB_ *psBlob;
+ } DUMMYUNIONNAME;
+
+ LPVOID pClientData;
+} SIP_SUBJECTINFO, *LPSIP_SUBJECTINFO;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct MS_ADDINFO_FLAT_ {
+ DWORD cbStruct;
+
+ struct SIP_INDIRECT_DATA_ *pIndirectData;
+} MS_ADDINFO_FLAT, *PMS_ADDINFO_FLAT;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct MS_ADDINFO_CATALOGMEMBER_ {
+ DWORD cbStruct;
+
+ struct CRYPTCATSTORE_ *pStore;
+ struct CRYPTCATMEMBER_ *pMember;
+} MS_ADDINFO_CATALOGMEMBER, *PMS_ADDINFO_CATALOGMEMBER;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct MS_ADDINFO_BLOB_ {
+ DWORD cbStruct;
+
+ DWORD cbMemObject;
+ BYTE *pbMemObject;
+
+ DWORD cbMemSignedMsg;
+ BYTE *pbMemSignedMsg;
+} MS_ADDINFO_BLOB, *PMS_ADDINFO_BLOB;
+#include <poppack.h>
+
+#include <pshpack8.h>
+typedef struct SIP_INDIRECT_DATA_ {
+ CRYPT_ATTRIBUTE_TYPE_VALUE Data;
+ CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
+ CRYPT_HASH_BLOB Digest;
+} SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA;
+#include <poppack.h>
+
+typedef BOOL (WINAPI * pCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *);
+typedef BOOL (WINAPI * pCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *);
+typedef BOOL (WINAPI * pCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *);
+typedef BOOL (WINAPI * pCryptSIPVerifyIndirectData)(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *);
+typedef BOOL (WINAPI * pCryptSIPRemoveSignedDataMsg)(SIP_SUBJECTINFO *,DWORD);
+
+#include <pshpack8.h>
+typedef struct SIP_DISPATCH_INFO_ {
+ DWORD cbSize;
+
+ HANDLE hSIP;
+
+ pCryptSIPGetSignedDataMsg pfGet;
+ pCryptSIPPutSignedDataMsg pfPut;
+ pCryptSIPCreateIndirectData pfCreate;
+ pCryptSIPVerifyIndirectData pfVerify;
+ pCryptSIPRemoveSignedDataMsg pfRemove;
+} SIP_DISPATCH_INFO, *LPSIP_DISPATCH_INFO;
+#include <poppack.h>
+
+typedef BOOL (WINAPI *pfnIsFileSupported)(HANDLE,GUID *);
+typedef BOOL (WINAPI *pfnIsFileSupportedName)(WCHAR *,GUID *);
+
+#include <pshpack8.h>
+typedef struct SIP_ADD_NEWPROVIDER_
+{
+ DWORD cbStruct;
+
+ GUID *pgSubject;
+
+ WCHAR *pwszDLLFileName;
+ WCHAR *pwszMagicNumber;
+
+ WCHAR *pwszIsFunctionName;
+
+ WCHAR *pwszGetFuncName;
+ WCHAR *pwszPutFuncName;
+ WCHAR *pwszCreateFuncName;
+ WCHAR *pwszVerifyFuncName;
+ WCHAR *pwszRemoveFuncName;
+
+ WCHAR *pwszIsFunctionNameFmt2;
+} SIP_ADD_NEWPROVIDER, *PSIP_ADD_NEWPROVIDER;
+#include <poppack.h>
+
+/**********************************************************************/
+
+BOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD *,BYTE *);
+BOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *,DWORD,DWORD *,DWORD,BYTE *);
+BOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *,DWORD *,SIP_INDIRECT_DATA *);
+BOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *,SIP_INDIRECT_DATA *);
+BOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *,DWORD);
+
+BOOL WINAPI CryptSIPLoad(const GUID *,DWORD,SIP_DISPATCH_INFO *);
+BOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR,HANDLE,GUID *);
+BOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR,HANDLE,GUID *);
+BOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *);
+BOOL WINAPI CryptSIPRemoveProvider(GUID *);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_MSSIP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl
new file mode 100644
index 00000000..ed37cac3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstask.idl
@@ -0,0 +1,402 @@
+/*
+ * Task Scheduler Service interface
+ *
+ * Copyright (C) 2008 Google (Roy Shea)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "oleidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+cpp_quote("#define TASK_SUNDAY 0x1")
+cpp_quote("#define TASK_MONDAY 0x2")
+cpp_quote("#define TASK_TUESDAY 0x4")
+cpp_quote("#define TASK_WEDNESDAY 0x8")
+cpp_quote("#define TASK_THURSDAY 0x10")
+cpp_quote("#define TASK_FRIDAY 0x20")
+cpp_quote("#define TASK_SATURDAY 0x40")
+
+cpp_quote("#define TASK_FIRST_WEEK 1")
+cpp_quote("#define TASK_SECOND_WEEK 2")
+cpp_quote("#define TASK_THIRD_WEEK 3")
+cpp_quote("#define TASK_FOURTH_WEEK 4")
+cpp_quote("#define TASK_LAST_WEEK 5")
+
+cpp_quote("#define TASK_JANUARY 0x1")
+cpp_quote("#define TASK_FEBRUARY 0x2")
+cpp_quote("#define TASK_MARCH 0x4")
+cpp_quote("#define TASK_APRIL 0x8")
+cpp_quote("#define TASK_MAY 0x10")
+cpp_quote("#define TASK_JUNE 0x20")
+cpp_quote("#define TASK_JULY 0x40")
+cpp_quote("#define TASK_AUGUST 0x80")
+cpp_quote("#define TASK_SEPTEMBER 0x100")
+cpp_quote("#define TASK_OCTOBER 0x200")
+cpp_quote("#define TASK_NOVEMBER 0x400")
+cpp_quote("#define TASK_DECEMBER 0x800")
+
+cpp_quote("#define TASK_TRIGGER_FLAG_HAS_END_DATE 0x1")
+cpp_quote("#define TASK_TRIGGER_FLAG_KILL_AT_DURATION_END 0x2")
+cpp_quote("#define TASK_TRIGGER_FLAG_DISABLED 0x4")
+
+[
+ local,
+ object,
+ uuid(148BD528-A2AB-11CE-B11F-00AA00530503),
+ pointer_default(unique)
+]
+interface IEnumWorkItems : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] LPWSTR **rgpwszNames,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumWorkItems **ppEnumWorkItems);
+}
+
+cpp_quote("#ifndef _HPROPSHEETPAGE_DEFINED")
+typedef struct _PSP *HPROPSHEETPAGE;
+cpp_quote("#define _HPROPSHEETPAGE_DEFINED")
+cpp_quote("#endif")
+
+[
+ local,
+ object,
+ uuid(4086658a-cbbb-11cf-b604-00c04fd8d565),
+ pointer_default(unique)
+]
+interface IProvideTaskPage : IUnknown
+{
+ typedef enum _TASKPAGE {
+ TASKPAGE_TASK = 0,
+ TASKPAGE_SCHEDULE = 1,
+ TASKPAGE_SETTINGS = 2
+ } TASKPAGE;
+
+ HRESULT GetPage(
+ [in] TASKPAGE tpType,
+ [in] BOOL fPersistChanges,
+ [out] HPROPSHEETPAGE *phPage);
+}
+
+[
+ local,
+ object,
+ uuid(148BD52B-A2AB-11CE-B11F-00AA00530503),
+ pointer_default(unique)
+]
+interface ITaskTrigger : IUnknown
+{
+ typedef enum _TASK_TRIGGER_TYPE {
+ TASK_TIME_TRIGGER_ONCE = 0,
+ TASK_TIME_TRIGGER_DAILY = 1,
+ TASK_TIME_TRIGGER_WEEKLY = 2,
+ TASK_TIME_TRIGGER_MONTHLYDATE = 3,
+ TASK_TIME_TRIGGER_MONTHLYDOW = 4,
+ TASK_EVENT_TRIGGER_ON_IDLE = 5,
+ TASK_EVENT_TRIGGER_AT_SYSTEMSTART = 6,
+ TASK_EVENT_TRIGGER_AT_LOGON = 7
+ } TASK_TRIGGER_TYPE, *PTASK_TRIGGER_TYPE;
+
+ typedef struct _DAILY {
+ WORD DaysInterval;
+ } DAILY;
+
+ typedef struct _WEEKLY {
+ WORD WeeksInterval;
+ WORD rgfDaysOfTheWeek;
+ } WEEKLY;
+
+ typedef struct _MONTHLYDATE {
+ DWORD rgfDays;
+ WORD rgfMonths;
+ } MONTHLYDATE;
+
+ typedef struct _MONTHLYDOW {
+ WORD wWhichWeek;
+ WORD rgfDaysOfTheWeek;
+ WORD rgfMonths;
+ } MONTHLYDOW;
+
+ typedef union _TRIGGER_TYPE_UNION {
+ DAILY Daily;
+ WEEKLY Weekly;
+ MONTHLYDATE MonthlyDate;
+ MONTHLYDOW MonthlyDOW;
+ } TRIGGER_TYPE_UNION;
+
+ typedef struct _TASK_TRIGGER {
+ WORD cbTriggerSize;
+ WORD Reserved1;
+ WORD wBeginYear;
+ WORD wBeginMonth;
+ WORD wBeginDay;
+ WORD wEndYear;
+ WORD wEndMonth;
+ WORD wEndDay;
+ WORD wStartHour;
+ WORD wStartMinute;
+ DWORD MinutesDuration;
+ DWORD MinutesInterval;
+ DWORD rgFlags;
+ TASK_TRIGGER_TYPE TriggerType;
+ TRIGGER_TYPE_UNION Type;
+ WORD Reserved2;
+ WORD wRandomMinutesInterval;
+ } TASK_TRIGGER, *PTASK_TRIGGER;
+
+ HRESULT SetTrigger(
+ [in] const PTASK_TRIGGER pTrigger);
+
+ HRESULT GetTrigger(
+ [out] PTASK_TRIGGER pTrigger);
+
+ HRESULT GetTriggerString(
+ [out] LPWSTR *ppwszTrigger);
+}
+
+[
+ local,
+ object,
+ uuid(a6b952f0-a4b1-11d0-997d-00aa006887ec),
+ pointer_default(unique)
+]
+interface IScheduledWorkItem : IUnknown
+{
+ HRESULT CreateTrigger(
+ [out] WORD *piNewTrigger,
+ [out] ITaskTrigger **ppTrigger);
+
+ HRESULT DeleteTrigger(
+ [in] WORD iTrigger);
+
+ HRESULT GetTriggerCount(
+ [out] WORD *plCount);
+
+ HRESULT GetTrigger(
+ [in] WORD iTrigger,
+ [out] ITaskTrigger **ppTrigger);
+
+ HRESULT GetTriggerString(
+ [in] WORD iTrigger,
+ [out] LPWSTR *ppwszTrigger);
+
+ HRESULT GetRunTimes(
+ [in] const LPSYSTEMTIME pstBegin,
+ [in] const LPSYSTEMTIME pstEnd,
+ [in, out] WORD *pCount,
+ [out] LPSYSTEMTIME *rgstTaskTimes);
+
+ HRESULT GetNextRunTime(
+ [out] SYSTEMTIME *pstNextRun);
+
+ HRESULT SetIdleWait(
+ [in] WORD wIdleMinutes,
+ [in] WORD wDeadlineMinutes);
+
+ HRESULT GetIdleWait(
+ [out] WORD *pwIdleMinutes,
+ [out] WORD *pwDeadlineMinutes);
+
+ HRESULT Run();
+
+ HRESULT Terminate();
+
+ HRESULT EditWorkItem(
+ [in] HWND hParent,
+ [in] DWORD dwReserved);
+
+ HRESULT GetMostRecentRunTime(
+ [out] SYSTEMTIME *pstLastRun);
+
+ HRESULT GetStatus(
+ [out] HRESULT *phrStatus);
+
+ HRESULT GetExitCode(
+ [out] DWORD *pdwExitCode);
+
+ HRESULT SetComment(
+ [in] LPCWSTR pwszComment);
+
+ HRESULT GetComment(
+ [out] LPWSTR *ppwszComment);
+
+ HRESULT SetCreator(
+ LPCWSTR pwszCreator);
+
+ HRESULT GetCreator(
+ [out] LPWSTR *ppwszCreator);
+
+ HRESULT SetWorkItemData(
+ [in] WORD cBytes,
+ [in] BYTE rgbData[]);
+
+ HRESULT GetWorkItemData(
+ [out] WORD *pcBytes,
+ [out] BYTE **ppBytes);
+
+ HRESULT SetErrorRetryCount(
+ WORD wRetryCount);
+
+ HRESULT GetErrorRetryCount(
+ [out] WORD *pwRetryCount);
+
+ HRESULT SetErrorRetryInterval(
+ WORD wRetryInterval);
+
+ HRESULT GetErrorRetryInterval(
+ [out] WORD *pwRetryInterval);
+
+ HRESULT SetFlags(
+ DWORD dwFlags);
+
+ HRESULT GetFlags(
+ [out] DWORD *pdwFlags);
+
+ HRESULT SetAccountInformation(
+ [in] LPCWSTR pwszAccountName,
+ [in] LPCWSTR pwszPassword);
+
+ HRESULT GetAccountInformation(
+ [out] LPWSTR *ppwszAccountName);
+}
+
+[
+ local,
+ object,
+ uuid(148BD524-A2AB-11CE-B11F-00AA00530503),
+ pointer_default(unique)
+]
+interface ITask : IScheduledWorkItem
+{
+ HRESULT SetApplicationName(
+ [in] LPCWSTR pwszApplicationName);
+
+ HRESULT GetApplicationName(
+ [out] LPWSTR *ppwszApplicationName);
+
+ HRESULT SetParameters(
+ [in] LPCWSTR pwszParameters);
+
+ HRESULT GetParameters(
+ [out] LPWSTR *ppwszParameters);
+
+ HRESULT SetWorkingDirectory(
+ [in] LPCWSTR pwszWorkingDirectory);
+
+ HRESULT GetWorkingDirectory(
+ [in] LPWSTR *ppwszWorkingDirectory);
+
+ HRESULT SetPriority(
+ [in] DWORD dwPriority);
+
+ HRESULT GetPriority(
+ [out] DWORD *pdwPriority);
+
+ HRESULT SetTaskFlags(
+ [in] DWORD dwFlags);
+
+ HRESULT GetTaskFlags(
+ [out] DWORD *pdwFlags);
+
+ HRESULT SetMaxRunTime(
+ [in] DWORD dwMaxRunTime);
+
+ HRESULT GetMaxRunTime(
+ [out] DWORD *pdwMaxRunTime);
+}
+
+[
+ local,
+ object,
+ uuid(148BD527-A2AB-11CE-B11F-00AA00530503),
+ pointer_default(unique)
+]
+interface ITaskScheduler : IUnknown
+{
+ HRESULT SetTargetComputer(
+ [in] LPCWSTR pwszComputer);
+
+ HRESULT GetTargetComputer(
+ [out] LPWSTR *ppwszComputer);
+
+ HRESULT Enum(
+ [out] IEnumWorkItems **ppEnumTasks);
+
+ HRESULT Activate(
+ [in] LPCWSTR pwszName,
+ [in] REFIID riid,
+ [out] IUnknown **ppunk);
+
+ HRESULT Delete(
+ [in] LPCWSTR pwszName);
+
+ HRESULT NewWorkItem(
+ [in] LPCWSTR pwszTaskName,
+ [in] REFCLSID rclsid,
+ [in] REFIID riid,
+ [out] IUnknown **ppunk);
+
+ HRESULT AddWorkItem(
+ [in] LPCWSTR pwszTaskName,
+ [in] IScheduledWorkItem *pWorkItem);
+
+ HRESULT IsOfType(
+ [in] LPCWSTR pwszName,
+ [in] REFIID riid);
+}
+
+[
+ threading(both),
+ uuid(148BD52A-A2AB-11CE-B11F-00AA00530503)
+]
+coclass CTaskScheduler
+{
+ [default] interface ITaskScheduler;
+};
+
+
+[
+ threading(both),
+ uuid(148BD520-A2AB-11CE-B11F-00AA00530503)
+]
+coclass CTask
+{
+ [default] interface ITask;
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h
new file mode 100644
index 00000000..6429b851
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mstcpip.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2008 Hans Leidekker for CodeWeavers.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MSTCPIP_H
+#define __WINE_MSTCPIP_H
+
+#include <nldef.h>
+
+struct tcp_keepalive
+{
+ ULONG onoff;
+ ULONG keepalivetime;
+ ULONG keepaliveinterval;
+};
+
+#ifndef USE_WS_PREFIX
+
+#define SIO_RCVALL _WSAIOW(IOC_VENDOR, 1)
+#define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR, 2)
+#define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR, 3)
+#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR, 4)
+#define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR, 5)
+#define SIO_UCAST_IF _WSAIOW(IOC_VENDOR, 6)
+#define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR, 7)
+#define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR, 8)
+#define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR, 9)
+#define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR, 10)
+#define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR, 11)
+
+#define RCVALL_OFF 0
+#define RCVALL_ON 1
+#define RCVALL_SOCKETLEVELONLY 2
+
+#else
+
+#define WS_SIO_RCVALL _WSAIOW(WS_IOC_VENDOR, 1)
+#define WS_SIO_RCVALL_MCAST _WSAIOW(WS_IOC_VENDOR, 2)
+#define WS_SIO_RCVALL_IGMPMCAST _WSAIOW(WS_IOC_VENDOR, 3)
+#define WS_SIO_KEEPALIVE_VALS _WSAIOW(WS_IOC_VENDOR, 4)
+#define WS_SIO_ABSORB_RTRALERT _WSAIOW(WS_IOC_VENDOR, 5)
+#define WS_SIO_UCAST_IF _WSAIOW(WS_IOC_VENDOR, 6)
+#define WS_SIO_LIMIT_BROADCASTS _WSAIOW(WS_IOC_VENDOR, 7)
+#define WS_SIO_INDEX_BIND _WSAIOW(WS_IOC_VENDOR, 8)
+#define WS_SIO_INDEX_MCASTIF _WSAIOW(WS_IOC_VENDOR, 9)
+#define WS_SIO_INDEX_ADD_MCAST _WSAIOW(WS_IOC_VENDOR, 10)
+#define WS_SIO_INDEX_DEL_MCAST _WSAIOW(WS_IOC_VENDOR, 11)
+
+#define WS_RCVALL_OFF 0
+#define WS_RCVALL_ON 1
+#define WS_RCVALL_SOCKETLEVELONLY 2
+
+#endif /* USE_WS_PREFIX */
+
+#endif /* __WINE_MSTCPIP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h
new file mode 100644
index 00000000..c13067bd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/assert.h
@@ -0,0 +1,46 @@
+/*
+ * Assert support
+ *
+ * Copyright 2011 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#undef assert
+#ifdef NDEBUG
+#define assert(_expr) ((void)0)
+#else
+extern void __cdecl _assert(const char *, const char *, unsigned int);
+#define assert(_expr) (void)((!!(_expr)) || (_assert(#_expr, __FILE__, __LINE__), 0))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h
new file mode 100644
index 00000000..18f3d24b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/conio.h
@@ -0,0 +1,63 @@
+/*
+ * Console I/O definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_CONIO_H
+#define __WINE_CONIO_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char* __cdecl _cgets(char*);
+int __cdecl _cprintf(const char*,...);
+int __cdecl _cputs(const char*);
+int __cdecl _cscanf(const char*,...);
+int __cdecl _getch(void);
+int __cdecl _getche(void);
+int __cdecl _kbhit(void);
+int __cdecl _putch(int);
+int __cdecl _ungetch(int);
+
+#ifdef _M_IX86
+int __cdecl _inp(unsigned short);
+__msvcrt_ulong __cdecl _inpd(unsigned short);
+unsigned short __cdecl _inpw(unsigned short);
+int __cdecl _outp(unsigned short, int);
+__msvcrt_ulong __cdecl _outpd(unsigned short, __msvcrt_ulong);
+unsigned short __cdecl _outpw(unsigned short, unsigned short);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline char* cgets(char* str) { return _cgets(str); }
+static inline int cputs(const char* str) { return _cputs(str); }
+static inline int getch(void) { return _getch(); }
+static inline int getche(void) { return _getche(); }
+static inline int kbhit(void) { return _kbhit(); }
+static inline int putch(int c) { return _putch(c); }
+static inline int ungetch(int c) { return _ungetch(c); }
+#ifdef _M_IX86
+static inline int inp(unsigned short i) { return _inp(i); }
+static inline unsigned short inpw(unsigned short i) { return _inpw(i); }
+static inline int outp(unsigned short i, int j) { return _outp(i, j); }
+static inline unsigned short outpw(unsigned short i, unsigned short j) { return _outpw(i, j); }
+#endif
+
+#if defined(__GNUC__) && (__GNUC__ < 4)
+extern int __cdecl cprintf(const char*,...) __attribute__((alias("_cprintf"),format(printf,1,2)));
+extern int __cdecl cscanf(const char*,...) __attribute__((alias("_cscanf"),format(scanf,1,2)));
+#else
+#define cprintf _cprintf
+#define cscanf _cscanf
+#endif /* __GNUC__ */
+
+#endif /* __WINE_CONIO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h
new file mode 100644
index 00000000..8e5edb9f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdbg.h
@@ -0,0 +1,140 @@
+/*
+ * Debug API
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CRTDBG_H_
+#define __WINE_CRTDBG_H_
+
+#include <crtdefs.h>
+
+/* The debug API is not implemented in Winelib.
+ * Redirect everything to the regular APIs.
+ */
+
+#define _CRT_WARN 0
+#define _CRT_ERROR 1
+#define _CRT_ASSERT 2
+#define _CRT_ERRCNT 3
+
+#define _FREE_BLOCK 0
+#define _NORMAL_BLOCK 1
+#define _CRT_BLOCK 2
+#define _IGNORE_BLOCK 3
+#define _CLIENT_BLOCK 4
+#define _MAX_BLOCKS 5
+
+#define _BLOCK_TYPE(block) (block & 0xFFFF)
+#define _BLOCK_SUBTYPE(block) (block >> 16 & 0xFFFF)
+
+typedef struct _CrtMemState
+{
+ struct _CrtMemBlockHeader* pBlockHeader;
+ __msvcrt_ulong lCounts[_MAX_BLOCKS];
+ __msvcrt_ulong lSizes[_MAX_BLOCKS];
+ __msvcrt_ulong lHighWaterCount;
+ __msvcrt_ulong lTotalCount;
+} _CrtMemState;
+
+
+#ifndef _DEBUG
+
+#define _ASSERT(expr) ((void)0)
+#define _ASSERTE(expr) ((void)0)
+#define _CrtDbgBreak() ((void)0)
+
+#define _CrtCheckMemory() ((int)1)
+#define _CrtDbgReport(...) ((int)0)
+#define _CrtDumpMemoryLeaks() ((int)0)
+#define _CrtSetBreakAlloc(a) ((__msvcrt_long)0)
+#define _CrtSetDbgFlag(f) ((int)0)
+#define _CrtSetDumpClient(f) ((void)0)
+#define _CrtSetReportMode(t,m) ((int)0)
+
+#else /* _DEBUG */
+
+#include <assert.h>
+#define _ASSERT(expr) assert(expr)
+#define _ASSERTE(expr) assert(expr)
+#if defined(__GNUC__) && defined(__i386__)
+#define _CrtDbgBreak() __asm__ ("\tint $0x3\n")
+#else
+#define _CrtDbgBreak() ((void)0)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int _crtAssertBusy;
+extern int _crtBreakAlloc;
+extern int _crtDbgFlag;
+
+int __cdecl _CrtCheckMemory(void);
+int __cdecl _CrtDbgReport(int reportType, const char *filename, int linenumber,
+ const char *moduleName, const char *format, ...);
+int __cdecl _CrtDumpMemoryLeaks(void);
+int __cdecl _CrtSetBreakAlloc(int);
+int __cdecl _CrtSetDbgFlag(int);
+void *__cdecl _CrtSetDumpClient(void *dumpClient);
+int __cdecl _CrtSetReportMode(int reportType, int reportMode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DEBUG */
+
+#define _CrtDoForAllClientObjects(f,c) ((void)0)
+#define _CrtIsMemoryBlock(p,s,r,f,l) ((int)1)
+#define _CrtIsValidHeapPointer(p) ((int)1)
+#define _CrtIsValidPointer(p,s,a) ((int)1)
+#define _CrtMemCheckpoint(s) ((void)0)
+#define _CrtMemDifference(s1,s2,s3) ((int)0)
+#define _CrtMemDumpAllObjectsSince(s) ((void)0)
+#define _CrtMemDumpStatistics(s) ((void)0)
+#define _CrtSetAllocHook(f) ((void)0)
+
+#define _RPT0(t,m)
+#define _RPT1(t,m,p1)
+#define _RPT2(t,m,p1,p2)
+#define _RPT3(t,m,p1,p2,p3)
+#define _RPT4(t,m,p1,p2,p3,p4)
+#define _RPTF0(t,m)
+#define _RPTF1(t,m,p1)
+#define _RPTF2(t,m,p1,p2)
+#define _RPTF3(t,m,p1,p2,p3)
+#define _RPTF4(t,m,p1,p2,p3,p4)
+
+
+#define _malloc_dbg(s,t,f,l) malloc(s)
+#define _calloc_dbg(c,s,t,f,l) calloc(c,s)
+#define _expand_dbg(p,s,t,f,l) _expand(p,s)
+#define _free_dbg(p,t) free(p)
+#define _realloc_dbg(p,s,t,f,l) realloc(p,s)
+
+#endif /* __WINE_CRTDBG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h
new file mode 100644
index 00000000..f2764163
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/crtdefs.h
@@ -0,0 +1,248 @@
+/*
+ * CRT definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_CRTDEFS_H
+#define __WINE_CRTDEFS_H
+
+#ifndef __WINE_USE_MSVCRT
+#define __WINE_USE_MSVCRT
+#endif
+
+#ifdef __WINE_WINE_PORT_H
+# error You cannot use both wine/port.h and msvcrt headers
+#endif
+
+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__aarch64__)) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+#if !defined(_MSC_VER) && !defined(__int64)
+# if defined(_WIN64) && !defined(__MINGW64__)
+# define __int64 long
+# else
+# define __int64 long long
+# endif
+#endif
+
+#ifndef __stdcall
+# ifdef __i386__
+# ifdef __GNUC__
+# ifdef __APPLE__ /* Mac OS X uses a 16-byte aligned stack and not a 4-byte one */
+# define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))
+# else
+# define __stdcall __attribute__((__stdcall__))
+# endif
+# elif defined(_MSC_VER)
+ /* Nothing needs to be done. __stdcall already exists */
+# else
+# error You need to define __stdcall for your compiler
+# endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+# define __stdcall __attribute__((ms_abi))
+# else
+# define __stdcall
+# endif
+#endif /* __stdcall */
+
+#ifndef __cdecl
+# if defined(__i386__) && defined(__GNUC__)
+# ifdef __APPLE__ /* Mac OS X uses 16-byte aligned stack and not a 4-byte one */
+# define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
+# else
+# define __cdecl __attribute__((__cdecl__))
+# endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+# define __cdecl __attribute__((ms_abi))
+# elif !defined(_MSC_VER)
+# define __cdecl
+# endif
+#endif /* __cdecl */
+
+#ifndef __ms_va_list
+# if defined(__x86_64__) && defined (__GNUC__)
+# define __ms_va_list __builtin_ms_va_list
+# define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
+# define __ms_va_end(list) __builtin_ms_va_end(list)
+# else
+# define __ms_va_list va_list
+# define __ms_va_start(list,arg) va_start(list,arg)
+# define __ms_va_end(list) va_end(list)
+# endif
+#endif
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+# define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+# define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+# define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+#define _ARGMAX 100
+
+#ifndef _MSVCRT_LONG_DEFINED
+#define _MSVCRT_LONG_DEFINED
+/* we need 32-bit longs even on 64-bit */
+typedef int __msvcrt_long;
+typedef unsigned int __msvcrt_ulong;
+#endif
+
+#ifndef _INTPTR_T_DEFINED
+#ifdef _WIN64
+typedef __int64 intptr_t;
+#else
+typedef int intptr_t;
+#endif
+#define _INTPTR_T_DEFINED
+#endif
+
+#ifndef _UINTPTR_T_DEFINED
+#ifdef _WIN64
+typedef unsigned __int64 uintptr_t;
+#else
+typedef unsigned int uintptr_t;
+#endif
+#define _UINTPTR_T_DEFINED
+#endif
+
+#ifndef _PTRDIFF_T_DEFINED
+#ifdef _WIN64
+typedef __int64 ptrdiff_t;
+#else
+typedef int ptrdiff_t;
+#endif
+#define _PTRDIFF_T_DEFINED
+#endif
+
+#ifndef _SIZE_T_DEFINED
+#ifdef _WIN64
+typedef unsigned __int64 size_t;
+#else
+typedef unsigned int size_t;
+#endif
+#define _SIZE_T_DEFINED
+#endif
+
+#ifndef _TIME32_T_DEFINED
+typedef __msvcrt_long __time32_t;
+#define _TIME32_T_DEFINED
+#endif
+
+#ifndef _TIME64_T_DEFINED
+typedef __int64 DECLSPEC_ALIGN(8) __time64_t;
+#define _TIME64_T_DEFINED
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+# ifdef _WIN64
+# error You cannot use 32-bit time_t in Win64
+# endif
+#elif !defined(_WIN64)
+# define _USE_32BIT_TIME_T
+#endif
+
+#ifndef _TIME_T_DEFINED
+#ifdef _USE_32BIT_TIME_T
+typedef __time32_t time_t;
+#else
+typedef __time64_t time_t;
+#endif
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+#ifndef __cplusplus
+typedef unsigned short wchar_t;
+#endif
+#define _WCHAR_T_DEFINED
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+typedef unsigned short wint_t;
+typedef unsigned short wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+#ifndef _ERRNO_T_DEFINED
+typedef int errno_t;
+#define _ERRNO_T_DEFINED
+#endif
+
+struct threadlocaleinfostruct;
+struct threadmbcinfostruct;
+typedef struct threadlocaleinfostruct *pthreadlocinfo;
+typedef struct threadmbcinfostruct *pthreadmbcinfo;
+
+typedef struct localeinfo_struct
+{
+ pthreadlocinfo locinfo;
+ pthreadmbcinfo mbcinfo;
+} _locale_tstruct, *_locale_t;
+
+#ifndef _TAGLC_ID_DEFINED
+typedef struct tagLC_ID {
+ unsigned short wLanguage;
+ unsigned short wCountry;
+ unsigned short wCodePage;
+} LC_ID, *LPLC_ID;
+#define _TAGLC_ID_DEFINED
+#endif
+
+#ifndef _THREADLOCALEINFO
+typedef struct threadlocaleinfostruct {
+ int refcount;
+ unsigned int lc_codepage;
+ unsigned int lc_collate_cp;
+ __msvcrt_ulong lc_handle[6];
+ LC_ID lc_id[6];
+ struct {
+ char *locale;
+ wchar_t *wlocale;
+ int *refcount;
+ int *wrefcount;
+ } lc_category[6];
+ int lc_clike;
+ int mb_cur_max;
+ int *lconv_intl_refcount;
+ int *lconv_num_refcount;
+ int *lconv_mon_refcount;
+ struct lconv *lconv;
+ int *ctype1_refcount;
+ unsigned short *ctype1;
+ const unsigned short *pctype;
+ const unsigned char *pclmap;
+ const unsigned char *pcumap;
+ struct __lc_time_data *lc_time_curr;
+} threadlocinfo;
+#define _THREADLOCALEINFO
+#endif
+
+#endif /* __WINE_CRTDEFS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h
new file mode 100644
index 00000000..b44e74cf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/ctype.h
@@ -0,0 +1,85 @@
+/*
+ * Character type definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_CTYPE_H
+#define __WINE_CTYPE_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+/* ASCII char classification table - binary compatible */
+#define _UPPER 0x0001 /* C1_UPPER */
+#define _LOWER 0x0002 /* C1_LOWER */
+#define _DIGIT 0x0004 /* C1_DIGIT */
+#define _SPACE 0x0008 /* C1_SPACE */
+#define _PUNCT 0x0010 /* C1_PUNCT */
+#define _CONTROL 0x0020 /* C1_CNTRL */
+#define _BLANK 0x0040 /* C1_BLANK */
+#define _HEX 0x0080 /* C1_XDIGIT */
+#define _LEADBYTE 0x8000
+#define _ALPHA (0x0100|_UPPER|_LOWER) /* (C1_ALPHA|_UPPER|_LOWER) */
+
+int __cdecl __isascii(int);
+int __cdecl __iscsym(int);
+int __cdecl __iscsymf(int);
+int __cdecl __toascii(int);
+int __cdecl _isctype(int,int);
+int __cdecl _tolower(int);
+int __cdecl _toupper(int);
+int __cdecl isalnum(int);
+int __cdecl isalpha(int);
+int __cdecl iscntrl(int);
+int __cdecl isdigit(int);
+int __cdecl isgraph(int);
+int __cdecl islower(int);
+int __cdecl isprint(int);
+int __cdecl ispunct(int);
+int __cdecl isspace(int);
+int __cdecl isupper(int);
+int __cdecl isxdigit(int);
+int __cdecl tolower(int);
+int __cdecl toupper(int);
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+int __cdecl is_wctype(wint_t,wctype_t);
+int __cdecl isleadbyte(int);
+int __cdecl iswalnum(wint_t);
+int __cdecl iswalpha(wint_t);
+int __cdecl iswascii(wint_t);
+int __cdecl iswcntrl(wint_t);
+int __cdecl iswctype(wint_t,wctype_t);
+int __cdecl iswdigit(wint_t);
+int __cdecl iswgraph(wint_t);
+int __cdecl iswlower(wint_t);
+int __cdecl iswprint(wint_t);
+int __cdecl iswpunct(wint_t);
+int __cdecl iswspace(wint_t);
+int __cdecl iswupper(wint_t);
+int __cdecl iswxdigit(wint_t);
+wchar_t __cdecl towlower(wchar_t);
+wchar_t __cdecl towupper(wchar_t);
+#endif /* _WCTYPE_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int isascii(int c) { return __isascii(c); }
+static inline int iscsym(int c) { return __iscsym(c); }
+static inline int iscsymf(int c) { return __iscsymf(c); }
+static inline int toascii(int c) { return __toascii(c); }
+
+#endif /* __WINE_CTYPE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h
new file mode 100644
index 00000000..45db8e2f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/direct.h
@@ -0,0 +1,59 @@
+/*
+ * Path and directory definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_DIRECT_H
+#define __WINE_DIRECT_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _DISKFREE_T_DEFINED
+#define _DISKFREE_T_DEFINED
+struct _diskfree_t {
+ unsigned int total_clusters;
+ unsigned int avail_clusters;
+ unsigned int sectors_per_cluster;
+ unsigned int bytes_per_sector;
+};
+#endif /* _DISKFREE_T_DEFINED */
+
+int __cdecl _chdir(const char*);
+int __cdecl _chdrive(int);
+char* __cdecl _getcwd(char*,int);
+char* __cdecl _getdcwd(int,char*,int);
+int __cdecl _getdrive(void);
+__msvcrt_ulong __cdecl _getdrives(void);
+int __cdecl _mkdir(const char*);
+int __cdecl _rmdir(const char*);
+
+#ifndef _WDIRECT_DEFINED
+#define _WDIRECT_DEFINED
+int __cdecl _wchdir(const wchar_t*);
+wchar_t* __cdecl _wgetcwd(wchar_t*,int);
+wchar_t* __cdecl _wgetdcwd(int,wchar_t*,int);
+int __cdecl _wmkdir(const wchar_t*);
+int __cdecl _wrmdir(const wchar_t*);
+#endif /* _WDIRECT_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int chdir(const char* newdir) { return _chdir(newdir); }
+static inline char* getcwd(char * buf, int size) { return _getcwd(buf, size); }
+static inline int mkdir(const char* newdir) { return _mkdir(newdir); }
+static inline int rmdir(const char* dir) { return _rmdir(dir); }
+
+#include <poppack.h>
+
+#endif /* __WINE_DIRECT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h
new file mode 100644
index 00000000..5e042800
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dirent.h
@@ -0,0 +1 @@
+#include <direct.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h
new file mode 100644
index 00000000..bc62188a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/dos.h
@@ -0,0 +1,50 @@
+/*
+ * DOS definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_DOS_H
+#define __WINE_DOS_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+/* The following are also defined in io.h */
+#define _A_NORMAL 0x00000000
+#define _A_RDONLY 0x00000001
+#define _A_HIDDEN 0x00000002
+#define _A_SYSTEM 0x00000004
+#define _A_VOLID 0x00000008
+#define _A_SUBDIR 0x00000010
+#define _A_ARCH 0x00000020
+
+#ifndef _DISKFREE_T_DEFINED
+#define _DISKFREE_T_DEFINED
+struct _diskfree_t {
+ unsigned int total_clusters;
+ unsigned int avail_clusters;
+ unsigned int sectors_per_cluster;
+ unsigned int bytes_per_sector;
+};
+#endif /* _DISKFREE_T_DEFINED */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+unsigned int __cdecl _getdiskfree(unsigned int, struct _diskfree_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define diskfree_t _diskfree_t
+
+#include <poppack.h>
+
+#endif /* __WINE_DOS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h
new file mode 100644
index 00000000..0b421a1b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/eh.h
@@ -0,0 +1,58 @@
+/*
+ * C++ exception handling facility
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_EH_H
+#define __WINE_EH_H
+
+#include <crtdefs.h>
+
+#if !defined(__cplusplus) && !defined(__WINE_MSVCRT_TEST)
+#error "eh.h is meant only for C++ applications"
+#endif
+
+#include <pshpack8.h>
+
+struct _EXCEPTION_POINTERS;
+
+typedef void (__cdecl *terminate_handler)(void);
+typedef void (__cdecl *terminate_function)(void);
+typedef void (__cdecl *unexpected_handler)(void);
+typedef void (__cdecl *unexpected_function)(void);
+typedef void (__cdecl *_se_translator_function)(unsigned int code, struct _EXCEPTION_POINTERS *info);
+
+terminate_function __cdecl set_terminate(terminate_function func);
+unexpected_function __cdecl set_unexpected(unexpected_function func);
+_se_translator_function __cdecl set_se_translator(_se_translator_function func);
+
+void __cdecl terminate(void);
+void __cdecl unexpected(void);
+
+#include <poppack.h>
+
+#endif /* __WINE_EH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h
new file mode 100644
index 00000000..d7388684
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/errno.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2001 Jon Griffiths
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ERRNO_H
+#define __WINE_ERRNO_H
+
+#include <crtdefs.h>
+
+# define EPERM 1
+# define ENOENT 2
+# define ESRCH 3
+# define EINTR 4
+# define EIO 5
+# define ENXIO 6
+# define E2BIG 7
+# define ENOEXEC 8
+# define EBADF 9
+# define ECHILD 10
+# define EAGAIN 11
+# define ENOMEM 12
+# define EACCES 13
+# define EFAULT 14
+# define EBUSY 16
+# define EEXIST 17
+# define EXDEV 18
+# define ENODEV 19
+# define ENOTDIR 20
+# define EISDIR 21
+# define EINVAL 22
+# define ENFILE 23
+# define EMFILE 24
+# define ENOTTY 25
+# define EFBIG 27
+# define ENOSPC 28
+# define ESPIPE 29
+# define EROFS 30
+# define EMLINK 31
+# define EPIPE 32
+# define EDOM 33
+# define ERANGE 34
+# define EDEADLK 36
+# define EDEADLOCK EDEADLK
+# define ENAMETOOLONG 38
+# define ENOLCK 39
+# define ENOSYS 40
+# define ENOTEMPTY 41
+# define EILSEQ 42
+
+# define STRUNCATE 80
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int* __cdecl _errno(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define errno (*_errno())
+
+#endif /* __WINE_ERRNO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h
new file mode 100644
index 00000000..267feed5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/fcntl.h
@@ -0,0 +1,50 @@
+/*
+ * File definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_FCNTL_H
+#define __WINE_FCNTL_H
+
+#include <crtdefs.h>
+
+#define _O_RDONLY 0
+#define _O_WRONLY 1
+#define _O_RDWR 2
+#define _O_ACCMODE (_O_RDONLY|_O_WRONLY|_O_RDWR)
+#define _O_APPEND 0x0008
+#define _O_RANDOM 0x0010
+#define _O_SEQUENTIAL 0x0020
+#define _O_TEMPORARY 0x0040
+#define _O_NOINHERIT 0x0080
+#define _O_CREAT 0x0100
+#define _O_TRUNC 0x0200
+#define _O_EXCL 0x0400
+#define _O_SHORT_LIVED 0x1000
+#define _O_TEXT 0x4000
+#define _O_BINARY 0x8000
+#define _O_RAW _O_BINARY
+
+#define _O_WTEXT 0x10000
+#define _O_U16TEXT 0x20000
+#define _O_U8TEXT 0x40000
+
+#define O_RDONLY _O_RDONLY
+#define O_WRONLY _O_WRONLY
+#define O_RDWR _O_RDWR
+#define O_ACCMODE _O_ACCMODE
+#define O_APPEND _O_APPEND
+#define O_RANDOM _O_RANDOM
+#define O_SEQENTIAL _O_SEQUENTIAL
+#define O_TEMPORARY _O_TEMPORARY
+#define O_NOINHERIT _O_NOINHERIT
+#define O_CREAT _O_CREAT
+#define O_TRUNC _O_TRUNC
+#define O_EXCL _O_EXCL
+#define O_TEXT _O_TEXT
+#define O_BINARY _O_BINARY
+#define O_RAW _O_BINARY
+
+#endif /* __WINE_FCNTL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h
new file mode 100644
index 00000000..33ebb689
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/float.h
@@ -0,0 +1,158 @@
+/*
+ * Floating point arithmetic.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Hans Leidekker.
+ * This file is in the public domain.
+ */
+
+#ifndef __WINE_FLOAT_H
+#define __WINE_FLOAT_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DBL_DIG 15
+#define DBL_EPSILON 2.2204460492503131e-016
+#define DBL_MANT_DIG 53
+#define DBL_MAX 1.7976931348623158e+308
+#define DBL_MAX_10_EXP 308
+#define DBL_MAX_EXP 1024
+#define DBL_MIN 2.2250738585072014e-308
+#define DBL_MIN_10_EXP (-307)
+#define DBL_MIN_EXP (-1021)
+
+#define _DBL_RADIX 2
+#define _DBL_ROUNDS 1
+
+#define DBL_RADIX _DBL_RADIX
+#define DBL_ROUNDS _DBL_ROUNDS
+
+#define FLT_DIG 6
+#define FLT_EPSILON 1.192092896e-07F
+#define FLT_MANT_DIG 24
+#define FLT_MAX 3.402823466e+38F
+#define FLT_MAX_10_EXP 38
+#define FLT_MAX_EXP 128
+#define FLT_MIN 1.175494351e-38F
+#define FLT_MIN_10_EXP (-37)
+#define FLT_MIN_EXP (-125)
+
+#define FLT_RADIX 2
+#define FLT_ROUNDS 1
+
+#define LDBL_DIG DBL_DIG
+#define LDBL_EPSILON DBL_EPSILON
+#define LDBL_MANT_DIG DBL_MANT_DIG
+#define LDBL_MAX DBL_MAX
+#define LDBL_MAX_10_EXP DBL_MAX_10_EXP
+#define LDBL_MAX_EXP DBL_MAX_EXP
+#define LDBL_MIN DBL_MIN
+#define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+#define LDBL_MIN_EXP DBL_MIN_EXP
+
+#define _LDBL_RADIX _DBL_RADIX
+#define _LDBL_ROUNDS _DBL_ROUNDS
+
+#define LDBL_RADIX _LDBL_RADIX
+#define LDBL_ROUNDS _LDBL_ROUNDS
+
+/* Control word masks for unMask */
+#define _MCW_EM 0x0008001f
+#define _MCW_IC 0x00040000
+#define _MCW_RC 0x00000300
+#define _MCW_PC 0x00030000
+#define _MCW_DN 0x03000000
+
+/* Control word values for unNew (use with related unMask above) */
+#define _EM_INVALID 0x00000010
+#define _EM_DENORMAL 0x00080000
+#define _EM_ZERODIVIDE 0x00000008
+#define _EM_OVERFLOW 0x00000004
+#define _EM_UNDERFLOW 0x00000002
+#define _EM_INEXACT 0x00000001
+#define _IC_AFFINE 0x00040000
+#define _IC_PROJECTIVE 0x00000000
+#define _RC_CHOP 0x00000300
+#define _RC_UP 0x00000200
+#define _RC_DOWN 0x00000100
+#define _RC_NEAR 0x00000000
+#define _PC_24 0x00020000
+#define _PC_53 0x00010000
+#define _PC_64 0x00000000
+#define _DN_SAVE 0x00000000
+#define _DN_FLUSH 0x01000000
+#define _DN_FLUSH_OPERANDS_SAVE_RESULTS 0x02000000
+#define _DN_SAVE_OPERANDS_FLUSH_RESULTS 0x03000000
+#define _EM_AMBIGUOUS 0x80000000
+
+/* _statusfp bit flags */
+#define _SW_INEXACT 0x00000001 /* inexact (precision) */
+#define _SW_UNDERFLOW 0x00000002 /* underflow */
+#define _SW_OVERFLOW 0x00000004 /* overflow */
+#define _SW_ZERODIVIDE 0x00000008 /* zero divide */
+#define _SW_INVALID 0x00000010 /* invalid */
+
+#define _SW_UNEMULATED 0x00000040 /* unemulated instruction */
+#define _SW_SQRTNEG 0x00000080 /* square root of a neg number */
+#define _SW_STACKOVERFLOW 0x00000200 /* FP stack overflow */
+#define _SW_STACKUNDERFLOW 0x00000400 /* FP stack underflow */
+
+#define _SW_DENORMAL 0x00080000 /* denormal status bit */
+
+/* fpclass constants */
+#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */
+#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */
+#define _FPCLASS_NINF 0x0004 /* Negative Infinity */
+#define _FPCLASS_NN 0x0008 /* Negative Normal */
+#define _FPCLASS_ND 0x0010 /* Negative Denormal */
+#define _FPCLASS_NZ 0x0020 /* Negative Zero */
+#define _FPCLASS_PZ 0x0040 /* Positive Zero */
+#define _FPCLASS_PD 0x0080 /* Positive Denormal */
+#define _FPCLASS_PN 0x0100 /* Positive Normal */
+#define _FPCLASS_PINF 0x0200 /* Positive Infinity */
+
+/* floating point error signals */
+#define _FPE_INVALID 0x81
+#define _FPE_DENORMAL 0x82
+#define _FPE_ZERODIVIDE 0x83
+#define _FPE_OVERFLOW 0x84
+#define _FPE_UNDERFLOW 0x85
+#define _FPE_INEXACT 0x86
+#define _FPE_UNEMULATED 0x87
+#define _FPE_SQRTNEG 0x88
+#define _FPE_STACKOVERFLOW 0x8a
+#define _FPE_STACKUNDERFLOW 0x8b
+#define _FPE_EXPLICITGEN 0x8c
+
+#if defined(__i386__)
+#define _CW_DEFAULT (_RC_NEAR + _PC_53 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
+#elif defined(__x86_64__)
+#define _CW_DEFAULT (_RC_NEAR + _PC_64 + _EM_INVALID + _EM_ZERODIVIDE + _EM_OVERFLOW + _EM_UNDERFLOW + _EM_INEXACT + _EM_DENORMAL)
+#endif
+
+unsigned int __cdecl _control87(unsigned int, unsigned int);
+unsigned int __cdecl _controlfp(unsigned int, unsigned int);
+errno_t __cdecl _controlfp_s(unsigned int *, unsigned int, unsigned int);
+
+double __cdecl _copysign (double, double);
+double __cdecl _chgsign (double);
+double __cdecl _scalb(double, __msvcrt_long);
+double __cdecl _logb(double);
+double __cdecl _nextafter(double, double);
+int __cdecl _finite(double);
+int __cdecl _isnan(double);
+int __cdecl _fpclass(double);
+
+#ifdef __x86_64__
+float __cdecl _scalbf(float, __msvcrt_long);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_FLOAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h
new file mode 100644
index 00000000..09b615c8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/io.h
@@ -0,0 +1,184 @@
+/*
+ * System I/O definitions.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_IO_H
+#define __WINE_IO_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+/* The following are also defined in dos.h */
+#define _A_NORMAL 0x00000000
+#define _A_RDONLY 0x00000001
+#define _A_HIDDEN 0x00000002
+#define _A_SYSTEM 0x00000004
+#define _A_VOLID 0x00000008
+#define _A_SUBDIR 0x00000010
+#define _A_ARCH 0x00000020
+
+#ifndef _FSIZE_T_DEFINED
+typedef __msvcrt_ulong _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _FINDDATA_T_DEFINED
+#define _FINDDATA_T_DEFINED
+struct _finddata_t
+{
+ unsigned attrib;
+ time_t time_create;
+ time_t time_access;
+ time_t time_write;
+ _fsize_t size;
+ char name[260];
+};
+
+struct _finddatai64_t
+{
+ unsigned attrib;
+ time_t time_create;
+ time_t time_access;
+ time_t time_write;
+ __int64 DECLSPEC_ALIGN(8) size;
+ char name[260];
+};
+
+struct _finddata64_t
+{
+ unsigned attrib;
+ __time64_t time_create;
+ __time64_t time_access;
+ __time64_t time_write;
+ __int64 DECLSPEC_ALIGN(8) size;
+ char name[260];
+};
+#endif /* _FINDDATA_T_DEFINED */
+
+#ifndef _WFINDDATA_T_DEFINED
+#define _WFINDDATA_T_DEFINED
+struct _wfinddata_t {
+ unsigned attrib;
+ time_t time_create;
+ time_t time_access;
+ time_t time_write;
+ _fsize_t size;
+ wchar_t name[260];
+};
+
+struct _wfinddatai64_t {
+ unsigned attrib;
+ time_t time_create;
+ time_t time_access;
+ time_t time_write;
+ __int64 DECLSPEC_ALIGN(8) size;
+ wchar_t name[260];
+};
+#endif /* _WFINDDATA_T_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _access(const char*,int);
+int __cdecl _chmod(const char*,int);
+int __cdecl _chsize(int,__msvcrt_ulong);
+int __cdecl _close(int);
+int __cdecl _commit(int);
+int __cdecl _creat(const char*,int);
+int __cdecl _dup(int);
+int __cdecl _dup2(int,int);
+int __cdecl _eof(int);
+__int64 __cdecl _filelengthi64(int);
+__msvcrt_long __cdecl _filelength(int);
+int __cdecl _findclose(intptr_t);
+intptr_t __cdecl _findfirst(const char*,struct _finddata_t*);
+intptr_t __cdecl _findfirsti64(const char*, struct _finddatai64_t*);
+intptr_t __cdecl _findfirst64(const char*, struct _finddata64_t*);
+int __cdecl _findnext(intptr_t,struct _finddata_t*);
+int __cdecl _findnexti64(intptr_t, struct _finddatai64_t*);
+int __cdecl _findnext64(intptr_t, struct _finddata64_t*);
+intptr_t __cdecl _get_osfhandle(int);
+int __cdecl _isatty(int);
+int __cdecl _locking(int,int,__msvcrt_long);
+__msvcrt_long __cdecl _lseek(int,__msvcrt_long,int);
+__int64 __cdecl _lseeki64(int,__int64,int);
+char* __cdecl _mktemp(char*);
+int __cdecl _mktemp_s(char*,size_t);
+int __cdecl _open(const char*,int,...);
+int __cdecl _open_osfhandle(intptr_t,int);
+int __cdecl _pipe(int*,unsigned int,int);
+int __cdecl _read(int,void*,unsigned int);
+int __cdecl _setmode(int,int);
+int __cdecl _sopen(const char*,int,int,...);
+__msvcrt_long __cdecl _tell(int);
+__int64 __cdecl _telli64(int);
+int __cdecl _umask(int);
+int __cdecl _unlink(const char*);
+int __cdecl _write(int,const void*,unsigned int);
+
+int __cdecl remove(const char*);
+int __cdecl rename(const char*,const char*);
+
+#ifndef _WIO_DEFINED
+#define _WIO_DEFINED
+int __cdecl _waccess(const wchar_t*,int);
+int __cdecl _wchmod(const wchar_t*,int);
+int __cdecl _wcreat(const wchar_t*,int);
+intptr_t __cdecl _wfindfirst(const wchar_t*,struct _wfinddata_t*);
+intptr_t __cdecl _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+int __cdecl _wfindnext(intptr_t,struct _wfinddata_t*);
+int __cdecl _wfindnexti64(intptr_t, struct _wfinddatai64_t*);
+wchar_t * __cdecl _wmktemp(wchar_t*);
+int __cdecl _wopen(const wchar_t*,int,...);
+int __cdecl _wrename(const wchar_t*,const wchar_t*);
+int __cdecl _wsopen(const wchar_t*,int,int,...);
+int __cdecl _wunlink(const wchar_t*);
+#endif /* _WIO_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int access(const char* path, int mode) { return _access(path, mode); }
+static inline int chmod(const char* path, int mode) { return _chmod(path, mode); }
+static inline int chsize(int fd, __msvcrt_long size) { return _chsize(fd, size); }
+static inline int close(int fd) { return _close(fd); }
+static inline int creat(const char* path, int mode) { return _creat(path, mode); }
+static inline int dup(int od) { return _dup(od); }
+static inline int dup2(int od, int nd) { return _dup2(od, nd); }
+static inline int eof(int fd) { return _eof(fd); }
+static inline __msvcrt_long filelength(int fd) { return _filelength(fd); }
+static inline int isatty(int fd) { return _isatty(fd); }
+static inline int locking(int fd, int mode, __msvcrt_long size) { return _locking(fd, mode, size); }
+static inline __msvcrt_long lseek(int fd, __msvcrt_long off, int where) { return _lseek(fd, off, where); }
+static inline char* mktemp(char* pat) { return _mktemp(pat); }
+static inline int read(int fd, void* buf, unsigned int size) { return _read(fd, buf, size); }
+static inline int setmode(int fd, int mode) { return _setmode(fd, mode); }
+static inline __msvcrt_long tell(int fd) { return _tell(fd); }
+#ifndef _UMASK_DEFINED
+static inline int umask(int fd) { return _umask(fd); }
+#define _UMASK_DEFINED
+#endif
+#ifndef _UNLINK_DEFINED
+static inline int unlink(const char* path) { return _unlink(path); }
+#define _UNLINK_DEFINED
+#endif
+static inline int write(int fd, const void* buf, unsigned int size) { return _write(fd, buf, size); }
+
+#if defined(__GNUC__) && (__GNUC__ < 4)
+extern int __cdecl open(const char*,int,...) __attribute__((alias("_open")));
+extern int __cdecl sopen(const char*,int,int,...) __attribute__((alias("_sopen")));
+#else
+#define open _open
+#define sopen _sopen
+#endif /* __GNUC__ */
+
+#include <poppack.h>
+
+#endif /* __WINE_IO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h
new file mode 100644
index 00000000..d0f058b1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/limits.h
@@ -0,0 +1,49 @@
+#ifndef __WINE_LIMITS_H
+#define __WINE_LIMITS_H
+
+#include <crtdefs.h>
+
+#define CHAR_BIT 8
+#define MB_LEN_MAX 2
+
+#define SCHAR_MIN (-0x80)
+#define SCHAR_MAX 0x7f
+#define UCHAR_MAX 0xff
+
+#ifdef __CHAR_UNSIGNED__
+# define CHAR_MIN 0
+# define CHAR_MAX UCHAR_MAX
+#else
+# define CHAR_MIN SCHAR_MIN
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+#define SHRT_MIN (-0x8000)
+#define SHRT_MAX 0x7fff
+#define USHRT_MAX 0xffff
+
+#define INT_MIN (-0x80000000)
+#define INT_MAX 0x7fffffff
+#define UINT_MAX 0xffffffff
+
+#define LONG_MIN (-0x80000000L)
+#define LONG_MAX 0x7fffffffL
+#define ULONG_MAX 0xffffffffUL
+
+#define _I64_MAX (((__int64)0x7fffffff << 32) | 0xffffffff)
+#define _I64_MIN (-_I64_MAX-1)
+#define _UI64_MAX (((unsigned __int64)0xffffffff << 32) | 0xffffffff)
+
+#define I64_MIN _I64_MIN
+#define I64_MAX _I64_MAX
+#define UI64_MAX _UI64_MAX
+
+#ifndef SIZE_MAX
+# ifdef _WIN64
+# define SIZE_MAX UI64_MAX
+# else
+# define SIZE_MAX UINT_MAX
+# endif
+#endif
+
+#endif /* __WINE_LIMITS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h
new file mode 100644
index 00000000..6cc35fe6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/locale.h
@@ -0,0 +1,90 @@
+/*
+ * Locale definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_LOCALE_H
+#define __WINE_LOCALE_H
+
+#include <crtdefs.h>
+
+#define LC_ALL 0
+#define LC_COLLATE 1
+#define LC_CTYPE 2
+#define LC_MONETARY 3
+#define LC_NUMERIC 4
+#define LC_TIME 5
+#define LC_MIN LC_ALL
+#define LC_MAX LC_TIME
+
+#ifndef _LCONV_DEFINED
+#define _LCONV_DEFINED
+struct lconv
+{
+ char* decimal_point;
+ char* thousands_sep;
+ char* grouping;
+ char* int_curr_symbol;
+ char* currency_symbol;
+ char* mon_decimal_point;
+ char* mon_thousands_sep;
+ char* mon_grouping;
+ char* positive_sign;
+ char* negative_sign;
+ char int_frac_digits;
+ char frac_digits;
+ char p_cs_precedes;
+ char p_sep_by_space;
+ char n_cs_precedes;
+ char n_sep_by_space;
+ char p_sign_posn;
+ char n_sign_posn;
+};
+#endif /* _LCONV_DEFINED */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char* __cdecl setlocale(int,const char*);
+struct lconv* __cdecl localeconv(void);
+int __cdecl _configthreadlocale(int);
+_locale_t __cdecl _get_current_locale(void);
+_locale_t __cdecl _create_locale(int, const char*);
+void __cdecl _free_locale(_locale_t);
+
+#ifndef _WLOCALE_DEFINED
+#define _WLOCALE_DEFINED
+wchar_t* __cdecl _wsetlocale(int,const wchar_t*);
+#endif /* _WLOCALE_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_LOCALE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h
new file mode 100644
index 00000000..a92f12bc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/malloc.h
@@ -0,0 +1,99 @@
+/*
+ * Heap definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MALLOC_H
+#define __WINE_MALLOC_H
+
+#include <crtdefs.h>
+
+/* heap function constants */
+#define _HEAPEMPTY -1
+#define _HEAPOK -2
+#define _HEAPBADBEGIN -3
+#define _HEAPBADNODE -4
+#define _HEAPEND -5
+#define _HEAPBADPTR -6
+
+#define _FREEENTRY 0
+#define _USEDENTRY 1
+
+#ifndef _HEAPINFO_DEFINED
+#define _HEAPINFO_DEFINED
+typedef struct _heapinfo
+{
+ int* _pentry;
+ size_t _size;
+ int _useflag;
+} _HEAPINFO;
+#endif /* _HEAPINFO_DEFINED */
+
+#ifdef __i386__
+extern unsigned int* __cdecl __p__amblksiz(void);
+#define _amblksiz (*__p__amblksiz());
+#else
+extern unsigned int _amblksiz;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* __cdecl _expand(void*,size_t);
+int __cdecl _heapadd(void*,size_t);
+int __cdecl _heapchk(void);
+int __cdecl _heapmin(void);
+int __cdecl _heapset(unsigned int);
+size_t __cdecl _heapused(size_t*,size_t*);
+int __cdecl _heapwalk(_HEAPINFO*);
+size_t __cdecl _msize(void*);
+
+void* __cdecl calloc(size_t,size_t);
+void __cdecl free(void*);
+void* __cdecl malloc(size_t);
+void* __cdecl realloc(void*,size_t);
+
+void __cdecl _aligned_free(void*);
+void* __cdecl _aligned_malloc(size_t,size_t);
+void* __cdecl _aligned_offset_malloc(size_t,size_t,size_t);
+void* __cdecl _aligned_realloc(void*,size_t,size_t);
+void* __cdecl _aligned_offset_realloc(void*,size_t,size_t,size_t);
+
+size_t __cdecl _get_sbh_threshold(void);
+int __cdecl _set_sbh_threshold(size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+# ifdef __GNUC__
+# define _alloca(x) __builtin_alloca((x))
+# define alloca(x) __builtin_alloca((x))
+# endif
+
+#endif /* __WINE_MALLOC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h
new file mode 100644
index 00000000..4d0655e4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/math.h
@@ -0,0 +1,174 @@
+/*
+ * Math functions.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Hans Leidekker.
+ * This file is in the public domain.
+ */
+
+#ifndef __WINE_MATH_H
+#define __WINE_MATH_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _DOMAIN 1 /* domain error in argument */
+#define _SING 2 /* singularity */
+#define _OVERFLOW 3 /* range overflow */
+#define _UNDERFLOW 4 /* range underflow */
+#define _TLOSS 5 /* total loss of precision */
+#define _PLOSS 6 /* partial loss of precision */
+
+#ifndef _EXCEPTION_DEFINED
+#define _EXCEPTION_DEFINED
+struct _exception
+{
+ int type;
+ char *name;
+ double arg1;
+ double arg2;
+ double retval;
+};
+#endif /* _EXCEPTION_DEFINED */
+
+#ifndef _COMPLEX_DEFINED
+#define _COMPLEX_DEFINED
+struct _complex
+{
+ double x; /* Real part */
+ double y; /* Imaginary part */
+};
+#endif /* _COMPLEX_DEFINED */
+
+double __cdecl sin(double);
+double __cdecl cos(double);
+double __cdecl tan(double);
+double __cdecl sinh(double);
+double __cdecl cosh(double);
+double __cdecl tanh(double);
+double __cdecl asin(double);
+double __cdecl acos(double);
+double __cdecl atan(double);
+double __cdecl atan2(double, double);
+double __cdecl exp(double);
+double __cdecl log(double);
+double __cdecl log10(double);
+double __cdecl pow(double, double);
+double __cdecl sqrt(double);
+double __cdecl ceil(double);
+double __cdecl floor(double);
+double __cdecl fabs(double);
+double __cdecl ldexp(double, int);
+double __cdecl frexp(double, int*);
+double __cdecl modf(double, double*);
+double __cdecl fmod(double, double);
+
+double __cdecl hypot(double, double);
+double __cdecl j0(double);
+double __cdecl j1(double);
+double __cdecl jn(int, double);
+double __cdecl y0(double);
+double __cdecl y1(double);
+double __cdecl yn(int, double);
+
+#ifdef __x86_64__
+
+float __cdecl sinf(float);
+float __cdecl cosf(float);
+float __cdecl tanf(float);
+float __cdecl sinhf(float);
+float __cdecl coshf(float);
+float __cdecl tanhf(float);
+float __cdecl asinf(float);
+float __cdecl acosf(float);
+float __cdecl atanf(float);
+float __cdecl atan2f(float, float);
+float __cdecl expf(float);
+float __cdecl logf(float);
+float __cdecl log10f(float);
+float __cdecl powf(float, float);
+float __cdecl sqrtf(float);
+float __cdecl ceilf(float);
+float __cdecl floorf(float);
+float __cdecl fabsf(float);
+float __cdecl ldexpf(float, int);
+float __cdecl frexpf(float, int*);
+float __cdecl modff(float, float*);
+float __cdecl fmodf(float, float);
+
+#else
+
+#define sinf(x) ((float)sin((double)(x)))
+#define cosf(x) ((float)cos((double)(x)))
+#define tanf(x) ((float)tan((double)(x)))
+#define sinhf(x) ((float)sinh((double)(x)))
+#define coshf(x) ((float)cosh((double)(x)))
+#define tanhf(x) ((float)tanh((double)(x)))
+#define asinf(x) ((float)asin((double)(x)))
+#define acosf(x) ((float)acos((double)(x)))
+#define atanf(x) ((float)atan((double)(x)))
+#define atan2f(x,y) ((float)atan2((double)(x), (double)(y)))
+#define expf(x) ((float)exp((double)(x)))
+#define logf(x) ((float)log((double)(x)))
+#define log10f(x) ((float)log10((double)(x)))
+#define powf(x,y) ((float)pow((double)(x), (double)(y)))
+#define sqrtf(x) ((float)sqrt((double)(x)))
+#define ceilf(x) ((float)ceil((double)(x)))
+#define floorf(x) ((float)floor((double)(x)))
+#define frexpf(x) ((float)frexp((double)(x)))
+#define modff(x,y) ((float)modf((double)(x), (double*)(y)))
+#define fmodf(x,y) ((float)fmod((double)(x), (double)(y)))
+
+#endif
+
+#define fabsf(x) ((float)fabs((double)(x)))
+#define ldexpf(x,y) ((float)ldexp((double)(x),(y)))
+
+float __cdecl hypotf(float, float);
+
+int __cdecl _matherr(struct _exception*);
+double __cdecl _cabs(struct _complex);
+
+#ifndef HUGE_VAL
+# if defined(__GNUC__) && (__GNUC__ >= 3)
+# define HUGE_VAL (__extension__ 0x1.0p2047)
+# else
+static const union {
+ unsigned char __c[8];
+ double __d;
+} __huge_val = { { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f } };
+# define HUGE_VAL (__huge_val.__d)
+# endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#ifdef _USE_MATH_DEFINES
+#ifndef _MATH_DEFINES_DEFINED
+#define _MATH_DEFINES_DEFINED
+#define M_E 2.71828182845904523536
+#define M_LOG2E 1.44269504088896340736
+#define M_LOG10E 0.434294481903251827651
+#define M_LN2 0.693147180559945309417
+#define M_LN10 2.30258509299404568402
+#define M_PI 3.14159265358979323846
+#define M_PI_2 1.57079632679489661923
+#define M_PI_4 0.785398163397448309616
+#define M_1_PI 0.318309886183790671538
+#define M_2_PI 0.636619772367581343076
+#define M_2_SQRTPI 1.12837916709551257390
+#define M_SQRT2 1.41421356237309504880
+#define M_SQRT1_2 0.707106781186547524401
+#endif /* !_MATH_DEFINES_DEFINED */
+#endif /* _USE_MATH_DEFINES */
+
+#endif /* __WINE_MATH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h
new file mode 100644
index 00000000..fc481392
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbctype.h
@@ -0,0 +1,90 @@
+/*
+ * Multibyte char definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MBCTYPE_H
+#define __WINE_MBCTYPE_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __i386__
+unsigned char* __cdecl __p__mbctype(void);
+#define _mbctype (__p__mbctype())
+#else
+extern unsigned char MSVCRT_mbctype[];
+#endif
+
+#define _MS 0x01
+#define _MP 0x02
+#define _M1 0x04
+#define _M2 0x08
+
+#define _SBUP 0x10
+#define _SBLOW 0x20
+
+#define _MBC_SINGLE 0
+#define _MBC_LEAD 1
+#define _MBC_TRAIL 2
+#define _MBC_ILLEGAL -1
+
+#define _KANJI_CP 932
+
+#define _MB_CP_SBCS 0
+#define _MB_CP_OEM -2
+#define _MB_CP_ANSI -3
+#define _MB_CP_LOCALE -4
+
+int __cdecl _getmbcp(void);
+int __cdecl _ismbbalnum(unsigned int);
+int __cdecl _ismbbalpha(unsigned int);
+int __cdecl _ismbbgraph(unsigned int);
+int __cdecl _ismbbkalnum(unsigned int);
+int __cdecl _ismbbkana(unsigned int);
+int __cdecl _ismbbkprint(unsigned int);
+int __cdecl _ismbbkpunct(unsigned int);
+int __cdecl _ismbbprint(unsigned int);
+int __cdecl _ismbbpunct(unsigned int);
+int __cdecl _setmbcp(int);
+
+#ifndef _MBLEADTRAIL_DEFINED
+#define _MBLEADTRAIL_DEFINED
+int __cdecl _ismbblead(unsigned int);
+int __cdecl _ismbbtrail(unsigned int);
+int __cdecl _ismbslead(const unsigned char*,const unsigned char*);
+int __cdecl _ismbstrail(const unsigned char*,const unsigned char*);
+#endif /* _MBLEADTRAIL_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MBCTYPE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h
new file mode 100644
index 00000000..fd4a8e64
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/mbstring.h
@@ -0,0 +1,132 @@
+/*
+ * Multibyte string definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_MBSTRING_H
+#define __WINE_MBSTRING_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _NLSCMP_DEFINED
+#define _NLSCMPERROR ((unsigned int)0x7fffffff)
+#define _NLSCMP_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _ismbcalnum(unsigned int);
+int __cdecl _ismbcalpha(unsigned int);
+int __cdecl _ismbcdigit(unsigned int);
+int __cdecl _ismbcgraph(unsigned int);
+int __cdecl _ismbchira(unsigned int);
+int __cdecl _ismbckata(unsigned int);
+int __cdecl _ismbcl0(unsigned int);
+int __cdecl _ismbcl1(unsigned int);
+int __cdecl _ismbcl2(unsigned int);
+int __cdecl _ismbclegal(unsigned int);
+int __cdecl _ismbclower(unsigned int);
+int __cdecl _ismbcprint(unsigned int);
+int __cdecl _ismbcpunct(unsigned int);
+int __cdecl _ismbcspace(unsigned int);
+int __cdecl _ismbcsymbol(unsigned int);
+int __cdecl _ismbcupper(unsigned int);
+unsigned int __cdecl _mbbtombc(unsigned int);
+int __cdecl _mbbtype(unsigned char,int);
+#define _mbccmp(_cpc1,_cpc2) _mbsncmp((_cpc1),(_cpc2),1)
+void __cdecl _mbccpy(unsigned char*,const unsigned char*);
+unsigned int __cdecl _mbcjistojms(unsigned int);
+unsigned int __cdecl _mbcjmstojis(unsigned int);
+size_t __cdecl _mbclen(const unsigned char*);
+unsigned int __cdecl _mbctohira(unsigned int);
+unsigned int __cdecl _mbctokata(unsigned int);
+unsigned int __cdecl _mbctolower(unsigned int);
+unsigned int __cdecl _mbctombb(unsigned int);
+unsigned int __cdecl _mbctoupper(unsigned int);
+int __cdecl _mbsbtype(const unsigned char*,size_t);
+unsigned char* __cdecl _mbscat(unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbschr(const unsigned char*,unsigned int);
+int __cdecl _mbscmp(const unsigned char*,const unsigned char*);
+int __cdecl _mbscoll(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbscpy(unsigned char*,const unsigned char*);
+size_t __cdecl _mbscspn(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsdec(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsdup(const unsigned char*);
+int __cdecl _mbsicmp(const unsigned char*,const unsigned char*);
+int __cdecl _mbsicoll(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsinc(const unsigned char*);
+size_t __cdecl _mbslen(const unsigned char*);
+unsigned char* __cdecl _mbslwr(unsigned char*);
+unsigned char* __cdecl _mbsnbcat(unsigned char*,const unsigned char*,size_t);
+errno_t __cdecl _mbsnbcat_s(unsigned char*,size_t,const unsigned char*,size_t);
+int __cdecl _mbsnbcmp(const unsigned char*,const unsigned char*,size_t);
+int __cdecl _mbsnbcoll(const unsigned char*,const unsigned char*,size_t);
+size_t __cdecl _mbsnbcnt(const unsigned char*,size_t);
+unsigned char* __cdecl _mbsnbcpy(unsigned char*,const unsigned char*,size_t);
+int __cdecl _mbsnbicmp(const unsigned char*,const unsigned char*,size_t);
+int __cdecl _mbsnbicoll(const unsigned char*,const unsigned char*,size_t);
+unsigned char* __cdecl _mbsnbset(unsigned char*,unsigned int,size_t);
+unsigned char* __cdecl _mbsncat(unsigned char*,const unsigned char*, size_t);
+size_t __cdecl _mbsnccnt(const unsigned char*,size_t);
+int __cdecl _mbsncmp(const unsigned char*,const unsigned char*,size_t);
+int __cdecl _mbsncoll(const unsigned char*,const unsigned char*,size_t);
+unsigned char* __cdecl _mbsncpy(unsigned char*,const unsigned char*,size_t);
+unsigned int __cdecl _mbsnextc (const unsigned char*);
+int __cdecl _mbsnicmp(const unsigned char*,const unsigned char*,size_t);
+int __cdecl _mbsnicoll(const unsigned char*,const unsigned char*,size_t);
+unsigned char* __cdecl _mbsninc(const unsigned char*,size_t);
+unsigned char* __cdecl _mbsnset(unsigned char*,unsigned int,size_t);
+unsigned char* __cdecl _mbspbrk(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsrchr(const unsigned char*,unsigned int);
+unsigned char* __cdecl _mbsrev(unsigned char*);
+unsigned char* __cdecl _mbsset(unsigned char*,unsigned int);
+size_t __cdecl _mbsspn(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsspnp(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbsstr(const unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbstok(unsigned char*,const unsigned char*);
+unsigned char* __cdecl _mbstok_l(unsigned char*,const unsigned char*,_locale_t);
+unsigned char* __cdecl _mbsupr(unsigned char*);
+
+#ifndef _MBLEADTRAIL_DEFINED
+#define _MBLEADTRAIL_DEFINED
+int __cdecl _ismbblead(unsigned int);
+int __cdecl _ismbbtrail(unsigned int);
+int __cdecl _ismbslead(const unsigned char*,const unsigned char*);
+int __cdecl _ismbstrail(const unsigned char*,const unsigned char*);
+#endif /* _MBLEADTRAIL_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_MBSTRING_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h
new file mode 100644
index 00000000..ecf13aa5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/memory.h
@@ -0,0 +1,37 @@
+/*
+ * Memory definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_MEMORY_H
+#define __WINE_MEMORY_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRT_MEMORY_DEFINED
+#define _CRT_MEMORY_DEFINED
+
+void* __cdecl memchr(const void*,int,size_t);
+int __cdecl memcmp(const void*,const void*,size_t);
+void* __cdecl memcpy(void*,const void*,size_t);
+errno_t __cdecl memcpy_s(void*,size_t,const void*,size_t);
+void* __cdecl memset(void*,int,size_t);
+void* __cdecl _memccpy(void*,const void*,int,unsigned int);
+int __cdecl _memicmp(const void*,const void*,unsigned int);
+
+static inline int memicmp(const void* s1, const void* s2, size_t len) { return _memicmp(s1, s2, len); }
+static inline void* memccpy(void *s1, const void *s2, int c, size_t n) { return _memccpy(s1, s2, c, n); }
+
+#endif /* _CRT_MEMORY_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_MEMORY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h
new file mode 100644
index 00000000..f9ab2a41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/process.h
@@ -0,0 +1,126 @@
+/*
+ * Process definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_PROCESS_H
+#define __WINE_PROCESS_H
+
+#include <crtdefs.h>
+
+/* Process creation flags */
+#define _P_WAIT 0
+#define _P_NOWAIT 1
+#define _P_OVERLAY 2
+#define _P_NOWAITO 3
+#define _P_DETACH 4
+
+#define _WAIT_CHILD 0
+#define _WAIT_GRANDCHILD 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (__cdecl *_beginthread_start_routine_t)(void *);
+typedef unsigned int (__stdcall *_beginthreadex_start_routine_t)(void *);
+
+uintptr_t __cdecl _beginthread(_beginthread_start_routine_t,unsigned int,void*);
+uintptr_t __cdecl _beginthreadex(void*,unsigned int,_beginthreadex_start_routine_t,void*,unsigned int,unsigned int*);
+intptr_t __cdecl _cwait(int*,intptr_t,int);
+void __cdecl _endthread(void);
+void __cdecl _endthreadex(unsigned int);
+intptr_t __cdecl _execl(const char*,const char*,...);
+intptr_t __cdecl _execle(const char*,const char*,...);
+intptr_t __cdecl _execlp(const char*,const char*,...);
+intptr_t __cdecl _execlpe(const char*,const char*,...);
+intptr_t __cdecl _execv(const char*,const char* const *);
+intptr_t __cdecl _execve(const char*,const char* const *,const char* const *);
+intptr_t __cdecl _execvp(const char*,const char* const *);
+intptr_t __cdecl _execvpe(const char*,const char* const *,const char* const *);
+int __cdecl _getpid(void);
+intptr_t __cdecl _spawnl(int,const char*,const char*,...);
+intptr_t __cdecl _spawnle(int,const char*,const char*,...);
+intptr_t __cdecl _spawnlp(int,const char*,const char*,...);
+intptr_t __cdecl _spawnlpe(int,const char*,const char*,...);
+intptr_t __cdecl _spawnv(int,const char*,const char* const *);
+intptr_t __cdecl _spawnve(int,const char*,const char* const *,const char* const *);
+intptr_t __cdecl _spawnvp(int,const char*,const char* const *);
+intptr_t __cdecl _spawnvpe(int,const char*,const char* const *,const char* const *);
+
+void __cdecl _c_exit(void);
+void __cdecl _cexit(void);
+void __cdecl _exit(int);
+void __cdecl abort(void);
+void __cdecl exit(int);
+int __cdecl system(const char*);
+
+#ifndef _WPROCESS_DEFINED
+#define _WPROCESS_DEFINED
+intptr_t __cdecl _wexecl(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexecle(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexeclp(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexeclpe(const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wexecv(const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wexecve(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+intptr_t __cdecl _wexecvp(const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wexecvpe(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+intptr_t __cdecl _wspawnl(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnle(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnlp(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnlpe(int,const wchar_t*,const wchar_t*,...);
+intptr_t __cdecl _wspawnv(int,const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wspawnve(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+intptr_t __cdecl _wspawnvp(int,const wchar_t*,const wchar_t* const *);
+intptr_t __cdecl _wspawnvpe(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int __cdecl _wsystem(const wchar_t*);
+#endif /* _WPROCESS_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define P_WAIT _P_WAIT
+#define P_NOWAIT _P_NOWAIT
+#define P_OVERLAY _P_OVERLAY
+#define P_NOWAITO _P_NOWAITO
+#define P_DETACH _P_DETACH
+
+#define WAIT_CHILD _WAIT_CHILD
+#define WAIT_GRANDCHILD _WAIT_GRANDCHILD
+
+static inline intptr_t cwait(int *status, intptr_t pid, int action) { return _cwait(status, pid, action); }
+static inline int getpid(void) { return _getpid(); }
+static inline intptr_t execv(const char* name, const char* const* argv) { return _execv(name, argv); }
+static inline intptr_t execve(const char* name, const char* const* argv, const char* const* envv) { return _execve(name, argv, envv); }
+static inline intptr_t execvp(const char* name, const char* const* argv) { return _execvp(name, argv); }
+static inline intptr_t execvpe(const char* name, const char* const* argv, const char* const* envv) { return _execvpe(name, argv, envv); }
+static inline intptr_t spawnv(int flags, const char* name, const char* const* argv) { return _spawnv(flags, name, argv); }
+static inline intptr_t spawnve(int flags, const char* name, const char* const* argv, const char* const* envv) { return _spawnve(flags, name, argv, envv); }
+static inline intptr_t spawnvp(int flags, const char* name, const char* const* argv) { return _spawnvp(flags, name, argv); }
+static inline intptr_t spawnvpe(int flags, const char* name, const char* const* argv, const char* const* envv) { return _spawnvpe(flags, name, argv, envv); }
+
+#if defined(__GNUC__) && (__GNUC__ < 4)
+extern intptr_t __cdecl execl(const char*,const char*,...) __attribute__((alias("_execl")));
+extern intptr_t __cdecl execle(const char*,const char*,...) __attribute__((alias("_execle")));
+extern intptr_t __cdecl execlp(const char*,const char*,...) __attribute__((alias("_execlp")));
+extern intptr_t __cdecl execlpe(const char*,const char*,...) __attribute__((alias("_execlpe")));
+extern intptr_t __cdecl spawnl(int,const char*,const char*,...) __attribute__((alias("_spawnl")));
+extern intptr_t __cdecl spawnle(int,const char*,const char*,...) __attribute__((alias("_spawnle")));
+extern intptr_t __cdecl spawnlp(int,const char*,const char*,...) __attribute__((alias("_spawnlp")));
+extern intptr_t __cdecl spawnlpe(int,const char*,const char*,...) __attribute__((alias("_spawnlpe")));
+#else
+#define execl _execl
+#define execle _execle
+#define execlp _execlp
+#define execlpe _execlpe
+#define spawnl _spawnl
+#define spawnle _spawnle
+#define spawnlp _spawnlp
+#define spawnlpe _spawnlpe
+#endif /* __GNUC__ */
+
+#endif /* __WINE_PROCESS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h
new file mode 100644
index 00000000..c21e6def
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/search.h
@@ -0,0 +1,52 @@
+/*
+ * Heap definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SEARCH_H
+#define __WINE_SEARCH_H
+
+#include <crtdefs.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void* __cdecl _lfind(const void*,const void*,unsigned int*,unsigned int,int (*)(const void*,const void*));
+void* __cdecl _lsearch(const void*,void*,unsigned int*,unsigned int,int (*)(const void*,const void*));
+void* __cdecl bsearch(const void*,const void*,size_t,size_t,int (*)(const void*,const void*));
+void __cdecl qsort(void*,size_t,size_t,int (*)(const void*,const void*));
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline void* lfind(const void* match, const void* start, unsigned int* array_size, unsigned int elem_size, int (*cf)(const void*,const void*)) { return _lfind(match, start, array_size, elem_size, cf); }
+static inline void* lsearch(const void* match, void* start, unsigned int* array_size, unsigned int elem_size, int (*cf)(const void*,const void*) ) { return _lsearch(match, start, array_size, elem_size, cf); }
+
+#endif /* __WINE_SEARCH_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h
new file mode 100644
index 00000000..7595f886
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/setjmp.h
@@ -0,0 +1,140 @@
+/*
+ * Setjmp/Longjmp definitions
+ *
+ * Copyright 2001 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SETJMP_H
+#define __WINE_SETJMP_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifdef __i386__
+
+typedef struct __JUMP_BUFFER
+{
+ unsigned long Ebp;
+ unsigned long Ebx;
+ unsigned long Edi;
+ unsigned long Esi;
+ unsigned long Esp;
+ unsigned long Eip;
+ unsigned long Registration;
+ unsigned long TryLevel;
+ /* Start of new struct members */
+ unsigned long Cookie;
+ unsigned long UnwindFunc;
+ unsigned long UnwindData[6];
+} _JUMP_BUFFER;
+
+#define _JBLEN 16
+#define _JBTYPE int
+
+#elif defined(__x86_64__)
+
+typedef struct _SETJMP_FLOAT128
+{
+ unsigned __int64 DECLSPEC_ALIGN(16) Part[2];
+} SETJMP_FLOAT128;
+
+typedef struct _JUMP_BUFFER
+{
+ unsigned __int64 Frame;
+ unsigned __int64 Rbx;
+ unsigned __int64 Rsp;
+ unsigned __int64 Rbp;
+ unsigned __int64 Rsi;
+ unsigned __int64 Rdi;
+ unsigned __int64 R12;
+ unsigned __int64 R13;
+ unsigned __int64 R14;
+ unsigned __int64 R15;
+ unsigned __int64 Rip;
+ unsigned __int64 Spare;
+ SETJMP_FLOAT128 Xmm6;
+ SETJMP_FLOAT128 Xmm7;
+ SETJMP_FLOAT128 Xmm8;
+ SETJMP_FLOAT128 Xmm9;
+ SETJMP_FLOAT128 Xmm10;
+ SETJMP_FLOAT128 Xmm11;
+ SETJMP_FLOAT128 Xmm12;
+ SETJMP_FLOAT128 Xmm13;
+ SETJMP_FLOAT128 Xmm14;
+ SETJMP_FLOAT128 Xmm15;
+} _JUMP_BUFFER;
+
+#define _JBLEN 16
+typedef SETJMP_FLOAT128 _JBTYPE;
+
+#elif defined(__arm__)
+
+typedef struct _JUMP_BUFFER
+{
+ unsigned long Frame;
+ unsigned long R4;
+ unsigned long R5;
+ unsigned long R6;
+ unsigned long R7;
+ unsigned long R8;
+ unsigned long R9;
+ unsigned long R10;
+ unsigned long R11;
+ unsigned long Sp;
+ unsigned long Pc;
+ unsigned long Fpscr;
+ unsigned long long D[8];
+} _JUMP_BUFFER;
+
+#define _JBLEN 28
+#define _JBTYPE int
+
+#else
+
+#define _JBLEN 1
+#define _JBTYPE int
+
+#endif
+
+typedef _JBTYPE jmp_buf[_JBLEN];
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _setjmp(jmp_buf);
+void __cdecl longjmp(jmp_buf,int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define setjmp _setjmp
+
+#include <poppack.h>
+
+#endif /* __WINE_SETJMP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h
new file mode 100644
index 00000000..3813e769
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/share.h
@@ -0,0 +1,42 @@
+/*
+ * share.h
+ *
+ * Constants for file sharing functions.
+ *
+ * Derived from the Mingw32 header written by Colin Peters.
+ * Modified for Wine use by Bill Medland
+ * This file is in the public domain.
+ *
+ * Original header contained the following
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __WINE_SHARE_H
+#define __WINE_SHARE_H
+#ifndef __WINE_USE_MSVCRT
+#define __WINE_USE_MSVCRT
+#endif
+
+#define SH_COMPAT 0x00 /* Compatibility */
+#define SH_DENYRW 0x10 /* Deny read/write */
+#define SH_DENYWR 0x20 /* Deny write */
+#define SH_DENYRD 0x30 /* Deny read */
+#define SH_DENYNO 0x40 /* Deny nothing */
+
+#define _SH_COMPAT SH_COMPAT
+#define _SH_DENYRW SH_DENYRW
+#define _SH_DENYWR SH_DENYWR
+#define _SH_DENYRD SH_DENYRD
+#define _SH_DENYNO SH_DENYNO
+
+#endif /* __WINE_SHARE_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h
new file mode 100644
index 00000000..7a3ffa35
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/signal.h
@@ -0,0 +1,63 @@
+/*
+ * Signal definitions
+ *
+ * Copyright 2005 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_SIGNAL_H
+#define _WINE_SIGNAL_H
+
+#include <crtdefs.h>
+
+#define SIGINT 2
+#define SIGILL 4
+#define SIGFPE 8
+#define SIGSEGV 11
+#define SIGTERM 15
+#define SIGBREAK 21
+#define SIGABRT 22
+
+#define NSIG (SIGABRT + 1)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (__cdecl *__sighandler_t)(int);
+
+#define SIG_DFL ((__sighandler_t)0)
+#define SIG_IGN ((__sighandler_t)1)
+#define SIG_ERR ((__sighandler_t)-1)
+
+void** __cdecl __pxcptinfoptrs(void);
+__sighandler_t __cdecl signal(int sig, __sighandler_t func);
+int __cdecl raise(int sig);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINE_SIGNAL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h
new file mode 100644
index 00000000..b229cc6f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stddef.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STDDEF_H
+#define __WINE_STDDEF_H
+
+#include <crtdefs.h>
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#ifdef _WIN64
+#define offsetof(s,m) (size_t)((ptrdiff_t)&(((s*)NULL)->m))
+#else
+#define offsetof(s,m) (size_t)&(((s*)NULL)->m)
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+__msvcrt_ulong __cdecl __threadid(void);
+__msvcrt_ulong __cdecl __threadhandle(void);
+#define _threadid (__threadid())
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_STDDEF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h
new file mode 100644
index 00000000..737003d9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdio.h
@@ -0,0 +1,272 @@
+/*
+ * Standard I/O definitions.
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_STDIO_H
+#define __WINE_STDIO_H
+
+#include <crtdefs.h>
+
+#ifndef RC_INVOKED
+#include <stdarg.h>
+#endif
+
+#include <pshpack8.h>
+
+/* file._flag flags */
+#define _IOREAD 0x0001
+#define _IOWRT 0x0002
+#define _IOMYBUF 0x0008
+#define _IOEOF 0x0010
+#define _IOERR 0x0020
+#define _IOSTRG 0x0040
+#define _IORW 0x0080
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+/* more file._flag flags, but these conflict with Unix */
+#define _IOFBF 0x0000
+#define _IONBF 0x0004
+#define _IOLBF 0x0040
+
+#define EOF (-1)
+#define FILENAME_MAX 260
+#define TMP_MAX 0x7fff
+#define FOPEN_MAX 20
+#define L_tmpnam 260
+
+#define BUFSIZ 512
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+#endif
+
+#ifndef _FILE_DEFINED
+#define _FILE_DEFINED
+typedef struct _iobuf
+{
+ char* _ptr;
+ int _cnt;
+ char* _base;
+ int _flag;
+ int _file;
+ int _charbuf;
+ int _bufsiz;
+ char* _tmpfname;
+} FILE;
+#endif /* _FILE_DEFINED */
+
+#ifndef _FPOS_T_DEFINED
+typedef __int64 DECLSPEC_ALIGN(8) fpos_t;
+#define _FPOS_T_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _STDIO_DEFINED
+# ifdef __i386__
+FILE* __cdecl __p__iob(void);
+# define _iob (__p__iob())
+# else
+FILE* __cdecl __iob_func(void);
+# define _iob (__iob_func())
+# endif
+#endif /* _STDIO_DEFINED */
+
+#define stdin (_iob+STDIN_FILENO)
+#define stdout (_iob+STDOUT_FILENO)
+#define stderr (_iob+STDERR_FILENO)
+
+/* return value for _get_output_format */
+#define _TWO_DIGIT_EXPONENT 0x1
+
+#ifndef _STDIO_DEFINED
+#define _STDIO_DEFINED
+int __cdecl _fcloseall(void);
+FILE* __cdecl _fdopen(int,const char*);
+int __cdecl _fgetchar(void);
+int __cdecl _filbuf(FILE*);
+int __cdecl _fileno(FILE*);
+int __cdecl _flsbuf(int,FILE*);
+int __cdecl _flushall(void);
+int __cdecl _fputchar(int);
+FILE* __cdecl _fsopen(const char*,const char*,int);
+int __cdecl _get_printf_count_output(void);
+int __cdecl _getmaxstdio(void);
+int __cdecl _getw(FILE*);
+int __cdecl _pclose(FILE*);
+FILE* __cdecl _popen(const char*,const char*);
+int __cdecl _putw(int,FILE*);
+int __cdecl _rmtmp(void);
+int __cdecl _set_printf_count_output(int);
+int __cdecl _setmaxstdio(int);
+int __cdecl _snprintf(char*,size_t,const char*,...);
+int __cdecl _snprintf_s(char*,size_t,size_t,const char*,...);
+char* __cdecl _tempnam(const char*,const char*);
+int __cdecl _unlink(const char*);
+int __cdecl _scprintf(const char*,...);
+int __cdecl _vscprintf(const char*,__ms_va_list);
+int __cdecl _vsnprintf(char*,size_t,const char*,__ms_va_list);
+int __cdecl _vsnprintf_s(char*,size_t,size_t,const char*,__ms_va_list);
+int __cdecl _vsprintf_p_l(char*,size_t,const char*,_locale_t,__ms_va_list);
+
+void __cdecl clearerr(FILE*);
+int __cdecl fclose(FILE*);
+int __cdecl feof(FILE*);
+int __cdecl ferror(FILE*);
+int __cdecl fflush(FILE*);
+int __cdecl fgetc(FILE*);
+int __cdecl fgetpos(FILE*,fpos_t*);
+char* __cdecl fgets(char*,int,FILE*);
+FILE* __cdecl fopen(const char*,const char*);
+errno_t __cdecl fopen_s(FILE**,const char*,const char*);
+int __cdecl fprintf(FILE*,const char*,...);
+int __cdecl fprintf_s(FILE*,const char*,...);
+int __cdecl fputc(int,FILE*);
+int __cdecl fputs(const char*,FILE*);
+size_t __cdecl fread(void*,size_t,size_t,FILE*);
+FILE* __cdecl freopen(const char*,const char*,FILE*);
+int __cdecl fscanf(FILE*,const char*,...);
+int __cdecl fscanf_s(FILE*,const char*,...);
+int __cdecl fseek(FILE*,__msvcrt_long,int);
+int __cdecl _fseeki64(FILE*,__int64,int);
+int __cdecl fsetpos(FILE*,fpos_t*);
+__msvcrt_long __cdecl ftell(FILE*);
+__int64 __cdecl _ftelli64(FILE*);
+size_t __cdecl fwrite(const void*,size_t,size_t,FILE*);
+int __cdecl getc(FILE*);
+int __cdecl getchar(void);
+char* __cdecl gets(char*);
+void __cdecl perror(const char*);
+int __cdecl printf(const char*,...);
+int __cdecl printf_s(const char*,...);
+int __cdecl putc(int,FILE*);
+int __cdecl putchar(int);
+int __cdecl puts(const char*);
+int __cdecl remove(const char*);
+int __cdecl rename(const char*,const char*);
+void __cdecl rewind(FILE*);
+int __cdecl scanf(const char*,...);
+int __cdecl scanf_s(const char*,...);
+void __cdecl setbuf(FILE*,char*);
+int __cdecl setvbuf(FILE*,char*,int,size_t);
+int __cdecl sprintf(char*,const char*,...);
+int __cdecl sprintf_s(char*,size_t,const char*,...);
+int __cdecl _scprintf(const char *, ...);
+int __cdecl sscanf(const char*,const char*,...);
+int __cdecl sscanf_s(const char*,const char*,...);
+FILE* __cdecl tmpfile(void);
+char* __cdecl tmpnam(char*);
+int __cdecl ungetc(int,FILE*);
+int __cdecl vfprintf(FILE*,const char*,__ms_va_list);
+int __cdecl vfprintf_s(FILE*,const char*,__ms_va_list);
+int __cdecl vprintf(const char*,__ms_va_list);
+int __cdecl vprintf_s(const char*,__ms_va_list);
+int __cdecl vsprintf(char*,const char*,__ms_va_list);
+int __cdecl vsprintf_s(char*,size_t,const char*,__ms_va_list);
+unsigned int __cdecl _get_output_format(void);
+unsigned int __cdecl _set_output_format(void);
+
+#ifndef _WSTDIO_DEFINED
+#define _WSTDIO_DEFINED
+wint_t __cdecl _fgetwchar(void);
+wint_t __cdecl _fputwchar(wint_t);
+wchar_t* __cdecl _getws(wchar_t*);
+int __cdecl _putws(const wchar_t*);
+int __cdecl _snwprintf(wchar_t*,size_t,const wchar_t*,...);
+int __cdecl _snwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,...);
+int __cdecl _scwprintf(const wchar_t*,...);
+int __cdecl _vscwprintf(const wchar_t*,__ms_va_list);
+int __cdecl _vscwprintf_p_l(const wchar_t*,_locale_t,__ms_va_list);
+int __cdecl _vsnwprintf(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int __cdecl _vsnwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,__ms_va_list);
+int __cdecl _vswprintf_p_l(wchar_t*,size_t,const wchar_t*,_locale_t,__ms_va_list);
+FILE* __cdecl _wfdopen(int,const wchar_t*);
+FILE* __cdecl _wfopen(const wchar_t*,const wchar_t*);
+errno_t __cdecl _wfopen_s(FILE**,const wchar_t*,const wchar_t*);
+FILE* __cdecl _wfreopen(const wchar_t*,const wchar_t*,FILE*);
+FILE* __cdecl _wfsopen(const wchar_t*,const wchar_t*,int);
+void __cdecl _wperror(const wchar_t*);
+FILE* __cdecl _wpopen(const wchar_t*,const wchar_t*);
+int __cdecl _wremove(const wchar_t*);
+wchar_t* __cdecl _wtempnam(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl _wtmpnam(wchar_t*);
+
+wint_t __cdecl fgetwc(FILE*);
+wchar_t* __cdecl fgetws(wchar_t*,int,FILE*);
+wint_t __cdecl fputwc(wint_t,FILE*);
+int __cdecl fputws(const wchar_t*,FILE*);
+int __cdecl fwprintf(FILE*,const wchar_t*,...);
+int __cdecl fwprintf_s(FILE*,const wchar_t*,...);
+int __cdecl fputws(const wchar_t*,FILE*);
+int __cdecl fwscanf(FILE*,const wchar_t*,...);
+int __cdecl fwscanf_s(FILE*,const wchar_t*,...);
+wint_t __cdecl getwc(FILE*);
+wint_t __cdecl getwchar(void);
+wchar_t* __cdecl getws(wchar_t*);
+wint_t __cdecl putwc(wint_t,FILE*);
+wint_t __cdecl putwchar(wint_t);
+int __cdecl putws(const wchar_t*);
+int __cdecl swprintf(wchar_t*,const wchar_t*,...);
+int __cdecl swprintf_s(wchar_t*,size_t,const wchar_t*,...);
+int __cdecl swscanf(const wchar_t*,const wchar_t*,...);
+int __cdecl swscanf_s(const wchar_t*,const wchar_t*,...);
+wint_t __cdecl ungetwc(wint_t,FILE*);
+int __cdecl vfwprintf(FILE*,const wchar_t*,__ms_va_list);
+int __cdecl vfwprintf_s(FILE*,const wchar_t*,__ms_va_list);
+int __cdecl vswprintf(wchar_t*,const wchar_t*,__ms_va_list);
+int __cdecl vswprintf_s(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int __cdecl vwprintf(const wchar_t*,__ms_va_list);
+int __cdecl vwprintf_s(const wchar_t*,__ms_va_list);
+int __cdecl wprintf(const wchar_t*,...);
+int __cdecl wprintf_s(const wchar_t*,...);
+int __cdecl wscanf(const wchar_t*,...);
+int __cdecl wscanf_s(const wchar_t*,...);
+#endif /* _WSTDIO_DEFINED */
+
+#endif /* _STDIO_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline FILE* fdopen(int fd, const char *mode) { return _fdopen(fd, mode); }
+static inline int fgetchar(void) { return _fgetchar(); }
+static inline int fileno(FILE* file) { return _fileno(file); }
+static inline int fputchar(int c) { return _fputchar(c); }
+static inline int pclose(FILE* file) { return _pclose(file); }
+static inline FILE* popen(const char* command, const char* mode) { return _popen(command, mode); }
+static inline char* tempnam(const char *dir, const char *prefix) { return _tempnam(dir, prefix); }
+#ifndef _UNLINK_DEFINED
+static inline int unlink(const char* path) { return _unlink(path); }
+#define _UNLINK_DEFINED
+#endif
+static inline int vsnprintf(char *buffer, size_t size, const char *format, __ms_va_list args) { return _vsnprintf(buffer,size,format,args); }
+
+static inline wint_t fgetwchar(void) { return _fgetwchar(); }
+static inline wint_t fputwchar(wint_t wc) { return _fputwchar(wc); }
+static inline int getw(FILE* file) { return _getw(file); }
+static inline int putw(int val, FILE* file) { return _putw(val, file); }
+static inline FILE* wpopen(const wchar_t* command,const wchar_t* mode) { return _wpopen(command, mode); }
+
+#include <poppack.h>
+
+#endif /* __WINE_STDIO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h
new file mode 100644
index 00000000..e88ffa3f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/stdlib.h
@@ -0,0 +1,301 @@
+/*
+ * Standard library definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_STDLIB_H
+#define __WINE_STDLIB_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void*)0)
+#endif
+#endif
+
+typedef struct
+{
+ float f;
+} _CRT_FLOAT;
+
+typedef struct
+{
+ double x;
+} _CRT_DOUBLE;
+
+typedef struct
+{
+ unsigned char ld[10];
+} _LDOUBLE;
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE -1
+#define RAND_MAX 0x7FFF
+
+#ifndef _MAX_PATH
+#define _MAX_DRIVE 3
+#define _MAX_FNAME 256
+#define _MAX_DIR _MAX_FNAME
+#define _MAX_EXT _MAX_FNAME
+#define _MAX_PATH 260
+#endif
+
+/* Make the secure string functions (names end in "_s") truncate their output */
+#define _TRUNCATE ((size_t)-1)
+
+typedef struct _div_t {
+ int quot;
+ int rem;
+} div_t;
+
+typedef struct _ldiv_t {
+ __msvcrt_long quot;
+ __msvcrt_long rem;
+} ldiv_t;
+
+#define __max(a,b) (((a) > (b)) ? (a) : (b))
+#define __min(a,b) (((a) < (b)) ? (a) : (b))
+#ifndef __cplusplus
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+/* _set_error_mode() constants */
+#define _OUT_TO_DEFAULT 0
+#define _OUT_TO_STDERR 1
+#define _OUT_TO_MSGBOX 2
+#define _REPORT_ERRMODE 3
+
+/* _set_abort_behavior codes */
+#define _WRITE_ABORT_MSG 1
+#define _CALL_REPORTFAULT 2
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __i386__
+
+extern unsigned int* __cdecl __p__osver(void);
+#define _osver (*__p__osver())
+extern unsigned int* __cdecl __p__winver(void);
+#define _winver (*__p__winver())
+extern unsigned int* __cdecl __p__winmajor(void);
+#define _winmajor (*__p__winmajor())
+extern unsigned int* __cdecl __p__winminor(void);
+#define _winminor (*__p__winminor())
+extern int* __cdecl __p___argc(void);
+#define __argc (*__p___argc())
+extern char*** __cdecl __p___argv(void);
+#define __argv (*__p___argv())
+extern wchar_t*** __cdecl __p___wargv(void);
+#define __wargv (*__p___wargv())
+extern char*** __cdecl __p__environ(void);
+#define _environ (*__p__environ())
+extern wchar_t*** __cdecl __p__wenviron(void);
+#define _wenviron (*__p__wenviron())
+extern unsigned int* __cdecl __p__fmode(void);
+#define _fmode (*__p__fmode())
+
+#else /* __i386__ */
+
+extern unsigned int _osver;
+extern unsigned int _winver;
+extern unsigned int _winmajor;
+extern unsigned int _winminor;
+extern int __argc;
+extern char **__argv;
+extern wchar_t **__wargv;
+extern char **_environ;
+extern wchar_t **_wenviron;
+extern unsigned int _fmode;
+
+#endif /* __i386__ */
+
+extern int* __cdecl ___mb_cur_max_func(void);
+#define __mb_cur_max (*___mb_cur_max_func())
+extern __msvcrt_ulong* __cdecl __doserrno(void);
+#define _doserrno (*__doserrno())
+extern int* __cdecl _errno(void);
+#define errno (*_errno())
+
+/* FIXME: We need functions to access these:
+ * int _sys_nerr;
+ * char** _sys_errlist;
+ */
+
+errno_t __cdecl _get_doserrno(int*);
+errno_t __cdecl _get_errno(int*);
+errno_t __cdecl _set_doserrno(int);
+errno_t __cdecl _set_errno(int);
+
+typedef int (__cdecl *_onexit_t)(void);
+
+
+int __cdecl _atodbl(_CRT_DOUBLE*,char*);
+int __cdecl _atodbl_l(_CRT_DOUBLE*,char*,_locale_t);
+int __cdecl _atoflt(_CRT_FLOAT*,char*);
+int __cdecl _atoflt_l(_CRT_FLOAT*,char*,_locale_t);
+__int64 __cdecl _atoi64(const char*);
+long double __cdecl _atold(const char*);
+int __cdecl _atoldbl(_LDOUBLE*,char*);
+void __cdecl _beep(unsigned int,unsigned int);
+char* __cdecl _ecvt(double,int,int*,int*);
+char* __cdecl _fcvt(double,int,int*,int*);
+char* __cdecl _fullpath(char*,const char*,size_t);
+char* __cdecl _gcvt(double,int,char*);
+char* __cdecl _i64toa(__int64,char*,int);
+char* __cdecl _itoa(int,char*,int);
+errno_t __cdecl _itoa_s(int,char*,size_t,int);
+char* __cdecl _ltoa(__msvcrt_long,char*,int);
+__msvcrt_ulong __cdecl _lrotl(__msvcrt_ulong,int);
+__msvcrt_ulong __cdecl _lrotr(__msvcrt_ulong,int);
+void __cdecl _makepath(char*,const char*,const char*,const char*,const char*);
+int __cdecl _makepath_s(char*,size_t,const char*,const char*,const char*,const char*);
+size_t __cdecl _mbstrlen(const char*);
+_onexit_t __cdecl _onexit(_onexit_t);
+int __cdecl _putenv(const char*);
+unsigned int __cdecl _rotl(unsigned int,int);
+unsigned int __cdecl _rotr(unsigned int,int);
+void __cdecl _searchenv(const char*,const char*,char*);
+int __cdecl _set_error_mode(int);
+void __cdecl _seterrormode(int);
+void __cdecl _sleep(__msvcrt_ulong);
+void __cdecl _splitpath(const char*,char*,char*,char*,char*);
+long double __cdecl _strtold(const char*,char**);
+void __cdecl _swab(char*,char*,int);
+char* __cdecl _ui64toa(unsigned __int64,char*,int);
+errno_t __cdecl _ui64toa_s(unsigned __int64,char*,size_t,int);
+char* __cdecl _ultoa(__msvcrt_ulong,char*,int);
+errno_t __cdecl _ultoa_s(__msvcrt_ulong,char*,size_t,int);
+
+void __cdecl _exit(int);
+void __cdecl abort(void);
+int __cdecl abs(int);
+int __cdecl atexit(void (*)(void));
+double __cdecl atof(const char*);
+int __cdecl atoi(const char*);
+int __cdecl _atoi_l(const char*,_locale_t);
+__msvcrt_long __cdecl atol(const char*);
+void* __cdecl calloc(size_t,size_t);
+#ifndef __i386__
+div_t __cdecl div(int,int);
+ldiv_t __cdecl ldiv(__msvcrt_long,__msvcrt_long);
+#endif
+void __cdecl exit(int);
+void __cdecl free(void*);
+char* __cdecl getenv(const char*);
+__msvcrt_long __cdecl labs(__msvcrt_long);
+void* __cdecl malloc(size_t);
+int __cdecl mblen(const char*,size_t);
+void __cdecl perror(const char*);
+int __cdecl rand(void);
+errno_t __cdecl rand_s(unsigned int*);
+void* __cdecl realloc(void*,size_t);
+void __cdecl srand(unsigned int);
+double __cdecl strtod(const char*,char**);
+__msvcrt_long __cdecl strtol(const char*,char**,int);
+__msvcrt_ulong __cdecl strtoul(const char*,char**,int);
+__int64 __cdecl _strtoi64(const char*,char**,int);
+__int64 __cdecl _strtoi64_l(const char*,char**,int,_locale_t);
+unsigned __int64 __cdecl _strtoui64(const char*,char**,int);
+unsigned __int64 __cdecl _strtoui64_l(const char*,char**,int,_locale_t);
+int __cdecl system(const char*);
+void* __cdecl bsearch(const void*,const void*,size_t,size_t,int (*)(const void*,const void*));
+void __cdecl qsort(void*,size_t,size_t,int (*)(const void*,const void*));
+
+#ifndef _WSTDLIB_DEFINED
+#define _WSTDLIB_DEFINED
+wchar_t* __cdecl _itow(int,wchar_t*,int);
+wchar_t* __cdecl _i64tow(__int64,wchar_t*,int);
+wchar_t* __cdecl _ltow(__msvcrt_long,wchar_t*,int);
+wchar_t* __cdecl _ui64tow(unsigned __int64,wchar_t*,int);
+wchar_t* __cdecl _ultow(__msvcrt_ulong,wchar_t*,int);
+wchar_t* __cdecl _wfullpath(wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl _wgetenv(const wchar_t*);
+void __cdecl _wmakepath(wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*);
+int __cdecl _wmakepath_s(wchar_t*,size_t,const wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*);
+void __cdecl _wperror(const wchar_t*);
+int __cdecl _wputenv(const wchar_t*);
+void __cdecl _wsearchenv(const wchar_t*,const wchar_t*,wchar_t*);
+void __cdecl _wsplitpath(const wchar_t*,wchar_t*,wchar_t*,wchar_t*,wchar_t*);
+errno_t __cdecl _wsplitpath_s(const wchar_t*,wchar_t*,size_t,wchar_t*,size_t,
+ wchar_t*,size_t,wchar_t*,size_t);
+int __cdecl _wsystem(const wchar_t*);
+double __cdecl _wtof(const wchar_t*);
+int __cdecl _wtoi(const wchar_t*);
+__int64 __cdecl _wtoi64(const wchar_t*);
+__msvcrt_long __cdecl _wtol(const wchar_t*);
+
+size_t __cdecl mbstowcs(wchar_t*,const char*,size_t);
+errno_t __cdecl mbstowcs_s(size_t*,wchar_t*,size_t,const char*,size_t);
+int __cdecl mbtowc(wchar_t*,const char*,size_t);
+double __cdecl wcstod(const wchar_t*,wchar_t**);
+__msvcrt_long __cdecl wcstol(const wchar_t*,wchar_t**,int);
+size_t __cdecl wcstombs(char*,const wchar_t*,size_t);
+errno_t __cdecl wcstombs_s(size_t*,char*,size_t,const wchar_t*,size_t);
+__msvcrt_ulong __cdecl wcstoul(const wchar_t*,wchar_t**,int);
+int __cdecl wctomb(char*,wchar_t);
+__int64 __cdecl _wcstoi64(const wchar_t*,wchar_t**,int);
+__int64 __cdecl _wcstoi64_l(const wchar_t*,wchar_t**,int,_locale_t);
+unsigned __int64 __cdecl _wcstoui64(const wchar_t*,wchar_t**,int);
+unsigned __int64 __cdecl _wcstoui64_l(const wchar_t*,wchar_t**,int,_locale_t);
+#endif /* _WSTDLIB_DEFINED */
+
+typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t*, const wchar_t*, const wchar_t*, unsigned, uintptr_t);
+_invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler);
+_invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
+void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file,
+ unsigned int line, uintptr_t arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define environ _environ
+#define onexit_t _onexit_t
+
+static inline char* ecvt(double value, int ndigit, int* decpt, int* sign) { return _ecvt(value, ndigit, decpt, sign); }
+static inline char* fcvt(double value, int ndigit, int* decpt, int* sign) { return _fcvt(value, ndigit, decpt, sign); }
+static inline char* gcvt(double value, int ndigit, char* buf) { return _gcvt(value, ndigit, buf); }
+static inline char* itoa(int value, char* str, int radix) { return _itoa(value, str, radix); }
+static inline char* ltoa(__msvcrt_long value, char* str, int radix) { return _ltoa(value, str, radix); }
+static inline _onexit_t onexit(_onexit_t func) { return _onexit(func); }
+static inline int putenv(const char* str) { return _putenv(str); }
+static inline void swab(char* src, char* dst, int len) { _swab(src, dst, len); }
+static inline char* ultoa(__msvcrt_ulong value, char* str, int radix) { return _ultoa(value, str, radix); }
+
+#ifdef __i386__
+static inline div_t __wine_msvcrt_div(int num, int denom)
+{
+ extern unsigned __int64 div(int,int);
+ div_t ret;
+ unsigned __int64 res = div(num,denom);
+ ret.quot = (int)res;
+ ret.rem = (int)(res >> 32);
+ return ret;
+}
+static inline ldiv_t __wine_msvcrt_ldiv(__msvcrt_long num, __msvcrt_long denom)
+{
+ extern unsigned __int64 ldiv(__msvcrt_long,__msvcrt_long);
+ ldiv_t ret;
+ unsigned __int64 res = ldiv(num,denom);
+ ret.quot = (__msvcrt_long)res;
+ ret.rem = (__msvcrt_long)(res >> 32);
+ return ret;
+}
+#define div(num,denom) __wine_msvcrt_div(num,denom)
+#define ldiv(num,denom) __wine_msvcrt_ldiv(num,denom)
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_STDLIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h
new file mode 100644
index 00000000..d1dca89a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/string.h
@@ -0,0 +1,156 @@
+/*
+ * String definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_STRING_H
+#define __WINE_STRING_H
+
+#include <crtdefs.h>
+
+#ifndef _NLSCMP_DEFINED
+#define _NLSCMPERROR ((unsigned int)0x7fffffff)
+#define _NLSCMP_DEFINED
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _CRT_MEMORY_DEFINED
+#define _CRT_MEMORY_DEFINED
+void* __cdecl memchr(const void*,int,size_t);
+int __cdecl memcmp(const void*,const void*,size_t);
+void* __cdecl memcpy(void*,const void*,size_t);
+errno_t __cdecl memcpy_s(void*,size_t,const void*,size_t);
+void* __cdecl memset(void*,int,size_t);
+void* __cdecl _memccpy(void*,const void*,int,unsigned int);
+int __cdecl _memicmp(const void*,const void*,unsigned int);
+
+static inline int memicmp(const void* s1, const void* s2, size_t len) { return _memicmp(s1, s2, len); }
+static inline void* memccpy(void *s1, const void *s2, int c, size_t n) { return _memccpy(s1, s2, c, n); }
+#endif /* _CRT_MEMORY_DEFINED */
+
+int __cdecl _strcmpi(const char*,const char*);
+int __cdecl _strcoll_l(const char*, const char*, _locale_t);
+char* __cdecl _strdup(const char*);
+char* __cdecl _strerror(const char*);
+errno_t __cdecl strerror_s(char*,size_t,int);
+int __cdecl _stricmp(const char*,const char*);
+int __cdecl _stricoll(const char*,const char*);
+int __cdecl _stricoll_l(const char*, const char*, _locale_t);
+char* __cdecl _strlwr(char*);
+errno_t __cdecl _strlwr_s(char*,size_t);
+int __cdecl _strncoll(const char*, const char*, size_t);
+int __cdecl _strncoll_l(const char*, const char*, size_t, _locale_t);
+int __cdecl _strnicmp(const char*,const char*,size_t);
+int __cdecl _strnicoll(const char*, const char*, size_t);
+int __cdecl _strnicoll_l(const char*, const char*, size_t, _locale_t);
+char* __cdecl _strnset(char*,int,size_t);
+char* __cdecl _strrev(char*);
+char* __cdecl _strset(char*,int);
+char* __cdecl _strupr(char*);
+
+void* __cdecl memmove(void*,const void*,size_t);
+errno_t __cdecl memmove_s(void*,size_t,const void*,size_t);
+char* __cdecl strcat(char*,const char*);
+errno_t __cdecl strcat_s(char*,size_t,const char*);
+char* __cdecl strchr(const char*,int);
+int __cdecl strcmp(const char*,const char*);
+int __cdecl strcoll(const char*,const char*);
+char* __cdecl strcpy(char*,const char*);
+errno_t __cdecl strcpy_s(char*,size_t,const char*);
+size_t __cdecl strcspn(const char*,const char*);
+char* __cdecl strerror(int);
+size_t __cdecl strlen(const char*);
+char* __cdecl strncat(char*,const char*,size_t);
+errno_t __cdecl strncat_s(char*,size_t,const char*,size_t);
+int __cdecl strncmp(const char*,const char*,size_t);
+char* __cdecl strncpy(char*,const char*,size_t);
+errno_t __cdecl strncpy_s(char*,size_t,const char*,size_t);
+size_t __cdecl strnlen(const char*,size_t);
+char* __cdecl strpbrk(const char*,const char*);
+char* __cdecl strrchr(const char*,int);
+size_t __cdecl strspn(const char*,const char*);
+char* __cdecl strstr(const char*,const char*);
+char* __cdecl strtok(char*,const char*);
+char* __cdecl strtok_s(char*,const char*,char**);
+size_t __cdecl strxfrm(char*,const char*,size_t);
+
+#ifndef _WSTRING_DEFINED
+#define _WSTRING_DEFINED
+wchar_t* __cdecl _wcsdup(const wchar_t*);
+int __cdecl _wcsicmp(const wchar_t*,const wchar_t*);
+int __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
+int __cdecl _wcsicoll_l(const wchar_t*, const wchar_t*, _locale_t);
+wchar_t* __cdecl _wcslwr(wchar_t*);
+int __cdecl _wcscoll_l(const wchar_t*, const wchar_t*, _locale_t);
+int __cdecl _wcsncoll(const wchar_t*, const wchar_t*, size_t);
+int __cdecl _wcsncoll_l(const wchar_t*, const wchar_t*, size_t, _locale_t);
+int __cdecl _wcsnicmp(const wchar_t*,const wchar_t*,size_t);
+int __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
+int __cdecl _wcsnicoll_l(const wchar_t*, const wchar_t*, size_t, _locale_t);
+wchar_t* __cdecl _wcsnset(wchar_t*,wchar_t,size_t);
+wchar_t* __cdecl _wcsrev(wchar_t*);
+wchar_t* __cdecl _wcsset(wchar_t*,wchar_t);
+wchar_t* __cdecl _wcsupr(wchar_t*);
+
+wchar_t* __cdecl wcscat(wchar_t*,const wchar_t*);
+errno_t __cdecl wcscat_s(wchar_t*,size_t,const wchar_t*);
+wchar_t* __cdecl wcschr(const wchar_t*,wchar_t);
+int __cdecl wcscmp(const wchar_t*,const wchar_t*);
+int __cdecl wcscoll(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcscpy(wchar_t*,const wchar_t*);
+errno_t __cdecl wcscpy_s(wchar_t*,size_t,const wchar_t*);
+size_t __cdecl wcscspn(const wchar_t*,const wchar_t*);
+size_t __cdecl wcslen(const wchar_t*);
+wchar_t* __cdecl wcsncat(wchar_t*,const wchar_t*,size_t);
+int __cdecl wcsncmp(const wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl wcsncpy(wchar_t*,const wchar_t*,size_t);
+errno_t __cdecl wcsncpy_s(wchar_t*,size_t,const wchar_t*,size_t);
+wchar_t* __cdecl wcspbrk(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsrchr(const wchar_t*,wchar_t wcFor);
+size_t __cdecl wcsspn(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsstr(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcstok(wchar_t*,const wchar_t*);
+size_t __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t);
+#endif /* _WSTRING_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+static inline int strcasecmp(const char* s1, const char* s2) { return _stricmp(s1, s2); }
+static inline int strcmpi(const char* s1, const char* s2) { return _strcmpi(s1, s2); }
+static inline char* strdup(const char* buf) { return _strdup(buf); }
+static inline int stricmp(const char* s1, const char* s2) { return _stricmp(s1, s2); }
+static inline int stricoll(const char* s1, const char* s2) { return _stricoll(s1, s2); }
+static inline char* strlwr(char* str) { return _strlwr(str); }
+static inline int strncasecmp(const char *str1, const char *str2, size_t n) { return _strnicmp(str1, str2, n); }
+static inline int strnicmp(const char* s1, const char* s2, size_t n) { return _strnicmp(s1, s2, n); }
+static inline char* strnset(char* str, int value, unsigned int len) { return _strnset(str, value, len); }
+static inline char* strrev(char* str) { return _strrev(str); }
+static inline char* strset(char* str, int value) { return _strset(str, value); }
+static inline char* strupr(char* str) { return _strupr(str); }
+
+static inline wchar_t* wcsdup(const wchar_t* str) { return _wcsdup(str); }
+static inline int wcsicoll(const wchar_t* str1, const wchar_t* str2) { return _wcsicoll(str1, str2); }
+static inline wchar_t* wcslwr(wchar_t* str) { return _wcslwr(str); }
+static inline int wcsnicmp(const wchar_t* str1, const wchar_t* str2, size_t n) { return _wcsnicmp(str1, str2, n); }
+static inline wchar_t* wcsnset(wchar_t* str, wchar_t c, size_t n) { return _wcsnset(str, c, n); }
+static inline wchar_t* wcsrev(wchar_t* str) { return _wcsrev(str); }
+static inline wchar_t* wcsset(wchar_t* str, wchar_t c) { return _wcsset(str, c); }
+static inline wchar_t* wcsupr(wchar_t* str) { return _wcsupr(str); }
+
+#endif /* __WINE_STRING_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h
new file mode 100644
index 00000000..223cb969
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/locking.h
@@ -0,0 +1,42 @@
+/*
+ * _locking constants
+ *
+ * Copyright 2002 Bill Medland
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_LOCKING_H__
+#define __WINE_SYS_LOCKING_H__
+#ifndef __WINE_USE_MSVCRT
+#define __WINE_USE_MSVCRT
+#endif
+
+#define _LK_UNLCK 0
+#define _LK_LOCK 1
+#define _LK_NBLCK 2
+#define _LK_RLCK 3
+#define _LK_NBRLCK 4
+
+#endif /* __WINE_SYS_LOCKING_H__ : Do not place anything after this #endif */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h
new file mode 100644
index 00000000..6509e04b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/stat.h
@@ -0,0 +1,201 @@
+/*
+ * _stat() definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_SYS_STAT_H
+#define __WINE_SYS_STAT_H
+
+#include <crtdefs.h>
+#include <sys/types.h>
+
+#include <pshpack8.h>
+
+#ifndef _DEV_T_DEFINED
+typedef unsigned int _dev_t;
+#define _DEV_T_DEFINED
+#endif
+
+#ifndef _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#define _INO_T_DEFINED
+#endif
+
+#ifndef _OFF_T_DEFINED
+typedef int _off_t;
+#define _OFF_T_DEFINED
+#endif
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+# define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+# define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+# define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+#define _S_IEXEC 0x0040
+#define _S_IWRITE 0x0080
+#define _S_IREAD 0x0100
+#define _S_IFIFO 0x1000
+#define _S_IFCHR 0x2000
+#define _S_IFDIR 0x4000
+#define _S_IFREG 0x8000
+#define _S_IFMT 0xF000
+
+/* for FreeBSD */
+#undef st_atime
+#undef st_ctime
+#undef st_mtime
+
+#ifndef _STAT_DEFINED
+#define _STAT_DEFINED
+
+struct _stat {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct stat {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct _stat32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time32_t st_atime;
+ __time32_t st_mtime;
+ __time32_t st_ctime;
+};
+
+struct _stat32i64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 DECLSPEC_ALIGN(8) st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct _stat64i32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+};
+
+struct _stati64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 DECLSPEC_ALIGN(8) st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct _stat64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 DECLSPEC_ALIGN(8) st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+};
+#endif /* _STAT_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _fstat(int,struct _stat*);
+int __cdecl _stat(const char*,struct _stat*);
+int __cdecl _fstat32(int, struct _stat32*);
+int __cdecl _stat32(const char*, struct _stat32*);
+int __cdecl _fstati64(int,struct _stati64*);
+int __cdecl _stati64(const char*,struct _stati64*);
+int __cdecl _fstat64(int,struct _stat64*);
+int __cdecl _stat64(const char*,struct _stat64*);
+int __cdecl _umask(int);
+
+#ifndef _WSTAT_DEFINED
+#define _WSTAT_DEFINED
+int __cdecl _wstat(const wchar_t*,struct _stat*);
+int __cdecl _wstat32(const wchar_t*, struct _stat32*);
+int __cdecl _wstati64(const wchar_t*,struct _stati64*);
+int __cdecl _wstat64(const wchar_t*,struct _stat64*);
+#endif /* _WSTAT_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define S_IFMT _S_IFMT
+#define S_IFDIR _S_IFDIR
+#define S_IFCHR _S_IFCHR
+#define S_IFREG _S_IFREG
+#define S_IREAD _S_IREAD
+#define S_IWRITE _S_IWRITE
+#define S_IEXEC _S_IEXEC
+
+static inline int fstat(int fd, struct stat* ptr) { return _fstat(fd, (struct _stat*)ptr); }
+static inline int stat(const char* path, struct stat* ptr) { return _stat(path, (struct _stat*)ptr); }
+#ifndef _UMASK_DEFINED
+static inline int umask(int fd) { return _umask(fd); }
+#define _UMASK_DEFINED
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_SYS_STAT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h
new file mode 100644
index 00000000..07c32b97
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/timeb.h
@@ -0,0 +1,86 @@
+/*
+ * Path and directory definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_TIMEB_H
+#define __WINE_SYS_TIMEB_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _TIMEB_DEFINED
+#define _TIMEB_DEFINED
+struct _timeb
+{
+ time_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+};
+struct __timeb32
+{
+ __time32_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+};
+struct __timeb64
+{
+ __time64_t time;
+ unsigned short millitm;
+ short timezone;
+ short dstflag;
+};
+#endif /* _TIMEB_DEFINED */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void __cdecl _ftime32(struct __timeb32*);
+void __cdecl _ftime64(struct __timeb64*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+static inline void __cdecl _ftime(struct _timeb *tb) { return _ftime32((struct __timeb32*)tb); }
+#else
+static inline void __cdecl _ftime(struct _timeb *tb) { return _ftime64((struct __timeb64*)tb); }
+#endif
+
+#define timeb _timeb
+
+static inline void ftime(struct _timeb* ptr) { return _ftime(ptr); }
+
+#include <poppack.h>
+
+#endif /* __WINE_SYS_TIMEB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h
new file mode 100644
index 00000000..db90547c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/types.h
@@ -0,0 +1,82 @@
+/*
+ * _stat() definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_TYPES_H
+#define __WINE_SYS_TYPES_H
+
+#include <crtdefs.h>
+
+#ifndef _DEV_T_DEFINED
+typedef unsigned int _dev_t;
+#define _DEV_T_DEFINED
+#endif
+
+#ifndef _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#define _INO_T_DEFINED
+#endif
+
+#ifndef _MODE_T_DEFINED
+typedef unsigned short _mode_t;
+#define _MODE_T_DEFINED
+#endif
+
+#ifndef _OFF_T_DEFINED
+typedef int _off_t;
+#define _OFF_T_DEFINED
+#endif
+
+#ifndef _BSDTYPES_DEFINED
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef __msvcrt_ulong u_long;
+#define _BSDTYPES_DEFINED
+#endif
+
+#define dev_t _dev_t
+#define ino_t _ino_t
+#define mode_t _mode_t
+#define off_t _off_t
+
+#ifndef _PID_T_DEFINED
+typedef int pid_t;
+#define _PID_T_DEFINED
+#endif
+
+#ifndef _SSIZE_T_DEFINED
+#ifdef _WIN64
+typedef __int64 ssize_t;
+#else
+typedef int ssize_t;
+#endif
+#define _SSIZE_T_DEFINED
+#endif
+
+#endif /* __WINE_SYS_TYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h
new file mode 100644
index 00000000..1e823fbd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/unistd.h
@@ -0,0 +1 @@
+#include <unistd.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h
new file mode 100644
index 00000000..4b250fca
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/sys/utime.h
@@ -0,0 +1,88 @@
+/*
+ * Path and directory definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SYS_UTIME_H
+#define __WINE_SYS_UTIME_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _UTIMBUF_DEFINED
+#define _UTIMBUF_DEFINED
+struct _utimbuf
+{
+ time_t actime;
+ time_t modtime;
+};
+struct __utimbuf32
+{
+ __time32_t actime;
+ __time32_t modtime;
+};
+struct __utimbuf64
+{
+ __time64_t actime;
+ __time64_t modtime;
+};
+#endif /* _UTIMBUF_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int __cdecl _futime32(int,struct __utimbuf32*);
+int __cdecl _futime64(int,struct __utimbuf64*);
+int __cdecl _utime32(const char*,struct __utimbuf32*);
+int __cdecl _utime64(const char*,struct __utimbuf64*);
+int __cdecl _wutime32(const wchar_t*,struct __utimbuf32*);
+int __cdecl _wutime64(const wchar_t*,struct __utimbuf64*);
+
+#ifdef _USE_32BIT_TIME_T
+static inline int _futime(int fd, struct _utimbuf *buf) { return _futime32(fd, (struct __utimbuf32*)buf); }
+static inline int _utime(const char *s, struct _utimbuf *buf) { return _utime32(s, (struct __utimbuf32*)buf); }
+static inline int _wutime(const wchar_t *s, struct _utimbuf *buf) { return _wutime32(s, (struct __utimbuf32*)buf); }
+#else
+static inline int _futime(int fd, struct _utimbuf *buf) { return _futime64(fd, (struct __utimbuf64*)buf); }
+static inline int _utime(const char *s, struct _utimbuf *buf) { return _utime64(s, (struct __utimbuf64*)buf); }
+static inline int _wutime(const wchar_t *s, struct _utimbuf *buf) { return _wutime64(s, (struct __utimbuf64*)buf); }
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define utimbuf _utimbuf
+
+static inline int utime(const char* path, struct _utimbuf* buf) { return _utime(path, buf); }
+
+#include <poppack.h>
+
+#endif /* __WINE_SYS_UTIME_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h
new file mode 100644
index 00000000..6d5e0ed7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/time.h
@@ -0,0 +1,162 @@
+/*
+ * Time definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TIME_H
+#define __WINE_TIME_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+#ifndef _CLOCK_T_DEFINED
+typedef __msvcrt_long clock_t;
+#define _CLOCK_T_DEFINED
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#ifndef CLOCKS_PER_SEC
+#define CLOCKS_PER_SEC 1000
+#endif
+
+#ifndef _TM_DEFINED
+#define _TM_DEFINED
+struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+};
+#endif /* _TM_DEFINED */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __i386__
+#define _daylight (*__p__daylight())
+#define _dstbias (*__p__dstbias())
+#define _timezone (*__p__timezone())
+#define _tzname (__p__tzname())
+
+int * __cdecl __p__daylight(void);
+__msvcrt_long * __cdecl __p__dstbias(void);
+__msvcrt_long * __cdecl __p__timezone(void);
+char ** __cdecl __p__tzname(void);
+#else
+extern int _daylight;
+extern __msvcrt_long _dstbias;
+extern __msvcrt_long _timezone;
+extern char *_tzname;
+#endif
+
+#ifdef _USE_32BIT_TIME_T
+#define _ctime32 ctime
+#define _difftime32 difftime
+#define _gmtime32 gmtime
+#define _localtime32 localtime
+#define _mktime32 mktime
+#define _time32 time
+#endif
+
+unsigned __cdecl _getsystime(struct tm*);
+unsigned __cdecl _setsystime(struct tm*,unsigned);
+char* __cdecl _strdate(char*);
+errno_t __cdecl _strdate_s(char*,size_t);
+char* __cdecl _strtime(char*);
+errno_t __cdecl _strtime_s(char*,size_t);
+void __cdecl _tzset(void);
+
+char* __cdecl asctime(const struct tm*);
+clock_t __cdecl clock(void);
+char* __cdecl _ctime32(const __time32_t*);
+char* __cdecl _ctime64(const __time64_t*);
+double __cdecl _difftime32(__time32_t,__time32_t);
+double __cdecl _difftime64(__time64_t,__time64_t);
+struct tm* __cdecl _gmtime32(const __time32_t*);
+struct tm* __cdecl _gmtime64(const __time64_t*);
+struct tm* __cdecl _localtime32(const __time32_t*);
+errno_t __cdecl _localtime32_s(struct tm*, const __time64_t*);
+struct tm* __cdecl _localtime64(const __time64_t*);
+errno_t __cdecl _localtime64_s(struct tm*, const __time64_t*);
+__time32_t __cdecl _mktime32(struct tm*);
+__time64_t __cdecl _mktime64(struct tm*);
+size_t __cdecl strftime(char*,size_t,const char*,const struct tm*);
+__time32_t __cdecl _time32(__time32_t*);
+__time64_t __cdecl _time64(__time64_t*);
+
+#ifndef _USE_32BIT_TIME_T
+static inline char* ctime(const time_t *t) { return _ctime64(t); }
+static inline double difftime(time_t t1, time_t t2) { return _difftime64(t1, t2); }
+static inline struct tm* gmtime(const time_t *t) { return _gmtime64(t); }
+static inline struct tm* localtime(const time_t *t) { return _localtime64(t); }
+static inline time_t mktime(struct tm *tm) { return _mktime64(tm); }
+static inline time_t time(time_t *t) { return _time64(t); }
+#endif
+
+#ifndef _WTIME_DEFINED
+#define _WTIME_DEFINED
+
+#ifdef _USE_32BIT_TIME_T
+#define _wctime32 _wctime
+#endif
+
+wchar_t* __cdecl _wasctime(const struct tm*);
+size_t __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*);
+wchar_t* __cdecl _wctime32(const __time32_t*);
+wchar_t* __cdecl _wctime64(const __time64_t*);
+wchar_t* __cdecl _wstrdate(wchar_t*);
+errno_t __cdecl _wstrdate_s(wchar_t*,size_t);
+wchar_t* __cdecl _wstrtime(wchar_t*);
+errno_t __cdecl _wstrtime_s(wchar_t*,size_t);
+
+#ifndef _USE_32BIT_TIME_T
+static inline wchar_t* _wctime(const time_t *t) { return _wctime64(t); }
+#endif
+
+#endif /* _WTIME_DEFINED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_TIME_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h
new file mode 100644
index 00000000..eca5c5eb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/unistd.h
@@ -0,0 +1,2 @@
+#include <io.h>
+#include <process.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h
new file mode 100644
index 00000000..d936dc3d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wchar.h
@@ -0,0 +1,478 @@
+/*
+ * Unicode definitions
+ *
+ * Derived from the mingw header written by Colin Peters.
+ * Modified for Wine use by Jon Griffiths and Francois Gouget.
+ * This file is in the public domain.
+ */
+#ifndef __WINE_WCHAR_H
+#define __WINE_WCHAR_H
+
+#include <crtdefs.h>
+#include <stdarg.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void *)0)
+#endif
+#endif
+
+#define WCHAR_MIN 0
+#define WCHAR_MAX ((wchar_t)-1)
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+# define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+# define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+# define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+typedef int mbstate_t;
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+#ifndef _FSIZE_T_DEFINED
+typedef __msvcrt_ulong _fsize_t;
+#define _FSIZE_T_DEFINED
+#endif
+
+#ifndef _DEV_T_DEFINED
+typedef unsigned int _dev_t;
+#define _DEV_T_DEFINED
+#endif
+
+#ifndef _INO_T_DEFINED
+typedef unsigned short _ino_t;
+#define _INO_T_DEFINED
+#endif
+
+#ifndef _OFF_T_DEFINED
+typedef int _off_t;
+#define _OFF_T_DEFINED
+#endif
+
+#ifndef _TM_DEFINED
+#define _TM_DEFINED
+struct tm {
+ int tm_sec;
+ int tm_min;
+ int tm_hour;
+ int tm_mday;
+ int tm_mon;
+ int tm_year;
+ int tm_wday;
+ int tm_yday;
+ int tm_isdst;
+};
+#endif /* _TM_DEFINED */
+
+#ifndef _FILE_DEFINED
+#define _FILE_DEFINED
+typedef struct _iobuf
+{
+ char* _ptr;
+ int _cnt;
+ char* _base;
+ int _flag;
+ int _file;
+ int _charbuf;
+ int _bufsiz;
+ char* _tmpfname;
+} FILE;
+#endif /* _FILE_DEFINED */
+
+#ifndef _WFINDDATA_T_DEFINED
+#define _WFINDDATA_T_DEFINED
+
+struct _wfinddata_t {
+ unsigned attrib;
+ time_t time_create;
+ time_t time_access;
+ time_t time_write;
+ _fsize_t size;
+ wchar_t name[260];
+};
+
+struct _wfinddatai64_t {
+ unsigned attrib;
+ time_t time_create;
+ time_t time_access;
+ time_t time_write;
+ __int64 DECLSPEC_ALIGN(8) size;
+ wchar_t name[260];
+};
+
+#endif /* _WFINDDATA_T_DEFINED */
+
+#ifndef _STAT_DEFINED
+#define _STAT_DEFINED
+
+struct _stat {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct stat {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct _stat32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time32_t st_atime;
+ __time32_t st_mtime;
+ __time32_t st_ctime;
+};
+
+struct _stat32i64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 DECLSPEC_ALIGN(8) st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct _stat64i32 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ _off_t st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+};
+
+struct _stati64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 DECLSPEC_ALIGN(8) st_size;
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+};
+
+struct _stat64 {
+ _dev_t st_dev;
+ _ino_t st_ino;
+ unsigned short st_mode;
+ short st_nlink;
+ short st_uid;
+ short st_gid;
+ _dev_t st_rdev;
+ __int64 DECLSPEC_ALIGN(8) st_size;
+ __time64_t st_atime;
+ __time64_t st_mtime;
+ __time64_t st_ctime;
+};
+#endif /* _STAT_DEFINED */
+
+/* ASCII char classification table - binary compatible */
+#define _UPPER 0x0001 /* C1_UPPER */
+#define _LOWER 0x0002 /* C1_LOWER */
+#define _DIGIT 0x0004 /* C1_DIGIT */
+#define _SPACE 0x0008 /* C1_SPACE */
+#define _PUNCT 0x0010 /* C1_PUNCT */
+#define _CONTROL 0x0020 /* C1_CNTRL */
+#define _BLANK 0x0040 /* C1_BLANK */
+#define _HEX 0x0080 /* C1_XDIGIT */
+#define _LEADBYTE 0x8000
+#define _ALPHA (0x0100|_UPPER|_LOWER) /* (C1_ALPHA|_UPPER|_LOWER) */
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+int __cdecl is_wctype(wint_t,wctype_t);
+int __cdecl isleadbyte(int);
+int __cdecl iswalnum(wint_t);
+int __cdecl iswalpha(wint_t);
+int __cdecl iswascii(wint_t);
+int __cdecl iswcntrl(wint_t);
+int __cdecl iswctype(wint_t,wctype_t);
+int __cdecl iswdigit(wint_t);
+int __cdecl iswgraph(wint_t);
+int __cdecl iswlower(wint_t);
+int __cdecl iswprint(wint_t);
+int __cdecl iswpunct(wint_t);
+int __cdecl iswspace(wint_t);
+int __cdecl iswupper(wint_t);
+int __cdecl iswxdigit(wint_t);
+wchar_t __cdecl towlower(wchar_t);
+wchar_t __cdecl towupper(wchar_t);
+#endif /* _WCTYPE_DEFINED */
+
+#ifndef _WDIRECT_DEFINED
+#define _WDIRECT_DEFINED
+int __cdecl _wchdir(const wchar_t*);
+wchar_t* __cdecl _wgetcwd(wchar_t*,int);
+wchar_t* __cdecl _wgetdcwd(int,wchar_t*,int);
+int __cdecl _wmkdir(const wchar_t*);
+int __cdecl _wrmdir(const wchar_t*);
+#endif /* _WDIRECT_DEFINED */
+
+#ifndef _WIO_DEFINED
+#define _WIO_DEFINED
+int __cdecl _waccess(const wchar_t*,int);
+int __cdecl _wchmod(const wchar_t*,int);
+int __cdecl _wcreat(const wchar_t*,int);
+intptr_t __cdecl _wfindfirst(const wchar_t*,struct _wfinddata_t*);
+intptr_t __cdecl _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*);
+int __cdecl _wfindnext(intptr_t,struct _wfinddata_t*);
+int __cdecl _wfindnexti64(intptr_t, struct _wfinddatai64_t*);
+wchar_t* __cdecl _wmktemp(wchar_t*);
+int __cdecl _wopen(const wchar_t*,int,...);
+int __cdecl _wrename(const wchar_t*,const wchar_t*);
+int __cdecl _wsopen(const wchar_t*,int,int,...);
+int __cdecl _wunlink(const wchar_t*);
+#endif /* _WIO_DEFINED */
+
+#ifndef _WLOCALE_DEFINED
+#define _WLOCALE_DEFINED
+wchar_t* __cdecl _wsetlocale(int,const wchar_t*);
+#endif /* _WLOCALE_DEFINED */
+
+#ifndef _WPROCESS_DEFINED
+#define _WPROCESS_DEFINED
+int __cdecl _wexecl(const wchar_t*,const wchar_t*,...);
+int __cdecl _wexecle(const wchar_t*,const wchar_t*,...);
+int __cdecl _wexeclp(const wchar_t*,const wchar_t*,...);
+int __cdecl _wexeclpe(const wchar_t*,const wchar_t*,...);
+int __cdecl _wexecv(const wchar_t*,const wchar_t* const *);
+int __cdecl _wexecve(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int __cdecl _wexecvp(const wchar_t*,const wchar_t* const *);
+int __cdecl _wexecvpe(const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int __cdecl _wspawnl(int,const wchar_t*,const wchar_t*,...);
+int __cdecl _wspawnle(int,const wchar_t*,const wchar_t*,...);
+int __cdecl _wspawnlp(int,const wchar_t*,const wchar_t*,...);
+int __cdecl _wspawnlpe(int,const wchar_t*,const wchar_t*,...);
+int __cdecl _wspawnv(int,const wchar_t*,const wchar_t* const *);
+int __cdecl _wspawnve(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int __cdecl _wspawnvp(int,const wchar_t*,const wchar_t* const *);
+int __cdecl _wspawnvpe(int,const wchar_t*,const wchar_t* const *,const wchar_t* const *);
+int __cdecl _wsystem(const wchar_t*);
+#endif /* _WPROCESS_DEFINED */
+
+#ifndef _WSTAT_DEFINED
+#define _WSTAT_DEFINED
+int __cdecl _wstat(const wchar_t*,struct _stat*);
+int __cdecl _wstat32(const wchar_t*, struct _stat32*);
+int __cdecl _wstati64(const wchar_t*,struct _stati64*);
+int __cdecl _wstat64(const wchar_t*,struct _stat64*);
+#endif /* _WSTAT_DEFINED */
+
+#ifndef _WSTDIO_DEFINED
+#define _WSTDIO_DEFINED
+wint_t __cdecl _fgetwchar(void);
+wint_t __cdecl _fputwchar(wint_t);
+wchar_t* __cdecl _getws(wchar_t*);
+int __cdecl _putws(const wchar_t*);
+int __cdecl _snwprintf(wchar_t*,size_t,const wchar_t*,...);
+int __cdecl _snwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,...);
+int __cdecl _vscwprintf(const wchar_t*,__ms_va_list);
+int __cdecl _vscwprintf_p_l(const wchar_t*,_locale_t,__ms_va_list);
+int __cdecl _vsnwprintf(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int __cdecl _vsnwprintf_s(wchar_t*,size_t,size_t,const wchar_t*,__ms_va_list);
+int __cdecl _vswprintf_p_l(wchar_t*,size_t,const wchar_t*,_locale_t,__ms_va_list);
+FILE* __cdecl _wfdopen(int,const wchar_t*);
+FILE* __cdecl _wfopen(const wchar_t*,const wchar_t*);
+errno_t __cdecl _wfopen_s(FILE**,const wchar_t*,const wchar_t*);
+FILE* __cdecl _wfreopen(const wchar_t*,const wchar_t*,FILE*);
+FILE* __cdecl _wfsopen(const wchar_t*,const wchar_t*,int);
+void __cdecl _wperror(const wchar_t*);
+FILE* __cdecl _wpopen(const wchar_t*,const wchar_t*);
+int __cdecl _wremove(const wchar_t*);
+wchar_t* __cdecl _wtempnam(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl _wtmpnam(wchar_t*);
+
+wint_t __cdecl fgetwc(FILE*);
+wchar_t* __cdecl fgetws(wchar_t*,int,FILE*);
+wint_t __cdecl fputwc(wint_t,FILE*);
+int __cdecl fputws(const wchar_t*,FILE*);
+int __cdecl fwprintf(FILE*,const wchar_t*,...);
+int __cdecl fwprintf_s(FILE*,const wchar_t*,...);
+int __cdecl fputws(const wchar_t*,FILE*);
+int __cdecl fwscanf(FILE*,const wchar_t*,...);
+int __cdecl fwscanf_s(FILE*,const wchar_t*,...);
+wint_t __cdecl getwc(FILE*);
+wint_t __cdecl getwchar(void);
+wchar_t* __cdecl getws(wchar_t*);
+wint_t __cdecl putwc(wint_t,FILE*);
+wint_t __cdecl putwchar(wint_t);
+int __cdecl putws(const wchar_t*);
+int __cdecl swprintf(wchar_t*,const wchar_t*,...);
+int __cdecl swprintf_s(wchar_t*,size_t,const wchar_t*,...);
+int __cdecl swscanf(const wchar_t*,const wchar_t*,...);
+int __cdecl swscanf_s(const wchar_t*,const wchar_t*,...);
+wint_t __cdecl ungetwc(wint_t,FILE*);
+int __cdecl vfwprintf(FILE*,const wchar_t*,__ms_va_list);
+int __cdecl vfwprintf_s(FILE*,const wchar_t*,__ms_va_list);
+int __cdecl vswprintf(wchar_t*,const wchar_t*,__ms_va_list);
+int __cdecl vswprintf_s(wchar_t*,size_t,const wchar_t*,__ms_va_list);
+int __cdecl vwprintf(const wchar_t*,__ms_va_list);
+int __cdecl vwprintf_s(const wchar_t*,__ms_va_list);
+int __cdecl wprintf(const wchar_t*,...);
+int __cdecl wprintf_s(const wchar_t*,...);
+int __cdecl wscanf(const wchar_t*,...);
+int __cdecl wscanf_s(const wchar_t*,...);
+#endif /* _WSTDIO_DEFINED */
+
+#ifndef _WSTDLIB_DEFINED
+#define _WSTDLIB_DEFINED
+wchar_t* __cdecl _itow(int,wchar_t*,int);
+wchar_t* __cdecl _i64tow(__int64,wchar_t*,int);
+wchar_t* __cdecl _ltow(__msvcrt_long,wchar_t*,int);
+wchar_t* __cdecl _ui64tow(unsigned __int64,wchar_t*,int);
+wchar_t* __cdecl _ultow(__msvcrt_ulong,wchar_t*,int);
+wchar_t* __cdecl _wfullpath(wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl _wgetenv(const wchar_t*);
+void __cdecl _wmakepath(wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*,const wchar_t*);
+void __cdecl _wperror(const wchar_t*);
+int __cdecl _wputenv(const wchar_t*);
+void __cdecl _wsearchenv(const wchar_t*,const wchar_t*,wchar_t*);
+void __cdecl _wsplitpath(const wchar_t*,wchar_t*,wchar_t*,wchar_t*,wchar_t*);
+errno_t __cdecl _wsplitpath_s(const wchar_t*,wchar_t*,size_t,wchar_t*,size_t,
+ wchar_t*,size_t,wchar_t*,size_t);
+int __cdecl _wsystem(const wchar_t*);
+double __cdecl _wtof(const wchar_t*);
+int __cdecl _wtoi(const wchar_t*);
+__int64 __cdecl _wtoi64(const wchar_t*);
+__msvcrt_long __cdecl _wtol(const wchar_t*);
+
+size_t __cdecl mbstowcs(wchar_t*,const char*,size_t);
+errno_t __cdecl mbstowcs_s(size_t*,wchar_t*,size_t,const char*,size_t);
+int __cdecl mbtowc(wchar_t*,const char*,size_t);
+double __cdecl wcstod(const wchar_t*,wchar_t**);
+__msvcrt_long __cdecl wcstol(const wchar_t*,wchar_t**,int);
+size_t __cdecl wcstombs(char*,const wchar_t*,size_t);
+errno_t __cdecl wcstombs_s(size_t*,char*,size_t,const wchar_t*,size_t);
+__msvcrt_ulong __cdecl wcstoul(const wchar_t*,wchar_t**,int);
+int __cdecl wctomb(char*,wchar_t);
+#endif /* _WSTDLIB_DEFINED */
+
+#ifndef _WSTRING_DEFINED
+#define _WSTRING_DEFINED
+int __cdecl _wcscoll_l(const wchar_t*,const wchar_t*,_locale_t);
+wchar_t* __cdecl _wcsdup(const wchar_t*);
+int __cdecl _wcsicmp(const wchar_t*,const wchar_t*);
+int __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
+int __cdecl _wcsicoll_l(const wchar_t*,const wchar_t*,_locale_t);
+wchar_t* __cdecl _wcslwr(wchar_t*);
+int __cdecl _wcsncoll(const wchar_t*,const wchar_t*,size_t);
+int __cdecl _wcsncoll_l(const wchar_t*,const wchar_t*,size_t,_locale_t);
+int __cdecl _wcsnicmp(const wchar_t*,const wchar_t*,size_t);
+int __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
+int __cdecl _wcsnicoll_l(const wchar_t*,const wchar_t*,size_t,_locale_t);
+wchar_t* __cdecl _wcsnset(wchar_t*,wchar_t,size_t);
+wchar_t* __cdecl _wcsrev(wchar_t*);
+wchar_t* __cdecl _wcsset(wchar_t*,wchar_t);
+wchar_t* __cdecl _wcsupr(wchar_t*);
+
+wchar_t* __cdecl wcscat(wchar_t*,const wchar_t*);
+errno_t __cdecl wcscat_s(wchar_t*,size_t,const wchar_t*);
+wchar_t* __cdecl wcschr(const wchar_t*,wchar_t);
+int __cdecl wcscmp(const wchar_t*,const wchar_t*);
+int __cdecl wcscoll(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcscpy(wchar_t*,const wchar_t*);
+errno_t __cdecl wcscpy_s(wchar_t*,size_t,const wchar_t*);
+size_t __cdecl wcscspn(const wchar_t*,const wchar_t*);
+size_t __cdecl wcslen(const wchar_t*);
+wchar_t* __cdecl wcsncat(wchar_t*,const wchar_t*,size_t);
+int __cdecl wcsncmp(const wchar_t*,const wchar_t*,size_t);
+wchar_t* __cdecl wcsncpy(wchar_t*,const wchar_t*,size_t);
+errno_t __cdecl wcsncpy_s(wchar_t*,size_t,const wchar_t*,size_t);
+wchar_t* __cdecl wcspbrk(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsrchr(const wchar_t*,wchar_t wcFor);
+size_t __cdecl wcsspn(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcsstr(const wchar_t*,const wchar_t*);
+wchar_t* __cdecl wcstok(wchar_t*,const wchar_t*);
+size_t __cdecl wcsxfrm(wchar_t*,const wchar_t*,size_t);
+#endif /* _WSTRING_DEFINED */
+
+#ifndef _WTIME_DEFINED
+#define _WTIME_DEFINED
+
+#ifdef _USE_32BIT_TIME_T
+#define _wctime32 _wctime
+#endif
+
+wchar_t* __cdecl _wasctime(const struct tm*);
+size_t __cdecl wcsftime(wchar_t*,size_t,const wchar_t*,const struct tm*);
+wchar_t* __cdecl _wctime32(const __time32_t*);
+wchar_t* __cdecl _wctime64(const __time64_t*);
+wchar_t* __cdecl _wstrdate(wchar_t*);
+errno_t __cdecl _wstrdate_s(wchar_t*,size_t);
+wchar_t* __cdecl _wstrtime(wchar_t*);
+errno_t __cdecl _wstrtime_s(wchar_t*,size_t);
+
+#ifndef _USE_32BIT_TIME_T
+static inline wchar_t* _wctime(const time_t *t) { return _wctime64(t); }
+#endif
+
+#endif /* _WTIME_DEFINED */
+
+wchar_t __cdecl btowc(int);
+size_t __cdecl mbrlen(const char *,size_t,mbstate_t*);
+size_t __cdecl mbrtowc(wchar_t*,const char*,size_t,mbstate_t*);
+size_t __cdecl mbsrtowcs(wchar_t*,const char**,size_t,mbstate_t*);
+size_t __cdecl wcrtomb(char*,wchar_t,mbstate_t*);
+size_t __cdecl wcsrtombs(char*,const wchar_t**,size_t,mbstate_t*);
+int __cdecl wctob(wint_t);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_WCHAR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h
new file mode 100644
index 00000000..907e6312
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msvcrt/wctype.h
@@ -0,0 +1,92 @@
+/*
+ * Unicode definitions
+ *
+ * Copyright 2000 Francois Gouget.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WCTYPE_H
+#define __WINE_WCTYPE_H
+
+#include <crtdefs.h>
+
+#include <pshpack8.h>
+
+/* ASCII char classification table - binary compatible */
+#define _UPPER 0x0001 /* C1_UPPER */
+#define _LOWER 0x0002 /* C1_LOWER */
+#define _DIGIT 0x0004 /* C1_DIGIT */
+#define _SPACE 0x0008 /* C1_SPACE */
+#define _PUNCT 0x0010 /* C1_PUNCT */
+#define _CONTROL 0x0020 /* C1_CNTRL */
+#define _BLANK 0x0040 /* C1_BLANK */
+#define _HEX 0x0080 /* C1_XDIGIT */
+#define _LEADBYTE 0x8000
+#define _ALPHA (0x0100|_UPPER|_LOWER) /* (C1_ALPHA|_UPPER|_LOWER) */
+
+#ifndef WEOF
+#define WEOF (wint_t)(0xFFFF)
+#endif
+
+/* FIXME: there's something to do with __p__pctype and __p__pwctype */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _WCTYPE_DEFINED
+#define _WCTYPE_DEFINED
+int __cdecl is_wctype(wint_t,wctype_t);
+int __cdecl isleadbyte(int);
+int __cdecl iswalnum(wint_t);
+int __cdecl iswalpha(wint_t);
+int __cdecl iswascii(wint_t);
+int __cdecl iswcntrl(wint_t);
+int __cdecl iswctype(wint_t,wctype_t);
+int __cdecl iswdigit(wint_t);
+int __cdecl iswgraph(wint_t);
+int __cdecl iswlower(wint_t);
+int __cdecl iswprint(wint_t);
+int __cdecl iswpunct(wint_t);
+int __cdecl iswspace(wint_t);
+int __cdecl iswupper(wint_t);
+int __cdecl iswxdigit(wint_t);
+wchar_t __cdecl towlower(wchar_t);
+wchar_t __cdecl towupper(wchar_t);
+#endif /* _WCTYPE_DEFINED */
+
+typedef wchar_t wctrans_t;
+wint_t __cdecl towctrans(wint_t,wctrans_t);
+wctrans_t __cdecl wctrans(const char *);
+wctype_t __cdecl wctype(const char *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_WCTYPE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h
new file mode 100644
index 00000000..fba60a41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/mswsock.h
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _MSWSOCK_
+#define _MSWSOCK_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef USE_WS_PREFIX
+#define WS(x) WS_##x
+#else
+#define WS(x) x
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_CONNDATA 0x7000
+#define SO_CONNOPT 0x7001
+#define SO_DISCDATA 0x7002
+#define SO_DISCOPT 0x7003
+#define SO_CONNDATALEN 0x7004
+#define SO_CONNOPTLEN 0x7005
+#define SO_DISCDATALEN 0x7006
+#define SO_DISCOPTLEN 0x7007
+#else
+#define WS_SO_CONNDATA 0x7000
+#define WS_SO_CONNOPT 0x7001
+#define WS_SO_DISCDATA 0x7002
+#define WS_SO_DISCOPT 0x7003
+#define WS_SO_CONNDATALEN 0x7004
+#define WS_SO_CONNOPTLEN 0x7005
+#define WS_SO_DISCDATALEN 0x7006
+#define WS_SO_DISCOPTLEN 0x7007
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_OPENTYPE 0x7008
+#else
+#define WS_SO_OPENTYPE 0x7008
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_SYNCHRONOUS_ALERT 0x10
+#define SO_SYNCHRONOUS_NONALERT 0x20
+#else
+#define WS_SO_SYNCHRONOUS_ALERT 0x10
+#define WS_SO_SYNCHRONOUS_NONALERT 0x20
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SO_MAXDG 0x7009
+#define SO_MAXPATHDG 0x700A
+#define SO_UPDATE_ACCEPT_CONTEXT 0x700B
+#define SO_CONNECT_TIME 0x700C
+#define SO_UPDATE_CONNECT_CONTEXT 0x7010
+#else
+#define WS_SO_MAXDG 0x7009
+#define WS_SO_MAXPATHDG 0x700A
+#define WS_SO_UPDATE_ACCEPT_CONTEXT 0x700B
+#define WS_SO_CONNECT_TIME 0x700C
+#define WS_SO_UPDATE_CONNECT_CONTEXT 0x7010
+#endif
+
+#ifndef USE_WS_PREFIX
+#define TCP_BSDURGENT 0x7000
+#else
+#define WS_TCP_BSDURGENT 0x7000
+#endif
+
+#ifndef USE_WS_PREFIX
+#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
+#define SIO_SET_COMPATIBILITY_MODE _WSAIOW(IOC_VENDOR,300)
+#else
+#define WS_SIO_UDP_CONNRESET _WSAIOW(WS_IOC_VENDOR,12)
+#define WS_SIO_SET_COMPATIBILITY_MODE _WSAIOW(WS_IOC_VENDOR,300)
+#endif
+
+#define DE_REUSE_SOCKET TF_REUSE_SOCKET
+
+#ifndef USE_WS_PREFIX
+#define MSG_TRUNC 0x0100
+#define MSG_CTRUNC 0x0200
+#define MSG_BCAST 0x0400
+#define MSG_MCAST 0x0800
+#else
+#define WS_MSG_TRUNC 0x0100
+#define WS_MSG_CTRUNC 0x0200
+#define WS_MSG_BCAST 0x0400
+#define WS_MSG_MCAST 0x0800
+#endif
+
+#define TF_DISCONNECT 0x01
+#define TF_REUSE_SOCKET 0x02
+#define TF_WRITE_BEHIND 0x04
+#define TF_USE_DEFAULT_WORKER 0x00
+#define TF_USE_SYSTEM_THREAD 0x10
+#define TF_USE_KERNEL_APC 0x20
+
+#define TP_DISCONNECT TF_DISCONNECT
+#define TP_REUSE_SOCKET TF_REUSE_SOCKET
+#define TP_USE_DEFAULT_WORKER TF_USE_DEFAULT_WORKER
+#define TP_USE_SYSTEM_THREAD TF_USE_SYSTEM_THREAD
+#define TP_USE_KERNEL_APC TF_USE_KERNEL_APC
+
+#define TP_ELEMENT_MEMORY 1
+#define TP_ELEMENT_FILE 2
+#define TP_ELEMENT_EOP 4
+
+#define WSAID_ACCEPTEX \
+ {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_CONNECTEX \
+ {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
+#define WSAID_DISCONNECTEX \
+ {0x7fda2e11,0x8630,0x436f,{0xa0,0x31,0xf5,0x36,0xa6,0xee,0xc1,0x57}}
+#define WSAID_GETACCEPTEXSOCKADDRS \
+ {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITFILE \
+ {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITPACKETS \
+ {0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}
+#define WSAID_WSARECVMSG \
+ {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}
+#define WSAID_WSASENDMSG \
+ {0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}}
+
+typedef struct _TRANSMIT_FILE_BUFFERS {
+ LPVOID Head;
+ DWORD HeadLength;
+ LPVOID Tail;
+ DWORD TailLength;
+} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
+
+typedef struct _TRANSMIT_PACKETS_ELEMENT {
+ ULONG dwElFlags;
+ ULONG cLength;
+ union {
+ struct {
+ LARGE_INTEGER nFileOffset;
+ HANDLE hFile;
+ } DUMMYSTRUCTNAME;
+ PVOID pBuffer;
+ } DUMMYUNIONNAME;
+} TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT, *LPTRANSMIT_PACKETS_ELEMENT;
+
+typedef struct _WSACMSGHDR {
+ SIZE_T cmsg_len;
+ INT cmsg_level;
+ INT cmsg_type;
+ /* followed by UCHAR cmsg_data[] */
+} WSACMSGHDR, *PWSACMSGHDR, *LPWSACMSGHDR;
+
+typedef BOOL (WINAPI * LPFN_ACCEPTEX)(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
+typedef BOOL (WINAPI * LPFN_CONNECTEX)(SOCKET, const struct WS(sockaddr) *, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED);
+typedef BOOL (WINAPI * LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD);
+typedef VOID (WINAPI * LPFN_GETACCEPTEXSOCKADDRS)(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT);
+typedef BOOL (WINAPI * LPFN_TRANSMITFILE)(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
+typedef BOOL (WINAPI * LPFN_TRANSMITPACKETS)(SOCKET, LPTRANSMIT_PACKETS_ELEMENT, DWORD, DWORD, LPOVERLAPPED, DWORD);
+typedef INT (WINAPI * LPFN_WSARECVMSG)(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef INT (WINAPI * LPFN_WSASENDMSG)(SOCKET, LPWSAMSG, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+
+BOOL WINAPI AcceptEx(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED);
+VOID WINAPI GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, struct WS(sockaddr) **, LPINT, struct WS(sockaddr) **, LPINT);
+BOOL WINAPI TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD);
+INT WINAPI WSARecvEx(SOCKET, char *, INT, INT *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef WS
+
+#endif /* _MSWSOCK_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h
new file mode 100644
index 00000000..c5829c45
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.h
@@ -0,0 +1,1773 @@
+/*** Autogenerated by WIDL 1.1.36 from msxml.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_MSXML_H
+#define __WIDL_MSXML_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+#include <wtypes.h>
+#include <objidl.h>
+#include <oaidl.h>
+
+/* Forward declarations */
+
+#ifndef __IXMLElementCollection_FWD_DEFINED__
+#define __IXMLElementCollection_FWD_DEFINED__
+typedef interface IXMLElementCollection IXMLElementCollection;
+#endif
+
+#ifndef __IXMLElement_FWD_DEFINED__
+#define __IXMLElement_FWD_DEFINED__
+typedef interface IXMLElement IXMLElement;
+#endif
+
+#ifndef __IXMLDocument_FWD_DEFINED__
+#define __IXMLDocument_FWD_DEFINED__
+typedef interface IXMLDocument IXMLDocument;
+#endif
+
+#ifndef __IXMLElement2_FWD_DEFINED__
+#define __IXMLElement2_FWD_DEFINED__
+typedef interface IXMLElement2 IXMLElement2;
+#endif
+
+#ifndef __IXMLDocument2_FWD_DEFINED__
+#define __IXMLDocument2_FWD_DEFINED__
+typedef interface IXMLDocument2 IXMLDocument2;
+#endif
+
+#ifndef __IXMLAttribute_FWD_DEFINED__
+#define __IXMLAttribute_FWD_DEFINED__
+typedef interface IXMLAttribute IXMLAttribute;
+#endif
+
+#ifndef __IXMLError_FWD_DEFINED__
+#define __IXMLError_FWD_DEFINED__
+typedef interface IXMLError IXMLError;
+#endif
+
+#ifndef __IXMLElementNotificationSink_FWD_DEFINED__
+#define __IXMLElementNotificationSink_FWD_DEFINED__
+typedef interface IXMLElementNotificationSink IXMLElementNotificationSink;
+#endif
+
+#ifndef __XMLDocument_FWD_DEFINED__
+#define __XMLDocument_FWD_DEFINED__
+typedef struct XMLDocument XMLDocument;
+#endif /* defined __XMLDocument_FWD_DEFINED__ */
+
+
+/*****************************************************************************
+ * IXMLElementCollection interface
+ */
+#ifndef __IXMLElementCollection_INTERFACE_DEFINED__
+#define __IXMLElementCollection_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElementCollection, 0x65725580, 0x9b5d, 0x11d0, 0x9b,0xfe, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElementCollection : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE put_length(
+ LONG v) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_length(
+ LONG *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get__newEnum(
+ IUnknown **ppUnk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE item(
+ VARIANT var1,
+ VARIANT var2,
+ IDispatch **ppDisp) = 0;
+
+};
+#else
+typedef struct IXMLElementCollectionVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLElementCollection* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLElementCollection* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLElementCollection* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLElementCollection* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLElementCollection* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLElementCollection* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLElementCollection* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLElementCollection methods ***/
+ HRESULT (STDMETHODCALLTYPE *put_length)(
+ IXMLElementCollection* This,
+ LONG v);
+
+ HRESULT (STDMETHODCALLTYPE *get_length)(
+ IXMLElementCollection* This,
+ LONG *p);
+
+ HRESULT (STDMETHODCALLTYPE *get__newEnum)(
+ IXMLElementCollection* This,
+ IUnknown **ppUnk);
+
+ HRESULT (STDMETHODCALLTYPE *item)(
+ IXMLElementCollection* This,
+ VARIANT var1,
+ VARIANT var2,
+ IDispatch **ppDisp);
+
+ END_INTERFACE
+} IXMLElementCollectionVtbl;
+interface IXMLElementCollection {
+ CONST_VTBL IXMLElementCollectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElementCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElementCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElementCollection_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElementCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElementCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElementCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElementCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElementCollection methods ***/
+#define IXMLElementCollection_put_length(This,v) (This)->lpVtbl->put_length(This,v)
+#define IXMLElementCollection_get_length(This,p) (This)->lpVtbl->get_length(This,p)
+#define IXMLElementCollection_get__newEnum(This,ppUnk) (This)->lpVtbl->get__newEnum(This,ppUnk)
+#define IXMLElementCollection_item(This,var1,var2,ppDisp) (This)->lpVtbl->item(This,var1,var2,ppDisp)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_put_length_Proxy(
+ IXMLElementCollection* This,
+ LONG v);
+void __RPC_STUB IXMLElementCollection_put_length_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_get_length_Proxy(
+ IXMLElementCollection* This,
+ LONG *p);
+void __RPC_STUB IXMLElementCollection_get_length_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_get__newEnum_Proxy(
+ IXMLElementCollection* This,
+ IUnknown **ppUnk);
+void __RPC_STUB IXMLElementCollection_get__newEnum_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElementCollection_item_Proxy(
+ IXMLElementCollection* This,
+ VARIANT var1,
+ VARIANT var2,
+ IDispatch **ppDisp);
+void __RPC_STUB IXMLElementCollection_item_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLElementCollection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLElement interface
+ */
+#ifndef __IXMLElement_INTERFACE_DEFINED__
+#define __IXMLElement_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElement, 0x3f7f31ac, 0xe15f, 0x11d0, 0x9c,0x25, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElement : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE get_tagName(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_tagName(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_parent(
+ IXMLElement **parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setAttribute(
+ BSTR strPropertyName,
+ VARIANT PropertyValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE getAttribute(
+ BSTR strPropertyName,
+ VARIANT *PropertyValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE removeAttribute(
+ BSTR strPropertyName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_children(
+ IXMLElementCollection **p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_type(
+ LONG *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_text(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_text(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE addChild(
+ IXMLElement *pChildElem,
+ LONG lIndex,
+ LONG lreserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE removeChild(
+ IXMLElement *pChildElem) = 0;
+
+};
+#else
+typedef struct IXMLElementVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLElement* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLElement* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLElement* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLElement* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLElement* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLElement* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLElement* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLElement methods ***/
+ HRESULT (STDMETHODCALLTYPE *get_tagName)(
+ IXMLElement* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_tagName)(
+ IXMLElement* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *get_parent)(
+ IXMLElement* This,
+ IXMLElement **parent);
+
+ HRESULT (STDMETHODCALLTYPE *setAttribute)(
+ IXMLElement* This,
+ BSTR strPropertyName,
+ VARIANT PropertyValue);
+
+ HRESULT (STDMETHODCALLTYPE *getAttribute)(
+ IXMLElement* This,
+ BSTR strPropertyName,
+ VARIANT *PropertyValue);
+
+ HRESULT (STDMETHODCALLTYPE *removeAttribute)(
+ IXMLElement* This,
+ BSTR strPropertyName);
+
+ HRESULT (STDMETHODCALLTYPE *get_children)(
+ IXMLElement* This,
+ IXMLElementCollection **p);
+
+ HRESULT (STDMETHODCALLTYPE *get_type)(
+ IXMLElement* This,
+ LONG *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_text)(
+ IXMLElement* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_text)(
+ IXMLElement* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *addChild)(
+ IXMLElement* This,
+ IXMLElement *pChildElem,
+ LONG lIndex,
+ LONG lreserved);
+
+ HRESULT (STDMETHODCALLTYPE *removeChild)(
+ IXMLElement* This,
+ IXMLElement *pChildElem);
+
+ END_INTERFACE
+} IXMLElementVtbl;
+interface IXMLElement {
+ CONST_VTBL IXMLElementVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElement_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElement_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElement_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElement_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElement_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElement_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElement_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElement methods ***/
+#define IXMLElement_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
+#define IXMLElement_put_tagName(This,p) (This)->lpVtbl->put_tagName(This,p)
+#define IXMLElement_get_parent(This,parent) (This)->lpVtbl->get_parent(This,parent)
+#define IXMLElement_setAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->setAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement_getAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->getAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement_removeAttribute(This,strPropertyName) (This)->lpVtbl->removeAttribute(This,strPropertyName)
+#define IXMLElement_get_children(This,p) (This)->lpVtbl->get_children(This,p)
+#define IXMLElement_get_type(This,p) (This)->lpVtbl->get_type(This,p)
+#define IXMLElement_get_text(This,p) (This)->lpVtbl->get_text(This,p)
+#define IXMLElement_put_text(This,p) (This)->lpVtbl->put_text(This,p)
+#define IXMLElement_addChild(This,pChildElem,lIndex,lreserved) (This)->lpVtbl->addChild(This,pChildElem,lIndex,lreserved)
+#define IXMLElement_removeChild(This,pChildElem) (This)->lpVtbl->removeChild(This,pChildElem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElement_get_tagName_Proxy(
+ IXMLElement* This,
+ BSTR *p);
+void __RPC_STUB IXMLElement_get_tagName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_put_tagName_Proxy(
+ IXMLElement* This,
+ BSTR p);
+void __RPC_STUB IXMLElement_put_tagName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_parent_Proxy(
+ IXMLElement* This,
+ IXMLElement **parent);
+void __RPC_STUB IXMLElement_get_parent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_setAttribute_Proxy(
+ IXMLElement* This,
+ BSTR strPropertyName,
+ VARIANT PropertyValue);
+void __RPC_STUB IXMLElement_setAttribute_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_getAttribute_Proxy(
+ IXMLElement* This,
+ BSTR strPropertyName,
+ VARIANT *PropertyValue);
+void __RPC_STUB IXMLElement_getAttribute_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_removeAttribute_Proxy(
+ IXMLElement* This,
+ BSTR strPropertyName);
+void __RPC_STUB IXMLElement_removeAttribute_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_children_Proxy(
+ IXMLElement* This,
+ IXMLElementCollection **p);
+void __RPC_STUB IXMLElement_get_children_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_type_Proxy(
+ IXMLElement* This,
+ LONG *p);
+void __RPC_STUB IXMLElement_get_type_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_get_text_Proxy(
+ IXMLElement* This,
+ BSTR *p);
+void __RPC_STUB IXMLElement_get_text_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_put_text_Proxy(
+ IXMLElement* This,
+ BSTR p);
+void __RPC_STUB IXMLElement_put_text_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_addChild_Proxy(
+ IXMLElement* This,
+ IXMLElement *pChildElem,
+ LONG lIndex,
+ LONG lreserved);
+void __RPC_STUB IXMLElement_addChild_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement_removeChild_Proxy(
+ IXMLElement* This,
+ IXMLElement *pChildElem);
+void __RPC_STUB IXMLElement_removeChild_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLElement_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLDocument interface
+ */
+#ifndef __IXMLDocument_INTERFACE_DEFINED__
+#define __IXMLDocument_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLDocument, 0xf52e2b61, 0x18a1, 0x11d1, 0xb1,0x05, 0x00,0x80,0x5f,0x49,0x91,0x6b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLDocument : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE get_root(
+ IXMLElement **p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_fileSize(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_fileModifiedDate(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_fileUpdatedDate(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_URL(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_URL(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_mimeType(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_readyState(
+ LONG *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_charset(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_charset(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_version(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_doctype(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_dtdURl(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE createElement(
+ VARIANT vType,
+ VARIANT var1,
+ IXMLElement **ppElem) = 0;
+
+};
+#else
+typedef struct IXMLDocumentVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLDocument* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLDocument* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLDocument* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLDocument* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLDocument* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLDocument* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLDocument* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLDocument methods ***/
+ HRESULT (STDMETHODCALLTYPE *get_root)(
+ IXMLDocument* This,
+ IXMLElement **p);
+
+ HRESULT (STDMETHODCALLTYPE *get_fileSize)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_fileModifiedDate)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_fileUpdatedDate)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_URL)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_URL)(
+ IXMLDocument* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *get_mimeType)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_readyState)(
+ IXMLDocument* This,
+ LONG *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_charset)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_charset)(
+ IXMLDocument* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *get_version)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_doctype)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_dtdURl)(
+ IXMLDocument* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *createElement)(
+ IXMLDocument* This,
+ VARIANT vType,
+ VARIANT var1,
+ IXMLElement **ppElem);
+
+ END_INTERFACE
+} IXMLDocumentVtbl;
+interface IXMLDocument {
+ CONST_VTBL IXMLDocumentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLDocument_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLDocument_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLDocument_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLDocument_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLDocument_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLDocument methods ***/
+#define IXMLDocument_get_root(This,p) (This)->lpVtbl->get_root(This,p)
+#define IXMLDocument_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
+#define IXMLDocument_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
+#define IXMLDocument_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
+#define IXMLDocument_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
+#define IXMLDocument_put_URL(This,p) (This)->lpVtbl->put_URL(This,p)
+#define IXMLDocument_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
+#define IXMLDocument_get_readyState(This,p) (This)->lpVtbl->get_readyState(This,p)
+#define IXMLDocument_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
+#define IXMLDocument_put_charset(This,p) (This)->lpVtbl->put_charset(This,p)
+#define IXMLDocument_get_version(This,p) (This)->lpVtbl->get_version(This,p)
+#define IXMLDocument_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
+#define IXMLDocument_get_dtdURl(This,p) (This)->lpVtbl->get_dtdURl(This,p)
+#define IXMLDocument_createElement(This,vType,var1,ppElem) (This)->lpVtbl->createElement(This,vType,var1,ppElem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_root_Proxy(
+ IXMLDocument* This,
+ IXMLElement **p);
+void __RPC_STUB IXMLDocument_get_root_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_fileSize_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_fileSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_fileModifiedDate_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_fileModifiedDate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_fileUpdatedDate_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_fileUpdatedDate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_URL_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_URL_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_put_URL_Proxy(
+ IXMLDocument* This,
+ BSTR p);
+void __RPC_STUB IXMLDocument_put_URL_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_mimeType_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_mimeType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_readyState_Proxy(
+ IXMLDocument* This,
+ LONG *p);
+void __RPC_STUB IXMLDocument_get_readyState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_charset_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_charset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_put_charset_Proxy(
+ IXMLDocument* This,
+ BSTR p);
+void __RPC_STUB IXMLDocument_put_charset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_version_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_version_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_doctype_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_doctype_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_get_dtdURl_Proxy(
+ IXMLDocument* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument_get_dtdURl_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument_createElement_Proxy(
+ IXMLDocument* This,
+ VARIANT vType,
+ VARIANT var1,
+ IXMLElement **ppElem);
+void __RPC_STUB IXMLDocument_createElement_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLDocument_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLElement2 interface
+ */
+#ifndef __IXMLElement2_INTERFACE_DEFINED__
+#define __IXMLElement2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElement2, 0x2b8de2ff, 0x8d2d, 0x11d1, 0xb2,0xfc, 0x00,0xc0,0x4f,0xd9,0x15,0xa9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElement2 : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE get_tagName(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_tagName(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_parent(
+ IXMLElement2 **ppParent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setAttribute(
+ BSTR strPropertyName,
+ VARIANT PropertyValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE getAttribute(
+ BSTR strPropertyName,
+ VARIANT *PropertyValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE removeAttribute(
+ BSTR strPropertyName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_children(
+ IXMLElementCollection **pp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_type(
+ LONG *plType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_text(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_text(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE addChild(
+ IXMLElement2 *pChildElem,
+ LONG lIndex,
+ LONG lReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE removeChild(
+ IXMLElement2 *pChildElem) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_attributes(
+ IXMLElementCollection **pp) = 0;
+
+};
+#else
+typedef struct IXMLElement2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLElement2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLElement2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLElement2* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLElement2* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLElement2* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLElement2* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLElement2* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLElement2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *get_tagName)(
+ IXMLElement2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_tagName)(
+ IXMLElement2* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *get_parent)(
+ IXMLElement2* This,
+ IXMLElement2 **ppParent);
+
+ HRESULT (STDMETHODCALLTYPE *setAttribute)(
+ IXMLElement2* This,
+ BSTR strPropertyName,
+ VARIANT PropertyValue);
+
+ HRESULT (STDMETHODCALLTYPE *getAttribute)(
+ IXMLElement2* This,
+ BSTR strPropertyName,
+ VARIANT *PropertyValue);
+
+ HRESULT (STDMETHODCALLTYPE *removeAttribute)(
+ IXMLElement2* This,
+ BSTR strPropertyName);
+
+ HRESULT (STDMETHODCALLTYPE *get_children)(
+ IXMLElement2* This,
+ IXMLElementCollection **pp);
+
+ HRESULT (STDMETHODCALLTYPE *get_type)(
+ IXMLElement2* This,
+ LONG *plType);
+
+ HRESULT (STDMETHODCALLTYPE *get_text)(
+ IXMLElement2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_text)(
+ IXMLElement2* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *addChild)(
+ IXMLElement2* This,
+ IXMLElement2 *pChildElem,
+ LONG lIndex,
+ LONG lReserved);
+
+ HRESULT (STDMETHODCALLTYPE *removeChild)(
+ IXMLElement2* This,
+ IXMLElement2 *pChildElem);
+
+ HRESULT (STDMETHODCALLTYPE *get_attributes)(
+ IXMLElement2* This,
+ IXMLElementCollection **pp);
+
+ END_INTERFACE
+} IXMLElement2Vtbl;
+interface IXMLElement2 {
+ CONST_VTBL IXMLElement2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElement2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElement2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElement2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElement2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElement2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElement2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElement2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElement2 methods ***/
+#define IXMLElement2_get_tagName(This,p) (This)->lpVtbl->get_tagName(This,p)
+#define IXMLElement2_put_tagName(This,p) (This)->lpVtbl->put_tagName(This,p)
+#define IXMLElement2_get_parent(This,ppParent) (This)->lpVtbl->get_parent(This,ppParent)
+#define IXMLElement2_setAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->setAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement2_getAttribute(This,strPropertyName,PropertyValue) (This)->lpVtbl->getAttribute(This,strPropertyName,PropertyValue)
+#define IXMLElement2_removeAttribute(This,strPropertyName) (This)->lpVtbl->removeAttribute(This,strPropertyName)
+#define IXMLElement2_get_children(This,pp) (This)->lpVtbl->get_children(This,pp)
+#define IXMLElement2_get_type(This,plType) (This)->lpVtbl->get_type(This,plType)
+#define IXMLElement2_get_text(This,p) (This)->lpVtbl->get_text(This,p)
+#define IXMLElement2_put_text(This,p) (This)->lpVtbl->put_text(This,p)
+#define IXMLElement2_addChild(This,pChildElem,lIndex,lReserved) (This)->lpVtbl->addChild(This,pChildElem,lIndex,lReserved)
+#define IXMLElement2_removeChild(This,pChildElem) (This)->lpVtbl->removeChild(This,pChildElem)
+#define IXMLElement2_get_attributes(This,pp) (This)->lpVtbl->get_attributes(This,pp)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_tagName_Proxy(
+ IXMLElement2* This,
+ BSTR *p);
+void __RPC_STUB IXMLElement2_get_tagName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_put_tagName_Proxy(
+ IXMLElement2* This,
+ BSTR p);
+void __RPC_STUB IXMLElement2_put_tagName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_parent_Proxy(
+ IXMLElement2* This,
+ IXMLElement2 **ppParent);
+void __RPC_STUB IXMLElement2_get_parent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_setAttribute_Proxy(
+ IXMLElement2* This,
+ BSTR strPropertyName,
+ VARIANT PropertyValue);
+void __RPC_STUB IXMLElement2_setAttribute_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_getAttribute_Proxy(
+ IXMLElement2* This,
+ BSTR strPropertyName,
+ VARIANT *PropertyValue);
+void __RPC_STUB IXMLElement2_getAttribute_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_removeAttribute_Proxy(
+ IXMLElement2* This,
+ BSTR strPropertyName);
+void __RPC_STUB IXMLElement2_removeAttribute_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_children_Proxy(
+ IXMLElement2* This,
+ IXMLElementCollection **pp);
+void __RPC_STUB IXMLElement2_get_children_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_type_Proxy(
+ IXMLElement2* This,
+ LONG *plType);
+void __RPC_STUB IXMLElement2_get_type_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_text_Proxy(
+ IXMLElement2* This,
+ BSTR *p);
+void __RPC_STUB IXMLElement2_get_text_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_put_text_Proxy(
+ IXMLElement2* This,
+ BSTR p);
+void __RPC_STUB IXMLElement2_put_text_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_addChild_Proxy(
+ IXMLElement2* This,
+ IXMLElement2 *pChildElem,
+ LONG lIndex,
+ LONG lReserved);
+void __RPC_STUB IXMLElement2_addChild_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_removeChild_Proxy(
+ IXMLElement2* This,
+ IXMLElement2 *pChildElem);
+void __RPC_STUB IXMLElement2_removeChild_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLElement2_get_attributes_Proxy(
+ IXMLElement2* This,
+ IXMLElementCollection **pp);
+void __RPC_STUB IXMLElement2_get_attributes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLElement2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLDocument2 interface
+ */
+#ifndef __IXMLDocument2_INTERFACE_DEFINED__
+#define __IXMLDocument2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLDocument2, 0x2b8de2fe, 0x8d2d, 0x11d1, 0xb2,0xfc, 0x00,0xc0,0x4f,0xd9,0x15,0xa9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLDocument2 : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE get_root(
+ IXMLElement2 **p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_fileSize(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_fileModifiedDate(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_fileUpdatedDate(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_URL(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_URL(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_mimeType(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_readyState(
+ LONG *pl) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_charset(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_charset(
+ BSTR p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_version(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_doctype(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_dtdURL(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE createElement(
+ VARIANT vType,
+ VARIANT var,
+ IXMLElement2 **ppElem) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_async(
+ VARIANT_BOOL *pf) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE put_async(
+ VARIANT_BOOL f) = 0;
+
+};
+#else
+typedef struct IXMLDocument2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLDocument2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLDocument2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLDocument2* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLDocument2* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLDocument2* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLDocument2* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLDocument2* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLDocument2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *get_root)(
+ IXMLDocument2* This,
+ IXMLElement2 **p);
+
+ HRESULT (STDMETHODCALLTYPE *get_fileSize)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_fileModifiedDate)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_fileUpdatedDate)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_URL)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_URL)(
+ IXMLDocument2* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *get_mimeType)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_readyState)(
+ IXMLDocument2* This,
+ LONG *pl);
+
+ HRESULT (STDMETHODCALLTYPE *get_charset)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *put_charset)(
+ IXMLDocument2* This,
+ BSTR p);
+
+ HRESULT (STDMETHODCALLTYPE *get_version)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_doctype)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_dtdURL)(
+ IXMLDocument2* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *createElement)(
+ IXMLDocument2* This,
+ VARIANT vType,
+ VARIANT var,
+ IXMLElement2 **ppElem);
+
+ HRESULT (STDMETHODCALLTYPE *get_async)(
+ IXMLDocument2* This,
+ VARIANT_BOOL *pf);
+
+ HRESULT (STDMETHODCALLTYPE *put_async)(
+ IXMLDocument2* This,
+ VARIANT_BOOL f);
+
+ END_INTERFACE
+} IXMLDocument2Vtbl;
+interface IXMLDocument2 {
+ CONST_VTBL IXMLDocument2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLDocument2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLDocument2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLDocument2_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLDocument2_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLDocument2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLDocument2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLDocument2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLDocument2 methods ***/
+#define IXMLDocument2_get_root(This,p) (This)->lpVtbl->get_root(This,p)
+#define IXMLDocument2_get_fileSize(This,p) (This)->lpVtbl->get_fileSize(This,p)
+#define IXMLDocument2_get_fileModifiedDate(This,p) (This)->lpVtbl->get_fileModifiedDate(This,p)
+#define IXMLDocument2_get_fileUpdatedDate(This,p) (This)->lpVtbl->get_fileUpdatedDate(This,p)
+#define IXMLDocument2_get_URL(This,p) (This)->lpVtbl->get_URL(This,p)
+#define IXMLDocument2_put_URL(This,p) (This)->lpVtbl->put_URL(This,p)
+#define IXMLDocument2_get_mimeType(This,p) (This)->lpVtbl->get_mimeType(This,p)
+#define IXMLDocument2_get_readyState(This,pl) (This)->lpVtbl->get_readyState(This,pl)
+#define IXMLDocument2_get_charset(This,p) (This)->lpVtbl->get_charset(This,p)
+#define IXMLDocument2_put_charset(This,p) (This)->lpVtbl->put_charset(This,p)
+#define IXMLDocument2_get_version(This,p) (This)->lpVtbl->get_version(This,p)
+#define IXMLDocument2_get_doctype(This,p) (This)->lpVtbl->get_doctype(This,p)
+#define IXMLDocument2_get_dtdURL(This,p) (This)->lpVtbl->get_dtdURL(This,p)
+#define IXMLDocument2_createElement(This,vType,var,ppElem) (This)->lpVtbl->createElement(This,vType,var,ppElem)
+#define IXMLDocument2_get_async(This,pf) (This)->lpVtbl->get_async(This,pf)
+#define IXMLDocument2_put_async(This,f) (This)->lpVtbl->put_async(This,f)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_root_Proxy(
+ IXMLDocument2* This,
+ IXMLElement2 **p);
+void __RPC_STUB IXMLDocument2_get_root_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_fileSize_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_fileSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_fileModifiedDate_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_fileModifiedDate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_fileUpdatedDate_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_fileUpdatedDate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_URL_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_URL_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_put_URL_Proxy(
+ IXMLDocument2* This,
+ BSTR p);
+void __RPC_STUB IXMLDocument2_put_URL_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_mimeType_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_mimeType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_readyState_Proxy(
+ IXMLDocument2* This,
+ LONG *pl);
+void __RPC_STUB IXMLDocument2_get_readyState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_charset_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_charset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_put_charset_Proxy(
+ IXMLDocument2* This,
+ BSTR p);
+void __RPC_STUB IXMLDocument2_put_charset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_version_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_version_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_doctype_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_doctype_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_dtdURL_Proxy(
+ IXMLDocument2* This,
+ BSTR *p);
+void __RPC_STUB IXMLDocument2_get_dtdURL_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_createElement_Proxy(
+ IXMLDocument2* This,
+ VARIANT vType,
+ VARIANT var,
+ IXMLElement2 **ppElem);
+void __RPC_STUB IXMLDocument2_createElement_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_get_async_Proxy(
+ IXMLDocument2* This,
+ VARIANT_BOOL *pf);
+void __RPC_STUB IXMLDocument2_get_async_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLDocument2_put_async_Proxy(
+ IXMLDocument2* This,
+ VARIANT_BOOL f);
+void __RPC_STUB IXMLDocument2_put_async_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLDocument2_INTERFACE_DEFINED__ */
+
+typedef enum tagXMLEMEM_TYPE {
+ XMLELEMTYPE_ELEMENT = 0,
+ XMLELEMTYPE_TEXT = 1,
+ XMLELEMTYPE_COMMENT = 2,
+ XMLELEMTYPE_DOCUMENT = 3,
+ XMLELEMTYPE_DTD = 4,
+ XMLELEMTYPE_PI = 5,
+ XMLELEMTYPE_OTHER = 6
+} XMLELEM_TYPE;
+typedef struct _xml_error {
+ UINT _nLine;
+ BSTR _pchBuf;
+ BSTR _cchBuf;
+ UINT _ich;
+ BSTR _pszFound;
+ BSTR _pszExpected;
+ DWORD _reserved1;
+ DWORD _reserved2;
+} XML_ERROR;
+/*****************************************************************************
+ * IXMLAttribute interface
+ */
+#ifndef __IXMLAttribute_INTERFACE_DEFINED__
+#define __IXMLAttribute_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLAttribute, 0xd4d4a0fc, 0x3b73, 0x11d1, 0xb2,0xb4, 0x00,0xc0,0x4f,0xb9,0x25,0x96);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLAttribute : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE get_name(
+ BSTR *p) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE get_value(
+ BSTR *p) = 0;
+
+};
+#else
+typedef struct IXMLAttributeVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLAttribute* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLAttribute* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLAttribute* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLAttribute* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLAttribute* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLAttribute* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLAttribute* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLAttribute methods ***/
+ HRESULT (STDMETHODCALLTYPE *get_name)(
+ IXMLAttribute* This,
+ BSTR *p);
+
+ HRESULT (STDMETHODCALLTYPE *get_value)(
+ IXMLAttribute* This,
+ BSTR *p);
+
+ END_INTERFACE
+} IXMLAttributeVtbl;
+interface IXMLAttribute {
+ CONST_VTBL IXMLAttributeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLAttribute_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLAttribute_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLAttribute_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLAttribute_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLAttribute_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLAttribute_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLAttribute_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLAttribute methods ***/
+#define IXMLAttribute_get_name(This,p) (This)->lpVtbl->get_name(This,p)
+#define IXMLAttribute_get_value(This,p) (This)->lpVtbl->get_value(This,p)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLAttribute_get_name_Proxy(
+ IXMLAttribute* This,
+ BSTR *p);
+void __RPC_STUB IXMLAttribute_get_name_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IXMLAttribute_get_value_Proxy(
+ IXMLAttribute* This,
+ BSTR *p);
+void __RPC_STUB IXMLAttribute_get_value_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLAttribute_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLError interface
+ */
+#ifndef __IXMLError_INTERFACE_DEFINED__
+#define __IXMLError_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLError, 0x948c5ad3, 0xc58d, 0x11d0, 0x9c,0x0b, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLError : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetErrorInfo(
+ XML_ERROR *pErrorReturn) = 0;
+
+};
+#else
+typedef struct IXMLErrorVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLError* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLError* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLError* This);
+
+ /*** IXMLError methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetErrorInfo)(
+ IXMLError* This,
+ XML_ERROR *pErrorReturn);
+
+ END_INTERFACE
+} IXMLErrorVtbl;
+interface IXMLError {
+ CONST_VTBL IXMLErrorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLError_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLError_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLError_Release(This) (This)->lpVtbl->Release(This)
+/*** IXMLError methods ***/
+#define IXMLError_GetErrorInfo(This,pErrorReturn) (This)->lpVtbl->GetErrorInfo(This,pErrorReturn)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLError_GetErrorInfo_Proxy(
+ IXMLError* This,
+ XML_ERROR *pErrorReturn);
+void __RPC_STUB IXMLError_GetErrorInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLError_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IXMLElementNotificationSink interface
+ */
+#ifndef __IXMLElementNotificationSink_INTERFACE_DEFINED__
+#define __IXMLElementNotificationSink_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IXMLElementNotificationSink, 0xd9f1e15a, 0xccdb, 0x11d0, 0x9c,0x0c, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IXMLElementNotificationSink : public IDispatch
+{
+ virtual HRESULT STDMETHODCALLTYPE ChildAdded(
+ IDispatch *pChildElem) = 0;
+
+};
+#else
+typedef struct IXMLElementNotificationSinkVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IXMLElementNotificationSink* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IXMLElementNotificationSink* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IXMLElementNotificationSink* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IXMLElementNotificationSink* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IXMLElementNotificationSink* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IXMLElementNotificationSink* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IXMLElementNotificationSink* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ /*** IXMLElementNotificationSink methods ***/
+ HRESULT (STDMETHODCALLTYPE *ChildAdded)(
+ IXMLElementNotificationSink* This,
+ IDispatch *pChildElem);
+
+ END_INTERFACE
+} IXMLElementNotificationSinkVtbl;
+interface IXMLElementNotificationSink {
+ CONST_VTBL IXMLElementNotificationSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IXMLElementNotificationSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IXMLElementNotificationSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IXMLElementNotificationSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IXMLElementNotificationSink_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IXMLElementNotificationSink_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IXMLElementNotificationSink_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IXMLElementNotificationSink_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+/*** IXMLElementNotificationSink methods ***/
+#define IXMLElementNotificationSink_ChildAdded(This,pChildElem) (This)->lpVtbl->ChildAdded(This,pChildElem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IXMLElementNotificationSink_ChildAdded_Proxy(
+ IXMLElementNotificationSink* This,
+ IDispatch *pChildElem);
+void __RPC_STUB IXMLElementNotificationSink_ChildAdded_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IXMLElementNotificationSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * XMLDocument coclass
+ */
+
+DEFINE_GUID(CLSID_XMLDocument, 0xcfc399af, 0xd876, 0x11d0, 0x9c,0x10, 0x00,0xc0,0x4f,0xc9,0x9c,0x8e);
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_MSXML_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl
new file mode 100644
index 00000000..6d24ca8e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml.idl
@@ -0,0 +1,366 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <msxmldid.h>
+#include <msxml2did.h>
+#include <idispids.h>
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+import "wtypes.idl";
+import "objidl.idl";
+import "oaidl.idl";
+#endif
+
+[
+ uuid(d63e0ce2-a0a2-11d0-9c02-00c04fc99c8e),
+ version(2.0),
+ helpstring("Microsoft XML, v2.0")
+]
+library MSXML
+{
+
+importlib("stdole2.tlb");
+
+#include <xmldom.idl>
+#include <xmldso.idl>
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e)
+]
+interface IXMLElementCollection : IDispatch
+{
+ [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+ HRESULT length( [in] LONG v );
+
+ [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+ HRESULT length( [retval, out] LONG *p );
+
+ [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)]
+ HRESULT _newEnum( [retval, out] IUnknown ** ppUnk );
+
+ [id(DISPID_XMLELEMENTCOLLECTION_ITEM)]
+ HRESULT item(
+ [optional, in] VARIANT var1,
+ [optional, in] VARIANT var2,
+ [retval, out] IDispatch ** ppDisp );
+}
+
+[
+local,
+object,
+uuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e)
+]
+interface IXMLElement : IDispatch
+{
+ [propget, id(DISPID_XMLELEMENT_TAGNAME)]
+ HRESULT tagName( [retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLELEMENT_TAGNAME)]
+ HRESULT tagName( [in] BSTR p );
+
+ [propget, id(DISPID_XMLELEMENT_PARENT)]
+ HRESULT parent( [retval, out] IXMLElement **parent );
+
+ [id(DISPID_XMLELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR strPropertyName,
+ [in] VARIANT PropertyValue );
+
+ [id(DISPID_XMLELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strPropertyName,
+ [retval, out] VARIANT *PropertyValue );
+
+ [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR strPropertyName );
+
+ [propget, id(DISPID_XMLELEMENT_CHILDREN)]
+ HRESULT children( [retval, out] IXMLElementCollection **p );
+
+ [propget, id(DISPID_XMLELEMENT_TYPE)]
+ HRESULT type( [retval, out] LONG *p );
+
+ [propget, id(DISPID_XMLELEMENT_TEXT)]
+ HRESULT text( [retval, out] BSTR *p );
+
+ [propput, id(DISPID_XMLELEMENT_TEXT)]
+ HRESULT text( [in] BSTR p );
+
+ [id(DISPID_XMLELEMENT_ADDCHILD)]
+ HRESULT addChild(
+ [in] IXMLElement *pChildElem,
+ [in] LONG lIndex,
+ [in] LONG lreserved );
+
+ [id(DISPID_XMLELEMENT_REMOVECHILD)]
+ HRESULT removeChild(
+ [in] IXMLElement *pChildElem );
+}
+
+[
+local,
+object,
+uuid(f52e2b61-18a1-11d1-b105-00805f49916b)
+]
+interface IXMLDocument : IDispatch
+{
+ [propget, id(DISPID_XMLDOCUMENT_ROOT)]
+ HRESULT root( [retval, out] IXMLElement **p );
+
+ [propget, id(DISPID_XMLDOCUMENT_FILESIZE)]
+ HRESULT fileSize( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)]
+ HRESULT fileModifiedDate( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)]
+ HRESULT fileUpdatedDate( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_URL)]
+ HRESULT URL( [retval, out] BSTR *p );
+
+ [propput, id(DISPID_XMLDOCUMENT_URL)]
+ HRESULT URL( [in] BSTR p );
+
+ [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)]
+ HRESULT mimeType( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_READYSTATE)]
+ HRESULT readyState( [retval, out] LONG *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_CHARSET)]
+ HRESULT charset( [retval, out] BSTR *p );
+
+ [propput, id(DISPID_XMLDOCUMENT_CHARSET)]
+ HRESULT charset( [in] BSTR p );
+
+ [propget, id(DISPID_XMLDOCUMENT_VERSION)]
+ HRESULT version( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)]
+ HRESULT doctype( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLDOCUMENT_DTDURL)]
+ HRESULT dtdURl( [retval, out] BSTR *p );
+
+ [id(DISPID_XMLDOCUMENT_CREATEELEMENT)]
+ HRESULT createElement(
+ [in] VARIANT vType,
+ [optional, in] VARIANT var1,
+ [retval, out] IXMLElement **ppElem );
+}
+
+[
+local,
+object,
+uuid(2B8DE2FF-8D2D-11d1-B2FC-00C04FD915A9)
+]
+interface IXMLElement2 : IDispatch
+{
+ [propget, id(DISPID_XMLELEMENT_TAGNAME)]
+ HRESULT tagName([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLELEMENT_TAGNAME)]
+ HRESULT tagName([in] BSTR p);
+
+ [propget, id(DISPID_XMLELEMENT_PARENT)]
+ HRESULT parent([retval, out]IXMLElement2 **ppParent);
+
+ [id(DISPID_XMLELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR strPropertyName,
+ [in] VARIANT PropertyValue);
+
+ [id(DISPID_XMLELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strPropertyName,
+ [retval, out] VARIANT *PropertyValue);
+
+ [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute([in] BSTR strPropertyName);
+
+ [propget, id(DISPID_XMLELEMENT_CHILDREN)]
+ HRESULT children([retval, out] IXMLElementCollection **pp);
+
+ [propget, id(DISPID_XMLELEMENT_TYPE)]
+ HRESULT type([retval, out] LONG *plType);
+
+ [propget, id(DISPID_XMLELEMENT_TEXT)]
+ HRESULT text([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLELEMENT_TEXT)]
+ HRESULT text([in] BSTR p);
+
+ [id(DISPID_XMLELEMENT_ADDCHILD)]
+ HRESULT addChild(
+ [in] IXMLElement2 *pChildElem,
+ [in] LONG lIndex,
+ [in] LONG lReserved);
+
+ [id(DISPID_XMLELEMENT_REMOVECHILD)]
+ HRESULT removeChild([in]IXMLElement2 *pChildElem);
+
+ [propget, id(DISPID_XMLELEMENT_ATTRIBUTES)]
+ HRESULT attributes([retval, out] IXMLElementCollection **pp);
+}
+
+[
+local,
+object,
+uuid(2B8DE2FE-8D2D-11d1-B2FC-00C04FD915A9)
+]
+interface IXMLDocument2 : IDispatch
+{
+ [propget, id(DISPID_XMLDOCUMENT_ROOT)]
+ HRESULT root([retval, out] IXMLElement2 **p);
+
+ [propget, id(DISPID_XMLDOCUMENT_FILESIZE)]
+ HRESULT fileSize([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOCUMENT_FILEMODIFIEDDATE)]
+ HRESULT fileModifiedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOCUMENT_FILEUPDATEDDATE)]
+ HRESULT fileUpdatedDate([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOCUMENT_URL)]
+ HRESULT URL([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLDOCUMENT_URL)]
+ HRESULT URL([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOCUMENT_MIMETYPE)]
+ HRESULT mimeType([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOCUMENT_READYSTATE)]
+ HRESULT readyState([retval, out]LONG *pl);
+
+ [propget, id(DISPID_XMLDOCUMENT_CHARSET)]
+ HRESULT charset([retval, out]BSTR *p);
+
+ [propput, id(DISPID_XMLDOCUMENT_CHARSET)]
+ HRESULT charset([in]BSTR p);
+
+ [propget, id(DISPID_XMLDOCUMENT_VERSION)]
+ HRESULT version([retval, out]BSTR *p);
+
+ [propget, id(DISPID_XMLDOCUMENT_DOCTYPE)]
+ HRESULT doctype([retval, out]BSTR *p);
+
+ [propget, restricted, id(DISPID_XMLDOCUMENT_DTDURL)]
+ HRESULT dtdURL([retval, out]BSTR *p);
+
+ [id(DISPID_XMLDOCUMENT_CREATEELEMENT)]
+ HRESULT createElement(
+ [in] VARIANT vType,
+ [optional, in] VARIANT var,
+ [retval, out] IXMLElement2 **ppElem);
+
+ [propget, id(DISPID_XMLDOCUMENT_ASYNC)]
+ HRESULT async([retval, out] VARIANT_BOOL *pf);
+
+ [propput, id(DISPID_XMLDOCUMENT_ASYNC)]
+ HRESULT async([in] VARIANT_BOOL f);
+}
+
+typedef enum tagXMLEMEM_TYPE {
+ XMLELEMTYPE_ELEMENT = 0,
+ XMLELEMTYPE_TEXT = 1,
+ XMLELEMTYPE_COMMENT = 2,
+ XMLELEMTYPE_DOCUMENT = 3,
+ XMLELEMTYPE_DTD = 4,
+ XMLELEMTYPE_PI = 5,
+ XMLELEMTYPE_OTHER = 6
+} XMLELEM_TYPE;
+
+typedef struct _xml_error {
+ UINT _nLine;
+ BSTR _pchBuf;
+ BSTR _cchBuf;
+ UINT _ich;
+ BSTR _pszFound;
+ BSTR _pszExpected;
+ DWORD _reserved1;
+ DWORD _reserved2;
+} XML_ERROR;
+
+[
+local,
+object,
+uuid(d4d4a0fc-3b73-11d1-b2b4-00c04fb92596)
+]
+interface IXMLAttribute : IDispatch
+{
+ [propget, id(DISPID_XMLATTRIBUTE_NAME)]
+ HRESULT name( [retval, out] BSTR *p );
+
+ [propget, id(DISPID_XMLATTRIBUTE_VALUE)]
+ HRESULT value( [retval, out] BSTR *p );
+}
+
+[
+local,
+object,
+uuid(948c5ad3-c58d-11d0-9c0b-00c04fc99c8e)
+]
+interface IXMLError : IUnknown
+{
+ HRESULT GetErrorInfo([out]XML_ERROR *pErrorReturn);
+}
+
+[
+ object,
+ local,
+ uuid(D9F1E15A-CCDB-11d0-9C0C-00C04FC99C8E)
+]
+interface IXMLElementNotificationSink : IDispatch
+{
+ [id(DISPID_XMLNOTIFSINK_CHILDADDED)]
+ HRESULT ChildAdded([in]IDispatch *pChildElem);
+}
+
+[
+ helpstring("Msxml"),
+ progid("Msxml"),
+ threading(both),
+ version(1.0),
+ uuid(cfc399af-d876-11d0-9c10-00c04fc99c8e)
+]
+coclass XMLDocument
+{
+ [default] interface IXMLDocument;
+}
+
+} /* Library MSXML */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl
new file mode 100644
index 00000000..8c75bf1f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2.idl
@@ -0,0 +1,3576 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <msxml2did.h>
+#include <idispids.h>
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
+ version(3.0),
+ helpstring("Microsoft XML, v3.0")
+]
+library MSXML2
+{
+
+importlib("stdole2.tlb");
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMSchemaCollection;
+interface IXMLDOMDocument2;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+interface IXMLDOMParseErrorCollection;
+interface IXTLRuntime;
+interface IXSLTemplate;
+interface IXSLProcessor;
+
+/* SAX Interfaces */
+interface ISAXAttributes;
+interface ISAXContentHandler;
+interface ISAXDeclHandler;
+interface ISAXDTDHandler;
+interface ISAXEntityResolver;
+interface ISAXErrorHandler;
+interface ISAXLexicalHandler;
+interface ISAXLocator;
+interface ISAXXMLFilter;
+interface ISAXXMLReader;
+
+interface IVBSAXAttributes;
+interface IVBSAXContentHandler;
+interface IVBSAXDeclHandler;
+interface IVBSAXDTDHandler;
+interface IVBSAXEntityResolver;
+interface IVBSAXErrorHandler;
+interface IVBSAXLexicalHandler;
+interface IVBSAXLocator;
+interface IVBSAXXMLFilter;
+interface IVBSAXXMLReader;
+
+interface IMXAttributes;
+interface IMXReaderControl;
+interface IMXWriter;
+
+interface IXMLDOMSchemaCollection2;
+interface ISchemaStringCollection;
+interface ISchemaItemCollection;
+interface ISchemaItem;
+interface ISchema;
+interface ISchemaParticle;
+interface ISchemaAttribute;
+interface ISchemaElement;
+interface ISchemaType;
+interface ISchemaComplexType;
+interface ISchemaAttributeGroup;
+interface ISchemaModelGroup;
+interface ISchemaAny;
+interface ISchemaIdentityConstraint;
+interface ISchemaNotation;
+
+
+cpp_quote("#define DOMDocument DOMDocument2")
+cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2")
+
+cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
+cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
+typedef enum tagDOMNodeType
+{
+ NODE_INVALID = 0,
+ NODE_ELEMENT = 1,
+ NODE_ATTRIBUTE = 2,
+ NODE_TEXT = 3,
+ NODE_CDATA_SECTION = 4,
+ NODE_ENTITY_REFERENCE = 5,
+ NODE_ENTITY = 6,
+ NODE_PROCESSING_INSTRUCTION = 7,
+ NODE_COMMENT = 8,
+ NODE_DOCUMENT = 9,
+ NODE_DOCUMENT_TYPE = 10,
+ NODE_DOCUMENT_FRAGMENT = 11,
+ NODE_NOTATION = 12
+} DOMNodeType;
+cpp_quote("#endif")
+
+typedef enum _SOMITEMTYPE
+{
+ SOMITEM_SCHEMA = 0x1000,
+ SOMITEM_ATTRIBUTE = 0x1001,
+ SOMITEM_ATTRIBUTEGROUP = 0x1002,
+ SOMITEM_NOTATION = 0x1003,
+ SOMITEM_IDENTITYCONSTRAINT = 0x1100,
+ SOMITEM_KEY = 0x1101,
+ SOMITEM_KEYREF = 0x1102,
+ SOMITEM_UNIQUE = 0x1103,
+ SOMITEM_ANYTYPE = 0x2000,
+ SOMITEM_DATATYPE = 0x2100,
+ SOMITEM_DATATYPE_ANYTYPE = 0x2101,
+ SOMITEM_DATATYPE_ANYURI = 0x2102,
+ SOMITEM_DATATYPE_BASE64BINARY = 0x2103,
+ SOMITEM_DATATYPE_BOOLEAN = 0x2104,
+ SOMITEM_DATATYPE_BYTE = 0x2105,
+ SOMITEM_DATATYPE_DATE = 0x2106,
+ SOMITEM_DATATYPE_DATETIME = 0x2107,
+ SOMITEM_DATATYPE_DAY = 0x2108,
+ SOMITEM_DATATYPE_DECIMAL = 0x2109,
+ SOMITEM_DATATYPE_DOUBLE = 0x210A,
+ SOMITEM_DATATYPE_DURATION = 0x210B,
+ SOMITEM_DATATYPE_ENTITIES = 0x210C,
+ SOMITEM_DATATYPE_ENTITY = 0x210D,
+ SOMITEM_DATATYPE_FLOAT = 0x210E,
+ SOMITEM_DATATYPE_HEXBINARY = 0x210F,
+ SOMITEM_DATATYPE_ID = 0x2110,
+ SOMITEM_DATATYPE_IDREF = 0x2111,
+ SOMITEM_DATATYPE_IDREFS = 0x2112,
+ SOMITEM_DATATYPE_INT = 0x2113,
+ SOMITEM_DATATYPE_INTEGER = 0x2114,
+ SOMITEM_DATATYPE_LANGUAGE = 0x2115,
+ SOMITEM_DATATYPE_LONG = 0x2116,
+ SOMITEM_DATATYPE_MONTH = 0x2117,
+ SOMITEM_DATATYPE_MONTHDAY = 0x2118,
+ SOMITEM_DATATYPE_NAME = 0x2119,
+ SOMITEM_DATATYPE_NCNAME = 0x211A,
+ SOMITEM_DATATYPE_NEGATIVEINTEGER = 0x211B,
+ SOMITEM_DATATYPE_NMTOKEN = 0x211C,
+ SOMITEM_DATATYPE_NMTOKENS = 0x211D,
+ SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,
+ SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,
+ SOMITEM_DATATYPE_NORMALIZEDSTRING = 0x2120,
+ SOMITEM_DATATYPE_NOTATION = 0x2121,
+ SOMITEM_DATATYPE_POSITIVEINTEGER = 0x2122,
+ SOMITEM_DATATYPE_QNAME = 0x2123,
+ SOMITEM_DATATYPE_SHORT = 0x2124,
+ SOMITEM_DATATYPE_STRING = 0x2125,
+ SOMITEM_DATATYPE_TIME = 0x2126,
+ SOMITEM_DATATYPE_TOKEN = 0x2127,
+ SOMITEM_DATATYPE_UNSIGNEDBYTE = 0x2128,
+ SOMITEM_DATATYPE_UNSIGNEDINT = 0x2129,
+ SOMITEM_DATATYPE_UNSIGNEDLONG = 0x212A,
+ SOMITEM_DATATYPE_UNSIGNEDSHORT = 0x212B,
+ SOMITEM_DATATYPE_YEAR = 0x212C,
+ SOMITEM_DATATYPE_YEARMONTH = 0x212D,
+ SOMITEM_DATATYPE_ANYSIMPLETYPE = 0x21FF,
+ SOMITEM_SIMPLETYPE = 0x2200,
+ SOMITEM_COMPLEXTYPE = 0x2400,
+ SOMITEM_PARTICLE = 0x4000,
+ SOMITEM_ANY = 0x4001,
+ SOMITEM_ANYATTRIBUTE = 0x4002,
+ SOMITEM_ELEMENT = 0x4003,
+ SOMITEM_GROUP = 0x4100,
+ SOMITEM_ALL = 0x4101,
+ SOMITEM_CHOICE = 0x4102,
+ SOMITEM_SEQUENCE = 0x4103,
+ SOMITEM_EMPTYPARTICLE = 0x4104,
+ SOMITEM_NULL = 0x0800,
+ SOMITEM_NULL_TYPE = 0x2800,
+ SOMITEM_NULL_ANY = 0x4801,
+ SOMITEM_NULL_ANYATTRIBUTE = 0x4802,
+ SOMITEM_NULL_ELEMENT = 0x4803,
+} SOMITEMTYPE;
+
+typedef enum _SCHEMAUSE
+{
+ SCHEMAUSE_OPTIONAL,
+ SCHEMAUSE_PROHIBITED,
+ SCHEMAUSE_REQUIRED,
+} SCHEMAUSE;
+
+typedef enum _SCHEMADERIVATIONMETHOD
+{
+ SCHEMADERIVATIONMETHOD_EMPTY = 0x0000,
+ SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,
+ SCHEMADERIVATIONMETHOD_EXTENSION = 0x0002,
+ SCHEMADERIVATIONMETHOD_RESTRICTION = 0x0004,
+ SCHEMADERIVATIONMETHOD_LIST = 0x0008,
+ SCHEMADERIVATIONMETHOD_UNION = 0x0010,
+ SCHEMADERIVATIONMETHOD_ALL = 0x00FF,
+ SCHEMADERIVATIONMETHOD_NONE = 0x0100,
+} SCHEMADERIVATIONMETHOD;
+
+typedef enum _SCHEMACONTENTTYPE
+{
+ SCHEMACONTENTTYPE_EMPTY,
+ SCHEMACONTENTTYPE_TEXTONLY,
+ SCHEMACONTENTTYPE_ELEMENTONLY,
+ SCHEMACONTENTTYPE_MIXED,
+} SCHEMACONTENTTYPE;
+
+typedef enum _SCHEMAPROCESSCONTENTS
+{
+ SCHEMAPROCESSCONTENTS_NONE,
+ SCHEMAPROCESSCONTENTS_SKIP,
+ SCHEMAPROCESSCONTENTS_LAX,
+ SCHEMAPROCESSCONTENTS_STRICT,
+} SCHEMAPROCESSCONTENTS;
+
+typedef enum _SCHEMAWHITESPACE
+{
+ SCHEMAWHITESPACE_NONE = -1,
+ SCHEMAWHITESPACE_PRESERVE = 0,
+ SCHEMAWHITESPACE_REPLACE = 1,
+ SCHEMAWHITESPACE_COLLAPSE = 2,
+} SCHEMAWHITESPACE;
+
+
+typedef enum _SCHEMATYPEVARIETY
+{
+ SCHEMATYPEVARIETY_NONE = -1,
+ SCHEMATYPEVARIETY_ATOMIC = 0,
+ SCHEMATYPEVARIETY_LIST = 1,
+ SCHEMATYPEVARIETY_UNION = 2,
+} SCHEMATYPEVARIETY;
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(65725580-9b5d-11d0-9bfe-00c04fc99c8e)
+]
+interface IXMLElementCollection : IDispatch
+{
+ [propput, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+ HRESULT length( [in] LONG v );
+
+ [propget, id(DISPID_XMLELEMENTCOLLECTION_LENGTH)]
+ HRESULT length( [retval, out] LONG *p );
+
+ [propget, id(DISPID_XMLELEMENTCOLLECTION_NEWENUM)]
+ HRESULT _newEnum( [retval, out] IUnknown ** ppUnk );
+
+ [id(DISPID_XMLELEMENTCOLLECTION_ITEM)]
+ HRESULT item(
+ [optional, in] VARIANT var1,
+ [optional, in] VARIANT var2,
+ [retval, out] IDispatch ** ppDisp );
+}
+
+[
+local,
+object,
+uuid(3f7f31ac-e15f-11d0-9c25-00c04fc99c8e)
+]
+interface IXMLElement : IDispatch
+{
+ [propget, id(DISPID_XMLELEMENT_TAGNAME)]
+ HRESULT tagName( [retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLELEMENT_TAGNAME)]
+ HRESULT tagName( [in] BSTR p );
+
+ [propget, id(DISPID_XMLELEMENT_PARENT)]
+ HRESULT parent( [retval, out] IXMLElement **parent );
+
+ [id(DISPID_XMLELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR strPropertyName,
+ [in] VARIANT PropertyValue );
+
+ [id(DISPID_XMLELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR strPropertyName,
+ [retval, out] VARIANT *PropertyValue );
+
+ [id(DISPID_XMLELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR strPropertyName );
+
+ [propget, id(DISPID_XMLELEMENT_CHILDREN)]
+ HRESULT children( [retval, out] IXMLElementCollection **p );
+
+ [propget, id(DISPID_XMLELEMENT_TYPE)]
+ HRESULT type( [retval, out] LONG *p );
+
+ [propget, id(DISPID_XMLELEMENT_TEXT)]
+ HRESULT text( [retval, out] BSTR *p );
+
+ [propput, id(DISPID_XMLELEMENT_TEXT)]
+ HRESULT text( [in] BSTR p );
+
+ [id(DISPID_XMLELEMENT_ADDCHILD)]
+ HRESULT addChild(
+ [in] IXMLElement *pChildElem,
+ [in] LONG lIndex,
+ [in] LONG lreserved );
+
+ [id(DISPID_XMLELEMENT_REMOVECHILD)]
+ HRESULT removeChild(
+ [in] IXMLElement *pChildElem );
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNode : IDispatch
+{
+ [propget, id(DISPID_DOM_NODE_NODENAME)]
+ HRESULT nodeName([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+ HRESULT nodeValue([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+ HRESULT nodeValue([in] VARIANT var1);
+
+ [propget, id(DISPID_DOM_NODE_NODETYPE)]
+ HRESULT nodeType([retval, out] DOMNodeType *domNodeType);
+
+ [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+ HRESULT parentNode([retval, out] IXMLDOMNode **parent);
+
+ [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+ HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);
+
+ [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+ HRESULT firstChild([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+ HRESULT lastChild([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+ HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+ HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+ HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);
+
+ [id(DISPID_DOM_NODE_INSERTBEFORE)]
+ HRESULT insertBefore(
+ [in] IXMLDOMNode *newNode,
+ [in] VARIANT var1,
+ [retval, out] IXMLDOMNode **outOldNode);
+
+ [id(DISPID_DOM_NODE_REPLACECHILD)]
+ HRESULT replaceChild(
+ [in] IXMLDOMNode *newNode,
+ [in] IXMLDOMNode *oldNode,
+ [retval, out] IXMLDOMNode **outOldNode);
+
+ [id(DISPID_DOM_NODE_REMOVECHILD)]
+ HRESULT removeChild(
+ [in] IXMLDOMNode *domNode,
+ [retval, out] IXMLDOMNode **oldNode);
+
+ [id(DISPID_DOM_NODE_APPENDCHILD)]
+ HRESULT appendChild(
+ [in] IXMLDOMNode *newNode,
+ [retval, out] IXMLDOMNode **outNewNode);
+
+ [id(DISPID_DOM_NODE_HASCHILDNODES)]
+ HRESULT hasChildNodes(
+ [retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+ HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);
+
+ [id(DISPID_DOM_NODE_CLONENODE)]
+ HRESULT cloneNode(
+ [in] VARIANT_BOOL pbool,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+ HRESULT nodeTypeString([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+ HRESULT text([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+ HRESULT text([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+ HRESULT specified([retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+ HRESULT definition([retval,out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+ HRESULT nodeTypedValue([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+ HRESULT nodeTypedValue([in] VARIANT var1);
+
+ [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+ HRESULT dataType([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+ HRESULT dataType([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOM_NODE_XML)]
+ HRESULT xml([retval, out] BSTR *p);
+
+ [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+ HRESULT transformNode(
+ [in] IXMLDOMNode *domNode,
+ [retval, out] BSTR *p);
+
+ [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+ HRESULT selectNodes(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNodeList **outList);
+
+ [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+ HRESULT selectSingleNode(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [propget,id(DISPID_XMLDOM_NODE_PARSED)]
+ HRESULT parsed([retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+ HRESULT namespaceURI([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+ HRESULT prefix([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+ HRESULT baseName([retval, out] BSTR *p);
+
+ [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+ HRESULT transformNodeToObject(
+ [in] IXMLDOMNode *domNode,
+ [in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+ HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);
+
+ [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+ HRESULT implementation([retval, out] IXMLDOMImplementation **impl);
+
+ [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+ HRESULT documentElement([retval, out] IXMLDOMElement **domElement);
+
+ [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+ HRESULT documentElement([in] IXMLDOMElement *domElement);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+ HRESULT createElement(
+ [in] BSTR p,
+ [retval, out] IXMLDOMElement **domElement);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+ HRESULT createDocumentFragment(
+ [retval, out] IXMLDOMDocumentFragment **docFrag);
+
+ [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+ HRESULT createTextNode(
+ [in] BSTR p,
+ [retval, out] IXMLDOMText **text);
+
+ [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+ HRESULT createComment(
+ [in] BSTR p,
+ [retval, out] IXMLDOMComment **comment);
+
+ [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+ HRESULT createCDATASection(
+ [in] BSTR p,
+ [retval, out] IXMLDOMCDATASection **cdata);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+ HRESULT createProcessingInstruction(
+ [in] BSTR target,
+ [in] BSTR data,
+ [retval, out] IXMLDOMProcessingInstruction **pi);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+ HRESULT createAttribute(
+ [in] BSTR p,
+ [retval, out] IXMLDOMAttribute **attribute);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+ HRESULT createEntityReference(
+ [in] BSTR p,
+ [retval, out] IXMLDOMEntityReference **entityRef);
+
+ [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNodeList **resultList);
+
+ [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+ HRESULT createNode(
+ [in] VARIANT var,
+ [in] BSTR name,
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+ HRESULT nodeFromID(
+ [in] BSTR id,
+ [retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+ HRESULT load(
+ [in] VARIANT var1,
+ [retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_READYSTATE)]
+ HRESULT readyState([retval, out] LONG *value);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+ HRESULT parseError([retval, out] IXMLDOMParseError **err);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+ HRESULT url([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+ HRESULT async([retval, out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+ HRESULT async([in] VARIANT_BOOL pbool);
+
+ [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+ HRESULT abort();
+
+ [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+ HRESULT loadXML(
+ [in] BSTR p,
+ [out, retval] VARIANT_BOOL *pbool);
+
+ [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+ HRESULT save(
+ [in] VARIANT var1);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+ HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+ HRESULT validateOnParse([in] VARIANT_BOOL pbool);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+ HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+ HRESULT resolveExternals([in] VARIANT_BOOL pbool);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+ HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+ HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange([in] VARIANT var1);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable([in] VARIANT var1);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+ HRESULT ontransformnode([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (373984c8-b845-449b-91e7-45ac83036ade)
+]
+interface IXMLDOMSchemaCollection : IDispatch
+{
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
+ HRESULT add(
+ [in] BSTR uri,
+ [in] VARIANT var);
+
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
+ HRESULT get(
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
+ HRESULT remove(
+ [in] BSTR uri);
+
+ [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
+ HRESULT length(
+ [retval, out] LONG *length);
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);
+
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
+ HRESULT addCollection(
+ [in] IXMLDOMSchemaCollection *otherCollection);
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),
+]
+interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection
+{
+ [id(DISPID_SOM_VALIDATE)]
+ HRESULT validate();
+
+ [propput, id(DISPID_SOM_VALIDATEONLOAD)]
+ HRESULT validateOnLoad(
+ [in] VARIANT_BOOL validateOnLoad);
+
+ [propget, id(DISPID_SOM_VALIDATEONLOAD)]
+ HRESULT validateOnLoad(
+ [out,retval] VARIANT_BOOL* validateOnLoad);
+
+ [id(DISPID_SOM_GETSCHEMA)]
+ HRESULT getSchema(
+ [in] BSTR namespaceURI,
+ [out,retval] ISchema** schema);
+
+ [id(DISPID_SOM_GETDECLARATION)]
+ HRESULT getDeclaration(
+ [in] IXMLDOMNode* node,
+ [out,retval]ISchemaItem** item);
+};
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument2 : IXMLDOMDocument
+{
+ [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
+ HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+ HRESULT schemas([retval, out] VARIANT *var1);
+
+ [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+ HRESULT schemas([in] VARIANT var1);
+
+ [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
+ HRESULT validate(
+ [retval, out] IXMLDOMParseError **err);
+
+ [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
+ HRESULT setProperty(
+ [in] BSTR p,
+ [in] VARIANT var);
+
+ [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
+ HRESULT getProperty(
+ [in] BSTR p,
+ [retval, out] VARIANT *var);
+}
+
+[
+ local,
+ object,
+ dual,
+ uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),
+ oleautomation,
+]
+interface IXMLDOMDocument3 : IXMLDOMDocument2
+{
+ [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]
+ HRESULT validateNode(
+ [in] IXMLDOMNode *node,
+ [out, retval] IXMLDOMParseError **error);
+
+ [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]
+ HRESULT importNode(
+ [in] IXMLDOMNode *node,
+ [in] VARIANT_BOOL deep,
+ [out, retval] IXMLDOMNode **clone);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+ HRESULT length([retval, out] LONG *lLength);
+
+ [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+ HRESULT nextNode(
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NODELIST_RESET)]
+ HRESULT reset();
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
+]
+interface IXMLDOMSelection : IXMLDOMNodeList
+{
+ [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
+ HRESULT expr([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
+ HRESULT expr([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+ HRESULT context([retval, out] IXMLDOMNode **ppNode);
+
+ [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+ HRESULT context([in] IXMLDOMNode * pNode);
+
+ [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
+ HRESULT peekNode(
+ [retval, out] IXMLDOMNode **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_MATCHES)]
+ HRESULT matches(
+ [in] IXMLDOMNode *pNode,
+ [retval, out] IXMLDOMNode **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)]
+ HRESULT removeNext(
+ [retval, out] IXMLDOMNode **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
+ HRESULT removeAll();
+
+ [id(DISPID_XMLDOM_SELECTION_CLONE)]
+ HRESULT clone(
+ [retval, out] IXMLDOMSelection **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
+ HRESULT getProperty(
+ [in] BSTR p,
+ [retval, out] VARIANT * var);
+
+ [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
+ HRESULT setProperty(
+ [in] BSTR p,
+ [in] VARIANT var);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+ [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+ HRESULT getNamedItem(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+ HRESULT setNamedItem(
+ [in] IXMLDOMNode *newNode,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+ HRESULT removeNamedItem(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+ HRESULT length([retval, out] LONG *lLength);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+ HRESULT getQualifiedItem(
+ [in] BSTR name,
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+ HRESULT removeQualifiedItem(
+ [in] BSTR name,
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+ HRESULT nextNode(
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+ HRESULT reset();
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa413-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DATA_DATA)]
+ HRESULT data([retval, out] BSTR *p);
+
+ [propput, id(DISPID_DOM_DATA_DATA)]
+ HRESULT data([in] BSTR data);
+
+ [propget, id(DISPID_DOM_DATA_LENGTH)]
+ HRESULT length([retval, out] LONG *len);
+
+ [id(DISPID_DOM_DATA_SUBSTRING)]
+ HRESULT substringData(
+ [in] LONG offset,
+ [in] LONG count,
+ [retval, out] BSTR *p);
+
+ [id(DISPID_DOM_DATA_APPEND)]
+ HRESULT appendData(
+ [in] BSTR p);
+
+ [id(DISPID_DOM_DATA_INSERT)]
+ HRESULT insertData(
+ [in] LONG offset,
+ [in] BSTR p);
+
+ [id(DISPID_DOM_DATA_DELETE)]
+ HRESULT deleteData(
+ [in] LONG offset,
+ [in] LONG count);
+
+ [id(DISPID_DOM_DATA_REPLACE)]
+ HRESULT replaceData(
+ [in] LONG offset,
+ [in] LONG count,
+ [in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMAttribute : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+ HRESULT value([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+ HRESULT value([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMElement : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+ HRESULT tagName([retval, out] BSTR *p);
+
+ [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR p,
+ [retval, out] VARIANT *var);
+
+ [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR p,
+ [in] VARIANT var);
+
+ [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR p);
+
+ [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+ HRESULT getAttributeNode(
+ [in] BSTR p,
+ [retval, out] IXMLDOMAttribute **attributeNode);
+
+ [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+ HRESULT setAttributeNode(
+ [in] IXMLDOMAttribute *domAttribute,
+ [retval, out] IXMLDOMAttribute **attributeNode);
+
+ [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+ HRESULT removeAttributeNode(
+ [in] IXMLDOMAttribute *domAttribute,
+ [retval, out] IXMLDOMAttribute **attributeNode);
+
+ [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNodeList **resultList);
+
+ [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+ HRESULT normalize();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMText : IXMLDOMCharacterData
+{
+ [id(DISPID_DOM_TEXT_SPLITTEXT)]
+ HRESULT splitText(
+ [in] LONG offset,
+ [retval, out] IXMLDOMText **txtNode);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_PI_TARGET)]
+ HRESULT target([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_PI_DATA)]
+ HRESULT data([retval, out] BSTR *p);
+
+ [propput, id(DISPID_DOM_PI_DATA)]
+ HRESULT data([in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCDATASection : IXMLDOMText
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+ HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);
+
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+ HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNotation : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+ HRESULT publicId([retval, out] VARIANT *id);
+
+ [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+ HRESULT systemId([retval, out] VARIANT *id);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntity : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+ HRESULT publicId([retval, out] VARIANT *id1);
+
+ [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+ HRESULT systemId([retval, out] VARIANT *id1);
+
+ [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+ HRESULT notationName([retval, out] BSTR *p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+ [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+ HRESULT hasFeature(
+ [in] BSTR feature,
+ [in] BSTR version,
+ [retval, out] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa425-272f-11d2-836f-0000f87a7782)
+]
+interface IXTLRuntime : IXMLDOMNode
+{
+ [id(DISPID_XTLRUNTIME_UNIQUEID)]
+ HRESULT uniqueID(
+ [in]IXMLDOMNode *pNode,
+ [retval, out]LONG *pID);
+
+ [id(DISPID_XTLRUNTIME_DEPTH)]
+ HRESULT depth(
+ [in] IXMLDOMNode *pNode,
+ [retval, out]LONG * pDepth);
+
+ [id(DISPID_XTLRUNTIME_CHILDNUMBER)]
+ HRESULT childNumber(
+ [in]IXMLDOMNode *pNode,
+ [retval, out] LONG *pNumber);
+
+ [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
+ HRESULT ancestorChildNumber(
+ [in]BSTR bstr,
+ [in]IXMLDOMNode *pNode,
+ [retval, out]LONG *pNumber);
+
+ [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
+ HRESULT absoluteChildNumber(
+ [in]IXMLDOMNode *pNode,
+ [retval, out]LONG *pNumber);
+
+ [id(DISPID_XTLRUNTIME_FORMATINDEX)]
+ HRESULT formatIndex(
+ [in] LONG lIndex,
+ [in] BSTR bstr,
+ [retval, out]BSTR *pbstr);
+
+ [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
+ HRESULT formatNumber(
+ [in] double dblNumber,
+ [in] BSTR bstr,
+ [retval, out]BSTR *pbstr);
+
+ [id(DISPID_XTLRUNTIME_FORMATDATE)]
+ HRESULT formatDate(
+ [in] VARIANT var1,
+ [in] BSTR bstr,
+ [optional, in] VARIANT var2,
+ [retval, out]BSTR *pbstr);
+
+ [id(DISPID_XTLRUNTIME_FORMATTIME)]
+ HRESULT formatTime(
+ [in] VARIANT var1,
+ [in] BSTR bstr,
+ [optional, in] VARIANT var2,
+ [retval, out]BSTR *pbstr);
+
+}
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(310afa62-0575-11d2-9ca9-0060b0ec3d39),
+pointer_default(unique)
+]
+interface IDSOControl : IDispatch
+{
+ [propget,id(DISPID_XMLDSO_DOCUMENT)]
+ HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc);
+
+ [propput,id(DISPID_XMLDSO_DOCUMENT)]
+ HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc);
+
+ [propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]
+ HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible);
+
+ [propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]
+ HRESULT JavaDSOCompatible([in] BOOL fJavaDSOCompatible);
+
+ [propget, id(DISPID_READYSTATE)]
+ HRESULT readyState([out, retval] long *state);
+}
+
+[
+ uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents
+{
+ properties:
+ methods:
+ [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable();
+
+ [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLProcessor : IDispatch
+{
+ [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+ HRESULT input([in] VARIANT var);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+ HRESULT input([retval, out] VARIANT *var);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
+ HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);
+
+ [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
+ HRESULT setStartMode(
+ [in] BSTR p,
+ [in, defaultvalue("")] BSTR uri);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
+ HRESULT startMode([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
+ HRESULT startModeURI([retval, out] BSTR *uri);
+
+ [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+ HRESULT output([in] VARIANT var);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+ HRESULT output([retval, out] VARIANT *var);
+
+ [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
+ HRESULT transform(
+ [retval, out] VARIANT_BOOL *pbool);
+
+ [id(DISPID_XMLDOM_PROCESSOR_RESET)]
+ HRESULT reset();
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
+ HRESULT readyState([retval, out] LONG *pstate);
+
+ [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
+ HRESULT addParameter(
+ [in] BSTR p,
+ [in] VARIANT var,
+ [in, defaultvalue("")] BSTR uri);
+
+ [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
+ HRESULT addObject(
+ [in] IDispatch* obj,
+ [in] BSTR uri);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
+ HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLTemplate : IDispatch
+{
+ [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+ HRESULT stylesheet([in] IXMLDOMNode *node);
+
+ [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+ HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
+ HRESULT createProcessor(
+ [retval, out] IXSLProcessor **ppProcessor);
+}
+
+[
+ object,
+ uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
+ odl,
+ dual,
+ oleautomation,
+ pointer_default(unique)
+]
+interface IXMLHTTPRequest : IDispatch
+{
+ [id(1)]
+ HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
+ [in,optional] VARIANT username, [in,optional] VARIANT password);
+
+ [id(2)]
+ HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+ [id(3)]
+ HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);
+
+ [id(4)]
+ HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);
+
+ [id(5)]
+ HRESULT send([in, optional] VARIANT body);
+
+ [id(6)]
+ HRESULT abort();
+
+ [propget, id(7)]
+ HRESULT status([out, retval] LONG *pStatus);
+
+ [propget, id(8)]
+ HRESULT statusText([out, retval] BSTR *pStatus);
+
+ [propget, id(9)]
+ HRESULT responseXML([out, retval] IDispatch **pBody);
+
+ [propget, id(10)]
+ HRESULT responseText([out, retval] BSTR *pBody);
+
+ [propget, id(11)]
+ HRESULT responseBody([out, retval] VARIANT *pBody);
+
+ [propget, id(12)]
+ HRESULT responseStream([out, retval] VARIANT *pBody);
+
+ [propget, id(13)]
+ HRESULT readyState([out, retval] LONG *pState);
+
+ [propput, id(14)]
+ HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+};
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)
+]
+interface IServerXMLHTTPRequest : IXMLHTTPRequest
+{
+ typedef enum _SERVERXMLHTTP_OPTION
+ {
+ SXH_OPTION_URL = -1,
+ SXH_OPTION_URL_CODEPAGE,
+ SXH_OPTION_ESCAPE_PERCENT_IN_URL,
+ SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,
+ SXH_OPTION_SELECT_CLIENT_SSL_CERT
+ } SERVERXMLHTTP_OPTION;
+
+ [id(15)]
+ HRESULT setTimeouts(
+ [in] long resolveTimeout,
+ [in] long connectTimeout,
+ [in] long sendTimeout,
+ [in] long receiveTimeout);
+
+ [id(16)]
+ HRESULT waitForResponse(
+ [in, optional] VARIANT timeoutInSeconds,
+ [out, retval] VARIANT_BOOL * isSuccessful);
+
+ [id(17)]
+ HRESULT getOption(
+ [in] SERVERXMLHTTP_OPTION option,
+ [out, retval] VARIANT * value);
+
+ [id(18)]
+ HRESULT setOption(
+ [in] SERVERXMLHTTP_OPTION option,
+ [in] VARIANT value);
+}
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)
+]
+interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest
+{
+ typedef enum _SXH_PROXY_SETTING
+ {
+ SXH_PROXY_SET_DEFAULT = 0,
+ SXH_PROXY_SET_PRECONFIG = 0,
+ SXH_PROXY_SET_DIRECT,
+ SXH_PROXY_SET_PROXY
+ } SXH_PROXY_SETTING;
+
+ [id(19)]
+ HRESULT setProxy(
+ [in] SXH_PROXY_SETTING proxySetting,
+ [in, optional] VARIANT varProxyServer,
+ [in, optional] VARIANT varBypassList);
+
+ [id(20)]
+ HRESULT setProxyCredentials(
+ [in] BSTR bstrUserName,
+ [in] BSTR bstrPassword);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT errorCode([retval, out] LONG *errCode);
+
+ [propget, id(DISPID_DOM_ERROR_URL)]
+ HRESULT url([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_REASON)]
+ HRESULT reason([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+ HRESULT srcText([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_LINE)]
+ HRESULT line([retval, out] LONG *lineNo);
+
+ [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+ HRESULT linepos([retval, out] LONG * linePos);
+
+ [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+ HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa428-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError2 : IXMLDOMParseError
+{
+ [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]
+ HRESULT errorXPath([retval, out] BSTR *xpathexpr);
+
+ [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]
+ HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);
+
+ [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]
+ HRESULT errorParameters(
+ [in] long index,
+ [retval, out] BSTR *param);
+
+ [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]
+ HRESULT errorParametersCount([retval, out] long *count);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa429-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseErrorCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item(
+ [in] long index,
+ [retval, out] IXMLDOMParseError2 **error);
+
+ [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]
+ HRESULT length( [retval, out] long *length);
+
+ [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]
+ HRESULT next( [retval, out] IXMLDOMParseError2 **error);
+
+ [id(DISPID_DOM_ERRORCOLLECTION_RESET)]
+ HRESULT reset();
+
+ [propget, hidden, restricted, id(DISPID_NEWENUM)]
+ HRESULT _newEnum( [retval, out] IUnknown **ppunk);
+}
+
+[
+ uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument26
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("XML DOM Document 3.0"),
+ progid("Msxml2.DOMDocument.3.0"),
+ vi_progid("Msxml2.DOMDocument"),
+ threading(both),
+ uuid(f5078f32-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument30
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(88d969c0-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument40
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(88d96a05-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument60
+{
+ [default] interface IXMLDOMDocument3;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("XML DOM Document"),
+ progid("Msxml2.DOMDocument"),
+ vi_progid("Msxml2.DOMDocument"),
+ threading(both),
+ uuid(f6d90f11-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass DOMDocument
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument26
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("Free threaded XML DOM Document 3.0"),
+ progid("Msxml2.FreeThreadedDOMDocument.3.0"),
+ vi_progid("Msxml2.FreeThreadedDOMDocument"),
+ threading(both),
+ uuid(f5078f33-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument30
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(88d969c1-f192-11d4-a65f-0040963251e5)
+]
+coclass FreeThreadedDOMDocument40
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(88d96a06-f192-11d4-a65f-0040963251e5),
+]
+coclass FreeThreadedDOMDocument60
+{
+ [default] interface IXMLDOMDocument3;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("Free threaded XML DOM Document"),
+ progid("Msxml2.FreeThreadedDOMDocument"),
+ vi_progid("Msxml2.FreeThreadedDOMDocument"),
+ threading(both),
+ uuid(f6d90f12-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass FreeThreadedDOMDocument
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP26
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ helpstring("XML HTTP 3.0"),
+ progid("Msxml2.XMLHTTP.3.0"),
+ vi_progid("Msxml2.XMLHTTP"),
+ threading(apartment),
+ uuid(f5078f35-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP30
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ uuid(88d969c5-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP40
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ uuid(88d96a0a-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP60
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ helpstring("XML HTTP"),
+ progid("Msxml2.XMLHTTP"),
+ vi_progid("Msxml2.XMLHTTP"),
+ threading(apartment),
+ uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass XMLHTTP
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ helpstring("Server XML HTTP 3.0"),
+ progid("Msxml2.ServerXMLHTTP.3.0"),
+ vi_progid("Msxml2.ServerXMLHTTP"),
+ threading(apartment),
+ uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3)
+]
+coclass ServerXMLHTTP30
+{
+ [default] interface IServerXMLHTTPRequest;
+}
+
+[
+ uuid(88d969c6-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP40
+{
+ [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+ uuid(88d96a0b-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP60
+{
+ [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+ helpstring("Server XML HTTP"),
+ progid("Msxml2.ServerXMLHTTP"),
+ vi_progid("Msxml2.ServerXMLHTTP"),
+ threading(apartment),
+ uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1)
+]
+coclass ServerXMLHTTP
+{
+ [default] interface IServerXMLHTTPRequest;
+}
+
+[
+ uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache26
+{
+ [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+ helpstring("XML Schema Cache 3.0"),
+ progid("Msxml2.XMLSchemaCache.3.0"),
+ vi_progid("Msxml2.XMLSchemaCache"),
+ threading(both),
+ uuid(f5078f34-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache30
+{
+ [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+ uuid(88d969c2-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache40
+{
+ [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+ uuid(88d96a07-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache60
+{
+ [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+ helpstring("XML Schema Cache"),
+ progid("Msxml2.XMLSchemaCache"),
+ vi_progid("Msxml2.XMLSchemaCache"),
+ threading(both),
+ uuid(373984c9-b845-449b-91e7-45ac83036ade)
+]
+coclass XMLSchemaCache
+{
+ [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+ uuid(f5078f21-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate26
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ helpstring("XSL Template 3.0"),
+ progid("Msxml2.XSLTemplate.3.0"),
+ vi_progid("Msxml2.XSLTemplate"),
+ threading(both),
+ uuid(f5078f36-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate30
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ uuid(88d969c3-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate40
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ uuid(88d96a08-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate60
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ helpstring("XSL Template"),
+ progid("Msxml2.XSLTemplate"),
+ vi_progid("Msxml2.XSLTemplate"),
+ threading(both),
+ uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)
+]
+coclass XSLTemplate
+{
+ [default] interface IXSLTemplate;
+}
+
+/*
+ * Sax Interfaces
+ */
+[
+ object,
+ local,
+ uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)
+]
+interface ISAXAttributes : IUnknown
+{
+ HRESULT getLength(
+ [out, retval] int *length);
+
+ HRESULT getURI(
+ [in] int nIndex,
+ [out] const WCHAR **pUrl,
+ [out] int *pUriSize);
+
+ HRESULT getLocalName(
+ [in] int nIndex,
+ [out] const WCHAR **pLocalName,
+ [out] int *pLocalNameLength);
+
+ HRESULT getQName(
+ [in] int nIndex,
+ [out] const WCHAR **pQName,
+ [out] int *pQNameLength);
+
+ HRESULT getName(
+ [in] int nIndex,
+ [out] const WCHAR **pUri,
+ [out] int * pUriLength,
+ [out] const WCHAR ** pLocalName,
+ [out] int * pLocalNameSize,
+ [out] const WCHAR ** pQName,
+ [out] int * pQNameLength);
+
+ HRESULT getIndexFromName(
+ [in] const WCHAR * pUri,
+ [in] int cUriLength,
+ [in] const WCHAR * pLocalName,
+ [in] int cocalNameLength,
+ [out, retval] int * index);
+
+ HRESULT getIndexFromQName(
+ [in] const WCHAR * pQName,
+ [in] int nQNameLength,
+ [out, retval] int * index);
+
+ HRESULT getType(
+ [in] int nIndex,
+ [out] const WCHAR ** pType,
+ [out] int * pTypeLength);
+
+ HRESULT getTypeFromName(
+ [in] const WCHAR * pUri,
+ [in] int nUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [out] const WCHAR ** pType,
+ [out] int * nType);
+
+ HRESULT getTypeFromQName(
+ [in] const WCHAR * pQName,
+ [in] int nQName,
+ [out] const WCHAR ** pType,
+ [out] int * nType);
+
+ HRESULT getValue(
+ [in] int nIndex,
+ [out] const WCHAR ** pValue,
+ [out] int * nValue);
+
+ HRESULT getValueFromName(
+ [in] const WCHAR * pUri,
+ [in] int nUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [out] const WCHAR ** pValue,
+ [out] int * nValue);
+
+ HRESULT getValueFromQName(
+ [in] const WCHAR * pQName,
+ [in] int nQName,
+ [out] const WCHAR ** pValue,
+ [out] int * nValue);
+};
+
+[
+ object,
+ local,
+ uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)
+]
+interface ISAXContentHandler : IUnknown
+{
+ HRESULT putDocumentLocator(
+ [in] ISAXLocator * pLocator);
+
+ HRESULT startDocument();
+
+ HRESULT endDocument();
+
+ HRESULT startPrefixMapping(
+ [in] const WCHAR * pPrefix,
+ [in] int nPrefix,
+ [in] const WCHAR * pUri,
+ [in] int nUri);
+
+ HRESULT endPrefixMapping(
+ [in] const WCHAR * pPrefix,
+ [in] int nPrefix);
+
+ HRESULT startElement(
+ [in] const WCHAR * pNamespaceUri,
+ [in] int nNamespaceUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [in] const WCHAR * pQName,
+ [in] int nQName,
+ [in] ISAXAttributes * pAttr);
+
+ HRESULT endElement(
+ [in] const WCHAR * pNamespaceUri,
+ [in] int nNamespaceUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [in] const WCHAR * pQName,
+ [in] int nQName);
+
+ HRESULT characters(
+ [in] const WCHAR * pChars,
+ [in] int nChars);
+
+ HRESULT ignorableWhitespace(
+ [in] const WCHAR * pChars,
+ [in] int nChars);
+
+ HRESULT processingInstruction(
+ [in] const WCHAR * pTarget,
+ [in] int nTarget,
+ [in] const WCHAR * pData,
+ [in] int nData);
+
+ HRESULT skippedEntity(
+ [in] const WCHAR * pName,
+ [in] int nName);
+};
+
+[
+ object,
+ local,
+ uuid(862629ac-771a-47b2-8337-4e6843c1be90)
+]
+interface ISAXDeclHandler : IUnknown
+{
+ HRESULT elementDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pModel,
+ [in] int nModel);
+
+ HRESULT attributeDecl(
+ [in] const WCHAR * pElementName,
+ [in] int nElementName,
+ [in] const WCHAR * pAttributeName,
+ [in] int nAttributeName,
+ [in] const WCHAR * pType,
+ [in] int nType,
+ [in] const WCHAR * pValueDefault,
+ [in] int nValueDefault,
+ [in] const WCHAR * pValue,
+ [in] int nValue);
+
+ HRESULT internalEntityDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pValue,
+ [in] int nValue);
+
+ HRESULT externalEntityDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId);
+};
+
+[
+ object,
+ local,
+ uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)
+]
+interface ISAXDTDHandler : IUnknown
+{
+ HRESULT notationDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId);
+
+ HRESULT unparsedEntityDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId,
+ [in] const WCHAR * pNotationName,
+ [in] int nNotationName);
+};
+
+[
+ object,
+ local,
+ uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),
+]
+interface ISAXEntityResolver : IUnknown
+{
+ HRESULT resolveEntity(
+ [in] const WCHAR * pPublicId,
+ [in] const WCHAR * pSystemId,
+ [out, retval] VARIANT * ret);
+};
+
+[
+ object,
+ local,
+ uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)
+]
+interface ISAXErrorHandler : IUnknown
+{
+ HRESULT error(
+ [in] ISAXLocator * pLocator,
+ [in] const WCHAR * pErrorMessage,
+ [in] HRESULT hrErrorCode);
+
+ HRESULT fatalError(
+ [in] ISAXLocator * pLocator,
+ [in] const WCHAR * pErrorMessage,
+ [in] HRESULT hrErrorCode);
+
+ HRESULT ignorableWarning(
+ [in] ISAXLocator * pLocator,
+ [in] const WCHAR * pErrorMessage,
+ [in] HRESULT hrErrorCode);
+};
+
+[
+ object,
+ local,
+ uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)
+]
+interface ISAXLexicalHandler : IUnknown
+{
+ HRESULT startDTD(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId);
+
+ HRESULT endDTD();
+
+ HRESULT startEntity(
+ [in] const WCHAR * pName,
+ [in] int nName);
+
+ HRESULT endEntity(
+ [in] const WCHAR * pName,
+ [in] int nName);
+
+ HRESULT startCDATA();
+
+ HRESULT endCDATA();
+
+ HRESULT comment(
+ [in] const WCHAR * pChars,
+ [in] int nChars);
+};
+
+[
+ object,
+ local,
+ uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)
+]
+interface ISAXLocator : IUnknown
+{
+ HRESULT getColumnNumber(
+ [out, retval] int * nColumn);
+
+ HRESULT getLineNumber(
+ [out, retval] int * nLine);
+
+ HRESULT getPublicId(
+ [out, retval] const WCHAR ** publicId);
+
+ HRESULT getSystemId(
+ [out, retval] const WCHAR ** systemId);
+};
+
+[
+ local,
+ object,
+ uuid(70409222-ca09-4475-acb8-40312fe8d145)
+]
+interface ISAXXMLFilter : ISAXXMLReader
+{
+ HRESULT getParent(
+ [out, retval] ISAXXMLReader ** pReader);
+ HRESULT putParent(
+ [in] ISAXXMLReader * reader);
+};
+
+[
+local,
+object,
+uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)
+]
+interface ISAXXMLReader : IUnknown
+{
+ HRESULT getFeature(
+ [in] const WCHAR * pFeature,
+ [out, retval] VARIANT_BOOL * pValue);
+ HRESULT putFeature(
+ [in] const WCHAR * pFeature,
+ [in] VARIANT_BOOL vfValue);
+
+ HRESULT getProperty(
+ [in] const WCHAR * pProp,
+ [out, retval] VARIANT * pValue);
+ HRESULT putProperty(
+ [in] const WCHAR * pProp,
+ [in] VARIANT value);
+
+ HRESULT getEntityResolver(
+ [out, retval] ISAXEntityResolver ** ppEntityResolver);
+ HRESULT putEntityResolver(
+ [in] ISAXEntityResolver * pEntityResolver);
+
+ HRESULT getContentHandler(
+ [out, retval] ISAXContentHandler ** pContentHandler);
+ HRESULT putContentHandler(
+ [in] ISAXContentHandler * contentHandler);
+
+ HRESULT getDTDHandler(
+ [out, retval] ISAXDTDHandler ** pDTDHandler);
+ HRESULT putDTDHandler(
+ [in] ISAXDTDHandler * pDTDHandler);
+
+ HRESULT getErrorHandler(
+ [out, retval] ISAXErrorHandler ** pErrorHandler);
+ HRESULT putErrorHandler(
+ [in] ISAXErrorHandler * errorHandler);
+
+ HRESULT getBaseURL(
+ [out, retval] const WCHAR ** pBaseUrl);
+ HRESULT putBaseURL(
+ [in] const WCHAR * pBaseUrl);
+
+ HRESULT getSecureBaseURL(
+ [out, retval] const WCHAR ** pSecureBaseUrl);
+ HRESULT putSecureBaseURL(
+ [in] const WCHAR * secureBaseUrl);
+
+ HRESULT parse(
+ [in] VARIANT varInput);
+ HRESULT parseURL(
+ [in] const WCHAR * url);
+}
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)
+]
+interface IVBSAXAttributes : IDispatch
+{
+ [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]
+ HRESULT length( [out, retval] int * nLength);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETURI)]
+ HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]
+ HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]
+ HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]
+ HRESULT getIndexFromName( [in] BSTR uri,
+ [in] BSTR localName, [out, retval] int * nIndex);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]
+ HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]
+ HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]
+ HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,
+ [out, retval] BSTR * type);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]
+ HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]
+ HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]
+ HRESULT getValueFromName( [in] BSTR uri,
+ [in] BSTR localName,
+ [out, retval] BSTR * value);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]
+ HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)
+]
+interface IVBSAXContentHandler : IDispatch
+{
+ [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]
+ HRESULT documentLocator( [in] IVBSAXLocator * oLocator);
+
+ [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]
+ HRESULT startDocument();
+
+ [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]
+ HRESULT endDocument();
+
+ [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]
+ HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);
+
+ [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]
+ HRESULT endPrefixMapping( [in, out] BSTR * prefix);
+
+ [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]
+ HRESULT startElement( [in, out] BSTR * namespaceURI,
+ [in, out] BSTR * localName,
+ [in, out] BSTR * QName,
+ [in] IVBSAXAttributes * oAttributes);
+
+ [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]
+ HRESULT endElement( [in, out] BSTR * namespaceURI,
+ [in, out] BSTR * localName, [in, out] BSTR * strQName);
+
+ [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]
+ HRESULT characters( [in, out] BSTR * chars);
+
+ [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]
+ HRESULT ignorableWhitespace( [in, out] BSTR * chars);
+
+ [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]
+ HRESULT processingInstruction( [in, out] BSTR * target,
+ [in, out] BSTR * data);
+
+ [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]
+ HRESULT skippedEntity( [in, out] BSTR * name);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)
+]
+interface IVBSAXDeclHandler : IDispatch
+{
+ [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]
+ HRESULT elementDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * model);
+
+ [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]
+ HRESULT attributeDecl(
+ [in, out] BSTR * elementName,
+ [in, out] BSTR * attributeName,
+ [in, out] BSTR * type,
+ [in, out] BSTR * valueDefault,
+ [in, out] BSTR * value);
+
+ [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]
+ HRESULT internalEntityDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * value);
+
+ [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]
+ HRESULT externalEntityDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(24fb3297-302d-4620-ba39-3a732d850558)
+]
+interface IVBSAXDTDHandler : IDispatch
+{
+ [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]
+ HRESULT notationDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId);
+
+ [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]
+ HRESULT unparsedEntityDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId,
+ [in, out] BSTR * notationName);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)
+]
+interface IVBSAXEntityResolver : IDispatch
+{
+ [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]
+ HRESULT resolveEntity(
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId,
+ [out, retval] VARIANT * ret);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(d963d3fe-173c-4862-9095-b92f66995f52)
+]
+interface IVBSAXErrorHandler : IDispatch
+{
+ [id(DISPID_SAX_ERRORHANDLER_ERROR)]
+ HRESULT error(
+ [in] IVBSAXLocator * locator,
+ [in, out] BSTR * errorMessage,
+ [in] LONG errorCode);
+
+ [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]
+ HRESULT fatalError(
+ [in] IVBSAXLocator * locator,
+ [in, out] BSTR * errorMessage,
+ [in] LONG errorCode);
+
+ [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]
+ HRESULT ignorableWarning(
+ [in] IVBSAXLocator * locator,
+ [in, out] BSTR * errorMessage,
+ [in] LONG errorCode);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(032aac35-8c0e-4d9d-979f-e3b702935576)
+]
+interface IVBSAXLexicalHandler : IDispatch
+{
+ [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]
+ HRESULT startDTD(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId);
+ [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]
+ HRESULT endDTD();
+
+ [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]
+ HRESULT startEntity([in, out] BSTR * name);
+ [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]
+ HRESULT endEntity([in, out] BSTR * name);
+
+ [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]
+ HRESULT startCDATA();
+ [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]
+ HRESULT endCDATA();
+
+ [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]
+ HRESULT comment( [in, out] BSTR * chars);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)
+]
+interface IVBSAXLocator : IDispatch
+{
+ [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]
+ HRESULT columnNumber( [out, retval] int * column);
+
+ [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]
+ HRESULT lineNumber( [out, retval] int * line);
+
+ [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]
+ HRESULT publicId( [out, retval] BSTR * publicId);
+
+ [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]
+ HRESULT systemId( [out, retval] BSTR * systemId);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)
+]
+interface IVBSAXXMLFilter : IDispatch
+{
+ [propget, id(DISPID_SAX_XMLFILTER_PARENT)]
+ HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);
+ [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]
+ HRESULT parent( [in] IVBSAXXMLReader * reader);
+
+};
+
+[
+ dual,
+ oleautomation,
+ object,
+ uuid (8c033caa-6cd6-4f73-b728-4531af74945f)
+]
+interface IVBSAXXMLReader : IDispatch
+{
+ [id(DISPID_SAX_XMLREADER_GETFEATURE)]
+ HRESULT getFeature( [in] const WCHAR * pFeature,
+ [out, retval] VARIANT_BOOL * pValue);
+ [id(DISPID_SAX_XMLREADER_PUTFEATURE)]
+ HRESULT putFeature( [in] const WCHAR * pFeature,
+ [in] VARIANT_BOOL vfValue);
+
+ [id(DISPID_SAX_XMLREADER_GETPROPERTY)]
+ HRESULT getProperty( [in] const WCHAR * pProp,
+ [out, retval] VARIANT * pValue);
+ [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]
+ HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value);
+
+ [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+ HRESULT entityResolver(
+ [out, retval] IVBSAXEntityResolver ** ppEntityResolver);
+ [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+ HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);
+
+ [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+ HRESULT contentHandler(
+ [out, retval] IVBSAXContentHandler ** pContentHandler);
+ [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+ HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);
+
+ [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+ HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);
+ [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+ HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);
+
+ [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+ HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);
+ [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+ HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);
+
+ [propget, id(DISPID_SAX_XMLREADER_BASEURL)]
+ HRESULT baseURL([out, retval] const WCHAR ** pBaseUrl);
+ [propput, id(DISPID_SAX_XMLREADER_BASEURL)]
+ HRESULT baseURL([in] const WCHAR * pBaseUrl);
+
+ [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+ HRESULT secureBaseURL([out, retval] const WCHAR ** pSecureBaseUrl);
+ [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+ HRESULT secureBaseURL([in] const WCHAR * secureBaseUrl);
+
+ [id(DISPID_SAX_XMLREADER_PARSE)]
+ HRESULT parse( [in] VARIANT varInput);
+ [id(DISPID_SAX_XMLREADER_PARSEURL)]
+ HRESULT parseURL([in] const WCHAR * url);
+}
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)
+]
+interface IMXAttributes : IDispatch
+{
+ [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]
+ HRESULT addAttribute(
+ [in] BSTR uri,
+ [in] BSTR localName,
+ [in] BSTR QName,
+ [in] BSTR type,
+ [in] BSTR value);
+
+ [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]
+ HRESULT addAttributeFromIndex( [in] VARIANT atts,
+ [in] int index);
+
+ [id(DISPID_MX_ATTRIBUTES_CLEAR)]
+ HRESULT clear();
+
+ [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute( [in] int index);
+
+ [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] int index,
+ [in] BSTR uri,
+ [in] BSTR localName,
+ [in] BSTR QName,
+ [in] BSTR type,
+ [in] BSTR value);
+
+ [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]
+ HRESULT setAttributes( [in] VARIANT atts);
+
+ [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]
+ HRESULT setLocalName( [in] int index,
+ [in] BSTR localName);
+
+ [id(DISPID_MX_ATTRIBUTES_SETQNAME)]
+ HRESULT setQName(
+ [in] int index,
+ [in] BSTR QName);
+
+ [id(DISPID_MX_ATTRIBUTES_SETTYPE)]
+ HRESULT setType( [in] int index, [in] BSTR type);
+
+ [id(DISPID_MX_ATTRIBUTES_SETURI)]
+ HRESULT setURI( [in] int index, [in] BSTR uri);
+
+ [id(DISPID_MX_ATTRIBUTES_SETVALUE)]
+ HRESULT setValue([in] int index, [in] BSTR value);
+};
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)
+]
+interface IMXSchemaDeclHandler : IDispatch
+{
+ [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]
+ HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );
+}
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)
+]
+interface IMXReaderControl : IDispatch
+{
+ [id(DISPID_MX_READER_CONTROL_ABORT)]
+ HRESULT abort();
+
+ [id(DISPID_MX_READER_CONTROL_RESUME)]
+ HRESULT resume();
+
+ [id(DISPID_MX_READER_CONTROL_SUSPEND)]
+ HRESULT suspend();
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)
+]
+interface IMXWriter : IDispatch
+{
+ [propput, id(DISPID_MX_WRITER_OUTPUT)]
+ HRESULT output ( [in] VARIANT Destination);
+ [propget, id(DISPID_MX_WRITER_OUTPUT)]
+ HRESULT output ( [out, retval] VARIANT * Destination);
+
+ [propput, id(DISPID_MX_WRITER_ENCODING)]
+ HRESULT encoding ([in] BSTR encoding);
+ [propget, id(DISPID_MX_WRITER_ENCODING)]
+ HRESULT encoding ([out, retval] BSTR * encoding);
+
+ [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+ HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);
+ [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+ HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);
+
+ [propput, id(DISPID_MX_WRITER_INDENT)]
+ HRESULT indent ([in] VARIANT_BOOL indentMode);
+ [propget, id(DISPID_MX_WRITER_INDENT)]
+ HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);
+
+ [propput, id(DISPID_MX_WRITER_STANDALONE)]
+ HRESULT standalone ([in] VARIANT_BOOL value);
+ [propget, id(DISPID_MX_WRITER_STANDALONE)]
+ HRESULT standalone ([out, retval] VARIANT_BOOL * value);
+
+ [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+ HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);
+ [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+ HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);
+
+ [propput, id(DISPID_MX_WRITER_VERSION)]
+ HRESULT version ([in] BSTR version);
+ [propget, id(DISPID_MX_WRITER_VERSION)]
+ HRESULT version ([out, retval] BSTR * version);
+
+ [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+ HRESULT disableOutputEscaping([in] VARIANT_BOOL value);
+ [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+ HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);
+
+ [id(DISPID_MX_WRITER_FLUSH)]
+ HRESULT flush();
+};
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespacePrefixes : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item(
+ [in] long index,
+ [out, retval] BSTR *prefix);
+
+ [propget, id(DISPID_MX_NSMGR_LENGTH)]
+ HRESULT length( [out,retval] long *length );
+
+ [propget, restricted, hidden, id(DISPID_NEWENUM)]
+ HRESULT _newEnum( [out, retval] IUnknown **ppUnk );
+}
+
+[
+ local,
+ object,
+ hidden,
+ uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespaceManager : IUnknown
+{
+ HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);
+
+ HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);
+
+ HRESULT reset();
+
+ HRESULT pushContext();
+
+ HRESULT pushNodeContext(
+ [in] IXMLDOMNode *contextNode,
+ [in] VARIANT_BOOL fDeep);
+
+ HRESULT popContext();
+
+ HRESULT declarePrefix(
+ [in] const WCHAR *prefix,
+ [in] const WCHAR *namespaceURI);
+
+ HRESULT getDeclaredPrefix(
+ [in] long nIndex,
+ [in, out] WCHAR *pwchPrefix,
+ [in, out] int *pcchPrefix);
+
+ HRESULT getPrefix(
+ [in] const WCHAR *pwszNamespaceURI,
+ [in] long nIndex,
+ [in, out] WCHAR *pwchPrefix,
+ [in, out] int *pcchPrefix);
+
+ HRESULT getURI(
+ [in] const WCHAR *pwchPrefix,
+ [in] IXMLDOMNode* pContextNode,
+ [in, out] WCHAR *pwchUri,
+ [in, out] int *pcchUri);
+}
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IVBMXNamespaceManager : IDispatch
+{
+ [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+ HRESULT allowOverride([in] VARIANT_BOOL fOverride);
+
+ [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+ HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);
+
+ [id(DISPID_MX_NSMGR_RESET)]
+ HRESULT reset();
+
+ [id(DISPID_MX_NSMGR_PUSHCONTEXT)]
+ HRESULT pushContext();
+
+ [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]
+ HRESULT pushNodeContext(
+ [in] IXMLDOMNode* contextNode,
+ [in, defaultvalue(-1)] VARIANT_BOOL fDeep);
+
+ [id(DISPID_MX_NSMGR_POPCONTEXT)]
+ HRESULT popContext();
+
+ [id(DISPID_MX_NSMGR_DECLAREPREFIX)]
+ HRESULT declarePrefix(
+ [in] BSTR prefix,
+ [in] BSTR namespaceURI);
+
+ [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]
+ HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);
+
+ [id(DISPID_MX_NSMGR_GETPREFIXES)]
+ HRESULT getPrefixes(
+ [in] BSTR namespaceURI,
+ [out, retval] IMXNamespacePrefixes** prefixes);
+
+ [id(DISPID_MX_NSMGR_GETURI)]
+ HRESULT getURI(
+ [in] BSTR prefix,
+ [out, retval] VARIANT* uri);
+
+ [id(DISPID_MX_NSMGR_GETURIFROMNODE)]
+ HRESULT getURIFromNode(
+ [in] BSTR strPrefix,
+ [in] IXMLDOMNode* contextNode,
+ [out, retval] VARIANT* uri);
+}
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXXMLFilter : IDispatch
+{
+ [id(DISPID_MXXML_FILTER_GETFEATURE)]
+ HRESULT getFeature(
+ [in] BSTR strName,
+ [out, retval] VARIANT_BOOL * fValue);
+
+ [id(DISPID_MXXML_FILTER_PUTFEATURE)]
+ HRESULT putFeature(
+ [in] BSTR strName,
+ [in] VARIANT_BOOL fValue);
+
+ [id(DISPID_MXXML_FILTER_GETPROPERTY)]
+ HRESULT getProperty(
+ [in] BSTR strName,
+ [out, retval] VARIANT * varValue);
+
+ [id(DISPID_MXXML_FILTER_PUTPROPERTY)]
+ HRESULT putProperty(
+ [in] BSTR strName,
+ [in] VARIANT varValue);
+
+ [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]
+ HRESULT entityResolver( [out, retval] IUnknown **oResolver );
+
+ [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]
+ HRESULT entityResolver( [in] IUnknown *oResolver );
+
+ [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]
+ HRESULT contentHandler( [out, retval] IUnknown **oHandler );
+
+ [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]
+ HRESULT contentHandler( [in] IUnknown *oHandler );
+
+ [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]
+ HRESULT dtdHandler( [out, retval] IUnknown **oHandler );
+
+ [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]
+ HRESULT dtdHandler( [in] IUnknown *oHandler );
+
+ [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]
+ HRESULT errorHandler( [out, retval] IUnknown **oHandler );
+
+ [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]
+ HRESULT errorHandler( [in] IUnknown *oHandler );
+}
+
+[
+ local,
+ object,
+ uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaStringCollection : IDispatch
+{
+ [id(DISPID_VALUE), propget]
+ HRESULT item(
+ [in] long index,
+ [out,retval] BSTR* bstr);
+
+ [id(DISPID_SOM_LENGTH), propget]
+ HRESULT length(
+ [out,retval] long* length);
+
+ [id(DISPID_NEWENUM), hidden, restricted, propget]
+ HRESULT _newEnum(
+ [out,retval] IUnknown** ppunk);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaItemCollection : IDispatch
+{
+ [id(DISPID_VALUE), propget]
+ HRESULT item(
+ [in] long index,
+ [out,retval]ISchemaItem** item);
+
+ [id(DISPID_SOM_ITEMBYNAME)]
+ HRESULT itemByName(
+ [in] BSTR name,
+ [out,retval] ISchemaItem** item);
+
+ [id(DISPID_SOM_ITEMBYQNAME)]
+ HRESULT itemByQName(
+ [in] BSTR name,
+ [in] BSTR namespaceURI,
+ [out,retval] ISchemaItem** item);
+
+ [id(DISPID_SOM_LENGTH), propget]
+ HRESULT length(
+ [out,retval]long* length);
+
+ [id(DISPID_NEWENUM), hidden, restricted, propget]
+ HRESULT _newEnum(
+ [out,retval]IUnknown** ppunk);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaItem : IDispatch
+{
+ [id(DISPID_SOM_NAME), propget]
+ HRESULT name(
+ [out,retval] BSTR* name);
+
+ [id(DISPID_SOM_NAMESPACEURI), propget]
+ HRESULT namespaceURI(
+ [out,retval] BSTR* namespaceURI);
+
+ [id(DISPID_SOM_SCHEMA), propget]
+ HRESULT schema(
+ [out,retval] ISchema** schema);
+
+ [id(DISPID_SOM_ID), propget]
+ HRESULT id(
+ [out,retval] BSTR* id);
+
+ [id(DISPID_SOM_ITEMTYPE), propget]
+ HRESULT itemType(
+ [out,retval] SOMITEMTYPE* itemType);
+
+ [id(DISPID_SOM_UNHANDLEDATTRS), propget]
+ HRESULT unhandledAttributes(
+ [out,retval] IVBSAXAttributes** attributes);
+
+ [id(DISPID_SOM_WRITEANNOTATION)]
+ HRESULT writeAnnotation(
+ [in] IUnknown* annotationSink,
+ [out,retval] VARIANT_BOOL* isWritten);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchema : ISchemaItem
+{
+ [id(DISPID_SOM_TARGETNAMESPACE), propget]
+ HRESULT targetNamespace(
+ [out,retval] BSTR* targetNamespace);
+
+ [id(DISPID_SOM_VERSION), propget]
+ HRESULT version(
+ [out,retval] BSTR* version);
+
+ [id(DISPID_SOM_TYPES), propget]
+ HRESULT types(
+ [out,retval] ISchemaItemCollection** types);
+
+ [id(DISPID_SOM_ELEMENTS), propget]
+ HRESULT elements(
+ [out,retval] ISchemaItemCollection** elements);
+
+ [id(DISPID_SOM_ATTRIBUTES), propget]
+ HRESULT attributes(
+ [out,retval] ISchemaItemCollection** attributes);
+
+ [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]
+ HRESULT attributeGroups(
+ [out,retval] ISchemaItemCollection** attributeGroups);
+
+ [id(DISPID_SOM_MODELGROUPS), propget]
+ HRESULT modelGroups(
+ [out,retval] ISchemaItemCollection** modelGroups);
+
+ [id(DISPID_SOM_NOTATIONS), propget]
+ HRESULT notations(
+ [out,retval] ISchemaItemCollection** notations);
+
+ [id(DISPID_SOM_SCHEMALOCATIONS), propget]
+ HRESULT schemaLocations(
+ [out,retval] ISchemaStringCollection** schemaLocations);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaParticle : ISchemaItem
+{
+ [id(DISPID_SOM_MINOCCURS), propget]
+ HRESULT minOccurs(
+ [out,retval] VARIANT* minOccurs);
+
+ [id(DISPID_SOM_MAXOCCURS), propget]
+ HRESULT maxOccurs(
+ [out,retval] VARIANT* maxOccurs);
+};
+
+[
+ object,
+ uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaAttribute : ISchemaItem
+{
+ [id(DISPID_SOM_TYPE), propget]
+ HRESULT type(
+ [out,retval] ISchemaType** type);
+
+ [id(DISPID_SOM_SCOPE), propget]
+ HRESULT scope(
+ [out,retval] ISchemaComplexType** scope);
+
+ [id(DISPID_SOM_DEFAULTVALUE), propget]
+ HRESULT defaultValue(
+ [out,retval]BSTR* defaultValue);
+
+ [id(DISPID_SOM_FIXEDVALUE), propget]
+ HRESULT fixedValue(
+ [out,retval] BSTR* fixedValue);
+
+ [id(DISPID_SOM_USE), propget]
+ HRESULT use(
+ [out,retval] SCHEMAUSE* use);
+
+ [id(DISPID_SOM_ISREFERENCE), propget]
+ HRESULT isReference(
+ [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaElement : ISchemaParticle
+{
+ [id(DISPID_SOM_TYPE), propget]
+ HRESULT type(
+ [out,retval] ISchemaType** type);
+
+ [id(DISPID_SOM_SCOPE), propget]
+ HRESULT scope(
+ [out,retval] ISchemaComplexType** scope);
+
+ [id(DISPID_SOM_DEFAULTVALUE), propget]
+ HRESULT defaultValue(
+ [out,retval] BSTR* defaultValue);
+
+ [id(DISPID_SOM_FIXEDVALUE), propget]
+ HRESULT fixedValue(
+ [out,retval] BSTR* fixedValue);
+
+ [id(DISPID_SOM_ISNILLABLE), propget]
+ HRESULT isNillable(
+ [out,retval] VARIANT_BOOL* nillable);
+
+ [id(DISPID_SOM_IDCONSTRAINTS), propget]
+ HRESULT identityConstraints(
+ [out,retval] ISchemaItemCollection** constraints);
+
+ [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]
+ HRESULT substitutionGroup(
+ [out,retval] ISchemaElement** element);
+
+ [id(DISPID_SOM_EXCLUSIONS), propget]
+ HRESULT substitutionGroupExclusions(
+ [out,retval] SCHEMADERIVATIONMETHOD* exclusions);
+
+ [id(DISPID_SOM_DISALLOWED), propget]
+ HRESULT disallowedSubstitutions(
+ [out,retval] SCHEMADERIVATIONMETHOD* disallowed);
+
+ [id(DISPID_SOM_ISABSTRACT), propget]
+ HRESULT isAbstract(
+ [out,retval] VARIANT_BOOL* abstract);
+
+ [id(DISPID_SOM_ISREFERENCE), propget]
+ HRESULT isReference(
+ [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaType : ISchemaItem
+{
+ [id(DISPID_SOM_BASETYPES), propget]
+ HRESULT baseTypes(
+ [out,retval] ISchemaItemCollection** baseTypes);
+
+ [id(DISPID_SOM_FINAL), propget]
+ HRESULT final(
+ [out,retval] SCHEMADERIVATIONMETHOD* final);
+
+ [id(DISPID_SOM_VARIETY), propget]
+ HRESULT variety(
+ [out,retval] SCHEMATYPEVARIETY* variety);
+
+ [id(DISPID_SOM_DERIVEDBY), propget]
+ HRESULT derivedBy(
+ [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);
+
+ [id(DISPID_SOM_ISVALID)]
+ HRESULT isValid(
+ [in] BSTR data,
+ [out,retval] VARIANT_BOOL* valid);
+
+ [id(DISPID_SOM_MINEXCLUSIVE), propget]
+ HRESULT minExclusive(
+ [out,retval]BSTR* minExclusive);
+
+ [id(DISPID_SOM_MININCLUSIVE), propget]
+ HRESULT minInclusive(
+ [out,retval] BSTR* minInclusive);
+
+ [id(DISPID_SOM_MAXEXCLUSIVE), propget]
+ HRESULT maxExclusive(
+ [out,retval] BSTR* maxExclusive);
+
+ [id(DISPID_SOM_MAXINCLUSIVE), propget]
+ HRESULT maxInclusive(
+ [out,retval] BSTR* maxInclusive);
+
+ [id(DISPID_SOM_TOTALDIGITS), propget]
+ HRESULT totalDigits(
+ [out,retval] VARIANT* totalDigits);
+
+ [id(DISPID_SOM_FRACTIONDIGITS), propget]
+ HRESULT fractionDigits(
+ [out,retval] VARIANT* fractionDigits);
+
+ [id(DISPID_SOM_LENGTH), propget]
+ HRESULT length(
+ [out,retval] VARIANT* length);
+
+ [id(DISPID_SOM_MINLENGTH), propget]
+ HRESULT minLength(
+ [out,retval]VARIANT* minLength);
+
+ [id(DISPID_SOM_MAXLENGTH), propget]
+ HRESULT maxLength(
+ [out,retval]VARIANT* maxLength);
+
+ [id(DISPID_SOM_ENUMERATION), propget]
+ HRESULT enumeration(
+ [out,retval] ISchemaStringCollection** enumeration);
+
+ [id(DISPID_SOM_WHITESPACE), propget]
+ HRESULT whitespace(
+ [out,retval]SCHEMAWHITESPACE* whitespace);
+
+ [id(DISPID_SOM_PATTERNS), propget]
+ HRESULT patterns(
+ [out,retval] ISchemaStringCollection** patterns);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaComplexType : ISchemaType
+{
+ [id(DISPID_SOM_ISABSTRACT), propget]
+ HRESULT isAbstract(
+ [out,retval] VARIANT_BOOL* abstract);
+
+ [id(DISPID_SOM_ANYATTRIBUTE), propget]
+ HRESULT anyAttribute(
+ [out,retval] ISchemaAny** anyAttribute);
+
+ [id(DISPID_SOM_ATTRIBUTES), propget]
+ HRESULT attributes(
+ [out,retval] ISchemaItemCollection** attributes);
+
+ [id(DISPID_SOM_CONTENTTYPE), propget]
+ HRESULT contentType(
+ [out,retval] SCHEMACONTENTTYPE* contentType);
+
+ [id(DISPID_SOM_CONTENTMODEL), propget]
+ HRESULT contentModel(
+ [out,retval] ISchemaModelGroup** contentModel);
+
+ [id(DISPID_SOM_PROHIBITED), propget]
+ HRESULT prohibitedSubstitutions(
+ [out,retval] SCHEMADERIVATIONMETHOD* prohibited);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaAttributeGroup : ISchemaItem
+{
+ [id(DISPID_SOM_ANYATTRIBUTE), propget]
+ HRESULT anyAttribute(
+ [out,retval] ISchemaAny** anyAttribute);
+
+ [id(DISPID_SOM_ATTRIBUTES), propget]
+ HRESULT attributes(
+ [out,retval] ISchemaItemCollection** attributes);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaModelGroup : ISchemaParticle
+{
+ [id(DISPID_SOM_PARTICLES), propget]
+ HRESULT particles(
+ [out,retval] ISchemaItemCollection** particles);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaAny : ISchemaParticle
+{
+ [id(DISPID_SOM_NAMESPACES), propget]
+ HRESULT namespaces(
+ [out,retval] ISchemaStringCollection** namespaces);
+
+ [id(DISPID_SOM_PROCESSCONTENTS), propget]
+ HRESULT processContents(
+ [out,retval] SCHEMAPROCESSCONTENTS* processContents);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaIdentityConstraint : ISchemaItem
+{
+ [id(DISPID_SOM_SELECTOR), propget]
+ HRESULT selector(
+ [out,retval] BSTR* selector);
+
+ [id(DISPID_SOM_FIELDS), propget]
+ HRESULT fields(
+ [out,retval] ISchemaStringCollection** fields);
+
+ [id(DISPID_SOM_REFERENCEDKEY), propget]
+ HRESULT referencedKey(
+ [out,retval] ISchemaIdentityConstraint** key);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaNotation : ISchemaItem
+{
+ [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]
+ HRESULT systemIdentifier(
+ [out,retval] BSTR* uri);
+
+ [id(DISPID_SOM_PUBLICIDENTIFIER), propget]
+ HRESULT publicIdentifier(
+ [out,retval] BSTR* uri);
+};
+
+
+[
+ helpstring("SAX XML Reader 3.0"),
+ progid("Msxml2.SAXXMLReader.3.0"),
+ vi_progid("Msxml2.SAXXMLReader"),
+ threading(both),
+ uuid(3124c396-fb13-4836-a6ad-1317f1713688)
+]
+coclass SAXXMLReader30
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+ interface IMXReaderControl;
+};
+
+[
+ uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)
+]
+coclass SAXXMLReader40
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+}
+
+[
+ uuid(88d96a0c-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXXMLReader60
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+}
+
+[
+ helpstring("SAX XML Reader"),
+ progid("Msxml2.SAXXMLReader"),
+ vi_progid("Msxml2.SAXXMLReader"),
+ threading(both),
+ uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)
+]
+coclass SAXXMLReader
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+ interface IMXReaderControl;
+}
+
+[
+ uuid(a4c23ec3-6b70-4466-9127-550077239978)
+]
+coclass MXHTMLWriter
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXErrorHandler;
+ interface ISAXDTDHandler;
+ interface ISAXLexicalHandler;
+ interface ISAXDeclHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d)
+]
+coclass MXHTMLWriter30
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(88d969c9-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter40
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(88d96a10-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter60
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ helpstring("MXXMLWriter 3.0"),
+ progid("Msxml2.MXXMLWriter.3.0"),
+ vi_progid("Msxml2.MXXMLWriter"),
+ threading(both),
+ uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)
+]
+coclass MXXMLWriter30
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+};
+
+[
+ uuid(88d969c8-f192-11d4-a65f-0040963251e5),
+]
+coclass MXXMLWriter40
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(88d96a0f-f192-11d4-a65f-0040963251e5)
+]
+coclass MXXMLWriter60
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ helpstring("MXXMLWriter"),
+ progid("Msxml2.MXXMLWriter"),
+ vi_progid("Msxml2.MXXMLWriter"),
+ threading(both),
+ uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)
+]
+coclass MXXMLWriter
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXErrorHandler;
+ interface ISAXDTDHandler;
+ interface ISAXLexicalHandler;
+ interface ISAXDeclHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(88d969d5-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager
+{
+ [default] interface IVBMXNamespaceManager;
+ interface IMXNamespaceManager;
+}
+
+[
+ uuid(88d969d6-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager40
+{
+ [default] interface IVBMXNamespaceManager;
+ interface IMXNamespaceManager;
+}
+
+[
+ uuid(88d96a11-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager60
+{
+ [default] interface IVBMXNamespaceManager;
+ interface IMXNamespaceManager;
+}
+
+[
+ helpstring("SAXAttributes 3.0"),
+ progid("Msxml2.SAXAttributes.3.0"),
+ vi_progid("Msxml2.SAXAttributes"),
+ threading(both),
+ uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)
+]
+coclass SAXAttributes30
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+[
+ uuid(88d969ca-f192-11d4-a65f-0040963251e5),
+]
+coclass SAXAttributes40
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+[
+ uuid(88d96a0e-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXAttributes60
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+[
+ helpstring("SAXAttributes"),
+ progid("Msxml2.SAXAttributes"),
+ vi_progid("Msxml2.SAXAttributes"),
+ threading(both),
+ uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)
+]
+coclass SAXAttributes
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+/*
+ * Error Codes
+ */
+cpp_quote("#define E_XML_NOTWF 0xC00CE223")
+cpp_quote("#define E_XML_NODTD 0xC00CE224")
+cpp_quote("#define E_XML_INVALID 0xC00CE225")
+cpp_quote("#define E_XML_BUFFERTOOSMALL 0xC00CE226")
+
+} /* Library MSXML */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h
new file mode 100644
index 00000000..ead9eabf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml2did.h
@@ -0,0 +1,563 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSXML2DID_H__
+#define __MSXML2DID_H__
+
+#define DISPID_XOBJ_MIN 0x10000
+#define DISPID_XOBJ_MAX 0x1FFFF
+#define DISPID_XOBJ_BASE 0x10000
+
+#define DISPID_XMLELEMENTCOLLECTION 0x10000
+#define DISPID_XMLELEMENTCOLLECTION_LENGTH 0x10001
+#define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM
+#define DISPID_XMLELEMENTCOLLECTION_ITEM 0x10003
+
+#define DISPID_XMLDOCUMENT 0x10064
+#define DISPID_XMLDOCUMENT_ROOT 0x10065
+#define DISPID_XMLDOCUMENT_FILESIZE 0x10066
+#define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067
+#define DISPID_XMLDOCUMENT_FILEUPDATEDDATE 0x10068
+#define DISPID_XMLDOCUMENT_URL 0x10069
+#define DISPID_XMLDOCUMENT_MIMETYPE 0x1006a
+#define DISPID_XMLDOCUMENT_READYSTATE 0x1006b
+#define DISPID_XMLDOCUMENT_CREATEELEMENT 0x1006c
+#define DISPID_XMLDOCUMENT_CHARSET 0x1006d
+#define DISPID_XMLDOCUMENT_VERSION 0x1006e
+#define DISPID_XMLDOCUMENT_DOCTYPE 0x1006f
+#define DISPID_XMLDOCUMENT_DTDURL 0x10070
+#define DISPID_XMLDOCUMENT_ASYNC 0x10071
+#define DISPID_XMLDOCUMENT_CASEINSENSITIVE 0x10072
+
+#define DISPID_XMLELEMENT 0x100c8
+#define DISPID_XMLELEMENT_TAGNAME 0x100c9
+#define DISPID_XMLELEMENT_PARENT 0x100ca
+#define DISPID_XMLELEMENT_SETATTRIBUTE 0x100cb
+#define DISPID_XMLELEMENT_GETATTRIBUTE 0x100cc
+#define DISPID_XMLELEMENT_REMOVEATTRIBUTE 0x100cd
+#define DISPID_XMLELEMENT_CHILDREN 0x100ce
+#define DISPID_XMLELEMENT_TYPE 0x100cf
+#define DISPID_XMLELEMENT_TEXT 0x100d0
+#define DISPID_XMLELEMENT_ADDCHILD 0x100d1
+#define DISPID_XMLELEMENT_REMOVECHILD 0x100d2
+#define DISPID_XMLELEMENT_ATTRIBUTES 0x100d3
+
+#define DISPID_XMLNOTIFSINK 0x1012c
+#define DISPID_XMLNOTIFSINK_CHILDADDED 0x1012d
+
+#define DISPID_XMLATTRIBUTE 0x10190
+#define DISPID_XMLATTRIBUTE_NAME 0x10191
+#define DISPID_XMLATTRIBUTE_VALUE 0x10192
+
+
+#define DISPID_DOM_BASE 0x00000001
+#define DISPID_DOM_COLLECTION_BASE 0x000f4240
+#define DISPID_DOM_COLLECTION_MAX 0x002dc6bf
+
+#define DISPID_DOM_NODE 0x00000001
+#define DISPID_DOM_NODE_NODENAME 0x00000002
+#define DISPID_DOM_NODE_NODEVALUE 0x00000003
+#define DISPID_DOM_NODE_NODETYPE 0x00000004
+#define DISPID_DOM_NODE_NODETYPEENUM 0x00000005
+#define DISPID_DOM_NODE_PARENTNODE 0x00000006
+#define DISPID_DOM_NODE_CHILDNODES 0x00000007
+#define DISPID_DOM_NODE_FIRSTCHILD 0x00000008
+#define DISPID_DOM_NODE_LASTCHILD 0x00000009
+#define DISPID_DOM_NODE_PREVIOUSSIBLING 0x0000000a
+#define DISPID_DOM_NODE_NEXTSIBLING 0x0000000b
+#define DISPID_DOM_NODE_ATTRIBUTES 0x0000000c
+#define DISPID_DOM_NODE_INSERTBEFORE 0x0000000d
+#define DISPID_DOM_NODE_REPLACECHILD 0x0000000e
+#define DISPID_DOM_NODE_REMOVECHILD 0x0000000f
+#define DISPID_DOM_NODE_APPENDCHILD 0x00000010
+#define DISPID_DOM_NODE_HASCHILDNODES 0x00000011
+#define DISPID_DOM_NODE_OWNERDOC 0x00000012
+#define DISPID_DOM_NODE_CLONENODE 0x00000013
+
+#define DISPID_XMLDOM_NODE 0x00000014
+#define DISPID_XMLDOM_NODE_STRINGTYPE 0x00000015
+#define DISPID_XMLDOM_NODE_SPECIFIED 0x00000016
+#define DISPID_XMLDOM_NODE_DEFINITION 0x00000017
+#define DISPID_XMLDOM_NODE_TEXT 0x00000018
+#define DISPID_XMLDOM_NODE_NODETYPEDVALUE 0x00000019
+#define DISPID_XMLDOM_NODE_DATATYPE 0x0000001a
+#define DISPID_XMLDOM_NODE_XML 0x0000001b
+#define DISPID_XMLDOM_NODE_TRANSFORMNODE 0x0000001c
+#define DISPID_XMLDOM_NODE_SELECTNODES 0x0000001d
+#define DISPID_XMLDOM_NODE_SELECTSINGLENODE 0x0000001e
+#define DISPID_XMLDOM_NODE_PARSED 0x0000001f
+#define DISPID_XMLDOM_NODE_NAMESPACE 0x00000020
+#define DISPID_XMLDOM_NODE_PREFIX 0x00000021
+#define DISPID_XMLDOM_NODE_BASENAME 0x00000022
+#define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT 0x00000023
+#define DISPID_XMLDOM_NODE__TOP 0x00000024
+
+#define DISPID_DOM_DOCUMENT 0x00000025
+#define DISPID_DOM_DOCUMENT_DOCTYPE 0x00000026
+#define DISPID_DOM_DOCUMENT_IMPLEMENTATION 0x00000027
+#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT 0x00000028
+#define DISPID_DOM_DOCUMENT_CREATEELEMENT 0x00000029
+#define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT 0x0000002a
+#define DISPID_DOM_DOCUMENT_CREATETEXTNODE 0x0000002b
+#define DISPID_DOM_DOCUMENT_CREATECOMMENT 0x0000002c
+#define DISPID_DOM_DOCUMENT_CREATECDATASECTION 0x0000002d
+#define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 0x0000002e
+#define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE 0x0000002f
+#define DISPID_DOM_DOCUMENT_CREATEENTITY 0x00000030
+#define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE 0x00000031
+#define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME 0x00000032
+#define DISPID_DOM_DOCUMENT_TOP 0x00000033
+
+#define DISPID_XMLDOM_DOCUMENT 0x00000034
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE 0x00000035
+#define DISPID_XMLDOM_DOCUMENT_CREATENODE 0x00000036
+#define DISPID_XMLDOM_DOCUMENT_CREATENODEEX 0x00000037
+#define DISPID_XMLDOM_DOCUMENT_NODEFROMID 0x00000038
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES 0x00000039
+#define DISPID_XMLDOM_DOCUMENT_LOAD 0x0000003a
+#define DISPID_XMLDOM_DOCUMENT_PARSEERROR 0x0000003b
+#define DISPID_XMLDOM_DOCUMENT_URL 0x0000003c
+#define DISPID_XMLDOM_DOCUMENT_ASYNC 0x0000003d
+#define DISPID_XMLDOM_DOCUMENT_ABORT 0x0000003e
+#define DISPID_XMLDOM_DOCUMENT_LOADXML 0x0000003f
+#define DISPID_XMLDOM_DOCUMENT_SAVE 0x00000040
+#define DISPID_XMLDOM_DOCUMENT_VALIDATE 0x00000041
+#define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE 0x00000042
+#define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE 0x00000043
+#define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE 0x00000044
+#define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE 0x00000045
+#define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE 0x00000046
+#define DISPID_XMLDOM_DOCUMENT__TOP 0x00000047
+
+#define DISPID_DOM_NODELIST 0x00000048
+#define DISPID_DOM_NODELIST_ITEM 0x00000049
+#define DISPID_DOM_NODELIST_LENGTH 0x0000004a
+#define DISPID_XMLDOM_NODELIST 0x0000004b
+#define DISPID_XMLDOM_NODELIST_NEXTNODE 0x0000004c
+#define DISPID_XMLDOM_NODELIST_RESET 0x0000004d
+#define DISPID_XMLDOM_NODELIST_NEWENUM 0x0000004e
+#define DISPID_XMLDOM_NODELIST__TOP 0x0000004f
+
+#define DISPID_DOM_NAMEDNODEMAP 0x00000050
+#define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM 0x00000053
+#define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM 0x00000054
+#define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM 0x00000055
+#define DISPID_XMLDOM_NAMEDNODEMAP 0x00000056
+#define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM 0x00000057
+#define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM 0x00000058
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE 0x00000059
+#define DISPID_XMLDOM_NAMEDNODEMAP_RESET 0x0000005a
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM 0x0000005b
+#define DISPID_XMLDOM_NAMEDNODEMAP__TOP 0x0000005c
+
+#define DISPID_DOM_W3CWRAPPERS 0x0000005d
+
+#define DISPID_DOM_DOCUMENTFRAGMENT 0x0000005e
+#define DISPID_DOM_DOCUMENTFRAGMENT__TOP 0x0000005f
+
+#define DISPID_DOM_ELEMENT 0x00000060
+#define DISPID_DOM_ELEMENT_GETTAGNAME 0x00000061
+#define DISPID_DOM_ELEMENT_GETATTRIBUTES 0x00000062
+#define DISPID_DOM_ELEMENT_GETATTRIBUTE 0x00000063
+#define DISPID_DOM_ELEMENT_SETATTRIBUTE 0x00000064
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE 0x00000065
+#define DISPID_DOM_ELEMENT_GETATTRIBUTENODE 0x00000066
+#define DISPID_DOM_ELEMENT_SETATTRIBUTENODE 0x00000067
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE 0x00000068
+#define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME 0x00000069
+#define DISPID_DOM_ELEMENT_NORMALIZE 0x0000006a
+#define DISPID_DOM_ELEMENT__TOP 0x0000006b
+
+#define DISPID_DOM_DATA 0x0000006c
+#define DISPID_DOM_DATA_DATA 0x0000006d
+#define DISPID_DOM_DATA_LENGTH 0x0000006e
+#define DISPID_DOM_DATA_SUBSTRING 0x0000006f
+#define DISPID_DOM_DATA_APPEND 0x00000070
+#define DISPID_DOM_DATA_INSERT 0x00000071
+#define DISPID_DOM_DATA_DELETE 0x00000072
+#define DISPID_DOM_DATA_REPLACE 0x00000073
+#define DISPID_DOM_DATA__TOP 0x00000074
+
+#define DISPID_DOM_ATTRIBUTE 0x00000075
+#define DISPID_DOM_ATTRIBUTE_GETNAME 0x00000076
+#define DISPID_DOM_ATTRIBUTE_SPECIFIED 0x00000077
+#define DISPID_DOM_ATTRIBUTE_VALUE 0x00000078
+#define DISPID_DOM_ATTRIBUTE__TOP 0x00000079
+
+#define DISPID_DOM_TEXT 0x0000007a
+#define DISPID_DOM_TEXT_SPLITTEXT 0x0000007b
+#define DISPID_DOM_TEXT_JOINTEXT 0x0000007c
+#define DISPID_DOM_TEXT__TOP 0x0000007d
+
+#define DISPID_DOM_PI 0x0000007e
+#define DISPID_DOM_PI_TARGET 0x0000007f
+#define DISPID_DOM_PI_DATA 0x00000080
+#define DISPID_DOM_PI__TOP 0x00000081
+
+#define DISPID_DOM_DOCUMENTTYPE 0x00000082
+#define DISPID_DOM_DOCUMENTTYPE_NAME 0x00000083
+#define DISPID_DOM_DOCUMENTTYPE_ENTITIES 0x00000084
+#define DISPID_DOM_DOCUMENTTYPE_NOTATIONS 0x00000085
+#define DISPID_DOM_DOCUMENTTYPE__TOP 0x00000086
+
+#define DISPID_DOM_NOTATION 0x00000087
+#define DISPID_DOM_NOTATION_PUBLICID 0x00000088
+#define DISPID_DOM_NOTATION_SYSTEMID 0x00000089
+#define DISPID_DOM_NOTATION__TOP 0x0000008a
+
+#define DISPID_DOM_ENTITY 0x0000008b
+#define DISPID_DOM_ENTITY_PUBLICID 0x0000008c
+#define DISPID_DOM_ENTITY_SYSTEMID 0x0000008d
+#define DISPID_DOM_ENTITY_NOTATIONNAME 0x0000008e
+#define DISPID_DOM_ENTITY__TOP 0x0000008f
+
+#define DISPID_DOM_W3CWRAPPERS_TOP 0x0000008f
+
+#define DISPID_DOM_IMPLEMENTATION 0x00000090
+#define DISPID_DOM_IMPLEMENTATION_HASFEATURE 0x00000091
+#define DISPID_DOM_IMPLEMENTATION__TOP 0x00000092
+
+#define DISPID_DOM__TOP 0x000000af
+
+#define DISPID_DOM_ERROR 0x000000b0
+#define DISPID_DOM_ERROR_ERRORCODE 0x000000b1
+#define DISPID_DOM_ERROR_URL 0x000000b2
+#define DISPID_DOM_ERROR_REASON 0x000000b3
+#define DISPID_DOM_ERROR_SRCTEXT 0x000000b4
+#define DISPID_DOM_ERROR_LINE 0x000000b5
+#define DISPID_DOM_ERROR_LINEPOS 0x000000b6
+#define DISPID_DOM_ERROR_FILEPOS 0x000000b7
+#define DISPID_DOM_ERROR__TOP 0x000000b8
+
+#define DISPID_DOM_ERROR2 0x000000b9
+#define DISPID_DOM_ERROR2_ALLERRORS 0x000000ba
+#define DISPID_DOM_ERROR2_ERRORPARAMETERS 0x000000bb
+#define DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT 0x000000bc
+#define DISPID_DOM_ERROR2_ERRORXPATH 0x000000bd
+#define DISPID_DOM_ERROR2__TOP 0x000000be
+
+#define DISPID_DOM_ERRORCOLLECTION 0x000000bf
+#define DISPID_DOM_ERRORCOLLECTION_LENGTH 0x000000c0
+#define DISPID_DOM_ERRORCOLLECTION_NEXT 0x000000c1
+#define DISPID_DOM_ERRORCOLLECTION_RESET 0x000000c2
+#define DISPID_DOM_ERRORCOLLECTION__TOP 0x000000c3
+
+#define DISPID_XTLRUNTIME 0x000000b9
+#define DISPID_XTLRUNTIME_UNIQUEID 0x000000ba
+#define DISPID_XTLRUNTIME_DEPTH 0x000000bb
+#define DISPID_XTLRUNTIME_CHILDNUMBER 0x000000bc
+#define DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER 0x000000bd
+#define DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER 0x000000be
+#define DISPID_XTLRUNTIME_FORMATINDEX 0x000000bf
+#define DISPID_XTLRUNTIME_FORMATNUMBER 0x000000c0
+#define DISPID_XTLRUNTIME_FORMATDATE 0x000000c1
+#define DISPID_XTLRUNTIME_FORMATTIME 0x000000c2
+#define DISPID_XTLRUNTIME__TOP 0x000000c3
+
+#define DISPID_XMLDOMEVENT 0x000000c4
+#define DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE
+#define DISPID_XMLDOMEVENT_ONDATAAVAILABLE 0x000000c5
+#define DISPID_XMLDOMEVENT__TOP 0x000000c6
+
+#define DISPID_XMLDOM_DOCUMENT2 0x000000c7
+#define DISPID_XMLDOM_DOCUMENT2_NAMESPACES 0x000000c8
+#define DISPID_XMLDOM_DOCUMENT2_SCHEMAS 0x000000c9
+#define DISPID_XMLDOM_DOCUMENT2_VALIDATE 0x000000ca
+#define DISPID_XMLDOM_DOCUMENT2_SETPROPERTY 0x000000cb
+#define DISPID_XMLDOM_DOCUMENT2_GETPROPERTY 0x000000cc
+#define DISPID_XMLDOM_DOCUMENT2__TOP 0x000000cd
+
+#define DISPID_XMLDOM_DOCUMENT3 0x000000ce
+#define DISPID_XMLDOM_DOCUMENT3_VALIDATENODE 0x000000cf
+#define DISPID_XMLDOM_DOCUMENT3_IMPORTNODE 0x000000d0
+#define DISPID_XMLDOM_DOCUMENT3__TOP 0x000000d1
+
+#define DISPID_XMLDOM_SCHEMACOLLECTION 0x00000002
+#define DISPID_XMLDOM_SCHEMACOLLECTION_ADD 0x00000003
+#define DISPID_XMLDOM_SCHEMACOLLECTION_GET 0x00000004
+#define DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE 0x00000005
+#define DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH 0x00000006
+#define DISPID_XMLDOM_SCHEMACOLLECTION_NAMESPACEURI 0x00000007
+#define DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION 0x00000008
+#define DISPID_XMLDOM_SCHEMACOLLECTION__TOP 0x00000009
+
+#define DISPID_XMLDOM_SELECTION 0x0000000a
+#define DISPID_XMLDOM_SELECTION_EXPR 0x0000000b
+#define DISPID_XMLDOM_SELECTION_CONTEXT 0x0000000c
+#define DISPID_XMLDOM_SELECTION_PEEKNODE 0x0000000d
+#define DISPID_XMLDOM_SELECTION_MATCHES 0x0000000e
+#define DISPID_XMLDOM_SELECTION_REMOVENEXT 0x0000000f
+#define DISPID_XMLDOM_SELECTION_REMOVEALL 0x00000010
+#define DISPID_XMLDOM_SELECTION_CLONE 0x00000011
+#define DISPID_XMLDOM_SELECTION_GETPROPERTY 0x00000012
+#define DISPID_XMLDOM_SELECTION_SETPROPERTY 0x00000013
+#define DISPID_XMLDOM_SELECTION__TOP 0x00000014
+
+#define DISPID_XMLDOM_TEMPLATE 0x00000001
+#define DISPID_XMLDOM_TEMPLATE_STYLESHEET 0x00000002
+#define DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR 0x00000003
+#define DISPID_XMLDOM_TEMPLATE__TOP 0x00000004
+
+#define DISPID_XMLDOM_PROCESSOR 0x00000001
+#define DISPID_XMLDOM_PROCESSOR_INPUT 0x00000002
+#define DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE 0x00000003
+#define DISPID_XMLDOM_PROCESSOR_SETSTARTMODE 0x00000004
+#define DISPID_XMLDOM_PROCESSOR_STARTMODE 0x00000005
+#define DISPID_XMLDOM_PROCESSOR_STARTMODEURI 0x00000006
+#define DISPID_XMLDOM_PROCESSOR_OUTPUT 0x00000007
+#define DISPID_XMLDOM_PROCESSOR_TRANSFORM 0x00000008
+#define DISPID_XMLDOM_PROCESSOR_RESET 0x00000009
+#define DISPID_XMLDOM_PROCESSOR_READYSTATE 0x0000000a
+#define DISPID_XMLDOM_PROCESSOR_ADDPARAMETER 0x0000000b
+#define DISPID_XMLDOM_PROCESSOR_ADDOBJECT 0x0000000c
+#define DISPID_XMLDOM_PROCESSOR_STYLESHEET 0x0000000d
+#define DISPID_XMLDOM_PROCESSOR__TOP 0x0000000e
+
+#define DISPID_XMLDSO 0x10000
+#define DISPID_XMLDSO_DOCUMENT 0x10001
+#define DISPID_XMLDSO_JAVADSOCOMPATIBLE 0x10002
+
+/* SAX Defines */
+#define DISPID_SAX_XMLREADER__MIN 0x00000501
+#define DISPID_SAX_XMLREADER__MAX 0x00010000
+#define DISPID_SAX_XMLREADER__BASE DISPID_SAX_XMLREADER__MIN
+
+#define DISPID_SAX_XMLREADER 0x00000501
+#define DISPID_SAX_XMLREADER_GETFEATURE 0x00000502
+#define DISPID_SAX_XMLREADER_PUTFEATURE 0x00000503
+#define DISPID_SAX_XMLREADER_GETPROPERTY 0x00000504
+#define DISPID_SAX_XMLREADER_PUTPROPERTY 0x00000505
+#define DISPID_SAX_XMLREADER_ENTITYRESOLVER 0x00000506
+#define DISPID_SAX_XMLREADER_CONTENTHANDLER 0x00000507
+#define DISPID_SAX_XMLREADER_DTDHANDLER 0x00000508
+#define DISPID_SAX_XMLREADER_ERRORHANDLER 0x00000509
+#define DISPID_SAX_XMLREADER_BASEURL 0x0000050A
+#define DISPID_SAX_XMLREADER_SECUREBASEURL 0x0000050B
+#define DISPID_SAX_XMLREADER_PARSE 0x0000050C
+#define DISPID_SAX_XMLREADER_PARSEURL 0x0000050D
+#define DISPID_SAX_XMLREADER_PARENT 0x0000050E
+
+#define DISPID_SAX_XMLFILTER 0x00000510
+#define DISPID_SAX_XMLFILTER_GETFEATURE 0x00000511
+#define DISPID_SAX_XMLFILTER_PUTFEATURE 0x00000512
+#define DISPID_SAX_XMLFILTER_GETPROPERTY 0x00000513
+#define DISPID_SAX_XMLFILTER_PUTPROPERTY 0x00000514
+#define DISPID_SAX_XMLFILTER_ENTITYRESOLVER 0x00000515
+#define DISPID_SAX_XMLFILTER_CONTENTHANDLER 0x00000516
+#define DISPID_SAX_XMLFILTER_DTDHANDLER 0x00000517
+#define DISPID_SAX_XMLFILTER_ERRORHANDLER 0x00000518
+#define DISPID_SAX_XMLFILTER_BASEURL 0x00000519
+#define DISPID_SAX_XMLFILTER_SECUREBASEURL 0x0000051A
+#define DISPID_SAX_XMLFILTER_PARSE 0x0000051B
+#define DISPID_SAX_XMLFILTER_PARSEURL 0x0000051C
+#define DISPID_SAX_XMLFILTER_PARENT 0x0000051D
+
+#define DISPID_SAX_LOCATOR 0x00000520
+#define DISPID_SAX_LOCATOR_COLUMNNUMBER 0x00000521
+#define DISPID_SAX_LOCATOR_LINENUMBER 0x00000522
+#define DISPID_SAX_LOCATOR_PUBLICID 0x00000523
+#define DISPID_SAX_LOCATOR_SYSTEMID 0x00000524
+
+#define DISPID_SAX_ENTITYRESOLVER 0x00000526
+#define DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY 0x00000527
+
+#define DISPID_SAX_CONTENTHANDLER 0x00000529
+#define DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR 0x0000052A
+#define DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT 0x0000052B
+#define DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT 0x0000052C
+#define DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING 0x0000052D
+#define DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING 0x0000052E
+#define DISPID_SAX_CONTENTHANDLER_STARTELEMENT 0x0000052F
+#define DISPID_SAX_CONTENTHANDLER_ENDELEMENT 0x00000530
+#define DISPID_SAX_CONTENTHANDLER_CHARACTERS 0x00000531
+#define DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE 0x00000532
+#define DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION 0x00000533
+#define DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY 0x00000534
+
+#define DISPID_SAX_DTDHANDLER 0x00000536
+#define DISPID_SAX_DTDHANDLER_NOTATIONDECL 0x00000537
+#define DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL 0x00000538
+
+#define DISPID_SAX_ERRORHANDLER 0x0000053A
+#define DISPID_SAX_ERRORHANDLER_ERROR 0x0000053B
+#define DISPID_SAX_ERRORHANDLER_FATALERROR 0x0000053C
+#define DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING 0x0000053D
+
+#define DISPID_SAX_ATTRIBUTES 0x0000053F
+#define DISPID_SAX_ATTRIBUTES_LENGTH 0x00000540
+#define DISPID_SAX_ATTRIBUTES_GETURI 0x00000541
+#define DISPID_SAX_ATTRIBUTES_GETLOCALNAME 0x00000542
+#define DISPID_SAX_ATTRIBUTES_GETQNAME 0x00000543
+#define DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME 0x00000544
+#define DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME 0x00000545
+#define DISPID_SAX_ATTRIBUTES_GETTYPE 0x00000546
+#define DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME 0x00000547
+#define DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME 0x00000548
+#define DISPID_SAX_ATTRIBUTES_GETVALUE 0x00000549
+#define DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME 0x0000054A
+#define DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME 0x0000054B
+
+#define DISPID_SAX_LEXICALHANDLER 0x0000054D
+#define DISPID_SAX_LEXICALHANDLER_STARTDTD 0x0000054E
+#define DISPID_SAX_LEXICALHANDLER_ENDDTD 0x0000054F
+#define DISPID_SAX_LEXICALHANDLER_STARTENTITY 0x00000550
+#define DISPID_SAX_LEXICALHANDLER_ENDENTITY 0x00000551
+#define DISPID_SAX_LEXICALHANDLER_STARTCDATA 0x00000552
+#define DISPID_SAX_LEXICALHANDLER_ENDCDATA 0x00000553
+#define DISPID_SAX_LEXICALHANDLER_COMMENT 0x00000554
+
+#define DISPID_SAX_DECLHANDLER 0x00000556
+#define DISPID_SAX_DECLHANDLER_ELEMENTDECL 0x00000557
+#define DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL 0x00000558
+#define DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL 0x00000559
+#define DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL 0x0000055A
+
+#define DISPID_MX_ATTRIBUTES_ADDATTRIBUTE 0x0000055D
+#define DISPID_MX_ATTRIBUTES_CLEAR 0x0000055E
+#define DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE 0x0000055F
+#define DISPID_MX_ATTRIBUTES_SETATTRIBUTE 0x00000560
+#define DISPID_MX_ATTRIBUTES_SETATTRIBUTES 0x00000561
+#define DISPID_MX_ATTRIBUTES_SETLOCALNAME 0x00000562
+#define DISPID_MX_ATTRIBUTES_SETQNAME 0x00000563
+#define DISPID_MX_ATTRIBUTES_SETTYPE 0x00000564
+#define DISPID_MX_ATTRIBUTES_SETURI 0x00000565
+#define DISPID_MX_ATTRIBUTES_SETVALUE 0x00000566
+#define DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX 0x00000567
+
+#define DISPID_MX_WRITER 0x00000568
+#define DISPID_MX_WRITER_OUTPUT 0x00000569
+#define DISPID_MX_WRITER_DESTINATION 0x0000056A
+#define DISPID_MX_WRITER_ENCODING 0x0000056B
+#define DISPID_MX_WRITER_BYTEORDERMARK 0x0000056C
+#define DISPID_MX_WRITER_INDENT 0x0000056D
+#define DISPID_MX_WRITER_STANDALONE 0x0000056E
+#define DISPID_MX_WRITER_OMITXMLDECLARATION 0x0000056F
+#define DISPID_MX_WRITER_VERSION 0x00000570
+#define DISPID_MX_WRITER_DISABLEOUTPUTESCAPING 0x00000571
+#define DISPID_MX_WRITER_FLUSH 0x00000572
+#define DISPID_MX_WRITER_RESET 0x00000573
+
+#define DISPID_MX_READER_CONTROL 0x00000575
+#define DISPID_MX_READER_CONTROL_ABORT 0x00000576
+#define DISPID_MX_READER_CONTROL_RESUME 0x00000577
+#define DISPID_MX_READER_CONTROL_SUSPEND 0x00000578
+
+#define DISPID_MX_SCHEMADECLHANDLER 0x0000057a
+#define DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL 0x0000057b
+
+#define DISPID_MX_NSMGR 0x0000057d
+#define DISPID_MX_NSMGR_ALLOWOVERRIDE 0x0000057e
+#define DISPID_MX_NSMGR_RESET 0x0000057f
+#define DISPID_MX_NSMGR_PUSHCONTEXT 0x00000580
+#define DISPID_MX_NSMGR_PUSHNODECONTEXT 0x00000581
+#define DISPID_MX_NSMGR_POPCONTEXT 0x00000582
+#define DISPID_MX_NSMGR_DECLAREPREFIX 0x00000583
+#define DISPID_MX_NSMGR_GETDECLAREDPREFIXES 0x00000584
+#define DISPID_MX_NSMGR_GETPREFIXES 0x00000585
+#define DISPID_MX_NSMGR_GETURI 0x00000586
+#define DISPID_MX_NSMGR_GETURIFROMNODE 0x00000587
+#define DISPID_MX_NSMGR_LENGTH 0x00000588
+
+#define DISPID_MXXML_FILTER 0x0000058a
+#define DISPID_MXXML_FILTER_CONTENTHANDLER 0x0000058b
+#define DISPID_MXXML_FILTER_DTDHANDLER 0x0000058c
+#define DISPID_MXXML_FILTER_ENTITYRESOLVER 0x0000058d
+#define DISPID_MXXML_FILTER_ERRORHANDLER 0x0000058e
+#define DISPID_MXXML_FILTER_GETFEATURE 0x0000058f
+#define DISPID_MXXML_FILTER_GETPROPERTY 0x00000590
+#define DISPID_MXXML_FILTER_PUTFEATURE 0x00000591
+#define DISPID_MXXML_FILTER_PUTPROPERTY 0x00000592
+
+#define DISPID_SOM_VALIDATE 0x0000058b
+#define DISPID_SOM_VALIDATEONLOAD 0x0000058c
+#define DISPID_SOM_GETSCHEMA 0x0000058d
+#define DISPID_SOM_GETDECLARATION 0x0000058e
+#define DISPID_SOM_ITEMBYNAME 0x0000058f
+#define DISPID_SOM_ITEMBYQNAME 0x00000590
+#define DISPID_SOM_ANYATTRIBUTE 0x00000591
+#define DISPID_SOM_ATTRIBUTEGROUPS 0x00000592
+#define DISPID_SOM_ATTRIBUTES 0x00000593
+#define DISPID_SOM_BASETYPES 0x00000594
+#define DISPID_SOM_CONTENTMODEL 0x00000595
+#define DISPID_SOM_CONTENTTYPE 0x00000596
+#define DISPID_SOM_DEFAULTVALUE 0x00000597
+#define DISPID_SOM_DERIVEDBY 0x00000598
+#define DISPID_SOM_DISALLOWED 0x00000599
+#define DISPID_SOM_ELEMENTS 0x0000059a
+#define DISPID_SOM_ENUMERATION 0x0000059b
+#define DISPID_SOM_FIELDS 0x0000059c
+#define DISPID_SOM_FINAL 0x0000059d
+#define DISPID_SOM_FIXEDVALUE 0x0000059e
+#define DISPID_SOM_FRACTIONDIGITS 0x0000059f
+#define DISPID_SOM_ID 0x000005a0
+#define DISPID_SOM_IDCONSTRAINTS 0x000005a1
+#define DISPID_SOM_ISABSTRACT 0x000005a2
+#define DISPID_SOM_ISNILLABLE 0x000005a3
+#define DISPID_SOM_ISREFERENCE 0x000005a4
+#define DISPID_SOM_ISVALID 0x000005a5
+#define DISPID_SOM_ITEMTYPE 0x000005a6
+#define DISPID_SOM_LENGTH 0x000005a7
+#define DISPID_SOM_MAXEXCLUSIVE 0x000005a8
+#define DISPID_SOM_MAXINCLUSIVE 0x000005a9
+#define DISPID_SOM_MAXLENGTH 0x000005aa
+#define DISPID_SOM_MAXOCCURS 0x000005ab
+#define DISPID_SOM_MINEXCLUSIVE 0x000005ac
+#define DISPID_SOM_MININCLUSIVE 0x000005ad
+#define DISPID_SOM_MINLENGTH 0x000005ae
+#define DISPID_SOM_MINOCCURS 0x000005af
+#define DISPID_SOM_MODELGROUPS 0x000005b0
+#define DISPID_SOM_NAME 0x000005b1
+#define DISPID_SOM_NAMESPACES 0x000005b2
+#define DISPID_SOM_NAMESPACEURI 0x000005b3
+#define DISPID_SOM_NOTATIONS 0x000005b4
+#define DISPID_SOM_PARTICLES 0x000005b5
+#define DISPID_SOM_PATTERNS 0x000005b6
+#define DISPID_SOM_PROCESSCONTENTS 0x000005b7
+#define DISPID_SOM_PROHIBITED 0x000005b8
+#define DISPID_SOM_PUBLICIDENTIFIER 0x000005b9
+#define DISPID_SOM_REFERENCEDKEY 0x000005ba
+#define DISPID_SOM_SCHEMA 0x000005bb
+#define DISPID_SOM_SCHEMALOCATIONS 0x000005bc
+#define DISPID_SOM_SCOPE 0x000005bd
+#define DISPID_SOM_SELECTOR 0x000005be
+#define DISPID_SOM_SUBSTITUTIONGROUP 0x000005bf
+#define DISPID_SOM_EXCLUSIONS 0x000005c0
+#define DISPID_SOM_SYSTEMIDENTIFIER 0x000005c1
+#define DISPID_SOM_TARGETNAMESPACE 0x000005c2
+#define DISPID_SOM_TOTALDIGITS 0x000005c3
+#define DISPID_SOM_TYPE 0x000005c4
+#define DISPID_SOM_TYPES 0x000005c5
+#define DISPID_SOM_UNHANDLEDATTRS 0x000005c6
+#define DISPID_SOM_USE 0x000005c7
+#define DISPID_SOM_VARIETY 0x000005c8
+#define DISPID_SOM_VERSION 0x000005c9
+#define DISPID_SOM_WHITESPACE 0x000005ca
+#define DISPID_SOM_WRITEANNOTATION 0x000005cb
+
+
+#endif /* __MSXML2DID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl
new file mode 100644
index 00000000..736ef76e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6.idl
@@ -0,0 +1,3431 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ * Copyright (C) 2008 Alistair Leslie-Hughes
+ * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <msxml6did.h>
+#include <idispids.h>
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ uuid(f5078f18-c551-11d3-89b9-0000f81fe221),
+ version(6.0),
+ helpstring("Microsoft XML, v6.0")
+]
+library MSXML2
+{
+
+importlib("stdole2.tlb");
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMSchemaCollection;
+interface IXMLDOMDocument2;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+interface IXMLDOMParseErrorCollection;
+interface IXTLRuntime;
+interface IXSLTemplate;
+interface IXSLProcessor;
+
+/* SAX Interfaces */
+interface ISAXAttributes;
+interface ISAXContentHandler;
+interface ISAXDeclHandler;
+interface ISAXDTDHandler;
+interface ISAXEntityResolver;
+interface ISAXErrorHandler;
+interface ISAXLexicalHandler;
+interface ISAXLocator;
+interface ISAXXMLFilter;
+interface ISAXXMLReader;
+
+interface IVBSAXAttributes;
+interface IVBSAXContentHandler;
+interface IVBSAXDeclHandler;
+interface IVBSAXDTDHandler;
+interface IVBSAXEntityResolver;
+interface IVBSAXErrorHandler;
+interface IVBSAXLexicalHandler;
+interface IVBSAXLocator;
+interface IVBSAXXMLFilter;
+interface IVBSAXXMLReader;
+
+interface IMXAttributes;
+interface IMXReaderControl;
+interface IMXWriter;
+
+interface IXMLDOMSchemaCollection2;
+interface ISchemaStringCollection;
+interface ISchemaItemCollection;
+interface ISchemaItem;
+interface ISchema;
+interface ISchemaParticle;
+interface ISchemaAttribute;
+interface ISchemaElement;
+interface ISchemaType;
+interface ISchemaComplexType;
+interface ISchemaAttributeGroup;
+interface ISchemaModelGroup;
+interface ISchemaAny;
+interface ISchemaIdentityConstraint;
+interface ISchemaNotation;
+
+
+cpp_quote("#define DOMDocument DOMDocument2")
+cpp_quote("#define CLSID_DOMDocument CLSID_DOMDocument2")
+
+cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
+cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
+typedef enum tagDOMNodeType
+{
+ NODE_INVALID = 0,
+ NODE_ELEMENT = 1,
+ NODE_ATTRIBUTE = 2,
+ NODE_TEXT = 3,
+ NODE_CDATA_SECTION = 4,
+ NODE_ENTITY_REFERENCE = 5,
+ NODE_ENTITY = 6,
+ NODE_PROCESSING_INSTRUCTION = 7,
+ NODE_COMMENT = 8,
+ NODE_DOCUMENT = 9,
+ NODE_DOCUMENT_TYPE = 10,
+ NODE_DOCUMENT_FRAGMENT = 11,
+ NODE_NOTATION = 12
+} DOMNodeType;
+cpp_quote("#endif")
+
+typedef enum _SOMITEMTYPE
+{
+ SOMITEM_SCHEMA = 0x1000,
+ SOMITEM_ATTRIBUTE = 0x1001,
+ SOMITEM_ATTRIBUTEGROUP = 0x1002,
+ SOMITEM_NOTATION = 0x1003,
+ SOMITEM_IDENTITYCONSTRAINT = 0x1100,
+ SOMITEM_KEY = 0x1101,
+ SOMITEM_KEYREF = 0x1102,
+ SOMITEM_UNIQUE = 0x1103,
+ SOMITEM_ANYTYPE = 0x2000,
+ SOMITEM_DATATYPE = 0x2100,
+ SOMITEM_DATATYPE_ANYTYPE = 0x2101,
+ SOMITEM_DATATYPE_ANYURI = 0x2102,
+ SOMITEM_DATATYPE_BASE64BINARY = 0x2103,
+ SOMITEM_DATATYPE_BOOLEAN = 0x2104,
+ SOMITEM_DATATYPE_BYTE = 0x2105,
+ SOMITEM_DATATYPE_DATE = 0x2106,
+ SOMITEM_DATATYPE_DATETIME = 0x2107,
+ SOMITEM_DATATYPE_DAY = 0x2108,
+ SOMITEM_DATATYPE_DECIMAL = 0x2109,
+ SOMITEM_DATATYPE_DOUBLE = 0x210A,
+ SOMITEM_DATATYPE_DURATION = 0x210B,
+ SOMITEM_DATATYPE_ENTITIES = 0x210C,
+ SOMITEM_DATATYPE_ENTITY = 0x210D,
+ SOMITEM_DATATYPE_FLOAT = 0x210E,
+ SOMITEM_DATATYPE_HEXBINARY = 0x210F,
+ SOMITEM_DATATYPE_ID = 0x2110,
+ SOMITEM_DATATYPE_IDREF = 0x2111,
+ SOMITEM_DATATYPE_IDREFS = 0x2112,
+ SOMITEM_DATATYPE_INT = 0x2113,
+ SOMITEM_DATATYPE_INTEGER = 0x2114,
+ SOMITEM_DATATYPE_LANGUAGE = 0x2115,
+ SOMITEM_DATATYPE_LONG = 0x2116,
+ SOMITEM_DATATYPE_MONTH = 0x2117,
+ SOMITEM_DATATYPE_MONTHDAY = 0x2118,
+ SOMITEM_DATATYPE_NAME = 0x2119,
+ SOMITEM_DATATYPE_NCNAME = 0x211A,
+ SOMITEM_DATATYPE_NEGATIVEINTEGER = 0x211B,
+ SOMITEM_DATATYPE_NMTOKEN = 0x211C,
+ SOMITEM_DATATYPE_NMTOKENS = 0x211D,
+ SOMITEM_DATATYPE_NONNEGATIVEINTEGER = 0x211E,
+ SOMITEM_DATATYPE_NONPOSITIVEINTEGER = 0x211F,
+ SOMITEM_DATATYPE_NORMALIZEDSTRING = 0x2120,
+ SOMITEM_DATATYPE_NOTATION = 0x2121,
+ SOMITEM_DATATYPE_POSITIVEINTEGER = 0x2122,
+ SOMITEM_DATATYPE_QNAME = 0x2123,
+ SOMITEM_DATATYPE_SHORT = 0x2124,
+ SOMITEM_DATATYPE_STRING = 0x2125,
+ SOMITEM_DATATYPE_TIME = 0x2126,
+ SOMITEM_DATATYPE_TOKEN = 0x2127,
+ SOMITEM_DATATYPE_UNSIGNEDBYTE = 0x2128,
+ SOMITEM_DATATYPE_UNSIGNEDINT = 0x2129,
+ SOMITEM_DATATYPE_UNSIGNEDLONG = 0x212A,
+ SOMITEM_DATATYPE_UNSIGNEDSHORT = 0x212B,
+ SOMITEM_DATATYPE_YEAR = 0x212C,
+ SOMITEM_DATATYPE_YEARMONTH = 0x212D,
+ SOMITEM_DATATYPE_ANYSIMPLETYPE = 0x21FF,
+ SOMITEM_SIMPLETYPE = 0x2200,
+ SOMITEM_COMPLEXTYPE = 0x2400,
+ SOMITEM_PARTICLE = 0x4000,
+ SOMITEM_ANY = 0x4001,
+ SOMITEM_ANYATTRIBUTE = 0x4002,
+ SOMITEM_ELEMENT = 0x4003,
+ SOMITEM_GROUP = 0x4100,
+ SOMITEM_ALL = 0x4101,
+ SOMITEM_CHOICE = 0x4102,
+ SOMITEM_SEQUENCE = 0x4103,
+ SOMITEM_EMPTYPARTICLE = 0x4104,
+ SOMITEM_NULL = 0x0800,
+ SOMITEM_NULL_TYPE = 0x2800,
+ SOMITEM_NULL_ANY = 0x4801,
+ SOMITEM_NULL_ANYATTRIBUTE = 0x4802,
+ SOMITEM_NULL_ELEMENT = 0x4803,
+} SOMITEMTYPE;
+
+typedef enum _SCHEMAUSE
+{
+ SCHEMAUSE_OPTIONAL,
+ SCHEMAUSE_PROHIBITED,
+ SCHEMAUSE_REQUIRED,
+} SCHEMAUSE;
+
+typedef enum _SCHEMADERIVATIONMETHOD
+{
+ SCHEMADERIVATIONMETHOD_EMPTY = 0x0000,
+ SCHEMADERIVATIONMETHOD_SUBSTITUTION = 0x0001,
+ SCHEMADERIVATIONMETHOD_EXTENSION = 0x0002,
+ SCHEMADERIVATIONMETHOD_RESTRICTION = 0x0004,
+ SCHEMADERIVATIONMETHOD_LIST = 0x0008,
+ SCHEMADERIVATIONMETHOD_UNION = 0x0010,
+ SCHEMADERIVATIONMETHOD_ALL = 0x00FF,
+ SCHEMADERIVATIONMETHOD_NONE = 0x0100,
+} SCHEMADERIVATIONMETHOD;
+
+typedef enum _SCHEMACONTENTTYPE
+{
+ SCHEMACONTENTTYPE_EMPTY,
+ SCHEMACONTENTTYPE_TEXTONLY,
+ SCHEMACONTENTTYPE_ELEMENTONLY,
+ SCHEMACONTENTTYPE_MIXED,
+} SCHEMACONTENTTYPE;
+
+typedef enum _SCHEMAPROCESSCONTENTS
+{
+ SCHEMAPROCESSCONTENTS_NONE,
+ SCHEMAPROCESSCONTENTS_SKIP,
+ SCHEMAPROCESSCONTENTS_LAX,
+ SCHEMAPROCESSCONTENTS_STRICT,
+} SCHEMAPROCESSCONTENTS;
+
+typedef enum _SCHEMAWHITESPACE
+{
+ SCHEMAWHITESPACE_NONE = -1,
+ SCHEMAWHITESPACE_PRESERVE = 0,
+ SCHEMAWHITESPACE_REPLACE = 1,
+ SCHEMAWHITESPACE_COLLAPSE = 2,
+} SCHEMAWHITESPACE;
+
+
+typedef enum _SCHEMATYPEVARIETY
+{
+ SCHEMATYPEVARIETY_NONE = -1,
+ SCHEMATYPEVARIETY_ATOMIC = 0,
+ SCHEMATYPEVARIETY_LIST = 1,
+ SCHEMATYPEVARIETY_UNION = 2,
+} SCHEMATYPEVARIETY;
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF80-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNode : IDispatch
+{
+ [propget, id(DISPID_DOM_NODE_NODENAME)]
+ HRESULT nodeName([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+ HRESULT nodeValue([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+ HRESULT nodeValue([in] VARIANT var1);
+
+ [propget, id(DISPID_DOM_NODE_NODETYPE)]
+ HRESULT nodeType([retval, out] DOMNodeType *domNodeType);
+
+ [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+ HRESULT parentNode([retval, out] IXMLDOMNode **parent);
+
+ [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+ HRESULT childNodes([retval, out] IXMLDOMNodeList **outList);
+
+ [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+ HRESULT firstChild([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+ HRESULT lastChild([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+ HRESULT previousSibling([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+ HRESULT nextSibling([retval, out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+ HRESULT attributes([retval, out] IXMLDOMNamedNodeMap **attributeMap);
+
+ [id(DISPID_DOM_NODE_INSERTBEFORE)]
+ HRESULT insertBefore(
+ [in] IXMLDOMNode *newNode,
+ [in] VARIANT var1,
+ [retval, out] IXMLDOMNode **outOldNode);
+
+ [id(DISPID_DOM_NODE_REPLACECHILD)]
+ HRESULT replaceChild(
+ [in] IXMLDOMNode *newNode,
+ [in] IXMLDOMNode *oldNode,
+ [retval, out] IXMLDOMNode **outOldNode);
+
+ [id(DISPID_DOM_NODE_REMOVECHILD)]
+ HRESULT removeChild(
+ [in] IXMLDOMNode *domNode,
+ [retval, out] IXMLDOMNode **oldNode);
+
+ [id(DISPID_DOM_NODE_APPENDCHILD)]
+ HRESULT appendChild(
+ [in] IXMLDOMNode *newNode,
+ [retval, out] IXMLDOMNode **outNewNode);
+
+ [id(DISPID_DOM_NODE_HASCHILDNODES)]
+ HRESULT hasChildNodes(
+ [retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+ HRESULT ownerDocument([retval, out] IXMLDOMDocument **domDocument);
+
+ [id(DISPID_DOM_NODE_CLONENODE)]
+ HRESULT cloneNode(
+ [in] VARIANT_BOOL pbool,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+ HRESULT nodeTypeString([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+ HRESULT text([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+ HRESULT text([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+ HRESULT specified([retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+ HRESULT definition([retval,out] IXMLDOMNode **domNode);
+
+ [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+ HRESULT nodeTypedValue([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+ HRESULT nodeTypedValue([in] VARIANT var1);
+
+ [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+ HRESULT dataType([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+ HRESULT dataType([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOM_NODE_XML)]
+ HRESULT xml([retval, out] BSTR *p);
+
+ [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+ HRESULT transformNode(
+ [in] IXMLDOMNode *domNode,
+ [retval, out] BSTR *p);
+
+ [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+ HRESULT selectNodes(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNodeList **outList);
+
+ [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+ HRESULT selectSingleNode(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [propget,id(DISPID_XMLDOM_NODE_PARSED)]
+ HRESULT parsed([retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+ HRESULT namespaceURI([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+ HRESULT prefix([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+ HRESULT baseName([retval, out] BSTR *p);
+
+ [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+ HRESULT transformNodeToObject(
+ [in] IXMLDOMNode *domNode,
+ [in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF81-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+ HRESULT doctype([retval, out] IXMLDOMDocumentType **docType);
+
+ [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+ HRESULT implementation([retval, out] IXMLDOMImplementation **impl);
+
+ [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+ HRESULT documentElement([retval, out] IXMLDOMElement **domElement);
+
+ [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+ HRESULT documentElement([in] IXMLDOMElement *domElement);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+ HRESULT createElement(
+ [in] BSTR p,
+ [retval, out] IXMLDOMElement **domElement);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+ HRESULT createDocumentFragment(
+ [retval, out] IXMLDOMDocumentFragment **docFrag);
+
+ [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+ HRESULT createTextNode(
+ [in] BSTR p,
+ [retval, out] IXMLDOMText **text);
+
+ [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+ HRESULT createComment(
+ [in] BSTR p,
+ [retval, out] IXMLDOMComment **comment);
+
+ [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+ HRESULT createCDATASection(
+ [in] BSTR p,
+ [retval, out] IXMLDOMCDATASection **cdata);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+ HRESULT createProcessingInstruction(
+ [in] BSTR target,
+ [in] BSTR data,
+ [retval, out] IXMLDOMProcessingInstruction **pi);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+ HRESULT createAttribute(
+ [in] BSTR p,
+ [retval, out] IXMLDOMAttribute **attribute);
+
+ [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+ HRESULT createEntityReference(
+ [in] BSTR p,
+ [retval, out] IXMLDOMEntityReference **entityRef);
+
+ [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNodeList **resultList);
+
+ [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+ HRESULT createNode(
+ [in] VARIANT var,
+ [in] BSTR name,
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+ HRESULT nodeFromID(
+ [in] BSTR id,
+ [retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+ HRESULT load(
+ [in] VARIANT var1,
+ [retval, out] VARIANT_BOOL *pbool);
+
+ [propget, id(DISPID_READYSTATE)]
+ HRESULT readyState([retval, out] LONG *value);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+ HRESULT parseError([retval, out] IXMLDOMParseError **err);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+ HRESULT url([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+ HRESULT async([retval, out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+ HRESULT async([in] VARIANT_BOOL pbool);
+
+ [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+ HRESULT abort();
+
+ [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+ HRESULT loadXML(
+ [in] BSTR p,
+ [out, retval] VARIANT_BOOL *pbool);
+
+ [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+ HRESULT save(
+ [in] VARIANT var1);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+ HRESULT validateOnParse([retval, out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+ HRESULT validateOnParse([in] VARIANT_BOOL pbool);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+ HRESULT resolveExternals([retval,out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+ HRESULT resolveExternals([in] VARIANT_BOOL pbool);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+ HRESULT preserveWhiteSpace([retval,out] VARIANT_BOOL *pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+ HRESULT preserveWhiteSpace([in] VARIANT_BOOL pbool);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange([in] VARIANT var1);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable([in] VARIANT var1);
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+ HRESULT ontransformnode([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (373984c8-b845-449b-91e7-45ac83036ade)
+]
+interface IXMLDOMSchemaCollection : IDispatch
+{
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADD)]
+ HRESULT add(
+ [in] BSTR uri,
+ [in] VARIANT var);
+
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_GET)]
+ HRESULT get(
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_REMOVE)]
+ HRESULT remove(
+ [in] BSTR uri);
+
+ [propget, id(DISPID_XMLDOM_SCHEMACOLLECTION_LENGTH)]
+ HRESULT length(
+ [retval, out] LONG *length);
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT namespaceURI([in] LONG index, [out, retval] BSTR *len);
+
+ [id(DISPID_XMLDOM_SCHEMACOLLECTION_ADDCOLLECTION)]
+ HRESULT addCollection(
+ [in] IXMLDOMSchemaCollection *otherCollection);
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(50ea08b0-dd1b-4664-9a50-c2f40f4bd79a),
+]
+interface IXMLDOMSchemaCollection2 : IXMLDOMSchemaCollection
+{
+ [id(DISPID_SOM_VALIDATE)]
+ HRESULT validate();
+
+ [propput, id(DISPID_SOM_VALIDATEONLOAD)]
+ HRESULT validateOnLoad(
+ [in] VARIANT_BOOL validateOnLoad);
+
+ [propget, id(DISPID_SOM_VALIDATEONLOAD)]
+ HRESULT validateOnLoad(
+ [out,retval] VARIANT_BOOL* validateOnLoad);
+
+ [id(DISPID_SOM_GETSCHEMA)]
+ HRESULT getSchema(
+ [in] BSTR namespaceURI,
+ [out,retval] ISchema** schema);
+
+ [id(DISPID_SOM_GETDECLARATION)]
+ HRESULT getDeclaration(
+ [in] IXMLDOMNode* node,
+ [out,retval]ISchemaItem** item);
+};
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF95-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocument2 : IXMLDOMDocument
+{
+ [propget, id(DISPID_XMLDOM_DOCUMENT2_NAMESPACES)]
+ HRESULT namespaces([retval, out] IXMLDOMSchemaCollection **schemaCollection);
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+ HRESULT schemas([retval, out] VARIANT *var1);
+
+ [propputref, id(DISPID_XMLDOM_DOCUMENT2_SCHEMAS)]
+ HRESULT schemas([in] VARIANT var1);
+
+ [id(DISPID_XMLDOM_DOCUMENT2_VALIDATE)]
+ HRESULT validate(
+ [retval, out] IXMLDOMParseError **err);
+
+ [id(DISPID_XMLDOM_DOCUMENT2_SETPROPERTY)]
+ HRESULT setProperty(
+ [in] BSTR p,
+ [in] VARIANT var);
+
+ [id(DISPID_XMLDOM_DOCUMENT2_GETPROPERTY)]
+ HRESULT getProperty(
+ [in] BSTR p,
+ [retval, out] VARIANT *var);
+}
+
+[
+ local,
+ object,
+ dual,
+ uuid(2933bf96-7b36-11d2-b20e-00c04f983e60),
+ oleautomation,
+]
+interface IXMLDOMDocument3 : IXMLDOMDocument2
+{
+ [id(DISPID_XMLDOM_DOCUMENT3_VALIDATENODE)]
+ HRESULT validateNode(
+ [in] IXMLDOMNode *node,
+ [out, retval] IXMLDOMParseError **error);
+
+ [id(DISPID_XMLDOM_DOCUMENT3_IMPORTNODE)]
+ HRESULT importNode(
+ [in] IXMLDOMNode *node,
+ [in] VARIANT_BOOL deep,
+ [out, retval] IXMLDOMNode **clone);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF82-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+ HRESULT length([retval, out] LONG *lLength);
+
+ [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+ HRESULT nextNode(
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NODELIST_RESET)]
+ HRESULT reset();
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (AA634FC7-5888-44a7-A257-3A47150D3A0E)
+]
+interface IXMLDOMSelection : IXMLDOMNodeList
+{
+ [propget, id(DISPID_XMLDOM_SELECTION_EXPR)]
+ HRESULT expr([retval, out] BSTR *p);
+
+ [propput, id(DISPID_XMLDOM_SELECTION_EXPR)]
+ HRESULT expr([in] BSTR p);
+
+ [propget, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+ HRESULT context([retval, out] IXMLDOMNode **ppNode);
+
+ [propputref, id(DISPID_XMLDOM_SELECTION_CONTEXT)]
+ HRESULT context([in] IXMLDOMNode * pNode);
+
+ [id(DISPID_XMLDOM_SELECTION_PEEKNODE)]
+ HRESULT peekNode(
+ [retval, out] IXMLDOMNode **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_MATCHES)]
+ HRESULT matches(
+ [in] IXMLDOMNode *pNode,
+ [retval, out] IXMLDOMNode **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_REMOVENEXT)]
+ HRESULT removeNext(
+ [retval, out] IXMLDOMNode **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_REMOVEALL)]
+ HRESULT removeAll();
+
+ [id(DISPID_XMLDOM_SELECTION_CLONE)]
+ HRESULT clone(
+ [retval, out] IXMLDOMSelection **ppNode);
+
+ [id(DISPID_XMLDOM_SELECTION_GETPROPERTY)]
+ HRESULT getProperty(
+ [in] BSTR p,
+ [retval, out] VARIANT * var);
+
+ [id(DISPID_XMLDOM_SELECTION_SETPROPERTY)]
+ HRESULT setProperty(
+ [in] BSTR p,
+ [in] VARIANT var);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF83-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+ [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+ HRESULT getNamedItem(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+ HRESULT setNamedItem(
+ [in] IXMLDOMNode *newNode,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+ HRESULT removeNamedItem(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT item([in] LONG lIndex, [retval, out] IXMLDOMNode **outNode);
+
+ [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+ HRESULT length([retval, out] LONG *lLength);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+ HRESULT getQualifiedItem(
+ [in] BSTR name,
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+ HRESULT removeQualifiedItem(
+ [in] BSTR name,
+ [in] BSTR uri,
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+ HRESULT nextNode(
+ [retval, out] IXMLDOMNode **outNode);
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+ HRESULT reset();
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _newEnum([retval, out] IUnknown **ppUnk);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa413-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF84-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DATA_DATA)]
+ HRESULT data([retval, out] BSTR *p);
+
+ [propput, id(DISPID_DOM_DATA_DATA)]
+ HRESULT data([in] BSTR data);
+
+ [propget, id(DISPID_DOM_DATA_LENGTH)]
+ HRESULT length([retval, out] LONG *len);
+
+ [id(DISPID_DOM_DATA_SUBSTRING)]
+ HRESULT substringData(
+ [in] LONG offset,
+ [in] LONG count,
+ [retval, out] BSTR *p);
+
+ [id(DISPID_DOM_DATA_APPEND)]
+ HRESULT appendData(
+ [in] BSTR p);
+
+ [id(DISPID_DOM_DATA_INSERT)]
+ HRESULT insertData(
+ [in] LONG offset,
+ [in] BSTR p);
+
+ [id(DISPID_DOM_DATA_DELETE)]
+ HRESULT deleteData(
+ [in] LONG offset,
+ [in] LONG count);
+
+ [id(DISPID_DOM_DATA_REPLACE)]
+ HRESULT replaceData(
+ [in] LONG offset,
+ [in] LONG count,
+ [in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF85-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMAttribute : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+ HRESULT value([retval, out] VARIANT *var1);
+
+ [propput, id(DISPID_DOM_ATTRIBUTE_VALUE)]
+ HRESULT value([in] VARIANT var1);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF86-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMElement : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+ HRESULT tagName([retval, out] BSTR *p);
+
+ [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute(
+ [in] BSTR p,
+ [retval, out] VARIANT *var);
+
+ [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] BSTR p,
+ [in] VARIANT var);
+
+ [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute(
+ [in] BSTR p);
+
+ [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+ HRESULT getAttributeNode(
+ [in] BSTR p,
+ [retval, out] IXMLDOMAttribute **attributeNode);
+
+ [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+ HRESULT setAttributeNode(
+ [in] IXMLDOMAttribute *domAttribute,
+ [retval, out] IXMLDOMAttribute **attributeNode);
+
+ [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+ HRESULT removeAttributeNode(
+ [in] IXMLDOMAttribute *domAttribute,
+ [retval, out] IXMLDOMAttribute **attributeNode);
+
+ [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName(
+ [in] BSTR p,
+ [retval, out] IXMLDOMNodeList **resultList);
+
+ [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+ HRESULT normalize();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF87-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMText : IXMLDOMCharacterData
+{
+ [id(DISPID_DOM_TEXT_SPLITTEXT)]
+ HRESULT splitText(
+ [in] LONG offset,
+ [retval, out] IXMLDOMText **txtNode);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF88-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF89-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_PI_TARGET)]
+ HRESULT target([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_PI_DATA)]
+ HRESULT data([retval, out] BSTR *p);
+
+ [propput, id(DISPID_DOM_PI_DATA)]
+ HRESULT data([in] BSTR p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8A-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMCDATASection : IXMLDOMText
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8B-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+ HRESULT name([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+ HRESULT entities([retval, out] IXMLDOMNamedNodeMap **entityMap);
+
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+ HRESULT notations([retval, out] IXMLDOMNamedNodeMap **notationMap);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8C-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMNotation : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+ HRESULT publicId([retval, out] VARIANT *id);
+
+ [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+ HRESULT systemId([retval, out] VARIANT *id);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8D-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntity : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+ HRESULT publicId([retval, out] VARIANT *id1);
+
+ [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+ HRESULT systemId([retval, out] VARIANT *id1);
+
+ [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+ HRESULT notationName([retval, out] BSTR *p);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8E-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF8F-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+ [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+ HRESULT hasFeature(
+ [in] BSTR feature,
+ [in] BSTR version,
+ [retval, out] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa425-272f-11d2-836f-0000f87a7782)
+]
+interface IXTLRuntime : IXMLDOMNode
+{
+ [id(DISPID_XTLRUNTIME_UNIQUEID)]
+ HRESULT uniqueID(
+ [in]IXMLDOMNode *pNode,
+ [retval, out]LONG *pID);
+
+ [id(DISPID_XTLRUNTIME_DEPTH)]
+ HRESULT depth(
+ [in] IXMLDOMNode *pNode,
+ [retval, out]LONG * pDepth);
+
+ [id(DISPID_XTLRUNTIME_CHILDNUMBER)]
+ HRESULT childNumber(
+ [in]IXMLDOMNode *pNode,
+ [retval, out] LONG *pNumber);
+
+ [id(DISPID_XTLRUNTIME_ANCESTORCHILDNUMBER)]
+ HRESULT ancestorChildNumber(
+ [in]BSTR bstr,
+ [in]IXMLDOMNode *pNode,
+ [retval, out]LONG *pNumber);
+
+ [id(DISPID_XTLRUNTIME_ABSOLUTECHILDNUMBER)]
+ HRESULT absoluteChildNumber(
+ [in]IXMLDOMNode *pNode,
+ [retval, out]LONG *pNumber);
+
+ [id(DISPID_XTLRUNTIME_FORMATINDEX)]
+ HRESULT formatIndex(
+ [in] LONG lIndex,
+ [in] BSTR bstr,
+ [retval, out]BSTR *pbstr);
+
+ [id(DISPID_XTLRUNTIME_FORMATNUMBER)]
+ HRESULT formatNumber(
+ [in] double dblNumber,
+ [in] BSTR bstr,
+ [retval, out]BSTR *pbstr);
+
+ [id(DISPID_XTLRUNTIME_FORMATDATE)]
+ HRESULT formatDate(
+ [in] VARIANT var1,
+ [in] BSTR bstr,
+ [optional, in] VARIANT var2,
+ [retval, out]BSTR *pbstr);
+
+ [id(DISPID_XTLRUNTIME_FORMATTIME)]
+ HRESULT formatTime(
+ [in] VARIANT var1,
+ [in] BSTR bstr,
+ [optional, in] VARIANT var2,
+ [retval, out]BSTR *pbstr);
+
+}
+
+[
+ uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents
+{
+ properties:
+ methods:
+ [id (DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable();
+
+ [id (DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange();
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF92-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLProcessor : IDispatch
+{
+ [propput, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+ HRESULT input([in] VARIANT var);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_INPUT)]
+ HRESULT input([retval, out] VARIANT *var);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_XSLTEMPLATE)]
+ HRESULT ownerTemplate([retval, out] IXSLTemplate **ppTemplate);
+
+ [id(DISPID_XMLDOM_PROCESSOR_SETSTARTMODE)]
+ HRESULT setStartMode(
+ [in] BSTR p,
+ [in, defaultvalue("")] BSTR uri);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODE)]
+ HRESULT startMode([retval, out] BSTR *p);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_STARTMODEURI)]
+ HRESULT startModeURI([retval, out] BSTR *uri);
+
+ [propput, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+ HRESULT output([in] VARIANT var);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_OUTPUT)]
+ HRESULT output([retval, out] VARIANT *var);
+
+ [id(DISPID_XMLDOM_PROCESSOR_TRANSFORM)]
+ HRESULT transform(
+ [retval, out] VARIANT_BOOL *pbool);
+
+ [id(DISPID_XMLDOM_PROCESSOR_RESET)]
+ HRESULT reset();
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_READYSTATE)]
+ HRESULT readyState([retval, out] LONG *pstate);
+
+ [id(DISPID_XMLDOM_PROCESSOR_ADDPARAMETER)]
+ HRESULT addParameter(
+ [in] BSTR p,
+ [in] VARIANT var,
+ [in, defaultvalue("")] BSTR uri);
+
+ [id(DISPID_XMLDOM_PROCESSOR_ADDOBJECT)]
+ HRESULT addObject(
+ [in] IDispatch* obj,
+ [in] BSTR uri);
+
+ [propget, id(DISPID_XMLDOM_PROCESSOR_STYLESHEET)]
+ HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (2933BF93-7B36-11d2-B20E-00C04F983E60)
+]
+interface IXSLTemplate : IDispatch
+{
+ [propputref, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+ HRESULT stylesheet([in] IXMLDOMNode *node);
+
+ [propget, id(DISPID_XMLDOM_TEMPLATE_STYLESHEET)]
+ HRESULT stylesheet([retval, out] IXMLDOMNode **node);
+
+ [id(DISPID_XMLDOM_TEMPLATE_CREATEPROCESSOR)]
+ HRESULT createProcessor(
+ [retval, out] IXSLProcessor **ppProcessor);
+}
+
+[
+ object,
+ uuid(ED8C108D-4349-11D2-91A4-00C04F7969E8),
+ odl,
+ dual,
+ oleautomation,
+ pointer_default(unique)
+]
+interface IXMLHTTPRequest : IDispatch
+{
+ [id(1)]
+ HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl, [in, optional] VARIANT varAsync,
+ [in,optional] VARIANT username, [in,optional] VARIANT password);
+
+ [id(2)]
+ HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+ [id(3)]
+ HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR * value);
+
+ [id(4)]
+ HRESULT getAllResponseHeaders([out, retval] BSTR * pbstrHeaders);
+
+ [id(5)]
+ HRESULT send([in, optional] VARIANT body);
+
+ [id(6)]
+ HRESULT abort();
+
+ [propget, id(7)]
+ HRESULT status([out, retval] LONG *pStatus);
+
+ [propget, id(8)]
+ HRESULT statusText([out, retval] BSTR *pStatus);
+
+ [propget, id(9)]
+ HRESULT responseXML([out, retval] IDispatch **pBody);
+
+ [propget, id(10)]
+ HRESULT responseText([out, retval] BSTR *pBody);
+
+ [propget, id(11)]
+ HRESULT responseBody([out, retval] VARIANT *pBody);
+
+ [propget, id(12)]
+ HRESULT responseStream([out, retval] VARIANT *pBody);
+
+ [propget, id(13)]
+ HRESULT readyState([out, retval] LONG *pState);
+
+ [propput, id(14)]
+ HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+};
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e9196bf-13ba-4dd4-91ca-6c571f281495)
+]
+interface IServerXMLHTTPRequest : IXMLHTTPRequest
+{
+ typedef enum _SERVERXMLHTTP_OPTION
+ {
+ SXH_OPTION_URL = -1,
+ SXH_OPTION_URL_CODEPAGE,
+ SXH_OPTION_ESCAPE_PERCENT_IN_URL,
+ SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS,
+ SXH_OPTION_SELECT_CLIENT_SSL_CERT
+ } SERVERXMLHTTP_OPTION;
+
+ [id(15)]
+ HRESULT setTimeouts(
+ [in] long resolveTimeout,
+ [in] long connectTimeout,
+ [in] long sendTimeout,
+ [in] long receiveTimeout);
+
+ [id(16)]
+ HRESULT waitForResponse(
+ [in, optional] VARIANT timeoutInSeconds,
+ [out, retval] VARIANT_BOOL * isSuccessful);
+
+ [id(17)]
+ HRESULT getOption(
+ [in] SERVERXMLHTTP_OPTION option,
+ [out, retval] VARIANT * value);
+
+ [id(18)]
+ HRESULT setOption(
+ [in] SERVERXMLHTTP_OPTION option,
+ [in] VARIANT value);
+}
+
+[
+object,
+dual,
+oleautomation,
+uuid(2e01311b-c322-4b0a-bd77-b90cfdc8dce7)
+]
+interface IServerXMLHTTPRequest2 : IServerXMLHTTPRequest
+{
+ typedef enum _SXH_PROXY_SETTING
+ {
+ SXH_PROXY_SET_DEFAULT = 0,
+ SXH_PROXY_SET_PRECONFIG = 0,
+ SXH_PROXY_SET_DIRECT,
+ SXH_PROXY_SET_PROXY
+ } SXH_PROXY_SETTING;
+
+ [id(19)]
+ HRESULT setProxy(
+ [in] SXH_PROXY_SETTING proxySetting,
+ [in, optional] VARIANT varProxyServer,
+ [in, optional] VARIANT varBypassList);
+
+ [id(20)]
+ HRESULT setProxyCredentials(
+ [in] BSTR bstrUserName,
+ [in] BSTR bstrPassword);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT errorCode([retval, out] LONG *errCode);
+
+ [propget, id(DISPID_DOM_ERROR_URL)]
+ HRESULT url([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_REASON)]
+ HRESULT reason([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+ HRESULT srcText([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_LINE)]
+ HRESULT line([retval, out] LONG *lineNo);
+
+ [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+ HRESULT linepos([retval, out] LONG * linePos);
+
+ [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+ HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa428-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError2 : IXMLDOMParseError
+{
+ [propget, id(DISPID_DOM_ERROR2_ERRORXPATH)]
+ HRESULT errorXPath([retval, out] BSTR *xpathexpr);
+
+ [propget, id(DISPID_DOM_ERROR2_ALLERRORS)]
+ HRESULT allErrors([retval, out] IXMLDOMParseErrorCollection **allErrors);
+
+ [id(DISPID_DOM_ERROR2_ERRORPARAMETERS)]
+ HRESULT errorParameters(
+ [in] long index,
+ [retval, out] BSTR *param);
+
+ [propget, id(DISPID_DOM_ERROR2_ERRORPARAMETERSCOUNT)]
+ HRESULT errorParametersCount([retval, out] long *count);
+}
+
+[
+local,
+object,
+dual,
+oleautomation,
+uuid (3efaa429-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseErrorCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item(
+ [in] long index,
+ [retval, out] IXMLDOMParseError2 **error);
+
+ [propget, id(DISPID_DOM_ERRORCOLLECTION_LENGTH)]
+ HRESULT length( [retval, out] long *length);
+
+ [propget, id(DISPID_DOM_ERRORCOLLECTION_NEXT)]
+ HRESULT next( [retval, out] IXMLDOMParseError2 **error);
+
+ [id(DISPID_DOM_ERRORCOLLECTION_RESET)]
+ HRESULT reset();
+
+ [propget, hidden, restricted, id(DISPID_NEWENUM)]
+ HRESULT _newEnum( [retval, out] IUnknown **ppunk);
+}
+
+[
+ uuid(F6D90F11-9C73-11D3-B32E-00C04F990BB4)
+]
+coclass DOMDocument
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f5078f1b-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument26
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f5078f32-c551-11d3-89b9-0000f81fe221)
+]
+coclass DOMDocument30
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(88d969c0-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument40
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("XML DOM Document 6.0"),
+ progid("Msxml2.DOMDocument.6.0"),
+ threading(both),
+ uuid(88d96a05-f192-11d4-a65f-0040963251e5)
+]
+coclass DOMDocument60
+{
+ [default] interface IXMLDOMDocument3;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(F6D90F12-9C73-11D3-B32E-00C04F990BB4)
+]
+coclass FreeThreadedDOMDocument
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f5078f1c-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument26
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f5078f33-c551-11d3-89b9-0000f81fe221)
+]
+coclass FreeThreadedDOMDocument30
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(88d969c1-f192-11d4-a65f-0040963251e5)
+]
+coclass FreeThreadedDOMDocument40
+{
+ [default] interface IXMLDOMDocument2;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("Free threaded XML DOM Document 6.0"),
+ progid("Msxml2.FreeThreadedDOMDocument.6.0"),
+ threading(both),
+ uuid(88d96a06-f192-11d4-a65f-0040963251e5),
+]
+coclass FreeThreadedDOMDocument60
+{
+ [default] interface IXMLDOMDocument3;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ uuid(f6d90f16-9c73-11d3-b32e-00c04f990bb4)
+]
+coclass XMLHTTP
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ uuid(f5078f1e-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP26
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ uuid(f5078f35-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLHTTP30
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ uuid(88d969c5-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP40
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ helpstring("XML HTTP 6.0"),
+ progid("Msxml2.XMLHTTP.6.0"),
+ threading(apartment),
+ uuid(88d96a0a-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLHTTP60
+{
+ [default] interface IXMLHTTPRequest;
+}
+
+[
+ uuid(afba6b42-5692-48ea-8141-dc517dcf0ef1)
+]
+coclass ServerXMLHTTP
+{
+ [default] interface IServerXMLHTTPRequest;
+}
+
+[
+ uuid(afb40ffd-b609-40a3-9828-f88bbe11e4e3)
+]
+coclass ServerXMLHTTP30
+{
+ [default] interface IServerXMLHTTPRequest;
+}
+
+[
+ uuid(88d969c6-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP40
+{
+ [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+ helpstring("Server XML HTTP 6.0"),
+ progid("Msxml2.ServerXMLHTTP.6.0"),
+ threading(apartment),
+ uuid(88d96a0b-f192-11d4-a65f-0040963251e5)
+]
+coclass ServerXMLHTTP60
+{
+ [default] interface IServerXMLHTTPRequest2;
+}
+
+[
+ uuid(373984c9-b845-449b-91e7-45ac83036ade)
+]
+coclass XMLSchemaCache
+{
+ [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+ uuid(f5078f1d-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache26
+{
+ [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+ uuid(f5078f34-c551-11d3-89b9-0000f81fe221)
+]
+coclass XMLSchemaCache30
+{
+ [default] interface IXMLDOMSchemaCollection;
+}
+
+[
+ uuid(88d969c2-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache40
+{
+ [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+ helpstring("XML Schema Cache 6.0"),
+ progid("Msxml2.XMLSchemaCache.6.0"),
+ threading(both),
+ uuid(88d96a07-f192-11d4-a65f-0040963251e5)
+]
+coclass XMLSchemaCache60
+{
+ [default] interface IXMLDOMSchemaCollection2;
+}
+
+[
+ uuid(2933BF94-7B36-11d2-B20E-00C04F983E60)
+]
+coclass XSLTemplate
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ uuid(f5078f21-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate26
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ uuid(f5078f36-c551-11d3-89b9-0000f81fe221)
+]
+coclass XSLTemplate30
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ uuid(88d969c3-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate40
+{
+ [default] interface IXSLTemplate;
+}
+
+[
+ helpstring("XSL Template 6.0"),
+ progid("Msxml2.XSLTemplate.6.0"),
+ threading(both),
+ uuid(88d96a08-f192-11d4-a65f-0040963251e5)
+]
+coclass XSLTemplate60
+{
+ [default] interface IXSLTemplate;
+}
+
+/*
+ * Sax Interfaces
+ */
+[
+ object,
+ local,
+ uuid(f078abe1-45d2-4832-91ea-4466ce2f25c9)
+]
+interface ISAXAttributes : IUnknown
+{
+ HRESULT getLength(
+ [out, retval] int *length);
+
+ HRESULT getURI(
+ [in] int nIndex,
+ [out] const WCHAR **pUrl,
+ [out] int *pUriSize);
+
+ HRESULT getLocalName(
+ [in] int nIndex,
+ [out] const WCHAR **pLocalName,
+ [out] int *pLocalNameLength);
+
+ HRESULT getQName(
+ [in] int nIndex,
+ [out] const WCHAR **pQName,
+ [out] int *pQNameLength);
+
+ HRESULT getName(
+ [in] int nIndex,
+ [out] const WCHAR **pUri,
+ [out] int * pUriLength,
+ [out] const WCHAR ** pLocalName,
+ [out] int * pLocalNameSize,
+ [out] const WCHAR ** pQName,
+ [out] int * pQNameLength);
+
+ HRESULT getIndexFromName(
+ [in] const WCHAR * pUri,
+ [in] int cUriLength,
+ [in] const WCHAR * pLocalName,
+ [in] int cocalNameLength,
+ [out, retval] int * index);
+
+ HRESULT getIndexFromQName(
+ [in] const WCHAR * pQName,
+ [in] int nQNameLength,
+ [out, retval] int * index);
+
+ HRESULT getType(
+ [in] int nIndex,
+ [out] const WCHAR ** pType,
+ [out] int * pTypeLength);
+
+ HRESULT getTypeFromName(
+ [in] const WCHAR * pUri,
+ [in] int nUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [out] const WCHAR ** pType,
+ [out] int * nType);
+
+ HRESULT getTypeFromQName(
+ [in] const WCHAR * pQName,
+ [in] int nQName,
+ [out] const WCHAR ** pType,
+ [out] int * nType);
+
+ HRESULT getValue(
+ [in] int nIndex,
+ [out] const WCHAR ** pValue,
+ [out] int * nValue);
+
+ HRESULT getValueFromName(
+ [in] const WCHAR * pUri,
+ [in] int nUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [out] const WCHAR ** pValue,
+ [out] int * nValue);
+
+ HRESULT getValueFromQName(
+ [in] const WCHAR * pQName,
+ [in] int nQName,
+ [out] const WCHAR ** pValue,
+ [out] int * nValue);
+};
+
+[
+ object,
+ local,
+ uuid(1545cdfa-9e4e-4497-a8a4-2bf7d0112c44)
+]
+interface ISAXContentHandler : IUnknown
+{
+ HRESULT putDocumentLocator(
+ [in] ISAXLocator * pLocator);
+
+ HRESULT startDocument();
+
+ HRESULT endDocument();
+
+ HRESULT startPrefixMapping(
+ [in] const WCHAR * pPrefix,
+ [in] int nPrefix,
+ [in] const WCHAR * pUri,
+ [in] int nUri);
+
+ HRESULT endPrefixMapping(
+ [in] const WCHAR * pPrefix,
+ [in] int nPrefix);
+
+ HRESULT startElement(
+ [in] const WCHAR * pNamespaceUri,
+ [in] int nNamespaceUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [in] const WCHAR * pQName,
+ [in] int nQName,
+ [in] ISAXAttributes * pAttr);
+
+ HRESULT endElement(
+ [in] const WCHAR * pNamespaceUri,
+ [in] int nNamespaceUri,
+ [in] const WCHAR * pLocalName,
+ [in] int nLocalName,
+ [in] const WCHAR * pQName,
+ [in] int nQName);
+
+ HRESULT characters(
+ [in] const WCHAR * pChars,
+ [in] int nChars);
+
+ HRESULT ignorableWhitespace(
+ [in] const WCHAR * pChars,
+ [in] int nChars);
+
+ HRESULT processingInstruction(
+ [in] const WCHAR * pTarget,
+ [in] int nTarget,
+ [in] const WCHAR * pData,
+ [in] int nData);
+
+ HRESULT skippedEntity(
+ [in] const WCHAR * pName,
+ [in] int nName);
+};
+
+[
+ object,
+ local,
+ uuid(862629ac-771a-47b2-8337-4e6843c1be90)
+]
+interface ISAXDeclHandler : IUnknown
+{
+ HRESULT elementDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pModel,
+ [in] int nModel);
+
+ HRESULT attributeDecl(
+ [in] const WCHAR * pElementName,
+ [in] int nElementName,
+ [in] const WCHAR * pAttributeName,
+ [in] int nAttributeName,
+ [in] const WCHAR * pType,
+ [in] int nType,
+ [in] const WCHAR * pValueDefault,
+ [in] int nValueDefault,
+ [in] const WCHAR * pValue,
+ [in] int nValue);
+
+ HRESULT internalEntityDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pValue,
+ [in] int nValue);
+
+ HRESULT externalEntityDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId);
+};
+
+[
+ object,
+ local,
+ uuid(e15c1baf-afb3-4d60-8c36-19a8c45defed)
+]
+interface ISAXDTDHandler : IUnknown
+{
+ HRESULT notationDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId);
+
+ HRESULT unparsedEntityDecl(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId,
+ [in] const WCHAR * pNotationName,
+ [in] int nNotationName);
+};
+
+[
+ object,
+ local,
+ uuid(99bca7bd-e8c4-4d5f-a0cf-6d907901ff07),
+]
+interface ISAXEntityResolver : IUnknown
+{
+ HRESULT resolveEntity(
+ [in] const WCHAR * pPublicId,
+ [in] const WCHAR * pSystemId,
+ [out, retval] VARIANT * ret);
+};
+
+[
+ object,
+ local,
+ uuid(a60511c4-ccf5-479e-98a3-dc8dc545b7d0)
+]
+interface ISAXErrorHandler : IUnknown
+{
+ HRESULT error(
+ [in] ISAXLocator * pLocator,
+ [in] const WCHAR * pErrorMessage,
+ [in] HRESULT hrErrorCode);
+
+ HRESULT fatalError(
+ [in] ISAXLocator * pLocator,
+ [in] const WCHAR * pErrorMessage,
+ [in] HRESULT hrErrorCode);
+
+ HRESULT ignorableWarning(
+ [in] ISAXLocator * pLocator,
+ [in] const WCHAR * pErrorMessage,
+ [in] HRESULT hrErrorCode);
+};
+
+[
+ object,
+ local,
+ uuid(7f85d5f5-47a8-4497-bda5-84ba04819ea6)
+]
+interface ISAXLexicalHandler : IUnknown
+{
+ HRESULT startDTD(
+ [in] const WCHAR * pName,
+ [in] int nName,
+ [in] const WCHAR * pPublicId,
+ [in] int nPublicId,
+ [in] const WCHAR * pSystemId,
+ [in] int nSystemId);
+
+ HRESULT endDTD();
+
+ HRESULT startEntity(
+ [in] const WCHAR * pName,
+ [in] int nName);
+
+ HRESULT endEntity(
+ [in] const WCHAR * pName,
+ [in] int nName);
+
+ HRESULT startCDATA();
+
+ HRESULT endCDATA();
+
+ HRESULT comment(
+ [in] const WCHAR * pChars,
+ [in] int nChars);
+};
+
+[
+ object,
+ local,
+ uuid(9b7e472a-0de4-4640-bff3-84d38a051c31)
+]
+interface ISAXLocator : IUnknown
+{
+ HRESULT getColumnNumber(
+ [out, retval] int * nColumn);
+
+ HRESULT getLineNumber(
+ [out, retval] int * nLine);
+
+ HRESULT getPublicId(
+ [out, retval] const WCHAR ** publicId);
+
+ HRESULT getSystemId(
+ [out, retval] const WCHAR ** systemId);
+};
+
+[
+ local,
+ object,
+ uuid(70409222-ca09-4475-acb8-40312fe8d145)
+]
+interface ISAXXMLFilter : ISAXXMLReader
+{
+ HRESULT getParent(
+ [out, retval] ISAXXMLReader ** pReader);
+ HRESULT putParent(
+ [in] ISAXXMLReader * reader);
+};
+
+[
+local,
+object,
+uuid (a4f96ed0-f829-476e-81c0-cdc7bd2a0802)
+]
+interface ISAXXMLReader : IUnknown
+{
+ HRESULT getFeature(
+ [in] const WCHAR * pFeature,
+ [out, retval] VARIANT_BOOL * pValue);
+ HRESULT putFeature(
+ [in] const WCHAR * pFeature,
+ [in] VARIANT_BOOL vfValue);
+
+ HRESULT getProperty(
+ [in] const WCHAR * pProp,
+ [out, retval] VARIANT * pValue);
+ HRESULT putProperty(
+ [in] const WCHAR * pProp,
+ [in] VARIANT value);
+
+ HRESULT getEntityResolver(
+ [out, retval] ISAXEntityResolver ** ppEntityResolver);
+ HRESULT putEntityResolver(
+ [in] ISAXEntityResolver * pEntityResolver);
+
+ HRESULT getContentHandler(
+ [out, retval] ISAXContentHandler ** pContentHandler);
+ HRESULT putContentHandler(
+ [in] ISAXContentHandler * contentHandler);
+
+ HRESULT getDTDHandler(
+ [out, retval] ISAXDTDHandler ** pDTDHandler);
+ HRESULT putDTDHandler(
+ [in] ISAXDTDHandler * pDTDHandler);
+
+ HRESULT getErrorHandler(
+ [out, retval] ISAXErrorHandler ** pErrorHandler);
+ HRESULT putErrorHandler(
+ [in] ISAXErrorHandler * errorHandler);
+
+ HRESULT getBaseURL(
+ [out, retval] const WCHAR ** pBaseUrl);
+ HRESULT putBaseURL(
+ [in] const WCHAR * pBaseUrl);
+
+ HRESULT getSecureBaseURL(
+ [out, retval] const WCHAR ** pSecureBaseUrl);
+ HRESULT putSecureBaseURL(
+ [in] const WCHAR * secureBaseUrl);
+
+ HRESULT parse(
+ [in] VARIANT varInput);
+ HRESULT parseURL(
+ [in] const WCHAR * url);
+}
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(10dc0586-132b-4cac-8bb3-db00ac8b7ee0)
+]
+interface IVBSAXAttributes : IDispatch
+{
+ [propget, id(DISPID_SAX_ATTRIBUTES_LENGTH)]
+ HRESULT length( [out, retval] int * nLength);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETURI)]
+ HRESULT getURI( [in] int nIndex, [out, retval] BSTR * uri);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETLOCALNAME)]
+ HRESULT getLocalName( [in] int nIndex, [out, retval] BSTR * localName);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETQNAME)]
+ HRESULT getQName( [in] int nIndex, [out, retval] BSTR * QName);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMNAME)]
+ HRESULT getIndexFromName( [in] BSTR uri,
+ [in] BSTR localName, [out, retval] int * nIndex);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETINDEXFROMQNAME)]
+ HRESULT getIndexFromQName( [in] BSTR QName, [out, retval] int * nIndex);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETTYPE)]
+ HRESULT getType( [in] int nIndex, [out, retval] BSTR * type);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMNAME)]
+ HRESULT getTypeFromName( [in] BSTR uri, [in] BSTR localName,
+ [out, retval] BSTR * type);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETTYPEFROMQNAME)]
+ HRESULT getTypeFromQName( [in] BSTR QName, [out, retval] BSTR * type);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETVALUE)]
+ HRESULT getValue( [in] int nIndex, [out, retval] BSTR * value);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMNAME)]
+ HRESULT getValueFromName( [in] BSTR uri,
+ [in] BSTR localName,
+ [out, retval] BSTR * value);
+
+ [id(DISPID_SAX_ATTRIBUTES_GETVALUEFROMQNAME)]
+ HRESULT getValueFromQName( [in] BSTR QName, [out, retval] BSTR * value);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(2ed7290a-4dd5-4b46-bb26-4e4155e77faa)
+]
+interface IVBSAXContentHandler : IDispatch
+{
+ [propputref, id(DISPID_SAX_CONTENTHANDLER_DOCUMENTLOCATOR)]
+ HRESULT documentLocator( [in] IVBSAXLocator * oLocator);
+
+ [id(DISPID_SAX_CONTENTHANDLER_STARTDOCUMENT)]
+ HRESULT startDocument();
+
+ [id(DISPID_SAX_CONTENTHANDLER_ENDDOCUMENT)]
+ HRESULT endDocument();
+
+ [id(DISPID_SAX_CONTENTHANDLER_STARTPREFIXMAPPING)]
+ HRESULT startPrefixMapping( [in, out] BSTR * prefix, [in, out] BSTR * uri);
+
+ [id(DISPID_SAX_CONTENTHANDLER_ENDPREFIXMAPPING)]
+ HRESULT endPrefixMapping( [in, out] BSTR * prefix);
+
+ [id(DISPID_SAX_CONTENTHANDLER_STARTELEMENT)]
+ HRESULT startElement( [in, out] BSTR * namespaceURI,
+ [in, out] BSTR * localName,
+ [in, out] BSTR * QName,
+ [in] IVBSAXAttributes * oAttributes);
+
+ [id(DISPID_SAX_CONTENTHANDLER_ENDELEMENT)]
+ HRESULT endElement( [in, out] BSTR * namespaceURI,
+ [in, out] BSTR * localName, [in, out] BSTR * strQName);
+
+ [id(DISPID_SAX_CONTENTHANDLER_CHARACTERS)]
+ HRESULT characters( [in, out] BSTR * chars);
+
+ [id(DISPID_SAX_CONTENTHANDLER_IGNORABLEWHITESPACE)]
+ HRESULT ignorableWhitespace( [in, out] BSTR * chars);
+
+ [id(DISPID_SAX_CONTENTHANDLER_PROCESSINGINSTRUCTION)]
+ HRESULT processingInstruction( [in, out] BSTR * target,
+ [in, out] BSTR * data);
+
+ [id(DISPID_SAX_CONTENTHANDLER_SKIPPEDENTITY)]
+ HRESULT skippedEntity( [in, out] BSTR * name);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(e8917260-7579-4be1-b5dd-7afbfa6f077b)
+]
+interface IVBSAXDeclHandler : IDispatch
+{
+ [id(DISPID_SAX_DECLHANDLER_ELEMENTDECL)]
+ HRESULT elementDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * model);
+
+ [id(DISPID_SAX_DECLHANDLER_ATTRIBUTEDECL)]
+ HRESULT attributeDecl(
+ [in, out] BSTR * elementName,
+ [in, out] BSTR * attributeName,
+ [in, out] BSTR * type,
+ [in, out] BSTR * valueDefault,
+ [in, out] BSTR * value);
+
+ [id(DISPID_SAX_DECLHANDLER_INTERNALENTITYDECL)]
+ HRESULT internalEntityDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * value);
+
+ [id(DISPID_SAX_DECLHANDLER_EXTERNALENTITYDECL)]
+ HRESULT externalEntityDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(24fb3297-302d-4620-ba39-3a732d850558)
+]
+interface IVBSAXDTDHandler : IDispatch
+{
+ [id(DISPID_SAX_DTDHANDLER_NOTATIONDECL)]
+ HRESULT notationDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId);
+
+ [id(DISPID_SAX_DTDHANDLER_UNPARSEDENTITYDECL)]
+ HRESULT unparsedEntityDecl(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId,
+ [in, out] BSTR * notationName);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(0c05d096-f45b-4aca-ad1a-aa0bc25518dc)
+]
+interface IVBSAXEntityResolver : IDispatch
+{
+ [id(DISPID_SAX_ENTITYRESOLVER_RESOLVEENTITY)]
+ HRESULT resolveEntity(
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId,
+ [out, retval] VARIANT * ret);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(d963d3fe-173c-4862-9095-b92f66995f52)
+]
+interface IVBSAXErrorHandler : IDispatch
+{
+ [id(DISPID_SAX_ERRORHANDLER_ERROR)]
+ HRESULT error(
+ [in] IVBSAXLocator * locator,
+ [in, out] BSTR * errorMessage,
+ [in] LONG errorCode);
+
+ [id(DISPID_SAX_ERRORHANDLER_FATALERROR)]
+ HRESULT fatalError(
+ [in] IVBSAXLocator * locator,
+ [in, out] BSTR * errorMessage,
+ [in] LONG errorCode);
+
+ [id(DISPID_SAX_ERRORHANDLER_IGNORABLEWARNING)]
+ HRESULT ignorableWarning(
+ [in] IVBSAXLocator * locator,
+ [in, out] BSTR * errorMessage,
+ [in] LONG errorCode);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(032aac35-8c0e-4d9d-979f-e3b702935576)
+]
+interface IVBSAXLexicalHandler : IDispatch
+{
+ [id(DISPID_SAX_LEXICALHANDLER_STARTDTD)]
+ HRESULT startDTD(
+ [in, out] BSTR * name,
+ [in, out] BSTR * publicId,
+ [in, out] BSTR * systemId);
+ [id(DISPID_SAX_LEXICALHANDLER_ENDDTD)]
+ HRESULT endDTD();
+
+ [id(DISPID_SAX_LEXICALHANDLER_STARTENTITY)]
+ HRESULT startEntity([in, out] BSTR * name);
+ [id(DISPID_SAX_LEXICALHANDLER_ENDENTITY)]
+ HRESULT endEntity([in, out] BSTR * name);
+
+ [id(DISPID_SAX_LEXICALHANDLER_STARTCDATA)]
+ HRESULT startCDATA();
+ [id(DISPID_SAX_LEXICALHANDLER_ENDCDATA)]
+ HRESULT endCDATA();
+
+ [id(DISPID_SAX_LEXICALHANDLER_COMMENT)]
+ HRESULT comment( [in, out] BSTR * chars);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(796e7ac5-5aa2-4eff-acad-3faaf01a3288)
+]
+interface IVBSAXLocator : IDispatch
+{
+ [propget, id(DISPID_SAX_LOCATOR_COLUMNNUMBER)]
+ HRESULT columnNumber( [out, retval] int * column);
+
+ [propget, id(DISPID_SAX_LOCATOR_LINENUMBER)]
+ HRESULT lineNumber( [out, retval] int * line);
+
+ [propget, id(DISPID_SAX_LOCATOR_PUBLICID)]
+ HRESULT publicId( [out, retval] BSTR * publicId);
+
+ [propget, id(DISPID_SAX_LOCATOR_SYSTEMID)]
+ HRESULT systemId( [out, retval] BSTR * systemId);
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(1299eb1b-5b88-433e-82de-82ca75ad4e04)
+]
+interface IVBSAXXMLFilter : IDispatch
+{
+ [propget, id(DISPID_SAX_XMLFILTER_PARENT)]
+ HRESULT parent( [out, retval] IVBSAXXMLReader ** reader);
+ [propputref, id(DISPID_SAX_XMLFILTER_PARENT)]
+ HRESULT parent( [in] IVBSAXXMLReader * reader);
+
+};
+
+[
+ dual,
+ oleautomation,
+ object,
+ uuid (8c033caa-6cd6-4f73-b728-4531af74945f)
+]
+interface IVBSAXXMLReader : IDispatch
+{
+ [id(DISPID_SAX_XMLREADER_GETFEATURE)]
+ HRESULT getFeature( [in] const WCHAR * pFeature,
+ [out, retval] VARIANT_BOOL * pValue);
+ [id(DISPID_SAX_XMLREADER_PUTFEATURE)]
+ HRESULT putFeature( [in] const WCHAR * pFeature,
+ [in] VARIANT_BOOL vfValue);
+
+ [id(DISPID_SAX_XMLREADER_GETPROPERTY)]
+ HRESULT getProperty( [in] const WCHAR * pProp,
+ [out, retval] VARIANT * pValue);
+ [id(DISPID_SAX_XMLREADER_PUTPROPERTY)]
+ HRESULT putProperty( [in] const WCHAR * pProp, [in] VARIANT value);
+
+ [propget, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+ HRESULT entityResolver(
+ [out, retval] IVBSAXEntityResolver ** ppEntityResolver);
+ [propputref, id(DISPID_SAX_XMLREADER_ENTITYRESOLVER)]
+ HRESULT entityResolver( [in] IVBSAXEntityResolver * pEntityResolver);
+
+ [propget, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+ HRESULT contentHandler(
+ [out, retval] IVBSAXContentHandler ** pContentHandler);
+ [propputref, id(DISPID_SAX_XMLREADER_CONTENTHANDLER)]
+ HRESULT contentHandler([in] IVBSAXContentHandler * contentHandler);
+
+ [propget, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+ HRESULT dtdHandler([out, retval] IVBSAXDTDHandler ** pDTDHandler);
+ [propputref, id(DISPID_SAX_XMLREADER_DTDHANDLER)]
+ HRESULT dtdHandler([in] IVBSAXDTDHandler * pDTDHandler);
+
+ [propget, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+ HRESULT errorHandler([out, retval] IVBSAXErrorHandler ** pErrorHandler);
+ [propputref, id(DISPID_SAX_XMLREADER_ERRORHANDLER)]
+ HRESULT errorHandler([in] IVBSAXErrorHandler * errorHandler);
+
+ [propget, id(DISPID_SAX_XMLREADER_BASEURL)]
+ HRESULT baseURL([out, retval] const WCHAR ** pBaseUrl);
+ [propput, id(DISPID_SAX_XMLREADER_BASEURL)]
+ HRESULT baseURL([in] const WCHAR * pBaseUrl);
+
+ [propget, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+ HRESULT secureBaseURL([out, retval] const WCHAR ** pSecureBaseUrl);
+ [propput, id(DISPID_SAX_XMLREADER_SECUREBASEURL)]
+ HRESULT secureBaseURL([in] const WCHAR * secureBaseUrl);
+
+ [id(DISPID_SAX_XMLREADER_PARSE)]
+ HRESULT parse( [in] VARIANT varInput);
+ [id(DISPID_SAX_XMLREADER_PARSEURL)]
+ HRESULT parseURL([in] const WCHAR * url);
+}
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(f10d27cc-3ec0-415c-8ed8-77ab1c5e7262)
+]
+interface IMXAttributes : IDispatch
+{
+ [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTE)]
+ HRESULT addAttribute(
+ [in] BSTR uri,
+ [in] BSTR localName,
+ [in] BSTR QName,
+ [in] BSTR type,
+ [in] BSTR value);
+
+ [id(DISPID_MX_ATTRIBUTES_ADDATTRIBUTEFROMINDEX)]
+ HRESULT addAttributeFromIndex( [in] VARIANT atts,
+ [in] int index);
+
+ [id(DISPID_MX_ATTRIBUTES_CLEAR)]
+ HRESULT clear();
+
+ [id(DISPID_MX_ATTRIBUTES_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute( [in] int index);
+
+ [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTE)]
+ HRESULT setAttribute(
+ [in] int index,
+ [in] BSTR uri,
+ [in] BSTR localName,
+ [in] BSTR QName,
+ [in] BSTR type,
+ [in] BSTR value);
+
+ [id(DISPID_MX_ATTRIBUTES_SETATTRIBUTES)]
+ HRESULT setAttributes( [in] VARIANT atts);
+
+ [id(DISPID_MX_ATTRIBUTES_SETLOCALNAME)]
+ HRESULT setLocalName( [in] int index,
+ [in] BSTR localName);
+
+ [id(DISPID_MX_ATTRIBUTES_SETQNAME)]
+ HRESULT setQName(
+ [in] int index,
+ [in] BSTR QName);
+
+ [id(DISPID_MX_ATTRIBUTES_SETTYPE)]
+ HRESULT setType( [in] int index, [in] BSTR type);
+
+ [id(DISPID_MX_ATTRIBUTES_SETURI)]
+ HRESULT setURI( [in] int index, [in] BSTR uri);
+
+ [id(DISPID_MX_ATTRIBUTES_SETVALUE)]
+ HRESULT setValue([in] int index, [in] BSTR value);
+};
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(fa4bb38c-faf9-4cca-9302-d1dd0fe520db)
+]
+interface IMXSchemaDeclHandler : IDispatch
+{
+ [id(DISPID_MX_SCHEMADECLHANDLER_SCHEMAELEMENTDECL)]
+ HRESULT schemaElementDecl( [in] ISchemaElement *oSchemaElement );
+}
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(808f4e35-8d5a-4fbe-8466-33a41279ed30)
+]
+interface IMXReaderControl : IDispatch
+{
+ [id(DISPID_MX_READER_CONTROL_ABORT)]
+ HRESULT abort();
+
+ [id(DISPID_MX_READER_CONTROL_RESUME)]
+ HRESULT resume();
+
+ [id(DISPID_MX_READER_CONTROL_SUSPEND)]
+ HRESULT suspend();
+};
+
+[
+ object,
+ dual,
+ oleautomation,
+ uuid(4d7ff4ba-1565-4ea8-94e1-6e724a46f98d)
+]
+interface IMXWriter : IDispatch
+{
+ [propput, id(DISPID_MX_WRITER_OUTPUT)]
+ HRESULT output ( [in] VARIANT Destination);
+ [propget, id(DISPID_MX_WRITER_OUTPUT)]
+ HRESULT output ( [out, retval] VARIANT * Destination);
+
+ [propput, id(DISPID_MX_WRITER_ENCODING)]
+ HRESULT encoding ([in] BSTR encoding);
+ [propget, id(DISPID_MX_WRITER_ENCODING)]
+ HRESULT encoding ([out, retval] BSTR * encoding);
+
+ [propput, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+ HRESULT byteOrderMark ([in] VARIANT_BOOL writeByteOrderMark);
+ [propget, id(DISPID_MX_WRITER_BYTEORDERMARK)]
+ HRESULT byteOrderMark ([out, retval] VARIANT_BOOL * writeByteOrderMark);
+
+ [propput, id(DISPID_MX_WRITER_INDENT)]
+ HRESULT indent ([in] VARIANT_BOOL indentMode);
+ [propget, id(DISPID_MX_WRITER_INDENT)]
+ HRESULT indent ([out, retval] VARIANT_BOOL * indentMode);
+
+ [propput, id(DISPID_MX_WRITER_STANDALONE)]
+ HRESULT standalone ([in] VARIANT_BOOL value);
+ [propget, id(DISPID_MX_WRITER_STANDALONE)]
+ HRESULT standalone ([out, retval] VARIANT_BOOL * value);
+
+ [propput, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+ HRESULT omitXMLDeclaration ([in] VARIANT_BOOL value);
+ [propget, id(DISPID_MX_WRITER_OMITXMLDECLARATION)]
+ HRESULT omitXMLDeclaration ([out, retval] VARIANT_BOOL * value);
+
+ [propput, id(DISPID_MX_WRITER_VERSION)]
+ HRESULT version ([in] BSTR version);
+ [propget, id(DISPID_MX_WRITER_VERSION)]
+ HRESULT version ([out, retval] BSTR * version);
+
+ [propput, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+ HRESULT disableOutputEscaping([in] VARIANT_BOOL value);
+ [propget, id(DISPID_MX_WRITER_DISABLEOUTPUTESCAPING)]
+ HRESULT disableOutputEscaping([out, retval] VARIANT_BOOL * value);
+
+ [id(DISPID_MX_WRITER_FLUSH)]
+ HRESULT flush();
+};
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(c90352f4-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespacePrefixes : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item(
+ [in] long index,
+ [out, retval] BSTR *prefix);
+
+ [propget, id(DISPID_MX_NSMGR_LENGTH)]
+ HRESULT length( [out,retval] long *length );
+
+ [propget, restricted, hidden, id(DISPID_NEWENUM)]
+ HRESULT _newEnum( [out, retval] IUnknown **ppUnk );
+}
+
+[
+ local,
+ object,
+ hidden,
+ uuid(c90352f6-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXNamespaceManager : IUnknown
+{
+ HRESULT putAllowOverride([in] VARIANT_BOOL fOverride);
+
+ HRESULT getAllowOverride([out, retval] VARIANT_BOOL *fOverride);
+
+ HRESULT reset();
+
+ HRESULT pushContext();
+
+ HRESULT pushNodeContext(
+ [in] IXMLDOMNode *contextNode,
+ [in] VARIANT_BOOL fDeep);
+
+ HRESULT popContext();
+
+ HRESULT declarePrefix(
+ [in] const WCHAR *prefix,
+ [in] const WCHAR *namespaceURI);
+
+ HRESULT getDeclaredPrefix(
+ [in] long nIndex,
+ [in, out] WCHAR *pwchPrefix,
+ [in, out] int *pcchPrefix);
+
+ HRESULT getPrefix(
+ [in] const WCHAR *pwszNamespaceURI,
+ [in] long nIndex,
+ [in, out] WCHAR *pwchPrefix,
+ [in, out] int *pcchPrefix);
+
+ HRESULT getURI(
+ [in] const WCHAR *pwchPrefix,
+ [in] IXMLDOMNode* pContextNode,
+ [in, out] WCHAR *pwchUri,
+ [in, out] int *pcchUri);
+}
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(c90352f5-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IVBMXNamespaceManager : IDispatch
+{
+ [propput, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+ HRESULT allowOverride([in] VARIANT_BOOL fOverride);
+
+ [propget, id(DISPID_MX_NSMGR_ALLOWOVERRIDE)]
+ HRESULT allowOverride([out,retval] VARIANT_BOOL* fOverride);
+
+ [id(DISPID_MX_NSMGR_RESET)]
+ HRESULT reset();
+
+ [id(DISPID_MX_NSMGR_PUSHCONTEXT)]
+ HRESULT pushContext();
+
+ [id(DISPID_MX_NSMGR_PUSHNODECONTEXT)]
+ HRESULT pushNodeContext(
+ [in] IXMLDOMNode* contextNode,
+ [in, defaultvalue(-1)] VARIANT_BOOL fDeep);
+
+ [id(DISPID_MX_NSMGR_POPCONTEXT)]
+ HRESULT popContext();
+
+ [id(DISPID_MX_NSMGR_DECLAREPREFIX)]
+ HRESULT declarePrefix(
+ [in] BSTR prefix,
+ [in] BSTR namespaceURI);
+
+ [id(DISPID_MX_NSMGR_GETDECLAREDPREFIXES)]
+ HRESULT getDeclaredPrefixes([out, retval] IMXNamespacePrefixes** prefixes);
+
+ [id(DISPID_MX_NSMGR_GETPREFIXES)]
+ HRESULT getPrefixes(
+ [in] BSTR namespaceURI,
+ [out, retval] IMXNamespacePrefixes** prefixes);
+
+ [id(DISPID_MX_NSMGR_GETURI)]
+ HRESULT getURI(
+ [in] BSTR prefix,
+ [out, retval] VARIANT* uri);
+
+ [id(DISPID_MX_NSMGR_GETURIFROMNODE)]
+ HRESULT getURIFromNode(
+ [in] BSTR strPrefix,
+ [in] IXMLDOMNode* contextNode,
+ [out, retval] VARIANT* uri);
+}
+
+[
+ local,
+ object,
+ dual,
+ oleautomation,
+ uuid(c90352f7-643c-4fbc-bb23-e996eb2d51fd)
+]
+interface IMXXMLFilter : IDispatch
+{
+ [id(DISPID_MXXML_FILTER_GETFEATURE)]
+ HRESULT getFeature(
+ [in] BSTR strName,
+ [out, retval] VARIANT_BOOL * fValue);
+
+ [id(DISPID_MXXML_FILTER_PUTFEATURE)]
+ HRESULT putFeature(
+ [in] BSTR strName,
+ [in] VARIANT_BOOL fValue);
+
+ [id(DISPID_MXXML_FILTER_GETPROPERTY)]
+ HRESULT getProperty(
+ [in] BSTR strName,
+ [out, retval] VARIANT * varValue);
+
+ [id(DISPID_MXXML_FILTER_PUTPROPERTY)]
+ HRESULT putProperty(
+ [in] BSTR strName,
+ [in] VARIANT varValue);
+
+ [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propget]
+ HRESULT entityResolver( [out, retval] IUnknown **oResolver );
+
+ [id(DISPID_MXXML_FILTER_ENTITYRESOLVER), propputref]
+ HRESULT entityResolver( [in] IUnknown *oResolver );
+
+ [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propget]
+ HRESULT contentHandler( [out, retval] IUnknown **oHandler );
+
+ [id(DISPID_MXXML_FILTER_CONTENTHANDLER), propputref]
+ HRESULT contentHandler( [in] IUnknown *oHandler );
+
+ [id(DISPID_MXXML_FILTER_DTDHANDLER), propget]
+ HRESULT dtdHandler( [out, retval] IUnknown **oHandler );
+
+ [id(DISPID_MXXML_FILTER_DTDHANDLER), propputref]
+ HRESULT dtdHandler( [in] IUnknown *oHandler );
+
+ [id(DISPID_MXXML_FILTER_ERRORHANDLER), propget]
+ HRESULT errorHandler( [out, retval] IUnknown **oHandler );
+
+ [id(DISPID_MXXML_FILTER_ERRORHANDLER), propputref]
+ HRESULT errorHandler( [in] IUnknown *oHandler );
+}
+
+[
+ local,
+ object,
+ uuid(50ea08b1-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaStringCollection : IDispatch
+{
+ [id(DISPID_VALUE), propget]
+ HRESULT item(
+ [in] long index,
+ [out,retval] BSTR* bstr);
+
+ [id(DISPID_SOM_LENGTH), propget]
+ HRESULT length(
+ [out,retval] long* length);
+
+ [id(DISPID_NEWENUM), hidden, restricted, propget]
+ HRESULT _newEnum(
+ [out,retval] IUnknown** ppunk);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b2-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaItemCollection : IDispatch
+{
+ [id(DISPID_VALUE), propget]
+ HRESULT item(
+ [in] long index,
+ [out,retval]ISchemaItem** item);
+
+ [id(DISPID_SOM_ITEMBYNAME)]
+ HRESULT itemByName(
+ [in] BSTR name,
+ [out,retval] ISchemaItem** item);
+
+ [id(DISPID_SOM_ITEMBYQNAME)]
+ HRESULT itemByQName(
+ [in] BSTR name,
+ [in] BSTR namespaceURI,
+ [out,retval] ISchemaItem** item);
+
+ [id(DISPID_SOM_LENGTH), propget]
+ HRESULT length(
+ [out,retval]long* length);
+
+ [id(DISPID_NEWENUM), hidden, restricted, propget]
+ HRESULT _newEnum(
+ [out,retval]IUnknown** ppunk);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b3-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaItem : IDispatch
+{
+ [id(DISPID_SOM_NAME), propget]
+ HRESULT name(
+ [out,retval] BSTR* name);
+
+ [id(DISPID_SOM_NAMESPACEURI), propget]
+ HRESULT namespaceURI(
+ [out,retval] BSTR* namespaceURI);
+
+ [id(DISPID_SOM_SCHEMA), propget]
+ HRESULT schema(
+ [out,retval] ISchema** schema);
+
+ [id(DISPID_SOM_ID), propget]
+ HRESULT id(
+ [out,retval] BSTR* id);
+
+ [id(DISPID_SOM_ITEMTYPE), propget]
+ HRESULT itemType(
+ [out,retval] SOMITEMTYPE* itemType);
+
+ [id(DISPID_SOM_UNHANDLEDATTRS), propget]
+ HRESULT unhandledAttributes(
+ [out,retval] IVBSAXAttributes** attributes);
+
+ [id(DISPID_SOM_WRITEANNOTATION)]
+ HRESULT writeAnnotation(
+ [in] IUnknown* annotationSink,
+ [out,retval] VARIANT_BOOL* isWritten);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b4-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchema : ISchemaItem
+{
+ [id(DISPID_SOM_TARGETNAMESPACE), propget]
+ HRESULT targetNamespace(
+ [out,retval] BSTR* targetNamespace);
+
+ [id(DISPID_SOM_VERSION), propget]
+ HRESULT version(
+ [out,retval] BSTR* version);
+
+ [id(DISPID_SOM_TYPES), propget]
+ HRESULT types(
+ [out,retval] ISchemaItemCollection** types);
+
+ [id(DISPID_SOM_ELEMENTS), propget]
+ HRESULT elements(
+ [out,retval] ISchemaItemCollection** elements);
+
+ [id(DISPID_SOM_ATTRIBUTES), propget]
+ HRESULT attributes(
+ [out,retval] ISchemaItemCollection** attributes);
+
+ [id(DISPID_SOM_ATTRIBUTEGROUPS), propget]
+ HRESULT attributeGroups(
+ [out,retval] ISchemaItemCollection** attributeGroups);
+
+ [id(DISPID_SOM_MODELGROUPS), propget]
+ HRESULT modelGroups(
+ [out,retval] ISchemaItemCollection** modelGroups);
+
+ [id(DISPID_SOM_NOTATIONS), propget]
+ HRESULT notations(
+ [out,retval] ISchemaItemCollection** notations);
+
+ [id(DISPID_SOM_SCHEMALOCATIONS), propget]
+ HRESULT schemaLocations(
+ [out,retval] ISchemaStringCollection** schemaLocations);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b5-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaParticle : ISchemaItem
+{
+ [id(DISPID_SOM_MINOCCURS), propget]
+ HRESULT minOccurs(
+ [out,retval] VARIANT* minOccurs);
+
+ [id(DISPID_SOM_MAXOCCURS), propget]
+ HRESULT maxOccurs(
+ [out,retval] VARIANT* maxOccurs);
+};
+
+[
+ object,
+ uuid(50ea08b6-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaAttribute : ISchemaItem
+{
+ [id(DISPID_SOM_TYPE), propget]
+ HRESULT type(
+ [out,retval] ISchemaType** type);
+
+ [id(DISPID_SOM_SCOPE), propget]
+ HRESULT scope(
+ [out,retval] ISchemaComplexType** scope);
+
+ [id(DISPID_SOM_DEFAULTVALUE), propget]
+ HRESULT defaultValue(
+ [out,retval]BSTR* defaultValue);
+
+ [id(DISPID_SOM_FIXEDVALUE), propget]
+ HRESULT fixedValue(
+ [out,retval] BSTR* fixedValue);
+
+ [id(DISPID_SOM_USE), propget]
+ HRESULT use(
+ [out,retval] SCHEMAUSE* use);
+
+ [id(DISPID_SOM_ISREFERENCE), propget]
+ HRESULT isReference(
+ [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b7-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaElement : ISchemaParticle
+{
+ [id(DISPID_SOM_TYPE), propget]
+ HRESULT type(
+ [out,retval] ISchemaType** type);
+
+ [id(DISPID_SOM_SCOPE), propget]
+ HRESULT scope(
+ [out,retval] ISchemaComplexType** scope);
+
+ [id(DISPID_SOM_DEFAULTVALUE), propget]
+ HRESULT defaultValue(
+ [out,retval] BSTR* defaultValue);
+
+ [id(DISPID_SOM_FIXEDVALUE), propget]
+ HRESULT fixedValue(
+ [out,retval] BSTR* fixedValue);
+
+ [id(DISPID_SOM_ISNILLABLE), propget]
+ HRESULT isNillable(
+ [out,retval] VARIANT_BOOL* nillable);
+
+ [id(DISPID_SOM_IDCONSTRAINTS), propget]
+ HRESULT identityConstraints(
+ [out,retval] ISchemaItemCollection** constraints);
+
+ [id(DISPID_SOM_SUBSTITUTIONGROUP), propget]
+ HRESULT substitutionGroup(
+ [out,retval] ISchemaElement** element);
+
+ [id(DISPID_SOM_EXCLUSIONS), propget]
+ HRESULT substitutionGroupExclusions(
+ [out,retval] SCHEMADERIVATIONMETHOD* exclusions);
+
+ [id(DISPID_SOM_DISALLOWED), propget]
+ HRESULT disallowedSubstitutions(
+ [out,retval] SCHEMADERIVATIONMETHOD* disallowed);
+
+ [id(DISPID_SOM_ISABSTRACT), propget]
+ HRESULT isAbstract(
+ [out,retval] VARIANT_BOOL* abstract);
+
+ [id(DISPID_SOM_ISREFERENCE), propget]
+ HRESULT isReference(
+ [out,retval] VARIANT_BOOL* reference);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b8-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaType : ISchemaItem
+{
+ [id(DISPID_SOM_BASETYPES), propget]
+ HRESULT baseTypes(
+ [out,retval] ISchemaItemCollection** baseTypes);
+
+ [id(DISPID_SOM_FINAL), propget]
+ HRESULT final(
+ [out,retval] SCHEMADERIVATIONMETHOD* final);
+
+ [id(DISPID_SOM_VARIETY), propget]
+ HRESULT variety(
+ [out,retval] SCHEMATYPEVARIETY* variety);
+
+ [id(DISPID_SOM_DERIVEDBY), propget]
+ HRESULT derivedBy(
+ [out,retval] SCHEMADERIVATIONMETHOD* derivedBy);
+
+ [id(DISPID_SOM_ISVALID)]
+ HRESULT isValid(
+ [in] BSTR data,
+ [out,retval] VARIANT_BOOL* valid);
+
+ [id(DISPID_SOM_MINEXCLUSIVE), propget]
+ HRESULT minExclusive(
+ [out,retval]BSTR* minExclusive);
+
+ [id(DISPID_SOM_MININCLUSIVE), propget]
+ HRESULT minInclusive(
+ [out,retval] BSTR* minInclusive);
+
+ [id(DISPID_SOM_MAXEXCLUSIVE), propget]
+ HRESULT maxExclusive(
+ [out,retval] BSTR* maxExclusive);
+
+ [id(DISPID_SOM_MAXINCLUSIVE), propget]
+ HRESULT maxInclusive(
+ [out,retval] BSTR* maxInclusive);
+
+ [id(DISPID_SOM_TOTALDIGITS), propget]
+ HRESULT totalDigits(
+ [out,retval] VARIANT* totalDigits);
+
+ [id(DISPID_SOM_FRACTIONDIGITS), propget]
+ HRESULT fractionDigits(
+ [out,retval] VARIANT* fractionDigits);
+
+ [id(DISPID_SOM_LENGTH), propget]
+ HRESULT length(
+ [out,retval] VARIANT* length);
+
+ [id(DISPID_SOM_MINLENGTH), propget]
+ HRESULT minLength(
+ [out,retval]VARIANT* minLength);
+
+ [id(DISPID_SOM_MAXLENGTH), propget]
+ HRESULT maxLength(
+ [out,retval]VARIANT* maxLength);
+
+ [id(DISPID_SOM_ENUMERATION), propget]
+ HRESULT enumeration(
+ [out,retval] ISchemaStringCollection** enumeration);
+
+ [id(DISPID_SOM_WHITESPACE), propget]
+ HRESULT whitespace(
+ [out,retval]SCHEMAWHITESPACE* whitespace);
+
+ [id(DISPID_SOM_PATTERNS), propget]
+ HRESULT patterns(
+ [out,retval] ISchemaStringCollection** patterns);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08b9-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaComplexType : ISchemaType
+{
+ [id(DISPID_SOM_ISABSTRACT), propget]
+ HRESULT isAbstract(
+ [out,retval] VARIANT_BOOL* abstract);
+
+ [id(DISPID_SOM_ANYATTRIBUTE), propget]
+ HRESULT anyAttribute(
+ [out,retval] ISchemaAny** anyAttribute);
+
+ [id(DISPID_SOM_ATTRIBUTES), propget]
+ HRESULT attributes(
+ [out,retval] ISchemaItemCollection** attributes);
+
+ [id(DISPID_SOM_CONTENTTYPE), propget]
+ HRESULT contentType(
+ [out,retval] SCHEMACONTENTTYPE* contentType);
+
+ [id(DISPID_SOM_CONTENTMODEL), propget]
+ HRESULT contentModel(
+ [out,retval] ISchemaModelGroup** contentModel);
+
+ [id(DISPID_SOM_PROHIBITED), propget]
+ HRESULT prohibitedSubstitutions(
+ [out,retval] SCHEMADERIVATIONMETHOD* prohibited);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08ba-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaAttributeGroup : ISchemaItem
+{
+ [id(DISPID_SOM_ANYATTRIBUTE), propget]
+ HRESULT anyAttribute(
+ [out,retval] ISchemaAny** anyAttribute);
+
+ [id(DISPID_SOM_ATTRIBUTES), propget]
+ HRESULT attributes(
+ [out,retval] ISchemaItemCollection** attributes);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08bb-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual,
+]
+interface ISchemaModelGroup : ISchemaParticle
+{
+ [id(DISPID_SOM_PARTICLES), propget]
+ HRESULT particles(
+ [out,retval] ISchemaItemCollection** particles);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08bc-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaAny : ISchemaParticle
+{
+ [id(DISPID_SOM_NAMESPACES), propget]
+ HRESULT namespaces(
+ [out,retval] ISchemaStringCollection** namespaces);
+
+ [id(DISPID_SOM_PROCESSCONTENTS), propget]
+ HRESULT processContents(
+ [out,retval] SCHEMAPROCESSCONTENTS* processContents);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08bd-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaIdentityConstraint : ISchemaItem
+{
+ [id(DISPID_SOM_SELECTOR), propget]
+ HRESULT selector(
+ [out,retval] BSTR* selector);
+
+ [id(DISPID_SOM_FIELDS), propget]
+ HRESULT fields(
+ [out,retval] ISchemaStringCollection** fields);
+
+ [id(DISPID_SOM_REFERENCEDKEY), propget]
+ HRESULT referencedKey(
+ [out,retval] ISchemaIdentityConstraint** key);
+};
+
+[
+ local,
+ object,
+ uuid(50ea08be-dd1b-4664-9a50-c2f40f4bd79a),
+ oleautomation,
+ dual
+]
+interface ISchemaNotation : ISchemaItem
+{
+ [id(DISPID_SOM_SYSTEMIDENTIFIER), propget]
+ HRESULT systemIdentifier(
+ [out,retval] BSTR* uri);
+
+ [id(DISPID_SOM_PUBLICIDENTIFIER), propget]
+ HRESULT publicIdentifier(
+ [out,retval] BSTR* uri);
+};
+
+
+[
+ uuid(079aa557-4a18-424a-8eee-e39f0a8d41b9)
+]
+coclass SAXXMLReader
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+ interface IMXReaderControl;
+};
+
+[
+ uuid(3124c396-fb13-4836-a6ad-1317f1713688)
+]
+coclass SAXXMLReader30
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+ interface IMXReaderControl;
+};
+
+[
+ uuid(7c6e29bc-8b8b-4c3d-859e-af6cd158be0f)
+]
+coclass SAXXMLReader40
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+}
+
+[
+ helpstring("SAX XML Reader 6.0"),
+ progid("Msxml2.SAXXMLReader.6.0"),
+ threading(both),
+ uuid(88d96a0c-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXXMLReader60
+{
+ [default] interface IVBSAXXMLReader;
+ interface ISAXXMLReader;
+}
+
+[
+ uuid(a4c23ec3-6b70-4466-9127-550077239978)
+]
+coclass MXHTMLWriter
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXErrorHandler;
+ interface ISAXDTDHandler;
+ interface ISAXLexicalHandler;
+ interface ISAXDeclHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(853d1540-c1a7-4aa9-a226-4d3bd301146d)
+]
+coclass MXHTMLWriter30
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(88d969c9-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter40
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ helpstring("MXHTMLWriter 6.0"),
+ progid("Msxml2.MXHTMLWriter.6.0"),
+ threading(both),
+ uuid(88d96a10-f192-11d4-a65f-0040963251e5)
+]
+coclass MXHTMLWriter60
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(fc220ad8-a72a-4ee8-926e-0b7ad152a020)
+]
+coclass MXXMLWriter
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXErrorHandler;
+ interface ISAXDTDHandler;
+ interface ISAXLexicalHandler;
+ interface ISAXDeclHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+};
+
+[
+ uuid(3d813dfe-6c91-4a4e-8f41-04346a841d9c)
+]
+coclass MXXMLWriter30
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+};
+
+[
+ uuid(88d969c8-f192-11d4-a65f-0040963251e5),
+]
+coclass MXXMLWriter40
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ helpstring("MXXMLWriter 6.0"),
+ progid("Msxml2.MXXMLWriter.6.0"),
+ threading(both),
+ uuid(88d96a0f-f192-11d4-a65f-0040963251e5)
+]
+coclass MXXMLWriter60
+{
+ [default] interface IMXWriter;
+
+ interface ISAXContentHandler;
+ interface ISAXDeclHandler;
+ interface ISAXDTDHandler;
+ interface ISAXErrorHandler;
+ interface ISAXLexicalHandler;
+
+ interface IVBSAXContentHandler;
+ interface IVBSAXDeclHandler;
+ interface IVBSAXDTDHandler;
+ interface IVBSAXErrorHandler;
+ interface IVBSAXLexicalHandler;
+}
+
+[
+ uuid(88d969d5-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager
+{
+ [default] interface IVBMXNamespaceManager;
+ interface IMXNamespaceManager;
+}
+
+[
+ uuid(88d969d6-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager40
+{
+ [default] interface IVBMXNamespaceManager;
+ interface IMXNamespaceManager;
+}
+
+[
+ helpstring("MXNamespaceManager 6.0"),
+ progid("Msxml2.MXNamespaceManager.6.0"),
+ threading(both),
+ uuid(88d96a11-f192-11d4-a65f-0040963251e5)
+]
+coclass MXNamespaceManager60
+{
+ [default] interface IVBMXNamespaceManager;
+ interface IMXNamespaceManager;
+}
+
+[
+ uuid(4dd441ad-526d-4a77-9f1b-9841ed802fb0)
+]
+coclass SAXAttributes
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+[
+ uuid(3e784a01-f3ae-4dc0-9354-9526b9370eba)
+]
+coclass SAXAttributes30
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+[
+ uuid(88d969ca-f192-11d4-a65f-0040963251e5),
+]
+coclass SAXAttributes40
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+[
+ helpstring("SAXAttributes 6.0"),
+ progid("Msxml2.SAXAttributes.6.0"),
+ threading(both),
+ uuid(88d96a0e-f192-11d4-a65f-0040963251e5)
+]
+coclass SAXAttributes60
+{
+ [default] interface IMXAttributes;
+ interface IVBSAXAttributes;
+ interface ISAXAttributes;
+}
+
+/*
+ * Error Codes
+ */
+cpp_quote("#define E_XML_NOTWF 0xC00CE223")
+cpp_quote("#define E_XML_NODTD 0xC00CE224")
+cpp_quote("#define E_XML_INVALID 0xC00CE225")
+cpp_quote("#define E_XML_BUFFERTOOSMALL 0xC00CE226")
+
+} /* Library MSXML */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h
new file mode 100644
index 00000000..4f9824cf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxml6did.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSXML6DID_H__
+#define __MSXML6DID_H__
+
+#include <msxml2did.h>
+
+#endif /* __MSXML6DID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h
new file mode 100644
index 00000000..c08d07aa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/msxmldid.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __MSXMLDID_H__
+#define __MSXMLDID_H__
+
+#define DISPID_XOBJ_MIN 0x10000
+#define DISPID_XOBJ_MAX 0x1FFFF
+#define DISPID_XOBJ_BASE 0x10000
+
+#define DISPID_XMLELEMENTCOLLECTION 0x10000
+#define DISPID_XMLELEMENTCOLLECTION_LENGTH 0x10001
+#define DISPID_XMLELEMENTCOLLECTION_NEWENUM DISPID_NEWENUM
+#define DISPID_XMLELEMENTCOLLECTION_ITEM 0x10003
+
+#define DISPID_XMLDOCUMENT 0x10064
+#define DISPID_XMLDOCUMENT_ROOT 0x10065
+#define DISPID_XMLDOCUMENT_FILESIZE 0x10066
+#define DISPID_XMLDOCUMENT_FILEMODIFIEDDATE 0x10067
+#define DISPID_XMLDOCUMENT_FILEUPDATEDDATE 0x10068
+#define DISPID_XMLDOCUMENT_URL 0x10069
+#define DISPID_XMLDOCUMENT_MIMETYPE 0x1006a
+#define DISPID_XMLDOCUMENT_READYSTATE 0x1006b
+#define DISPID_XMLDOCUMENT_CREATEELEMENT 0x1006c
+#define DISPID_XMLDOCUMENT_CHARSET 0x1006d
+#define DISPID_XMLDOCUMENT_VERSION 0x1006e
+#define DISPID_XMLDOCUMENT_DOCTYPE 0x1006f
+#define DISPID_XMLDOCUMENT_DTDURL 0x10070
+#define DISPID_XMLDOCUMENT_ASYNC 0x10071
+#define DISPID_XMLDOCUMENT_CASEINSENSITIVE 0x10072
+
+#define DISPID_XMLELEMENT 0x100c8
+#define DISPID_XMLELEMENT_TAGNAME 0x100c9
+#define DISPID_XMLELEMENT_PARENT 0x100ca
+#define DISPID_XMLELEMENT_SETATTRIBUTE 0x100cb
+#define DISPID_XMLELEMENT_GETATTRIBUTE 0x100cc
+#define DISPID_XMLELEMENT_REMOVEATTRIBUTE 0x100cd
+#define DISPID_XMLELEMENT_CHILDREN 0x100ce
+#define DISPID_XMLELEMENT_TYPE 0x100cf
+#define DISPID_XMLELEMENT_TEXT 0x100d0
+#define DISPID_XMLELEMENT_ADDCHILD 0x100d1
+#define DISPID_XMLELEMENT_REMOVECHILD 0x100d2
+#define DISPID_XMLELEMENT_ATTRIBUTES 0x100d3
+
+#define DISPID_XMLNOTIFSINK 0x1012c
+#define DISPID_XMLNOTIFSINK_CHILDADDED 0x1012d
+
+#define DISPID_XMLATTRIBUTE 0x10190
+#define DISPID_XMLATTRIBUTE_NAME 0x10191
+#define DISPID_XMLATTRIBUTE_VALUE 0x10192
+
+#endif /* __MSXMLDID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h
new file mode 100644
index 00000000..8e897b83
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/nb30.h
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2001 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef NCB_INCLUDED
+#define NCB_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NCBNAMSZ 16
+#define MAX_LANA 0xfe
+
+#define NCBCALL 0x10
+#define NCBLISTEN 0x11
+#define NCBHANGUP 0x12
+#define NCBSEND 0x14
+#define NCBRECV 0x15
+#define NCBRECVANY 0x16
+#define NCBCHAINSEND 0x17
+#define NCBDGSEND 0x20
+#define NCBDGRECV 0x21
+#define NCBDGSENDBC 0x22
+#define NCBDGRECVBC 0x23
+#define NCBADDNAME 0x30
+#define NCBDELNAME 0x31
+#define NCBRESET 0x32
+#define NCBASTAT 0x33
+#define NCBSSTAT 0x34
+#define NCBCANCEL 0x35
+#define NCBADDGRNAME 0x36
+#define NCBENUM 0x37
+#define NCBUNLINK 0x70
+#define NCBSENDNA 0x71
+#define NCBCHAINSENDNA 0x72
+#define NCBLANSTALERT 0x73
+#define NCBACTION 0x77
+#define NCBFINDNAME 0x78
+#define NCBTRACE 0x79
+
+#define ASYNCH 0x80
+
+typedef struct _NCB
+{
+ UCHAR ncb_command;
+ UCHAR ncb_retcode;
+ UCHAR ncb_lsn;
+ UCHAR ncb_num;
+ PUCHAR ncb_buffer;
+ WORD ncb_length;
+ UCHAR ncb_callname[NCBNAMSZ];
+ UCHAR ncb_name[NCBNAMSZ];
+ UCHAR ncb_rto;
+ UCHAR ncb_sto;
+ VOID (CALLBACK *ncb_post)(struct _NCB *);
+ UCHAR ncb_lana_num;
+ UCHAR ncb_cmd_cplt;
+#ifdef _WIN64
+ UCHAR ncb_reserve[18];
+#else
+ UCHAR ncb_reserve[10];
+#endif
+ HANDLE ncb_event;
+} NCB, *PNCB;
+
+typedef struct _ADAPTER_STATUS
+{
+ UCHAR adapter_address[6];
+ UCHAR rev_major;
+ UCHAR reserved0;
+ UCHAR adapter_type;
+ UCHAR rev_minor;
+ WORD duration;
+ WORD frmr_recv;
+ WORD frmr_xmit;
+ WORD iframe_recv_error;
+ WORD xmit_aborts;
+ DWORD xmit_success;
+ DWORD recv_success;
+ WORD iframe_xmit_error;
+ WORD recv_buffer_unavail;
+ WORD t1_timeouts;
+ WORD ti_timeouts;
+ DWORD reserved1;
+ WORD free_ncbs;
+ WORD max_cfg_ncbs;
+ WORD max_ncbs;
+ WORD xmit_buf_unavail;
+ WORD max_dgram_size;
+ WORD pending_sess;
+ WORD max_cfg_sess;
+ WORD max_sess;
+ WORD max_sess_pkt_size;
+ WORD name_count;
+} ADAPTER_STATUS, *PADAPTER_STATUS;
+
+typedef struct _NAME_BUFFER
+{
+ UCHAR name[NCBNAMSZ];
+ UCHAR name_num;
+ UCHAR name_flags;
+} NAME_BUFFER, *PNAME_BUFFER;
+
+#define NAME_FLAGS_MASK 0x87
+#define GROUP_NAME 0x80
+#define UNIQUE_NAME 0x00
+#define REGISTERING 0x00
+#define REGISTERED 0x04
+#define DEREGISTERED 0x05
+#define DUPLICATE 0x06
+#define DUPLICATE_DEREG 0x07
+
+typedef struct _LANA_ENUM
+{
+ UCHAR length;
+ UCHAR lana[MAX_LANA+1];
+} LANA_ENUM, *PLANA_ENUM;
+
+typedef struct _FIND_NAME_HEADER
+{
+ WORD node_count;
+ UCHAR reserved;
+ UCHAR unique_group;
+} FIND_NAME_HEADER, *PFIND_NAME_HEADER;
+
+typedef struct _FIND_NAME_BUFFER
+{
+ UCHAR length;
+ UCHAR access_control;
+ UCHAR frame_control;
+ UCHAR destination_addr[6];
+ UCHAR source_addr[6];
+ UCHAR routing_info[6];
+} FIND_NAME_BUFFER, *PFIND_NAME_BUFFER;
+
+typedef struct _SESSION_HEADER {
+ UCHAR sess_name;
+ UCHAR num_sess;
+ UCHAR rcv_dg_outstanding;
+ UCHAR rcv_any_outstanding;
+} SESSION_HEADER, *PSESSION_HEADER;
+
+typedef struct _SESSION_BUFFER {
+ UCHAR lsn;
+ UCHAR state;
+ UCHAR local_name[NCBNAMSZ];
+ UCHAR remote_name[NCBNAMSZ];
+ UCHAR rcvs_outstanding;
+ UCHAR sends_outstanding;
+} SESSION_BUFFER, *PSESSION_BUFFER;
+
+#define LISTEN_OUTSTANDING 0x01
+#define CALL_PENDING 0x02
+#define SESSION_ESTABLISHED 0x03
+#define HANGUP_PENDING 0x04
+#define HANGUP_COMPLETE 0x05
+#define SESSION_ABORTED 0x06
+
+#define ALL_TRANSPORTS "M\0\0\0"
+
+#define NRC_GOODRET 0x00
+#define NRC_BUFLEN 0x01
+#define NRC_ILLCMD 0x03
+#define NRC_CMDTMO 0x05
+#define NRC_INCOMP 0x06
+#define NRC_BADDR 0x07
+#define NRC_SNUMOUT 0x08
+#define NRC_NORES 0x09
+#define NRC_SCLOSED 0x0a
+#define NRC_CMDCAN 0x0b
+#define NRC_DUPNAME 0x0d
+#define NRC_NAMTFUL 0x0e
+#define NRC_ACTSES 0x0f
+#define NRC_LOCTFUL 0x11
+#define NRC_REMTFUL 0x12
+#define NRC_ILLNN 0x13
+#define NRC_NOCALL 0x14
+#define NRC_NOWILD 0x15
+#define NRC_INUSE 0x16
+#define NRC_NAMERR 0x17
+#define NRC_SABORT 0x18
+#define NRC_NAMCONF 0x19
+#define NRC_IFBUSY 0x21
+#define NRC_TOOMANY 0x22
+#define NRC_BRIDGE 0x23
+#define NRC_CANOCCR 0x24
+#define NRC_CANCEL 0x26
+#define NRC_DUPENV 0x30
+#define NRC_ENVNOTDEF 0x34
+#define NRC_OSRESNOTAV 0x35
+#define NRC_MAXAPPS 0x36
+#define NRC_NOSAPS 0x37
+#define NRC_NORESOURCES 0x38
+#define NRC_INVADDRESS 0x39
+#define NRC_INVDDID 0x3b
+#define NRC_LOCKFAIL 0x3c
+#define NRC_OPENERROR 0x3f
+#define NRC_SYSTEM 0x40
+#define NRC_PENDING 0xff
+
+UCHAR WINAPI Netbios(PNCB pncb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NCB_INCLUDED */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h
new file mode 100644
index 00000000..b77d4bac
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ndrtypes.h
@@ -0,0 +1,190 @@
+/*
+ * NDR Types
+ *
+ * Copyright 2006 Robert Shearman (for CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __NDRTYPES_H__
+#define __NDRTYPES_H__
+
+#include <limits.h>
+
+typedef struct
+{
+ unsigned short MustSize : 1; /* 0x0001 - client interpreter MUST size this
+ * parameter, other parameters may be skipped, using the value in
+ * NDR_PROC_PARTIAL_OIF_HEADER::constant_client_buffer_size instead. */
+ unsigned short MustFree : 1; /* 0x0002 - server interpreter MUST size this
+ * parameter, other parameters may be skipped, using the value in
+ * NDR_PROC_PARTIAL_OIF_HEADER::constant_server_buffer_size instead. */
+ unsigned short IsPipe : 1; /* 0x0004 - The parameter is a pipe handle */
+ unsigned short IsIn : 1; /* 0x0008 - The parameter is an input */
+ unsigned short IsOut : 1; /* 0x0010 - The parameter is an output */
+ unsigned short IsReturn : 1; /* 0x0020 - The parameter is to be returned */
+ unsigned short IsBasetype : 1; /* 0x0040 - The parameter is simple and has the
+ * format defined by NDR_PARAM_OIF_BASETYPE rather than by
+ * NDR_PARAM_OIF_OTHER. */
+ unsigned short IsByValue : 1; /* 0x0080 - Set for compound types being sent by
+ * value. Can be of type: structure, union, transmit_as, represent_as,
+ * wire_marshal and SAFEARRAY. */
+ unsigned short IsSimpleRef : 1; /* 0x0100 - parameter that is a reference
+ * pointer to anything other than another pointer, and which has no
+ * allocate attributes. */
+ unsigned short IsDontCallFreeInst : 1; /* 0x0200 - Used for some represent_as types
+ * for when the free instance routine should not be called. */
+ unsigned short SaveForAsyncFinish : 1; /* 0x0400 - Unknown */
+ unsigned short Unused : 2;
+ unsigned short ServerAllocSize : 3; /* 0xe000 - If non-zero
+ * specifies the size of the object in numbers of 8byte blocks needed.
+ * It will be stored on the server's stack rather than using an allocate
+ * call. */
+} PARAM_ATTRIBUTES;
+
+typedef struct
+{
+ unsigned char ServerMustSize : 1; /* 0x01 - the server must perform a
+ * sizing pass. */
+ unsigned char ClientMustSize : 1; /* 0x02 - the client must perform a
+ * sizing pass. */
+ unsigned char HasReturn : 1; /* 0x04 - procedure has a return value. */
+ unsigned char HasPipes : 1; /* 0x08 - the pipe package should be used. */
+ unsigned char Unused : 1; /* 0x10 - not used */
+ unsigned char HasAsyncUuid : 1; /* 0x20 - indicates an asynchronous DCOM
+ * procedure. */
+ unsigned char HasExtensions : 1; /* 0x40 - indicates that Win2000
+ * extensions are in use. */
+ unsigned char HasAsyncHandle : 1; /* 0x80 - indicates an asynchronous RPC
+ * procedure. */
+} INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
+
+typedef struct
+{
+ unsigned char HasNewCorrDesc : 1; /* 0x01 - indicates new correlation
+ * descriptors in use. */
+ unsigned char ClientCorrCheck : 1; /* 0x02 - client needs correlation
+ * check. */
+ unsigned char ServerCorrCheck : 1; /* 0x04 - server needs correlation
+ * check. */
+ unsigned char HasNotify : 1; /* 0x08 - should call MIDL [notify]
+ * routine @ NotifyIndex. */
+ unsigned char HasNotify2 : 1; /* 0x10 - should call MIDL [notify_flag] routine @
+ * NotifyIndex. */
+ unsigned char Unused : 3;
+} INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
+
+/* Win2000 extensions */
+typedef struct
+{
+ /* size in bytes of all following extensions */
+ unsigned char Size;
+
+ INTERPRETER_OPT_FLAGS2 Flags2;
+
+ /* client cache size hint */
+ unsigned short ClientCorrHint;
+
+ /* server cache size hint */
+ unsigned short ServerCorrHint;
+
+ /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
+ * HasNotify or HasNotify2 flag set */
+ unsigned short NotifyIndex;
+} NDR_PROC_HEADER_EXTS;
+
+typedef struct
+{
+ /* size in bytes of all following extensions */
+ unsigned char Size;
+
+ INTERPRETER_OPT_FLAGS2 Flags2;
+
+ /* client cache size hint */
+ unsigned short ClientCorrHint;
+
+ /* server cache size hint */
+ unsigned short ServerCorrHint;
+
+ /* index of routine in MIDL_STUB_DESC::NotifyRoutineTable to call if
+ * HasNotify or HasNotify2 flag set */
+ unsigned short NotifyIndex;
+
+ /* needed only on IA64 to cope with float/register loading */
+ unsigned short FloatArgMask;
+} NDR_PROC_HEADER_EXTS64;
+
+typedef enum
+{
+ FC_BYTE = 0x01, /* 0x01 */
+ FC_CHAR, /* 0x02 */
+ FC_SMALL, /* 0x03 */
+ FC_USMALL, /* 0x04 */
+ FC_WCHAR, /* 0x05 */
+ FC_SHORT, /* 0x06 */
+ FC_USHORT, /* 0x07 */
+ FC_LONG, /* 0x08 */
+ FC_ULONG, /* 0x09 */
+ FC_FLOAT, /* 0x0a */
+ FC_HYPER, /* 0x0b */
+ FC_DOUBLE, /* 0x0c */
+ FC_ENUM16, /* 0x0d */
+ FC_ENUM32, /* 0x0e */
+ FC_IGNORE, /* 0x0f */
+ FC_ERROR_STATUS_T, /* 0x10 */
+
+ FC_RP, /* 0x11 */ /* reference pointer */
+ FC_UP, /* 0x12 */ /* unique pointer */
+ FC_OP, /* 0x13 */ /* object pointer */
+ FC_FP, /* 0x14 */ /* full pointer */
+
+ FC_STRUCT, /* 0x15 */ /* simple structure */
+ FC_PSTRUCT, /* 0x16 */ /* simple structure w/ pointers */
+ FC_CSTRUCT, /* 0x17 */ /* conformant structure */
+ FC_CPSTRUCT, /* 0x18 */ /* conformant structure w/ pointers */
+ FC_CVSTRUCT, /* 0x19 */ /* conformant varying struct */
+ FC_BOGUS_STRUCT, /* 0x1a */ /* complex structure */
+
+ FC_CARRAY, /* 0x1b */ /* conformant array */
+ FC_CVARRAY, /* 0x1c */ /* conformant varying array */
+ FC_SMFARRAY, /* 0x1d */ /* small (<64K) fixed array */
+ FC_LGFARRAY, /* 0x1e */ /* large (>= 64k) fixed array */
+ FC_SMVARRAY, /* 0x1f */ /* small (<64k) varying array */
+ FC_LGVARRAY, /* 0x20 */ /* large (>= 64k) varying array */
+ FC_BOGUS_ARRAY, /* 0x21 */ /* complex array */
+} FORMAT_CHARACTER;
+
+/* flags for all handle types */
+#define HANDLE_PARAM_IS_VIA_PTR 0x80
+#define HANDLE_PARAM_IS_IN 0x40
+#define HANDLE_PARAM_IS_OUT 0x20
+#define HANDLE_PARAM_IS_RETURN 0x10
+
+/* flags for context handles */
+#define NDR_STRICT_CONTEXT_HANDLE 0x08
+#define NDR_CONTEXT_HANDLE_NOSERIALIZE 0x04
+#define NDR_CONTEXT_HANDLE_SERIALIZE 0x02
+#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL 0x01
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl
new file mode 100644
index 00000000..91293e5a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/netcon.idl
@@ -0,0 +1,421 @@
+/*
+ * Copyright 2009 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+import "unknwn.idl";
+import "wtypes.idl";
+/* import "prsht.idl"; */
+#endif
+
+cpp_quote("DEFINE_GUID(CLSID_NetSharingManager,0x5c63c1ad,0x3956,0x4ff8,0x84,0x86,0x40,0x03,0x47,0x58,0x31,0x5b);")
+
+[
+ object,
+ uuid(c08956a1-1cd3-11d1-b1c5-00805fc1270e),
+ pointer_default(unique)
+]
+interface INetConnection : IUnknown
+{
+ typedef enum tagNETCON_CHARACTERISTIC_FLAGS
+ {
+ NCCF_NONE = 0x0000,
+ NCCF_ALL_USERS = 0x0001,
+ NCCF_ALLOW_DUPLICATION = 0x0002,
+ NCCF_ALLOW_REMOVAL = 0x0004,
+ NCCF_ALLOW_RENAME = 0x0008,
+ NCCF_INCOMING_ONLY = 0x0020,
+ NCCF_OUTGOING_ONLY = 0x0040,
+ NCCF_BRANDED = 0x0080,
+ NCCF_SHARED = 0x0100,
+ NCCF_BRIDGED = 0x0200,
+ NCCF_FIREWALLED = 0x0400,
+ NCCF_DEFAULT = 0x0800,
+ NCCF_HOMENET_CAPABLE = 0x1000,
+ NCCF_SHARED_PRIVATE = 0x2000,
+ NCCF_QUARANTINED = 0x4000,
+ NCCF_RESERVED = 0x8000,
+ NCCF_BLUETOOTH_MASK = 0x000F0000,
+ NCCF_LAN_MASK = 0x00F00000
+ } NETCON_CHARACTERISTIC_FLAGS;
+
+ typedef enum tagNETCON_STATUS
+ {
+ NCS_DISCONNECTED,
+ NCS_CONNECTING,
+ NCS_CONNECTED,
+ NCS_DISCONNECTING,
+ NCS_HARDWARE_NOT_PRESENT,
+ NCS_HARDWARE_DISABLED,
+ NCS_HARDWARE_MALFUNCTION,
+ NCS_MEDIA_DISCONNECTED,
+ NCS_AUTHENTICATING,
+ NCS_AUTHENTICATION_SUCCEEDED,
+ NCS_AUTHENTICATION_FAILED,
+ NCS_INVALID_ADDRESS,
+ NCS_CREDENTIALS_REQUIRED
+ } NETCON_STATUS;
+
+ typedef enum tagNETCON_TYPE
+ {
+ NCT_DIRECT_CONNECT,
+ NCT_INBOUND,
+ NCT_INTERNET,
+ NCT_LAN,
+ NCT_PHONE,
+ NCT_TUNNEL,
+ NCT_BRIDGE
+ } NETCON_TYPE;
+
+ typedef enum tagNETCON_MEDIATYPE
+ {
+ NCM_NONE,
+ NCM_DIRECT,
+ NCM_ISDN,
+ NCM_LAN,
+ NCM_PHONE,
+ NCM_TUNNEL,
+ NCM_PPPOE,
+ NCM_BRIDGE,
+ NCM_SHAREDACCESSHOST_LAN,
+ NCM_SHAREDACCESSHOST_RAS
+ } NETCON_MEDIATYPE;
+
+ typedef struct tagNETCON_PROPERTIES
+ {
+ GUID guidId;
+ [string] LPWSTR pszwName;
+ [string] LPWSTR pszwDeviceName;
+ NETCON_STATUS Status;
+ NETCON_MEDIATYPE MediaType;
+ DWORD dwCharacter;
+ CLSID clsidThisObject;
+ CLSID clsidUiObject;
+ } NETCON_PROPERTIES;
+
+ HRESULT Connect();
+
+ HRESULT Disconnect();
+
+ HRESULT Delete();
+
+ HRESULT Duplicate(
+ [in, string] LPCWSTR pszwDuplicateName,
+ [out] INetConnection **ppCon);
+
+ HRESULT GetProperties([out] NETCON_PROPERTIES **ppProps);
+
+ HRESULT GetUiObjectClassId([out, ref] CLSID *pclsid);
+
+ HRESULT Rename([in, string] LPCWSTR pszwNewName);
+}
+
+[
+ object,
+ uuid(24b7e9b5-e38f-4685-851b-00892cf5f940),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetSharingPortMappingProps : IDispatch
+{
+ [propget, id(1)]
+ HRESULT Name([out, retval] BSTR *pbstrName);
+
+ [propget, id(2)]
+ HRESULT IPProtocol([out, retval] UCHAR *pucIPProt);
+
+ [propget, id(3)]
+ HRESULT ExternalPort([out, retval] long *pusPort);
+
+ [propget, id(4)]
+ HRESULT InternalPort([out, retval] long *pusPort);
+
+ [propget, id(5)]
+ HRESULT Options([out, retval] long *pdwOptions);
+
+ [propget, id(6)]
+ HRESULT TargetName([out, retval] BSTR *pbstrTargetName);
+
+ [propget, id(7)]
+ HRESULT TargetIPAddress([out, retval] BSTR *pbstrTargetIPAddress);
+
+ [propget, id(8)]
+ HRESULT Enabled([out, retval] VARIANT_BOOL *pbool);
+}
+
+[
+ object,
+ uuid(c08956b1-1cd3-11d1-b1c5-00805fc1270e),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetSharingPortMapping : IDispatch
+{
+ [id(1)]
+ HRESULT Disable();
+
+ [id(2)]
+ HRESULT Enable();
+
+ [propget, id(3)]
+ HRESULT Properties([out, retval] INetSharingPortMappingProps **ppNSPMP);
+
+ [id(4)]
+ HRESULT Delete();
+};
+[
+ object,
+ uuid(02e4a2de-da20-4e34-89c8-ac22275a010b),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetSharingPortMappingCollection : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), restricted]
+ HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+ [propget, id(1)]
+ HRESULT Count([out, retval] long *pVal);
+}
+
+[
+ object,
+ uuid(c08956b6-1cd3-11d1-b1c5-00805fc1270e),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetSharingConfiguration : IDispatch
+{
+ typedef enum tagSHARINGCONNECTIONTYPE {
+ ICSSHARINGTYPE_PUBLIC,
+ ICSSHARINGTYPE_PRIVATE
+ } SHARINGCONNECTIONTYPE, *LPSHARINGCONNECTIONTYPE;
+
+ typedef enum tagSHARINGCONNECTION_ENUM_FLAGS {
+ ICSSC_DEFAULT,
+ ICSSC_ENABLED
+ } SHARINGCONNECTION_ENUM_FLAGS;
+
+ typedef enum tagICS_TARGETTYPE {
+ ICSTT_NAME,
+ ICSTT_IPADDRESS
+ }ICS_TARGETTYPE;
+
+ [propget, id(1)]
+ HRESULT SharingEnabled([out, retval] VARIANT_BOOL *pbEnabled);
+
+ [propget, id(2)]
+ HRESULT SharingConnectionType([out, retval] SHARINGCONNECTIONTYPE *pType);
+
+ [id(3)]
+ HRESULT DisableSharing();
+
+ [id(4)]
+ HRESULT EnableSharing([in] SHARINGCONNECTIONTYPE Type);
+
+ [propget, id(5)]
+ HRESULT InternetFirewallEnabled([out, retval] VARIANT_BOOL *pbEnabled);
+
+ [id(6)]
+ HRESULT DisableInternetFirewall();
+
+ [id(7)]
+ HRESULT EnableInternetFirewall();
+
+ [propget, id(8)]
+ HRESULT EnumPortMappings(
+ [in] SHARINGCONNECTION_ENUM_FLAGS Flags,
+ [out, retval] INetSharingPortMappingCollection **ppColl);
+
+ [id(9)]
+ HRESULT AddPortMapping(
+ [in] BSTR bstrName,
+ [in] UCHAR ucIPProtocol,
+ [in] USHORT usExternalPort,
+ [in] USHORT usInternalPort,
+ [in] DWORD dwOptions,
+ [in] BSTR bstrTargetNameOrIPAddress,
+ [in] ICS_TARGETTYPE eTargetType,
+ [out, retval] INetSharingPortMapping **ppMapping );
+
+ [id(10)]
+ HRESULT RemovePortMapping([in] INetSharingPortMapping *pMapping);
+}
+
+[
+ object,
+ uuid(c08956b4-1cd3-11d1-b1c5-00805fc1270e),
+ pointer_default(unique)
+]
+interface IEnumNetSharingPublicConnection : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] VARIANT *rgVar,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip([in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone([out] IEnumNetSharingPublicConnection **ppenum);
+}
+
+[
+ object,
+ uuid(c08956b5-1cd3-11d1-b1c5-00805fc1270e),
+ pointer_default(unique)
+]
+interface IEnumNetSharingPrivateConnection : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pCeltFetched)] VARIANT *rgVar,
+ [out] ULONG *pCeltFetched);
+
+ HRESULT Skip([in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone([out] IEnumNetSharingPrivateConnection **ppenum);
+}
+
+[
+ object,
+ uuid(f4277c95-ce5b-463d-8167-5662d9bcaa72),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetConnectionProps : IDispatch
+{
+ [propget, id(1)]
+ HRESULT Guid([out, retval] BSTR *pbstrGuid);
+
+ [propget, id(2)]
+ HRESULT Name([out, retval] BSTR *pbstrName);
+
+ [propget, id(3)]
+ HRESULT DeviceName([out, retval] BSTR *pbstrDeviceName);
+
+ [propget, id(4)]
+ HRESULT Status([out, retval] NETCON_STATUS *pStatus);
+
+ [propget, id(5)]
+ HRESULT MediaType([out, retval] NETCON_MEDIATYPE *pMediaType);
+
+ [propget, id(6)]
+ HRESULT Characteristics([out, retval] DWORD *pdwFlags);
+}
+
+[
+ object,
+ uuid(7d7a6355-f372-4971-a149-bfc927be762a),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetSharingPublicConnectionCollection : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), restricted]
+ HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+ [propget, id(1)]
+ HRESULT Count([out, retval] long *pVal);
+}
+
+[
+ object,
+ uuid(33c4643c-7811-46fa-a89a-768597bd7223),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+ ]
+interface INetSharingEveryConnectionCollection : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), restricted]
+ HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+ [propget, id(1)]
+ HRESULT Count([out, retval] long *pVal);
+}
+
+[
+ object,
+ uuid(38ae69e0-4409-402a-a2cb-e965c727f840),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+ ]
+interface INetSharingPrivateConnectionCollection : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), restricted]
+ HRESULT _NewEnum([out, retval] IUnknown **pVal);
+
+ [propget, id(1)]
+ HRESULT Count([out, retval] long *pVal);
+}
+
+[
+ object,
+ uuid(c08956b7-1cd3-11d1-b1c5-00805fc1270e),
+ oleautomation,
+ dual,
+ pointer_default(unique)
+]
+interface INetSharingManager : IDispatch
+{
+ [propget, id(1)]
+ HRESULT SharingInstalled([out, retval] VARIANT_BOOL *pbInstalled);
+
+ [propget, id(2)]
+ HRESULT EnumPublicConnections(
+ [in] SHARINGCONNECTION_ENUM_FLAGS Flags,
+ [out, retval] INetSharingPublicConnectionCollection **ppColl);
+
+ [propget, id(3)]
+ HRESULT EnumPrivateConnections(
+ [in] SHARINGCONNECTION_ENUM_FLAGS Flags,
+ [out, retval] INetSharingPrivateConnectionCollection **ppColl);
+
+ [propget, id(6)]
+ HRESULT INetSharingConfigurationForINetConnection(
+ [in] INetConnection *pNetConnection,
+ [out, retval] INetSharingConfiguration **ppNetSharingConfiguration);
+
+ [propget, id(7)]
+ HRESULT EnumEveryConnection([out, retval] INetSharingEveryConnectionCollection **ppColl);
+
+ [propget, id(8)]
+ HRESULT NetConnectionProps(
+ [in] INetConnection *pNetConnection,
+ [out, retval] INetConnectionProps **ppProps);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl
new file mode 100644
index 00000000..f5cddb89
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/netfw.idl
@@ -0,0 +1,479 @@
+/*
+ * Copyright 2007 Jeff Latimer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ *****************************************************************************
+ *
+ * The firewall management interface
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "icftypes.idl";
+import "oaidl.idl";
+
+[
+ object,
+ uuid(A6207B2E-7CDD-426A-951E-5E1CBC5AFEAD),
+ dual
+]
+interface INetFwIcmpSettings : IDispatch
+{
+ [id(1), propget]
+ HRESULT AllowOutboundDestinationUnreachable([out, retval] VARIANT_BOOL* allow);
+
+ [id(1), propput]
+ HRESULT AllowOutboundDestinationUnreachable( [in] VARIANT_BOOL allow );
+
+ [id(2), propget]
+ HRESULT AllowRedirect( [out, retval] VARIANT_BOOL* allow );
+
+ [id(2), propput]
+ HRESULT AllowRedirect( [in] VARIANT_BOOL allow );
+
+ [id(3), propget]
+ HRESULT AllowInboundEchoRequest( [out, retval] VARIANT_BOOL* allow );
+
+ [id(3), propput]
+ HRESULT AllowInboundEchoRequest( [in] VARIANT_BOOL allow );
+
+ [id(4), propget]
+ HRESULT AllowOutboundTimeExceeded( [out, retval] VARIANT_BOOL* allow );
+
+ [id(4), propput]
+ HRESULT AllowOutboundTimeExceeded( [in] VARIANT_BOOL allow );
+
+ [id(5), propget]
+ HRESULT AllowOutboundParameterProblem( [out, retval] VARIANT_BOOL* allow );
+
+ [id(5), propput]
+ HRESULT AllowOutboundParameterProblem( [in] VARIANT_BOOL allow );
+
+ [id(6), propget]
+ HRESULT AllowOutboundSourceQuench( [out, retval] VARIANT_BOOL* allow );
+
+ [id(6), propput]
+ HRESULT AllowOutboundSourceQuench( [in] VARIANT_BOOL allow );
+
+ [id(7), propget]
+ HRESULT AllowInboundRouterRequest( [out, retval] VARIANT_BOOL* allow );
+
+ [id(7), propput]
+ HRESULT AllowInboundRouterRequest( [in] VARIANT_BOOL allow );
+
+ [id(8), propget]
+ HRESULT AllowInboundTimestampRequest( [out, retval] VARIANT_BOOL* allow );
+
+ [id(8), propput]
+ HRESULT AllowInboundTimestampRequest( [in] VARIANT_BOOL allow );
+
+ [id(9), propget]
+ HRESULT AllowInboundMaskRequest( [out, retval] VARIANT_BOOL* allow );
+
+ [id(9), propput]
+ HRESULT AllowInboundMaskRequest( [in] VARIANT_BOOL allow );
+
+ [id(10), propget]
+ HRESULT AllowOutboundPacketTooBig( [out, retval] VARIANT_BOOL* allow );
+
+ [id(10), propput]
+ HRESULT AllowOutboundPacketTooBig( [in] VARIANT_BOOL allow );
+}
+
+[
+ object,
+ uuid(E0483BA0-47FF-4D9C-A6D6-7741D0B195F7),
+ dual
+]
+interface INetFwOpenPort : IDispatch
+{
+ [id(1), propget]
+ HRESULT Name( [out, retval] BSTR* name );
+
+ [id(1), propput]
+ HRESULT Name( [in] BSTR name );
+
+ [id(2), propget]
+ HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+ [id(2), propput]
+ HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+ [id(3), propget]
+ HRESULT Protocol( [out, retval] NET_FW_IP_PROTOCOL* ipProtocol );
+
+ [id(3), propput]
+ HRESULT Protocol( [in] NET_FW_IP_PROTOCOL ipProtocol );
+
+ [id(4), propget]
+ HRESULT Port( [out, retval] LONG* portNumber );
+
+ [id(4), propput]
+ HRESULT Port( [in] LONG portNumber );
+
+ [id(5), propget]
+ HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+ [id(5), propput]
+ HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+ [id(6), propget]
+ HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+ [id(6), propput]
+ HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+ [id(7), propget]
+ HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+ [id(7), propput]
+ HRESULT Enabled( [in] VARIANT_BOOL enabled );
+
+ [id(8), propget]
+ HRESULT BuiltIn( [out, retval] VARIANT_BOOL* builtIn );
+}
+
+[
+ object,
+ uuid(C0E9D7FA-E07E-430A-B19A-090CE82D92E2),
+ dual
+]
+interface INetFwOpenPorts : IDispatch
+{
+ [id(1), propget]
+ HRESULT Count( [out, retval] long* count );
+
+ [id(2)]
+ HRESULT Add( [in] INetFwOpenPort* port );
+
+ [id(3)]
+ HRESULT Remove( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol );
+
+ [id(4)]
+ HRESULT Item( [in] LONG portNumber, [in] NET_FW_IP_PROTOCOL ipProtocol,
+ [out, retval] INetFwOpenPort** openPort );
+
+ [id(DISPID_NEWENUM), propget, restricted]
+ HRESULT _NewEnum( [out, retval] IUnknown** newEnum );
+}
+
+[
+ object,
+ uuid(79FD57C8-908E-4A36-9888-D5B3F0A444CF),
+ dual
+]
+interface INetFwService : IDispatch
+{
+ [id(1), propget]
+ HRESULT Name( [out, retval] BSTR* name );
+
+ [id(2), propget]
+ HRESULT Type( [out, retval] NET_FW_SERVICE_TYPE* type );
+
+ [id(3), propget]
+ HRESULT Customized( [out, retval] VARIANT_BOOL* customized );
+
+ [id(4), propget]
+ HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+ [id(4), propput]
+ HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+ [id(5), propget]
+ HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+ [id(5), propput]
+ HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+ [id(6), propget]
+ HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+ [id(6), propput]
+ HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+ [id(7), propget]
+ HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+ [id(7), propput]
+ HRESULT Enabled( [in] VARIANT_BOOL enabled );
+
+ [id(8), propget]
+ HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts );
+}
+
+[
+ object,
+ uuid(79649BB4-903E-421B-94C9-79848E79F6EE),
+ dual
+]
+interface INetFwServices : IDispatch
+{
+ [id(1), propget]
+ HRESULT Count( [out, retval] long* count );
+
+ [id(2)]
+ HRESULT Item( [in] NET_FW_SERVICE_TYPE svcType,
+ [out, retval] INetFwService** service );
+
+ [id(DISPID_NEWENUM), propget, restricted]
+ HRESULT _NewEnum( [out, retval] IUnknown** newEnum );
+}
+
+[
+ object,
+ uuid(B5E64FFA-C2C5-444E-A301-FB5E00018050),
+ dual
+]
+interface INetFwAuthorizedApplication : IDispatch
+{
+ [id(1), propget]
+ HRESULT Name( [out, retval] BSTR* name );
+
+ [id(1), propput]
+ HRESULT Name( [in] BSTR name );
+
+ [id(2), propget]
+ HRESULT ProcessImageFileName( [out, retval] BSTR* imageFileName );
+
+ [id(2), propput]
+ HRESULT ProcessImageFileName( [in] BSTR imageFileName );
+
+ [id(3), propget]
+ HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+ [id(3), propput]
+ HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+ [id(4), propget]
+ HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+ [id(4), propput]
+ HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+ [id(5), propget]
+ HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+ [id(5), propput]
+ HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+ [id(6), propget]
+ HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+ [id(6), propput]
+ HRESULT Enabled( [in] VARIANT_BOOL enabled );
+}
+
+[
+ object,
+ uuid(D4BECDDF-6F73-4A83-B832-9C66874CD20E),
+ dual
+]
+interface INetFwRemoteAdminSettings : IDispatch
+{
+ [id(1), propget]
+ HRESULT IpVersion( [out, retval] NET_FW_IP_VERSION* ipVersion );
+
+ [id(1), propput]
+ HRESULT IpVersion( [in] NET_FW_IP_VERSION ipVersion );
+
+ [id(2), propget]
+ HRESULT Scope( [out, retval] NET_FW_SCOPE* scope );
+
+ [id(2), propput]
+ HRESULT Scope( [in] NET_FW_SCOPE scope );
+
+ [id(3), propget]
+ HRESULT RemoteAddresses( [out, retval] BSTR* remoteAddrs );
+
+ [id(3), propput]
+ HRESULT RemoteAddresses( [in] BSTR remoteAddrs );
+
+ [id(4), propget]
+ HRESULT Enabled( [out, retval] VARIANT_BOOL* enabled );
+
+ [id(4), propput]
+ HRESULT Enabled( [in] VARIANT_BOOL enabled );
+}
+
+
+[
+ object,
+ uuid(644EFD52-CCF9-486C-97A2-39F352570B30),
+ dual
+]
+interface INetFwAuthorizedApplications : IDispatch
+{
+ [id(1), propget]
+ HRESULT Count( [out, retval] long* count );
+
+ [id(2)]
+ HRESULT Add( [in] INetFwAuthorizedApplication* app );
+
+ [id(3)]
+ HRESULT Remove( [in] BSTR imageFileName );
+
+ [id(4)]
+ HRESULT Item( [in] BSTR imageFileName,
+ [out, retval] INetFwAuthorizedApplication** app );
+
+ [id(DISPID_NEWENUM), propget, restricted]
+ HRESULT _NewEnum( [out, retval] IUnknown** newEnum );
+}
+
+[
+ object,
+ uuid(174A0DDA-E9F9-449D-993B-21AB667CA456),
+ dual
+]
+interface INetFwProfile : IDispatch
+{
+ [id(1), propget]
+ HRESULT Type( [out, retval] NET_FW_PROFILE_TYPE* type );
+
+ [id(2), propget]
+ HRESULT FirewallEnabled( [out, retval] VARIANT_BOOL* enabled );
+
+ [id(2), propput]
+ HRESULT FirewallEnabled( [in] VARIANT_BOOL enabled );
+
+ [id(3), propget]
+ HRESULT ExceptionsNotAllowed( [out, retval] VARIANT_BOOL* notAllowed );
+
+ [id(3), propput]
+ HRESULT ExceptionsNotAllowed( [in] VARIANT_BOOL notAllowed );
+
+ [id(4), propget]
+ HRESULT NotificationsDisabled( [out, retval] VARIANT_BOOL* disabled );
+
+ [id(4), propput]
+ HRESULT NotificationsDisabled( [in] VARIANT_BOOL disabled );
+
+ [id(5), propget]
+ HRESULT UnicastResponsesToMulticastBroadcastDisabled( [out, retval] VARIANT_BOOL* disabled );
+
+ [id(5), propput]
+ HRESULT UnicastResponsesToMulticastBroadcastDisabled( [in] VARIANT_BOOL disabled );
+
+ [id(6), propget]
+ HRESULT RemoteAdminSettings( [out, retval] INetFwRemoteAdminSettings** remoteAdminSettings );
+
+ [id(7), propget]
+ HRESULT IcmpSettings( [out, retval] INetFwIcmpSettings** icmpSettings );
+
+ [id(8), propget]
+ HRESULT GloballyOpenPorts( [out, retval] INetFwOpenPorts** openPorts );
+
+ [id(9), propget]
+ HRESULT Services( [out, retval] INetFwServices** services );
+
+ [id(10), propget]
+ HRESULT AuthorizedApplications( [out, retval] INetFwAuthorizedApplications** apps );
+}
+
+[
+ object,
+ uuid(D46D2478-9AC9-4008-9DC7-5563CE5536CC),
+ dual
+]
+interface INetFwPolicy : IDispatch
+{
+ [id(1), propget]
+ HRESULT CurrentProfile( [out, retval] INetFwProfile** profile );
+
+ [id(2)]
+ HRESULT GetProfileByType( [in] NET_FW_PROFILE_TYPE profileType,
+ [out, retval] INetFwProfile** profile );
+}
+
+[
+ object,
+ uuid(F7898AF5-CAC4-4632-A2EC-DA06E5111AF2),
+ dual
+]
+interface INetFwMgr : IDispatch
+{
+ [id(1), propget]
+ HRESULT LocalPolicy( [out, retval] INetFwPolicy** localPolicy );
+
+ [id(2), propget]
+ HRESULT CurrentProfileType( [out, retval] NET_FW_PROFILE_TYPE* profileType );
+
+ [id(3)]
+ HRESULT RestoreDefaults();
+
+ [id(4)]
+ HRESULT IsPortAllowed( [in] BSTR imageFileName, [in] NET_FW_IP_VERSION ipVersion,
+ [in] LONG portNumber, [in] BSTR localAddress,
+ [in] NET_FW_IP_PROTOCOL ipProtocol, [out] VARIANT* allowed,
+ [out] VARIANT* restricted );
+
+ [id(5)]
+ HRESULT IsIcmpTypeAllowed( [in] NET_FW_IP_VERSION ipVersion, [in] BSTR localAddress,
+ [in] BYTE type, [out] VARIANT* allowed,
+ [out] VARIANT* restricted );
+}
+
+[
+ uuid(DB4F3345-3EF8-45ED-B976-25A6D3B81B71),
+ version(1.0)
+]
+library NetFwPublicTypeLib
+{
+ importlib("stdole2.tlb");
+ interface INetFwRemoteAdminSettings;
+ interface INetFwIcmpSettings;
+ interface INetFwOpenPort;
+ interface INetFwOpenPorts;
+ interface INetFwService;
+ interface INetFwServices;
+ interface INetFwAuthorizedApplication;
+ interface INetFwAuthorizedApplications;
+ interface INetFwProfile;
+ interface INetFwPolicy;
+ interface INetFwMgr;
+
+ [
+ uuid(0CA545C6-37AD-4A6C-BF92-9F7610067EF5)
+ ]
+ coclass NetFwOpenPort
+ {
+ [default] interface INetFwOpenPort;
+ }
+
+ [
+ uuid(EC9846B3-2762-4A6B-A214-6ACB603462D2)
+ ]
+ coclass NetFwAuthorizedApplication
+ {
+ [default] interface INetFwAuthorizedApplication;
+ }
+
+ [
+ uuid(304CE942-6E39-40D8-943A-B913C40C9CD4)
+ ]
+ coclass NetFwMgr
+ {
+ [default] interface INetFwMgr;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h
new file mode 100644
index 00000000..fdd447f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/nldef.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NLDEF_H
+#define __WINE_NLDEF_H
+
+typedef enum
+{
+ IpPrefixOriginOther = 0,
+ IpPrefixOriginManual,
+ IpPrefixOriginWellKnown,
+ IpPrefixOriginDhcp,
+ IpPrefixOriginRouterAdvertisement,
+ IpPrefixOriginUnchanged = 16,
+} NL_PREFIX_ORIGIN;
+
+typedef enum
+{
+ IpSuffixOriginOther = 0,
+ IpSuffixOriginManual,
+ IpSuffixOriginWellKnown,
+ IpSuffixOriginDhcp,
+ IpSuffixOriginLinkLayerAddress,
+ IpSuffixOriginRandom,
+ IpSuffixOriginUnchanged = 16,
+} NL_SUFFIX_ORIGIN;
+
+typedef enum
+{
+ IpDadStateInvalid = 0,
+ IpDadStateTentative,
+ IpDadStateDuplicate,
+ IpDadStateDeprecated,
+ IpDadStatePreferred,
+} NL_DAD_STATE;
+
+
+typedef enum
+{
+#define MAKE_ROUTE_PROTOCOL(name, value) \
+ MIB_IPPROTO_ ## name = value, \
+ PROTO_IP_ ## name = value
+
+ MAKE_ROUTE_PROTOCOL(OTHER, 1),
+ MAKE_ROUTE_PROTOCOL(LOCAL, 2),
+ MAKE_ROUTE_PROTOCOL(NETMGMT, 3),
+ MAKE_ROUTE_PROTOCOL(ICMP, 4),
+ MAKE_ROUTE_PROTOCOL(EGP, 5),
+ MAKE_ROUTE_PROTOCOL(GGP, 6),
+ MAKE_ROUTE_PROTOCOL(HELLO, 7),
+ MAKE_ROUTE_PROTOCOL(RIP, 8),
+ MAKE_ROUTE_PROTOCOL(IS_IS, 9),
+ MAKE_ROUTE_PROTOCOL(ES_IS, 10),
+ MAKE_ROUTE_PROTOCOL(CISCO, 11),
+ MAKE_ROUTE_PROTOCOL(BBN, 12),
+ MAKE_ROUTE_PROTOCOL(OSPF, 13),
+ MAKE_ROUTE_PROTOCOL(BGP, 14),
+
+ MAKE_ROUTE_PROTOCOL(NT_AUTOSTATIC, 10002),
+ MAKE_ROUTE_PROTOCOL(NT_STATIC, 10006),
+ MAKE_ROUTE_PROTOCOL(NT_STATIC_NON_DOD, 10007),
+} NL_ROUTE_PROTOCOL, *PNL_ROUTE_PROTOCOL;
+
+
+#endif /* __WINE_NLDEF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h
new file mode 100644
index 00000000..c5012551
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/npapi.h
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2004 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NPAPI_H__
+#define __WINE_NPAPI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* capabilities */
+#define WNNC_SPEC_VERSION 0x00000001
+#define WNNC_SPEC_VERSION51 0x00050001
+#define WNNC_NET_TYPE 0x00000002
+#define WNNC_NET_NONE 0x00000000
+
+#define WNNC_DRIVER_VERSION 0x00000003
+
+#define WNNC_USER 0x00000004
+#define WNNC_USR_GETUSER 0x00000001
+
+#define WNNC_CONNECTION 0x00000006
+#define WNNC_CON_ADDCONNECTION 0x00000001
+#define WNNC_CON_CANCELCONNECTION 0x00000002
+#define WNNC_CON_GETCONNECTIONS 0x00000004
+#define WNNC_CON_ADDCONNECTION3 0x00000008
+#define WNNC_CON_GETPERFORMANCE 0x00000040
+#define WNNC_CON_DEFER 0x00000080
+
+#define WNNC_DIALOG 0x00000008
+#define WNNC_DLG_DEVICEMODE 0x00000001
+#define WNNC_DLG_PROPERTYDIALOG 0x00000020
+#define WNNC_DLG_SEARCHDIALOG 0x00000040
+#define WNNC_DLG_FORMATNETWORKNAME 0x00000080
+#define WNNC_DLG_PERMISSIONEDITOR 0x00000100
+#define WNNC_DLG_GETRESOURCEPARENT 0x00000200
+#define WNNC_DLG_GETRESOURCEINFORMATION 0x00000800
+
+#define WNNC_ADMIN 0x00000009
+#define WNNC_ADM_GETDIRECTORYTYPE 0x00000001
+#define WNNC_ADM_DIRECTORYNOTIFY 0x00000002
+
+#define WNNC_ENUMERATION 0x0000000b
+#define WNNC_ENUM_GLOBAL 0x00000001
+#define WNNC_ENUM_LOCAL 0x00000002
+#define WNNC_ENUM_CONTEXT 0x00000004
+
+#define WNNC_START 0x0000000c
+#define WNNC_WAIT_FOR_START 0x00000001
+
+typedef DWORD (APIENTRY *PF_NPGetCaps)(DWORD ndex);
+
+/* get user */
+typedef DWORD (APIENTRY *PF_NPGetUser)(LPWSTR lpName, LPWSTR lpUserName,
+ LPDWORD lpnBufferLen);
+
+/* enumeration-related */
+typedef DWORD (APIENTRY *PF_NPOpenEnum)(DWORD dwScope, DWORD dwType, DWORD dwUsage,
+ LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum);
+typedef DWORD (APIENTRY *PF_NPEnumResource)(HANDLE hEnum, LPDWORD lpcCount,
+ LPVOID lpBuffer, LPDWORD lpBufferSize);
+typedef DWORD (APIENTRY *PF_NPCloseEnum)(HANDLE hEnum);
+typedef DWORD (APIENTRY *PF_NPGetResourceInformation)(LPNETRESOURCEW lpNetResource,
+ LPVOID lpBuffer, LPDWORD lpcbBuffer, LPWSTR* lplpSystem);
+
+/* connection-related */
+typedef DWORD (APIENTRY *PF_NPAddConnection)(LPNETRESOURCEW lpNetResource,
+ LPWSTR lpPassword, LPWSTR lpUserName);
+typedef DWORD (APIENTRY *PF_NPAddConnection3)(HWND hwndOwner,
+ LPNETRESOURCEW lpNetResource, LPWSTR lpPassword, LPWSTR lpUserName,
+ DWORD dwFlags);
+typedef DWORD (APIENTRY *PF_NPCancelConnection)(LPWSTR lpName, BOOL fForce);
+typedef DWORD (APIENTRY *PF_NPGetConnection)(LPWSTR lpLocalName,
+ LPWSTR lpRemoteName, LPDWORD lpnBufferLen);
+
+/* network name manipulation */
+typedef DWORD (APIENTRY *PF_NPGetUniversalName)(LPWSTR lpLocalPath,
+ DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpnBufferSize);
+typedef DWORD (APIENTRY *PF_NPFormatNetworkName)(LPWSTR lpRemoteName,
+ LPWSTR lpFormattedName, LPDWORD lpnLength, DWORD dwFlags,
+ DWORD dwAveCharPerLine);
+
+/* dialogs */
+typedef DWORD (APIENTRY *PF_NPDeviceMode)(HWND hParent);
+
+/* search dialog */
+#define WNSRCH_REFRESH_FIRST_LEVEL 0x00000001
+
+typedef DWORD (APIENTRY *PF_NPSearchDialog)(HWND hwndParent,
+ LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, DWORD cbBuffer,
+ LPDWORD lpnFlags);
+
+/* property dialog */
+
+#define WNTYPE_DRIVE 1
+#define WNTYPE_FILE 2
+#define WNTYPE_PRINTER 3
+#define WNTYPE_COMM 4
+
+#define WNPS_FILE 0
+#define WNPS_DIR 1
+#define WNPS_MULT 2
+
+typedef DWORD (APIENTRY *PF_NPGetPropertyText)(DWORD iButton, DWORD nPropSel,
+ LPWSTR lpName, LPWSTR lpButtonName, DWORD nButtonNameLen, DWORD nType);
+
+typedef DWORD (APIENTRY *PF_NPPropertyDialog)(HWND hwndParent, DWORD iButtonDlg,
+ DWORD nPropSel, LPWSTR lpFileName, DWORD nType);
+
+/* admin */
+#define WNDT_NORMAL 0
+#define WNDT_NETWORK 1
+
+#define WNDN_MKDIR 1
+#define WNDN_RMDIR 2
+#define WNDN_MVDIR 3
+
+typedef DWORD (APIENTRY *PF_NPGetDirectoryType)(LPWSTR lpName, LPINT lpType,
+ BOOL bFlushCache);
+typedef DWORD (APIENTRY *PF_NPDirectoryNotify)(HWND hwnd, LPWSTR lpDir,
+ DWORD dwOper);
+
+/* permission editor dialogs */
+#define WNPERMC_PERM 0x00000001
+#define WNPERMC_AUDIT 0x00000002
+#define WNPERMC_OWNER 0x00000004
+
+typedef DWORD (APIENTRY *PF_NPFMXGetPermCaps)(LPWSTR lpDriveName);
+
+#define WNPERM_DLG_PERM 0
+#define WNPERM_DLG_AUDIT 1
+#define WNPERM_DLG_OWNER 2
+
+typedef DWORD (APIENTRY *PF_NPFMXEditPerm)(LPWSTR lpDriveName, HWND hwndFMX,
+ DWORD nDialogType);
+
+typedef DWORD (APIENTRY *PF_NPFMXGetPermHelp)(LPWSTR lpDriveName,
+ DWORD nDialogType, BOOL fDirectory, LPVOID lpFileNameBuffer,
+ LPDWORD lpBufferSize, LPDWORD lpnHelpContext);
+
+VOID WINAPI WNetSetLastErrorA(DWORD err, LPSTR lpError, LPSTR lpProviders);
+VOID WINAPI WNetSetLastErrorW(DWORD err, LPWSTR lpError, LPWSTR lpProviders);
+#define WNetSetLastError WINELIB_NAME_AW(WNetSetLastError)
+
+/* provider classes */
+#define WN_NETWORK_CLASS 0x00000001
+#define WN_CREDENTIAL_CLASS 0x00000002
+#define WN_PRIMARY_AUTHENT_CLASS 0x00000004
+#define WN_SERVICE_CLASS 0x00000008
+
+#define WN_VALID_LOGON_ACCOUNT 0x00000001
+#define WN_NT_PASSWORD_CHANGED 0x00000002
+
+/* notifications */
+typedef DWORD (APIENTRY *PF_NPLogonNotify)(PLUID lpLogonId,
+ LPCWSTR lpAuthentInfoType, LPVOID lpAuthentInfo,
+ LPCWSTR lpPreviousAuthentInfoType, LPVOID lpPreviousAuthentInfo,
+ LPWSTR lpStationName, LPVOID StationHandle, LPWSTR *lpLogonScript);
+typedef DWORD (APIENTRY *PF_NPPasswordChangeNotify)(LPCWSTR lpAuthentInfoType,
+ LPVOID lpAuthentInfo, LPCWSTR lpPreviousAuthentInfoType,
+ LPVOID lpPreviousAuthentInfo, LPWSTR lpStationName, LPVOID StationHandle,
+ DWORD dwChangeInfo);
+
+#define NOTIFY_PRE 0x00000001
+#define NOTIFY_POST 0x00000002
+
+typedef struct _NOTIFYINFO
+{
+ DWORD dwNotifyStatus;
+ DWORD dwOperationStatus;
+ LPVOID lpContext;
+} NOTIFYINFO, *LPNOTIFYINFO;
+
+/* FIXME: NetResource is declared as a NETRESOURCE in psdk, not a NETRESOURCEW,
+ * but how can the type change in a service provider? Defaulting to wide-char
+ * for consistency with the rest of the api.
+ */
+typedef struct _NOTIFYADD
+{
+ HWND hwndOwner;
+ NETRESOURCEW NetResource;
+ DWORD dwAddFlags;
+} NOTIFYADD, *LPNOTIFYADD;
+
+/* FIXME: lpName and lpProvider are declared as LPTSTRs in psdk, but again
+ * for consistency with rest of api defaulting to LPWSTRs.
+ */
+typedef struct _NOTIFYCANCEL
+{
+ LPWSTR lpName;
+ LPWSTR lpProvider;
+ DWORD dwFlags;
+ BOOL fForce;
+} NOTIFYCANCEL, *LPNOTIFYCANCEL;
+
+typedef DWORD (APIENTRY *PF_AddConnectNotify)(LPNOTIFYINFO lpNotifyInfo,
+ LPNOTIFYADD lpAddInfo);
+typedef DWORD (APIENTRY *PF_CancelConnectNotify)(LPNOTIFYINFO lpNotifyInfo,
+ LPNOTIFYADD lpAddInfo);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef __WINE_NPAPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h
new file mode 100644
index 00000000..04b63c1b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/nspapi.h
@@ -0,0 +1,214 @@
+/* NSPAPI.H -- winsock 1.1
+ * not supported on win95
+ *
+ * Copyright (C) 2001 Stefan Leichter
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_NSPAPI_
+#define _WINE_NSPAPI_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+/*
+ * constants
+ */
+#define XP_CONNECTIONLESS 0x00000001
+#define XP_GUARANTEED_DELIVERY 0x00000002
+#define XP_GUARANTEED_ORDER 0x00000004
+#define XP_MESSAGE_ORIENTED 0x00000008
+#define XP_PSEUDO_STREAM 0x00000010
+#define XP_GRACEFUL_CLOSE 0x00000020
+#define XP_EXPEDITED_DATA 0x00000040
+#define XP_CONNECT_DATA 0x00000080
+#define XP_DISCONNECT_DATA 0x00000100
+#define XP_SUPPORTS_BROADCAST 0x00000200
+#define XP_SUPPORTS_MULTICAST 0x00000400
+#define XP_BANDWIDTH_ALLOCATION 0x00000800
+#define XP_FRAGMENTATION 0x00001000
+#define XP_ENCRYPTS 0x00002000
+
+/*
+ * structures
+ */
+typedef struct _PROTOCOL_INFOA
+{
+ DWORD dwServiceFlags;
+ INT iAddressFamily;
+ INT iMaxSockAddr;
+ INT iMinSockAddr;
+ INT iSocketType;
+ INT iProtocol;
+ DWORD dwMessageSize;
+ LPSTR lpProtocol;
+} PROTOCOL_INFOA, *PPROTOCOL_INFOA, *LPPROTOCOL_INFOA;
+
+typedef struct _PROTOCOL_INFOW
+{
+ DWORD dwServiceFlags;
+ INT iAddressFamily;
+ INT iMaxSockAddr;
+ INT iMinSockAddr;
+ INT iSocketType;
+ INT iProtocol;
+ DWORD dwMessageSize;
+ LPWSTR lpProtocol;
+} PROTOCOL_INFOW, *PPROTOCOL_INFOW, *LPPROTOCOL_INFOW;
+
+DECL_WINELIB_TYPE_AW(PROTOCOL_INFO)
+DECL_WINELIB_TYPE_AW(PPROTOCOL_INFO)
+DECL_WINELIB_TYPE_AW(LPPROTOCOL_INFO)
+
+typedef struct _SERVICE_ADDRESS
+{
+ DWORD dwAddressType;
+ DWORD dwAddressFlags;
+ DWORD dwAddressLength;
+ DWORD dwPrincipalLength;
+ BYTE* lpAddress;
+ BYTE* lpPrincipal;
+} SERVICE_ADDRESS, *PSERVICE_ADDRESS, *LPSERVICE_ADDRESS;
+
+typedef struct _SERVICE_ADDRESSES
+{
+ DWORD dwAddressCount;
+ SERVICE_ADDRESS Addresses[1];
+} SERVICE_ADDRESSES, *PSERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
+
+typedef struct _SERVICE_INFOA
+{
+ LPGUID lpServiceType;
+ LPSTR lpServiceName;
+ LPSTR lpComment;
+ LPSTR lpLocale;
+ DWORD dwDisplayHint;
+ DWORD dwVersion;
+ DWORD dwTime;
+ LPSTR lpMachineName;
+ LPSERVICE_ADDRESSES lpServiceAddress;
+ BLOB ServiceSpecificInfo;
+} SERVICE_INFOA, *PSERVICE_INFOA, *LPSERVICE_INFOA;
+
+typedef struct _SERVICE_INFOW
+{
+ LPGUID lpServiceType;
+ LPWSTR lpServiceName;
+ LPWSTR lpComment;
+ LPWSTR lpLocale;
+ DWORD dwDisplayHint;
+ DWORD dwVersion;
+ DWORD dwTime;
+ LPSTR lpMachineName;
+ LPSERVICE_ADDRESSES lpServiceAddress;
+ BLOB ServiceSpecificInfo; /* May point to SERVICE_TYPE_INFO_ABS */
+} SERVICE_INFOW, *PSERVICE_INFOW, *LPSERVICE_INFOW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_INFO)
+DECL_WINELIB_TYPE_AW(PSERVICE_INFO)
+DECL_WINELIB_TYPE_AW(LPSERVICE_INFO)
+
+typedef struct _SERVICE_TYPE_VALUE_ABSA
+{
+ DWORD dwNameSpace; /* Name space or set of name spaces */
+ DWORD dwValueType; /* Type of the value data */
+ DWORD dwValueSize; /* Size of the value data */
+ LPSTR lpValueName; /* Name of the value */
+ PVOID lpValue; /* Pointer to the value data */
+} SERVICE_TYPE_VALUE_ABSA, *PSERVICE_TYPE_VALUE_ABSA, *LPSERVICE_TYPE_VALUE_ABSA;
+
+typedef struct _SERVICE_TYPE_VALUE_ABSW
+{
+ DWORD dwNameSpace; /* Name space or set of name spaces */
+ DWORD dwValueType; /* Type of the value data */
+ DWORD dwValueSize; /* Size of the value data */
+ LPWSTR lpValueName; /* Name of the value */
+ PVOID lpValue; /* Pointer to the value data */
+} SERVICE_TYPE_VALUE_ABSW, *PSERVICE_TYPE_VALUE_ABSW, *LPSERVICE_TYPE_VALUE_ABSW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_TYPE_VALUE_ABS)
+DECL_WINELIB_TYPE_AW(PSERVICE_TYPE_VALUE_ABS)
+DECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_VALUE_ABS)
+
+typedef struct _SERVICE_TYPE_INFO_ABSA
+{
+ LPSTR lpTypeName; /* Name of the network service type */
+ DWORD dwValueCount; /* Number of SERVICE_TYPE_VALUE_ABS structures */
+ SERVICE_TYPE_VALUE_ABSA Values[1]; /* Array of SERVICE_TYPE_VALUE_ABS structures */
+} SERVICE_TYPE_INFO_ABSA, *PSERVICE_TYPE_INFO_ABSA, *LPSERVICE_TYPE_INFO_ABSA;
+
+typedef struct _SERVICE_TYPE_INFO_ABSW
+{
+ LPWSTR lpTypeName; /* Name of the network service type */
+ DWORD dwValueCount; /* Number of SERVICE_TYPE_VALUE_ABS structures */
+ SERVICE_TYPE_VALUE_ABSW Values[1]; /* Array of SERVICE_TYPE_VALUE_ABS structures */
+} SERVICE_TYPE_INFO_ABSW, *PSERVICE_TYPE_INFO_ABSW, *LPSERVICE_TYPE_INFO_ABSW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_TYPE_INFO_ABS)
+DECL_WINELIB_TYPE_AW(PSERVICE_TYPE_INFO_ABS)
+DECL_WINELIB_TYPE_AW(LPSERVICE_TYPE_INFO_ABS)
+
+typedef void (*LPSERVICE_CALLBACK_PROC)(LPARAM lParam, HANDLE hAsyncTaskHandle);
+
+typedef struct _SERVICE_ASYNC_INFO
+{
+ LPSERVICE_CALLBACK_PROC lpServiceCallbackProc;
+ LPARAM lParam;
+ HANDLE hAsyncTaskHandle;
+} SERVICE_ASYNC_INFO, *PSERVICE_ASYNC_INFO, *LPSERVICE_ASYNC_INFO;
+
+/*
+ * function prototypes
+ */
+INT WINAPI GetAddressByNameA(DWORD dwNameSpace, LPGUID lpServiceType, LPSTR lpServiceName,
+ LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
+ LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPSTR lpAliasBuffer,
+ LPDWORD lpdwAliasBufferLength);
+INT WINAPI GetAddressByNameW(DWORD dwNameSpace, LPGUID lpServiceType, LPWSTR lpServiceName,
+ LPINT lpiProtocols, DWORD dwResolution, LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
+ LPVOID lpCsaddrBuffer, LPDWORD lpdwBufferLength, LPWSTR lpAliasBuffer,
+ LPDWORD lpdwAliasBufferLength);
+#define GetAddressByName WINELIB_NAME_AW(GetAddressByName)
+INT WINAPI GetTypeByNameA(LPSTR lpServiceName, LPGUID lpServiceType);
+INT WINAPI GetTypeByNameW(LPWSTR lpServiceName, LPGUID lpServiceType);
+#define GetTypeByName WINELIB_NAME_AW(GetTypeByName)
+INT WINAPI SetServiceA(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOA lpServiceInfo,
+ LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags);
+INT WINAPI SetServiceW(DWORD dwNameSpace, DWORD dwOperation, DWORD dwFlags, LPSERVICE_INFOW lpServiceInfo,
+ LPSERVICE_ASYNC_INFO lpServiceAsyncInfo, LPDWORD lpdwStatusFlags);
+#define SetService WINELIB_NAME_AW(SetService)
+INT WINAPI GetServiceA(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName,
+ DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize,
+ LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
+INT WINAPI GetServiceW(DWORD dwNameSpace, LPGUID lpGuid, LPSTR lpServiceName,
+ DWORD dwProperties, LPVOID lpBuffer, LPDWORD lpdwBufferSize,
+ LPSERVICE_ASYNC_INFO lpServiceAsyncInfo);
+#define GetService WINELIB_NAME_AW(GetService)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* _WINE_NSPAPI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h
new file mode 100644
index 00000000..7c150de8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddcdrm.h
@@ -0,0 +1,194 @@
+/*
+ * DDK information for CD ROM
+ *
+ * Copyright (C) 2002 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __NTDDCDRM_H
+#define __NTDDCDRM_H
+
+#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM
+#define IOCTL_CDROM_UNLOAD_DRIVER CTL_CODE(IOCTL_CDROM_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_READ_TOC CTL_CODE(IOCTL_CDROM_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_GET_CONTROL CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_PLAY_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_SEEK_AUDIO_MSF CTL_CODE(IOCTL_CDROM_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_STOP_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_PAUSE_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RESUME_AUDIO CTL_CODE(IOCTL_CDROM_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_GET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_SET_VOLUME CTL_CODE(IOCTL_CDROM_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_READ_Q_CHANNEL CTL_CODE(IOCTL_CDROM_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RAW_READ CTL_CODE(IOCTL_CDROM_BASE, 0x000F, METHOD_OUT_DIRECT, FILE_READ_ACCESS)
+#define IOCTL_CDROM_DISK_TYPE CTL_CODE(IOCTL_CDROM_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RESERVE CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_RELEASE CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_CDROM_FIND_NEW_DEVICES CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+
+#include <ntddstor.h>
+
+#define MAXIMUM_NUMBER_TRACKS 100
+#define MAXIMUM_CDROM_SIZE 804
+
+typedef struct _TRACK_DATA {
+ UCHAR Reserved;
+ UCHAR Control : 4;
+ UCHAR Adr : 4;
+ UCHAR TrackNumber;
+ UCHAR Reserved1;
+ UCHAR Address[4];
+} TRACK_DATA, *PTRACK_DATA;
+
+typedef struct _CDROM_TOC {
+ UCHAR Length[2];
+ UCHAR FirstTrack;
+ UCHAR LastTrack;
+ TRACK_DATA TrackData[MAXIMUM_NUMBER_TRACKS];
+} CDROM_TOC, *PCDROM_TOC;
+
+#define CDROM_TOC_SIZE sizeof(CDROM_TOC)
+
+typedef struct _CDROM_PLAY_AUDIO_MSF {
+ UCHAR StartingM;
+ UCHAR StartingS;
+ UCHAR StartingF;
+ UCHAR EndingM;
+ UCHAR EndingS;
+ UCHAR EndingF;
+} CDROM_PLAY_AUDIO_MSF, *PCDROM_PLAY_AUDIO_MSF;
+
+typedef struct _CDROM_SEEK_AUDIO_MSF {
+ UCHAR M;
+ UCHAR S;
+ UCHAR F;
+} CDROM_SEEK_AUDIO_MSF, *PCDROM_SEEK_AUDIO_MSF;
+
+typedef struct _CDROM_DISK_DATA {
+ ULONG DiskData;
+} CDROM_DISK_DATA, *PCDROM_DISK_DATA;
+
+#define CDROM_DISK_AUDIO_TRACK (0x00000001)
+#define CDROM_DISK_DATA_TRACK (0x00000002)
+
+#define IOCTL_CDROM_SUB_Q_CHANNEL 0x00
+#define IOCTL_CDROM_CURRENT_POSITION 0x01
+#define IOCTL_CDROM_MEDIA_CATALOG 0x02
+#define IOCTL_CDROM_TRACK_ISRC 0x03
+
+typedef struct _CDROM_SUB_Q_DATA_FORMAT {
+ UCHAR Format;
+ UCHAR Track;
+} CDROM_SUB_Q_DATA_FORMAT, *PCDROM_SUB_Q_DATA_FORMAT;
+
+typedef struct _SUB_Q_HEADER {
+ UCHAR Reserved;
+ UCHAR AudioStatus;
+ UCHAR DataLength[2];
+} SUB_Q_HEADER, *PSUB_Q_HEADER;
+
+typedef struct _SUB_Q_CURRENT_POSITION {
+ SUB_Q_HEADER Header;
+ UCHAR FormatCode;
+ UCHAR Control : 4;
+ UCHAR ADR : 4;
+ UCHAR TrackNumber;
+ UCHAR IndexNumber;
+ UCHAR AbsoluteAddress[4];
+ UCHAR TrackRelativeAddress[4];
+} SUB_Q_CURRENT_POSITION, *PSUB_Q_CURRENT_POSITION;
+
+typedef struct _SUB_Q_MEDIA_CATALOG_NUMBER {
+ SUB_Q_HEADER Header;
+ UCHAR FormatCode;
+ UCHAR Reserved[3];
+ UCHAR Reserved1 : 7;
+ UCHAR Mcval : 1;
+ UCHAR MediaCatalog[15];
+} SUB_Q_MEDIA_CATALOG_NUMBER, *PSUB_Q_MEDIA_CATALOG_NUMBER;
+
+typedef struct _SUB_Q_TRACK_ISRC {
+ SUB_Q_HEADER Header;
+ UCHAR FormatCode;
+ UCHAR Reserved0;
+ UCHAR Track;
+ UCHAR Reserved1;
+ UCHAR Reserved2 : 7;
+ UCHAR Tcval : 1;
+ UCHAR TrackIsrc[15];
+} SUB_Q_TRACK_ISRC, *PSUB_Q_TRACK_ISRC;
+
+typedef union _SUB_Q_CHANNEL_DATA {
+ SUB_Q_CURRENT_POSITION CurrentPosition;
+ SUB_Q_MEDIA_CATALOG_NUMBER MediaCatalog;
+ SUB_Q_TRACK_ISRC TrackIsrc;
+} SUB_Q_CHANNEL_DATA, *PSUB_Q_CHANNEL_DATA;
+
+#define AUDIO_STATUS_NOT_SUPPORTED 0x00
+#define AUDIO_STATUS_IN_PROGRESS 0x11
+#define AUDIO_STATUS_PAUSED 0x12
+#define AUDIO_STATUS_PLAY_COMPLETE 0x13
+#define AUDIO_STATUS_PLAY_ERROR 0x14
+#define AUDIO_STATUS_NO_STATUS 0x15
+
+#define ADR_NO_MODE_INFORMATION 0x0
+#define ADR_ENCODES_CURRENT_POSITION 0x1
+#define ADR_ENCODES_MEDIA_CATALOG 0x2
+#define ADR_ENCODES_ISRC 0x3
+
+#define AUDIO_WITH_PREEMPHASIS 0x0
+#define DIGITAL_COPY_PERMITTED 0x2
+#define AUDIO_DATA_TRACK 0x4
+#define TWO_FOUR_CHANNEL_AUDIO 0x8
+
+typedef struct _CDROM_AUDIO_CONTROL {
+ UCHAR LbaFormat;
+ USHORT LogicalBlocksPerSecond;
+} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
+
+typedef struct _VOLUME_CONTROL {
+ UCHAR PortVolume[4];
+} VOLUME_CONTROL, *PVOLUME_CONTROL;
+
+typedef enum _TRACK_MODE_TYPE {
+ YellowMode2,
+ XAForm2,
+ CDDA
+} TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
+
+typedef struct __RAW_READ_INFO {
+ LARGE_INTEGER DiskOffset;
+ ULONG SectorCount;
+ TRACK_MODE_TYPE TrackMode;
+} RAW_READ_INFO, *PRAW_READ_INFO;
+
+#endif /* __NTDDCDRM_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h
new file mode 100644
index 00000000..57076c18
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddndis.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2009 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDNDIS_
+#define _NTDDNDIS_
+
+#include <ifdef.h>
+#include <devpkey.h>
+/* #include <pciprop.h> */
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define _NDIS_CONTROL_CODE(request, method) \
+ CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS)
+
+#define IOCTL_NDIS_QUERY_GLOBAL_STATS _NDIS_CONTROL_CODE(0, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_QUERY_ALL_STATS _NDIS_CONTROL_CODE(1, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_DO_PNP_OPERATION _NDIS_CONTROL_CODE(2, METHOD_BUFFERED)
+#define IOCTL_NDIS_QUERY_SELECTED_STATS _NDIS_CONTROL_CODE(3, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_ENUMERATE_INTERFACES _NDIS_CONTROL_CODE(4, METHOD_BUFFERED)
+#define IOCTL_NDIS_ADD_TDI_DEVICE _NDIS_CONTROL_CODE(5, METHOD_BUFFERED)
+#define IOCTL_NDIS_GET_LOG_DATA _NDIS_CONTROL_CODE(7, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_GET_VERSION _NDIS_CONTROL_CODE(8, METHOD_BUFFERED)
+
+#define IOCTL_NDIS_RESERVED1 _NDIS_CONTROL_CODE(0x09, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED2 _NDIS_CONTROL_CODE(0x0a, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED3 _NDIS_CONTROL_CODE(0x0b, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED4 _NDIS_CONTROL_CODE(0x0c, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED5 CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0d, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_NDIS_RESERVED6 CTL_CODE(FILE_DEVICE_PHYSICAL_NETCARD, 0x0e, METHOD_BUFFERED, FILE_WRITE_ACCESS)
+#define IOCTL_NDIS_RESERVED7 _NDIS_CONTROL_CODE(0x0f, METHOD_OUT_DIRECT)
+#define IOCTL_NDIS_RESERVED8 _NDIS_CONTROL_CODE(0x10, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED9 _NDIS_CONTROL_CODE(0x11, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED10 _NDIS_CONTROL_CODE(0x12, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED11 _NDIS_CONTROL_CODE(0x13, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED12 _NDIS_CONTROL_CODE(0x14, METHOD_BUFFERED)
+#define IOCTL_NDIS_RESERVED13 _NDIS_CONTROL_CODE(0x15, METHOD_BUFFERED)
+
+
+#define OID_802_11_BSSID 0x0d010101
+#define OID_802_11_SSID 0x0d010102
+#define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0d010203
+#define OID_802_11_NETWORK_TYPE_IN_USE 0x0d010204
+#define OID_802_11_TX_POWER_LEVEL 0x0d010205
+#define OID_802_11_RSSI 0x0d010206
+#define OID_802_11_RSSI_TRIGGER 0x0d010207
+#define OID_802_11_INFRASTRUCTURE_MODE 0x0d010108
+#define OID_802_11_FRAGMENTATION_THRESHOLD 0x0d010209
+#define OID_802_11_RTS_THRESHOLD 0x0d01020a
+#define OID_802_11_NUMBER_OF_ANTENNAS 0x0d01020b
+#define OID_802_11_RX_ANTENNA_SELECTED 0x0d01020c
+#define OID_802_11_TX_ANTENNA_SELECTED 0x0d01020d
+#define OID_802_11_SUPPORTED_RATES 0x0d01020e
+#define OID_802_11_DESIRED_RATES 0x0d010210
+#define OID_802_11_CONFIGURATION 0x0d010211
+#define OID_802_11_STATISTICS 0x0d020212
+#define OID_802_11_ADD_WEP 0x0d010113
+#define OID_802_11_REMOVE_WEP 0x0d010114
+#define OID_802_11_DISASSOCIATE 0x0d010115
+#define OID_802_11_POWER_MODE 0x0d010216
+#define OID_802_11_BSSID_LIST 0x0d010217
+#define OID_802_11_AUTHENTICATION_MODE 0x0d010118
+#define OID_802_11_PRIVACY_FILTER 0x0d010119
+#define OID_802_11_BSSID_LIST_SCAN 0x0d01011a
+#define OID_802_11_WEP_STATUS 0x0d01011b
+#define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS
+#define OID_802_11_RELOAD_DEFAULTS 0x0d01011c
+#define OID_802_11_ADD_KEY 0x0d01011d
+#define OID_802_11_REMOVE_KEY 0x0d01011e
+#define OID_802_11_ASSOCIATION_INFORMATION 0x0d01011f
+#define OID_802_11_TEST 0x0d010120
+#define OID_802_11_MEDIA_STREAM_MODE 0x0d010121
+#define OID_802_11_CAPABILITY 0x0d010122
+#define OID_802_11_PMKID 0x0d010123
+#define OID_802_11_NON_BCAST_SSID_LIST 0x0d010124
+#define OID_802_11_RADIO_STATUS 0x0d010125
+
+#define NDIS_802_11_LENGTH_SSID 32
+#define NDIS_802_11_LENGTH_RATES 8
+#define NDIS_802_11_LENGTH_RATES_EX 16
+
+typedef LONG NDIS_802_11_RSSI;
+
+typedef struct _NDIS_802_11_CONFIGURATION_FH {
+ ULONG Length;
+ ULONG HopPattern;
+ ULONG HopSet;
+ ULONG DwellTime;
+} NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
+
+typedef struct _NDIS_802_11_CONFIGURATION {
+ ULONG Length;
+ ULONG BeaconPeriod;
+ ULONG ATIMWindow;
+ ULONG DSConfig;
+ NDIS_802_11_CONFIGURATION_FH FHConfig;
+} NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
+
+typedef UCHAR NDIS_802_11_MAC_ADDRESS[6];
+
+typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE {
+ Ndis802_11IBSS,
+ Ndis802_11Infrastructure,
+ Ndis802_11AutoUnknown,
+ Ndis802_11InfrastructureMax
+} NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
+
+typedef enum _NDIS_802_11_NETWORK_TYPE {
+ Ndis802_11FH,
+ Ndis802_11DS,
+ Ndis802_11OFDM5,
+ Ndis802_11OFDM24,
+ Ndis802_11Automode,
+ Ndis802_11NetworkTypeMax
+} NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
+
+typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];
+typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];
+
+typedef struct _NDIS_802_11_SSID {
+ ULONG SsidLength;
+ UCHAR Ssid[NDIS_802_11_LENGTH_SSID];
+} NDIS_802_11_SSID, *PNDIS_802_11_SSID;
+
+typedef struct _NDIS_WLAN_BSSID {
+ ULONG Length;
+ NDIS_802_11_MAC_ADDRESS MacAddress;
+ UCHAR Reserved[2];
+ NDIS_802_11_SSID Ssid;
+ ULONG Privacy;
+ NDIS_802_11_RSSI Rssi;
+ NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
+ NDIS_802_11_CONFIGURATION Configuration;
+ NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
+ NDIS_802_11_RATES SupportedRates;
+} NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;
+
+typedef struct _NDIS_802_11_BSSID_LIST {
+ ULONG NumberOfItems;
+ NDIS_WLAN_BSSID Bssid[1];
+} NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;
+
+#ifndef _NDIS_
+typedef int NDIS_STATUS, *PNDIS_STATUS;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDNDIS_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h
new file mode 100644
index 00000000..f8d1e39c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddscsi.h
@@ -0,0 +1,133 @@
+/*
+ * Definitions for scsi media access
+ *
+ * Copyright (C) 2002 Laurent Pinchart
+ * Copyright 2005 Ivan Leo Puoti
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDSCSI_H_
+#define _NTDDSCSI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_SCSI_BASE FILE_DEVICE_CONTROLLER
+
+#define IOCTL_SCSI_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SCSI_MINIPORT CTL_CODE(IOCTL_SCSI_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SCSI_GET_INQUIRY_DATA CTL_CODE(IOCTL_SCSI_BASE, 0x0403, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_GET_CAPABILITIES CTL_CODE(IOCTL_SCSI_BASE, 0x0404, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_SCSI_GET_ADDRESS CTL_CODE(IOCTL_SCSI_BASE, 0x0406, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_RESCAN_BUS CTL_CODE(IOCTL_SCSI_BASE, 0x0407, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_GET_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0408, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_SCSI_FREE_DUMP_POINTERS CTL_CODE(IOCTL_SCSI_BASE, 0x0409, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_IDE_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040a, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_ATA_PASS_THROUGH CTL_CODE(IOCTL_SCSI_BASE, 0x040b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_ATA_PASS_THROUGH_DIRECT CTL_CODE(IOCTL_SCSI_BASE, 0x040c, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define SCSI_IOCTL_DATA_OUT 0
+#define SCSI_IOCTL_DATA_IN 1
+#define SCSI_IOCTL_DATA_UNSPECIFIED 2
+
+typedef struct _SCSI_PASS_THROUGH {
+ USHORT Length;
+ UCHAR ScsiStatus;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR CdbLength;
+ UCHAR SenseInfoLength;
+ UCHAR DataIn;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ ULONG_PTR DataBufferOffset;
+ ULONG SenseInfoOffset;
+ UCHAR Cdb[16];
+} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH;
+
+typedef struct _SCSI_PASS_THROUGH_DIRECT {
+ USHORT Length;
+ UCHAR ScsiStatus;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ UCHAR CdbLength;
+ UCHAR SenseInfoLength;
+ UCHAR DataIn;
+ ULONG DataTransferLength;
+ ULONG TimeOutValue;
+ PVOID DataBuffer;
+ ULONG SenseInfoOffset;
+ UCHAR Cdb[16];
+} SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
+
+typedef struct _SCSI_ADDRESS {
+ ULONG Length;
+ UCHAR PortNumber;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+} SCSI_ADDRESS, *PSCSI_ADDRESS;
+
+typedef struct _IO_SCSI_CAPABILITIES {
+ ULONG Length;
+ ULONG MaximumTransferLength;
+ ULONG MaximumPhysicalPages;
+ ULONG SupportedAsynchronousEvents;
+ ULONG AlignmentMask;
+ BOOLEAN TaggedQueuing;
+ BOOLEAN AdapterScansDown;
+ BOOLEAN AdapterUsesPio;
+} IO_SCSI_CAPABILITIES, *PIO_SCSI_CAPABILITIES;
+
+typedef struct _SCSI_BUS_DATA {
+ UCHAR NumberOfLogicalUnits;
+ UCHAR InitiatorBusId;
+ ULONG InquiryDataOffset;
+} SCSI_BUS_DATA, *PSCSI_BUS_DATA;
+
+typedef struct _SCSI_ADAPTER_BUS_INFO {
+ UCHAR NumberOfBuses;
+ SCSI_BUS_DATA BusData[1];
+} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;
+
+typedef struct _SCSI_INQUIRY_DATA {
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+ BOOLEAN DeviceClaimed;
+ ULONG InquiryDataLength;
+ ULONG NextInquiryDataOffset;
+ UCHAR InquiryData[1];
+} SCSI_INQUIRY_DATA, *PSCSI_INQUIRY_DATA;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDSCSI_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h
new file mode 100644
index 00000000..f427063c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntddstor.h
@@ -0,0 +1,288 @@
+/*
+ * DDK definitions for storage media access
+ *
+ * Copyright (C) 2002 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTDDSTOR_H_
+#define _NTDDSTOR_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
+
+#define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+DEFINE_GUID(DiskClassGuid,
+ 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(CdRomClassGuid,
+ 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(PartitionClassGuid,
+ 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(TapeClassGuid,
+ 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(WriteOnceDiskClassGuid,
+ 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(VolumeClassGuid,
+ 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(MediumChangerClassGuid,
+ 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(FloppyClassGuid,
+ 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(CdChangerClassGuid,
+ 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+DEFINE_GUID(StroagePortClassGuid,
+ 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
+
+typedef struct _STORAGE_DEVICE_NUMBER {
+ DEVICE_TYPE DeviceType;
+ ULONG DeviceNumber;
+ ULONG PartitionNumber;
+} STORAGE_DEVICE_NUMBER, *PSTORAGE_DEVICE_NUMBER;
+
+typedef struct _STORAGE_BUS_RESET_REQUEST {
+ UCHAR PathId;
+} STORAGE_BUS_RESET_REQUEST, *PSTORAGE_BUS_RESET_REQUEST;
+
+typedef struct _PREVENT_MEDIA_REMOVAL {
+ BOOLEAN PreventMediaRemoval;
+} PREVENT_MEDIA_REMOVAL, *PPREVENT_MEDIA_REMOVAL;
+
+typedef struct _TAPE_STATISTICS {
+ ULONG Version;
+ ULONG Flags;
+ LARGE_INTEGER RecoveredWrites;
+ LARGE_INTEGER UnrecoveredWrites;
+ LARGE_INTEGER RecoveredReads;
+ LARGE_INTEGER UnrecoveredReads;
+ UCHAR CompressionRatioReads;
+ UCHAR CompressionRatioWrites;
+} TAPE_STATISTICS, *PTAPE_STATISTICS;
+
+#define RECOVERED_WRITES_VALID 0x00000001
+#define UNRECOVERED_WRITES_VALID 0x00000002
+#define RECOVERED_READS_VALID 0x00000004
+#define UNRECOVERED_READS_VALID 0x00000008
+#define WRITE_COMPRESSION_INFO_VALID 0x00000010
+#define READ_COMPRESSION_INFO_VALID 0x00000020
+
+typedef struct _TAPE_GET_STATISTICS {
+ ULONG Operation;
+} TAPE_GET_STATISTICS, *PTAPE_GET_STATISTICS;
+
+#define TAPE_RETURN_STATISTICS __MSABI_LONG(0)
+#define TAPE_RETURN_ENV_INFO __MSABI_LONG(1)
+#define TAPE_RESET_STATISTICS __MSABI_LONG(2)
+
+typedef enum _STORAGE_MEDIA_TYPE {
+ /* see also defines in ntdddisk.h */
+
+ DDS_4mm = 0x20,
+ MiniQic,
+ Travan,
+ QIC,
+ MP_8mm,
+ AME_8mm,
+ AIT1_8mm,
+ DLT,
+ NCTP,
+ IBM_3480,
+ IBM_3490E,
+ IBM_Magstar_3590,
+ IBM_Magstar_MP,
+ STK_DATA_D3,
+ SONY_DTF,
+ DV_6mm,
+ DMI,
+ SONY_D2,
+ CLEANER_CARTRIDGE,
+ CD_ROM,
+ CD_R,
+ CD_RW,
+ DVD_ROM,
+ DVD_R,
+ DVD_RW,
+ MO_3_RW,
+ MO_5_WO,
+ MO_5_RW,
+ MO_5_LIMDOW,
+ PC_5_WO,
+ PC_5_RW,
+ PD_5_RW,
+ ABL_5_WO,
+ PINNACLE_APEX_5_RW,
+ SONY_12_WO,
+ PHILIPS_12_WO,
+ HITACHI_12_WO,
+ CYGNET_12_WO,
+ KODAK_14_WO,
+ MO_NFR_525,
+ NIKON_12_RW,
+ IOMEGA_ZIP,
+ IOMEGA_JAZ,
+ SYQUEST_EZ135,
+ SYQUEST_EZFLYER,
+ SYQUEST_SYJET,
+ AVATAR_F2,
+ MP2_8mm
+} STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
+
+#define MEDIA_ERASEABLE 0x00000001
+#define MEDIA_WRITE_ONCE 0x00000002
+#define MEDIA_READ_ONLY 0x00000004
+#define MEDIA_READ_WRITE 0x00000008
+#define MEDIA_WRITE_PROTECTED 0x00000100
+#define MEDIA_CURRENTLY_MOUNTED 0x80000000
+
+typedef struct _DEVICE_MEDIA_INFO {
+ union {
+ struct {
+ LARGE_INTEGER Cylinders;
+ STORAGE_MEDIA_TYPE MediaType;
+ ULONG TracksPerCylinder;
+ ULONG SectorsPerTrack;
+ ULONG BytesPerSector;
+ ULONG NumberMediaSides;
+ ULONG MediaCharacteristics;
+ } DiskInfo;
+ struct {
+ LARGE_INTEGER Cylinders;
+ STORAGE_MEDIA_TYPE MediaType;
+ ULONG TracksPerCylinder;
+ ULONG SectorsPerTrack;
+ ULONG BytesPerSector;
+ ULONG NumberMediaSides;
+ ULONG MediaCharacteristics;
+ } RemovableDiskInfo;
+ struct {
+ STORAGE_MEDIA_TYPE MediaType;
+ ULONG MediaCharacteristics;
+ ULONG CurrentBlockSize;
+ } TapeInfo;
+ } DeviceSpecific;
+} DEVICE_MEDIA_INFO, *PDEVICE_MEDIA_INFO;
+
+typedef struct _GET_MEDIA_TYPES {
+ ULONG DeviceType;
+ ULONG MediaInfoCount;
+ DEVICE_MEDIA_INFO MediaInfo[1];
+} GET_MEDIA_TYPES, *PGET_MEDIA_TYPES;
+
+typedef enum _STORAGE_QUERY_TYPE {
+ PropertyStandardQuery = 0,
+ PropertyExistsQuery,
+ PropertyMaskQuery,
+ PropertyQueryMaxDefined
+} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
+
+typedef enum _STORAGE_PROPERTY_ID {
+ StorageDeviceProperty = 0,
+ StorageAdapterProperty
+} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
+
+typedef struct _STORAGE_PROPERTY_QUERY {
+ STORAGE_PROPERTY_ID PropertyId;
+ STORAGE_QUERY_TYPE QueryType;
+ UCHAR AdditionalParameters[1];
+} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
+
+typedef struct _STORAGE_DESCRIPTOR_HEADER {
+ ULONG Version;
+ ULONG Size;
+} STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
+
+typedef enum _STORAGE_BUS_TYPE {
+ BusTypeUnknown = 0x00,
+ BusTypeScsi,
+ BusTypeAtapi,
+ BusTypeAta,
+ BusType1394,
+ BusTypeSsa,
+ BusTypeFibre,
+ BusTypeUsb,
+ BusTypeRAID,
+ BusTypeMaxReserved = 0x7F
+} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
+
+typedef struct _STORAGE_DEVICE_DESCRIPTOR {
+ ULONG Version;
+ ULONG Size;
+ UCHAR DeviceType;
+ UCHAR DeviceTypeModifier;
+ BOOLEAN RemovableMedia;
+ BOOLEAN CommandQueueing;
+ ULONG VendorIdOffset;
+ ULONG ProductIdOffset;
+ ULONG ProductRevisionOffset;
+ ULONG SerialNumberOffset;
+ STORAGE_BUS_TYPE BusType;
+ ULONG RawPropertiesLength;
+ UCHAR RawDeviceProperties[1];
+} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
+
+typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
+ ULONG Version;
+ ULONG Size;
+ ULONG MaximumTransferLength;
+ ULONG MaximumPhysicalPages;
+ ULONG AlignmentMask;
+ BOOLEAN AdapterUsesPio;
+ BOOLEAN AdapterScansDown;
+ BOOLEAN CommandQueueing;
+ BOOLEAN AcceleratedTransfer;
+ BOOLEAN BusType;
+ USHORT BusMajorVersion;
+ USHORT BusMinorVersion;
+} STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NTDDSTOR_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h
new file mode 100644
index 00000000..02de2179
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntdsapi.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2006 Dmitry Timoshkov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTDSAPI_H
+#define __WINE_NTDSAPI_H
+
+/* FIXME: #include <schedule.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI DsMakeSpnA(LPCSTR, LPCSTR, LPCSTR, USHORT, LPCSTR, DWORD*, LPSTR);
+DWORD WINAPI DsMakeSpnW(LPCWSTR, LPCWSTR, LPCWSTR, USHORT, LPCWSTR, DWORD*, LPWSTR);
+#define DsMakeSpn WINELIB_NAME_AW(DsMakeSpn)
+
+typedef enum
+{
+ DS_SPN_DNS_HOST = 0,
+ DS_SPN_DN_HOST = 1,
+ DS_SPN_NB_HOST = 2,
+ DS_SPN_DOMAIN = 3,
+ DS_SPN_NB_DOMAIN = 4,
+ DS_SPN_SERVICE = 5
+} DS_SPN_NAME_TYPE;
+
+typedef enum
+{
+ DS_SPN_ADD_SPN_OP = 0,
+ DS_SPN_REPLACE_SPN_OP = 1,
+ DS_SPN_DELETE_SPN_OP = 2
+} DS_SPN_WRITE_OP;
+
+DWORD WINAPI DsServerRegisterSpnA(DS_SPN_WRITE_OP operation, LPCSTR ServiceClass, LPCSTR UserObjectDN);
+DWORD WINAPI DsServerRegisterSpnW(DS_SPN_WRITE_OP operation, LPCWSTR ServiceClass, LPCWSTR UserObjectDN);
+#define DsServerRegisterSpn WINELIB_NAME_AW(DsServerRegisterSpn)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_NTDSAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h
new file mode 100644
index 00000000..a459085b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntquery.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTQUERY_H__
+#define __WINE_NTQUERY_H__
+
+/* FIXME: #include <stgprop.h> */
+
+#include <pshpack4.h>
+
+typedef struct _CI_STATE
+{
+ DWORD cbStruct;
+ DWORD cWordList;
+ DWORD cPersistentIndex;
+ DWORD cQueries;
+ DWORD cDocuments;
+ DWORD cFreshTest;
+ DWORD dwMergeProgress;
+ DWORD eState;
+ DWORD cFilteredDocuments;
+ DWORD cTotalDocuments;
+ DWORD cPendingScans;
+ DWORD dwIndexSize;
+ DWORD cUniqueKeys;
+ DWORD cSeqQDocuments;
+ DWORD dwPropCacheSize;
+} CI_STATE;
+
+#include <poppack.h>
+
+#define PSGUID_STORAGE {0xb725f130, 0x47ef, 0x101a, {0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac}}
+#define PID_STG_DIRECTORY ((PROPID)0x02)
+#define PID_STG_CLASSID ((PROPID)0x03)
+#define PID_STG_STORAGETYPE ((PROPID)0x04)
+#define PID_STG_VOLUME_ID ((PROPID)0x05)
+#define PID_STG_PARENT_WORKID ((PROPID)0x06)
+#define PID_STG_SECONDARYSTORE ((PROPID)0x07)
+#define PID_STG_FILEINDEX ((PROPID)0x08)
+#define PID_STG_LASTCHANGEUSN ((PROPID)0x09)
+#define PID_STG_NAME ((PROPID)0x0a)
+#define PID_STG_PATH ((PROPID)0x0b)
+#define PID_STG_SIZE ((PROPID)0x0c)
+#define PID_STG_ATTRIBUTES ((PROPID)0x0d)
+#define PID_STG_WRITETIME ((PROPID)0x0e)
+#define PID_STG_CREATETIME ((PROPID)0x0f)
+#define PID_STG_ACCESSTIME ((PROPID)0x10)
+#define PID_STG_CHANGETIME ((PROPID)0x11)
+#define PID_STG_CONTENTS ((PROPID)0x13)
+#define PID_STG_SHORTNAME ((PROPID)0x14)
+#define PID_STG_MAX PID_STG_SHORTNAME
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+STDAPI CIState(WCHAR const *, WCHAR const *, CI_STATE *);
+STDAPI LocateCatalogsA(CHAR const *, ULONG, CHAR *, ULONG *, CHAR *, ULONG *);
+STDAPI LocateCatalogsW(WCHAR const *, ULONG, WCHAR *, ULONG *, WCHAR *, ULONG *);
+#define LocateCatalogs WINELIB_NAME_AW(LocateCatalogs)
+STDAPI LoadIFilter(WCHAR const *, IUnknown *, void **);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h
new file mode 100644
index 00000000..03b4e97d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecapi.h
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTSECAPI_H
+#define __WINE_NTSECAPI_H
+
+#ifndef GUID_DEFINED
+# include <guiddef.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/* Policy access rights */
+#define POLICY_VIEW_LOCAL_INFORMATION __MSABI_LONG(0x00000001)
+#define POLICY_VIEW_AUDIT_INFORMATION __MSABI_LONG(0x00000002)
+#define POLICY_GET_PRIVATE_INFORMATION __MSABI_LONG(0x00000004)
+#define POLICY_TRUST_ADMIN __MSABI_LONG(0x00000008)
+#define POLICY_CREATE_ACCOUNT __MSABI_LONG(0x00000010)
+#define POLICY_CREATE_SECRET __MSABI_LONG(0x00000020)
+#define POLICY_CREATE_PRIVILEGE __MSABI_LONG(0x00000040)
+#define POLICY_SET_DEFAULT_QUOTA_LIMITS __MSABI_LONG(0x00000080)
+#define POLICY_SET_AUDIT_REQUIREMENTS __MSABI_LONG(0x00000100)
+#define POLICY_AUDIT_LOG_ADMIN __MSABI_LONG(0x00000200)
+#define POLICY_SERVER_ADMIN __MSABI_LONG(0x00000400)
+#define POLICY_LOOKUP_NAMES __MSABI_LONG(0x00000800)
+#define POLICY_NOTIFICATION __MSABI_LONG(0x00001000)
+
+#define POLICY_ALL_ACCESS ( \
+ STANDARD_RIGHTS_REQUIRED | \
+ POLICY_VIEW_LOCAL_INFORMATION | \
+ POLICY_VIEW_AUDIT_INFORMATION | \
+ POLICY_GET_PRIVATE_INFORMATION | \
+ POLICY_TRUST_ADMIN | \
+ POLICY_CREATE_ACCOUNT | \
+ POLICY_CREATE_SECRET | \
+ POLICY_CREATE_PRIVILEGE | \
+ POLICY_SET_DEFAULT_QUOTA_LIMITS | \
+ POLICY_SET_AUDIT_REQUIREMENTS | \
+ POLICY_AUDIT_LOG_ADMIN | \
+ POLICY_SERVER_ADMIN | \
+ POLICY_LOOKUP_NAMES)
+
+
+#define POLICY_READ ( \
+ STANDARD_RIGHTS_READ | \
+ POLICY_VIEW_AUDIT_INFORMATION | \
+ POLICY_GET_PRIVATE_INFORMATION)
+
+#define POLICY_WRITE ( \
+ STANDARD_RIGHTS_WRITE | \
+ POLICY_TRUST_ADMIN | \
+ POLICY_CREATE_ACCOUNT | \
+ POLICY_CREATE_SECRET | \
+ POLICY_CREATE_PRIVILEGE | \
+ POLICY_SET_DEFAULT_QUOTA_LIMITS | \
+ POLICY_SET_AUDIT_REQUIREMENTS | \
+ POLICY_AUDIT_LOG_ADMIN | \
+ POLICY_SERVER_ADMIN)
+
+#define POLICY_EXECUTE ( \
+ STANDARD_RIGHTS_EXECUTE | \
+ POLICY_VIEW_LOCAL_INFORMATION | \
+ POLICY_LOOKUP_NAMES)
+
+#define POLICY_AUDIT_EVENT_UNCHANGED __MSABI_LONG(0x00000000)
+#define POLICY_AUDIT_EVENT_SUCCESS __MSABI_LONG(0x00000001)
+#define POLICY_AUDIT_EVENT_FAILURE __MSABI_LONG(0x00000002)
+#define POLICY_AUDIT_EVENT_NONE __MSABI_LONG(0x00000004)
+
+#define POLICY_AUDIT_EVENT_MASK (POLICY_AUDIT_EVENT_SUCCESS | \
+ POLICY_AUDIT_EVENT_FAILURE | \
+ POLICY_AUDIT_EVENT_NONE)
+
+/* logon rights names */
+#define SE_BATCH_LOGON_NAME \
+ TEXT("SeBatchLogonRight")
+#define SE_INTERACTIVE_LOGON_NAME \
+ TEXT("SeInteractiveLogonRight")
+#define SE_NETWORK_LOGON_NAME \
+ TEXT("SeNetworkLogonRight")
+#define SE_REMOTE_INTERACTIVE_LOGON_NAME \
+ TEXT("SeRemoteInteractiveLogonRight")
+#define SE_SERVICE_LOGON_NAME \
+ TEXT("SeServiceLogonRight")
+#define SE_DENY_BATCH_LOGON_NAME \
+ TEXT("SeDenyBatchLogonRight")
+#define SE_DENY_INTERACTIVE_LOGON_NAME \
+ TEXT("SeDenyInteractiveLogonRight")
+#define SE_DENY_NETWORK_LOGON_NAME \
+ TEXT("SeDenyNetworkLogonRight")
+#define SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME \
+ TEXT("SeDenyRemoteInteractiveLogonRight")
+#define SE_DENY_SERVICE_LOGON_NAME \
+ TEXT("SeDenyServiceLogonRight")
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+#ifndef WINE_PNTSTATUS_DECLARED
+#define WINE_PNTSTATUS_DECLARED
+typedef NTSTATUS *PNTSTATUS;
+#endif
+
+typedef enum _SECURITY_LOGON_TYPE
+{
+ Interactive = 2,
+ Network,
+ Batch,
+ Service,
+ Proxy
+} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
+
+typedef enum _POLICY_AUDIT_EVENT_TYPE
+{
+ AuditCategorySystem,
+ AuditCategoryLogon,
+ AuditCategoryObjectAccess,
+ AuditCategoryPrivilegeUse,
+ AuditCategoryDetailedTracking,
+ AuditCategoryPolicyChange,
+ AuditCategoryAccountManagement
+} POLICY_AUDIT_EVENT_TYPE, *PPOLICY_AUDIT_EVENT_TYPE;
+
+#ifndef __STRING_DEFINED__
+#define __STRING_DEFINED__
+typedef struct _STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+
+#ifndef __UNICODE_STRING_DEFINED__
+#define __UNICODE_STRING_DEFINED__
+typedef struct _UNICODE_STRING {
+ USHORT Length; /* bytes */
+ USHORT MaximumLength; /* bytes */
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+#ifndef __OBJECT_ATTRIBUTES_DEFINED__
+#define __OBJECT_ATTRIBUTES_DEFINED__
+typedef struct _OBJECT_ATTRIBUTES {
+ ULONG Length;
+ HANDLE RootDirectory;
+ PUNICODE_STRING ObjectName;
+ ULONG Attributes;
+ PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
+ PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
+
+typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
+typedef STRING LSA_STRING, *PLSA_STRING;
+typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
+
+typedef PVOID LSA_HANDLE, *PLSA_HANDLE;
+typedef ULONG LSA_ENUMERATION_HANDLE, *PLSA_ENUMERATION_HANDLE;
+typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
+
+typedef enum
+{
+ PolicyAuditLogInformation = 1,
+ PolicyAuditEventsInformation,
+ PolicyPrimaryDomainInformation,
+ PolicyPdAccountInformation,
+ PolicyAccountDomainInformation,
+ PolicyLsaServerRoleInformation,
+ PolicyReplicaSourceInformation,
+ PolicyDefaultQuotaInformation,
+ PolicyModificationInformation,
+ PolicyAuditFullSetInformation,
+ PolicyAuditFullQueryInformation,
+ PolicyDnsDomainInformation
+} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS;
+
+typedef ULONG POLICY_AUDIT_EVENT_OPTIONS, *PPOLICY_AUDIT_EVENT_OPTIONS;
+
+typedef struct _POLICY_AUDIT_EVENTS_INFO
+{
+ BOOLEAN AuditingMode;
+ PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions;
+ ULONG MaximumAuditEventCount;
+} POLICY_AUDIT_EVENTS_INFO, *PPOLICY_AUDIT_EVENTS_INFO;
+
+typedef struct _POLICY_PRIMARY_DOMAIN_INFO
+{
+ LSA_UNICODE_STRING Name;
+ PSID Sid;
+} POLICY_PRIMARY_DOMAIN_INFO, *PPOLICY_PRIMARY_DOMAIN_INFO;
+
+typedef struct _POLICY_ACCOUNT_DOMAIN_INFO
+{
+ LSA_UNICODE_STRING DomainName;
+ PSID DomainSid;
+} POLICY_ACCOUNT_DOMAIN_INFO, *PPOLICY_ACCOUNT_DOMAIN_INFO;
+
+typedef struct _POLICY_DNS_DOMAIN_INFO
+{
+ LSA_UNICODE_STRING Name;
+ LSA_UNICODE_STRING DnsDomainName;
+ LSA_UNICODE_STRING DnsForestName;
+ GUID DomainGuid;
+ PSID Sid;
+} POLICY_DNS_DOMAIN_INFO, *PPOLICY_DNS_DOMAIN_INFO;
+
+typedef enum _POLICY_LSA_SERVER_ROLE
+{
+ PolicyServerRoleBackup = 2,
+ PolicyServerRolePrimary
+} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE;
+
+typedef struct _POLICY_LSA_SERVER_ROLE_INFO
+{
+ POLICY_LSA_SERVER_ROLE LsaServerRole;
+} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO;
+
+typedef struct _POLICY_MODIFICATION_INFO
+{
+ LARGE_INTEGER ModifiedId;
+ LARGE_INTEGER DatabaseCreationTime;
+} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO;
+
+typedef struct _SECURITY_LOGON_SESSION_DATA {
+ ULONG Size;
+ LUID LogonId;
+ LSA_UNICODE_STRING UserName;
+ LSA_UNICODE_STRING LogonDomain;
+ LSA_UNICODE_STRING AuthenticationPackage;
+ ULONG LogonType;
+ ULONG Session;
+ PSID Sid;
+ LARGE_INTEGER LogonTime;
+ LSA_UNICODE_STRING LogonServer;
+ LSA_UNICODE_STRING DnsDomainName;
+ LSA_UNICODE_STRING Upn;
+} SECURITY_LOGON_SESSION_DATA, *PSECURITY_LOGON_SESSION_DATA;
+
+typedef struct
+{
+ SID_NAME_USE Use;
+ LSA_UNICODE_STRING Name;
+ LONG DomainIndex;
+} LSA_TRANSLATED_NAME, *PLSA_TRANSLATED_NAME;
+
+typedef struct
+{
+ LSA_UNICODE_STRING Name;
+ PSID Sid;
+} LSA_TRUST_INFORMATION, *PLSA_TRUST_INFORMATION;
+
+typedef struct
+{
+ ULONG Entries;
+ PLSA_TRUST_INFORMATION Domains;
+} LSA_REFERENCED_DOMAIN_LIST, *PLSA_REFERENCED_DOMAIN_LIST;
+
+typedef struct _LSA_TRANSLATED_SID
+{
+ SID_NAME_USE Use;
+ ULONG RelativeId;
+ LONG DomainIndex;
+} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID;
+
+typedef struct _TRUSTED_DOMAIN_INFORMATION_EX
+{
+ LSA_UNICODE_STRING Name;
+ LSA_UNICODE_STRING FlatName;
+ PSID Sid;
+ ULONG TrustDirection;
+ ULONG TrustType;
+ ULONG TrustAttributes;
+} TRUSTED_DOMAIN_INFORMATION_EX, *PTRUSTED_DOMAIN_INFORMATION_EX;
+
+typedef struct _LSA_AUTH_INFORMATION
+{
+ LARGE_INTEGER LastUpdateTime;
+ ULONG AuthType;
+ ULONG AuthInfoLength;
+ PUCHAR AuthInfo;
+} LSA_AUTH_INFORMATION, *PLSA_AUTH_INFORMATION;
+
+typedef struct _TRUSTED_DOMAIN_AUTH_INFORMATION
+{
+ ULONG IncomingAuthInfos;
+ PLSA_AUTH_INFORMATION IncomingAuthenticationInformation;
+ PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation;
+ ULONG OutgoingAuthInfos;
+ PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation;
+ PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation;
+} TRUSTED_DOMAIN_AUTH_INFORMATION, *PTRUSTED_DOMAIN_AUTH_INFORMATION;
+
+typedef struct _LSA_TRANSLATED_SID2
+{
+ SID_NAME_USE Use;
+ PSID Sid;
+ LONG DomainIndex;
+ ULONG Flags;
+} LSA_TRANSLATED_SID2, *PLSA_TRANSLATED_SID2;
+
+typedef enum _TRUSTED_INFORMATION_CLASS
+{
+ TrustedDomainNameInformation = 1,
+ TrustedControllersInformation,
+ TrustedPosixOffsetInformation,
+ TrustedPasswordInformation,
+ TrustedDomainInformationBasic,
+ TrustedDomainInformationEx,
+ TrustedDomainAuthInformation,
+ TrustedDomainFullInformation
+} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS;
+
+typedef enum _POLICY_NOTIFICATION_INFORMATION_CLASS
+{
+ PolicyNotifyAuditEventsInformation = 1,
+ PolicyNotifyAccountDomainInformation,
+ PolicyNotifyServerRoleInformation,
+ PolicyNotifyDnsDomainInformation,
+ PolicyNotifyDomainEfsInformation,
+ PolicyNotifyDomainKerberosTicketInformation,
+ PolicyNotifyMachineAccountPasswordInformation
+} POLICY_NOTIFICATION_INFORMATION_CLASS, *PPOLICY_NOTIFICATION_INFORMATION_CLASS;
+
+#define RtlGenRandom SystemFunction036
+#define RtlEncryptMemory SystemFunction040
+#define RtlDecryptMemory SystemFunction041
+
+BOOLEAN WINAPI RtlGenRandom(PVOID,ULONG);
+NTSTATUS WINAPI RtlEncryptMemory(PVOID,ULONG,ULONG);
+NTSTATUS WINAPI RtlDecryptMemory(PVOID,ULONG,ULONG);
+
+NTSTATUS WINAPI LsaAddAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING,ULONG);
+NTSTATUS WINAPI LsaCallAuthenticationPackage(HANDLE,ULONG,PVOID,ULONG,PVOID*,PULONG,PNTSTATUS);
+NTSTATUS WINAPI LsaClose(LSA_HANDLE);
+NTSTATUS WINAPI LsaConnectUntrusted(PHANDLE);
+NTSTATUS WINAPI LsaCreateTrustedDomainEx(LSA_HANDLE,PTRUSTED_DOMAIN_INFORMATION_EX,
+ PTRUSTED_DOMAIN_AUTH_INFORMATION,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaDeleteTrustedDomain(LSA_HANDLE,PSID);
+NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE);
+NTSTATUS WINAPI LsaEnumerateAccountRights(LSA_HANDLE,PSID,PLSA_UNICODE_STRING*,PULONG);
+NTSTATUS WINAPI LsaEnumerateAccountsWithUserRight(LSA_HANDLE,PLSA_UNICODE_STRING,PVOID*,PULONG);
+NTSTATUS WINAPI LsaEnumerateLogonSessions(PULONG,PLUID*);
+NTSTATUS WINAPI LsaEnumerateTrustedDomains(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);
+NTSTATUS WINAPI LsaEnumerateTrustedDomainsEx(LSA_HANDLE,PLSA_ENUMERATION_HANDLE,PVOID*,ULONG,PULONG);
+NTSTATUS WINAPI LsaFreeMemory(PVOID);
+NTSTATUS WINAPI LsaFreeReturnBuffer(PVOID);
+NTSTATUS WINAPI LsaGetLogonSessionData(PLUID,PSECURITY_LOGON_SESSION_DATA*);
+NTSTATUS WINAPI LsaLogonUser(HANDLE,PLSA_STRING,SECURITY_LOGON_TYPE,ULONG,PVOID,ULONG,PTOKEN_GROUPS,PTOKEN_SOURCE,PVOID*,PULONG,PLUID,PHANDLE,PQUOTA_LIMITS,PNTSTATUS);
+NTSTATUS WINAPI LsaLookupAuthenticationPackage(HANDLE,PLSA_STRING,PULONG);
+NTSTATUS WINAPI LsaLookupNames(LSA_HANDLE,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
+ PLSA_TRANSLATED_SID*);
+NTSTATUS WINAPI LsaLookupNames2(LSA_HANDLE,ULONG,ULONG,PLSA_UNICODE_STRING,PLSA_REFERENCED_DOMAIN_LIST*,
+ PLSA_TRANSLATED_SID2*);
+NTSTATUS WINAPI LsaLookupSids(LSA_HANDLE,ULONG,PSID *,PLSA_REFERENCED_DOMAIN_LIST *,PLSA_TRANSLATED_NAME *);
+ULONG WINAPI LsaNtStatusToWinError(NTSTATUS);
+NTSTATUS WINAPI LsaOpenPolicy(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaOpenTrustedDomainByName(LSA_HANDLE,PLSA_UNICODE_STRING,ACCESS_MASK,PLSA_HANDLE);
+NTSTATUS WINAPI LsaQueryInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaQueryTrustedDomainInfo(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaQueryTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID*);
+NTSTATUS WINAPI LsaRegisterLogonProcess(PLSA_STRING,PHANDLE,PLSA_OPERATIONAL_MODE);
+NTSTATUS WINAPI LsaRegisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);
+NTSTATUS WINAPI LsaRemoveAccountRights(LSA_HANDLE,PSID,BOOLEAN,PLSA_UNICODE_STRING,ULONG);
+NTSTATUS WINAPI LsaRetrievePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING*);
+NTSTATUS WINAPI LsaSetInformationPolicy(LSA_HANDLE,POLICY_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaSetTrustedDomainInfoByName(LSA_HANDLE,PLSA_UNICODE_STRING,TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaSetTrustedDomainInformation(LSA_HANDLE,PSID,TRUSTED_INFORMATION_CLASS,PVOID);
+NTSTATUS WINAPI LsaStorePrivateData(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING);
+NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification(POLICY_NOTIFICATION_INFORMATION_CLASS,HANDLE);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* !defined(__WINE_NTSECAPI_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h
new file mode 100644
index 00000000..1fe6838f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntsecpkg.h
@@ -0,0 +1,480 @@
+/*
+ * Copyright (C) 2007 Yuval Fledel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _NTSECPKG_H
+#define _NTSECPKG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Flags for the MachineState field in SECPKG_PARAMETERS */
+#define SECPKG_STATE_ENCRYPTION_PERMITTED 0x01
+#define SECPKG_STATE_STRONG_ENCRYPTION_PERMITTED 0x02
+#define SECPKG_STATE_DOMAIN_CONTROLLER 0x04
+#define SECPKG_STATE_WORKSTATION 0x08
+#define SECPKG_STATE_STANDALONE 0x10
+
+/* Version magics as passed to or returned from Sp[Lsa,Mode]ModeInitialize */
+#define SECPKG_INTERFACE_VERSION 0x10000
+#define SECPKG_INTERFACE_VERSION_2 0x20000
+#define SECPKG_INTERFACE_VERSION_3 0x40000
+#define SECPKG_INTERFACE_VERSION_4 0x80000
+#define SECPKG_INTERFACE_VERSION_5 0x100000
+#define SECPKG_INTERFACE_VERSION_6 0x200000
+
+/* enum definitions for Secure Service Provider/Authentication Packages */
+typedef enum _LSA_TOKEN_INFORMATION_TYPE {
+ LsaTokenInformationNull,
+ LsaTokenInformationV1
+} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
+
+typedef enum _SECPKG_EXTENDED_INFORMATION_CLASS
+{
+ SecpkgGssInfo = 1,
+ SecpkgContextThunks,
+ SecpkgMutualAuthLevel,
+ SecpkgMaxInfo
+} SECPKG_EXTENDED_INFORMATION_CLASS;
+
+typedef enum _SECPKG_NAME_TYPE {
+ SecNameSamCompatible,
+ SecNameAlternateId,
+ SecNameFlat,
+ SecNameDN
+} SECPKG_NAME_TYPE;
+
+/* struct definitions for SSP/AP */
+typedef struct _SECPKG_PRIMARY_CRED {
+ LUID LogonId;
+ UNICODE_STRING DownlevelName;
+ UNICODE_STRING DomainName;
+ UNICODE_STRING Password;
+ UNICODE_STRING OldPassword;
+ PSID UserSid;
+ ULONG Flags;
+ UNICODE_STRING DnsDomainName;
+ UNICODE_STRING Upn;
+ UNICODE_STRING LogonServer;
+ UNICODE_STRING Spare1;
+ UNICODE_STRING Spare2;
+ UNICODE_STRING Spare3;
+ UNICODE_STRING Spare4;
+} SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED;
+
+typedef struct _SECPKG_SUPPLEMENTAL_CRED {
+ UNICODE_STRING PackageName;
+ ULONG CredentialSize;
+ PUCHAR Credentials;
+} SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;
+
+typedef struct _SECPKG_SUPPLEMENTAL_CRED_ARRAY {
+ ULONG CredentialCount;
+ SECPKG_SUPPLEMENTAL_CRED Credentials[1];
+} SECPKG_SUPPLEMENTAL_CRED_ARRAY, *PSECPKG_SUPPLEMENTAL_CRED_ARRAY;
+
+typedef struct _SECPKG_PARAMETERS {
+ ULONG Version;
+ ULONG MachineState;
+ ULONG SetupMode;
+ PSID DomainSid;
+ UNICODE_STRING DomainName;
+ UNICODE_STRING DnsDomainName;
+ GUID DomainGuid;
+} SECPKG_PARAMETERS, *PSECPKG_PARAMETERS,
+ SECPKG_EVENT_DOMAIN_CHANGE, *PSECPKG_EVENT_DOMAIN_CHANGE;
+
+typedef struct _SECPKG_CLIENT_INFO {
+ LUID LogonId;
+ ULONG ProcessID;
+ ULONG ThreadID;
+ BOOLEAN HasTcbPrivilege;
+ BOOLEAN Impersonating;
+ BOOLEAN Restricted;
+} SECPKG_CLIENT_INFO,
+ *PSECPKG_CLIENT_INFO;
+
+typedef struct _SECURITY_USER_DATA {
+ UNICODE_STRING UserName;
+ UNICODE_STRING LogonDomainName;
+ UNICODE_STRING LogonServer;
+ PSID pSid;
+} SECURITY_USER_DATA, *PSECURITY_USER_DATA,
+ SecurityUserData, *PSecurityUserData;
+
+typedef struct _SECPKG_GSS_INFO {
+ ULONG EncodedIdLength;
+ UCHAR EncodedId[4];
+} SECPKG_GSS_INFO, *PSECPKG_GSS_INFO;
+
+typedef struct _SECPKG_CONTEXT_THUNKS {
+ ULONG InfoLevelCount;
+ ULONG Levels[1];
+} SECPKG_CONTEXT_THUNKS, *PSECPKG_CONTEXT_THUNKS;
+
+typedef struct _SECPKG_MUTUAL_AUTH_LEVEL {
+ ULONG MutualAuthLevel;
+} SECPKG_MUTUAL_AUTH_LEVEL, *PSECPKG_MUTUAL_AUTH_LEVEL;
+
+typedef struct _SECPKG_CALL_INFO {
+ ULONG ProcessId;
+ ULONG ThreadId;
+ ULONG Attributes;
+ ULONG CallCount;
+} SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;
+
+typedef struct _SECPKG_EXTENDED_INFORMATION {
+ SECPKG_EXTENDED_INFORMATION_CLASS Class;
+ union {
+ SECPKG_GSS_INFO GssInfo;
+ SECPKG_CONTEXT_THUNKS ContextThunks;
+ SECPKG_MUTUAL_AUTH_LEVEL MutualAuthLevel;
+ } Info;
+} SECPKG_EXTENDED_INFORMATION, *PSECPKG_EXTENDED_INFORMATION;
+
+typedef struct _SECPKG_TARGETINFO {
+ PSID DomainSid;
+ PCWSTR ComputerName;
+} SECPKG_TARGETINFO, *PSECPKG_TARGETINFO;
+
+/* callbacks implemented by SSP/AP dlls and called by the LSA */
+typedef VOID (NTAPI *PLSA_CALLBACK_FUNCTION)(ULONG_PTR, ULONG_PTR, PSecBuffer,
+ PSecBuffer);
+
+/* misc typedefs used in the below prototypes */
+typedef PVOID *PLSA_CLIENT_REQUEST;
+typedef ULONG LSA_SEC_HANDLE, *PLSA_SEC_HANDLE;
+typedef LPTHREAD_START_ROUTINE SEC_THREAD_START;
+typedef PSECURITY_ATTRIBUTES SEC_ATTRS;
+
+/* functions used by SSP/AP obtainable by dispatch tables */
+typedef NTSTATUS (NTAPI *PLSA_REGISTER_CALLBACK)(ULONG, PLSA_CALLBACK_FUNCTION);
+typedef NTSTATUS (NTAPI *PLSA_CREATE_LOGON_SESSION)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_DELETE_LOGON_SESSION)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_ADD_CREDENTIAL)(PLUID, ULONG, PLSA_STRING,
+ PLSA_STRING);
+typedef NTSTATUS (NTAPI *PLSA_GET_CREDENTIALS)(PLUID, ULONG, PULONG, BOOLEAN,
+ PLSA_STRING, PULONG, PLSA_STRING);
+typedef NTSTATUS (NTAPI *PLSA_DELETE_CREDENTIAL)(PLUID, ULONG, PLSA_STRING);
+typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG);
+typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
+ ULONG, PVOID*);
+typedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG,
+ PVOID, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
+ ULONG, PVOID, PVOID);
+typedef NTSTATUS (NTAPI *PLSA_IMPERSONATE_CLIENT)(void);
+typedef NTSTATUS (NTAPI *PLSA_UNLOAD_PACKAGE)(void);
+typedef NTSTATUS (NTAPI *PLSA_DUPLICATE_HANDLE)(HANDLE, PHANDLE);
+typedef NTSTATUS (NTAPI *PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(PLUID, ULONG,
+ PVOID, BOOLEAN);
+typedef HANDLE (NTAPI *PLSA_CREATE_THREAD)(SEC_ATTRS, ULONG, SEC_THREAD_START,
+ PVOID, ULONG, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_GET_CLIENT_INFO)(PSECPKG_CLIENT_INFO);
+typedef HANDLE (NTAPI *PLSA_REGISTER_NOTIFICATION)(SEC_THREAD_START, PVOID,
+ ULONG, ULONG, ULONG, ULONG, HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_CANCEL_NOTIFICATION)(HANDLE);
+typedef NTSTATUS (NTAPI *PLSA_MAP_BUFFER)(PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI *PLSA_CREATE_TOKEN)(PLUID, PTOKEN_SOURCE,
+ SECURITY_LOGON_TYPE, SECURITY_IMPERSONATION_LEVEL, LSA_TOKEN_INFORMATION_TYPE,
+ PVOID, PTOKEN_GROUPS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING,
+ PUNICODE_STRING, PHANDLE, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_AUDIT_LOGON)(NTSTATUS, NTSTATUS, PUNICODE_STRING,
+ PUNICODE_STRING, PUNICODE_STRING, OPTIONAL PSID, SECURITY_LOGON_TYPE,
+ PTOKEN_SOURCE, PLUID);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
+ PVOID*, PULONG, PNTSTATUS);
+typedef BOOLEAN (NTAPI *PLSA_GET_CALL_INFO)(PSECPKG_CALL_INFO);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGEEX)(PUNICODE_STRING, PVOID, PVOID,
+ ULONG, PVOID*, PULONG, PNTSTATUS);
+typedef PVOID (NTAPI *PLSA_CREATE_SHARED_MEMORY)(ULONG, ULONG);
+typedef PVOID (NTAPI *PLSA_ALLOCATE_SHARED_MEMORY)(PVOID, ULONG);
+typedef VOID (NTAPI *PLSA_FREE_SHARED_MEMORY)(PVOID, PVOID);
+typedef BOOLEAN (NTAPI *PLSA_DELETE_SHARED_MEMORY)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_OPEN_SAM_USER)(PUNICODE_STRING, SECPKG_NAME_TYPE,
+ PUNICODE_STRING, BOOLEAN, ULONG, PVOID*);
+typedef NTSTATUS (NTAPI *PLSA_GET_USER_CREDENTIALS)(PVOID, PVOID *, PULONG,
+ PVOID *, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_GET_USER_AUTH_DATA)(PVOID, PUCHAR *, PULONG);
+typedef NTSTATUS (NTAPI *PLSA_CLOSE_SAM_USER)(PVOID);
+typedef NTSTATUS (NTAPI *PLSA_CONVERT_AUTH_DATA_TO_TOKEN)(PVOID, ULONG,
+ SECURITY_IMPERSONATION_LEVEL, PTOKEN_SOURCE, SECURITY_LOGON_TYPE,
+ PUNICODE_STRING, PHANDLE, PLUID, PUNICODE_STRING, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_CLIENT_CALLBACK)(PCHAR, ULONG_PTR, ULONG_PTR,
+ PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI *PLSA_UPDATE_PRIMARY_CREDENTIALS)(PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY);
+typedef NTSTATUS (NTAPI *PLSA_GET_AUTH_DATA_FOR_USER)(PUNICODE_STRING,
+ SECPKG_NAME_TYPE, PUNICODE_STRING, PUCHAR *, PULONG, PUNICODE_STRING);
+typedef NTSTATUS (NTAPI *PLSA_CRACK_SINGLE_NAME)(ULONG, BOOLEAN,
+ PUNICODE_STRING, PUNICODE_STRING, ULONG, PUNICODE_STRING, PUNICODE_STRING,
+ PULONG);
+typedef NTSTATUS (NTAPI *PLSA_AUDIT_ACCOUNT_LOGON)(ULONG, BOOLEAN,
+ PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, NTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING, PVOID,
+ PVOID, ULONG, PVOID*, PULONG, PNTSTATUS);
+
+/* Dispatch tables of functions used by SSP/AP */
+typedef struct SECPKG_DLL_FUNCTIONS {
+ PLSA_ALLOCATE_LSA_HEAP AllocateHeap;
+ PLSA_FREE_LSA_HEAP FreeHeap;
+ PLSA_REGISTER_CALLBACK RegisterCallback;
+} SECPKG_DLL_FUNCTIONS,
+ *PSECPKG_DLL_FUNCTIONS;
+
+typedef struct LSA_DISPATCH_TABLE {
+ PLSA_CREATE_LOGON_SESSION CreateLogonSession;
+ PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
+ PLSA_ADD_CREDENTIAL AddCredential;
+ PLSA_GET_CREDENTIALS GetCredentials;
+ PLSA_DELETE_CREDENTIAL DeleteCredential;
+ PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
+ PLSA_FREE_LSA_HEAP FreeLsaHeap;
+ PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
+ PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
+ PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
+ PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
+} LSA_DISPATCH_TABLE,
+ *PLSA_DISPATCH_TABLE;
+
+typedef struct _LSA_SECPKG_FUNCTION_TABLE {
+ PLSA_CREATE_LOGON_SESSION CreateLogonSession;
+ PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
+ PLSA_ADD_CREDENTIAL AddCredential;
+ PLSA_GET_CREDENTIALS GetCredentials;
+ PLSA_DELETE_CREDENTIAL DeleteCredential;
+ PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
+ PLSA_FREE_LSA_HEAP FreeLsaHeap;
+ PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
+ PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
+ PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
+ PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
+ PLSA_IMPERSONATE_CLIENT ImpersonateClient;
+ PLSA_UNLOAD_PACKAGE UnloadPackage;
+ PLSA_DUPLICATE_HANDLE DuplicateHandle;
+ PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;
+ PLSA_CREATE_THREAD CreateThread;
+ PLSA_GET_CLIENT_INFO GetClientInfo;
+ PLSA_REGISTER_NOTIFICATION RegisterNotification;
+ PLSA_CANCEL_NOTIFICATION CancelNotification;
+ PLSA_MAP_BUFFER MapBuffer;
+ PLSA_CREATE_TOKEN CreateToken;
+ PLSA_AUDIT_LOGON AuditLogon;
+ PLSA_CALL_PACKAGE CallPackage;
+ PLSA_FREE_LSA_HEAP FreeReturnBuffer;
+ PLSA_GET_CALL_INFO GetCallInfo;
+ PLSA_CALL_PACKAGEEX CallPackageEx;
+ PLSA_CREATE_SHARED_MEMORY CreateSharedMemory;
+ PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory;
+ PLSA_FREE_SHARED_MEMORY FreeSharedMemory;
+ PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory;
+ PLSA_OPEN_SAM_USER OpenSamUser;
+ PLSA_GET_USER_CREDENTIALS GetUserCredentials;
+ PLSA_GET_USER_AUTH_DATA GetUserAuthData;
+ PLSA_CLOSE_SAM_USER CloseSamUser;
+ PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken;
+ PLSA_CLIENT_CALLBACK ClientCallback;
+ PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials;
+ PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser;
+ PLSA_CRACK_SINGLE_NAME CrackSingleName;
+ PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon;
+ PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
+} LSA_SECPKG_FUNCTION_TABLE,
+ *PLSA_SECPKG_FUNCTION_TABLE;
+
+/* LSA-mode functions implemented by SSP/AP obtainable by a dispatch table */
+typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE,
+ PLSA_STRING, PLSA_STRING, PLSA_STRING *);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER)(LPWSTR, LPWSTR, LPWSTR, LPWSTR,
+ DWORD, DWORD, PHANDLE);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
+ PVOID *, PULONG, PNTSTATUS);
+typedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST,
+ PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING,
+ PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST,
+ SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
+ PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
+ PUNICODE_STRING *);
+typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST,
+ SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
+ PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
+ PUNICODE_STRING *, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY *);
+typedef NTSTATUS (SpInitializeFn)(ULONG_PTR, PSECPKG_PARAMETERS,
+ PLSA_SECPKG_FUNCTION_TABLE);
+typedef NTSTATUS (NTAPI SpShutDownFn)(void);
+typedef NTSTATUS (NTAPI SpGetInfoFn)(PSecPkgInfoW);
+typedef NTSTATUS (NTAPI SpAcceptCredentialsFn)(SECURITY_LOGON_TYPE,
+ PUNICODE_STRING, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED);
+typedef NTSTATUS (NTAPI SpAcquireCredentialsHandleFn)(PUNICODE_STRING, ULONG,
+ PLUID, PVOID, PVOID, PVOID, PLSA_SEC_HANDLE, PTimeStamp);
+typedef NTSTATUS (NTAPI SpQueryCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID);
+typedef NTSTATUS (NTAPI SpFreeCredentialsHandleFn)(LSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpSaveCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpGetCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpDeleteCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpInitLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE,
+ PUNICODE_STRING, ULONG, ULONG, PSecBufferDesc, PLSA_SEC_HANDLE, PSecBufferDesc,
+ PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
+typedef NTSTATUS (NTAPI SpAcceptLsaModeContextFn)(LSA_SEC_HANDLE,
+ LSA_SEC_HANDLE, PSecBufferDesc, ULONG, ULONG, PLSA_SEC_HANDLE, PSecBufferDesc,
+ PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
+typedef NTSTATUS (NTAPI SpDeleteContextFn)(LSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpApplyControlTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpGetUserInfoFn)(PLUID, ULONG, PSecurityUserData *);
+typedef NTSTATUS (NTAPI SpGetExtendedInformationFn)(
+ SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION *);
+typedef NTSTATUS (NTAPI SpQueryContextAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID);
+typedef NTSTATUS (NTAPI SpAddCredentialsFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ PUNICODE_STRING, ULONG, PVOID, PVOID, PVOID, PTimeStamp);
+typedef NTSTATUS (NTAPI SpSetExtendedInformationFn)(
+ SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION);
+typedef NTSTATUS (NTAPI SpSetContextAttributesFn)(LSA_SEC_HANDLE, ULONG, PVOID,
+ ULONG);
+typedef NTSTATUS (NTAPI SpSetCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,
+ PVOID, ULONG);
+typedef NTSTATUS (NTAPI SpChangeAccountPasswordFn)(PUNICODE_STRING,
+ PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, BOOLEAN, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpQueryMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ ULONG, PULONG, PUCHAR *, PLSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpExchangeMetaDataFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
+ ULONG, ULONG, PUCHAR, PLSA_SEC_HANDLE);
+typedef NTSTATUS (NTAPI SpGetCredUIContextFn)(LSA_SEC_HANDLE, GUID *, PULONG,
+ PUCHAR *);
+typedef NTSTATUS (NTAPI SpUpdateCredentialsFn)(LSA_SEC_HANDLE, GUID *, ULONG,
+ PUCHAR);
+typedef NTSTATUS (NTAPI SpValidateTargetInfoFn)(PLSA_CLIENT_REQUEST, PVOID,
+ PVOID, ULONG, PSECPKG_TARGETINFO);
+
+/* User-mode functions implemented by SSP/AP obtainable by a dispatch table */
+typedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS,
+ PVOID *);
+typedef NTSTATUS (NTAPI SpInitUserModeContextFn)(LSA_SEC_HANDLE, PSecBuffer);
+typedef NTSTATUS (NTAPI SpMakeSignatureFn)(LSA_SEC_HANDLE, ULONG,
+ PSecBufferDesc, ULONG);
+typedef NTSTATUS (NTAPI SpVerifySignatureFn)(LSA_SEC_HANDLE, PSecBufferDesc,
+ ULONG, PULONG);
+typedef NTSTATUS (NTAPI SpSealMessageFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc,
+ ULONG);
+typedef NTSTATUS (NTAPI SpUnsealMessageFn)(LSA_SEC_HANDLE, PSecBufferDesc,
+ ULONG, PULONG);
+typedef NTSTATUS (NTAPI SpGetContextTokenFn)(LSA_SEC_HANDLE, PHANDLE);
+typedef NTSTATUS (NTAPI SpCompleteAuthTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
+typedef NTSTATUS (NTAPI SpFormatCredentialsFn)(PSecBuffer, PSecBuffer);
+typedef NTSTATUS (NTAPI SpMarshallSupplementalCredsFn)(ULONG, PUCHAR, PULONG,
+ PVOID *);
+typedef NTSTATUS (NTAPI SpExportSecurityContextFn)(LSA_SEC_HANDLE, ULONG,
+ PSecBuffer, PHANDLE);
+typedef NTSTATUS (NTAPI SpImportSecurityContextFn)(PSecBuffer, HANDLE,
+ PLSA_SEC_HANDLE);
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef SetContextAttributes
+#endif
+
+/* dispatch tables of LSA-mode functions implemented by SSP/AP */
+typedef struct SECPKG_FUNCTION_TABLE {
+ PLSA_AP_INITIALIZE_PACKAGE InitializePackage;
+ PLSA_AP_LOGON_USER LsaLogonUser;
+ PLSA_AP_CALL_PACKAGE CallPackage;
+ PLSA_AP_LOGON_TERMINATED LogonTerminated;
+ PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted;
+ PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
+ PLSA_AP_LOGON_USER_EX LogonUserEx;
+ PLSA_AP_LOGON_USER_EX2 LogonUserEx2;
+ SpInitializeFn *Initialize;
+ SpShutDownFn *Shutdown;
+ SpGetInfoFn *GetInfo;
+ SpAcceptCredentialsFn *AcceptCredentials;
+ SpAcquireCredentialsHandleFn *SpAcquireCredentialsHandle;
+ SpQueryCredentialsAttributesFn *SpQueryCredentialsAttributes;
+ SpFreeCredentialsHandleFn *FreeCredentialsHandle;
+ SpSaveCredentialsFn *SaveCredentials;
+ SpGetCredentialsFn *GetCredentials;
+ SpDeleteCredentialsFn *DeleteCredentials;
+ SpInitLsaModeContextFn *InitLsaModeContext;
+ SpAcceptLsaModeContextFn *AcceptLsaModeContext;
+ SpDeleteContextFn *DeleteContext;
+ SpApplyControlTokenFn *ApplyControlToken;
+ SpGetUserInfoFn *GetUserInfo;
+ SpGetExtendedInformationFn *GetExtendedInformation;
+ SpQueryContextAttributesFn *SpQueryContextAttributes;
+ SpAddCredentialsFn *SpAddCredentials;
+ SpSetExtendedInformationFn *SetExtendedInformation;
+ /* Packages with version SECPKG_INTERFACE_VERSION end here */
+ SpSetContextAttributesFn *SetContextAttributes;
+ /* Packages with version SECPKG_INTERFACE_VERSION_2 end here */
+ SpSetCredentialsAttributesFn *SetCredentialsAttributes;
+ /* Packages with version SECPKG_INTERFACE_VERSION_3 end here */
+ SpChangeAccountPasswordFn *ChangeAccountPassword;
+ /* Packages with version SECPKG_INTERFACE_VERSION_4 end here */
+ SpQueryMetaDataFn *QueryMetaData;
+ SpExchangeMetaDataFn *ExchangeMetaData;
+ SpGetCredUIContextFn *GetCredUIContext;
+ SpUpdateCredentialsFn *UpdateCredentials;
+ /* Packages with version SECPKG_INTERFACE_VERSION_5 end here */
+ SpValidateTargetInfoFn *ValidateTargetInfo;
+ /* Packages with version SECPKG_INTERFACE_VERSION_6 end here */
+} SECPKG_FUNCTION_TABLE,
+ *PSECPKG_FUNCTION_TABLE;
+
+/* dispatch tables of user-mode functions implemented by SSP/AP */
+typedef struct SECPKG_USER_FUNCTION_TABLE {
+ SpInstanceInitFn *InstanceInit;
+ SpInitUserModeContextFn *InitUserModeContext;
+ SpMakeSignatureFn *MakeSignature;
+ SpVerifySignatureFn *VerifySignature;
+ SpSealMessageFn *SealMessage;
+ SpUnsealMessageFn *UnsealMessage;
+ SpGetContextTokenFn *GetContextToken;
+ SpQueryContextAttributesFn *SpQueryContextAttributes;
+ SpCompleteAuthTokenFn *CompleteAuthToken;
+ SpDeleteContextFn *DeleteUserModeContext;
+ SpFormatCredentialsFn *FormatCredentials;
+ SpMarshallSupplementalCredsFn *MarshallSupplementalCreds;
+ SpExportSecurityContextFn *ExportContext;
+ SpImportSecurityContextFn *ImportContext;
+} SECPKG_USER_FUNCTION_TABLE,
+ *PSECPKG_USER_FUNCTION_TABLE;
+
+/* LSA-mode entry point to SSP/APs */
+typedef NTSTATUS (NTAPI *SpLsaModeInitializeFn)(ULONG, PULONG,
+ PSECPKG_FUNCTION_TABLE *, PULONG);
+
+/* User-mode entry point to SSP/APs */
+typedef NTSTATUS (WINAPI *SpUserModeInitializeFn)(ULONG, PULONG,
+ PSECPKG_USER_FUNCTION_TABLE *, PULONG);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _NTSECPKG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h
new file mode 100644
index 00000000..ff4127fc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ntstatus.h
@@ -0,0 +1,1229 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_NTSTATUS_H
+#define __WINE_NTSTATUS_H
+
+#ifndef WIN32_NO_STATUS
+
+/*
+ * Exception codes
+ */
+
+#define STATUS_SUCCESS ((NTSTATUS) 0x00000000)
+#define STATUS_SEVERITY_SUCCESS ((NTSTATUS) 0x00000000)
+#define STATUS_SEVERITY_INFORMATIONAL ((NTSTATUS) 0x00000001)
+#define STATUS_SEVERITY_WARNING ((NTSTATUS) 0x00000002)
+#define STATUS_SEVERITY_ERROR ((NTSTATUS) 0x00000003)
+
+#define STATUS_WAIT_0 ((NTSTATUS) 0x00000000)
+#define STATUS_WAIT_1 ((NTSTATUS) 0x00000001)
+#define STATUS_WAIT_2 ((NTSTATUS) 0x00000002)
+#define STATUS_WAIT_3 ((NTSTATUS) 0x00000003)
+#define STATUS_WAIT_63 ((NTSTATUS) 0x0000003f)
+#define STATUS_ABANDONED ((NTSTATUS) 0x00000080)
+#define STATUS_ABANDONED_WAIT_0 ((NTSTATUS) 0x00000080)
+#define STATUS_ABANDONED_WAIT_63 ((NTSTATUS) 0x000000BF)
+#define STATUS_USER_APC ((NTSTATUS) 0x000000C0)
+#define STATUS_KERNEL_APC ((NTSTATUS) 0x00000100)
+#define STATUS_ALERTED ((NTSTATUS) 0x00000101)
+#define STATUS_TIMEOUT ((NTSTATUS) 0x00000102)
+#define STATUS_PENDING ((NTSTATUS) 0x00000103)
+#define STATUS_REPARSE ((NTSTATUS) 0x00000104)
+#define STATUS_MORE_ENTRIES ((NTSTATUS) 0x00000105)
+#define STATUS_NOT_ALL_ASSIGNED ((NTSTATUS) 0x00000106)
+#define STATUS_SOME_NOT_MAPPED ((NTSTATUS) 0x00000107)
+#define STATUS_OPLOCK_BREAK_IN_PROGRESS ((NTSTATUS) 0x00000108)
+#define STATUS_VOLUME_MOUNTED ((NTSTATUS) 0x00000109)
+#define STATUS_RXACT_COMMITTED ((NTSTATUS) 0x0000010A)
+#define STATUS_NOTIFY_CLEANUP ((NTSTATUS) 0x0000010B)
+#define STATUS_NOTIFY_ENUM_DIR ((NTSTATUS) 0x0000010C)
+#define STATUS_NO_QUOTAS_FOR_ACCOUNT ((NTSTATUS) 0x0000010D)
+#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED ((NTSTATUS) 0x0000010E)
+#define STATUS_PAGE_FAULT_TRANSITION ((NTSTATUS) 0x00000110)
+#define STATUS_PAGE_FAULT_DEMAND_ZERO ((NTSTATUS) 0x00000111)
+#define STATUS_PAGE_FAULT_COPY_ON_WRITE ((NTSTATUS) 0x00000112)
+#define STATUS_PAGE_FAULT_GUARD_PAGE ((NTSTATUS) 0x00000113)
+#define STATUS_PAGE_FAULT_PAGING_FILE ((NTSTATUS) 0x00000114)
+#define STATUS_CACHE_PAGE_LOCKED ((NTSTATUS) 0x00000115)
+#define STATUS_CRASH_DUMP ((NTSTATUS) 0x00000116)
+#define STATUS_BUFFER_ALL_ZEROS ((NTSTATUS) 0x00000117)
+#define STATUS_REPARSE_OBJECT ((NTSTATUS) 0x00000118)
+#define STATUS_RESOURCE_REQUIREMENTS_CHANGED ((NTSTATUS) 0x00000119)
+#define STATUS_TRANSLATION_COMPLETE ((NTSTATUS) 0x00000120)
+#define STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY ((NTSTATUS) 0x00000121)
+#define STATUS_NOTHING_TO_TERMINATE ((NTSTATUS) 0x00000122)
+#define STATUS_PROCESS_NOT_IN_JOB ((NTSTATUS) 0x00000123)
+#define STATUS_PROCESS_IN_JOB ((NTSTATUS) 0x00000124)
+#define STATUS_VOLSNAP_HIBERNATE_READY ((NTSTATUS) 0x00000125)
+#define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY ((NTSTATUS) 0x00000126)
+
+#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS) 0x40000000)
+#define STATUS_THREAD_WAS_SUSPENDED ((NTSTATUS) 0x40000001)
+#define STATUS_WORKING_SET_LIMIT_RANGE ((NTSTATUS) 0x40000002)
+#define STATUS_IMAGE_NOT_AT_BASE ((NTSTATUS) 0x40000003)
+#define STATUS_RXACT_STATE_CREATED ((NTSTATUS) 0x40000004)
+#define STATUS_SEGMENT_NOTIFICATION ((NTSTATUS) 0x40000005)
+#define STATUS_LOCAL_USER_SESSION_KEY ((NTSTATUS) 0x40000006)
+#define STATUS_BAD_CURRENT_DIRECTORY ((NTSTATUS) 0x40000007)
+#define STATUS_SERIAL_MORE_WRITES ((NTSTATUS) 0x40000008)
+#define STATUS_REGISTRY_RECOVERED ((NTSTATUS) 0x40000009)
+#define STATUS_FT_READ_RECOVERY_FROM_BACKUP ((NTSTATUS) 0x4000000A)
+#define STATUS_FT_WRITE_RECOVERY ((NTSTATUS) 0x4000000B)
+#define STATUS_SERIAL_COUNTER_TIMEOUT ((NTSTATUS) 0x4000000C)
+#define STATUS_NULL_LM_PASSWORD ((NTSTATUS) 0x4000000D)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH ((NTSTATUS) 0x4000000E)
+#define STATUS_RECEIVE_PARTIAL ((NTSTATUS) 0x4000000F)
+#define STATUS_RECEIVE_EXPEDITED ((NTSTATUS) 0x40000010)
+#define STATUS_RECEIVE_PARTIAL_EXPEDITED ((NTSTATUS) 0x40000011)
+#define STATUS_EVENT_DONE ((NTSTATUS) 0x40000012)
+#define STATUS_EVENT_PENDING ((NTSTATUS) 0x40000013)
+#define STATUS_CHECKING_FILE_SYSTEM ((NTSTATUS) 0x40000014)
+#define STATUS_FATAL_APP_EXIT ((NTSTATUS) 0x40000015)
+#define STATUS_PREDEFINED_HANDLE ((NTSTATUS) 0x40000016)
+#define STATUS_WAS_UNLOCKED ((NTSTATUS) 0x40000017)
+#define STATUS_SERVICE_NOTIFICATION ((NTSTATUS) 0x40000018)
+#define STATUS_WAS_LOCKED ((NTSTATUS) 0x40000019)
+#define STATUS_LOG_HARD_ERROR ((NTSTATUS) 0x4000001A)
+#define STATUS_ALREADY_WIN32 ((NTSTATUS) 0x4000001B)
+#define STATUS_WX86_UNSIMULATE ((NTSTATUS) 0x4000001C)
+#define STATUS_WX86_CONTINUE ((NTSTATUS) 0x4000001D)
+#define STATUS_WX86_SINGLE_STEP ((NTSTATUS) 0x4000001E)
+#define STATUS_WX86_BREAKPOINT ((NTSTATUS) 0x4000001F)
+#define STATUS_WX86_EXCEPTION_CONTINUE ((NTSTATUS) 0x40000020)
+#define STATUS_WX86_EXCEPTION_LASTCHANCE ((NTSTATUS) 0x40000021)
+#define STATUS_WX86_EXCEPTION_CHAIN ((NTSTATUS) 0x40000022)
+#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE ((NTSTATUS) 0x40000023)
+#define STATUS_NO_YIELD_PERFORMED ((NTSTATUS) 0x40000024)
+#define STATUS_TIMER_RESUME_IGNORED ((NTSTATUS) 0x40000025)
+#define STATUS_ARBITRATION_UNHANDLED ((NTSTATUS) 0x40000026)
+#define STATUS_CARDBUS_NOT_SUPPORTED ((NTSTATUS) 0x40000027)
+#define STATUS_WX86_CREATEWX86TIB ((NTSTATUS) 0x40000028)
+#define STATUS_MP_PROCESSOR_MISMATCH ((NTSTATUS) 0x40000029)
+#define STATUS_HIBERNATED ((NTSTATUS) 0x4000002A)
+#define STATUS_RESUME_HIBERNATION ((NTSTATUS) 0x4000002B)
+#define STATUS_FIRMWARE_UPDATED ((NTSTATUS) 0x4000002C)
+#define STATUS_WAKE_SYSTEM ((NTSTATUS) 0x40000294)
+#define STATUS_DS_SHUTTING_DOWN ((NTSTATUS) 0x40000370)
+
+#define RPC_NT_UUID_LOCAL_ONLY ((NTSTATUS) 0x40020056)
+#define RPC_NT_SEND_INCOMPLETE ((NTSTATUS) 0x400200AF)
+
+#define STATUS_CTX_CDM_CONNECT ((NTSTATUS) 0x400A0004)
+#define STATUS_CTX_CDM_DISCONNECT ((NTSTATUS) 0x400A0005)
+
+#define STATUS_SXS_RELEASE_ACTIVATION_CONTEXT ((NTSTATUS) 0x4015000D)
+
+#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS) 0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT ((NTSTATUS) 0x80000002)
+#define STATUS_BREAKPOINT ((NTSTATUS) 0x80000003)
+#define STATUS_SINGLE_STEP ((NTSTATUS) 0x80000004)
+#define STATUS_BUFFER_OVERFLOW ((NTSTATUS) 0x80000005)
+#define STATUS_NO_MORE_FILES ((NTSTATUS) 0x80000006)
+#define STATUS_WAKE_SYSTEM_DEBUGGER ((NTSTATUS) 0x80000007)
+
+#define STATUS_HANDLES_CLOSED ((NTSTATUS) 0x8000000A)
+#define STATUS_NO_INHERITANCE ((NTSTATUS) 0x8000000B)
+#define STATUS_GUID_SUBSTITUTION_MADE ((NTSTATUS) 0x8000000C)
+#define STATUS_PARTIAL_COPY ((NTSTATUS) 0x8000000D)
+#define STATUS_DEVICE_PAPER_EMPTY ((NTSTATUS) 0x8000000E)
+#define STATUS_DEVICE_POWERED_OFF ((NTSTATUS) 0x8000000F)
+#define STATUS_DEVICE_OFF_LINE ((NTSTATUS) 0x80000010)
+#define STATUS_DEVICE_BUSY ((NTSTATUS) 0x80000011)
+#define STATUS_NO_MORE_EAS ((NTSTATUS) 0x80000012)
+#define STATUS_INVALID_EA_NAME ((NTSTATUS) 0x80000013)
+#define STATUS_EA_LIST_INCONSISTENT ((NTSTATUS) 0x80000014)
+#define STATUS_INVALID_EA_FLAG ((NTSTATUS) 0x80000015)
+#define STATUS_VERIFY_REQUIRED ((NTSTATUS) 0x80000016)
+#define STATUS_EXTRANEOUS_INFORMATION ((NTSTATUS) 0x80000017)
+#define STATUS_RXACT_COMMIT_NECESSARY ((NTSTATUS) 0x80000018)
+#define STATUS_NO_MORE_ENTRIES ((NTSTATUS) 0x8000001A)
+#define STATUS_FILEMARK_DETECTED ((NTSTATUS) 0x8000001B)
+#define STATUS_MEDIA_CHANGED ((NTSTATUS) 0x8000001C)
+#define STATUS_BUS_RESET ((NTSTATUS) 0x8000001D)
+#define STATUS_END_OF_MEDIA ((NTSTATUS) 0x8000001E)
+#define STATUS_BEGINNING_OF_MEDIA ((NTSTATUS) 0x8000001F)
+#define STATUS_MEDIA_CHECK ((NTSTATUS) 0x80000020)
+#define STATUS_SETMARK_DETECTED ((NTSTATUS) 0x80000021)
+#define STATUS_NO_DATA_DETECTED ((NTSTATUS) 0x80000022)
+#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000023)
+#define STATUS_SERVER_HAS_OPEN_HANDLES ((NTSTATUS) 0x80000024)
+#define STATUS_ALREADY_DISCONNECTED ((NTSTATUS) 0x80000025)
+#define STATUS_LONGJUMP ((NTSTATUS) 0x80000026)
+#define STATUS_CLEANER_CARTRIDGE_INSTALLED ((NTSTATUS) 0x80000027)
+#define STATUS_PLUGPLAY_QUERY_VETOED ((NTSTATUS) 0x80000028)
+#define STATUS_UNWIND_CONSOLIDATE ((NTSTATUS) 0x80000029)
+#define STATUS_REGISTRY_HIVE_RECOVERED ((NTSTATUS) 0x8000002A)
+#define STATUS_DLL_MIGHT_BE_INSECURE ((NTSTATUS) 0x8000002B)
+#define STATUS_DLL_MIGHT_BE_INCOMPATIBLE ((NTSTATUS) 0x8000002C)
+
+#define STATUS_DEVICE_REQUIRES_CLEANING ((NTSTATUS) 0x80000288)
+#define STATUS_DEVICE_DOOR_OPEN ((NTSTATUS) 0x80000289)
+
+#define STATUS_CLUSTER_NODE_ALREADY_UP ((NTSTATUS) 0x80130001)
+#define STATUS_CLUSTER_NODE_ALREADY_DOWN ((NTSTATUS) 0x80130002)
+#define STATUS_CLUSTER_NETWORK_ALREADY_ONLINE ((NTSTATUS) 0x80130003)
+#define STATUS_CLUSTER_NETWORK_ALREADY_OFFLINE ((NTSTATUS) 0x80130004)
+#define STATUS_CLUSTER_NODE_ALREADY_MEMBER ((NTSTATUS) 0x80130005)
+
+#define STATUS_UNSUCCESSFUL ((NTSTATUS) 0xC0000001)
+#define STATUS_NOT_IMPLEMENTED ((NTSTATUS) 0xC0000002)
+#define STATUS_INVALID_INFO_CLASS ((NTSTATUS) 0xC0000003)
+#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xC0000004)
+#define STATUS_ACCESS_VIOLATION ((NTSTATUS) 0xC0000005)
+#define STATUS_IN_PAGE_ERROR ((NTSTATUS) 0xC0000006)
+#define STATUS_PAGEFILE_QUOTA ((NTSTATUS) 0xC0000007)
+#define STATUS_INVALID_HANDLE ((NTSTATUS) 0xC0000008)
+#define STATUS_BAD_INITIAL_STACK ((NTSTATUS) 0xC0000009)
+#define STATUS_BAD_INITIAL_PC ((NTSTATUS) 0xC000000A)
+#define STATUS_INVALID_CID ((NTSTATUS) 0xC000000B)
+#define STATUS_TIMER_NOT_CANCELED ((NTSTATUS) 0xC000000C)
+#define STATUS_INVALID_PARAMETER ((NTSTATUS) 0xC000000D)
+#define STATUS_NO_SUCH_DEVICE ((NTSTATUS) 0xC000000E)
+#define STATUS_NO_SUCH_FILE ((NTSTATUS) 0xC000000F)
+#define STATUS_INVALID_DEVICE_REQUEST ((NTSTATUS) 0xC0000010)
+#define STATUS_END_OF_FILE ((NTSTATUS) 0xC0000011)
+#define STATUS_WRONG_VOLUME ((NTSTATUS) 0xC0000012)
+#define STATUS_NO_MEDIA_IN_DEVICE ((NTSTATUS) 0xC0000013)
+#define STATUS_UNRECOGNIZED_MEDIA ((NTSTATUS) 0xC0000014)
+#define STATUS_NONEXISTENT_SECTOR ((NTSTATUS) 0xC0000015)
+#define STATUS_MORE_PROCESSING_REQUIRED ((NTSTATUS) 0xC0000016)
+#define STATUS_NO_MEMORY ((NTSTATUS) 0xC0000017)
+#define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS) 0xC0000018)
+#define STATUS_NOT_MAPPED_VIEW ((NTSTATUS) 0xC0000019)
+#define STATUS_UNABLE_TO_FREE_VM ((NTSTATUS) 0xC000001A)
+#define STATUS_UNABLE_TO_DELETE_SECTION ((NTSTATUS) 0xC000001B)
+#define STATUS_INVALID_SYSTEM_SERVICE ((NTSTATUS) 0xC000001C)
+#define STATUS_ILLEGAL_INSTRUCTION ((NTSTATUS) 0xC000001D)
+#define STATUS_INVALID_LOCK_SEQUENCE ((NTSTATUS) 0xC000001E)
+#define STATUS_INVALID_VIEW_SIZE ((NTSTATUS) 0xC000001F)
+#define STATUS_INVALID_FILE_FOR_SECTION ((NTSTATUS) 0xC0000020)
+#define STATUS_ALREADY_COMMITTED ((NTSTATUS) 0xC0000021)
+#define STATUS_ACCESS_DENIED ((NTSTATUS) 0xC0000022)
+#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS) 0xC0000023)
+#define STATUS_OBJECT_TYPE_MISMATCH ((NTSTATUS) 0xC0000024)
+#define STATUS_NONCONTINUABLE_EXCEPTION ((NTSTATUS) 0xC0000025)
+#define STATUS_INVALID_DISPOSITION ((NTSTATUS) 0xC0000026)
+#define STATUS_UNWIND ((NTSTATUS) 0xC0000027)
+#define STATUS_BAD_STACK ((NTSTATUS) 0xC0000028)
+#define STATUS_INVALID_UNWIND_TARGET ((NTSTATUS) 0xC0000029)
+#define STATUS_NOT_LOCKED ((NTSTATUS) 0xC000002A)
+#define STATUS_PARITY_ERROR ((NTSTATUS) 0xC000002B)
+#define STATUS_UNABLE_TO_DECOMMIT_VM ((NTSTATUS) 0xC000002C)
+#define STATUS_NOT_COMMITTED ((NTSTATUS) 0xC000002D)
+#define STATUS_INVALID_PORT_ATTRIBUTES ((NTSTATUS) 0xC000002E)
+#define STATUS_PORT_MESSAGE_TOO_LONG ((NTSTATUS) 0xC000002F)
+#define STATUS_INVALID_PARAMETER_MIX ((NTSTATUS) 0xC0000030)
+#define STATUS_INVALID_QUOTA_LOWER ((NTSTATUS) 0xC0000031)
+#define STATUS_DISK_CORRUPT_ERROR ((NTSTATUS) 0xC0000032)
+#define STATUS_OBJECT_NAME_INVALID ((NTSTATUS) 0xC0000033)
+#define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS) 0xC0000034)
+#define STATUS_OBJECT_NAME_COLLISION ((NTSTATUS) 0xC0000035)
+#define STATUS_PORT_DISCONNECTED ((NTSTATUS) 0xC0000037)
+#define STATUS_DEVICE_ALREADY_ATTACHED ((NTSTATUS) 0xC0000038)
+#define STATUS_OBJECT_PATH_INVALID ((NTSTATUS) 0xC0000039)
+#define STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS) 0xC000003A)
+#define STATUS_OBJECT_PATH_SYNTAX_BAD ((NTSTATUS) 0xC000003B)
+#define STATUS_DATA_OVERRUN ((NTSTATUS) 0xC000003C)
+#define STATUS_DATA_LATE_ERROR ((NTSTATUS) 0xC000003D)
+#define STATUS_DATA_ERROR ((NTSTATUS) 0xC000003E)
+#define STATUS_CRC_ERROR ((NTSTATUS) 0xC000003F)
+#define STATUS_SECTION_TOO_BIG ((NTSTATUS) 0xC0000040)
+#define STATUS_PORT_CONNECTION_REFUSED ((NTSTATUS) 0xC0000041)
+#define STATUS_INVALID_PORT_HANDLE ((NTSTATUS) 0xC0000042)
+#define STATUS_SHARING_VIOLATION ((NTSTATUS) 0xC0000043)
+#define STATUS_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000044)
+#define STATUS_INVALID_PAGE_PROTECTION ((NTSTATUS) 0xC0000045)
+#define STATUS_MUTANT_NOT_OWNED ((NTSTATUS) 0xC0000046)
+#define STATUS_SEMAPHORE_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000047)
+#define STATUS_PORT_ALREADY_SET ((NTSTATUS) 0xC0000048)
+#define STATUS_SECTION_NOT_IMAGE ((NTSTATUS) 0xC0000049)
+#define STATUS_SUSPEND_COUNT_EXCEEDED ((NTSTATUS) 0xC000004A)
+#define STATUS_THREAD_IS_TERMINATING ((NTSTATUS) 0xC000004B)
+#define STATUS_BAD_WORKING_SET_LIMIT ((NTSTATUS) 0xC000004C)
+#define STATUS_INCOMPATIBLE_FILE_MAP ((NTSTATUS) 0xC000004D)
+#define STATUS_SECTION_PROTECTION ((NTSTATUS) 0xC000004E)
+#define STATUS_EAS_NOT_SUPPORTED ((NTSTATUS) 0xC000004F)
+#define STATUS_EA_TOO_LARGE ((NTSTATUS) 0xC0000050)
+#define STATUS_NONEXISTENT_EA_ENTRY ((NTSTATUS) 0xC0000051)
+#define STATUS_NO_EAS_ON_FILE ((NTSTATUS) 0xC0000052)
+#define STATUS_EA_CORRUPT_ERROR ((NTSTATUS) 0xC0000053)
+#define STATUS_FILE_LOCK_CONFLICT ((NTSTATUS) 0xC0000054)
+#define STATUS_LOCK_NOT_GRANTED ((NTSTATUS) 0xC0000055)
+#define STATUS_DELETE_PENDING ((NTSTATUS) 0xC0000056)
+#define STATUS_CTL_FILE_NOT_SUPPORTED ((NTSTATUS) 0xC0000057)
+#define STATUS_UNKNOWN_REVISION ((NTSTATUS) 0xC0000058)
+#define STATUS_REVISION_MISMATCH ((NTSTATUS) 0xC0000059)
+#define STATUS_INVALID_OWNER ((NTSTATUS) 0xC000005A)
+#define STATUS_INVALID_PRIMARY_GROUP ((NTSTATUS) 0xC000005B)
+#define STATUS_NO_IMPERSONATION_TOKEN ((NTSTATUS) 0xC000005C)
+#define STATUS_CANT_DISABLE_MANDATORY ((NTSTATUS) 0xC000005D)
+#define STATUS_NO_LOGON_SERVERS ((NTSTATUS) 0xC000005E)
+#define STATUS_NO_SUCH_LOGON_SESSION ((NTSTATUS) 0xC000005F)
+#define STATUS_NO_SUCH_PRIVILEGE ((NTSTATUS) 0xC0000060)
+#define STATUS_PRIVILEGE_NOT_HELD ((NTSTATUS) 0xC0000061)
+#define STATUS_INVALID_ACCOUNT_NAME ((NTSTATUS) 0xC0000062)
+#define STATUS_USER_EXISTS ((NTSTATUS) 0xC0000063)
+#define STATUS_NO_SUCH_USER ((NTSTATUS) 0xC0000064)
+#define STATUS_GROUP_EXISTS ((NTSTATUS) 0xC0000065)
+#define STATUS_NO_SUCH_GROUP ((NTSTATUS) 0xC0000066)
+#define STATUS_MEMBER_IN_GROUP ((NTSTATUS) 0xC0000067)
+#define STATUS_MEMBER_NOT_IN_GROUP ((NTSTATUS) 0xC0000068)
+#define STATUS_LAST_ADMIN ((NTSTATUS) 0xC0000069)
+#define STATUS_WRONG_PASSWORD ((NTSTATUS) 0xC000006A)
+#define STATUS_ILL_FORMED_PASSWORD ((NTSTATUS) 0xC000006B)
+#define STATUS_PASSWORD_RESTRICTION ((NTSTATUS) 0xC000006C)
+#define STATUS_LOGON_FAILURE ((NTSTATUS) 0xC000006D)
+#define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS) 0xC000006E)
+#define STATUS_INVALID_LOGON_HOURS ((NTSTATUS) 0xC000006F)
+#define STATUS_INVALID_WORKSTATION ((NTSTATUS) 0xC0000070)
+#define STATUS_PASSWORD_EXPIRED ((NTSTATUS) 0xC0000071)
+#define STATUS_ACCOUNT_DISABLED ((NTSTATUS) 0xC0000072)
+#define STATUS_NONE_MAPPED ((NTSTATUS) 0xC0000073)
+#define STATUS_TOO_MANY_LUIDS_REQUESTED ((NTSTATUS) 0xC0000074)
+#define STATUS_LUIDS_EXHAUSTED ((NTSTATUS) 0xC0000075)
+#define STATUS_INVALID_SUB_AUTHORITY ((NTSTATUS) 0xC0000076)
+#define STATUS_INVALID_ACL ((NTSTATUS) 0xC0000077)
+#define STATUS_INVALID_SID ((NTSTATUS) 0xC0000078)
+#define STATUS_INVALID_SECURITY_DESCR ((NTSTATUS) 0xC0000079)
+#define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS) 0xC000007A)
+#define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS) 0xC000007B)
+#define STATUS_NO_TOKEN ((NTSTATUS) 0xC000007C)
+#define STATUS_BAD_INHERITANCE_ACL ((NTSTATUS) 0xC000007D)
+#define STATUS_RANGE_NOT_LOCKED ((NTSTATUS) 0xC000007E)
+#define STATUS_DISK_FULL ((NTSTATUS) 0xC000007F)
+#define STATUS_SERVER_DISABLED ((NTSTATUS) 0xC0000080)
+#define STATUS_SERVER_NOT_DISABLED ((NTSTATUS) 0xC0000081)
+#define STATUS_TOO_MANY_GUIDS_REQUESTED ((NTSTATUS) 0xC0000082)
+#define STATUS_GUIDS_EXHAUSTED ((NTSTATUS) 0xC0000083)
+#define STATUS_INVALID_ID_AUTHORITY ((NTSTATUS) 0xC0000084)
+#define STATUS_AGENTS_EXHAUSTED ((NTSTATUS) 0xC0000085)
+#define STATUS_INVALID_VOLUME_LABEL ((NTSTATUS) 0xC0000086)
+#define STATUS_SECTION_NOT_EXTENDED ((NTSTATUS) 0xC0000087)
+#define STATUS_NOT_MAPPED_DATA ((NTSTATUS) 0xC0000088)
+#define STATUS_RESOURCE_DATA_NOT_FOUND ((NTSTATUS) 0xC0000089)
+#define STATUS_RESOURCE_TYPE_NOT_FOUND ((NTSTATUS) 0xC000008A)
+#define STATUS_RESOURCE_NAME_NOT_FOUND ((NTSTATUS) 0xC000008B)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED ((NTSTATUS) 0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND ((NTSTATUS) 0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO ((NTSTATUS) 0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT ((NTSTATUS) 0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION ((NTSTATUS) 0xC0000090)
+#define STATUS_FLOAT_OVERFLOW ((NTSTATUS) 0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW ((NTSTATUS) 0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS) 0xC0000094)
+#define STATUS_INTEGER_OVERFLOW ((NTSTATUS) 0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION ((NTSTATUS) 0xC0000096)
+#define STATUS_TOO_MANY_PAGING_FILES ((NTSTATUS) 0xC0000097)
+#define STATUS_FILE_INVALID ((NTSTATUS) 0xC0000098)
+#define STATUS_ALLOTTED_SPACE_EXCEEDED ((NTSTATUS) 0xC0000099)
+#define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS) 0xC000009A)
+#define STATUS_DFS_EXIT_PATH_FOUND ((NTSTATUS) 0xC000009B)
+#define STATUS_DEVICE_DATA_ERROR ((NTSTATUS) 0xC000009C)
+#define STATUS_DEVICE_NOT_CONNECTED ((NTSTATUS) 0xC000009D)
+#define STATUS_DEVICE_POWER_FAILURE ((NTSTATUS) 0xC000009E)
+#define STATUS_FREE_VM_NOT_AT_BASE ((NTSTATUS) 0xC000009F)
+#define STATUS_MEMORY_NOT_ALLOCATED ((NTSTATUS) 0xC00000A0)
+#define STATUS_WORKING_SET_QUOTA ((NTSTATUS) 0xC00000A1)
+#define STATUS_MEDIA_WRITE_PROTECTED ((NTSTATUS) 0xC00000A2)
+#define STATUS_DEVICE_NOT_READY ((NTSTATUS) 0xC00000A3)
+#define STATUS_INVALID_GROUP_ATTRIBUTES ((NTSTATUS) 0xC00000A4)
+#define STATUS_BAD_IMPERSONATION_LEVEL ((NTSTATUS) 0xC00000A5)
+#define STATUS_CANT_OPEN_ANONYMOUS ((NTSTATUS) 0xC00000A6)
+#define STATUS_BAD_VALIDATION_CLASS ((NTSTATUS) 0xC00000A7)
+#define STATUS_BAD_TOKEN_TYPE ((NTSTATUS) 0xC00000A8)
+#define STATUS_BAD_MASTER_BOOT_RECORD ((NTSTATUS) 0xC00000A9)
+#define STATUS_INSTRUCTION_MISALIGNMENT ((NTSTATUS) 0xC00000AA)
+#define STATUS_INSTANCE_NOT_AVAILABLE ((NTSTATUS) 0xC00000AB)
+#define STATUS_PIPE_NOT_AVAILABLE ((NTSTATUS) 0xC00000AC)
+#define STATUS_INVALID_PIPE_STATE ((NTSTATUS) 0xC00000AD)
+#define STATUS_PIPE_BUSY ((NTSTATUS) 0xC00000AE)
+#define STATUS_ILLEGAL_FUNCTION ((NTSTATUS) 0xC00000AF)
+#define STATUS_PIPE_DISCONNECTED ((NTSTATUS) 0xC00000B0)
+#define STATUS_PIPE_CLOSING ((NTSTATUS) 0xC00000B1)
+#define STATUS_PIPE_CONNECTED ((NTSTATUS) 0xC00000B2)
+#define STATUS_PIPE_LISTENING ((NTSTATUS) 0xC00000B3)
+#define STATUS_INVALID_READ_MODE ((NTSTATUS) 0xC00000B4)
+#define STATUS_IO_TIMEOUT ((NTSTATUS) 0xC00000B5)
+#define STATUS_FILE_FORCED_CLOSED ((NTSTATUS) 0xC00000B6)
+#define STATUS_PROFILING_NOT_STARTED ((NTSTATUS) 0xC00000B7)
+#define STATUS_PROFILING_NOT_STOPPED ((NTSTATUS) 0xC00000B8)
+#define STATUS_COULD_NOT_INTERPRET ((NTSTATUS) 0xC00000B9)
+#define STATUS_FILE_IS_A_DIRECTORY ((NTSTATUS) 0xC00000BA)
+#define STATUS_NOT_SUPPORTED ((NTSTATUS) 0xC00000BB)
+#define STATUS_REMOTE_NOT_LISTENING ((NTSTATUS) 0xC00000BC)
+#define STATUS_DUPLICATE_NAME ((NTSTATUS) 0xC00000BD)
+#define STATUS_BAD_NETWORK_PATH ((NTSTATUS) 0xC00000BE)
+#define STATUS_NETWORK_BUSY ((NTSTATUS) 0xC00000BF)
+#define STATUS_DEVICE_DOES_NOT_EXIST ((NTSTATUS) 0xC00000C0)
+#define STATUS_TOO_MANY_COMMANDS ((NTSTATUS) 0xC00000C1)
+#define STATUS_ADAPTER_HARDWARE_ERROR ((NTSTATUS) 0xC00000C2)
+#define STATUS_INVALID_NETWORK_RESPONSE ((NTSTATUS) 0xC00000C3)
+#define STATUS_UNEXPECTED_NETWORK_ERROR ((NTSTATUS) 0xC00000C4)
+#define STATUS_BAD_REMOTE_ADAPTER ((NTSTATUS) 0xC00000C5)
+#define STATUS_PRINT_QUEUE_FULL ((NTSTATUS) 0xC00000C6)
+#define STATUS_NO_SPOOL_SPACE ((NTSTATUS) 0xC00000C7)
+#define STATUS_PRINT_CANCELLED ((NTSTATUS) 0xC00000C8)
+#define STATUS_NETWORK_NAME_DELETED ((NTSTATUS) 0xC00000C9)
+#define STATUS_NETWORK_ACCESS_DENIED ((NTSTATUS) 0xC00000CA)
+#define STATUS_BAD_DEVICE_TYPE ((NTSTATUS) 0xC00000CB)
+#define STATUS_BAD_NETWORK_NAME ((NTSTATUS) 0xC00000CC)
+#define STATUS_TOO_MANY_NAMES ((NTSTATUS) 0xC00000CD)
+#define STATUS_TOO_MANY_SESSIONS ((NTSTATUS) 0xC00000CE)
+#define STATUS_SHARING_PAUSED ((NTSTATUS) 0xC00000CF)
+#define STATUS_REQUEST_NOT_ACCEPTED ((NTSTATUS) 0xC00000D0)
+#define STATUS_REDIRECTOR_PAUSED ((NTSTATUS) 0xC00000D1)
+#define STATUS_NET_WRITE_FAULT ((NTSTATUS) 0xC00000D2)
+#define STATUS_PROFILING_AT_LIMIT ((NTSTATUS) 0xC00000D3)
+#define STATUS_NOT_SAME_DEVICE ((NTSTATUS) 0xC00000D4)
+#define STATUS_FILE_RENAMED ((NTSTATUS) 0xC00000D5)
+#define STATUS_VIRTUAL_CIRCUIT_CLOSED ((NTSTATUS) 0xC00000D6)
+#define STATUS_NO_SECURITY_ON_OBJECT ((NTSTATUS) 0xC00000D7)
+#define STATUS_CANT_WAIT ((NTSTATUS) 0xC00000D8)
+#define STATUS_PIPE_EMPTY ((NTSTATUS) 0xC00000D9)
+#define STATUS_CANT_ACCESS_DOMAIN_INFO ((NTSTATUS) 0xC00000DA)
+#define STATUS_CANT_TERMINATE_SELF ((NTSTATUS) 0xC00000DB)
+#define STATUS_INVALID_SERVER_STATE ((NTSTATUS) 0xC00000DC)
+#define STATUS_INVALID_DOMAIN_STATE ((NTSTATUS) 0xC00000DD)
+#define STATUS_INVALID_DOMAIN_ROLE ((NTSTATUS) 0xC00000DE)
+#define STATUS_NO_SUCH_DOMAIN ((NTSTATUS) 0xC00000DF)
+#define STATUS_DOMAIN_EXISTS ((NTSTATUS) 0xC00000E0)
+#define STATUS_DOMAIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00000E1)
+#define STATUS_OPLOCK_NOT_GRANTED ((NTSTATUS) 0xC00000E2)
+#define STATUS_INVALID_OPLOCK_PROTOCOL ((NTSTATUS) 0xC00000E3)
+#define STATUS_INTERNAL_DB_CORRUPTION ((NTSTATUS) 0xC00000E4)
+#define STATUS_INTERNAL_ERROR ((NTSTATUS) 0xC00000E5)
+#define STATUS_GENERIC_NOT_MAPPED ((NTSTATUS) 0xC00000E6)
+#define STATUS_BAD_DESCRIPTOR_FORMAT ((NTSTATUS) 0xC00000E7)
+#define STATUS_INVALID_USER_BUFFER ((NTSTATUS) 0xC00000E8)
+#define STATUS_UNEXPECTED_IO_ERROR ((NTSTATUS) 0xC00000E9)
+#define STATUS_UNEXPECTED_MM_CREATE_ERR ((NTSTATUS) 0xC00000EA)
+#define STATUS_UNEXPECTED_MM_MAP_ERROR ((NTSTATUS) 0xC00000EB)
+#define STATUS_UNEXPECTED_MM_EXTEND_ERR ((NTSTATUS) 0xC00000EC)
+#define STATUS_NOT_LOGON_PROCESS ((NTSTATUS) 0xC00000ED)
+#define STATUS_LOGON_SESSION_EXISTS ((NTSTATUS) 0xC00000EE)
+#define STATUS_INVALID_PARAMETER_1 ((NTSTATUS) 0xC00000EF)
+#define STATUS_INVALID_PARAMETER_2 ((NTSTATUS) 0xC00000F0)
+#define STATUS_INVALID_PARAMETER_3 ((NTSTATUS) 0xC00000F1)
+#define STATUS_INVALID_PARAMETER_4 ((NTSTATUS) 0xC00000F2)
+#define STATUS_INVALID_PARAMETER_5 ((NTSTATUS) 0xC00000F3)
+#define STATUS_INVALID_PARAMETER_6 ((NTSTATUS) 0xC00000F4)
+#define STATUS_INVALID_PARAMETER_7 ((NTSTATUS) 0xC00000F5)
+#define STATUS_INVALID_PARAMETER_8 ((NTSTATUS) 0xC00000F6)
+#define STATUS_INVALID_PARAMETER_9 ((NTSTATUS) 0xC00000F7)
+#define STATUS_INVALID_PARAMETER_10 ((NTSTATUS) 0xC00000F8)
+#define STATUS_INVALID_PARAMETER_11 ((NTSTATUS) 0xC00000F9)
+#define STATUS_INVALID_PARAMETER_12 ((NTSTATUS) 0xC00000FA)
+#define STATUS_REDIRECTOR_NOT_STARTED ((NTSTATUS) 0xC00000FB)
+#define STATUS_REDIRECTOR_STARTED ((NTSTATUS) 0xC00000FC)
+#define STATUS_STACK_OVERFLOW ((NTSTATUS) 0xC00000FD)
+#define STATUS_NO_SUCH_PACKAGE ((NTSTATUS) 0xC00000FE)
+#define STATUS_BAD_FUNCTION_TABLE ((NTSTATUS) 0xC00000FF)
+#define STATUS_VARIABLE_NOT_FOUND ((NTSTATUS) 0xC0000100)
+#define STATUS_DIRECTORY_NOT_EMPTY ((NTSTATUS) 0xC0000101)
+#define STATUS_FILE_CORRUPT_ERROR ((NTSTATUS) 0xC0000102)
+#define STATUS_NOT_A_DIRECTORY ((NTSTATUS) 0xC0000103)
+#define STATUS_BAD_LOGON_SESSION_STATE ((NTSTATUS) 0xC0000104)
+#define STATUS_LOGON_SESSION_COLLISION ((NTSTATUS) 0xC0000105)
+#define STATUS_NAME_TOO_LONG ((NTSTATUS) 0xC0000106)
+#define STATUS_FILES_OPEN ((NTSTATUS) 0xC0000107)
+#define STATUS_CONNECTION_IN_USE ((NTSTATUS) 0xC0000108)
+#define STATUS_MESSAGE_NOT_FOUND ((NTSTATUS) 0xC0000109)
+#define STATUS_PROCESS_IS_TERMINATING ((NTSTATUS) 0xC000010A)
+#define STATUS_INVALID_LOGON_TYPE ((NTSTATUS) 0xC000010B)
+#define STATUS_NO_GUID_TRANSLATION ((NTSTATUS) 0xC000010C)
+#define STATUS_CANNOT_IMPERSONATE ((NTSTATUS) 0xC000010D)
+#define STATUS_IMAGE_ALREADY_LOADED ((NTSTATUS) 0xC000010E)
+#define STATUS_ABIOS_NOT_PRESENT ((NTSTATUS) 0xC000010F)
+#define STATUS_ABIOS_LID_NOT_EXIST ((NTSTATUS) 0xC0000110)
+#define STATUS_ABIOS_LID_ALREADY_OWNED ((NTSTATUS) 0xC0000111)
+#define STATUS_ABIOS_NOT_LID_OWNER ((NTSTATUS) 0xC0000112)
+#define STATUS_ABIOS_INVALID_COMMAND ((NTSTATUS) 0xC0000113)
+#define STATUS_ABIOS_INVALID_LID ((NTSTATUS) 0xC0000114)
+#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE ((NTSTATUS) 0xC0000115)
+#define STATUS_ABIOS_INVALID_SELECTOR ((NTSTATUS) 0xC0000116)
+#define STATUS_NO_LDT ((NTSTATUS) 0xC0000117)
+#define STATUS_INVALID_LDT_SIZE ((NTSTATUS) 0xC0000118)
+#define STATUS_INVALID_LDT_OFFSET ((NTSTATUS) 0xC0000119)
+#define STATUS_INVALID_LDT_DESCRIPTOR ((NTSTATUS) 0xC000011A)
+#define STATUS_INVALID_IMAGE_NE_FORMAT ((NTSTATUS) 0xC000011B)
+#define STATUS_RXACT_INVALID_STATE ((NTSTATUS) 0xC000011C)
+#define STATUS_RXACT_COMMIT_FAILURE ((NTSTATUS) 0xC000011D)
+#define STATUS_MAPPED_FILE_SIZE_ZERO ((NTSTATUS) 0xC000011E)
+#define STATUS_TOO_MANY_OPENED_FILES ((NTSTATUS) 0xC000011F)
+#define STATUS_CANCELLED ((NTSTATUS) 0xC0000120)
+#define STATUS_CANNOT_DELETE ((NTSTATUS) 0xC0000121)
+#define STATUS_INVALID_COMPUTER_NAME ((NTSTATUS) 0xC0000122)
+#define STATUS_FILE_DELETED ((NTSTATUS) 0xC0000123)
+#define STATUS_SPECIAL_ACCOUNT ((NTSTATUS) 0xC0000124)
+#define STATUS_SPECIAL_GROUP ((NTSTATUS) 0xC0000125)
+#define STATUS_SPECIAL_USER ((NTSTATUS) 0xC0000126)
+#define STATUS_MEMBERS_PRIMARY_GROUP ((NTSTATUS) 0xC0000127)
+#define STATUS_FILE_CLOSED ((NTSTATUS) 0xC0000128)
+#define STATUS_TOO_MANY_THREADS ((NTSTATUS) 0xC0000129)
+#define STATUS_THREAD_NOT_IN_PROCESS ((NTSTATUS) 0xC000012A)
+#define STATUS_TOKEN_ALREADY_IN_USE ((NTSTATUS) 0xC000012B)
+#define STATUS_PAGEFILE_QUOTA_EXCEEDED ((NTSTATUS) 0xC000012C)
+#define STATUS_COMMITMENT_LIMIT ((NTSTATUS) 0xC000012D)
+#define STATUS_INVALID_IMAGE_LE_FORMAT ((NTSTATUS) 0xC000012E)
+#define STATUS_INVALID_IMAGE_NOT_MZ ((NTSTATUS) 0xC000012F)
+#define STATUS_INVALID_IMAGE_PROTECT ((NTSTATUS) 0xC0000130)
+#define STATUS_INVALID_IMAGE_WIN_16 ((NTSTATUS) 0xC0000131)
+#define STATUS_LOGON_SERVER_CONFLICT ((NTSTATUS) 0xC0000132)
+#define STATUS_TIME_DIFFERENCE_AT_DC ((NTSTATUS) 0xC0000133)
+#define STATUS_SYNCHRONIZATION_REQUIRED ((NTSTATUS) 0xC0000134)
+#define STATUS_DLL_NOT_FOUND ((NTSTATUS) 0xC0000135)
+#define STATUS_OPEN_FAILED ((NTSTATUS) 0xC0000136)
+#define STATUS_IO_PRIVILEGE_FAILED ((NTSTATUS) 0xC0000137)
+#define STATUS_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000138)
+#define STATUS_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000139)
+#define STATUS_CONTROL_C_EXIT ((NTSTATUS) 0xC000013A)
+#define STATUS_LOCAL_DISCONNECT ((NTSTATUS) 0xC000013B)
+#define STATUS_REMOTE_DISCONNECT ((NTSTATUS) 0xC000013C)
+#define STATUS_REMOTE_RESOURCES ((NTSTATUS) 0xC000013D)
+#define STATUS_LINK_FAILED ((NTSTATUS) 0xC000013E)
+#define STATUS_LINK_TIMEOUT ((NTSTATUS) 0xC000013F)
+#define STATUS_INVALID_CONNECTION ((NTSTATUS) 0xC0000140)
+#define STATUS_INVALID_ADDRESS ((NTSTATUS) 0xC0000141)
+#define STATUS_DLL_INIT_FAILED ((NTSTATUS) 0xC0000142)
+#define STATUS_MISSING_SYSTEMFILE ((NTSTATUS) 0xC0000143)
+#define STATUS_UNHANDLED_EXCEPTION ((NTSTATUS) 0xC0000144)
+#define STATUS_APP_INIT_FAILURE ((NTSTATUS) 0xC0000145)
+#define STATUS_PAGEFILE_CREATE_FAILED ((NTSTATUS) 0xC0000146)
+#define STATUS_NO_PAGEFILE ((NTSTATUS) 0xC0000147)
+#define STATUS_INVALID_LEVEL ((NTSTATUS) 0xC0000148)
+#define STATUS_WRONG_PASSWORD_CORE ((NTSTATUS) 0xC0000149)
+#define STATUS_ILLEGAL_FLOAT_CONTEXT ((NTSTATUS) 0xC000014A)
+#define STATUS_PIPE_BROKEN ((NTSTATUS) 0xC000014B)
+#define STATUS_REGISTRY_CORRUPT ((NTSTATUS) 0xC000014C)
+#define STATUS_REGISTRY_IO_FAILED ((NTSTATUS) 0xC000014D)
+#define STATUS_NO_EVENT_PAIR ((NTSTATUS) 0xC000014E)
+#define STATUS_UNRECOGNIZED_VOLUME ((NTSTATUS) 0xC000014F)
+#define STATUS_SERIAL_NO_DEVICE_INITED ((NTSTATUS) 0xC0000150)
+#define STATUS_NO_SUCH_ALIAS ((NTSTATUS) 0xC0000151)
+#define STATUS_MEMBER_NOT_IN_ALIAS ((NTSTATUS) 0xC0000152)
+#define STATUS_MEMBER_IN_ALIAS ((NTSTATUS) 0xC0000153)
+#define STATUS_ALIAS_EXISTS ((NTSTATUS) 0xC0000154)
+#define STATUS_LOGON_NOT_GRANTED ((NTSTATUS) 0xC0000155)
+#define STATUS_TOO_MANY_SECRETS ((NTSTATUS) 0xC0000156)
+#define STATUS_SECRET_TOO_LONG ((NTSTATUS) 0xC0000157)
+#define STATUS_INTERNAL_DB_ERROR ((NTSTATUS) 0xC0000158)
+#define STATUS_FULLSCREEN_MODE ((NTSTATUS) 0xC0000159)
+#define STATUS_TOO_MANY_CONTEXT_IDS ((NTSTATUS) 0xC000015A)
+#define STATUS_LOGON_TYPE_NOT_GRANTED ((NTSTATUS) 0xC000015B)
+#define STATUS_NOT_REGISTRY_FILE ((NTSTATUS) 0xC000015C)
+#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000015D)
+#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR ((NTSTATUS) 0xC000015E)
+#define STATUS_FT_MISSING_MEMBER ((NTSTATUS) 0xC000015F)
+#define STATUS_ILL_FORMED_SERVICE_ENTRY ((NTSTATUS) 0xC0000160)
+#define STATUS_ILLEGAL_CHARACTER ((NTSTATUS) 0xC0000161)
+#define STATUS_UNMAPPABLE_CHARACTER ((NTSTATUS) 0xC0000162)
+#define STATUS_UNDEFINED_CHARACTER ((NTSTATUS) 0xC0000163)
+#define STATUS_FLOPPY_VOLUME ((NTSTATUS) 0xC0000164)
+#define STATUS_FLOPPY_ID_MARK_NOT_FOUND ((NTSTATUS) 0xC0000165)
+#define STATUS_FLOPPY_WRONG_CYLINDER ((NTSTATUS) 0xC0000166)
+#define STATUS_FLOPPY_UNKNOWN_ERROR ((NTSTATUS) 0xC0000167)
+#define STATUS_FLOPPY_BAD_REGISTERS ((NTSTATUS) 0xC0000168)
+#define STATUS_DISK_RECALIBRATE_FAILED ((NTSTATUS) 0xC0000169)
+#define STATUS_DISK_OPERATION_FAILED ((NTSTATUS) 0xC000016A)
+#define STATUS_DISK_RESET_FAILED ((NTSTATUS) 0xC000016B)
+#define STATUS_SHARED_IRQ_BUSY ((NTSTATUS) 0xC000016C)
+#define STATUS_FT_ORPHANING ((NTSTATUS) 0xC000016D)
+#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT ((NTSTATUS) 0xC000016E)
+
+#define STATUS_PARTITION_FAILURE ((NTSTATUS) 0xC0000172)
+#define STATUS_INVALID_BLOCK_LENGTH ((NTSTATUS) 0xC0000173)
+#define STATUS_DEVICE_NOT_PARTITIONED ((NTSTATUS) 0xC0000174)
+#define STATUS_UNABLE_TO_LOCK_MEDIA ((NTSTATUS) 0xC0000175)
+#define STATUS_UNABLE_TO_UNLOAD_MEDIA ((NTSTATUS) 0xC0000176)
+#define STATUS_EOM_OVERFLOW ((NTSTATUS) 0xC0000177)
+#define STATUS_NO_MEDIA ((NTSTATUS) 0xC0000178)
+#define STATUS_NO_SUCH_MEMBER ((NTSTATUS) 0xC000017A)
+#define STATUS_INVALID_MEMBER ((NTSTATUS) 0xC000017B)
+#define STATUS_KEY_DELETED ((NTSTATUS) 0xC000017C)
+#define STATUS_NO_LOG_SPACE ((NTSTATUS) 0xC000017D)
+#define STATUS_TOO_MANY_SIDS ((NTSTATUS) 0xC000017E)
+#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED ((NTSTATUS) 0xC000017F)
+#define STATUS_KEY_HAS_CHILDREN ((NTSTATUS) 0xC0000180)
+#define STATUS_CHILD_MUST_BE_VOLATILE ((NTSTATUS) 0xC0000181)
+#define STATUS_DEVICE_CONFIGURATION_ERROR ((NTSTATUS) 0xC0000182)
+#define STATUS_DRIVER_INTERNAL_ERROR ((NTSTATUS) 0xC0000183)
+#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS) 0xC0000184)
+#define STATUS_IO_DEVICE_ERROR ((NTSTATUS) 0xC0000185)
+#define STATUS_DEVICE_PROTOCOL_ERROR ((NTSTATUS) 0xC0000186)
+#define STATUS_BACKUP_CONTROLLER ((NTSTATUS) 0xC0000187)
+#define STATUS_LOG_FILE_FULL ((NTSTATUS) 0xC0000188)
+#define STATUS_TOO_LATE ((NTSTATUS) 0xC0000189)
+#define STATUS_NO_TRUST_LSA_SECRET ((NTSTATUS) 0xC000018A)
+#define STATUS_NO_TRUST_SAM_ACCOUNT ((NTSTATUS) 0xC000018B)
+#define STATUS_TRUSTED_DOMAIN_FAILURE ((NTSTATUS) 0xC000018C)
+#define STATUS_TRUSTED_RELATIONSHIP_FAILURE ((NTSTATUS) 0xC000018D)
+#define STATUS_EVENTLOG_FILE_CORRUPT ((NTSTATUS) 0xC000018E)
+#define STATUS_EVENTLOG_CANT_START ((NTSTATUS) 0xC000018F)
+#define STATUS_TRUST_FAILURE ((NTSTATUS) 0xC0000190)
+#define STATUS_MUTANT_LIMIT_EXCEEDED ((NTSTATUS) 0xC0000191)
+#define STATUS_NETLOGON_NOT_STARTED ((NTSTATUS) 0xC0000192)
+#define STATUS_ACCOUNT_EXPIRED ((NTSTATUS) 0xC0000193)
+#define STATUS_POSSIBLE_DEADLOCK ((NTSTATUS) 0xC0000194)
+#define STATUS_NETWORK_CREDENTIAL_CONFLICT ((NTSTATUS) 0xC0000195)
+#define STATUS_REMOTE_SESSION_LIMIT ((NTSTATUS) 0xC0000196)
+#define STATUS_EVENTLOG_FILE_CHANGED ((NTSTATUS) 0xC0000197)
+#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ((NTSTATUS) 0xC0000198)
+#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT ((NTSTATUS) 0xC0000199)
+#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT ((NTSTATUS) 0xC000019A)
+#define STATUS_DOMAIN_TRUST_INCONSISTENT ((NTSTATUS) 0xC000019B)
+#define STATUS_FS_DRIVER_REQUIRED ((NTSTATUS) 0xC000019C)
+#define STATUS_NO_USER_SESSION_KEY ((NTSTATUS) 0xC0000202)
+#define STATUS_USER_SESSION_DELETED ((NTSTATUS) 0xC0000203)
+#define STATUS_RESOURCE_LANG_NOT_FOUND ((NTSTATUS) 0xC0000204)
+#define STATUS_INSUFF_SERVER_RESOURCES ((NTSTATUS) 0xC0000205)
+#define STATUS_INVALID_BUFFER_SIZE ((NTSTATUS) 0xC0000206)
+#define STATUS_INVALID_ADDRESS_COMPONENT ((NTSTATUS) 0xC0000207)
+#define STATUS_INVALID_ADDRESS_WILDCARD ((NTSTATUS) 0xC0000208)
+#define STATUS_TOO_MANY_ADDRESSES ((NTSTATUS) 0xC0000209)
+#define STATUS_ADDRESS_ALREADY_EXISTS ((NTSTATUS) 0xC000020A)
+#define STATUS_ADDRESS_CLOSED ((NTSTATUS) 0xC000020B)
+#define STATUS_CONNECTION_DISCONNECTED ((NTSTATUS) 0xC000020C)
+#define STATUS_CONNECTION_RESET ((NTSTATUS) 0xC000020D)
+#define STATUS_TOO_MANY_NODES ((NTSTATUS) 0xC000020E)
+#define STATUS_TRANSACTION_ABORTED ((NTSTATUS) 0xC000020F)
+#define STATUS_TRANSACTION_TIMED_OUT ((NTSTATUS) 0xC0000210)
+#define STATUS_TRANSACTION_NO_RELEASE ((NTSTATUS) 0xC0000211)
+#define STATUS_TRANSACTION_NO_MATCH ((NTSTATUS) 0xC0000212)
+#define STATUS_TRANSACTION_RESPONDED ((NTSTATUS) 0xC0000213)
+#define STATUS_TRANSACTION_INVALID_ID ((NTSTATUS) 0xC0000214)
+#define STATUS_TRANSACTION_INVALID_TYPE ((NTSTATUS) 0xC0000215)
+#define STATUS_NOT_SERVER_SESSION ((NTSTATUS) 0xC0000216)
+#define STATUS_NOT_CLIENT_SESSION ((NTSTATUS) 0xC0000217)
+#define STATUS_CANNOT_LOAD_REGISTRY_FILE ((NTSTATUS) 0xC0000218)
+#define STATUS_DEBUG_ATTACH_FAILED ((NTSTATUS) 0xC0000219)
+#define STATUS_SYSTEM_PROCESS_TERMINATED ((NTSTATUS) 0xC000021A)
+#define STATUS_DATA_NOT_ACCEPTED ((NTSTATUS) 0xC000021B)
+#define STATUS_NO_BROWSER_SERVERS_FOUND ((NTSTATUS) 0xC000021C)
+#define STATUS_VDM_HARD_ERROR ((NTSTATUS) 0xC000021D)
+#define STATUS_DRIVER_CANCEL_TIMEOUT ((NTSTATUS) 0xC000021E)
+#define STATUS_REPLY_MESSAGE_MISMATCH ((NTSTATUS) 0xC000021F)
+#define STATUS_MAPPED_ALIGNMENT ((NTSTATUS) 0xC0000220)
+#define STATUS_IMAGE_CHECKSUM_MISMATCH ((NTSTATUS) 0xC0000221)
+#define STATUS_LOST_WRITEBEHIND_DATA ((NTSTATUS) 0xC0000222)
+#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID ((NTSTATUS) 0xC0000223)
+#define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS) 0xC0000224)
+#define STATUS_NOT_FOUND ((NTSTATUS) 0xC0000225)
+#define STATUS_NOT_TINY_STREAM ((NTSTATUS) 0xC0000226)
+#define STATUS_RECOVERY_FAILURE ((NTSTATUS) 0xC0000227)
+#define STATUS_STACK_OVERFLOW_READ ((NTSTATUS) 0xC0000228)
+#define STATUS_FAIL_CHECK ((NTSTATUS) 0xC0000229)
+#define STATUS_DUPLICATE_OBJECTID ((NTSTATUS) 0xC000022A)
+#define STATUS_OBJECTID_EXISTS ((NTSTATUS) 0xC000022B)
+#define STATUS_CONVERT_TO_LARGE ((NTSTATUS) 0xC000022C)
+#define STATUS_RETRY ((NTSTATUS) 0xC000022D)
+#define STATUS_FOUND_OUT_OF_SCOPE ((NTSTATUS) 0xC000022E)
+#define STATUS_ALLOCATE_BUCKET ((NTSTATUS) 0xC000022F)
+#define STATUS_PROPSET_NOT_FOUND ((NTSTATUS) 0xC0000230)
+#define STATUS_MARSHALL_OVERFLOW ((NTSTATUS) 0xC0000231)
+#define STATUS_INVALID_VARIANT ((NTSTATUS) 0xC0000232)
+#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND ((NTSTATUS) 0xC0000233)
+#define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS) 0xC0000234)
+#define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS) 0xC0000235)
+#define STATUS_CONNECTION_REFUSED ((NTSTATUS) 0xC0000236)
+#define STATUS_GRACEFUL_DISCONNECT ((NTSTATUS) 0xC0000237)
+#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS) 0xC0000238)
+#define STATUS_ADDRESS_NOT_ASSOCIATED ((NTSTATUS) 0xC0000239)
+#define STATUS_CONNECTION_INVALID ((NTSTATUS) 0xC000023A)
+#define STATUS_CONNECTION_ACTIVE ((NTSTATUS) 0xC000023B)
+#define STATUS_NETWORK_UNREACHABLE ((NTSTATUS) 0xC000023C)
+#define STATUS_HOST_UNREACHABLE ((NTSTATUS) 0xC000023D)
+#define STATUS_PROTOCOL_UNREACHABLE ((NTSTATUS) 0xC000023E)
+#define STATUS_PORT_UNREACHABLE ((NTSTATUS) 0xC000023F)
+#define STATUS_REQUEST_ABORTED ((NTSTATUS) 0xC0000240)
+#define STATUS_CONNECTION_ABORTED ((NTSTATUS) 0xC0000241)
+#define STATUS_BAD_COMPRESSION_BUFFER ((NTSTATUS) 0xC0000242)
+#define STATUS_USER_MAPPED_FILE ((NTSTATUS) 0xC0000243)
+#define STATUS_AUDIT_FAILED ((NTSTATUS) 0xC0000244)
+#define STATUS_TIMER_RESOLUTION_NOT_SET ((NTSTATUS) 0xC0000245)
+#define STATUS_CONNECTION_COUNT_LIMIT ((NTSTATUS) 0xC0000246)
+#define STATUS_LOGIN_TIME_RESTRICTION ((NTSTATUS) 0xC0000247)
+#define STATUS_LOGIN_WKSTA_RESTRICTION ((NTSTATUS) 0xC0000248)
+#define STATUS_IMAGE_MP_UP_MISMATCH ((NTSTATUS) 0xC0000249)
+#define STATUS_INSUFFICIENT_LOGON_INFO ((NTSTATUS) 0xC0000250)
+#define STATUS_BAD_DLL_ENTRYPOINT ((NTSTATUS) 0xC0000251)
+#define STATUS_BAD_SERVICE_ENTRYPOINT ((NTSTATUS) 0xC0000252)
+#define STATUS_LPC_REPLY_LOST ((NTSTATUS) 0xC0000253)
+#define STATUS_IP_ADDRESS_CONFLICT1 ((NTSTATUS) 0xC0000254)
+#define STATUS_IP_ADDRESS_CONFLICT2 ((NTSTATUS) 0xC0000255)
+#define STATUS_REGISTRY_QUOTA_LIMIT ((NTSTATUS) 0xC0000256)
+#define STATUS_PATH_NOT_COVERED ((NTSTATUS) 0xC0000257)
+#define STATUS_NO_CALLBACK_ACTIVE ((NTSTATUS) 0xC0000258)
+#define STATUS_LICENSE_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000259)
+#define STATUS_PWD_TOO_SHORT ((NTSTATUS) 0xC000025A)
+#define STATUS_PWD_TOO_RECENT ((NTSTATUS) 0xC000025B)
+#define STATUS_PWD_HISTORY_CONFLICT ((NTSTATUS) 0xC000025C)
+#define STATUS_PLUGPLAY_NO_DEVICE ((NTSTATUS) 0xC000025E)
+#define STATUS_UNSUPPORTED_COMPRESSION ((NTSTATUS) 0xC000025F)
+#define STATUS_INVALID_HW_PROFILE ((NTSTATUS) 0xC0000260)
+#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH ((NTSTATUS) 0xC0000261)
+#define STATUS_DRIVER_ORDINAL_NOT_FOUND ((NTSTATUS) 0xC0000262)
+#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND ((NTSTATUS) 0xC0000263)
+#define STATUS_RESOURCE_NOT_OWNED ((NTSTATUS) 0xC0000264)
+#define STATUS_TOO_MANY_LINKS ((NTSTATUS) 0xC0000265)
+#define STATUS_QUOTA_LIST_INCONSISTENT ((NTSTATUS) 0xC0000266)
+#define STATUS_FILE_IS_OFFLINE ((NTSTATUS) 0xC0000267)
+#define STATUS_EVALUATION_EXPIRATION ((NTSTATUS) 0xC0000268)
+#define STATUS_ILLEGAL_DLL_RELOCATION ((NTSTATUS) 0xC0000269)
+#define STATUS_LICENSE_VIOLATION ((NTSTATUS) 0xC000026A)
+#define STATUS_DLL_INIT_FAILED_LOGOFF ((NTSTATUS) 0xC000026B)
+#define STATUS_DRIVER_UNABLE_TO_LOAD ((NTSTATUS) 0xC000026C)
+#define STATUS_DFS_UNAVAILABLE ((NTSTATUS) 0xC000026D)
+#define STATUS_VOLUME_DISMOUNTED ((NTSTATUS) 0xC000026E)
+#define STATUS_WX86_INTERNAL_ERROR ((NTSTATUS) 0xC000026F)
+#define STATUS_WX86_FLOAT_STACK_CHECK ((NTSTATUS) 0xC0000270)
+#define STATUS_VALIDATE_CONTINUE ((NTSTATUS) 0xC0000271)
+#define STATUS_NO_MATCH ((NTSTATUS) 0xC0000272)
+#define STATUS_NO_MORE_MATCHES ((NTSTATUS) 0xC0000273)
+#define STATUS_NOT_A_REPARSE_POINT ((NTSTATUS) 0xC0000275)
+#define STATUS_IO_REPARSE_TAG_INVALID ((NTSTATUS) 0xC0000276)
+#define STATUS_IO_REPARSE_TAG_MISMATCH ((NTSTATUS) 0xC0000277)
+#define STATUS_IO_REPARSE_DATA_INVALID ((NTSTATUS) 0xC0000278)
+#define STATUS_IO_REPARSE_TAG_NOT_HANDLED ((NTSTATUS) 0xC0000279)
+#define STATUS_REPARSE_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000280)
+#define STATUS_DIRECTORY_IS_A_REPARSE_POINT ((NTSTATUS) 0xC0000281)
+#define STATUS_RANGE_LIST_CONFLICT ((NTSTATUS) 0xC0000282)
+#define STATUS_SOURCE_ELEMENT_EMPTY ((NTSTATUS) 0xC0000283)
+#define STATUS_DESTINATION_ELEMENT_FULL ((NTSTATUS) 0xC0000284)
+#define STATUS_ILLEGAL_ELEMENT_ADDRESS ((NTSTATUS) 0xC0000285)
+#define STATUS_MAGAZINE_NOT_PRESENT ((NTSTATUS) 0xC0000286)
+#define STATUS_REINITIALIZATION_NEEDED ((NTSTATUS) 0xC0000287)
+#define STATUS_ENCRYPTION_FAILED ((NTSTATUS) 0xC000028A)
+#define STATUS_DECRYPTION_FAILED ((NTSTATUS) 0xC000028B)
+#define STATUS_RANGE_NOT_FOUND ((NTSTATUS) 0xC000028C)
+#define STATUS_NO_RECOVERY_POLICY ((NTSTATUS) 0xC000028D)
+#define STATUS_NO_EFS ((NTSTATUS) 0xC000028E)
+#define STATUS_WRONG_EFS ((NTSTATUS) 0xC000028F)
+#define STATUS_NO_USER_KEYS ((NTSTATUS) 0xC0000290)
+#define STATUS_FILE_NOT_ENCRYPTED ((NTSTATUS) 0xC0000291)
+#define STATUS_NOT_EXPORT_FORMAT ((NTSTATUS) 0xC0000292)
+#define STATUS_FILE_ENCRYPTED ((NTSTATUS) 0xC0000293)
+#define STATUS_WMI_GUID_NOT_FOUND ((NTSTATUS) 0xC0000295)
+#define STATUS_WMI_INSTANCE_NOT_FOUND ((NTSTATUS) 0xC0000296)
+#define STATUS_WMI_ITEMID_NOT_FOUND ((NTSTATUS) 0xC0000297)
+#define STATUS_WMI_TRY_AGAIN ((NTSTATUS) 0xC0000298)
+#define STATUS_SHARED_POLICY ((NTSTATUS) 0xC0000299)
+#define STATUS_POLICY_OBJECT_NOT_FOUND ((NTSTATUS) 0xC000029A)
+#define STATUS_POLICY_ONLY_IN_DS ((NTSTATUS) 0xC000029B)
+#define STATUS_VOLUME_NOT_UPGRADED ((NTSTATUS) 0xC000029C)
+#define STATUS_REMOTE_STORAGE_NOT_ACTIVE ((NTSTATUS) 0xC000029D)
+#define STATUS_REMOTE_STORAGE_MEDIA_ERROR ((NTSTATUS) 0xC000029E)
+#define STATUS_NO_TRACKING_SERVICE ((NTSTATUS) 0xC000029F)
+#define STATUS_SERVER_SID_MISMATCH ((NTSTATUS) 0xC00002A0)
+#define STATUS_DS_NO_ATTRIBUTE_OR_VALUE ((NTSTATUS) 0xC00002A1)
+#define STATUS_DS_INVALID_ATTRIBUTE_SYNTAX ((NTSTATUS) 0xC00002A2)
+#define STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED ((NTSTATUS) 0xC00002A3)
+#define STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS ((NTSTATUS) 0xC00002A4)
+#define STATUS_DS_BUSY ((NTSTATUS) 0xC00002A5)
+#define STATUS_DS_UNAVAILABLE ((NTSTATUS) 0xC00002A6)
+#define STATUS_DS_NO_RIDS_ALLOCATED ((NTSTATUS) 0xC00002A7)
+#define STATUS_DS_NO_MORE_RIDS ((NTSTATUS) 0xC00002A8)
+#define STATUS_DS_INCORRECT_ROLE_OWNER ((NTSTATUS) 0xC00002A9)
+#define STATUS_DS_RIDMGR_INIT_ERROR ((NTSTATUS) 0xC00002AA)
+#define STATUS_DS_OBJ_CLASS_VIOLATION ((NTSTATUS) 0xC00002AB)
+#define STATUS_DS_CANT_ON_NON_LEAF ((NTSTATUS) 0xC00002AC)
+#define STATUS_DS_CANT_ON_RDN ((NTSTATUS) 0xC00002AD)
+#define STATUS_DS_CANT_MOD_OBJ_CLASS ((NTSTATUS) 0xC00002AE)
+#define STATUS_DS_CROSS_DOM_MOVE_FAILED ((NTSTATUS) 0xC00002AF)
+#define STATUS_DS_GC_NOT_AVAILABLE ((NTSTATUS) 0xC00002B0)
+#define STATUS_DIRECTORY_SERVICE_REQUIRED ((NTSTATUS) 0xC00002B1)
+#define STATUS_REPARSE_ATTRIBUTE_CONFLICT ((NTSTATUS) 0xC00002B2)
+#define STATUS_CANT_ENABLE_DENY_ONLY ((NTSTATUS) 0xC00002B3)
+#define STATUS_FLOAT_MULTIPLE_FAULTS ((NTSTATUS) 0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS ((NTSTATUS) 0xC00002B5)
+#define STATUS_DEVICE_REMOVED ((NTSTATUS) 0xC00002B6)
+#define STATUS_JOURNAL_DELETE_IN_PROGRESS ((NTSTATUS) 0xC00002B7)
+#define STATUS_JOURNAL_NOT_ACTIVE ((NTSTATUS) 0xC00002B8)
+#define STATUS_NOINTERFACE ((NTSTATUS) 0xC00002B9)
+#define STATUS_DS_ADMIN_LIMIT_EXCEEDED ((NTSTATUS) 0xC00002C1)
+#define STATUS_DRIVER_FAILED_SLEEP ((NTSTATUS) 0xC00002C2)
+#define STATUS_MUTUAL_AUTHENTICATION_FAILED ((NTSTATUS) 0xC00002C3)
+#define STATUS_CORRUPT_SYSTEM_FILE ((NTSTATUS) 0xC00002C4)
+#define STATUS_DATATYPE_MISALIGNMENT_ERROR ((NTSTATUS) 0xC00002C5)
+#define STATUS_WMI_READ_ONLY ((NTSTATUS) 0xC00002C6)
+#define STATUS_WMI_SET_FAILURE ((NTSTATUS) 0xC00002C7)
+#define STATUS_COMMITMENT_MINIMUM ((NTSTATUS) 0xC00002C8)
+#define STATUS_REG_NAT_CONSUMPTION ((NTSTATUS) 0xC00002C9)
+#define STATUS_TRANSPORT_FULL ((NTSTATUS) 0xC00002CA)
+#define STATUS_DS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002CB)
+#define STATUS_ONLY_IF_CONNECTED ((NTSTATUS) 0xC00002CC)
+#define STATUS_DS_SENSITIVE_GROUP_VIOLATION ((NTSTATUS) 0xC00002CD)
+#define STATUS_PNP_RESTART_ENUMERATION ((NTSTATUS) 0xC00002CE)
+#define STATUS_JOURNAL_ENTRY_DELETED ((NTSTATUS) 0xC00002CF)
+#define STATUS_DS_CANT_MOD_PRIMARYGROUPID ((NTSTATUS) 0xC00002D0)
+#define STATUS_SYSTEM_IMAGE_BAD_SIGNATURE ((NTSTATUS) 0xC00002D1)
+#define STATUS_PNP_REBOOT_REQUIRED ((NTSTATUS) 0xC00002D2)
+#define STATUS_POWER_STATE_INVALID ((NTSTATUS) 0xC00002D3)
+#define STATUS_DS_INVALID_GROUP_TYPE ((NTSTATUS) 0xC00002D4)
+#define STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D5)
+#define STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN ((NTSTATUS) 0xC00002D6)
+#define STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D7)
+#define STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC00002D8)
+#define STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER ((NTSTATUS) 0xC00002D9)
+#define STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER ((NTSTATUS) 0xC00002DA)
+#define STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER ((NTSTATUS) 0xC00002DB)
+#define STATUS_DS_HAVE_PRIMARY_MEMBERS ((NTSTATUS) 0xC00002DC)
+#define STATUS_WMI_NOT_SUPPORTED ((NTSTATUS) 0xC00002DD)
+#define STATUS_INSUFFICIENT_POWER ((NTSTATUS) 0xC00002DE)
+#define STATUS_SAM_NEED_BOOTKEY_PASSWORD ((NTSTATUS) 0xC00002DF)
+#define STATUS_SAM_NEED_BOOTKEY_FLOPPY ((NTSTATUS) 0xC00002E0)
+#define STATUS_DS_CANT_START ((NTSTATUS) 0xC00002E1)
+#define STATUS_DS_INIT_FAILURE ((NTSTATUS) 0xC00002E2)
+#define STATUS_SAM_INIT_FAILURE ((NTSTATUS) 0xC00002E3)
+#define STATUS_DS_GC_REQUIRED ((NTSTATUS) 0xC00002E4)
+#define STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY ((NTSTATUS) 0xC00002E5)
+#define STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS ((NTSTATUS) 0xC00002E6)
+#define STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED ((NTSTATUS) 0xC00002E7)
+#define STATUS_MULTIPLE_FAULT_VIOLATION ((NTSTATUS) 0xC00002E8)
+#define STATUS_CURRENT_DOMAIN_NOT_ALLOWED ((NTSTATUS) 0xC00002E9)
+#define STATUS_CANNOT_MAKE ((NTSTATUS) 0xC00002EA)
+#define STATUS_SYSTEM_SHUTDOWN ((NTSTATUS) 0xC00002EB)
+#define STATUS_DS_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002EC)
+#define STATUS_DS_SAM_INIT_FAILURE_CONSOLE ((NTSTATUS) 0xC00002ED)
+#define STATUS_UNFINISHED_CONTEXT_DELETED ((NTSTATUS) 0xC00002EE)
+#define STATUS_NO_TGT_REPLY ((NTSTATUS) 0xC00002EF)
+#define STATUS_OBJECTID_NOT_FOUND ((NTSTATUS) 0xC00002F0)
+#define STATUS_NO_IP_ADDRESSES ((NTSTATUS) 0xC00002F1)
+#define STATUS_WRONG_CREDENTIAL_HANDLE ((NTSTATUS) 0xC00002F2)
+#define STATUS_CRYPTO_SYSTEM_INVALID ((NTSTATUS) 0xC00002F3)
+#define STATUS_MAX_REFERRALS_EXCEEDED ((NTSTATUS) 0xC00002F4)
+#define STATUS_MUST_BE_KDC ((NTSTATUS) 0xC00002F5)
+#define STATUS_STRONG_CRYPTO_NOT_SUPPORTED ((NTSTATUS) 0xC00002F6)
+#define STATUS_TOO_MANY_PRINCIPALS ((NTSTATUS) 0xC00002F7)
+#define STATUS_NO_PA_DATA ((NTSTATUS) 0xC00002F8)
+#define STATUS_PKINIT_NAME_MISMATCH ((NTSTATUS) 0xC00002F9)
+#define STATUS_SMARTCARD_LOGON_REQUIRED ((NTSTATUS) 0xC00002FA)
+#define STATUS_KDC_INVALID_REQUEST ((NTSTATUS) 0xC00002FB)
+#define STATUS_KDC_UNABLE_TO_REFER ((NTSTATUS) 0xC00002FC)
+#define STATUS_KDC_UNKNOWN_ETYPE ((NTSTATUS) 0xC00002FD)
+#define STATUS_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FE)
+#define STATUS_SERVER_SHUTDOWN_IN_PROGRESS ((NTSTATUS) 0xC00002FF)
+#define STATUS_NOT_SUPPORTED_ON_SBS ((NTSTATUS) 0xC0000300)
+#define STATUS_WMI_GUID_DISCONNECTED ((NTSTATUS) 0xC0000301)
+#define STATUS_WMI_ALREADY_DISABLED ((NTSTATUS) 0xC0000302)
+#define STATUS_WMI_ALREADY_ENABLED ((NTSTATUS) 0xC0000303)
+#define STATUS_MFT_TOO_FRAGMENTED ((NTSTATUS) 0xC0000304)
+#define STATUS_COPY_PROTECTION_FAILURE ((NTSTATUS) 0xC0000305)
+#define STATUS_CSS_AUTHENTICATION_FAILURE ((NTSTATUS) 0xC0000306)
+#define STATUS_CSS_KEY_NOT_PRESENT ((NTSTATUS) 0xC0000307)
+#define STATUS_CSS_KEY_NOT_ESTABLISHED ((NTSTATUS) 0xC0000308)
+#define STATUS_CSS_SCRAMBLED_SECTOR ((NTSTATUS) 0xC0000309)
+#define STATUS_CSS_REGION_MISMATCH ((NTSTATUS) 0xC000030A)
+#define STATUS_CSS_RESETS_EXHAUSTED ((NTSTATUS) 0xC000030B)
+#define STATUS_PKINIT_FAILURE ((NTSTATUS) 0xC0000320)
+#define STATUS_SMARTCARD_SUBSYSTEM_FAILURE ((NTSTATUS) 0xC0000321)
+#define STATUS_NO_KERB_KEY ((NTSTATUS) 0xC0000322)
+#define STATUS_HOST_DOWN ((NTSTATUS) 0xC0000350)
+#define STATUS_UNSUPPORTED_PREAUTH ((NTSTATUS) 0xC0000351)
+#define STATUS_EFS_ALG_BLOB_TOO_BIG ((NTSTATUS) 0xC0000352)
+#define STATUS_PORT_NOT_SET ((NTSTATUS) 0xC0000353)
+#define STATUS_DEBUGGER_INACTIVE ((NTSTATUS) 0xC0000354)
+#define STATUS_DS_VERSION_CHECK_FAILURE ((NTSTATUS) 0xC0000355)
+#define STATUS_AUDITING_DISABLED ((NTSTATUS) 0xC0000356)
+#define STATUS_PRENT4_MACHINE_ACCOUNT ((NTSTATUS) 0xC0000357)
+#define STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER ((NTSTATUS) 0xC0000358)
+#define STATUS_INVALID_IMAGE_WIN_32 ((NTSTATUS) 0xC0000359)
+#define STATUS_INVALID_IMAGE_WIN_64 ((NTSTATUS) 0xC000035A)
+#define STATUS_BAD_BINDINGS ((NTSTATUS) 0xC000035B)
+#define STATUS_NETWORK_SESSION_EXPIRED ((NTSTATUS) 0xC000035C)
+#define STATUS_APPHELP_BLOCK ((NTSTATUS) 0xC000035D)
+#define STATUS_ALL_SIDS_FILTERED ((NTSTATUS) 0xC000035E)
+#define STATUS_NOT_SAFE_MODE_DRIVER ((NTSTATUS) 0xC000035F)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_DEFAULT ((NTSTATUS) 0xC0000361)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PATH ((NTSTATUS) 0xC0000362)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_PUBLISHER ((NTSTATUS) 0xC0000363)
+#define STATUS_ACCESS_DISABLED_BY_POLICY_OTHER ((NTSTATUS) 0xC0000364)
+#define STATUS_FAILED_DRIVER_ENTRY ((NTSTATUS) 0xC0000365)
+#define STATUS_DEVICE_ENUMERATION_ERROR ((NTSTATUS) 0xC0000366)
+#define STATUS_WAIT_FOR_OPLOCK ((NTSTATUS) 0x00000367)
+#define STATUS_MOUNT_POINT_NOT_RESOLVED ((NTSTATUS) 0xC0000368)
+#define STATUS_INVALID_DEVICE_OBJECT_PARAMETER ((NTSTATUS) 0xC0000369)
+/* STATUS_MCA_OCCURED is not a typo, as per Microsoft's headers */
+#define STATUS_MCA_OCCURED ((NTSTATUS) 0xC000036A)
+#define STATUS_DRIVER_BLOCKED_CRITICAL ((NTSTATUS) 0xC000036B)
+#define STATUS_DRIVER_BLOCKED ((NTSTATUS) 0xC000036C)
+#define STATUS_DRIVER_DATABASE_ERROR ((NTSTATUS) 0xC000036D)
+#define STATUS_SYSTEM_HIVE_TOO_LARGE ((NTSTATUS) 0xC000036E)
+#define STATUS_INVALID_IMPORT_OF_NON_DLL ((NTSTATUS) 0xC000036F)
+#define STATUS_SMARTCARD_WRONG_PIN ((NTSTATUS) 0xC0000380)
+#define STATUS_SMARTCARD_CARD_BLOCKED ((NTSTATUS) 0xC0000381)
+#define STATUS_SMARTCARD_CARD_NOT_AUTHENTICATED ((NTSTATUS) 0xC0000382)
+#define STATUS_SMARTCARD_NO_CARD ((NTSTATUS) 0xC0000383)
+#define STATUS_SMARTCARD_NO_KEY_CONTAINER ((NTSTATUS) 0xC0000384)
+#define STATUS_SMARTCARD_NO_CERTIFICATE ((NTSTATUS) 0xC0000385)
+#define STATUS_SMARTCARD_NO_KEYSET ((NTSTATUS) 0xC0000386)
+#define STATUS_SMARTCARD_IO_ERROR ((NTSTATUS) 0xC0000387)
+#define STATUS_DOWNGRADE_DETECTED ((NTSTATUS) 0xC0000388)
+#define STATUS_SMARTCARD_CERT_REVOKED ((NTSTATUS) 0xC0000389)
+#define STATUS_ISSUING_CA_UNTRUSTED ((NTSTATUS) 0xC000038A)
+#define STATUS_REVOCATION_OFFLINE_C ((NTSTATUS) 0xC000038B)
+#define STATUS_PKINIT_CLIENT_FAILURE ((NTSTATUS) 0xC000038C)
+#define STATUS_SMARTCARD_CERT_EXPIRED ((NTSTATUS) 0xC000038D)
+#define STATUS_DRIVER_FAILED_PRIOR_UNLOAD ((NTSTATUS) 0xC000038E)
+#define STATUS_SMARTCARD_SILENT_CONTEXT ((NTSTATUS) 0xC000038F)
+#define STATUS_PER_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000401)
+#define STATUS_ALL_USER_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000402)
+#define STATUS_USER_DELETE_TRUST_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000403)
+#define STATUS_DS_NAME_NOT_UNIQUE ((NTSTATUS) 0xC0000404)
+#define STATUS_DS_DUPLICATE_ID_FOUND ((NTSTATUS) 0xC0000405)
+#define STATUS_DS_GROUP_CONVERSION_ERROR ((NTSTATUS) 0xC0000406)
+#define STATUS_VOLSNAP_PREPARE_HIBERNATE ((NTSTATUS) 0xC0000407)
+#define STATUS_USER2USER_REQUIRED ((NTSTATUS) 0xC0000408)
+#define STATUS_STACK_BUFFER_OVERRUN ((NTSTATUS) 0xC0000409)
+#define STATUS_NO_S4U_PROT_SUPPORT ((NTSTATUS) 0xC000040A)
+#define STATUS_CROSSREALM_DELEGATION_FAILURE ((NTSTATUS) 0xC000040B)
+#define STATUS_REVOCATION_OFFLINE_KDC ((NTSTATUS) 0xC000040C)
+#define STATUS_ISSUING_CA_UNTRUSTED_KDC ((NTSTATUS) 0xC000040D)
+#define STATUS_KDC_CERT_EXPIRED ((NTSTATUS) 0xC000040E)
+#define STATUS_KDC_CERT_REVOKED ((NTSTATUS) 0xC000040F)
+#define STATUS_PARAMETER_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000410)
+#define STATUS_HIBERNATION_FAILURE ((NTSTATUS) 0xC0000411)
+#define STATUS_DELAY_LOAD_FAILED ((NTSTATUS) 0xC0000412)
+#define STATUS_AUTHENTICATION_FIREWALL_FAILED ((NTSTATUS) 0xC0000413)
+#define STATUS_VDM_DISALLOWED ((NTSTATUS) 0xC0000414)
+#define STATUS_HUNG_DISPLAY_DRIVER_THREAD ((NTSTATUS) 0xC0000415)
+#define STATUS_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE ((NTSTATUS) 0xC0000416)
+#define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS) 0xC0000417)
+#define STATUS_NTLM_BLOCKED ((NTSTATUS) 0xC0000418)
+#define STATUS_ASSERTION_FAILURE ((NTSTATUS) 0xC0000420)
+#define STATUS_VERIFIER_STOP ((NTSTATUS) 0xC0000421)
+#define STATUS_CALLBACK_POP_STACK ((NTSTATUS) 0xC0000423)
+#define STATUS_INCOMPATIBLE_DRIVER_BLOCKED ((NTSTATUS) 0xC0000424)
+#define STATUS_HIVE_UNLOADED ((NTSTATUS) 0xC0000425)
+#define STATUS_COMPRESSION_DISABLED ((NTSTATUS) 0xC0000426)
+#define STATUS_FILE_SYSTEM_LIMITATION ((NTSTATUS) 0xC0000427)
+#define STATUS_INVALID_IMAGE_HASH ((NTSTATUS) 0xC0000428)
+#define STATUS_NOT_CAPABLE ((NTSTATUS) 0xC0000429)
+#define STATUS_REQUEST_OUT_OF_SEQUENCE ((NTSTATUS) 0xC000042A)
+#define STATUS_IMPLEMENTATION_LIMIT ((NTSTATUS) 0xC000042B)
+#define STATUS_ELEVATION_REQUIRED ((NTSTATUS) 0xC000042C)
+#define STATUS_BEYOND_VDL ((NTSTATUS) 0xC0000432)
+#define STATUS_ENCOUNTERED_WRITE_IN_PROGRESS ((NTSTATUS) 0xC0000433)
+#define STATUS_PTE_CHANGED ((NTSTATUS) 0xC0000434)
+#define STATUS_PURGE_FAILED ((NTSTATUS) 0xC0000435)
+#define STATUS_CRED_REQUIRES_CONFIRMATION ((NTSTATUS) 0xC0000440)
+#define STATUS_CS_ENCRYPTION_INVALID_SERVER_RESPONSE ((NTSTATUS) 0xC0000441)
+#define STATUS_CS_ENCRYPTION_UNSUPPORTED_SERVER ((NTSTATUS) 0xC0000442)
+#define STATUS_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE ((NTSTATUS) 0xC0000443)
+#define STATUS_CS_ENCRYPTION_NEW_ENCRYPTED_FILE ((NTSTATUS) 0xC0000444)
+#define STATUS_CS_ENCRYPTION_FILE_NOT_CSE ((NTSTATUS) 0xC0000445)
+#define STATUS_INVALID_LABEL ((NTSTATUS) 0xC0000446)
+#define STATUS_DRIVER_PROCESS_TERMINATED ((NTSTATUS) 0xC0000450)
+#define STATUS_AMBIGUOUS_SYSTEM_DEVICE ((NTSTATUS) 0xC0000451)
+#define STATUS_SYSTEM_DEVICE_NOT_FOUND ((NTSTATUS) 0xC0000452)
+#define STATUS_RESTART_BOOT_APPLICATION ((NTSTATUS) 0xC0000453)
+#define STATUS_INVALID_TASK_NAME ((NTSTATUS) 0xC0000500)
+#define STATUS_INVALID_TASK_INDEX ((NTSTATUS) 0xC0000501)
+#define STATUS_THREAD_ALREADY_IN_TASK ((NTSTATUS) 0xC0000502)
+#define STATUS_CALLBACK_BYPASS ((NTSTATUS) 0xC0000503)
+#define STATUS_PORT_CLOSED ((NTSTATUS) 0xC0000700)
+#define STATUS_MESSAGE_LOST ((NTSTATUS) 0xC0000701)
+#define STATUS_INVALID_MESSAGE ((NTSTATUS) 0xC0000702)
+#define STATUS_REQUEST_CANCELED ((NTSTATUS) 0xC0000703)
+#define STATUS_RECURSIVE_DISPATCH ((NTSTATUS) 0xC0000704)
+#define STATUS_LPC_RECEIVE_BUFFER_EXPECTED ((NTSTATUS) 0xC0000705)
+#define STATUS_LPC_INVALID_CONNECTION_USAGE ((NTSTATUS) 0xC0000706)
+#define STATUS_LPC_REQUESTS_NOT_ALLOWED ((NTSTATUS) 0xC0000707)
+#define STATUS_RESOURCE_IN_USE ((NTSTATUS) 0xC0000708)
+#define STATUS_HARDWARE_MEMORY_ERROR ((NTSTATUS) 0xC0000709)
+#define STATUS_THREADPOOL_HANDLE_EXCEPTION ((NTSTATUS) 0xC000070A)
+#define STATUS_THREADPOOL_SET_EVENT_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070B)
+#define STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070C)
+#define STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070D)
+#define STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED ((NTSTATUS) 0xC000070E)
+#define STATUS_THREADPOOL_RELEASED_DURING_OPERATION ((NTSTATUS) 0xC000070F)
+#define STATUS_CALLBACK_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000710)
+#define STATUS_APC_RETURNED_WHILE_IMPERSONATING ((NTSTATUS) 0xC0000711)
+#define STATUS_PROCESS_IS_PROTECTED ((NTSTATUS) 0xC0000712)
+#define STATUS_MCA_EXCEPTION ((NTSTATUS) 0xC0000713)
+#define STATUS_CERTIFICATE_MAPPING_NOT_UNIQUE ((NTSTATUS) 0xC0000714)
+#define STATUS_SYMLINK_CLASS_DISABLED ((NTSTATUS) 0xC0000715)
+#define STATUS_INVALID_IDN_NORMALIZATION ((NTSTATUS) 0xC0000716)
+#define STATUS_NO_UNICODE_TRANSLATION ((NTSTATUS) 0xC0000717)
+#define STATUS_ALREADY_REGISTERED ((NTSTATUS) 0xC0000718)
+#define STATUS_CONTEXT_MISMATCH ((NTSTATUS) 0xC0000719)
+#define STATUS_PORT_ALREADY_HAS_COMPLETION_LIST ((NTSTATUS) 0xC000071A)
+#define STATUS_CALLBACK_RETURNED_THREAD_PRIORITY ((NTSTATUS) 0xC000071B)
+#define STATUS_INVALID_THREAD ((NTSTATUS) 0xC000071C)
+#define STATUS_CALLBACK_RETURNED_TRANSACTION ((NTSTATUS) 0xC000071D)
+#define STATUS_CALLBACK_RETURNED_LDR_LOCK ((NTSTATUS) 0xC000071E)
+#define STATUS_CALLBACK_RETURNED_LANG ((NTSTATUS) 0xC000071F)
+#define STATUS_CALLBACK_RETURNED_PRI_BACK ((NTSTATUS) 0xC0000720)
+#define STATUS_CALLBACK_RETURNED_THREAD_AFFINITY ((NTSTATUS) 0xC0000721)
+#define STATUS_DISK_REPAIR_DISABLED ((NTSTATUS) 0xC0000800)
+#define STATUS_DS_DOMAIN_RENAME_IN_PROGRESS ((NTSTATUS) 0xC0000801)
+#define STATUS_DISK_QUOTA_EXCEEDED ((NTSTATUS) 0xC0000802)
+#define STATUS_CONTENT_BLOCKED ((NTSTATUS) 0xC0000804)
+#define STATUS_BAD_CLUSTERS ((NTSTATUS) 0xC0000805)
+#define STATUS_VOLUME_DIRTY ((NTSTATUS) 0xC0000806)
+#define STATUS_FILE_CHECKED_OUT ((NTSTATUS) 0xC0000901)
+#define STATUS_CHECKOUT_REQUIRED ((NTSTATUS) 0xC0000902)
+#define STATUS_BAD_FILE_TYPE ((NTSTATUS) 0xC0000903)
+#define STATUS_FILE_TOO_LARGE ((NTSTATUS) 0xC0000904)
+#define STATUS_FORMS_AUTH_REQUIRED ((NTSTATUS) 0xC0000905)
+#define STATUS_VIRUS_INFECTED ((NTSTATUS) 0xC0000906)
+#define STATUS_VIRUS_DELETED ((NTSTATUS) 0xC0000907)
+#define STATUS_BAD_MCFG_TABLE ((NTSTATUS) 0xC0000908)
+
+#define STATUS_WOW_ASSERTION ((NTSTATUS) 0xC0009898)
+
+#define RPC_NT_INVALID_STRING_BINDING ((NTSTATUS) 0xC0020001)
+#define RPC_NT_WRONG_KIND_OF_BINDING ((NTSTATUS) 0xC0020002)
+#define RPC_NT_INVALID_BINDING ((NTSTATUS) 0xC0020003)
+#define RPC_NT_PROTSEQ_NOT_SUPPORTED ((NTSTATUS) 0xC0020004)
+#define RPC_NT_INVALID_RPC_PROTSEQ ((NTSTATUS) 0xC0020005)
+#define RPC_NT_INVALID_STRING_UUID ((NTSTATUS) 0xC0020006)
+#define RPC_NT_INVALID_ENDPOINT_FORMAT ((NTSTATUS) 0xC0020007)
+#define RPC_NT_INVALID_NET_ADDR ((NTSTATUS) 0xC0020008)
+#define RPC_NT_NO_ENDPOINT_FOUND ((NTSTATUS) 0xC0020009)
+#define RPC_NT_INVALID_TIMEOUT ((NTSTATUS) 0xC002000A)
+#define RPC_NT_OBJECT_NOT_FOUND ((NTSTATUS) 0xC002000B)
+#define RPC_NT_ALREADY_REGISTERED ((NTSTATUS) 0xC002000C)
+#define RPC_NT_TYPE_ALREADY_REGISTERED ((NTSTATUS) 0xC002000D)
+#define RPC_NT_ALREADY_LISTENING ((NTSTATUS) 0xC002000E)
+#define RPC_NT_NO_PROTSEQS_REGISTERED ((NTSTATUS) 0xC002000F)
+#define RPC_NT_NOT_LISTENING ((NTSTATUS) 0xC0020010)
+#define RPC_NT_UNKNOWN_MGR_TYPE ((NTSTATUS) 0xC0020011)
+#define RPC_NT_UNKNOWN_IF ((NTSTATUS) 0xC0020012)
+#define RPC_NT_NO_BINDINGS ((NTSTATUS) 0xC0020013)
+#define RPC_NT_NO_PROTSEQS ((NTSTATUS) 0xC0020014)
+#define RPC_NT_CANT_CREATE_ENDPOINT ((NTSTATUS) 0xC0020015)
+#define RPC_NT_OUT_OF_RESOURCES ((NTSTATUS) 0xC0020016)
+#define RPC_NT_SERVER_UNAVAILABLE ((NTSTATUS) 0xC0020017)
+#define RPC_NT_SERVER_TOO_BUSY ((NTSTATUS) 0xC0020018)
+#define RPC_NT_INVALID_NETWORK_OPTIONS ((NTSTATUS) 0xC0020019)
+#define RPC_NT_NO_CALL_ACTIVE ((NTSTATUS) 0xC002001A)
+#define RPC_NT_CALL_FAILED ((NTSTATUS) 0xC002001B)
+#define RPC_NT_CALL_FAILED_DNE ((NTSTATUS) 0xC002001C)
+#define RPC_NT_PROTOCOL_ERROR ((NTSTATUS) 0xC002001D)
+#define RPC_NT_UNSUPPORTED_TRANS_SYN ((NTSTATUS) 0xC002001F)
+#define RPC_NT_UNSUPPORTED_TYPE ((NTSTATUS) 0xC0020021)
+#define RPC_NT_INVALID_TAG ((NTSTATUS) 0xC0020022)
+#define RPC_NT_INVALID_BOUND ((NTSTATUS) 0xC0020023)
+#define RPC_NT_NO_ENTRY_NAME ((NTSTATUS) 0xC0020024)
+#define RPC_NT_INVALID_NAME_SYNTAX ((NTSTATUS) 0xC0020025)
+#define RPC_NT_UNSUPPORTED_NAME_SYNTAX ((NTSTATUS) 0xC0020026)
+#define RPC_NT_UUID_NO_ADDRESS ((NTSTATUS) 0xC0020028)
+#define RPC_NT_DUPLICATE_ENDPOINT ((NTSTATUS) 0xC0020029)
+#define RPC_NT_UNKNOWN_AUTHN_TYPE ((NTSTATUS) 0xC002002A)
+#define RPC_NT_MAX_CALLS_TOO_SMALL ((NTSTATUS) 0xC002002B)
+#define RPC_NT_STRING_TOO_LONG ((NTSTATUS) 0xC002002C)
+#define RPC_NT_PROTSEQ_NOT_FOUND ((NTSTATUS) 0xC002002D)
+#define RPC_NT_PROCNUM_OUT_OF_RANGE ((NTSTATUS) 0xC002002E)
+#define RPC_NT_BINDING_HAS_NO_AUTH ((NTSTATUS) 0xC002002F)
+#define RPC_NT_UNKNOWN_AUTHN_SERVICE ((NTSTATUS) 0xC0020030)
+#define RPC_NT_UNKNOWN_AUTHN_LEVEL ((NTSTATUS) 0xC0020031)
+#define RPC_NT_INVALID_AUTH_IDENTITY ((NTSTATUS) 0xC0020032)
+#define RPC_NT_UNKNOWN_AUTHZ_SERVICE ((NTSTATUS) 0xC0020033)
+#define EPT_NT_INVALID_ENTRY ((NTSTATUS) 0xC0020034)
+#define EPT_NT_CANT_PERFORM_OP ((NTSTATUS) 0xC0020035)
+#define EPT_NT_NOT_REGISTERED ((NTSTATUS) 0xC0020036)
+#define RPC_NT_NOTHING_TO_EXPORT ((NTSTATUS) 0xC0020037)
+#define RPC_NT_INCOMPLETE_NAME ((NTSTATUS) 0xC0020038)
+#define RPC_NT_INVALID_VERS_OPTION ((NTSTATUS) 0xC0020039)
+#define RPC_NT_NO_MORE_MEMBERS ((NTSTATUS) 0xC002003A)
+#define RPC_NT_NOT_ALL_OBJS_UNEXPORTED ((NTSTATUS) 0xC002003B)
+#define RPC_NT_INTERFACE_NOT_FOUND ((NTSTATUS) 0xC002003C)
+#define RPC_NT_ENTRY_ALREADY_EXISTS ((NTSTATUS) 0xC002003D)
+#define RPC_NT_ENTRY_NOT_FOUND ((NTSTATUS) 0xC002003E)
+#define RPC_NT_NAME_SERVICE_UNAVAILABLE ((NTSTATUS) 0xC002003F)
+#define RPC_NT_INVALID_NAF_ID ((NTSTATUS) 0xC0020040)
+#define RPC_NT_CANNOT_SUPPORT ((NTSTATUS) 0xC0020041)
+#define RPC_NT_NO_CONTEXT_AVAILABLE ((NTSTATUS) 0xC0020042)
+#define RPC_NT_INTERNAL_ERROR ((NTSTATUS) 0xC0020043)
+#define RPC_NT_ZERO_DIVIDE ((NTSTATUS) 0xC0020044)
+#define RPC_NT_ADDRESS_ERROR ((NTSTATUS) 0xC0020045)
+#define RPC_NT_FP_DIV_ZERO ((NTSTATUS) 0xC0020046)
+#define RPC_NT_FP_UNDERFLOW ((NTSTATUS) 0xC0020047)
+#define RPC_NT_FP_OVERFLOW ((NTSTATUS) 0xC0020048)
+#define RPC_NT_CALL_IN_PROGRESS ((NTSTATUS) 0xC0020049)
+#define RPC_NT_NO_MORE_BINDINGS ((NTSTATUS) 0xC002004A)
+#define RPC_NT_GROUP_MEMBER_NOT_FOUND ((NTSTATUS) 0xC002004B)
+#define EPT_NT_CANT_CREATE ((NTSTATUS) 0xC002004C)
+#define RPC_NT_INVALID_OBJECT ((NTSTATUS) 0xC002004D)
+#define RPC_NT_NO_INTERFACES ((NTSTATUS) 0xC002004F)
+#define RPC_NT_CALL_CANCELLED ((NTSTATUS) 0xC0020050)
+#define RPC_NT_BINDING_INCOMPLETE ((NTSTATUS) 0xC0020051)
+#define RPC_NT_COMM_FAILURE ((NTSTATUS) 0xC0020052)
+#define RPC_NT_UNSUPPORTED_AUTHN_LEVEL ((NTSTATUS) 0xC0020053)
+#define RPC_NT_NO_PRINC_NAME ((NTSTATUS) 0xC0020054)
+#define RPC_NT_NOT_RPC_ERROR ((NTSTATUS) 0xC0020055)
+#define RPC_NT_SEC_PKG_ERROR ((NTSTATUS) 0xC0020057)
+#define RPC_NT_NOT_CANCELLED ((NTSTATUS) 0xC0020058)
+#define RPC_NT_INVALID_ASYNC_HANDLE ((NTSTATUS) 0xC0020062)
+#define RPC_NT_INVALID_ASYNC_CALL ((NTSTATUS) 0xC0020063)
+
+#define RPC_NT_NO_MORE_ENTRIES ((NTSTATUS) 0xC0030001)
+#define RPC_NT_SS_CHAR_TRANS_OPEN_FAIL ((NTSTATUS) 0xC0030002)
+#define RPC_NT_SS_CHAR_TRANS_SHORT_FILE ((NTSTATUS) 0xC0030003)
+#define RPC_NT_SS_IN_NULL_CONTEXT ((NTSTATUS) 0xC0030004)
+#define RPC_NT_SS_CONTEXT_MISMATCH ((NTSTATUS) 0xC0030005)
+#define RPC_NT_SS_CONTEXT_DAMAGED ((NTSTATUS) 0xC0030006)
+#define RPC_NT_SS_HANDLES_MISMATCH ((NTSTATUS) 0xC0030007)
+#define RPC_NT_SS_CANNOT_GET_CALL_HANDLE ((NTSTATUS) 0xC0030008)
+#define RPC_NT_NULL_REF_POINTER ((NTSTATUS) 0xC0030009)
+#define RPC_NT_ENUM_VALUE_OUT_OF_RANGE ((NTSTATUS) 0xC003000A)
+#define RPC_NT_BYTE_COUNT_TOO_SMALL ((NTSTATUS) 0xC003000B)
+#define RPC_NT_BAD_STUB_DATA ((NTSTATUS) 0xC003000C)
+#define RPC_NT_INVALID_ES_ACTION ((NTSTATUS) 0xC0030059)
+#define RPC_NT_WRONG_ES_VERSION ((NTSTATUS) 0xC003005A)
+#define RPC_NT_WRONG_STUB_VERSION ((NTSTATUS) 0xC003005B)
+#define RPC_NT_INVALID_PIPE_OBJECT ((NTSTATUS) 0xC003005C)
+#define RPC_NT_INVALID_PIPE_OPERATION ((NTSTATUS) 0xC003005D)
+#define RPC_NT_WRONG_PIPE_VERSION ((NTSTATUS) 0xC003005E)
+#define RPC_NT_PIPE_CLOSED ((NTSTATUS) 0xC003005F)
+#define RPC_NT_PIPE_DISCIPLINE_ERROR ((NTSTATUS) 0xC0030060)
+#define RPC_NT_PIPE_EMPTY ((NTSTATUS) 0xC0030061)
+
+#define STATUS_PNP_BAD_MPS_TABLE ((NTSTATUS) 0xC0040035)
+#define STATUS_PNP_TRANSLATION_FAILED ((NTSTATUS) 0xC0040036)
+#define STATUS_PNP_IRQ_TRANSLATION_FAILED ((NTSTATUS) 0xC0040037)
+#define STATUS_PNP_INVALID_ID ((NTSTATUS) 0xC0040038)
+
+#define STATUS_CTX_WINSTATION_NAME_INVALID ((NTSTATUS) 0xC00A0001)
+#define STATUS_CTX_INVALID_PD ((NTSTATUS) 0xC00A0002)
+#define STATUS_CTX_PD_NOT_FOUND ((NTSTATUS) 0xC00A0003)
+#define STATUS_CTX_CLOSE_PENDING ((NTSTATUS) 0xC00A0006)
+#define STATUS_CTX_NO_OUTBUF ((NTSTATUS) 0xC00A0007)
+#define STATUS_CTX_MODEM_INF_NOT_FOUND ((NTSTATUS) 0xC00A0008)
+#define STATUS_CTX_INVALID_MODEMNAME ((NTSTATUS) 0xC00A0009)
+#define STATUS_CTX_RESPONSE_ERROR ((NTSTATUS) 0xC00A000A)
+#define STATUS_CTX_MODEM_RESPONSE_TIMEOUT ((NTSTATUS) 0xC00A000B)
+#define STATUS_CTX_MODEM_RESPONSE_NO_CARRIER ((NTSTATUS) 0xC00A000C)
+#define STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE ((NTSTATUS) 0xC00A000D)
+#define STATUS_CTX_MODEM_RESPONSE_BUSY ((NTSTATUS) 0xC00A000E)
+#define STATUS_CTX_MODEM_RESPONSE_VOICE ((NTSTATUS) 0xC00A000F)
+#define STATUS_CTX_TD_ERROR ((NTSTATUS) 0xC00A0010)
+#define STATUS_CTX_LICENSE_CLIENT_INVALID ((NTSTATUS) 0xC00A0012)
+#define STATUS_CTX_LICENSE_NOT_AVAILABLE ((NTSTATUS) 0xC00A0013)
+#define STATUS_CTX_LICENSE_EXPIRED ((NTSTATUS) 0xC00A0014)
+#define STATUS_CTX_WINSTATION_NOT_FOUND ((NTSTATUS) 0xC00A0015)
+#define STATUS_CTX_WINSTATION_NAME_COLLISION ((NTSTATUS) 0xC00A0016)
+#define STATUS_CTX_WINSTATION_BUSY ((NTSTATUS) 0xC00A0017)
+#define STATUS_CTX_BAD_VIDEO_MODE ((NTSTATUS) 0xC00A0018)
+#define STATUS_CTX_GRAPHICS_INVALID ((NTSTATUS) 0xC00A0022)
+#define STATUS_CTX_NOT_CONSOLE ((NTSTATUS) 0xC00A0024)
+#define STATUS_CTX_CLIENT_QUERY_TIMEOUT ((NTSTATUS) 0xC00A0026)
+#define STATUS_CTX_CONSOLE_DISCONNECT ((NTSTATUS) 0xC00A0027)
+#define STATUS_CTX_CONSOLE_CONNECT ((NTSTATUS) 0xC00A0028)
+#define STATUS_CTX_SHADOW_DENIED ((NTSTATUS) 0xC00A002A)
+#define STATUS_CTX_WINSTATION_ACCESS_DENIED ((NTSTATUS) 0xC00A002B)
+#define STATUS_CTX_INVALID_WD ((NTSTATUS) 0xC00A002E)
+#define STATUS_CTX_WD_NOT_FOUND ((NTSTATUS) 0xC00A002F)
+#define STATUS_CTX_SHADOW_INVALID ((NTSTATUS) 0xC00A0030)
+#define STATUS_CTX_SHADOW_DISABLED ((NTSTATUS) 0xC00A0031)
+#define STATUS_RDP_PROTOCOL_ERROR ((NTSTATUS) 0xC00A0032)
+#define STATUS_CTX_CLIENT_LICENSE_NOT_SET ((NTSTATUS) 0xC00A0033)
+#define STATUS_CTX_CLIENT_LICENSE_IN_USE ((NTSTATUS) 0xC00A0034)
+#define STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE ((NTSTATUS) 0xC00A0035)
+#define STATUS_CTX_SHADOW_NOT_RUNNING ((NTSTATUS) 0xC00A0036)
+#define STATUS_CTX_LOGON_DISABLED ((NTSTATUS) 0xC00A0037)
+#define STATUS_CTX_SECURITY_LAYER_ERROR ((NTSTATUS) 0xC00A0038)
+
+#define STATUS_CLUSTER_INVALID_NODE ((NTSTATUS) 0xC0130001)
+#define STATUS_CLUSTER_NODE_EXISTS ((NTSTATUS) 0xC0130002)
+#define STATUS_CLUSTER_JOIN_IN_PROGRESS ((NTSTATUS) 0xC0130003)
+#define STATUS_CLUSTER_NODE_NOT_FOUND ((NTSTATUS) 0xC0130004)
+#define STATUS_CLUSTER_LOCAL_NODE_NOT_FOUND ((NTSTATUS) 0xC0130005)
+#define STATUS_CLUSTER_NETWORK_EXISTS ((NTSTATUS) 0xC0130006)
+#define STATUS_CLUSTER_NETWORK_NOT_FOUND ((NTSTATUS) 0xC0130007)
+#define STATUS_CLUSTER_NETINTERFACE_EXISTS ((NTSTATUS) 0xC0130008)
+#define STATUS_CLUSTER_NETINTERFACE_NOT_FOUND ((NTSTATUS) 0xC0130009)
+#define STATUS_CLUSTER_INVALID_REQUEST ((NTSTATUS) 0xC013000A)
+#define STATUS_CLUSTER_INVALID_NETWORK_PROVIDER ((NTSTATUS) 0xC013000B)
+#define STATUS_CLUSTER_NODE_DOWN ((NTSTATUS) 0xC013000C)
+#define STATUS_CLUSTER_NODE_UNREACHABLE ((NTSTATUS) 0xC013000D)
+#define STATUS_CLUSTER_NODE_NOT_MEMBER ((NTSTATUS) 0xC013000E)
+#define STATUS_CLUSTER_JOIN_NOT_IN_PROGRESS ((NTSTATUS) 0xC013000F)
+#define STATUS_CLUSTER_INVALID_NETWORK ((NTSTATUS) 0xC0130010)
+#define STATUS_CLUSTER_NO_NET_ADAPTERS ((NTSTATUS) 0xC0130011)
+#define STATUS_CLUSTER_NODE_UP ((NTSTATUS) 0xC0130012)
+#define STATUS_CLUSTER_NODE_PAUSED ((NTSTATUS) 0xC0130013)
+#define STATUS_CLUSTER_NODE_NOT_PAUSED ((NTSTATUS) 0xC0130014)
+#define STATUS_CLUSTER_NO_SECURITY_CONTEXT ((NTSTATUS) 0xC0130015)
+#define STATUS_CLUSTER_NETWORK_NOT_INTERNAL ((NTSTATUS) 0xC0130016)
+#define STATUS_CLUSTER_POISONED ((NTSTATUS) 0xC0130017)
+
+#define STATUS_SXS_SECTION_NOT_FOUND ((NTSTATUS) 0xC0150001)
+#define STATUS_SXS_CANT_GEN_ACTCTX ((NTSTATUS) 0xC0150002)
+#define STATUS_SXS_INVALID_ACTCTXDATA_FORMAT ((NTSTATUS) 0xC0150003)
+#define STATUS_SXS_ASSEMBLY_NOT_FOUND ((NTSTATUS) 0xC0150004)
+#define STATUS_SXS_MANIFEST_FORMAT_ERROR ((NTSTATUS) 0xC0150005)
+#define STATUS_SXS_MANIFEST_PARSE_ERROR ((NTSTATUS) 0xC0150006)
+#define STATUS_SXS_ACTIVATION_CONTEXT_DISABLED ((NTSTATUS) 0xC0150007)
+#define STATUS_SXS_KEY_NOT_FOUND ((NTSTATUS) 0xC0150008)
+#define STATUS_SXS_VERSION_CONFLICT ((NTSTATUS) 0xC0150009)
+#define STATUS_SXS_WRONG_SECTION_TYPE ((NTSTATUS) 0xC015000A)
+#define STATUS_SXS_THREAD_QUERIES_DISABLED ((NTSTATUS) 0xC015000B)
+#define STATUS_SXS_ASSEMBLY_MISSING ((NTSTATUS) 0xC015000C)
+#define STATUS_SXS_PROCESS_DEFAULT_ALREADY_SET ((NTSTATUS) 0xC015000E)
+#define STATUS_SXS_EARLY_DEACTIVATION ((NTSTATUS) 0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION ((NTSTATUS) 0xC0150010)
+#define STATUS_SXS_MULTIPLE_DEACTIVATION ((NTSTATUS) 0xC0150011)
+#define STATUS_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY ((NTSTATUS) 0xC0150012)
+#define STATUS_SXS_PROCESS_TERMINATION_REQUESTED ((NTSTATUS) 0xC0150013)
+#define STATUS_SXS_CORRUPT_ACTIVATION_STACK ((NTSTATUS) 0xC0150014)
+#define STATUS_SXS_CORRUPTION ((NTSTATUS) 0xC0150015)
+#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE ((NTSTATUS) 0xC0150016)
+#define STATUS_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME ((NTSTATUS) 0xC0150017)
+#define STATUS_SXS_IDENTITY_DUPLICATE_ATTRIBUTE ((NTSTATUS) 0xC0150018)
+#define STATUS_SXS_IDENTITY_PARSE_ERROR ((NTSTATUS) 0xC0150019)
+#define STATUS_SXS_COMPONENT_STORE_CORRUPT ((NTSTATUS) 0xC015001A)
+#define STATUS_SXS_FILE_HASH_MISMATCH ((NTSTATUS) 0xC015001B)
+#define STATUS_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT ((NTSTATUS) 0xC015001C)
+#define STATUS_SXS_IDENTITIES_DIFFERENT ((NTSTATUS) 0xC015001D)
+#define STATUS_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT ((NTSTATUS) 0xC015001E)
+#define STATUS_SXS_FILE_NOT_PART_OF_ASSEMBLY ((NTSTATUS) 0xC015001F)
+#define STATUS_ADVANCED_INSTALLER_FAILED ((NTSTATUS) 0xC0150020)
+#define STATUS_XML_ENCODING_MISMATCH ((NTSTATUS) 0xC0150021)
+#define STATUS_SXS_MANIFEST_TOO_BIG ((NTSTATUS) 0xC0150022)
+#define STATUS_SXS_SETTING_NOT_REGISTERED ((NTSTATUS) 0xC0150023)
+#define STATUS_SXS_TRANSACTION_CLOSURE_INCOMPLETE ((NTSTATUS) 0xC0150024)
+#define STATUS_SXS_PRIMITIVE_INSTALLER_FAILED ((NTSTATUS) 0xC0150025)
+#define STATUS_GENERIC_COMMAND_FAILED ((NTSTATUS) 0xC0150026)
+#define STATUS_SXS_FILE_HASH_MISSING ((NTSTATUS) 0xC0150027)
+
+#define DBG_EXCEPTION_HANDLED ((NTSTATUS) 0x00010001)
+#define DBG_CONTINUE ((NTSTATUS) 0x00010002)
+#define DBG_TERMINATE_THREAD ((NTSTATUS) 0x40010003)
+#define DBG_TERMINATE_PROCESS ((NTSTATUS) 0x40010004)
+#define DBG_CONTROL_C ((NTSTATUS) 0x40010005)
+#define DBG_CONTROL_BREAK ((NTSTATUS) 0x40010008)
+#define DBG_COMMAND_EXCEPTION ((NTSTATUS) 0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED ((NTSTATUS) 0x80010001)
+
+#endif /* WIN32_NO_STATUS */
+
+#endif /* __WINE_NTSTATUS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h
new file mode 100644
index 00000000..f4c2b5bb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.h
@@ -0,0 +1,5205 @@
+/*** Autogenerated by WIDL 1.1.36 from oaidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_OAIDL_H
+#define __WIDL_OAIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IDispatch_FWD_DEFINED__
+#define __IDispatch_FWD_DEFINED__
+typedef interface IDispatch IDispatch;
+#endif
+
+#ifndef __IEnumVARIANT_FWD_DEFINED__
+#define __IEnumVARIANT_FWD_DEFINED__
+typedef interface IEnumVARIANT IEnumVARIANT;
+#endif
+
+#ifndef __ITypeComp_FWD_DEFINED__
+#define __ITypeComp_FWD_DEFINED__
+typedef interface ITypeComp ITypeComp;
+#endif
+
+#ifndef __ITypeInfo_FWD_DEFINED__
+#define __ITypeInfo_FWD_DEFINED__
+typedef interface ITypeInfo ITypeInfo;
+#endif
+
+#ifndef __ITypeInfo2_FWD_DEFINED__
+#define __ITypeInfo2_FWD_DEFINED__
+typedef interface ITypeInfo2 ITypeInfo2;
+#endif
+
+#ifndef __ITypeLib_FWD_DEFINED__
+#define __ITypeLib_FWD_DEFINED__
+typedef interface ITypeLib ITypeLib;
+#endif
+
+#ifndef __ITypeLib2_FWD_DEFINED__
+#define __ITypeLib2_FWD_DEFINED__
+typedef interface ITypeLib2 ITypeLib2;
+#endif
+
+#ifndef __ITypeChangeEvents_FWD_DEFINED__
+#define __ITypeChangeEvents_FWD_DEFINED__
+typedef interface ITypeChangeEvents ITypeChangeEvents;
+#endif
+
+#ifndef __IErrorInfo_FWD_DEFINED__
+#define __IErrorInfo_FWD_DEFINED__
+typedef interface IErrorInfo IErrorInfo;
+#endif
+
+#ifndef __ICreateErrorInfo_FWD_DEFINED__
+#define __ICreateErrorInfo_FWD_DEFINED__
+typedef interface ICreateErrorInfo ICreateErrorInfo;
+#endif
+
+#ifndef __ISupportErrorInfo_FWD_DEFINED__
+#define __ISupportErrorInfo_FWD_DEFINED__
+typedef interface ISupportErrorInfo ISupportErrorInfo;
+#endif
+
+#ifndef __ITypeFactory_FWD_DEFINED__
+#define __ITypeFactory_FWD_DEFINED__
+typedef interface ITypeFactory ITypeFactory;
+#endif
+
+#ifndef __ITypeMarshal_FWD_DEFINED__
+#define __ITypeMarshal_FWD_DEFINED__
+typedef interface ITypeMarshal ITypeMarshal;
+#endif
+
+#ifndef __IRecordInfo_FWD_DEFINED__
+#define __IRecordInfo_FWD_DEFINED__
+typedef interface IRecordInfo IRecordInfo;
+#endif
+
+#ifndef __ICreateTypeInfo_FWD_DEFINED__
+#define __ICreateTypeInfo_FWD_DEFINED__
+typedef interface ICreateTypeInfo ICreateTypeInfo;
+#endif
+
+#ifndef __ICreateTypeInfo2_FWD_DEFINED__
+#define __ICreateTypeInfo2_FWD_DEFINED__
+typedef interface ICreateTypeInfo2 ICreateTypeInfo2;
+#endif
+
+#ifndef __ICreateTypeLib_FWD_DEFINED__
+#define __ICreateTypeLib_FWD_DEFINED__
+typedef interface ICreateTypeLib ICreateTypeLib;
+#endif
+
+#ifndef __ICreateTypeLib2_FWD_DEFINED__
+#define __ICreateTypeLib2_FWD_DEFINED__
+typedef interface ICreateTypeLib2 ICreateTypeLib2;
+#endif
+
+#ifndef __IErrorLog_FWD_DEFINED__
+#define __IErrorLog_FWD_DEFINED__
+typedef interface IErrorLog IErrorLog;
+#endif
+
+#ifndef __IPropertyBag_FWD_DEFINED__
+#define __IPropertyBag_FWD_DEFINED__
+typedef interface IPropertyBag IPropertyBag;
+#endif
+
+
+#ifndef __IDispatch_FWD_DEFINED__
+#define __IDispatch_FWD_DEFINED__
+typedef interface IDispatch IDispatch;
+#endif
+
+#ifndef __ITypeInfo_FWD_DEFINED__
+#define __ITypeInfo_FWD_DEFINED__
+typedef interface ITypeInfo ITypeInfo;
+#endif
+
+#ifndef __ITypeLib_FWD_DEFINED__
+#define __ITypeLib_FWD_DEFINED__
+typedef interface ITypeLib ITypeLib;
+#endif
+
+#ifndef __IRecordInfo_FWD_DEFINED__
+#define __IRecordInfo_FWD_DEFINED__
+typedef interface IRecordInfo IRecordInfo;
+#endif
+
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+/*****************************************************************************
+ * IOleAutomationTypes interface (v1.0)
+ */
+#ifndef __IOleAutomationTypes_INTERFACE_DEFINED__
+#define __IOleAutomationTypes_INTERFACE_DEFINED__
+
+extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_c_ifspec;
+extern RPC_IF_HANDLE IOleAutomationTypes_v1_0_s_ifspec;
+typedef CY CURRENCY;
+typedef struct tagSAFEARRAYBOUND {
+ ULONG cElements;
+ LONG lLbound;
+} SAFEARRAYBOUND;
+typedef struct tagSAFEARRAYBOUND *LPSAFEARRAYBOUND;
+typedef struct _wireVARIANT *wireVARIANT;
+typedef struct _wireBRECORD *wireBRECORD;
+typedef struct _wireSAFEARR_BSTR {
+ ULONG Size;
+ wireBSTR *aBstr;
+} SAFEARR_BSTR;
+typedef struct _wireSAFEARR_UNKNOWN {
+ ULONG Size;
+ IUnknown **apUnknown;
+} SAFEARR_UNKNOWN;
+typedef struct _wireSAFEARR_DISPATCH {
+ ULONG Size;
+ IDispatch **apDispatch;
+} SAFEARR_DISPATCH;
+typedef struct _wireSAFEARR_VARIANT {
+ ULONG Size;
+ wireVARIANT *aVariant;
+} SAFEARR_VARIANT;
+typedef struct _wireSAFEARR_BRECORD {
+ ULONG Size;
+ wireBRECORD *aRecord;
+} SAFEARR_BRECORD;
+typedef struct _wireSAFEARR_HAVEIID {
+ ULONG Size;
+ IUnknown **apUnknown;
+ IID iid;
+} SAFEARR_HAVEIID;
+typedef enum tagSF_TYPE {
+ SF_ERROR = VT_ERROR,
+ SF_I1 = VT_I1,
+ SF_I2 = VT_I2,
+ SF_I4 = VT_I4,
+ SF_I8 = VT_I8,
+ SF_BSTR = VT_BSTR,
+ SF_UNKNOWN = VT_UNKNOWN,
+ SF_DISPATCH = VT_DISPATCH,
+ SF_VARIANT = VT_VARIANT,
+ SF_RECORD = VT_RECORD,
+ SF_HAVEIID = VT_UNKNOWN | VT_RESERVED
+} SF_TYPE;
+typedef struct _wireSAFEARRAY_UNION {
+ ULONG sfType;
+ union {
+ SAFEARR_BSTR BstrStr;
+ SAFEARR_UNKNOWN UnknownStr;
+ SAFEARR_DISPATCH DispatchStr;
+ SAFEARR_VARIANT VariantStr;
+ SAFEARR_BRECORD RecordStr;
+ SAFEARR_HAVEIID HaveIidStr;
+ BYTE_SIZEDARR ByteStr;
+ WORD_SIZEDARR WordStr;
+ DWORD_SIZEDARR LongStr;
+ HYPER_SIZEDARR HyperStr;
+ } u;
+} SAFEARRAYUNION;
+typedef struct _wireSAFEARRAY {
+ USHORT cDims;
+ USHORT fFeatures;
+ ULONG cbElements;
+ ULONG cLocks;
+ SAFEARRAYUNION uArrayStructs;
+ SAFEARRAYBOUND rgsabound[1];
+} *wireSAFEARRAY;
+typedef wireSAFEARRAY *wirePSAFEARRAY;
+typedef struct tagSAFEARRAY {
+ USHORT cDims;
+ USHORT fFeatures;
+ ULONG cbElements;
+ ULONG cLocks;
+ PVOID pvData;
+ SAFEARRAYBOUND rgsabound[1];
+} SAFEARRAY;
+typedef SAFEARRAY *LPSAFEARRAY;
+#define FADF_AUTO (0x1)
+
+#define FADF_STATIC (0x2)
+
+#define FADF_EMBEDDED (0x4)
+
+#define FADF_FIXEDSIZE (0x10)
+
+#define FADF_RECORD (0x20)
+
+#define FADF_HAVEIID (0x40)
+
+#define FADF_HAVEVARTYPE (0x80)
+
+#define FADF_BSTR (0x100)
+
+#define FADF_UNKNOWN (0x200)
+
+#define FADF_DISPATCH (0x400)
+
+#define FADF_VARIANT (0x800)
+
+#define FADF_RESERVED (0xf008)
+
+#define FADF_DATADELETED (0x1000)
+
+#define FADF_CREATEVECTOR (0x2000)
+
+#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
+#define __VARIANT_NAME_1 n1
+#define __VARIANT_NAME_2 n2
+#define __VARIANT_NAME_3 n3
+#define __VARIANT_NAME_4 brecVal
+#else
+#define __tagVARIANT
+#define __VARIANT_NAME_1
+#define __VARIANT_NAME_2
+#define __VARIANT_NAME_3
+#define __tagBRECORD
+#define __VARIANT_NAME_4
+#endif
+typedef struct tagVARIANT VARIANT;
+struct tagVARIANT {
+ union {
+ struct __tagVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ union {
+ signed char cVal;
+ USHORT uiVal;
+ ULONG ulVal;
+ INT intVal;
+ UINT uintVal;
+ BYTE bVal;
+ SHORT iVal;
+ LONG lVal;
+ FLOAT fltVal;
+ DOUBLE dblVal;
+ VARIANT_BOOL boolVal;
+ SCODE scode;
+ DATE date;
+ BSTR bstrVal;
+ CY cyVal;
+ IUnknown *punkVal;
+ IDispatch *pdispVal;
+ SAFEARRAY *parray;
+ LONGLONG llVal;
+ ULONGLONG ullVal;
+ signed char *pcVal;
+ USHORT *puiVal;
+ ULONG *pulVal;
+ INT *pintVal;
+ UINT *puintVal;
+ BYTE *pbVal;
+ SHORT *piVal;
+ LONG *plVal;
+ FLOAT *pfltVal;
+ DOUBLE *pdblVal;
+ VARIANT_BOOL *pboolVal;
+ SCODE *pscode;
+ DATE *pdate;
+ BSTR *pbstrVal;
+ VARIANT *pvarVal;
+ PVOID byref;
+ CY *pcyVal;
+ DECIMAL *pdecVal;
+ IUnknown **ppunkVal;
+ IDispatch **ppdispVal;
+ SAFEARRAY **pparray;
+ LONGLONG *pllVal;
+ ULONGLONG *pullVal;
+ struct __tagBRECORD {
+ PVOID pvRecord;
+ IRecordInfo *pRecInfo;
+ } __VARIANT_NAME_4;
+ } __VARIANT_NAME_3;
+ } __VARIANT_NAME_2;
+ DECIMAL decVal;
+ } __VARIANT_NAME_1;
+};
+
+typedef VARIANT *LPVARIANT;
+typedef VARIANT VARIANTARG;
+typedef VARIANTARG *LPVARIANTARG;
+struct _wireBRECORD {
+ ULONG fFlags;
+ ULONG clSize;
+ IRecordInfo *pRecInfo;
+ byte *pRecord;
+};
+
+struct _wireVARIANT {
+ DWORD clSize;
+ DWORD rpcReserved;
+ USHORT vt;
+ USHORT wReserved1;
+ USHORT wReserved2;
+ USHORT wReserved3;
+ union {
+ signed char cVal;
+ USHORT uiVal;
+ ULONG ulVal;
+ INT intVal;
+ UINT uintVal;
+ BYTE bVal;
+ SHORT iVal;
+ LONG lVal;
+ FLOAT fltVal;
+ DOUBLE dblVal;
+ VARIANT_BOOL boolVal;
+ SCODE scode;
+ DATE date;
+ wireBSTR bstrVal;
+ CY cyVal;
+ DECIMAL decVal;
+ IUnknown *punkVal;
+ IDispatch *pdispVal;
+ wireSAFEARRAY parray;
+ signed char *pcVal;
+ USHORT *puiVal;
+ ULONG *pulVal;
+ INT *pintVal;
+ UINT *puintVal;
+ BYTE *pbVal;
+ SHORT *piVal;
+ LONG *plVal;
+ FLOAT *pfltVal;
+ DOUBLE *pdblVal;
+ VARIANT_BOOL *pboolVal;
+ SCODE *pscode;
+ DATE *pdate;
+ wireBSTR *pbstrVal;
+ wireVARIANT *pvarVal;
+ CY *pcyVal;
+ DECIMAL *pdecVal;
+ IUnknown **ppunkVal;
+ IDispatch **ppdispVal;
+ wireSAFEARRAY *pparray;
+ wireBRECORD brecVal;
+ } DUMMYUNIONNAME;
+};
+
+typedef LONG DISPID;
+typedef DWORD HREFTYPE;
+typedef DISPID MEMBERID;
+typedef enum tagTYPEKIND {
+ TKIND_ENUM = 0,
+ TKIND_RECORD = 1,
+ TKIND_MODULE = 2,
+ TKIND_INTERFACE = 3,
+ TKIND_DISPATCH = 4,
+ TKIND_COCLASS = 5,
+ TKIND_ALIAS = 6,
+ TKIND_UNION = 7,
+ TKIND_MAX = 8
+} TYPEKIND;
+typedef struct tagTYPEDESC {
+ union {
+ struct tagTYPEDESC *lptdesc;
+ struct tagARRAYDESC *lpadesc;
+ HREFTYPE hreftype;
+ } DUMMYUNIONNAME;
+ VARTYPE vt;
+} TYPEDESC;
+typedef struct tagARRAYDESC {
+ TYPEDESC tdescElem;
+ USHORT cDims;
+ SAFEARRAYBOUND rgbounds[1];
+} ARRAYDESC;
+typedef struct tagPARAMDESCEX {
+ ULONG cBytes;
+ VARIANTARG varDefaultValue;
+} PARAMDESCEX;
+typedef struct tagPARAMDESCEX *LPPARAMDESCEX;
+typedef struct tagPARAMDESC {
+ LPPARAMDESCEX pparamdescex;
+ USHORT wParamFlags;
+} PARAMDESC;
+typedef struct tagPARAMDESC *LPPARAMDESC;
+#define PARAMFLAG_NONE (0x0)
+
+#define PARAMFLAG_FIN (0x1)
+
+#define PARAMFLAG_FOUT (0x2)
+
+#define PARAMFLAG_FLCID (0x4)
+
+#define PARAMFLAG_FRETVAL (0x8)
+
+#define PARAMFLAG_FOPT (0x10)
+
+#define PARAMFLAG_FHASDEFAULT (0x20)
+
+#define PARAMFLAG_FHASCUSTDATA (0x40)
+
+typedef struct tagIDLDESC {
+ ULONG dwReserved;
+ USHORT wIDLFlags;
+} IDLDESC;
+typedef struct tagIDLDESC *LPIDLDESC;
+#define IDLFLAG_NONE (PARAMFLAG_NONE)
+
+#define IDLFLAG_FIN (PARAMFLAG_FIN)
+
+#define IDLFLAG_FOUT (PARAMFLAG_FOUT)
+
+#define IDLFLAG_FLCID (PARAMFLAG_FLCID)
+
+#define IDLFLAG_FRETVAL (PARAMFLAG_FRETVAL)
+
+#if 0
+typedef struct tagELEMDESC {
+ TYPEDESC tdesc;
+ PARAMDESC paramdesc;
+} ELEMDESC;
+#else
+typedef struct tagELEMDESC {
+ TYPEDESC tdesc;
+ union {
+ IDLDESC idldesc;
+ PARAMDESC paramdesc;
+ } DUMMYUNIONNAME;
+} ELEMDESC, *LPELEMDESC;
+#endif
+typedef struct tagTYPEATTR {
+ GUID guid;
+ LCID lcid;
+ DWORD dwReserved;
+ MEMBERID memidConstructor;
+ MEMBERID memidDestructor;
+ LPOLESTR lpstrSchema;
+ ULONG cbSizeInstance;
+ TYPEKIND typekind;
+ WORD cFuncs;
+ WORD cVars;
+ WORD cImplTypes;
+ WORD cbSizeVft;
+ WORD cbAlignment;
+ WORD wTypeFlags;
+ WORD wMajorVerNum;
+ WORD wMinorVerNum;
+ TYPEDESC tdescAlias;
+ IDLDESC idldescType;
+} TYPEATTR;
+typedef struct tagTYPEATTR *LPTYPEATTR;
+typedef struct tagDISPPARAMS {
+ VARIANTARG *rgvarg;
+ DISPID *rgdispidNamedArgs;
+ UINT cArgs;
+ UINT cNamedArgs;
+} DISPPARAMS;
+#if 0
+typedef struct tagEXCEPINFO {
+ WORD wCode;
+ WORD wReserved;
+ BSTR bstrSource;
+ BSTR bstrDescription;
+ BSTR bstrHelpFile;
+ DWORD dwHelpContext;
+ ULONG pvReserved;
+ ULONG pfnDeferredFillIn;
+ SCODE scode;
+} EXCEPINFO;
+#else
+typedef struct tagEXCEPINFO {
+ WORD wCode;
+ WORD wReserved;
+ BSTR bstrSource;
+ BSTR bstrDescription;
+ BSTR bstrHelpFile;
+ DWORD dwHelpContext;
+ PVOID pvReserved;
+ HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
+ SCODE scode;
+} EXCEPINFO, *LPEXCEPINFO;
+#endif
+typedef enum tagCALLCONV {
+ CC_FASTCALL = 0,
+ CC_CDECL = 1,
+ CC_MSCPASCAL = 2,
+ CC_PASCAL = CC_MSCPASCAL,
+ CC_MACPASCAL = 3,
+ CC_STDCALL = 4,
+ CC_FPFASTCALL = 5,
+ CC_SYSCALL = 6,
+ CC_MPWCDECL = 7,
+ CC_MPWPASCAL = 8,
+ CC_MAX = 9
+} CALLCONV;
+typedef enum tagFUNCKIND {
+ FUNC_VIRTUAL = 0,
+ FUNC_PUREVIRTUAL = 1,
+ FUNC_NONVIRTUAL = 2,
+ FUNC_STATIC = 3,
+ FUNC_DISPATCH = 4
+} FUNCKIND;
+typedef enum tagINVOKEKIND {
+ INVOKE_FUNC = 1,
+ INVOKE_PROPERTYGET = 2,
+ INVOKE_PROPERTYPUT = 4,
+ INVOKE_PROPERTYPUTREF = 8
+} INVOKEKIND;
+typedef struct tagFUNCDESC {
+ MEMBERID memid;
+ SCODE *lprgscode;
+ ELEMDESC *lprgelemdescParam;
+ FUNCKIND funckind;
+ INVOKEKIND invkind;
+ CALLCONV callconv;
+ SHORT cParams;
+ SHORT cParamsOpt;
+ SHORT oVft;
+ SHORT cScodes;
+ ELEMDESC elemdescFunc;
+ WORD wFuncFlags;
+} FUNCDESC;
+typedef struct tagFUNCDESC *LPFUNCDESC;
+typedef enum tagVARKIND {
+ VAR_PERINSTANCE = 0,
+ VAR_STATIC = 1,
+ VAR_CONST = 2,
+ VAR_DISPATCH = 3
+} VARKIND;
+#define IMPLTYPEFLAG_FDEFAULT (0x1)
+
+#define IMPLTYPEFLAG_FSOURCE (0x2)
+
+#define IMPLTYPEFLAG_FRESTRICTED (0x4)
+
+#define IMPLTYPEFLAG_FDEFAULTVTABLE (0x8)
+
+typedef struct tagVARDESC {
+ MEMBERID memid;
+ LPOLESTR lpstrSchema;
+ union {
+ ULONG oInst;
+ VARIANT *lpvarValue;
+ } DUMMYUNIONNAME;
+ ELEMDESC elemdescVar;
+ WORD wVarFlags;
+ VARKIND varkind;
+} VARDESC;
+typedef struct tagVARDESC *LPVARDESC;
+typedef enum tagTYPEFLAGS {
+ TYPEFLAG_FAPPOBJECT = 0x1,
+ TYPEFLAG_FCANCREATE = 0x2,
+ TYPEFLAG_FLICENSED = 0x4,
+ TYPEFLAG_FPREDECLID = 0x8,
+ TYPEFLAG_FHIDDEN = 0x10,
+ TYPEFLAG_FCONTROL = 0x20,
+ TYPEFLAG_FDUAL = 0x40,
+ TYPEFLAG_FNONEXTENSIBLE = 0x80,
+ TYPEFLAG_FOLEAUTOMATION = 0x100,
+ TYPEFLAG_FRESTRICTED = 0x200,
+ TYPEFLAG_FAGGREGATABLE = 0x400,
+ TYPEFLAG_FREPLACEABLE = 0x800,
+ TYPEFLAG_FDISPATCHABLE = 0x1000,
+ TYPEFLAG_FREVERSEBIND = 0x2000,
+ TYPEFLAG_FPROXY = 0x4000
+} TYPEFLAGS;
+typedef enum tagFUNCFLAGS {
+ FUNCFLAG_FRESTRICTED = 0x1,
+ FUNCFLAG_FSOURCE = 0x2,
+ FUNCFLAG_FBINDABLE = 0x4,
+ FUNCFLAG_FREQUESTEDIT = 0x8,
+ FUNCFLAG_FDISPLAYBIND = 0x10,
+ FUNCFLAG_FDEFAULTBIND = 0x20,
+ FUNCFLAG_FHIDDEN = 0x40,
+ FUNCFLAG_FUSESGETLASTERROR = 0x80,
+ FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
+ FUNCFLAG_FUIDEFAULT = 0x200,
+ FUNCFLAG_FNONBROWSABLE = 0x400,
+ FUNCFLAG_FREPLACEABLE = 0x800,
+ FUNCFLAG_FIMMEDIATEBIND = 0x1000
+} FUNCFLAGS;
+typedef enum tagVARFLAGS {
+ VARFLAG_FREADONLY = 0x1,
+ VARFLAG_FSOURCE = 0x2,
+ VARFLAG_FBINDABLE = 0x4,
+ VARFLAG_FREQUESTEDIT = 0x8,
+ VARFLAG_FDISPLAYBIND = 0x10,
+ VARFLAG_FDEFAULTBIND = 0x20,
+ VARFLAG_FHIDDEN = 0x40,
+ VARFLAG_FRESTRICTED = 0x80,
+ VARFLAG_FDEFAULTCOLLELEM = 0x100,
+ VARFLAG_FUIDEFAULT = 0x200,
+ VARFLAG_FNONBROWSABLE = 0x400,
+ VARFLAG_FREPLACEABLE = 0x800,
+ VARFLAG_FIMMEDIATEBIND = 0x1000
+} VARFLAGS;
+typedef struct tagCLEANLOCALSTORAGE {
+ IUnknown *pInterface;
+ PVOID pStorage;
+ DWORD flags;
+} CLEANLOCALSTORAGE;
+typedef struct tagCUSTDATAITEM {
+ GUID guid;
+ VARIANTARG varValue;
+} CUSTDATAITEM;
+typedef struct tagCUSTDATAITEM *LPCUSTDATAITEM;
+typedef struct tagCUSTDATA {
+ DWORD cCustData;
+ LPCUSTDATAITEM prgCustData;
+} CUSTDATA;
+typedef struct tagCUSTDATA *LPCUSTDATA;
+
+#endif /* __IOleAutomationTypes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDispatch interface
+ */
+#ifndef __IDispatch_INTERFACE_DEFINED__
+#define __IDispatch_INTERFACE_DEFINED__
+
+typedef IDispatch *LPDISPATCH;
+#define DISPID_UNKNOWN (-1)
+
+#define DISPID_VALUE (0)
+
+#define DISPID_PROPERTYPUT (-3)
+
+#define DISPID_NEWENUM (-4)
+
+#define DISPID_EVALUATE (-5)
+
+#define DISPID_CONSTRUCTOR (-6)
+
+#define DISPID_DESTRUCTOR (-7)
+
+#define DISPID_COLLECT (-8)
+
+DEFINE_GUID(IID_IDispatch, 0x00020400, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDispatch : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
+ UINT *pctinfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Invoke(
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr) = 0;
+
+};
+#else
+typedef struct IDispatchVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IDispatch* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IDispatch* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IDispatch* This);
+
+ /*** IDispatch methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ IDispatch* This,
+ UINT *pctinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IDispatch* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ IDispatch* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IDispatch* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ END_INTERFACE
+} IDispatchVtbl;
+interface IDispatch {
+ CONST_VTBL IDispatchVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDispatch_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDispatch_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDispatch_Release(This) (This)->lpVtbl->Release(This)
+/*** IDispatch methods ***/
+#define IDispatch_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
+#define IDispatch_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+#define IDispatch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+#define IDispatch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDispatch_GetTypeInfoCount_Proxy(
+ IDispatch* This,
+ UINT *pctinfo);
+void __RPC_STUB IDispatch_GetTypeInfoCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDispatch_GetTypeInfo_Proxy(
+ IDispatch* This,
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo);
+void __RPC_STUB IDispatch_GetTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDispatch_GetIDsOfNames_Proxy(
+ IDispatch* This,
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId);
+void __RPC_STUB IDispatch_GetIDsOfNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDispatch_RemoteInvoke_Proxy(
+ IDispatch* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ DWORD dwFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *pArgErr,
+ UINT cVarRef,
+ UINT *rgVarRefIdx,
+ VARIANTARG *rgVarRef);
+void __RPC_STUB IDispatch_RemoteInvoke_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IDispatch_Invoke_Proxy(
+ IDispatch* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+HRESULT __RPC_STUB IDispatch_Invoke_Stub(
+ IDispatch* This,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ DWORD dwFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *pArgErr,
+ UINT cVarRef,
+ UINT *rgVarRefIdx,
+ VARIANTARG *rgVarRef);
+
+#endif /* __IDispatch_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumVARIANT interface
+ */
+#ifndef __IEnumVARIANT_INTERFACE_DEFINED__
+#define __IEnumVARIANT_INTERFACE_DEFINED__
+
+typedef IEnumVARIANT *LPENUMVARIANT;
+DEFINE_GUID(IID_IEnumVARIANT, 0x00020404, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumVARIANT : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ VARIANT *rgVar,
+ ULONG *pCeltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumVARIANT **ppEnum) = 0;
+
+};
+#else
+typedef struct IEnumVARIANTVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumVARIANT* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumVARIANT* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumVARIANT* This);
+
+ /*** IEnumVARIANT methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumVARIANT* This,
+ ULONG celt,
+ VARIANT *rgVar,
+ ULONG *pCeltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumVARIANT* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumVARIANT* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumVARIANT* This,
+ IEnumVARIANT **ppEnum);
+
+ END_INTERFACE
+} IEnumVARIANTVtbl;
+interface IEnumVARIANT {
+ CONST_VTBL IEnumVARIANTVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumVARIANT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumVARIANT_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumVARIANT_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumVARIANT methods ***/
+#define IEnumVARIANT_Next(This,celt,rgVar,pCeltFetched) (This)->lpVtbl->Next(This,celt,rgVar,pCeltFetched)
+#define IEnumVARIANT_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumVARIANT_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumVARIANT_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_RemoteNext_Proxy(
+ IEnumVARIANT* This,
+ ULONG celt,
+ VARIANT *rgVar,
+ ULONG *pCeltFetched);
+void __RPC_STUB IEnumVARIANT_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Skip_Proxy(
+ IEnumVARIANT* This,
+ ULONG celt);
+void __RPC_STUB IEnumVARIANT_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Reset_Proxy(
+ IEnumVARIANT* This);
+void __RPC_STUB IEnumVARIANT_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Clone_Proxy(
+ IEnumVARIANT* This,
+ IEnumVARIANT **ppEnum);
+void __RPC_STUB IEnumVARIANT_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumVARIANT_Next_Proxy(
+ IEnumVARIANT* This,
+ ULONG celt,
+ VARIANT *rgVar,
+ ULONG *pCeltFetched);
+HRESULT __RPC_STUB IEnumVARIANT_Next_Stub(
+ IEnumVARIANT* This,
+ ULONG celt,
+ VARIANT *rgVar,
+ ULONG *pCeltFetched);
+
+#endif /* __IEnumVARIANT_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeComp interface
+ */
+#ifndef __ITypeComp_INTERFACE_DEFINED__
+#define __ITypeComp_INTERFACE_DEFINED__
+
+typedef ITypeComp *LPTYPECOMP;
+typedef enum tagDESCKIND {
+ DESCKIND_NONE = 0,
+ DESCKIND_FUNCDESC = 1,
+ DESCKIND_VARDESC = 2,
+ DESCKIND_TYPECOMP = 3,
+ DESCKIND_IMPLICITAPPOBJ = 4,
+ DESCKIND_MAX = 5
+} DESCKIND;
+typedef union tagBINDPTR {
+ FUNCDESC *lpfuncdesc;
+ VARDESC *lpvardesc;
+ ITypeComp *lptcomp;
+} BINDPTR;
+typedef union tagBINDPTR *LPBINDPTR;
+DEFINE_GUID(IID_ITypeComp, 0x00020403, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeComp : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Bind(
+ LPOLESTR szName,
+ ULONG lHashVal,
+ WORD wFlags,
+ ITypeInfo **ppTInfo,
+ DESCKIND *pDescKind,
+ BINDPTR *pBindPtr) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BindType(
+ LPOLESTR szName,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ ITypeComp **ppTComp) = 0;
+
+};
+#else
+typedef struct ITypeCompVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeComp* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeComp* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeComp* This);
+
+ /*** ITypeComp methods ***/
+ HRESULT (STDMETHODCALLTYPE *Bind)(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ WORD wFlags,
+ ITypeInfo **ppTInfo,
+ DESCKIND *pDescKind,
+ BINDPTR *pBindPtr);
+
+ HRESULT (STDMETHODCALLTYPE *BindType)(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ ITypeComp **ppTComp);
+
+ END_INTERFACE
+} ITypeCompVtbl;
+interface ITypeComp {
+ CONST_VTBL ITypeCompVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeComp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeComp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeComp_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeComp methods ***/
+#define ITypeComp_Bind(This,szName,lHashVal,wFlags,ppTInfo,pDescKind,pBindPtr) (This)->lpVtbl->Bind(This,szName,lHashVal,wFlags,ppTInfo,pDescKind,pBindPtr)
+#define ITypeComp_BindType(This,szName,lHashVal,ppTInfo,ppTComp) (This)->lpVtbl->BindType(This,szName,lHashVal,ppTInfo,ppTComp)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeComp_RemoteBind_Proxy(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ WORD wFlags,
+ ITypeInfo **ppTInfo,
+ DESCKIND *pDescKind,
+ LPFUNCDESC *ppFuncDesc,
+ LPVARDESC *ppVarDesc,
+ ITypeComp **ppTypeComp,
+ CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeComp_RemoteBind_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeComp_RemoteBindType_Proxy(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo);
+void __RPC_STUB ITypeComp_RemoteBindType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeComp_Bind_Proxy(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ WORD wFlags,
+ ITypeInfo **ppTInfo,
+ DESCKIND *pDescKind,
+ BINDPTR *pBindPtr);
+HRESULT __RPC_STUB ITypeComp_Bind_Stub(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ WORD wFlags,
+ ITypeInfo **ppTInfo,
+ DESCKIND *pDescKind,
+ LPFUNCDESC *ppFuncDesc,
+ LPVARDESC *ppVarDesc,
+ ITypeComp **ppTypeComp,
+ CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeComp_BindType_Proxy(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ ITypeComp **ppTComp);
+HRESULT __RPC_STUB ITypeComp_BindType_Stub(
+ ITypeComp* This,
+ LPOLESTR szName,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo);
+
+#endif /* __ITypeComp_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeInfo interface
+ */
+#ifndef __ITypeInfo_INTERFACE_DEFINED__
+#define __ITypeInfo_INTERFACE_DEFINED__
+
+typedef ITypeInfo *LPTYPEINFO;
+DEFINE_GUID(IID_ITypeInfo, 0x00020401, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetTypeAttr(
+ TYPEATTR **ppTypeAttr) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeComp(
+ ITypeComp **ppTComp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFuncDesc(
+ UINT index,
+ FUNCDESC **ppFuncDesc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVarDesc(
+ UINT index,
+ VARDESC **ppVarDesc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetNames(
+ MEMBERID memid,
+ BSTR *rgBstrNames,
+ UINT cMaxNames,
+ UINT *pcNames) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRefTypeOfImplType(
+ UINT index,
+ HREFTYPE *pRefType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetImplTypeFlags(
+ UINT index,
+ INT *pImplTypeFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ MEMBERID *pMemId) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Invoke(
+ PVOID pvInstance,
+ MEMBERID memid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDocumentation(
+ MEMBERID memid,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDllEntry(
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ BSTR *pBstrDllName,
+ BSTR *pBstrName,
+ WORD *pwOrdinal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRefTypeInfo(
+ HREFTYPE hRefType,
+ ITypeInfo **ppTInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddressOfMember(
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ PVOID *ppv) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateInstance(
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ PVOID *ppvObj) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMops(
+ MEMBERID memid,
+ BSTR *pBstrMops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetContainingTypeLib(
+ ITypeLib **ppTLib,
+ UINT *pIndex) = 0;
+
+ virtual void STDMETHODCALLTYPE ReleaseTypeAttr(
+ TYPEATTR *pTypeAttr) = 0;
+
+ virtual void STDMETHODCALLTYPE ReleaseFuncDesc(
+ FUNCDESC *pFuncDesc) = 0;
+
+ virtual void STDMETHODCALLTYPE ReleaseVarDesc(
+ VARDESC *pVarDesc) = 0;
+
+};
+#else
+typedef struct ITypeInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeInfo* This);
+
+ /*** ITypeInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeAttr)(
+ ITypeInfo* This,
+ TYPEATTR **ppTypeAttr);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+ ITypeInfo* This,
+ ITypeComp **ppTComp);
+
+ HRESULT (STDMETHODCALLTYPE *GetFuncDesc)(
+ ITypeInfo* This,
+ UINT index,
+ FUNCDESC **ppFuncDesc);
+
+ HRESULT (STDMETHODCALLTYPE *GetVarDesc)(
+ ITypeInfo* This,
+ UINT index,
+ VARDESC **ppVarDesc);
+
+ HRESULT (STDMETHODCALLTYPE *GetNames)(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *rgBstrNames,
+ UINT cMaxNames,
+ UINT *pcNames);
+
+ HRESULT (STDMETHODCALLTYPE *GetRefTypeOfImplType)(
+ ITypeInfo* This,
+ UINT index,
+ HREFTYPE *pRefType);
+
+ HRESULT (STDMETHODCALLTYPE *GetImplTypeFlags)(
+ ITypeInfo* This,
+ UINT index,
+ INT *pImplTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ ITypeInfo* This,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ MEMBERID *pMemId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ ITypeInfo* This,
+ PVOID pvInstance,
+ MEMBERID memid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+
+ HRESULT (STDMETHODCALLTYPE *GetDllEntry)(
+ ITypeInfo* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ BSTR *pBstrDllName,
+ BSTR *pBstrName,
+ WORD *pwOrdinal);
+
+ HRESULT (STDMETHODCALLTYPE *GetRefTypeInfo)(
+ ITypeInfo* This,
+ HREFTYPE hRefType,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *AddressOfMember)(
+ ITypeInfo* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ PVOID *ppv);
+
+ HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+ ITypeInfo* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ PVOID *ppvObj);
+
+ HRESULT (STDMETHODCALLTYPE *GetMops)(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *pBstrMops);
+
+ HRESULT (STDMETHODCALLTYPE *GetContainingTypeLib)(
+ ITypeInfo* This,
+ ITypeLib **ppTLib,
+ UINT *pIndex);
+
+ void (STDMETHODCALLTYPE *ReleaseTypeAttr)(
+ ITypeInfo* This,
+ TYPEATTR *pTypeAttr);
+
+ void (STDMETHODCALLTYPE *ReleaseFuncDesc)(
+ ITypeInfo* This,
+ FUNCDESC *pFuncDesc);
+
+ void (STDMETHODCALLTYPE *ReleaseVarDesc)(
+ ITypeInfo* This,
+ VARDESC *pVarDesc);
+
+ END_INTERFACE
+} ITypeInfoVtbl;
+interface ITypeInfo {
+ CONST_VTBL ITypeInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeInfo methods ***/
+#define ITypeInfo_GetTypeAttr(This,ppTypeAttr) (This)->lpVtbl->GetTypeAttr(This,ppTypeAttr)
+#define ITypeInfo_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeInfo_GetFuncDesc(This,index,ppFuncDesc) (This)->lpVtbl->GetFuncDesc(This,index,ppFuncDesc)
+#define ITypeInfo_GetVarDesc(This,index,ppVarDesc) (This)->lpVtbl->GetVarDesc(This,index,ppVarDesc)
+#define ITypeInfo_GetNames(This,memid,rgBstrNames,cMaxNames,pcNames) (This)->lpVtbl->GetNames(This,memid,rgBstrNames,cMaxNames,pcNames)
+#define ITypeInfo_GetRefTypeOfImplType(This,index,pRefType) (This)->lpVtbl->GetRefTypeOfImplType(This,index,pRefType)
+#define ITypeInfo_GetImplTypeFlags(This,index,pImplTypeFlags) (This)->lpVtbl->GetImplTypeFlags(This,index,pImplTypeFlags)
+#define ITypeInfo_GetIDsOfNames(This,rgszNames,cNames,pMemId) (This)->lpVtbl->GetIDsOfNames(This,rgszNames,cNames,pMemId)
+#define ITypeInfo_Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define ITypeInfo_GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeInfo_GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal) (This)->lpVtbl->GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal)
+#define ITypeInfo_GetRefTypeInfo(This,hRefType,ppTInfo) (This)->lpVtbl->GetRefTypeInfo(This,hRefType,ppTInfo)
+#define ITypeInfo_AddressOfMember(This,memid,invKind,ppv) (This)->lpVtbl->AddressOfMember(This,memid,invKind,ppv)
+#define ITypeInfo_CreateInstance(This,pUnkOuter,riid,ppvObj) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObj)
+#define ITypeInfo_GetMops(This,memid,pBstrMops) (This)->lpVtbl->GetMops(This,memid,pBstrMops)
+#define ITypeInfo_GetContainingTypeLib(This,ppTLib,pIndex) (This)->lpVtbl->GetContainingTypeLib(This,ppTLib,pIndex)
+#define ITypeInfo_ReleaseTypeAttr(This,pTypeAttr) (This)->lpVtbl->ReleaseTypeAttr(This,pTypeAttr)
+#define ITypeInfo_ReleaseFuncDesc(This,pFuncDesc) (This)->lpVtbl->ReleaseFuncDesc(This,pFuncDesc)
+#define ITypeInfo_ReleaseVarDesc(This,pVarDesc) (This)->lpVtbl->ReleaseVarDesc(This,pVarDesc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetTypeAttr_Proxy(
+ ITypeInfo* This,
+ LPTYPEATTR *ppTypeAttr,
+ CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeInfo_RemoteGetTypeAttr_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetTypeComp_Proxy(
+ ITypeInfo* This,
+ ITypeComp **ppTComp);
+void __RPC_STUB ITypeInfo_GetTypeComp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetFuncDesc_Proxy(
+ ITypeInfo* This,
+ UINT index,
+ LPFUNCDESC *ppFuncDesc,
+ CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeInfo_RemoteGetFuncDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetVarDesc_Proxy(
+ ITypeInfo* This,
+ UINT index,
+ LPVARDESC *ppVarDesc,
+ CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeInfo_RemoteGetVarDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetNames_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *rgBstrNames,
+ UINT cMaxNames,
+ UINT *pcNames);
+void __RPC_STUB ITypeInfo_RemoteGetNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetRefTypeOfImplType_Proxy(
+ ITypeInfo* This,
+ UINT index,
+ HREFTYPE *pRefType);
+void __RPC_STUB ITypeInfo_GetRefTypeOfImplType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetImplTypeFlags_Proxy(
+ ITypeInfo* This,
+ UINT index,
+ INT *pImplTypeFlags);
+void __RPC_STUB ITypeInfo_GetImplTypeFlags_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalGetIDsOfNames_Proxy(
+ ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalGetIDsOfNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalInvoke_Proxy(
+ ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalInvoke_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetDocumentation_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ DWORD refPtrFlags,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+void __RPC_STUB ITypeInfo_RemoteGetDocumentation_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetDllEntry_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ DWORD refPtrFlags,
+ BSTR *pBstrDllName,
+ BSTR *pBstrName,
+ WORD *pwOrdinal);
+void __RPC_STUB ITypeInfo_RemoteGetDllEntry_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetRefTypeInfo_Proxy(
+ ITypeInfo* This,
+ HREFTYPE hRefType,
+ ITypeInfo **ppTInfo);
+void __RPC_STUB ITypeInfo_GetRefTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalAddressOfMember_Proxy(
+ ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalAddressOfMember_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteCreateInstance_Proxy(
+ ITypeInfo* This,
+ REFIID riid,
+ IUnknown **ppvObj);
+void __RPC_STUB ITypeInfo_RemoteCreateInstance_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetMops_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *pBstrMops);
+void __RPC_STUB ITypeInfo_GetMops_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_RemoteGetContainingTypeLib_Proxy(
+ ITypeInfo* This,
+ ITypeLib **ppTLib,
+ UINT *pIndex);
+void __RPC_STUB ITypeInfo_RemoteGetContainingTypeLib_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalReleaseTypeAttr_Proxy(
+ ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalReleaseTypeAttr_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalReleaseFuncDesc_Proxy(
+ ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalReleaseFuncDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo_LocalReleaseVarDesc_Proxy(
+ ITypeInfo* This);
+void __RPC_STUB ITypeInfo_LocalReleaseVarDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeInfo_GetTypeAttr_Proxy(
+ ITypeInfo* This,
+ TYPEATTR **ppTypeAttr);
+HRESULT __RPC_STUB ITypeInfo_GetTypeAttr_Stub(
+ ITypeInfo* This,
+ LPTYPEATTR *ppTypeAttr,
+ CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeInfo_GetFuncDesc_Proxy(
+ ITypeInfo* This,
+ UINT index,
+ FUNCDESC **ppFuncDesc);
+HRESULT __RPC_STUB ITypeInfo_GetFuncDesc_Stub(
+ ITypeInfo* This,
+ UINT index,
+ LPFUNCDESC *ppFuncDesc,
+ CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeInfo_GetVarDesc_Proxy(
+ ITypeInfo* This,
+ UINT index,
+ VARDESC **ppVarDesc);
+HRESULT __RPC_STUB ITypeInfo_GetVarDesc_Stub(
+ ITypeInfo* This,
+ UINT index,
+ LPVARDESC *ppVarDesc,
+ CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeInfo_GetNames_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *rgBstrNames,
+ UINT cMaxNames,
+ UINT *pcNames);
+HRESULT __RPC_STUB ITypeInfo_GetNames_Stub(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *rgBstrNames,
+ UINT cMaxNames,
+ UINT *pcNames);
+HRESULT CALLBACK ITypeInfo_GetIDsOfNames_Proxy(
+ ITypeInfo* This,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ MEMBERID *pMemId);
+HRESULT __RPC_STUB ITypeInfo_GetIDsOfNames_Stub(
+ ITypeInfo* This);
+HRESULT CALLBACK ITypeInfo_Invoke_Proxy(
+ ITypeInfo* This,
+ PVOID pvInstance,
+ MEMBERID memid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+HRESULT __RPC_STUB ITypeInfo_Invoke_Stub(
+ ITypeInfo* This);
+HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub(
+ ITypeInfo* This,
+ MEMBERID memid,
+ DWORD refPtrFlags,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ BSTR *pBstrDllName,
+ BSTR *pBstrName,
+ WORD *pwOrdinal);
+HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub(
+ ITypeInfo* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ DWORD refPtrFlags,
+ BSTR *pBstrDllName,
+ BSTR *pBstrName,
+ WORD *pwOrdinal);
+HRESULT CALLBACK ITypeInfo_AddressOfMember_Proxy(
+ ITypeInfo* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ PVOID *ppv);
+HRESULT __RPC_STUB ITypeInfo_AddressOfMember_Stub(
+ ITypeInfo* This);
+HRESULT CALLBACK ITypeInfo_CreateInstance_Proxy(
+ ITypeInfo* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ PVOID *ppvObj);
+HRESULT __RPC_STUB ITypeInfo_CreateInstance_Stub(
+ ITypeInfo* This,
+ REFIID riid,
+ IUnknown **ppvObj);
+HRESULT CALLBACK ITypeInfo_GetContainingTypeLib_Proxy(
+ ITypeInfo* This,
+ ITypeLib **ppTLib,
+ UINT *pIndex);
+HRESULT __RPC_STUB ITypeInfo_GetContainingTypeLib_Stub(
+ ITypeInfo* This,
+ ITypeLib **ppTLib,
+ UINT *pIndex);
+void CALLBACK ITypeInfo_ReleaseTypeAttr_Proxy(
+ ITypeInfo* This,
+ TYPEATTR *pTypeAttr);
+HRESULT __RPC_STUB ITypeInfo_ReleaseTypeAttr_Stub(
+ ITypeInfo* This);
+void CALLBACK ITypeInfo_ReleaseFuncDesc_Proxy(
+ ITypeInfo* This,
+ FUNCDESC *pFuncDesc);
+HRESULT __RPC_STUB ITypeInfo_ReleaseFuncDesc_Stub(
+ ITypeInfo* This);
+void CALLBACK ITypeInfo_ReleaseVarDesc_Proxy(
+ ITypeInfo* This,
+ VARDESC *pVarDesc);
+HRESULT __RPC_STUB ITypeInfo_ReleaseVarDesc_Stub(
+ ITypeInfo* This);
+
+#endif /* __ITypeInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeInfo2 interface
+ */
+#ifndef __ITypeInfo2_INTERFACE_DEFINED__
+#define __ITypeInfo2_INTERFACE_DEFINED__
+
+typedef ITypeInfo2 *LPTYPEINFO2;
+DEFINE_GUID(IID_ITypeInfo2, 0x00020412, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeInfo2 : public ITypeInfo
+{
+ virtual HRESULT STDMETHODCALLTYPE GetTypeKind(
+ TYPEKIND *pTypeKind) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeFlags(
+ ULONG *pTypeFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFuncIndexOfMemId(
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ UINT *pFuncIndex) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVarIndexOfMemId(
+ MEMBERID memid,
+ UINT *pVarIndex) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCustData(
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFuncCustData(
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetParamCustData(
+ UINT indexFunc,
+ UINT indexParam,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVarCustData(
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetImplTypeCustData(
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDocumentation2(
+ MEMBERID memid,
+ LCID lcid,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAllCustData(
+ CUSTDATA *pCustData) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAllFuncCustData(
+ UINT index,
+ CUSTDATA *pCustData) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAllParamCustData(
+ UINT indexFunc,
+ UINT indexParam,
+ CUSTDATA *pCustData) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAllVarCustData(
+ UINT index,
+ CUSTDATA *pCustData) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAllImplTypeCustData(
+ UINT index,
+ CUSTDATA *pCustData) = 0;
+
+};
+#else
+typedef struct ITypeInfo2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeInfo2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeInfo2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeInfo2* This);
+
+ /*** ITypeInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeAttr)(
+ ITypeInfo2* This,
+ TYPEATTR **ppTypeAttr);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+ ITypeInfo2* This,
+ ITypeComp **ppTComp);
+
+ HRESULT (STDMETHODCALLTYPE *GetFuncDesc)(
+ ITypeInfo2* This,
+ UINT index,
+ FUNCDESC **ppFuncDesc);
+
+ HRESULT (STDMETHODCALLTYPE *GetVarDesc)(
+ ITypeInfo2* This,
+ UINT index,
+ VARDESC **ppVarDesc);
+
+ HRESULT (STDMETHODCALLTYPE *GetNames)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ BSTR *rgBstrNames,
+ UINT cMaxNames,
+ UINT *pcNames);
+
+ HRESULT (STDMETHODCALLTYPE *GetRefTypeOfImplType)(
+ ITypeInfo2* This,
+ UINT index,
+ HREFTYPE *pRefType);
+
+ HRESULT (STDMETHODCALLTYPE *GetImplTypeFlags)(
+ ITypeInfo2* This,
+ UINT index,
+ INT *pImplTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
+ ITypeInfo2* This,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ MEMBERID *pMemId);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ ITypeInfo2* This,
+ PVOID pvInstance,
+ MEMBERID memid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr);
+
+ HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+
+ HRESULT (STDMETHODCALLTYPE *GetDllEntry)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ BSTR *pBstrDllName,
+ BSTR *pBstrName,
+ WORD *pwOrdinal);
+
+ HRESULT (STDMETHODCALLTYPE *GetRefTypeInfo)(
+ ITypeInfo2* This,
+ HREFTYPE hRefType,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *AddressOfMember)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ PVOID *ppv);
+
+ HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+ ITypeInfo2* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ PVOID *ppvObj);
+
+ HRESULT (STDMETHODCALLTYPE *GetMops)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ BSTR *pBstrMops);
+
+ HRESULT (STDMETHODCALLTYPE *GetContainingTypeLib)(
+ ITypeInfo2* This,
+ ITypeLib **ppTLib,
+ UINT *pIndex);
+
+ void (STDMETHODCALLTYPE *ReleaseTypeAttr)(
+ ITypeInfo2* This,
+ TYPEATTR *pTypeAttr);
+
+ void (STDMETHODCALLTYPE *ReleaseFuncDesc)(
+ ITypeInfo2* This,
+ FUNCDESC *pFuncDesc);
+
+ void (STDMETHODCALLTYPE *ReleaseVarDesc)(
+ ITypeInfo2* This,
+ VARDESC *pVarDesc);
+
+ /*** ITypeInfo2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetTypeKind)(
+ ITypeInfo2* This,
+ TYPEKIND *pTypeKind);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeFlags)(
+ ITypeInfo2* This,
+ ULONG *pTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetFuncIndexOfMemId)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ UINT *pFuncIndex);
+
+ HRESULT (STDMETHODCALLTYPE *GetVarIndexOfMemId)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ UINT *pVarIndex);
+
+ HRESULT (STDMETHODCALLTYPE *GetCustData)(
+ ITypeInfo2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *GetFuncCustData)(
+ ITypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *GetParamCustData)(
+ ITypeInfo2* This,
+ UINT indexFunc,
+ UINT indexParam,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *GetVarCustData)(
+ ITypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *GetImplTypeCustData)(
+ ITypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *GetDocumentation2)(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ LCID lcid,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+
+ HRESULT (STDMETHODCALLTYPE *GetAllCustData)(
+ ITypeInfo2* This,
+ CUSTDATA *pCustData);
+
+ HRESULT (STDMETHODCALLTYPE *GetAllFuncCustData)(
+ ITypeInfo2* This,
+ UINT index,
+ CUSTDATA *pCustData);
+
+ HRESULT (STDMETHODCALLTYPE *GetAllParamCustData)(
+ ITypeInfo2* This,
+ UINT indexFunc,
+ UINT indexParam,
+ CUSTDATA *pCustData);
+
+ HRESULT (STDMETHODCALLTYPE *GetAllVarCustData)(
+ ITypeInfo2* This,
+ UINT index,
+ CUSTDATA *pCustData);
+
+ HRESULT (STDMETHODCALLTYPE *GetAllImplTypeCustData)(
+ ITypeInfo2* This,
+ UINT index,
+ CUSTDATA *pCustData);
+
+ END_INTERFACE
+} ITypeInfo2Vtbl;
+interface ITypeInfo2 {
+ CONST_VTBL ITypeInfo2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeInfo2_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeInfo methods ***/
+#define ITypeInfo2_GetTypeAttr(This,ppTypeAttr) (This)->lpVtbl->GetTypeAttr(This,ppTypeAttr)
+#define ITypeInfo2_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeInfo2_GetFuncDesc(This,index,ppFuncDesc) (This)->lpVtbl->GetFuncDesc(This,index,ppFuncDesc)
+#define ITypeInfo2_GetVarDesc(This,index,ppVarDesc) (This)->lpVtbl->GetVarDesc(This,index,ppVarDesc)
+#define ITypeInfo2_GetNames(This,memid,rgBstrNames,cMaxNames,pcNames) (This)->lpVtbl->GetNames(This,memid,rgBstrNames,cMaxNames,pcNames)
+#define ITypeInfo2_GetRefTypeOfImplType(This,index,pRefType) (This)->lpVtbl->GetRefTypeOfImplType(This,index,pRefType)
+#define ITypeInfo2_GetImplTypeFlags(This,index,pImplTypeFlags) (This)->lpVtbl->GetImplTypeFlags(This,index,pImplTypeFlags)
+#define ITypeInfo2_GetIDsOfNames(This,rgszNames,cNames,pMemId) (This)->lpVtbl->GetIDsOfNames(This,rgszNames,cNames,pMemId)
+#define ITypeInfo2_Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+#define ITypeInfo2_GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeInfo2_GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal) (This)->lpVtbl->GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal)
+#define ITypeInfo2_GetRefTypeInfo(This,hRefType,ppTInfo) (This)->lpVtbl->GetRefTypeInfo(This,hRefType,ppTInfo)
+#define ITypeInfo2_AddressOfMember(This,memid,invKind,ppv) (This)->lpVtbl->AddressOfMember(This,memid,invKind,ppv)
+#define ITypeInfo2_CreateInstance(This,pUnkOuter,riid,ppvObj) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObj)
+#define ITypeInfo2_GetMops(This,memid,pBstrMops) (This)->lpVtbl->GetMops(This,memid,pBstrMops)
+#define ITypeInfo2_GetContainingTypeLib(This,ppTLib,pIndex) (This)->lpVtbl->GetContainingTypeLib(This,ppTLib,pIndex)
+#define ITypeInfo2_ReleaseTypeAttr(This,pTypeAttr) (This)->lpVtbl->ReleaseTypeAttr(This,pTypeAttr)
+#define ITypeInfo2_ReleaseFuncDesc(This,pFuncDesc) (This)->lpVtbl->ReleaseFuncDesc(This,pFuncDesc)
+#define ITypeInfo2_ReleaseVarDesc(This,pVarDesc) (This)->lpVtbl->ReleaseVarDesc(This,pVarDesc)
+/*** ITypeInfo2 methods ***/
+#define ITypeInfo2_GetTypeKind(This,pTypeKind) (This)->lpVtbl->GetTypeKind(This,pTypeKind)
+#define ITypeInfo2_GetTypeFlags(This,pTypeFlags) (This)->lpVtbl->GetTypeFlags(This,pTypeFlags)
+#define ITypeInfo2_GetFuncIndexOfMemId(This,memid,invKind,pFuncIndex) (This)->lpVtbl->GetFuncIndexOfMemId(This,memid,invKind,pFuncIndex)
+#define ITypeInfo2_GetVarIndexOfMemId(This,memid,pVarIndex) (This)->lpVtbl->GetVarIndexOfMemId(This,memid,pVarIndex)
+#define ITypeInfo2_GetCustData(This,guid,pVarVal) (This)->lpVtbl->GetCustData(This,guid,pVarVal)
+#define ITypeInfo2_GetFuncCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetFuncCustData(This,index,guid,pVarVal)
+#define ITypeInfo2_GetParamCustData(This,indexFunc,indexParam,guid,pVarVal) (This)->lpVtbl->GetParamCustData(This,indexFunc,indexParam,guid,pVarVal)
+#define ITypeInfo2_GetVarCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetVarCustData(This,index,guid,pVarVal)
+#define ITypeInfo2_GetImplTypeCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetImplTypeCustData(This,index,guid,pVarVal)
+#define ITypeInfo2_GetDocumentation2(This,memid,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll) (This)->lpVtbl->GetDocumentation2(This,memid,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll)
+#define ITypeInfo2_GetAllCustData(This,pCustData) (This)->lpVtbl->GetAllCustData(This,pCustData)
+#define ITypeInfo2_GetAllFuncCustData(This,index,pCustData) (This)->lpVtbl->GetAllFuncCustData(This,index,pCustData)
+#define ITypeInfo2_GetAllParamCustData(This,indexFunc,indexParam,pCustData) (This)->lpVtbl->GetAllParamCustData(This,indexFunc,indexParam,pCustData)
+#define ITypeInfo2_GetAllVarCustData(This,index,pCustData) (This)->lpVtbl->GetAllVarCustData(This,index,pCustData)
+#define ITypeInfo2_GetAllImplTypeCustData(This,index,pCustData) (This)->lpVtbl->GetAllImplTypeCustData(This,index,pCustData)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetTypeKind_Proxy(
+ ITypeInfo2* This,
+ TYPEKIND *pTypeKind);
+void __RPC_STUB ITypeInfo2_GetTypeKind_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetTypeFlags_Proxy(
+ ITypeInfo2* This,
+ ULONG *pTypeFlags);
+void __RPC_STUB ITypeInfo2_GetTypeFlags_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetFuncIndexOfMemId_Proxy(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ INVOKEKIND invKind,
+ UINT *pFuncIndex);
+void __RPC_STUB ITypeInfo2_GetFuncIndexOfMemId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetVarIndexOfMemId_Proxy(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ UINT *pVarIndex);
+void __RPC_STUB ITypeInfo2_GetVarIndexOfMemId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetCustData_Proxy(
+ ITypeInfo2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetFuncCustData_Proxy(
+ ITypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetFuncCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetParamCustData_Proxy(
+ ITypeInfo2* This,
+ UINT indexFunc,
+ UINT indexParam,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetParamCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetVarCustData_Proxy(
+ ITypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetVarCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetImplTypeCustData_Proxy(
+ ITypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ITypeInfo2_GetImplTypeCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_RemoteGetDocumentation2_Proxy(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ LCID lcid,
+ DWORD refPtrFlags,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+void __RPC_STUB ITypeInfo2_RemoteGetDocumentation2_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllCustData_Proxy(
+ ITypeInfo2* This,
+ CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllFuncCustData_Proxy(
+ ITypeInfo2* This,
+ UINT index,
+ CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllFuncCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllParamCustData_Proxy(
+ ITypeInfo2* This,
+ UINT indexFunc,
+ UINT indexParam,
+ CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllParamCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllVarCustData_Proxy(
+ ITypeInfo2* This,
+ UINT index,
+ CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllVarCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetAllImplTypeCustData_Proxy(
+ ITypeInfo2* This,
+ UINT index,
+ CUSTDATA *pCustData);
+void __RPC_STUB ITypeInfo2_GetAllImplTypeCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeInfo2_GetDocumentation2_Proxy(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ LCID lcid,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+HRESULT __RPC_STUB ITypeInfo2_GetDocumentation2_Stub(
+ ITypeInfo2* This,
+ MEMBERID memid,
+ LCID lcid,
+ DWORD refPtrFlags,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+
+#endif /* __ITypeInfo2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeLib interface
+ */
+#ifndef __ITypeLib_INTERFACE_DEFINED__
+#define __ITypeLib_INTERFACE_DEFINED__
+
+typedef ITypeLib *LPTYPELIB;
+typedef enum tagSYSKIND {
+ SYS_WIN16 = 0,
+ SYS_WIN32 = 1,
+ SYS_MAC = 2,
+ SYS_WIN64 = 3
+} SYSKIND;
+typedef enum tagLIBFLAGS {
+ LIBFLAG_FRESTRICTED = 0x1,
+ LIBFLAG_FCONTROL = 0x2,
+ LIBFLAG_FHIDDEN = 0x4,
+ LIBFLAG_FHASDISKIMAGE = 0x8
+} LIBFLAGS;
+typedef struct tagTLIBATTR {
+ GUID guid;
+ LCID lcid;
+ SYSKIND syskind;
+ WORD wMajorVerNum;
+ WORD wMinorVerNum;
+ WORD wLibFlags;
+} TLIBATTR;
+typedef struct tagTLIBATTR *LPTLIBATTR;
+DEFINE_GUID(IID_ITypeLib, 0x00020402, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeLib : public IUnknown
+{
+ virtual UINT STDMETHODCALLTYPE GetTypeInfoCount(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+ UINT index,
+ ITypeInfo **ppTInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfoType(
+ UINT index,
+ TYPEKIND *pTKind) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfoOfGuid(
+ REFGUID guid,
+ ITypeInfo **ppTinfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetLibAttr(
+ TLIBATTR **ppTLibAttr) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeComp(
+ ITypeComp **ppTComp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDocumentation(
+ INT index,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsName(
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ BOOL *pfName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FindName(
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ MEMBERID *rgMemId,
+ USHORT *pcFound) = 0;
+
+ virtual void STDMETHODCALLTYPE ReleaseTLibAttr(
+ TLIBATTR *pTLibAttr) = 0;
+
+};
+#else
+typedef struct ITypeLibVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeLib* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeLib* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeLib* This);
+
+ /*** ITypeLib methods ***/
+ UINT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ ITypeLib* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ ITypeLib* This,
+ UINT index,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoType)(
+ ITypeLib* This,
+ UINT index,
+ TYPEKIND *pTKind);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoOfGuid)(
+ ITypeLib* This,
+ REFGUID guid,
+ ITypeInfo **ppTinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetLibAttr)(
+ ITypeLib* This,
+ TLIBATTR **ppTLibAttr);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+ ITypeLib* This,
+ ITypeComp **ppTComp);
+
+ HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+ ITypeLib* This,
+ INT index,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+
+ HRESULT (STDMETHODCALLTYPE *IsName)(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ BOOL *pfName);
+
+ HRESULT (STDMETHODCALLTYPE *FindName)(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ MEMBERID *rgMemId,
+ USHORT *pcFound);
+
+ void (STDMETHODCALLTYPE *ReleaseTLibAttr)(
+ ITypeLib* This,
+ TLIBATTR *pTLibAttr);
+
+ END_INTERFACE
+} ITypeLibVtbl;
+interface ITypeLib {
+ CONST_VTBL ITypeLibVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeLib_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeLib_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeLib_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeLib methods ***/
+#define ITypeLib_GetTypeInfoCount(This) (This)->lpVtbl->GetTypeInfoCount(This)
+#define ITypeLib_GetTypeInfo(This,index,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,index,ppTInfo)
+#define ITypeLib_GetTypeInfoType(This,index,pTKind) (This)->lpVtbl->GetTypeInfoType(This,index,pTKind)
+#define ITypeLib_GetTypeInfoOfGuid(This,guid,ppTinfo) (This)->lpVtbl->GetTypeInfoOfGuid(This,guid,ppTinfo)
+#define ITypeLib_GetLibAttr(This,ppTLibAttr) (This)->lpVtbl->GetLibAttr(This,ppTLibAttr)
+#define ITypeLib_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeLib_GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeLib_IsName(This,szNameBuf,lHashVal,pfName) (This)->lpVtbl->IsName(This,szNameBuf,lHashVal,pfName)
+#define ITypeLib_FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound) (This)->lpVtbl->FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound)
+#define ITypeLib_ReleaseTLibAttr(This,pTLibAttr) (This)->lpVtbl->ReleaseTLibAttr(This,pTLibAttr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteGetTypeInfoCount_Proxy(
+ ITypeLib* This,
+ UINT *pcTInfo);
+void __RPC_STUB ITypeLib_RemoteGetTypeInfoCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfo_Proxy(
+ ITypeLib* This,
+ UINT index,
+ ITypeInfo **ppTInfo);
+void __RPC_STUB ITypeLib_GetTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfoType_Proxy(
+ ITypeLib* This,
+ UINT index,
+ TYPEKIND *pTKind);
+void __RPC_STUB ITypeLib_GetTypeInfoType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfoOfGuid_Proxy(
+ ITypeLib* This,
+ REFGUID guid,
+ ITypeInfo **ppTinfo);
+void __RPC_STUB ITypeLib_GetTypeInfoOfGuid_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteGetLibAttr_Proxy(
+ ITypeLib* This,
+ LPTLIBATTR *ppTLibAttr,
+ CLEANLOCALSTORAGE *pDummy);
+void __RPC_STUB ITypeLib_RemoteGetLibAttr_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeComp_Proxy(
+ ITypeLib* This,
+ ITypeComp **ppTComp);
+void __RPC_STUB ITypeLib_GetTypeComp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteGetDocumentation_Proxy(
+ ITypeLib* This,
+ INT index,
+ DWORD refPtrFlags,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+void __RPC_STUB ITypeLib_RemoteGetDocumentation_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteIsName_Proxy(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ BOOL *pfName,
+ BSTR *pBstrLibName);
+void __RPC_STUB ITypeLib_RemoteIsName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_RemoteFindName_Proxy(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ MEMBERID *rgMemId,
+ USHORT *pcFound,
+ BSTR *pBstrLibName);
+void __RPC_STUB ITypeLib_RemoteFindName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib_LocalReleaseTLibAttr_Proxy(
+ ITypeLib* This);
+void __RPC_STUB ITypeLib_LocalReleaseTLibAttr_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT CALLBACK ITypeLib_GetTypeInfoCount_Proxy(
+ ITypeLib* This);
+HRESULT __RPC_STUB ITypeLib_GetTypeInfoCount_Stub(
+ ITypeLib* This,
+ UINT *pcTInfo);
+HRESULT CALLBACK ITypeLib_GetLibAttr_Proxy(
+ ITypeLib* This,
+ TLIBATTR **ppTLibAttr);
+HRESULT __RPC_STUB ITypeLib_GetLibAttr_Stub(
+ ITypeLib* This,
+ LPTLIBATTR *ppTLibAttr,
+ CLEANLOCALSTORAGE *pDummy);
+HRESULT CALLBACK ITypeLib_GetDocumentation_Proxy(
+ ITypeLib* This,
+ INT index,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+HRESULT __RPC_STUB ITypeLib_GetDocumentation_Stub(
+ ITypeLib* This,
+ INT index,
+ DWORD refPtrFlags,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+HRESULT CALLBACK ITypeLib_IsName_Proxy(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ BOOL *pfName);
+HRESULT __RPC_STUB ITypeLib_IsName_Stub(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ BOOL *pfName,
+ BSTR *pBstrLibName);
+HRESULT CALLBACK ITypeLib_FindName_Proxy(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ MEMBERID *rgMemId,
+ USHORT *pcFound);
+HRESULT __RPC_STUB ITypeLib_FindName_Stub(
+ ITypeLib* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ MEMBERID *rgMemId,
+ USHORT *pcFound,
+ BSTR *pBstrLibName);
+void CALLBACK ITypeLib_ReleaseTLibAttr_Proxy(
+ ITypeLib* This,
+ TLIBATTR *pTLibAttr);
+HRESULT __RPC_STUB ITypeLib_ReleaseTLibAttr_Stub(
+ ITypeLib* This);
+
+#endif /* __ITypeLib_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeLib2 interface
+ */
+#ifndef __ITypeLib2_INTERFACE_DEFINED__
+#define __ITypeLib2_INTERFACE_DEFINED__
+
+typedef ITypeLib2 *LPTYPELIB2;
+DEFINE_GUID(IID_ITypeLib2, 0x00020411, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeLib2 : public ITypeLib
+{
+ virtual HRESULT STDMETHODCALLTYPE GetCustData(
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetLibStatistics(
+ ULONG *pcUniqueNames,
+ ULONG *pcchUniqueNames) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDocumentation2(
+ INT index,
+ LCID lcid,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAllCustData(
+ CUSTDATA *pCustData) = 0;
+
+};
+#else
+typedef struct ITypeLib2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeLib2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeLib2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeLib2* This);
+
+ /*** ITypeLib methods ***/
+ UINT (STDMETHODCALLTYPE *GetTypeInfoCount)(
+ ITypeLib2* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ ITypeLib2* This,
+ UINT index,
+ ITypeInfo **ppTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoType)(
+ ITypeLib2* This,
+ UINT index,
+ TYPEKIND *pTKind);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfoOfGuid)(
+ ITypeLib2* This,
+ REFGUID guid,
+ ITypeInfo **ppTinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetLibAttr)(
+ ITypeLib2* This,
+ TLIBATTR **ppTLibAttr);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeComp)(
+ ITypeLib2* This,
+ ITypeComp **ppTComp);
+
+ HRESULT (STDMETHODCALLTYPE *GetDocumentation)(
+ ITypeLib2* This,
+ INT index,
+ BSTR *pBstrName,
+ BSTR *pBstrDocString,
+ DWORD *pdwHelpContext,
+ BSTR *pBstrHelpFile);
+
+ HRESULT (STDMETHODCALLTYPE *IsName)(
+ ITypeLib2* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ BOOL *pfName);
+
+ HRESULT (STDMETHODCALLTYPE *FindName)(
+ ITypeLib2* This,
+ LPOLESTR szNameBuf,
+ ULONG lHashVal,
+ ITypeInfo **ppTInfo,
+ MEMBERID *rgMemId,
+ USHORT *pcFound);
+
+ void (STDMETHODCALLTYPE *ReleaseTLibAttr)(
+ ITypeLib2* This,
+ TLIBATTR *pTLibAttr);
+
+ /*** ITypeLib2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetCustData)(
+ ITypeLib2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *GetLibStatistics)(
+ ITypeLib2* This,
+ ULONG *pcUniqueNames,
+ ULONG *pcchUniqueNames);
+
+ HRESULT (STDMETHODCALLTYPE *GetDocumentation2)(
+ ITypeLib2* This,
+ INT index,
+ LCID lcid,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+
+ HRESULT (STDMETHODCALLTYPE *GetAllCustData)(
+ ITypeLib2* This,
+ CUSTDATA *pCustData);
+
+ END_INTERFACE
+} ITypeLib2Vtbl;
+interface ITypeLib2 {
+ CONST_VTBL ITypeLib2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeLib2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeLib2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeLib2_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeLib methods ***/
+#define ITypeLib2_GetTypeInfoCount(This) (This)->lpVtbl->GetTypeInfoCount(This)
+#define ITypeLib2_GetTypeInfo(This,index,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,index,ppTInfo)
+#define ITypeLib2_GetTypeInfoType(This,index,pTKind) (This)->lpVtbl->GetTypeInfoType(This,index,pTKind)
+#define ITypeLib2_GetTypeInfoOfGuid(This,guid,ppTinfo) (This)->lpVtbl->GetTypeInfoOfGuid(This,guid,ppTinfo)
+#define ITypeLib2_GetLibAttr(This,ppTLibAttr) (This)->lpVtbl->GetLibAttr(This,ppTLibAttr)
+#define ITypeLib2_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)
+#define ITypeLib2_GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)
+#define ITypeLib2_IsName(This,szNameBuf,lHashVal,pfName) (This)->lpVtbl->IsName(This,szNameBuf,lHashVal,pfName)
+#define ITypeLib2_FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound) (This)->lpVtbl->FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound)
+#define ITypeLib2_ReleaseTLibAttr(This,pTLibAttr) (This)->lpVtbl->ReleaseTLibAttr(This,pTLibAttr)
+/*** ITypeLib2 methods ***/
+#define ITypeLib2_GetCustData(This,guid,pVarVal) (This)->lpVtbl->GetCustData(This,guid,pVarVal)
+#define ITypeLib2_GetLibStatistics(This,pcUniqueNames,pcchUniqueNames) (This)->lpVtbl->GetLibStatistics(This,pcUniqueNames,pcchUniqueNames)
+#define ITypeLib2_GetDocumentation2(This,index,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll) (This)->lpVtbl->GetDocumentation2(This,index,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll)
+#define ITypeLib2_GetAllCustData(This,pCustData) (This)->lpVtbl->GetAllCustData(This,pCustData)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetCustData_Proxy(
+ ITypeLib2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ITypeLib2_GetCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib2_RemoteGetLibStatistics_Proxy(
+ ITypeLib2* This,
+ ULONG *pcUniqueNames,
+ ULONG *pcchUniqueNames);
+void __RPC_STUB ITypeLib2_RemoteGetLibStatistics_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib2_RemoteGetDocumentation2_Proxy(
+ ITypeLib2* This,
+ INT index,
+ LCID lcid,
+ DWORD refPtrFlags,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+void __RPC_STUB ITypeLib2_RemoteGetDocumentation2_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetAllCustData_Proxy(
+ ITypeLib2* This,
+ CUSTDATA *pCustData);
+void __RPC_STUB ITypeLib2_GetAllCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK ITypeLib2_GetLibStatistics_Proxy(
+ ITypeLib2* This,
+ ULONG *pcUniqueNames,
+ ULONG *pcchUniqueNames);
+HRESULT __RPC_STUB ITypeLib2_GetLibStatistics_Stub(
+ ITypeLib2* This,
+ ULONG *pcUniqueNames,
+ ULONG *pcchUniqueNames);
+HRESULT CALLBACK ITypeLib2_GetDocumentation2_Proxy(
+ ITypeLib2* This,
+ INT index,
+ LCID lcid,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+HRESULT __RPC_STUB ITypeLib2_GetDocumentation2_Stub(
+ ITypeLib2* This,
+ INT index,
+ LCID lcid,
+ DWORD refPtrFlags,
+ BSTR *pbstrHelpString,
+ DWORD *pdwHelpStringContext,
+ BSTR *pbstrHelpStringDll);
+
+#endif /* __ITypeLib2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeChangeEvents interface
+ */
+#ifndef __ITypeChangeEvents_INTERFACE_DEFINED__
+#define __ITypeChangeEvents_INTERFACE_DEFINED__
+
+typedef ITypeChangeEvents *LPTYPECHANGEEVENTS;
+typedef enum tagCHANGEKIND {
+ CHANGEKIND_ADDMEMBER = 0,
+ CHANGEKIND_DELETEMEMBER = 1,
+ CHANGEKIND_SETNAMES = 2,
+ CHANGEKIND_SETDOCUMENTATION = 3,
+ CHANGEKIND_GENERAL = 4,
+ CHANGEKIND_INVALIDATE = 5,
+ CHANGEKIND_CHANGEFAILED = 6,
+ CHANGEKIND_MAX = 7
+} CHANGEKIND;
+DEFINE_GUID(IID_ITypeChangeEvents, 0x00020410, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeChangeEvents : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE RequestTypeChange(
+ CHANGEKIND changeKind,
+ ITypeInfo *pTInfoBefore,
+ LPOLESTR pStrName,
+ INT *pfCancel) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AfterTypeChange(
+ CHANGEKIND changeKind,
+ ITypeInfo *pTInfoAfter,
+ LPOLESTR pStrName) = 0;
+
+};
+#else
+typedef struct ITypeChangeEventsVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeChangeEvents* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeChangeEvents* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeChangeEvents* This);
+
+ /*** ITypeChangeEvents methods ***/
+ HRESULT (STDMETHODCALLTYPE *RequestTypeChange)(
+ ITypeChangeEvents* This,
+ CHANGEKIND changeKind,
+ ITypeInfo *pTInfoBefore,
+ LPOLESTR pStrName,
+ INT *pfCancel);
+
+ HRESULT (STDMETHODCALLTYPE *AfterTypeChange)(
+ ITypeChangeEvents* This,
+ CHANGEKIND changeKind,
+ ITypeInfo *pTInfoAfter,
+ LPOLESTR pStrName);
+
+ END_INTERFACE
+} ITypeChangeEventsVtbl;
+interface ITypeChangeEvents {
+ CONST_VTBL ITypeChangeEventsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeChangeEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeChangeEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeChangeEvents_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeChangeEvents methods ***/
+#define ITypeChangeEvents_RequestTypeChange(This,changeKind,pTInfoBefore,pStrName,pfCancel) (This)->lpVtbl->RequestTypeChange(This,changeKind,pTInfoBefore,pStrName,pfCancel)
+#define ITypeChangeEvents_AfterTypeChange(This,changeKind,pTInfoAfter,pStrName) (This)->lpVtbl->AfterTypeChange(This,changeKind,pTInfoAfter,pStrName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeChangeEvents_RequestTypeChange_Proxy(
+ ITypeChangeEvents* This,
+ CHANGEKIND changeKind,
+ ITypeInfo *pTInfoBefore,
+ LPOLESTR pStrName,
+ INT *pfCancel);
+void __RPC_STUB ITypeChangeEvents_RequestTypeChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeChangeEvents_AfterTypeChange_Proxy(
+ ITypeChangeEvents* This,
+ CHANGEKIND changeKind,
+ ITypeInfo *pTInfoAfter,
+ LPOLESTR pStrName);
+void __RPC_STUB ITypeChangeEvents_AfterTypeChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ITypeChangeEvents_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IErrorInfo interface
+ */
+#ifndef __IErrorInfo_INTERFACE_DEFINED__
+#define __IErrorInfo_INTERFACE_DEFINED__
+
+typedef IErrorInfo *LPERRORINFO;
+DEFINE_GUID(IID_IErrorInfo, 0x1cf2b120, 0x547d, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IErrorInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetGUID(
+ GUID *pGUID) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSource(
+ BSTR *pBstrSource) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDescription(
+ BSTR *pBstrDescription) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetHelpFile(
+ BSTR *pBstrHelpFile) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetHelpContext(
+ DWORD *pdwHelpContext) = 0;
+
+};
+#else
+typedef struct IErrorInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IErrorInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IErrorInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IErrorInfo* This);
+
+ /*** IErrorInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetGUID)(
+ IErrorInfo* This,
+ GUID *pGUID);
+
+ HRESULT (STDMETHODCALLTYPE *GetSource)(
+ IErrorInfo* This,
+ BSTR *pBstrSource);
+
+ HRESULT (STDMETHODCALLTYPE *GetDescription)(
+ IErrorInfo* This,
+ BSTR *pBstrDescription);
+
+ HRESULT (STDMETHODCALLTYPE *GetHelpFile)(
+ IErrorInfo* This,
+ BSTR *pBstrHelpFile);
+
+ HRESULT (STDMETHODCALLTYPE *GetHelpContext)(
+ IErrorInfo* This,
+ DWORD *pdwHelpContext);
+
+ END_INTERFACE
+} IErrorInfoVtbl;
+interface IErrorInfo {
+ CONST_VTBL IErrorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IErrorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IErrorInfo methods ***/
+#define IErrorInfo_GetGUID(This,pGUID) (This)->lpVtbl->GetGUID(This,pGUID)
+#define IErrorInfo_GetSource(This,pBstrSource) (This)->lpVtbl->GetSource(This,pBstrSource)
+#define IErrorInfo_GetDescription(This,pBstrDescription) (This)->lpVtbl->GetDescription(This,pBstrDescription)
+#define IErrorInfo_GetHelpFile(This,pBstrHelpFile) (This)->lpVtbl->GetHelpFile(This,pBstrHelpFile)
+#define IErrorInfo_GetHelpContext(This,pdwHelpContext) (This)->lpVtbl->GetHelpContext(This,pdwHelpContext)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetGUID_Proxy(
+ IErrorInfo* This,
+ GUID *pGUID);
+void __RPC_STUB IErrorInfo_GetGUID_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetSource_Proxy(
+ IErrorInfo* This,
+ BSTR *pBstrSource);
+void __RPC_STUB IErrorInfo_GetSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetDescription_Proxy(
+ IErrorInfo* This,
+ BSTR *pBstrDescription);
+void __RPC_STUB IErrorInfo_GetDescription_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetHelpFile_Proxy(
+ IErrorInfo* This,
+ BSTR *pBstrHelpFile);
+void __RPC_STUB IErrorInfo_GetHelpFile_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IErrorInfo_GetHelpContext_Proxy(
+ IErrorInfo* This,
+ DWORD *pdwHelpContext);
+void __RPC_STUB IErrorInfo_GetHelpContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IErrorInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateErrorInfo interface
+ */
+#ifndef __ICreateErrorInfo_INTERFACE_DEFINED__
+#define __ICreateErrorInfo_INTERFACE_DEFINED__
+
+typedef ICreateErrorInfo *LPCREATEERRORINFO;
+DEFINE_GUID(IID_ICreateErrorInfo, 0x22f03340, 0x547d, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateErrorInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetGUID(
+ REFGUID rguid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSource(
+ LPOLESTR szSource) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDescription(
+ LPOLESTR szDescription) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpFile(
+ LPOLESTR szHelpFile) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpContext(
+ DWORD dwHelpContext) = 0;
+
+};
+#else
+typedef struct ICreateErrorInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICreateErrorInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICreateErrorInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICreateErrorInfo* This);
+
+ /*** ICreateErrorInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetGUID)(
+ ICreateErrorInfo* This,
+ REFGUID rguid);
+
+ HRESULT (STDMETHODCALLTYPE *SetSource)(
+ ICreateErrorInfo* This,
+ LPOLESTR szSource);
+
+ HRESULT (STDMETHODCALLTYPE *SetDescription)(
+ ICreateErrorInfo* This,
+ LPOLESTR szDescription);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpFile)(
+ ICreateErrorInfo* This,
+ LPOLESTR szHelpFile);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+ ICreateErrorInfo* This,
+ DWORD dwHelpContext);
+
+ END_INTERFACE
+} ICreateErrorInfoVtbl;
+interface ICreateErrorInfo {
+ CONST_VTBL ICreateErrorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateErrorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateErrorInfo methods ***/
+#define ICreateErrorInfo_SetGUID(This,rguid) (This)->lpVtbl->SetGUID(This,rguid)
+#define ICreateErrorInfo_SetSource(This,szSource) (This)->lpVtbl->SetSource(This,szSource)
+#define ICreateErrorInfo_SetDescription(This,szDescription) (This)->lpVtbl->SetDescription(This,szDescription)
+#define ICreateErrorInfo_SetHelpFile(This,szHelpFile) (This)->lpVtbl->SetHelpFile(This,szHelpFile)
+#define ICreateErrorInfo_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetGUID_Proxy(
+ ICreateErrorInfo* This,
+ REFGUID rguid);
+void __RPC_STUB ICreateErrorInfo_SetGUID_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetSource_Proxy(
+ ICreateErrorInfo* This,
+ LPOLESTR szSource);
+void __RPC_STUB ICreateErrorInfo_SetSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetDescription_Proxy(
+ ICreateErrorInfo* This,
+ LPOLESTR szDescription);
+void __RPC_STUB ICreateErrorInfo_SetDescription_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetHelpFile_Proxy(
+ ICreateErrorInfo* This,
+ LPOLESTR szHelpFile);
+void __RPC_STUB ICreateErrorInfo_SetHelpFile_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateErrorInfo_SetHelpContext_Proxy(
+ ICreateErrorInfo* This,
+ DWORD dwHelpContext);
+void __RPC_STUB ICreateErrorInfo_SetHelpContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICreateErrorInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISupportErrorInfo interface
+ */
+#ifndef __ISupportErrorInfo_INTERFACE_DEFINED__
+#define __ISupportErrorInfo_INTERFACE_DEFINED__
+
+typedef ISupportErrorInfo *LPSUPPORTERRORINFO;
+DEFINE_GUID(IID_ISupportErrorInfo, 0xdf0b3d60, 0x548f, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISupportErrorInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo(
+ REFIID riid) = 0;
+
+};
+#else
+typedef struct ISupportErrorInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISupportErrorInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISupportErrorInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISupportErrorInfo* This);
+
+ /*** ISupportErrorInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *InterfaceSupportsErrorInfo)(
+ ISupportErrorInfo* This,
+ REFIID riid);
+
+ END_INTERFACE
+} ISupportErrorInfoVtbl;
+interface ISupportErrorInfo {
+ CONST_VTBL ISupportErrorInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISupportErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISupportErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISupportErrorInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ISupportErrorInfo methods ***/
+#define ISupportErrorInfo_InterfaceSupportsErrorInfo(This,riid) (This)->lpVtbl->InterfaceSupportsErrorInfo(This,riid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISupportErrorInfo_InterfaceSupportsErrorInfo_Proxy(
+ ISupportErrorInfo* This,
+ REFIID riid);
+void __RPC_STUB ISupportErrorInfo_InterfaceSupportsErrorInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISupportErrorInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeFactory interface
+ */
+#ifndef __ITypeFactory_INTERFACE_DEFINED__
+#define __ITypeFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITypeFactory, 0x0000002e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeFactory : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateFromTypeInfo(
+ ITypeInfo *pTypeInfo,
+ REFIID riid,
+ IUnknown **ppv) = 0;
+
+};
+#else
+typedef struct ITypeFactoryVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeFactory* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeFactory* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeFactory* This);
+
+ /*** ITypeFactory methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateFromTypeInfo)(
+ ITypeFactory* This,
+ ITypeInfo *pTypeInfo,
+ REFIID riid,
+ IUnknown **ppv);
+
+ END_INTERFACE
+} ITypeFactoryVtbl;
+interface ITypeFactory {
+ CONST_VTBL ITypeFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeFactory methods ***/
+#define ITypeFactory_CreateFromTypeInfo(This,pTypeInfo,riid,ppv) (This)->lpVtbl->CreateFromTypeInfo(This,pTypeInfo,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeFactory_CreateFromTypeInfo_Proxy(
+ ITypeFactory* This,
+ ITypeInfo *pTypeInfo,
+ REFIID riid,
+ IUnknown **ppv);
+void __RPC_STUB ITypeFactory_CreateFromTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ITypeFactory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITypeMarshal interface
+ */
+#ifndef __ITypeMarshal_INTERFACE_DEFINED__
+#define __ITypeMarshal_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITypeMarshal, 0x0000002d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITypeMarshal : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Size(
+ PVOID pvType,
+ DWORD dwDestContext,
+ PVOID pvDestContext,
+ ULONG *pSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Marshal(
+ PVOID pvType,
+ DWORD dwDestContext,
+ PVOID pvDestContext,
+ ULONG cbBufferLength,
+ BYTE *pBuffer,
+ ULONG *pcbWritten) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unmarshal(
+ PVOID pvType,
+ DWORD dwFlags,
+ ULONG cbBufferLength,
+ BYTE *pBuffer,
+ ULONG *pcbRead) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Free(
+ PVOID pvType) = 0;
+
+};
+#else
+typedef struct ITypeMarshalVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITypeMarshal* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITypeMarshal* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITypeMarshal* This);
+
+ /*** ITypeMarshal methods ***/
+ HRESULT (STDMETHODCALLTYPE *Size)(
+ ITypeMarshal* This,
+ PVOID pvType,
+ DWORD dwDestContext,
+ PVOID pvDestContext,
+ ULONG *pSize);
+
+ HRESULT (STDMETHODCALLTYPE *Marshal)(
+ ITypeMarshal* This,
+ PVOID pvType,
+ DWORD dwDestContext,
+ PVOID pvDestContext,
+ ULONG cbBufferLength,
+ BYTE *pBuffer,
+ ULONG *pcbWritten);
+
+ HRESULT (STDMETHODCALLTYPE *Unmarshal)(
+ ITypeMarshal* This,
+ PVOID pvType,
+ DWORD dwFlags,
+ ULONG cbBufferLength,
+ BYTE *pBuffer,
+ ULONG *pcbRead);
+
+ HRESULT (STDMETHODCALLTYPE *Free)(
+ ITypeMarshal* This,
+ PVOID pvType);
+
+ END_INTERFACE
+} ITypeMarshalVtbl;
+interface ITypeMarshal {
+ CONST_VTBL ITypeMarshalVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITypeMarshal_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITypeMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITypeMarshal_Release(This) (This)->lpVtbl->Release(This)
+/*** ITypeMarshal methods ***/
+#define ITypeMarshal_Size(This,pvType,dwDestContext,pvDestContext,pSize) (This)->lpVtbl->Size(This,pvType,dwDestContext,pvDestContext,pSize)
+#define ITypeMarshal_Marshal(This,pvType,dwDestContext,pvDestContext,cbBufferLength,pBuffer,pcbWritten) (This)->lpVtbl->Marshal(This,pvType,dwDestContext,pvDestContext,cbBufferLength,pBuffer,pcbWritten)
+#define ITypeMarshal_Unmarshal(This,pvType,dwFlags,cbBufferLength,pBuffer,pcbRead) (This)->lpVtbl->Unmarshal(This,pvType,dwFlags,cbBufferLength,pBuffer,pcbRead)
+#define ITypeMarshal_Free(This,pvType) (This)->lpVtbl->Free(This,pvType)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Size_Proxy(
+ ITypeMarshal* This,
+ PVOID pvType,
+ DWORD dwDestContext,
+ PVOID pvDestContext,
+ ULONG *pSize);
+void __RPC_STUB ITypeMarshal_Size_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Marshal_Proxy(
+ ITypeMarshal* This,
+ PVOID pvType,
+ DWORD dwDestContext,
+ PVOID pvDestContext,
+ ULONG cbBufferLength,
+ BYTE *pBuffer,
+ ULONG *pcbWritten);
+void __RPC_STUB ITypeMarshal_Marshal_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Unmarshal_Proxy(
+ ITypeMarshal* This,
+ PVOID pvType,
+ DWORD dwFlags,
+ ULONG cbBufferLength,
+ BYTE *pBuffer,
+ ULONG *pcbRead);
+void __RPC_STUB ITypeMarshal_Unmarshal_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ITypeMarshal_Free_Proxy(
+ ITypeMarshal* This,
+ PVOID pvType);
+void __RPC_STUB ITypeMarshal_Free_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ITypeMarshal_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRecordInfo interface
+ */
+#ifndef __IRecordInfo_INTERFACE_DEFINED__
+#define __IRecordInfo_INTERFACE_DEFINED__
+
+typedef IRecordInfo *LPRECORDINFO;
+DEFINE_GUID(IID_IRecordInfo, 0x0000002f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRecordInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE RecordInit(
+ PVOID pvNew) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RecordClear(
+ PVOID pvExisting) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RecordCopy(
+ PVOID pvExisting,
+ PVOID pvNew) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetGuid(
+ GUID *pguid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetName(
+ BSTR *pbstrName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSize(
+ ULONG *pcbSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
+ ITypeInfo **ppTypeInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetField(
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFieldNoCopy(
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField,
+ PVOID *ppvDataCArray) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PutField(
+ ULONG wFlags,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PutFieldNoCopy(
+ ULONG wFlags,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFieldNames(
+ ULONG *pcNames,
+ BSTR *rgBstrNames) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE IsMatchingType(
+ IRecordInfo *pRecordInfo) = 0;
+
+ virtual PVOID STDMETHODCALLTYPE RecordCreate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RecordCreateCopy(
+ PVOID pvSource,
+ PVOID *ppvDest) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RecordDestroy(
+ PVOID pvRecord) = 0;
+
+};
+#else
+typedef struct IRecordInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRecordInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRecordInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRecordInfo* This);
+
+ /*** IRecordInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *RecordInit)(
+ IRecordInfo* This,
+ PVOID pvNew);
+
+ HRESULT (STDMETHODCALLTYPE *RecordClear)(
+ IRecordInfo* This,
+ PVOID pvExisting);
+
+ HRESULT (STDMETHODCALLTYPE *RecordCopy)(
+ IRecordInfo* This,
+ PVOID pvExisting,
+ PVOID pvNew);
+
+ HRESULT (STDMETHODCALLTYPE *GetGuid)(
+ IRecordInfo* This,
+ GUID *pguid);
+
+ HRESULT (STDMETHODCALLTYPE *GetName)(
+ IRecordInfo* This,
+ BSTR *pbstrName);
+
+ HRESULT (STDMETHODCALLTYPE *GetSize)(
+ IRecordInfo* This,
+ ULONG *pcbSize);
+
+ HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
+ IRecordInfo* This,
+ ITypeInfo **ppTypeInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetField)(
+ IRecordInfo* This,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField);
+
+ HRESULT (STDMETHODCALLTYPE *GetFieldNoCopy)(
+ IRecordInfo* This,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField,
+ PVOID *ppvDataCArray);
+
+ HRESULT (STDMETHODCALLTYPE *PutField)(
+ IRecordInfo* This,
+ ULONG wFlags,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField);
+
+ HRESULT (STDMETHODCALLTYPE *PutFieldNoCopy)(
+ IRecordInfo* This,
+ ULONG wFlags,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField);
+
+ HRESULT (STDMETHODCALLTYPE *GetFieldNames)(
+ IRecordInfo* This,
+ ULONG *pcNames,
+ BSTR *rgBstrNames);
+
+ BOOL (STDMETHODCALLTYPE *IsMatchingType)(
+ IRecordInfo* This,
+ IRecordInfo *pRecordInfo);
+
+ PVOID (STDMETHODCALLTYPE *RecordCreate)(
+ IRecordInfo* This);
+
+ HRESULT (STDMETHODCALLTYPE *RecordCreateCopy)(
+ IRecordInfo* This,
+ PVOID pvSource,
+ PVOID *ppvDest);
+
+ HRESULT (STDMETHODCALLTYPE *RecordDestroy)(
+ IRecordInfo* This,
+ PVOID pvRecord);
+
+ END_INTERFACE
+} IRecordInfoVtbl;
+interface IRecordInfo {
+ CONST_VTBL IRecordInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRecordInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRecordInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRecordInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IRecordInfo methods ***/
+#define IRecordInfo_RecordInit(This,pvNew) (This)->lpVtbl->RecordInit(This,pvNew)
+#define IRecordInfo_RecordClear(This,pvExisting) (This)->lpVtbl->RecordClear(This,pvExisting)
+#define IRecordInfo_RecordCopy(This,pvExisting,pvNew) (This)->lpVtbl->RecordCopy(This,pvExisting,pvNew)
+#define IRecordInfo_GetGuid(This,pguid) (This)->lpVtbl->GetGuid(This,pguid)
+#define IRecordInfo_GetName(This,pbstrName) (This)->lpVtbl->GetName(This,pbstrName)
+#define IRecordInfo_GetSize(This,pcbSize) (This)->lpVtbl->GetSize(This,pcbSize)
+#define IRecordInfo_GetTypeInfo(This,ppTypeInfo) (This)->lpVtbl->GetTypeInfo(This,ppTypeInfo)
+#define IRecordInfo_GetField(This,pvData,szFieldName,pvarField) (This)->lpVtbl->GetField(This,pvData,szFieldName,pvarField)
+#define IRecordInfo_GetFieldNoCopy(This,pvData,szFieldName,pvarField,ppvDataCArray) (This)->lpVtbl->GetFieldNoCopy(This,pvData,szFieldName,pvarField,ppvDataCArray)
+#define IRecordInfo_PutField(This,wFlags,pvData,szFieldName,pvarField) (This)->lpVtbl->PutField(This,wFlags,pvData,szFieldName,pvarField)
+#define IRecordInfo_PutFieldNoCopy(This,wFlags,pvData,szFieldName,pvarField) (This)->lpVtbl->PutFieldNoCopy(This,wFlags,pvData,szFieldName,pvarField)
+#define IRecordInfo_GetFieldNames(This,pcNames,rgBstrNames) (This)->lpVtbl->GetFieldNames(This,pcNames,rgBstrNames)
+#define IRecordInfo_IsMatchingType(This,pRecordInfo) (This)->lpVtbl->IsMatchingType(This,pRecordInfo)
+#define IRecordInfo_RecordCreate(This) (This)->lpVtbl->RecordCreate(This)
+#define IRecordInfo_RecordCreateCopy(This,pvSource,ppvDest) (This)->lpVtbl->RecordCreateCopy(This,pvSource,ppvDest)
+#define IRecordInfo_RecordDestroy(This,pvRecord) (This)->lpVtbl->RecordDestroy(This,pvRecord)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordInit_Proxy(
+ IRecordInfo* This,
+ PVOID pvNew);
+void __RPC_STUB IRecordInfo_RecordInit_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordClear_Proxy(
+ IRecordInfo* This,
+ PVOID pvExisting);
+void __RPC_STUB IRecordInfo_RecordClear_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordCopy_Proxy(
+ IRecordInfo* This,
+ PVOID pvExisting,
+ PVOID pvNew);
+void __RPC_STUB IRecordInfo_RecordCopy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetGuid_Proxy(
+ IRecordInfo* This,
+ GUID *pguid);
+void __RPC_STUB IRecordInfo_GetGuid_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetName_Proxy(
+ IRecordInfo* This,
+ BSTR *pbstrName);
+void __RPC_STUB IRecordInfo_GetName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetSize_Proxy(
+ IRecordInfo* This,
+ ULONG *pcbSize);
+void __RPC_STUB IRecordInfo_GetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetTypeInfo_Proxy(
+ IRecordInfo* This,
+ ITypeInfo **ppTypeInfo);
+void __RPC_STUB IRecordInfo_GetTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetField_Proxy(
+ IRecordInfo* This,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField);
+void __RPC_STUB IRecordInfo_GetField_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetFieldNoCopy_Proxy(
+ IRecordInfo* This,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField,
+ PVOID *ppvDataCArray);
+void __RPC_STUB IRecordInfo_GetFieldNoCopy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_PutField_Proxy(
+ IRecordInfo* This,
+ ULONG wFlags,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField);
+void __RPC_STUB IRecordInfo_PutField_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_PutFieldNoCopy_Proxy(
+ IRecordInfo* This,
+ ULONG wFlags,
+ PVOID pvData,
+ LPCOLESTR szFieldName,
+ VARIANT *pvarField);
+void __RPC_STUB IRecordInfo_PutFieldNoCopy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_GetFieldNames_Proxy(
+ IRecordInfo* This,
+ ULONG *pcNames,
+ BSTR *rgBstrNames);
+void __RPC_STUB IRecordInfo_GetFieldNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IRecordInfo_IsMatchingType_Proxy(
+ IRecordInfo* This,
+ IRecordInfo *pRecordInfo);
+void __RPC_STUB IRecordInfo_IsMatchingType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+PVOID STDMETHODCALLTYPE IRecordInfo_RecordCreate_Proxy(
+ IRecordInfo* This);
+void __RPC_STUB IRecordInfo_RecordCreate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordCreateCopy_Proxy(
+ IRecordInfo* This,
+ PVOID pvSource,
+ PVOID *ppvDest);
+void __RPC_STUB IRecordInfo_RecordCreateCopy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRecordInfo_RecordDestroy_Proxy(
+ IRecordInfo* This,
+ PVOID pvRecord);
+void __RPC_STUB IRecordInfo_RecordDestroy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRecordInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeInfo interface
+ */
+#ifndef __ICreateTypeInfo_INTERFACE_DEFINED__
+#define __ICreateTypeInfo_INTERFACE_DEFINED__
+
+typedef ICreateTypeInfo *LPCREATETYPEINFO;
+DEFINE_GUID(IID_ICreateTypeInfo, 0x00020405, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetGuid(
+ REFGUID guid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTypeFlags(
+ UINT uTypeFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDocString(
+ LPOLESTR pStrDoc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpContext(
+ DWORD dwHelpContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVersion(
+ WORD wMajorVerNum,
+ WORD wMinorVerNum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddRefTypeInfo(
+ ITypeInfo *pTInfo,
+ HREFTYPE *phRefType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddFuncDesc(
+ UINT index,
+ FUNCDESC *pFuncDesc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddImplType(
+ UINT index,
+ HREFTYPE hRefType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetImplTypeFlags(
+ UINT index,
+ INT implTypeFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetAlignment(
+ WORD cbAlignment) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSchema(
+ LPOLESTR pStrSchema) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddVarDesc(
+ UINT index,
+ VARDESC *pVarDesc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFuncAndParamNames(
+ UINT index,
+ LPOLESTR *rgszNames,
+ UINT cNames) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVarName(
+ UINT index,
+ LPOLESTR szName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTypeDescAlias(
+ TYPEDESC *pTDescAlias) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DefineFuncAsDllEntry(
+ UINT index,
+ LPOLESTR szDllName,
+ LPOLESTR szProcName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFuncDocString(
+ UINT index,
+ LPOLESTR szDocString) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVarDocString(
+ UINT index,
+ LPOLESTR szDocString) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFuncHelpContext(
+ UINT index,
+ DWORD dwHelpContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVarHelpContext(
+ UINT index,
+ DWORD dwHelpContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMops(
+ UINT index,
+ BSTR bstrMops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTypeIdldesc(
+ IDLDESC *pIdlDesc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LayOut(
+ ) = 0;
+
+};
+#else
+typedef struct ICreateTypeInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICreateTypeInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICreateTypeInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICreateTypeInfo* This);
+
+ /*** ICreateTypeInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetGuid)(
+ ICreateTypeInfo* This,
+ REFGUID guid);
+
+ HRESULT (STDMETHODCALLTYPE *SetTypeFlags)(
+ ICreateTypeInfo* This,
+ UINT uTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SetDocString)(
+ ICreateTypeInfo* This,
+ LPOLESTR pStrDoc);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+ ICreateTypeInfo* This,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetVersion)(
+ ICreateTypeInfo* This,
+ WORD wMajorVerNum,
+ WORD wMinorVerNum);
+
+ HRESULT (STDMETHODCALLTYPE *AddRefTypeInfo)(
+ ICreateTypeInfo* This,
+ ITypeInfo *pTInfo,
+ HREFTYPE *phRefType);
+
+ HRESULT (STDMETHODCALLTYPE *AddFuncDesc)(
+ ICreateTypeInfo* This,
+ UINT index,
+ FUNCDESC *pFuncDesc);
+
+ HRESULT (STDMETHODCALLTYPE *AddImplType)(
+ ICreateTypeInfo* This,
+ UINT index,
+ HREFTYPE hRefType);
+
+ HRESULT (STDMETHODCALLTYPE *SetImplTypeFlags)(
+ ICreateTypeInfo* This,
+ UINT index,
+ INT implTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SetAlignment)(
+ ICreateTypeInfo* This,
+ WORD cbAlignment);
+
+ HRESULT (STDMETHODCALLTYPE *SetSchema)(
+ ICreateTypeInfo* This,
+ LPOLESTR pStrSchema);
+
+ HRESULT (STDMETHODCALLTYPE *AddVarDesc)(
+ ICreateTypeInfo* This,
+ UINT index,
+ VARDESC *pVarDesc);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncAndParamNames)(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR *rgszNames,
+ UINT cNames);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarName)(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szName);
+
+ HRESULT (STDMETHODCALLTYPE *SetTypeDescAlias)(
+ ICreateTypeInfo* This,
+ TYPEDESC *pTDescAlias);
+
+ HRESULT (STDMETHODCALLTYPE *DefineFuncAsDllEntry)(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szDllName,
+ LPOLESTR szProcName);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncDocString)(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szDocString);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarDocString)(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szDocString);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncHelpContext)(
+ ICreateTypeInfo* This,
+ UINT index,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarHelpContext)(
+ ICreateTypeInfo* This,
+ UINT index,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetMops)(
+ ICreateTypeInfo* This,
+ UINT index,
+ BSTR bstrMops);
+
+ HRESULT (STDMETHODCALLTYPE *SetTypeIdldesc)(
+ ICreateTypeInfo* This,
+ IDLDESC *pIdlDesc);
+
+ HRESULT (STDMETHODCALLTYPE *LayOut)(
+ ICreateTypeInfo* This);
+
+ END_INTERFACE
+} ICreateTypeInfoVtbl;
+interface ICreateTypeInfo {
+ CONST_VTBL ICreateTypeInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeInfo methods ***/
+#define ICreateTypeInfo_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeInfo_SetTypeFlags(This,uTypeFlags) (This)->lpVtbl->SetTypeFlags(This,uTypeFlags)
+#define ICreateTypeInfo_SetDocString(This,pStrDoc) (This)->lpVtbl->SetDocString(This,pStrDoc)
+#define ICreateTypeInfo_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeInfo_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeInfo_AddRefTypeInfo(This,pTInfo,phRefType) (This)->lpVtbl->AddRefTypeInfo(This,pTInfo,phRefType)
+#define ICreateTypeInfo_AddFuncDesc(This,index,pFuncDesc) (This)->lpVtbl->AddFuncDesc(This,index,pFuncDesc)
+#define ICreateTypeInfo_AddImplType(This,index,hRefType) (This)->lpVtbl->AddImplType(This,index,hRefType)
+#define ICreateTypeInfo_SetImplTypeFlags(This,index,implTypeFlags) (This)->lpVtbl->SetImplTypeFlags(This,index,implTypeFlags)
+#define ICreateTypeInfo_SetAlignment(This,cbAlignment) (This)->lpVtbl->SetAlignment(This,cbAlignment)
+#define ICreateTypeInfo_SetSchema(This,pStrSchema) (This)->lpVtbl->SetSchema(This,pStrSchema)
+#define ICreateTypeInfo_AddVarDesc(This,index,pVarDesc) (This)->lpVtbl->AddVarDesc(This,index,pVarDesc)
+#define ICreateTypeInfo_SetFuncAndParamNames(This,index,rgszNames,cNames) (This)->lpVtbl->SetFuncAndParamNames(This,index,rgszNames,cNames)
+#define ICreateTypeInfo_SetVarName(This,index,szName) (This)->lpVtbl->SetVarName(This,index,szName)
+#define ICreateTypeInfo_SetTypeDescAlias(This,pTDescAlias) (This)->lpVtbl->SetTypeDescAlias(This,pTDescAlias)
+#define ICreateTypeInfo_DefineFuncAsDllEntry(This,index,szDllName,szProcName) (This)->lpVtbl->DefineFuncAsDllEntry(This,index,szDllName,szProcName)
+#define ICreateTypeInfo_SetFuncDocString(This,index,szDocString) (This)->lpVtbl->SetFuncDocString(This,index,szDocString)
+#define ICreateTypeInfo_SetVarDocString(This,index,szDocString) (This)->lpVtbl->SetVarDocString(This,index,szDocString)
+#define ICreateTypeInfo_SetFuncHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetFuncHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo_SetVarHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetVarHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo_SetMops(This,index,bstrMops) (This)->lpVtbl->SetMops(This,index,bstrMops)
+#define ICreateTypeInfo_SetTypeIdldesc(This,pIdlDesc) (This)->lpVtbl->SetTypeIdldesc(This,pIdlDesc)
+#define ICreateTypeInfo_LayOut(This) (This)->lpVtbl->LayOut(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetGuid_Proxy(
+ ICreateTypeInfo* This,
+ REFGUID guid);
+void __RPC_STUB ICreateTypeInfo_SetGuid_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetTypeFlags_Proxy(
+ ICreateTypeInfo* This,
+ UINT uTypeFlags);
+void __RPC_STUB ICreateTypeInfo_SetTypeFlags_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetDocString_Proxy(
+ ICreateTypeInfo* This,
+ LPOLESTR pStrDoc);
+void __RPC_STUB ICreateTypeInfo_SetDocString_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetHelpContext_Proxy(
+ ICreateTypeInfo* This,
+ DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeInfo_SetHelpContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVersion_Proxy(
+ ICreateTypeInfo* This,
+ WORD wMajorVerNum,
+ WORD wMinorVerNum);
+void __RPC_STUB ICreateTypeInfo_SetVersion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddRefTypeInfo_Proxy(
+ ICreateTypeInfo* This,
+ ITypeInfo *pTInfo,
+ HREFTYPE *phRefType);
+void __RPC_STUB ICreateTypeInfo_AddRefTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddFuncDesc_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ FUNCDESC *pFuncDesc);
+void __RPC_STUB ICreateTypeInfo_AddFuncDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddImplType_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ HREFTYPE hRefType);
+void __RPC_STUB ICreateTypeInfo_AddImplType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetImplTypeFlags_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ INT implTypeFlags);
+void __RPC_STUB ICreateTypeInfo_SetImplTypeFlags_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetAlignment_Proxy(
+ ICreateTypeInfo* This,
+ WORD cbAlignment);
+void __RPC_STUB ICreateTypeInfo_SetAlignment_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetSchema_Proxy(
+ ICreateTypeInfo* This,
+ LPOLESTR pStrSchema);
+void __RPC_STUB ICreateTypeInfo_SetSchema_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_AddVarDesc_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ VARDESC *pVarDesc);
+void __RPC_STUB ICreateTypeInfo_AddVarDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetFuncAndParamNames_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR *rgszNames,
+ UINT cNames);
+void __RPC_STUB ICreateTypeInfo_SetFuncAndParamNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVarName_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szName);
+void __RPC_STUB ICreateTypeInfo_SetVarName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetTypeDescAlias_Proxy(
+ ICreateTypeInfo* This,
+ TYPEDESC *pTDescAlias);
+void __RPC_STUB ICreateTypeInfo_SetTypeDescAlias_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_DefineFuncAsDllEntry_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szDllName,
+ LPOLESTR szProcName);
+void __RPC_STUB ICreateTypeInfo_DefineFuncAsDllEntry_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetFuncDocString_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szDocString);
+void __RPC_STUB ICreateTypeInfo_SetFuncDocString_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVarDocString_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ LPOLESTR szDocString);
+void __RPC_STUB ICreateTypeInfo_SetVarDocString_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetFuncHelpContext_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeInfo_SetFuncHelpContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetVarHelpContext_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeInfo_SetVarHelpContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetMops_Proxy(
+ ICreateTypeInfo* This,
+ UINT index,
+ BSTR bstrMops);
+void __RPC_STUB ICreateTypeInfo_SetMops_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_SetTypeIdldesc_Proxy(
+ ICreateTypeInfo* This,
+ IDLDESC *pIdlDesc);
+void __RPC_STUB ICreateTypeInfo_SetTypeIdldesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo_LayOut_Proxy(
+ ICreateTypeInfo* This);
+void __RPC_STUB ICreateTypeInfo_LayOut_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICreateTypeInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeInfo2 interface
+ */
+#ifndef __ICreateTypeInfo2_INTERFACE_DEFINED__
+#define __ICreateTypeInfo2_INTERFACE_DEFINED__
+
+typedef ICreateTypeInfo2 *LPCREATETYPEINFO2;
+DEFINE_GUID(IID_ICreateTypeInfo2, 0x0002040e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeInfo2 : public ICreateTypeInfo
+{
+ virtual HRESULT STDMETHODCALLTYPE DeleteFuncDesc(
+ UINT index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeleteFuncDescByMemId(
+ MEMBERID memid,
+ INVOKEKIND invKind) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeleteVarDesc(
+ UINT index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeleteVarDescByMemId(
+ MEMBERID memid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeleteImplType(
+ UINT index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCustData(
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFuncCustData(
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetParamCustData(
+ UINT indexFunc,
+ UINT indexParam,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVarCustData(
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetImplTypeCustData(
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpStringContext(
+ ULONG dwHelpStringContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFuncHelpStringContext(
+ UINT index,
+ ULONG dwHelpStringContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVarHelpStringContext(
+ UINT index,
+ ULONG dwHelpStringContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Invalidate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetName(
+ LPOLESTR szName) = 0;
+
+};
+#else
+typedef struct ICreateTypeInfo2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICreateTypeInfo2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICreateTypeInfo2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICreateTypeInfo2* This);
+
+ /*** ICreateTypeInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetGuid)(
+ ICreateTypeInfo2* This,
+ REFGUID guid);
+
+ HRESULT (STDMETHODCALLTYPE *SetTypeFlags)(
+ ICreateTypeInfo2* This,
+ UINT uTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SetDocString)(
+ ICreateTypeInfo2* This,
+ LPOLESTR pStrDoc);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+ ICreateTypeInfo2* This,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetVersion)(
+ ICreateTypeInfo2* This,
+ WORD wMajorVerNum,
+ WORD wMinorVerNum);
+
+ HRESULT (STDMETHODCALLTYPE *AddRefTypeInfo)(
+ ICreateTypeInfo2* This,
+ ITypeInfo *pTInfo,
+ HREFTYPE *phRefType);
+
+ HRESULT (STDMETHODCALLTYPE *AddFuncDesc)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ FUNCDESC *pFuncDesc);
+
+ HRESULT (STDMETHODCALLTYPE *AddImplType)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ HREFTYPE hRefType);
+
+ HRESULT (STDMETHODCALLTYPE *SetImplTypeFlags)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ INT implTypeFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SetAlignment)(
+ ICreateTypeInfo2* This,
+ WORD cbAlignment);
+
+ HRESULT (STDMETHODCALLTYPE *SetSchema)(
+ ICreateTypeInfo2* This,
+ LPOLESTR pStrSchema);
+
+ HRESULT (STDMETHODCALLTYPE *AddVarDesc)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ VARDESC *pVarDesc);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncAndParamNames)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ LPOLESTR *rgszNames,
+ UINT cNames);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarName)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ LPOLESTR szName);
+
+ HRESULT (STDMETHODCALLTYPE *SetTypeDescAlias)(
+ ICreateTypeInfo2* This,
+ TYPEDESC *pTDescAlias);
+
+ HRESULT (STDMETHODCALLTYPE *DefineFuncAsDllEntry)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ LPOLESTR szDllName,
+ LPOLESTR szProcName);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncDocString)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ LPOLESTR szDocString);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarDocString)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ LPOLESTR szDocString);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncHelpContext)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarHelpContext)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetMops)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ BSTR bstrMops);
+
+ HRESULT (STDMETHODCALLTYPE *SetTypeIdldesc)(
+ ICreateTypeInfo2* This,
+ IDLDESC *pIdlDesc);
+
+ HRESULT (STDMETHODCALLTYPE *LayOut)(
+ ICreateTypeInfo2* This);
+
+ /*** ICreateTypeInfo2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *DeleteFuncDesc)(
+ ICreateTypeInfo2* This,
+ UINT index);
+
+ HRESULT (STDMETHODCALLTYPE *DeleteFuncDescByMemId)(
+ ICreateTypeInfo2* This,
+ MEMBERID memid,
+ INVOKEKIND invKind);
+
+ HRESULT (STDMETHODCALLTYPE *DeleteVarDesc)(
+ ICreateTypeInfo2* This,
+ UINT index);
+
+ HRESULT (STDMETHODCALLTYPE *DeleteVarDescByMemId)(
+ ICreateTypeInfo2* This,
+ MEMBERID memid);
+
+ HRESULT (STDMETHODCALLTYPE *DeleteImplType)(
+ ICreateTypeInfo2* This,
+ UINT index);
+
+ HRESULT (STDMETHODCALLTYPE *SetCustData)(
+ ICreateTypeInfo2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncCustData)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *SetParamCustData)(
+ ICreateTypeInfo2* This,
+ UINT indexFunc,
+ UINT indexParam,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarCustData)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *SetImplTypeCustData)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpStringContext)(
+ ICreateTypeInfo2* This,
+ ULONG dwHelpStringContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetFuncHelpStringContext)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ ULONG dwHelpStringContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetVarHelpStringContext)(
+ ICreateTypeInfo2* This,
+ UINT index,
+ ULONG dwHelpStringContext);
+
+ HRESULT (STDMETHODCALLTYPE *Invalidate)(
+ ICreateTypeInfo2* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetName)(
+ ICreateTypeInfo2* This,
+ LPOLESTR szName);
+
+ END_INTERFACE
+} ICreateTypeInfo2Vtbl;
+interface ICreateTypeInfo2 {
+ CONST_VTBL ICreateTypeInfo2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeInfo2_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeInfo methods ***/
+#define ICreateTypeInfo2_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeInfo2_SetTypeFlags(This,uTypeFlags) (This)->lpVtbl->SetTypeFlags(This,uTypeFlags)
+#define ICreateTypeInfo2_SetDocString(This,pStrDoc) (This)->lpVtbl->SetDocString(This,pStrDoc)
+#define ICreateTypeInfo2_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeInfo2_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeInfo2_AddRefTypeInfo(This,pTInfo,phRefType) (This)->lpVtbl->AddRefTypeInfo(This,pTInfo,phRefType)
+#define ICreateTypeInfo2_AddFuncDesc(This,index,pFuncDesc) (This)->lpVtbl->AddFuncDesc(This,index,pFuncDesc)
+#define ICreateTypeInfo2_AddImplType(This,index,hRefType) (This)->lpVtbl->AddImplType(This,index,hRefType)
+#define ICreateTypeInfo2_SetImplTypeFlags(This,index,implTypeFlags) (This)->lpVtbl->SetImplTypeFlags(This,index,implTypeFlags)
+#define ICreateTypeInfo2_SetAlignment(This,cbAlignment) (This)->lpVtbl->SetAlignment(This,cbAlignment)
+#define ICreateTypeInfo2_SetSchema(This,pStrSchema) (This)->lpVtbl->SetSchema(This,pStrSchema)
+#define ICreateTypeInfo2_AddVarDesc(This,index,pVarDesc) (This)->lpVtbl->AddVarDesc(This,index,pVarDesc)
+#define ICreateTypeInfo2_SetFuncAndParamNames(This,index,rgszNames,cNames) (This)->lpVtbl->SetFuncAndParamNames(This,index,rgszNames,cNames)
+#define ICreateTypeInfo2_SetVarName(This,index,szName) (This)->lpVtbl->SetVarName(This,index,szName)
+#define ICreateTypeInfo2_SetTypeDescAlias(This,pTDescAlias) (This)->lpVtbl->SetTypeDescAlias(This,pTDescAlias)
+#define ICreateTypeInfo2_DefineFuncAsDllEntry(This,index,szDllName,szProcName) (This)->lpVtbl->DefineFuncAsDllEntry(This,index,szDllName,szProcName)
+#define ICreateTypeInfo2_SetFuncDocString(This,index,szDocString) (This)->lpVtbl->SetFuncDocString(This,index,szDocString)
+#define ICreateTypeInfo2_SetVarDocString(This,index,szDocString) (This)->lpVtbl->SetVarDocString(This,index,szDocString)
+#define ICreateTypeInfo2_SetFuncHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetFuncHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo2_SetVarHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetVarHelpContext(This,index,dwHelpContext)
+#define ICreateTypeInfo2_SetMops(This,index,bstrMops) (This)->lpVtbl->SetMops(This,index,bstrMops)
+#define ICreateTypeInfo2_SetTypeIdldesc(This,pIdlDesc) (This)->lpVtbl->SetTypeIdldesc(This,pIdlDesc)
+#define ICreateTypeInfo2_LayOut(This) (This)->lpVtbl->LayOut(This)
+/*** ICreateTypeInfo2 methods ***/
+#define ICreateTypeInfo2_DeleteFuncDesc(This,index) (This)->lpVtbl->DeleteFuncDesc(This,index)
+#define ICreateTypeInfo2_DeleteFuncDescByMemId(This,memid,invKind) (This)->lpVtbl->DeleteFuncDescByMemId(This,memid,invKind)
+#define ICreateTypeInfo2_DeleteVarDesc(This,index) (This)->lpVtbl->DeleteVarDesc(This,index)
+#define ICreateTypeInfo2_DeleteVarDescByMemId(This,memid) (This)->lpVtbl->DeleteVarDescByMemId(This,memid)
+#define ICreateTypeInfo2_DeleteImplType(This,index) (This)->lpVtbl->DeleteImplType(This,index)
+#define ICreateTypeInfo2_SetCustData(This,guid,pVarVal) (This)->lpVtbl->SetCustData(This,guid,pVarVal)
+#define ICreateTypeInfo2_SetFuncCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetFuncCustData(This,index,guid,pVarVal)
+#define ICreateTypeInfo2_SetParamCustData(This,indexFunc,indexParam,guid,pVarVal) (This)->lpVtbl->SetParamCustData(This,indexFunc,indexParam,guid,pVarVal)
+#define ICreateTypeInfo2_SetVarCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetVarCustData(This,index,guid,pVarVal)
+#define ICreateTypeInfo2_SetImplTypeCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetImplTypeCustData(This,index,guid,pVarVal)
+#define ICreateTypeInfo2_SetHelpStringContext(This,dwHelpStringContext) (This)->lpVtbl->SetHelpStringContext(This,dwHelpStringContext)
+#define ICreateTypeInfo2_SetFuncHelpStringContext(This,index,dwHelpStringContext) (This)->lpVtbl->SetFuncHelpStringContext(This,index,dwHelpStringContext)
+#define ICreateTypeInfo2_SetVarHelpStringContext(This,index,dwHelpStringContext) (This)->lpVtbl->SetVarHelpStringContext(This,index,dwHelpStringContext)
+#define ICreateTypeInfo2_Invalidate(This) (This)->lpVtbl->Invalidate(This)
+#define ICreateTypeInfo2_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteFuncDesc_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index);
+void __RPC_STUB ICreateTypeInfo2_DeleteFuncDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteFuncDescByMemId_Proxy(
+ ICreateTypeInfo2* This,
+ MEMBERID memid,
+ INVOKEKIND invKind);
+void __RPC_STUB ICreateTypeInfo2_DeleteFuncDescByMemId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteVarDesc_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index);
+void __RPC_STUB ICreateTypeInfo2_DeleteVarDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteVarDescByMemId_Proxy(
+ ICreateTypeInfo2* This,
+ MEMBERID memid);
+void __RPC_STUB ICreateTypeInfo2_DeleteVarDescByMemId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_DeleteImplType_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index);
+void __RPC_STUB ICreateTypeInfo2_DeleteImplType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetCustData_Proxy(
+ ICreateTypeInfo2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetFuncCustData_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetFuncCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetParamCustData_Proxy(
+ ICreateTypeInfo2* This,
+ UINT indexFunc,
+ UINT indexParam,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetParamCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetVarCustData_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetVarCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetImplTypeCustData_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeInfo2_SetImplTypeCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetHelpStringContext_Proxy(
+ ICreateTypeInfo2* This,
+ ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeInfo2_SetHelpStringContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetFuncHelpStringContext_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index,
+ ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeInfo2_SetFuncHelpStringContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetVarHelpStringContext_Proxy(
+ ICreateTypeInfo2* This,
+ UINT index,
+ ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeInfo2_SetVarHelpStringContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_Invalidate_Proxy(
+ ICreateTypeInfo2* This);
+void __RPC_STUB ICreateTypeInfo2_Invalidate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeInfo2_SetName_Proxy(
+ ICreateTypeInfo2* This,
+ LPOLESTR szName);
+void __RPC_STUB ICreateTypeInfo2_SetName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICreateTypeInfo2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeLib interface
+ */
+#ifndef __ICreateTypeLib_INTERFACE_DEFINED__
+#define __ICreateTypeLib_INTERFACE_DEFINED__
+
+typedef ICreateTypeLib *LPCREATETYPELIB;
+DEFINE_GUID(IID_ICreateTypeLib, 0x00020406, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeLib : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateTypeInfo(
+ LPOLESTR szName,
+ TYPEKIND tkind,
+ ICreateTypeInfo **ppCTInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetName(
+ LPOLESTR szName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVersion(
+ WORD wMajorVerNum,
+ WORD wMinorVerNum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetGuid(
+ REFGUID guid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDocString(
+ LPOLESTR szDoc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpFileName(
+ LPOLESTR szHelpFileName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpContext(
+ DWORD dwHelpContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetLcid(
+ LCID lcid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetLibFlags(
+ UINT uLibFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SaveAllChanges(
+ ) = 0;
+
+};
+#else
+typedef struct ICreateTypeLibVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICreateTypeLib* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICreateTypeLib* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICreateTypeLib* This);
+
+ /*** ICreateTypeLib methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateTypeInfo)(
+ ICreateTypeLib* This,
+ LPOLESTR szName,
+ TYPEKIND tkind,
+ ICreateTypeInfo **ppCTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *SetName)(
+ ICreateTypeLib* This,
+ LPOLESTR szName);
+
+ HRESULT (STDMETHODCALLTYPE *SetVersion)(
+ ICreateTypeLib* This,
+ WORD wMajorVerNum,
+ WORD wMinorVerNum);
+
+ HRESULT (STDMETHODCALLTYPE *SetGuid)(
+ ICreateTypeLib* This,
+ REFGUID guid);
+
+ HRESULT (STDMETHODCALLTYPE *SetDocString)(
+ ICreateTypeLib* This,
+ LPOLESTR szDoc);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpFileName)(
+ ICreateTypeLib* This,
+ LPOLESTR szHelpFileName);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+ ICreateTypeLib* This,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetLcid)(
+ ICreateTypeLib* This,
+ LCID lcid);
+
+ HRESULT (STDMETHODCALLTYPE *SetLibFlags)(
+ ICreateTypeLib* This,
+ UINT uLibFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SaveAllChanges)(
+ ICreateTypeLib* This);
+
+ END_INTERFACE
+} ICreateTypeLibVtbl;
+interface ICreateTypeLib {
+ CONST_VTBL ICreateTypeLibVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeLib_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeLib_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeLib_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeLib methods ***/
+#define ICreateTypeLib_CreateTypeInfo(This,szName,tkind,ppCTInfo) (This)->lpVtbl->CreateTypeInfo(This,szName,tkind,ppCTInfo)
+#define ICreateTypeLib_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)
+#define ICreateTypeLib_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeLib_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeLib_SetDocString(This,szDoc) (This)->lpVtbl->SetDocString(This,szDoc)
+#define ICreateTypeLib_SetHelpFileName(This,szHelpFileName) (This)->lpVtbl->SetHelpFileName(This,szHelpFileName)
+#define ICreateTypeLib_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeLib_SetLcid(This,lcid) (This)->lpVtbl->SetLcid(This,lcid)
+#define ICreateTypeLib_SetLibFlags(This,uLibFlags) (This)->lpVtbl->SetLibFlags(This,uLibFlags)
+#define ICreateTypeLib_SaveAllChanges(This) (This)->lpVtbl->SaveAllChanges(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_CreateTypeInfo_Proxy(
+ ICreateTypeLib* This,
+ LPOLESTR szName,
+ TYPEKIND tkind,
+ ICreateTypeInfo **ppCTInfo);
+void __RPC_STUB ICreateTypeLib_CreateTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetName_Proxy(
+ ICreateTypeLib* This,
+ LPOLESTR szName);
+void __RPC_STUB ICreateTypeLib_SetName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetVersion_Proxy(
+ ICreateTypeLib* This,
+ WORD wMajorVerNum,
+ WORD wMinorVerNum);
+void __RPC_STUB ICreateTypeLib_SetVersion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetGuid_Proxy(
+ ICreateTypeLib* This,
+ REFGUID guid);
+void __RPC_STUB ICreateTypeLib_SetGuid_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetDocString_Proxy(
+ ICreateTypeLib* This,
+ LPOLESTR szDoc);
+void __RPC_STUB ICreateTypeLib_SetDocString_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetHelpFileName_Proxy(
+ ICreateTypeLib* This,
+ LPOLESTR szHelpFileName);
+void __RPC_STUB ICreateTypeLib_SetHelpFileName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetHelpContext_Proxy(
+ ICreateTypeLib* This,
+ DWORD dwHelpContext);
+void __RPC_STUB ICreateTypeLib_SetHelpContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetLcid_Proxy(
+ ICreateTypeLib* This,
+ LCID lcid);
+void __RPC_STUB ICreateTypeLib_SetLcid_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SetLibFlags_Proxy(
+ ICreateTypeLib* This,
+ UINT uLibFlags);
+void __RPC_STUB ICreateTypeLib_SetLibFlags_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib_SaveAllChanges_Proxy(
+ ICreateTypeLib* This);
+void __RPC_STUB ICreateTypeLib_SaveAllChanges_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICreateTypeLib_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICreateTypeLib2 interface
+ */
+#ifndef __ICreateTypeLib2_INTERFACE_DEFINED__
+#define __ICreateTypeLib2_INTERFACE_DEFINED__
+
+typedef ICreateTypeLib2 *LPCREATETYPELIB2;
+DEFINE_GUID(IID_ICreateTypeLib2, 0x0002040f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICreateTypeLib2 : public ICreateTypeLib
+{
+ virtual HRESULT STDMETHODCALLTYPE DeleteTypeInfo(
+ LPOLESTR szName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCustData(
+ REFGUID guid,
+ VARIANT *pVarVal) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpStringContext(
+ ULONG dwHelpStringContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHelpStringDll(
+ LPOLESTR szFileName) = 0;
+
+};
+#else
+typedef struct ICreateTypeLib2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICreateTypeLib2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICreateTypeLib2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICreateTypeLib2* This);
+
+ /*** ICreateTypeLib methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateTypeInfo)(
+ ICreateTypeLib2* This,
+ LPOLESTR szName,
+ TYPEKIND tkind,
+ ICreateTypeInfo **ppCTInfo);
+
+ HRESULT (STDMETHODCALLTYPE *SetName)(
+ ICreateTypeLib2* This,
+ LPOLESTR szName);
+
+ HRESULT (STDMETHODCALLTYPE *SetVersion)(
+ ICreateTypeLib2* This,
+ WORD wMajorVerNum,
+ WORD wMinorVerNum);
+
+ HRESULT (STDMETHODCALLTYPE *SetGuid)(
+ ICreateTypeLib2* This,
+ REFGUID guid);
+
+ HRESULT (STDMETHODCALLTYPE *SetDocString)(
+ ICreateTypeLib2* This,
+ LPOLESTR szDoc);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpFileName)(
+ ICreateTypeLib2* This,
+ LPOLESTR szHelpFileName);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpContext)(
+ ICreateTypeLib2* This,
+ DWORD dwHelpContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetLcid)(
+ ICreateTypeLib2* This,
+ LCID lcid);
+
+ HRESULT (STDMETHODCALLTYPE *SetLibFlags)(
+ ICreateTypeLib2* This,
+ UINT uLibFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SaveAllChanges)(
+ ICreateTypeLib2* This);
+
+ /*** ICreateTypeLib2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *DeleteTypeInfo)(
+ ICreateTypeLib2* This,
+ LPOLESTR szName);
+
+ HRESULT (STDMETHODCALLTYPE *SetCustData)(
+ ICreateTypeLib2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpStringContext)(
+ ICreateTypeLib2* This,
+ ULONG dwHelpStringContext);
+
+ HRESULT (STDMETHODCALLTYPE *SetHelpStringDll)(
+ ICreateTypeLib2* This,
+ LPOLESTR szFileName);
+
+ END_INTERFACE
+} ICreateTypeLib2Vtbl;
+interface ICreateTypeLib2 {
+ CONST_VTBL ICreateTypeLib2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICreateTypeLib2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICreateTypeLib2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICreateTypeLib2_Release(This) (This)->lpVtbl->Release(This)
+/*** ICreateTypeLib methods ***/
+#define ICreateTypeLib2_CreateTypeInfo(This,szName,tkind,ppCTInfo) (This)->lpVtbl->CreateTypeInfo(This,szName,tkind,ppCTInfo)
+#define ICreateTypeLib2_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)
+#define ICreateTypeLib2_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)
+#define ICreateTypeLib2_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)
+#define ICreateTypeLib2_SetDocString(This,szDoc) (This)->lpVtbl->SetDocString(This,szDoc)
+#define ICreateTypeLib2_SetHelpFileName(This,szHelpFileName) (This)->lpVtbl->SetHelpFileName(This,szHelpFileName)
+#define ICreateTypeLib2_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)
+#define ICreateTypeLib2_SetLcid(This,lcid) (This)->lpVtbl->SetLcid(This,lcid)
+#define ICreateTypeLib2_SetLibFlags(This,uLibFlags) (This)->lpVtbl->SetLibFlags(This,uLibFlags)
+#define ICreateTypeLib2_SaveAllChanges(This) (This)->lpVtbl->SaveAllChanges(This)
+/*** ICreateTypeLib2 methods ***/
+#define ICreateTypeLib2_DeleteTypeInfo(This,szName) (This)->lpVtbl->DeleteTypeInfo(This,szName)
+#define ICreateTypeLib2_SetCustData(This,guid,pVarVal) (This)->lpVtbl->SetCustData(This,guid,pVarVal)
+#define ICreateTypeLib2_SetHelpStringContext(This,dwHelpStringContext) (This)->lpVtbl->SetHelpStringContext(This,dwHelpStringContext)
+#define ICreateTypeLib2_SetHelpStringDll(This,szFileName) (This)->lpVtbl->SetHelpStringDll(This,szFileName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_DeleteTypeInfo_Proxy(
+ ICreateTypeLib2* This,
+ LPOLESTR szName);
+void __RPC_STUB ICreateTypeLib2_DeleteTypeInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_SetCustData_Proxy(
+ ICreateTypeLib2* This,
+ REFGUID guid,
+ VARIANT *pVarVal);
+void __RPC_STUB ICreateTypeLib2_SetCustData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_SetHelpStringContext_Proxy(
+ ICreateTypeLib2* This,
+ ULONG dwHelpStringContext);
+void __RPC_STUB ICreateTypeLib2_SetHelpStringContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICreateTypeLib2_SetHelpStringDll_Proxy(
+ ICreateTypeLib2* This,
+ LPOLESTR szFileName);
+void __RPC_STUB ICreateTypeLib2_SetHelpStringDll_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICreateTypeLib2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IErrorLog interface
+ */
+#ifndef __IErrorLog_INTERFACE_DEFINED__
+#define __IErrorLog_INTERFACE_DEFINED__
+
+typedef IErrorLog *LPERRORLOG;
+DEFINE_GUID(IID_IErrorLog, 0x3127ca40, 0x446e, 0x11ce, 0x81,0x35, 0x00,0xaa,0x00,0x4b,0xb8,0x51);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IErrorLog : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE AddError(
+ LPCOLESTR pszPropName,
+ EXCEPINFO *pExcepInfo) = 0;
+
+};
+#else
+typedef struct IErrorLogVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IErrorLog* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IErrorLog* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IErrorLog* This);
+
+ /*** IErrorLog methods ***/
+ HRESULT (STDMETHODCALLTYPE *AddError)(
+ IErrorLog* This,
+ LPCOLESTR pszPropName,
+ EXCEPINFO *pExcepInfo);
+
+ END_INTERFACE
+} IErrorLogVtbl;
+interface IErrorLog {
+ CONST_VTBL IErrorLogVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IErrorLog_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IErrorLog_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IErrorLog_Release(This) (This)->lpVtbl->Release(This)
+/*** IErrorLog methods ***/
+#define IErrorLog_AddError(This,pszPropName,pExcepInfo) (This)->lpVtbl->AddError(This,pszPropName,pExcepInfo)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IErrorLog_AddError_Proxy(
+ IErrorLog* This,
+ LPCOLESTR pszPropName,
+ EXCEPINFO *pExcepInfo);
+void __RPC_STUB IErrorLog_AddError_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IErrorLog_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPropertyBag interface
+ */
+#ifndef __IPropertyBag_INTERFACE_DEFINED__
+#define __IPropertyBag_INTERFACE_DEFINED__
+
+typedef IPropertyBag *LPPROPERTYBAG;
+DEFINE_GUID(IID_IPropertyBag, 0x55272a00, 0x42cb, 0x11ce, 0x81,0x35, 0x00,0xaa,0x00,0x4b,0xb8,0x51);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPropertyBag : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Read(
+ LPCOLESTR pszPropName,
+ VARIANT *pVar,
+ IErrorLog *pErrorLog) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Write(
+ LPCOLESTR pszPropName,
+ VARIANT *pVar) = 0;
+
+};
+#else
+typedef struct IPropertyBagVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPropertyBag* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPropertyBag* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPropertyBag* This);
+
+ /*** IPropertyBag methods ***/
+ HRESULT (STDMETHODCALLTYPE *Read)(
+ IPropertyBag* This,
+ LPCOLESTR pszPropName,
+ VARIANT *pVar,
+ IErrorLog *pErrorLog);
+
+ HRESULT (STDMETHODCALLTYPE *Write)(
+ IPropertyBag* This,
+ LPCOLESTR pszPropName,
+ VARIANT *pVar);
+
+ END_INTERFACE
+} IPropertyBagVtbl;
+interface IPropertyBag {
+ CONST_VTBL IPropertyBagVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPropertyBag_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertyBag methods ***/
+#define IPropertyBag_Read(This,pszPropName,pVar,pErrorLog) (This)->lpVtbl->Read(This,pszPropName,pVar,pErrorLog)
+#define IPropertyBag_Write(This,pszPropName,pVar) (This)->lpVtbl->Write(This,pszPropName,pVar)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPropertyBag_RemoteRead_Proxy(
+ IPropertyBag* This,
+ LPCOLESTR pszPropName,
+ VARIANT *pVar,
+ IErrorLog *pErrorLog,
+ DWORD varType,
+ IUnknown *pUnkObj);
+void __RPC_STUB IPropertyBag_RemoteRead_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyBag_Write_Proxy(
+ IPropertyBag* This,
+ LPCOLESTR pszPropName,
+ VARIANT *pVar);
+void __RPC_STUB IPropertyBag_Write_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IPropertyBag_Read_Proxy(
+ IPropertyBag* This,
+ LPCOLESTR pszPropName,
+ VARIANT *pVar,
+ IErrorLog *pErrorLog);
+HRESULT __RPC_STUB IPropertyBag_Read_Stub(
+ IPropertyBag* This,
+ LPCOLESTR pszPropName,
+ VARIANT *pVar,
+ IErrorLog *pErrorLog,
+ DWORD varType,
+ IUnknown *pUnkObj);
+
+#endif /* __IPropertyBag_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG __RPC_USER VARIANT_UserSize (ULONG *, ULONG, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserMarshal (ULONG *, unsigned char *, VARIANT *);
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
+void __RPC_USER VARIANT_UserFree (ULONG *, VARIANT *);
+ULONG __RPC_USER BSTR_UserSize (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void __RPC_USER BSTR_UserFree (ULONG *, BSTR *);
+ULONG __RPC_USER CLEANLOCALSTORAGE_UserSize (ULONG *, ULONG, CLEANLOCALSTORAGE *);
+unsigned char * __RPC_USER CLEANLOCALSTORAGE_UserMarshal (ULONG *, unsigned char *, CLEANLOCALSTORAGE *);
+unsigned char * __RPC_USER CLEANLOCALSTORAGE_UserUnmarshal(ULONG *, unsigned char *, CLEANLOCALSTORAGE *);
+void __RPC_USER CLEANLOCALSTORAGE_UserFree (ULONG *, CLEANLOCALSTORAGE *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_OAIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl
new file mode 100644
index 00000000..88c134c9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oaidl.idl
@@ -0,0 +1,1651 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "objidl.idl";
+#endif
+
+interface IDispatch;
+interface ITypeInfo;
+interface ITypeLib;
+interface IRecordInfo;
+
+[
+ version(1.0),
+ pointer_default(unique)
+]
+interface IOleAutomationTypes
+{
+
+typedef CY CURRENCY;
+
+/* Safe Array */
+
+typedef struct tagSAFEARRAYBOUND {
+ ULONG cElements;
+ LONG lLbound;
+} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;
+
+typedef [unique] struct _wireVARIANT *wireVARIANT;
+typedef [unique] struct _wireBRECORD *wireBRECORD;
+
+typedef struct _wireSAFEARR_BSTR {
+ ULONG Size;
+ [size_is(Size), ref] wireBSTR *aBstr;
+} SAFEARR_BSTR;
+
+typedef struct _wireSAFEARR_UNKNOWN {
+ ULONG Size;
+ [size_is(Size), ref] IUnknown **apUnknown;
+} SAFEARR_UNKNOWN;
+
+typedef struct _wireSAFEARR_DISPATCH {
+ ULONG Size;
+ [size_is(Size), ref] IDispatch **apDispatch;
+} SAFEARR_DISPATCH;
+
+typedef struct _wireSAFEARR_VARIANT {
+ ULONG Size;
+ [size_is(Size), ref] wireVARIANT *aVariant;
+} SAFEARR_VARIANT;
+
+typedef struct _wireSAFEARR_BRECORD {
+ ULONG Size;
+ [size_is(Size), ref] wireBRECORD *aRecord;
+} SAFEARR_BRECORD;
+
+typedef struct _wireSAFEARR_HAVEIID {
+ ULONG Size;
+ [size_is(Size), ref] IUnknown **apUnknown;
+ IID iid;
+} SAFEARR_HAVEIID;
+
+typedef [v1_enum] enum tagSF_TYPE {
+ SF_ERROR = VT_ERROR,
+ SF_I1 = VT_I1,
+ SF_I2 = VT_I2,
+ SF_I4 = VT_I4,
+ SF_I8 = VT_I8,
+ SF_BSTR = VT_BSTR,
+ SF_UNKNOWN = VT_UNKNOWN,
+ SF_DISPATCH = VT_DISPATCH,
+ SF_VARIANT = VT_VARIANT,
+ SF_RECORD = VT_RECORD,
+ SF_HAVEIID = VT_UNKNOWN|VT_RESERVED,
+} SF_TYPE;
+
+typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
+ case SF_BSTR: SAFEARR_BSTR BstrStr;
+ case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr;
+ case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
+ case SF_VARIANT: SAFEARR_VARIANT VariantStr;
+ case SF_RECORD: SAFEARR_BRECORD RecordStr;
+ case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr;
+ case SF_I1: BYTE_SIZEDARR ByteStr;
+ case SF_I2: WORD_SIZEDARR WordStr;
+ case SF_I4: DWORD_SIZEDARR LongStr;
+ case SF_I8: HYPER_SIZEDARR HyperStr;
+} SAFEARRAYUNION;
+
+typedef [unique] struct _wireSAFEARRAY {
+ USHORT cDims;
+ USHORT fFeatures;
+ ULONG cbElements;
+ ULONG cLocks;
+ SAFEARRAYUNION uArrayStructs;
+ [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
+} *wireSAFEARRAY;
+
+typedef [unique] wireSAFEARRAY *wirePSAFEARRAY;
+
+typedef struct tagSAFEARRAY {
+ USHORT cDims;
+ USHORT fFeatures;
+ ULONG cbElements;
+ ULONG cLocks;
+ PVOID pvData;
+ SAFEARRAYBOUND rgsabound[];
+} SAFEARRAY;
+
+typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;
+
+const USHORT FADF_AUTO = 0x0001;
+const USHORT FADF_STATIC = 0x0002;
+const USHORT FADF_EMBEDDED = 0x0004;
+const USHORT FADF_FIXEDSIZE = 0x0010;
+const USHORT FADF_RECORD = 0x0020;
+const USHORT FADF_HAVEIID = 0x0040;
+const USHORT FADF_HAVEVARTYPE = 0x0080;
+const USHORT FADF_BSTR = 0x0100;
+const USHORT FADF_UNKNOWN = 0x0200;
+const USHORT FADF_DISPATCH = 0x0400;
+const USHORT FADF_VARIANT = 0x0800;
+const USHORT FADF_RESERVED = 0xF008;
+/* Undocumented flags */
+const USHORT FADF_DATADELETED = 0x1000; /* Data in a vector has been deleted */
+const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */
+
+/* Variant */
+
+cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
+cpp_quote("#define __VARIANT_NAME_1 n1")
+cpp_quote("#define __VARIANT_NAME_2 n2")
+cpp_quote("#define __VARIANT_NAME_3 n3")
+cpp_quote("#define __VARIANT_NAME_4 brecVal")
+cpp_quote("#else")
+cpp_quote("#define __tagVARIANT")
+cpp_quote("#define __VARIANT_NAME_1")
+cpp_quote("#define __VARIANT_NAME_2")
+cpp_quote("#define __VARIANT_NAME_3")
+cpp_quote("#define __tagBRECORD")
+cpp_quote("#define __VARIANT_NAME_4")
+cpp_quote("#endif")
+
+typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
+
+struct tagVARIANT {
+ union {
+ struct __tagVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ union {
+ signed char cVal;
+ USHORT uiVal;
+ ULONG ulVal;
+ INT intVal;
+ UINT uintVal;
+ BYTE bVal;
+ SHORT iVal;
+ LONG lVal;
+ FLOAT fltVal;
+ DOUBLE dblVal;
+ VARIANT_BOOL boolVal;
+#if 0 /* illegal in C++ */
+ _VARIANT_BOOL bool;
+#endif
+ SCODE scode;
+ DATE date;
+ BSTR bstrVal;
+ CY cyVal;
+ IUnknown *punkVal;
+ IDispatch *pdispVal;
+ SAFEARRAY *parray;
+ LONGLONG llVal;
+ ULONGLONG ullVal;
+ signed char *pcVal;
+ USHORT *puiVal;
+ ULONG *pulVal;
+ INT *pintVal;
+ UINT *puintVal;
+ BYTE *pbVal;
+ SHORT *piVal;
+ LONG *plVal;
+ FLOAT *pfltVal;
+ DOUBLE *pdblVal;
+ VARIANT_BOOL *pboolVal;
+#if 0
+ _VARIANT_BOOL *pbool;
+#endif
+ SCODE *pscode;
+ DATE *pdate;
+ BSTR *pbstrVal;
+ VARIANT *pvarVal;
+ PVOID byref;
+ CY *pcyVal;
+ DECIMAL *pdecVal;
+ IUnknown **ppunkVal;
+ IDispatch **ppdispVal;
+ SAFEARRAY **pparray;
+ LONGLONG *pllVal;
+ ULONGLONG *pullVal;
+ struct __tagBRECORD {
+ PVOID pvRecord;
+ IRecordInfo *pRecInfo;
+ } __VARIANT_NAME_4;
+ } __VARIANT_NAME_3;
+ } __VARIANT_NAME_2;
+
+ DECIMAL decVal;
+ } __VARIANT_NAME_1;
+};
+
+typedef VARIANT *LPVARIANT;
+typedef VARIANT VARIANTARG;
+typedef VARIANTARG *LPVARIANTARG;
+
+cpp_quote("#if 0")
+typedef const VARIANT *REFVARIANT;
+cpp_quote("#elif !defined(_REFVARIANT_DEFINED)")
+cpp_quote("#define _REFVARIANT_DEFINED")
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define REFVARIANT const VARIANT &")
+cpp_quote("#else")
+cpp_quote("#define REFVARIANT const VARIANT *__MIDL_CONST")
+cpp_quote("#endif")
+cpp_quote("#endif")
+
+struct _wireBRECORD {
+ ULONG fFlags;
+ ULONG clSize;
+ IRecordInfo *pRecInfo;
+ [size_is(clSize)] byte *pRecord;
+};
+
+struct _wireVARIANT {
+ DWORD clSize;
+ DWORD rpcReserved;
+ USHORT vt;
+ USHORT wReserved1;
+ USHORT wReserved2;
+ USHORT wReserved3;
+ [switch_is(vt)] union {
+ [case(VT_EMPTY, VT_NULL)] ;
+ [case(VT_I1)] signed char cVal;
+ [case(VT_UI2)] USHORT uiVal;
+ [case(VT_UI4)] ULONG ulVal;
+ [case(VT_INT)] INT intVal;
+ [case(VT_UINT)] UINT uintVal;
+ [case(VT_UI1)] BYTE bVal;
+ [case(VT_I2)] SHORT iVal;
+ [case(VT_I4)] LONG lVal;
+ [case(VT_R4)] FLOAT fltVal;
+ [case(VT_R8)] DOUBLE dblVal;
+ [case(VT_BOOL)] VARIANT_BOOL boolVal;
+ [case(VT_ERROR)] SCODE scode;
+ [case(VT_DATE)] DATE date;
+ [case(VT_BSTR)] wireBSTR bstrVal;
+ [case(VT_CY)] CY cyVal;
+ [case(VT_DECIMAL)] DECIMAL decVal;
+ [case(VT_UNKNOWN)] IUnknown *punkVal;
+ [case(VT_DISPATCH)] IDispatch *pdispVal;
+ [case(VT_ARRAY)] wireSAFEARRAY parray;
+ [case(VT_I1|VT_BYREF)] signed char *pcVal;
+ [case(VT_UI2|VT_BYREF)] USHORT *puiVal;
+ [case(VT_UI4|VT_BYREF)] ULONG *pulVal;
+ [case(VT_INT|VT_BYREF)] INT *pintVal;
+ [case(VT_UINT|VT_BYREF)] UINT *puintVal;
+ [case(VT_UI1|VT_BYREF)] BYTE *pbVal;
+ [case(VT_I2|VT_BYREF)] SHORT *piVal;
+ [case(VT_I4|VT_BYREF)] LONG *plVal;
+ [case(VT_R4|VT_BYREF)] FLOAT *pfltVal;
+ [case(VT_R8|VT_BYREF)] DOUBLE *pdblVal;
+ [case(VT_BOOL|VT_BYREF)] VARIANT_BOOL *pboolVal;
+ [case(VT_ERROR|VT_BYREF)] SCODE *pscode;
+ [case(VT_DATE|VT_BYREF)] DATE *pdate;
+ [case(VT_BSTR|VT_BYREF)] wireBSTR *pbstrVal;
+ [case(VT_VARIANT|VT_BYREF)] wireVARIANT *pvarVal;
+ [case(VT_CY|VT_BYREF)] CY *pcyVal;
+ [case(VT_DECIMAL|VT_BYREF)] DECIMAL *pdecVal;
+ [case(VT_UNKNOWN|VT_BYREF)] IUnknown **ppunkVal;
+ [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;
+ [case(VT_ARRAY|VT_BYREF)] wireSAFEARRAY *pparray;
+ [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;
+ } DUMMYUNIONNAME;
+};
+
+/* Dispatch */
+
+typedef LONG DISPID;
+typedef DWORD HREFTYPE;
+typedef DISPID MEMBERID;
+
+typedef [v1_enum] enum tagTYPEKIND {
+ TKIND_ENUM = 0,
+ TKIND_RECORD,
+ TKIND_MODULE,
+ TKIND_INTERFACE,
+ TKIND_DISPATCH,
+ TKIND_COCLASS,
+ TKIND_ALIAS,
+ TKIND_UNION,
+ TKIND_MAX
+} TYPEKIND;
+
+typedef struct tagTYPEDESC {
+ [switch_is(vt)] union {
+ [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;
+ [case(VT_CARRAY)] struct tagARRAYDESC *lpadesc;
+ [case(VT_USERDEFINED)] HREFTYPE hreftype;
+ [default] ;
+ } DUMMYUNIONNAME;
+ VARTYPE vt;
+} TYPEDESC;
+
+typedef struct tagARRAYDESC {
+ TYPEDESC tdescElem;
+ USHORT cDims;
+ [size_is(cDims)] SAFEARRAYBOUND rgbounds[];
+} ARRAYDESC;
+
+typedef struct tagPARAMDESCEX {
+ ULONG cBytes;
+ VARIANTARG varDefaultValue;
+} PARAMDESCEX, *LPPARAMDESCEX;
+
+typedef struct tagPARAMDESC {
+ LPPARAMDESCEX pparamdescex;
+ USHORT wParamFlags;
+} PARAMDESC, *LPPARAMDESC;
+
+const USHORT PARAMFLAG_NONE = 0x00;
+const USHORT PARAMFLAG_FIN = 0x01;
+const USHORT PARAMFLAG_FOUT = 0x02;
+const USHORT PARAMFLAG_FLCID = 0x04;
+const USHORT PARAMFLAG_FRETVAL = 0x08;
+const USHORT PARAMFLAG_FOPT = 0x10;
+const USHORT PARAMFLAG_FHASDEFAULT = 0x20;
+const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
+
+typedef struct tagIDLDESC {
+ ULONG_PTR dwReserved;
+ USHORT wIDLFlags;
+} IDLDESC, *LPIDLDESC;
+
+const USHORT IDLFLAG_NONE = PARAMFLAG_NONE;
+const USHORT IDLFLAG_FIN = PARAMFLAG_FIN;
+const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT;
+const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID;
+const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagELEMDESC {
+ TYPEDESC tdesc;
+ PARAMDESC paramdesc;
+} ELEMDESC;
+cpp_quote("#else") /* C/C++ defs */
+cpp_quote("typedef struct tagELEMDESC {")
+cpp_quote(" TYPEDESC tdesc;")
+cpp_quote(" union {")
+cpp_quote(" IDLDESC idldesc;")
+cpp_quote(" PARAMDESC paramdesc;")
+cpp_quote(" } DUMMYUNIONNAME;")
+cpp_quote("} ELEMDESC, *LPELEMDESC;")
+cpp_quote("#endif")
+
+typedef struct tagTYPEATTR {
+ GUID guid;
+ LCID lcid;
+ DWORD dwReserved;
+ MEMBERID memidConstructor;
+ MEMBERID memidDestructor;
+ LPOLESTR lpstrSchema;
+ ULONG cbSizeInstance;
+ TYPEKIND typekind;
+ WORD cFuncs;
+ WORD cVars;
+ WORD cImplTypes;
+ WORD cbSizeVft;
+ WORD cbAlignment;
+ WORD wTypeFlags;
+ WORD wMajorVerNum;
+ WORD wMinorVerNum;
+ TYPEDESC tdescAlias;
+ IDLDESC idldescType;
+} TYPEATTR, *LPTYPEATTR;
+
+typedef struct tagDISPPARAMS {
+ [size_is(cArgs)] VARIANTARG *rgvarg;
+ [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;
+ UINT cArgs;
+ UINT cNamedArgs;
+} DISPPARAMS;
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagEXCEPINFO {
+ WORD wCode;
+ WORD wReserved;
+ BSTR bstrSource;
+ BSTR bstrDescription;
+ BSTR bstrHelpFile;
+ DWORD dwHelpContext;
+ ULONG_PTR pvReserved;
+ ULONG_PTR pfnDeferredFillIn;
+ SCODE scode;
+} EXCEPINFO;
+cpp_quote("#else")
+cpp_quote("typedef struct tagEXCEPINFO {")
+cpp_quote(" WORD wCode;")
+cpp_quote(" WORD wReserved;")
+cpp_quote(" BSTR bstrSource;")
+cpp_quote(" BSTR bstrDescription;")
+cpp_quote(" BSTR bstrHelpFile;")
+cpp_quote(" DWORD dwHelpContext;")
+cpp_quote(" PVOID pvReserved;")
+cpp_quote(" HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
+cpp_quote(" SCODE scode;")
+cpp_quote("} EXCEPINFO, *LPEXCEPINFO;")
+cpp_quote("#endif")
+
+typedef [v1_enum] enum tagCALLCONV {
+ CC_FASTCALL = 0,
+ CC_CDECL = 1,
+ CC_MSCPASCAL,
+ CC_PASCAL = CC_MSCPASCAL,
+ CC_MACPASCAL,
+ CC_STDCALL,
+ CC_FPFASTCALL,
+ CC_SYSCALL,
+ CC_MPWCDECL,
+ CC_MPWPASCAL,
+ CC_MAX
+} CALLCONV;
+
+typedef [v1_enum] enum tagFUNCKIND {
+ FUNC_VIRTUAL,
+ FUNC_PUREVIRTUAL,
+ FUNC_NONVIRTUAL,
+ FUNC_STATIC,
+ FUNC_DISPATCH
+} FUNCKIND;
+
+typedef [v1_enum] enum tagINVOKEKIND {
+ INVOKE_FUNC = 1,
+ INVOKE_PROPERTYGET = 2,
+ INVOKE_PROPERTYPUT = 4,
+ INVOKE_PROPERTYPUTREF = 8
+} INVOKEKIND;
+
+typedef struct tagFUNCDESC {
+ MEMBERID memid;
+ [size_is(cScodes)] SCODE *lprgscode;
+ [size_is(cParams)] ELEMDESC *lprgelemdescParam;
+ FUNCKIND funckind;
+ INVOKEKIND invkind;
+ CALLCONV callconv;
+ SHORT cParams;
+ SHORT cParamsOpt;
+ SHORT oVft;
+ SHORT cScodes;
+ ELEMDESC elemdescFunc;
+ WORD wFuncFlags;
+} FUNCDESC, *LPFUNCDESC;
+
+typedef [v1_enum] enum tagVARKIND {
+ VAR_PERINSTANCE,
+ VAR_STATIC,
+ VAR_CONST,
+ VAR_DISPATCH
+} VARKIND;
+
+const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1;
+const USHORT IMPLTYPEFLAG_FSOURCE = 0x2;
+const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4;
+const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;
+
+typedef struct tagVARDESC {
+ MEMBERID memid;
+ LPOLESTR lpstrSchema;
+ [switch_is(varkind)] union {
+ [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
+ [case(VAR_CONST)] VARIANT *lpvarValue;
+ } DUMMYUNIONNAME;
+ ELEMDESC elemdescVar;
+ WORD wVarFlags;
+ VARKIND varkind;
+} VARDESC, *LPVARDESC;
+
+typedef enum tagTYPEFLAGS {
+ TYPEFLAG_FAPPOBJECT = 0x0001,
+ TYPEFLAG_FCANCREATE = 0x0002,
+ TYPEFLAG_FLICENSED = 0x0004,
+ TYPEFLAG_FPREDECLID = 0x0008,
+ TYPEFLAG_FHIDDEN = 0x0010,
+ TYPEFLAG_FCONTROL = 0x0020,
+ TYPEFLAG_FDUAL = 0x0040,
+ TYPEFLAG_FNONEXTENSIBLE = 0x0080,
+ TYPEFLAG_FOLEAUTOMATION = 0x0100,
+ TYPEFLAG_FRESTRICTED = 0x0200,
+ TYPEFLAG_FAGGREGATABLE = 0x0400,
+ TYPEFLAG_FREPLACEABLE = 0x0800,
+ TYPEFLAG_FDISPATCHABLE = 0x1000,
+ TYPEFLAG_FREVERSEBIND = 0x2000,
+ TYPEFLAG_FPROXY = 0x4000
+} TYPEFLAGS;
+
+typedef enum tagFUNCFLAGS {
+ FUNCFLAG_FRESTRICTED = 0x0001,
+ FUNCFLAG_FSOURCE = 0x0002,
+ FUNCFLAG_FBINDABLE = 0x0004,
+ FUNCFLAG_FREQUESTEDIT = 0x0008,
+ FUNCFLAG_FDISPLAYBIND = 0x0010,
+ FUNCFLAG_FDEFAULTBIND = 0x0020,
+ FUNCFLAG_FHIDDEN = 0x0040,
+ FUNCFLAG_FUSESGETLASTERROR = 0x0080,
+ FUNCFLAG_FDEFAULTCOLLELEM = 0x0100,
+ FUNCFLAG_FUIDEFAULT = 0x0200,
+ FUNCFLAG_FNONBROWSABLE = 0x0400,
+ FUNCFLAG_FREPLACEABLE = 0x0800,
+ FUNCFLAG_FIMMEDIATEBIND = 0x1000
+} FUNCFLAGS;
+
+typedef enum tagVARFLAGS {
+ VARFLAG_FREADONLY = 0x0001,
+ VARFLAG_FSOURCE = 0x0002,
+ VARFLAG_FBINDABLE = 0x0004,
+ VARFLAG_FREQUESTEDIT = 0x0008,
+ VARFLAG_FDISPLAYBIND = 0x0010,
+ VARFLAG_FDEFAULTBIND = 0x0020,
+ VARFLAG_FHIDDEN = 0x0040,
+ VARFLAG_FRESTRICTED = 0x0080,
+ VARFLAG_FDEFAULTCOLLELEM = 0x0100,
+ VARFLAG_FUIDEFAULT = 0x0200,
+ VARFLAG_FNONBROWSABLE = 0x0400,
+ VARFLAG_FREPLACEABLE = 0x0800,
+ VARFLAG_FIMMEDIATEBIND = 0x1000
+} VARFLAGS;
+
+typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
+ IUnknown *pInterface;
+ PVOID pStorage;
+ DWORD flags;
+} CLEANLOCALSTORAGE;
+
+typedef struct tagCUSTDATAITEM {
+ GUID guid;
+ VARIANTARG varValue;
+} CUSTDATAITEM, *LPCUSTDATAITEM;
+
+typedef struct tagCUSTDATA {
+ DWORD cCustData;
+ [size_is(cCustData)] LPCUSTDATAITEM prgCustData;
+} CUSTDATA, *LPCUSTDATA;
+
+} /* interface IOleAutomationTypes */
+
+/******************** INTERFACES ********************/
+
+[
+ object,
+ uuid(00020400-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IDispatch : IUnknown
+{
+ typedef [unique] IDispatch *LPDISPATCH;
+
+ const DISPID DISPID_UNKNOWN = -1;
+ const DISPID DISPID_VALUE = 0;
+ const DISPID DISPID_PROPERTYPUT = -3;
+ const DISPID DISPID_NEWENUM = -4;
+ const DISPID DISPID_EVALUATE = -5;
+ const DISPID DISPID_CONSTRUCTOR = -6;
+ const DISPID DISPID_DESTRUCTOR = -7;
+ const DISPID DISPID_COLLECT = -8;
+
+ HRESULT GetTypeInfoCount(
+ [out] UINT *pctinfo);
+
+ HRESULT GetTypeInfo(
+ [in] UINT iTInfo,
+ [in] LCID lcid,
+ [out] ITypeInfo **ppTInfo);
+
+ HRESULT GetIDsOfNames(
+ [in] REFIID riid,
+ [in, size_is(cNames)] LPOLESTR *rgszNames,
+ [in] UINT cNames,
+ [in] LCID lcid,
+ [out, size_is(cNames)] DISPID *rgDispId);
+
+ [local]
+ HRESULT Invoke(
+ [in] DISPID dispIdMember,
+ [in] REFIID riid,
+ [in] LCID lcid,
+ [in] WORD wFlags,
+ [in, out] DISPPARAMS *pDispParams,
+ [out] VARIANT *pVarResult,
+ [out] EXCEPINFO *pExcepInfo,
+ [out] UINT *puArgErr);
+
+ [call_as(Invoke)]
+ HRESULT RemoteInvoke(
+ [in] DISPID dispIdMember,
+ [in] REFIID riid,
+ [in] LCID lcid,
+ [in] DWORD dwFlags,
+ [in] DISPPARAMS *pDispParams,
+ [out] VARIANT *pVarResult,
+ [out] EXCEPINFO *pExcepInfo,
+ [out] UINT *pArgErr,
+ [in] UINT cVarRef,
+ [in, size_is(cVarRef)] UINT *rgVarRefIdx,
+ [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);
+}
+
+[
+ object,
+ uuid(00020404-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumVARIANT : IUnknown
+{
+ typedef [unique] IEnumVARIANT *LPENUMVARIANT;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] VARIANT *rgVar,
+ [out] ULONG *pCeltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pCeltFetched)]
+ VARIANT *rgVar,
+ [out] ULONG *pCeltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumVARIANT **ppEnum);
+}
+
+[
+ object,
+ uuid(00020403-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ITypeComp : IUnknown
+{
+ typedef [unique] ITypeComp *LPTYPECOMP;
+
+ typedef [v1_enum] enum tagDESCKIND {
+ DESCKIND_NONE = 0,
+ DESCKIND_FUNCDESC,
+ DESCKIND_VARDESC,
+ DESCKIND_TYPECOMP,
+ DESCKIND_IMPLICITAPPOBJ,
+ DESCKIND_MAX
+ } DESCKIND;
+
+ typedef union tagBINDPTR {
+ FUNCDESC *lpfuncdesc;
+ VARDESC *lpvardesc;
+ ITypeComp *lptcomp;
+ } BINDPTR, *LPBINDPTR;
+
+ [local]
+ HRESULT Bind(
+ [in] LPOLESTR szName,
+ [in] ULONG lHashVal,
+ [in] WORD wFlags,
+ [out] ITypeInfo **ppTInfo,
+ [out] DESCKIND *pDescKind,
+ [out] BINDPTR *pBindPtr);
+
+ [call_as(Bind)]
+ HRESULT RemoteBind(
+ [in] LPOLESTR szName,
+ [in] ULONG lHashVal,
+ [in] WORD wFlags,
+ [out] ITypeInfo **ppTInfo,
+ [out] DESCKIND *pDescKind,
+ [out] LPFUNCDESC *ppFuncDesc,
+ [out] LPVARDESC *ppVarDesc,
+ [out] ITypeComp **ppTypeComp,
+ [out] CLEANLOCALSTORAGE *pDummy);
+
+ [local]
+ HRESULT BindType(
+ [in] LPOLESTR szName,
+ [in] ULONG lHashVal,
+ [out] ITypeInfo **ppTInfo,
+ [out] ITypeComp **ppTComp);
+
+ [call_as(BindType)]
+ HRESULT RemoteBindType(
+ [in] LPOLESTR szName,
+ [in] ULONG lHashVal,
+ [out] ITypeInfo **ppTInfo);
+}
+
+[
+ object,
+ uuid(00020401-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ITypeInfo : IUnknown
+{
+ typedef [unique] ITypeInfo *LPTYPEINFO;
+
+ [local]
+ HRESULT GetTypeAttr(
+ [out] TYPEATTR **ppTypeAttr);
+
+ [call_as(GetTypeAttr)]
+ HRESULT RemoteGetTypeAttr(
+ [out] LPTYPEATTR *ppTypeAttr,
+ [out] CLEANLOCALSTORAGE *pDummy);
+
+ HRESULT GetTypeComp(
+ [out] ITypeComp **ppTComp);
+
+ [local]
+ HRESULT GetFuncDesc(
+ [in] UINT index,
+ [out] FUNCDESC **ppFuncDesc);
+
+ [call_as(GetFuncDesc)]
+ HRESULT RemoteGetFuncDesc(
+ [in] UINT index,
+ [out] LPFUNCDESC *ppFuncDesc,
+ [out] CLEANLOCALSTORAGE *pDummy);
+
+ [local]
+ HRESULT GetVarDesc(
+ [in] UINT index,
+ [out] VARDESC **ppVarDesc);
+
+ [call_as(GetVarDesc)]
+ HRESULT RemoteGetVarDesc(
+ [in] UINT index,
+ [out] LPVARDESC *ppVarDesc,
+ [out] CLEANLOCALSTORAGE *pDummy);
+
+ [local]
+ HRESULT GetNames(
+ [in] MEMBERID memid,
+ [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
+ [in] UINT cMaxNames,
+ [out] UINT *pcNames);
+
+ [call_as(GetNames)]
+ HRESULT RemoteGetNames(
+ [in] MEMBERID memid,
+ [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
+ [in] UINT cMaxNames,
+ [out] UINT *pcNames);
+
+ HRESULT GetRefTypeOfImplType(
+ [in] UINT index,
+ [out] HREFTYPE *pRefType);
+
+ HRESULT GetImplTypeFlags(
+ [in] UINT index,
+ [out] INT *pImplTypeFlags);
+
+ [local]
+ HRESULT GetIDsOfNames(
+ [in, size_is(cNames)] LPOLESTR *rgszNames,
+ [in] UINT cNames,
+ [out, size_is(cNames)] MEMBERID *pMemId);
+
+ [call_as(GetIDsOfNames)]
+ HRESULT LocalGetIDsOfNames();
+
+ [local]
+ HRESULT Invoke(
+ [in] PVOID pvInstance,
+ [in] MEMBERID memid,
+ [in] WORD wFlags,
+ [in, out] DISPPARAMS *pDispParams,
+ [out] VARIANT *pVarResult,
+ [out] EXCEPINFO *pExcepInfo,
+ [out] UINT *puArgErr);
+
+ [call_as(Invoke)]
+ HRESULT LocalInvoke();
+
+ [local]
+ HRESULT GetDocumentation(
+ [in] MEMBERID memid,
+ [out] BSTR *pBstrName,
+ [out] BSTR *pBstrDocString,
+ [out] DWORD *pdwHelpContext,
+ [out] BSTR *pBstrHelpFile);
+
+ [call_as(GetDocumentation)]
+ HRESULT RemoteGetDocumentation(
+ [in] MEMBERID memid,
+ [in] DWORD refPtrFlags,
+ [out] BSTR *pBstrName,
+ [out] BSTR *pBstrDocString,
+ [out] DWORD *pdwHelpContext,
+ [out] BSTR *pBstrHelpFile);
+
+ [local]
+ HRESULT GetDllEntry(
+ [in] MEMBERID memid,
+ [in] INVOKEKIND invKind,
+ [out] BSTR *pBstrDllName,
+ [out] BSTR *pBstrName,
+ [out] WORD *pwOrdinal);
+
+ [call_as(GetDllEntry)]
+ HRESULT RemoteGetDllEntry(
+ [in] MEMBERID memid,
+ [in] INVOKEKIND invKind,
+ [in] DWORD refPtrFlags,
+ [out] BSTR *pBstrDllName,
+ [out] BSTR *pBstrName,
+ [out] WORD *pwOrdinal);
+
+ HRESULT GetRefTypeInfo(
+ [in] HREFTYPE hRefType,
+ [out] ITypeInfo **ppTInfo);
+
+ [local]
+ HRESULT AddressOfMember(
+ [in] MEMBERID memid,
+ [in] INVOKEKIND invKind,
+ [out] PVOID *ppv);
+
+ [call_as(AddressOfMember)]
+ HRESULT LocalAddressOfMember();
+
+ [local]
+ HRESULT CreateInstance(
+ [in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] PVOID *ppvObj);
+
+ [call_as(CreateInstance)]
+ HRESULT RemoteCreateInstance(
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppvObj);
+
+ HRESULT GetMops(
+ [in] MEMBERID memid,
+ [out] BSTR *pBstrMops);
+
+ [local]
+ HRESULT GetContainingTypeLib(
+ [out] ITypeLib **ppTLib,
+ [out] UINT *pIndex);
+
+ [call_as(GetContainingTypeLib)]
+ HRESULT RemoteGetContainingTypeLib(
+ [out] ITypeLib **ppTLib,
+ [out] UINT *pIndex);
+
+ [local]
+ void ReleaseTypeAttr(
+ [in] TYPEATTR *pTypeAttr);
+
+ [call_as(ReleaseTypeAttr)]
+ HRESULT LocalReleaseTypeAttr();
+
+ [local]
+ void ReleaseFuncDesc(
+ [in] FUNCDESC *pFuncDesc);
+
+ [call_as(ReleaseFuncDesc)]
+ HRESULT LocalReleaseFuncDesc();
+
+ [local]
+ void ReleaseVarDesc(
+ [in] VARDESC *pVarDesc);
+
+ [call_as(ReleaseVarDesc)]
+ HRESULT LocalReleaseVarDesc();
+}
+
+[
+ object,
+ uuid(00020412-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ITypeInfo2 : ITypeInfo
+{
+ typedef [unique] ITypeInfo2 *LPTYPEINFO2;
+
+ HRESULT GetTypeKind(
+ [out] TYPEKIND *pTypeKind);
+
+ HRESULT GetTypeFlags(
+ [out] ULONG *pTypeFlags);
+
+ HRESULT GetFuncIndexOfMemId(
+ [in] MEMBERID memid,
+ [in] INVOKEKIND invKind,
+ [out] UINT *pFuncIndex);
+
+ HRESULT GetVarIndexOfMemId(
+ [in] MEMBERID memid,
+ [out] UINT *pVarIndex);
+
+ HRESULT GetCustData(
+ [in] REFGUID guid,
+ [out] VARIANT *pVarVal);
+
+ HRESULT GetFuncCustData(
+ [in] UINT index,
+ [in] REFGUID guid,
+ [out] VARIANT *pVarVal);
+
+ HRESULT GetParamCustData(
+ [in] UINT indexFunc,
+ [in] UINT indexParam,
+ [in] REFGUID guid,
+ [out] VARIANT *pVarVal);
+
+ HRESULT GetVarCustData(
+ [in] UINT index,
+ [in] REFGUID guid,
+ [out] VARIANT *pVarVal);
+
+ HRESULT GetImplTypeCustData(
+ [in] UINT index,
+ [in] REFGUID guid,
+ [out] VARIANT *pVarVal);
+
+ [local]
+ HRESULT GetDocumentation2(
+ [in] MEMBERID memid,
+ [in] LCID lcid,
+ [out] BSTR *pbstrHelpString,
+ [out] DWORD *pdwHelpStringContext,
+ [out] BSTR *pbstrHelpStringDll);
+
+ [call_as(GetDocumentation2)]
+ HRESULT RemoteGetDocumentation2(
+ [in] MEMBERID memid,
+ [in] LCID lcid,
+ [in] DWORD refPtrFlags,
+ [out] BSTR *pbstrHelpString,
+ [out] DWORD *pdwHelpStringContext,
+ [out] BSTR *pbstrHelpStringDll);
+
+ HRESULT GetAllCustData(
+ [out] CUSTDATA *pCustData);
+
+ HRESULT GetAllFuncCustData(
+ [in] UINT index,
+ [out] CUSTDATA *pCustData);
+
+ HRESULT GetAllParamCustData(
+ [in] UINT indexFunc,
+ [in] UINT indexParam,
+ [out] CUSTDATA *pCustData);
+
+ HRESULT GetAllVarCustData(
+ [in] UINT index,
+ [out] CUSTDATA *pCustData);
+
+ HRESULT GetAllImplTypeCustData(
+ [in] UINT index,
+ [out] CUSTDATA *pCustData);
+}
+
+[
+ object,
+ uuid(00020402-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ITypeLib : IUnknown
+{
+ typedef [unique] ITypeLib *LPTYPELIB;
+
+ typedef [v1_enum] enum tagSYSKIND {
+ SYS_WIN16 = 0,
+ SYS_WIN32,
+ SYS_MAC,
+ SYS_WIN64
+ } SYSKIND;
+
+ typedef [v1_enum] enum tagLIBFLAGS {
+ LIBFLAG_FRESTRICTED = 0x01,
+ LIBFLAG_FCONTROL = 0x02,
+ LIBFLAG_FHIDDEN = 0x04,
+ LIBFLAG_FHASDISKIMAGE = 0x08
+ } LIBFLAGS;
+
+ typedef struct tagTLIBATTR {
+ GUID guid;
+ LCID lcid;
+ SYSKIND syskind;
+ WORD wMajorVerNum;
+ WORD wMinorVerNum;
+ WORD wLibFlags;
+ } TLIBATTR, *LPTLIBATTR;
+
+ [local]
+ UINT GetTypeInfoCount();
+
+ [call_as(GetTypeInfoCount)]
+ HRESULT RemoteGetTypeInfoCount(
+ [out] UINT *pcTInfo);
+
+ HRESULT GetTypeInfo(
+ [in] UINT index,
+ [out] ITypeInfo **ppTInfo);
+
+ HRESULT GetTypeInfoType(
+ [in] UINT index,
+ [out] TYPEKIND *pTKind);
+
+ HRESULT GetTypeInfoOfGuid(
+ [in] REFGUID guid,
+ [out] ITypeInfo **ppTinfo);
+
+ [local]
+ HRESULT GetLibAttr(
+ [out] TLIBATTR **ppTLibAttr);
+
+ [call_as(GetLibAttr)]
+ HRESULT RemoteGetLibAttr(
+ [out] LPTLIBATTR *ppTLibAttr,
+ [out] CLEANLOCALSTORAGE *pDummy);
+
+ HRESULT GetTypeComp(
+ [out] ITypeComp **ppTComp);
+
+ [local]
+ HRESULT GetDocumentation(
+ [in] INT index,
+ [out] BSTR *pBstrName,
+ [out] BSTR *pBstrDocString,
+ [out] DWORD *pdwHelpContext,
+ [out] BSTR *pBstrHelpFile);
+
+ [call_as(GetDocumentation)]
+ HRESULT RemoteGetDocumentation(
+ [in] INT index,
+ [in] DWORD refPtrFlags,
+ [out] BSTR *pBstrName,
+ [out] BSTR *pBstrDocString,
+ [out] DWORD *pdwHelpContext,
+ [out] BSTR *pBstrHelpFile);
+
+ [local]
+ HRESULT IsName(
+ [in, out] LPOLESTR szNameBuf,
+ [in] ULONG lHashVal,
+ [out] BOOL *pfName);
+
+ [call_as(IsName)]
+ HRESULT RemoteIsName(
+ [in] LPOLESTR szNameBuf,
+ [in] ULONG lHashVal,
+ [out] BOOL *pfName,
+ [out] BSTR *pBstrLibName);
+
+ [local]
+ HRESULT FindName(
+ [in, out] LPOLESTR szNameBuf,
+ [in] ULONG lHashVal,
+ [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
+ [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
+ [in, out] USHORT *pcFound);
+
+ [call_as(FindName)]
+ HRESULT RemoteFindName(
+ [in] LPOLESTR szNameBuf,
+ [in] ULONG lHashVal,
+ [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
+ [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
+ [in, out] USHORT *pcFound,
+ [out] BSTR *pBstrLibName);
+
+ [local]
+ void ReleaseTLibAttr(
+ [in] TLIBATTR *pTLibAttr);
+
+ [call_as(ReleaseTLibAttr)]
+ HRESULT LocalReleaseTLibAttr();
+}
+
+[
+ object,
+ uuid(00020411-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ITypeLib2 : ITypeLib
+{
+ typedef [unique] ITypeLib2 *LPTYPELIB2;
+
+ HRESULT GetCustData(
+ [in] REFGUID guid,
+ [out] VARIANT *pVarVal);
+
+ [local]
+ HRESULT GetLibStatistics(
+ [out] ULONG *pcUniqueNames,
+ [out] ULONG *pcchUniqueNames);
+
+ [call_as(GetLibStatistics)]
+ HRESULT RemoteGetLibStatistics(
+ [out] ULONG *pcUniqueNames,
+ [out] ULONG *pcchUniqueNames);
+
+ [local]
+ HRESULT GetDocumentation2(
+ [in] INT index,
+ [in] LCID lcid,
+ [out] BSTR *pbstrHelpString,
+ [out] DWORD *pdwHelpStringContext,
+ [out] BSTR *pbstrHelpStringDll);
+
+ [call_as(GetDocumentation2)]
+ HRESULT RemoteGetDocumentation2(
+ [in] INT index,
+ [in] LCID lcid,
+ [in] DWORD refPtrFlags,
+ [out] BSTR *pbstrHelpString,
+ [out] DWORD *pdwHelpStringContext,
+ [out] BSTR *pbstrHelpStringDll);
+
+ HRESULT GetAllCustData(
+ [out] CUSTDATA *pCustData);
+}
+
+[
+ local,
+ object,
+ uuid(00020410-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ITypeChangeEvents : IUnknown
+{
+ typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS;
+
+ typedef enum tagCHANGEKIND {
+ CHANGEKIND_ADDMEMBER,
+ CHANGEKIND_DELETEMEMBER,
+ CHANGEKIND_SETNAMES,
+ CHANGEKIND_SETDOCUMENTATION,
+ CHANGEKIND_GENERAL,
+ CHANGEKIND_INVALIDATE,
+ CHANGEKIND_CHANGEFAILED,
+ CHANGEKIND_MAX
+ } CHANGEKIND;
+
+ HRESULT RequestTypeChange(
+ [in] CHANGEKIND changeKind,
+ [in] ITypeInfo *pTInfoBefore,
+ [in] LPOLESTR pStrName,
+ [out] INT *pfCancel);
+
+ HRESULT AfterTypeChange(
+ [in] CHANGEKIND changeKind,
+ [in] ITypeInfo *pTInfoAfter,
+ [in] LPOLESTR pStrName);
+}
+
+[
+ object,
+ uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
+ pointer_default(unique)
+]
+interface IErrorInfo : IUnknown
+{
+ typedef [unique] IErrorInfo *LPERRORINFO;
+
+ HRESULT GetGUID(
+ [out] GUID *pGUID);
+
+ HRESULT GetSource(
+ [out] BSTR *pBstrSource);
+
+ HRESULT GetDescription(
+ [out] BSTR *pBstrDescription);
+
+ HRESULT GetHelpFile(
+ [out] BSTR *pBstrHelpFile);
+
+ HRESULT GetHelpContext(
+ [out] DWORD *pdwHelpContext);
+}
+
+[
+ object,
+ uuid(22F03340-547D-101B-8E65-08002B2BD119),
+ pointer_default(unique)
+]
+interface ICreateErrorInfo : IUnknown
+{
+ typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;
+
+ HRESULT SetGUID(
+ [in] REFGUID rguid);
+
+ HRESULT SetSource(
+ [in] LPOLESTR szSource);
+
+ HRESULT SetDescription(
+ [in] LPOLESTR szDescription);
+
+ HRESULT SetHelpFile(
+ [in] LPOLESTR szHelpFile);
+
+ HRESULT SetHelpContext(
+ [in] DWORD dwHelpContext);
+}
+
+[
+ object,
+ uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
+ pointer_default(unique)
+]
+interface ISupportErrorInfo : IUnknown
+{
+ typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;
+
+ HRESULT InterfaceSupportsErrorInfo(
+ [in] REFIID riid);
+}
+
+[
+ object,
+ uuid(0000002E-0000-0000-C000-000000000046)
+]
+interface ITypeFactory : IUnknown
+{
+ HRESULT CreateFromTypeInfo(
+ [in] ITypeInfo *pTypeInfo,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppv);
+}
+
+[
+ local,
+ object,
+ uuid(0000002D-0000-0000-C000-000000000046)
+]
+interface ITypeMarshal : IUnknown
+{
+ HRESULT Size(
+ [in] PVOID pvType,
+ [in] DWORD dwDestContext,
+ [in] PVOID pvDestContext,
+ [out] ULONG *pSize);
+
+ HRESULT Marshal(
+ [in] PVOID pvType,
+ [in] DWORD dwDestContext,
+ [in] PVOID pvDestContext,
+ [in] ULONG cbBufferLength,
+ [out] BYTE *pBuffer,
+ [out] ULONG *pcbWritten);
+
+ HRESULT Unmarshal(
+ [out] PVOID pvType,
+ [in] DWORD dwFlags,
+ [in] ULONG cbBufferLength,
+ [in] BYTE *pBuffer,
+ [out] ULONG *pcbRead);
+
+ HRESULT Free(
+ [in] PVOID pvType);
+}
+
+[
+ local,
+ object,
+ uuid(0000002F-0000-0000-C000-000000000046)
+]
+interface IRecordInfo : IUnknown
+{
+ typedef [unique] IRecordInfo *LPRECORDINFO;
+
+ HRESULT RecordInit(
+ [out] PVOID pvNew);
+
+ HRESULT RecordClear(
+ [in] PVOID pvExisting);
+
+ HRESULT RecordCopy(
+ [in] PVOID pvExisting,
+ [out] PVOID pvNew);
+
+ HRESULT GetGuid(
+ [out] GUID *pguid);
+
+ HRESULT GetName(
+ [out] BSTR *pbstrName);
+
+ HRESULT GetSize(
+ [out] ULONG *pcbSize);
+
+ HRESULT GetTypeInfo(
+ [out] ITypeInfo **ppTypeInfo);
+
+ HRESULT GetField(
+ [in] PVOID pvData,
+ [in] LPCOLESTR szFieldName,
+ [out] VARIANT *pvarField);
+
+ HRESULT GetFieldNoCopy(
+ [in] PVOID pvData,
+ [in] LPCOLESTR szFieldName,
+ [out] VARIANT *pvarField,
+ [out] PVOID *ppvDataCArray);
+
+ HRESULT PutField(
+ [in] ULONG wFlags,
+ [in, out] PVOID pvData,
+ [in] LPCOLESTR szFieldName,
+ [in] VARIANT *pvarField);
+
+ HRESULT PutFieldNoCopy(
+ [in] ULONG wFlags,
+ [in, out] PVOID pvData,
+ [in] LPCOLESTR szFieldName,
+ [in] VARIANT *pvarField);
+
+ HRESULT GetFieldNames(
+ [in, out] ULONG *pcNames,
+ [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames);
+
+ BOOL IsMatchingType(
+ [in] IRecordInfo *pRecordInfo);
+
+ PVOID RecordCreate();
+
+ HRESULT RecordCreateCopy(
+ [in] PVOID pvSource,
+ [out] PVOID *ppvDest);
+
+ HRESULT RecordDestroy(
+ [in] PVOID pvRecord);
+}
+
+[
+ local,
+ object,
+ uuid(00020405-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ICreateTypeInfo : IUnknown
+{
+ typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;
+
+ HRESULT SetGuid(
+ [in] REFGUID guid);
+
+ HRESULT SetTypeFlags(
+ [in] UINT uTypeFlags);
+
+ HRESULT SetDocString(
+ [in] LPOLESTR pStrDoc);
+
+ HRESULT SetHelpContext(
+ [in] DWORD dwHelpContext);
+
+ HRESULT SetVersion(
+ [in] WORD wMajorVerNum,
+ [in] WORD wMinorVerNum);
+
+ HRESULT AddRefTypeInfo(
+ [in] ITypeInfo *pTInfo,
+ [in] HREFTYPE *phRefType);
+
+ HRESULT AddFuncDesc(
+ [in] UINT index,
+ [in] FUNCDESC *pFuncDesc);
+
+ HRESULT AddImplType(
+ [in] UINT index,
+ [in] HREFTYPE hRefType);
+
+ HRESULT SetImplTypeFlags(
+ [in] UINT index,
+ [in] INT implTypeFlags);
+
+ HRESULT SetAlignment(
+ [in] WORD cbAlignment);
+
+ HRESULT SetSchema(
+ [in] LPOLESTR pStrSchema);
+
+ HRESULT AddVarDesc(
+ [in] UINT index,
+ [in] VARDESC *pVarDesc);
+
+ HRESULT SetFuncAndParamNames(
+ [in] UINT index,
+ [in, size_is(cNames)] LPOLESTR *rgszNames,
+ [in] UINT cNames);
+
+ HRESULT SetVarName(
+ [in] UINT index,
+ [in] LPOLESTR szName);
+
+ HRESULT SetTypeDescAlias(
+ [in] TYPEDESC *pTDescAlias);
+
+ HRESULT DefineFuncAsDllEntry(
+ [in] UINT index,
+ [in] LPOLESTR szDllName,
+ [in] LPOLESTR szProcName);
+
+ HRESULT SetFuncDocString(
+ [in] UINT index,
+ [in] LPOLESTR szDocString);
+
+ HRESULT SetVarDocString(
+ [in] UINT index,
+ [in] LPOLESTR szDocString);
+
+ HRESULT SetFuncHelpContext(
+ [in] UINT index,
+ [in] DWORD dwHelpContext);
+
+ HRESULT SetVarHelpContext(
+ [in] UINT index,
+ [in] DWORD dwHelpContext);
+
+ HRESULT SetMops(
+ [in] UINT index,
+ [in] BSTR bstrMops);
+
+ HRESULT SetTypeIdldesc(
+ [in] IDLDESC * pIdlDesc);
+
+ HRESULT LayOut();
+}
+
+[
+ local,
+ object,
+ uuid(0002040E-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ICreateTypeInfo2 : ICreateTypeInfo
+{
+ typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2;
+
+ HRESULT DeleteFuncDesc(
+ [in] UINT index);
+
+ HRESULT DeleteFuncDescByMemId(
+ [in] MEMBERID memid,
+ [in] INVOKEKIND invKind);
+
+ HRESULT DeleteVarDesc(
+ [in] UINT index);
+
+ HRESULT DeleteVarDescByMemId(
+ [in] MEMBERID memid);
+
+ HRESULT DeleteImplType(
+ [in] UINT index);
+
+ HRESULT SetCustData(
+ [in] REFGUID guid,
+ [in] VARIANT *pVarVal);
+
+ HRESULT SetFuncCustData(
+ [in] UINT index,
+ [in] REFGUID guid,
+ [in] VARIANT *pVarVal);
+
+ HRESULT SetParamCustData(
+ [in] UINT indexFunc,
+ [in] UINT indexParam,
+ [in] REFGUID guid,
+ [in] VARIANT *pVarVal);
+
+ HRESULT SetVarCustData(
+ [in] UINT index,
+ [in] REFGUID guid,
+ [in] VARIANT *pVarVal);
+
+ HRESULT SetImplTypeCustData(
+ [in] UINT index,
+ [in] REFGUID guid,
+ [in] VARIANT *pVarVal);
+
+ HRESULT SetHelpStringContext(
+ [in] ULONG dwHelpStringContext);
+
+ HRESULT SetFuncHelpStringContext(
+ [in] UINT index,
+ [in] ULONG dwHelpStringContext);
+
+ HRESULT SetVarHelpStringContext(
+ [in] UINT index,
+ [in] ULONG dwHelpStringContext);
+
+ HRESULT Invalidate();
+
+ HRESULT SetName(
+ [in] LPOLESTR szName);
+}
+
+[
+ local,
+ object,
+ uuid(00020406-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ICreateTypeLib : IUnknown
+{
+ typedef [unique] ICreateTypeLib *LPCREATETYPELIB;
+
+ HRESULT CreateTypeInfo(
+ [in] LPOLESTR szName,
+ [in] TYPEKIND tkind,
+ [out] ICreateTypeInfo **ppCTInfo);
+
+ HRESULT SetName(
+ [in] LPOLESTR szName);
+
+ HRESULT SetVersion(
+ [in] WORD wMajorVerNum,
+ [in] WORD wMinorVerNum);
+
+ HRESULT SetGuid(
+ [in] REFGUID guid);
+
+ HRESULT SetDocString(
+ [in] LPOLESTR szDoc);
+
+ HRESULT SetHelpFileName(
+ [in] LPOLESTR szHelpFileName);
+
+ HRESULT SetHelpContext(
+ [in] DWORD dwHelpContext);
+
+ HRESULT SetLcid(
+ [in] LCID lcid);
+
+ HRESULT SetLibFlags(
+ [in] UINT uLibFlags);
+
+ HRESULT SaveAllChanges();
+}
+
+[
+ local,
+ object,
+ uuid(0002040F-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ICreateTypeLib2 : ICreateTypeLib
+{
+ typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2;
+
+ HRESULT DeleteTypeInfo(
+ [in] LPOLESTR szName);
+
+ HRESULT SetCustData(
+ [in] REFGUID guid,
+ [in] VARIANT *pVarVal);
+
+ HRESULT SetHelpStringContext(
+ [in] ULONG dwHelpStringContext);
+
+ HRESULT SetHelpStringDll(
+ [in] LPOLESTR szFileName);
+}
+
+
+/*****************************************************************************
+ * IErrorLog interface
+ */
+[
+ object,
+ uuid(3127ca40-446e-11ce-8135-00aa004bb851),
+ pointer_default(unique)
+]
+interface IErrorLog : IUnknown
+{
+ typedef IErrorLog *LPERRORLOG;
+
+ HRESULT AddError(
+ [in] LPCOLESTR pszPropName,
+ [in] EXCEPINFO *pExcepInfo);
+}
+
+
+/*****************************************************************************
+ * IPropertyBag interface
+ */
+[
+ object,
+ uuid(55272a00-42cb-11ce-8135-00aa004bb851),
+ pointer_default(unique)
+]
+interface IPropertyBag : IUnknown
+{
+ typedef IPropertyBag *LPPROPERTYBAG;
+
+ [local]
+ HRESULT Read(
+ [in] LPCOLESTR pszPropName,
+ [in, out] VARIANT *pVar,
+ [in] IErrorLog *pErrorLog);
+
+ [call_as(Read)]
+ HRESULT RemoteRead(
+ [in] LPCOLESTR pszPropName,
+ [out] VARIANT *pVar,
+ [in] IErrorLog *pErrorLog,
+ [in] DWORD varType,
+ [in] IUnknown *pUnkObj);
+
+ HRESULT Write(
+ [in] LPCOLESTR pszPropName,
+ [in] VARIANT *pVar);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h
new file mode 100644
index 00000000..ac6e9fe2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objbase.h
@@ -0,0 +1,511 @@
+/*
+ * Copyright (C) 1998-1999 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef _OBJBASE_H_
+#define _OBJBASE_H_
+
+/*****************************************************************************
+ * Macros to define a COM interface
+ */
+/*
+ * The goal of the following set of definitions is to provide a way to use the same
+ * header file definitions to provide both a C interface and a C++ object oriented
+ * interface to COM interfaces. The type of interface is selected automatically
+ * depending on the language but it is always possible to get the C interface in C++
+ * by defining CINTERFACE.
+ *
+ * It is based on the following assumptions:
+ * - all COM interfaces derive from IUnknown, this should not be a problem.
+ * - the header file only defines the interface, the actual fields are defined
+ * separately in the C file implementing the interface.
+ *
+ * The natural approach to this problem would be to make sure we get a C++ class and
+ * virtual methods in C++ and a structure with a table of pointer to functions in C.
+ * Unfortunately the layout of the virtual table is compiler specific, the layout of
+ * g++ virtual tables is not the same as that of an egcs virtual table which is not the
+ * same as that generated by Visual C++. There are workarounds to make the virtual tables
+ * compatible via padding but unfortunately the one which is imposed to the WINE emulator
+ * by the Windows binaries, i.e. the Visual C++ one, is the most compact of all.
+ *
+ * So the solution I finally adopted does not use virtual tables. Instead I use inline
+ * non virtual methods that dereference the method pointer themselves and perform the call.
+ *
+ * Let's take Direct3D as an example:
+ *
+ * #define INTERFACE IDirect3D
+ * DECLARE_INTERFACE_(IDirect3D,IUnknown)
+ * {
+ * // *** IUnknown methods *** //
+ * STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID, void**) PURE;
+ * STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ * STDMETHOD_(ULONG,Release)(THIS) PURE;
+ * // *** IDirect3D methods *** //
+ * STDMETHOD(Initialize)(THIS_ REFIID) PURE;
+ * STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK, LPVOID) PURE;
+ * STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT *, IUnknown *) PURE;
+ * STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL *, IUnknown *) PURE;
+ * STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT *, IUnknown *) PURE;
+ * STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT) PURE;
+ * };
+ * #undef INTERFACE
+ *
+ * #ifdef COBJMACROS
+ * // *** IUnknown methods *** //
+ * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+ * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p)
+ * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p)
+ * // *** IDirect3D methods *** //
+ * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+ * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b)
+ * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
+ * #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+ * #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+ * #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
+ * #endif
+ *
+ * Comments:
+ * - The INTERFACE macro is used in the STDMETHOD macros to define the type of the 'this'
+ * pointer. Defining this macro here saves us the trouble of having to repeat the interface
+ * name everywhere. Note however that because of the way macros work, a macro like STDMETHOD
+ * cannot use 'INTERFACE##_VTABLE' because this would give 'INTERFACE_VTABLE' and not
+ * 'IDirect3D_VTABLE'.
+ * - The DECLARE_INTERFACE declares all the structures necessary for the interface. We have to
+ * explicitly use the interface name for macro expansion reasons again. It defines the list of
+ * methods that are inheritable from this interface. It must be written manually (rather than
+ * using a macro to generate the equivalent code) to avoid macro recursion (which compilers
+ * don't like). It must start with the methods definition of the parent interface so that
+ * method inheritance works properly.
+ * - The 'undef INTERFACE' is here to remind you that using INTERFACE in the following macros
+ * will not work.
+ * - Finally the set of 'IDirect3D_Xxx' macros is a standard set of macros defined to ease access
+ * to the interface methods in C. Unfortunately I don't see any way to avoid having to duplicate
+ * the inherited method definitions there. This time I could have used a trick to use only one
+ * macro whatever the number of parameters but I preferred to have it work the same way as above.
+ * - You probably have noticed that we don't define the fields we need to actually implement this
+ * interface: reference count, pointer to other resources and miscellaneous fields. That's
+ * because these interfaces are just that: interfaces. They may be implemented more than once, in
+ * different contexts and sometimes not even in Wine. Thus it would not make sense to impose
+ * that the interface contains some specific fields.
+ *
+ *
+ * In C this gives:
+ * typedef struct IDirect3DVtbl IDirect3DVtbl;
+ * struct IDirect3D {
+ * IDirect3DVtbl* lpVtbl;
+ * };
+ * struct IDirect3DVtbl {
+ * HRESULT (*QueryInterface)(IDirect3D* me, REFIID riid, LPVOID* ppvObj);
+ * ULONG (*AddRef)(IDirect3D* me);
+ * ULONG (*Release)(IDirect3D* me);
+ * HRESULT (*Initialize)(IDirect3D* me, REFIID a);
+ * HRESULT (*EnumDevices)(IDirect3D* me, LPD3DENUMDEVICESCALLBACK a, LPVOID b);
+ * HRESULT (*CreateLight)(IDirect3D* me, LPDIRECT3DLIGHT* a, IUnknown* b);
+ * HRESULT (*CreateMaterial)(IDirect3D* me, LPDIRECT3DMATERIAL* a, IUnknown* b);
+ * HRESULT (*CreateViewport)(IDirect3D* me, LPDIRECT3DVIEWPORT* a, IUnknown* b);
+ * HRESULT (*FindDevice)(IDirect3D* me, LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b);
+ * };
+ *
+ * #ifdef COBJMACROS
+ * // *** IUnknown methods *** //
+ * #define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+ * #define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p)
+ * #define IDirect3D_Release(p) (p)->lpVtbl->Release(p)
+ * // *** IDirect3D methods *** //
+ * #define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+ * #define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevice(p,a,b)
+ * #define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)
+ * #define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)
+ * #define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)
+ * #define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)
+ * #endif
+ *
+ * Comments:
+ * - IDirect3D only contains a pointer to the IDirect3D virtual/jump table. This is the only thing
+ * the user needs to know to use the interface. Of course the structure we will define to
+ * implement this interface will have more fields but the first one will match this pointer.
+ * - The code generated by DECLARE_INTERFACE defines both the structure representing the interface and
+ * the structure for the jump table.
+ * - Each method is declared as a pointer to function field in the jump table. The implementation
+ * will fill this jump table with appropriate values, probably using a static variable, and
+ * initialize the lpVtbl field to point to this variable.
+ * - The IDirect3D_Xxx macros then just derefence the lpVtbl pointer and use the function pointer
+ * corresponding to the macro name. This emulates the behavior of a virtual table and should be
+ * just as fast.
+ * - This C code should be quite compatible with the Windows headers both for code that uses COM
+ * interfaces and for code implementing a COM interface.
+ *
+ *
+ * And in C++ (with gcc's g++):
+ *
+ * typedef struct IDirect3D: public IUnknown {
+ * virtual HRESULT Initialize(REFIID a) = 0;
+ * virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK a, LPVOID b) = 0;
+ * virtual HRESULT CreateLight(LPDIRECT3DLIGHT* a, IUnknown* b) = 0;
+ * virtual HRESULT CreateMaterial(LPDIRECT3DMATERIAL* a, IUnknown* b) = 0;
+ * virtual HRESULT CreateViewport(LPDIRECT3DVIEWPORT* a, IUnknown* b) = 0;
+ * virtual HRESULT FindDevice(LPD3DFINDDEVICESEARCH a, LPD3DFINDDEVICERESULT b) = 0;
+ * };
+ *
+ * Comments:
+ * - Of course in C++ we use inheritance so that we don't have to duplicate the method definitions.
+ * - Finally there is no IDirect3D_Xxx macro. These are not needed in C++ unless the CINTERFACE
+ * macro is defined in which case we would not be here.
+ */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+/* C++ interface */
+
+#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
+#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
+#define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method
+#define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method
+
+#define PURE = 0
+#define THIS_
+#define THIS void
+
+#define interface struct
+#define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface
+#define DECLARE_INTERFACE_(iface,ibase) interface DECLSPEC_NOVTABLE iface : public ibase
+#define DECLARE_INTERFACE_IID_(iface, ibase, iid) interface DECLSPEC_UUID(iid) DECLSPEC_NOVTABLE iface : public ibase
+
+#define BEGIN_INTERFACE
+#define END_INTERFACE
+
+#else /* __cplusplus && !CINTERFACE */
+
+/* C interface */
+
+#define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE *method)
+#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE *method)
+#define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE *method)
+#define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE *method)
+
+#define PURE
+#define THIS_ INTERFACE *This,
+#define THIS INTERFACE *This
+
+#define interface struct
+
+#ifdef __WINESRC__
+#define CONST_VTABLE
+#endif
+
+#ifdef CONST_VTABLE
+#undef CONST_VTBL
+#define CONST_VTBL const
+#define DECLARE_INTERFACE(iface) \
+ typedef interface iface { const struct iface##Vtbl *lpVtbl; } iface; \
+ typedef struct iface##Vtbl iface##Vtbl; \
+ struct iface##Vtbl
+#else
+#undef CONST_VTBL
+#define CONST_VTBL
+#define DECLARE_INTERFACE(iface) \
+ typedef interface iface { struct iface##Vtbl *lpVtbl; } iface; \
+ typedef struct iface##Vtbl iface##Vtbl; \
+ struct iface##Vtbl
+#endif
+#define DECLARE_INTERFACE_(iface,ibase) DECLARE_INTERFACE(iface)
+#define DECLARE_INTERFACE_IID_(iface, ibase, iid) DECLARE_INTERFACE_(iface, ibase)
+
+#define BEGIN_INTERFACE
+#define END_INTERFACE
+
+#endif /* __cplusplus && !CINTERFACE */
+
+#ifndef __IRpcStubBuffer_FWD_DEFINED__
+#define __IRpcStubBuffer_FWD_DEFINED__
+typedef interface IRpcStubBuffer IRpcStubBuffer;
+#endif
+#ifndef __IRpcChannelBuffer_FWD_DEFINED__
+#define __IRpcChannelBuffer_FWD_DEFINED__
+typedef interface IRpcChannelBuffer IRpcChannelBuffer;
+#endif
+
+#ifndef RC_INVOKED
+/* For compatibility only, at least for now */
+#include <stdlib.h>
+#endif
+
+#include <wtypes.h>
+#include <unknwn.h>
+#include <objidl.h>
+
+#include <guiddef.h>
+#ifndef INITGUID
+#include <cguid.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NONAMELESSSTRUCT
+#define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v))
+#define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v))
+#else
+#define LISet32(li, v) ((li).u.HighPart = (v) < 0 ? -1 : 0, (li).u.LowPart = (v))
+#define ULISet32(li, v) ((li).u.HighPart = 0, (li).u.LowPart = (v))
+#endif
+
+/*****************************************************************************
+ * Standard API
+ */
+DWORD WINAPI CoBuildVersion(void);
+
+typedef enum tagCOINIT
+{
+ COINIT_APARTMENTTHREADED = 0x2, /* Apartment model */
+ COINIT_MULTITHREADED = 0x0, /* OLE calls objects on any thread */
+ COINIT_DISABLE_OLE1DDE = 0x4, /* Don't use DDE for Ole1 support */
+ COINIT_SPEED_OVER_MEMORY = 0x8 /* Trade memory for speed */
+} COINIT;
+
+HRESULT WINAPI CoInitialize(LPVOID lpReserved);
+HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit);
+void WINAPI CoUninitialize(void);
+DWORD WINAPI CoGetCurrentProcess(void);
+
+HINSTANCE WINAPI CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree);
+void WINAPI CoFreeAllLibraries(void);
+void WINAPI CoFreeLibrary(HINSTANCE hLibrary);
+void WINAPI CoFreeUnusedLibraries(void);
+void WINAPI CoFreeUnusedLibrariesEx(DWORD dwUnloadDelay, DWORD dwReserved);
+
+HRESULT WINAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv);
+HRESULT WINAPI CoCreateInstanceEx(REFCLSID rclsid,
+ LPUNKNOWN pUnkOuter,
+ DWORD dwClsContext,
+ COSERVERINFO* pServerInfo,
+ ULONG cmq,
+ MULTI_QI* pResults);
+
+HRESULT WINAPI CoGetInstanceFromFile(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, DWORD grfMode, OLECHAR* pwszName, DWORD dwCount, MULTI_QI* pResults);
+HRESULT WINAPI CoGetInstanceFromIStorage(COSERVERINFO* pServerInfo, CLSID* pClsid, IUnknown* punkOuter, DWORD dwClsCtx, IStorage* pstg, DWORD dwCount, MULTI_QI* pResults);
+
+HRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC* lpMalloc);
+LPVOID WINAPI CoTaskMemAlloc(ULONG size) __WINE_ALLOC_SIZE(1);
+void WINAPI CoTaskMemFree(LPVOID ptr);
+LPVOID WINAPI CoTaskMemRealloc(LPVOID ptr, ULONG size);
+
+HRESULT WINAPI CoRegisterMallocSpy(LPMALLOCSPY pMallocSpy);
+HRESULT WINAPI CoRevokeMallocSpy(void);
+
+HRESULT WINAPI CoGetContextToken( ULONG_PTR *token );
+
+/* class registration flags; passed to CoRegisterClassObject */
+typedef enum tagREGCLS
+{
+ REGCLS_SINGLEUSE = 0,
+ REGCLS_MULTIPLEUSE = 1,
+ REGCLS_MULTI_SEPARATE = 2,
+ REGCLS_SUSPENDED = 4,
+ REGCLS_SURROGATE = 8
+} REGCLS;
+
+HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv);
+HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister);
+HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister);
+HRESULT WINAPI CoGetPSClsid(REFIID riid,CLSID *pclsid);
+HRESULT WINAPI CoRegisterPSClsid(REFIID riid, REFCLSID rclsid);
+HRESULT WINAPI CoRegisterSurrogate(LPSURROGATE pSurrogate);
+HRESULT WINAPI CoSuspendClassObjects(void);
+HRESULT WINAPI CoResumeClassObjects(void);
+ULONG WINAPI CoAddRefServerProcess(void);
+ULONG WINAPI CoReleaseServerProcess(void);
+
+/* marshalling */
+HRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal);
+HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv);
+HRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
+HRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal);
+HRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);
+HRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
+HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm);
+HRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm);
+HRESULT WINAPI CoDisconnectObject(LPUNKNOWN lpUnk, DWORD reserved);
+HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult);
+HRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv);
+HRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases);
+BOOL WINAPI CoIsHandlerConnected(LPUNKNOWN pUnk);
+
+/* security */
+HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR pSecDesc, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE* asAuthSvc, void* pReserved1, DWORD dwAuthnLevel, DWORD dwImpLevel, void* pReserved2, DWORD dwCapabilities, void* pReserved3);
+HRESULT WINAPI CoGetCallContext(REFIID riid, void** ppInterface);
+HRESULT WINAPI CoSwitchCallContext(IUnknown *pContext, IUnknown **ppOldContext);
+HRESULT WINAPI CoQueryAuthenticationServices(DWORD* pcAuthSvc, SOLE_AUTHENTICATION_SERVICE** asAuthSvc);
+
+HRESULT WINAPI CoQueryProxyBlanket(IUnknown* pProxy, DWORD* pwAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTH_IDENTITY_HANDLE* pAuthInfo, DWORD* pCapabilities);
+HRESULT WINAPI CoSetProxyBlanket(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities);
+HRESULT WINAPI CoCopyProxy(IUnknown* pProxy, IUnknown** ppCopy);
+
+HRESULT WINAPI CoImpersonateClient(void);
+HRESULT WINAPI CoQueryClientBlanket(DWORD* pAuthnSvc, DWORD* pAuthzSvc, OLECHAR** pServerPrincName, DWORD* pAuthnLevel, DWORD* pImpLevel, RPC_AUTHZ_HANDLE* pPrivs, DWORD* pCapabilities);
+HRESULT WINAPI CoRevertToSelf(void);
+
+/* misc */
+HRESULT WINAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew);
+HRESULT WINAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew);
+HRESULT WINAPI CoAllowSetForegroundWindow(IUnknown *pUnk, LPVOID lpvReserved);
+HRESULT WINAPI CoGetObjectContext(REFIID riid, LPVOID *ppv);
+
+HRESULT WINAPI CoCreateGuid(GUID* pguid);
+BOOL WINAPI CoIsOle1Class(REFCLSID rclsid);
+
+BOOL WINAPI CoDosDateTimeToFileTime(WORD nDosDate, WORD nDosTime, FILETIME* lpFileTime);
+BOOL WINAPI CoFileTimeToDosDateTime(FILETIME* lpFileTime, WORD* lpDosDate, WORD* lpDosTime);
+HRESULT WINAPI CoFileTimeNow(FILETIME* lpFileTime);
+HRESULT WINAPI CoRegisterMessageFilter(LPMESSAGEFILTER lpMessageFilter,LPMESSAGEFILTER *lplpMessageFilter);
+HRESULT WINAPI CoRegisterChannelHook(REFGUID ExtensionGuid, IChannelHook *pChannelHook);
+
+typedef enum tagCOWAIT_FLAGS
+{
+ COWAIT_WAITALL = 0x00000001,
+ COWAIT_ALERTABLE = 0x00000002
+} COWAIT_FLAGS;
+
+HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags,DWORD dwTimeout,ULONG cHandles,LPHANDLE pHandles,LPDWORD lpdwindex);
+
+/*****************************************************************************
+ * GUID API
+ */
+HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*);
+HRESULT WINAPI CLSIDFromString(LPCOLESTR, LPCLSID);
+HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid);
+HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID);
+
+INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax);
+
+/*****************************************************************************
+ * COM Server dll - exports
+ */
+HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv) DECLSPEC_HIDDEN;
+HRESULT WINAPI DllCanUnloadNow(void) DECLSPEC_HIDDEN;
+
+/* shouldn't be here, but is nice for type checking */
+#ifdef __WINESRC__
+HRESULT WINAPI DllRegisterServer(void) DECLSPEC_HIDDEN;
+HRESULT WINAPI DllUnregisterServer(void) DECLSPEC_HIDDEN;
+#endif
+
+
+/*****************************************************************************
+ * Data Object
+ */
+HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);
+HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID iid, LPVOID* ppv);
+
+/*****************************************************************************
+ * Moniker API
+ */
+HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID* ppvResult);
+HRESULT WINAPI CoGetObject(LPCWSTR pszName, BIND_OPTS *pBindOptions, REFIID riid, void **ppv);
+HRESULT WINAPI CreateAntiMoniker(LPMONIKER * ppmk);
+HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC* ppbc);
+HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, LPMONIKER* ppmk);
+HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, LPMONIKER* ppmk);
+HRESULT WINAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest, LPMONIKER* ppmkComposite);
+HRESULT WINAPI CreateItemMoniker(LPCOLESTR lpszDelim, LPCOLESTR lpszItem, LPMONIKER* ppmk);
+HRESULT WINAPI CreateObjrefMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);
+HRESULT WINAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER * ppmk);
+HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid);
+HRESULT WINAPI GetRunningObjectTable(DWORD reserved, LPRUNNINGOBJECTTABLE *pprot);
+HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szUserName, ULONG * pchEaten, LPMONIKER * ppmk);
+HRESULT WINAPI MonikerCommonPrefixWith(IMoniker* pmkThis,IMoniker* pmkOther,IMoniker** ppmkCommon);
+HRESULT WINAPI MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER * ppmkRelPath, BOOL dwReserved);
+
+/*****************************************************************************
+ * Storage API
+ */
+#define STGM_DIRECT 0x00000000
+#define STGM_TRANSACTED 0x00010000
+#define STGM_SIMPLE 0x08000000
+#define STGM_READ 0x00000000
+#define STGM_WRITE 0x00000001
+#define STGM_READWRITE 0x00000002
+#define STGM_SHARE_DENY_NONE 0x00000040
+#define STGM_SHARE_DENY_READ 0x00000030
+#define STGM_SHARE_DENY_WRITE 0x00000020
+#define STGM_SHARE_EXCLUSIVE 0x00000010
+#define STGM_PRIORITY 0x00040000
+#define STGM_DELETEONRELEASE 0x04000000
+#define STGM_CREATE 0x00001000
+#define STGM_CONVERT 0x00020000
+#define STGM_FAILIFTHERE 0x00000000
+#define STGM_NOSCRATCH 0x00100000
+#define STGM_NOSNAPSHOT 0x00200000
+#define STGM_DIRECT_SWMR 0x00400000
+
+#define STGFMT_STORAGE 0
+#define STGFMT_FILE 3
+#define STGFMT_ANY 4
+#define STGFMT_DOCFILE 5
+
+typedef struct tagSTGOPTIONS
+{
+ USHORT usVersion;
+ USHORT reserved;
+ ULONG ulSectorSize;
+ const WCHAR* pwcsTemplateFile;
+} STGOPTIONS;
+
+HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName,DWORD grfMode,DWORD reserved,IStorage **ppstgOpen);
+HRESULT WINAPI StgCreateStorageEx(const WCHAR*,DWORD,DWORD,DWORD,STGOPTIONS*,void*,REFIID,void**);
+HRESULT WINAPI StgIsStorageFile(LPCOLESTR fn);
+HRESULT WINAPI StgIsStorageILockBytes(ILockBytes *plkbyt);
+HRESULT WINAPI StgOpenStorage(const OLECHAR* pwcsName,IStorage* pstgPriority,DWORD grfMode,SNB snbExclude,DWORD reserved,IStorage**ppstgOpen);
+HRESULT WINAPI StgOpenStorageEx(const WCHAR* pwcwName,DWORD grfMode,DWORD stgfmt,DWORD grfAttrs,STGOPTIONS *pStgOptions, void *reserved, REFIID riid, void **ppObjectOpen);
+
+HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt,DWORD grfMode, DWORD reserved, IStorage** ppstgOpen);
+HRESULT WINAPI StgOpenStorageOnILockBytes(ILockBytes *plkbyt, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen);
+HRESULT WINAPI StgSetTimes( OLECHAR const *lpszName, FILETIME const *pctime, FILETIME const *patime, FILETIME const *pmtime);
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef __WINESRC__
+# include <urlmon.h>
+#endif
+#include <propidl.h>
+
+#ifndef __WINESRC__
+
+#define FARSTRUCT
+#define HUGEP
+
+#define WINOLEAPI STDAPI
+#define WINOLEAPI_(type) STDAPI_(type)
+
+#endif /* __WINESRC__ */
+
+#endif /* _OBJBASE_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl
new file mode 100644
index 00000000..7d2b3eb7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objectarray.idl
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+ uuid(92ca9dcd-5622-4bba-a805-5e9f541bd8c9),
+ object,
+ pointer_default(unique)
+]
+interface IObjectArray : IUnknown
+{
+ HRESULT GetCount([out] UINT *pcObjects);
+ HRESULT GetAt(
+ [in] UINT uiIndex,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+}
+
+[
+ uuid(5632b1a4-e38a-400a-928a-d4cd63230295),
+ object,
+ pointer_default(unique)
+]
+interface IObjectCollection : IObjectArray
+{
+ HRESULT AddObject([in] IUnknown *punk);
+ HRESULT AddFromArray([in] IObjectArray *poaSource);
+ HRESULT RemoveObjectAt([in] UINT uiIndex);
+ HRESULT Clear();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h
new file mode 100644
index 00000000..ec9cdf64
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.h
@@ -0,0 +1,10438 @@
+/*** Autogenerated by WIDL 1.1.36 from objidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_OBJIDL_H
+#define __WIDL_OBJIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IMarshal_FWD_DEFINED__
+#define __IMarshal_FWD_DEFINED__
+typedef interface IMarshal IMarshal;
+#endif
+
+#ifndef __IMarshal2_FWD_DEFINED__
+#define __IMarshal2_FWD_DEFINED__
+typedef interface IMarshal2 IMarshal2;
+#endif
+
+#ifndef __IStdMarshalInfo_FWD_DEFINED__
+#define __IStdMarshalInfo_FWD_DEFINED__
+typedef interface IStdMarshalInfo IStdMarshalInfo;
+#endif
+
+#ifndef __IExternalConnection_FWD_DEFINED__
+#define __IExternalConnection_FWD_DEFINED__
+typedef interface IExternalConnection IExternalConnection;
+#endif
+
+#ifndef __IMultiQI_FWD_DEFINED__
+#define __IMultiQI_FWD_DEFINED__
+typedef interface IMultiQI IMultiQI;
+#endif
+
+#ifndef __IMalloc_FWD_DEFINED__
+#define __IMalloc_FWD_DEFINED__
+typedef interface IMalloc IMalloc;
+#endif
+
+#ifndef __IMallocSpy_FWD_DEFINED__
+#define __IMallocSpy_FWD_DEFINED__
+typedef interface IMallocSpy IMallocSpy;
+#endif
+
+#ifndef __IInternalUnknown_FWD_DEFINED__
+#define __IInternalUnknown_FWD_DEFINED__
+typedef interface IInternalUnknown IInternalUnknown;
+#endif
+
+#ifndef __IEnumUnknown_FWD_DEFINED__
+#define __IEnumUnknown_FWD_DEFINED__
+typedef interface IEnumUnknown IEnumUnknown;
+#endif
+
+#ifndef __ISurrogate_FWD_DEFINED__
+#define __ISurrogate_FWD_DEFINED__
+typedef interface ISurrogate ISurrogate;
+#endif
+
+#ifndef __IGlobalInterfaceTable_FWD_DEFINED__
+#define __IGlobalInterfaceTable_FWD_DEFINED__
+typedef interface IGlobalInterfaceTable IGlobalInterfaceTable;
+#endif
+
+#ifndef __IBindCtx_FWD_DEFINED__
+#define __IBindCtx_FWD_DEFINED__
+typedef interface IBindCtx IBindCtx;
+#endif
+
+#ifndef __IEnumMoniker_FWD_DEFINED__
+#define __IEnumMoniker_FWD_DEFINED__
+typedef interface IEnumMoniker IEnumMoniker;
+#endif
+
+#ifndef __IRunnableObject_FWD_DEFINED__
+#define __IRunnableObject_FWD_DEFINED__
+typedef interface IRunnableObject IRunnableObject;
+#endif
+
+#ifndef __IRunningObjectTable_FWD_DEFINED__
+#define __IRunningObjectTable_FWD_DEFINED__
+typedef interface IRunningObjectTable IRunningObjectTable;
+#endif
+
+#ifndef __IPersist_FWD_DEFINED__
+#define __IPersist_FWD_DEFINED__
+typedef interface IPersist IPersist;
+#endif
+
+#ifndef __IPersistStream_FWD_DEFINED__
+#define __IPersistStream_FWD_DEFINED__
+typedef interface IPersistStream IPersistStream;
+#endif
+
+#ifndef __IMoniker_FWD_DEFINED__
+#define __IMoniker_FWD_DEFINED__
+typedef interface IMoniker IMoniker;
+#endif
+
+#ifndef __IROTData_FWD_DEFINED__
+#define __IROTData_FWD_DEFINED__
+typedef interface IROTData IROTData;
+#endif
+
+#ifndef __IEnumString_FWD_DEFINED__
+#define __IEnumString_FWD_DEFINED__
+typedef interface IEnumString IEnumString;
+#endif
+
+#ifndef __IClassActivator_FWD_DEFINED__
+#define __IClassActivator_FWD_DEFINED__
+typedef interface IClassActivator IClassActivator;
+#endif
+
+#ifndef __ISequentialStream_FWD_DEFINED__
+#define __ISequentialStream_FWD_DEFINED__
+typedef interface ISequentialStream ISequentialStream;
+#endif
+
+#ifndef __IStream_FWD_DEFINED__
+#define __IStream_FWD_DEFINED__
+typedef interface IStream IStream;
+#endif
+
+#ifndef __IEnumSTATSTG_FWD_DEFINED__
+#define __IEnumSTATSTG_FWD_DEFINED__
+typedef interface IEnumSTATSTG IEnumSTATSTG;
+#endif
+
+#ifndef __IStorage_FWD_DEFINED__
+#define __IStorage_FWD_DEFINED__
+typedef interface IStorage IStorage;
+#endif
+
+#ifndef __IPersistFile_FWD_DEFINED__
+#define __IPersistFile_FWD_DEFINED__
+typedef interface IPersistFile IPersistFile;
+#endif
+
+#ifndef __IPersistStorage_FWD_DEFINED__
+#define __IPersistStorage_FWD_DEFINED__
+typedef interface IPersistStorage IPersistStorage;
+#endif
+
+#ifndef __IRootStorage_FWD_DEFINED__
+#define __IRootStorage_FWD_DEFINED__
+typedef interface IRootStorage IRootStorage;
+#endif
+
+#ifndef __ILockBytes_FWD_DEFINED__
+#define __ILockBytes_FWD_DEFINED__
+typedef interface ILockBytes ILockBytes;
+#endif
+
+#ifndef __IFillLockBytes_FWD_DEFINED__
+#define __IFillLockBytes_FWD_DEFINED__
+typedef interface IFillLockBytes IFillLockBytes;
+#endif
+
+#ifndef __IProgressNotify_FWD_DEFINED__
+#define __IProgressNotify_FWD_DEFINED__
+typedef interface IProgressNotify IProgressNotify;
+#endif
+
+#ifndef __ILayoutStorage_FWD_DEFINED__
+#define __ILayoutStorage_FWD_DEFINED__
+typedef interface ILayoutStorage ILayoutStorage;
+#endif
+
+#ifndef __IBlockingLock_FWD_DEFINED__
+#define __IBlockingLock_FWD_DEFINED__
+typedef interface IBlockingLock IBlockingLock;
+#endif
+
+#ifndef __ITimeAndNoticeControl_FWD_DEFINED__
+#define __ITimeAndNoticeControl_FWD_DEFINED__
+typedef interface ITimeAndNoticeControl ITimeAndNoticeControl;
+#endif
+
+#ifndef __IOplockStorage_FWD_DEFINED__
+#define __IOplockStorage_FWD_DEFINED__
+typedef interface IOplockStorage IOplockStorage;
+#endif
+
+#ifndef __IEnumFORMATETC_FWD_DEFINED__
+#define __IEnumFORMATETC_FWD_DEFINED__
+typedef interface IEnumFORMATETC IEnumFORMATETC;
+#endif
+
+#ifndef __IEnumSTATDATA_FWD_DEFINED__
+#define __IEnumSTATDATA_FWD_DEFINED__
+typedef interface IEnumSTATDATA IEnumSTATDATA;
+#endif
+
+#ifndef __IAdviseSink_FWD_DEFINED__
+#define __IAdviseSink_FWD_DEFINED__
+typedef interface IAdviseSink IAdviseSink;
+#endif
+
+#ifndef __IAdviseSink2_FWD_DEFINED__
+#define __IAdviseSink2_FWD_DEFINED__
+typedef interface IAdviseSink2 IAdviseSink2;
+#endif
+
+#ifndef __IDataObject_FWD_DEFINED__
+#define __IDataObject_FWD_DEFINED__
+typedef interface IDataObject IDataObject;
+#endif
+
+#ifndef __IDataAdviseHolder_FWD_DEFINED__
+#define __IDataAdviseHolder_FWD_DEFINED__
+typedef interface IDataAdviseHolder IDataAdviseHolder;
+#endif
+
+#ifndef __IMessageFilter_FWD_DEFINED__
+#define __IMessageFilter_FWD_DEFINED__
+typedef interface IMessageFilter IMessageFilter;
+#endif
+
+#ifndef __IRpcChannelBuffer_FWD_DEFINED__
+#define __IRpcChannelBuffer_FWD_DEFINED__
+typedef interface IRpcChannelBuffer IRpcChannelBuffer;
+#endif
+
+#ifndef __IRpcChannelBuffer2_FWD_DEFINED__
+#define __IRpcChannelBuffer2_FWD_DEFINED__
+typedef interface IRpcChannelBuffer2 IRpcChannelBuffer2;
+#endif
+
+#ifndef __IRpcChannelBuffer3_FWD_DEFINED__
+#define __IRpcChannelBuffer3_FWD_DEFINED__
+typedef interface IRpcChannelBuffer3 IRpcChannelBuffer3;
+#endif
+
+#ifndef __IAsyncRpcChannelBuffer_FWD_DEFINED__
+#define __IAsyncRpcChannelBuffer_FWD_DEFINED__
+typedef interface IAsyncRpcChannelBuffer IAsyncRpcChannelBuffer;
+#endif
+
+#ifndef __IRpcSyntaxNegotiate_FWD_DEFINED__
+#define __IRpcSyntaxNegotiate_FWD_DEFINED__
+typedef interface IRpcSyntaxNegotiate IRpcSyntaxNegotiate;
+#endif
+
+#ifndef __IRpcProxyBuffer_FWD_DEFINED__
+#define __IRpcProxyBuffer_FWD_DEFINED__
+typedef interface IRpcProxyBuffer IRpcProxyBuffer;
+#endif
+
+#ifndef __IRpcStubBuffer_FWD_DEFINED__
+#define __IRpcStubBuffer_FWD_DEFINED__
+typedef interface IRpcStubBuffer IRpcStubBuffer;
+#endif
+
+#ifndef __IPSFactoryBuffer_FWD_DEFINED__
+#define __IPSFactoryBuffer_FWD_DEFINED__
+typedef interface IPSFactoryBuffer IPSFactoryBuffer;
+#endif
+
+#ifndef __IChannelHook_FWD_DEFINED__
+#define __IChannelHook_FWD_DEFINED__
+typedef interface IChannelHook IChannelHook;
+#endif
+
+#ifndef __IClientSecurity_FWD_DEFINED__
+#define __IClientSecurity_FWD_DEFINED__
+typedef interface IClientSecurity IClientSecurity;
+#endif
+
+#ifndef __IServerSecurity_FWD_DEFINED__
+#define __IServerSecurity_FWD_DEFINED__
+typedef interface IServerSecurity IServerSecurity;
+#endif
+
+#ifndef __IAsyncSetup_FWD_DEFINED__
+#define __IAsyncSetup_FWD_DEFINED__
+typedef interface IAsyncSetup IAsyncSetup;
+#endif
+
+#ifndef __IDirectWriterLock_FWD_DEFINED__
+#define __IDirectWriterLock_FWD_DEFINED__
+typedef interface IDirectWriterLock IDirectWriterLock;
+#endif
+
+#ifndef __ISynchronize_FWD_DEFINED__
+#define __ISynchronize_FWD_DEFINED__
+typedef interface ISynchronize ISynchronize;
+#endif
+
+#ifndef __ISynchronizeHandle_FWD_DEFINED__
+#define __ISynchronizeHandle_FWD_DEFINED__
+typedef interface ISynchronizeHandle ISynchronizeHandle;
+#endif
+
+#ifndef __ISynchronizeEvent_FWD_DEFINED__
+#define __ISynchronizeEvent_FWD_DEFINED__
+typedef interface ISynchronizeEvent ISynchronizeEvent;
+#endif
+
+#ifndef __ISynchronizeContainer_FWD_DEFINED__
+#define __ISynchronizeContainer_FWD_DEFINED__
+typedef interface ISynchronizeContainer ISynchronizeContainer;
+#endif
+
+#ifndef __ISynchronizeMutex_FWD_DEFINED__
+#define __ISynchronizeMutex_FWD_DEFINED__
+typedef interface ISynchronizeMutex ISynchronizeMutex;
+#endif
+
+#ifndef __ICancelMethodCalls_FWD_DEFINED__
+#define __ICancelMethodCalls_FWD_DEFINED__
+typedef interface ICancelMethodCalls ICancelMethodCalls;
+#endif
+
+#ifndef __IAsyncManager_FWD_DEFINED__
+#define __IAsyncManager_FWD_DEFINED__
+typedef interface IAsyncManager IAsyncManager;
+#endif
+
+#ifndef __ICallFactory_FWD_DEFINED__
+#define __ICallFactory_FWD_DEFINED__
+typedef interface ICallFactory ICallFactory;
+#endif
+
+#ifndef __IRpcOptions_FWD_DEFINED__
+#define __IRpcOptions_FWD_DEFINED__
+typedef interface IRpcOptions IRpcOptions;
+#endif
+
+#ifndef __IRpcHelper_FWD_DEFINED__
+#define __IRpcHelper_FWD_DEFINED__
+typedef interface IRpcHelper IRpcHelper;
+#endif
+
+#ifndef __IReleaseMarshalBuffers_FWD_DEFINED__
+#define __IReleaseMarshalBuffers_FWD_DEFINED__
+typedef interface IReleaseMarshalBuffers IReleaseMarshalBuffers;
+#endif
+
+#ifndef __IWaitMultiple_FWD_DEFINED__
+#define __IWaitMultiple_FWD_DEFINED__
+typedef interface IWaitMultiple IWaitMultiple;
+#endif
+
+#ifndef __IUrlMon_FWD_DEFINED__
+#define __IUrlMon_FWD_DEFINED__
+typedef interface IUrlMon IUrlMon;
+#endif
+
+#ifndef __IForegroundTransfer_FWD_DEFINED__
+#define __IForegroundTransfer_FWD_DEFINED__
+typedef interface IForegroundTransfer IForegroundTransfer;
+#endif
+
+#ifndef __IAddrTrackingControl_FWD_DEFINED__
+#define __IAddrTrackingControl_FWD_DEFINED__
+typedef interface IAddrTrackingControl IAddrTrackingControl;
+#endif
+
+#ifndef __IAddrExclusionControl_FWD_DEFINED__
+#define __IAddrExclusionControl_FWD_DEFINED__
+typedef interface IAddrExclusionControl IAddrExclusionControl;
+#endif
+
+#ifndef __IComThreadingInfo_FWD_DEFINED__
+#define __IComThreadingInfo_FWD_DEFINED__
+typedef interface IComThreadingInfo IComThreadingInfo;
+#endif
+
+#ifndef __IProcessInitControl_FWD_DEFINED__
+#define __IProcessInitControl_FWD_DEFINED__
+typedef interface IProcessInitControl IProcessInitControl;
+#endif
+
+#ifndef __IInitializeSpy_FWD_DEFINED__
+#define __IInitializeSpy_FWD_DEFINED__
+typedef interface IInitializeSpy IInitializeSpy;
+#endif
+
+#ifndef __IThumbnailExtractor_FWD_DEFINED__
+#define __IThumbnailExtractor_FWD_DEFINED__
+typedef interface IThumbnailExtractor IThumbnailExtractor;
+#endif
+
+#ifndef __IEnumContextProps_FWD_DEFINED__
+#define __IEnumContextProps_FWD_DEFINED__
+typedef interface IEnumContextProps IEnumContextProps;
+#endif
+
+#ifndef __IContext_FWD_DEFINED__
+#define __IContext_FWD_DEFINED__
+typedef interface IContext IContext;
+#endif
+
+#ifndef __IObjContext_FWD_DEFINED__
+#define __IObjContext_FWD_DEFINED__
+typedef interface IObjContext IObjContext;
+#endif
+
+
+#ifndef __IStream_FWD_DEFINED__
+#define __IStream_FWD_DEFINED__
+typedef interface IStream IStream;
+#endif
+
+#ifndef __IEnumString_FWD_DEFINED__
+#define __IEnumString_FWD_DEFINED__
+typedef interface IEnumString IEnumString;
+#endif
+
+#ifndef __IRunningObjectTable_FWD_DEFINED__
+#define __IRunningObjectTable_FWD_DEFINED__
+typedef interface IRunningObjectTable IRunningObjectTable;
+#endif
+
+#ifndef __IMoniker_FWD_DEFINED__
+#define __IMoniker_FWD_DEFINED__
+typedef interface IMoniker IMoniker;
+#endif
+
+#ifndef __IAdviseSink_FWD_DEFINED__
+#define __IAdviseSink_FWD_DEFINED__
+typedef interface IAdviseSink IAdviseSink;
+#endif
+
+#ifndef __IAsyncManager_FWD_DEFINED__
+#define __IAsyncManager_FWD_DEFINED__
+typedef interface IAsyncManager IAsyncManager;
+#endif
+
+#ifndef __ISynchronize_FWD_DEFINED__
+#define __ISynchronize_FWD_DEFINED__
+typedef interface ISynchronize ISynchronize;
+#endif
+
+typedef struct _COSERVERINFO {
+ DWORD dwReserved1;
+ LPWSTR pwszName;
+ COAUTHINFO *pAuthInfo;
+ DWORD dwReserved2;
+} COSERVERINFO;
+/*****************************************************************************
+ * IMarshal interface
+ */
+#ifndef __IMarshal_INTERFACE_DEFINED__
+#define __IMarshal_INTERFACE_DEFINED__
+
+typedef IMarshal *LPMARSHAL;
+DEFINE_GUID(IID_IMarshal, 0x00000003, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMarshal : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetUnmarshalClass(
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ CLSID *pCid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMarshalSizeMax(
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ DWORD *pSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MarshalInterface(
+ IStream *pStm,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnmarshalInterface(
+ IStream *pStm,
+ REFIID riid,
+ void **ppv) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReleaseMarshalData(
+ IStream *pStm) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DisconnectObject(
+ DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IMarshalVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMarshal* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMarshal* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMarshal* This);
+
+ /*** IMarshal methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
+ IMarshal* This,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ CLSID *pCid);
+
+ HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
+ IMarshal* This,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ DWORD *pSize);
+
+ HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
+ IMarshal* This,
+ IStream *pStm,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags);
+
+ HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
+ IMarshal* This,
+ IStream *pStm,
+ REFIID riid,
+ void **ppv);
+
+ HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
+ IMarshal* This,
+ IStream *pStm);
+
+ HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
+ IMarshal* This,
+ DWORD dwReserved);
+
+ END_INTERFACE
+} IMarshalVtbl;
+interface IMarshal {
+ CONST_VTBL IMarshalVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMarshal_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMarshal_Release(This) (This)->lpVtbl->Release(This)
+/*** IMarshal methods ***/
+#define IMarshal_GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid) (This)->lpVtbl->GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid)
+#define IMarshal_GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize) (This)->lpVtbl->GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize)
+#define IMarshal_MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags) (This)->lpVtbl->MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags)
+#define IMarshal_UnmarshalInterface(This,pStm,riid,ppv) (This)->lpVtbl->UnmarshalInterface(This,pStm,riid,ppv)
+#define IMarshal_ReleaseMarshalData(This,pStm) (This)->lpVtbl->ReleaseMarshalData(This,pStm)
+#define IMarshal_DisconnectObject(This,dwReserved) (This)->lpVtbl->DisconnectObject(This,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMarshal_GetUnmarshalClass_Proxy(
+ IMarshal* This,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ CLSID *pCid);
+void __RPC_STUB IMarshal_GetUnmarshalClass_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_GetMarshalSizeMax_Proxy(
+ IMarshal* This,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ DWORD *pSize);
+void __RPC_STUB IMarshal_GetMarshalSizeMax_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_MarshalInterface_Proxy(
+ IMarshal* This,
+ IStream *pStm,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags);
+void __RPC_STUB IMarshal_MarshalInterface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_UnmarshalInterface_Proxy(
+ IMarshal* This,
+ IStream *pStm,
+ REFIID riid,
+ void **ppv);
+void __RPC_STUB IMarshal_UnmarshalInterface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_ReleaseMarshalData_Proxy(
+ IMarshal* This,
+ IStream *pStm);
+void __RPC_STUB IMarshal_ReleaseMarshalData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMarshal_DisconnectObject_Proxy(
+ IMarshal* This,
+ DWORD dwReserved);
+void __RPC_STUB IMarshal_DisconnectObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IMarshal_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMarshal2 interface
+ */
+#ifndef __IMarshal2_INTERFACE_DEFINED__
+#define __IMarshal2_INTERFACE_DEFINED__
+
+typedef IMarshal2 *LPMARSHAL2;
+DEFINE_GUID(IID_IMarshal2, 0x000001cf, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMarshal2 : public IMarshal
+{
+};
+#else
+typedef struct IMarshal2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMarshal2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMarshal2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMarshal2* This);
+
+ /*** IMarshal methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetUnmarshalClass)(
+ IMarshal2* This,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ CLSID *pCid);
+
+ HRESULT (STDMETHODCALLTYPE *GetMarshalSizeMax)(
+ IMarshal2* This,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags,
+ DWORD *pSize);
+
+ HRESULT (STDMETHODCALLTYPE *MarshalInterface)(
+ IMarshal2* This,
+ IStream *pStm,
+ REFIID riid,
+ void *pv,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ DWORD mshlflags);
+
+ HRESULT (STDMETHODCALLTYPE *UnmarshalInterface)(
+ IMarshal2* This,
+ IStream *pStm,
+ REFIID riid,
+ void **ppv);
+
+ HRESULT (STDMETHODCALLTYPE *ReleaseMarshalData)(
+ IMarshal2* This,
+ IStream *pStm);
+
+ HRESULT (STDMETHODCALLTYPE *DisconnectObject)(
+ IMarshal2* This,
+ DWORD dwReserved);
+
+ END_INTERFACE
+} IMarshal2Vtbl;
+interface IMarshal2 {
+ CONST_VTBL IMarshal2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMarshal2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMarshal2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMarshal2_Release(This) (This)->lpVtbl->Release(This)
+/*** IMarshal methods ***/
+#define IMarshal2_GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid) (This)->lpVtbl->GetUnmarshalClass(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pCid)
+#define IMarshal2_GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize) (This)->lpVtbl->GetMarshalSizeMax(This,riid,pv,dwDestContext,pvDestContext,mshlflags,pSize)
+#define IMarshal2_MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags) (This)->lpVtbl->MarshalInterface(This,pStm,riid,pv,dwDestContext,pvDestContext,mshlflags)
+#define IMarshal2_UnmarshalInterface(This,pStm,riid,ppv) (This)->lpVtbl->UnmarshalInterface(This,pStm,riid,ppv)
+#define IMarshal2_ReleaseMarshalData(This,pStm) (This)->lpVtbl->ReleaseMarshalData(This,pStm)
+#define IMarshal2_DisconnectObject(This,dwReserved) (This)->lpVtbl->DisconnectObject(This,dwReserved)
+#endif
+
+#endif
+
+
+#endif /* __IMarshal2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStdMarshalInfo interface
+ */
+#ifndef __IStdMarshalInfo_INTERFACE_DEFINED__
+#define __IStdMarshalInfo_INTERFACE_DEFINED__
+
+typedef IStdMarshalInfo *LPSTDMARSHALINFO;
+DEFINE_GUID(IID_IStdMarshalInfo, 0x00000018, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IStdMarshalInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetClassForHandler(
+ DWORD dwDestContext,
+ void *pvDestContext,
+ CLSID *pClsid) = 0;
+
+};
+#else
+typedef struct IStdMarshalInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IStdMarshalInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IStdMarshalInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IStdMarshalInfo* This);
+
+ /*** IStdMarshalInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassForHandler)(
+ IStdMarshalInfo* This,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ CLSID *pClsid);
+
+ END_INTERFACE
+} IStdMarshalInfoVtbl;
+interface IStdMarshalInfo {
+ CONST_VTBL IStdMarshalInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IStdMarshalInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStdMarshalInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStdMarshalInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IStdMarshalInfo methods ***/
+#define IStdMarshalInfo_GetClassForHandler(This,dwDestContext,pvDestContext,pClsid) (This)->lpVtbl->GetClassForHandler(This,dwDestContext,pvDestContext,pClsid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IStdMarshalInfo_GetClassForHandler_Proxy(
+ IStdMarshalInfo* This,
+ DWORD dwDestContext,
+ void *pvDestContext,
+ CLSID *pClsid);
+void __RPC_STUB IStdMarshalInfo_GetClassForHandler_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IStdMarshalInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IExternalConnection interface
+ */
+#ifndef __IExternalConnection_INTERFACE_DEFINED__
+#define __IExternalConnection_INTERFACE_DEFINED__
+
+typedef IExternalConnection *LPEXTERNALCONNECTION;
+typedef enum tagEXTCONN {
+ EXTCONN_STRONG = 0x1,
+ EXTCONN_WEAK = 0x2,
+ EXTCONN_CALLABLE = 0x4
+} EXTCONN;
+DEFINE_GUID(IID_IExternalConnection, 0x00000019, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IExternalConnection : public IUnknown
+{
+ virtual DWORD STDMETHODCALLTYPE AddConnection(
+ DWORD extconn,
+ DWORD reserved) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE ReleaseConnection(
+ DWORD extconn,
+ DWORD reserved,
+ BOOL fLastReleaseCloses) = 0;
+
+};
+#else
+typedef struct IExternalConnectionVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IExternalConnection* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IExternalConnection* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IExternalConnection* This);
+
+ /*** IExternalConnection methods ***/
+ DWORD (STDMETHODCALLTYPE *AddConnection)(
+ IExternalConnection* This,
+ DWORD extconn,
+ DWORD reserved);
+
+ DWORD (STDMETHODCALLTYPE *ReleaseConnection)(
+ IExternalConnection* This,
+ DWORD extconn,
+ DWORD reserved,
+ BOOL fLastReleaseCloses);
+
+ END_INTERFACE
+} IExternalConnectionVtbl;
+interface IExternalConnection {
+ CONST_VTBL IExternalConnectionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IExternalConnection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IExternalConnection_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IExternalConnection_Release(This) (This)->lpVtbl->Release(This)
+/*** IExternalConnection methods ***/
+#define IExternalConnection_AddConnection(This,extconn,reserved) (This)->lpVtbl->AddConnection(This,extconn,reserved)
+#define IExternalConnection_ReleaseConnection(This,extconn,reserved,fLastReleaseCloses) (This)->lpVtbl->ReleaseConnection(This,extconn,reserved,fLastReleaseCloses)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IExternalConnection_AddConnection_Proxy(
+ IExternalConnection* This,
+ DWORD extconn,
+ DWORD reserved);
+void __RPC_STUB IExternalConnection_AddConnection_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IExternalConnection_ReleaseConnection_Proxy(
+ IExternalConnection* This,
+ DWORD extconn,
+ DWORD reserved,
+ BOOL fLastReleaseCloses);
+void __RPC_STUB IExternalConnection_ReleaseConnection_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IExternalConnection_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMultiQI interface
+ */
+#ifndef __IMultiQI_INTERFACE_DEFINED__
+#define __IMultiQI_INTERFACE_DEFINED__
+
+typedef IMultiQI *LPMULTIQI;
+typedef struct tagMULTI_QI {
+ const IID *pIID;
+ IUnknown *pItf;
+ HRESULT hr;
+} MULTI_QI;
+DEFINE_GUID(IID_IMultiQI, 0x00000020, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMultiQI : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryMultipleInterfaces(
+ ULONG cMQIs,
+ MULTI_QI *pMQIs) = 0;
+
+};
+#else
+typedef struct IMultiQIVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMultiQI* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMultiQI* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMultiQI* This);
+
+ /*** IMultiQI methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryMultipleInterfaces)(
+ IMultiQI* This,
+ ULONG cMQIs,
+ MULTI_QI *pMQIs);
+
+ END_INTERFACE
+} IMultiQIVtbl;
+interface IMultiQI {
+ CONST_VTBL IMultiQIVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMultiQI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMultiQI_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMultiQI_Release(This) (This)->lpVtbl->Release(This)
+/*** IMultiQI methods ***/
+#define IMultiQI_QueryMultipleInterfaces(This,cMQIs,pMQIs) (This)->lpVtbl->QueryMultipleInterfaces(This,cMQIs,pMQIs)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMultiQI_QueryMultipleInterfaces_Proxy(
+ IMultiQI* This,
+ ULONG cMQIs,
+ MULTI_QI *pMQIs);
+void __RPC_STUB IMultiQI_QueryMultipleInterfaces_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IMultiQI_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMalloc interface
+ */
+#ifndef __IMalloc_INTERFACE_DEFINED__
+#define __IMalloc_INTERFACE_DEFINED__
+
+typedef IMalloc *LPMALLOC;
+DEFINE_GUID(IID_IMalloc, 0x00000002, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMalloc : public IUnknown
+{
+ virtual LPVOID STDMETHODCALLTYPE Alloc(
+ ULONG cb) = 0;
+
+ virtual LPVOID STDMETHODCALLTYPE Realloc(
+ LPVOID pv,
+ ULONG cb) = 0;
+
+ virtual void STDMETHODCALLTYPE Free(
+ LPVOID pv) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE GetSize(
+ LPVOID pv) = 0;
+
+ virtual int STDMETHODCALLTYPE DidAlloc(
+ LPVOID pv) = 0;
+
+ virtual void STDMETHODCALLTYPE HeapMinimize(
+ ) = 0;
+
+};
+#else
+typedef struct IMallocVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMalloc* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMalloc* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMalloc* This);
+
+ /*** IMalloc methods ***/
+ LPVOID (STDMETHODCALLTYPE *Alloc)(
+ IMalloc* This,
+ ULONG cb);
+
+ LPVOID (STDMETHODCALLTYPE *Realloc)(
+ IMalloc* This,
+ LPVOID pv,
+ ULONG cb);
+
+ void (STDMETHODCALLTYPE *Free)(
+ IMalloc* This,
+ LPVOID pv);
+
+ ULONG (STDMETHODCALLTYPE *GetSize)(
+ IMalloc* This,
+ LPVOID pv);
+
+ int (STDMETHODCALLTYPE *DidAlloc)(
+ IMalloc* This,
+ LPVOID pv);
+
+ void (STDMETHODCALLTYPE *HeapMinimize)(
+ IMalloc* This);
+
+ END_INTERFACE
+} IMallocVtbl;
+interface IMalloc {
+ CONST_VTBL IMallocVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMalloc_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMalloc_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMalloc_Release(This) (This)->lpVtbl->Release(This)
+/*** IMalloc methods ***/
+#define IMalloc_Alloc(This,cb) (This)->lpVtbl->Alloc(This,cb)
+#define IMalloc_Realloc(This,pv,cb) (This)->lpVtbl->Realloc(This,pv,cb)
+#define IMalloc_Free(This,pv) (This)->lpVtbl->Free(This,pv)
+#define IMalloc_GetSize(This,pv) (This)->lpVtbl->GetSize(This,pv)
+#define IMalloc_DidAlloc(This,pv) (This)->lpVtbl->DidAlloc(This,pv)
+#define IMalloc_HeapMinimize(This) (This)->lpVtbl->HeapMinimize(This)
+#endif
+
+#endif
+
+LPVOID STDMETHODCALLTYPE IMalloc_Alloc_Proxy(
+ IMalloc* This,
+ ULONG cb);
+void __RPC_STUB IMalloc_Alloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMalloc_Realloc_Proxy(
+ IMalloc* This,
+ LPVOID pv,
+ ULONG cb);
+void __RPC_STUB IMalloc_Realloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMalloc_Free_Proxy(
+ IMalloc* This,
+ LPVOID pv);
+void __RPC_STUB IMalloc_Free_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IMalloc_GetSize_Proxy(
+ IMalloc* This,
+ LPVOID pv);
+void __RPC_STUB IMalloc_GetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+int STDMETHODCALLTYPE IMalloc_DidAlloc_Proxy(
+ IMalloc* This,
+ LPVOID pv);
+void __RPC_STUB IMalloc_DidAlloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMalloc_HeapMinimize_Proxy(
+ IMalloc* This);
+void __RPC_STUB IMalloc_HeapMinimize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IMalloc_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMallocSpy interface
+ */
+#ifndef __IMallocSpy_INTERFACE_DEFINED__
+#define __IMallocSpy_INTERFACE_DEFINED__
+
+typedef IMallocSpy *LPMALLOCSPY;
+DEFINE_GUID(IID_IMallocSpy, 0x0000001d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMallocSpy : public IUnknown
+{
+ virtual ULONG STDMETHODCALLTYPE PreAlloc(
+ ULONG cbRequest) = 0;
+
+ virtual LPVOID STDMETHODCALLTYPE PostAlloc(
+ LPVOID pActual) = 0;
+
+ virtual LPVOID STDMETHODCALLTYPE PreFree(
+ LPVOID pRequest,
+ BOOL fSpyed) = 0;
+
+ virtual void STDMETHODCALLTYPE PostFree(
+ BOOL fSpyed) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE PreRealloc(
+ LPVOID pRequest,
+ ULONG cbRequest,
+ LPVOID *ppNewRequest,
+ BOOL fSpyed) = 0;
+
+ virtual LPVOID STDMETHODCALLTYPE PostRealloc(
+ LPVOID pActual,
+ BOOL fSpyed) = 0;
+
+ virtual LPVOID STDMETHODCALLTYPE PreGetSize(
+ LPVOID pRequest,
+ BOOL fSpyed) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE PostGetSize(
+ ULONG cbActual,
+ BOOL fSpyed) = 0;
+
+ virtual LPVOID STDMETHODCALLTYPE PreDidAlloc(
+ LPVOID pRequest,
+ BOOL fSpyed) = 0;
+
+ virtual int STDMETHODCALLTYPE PostDidAlloc(
+ LPVOID pRequest,
+ BOOL fSpyed,
+ int fActual) = 0;
+
+ virtual void STDMETHODCALLTYPE PreHeapMinimize(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE PostHeapMinimize(
+ ) = 0;
+
+};
+#else
+typedef struct IMallocSpyVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMallocSpy* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMallocSpy* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMallocSpy* This);
+
+ /*** IMallocSpy methods ***/
+ ULONG (STDMETHODCALLTYPE *PreAlloc)(
+ IMallocSpy* This,
+ ULONG cbRequest);
+
+ LPVOID (STDMETHODCALLTYPE *PostAlloc)(
+ IMallocSpy* This,
+ LPVOID pActual);
+
+ LPVOID (STDMETHODCALLTYPE *PreFree)(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed);
+
+ void (STDMETHODCALLTYPE *PostFree)(
+ IMallocSpy* This,
+ BOOL fSpyed);
+
+ ULONG (STDMETHODCALLTYPE *PreRealloc)(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ ULONG cbRequest,
+ LPVOID *ppNewRequest,
+ BOOL fSpyed);
+
+ LPVOID (STDMETHODCALLTYPE *PostRealloc)(
+ IMallocSpy* This,
+ LPVOID pActual,
+ BOOL fSpyed);
+
+ LPVOID (STDMETHODCALLTYPE *PreGetSize)(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed);
+
+ ULONG (STDMETHODCALLTYPE *PostGetSize)(
+ IMallocSpy* This,
+ ULONG cbActual,
+ BOOL fSpyed);
+
+ LPVOID (STDMETHODCALLTYPE *PreDidAlloc)(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed);
+
+ int (STDMETHODCALLTYPE *PostDidAlloc)(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed,
+ int fActual);
+
+ void (STDMETHODCALLTYPE *PreHeapMinimize)(
+ IMallocSpy* This);
+
+ void (STDMETHODCALLTYPE *PostHeapMinimize)(
+ IMallocSpy* This);
+
+ END_INTERFACE
+} IMallocSpyVtbl;
+interface IMallocSpy {
+ CONST_VTBL IMallocSpyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMallocSpy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMallocSpy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMallocSpy_Release(This) (This)->lpVtbl->Release(This)
+/*** IMallocSpy methods ***/
+#define IMallocSpy_PreAlloc(This,cbRequest) (This)->lpVtbl->PreAlloc(This,cbRequest)
+#define IMallocSpy_PostAlloc(This,pActual) (This)->lpVtbl->PostAlloc(This,pActual)
+#define IMallocSpy_PreFree(This,pRequest,fSpyed) (This)->lpVtbl->PreFree(This,pRequest,fSpyed)
+#define IMallocSpy_PostFree(This,fSpyed) (This)->lpVtbl->PostFree(This,fSpyed)
+#define IMallocSpy_PreRealloc(This,pRequest,cbRequest,ppNewRequest,fSpyed) (This)->lpVtbl->PreRealloc(This,pRequest,cbRequest,ppNewRequest,fSpyed)
+#define IMallocSpy_PostRealloc(This,pActual,fSpyed) (This)->lpVtbl->PostRealloc(This,pActual,fSpyed)
+#define IMallocSpy_PreGetSize(This,pRequest,fSpyed) (This)->lpVtbl->PreGetSize(This,pRequest,fSpyed)
+#define IMallocSpy_PostGetSize(This,cbActual,fSpyed) (This)->lpVtbl->PostGetSize(This,cbActual,fSpyed)
+#define IMallocSpy_PreDidAlloc(This,pRequest,fSpyed) (This)->lpVtbl->PreDidAlloc(This,pRequest,fSpyed)
+#define IMallocSpy_PostDidAlloc(This,pRequest,fSpyed,fActual) (This)->lpVtbl->PostDidAlloc(This,pRequest,fSpyed,fActual)
+#define IMallocSpy_PreHeapMinimize(This) (This)->lpVtbl->PreHeapMinimize(This)
+#define IMallocSpy_PostHeapMinimize(This) (This)->lpVtbl->PostHeapMinimize(This)
+#endif
+
+#endif
+
+ULONG STDMETHODCALLTYPE IMallocSpy_PreAlloc_Proxy(
+ IMallocSpy* This,
+ ULONG cbRequest);
+void __RPC_STUB IMallocSpy_PreAlloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PostAlloc_Proxy(
+ IMallocSpy* This,
+ LPVOID pActual);
+void __RPC_STUB IMallocSpy_PostAlloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PreFree_Proxy(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreFree_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMallocSpy_PostFree_Proxy(
+ IMallocSpy* This,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PostFree_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IMallocSpy_PreRealloc_Proxy(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ ULONG cbRequest,
+ LPVOID *ppNewRequest,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreRealloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PostRealloc_Proxy(
+ IMallocSpy* This,
+ LPVOID pActual,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PostRealloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PreGetSize_Proxy(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreGetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IMallocSpy_PostGetSize_Proxy(
+ IMallocSpy* This,
+ ULONG cbActual,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PostGetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+LPVOID STDMETHODCALLTYPE IMallocSpy_PreDidAlloc_Proxy(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed);
+void __RPC_STUB IMallocSpy_PreDidAlloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+int STDMETHODCALLTYPE IMallocSpy_PostDidAlloc_Proxy(
+ IMallocSpy* This,
+ LPVOID pRequest,
+ BOOL fSpyed,
+ int fActual);
+void __RPC_STUB IMallocSpy_PostDidAlloc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMallocSpy_PreHeapMinimize_Proxy(
+ IMallocSpy* This);
+void __RPC_STUB IMallocSpy_PreHeapMinimize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IMallocSpy_PostHeapMinimize_Proxy(
+ IMallocSpy* This);
+void __RPC_STUB IMallocSpy_PostHeapMinimize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IMallocSpy_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternalUnknown interface
+ */
+#ifndef __IInternalUnknown_INTERFACE_DEFINED__
+#define __IInternalUnknown_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternalUnknown, 0x00000021, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternalUnknown : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryInternalInterface(
+ REFIID riid,
+ void **ppv) = 0;
+
+};
+#else
+typedef struct IInternalUnknownVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternalUnknown* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternalUnknown* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternalUnknown* This);
+
+ /*** IInternalUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInternalInterface)(
+ IInternalUnknown* This,
+ REFIID riid,
+ void **ppv);
+
+ END_INTERFACE
+} IInternalUnknownVtbl;
+interface IInternalUnknown {
+ CONST_VTBL IInternalUnknownVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternalUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternalUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternalUnknown_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternalUnknown methods ***/
+#define IInternalUnknown_QueryInternalInterface(This,riid,ppv) (This)->lpVtbl->QueryInternalInterface(This,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternalUnknown_QueryInternalInterface_Proxy(
+ IInternalUnknown* This,
+ REFIID riid,
+ void **ppv);
+void __RPC_STUB IInternalUnknown_QueryInternalInterface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternalUnknown_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumUnknown interface
+ */
+#ifndef __IEnumUnknown_INTERFACE_DEFINED__
+#define __IEnumUnknown_INTERFACE_DEFINED__
+
+typedef IEnumUnknown *LPENUMUNKNOWN;
+DEFINE_GUID(IID_IEnumUnknown, 0x00000100, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumUnknown : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ IUnknown **rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumUnknown **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumUnknownVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumUnknown* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumUnknown* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumUnknown* This);
+
+ /*** IEnumUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumUnknown* This,
+ ULONG celt,
+ IUnknown **rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumUnknown* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumUnknown* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumUnknown* This,
+ IEnumUnknown **ppenum);
+
+ END_INTERFACE
+} IEnumUnknownVtbl;
+interface IEnumUnknown {
+ CONST_VTBL IEnumUnknownVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumUnknown_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumUnknown methods ***/
+#define IEnumUnknown_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumUnknown_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumUnknown_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumUnknown_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumUnknown_RemoteNext_Proxy(
+ IEnumUnknown* This,
+ ULONG celt,
+ IUnknown **rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumUnknown_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Skip_Proxy(
+ IEnumUnknown* This,
+ ULONG celt);
+void __RPC_STUB IEnumUnknown_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Reset_Proxy(
+ IEnumUnknown* This);
+void __RPC_STUB IEnumUnknown_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumUnknown_Clone_Proxy(
+ IEnumUnknown* This,
+ IEnumUnknown **ppenum);
+void __RPC_STUB IEnumUnknown_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumUnknown_Next_Proxy(
+ IEnumUnknown* This,
+ ULONG celt,
+ IUnknown **rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumUnknown_Next_Stub(
+ IEnumUnknown* This,
+ ULONG celt,
+ IUnknown **rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumUnknown_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISurrogate interface
+ */
+#ifndef __ISurrogate_INTERFACE_DEFINED__
+#define __ISurrogate_INTERFACE_DEFINED__
+
+typedef ISurrogate *LPSURROGATE;
+DEFINE_GUID(IID_ISurrogate, 0x00000022, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISurrogate : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE LoadDllServer(
+ REFCLSID Clsid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FreeSurrogate(
+ ) = 0;
+
+};
+#else
+typedef struct ISurrogateVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISurrogate* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISurrogate* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISurrogate* This);
+
+ /*** ISurrogate methods ***/
+ HRESULT (STDMETHODCALLTYPE *LoadDllServer)(
+ ISurrogate* This,
+ REFCLSID Clsid);
+
+ HRESULT (STDMETHODCALLTYPE *FreeSurrogate)(
+ ISurrogate* This);
+
+ END_INTERFACE
+} ISurrogateVtbl;
+interface ISurrogate {
+ CONST_VTBL ISurrogateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISurrogate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISurrogate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISurrogate_Release(This) (This)->lpVtbl->Release(This)
+/*** ISurrogate methods ***/
+#define ISurrogate_LoadDllServer(This,Clsid) (This)->lpVtbl->LoadDllServer(This,Clsid)
+#define ISurrogate_FreeSurrogate(This) (This)->lpVtbl->FreeSurrogate(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISurrogate_LoadDllServer_Proxy(
+ ISurrogate* This,
+ REFCLSID Clsid);
+void __RPC_STUB ISurrogate_LoadDllServer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISurrogate_FreeSurrogate_Proxy(
+ ISurrogate* This);
+void __RPC_STUB ISurrogate_FreeSurrogate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISurrogate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IGlobalInterfaceTable interface
+ */
+#ifndef __IGlobalInterfaceTable_INTERFACE_DEFINED__
+#define __IGlobalInterfaceTable_INTERFACE_DEFINED__
+
+typedef IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
+DEFINE_GUID(IID_IGlobalInterfaceTable, 0x00000146, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IGlobalInterfaceTable : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE RegisterInterfaceInGlobal(
+ IUnknown *pUnk,
+ REFIID riid,
+ DWORD *pdwCookie) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RevokeInterfaceFromGlobal(
+ DWORD dwCookie) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetInterfaceFromGlobal(
+ DWORD dwCookie,
+ REFIID riid,
+ void **ppv) = 0;
+
+};
+#else
+typedef struct IGlobalInterfaceTableVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IGlobalInterfaceTable* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IGlobalInterfaceTable* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IGlobalInterfaceTable* This);
+
+ /*** IGlobalInterfaceTable methods ***/
+ HRESULT (STDMETHODCALLTYPE *RegisterInterfaceInGlobal)(
+ IGlobalInterfaceTable* This,
+ IUnknown *pUnk,
+ REFIID riid,
+ DWORD *pdwCookie);
+
+ HRESULT (STDMETHODCALLTYPE *RevokeInterfaceFromGlobal)(
+ IGlobalInterfaceTable* This,
+ DWORD dwCookie);
+
+ HRESULT (STDMETHODCALLTYPE *GetInterfaceFromGlobal)(
+ IGlobalInterfaceTable* This,
+ DWORD dwCookie,
+ REFIID riid,
+ void **ppv);
+
+ END_INTERFACE
+} IGlobalInterfaceTableVtbl;
+interface IGlobalInterfaceTable {
+ CONST_VTBL IGlobalInterfaceTableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IGlobalInterfaceTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IGlobalInterfaceTable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IGlobalInterfaceTable_Release(This) (This)->lpVtbl->Release(This)
+/*** IGlobalInterfaceTable methods ***/
+#define IGlobalInterfaceTable_RegisterInterfaceInGlobal(This,pUnk,riid,pdwCookie) (This)->lpVtbl->RegisterInterfaceInGlobal(This,pUnk,riid,pdwCookie)
+#define IGlobalInterfaceTable_RevokeInterfaceFromGlobal(This,dwCookie) (This)->lpVtbl->RevokeInterfaceFromGlobal(This,dwCookie)
+#define IGlobalInterfaceTable_GetInterfaceFromGlobal(This,dwCookie,riid,ppv) (This)->lpVtbl->GetInterfaceFromGlobal(This,dwCookie,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_RegisterInterfaceInGlobal_Proxy(
+ IGlobalInterfaceTable* This,
+ IUnknown *pUnk,
+ REFIID riid,
+ DWORD *pdwCookie);
+void __RPC_STUB IGlobalInterfaceTable_RegisterInterfaceInGlobal_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Proxy(
+ IGlobalInterfaceTable* This,
+ DWORD dwCookie);
+void __RPC_STUB IGlobalInterfaceTable_RevokeInterfaceFromGlobal_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IGlobalInterfaceTable_GetInterfaceFromGlobal_Proxy(
+ IGlobalInterfaceTable* This,
+ DWORD dwCookie,
+ REFIID riid,
+ void **ppv);
+void __RPC_STUB IGlobalInterfaceTable_GetInterfaceFromGlobal_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IGlobalInterfaceTable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBindCtx interface
+ */
+#ifndef __IBindCtx_INTERFACE_DEFINED__
+#define __IBindCtx_INTERFACE_DEFINED__
+
+typedef IBindCtx *LPBINDCTX;
+typedef IBindCtx *LPBC;
+typedef struct tagBIND_OPTS {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+} BIND_OPTS;
+typedef struct tagBIND_OPTS *LPBIND_OPTS;
+typedef struct tagBIND_OPTS2 {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+ DWORD dwTrackFlags;
+ DWORD dwClassContext;
+ LCID locale;
+ COSERVERINFO *pServerInfo;
+} BIND_OPTS2;
+typedef struct tagBIND_OPTS2 *LPBIND_OPTS2;
+typedef enum tagBIND_FLAGS {
+ BIND_MAYBOTHERUSER = 1,
+ BIND_JUSTTESTEXISTENCE = 2
+} BIND_FLAGS;
+DEFINE_GUID(IID_IBindCtx, 0x0000000e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindCtx : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE RegisterObjectBound(
+ IUnknown *punk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RevokeObjectBound(
+ IUnknown *punk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReleaseBoundObjects(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetBindOptions(
+ BIND_OPTS *pbindopts) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBindOptions(
+ BIND_OPTS *pbindopts) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRunningObjectTable(
+ IRunningObjectTable **pprot) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterObjectParam(
+ LPOLESTR pszKey,
+ IUnknown *punk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetObjectParam(
+ LPOLESTR pszKey,
+ IUnknown **ppunk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumObjectParam(
+ IEnumString **ppenum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RevokeObjectParam(
+ LPOLESTR pszKey) = 0;
+
+};
+#else
+typedef struct IBindCtxVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBindCtx* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBindCtx* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBindCtx* This);
+
+ /*** IBindCtx methods ***/
+ HRESULT (STDMETHODCALLTYPE *RegisterObjectBound)(
+ IBindCtx* This,
+ IUnknown *punk);
+
+ HRESULT (STDMETHODCALLTYPE *RevokeObjectBound)(
+ IBindCtx* This,
+ IUnknown *punk);
+
+ HRESULT (STDMETHODCALLTYPE *ReleaseBoundObjects)(
+ IBindCtx* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetBindOptions)(
+ IBindCtx* This,
+ BIND_OPTS *pbindopts);
+
+ HRESULT (STDMETHODCALLTYPE *GetBindOptions)(
+ IBindCtx* This,
+ BIND_OPTS *pbindopts);
+
+ HRESULT (STDMETHODCALLTYPE *GetRunningObjectTable)(
+ IBindCtx* This,
+ IRunningObjectTable **pprot);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterObjectParam)(
+ IBindCtx* This,
+ LPOLESTR pszKey,
+ IUnknown *punk);
+
+ HRESULT (STDMETHODCALLTYPE *GetObjectParam)(
+ IBindCtx* This,
+ LPOLESTR pszKey,
+ IUnknown **ppunk);
+
+ HRESULT (STDMETHODCALLTYPE *EnumObjectParam)(
+ IBindCtx* This,
+ IEnumString **ppenum);
+
+ HRESULT (STDMETHODCALLTYPE *RevokeObjectParam)(
+ IBindCtx* This,
+ LPOLESTR pszKey);
+
+ END_INTERFACE
+} IBindCtxVtbl;
+interface IBindCtx {
+ CONST_VTBL IBindCtxVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindCtx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindCtx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindCtx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindCtx methods ***/
+#define IBindCtx_RegisterObjectBound(This,punk) (This)->lpVtbl->RegisterObjectBound(This,punk)
+#define IBindCtx_RevokeObjectBound(This,punk) (This)->lpVtbl->RevokeObjectBound(This,punk)
+#define IBindCtx_ReleaseBoundObjects(This) (This)->lpVtbl->ReleaseBoundObjects(This)
+#define IBindCtx_SetBindOptions(This,pbindopts) (This)->lpVtbl->SetBindOptions(This,pbindopts)
+#define IBindCtx_GetBindOptions(This,pbindopts) (This)->lpVtbl->GetBindOptions(This,pbindopts)
+#define IBindCtx_GetRunningObjectTable(This,pprot) (This)->lpVtbl->GetRunningObjectTable(This,pprot)
+#define IBindCtx_RegisterObjectParam(This,pszKey,punk) (This)->lpVtbl->RegisterObjectParam(This,pszKey,punk)
+#define IBindCtx_GetObjectParam(This,pszKey,ppunk) (This)->lpVtbl->GetObjectParam(This,pszKey,ppunk)
+#define IBindCtx_EnumObjectParam(This,ppenum) (This)->lpVtbl->EnumObjectParam(This,ppenum)
+#define IBindCtx_RevokeObjectParam(This,pszKey) (This)->lpVtbl->RevokeObjectParam(This,pszKey)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindCtx_RegisterObjectBound_Proxy(
+ IBindCtx* This,
+ IUnknown *punk);
+void __RPC_STUB IBindCtx_RegisterObjectBound_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RevokeObjectBound_Proxy(
+ IBindCtx* This,
+ IUnknown *punk);
+void __RPC_STUB IBindCtx_RevokeObjectBound_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_ReleaseBoundObjects_Proxy(
+ IBindCtx* This);
+void __RPC_STUB IBindCtx_ReleaseBoundObjects_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RemoteSetBindOptions_Proxy(
+ IBindCtx* This,
+ BIND_OPTS2 *pbindopts);
+void __RPC_STUB IBindCtx_RemoteSetBindOptions_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RemoteGetBindOptions_Proxy(
+ IBindCtx* This,
+ BIND_OPTS2 *pbindopts);
+void __RPC_STUB IBindCtx_RemoteGetBindOptions_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetRunningObjectTable_Proxy(
+ IBindCtx* This,
+ IRunningObjectTable **pprot);
+void __RPC_STUB IBindCtx_GetRunningObjectTable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RegisterObjectParam_Proxy(
+ IBindCtx* This,
+ LPOLESTR pszKey,
+ IUnknown *punk);
+void __RPC_STUB IBindCtx_RegisterObjectParam_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_GetObjectParam_Proxy(
+ IBindCtx* This,
+ LPOLESTR pszKey,
+ IUnknown **ppunk);
+void __RPC_STUB IBindCtx_GetObjectParam_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_EnumObjectParam_Proxy(
+ IBindCtx* This,
+ IEnumString **ppenum);
+void __RPC_STUB IBindCtx_EnumObjectParam_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindCtx_RevokeObjectParam_Proxy(
+ IBindCtx* This,
+ LPOLESTR pszKey);
+void __RPC_STUB IBindCtx_RevokeObjectParam_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindCtx_SetBindOptions_Proxy(
+ IBindCtx* This,
+ BIND_OPTS *pbindopts);
+HRESULT __RPC_STUB IBindCtx_SetBindOptions_Stub(
+ IBindCtx* This,
+ BIND_OPTS2 *pbindopts);
+HRESULT CALLBACK IBindCtx_GetBindOptions_Proxy(
+ IBindCtx* This,
+ BIND_OPTS *pbindopts);
+HRESULT __RPC_STUB IBindCtx_GetBindOptions_Stub(
+ IBindCtx* This,
+ BIND_OPTS2 *pbindopts);
+
+#endif /* __IBindCtx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumMoniker interface
+ */
+#ifndef __IEnumMoniker_INTERFACE_DEFINED__
+#define __IEnumMoniker_INTERFACE_DEFINED__
+
+typedef IEnumMoniker *LPENUMMONIKER;
+DEFINE_GUID(IID_IEnumMoniker, 0x00000102, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumMoniker : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ IMoniker **rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumMoniker **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumMonikerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumMoniker* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumMoniker* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumMoniker* This);
+
+ /*** IEnumMoniker methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumMoniker* This,
+ ULONG celt,
+ IMoniker **rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumMoniker* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumMoniker* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumMoniker* This,
+ IEnumMoniker **ppenum);
+
+ END_INTERFACE
+} IEnumMonikerVtbl;
+interface IEnumMoniker {
+ CONST_VTBL IEnumMonikerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumMoniker_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumMoniker methods ***/
+#define IEnumMoniker_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumMoniker_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumMoniker_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumMoniker_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumMoniker_RemoteNext_Proxy(
+ IEnumMoniker* This,
+ ULONG celt,
+ IMoniker **rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumMoniker_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Skip_Proxy(
+ IEnumMoniker* This,
+ ULONG celt);
+void __RPC_STUB IEnumMoniker_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Reset_Proxy(
+ IEnumMoniker* This);
+void __RPC_STUB IEnumMoniker_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumMoniker_Clone_Proxy(
+ IEnumMoniker* This,
+ IEnumMoniker **ppenum);
+void __RPC_STUB IEnumMoniker_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumMoniker_Next_Proxy(
+ IEnumMoniker* This,
+ ULONG celt,
+ IMoniker **rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumMoniker_Next_Stub(
+ IEnumMoniker* This,
+ ULONG celt,
+ IMoniker **rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumMoniker_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRunnableObject interface
+ */
+#ifndef __IRunnableObject_INTERFACE_DEFINED__
+#define __IRunnableObject_INTERFACE_DEFINED__
+
+typedef IRunnableObject *LPRUNNABLEOBJECT;
+DEFINE_GUID(IID_IRunnableObject, 0x00000126, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRunnableObject : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetRunningClass(
+ LPCLSID lpClsid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Run(
+ LPBINDCTX pbc) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE IsRunning(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRunning(
+ BOOL fLock,
+ BOOL fLastUnlockCloses) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetContainedObject(
+ BOOL fContained) = 0;
+
+};
+#else
+typedef struct IRunnableObjectVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRunnableObject* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRunnableObject* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRunnableObject* This);
+
+ /*** IRunnableObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetRunningClass)(
+ IRunnableObject* This,
+ LPCLSID lpClsid);
+
+ HRESULT (STDMETHODCALLTYPE *Run)(
+ IRunnableObject* This,
+ LPBINDCTX pbc);
+
+ BOOL (STDMETHODCALLTYPE *IsRunning)(
+ IRunnableObject* This);
+
+ HRESULT (STDMETHODCALLTYPE *LockRunning)(
+ IRunnableObject* This,
+ BOOL fLock,
+ BOOL fLastUnlockCloses);
+
+ HRESULT (STDMETHODCALLTYPE *SetContainedObject)(
+ IRunnableObject* This,
+ BOOL fContained);
+
+ END_INTERFACE
+} IRunnableObjectVtbl;
+interface IRunnableObject {
+ CONST_VTBL IRunnableObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRunnableObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRunnableObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRunnableObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IRunnableObject methods ***/
+#define IRunnableObject_GetRunningClass(This,lpClsid) (This)->lpVtbl->GetRunningClass(This,lpClsid)
+#define IRunnableObject_Run(This,pbc) (This)->lpVtbl->Run(This,pbc)
+#define IRunnableObject_IsRunning(This) (This)->lpVtbl->IsRunning(This)
+#define IRunnableObject_LockRunning(This,fLock,fLastUnlockCloses) (This)->lpVtbl->LockRunning(This,fLock,fLastUnlockCloses)
+#define IRunnableObject_SetContainedObject(This,fContained) (This)->lpVtbl->SetContainedObject(This,fContained)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRunnableObject_GetRunningClass_Proxy(
+ IRunnableObject* This,
+ LPCLSID lpClsid);
+void __RPC_STUB IRunnableObject_GetRunningClass_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_Run_Proxy(
+ IRunnableObject* This,
+ LPBINDCTX pbc);
+void __RPC_STUB IRunnableObject_Run_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_RemoteIsRunning_Proxy(
+ IRunnableObject* This);
+void __RPC_STUB IRunnableObject_RemoteIsRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_LockRunning_Proxy(
+ IRunnableObject* This,
+ BOOL fLock,
+ BOOL fLastUnlockCloses);
+void __RPC_STUB IRunnableObject_LockRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunnableObject_SetContainedObject_Proxy(
+ IRunnableObject* This,
+ BOOL fContained);
+void __RPC_STUB IRunnableObject_SetContainedObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL CALLBACK IRunnableObject_IsRunning_Proxy(
+ IRunnableObject* This);
+HRESULT __RPC_STUB IRunnableObject_IsRunning_Stub(
+ IRunnableObject* This);
+
+#endif /* __IRunnableObject_INTERFACE_DEFINED__ */
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetObject
+#endif
+/*****************************************************************************
+ * IRunningObjectTable interface
+ */
+#ifndef __IRunningObjectTable_INTERFACE_DEFINED__
+#define __IRunningObjectTable_INTERFACE_DEFINED__
+
+typedef IRunningObjectTable *LPRUNNINGOBJECTTABLE;
+DEFINE_GUID(IID_IRunningObjectTable, 0x00000010, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRunningObjectTable : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Register(
+ DWORD grfFlags,
+ IUnknown *punkObject,
+ IMoniker *pmkObjectName,
+ DWORD *pdwRegister) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Revoke(
+ DWORD dwRegister) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsRunning(
+ IMoniker *pmkObjectName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetObject(
+ IMoniker *pmkObjectName,
+ IUnknown **ppunkObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE NoteChangeTime(
+ DWORD dwRegister,
+ FILETIME *pfiletime) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
+ IMoniker *pmkObjectName,
+ FILETIME *pfiletime) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumRunning(
+ IEnumMoniker **ppenumMoniker) = 0;
+
+};
+#else
+typedef struct IRunningObjectTableVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRunningObjectTable* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRunningObjectTable* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRunningObjectTable* This);
+
+ /*** IRunningObjectTable methods ***/
+ HRESULT (STDMETHODCALLTYPE *Register)(
+ IRunningObjectTable* This,
+ DWORD grfFlags,
+ IUnknown *punkObject,
+ IMoniker *pmkObjectName,
+ DWORD *pdwRegister);
+
+ HRESULT (STDMETHODCALLTYPE *Revoke)(
+ IRunningObjectTable* This,
+ DWORD dwRegister);
+
+ HRESULT (STDMETHODCALLTYPE *IsRunning)(
+ IRunningObjectTable* This,
+ IMoniker *pmkObjectName);
+
+ HRESULT (STDMETHODCALLTYPE *GetObject)(
+ IRunningObjectTable* This,
+ IMoniker *pmkObjectName,
+ IUnknown **ppunkObject);
+
+ HRESULT (STDMETHODCALLTYPE *NoteChangeTime)(
+ IRunningObjectTable* This,
+ DWORD dwRegister,
+ FILETIME *pfiletime);
+
+ HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(
+ IRunningObjectTable* This,
+ IMoniker *pmkObjectName,
+ FILETIME *pfiletime);
+
+ HRESULT (STDMETHODCALLTYPE *EnumRunning)(
+ IRunningObjectTable* This,
+ IEnumMoniker **ppenumMoniker);
+
+ END_INTERFACE
+} IRunningObjectTableVtbl;
+interface IRunningObjectTable {
+ CONST_VTBL IRunningObjectTableVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRunningObjectTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRunningObjectTable_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRunningObjectTable_Release(This) (This)->lpVtbl->Release(This)
+/*** IRunningObjectTable methods ***/
+#define IRunningObjectTable_Register(This,grfFlags,punkObject,pmkObjectName,pdwRegister) (This)->lpVtbl->Register(This,grfFlags,punkObject,pmkObjectName,pdwRegister)
+#define IRunningObjectTable_Revoke(This,dwRegister) (This)->lpVtbl->Revoke(This,dwRegister)
+#define IRunningObjectTable_IsRunning(This,pmkObjectName) (This)->lpVtbl->IsRunning(This,pmkObjectName)
+#define IRunningObjectTable_GetObject(This,pmkObjectName,ppunkObject) (This)->lpVtbl->GetObject(This,pmkObjectName,ppunkObject)
+#define IRunningObjectTable_NoteChangeTime(This,dwRegister,pfiletime) (This)->lpVtbl->NoteChangeTime(This,dwRegister,pfiletime)
+#define IRunningObjectTable_GetTimeOfLastChange(This,pmkObjectName,pfiletime) (This)->lpVtbl->GetTimeOfLastChange(This,pmkObjectName,pfiletime)
+#define IRunningObjectTable_EnumRunning(This,ppenumMoniker) (This)->lpVtbl->EnumRunning(This,ppenumMoniker)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_Register_Proxy(
+ IRunningObjectTable* This,
+ DWORD grfFlags,
+ IUnknown *punkObject,
+ IMoniker *pmkObjectName,
+ DWORD *pdwRegister);
+void __RPC_STUB IRunningObjectTable_Register_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_Revoke_Proxy(
+ IRunningObjectTable* This,
+ DWORD dwRegister);
+void __RPC_STUB IRunningObjectTable_Revoke_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_IsRunning_Proxy(
+ IRunningObjectTable* This,
+ IMoniker *pmkObjectName);
+void __RPC_STUB IRunningObjectTable_IsRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_GetObject_Proxy(
+ IRunningObjectTable* This,
+ IMoniker *pmkObjectName,
+ IUnknown **ppunkObject);
+void __RPC_STUB IRunningObjectTable_GetObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_NoteChangeTime_Proxy(
+ IRunningObjectTable* This,
+ DWORD dwRegister,
+ FILETIME *pfiletime);
+void __RPC_STUB IRunningObjectTable_NoteChangeTime_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_GetTimeOfLastChange_Proxy(
+ IRunningObjectTable* This,
+ IMoniker *pmkObjectName,
+ FILETIME *pfiletime);
+void __RPC_STUB IRunningObjectTable_GetTimeOfLastChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRunningObjectTable_EnumRunning_Proxy(
+ IRunningObjectTable* This,
+ IEnumMoniker **ppenumMoniker);
+void __RPC_STUB IRunningObjectTable_EnumRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRunningObjectTable_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersist interface
+ */
+#ifndef __IPersist_INTERFACE_DEFINED__
+#define __IPersist_INTERFACE_DEFINED__
+
+typedef IPersist *LPPERSIST;
+DEFINE_GUID(IID_IPersist, 0x0000010c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersist : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetClassID(
+ CLSID *pClassID) = 0;
+
+};
+#else
+typedef struct IPersistVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPersist* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPersist* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPersist* This);
+
+ /*** IPersist methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassID)(
+ IPersist* This,
+ CLSID *pClassID);
+
+ END_INTERFACE
+} IPersistVtbl;
+interface IPersist {
+ CONST_VTBL IPersistVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersist_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersist_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersist_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersist_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersist_GetClassID_Proxy(
+ IPersist* This,
+ CLSID *pClassID);
+void __RPC_STUB IPersist_GetClassID_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPersist_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistStream interface
+ */
+#ifndef __IPersistStream_INTERFACE_DEFINED__
+#define __IPersistStream_INTERFACE_DEFINED__
+
+typedef IPersistStream *LPPERSISTSTREAM;
+DEFINE_GUID(IID_IPersistStream, 0x00000109, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistStream : public IPersist
+{
+ virtual HRESULT STDMETHODCALLTYPE IsDirty(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Load(
+ IStream *pStm) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Save(
+ IStream *pStm,
+ BOOL fClearDirty) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSizeMax(
+ ULARGE_INTEGER *pcbSize) = 0;
+
+};
+#else
+typedef struct IPersistStreamVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPersistStream* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPersistStream* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPersistStream* This);
+
+ /*** IPersist methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassID)(
+ IPersistStream* This,
+ CLSID *pClassID);
+
+ /*** IPersistStream methods ***/
+ HRESULT (STDMETHODCALLTYPE *IsDirty)(
+ IPersistStream* This);
+
+ HRESULT (STDMETHODCALLTYPE *Load)(
+ IPersistStream* This,
+ IStream *pStm);
+
+ HRESULT (STDMETHODCALLTYPE *Save)(
+ IPersistStream* This,
+ IStream *pStm,
+ BOOL fClearDirty);
+
+ HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
+ IPersistStream* This,
+ ULARGE_INTEGER *pcbSize);
+
+ END_INTERFACE
+} IPersistStreamVtbl;
+interface IPersistStream {
+ CONST_VTBL IPersistStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistStream_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistStream_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistStream methods ***/
+#define IPersistStream_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistStream_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
+#define IPersistStream_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
+#define IPersistStream_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistStream_IsDirty_Proxy(
+ IPersistStream* This);
+void __RPC_STUB IPersistStream_IsDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStream_Load_Proxy(
+ IPersistStream* This,
+ IStream *pStm);
+void __RPC_STUB IPersistStream_Load_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStream_Save_Proxy(
+ IPersistStream* This,
+ IStream *pStm,
+ BOOL fClearDirty);
+void __RPC_STUB IPersistStream_Save_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStream_GetSizeMax_Proxy(
+ IPersistStream* This,
+ ULARGE_INTEGER *pcbSize);
+void __RPC_STUB IPersistStream_GetSizeMax_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPersistStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMoniker interface
+ */
+#ifndef __IMoniker_INTERFACE_DEFINED__
+#define __IMoniker_INTERFACE_DEFINED__
+
+typedef IMoniker *LPMONIKER;
+typedef enum tagMKSYS {
+ MKSYS_NONE = 0,
+ MKSYS_GENERICCOMPOSITE = 1,
+ MKSYS_FILEMONIKER = 2,
+ MKSYS_ANTIMONIKER = 3,
+ MKSYS_ITEMMONIKER = 4,
+ MKSYS_POINTERMONIKER = 5,
+ MKSYS_CLASSMONIKER = 7
+} MKSYS;
+typedef enum tagMKREDUCE {
+ MKRREDUCE_ONE = 3 << 16,
+ MKRREDUCE_TOUSER = 2 << 16,
+ MKRREDUCE_THROUGHUSER = 1 << 16,
+ MKRREDUCE_ALL = 0
+} MKRREDUCE;
+DEFINE_GUID(IID_IMoniker, 0x0000000f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMoniker : public IPersistStream
+{
+ virtual HRESULT STDMETHODCALLTYPE BindToObject(
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riidResult,
+ void **ppvResult) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BindToStorage(
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riid,
+ void **ppvObj) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reduce(
+ IBindCtx *pbc,
+ DWORD dwReduceHowFar,
+ IMoniker **ppmkToLeft,
+ IMoniker **ppmkReduced) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ComposeWith(
+ IMoniker *pmkRight,
+ BOOL fOnlyIfNotGeneric,
+ IMoniker **ppmkComposite) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Enum(
+ BOOL fForward,
+ IEnumMoniker **ppenumMoniker) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsEqual(
+ IMoniker *pmkOtherMoniker) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Hash(
+ DWORD *pdwHash) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsRunning(
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ IMoniker *pmkNewlyRunning) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ FILETIME *pFileTime) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Inverse(
+ IMoniker **ppmk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CommonPrefixWith(
+ IMoniker *pmkOther,
+ IMoniker **ppmkPrefix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RelativePathTo(
+ IMoniker *pmkOther,
+ IMoniker **ppmkRelPath) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ LPOLESTR *ppszDisplayName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsSystemMoniker(
+ DWORD *pdwMksys) = 0;
+
+};
+#else
+typedef struct IMonikerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMoniker* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMoniker* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMoniker* This);
+
+ /*** IPersist methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassID)(
+ IMoniker* This,
+ CLSID *pClassID);
+
+ /*** IPersistStream methods ***/
+ HRESULT (STDMETHODCALLTYPE *IsDirty)(
+ IMoniker* This);
+
+ HRESULT (STDMETHODCALLTYPE *Load)(
+ IMoniker* This,
+ IStream *pStm);
+
+ HRESULT (STDMETHODCALLTYPE *Save)(
+ IMoniker* This,
+ IStream *pStm,
+ BOOL fClearDirty);
+
+ HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
+ IMoniker* This,
+ ULARGE_INTEGER *pcbSize);
+
+ /*** IMoniker methods ***/
+ HRESULT (STDMETHODCALLTYPE *BindToObject)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riidResult,
+ void **ppvResult);
+
+ HRESULT (STDMETHODCALLTYPE *BindToStorage)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riid,
+ void **ppvObj);
+
+ HRESULT (STDMETHODCALLTYPE *Reduce)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ DWORD dwReduceHowFar,
+ IMoniker **ppmkToLeft,
+ IMoniker **ppmkReduced);
+
+ HRESULT (STDMETHODCALLTYPE *ComposeWith)(
+ IMoniker* This,
+ IMoniker *pmkRight,
+ BOOL fOnlyIfNotGeneric,
+ IMoniker **ppmkComposite);
+
+ HRESULT (STDMETHODCALLTYPE *Enum)(
+ IMoniker* This,
+ BOOL fForward,
+ IEnumMoniker **ppenumMoniker);
+
+ HRESULT (STDMETHODCALLTYPE *IsEqual)(
+ IMoniker* This,
+ IMoniker *pmkOtherMoniker);
+
+ HRESULT (STDMETHODCALLTYPE *Hash)(
+ IMoniker* This,
+ DWORD *pdwHash);
+
+ HRESULT (STDMETHODCALLTYPE *IsRunning)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ IMoniker *pmkNewlyRunning);
+
+ HRESULT (STDMETHODCALLTYPE *GetTimeOfLastChange)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ FILETIME *pFileTime);
+
+ HRESULT (STDMETHODCALLTYPE *Inverse)(
+ IMoniker* This,
+ IMoniker **ppmk);
+
+ HRESULT (STDMETHODCALLTYPE *CommonPrefixWith)(
+ IMoniker* This,
+ IMoniker *pmkOther,
+ IMoniker **ppmkPrefix);
+
+ HRESULT (STDMETHODCALLTYPE *RelativePathTo)(
+ IMoniker* This,
+ IMoniker *pmkOther,
+ IMoniker **ppmkRelPath);
+
+ HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ LPOLESTR *ppszDisplayName);
+
+ HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut);
+
+ HRESULT (STDMETHODCALLTYPE *IsSystemMoniker)(
+ IMoniker* This,
+ DWORD *pdwMksys);
+
+ END_INTERFACE
+} IMonikerVtbl;
+interface IMoniker {
+ CONST_VTBL IMonikerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMoniker_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistStream methods ***/
+#define IMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IMoniker_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
+#define IMoniker_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
+#define IMoniker_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
+/*** IMoniker methods ***/
+#define IMoniker_BindToObject(This,pbc,pmkToLeft,riidResult,ppvResult) (This)->lpVtbl->BindToObject(This,pbc,pmkToLeft,riidResult,ppvResult)
+#define IMoniker_BindToStorage(This,pbc,pmkToLeft,riid,ppvObj) (This)->lpVtbl->BindToStorage(This,pbc,pmkToLeft,riid,ppvObj)
+#define IMoniker_Reduce(This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced) (This)->lpVtbl->Reduce(This,pbc,dwReduceHowFar,ppmkToLeft,ppmkReduced)
+#define IMoniker_ComposeWith(This,pmkRight,fOnlyIfNotGeneric,ppmkComposite) (This)->lpVtbl->ComposeWith(This,pmkRight,fOnlyIfNotGeneric,ppmkComposite)
+#define IMoniker_Enum(This,fForward,ppenumMoniker) (This)->lpVtbl->Enum(This,fForward,ppenumMoniker)
+#define IMoniker_IsEqual(This,pmkOtherMoniker) (This)->lpVtbl->IsEqual(This,pmkOtherMoniker)
+#define IMoniker_Hash(This,pdwHash) (This)->lpVtbl->Hash(This,pdwHash)
+#define IMoniker_IsRunning(This,pbc,pmkToLeft,pmkNewlyRunning) (This)->lpVtbl->IsRunning(This,pbc,pmkToLeft,pmkNewlyRunning)
+#define IMoniker_GetTimeOfLastChange(This,pbc,pmkToLeft,pFileTime) (This)->lpVtbl->GetTimeOfLastChange(This,pbc,pmkToLeft,pFileTime)
+#define IMoniker_Inverse(This,ppmk) (This)->lpVtbl->Inverse(This,ppmk)
+#define IMoniker_CommonPrefixWith(This,pmkOther,ppmkPrefix) (This)->lpVtbl->CommonPrefixWith(This,pmkOther,ppmkPrefix)
+#define IMoniker_RelativePathTo(This,pmkOther,ppmkRelPath) (This)->lpVtbl->RelativePathTo(This,pmkOther,ppmkRelPath)
+#define IMoniker_GetDisplayName(This,pbc,pmkToLeft,ppszDisplayName) (This)->lpVtbl->GetDisplayName(This,pbc,pmkToLeft,ppszDisplayName)
+#define IMoniker_ParseDisplayName(This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut)
+#define IMoniker_IsSystemMoniker(This,pdwMksys) (This)->lpVtbl->IsSystemMoniker(This,pdwMksys)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMoniker_RemoteBindToObject_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riidResult,
+ IUnknown **ppvResult);
+void __RPC_STUB IMoniker_RemoteBindToObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_RemoteBindToStorage_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riid,
+ IUnknown **ppvObj);
+void __RPC_STUB IMoniker_RemoteBindToStorage_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Reduce_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ DWORD dwReduceHowFar,
+ IMoniker **ppmkToLeft,
+ IMoniker **ppmkReduced);
+void __RPC_STUB IMoniker_Reduce_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_ComposeWith_Proxy(
+ IMoniker* This,
+ IMoniker *pmkRight,
+ BOOL fOnlyIfNotGeneric,
+ IMoniker **ppmkComposite);
+void __RPC_STUB IMoniker_ComposeWith_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Enum_Proxy(
+ IMoniker* This,
+ BOOL fForward,
+ IEnumMoniker **ppenumMoniker);
+void __RPC_STUB IMoniker_Enum_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_IsEqual_Proxy(
+ IMoniker* This,
+ IMoniker *pmkOtherMoniker);
+void __RPC_STUB IMoniker_IsEqual_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Hash_Proxy(
+ IMoniker* This,
+ DWORD *pdwHash);
+void __RPC_STUB IMoniker_Hash_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_IsRunning_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ IMoniker *pmkNewlyRunning);
+void __RPC_STUB IMoniker_IsRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_GetTimeOfLastChange_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ FILETIME *pFileTime);
+void __RPC_STUB IMoniker_GetTimeOfLastChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_Inverse_Proxy(
+ IMoniker* This,
+ IMoniker **ppmk);
+void __RPC_STUB IMoniker_Inverse_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_CommonPrefixWith_Proxy(
+ IMoniker* This,
+ IMoniker *pmkOther,
+ IMoniker **ppmkPrefix);
+void __RPC_STUB IMoniker_CommonPrefixWith_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_RelativePathTo_Proxy(
+ IMoniker* This,
+ IMoniker *pmkOther,
+ IMoniker **ppmkRelPath);
+void __RPC_STUB IMoniker_RelativePathTo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_GetDisplayName_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ LPOLESTR *ppszDisplayName);
+void __RPC_STUB IMoniker_GetDisplayName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_ParseDisplayName_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut);
+void __RPC_STUB IMoniker_ParseDisplayName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IMoniker_IsSystemMoniker_Proxy(
+ IMoniker* This,
+ DWORD *pdwMksys);
+void __RPC_STUB IMoniker_IsSystemMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IMoniker_BindToObject_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riidResult,
+ void **ppvResult);
+HRESULT __RPC_STUB IMoniker_BindToObject_Stub(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riidResult,
+ IUnknown **ppvResult);
+HRESULT CALLBACK IMoniker_BindToStorage_Proxy(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riid,
+ void **ppvObj);
+HRESULT __RPC_STUB IMoniker_BindToStorage_Stub(
+ IMoniker* This,
+ IBindCtx *pbc,
+ IMoniker *pmkToLeft,
+ REFIID riid,
+ IUnknown **ppvObj);
+
+#endif /* __IMoniker_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IROTData interface
+ */
+#ifndef __IROTData_INTERFACE_DEFINED__
+#define __IROTData_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IROTData, 0xf29f6bc0, 0x5021, 0x11ce, 0xaa,0x15, 0x00,0x00,0x69,0x01,0x29,0x3f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IROTData : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetComparisonData(
+ byte *pbData,
+ ULONG cbMax,
+ ULONG *pcbData) = 0;
+
+};
+#else
+typedef struct IROTDataVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IROTData* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IROTData* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IROTData* This);
+
+ /*** IROTData methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetComparisonData)(
+ IROTData* This,
+ byte *pbData,
+ ULONG cbMax,
+ ULONG *pcbData);
+
+ END_INTERFACE
+} IROTDataVtbl;
+interface IROTData {
+ CONST_VTBL IROTDataVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IROTData_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IROTData_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IROTData_Release(This) (This)->lpVtbl->Release(This)
+/*** IROTData methods ***/
+#define IROTData_GetComparisonData(This,pbData,cbMax,pcbData) (This)->lpVtbl->GetComparisonData(This,pbData,cbMax,pcbData)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IROTData_GetComparisonData_Proxy(
+ IROTData* This,
+ byte *pbData,
+ ULONG cbMax,
+ ULONG *pcbData);
+void __RPC_STUB IROTData_GetComparisonData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IROTData_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumString interface
+ */
+#ifndef __IEnumString_INTERFACE_DEFINED__
+#define __IEnumString_INTERFACE_DEFINED__
+
+typedef IEnumString *LPENUMSTRING;
+DEFINE_GUID(IID_IEnumString, 0x00000101, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumString : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ LPOLESTR *rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumString **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumStringVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumString* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumString* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumString* This);
+
+ /*** IEnumString methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumString* This,
+ ULONG celt,
+ LPOLESTR *rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumString* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumString* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumString* This,
+ IEnumString **ppenum);
+
+ END_INTERFACE
+} IEnumStringVtbl;
+interface IEnumString {
+ CONST_VTBL IEnumStringVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumString_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumString_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumString_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumString methods ***/
+#define IEnumString_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumString_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumString_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumString_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumString_RemoteNext_Proxy(
+ IEnumString* This,
+ ULONG celt,
+ LPOLESTR *rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumString_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumString_Skip_Proxy(
+ IEnumString* This,
+ ULONG celt);
+void __RPC_STUB IEnumString_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumString_Reset_Proxy(
+ IEnumString* This);
+void __RPC_STUB IEnumString_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumString_Clone_Proxy(
+ IEnumString* This,
+ IEnumString **ppenum);
+void __RPC_STUB IEnumString_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumString_Next_Proxy(
+ IEnumString* This,
+ ULONG celt,
+ LPOLESTR *rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumString_Next_Stub(
+ IEnumString* This,
+ ULONG celt,
+ LPOLESTR *rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumString_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IClassActivator interface
+ */
+#ifndef __IClassActivator_INTERFACE_DEFINED__
+#define __IClassActivator_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IClassActivator, 0x00000140, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IClassActivator : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetClassObject(
+ REFCLSID rclsid,
+ DWORD dwClassContext,
+ LCID locale,
+ REFIID riid,
+ void **ppv) = 0;
+
+};
+#else
+typedef struct IClassActivatorVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IClassActivator* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IClassActivator* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IClassActivator* This);
+
+ /*** IClassActivator methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassObject)(
+ IClassActivator* This,
+ REFCLSID rclsid,
+ DWORD dwClassContext,
+ LCID locale,
+ REFIID riid,
+ void **ppv);
+
+ END_INTERFACE
+} IClassActivatorVtbl;
+interface IClassActivator {
+ CONST_VTBL IClassActivatorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IClassActivator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IClassActivator_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IClassActivator_Release(This) (This)->lpVtbl->Release(This)
+/*** IClassActivator methods ***/
+#define IClassActivator_GetClassObject(This,rclsid,dwClassContext,locale,riid,ppv) (This)->lpVtbl->GetClassObject(This,rclsid,dwClassContext,locale,riid,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IClassActivator_GetClassObject_Proxy(
+ IClassActivator* This,
+ REFCLSID rclsid,
+ DWORD dwClassContext,
+ LCID locale,
+ REFIID riid,
+ void **ppv);
+void __RPC_STUB IClassActivator_GetClassObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IClassActivator_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISequentialStream interface
+ */
+#ifndef __ISequentialStream_INTERFACE_DEFINED__
+#define __ISequentialStream_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISequentialStream, 0x0c733a30, 0x2a1c, 0x11ce, 0xad,0xe5, 0x00,0xaa,0x00,0x44,0x77,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISequentialStream : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Read(
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Write(
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten) = 0;
+
+};
+#else
+typedef struct ISequentialStreamVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISequentialStream* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISequentialStream* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISequentialStream* This);
+
+ /*** ISequentialStream methods ***/
+ HRESULT (STDMETHODCALLTYPE *Read)(
+ ISequentialStream* This,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+
+ HRESULT (STDMETHODCALLTYPE *Write)(
+ ISequentialStream* This,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+ END_INTERFACE
+} ISequentialStreamVtbl;
+interface ISequentialStream {
+ CONST_VTBL ISequentialStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISequentialStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISequentialStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISequentialStream_Release(This) (This)->lpVtbl->Release(This)
+/*** ISequentialStream methods ***/
+#define ISequentialStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define ISequentialStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISequentialStream_RemoteRead_Proxy(
+ ISequentialStream* This,
+ byte *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+void __RPC_STUB ISequentialStream_RemoteRead_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISequentialStream_RemoteWrite_Proxy(
+ ISequentialStream* This,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+void __RPC_STUB ISequentialStream_RemoteWrite_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK ISequentialStream_Read_Proxy(
+ ISequentialStream* This,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+HRESULT __RPC_STUB ISequentialStream_Read_Stub(
+ ISequentialStream* This,
+ byte *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+HRESULT CALLBACK ISequentialStream_Write_Proxy(
+ ISequentialStream* This,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+HRESULT __RPC_STUB ISequentialStream_Write_Stub(
+ ISequentialStream* This,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+#endif /* __ISequentialStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStream interface
+ */
+#ifndef __IStream_INTERFACE_DEFINED__
+#define __IStream_INTERFACE_DEFINED__
+
+typedef IStream *LPSTREAM;
+typedef struct tagSTATSTG {
+ LPOLESTR pwcsName;
+ DWORD type;
+ ULARGE_INTEGER cbSize;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+ DWORD grfMode;
+ DWORD grfLocksSupported;
+ CLSID clsid;
+ DWORD grfStateBits;
+ DWORD reserved;
+} STATSTG;
+typedef enum tagSTGTY {
+ STGTY_STORAGE = 1,
+ STGTY_STREAM = 2,
+ STGTY_LOCKBYTES = 3,
+ STGTY_PROPERTY = 4
+} STGTY;
+typedef enum tagSTREAM_SEEK {
+ STREAM_SEEK_SET = 0,
+ STREAM_SEEK_CUR = 1,
+ STREAM_SEEK_END = 2
+} STREAM_SEEK;
+#undef LOCK_MAND
+#undef LOCK_READ
+#undef LOCK_WRITE
+#undef LOCK_RW
+typedef enum tagLOCKTYPE {
+ LOCK_WRITE = 1,
+ LOCK_EXCLUSIVE = 2,
+ LOCK_ONLYONCE = 4
+} LOCKTYPE;
+DEFINE_GUID(IID_IStream, 0x0000000c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IStream : public ISequentialStream
+{
+ virtual HRESULT STDMETHODCALLTYPE Seek(
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSize(
+ ULARGE_INTEGER libNewSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CopyTo(
+ IStream *pstm,
+ ULARGE_INTEGER cb,
+ ULARGE_INTEGER *pcbRead,
+ ULARGE_INTEGER *pcbWritten) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Commit(
+ DWORD grfCommitFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Revert(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRegion(
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stat(
+ STATSTG *pstatstg,
+ DWORD grfStatFlag) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IStream **ppstm) = 0;
+
+};
+#else
+typedef struct IStreamVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IStream* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IStream* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IStream* This);
+
+ /*** ISequentialStream methods ***/
+ HRESULT (STDMETHODCALLTYPE *Read)(
+ IStream* This,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+
+ HRESULT (STDMETHODCALLTYPE *Write)(
+ IStream* This,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+ /*** IStream methods ***/
+ HRESULT (STDMETHODCALLTYPE *Seek)(
+ IStream* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+
+ HRESULT (STDMETHODCALLTYPE *SetSize)(
+ IStream* This,
+ ULARGE_INTEGER libNewSize);
+
+ HRESULT (STDMETHODCALLTYPE *CopyTo)(
+ IStream* This,
+ IStream *pstm,
+ ULARGE_INTEGER cb,
+ ULARGE_INTEGER *pcbRead,
+ ULARGE_INTEGER *pcbWritten);
+
+ HRESULT (STDMETHODCALLTYPE *Commit)(
+ IStream* This,
+ DWORD grfCommitFlags);
+
+ HRESULT (STDMETHODCALLTYPE *Revert)(
+ IStream* This);
+
+ HRESULT (STDMETHODCALLTYPE *LockRegion)(
+ IStream* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
+ IStream* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+
+ HRESULT (STDMETHODCALLTYPE *Stat)(
+ IStream* This,
+ STATSTG *pstatstg,
+ DWORD grfStatFlag);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IStream* This,
+ IStream **ppstm);
+
+ END_INTERFACE
+} IStreamVtbl;
+interface IStream {
+ CONST_VTBL IStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStream_Release(This) (This)->lpVtbl->Release(This)
+/*** ISequentialStream methods ***/
+#define IStream_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)
+/*** IStream methods ***/
+#define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IStream_SetSize(This,libNewSize) (This)->lpVtbl->SetSize(This,libNewSize)
+#define IStream_CopyTo(This,pstm,cb,pcbRead,pcbWritten) (This)->lpVtbl->CopyTo(This,pstm,cb,pcbRead,pcbWritten)
+#define IStream_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IStream_Revert(This) (This)->lpVtbl->Revert(This)
+#define IStream_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
+#define IStream_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
+#define IStream_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#define IStream_Clone(This,ppstm) (This)->lpVtbl->Clone(This,ppstm)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IStream_RemoteSeek_Proxy(
+ IStream* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+void __RPC_STUB IStream_RemoteSeek_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_SetSize_Proxy(
+ IStream* This,
+ ULARGE_INTEGER libNewSize);
+void __RPC_STUB IStream_SetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_RemoteCopyTo_Proxy(
+ IStream* This,
+ IStream *pstm,
+ ULARGE_INTEGER cb,
+ ULARGE_INTEGER *pcbRead,
+ ULARGE_INTEGER *pcbWritten);
+void __RPC_STUB IStream_RemoteCopyTo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Commit_Proxy(
+ IStream* This,
+ DWORD grfCommitFlags);
+void __RPC_STUB IStream_Commit_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Revert_Proxy(
+ IStream* This);
+void __RPC_STUB IStream_Revert_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_LockRegion_Proxy(
+ IStream* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+void __RPC_STUB IStream_LockRegion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_UnlockRegion_Proxy(
+ IStream* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+void __RPC_STUB IStream_UnlockRegion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Stat_Proxy(
+ IStream* This,
+ STATSTG *pstatstg,
+ DWORD grfStatFlag);
+void __RPC_STUB IStream_Stat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStream_Clone_Proxy(
+ IStream* This,
+ IStream **ppstm);
+void __RPC_STUB IStream_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IStream_Seek_Proxy(
+ IStream* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+HRESULT __RPC_STUB IStream_Seek_Stub(
+ IStream* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+HRESULT CALLBACK IStream_CopyTo_Proxy(
+ IStream* This,
+ IStream *pstm,
+ ULARGE_INTEGER cb,
+ ULARGE_INTEGER *pcbRead,
+ ULARGE_INTEGER *pcbWritten);
+HRESULT __RPC_STUB IStream_CopyTo_Stub(
+ IStream* This,
+ IStream *pstm,
+ ULARGE_INTEGER cb,
+ ULARGE_INTEGER *pcbRead,
+ ULARGE_INTEGER *pcbWritten);
+
+#endif /* __IStream_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATSTG interface
+ */
+#ifndef __IEnumSTATSTG_INTERFACE_DEFINED__
+#define __IEnumSTATSTG_INTERFACE_DEFINED__
+
+typedef IEnumSTATSTG *LPENUMSTATSTG;
+DEFINE_GUID(IID_IEnumSTATSTG, 0x0000000d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATSTG : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ STATSTG *rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumSTATSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATSTGVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumSTATSTG* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumSTATSTG* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumSTATSTG* This);
+
+ /*** IEnumSTATSTG methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumSTATSTG* This,
+ ULONG celt,
+ STATSTG *rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumSTATSTG* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumSTATSTG* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumSTATSTG* This,
+ IEnumSTATSTG **ppenum);
+
+ END_INTERFACE
+} IEnumSTATSTGVtbl;
+interface IEnumSTATSTG {
+ CONST_VTBL IEnumSTATSTGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATSTG_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATSTG_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATSTG methods ***/
+#define IEnumSTATSTG_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_RemoteNext_Proxy(
+ IEnumSTATSTG* This,
+ ULONG celt,
+ STATSTG *rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATSTG_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Skip_Proxy(
+ IEnumSTATSTG* This,
+ ULONG celt);
+void __RPC_STUB IEnumSTATSTG_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Reset_Proxy(
+ IEnumSTATSTG* This);
+void __RPC_STUB IEnumSTATSTG_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATSTG_Clone_Proxy(
+ IEnumSTATSTG* This,
+ IEnumSTATSTG **ppenum);
+void __RPC_STUB IEnumSTATSTG_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATSTG_Next_Proxy(
+ IEnumSTATSTG* This,
+ ULONG celt,
+ STATSTG *rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATSTG_Next_Stub(
+ IEnumSTATSTG* This,
+ ULONG celt,
+ STATSTG *rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumSTATSTG_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IStorage interface
+ */
+#ifndef __IStorage_INTERFACE_DEFINED__
+#define __IStorage_INTERFACE_DEFINED__
+
+typedef IStorage *LPSTORAGE;
+typedef struct tagRemSNB {
+ ULONG ulCntStr;
+ ULONG ulCntChar;
+ OLECHAR rgString[1];
+} RemSNB;
+typedef RemSNB *wireSNB;
+typedef OLECHAR **SNB;
+DEFINE_GUID(IID_IStorage, 0x0000000b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IStorage : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateStream(
+ LPCOLESTR pwcsName,
+ DWORD grfMode,
+ DWORD reserved1,
+ DWORD reserved2,
+ IStream **ppstm) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OpenStream(
+ LPCOLESTR pwcsName,
+ void *reserved1,
+ DWORD grfMode,
+ DWORD reserved2,
+ IStream **ppstm) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateStorage(
+ LPCOLESTR pwcsName,
+ DWORD grfMode,
+ DWORD dwStgFmt,
+ DWORD reserved2,
+ IStorage **ppstg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OpenStorage(
+ LPCOLESTR pwcsName,
+ IStorage *pstgPriority,
+ DWORD grfMode,
+ SNB snbExclude,
+ DWORD reserved,
+ IStorage **ppstg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CopyTo(
+ DWORD ciidExclude,
+ const IID *rgiidExclude,
+ SNB snbExclude,
+ IStorage *pstgDest) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MoveElementTo(
+ LPCOLESTR pwcsName,
+ IStorage *pstgDest,
+ LPCOLESTR pwcsNewName,
+ DWORD grfFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Commit(
+ DWORD grfCommitFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Revert(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumElements(
+ DWORD reserved1,
+ void *reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG **ppenum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DestroyElement(
+ LPCOLESTR pwcsName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RenameElement(
+ LPCOLESTR pwcsOldName,
+ LPCOLESTR pwcsNewName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetElementTimes(
+ LPCOLESTR pwcsName,
+ const FILETIME *pctime,
+ const FILETIME *patime,
+ const FILETIME *pmtime) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClass(
+ REFCLSID clsid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetStateBits(
+ DWORD grfStateBits,
+ DWORD grfMask) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stat(
+ STATSTG *pstatstg,
+ DWORD grfStatFlag) = 0;
+
+};
+#else
+typedef struct IStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IStorage* This);
+
+ /*** IStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateStream)(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ DWORD grfMode,
+ DWORD reserved1,
+ DWORD reserved2,
+ IStream **ppstm);
+
+ HRESULT (STDMETHODCALLTYPE *OpenStream)(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ void *reserved1,
+ DWORD grfMode,
+ DWORD reserved2,
+ IStream **ppstm);
+
+ HRESULT (STDMETHODCALLTYPE *CreateStorage)(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ DWORD grfMode,
+ DWORD dwStgFmt,
+ DWORD reserved2,
+ IStorage **ppstg);
+
+ HRESULT (STDMETHODCALLTYPE *OpenStorage)(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ IStorage *pstgPriority,
+ DWORD grfMode,
+ SNB snbExclude,
+ DWORD reserved,
+ IStorage **ppstg);
+
+ HRESULT (STDMETHODCALLTYPE *CopyTo)(
+ IStorage* This,
+ DWORD ciidExclude,
+ const IID *rgiidExclude,
+ SNB snbExclude,
+ IStorage *pstgDest);
+
+ HRESULT (STDMETHODCALLTYPE *MoveElementTo)(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ IStorage *pstgDest,
+ LPCOLESTR pwcsNewName,
+ DWORD grfFlags);
+
+ HRESULT (STDMETHODCALLTYPE *Commit)(
+ IStorage* This,
+ DWORD grfCommitFlags);
+
+ HRESULT (STDMETHODCALLTYPE *Revert)(
+ IStorage* This);
+
+ HRESULT (STDMETHODCALLTYPE *EnumElements)(
+ IStorage* This,
+ DWORD reserved1,
+ void *reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG **ppenum);
+
+ HRESULT (STDMETHODCALLTYPE *DestroyElement)(
+ IStorage* This,
+ LPCOLESTR pwcsName);
+
+ HRESULT (STDMETHODCALLTYPE *RenameElement)(
+ IStorage* This,
+ LPCOLESTR pwcsOldName,
+ LPCOLESTR pwcsNewName);
+
+ HRESULT (STDMETHODCALLTYPE *SetElementTimes)(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ const FILETIME *pctime,
+ const FILETIME *patime,
+ const FILETIME *pmtime);
+
+ HRESULT (STDMETHODCALLTYPE *SetClass)(
+ IStorage* This,
+ REFCLSID clsid);
+
+ HRESULT (STDMETHODCALLTYPE *SetStateBits)(
+ IStorage* This,
+ DWORD grfStateBits,
+ DWORD grfMask);
+
+ HRESULT (STDMETHODCALLTYPE *Stat)(
+ IStorage* This,
+ STATSTG *pstatstg,
+ DWORD grfStatFlag);
+
+ END_INTERFACE
+} IStorageVtbl;
+interface IStorage {
+ CONST_VTBL IStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IStorage methods ***/
+#define IStorage_CreateStream(This,pwcsName,grfMode,reserved1,reserved2,ppstm) (This)->lpVtbl->CreateStream(This,pwcsName,grfMode,reserved1,reserved2,ppstm)
+#define IStorage_OpenStream(This,pwcsName,reserved1,grfMode,reserved2,ppstm) (This)->lpVtbl->OpenStream(This,pwcsName,reserved1,grfMode,reserved2,ppstm)
+#define IStorage_CreateStorage(This,pwcsName,grfMode,dwStgFmt,reserved2,ppstg) (This)->lpVtbl->CreateStorage(This,pwcsName,grfMode,dwStgFmt,reserved2,ppstg)
+#define IStorage_OpenStorage(This,pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstg) (This)->lpVtbl->OpenStorage(This,pwcsName,pstgPriority,grfMode,snbExclude,reserved,ppstg)
+#define IStorage_CopyTo(This,ciidExclude,rgiidExclude,snbExclude,pstgDest) (This)->lpVtbl->CopyTo(This,ciidExclude,rgiidExclude,snbExclude,pstgDest)
+#define IStorage_MoveElementTo(This,pwcsName,pstgDest,pwcsNewName,grfFlags) (This)->lpVtbl->MoveElementTo(This,pwcsName,pstgDest,pwcsNewName,grfFlags)
+#define IStorage_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IStorage_Revert(This) (This)->lpVtbl->Revert(This)
+#define IStorage_EnumElements(This,reserved1,reserved2,reserved3,ppenum) (This)->lpVtbl->EnumElements(This,reserved1,reserved2,reserved3,ppenum)
+#define IStorage_DestroyElement(This,pwcsName) (This)->lpVtbl->DestroyElement(This,pwcsName)
+#define IStorage_RenameElement(This,pwcsOldName,pwcsNewName) (This)->lpVtbl->RenameElement(This,pwcsOldName,pwcsNewName)
+#define IStorage_SetElementTimes(This,pwcsName,pctime,patime,pmtime) (This)->lpVtbl->SetElementTimes(This,pwcsName,pctime,patime,pmtime)
+#define IStorage_SetClass(This,clsid) (This)->lpVtbl->SetClass(This,clsid)
+#define IStorage_SetStateBits(This,grfStateBits,grfMask) (This)->lpVtbl->SetStateBits(This,grfStateBits,grfMask)
+#define IStorage_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IStorage_CreateStream_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ DWORD grfMode,
+ DWORD reserved1,
+ DWORD reserved2,
+ IStream **ppstm);
+void __RPC_STUB IStorage_CreateStream_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_RemoteOpenStream_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ ULONG cbReserved1,
+ byte *reserved1,
+ DWORD grfMode,
+ DWORD reserved2,
+ IStream **ppstm);
+void __RPC_STUB IStorage_RemoteOpenStream_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_CreateStorage_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ DWORD grfMode,
+ DWORD dwStgFmt,
+ DWORD reserved2,
+ IStorage **ppstg);
+void __RPC_STUB IStorage_CreateStorage_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_OpenStorage_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ IStorage *pstgPriority,
+ DWORD grfMode,
+ SNB snbExclude,
+ DWORD reserved,
+ IStorage **ppstg);
+void __RPC_STUB IStorage_OpenStorage_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_CopyTo_Proxy(
+ IStorage* This,
+ DWORD ciidExclude,
+ const IID *rgiidExclude,
+ SNB snbExclude,
+ IStorage *pstgDest);
+void __RPC_STUB IStorage_CopyTo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_MoveElementTo_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ IStorage *pstgDest,
+ LPCOLESTR pwcsNewName,
+ DWORD grfFlags);
+void __RPC_STUB IStorage_MoveElementTo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_Commit_Proxy(
+ IStorage* This,
+ DWORD grfCommitFlags);
+void __RPC_STUB IStorage_Commit_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_Revert_Proxy(
+ IStorage* This);
+void __RPC_STUB IStorage_Revert_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_RemoteEnumElements_Proxy(
+ IStorage* This,
+ DWORD reserved1,
+ ULONG cbReserved2,
+ byte *reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG **ppenum);
+void __RPC_STUB IStorage_RemoteEnumElements_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_DestroyElement_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName);
+void __RPC_STUB IStorage_DestroyElement_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_RenameElement_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsOldName,
+ LPCOLESTR pwcsNewName);
+void __RPC_STUB IStorage_RenameElement_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_SetElementTimes_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ const FILETIME *pctime,
+ const FILETIME *patime,
+ const FILETIME *pmtime);
+void __RPC_STUB IStorage_SetElementTimes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_SetClass_Proxy(
+ IStorage* This,
+ REFCLSID clsid);
+void __RPC_STUB IStorage_SetClass_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_SetStateBits_Proxy(
+ IStorage* This,
+ DWORD grfStateBits,
+ DWORD grfMask);
+void __RPC_STUB IStorage_SetStateBits_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IStorage_Stat_Proxy(
+ IStorage* This,
+ STATSTG *pstatstg,
+ DWORD grfStatFlag);
+void __RPC_STUB IStorage_Stat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IStorage_OpenStream_Proxy(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ void *reserved1,
+ DWORD grfMode,
+ DWORD reserved2,
+ IStream **ppstm);
+HRESULT __RPC_STUB IStorage_OpenStream_Stub(
+ IStorage* This,
+ LPCOLESTR pwcsName,
+ ULONG cbReserved1,
+ byte *reserved1,
+ DWORD grfMode,
+ DWORD reserved2,
+ IStream **ppstm);
+HRESULT CALLBACK IStorage_EnumElements_Proxy(
+ IStorage* This,
+ DWORD reserved1,
+ void *reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG **ppenum);
+HRESULT __RPC_STUB IStorage_EnumElements_Stub(
+ IStorage* This,
+ DWORD reserved1,
+ ULONG cbReserved2,
+ byte *reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG **ppenum);
+
+#endif /* __IStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistFile interface
+ */
+#ifndef __IPersistFile_INTERFACE_DEFINED__
+#define __IPersistFile_INTERFACE_DEFINED__
+
+typedef IPersistFile *LPPERSISTFILE;
+DEFINE_GUID(IID_IPersistFile, 0x0000010b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistFile : public IPersist
+{
+ virtual HRESULT STDMETHODCALLTYPE IsDirty(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Load(
+ LPCOLESTR pszFileName,
+ DWORD dwMode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Save(
+ LPCOLESTR pszFileName,
+ BOOL fRemember) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
+ LPCOLESTR pszFileName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCurFile(
+ LPOLESTR *ppszFileName) = 0;
+
+};
+#else
+typedef struct IPersistFileVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPersistFile* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPersistFile* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPersistFile* This);
+
+ /*** IPersist methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassID)(
+ IPersistFile* This,
+ CLSID *pClassID);
+
+ /*** IPersistFile methods ***/
+ HRESULT (STDMETHODCALLTYPE *IsDirty)(
+ IPersistFile* This);
+
+ HRESULT (STDMETHODCALLTYPE *Load)(
+ IPersistFile* This,
+ LPCOLESTR pszFileName,
+ DWORD dwMode);
+
+ HRESULT (STDMETHODCALLTYPE *Save)(
+ IPersistFile* This,
+ LPCOLESTR pszFileName,
+ BOOL fRemember);
+
+ HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
+ IPersistFile* This,
+ LPCOLESTR pszFileName);
+
+ HRESULT (STDMETHODCALLTYPE *GetCurFile)(
+ IPersistFile* This,
+ LPOLESTR *ppszFileName);
+
+ END_INTERFACE
+} IPersistFileVtbl;
+interface IPersistFile {
+ CONST_VTBL IPersistFileVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistFile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistFile_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistFile_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistFile_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistFile methods ***/
+#define IPersistFile_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistFile_Load(This,pszFileName,dwMode) (This)->lpVtbl->Load(This,pszFileName,dwMode)
+#define IPersistFile_Save(This,pszFileName,fRemember) (This)->lpVtbl->Save(This,pszFileName,fRemember)
+#define IPersistFile_SaveCompleted(This,pszFileName) (This)->lpVtbl->SaveCompleted(This,pszFileName)
+#define IPersistFile_GetCurFile(This,ppszFileName) (This)->lpVtbl->GetCurFile(This,ppszFileName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistFile_IsDirty_Proxy(
+ IPersistFile* This);
+void __RPC_STUB IPersistFile_IsDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_Load_Proxy(
+ IPersistFile* This,
+ LPCOLESTR pszFileName,
+ DWORD dwMode);
+void __RPC_STUB IPersistFile_Load_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_Save_Proxy(
+ IPersistFile* This,
+ LPCOLESTR pszFileName,
+ BOOL fRemember);
+void __RPC_STUB IPersistFile_Save_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_SaveCompleted_Proxy(
+ IPersistFile* This,
+ LPCOLESTR pszFileName);
+void __RPC_STUB IPersistFile_SaveCompleted_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistFile_GetCurFile_Proxy(
+ IPersistFile* This,
+ LPOLESTR *ppszFileName);
+void __RPC_STUB IPersistFile_GetCurFile_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPersistFile_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistStorage interface
+ */
+#ifndef __IPersistStorage_INTERFACE_DEFINED__
+#define __IPersistStorage_INTERFACE_DEFINED__
+
+typedef IPersistStorage *LPPERSISTSTORAGE;
+DEFINE_GUID(IID_IPersistStorage, 0x0000010a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistStorage : public IPersist
+{
+ virtual HRESULT STDMETHODCALLTYPE IsDirty(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitNew(
+ IStorage *pStg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Load(
+ IStorage *pStg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Save(
+ IStorage *pStgSave,
+ BOOL fSameAsLoad) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
+ IStorage *pStgNew) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE HandsOffStorage(
+ ) = 0;
+
+};
+#else
+typedef struct IPersistStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPersistStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPersistStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPersistStorage* This);
+
+ /*** IPersist methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassID)(
+ IPersistStorage* This,
+ CLSID *pClassID);
+
+ /*** IPersistStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *IsDirty)(
+ IPersistStorage* This);
+
+ HRESULT (STDMETHODCALLTYPE *InitNew)(
+ IPersistStorage* This,
+ IStorage *pStg);
+
+ HRESULT (STDMETHODCALLTYPE *Load)(
+ IPersistStorage* This,
+ IStorage *pStg);
+
+ HRESULT (STDMETHODCALLTYPE *Save)(
+ IPersistStorage* This,
+ IStorage *pStgSave,
+ BOOL fSameAsLoad);
+
+ HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
+ IPersistStorage* This,
+ IStorage *pStgNew);
+
+ HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
+ IPersistStorage* This);
+
+ END_INTERFACE
+} IPersistStorageVtbl;
+interface IPersistStorage {
+ CONST_VTBL IPersistStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersist methods ***/
+#define IPersistStorage_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+/*** IPersistStorage methods ***/
+#define IPersistStorage_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistStorage_InitNew(This,pStg) (This)->lpVtbl->InitNew(This,pStg)
+#define IPersistStorage_Load(This,pStg) (This)->lpVtbl->Load(This,pStg)
+#define IPersistStorage_Save(This,pStgSave,fSameAsLoad) (This)->lpVtbl->Save(This,pStgSave,fSameAsLoad)
+#define IPersistStorage_SaveCompleted(This,pStgNew) (This)->lpVtbl->SaveCompleted(This,pStgNew)
+#define IPersistStorage_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistStorage_IsDirty_Proxy(
+ IPersistStorage* This);
+void __RPC_STUB IPersistStorage_IsDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_InitNew_Proxy(
+ IPersistStorage* This,
+ IStorage *pStg);
+void __RPC_STUB IPersistStorage_InitNew_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_Load_Proxy(
+ IPersistStorage* This,
+ IStorage *pStg);
+void __RPC_STUB IPersistStorage_Load_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_Save_Proxy(
+ IPersistStorage* This,
+ IStorage *pStgSave,
+ BOOL fSameAsLoad);
+void __RPC_STUB IPersistStorage_Save_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_SaveCompleted_Proxy(
+ IPersistStorage* This,
+ IStorage *pStgNew);
+void __RPC_STUB IPersistStorage_SaveCompleted_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistStorage_HandsOffStorage_Proxy(
+ IPersistStorage* This);
+void __RPC_STUB IPersistStorage_HandsOffStorage_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPersistStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRootStorage interface
+ */
+#ifndef __IRootStorage_INTERFACE_DEFINED__
+#define __IRootStorage_INTERFACE_DEFINED__
+
+typedef IRootStorage *LPROOTSTORAGE;
+DEFINE_GUID(IID_IRootStorage, 0x00000012, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRootStorage : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SwitchToFile(
+ LPOLESTR pszFile) = 0;
+
+};
+#else
+typedef struct IRootStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRootStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRootStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRootStorage* This);
+
+ /*** IRootStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *SwitchToFile)(
+ IRootStorage* This,
+ LPOLESTR pszFile);
+
+ END_INTERFACE
+} IRootStorageVtbl;
+interface IRootStorage {
+ CONST_VTBL IRootStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRootStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRootStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRootStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IRootStorage methods ***/
+#define IRootStorage_SwitchToFile(This,pszFile) (This)->lpVtbl->SwitchToFile(This,pszFile)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRootStorage_SwitchToFile_Proxy(
+ IRootStorage* This,
+ LPOLESTR pszFile);
+void __RPC_STUB IRootStorage_SwitchToFile_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRootStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ILockBytes interface
+ */
+#ifndef __ILockBytes_INTERFACE_DEFINED__
+#define __ILockBytes_INTERFACE_DEFINED__
+
+typedef ILockBytes *LPLOCKBYTES;
+DEFINE_GUID(IID_ILockBytes, 0x0000000a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ILockBytes : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ReadAt(
+ ULARGE_INTEGER ulOffset,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE WriteAt(
+ ULARGE_INTEGER ulOffset,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Flush(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSize(
+ ULARGE_INTEGER cb) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRegion(
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stat(
+ STATSTG *pstatstg,
+ DWORD grfStatFlag) = 0;
+
+};
+#else
+typedef struct ILockBytesVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ILockBytes* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ILockBytes* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ILockBytes* This);
+
+ /*** ILockBytes methods ***/
+ HRESULT (STDMETHODCALLTYPE *ReadAt)(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+
+ HRESULT (STDMETHODCALLTYPE *WriteAt)(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+ HRESULT (STDMETHODCALLTYPE *Flush)(
+ ILockBytes* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetSize)(
+ ILockBytes* This,
+ ULARGE_INTEGER cb);
+
+ HRESULT (STDMETHODCALLTYPE *LockRegion)(
+ ILockBytes* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRegion)(
+ ILockBytes* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+
+ HRESULT (STDMETHODCALLTYPE *Stat)(
+ ILockBytes* This,
+ STATSTG *pstatstg,
+ DWORD grfStatFlag);
+
+ END_INTERFACE
+} ILockBytesVtbl;
+interface ILockBytes {
+ CONST_VTBL ILockBytesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ILockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILockBytes_Release(This) (This)->lpVtbl->Release(This)
+/*** ILockBytes methods ***/
+#define ILockBytes_ReadAt(This,ulOffset,pv,cb,pcbRead) (This)->lpVtbl->ReadAt(This,ulOffset,pv,cb,pcbRead)
+#define ILockBytes_WriteAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->WriteAt(This,ulOffset,pv,cb,pcbWritten)
+#define ILockBytes_Flush(This) (This)->lpVtbl->Flush(This)
+#define ILockBytes_SetSize(This,cb) (This)->lpVtbl->SetSize(This,cb)
+#define ILockBytes_LockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->LockRegion(This,libOffset,cb,dwLockType)
+#define ILockBytes_UnlockRegion(This,libOffset,cb,dwLockType) (This)->lpVtbl->UnlockRegion(This,libOffset,cb,dwLockType)
+#define ILockBytes_Stat(This,pstatstg,grfStatFlag) (This)->lpVtbl->Stat(This,pstatstg,grfStatFlag)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ILockBytes_RemoteReadAt_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ byte *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+void __RPC_STUB ILockBytes_RemoteReadAt_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_RemoteWriteAt_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+void __RPC_STUB ILockBytes_RemoteWriteAt_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_Flush_Proxy(
+ ILockBytes* This);
+void __RPC_STUB ILockBytes_Flush_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_SetSize_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER cb);
+void __RPC_STUB ILockBytes_SetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_LockRegion_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+void __RPC_STUB ILockBytes_LockRegion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_UnlockRegion_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType);
+void __RPC_STUB ILockBytes_UnlockRegion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILockBytes_Stat_Proxy(
+ ILockBytes* This,
+ STATSTG *pstatstg,
+ DWORD grfStatFlag);
+void __RPC_STUB ILockBytes_Stat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK ILockBytes_ReadAt_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+HRESULT __RPC_STUB ILockBytes_ReadAt_Stub(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ byte *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+HRESULT CALLBACK ILockBytes_WriteAt_Proxy(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+HRESULT __RPC_STUB ILockBytes_WriteAt_Stub(
+ ILockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+#endif /* __ILockBytes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IFillLockBytes interface
+ */
+#ifndef __IFillLockBytes_INTERFACE_DEFINED__
+#define __IFillLockBytes_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IFillLockBytes, 0x99caf010, 0x415e, 0x11cf, 0x88,0x14, 0x00,0xaa,0x00,0xb5,0x69,0xf5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IFillLockBytes : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE FillAppend(
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FillAt(
+ ULARGE_INTEGER ulOffset,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFillSize(
+ ULARGE_INTEGER ulSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Terminate(
+ BOOL bCanceled) = 0;
+
+};
+#else
+typedef struct IFillLockBytesVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IFillLockBytes* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IFillLockBytes* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IFillLockBytes* This);
+
+ /*** IFillLockBytes methods ***/
+ HRESULT (STDMETHODCALLTYPE *FillAppend)(
+ IFillLockBytes* This,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+ HRESULT (STDMETHODCALLTYPE *FillAt)(
+ IFillLockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+ HRESULT (STDMETHODCALLTYPE *SetFillSize)(
+ IFillLockBytes* This,
+ ULARGE_INTEGER ulSize);
+
+ HRESULT (STDMETHODCALLTYPE *Terminate)(
+ IFillLockBytes* This,
+ BOOL bCanceled);
+
+ END_INTERFACE
+} IFillLockBytesVtbl;
+interface IFillLockBytes {
+ CONST_VTBL IFillLockBytesVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IFillLockBytes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IFillLockBytes_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IFillLockBytes_Release(This) (This)->lpVtbl->Release(This)
+/*** IFillLockBytes methods ***/
+#define IFillLockBytes_FillAppend(This,pv,cb,pcbWritten) (This)->lpVtbl->FillAppend(This,pv,cb,pcbWritten)
+#define IFillLockBytes_FillAt(This,ulOffset,pv,cb,pcbWritten) (This)->lpVtbl->FillAt(This,ulOffset,pv,cb,pcbWritten)
+#define IFillLockBytes_SetFillSize(This,ulSize) (This)->lpVtbl->SetFillSize(This,ulSize)
+#define IFillLockBytes_Terminate(This,bCanceled) (This)->lpVtbl->Terminate(This,bCanceled)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IFillLockBytes_RemoteFillAppend_Proxy(
+ IFillLockBytes* This,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+void __RPC_STUB IFillLockBytes_RemoteFillAppend_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFillLockBytes_RemoteFillAt_Proxy(
+ IFillLockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+void __RPC_STUB IFillLockBytes_RemoteFillAt_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFillLockBytes_SetFillSize_Proxy(
+ IFillLockBytes* This,
+ ULARGE_INTEGER ulSize);
+void __RPC_STUB IFillLockBytes_SetFillSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IFillLockBytes_Terminate_Proxy(
+ IFillLockBytes* This,
+ BOOL bCanceled);
+void __RPC_STUB IFillLockBytes_Terminate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IFillLockBytes_FillAppend_Proxy(
+ IFillLockBytes* This,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+HRESULT __RPC_STUB IFillLockBytes_FillAppend_Stub(
+ IFillLockBytes* This,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+HRESULT CALLBACK IFillLockBytes_FillAt_Proxy(
+ IFillLockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const void *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+HRESULT __RPC_STUB IFillLockBytes_FillAt_Stub(
+ IFillLockBytes* This,
+ ULARGE_INTEGER ulOffset,
+ const byte *pv,
+ ULONG cb,
+ ULONG *pcbWritten);
+
+#endif /* __IFillLockBytes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IProgressNotify interface
+ */
+#ifndef __IProgressNotify_INTERFACE_DEFINED__
+#define __IProgressNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IProgressNotify, 0xa9d758a0, 0x4617, 0x11cf, 0x95,0xfc, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IProgressNotify : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE OnProgress(
+ DWORD dwProgressCurrent,
+ DWORD dwProgressMaximum,
+ BOOL fAccurate,
+ BOOL fOwner) = 0;
+
+};
+#else
+typedef struct IProgressNotifyVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IProgressNotify* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IProgressNotify* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IProgressNotify* This);
+
+ /*** IProgressNotify methods ***/
+ HRESULT (STDMETHODCALLTYPE *OnProgress)(
+ IProgressNotify* This,
+ DWORD dwProgressCurrent,
+ DWORD dwProgressMaximum,
+ BOOL fAccurate,
+ BOOL fOwner);
+
+ END_INTERFACE
+} IProgressNotifyVtbl;
+interface IProgressNotify {
+ CONST_VTBL IProgressNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IProgressNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IProgressNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IProgressNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** IProgressNotify methods ***/
+#define IProgressNotify_OnProgress(This,dwProgressCurrent,dwProgressMaximum,fAccurate,fOwner) (This)->lpVtbl->OnProgress(This,dwProgressCurrent,dwProgressMaximum,fAccurate,fOwner)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IProgressNotify_OnProgress_Proxy(
+ IProgressNotify* This,
+ DWORD dwProgressCurrent,
+ DWORD dwProgressMaximum,
+ BOOL fAccurate,
+ BOOL fOwner);
+void __RPC_STUB IProgressNotify_OnProgress_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IProgressNotify_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ILayoutStorage interface
+ */
+#ifndef __ILayoutStorage_INTERFACE_DEFINED__
+#define __ILayoutStorage_INTERFACE_DEFINED__
+
+typedef struct tagStorageLayout {
+ DWORD LayoutType;
+ OLECHAR *pwcsElementName;
+ LARGE_INTEGER cOffset;
+ LARGE_INTEGER cBytes;
+} StorageLayout;
+DEFINE_GUID(IID_ILayoutStorage, 0x0e6d4d90, 0x6738, 0x11cf, 0x96,0x08, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ILayoutStorage : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE LayoutScript(
+ StorageLayout *pStorageLayout,
+ DWORD nEntries,
+ DWORD glfInterleavedFlag) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BeginMonitor(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EndMonitor(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReLayoutDocfile(
+ OLECHAR *pwcsNewDfName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReLayoutDocfileOnILockBytes(
+ ILockBytes *pILockBytes) = 0;
+
+};
+#else
+typedef struct ILayoutStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ILayoutStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ILayoutStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ILayoutStorage* This);
+
+ /*** ILayoutStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *LayoutScript)(
+ ILayoutStorage* This,
+ StorageLayout *pStorageLayout,
+ DWORD nEntries,
+ DWORD glfInterleavedFlag);
+
+ HRESULT (STDMETHODCALLTYPE *BeginMonitor)(
+ ILayoutStorage* This);
+
+ HRESULT (STDMETHODCALLTYPE *EndMonitor)(
+ ILayoutStorage* This);
+
+ HRESULT (STDMETHODCALLTYPE *ReLayoutDocfile)(
+ ILayoutStorage* This,
+ OLECHAR *pwcsNewDfName);
+
+ HRESULT (STDMETHODCALLTYPE *ReLayoutDocfileOnILockBytes)(
+ ILayoutStorage* This,
+ ILockBytes *pILockBytes);
+
+ END_INTERFACE
+} ILayoutStorageVtbl;
+interface ILayoutStorage {
+ CONST_VTBL ILayoutStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ILayoutStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ILayoutStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ILayoutStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** ILayoutStorage methods ***/
+#define ILayoutStorage_LayoutScript(This,pStorageLayout,nEntries,glfInterleavedFlag) (This)->lpVtbl->LayoutScript(This,pStorageLayout,nEntries,glfInterleavedFlag)
+#define ILayoutStorage_BeginMonitor(This) (This)->lpVtbl->BeginMonitor(This)
+#define ILayoutStorage_EndMonitor(This) (This)->lpVtbl->EndMonitor(This)
+#define ILayoutStorage_ReLayoutDocfile(This,pwcsNewDfName) (This)->lpVtbl->ReLayoutDocfile(This,pwcsNewDfName)
+#define ILayoutStorage_ReLayoutDocfileOnILockBytes(This,pILockBytes) (This)->lpVtbl->ReLayoutDocfileOnILockBytes(This,pILockBytes)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ILayoutStorage_LayoutScript_Proxy(
+ ILayoutStorage* This,
+ StorageLayout *pStorageLayout,
+ DWORD nEntries,
+ DWORD glfInterleavedFlag);
+void __RPC_STUB ILayoutStorage_LayoutScript_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_BeginMonitor_Proxy(
+ ILayoutStorage* This);
+void __RPC_STUB ILayoutStorage_BeginMonitor_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_EndMonitor_Proxy(
+ ILayoutStorage* This);
+void __RPC_STUB ILayoutStorage_EndMonitor_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_ReLayoutDocfile_Proxy(
+ ILayoutStorage* This,
+ OLECHAR *pwcsNewDfName);
+void __RPC_STUB ILayoutStorage_ReLayoutDocfile_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ILayoutStorage_ReLayoutDocfileOnILockBytes_Proxy(
+ ILayoutStorage* This,
+ ILockBytes *pILockBytes);
+void __RPC_STUB ILayoutStorage_ReLayoutDocfileOnILockBytes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ILayoutStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBlockingLock interface
+ */
+#ifndef __IBlockingLock_INTERFACE_DEFINED__
+#define __IBlockingLock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IBlockingLock, 0x30f3d47a, 0x6447, 0x11d1, 0x8e,0x3c, 0x00,0xc0,0x4f,0xb9,0x38,0x6d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBlockingLock : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Lock(
+ DWORD dwTimeout) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unlock(
+ ) = 0;
+
+};
+#else
+typedef struct IBlockingLockVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBlockingLock* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBlockingLock* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBlockingLock* This);
+
+ /*** IBlockingLock methods ***/
+ HRESULT (STDMETHODCALLTYPE *Lock)(
+ IBlockingLock* This,
+ DWORD dwTimeout);
+
+ HRESULT (STDMETHODCALLTYPE *Unlock)(
+ IBlockingLock* This);
+
+ END_INTERFACE
+} IBlockingLockVtbl;
+interface IBlockingLock {
+ CONST_VTBL IBlockingLockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBlockingLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBlockingLock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBlockingLock_Release(This) (This)->lpVtbl->Release(This)
+/*** IBlockingLock methods ***/
+#define IBlockingLock_Lock(This,dwTimeout) (This)->lpVtbl->Lock(This,dwTimeout)
+#define IBlockingLock_Unlock(This) (This)->lpVtbl->Unlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBlockingLock_Lock_Proxy(
+ IBlockingLock* This,
+ DWORD dwTimeout);
+void __RPC_STUB IBlockingLock_Lock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBlockingLock_Unlock_Proxy(
+ IBlockingLock* This);
+void __RPC_STUB IBlockingLock_Unlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IBlockingLock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ITimeAndNoticeControl interface
+ */
+#ifndef __ITimeAndNoticeControl_INTERFACE_DEFINED__
+#define __ITimeAndNoticeControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ITimeAndNoticeControl, 0xbc0bf6ae, 0x8878, 0x11d1, 0x83,0xe9, 0x00,0xc0,0x4f,0xc2,0xc6,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ITimeAndNoticeControl : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SuppressChanges(
+ DWORD res1,
+ DWORD res2) = 0;
+
+};
+#else
+typedef struct ITimeAndNoticeControlVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ITimeAndNoticeControl* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ITimeAndNoticeControl* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ITimeAndNoticeControl* This);
+
+ /*** ITimeAndNoticeControl methods ***/
+ HRESULT (STDMETHODCALLTYPE *SuppressChanges)(
+ ITimeAndNoticeControl* This,
+ DWORD res1,
+ DWORD res2);
+
+ END_INTERFACE
+} ITimeAndNoticeControlVtbl;
+interface ITimeAndNoticeControl {
+ CONST_VTBL ITimeAndNoticeControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITimeAndNoticeControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ITimeAndNoticeControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ITimeAndNoticeControl_Release(This) (This)->lpVtbl->Release(This)
+/*** ITimeAndNoticeControl methods ***/
+#define ITimeAndNoticeControl_SuppressChanges(This,res1,res2) (This)->lpVtbl->SuppressChanges(This,res1,res2)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ITimeAndNoticeControl_SuppressChanges_Proxy(
+ ITimeAndNoticeControl* This,
+ DWORD res1,
+ DWORD res2);
+void __RPC_STUB ITimeAndNoticeControl_SuppressChanges_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ITimeAndNoticeControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOplockStorage interface
+ */
+#ifndef __IOplockStorage_INTERFACE_DEFINED__
+#define __IOplockStorage_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IOplockStorage, 0x8d19c834, 0x8879, 0x11d1, 0x83,0xe9, 0x00,0xc0,0x4f,0xc2,0xc6,0xd4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOplockStorage : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateStorageEx(
+ LPCWSTR pwcsName,
+ DWORD grfMode,
+ DWORD stgfmt,
+ DWORD grfAttrs,
+ REFIID riid,
+ void **ppstgOpen) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OpenStorageEx(
+ LPCWSTR pwcsName,
+ DWORD grfMode,
+ DWORD stgfmt,
+ DWORD grfAttrs,
+ REFIID riid,
+ void **ppstgOpen) = 0;
+
+};
+#else
+typedef struct IOplockStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOplockStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOplockStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOplockStorage* This);
+
+ /*** IOplockStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateStorageEx)(
+ IOplockStorage* This,
+ LPCWSTR pwcsName,
+ DWORD grfMode,
+ DWORD stgfmt,
+ DWORD grfAttrs,
+ REFIID riid,
+ void **ppstgOpen);
+
+ HRESULT (STDMETHODCALLTYPE *OpenStorageEx)(
+ IOplockStorage* This,
+ LPCWSTR pwcsName,
+ DWORD grfMode,
+ DWORD stgfmt,
+ DWORD grfAttrs,
+ REFIID riid,
+ void **ppstgOpen);
+
+ END_INTERFACE
+} IOplockStorageVtbl;
+interface IOplockStorage {
+ CONST_VTBL IOplockStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOplockStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOplockStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOplockStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IOplockStorage methods ***/
+#define IOplockStorage_CreateStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen) (This)->lpVtbl->CreateStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen)
+#define IOplockStorage_OpenStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen) (This)->lpVtbl->OpenStorageEx(This,pwcsName,grfMode,stgfmt,grfAttrs,riid,ppstgOpen)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOplockStorage_CreateStorageEx_Proxy(
+ IOplockStorage* This,
+ LPCWSTR pwcsName,
+ DWORD grfMode,
+ DWORD stgfmt,
+ DWORD grfAttrs,
+ REFIID riid,
+ void **ppstgOpen);
+void __RPC_STUB IOplockStorage_CreateStorageEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOplockStorage_OpenStorageEx_Proxy(
+ IOplockStorage* This,
+ LPCWSTR pwcsName,
+ DWORD grfMode,
+ DWORD stgfmt,
+ DWORD grfAttrs,
+ REFIID riid,
+ void **ppstgOpen);
+void __RPC_STUB IOplockStorage_OpenStorageEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOplockStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumFORMATETC interface
+ */
+#ifndef __IEnumFORMATETC_INTERFACE_DEFINED__
+#define __IEnumFORMATETC_INTERFACE_DEFINED__
+
+typedef IEnumFORMATETC *LPENUMFORMATETC;
+typedef struct tagDVTARGETDEVICE {
+ DWORD tdSize;
+ WORD tdDriverNameOffset;
+ WORD tdDeviceNameOffset;
+ WORD tdPortNameOffset;
+ WORD tdExtDevmodeOffset;
+ BYTE tdData[1];
+} DVTARGETDEVICE;
+typedef CLIPFORMAT *LPCLIPFORMAT;
+typedef struct tagFORMATETC {
+ CLIPFORMAT cfFormat;
+ DVTARGETDEVICE *ptd;
+ DWORD dwAspect;
+ LONG lindex;
+ DWORD tymed;
+} FORMATETC;
+typedef struct tagFORMATETC *LPFORMATETC;
+DEFINE_GUID(IID_IEnumFORMATETC, 0x00000103, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumFORMATETC : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ FORMATETC *rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumFORMATETC **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumFORMATETCVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumFORMATETC* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumFORMATETC* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumFORMATETC* This);
+
+ /*** IEnumFORMATETC methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumFORMATETC* This,
+ ULONG celt,
+ FORMATETC *rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumFORMATETC* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumFORMATETC* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumFORMATETC* This,
+ IEnumFORMATETC **ppenum);
+
+ END_INTERFACE
+} IEnumFORMATETCVtbl;
+interface IEnumFORMATETC {
+ CONST_VTBL IEnumFORMATETCVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumFORMATETC_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumFORMATETC_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumFORMATETC_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumFORMATETC methods ***/
+#define IEnumFORMATETC_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumFORMATETC_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumFORMATETC_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumFORMATETC_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_RemoteNext_Proxy(
+ IEnumFORMATETC* This,
+ ULONG celt,
+ FORMATETC *rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumFORMATETC_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Skip_Proxy(
+ IEnumFORMATETC* This,
+ ULONG celt);
+void __RPC_STUB IEnumFORMATETC_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Reset_Proxy(
+ IEnumFORMATETC* This);
+void __RPC_STUB IEnumFORMATETC_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumFORMATETC_Clone_Proxy(
+ IEnumFORMATETC* This,
+ IEnumFORMATETC **ppenum);
+void __RPC_STUB IEnumFORMATETC_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumFORMATETC_Next_Proxy(
+ IEnumFORMATETC* This,
+ ULONG celt,
+ FORMATETC *rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumFORMATETC_Next_Stub(
+ IEnumFORMATETC* This,
+ ULONG celt,
+ FORMATETC *rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumFORMATETC_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATDATA interface
+ */
+#ifndef __IEnumSTATDATA_INTERFACE_DEFINED__
+#define __IEnumSTATDATA_INTERFACE_DEFINED__
+
+typedef IEnumSTATDATA *LPENUMSTATDATA;
+typedef enum tagADVF {
+ ADVF_NODATA = 1,
+ ADVF_PRIMEFIRST = 2,
+ ADVF_ONLYONCE = 4,
+ ADVF_DATAONSTOP = 64,
+ ADVFCACHE_NOHANDLER = 8,
+ ADVFCACHE_FORCEBUILTIN = 16,
+ ADVFCACHE_ONSAVE = 32
+} ADVF;
+typedef struct tagSTATDATA {
+ FORMATETC formatetc;
+ DWORD advf;
+ IAdviseSink *pAdvSink;
+ DWORD dwConnection;
+} STATDATA;
+typedef struct tagSTATDATA *LPSTATDATA;
+DEFINE_GUID(IID_IEnumSTATDATA, 0x00000105, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATDATA : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ STATDATA *rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumSTATDATA **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATDATAVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumSTATDATA* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumSTATDATA* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumSTATDATA* This);
+
+ /*** IEnumSTATDATA methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumSTATDATA* This,
+ ULONG celt,
+ STATDATA *rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumSTATDATA* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumSTATDATA* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumSTATDATA* This,
+ IEnumSTATDATA **ppenum);
+
+ END_INTERFACE
+} IEnumSTATDATAVtbl;
+interface IEnumSTATDATA {
+ CONST_VTBL IEnumSTATDATAVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATDATA_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATDATA_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATDATA_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATDATA methods ***/
+#define IEnumSTATDATA_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATDATA_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATDATA_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATDATA_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_RemoteNext_Proxy(
+ IEnumSTATDATA* This,
+ ULONG celt,
+ STATDATA *rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATDATA_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Skip_Proxy(
+ IEnumSTATDATA* This,
+ ULONG celt);
+void __RPC_STUB IEnumSTATDATA_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Reset_Proxy(
+ IEnumSTATDATA* This);
+void __RPC_STUB IEnumSTATDATA_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATDATA_Clone_Proxy(
+ IEnumSTATDATA* This,
+ IEnumSTATDATA **ppenum);
+void __RPC_STUB IEnumSTATDATA_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATDATA_Next_Proxy(
+ IEnumSTATDATA* This,
+ ULONG celt,
+ STATDATA *rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATDATA_Next_Stub(
+ IEnumSTATDATA* This,
+ ULONG celt,
+ STATDATA *rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumSTATDATA_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAdviseSink interface
+ */
+#ifndef __IAdviseSink_INTERFACE_DEFINED__
+#define __IAdviseSink_INTERFACE_DEFINED__
+
+typedef IAdviseSink *LPADVISESINK;
+typedef enum tagTYMED {
+ TYMED_HGLOBAL = 1,
+ TYMED_FILE = 2,
+ TYMED_ISTREAM = 4,
+ TYMED_ISTORAGE = 8,
+ TYMED_GDI = 16,
+ TYMED_MFPICT = 32,
+ TYMED_ENHMF = 64,
+ TYMED_NULL = 0
+} TYMED;
+typedef struct tagRemSTGMEDIUM {
+ DWORD tymed;
+ DWORD dwHandleType;
+ ULONG pData;
+ ULONG pUnkForRelease;
+ ULONG cbData;
+ byte data[1];
+} RemSTGMEDIUM;
+typedef struct tagSTGMEDIUM {
+ DWORD tymed;
+ union {
+ HBITMAP hBitmap;
+ HMETAFILEPICT hMetaFilePict;
+ HENHMETAFILE hEnhMetaFile;
+ HGLOBAL hGlobal;
+ LPOLESTR lpszFileName;
+ IStream *pstm;
+ IStorage *pstg;
+ } DUMMYUNIONNAME;
+ IUnknown *pUnkForRelease;
+} uSTGMEDIUM;
+typedef struct _GDI_OBJECT {
+ DWORD ObjectType;
+ union {
+ wireHBITMAP hBitmap;
+ wireHPALETTE hPalette;
+ wireHGLOBAL hGeneric;
+ } u;
+} GDI_OBJECT;
+typedef struct _userSTGMEDIUM {
+ struct {
+ DWORD tymed;
+ union {
+ wireHMETAFILEPICT hMetaFilePict;
+ wireHENHMETAFILE hHEnhMetaFile;
+ GDI_OBJECT *hGdiHandle;
+ wireHGLOBAL hGlobal;
+ LPOLESTR lpszFileName;
+ BYTE_BLOB *pstm;
+ BYTE_BLOB *pstg;
+ } u;
+ } DUMMYUNIONNAME;
+ IUnknown *pUnkForRelease;
+} userSTGMEDIUM;
+typedef userSTGMEDIUM *wireSTGMEDIUM;
+typedef uSTGMEDIUM STGMEDIUM;
+typedef userSTGMEDIUM *wireASYNC_STGMEDIUM;
+typedef STGMEDIUM ASYNC_STGMEDIUM;
+typedef STGMEDIUM *LPSTGMEDIUM;
+typedef struct _userFLAG_STGMEDIUM {
+ LONG ContextFlags;
+ LONG fPassOwnership;
+ userSTGMEDIUM Stgmed;
+} userFLAG_STGMEDIUM;
+typedef userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
+typedef struct _FLAG_STGMEDIUM {
+ LONG ContextFlags;
+ LONG fPassOwnership;
+ STGMEDIUM Stgmed;
+} FLAG_STGMEDIUM;
+DEFINE_GUID(IID_IAdviseSink, 0x0000010f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAdviseSink : public IUnknown
+{
+ virtual void STDMETHODCALLTYPE OnDataChange(
+ FORMATETC *pFormatetc,
+ STGMEDIUM *pStgmed) = 0;
+
+ virtual void STDMETHODCALLTYPE OnViewChange(
+ DWORD dwAspect,
+ LONG lindex) = 0;
+
+ virtual void STDMETHODCALLTYPE OnRename(
+ IMoniker *pmk) = 0;
+
+ virtual void STDMETHODCALLTYPE OnSave(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE OnClose(
+ ) = 0;
+
+};
+#else
+typedef struct IAdviseSinkVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAdviseSink* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAdviseSink* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAdviseSink* This);
+
+ /*** IAdviseSink methods ***/
+ void (STDMETHODCALLTYPE *OnDataChange)(
+ IAdviseSink* This,
+ FORMATETC *pFormatetc,
+ STGMEDIUM *pStgmed);
+
+ void (STDMETHODCALLTYPE *OnViewChange)(
+ IAdviseSink* This,
+ DWORD dwAspect,
+ LONG lindex);
+
+ void (STDMETHODCALLTYPE *OnRename)(
+ IAdviseSink* This,
+ IMoniker *pmk);
+
+ void (STDMETHODCALLTYPE *OnSave)(
+ IAdviseSink* This);
+
+ void (STDMETHODCALLTYPE *OnClose)(
+ IAdviseSink* This);
+
+ END_INTERFACE
+} IAdviseSinkVtbl;
+interface IAdviseSink {
+ CONST_VTBL IAdviseSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAdviseSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdviseSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdviseSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IAdviseSink methods ***/
+#define IAdviseSink_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)
+#define IAdviseSink_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)
+#define IAdviseSink_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)
+#define IAdviseSink_OnSave(This) (This)->lpVtbl->OnSave(This)
+#define IAdviseSink_OnClose(This) (This)->lpVtbl->OnClose(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnDataChange_Proxy(
+ IAdviseSink* This,
+ FORMATETC *pFormatetc,
+ ASYNC_STGMEDIUM *pStgmed);
+void __RPC_STUB IAdviseSink_RemoteOnDataChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnViewChange_Proxy(
+ IAdviseSink* This,
+ DWORD dwAspect,
+ LONG lindex);
+void __RPC_STUB IAdviseSink_RemoteOnViewChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnRename_Proxy(
+ IAdviseSink* This,
+ IMoniker *pmk);
+void __RPC_STUB IAdviseSink_RemoteOnRename_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnSave_Proxy(
+ IAdviseSink* This);
+void __RPC_STUB IAdviseSink_RemoteOnSave_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAdviseSink_RemoteOnClose_Proxy(
+ IAdviseSink* This);
+void __RPC_STUB IAdviseSink_RemoteOnClose_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void CALLBACK IAdviseSink_OnDataChange_Proxy(
+ IAdviseSink* This,
+ FORMATETC *pFormatetc,
+ STGMEDIUM *pStgmed);
+HRESULT __RPC_STUB IAdviseSink_OnDataChange_Stub(
+ IAdviseSink* This,
+ FORMATETC *pFormatetc,
+ ASYNC_STGMEDIUM *pStgmed);
+void CALLBACK IAdviseSink_OnViewChange_Proxy(
+ IAdviseSink* This,
+ DWORD dwAspect,
+ LONG lindex);
+HRESULT __RPC_STUB IAdviseSink_OnViewChange_Stub(
+ IAdviseSink* This,
+ DWORD dwAspect,
+ LONG lindex);
+void CALLBACK IAdviseSink_OnRename_Proxy(
+ IAdviseSink* This,
+ IMoniker *pmk);
+HRESULT __RPC_STUB IAdviseSink_OnRename_Stub(
+ IAdviseSink* This,
+ IMoniker *pmk);
+void CALLBACK IAdviseSink_OnSave_Proxy(
+ IAdviseSink* This);
+HRESULT __RPC_STUB IAdviseSink_OnSave_Stub(
+ IAdviseSink* This);
+void CALLBACK IAdviseSink_OnClose_Proxy(
+ IAdviseSink* This);
+HRESULT __RPC_STUB IAdviseSink_OnClose_Stub(
+ IAdviseSink* This);
+
+#endif /* __IAdviseSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAdviseSink2 interface
+ */
+#ifndef __IAdviseSink2_INTERFACE_DEFINED__
+#define __IAdviseSink2_INTERFACE_DEFINED__
+
+typedef IAdviseSink2 *LPADVISESINK2;
+DEFINE_GUID(IID_IAdviseSink2, 0x00000125, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAdviseSink2 : public IAdviseSink
+{
+ virtual void STDMETHODCALLTYPE OnLinkSrcChange(
+ IMoniker *pmk) = 0;
+
+};
+#else
+typedef struct IAdviseSink2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAdviseSink2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAdviseSink2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAdviseSink2* This);
+
+ /*** IAdviseSink methods ***/
+ void (STDMETHODCALLTYPE *OnDataChange)(
+ IAdviseSink2* This,
+ FORMATETC *pFormatetc,
+ STGMEDIUM *pStgmed);
+
+ void (STDMETHODCALLTYPE *OnViewChange)(
+ IAdviseSink2* This,
+ DWORD dwAspect,
+ LONG lindex);
+
+ void (STDMETHODCALLTYPE *OnRename)(
+ IAdviseSink2* This,
+ IMoniker *pmk);
+
+ void (STDMETHODCALLTYPE *OnSave)(
+ IAdviseSink2* This);
+
+ void (STDMETHODCALLTYPE *OnClose)(
+ IAdviseSink2* This);
+
+ /*** IAdviseSink2 methods ***/
+ void (STDMETHODCALLTYPE *OnLinkSrcChange)(
+ IAdviseSink2* This,
+ IMoniker *pmk);
+
+ END_INTERFACE
+} IAdviseSink2Vtbl;
+interface IAdviseSink2 {
+ CONST_VTBL IAdviseSink2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAdviseSink2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAdviseSink2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAdviseSink2_Release(This) (This)->lpVtbl->Release(This)
+/*** IAdviseSink methods ***/
+#define IAdviseSink2_OnDataChange(This,pFormatetc,pStgmed) (This)->lpVtbl->OnDataChange(This,pFormatetc,pStgmed)
+#define IAdviseSink2_OnViewChange(This,dwAspect,lindex) (This)->lpVtbl->OnViewChange(This,dwAspect,lindex)
+#define IAdviseSink2_OnRename(This,pmk) (This)->lpVtbl->OnRename(This,pmk)
+#define IAdviseSink2_OnSave(This) (This)->lpVtbl->OnSave(This)
+#define IAdviseSink2_OnClose(This) (This)->lpVtbl->OnClose(This)
+/*** IAdviseSink2 methods ***/
+#define IAdviseSink2_OnLinkSrcChange(This,pmk) (This)->lpVtbl->OnLinkSrcChange(This,pmk)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAdviseSink2_RemoteOnLinkSrcChange_Proxy(
+ IAdviseSink2* This,
+ IMoniker *pmk);
+void __RPC_STUB IAdviseSink2_RemoteOnLinkSrcChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void CALLBACK IAdviseSink2_OnLinkSrcChange_Proxy(
+ IAdviseSink2* This,
+ IMoniker *pmk);
+HRESULT __RPC_STUB IAdviseSink2_OnLinkSrcChange_Stub(
+ IAdviseSink2* This,
+ IMoniker *pmk);
+
+#endif /* __IAdviseSink2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDataObject interface
+ */
+#ifndef __IDataObject_INTERFACE_DEFINED__
+#define __IDataObject_INTERFACE_DEFINED__
+
+typedef IDataObject *LPDATAOBJECT;
+typedef enum tagDATADIR {
+ DATADIR_GET = 1,
+ DATADIR_SET = 2
+} DATADIR;
+DEFINE_GUID(IID_IDataObject, 0x0000010e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDataObject : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetData(
+ FORMATETC *pformatetcIn,
+ STGMEDIUM *pmedium) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDataHere(
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE QueryGetData(
+ FORMATETC *pformatetc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(
+ FORMATETC *pformatectIn,
+ FORMATETC *pformatetcOut) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetData(
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumFormatEtc(
+ DWORD dwDirection,
+ IEnumFORMATETC **ppenumFormatEtc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DAdvise(
+ FORMATETC *pformatetc,
+ DWORD advf,
+ IAdviseSink *pAdvSink,
+ DWORD *pdwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DUnadvise(
+ DWORD dwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumDAdvise(
+ IEnumSTATDATA **ppenumAdvise) = 0;
+
+};
+#else
+typedef struct IDataObjectVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IDataObject* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IDataObject* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IDataObject* This);
+
+ /*** IDataObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetData)(
+ IDataObject* This,
+ FORMATETC *pformatetcIn,
+ STGMEDIUM *pmedium);
+
+ HRESULT (STDMETHODCALLTYPE *GetDataHere)(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium);
+
+ HRESULT (STDMETHODCALLTYPE *QueryGetData)(
+ IDataObject* This,
+ FORMATETC *pformatetc);
+
+ HRESULT (STDMETHODCALLTYPE *GetCanonicalFormatEtc)(
+ IDataObject* This,
+ FORMATETC *pformatectIn,
+ FORMATETC *pformatetcOut);
+
+ HRESULT (STDMETHODCALLTYPE *SetData)(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease);
+
+ HRESULT (STDMETHODCALLTYPE *EnumFormatEtc)(
+ IDataObject* This,
+ DWORD dwDirection,
+ IEnumFORMATETC **ppenumFormatEtc);
+
+ HRESULT (STDMETHODCALLTYPE *DAdvise)(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ DWORD advf,
+ IAdviseSink *pAdvSink,
+ DWORD *pdwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *DUnadvise)(
+ IDataObject* This,
+ DWORD dwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *EnumDAdvise)(
+ IDataObject* This,
+ IEnumSTATDATA **ppenumAdvise);
+
+ END_INTERFACE
+} IDataObjectVtbl;
+interface IDataObject {
+ CONST_VTBL IDataObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDataObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IDataObject methods ***/
+#define IDataObject_GetData(This,pformatetcIn,pmedium) (This)->lpVtbl->GetData(This,pformatetcIn,pmedium)
+#define IDataObject_GetDataHere(This,pformatetc,pmedium) (This)->lpVtbl->GetDataHere(This,pformatetc,pmedium)
+#define IDataObject_QueryGetData(This,pformatetc) (This)->lpVtbl->QueryGetData(This,pformatetc)
+#define IDataObject_GetCanonicalFormatEtc(This,pformatectIn,pformatetcOut) (This)->lpVtbl->GetCanonicalFormatEtc(This,pformatectIn,pformatetcOut)
+#define IDataObject_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+#define IDataObject_EnumFormatEtc(This,dwDirection,ppenumFormatEtc) (This)->lpVtbl->EnumFormatEtc(This,dwDirection,ppenumFormatEtc)
+#define IDataObject_DAdvise(This,pformatetc,advf,pAdvSink,pdwConnection) (This)->lpVtbl->DAdvise(This,pformatetc,advf,pAdvSink,pdwConnection)
+#define IDataObject_DUnadvise(This,dwConnection) (This)->lpVtbl->DUnadvise(This,dwConnection)
+#define IDataObject_EnumDAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumDAdvise(This,ppenumAdvise)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteGetData_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetcIn,
+ STGMEDIUM *pRemoteMedium);
+void __RPC_STUB IDataObject_RemoteGetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteGetDataHere_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pRemoteMedium);
+void __RPC_STUB IDataObject_RemoteGetDataHere_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_QueryGetData_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetc);
+void __RPC_STUB IDataObject_QueryGetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_GetCanonicalFormatEtc_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatectIn,
+ FORMATETC *pformatetcOut);
+void __RPC_STUB IDataObject_GetCanonicalFormatEtc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_RemoteSetData_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ FLAG_STGMEDIUM *pmedium,
+ BOOL fRelease);
+void __RPC_STUB IDataObject_RemoteSetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_EnumFormatEtc_Proxy(
+ IDataObject* This,
+ DWORD dwDirection,
+ IEnumFORMATETC **ppenumFormatEtc);
+void __RPC_STUB IDataObject_EnumFormatEtc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_DAdvise_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ DWORD advf,
+ IAdviseSink *pAdvSink,
+ DWORD *pdwConnection);
+void __RPC_STUB IDataObject_DAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_DUnadvise_Proxy(
+ IDataObject* This,
+ DWORD dwConnection);
+void __RPC_STUB IDataObject_DUnadvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataObject_EnumDAdvise_Proxy(
+ IDataObject* This,
+ IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IDataObject_EnumDAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IDataObject_GetData_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetcIn,
+ STGMEDIUM *pmedium);
+HRESULT __RPC_STUB IDataObject_GetData_Stub(
+ IDataObject* This,
+ FORMATETC *pformatetcIn,
+ STGMEDIUM *pRemoteMedium);
+HRESULT CALLBACK IDataObject_GetDataHere_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium);
+HRESULT __RPC_STUB IDataObject_GetDataHere_Stub(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pRemoteMedium);
+HRESULT CALLBACK IDataObject_SetData_Proxy(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease);
+HRESULT __RPC_STUB IDataObject_SetData_Stub(
+ IDataObject* This,
+ FORMATETC *pformatetc,
+ FLAG_STGMEDIUM *pmedium,
+ BOOL fRelease);
+
+#endif /* __IDataObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDataAdviseHolder interface
+ */
+#ifndef __IDataAdviseHolder_INTERFACE_DEFINED__
+#define __IDataAdviseHolder_INTERFACE_DEFINED__
+
+typedef IDataAdviseHolder *LPDATAADVISEHOLDER;
+DEFINE_GUID(IID_IDataAdviseHolder, 0x00000110, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDataAdviseHolder : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Advise(
+ IDataObject *pDataObject,
+ FORMATETC *pFetc,
+ DWORD advf,
+ IAdviseSink *pAdvise,
+ DWORD *pdwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unadvise(
+ DWORD dwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
+ IEnumSTATDATA **ppenumAdvise) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SendOnDataChange(
+ IDataObject *pDataObject,
+ DWORD dwReserved,
+ DWORD advf) = 0;
+
+};
+#else
+typedef struct IDataAdviseHolderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IDataAdviseHolder* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IDataAdviseHolder* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IDataAdviseHolder* This);
+
+ /*** IDataAdviseHolder methods ***/
+ HRESULT (STDMETHODCALLTYPE *Advise)(
+ IDataAdviseHolder* This,
+ IDataObject *pDataObject,
+ FORMATETC *pFetc,
+ DWORD advf,
+ IAdviseSink *pAdvise,
+ DWORD *pdwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *Unadvise)(
+ IDataAdviseHolder* This,
+ DWORD dwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
+ IDataAdviseHolder* This,
+ IEnumSTATDATA **ppenumAdvise);
+
+ HRESULT (STDMETHODCALLTYPE *SendOnDataChange)(
+ IDataAdviseHolder* This,
+ IDataObject *pDataObject,
+ DWORD dwReserved,
+ DWORD advf);
+
+ END_INTERFACE
+} IDataAdviseHolderVtbl;
+interface IDataAdviseHolder {
+ CONST_VTBL IDataAdviseHolderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDataAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDataAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDataAdviseHolder_Release(This) (This)->lpVtbl->Release(This)
+/*** IDataAdviseHolder methods ***/
+#define IDataAdviseHolder_Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pDataObject,pFetc,advf,pAdvise,pdwConnection)
+#define IDataAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IDataAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IDataAdviseHolder_SendOnDataChange(This,pDataObject,dwReserved,advf) (This)->lpVtbl->SendOnDataChange(This,pDataObject,dwReserved,advf)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_Advise_Proxy(
+ IDataAdviseHolder* This,
+ IDataObject *pDataObject,
+ FORMATETC *pFetc,
+ DWORD advf,
+ IAdviseSink *pAdvise,
+ DWORD *pdwConnection);
+void __RPC_STUB IDataAdviseHolder_Advise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_Unadvise_Proxy(
+ IDataAdviseHolder* This,
+ DWORD dwConnection);
+void __RPC_STUB IDataAdviseHolder_Unadvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_EnumAdvise_Proxy(
+ IDataAdviseHolder* This,
+ IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IDataAdviseHolder_EnumAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDataAdviseHolder_SendOnDataChange_Proxy(
+ IDataAdviseHolder* This,
+ IDataObject *pDataObject,
+ DWORD dwReserved,
+ DWORD advf);
+void __RPC_STUB IDataAdviseHolder_SendOnDataChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IDataAdviseHolder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMessageFilter interface
+ */
+#ifndef __IMessageFilter_INTERFACE_DEFINED__
+#define __IMessageFilter_INTERFACE_DEFINED__
+
+typedef IMessageFilter *LPMESSAGEFILTER;
+typedef enum tagCALLTYPE {
+ CALLTYPE_TOPLEVEL = 1,
+ CALLTYPE_NESTED = 2,
+ CALLTYPE_ASYNC = 3,
+ CALLTYPE_TOPLEVEL_CALLPENDING = 4,
+ CALLTYPE_ASYNC_CALLPENDING = 5
+} CALLTYPE;
+typedef enum tagSERVERCALL {
+ SERVERCALL_ISHANDLED = 0,
+ SERVERCALL_REJECTED = 1,
+ SERVERCALL_RETRYLATER = 2
+} SERVERCALL;
+typedef enum tagPENDINGTYPE {
+ PENDINGTYPE_TOPLEVEL = 1,
+ PENDINGTYPE_NESTED = 2
+} PENDINGTYPE;
+typedef enum tagPENDINGMSG {
+ PENDINGMSG_CANCELCALL = 0,
+ PENDINGMSG_WAITNOPROCESS = 1,
+ PENDINGMSG_WAITDEFPROCESS = 2
+} PENDINGMSG;
+typedef struct tagINTERFACEINFO {
+ IUnknown *pUnk;
+ IID iid;
+ WORD wMethod;
+} INTERFACEINFO;
+typedef struct tagINTERFACEINFO *LPINTERFACEINFO;
+DEFINE_GUID(IID_IMessageFilter, 0x00000016, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMessageFilter : public IUnknown
+{
+ virtual DWORD STDMETHODCALLTYPE HandleInComingCall(
+ DWORD dwCallType,
+ HTASK htaskCaller,
+ DWORD dwTickCount,
+ LPINTERFACEINFO lpInterfaceInfo) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE RetryRejectedCall(
+ HTASK htaskCallee,
+ DWORD dwTickCount,
+ DWORD dwRejectType) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE MessagePending(
+ HTASK htaskCallee,
+ DWORD dwTickCount,
+ DWORD dwPendingType) = 0;
+
+};
+#else
+typedef struct IMessageFilterVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMessageFilter* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMessageFilter* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMessageFilter* This);
+
+ /*** IMessageFilter methods ***/
+ DWORD (STDMETHODCALLTYPE *HandleInComingCall)(
+ IMessageFilter* This,
+ DWORD dwCallType,
+ HTASK htaskCaller,
+ DWORD dwTickCount,
+ LPINTERFACEINFO lpInterfaceInfo);
+
+ DWORD (STDMETHODCALLTYPE *RetryRejectedCall)(
+ IMessageFilter* This,
+ HTASK htaskCallee,
+ DWORD dwTickCount,
+ DWORD dwRejectType);
+
+ DWORD (STDMETHODCALLTYPE *MessagePending)(
+ IMessageFilter* This,
+ HTASK htaskCallee,
+ DWORD dwTickCount,
+ DWORD dwPendingType);
+
+ END_INTERFACE
+} IMessageFilterVtbl;
+interface IMessageFilter {
+ CONST_VTBL IMessageFilterVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMessageFilter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMessageFilter_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMessageFilter_Release(This) (This)->lpVtbl->Release(This)
+/*** IMessageFilter methods ***/
+#define IMessageFilter_HandleInComingCall(This,dwCallType,htaskCaller,dwTickCount,lpInterfaceInfo) (This)->lpVtbl->HandleInComingCall(This,dwCallType,htaskCaller,dwTickCount,lpInterfaceInfo)
+#define IMessageFilter_RetryRejectedCall(This,htaskCallee,dwTickCount,dwRejectType) (This)->lpVtbl->RetryRejectedCall(This,htaskCallee,dwTickCount,dwRejectType)
+#define IMessageFilter_MessagePending(This,htaskCallee,dwTickCount,dwPendingType) (This)->lpVtbl->MessagePending(This,htaskCallee,dwTickCount,dwPendingType)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IMessageFilter_HandleInComingCall_Proxy(
+ IMessageFilter* This,
+ DWORD dwCallType,
+ HTASK htaskCaller,
+ DWORD dwTickCount,
+ LPINTERFACEINFO lpInterfaceInfo);
+void __RPC_STUB IMessageFilter_HandleInComingCall_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IMessageFilter_RetryRejectedCall_Proxy(
+ IMessageFilter* This,
+ HTASK htaskCallee,
+ DWORD dwTickCount,
+ DWORD dwRejectType);
+void __RPC_STUB IMessageFilter_RetryRejectedCall_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IMessageFilter_MessagePending_Proxy(
+ IMessageFilter* This,
+ HTASK htaskCallee,
+ DWORD dwTickCount,
+ DWORD dwPendingType);
+void __RPC_STUB IMessageFilter_MessagePending_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IMessageFilter_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcChannelBuffer interface
+ */
+#ifndef __IRpcChannelBuffer_INTERFACE_DEFINED__
+#define __IRpcChannelBuffer_INTERFACE_DEFINED__
+
+typedef IRpcChannelBuffer *LPRPCCHANNELBUFFER;
+typedef ULONG RPCOLEDATAREP;
+typedef struct tagRPCOLEMESSAGE {
+ void *reserved1;
+ RPCOLEDATAREP dataRepresentation;
+ void *Buffer;
+ ULONG cbBuffer;
+ ULONG iMethod;
+ void * reserved2[5];
+ ULONG rpcFlags;
+} RPCOLEMESSAGE;
+typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
+DEFINE_GUID(IID_IRpcChannelBuffer, 0xd5f56b60, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcChannelBuffer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetBuffer(
+ RPCOLEMESSAGE *pMessage,
+ REFIID riid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SendReceive(
+ RPCOLEMESSAGE *pMessage,
+ ULONG *pStatus) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FreeBuffer(
+ RPCOLEMESSAGE *pMessage) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDestCtx(
+ DWORD *pdwDestContext,
+ void **ppvDestContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsConnected(
+ ) = 0;
+
+};
+#else
+typedef struct IRpcChannelBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcChannelBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcChannelBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcChannelBuffer* This);
+
+ /*** IRpcChannelBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+ IRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage,
+ REFIID riid);
+
+ HRESULT (STDMETHODCALLTYPE *SendReceive)(
+ IRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage,
+ ULONG *pStatus);
+
+ HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+ IRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage);
+
+ HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+ IRpcChannelBuffer* This,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+
+ HRESULT (STDMETHODCALLTYPE *IsConnected)(
+ IRpcChannelBuffer* This);
+
+ END_INTERFACE
+} IRpcChannelBufferVtbl;
+interface IRpcChannelBuffer {
+ CONST_VTBL IRpcChannelBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IRpcChannelBuffer_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetBuffer_Proxy(
+ IRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage,
+ REFIID riid);
+void __RPC_STUB IRpcChannelBuffer_GetBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_SendReceive_Proxy(
+ IRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage,
+ ULONG *pStatus);
+void __RPC_STUB IRpcChannelBuffer_SendReceive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_FreeBuffer_Proxy(
+ IRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage);
+void __RPC_STUB IRpcChannelBuffer_FreeBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_GetDestCtx_Proxy(
+ IRpcChannelBuffer* This,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+void __RPC_STUB IRpcChannelBuffer_GetDestCtx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer_IsConnected_Proxy(
+ IRpcChannelBuffer* This);
+void __RPC_STUB IRpcChannelBuffer_IsConnected_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcChannelBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcChannelBuffer2 interface
+ */
+#ifndef __IRpcChannelBuffer2_INTERFACE_DEFINED__
+#define __IRpcChannelBuffer2_INTERFACE_DEFINED__
+
+typedef IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
+DEFINE_GUID(IID_IRpcChannelBuffer2, 0x594f31d0, 0x7f19, 0x11d0, 0xb1,0x94, 0x00,0xa0,0xc9,0x0d,0xc8,0xbf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcChannelBuffer2 : public IRpcChannelBuffer
+{
+ virtual HRESULT STDMETHODCALLTYPE GetProtocolVersion(
+ DWORD *pdwVersion) = 0;
+
+};
+#else
+typedef struct IRpcChannelBuffer2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcChannelBuffer2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcChannelBuffer2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcChannelBuffer2* This);
+
+ /*** IRpcChannelBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+ IRpcChannelBuffer2* This,
+ RPCOLEMESSAGE *pMessage,
+ REFIID riid);
+
+ HRESULT (STDMETHODCALLTYPE *SendReceive)(
+ IRpcChannelBuffer2* This,
+ RPCOLEMESSAGE *pMessage,
+ ULONG *pStatus);
+
+ HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+ IRpcChannelBuffer2* This,
+ RPCOLEMESSAGE *pMessage);
+
+ HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+ IRpcChannelBuffer2* This,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+
+ HRESULT (STDMETHODCALLTYPE *IsConnected)(
+ IRpcChannelBuffer2* This);
+
+ /*** IRpcChannelBuffer2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
+ IRpcChannelBuffer2* This,
+ DWORD *pdwVersion);
+
+ END_INTERFACE
+} IRpcChannelBuffer2Vtbl;
+interface IRpcChannelBuffer2 {
+ CONST_VTBL IRpcChannelBuffer2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcChannelBuffer2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer2_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer2_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer2_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IRpcChannelBuffer2_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IRpcChannelBuffer2_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer2_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+/*** IRpcChannelBuffer2 methods ***/
+#define IRpcChannelBuffer2_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer2_GetProtocolVersion_Proxy(
+ IRpcChannelBuffer2* This,
+ DWORD *pdwVersion);
+void __RPC_STUB IRpcChannelBuffer2_GetProtocolVersion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcChannelBuffer2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcChannelBuffer3 interface
+ */
+#ifndef __IRpcChannelBuffer3_INTERFACE_DEFINED__
+#define __IRpcChannelBuffer3_INTERFACE_DEFINED__
+
+typedef IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
+DEFINE_GUID(IID_IRpcChannelBuffer3, 0x25b15600, 0x0115, 0x11d0, 0xbf,0x0d, 0x00,0xaa,0x00,0xb8,0xdf,0xd2);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcChannelBuffer3 : public IRpcChannelBuffer2
+{
+ virtual HRESULT STDMETHODCALLTYPE Send(
+ RPCOLEMESSAGE *pMsg,
+ ULONG *pulStatus) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Receive(
+ RPCOLEMESSAGE *pMsg,
+ ULONG ulSize,
+ ULONG *pulStatus) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Cancel(
+ RPCOLEMESSAGE *pMsg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCallContext(
+ RPCOLEMESSAGE *pMsg,
+ REFIID riid,
+ void **pInterface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDestCtxEx(
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pdwDestContext,
+ void **ppvDestContext) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetState(
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pState) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterAsync(
+ RPCOLEMESSAGE *pMsg,
+ IAsyncManager *pAsyncMgr) = 0;
+
+};
+#else
+typedef struct IRpcChannelBuffer3Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcChannelBuffer3* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcChannelBuffer3* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcChannelBuffer3* This);
+
+ /*** IRpcChannelBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMessage,
+ REFIID riid);
+
+ HRESULT (STDMETHODCALLTYPE *SendReceive)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMessage,
+ ULONG *pStatus);
+
+ HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMessage);
+
+ HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+ IRpcChannelBuffer3* This,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+
+ HRESULT (STDMETHODCALLTYPE *IsConnected)(
+ IRpcChannelBuffer3* This);
+
+ /*** IRpcChannelBuffer2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
+ IRpcChannelBuffer3* This,
+ DWORD *pdwVersion);
+
+ /*** IRpcChannelBuffer3 methods ***/
+ HRESULT (STDMETHODCALLTYPE *Send)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ ULONG *pulStatus);
+
+ HRESULT (STDMETHODCALLTYPE *Receive)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ ULONG ulSize,
+ ULONG *pulStatus);
+
+ HRESULT (STDMETHODCALLTYPE *Cancel)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg);
+
+ HRESULT (STDMETHODCALLTYPE *GetCallContext)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ REFIID riid,
+ void **pInterface);
+
+ HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+
+ HRESULT (STDMETHODCALLTYPE *GetState)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pState);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterAsync)(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ IAsyncManager *pAsyncMgr);
+
+ END_INTERFACE
+} IRpcChannelBuffer3Vtbl;
+interface IRpcChannelBuffer3 {
+ CONST_VTBL IRpcChannelBuffer3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcChannelBuffer3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcChannelBuffer3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcChannelBuffer3_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IRpcChannelBuffer3_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IRpcChannelBuffer3_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IRpcChannelBuffer3_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IRpcChannelBuffer3_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer3_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+/*** IRpcChannelBuffer2 methods ***/
+#define IRpcChannelBuffer3_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)
+/*** IRpcChannelBuffer3 methods ***/
+#define IRpcChannelBuffer3_Send(This,pMsg,pulStatus) (This)->lpVtbl->Send(This,pMsg,pulStatus)
+#define IRpcChannelBuffer3_Receive(This,pMsg,ulSize,pulStatus) (This)->lpVtbl->Receive(This,pMsg,ulSize,pulStatus)
+#define IRpcChannelBuffer3_Cancel(This,pMsg) (This)->lpVtbl->Cancel(This,pMsg)
+#define IRpcChannelBuffer3_GetCallContext(This,pMsg,riid,pInterface) (This)->lpVtbl->GetCallContext(This,pMsg,riid,pInterface)
+#define IRpcChannelBuffer3_GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext)
+#define IRpcChannelBuffer3_GetState(This,pMsg,pState) (This)->lpVtbl->GetState(This,pMsg,pState)
+#define IRpcChannelBuffer3_RegisterAsync(This,pMsg,pAsyncMgr) (This)->lpVtbl->RegisterAsync(This,pMsg,pAsyncMgr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Send_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ ULONG *pulStatus);
+void __RPC_STUB IRpcChannelBuffer3_Send_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Receive_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ ULONG ulSize,
+ ULONG *pulStatus);
+void __RPC_STUB IRpcChannelBuffer3_Receive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_Cancel_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg);
+void __RPC_STUB IRpcChannelBuffer3_Cancel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetCallContext_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ REFIID riid,
+ void **pInterface);
+void __RPC_STUB IRpcChannelBuffer3_GetCallContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetDestCtxEx_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+void __RPC_STUB IRpcChannelBuffer3_GetDestCtxEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_GetState_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pState);
+void __RPC_STUB IRpcChannelBuffer3_GetState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcChannelBuffer3_RegisterAsync_Proxy(
+ IRpcChannelBuffer3* This,
+ RPCOLEMESSAGE *pMsg,
+ IAsyncManager *pAsyncMgr);
+void __RPC_STUB IRpcChannelBuffer3_RegisterAsync_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcChannelBuffer3_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncRpcChannelBuffer interface
+ */
+#ifndef __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__
+#define __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAsyncRpcChannelBuffer, 0xa5029fb6, 0x3c34, 0x11d1, 0x9c,0x99, 0x00,0xc0,0x4f,0xb9,0x98,0xaa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAsyncRpcChannelBuffer : public IRpcChannelBuffer2
+{
+ virtual HRESULT STDMETHODCALLTYPE Send(
+ RPCOLEMESSAGE *pMsg,
+ ISynchronize *pSync,
+ ULONG *pulStatus) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Receive(
+ RPCOLEMESSAGE *pMsg,
+ ULONG *pulStatus) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDestCtxEx(
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pdwDestContext,
+ void **ppvDestContext) = 0;
+
+};
+#else
+typedef struct IAsyncRpcChannelBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAsyncRpcChannelBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAsyncRpcChannelBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAsyncRpcChannelBuffer* This);
+
+ /*** IRpcChannelBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage,
+ REFIID riid);
+
+ HRESULT (STDMETHODCALLTYPE *SendReceive)(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage,
+ ULONG *pStatus);
+
+ HRESULT (STDMETHODCALLTYPE *FreeBuffer)(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMessage);
+
+ HRESULT (STDMETHODCALLTYPE *GetDestCtx)(
+ IAsyncRpcChannelBuffer* This,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+
+ HRESULT (STDMETHODCALLTYPE *IsConnected)(
+ IAsyncRpcChannelBuffer* This);
+
+ /*** IRpcChannelBuffer2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetProtocolVersion)(
+ IAsyncRpcChannelBuffer* This,
+ DWORD *pdwVersion);
+
+ /*** IAsyncRpcChannelBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *Send)(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMsg,
+ ISynchronize *pSync,
+ ULONG *pulStatus);
+
+ HRESULT (STDMETHODCALLTYPE *Receive)(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMsg,
+ ULONG *pulStatus);
+
+ HRESULT (STDMETHODCALLTYPE *GetDestCtxEx)(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+
+ END_INTERFACE
+} IAsyncRpcChannelBufferVtbl;
+interface IAsyncRpcChannelBuffer {
+ CONST_VTBL IAsyncRpcChannelBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAsyncRpcChannelBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncRpcChannelBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncRpcChannelBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcChannelBuffer methods ***/
+#define IAsyncRpcChannelBuffer_GetBuffer(This,pMessage,riid) (This)->lpVtbl->GetBuffer(This,pMessage,riid)
+#define IAsyncRpcChannelBuffer_SendReceive(This,pMessage,pStatus) (This)->lpVtbl->SendReceive(This,pMessage,pStatus)
+#define IAsyncRpcChannelBuffer_FreeBuffer(This,pMessage) (This)->lpVtbl->FreeBuffer(This,pMessage)
+#define IAsyncRpcChannelBuffer_GetDestCtx(This,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtx(This,pdwDestContext,ppvDestContext)
+#define IAsyncRpcChannelBuffer_IsConnected(This) (This)->lpVtbl->IsConnected(This)
+/*** IRpcChannelBuffer2 methods ***/
+#define IAsyncRpcChannelBuffer_GetProtocolVersion(This,pdwVersion) (This)->lpVtbl->GetProtocolVersion(This,pdwVersion)
+/*** IAsyncRpcChannelBuffer methods ***/
+#define IAsyncRpcChannelBuffer_Send(This,pMsg,pSync,pulStatus) (This)->lpVtbl->Send(This,pMsg,pSync,pulStatus)
+#define IAsyncRpcChannelBuffer_Receive(This,pMsg,pulStatus) (This)->lpVtbl->Receive(This,pMsg,pulStatus)
+#define IAsyncRpcChannelBuffer_GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext) (This)->lpVtbl->GetDestCtxEx(This,pMsg,pdwDestContext,ppvDestContext)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_Send_Proxy(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMsg,
+ ISynchronize *pSync,
+ ULONG *pulStatus);
+void __RPC_STUB IAsyncRpcChannelBuffer_Send_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_Receive_Proxy(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMsg,
+ ULONG *pulStatus);
+void __RPC_STUB IAsyncRpcChannelBuffer_Receive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncRpcChannelBuffer_GetDestCtxEx_Proxy(
+ IAsyncRpcChannelBuffer* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD *pdwDestContext,
+ void **ppvDestContext);
+void __RPC_STUB IAsyncRpcChannelBuffer_GetDestCtxEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IAsyncRpcChannelBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcSyntaxNegotiate interface
+ */
+#ifndef __IRpcSyntaxNegotiate_INTERFACE_DEFINED__
+#define __IRpcSyntaxNegotiate_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRpcSyntaxNegotiate, 0x58a08519, 0x24c8, 0x4935, 0xb4,0x82, 0x3f,0xd8,0x23,0x33,0x3a,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcSyntaxNegotiate : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE NegotiateSyntax(
+ RPCOLEMESSAGE *pMsg) = 0;
+
+};
+#else
+typedef struct IRpcSyntaxNegotiateVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcSyntaxNegotiate* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcSyntaxNegotiate* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcSyntaxNegotiate* This);
+
+ /*** IRpcSyntaxNegotiate methods ***/
+ HRESULT (STDMETHODCALLTYPE *NegotiateSyntax)(
+ IRpcSyntaxNegotiate* This,
+ RPCOLEMESSAGE *pMsg);
+
+ END_INTERFACE
+} IRpcSyntaxNegotiateVtbl;
+interface IRpcSyntaxNegotiate {
+ CONST_VTBL IRpcSyntaxNegotiateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcSyntaxNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcSyntaxNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcSyntaxNegotiate_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcSyntaxNegotiate methods ***/
+#define IRpcSyntaxNegotiate_NegotiateSyntax(This,pMsg) (This)->lpVtbl->NegotiateSyntax(This,pMsg)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcSyntaxNegotiate_NegotiateSyntax_Proxy(
+ IRpcSyntaxNegotiate* This,
+ RPCOLEMESSAGE *pMsg);
+void __RPC_STUB IRpcSyntaxNegotiate_NegotiateSyntax_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcSyntaxNegotiate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcProxyBuffer interface
+ */
+#ifndef __IRpcProxyBuffer_INTERFACE_DEFINED__
+#define __IRpcProxyBuffer_INTERFACE_DEFINED__
+
+typedef IRpcProxyBuffer *LPRPCPROXYBUFFER;
+DEFINE_GUID(IID_IRpcProxyBuffer, 0xd5f56a34, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcProxyBuffer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Connect(
+ IRpcChannelBuffer *pRpcChannelBuffer) = 0;
+
+ virtual void STDMETHODCALLTYPE Disconnect(
+ ) = 0;
+
+};
+#else
+typedef struct IRpcProxyBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcProxyBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcProxyBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcProxyBuffer* This);
+
+ /*** IRpcProxyBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *Connect)(
+ IRpcProxyBuffer* This,
+ IRpcChannelBuffer *pRpcChannelBuffer);
+
+ void (STDMETHODCALLTYPE *Disconnect)(
+ IRpcProxyBuffer* This);
+
+ END_INTERFACE
+} IRpcProxyBufferVtbl;
+interface IRpcProxyBuffer {
+ CONST_VTBL IRpcProxyBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcProxyBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcProxyBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcProxyBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcProxyBuffer methods ***/
+#define IRpcProxyBuffer_Connect(This,pRpcChannelBuffer) (This)->lpVtbl->Connect(This,pRpcChannelBuffer)
+#define IRpcProxyBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcProxyBuffer_Connect_Proxy(
+ IRpcProxyBuffer* This,
+ IRpcChannelBuffer *pRpcChannelBuffer);
+void __RPC_STUB IRpcProxyBuffer_Connect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IRpcProxyBuffer_Disconnect_Proxy(
+ IRpcProxyBuffer* This);
+void __RPC_STUB IRpcProxyBuffer_Disconnect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcProxyBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcStubBuffer interface
+ */
+#ifndef __IRpcStubBuffer_INTERFACE_DEFINED__
+#define __IRpcStubBuffer_INTERFACE_DEFINED__
+
+typedef IRpcStubBuffer *LPRPCSTUBBUFFER;
+DEFINE_GUID(IID_IRpcStubBuffer, 0xd5f56afc, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcStubBuffer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Connect(
+ IUnknown *pUnkServer) = 0;
+
+ virtual void STDMETHODCALLTYPE Disconnect(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Invoke(
+ RPCOLEMESSAGE *_prpcmsg,
+ IRpcChannelBuffer *_pRpcChannelBuffer) = 0;
+
+ virtual IRpcStubBuffer * STDMETHODCALLTYPE IsIIDSupported(
+ REFIID riid) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE CountRefs(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DebugServerQueryInterface(
+ void **ppv) = 0;
+
+ virtual void STDMETHODCALLTYPE DebugServerRelease(
+ void *pv) = 0;
+
+};
+#else
+typedef struct IRpcStubBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcStubBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcStubBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcStubBuffer* This);
+
+ /*** IRpcStubBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *Connect)(
+ IRpcStubBuffer* This,
+ IUnknown *pUnkServer);
+
+ void (STDMETHODCALLTYPE *Disconnect)(
+ IRpcStubBuffer* This);
+
+ HRESULT (STDMETHODCALLTYPE *Invoke)(
+ IRpcStubBuffer* This,
+ RPCOLEMESSAGE *_prpcmsg,
+ IRpcChannelBuffer *_pRpcChannelBuffer);
+
+ IRpcStubBuffer * (STDMETHODCALLTYPE *IsIIDSupported)(
+ IRpcStubBuffer* This,
+ REFIID riid);
+
+ ULONG (STDMETHODCALLTYPE *CountRefs)(
+ IRpcStubBuffer* This);
+
+ HRESULT (STDMETHODCALLTYPE *DebugServerQueryInterface)(
+ IRpcStubBuffer* This,
+ void **ppv);
+
+ void (STDMETHODCALLTYPE *DebugServerRelease)(
+ IRpcStubBuffer* This,
+ void *pv);
+
+ END_INTERFACE
+} IRpcStubBufferVtbl;
+interface IRpcStubBuffer {
+ CONST_VTBL IRpcStubBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcStubBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcStubBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcStubBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcStubBuffer methods ***/
+#define IRpcStubBuffer_Connect(This,pUnkServer) (This)->lpVtbl->Connect(This,pUnkServer)
+#define IRpcStubBuffer_Disconnect(This) (This)->lpVtbl->Disconnect(This)
+#define IRpcStubBuffer_Invoke(This,_prpcmsg,_pRpcChannelBuffer) (This)->lpVtbl->Invoke(This,_prpcmsg,_pRpcChannelBuffer)
+#define IRpcStubBuffer_IsIIDSupported(This,riid) (This)->lpVtbl->IsIIDSupported(This,riid)
+#define IRpcStubBuffer_CountRefs(This) (This)->lpVtbl->CountRefs(This)
+#define IRpcStubBuffer_DebugServerQueryInterface(This,ppv) (This)->lpVtbl->DebugServerQueryInterface(This,ppv)
+#define IRpcStubBuffer_DebugServerRelease(This,pv) (This)->lpVtbl->DebugServerRelease(This,pv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Connect_Proxy(
+ IRpcStubBuffer* This,
+ IUnknown *pUnkServer);
+void __RPC_STUB IRpcStubBuffer_Connect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IRpcStubBuffer_Disconnect_Proxy(
+ IRpcStubBuffer* This);
+void __RPC_STUB IRpcStubBuffer_Disconnect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_Invoke_Proxy(
+ IRpcStubBuffer* This,
+ RPCOLEMESSAGE *_prpcmsg,
+ IRpcChannelBuffer *_pRpcChannelBuffer);
+void __RPC_STUB IRpcStubBuffer_Invoke_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+IRpcStubBuffer * STDMETHODCALLTYPE IRpcStubBuffer_IsIIDSupported_Proxy(
+ IRpcStubBuffer* This,
+ REFIID riid);
+void __RPC_STUB IRpcStubBuffer_IsIIDSupported_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IRpcStubBuffer_CountRefs_Proxy(
+ IRpcStubBuffer* This);
+void __RPC_STUB IRpcStubBuffer_CountRefs_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcStubBuffer_DebugServerQueryInterface_Proxy(
+ IRpcStubBuffer* This,
+ void **ppv);
+void __RPC_STUB IRpcStubBuffer_DebugServerQueryInterface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IRpcStubBuffer_DebugServerRelease_Proxy(
+ IRpcStubBuffer* This,
+ void *pv);
+void __RPC_STUB IRpcStubBuffer_DebugServerRelease_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcStubBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPSFactoryBuffer interface
+ */
+#ifndef __IPSFactoryBuffer_INTERFACE_DEFINED__
+#define __IPSFactoryBuffer_INTERFACE_DEFINED__
+
+typedef IPSFactoryBuffer *LPPSFACTORYBUFFER;
+DEFINE_GUID(IID_IPSFactoryBuffer, 0xd5f569d0, 0x593b, 0x101a, 0xb5,0x69, 0x08,0x00,0x2b,0x2d,0xbf,0x7a);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPSFactoryBuffer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateProxy(
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ IRpcProxyBuffer **ppProxy,
+ void **ppv) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateStub(
+ REFIID riid,
+ IUnknown *pUnkServer,
+ IRpcStubBuffer **ppStub) = 0;
+
+};
+#else
+typedef struct IPSFactoryBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPSFactoryBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPSFactoryBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPSFactoryBuffer* This);
+
+ /*** IPSFactoryBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateProxy)(
+ IPSFactoryBuffer* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ IRpcProxyBuffer **ppProxy,
+ void **ppv);
+
+ HRESULT (STDMETHODCALLTYPE *CreateStub)(
+ IPSFactoryBuffer* This,
+ REFIID riid,
+ IUnknown *pUnkServer,
+ IRpcStubBuffer **ppStub);
+
+ END_INTERFACE
+} IPSFactoryBufferVtbl;
+interface IPSFactoryBuffer {
+ CONST_VTBL IPSFactoryBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPSFactoryBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPSFactoryBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPSFactoryBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IPSFactoryBuffer methods ***/
+#define IPSFactoryBuffer_CreateProxy(This,pUnkOuter,riid,ppProxy,ppv) (This)->lpVtbl->CreateProxy(This,pUnkOuter,riid,ppProxy,ppv)
+#define IPSFactoryBuffer_CreateStub(This,riid,pUnkServer,ppStub) (This)->lpVtbl->CreateStub(This,riid,pUnkServer,ppStub)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateProxy_Proxy(
+ IPSFactoryBuffer* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ IRpcProxyBuffer **ppProxy,
+ void **ppv);
+void __RPC_STUB IPSFactoryBuffer_CreateProxy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPSFactoryBuffer_CreateStub_Proxy(
+ IPSFactoryBuffer* This,
+ REFIID riid,
+ IUnknown *pUnkServer,
+ IRpcStubBuffer **ppStub);
+void __RPC_STUB IPSFactoryBuffer_CreateStub_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPSFactoryBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IChannelHook interface
+ */
+#ifndef __IChannelHook_INTERFACE_DEFINED__
+#define __IChannelHook_INTERFACE_DEFINED__
+
+typedef IChannelHook *LPCHANNELHOOK;
+typedef struct SChannelHookCallInfo {
+ IID iid;
+ DWORD cbSize;
+ GUID uCausality;
+ DWORD dwServerPid;
+ DWORD iMethod;
+ void *pObject;
+} SChannelHookCallInfo;
+DEFINE_GUID(IID_IChannelHook, 0x1008c4a0, 0x7613, 0x11cf, 0x9a,0xf1, 0x00,0x20,0xaf,0x6e,0x72,0xf4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IChannelHook : public IUnknown
+{
+ virtual void STDMETHODCALLTYPE ClientGetSize(
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize) = 0;
+
+ virtual void STDMETHODCALLTYPE ClientFillBuffer(
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize,
+ void *pDataBuffer) = 0;
+
+ virtual void STDMETHODCALLTYPE ClientNotify(
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG cbDataSize,
+ void *pDataBuffer,
+ DWORD lDataRep,
+ HRESULT hrFault) = 0;
+
+ virtual void STDMETHODCALLTYPE ServerNotify(
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG cbDataSize,
+ void *pDataBuffer,
+ DWORD lDataRep) = 0;
+
+ virtual void STDMETHODCALLTYPE ServerGetSize(
+ REFGUID uExtent,
+ REFIID riid,
+ HRESULT hrFault,
+ ULONG *pDataSize) = 0;
+
+ virtual void STDMETHODCALLTYPE ServerFillBuffer(
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize,
+ void *pDataBuffer,
+ HRESULT hrFault) = 0;
+
+};
+#else
+typedef struct IChannelHookVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IChannelHook* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IChannelHook* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IChannelHook* This);
+
+ /*** IChannelHook methods ***/
+ void (STDMETHODCALLTYPE *ClientGetSize)(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize);
+
+ void (STDMETHODCALLTYPE *ClientFillBuffer)(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize,
+ void *pDataBuffer);
+
+ void (STDMETHODCALLTYPE *ClientNotify)(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG cbDataSize,
+ void *pDataBuffer,
+ DWORD lDataRep,
+ HRESULT hrFault);
+
+ void (STDMETHODCALLTYPE *ServerNotify)(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG cbDataSize,
+ void *pDataBuffer,
+ DWORD lDataRep);
+
+ void (STDMETHODCALLTYPE *ServerGetSize)(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ HRESULT hrFault,
+ ULONG *pDataSize);
+
+ void (STDMETHODCALLTYPE *ServerFillBuffer)(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize,
+ void *pDataBuffer,
+ HRESULT hrFault);
+
+ END_INTERFACE
+} IChannelHookVtbl;
+interface IChannelHook {
+ CONST_VTBL IChannelHookVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IChannelHook_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IChannelHook_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IChannelHook_Release(This) (This)->lpVtbl->Release(This)
+/*** IChannelHook methods ***/
+#define IChannelHook_ClientGetSize(This,uExtent,riid,pDataSize) (This)->lpVtbl->ClientGetSize(This,uExtent,riid,pDataSize)
+#define IChannelHook_ClientFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer) (This)->lpVtbl->ClientFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer)
+#define IChannelHook_ClientNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep,hrFault) (This)->lpVtbl->ClientNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep,hrFault)
+#define IChannelHook_ServerNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep) (This)->lpVtbl->ServerNotify(This,uExtent,riid,cbDataSize,pDataBuffer,lDataRep)
+#define IChannelHook_ServerGetSize(This,uExtent,riid,hrFault,pDataSize) (This)->lpVtbl->ServerGetSize(This,uExtent,riid,hrFault,pDataSize)
+#define IChannelHook_ServerFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer,hrFault) (This)->lpVtbl->ServerFillBuffer(This,uExtent,riid,pDataSize,pDataBuffer,hrFault)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IChannelHook_ClientGetSize_Proxy(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize);
+void __RPC_STUB IChannelHook_ClientGetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ClientFillBuffer_Proxy(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize,
+ void *pDataBuffer);
+void __RPC_STUB IChannelHook_ClientFillBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ClientNotify_Proxy(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG cbDataSize,
+ void *pDataBuffer,
+ DWORD lDataRep,
+ HRESULT hrFault);
+void __RPC_STUB IChannelHook_ClientNotify_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ServerNotify_Proxy(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG cbDataSize,
+ void *pDataBuffer,
+ DWORD lDataRep);
+void __RPC_STUB IChannelHook_ServerNotify_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ServerGetSize_Proxy(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ HRESULT hrFault,
+ ULONG *pDataSize);
+void __RPC_STUB IChannelHook_ServerGetSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IChannelHook_ServerFillBuffer_Proxy(
+ IChannelHook* This,
+ REFGUID uExtent,
+ REFIID riid,
+ ULONG *pDataSize,
+ void *pDataBuffer,
+ HRESULT hrFault);
+void __RPC_STUB IChannelHook_ServerFillBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IChannelHook_INTERFACE_DEFINED__ */
+
+extern const FMTID FMTID_SummaryInformation;
+
+extern const FMTID FMTID_DocSummaryInformation;
+
+extern const FMTID FMTID_UserDefinedProperties;
+
+/*****************************************************************************
+ * IClientSecurity interface
+ */
+#ifndef __IClientSecurity_INTERFACE_DEFINED__
+#define __IClientSecurity_INTERFACE_DEFINED__
+
+typedef struct tagSOLE_AUTHENTICATION_SERVICE {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ OLECHAR *pPrincipalName;
+ HRESULT hr;
+} SOLE_AUTHENTICATION_SERVICE;
+typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
+typedef struct tagSOLE_AUTHENTICATION_INFO {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ void *pAuthInfo;
+} SOLE_AUTHENTICATION_INFO;
+#define COLE_DEFAULT_PRINCIPAL ((OLECHAR *)-1)
+
+#define COLE_DEFAULT_AUTHINFO ((void *)-1)
+
+typedef struct tagSOLE_AUTHENTICATION_LIST {
+ DWORD cAuthInfo;
+ SOLE_AUTHENTICATION_INFO *aAuthInfo;
+} SOLE_AUTHENTICATION_LIST;
+typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
+ EOAC_NONE = 0x0,
+ EOAC_MUTUAL_AUTH = 0x1,
+ EOAC_SECURE_REFS = 0x2,
+ EOAC_ACCESS_CONTROL = 0x4,
+ EOAC_APPID = 0x8,
+ EOAC_DYNAMIC = 0x10,
+ EOAC_STATIC_CLOAKING = 0x20,
+ EOAC_DYNAMIC_CLOAKING = 0x40,
+ EOAC_ANY_AUTHORITY = 0x80,
+ EOAC_MAKE_FULLSIC = 0x100,
+ EOAC_REQUIRE_FULLSIC = 0x200,
+ EOAC_AUTO_IMPERSONATE = 0x400,
+ EOAC_DEFAULT = 0x800,
+ EOAC_DISABLE_AAA = 0x1000,
+ EOAC_NO_CUSTOM_MARSHAL = 0x2000
+} EOLE_AUTHENTICATION_CAPABILITIES;
+DEFINE_GUID(IID_IClientSecurity, 0x0000013d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IClientSecurity : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryBlanket(
+ IUnknown *pProxy,
+ DWORD *pAuthnSvc,
+ DWORD *pAuthzSvc,
+ OLECHAR **pServerPrincName,
+ DWORD *pAuthnLevel,
+ DWORD *pImpLevel,
+ void **pAuthInfo,
+ DWORD *pCapabilities) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetBlanket(
+ IUnknown *pProxy,
+ DWORD AuthnSvc,
+ DWORD AuthzSvc,
+ OLECHAR *pServerPrincName,
+ DWORD AuthnLevel,
+ DWORD ImpLevel,
+ void *pAuthInfo,
+ DWORD Capabilities) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CopyProxy(
+ IUnknown *pProxy,
+ IUnknown **ppCopy) = 0;
+
+};
+#else
+typedef struct IClientSecurityVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IClientSecurity* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IClientSecurity* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IClientSecurity* This);
+
+ /*** IClientSecurity methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
+ IClientSecurity* This,
+ IUnknown *pProxy,
+ DWORD *pAuthnSvc,
+ DWORD *pAuthzSvc,
+ OLECHAR **pServerPrincName,
+ DWORD *pAuthnLevel,
+ DWORD *pImpLevel,
+ void **pAuthInfo,
+ DWORD *pCapabilities);
+
+ HRESULT (STDMETHODCALLTYPE *SetBlanket)(
+ IClientSecurity* This,
+ IUnknown *pProxy,
+ DWORD AuthnSvc,
+ DWORD AuthzSvc,
+ OLECHAR *pServerPrincName,
+ DWORD AuthnLevel,
+ DWORD ImpLevel,
+ void *pAuthInfo,
+ DWORD Capabilities);
+
+ HRESULT (STDMETHODCALLTYPE *CopyProxy)(
+ IClientSecurity* This,
+ IUnknown *pProxy,
+ IUnknown **ppCopy);
+
+ END_INTERFACE
+} IClientSecurityVtbl;
+interface IClientSecurity {
+ CONST_VTBL IClientSecurityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IClientSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IClientSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IClientSecurity_Release(This) (This)->lpVtbl->Release(This)
+/*** IClientSecurity methods ***/
+#define IClientSecurity_QueryBlanket(This,pProxy,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pAuthInfo,pCapabilities) (This)->lpVtbl->QueryBlanket(This,pProxy,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pAuthInfo,pCapabilities)
+#define IClientSecurity_SetBlanket(This,pProxy,AuthnSvc,AuthzSvc,pServerPrincName,AuthnLevel,ImpLevel,pAuthInfo,Capabilities) (This)->lpVtbl->SetBlanket(This,pProxy,AuthnSvc,AuthzSvc,pServerPrincName,AuthnLevel,ImpLevel,pAuthInfo,Capabilities)
+#define IClientSecurity_CopyProxy(This,pProxy,ppCopy) (This)->lpVtbl->CopyProxy(This,pProxy,ppCopy)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IClientSecurity_QueryBlanket_Proxy(
+ IClientSecurity* This,
+ IUnknown *pProxy,
+ DWORD *pAuthnSvc,
+ DWORD *pAuthzSvc,
+ OLECHAR **pServerPrincName,
+ DWORD *pAuthnLevel,
+ DWORD *pImpLevel,
+ void **pAuthInfo,
+ DWORD *pCapabilities);
+void __RPC_STUB IClientSecurity_QueryBlanket_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IClientSecurity_SetBlanket_Proxy(
+ IClientSecurity* This,
+ IUnknown *pProxy,
+ DWORD AuthnSvc,
+ DWORD AuthzSvc,
+ OLECHAR *pServerPrincName,
+ DWORD AuthnLevel,
+ DWORD ImpLevel,
+ void *pAuthInfo,
+ DWORD Capabilities);
+void __RPC_STUB IClientSecurity_SetBlanket_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IClientSecurity_CopyProxy_Proxy(
+ IClientSecurity* This,
+ IUnknown *pProxy,
+ IUnknown **ppCopy);
+void __RPC_STUB IClientSecurity_CopyProxy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IClientSecurity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IServerSecurity interface
+ */
+#ifndef __IServerSecurity_INTERFACE_DEFINED__
+#define __IServerSecurity_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IServerSecurity, 0x0000013e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IServerSecurity : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryBlanket(
+ DWORD *pAuthnSvc,
+ DWORD *pAuthzSvc,
+ OLECHAR **pServerPrincName,
+ DWORD *pAuthnLevel,
+ DWORD *pImpLevel,
+ void **pPrivs,
+ DWORD *pCapabilities) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ImpersonateClient(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RevertToSelf(
+ ) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE IsImpersonating(
+ ) = 0;
+
+};
+#else
+typedef struct IServerSecurityVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IServerSecurity* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IServerSecurity* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IServerSecurity* This);
+
+ /*** IServerSecurity methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryBlanket)(
+ IServerSecurity* This,
+ DWORD *pAuthnSvc,
+ DWORD *pAuthzSvc,
+ OLECHAR **pServerPrincName,
+ DWORD *pAuthnLevel,
+ DWORD *pImpLevel,
+ void **pPrivs,
+ DWORD *pCapabilities);
+
+ HRESULT (STDMETHODCALLTYPE *ImpersonateClient)(
+ IServerSecurity* This);
+
+ HRESULT (STDMETHODCALLTYPE *RevertToSelf)(
+ IServerSecurity* This);
+
+ BOOL (STDMETHODCALLTYPE *IsImpersonating)(
+ IServerSecurity* This);
+
+ END_INTERFACE
+} IServerSecurityVtbl;
+interface IServerSecurity {
+ CONST_VTBL IServerSecurityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IServerSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IServerSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IServerSecurity_Release(This) (This)->lpVtbl->Release(This)
+/*** IServerSecurity methods ***/
+#define IServerSecurity_QueryBlanket(This,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pPrivs,pCapabilities) (This)->lpVtbl->QueryBlanket(This,pAuthnSvc,pAuthzSvc,pServerPrincName,pAuthnLevel,pImpLevel,pPrivs,pCapabilities)
+#define IServerSecurity_ImpersonateClient(This) (This)->lpVtbl->ImpersonateClient(This)
+#define IServerSecurity_RevertToSelf(This) (This)->lpVtbl->RevertToSelf(This)
+#define IServerSecurity_IsImpersonating(This) (This)->lpVtbl->IsImpersonating(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IServerSecurity_QueryBlanket_Proxy(
+ IServerSecurity* This,
+ DWORD *pAuthnSvc,
+ DWORD *pAuthzSvc,
+ OLECHAR **pServerPrincName,
+ DWORD *pAuthnLevel,
+ DWORD *pImpLevel,
+ void **pPrivs,
+ DWORD *pCapabilities);
+void __RPC_STUB IServerSecurity_QueryBlanket_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IServerSecurity_ImpersonateClient_Proxy(
+ IServerSecurity* This);
+void __RPC_STUB IServerSecurity_ImpersonateClient_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IServerSecurity_RevertToSelf_Proxy(
+ IServerSecurity* This);
+void __RPC_STUB IServerSecurity_RevertToSelf_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IServerSecurity_IsImpersonating_Proxy(
+ IServerSecurity* This);
+void __RPC_STUB IServerSecurity_IsImpersonating_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IServerSecurity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncSetup interface
+ */
+#ifndef __IAsyncSetup_INTERFACE_DEFINED__
+#define __IAsyncSetup_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAsyncSetup, 0x00000024, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAsyncSetup : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetAsyncManager(
+ REFIID riid,
+ IUnknown *pOuter,
+ DWORD dwFlags,
+ IUnknown **ppInner,
+ IAsyncManager **ppAsyncMgr) = 0;
+
+};
+#else
+typedef struct IAsyncSetupVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAsyncSetup* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAsyncSetup* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAsyncSetup* This);
+
+ /*** IAsyncSetup methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetAsyncManager)(
+ IAsyncSetup* This,
+ REFIID riid,
+ IUnknown *pOuter,
+ DWORD dwFlags,
+ IUnknown **ppInner,
+ IAsyncManager **ppAsyncMgr);
+
+ END_INTERFACE
+} IAsyncSetupVtbl;
+interface IAsyncSetup {
+ CONST_VTBL IAsyncSetupVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAsyncSetup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncSetup_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncSetup_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncSetup methods ***/
+#define IAsyncSetup_GetAsyncManager(This,riid,pOuter,dwFlags,ppInner,ppAsyncMgr) (This)->lpVtbl->GetAsyncManager(This,riid,pOuter,dwFlags,ppInner,ppAsyncMgr)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAsyncSetup_GetAsyncManager_Proxy(
+ IAsyncSetup* This,
+ REFIID riid,
+ IUnknown *pOuter,
+ DWORD dwFlags,
+ IUnknown **ppInner,
+ IAsyncManager **ppAsyncMgr);
+void __RPC_STUB IAsyncSetup_GetAsyncManager_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IAsyncSetup_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDirectWriterLock interface
+ */
+#ifndef __IDirectWriterLock_INTERFACE_DEFINED__
+#define __IDirectWriterLock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IDirectWriterLock, 0x0e6d4d92, 0x6738, 0x11cf, 0x96,0x08, 0x00,0xaa,0x00,0x68,0x0d,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDirectWriterLock : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE WaitForWriteAccess(
+ DWORD dwTimeout) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReleaseWriteAccess(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE HaveWriteAccess(
+ ) = 0;
+
+};
+#else
+typedef struct IDirectWriterLockVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IDirectWriterLock* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IDirectWriterLock* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IDirectWriterLock* This);
+
+ /*** IDirectWriterLock methods ***/
+ HRESULT (STDMETHODCALLTYPE *WaitForWriteAccess)(
+ IDirectWriterLock* This,
+ DWORD dwTimeout);
+
+ HRESULT (STDMETHODCALLTYPE *ReleaseWriteAccess)(
+ IDirectWriterLock* This);
+
+ HRESULT (STDMETHODCALLTYPE *HaveWriteAccess)(
+ IDirectWriterLock* This);
+
+ END_INTERFACE
+} IDirectWriterLockVtbl;
+interface IDirectWriterLock {
+ CONST_VTBL IDirectWriterLockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDirectWriterLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDirectWriterLock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDirectWriterLock_Release(This) (This)->lpVtbl->Release(This)
+/*** IDirectWriterLock methods ***/
+#define IDirectWriterLock_WaitForWriteAccess(This,dwTimeout) (This)->lpVtbl->WaitForWriteAccess(This,dwTimeout)
+#define IDirectWriterLock_ReleaseWriteAccess(This) (This)->lpVtbl->ReleaseWriteAccess(This)
+#define IDirectWriterLock_HaveWriteAccess(This) (This)->lpVtbl->HaveWriteAccess(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDirectWriterLock_WaitForWriteAccess_Proxy(
+ IDirectWriterLock* This,
+ DWORD dwTimeout);
+void __RPC_STUB IDirectWriterLock_WaitForWriteAccess_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectWriterLock_ReleaseWriteAccess_Proxy(
+ IDirectWriterLock* This);
+void __RPC_STUB IDirectWriterLock_ReleaseWriteAccess_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDirectWriterLock_HaveWriteAccess_Proxy(
+ IDirectWriterLock* This);
+void __RPC_STUB IDirectWriterLock_HaveWriteAccess_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IDirectWriterLock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronize interface
+ */
+#ifndef __ISynchronize_INTERFACE_DEFINED__
+#define __ISynchronize_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronize, 0x00000030, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronize : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Wait(
+ DWORD dwFlags,
+ DWORD dwMilliseconds) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Signal(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+};
+#else
+typedef struct ISynchronizeVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISynchronize* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISynchronize* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISynchronize* This);
+
+ /*** ISynchronize methods ***/
+ HRESULT (STDMETHODCALLTYPE *Wait)(
+ ISynchronize* This,
+ DWORD dwFlags,
+ DWORD dwMilliseconds);
+
+ HRESULT (STDMETHODCALLTYPE *Signal)(
+ ISynchronize* This);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ ISynchronize* This);
+
+ END_INTERFACE
+} ISynchronizeVtbl;
+interface ISynchronize {
+ CONST_VTBL ISynchronizeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronize_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronize_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronize_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronize methods ***/
+#define ISynchronize_Wait(This,dwFlags,dwMilliseconds) (This)->lpVtbl->Wait(This,dwFlags,dwMilliseconds)
+#define ISynchronize_Signal(This) (This)->lpVtbl->Signal(This)
+#define ISynchronize_Reset(This) (This)->lpVtbl->Reset(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronize_Wait_Proxy(
+ ISynchronize* This,
+ DWORD dwFlags,
+ DWORD dwMilliseconds);
+void __RPC_STUB ISynchronize_Wait_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISynchronize_Signal_Proxy(
+ ISynchronize* This);
+void __RPC_STUB ISynchronize_Signal_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISynchronize_Reset_Proxy(
+ ISynchronize* This);
+void __RPC_STUB ISynchronize_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISynchronize_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeHandle interface
+ */
+#ifndef __ISynchronizeHandle_INTERFACE_DEFINED__
+#define __ISynchronizeHandle_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeHandle, 0x00000031, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeHandle : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetHandle(
+ HANDLE *ph) = 0;
+
+};
+#else
+typedef struct ISynchronizeHandleVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISynchronizeHandle* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISynchronizeHandle* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISynchronizeHandle* This);
+
+ /*** ISynchronizeHandle methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetHandle)(
+ ISynchronizeHandle* This,
+ HANDLE *ph);
+
+ END_INTERFACE
+} ISynchronizeHandleVtbl;
+interface ISynchronizeHandle {
+ CONST_VTBL ISynchronizeHandleVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeHandle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeHandle_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeHandle_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronizeHandle methods ***/
+#define ISynchronizeHandle_GetHandle(This,ph) (This)->lpVtbl->GetHandle(This,ph)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeHandle_GetHandle_Proxy(
+ ISynchronizeHandle* This,
+ HANDLE *ph);
+void __RPC_STUB ISynchronizeHandle_GetHandle_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISynchronizeHandle_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeEvent interface
+ */
+#ifndef __ISynchronizeEvent_INTERFACE_DEFINED__
+#define __ISynchronizeEvent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeEvent, 0x00000032, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeEvent : public ISynchronizeHandle
+{
+ virtual HRESULT STDMETHODCALLTYPE SetEventHandle(
+ HANDLE *ph) = 0;
+
+};
+#else
+typedef struct ISynchronizeEventVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISynchronizeEvent* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISynchronizeEvent* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISynchronizeEvent* This);
+
+ /*** ISynchronizeHandle methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetHandle)(
+ ISynchronizeEvent* This,
+ HANDLE *ph);
+
+ /*** ISynchronizeEvent methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetEventHandle)(
+ ISynchronizeEvent* This,
+ HANDLE *ph);
+
+ END_INTERFACE
+} ISynchronizeEventVtbl;
+interface ISynchronizeEvent {
+ CONST_VTBL ISynchronizeEventVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeEvent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeEvent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeEvent_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronizeHandle methods ***/
+#define ISynchronizeEvent_GetHandle(This,ph) (This)->lpVtbl->GetHandle(This,ph)
+/*** ISynchronizeEvent methods ***/
+#define ISynchronizeEvent_SetEventHandle(This,ph) (This)->lpVtbl->SetEventHandle(This,ph)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeEvent_SetEventHandle_Proxy(
+ ISynchronizeEvent* This,
+ HANDLE *ph);
+void __RPC_STUB ISynchronizeEvent_SetEventHandle_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISynchronizeEvent_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeContainer interface
+ */
+#ifndef __ISynchronizeContainer_INTERFACE_DEFINED__
+#define __ISynchronizeContainer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeContainer, 0x00000033, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeContainer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE AddSynchronize(
+ ISynchronize *pSync) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE WaitMultiple(
+ DWORD dwFlags,
+ DWORD dwTimeOut,
+ ISynchronize **ppSync) = 0;
+
+};
+#else
+typedef struct ISynchronizeContainerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISynchronizeContainer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISynchronizeContainer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISynchronizeContainer* This);
+
+ /*** ISynchronizeContainer methods ***/
+ HRESULT (STDMETHODCALLTYPE *AddSynchronize)(
+ ISynchronizeContainer* This,
+ ISynchronize *pSync);
+
+ HRESULT (STDMETHODCALLTYPE *WaitMultiple)(
+ ISynchronizeContainer* This,
+ DWORD dwFlags,
+ DWORD dwTimeOut,
+ ISynchronize **ppSync);
+
+ END_INTERFACE
+} ISynchronizeContainerVtbl;
+interface ISynchronizeContainer {
+ CONST_VTBL ISynchronizeContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronizeContainer methods ***/
+#define ISynchronizeContainer_AddSynchronize(This,pSync) (This)->lpVtbl->AddSynchronize(This,pSync)
+#define ISynchronizeContainer_WaitMultiple(This,dwFlags,dwTimeOut,ppSync) (This)->lpVtbl->WaitMultiple(This,dwFlags,dwTimeOut,ppSync)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeContainer_AddSynchronize_Proxy(
+ ISynchronizeContainer* This,
+ ISynchronize *pSync);
+void __RPC_STUB ISynchronizeContainer_AddSynchronize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISynchronizeContainer_WaitMultiple_Proxy(
+ ISynchronizeContainer* This,
+ DWORD dwFlags,
+ DWORD dwTimeOut,
+ ISynchronize **ppSync);
+void __RPC_STUB ISynchronizeContainer_WaitMultiple_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISynchronizeContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISynchronizeMutex interface
+ */
+#ifndef __ISynchronizeMutex_INTERFACE_DEFINED__
+#define __ISynchronizeMutex_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISynchronizeMutex, 0x00000025, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISynchronizeMutex : public ISynchronize
+{
+ virtual HRESULT STDMETHODCALLTYPE ReleaseMutex(
+ ) = 0;
+
+};
+#else
+typedef struct ISynchronizeMutexVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISynchronizeMutex* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISynchronizeMutex* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISynchronizeMutex* This);
+
+ /*** ISynchronize methods ***/
+ HRESULT (STDMETHODCALLTYPE *Wait)(
+ ISynchronizeMutex* This,
+ DWORD dwFlags,
+ DWORD dwMilliseconds);
+
+ HRESULT (STDMETHODCALLTYPE *Signal)(
+ ISynchronizeMutex* This);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ ISynchronizeMutex* This);
+
+ /*** ISynchronizeMutex methods ***/
+ HRESULT (STDMETHODCALLTYPE *ReleaseMutex)(
+ ISynchronizeMutex* This);
+
+ END_INTERFACE
+} ISynchronizeMutexVtbl;
+interface ISynchronizeMutex {
+ CONST_VTBL ISynchronizeMutexVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISynchronizeMutex_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISynchronizeMutex_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISynchronizeMutex_Release(This) (This)->lpVtbl->Release(This)
+/*** ISynchronize methods ***/
+#define ISynchronizeMutex_Wait(This,dwFlags,dwMilliseconds) (This)->lpVtbl->Wait(This,dwFlags,dwMilliseconds)
+#define ISynchronizeMutex_Signal(This) (This)->lpVtbl->Signal(This)
+#define ISynchronizeMutex_Reset(This) (This)->lpVtbl->Reset(This)
+/*** ISynchronizeMutex methods ***/
+#define ISynchronizeMutex_ReleaseMutex(This) (This)->lpVtbl->ReleaseMutex(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISynchronizeMutex_ReleaseMutex_Proxy(
+ ISynchronizeMutex* This);
+void __RPC_STUB ISynchronizeMutex_ReleaseMutex_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISynchronizeMutex_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICancelMethodCalls interface
+ */
+#ifndef __ICancelMethodCalls_INTERFACE_DEFINED__
+#define __ICancelMethodCalls_INTERFACE_DEFINED__
+
+typedef ICancelMethodCalls *LPCANCELMETHODCALLS;
+DEFINE_GUID(IID_ICancelMethodCalls, 0x00000029, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICancelMethodCalls : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Cancel(
+ ULONG ulSeconds) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE TestCancel(
+ ) = 0;
+
+};
+#else
+typedef struct ICancelMethodCallsVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICancelMethodCalls* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICancelMethodCalls* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICancelMethodCalls* This);
+
+ /*** ICancelMethodCalls methods ***/
+ HRESULT (STDMETHODCALLTYPE *Cancel)(
+ ICancelMethodCalls* This,
+ ULONG ulSeconds);
+
+ HRESULT (STDMETHODCALLTYPE *TestCancel)(
+ ICancelMethodCalls* This);
+
+ END_INTERFACE
+} ICancelMethodCallsVtbl;
+interface ICancelMethodCalls {
+ CONST_VTBL ICancelMethodCallsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICancelMethodCalls_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICancelMethodCalls_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICancelMethodCalls_Release(This) (This)->lpVtbl->Release(This)
+/*** ICancelMethodCalls methods ***/
+#define ICancelMethodCalls_Cancel(This,ulSeconds) (This)->lpVtbl->Cancel(This,ulSeconds)
+#define ICancelMethodCalls_TestCancel(This) (This)->lpVtbl->TestCancel(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICancelMethodCalls_Cancel_Proxy(
+ ICancelMethodCalls* This,
+ ULONG ulSeconds);
+void __RPC_STUB ICancelMethodCalls_Cancel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ICancelMethodCalls_TestCancel_Proxy(
+ ICancelMethodCalls* This);
+void __RPC_STUB ICancelMethodCalls_TestCancel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICancelMethodCalls_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAsyncManager interface
+ */
+#ifndef __IAsyncManager_INTERFACE_DEFINED__
+#define __IAsyncManager_INTERFACE_DEFINED__
+
+typedef enum tagDCOM_CALL_STATE {
+ DCOM_NONE = 0,
+ DCOM_CALL_COMPLETE = 1,
+ DCOM_CALL_CANCELED = 2
+} DCOM_CALL_STATE;
+DEFINE_GUID(IID_IAsyncManager, 0x0000002a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAsyncManager : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CompleteCall(
+ HRESULT Result) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCallContext(
+ REFIID riid,
+ void **pInterface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetState(
+ ULONG *pulStateFlags) = 0;
+
+};
+#else
+typedef struct IAsyncManagerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAsyncManager* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAsyncManager* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAsyncManager* This);
+
+ /*** IAsyncManager methods ***/
+ HRESULT (STDMETHODCALLTYPE *CompleteCall)(
+ IAsyncManager* This,
+ HRESULT Result);
+
+ HRESULT (STDMETHODCALLTYPE *GetCallContext)(
+ IAsyncManager* This,
+ REFIID riid,
+ void **pInterface);
+
+ HRESULT (STDMETHODCALLTYPE *GetState)(
+ IAsyncManager* This,
+ ULONG *pulStateFlags);
+
+ END_INTERFACE
+} IAsyncManagerVtbl;
+interface IAsyncManager {
+ CONST_VTBL IAsyncManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAsyncManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAsyncManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAsyncManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IAsyncManager methods ***/
+#define IAsyncManager_CompleteCall(This,Result) (This)->lpVtbl->CompleteCall(This,Result)
+#define IAsyncManager_GetCallContext(This,riid,pInterface) (This)->lpVtbl->GetCallContext(This,riid,pInterface)
+#define IAsyncManager_GetState(This,pulStateFlags) (This)->lpVtbl->GetState(This,pulStateFlags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAsyncManager_CompleteCall_Proxy(
+ IAsyncManager* This,
+ HRESULT Result);
+void __RPC_STUB IAsyncManager_CompleteCall_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncManager_GetCallContext_Proxy(
+ IAsyncManager* This,
+ REFIID riid,
+ void **pInterface);
+void __RPC_STUB IAsyncManager_GetCallContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAsyncManager_GetState_Proxy(
+ IAsyncManager* This,
+ ULONG *pulStateFlags);
+void __RPC_STUB IAsyncManager_GetState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IAsyncManager_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ICallFactory interface
+ */
+#ifndef __ICallFactory_INTERFACE_DEFINED__
+#define __ICallFactory_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ICallFactory, 0x1c733a30, 0x2a1c, 0x11ce, 0xad,0xe5, 0x00,0xaa,0x00,0x44,0x77,0x3d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ICallFactory : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateCall(
+ REFIID riid,
+ IUnknown *pCtrlUnk,
+ REFIID riid2,
+ IUnknown **ppv) = 0;
+
+};
+#else
+typedef struct ICallFactoryVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ICallFactory* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ICallFactory* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ICallFactory* This);
+
+ /*** ICallFactory methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateCall)(
+ ICallFactory* This,
+ REFIID riid,
+ IUnknown *pCtrlUnk,
+ REFIID riid2,
+ IUnknown **ppv);
+
+ END_INTERFACE
+} ICallFactoryVtbl;
+interface ICallFactory {
+ CONST_VTBL ICallFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ICallFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ICallFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ICallFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** ICallFactory methods ***/
+#define ICallFactory_CreateCall(This,riid,pCtrlUnk,riid2,ppv) (This)->lpVtbl->CreateCall(This,riid,pCtrlUnk,riid2,ppv)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ICallFactory_CreateCall_Proxy(
+ ICallFactory* This,
+ REFIID riid,
+ IUnknown *pCtrlUnk,
+ REFIID riid2,
+ IUnknown **ppv);
+void __RPC_STUB ICallFactory_CreateCall_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ICallFactory_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IRpcOptions interface
+ */
+#ifndef __IRpcOptions_INTERFACE_DEFINED__
+#define __IRpcOptions_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRpcOptions, 0x00000144, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcOptions : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Set(
+ IUnknown *pPrx,
+ DWORD dwProperty,
+ ULONG_PTR dwValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Query(
+ IUnknown *pPrx,
+ DWORD dwProperty,
+ ULONG_PTR *pdwValue) = 0;
+
+};
+#else
+typedef struct IRpcOptionsVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcOptions* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcOptions* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcOptions* This);
+
+ /*** IRpcOptions methods ***/
+ HRESULT (STDMETHODCALLTYPE *Set)(
+ IRpcOptions* This,
+ IUnknown *pPrx,
+ DWORD dwProperty,
+ ULONG_PTR dwValue);
+
+ HRESULT (STDMETHODCALLTYPE *Query)(
+ IRpcOptions* This,
+ IUnknown *pPrx,
+ DWORD dwProperty,
+ ULONG_PTR *pdwValue);
+
+ END_INTERFACE
+} IRpcOptionsVtbl;
+interface IRpcOptions {
+ CONST_VTBL IRpcOptionsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcOptions_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcOptions_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcOptions_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcOptions methods ***/
+#define IRpcOptions_Set(This,pPrx,dwProperty,dwValue) (This)->lpVtbl->Set(This,pPrx,dwProperty,dwValue)
+#define IRpcOptions_Query(This,pPrx,dwProperty,pdwValue) (This)->lpVtbl->Query(This,pPrx,dwProperty,pdwValue)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcOptions_Set_Proxy(
+ IRpcOptions* This,
+ IUnknown *pPrx,
+ DWORD dwProperty,
+ ULONG_PTR dwValue);
+void __RPC_STUB IRpcOptions_Set_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcOptions_Query_Proxy(
+ IRpcOptions* This,
+ IUnknown *pPrx,
+ DWORD dwProperty,
+ ULONG_PTR *pdwValue);
+void __RPC_STUB IRpcOptions_Query_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcOptions_INTERFACE_DEFINED__ */
+
+enum {
+ COMBND_RPCTIMEOUT = 1,
+ COMBND_SERVER_LOCALITY = 2
+};
+
+enum {
+ SERVER_LOCALITY_PROCESS_LOCAL = 0,
+ SERVER_LOCALITY_MACHINE_LOCAL = 1,
+ SERVER_LOCALITY_REMOTE = 2
+};
+
+/*****************************************************************************
+ * IRpcHelper interface
+ */
+#ifndef __IRpcHelper_INTERFACE_DEFINED__
+#define __IRpcHelper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IRpcHelper, 0x00000149, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IRpcHelper : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetDCOMProtocolVersion(
+ DWORD *pComVersion) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetIIDFromOBJREF(
+ void *pObjRef,
+ IID **piid) = 0;
+
+};
+#else
+typedef struct IRpcHelperVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IRpcHelper* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IRpcHelper* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IRpcHelper* This);
+
+ /*** IRpcHelper methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetDCOMProtocolVersion)(
+ IRpcHelper* This,
+ DWORD *pComVersion);
+
+ HRESULT (STDMETHODCALLTYPE *GetIIDFromOBJREF)(
+ IRpcHelper* This,
+ void *pObjRef,
+ IID **piid);
+
+ END_INTERFACE
+} IRpcHelperVtbl;
+interface IRpcHelper {
+ CONST_VTBL IRpcHelperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IRpcHelper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IRpcHelper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IRpcHelper_Release(This) (This)->lpVtbl->Release(This)
+/*** IRpcHelper methods ***/
+#define IRpcHelper_GetDCOMProtocolVersion(This,pComVersion) (This)->lpVtbl->GetDCOMProtocolVersion(This,pComVersion)
+#define IRpcHelper_GetIIDFromOBJREF(This,pObjRef,piid) (This)->lpVtbl->GetIIDFromOBJREF(This,pObjRef,piid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IRpcHelper_GetDCOMProtocolVersion_Proxy(
+ IRpcHelper* This,
+ DWORD *pComVersion);
+void __RPC_STUB IRpcHelper_GetDCOMProtocolVersion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IRpcHelper_GetIIDFromOBJREF_Proxy(
+ IRpcHelper* This,
+ void *pObjRef,
+ IID **piid);
+void __RPC_STUB IRpcHelper_GetIIDFromOBJREF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IRpcHelper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IReleaseMarshalBuffers interface
+ */
+#ifndef __IReleaseMarshalBuffers_INTERFACE_DEFINED__
+#define __IReleaseMarshalBuffers_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IReleaseMarshalBuffers, 0xeb0cb9e8, 0x7996, 0x11d2, 0x87,0x2e, 0x00,0x00,0xf8,0x08,0x08,0x59);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IReleaseMarshalBuffers : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ReleaseMarshalBuffer(
+ RPCOLEMESSAGE *pMsg,
+ DWORD dwFlags,
+ IUnknown *pChnl) = 0;
+
+};
+#else
+typedef struct IReleaseMarshalBuffersVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IReleaseMarshalBuffers* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IReleaseMarshalBuffers* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IReleaseMarshalBuffers* This);
+
+ /*** IReleaseMarshalBuffers methods ***/
+ HRESULT (STDMETHODCALLTYPE *ReleaseMarshalBuffer)(
+ IReleaseMarshalBuffers* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD dwFlags,
+ IUnknown *pChnl);
+
+ END_INTERFACE
+} IReleaseMarshalBuffersVtbl;
+interface IReleaseMarshalBuffers {
+ CONST_VTBL IReleaseMarshalBuffersVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IReleaseMarshalBuffers_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IReleaseMarshalBuffers_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IReleaseMarshalBuffers_Release(This) (This)->lpVtbl->Release(This)
+/*** IReleaseMarshalBuffers methods ***/
+#define IReleaseMarshalBuffers_ReleaseMarshalBuffer(This,pMsg,dwFlags,pChnl) (This)->lpVtbl->ReleaseMarshalBuffer(This,pMsg,dwFlags,pChnl)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IReleaseMarshalBuffers_ReleaseMarshalBuffer_Proxy(
+ IReleaseMarshalBuffers* This,
+ RPCOLEMESSAGE *pMsg,
+ DWORD dwFlags,
+ IUnknown *pChnl);
+void __RPC_STUB IReleaseMarshalBuffers_ReleaseMarshalBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IReleaseMarshalBuffers_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWaitMultiple interface
+ */
+#ifndef __IWaitMultiple_INTERFACE_DEFINED__
+#define __IWaitMultiple_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWaitMultiple, 0x0000002b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWaitMultiple : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE WaitMultiple(
+ DWORD timeout,
+ ISynchronize **pSync) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddSynchronize(
+ ISynchronize *pSync) = 0;
+
+};
+#else
+typedef struct IWaitMultipleVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWaitMultiple* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWaitMultiple* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWaitMultiple* This);
+
+ /*** IWaitMultiple methods ***/
+ HRESULT (STDMETHODCALLTYPE *WaitMultiple)(
+ IWaitMultiple* This,
+ DWORD timeout,
+ ISynchronize **pSync);
+
+ HRESULT (STDMETHODCALLTYPE *AddSynchronize)(
+ IWaitMultiple* This,
+ ISynchronize *pSync);
+
+ END_INTERFACE
+} IWaitMultipleVtbl;
+interface IWaitMultiple {
+ CONST_VTBL IWaitMultipleVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWaitMultiple_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWaitMultiple_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWaitMultiple_Release(This) (This)->lpVtbl->Release(This)
+/*** IWaitMultiple methods ***/
+#define IWaitMultiple_WaitMultiple(This,timeout,pSync) (This)->lpVtbl->WaitMultiple(This,timeout,pSync)
+#define IWaitMultiple_AddSynchronize(This,pSync) (This)->lpVtbl->AddSynchronize(This,pSync)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWaitMultiple_WaitMultiple_Proxy(
+ IWaitMultiple* This,
+ DWORD timeout,
+ ISynchronize **pSync);
+void __RPC_STUB IWaitMultiple_WaitMultiple_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWaitMultiple_AddSynchronize_Proxy(
+ IWaitMultiple* This,
+ ISynchronize *pSync);
+void __RPC_STUB IWaitMultiple_AddSynchronize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWaitMultiple_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUrlMon interface
+ */
+#ifndef __IUrlMon_INTERFACE_DEFINED__
+#define __IUrlMon_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUrlMon, 0x00000026, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUrlMon : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE AsyncGetClassBits(
+ REFCLSID rclsid,
+ LPCWSTR pszTYPE,
+ LPCWSTR pszExt,
+ DWORD dwFileVersionMS,
+ DWORD dwFileVersionLS,
+ LPCWSTR pszCodeBase,
+ IBindCtx *pbc,
+ DWORD dwClassContext,
+ REFIID riid,
+ DWORD flags) = 0;
+
+};
+#else
+typedef struct IUrlMonVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IUrlMon* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IUrlMon* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IUrlMon* This);
+
+ /*** IUrlMon methods ***/
+ HRESULT (STDMETHODCALLTYPE *AsyncGetClassBits)(
+ IUrlMon* This,
+ REFCLSID rclsid,
+ LPCWSTR pszTYPE,
+ LPCWSTR pszExt,
+ DWORD dwFileVersionMS,
+ DWORD dwFileVersionLS,
+ LPCWSTR pszCodeBase,
+ IBindCtx *pbc,
+ DWORD dwClassContext,
+ REFIID riid,
+ DWORD flags);
+
+ END_INTERFACE
+} IUrlMonVtbl;
+interface IUrlMon {
+ CONST_VTBL IUrlMonVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUrlMon_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUrlMon_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUrlMon_Release(This) (This)->lpVtbl->Release(This)
+/*** IUrlMon methods ***/
+#define IUrlMon_AsyncGetClassBits(This,rclsid,pszTYPE,pszExt,dwFileVersionMS,dwFileVersionLS,pszCodeBase,pbc,dwClassContext,riid,flags) (This)->lpVtbl->AsyncGetClassBits(This,rclsid,pszTYPE,pszExt,dwFileVersionMS,dwFileVersionLS,pszCodeBase,pbc,dwClassContext,riid,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUrlMon_AsyncGetClassBits_Proxy(
+ IUrlMon* This,
+ REFCLSID rclsid,
+ LPCWSTR pszTYPE,
+ LPCWSTR pszExt,
+ DWORD dwFileVersionMS,
+ DWORD dwFileVersionLS,
+ LPCWSTR pszCodeBase,
+ IBindCtx *pbc,
+ DWORD dwClassContext,
+ REFIID riid,
+ DWORD flags);
+void __RPC_STUB IUrlMon_AsyncGetClassBits_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IUrlMon_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IForegroundTransfer interface
+ */
+#ifndef __IForegroundTransfer_INTERFACE_DEFINED__
+#define __IForegroundTransfer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IForegroundTransfer, 0x00000145, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IForegroundTransfer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE AllowForegroundTransfer(
+ void *lpvReserved) = 0;
+
+};
+#else
+typedef struct IForegroundTransferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IForegroundTransfer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IForegroundTransfer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IForegroundTransfer* This);
+
+ /*** IForegroundTransfer methods ***/
+ HRESULT (STDMETHODCALLTYPE *AllowForegroundTransfer)(
+ IForegroundTransfer* This,
+ void *lpvReserved);
+
+ END_INTERFACE
+} IForegroundTransferVtbl;
+interface IForegroundTransfer {
+ CONST_VTBL IForegroundTransferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IForegroundTransfer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IForegroundTransfer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IForegroundTransfer_Release(This) (This)->lpVtbl->Release(This)
+/*** IForegroundTransfer methods ***/
+#define IForegroundTransfer_AllowForegroundTransfer(This,lpvReserved) (This)->lpVtbl->AllowForegroundTransfer(This,lpvReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IForegroundTransfer_AllowForegroundTransfer_Proxy(
+ IForegroundTransfer* This,
+ void *lpvReserved);
+void __RPC_STUB IForegroundTransfer_AllowForegroundTransfer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IForegroundTransfer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAddrTrackingControl interface
+ */
+#ifndef __IAddrTrackingControl_INTERFACE_DEFINED__
+#define __IAddrTrackingControl_INTERFACE_DEFINED__
+
+typedef IAddrTrackingControl *LPADDRTRACKINGCONTROL;
+DEFINE_GUID(IID_IAddrTrackingControl, 0x00000147, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAddrTrackingControl : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE EnableCOMDynamicAddrTracking(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DisableCOMDynamicAddrTracking(
+ ) = 0;
+
+};
+#else
+typedef struct IAddrTrackingControlVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAddrTrackingControl* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAddrTrackingControl* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAddrTrackingControl* This);
+
+ /*** IAddrTrackingControl methods ***/
+ HRESULT (STDMETHODCALLTYPE *EnableCOMDynamicAddrTracking)(
+ IAddrTrackingControl* This);
+
+ HRESULT (STDMETHODCALLTYPE *DisableCOMDynamicAddrTracking)(
+ IAddrTrackingControl* This);
+
+ END_INTERFACE
+} IAddrTrackingControlVtbl;
+interface IAddrTrackingControl {
+ CONST_VTBL IAddrTrackingControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAddrTrackingControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAddrTrackingControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAddrTrackingControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IAddrTrackingControl methods ***/
+#define IAddrTrackingControl_EnableCOMDynamicAddrTracking(This) (This)->lpVtbl->EnableCOMDynamicAddrTracking(This)
+#define IAddrTrackingControl_DisableCOMDynamicAddrTracking(This) (This)->lpVtbl->DisableCOMDynamicAddrTracking(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAddrTrackingControl_EnableCOMDynamicAddrTracking_Proxy(
+ IAddrTrackingControl* This);
+void __RPC_STUB IAddrTrackingControl_EnableCOMDynamicAddrTracking_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAddrTrackingControl_DisableCOMDynamicAddrTracking_Proxy(
+ IAddrTrackingControl* This);
+void __RPC_STUB IAddrTrackingControl_DisableCOMDynamicAddrTracking_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IAddrTrackingControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAddrExclusionControl interface
+ */
+#ifndef __IAddrExclusionControl_INTERFACE_DEFINED__
+#define __IAddrExclusionControl_INTERFACE_DEFINED__
+
+typedef IAddrExclusionControl *LPADDREXCLUSIONCONTROL;
+DEFINE_GUID(IID_IAddrExclusionControl, 0x00000148, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAddrExclusionControl : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentAddrExclusionList(
+ REFIID riid,
+ void **ppEnumerator) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateAddrExclusionList(
+ IUnknown *pEnumerator) = 0;
+
+};
+#else
+typedef struct IAddrExclusionControlVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAddrExclusionControl* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAddrExclusionControl* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAddrExclusionControl* This);
+
+ /*** IAddrExclusionControl methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetCurrentAddrExclusionList)(
+ IAddrExclusionControl* This,
+ REFIID riid,
+ void **ppEnumerator);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateAddrExclusionList)(
+ IAddrExclusionControl* This,
+ IUnknown *pEnumerator);
+
+ END_INTERFACE
+} IAddrExclusionControlVtbl;
+interface IAddrExclusionControl {
+ CONST_VTBL IAddrExclusionControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAddrExclusionControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAddrExclusionControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAddrExclusionControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IAddrExclusionControl methods ***/
+#define IAddrExclusionControl_GetCurrentAddrExclusionList(This,riid,ppEnumerator) (This)->lpVtbl->GetCurrentAddrExclusionList(This,riid,ppEnumerator)
+#define IAddrExclusionControl_UpdateAddrExclusionList(This,pEnumerator) (This)->lpVtbl->UpdateAddrExclusionList(This,pEnumerator)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAddrExclusionControl_GetCurrentAddrExclusionList_Proxy(
+ IAddrExclusionControl* This,
+ REFIID riid,
+ void **ppEnumerator);
+void __RPC_STUB IAddrExclusionControl_GetCurrentAddrExclusionList_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IAddrExclusionControl_UpdateAddrExclusionList_Proxy(
+ IAddrExclusionControl* This,
+ IUnknown *pEnumerator);
+void __RPC_STUB IAddrExclusionControl_UpdateAddrExclusionList_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IAddrExclusionControl_INTERFACE_DEFINED__ */
+
+typedef enum _APTTYPE {
+ APTTYPE_CURRENT = -1,
+ APTTYPE_STA = 0,
+ APTTYPE_MTA = 1,
+ APTTYPE_NA = 2,
+ APTTYPE_MAINSTA = 3
+} APTTYPE;
+typedef enum _THDTYPE {
+ THDTYPE_BLOCKMESSAGES = 0,
+ THDTYPE_PROCESSMESSAGES = 1
+} THDTYPE;
+/*****************************************************************************
+ * IComThreadingInfo interface
+ */
+#ifndef __IComThreadingInfo_INTERFACE_DEFINED__
+#define __IComThreadingInfo_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IComThreadingInfo, 0x000001ce, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IComThreadingInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentApartmentType(
+ APTTYPE *pAptType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentThreadType(
+ THDTYPE *pThreadType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentLogicalThreadId(
+ GUID *pguidLogicalThreadId) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCurrentLogicalThreadId(
+ REFGUID rguid) = 0;
+
+};
+#else
+typedef struct IComThreadingInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IComThreadingInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IComThreadingInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IComThreadingInfo* This);
+
+ /*** IComThreadingInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetCurrentApartmentType)(
+ IComThreadingInfo* This,
+ APTTYPE *pAptType);
+
+ HRESULT (STDMETHODCALLTYPE *GetCurrentThreadType)(
+ IComThreadingInfo* This,
+ THDTYPE *pThreadType);
+
+ HRESULT (STDMETHODCALLTYPE *GetCurrentLogicalThreadId)(
+ IComThreadingInfo* This,
+ GUID *pguidLogicalThreadId);
+
+ HRESULT (STDMETHODCALLTYPE *SetCurrentLogicalThreadId)(
+ IComThreadingInfo* This,
+ REFGUID rguid);
+
+ END_INTERFACE
+} IComThreadingInfoVtbl;
+interface IComThreadingInfo {
+ CONST_VTBL IComThreadingInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IComThreadingInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IComThreadingInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IComThreadingInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IComThreadingInfo methods ***/
+#define IComThreadingInfo_GetCurrentApartmentType(This,pAptType) (This)->lpVtbl->GetCurrentApartmentType(This,pAptType)
+#define IComThreadingInfo_GetCurrentThreadType(This,pThreadType) (This)->lpVtbl->GetCurrentThreadType(This,pThreadType)
+#define IComThreadingInfo_GetCurrentLogicalThreadId(This,pguidLogicalThreadId) (This)->lpVtbl->GetCurrentLogicalThreadId(This,pguidLogicalThreadId)
+#define IComThreadingInfo_SetCurrentLogicalThreadId(This,rguid) (This)->lpVtbl->SetCurrentLogicalThreadId(This,rguid)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentApartmentType_Proxy(
+ IComThreadingInfo* This,
+ APTTYPE *pAptType);
+void __RPC_STUB IComThreadingInfo_GetCurrentApartmentType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentThreadType_Proxy(
+ IComThreadingInfo* This,
+ THDTYPE *pThreadType);
+void __RPC_STUB IComThreadingInfo_GetCurrentThreadType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_GetCurrentLogicalThreadId_Proxy(
+ IComThreadingInfo* This,
+ GUID *pguidLogicalThreadId);
+void __RPC_STUB IComThreadingInfo_GetCurrentLogicalThreadId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IComThreadingInfo_SetCurrentLogicalThreadId_Proxy(
+ IComThreadingInfo* This,
+ REFGUID rguid);
+void __RPC_STUB IComThreadingInfo_SetCurrentLogicalThreadId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IComThreadingInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IProcessInitControl interface
+ */
+#ifndef __IProcessInitControl_INTERFACE_DEFINED__
+#define __IProcessInitControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IProcessInitControl, 0x72380d55, 0x8d2b, 0x43a3, 0x85,0x13, 0x2b,0x6e,0xf3,0x14,0x34,0xe9);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IProcessInitControl : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ResetInitializerTimeout(
+ DWORD dwSecondsRemaining) = 0;
+
+};
+#else
+typedef struct IProcessInitControlVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IProcessInitControl* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IProcessInitControl* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IProcessInitControl* This);
+
+ /*** IProcessInitControl methods ***/
+ HRESULT (STDMETHODCALLTYPE *ResetInitializerTimeout)(
+ IProcessInitControl* This,
+ DWORD dwSecondsRemaining);
+
+ END_INTERFACE
+} IProcessInitControlVtbl;
+interface IProcessInitControl {
+ CONST_VTBL IProcessInitControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IProcessInitControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IProcessInitControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IProcessInitControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IProcessInitControl methods ***/
+#define IProcessInitControl_ResetInitializerTimeout(This,dwSecondsRemaining) (This)->lpVtbl->ResetInitializerTimeout(This,dwSecondsRemaining)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IProcessInitControl_ResetInitializerTimeout_Proxy(
+ IProcessInitControl* This,
+ DWORD dwSecondsRemaining);
+void __RPC_STUB IProcessInitControl_ResetInitializerTimeout_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IProcessInitControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInitializeSpy interface
+ */
+#ifndef __IInitializeSpy_INTERFACE_DEFINED__
+#define __IInitializeSpy_INTERFACE_DEFINED__
+
+typedef IInitializeSpy *LPINITIALIZESPY;
+DEFINE_GUID(IID_IInitializeSpy, 0x00000034, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInitializeSpy : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE PreInitialize(
+ DWORD dwCoInit,
+ DWORD dwCurThreadAptRefs) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PostInitialize(
+ HRESULT hrCoInit,
+ DWORD dwCoInit,
+ DWORD dwNewThreadAptRefs) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PreUninitialize(
+ DWORD dwCurThreadAptRefs) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PostUninitialize(
+ DWORD dwNewThreadAptRefs) = 0;
+
+};
+#else
+typedef struct IInitializeSpyVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInitializeSpy* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInitializeSpy* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInitializeSpy* This);
+
+ /*** IInitializeSpy methods ***/
+ HRESULT (STDMETHODCALLTYPE *PreInitialize)(
+ IInitializeSpy* This,
+ DWORD dwCoInit,
+ DWORD dwCurThreadAptRefs);
+
+ HRESULT (STDMETHODCALLTYPE *PostInitialize)(
+ IInitializeSpy* This,
+ HRESULT hrCoInit,
+ DWORD dwCoInit,
+ DWORD dwNewThreadAptRefs);
+
+ HRESULT (STDMETHODCALLTYPE *PreUninitialize)(
+ IInitializeSpy* This,
+ DWORD dwCurThreadAptRefs);
+
+ HRESULT (STDMETHODCALLTYPE *PostUninitialize)(
+ IInitializeSpy* This,
+ DWORD dwNewThreadAptRefs);
+
+ END_INTERFACE
+} IInitializeSpyVtbl;
+interface IInitializeSpy {
+ CONST_VTBL IInitializeSpyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInitializeSpy_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInitializeSpy_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInitializeSpy_Release(This) (This)->lpVtbl->Release(This)
+/*** IInitializeSpy methods ***/
+#define IInitializeSpy_PreInitialize(This,dwCoInit,dwCurThreadAptRefs) (This)->lpVtbl->PreInitialize(This,dwCoInit,dwCurThreadAptRefs)
+#define IInitializeSpy_PostInitialize(This,hrCoInit,dwCoInit,dwNewThreadAptRefs) (This)->lpVtbl->PostInitialize(This,hrCoInit,dwCoInit,dwNewThreadAptRefs)
+#define IInitializeSpy_PreUninitialize(This,dwCurThreadAptRefs) (This)->lpVtbl->PreUninitialize(This,dwCurThreadAptRefs)
+#define IInitializeSpy_PostUninitialize(This,dwNewThreadAptRefs) (This)->lpVtbl->PostUninitialize(This,dwNewThreadAptRefs)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PreInitialize_Proxy(
+ IInitializeSpy* This,
+ DWORD dwCoInit,
+ DWORD dwCurThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PreInitialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PostInitialize_Proxy(
+ IInitializeSpy* This,
+ HRESULT hrCoInit,
+ DWORD dwCoInit,
+ DWORD dwNewThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PostInitialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PreUninitialize_Proxy(
+ IInitializeSpy* This,
+ DWORD dwCurThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PreUninitialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInitializeSpy_PostUninitialize_Proxy(
+ IInitializeSpy* This,
+ DWORD dwNewThreadAptRefs);
+void __RPC_STUB IInitializeSpy_PostUninitialize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInitializeSpy_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IThumbnailExtractor interface
+ */
+#ifndef __IThumbnailExtractor_INTERFACE_DEFINED__
+#define __IThumbnailExtractor_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IThumbnailExtractor, 0x969dc708, 0x5c76, 0x11d1, 0x8d,0x86, 0x00,0x00,0xf8,0x04,0xb0,0x57);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IThumbnailExtractor : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ExtractThumbnail(
+ IStorage *pStg,
+ ULONG ulLength,
+ ULONG ulHeight,
+ ULONG *pulOutputLength,
+ ULONG *pulOutputHeight,
+ HBITMAP *phOutputBitmap) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnFileUpdated(
+ IStorage *pStg) = 0;
+
+};
+#else
+typedef struct IThumbnailExtractorVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IThumbnailExtractor* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IThumbnailExtractor* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IThumbnailExtractor* This);
+
+ /*** IThumbnailExtractor methods ***/
+ HRESULT (STDMETHODCALLTYPE *ExtractThumbnail)(
+ IThumbnailExtractor* This,
+ IStorage *pStg,
+ ULONG ulLength,
+ ULONG ulHeight,
+ ULONG *pulOutputLength,
+ ULONG *pulOutputHeight,
+ HBITMAP *phOutputBitmap);
+
+ HRESULT (STDMETHODCALLTYPE *OnFileUpdated)(
+ IThumbnailExtractor* This,
+ IStorage *pStg);
+
+ END_INTERFACE
+} IThumbnailExtractorVtbl;
+interface IThumbnailExtractor {
+ CONST_VTBL IThumbnailExtractorVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IThumbnailExtractor_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IThumbnailExtractor_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IThumbnailExtractor_Release(This) (This)->lpVtbl->Release(This)
+/*** IThumbnailExtractor methods ***/
+#define IThumbnailExtractor_ExtractThumbnail(This,pStg,ulLength,ulHeight,pulOutputLength,pulOutputHeight,phOutputBitmap) (This)->lpVtbl->ExtractThumbnail(This,pStg,ulLength,ulHeight,pulOutputLength,pulOutputHeight,phOutputBitmap)
+#define IThumbnailExtractor_OnFileUpdated(This,pStg) (This)->lpVtbl->OnFileUpdated(This,pStg)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IThumbnailExtractor_ExtractThumbnail_Proxy(
+ IThumbnailExtractor* This,
+ IStorage *pStg,
+ ULONG ulLength,
+ ULONG ulHeight,
+ ULONG *pulOutputLength,
+ ULONG *pulOutputHeight,
+ HBITMAP *phOutputBitmap);
+void __RPC_STUB IThumbnailExtractor_ExtractThumbnail_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IThumbnailExtractor_OnFileUpdated_Proxy(
+ IThumbnailExtractor* This,
+ IStorage *pStg);
+void __RPC_STUB IThumbnailExtractor_OnFileUpdated_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IThumbnailExtractor_INTERFACE_DEFINED__ */
+
+#ifdef USE_COM_CONTEXT_DEF
+typedef DWORD CPFLAGS;
+typedef struct tagContextProperty {
+ GUID policyId;
+ CPFLAGS flags;
+ IUnknown *pUnk;
+} ContextProperty;
+/*****************************************************************************
+ * IEnumContextProps interface
+ */
+#ifndef __IEnumContextProps_INTERFACE_DEFINED__
+#define __IEnumContextProps_INTERFACE_DEFINED__
+
+typedef IEnumContextProps *LPENUMCONTEXTPROPS;
+DEFINE_GUID(IID_IEnumContextProps, 0x000001c1, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumContextProps : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ ContextProperty *pContextProperties,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumContextProps **ppEnumContextProps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Count(
+ ULONG *pcelt) = 0;
+
+};
+#else
+typedef struct IEnumContextPropsVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumContextProps* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumContextProps* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumContextProps* This);
+
+ /*** IEnumContextProps methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumContextProps* This,
+ ULONG celt,
+ ContextProperty *pContextProperties,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumContextProps* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumContextProps* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumContextProps* This,
+ IEnumContextProps **ppEnumContextProps);
+
+ HRESULT (STDMETHODCALLTYPE *Count)(
+ IEnumContextProps* This,
+ ULONG *pcelt);
+
+ END_INTERFACE
+} IEnumContextPropsVtbl;
+interface IEnumContextProps {
+ CONST_VTBL IEnumContextPropsVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumContextProps_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumContextProps_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumContextProps_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumContextProps methods ***/
+#define IEnumContextProps_Next(This,celt,pContextProperties,pceltFetched) (This)->lpVtbl->Next(This,celt,pContextProperties,pceltFetched)
+#define IEnumContextProps_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumContextProps_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumContextProps_Clone(This,ppEnumContextProps) (This)->lpVtbl->Clone(This,ppEnumContextProps)
+#define IEnumContextProps_Count(This,pcelt) (This)->lpVtbl->Count(This,pcelt)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Next_Proxy(
+ IEnumContextProps* This,
+ ULONG celt,
+ ContextProperty *pContextProperties,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumContextProps_Next_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Skip_Proxy(
+ IEnumContextProps* This,
+ ULONG celt);
+void __RPC_STUB IEnumContextProps_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Reset_Proxy(
+ IEnumContextProps* This);
+void __RPC_STUB IEnumContextProps_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Clone_Proxy(
+ IEnumContextProps* This,
+ IEnumContextProps **ppEnumContextProps);
+void __RPC_STUB IEnumContextProps_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumContextProps_Count_Proxy(
+ IEnumContextProps* This,
+ ULONG *pcelt);
+void __RPC_STUB IEnumContextProps_Count_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IEnumContextProps_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IContext interface
+ */
+#ifndef __IContext_INTERFACE_DEFINED__
+#define __IContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContext, 0x000001c0, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IContext : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetProperty(
+ REFGUID policyId,
+ CPFLAGS flags,
+ IUnknown *pUnk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RemoveProperty(
+ REFGUID policyId) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetProperty(
+ REFGUID guid,
+ CPFLAGS *pFlags,
+ IUnknown **ppUnk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumContextProps(
+ IEnumContextProps **ppEnumContextProps) = 0;
+
+};
+#else
+typedef struct IContextVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IContext* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IContext* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IContext* This);
+
+ /*** IContext methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetProperty)(
+ IContext* This,
+ REFGUID policyId,
+ CPFLAGS flags,
+ IUnknown *pUnk);
+
+ HRESULT (STDMETHODCALLTYPE *RemoveProperty)(
+ IContext* This,
+ REFGUID policyId);
+
+ HRESULT (STDMETHODCALLTYPE *GetProperty)(
+ IContext* This,
+ REFGUID guid,
+ CPFLAGS *pFlags,
+ IUnknown **ppUnk);
+
+ HRESULT (STDMETHODCALLTYPE *EnumContextProps)(
+ IContext* This,
+ IEnumContextProps **ppEnumContextProps);
+
+ END_INTERFACE
+} IContextVtbl;
+interface IContext {
+ CONST_VTBL IContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IContext methods ***/
+#define IContext_SetProperty(This,policyId,flags,pUnk) (This)->lpVtbl->SetProperty(This,policyId,flags,pUnk)
+#define IContext_RemoveProperty(This,policyId) (This)->lpVtbl->RemoveProperty(This,policyId)
+#define IContext_GetProperty(This,guid,pFlags,ppUnk) (This)->lpVtbl->GetProperty(This,guid,pFlags,ppUnk)
+#define IContext_EnumContextProps(This,ppEnumContextProps) (This)->lpVtbl->EnumContextProps(This,ppEnumContextProps)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IContext_SetProperty_Proxy(
+ IContext* This,
+ REFGUID policyId,
+ CPFLAGS flags,
+ IUnknown *pUnk);
+void __RPC_STUB IContext_SetProperty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IContext_RemoveProperty_Proxy(
+ IContext* This,
+ REFGUID policyId);
+void __RPC_STUB IContext_RemoveProperty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IContext_GetProperty_Proxy(
+ IContext* This,
+ REFGUID guid,
+ CPFLAGS *pFlags,
+ IUnknown **ppUnk);
+void __RPC_STUB IContext_GetProperty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IContext_EnumContextProps_Proxy(
+ IContext* This,
+ IEnumContextProps **ppEnumContextProps);
+void __RPC_STUB IContext_EnumContextProps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IContext_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IObjContext interface
+ */
+#ifndef __IObjContext_INTERFACE_DEFINED__
+#define __IObjContext_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IObjContext, 0x000001c6, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IObjContext : public IContext
+{
+ virtual void STDMETHODCALLTYPE Reserved1(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE Reserved2(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE Reserved3(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE Reserved4(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE Reserved5(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE Reserved6(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE Reserved7(
+ ) = 0;
+
+};
+#else
+typedef struct IObjContextVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IObjContext* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IObjContext* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IObjContext* This);
+
+ /*** IContext methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetProperty)(
+ IObjContext* This,
+ REFGUID policyId,
+ CPFLAGS flags,
+ IUnknown *pUnk);
+
+ HRESULT (STDMETHODCALLTYPE *RemoveProperty)(
+ IObjContext* This,
+ REFGUID policyId);
+
+ HRESULT (STDMETHODCALLTYPE *GetProperty)(
+ IObjContext* This,
+ REFGUID guid,
+ CPFLAGS *pFlags,
+ IUnknown **ppUnk);
+
+ HRESULT (STDMETHODCALLTYPE *EnumContextProps)(
+ IObjContext* This,
+ IEnumContextProps **ppEnumContextProps);
+
+ /*** IObjContext methods ***/
+ void (STDMETHODCALLTYPE *Reserved1)(
+ IObjContext* This);
+
+ void (STDMETHODCALLTYPE *Reserved2)(
+ IObjContext* This);
+
+ void (STDMETHODCALLTYPE *Reserved3)(
+ IObjContext* This);
+
+ void (STDMETHODCALLTYPE *Reserved4)(
+ IObjContext* This);
+
+ void (STDMETHODCALLTYPE *Reserved5)(
+ IObjContext* This);
+
+ void (STDMETHODCALLTYPE *Reserved6)(
+ IObjContext* This);
+
+ void (STDMETHODCALLTYPE *Reserved7)(
+ IObjContext* This);
+
+ END_INTERFACE
+} IObjContextVtbl;
+interface IObjContext {
+ CONST_VTBL IObjContextVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IObjContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IObjContext_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IObjContext_Release(This) (This)->lpVtbl->Release(This)
+/*** IContext methods ***/
+#define IObjContext_SetProperty(This,policyId,flags,pUnk) (This)->lpVtbl->SetProperty(This,policyId,flags,pUnk)
+#define IObjContext_RemoveProperty(This,policyId) (This)->lpVtbl->RemoveProperty(This,policyId)
+#define IObjContext_GetProperty(This,guid,pFlags,ppUnk) (This)->lpVtbl->GetProperty(This,guid,pFlags,ppUnk)
+#define IObjContext_EnumContextProps(This,ppEnumContextProps) (This)->lpVtbl->EnumContextProps(This,ppEnumContextProps)
+/*** IObjContext methods ***/
+#define IObjContext_Reserved1(This) (This)->lpVtbl->Reserved1(This)
+#define IObjContext_Reserved2(This) (This)->lpVtbl->Reserved2(This)
+#define IObjContext_Reserved3(This) (This)->lpVtbl->Reserved3(This)
+#define IObjContext_Reserved4(This) (This)->lpVtbl->Reserved4(This)
+#define IObjContext_Reserved5(This) (This)->lpVtbl->Reserved5(This)
+#define IObjContext_Reserved6(This) (This)->lpVtbl->Reserved6(This)
+#define IObjContext_Reserved7(This) (This)->lpVtbl->Reserved7(This)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IObjContext_Reserved1_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved1_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved2_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved2_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved3_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved3_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved4_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved4_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved5_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved5_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved6_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved6_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IObjContext_Reserved7_Proxy(
+ IObjContext* This);
+void __RPC_STUB IObjContext_Reserved7_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IObjContext_INTERFACE_DEFINED__ */
+
+#endif /* defined USE_COM_CONTEXT_DEF */
+/* Begin additional prototypes for all interfaces */
+
+ULONG __RPC_USER SNB_UserSize (ULONG *, ULONG, SNB *);
+unsigned char * __RPC_USER SNB_UserMarshal (ULONG *, unsigned char *, SNB *);
+unsigned char * __RPC_USER SNB_UserUnmarshal(ULONG *, unsigned char *, SNB *);
+void __RPC_USER SNB_UserFree (ULONG *, SNB *);
+ULONG __RPC_USER CLIPFORMAT_UserSize (ULONG *, ULONG, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserMarshal (ULONG *, unsigned char *, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
+void __RPC_USER CLIPFORMAT_UserFree (ULONG *, CLIPFORMAT *);
+ULONG __RPC_USER STGMEDIUM_UserSize (ULONG *, ULONG, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserMarshal (ULONG *, unsigned char *, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
+void __RPC_USER STGMEDIUM_UserFree (ULONG *, STGMEDIUM *);
+ULONG __RPC_USER ASYNC_STGMEDIUM_UserSize (ULONG *, ULONG, ASYNC_STGMEDIUM *);
+unsigned char * __RPC_USER ASYNC_STGMEDIUM_UserMarshal (ULONG *, unsigned char *, ASYNC_STGMEDIUM *);
+unsigned char * __RPC_USER ASYNC_STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, ASYNC_STGMEDIUM *);
+void __RPC_USER ASYNC_STGMEDIUM_UserFree (ULONG *, ASYNC_STGMEDIUM *);
+ULONG __RPC_USER FLAG_STGMEDIUM_UserSize (ULONG *, ULONG, FLAG_STGMEDIUM *);
+unsigned char * __RPC_USER FLAG_STGMEDIUM_UserMarshal (ULONG *, unsigned char *, FLAG_STGMEDIUM *);
+unsigned char * __RPC_USER FLAG_STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, FLAG_STGMEDIUM *);
+void __RPC_USER FLAG_STGMEDIUM_UserFree (ULONG *, FLAG_STGMEDIUM *);
+ULONG __RPC_USER HBITMAP_UserSize (ULONG *, ULONG, HBITMAP *);
+unsigned char * __RPC_USER HBITMAP_UserMarshal (ULONG *, unsigned char *, HBITMAP *);
+unsigned char * __RPC_USER HBITMAP_UserUnmarshal(ULONG *, unsigned char *, HBITMAP *);
+void __RPC_USER HBITMAP_UserFree (ULONG *, HBITMAP *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_OBJIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl
new file mode 100644
index 00000000..a94d18fe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objidl.idl
@@ -0,0 +1,2531 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+interface IStream;
+interface IEnumString;
+interface IRunningObjectTable;
+interface IMoniker;
+interface IAdviseSink;
+interface IAsyncManager;
+interface ISynchronize;
+
+typedef struct _COSERVERINFO {
+ DWORD dwReserved1;
+ LPWSTR pwszName;
+ COAUTHINFO *pAuthInfo;
+ DWORD dwReserved2;
+} COSERVERINFO;
+
+/******************** Fundamentals ********************/
+
+[
+ local,
+ object,
+ uuid(00000003-0000-0000-C000-000000000046)
+]
+interface IMarshal : IUnknown
+{
+ typedef [unique] IMarshal *LPMARSHAL;
+
+ HRESULT GetUnmarshalClass(
+ [in] REFIID riid,
+ [in, unique] void *pv,
+ [in] DWORD dwDestContext,
+ [in, unique] void *pvDestContext,
+ [in] DWORD mshlflags,
+ [out] CLSID *pCid);
+
+ HRESULT GetMarshalSizeMax(
+ [in] REFIID riid,
+ [in, unique] void *pv,
+ [in] DWORD dwDestContext,
+ [in, unique] void *pvDestContext,
+ [in] DWORD mshlflags,
+ [out] DWORD *pSize);
+
+ HRESULT MarshalInterface(
+ [in, unique] IStream *pStm,
+ [in] REFIID riid,
+ [in, unique] void *pv,
+ [in] DWORD dwDestContext,
+ [in, unique] void *pvDestContext,
+ [in] DWORD mshlflags);
+
+ HRESULT UnmarshalInterface(
+ [in, unique] IStream *pStm,
+ [in] REFIID riid,
+ [out] void **ppv);
+
+ HRESULT ReleaseMarshalData(
+ [in, unique] IStream *pStm);
+
+ HRESULT DisconnectObject(
+ [in] DWORD dwReserved);
+}
+
+[
+ local,
+ object,
+ uuid(000001cf-0000-0000-C000-000000000046)
+]
+interface IMarshal2 : IMarshal
+{
+ typedef [unique] IMarshal2 *LPMARSHAL2;
+}
+
+[
+ local,
+ object,
+ uuid(00000018-0000-0000-C000-000000000046)
+]
+interface IStdMarshalInfo : IUnknown
+{
+ typedef [unique] IStdMarshalInfo *LPSTDMARSHALINFO;
+
+ HRESULT GetClassForHandler(
+ [in] DWORD dwDestContext,
+ [in, unique] void *pvDestContext,
+ [out] CLSID *pClsid);
+}
+
+[
+ local,
+ object,
+ uuid(00000019-0000-0000-C000-000000000046)
+]
+interface IExternalConnection : IUnknown
+{
+ typedef [unique] IExternalConnection *LPEXTERNALCONNECTION;
+
+ typedef enum tagEXTCONN {
+ EXTCONN_STRONG = 0x0001,
+ EXTCONN_WEAK = 0x0002,
+ EXTCONN_CALLABLE = 0x0004
+ } EXTCONN;
+
+ DWORD AddConnection(
+ [in] DWORD extconn,
+ [in] DWORD reserved);
+
+ DWORD ReleaseConnection(
+ [in] DWORD extconn,
+ [in] DWORD reserved,
+ [in] BOOL fLastReleaseCloses);
+}
+
+[
+ local,
+ object,
+ uuid(00000020-0000-0000-C000-000000000046)
+]
+interface IMultiQI : IUnknown
+{
+ typedef [unique] IMultiQI *LPMULTIQI;
+
+ typedef struct tagMULTI_QI {
+ const IID *pIID;
+ IUnknown *pItf;
+ HRESULT hr;
+ } MULTI_QI;
+
+ HRESULT QueryMultipleInterfaces(
+ [in] ULONG cMQIs,
+ [in, out] MULTI_QI *pMQIs);
+}
+
+[
+ local,
+ object,
+ uuid(00000002-0000-0000-C000-000000000046)
+]
+interface IMalloc : IUnknown
+{
+ typedef [unique] IMalloc *LPMALLOC;
+
+ LPVOID Alloc(
+ [in] ULONG cb);
+
+ LPVOID Realloc(
+ [in] LPVOID pv,
+ [in] ULONG cb);
+
+ void Free(
+ [in] LPVOID pv);
+
+ ULONG GetSize(
+ [in] LPVOID pv);
+
+ int DidAlloc(LPVOID pv);
+
+ void HeapMinimize();
+}
+
+[
+ local,
+ object,
+ uuid(0000001d-0000-0000-C000-000000000046)
+]
+interface IMallocSpy : IUnknown
+{
+ typedef [unique] IMallocSpy *LPMALLOCSPY;
+
+ ULONG PreAlloc(
+ [in] ULONG cbRequest);
+
+ LPVOID PostAlloc(
+ [in] LPVOID pActual);
+
+ LPVOID PreFree(
+ [in] LPVOID pRequest,
+ [in] BOOL fSpyed);
+
+ void PostFree(
+ [in] BOOL fSpyed);
+
+ ULONG PreRealloc(
+ [in] LPVOID pRequest,
+ [in] ULONG cbRequest,
+ [out] LPVOID *ppNewRequest,
+ [in] BOOL fSpyed);
+
+ LPVOID PostRealloc(
+ [in] LPVOID pActual,
+ [in] BOOL fSpyed);
+
+ LPVOID PreGetSize(
+ [in] LPVOID pRequest,
+ [in] BOOL fSpyed);
+
+ ULONG PostGetSize(
+ [in] ULONG cbActual,
+ [in] BOOL fSpyed);
+
+ LPVOID PreDidAlloc(
+ [in] LPVOID pRequest,
+ [in] BOOL fSpyed);
+
+ int PostDidAlloc(
+ [in] LPVOID pRequest,
+ [in] BOOL fSpyed,
+ [in] int fActual);
+
+ void PreHeapMinimize();
+
+ void PostHeapMinimize();
+}
+
+[
+ local,
+ object,
+ uuid(00000021-0000-0000-C000-000000000046)
+]
+interface IInternalUnknown : IUnknown
+{
+ HRESULT QueryInternalInterface(
+ [in] REFIID riid,
+ [out] void **ppv);
+}
+
+[
+ object,
+ uuid(00000100-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumUnknown : IUnknown
+{
+ typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out] IUnknown **rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ IUnknown **rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumUnknown **ppenum);
+}
+
+[
+ object,
+ uuid(00000022-0000-0000-C000-000000000046),
+ version(1.0),
+ pointer_default(unique)
+]
+interface ISurrogate : IUnknown
+{
+ typedef [unique] ISurrogate *LPSURROGATE;
+
+ HRESULT LoadDllServer(
+ [in] REFCLSID Clsid);
+ HRESULT FreeSurrogate();
+}
+
+[
+ local,
+ object,
+ uuid(00000146-0000-0000-C000-000000000046)
+]
+interface IGlobalInterfaceTable : IUnknown
+{
+ typedef [unique] IGlobalInterfaceTable *LPGLOBALINTERFACETABLE;
+
+ HRESULT RegisterInterfaceInGlobal(
+ [in] IUnknown *pUnk,
+ [in] REFIID riid,
+ [out] DWORD *pdwCookie);
+
+ HRESULT RevokeInterfaceFromGlobal(
+ [in] DWORD dwCookie);
+
+ HRESULT GetInterfaceFromGlobal(
+ [in] DWORD dwCookie,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+}
+
+/******************** Monikers ********************/
+
+[
+ object,
+ uuid(0000000e-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IBindCtx : IUnknown
+{
+ typedef [unique] IBindCtx *LPBINDCTX;
+ typedef [unique] IBindCtx *LPBC;
+
+ typedef struct tagBIND_OPTS {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+ } BIND_OPTS, *LPBIND_OPTS;
+
+ /* FIXME: C++ crap */
+ typedef struct tagBIND_OPTS2 {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+ DWORD dwTrackFlags;
+ DWORD dwClassContext;
+ LCID locale;
+ COSERVERINFO *pServerInfo;
+ } BIND_OPTS2, *LPBIND_OPTS2;
+
+ typedef struct tagBIND_OPTS3 {
+ DWORD cbStruct;
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+ DWORD dwTrackFlags;
+ DWORD dwClassContext;
+ LCID locale;
+ COSERVERINFO *pServerInfo;
+ HWND hwnd;
+ } BIND_OPTS3, *LPBIND_OPTS3;
+
+ typedef enum tagBIND_FLAGS {
+ BIND_MAYBOTHERUSER = 1,
+ BIND_JUSTTESTEXISTENCE = 2
+ } BIND_FLAGS;
+
+ HRESULT RegisterObjectBound(
+ [in, unique] IUnknown *punk);
+
+ HRESULT RevokeObjectBound(
+ [in, unique] IUnknown *punk);
+
+ HRESULT ReleaseBoundObjects();
+
+ [local]
+ HRESULT SetBindOptions(
+ [in] BIND_OPTS *pbindopts);
+
+ [call_as(SetBindOptions)]
+ HRESULT RemoteSetBindOptions(
+ [in] BIND_OPTS2 *pbindopts);
+
+ [local]
+ HRESULT GetBindOptions(
+ [in, out] BIND_OPTS *pbindopts);
+
+ [call_as(GetBindOptions)]
+ HRESULT RemoteGetBindOptions(
+ [in, out] BIND_OPTS2 *pbindopts);
+
+ HRESULT GetRunningObjectTable(
+ [out] IRunningObjectTable **pprot);
+
+ HRESULT RegisterObjectParam(
+ [in] LPOLESTR pszKey,
+ [in, unique] IUnknown *punk);
+
+ HRESULT GetObjectParam(
+ [in] LPOLESTR pszKey,
+ [out] IUnknown **ppunk);
+
+ HRESULT EnumObjectParam(
+ [out] IEnumString **ppenum);
+
+ HRESULT RevokeObjectParam(
+ [in] LPOLESTR pszKey);
+}
+
+[
+ object,
+ uuid(00000102-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumMoniker : IUnknown
+{
+ typedef [unique] IEnumMoniker *LPENUMMONIKER;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ IMoniker **rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ IMoniker **rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumMoniker **ppenum);
+}
+
+[
+ object,
+ uuid(00000126-0000-0000-C000-000000000046)
+]
+interface IRunnableObject : IUnknown
+{
+ typedef [unique] IRunnableObject *LPRUNNABLEOBJECT;
+
+ HRESULT GetRunningClass(
+ [out] LPCLSID lpClsid);
+
+ HRESULT Run(
+ [in] LPBINDCTX pbc);
+
+ [local]
+ BOOL IsRunning();
+
+ [call_as(IsRunning)]
+ HRESULT RemoteIsRunning();
+
+ HRESULT LockRunning(
+ [in] BOOL fLock,
+ [in] BOOL fLastUnlockCloses);
+
+ HRESULT SetContainedObject(
+ [in] BOOL fContained);
+}
+
+/* GetObject is defined in wingdi.h as WINELIB_NAME_AW(GetObject),
+ * which resolves to a compilation failure if WINE_NO_UNICODE_MACROS is defined,
+ * but GetObject is used as a valid method name below, so we have
+ * to undefine it in that case */
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetObject")
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(00000010-0000-0000-C000-000000000046)
+]
+interface IRunningObjectTable : IUnknown
+{
+ typedef [unique] IRunningObjectTable *LPRUNNINGOBJECTTABLE;
+
+ HRESULT Register(
+ [in] DWORD grfFlags,
+ [in, unique] IUnknown *punkObject,
+ [in, unique] IMoniker *pmkObjectName,
+ [out] DWORD *pdwRegister);
+
+ HRESULT Revoke(
+ [in] DWORD dwRegister);
+
+ HRESULT IsRunning(
+ [in, unique] IMoniker *pmkObjectName);
+
+ HRESULT GetObject(
+ [in, unique] IMoniker *pmkObjectName,
+ [out] IUnknown **ppunkObject);
+
+ HRESULT NoteChangeTime(
+ [in] DWORD dwRegister,
+ [in] FILETIME *pfiletime);
+
+ HRESULT GetTimeOfLastChange(
+ [in, unique] IMoniker *pmkObjectName,
+ [out] FILETIME *pfiletime);
+
+ HRESULT EnumRunning(
+ [out] IEnumMoniker **ppenumMoniker);
+}
+
+[
+ object,
+ uuid(0000010c-0000-0000-C000-000000000046)
+]
+interface IPersist : IUnknown
+{
+ typedef [unique] IPersist *LPPERSIST;
+
+ HRESULT GetClassID(
+ [out] CLSID *pClassID);
+}
+
+[
+ object,
+ uuid(00000109-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IPersistStream : IPersist
+{
+ typedef [unique] IPersistStream *LPPERSISTSTREAM;
+
+ HRESULT IsDirty();
+
+ HRESULT Load(
+ [in, unique] IStream *pStm);
+
+ HRESULT Save(
+ [in, unique] IStream *pStm,
+ [in] BOOL fClearDirty);
+
+ HRESULT GetSizeMax(
+ [out] ULARGE_INTEGER *pcbSize);
+}
+
+[
+ object,
+ uuid(0000000f-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IMoniker : IPersistStream
+{
+ typedef [unique] IMoniker *LPMONIKER;
+
+ typedef enum tagMKSYS {
+ MKSYS_NONE = 0,
+ MKSYS_GENERICCOMPOSITE = 1,
+ MKSYS_FILEMONIKER = 2,
+ MKSYS_ANTIMONIKER = 3,
+ MKSYS_ITEMMONIKER = 4,
+ MKSYS_POINTERMONIKER = 5,
+ /* MKSYS_URLMONIKER = 6, */ /* defined in urlmon.idl */
+ MKSYS_CLASSMONIKER = 7
+ } MKSYS;
+
+ typedef [v1_enum] enum tagMKREDUCE {
+ MKRREDUCE_ONE = 3 << 16,
+ MKRREDUCE_TOUSER = 2 << 16,
+ MKRREDUCE_THROUGHUSER = 1 << 16,
+ MKRREDUCE_ALL = 0
+ } MKRREDUCE;
+
+ [local]
+ HRESULT BindToObject(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [in] REFIID riidResult,
+ [out, iid_is(riidResult)] void **ppvResult);
+
+ [call_as(BindToObject)]
+ HRESULT RemoteBindToObject(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [in] REFIID riidResult,
+ [out, iid_is(riidResult)] IUnknown **ppvResult);
+
+ [local]
+ HRESULT BindToStorage(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObj);
+
+ [call_as(BindToStorage)]
+ HRESULT RemoteBindToStorage(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppvObj);
+
+ HRESULT Reduce(
+ [in, unique] IBindCtx *pbc,
+ [in] DWORD dwReduceHowFar,
+ [in, out, unique] IMoniker **ppmkToLeft,
+ [out] IMoniker **ppmkReduced);
+
+ HRESULT ComposeWith(
+ [in, unique] IMoniker *pmkRight,
+ [in] BOOL fOnlyIfNotGeneric,
+ [out] IMoniker **ppmkComposite);
+
+ HRESULT Enum(
+ [in] BOOL fForward,
+ [out] IEnumMoniker **ppenumMoniker);
+
+ HRESULT IsEqual(
+ [in, unique] IMoniker *pmkOtherMoniker);
+
+ HRESULT Hash(
+ [out] DWORD *pdwHash);
+
+ HRESULT IsRunning(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [in, unique] IMoniker *pmkNewlyRunning);
+
+ HRESULT GetTimeOfLastChange(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [out] FILETIME *pFileTime);
+
+ HRESULT Inverse(
+ [out] IMoniker **ppmk);
+
+ HRESULT CommonPrefixWith(
+ [in, unique] IMoniker *pmkOther,
+ [out] IMoniker **ppmkPrefix);
+
+ HRESULT RelativePathTo(
+ [in, unique] IMoniker *pmkOther,
+ [out] IMoniker **ppmkRelPath);
+
+ HRESULT GetDisplayName(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [out] LPOLESTR *ppszDisplayName);
+
+ HRESULT ParseDisplayName(
+ [in, unique] IBindCtx *pbc,
+ [in, unique] IMoniker *pmkToLeft,
+ [in] LPOLESTR pszDisplayName,
+ [out] ULONG *pchEaten,
+ [out] IMoniker **ppmkOut);
+
+ HRESULT IsSystemMoniker(
+ [out] DWORD *pdwMksys);
+}
+
+[
+ object,
+ uuid(f29f6bc0-5021-11ce-aa15-00006901293f),
+ pointer_default(unique)
+]
+interface IROTData : IUnknown
+{
+ HRESULT GetComparisonData(
+ [out, size_is(cbMax)] byte *pbData,
+ [in] ULONG cbMax,
+ [out] ULONG *pcbData);
+}
+
+[
+ object,
+ uuid(00000101-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumString : IUnknown
+{
+ typedef [unique] IEnumString *LPENUMSTRING;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ LPOLESTR *rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ LPOLESTR *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumString **ppenum);
+}
+
+[
+ object,
+ uuid(00000140-0000-0000-C000-000000000046)
+]
+interface IClassActivator : IUnknown
+{
+ HRESULT GetClassObject(
+ [in] REFCLSID rclsid,
+ [in] DWORD dwClassContext,
+ [in] LCID locale,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+}
+
+/******************** Storage ********************/
+
+[
+ object,
+ uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ISequentialStream : IUnknown
+{
+ [local]
+ HRESULT Read(
+ [out, size_is(cb), length_is(*pcbRead)]
+ void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbRead);
+
+ [call_as(Read)]
+ HRESULT RemoteRead(
+ [out, size_is(cb), length_is(*pcbRead)]
+ byte *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbRead);
+
+ [local]
+ HRESULT Write(
+ [in, size_is(cb)] const void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ [call_as(Write)]
+ HRESULT RemoteWrite(
+ [in, size_is(cb)] const byte *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+}
+
+[
+ object,
+ uuid(0000000c-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IStream : ISequentialStream
+{
+ typedef [unique] IStream *LPSTREAM;
+
+ typedef struct tagSTATSTG {
+ LPOLESTR pwcsName;
+ DWORD type;
+ ULARGE_INTEGER cbSize;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+ DWORD grfMode;
+ DWORD grfLocksSupported;
+ CLSID clsid;
+ DWORD grfStateBits;
+ DWORD reserved;
+ } STATSTG;
+
+ typedef enum tagSTGTY {
+ STGTY_STORAGE = 1,
+ STGTY_STREAM = 2,
+ STGTY_LOCKBYTES = 3,
+ STGTY_PROPERTY = 4
+ } STGTY;
+
+ typedef enum tagSTREAM_SEEK {
+ STREAM_SEEK_SET = 0,
+ STREAM_SEEK_CUR = 1,
+ STREAM_SEEK_END = 2
+ } STREAM_SEEK;
+
+ /* these are defined in Linux's fcntl.h,
+ * undefine them to avoid conflicts */
+ cpp_quote("#undef LOCK_MAND")
+ cpp_quote("#undef LOCK_READ")
+ cpp_quote("#undef LOCK_WRITE")
+ cpp_quote("#undef LOCK_RW")
+
+ typedef enum tagLOCKTYPE {
+ LOCK_WRITE = 1,
+ LOCK_EXCLUSIVE = 2,
+ LOCK_ONLYONCE = 4
+ } LOCKTYPE;
+
+ [local]
+ HRESULT Seek(
+ [in] LARGE_INTEGER dlibMove,
+ [in] DWORD dwOrigin,
+ [out] ULARGE_INTEGER *plibNewPosition);
+
+ [call_as(Seek)]
+ HRESULT RemoteSeek(
+ [in] LARGE_INTEGER dlibMove,
+ [in] DWORD dwOrigin,
+ [out] ULARGE_INTEGER *plibNewPosition);
+
+ HRESULT SetSize(
+ [in] ULARGE_INTEGER libNewSize);
+
+ [local]
+ HRESULT CopyTo(
+ [in, unique] IStream *pstm,
+ [in] ULARGE_INTEGER cb,
+ [out] ULARGE_INTEGER *pcbRead,
+ [out] ULARGE_INTEGER *pcbWritten);
+
+ [call_as(CopyTo)]
+ HRESULT RemoteCopyTo(
+ [in, unique] IStream *pstm,
+ [in] ULARGE_INTEGER cb,
+ [out] ULARGE_INTEGER *pcbRead,
+ [out] ULARGE_INTEGER *pcbWritten);
+
+ HRESULT Commit(
+ [in] DWORD grfCommitFlags);
+
+ HRESULT Revert();
+
+ HRESULT LockRegion(
+ [in] ULARGE_INTEGER libOffset,
+ [in] ULARGE_INTEGER cb,
+ [in] DWORD dwLockType);
+
+ HRESULT UnlockRegion(
+ [in] ULARGE_INTEGER libOffset,
+ [in] ULARGE_INTEGER cb,
+ [in] DWORD dwLockType);
+
+ HRESULT Stat(
+ [out] STATSTG *pstatstg,
+ [in] DWORD grfStatFlag);
+
+ HRESULT Clone(
+ [out] IStream **ppstm);
+}
+
+[
+ object,
+ uuid(0000000d-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumSTATSTG : IUnknown
+{
+ typedef [unique] IEnumSTATSTG *LPENUMSTATSTG;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATSTG *rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATSTG *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumSTATSTG **ppenum);
+}
+
+[
+ object,
+ uuid(0000000b-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IStorage : IUnknown
+{
+ typedef [unique] IStorage *LPSTORAGE;
+
+ typedef struct tagRemSNB {
+ unsigned long ulCntStr;
+ unsigned long ulCntChar;
+ [size_is(ulCntChar)] OLECHAR rgString[];
+ } RemSNB;
+
+ typedef [unique] RemSNB *wireSNB;
+ typedef [wire_marshal(wireSNB)] OLECHAR **SNB;
+
+ HRESULT CreateStream(
+ [in] LPCOLESTR pwcsName,
+ [in] DWORD grfMode,
+ [in] DWORD reserved1,
+ [in] DWORD reserved2,
+ [out] IStream **ppstm);
+
+ [local]
+ HRESULT OpenStream(
+ [in] LPCOLESTR pwcsName,
+ [in, unique] void *reserved1,
+ [in] DWORD grfMode,
+ [in] DWORD reserved2,
+ [out] IStream **ppstm);
+
+ [call_as(OpenStream)]
+ HRESULT RemoteOpenStream(
+ [in] LPCOLESTR pwcsName,
+ [in] unsigned long cbReserved1,
+ [in, unique, size_is(cbReserved1)] byte *reserved1,
+ [in] DWORD grfMode,
+ [in] DWORD reserved2,
+ [out] IStream **ppstm);
+
+ HRESULT CreateStorage(
+ [in] LPCOLESTR pwcsName,
+ [in] DWORD grfMode,
+ [in] DWORD dwStgFmt,
+ [in] DWORD reserved2,
+ [out] IStorage **ppstg);
+
+ HRESULT OpenStorage(
+ [in, unique] LPCOLESTR pwcsName,
+ [in, unique] IStorage *pstgPriority,
+ [in] DWORD grfMode,
+ [in, unique] SNB snbExclude,
+ [in] DWORD reserved,
+ [out] IStorage **ppstg);
+
+ HRESULT CopyTo(
+ [in] DWORD ciidExclude,
+ [in, unique, size_is(ciidExclude)] const IID *rgiidExclude,
+ [in, unique] SNB snbExclude,
+ [in, unique] IStorage *pstgDest);
+
+ HRESULT MoveElementTo(
+ [in] LPCOLESTR pwcsName,
+ [in, unique] IStorage *pstgDest,
+ [in] LPCOLESTR pwcsNewName,
+ [in] DWORD grfFlags);
+
+ HRESULT Commit(
+ [in] DWORD grfCommitFlags);
+
+ HRESULT Revert();
+
+ [local]
+ HRESULT EnumElements(
+ [in] DWORD reserved1,
+ [in, unique, size_is(1)] void *reserved2,
+ [in] DWORD reserved3,
+ [out] IEnumSTATSTG **ppenum);
+
+ [call_as(EnumElements)]
+ HRESULT RemoteEnumElements(
+ [in] DWORD reserved1,
+ [in] unsigned long cbReserved2,
+ [in, unique, size_is(cbReserved2)] byte *reserved2,
+ [in] DWORD reserved3,
+ [out] IEnumSTATSTG **ppenum);
+
+ HRESULT DestroyElement(
+ [in] LPCOLESTR pwcsName);
+
+ HRESULT RenameElement(
+ [in] LPCOLESTR pwcsOldName,
+ [in] LPCOLESTR pwcsNewName);
+
+ HRESULT SetElementTimes(
+ [in, unique] LPCOLESTR pwcsName,
+ [in, unique] const FILETIME *pctime,
+ [in, unique] const FILETIME *patime,
+ [in, unique] const FILETIME *pmtime);
+
+ HRESULT SetClass(
+ [in] REFCLSID clsid);
+
+ HRESULT SetStateBits(
+ [in] DWORD grfStateBits,
+ [in] DWORD grfMask);
+
+ HRESULT Stat(
+ [out] STATSTG *pstatstg,
+ [in] DWORD grfStatFlag);
+}
+
+[
+ object,
+ uuid(0000010b-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IPersistFile : IPersist
+{
+ typedef [unique] IPersistFile *LPPERSISTFILE;
+
+ HRESULT IsDirty();
+
+ HRESULT Load(
+ [in] LPCOLESTR pszFileName,
+ [in] DWORD dwMode);
+
+ HRESULT Save(
+ [in, unique] LPCOLESTR pszFileName,
+ [in] BOOL fRemember);
+
+ HRESULT SaveCompleted(
+ [in, unique] LPCOLESTR pszFileName);
+
+ HRESULT GetCurFile(
+ [out] LPOLESTR *ppszFileName);
+}
+
+[
+ object,
+ uuid(0000010a-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IPersistStorage : IPersist
+{
+ typedef [unique] IPersistStorage *LPPERSISTSTORAGE;
+
+ HRESULT IsDirty();
+
+ HRESULT InitNew(
+ [in, unique] IStorage *pStg);
+
+ HRESULT Load(
+ [in, unique] IStorage *pStg);
+
+ HRESULT Save(
+ [in, unique] IStorage *pStgSave,
+ [in] BOOL fSameAsLoad);
+
+ HRESULT SaveCompleted(
+ [in, unique] IStorage *pStgNew);
+
+ HRESULT HandsOffStorage();
+}
+
+[
+ object,
+ uuid(00000012-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IRootStorage : IUnknown
+{
+ typedef [unique] IRootStorage *LPROOTSTORAGE;
+
+ HRESULT SwitchToFile(
+ [in] LPOLESTR pszFile);
+}
+
+[
+ object,
+ uuid(0000000a-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface ILockBytes : IUnknown
+{
+ typedef [unique] ILockBytes *LPLOCKBYTES;
+
+ [local]
+ HRESULT ReadAt(
+ [in] ULARGE_INTEGER ulOffset,
+ [out, size_is(cb), length_is(*pcbRead)]
+ void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbRead);
+
+ [call_as(ReadAt)]
+ HRESULT RemoteReadAt(
+ [in] ULARGE_INTEGER ulOffset,
+ [out, size_is(cb), length_is(*pcbRead)]
+ byte *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbRead);
+
+ [local]
+ HRESULT WriteAt(
+ [in] ULARGE_INTEGER ulOffset,
+ [in, size_is(cb)] const void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ [call_as(WriteAt)]
+ HRESULT RemoteWriteAt(
+ [in] ULARGE_INTEGER ulOffset,
+ [in, size_is(cb)] const byte *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ HRESULT Flush();
+
+ HRESULT SetSize(
+ [in] ULARGE_INTEGER cb);
+
+ HRESULT LockRegion(
+ [in] ULARGE_INTEGER libOffset,
+ [in] ULARGE_INTEGER cb,
+ [in] DWORD dwLockType);
+
+ HRESULT UnlockRegion(
+ [in] ULARGE_INTEGER libOffset,
+ [in] ULARGE_INTEGER cb,
+ [in] DWORD dwLockType);
+
+ HRESULT Stat(
+ [out] STATSTG *pstatstg,
+ [in] DWORD grfStatFlag);
+}
+
+[
+ object,
+ uuid(99caf010-415e-11cf-8814-00aa00b569f5),
+ pointer_default(unique)
+]
+interface IFillLockBytes : IUnknown
+{
+ [local]
+ HRESULT FillAppend(
+ [in, size_is(cb)] const void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ [call_as(FillAppend)]
+ HRESULT RemoteFillAppend(
+ [in, size_is(cb)] const byte *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ [local]
+ HRESULT FillAt(
+ [in] ULARGE_INTEGER ulOffset,
+ [in, size_is(cb)] const void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ [call_as(FillAt)]
+ HRESULT RemoteFillAt(
+ [in] ULARGE_INTEGER ulOffset,
+ [in, size_is(cb)] const byte *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbWritten);
+
+ HRESULT SetFillSize(
+ [in] ULARGE_INTEGER ulSize);
+
+ HRESULT Terminate(
+ [in] BOOL bCanceled);
+}
+
+[
+ object,
+ uuid(a9d758a0-4617-11cf-95fc-00aa00680db4),
+ pointer_default(unique)
+]
+interface IProgressNotify : IUnknown
+{
+ HRESULT OnProgress(
+ [in] DWORD dwProgressCurrent,
+ [in] DWORD dwProgressMaximum,
+ [in] BOOL fAccurate,
+ [in] BOOL fOwner);
+}
+
+[
+ local,
+ object,
+ uuid(0e6d4d90-6738-11cf-9608-00aa00680db4),
+ pointer_default(unique)
+]
+interface ILayoutStorage : IUnknown
+{
+ typedef struct tagStorageLayout {
+ DWORD LayoutType;
+ OLECHAR *pwcsElementName;
+ LARGE_INTEGER cOffset;
+ LARGE_INTEGER cBytes;
+ } StorageLayout;
+
+ HRESULT LayoutScript(
+ [in] StorageLayout *pStorageLayout,
+ [in] DWORD nEntries,
+ [in] DWORD glfInterleavedFlag);
+
+ HRESULT BeginMonitor();
+
+ HRESULT EndMonitor();
+
+ HRESULT ReLayoutDocfile(
+ [in] OLECHAR *pwcsNewDfName);
+
+ HRESULT ReLayoutDocfileOnILockBytes(
+ [in] ILockBytes *pILockBytes);
+}
+
+[
+ object,
+ uuid(30f3d47a-6447-11d1-8e3c-00c04fb9386d)
+]
+interface IBlockingLock : IUnknown
+{
+ HRESULT Lock(
+ [in] DWORD dwTimeout);
+
+ HRESULT Unlock();
+}
+
+
+[
+ object,
+ uuid(bc0bf6ae-8878-11d1-83e9-00c04fc2c6d4)
+]
+interface ITimeAndNoticeControl : IUnknown
+{
+ HRESULT SuppressChanges(
+ [in] DWORD res1,
+ [in] DWORD res2);
+
+}
+
+
+
+[
+ object,
+ uuid(8d19c834-8879-11d1-83e9-00c04fc2c6d4)
+]
+interface IOplockStorage: IUnknown
+{
+ HRESULT CreateStorageEx(
+ [in] LPCWSTR pwcsName,
+ [in] DWORD grfMode,
+ [in] DWORD stgfmt,
+ [in] DWORD grfAttrs,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppstgOpen);
+
+ HRESULT OpenStorageEx(
+ [in] LPCWSTR pwcsName,
+ [in] DWORD grfMode,
+ [in] DWORD stgfmt,
+ [in] DWORD grfAttrs,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppstgOpen);
+}
+
+/******************** Data Object ********************/
+
+[
+ object,
+ uuid(00000103-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumFORMATETC : IUnknown
+{
+ typedef [unique] IEnumFORMATETC *LPENUMFORMATETC;
+
+ typedef struct tagDVTARGETDEVICE {
+ DWORD tdSize;
+ WORD tdDriverNameOffset;
+ WORD tdDeviceNameOffset;
+ WORD tdPortNameOffset;
+ WORD tdExtDevmodeOffset;
+ [size_is(tdSize - sizeof(DWORD) - 4*sizeof(WORD))]
+ BYTE tdData[];
+ } DVTARGETDEVICE;
+
+ typedef CLIPFORMAT *LPCLIPFORMAT;
+
+ typedef struct tagFORMATETC {
+ CLIPFORMAT cfFormat;
+ [unique] DVTARGETDEVICE *ptd;
+ DWORD dwAspect;
+ LONG lindex;
+ DWORD tymed;
+ } FORMATETC, *LPFORMATETC;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ FORMATETC *rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ FORMATETC *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumFORMATETC **ppenum);
+}
+
+[
+ object,
+ uuid(00000105-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumSTATDATA : IUnknown
+{
+ typedef [unique] IEnumSTATDATA *LPENUMSTATDATA;
+
+ typedef enum tagADVF {
+ ADVF_NODATA = 1,
+ ADVF_PRIMEFIRST = 2,
+ ADVF_ONLYONCE = 4,
+ ADVF_DATAONSTOP = 64,
+ ADVFCACHE_NOHANDLER = 8,
+ ADVFCACHE_FORCEBUILTIN = 16,
+ ADVFCACHE_ONSAVE = 32
+ } ADVF;
+
+ typedef struct tagSTATDATA
+ {
+ FORMATETC formatetc;
+ DWORD advf;
+ [unique] IAdviseSink *pAdvSink;
+ DWORD dwConnection;
+ } STATDATA, *LPSTATDATA;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATDATA *rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATDATA *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumSTATDATA **ppenum);
+}
+
+[
+ object,
+ uuid(0000010f-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IAdviseSink : IUnknown
+{
+ typedef IAdviseSink *LPADVISESINK;
+
+ typedef [v1_enum] enum tagTYMED {
+ TYMED_HGLOBAL = 1,
+ TYMED_FILE = 2,
+ TYMED_ISTREAM = 4,
+ TYMED_ISTORAGE = 8,
+ TYMED_GDI = 16,
+ TYMED_MFPICT = 32,
+ TYMED_ENHMF = 64,
+ TYMED_NULL = 0
+ } TYMED;
+
+ typedef struct tagRemSTGMEDIUM {
+ DWORD tymed;
+ DWORD dwHandleType;
+ unsigned long pData;
+ unsigned long pUnkForRelease;
+ unsigned long cbData;
+ [size_is(cbData)] byte data[];
+ } RemSTGMEDIUM;
+
+ typedef struct tagSTGMEDIUM {
+ DWORD tymed;
+ [switch_is(tymed)] union {
+ [case(TYMED_GDI)] HBITMAP hBitmap;
+ [case(TYMED_MFPICT)] HMETAFILEPICT hMetaFilePict;
+ [case(TYMED_ENHMF)] HENHMETAFILE hEnhMetaFile;
+ [case(TYMED_HGLOBAL)] HGLOBAL hGlobal;
+ [case(TYMED_FILE)] LPOLESTR lpszFileName;
+ [case(TYMED_ISTREAM)] IStream *pstm;
+ [case(TYMED_ISTORAGE)] IStorage *pstg;
+ [default] ;
+ } DUMMYUNIONNAME;
+ [unique] IUnknown *pUnkForRelease;
+ } uSTGMEDIUM;
+
+/* copied from wingdi.h */
+#define OBJ_PEN 1
+#define OBJ_BRUSH 2
+#define OBJ_DC 3
+#define OBJ_METADC 4
+#define OBJ_PAL 5
+#define OBJ_FONT 6
+#define OBJ_BITMAP 7
+#define OBJ_REGION 8
+#define OBJ_METAFILE 9
+#define OBJ_MEMDC 10
+#define OBJ_EXTPEN 11
+#define OBJ_ENHMETADC 12
+#define OBJ_ENHMETAFILE 13
+
+ typedef union _GDI_OBJECT switch(DWORD ObjectType) u {
+ case OBJ_BITMAP: wireHBITMAP hBitmap;
+ case OBJ_PAL: wireHPALETTE hPalette;
+ default: wireHGLOBAL hGeneric;
+ } GDI_OBJECT;
+
+ typedef struct _userSTGMEDIUM {
+ union switch(DWORD tymed) u {
+ case TYMED_NULL: ;
+ case TYMED_MFPICT: wireHMETAFILEPICT hMetaFilePict;
+ case TYMED_ENHMF: wireHENHMETAFILE hHEnhMetaFile;
+ case TYMED_GDI: GDI_OBJECT *hGdiHandle;
+ case TYMED_HGLOBAL: wireHGLOBAL hGlobal;
+ case TYMED_FILE: LPOLESTR lpszFileName;
+ case TYMED_ISTREAM: BYTE_BLOB *pstm;
+ case TYMED_ISTORAGE: BYTE_BLOB *pstg;
+ } DUMMYUNIONNAME;
+ IUnknown *pUnkForRelease;
+ } userSTGMEDIUM;
+
+ typedef [unique] userSTGMEDIUM *wireSTGMEDIUM;
+ typedef [wire_marshal(wireSTGMEDIUM)] uSTGMEDIUM STGMEDIUM;
+
+ typedef [unique] userSTGMEDIUM *wireASYNC_STGMEDIUM;
+ typedef [wire_marshal(wireASYNC_STGMEDIUM)] STGMEDIUM ASYNC_STGMEDIUM;
+
+ typedef STGMEDIUM *LPSTGMEDIUM;
+
+ typedef struct _userFLAG_STGMEDIUM {
+ long ContextFlags;
+ long fPassOwnership;
+ userSTGMEDIUM Stgmed;
+ } userFLAG_STGMEDIUM;
+
+ typedef [unique] userFLAG_STGMEDIUM *wireFLAG_STGMEDIUM;
+
+ typedef [wire_marshal(wireFLAG_STGMEDIUM)] struct _FLAG_STGMEDIUM {
+ long ContextFlags;
+ long fPassOwnership;
+ STGMEDIUM Stgmed;
+ } FLAG_STGMEDIUM;
+
+ [local]
+ void OnDataChange(
+ [in, unique] FORMATETC *pFormatetc,
+ [in, unique] STGMEDIUM *pStgmed);
+
+ [call_as(OnDataChange)]
+ HRESULT RemoteOnDataChange(
+ [in, unique] FORMATETC *pFormatetc,
+ [in, unique] ASYNC_STGMEDIUM *pStgmed);
+
+ [local]
+ void OnViewChange(
+ [in] DWORD dwAspect,
+ [in] LONG lindex);
+
+ [call_as(OnViewChange)]
+ HRESULT RemoteOnViewChange(
+ [in] DWORD dwAspect,
+ [in] LONG lindex);
+
+ [local]
+ void OnRename(
+ [in] IMoniker *pmk);
+
+ [call_as(OnRename)]
+ HRESULT RemoteOnRename(
+ [in] IMoniker *pmk);
+
+ [local]
+ void OnSave();
+
+ [call_as(OnSave)]
+ HRESULT RemoteOnSave();
+
+ [local]
+ void OnClose();
+
+ [call_as(OnClose)]
+ HRESULT RemoteOnClose();
+}
+
+[
+ object,
+ uuid(00000125-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IAdviseSink2 : IAdviseSink
+{
+ typedef [unique] IAdviseSink2 *LPADVISESINK2;
+
+ [local]
+ void OnLinkSrcChange(
+ [in, unique] IMoniker *pmk);
+
+ [call_as(OnLinkSrcChange)]
+ HRESULT RemoteOnLinkSrcChange(
+ [in, unique] IMoniker *pmk);
+}
+
+[
+ object,
+ uuid(0000010e-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IDataObject : IUnknown
+{
+ typedef [unique] IDataObject *LPDATAOBJECT;
+
+ typedef enum tagDATADIR {
+ DATADIR_GET = 1,
+ DATADIR_SET = 2
+ } DATADIR;
+
+ [local]
+ HRESULT GetData(
+ [in, unique] FORMATETC *pformatetcIn,
+ [out] STGMEDIUM *pmedium);
+
+ [call_as(GetData)]
+ HRESULT RemoteGetData(
+ [in, unique] FORMATETC *pformatetcIn,
+ [out] STGMEDIUM *pRemoteMedium);
+
+ [local]
+ HRESULT GetDataHere(
+ [in, unique] FORMATETC *pformatetc,
+ [in, out] STGMEDIUM *pmedium);
+
+ [call_as(GetDataHere)]
+ HRESULT RemoteGetDataHere(
+ [in, unique] FORMATETC *pformatetc,
+ [in, out] STGMEDIUM *pRemoteMedium);
+
+ HRESULT QueryGetData(
+ [in, unique] FORMATETC *pformatetc);
+
+ HRESULT GetCanonicalFormatEtc(
+ [in, unique] FORMATETC *pformatectIn,
+ [out] FORMATETC *pformatetcOut);
+
+ [local]
+ HRESULT SetData(
+ [in, unique] FORMATETC *pformatetc,
+ [in, unique] STGMEDIUM *pmedium,
+ [in] BOOL fRelease);
+
+ [call_as(SetData)]
+ HRESULT RemoteSetData(
+ [in, unique] FORMATETC *pformatetc,
+ [in, unique] FLAG_STGMEDIUM *pmedium,
+ [in] BOOL fRelease);
+
+ HRESULT EnumFormatEtc(
+ [in] DWORD dwDirection,
+ [out] IEnumFORMATETC **ppenumFormatEtc);
+
+ HRESULT DAdvise(
+ [in] FORMATETC *pformatetc,
+ [in] DWORD advf,
+ [in, unique] IAdviseSink *pAdvSink,
+ [out] DWORD *pdwConnection);
+
+ HRESULT DUnadvise(
+ [in] DWORD dwConnection);
+
+ HRESULT EnumDAdvise(
+ [out] IEnumSTATDATA **ppenumAdvise);
+}
+
+[
+ local,
+ object,
+ uuid(00000110-0000-0000-C000-000000000046)
+]
+interface IDataAdviseHolder : IUnknown
+{
+ typedef [unique] IDataAdviseHolder *LPDATAADVISEHOLDER;
+
+ HRESULT Advise(
+ [in, unique] IDataObject *pDataObject,
+ [in, unique] FORMATETC *pFetc,
+ [in] DWORD advf,
+ [in, unique] IAdviseSink *pAdvise,
+ [out] DWORD *pdwConnection);
+
+ HRESULT Unadvise(
+ [in] DWORD dwConnection);
+
+ HRESULT EnumAdvise(
+ [out] IEnumSTATDATA **ppenumAdvise);
+
+ HRESULT SendOnDataChange(
+ [in, unique] IDataObject *pDataObject,
+ [in] DWORD dwReserved,
+ [in] DWORD advf);
+}
+
+/******************** Remoting ********************/
+
+[
+ local,
+ object,
+ uuid(00000016-0000-0000-C000-000000000046)
+]
+interface IMessageFilter : IUnknown
+{
+ typedef [unique] IMessageFilter *LPMESSAGEFILTER;
+
+ typedef enum tagCALLTYPE {
+ CALLTYPE_TOPLEVEL = 1,
+ CALLTYPE_NESTED = 2,
+ CALLTYPE_ASYNC = 3,
+ CALLTYPE_TOPLEVEL_CALLPENDING = 4,
+ CALLTYPE_ASYNC_CALLPENDING = 5
+ } CALLTYPE;
+
+ typedef enum tagSERVERCALL {
+ SERVERCALL_ISHANDLED = 0,
+ SERVERCALL_REJECTED = 1,
+ SERVERCALL_RETRYLATER = 2
+ } SERVERCALL;
+
+ typedef enum tagPENDINGTYPE {
+ PENDINGTYPE_TOPLEVEL = 1,
+ PENDINGTYPE_NESTED = 2
+ } PENDINGTYPE;
+
+ typedef enum tagPENDINGMSG {
+ PENDINGMSG_CANCELCALL = 0,
+ PENDINGMSG_WAITNOPROCESS = 1,
+ PENDINGMSG_WAITDEFPROCESS = 2
+ } PENDINGMSG;
+
+ typedef struct tagINTERFACEINFO {
+ IUnknown *pUnk;
+ IID iid;
+ WORD wMethod;
+ } INTERFACEINFO, *LPINTERFACEINFO;
+
+ DWORD HandleInComingCall(
+ [in] DWORD dwCallType,
+ [in] HTASK htaskCaller,
+ [in] DWORD dwTickCount,
+ [in] LPINTERFACEINFO lpInterfaceInfo);
+
+ DWORD RetryRejectedCall(
+ [in] HTASK htaskCallee,
+ [in] DWORD dwTickCount,
+ [in] DWORD dwRejectType);
+
+ DWORD MessagePending(
+ [in] HTASK htaskCallee,
+ [in] DWORD dwTickCount,
+ [in] DWORD dwPendingType);
+}
+
+[
+ local,
+ object,
+ uuid(D5F56B60-593B-101A-B569-08002B2DBF7A)
+]
+interface IRpcChannelBuffer : IUnknown
+{
+ typedef [unique] IRpcChannelBuffer *LPRPCCHANNELBUFFER;
+
+ typedef unsigned long RPCOLEDATAREP;
+
+ typedef struct tagRPCOLEMESSAGE {
+ void *reserved1;
+ RPCOLEDATAREP dataRepresentation;
+ void *Buffer;
+ ULONG cbBuffer;
+ ULONG iMethod;
+ void *reserved2[5];
+ ULONG rpcFlags;
+ } RPCOLEMESSAGE;
+
+ typedef RPCOLEMESSAGE *PRPCOLEMESSAGE;
+
+ HRESULT GetBuffer(
+ [in] RPCOLEMESSAGE *pMessage,
+ [in] REFIID riid);
+
+ HRESULT SendReceive(
+ [in,out] RPCOLEMESSAGE *pMessage,
+ [out] ULONG *pStatus);
+
+ HRESULT FreeBuffer(
+ [in] RPCOLEMESSAGE *pMessage);
+
+ HRESULT GetDestCtx(
+ [out] DWORD *pdwDestContext,
+ [out] void **ppvDestContext);
+
+ HRESULT IsConnected();
+}
+
+[
+ local,
+ object,
+ uuid(594f31d0-7f19-11d0-b194-00a0c90dc8bf)
+]
+interface IRpcChannelBuffer2 : IRpcChannelBuffer
+{
+ typedef [unique] IRpcChannelBuffer2 *LPRPCCHANNELBUFFER2;
+
+ HRESULT GetProtocolVersion(
+ [in,out] DWORD *pdwVersion);
+}
+
+[
+ local,
+ object,
+ uuid(25B15600-0115-11d0-BF0D-00AA00B8DFD2)
+]
+interface IRpcChannelBuffer3 : IRpcChannelBuffer2
+{
+ typedef [unique] IRpcChannelBuffer3 *LPRPCCHANNELBUFFER3;
+
+ HRESULT Send(
+ [in,out] RPCOLEMESSAGE *pMsg,
+ [out] ULONG *pulStatus);
+
+ HRESULT Receive(
+ [in,out] RPCOLEMESSAGE *pMsg,
+ [in] ULONG ulSize,
+ [out] ULONG *pulStatus);
+
+ HRESULT Cancel(
+ [in] RPCOLEMESSAGE *pMsg);
+
+ HRESULT GetCallContext(
+ [in] RPCOLEMESSAGE *pMsg,
+ [in] REFIID riid,
+ [out] void **pInterface);
+
+ HRESULT GetDestCtxEx(
+ [in] RPCOLEMESSAGE *pMsg,
+ [out] DWORD *pdwDestContext,
+ [out] void **ppvDestContext);
+
+ HRESULT GetState(
+ [in] RPCOLEMESSAGE *pMsg,
+ [out] DWORD *pState);
+
+ HRESULT RegisterAsync(
+ [in] RPCOLEMESSAGE *pMsg,
+ [in] IAsyncManager *pAsyncMgr);
+}
+
+[
+ local,
+ object,
+ uuid(a5029fb6-3c34-11d1-9c99-00c04fb998aa),
+ pointer_default(unique)
+]
+interface IAsyncRpcChannelBuffer : IRpcChannelBuffer2
+{
+ HRESULT Send(
+ [in, out] RPCOLEMESSAGE *pMsg,
+ [in] ISynchronize *pSync,
+ [out] ULONG *pulStatus);
+
+ HRESULT Receive(
+ [in, out] RPCOLEMESSAGE *pMsg,
+ [out] ULONG *pulStatus);
+
+ HRESULT GetDestCtxEx(
+ [in] RPCOLEMESSAGE *pMsg,
+ [out] DWORD *pdwDestContext,
+ [out] void **ppvDestContext);
+}
+
+[
+ local,
+ object,
+ uuid(58a08519-24c8-4935-b482-3fd823333a4f)
+]
+interface IRpcSyntaxNegotiate : IUnknown
+{
+ HRESULT NegotiateSyntax(
+ [in, out] RPCOLEMESSAGE *pMsg);
+}
+
+[
+ local,
+ object,
+ uuid(D5F56A34-593B-101A-B569-08002B2DBF7A)
+]
+interface IRpcProxyBuffer : IUnknown
+{
+ typedef [unique] IRpcProxyBuffer *LPRPCPROXYBUFFER;
+
+ HRESULT Connect(
+ [in, unique] IRpcChannelBuffer *pRpcChannelBuffer);
+
+ void Disconnect();
+}
+
+[
+ local,
+ object,
+ uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A)
+]
+interface IRpcStubBuffer : IUnknown
+{
+ typedef [unique] IRpcStubBuffer *LPRPCSTUBBUFFER;
+
+ HRESULT Connect(
+ [in] IUnknown *pUnkServer);
+
+ void Disconnect();
+
+ HRESULT Invoke(
+ [in] RPCOLEMESSAGE *_prpcmsg,
+ [in] IRpcChannelBuffer *_pRpcChannelBuffer);
+
+ IRpcStubBuffer *IsIIDSupported(
+ [in] REFIID riid);
+
+ ULONG CountRefs();
+
+ HRESULT DebugServerQueryInterface(
+ void **ppv);
+
+ void DebugServerRelease(
+ void *pv);
+}
+
+[
+ local,
+ object,
+ uuid(D5F569D0-593B-101A-B569-08002B2DBF7A)
+]
+interface IPSFactoryBuffer : IUnknown
+{
+ typedef [unique] IPSFactoryBuffer *LPPSFACTORYBUFFER;
+
+ HRESULT CreateProxy(
+ [in] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out] IRpcProxyBuffer **ppProxy,
+ [out] void **ppv);
+
+ HRESULT CreateStub(
+ [in] REFIID riid,
+ [in, unique] IUnknown *pUnkServer,
+ [out] IRpcStubBuffer **ppStub);
+}
+
+[
+ local,
+ object,
+ uuid(1008c4a0-7613-11cf-9af1-0020af6e72f4)
+]
+interface IChannelHook : IUnknown
+{
+ typedef [unique] IChannelHook *LPCHANNELHOOK;
+
+ typedef struct SChannelHookCallInfo {
+ IID iid;
+ DWORD cbSize;
+ GUID uCausality;
+ DWORD dwServerPid;
+ DWORD iMethod;
+ void *pObject;
+ } SChannelHookCallInfo;
+
+ void ClientGetSize(
+ [in] REFGUID uExtent,
+ [in] REFIID riid,
+ [out] ULONG *pDataSize);
+
+ void ClientFillBuffer(
+ [in] REFGUID uExtent,
+ [in] REFIID riid,
+ [in, out] ULONG *pDataSize,
+ [in] void *pDataBuffer);
+
+ void ClientNotify(
+ [in] REFGUID uExtent,
+ [in] REFIID riid,
+ [in] ULONG cbDataSize,
+ [in] void *pDataBuffer,
+ [in] DWORD lDataRep,
+ [in] HRESULT hrFault);
+
+ void ServerNotify(
+ [in] REFGUID uExtent,
+ [in] REFIID riid,
+ [in] ULONG cbDataSize,
+ [in] void *pDataBuffer,
+ [in] DWORD lDataRep);
+
+ void ServerGetSize(
+ [in] REFGUID uExtent,
+ [in] REFIID riid,
+ [in] HRESULT hrFault,
+ [out] ULONG *pDataSize);
+
+ void ServerFillBuffer(
+ [in] REFGUID uExtent,
+ [in] REFIID riid,
+ [in, out] ULONG *pDataSize,
+ [in] void *pDataBuffer,
+ [in] HRESULT hrFault );
+}
+
+extern const FMTID FMTID_SummaryInformation;
+extern const FMTID FMTID_DocSummaryInformation;
+extern const FMTID FMTID_UserDefinedProperties;
+
+
+/******************** Connection Points ********************/
+/* FIXME */
+
+/******************** DCOM ********************/
+
+[
+ local,
+ object,
+ uuid(0000013D-0000-0000-C000-000000000046)
+]
+interface IClientSecurity : IUnknown
+{
+ typedef struct tagSOLE_AUTHENTICATION_SERVICE {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ OLECHAR *pPrincipalName;
+ HRESULT hr;
+ } SOLE_AUTHENTICATION_SERVICE;
+
+ typedef SOLE_AUTHENTICATION_SERVICE *PSOLE_AUTHENTICATION_SERVICE;
+
+ typedef struct tagSOLE_AUTHENTICATION_INFO {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ void *pAuthInfo;
+ } SOLE_AUTHENTICATION_INFO;
+
+ const OLECHAR *COLE_DEFAULT_PRINCIPAL = (OLECHAR*) -1;
+ const void *COLE_DEFAULT_AUTHINFO = (void*) -1;
+
+ typedef struct tagSOLE_AUTHENTICATION_LIST {
+ DWORD cAuthInfo;
+ SOLE_AUTHENTICATION_INFO *aAuthInfo;
+ } SOLE_AUTHENTICATION_LIST;
+
+ typedef enum tagEOLE_AUTHENTICATION_CAPABILITIES {
+ EOAC_NONE = 0x0,
+ EOAC_MUTUAL_AUTH = 0x1,
+ EOAC_SECURE_REFS = 0x2, /* CoInitializeSecurity only */
+ EOAC_ACCESS_CONTROL = 0x4, /* CoInitializeSecurity only */
+ EOAC_APPID = 0x8, /* CoInitializeSecurity only */
+ EOAC_DYNAMIC = 0x10, /* CoInitializeSecurity only */
+ EOAC_STATIC_CLOAKING = 0x20,
+ EOAC_DYNAMIC_CLOAKING = 0x40,
+ EOAC_ANY_AUTHORITY = 0x80,
+ EOAC_MAKE_FULLSIC = 0x100,
+ EOAC_REQUIRE_FULLSIC = 0x200, /* CoInitializeSecurity only */
+ EOAC_AUTO_IMPERSONATE = 0x400, /* CoInitializeSecurity only */
+ EOAC_DEFAULT = 0x800,
+ EOAC_DISABLE_AAA = 0x1000, /* CoInitializeSecurity only */
+ EOAC_NO_CUSTOM_MARSHAL = 0x2000, /* CoInitializeSecurity only */
+ } EOLE_AUTHENTICATION_CAPABILITIES;
+
+ HRESULT QueryBlanket(
+ [in] IUnknown *pProxy,
+ [out] DWORD *pAuthnSvc,
+ [out] DWORD *pAuthzSvc,
+ [out] OLECHAR **pServerPrincName,
+ [out] DWORD *pAuthnLevel,
+ [out] DWORD *pImpLevel,
+ [out] void **pAuthInfo,
+ [out] DWORD *pCapabilities);
+
+ HRESULT SetBlanket(
+ [in] IUnknown *pProxy,
+ [in] DWORD AuthnSvc,
+ [in] DWORD AuthzSvc,
+ [in] OLECHAR *pServerPrincName,
+ [in] DWORD AuthnLevel,
+ [in] DWORD ImpLevel,
+ [in] void *pAuthInfo,
+ [in] DWORD Capabilities);
+
+ HRESULT CopyProxy(
+ [in] IUnknown *pProxy,
+ [out] IUnknown **ppCopy);
+}
+
+[
+ local,
+ object,
+ uuid(0000013E-0000-0000-C000-000000000046)
+]
+interface IServerSecurity : IUnknown
+{
+ HRESULT QueryBlanket(
+ [out] DWORD *pAuthnSvc,
+ [out] DWORD *pAuthzSvc,
+ [out] OLECHAR **pServerPrincName,
+ [out] DWORD *pAuthnLevel,
+ [out] DWORD *pImpLevel,
+ [out] void **pPrivs,
+ [out] DWORD *pCapabilities);
+
+ HRESULT ImpersonateClient();
+
+ HRESULT RevertToSelf();
+
+ BOOL IsImpersonating();
+}
+
+[
+ local,
+ object,
+ uuid(00000024-0000-0000-C000-000000000046)
+]
+interface IAsyncSetup : IUnknown
+{
+ HRESULT GetAsyncManager(
+ [in] REFIID riid,
+ [in] IUnknown *pOuter,
+ [in] DWORD dwFlags,
+ [out] IUnknown **ppInner,
+ [out] IAsyncManager **ppAsyncMgr);
+}
+
+[
+ object,
+ uuid(0e6d4d92-6738-11cf-9608-00aa00680db4)
+]
+interface IDirectWriterLock : IUnknown
+{
+ HRESULT WaitForWriteAccess(
+ [in] DWORD dwTimeout);
+
+ HRESULT ReleaseWriteAccess();
+
+ HRESULT HaveWriteAccess();
+}
+
+[
+ object,
+ uuid(00000030-0000-0000-C000-000000000046)
+]
+
+interface ISynchronize : IUnknown
+{
+ HRESULT Wait(
+ [in] DWORD dwFlags,
+ [in] DWORD dwMilliseconds);
+
+ HRESULT Signal();
+
+ HRESULT Reset();
+}
+
+
+[
+ local,
+ object,
+ uuid(00000031-0000-0000-C000-000000000046)
+]
+interface ISynchronizeHandle : IUnknown
+{
+ HRESULT GetHandle(
+ [out] HANDLE *ph);
+}
+
+
+[
+ local,
+ object,
+ uuid(00000032-0000-0000-C000-000000000046)
+]
+interface ISynchronizeEvent : ISynchronizeHandle
+{
+ HRESULT SetEventHandle(
+ [in] HANDLE *ph);
+}
+
+
+[
+ local,
+ object,
+ uuid(00000033-0000-0000-C000-000000000046)
+]
+interface ISynchronizeContainer : IUnknown
+{
+ HRESULT AddSynchronize(
+ [in] ISynchronize *pSync);
+
+ HRESULT WaitMultiple(
+ [in] DWORD dwFlags,
+ [in] DWORD dwTimeOut,
+ [out] ISynchronize **ppSync);
+}
+
+[
+ local,
+ object,
+ uuid(00000025-0000-0000-C000-000000000046)
+]
+interface ISynchronizeMutex : ISynchronize
+{
+ HRESULT ReleaseMutex();
+}
+
+[
+ local,
+ object,
+ uuid(00000029-0000-0000-C000-000000000046)
+]
+
+interface ICancelMethodCalls : IUnknown
+{
+ typedef [unique] ICancelMethodCalls *LPCANCELMETHODCALLS;
+
+ HRESULT Cancel(
+ [in] ULONG ulSeconds);
+
+ HRESULT TestCancel();
+}
+
+[
+ local,
+ object,
+ uuid(0000002A-0000-0000-C000-000000000046)
+]
+interface IAsyncManager : IUnknown
+{
+ typedef enum tagDCOM_CALL_STATE {
+ DCOM_NONE = 0,
+ DCOM_CALL_COMPLETE = 1,
+ DCOM_CALL_CANCELED = 2
+ } DCOM_CALL_STATE;
+
+ HRESULT CompleteCall(
+ [in] HRESULT Result);
+
+ HRESULT GetCallContext(
+ [in] REFIID riid,
+ [out] void **pInterface);
+
+ HRESULT GetState(
+ [out] ULONG *pulStateFlags);
+}
+
+[
+ local,
+ object,
+ uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ICallFactory : IUnknown
+{
+ HRESULT CreateCall(
+ [in] REFIID riid,
+ [in] IUnknown *pCtrlUnk,
+ [in] REFIID riid2,
+ [out, iid_is(riid2)] IUnknown **ppv);
+}
+
+[
+ local,
+ object,
+ uuid(00000144-0000-0000-C000-000000000046)
+]
+interface IRpcOptions : IUnknown
+{
+ HRESULT Set(
+ [in] IUnknown *pPrx,
+ [in] DWORD dwProperty,
+ [in] ULONG_PTR dwValue);
+
+ HRESULT Query(
+ [in] IUnknown *pPrx,
+ [in] DWORD dwProperty,
+ [out] ULONG_PTR *pdwValue);
+}
+
+enum {
+ COMBND_RPCTIMEOUT = 1,
+ COMBND_SERVER_LOCALITY = 2
+};
+
+enum {
+ SERVER_LOCALITY_PROCESS_LOCAL = 0,
+ SERVER_LOCALITY_MACHINE_LOCAL = 1,
+ SERVER_LOCALITY_REMOTE = 2
+};
+
+[
+ local,
+ object,
+ uuid(00000149-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IRpcHelper : IUnknown
+{
+ HRESULT GetDCOMProtocolVersion(
+ [out] DWORD *pComVersion);
+
+ HRESULT GetIIDFromOBJREF(
+ [in] void *pObjRef,
+ [out] IID **piid);
+}
+
+[
+ local,
+ object,
+ uuid(eb0cb9e8-7996-11d2-872e-0000f8080859)
+]
+interface IReleaseMarshalBuffers : IUnknown
+{
+ HRESULT ReleaseMarshalBuffer(
+ [in] RPCOLEMESSAGE *pMsg,
+ [in] DWORD dwFlags,
+ [in, unique] IUnknown *pChnl);
+}
+
+[
+ local,
+ object,
+ uuid(0000002B-0000-0000-C000-000000000046)
+]
+interface IWaitMultiple : IUnknown
+{
+ HRESULT WaitMultiple(
+ [in] DWORD timeout,
+ [out] ISynchronize **pSync);
+ HRESULT AddSynchronize(
+ [in] ISynchronize *pSync);
+}
+
+
+[
+ object,
+ uuid(00000026-0000-0000-C000-000000000046)
+]
+interface IUrlMon : IUnknown
+{
+ HRESULT AsyncGetClassBits(
+ [in] REFCLSID rclsid,
+ [in, unique] LPCWSTR pszTYPE,
+ [in, unique] LPCWSTR pszExt,
+ [in] DWORD dwFileVersionMS,
+ [in] DWORD dwFileVersionLS,
+ [in, unique] LPCWSTR pszCodeBase,
+ [in] IBindCtx *pbc,
+ [in] DWORD dwClassContext,
+ [in] REFIID riid,
+ [in] DWORD flags);
+}
+
+[
+ local,
+ object,
+ uuid(00000145-0000-0000-C000-000000000046)
+]
+interface IForegroundTransfer : IUnknown
+{
+ HRESULT AllowForegroundTransfer(
+ [in] void *lpvReserved);
+}
+
+[
+ local,
+ object,
+ uuid(00000147-0000-0000-C000-000000000046)
+]
+interface IAddrTrackingControl : IUnknown
+{
+ typedef [unique] IAddrTrackingControl *LPADDRTRACKINGCONTROL;
+
+ HRESULT EnableCOMDynamicAddrTracking();
+ HRESULT DisableCOMDynamicAddrTracking();
+}
+
+[
+ local,
+ object,
+ uuid(00000148-0000-0000-C000-000000000046)
+]
+interface IAddrExclusionControl : IUnknown
+{
+ typedef [unique] IAddrExclusionControl *LPADDREXCLUSIONCONTROL;
+
+ HRESULT GetCurrentAddrExclusionList(
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppEnumerator);
+ HRESULT UpdateAddrExclusionList(
+ [in] IUnknown *pEnumerator);
+}
+
+typedef enum _APTTYPE {
+ APTTYPE_CURRENT = -1,
+ APTTYPE_STA = 0,
+ APTTYPE_MTA = 1,
+ APTTYPE_NA = 2,
+ APTTYPE_MAINSTA = 3
+} APTTYPE;
+
+typedef enum _THDTYPE {
+ THDTYPE_BLOCKMESSAGES = 0,
+ THDTYPE_PROCESSMESSAGES = 1
+} THDTYPE;
+
+[
+ local,
+ object,
+ uuid(000001ce-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IComThreadingInfo : IUnknown
+{
+ HRESULT GetCurrentApartmentType(
+ [out] APTTYPE *pAptType);
+ HRESULT GetCurrentThreadType(
+ [out] THDTYPE *pThreadType);
+ HRESULT GetCurrentLogicalThreadId(
+ [out] GUID *pguidLogicalThreadId);
+ HRESULT SetCurrentLogicalThreadId(
+ [in] REFGUID rguid);
+}
+
+
+[
+ object,
+ pointer_default(unique),
+ uuid(72380d55-8d2b-43a3-8513-2b6ef31434e9)
+]
+interface IProcessInitControl : IUnknown
+{
+ HRESULT ResetInitializerTimeout(
+ [in] DWORD dwSecondsRemaining);
+}
+
+[
+ local,
+ object,
+ uuid(00000034-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IInitializeSpy : IUnknown
+{
+ typedef [unique] IInitializeSpy *LPINITIALIZESPY;
+
+ HRESULT PreInitialize(
+ [in] DWORD dwCoInit,
+ [in] DWORD dwCurThreadAptRefs);
+
+ HRESULT PostInitialize(
+ [in] HRESULT hrCoInit,
+ [in] DWORD dwCoInit,
+ [in] DWORD dwNewThreadAptRefs);
+
+ HRESULT PreUninitialize(
+ [in] DWORD dwCurThreadAptRefs);
+
+ HRESULT PostUninitialize(
+ [in] DWORD dwNewThreadAptRefs);
+}
+
+[
+ object,
+ uuid(969dc708-5c76-11d1-8d86-0000f804b057)
+]
+interface IThumbnailExtractor : IUnknown
+{
+ HRESULT ExtractThumbnail(
+ [in] IStorage *pStg,
+ [in] ULONG ulLength,
+ [in] ULONG ulHeight,
+ [out] ULONG *pulOutputLength,
+ [out] ULONG *pulOutputHeight,
+ [out] HBITMAP *phOutputBitmap);
+
+
+ HRESULT OnFileUpdated(
+ [in] IStorage *pStg);
+}
+
+typedef enum tagGLOBALOPT_PROPERTIES
+{
+ COMGLB_EXCEPTION_HANDLING = 1,
+ COMGLB_APPID = 2,
+ COMGLB_RPC_THREADPOOL_SETTING = 3
+} GLOBALOPT_PROPERTIES;
+
+typedef enum tagGLOBALOPT_EH_VALUES
+{
+ COMGLB_EXCEPTION_HANDLE = 0,
+ COMGLB_EXCEPTION_DONOT_HANDLE_FATAL = 1,
+ COMGLB_EXCEPTION_DONOT_HANDLE = COMGLB_EXCEPTION_DONOT_HANDLE_FATAL,
+ COMGLB_EXCEPTION_DONOT_HANDLE_ANY = 2
+} GLOBALOPT_EH_VALUES;
+
+typedef enum tagGLOBALOPT_RPCTP_VALUES
+{
+ COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL = 0,
+ COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL = 1
+} GLOBALOPT_RPCTP_VALUES;
+
+
+[
+ object,
+ local,
+ pointer_default(unique),
+ uuid(0000015B-0000-0000-C000-000000000046)
+]
+interface IGlobalOptions : IUnknown
+{
+ HRESULT Set([in] GLOBALOPT_PROPERTIES property, [in] ULONG_PTR value);
+ HRESULT Query([in] GLOBALOPT_PROPERTIES property, [out ] ULONG_PTR *value);
+}
+
+cpp_quote("#ifdef USE_COM_CONTEXT_DEF")
+
+typedef DWORD CPFLAGS;
+
+typedef struct tagContextProperty
+{
+ GUID policyId;
+ CPFLAGS flags;
+ [unique] IUnknown *pUnk;
+} ContextProperty;
+
+[
+ local,
+ object,
+ uuid(000001c1-0000-0000-C000-000000000046)
+]
+interface IEnumContextProps : IUnknown
+{
+ typedef [unique] IEnumContextProps *LPENUMCONTEXTPROPS;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] ContextProperty *pContextProperties,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumContextProps **ppEnumContextProps);
+
+ HRESULT Count(
+ [out] ULONG *pcelt);
+}
+
+[
+ local,
+ object,
+ uuid(000001c0-0000-0000-C000-000000000046)
+]
+interface IContext : IUnknown
+{
+ HRESULT SetProperty(
+ [in] REFGUID policyId,
+ [in] CPFLAGS flags,
+ [in] IUnknown *pUnk);
+
+ HRESULT RemoveProperty(
+ [in] REFGUID policyId);
+
+ HRESULT GetProperty(
+ [in] REFGUID guid,
+ [out] CPFLAGS *pFlags,
+ [out] IUnknown **ppUnk);
+
+ HRESULT EnumContextProps(
+ [out] IEnumContextProps **ppEnumContextProps);
+}
+
+[
+ local,
+ object,
+ uuid(000001c6-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IObjContext : IContext
+{
+ void Reserved1();
+ void Reserved2();
+ void Reserved3();
+ void Reserved4();
+ void Reserved5();
+ void Reserved6();
+ void Reserved7();
+}
+
+cpp_quote("#endif /* defined USE_COM_CONTEXT_DEF */")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl
new file mode 100644
index 00000000..badb2f82
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsafe.idl
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2005 CorVu Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "unknwn.idl";
+#endif
+
+cpp_quote("#define INTERFACESAFE_FOR_UNTRUSTED_CALLER 1")
+cpp_quote("#define INTERFACESAFE_FOR_UNTRUSTED_DATA 2")
+cpp_quote("#define INTERFACE_USES_DISPEX 4")
+cpp_quote("#define INTERFACE_USES_SECURITY_MANAGER 8")
+
+cpp_quote("DEFINE_GUID(CATID_SafeForScripting, 0x7dd95801,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);")
+cpp_quote("DEFINE_GUID(CATID_SafeForInitializing, 0x7dd95802,0x9882,0x11cf,0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4);")
+
+[
+ object,
+ uuid(cb5bdc81-93c1-11cf-8f20-00805f2cd064),
+ pointer_default(unique)
+]
+interface IObjectSafety : IUnknown
+{
+ HRESULT GetInterfaceSafetyOptions([in] REFIID riid,
+ [out] DWORD *pdwSupportedOptions,
+ [out] DWORD *pdwEnabledOptions);
+
+ HRESULT SetInterfaceSafetyOptions([in] REFIID riid,
+ [in] DWORD dwOptionSetMask,
+ [in] DWORD dwEnabledOptions);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h
new file mode 100644
index 00000000..c01d4c73
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/objsel.h
@@ -0,0 +1,169 @@
+/*
+ * objsel.h
+ *
+ * Object Picker Dialog
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+#ifndef __OBJSEL_H_
+#define __OBJSEL_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_GUID(CLSID_DsObjectPicker, 0x17d6ccd8, 0x3b7b, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);
+DEFINE_GUID(IID_IDsObjectPicker, 0x0c87e64e, 0x3b7a, 0x11d2, 0xb9,0xe0,0x00,0xc0,0x4f,0xd8,0xdb,0xf7);
+
+#define CFSTR_DSOP_DS_SELECTION_LIST TEXT("CFSTR_DSOP_DS_SELECTION_LIST")
+
+/* up-level scope filters in the DSOP_UPLEVEL_FILTER_FLAGS structure */
+#define DSOP_FILTER_INCLUDE_ADVANCED_VIEW (0x1)
+#define DSOP_FILTER_USERS (0x2)
+#define DSOP_FILTER_BUILTIN_GROUPS (0x4)
+#define DSOP_FILTER_WELL_KNOWN_PRINCIPALS (0x8)
+#define DSOP_FILTER_UNIVERSAL_GROUPS_DL (0x10)
+#define DSOP_FILTER_UNIVERSAL_GROUPS_SE (0x20)
+#define DSOP_FILTER_GLOBAL_GROUPS_DL (0x40)
+#define DSOP_FILTER_GLOBAL_GROUPS_SE (0x80)
+#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_DL (0x100)
+#define DSOP_FILTER_DOMAIN_LOCAL_GROUPS_SE (0x200)
+#define DSOP_FILTER_CONTACTS (0x400)
+#define DSOP_FILTER_COMPUTERS (0x800)
+
+typedef struct _DSOP_UPLEVEL_FILTER_FLAGS
+{
+ ULONG flBothModes;
+ ULONG flMixedModeOnly;
+ ULONG flNativeModeOnly;
+} DSOP_UPLEVEL_FILTER_FLAGS, *PDSOP_UPLEVEL_FILTER_FLAGS;
+
+/* down-level scope filters in the DSOP_FILTER_FLAGS structure */
+#define DSOP_DOWNLEVEL_FILTER_USERS (0x80000001)
+#define DSOP_DOWNLEVEL_FILTER_LOCAL_GROUPS (0x80000002)
+#define DSOP_DOWNLEVEL_FILTER_GLOBAL_GROUPS (0x80000004)
+#define DSOP_DOWNLEVEL_FILTER_COMPUTERS (0x80000008)
+#define DSOP_DOWNLEVEL_FILTER_WORLD (0x80000010)
+#define DSOP_DOWNLEVEL_FILTER_AUTHENTICATED_USER (0x80000020)
+#define DSOP_DOWNLEVEL_FILTER_ANONYMOUS (0x80000040)
+#define DSOP_DOWNLEVEL_FILTER_BATCH (0x80000080)
+#define DSOP_DOWNLEVEL_FILTER_CREATOR_OWNER (0x80000100)
+#define DSOP_DOWNLEVEL_FILTER_CREATOR_GROUP (0x80000200)
+#define DSOP_DOWNLEVEL_FILTER_DIALUP (0x80000400)
+#define DSOP_DOWNLEVEL_FILTER_INTERACTIVE (0x80000800)
+#define DSOP_DOWNLEVEL_FILTER_NETWORK (0x80001000)
+#define DSOP_DOWNLEVEL_FILTER_SERVICE (0x80002000)
+#define DSOP_DOWNLEVEL_FILTER_SYSTEM (0x80004000)
+#define DSOP_DOWNLEVEL_FILTER_EXCLUDE_BUILTIN_GROUPS (0x80008000)
+#define DSOP_DOWNLEVEL_FILTER_TERMINAL_SERVER (0x80010000)
+#define DSOP_DOWNLEVEL_FILTER_ALL_WELLKNOWN_SIDS (0x80020000)
+#define DSOP_DOWNLEVEL_FILTER_LOCAL_SERVICE (0x80040000)
+#define DSOP_DOWNLEVEL_FILTER_NETWORK_SERVICE (0x80080000)
+#define DSOP_DOWNLEVEL_FILTER_REMOTE_LOGON (0x80100000)
+
+typedef struct _DSOP_FILTER_FLAGS
+{
+ DSOP_UPLEVEL_FILTER_FLAGS Uplevel;
+ ULONG flDownlevel;
+} DSOP_FILTER_FLAGS, *PDSOP_FILTER_FLAGS;
+
+/* ADsPath format flags in the DSOP_SCOPE_INIT_INFO structure */
+#define DSOP_SCOPE_FLAG_STARTING_SCOPE (0x1)
+#define DSOP_SCOPE_FLAG_WANT_PROVIDER_WINNT (0x2)
+#define DSOP_SCOPE_FLAG_WANT_PROVIDER_LDAP (0x4)
+#define DSOP_SCOPE_FLAG_WANT_PROVIDER_GC (0x8)
+#define DSOP_SCOPE_FLAG_WANT_SID_PATH (0x10)
+#define DSOP_SCOPE_FLAG_WANT_DOWNLEVEL_BUILTIN_PATH (0x20)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_USERS (0x40)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_GROUPS (0x80)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_COMPUTERS (0x100)
+#define DSOP_SCOPE_FLAG_DEFAULT_FILTER_CONTACTS (0x200)
+
+typedef struct _DSOP_SCOPE_INIT_INFO
+{
+ ULONG cbSize;
+ ULONG flType;
+ ULONG flScope;
+ DSOP_FILTER_FLAGS FilterFlags;
+ PCWSTR pwzDcName;
+ PCWSTR pwzADsPath;
+ HRESULT hr;
+} DSOP_SCOPE_INIT_INFO, *PDSOP_SCOPE_INIT_INFO;
+typedef const DSOP_SCOPE_INIT_INFO *PCDSOP_SCOPE_INIT_INFO;
+
+/* object picker options in the DSOP_INIT_INFO structure */
+#define DSOP_FLAG_MULTISELECT (0x1)
+#define DSOP_FLAG_SKIP_TARGET_COMPUTER_DC_CHECK (0x2)
+
+typedef struct _DSOP_INIT_INFO
+{
+ ULONG cbSize;
+ PCWSTR pwzTargetComputer;
+ ULONG cDsScopeInfos;
+ PDSOP_SCOPE_INIT_INFO aDsScopeInfos;
+ ULONG flOptions;
+ ULONG cAttributesToFetch;
+ PCWSTR *apwzAttributeNames;
+} DSOP_INIT_INFO, *PDSOP_INIT_INFO;
+
+typedef const DSOP_INIT_INFO *PCDSOP_INIT_INFO;
+
+/* selection scope types in the DS_SELECTION structure */
+#define DSOP_SCOPE_TYPE_TARGET_COMPUTER (0x1)
+#define DSOP_SCOPE_TYPE_UPLEVEL_JOINED_DOMAIN (0x2)
+#define DSOP_SCOPE_TYPE_DOWNLEVEL_JOINED_DOMAIN (0x4)
+#define DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN (0x8)
+#define DSOP_SCOPE_TYPE_GLOBAL_CATALOG (0x10)
+#define DSOP_SCOPE_TYPE_EXTERNAL_UPLEVEL_DOMAIN (0x20)
+#define DSOP_SCOPE_TYPE_EXTERNAL_DOWNLEVEL_DOMAIN (0x40)
+#define DSOP_SCOPE_TYPE_WORKGROUP (0x80)
+#define DSOP_SCOPE_TYPE_USER_ENTERED_UPLEVEL_SCOPE (0x100)
+#define DSOP_SCOPE_TYPE_USER_ENTERED_DOWNLEVEL_SCOPE (0x200)
+
+typedef struct _DS_SELECTION
+{
+ PWSTR pwzName;
+ PWSTR pwzADsPath;
+ PWSTR pwzClass;
+ PWSTR pwzUPN;
+ VARIANT *pvarFetchedAttributes;
+ ULONG flScopeType;
+} DS_SELECTION, *PDS_SELECTION;
+
+typedef struct _DS_SELECTION_LIST
+{
+ ULONG cItems;
+ ULONG cFetchedAttributes;
+ DS_SELECTION aDsSelection[ANYSIZE_ARRAY];
+} DS_SELECTION_LIST, *PDS_SELECTION_LIST;
+
+/*****************************************************************************
+ * IDsObjectPicker interface
+ */
+#define INTERFACE IDsObjectPicker
+DECLARE_INTERFACE_(IDsObjectPicker,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDsObjectPicker methods ***/
+ STDMETHOD(Initialize)(THIS_ PDSOP_INIT_INFO pInitInfo) PURE;
+ STDMETHOD(InvokeDialog)(THIS_ HWND hwndParent, IDataObject** ppdoSelections) PURE;
+};
+#undef INTERFACE
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __OBJSEL_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl
new file mode 100644
index 00000000..8f9fcc26
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocidl.idl
@@ -0,0 +1,1343 @@
+/*
+ * Copyright (C) 1999 Paul Quinn
+ * Copyright (C) 1999 Francis Beaudet
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oleidl.idl";
+import "oaidl.idl";
+import "servprov.idl";
+import "urlmon.idl";
+#endif
+
+/*****************************************************************************
+ * IOleControlTypes interface
+ */
+[
+ pointer_default(unique)
+]
+interface IOleControlTypes
+{
+ typedef [v1_enum] enum tagUASFLAGS
+ {
+ UAS_NORMAL = 0x0,
+ UAS_BLOCKED = 0x1,
+ UAS_NOPARENTABLE = 0x2,
+ UAS_MASK = 0x3
+ } UASFLAGS;
+
+ typedef enum tagREADYSTATE
+ {
+ READYSTATE_UNINITIALIZED = 0,
+ READYSTATE_LOADING = 1,
+ READYSTATE_LOADED = 2,
+ READYSTATE_INTERACTIVE = 3,
+ READYSTATE_COMPLETE = 4
+ } READYSTATE;
+
+ typedef struct tagVARIANT_BLOB
+ {
+ DWORD clSize;
+ DWORD rpcReserved;
+ [size_is(clSize-1)] ULONGLONG ahData[];
+ } wireVARIANT_BLOB;
+
+ typedef struct tagUserVARIANT
+ {
+ wireVARIANT_BLOB pVarBlob;
+ } UserVARIANT;
+}
+
+
+/*****************************************************************************
+ * IFont interface
+ */
+[
+ object,
+ uuid(bef6e002-a874-101a-8bba-00aa00300cab),
+ pointer_default(unique)
+]
+interface IFont : IUnknown
+{
+ typedef IFont *LPFONT;
+ typedef TEXTMETRICW TEXTMETRICOLE, *LPTEXTMETRICOLE;
+
+ [propget] HRESULT Name( [out] BSTR *pname);
+ [propput] HRESULT Name( [in] BSTR name );
+ [propget] HRESULT Size( [out] CY *psize );
+ [propput] HRESULT Size( [in] CY size );
+ [propget] HRESULT Bold( [out] BOOL *pbold );
+ [propput] HRESULT Bold( [in] BOOL bold );
+ [propget] HRESULT Italic( [out] BOOL *pitalic );
+ [propput] HRESULT Italic( [in] BOOL italic );
+ [propget] HRESULT Underline( [out] BOOL *punderline );
+ [propput] HRESULT Underline( [in] BOOL underline );
+ [propget] HRESULT Strikethrough( [out] BOOL *pstrikethrough );
+ [propput] HRESULT Strikethrough( [in] BOOL strikethrough );
+ [propget] HRESULT Weight( [out] SHORT *pweight );
+ [propput] HRESULT Weight( [in] SHORT weight );
+ [propget] HRESULT Charset( [out] SHORT *pcharset );
+ [propput] HRESULT Charset( [in] SHORT charset );
+ [propget] HRESULT hFont( [out] HFONT *phfont );
+ HRESULT Clone( [out] IFont **ppfont );
+ HRESULT IsEqual( [in] IFont *pFontOther );
+ HRESULT SetRatio( [in] LONG cyLogical, [in] LONG cyHimetric );
+ HRESULT QueryTextMetrics( [out] TEXTMETRICOLE * ptm );
+ HRESULT AddRefHfont( [in] HFONT hfont );
+ HRESULT ReleaseHfont( [in] HFONT hfont );
+ HRESULT SetHdc( [in] HDC hdc );
+}
+
+
+/*****************************************************************************
+ * IFontDisp interface
+ */
+[
+ object,
+ uuid(bef6e003-a874-101a-8bba-00aa00300cab),
+ pointer_default(unique)
+]
+interface IFontDisp : IDispatch
+{
+ typedef IFontDisp *LPFONTDISP;
+}
+
+
+/*****************************************************************************
+ * IFontEventsDisp interface
+ */
+[
+ object,
+ uuid(4ef6100a-af88-11d0-9846-00c04fc29993),
+ pointer_default(unique)
+]
+interface IFontEventsDisp : IDispatch
+{
+ typedef IFontEventsDisp *LPFONTEVENTS;
+}
+
+
+/*****************************************************************************
+ * IPicture interface
+ */
+[
+ object,
+ uuid(7bf80980-bf32-101a-8bbb-00aa00300cab),
+ pointer_default(unique)
+]
+interface IPicture : IUnknown
+{
+ typedef IPicture *LPPICTURE;
+
+ typedef enum tagPicture
+ {
+ PICTURE_SCALABLE = 0x1,
+ PICTURE_TRANSPARENT = 0x2
+ } PICTUREATTRIBUTES;
+
+ typedef UINT OLE_HANDLE;
+ typedef LONG OLE_XPOS_HIMETRIC;
+ typedef LONG OLE_YPOS_HIMETRIC;
+ typedef LONG OLE_XSIZE_HIMETRIC;
+ typedef LONG OLE_YSIZE_HIMETRIC;
+
+ [propget] HRESULT Handle( [out] OLE_HANDLE *pHandle );
+ [propget] HRESULT hPal( [out] OLE_HANDLE *phPal );
+ [propget] HRESULT Type( [out] SHORT *pType );
+ [propget] HRESULT Width( [out] OLE_XSIZE_HIMETRIC *pWidth );
+ [propget] HRESULT Height( [out] OLE_YSIZE_HIMETRIC *pHeight );
+
+ HRESULT Render(
+ [in] HDC hdc,
+ [in] LONG x,
+ [in] LONG y,
+ [in] LONG cx,
+ [in] LONG cy,
+ [in] OLE_XPOS_HIMETRIC xSrc,
+ [in] OLE_YPOS_HIMETRIC ySrc,
+ [in] OLE_XSIZE_HIMETRIC cxSrc,
+ [in] OLE_YSIZE_HIMETRIC cySrc,
+ [in] LPCRECT pRcWBounds);
+
+ HRESULT set_hPal( [in] OLE_HANDLE hPal );
+
+ [propget] HRESULT CurDC( [out] HDC *phDC );
+
+ HRESULT SelectPicture(
+ [in] HDC hDCIn,
+ [out] HDC * phDCOut,
+ [out] OLE_HANDLE * phBmpOut);
+
+ [propget] HRESULT KeepOriginalFormat( [out] BOOL *pKeep );
+
+ [propput] HRESULT KeepOriginalFormat( [in] BOOL keep );
+
+ HRESULT PictureChanged();
+
+ HRESULT SaveAsFile(
+ [in] LPSTREAM pStream,
+ [in] BOOL fSaveMemCopy,
+ [out] LONG *pCbSize);
+
+ [propget] HRESULT Attributes( [out] DWORD *pDwAttr );
+}
+
+
+/*****************************************************************************
+ * IPictureDisp interface
+ */
+[
+ object,
+ uuid(7bf80981-bf32-101a-8bbb-00aa00300cab),
+ pointer_default(unique)
+]
+interface IPictureDisp : IDispatch
+{
+ typedef IPictureDisp *LPPICTUREDISP;
+}
+
+
+/*****************************************************************************
+ * IOleControl interface
+ */
+[
+ object,
+ uuid(b196b288-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+
+interface IOleControl : IUnknown
+{
+ typedef IOleControl *LPOLECONTROL;
+
+ typedef struct tagCONTROLINFO
+ {
+ ULONG cb;
+ HACCEL hAccel;
+ USHORT cAccel;
+ DWORD dwFlags;
+ } CONTROLINFO, *LPCONTROLINFO;
+
+ typedef enum tagCTRLINFO
+ {
+ CTRLINFO_EATS_RETURN = 1,
+ CTRLINFO_EATS_ESCAPE = 2
+ } CTRLINFO;
+
+ HRESULT GetControlInfo( [out] CONTROLINFO *pCI );
+ HRESULT OnMnemonic( [in] MSG *pMsg );
+ HRESULT OnAmbientPropertyChange( [in] DISPID dispID );
+ HRESULT FreezeEvents( [in] BOOL bFreeze );
+}
+
+
+/*****************************************************************************
+ * IOleControlSite interface
+ */
+[
+ object,
+ uuid(b196b289-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IOleControlSite : IUnknown
+{
+ typedef IOleControlSite *LPOLECONTROLSITE;
+
+ typedef struct tagPOINTF
+ {
+ FLOAT x;
+ FLOAT y;
+ } POINTF, *LPPOINTF;
+
+ typedef enum tagXFORMCOORDS
+ {
+ XFORMCOORDS_POSITION = 0x1,
+ XFORMCOORDS_SIZE = 0x2,
+ XFORMCOORDS_HIMETRICTOCONTAINER = 0x4,
+ XFORMCOORDS_CONTAINERTOHIMETRIC = 0x8,
+ XFORMCOORDS_EVENTCOMPAT = 0x10
+ } XFORMCOORDS;
+
+ HRESULT OnControlInfoChanged();
+
+ HRESULT LockInPlaceActive( [in] BOOL fLock );
+
+ HRESULT GetExtendedControl( [out] IDispatch ** ppDisp );
+
+ HRESULT TransformCoords(
+ [in, out] POINTL *pPtlHimetric,
+ [in, out] POINTF *pPtfContainer,
+ [in] DWORD dwFlags);
+
+ HRESULT TranslateAccelerator( [in] MSG *pMsg, [in] DWORD grfModifiers );
+
+ HRESULT OnFocus( [in] BOOL fGotFocus );
+
+ HRESULT ShowPropertyFrame();
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceSiteEx interface
+ */
+[
+ object,
+ uuid(9c2cad80-3424-11cf-b670-00aa004cd6d8),
+ pointer_default(unique)
+]
+interface IOleInPlaceSiteEx : IOleInPlaceSite
+{
+ typedef IOleInPlaceSiteEx *LPOLEINPLACESITEEX;
+
+ typedef enum tagACTIVATEFLAGS
+ {
+ ACTIVATE_WINDOWLESS = 1
+ } ACTIVATE_FLAGS;
+
+ HRESULT OnInPlaceActivateEx( [out] BOOL * pfNoRedraw, [in] DWORD dwFlags );
+ HRESULT OnInPlaceDeactivateEx( [in] BOOL fNoRedraw );
+ HRESULT RequestUIActivate();
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceSiteWindowless interface
+ */
+[
+ local,
+ object,
+ uuid(922eada0-3424-11cf-b670-00aa004cd6d8),
+ pointer_default(unique)
+]
+interface IOleInPlaceSiteWindowless : IOleInPlaceSiteEx
+{
+ typedef IOleInPlaceSiteWindowless *LPOLEINPLACESITEWINDOWLESS;
+
+ typedef enum tagOLEDCFLAGS
+ {
+ OLEDC_NODRAW = 0x1,
+ OLEDC_PAINTBKGND = 0x2,
+ OLEDC_OFFSCREEN = 0x4
+ } OLEDCFLAGS;
+
+ HRESULT CanWindowlessActivate();
+
+ HRESULT GetCapture();
+
+ HRESULT SetCapture( [in] BOOL fCapture );
+
+ HRESULT GetFocus();
+
+ HRESULT SetFocus( [in] BOOL fFocus );
+
+ HRESULT GetDC(
+ [in] LPCRECT pRect,
+ [in] DWORD grfFlags,
+ [out] HDC *phDC);
+
+ HRESULT ReleaseDC( [in] HDC hDC );
+
+ HRESULT InvalidateRect(
+ [in] LPCRECT pRect,
+ [in] BOOL fErase);
+
+ HRESULT InvalidateRgn(
+ [in] HRGN hRGN,
+ [in] BOOL fErase);
+
+ HRESULT ScrollRect(
+ [in] INT dx,
+ [in] INT dy,
+ [in] LPCRECT pRectScroll,
+ [in] LPCRECT pRectClip);
+
+ HRESULT AdjustRect( [in, out] LPRECT prc );
+
+ HRESULT OnDefWindowMessage(
+ [in] UINT msg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] LRESULT *plResult);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceObjectWindowless interface
+ */
+[
+ local,
+ object,
+ uuid(1c2056cc-5ef4-101b-8bc8-00aa003e3b29),
+ pointer_default(unique)
+]
+interface IOleInPlaceObjectWindowless : IOleInPlaceObject
+{
+ typedef IOleInPlaceObjectWindowless *LPOLEINPLACEOBJECTWINDOWLESS;
+
+ HRESULT OnWindowMessage(
+ [in] UINT msg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] LRESULT *plResult);
+
+ HRESULT GetDropTarget( [out] IDropTarget **ppDropTarget );
+}
+
+
+/*****************************************************************************
+ * IClassFactory2 interface
+ */
+[
+ object,
+ uuid(b196b28f-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IClassFactory2 : IClassFactory
+{
+ typedef IClassFactory2 *LPCLASSFACTORY2;
+
+ typedef struct tagLICINFO
+ {
+ LONG cbLicInfo;
+ BOOL fRuntimeKeyAvail;
+ BOOL fLicVerified;
+ } LICINFO, *LPLICINFO;
+
+ HRESULT GetLicInfo( [out] LICINFO *pLicInfo );
+
+ HRESULT RequestLicKey(
+ [in] DWORD dwReserved,
+ [out] BSTR *pBstrKey);
+
+ [local]
+ HRESULT CreateInstanceLic(
+ [in] IUnknown *pUnkOuter,
+ [in] IUnknown *pUnkReserved,
+ [in] REFIID riid,
+ [in] BSTR bstrKey,
+ [out, iid_is(riid)] PVOID *ppvObj);
+
+ [call_as(CreateInstanceLic)]
+ HRESULT RemoteCreateInstanceLic(
+ [in] REFIID riid,
+ [in] BSTR bstrKey,
+ [out, iid_is(riid)] IUnknown **ppvObj);
+}
+
+
+/*****************************************************************************
+ * IViewObject interface
+ */
+[
+ local,
+ object,
+ uuid(3af24292-0c96-11ce-a0cf-00aa00600ab8),
+ pointer_default(unique)
+]
+interface IViewObjectEx : IViewObject2
+{
+ typedef IViewObjectEx *LPVIEWOBJECTEX;
+
+ typedef enum tagVIEWSTATUS
+ {
+ VIEWSTATUS_OPAQUE = 1,
+ VIEWSTATUS_SOLIDBKGND = 2,
+ VIEWSTATUS_DVASPECTOPAQUE = 4,
+ VIEWSTATUS_DVASPECTTRANSPARENT = 8,
+ VIEWSTATUS_SURFACE = 16,
+ VIEWSTATUS_3DSURFACE = 32
+ } VIEWSTATUS;
+
+ typedef enum tagHITRESULT
+ {
+ HITRESULT_OUTSIDE = 0,
+ HITRESULT_TRANSPARENT = 1,
+ HITRESULT_CLOSE = 2,
+ HITRESULT_HIT = 3
+ } HITRESULT;
+
+ typedef enum tagDVASPECT2
+ {
+ DVASPECT_OPAQUE = 16,
+ DVASPECT_TRANSPARENT = 32
+ } DVASPECT2;
+
+ typedef struct tagExtentInfo
+ {
+ ULONG cb;
+ DWORD dwExtentMode;
+ SIZEL sizelProposed;
+ } DVEXTENTINFO;
+
+ typedef enum tagAspectInfoFlag
+ {
+ DVASPECTINFOFLAG_CANOPTIMIZE = 1
+ } DVASPECTINFOFLAG;
+
+ typedef struct tagAspectInfo
+ {
+ ULONG cb;
+ DWORD dwFlags;
+ } DVASPECTINFO;
+
+ HRESULT GetRect(
+ [in] DWORD dwAspect,
+ [out] LPRECTL pRect);
+
+ HRESULT GetViewStatus( [out] DWORD *pdwStatus );
+
+ HRESULT QueryHitPoint(
+ [in] DWORD dwAspect,
+ [in] LPCRECT pRectBounds,
+ [in] POINT ptlLoc,
+ [in] LONG lCloseHint,
+ [out] DWORD *pHitResult);
+
+ HRESULT QueryHitRect(
+ [in] DWORD dwAspect,
+ [in] LPCRECT pRectBounds,
+ [in] LPCRECT pRectLoc,
+ [in] LONG lCloseHint,
+ [out] DWORD *pHitResult);
+
+ HRESULT GetNaturalExtent (
+ [in] DWORD dwAspect,
+ [in] LONG lindex,
+ [in] DVTARGETDEVICE *ptd,
+ [in] HDC hicTargetDev,
+ [in] DVEXTENTINFO *pExtentInfo,
+ [out] LPSIZEL pSizel);
+}
+
+
+/*****************************************************************************
+ * IProvideClassInfo interface
+ */
+[
+ object,
+ uuid(b196b283-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IProvideClassInfo : IUnknown
+{
+ typedef IProvideClassInfo *LPPROVIDECLASSINFO;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetClassInfo")
+cpp_quote("#endif")
+
+ HRESULT GetClassInfo( [out] ITypeInfo ** ppTI );
+}
+
+
+/*****************************************************************************
+ * IProvideClassInfo2 interface
+ */
+[
+ object,
+ uuid(a6bc3ac0-dbaa-11ce-9de3-00aa004bb851),
+ pointer_default(unique)
+]
+interface IProvideClassInfo2 : IProvideClassInfo
+{
+ typedef IProvideClassInfo2 *LPPROVIDECLASSINFO2;
+
+ typedef enum tagGUIDKIND
+ {
+ GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1
+ } GUIDKIND;
+
+ HRESULT GetGUID(
+ [in] DWORD dwGuidKind,
+ [out] GUID *pGUID );
+}
+
+
+[
+ object,
+ uuid(a7aba9c1-8983-11cf-8f20-00805f2cd064),
+ pointer_default(unique)
+]
+interface IProvideMultipleClassInfo : IProvideClassInfo2
+{
+ cpp_quote("#define MULTICLASSINFO_GETTYPEINFO 0x00000001")
+ cpp_quote("#define MULTICLASSINFO_GETNUMRESERVEDDISPIDS 0x00000002")
+ cpp_quote("#define MULTICLASSINFO_GETIIDPRIMARY 0x00000004")
+ cpp_quote("#define MULTICLASSINFO_GETIIDSOURCE 0x00000008")
+
+ cpp_quote("#define TIFLAGS_EXTENDDISPATCHONLY 0x00000001")
+
+ typedef IProvideMultipleClassInfo *LPPROVIDEMULTIPLECLASSINFO;
+
+ HRESULT GetMultiTypeInfoCount(
+ [out] ULONG *pcti);
+
+ HRESULT GetInfoOfIndex(
+ [in] ULONG iti,
+ [in] DWORD dwFlags,
+ [out] ITypeInfo **pptiCoClass,
+ [out] DWORD *pdwTIFlags,
+ [out] ULONG *pcdispidReserved,
+ [out] IID *piidPrimary,
+ [out] IID *piidSource);
+}
+
+
+/*****************************************************************************
+ * IConnectionPoint interface
+ */
+interface IConnectionPointContainer; /* forward declarations */
+interface IEnumConnections;
+
+[
+ object,
+ uuid(b196b286-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IConnectionPoint : IUnknown
+{
+ typedef IConnectionPoint *PCONNECTIONPOINT, *LPCONNECTIONPOINT;
+
+ HRESULT GetConnectionInterface( [out] IID *pIID );
+ HRESULT GetConnectionPointContainer( [out] IConnectionPointContainer **ppCPC );
+ HRESULT Advise( [in] IUnknown *pUnkSink, [out] DWORD *pdwCookie );
+ HRESULT Unadvise( [in] DWORD dwCookie );
+ HRESULT EnumConnections( [out] IEnumConnections **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IConnectionPointContainer interface
+ */
+interface IEnumConnectionPoints; /* forward declaration */
+[
+ object,
+ uuid(b196b284-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IConnectionPointContainer : IUnknown
+{
+ typedef IConnectionPointContainer *PCONNECTIONPOINTCONTAINER, *LPCONNECTIONPOINTCONTAINER;
+
+ HRESULT EnumConnectionPoints( [out] IEnumConnectionPoints **ppEnum );
+ HRESULT FindConnectionPoint( [in] REFIID riid, [out] IConnectionPoint **ppCP );
+}
+
+
+/*****************************************************************************
+ * IEnumConnections interface
+ */
+[
+ object,
+ uuid(b196b287-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IEnumConnections : IUnknown
+{
+ typedef IEnumConnections *PENUMCONNECTIONS, *LPENUMCONNECTIONS;
+
+ typedef struct tagCONNECTDATA
+ {
+ IUnknown *pUnk;
+ DWORD dwCookie;
+ } CONNECTDATA, *PCONNECTDATA, *LPCONNECTDATA;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG cConnections,
+ [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,
+ [out] ULONG *pcFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG cConnections,
+ [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTDATA rgcd,
+ [out] ULONG *pcFetched);
+
+ HRESULT Skip( [in] ULONG cConnections );
+
+ HRESULT Reset();
+
+ HRESULT Clone( [out] IEnumConnections **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IEnumConnectionPoints interface
+ */
+[
+ object,
+ uuid(b196b285-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IEnumConnectionPoints : IUnknown
+{
+ typedef IEnumConnectionPoints *PENUMCONNECTIONPOINTS, *LPENUMCONNECTIONPOINTS;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG cConnections,
+ [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,
+ [out] ULONG *pcFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG cConnections,
+ [out, size_is(cConnections), length_is(*pcFetched)] LPCONNECTIONPOINT *ppCP,
+ [out] ULONG *pcFetched);
+
+ HRESULT Skip( [in] ULONG cConnections );
+
+ HRESULT Reset();
+
+ HRESULT Clone( [out] IEnumConnectionPoints **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IPropertyPage interface
+ */
+interface IPropertyPageSite; /* forward declaration */
+[
+ object,
+ uuid(b196b28d-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IPropertyPage : IUnknown
+{
+ typedef IPropertyPage *LPPROPERTYPAGE;
+
+ typedef struct tagPROPPAGEINFO
+ {
+ ULONG cb;
+ LPOLESTR pszTitle;
+ SIZE size;
+ LPOLESTR pszDocString;
+ LPOLESTR pszHelpFile;
+ DWORD dwHelpContext;
+ } PROPPAGEINFO, *LPPROPPAGEINFO;
+
+ HRESULT SetPageSite( [in] IPropertyPageSite *pPageSite );
+
+ HRESULT Activate(
+ [in] HWND hWndParent,
+ [in] LPCRECT pRect,
+ [in] BOOL bModal);
+
+ HRESULT Deactivate();
+
+ HRESULT GetPageInfo( [out] PROPPAGEINFO *pPageInfo );
+
+ HRESULT SetObjects(
+ [in] ULONG cObjects,
+ [in, size_is(cObjects)] IUnknown **ppUnk);
+
+ HRESULT Show( [in] UINT nCmdShow );
+
+ HRESULT Move( [in] LPCRECT pRect );
+
+ HRESULT IsPageDirty();
+
+ HRESULT Apply();
+
+ HRESULT Help( [in] LPCOLESTR pszHelpDir );
+
+ HRESULT TranslateAccelerator( [in] MSG *pMsg );
+}
+
+
+/*****************************************************************************
+ * IPropertyPage2 interface
+ */
+[
+ object,
+ uuid(01e44665-24ac-101b-84ed-08002b2ec713),
+ pointer_default(unique)
+]
+interface IPropertyPage2 : IPropertyPage
+{
+ typedef IPropertyPage2 *LPPROPERTYPAGE2;
+
+ HRESULT EditProperty( [in] DISPID dispID );
+}
+
+
+/*****************************************************************************
+ * IPropertyPageSite interface
+ */
+[
+ object,
+ uuid(b196b28c-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface IPropertyPageSite : IUnknown
+{
+ typedef IPropertyPageSite *LPPROPERTYPAGESITE;
+
+ typedef enum tagPROPPAGESTATUS
+ {
+ PROPPAGESTATUS_DIRTY = 0x1,
+ PROPPAGESTATUS_VALIDATE = 0x2,
+ PROPPAGESTATUS_CLEAN = 0x4
+ } PROPPAGESTATUS;
+
+ HRESULT OnStatusChange( [in] DWORD dwFlags );
+ HRESULT GetLocaleID( [out] LCID *pLocaleID );
+ HRESULT GetPageContainer( [out] IUnknown **ppUnk );
+ HRESULT TranslateAccelerator( [in] MSG *pMsg );
+}
+
+
+/*****************************************************************************
+ * IPropertyNotifySink interface
+ */
+[
+ object,
+ uuid(9bfbbc02-eff1-101a-84ed-00aa00341d07),
+ pointer_default(unique)
+]
+interface IPropertyNotifySink : IUnknown
+{
+ typedef IPropertyNotifySink *LPPROPERTYNOTIFYSINK;
+
+ HRESULT OnChanged( [in] DISPID dispID );
+ HRESULT OnRequestEdit( [in] DISPID dispID );
+}
+
+
+/*****************************************************************************
+ * ISimpleFrameSite interface
+ */
+[
+ object,
+ uuid(742b0e01-14e6-101b-914e-00aa00300cab),
+ pointer_default(unique)
+]
+interface ISimpleFrameSite : IUnknown
+{
+ typedef ISimpleFrameSite *LPSIMPLEFRAMESITE;
+
+ HRESULT PreMessageFilter(
+ [in] HWND hWnd,
+ [in] UINT msg,
+ [in] WPARAM wp,
+ [in] LPARAM lp,
+ [out] LRESULT *plResult,
+ [out] DWORD *pdwCookie);
+
+ HRESULT PostMessageFilter(
+ [in] HWND hWnd,
+ [in] UINT msg,
+ [in] WPARAM wp,
+ [in] LPARAM lp,
+ [out] LRESULT *plResult,
+ [in] DWORD dwCookie);
+}
+
+
+/*****************************************************************************
+ * IPersistStreamInit interface
+ */
+[
+ object,
+ uuid(7fd52380-4e07-101b-ae2d-08002b2ec713),
+ pointer_default(unique)
+]
+interface IPersistStreamInit : IPersist
+{
+ typedef IPersistStreamInit *LPPERSISTSTREAMINIT;
+
+ HRESULT IsDirty();
+ HRESULT Load( [in] LPSTREAM pStm );
+ HRESULT Save( [in] LPSTREAM pStm, [in] BOOL fClearDirty );
+ HRESULT GetSizeMax( [out] ULARGE_INTEGER *pcbSize );
+ HRESULT InitNew();
+}
+
+
+/*****************************************************************************
+ * IPersistMemory interface
+ */
+[
+ object,
+ uuid(bd1ae5e0-a6ae-11ce-bd37-504200c10000),
+ pointer_default(unique)
+]
+interface IPersistMemory : IPersist
+{
+ typedef IPersistMemory *LPPERSISTMEMORY;
+
+ HRESULT IsDirty();
+
+ [local]
+ HRESULT Load(
+ [in, size_is(cbSize)] LPVOID pMem,
+ [in] ULONG cbSize);
+
+ [call_as(Load)]
+ HRESULT RemoteLoad(
+ [in, size_is(cbSize)] BYTE *pMem,
+ [in] ULONG cbSize);
+
+ [local]
+ HRESULT Save(
+ [out, size_is(cbSize)] LPVOID pMem,
+ [in] BOOL fClearDirty,
+ [in] ULONG cbSize);
+
+ [call_as(Save)]
+ HRESULT RemoteSave(
+ [out, size_is(cbSize)] BYTE *pMem,
+ [in] BOOL fClearDirty,
+ [in] ULONG cbSize);
+
+ HRESULT GetSizeMax( [out] ULONG *pCbSize );
+ HRESULT InitNew();
+}
+
+
+/*****************************************************************************
+ * IPersistPropertyBag interface
+ */
+[
+ object,
+ uuid(37d84f60-42cb-11ce-8135-00aa004bb851),
+ pointer_default(unique)
+]
+interface IPersistPropertyBag : IPersist
+{
+ typedef IPersistPropertyBag *LPPERSISTPROPERTYBAG;
+
+ HRESULT InitNew();
+
+ HRESULT Load(
+ [in] IPropertyBag *pPropBag,
+ [in] IErrorLog *pErrorLog);
+
+ HRESULT Save(
+ [in] IPropertyBag *pPropBag,
+ [in] BOOL fClearDirty,
+ [in] BOOL fSaveAllProperties);
+}
+
+
+/*****************************************************************************
+ * IPropertyBag2 interface
+ */
+[
+ object,
+ uuid(22f55882-280b-11d0-a8a9-00a0c90c2004),
+ pointer_default(unique)
+]
+interface IPropertyBag2 : IUnknown
+{
+ typedef IPropertyBag2 *LPPROPERTYBAG2;
+
+ typedef enum tagPROPBAG2_TYPE
+ {
+ PROPBAG2_TYPE_UNDEFINED = 0,
+ PROPBAG2_TYPE_DATA = 1,
+ PROPBAG2_TYPE_URL = 2,
+ PROPBAG2_TYPE_OBJECT = 3,
+ PROPBAG2_TYPE_STREAM = 4,
+ PROPBAG2_TYPE_STORAGE = 5,
+ PROPBAG2_TYPE_MONIKER = 6
+ } PROPBAG2_TYPE;
+
+ typedef struct tagPROPBAG2
+ {
+ DWORD dwType;
+ VARTYPE vt;
+ CLIPFORMAT cfType;
+ DWORD dwHint;
+ LPOLESTR pstrName;
+ CLSID clsid;
+ } PROPBAG2;
+
+ HRESULT Read(
+ [in] ULONG cProperties,
+ [in] PROPBAG2 *pPropBag,
+ [in] IErrorLog *pErrLog,
+ [out] VARIANT *pvarValue,
+ [out] HRESULT *phrError);
+
+ HRESULT Write(
+ [in] ULONG cProperties,
+ [in] PROPBAG2 *pPropBag,
+ [in] VARIANT *pvarValue);
+
+ HRESULT CountProperties(
+ [out] ULONG *pcProperties );
+
+ HRESULT GetPropertyInfo(
+ [in] ULONG iProperty,
+ [in] ULONG cProperties,
+ [out] PROPBAG2 *pPropBag,
+ [out] ULONG *pcProperties);
+
+ HRESULT LoadObject(
+ [in] LPCOLESTR pstrName,
+ [in] DWORD dwHint,
+ [in] IUnknown *pUnkObject,
+ [in] IErrorLog *pErrLog);
+}
+
+
+/*****************************************************************************
+ * IPersistPropertyBag2 interface
+ */
+[
+ object,
+ uuid(22f55881-280b-11d0-a8a9-00a0c90c2004),
+ pointer_default(unique)
+]
+interface IPersistPropertyBag2 : IPersist
+{
+ typedef IPersistPropertyBag2 *LPPERSISTPROPERTYBAG2;
+
+ HRESULT InitNew();
+
+ HRESULT Load(
+ [in] IPropertyBag2 *pPropBag,
+ [in] IErrorLog *pErrorLog);
+
+ HRESULT Save(
+ [in] IPropertyBag2 *pPropBag,
+ [in] BOOL fClearDirty,
+ [in] BOOL fSaveAllProperties);
+
+ HRESULT IsDirty();
+}
+
+
+/*****************************************************************************
+ * ISpecifyPropertyPages interface
+ */
+[
+ object,
+ uuid(b196b28b-bab4-101a-b69c-00aa00341d07),
+ pointer_default(unique)
+]
+interface ISpecifyPropertyPages : IUnknown
+{
+ typedef ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES;
+
+ typedef struct tagCAUUID
+ {
+ ULONG cElems;
+ [size_is(cElems)] GUID *pElems;
+ } CAUUID, *LPCAUUID;
+
+ HRESULT GetPages( [out] CAUUID *pPages );
+}
+
+
+/*****************************************************************************
+ * IPerPropertyBrowsing interface
+ */
+[
+ object,
+ uuid(376bd3aa-3845-101b-84ed-08002b2ec713),
+ pointer_default(unique)
+]
+interface IPerPropertyBrowsing : IUnknown
+{
+ typedef IPerPropertyBrowsing *LPPERPROPERTYBROWSING;
+
+ typedef struct tagCALPOLESTR
+ {
+ ULONG cElems;
+ [size_is(cElems)] LPOLESTR *pElems;
+ } CALPOLESTR, *LPCALPOLESTR;
+
+ typedef struct tagCADWORD
+ {
+ ULONG cElems;
+ [size_is(cElems)] DWORD *pElems;
+ } CADWORD, *LPCADWORD;
+
+ HRESULT GetDisplayString(
+ [in] DISPID dispID,
+ [out] BSTR *pBstr);
+
+ HRESULT MapPropertyToPage(
+ [in] DISPID dispID,
+ [out] CLSID *pClsid);
+
+ HRESULT GetPredefinedStrings(
+ [in] DISPID dispID,
+ [out] CALPOLESTR *pCaStringsOut,
+ [out] CADWORD *pCaCookiesOut);
+
+ HRESULT GetPredefinedValue(
+ [in] DISPID dispID,
+ [in] DWORD dwCookie,
+ [out] VARIANT *pVarOut);
+}
+
+
+/*****************************************************************************
+ * IAdviseSinkEx interface
+ */
+[
+ object,
+ uuid(3af24290-0c96-11ce-a0cf-00aa00600ab8),
+ pointer_default(unique)
+]
+interface IAdviseSinkEx : IAdviseSink
+{
+ typedef IAdviseSinkEx *LPADVISESINKEX;
+
+ [local]
+ void OnViewStatusChange( [in] DWORD dwViewStatus );
+
+ [call_as(OnViewStatusChange)]
+ HRESULT RemoteOnViewStatusChange( [in] DWORD dwViewStatus );
+}
+
+
+/*****************************************************************************
+ * IPointerInactive interface
+ */
+[
+ object,
+ uuid(55980ba0-35aa-11cf-b671-00aa004cd6d8),
+ pointer_default(unique)
+]
+interface IPointerInactive : IUnknown
+{
+ typedef IPointerInactive *LPPOINTERINACTIVE;
+
+ HRESULT GetActivationPolicy(
+ [out] DWORD *pdwPolicy);
+
+ HRESULT OnInactiveMouseMove(
+ [in] LPCRECT pRectBounds,
+ [in] LONG x,
+ [in] LONG y,
+ [in] DWORD grfKeyState);
+
+ HRESULT OnInactiveSetCursor(
+ [in] LPCRECT pRectBounds,
+ [in] LONG x,
+ [in] LONG y,
+ [in] DWORD dwMouseMsg,
+ [in] BOOL fSetAlways);
+}
+
+
+/*****************************************************************************
+ * IObjectWithSite interface
+ */
+[
+ object,
+ uuid(fc4801a3-2ba9-11cf-a229-00aa003d7352),
+ pointer_default(unique)
+]
+interface IObjectWithSite : IUnknown
+{
+ typedef IObjectWithSite *LPOBJECTWITHSITE;
+
+ HRESULT SetSite(
+ [in] IUnknown * pUnkSite);
+
+ HRESULT GetSite(
+ [in] REFIID riid,
+ [out, iid_is(riid)] PVOID *ppvSite);
+}
+
+
+/*****************************************************************************
+ * IOleUndoUnit interface
+ */
+interface IOleUndoManager; /* forward declaration */
+[
+ object,
+ uuid(894ad3b0-ef97-11ce-9bc9-00aa00608e01),
+ pointer_default(unique)
+]
+interface IOleUndoUnit : IUnknown
+{
+ typedef IOleUndoUnit *LPOLEUNDOUNIT;
+
+ HRESULT Do( [in] IOleUndoManager *pUndoManager );
+ HRESULT GetDescription( [out] BSTR *pBstr );
+ HRESULT GetUnitType( [out] CLSID *pClsid, [out] LONG *plID );
+ HRESULT OnNextAdd();
+}
+
+
+/*****************************************************************************
+ * IOleParentUndoUnit interface
+ */
+[
+ object,
+ uuid(a1faf330-ef97-11ce-9bc9-00aa00608e01),
+ pointer_default(unique)
+]
+interface IOleParentUndoUnit : IOleUndoUnit
+{
+ typedef IOleParentUndoUnit *LPOLEPARENTUNDOUNIT;
+
+ HRESULT Open( [in] IOleParentUndoUnit *pPUU );
+ HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );
+ HRESULT Add( [in] IOleUndoUnit *pUU );
+ HRESULT FindUnit( [in] IOleUndoUnit *pUU );
+ HRESULT GetParentState( [out] DWORD *pdwState );
+}
+
+
+/*****************************************************************************
+ * IEnumOleUndoUnits interface
+ */
+[
+ object,
+ uuid(b3e7c340-ef97-11ce-9bc9-00aa00608e01),
+ pointer_default(unique)
+]
+interface IEnumOleUndoUnits : IUnknown
+{
+ typedef IEnumOleUndoUnits *LPENUMOLEUNDOUNITS;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG cElt,
+ [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,
+ [out] ULONG *pcEltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG cElt,
+ [out, size_is(cElt), length_is(*pcEltFetched)] IOleUndoUnit **rgElt,
+ [out] ULONG *pcEltFetched);
+
+ HRESULT Skip( [in] ULONG cElt );
+
+ HRESULT Reset();
+
+ HRESULT Clone( [out] IEnumOleUndoUnits **ppEnum );
+}
+
+
+/*****************************************************************************
+ * IOleUndoManager interface
+ */
+[
+ object,
+ uuid(d001f200-ef97-11ce-9bc9-00aa00608e01),
+ pointer_default(unique)
+]
+interface IOleUndoManager : IUnknown
+{
+cpp_quote("#define SID_SOleUndoManager IID_IOleUndoManager")
+ typedef IOleUndoManager *LPOLEUNDOMANAGER;
+
+ HRESULT Open( [in] IOleParentUndoUnit *pPUU );
+ HRESULT Close( [in] IOleParentUndoUnit *pPUU, [in] BOOL fCommit );
+ HRESULT Add( [in] IOleUndoUnit *pUU );
+ HRESULT GetOpenParentState( [out] DWORD *pdwState );
+ HRESULT DiscardFrom( [in] IOleUndoUnit *pUU );
+ HRESULT UndoTo( [in] IOleUndoUnit *pUU );
+ HRESULT RedoTo( [in] IOleUndoUnit *pUU );
+ HRESULT EnumUndoable( [out] IEnumOleUndoUnits **ppEnum );
+ HRESULT EnumRedoable( [out] IEnumOleUndoUnits **ppEnum );
+ HRESULT GetLastUndoDescription( [out] BSTR *pBstr );
+ HRESULT GetLastRedoDescription( [out] BSTR *pBstr );
+ HRESULT Enable( [in] BOOL fEnable );
+}
+
+
+/*****************************************************************************
+ * IQuickActivate interface
+ */
+[
+ object,
+ uuid(cf51ed10-62fe-11cf-bf86-00a0c9034836),
+ pointer_default(unique)
+]
+interface IQuickActivate : IUnknown
+{
+ typedef IQuickActivate *LPQUICKACTIVATE;
+
+ typedef enum tagQACONTAINERFLAGS
+ {
+ QACONTAINER_SHOWHATCHING = 0x1,
+ QACONTAINER_SHOWGRABHANDLES = 0x2,
+ QACONTAINER_USERMODE = 0x4,
+ QACONTAINER_DISPLAYASDEFAULT = 0x8,
+ QACONTAINER_UIDEAD = 0x10,
+ QACONTAINER_AUTOCLIP = 0x20,
+ QACONTAINER_MESSAGEREFLECT = 0x40,
+ QACONTAINER_SUPPORTSMNEMONICS = 0x80
+ } QACONTAINERFLAGS;
+
+ typedef DWORD OLE_COLOR;
+
+ typedef struct tagQACONTAINER
+ {
+ ULONG cbSize;
+ IOleClientSite *pClientSite;
+ IAdviseSinkEx *pAdviseSink;
+ IPropertyNotifySink *pPropertyNotifySink;
+ IUnknown *pUnkEventSink;
+ DWORD dwAmbientFlags;
+ OLE_COLOR colorFore;
+ OLE_COLOR colorBack;
+ IFont *pFont;
+ IOleUndoManager *pUndoMgr;
+ DWORD dwAppearance;
+ LONG lcid;
+ HPALETTE hpal;
+ IBindHost *pBindHost;
+ IOleControlSite *pOleControlSite;
+ IServiceProvider *pServiceProvider;
+ } QACONTAINER;
+
+ typedef struct tagQACONTROL
+ {
+ ULONG cbSize;
+ DWORD dwMiscStatus;
+ DWORD dwViewStatus;
+ DWORD dwEventCookie;
+ DWORD dwPropNotifyCookie;
+ DWORD dwPointerActivationPolicy;
+ } QACONTROL;
+
+ [local]
+ HRESULT QuickActivate(
+ [in] QACONTAINER *pQaContainer,
+ [in,out] QACONTROL *pQaControl);
+
+ [call_as(QuickActivate)]
+ HRESULT RemoteQuickActivate(
+ [in] QACONTAINER *pQaContainer,
+ [out] QACONTROL *pQaControl);
+
+ HRESULT SetContentExtent( [in] LPSIZEL pSizel );
+
+ HRESULT GetContentExtent( [out] LPSIZEL pSizel );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl
new file mode 100644
index 00000000..d84810b1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ocmm.idl
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2006 Matthew Kehrer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "oleidl.idl";
+
+cpp_quote("EXTERN_C const GUID NAMEDTIMER_DRAW;")
+
+[
+ object,
+ uuid(3050F361-98B5-11CF-BB82-00AA00BDCE0B),
+ pointer_default(unique)
+]
+interface ITimerSink : IUnknown
+{
+ HRESULT OnTimer([in] VARIANT vtimeAdvise);
+}
+
+
+[
+ object,
+ uuid(3050F360-98B5-11CF-BB82-00AA00BDCE0B),
+ pointer_default(unique)
+]
+interface ITimer : IUnknown
+{
+ HRESULT Advise([in] VARIANT vtimeMin,
+ [in] VARIANT vtimeMax,
+ [in] VARIANT vtimeInterval,
+ [in] DWORD dwFlags,
+ [in] ITimerSink *pTimerSink,
+ [out] DWORD *pdwCookie);
+
+ HRESULT Unadvise([in] DWORD dwCookie);
+
+ HRESULT Freeze([in] BOOL fFreeze);
+
+ HRESULT GetTime([out] VARIANT *pvtime);
+}
+
+
+[
+ object,
+ uuid(3050F35F-98B5-11CF-BB82-00AA00BDCE0B),
+ pointer_default(unique)
+]
+interface ITimerService : IUnknown
+{
+ HRESULT CreateTimer([in] ITimer *pReferenceTimer,
+ [out] ITimer **ppNewTimer);
+
+ HRESULT GetNamedTimer([in] REFGUID rguidName,
+ [out] ITimer **ppTimer);
+
+ HRESULT SetNamedTimerReference([in] REFGUID rguidName,
+ [in] ITimer *pReferenceTimer);
+}
+
+cpp_quote("#define SID_STimerService IID_ITimerService")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h
new file mode 100644
index 00000000..543e89a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/odbcinst.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ODBCINST_H
+#define __WINE_ODBCINST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sql.h>
+
+/* flags for Installer function requests */
+#define ODBC_INSTALL_INQUIRY 1
+#define ODBC_INSTALL_COMPLETE 2
+
+#define ODBC_INSTALL_DRIVER 1
+#define ODBC_REMOVE_DRIVER 2
+#define ODBC_CONFIG_DRIVER 3
+#define ODBC_CONFIG_DRIVER_MAX 100
+
+#define ODBC_ADD_DSN 1
+#define ODBC_CONFIG_DSN 2
+#define ODBC_REMOVE_DSN 3
+#define ODBC_ADD_SYS_DSN 4
+#define ODBC_CONFIG_SYS_DSN 5
+#define ODBC_REMOVE_SYS_DSN 6
+#define ODBC_REMOVE_DEFAULT_DSN 7
+
+/* Mode values for SQLSetConfigMode/SQLGetConfigMode */
+#define ODBC_BOTH_DSN 0
+#define ODBC_USER_DSN 1
+#define ODBC_SYSTEM_DSN 2
+
+/* error values */
+#define ODBC_ERROR_GENERAL_ERR 1
+#define ODBC_ERROR_INVALID_BUFF_LEN 2
+#define ODBC_ERROR_INVALID_HWND 3
+#define ODBC_ERROR_INVALID_STR 4
+#define ODBC_ERROR_INVALID_REQUEST_TYPE 5
+#define ODBC_ERROR_COMPONENT_NOT_FOUND 6
+#define ODBC_ERROR_INVALID_NAME 7
+#define ODBC_ERROR_INVALID_KEYWORD_VALUE 8
+#define ODBC_ERROR_INVALID_DSN 9
+#define ODBC_ERROR_INVALID_INF 10
+#define ODBC_ERROR_REQUEST_FAILED 11
+#define ODBC_ERROR_INVALID_PATH 12
+#define ODBC_ERROR_LOAD_LIB_FAILED 13
+#define ODBC_ERROR_INVALID_PARAM_SEQUENCE 14
+#define ODBC_ERROR_INVALID_LOG_FILE 15
+#define ODBC_ERROR_USER_CANCELED 16
+#define ODBC_ERROR_USAGE_UPDATE_FAILED 17
+#define ODBC_ERROR_CREATE_DSN_FAILED 18
+#define ODBC_ERROR_WRITING_SYSINFO_FAILED 19
+#define ODBC_ERROR_REMOVE_DSN_FAILED 20
+#define ODBC_ERROR_OUT_OF_MEM 21
+#define ODBC_ERROR_OUTPUT_STRING_TRUNCATED 22
+
+
+BOOL WINAPI ODBCCPlApplet(LONG,LONG,LONG*,LONG*);
+BOOL WINAPI SQLConfigDataSource(HWND,WORD,LPCSTR,LPCSTR);
+BOOL WINAPI SQLConfigDataSourceW(HWND,WORD,LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLCreateDataSource(HWND,LPCSTR);
+BOOL WINAPI SQLCreateDataSourceW(HWND,LPCWSTR);
+BOOL WINAPI SQLGetAvailableDrivers(LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLGetAvailableDriversW(LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLGetConfigMode(UWORD*);
+BOOL WINAPI SQLGetInstalledDrivers(LPSTR,WORD,WORD*);
+BOOL WINAPI SQLGetInstalledDriversW(LPWSTR,WORD,WORD*);
+int WINAPI SQLGetPrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR,int,LPCSTR);
+int WINAPI SQLGetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,int,LPCWSTR);
+BOOL WINAPI SQLGetTranslator(HWND,LPSTR,WORD,WORD*,LPSTR,WORD,WORD*,DWORD*);
+BOOL WINAPI SQLGetTranslatorW(HWND,LPWSTR,WORD,WORD*,LPWSTR,WORD,WORD*,DWORD*);
+BOOL WINAPI SQLInstallDriver(LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallDriverW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallDriverEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallDriverExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallDriverManager(LPSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallDriverManagerW(LPWSTR,WORD,WORD*);
+SQLRETURN WINAPI SQLInstallerError(WORD,DWORD*,LPSTR,WORD,WORD*);
+SQLRETURN WINAPI SQLInstallerErrorW(WORD,DWORD*,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLInstallODBC(HWND,LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI SQLInstallODBCW(HWND,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLInstallTranslatorEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallTranslatorExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallTranslator(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLInstallTranslatorW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD);
+BOOL WINAPI SQLManageDataSources(HWND hwnd);
+SQLRETURN WINAPI SQLPostInstallerError(DWORD,LPCSTR);
+SQLRETURN WINAPI SQLPostInstallerErrorW(DWORD,LPCWSTR);
+BOOL WINAPI SQLReadFileDSN(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*);
+BOOL WINAPI SQLReadFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*);
+BOOL WINAPI SQLRemoveDefaultDataSource(void);
+BOOL WINAPI SQLRemoveDriver(LPCSTR,BOOL,LPDWORD);
+BOOL WINAPI SQLRemoveDriverW(LPCWSTR,BOOL,LPDWORD);
+BOOL WINAPI SQLRemoveDriverManager(LPDWORD);
+BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR);
+BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR);
+BOOL WINAPI SQLRemoveTranslator(LPCSTR,LPDWORD);
+BOOL WINAPI SQLRemoveTranslatorW(LPCWSTR,LPDWORD);
+BOOL WINAPI SQLSetConfigMode(UWORD);
+BOOL WINAPI SQLValidDSN(LPCSTR);
+BOOL WINAPI SQLValidDSNW(LPCWSTR);
+BOOL WINAPI SQLWriteDSNToIni(LPCSTR,LPCSTR);
+BOOL WINAPI SQLWriteDSNToIniW(LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLWriteFileDSN(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI SQLWriteFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+BOOL WINAPI SQLWritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WINE_ODBCINST_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h
new file mode 100644
index 00000000..8516f629
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2.h
@@ -0,0 +1,179 @@
+/*
+ * Declarations for OLE2
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLE2_H
+#define __WINE_OLE2_H
+
+#include <winerror.h>
+#include <objbase.h>
+#include <oleauto.h>
+#include <oleidl.h>
+
+struct tagMSG;
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define E_DRAW VIEW_E_DRAW
+#define DATA_E_FORMATETC DV_E_FORMATETC
+
+#define OLEIVERB_PRIMARY (__MSABI_LONG(0))
+#define OLEIVERB_SHOW (__MSABI_LONG(-1))
+#define OLEIVERB_OPEN (__MSABI_LONG(-2))
+#define OLEIVERB_HIDE (__MSABI_LONG(-3))
+#define OLEIVERB_UIACTIVATE (__MSABI_LONG(-4))
+#define OLEIVERB_INPLACEACTIVATE (__MSABI_LONG(-5))
+#define OLEIVERB_DISCARDUNDOSTATE (__MSABI_LONG(-6))
+#define OLEIVERB_PROPERTIES (__MSABI_LONG(-7))
+
+#define EMBDHLP_INPROC_HANDLER 0x00000000
+#define EMBDHLP_INPROC_SERVER 0x00000001
+#define EMBDHLP_CREATENOW 0x00000000
+#define EMBDHLP_DELAYCREATE 0x00010000
+
+/*
+ * API declarations
+ */
+HRESULT WINAPI RegisterDragDrop(HWND,LPDROPTARGET);
+HRESULT WINAPI RevokeDragDrop(HWND);
+HRESULT WINAPI DoDragDrop(LPDATAOBJECT,LPDROPSOURCE,DWORD,DWORD*);
+HRESULT WINAPI OleLoadFromStream(IStream *pStm,REFIID iidInterface,void** ppvObj);
+HRESULT WINAPI OleSaveToStream(IPersistStream *pPStm,IStream *pStm);
+HOLEMENU WINAPI OleCreateMenuDescriptor(HMENU hmenuCombined,LPOLEMENUGROUPWIDTHS lpMenuWidths);
+HRESULT WINAPI OleDestroyMenuDescriptor(HOLEMENU hmenuDescriptor);
+HRESULT WINAPI OleSetMenuDescriptor(HOLEMENU hmenuDescriptor,HWND hwndFrame,HWND hwndActiveObject,LPOLEINPLACEFRAME lpFrame,LPOLEINPLACEACTIVEOBJECT lpActiveObject);
+
+HRESULT WINAPI WriteClassStg(IStorage *pstg, REFCLSID rclsid);
+HRESULT WINAPI ReadClassStg(IStorage *pstg,CLSID *pclsid);
+HRESULT WINAPI WriteClassStm(IStream *pStm,REFCLSID rclsid);
+HRESULT WINAPI ReadClassStm(IStream *pStm,CLSID *pclsid);
+
+
+HRESULT WINAPI OleSave(LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad);
+HRESULT WINAPI OleRegGetUserType(REFCLSID clsid,
+ DWORD dwFormOfType,
+ LPOLESTR* pszUserType);
+HRESULT WINAPI OleRegGetMiscStatus (REFCLSID clsid, DWORD dwAspect, DWORD* pdwStatus);
+HRESULT WINAPI OleRegEnumFormatEtc (REFCLSID clsid,
+ DWORD dwDirection,
+ LPENUMFORMATETC* ppenumFormatetc);
+HRESULT WINAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM* ppstm);
+HRESULT WINAPI GetHGlobalFromStream(LPSTREAM pstm, HGLOBAL* phglobal);
+HRESULT WINAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB* ppenum);
+BOOL WINAPI OleIsRunning(LPOLEOBJECT pObject);
+HRESULT WINAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,
+ DWORD renderopt, LPFORMATETC pFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
+ LPVOID* ppvObj);
+HRESULT WINAPI OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained);
+HRESULT WINAPI OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible);
+HRESULT WINAPI OleQueryLinkFromData(IDataObject* pSrcDataObject);
+HRESULT WINAPI OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject);
+HRESULT WINAPI OleRun(LPUNKNOWN pUnknown);
+HRESULT WINAPI OleDraw(LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw, LPCRECT lprcBounds);
+VOID WINAPI ReleaseStgMedium(LPSTGMEDIUM);
+HRESULT WINAPI OleGetClipboard(IDataObject** ppDataObj);
+HRESULT WINAPI OleIsCurrentClipboard(LPDATAOBJECT);
+HRESULT WINAPI OleSetClipboard(LPDATAOBJECT);
+HRESULT WINAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid,
+ DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
+ LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT WINAPI ReadFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT* pcf, LPOLESTR* lplpszUserType);
+HRESULT WINAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID* ppvObj);
+HRESULT WINAPI GetHGlobalFromILockBytes(LPLOCKBYTES plkbyt, HGLOBAL* phglobal);
+HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPLOCKBYTES* pplkbyt);
+HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder);
+HGLOBAL WINAPI OleGetIconOfClass(REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseTypeAsLabel);
+HGLOBAL WINAPI OleGetIconOfFile(LPOLESTR lpszPath, BOOL fUseFileAsLabel);
+HGLOBAL WINAPI OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, LPOLESTR lpszSourceFile, UINT iIconIndex);
+HRESULT WINAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses);
+HRESULT WINAPI OleCreateFromFile(REFCLSID rclsid, LPCOLESTR lpszFileName, REFIID riid,
+ DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT WINAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT WINAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
+ LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT WINAPI OleFlushClipboard(void);
+HRESULT WINAPI GetConvertStg(LPSTORAGE pStg);
+HRESULT WINAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert);
+BOOL WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, struct tagMSG* lpMsg, WORD* lpwCmd);
+HRESULT WINAPI OleCreateLinkToFile(LPCOLESTR lpszFileName, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HANDLE WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags);
+HRESULT WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType);
+HRESULT WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame, LPOLEINPLACEFRAMEINFO lpFrameInfo, struct tagMSG* lpmsg);
+HRESULT WINAPI OleCreateFromData(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT WINAPI OleCreateFromDataEx(LPDATAOBJECT pSrcDataObj, REFIID riid, DWORD dwFlags, DWORD renderopt, ULONG num_formats,
+ DWORD *adv_flags, LPFORMATETC fmts, IAdviseSink *sink, DWORD *conns,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj);
+HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid,
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID* ppvObj);
+HRESULT WINAPI OleCreateEmbeddingHelper(REFCLSID clsid,
+ LPUNKNOWN pUnkOuter,
+ DWORD flags,
+ IClassFactory *pCF,
+ REFIID riid,
+ LPVOID* ppvObj);
+HRESULT WINAPI CreateOleAdviseHolder (LPOLEADVISEHOLDER *ppOAHolder);
+HRESULT WINAPI OleInitialize(LPVOID pvReserved);
+void WINAPI OleUninitialize(void);
+BOOL WINAPI IsValidInterface(LPUNKNOWN punk);
+DWORD WINAPI OleBuildVersion(VOID);
+
+/*
+ * OLE version conversion declarations
+ */
+
+
+typedef struct _OLESTREAM* LPOLESTREAM;
+typedef struct _OLESTREAMVTBL {
+ DWORD (CALLBACK *Get)(LPOLESTREAM,LPSTR,DWORD);
+ DWORD (CALLBACK *Put)(LPOLESTREAM,LPSTR,DWORD);
+} OLESTREAMVTBL;
+typedef OLESTREAMVTBL* LPOLESTREAMVTBL;
+typedef struct _OLESTREAM {
+ LPOLESTREAMVTBL lpstbl;
+} OLESTREAM;
+
+HRESULT WINAPI OleConvertOLESTREAMToIStorage( LPOLESTREAM lpolestream, LPSTORAGE pstg, const DVTARGETDEVICE* ptd);
+HRESULT WINAPI OleConvertIStorageToOLESTREAM( LPSTORAGE pstg, LPOLESTREAM lpolestream);
+
+HRESULT WINAPI OleDoAutoConvert( LPSTORAGE pStg, LPCLSID pClsidNew );
+HRESULT WINAPI OleGetAutoConvert( REFCLSID clsidOld, LPCLSID pClsidNew );
+HRESULT WINAPI OleSetAutoConvert( REFCLSID clsidOld, REFCLSID clsidNew );
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_OLE2_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h
new file mode 100644
index 00000000..2a542820
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ole2ver.h
@@ -0,0 +1,53 @@
+/*
+ * Version number info
+ *
+ * Copyright (C) 1999 Paul Quinn
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLE2VER_H
+#define __WINE_OLE2VER_H
+
+/*
+ * other versions rmm/rup:
+ * 23/639
+ * 23/700
+ * 23/730
+ * 23/824
+ *
+ * Win98 SE original files:
+ * COMPOBJ: CoBuildVersion 23/700
+ * OLE2: OleBuildVersion -> COMPOBJ.CoBuildVersion
+ * OLE32: CoBuildVersion and Ole~ 23/824
+ *
+ * We probably should reorganize the OLE version stuff, i.e.
+ * use different values for every *BuildVersion function and Win version.
+ */
+
+/* bad: we shouldn't make use of it that globally ! */
+#define rmm 23
+#define rup 824
+
+#endif /* __WINE_OLE2VER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl
new file mode 100644
index 00000000..e87c14fd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleacc.idl
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2005 Dmitry Timoshkov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+cpp_quote("#define NAVDIR_UP 1")
+cpp_quote("#define NAVDIR_DOWN 2")
+cpp_quote("#define NAVDIR_LEFT 3")
+cpp_quote("#define NAVDIR_RIGHT 4")
+cpp_quote("#define NAVDIR_NEXT 5")
+cpp_quote("#define NAVDIR_PREVIOUS 6")
+cpp_quote("#define NAVDIR_FIRSTCHILD 7")
+cpp_quote("#define NAVDIR_LASTCHILD 8")
+
+cpp_quote("#define ROLE_SYSTEM_TITLEBAR 1")
+cpp_quote("#define ROLE_SYSTEM_MENUBAR 2")
+cpp_quote("#define ROLE_SYSTEM_SCROLLBAR 3")
+cpp_quote("#define ROLE_SYSTEM_GRIP 4")
+cpp_quote("#define ROLE_SYSTEM_SOUND 5")
+cpp_quote("#define ROLE_SYSTEM_CURSOR 6")
+cpp_quote("#define ROLE_SYSTEM_CARET 7")
+cpp_quote("#define ROLE_SYSTEM_ALERT 8")
+cpp_quote("#define ROLE_SYSTEM_WINDOW 9")
+cpp_quote("#define ROLE_SYSTEM_CLIENT 10")
+cpp_quote("#define ROLE_SYSTEM_MENUPOPUP 11")
+cpp_quote("#define ROLE_SYSTEM_MENUITEM 12")
+cpp_quote("#define ROLE_SYSTEM_TOOLTIP 13")
+cpp_quote("#define ROLE_SYSTEM_APPLICATION 14")
+cpp_quote("#define ROLE_SYSTEM_DOCUMENT 15")
+cpp_quote("#define ROLE_SYSTEM_PANE 16")
+cpp_quote("#define ROLE_SYSTEM_CHART 17")
+cpp_quote("#define ROLE_SYSTEM_DIALOG 18")
+cpp_quote("#define ROLE_SYSTEM_BORDER 19")
+cpp_quote("#define ROLE_SYSTEM_GROUPING 20")
+cpp_quote("#define ROLE_SYSTEM_SEPARATOR 21")
+cpp_quote("#define ROLE_SYSTEM_TOOLBAR 22")
+cpp_quote("#define ROLE_SYSTEM_STATUSBAR 23")
+cpp_quote("#define ROLE_SYSTEM_TABLE 24")
+cpp_quote("#define ROLE_SYSTEM_COLUMNHEADER 25")
+cpp_quote("#define ROLE_SYSTEM_ROWHEADER 26")
+cpp_quote("#define ROLE_SYSTEM_COLUMN 27")
+cpp_quote("#define ROLE_SYSTEM_ROW 28")
+cpp_quote("#define ROLE_SYSTEM_CELL 29")
+cpp_quote("#define ROLE_SYSTEM_LINK 30")
+cpp_quote("#define ROLE_SYSTEM_HELPBALLOON 31")
+cpp_quote("#define ROLE_SYSTEM_CHARACTER 32")
+cpp_quote("#define ROLE_SYSTEM_LIST 33")
+cpp_quote("#define ROLE_SYSTEM_LISTITEM 34")
+cpp_quote("#define ROLE_SYSTEM_OUTLINE 35")
+cpp_quote("#define ROLE_SYSTEM_OUTLINEITEM 36")
+cpp_quote("#define ROLE_SYSTEM_PAGETAB 37")
+cpp_quote("#define ROLE_SYSTEM_PROPERTYPAGE 38")
+cpp_quote("#define ROLE_SYSTEM_INDICATOR 39")
+cpp_quote("#define ROLE_SYSTEM_GRAPHIC 40")
+cpp_quote("#define ROLE_SYSTEM_STATICTEXT 41")
+cpp_quote("#define ROLE_SYSTEM_TEXT 42")
+cpp_quote("#define ROLE_SYSTEM_PUSHBUTTON 43")
+cpp_quote("#define ROLE_SYSTEM_CHECKBUTTON 44")
+cpp_quote("#define ROLE_SYSTEM_RADIOBUTTON 45")
+cpp_quote("#define ROLE_SYSTEM_COMBOBOX 46")
+cpp_quote("#define ROLE_SYSTEM_DROPLIST 47")
+cpp_quote("#define ROLE_SYSTEM_PROGRESSBAR 48")
+cpp_quote("#define ROLE_SYSTEM_DIAL 49")
+cpp_quote("#define ROLE_SYSTEM_HOTKEYFIELD 50")
+cpp_quote("#define ROLE_SYSTEM_SLIDER 51")
+cpp_quote("#define ROLE_SYSTEM_SPINBUTTON 52")
+cpp_quote("#define ROLE_SYSTEM_DIAGRAM 53")
+cpp_quote("#define ROLE_SYSTEM_ANIMATION 54")
+cpp_quote("#define ROLE_SYSTEM_EQUATION 55")
+cpp_quote("#define ROLE_SYSTEM_BUTTONDROPDOWN 56")
+cpp_quote("#define ROLE_SYSTEM_BUTTONMENU 57")
+cpp_quote("#define ROLE_SYSTEM_BUTTONDROPDOWNGRID 58")
+cpp_quote("#define ROLE_SYSTEM_WHITESPACE 59")
+cpp_quote("#define ROLE_SYSTEM_PAGETABLIST 60")
+cpp_quote("#define ROLE_SYSTEM_CLOCK 61")
+cpp_quote("#define ROLE_SYSTEM_SPLITBUTTON 62")
+cpp_quote("#define ROLE_SYSTEM_IPADDRESS 63")
+cpp_quote("#define ROLE_SYSTEM_OUTLINEBUTTON 64")
+
+cpp_quote("#define SELFLAG_NONE 0x00")
+cpp_quote("#define SELFLAG_TAKEFOCUS 0x01")
+cpp_quote("#define SELFLAG_TAKESELECTION 0x02")
+cpp_quote("#define SELFLAG_EXTENDSELECTION 0x04")
+cpp_quote("#define SELFLAG_ADDSELECTION 0x08")
+cpp_quote("#define SELFLAG_REMOVESELECTION 0x10")
+cpp_quote("#define SELFLAG_VALID 0x1f")
+
+typedef GUID MSAAPROPID;
+
+typedef enum AnnoScope
+{
+ ANNO_THIS,
+ ANNO_CONTAINER
+} AnnoScope;
+
+[
+ local,
+ object,
+ uuid(618736e0-3c3d-11cf-810c-00aa00389b71),
+ pointer_default(unique)
+]
+interface IAccessible : IDispatch
+{
+ typedef [unique] IAccessible *LPACCESSIBLE;
+ const long DISPID_ACC_PARENT = -5000;
+ const long DISPID_ACC_CHILDCOUNT = -5001;
+ const long DISPID_ACC_CHILD = -5002;
+ const long DISPID_ACC_NAME = -5003;
+ const long DISPID_ACC_VALUE = -5004;
+ const long DISPID_ACC_DESCRIPTION= -5005;
+ const long DISPID_ACC_ROLE = -5006;
+ const long DISPID_ACC_STATE = -5007;
+ const long DISPID_ACC_HELP = -5008;
+ const long DISPID_ACC_HELPTOPIC = -5009;
+ const long DISPID_ACC_KEYBOARDSHORTCUT = -5010;
+ const long DISPID_ACC_FOCUS = -5011;
+ const long DISPID_ACC_SELECTION = -5012;
+ const long DISPID_ACC_DEFAULTACTION = -5013;
+ const long DISPID_ACC_SELECT = -5014;
+ const long DISPID_ACC_LOCATION = -5015;
+ const long DISPID_ACC_NAVIGATE = -5016;
+ const long DISPID_ACC_HITTEST = -5017;
+ const long DISPID_ACC_DODEFAULTACTION = -5018;
+
+ [hidden, propget, id(DISPID_ACC_PARENT)] HRESULT accParent([out, retval]IDispatch** ppdispParent);
+ [hidden, propget, id(DISPID_ACC_CHILDCOUNT)] HRESULT accChildCount([out, retval] long* pcountChildren);
+ [hidden, propget, id(DISPID_ACC_CHILD)] HRESULT accChild([in] VARIANT varChildID, [out, retval]IDispatch **ppdispChild);
+ [hidden, propget, id(DISPID_ACC_NAME)] HRESULT accName([in]VARIANT varID, [out, retval] BSTR* pszName);
+ [hidden, propget, id(DISPID_ACC_VALUE)] HRESULT accValue([in]VARIANT varID, [out, retval] BSTR* pszValue);
+ [hidden, propget, id(DISPID_ACC_DESCRIPTION)] HRESULT accDescription([in]VARIANT varID, [out, retval] BSTR* pszDescription);
+ [hidden, propget, id(DISPID_ACC_ROLE)] HRESULT accRole([in]VARIANT varID, [out, retval]VARIANT* pvarRole);
+ [hidden, propget, id(DISPID_ACC_STATE)] HRESULT accState([in]VARIANT varID, [out, retval]VARIANT* pvarState);
+ [hidden, propget, id(DISPID_ACC_HELP)] HRESULT accHelp([in]VARIANT varID, [out, retval]BSTR* pszHelp);
+ [hidden, propget, id(DISPID_ACC_HELPTOPIC)] HRESULT accHelpTopic([out]BSTR* pszHelpFile, [in]VARIANT varID, [out, retval] long* pidTopic);
+ [hidden, propget, id(DISPID_ACC_KEYBOARDSHORTCUT)] HRESULT accKeyboardShortcut([in]VARIANT varID, [out, retval] BSTR* pszKeyboardShortcut);
+ [hidden, propget, id(DISPID_ACC_FOCUS)] HRESULT accFocus([out, retval] VARIANT* pvarID);
+ [hidden, propget, id(DISPID_ACC_SELECTION)] HRESULT accSelection([out, retval] VARIANT* pvarID);
+ [hidden, propget, id(DISPID_ACC_DEFAULTACTION)] HRESULT accDefaultAction([in]VARIANT varID, [out, retval] BSTR* pszDefaultAction);
+
+ [hidden, id(DISPID_ACC_SELECT)] HRESULT accSelect([in]long flagsSelect, [in]VARIANT varID);
+ [hidden, id(DISPID_ACC_LOCATION)] HRESULT accLocation([out]long* pxLeft, [out]long* pyTop, [out]long* pcxWidth, [out]long* pcyHeight, [in]VARIANT varID);
+ [hidden, id(DISPID_ACC_NAVIGATE)] HRESULT accNavigate([in]long navDir, [in]VARIANT varStart, [out, retval] VARIANT* pvarEnd);
+ [hidden, id(DISPID_ACC_HITTEST)] HRESULT accHitTest([in]long xLeft, [in]long yTop, [out,retval] VARIANT* pvarID);
+ [hidden, id(DISPID_ACC_DODEFAULTACTION)] HRESULT accDoDefaultAction([in]VARIANT varID);
+
+ [hidden, propput, id(DISPID_ACC_NAME)] HRESULT accName([in]VARIANT varID, [in]BSTR pszName);
+ [hidden, propput, id(DISPID_ACC_VALUE)] HRESULT accValue([in]VARIANT varID, [out, retval]BSTR pszValue);
+}
+
+[
+ object,
+ uuid(03022430-ABC4-11d0-BDE2-00AA001A1953),
+ hidden,
+ oleautomation,
+ pointer_default(unique)
+]
+interface IAccessibleHandler : IUnknown
+{
+ typedef [unique] IAccessibleHandler *LPACCESSIBLEHANDLER;
+
+ HRESULT AccessibleObjectFromID( [in] long hwnd, [in] long lObjectID, [out] LPACCESSIBLE *pIAccessible );
+}
+
+[
+ object,
+ uuid(7852b78d-1cfd-41c1-a615-9c0c85960b5f),
+ pointer_default(unique)
+]
+interface IAccIdentity : IUnknown
+{
+ HRESULT GetIdentityString ([in] DWORD dwIDChild, [out] BYTE **ppIDString, [out] DWORD *pdwIDStringLen);
+}
+
+[
+ object,
+ uuid(76c0dbbb-15e0-4e7b-b61b-20eeea2001e0),
+ pointer_default(unique)
+]
+interface IAccPropServer: IUnknown
+{
+ HRESULT GetPropValue ([in] const BYTE *pIDString, [in] DWORD dwIDStringLen, [in] MSAAPROPID idProp,
+ [out] VARIANT *pvarValue, [out] BOOL *pfHasProp);
+}
+
+[
+ object,
+ uuid(6e26e776-04f0-495d-80e4-3330352e3169),
+ pointer_default(unique)
+]
+interface IAccPropServices : IUnknown
+{
+ HRESULT SetPropValue([in] const BYTE *pIDString, [in] DWORD dwIDStringLen, [in] MSAAPROPID idProp, [in] VARIANT var);
+
+ HRESULT SetPropServer([in] const BYTE * pIDString, [in] DWORD dwIDStringLen, [in] const MSAAPROPID* paProps,
+ [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope);
+
+ HRESULT ClearProps([in] const BYTE *pIDString, [in] DWORD dwIDStringLen, [in] const MSAAPROPID* paProps, [in] int cProps);
+
+ HRESULT SetHwndProp([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+ [in] MSAAPROPID idProp, [in] VARIANT var);
+
+ HRESULT SetHwndPropStr([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+ [in] MSAAPROPID idProp, [in] LPWSTR str);
+
+ HRESULT SetHwndPropServer([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+ [in] const MSAAPROPID* paProps, [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope);
+
+ HRESULT ClearHwndProps([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+ [in] const MSAAPROPID* paProps, [in] int cProps);
+
+ HRESULT ComposeHwndIdentityString([in] HWND hwnd, [in] DWORD idObject, [in] DWORD idChild,
+ [out] BYTE **ppIDString, [out] DWORD* pdwIDStringLen);
+
+ HRESULT DecomposeHwndIdentityString([in] const BYTE *pIDString, [in] DWORD dwIDStringLen,
+ [out] HWND* phwnd, [out] DWORD* pidObject, [out] DWORD* pidChild);
+
+ HRESULT SetHmenuProp([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] VARIANT var);
+
+ HRESULT SetHmenuPropStr([in] HMENU hmenu, [in] DWORD idChild, [in] MSAAPROPID idProp, [in] LPWSTR str);
+
+ HRESULT SetHmenuPropServer([in] HMENU hmenu, [in] DWORD idChild, [in] const MSAAPROPID* paProps,
+ [in] int cProps, [in] IAccPropServer* pServer, [in] AnnoScope AnnoScope);
+
+ HRESULT ClearHmenuProps([in] HMENU hmenu, [in] DWORD idChild, [in] const MSAAPROPID* paProps, [in] int cProps);
+
+ HRESULT ComposeHmenuIdentityString([in] HMENU hmenu, [in] DWORD idChild,
+ [out] BYTE **ppIDString, [out] DWORD *pdwIDStringLen);
+
+ HRESULT DecomposeHmenuIdentityString([in] const BYTE *pIDString, [in] DWORD dwIDStringLen,
+ [out] HMENU *phmenu, [out] DWORD *pidChild);
+}
+
+[
+ uuid(1ea4dbf0-3c3b-11cf-810c-00aa00389b71),
+ lcid(0),
+ version(1.1),
+ hidden
+]
+library Accessibility
+{
+ importlib ("stdole2.tlb");
+ interface IAccessible;
+ interface IAccessibleHandler;
+
+ interface IAccIdentity;
+ interface IAccPropServer;
+ interface IAccPropServices;
+
+ [
+ uuid(b5f8350b-0548-48b1-a6ee-88bd00b4a5e7)
+ ]
+ coclass CAccPropServices
+ {
+ interface IAccPropServices;
+ }
+};
+
+cpp_quote("DEFINE_GUID(LIBID_Accessibility, 0x1ea4dbf0, 0x3c3b, 0x11cf, 0x81, 0x0c, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);")
+cpp_quote("DEFINE_GUID(CLSID_AccPropServices, 0xb5f8350b, 0x0548, 0x48b1, 0xa6, 0xee, 0x88, 0xbd, 0x00, 0xb4, 0xa5, 0xe7);")
+cpp_quote("DEFINE_GUID(IIS_IsOleaccProxy, 0x902697fa, 0x80e4, 0x4560, 0x80, 0x2a, 0xa1, 0x3f, 0x22, 0xa6, 0x47, 0x09);")
+
+cpp_quote("LRESULT WINAPI LresultFromObject(REFIID,WPARAM,LPUNKNOWN);")
+cpp_quote("HRESULT WINAPI ObjectFromLresult(LRESULT,REFIID,WPARAM,void **);")
+cpp_quote("HRESULT WINAPI WindowFromAccessibleObject(IAccessible *,HWND *);")
+cpp_quote("HRESULT WINAPI AccessibleObjectFromWindow(HWND,DWORD,REFIID,void **);")
+cpp_quote("HRESULT WINAPI AccessibleObjectFromEvent(HWND,DWORD,DWORD,IAccessible **,VARIANT *);")
+cpp_quote("HRESULT WINAPI AccessibleObjectFromPoint(POINT,IAccessible **,VARIANT *);")
+cpp_quote("HRESULT WINAPI AccessibleChildren(IAccessible *,LONG,LONG,VARIANT *,LONG *);")
+
+cpp_quote("void WINAPI GetOleaccVersionInfo(DWORD *,DWORD *);")
+cpp_quote("HRESULT WINAPI CreateStdAccessibleObject(HWND,LONG,REFIID,void **);")
+cpp_quote("HRESULT WINAPI CreateStdAccessibleProxyA(HWND,LPCSTR,LONG,REFIID,void **);")
+cpp_quote("HRESULT WINAPI CreateStdAccessibleProxyW(HWND,LPCWSTR,LONG,REFIID,void **);")
+cpp_quote("#define CreateStdAccessibleProxy WINELIB_NAME_AW(CreateStdAccessibleProxy)")
+
+cpp_quote("UINT WINAPI GetRoleTextA(DWORD,LPSTR,UINT);")
+cpp_quote("UINT WINAPI GetRoleTextW(DWORD,LPWSTR,UINT);")
+cpp_quote("#define GetRoleText WINELIB_NAME_AW(GetRoleText)")
+cpp_quote("UINT WINAPI GetStateTextA(DWORD,LPSTR,UINT);")
+cpp_quote("UINT WINAPI GetStateTextW(DWORD,LPWSTR,UINT);")
+cpp_quote("#define GetStateText WINELIB_NAME_AW(GetStateText)")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h
new file mode 100644
index 00000000..4c0fb414
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleauto.h
@@ -0,0 +1,772 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLEAUTO_H
+#define __WINE_OLEAUTO_H
+
+#include <oaidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0);
+
+#define STDOLE_MAJORVERNUM 1
+#define STDOLE_MINORVERNUM 0
+#define STDOLE_LCID 0
+
+#define STDOLE2_MAJORVERNUM 2
+#define STDOLE2_MINORVERNUM 0
+#define STDOLE2_LCID 0
+
+ULONG WINAPI OaBuildVersion(void);
+
+/* BSTR functions */
+BSTR WINAPI SysAllocString(const OLECHAR*);
+BSTR WINAPI SysAllocStringByteLen(LPCSTR,UINT);
+BSTR WINAPI SysAllocStringLen(const OLECHAR*,UINT);
+void WINAPI SysFreeString(BSTR);
+INT WINAPI SysReAllocString(LPBSTR,const OLECHAR*);
+int WINAPI SysReAllocStringLen(BSTR*,const OLECHAR*,UINT);
+UINT WINAPI SysStringByteLen(BSTR);
+UINT WINAPI SysStringLen(BSTR);
+
+/* IErrorInfo helpers */
+HRESULT WINAPI SetErrorInfo(ULONG,IErrorInfo*);
+HRESULT WINAPI GetErrorInfo(ULONG,IErrorInfo**);
+HRESULT WINAPI CreateErrorInfo(ICreateErrorInfo**);
+
+/* SafeArray functions */
+SAFEARRAY* WINAPI SafeArrayCreate(VARTYPE,UINT,SAFEARRAYBOUND*);
+SAFEARRAY* WINAPI SafeArrayCreateEx(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID);
+SAFEARRAY* WINAPI SafeArrayCreateVector(VARTYPE,LONG,ULONG);
+SAFEARRAY* WINAPI SafeArrayCreateVectorEx(VARTYPE,LONG,ULONG,LPVOID);
+
+HRESULT WINAPI SafeArrayAllocDescriptor(UINT,SAFEARRAY**);
+HRESULT WINAPI SafeArrayAllocDescriptorEx(VARTYPE,UINT,SAFEARRAY**);
+HRESULT WINAPI SafeArrayAllocData(SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroyDescriptor(SAFEARRAY*);
+HRESULT WINAPI SafeArrayPutElement(SAFEARRAY*,LONG*,void*);
+HRESULT WINAPI SafeArrayGetElement(SAFEARRAY*,LONG*,void*);
+HRESULT WINAPI SafeArrayLock(SAFEARRAY*);
+HRESULT WINAPI SafeArrayUnlock(SAFEARRAY*);
+HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY*,UINT,LONG*);
+HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY*,UINT,LONG*);
+UINT WINAPI SafeArrayGetDim(SAFEARRAY*);
+UINT WINAPI SafeArrayGetElemsize(SAFEARRAY*);
+HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY*,VARTYPE*);
+HRESULT WINAPI SafeArrayAccessData(SAFEARRAY*,void**);
+HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY*);
+HRESULT WINAPI SafeArrayPtrOfIndex(SAFEARRAY*,LONG*,void **);
+HRESULT WINAPI SafeArrayCopyData(SAFEARRAY*,SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY*);
+HRESULT WINAPI SafeArrayDestroy(SAFEARRAY*);
+HRESULT WINAPI SafeArrayCopy(SAFEARRAY*,SAFEARRAY**);
+HRESULT WINAPI SafeArrayRedim(SAFEARRAY*,SAFEARRAYBOUND*);
+HRESULT WINAPI SafeArraySetRecordInfo(SAFEARRAY*,IRecordInfo*);
+HRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY*,IRecordInfo**);
+HRESULT WINAPI SafeArraySetIID(SAFEARRAY*,REFGUID);
+HRESULT WINAPI SafeArrayGetIID(SAFEARRAY*,GUID*);
+
+HRESULT WINAPI VectorFromBstr(BSTR,SAFEARRAY**);
+HRESULT WINAPI BstrFromVector(SAFEARRAY*,BSTR*);
+
+/* Object registration helpers */
+#define ACTIVEOBJECT_STRONG 0
+#define ACTIVEOBJECT_WEAK 1
+
+HRESULT WINAPI RegisterActiveObject(LPUNKNOWN,REFCLSID,DWORD,LPDWORD);
+HRESULT WINAPI RevokeActiveObject(DWORD,LPVOID);
+HRESULT WINAPI GetActiveObject(REFCLSID,LPVOID,LPUNKNOWN*);
+
+/* IRecordInfo helpers */
+HRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo*,IRecordInfo**);
+HRESULT WINAPI GetRecordInfoFromGuids(REFGUID,ULONG,ULONG,LCID,REFGUID,IRecordInfo**);
+
+/*
+ * Variants
+ */
+
+/* Macros for accessing the fields of the VARIANT type */
+#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
+#define V_UNION(A,B) ((A)->n1.n2.n3.B)
+#define V_VT(A) ((A)->n1.n2.vt)
+#else
+#define V_UNION(A,B) ((A)->B)
+#define V_VT(A) ((A)->vt)
+#endif
+
+#define V_ISBYREF(A) (V_VT(A) & VT_BYREF)
+#define V_ISARRAY(A) (V_VT(A) & VT_ARRAY)
+#define V_ISVECTOR(A) (V_VT(A) & VT_VECTOR)
+#define V_NONE(A) V_I2(A)
+
+#define V_ARRAY(A) V_UNION(A,parray)
+#define V_ARRAYREF(A) V_UNION(A,pparray)
+#define V_BOOL(A) V_UNION(A,boolVal)
+#define V_BOOLREF(A) V_UNION(A,pboolVal)
+#define V_BSTR(A) V_UNION(A,bstrVal)
+#define V_BSTRREF(A) V_UNION(A,pbstrVal)
+#define V_BYREF(A) V_UNION(A,byref)
+#define V_CY(A) V_UNION(A,cyVal)
+#define V_CYREF(A) V_UNION(A,pcyVal)
+#define V_DATE(A) V_UNION(A,date)
+#define V_DATEREF(A) V_UNION(A,pdate)
+#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
+#define V_DECIMAL(A) ((A)->n1.decVal)
+#else
+#define V_DECIMAL(A) ((A)->decVal)
+#endif
+#define V_DECIMALREF(A) V_UNION(A,pdecVal)
+#define V_DISPATCH(A) V_UNION(A,pdispVal)
+#define V_DISPATCHREF(A) V_UNION(A,ppdispVal)
+#define V_ERROR(A) V_UNION(A,scode)
+#define V_ERRORREF(A) V_UNION(A,pscode)
+#define V_I1(A) V_UNION(A,cVal)
+#define V_I1REF(A) V_UNION(A,pcVal)
+#define V_I2(A) V_UNION(A,iVal)
+#define V_I2REF(A) V_UNION(A,piVal)
+#define V_I4(A) V_UNION(A,lVal)
+#define V_I4REF(A) V_UNION(A,plVal)
+#define V_I8(A) V_UNION(A,llVal)
+#define V_I8REF(A) V_UNION(A,pllVal)
+#define V_INT(A) V_UNION(A,intVal)
+#define V_INTREF(A) V_UNION(A,pintVal)
+#ifdef _WIN64
+#define V_INT_PTR(A) V_I8(A)
+#define V_INT_PTRREF(A) V_I8REF(A)
+#else
+#define V_INT_PTR(A) V_I4(A)
+#define V_INT_PTRREF(A) V_I4REF(A)
+#endif
+#define V_R4(A) V_UNION(A,fltVal)
+#define V_R4REF(A) V_UNION(A,pfltVal)
+#define V_R8(A) V_UNION(A,dblVal)
+#define V_R8REF(A) V_UNION(A,pdblVal)
+#define V_UINT(A) V_UNION(A,uintVal)
+#define V_UINTREF(A) V_UNION(A,puintVal)
+#define V_UI1(A) V_UNION(A,bVal)
+#define V_UI1REF(A) V_UNION(A,pbVal)
+#define V_UI2(A) V_UNION(A,uiVal)
+#define V_UI2REF(A) V_UNION(A,puiVal)
+#define V_UI4(A) V_UNION(A,ulVal)
+#define V_UI4REF(A) V_UNION(A,pulVal)
+#define V_UI8(A) V_UNION(A,ullVal)
+#define V_UI8REF(A) V_UNION(A,pullVal)
+#ifdef _WIN64
+#define V_UINT_PTR(A) V_UI8(A)
+#define V_UINT_PTRREF(A) V_UI8REF(A)
+#else
+#define V_UINT_PTR(A) V_UI4(A)
+#define V_UINT_PTRREF(A) V_UI4REF(A)
+#endif
+#define V_UNKNOWN(A) V_UNION(A,punkVal)
+#define V_UNKNOWNREF(A) V_UNION(A,ppunkVal)
+#define V_VARIANTREF(A) V_UNION(A,pvarVal)
+
+void WINAPI VariantInit(VARIANT*);
+HRESULT WINAPI VariantClear(VARIANT*);
+HRESULT WINAPI VariantCopy(VARIANT*,VARIANT*);
+HRESULT WINAPI VariantCopyInd(VARIANT*,VARIANT*);
+HRESULT WINAPI VariantChangeType(VARIANT*,VARIANT*,USHORT,VARTYPE);
+HRESULT WINAPI VariantChangeTypeEx(VARIANT*,VARIANT*,LCID,USHORT,VARTYPE);
+
+/* VariantChangeType/VariantChangeTypeEx flags */
+#define VARIANT_NOVALUEPROP 0x01 /* Don't get the default value property from IDispatch */
+#define VARIANT_ALPHABOOL 0x02 /* Coerce to "True"|"False" instead of "-1"|"0" */
+#define VARIANT_NOUSEROVERRIDE 0x04 /* Pass LOCALE_NOUSEROVERRIDE to low level conversions */
+#define VARIANT_CALENDAR_HIJRI 0x08 /* Use the Hijri calendar */
+#define VARIANT_LOCALBOOL 0x10 /* Like VARIANT_ALPHABOOL, but use localised text */
+#define VARIANT_CALENDAR_THAI 0x20 /* Use the Thai buddhist calendar */
+#define VARIANT_CALENDAR_GREGORIAN 0x40 /* Use the Gregorian calendar */
+#define VARIANT_USE_NLS 0x80 /* Format result using NLS calls */
+
+/*
+ * Low level Variant coercion functions
+ */
+
+#define VT_HARDTYPE VT_RESERVED /* Don't coerce this variant when comparing it to others */
+
+/* Flags for low level coercions. LOCALE_ flags can also be passed */
+#define VAR_TIMEVALUEONLY 0x001 /* Ignore date portion of VT_DATE */
+#define VAR_DATEVALUEONLY 0x002 /* Ignore time portion of VT_DATE */
+#define VAR_VALIDDATE 0x004
+#define VAR_CALENDAR_HIJRI 0x008 /* Use the Hijri calendar */
+#define VAR_LOCALBOOL 0x010 /* VT_BOOL<->VT_BSTR: Use localised boolean text */
+#define VAR_FORMAT_NOSUBSTITUTE 0x020 /* Don't change format strings for un-coercable types */
+#define VAR_FOURDIGITYEARS 0x040 /* Always print years with 4 digits */
+#define VAR_CALENDAR_THAI 0x080 /* Use the Thai buddhist calendar */
+#define VAR_CALENDAR_GREGORIAN 0x100 /* Use the Gregorian calendar */
+
+#ifndef LOCALE_USE_NLS
+/* This is missing from native winnls.h, but may be added at some point */
+#define LOCALE_USE_NLS 0x10000000
+#endif
+
+#define VTDATEGRE_MIN -657434 /* Minimum possible Gregorian date: 1/1/100 */
+#define VTDATEGRE_MAX 2958465 /* Maximum possible Gregorian date: 31/12/9999 */
+
+HRESULT WINAPI VarUI1FromI2(SHORT,BYTE*);
+HRESULT WINAPI VarUI1FromI4(LONG,BYTE*);
+HRESULT WINAPI VarUI1FromI8(LONG64,BYTE*);
+HRESULT WINAPI VarUI1FromR4(FLOAT,BYTE*);
+HRESULT WINAPI VarUI1FromR8(DOUBLE,BYTE*);
+HRESULT WINAPI VarUI1FromDate(DATE,BYTE*);
+HRESULT WINAPI VarUI1FromBool(VARIANT_BOOL,BYTE*);
+HRESULT WINAPI VarUI1FromI1(signed char,BYTE*);
+HRESULT WINAPI VarUI1FromUI2(USHORT,BYTE*);
+HRESULT WINAPI VarUI1FromUI4(ULONG,BYTE*);
+HRESULT WINAPI VarUI1FromUI8(ULONG64,BYTE*);
+HRESULT WINAPI VarUI1FromStr(OLECHAR*,LCID,ULONG,BYTE*);
+HRESULT WINAPI VarUI1FromCy(CY,BYTE*);
+HRESULT WINAPI VarUI1FromDec(DECIMAL*,BYTE*);
+HRESULT WINAPI VarUI1FromDisp(IDispatch*,LCID,BYTE*);
+
+HRESULT WINAPI VarI2FromUI1(BYTE,SHORT*);
+HRESULT WINAPI VarI2FromI4(LONG,SHORT*);
+HRESULT WINAPI VarI2FromI8(LONG64,SHORT*);
+HRESULT WINAPI VarI2FromR4(FLOAT,SHORT*);
+HRESULT WINAPI VarI2FromR8(DOUBLE,SHORT*);
+HRESULT WINAPI VarI2FromDate(DATE,SHORT*);
+HRESULT WINAPI VarI2FromBool(VARIANT_BOOL,SHORT*);
+HRESULT WINAPI VarI2FromI1(signed char,SHORT*);
+HRESULT WINAPI VarI2FromUI2(USHORT,SHORT*);
+HRESULT WINAPI VarI2FromUI4(ULONG,SHORT*);
+HRESULT WINAPI VarI2FromUI8(ULONG64,SHORT*);
+HRESULT WINAPI VarI2FromStr(OLECHAR*,LCID,ULONG,SHORT*);
+HRESULT WINAPI VarI2FromCy(CY,SHORT*);
+HRESULT WINAPI VarI2FromDec(DECIMAL*,SHORT*);
+HRESULT WINAPI VarI2FromDisp(IDispatch*,LCID,SHORT*);
+
+HRESULT WINAPI VarI4FromUI1(BYTE,LONG*);
+HRESULT WINAPI VarI4FromI2(SHORT,LONG*);
+HRESULT WINAPI VarI4FromI8(LONG64,LONG*);
+HRESULT WINAPI VarI4FromR4(FLOAT,LONG*);
+HRESULT WINAPI VarI4FromR8(DOUBLE,LONG*);
+HRESULT WINAPI VarI4FromDate(DATE,LONG*);
+HRESULT WINAPI VarI4FromBool(VARIANT_BOOL,LONG*);
+HRESULT WINAPI VarI4FromI1(signed char,LONG*);
+HRESULT WINAPI VarI4FromUI2(USHORT,LONG*);
+HRESULT WINAPI VarI4FromUI4(ULONG,LONG*);
+HRESULT WINAPI VarI4FromUI8(ULONG64,LONG*);
+HRESULT WINAPI VarI4FromStr(OLECHAR*,LCID,ULONG,LONG*);
+HRESULT WINAPI VarI4FromCy(CY,LONG*);
+HRESULT WINAPI VarI4FromDec(DECIMAL*,LONG*);
+HRESULT WINAPI VarI4FromDisp(IDispatch*,LCID,LONG*);
+
+HRESULT WINAPI VarI8FromUI1(BYTE,LONG64*);
+HRESULT WINAPI VarI8FromI2(SHORT,LONG64*);
+HRESULT WINAPI VarI8FromI4(LONG,LONG64*);
+HRESULT WINAPI VarI8FromR4(FLOAT,LONG64*);
+HRESULT WINAPI VarI8FromR8(DOUBLE,LONG64*);
+HRESULT WINAPI VarI8FromDate(DATE,LONG64*);
+HRESULT WINAPI VarI8FromStr(OLECHAR*,LCID,ULONG,LONG64*);
+HRESULT WINAPI VarI8FromBool(VARIANT_BOOL,LONG64*);
+HRESULT WINAPI VarI8FromI1(signed char,LONG64*);
+HRESULT WINAPI VarI8FromUI2(USHORT,LONG64*);
+HRESULT WINAPI VarI8FromUI4(ULONG,LONG64*);
+HRESULT WINAPI VarI8FromUI8(ULONG64,LONG64*);
+HRESULT WINAPI VarI8FromDec(DECIMAL *pdecIn,LONG64*);
+HRESULT WINAPI VarI8FromInt(INT intIn,LONG64*);
+HRESULT WINAPI VarI8FromCy(CY,LONG64*);
+HRESULT WINAPI VarI8FromDisp(IDispatch*,LCID,LONG64*);
+
+HRESULT WINAPI VarR4FromUI1(BYTE,FLOAT*);
+HRESULT WINAPI VarR4FromI2(SHORT,FLOAT*);
+HRESULT WINAPI VarR4FromI4(LONG,FLOAT*);
+HRESULT WINAPI VarR4FromI8(LONG64,FLOAT*);
+HRESULT WINAPI VarR4FromR8(DOUBLE,FLOAT*);
+HRESULT WINAPI VarR4FromDate(DATE,FLOAT*);
+HRESULT WINAPI VarR4FromBool(VARIANT_BOOL,FLOAT*);
+HRESULT WINAPI VarR4FromI1(signed char,FLOAT*);
+HRESULT WINAPI VarR4FromUI2(USHORT,FLOAT*);
+HRESULT WINAPI VarR4FromUI4(ULONG,FLOAT*);
+HRESULT WINAPI VarR4FromUI8(ULONG64,FLOAT*);
+HRESULT WINAPI VarR4FromStr(OLECHAR*,LCID,ULONG,FLOAT*);
+HRESULT WINAPI VarR4FromCy(CY,FLOAT*);
+HRESULT WINAPI VarR4FromDec(DECIMAL*,FLOAT*);
+HRESULT WINAPI VarR4FromDisp(IDispatch*,LCID,FLOAT*);
+
+HRESULT WINAPI VarR8FromUI1(BYTE,double*);
+HRESULT WINAPI VarR8FromI2(SHORT,double*);
+HRESULT WINAPI VarR8FromI4(LONG,double*);
+HRESULT WINAPI VarR8FromI8(LONG64,double*);
+HRESULT WINAPI VarR8FromR4(FLOAT,double*);
+HRESULT WINAPI VarR8FromDate(DATE,double*);
+HRESULT WINAPI VarR8FromBool(VARIANT_BOOL,double*);
+HRESULT WINAPI VarR8FromI1(signed char,double*);
+HRESULT WINAPI VarR8FromUI2(USHORT,double*);
+HRESULT WINAPI VarR8FromUI4(ULONG,double*);
+HRESULT WINAPI VarR8FromUI8(ULONG64,double*);
+HRESULT WINAPI VarR8FromStr(OLECHAR*,LCID,ULONG,double*);
+HRESULT WINAPI VarR8FromCy(CY,double*);
+HRESULT WINAPI VarR8FromDec(const DECIMAL*,double*);
+HRESULT WINAPI VarR8FromDisp(IDispatch*,LCID,double*);
+
+HRESULT WINAPI VarDateFromUI1(BYTE,DATE*);
+HRESULT WINAPI VarDateFromI2(SHORT,DATE*);
+HRESULT WINAPI VarDateFromI4(LONG,DATE*);
+HRESULT WINAPI VarDateFromI8(LONG64,DATE*);
+HRESULT WINAPI VarDateFromR4(FLOAT,DATE*);
+HRESULT WINAPI VarDateFromR8(DOUBLE,DATE*);
+HRESULT WINAPI VarDateFromStr(OLECHAR*,LCID,ULONG,DATE*);
+HRESULT WINAPI VarDateFromI1(signed char,DATE*);
+HRESULT WINAPI VarDateFromUI2(USHORT,DATE*);
+HRESULT WINAPI VarDateFromUI4(ULONG,DATE*);
+HRESULT WINAPI VarDateFromUI8(ULONG64,DATE*);
+HRESULT WINAPI VarDateFromBool(VARIANT_BOOL,DATE*);
+HRESULT WINAPI VarDateFromCy(CY,DATE*);
+HRESULT WINAPI VarDateFromDec(DECIMAL*,DATE*);
+HRESULT WINAPI VarDateFromDisp(IDispatch*,LCID,DATE*);
+
+HRESULT WINAPI VarCyFromUI1(BYTE,CY*);
+HRESULT WINAPI VarCyFromI2(SHORT sIn,CY*);
+HRESULT WINAPI VarCyFromI4(LONG,CY*);
+HRESULT WINAPI VarCyFromI8(LONG64,CY*);
+HRESULT WINAPI VarCyFromR4(FLOAT,CY*);
+HRESULT WINAPI VarCyFromR8(DOUBLE,CY*);
+HRESULT WINAPI VarCyFromDate(DATE,CY*);
+HRESULT WINAPI VarCyFromStr(OLECHAR*,LCID,ULONG,CY*);
+HRESULT WINAPI VarCyFromBool(VARIANT_BOOL,CY*);
+HRESULT WINAPI VarCyFromI1(signed char,CY*);
+HRESULT WINAPI VarCyFromUI2(USHORT,CY*);
+HRESULT WINAPI VarCyFromUI4(ULONG,CY*);
+HRESULT WINAPI VarCyFromUI8(ULONG64,CY*);
+HRESULT WINAPI VarCyFromDec(DECIMAL*,CY*);
+HRESULT WINAPI VarCyFromDisp(IDispatch*,LCID,CY*);
+
+HRESULT WINAPI VarBstrFromUI1(BYTE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI2(SHORT,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI4(LONG,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI8(LONG64,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromR4(FLOAT,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromR8(DOUBLE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromDate(DATE,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromI1(signed char,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromUI2(USHORT,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromUI8(ULONG64,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromUI4(ULONG,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromCy(CY,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromDec(DECIMAL*,LCID,ULONG,BSTR*);
+HRESULT WINAPI VarBstrFromDisp(IDispatch*,LCID,ULONG,BSTR*);
+
+HRESULT WINAPI VarBoolFromUI1(BYTE,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI2(SHORT,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI4(LONG,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI8(LONG64,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromR4(FLOAT,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromR8(DOUBLE,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDate(DATE,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromStr(OLECHAR*,LCID,ULONG,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromI1(signed char,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI2(USHORT,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI4(ULONG,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromUI8(ULONG64,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromCy(CY,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDec(DECIMAL*,VARIANT_BOOL*);
+HRESULT WINAPI VarBoolFromDisp(IDispatch*,LCID,VARIANT_BOOL*);
+
+HRESULT WINAPI VarI1FromUI1(BYTE,signed char*);
+HRESULT WINAPI VarI1FromI2(SHORT,signed char*);
+HRESULT WINAPI VarI1FromI4(LONG,signed char*);
+HRESULT WINAPI VarI1FromI8(LONG64,signed char*);
+HRESULT WINAPI VarI1FromR4(FLOAT,signed char*);
+HRESULT WINAPI VarI1FromR8(DOUBLE,signed char*);
+HRESULT WINAPI VarI1FromDate(DATE,signed char*);
+HRESULT WINAPI VarI1FromStr(OLECHAR*,LCID,ULONG,signed char*);
+HRESULT WINAPI VarI1FromBool(VARIANT_BOOL,signed char*);
+HRESULT WINAPI VarI1FromUI2(USHORT,signed char*);
+HRESULT WINAPI VarI1FromUI4(ULONG,signed char*);
+HRESULT WINAPI VarI1FromUI8(ULONG64,signed char*);
+HRESULT WINAPI VarI1FromCy(CY,signed char*);
+HRESULT WINAPI VarI1FromDec(DECIMAL*,signed char*);
+HRESULT WINAPI VarI1FromDisp(IDispatch*,LCID,signed char*);
+
+HRESULT WINAPI VarUI2FromUI1(BYTE,USHORT*);
+HRESULT WINAPI VarUI2FromI2(SHORT,USHORT*);
+HRESULT WINAPI VarUI2FromI4(LONG,USHORT*);
+HRESULT WINAPI VarUI2FromI8(LONG64,USHORT*);
+HRESULT WINAPI VarUI2FromR4(FLOAT,USHORT*);
+HRESULT WINAPI VarUI2FromR8(DOUBLE,USHORT*);
+HRESULT WINAPI VarUI2FromDate(DATE,USHORT*);
+HRESULT WINAPI VarUI2FromStr(OLECHAR*,LCID,ULONG,USHORT*);
+HRESULT WINAPI VarUI2FromBool(VARIANT_BOOL,USHORT*);
+HRESULT WINAPI VarUI2FromI1(signed char,USHORT*);
+HRESULT WINAPI VarUI2FromUI4(ULONG,USHORT*);
+HRESULT WINAPI VarUI2FromUI8(ULONG64,USHORT*);
+HRESULT WINAPI VarUI2FromCy(CY,USHORT*);
+HRESULT WINAPI VarUI2FromDec(DECIMAL*,USHORT*);
+HRESULT WINAPI VarUI2FromDisp(IDispatch*,LCID,USHORT*);
+
+HRESULT WINAPI VarUI4FromStr(OLECHAR*,LCID,ULONG,ULONG*);
+HRESULT WINAPI VarUI4FromUI1(BYTE,ULONG*);
+HRESULT WINAPI VarUI4FromI2(SHORT,ULONG*);
+HRESULT WINAPI VarUI4FromI4(LONG,ULONG*);
+HRESULT WINAPI VarUI4FromI8(LONG64,ULONG*);
+HRESULT WINAPI VarUI4FromR4(FLOAT,ULONG*);
+HRESULT WINAPI VarUI4FromR8(DOUBLE,ULONG*);
+HRESULT WINAPI VarUI4FromDate(DATE,ULONG*);
+HRESULT WINAPI VarUI4FromBool(VARIANT_BOOL,ULONG*);
+HRESULT WINAPI VarUI4FromI1(signed char,ULONG*);
+HRESULT WINAPI VarUI4FromUI2(USHORT,ULONG*);
+HRESULT WINAPI VarUI4FromUI8(ULONG64,ULONG*);
+HRESULT WINAPI VarUI4FromCy(CY,ULONG*);
+HRESULT WINAPI VarUI4FromDec(DECIMAL*,ULONG*);
+HRESULT WINAPI VarUI4FromDisp(IDispatch*,LCID,ULONG*);
+
+HRESULT WINAPI VarUI8FromUI1(BYTE,ULONG64*);
+HRESULT WINAPI VarUI8FromI2(SHORT,ULONG64*);
+HRESULT WINAPI VarUI8FromI4(LONG,ULONG64*);
+HRESULT WINAPI VarUI8FromI8(LONG64,ULONG64*);
+HRESULT WINAPI VarUI8FromR4(FLOAT,ULONG64*);
+HRESULT WINAPI VarUI8FromR8(DOUBLE,ULONG64*);
+HRESULT WINAPI VarUI8FromDate(DATE,ULONG64*);
+HRESULT WINAPI VarUI8FromStr(OLECHAR*,LCID,ULONG,ULONG64*);
+HRESULT WINAPI VarUI8FromBool(VARIANT_BOOL,ULONG64*);
+HRESULT WINAPI VarUI8FromI1(signed char,ULONG64*);
+HRESULT WINAPI VarUI8FromUI2(USHORT,ULONG64*);
+HRESULT WINAPI VarUI8FromUI4(ULONG,ULONG64*);
+HRESULT WINAPI VarUI8FromDec(DECIMAL*,ULONG64*);
+HRESULT WINAPI VarUI8FromInt(INT,ULONG64*);
+HRESULT WINAPI VarUI8FromCy(CY,ULONG64*);
+HRESULT WINAPI VarUI8FromDisp(IDispatch*,LCID,ULONG64*);
+
+HRESULT WINAPI VarDecFromUI1(BYTE,DECIMAL*);
+HRESULT WINAPI VarDecFromI2(SHORT,DECIMAL*);
+HRESULT WINAPI VarDecFromI4(LONG,DECIMAL*);
+HRESULT WINAPI VarDecFromI8(LONG64,DECIMAL*);
+HRESULT WINAPI VarDecFromR4(FLOAT,DECIMAL*);
+HRESULT WINAPI VarDecFromR8(DOUBLE,DECIMAL*);
+HRESULT WINAPI VarDecFromDate(DATE,DECIMAL*);
+HRESULT WINAPI VarDecFromStr(OLECHAR*,LCID,ULONG,DECIMAL*);
+HRESULT WINAPI VarDecFromBool(VARIANT_BOOL,DECIMAL*);
+HRESULT WINAPI VarDecFromI1(signed char,DECIMAL*);
+HRESULT WINAPI VarDecFromUI2(USHORT,DECIMAL*);
+HRESULT WINAPI VarDecFromUI4(ULONG,DECIMAL*);
+HRESULT WINAPI VarDecFromUI8(ULONG64,DECIMAL*);
+HRESULT WINAPI VarDecFromCy(CY,DECIMAL*);
+HRESULT WINAPI VarDecFromDisp(IDispatch*,LCID,DECIMAL*);
+
+#define VarUI4FromUI4( in,pOut ) ( *(pOut) = (in) )
+#define VarI4FromI4( in,pOut ) ( *(pOut) = (in) )
+
+#define VarUI1FromInt VarUI1FromI4
+#define VarUI1FromUint VarUI1FromUI4
+#define VarI2FromInt VarI2FromI4
+#define VarI2FromUint VarI2FromUI4
+#define VarI4FromInt VarI4FromI4
+#define VarI4FromUint VarI4FromUI4
+#define VarI8FromInt VarI8FromI4
+#define VarI8FromUint VarI8FromUI4
+#define VarR4FromInt VarR4FromI4
+#define VarR4FromUint VarR4FromUI4
+#define VarR8FromInt VarR8FromI4
+#define VarR8FromUint VarR8FromUI4
+#define VarDateFromInt VarDateFromI4
+#define VarDateFromUint VarDateFromUI4
+#define VarCyFromInt VarCyFromI4
+#define VarCyFromUint VarCyFromUI4
+#define VarBstrFromInt VarBstrFromI4
+#define VarBstrFromUint VarBstrFromUI4
+#define VarBoolFromInt VarBoolFromI4
+#define VarBoolFromUint VarBoolFromUI4
+#define VarI1FromInt VarI1FromI4
+#define VarI1FromUint VarI1FromUI4
+#define VarUI2FromInt VarUI2FromI4
+#define VarUI2FromUint VarUI2FromUI4
+#define VarUI4FromInt VarUI4FromI4
+#define VarUI4FromUint VarUI4FromUI4
+#define VarUI8FromInt VarUI8FromI4
+#define VarUI8FromUint VarUI8FromUI4
+#define VarDecFromInt VarDecFromI4
+#define VarDecFromUint VarDecFromUI4
+#define VarIntFromUI1 VarI4FromUI1
+#define VarIntFromI2 VarI4FromI2
+#define VarIntFromI4 VarI4FromI4
+#define VarIntFromI8 VarI4FromI8
+#define VarIntFromR4 VarI4FromR4
+#define VarIntFromR8 VarI4FromR8
+#define VarIntFromDate VarI4FromDate
+#define VarIntFromCy VarI4FromCy
+#define VarIntFromStr VarI4FromStr
+#define VarIntFromDisp VarI4FromDisp
+#define VarIntFromBool VarI4FromBool
+#define VarIntFromI1 VarI4FromI1
+#define VarIntFromUI2 VarI4FromUI2
+#define VarIntFromUI4 VarI4FromUI4
+#define VarIntFromUI8 VarI4FromUI8
+#define VarIntFromDec VarI4FromDec
+#define VarIntFromUint VarI4FromUI4
+#define VarUintFromUI1 VarUI4FromUI1
+#define VarUintFromI2 VarUI4FromI2
+#define VarUintFromI4 VarUI4FromI4
+#define VarUintFromI8 VarUI4FromI8
+#define VarUintFromR4 VarUI4FromR4
+#define VarUintFromR8 VarUI4FromR8
+#define VarUintFromDate VarUI4FromDate
+#define VarUintFromCy VarUI4FromCy
+#define VarUintFromStr VarUI4FromStr
+#define VarUintFromDisp VarUI4FromDisp
+#define VarUintFromBool VarUI4FromBool
+#define VarUintFromI1 VarUI4FromI1
+#define VarUintFromUI2 VarUI4FromUI2
+#define VarUintFromUI4 VarUI4FromUI4
+#define VarUintFromUI8 VarUI4FromUI8
+#define VarUintFromDec VarUI4FromDec
+#define VarUintFromInt VarUI4FromI4
+
+/*
+ * Variant Math operations
+ */
+#define VARCMP_LT 0
+#define VARCMP_EQ 1
+#define VARCMP_GT 2
+#define VARCMP_NULL 3
+
+HRESULT WINAPI VarR4CmpR8(float,double);
+
+HRESULT WINAPI VarR8Pow(double,double,double*);
+HRESULT WINAPI VarR8Round(double,int,double*);
+
+HRESULT WINAPI VarDecAbs(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecAdd(const DECIMAL*,const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecCmp(const DECIMAL*,const DECIMAL*);
+HRESULT WINAPI VarDecCmpR8(const DECIMAL*,DOUBLE);
+HRESULT WINAPI VarDecDiv(const DECIMAL*,const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecFix(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecInt(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecMul(const DECIMAL*,const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecNeg(const DECIMAL*,DECIMAL*);
+HRESULT WINAPI VarDecRound(const DECIMAL*,int,DECIMAL*);
+HRESULT WINAPI VarDecSub(const DECIMAL*,const DECIMAL*,DECIMAL*);
+
+HRESULT WINAPI VarCyAbs(const CY,CY*);
+HRESULT WINAPI VarCyAdd(const CY,const CY,CY*);
+HRESULT WINAPI VarCyCmp(const CY,const CY);
+HRESULT WINAPI VarCyCmpR8(const CY,DOUBLE);
+HRESULT WINAPI VarCyFix(const CY,CY*);
+HRESULT WINAPI VarCyInt(const CY,CY*);
+HRESULT WINAPI VarCyMul(const CY,CY,CY*);
+HRESULT WINAPI VarCyMulI4(const CY,LONG,CY*);
+HRESULT WINAPI VarCyMulI8(const CY,LONG64,CY*);
+HRESULT WINAPI VarCyNeg(const CY,CY*);
+HRESULT WINAPI VarCyRound(const CY,INT,CY*);
+HRESULT WINAPI VarCySub(const CY,const CY,CY*);
+
+HRESULT WINAPI VarAdd(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarAnd(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarCat(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarDiv(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarEqv(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarIdiv(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarImp(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarMod(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarMul(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarOr(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarPow(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarSub(LPVARIANT,LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarXor(LPVARIANT,LPVARIANT,LPVARIANT);
+
+HRESULT WINAPI VarAbs(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarFix(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarInt(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarNeg(LPVARIANT,LPVARIANT);
+HRESULT WINAPI VarNot(LPVARIANT,LPVARIANT);
+
+HRESULT WINAPI VarRound(LPVARIANT,int,LPVARIANT);
+
+HRESULT WINAPI VarCmp(LPVARIANT,LPVARIANT,LCID,ULONG);
+
+HRESULT WINAPI VarBstrCmp(BSTR,BSTR,LCID,ULONG);
+HRESULT WINAPI VarBstrCat(BSTR,BSTR,BSTR*);
+
+
+typedef struct {
+ SYSTEMTIME st;
+ USHORT wDayOfYear;
+} UDATE;
+
+typedef struct
+{
+ INT cDig; /* Number of parsed digits */
+ ULONG dwInFlags; /* Acceptable state of the input string (NUMPRS_ flags) */
+ ULONG dwOutFlags; /* Parsed state of the output string (NUMPRS_ flags) */
+ INT cchUsed; /* Number of characters parsed from input string */
+ INT nBaseShift; /* Base of the number (but apparently unused) */
+ INT nPwr10; /* Scale of the number in powers of 10 */
+} NUMPARSE;
+
+#define NUMPRS_LEADING_WHITE 0x00001 /* Leading whitespace */
+#define NUMPRS_TRAILING_WHITE 0x00002 /* Trailing whitespace */
+#define NUMPRS_LEADING_PLUS 0x00004 /* Leading '+' sign */
+#define NUMPRS_TRAILING_PLUS 0x00008 /* Trailing '+' sign */
+#define NUMPRS_LEADING_MINUS 0x00010 /* Leading '-' sign */
+#define NUMPRS_TRAILING_MINUS 0x00020 /* Trailing '-' sign */
+#define NUMPRS_HEX_OCT 0x00040 /* Octal number (with a leading 0) */
+#define NUMPRS_PARENS 0x00080 /* Parentheses for negative numbers */
+#define NUMPRS_DECIMAL 0x00100 /* Decimal separator */
+#define NUMPRS_THOUSANDS 0x00200 /* Thousands separator */
+#define NUMPRS_CURRENCY 0x00400 /* Currency symbol */
+#define NUMPRS_EXPONENT 0x00800 /* Exponent (e.g. "e-14") */
+#define NUMPRS_USE_ALL 0x01000 /* Parse the entire string */
+#define NUMPRS_STD 0x01FFF /* Standard flags for internal coercions (All of the above) */
+#define NUMPRS_NEG 0x10000 /* Number is negative (dwOutFlags only) */
+#define NUMPRS_INEXACT 0x20000 /* Number is represented inexactly (dwOutFlags only) */
+
+#define VTBIT_I1 (1 << VT_I1)
+#define VTBIT_UI1 (1 << VT_UI1)
+#define VTBIT_I2 (1 << VT_I2)
+#define VTBIT_UI2 (1 << VT_UI2)
+#define VTBIT_I4 (1 << VT_I4)
+#define VTBIT_UI4 (1 << VT_UI4)
+#define VTBIT_I8 (1 << VT_I8)
+#define VTBIT_UI8 (1 << VT_UI8)
+#define VTBIT_R4 (1 << VT_R4)
+#define VTBIT_R8 (1 << VT_R8)
+#define VTBIT_CY (1 << VT_CY)
+#define VTBIT_DECIMAL (1 << VT_DECIMAL)
+
+HRESULT WINAPI VarParseNumFromStr(OLECHAR*,LCID,ULONG,NUMPARSE*,BYTE*);
+HRESULT WINAPI VarNumFromParseNum(NUMPARSE*,BYTE*,ULONG,VARIANT*);
+
+INT WINAPI DosDateTimeToVariantTime(USHORT,USHORT,double*);
+INT WINAPI VariantTimeToDosDateTime(double,USHORT*,USHORT*);
+
+INT WINAPI VariantTimeToSystemTime(DOUBLE,LPSYSTEMTIME);
+INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME,double*);
+
+HRESULT WINAPI VarDateFromUdate(UDATE*,ULONG,DATE*);
+HRESULT WINAPI VarDateFromUdateEx(UDATE*,LCID,ULONG,DATE*);
+HRESULT WINAPI VarUdateFromDate(DATE,ULONG,UDATE*);
+
+/* Variant formatting */
+HRESULT WINAPI VarWeekdayName(int,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarMonthName(int,int,ULONG,BSTR*);
+HRESULT WINAPI GetAltMonthNames(LCID,LPOLESTR**);
+
+HRESULT WINAPI VarFormat(LPVARIANT,LPOLESTR,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatCurrency(LPVARIANT,int,int,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatDateTime(LPVARIANT,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatNumber(LPVARIANT,int,int,int,int,ULONG,BSTR*);
+HRESULT WINAPI VarFormatPercent(LPVARIANT,int,int,int,int,ULONG,BSTR*);
+
+HRESULT WINAPI VarFormatFromTokens(LPVARIANT,LPOLESTR,LPBYTE,ULONG,BSTR*,LCID);
+HRESULT WINAPI VarTokenizeFormatString(LPOLESTR,LPBYTE,int,int,int,LCID,int*);
+
+
+/*
+ * IDispatch types and helper functions
+ */
+
+/* A structure describing a single parameter to a com object method. */
+typedef struct tagPARAMDATA
+{
+ OLECHAR *szName; /* Name of Parameter */
+ VARTYPE vt; /* Type of Parameter */
+} PARAMDATA, *LPPARAMDATA;
+
+/* A structure describing a single method of a com object. */
+typedef struct tagMETHODDATA
+{
+ OLECHAR *szName; /* Name of method */
+ PARAMDATA *ppdata; /* Parameters of the method */
+ DISPID dispid; /* Id of the method */
+ UINT iMeth; /* Vtable index of the method */
+ CALLCONV cc; /* Calling convention of the method */
+ UINT cArgs; /* Number of parameters in the method */
+ WORD wFlags; /* Type of the method (DISPATCH_ flags) */
+ VARTYPE vtReturn; /* Type of the return value */
+} METHODDATA, *LPMETHODDATA;
+
+/* Structure describing a single com object */
+typedef struct tagINTERFACEDATA
+{
+ METHODDATA *pmethdata; /* Methods of the object */
+ UINT cMembers; /* Number of methods in the object */
+} INTERFACEDATA, *LPINTERFACEDATA;
+
+typedef enum tagREGKIND
+{
+ REGKIND_DEFAULT,
+ REGKIND_REGISTER,
+ REGKIND_NONE
+} REGKIND;
+
+HRESULT WINAPI DispGetParam(DISPPARAMS*,UINT,VARTYPE,VARIANT*,UINT*);
+HRESULT WINAPI DispGetIDsOfNames(ITypeInfo*,OLECHAR**,UINT,DISPID*);
+HRESULT WINAPI DispInvoke(void*,ITypeInfo*,DISPID,WORD,DISPPARAMS*,VARIANT*,
+ EXCEPINFO*,UINT*);
+HRESULT WINAPI CreateDispTypeInfo(INTERFACEDATA*,LCID,ITypeInfo**);
+HRESULT WINAPI CreateStdDispatch(IUnknown*,void*,ITypeInfo*,IUnknown**);
+HRESULT WINAPI DispCallFunc(void*,ULONG_PTR,CALLCONV,VARTYPE,UINT,VARTYPE*,
+ VARIANTARG**,VARIANT*);
+
+
+/*
+ * TypeLib API
+ */
+
+ULONG WINAPI LHashValOfNameSysA(SYSKIND,LCID,LPCSTR);
+ULONG WINAPI LHashValOfNameSys(SYSKIND,LCID,LPCOLESTR);
+
+#define LHashValOfName(lcid,name) LHashValOfNameSys(SYS_WIN32,lcid,name)
+#define WHashValOfLHashVal(hash) ((USHORT)((hash) & 0xffff))
+#define IsHashValCompatible(hash1,hash2) ((hash1) & 0xff0000 == (hash2) & 0xff0000)
+
+#define MEMBERID_NIL DISPID_UNKNOWN
+#define ID_DEFAULTINST -2
+
+#define DISPATCH_METHOD 0x1
+#define DISPATCH_PROPERTYGET 0x2
+#define DISPATCH_PROPERTYPUT 0x4
+#define DISPATCH_PROPERTYPUTREF 0x8
+
+#define LOAD_TLB_AS_32BIT 0x20
+#define LOAD_TLB_AS_64BIT 0x40
+#define MASK_TO_RESET_TLB_BITS ~(LOAD_TLB_AS_32BIT|LOAD_TLB_AS_64BIT)
+
+HRESULT WINAPI CreateTypeLib(SYSKIND,const OLECHAR*,ICreateTypeLib**);
+HRESULT WINAPI CreateTypeLib2(SYSKIND,LPCOLESTR,ICreateTypeLib2**);
+HRESULT WINAPI LoadRegTypeLib(REFGUID,WORD,WORD,LCID,ITypeLib**);
+HRESULT WINAPI LoadTypeLib(const OLECHAR*,ITypeLib**);
+HRESULT WINAPI LoadTypeLibEx(LPCOLESTR,REGKIND,ITypeLib**);
+HRESULT WINAPI QueryPathOfRegTypeLib(REFGUID,WORD,WORD,LCID,LPBSTR);
+HRESULT WINAPI RegisterTypeLib(ITypeLib*,OLECHAR*,OLECHAR*);
+HRESULT WINAPI UnRegisterTypeLib(REFGUID,WORD,WORD,LCID,SYSKIND);
+HRESULT WINAPI RegisterTypeLibForUser(ITypeLib*,OLECHAR*,OLECHAR*);
+HRESULT WINAPI UnRegisterTypeLibForUser(REFGUID,WORD,WORD,LCID,SYSKIND);
+
+VOID WINAPI ClearCustData(LPCUSTDATA);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+
+#endif /*__WINE_OLEAUTO_H*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h
new file mode 100644
index 00000000..b9cbe448
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/olectl.h
@@ -0,0 +1,458 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLECTL_H
+#define __WINE_OLECTL_H
+
+#if !defined(__midl) && !defined(__WIDL__)
+
+#include <ocidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+/*
+ * Ole Control Interfaces
+ */
+DEFINE_GUID(CLSID_ConvertVBX,
+ 0xfb8f0822,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13);
+DEFINE_GUID(CLSID_PersistPropset,
+ 0xfb8f0821,0x0164,0x101b,0x84,0xed,0x08,0x00,0x2b,0x2e,0xc7,0x13);
+
+DEFINE_GUID(CLSID_StdFont,
+ 0x0be35203,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_StdPicture,
+ 0x0be35204,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+
+DEFINE_GUID(IID_IPropertyFrame,
+ 0xb196b28a,0xbab4,0x101a,0xb6,0x9c,0x00,0xaa,0x00,0x34,0x1d,0x07);
+
+DEFINE_GUID(CLSID_CFontPropPage,
+ 0x0be35200,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_CColorPropPage,
+ 0x0be35201,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_CPicturePropPage,
+ 0x0be35202,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+
+DEFINE_GUID(GUID_HIMETRIC,
+ 0x66504300,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_COLOR,
+ 0x66504301,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XPOSPIXEL,
+ 0x66504302,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YPOSPIXEL,
+ 0x66504303,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XSIZEPIXEL,
+ 0x66504304,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YSIZEPIXEL,
+ 0x66504305,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XPOS,
+ 0x66504306,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YPOS,
+ 0x66504307,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_XSIZE,
+ 0x66504308,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+DEFINE_GUID(GUID_YSIZE,
+ 0x66504309,0xBE0F,0x101A,0x8B,0xBB,0x00,0xAA,0x00,0x30,0x0C,0xAB);
+
+#ifndef __CGUID_H__
+DEFINE_GUID(GUID_TRISTATE,
+ 0x6650430a,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+#endif
+
+DEFINE_GUID(GUID_OPTIONVALUEEXCLUSIVE,
+ 0x6650430b,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_CHECKVALUEEXCLUSIVE,
+ 0x6650430c,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTNAME,
+ 0x6650430d,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTSIZE,
+ 0x6650430e,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTBOLD,
+ 0x6650430f,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTITALIC,
+ 0x66504310,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTUNDERSCORE,
+ 0x66504311,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_FONTSTRIKETHROUGH,
+ 0x66504312,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+DEFINE_GUID(GUID_HANDLE,
+ 0x66504313,0xbe0f,0x101a,0x8b,0xbb,0x00,0xaa,0x00,0x30,0x0c,0xab);
+
+typedef struct tagOCPFIPARAMS
+{
+ ULONG cbStructSize;
+ HWND hWndOwner;
+ int x;
+ int y;
+ LPCOLESTR lpszCaption;
+ ULONG cObjects;
+ LPUNKNOWN *lplpUnk;
+ ULONG cPages;
+ CLSID *lpPages;
+ LCID lcid;
+ DISPID dispidInitialProperty;
+} OCPFIPARAMS, *LPOCPFIPARAMS;
+
+/*
+ * FONTDESC is used as an OLE encapsulation of the GDI fonts
+ */
+typedef struct tagFONTDESC {
+ UINT cbSizeofstruct;
+ LPOLESTR lpstrName;
+ CY cySize;
+ SHORT sWeight;
+ SHORT sCharset;
+ BOOL fItalic;
+ BOOL fUnderline;
+ BOOL fStrikethrough;
+} FONTDESC, *LPFONTDESC;
+
+#define FONTSIZE(n) { n##0000, 0 }
+
+#define PICTYPE_UNINITIALIZED (-1)
+#define PICTYPE_NONE 0
+#define PICTYPE_BITMAP 1
+#define PICTYPE_METAFILE 2
+#define PICTYPE_ICON 3
+#define PICTYPE_ENHMETAFILE 4
+
+typedef struct tagPICTDESC {
+ UINT cbSizeofstruct;
+ UINT picType;
+ union {
+ struct {
+ HBITMAP hbitmap;
+ HPALETTE hpal;
+ } bmp;
+ struct {
+ HMETAFILE hmeta;
+ int xExt;
+ int yExt;
+ } wmf;
+ struct {
+ HICON hicon;
+ } icon;
+ struct {
+ HENHMETAFILE hemf;
+ } emf;
+ } DUMMYUNIONNAME;
+} PICTDESC, *LPPICTDESC;
+
+typedef LONG OLE_XPOS_PIXELS;
+typedef LONG OLE_YPOS_PIXELS;
+typedef LONG OLE_XSIZE_PIXELS;
+typedef LONG OLE_YSIZE_PIXELS;
+typedef float OLE_XPOS_CONTAINER;
+typedef float OLE_YPOS_CONTAINER;
+typedef float OLE_XSIZE_CONTAINER;
+typedef float OLE_YSIZE_CONTAINER;
+
+typedef enum
+{
+ triUnchecked = 0,
+ triChecked = 1,
+ triGray = 2
+} OLE_TRISTATE;
+
+typedef VARIANT_BOOL OLE_OPTEXCLUSIVE;
+typedef VARIANT_BOOL OLE_CANCELBOOL;
+typedef VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;
+
+/* flags for OleLoadPictureEx and OleLoadPictureFileEx */
+#define LP_DEFAULT 0x0
+#define LP_MONOCHROME 0x1
+#define LP_VGACOLOR 0x2
+#define LP_COLOR 0x4
+
+HRESULT WINAPI DllRegisterServer(void);
+
+HRESULT WINAPI DllUnregisterServer(void);
+
+HCURSOR WINAPI OleIconToCursor( HINSTANCE hinstExe, HICON hicon);
+
+HRESULT WINAPI OleCreatePropertyFrameIndirect( LPOCPFIPARAMS lpParams);
+
+HRESULT WINAPI OleCreatePropertyFrame(
+ HWND hwndOwner, UINT x, UINT y,
+ LPCOLESTR lpszCaption, ULONG cObjects, LPUNKNOWN* ppUnk,
+ ULONG cPages, LPCLSID pPageClsID, LCID lcid, DWORD dwReserved,
+ LPVOID pvReserved );
+
+HRESULT WINAPI OleLoadPicture( LPSTREAM lpstream, LONG lSize, BOOL fRunmode,
+ REFIID riid, LPVOID *lplpvObj );
+
+HRESULT WINAPI OleLoadPictureEx( LPSTREAM lpstream, LONG lSize, BOOL fRunMode,
+ REFIID riid, DWORD xSizeDesired, DWORD ySizeDesired,
+ DWORD dwFlags, LPVOID *lplpvObj );
+
+HRESULT WINAPI OleLoadPictureFile( VARIANT varFilename, IDispatch **ppdispPicture );
+
+HRESULT WINAPI OleLoadPictureFileEx( VARIANT varFilename, DWORD xSizeDesired,
+ DWORD ySizeDesired, DWORD dwFlags, IDispatch **ppdispPicture );
+
+HRESULT WINAPI OleSavePictureFile( IDispatch *pdispPicture, BSTR bstrFilename );
+
+HRESULT WINAPI OleLoadPicturePath( LPOLESTR szURLorPath, LPUNKNOWN punkCaller,
+ DWORD dwReserved, OLE_COLOR clrReserved, REFIID riid,
+ LPVOID *ppvRet );
+
+HRESULT WINAPI OleCreatePictureIndirect(LPPICTDESC lpPictDesc, REFIID riid,
+ BOOL fOwn, LPVOID * lplpvObj );
+
+HRESULT WINAPI OleCreateFontIndirect(LPFONTDESC lpFontDesc, REFIID riid,
+ LPVOID* lplpvObj);
+
+HRESULT WINAPI OleTranslateColor( OLE_COLOR clr, HPALETTE hpal,
+ COLORREF* lpcolorref);
+
+/* Reflected Window Message IDs */
+#define OCM__BASE (WM_USER+0x1c00)
+#define OCM_COMMAND (OCM__BASE + WM_COMMAND)
+
+#define OCM_CTLCOLORBTN (OCM__BASE + WM_CTLCOLORBTN)
+#define OCM_CTLCOLOREDIT (OCM__BASE + WM_CTLCOLOREDIT)
+#define OCM_CTLCOLORDLG (OCM__BASE + WM_CTLCOLORDLG)
+#define OCM_CTLCOLORLISTBOX (OCM__BASE + WM_CTLCOLORLISTBOX)
+#define OCM_CTLCOLORMSGBOX (OCM__BASE + WM_CTLCOLORMSGBOX)
+#define OCM_CTLCOLORSCROLLBAR (OCM__BASE + WM_CTLCOLORSCROLLBAR)
+#define OCM_CTLCOLORSTATIC (OCM__BASE + WM_CTLCOLORSTATIC)
+
+#define OCM_DRAWITEM (OCM__BASE + WM_DRAWITEM)
+#define OCM_MEASUREITEM (OCM__BASE + WM_MEASUREITEM)
+#define OCM_DELETEITEM (OCM__BASE + WM_DELETEITEM)
+#define OCM_VKEYTOITEM (OCM__BASE + WM_VKEYTOITEM)
+#define OCM_CHARTOITEM (OCM__BASE + WM_CHARTOITEM)
+#define OCM_COMPAREITEM (OCM__BASE + WM_COMPAREITEM)
+#define OCM_HSCROLL (OCM__BASE + WM_HSCROLL)
+#define OCM_VSCROLL (OCM__BASE + WM_VSCROLL)
+#define OCM_PARENTNOTIFY (OCM__BASE + WM_PARENTNOTIFY)
+#define OCM_NOTIFY (OCM__BASE + WM_NOTIFY)
+
+#define CONNECT_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200)
+#define CONNECT_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x020F)
+#define CONNECT_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)
+#define CONNECT_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)
+
+#define CONNECT_E_NOCONNECTION (CONNECT_E_FIRST+0)
+#define CONNECT_E_ADVISELIMIT (CONNECT_E_FIRST+1)
+#define CONNECT_E_CANNOTCONNECT (CONNECT_E_FIRST+2)
+#define CONNECT_E_OVERRIDDEN (CONNECT_E_FIRST+3)
+
+#define SELFREG_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200)
+#define SELFREG_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x020F)
+#define SELFREG_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)
+#define SELFREG_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)
+#define SELFREG_E_TYPELIB (SELFREG_E_FIRST+0)
+#define SELFREG_E_CLASS (SELFREG_E_FIRST+1)
+
+#ifndef FACILITY_CONTROL
+#define FACILITY_CONTROL 0xa
+#endif
+#define STD_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)
+#define CTL_E_ILLEGALFUNCTIONCALL STD_CTL_SCODE(5)
+#define CTL_E_OVERFLOW STD_CTL_SCODE(6)
+#define CTL_E_OUTOFMEMORY STD_CTL_SCODE(7)
+#define CTL_E_DIVISIONBYZERO STD_CTL_SCODE(11)
+#define CTL_E_OUTOFSTRINGSPACE STD_CTL_SCODE(14)
+#define CTL_E_OUTOFSTACKSPACE STD_CTL_SCODE(28)
+#define CTL_E_BADFILENAMEORNUMBER STD_CTL_SCODE(52)
+#define CTL_E_FILENOTFOUND STD_CTL_SCODE(53)
+#define CTL_E_BADFILEMODE STD_CTL_SCODE(54)
+#define CTL_E_FILEALREADYOPEN STD_CTL_SCODE(55)
+#define CTL_E_DEVICEIOERROR STD_CTL_SCODE(57)
+#define CTL_E_FILEALREADYEXISTS STD_CTL_SCODE(58)
+#define CTL_E_BADRECORDLENGTH STD_CTL_SCODE(59)
+#define CTL_E_DISKFULL STD_CTL_SCODE(61)
+#define CTL_E_BADRECORDNUMBER STD_CTL_SCODE(63)
+#define CTL_E_BADFILENAME STD_CTL_SCODE(64)
+#define CTL_E_TOOMANYFILES STD_CTL_SCODE(67)
+#define CTL_E_DEVICEUNAVAILABLE STD_CTL_SCODE(68)
+#define CTL_E_PERMISSIONDENIED STD_CTL_SCODE(70)
+#define CTL_E_DISKNOTREADY STD_CTL_SCODE(71)
+#define CTL_E_PATHFILEACCESSERROR STD_CTL_SCODE(75)
+#define CTL_E_PATHNOTFOUND STD_CTL_SCODE(76)
+#define CTL_E_INVALIDPATTERNSTRING STD_CTL_SCODE(93)
+#define CTL_E_INVALIDUSEOFNULL STD_CTL_SCODE(94)
+#define CTL_E_INVALIDFILEFORMAT STD_CTL_SCODE(321)
+#define CTL_E_INVALIDPROPERTYVALUE STD_CTL_SCODE(380)
+#define CTL_E_INVALIDPROPERTYARRAYINDEX STD_CTL_SCODE(381)
+#define CTL_E_SETNOTSUPPORTEDATRUNTIME STD_CTL_SCODE(382)
+#define CTL_E_SETNOTSUPPORTED STD_CTL_SCODE(383)
+#define CTL_E_NEEDPROPERTYARRAYINDEX STD_CTL_SCODE(385)
+#define CTL_E_SETNOTPERMITTED STD_CTL_SCODE(387)
+#define CTL_E_GETNOTSUPPORTEDATRUNTIME STD_CTL_SCODE(393)
+#define CTL_E_GETNOTSUPPORTED STD_CTL_SCODE(394)
+#define CTL_E_PROPERTYNOTFOUND STD_CTL_SCODE(422)
+#define CTL_E_INVALIDCLIPBOARDFORMAT STD_CTL_SCODE(460)
+#define CTL_E_INVALIDPICTURE STD_CTL_SCODE(481)
+#define CTL_E_PRINTERERROR STD_CTL_SCODE(482)
+#define CTL_E_CANTSAVEFILETOTEMP STD_CTL_SCODE(735)
+#define CTL_E_SEARCHTEXTNOTFOUND STD_CTL_SCODE(744)
+#define CTL_E_REPLACEMENTSTOOLONG STD_CTL_SCODE(746)
+
+#define CUSTOM_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)
+#define CTL_E_CUSTOM_FIRST CUSTOM_CTL_SCODE(600)
+
+#define VT_COLOR VT_I4
+#define VT_XPOS_PIXELS VT_I4
+#define VT_YPOS_PIXELS VT_I4
+#define VT_XSIZE_PIXELS VT_I4
+#define VT_YSIZE_PIXELS VT_I4
+#define VT_XPOS_HIMETRIC VT_I4
+#define VT_YPOS_HIMETRIC VT_I4
+#define VT_XSIZE_HIMETRIC VT_I4
+#define VT_YSIZE_HIMETRIC VT_I4
+#define VT_TRISTATE VT_I2
+#define VT_OPTEXCLUSIVE VT_BOOL
+#define VT_FONT VT_DISPATCH
+#define VT_PICTURE VT_DISPATCH
+
+#define VT_STREAMED_PROPSET 73
+#define VT_STORED_PROPSET 74
+#define VT_BLOB_PROPSET 75
+#define VT_VERBOSE_ENUM 76
+
+#ifndef OLEIVERB_PROPERTIES
+#define OLEIVERB_PROPERTIES (__MSABI_LONG(-7))
+#endif
+
+#define PERPROP_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0200)
+#define PERPROP_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x020F)
+#define PERPROP_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0200)
+#define PERPROP_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x020F)
+
+#define PERPROP_E_NOPAGEAVAILABLE (PERPROP_E_FIRST+0)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__midl && !__WIDL__ */
+
+/* standard dispatch ID's */
+#define DISPID_AUTOSIZE (-500)
+#define DISPID_BACKCOLOR (-501)
+#define DISPID_BACKSTYLE (-502)
+#define DISPID_BORDERCOLOR (-503)
+#define DISPID_BORDERSTYLE (-504)
+#define DISPID_BORDERWIDTH (-505)
+#define DISPID_DRAWMODE (-507)
+#define DISPID_DRAWSTYLE (-508)
+#define DISPID_DRAWWIDTH (-509)
+#define DISPID_FILLCOLOR (-510)
+#define DISPID_FILLSTYLE (-511)
+#define DISPID_FONT (-512)
+#define DISPID_FORECOLOR (-513)
+#define DISPID_ENABLED (-514)
+#define DISPID_HWND (-515)
+#define DISPID_TABSTOP (-516)
+#define DISPID_TEXT (-517)
+#define DISPID_CAPTION (-518)
+#define DISPID_BORDERVISIBLE (-519)
+#define DISPID_APPEARANCE (-520)
+#define DISPID_MOUSEPOINTER (-521)
+#define DISPID_MOUSEICON (-522)
+#define DISPID_PICTURE (-523)
+#define DISPID_VALID (-524)
+#define DISPID_READYSTATE (-525)
+
+#define DISPID_REFRESH (-550)
+#define DISPID_DOCLICK (-551)
+#define DISPID_ABOUTBOX (-552)
+#define DISPID_ADDITEM (-553)
+#define DISPID_CLEAR (-554)
+#define DISPID_REMOVEITEM (-555)
+
+#define DISPID_CLICK (-600)
+#define DISPID_DBLCLICK (-601)
+#define DISPID_KEYDOWN (-602)
+#define DISPID_KEYPRESS (-603)
+#define DISPID_KEYUP (-604)
+#define DISPID_MOUSEDOWN (-605)
+#define DISPID_MOUSEMOVE (-606)
+#define DISPID_MOUSEUP (-607)
+#define DISPID_ERROREVENT (-608)
+#define DISPID_READYSTATECHANGE (-609)
+#define DISPID_CLICK_VALUE (-610)
+#define DISPID_RIGHTTOLEFT (-611)
+#define DISPID_TOPTOBOTTOM (-612)
+#define DISPID_THIS (-613)
+
+#define DISPID_AMBIENT_BACKCOLOR (-701)
+#define DISPID_AMBIENT_DISPLAYNAME (-702)
+#define DISPID_AMBIENT_FONT (-703)
+#define DISPID_AMBIENT_FORECOLOR (-704)
+#define DISPID_AMBIENT_LOCALEID (-705)
+#define DISPID_AMBIENT_MESSAGEREFLECT (-706)
+#define DISPID_AMBIENT_SCALEUNITS (-707)
+#define DISPID_AMBIENT_TEXTALIGN (-708)
+#define DISPID_AMBIENT_USERMODE (-709)
+#define DISPID_AMBIENT_UIDEAD (-710)
+#define DISPID_AMBIENT_SHOWGRABHANDLES (-711)
+#define DISPID_AMBIENT_SHOWHATCHING (-712)
+#define DISPID_AMBIENT_DISPLAYASDEFAULT (-713)
+#define DISPID_AMBIENT_SUPPORTSMNEMONICS (-714)
+#define DISPID_AMBIENT_AUTOCLIP (-715)
+#define DISPID_AMBIENT_APPEARANCE (-716)
+
+#define DISPID_AMBIENT_CODEPAGE (-725)
+#define DISPID_AMBIENT_PALETTE (-726)
+#define DISPID_AMBIENT_CHARSET (-727)
+#define DISPID_AMBIENT_TRANSFERPRIORITY (-728)
+
+#define DISPID_AMBIENT_RIGHTTOLEFT (-732)
+#define DISPID_AMBIENT_TOPTOBOTTOM (-733)
+
+#define DISPID_Name (-800)
+#define DISPID_Delete (-801)
+#define DISPID_Object (-802)
+#define DISPID_Parent (-803)
+
+#define DISPID_FONT_NAME 0
+#define DISPID_FONT_SIZE 2
+#define DISPID_FONT_BOLD 3
+#define DISPID_FONT_ITALIC 4
+#define DISPID_FONT_UNDER 5
+#define DISPID_FONT_STRIKE 6
+#define DISPID_FONT_WEIGHT 7
+#define DISPID_FONT_CHARSET 8
+#define DISPID_FONT_CHANGED 9
+
+/* IPicture */
+#define DISPID_PICT_HANDLE 0
+#define DISPID_PICT_HPAL 2
+#define DISPID_PICT_TYPE 3
+#define DISPID_PICT_WIDTH 4
+#define DISPID_PICT_HEIGHT 5
+#define DISPID_PICT_RENDER 6
+
+#endif /* __WINE_OLECTL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl
new file mode 100644
index 00000000..f6abde2e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledb.idl
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("#ifdef _WIN64")
+cpp_quote("#include <pshpack8.h>")
+cpp_quote("#else")
+cpp_quote("#include <pshpack2.h>")
+cpp_quote("#endif")
+cpp_quote("")
+
+import "wtypes.idl";
+import "oaidl.idl";
+import "ocidl.idl";
+import "propidl.idl";
+import "urlmon.idl";
+
+typedef ULONG_PTR DBBYTEOFFSET;
+typedef LONG_PTR DBROWOFFSET;
+typedef LONG_PTR DBROWCOUNT;
+typedef ULONG_PTR DBCOUNTITEM;
+typedef ULONG_PTR DBLENGTH;
+typedef ULONG_PTR DBORDINAL;
+typedef ULONG_PTR DBBKMARK;
+typedef DWORD_PTR DB_DWRESERVE;
+typedef ULONG_PTR DBREFCOUNT;
+typedef ULONG_PTR DB_UPARAMS;
+typedef LONG_PTR DB_LPARAMS;
+typedef DWORD_PTR DBHASHVALUE;
+
+#include "dbs.idl"
+
+#include "access.idl"
+#include "rstbas.idl"
+#include "rstinf.idl"
+#include "rstloc.idl"
+#include "chprst.idl"
+#include "cmdbas.idl"
+#include "cmdtxt.idl"
+#include "dbccmd.idl"
+#include "dbcses.idl"
+#include "srcrst.idl"
+#include "dbprop.idl"
+#include "dbinit.idl"
+#include "dbdsad.idl"
+#include "asynot.idl"
+#include "asysta.idl"
+#include "sesprp.idl"
+#include "rstnot.idl"
+#include "opnrst.idl"
+#include "row.idl"
+#include "rowchg.idl"
+#include "rowpos.idl"
+#include "rowpsc.idl"
+#include "binres.idl"
+#include "crtrow.idl"
+#include "errrec.idl"
+
+cpp_quote("#include <accctrl.h>")
+
+cpp_quote("#include <poppack.h>")
+cpp_quote("")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h
new file mode 100644
index 00000000..e9eb30ae
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledberr.h
@@ -0,0 +1,83 @@
+/* OLE DB error codes.
+ *
+ * Copyright 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLEDBERR_H
+#define __WINE_OLEDBERR_H
+
+#define DB_E_BADBINDINFO 0x80040e08
+
+#define DB_E_NOTFOUND 0x80040e19
+
+#define DB_E_UNSUPPORTEDCONVERSION 0x80040e1d
+
+#define DB_E_ERRORSOCCURRED 0x80040e21
+
+#define DB_E_BADSTORAGEFLAG 0x80040e26
+#define DB_E_BADCOMPAREOP 0x80040e27
+#define DB_E_BADSTATUSVALUE 0x80040e28
+#define DB_E_CANTSCROLLBACKWARDS 0x80040e29
+#define DB_E_BADREGIONHANDLE 0x80040e2a
+#define DB_E_NONCONTIGUOUSRANGE 0x80040e2b
+#define DB_E_INVALIDTRANSITION 0x80040e2c
+#define DB_E_NOTASUBREGION 0x80040e2d
+#define DB_E_MULTIPLESTATEMENTS 0x80040e2e
+#define DB_E_INTEGRITYVIOLATION 0x80040e2f
+#define DB_E_BADTYPENAME 0x80040e30
+#define DB_E_ABORTLIMITREACHED 0x80040e31
+#define DB_E_ROWSETINCOMMAND 0x80040e32
+#define DB_E_CANTTRANSLATE 0x80040e33
+#define DB_E_DUPLICATEINDEXID 0x80040e34
+#define DB_E_NOINDEX 0x80040e35
+#define DB_E_INDEXINUSE 0x80040e36
+#define DB_E_NOTABLE 0x80040e37
+#define DB_E_CONCURRENCYVIOLATION 0x80040e38
+
+#define DB_E_TABLEINUSE 0x80040e40
+#define DB_E_NOLOCALE 0x80040e41
+#define DB_E_BADRECORDNUM 0x80040e42
+#define DB_E_BOOKMARKSKIPPED 0x80040e43
+#define DB_E_BADPROPERTYVALUE 0x80040e44
+#define DB_E_INVALID 0x80040e45
+#define DB_E_BADACCESSORFLAGS 0x80040e46
+#define DB_E_BADSTORAGEFLAGS 0x80040e47
+#define DB_E_BYREFACCESSORNOTSUPPORTED 0x80040e48
+#define DB_E_NULLACCESSORNOTSUPPORTED 0x80040e49
+#define DB_E_NOTPREPARED 0x80040e4a
+#define DB_E_BADACCESSORTYPE 0x80040e4b
+#define DB_E_WRITEONLYACCESSOR 0x80040e4c
+#define DB_SEC_E_AUTH_FAILED 0x80040e4d
+#define DB_E_CANCELED 0x80040e4e
+
+#define DB_E_ALREADYINITIALIZED 0x80040e52
+#define DB_E_DATAOVERFLOW 0x80040e57
+
+#define DB_E_MISMATCHEDPROVIDER 0x80040e75
+
+#define DB_S_ERRORSOCCURRED 0x00040eda
+
+#endif /* __WINE_OLEDBERR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h
new file mode 100644
index 00000000..2d6b75d2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oledlg.h
@@ -0,0 +1,988 @@
+/*
+ * Declarations for OLEDLG
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_OLEDLG_H
+#define __WINE_OLEDLG_H
+
+#include <windows.h>
+#include <shellapi.h>
+#include <commdlg.h>
+#include <ole2.h>
+#ifndef __WINESRC__
+# include <string.h>
+# include <tchar.h>
+#endif
+#include <dlgs.h>
+#include <prsht.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct IOleUILinkContainerA *POLEUILINKCONTAINERA, *LPOLEUILINKCONTAINERA;
+typedef struct IOleUILinkContainerW *POLEUILINKCONTAINERW, *LPOLEUILINKCONTAINERW;
+
+typedef struct IOleUILinkInfoA *POLEUILINKINFOA, *LPOLEUILINKINFOA;
+typedef struct IOleUILinkInfoW *POLEUILINKINFOW, *LPOLEUILINKINFOW;
+
+typedef struct IOleUIObjInfoA *POLEUIOBJINFOA, *LPOLEUIOBJINFOA;
+typedef struct IOleUIObjInfoW *POLEUIOBJINFOW, *LPOLEUIOBJINFOW;
+
+#define IDC_OLEUIHELP 99
+
+
+#define OLEUI_ERR_STANDARDMAX 116
+
+#define OLEUI_BZERR_HTASKINVALID (OLEUI_ERR_STANDARDMAX+0)
+#define OLEUI_BZ_SWITCHTOSELECTED (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_BZ_RETRYSELECTED (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_BZ_CALLUNBLOCKED (OLEUI_ERR_STANDARDMAX+3)
+
+#define OLEUI_FALSE 0
+#define OLEUI_SUCCESS 1 /* Same as OLEUI_OK */
+#define OLEUI_OK 1 /* OK button pressed */
+#define OLEUI_CANCEL 2 /* Cancel button pressed */
+
+#define OLEUI_ERR_STANDARDMIN 100
+#define OLEUI_ERR_OLEMEMALLOC 100
+#define OLEUI_ERR_STRUCTURENULL 101
+#define OLEUI_ERR_STRUCTUREINVALID 102
+#define OLEUI_ERR_CBSTRUCTINCORRECT 103
+#define OLEUI_ERR_HWNDOWNERINVALID 104
+#define OLEUI_ERR_LPSZCAPTIONINVALID 105
+#define OLEUI_ERR_LPFNHOOKINVALID 106
+#define OLEUI_ERR_HINSTANCEINVALID 107
+#define OLEUI_ERR_LPSZTEMPLATEINVALID 108
+#define OLEUI_ERR_HRESOURCEINVALID 109
+#define OLEUI_ERR_FINDTEMPLATEFAILURE 110
+#define OLEUI_ERR_LOADTEMPLATEFAILURE 111
+#define OLEUI_ERR_DIALOGFAILURE 112
+#define OLEUI_ERR_LOCALMEMALLOC 113
+#define OLEUI_ERR_GLOBALMEMALLOC 114
+#define OLEUI_ERR_LOADSTRING 115
+#define OLEUI_ERR_STANDARDMAX 116
+
+typedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM);
+
+/*****************************************************************************
+ * Registered Message Names
+ */
+#define SZOLEUI_MSG_HELPA "OLEUI_MSG_HELP"
+#define SZOLEUI_MSG_ENDDIALOGA "OLEUI_MSG_ENDDIALOG"
+#define SZOLEUI_MSG_BROWSEA "OLEUI_MSG_BROWSE"
+#define SZOLEUI_MSG_CHANGEICONA "OLEUI_MSG_CHANGEICON"
+#define SZOLEUI_MSG_CLOSEBUSYDIALOGA "OLEUI_MSG_CLOSEBUSYDIALOG"
+#define SZOLEUI_MSG_CONVERTA "OLEUI_MSG_CONVERT"
+#define SZOLEUI_MSG_CHANGESOURCEA "OLEUI_MSG_CHANGESOURCE"
+#define SZOLEUI_MSG_ADDCONTROLA "OLEUI_MSG_ADDCONTROL"
+#define SZOLEUI_MSG_BROWSE_OFNA "OLEUI_MSG_BROWSE_OFN"
+#if defined(__GNUC__)
+# define SZOLEUI_MSG_HELPW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 }
+# define SZOLEUI_MSG_ENDDIALOGW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 }
+# define SZOLEUI_MSG_BROWSEW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 }
+# define SZOLEUI_MSG_CHANGEICONW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 }
+# define SZOLEUI_MSG_CLOSEBUSYDIALOGW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 }
+# define SZOLEUI_MSG_CONVERTW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 }
+# define SZOLEUI_MSG_CHANGESOURCEW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 }
+# define SZOLEUI_MSG_ADDCONTROLW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 }
+# define SZOLEUI_MSG_BROWSE_OFNW (const WCHAR []){ 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 }
+#elif defined(_MSC_VER)
+# define SZOLEUI_MSG_HELPW L"OLEUI_MSG_HELP"
+# define SZOLEUI_MSG_ENDDIALOGW L"OLEUI_MSG_ENDDIALOG"
+# define SZOLEUI_MSG_BROWSEW L"OLEUI_MSG_BROWSE"
+# define SZOLEUI_MSG_CHANGEICONW L"OLEUI_MSG_CHANGEICON"
+# define SZOLEUI_MSG_CLOSEBUSYDIALOGW L"OLEUI_MSG_CLOSEBUSYDIALOG"
+# define SZOLEUI_MSG_CONVERTW L"OLEUI_MSG_CONVERT"
+# define SZOLEUI_MSG_CHANGESOURCEW L"OLEUI_MSG_CHANGESOURCE"
+# define SZOLEUI_MSG_ADDCONTROLW L"OLEUI_MSG_ADDCONTROL"
+# define SZOLEUI_MSG_BROWSE_OFNW L"OLEUI_MSG_BROWSE_OFN"
+#else
+static const WCHAR SZOLEUI_MSG_HELPW[] = { 'O','L','E','U','I','_','M','S','G','_','H','E','L','P',0 };
+static const WCHAR SZOLEUI_MSG_ENDDIALOGW[] = { 'O','L','E','U','I','_','M','S','G','_','E','N','D','D','I','A','L','O','G',0 };
+static const WCHAR SZOLEUI_MSG_BROWSEW[] = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E',0 };
+static const WCHAR SZOLEUI_MSG_CHANGEICONW[] = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','I','C','O','N',0 };
+static const WCHAR SZOLEUI_MSG_CLOSEBUSYDIALOGW[] = { 'O','L','E','U','I','_','M','S','G','_','C','L','O','S','E','B','U','S','Y','D','I','A','L','O','G',0 };
+static const WCHAR SZOLEUI_MSG_CONVERTW[] = { 'O','L','E','U','I','_','M','S','G','_','C','O','N','V','E','R','T',0 };
+static const WCHAR SZOLEUI_MSG_CHANGESOURCEW[] = { 'O','L','E','U','I','_','M','S','G','_','C','H','A','N','G','E','S','O','U','R','C','E',0 };
+static const WCHAR SZOLEUI_MSG_ADDCONTROLW[] = { 'O','L','E','U','I','_','M','S','G','_','A','D','D','C','O','N','T','R','O','L',0 };
+static const WCHAR SZOLEUI_MSG_BROWSE_OFNW[] = { 'O','L','E','U','I','_','M','S','G','_','B','R','O','W','S','E','_','O','F','N',0 };
+#endif
+#define SZOLEUI_MSG_HELP WINELIB_NAME_AW(SZOLEUI_MSG_HELP)
+#define SZOLEUI_MSG_ENDDIALOG WINELIB_NAME_AW(SZOLEUI_MSG_ENDDIALOG)
+#define SZOLEUI_MSG_BROWSE WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE)
+#define SZOLEUI_MSG_CHANGEICON WINELIB_NAME_AW(SZOLEUI_MSG_CHANGEICON)
+#define SZOLEUI_MSG_CLOSEBUSYDIALOG WINELIB_NAME_AW(SZOLEUI_MSG_CLOSEBUSYDIALOG)
+#define SZOLEUI_MSG_CONVERT WINELIB_NAME_AW(SZOLEUI_MSG_CONVERT)
+#define SZOLEUI_MSG_CHANGESOURCE WINELIB_NAME_AW(SZOLEUI_MSG_CHANGESOURCE)
+#define SZOLEUI_MSG_ADDCONTROL WINELIB_NAME_AW(SZOLEUI_MSG_ADDCONTROL)
+#define SZOLEUI_MSG_BROWSE_OFN WINELIB_NAME_AW(SZOLEUI_MSG_BROWSE_OFN)
+
+
+/*****************************************************************************
+ * INSERT OBJECT DIALOG
+ */
+typedef struct tagOLEUIINSERTOBJECTA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ LPSTR lpszFile;
+ UINT cchFile;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ IID iid;
+ DWORD oleRender;
+ LPFORMATETC lpFormatEtc;
+ LPOLECLIENTSITE lpIOleClientSite;
+ LPSTORAGE lpIStorage;
+ LPVOID *ppvObj;
+ SCODE sc;
+ HGLOBAL hMetaPict;
+} OLEUIINSERTOBJECTA, *POLEUIINSERTOBJECTA, *LPOLEUIINSERTOBJECTA;
+
+typedef struct tagOLEUIINSERTOBJECTW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ LPWSTR lpszFile;
+ UINT cchFile;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ IID iid;
+ DWORD oleRender;
+ LPFORMATETC lpFormatEtc;
+ LPOLECLIENTSITE lpIOleClientSite;
+ LPSTORAGE lpIStorage;
+ LPVOID *ppvObj;
+ SCODE sc;
+ HGLOBAL hMetaPict;
+} OLEUIINSERTOBJECTW, *POLEUIINSERTOBJECTW, *LPOLEUIINSERTOBJECTW;
+
+DECL_WINELIB_TYPE_AW(OLEUIINSERTOBJECT)
+DECL_WINELIB_TYPE_AW(POLEUIINSERTOBJECT)
+DECL_WINELIB_TYPE_AW(LPOLEUIINSERTOBJECT)
+
+#define IOF_SHOWHELP __MSABI_LONG(0x00000001)
+#define IOF_SELECTCREATENEW __MSABI_LONG(0x00000002)
+#define IOF_SELECTCREATEFROMFILE __MSABI_LONG(0x00000004)
+#define IOF_CHECKLINK __MSABI_LONG(0x00000008)
+#define IOF_CHECKDISPLAYASICON __MSABI_LONG(0x00000010)
+#define IOF_CREATENEWOBJECT __MSABI_LONG(0x00000020)
+#define IOF_CREATEFILEOBJECT __MSABI_LONG(0x00000040)
+#define IOF_CREATELINKOBJECT __MSABI_LONG(0x00000080)
+#define IOF_DISABLELINK __MSABI_LONG(0x00000100)
+#define IOF_VERIFYSERVERSEXIST __MSABI_LONG(0x00000200)
+#define IOF_DISABLEDISPLAYASICON __MSABI_LONG(0x00000400)
+#define IOF_HIDECHANGEICON __MSABI_LONG(0x00000800)
+#define IOF_SHOWINSERTCONTROL __MSABI_LONG(0x00001000)
+#define IOF_SELECTCREATECONTROL __MSABI_LONG(0x00002000)
+
+/*****************************************************************************
+ * CONVERT DIALOG
+ */
+typedef struct tagOLEUICONVERTA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ CLSID clsidConvertDefault;
+ CLSID clsidActivateDefault;
+ CLSID clsidNew;
+ DWORD dvAspect;
+ WORD wFormat;
+ BOOL fIsLinkedObject;
+ HGLOBAL hMetaPict;
+ LPSTR lpszUserType;
+ BOOL fObjectsIconChanged;
+ LPSTR lpszDefLabel;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+} OLEUICONVERTA, *POLEUICONVERTA, *LPOLEUICONVERTA;
+
+typedef struct tagOLEUICONVERTW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ CLSID clsid;
+ CLSID clsidConvertDefault;
+ CLSID clsidActivateDefault;
+ CLSID clsidNew;
+ DWORD dvAspect;
+ WORD wFormat;
+ BOOL fIsLinkedObject;
+ HGLOBAL hMetaPict;
+ LPWSTR lpszUserType;
+ BOOL fObjectsIconChanged;
+ LPWSTR lpszDefLabel;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+} OLEUICONVERTW, *POLEUICONVERTW, *LPOLEUICONVERTW;
+
+DECL_WINELIB_TYPE_AW(OLEUICONVERT)
+DECL_WINELIB_TYPE_AW(POLEUICONVERT)
+DECL_WINELIB_TYPE_AW(LPOLEUICONVERT)
+
+#define CF_SHOWHELPBUTTON __MSABI_LONG(0x00000001)
+#define CF_SETCONVERTDEFAULT __MSABI_LONG(0x00000002)
+#define CF_SETACTIVATEDEFAULT __MSABI_LONG(0x00000004)
+#define CF_SELECTCONVERTTO __MSABI_LONG(0x00000008)
+#define CF_SELECTACTIVATEAS __MSABI_LONG(0x00000010)
+#define CF_DISABLEDISPLAYASICON __MSABI_LONG(0x00000020)
+#define CF_DISABLEACTIVATEAS __MSABI_LONG(0x00000040)
+#define CF_HIDECHANGEICON __MSABI_LONG(0x00000080)
+#define CF_CONVERTONLY __MSABI_LONG(0x00000100)
+
+/*****************************************************************************
+ * CHANGE ICON DIALOG
+ */
+typedef struct tagOLEUICHANGEICONA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ HGLOBAL hMetaPict;
+ CLSID clsid;
+ CHAR szIconExe[MAX_PATH];
+ INT cchIconExe;
+} OLEUICHANGEICONA, *POLEUICHANGEICONA, *LPOLEUICHANGEICONA;
+
+typedef struct tagOLEUICHANGEICONW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ HGLOBAL hMetaPict;
+ CLSID clsid;
+ WCHAR szIconExe[MAX_PATH];
+ INT cchIconExe;
+} OLEUICHANGEICONW, *POLEUICHANGEICONW, *LPOLEUICHANGEICONW;
+
+DECL_WINELIB_TYPE_AW(OLEUICHANGEICON)
+DECL_WINELIB_TYPE_AW(POLEUICHANGEICON)
+DECL_WINELIB_TYPE_AW(LPOLEUICHANGEICON)
+
+
+#define CIF_SHOWHELP __MSABI_LONG(0x00000001)
+#define CIF_SELECTCURRENT __MSABI_LONG(0x00000002)
+#define CIF_SELECTDEFAULT __MSABI_LONG(0x00000004)
+#define CIF_SELECTFROMFILE __MSABI_LONG(0x00000008)
+#define CIF_USEICONEXE __MSABI_LONG(0x00000010)
+
+/*****************************************************************************
+ * PASTE SPECIAL DIALOG
+ */
+
+typedef enum tagOLEUIPASTEFLAG
+{
+ OLEUIPASTE_ENABLEICON = 2048,
+ OLEUIPASTE_PASTEONLY = 0,
+ OLEUIPASTE_PASTE = 512,
+ OLEUIPASTE_LINKANYTYPE = 1024,
+ OLEUIPASTE_LINKTYPE1 = 1,
+ OLEUIPASTE_LINKTYPE2 = 2,
+ OLEUIPASTE_LINKTYPE3 = 4,
+ OLEUIPASTE_LINKTYPE4 = 8,
+ OLEUIPASTE_LINKTYPE5 = 16,
+ OLEUIPASTE_LINKTYPE6 = 32,
+ OLEUIPASTE_LINKTYPE7 = 64,
+ OLEUIPASTE_LINKTYPE8 = 128
+} OLEUIPASTEFLAG;
+
+typedef struct tagOLEUIPASTEENTRYA
+{
+ FORMATETC fmtetc;
+ LPCSTR lpstrFormatName;
+ LPCSTR lpstrResultText;
+ DWORD dwFlags;
+ DWORD dwScratchSpace;
+} OLEUIPASTEENTRYA, *POLEUIPASTEENTRYA, *LPOLEUIPASTEENTRYA;
+
+typedef struct tagOLEUIPASTEENTRYW
+{
+ FORMATETC fmtetc;
+ LPCWSTR lpstrFormatName;
+ LPCWSTR lpstrResultText;
+ DWORD dwFlags;
+ DWORD dwScratchSpace;
+} OLEUIPASTEENTRYW, *POLEUIPASTEENTRYW, *LPOLEUIPASTEENTRYW;
+
+DECL_WINELIB_TYPE_AW(OLEUIPASTEENTRY)
+DECL_WINELIB_TYPE_AW(POLEUIPASTEENTRY)
+DECL_WINELIB_TYPE_AW(LPOLEUIPASTEENTRY)
+
+typedef struct tagOLEUIPASTESPECIALA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ LPDATAOBJECT lpSrcDataObj;
+ LPOLEUIPASTEENTRYA arrPasteEntries;
+ INT cPasteEntries;
+ UINT* arrLinkTypes;
+ INT cLinkTypes;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ INT nSelectedIndex;
+ BOOL fLink;
+ HGLOBAL hMetaPict;
+ SIZEL sizel;
+} OLEUIPASTESPECIALA, *POLEUIPASTESPECIALA, *LPOLEUIPASTESPECIALA;
+
+typedef struct tagOLEUIPASTESPECIALW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ LPDATAOBJECT lpSrcDataObj;
+ LPOLEUIPASTEENTRYW arrPasteEntries;
+ INT cPasteEntries;
+ UINT* arrLinkTypes;
+ INT cLinkTypes;
+ UINT cClsidExclude;
+ LPCLSID lpClsidExclude;
+ INT nSelectedIndex;
+ BOOL fLink;
+ HGLOBAL hMetaPict;
+ SIZEL sizel;
+} OLEUIPASTESPECIALW, *POLEUIPASTESPECIALW, *LPOLEUIPASTESPECIALW;
+
+DECL_WINELIB_TYPE_AW(OLEUIPASTESPECIAL)
+DECL_WINELIB_TYPE_AW(POLEUIPASTESPECIAL)
+DECL_WINELIB_TYPE_AW(LPOLEUIPASTESPECIAL)
+
+#define PS_MAXLINKTYPES 8
+
+#define PSF_SHOWHELP __MSABI_LONG(0x00000001)
+#define PSF_SELECTPASTE __MSABI_LONG(0x00000002)
+#define PSF_SELECTPASTELINK __MSABI_LONG(0x00000004)
+
+#define PSF_CHECKDISPLAYASICON __MSABI_LONG(0x00000008)
+#define PSF_DISABLEDISPLAYASICON __MSABI_LONG(0x00000010)
+#define PSF_HIDECHANGEICON __MSABI_LONG(0x00000020)
+#define PSF_STAYONCLIPBOARDCHANGE __MSABI_LONG(0x00000040)
+#define PSF_NOREFRESHDATAOBJECT __MSABI_LONG(0x00000080)
+
+#define OLEUI_IOERR_SRCDATAOBJECTINVALID (OLEUI_ERR_STANDARDMAX+0)
+#define OLEUI_IOERR_ARRPASTEENTRIESINVALID (OLEUI_ERR_STANDARDMAX+1)
+#define OLEUI_IOERR_ARRLINKTYPESINVALID (OLEUI_ERR_STANDARDMAX+2)
+#define OLEUI_PSERR_CLIPBOARDCHANGED (OLEUI_ERR_STANDARDMAX+3)
+#define OLEUI_PSERR_GETCLIPBOARDFAILED (OLEUI_ERR_STANDARDMAX+4)
+
+/* Paste Special dialog resource ids */
+#define IDD_PASTESPECIAL 1003
+#define IDD_PASTESPECIAL4 1108
+
+/* Paste Special dialog control ids */
+#define IDC_PS_PASTE 500
+#define IDC_PS_PASTELINK 501
+#define IDC_PS_SOURCETEXT 502
+#define IDC_PS_PASTELIST 503
+#define IDC_PS_PASTELINKLIST 504
+#define IDC_PS_DISPLAYLIST 505
+#define IDC_PS_DISPLAYASICON 506
+#define IDC_PS_ICONDISPLAY 507
+#define IDC_PS_CHANGEICON 508
+#define IDC_PS_RESULTIMAGE 509
+#define IDC_PS_RESULTTEXT 510
+
+/*****************************************************************************
+ * EDIT LINKS DIALOG
+ */
+
+#define ELF_SHOWHELP __MSABI_LONG(0x00000001)
+#define ELF_DISABLEUPDATENOW __MSABI_LONG(0x00000002)
+#define ELF_DISABLEOPENSOURCE __MSABI_LONG(0x00000004)
+#define ELF_DISABLECHANGESOURCE __MSABI_LONG(0x00000008)
+#define ELF_DISABLECANCELLINK __MSABI_LONG(0x00000010)
+
+typedef struct tagOLEUIEDITLINKSW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ LPOLEUILINKCONTAINERW lpOleUILinkContainer;
+} OLEUIEDITLINKSW, *POLEUIEDITLINKSW, *LPOLEUIEDITLINKSW;
+
+typedef struct tagOLEUIEDITLINKSA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ LPOLEUILINKCONTAINERA lpOleUILinkContainer;
+} OLEUIEDITLINKSA, *POLEUIEDITLINKSA, *LPOLEUIEDITLINKSA;
+
+DECL_WINELIB_TYPE_AW(OLEUIEDITLINKS)
+DECL_WINELIB_TYPE_AW(POLEUIEDITLINKS)
+DECL_WINELIB_TYPE_AW(LPOLEUIEDITLINKS)
+
+
+/***********************************************************************************
+ * BUSY DIALOG
+ */
+typedef struct tagOLEUIBUSYA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ HTASK hTask;
+ HWND* lphWndDialog;
+} OLEUIBUSYA, *POLEUIBUSYA, *LPOLEUIBUSYA;
+
+typedef struct tagOLEUIBUSYW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ HTASK hTask;
+ HWND* lphWndDialog;
+} OLEUIBUSYW, *POLEUIBUSYW, *LPOLEUIBUSYW;
+
+DECL_WINELIB_TYPE_AW(OLEUIBUSY)
+DECL_WINELIB_TYPE_AW(POLEUIBUSY)
+DECL_WINELIB_TYPE_AW(LPOLEUIBUSY)
+
+
+#define BZ_DISABLECANCELBUTTON __MSABI_LONG(0x00000001)
+#define BZ_DISABLESWITCHTOBUTTON __MSABI_LONG(0x00000002)
+#define BZ_DISABLERETRYBUTTON __MSABI_LONG(0x00000004)
+#define BZ_NOTRESPONDINGDIALOG __MSABI_LONG(0x00000008)
+
+/***********************************************************************************
+ * OBJECT PROPERTIES DIALOG
+ */
+
+struct tagOLEUIOBJECTPROPSW;
+struct tagOLEUIOBJECTPROPSA;
+
+typedef struct tagOLEUIGNRLPROPSA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSA* lpOP;
+
+} OLEUIGNRLPROPSA, *POLEUIGNRLPROPSA, *LPOLEUIGNRLPROPSA;
+
+typedef struct tagOLEUIGNRLPROPSW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSW* lpOP;
+} OLEUIGNRLPROPSW, *POLEUIGNRLPROPSW, *LPOLEUIGNRLPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUIGNRLPROPS)
+DECL_WINELIB_TYPE_AW(POLEUIGNRLPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUIGNRLPROPS)
+
+typedef struct tagOLEUIVIEWPROPSA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSA* lpOP;
+ INT nScaleMin;
+ INT nScaleMax;
+} OLEUIVIEWPROPSA, *POLEUIVIEWPROPSA, *LPOLEUIVIEWPROPSA;
+
+typedef struct tagOLEUIVIEWPROPSW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSW* lpOP;
+ INT nScaleMin;
+ INT nScaleMax;
+} OLEUIVIEWPROPSW, *POLEUIVIEWPROPSW, *LPOLEUIVIEWPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUIVIEWPROPS)
+DECL_WINELIB_TYPE_AW(POLEUIVIEWPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUIVIEWPROPS)
+
+
+#define VPF_SELECTRELATIVE __MSABI_LONG(0x00000001)
+#define VPF_DISABLERELATIVE __MSABI_LONG(0x00000002)
+#define VPF_DISABLESCALE __MSABI_LONG(0x00000004)
+
+typedef struct tagOLEUILINKPROPSA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSA* lpOP;
+} OLEUILINKPROPSA, *POLEUILINKPROPSA, *LPOLEUILINKPROPSA;
+
+typedef struct tagOLEUILINKPROPSW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ DWORD dwReserved1[2];
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ DWORD dwReserved2[3];
+ struct tagOLEUIOBJECTPROPSW* lpOP;
+} OLEUILINKPROPSW, *POLEUILINKPROPSW, *LPOLEUILINKPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUILINKPROPS)
+DECL_WINELIB_TYPE_AW(POLEUILINKPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUILINKPROPS)
+
+typedef struct tagOLEUIOBJECTPROPSA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ LPPROPSHEETHEADERA lpPS;
+ DWORD dwObject;
+ LPOLEUIOBJINFOA lpObjInfo;
+ DWORD dwLink;
+ LPOLEUILINKINFOA lpLinkInfo;
+ LPOLEUIGNRLPROPSA lpGP;
+ LPOLEUIVIEWPROPSA lpVP;
+ LPOLEUILINKPROPSA lpLP;
+} OLEUIOBJECTPROPSA, *POLEUIOBJECTPROPSA, *LPOLEUIOBJECTPROPSA;
+
+typedef struct tagOLEUIOBJECTPROPSW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ LPPROPSHEETHEADERW lpPS;
+ DWORD dwObject;
+ LPOLEUIOBJINFOW lpObjInfo;
+ DWORD dwLink;
+ LPOLEUILINKINFOW lpLinkInfo;
+ LPOLEUIGNRLPROPSW lpGP;
+ LPOLEUIVIEWPROPSW lpVP;
+ LPOLEUILINKPROPSW lpLP;
+} OLEUIOBJECTPROPSW, *POLEUIOBJECTPROPSW, *LPOLEUIOBJECTPROPSW;
+
+DECL_WINELIB_TYPE_AW(OLEUIOBJECTPROPS)
+DECL_WINELIB_TYPE_AW(POLEUIOBJECTPROPS)
+DECL_WINELIB_TYPE_AW(LPOLEUIOBJECTPROPS)
+
+#define OPF_OBJECTISLINK __MSABI_LONG(0x00000001)
+#define OPF_NOFILLDEFAULT __MSABI_LONG(0x00000002)
+#define OPF_SHOWHELP __MSABI_LONG(0x00000004)
+#define OPF_DISABLECONVERT __MSABI_LONG(0x00000008)
+
+
+/************************************************************************************
+ * CHANGE SOURCE DIALOG
+ */
+
+
+typedef struct tagOLEUICHANGESOURCEW
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCWSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCWSTR lpszTemplate;
+ HRSRC hResource;
+ OPENFILENAMEW*lpOFN;
+ DWORD dwReserved1[4];
+ LPOLEUILINKCONTAINERW lpOleUILinkContainer;
+ DWORD dwLink;
+ LPWSTR lpszDisplayName;
+ ULONG nFileLength;
+ LPWSTR lpszFrom;
+ LPWSTR lpszTo;
+} OLEUICHANGESOURCEW, *POLEUICHANGESOURCEW, *LPOLEUICHANGESOURCEW;
+
+
+typedef struct tagOLEUICHANGESOURCEA
+{
+ DWORD cbStruct;
+ DWORD dwFlags;
+ HWND hWndOwner;
+ LPCSTR lpszCaption;
+ LPFNOLEUIHOOK lpfnHook;
+ LPARAM lCustData;
+ HINSTANCE hInstance;
+ LPCSTR lpszTemplate;
+ HRSRC hResource;
+ OPENFILENAMEA* lpOFN;
+ DWORD dwReserved1[4];
+ LPOLEUILINKCONTAINERA lpOleUILinkContainer;
+ DWORD dwLink;
+ LPSTR lpszDisplayName;
+ ULONG nFileLength;
+ LPSTR lpszFrom;
+ LPSTR lpszTo;
+} OLEUICHANGESOURCEA, *POLEUICHANGESOURCEA, *LPOLEUICHANGESOURCEA;
+
+
+DECL_WINELIB_TYPE_AW(OLEUICHANGESOURCE)
+DECL_WINELIB_TYPE_AW(POLEUICHANGESOURCE)
+DECL_WINELIB_TYPE_AW(LPOLEUICHANGESOURCE)
+
+/* Change Source Dialog flags */
+#define CSF_SHOWHELP __MSABI_LONG(0x00000001)
+#define CSF_VALIDSOURCE __MSABI_LONG(0x00000002)
+#define CSF_ONLYGETSOURCE __MSABI_LONG(0x00000004)
+#define CSF_EXPLORER __MSABI_LONG(0x00000008)
+
+
+/*****************************************************************************
+ * IOleUILinkContainer interface
+ */
+#define INTERFACE IOleUILinkContainerA
+DECLARE_INTERFACE_(IOleUILinkContainerA,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IOleUILinkContainerA methods ***/
+ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
+ STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
+ STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,
+ ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
+ STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,
+ LPSTR *lplpszFullLinkType, LPSTR *lplpszShortLinkType,
+ BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE;
+ STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+ STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IOleUILinkContainerW
+DECLARE_INTERFACE_(IOleUILinkContainerW,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IOleUILinkContainerW methods ***/
+ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
+ STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
+ STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPWSTR lpszDisplayName,
+ ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
+ STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,
+ LPWSTR *lplpszFullLinkType, LPWSTR *lplpszShortLinkType,
+ BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE;
+ STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+ STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(IOleUILinkContainer)
+DECL_WINELIB_TYPE_AW(POLEUILINKCONTAINER)
+DECL_WINELIB_TYPE_AW(LPOLEUILINKCONTAINER)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IOleUILinkContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleUILinkContainer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IOleUILinkContainer_Release(p) (p)->lpVtbl->Release(p)
+/*** IOleUILinkContainer methods ***/
+#define IOleUILinkContainer_GetNextLink(p,a) (p)->lpVtbl->GetNextLink(p,a)
+#define IOleUILinkContainer_SetLinkUpdateOptions(p,a,b) (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)
+#define IOleUILinkContainer_GetLinkUpdateOptions(p,a,b) (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)
+#define IOleUILinkContainer_SetLinkSource(p,a,b,c,d,e) (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)
+#define IOleUILinkContainer_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)
+#define IOleUILinkContainer_OpenLinkSource(p,a) (p)->lpVtbl->OpenLinkSource(p,a)
+#define IOleUILinkContainer_UpdateLink(p,a,b,c) (p)->lpVtbl->UpdateLink(p,a,b,c)
+#define IOleUILinkContainer_CancelLink(p,a) (p)->lpVtbl->CancelLink(p,a)
+#endif
+
+
+/*****************************************************************************
+ * IOleUILinkInfo interface
+ */
+#define INTERFACE IOleUILinkInfoA
+DECLARE_INTERFACE_(IOleUILinkInfoA,IOleUILinkContainerA)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IOleUILinkContainerA methods ***/
+ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
+ STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
+ STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPSTR lpszDisplayName,
+ ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
+ STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName,
+ LPSTR *lplpszFullLinkType, LPSTR *lplpszShortLinkType,
+ BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE;
+ STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+ STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+ /*** IOleUILinkInfoA methods ***/
+ STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink, FILETIME *lpLastUpdate) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IOleUILinkInfoW
+DECLARE_INTERFACE_(IOleUILinkInfoW,IOleUILinkContainerW)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IOleUILinkContainerW methods ***/
+ STDMETHOD_(DWORD,GetNextLink)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(SetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
+ STDMETHOD(GetLinkUpdateOptions)(THIS_ DWORD dwLink, DWORD *lpdwUpdateOpt) PURE;
+ STDMETHOD(SetLinkSource)(THIS_ DWORD dwLink, LPWSTR lpszDisplayName,
+ ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource) PURE;
+ STDMETHOD(GetLinkSource)(THIS_ DWORD dwLink, LPWSTR *lplpszDisplayName, ULONG *lplenFileName,
+ LPWSTR *lplpszFullLinkType, LPWSTR *lplpszShortLinkType,
+ BOOL *lpfSourceAvailable, BOOL *lpfIsSelected) PURE;
+ STDMETHOD(OpenLinkSource)(THIS_ DWORD dwLink) PURE;
+ STDMETHOD(UpdateLink)(THIS_ DWORD dwLink, BOOL fErrorMessage, BOOL fReserved) PURE;
+ STDMETHOD(CancelLink)(THIS_ DWORD dwLink) PURE;
+ /*** IOleUILinkInfoW methods ***/
+ STDMETHOD(GetLastUpdate)(THIS_ DWORD dwLink, FILETIME *lpLastUpdate) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(IOleUILinkInfo)
+DECL_WINELIB_TYPE_AW(POLEUILINKINFO)
+DECL_WINELIB_TYPE_AW(LPOLEUILINKINFO)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IOleUILinkInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleUILinkInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IOleUILinkInfo_Release(p) (p)->lpVtbl->Release(p)
+/*** IOleUILinkContainer methods ***/
+#define IOleUILinkInfo_GetNextLink(p,a) (p)->lpVtbl->GetNextLink(p,a)
+#define IOleUILinkInfo_SetLinkUpdateOptions(p,a,b) (p)->lpVtbl->SetLinkUpdateOptions(p,a,b)
+#define IOleUILinkInfo_GetLinkUpdateOptions(p,a,b) (p)->lpVtbl->GetLinkUpdateOptions(p,a,b)
+#define IOleUILinkInfo_SetLinkSource(p,a,b,c,d,e) (p)->lpVtbl->SetLinkSource(p,a,b,c,d,e)
+#define IOleUILinkInfo_GetLinkSource(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetLinkSource(p,a,b,c,d,e,f,g)
+#define IOleUILinkInfo_OpenLinkSource(p,a) (p)->lpVtbl->OpenLinkSource(p,a)
+#define IOleUILinkInfo_UpdateLink(p,a,b,c) (p)->lpVtbl->UpdateLink(p,a,b,c)
+#define IOleUILinkInfo_CancelLink(p,a) (p)->lpVtbl->CancelLink(p,a)
+/*** IOleUILinkInfo methods ***/
+#define IOleUILinkInfo_GetLastUpdate(p,a,b) (p)->lpVtbl->GetLastUpdate(p,a,b)
+#endif
+
+
+/*****************************************************************************
+ * IOleUIObjInfo interface
+ */
+#define INTERFACE IOleUIObjInfoA
+DECLARE_INTERFACE_(IOleUIObjInfoA,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IOleUIObjInfoA methods ***/
+ STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPSTR *lplpszLabel,
+ LPSTR *lplpszType, LPSTR *lplpszShortType, LPSTR *lplpszLocation) PURE;
+ STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,
+ CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;
+ STDMETHOD(ConvertObject)(THIS_ DWORD dwObject, REFCLSID clsidNew) PURE;
+ STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;
+ STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,
+ INT nCurrentScale, BOOL bRelativeToOrig) PURE;
+};
+#undef INTERFACE
+
+#define INTERFACE IOleUIObjInfoW
+DECLARE_INTERFACE_(IOleUIObjInfoW,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IOleUIObjInfoW methods ***/
+ STDMETHOD(GetObjectInfo)(THIS_ DWORD dwObject, DWORD *lpdwObjSize, LPWSTR *lplpszLabel,
+ LPWSTR *lplpszType, LPWSTR *lplpszShortType, LPWSTR *lplpszLocation) PURE;
+ STDMETHOD(GetConvertInfo)(THIS_ DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat,
+ CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT *lpcClsidExclude) PURE;
+ STDMETHOD(ConvertObject)(THIS_ DWORD dwObject, REFCLSID clsidNew) PURE;
+ STDMETHOD(GetViewInfo)(THIS_ DWORD dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, INT *pnCurrentScale) PURE;
+ STDMETHOD(SetViewInfo)(THIS_ DWORD dwObject, HGLOBAL hMetaPict, DWORD dvAspect,
+ INT nCurrentScale, BOOL bRelativeToOrig) PURE;
+};
+#undef INTERFACE
+
+DECL_WINELIB_TYPE_AW(IOleUIObjInfo)
+DECL_WINELIB_TYPE_AW(POLEUIOBJINFO)
+DECL_WINELIB_TYPE_AW(LPOLEUIOBJINFO)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IOleUIObjInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IOleUIObjInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IOleUIObjInfo_Release(p) (p)->lpVtbl->Release(p)
+/*** IOleUIObjInfo methods ***/
+#define IOleUIObjInfo_GetObjectInfo(p,a,b,c,d,e,f) (p)->lpVtbl->GetObjectInfo(p,a,b,c,d,e,f)
+#define IOleUIObjInfo_GetConvertInfo(p,a,b,c,d,e,f) (p)->lpVtbl->GetConvertInfo(p,a,b,c,d,e,f)
+#define IOleUIObjInfo_ConvertObject(p,a,b) (p)->lpVtbl->ConvertObject(p,a,b)
+#define IOleUIObjInfo_GetViewInfo(p,a,b,c,d) (p)->lpVtbl->GetViewInfo(p,a,b,c,d)
+#define IOleUIObjInfo_SetViewInfo(p,a,b,c,d,e) (p)->lpVtbl->SetViewInfo(p,a,b,c,d,e)
+#endif
+
+UINT WINAPI OleUIInsertObjectW(LPOLEUIINSERTOBJECTW);
+UINT WINAPI OleUIInsertObjectA(LPOLEUIINSERTOBJECTA);
+#define OleUIInsertObject WINELIB_NAME_AW(OleUIInsertObject)
+UINT WINAPI OleUIConvertA(LPOLEUICONVERTA);
+UINT WINAPI OleUIConvertW(LPOLEUICONVERTW);
+#define OleUIConvert WINELIB_NAME_AW(OleUIConvert)
+UINT WINAPI OleUIChangeIconA(LPOLEUICHANGEICONA);
+UINT WINAPI OleUIChangeIconW(LPOLEUICHANGEICONW);
+#define OleUIChangeIcon WINELIB_NAME_AW(OleUIChangeIcon)
+UINT WINAPI OleUIBusyA(LPOLEUIBUSYA);
+UINT WINAPI OleUIBusyW(LPOLEUIBUSYW);
+#define OleUIBusy WINELIB_NAME_AW(OleUIBusy)
+UINT WINAPI OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA);
+UINT WINAPI OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW);
+#define OleUIObjectProperties WINELIB_NAME_AW(OleUIObjectProperties)
+UINT WINAPI OleUIChangeSourceW(LPOLEUICHANGESOURCEW);
+UINT WINAPI OleUIChangeSourceA(LPOLEUICHANGESOURCEA);
+#define OleUIChangeSource WINELIB_NAME_AW(OleUIChangeSource)
+UINT WINAPI OleUIEditLinksA(LPOLEUIEDITLINKSA lpOleUIEditLinks);
+UINT WINAPI OleUIEditLinksW(LPOLEUIEDITLINKSW lpOleUIEditLinks);
+#define OleUIEditLinks WINELIB_NAME_AW(OleUIEditLinks)
+BOOL WINAPI OleUIUpdateLinksA(LPOLEUILINKCONTAINERA lpOleUILinkCntr, HWND hwndParent, LPSTR lpszTitle, INT cLinks);
+BOOL WINAPI OleUIUpdateLinksW(LPOLEUILINKCONTAINERW lpOleUILinkCntr, HWND hwndParent, LPWSTR lpszTitle, INT cLinks);
+#define OleUIUpdateLinks WINELIB_NAME_AW(OleUIUpdateLinks)
+BOOL WINAPI OleUIAddVerbMenuA(LPOLEOBJECT lpOleObj, LPCSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
+ BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);
+BOOL WINAPI OleUIAddVerbMenuW(LPOLEOBJECT lpOleObj, LPCWSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
+ BOOL bAddConvert, UINT idConvert, HMENU *lphMenu);
+#define OleUIAddVerbMenu WINELIB_NAME_AW(OleUIAddVerbMenu)
+UINT WINAPI OleUIPasteSpecialA(LPOLEUIPASTESPECIALA lpOleUIPasteSpecial);
+UINT WINAPI OleUIPasteSpecialW(LPOLEUIPASTESPECIALW lpOleUIPasteSpecial);
+#define OleUIPasteSpecial WINELIB_NAME_AW(OleUIPasteSpecial)
+INT __cdecl OleUIPromptUserA(INT,HWND, ...);
+INT __cdecl OleUIPromptUserW(INT,HWND, ...);
+#define OleUIPromptUser WINELIB_NAME_AW(OleUIPromptUser)
+
+#ifdef __cplusplus
+} /* Extern "C" */
+#endif
+
+
+#endif /* __WINE_OLEDLG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h
new file mode 100644
index 00000000..3c39c58b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.h
@@ -0,0 +1,3645 @@
+/*** Autogenerated by WIDL 1.1.36 from oleidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_OLEIDL_H
+#define __WIDL_OLEIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IOleWindow_FWD_DEFINED__
+#define __IOleWindow_FWD_DEFINED__
+typedef interface IOleWindow IOleWindow;
+#endif
+
+#ifndef __IOleInPlaceObject_FWD_DEFINED__
+#define __IOleInPlaceObject_FWD_DEFINED__
+typedef interface IOleInPlaceObject IOleInPlaceObject;
+#endif
+
+#ifndef __IOleInPlaceUIWindow_FWD_DEFINED__
+#define __IOleInPlaceUIWindow_FWD_DEFINED__
+typedef interface IOleInPlaceUIWindow IOleInPlaceUIWindow;
+#endif
+
+#ifndef __IOleInPlaceFrame_FWD_DEFINED__
+#define __IOleInPlaceFrame_FWD_DEFINED__
+typedef interface IOleInPlaceFrame IOleInPlaceFrame;
+#endif
+
+#ifndef __IOleInPlaceActiveObject_FWD_DEFINED__
+#define __IOleInPlaceActiveObject_FWD_DEFINED__
+typedef interface IOleInPlaceActiveObject IOleInPlaceActiveObject;
+#endif
+
+#ifndef __IOleInPlaceSite_FWD_DEFINED__
+#define __IOleInPlaceSite_FWD_DEFINED__
+typedef interface IOleInPlaceSite IOleInPlaceSite;
+#endif
+
+#ifndef __IParseDisplayName_FWD_DEFINED__
+#define __IParseDisplayName_FWD_DEFINED__
+typedef interface IParseDisplayName IParseDisplayName;
+#endif
+
+#ifndef __IOleContainer_FWD_DEFINED__
+#define __IOleContainer_FWD_DEFINED__
+typedef interface IOleContainer IOleContainer;
+#endif
+
+#ifndef __IOleItemContainer_FWD_DEFINED__
+#define __IOleItemContainer_FWD_DEFINED__
+typedef interface IOleItemContainer IOleItemContainer;
+#endif
+
+#ifndef __IOleLink_FWD_DEFINED__
+#define __IOleLink_FWD_DEFINED__
+typedef interface IOleLink IOleLink;
+#endif
+
+#ifndef __IOleClientSite_FWD_DEFINED__
+#define __IOleClientSite_FWD_DEFINED__
+typedef interface IOleClientSite IOleClientSite;
+#endif
+
+#ifndef __IOleCache_FWD_DEFINED__
+#define __IOleCache_FWD_DEFINED__
+typedef interface IOleCache IOleCache;
+#endif
+
+#ifndef __IOleCache2_FWD_DEFINED__
+#define __IOleCache2_FWD_DEFINED__
+typedef interface IOleCache2 IOleCache2;
+#endif
+
+#ifndef __IOleCacheControl_FWD_DEFINED__
+#define __IOleCacheControl_FWD_DEFINED__
+typedef interface IOleCacheControl IOleCacheControl;
+#endif
+
+#ifndef __IEnumOLEVERB_FWD_DEFINED__
+#define __IEnumOLEVERB_FWD_DEFINED__
+typedef interface IEnumOLEVERB IEnumOLEVERB;
+#endif
+
+#ifndef __IOleObject_FWD_DEFINED__
+#define __IOleObject_FWD_DEFINED__
+typedef interface IOleObject IOleObject;
+#endif
+
+#ifndef __IOleAdviseHolder_FWD_DEFINED__
+#define __IOleAdviseHolder_FWD_DEFINED__
+typedef interface IOleAdviseHolder IOleAdviseHolder;
+#endif
+
+#ifndef __IContinue_FWD_DEFINED__
+#define __IContinue_FWD_DEFINED__
+typedef interface IContinue IContinue;
+#endif
+
+#ifndef __IViewObject_FWD_DEFINED__
+#define __IViewObject_FWD_DEFINED__
+typedef interface IViewObject IViewObject;
+#endif
+
+#ifndef __IViewObject2_FWD_DEFINED__
+#define __IViewObject2_FWD_DEFINED__
+typedef interface IViewObject2 IViewObject2;
+#endif
+
+#ifndef __IDropSource_FWD_DEFINED__
+#define __IDropSource_FWD_DEFINED__
+typedef interface IDropSource IDropSource;
+#endif
+
+#ifndef __IDropTarget_FWD_DEFINED__
+#define __IDropTarget_FWD_DEFINED__
+typedef interface IDropTarget IDropTarget;
+#endif
+
+
+#ifndef __IOleInPlaceActiveObject_FWD_DEFINED__
+#define __IOleInPlaceActiveObject_FWD_DEFINED__
+typedef interface IOleInPlaceActiveObject IOleInPlaceActiveObject;
+#endif
+
+#include <winuser.h>
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+/*****************************************************************************
+ * IOLETypes interface (v0.0)
+ */
+#ifndef __IOLETypes_INTERFACE_DEFINED__
+#define __IOLETypes_INTERFACE_DEFINED__
+
+extern RPC_IF_HANDLE IOLETypes_v0_0_c_ifspec;
+extern RPC_IF_HANDLE IOLETypes_v0_0_s_ifspec;
+typedef enum tagOLERENDER {
+ OLERENDER_NONE = 0,
+ OLERENDER_DRAW = 1,
+ OLERENDER_FORMAT = 2,
+ OLERENDER_ASIS = 3
+} OLERENDER;
+typedef enum tagOLERENDER *LPOLERENDER;
+typedef struct tagOBJECTDESCRIPTOR {
+ ULONG cbSize;
+ CLSID clsid;
+ DWORD dwDrawAspect;
+ SIZEL sizel;
+ POINTL pointl;
+ DWORD dwStatus;
+ DWORD dwFullUserTypeName;
+ DWORD dwSrcOfCopy;
+} OBJECTDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *POBJECTDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *LPOBJECTDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR LINKSRCDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *PLINKSRCDESCRIPTOR;
+typedef struct tagOBJECTDESCRIPTOR *LPLINKSRCDESCRIPTOR;
+
+#endif /* __IOLETypes_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleWindow interface
+ */
+#ifndef __IOleWindow_INTERFACE_DEFINED__
+#define __IOleWindow_INTERFACE_DEFINED__
+
+typedef IOleWindow *LPOLEWINDOW;
+DEFINE_GUID(IID_IOleWindow, 0x00000114, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleWindow : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetWindow(
+ HWND *phwnd) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(
+ BOOL fEnterMode) = 0;
+
+};
+#else
+typedef struct IOleWindowVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleWindow* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleWindow* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleWindow* This);
+
+ /*** IOleWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IOleWindow* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+ IOleWindow* This,
+ BOOL fEnterMode);
+
+ END_INTERFACE
+} IOleWindowVtbl;
+interface IOleWindow {
+ CONST_VTBL IOleWindowVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleWindow_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleWindow_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleWindow_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleWindow_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleWindow_GetWindow_Proxy(
+ IOleWindow* This,
+ HWND *phwnd);
+void __RPC_STUB IOleWindow_GetWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleWindow_ContextSensitiveHelp_Proxy(
+ IOleWindow* This,
+ BOOL fEnterMode);
+void __RPC_STUB IOleWindow_ContextSensitiveHelp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleWindow_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceObject interface
+ */
+#ifndef __IOleInPlaceObject_INTERFACE_DEFINED__
+#define __IOleInPlaceObject_INTERFACE_DEFINED__
+
+typedef IOleInPlaceObject *LPOLEINPLACEOBJECT;
+DEFINE_GUID(IID_IOleInPlaceObject, 0x00000113, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceObject : public IOleWindow
+{
+ virtual HRESULT STDMETHODCALLTYPE InPlaceDeactivate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UIDeactivate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetObjectRects(
+ LPCRECT lprcPosRect,
+ LPCRECT lprcClipRect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReactivateAndUndo(
+ ) = 0;
+
+};
+#else
+typedef struct IOleInPlaceObjectVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleInPlaceObject* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleInPlaceObject* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleInPlaceObject* This);
+
+ /*** IOleWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IOleInPlaceObject* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+ IOleInPlaceObject* This,
+ BOOL fEnterMode);
+
+ /*** IOleInPlaceObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *InPlaceDeactivate)(
+ IOleInPlaceObject* This);
+
+ HRESULT (STDMETHODCALLTYPE *UIDeactivate)(
+ IOleInPlaceObject* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetObjectRects)(
+ IOleInPlaceObject* This,
+ LPCRECT lprcPosRect,
+ LPCRECT lprcClipRect);
+
+ HRESULT (STDMETHODCALLTYPE *ReactivateAndUndo)(
+ IOleInPlaceObject* This);
+
+ END_INTERFACE
+} IOleInPlaceObjectVtbl;
+interface IOleInPlaceObject {
+ CONST_VTBL IOleInPlaceObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceObject_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceObject_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceObject methods ***/
+#define IOleInPlaceObject_InPlaceDeactivate(This) (This)->lpVtbl->InPlaceDeactivate(This)
+#define IOleInPlaceObject_UIDeactivate(This) (This)->lpVtbl->UIDeactivate(This)
+#define IOleInPlaceObject_SetObjectRects(This,lprcPosRect,lprcClipRect) (This)->lpVtbl->SetObjectRects(This,lprcPosRect,lprcClipRect)
+#define IOleInPlaceObject_ReactivateAndUndo(This) (This)->lpVtbl->ReactivateAndUndo(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_InPlaceDeactivate_Proxy(
+ IOleInPlaceObject* This);
+void __RPC_STUB IOleInPlaceObject_InPlaceDeactivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_UIDeactivate_Proxy(
+ IOleInPlaceObject* This);
+void __RPC_STUB IOleInPlaceObject_UIDeactivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_SetObjectRects_Proxy(
+ IOleInPlaceObject* This,
+ LPCRECT lprcPosRect,
+ LPCRECT lprcClipRect);
+void __RPC_STUB IOleInPlaceObject_SetObjectRects_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceObject_ReactivateAndUndo_Proxy(
+ IOleInPlaceObject* This);
+void __RPC_STUB IOleInPlaceObject_ReactivateAndUndo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleInPlaceObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceUIWindow interface
+ */
+#ifndef __IOleInPlaceUIWindow_INTERFACE_DEFINED__
+#define __IOleInPlaceUIWindow_INTERFACE_DEFINED__
+
+typedef IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
+typedef RECT BORDERWIDTHS;
+typedef LPRECT LPBORDERWIDTHS;
+typedef LPCRECT LPCBORDERWIDTHS;
+DEFINE_GUID(IID_IOleInPlaceUIWindow, 0x00000115, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceUIWindow : public IOleWindow
+{
+ virtual HRESULT STDMETHODCALLTYPE GetBorder(
+ LPRECT lprectBorder) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RequestBorderSpace(
+ LPCBORDERWIDTHS pborderwidths) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetBorderSpace(
+ LPCBORDERWIDTHS pborderwidths) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetActiveObject(
+ IOleInPlaceActiveObject *pActiveObject,
+ LPCOLESTR pszObjName) = 0;
+
+};
+#else
+typedef struct IOleInPlaceUIWindowVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleInPlaceUIWindow* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleInPlaceUIWindow* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleInPlaceUIWindow* This);
+
+ /*** IOleWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IOleInPlaceUIWindow* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+ IOleInPlaceUIWindow* This,
+ BOOL fEnterMode);
+
+ /*** IOleInPlaceUIWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBorder)(
+ IOleInPlaceUIWindow* This,
+ LPRECT lprectBorder);
+
+ HRESULT (STDMETHODCALLTYPE *RequestBorderSpace)(
+ IOleInPlaceUIWindow* This,
+ LPCBORDERWIDTHS pborderwidths);
+
+ HRESULT (STDMETHODCALLTYPE *SetBorderSpace)(
+ IOleInPlaceUIWindow* This,
+ LPCBORDERWIDTHS pborderwidths);
+
+ HRESULT (STDMETHODCALLTYPE *SetActiveObject)(
+ IOleInPlaceUIWindow* This,
+ IOleInPlaceActiveObject *pActiveObject,
+ LPCOLESTR pszObjName);
+
+ END_INTERFACE
+} IOleInPlaceUIWindowVtbl;
+interface IOleInPlaceUIWindow {
+ CONST_VTBL IOleInPlaceUIWindowVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceUIWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceUIWindow_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceUIWindow_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceUIWindow_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceUIWindow_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceUIWindow methods ***/
+#define IOleInPlaceUIWindow_GetBorder(This,lprectBorder) (This)->lpVtbl->GetBorder(This,lprectBorder)
+#define IOleInPlaceUIWindow_RequestBorderSpace(This,pborderwidths) (This)->lpVtbl->RequestBorderSpace(This,pborderwidths)
+#define IOleInPlaceUIWindow_SetBorderSpace(This,pborderwidths) (This)->lpVtbl->SetBorderSpace(This,pborderwidths)
+#define IOleInPlaceUIWindow_SetActiveObject(This,pActiveObject,pszObjName) (This)->lpVtbl->SetActiveObject(This,pActiveObject,pszObjName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_GetBorder_Proxy(
+ IOleInPlaceUIWindow* This,
+ LPRECT lprectBorder);
+void __RPC_STUB IOleInPlaceUIWindow_GetBorder_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_RequestBorderSpace_Proxy(
+ IOleInPlaceUIWindow* This,
+ LPCBORDERWIDTHS pborderwidths);
+void __RPC_STUB IOleInPlaceUIWindow_RequestBorderSpace_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_SetBorderSpace_Proxy(
+ IOleInPlaceUIWindow* This,
+ LPCBORDERWIDTHS pborderwidths);
+void __RPC_STUB IOleInPlaceUIWindow_SetBorderSpace_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceUIWindow_SetActiveObject_Proxy(
+ IOleInPlaceUIWindow* This,
+ IOleInPlaceActiveObject *pActiveObject,
+ LPCOLESTR pszObjName);
+void __RPC_STUB IOleInPlaceUIWindow_SetActiveObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleInPlaceUIWindow_INTERFACE_DEFINED__ */
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef TranslateAccelerator
+#endif
+/*****************************************************************************
+ * IOleInPlaceFrame interface
+ */
+#ifndef __IOleInPlaceFrame_INTERFACE_DEFINED__
+#define __IOleInPlaceFrame_INTERFACE_DEFINED__
+
+typedef IOleInPlaceFrame *LPOLEINPLACEFRAME;
+typedef struct tagOleInPlaceFrameInfo {
+ UINT cb;
+ BOOL fMDIApp;
+ HWND hwndFrame;
+ HACCEL haccel;
+ UINT cAccelEntries;
+} OLEINPLACEFRAMEINFO;
+typedef struct tagOleInPlaceFrameInfo *LPOLEINPLACEFRAMEINFO;
+typedef struct tagOleMenuGroupWidths {
+ LONG width[6];
+} OLEMENUGROUPWIDTHS;
+typedef struct tagOleMenuGroupWidths *LPOLEMENUGROUPWIDTHS;
+typedef HGLOBAL HOLEMENU;
+DEFINE_GUID(IID_IOleInPlaceFrame, 0x00000116, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceFrame : public IOleInPlaceUIWindow
+{
+ virtual HRESULT STDMETHODCALLTYPE InsertMenus(
+ HMENU hmenuShared,
+ LPOLEMENUGROUPWIDTHS lpMenuWidths) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMenu(
+ HMENU hmenuShared,
+ HOLEMENU holemenu,
+ HWND hwndActiveObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RemoveMenus(
+ HMENU hmenuShared) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetStatusText(
+ LPCOLESTR pszStatusText) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnableModeless(
+ BOOL fEnable) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
+ LPMSG lpmsg,
+ WORD wID) = 0;
+
+};
+#else
+typedef struct IOleInPlaceFrameVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleInPlaceFrame* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleInPlaceFrame* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleInPlaceFrame* This);
+
+ /*** IOleWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IOleInPlaceFrame* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+ IOleInPlaceFrame* This,
+ BOOL fEnterMode);
+
+ /*** IOleInPlaceUIWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBorder)(
+ IOleInPlaceFrame* This,
+ LPRECT lprectBorder);
+
+ HRESULT (STDMETHODCALLTYPE *RequestBorderSpace)(
+ IOleInPlaceFrame* This,
+ LPCBORDERWIDTHS pborderwidths);
+
+ HRESULT (STDMETHODCALLTYPE *SetBorderSpace)(
+ IOleInPlaceFrame* This,
+ LPCBORDERWIDTHS pborderwidths);
+
+ HRESULT (STDMETHODCALLTYPE *SetActiveObject)(
+ IOleInPlaceFrame* This,
+ IOleInPlaceActiveObject *pActiveObject,
+ LPCOLESTR pszObjName);
+
+ /*** IOleInPlaceFrame methods ***/
+ HRESULT (STDMETHODCALLTYPE *InsertMenus)(
+ IOleInPlaceFrame* This,
+ HMENU hmenuShared,
+ LPOLEMENUGROUPWIDTHS lpMenuWidths);
+
+ HRESULT (STDMETHODCALLTYPE *SetMenu)(
+ IOleInPlaceFrame* This,
+ HMENU hmenuShared,
+ HOLEMENU holemenu,
+ HWND hwndActiveObject);
+
+ HRESULT (STDMETHODCALLTYPE *RemoveMenus)(
+ IOleInPlaceFrame* This,
+ HMENU hmenuShared);
+
+ HRESULT (STDMETHODCALLTYPE *SetStatusText)(
+ IOleInPlaceFrame* This,
+ LPCOLESTR pszStatusText);
+
+ HRESULT (STDMETHODCALLTYPE *EnableModeless)(
+ IOleInPlaceFrame* This,
+ BOOL fEnable);
+
+ HRESULT (STDMETHODCALLTYPE *TranslateAccelerator)(
+ IOleInPlaceFrame* This,
+ LPMSG lpmsg,
+ WORD wID);
+
+ END_INTERFACE
+} IOleInPlaceFrameVtbl;
+interface IOleInPlaceFrame {
+ CONST_VTBL IOleInPlaceFrameVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceFrame_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceFrame_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceFrame_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceFrame_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceFrame_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceUIWindow methods ***/
+#define IOleInPlaceFrame_GetBorder(This,lprectBorder) (This)->lpVtbl->GetBorder(This,lprectBorder)
+#define IOleInPlaceFrame_RequestBorderSpace(This,pborderwidths) (This)->lpVtbl->RequestBorderSpace(This,pborderwidths)
+#define IOleInPlaceFrame_SetBorderSpace(This,pborderwidths) (This)->lpVtbl->SetBorderSpace(This,pborderwidths)
+#define IOleInPlaceFrame_SetActiveObject(This,pActiveObject,pszObjName) (This)->lpVtbl->SetActiveObject(This,pActiveObject,pszObjName)
+/*** IOleInPlaceFrame methods ***/
+#define IOleInPlaceFrame_InsertMenus(This,hmenuShared,lpMenuWidths) (This)->lpVtbl->InsertMenus(This,hmenuShared,lpMenuWidths)
+#define IOleInPlaceFrame_SetMenu(This,hmenuShared,holemenu,hwndActiveObject) (This)->lpVtbl->SetMenu(This,hmenuShared,holemenu,hwndActiveObject)
+#define IOleInPlaceFrame_RemoveMenus(This,hmenuShared) (This)->lpVtbl->RemoveMenus(This,hmenuShared)
+#define IOleInPlaceFrame_SetStatusText(This,pszStatusText) (This)->lpVtbl->SetStatusText(This,pszStatusText)
+#define IOleInPlaceFrame_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
+#define IOleInPlaceFrame_TranslateAccelerator(This,lpmsg,wID) (This)->lpVtbl->TranslateAccelerator(This,lpmsg,wID)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_InsertMenus_Proxy(
+ IOleInPlaceFrame* This,
+ HMENU hmenuShared,
+ LPOLEMENUGROUPWIDTHS lpMenuWidths);
+void __RPC_STUB IOleInPlaceFrame_InsertMenus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_SetMenu_Proxy(
+ IOleInPlaceFrame* This,
+ HMENU hmenuShared,
+ HOLEMENU holemenu,
+ HWND hwndActiveObject);
+void __RPC_STUB IOleInPlaceFrame_SetMenu_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_RemoveMenus_Proxy(
+ IOleInPlaceFrame* This,
+ HMENU hmenuShared);
+void __RPC_STUB IOleInPlaceFrame_RemoveMenus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_SetStatusText_Proxy(
+ IOleInPlaceFrame* This,
+ LPCOLESTR pszStatusText);
+void __RPC_STUB IOleInPlaceFrame_SetStatusText_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_EnableModeless_Proxy(
+ IOleInPlaceFrame* This,
+ BOOL fEnable);
+void __RPC_STUB IOleInPlaceFrame_EnableModeless_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceFrame_TranslateAccelerator_Proxy(
+ IOleInPlaceFrame* This,
+ LPMSG lpmsg,
+ WORD wID);
+void __RPC_STUB IOleInPlaceFrame_TranslateAccelerator_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleInPlaceFrame_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceActiveObject interface
+ */
+#ifndef __IOleInPlaceActiveObject_INTERFACE_DEFINED__
+#define __IOleInPlaceActiveObject_INTERFACE_DEFINED__
+
+typedef IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
+DEFINE_GUID(IID_IOleInPlaceActiveObject, 0x00000117, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceActiveObject : public IOleWindow
+{
+ virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(
+ LPMSG lpmsg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(
+ BOOL fActivate) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate(
+ BOOL fActivate) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ResizeBorder(
+ LPCRECT prcBorder,
+ IOleInPlaceUIWindow *pUIWindow,
+ BOOL fFrameWindow) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnableModeless(
+ BOOL fEnable) = 0;
+
+};
+#else
+typedef struct IOleInPlaceActiveObjectVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleInPlaceActiveObject* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleInPlaceActiveObject* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleInPlaceActiveObject* This);
+
+ /*** IOleWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IOleInPlaceActiveObject* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+ IOleInPlaceActiveObject* This,
+ BOOL fEnterMode);
+
+ /*** IOleInPlaceActiveObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *TranslateAccelerator)(
+ IOleInPlaceActiveObject* This,
+ LPMSG lpmsg);
+
+ HRESULT (STDMETHODCALLTYPE *OnFrameWindowActivate)(
+ IOleInPlaceActiveObject* This,
+ BOOL fActivate);
+
+ HRESULT (STDMETHODCALLTYPE *OnDocWindowActivate)(
+ IOleInPlaceActiveObject* This,
+ BOOL fActivate);
+
+ HRESULT (STDMETHODCALLTYPE *ResizeBorder)(
+ IOleInPlaceActiveObject* This,
+ LPCRECT prcBorder,
+ IOleInPlaceUIWindow *pUIWindow,
+ BOOL fFrameWindow);
+
+ HRESULT (STDMETHODCALLTYPE *EnableModeless)(
+ IOleInPlaceActiveObject* This,
+ BOOL fEnable);
+
+ END_INTERFACE
+} IOleInPlaceActiveObjectVtbl;
+interface IOleInPlaceActiveObject {
+ CONST_VTBL IOleInPlaceActiveObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceActiveObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceActiveObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceActiveObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceActiveObject_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceActiveObject_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceActiveObject methods ***/
+#define IOleInPlaceActiveObject_TranslateAccelerator(This,lpmsg) (This)->lpVtbl->TranslateAccelerator(This,lpmsg)
+#define IOleInPlaceActiveObject_OnFrameWindowActivate(This,fActivate) (This)->lpVtbl->OnFrameWindowActivate(This,fActivate)
+#define IOleInPlaceActiveObject_OnDocWindowActivate(This,fActivate) (This)->lpVtbl->OnDocWindowActivate(This,fActivate)
+#define IOleInPlaceActiveObject_ResizeBorder(This,prcBorder,pUIWindow,fFrameWindow) (This)->lpVtbl->ResizeBorder(This,prcBorder,pUIWindow,fFrameWindow)
+#define IOleInPlaceActiveObject_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_RemoteTranslateAccelerator_Proxy(
+ IOleInPlaceActiveObject* This);
+void __RPC_STUB IOleInPlaceActiveObject_RemoteTranslateAccelerator_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_OnFrameWindowActivate_Proxy(
+ IOleInPlaceActiveObject* This,
+ BOOL fActivate);
+void __RPC_STUB IOleInPlaceActiveObject_OnFrameWindowActivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_OnDocWindowActivate_Proxy(
+ IOleInPlaceActiveObject* This,
+ BOOL fActivate);
+void __RPC_STUB IOleInPlaceActiveObject_OnDocWindowActivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_RemoteResizeBorder_Proxy(
+ IOleInPlaceActiveObject* This,
+ LPCRECT prcBorder,
+ REFIID riid,
+ IOleInPlaceUIWindow *pUIWindow,
+ BOOL fFrameWindow);
+void __RPC_STUB IOleInPlaceActiveObject_RemoteResizeBorder_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceActiveObject_EnableModeless_Proxy(
+ IOleInPlaceActiveObject* This,
+ BOOL fEnable);
+void __RPC_STUB IOleInPlaceActiveObject_EnableModeless_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IOleInPlaceActiveObject_TranslateAccelerator_Proxy(
+ IOleInPlaceActiveObject* This,
+ LPMSG lpmsg);
+HRESULT __RPC_STUB IOleInPlaceActiveObject_TranslateAccelerator_Stub(
+ IOleInPlaceActiveObject* This);
+HRESULT CALLBACK IOleInPlaceActiveObject_ResizeBorder_Proxy(
+ IOleInPlaceActiveObject* This,
+ LPCRECT prcBorder,
+ IOleInPlaceUIWindow *pUIWindow,
+ BOOL fFrameWindow);
+HRESULT __RPC_STUB IOleInPlaceActiveObject_ResizeBorder_Stub(
+ IOleInPlaceActiveObject* This,
+ LPCRECT prcBorder,
+ REFIID riid,
+ IOleInPlaceUIWindow *pUIWindow,
+ BOOL fFrameWindow);
+
+#endif /* __IOleInPlaceActiveObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleInPlaceSite interface
+ */
+#ifndef __IOleInPlaceSite_INTERFACE_DEFINED__
+#define __IOleInPlaceSite_INTERFACE_DEFINED__
+
+typedef IOleInPlaceSite *LPOLEINPLACESITE;
+DEFINE_GUID(IID_IOleInPlaceSite, 0x00000119, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleInPlaceSite : public IOleWindow
+{
+ virtual HRESULT STDMETHODCALLTYPE CanInPlaceActivate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnInPlaceActivate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnUIActivate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetWindowContext(
+ IOleInPlaceFrame **ppFrame,
+ IOleInPlaceUIWindow **ppDoc,
+ LPRECT lprcPosRect,
+ LPRECT lprcClipRect,
+ LPOLEINPLACEFRAMEINFO lpFrameInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Scroll(
+ SIZE scrollExtent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnUIDeactivate(
+ BOOL fUndoable) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DiscardUndoState(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeactivateAndUndo(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnPosRectChange(
+ LPCRECT lprcPosRect) = 0;
+
+};
+#else
+typedef struct IOleInPlaceSiteVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleInPlaceSite* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleInPlaceSite* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleInPlaceSite* This);
+
+ /*** IOleWindow methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IOleInPlaceSite* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *ContextSensitiveHelp)(
+ IOleInPlaceSite* This,
+ BOOL fEnterMode);
+
+ /*** IOleInPlaceSite methods ***/
+ HRESULT (STDMETHODCALLTYPE *CanInPlaceActivate)(
+ IOleInPlaceSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *OnInPlaceActivate)(
+ IOleInPlaceSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *OnUIActivate)(
+ IOleInPlaceSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetWindowContext)(
+ IOleInPlaceSite* This,
+ IOleInPlaceFrame **ppFrame,
+ IOleInPlaceUIWindow **ppDoc,
+ LPRECT lprcPosRect,
+ LPRECT lprcClipRect,
+ LPOLEINPLACEFRAMEINFO lpFrameInfo);
+
+ HRESULT (STDMETHODCALLTYPE *Scroll)(
+ IOleInPlaceSite* This,
+ SIZE scrollExtent);
+
+ HRESULT (STDMETHODCALLTYPE *OnUIDeactivate)(
+ IOleInPlaceSite* This,
+ BOOL fUndoable);
+
+ HRESULT (STDMETHODCALLTYPE *OnInPlaceDeactivate)(
+ IOleInPlaceSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *DiscardUndoState)(
+ IOleInPlaceSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *DeactivateAndUndo)(
+ IOleInPlaceSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *OnPosRectChange)(
+ IOleInPlaceSite* This,
+ LPCRECT lprcPosRect);
+
+ END_INTERFACE
+} IOleInPlaceSiteVtbl;
+interface IOleInPlaceSite {
+ CONST_VTBL IOleInPlaceSiteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleInPlaceSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleInPlaceSite_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleInPlaceSite_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleWindow methods ***/
+#define IOleInPlaceSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IOleInPlaceSite_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)
+/*** IOleInPlaceSite methods ***/
+#define IOleInPlaceSite_CanInPlaceActivate(This) (This)->lpVtbl->CanInPlaceActivate(This)
+#define IOleInPlaceSite_OnInPlaceActivate(This) (This)->lpVtbl->OnInPlaceActivate(This)
+#define IOleInPlaceSite_OnUIActivate(This) (This)->lpVtbl->OnUIActivate(This)
+#define IOleInPlaceSite_GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo) (This)->lpVtbl->GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo)
+#define IOleInPlaceSite_Scroll(This,scrollExtent) (This)->lpVtbl->Scroll(This,scrollExtent)
+#define IOleInPlaceSite_OnUIDeactivate(This,fUndoable) (This)->lpVtbl->OnUIDeactivate(This,fUndoable)
+#define IOleInPlaceSite_OnInPlaceDeactivate(This) (This)->lpVtbl->OnInPlaceDeactivate(This)
+#define IOleInPlaceSite_DiscardUndoState(This) (This)->lpVtbl->DiscardUndoState(This)
+#define IOleInPlaceSite_DeactivateAndUndo(This) (This)->lpVtbl->DeactivateAndUndo(This)
+#define IOleInPlaceSite_OnPosRectChange(This,lprcPosRect) (This)->lpVtbl->OnPosRectChange(This,lprcPosRect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_CanInPlaceActivate_Proxy(
+ IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_CanInPlaceActivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnInPlaceActivate_Proxy(
+ IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_OnInPlaceActivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnUIActivate_Proxy(
+ IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_OnUIActivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_GetWindowContext_Proxy(
+ IOleInPlaceSite* This,
+ IOleInPlaceFrame **ppFrame,
+ IOleInPlaceUIWindow **ppDoc,
+ LPRECT lprcPosRect,
+ LPRECT lprcClipRect,
+ LPOLEINPLACEFRAMEINFO lpFrameInfo);
+void __RPC_STUB IOleInPlaceSite_GetWindowContext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_Scroll_Proxy(
+ IOleInPlaceSite* This,
+ SIZE scrollExtent);
+void __RPC_STUB IOleInPlaceSite_Scroll_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnUIDeactivate_Proxy(
+ IOleInPlaceSite* This,
+ BOOL fUndoable);
+void __RPC_STUB IOleInPlaceSite_OnUIDeactivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnInPlaceDeactivate_Proxy(
+ IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_OnInPlaceDeactivate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_DiscardUndoState_Proxy(
+ IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_DiscardUndoState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_DeactivateAndUndo_Proxy(
+ IOleInPlaceSite* This);
+void __RPC_STUB IOleInPlaceSite_DeactivateAndUndo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleInPlaceSite_OnPosRectChange_Proxy(
+ IOleInPlaceSite* This,
+ LPCRECT lprcPosRect);
+void __RPC_STUB IOleInPlaceSite_OnPosRectChange_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleInPlaceSite_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IParseDisplayName interface
+ */
+#ifndef __IParseDisplayName_INTERFACE_DEFINED__
+#define __IParseDisplayName_INTERFACE_DEFINED__
+
+typedef IParseDisplayName *LPPARSEDISPLAYNAME;
+DEFINE_GUID(IID_IParseDisplayName, 0x0000011a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IParseDisplayName : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
+ IBindCtx *pbc,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut) = 0;
+
+};
+#else
+typedef struct IParseDisplayNameVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IParseDisplayName* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IParseDisplayName* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IParseDisplayName* This);
+
+ /*** IParseDisplayName methods ***/
+ HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+ IParseDisplayName* This,
+ IBindCtx *pbc,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut);
+
+ END_INTERFACE
+} IParseDisplayNameVtbl;
+interface IParseDisplayName {
+ CONST_VTBL IParseDisplayNameVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IParseDisplayName_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IParseDisplayName_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IParseDisplayName_Release(This) (This)->lpVtbl->Release(This)
+/*** IParseDisplayName methods ***/
+#define IParseDisplayName_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IParseDisplayName_ParseDisplayName_Proxy(
+ IParseDisplayName* This,
+ IBindCtx *pbc,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut);
+void __RPC_STUB IParseDisplayName_ParseDisplayName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IParseDisplayName_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleContainer interface
+ */
+#ifndef __IOleContainer_INTERFACE_DEFINED__
+#define __IOleContainer_INTERFACE_DEFINED__
+
+typedef IOleContainer *LPOLECONTAINER;
+DEFINE_GUID(IID_IOleContainer, 0x0000011b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleContainer : public IParseDisplayName
+{
+ virtual HRESULT STDMETHODCALLTYPE EnumObjects(
+ DWORD grfFlags,
+ IEnumUnknown **ppenum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockContainer(
+ BOOL fLock) = 0;
+
+};
+#else
+typedef struct IOleContainerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleContainer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleContainer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleContainer* This);
+
+ /*** IParseDisplayName methods ***/
+ HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+ IOleContainer* This,
+ IBindCtx *pbc,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut);
+
+ /*** IOleContainer methods ***/
+ HRESULT (STDMETHODCALLTYPE *EnumObjects)(
+ IOleContainer* This,
+ DWORD grfFlags,
+ IEnumUnknown **ppenum);
+
+ HRESULT (STDMETHODCALLTYPE *LockContainer)(
+ IOleContainer* This,
+ BOOL fLock);
+
+ END_INTERFACE
+} IOleContainerVtbl;
+interface IOleContainer {
+ CONST_VTBL IOleContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IParseDisplayName methods ***/
+#define IOleContainer_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)
+/*** IOleContainer methods ***/
+#define IOleContainer_EnumObjects(This,grfFlags,ppenum) (This)->lpVtbl->EnumObjects(This,grfFlags,ppenum)
+#define IOleContainer_LockContainer(This,fLock) (This)->lpVtbl->LockContainer(This,fLock)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleContainer_EnumObjects_Proxy(
+ IOleContainer* This,
+ DWORD grfFlags,
+ IEnumUnknown **ppenum);
+void __RPC_STUB IOleContainer_EnumObjects_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleContainer_LockContainer_Proxy(
+ IOleContainer* This,
+ BOOL fLock);
+void __RPC_STUB IOleContainer_LockContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleItemContainer interface
+ */
+#ifndef __IOleItemContainer_INTERFACE_DEFINED__
+#define __IOleItemContainer_INTERFACE_DEFINED__
+
+typedef IOleItemContainer *LPOLEITEMCONTAINER;
+typedef enum tagBINDSPEED {
+ BINDSPEED_INDEFINITE = 1,
+ BINDSPEED_MODERATE = 2,
+ BINDSPEED_IMMEDIATE = 3
+} BINDSPEED;
+typedef enum tagOLECONTF {
+ OLECONTF_EMBEDDINGS = 1,
+ OLECONTF_LINKS = 2,
+ OLECONTF_OTHERS = 4,
+ OLECONTF_ONLYUSER = 8,
+ OLECONTF_ONLYIFRUNNING = 16
+} OLECONTF;
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetObject
+#endif
+DEFINE_GUID(IID_IOleItemContainer, 0x0000011c, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleItemContainer : public IOleContainer
+{
+ virtual HRESULT STDMETHODCALLTYPE GetObject(
+ LPOLESTR pszItem,
+ DWORD dwSpeedNeeded,
+ IBindCtx *pbc,
+ REFIID riid,
+ void **ppvObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetObjectStorage(
+ LPOLESTR pszItem,
+ IBindCtx *pbc,
+ REFIID riid,
+ void **ppvStorage) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsRunning(
+ LPOLESTR pszItem) = 0;
+
+};
+#else
+typedef struct IOleItemContainerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleItemContainer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleItemContainer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleItemContainer* This);
+
+ /*** IParseDisplayName methods ***/
+ HRESULT (STDMETHODCALLTYPE *ParseDisplayName)(
+ IOleItemContainer* This,
+ IBindCtx *pbc,
+ LPOLESTR pszDisplayName,
+ ULONG *pchEaten,
+ IMoniker **ppmkOut);
+
+ /*** IOleContainer methods ***/
+ HRESULT (STDMETHODCALLTYPE *EnumObjects)(
+ IOleItemContainer* This,
+ DWORD grfFlags,
+ IEnumUnknown **ppenum);
+
+ HRESULT (STDMETHODCALLTYPE *LockContainer)(
+ IOleItemContainer* This,
+ BOOL fLock);
+
+ /*** IOleItemContainer methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetObject)(
+ IOleItemContainer* This,
+ LPOLESTR pszItem,
+ DWORD dwSpeedNeeded,
+ IBindCtx *pbc,
+ REFIID riid,
+ void **ppvObject);
+
+ HRESULT (STDMETHODCALLTYPE *GetObjectStorage)(
+ IOleItemContainer* This,
+ LPOLESTR pszItem,
+ IBindCtx *pbc,
+ REFIID riid,
+ void **ppvStorage);
+
+ HRESULT (STDMETHODCALLTYPE *IsRunning)(
+ IOleItemContainer* This,
+ LPOLESTR pszItem);
+
+ END_INTERFACE
+} IOleItemContainerVtbl;
+interface IOleItemContainer {
+ CONST_VTBL IOleItemContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleItemContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleItemContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleItemContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IParseDisplayName methods ***/
+#define IOleItemContainer_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)
+/*** IOleContainer methods ***/
+#define IOleItemContainer_EnumObjects(This,grfFlags,ppenum) (This)->lpVtbl->EnumObjects(This,grfFlags,ppenum)
+#define IOleItemContainer_LockContainer(This,fLock) (This)->lpVtbl->LockContainer(This,fLock)
+/*** IOleItemContainer methods ***/
+#define IOleItemContainer_GetObject(This,pszItem,dwSpeedNeeded,pbc,riid,ppvObject) (This)->lpVtbl->GetObject(This,pszItem,dwSpeedNeeded,pbc,riid,ppvObject)
+#define IOleItemContainer_GetObjectStorage(This,pszItem,pbc,riid,ppvStorage) (This)->lpVtbl->GetObjectStorage(This,pszItem,pbc,riid,ppvStorage)
+#define IOleItemContainer_IsRunning(This,pszItem) (This)->lpVtbl->IsRunning(This,pszItem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleItemContainer_GetObject_Proxy(
+ IOleItemContainer* This,
+ LPOLESTR pszItem,
+ DWORD dwSpeedNeeded,
+ IBindCtx *pbc,
+ REFIID riid,
+ void **ppvObject);
+void __RPC_STUB IOleItemContainer_GetObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleItemContainer_GetObjectStorage_Proxy(
+ IOleItemContainer* This,
+ LPOLESTR pszItem,
+ IBindCtx *pbc,
+ REFIID riid,
+ void **ppvStorage);
+void __RPC_STUB IOleItemContainer_GetObjectStorage_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleItemContainer_IsRunning_Proxy(
+ IOleItemContainer* This,
+ LPOLESTR pszItem);
+void __RPC_STUB IOleItemContainer_IsRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleItemContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleLink interface
+ */
+#ifndef __IOleLink_INTERFACE_DEFINED__
+#define __IOleLink_INTERFACE_DEFINED__
+
+typedef IOleLink *LPOLELINK;
+typedef enum tagOLEUPDATE {
+ OLEUPDATE_ALWAYS = 1,
+ OLEUPDATE_ONCALL = 3
+} OLEUPDATE;
+typedef enum tagOLEUPDATE *POLEUPDATE;
+typedef enum tagOLEUPDATE *LPOLEUPDATE;
+typedef enum tagOLELINKBIND {
+ OLELINKBIND_EVENIFCLASSDIFF = 1
+} OLELINKBIND;
+DEFINE_GUID(IID_IOleLink, 0x0000011d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleLink : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetUpdateOptions(
+ DWORD dwUpdateOpt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetUpdateOptions(
+ DWORD *pdwUpdateOpt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSourceMoniker(
+ IMoniker *pmk,
+ REFCLSID rclsid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSourceMoniker(
+ IMoniker **ppmk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSourceDisplayName(
+ LPCOLESTR pszStatusText) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSourceDisplayName(
+ LPOLESTR *ppszDisplayName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BindToSource(
+ DWORD bindflags,
+ IBindCtx *pbc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BindIfRunning(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBoundSource(
+ IUnknown **ppunk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnbindSource(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Update(
+ IBindCtx *pbc) = 0;
+
+};
+#else
+typedef struct IOleLinkVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleLink* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleLink* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleLink* This);
+
+ /*** IOleLink methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetUpdateOptions)(
+ IOleLink* This,
+ DWORD dwUpdateOpt);
+
+ HRESULT (STDMETHODCALLTYPE *GetUpdateOptions)(
+ IOleLink* This,
+ DWORD *pdwUpdateOpt);
+
+ HRESULT (STDMETHODCALLTYPE *SetSourceMoniker)(
+ IOleLink* This,
+ IMoniker *pmk,
+ REFCLSID rclsid);
+
+ HRESULT (STDMETHODCALLTYPE *GetSourceMoniker)(
+ IOleLink* This,
+ IMoniker **ppmk);
+
+ HRESULT (STDMETHODCALLTYPE *SetSourceDisplayName)(
+ IOleLink* This,
+ LPCOLESTR pszStatusText);
+
+ HRESULT (STDMETHODCALLTYPE *GetSourceDisplayName)(
+ IOleLink* This,
+ LPOLESTR *ppszDisplayName);
+
+ HRESULT (STDMETHODCALLTYPE *BindToSource)(
+ IOleLink* This,
+ DWORD bindflags,
+ IBindCtx *pbc);
+
+ HRESULT (STDMETHODCALLTYPE *BindIfRunning)(
+ IOleLink* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetBoundSource)(
+ IOleLink* This,
+ IUnknown **ppunk);
+
+ HRESULT (STDMETHODCALLTYPE *UnbindSource)(
+ IOleLink* This);
+
+ HRESULT (STDMETHODCALLTYPE *Update)(
+ IOleLink* This,
+ IBindCtx *pbc);
+
+ END_INTERFACE
+} IOleLinkVtbl;
+interface IOleLink {
+ CONST_VTBL IOleLinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleLink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleLink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleLink_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleLink methods ***/
+#define IOleLink_SetUpdateOptions(This,dwUpdateOpt) (This)->lpVtbl->SetUpdateOptions(This,dwUpdateOpt)
+#define IOleLink_GetUpdateOptions(This,pdwUpdateOpt) (This)->lpVtbl->GetUpdateOptions(This,pdwUpdateOpt)
+#define IOleLink_SetSourceMoniker(This,pmk,rclsid) (This)->lpVtbl->SetSourceMoniker(This,pmk,rclsid)
+#define IOleLink_GetSourceMoniker(This,ppmk) (This)->lpVtbl->GetSourceMoniker(This,ppmk)
+#define IOleLink_SetSourceDisplayName(This,pszStatusText) (This)->lpVtbl->SetSourceDisplayName(This,pszStatusText)
+#define IOleLink_GetSourceDisplayName(This,ppszDisplayName) (This)->lpVtbl->GetSourceDisplayName(This,ppszDisplayName)
+#define IOleLink_BindToSource(This,bindflags,pbc) (This)->lpVtbl->BindToSource(This,bindflags,pbc)
+#define IOleLink_BindIfRunning(This) (This)->lpVtbl->BindIfRunning(This)
+#define IOleLink_GetBoundSource(This,ppunk) (This)->lpVtbl->GetBoundSource(This,ppunk)
+#define IOleLink_UnbindSource(This) (This)->lpVtbl->UnbindSource(This)
+#define IOleLink_Update(This,pbc) (This)->lpVtbl->Update(This,pbc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleLink_SetUpdateOptions_Proxy(
+ IOleLink* This,
+ DWORD dwUpdateOpt);
+void __RPC_STUB IOleLink_SetUpdateOptions_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetUpdateOptions_Proxy(
+ IOleLink* This,
+ DWORD *pdwUpdateOpt);
+void __RPC_STUB IOleLink_GetUpdateOptions_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_SetSourceMoniker_Proxy(
+ IOleLink* This,
+ IMoniker *pmk,
+ REFCLSID rclsid);
+void __RPC_STUB IOleLink_SetSourceMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetSourceMoniker_Proxy(
+ IOleLink* This,
+ IMoniker **ppmk);
+void __RPC_STUB IOleLink_GetSourceMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_SetSourceDisplayName_Proxy(
+ IOleLink* This,
+ LPCOLESTR pszStatusText);
+void __RPC_STUB IOleLink_SetSourceDisplayName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetSourceDisplayName_Proxy(
+ IOleLink* This,
+ LPOLESTR *ppszDisplayName);
+void __RPC_STUB IOleLink_GetSourceDisplayName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_BindToSource_Proxy(
+ IOleLink* This,
+ DWORD bindflags,
+ IBindCtx *pbc);
+void __RPC_STUB IOleLink_BindToSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_BindIfRunning_Proxy(
+ IOleLink* This);
+void __RPC_STUB IOleLink_BindIfRunning_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_GetBoundSource_Proxy(
+ IOleLink* This,
+ IUnknown **ppunk);
+void __RPC_STUB IOleLink_GetBoundSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_UnbindSource_Proxy(
+ IOleLink* This);
+void __RPC_STUB IOleLink_UnbindSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleLink_Update_Proxy(
+ IOleLink* This,
+ IBindCtx *pbc);
+void __RPC_STUB IOleLink_Update_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleLink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleClientSite interface
+ */
+#ifndef __IOleClientSite_INTERFACE_DEFINED__
+#define __IOleClientSite_INTERFACE_DEFINED__
+
+typedef IOleClientSite *LPOLECLIENTSITE;
+DEFINE_GUID(IID_IOleClientSite, 0x00000118, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleClientSite : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SaveObject(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMoniker(
+ DWORD dwAssign,
+ DWORD dwWhichMoniker,
+ IMoniker **ppmk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetContainer(
+ IOleContainer **ppContainer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ShowObject(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnShowWindow(
+ BOOL fShow) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout(
+ ) = 0;
+
+};
+#else
+typedef struct IOleClientSiteVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleClientSite* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleClientSite* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleClientSite* This);
+
+ /*** IOleClientSite methods ***/
+ HRESULT (STDMETHODCALLTYPE *SaveObject)(
+ IOleClientSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetMoniker)(
+ IOleClientSite* This,
+ DWORD dwAssign,
+ DWORD dwWhichMoniker,
+ IMoniker **ppmk);
+
+ HRESULT (STDMETHODCALLTYPE *GetContainer)(
+ IOleClientSite* This,
+ IOleContainer **ppContainer);
+
+ HRESULT (STDMETHODCALLTYPE *ShowObject)(
+ IOleClientSite* This);
+
+ HRESULT (STDMETHODCALLTYPE *OnShowWindow)(
+ IOleClientSite* This,
+ BOOL fShow);
+
+ HRESULT (STDMETHODCALLTYPE *RequestNewObjectLayout)(
+ IOleClientSite* This);
+
+ END_INTERFACE
+} IOleClientSiteVtbl;
+interface IOleClientSite {
+ CONST_VTBL IOleClientSiteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleClientSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleClientSite_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleClientSite_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleClientSite methods ***/
+#define IOleClientSite_SaveObject(This) (This)->lpVtbl->SaveObject(This)
+#define IOleClientSite_GetMoniker(This,dwAssign,dwWhichMoniker,ppmk) (This)->lpVtbl->GetMoniker(This,dwAssign,dwWhichMoniker,ppmk)
+#define IOleClientSite_GetContainer(This,ppContainer) (This)->lpVtbl->GetContainer(This,ppContainer)
+#define IOleClientSite_ShowObject(This) (This)->lpVtbl->ShowObject(This)
+#define IOleClientSite_OnShowWindow(This,fShow) (This)->lpVtbl->OnShowWindow(This,fShow)
+#define IOleClientSite_RequestNewObjectLayout(This) (This)->lpVtbl->RequestNewObjectLayout(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleClientSite_SaveObject_Proxy(
+ IOleClientSite* This);
+void __RPC_STUB IOleClientSite_SaveObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_GetMoniker_Proxy(
+ IOleClientSite* This,
+ DWORD dwAssign,
+ DWORD dwWhichMoniker,
+ IMoniker **ppmk);
+void __RPC_STUB IOleClientSite_GetMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_GetContainer_Proxy(
+ IOleClientSite* This,
+ IOleContainer **ppContainer);
+void __RPC_STUB IOleClientSite_GetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_ShowObject_Proxy(
+ IOleClientSite* This);
+void __RPC_STUB IOleClientSite_ShowObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_OnShowWindow_Proxy(
+ IOleClientSite* This,
+ BOOL fShow);
+void __RPC_STUB IOleClientSite_OnShowWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleClientSite_RequestNewObjectLayout_Proxy(
+ IOleClientSite* This);
+void __RPC_STUB IOleClientSite_RequestNewObjectLayout_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleClientSite_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleCache interface
+ */
+#ifndef __IOleCache_INTERFACE_DEFINED__
+#define __IOleCache_INTERFACE_DEFINED__
+
+typedef IOleCache *LPOLECACHE;
+DEFINE_GUID(IID_IOleCache, 0x0000011e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleCache : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Cache(
+ FORMATETC *pformatetc,
+ DWORD advf,
+ DWORD *pdwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Uncache(
+ DWORD dwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumCache(
+ IEnumSTATDATA **ppenumSTATDATA) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitCache(
+ IDataObject *pDataObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetData(
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease) = 0;
+
+};
+#else
+typedef struct IOleCacheVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleCache* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleCache* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleCache* This);
+
+ /*** IOleCache methods ***/
+ HRESULT (STDMETHODCALLTYPE *Cache)(
+ IOleCache* This,
+ FORMATETC *pformatetc,
+ DWORD advf,
+ DWORD *pdwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *Uncache)(
+ IOleCache* This,
+ DWORD dwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *EnumCache)(
+ IOleCache* This,
+ IEnumSTATDATA **ppenumSTATDATA);
+
+ HRESULT (STDMETHODCALLTYPE *InitCache)(
+ IOleCache* This,
+ IDataObject *pDataObject);
+
+ HRESULT (STDMETHODCALLTYPE *SetData)(
+ IOleCache* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease);
+
+ END_INTERFACE
+} IOleCacheVtbl;
+interface IOleCache {
+ CONST_VTBL IOleCacheVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleCache_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleCache_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleCache_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleCache methods ***/
+#define IOleCache_Cache(This,pformatetc,advf,pdwConnection) (This)->lpVtbl->Cache(This,pformatetc,advf,pdwConnection)
+#define IOleCache_Uncache(This,dwConnection) (This)->lpVtbl->Uncache(This,dwConnection)
+#define IOleCache_EnumCache(This,ppenumSTATDATA) (This)->lpVtbl->EnumCache(This,ppenumSTATDATA)
+#define IOleCache_InitCache(This,pDataObject) (This)->lpVtbl->InitCache(This,pDataObject)
+#define IOleCache_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleCache_Cache_Proxy(
+ IOleCache* This,
+ FORMATETC *pformatetc,
+ DWORD advf,
+ DWORD *pdwConnection);
+void __RPC_STUB IOleCache_Cache_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_Uncache_Proxy(
+ IOleCache* This,
+ DWORD dwConnection);
+void __RPC_STUB IOleCache_Uncache_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_EnumCache_Proxy(
+ IOleCache* This,
+ IEnumSTATDATA **ppenumSTATDATA);
+void __RPC_STUB IOleCache_EnumCache_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_InitCache_Proxy(
+ IOleCache* This,
+ IDataObject *pDataObject);
+void __RPC_STUB IOleCache_InitCache_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache_SetData_Proxy(
+ IOleCache* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease);
+void __RPC_STUB IOleCache_SetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleCache_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleCache2 interface
+ */
+#ifndef __IOleCache2_INTERFACE_DEFINED__
+#define __IOleCache2_INTERFACE_DEFINED__
+
+typedef IOleCache2 *LPOLECACHE2;
+#define UPDFCACHE_NODATACACHE (0x1)
+
+#define UPDFCACHE_ONSAVECACHE (0x2)
+
+#define UPDFCACHE_ONSTOPCACHE (0x4)
+
+#define UPDFCACHE_NORMALCACHE (0x8)
+
+#define UPDFCACHE_IFBLANK (0x10)
+
+#define UPDFCACHE_ONLYIFBLANK (0x80000000)
+
+#define UPDFCACHE_IFBLANKORONSAVECACHE (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE)
+
+#define UPDFCACHE_ALL ((DWORD)~UPDFCACHE_ONLYIFBLANK)
+
+#define UPDFCACHE_ALLBUTNODATACACHE (UPDFCACHE_ALL & (DWORD)~UPDFCACHE_NODATACACHE)
+
+typedef enum tagDISCARDCACHE {
+ DISCARDCACHE_SAVEIFDIRTY = 0,
+ DISCARDCACHE_NOSAVE = 1
+} DISCARDCACHE;
+DEFINE_GUID(IID_IOleCache2, 0x00000128, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleCache2 : public IOleCache
+{
+ virtual HRESULT STDMETHODCALLTYPE UpdateCache(
+ LPDATAOBJECT pDataObject,
+ DWORD grfUpdf,
+ LPVOID pReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DiscardCache(
+ DWORD dwDiscardOptions) = 0;
+
+};
+#else
+typedef struct IOleCache2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleCache2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleCache2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleCache2* This);
+
+ /*** IOleCache methods ***/
+ HRESULT (STDMETHODCALLTYPE *Cache)(
+ IOleCache2* This,
+ FORMATETC *pformatetc,
+ DWORD advf,
+ DWORD *pdwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *Uncache)(
+ IOleCache2* This,
+ DWORD dwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *EnumCache)(
+ IOleCache2* This,
+ IEnumSTATDATA **ppenumSTATDATA);
+
+ HRESULT (STDMETHODCALLTYPE *InitCache)(
+ IOleCache2* This,
+ IDataObject *pDataObject);
+
+ HRESULT (STDMETHODCALLTYPE *SetData)(
+ IOleCache2* This,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pmedium,
+ BOOL fRelease);
+
+ /*** IOleCache2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *UpdateCache)(
+ IOleCache2* This,
+ LPDATAOBJECT pDataObject,
+ DWORD grfUpdf,
+ LPVOID pReserved);
+
+ HRESULT (STDMETHODCALLTYPE *DiscardCache)(
+ IOleCache2* This,
+ DWORD dwDiscardOptions);
+
+ END_INTERFACE
+} IOleCache2Vtbl;
+interface IOleCache2 {
+ CONST_VTBL IOleCache2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleCache2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleCache2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleCache2_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleCache methods ***/
+#define IOleCache2_Cache(This,pformatetc,advf,pdwConnection) (This)->lpVtbl->Cache(This,pformatetc,advf,pdwConnection)
+#define IOleCache2_Uncache(This,dwConnection) (This)->lpVtbl->Uncache(This,dwConnection)
+#define IOleCache2_EnumCache(This,ppenumSTATDATA) (This)->lpVtbl->EnumCache(This,ppenumSTATDATA)
+#define IOleCache2_InitCache(This,pDataObject) (This)->lpVtbl->InitCache(This,pDataObject)
+#define IOleCache2_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)
+/*** IOleCache2 methods ***/
+#define IOleCache2_UpdateCache(This,pDataObject,grfUpdf,pReserved) (This)->lpVtbl->UpdateCache(This,pDataObject,grfUpdf,pReserved)
+#define IOleCache2_DiscardCache(This,dwDiscardOptions) (This)->lpVtbl->DiscardCache(This,dwDiscardOptions)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleCache2_RemoteUpdateCache_Proxy(
+ IOleCache2* This,
+ LPDATAOBJECT pDataObject,
+ DWORD grfUpdf,
+ LONG_PTR pReserved);
+void __RPC_STUB IOleCache2_RemoteUpdateCache_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCache2_DiscardCache_Proxy(
+ IOleCache2* This,
+ DWORD dwDiscardOptions);
+void __RPC_STUB IOleCache2_DiscardCache_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IOleCache2_UpdateCache_Proxy(
+ IOleCache2* This,
+ LPDATAOBJECT pDataObject,
+ DWORD grfUpdf,
+ LPVOID pReserved);
+HRESULT __RPC_STUB IOleCache2_UpdateCache_Stub(
+ IOleCache2* This,
+ LPDATAOBJECT pDataObject,
+ DWORD grfUpdf,
+ LONG_PTR pReserved);
+
+#endif /* __IOleCache2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleCacheControl interface
+ */
+#ifndef __IOleCacheControl_INTERFACE_DEFINED__
+#define __IOleCacheControl_INTERFACE_DEFINED__
+
+typedef IOleCacheControl *LPOLECACHECONTROL;
+DEFINE_GUID(IID_IOleCacheControl, 0x00000129, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleCacheControl : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE OnRun(
+ LPDATAOBJECT pDataObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnStop(
+ ) = 0;
+
+};
+#else
+typedef struct IOleCacheControlVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleCacheControl* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleCacheControl* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleCacheControl* This);
+
+ /*** IOleCacheControl methods ***/
+ HRESULT (STDMETHODCALLTYPE *OnRun)(
+ IOleCacheControl* This,
+ LPDATAOBJECT pDataObject);
+
+ HRESULT (STDMETHODCALLTYPE *OnStop)(
+ IOleCacheControl* This);
+
+ END_INTERFACE
+} IOleCacheControlVtbl;
+interface IOleCacheControl {
+ CONST_VTBL IOleCacheControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleCacheControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleCacheControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleCacheControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleCacheControl methods ***/
+#define IOleCacheControl_OnRun(This,pDataObject) (This)->lpVtbl->OnRun(This,pDataObject)
+#define IOleCacheControl_OnStop(This) (This)->lpVtbl->OnStop(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleCacheControl_OnRun_Proxy(
+ IOleCacheControl* This,
+ LPDATAOBJECT pDataObject);
+void __RPC_STUB IOleCacheControl_OnRun_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleCacheControl_OnStop_Proxy(
+ IOleCacheControl* This);
+void __RPC_STUB IOleCacheControl_OnStop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleCacheControl_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumOLEVERB interface
+ */
+#ifndef __IEnumOLEVERB_INTERFACE_DEFINED__
+#define __IEnumOLEVERB_INTERFACE_DEFINED__
+
+typedef IEnumOLEVERB *LPENUMOLEVERB;
+typedef struct tagOLEVERB {
+ LONG lVerb;
+ LPOLESTR lpszVerbName;
+ DWORD fuFlags;
+ DWORD grfAttribs;
+} OLEVERB;
+typedef struct tagOLEVERB *LPOLEVERB;
+typedef enum tagOLEVERBATTRIB {
+ OLEVERBATTRIB_NEVERDIRTIES = 1,
+ OLEVERBATTRIB_ONCONTAINERMENU = 2
+} OLEVERBATTRIB;
+DEFINE_GUID(IID_IEnumOLEVERB, 0x00000104, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumOLEVERB : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ LPOLEVERB rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumOLEVERB **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumOLEVERBVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumOLEVERB* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumOLEVERB* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumOLEVERB* This);
+
+ /*** IEnumOLEVERB methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumOLEVERB* This,
+ ULONG celt,
+ LPOLEVERB rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumOLEVERB* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumOLEVERB* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumOLEVERB* This,
+ IEnumOLEVERB **ppenum);
+
+ END_INTERFACE
+} IEnumOLEVERBVtbl;
+interface IEnumOLEVERB {
+ CONST_VTBL IEnumOLEVERBVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumOLEVERB_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumOLEVERB_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumOLEVERB_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumOLEVERB methods ***/
+#define IEnumOLEVERB_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumOLEVERB_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumOLEVERB_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumOLEVERB_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_RemoteNext_Proxy(
+ IEnumOLEVERB* This,
+ ULONG celt,
+ LPOLEVERB rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumOLEVERB_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_Skip_Proxy(
+ IEnumOLEVERB* This,
+ ULONG celt);
+void __RPC_STUB IEnumOLEVERB_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_Reset_Proxy(
+ IEnumOLEVERB* This);
+void __RPC_STUB IEnumOLEVERB_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumOLEVERB_Clone_Proxy(
+ IEnumOLEVERB* This,
+ IEnumOLEVERB **ppenum);
+void __RPC_STUB IEnumOLEVERB_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumOLEVERB_Next_Proxy(
+ IEnumOLEVERB* This,
+ ULONG celt,
+ LPOLEVERB rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumOLEVERB_Next_Stub(
+ IEnumOLEVERB* This,
+ ULONG celt,
+ LPOLEVERB rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumOLEVERB_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleObject interface
+ */
+#ifndef __IOleObject_INTERFACE_DEFINED__
+#define __IOleObject_INTERFACE_DEFINED__
+
+typedef IOleObject *LPOLEOBJECT;
+typedef enum tagOLEGETMONIKER {
+ OLEGETMONIKER_ONLYIFTHERE = 1,
+ OLEGETMONIKER_FORCEASSIGN = 2,
+ OLEGETMONIKER_UNASSIGN = 3,
+ OLEGETMONIKER_TEMPFORUSER = 4
+} OLEGETMONIKER;
+typedef enum tagOLEWHICHMK {
+ OLEWHICHMK_CONTAINER = 1,
+ OLEWHICHMK_OBJREL = 2,
+ OLEWHICHMK_OBJFULL = 3
+} OLEWHICHMK;
+typedef enum tagUSERCLASSTYPE {
+ USERCLASSTYPE_FULL = 1,
+ USERCLASSTYPE_SHORT = 2,
+ USERCLASSTYPE_APPNAME = 3
+} USERCLASSTYPE;
+typedef enum tagOLEMISC {
+ OLEMISC_RECOMPOSEONRESIZE = 0x1,
+ OLEMISC_ONLYICONIC = 0x2,
+ OLEMISC_INSERTNOTREPLACE = 0x4,
+ OLEMISC_STATIC = 0x8,
+ OLEMISC_CANTLINKINSIDE = 0x10,
+ OLEMISC_CANLINKBYOLE1 = 0x20,
+ OLEMISC_ISLINKOBJECT = 0x40,
+ OLEMISC_INSIDEOUT = 0x80,
+ OLEMISC_ACTIVATEWHENVISIBLE = 0x100,
+ OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,
+ OLEMISC_INVISIBLEATRUNTIME = 0x400,
+ OLEMISC_ALWAYSRUN = 0x800,
+ OLEMISC_ACTSLIKEBUTTON = 0x1000,
+ OLEMISC_ACTSLIKELABEL = 0x2000,
+ OLEMISC_NOUIACTIVATE = 0x4000,
+ OLEMISC_ALIGNABLE = 0x8000,
+ OLEMISC_SIMPLEFRAME = 0x10000,
+ OLEMISC_SETCLIENTSITEFIRST = 0x20000,
+ OLEMISC_IMEMODE = 0x40000,
+ OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,
+ OLEMISC_WANTSTOMENUMERGE = 0x100000,
+ OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000
+} OLEMISC;
+typedef enum tagOLECLOSE {
+ OLECLOSE_SAVEIFDIRTY = 0,
+ OLECLOSE_NOSAVE = 1,
+ OLECLOSE_PROMPTSAVE = 2
+} OLECLOSE;
+DEFINE_GUID(IID_IOleObject, 0x00000112, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleObject : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetClientSite(
+ IOleClientSite *pClientSite) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClientSite(
+ IOleClientSite **ppClientSite) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHostNames(
+ LPCOLESTR szContainerApp,
+ LPCOLESTR szContainerObj) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Close(
+ DWORD dwSaveOption) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMoniker(
+ DWORD dwWhichMoniker,
+ IMoniker *pmk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMoniker(
+ DWORD dwAssign,
+ DWORD dwWhichMoniker,
+ IMoniker **ppmk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitFromData(
+ IDataObject *pDataObject,
+ BOOL fCreation,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipboardData(
+ DWORD dwReserved,
+ IDataObject **ppDataObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DoVerb(
+ LONG iVerb,
+ LPMSG lpmsg,
+ IOleClientSite *pActiveSite,
+ LONG lindex,
+ HWND hwndParent,
+ LPCRECT lprcPosRect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumVerbs(
+ IEnumOLEVERB **ppEnumOleVerb) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Update(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsUpToDate(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetUserClassID(
+ CLSID *pClsid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetUserType(
+ DWORD dwFormOfType,
+ LPOLESTR *pszUserType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetExtent(
+ DWORD dwDrawAspect,
+ SIZEL *psizel) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetExtent(
+ DWORD dwDrawAspect,
+ SIZEL *psizel) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Advise(
+ IAdviseSink *pAdvSink,
+ DWORD *pdwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unadvise(
+ DWORD dwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
+ IEnumSTATDATA **ppenumAdvise) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMiscStatus(
+ DWORD dwAspect,
+ DWORD *pdwStatus) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetColorScheme(
+ LOGPALETTE *pLogpal) = 0;
+
+};
+#else
+typedef struct IOleObjectVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleObject* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleObject* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleObject* This);
+
+ /*** IOleObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetClientSite)(
+ IOleObject* This,
+ IOleClientSite *pClientSite);
+
+ HRESULT (STDMETHODCALLTYPE *GetClientSite)(
+ IOleObject* This,
+ IOleClientSite **ppClientSite);
+
+ HRESULT (STDMETHODCALLTYPE *SetHostNames)(
+ IOleObject* This,
+ LPCOLESTR szContainerApp,
+ LPCOLESTR szContainerObj);
+
+ HRESULT (STDMETHODCALLTYPE *Close)(
+ IOleObject* This,
+ DWORD dwSaveOption);
+
+ HRESULT (STDMETHODCALLTYPE *SetMoniker)(
+ IOleObject* This,
+ DWORD dwWhichMoniker,
+ IMoniker *pmk);
+
+ HRESULT (STDMETHODCALLTYPE *GetMoniker)(
+ IOleObject* This,
+ DWORD dwAssign,
+ DWORD dwWhichMoniker,
+ IMoniker **ppmk);
+
+ HRESULT (STDMETHODCALLTYPE *InitFromData)(
+ IOleObject* This,
+ IDataObject *pDataObject,
+ BOOL fCreation,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipboardData)(
+ IOleObject* This,
+ DWORD dwReserved,
+ IDataObject **ppDataObject);
+
+ HRESULT (STDMETHODCALLTYPE *DoVerb)(
+ IOleObject* This,
+ LONG iVerb,
+ LPMSG lpmsg,
+ IOleClientSite *pActiveSite,
+ LONG lindex,
+ HWND hwndParent,
+ LPCRECT lprcPosRect);
+
+ HRESULT (STDMETHODCALLTYPE *EnumVerbs)(
+ IOleObject* This,
+ IEnumOLEVERB **ppEnumOleVerb);
+
+ HRESULT (STDMETHODCALLTYPE *Update)(
+ IOleObject* This);
+
+ HRESULT (STDMETHODCALLTYPE *IsUpToDate)(
+ IOleObject* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetUserClassID)(
+ IOleObject* This,
+ CLSID *pClsid);
+
+ HRESULT (STDMETHODCALLTYPE *GetUserType)(
+ IOleObject* This,
+ DWORD dwFormOfType,
+ LPOLESTR *pszUserType);
+
+ HRESULT (STDMETHODCALLTYPE *SetExtent)(
+ IOleObject* This,
+ DWORD dwDrawAspect,
+ SIZEL *psizel);
+
+ HRESULT (STDMETHODCALLTYPE *GetExtent)(
+ IOleObject* This,
+ DWORD dwDrawAspect,
+ SIZEL *psizel);
+
+ HRESULT (STDMETHODCALLTYPE *Advise)(
+ IOleObject* This,
+ IAdviseSink *pAdvSink,
+ DWORD *pdwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *Unadvise)(
+ IOleObject* This,
+ DWORD dwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
+ IOleObject* This,
+ IEnumSTATDATA **ppenumAdvise);
+
+ HRESULT (STDMETHODCALLTYPE *GetMiscStatus)(
+ IOleObject* This,
+ DWORD dwAspect,
+ DWORD *pdwStatus);
+
+ HRESULT (STDMETHODCALLTYPE *SetColorScheme)(
+ IOleObject* This,
+ LOGPALETTE *pLogpal);
+
+ END_INTERFACE
+} IOleObjectVtbl;
+interface IOleObject {
+ CONST_VTBL IOleObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleObject methods ***/
+#define IOleObject_SetClientSite(This,pClientSite) (This)->lpVtbl->SetClientSite(This,pClientSite)
+#define IOleObject_GetClientSite(This,ppClientSite) (This)->lpVtbl->GetClientSite(This,ppClientSite)
+#define IOleObject_SetHostNames(This,szContainerApp,szContainerObj) (This)->lpVtbl->SetHostNames(This,szContainerApp,szContainerObj)
+#define IOleObject_Close(This,dwSaveOption) (This)->lpVtbl->Close(This,dwSaveOption)
+#define IOleObject_SetMoniker(This,dwWhichMoniker,pmk) (This)->lpVtbl->SetMoniker(This,dwWhichMoniker,pmk)
+#define IOleObject_GetMoniker(This,dwAssign,dwWhichMoniker,ppmk) (This)->lpVtbl->GetMoniker(This,dwAssign,dwWhichMoniker,ppmk)
+#define IOleObject_InitFromData(This,pDataObject,fCreation,dwReserved) (This)->lpVtbl->InitFromData(This,pDataObject,fCreation,dwReserved)
+#define IOleObject_GetClipboardData(This,dwReserved,ppDataObject) (This)->lpVtbl->GetClipboardData(This,dwReserved,ppDataObject)
+#define IOleObject_DoVerb(This,iVerb,lpmsg,pActiveSite,lindex,hwndParent,lprcPosRect) (This)->lpVtbl->DoVerb(This,iVerb,lpmsg,pActiveSite,lindex,hwndParent,lprcPosRect)
+#define IOleObject_EnumVerbs(This,ppEnumOleVerb) (This)->lpVtbl->EnumVerbs(This,ppEnumOleVerb)
+#define IOleObject_Update(This) (This)->lpVtbl->Update(This)
+#define IOleObject_IsUpToDate(This) (This)->lpVtbl->IsUpToDate(This)
+#define IOleObject_GetUserClassID(This,pClsid) (This)->lpVtbl->GetUserClassID(This,pClsid)
+#define IOleObject_GetUserType(This,dwFormOfType,pszUserType) (This)->lpVtbl->GetUserType(This,dwFormOfType,pszUserType)
+#define IOleObject_SetExtent(This,dwDrawAspect,psizel) (This)->lpVtbl->SetExtent(This,dwDrawAspect,psizel)
+#define IOleObject_GetExtent(This,dwDrawAspect,psizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,psizel)
+#define IOleObject_Advise(This,pAdvSink,pdwConnection) (This)->lpVtbl->Advise(This,pAdvSink,pdwConnection)
+#define IOleObject_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IOleObject_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IOleObject_GetMiscStatus(This,dwAspect,pdwStatus) (This)->lpVtbl->GetMiscStatus(This,dwAspect,pdwStatus)
+#define IOleObject_SetColorScheme(This,pLogpal) (This)->lpVtbl->SetColorScheme(This,pLogpal)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleObject_SetClientSite_Proxy(
+ IOleObject* This,
+ IOleClientSite *pClientSite);
+void __RPC_STUB IOleObject_SetClientSite_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetClientSite_Proxy(
+ IOleObject* This,
+ IOleClientSite **ppClientSite);
+void __RPC_STUB IOleObject_GetClientSite_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetHostNames_Proxy(
+ IOleObject* This,
+ LPCOLESTR szContainerApp,
+ LPCOLESTR szContainerObj);
+void __RPC_STUB IOleObject_SetHostNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Close_Proxy(
+ IOleObject* This,
+ DWORD dwSaveOption);
+void __RPC_STUB IOleObject_Close_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetMoniker_Proxy(
+ IOleObject* This,
+ DWORD dwWhichMoniker,
+ IMoniker *pmk);
+void __RPC_STUB IOleObject_SetMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetMoniker_Proxy(
+ IOleObject* This,
+ DWORD dwAssign,
+ DWORD dwWhichMoniker,
+ IMoniker **ppmk);
+void __RPC_STUB IOleObject_GetMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_InitFromData_Proxy(
+ IOleObject* This,
+ IDataObject *pDataObject,
+ BOOL fCreation,
+ DWORD dwReserved);
+void __RPC_STUB IOleObject_InitFromData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetClipboardData_Proxy(
+ IOleObject* This,
+ DWORD dwReserved,
+ IDataObject **ppDataObject);
+void __RPC_STUB IOleObject_GetClipboardData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_DoVerb_Proxy(
+ IOleObject* This,
+ LONG iVerb,
+ LPMSG lpmsg,
+ IOleClientSite *pActiveSite,
+ LONG lindex,
+ HWND hwndParent,
+ LPCRECT lprcPosRect);
+void __RPC_STUB IOleObject_DoVerb_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_EnumVerbs_Proxy(
+ IOleObject* This,
+ IEnumOLEVERB **ppEnumOleVerb);
+void __RPC_STUB IOleObject_EnumVerbs_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Update_Proxy(
+ IOleObject* This);
+void __RPC_STUB IOleObject_Update_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_IsUpToDate_Proxy(
+ IOleObject* This);
+void __RPC_STUB IOleObject_IsUpToDate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetUserClassID_Proxy(
+ IOleObject* This,
+ CLSID *pClsid);
+void __RPC_STUB IOleObject_GetUserClassID_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetUserType_Proxy(
+ IOleObject* This,
+ DWORD dwFormOfType,
+ LPOLESTR *pszUserType);
+void __RPC_STUB IOleObject_GetUserType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetExtent_Proxy(
+ IOleObject* This,
+ DWORD dwDrawAspect,
+ SIZEL *psizel);
+void __RPC_STUB IOleObject_SetExtent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetExtent_Proxy(
+ IOleObject* This,
+ DWORD dwDrawAspect,
+ SIZEL *psizel);
+void __RPC_STUB IOleObject_GetExtent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Advise_Proxy(
+ IOleObject* This,
+ IAdviseSink *pAdvSink,
+ DWORD *pdwConnection);
+void __RPC_STUB IOleObject_Advise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_Unadvise_Proxy(
+ IOleObject* This,
+ DWORD dwConnection);
+void __RPC_STUB IOleObject_Unadvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_EnumAdvise_Proxy(
+ IOleObject* This,
+ IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IOleObject_EnumAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_GetMiscStatus_Proxy(
+ IOleObject* This,
+ DWORD dwAspect,
+ DWORD *pdwStatus);
+void __RPC_STUB IOleObject_GetMiscStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleObject_SetColorScheme_Proxy(
+ IOleObject* This,
+ LOGPALETTE *pLogpal);
+void __RPC_STUB IOleObject_SetColorScheme_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IOleAdviseHolder interface
+ */
+#ifndef __IOleAdviseHolder_INTERFACE_DEFINED__
+#define __IOleAdviseHolder_INTERFACE_DEFINED__
+
+typedef IOleAdviseHolder *LPOLEADVISEHOLDER;
+DEFINE_GUID(IID_IOleAdviseHolder, 0x00000111, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IOleAdviseHolder : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Advise(
+ IAdviseSink *pAdvise,
+ DWORD *pdwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unadvise(
+ DWORD dwConnection) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumAdvise(
+ IEnumSTATDATA **ppenumAdvise) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SendOnRename(
+ IMoniker *pmk) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SendOnSave(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SendOnClose(
+ ) = 0;
+
+};
+#else
+typedef struct IOleAdviseHolderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IOleAdviseHolder* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IOleAdviseHolder* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IOleAdviseHolder* This);
+
+ /*** IOleAdviseHolder methods ***/
+ HRESULT (STDMETHODCALLTYPE *Advise)(
+ IOleAdviseHolder* This,
+ IAdviseSink *pAdvise,
+ DWORD *pdwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *Unadvise)(
+ IOleAdviseHolder* This,
+ DWORD dwConnection);
+
+ HRESULT (STDMETHODCALLTYPE *EnumAdvise)(
+ IOleAdviseHolder* This,
+ IEnumSTATDATA **ppenumAdvise);
+
+ HRESULT (STDMETHODCALLTYPE *SendOnRename)(
+ IOleAdviseHolder* This,
+ IMoniker *pmk);
+
+ HRESULT (STDMETHODCALLTYPE *SendOnSave)(
+ IOleAdviseHolder* This);
+
+ HRESULT (STDMETHODCALLTYPE *SendOnClose)(
+ IOleAdviseHolder* This);
+
+ END_INTERFACE
+} IOleAdviseHolderVtbl;
+interface IOleAdviseHolder {
+ CONST_VTBL IOleAdviseHolderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IOleAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IOleAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IOleAdviseHolder_Release(This) (This)->lpVtbl->Release(This)
+/*** IOleAdviseHolder methods ***/
+#define IOleAdviseHolder_Advise(This,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pAdvise,pdwConnection)
+#define IOleAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)
+#define IOleAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)
+#define IOleAdviseHolder_SendOnRename(This,pmk) (This)->lpVtbl->SendOnRename(This,pmk)
+#define IOleAdviseHolder_SendOnSave(This) (This)->lpVtbl->SendOnSave(This)
+#define IOleAdviseHolder_SendOnClose(This) (This)->lpVtbl->SendOnClose(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_Advise_Proxy(
+ IOleAdviseHolder* This,
+ IAdviseSink *pAdvise,
+ DWORD *pdwConnection);
+void __RPC_STUB IOleAdviseHolder_Advise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_Unadvise_Proxy(
+ IOleAdviseHolder* This,
+ DWORD dwConnection);
+void __RPC_STUB IOleAdviseHolder_Unadvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_EnumAdvise_Proxy(
+ IOleAdviseHolder* This,
+ IEnumSTATDATA **ppenumAdvise);
+void __RPC_STUB IOleAdviseHolder_EnumAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_SendOnRename_Proxy(
+ IOleAdviseHolder* This,
+ IMoniker *pmk);
+void __RPC_STUB IOleAdviseHolder_SendOnRename_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_SendOnSave_Proxy(
+ IOleAdviseHolder* This);
+void __RPC_STUB IOleAdviseHolder_SendOnSave_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IOleAdviseHolder_SendOnClose_Proxy(
+ IOleAdviseHolder* This);
+void __RPC_STUB IOleAdviseHolder_SendOnClose_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IOleAdviseHolder_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IContinue interface
+ */
+#ifndef __IContinue_INTERFACE_DEFINED__
+#define __IContinue_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IContinue, 0x0000012a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IContinue : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE FContinue(
+ ) = 0;
+
+};
+#else
+typedef struct IContinueVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IContinue* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IContinue* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IContinue* This);
+
+ /*** IContinue methods ***/
+ HRESULT (STDMETHODCALLTYPE *FContinue)(
+ IContinue* This);
+
+ END_INTERFACE
+} IContinueVtbl;
+interface IContinue {
+ CONST_VTBL IContinueVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IContinue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IContinue_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IContinue_Release(This) (This)->lpVtbl->Release(This)
+/*** IContinue methods ***/
+#define IContinue_FContinue(This) (This)->lpVtbl->FContinue(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IContinue_FContinue_Proxy(
+ IContinue* This);
+void __RPC_STUB IContinue_FContinue_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IContinue_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IViewObject interface
+ */
+#ifndef __IViewObject_INTERFACE_DEFINED__
+#define __IViewObject_INTERFACE_DEFINED__
+
+typedef IViewObject *LPVIEWOBJECT;
+DEFINE_GUID(IID_IViewObject, 0x0000010d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IViewObject : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Draw(
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hdcTargetDev,
+ HDC hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+ ULONG_PTR dwContinue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetColorSet(
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hicTargetDev,
+ LOGPALETTE **ppColorSet) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Freeze(
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DWORD *pdwFreeze) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unfreeze(
+ DWORD dwFreeze) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetAdvise(
+ DWORD aspects,
+ DWORD advf,
+ IAdviseSink *pAdvSink) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdvise(
+ DWORD *pAspects,
+ DWORD *pAdvf,
+ IAdviseSink **ppAdvSink) = 0;
+
+};
+#else
+typedef struct IViewObjectVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IViewObject* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IViewObject* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IViewObject* This);
+
+ /*** IViewObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *Draw)(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hdcTargetDev,
+ HDC hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+ ULONG_PTR dwContinue);
+
+ HRESULT (STDMETHODCALLTYPE *GetColorSet)(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hicTargetDev,
+ LOGPALETTE **ppColorSet);
+
+ HRESULT (STDMETHODCALLTYPE *Freeze)(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DWORD *pdwFreeze);
+
+ HRESULT (STDMETHODCALLTYPE *Unfreeze)(
+ IViewObject* This,
+ DWORD dwFreeze);
+
+ HRESULT (STDMETHODCALLTYPE *SetAdvise)(
+ IViewObject* This,
+ DWORD aspects,
+ DWORD advf,
+ IAdviseSink *pAdvSink);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdvise)(
+ IViewObject* This,
+ DWORD *pAspects,
+ DWORD *pAdvf,
+ IAdviseSink **ppAdvSink);
+
+ END_INTERFACE
+} IViewObjectVtbl;
+interface IViewObject {
+ CONST_VTBL IViewObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IViewObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IViewObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IViewObject_Release(This) (This)->lpVtbl->Release(This)
+/*** IViewObject methods ***/
+#define IViewObject_Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue) (This)->lpVtbl->Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue)
+#define IViewObject_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)
+#define IViewObject_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)
+#define IViewObject_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)
+#define IViewObject_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)
+#define IViewObject_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteDraw_Proxy(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ ULONG_PTR pvAspect,
+ DVTARGETDEVICE *ptd,
+ ULONG_PTR hdcTargetDev,
+ ULONG_PTR hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ IContinue *pContinue);
+void __RPC_STUB IViewObject_RemoteDraw_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteGetColorSet_Proxy(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ ULONG_PTR pvAspect,
+ DVTARGETDEVICE *ptd,
+ ULONG_PTR hicTargetDev,
+ LOGPALETTE **ppColorSet);
+void __RPC_STUB IViewObject_RemoteGetColorSet_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteFreeze_Proxy(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ ULONG_PTR pvAspect,
+ DWORD *pdwFreeze);
+void __RPC_STUB IViewObject_RemoteFreeze_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_Unfreeze_Proxy(
+ IViewObject* This,
+ DWORD dwFreeze);
+void __RPC_STUB IViewObject_Unfreeze_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_SetAdvise_Proxy(
+ IViewObject* This,
+ DWORD aspects,
+ DWORD advf,
+ IAdviseSink *pAdvSink);
+void __RPC_STUB IViewObject_SetAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IViewObject_RemoteGetAdvise_Proxy(
+ IViewObject* This,
+ DWORD *pAspects,
+ DWORD *pAdvf,
+ IAdviseSink **ppAdvSink);
+void __RPC_STUB IViewObject_RemoteGetAdvise_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IViewObject_Draw_Proxy(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hdcTargetDev,
+ HDC hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+ ULONG_PTR dwContinue);
+HRESULT __RPC_STUB IViewObject_Draw_Stub(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ ULONG_PTR pvAspect,
+ DVTARGETDEVICE *ptd,
+ ULONG_PTR hdcTargetDev,
+ ULONG_PTR hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ IContinue *pContinue);
+HRESULT CALLBACK IViewObject_GetColorSet_Proxy(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hicTargetDev,
+ LOGPALETTE **ppColorSet);
+HRESULT __RPC_STUB IViewObject_GetColorSet_Stub(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ ULONG_PTR pvAspect,
+ DVTARGETDEVICE *ptd,
+ ULONG_PTR hicTargetDev,
+ LOGPALETTE **ppColorSet);
+HRESULT CALLBACK IViewObject_Freeze_Proxy(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DWORD *pdwFreeze);
+HRESULT __RPC_STUB IViewObject_Freeze_Stub(
+ IViewObject* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ ULONG_PTR pvAspect,
+ DWORD *pdwFreeze);
+HRESULT CALLBACK IViewObject_GetAdvise_Proxy(
+ IViewObject* This,
+ DWORD *pAspects,
+ DWORD *pAdvf,
+ IAdviseSink **ppAdvSink);
+HRESULT __RPC_STUB IViewObject_GetAdvise_Stub(
+ IViewObject* This,
+ DWORD *pAspects,
+ DWORD *pAdvf,
+ IAdviseSink **ppAdvSink);
+
+#endif /* __IViewObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IViewObject2 interface
+ */
+#ifndef __IViewObject2_INTERFACE_DEFINED__
+#define __IViewObject2_INTERFACE_DEFINED__
+
+typedef IViewObject2 *LPVIEWOBJECT2;
+DEFINE_GUID(IID_IViewObject2, 0x00000127, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IViewObject2 : public IViewObject
+{
+ virtual HRESULT STDMETHODCALLTYPE GetExtent(
+ DWORD dwDrawAspect,
+ LONG lindex,
+ DVTARGETDEVICE *ptd,
+ LPSIZEL lpsizel) = 0;
+
+};
+#else
+typedef struct IViewObject2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IViewObject2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IViewObject2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IViewObject2* This);
+
+ /*** IViewObject methods ***/
+ HRESULT (STDMETHODCALLTYPE *Draw)(
+ IViewObject2* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hdcTargetDev,
+ HDC hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ BOOL (STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue),
+ ULONG_PTR dwContinue);
+
+ HRESULT (STDMETHODCALLTYPE *GetColorSet)(
+ IViewObject2* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DVTARGETDEVICE *ptd,
+ HDC hicTargetDev,
+ LOGPALETTE **ppColorSet);
+
+ HRESULT (STDMETHODCALLTYPE *Freeze)(
+ IViewObject2* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void *pvAspect,
+ DWORD *pdwFreeze);
+
+ HRESULT (STDMETHODCALLTYPE *Unfreeze)(
+ IViewObject2* This,
+ DWORD dwFreeze);
+
+ HRESULT (STDMETHODCALLTYPE *SetAdvise)(
+ IViewObject2* This,
+ DWORD aspects,
+ DWORD advf,
+ IAdviseSink *pAdvSink);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdvise)(
+ IViewObject2* This,
+ DWORD *pAspects,
+ DWORD *pAdvf,
+ IAdviseSink **ppAdvSink);
+
+ /*** IViewObject2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetExtent)(
+ IViewObject2* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ DVTARGETDEVICE *ptd,
+ LPSIZEL lpsizel);
+
+ END_INTERFACE
+} IViewObject2Vtbl;
+interface IViewObject2 {
+ CONST_VTBL IViewObject2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IViewObject2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IViewObject2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IViewObject2_Release(This) (This)->lpVtbl->Release(This)
+/*** IViewObject methods ***/
+#define IViewObject2_Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue) (This)->lpVtbl->Draw(This,dwDrawAspect,lindex,pvAspect,ptd,hdcTargetDev,hdcDraw,lprcBounds,lprcWBounds,pfnContinue,dwContinue)
+#define IViewObject2_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)
+#define IViewObject2_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)
+#define IViewObject2_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)
+#define IViewObject2_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)
+#define IViewObject2_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)
+/*** IViewObject2 methods ***/
+#define IViewObject2_GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IViewObject2_GetExtent_Proxy(
+ IViewObject2* This,
+ DWORD dwDrawAspect,
+ LONG lindex,
+ DVTARGETDEVICE *ptd,
+ LPSIZEL lpsizel);
+void __RPC_STUB IViewObject2_GetExtent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IViewObject2_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDropSource interface
+ */
+#ifndef __IDropSource_INTERFACE_DEFINED__
+#define __IDropSource_INTERFACE_DEFINED__
+
+typedef IDropSource *LPDROPSOURCE;
+DEFINE_GUID(IID_IDropSource, 0x00000121, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDropSource : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(
+ BOOL fEscapePressed,
+ DWORD grfKeyState) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GiveFeedback(
+ DWORD dwEffect) = 0;
+
+};
+#else
+typedef struct IDropSourceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IDropSource* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IDropSource* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IDropSource* This);
+
+ /*** IDropSource methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryContinueDrag)(
+ IDropSource* This,
+ BOOL fEscapePressed,
+ DWORD grfKeyState);
+
+ HRESULT (STDMETHODCALLTYPE *GiveFeedback)(
+ IDropSource* This,
+ DWORD dwEffect);
+
+ END_INTERFACE
+} IDropSourceVtbl;
+interface IDropSource {
+ CONST_VTBL IDropSourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDropSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDropSource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDropSource_Release(This) (This)->lpVtbl->Release(This)
+/*** IDropSource methods ***/
+#define IDropSource_QueryContinueDrag(This,fEscapePressed,grfKeyState) (This)->lpVtbl->QueryContinueDrag(This,fEscapePressed,grfKeyState)
+#define IDropSource_GiveFeedback(This,dwEffect) (This)->lpVtbl->GiveFeedback(This,dwEffect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDropSource_QueryContinueDrag_Proxy(
+ IDropSource* This,
+ BOOL fEscapePressed,
+ DWORD grfKeyState);
+void __RPC_STUB IDropSource_QueryContinueDrag_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropSource_GiveFeedback_Proxy(
+ IDropSource* This,
+ DWORD dwEffect);
+void __RPC_STUB IDropSource_GiveFeedback_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IDropSource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IDropTarget interface
+ */
+#ifndef __IDropTarget_INTERFACE_DEFINED__
+#define __IDropTarget_INTERFACE_DEFINED__
+
+typedef IDropTarget *LPDROPTARGET;
+#define MK_ALT (0x20)
+
+#define DROPEFFECT_NONE (0)
+
+#define DROPEFFECT_COPY (1)
+
+#define DROPEFFECT_MOVE (2)
+
+#define DROPEFFECT_LINK (4)
+
+#define DROPEFFECT_SCROLL (0x80000000)
+
+#define DD_DEFSCROLLINSET (11)
+
+#define DD_DEFSCROLLDELAY (50)
+
+#define DD_DEFSCROLLINTERVAL (50)
+
+#define DD_DEFDRAGDELAY (200)
+
+#define DD_DEFDRAGMINDIST (2)
+
+DEFINE_GUID(IID_IDropTarget, 0x00000122, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IDropTarget : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE DragEnter(
+ IDataObject *pDataObj,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DragOver(
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DragLeave(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Drop(
+ IDataObject *pDataObj,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect) = 0;
+
+};
+#else
+typedef struct IDropTargetVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IDropTarget* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IDropTarget* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IDropTarget* This);
+
+ /*** IDropTarget methods ***/
+ HRESULT (STDMETHODCALLTYPE *DragEnter)(
+ IDropTarget* This,
+ IDataObject *pDataObj,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect);
+
+ HRESULT (STDMETHODCALLTYPE *DragOver)(
+ IDropTarget* This,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect);
+
+ HRESULT (STDMETHODCALLTYPE *DragLeave)(
+ IDropTarget* This);
+
+ HRESULT (STDMETHODCALLTYPE *Drop)(
+ IDropTarget* This,
+ IDataObject *pDataObj,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect);
+
+ END_INTERFACE
+} IDropTargetVtbl;
+interface IDropTarget {
+ CONST_VTBL IDropTargetVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IDropTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IDropTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IDropTarget_Release(This) (This)->lpVtbl->Release(This)
+/*** IDropTarget methods ***/
+#define IDropTarget_DragEnter(This,pDataObj,grfKeyState,pt,pdwEffect) (This)->lpVtbl->DragEnter(This,pDataObj,grfKeyState,pt,pdwEffect)
+#define IDropTarget_DragOver(This,grfKeyState,pt,pdwEffect) (This)->lpVtbl->DragOver(This,grfKeyState,pt,pdwEffect)
+#define IDropTarget_DragLeave(This) (This)->lpVtbl->DragLeave(This)
+#define IDropTarget_Drop(This,pDataObj,grfKeyState,pt,pdwEffect) (This)->lpVtbl->Drop(This,pDataObj,grfKeyState,pt,pdwEffect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IDropTarget_DragEnter_Proxy(
+ IDropTarget* This,
+ IDataObject *pDataObj,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect);
+void __RPC_STUB IDropTarget_DragEnter_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropTarget_DragOver_Proxy(
+ IDropTarget* This,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect);
+void __RPC_STUB IDropTarget_DragOver_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropTarget_DragLeave_Proxy(
+ IDropTarget* This);
+void __RPC_STUB IDropTarget_DragLeave_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IDropTarget_Drop_Proxy(
+ IDropTarget* This,
+ IDataObject *pDataObj,
+ DWORD grfKeyState,
+ POINTL pt,
+ DWORD *pdwEffect);
+void __RPC_STUB IDropTarget_Drop_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IDropTarget_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG __RPC_USER HWND_UserSize (ULONG *, ULONG, HWND *);
+unsigned char * __RPC_USER HWND_UserMarshal (ULONG *, unsigned char *, HWND *);
+unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
+void __RPC_USER HWND_UserFree (ULONG *, HWND *);
+ULONG __RPC_USER HMENU_UserSize (ULONG *, ULONG, HMENU *);
+unsigned char * __RPC_USER HMENU_UserMarshal (ULONG *, unsigned char *, HMENU *);
+unsigned char * __RPC_USER HMENU_UserUnmarshal(ULONG *, unsigned char *, HMENU *);
+void __RPC_USER HMENU_UserFree (ULONG *, HMENU *);
+ULONG __RPC_USER HGLOBAL_UserSize (ULONG *, ULONG, HGLOBAL *);
+unsigned char * __RPC_USER HGLOBAL_UserMarshal (ULONG *, unsigned char *, HGLOBAL *);
+unsigned char * __RPC_USER HGLOBAL_UserUnmarshal(ULONG *, unsigned char *, HGLOBAL *);
+void __RPC_USER HGLOBAL_UserFree (ULONG *, HGLOBAL *);
+ULONG __RPC_USER HACCEL_UserSize (ULONG *, ULONG, HACCEL *);
+unsigned char * __RPC_USER HACCEL_UserMarshal (ULONG *, unsigned char *, HACCEL *);
+unsigned char * __RPC_USER HACCEL_UserUnmarshal(ULONG *, unsigned char *, HACCEL *);
+void __RPC_USER HACCEL_UserFree (ULONG *, HACCEL *);
+ULONG __RPC_USER CLIPFORMAT_UserSize (ULONG *, ULONG, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserMarshal (ULONG *, unsigned char *, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
+void __RPC_USER CLIPFORMAT_UserFree (ULONG *, CLIPFORMAT *);
+ULONG __RPC_USER STGMEDIUM_UserSize (ULONG *, ULONG, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserMarshal (ULONG *, unsigned char *, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
+void __RPC_USER STGMEDIUM_UserFree (ULONG *, STGMEDIUM *);
+ULONG __RPC_USER HDC_UserSize (ULONG *, ULONG, HDC *);
+unsigned char * __RPC_USER HDC_UserMarshal (ULONG *, unsigned char *, HDC *);
+unsigned char * __RPC_USER HDC_UserUnmarshal(ULONG *, unsigned char *, HDC *);
+void __RPC_USER HDC_UserFree (ULONG *, HDC *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_OLEIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl
new file mode 100644
index 00000000..2e36db9d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/oleidl.idl
@@ -0,0 +1,967 @@
+/*
+ * Copyright (C) 1999 Paul Quinn
+ * Copyright (C) 1999 Francis Beaudet
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "objidl.idl";
+#endif
+
+interface IOleInPlaceActiveObject;
+
+cpp_quote("#include <winuser.h>")
+
+/*****************************************************************************
+ * IOleTypes interface
+ */
+[
+ uuid(b0916c84-7416-101a-bcea-08002b2b79ef)
+]
+interface IOLETypes
+{
+ typedef enum tagOLERENDER
+ {
+ OLERENDER_NONE = 0,
+ OLERENDER_DRAW = 1,
+ OLERENDER_FORMAT = 2,
+ OLERENDER_ASIS = 3
+ } OLERENDER, *LPOLERENDER;
+
+ typedef struct tagOBJECTDESCRIPTOR
+ {
+ ULONG cbSize;
+ CLSID clsid;
+ DWORD dwDrawAspect;
+ SIZEL sizel;
+ POINTL pointl;
+ DWORD dwStatus;
+ DWORD dwFullUserTypeName;
+ DWORD dwSrcOfCopy;
+ } OBJECTDESCRIPTOR, *POBJECTDESCRIPTOR, *LPOBJECTDESCRIPTOR,
+ LINKSRCDESCRIPTOR, *PLINKSRCDESCRIPTOR, *LPLINKSRCDESCRIPTOR;
+}
+
+
+/*****************************************************************************
+ * IOleWindow interface
+ */
+[
+ object,
+ uuid(00000114-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleWindow : IUnknown
+{
+ typedef [unique] IOleWindow *LPOLEWINDOW;
+
+ HRESULT GetWindow(
+ [out] HWND *phwnd);
+
+ HRESULT ContextSensitiveHelp(
+ [in] BOOL fEnterMode);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceObject interface
+ */
+[
+ object,
+ uuid(00000113-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleInPlaceObject : IOleWindow
+{
+ typedef [unique] IOleInPlaceObject *LPOLEINPLACEOBJECT;
+
+ HRESULT InPlaceDeactivate();
+
+ HRESULT UIDeactivate();
+
+ HRESULT SetObjectRects(
+ [in] LPCRECT lprcPosRect,
+ [in] LPCRECT lprcClipRect);
+
+ HRESULT ReactivateAndUndo();
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceUIWindow interface
+ */
+[
+ object,
+ uuid(00000115-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+
+interface IOleInPlaceUIWindow : IOleWindow
+{
+ typedef [unique] IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;
+
+ typedef RECT BORDERWIDTHS;
+ typedef LPRECT LPBORDERWIDTHS;
+ typedef LPCRECT LPCBORDERWIDTHS;
+
+ HRESULT GetBorder(
+ [out] LPRECT lprectBorder);
+
+ HRESULT RequestBorderSpace(
+ [in, unique] LPCBORDERWIDTHS pborderwidths);
+
+ HRESULT SetBorderSpace(
+ [in, unique] LPCBORDERWIDTHS pborderwidths);
+
+ HRESULT SetActiveObject(
+ [in, unique] IOleInPlaceActiveObject *pActiveObject,
+ [in, string, unique] LPCOLESTR pszObjName);
+}
+
+
+/* avoid conflict with Wine Unicode macros */
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef TranslateAccelerator")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * IOleInPlaceFrame interface
+ */
+[
+ object,
+ uuid(00000116-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleInPlaceFrame : IOleInPlaceUIWindow
+{
+ typedef [unique] IOleInPlaceFrame *LPOLEINPLACEFRAME;
+
+ typedef struct tagOleInPlaceFrameInfo
+ {
+ UINT cb;
+ BOOL fMDIApp;
+ HWND hwndFrame;
+ HACCEL haccel;
+ UINT cAccelEntries;
+ } OLEINPLACEFRAMEINFO, *LPOLEINPLACEFRAMEINFO;
+
+ typedef struct tagOleMenuGroupWidths
+ {
+ LONG width[ 6 ];
+ } OLEMENUGROUPWIDTHS, *LPOLEMENUGROUPWIDTHS;
+
+ typedef HGLOBAL HOLEMENU;
+
+ HRESULT InsertMenus(
+ [in] HMENU hmenuShared,
+ [in,out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
+
+ HRESULT SetMenu(
+ [in] HMENU hmenuShared,
+ [in] HOLEMENU holemenu,
+ [in] HWND hwndActiveObject);
+
+ HRESULT RemoveMenus(
+ [in] HMENU hmenuShared);
+
+ HRESULT SetStatusText(
+ [in, unique] LPCOLESTR pszStatusText);
+
+ HRESULT EnableModeless(
+ [in] BOOL fEnable);
+
+ HRESULT TranslateAccelerator(
+ [in] LPMSG lpmsg,
+ [in] WORD wID);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceActiveObject interface
+ */
+[
+ object,
+ uuid(00000117-0000-0000-c000-000000000046)
+]
+interface IOleInPlaceActiveObject : IOleWindow
+{
+ typedef [unique] IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;
+
+ [local]
+ HRESULT TranslateAccelerator(
+ [in] LPMSG lpmsg);
+
+ [call_as(TranslateAccelerator)]
+ HRESULT RemoteTranslateAccelerator();
+
+ HRESULT OnFrameWindowActivate(
+ [in] BOOL fActivate);
+
+ HRESULT OnDocWindowActivate(
+ [in] BOOL fActivate);
+
+ [local]
+ HRESULT ResizeBorder(
+ [in] LPCRECT prcBorder,
+ [in, unique] IOleInPlaceUIWindow *pUIWindow,
+ [in] BOOL fFrameWindow);
+
+ [call_as(ResizeBorder)]
+ HRESULT RemoteResizeBorder(
+ [in] LPCRECT prcBorder,
+ [in] REFIID riid,
+ [in, unique, iid_is(riid)] IOleInPlaceUIWindow *pUIWindow,
+ [in] BOOL fFrameWindow);
+
+ HRESULT EnableModeless(
+ [in] BOOL fEnable);
+}
+
+
+/*****************************************************************************
+ * IOleInPlaceSite interface
+ */
+[
+ object,
+ uuid(00000119-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleInPlaceSite : IOleWindow
+{
+ typedef [unique] IOleInPlaceSite *LPOLEINPLACESITE;
+
+ HRESULT CanInPlaceActivate();
+ HRESULT OnInPlaceActivate();
+ HRESULT OnUIActivate();
+
+ HRESULT GetWindowContext(
+ [out] IOleInPlaceFrame **ppFrame,
+ [out] IOleInPlaceUIWindow **ppDoc,
+ [out] LPRECT lprcPosRect,
+ [out] LPRECT lprcClipRect,
+ [in, out] LPOLEINPLACEFRAMEINFO lpFrameInfo);
+
+ HRESULT Scroll(
+ [in] SIZE scrollExtent);
+
+ HRESULT OnUIDeactivate(
+ [in] BOOL fUndoable);
+
+ HRESULT OnInPlaceDeactivate();
+ HRESULT DiscardUndoState();
+ HRESULT DeactivateAndUndo();
+
+ HRESULT OnPosRectChange(
+ [in] LPCRECT lprcPosRect);
+}
+
+
+/*****************************************************************************
+ * IParseDisplayName interface
+ */
+[
+ object,
+ uuid(0000011a-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IParseDisplayName : IUnknown
+{
+ typedef [unique] IParseDisplayName *LPPARSEDISPLAYNAME;
+
+ HRESULT ParseDisplayName(
+ [in, unique] IBindCtx *pbc,
+ [in] LPOLESTR pszDisplayName,
+ [out] ULONG *pchEaten,
+ [out] IMoniker **ppmkOut);
+}
+
+
+/*****************************************************************************
+ * IOleContainer interface
+ */
+[
+ object,
+ uuid(0000011b-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleContainer : IParseDisplayName
+{
+ typedef [unique] IOleContainer *LPOLECONTAINER;
+
+ HRESULT EnumObjects(
+ [in] DWORD grfFlags,
+ [out] IEnumUnknown **ppenum);
+
+ HRESULT LockContainer(
+ [in] BOOL fLock);
+}
+
+
+/*****************************************************************************
+ * IOleItemContainer interface
+ */
+[
+ object,
+ uuid(0000011c-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleItemContainer : IOleContainer
+{
+ typedef [unique] IOleItemContainer *LPOLEITEMCONTAINER;
+
+ typedef enum tagBINDSPEED
+ {
+ BINDSPEED_INDEFINITE = 1,
+ BINDSPEED_MODERATE = 2,
+ BINDSPEED_IMMEDIATE = 3
+ } BINDSPEED;
+
+ typedef enum tagOLECONTF
+ {
+ OLECONTF_EMBEDDINGS = 1,
+ OLECONTF_LINKS = 2,
+ OLECONTF_OTHERS = 4,
+ OLECONTF_ONLYUSER = 8,
+ OLECONTF_ONLYIFRUNNING = 16
+ } OLECONTF;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetObject")
+cpp_quote("#endif")
+ HRESULT GetObject(
+ [in] LPOLESTR pszItem,
+ [in] DWORD dwSpeedNeeded,
+ [in, unique] IBindCtx *pbc,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObject);
+
+ HRESULT GetObjectStorage(
+ [in] LPOLESTR pszItem,
+ [in, unique] IBindCtx *pbc,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvStorage);
+
+ HRESULT IsRunning(
+ [in] LPOLESTR pszItem);
+}
+
+
+/*****************************************************************************
+ * IOleLink interface
+ */
+[
+ object,
+ uuid(0000011d-0000-0000-c000-000000000046)
+]
+interface IOleLink : IUnknown
+{
+ typedef [unique] IOleLink *LPOLELINK;
+
+ typedef enum tagOLEUPDATE
+ {
+ OLEUPDATE_ALWAYS = 1,
+ OLEUPDATE_ONCALL = 3
+ } OLEUPDATE, *POLEUPDATE, *LPOLEUPDATE;
+
+ typedef enum tagOLELINKBIND
+ {
+ OLELINKBIND_EVENIFCLASSDIFF = 1
+ } OLELINKBIND;
+
+ HRESULT SetUpdateOptions(
+ [in] DWORD dwUpdateOpt);
+
+ HRESULT GetUpdateOptions(
+ [out] DWORD *pdwUpdateOpt);
+
+ HRESULT SetSourceMoniker(
+ [in, unique] IMoniker *pmk,
+ [in] REFCLSID rclsid);
+
+ HRESULT GetSourceMoniker(
+ [out] IMoniker **ppmk);
+
+ HRESULT SetSourceDisplayName(
+ [in]LPCOLESTR pszStatusText);
+
+ HRESULT GetSourceDisplayName(
+ [out] LPOLESTR *ppszDisplayName);
+
+ HRESULT BindToSource(
+ [in] DWORD bindflags,
+ [in, unique] IBindCtx *pbc);
+
+ HRESULT BindIfRunning();
+
+ HRESULT GetBoundSource(
+ [out] IUnknown **ppunk);
+
+ HRESULT UnbindSource();
+
+ HRESULT Update(
+ [in, unique] IBindCtx *pbc);
+}
+
+
+/*****************************************************************************
+ * IOleClientSite interface
+ */
+[
+ object,
+ uuid(00000118-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleClientSite : IUnknown
+{
+ typedef [unique] IOleClientSite * LPOLECLIENTSITE;
+
+ HRESULT SaveObject();
+
+ HRESULT GetMoniker(
+ [in] DWORD dwAssign,
+ [in] DWORD dwWhichMoniker,
+ [out] IMoniker **ppmk);
+
+ HRESULT GetContainer(
+ [out] IOleContainer **ppContainer);
+
+ HRESULT ShowObject();
+
+ HRESULT OnShowWindow(
+ [in] BOOL fShow);
+
+ HRESULT RequestNewObjectLayout();
+}
+
+
+/*****************************************************************************
+ * IOleCache interface
+ */
+[
+ object,
+ uuid(0000011e-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleCache : IUnknown
+{
+ typedef [unique] IOleCache *LPOLECACHE;
+
+ HRESULT Cache(
+ [in, unique] FORMATETC *pformatetc,
+ [in] DWORD advf,
+ [out] DWORD *pdwConnection);
+
+ HRESULT Uncache(
+ [in] DWORD dwConnection);
+
+ HRESULT EnumCache(
+ [out] IEnumSTATDATA **ppenumSTATDATA);
+
+ HRESULT InitCache(
+ [in, unique] IDataObject *pDataObject);
+
+ HRESULT SetData(
+ [in, unique] FORMATETC *pformatetc,
+ [in, unique] STGMEDIUM *pmedium,
+ [in] BOOL fRelease);
+}
+
+
+/*****************************************************************************
+ * IOleCache2 interface
+ */
+[
+ object,
+ uuid(00000128-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleCache2 : IOleCache
+{
+ typedef [unique] IOleCache2 *LPOLECACHE2;
+
+ const DWORD UPDFCACHE_NODATACACHE = 0x00000001;
+ const DWORD UPDFCACHE_ONSAVECACHE = 0x00000002;
+ const DWORD UPDFCACHE_ONSTOPCACHE = 0x00000004;
+ const DWORD UPDFCACHE_NORMALCACHE = 0x00000008;
+ const DWORD UPDFCACHE_IFBLANK = 0x00000010;
+ const DWORD UPDFCACHE_ONLYIFBLANK = 0x80000000;
+
+ const DWORD UPDFCACHE_IFBLANKORONSAVECACHE = (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE);
+ const DWORD UPDFCACHE_ALL = ((DWORD)(~(UPDFCACHE_ONLYIFBLANK)));
+ const DWORD UPDFCACHE_ALLBUTNODATACACHE = (UPDFCACHE_ALL & ((DWORD)(~UPDFCACHE_NODATACACHE)));
+
+ typedef enum tagDISCARDCACHE
+ {
+ DISCARDCACHE_SAVEIFDIRTY = 0,
+ DISCARDCACHE_NOSAVE = 1
+ } DISCARDCACHE;
+
+ [local]
+ HRESULT UpdateCache(
+ [in] LPDATAOBJECT pDataObject,
+ [in] DWORD grfUpdf,
+ [in] LPVOID pReserved);
+
+ [call_as(UpdateCache)]
+ HRESULT RemoteUpdateCache(
+ [in] LPDATAOBJECT pDataObject,
+ [in] DWORD grfUpdf,
+ [in] LONG_PTR pReserved);
+
+ HRESULT DiscardCache(
+ [in] DWORD dwDiscardOptions);
+}
+
+
+/*****************************************************************************
+ * IOleCacheControl interface
+ */
+[
+ object,
+ uuid(00000129-0000-0000-c000-000000000046)
+]
+interface IOleCacheControl : IUnknown
+{
+ typedef [unique] IOleCacheControl *LPOLECACHECONTROL;
+
+ HRESULT OnRun(
+ LPDATAOBJECT pDataObject);
+
+ HRESULT OnStop();
+}
+
+
+/*****************************************************************************
+ * IEnumOLEVERB interface
+ */
+[
+ object,
+ uuid(00000104-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumOLEVERB : IUnknown
+{
+ typedef [unique] IEnumOLEVERB *LPENUMOLEVERB;
+
+ typedef struct tagOLEVERB
+ {
+ LONG lVerb;
+ LPOLESTR lpszVerbName;
+ DWORD fuFlags;
+ DWORD grfAttribs;
+ } OLEVERB, *LPOLEVERB;
+
+ typedef enum tagOLEVERBATTRIB
+ {
+ OLEVERBATTRIB_NEVERDIRTIES = 1,
+ OLEVERBATTRIB_ONCONTAINERMENU = 2
+ } OLEVERBATTRIB;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] LPOLEVERB rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumOLEVERB **ppenum);
+}
+
+
+/*****************************************************************************
+ * IOleObject interface
+ */
+[
+ object,
+ uuid(00000112-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IOleObject : IUnknown
+{
+ typedef [unique] IOleObject *LPOLEOBJECT;
+
+ typedef enum tagOLEGETMONIKER
+ {
+ OLEGETMONIKER_ONLYIFTHERE = 1,
+ OLEGETMONIKER_FORCEASSIGN = 2,
+ OLEGETMONIKER_UNASSIGN = 3,
+ OLEGETMONIKER_TEMPFORUSER = 4
+ } OLEGETMONIKER;
+
+ typedef enum tagOLEWHICHMK
+ {
+ OLEWHICHMK_CONTAINER = 1,
+ OLEWHICHMK_OBJREL = 2,
+ OLEWHICHMK_OBJFULL = 3
+ } OLEWHICHMK;
+
+ typedef enum tagUSERCLASSTYPE
+ {
+ USERCLASSTYPE_FULL = 1,
+ USERCLASSTYPE_SHORT = 2,
+ USERCLASSTYPE_APPNAME = 3
+ } USERCLASSTYPE;
+
+ typedef enum tagOLEMISC
+ {
+ OLEMISC_RECOMPOSEONRESIZE = 0x1,
+ OLEMISC_ONLYICONIC = 0x2,
+ OLEMISC_INSERTNOTREPLACE = 0x4,
+ OLEMISC_STATIC = 0x8,
+ OLEMISC_CANTLINKINSIDE = 0x10,
+ OLEMISC_CANLINKBYOLE1 = 0x20,
+ OLEMISC_ISLINKOBJECT = 0x40,
+ OLEMISC_INSIDEOUT = 0x80,
+ OLEMISC_ACTIVATEWHENVISIBLE = 0x100,
+ OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,
+ OLEMISC_INVISIBLEATRUNTIME = 0x400,
+ OLEMISC_ALWAYSRUN = 0x800,
+ OLEMISC_ACTSLIKEBUTTON = 0x1000,
+ OLEMISC_ACTSLIKELABEL = 0x2000,
+ OLEMISC_NOUIACTIVATE = 0x4000,
+ OLEMISC_ALIGNABLE = 0x8000,
+ OLEMISC_SIMPLEFRAME = 0x10000,
+ OLEMISC_SETCLIENTSITEFIRST = 0x20000,
+ OLEMISC_IMEMODE = 0x40000,
+ OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,
+ OLEMISC_WANTSTOMENUMERGE = 0x100000,
+ OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000
+ } OLEMISC;
+
+ typedef enum tagOLECLOSE
+ {
+ OLECLOSE_SAVEIFDIRTY = 0,
+ OLECLOSE_NOSAVE = 1,
+ OLECLOSE_PROMPTSAVE = 2
+ } OLECLOSE;
+
+ HRESULT SetClientSite(
+ [in, unique] IOleClientSite *pClientSite);
+
+ HRESULT GetClientSite(
+ [out] IOleClientSite **ppClientSite);
+
+ HRESULT SetHostNames(
+ [in] LPCOLESTR szContainerApp,
+ [in, unique] LPCOLESTR szContainerObj);
+
+ HRESULT Close(
+ [in] DWORD dwSaveOption);
+
+ HRESULT SetMoniker(
+ [in] DWORD dwWhichMoniker,
+ [in, unique] IMoniker *pmk);
+
+ HRESULT GetMoniker(
+ [in] DWORD dwAssign,
+ [in] DWORD dwWhichMoniker,
+ [out] IMoniker **ppmk);
+
+ HRESULT InitFromData(
+ [in, unique] IDataObject *pDataObject,
+ [in] BOOL fCreation,
+ [in] DWORD dwReserved);
+
+ HRESULT GetClipboardData(
+ [in] DWORD dwReserved,
+ [out] IDataObject **ppDataObject);
+
+ HRESULT DoVerb(
+ [in] LONG iVerb,
+ [in, unique] LPMSG lpmsg,
+ [in, unique] IOleClientSite *pActiveSite,
+ [in] LONG lindex,
+ [in] HWND hwndParent,
+ [in, unique] LPCRECT lprcPosRect);
+
+ HRESULT EnumVerbs(
+ [out] IEnumOLEVERB **ppEnumOleVerb);
+
+ HRESULT Update();
+
+ HRESULT IsUpToDate();
+
+ HRESULT GetUserClassID(
+ [out] CLSID *pClsid);
+
+ HRESULT GetUserType(
+ [in] DWORD dwFormOfType,
+ [out] LPOLESTR *pszUserType);
+
+ HRESULT SetExtent(
+ [in] DWORD dwDrawAspect,
+ [in] SIZEL *psizel);
+
+ HRESULT GetExtent(
+ [in] DWORD dwDrawAspect,
+ [out] SIZEL *psizel);
+
+ HRESULT Advise(
+ [in, unique] IAdviseSink *pAdvSink,
+ [out] DWORD *pdwConnection);
+
+ HRESULT Unadvise(
+ [in] DWORD dwConnection);
+
+ HRESULT EnumAdvise(
+ [out] IEnumSTATDATA **ppenumAdvise);
+
+ HRESULT GetMiscStatus(
+ [in] DWORD dwAspect,
+ [out] DWORD *pdwStatus);
+
+ HRESULT SetColorScheme(
+ [in] LOGPALETTE *pLogpal);
+}
+
+
+/*****************************************************************************
+ * IOleAdviseHolder interface
+ */
+[
+ local,
+ object,
+ uuid(00000111-0000-0000-c000-000000000046)
+]
+interface IOleAdviseHolder : IUnknown
+{
+ typedef [unique] IOleAdviseHolder * LPOLEADVISEHOLDER;
+
+ HRESULT Advise(
+ [in, unique] IAdviseSink *pAdvise,
+ [out] DWORD *pdwConnection);
+
+ HRESULT Unadvise(
+ [in] DWORD dwConnection);
+
+ HRESULT EnumAdvise(
+ [out] IEnumSTATDATA **ppenumAdvise);
+
+ HRESULT SendOnRename(
+ [in, unique] IMoniker *pmk);
+
+ HRESULT SendOnSave();
+ HRESULT SendOnClose();
+}
+
+
+/*****************************************************************************
+ * IContinue interface
+ */
+[
+ object,
+ uuid(0000012a-0000-0000-c000-000000000046)
+]
+interface IContinue : IUnknown
+{
+ HRESULT FContinue();
+}
+
+
+/*****************************************************************************
+ * IViewObject interface
+ */
+[
+ object,
+ uuid(0000010d-0000-0000-c000-000000000046)
+]
+interface IViewObject : IUnknown
+{
+ typedef [unique] IViewObject *LPVIEWOBJECT;
+
+ [local]
+ HRESULT Draw(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in, unique] void * pvAspect,
+ [in, unique] DVTARGETDEVICE *ptd,
+ [in] HDC hdcTargetDev,
+ [in] HDC hdcDraw,
+ [in] LPCRECTL lprcBounds,
+ [in, unique] LPCRECTL lprcWBounds,
+ [in] BOOL (*pfnContinue)(ULONG_PTR dwContinue),
+ [in] ULONG_PTR dwContinue);
+
+ [call_as(Draw)]
+ HRESULT RemoteDraw(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in] ULONG_PTR pvAspect,
+ [in, unique] DVTARGETDEVICE *ptd,
+ [in] ULONG_PTR hdcTargetDev,
+ [in] ULONG_PTR hdcDraw,
+ [in] LPCRECTL lprcBounds,
+ [in, unique] LPCRECTL lprcWBounds,
+ [in] IContinue *pContinue);
+
+ [local]
+ HRESULT GetColorSet(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in, unique] void *pvAspect,
+ [in, unique] DVTARGETDEVICE *ptd,
+ [in] HDC hicTargetDev,
+ [out] LOGPALETTE **ppColorSet);
+
+ [call_as(GetColorSet)]
+ HRESULT RemoteGetColorSet(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in] ULONG_PTR pvAspect,
+ [in, unique] DVTARGETDEVICE *ptd,
+ [in] ULONG_PTR hicTargetDev,
+ [out] LOGPALETTE **ppColorSet);
+
+ [local]
+ HRESULT Freeze(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in, unique] void *pvAspect,
+ [out] DWORD *pdwFreeze);
+
+ [call_as(Freeze)]
+ HRESULT RemoteFreeze(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in] ULONG_PTR pvAspect,
+ [out] DWORD *pdwFreeze);
+
+ HRESULT Unfreeze(
+ [in] DWORD dwFreeze);
+
+ HRESULT SetAdvise(
+ [in] DWORD aspects,
+ [in] DWORD advf,
+ [in, unique] IAdviseSink *pAdvSink);
+
+ [local]
+ HRESULT GetAdvise(
+ [out, unique] DWORD *pAspects,
+ [out, unique] DWORD *pAdvf,
+ [out] IAdviseSink **ppAdvSink);
+
+ [call_as(GetAdvise)]
+ HRESULT RemoteGetAdvise(
+ [out] DWORD *pAspects,
+ [out] DWORD *pAdvf,
+ [out] IAdviseSink **ppAdvSink);
+}
+
+
+/*****************************************************************************
+ * IViewObject2 interface
+ */
+[
+ object,
+ uuid(00000127-0000-0000-c000-000000000046)
+]
+interface IViewObject2 : IViewObject
+{
+ typedef [unique] IViewObject2 *LPVIEWOBJECT2;
+
+ HRESULT GetExtent(
+ [in] DWORD dwDrawAspect,
+ [in] LONG lindex,
+ [in, unique] DVTARGETDEVICE* ptd,
+ [out] LPSIZEL lpsizel);
+}
+
+
+/*****************************************************************************
+ * IDropSource interface
+ */
+[
+ local,
+ object,
+ uuid(00000121-0000-0000-c000-000000000046)
+]
+interface IDropSource : IUnknown
+{
+ typedef [unique] IDropSource *LPDROPSOURCE;
+
+ HRESULT QueryContinueDrag(
+ [in] BOOL fEscapePressed,
+ [in] DWORD grfKeyState);
+
+ HRESULT GiveFeedback(
+ [in] DWORD dwEffect);
+}
+
+
+/*****************************************************************************
+ * IDropTarget interface
+ */
+[
+ object,
+ uuid(00000122-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IDropTarget : IUnknown
+{
+ typedef [unique] IDropTarget *LPDROPTARGET;
+
+ const DWORD MK_ALT = 0x20;
+ const DWORD DROPEFFECT_NONE = 0;
+ const DWORD DROPEFFECT_COPY = 1;
+ const DWORD DROPEFFECT_MOVE = 2;
+ const DWORD DROPEFFECT_LINK = 4;
+ const DWORD DROPEFFECT_SCROLL = 0x80000000;
+ const DWORD DD_DEFSCROLLINSET = 11;
+ const DWORD DD_DEFSCROLLDELAY = 50;
+ const DWORD DD_DEFSCROLLINTERVAL = 50;
+ const DWORD DD_DEFDRAGDELAY = 200;
+ const DWORD DD_DEFDRAGMINDIST = 2;
+
+ HRESULT DragEnter(
+ [in, unique] IDataObject *pDataObj,
+ [in] DWORD grfKeyState,
+ [in] POINTL pt,
+ [in, out] DWORD *pdwEffect);
+
+ HRESULT DragOver(
+ [in] DWORD grfKeyState,
+ [in] POINTL pt,
+ [in, out] DWORD *pdwEffect);
+
+ HRESULT DragLeave();
+
+ HRESULT Drop(
+ [in, unique] IDataObject *pDataObj,
+ [in] DWORD grfKeyState,
+ [in] POINTL pt,
+ [in, out] DWORD *pdwEffect);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl
new file mode 100644
index 00000000..512d911c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/opnrst.idl
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a69-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IOpenRowset : IUnknown
+{
+ [local]
+ HRESULT OpenRowset([in] IUnknown *pUnkOuter,
+ [in, unique] DBID *pTableID,
+ [in, unique] DBID *pIndexID,
+ [in] REFIID riid,
+ [in] ULONG cPropertySets,
+ [in, out, size_is(cPropertySets)] DBPROPSET rgPropertySets[],
+ [out, iid_is(riid)] IUnknown **ppRowset);
+
+ [call_as(OpenRowset)]
+ HRESULT RemoteOpenRowset([in] IUnknown *pUnkOuter,
+ [in, unique] DBID *pTableID,
+ [in, unique] DBID *pIndexID,
+ [in] REFIID riid,
+ [in] ULONG cPropertySets,
+ [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+ [in, out, unique, iid_is(riid)] IUnknown **ppRowset,
+ [in] ULONG cTotalProps,
+ [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl
new file mode 100644
index 00000000..e0346f1a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/optary.idl
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2006 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+/*****************************************************************************
+ * IOptionArray interface
+ */
+[
+ local,
+ object,
+ uuid(22b6d492-0f88-11d1-ba19-00c04fd912d0),
+ pointer_default(unique)
+]
+interface IOptionArray : IUnknown
+{
+ typedef [unique] IOptionArray *LPOPTIONARRAY;
+
+ HRESULT QueryOption(
+ [in] DWORD dwOption,
+ [out, size_is(*pcbBuf)] LPVOID pBuffer,
+ [in, out] ULONG *pcbBuf);
+
+ HRESULT SetOption(
+ [in] DWORD dwOption,
+ [in, size_is(cbBuf)] LPVOID pBuffer,
+ [in] ULONG cbBuf);
+}
+
+/*****************************************************************************
+ * IHtmlLoadOptions interface
+ */
+[
+ local,
+ object,
+ uuid(a71a0808-0f88-11d1-ba19-00c04fd912d0),
+ pointer_default(unique)
+]
+interface IHtmlLoadOptions : IOptionArray
+{
+ typedef enum {
+ HTMLLOADOPTION_CODEPAGE,
+ HTMLLOADOPTION_INETSHORTCUTPATH,
+ HTMLLOADOPTION_HYPERLINK,
+ HTMLLOADOPTION_FRAMELOAD
+ } HTMLLOADOPTION;
+}
+
+cpp_quote("DEFINE_GUID(CLSID_HTMLLoadOptions, 0x18845040, 0x0FA5, 0x11D1, 0xBA,0x19, 0x00,0xC0,0x4F,0xD9,0x12,0xD0);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h
new file mode 100644
index 00000000..06466961
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/patchapi.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2011 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _PATCHAPI_H_
+#define _PATCHAPI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define APPLY_OPTION_FAIL_IF_EXACT 0x00000001
+#define APPLY_OPTION_FAIL_IF_CLOSE 0x00000002
+#define APPLY_OPTION_TEST_ONLY 0x00000004
+#define APPLY_OPTION_VALID_FLAGS 0x00000007
+
+typedef struct _PATCH_IGNORE_RANGE
+{
+ ULONG OffsetInOldFile;
+ ULONG LengthInBytes;
+} PATCH_IGNORE_RANGE, *PPATCH_IGNORE_RANGE;
+
+typedef struct _PATCH_RETAIN_RANGE
+{
+ ULONG OffsetInOldFile;
+ ULONG LengthInBytes;
+ ULONG OffsetInNewFile;
+} PATCH_RETAIN_RANGE, *PPATCH_RETAIN_RANGE;
+
+BOOL WINAPI ApplyPatchToFileA(LPCSTR,LPCSTR,LPCSTR,ULONG);
+BOOL WINAPI ApplyPatchToFileW(LPCWSTR,LPCWSTR,LPCWSTR,ULONG);
+#define ApplyPatchToFile WINELIB_NAME_AW(ApplyPatchToFile)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PATCHAPI_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h
new file mode 100644
index 00000000..34053eec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdh.h
@@ -0,0 +1,255 @@
+/*
+ * Performance Data Helper
+ *
+ * Copyright 2007 Hans Leidekker
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _PDH_H_
+#define _PDH_H_
+
+#include <windows.h>
+#include <winperf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef LONG PDH_STATUS;
+typedef HANDLE PDH_HQUERY;
+typedef HANDLE PDH_HCOUNTER;
+typedef HANDLE PDH_HLOG;
+
+typedef PDH_HCOUNTER HCOUNTER;
+typedef PDH_HQUERY HQUERY;
+typedef PDH_HLOG HLOG;
+
+#define PDH_CVERSION_WIN40 0x0400
+#define PDH_CVERSION_WIN50 0x0500
+#define PDH_VERSION 0x0503
+
+#define PDH_MAX_SCALE 7
+#define PDH_MIN_SCALE (-7)
+
+#define PDH_MAX_COUNTER_NAME 1024
+
+#define PDH_FMT_LONG 0x00000100
+#define PDH_FMT_DOUBLE 0x00000200
+#define PDH_FMT_LARGE 0x00000400
+#define PDH_FMT_NOSCALE 0x00001000
+#define PDH_FMT_1000 0x00002000
+#define PDH_FMT_NOCAP100 0x00008000
+
+#define DATA_SOURCE_REGISTRY 0x00000001
+#define DATA_SOURCE_LOGFILE 0x00000002
+#define DATA_SOURCE_WBEM 0x00000004
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_PDH_TYPE_AW(name) /* nothing */
+#else /* WINE_NO_UNICODE_MACROS */
+# ifdef UNICODE
+# define DECL_PDH_TYPE_AW(name) typedef name##_W name;
+# else
+# define DECL_PDH_TYPE_AW(name) typedef name##_A name;
+# endif
+#endif /* WINE_NO_UNICODE_MACROS */
+
+typedef struct _PDH_FMT_COUNTERVALUE
+{
+ DWORD CStatus;
+ union
+ {
+ LONG longValue;
+ double doubleValue;
+ LONGLONG largeValue;
+ LPCSTR AnsiStringValue;
+ LPCWSTR WideStringValue;
+ } DUMMYUNIONNAME;
+} PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
+
+typedef struct _PDH_RAW_COUNTER
+{
+ DWORD CStatus;
+ FILETIME TimeStamp;
+ LONGLONG FirstValue;
+ LONGLONG SecondValue;
+ DWORD MultiCount;
+} PDH_RAW_COUNTER, *PPDH_RAW_COUNTER;
+
+typedef struct _PDH_COUNTER_PATH_ELEMENTS_A
+{
+ LPSTR szMachineName;
+ LPSTR szObjectName;
+ LPSTR szInstanceName;
+ LPSTR szParentInstance;
+ DWORD dwInstanceIndex;
+ LPSTR szCounterName;
+} PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A;
+
+typedef struct _PDH_COUNTER_PATH_ELEMENTS_W
+{
+ LPWSTR szMachineName;
+ LPWSTR szObjectName;
+ LPWSTR szInstanceName;
+ LPWSTR szParentInstance;
+ DWORD dwInstanceIndex;
+ LPWSTR szCounterName;
+} PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W;
+
+DECL_PDH_TYPE_AW(PDH_COUNTER_PATH_ELEMENTS)
+DECL_PDH_TYPE_AW(PPDH_COUNTER_PATH_ELEMENTS)
+
+typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A
+{
+ LPSTR szMachineName;
+ GUID ObjectGUID;
+ DWORD dwItemId;
+ LPSTR szInstanceName;
+} PDH_DATA_ITEM_PATH_ELEMENTS_A, *PPDH_DATA_ITEM_PATH_ELEMENTS_A;
+
+typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W
+{
+ LPWSTR szMachineName;
+ GUID ObjectGUID;
+ DWORD dwItemId;
+ LPWSTR szInstanceName;
+} PDH_DATA_ITEM_PATH_ELEMENTS_W, *PPDH_DATA_ITEM_PATH_ELEMENTS_W;
+
+DECL_PDH_TYPE_AW(PDH_DATA_ITEM_PATH_ELEMENTS)
+DECL_PDH_TYPE_AW(PPDH_DATA_ITEM_PATH_ELEMENTS)
+
+typedef struct _PDH_COUNTER_INFO_A
+{
+ DWORD dwLength;
+ DWORD dwType;
+ DWORD CVersion;
+ DWORD CStatus;
+ LONG lScale;
+ LONG lDefaultScale;
+ DWORD_PTR dwUserData;
+ DWORD_PTR dwQueryUserData;
+ LPSTR szFullPath;
+ union
+ {
+ PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;
+ PDH_COUNTER_PATH_ELEMENTS_A CounterPath;
+ struct
+ {
+ LPSTR szMachineName;
+ LPSTR szObjectName;
+ LPSTR szInstanceName;
+ LPSTR szParentInstance;
+ DWORD dwInstanceIndex;
+ LPSTR szCounterName;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ LPSTR szExplainText;
+ DWORD DataBuffer[1];
+} PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A;
+
+typedef struct _PDH_COUNTER_INFO_W
+{
+ DWORD dwLength;
+ DWORD dwType;
+ DWORD CVersion;
+ DWORD CStatus;
+ LONG lScale;
+ LONG lDefaultScale;
+ DWORD_PTR dwUserData;
+ DWORD_PTR dwQueryUserData;
+ LPWSTR szFullPath;
+ union
+ {
+ PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;
+ PDH_COUNTER_PATH_ELEMENTS_W CounterPath;
+ struct
+ {
+ LPWSTR szMachineName;
+ LPWSTR szObjectName;
+ LPWSTR szInstanceName;
+ LPWSTR szParentInstance;
+ DWORD dwInstanceIndex;
+ LPWSTR szCounterName;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ LPWSTR szExplainText;
+ DWORD DataBuffer[1];
+} PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W;
+
+DECL_PDH_TYPE_AW(PDH_COUNTER_INFO)
+DECL_PDH_TYPE_AW(PPDH_COUNTER_INFO)
+
+#undef DECL_PDH_TYPE_AW
+
+PDH_STATUS WINAPI PdhAddCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);
+PDH_STATUS WINAPI PdhAddCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);
+#define PdhAddCounter WINELIB_NAME_AW(PdhAddCounter)
+PDH_STATUS WINAPI PdhAddEnglishCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);
+PDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);
+#define PdhAddEnglishCounter WINELIB_NAME_AW(PdhAddEnglishCounter)
+PDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY);
+PDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY);
+PDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY, DWORD, HANDLE);
+PDH_STATUS WINAPI PdhCollectQueryDataWithTime(PDH_HQUERY,LONGLONG *);
+PDH_STATUS WINAPI PdhEnumObjectsA(LPCSTR,LPCSTR,PZZSTR,LPDWORD,DWORD,BOOL);
+PDH_STATUS WINAPI PdhEnumObjectsW(LPCWSTR,LPCWSTR,PZZWSTR,LPDWORD,DWORD,BOOL);
+#define PdhEnumObjects WINELIB_NAME_AW(PdhEnumObjects)
+PDH_STATUS WINAPI PdhEnumObjectItemsA(LPCSTR, LPCSTR, LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, DWORD, DWORD);
+PDH_STATUS WINAPI PdhEnumObjectItemsW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, DWORD, DWORD);
+#define PdhEnumObjectItems WINELIB_NAME_AW(PdhEnumObjectItems)
+PDH_STATUS WINAPI PdhGetCounterInfoA(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_A);
+PDH_STATUS WINAPI PdhGetCounterInfoW(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_W);
+#define PdhGetCounterInfo WINELIB_NAME_AW(PdhGetCounterInfo)
+PDH_STATUS WINAPI PdhGetCounterTimeBase(PDH_HCOUNTER, LONGLONG *);
+PDH_STATUS WINAPI PdhGetDllVersion(LPDWORD);
+PDH_STATUS WINAPI PdhGetFormattedCounterValue(PDH_HCOUNTER, DWORD, LPDWORD, PPDH_FMT_COUNTERVALUE);
+PDH_STATUS WINAPI PdhGetRawCounterValue(PDH_HCOUNTER, LPDWORD, PPDH_RAW_COUNTER);
+PDH_STATUS WINAPI PdhLookupPerfIndexByNameA(LPCSTR, LPCSTR, LPDWORD);
+PDH_STATUS WINAPI PdhLookupPerfIndexByNameW(LPCWSTR, LPCWSTR, LPDWORD);
+#define PdhLookupPerfIndexByName WINELIB_NAME_AW(PdhLookupPerfIndexByName)
+PDH_STATUS WINAPI PdhLookupPerfNameByIndexA(LPCSTR, DWORD, LPSTR, LPDWORD);
+PDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR, DWORD, LPWSTR, LPDWORD);
+#define PdhLookupPerfNameByIndex WINELIB_NAME_AW(PdhLookupPerfNameByIndex)
+PDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *, LPSTR, LPDWORD, DWORD);
+PDH_STATUS WINAPI PdhMakeCounterPathW(PDH_COUNTER_PATH_ELEMENTS_W *, LPWSTR, LPDWORD, DWORD);
+#define PdhMakeCounterPath WINELIB_NAME_AW(PdhMakeCounterPath)
+PDH_STATUS WINAPI PdhOpenQueryA(LPCSTR, DWORD_PTR, PDH_HQUERY *);
+PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *);
+#define PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery)
+PDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER);
+PDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER, LONG);
+PDH_STATUS WINAPI PdhSetDefaultRealTimeDataSource(DWORD);
+PDH_STATUS WINAPI PdhValidatePathA(LPCSTR);
+PDH_STATUS WINAPI PdhValidatePathW(LPCWSTR);
+#define PdhValidatePath WINELIB_NAME_AW(PdhValidatePath)
+PDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG, LPCSTR);
+PDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG, LPCWSTR);
+#define PdhValidatePathEx WINELIB_NAME_AW(PdhValidatePathEx)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PDH_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h
new file mode 100644
index 00000000..61f3e317
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pdhmsg.h
@@ -0,0 +1,120 @@
+/*
+ * Performance Data Helper
+ *
+ * Copyright 2007 Hans Leidekker
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _PDH_MSG_H_
+#define _PDH_MSG_H_
+
+#define PDH_CSTATUS_VALID_DATA 0x00000000
+#define PDH_CSTATUS_NEW_DATA 0x00000001
+#define PDH_CSTATUS_NO_MACHINE 0x800007d0
+#define PDH_CSTATUS_NO_INSTANCE 0x800007d1
+#define PDH_MORE_DATA 0x800007d2
+#define PDH_CSTATUS_ITEM_NOT_VALIDATED 0x800007d3
+#define PDH_RETRY 0x800007d4
+#define PDH_NO_DATA 0x800007d5
+#define PDH_CALC_NEGATIVE_DENOMINATOR 0x800007d6
+#define PDH_CALC_NEGATIVE_TIMEBASE 0x800007d7
+#define PDH_CALC_NEGATIVE_VALUE 0x800007d8
+#define PDH_DIALOG_CANCELLED 0x800007d9
+#define PDH_END_OF_LOG_FILE 0x800007da
+#define PDH_ASYNC_QUERY_TIMEOUT 0x800007db
+#define PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE 0x800007dc
+#define PDH_UNABLE_MAP_NAME_FILES 0x80000bd5
+#define PDH_PLA_VALIDATION_WARNING 0x80000bf3
+#define PDH_CSTATUS_NO_OBJECT 0xc0000bb8
+#define PDH_CSTATUS_NO_COUNTER 0xc0000bb9
+#define PDH_CSTATUS_INVALID_DATA 0xc0000bba
+#define PDH_MEMORY_ALLOCATION_FAILURE 0xc0000bbb
+#define PDH_INVALID_HANDLE 0xc0000bbc
+#define PDH_INVALID_ARGUMENT 0xc0000bbd
+#define PDH_FUNCTION_NOT_FOUND 0xc0000bbe
+#define PDH_CSTATUS_NO_COUNTERNAME 0xc0000bbf
+#define PDH_CSTATUS_BAD_COUNTERNAME 0xc0000bc0
+#define PDH_INVALID_BUFFER 0xc0000bc1
+#define PDH_INSUFFICIENT_BUFFER 0xc0000bc2
+#define PDH_CANNOT_CONNECT_MACHINE 0xc0000bc3
+#define PDH_INVALID_PATH 0xc0000bc4
+#define PDH_INVALID_INSTANCE 0xc0000bc5
+#define PDH_INVALID_DATA 0xc0000bc6
+#define PDH_NO_DIALOG_DATA 0xc0000bc7
+#define PDH_CANNOT_READ_NAME_STRINGS 0xc0000bc8
+#define PDH_LOG_FILE_CREATE_ERROR 0xc0000bc9
+#define PDH_LOG_FILE_OPEN_ERROR 0xc0000bca
+#define PDH_LOG_TYPE_NOT_FOUND 0xc0000bcb
+#define PDH_NO_MORE_DATA 0xc0000bcc
+#define PDH_ENTRY_NOT_IN_LOG_FILE 0xc0000bcd
+#define PDH_DATA_SOURCE_IS_LOG_FILE 0xc0000bce
+#define PDH_DATA_SOURCE_IS_REAL_TIME 0xc0000bcf
+#define PDH_UNABLE_READ_LOG_HEADER 0xc0000bd0
+#define PDH_FILE_NOT_FOUND 0xc0000bd1
+#define PDH_FILE_ALREADY_EXISTS 0xc0000bd2
+#define PDH_NOT_IMPLEMENTED 0xc0000bd3
+#define PDH_STRING_NOT_FOUND 0xc0000bd4
+#define PDH_UNKNOWN_LOG_FORMAT 0xc0000bd6
+#define PDH_UNKNOWN_LOGSVC_COMMAND 0xc0000bd7
+#define PDH_LOGSVC_QUERY_NOT_FOUND 0xc0000bd8
+#define PDH_LOGSVC_NOT_OPENED 0xc0000bd9
+#define PDH_WBEM_ERROR 0xc0000bda
+#define PDH_ACCESS_DENIED 0xc0000bdb
+#define PDH_LOG_FILE_TOO_SMALL 0xc0000bdc
+#define PDH_INVALID_DATASOURCE 0xc0000bdd
+#define PDH_INVALID_SQLDB 0xc0000bde
+#define PDH_NO_COUNTERS 0xc0000bdf
+#define PDH_SQL_ALLOC_FAILED 0xc0000be0
+#define PDH_SQL_ALLOCCON_FAILED 0xc0000be1
+#define PDH_SQL_EXEC_DIRECT_FAILED 0xc0000be2
+#define PDH_SQL_FETCH_FAILED 0xc0000be3
+#define PDH_SQL_ROWCOUNT_FAILED 0xc0000be4
+#define PDH_SQL_MORE_RESULTS_FAILED 0xc0000be5
+#define PDH_SQL_CONNECT_FAILED 0xc0000be6
+#define PDH_SQL_BIND_FAILED 0xc0000be7
+#define PDH_CANNOT_CONNECT_WMI_SERVER 0xc0000be8
+#define PDH_PLA_COLLECTION_ALREADY_RUNNING 0xc0000be9
+#define PDH_PLA_ERROR_SCHEDULE_OVERLAP 0xc0000bea
+#define PDH_PLA_COLLECTION_NOT_FOUND 0xc0000beb
+#define PDH_PLA_ERROR_SCHEDULE_ELAPSED 0xc0000bec
+#define PDH_PLA_ERROR_NOSTART 0xc0000bed
+#define PDH_PLA_ERROR_ALREADY_EXISTS 0xc0000bee
+#define PDH_PLA_ERROR_TYPE_MISMATCH 0xc0000bef
+#define PDH_PLA_ERROR_FILEPATH 0xc0000bf0
+#define PDH_PLA_SERVICE_ERROR 0xc0000bf1
+#define PDH_PLA_VALIDATION_ERROR 0xc0000bf2
+#define PDH_PLA_ERROR_NAME_TOO_LONG 0xc0000bf4
+#define PDH_INVALID_SQL_LOG_FORMAT 0xc0000bf5
+#define PDH_COUNTER_ALREADY_IN_QUERY 0xc0000bf6
+#define PDH_BINARY_LOG_CORRUPT 0xc0000bf7
+#define PDH_LOG_SAMPLE_TOO_SMALL 0xc0000bf8
+#define PDH_OS_LATER_VERSION 0xc0000bf9
+#define PDH_OS_EARLIER_VERSION 0xc0000bfa
+#define PDH_INCORRECT_APPEND_TIME 0xc0000bfb
+#define PDH_UNMATCHED_APPEND_COUNTER 0xc0000bfc
+#define PDH_SQL_ALTER_DETAIL_FAILED 0xc0000bfd
+#define PDH_QUERY_PERF_DATA_TIMEOUT 0xc0000bfe
+
+#endif /* _PDH_MSG_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl
new file mode 100644
index 00000000..4effb683
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/perhist.idl
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2009 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+[
+ object,
+ uuid(91A565C1-E38F-11d0-94BF-00A0C9055CBF),
+ pointer_default(unique)
+]
+interface IPersistHistory : IPersist
+{
+ typedef [unique] IPersistHistory *LPPERSISTHISTORY;
+
+ HRESULT LoadHistory([in] IStream *pStream, [in] IBindCtx *pbc);
+
+ HRESULT SaveHistory([in] IStream *pStream);
+
+ HRESULT SetPositionCookie([in] DWORD dwPositioncookie);
+
+ HRESULT GetPositionCookie([out] DWORD *pdwPositioncookie);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h
new file mode 100644
index 00000000..3fa5e48f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pktdef.h
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 1991-1998 by LCS/Telegraphics
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PKTDEF_H
+#define __WINE_PKTDEF_H
+
+/***********************************************************************
+ * How to use pktdef.h:
+ *
+ * 1. Include wintab.h
+ * 2. if using just one packet format:
+ * a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits
+ * (use the PK_* identifiers).
+ * b. Include pktdef.h.
+ * c. The generated structure typedef will be called PACKET. Use PACKETDATA
+ * and PACKETMODE to fill in the LOGCONTEXT structure.
+ * 3. If using multiple packet formats, for each one:
+ * a. Define PACKETNAME. Its text value will be a prefix for this packet's
+ * parameters and names.
+ * b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
+ * 2.a. above.
+ * c. Include pktdef.h.
+ * d. The generated structure typedef will be called
+ * <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
+ * 4. If using extension packet data, do the following additional steps
+ * for each extension:
+ * a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
+ * as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.
+ * b. The generated structure typedef will contain a field for the
+ * extension data.
+ * c. Scan the WTI_EXTENSION categories to find the extension's
+ * packet mask bit.
+ * d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
+ * result in the lcPktData field of the LOGCONTEXT structure.
+ * e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
+ * packet mask bit with <PACKETNAME>PACKETMODE and use the result
+ * in the lcPktMode field of the LOGCONTEXT structure.
+ *
+ *
+ * Example #1. -- single packet format
+ *
+ * #include <wintab.h>
+ * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
+ * #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * ...
+ * lc.lcPktData = PACKETDATA;
+ * lc.lcPktMode = PACKETMODE;
+ *
+ * Example #2. -- multiple formats
+ *
+ * #include <wintab.h>
+ * #define PACKETNAME MOE
+ * #define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
+ * #define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * #define PACKETNAME LARRY
+ * #define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/
+ * #define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * #define PACKETNAME CURLY
+ * #define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/
+ * #define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
+ * #include <pktdef.h>
+ * ...
+ * lcMOE.lcPktData = MOEPACKETDATA;
+ * lcMOE.lcPktMode = MOEPACKETMODE;
+ * ...
+ * lcLARRY.lcPktData = LARRYPACKETDATA;
+ * lcLARRY.lcPktMode = LARRYPACKETMODE;
+ * ...
+ * lcCURLY.lcPktData = CURLYPACKETDATA;
+ * lcCURLY.lcPktMode = CURLYPACKETMODE;
+ *
+ * Example #3. -- extension packet data "XFOO".
+ *
+ * #include <wintab.h>
+ * #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
+ * #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
+ * #define PACKETXFOO PKEXT_ABSOLUTE /@ XFOO absolute mode @/
+ * #include <pktdef.h>
+ * ...
+ * UINT ScanExts(UINT wTag)
+ * {
+ * UINT i;
+ * UINT wScanTag;
+ *
+ * /@ scan for wTag's info category. @/
+ * for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {
+ * if (wTag == wScanTag) {
+ * /@ return category offset from WTI_EXTENSIONS. @/
+ * return i;
+ * }
+ * }
+ * /@ return error code. @/
+ * return 0xFFFF;
+ * }
+ * ...
+ * lc.lcPktData = PACKETDATA;
+ * lc.lcPktMode = PACKETMODE;
+ * #ifdef PACKETXFOO
+ * categoryXFOO = ScanExts(WTX_XFOO);
+ * WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);
+ * lc.lcPktData |= maskXFOO;
+ * #if PACKETXFOO == PKEXT_RELATIVE
+ * lc.lcPktMode |= maskXFOO;
+ * #endif
+ * #endif
+ * WTOpen(hWnd, &lc, TRUE);
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef PACKETNAME
+/* if no packet name prefix */
+# define __PFX(x) x
+# define __IFX(x,y) x ## y
+#else
+/* add prefixes and infixes to packet format names */
+# define __PFX(x) __PFX2(PACKETNAME,x)
+# define __PFX2(p,x) __PFX3(p,x)
+# define __PFX3(p,x) p ## x
+# define __IFX(x,y) __IFX2(x,PACKETNAME,y)
+# define __IFX2(x,i,y) __IFX3(x,i,y)
+# define __IFX3(x,i,y) x ## i ## y
+#endif
+
+#define __SFX2(x,s) __SFX3(x,s)
+#define __SFX3(x,s) x ## s
+
+#define __TAG __IFX(tag,PACKET)
+#define __TYPES \
+ __PFX(PACKET), * __IFX(P,PACKET), \
+ * __IFX(NP,PACKET), * __IFX(LP,PACKET)
+
+#define __DATA (__PFX(PACKETDATA))
+#define __MODE (__PFX(PACKETMODE))
+#define __EXT(x) __SFX2(__PFX(PACKET),x)
+
+typedef struct __TAG {
+#if (__DATA & PK_CONTEXT)
+ HCTX pkContext;
+#endif
+#if (__DATA & PK_STATUS)
+ UINT pkStatus;
+#endif
+#if (__DATA & PK_TIME)
+ DWORD pkTime;
+#endif
+#if (__DATA & PK_CHANGED)
+ WTPKT pkChanged;
+#endif
+#if (__DATA & PK_SERIAL_NUMBER)
+ UINT pkSerialNumber;
+#endif
+#if (__DATA & PK_CURSOR)
+ UINT pkCursor;
+#endif
+#if (__DATA & PK_BUTTONS)
+ DWORD pkButtons;
+#endif
+#if (__DATA & PK_X)
+ LONG pkX;
+#endif
+#if (__DATA & PK_Y)
+ LONG pkY;
+#endif
+#if (__DATA & PK_Z)
+ LONG pkZ;
+#endif
+#if (__DATA & PK_NORMAL_PRESSURE)
+# if (__MODE & PK_NORMAL_PRESSURE)
+ /* relative */
+ int pkNormalPressure;
+# else
+ /* absolute */
+ UINT pkNormalPressure;
+# endif
+#endif
+#if (__DATA & PK_TANGENT_PRESSURE)
+# if (__MODE & PK_TANGENT_PRESSURE)
+ /* relative */
+ int pkTangentPressure;
+# else
+ /* absolute */
+ UINT pkTangentPressure;
+# endif
+#endif
+#if (__DATA & PK_ORIENTATION)
+ ORIENTATION pkOrientation;
+#endif
+#if (__DATA & PK_ROTATION)
+ ROTATION pkRotation; /* 1.1 */
+#endif
+
+#ifndef NOWTEXTENSIONS
+ /* extensions begin here. */
+
+#if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)
+ UINT pkFKeys;
+#endif
+#if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)
+ TILT pkTilt;
+#endif
+
+#endif
+
+} __TYPES;
+
+#undef PACKETNAME
+#undef __TAG
+#undef __TAG2
+#undef __TYPES
+#undef __TYPES2
+#undef __DATA
+#undef __MODE
+#undef __PFX
+#undef __PFX2
+#undef __PFX3
+#undef __IFX
+#undef __IFX2
+#undef __IFX3
+#undef __SFX2
+#undef __SFX3
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* defined(__WINE_PKTDEF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h
new file mode 100644
index 00000000..a5d87083
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/poppack.h
@@ -0,0 +1,272 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H15
+# endif
+/* Depth == 15 */
+
+# if __WINE_PSHPACK_H14 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H14 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H14 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H14)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H14
+# endif
+/* Depth == 14 */
+
+# if __WINE_PSHPACK_H13 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H13 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H13 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H13)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H13
+# endif
+/* Depth == 13 */
+
+# if __WINE_PSHPACK_H12 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H12 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H12 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H12)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H12
+# endif
+/* Depth == 12 */
+
+# if __WINE_PSHPACK_H11 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H11 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H11 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H11)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H11
+# endif
+/* Depth == 11 */
+
+# if __WINE_PSHPACK_H10 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H10 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H10 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H10)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H10
+# endif
+/* Depth == 10 */
+
+# if __WINE_PSHPACK_H9 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H9 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H9 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H9)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H9
+# endif
+/* Depth == 9 */
+
+# if __WINE_PSHPACK_H8 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H8 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H8 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H8)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H8
+# endif
+/* Depth == 8 */
+
+# if __WINE_PSHPACK_H7 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H7 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H7 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H7)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H7
+# endif
+/* Depth == 7 */
+
+# if __WINE_PSHPACK_H6 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H6 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H6 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H6)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H6
+# endif
+/* Depth == 6 */
+
+# if __WINE_PSHPACK_H5 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H5 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H5 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H5)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H5
+# endif
+/* Depth == 5 */
+
+# if __WINE_PSHPACK_H4 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H4 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H4 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H4)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H4
+# endif
+/* Depth == 4 */
+
+# if __WINE_PSHPACK_H3 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H3 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H3 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H3)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H3
+# endif
+/* Depth == 3 */
+
+# if __WINE_PSHPACK_H2 == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H2 == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H2 == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H2)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H2
+# endif
+/* Depth == 2 */
+
+# if __WINE_PSHPACK_H == 1
+# pragma pack(1)
+# elif __WINE_PSHPACK_H == 2
+# pragma pack(2)
+# elif __WINE_PSHPACK_H == 8
+# pragma pack(8)
+# else
+# pragma pack(4)
+# endif
+
+#elif defined(__WINE_PSHPACK_H)
+# ifndef __WINE_INTERNAL_POPPACK
+# undef __WINE_PSHPACK_H
+# endif
+/* Depth == 1 */
+
+# if defined(__SUNPRO_CC)
+# warning "Assuming a default alignment of 4"
+# pragma pack(4)
+# else
+# pragma pack()
+# endif
+
+#else
+/* Depth == 0 ! */
+
+#error "Popping alignment isn't possible since no alignment has been pushed"
+
+#endif
+
+#undef __WINE_INTERNAL_POPPACK
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h
new file mode 100644
index 00000000..91cea766
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/powrprof.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2005 Benjamin Cutler
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_POWRPROF_H
+#define __WINE_POWRPROF_H 1
+
+#define EnableSysTrayBatteryMeter 0x01
+#define EnableMultiBatteryDisplay 0x02
+#define EnablePasswordLogon 0x04
+#define EnableWakeOnRing 0x08
+#define EnableVideoDimDisplay 0x10
+
+typedef struct _GLOBAL_MACHINE_POWER_POLICY {
+ ULONG Revision;
+ SYSTEM_POWER_STATE LidOpenWakeAc;
+ SYSTEM_POWER_STATE LidOpenWakeDc;
+ ULONG BroadcastCapacityResolution;
+} GLOBAL_MACHINE_POWER_POLICY,
+*PGLOBAL_MACHINE_POWER_POLICY;
+
+typedef struct _GLOBAL_USER_POWER_POLICY {
+ ULONG Revision;
+ POWER_ACTION_POLICY PowerButtonAc;
+ POWER_ACTION_POLICY PowerButtonDc;
+ POWER_ACTION_POLICY SleepButtonAc;
+ POWER_ACTION_POLICY SleepButtonDc;
+ POWER_ACTION_POLICY LidCloseAc;
+ POWER_ACTION_POLICY LidCloseDc;
+ SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+ ULONG GlobalFlags;
+} GLOBAL_USER_POWER_POLICY,
+*PGLOBAL_USER_POWER_POLICY;
+
+typedef struct _GLOBAL_POWER_POLICY {
+ GLOBAL_USER_POWER_POLICY user;
+ GLOBAL_MACHINE_POWER_POLICY mach;
+} GLOBAL_POWER_POLICY,
+*PGLOBAL_POWER_POLICY;
+
+typedef struct _MACHINE_POWER_POLICY {
+ ULONG Revision;
+ SYSTEM_POWER_STATE MinSleepAc;
+ SYSTEM_POWER_STATE MinSleepDc;
+ SYSTEM_POWER_STATE ReducedLatencySleepAc;
+ SYSTEM_POWER_STATE ReducedLatencySleepDc;
+ ULONG DozeTimeoutAc;
+ ULONG DozeTimeoutDc;
+ ULONG DozeS4TimeoutAc;
+ ULONG DozeS4TimeoutDc;
+ UCHAR MinThrottleAc;
+ UCHAR MinThrottleDc;
+ UCHAR pad1[2];
+ POWER_ACTION_POLICY OverThrottledAc;
+ POWER_ACTION_POLICY OverThrottledDc;
+} MACHINE_POWER_POLICY,
+*PMACHINE_POWER_POLICY;
+
+typedef struct _MACHINE_PROCESSOR_POWER_POLICY {
+ ULONG Revision;
+ PROCESSOR_POWER_POLICY ProcessorPolicyAc;
+ PROCESSOR_POWER_POLICY ProcessorPolicyDc;
+} MACHINE_PROCESSOR_POWER_POLICY,
+*PMACHINE_PROCESSOR_POWER_POLICY;
+
+typedef struct _USER_POWER_POLICY {
+ ULONG Revision;
+ POWER_ACTION_POLICY IdleAc;
+ POWER_ACTION_POLICY IdleDc;
+ ULONG IdleTimeoutAc;
+ ULONG IdleTimeoutDc;
+ UCHAR IdleSensitivityAc;
+ UCHAR IdleSensitivityDc;
+ UCHAR ThrottlePolicyAc;
+ UCHAR ThrottlePolicyDc;
+ SYSTEM_POWER_STATE MaxSleepAc;
+ SYSTEM_POWER_STATE MaxSleepDc;
+ ULONG Reserved[2];
+ ULONG VideoTimeoutAc;
+ ULONG VideoTimeoutDc;
+ ULONG SpindownTimeoutAc;
+ ULONG SpindownTimeoutDc;
+ BOOLEAN OptimizeForPowerAc;
+ BOOLEAN OptimizeForPowerDc;
+ UCHAR FanThrottleToleranceAc;
+ UCHAR FanThrottleToleranceDc;
+ UCHAR ForcedThrottleAc;
+ UCHAR ForcedThrottleDc;
+} USER_POWER_POLICY,
+*PUSER_POWER_POLICY;
+
+typedef struct _POWER_POLICY {
+ USER_POWER_POLICY user;
+ MACHINE_POWER_POLICY mach;
+} POWER_POLICY,
+*PPOWER_POLICY;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef BOOLEAN (CALLBACK* PWRSCHEMESENUMPROC)(UINT, DWORD, LPWSTR, DWORD, LPWSTR, PPOWER_POLICY, LPARAM);
+
+NTSTATUS WINAPI CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG);
+BOOLEAN WINAPI CanUserWritePwrScheme(VOID);
+BOOLEAN WINAPI DeletePwrScheme(UINT);
+BOOLEAN WINAPI EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM);
+BOOLEAN WINAPI GetActivePwrScheme(PUINT);
+BOOLEAN WINAPI GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES);
+BOOLEAN WINAPI GetPwrDiskSpindownRange(PUINT, PUINT);
+BOOLEAN WINAPI IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY);
+BOOLEAN WINAPI IsPwrHibernateAllowed(VOID);
+BOOLEAN WINAPI IsPwrShutdownAllowed(VOID);
+BOOLEAN WINAPI IsPwrSuspendAllowed(VOID);
+BOOLEAN WINAPI ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI ReadPwrScheme(UINT, PPOWER_POLICY);
+BOOLEAN WINAPI SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);
+BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);
+BOOLEAN WINAPI WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY);
+BOOLEAN WINAPI WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY);
+BOOLEAN WINAPI WritePwrScheme(PUINT, LPWSTR, LPWSTR, PPOWER_POLICY);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _POWRPROF_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h
new file mode 100644
index 00000000..f1ed43c6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/profinfo.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PROFINFO_H
+#define __WINE_PROFINFO_H
+
+typedef struct _PROFILEINFOA {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPSTR lpUserName;
+ LPSTR lpProfilePath;
+ LPSTR lpDefaultPath;
+ LPSTR lpServerName;
+ LPSTR lpPolicyPath;
+ HANDLE hProfile;
+} PROFILEINFOA, *LPPROFILEINFOA;
+
+typedef struct _PROFILEINFOW {
+ DWORD dwSize;
+ DWORD dwFlags;
+ LPWSTR lpUserName;
+ LPWSTR lpProfilePath;
+ LPWSTR lpDefaultPath;
+ LPWSTR lpServerName;
+ LPWSTR lpPolicyPath;
+ HANDLE hProfile;
+} PROFILEINFOW, *LPPROFILEINFOW;
+
+DECL_WINELIB_TYPE_AW(PROFILEINFO)
+DECL_WINELIB_TYPE_AW(LPPROFILEINFO)
+
+#endif /* __WINE_PROFINFO_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h
new file mode 100644
index 00000000..94637689
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.h
@@ -0,0 +1,1027 @@
+/*** Autogenerated by WIDL 1.1.36 from propidl.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_PROPIDL_H
+#define __WIDL_PROPIDL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+#include <oaidl.h>
+
+/* Forward declarations */
+
+#ifndef __IPropertyStorage_FWD_DEFINED__
+#define __IPropertyStorage_FWD_DEFINED__
+typedef interface IPropertyStorage IPropertyStorage;
+#endif
+
+#ifndef __IPropertySetStorage_FWD_DEFINED__
+#define __IPropertySetStorage_FWD_DEFINED__
+typedef interface IPropertySetStorage IPropertySetStorage;
+#endif
+
+#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG;
+#endif
+
+#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
+#endif
+
+
+#ifdef PID_DICTIONARY
+#undef PID_DICTIONARY
+#endif
+#ifdef PID_CODEPAGE
+#undef PID_CODEPAGE
+#endif
+#ifdef PID_SECURITY
+#undef PID_SECURITY
+#endif
+#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG;
+#endif
+
+#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
+#endif
+
+/*****************************************************************************
+ * IPropertyStorage interface
+ */
+#ifndef __IPropertyStorage_INTERFACE_DEFINED__
+#define __IPropertyStorage_INTERFACE_DEFINED__
+
+typedef IPropertyStorage *LPPROPERTYSTORAGE;
+#define PROPSETFLAG_DEFAULT (0)
+
+#define PROPSETFLAG_NONSIMPLE (1)
+
+#define PROPSETFLAG_ANSI (2)
+
+#define PROPSETFLAG_UNBUFFERED (4)
+
+#define PROPSETFLAG_CASE_SENSITIVE (8)
+
+#define PROPSET_BEHAVIOR_CASE_SENSITIVE (1)
+
+#define PID_DICTIONARY (0x0)
+
+#define PID_CODEPAGE (0x1)
+
+#define PID_FIRST_USABLE (0x2)
+
+#define PID_FIRST_NAME_DEFAULT (0xfff)
+
+#define PID_LOCALE (0x80000000)
+
+#define PID_MODIFY_TIME (0x80000001)
+
+#define PID_SECURITY (0x80000002)
+
+#define PID_BEHAVIOR (0x80000003)
+
+#define PID_ILLEGAL (0xffffffff)
+
+#define PID_MIN_READONLY (0x80000000)
+
+#define PID_MAX_READONLY (0xbfffffff)
+
+typedef struct tagPROPVARIANT PROPVARIANT;
+typedef struct tagCAUB {
+ ULONG cElems;
+ unsigned char *pElems;
+} CAUB;
+typedef struct tagCAI {
+ ULONG cElems;
+ short *pElems;
+} CAI;
+typedef struct tagCAUI {
+ ULONG cElems;
+ USHORT *pElems;
+} CAUI;
+typedef struct tagCAL {
+ ULONG cElems;
+ LONG *pElems;
+} CAL;
+typedef struct tagCAUL {
+ ULONG cElems;
+ ULONG *pElems;
+} CAUL;
+typedef struct tagCAFLT {
+ ULONG cElems;
+ float *pElems;
+} CAFLT;
+typedef struct tagCADBL {
+ ULONG cElems;
+ double *pElems;
+} CADBL;
+typedef struct tagCACY {
+ ULONG cElems;
+ CY *pElems;
+} CACY;
+typedef struct tagCADATE {
+ ULONG cElems;
+ DATE *pElems;
+} CADATE;
+typedef struct tagCABSTR {
+ ULONG cElems;
+ BSTR *pElems;
+} CABSTR;
+typedef struct tagCABSTRBLOB {
+ ULONG cElems;
+ BSTRBLOB *pElems;
+} CABSTRBLOB;
+typedef struct tagCABOOL {
+ ULONG cElems;
+ VARIANT_BOOL *pElems;
+} CABOOL;
+typedef struct tagCASCODE {
+ ULONG cElems;
+ SCODE *pElems;
+} CASCODE;
+typedef struct tagCAPROPVARIANT {
+ ULONG cElems;
+ PROPVARIANT *pElems;
+} CAPROPVARIANT;
+typedef struct tagCAH {
+ ULONG cElems;
+ LARGE_INTEGER *pElems;
+} CAH;
+typedef struct tagCAUH {
+ ULONG cElems;
+ ULARGE_INTEGER *pElems;
+} CAUH;
+typedef struct tagCALPSTR {
+ ULONG cElems;
+ LPSTR *pElems;
+} CALPSTR;
+typedef struct tagCALPWSTR {
+ ULONG cElems;
+ LPWSTR *pElems;
+} CALPWSTR;
+typedef struct tagCAFILETIME {
+ ULONG cElems;
+ FILETIME *pElems;
+} CAFILETIME;
+typedef struct tagCACLIPDATA {
+ ULONG cElems;
+ CLIPDATA *pElems;
+} CACLIPDATA;
+typedef struct tagCACLSID {
+ ULONG cElems;
+ CLSID *pElems;
+} CACLSID;
+struct tagPROPVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ union {
+ char cVal;
+ UCHAR bVal;
+ short iVal;
+ USHORT uiVal;
+ VARIANT_BOOL boolVal;
+ LONG lVal;
+ ULONG ulVal;
+ float fltVal;
+ SCODE scode;
+ LARGE_INTEGER hVal;
+ ULARGE_INTEGER uhVal;
+ double dblVal;
+ CY cyVal;
+ DATE date;
+ FILETIME filetime;
+ CLSID *puuid;
+ BLOB blob;
+ CLIPDATA *pclipdata;
+ IStream *pStream;
+ IStorage *pStorage;
+ BSTR bstrVal;
+ BSTRBLOB bstrblobVal;
+ LPSTR pszVal;
+ LPWSTR pwszVal;
+ CAUB caub;
+ CAI cai;
+ CAUI caui;
+ CABOOL cabool;
+ CAL cal;
+ CAUL caul;
+ CAFLT caflt;
+ CASCODE cascode;
+ CAH cah;
+ CAUH cauh;
+ CADBL cadbl;
+ CACY cacy;
+ CADATE cadate;
+ CAFILETIME cafiletime;
+ CACLSID cauuid;
+ CACLIPDATA caclipdata;
+ CABSTR cabstr;
+ CABSTRBLOB cabstrblob;
+ CALPSTR calpstr;
+ CALPWSTR calpwstr;
+ CAPROPVARIANT capropvar;
+ LPSAFEARRAY parray;
+ CHAR *pcVal;
+ UCHAR *pbVal;
+ SHORT *piVal;
+ USHORT *puiVal;
+ LONG *plVal;
+ ULONG *pulVal;
+ INT *pintVal;
+ UINT *puintVal;
+ FLOAT *pfltVal;
+ DOUBLE *pdblVal;
+ VARIANT_BOOL *pboolVal;
+ DECIMAL *pdecVal;
+ SCODE *pscode;
+ CY *pcyVal;
+ DATE *pdate;
+ BSTR *pbstrVal;
+ IUnknown **ppunkVal;
+ IDispatch **ppdispVal;
+ LPSAFEARRAY *pparray;
+ PROPVARIANT *pvarVal;
+ } DUMMYUNIONNAME;
+};
+
+typedef struct tagPROPVARIANT *LPPROPVARIANT;
+#if 0
+typedef const PROPVARIANT *REFPROPVARIANT;
+#endif
+#ifndef _REFPROPVARIANT_DEFINED
+#define _REFPROPVARIANT_DEFINED
+#ifdef __cplusplus
+#define REFPROPVARIANT const PROPVARIANT &
+#else
+#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST
+#endif
+#endif
+#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */
+
+#define PIDSI_TITLE 0x00000002L /* VT_LPSTR */
+#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */
+#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */
+#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */
+#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */
+#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */
+#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */
+#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */
+#define PIDSI_EDITTIME 0x0000000AL /* VT_FILETIME (UTC) */
+#define PIDSI_LASTPRINTED 0x0000000BL /* VT_FILETIME (UTC) */
+#define PIDSI_CREATE_DTM 0x0000000CL /* VT_FILETIME (UTC) */
+#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */
+#define PIDSI_PAGECOUNT 0x0000000EL /* VT_I4 */
+#define PIDSI_WORDCOUNT 0x0000000FL /* VT_I4 */
+#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */
+#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */
+#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */
+#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */
+
+#define PIDDSI_CATEGORY 0x00000002L /* VT_LPSTR */
+#define PIDDSI_PRESFORMAT 0x00000003L /* VT_LPSTR */
+#define PIDDSI_BYTECOUNT 0x00000004L /* VT_I4 */
+#define PIDDSI_LINECOUNT 0x00000005L /* VT_I4 */
+#define PIDDSI_PARCOUNT 0x00000006L /* VT_I4 */
+#define PIDDSI_SLIDECOUNT 0x00000007L /* VT_I4 */
+#define PIDDSI_NOTECOUNT 0x00000008L /* VT_I4 */
+#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */
+#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */
+#define PIDDSI_SCALE 0x0000000BL /* VT_BOOL */
+#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */
+#define PIDDSI_DOCPARTS 0x0000000DL /* VT_LPSTR|VT_VECTOR */
+#define PIDDSI_MANAGER 0x0000000EL /* VT_LPSTR */
+#define PIDDSI_COMPANY 0x0000000FL /* VT_LPSTR */
+#define PIDDSI_LINKSDIRTY 0x00000010L /* VT_B0OL */
+#define PRSPEC_INVALID (0xffffffff)
+
+#define PRSPEC_LPWSTR (0)
+
+#define PRSPEC_PROPID (1)
+
+typedef struct tagPROPSPEC {
+ ULONG ulKind;
+ union {
+ PROPID propid;
+ LPOLESTR lpwstr;
+ } DUMMYUNIONNAME;
+} PROPSPEC;
+typedef struct tagSTATPROPSTG {
+ LPOLESTR lpwstrName;
+ PROPID propid;
+ VARTYPE vt;
+} STATPROPSTG;
+/* Macros for dwOSVersion member of STATPROPSETSTG */
+#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD((dwOSVer))
+#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))
+#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))
+#define PROPSETHDR_OSVERSION_UNKNOWN 0xffffffff
+typedef struct tagSTATPROPSETSTG {
+ FMTID fmtid;
+ CLSID clsid;
+ DWORD grfFlags;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+ DWORD dwOSVersion;
+} STATPROPSETSTG;
+DEFINE_GUID(IID_IPropertyStorage, 0x00000138, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPropertyStorage : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ReadMultiple(
+ ULONG cpspec,
+ const PROPSPEC rgpspec[],
+ PROPVARIANT rgpropvar[]) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE WriteMultiple(
+ ULONG cpspec,
+ const PROPSPEC rgpspec[],
+ const PROPVARIANT rgpropvar[],
+ PROPID propidNameFirst) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeleteMultiple(
+ ULONG cpspec,
+ const PROPSPEC rgpspec[]) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames(
+ ULONG cpropid,
+ const PROPID rgpropid[],
+ LPOLESTR rglpwstrName[]) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE WritePropertyNames(
+ ULONG cpropid,
+ const PROPID rgpropid[],
+ const LPOLESTR rglpwstrName[]) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames(
+ ULONG cpropid,
+ const PROPID rgpropid[]) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Commit(
+ DWORD grfCommitFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Revert(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Enum(
+ IEnumSTATPROPSTG **ppenum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTimes(
+ const FILETIME *pctime,
+ const FILETIME *patime,
+ const FILETIME *pmtime) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClass(
+ REFCLSID clsid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Stat(
+ STATPROPSETSTG *statpsstg) = 0;
+
+};
+#else
+typedef struct IPropertyStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPropertyStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPropertyStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPropertyStorage* This);
+
+ /*** IPropertyStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *ReadMultiple)(
+ IPropertyStorage* This,
+ ULONG cpspec,
+ const PROPSPEC rgpspec[],
+ PROPVARIANT rgpropvar[]);
+
+ HRESULT (STDMETHODCALLTYPE *WriteMultiple)(
+ IPropertyStorage* This,
+ ULONG cpspec,
+ const PROPSPEC rgpspec[],
+ const PROPVARIANT rgpropvar[],
+ PROPID propidNameFirst);
+
+ HRESULT (STDMETHODCALLTYPE *DeleteMultiple)(
+ IPropertyStorage* This,
+ ULONG cpspec,
+ const PROPSPEC rgpspec[]);
+
+ HRESULT (STDMETHODCALLTYPE *ReadPropertyNames)(
+ IPropertyStorage* This,
+ ULONG cpropid,
+ const PROPID rgpropid[],
+ LPOLESTR rglpwstrName[]);
+
+ HRESULT (STDMETHODCALLTYPE *WritePropertyNames)(
+ IPropertyStorage* This,
+ ULONG cpropid,
+ const PROPID rgpropid[],
+ const LPOLESTR rglpwstrName[]);
+
+ HRESULT (STDMETHODCALLTYPE *DeletePropertyNames)(
+ IPropertyStorage* This,
+ ULONG cpropid,
+ const PROPID rgpropid[]);
+
+ HRESULT (STDMETHODCALLTYPE *Commit)(
+ IPropertyStorage* This,
+ DWORD grfCommitFlags);
+
+ HRESULT (STDMETHODCALLTYPE *Revert)(
+ IPropertyStorage* This);
+
+ HRESULT (STDMETHODCALLTYPE *Enum)(
+ IPropertyStorage* This,
+ IEnumSTATPROPSTG **ppenum);
+
+ HRESULT (STDMETHODCALLTYPE *SetTimes)(
+ IPropertyStorage* This,
+ const FILETIME *pctime,
+ const FILETIME *patime,
+ const FILETIME *pmtime);
+
+ HRESULT (STDMETHODCALLTYPE *SetClass)(
+ IPropertyStorage* This,
+ REFCLSID clsid);
+
+ HRESULT (STDMETHODCALLTYPE *Stat)(
+ IPropertyStorage* This,
+ STATPROPSETSTG *statpsstg);
+
+ END_INTERFACE
+} IPropertyStorageVtbl;
+interface IPropertyStorage {
+ CONST_VTBL IPropertyStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPropertyStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertyStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPropertyStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertyStorage methods ***/
+#define IPropertyStorage_ReadMultiple(This,cpspec,rgpspec,rgpropvar) (This)->lpVtbl->ReadMultiple(This,cpspec,rgpspec,rgpropvar)
+#define IPropertyStorage_WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst) (This)->lpVtbl->WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst)
+#define IPropertyStorage_DeleteMultiple(This,cpspec,rgpspec) (This)->lpVtbl->DeleteMultiple(This,cpspec,rgpspec)
+#define IPropertyStorage_ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName) (This)->lpVtbl->ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName)
+#define IPropertyStorage_WritePropertyNames(This,cpropid,rgpropid,rglpwstrName) (This)->lpVtbl->WritePropertyNames(This,cpropid,rgpropid,rglpwstrName)
+#define IPropertyStorage_DeletePropertyNames(This,cpropid,rgpropid) (This)->lpVtbl->DeletePropertyNames(This,cpropid,rgpropid)
+#define IPropertyStorage_Commit(This,grfCommitFlags) (This)->lpVtbl->Commit(This,grfCommitFlags)
+#define IPropertyStorage_Revert(This) (This)->lpVtbl->Revert(This)
+#define IPropertyStorage_Enum(This,ppenum) (This)->lpVtbl->Enum(This,ppenum)
+#define IPropertyStorage_SetTimes(This,pctime,patime,pmtime) (This)->lpVtbl->SetTimes(This,pctime,patime,pmtime)
+#define IPropertyStorage_SetClass(This,clsid) (This)->lpVtbl->SetClass(This,clsid)
+#define IPropertyStorage_Stat(This,statpsstg) (This)->lpVtbl->Stat(This,statpsstg)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPropertyStorage_ReadMultiple_Proxy(
+ IPropertyStorage* This,
+ ULONG cpspec,
+ const PROPSPEC rgpspec[],
+ PROPVARIANT rgpropvar[]);
+void __RPC_STUB IPropertyStorage_ReadMultiple_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_WriteMultiple_Proxy(
+ IPropertyStorage* This,
+ ULONG cpspec,
+ const PROPSPEC rgpspec[],
+ const PROPVARIANT rgpropvar[],
+ PROPID propidNameFirst);
+void __RPC_STUB IPropertyStorage_WriteMultiple_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_DeleteMultiple_Proxy(
+ IPropertyStorage* This,
+ ULONG cpspec,
+ const PROPSPEC rgpspec[]);
+void __RPC_STUB IPropertyStorage_DeleteMultiple_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_ReadPropertyNames_Proxy(
+ IPropertyStorage* This,
+ ULONG cpropid,
+ const PROPID rgpropid[],
+ LPOLESTR rglpwstrName[]);
+void __RPC_STUB IPropertyStorage_ReadPropertyNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_WritePropertyNames_Proxy(
+ IPropertyStorage* This,
+ ULONG cpropid,
+ const PROPID rgpropid[],
+ const LPOLESTR rglpwstrName[]);
+void __RPC_STUB IPropertyStorage_WritePropertyNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_DeletePropertyNames_Proxy(
+ IPropertyStorage* This,
+ ULONG cpropid,
+ const PROPID rgpropid[]);
+void __RPC_STUB IPropertyStorage_DeletePropertyNames_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Commit_Proxy(
+ IPropertyStorage* This,
+ DWORD grfCommitFlags);
+void __RPC_STUB IPropertyStorage_Commit_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Revert_Proxy(
+ IPropertyStorage* This);
+void __RPC_STUB IPropertyStorage_Revert_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Enum_Proxy(
+ IPropertyStorage* This,
+ IEnumSTATPROPSTG **ppenum);
+void __RPC_STUB IPropertyStorage_Enum_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_SetTimes_Proxy(
+ IPropertyStorage* This,
+ const FILETIME *pctime,
+ const FILETIME *patime,
+ const FILETIME *pmtime);
+void __RPC_STUB IPropertyStorage_SetTimes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_SetClass_Proxy(
+ IPropertyStorage* This,
+ REFCLSID clsid);
+void __RPC_STUB IPropertyStorage_SetClass_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertyStorage_Stat_Proxy(
+ IPropertyStorage* This,
+ STATPROPSETSTG *statpsstg);
+void __RPC_STUB IPropertyStorage_Stat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPropertyStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPropertySetStorage interface
+ */
+#ifndef __IPropertySetStorage_INTERFACE_DEFINED__
+#define __IPropertySetStorage_INTERFACE_DEFINED__
+
+typedef IPropertySetStorage *LPPROPERTYSETSTORAGE;
+DEFINE_GUID(IID_IPropertySetStorage, 0x0000013a, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPropertySetStorage : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Create(
+ REFFMTID rfmtid,
+ const CLSID *pclsid,
+ DWORD grfFlags,
+ DWORD grfMode,
+ IPropertyStorage **ppprstg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Open(
+ REFFMTID rfmtid,
+ DWORD grfMode,
+ IPropertyStorage **ppprstg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Delete(
+ REFFMTID rfmtid) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Enum(
+ IEnumSTATPROPSETSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IPropertySetStorageVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPropertySetStorage* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPropertySetStorage* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPropertySetStorage* This);
+
+ /*** IPropertySetStorage methods ***/
+ HRESULT (STDMETHODCALLTYPE *Create)(
+ IPropertySetStorage* This,
+ REFFMTID rfmtid,
+ const CLSID *pclsid,
+ DWORD grfFlags,
+ DWORD grfMode,
+ IPropertyStorage **ppprstg);
+
+ HRESULT (STDMETHODCALLTYPE *Open)(
+ IPropertySetStorage* This,
+ REFFMTID rfmtid,
+ DWORD grfMode,
+ IPropertyStorage **ppprstg);
+
+ HRESULT (STDMETHODCALLTYPE *Delete)(
+ IPropertySetStorage* This,
+ REFFMTID rfmtid);
+
+ HRESULT (STDMETHODCALLTYPE *Enum)(
+ IPropertySetStorage* This,
+ IEnumSTATPROPSETSTG **ppenum);
+
+ END_INTERFACE
+} IPropertySetStorageVtbl;
+interface IPropertySetStorage {
+ CONST_VTBL IPropertySetStorageVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPropertySetStorage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPropertySetStorage_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPropertySetStorage_Release(This) (This)->lpVtbl->Release(This)
+/*** IPropertySetStorage methods ***/
+#define IPropertySetStorage_Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg) (This)->lpVtbl->Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg)
+#define IPropertySetStorage_Open(This,rfmtid,grfMode,ppprstg) (This)->lpVtbl->Open(This,rfmtid,grfMode,ppprstg)
+#define IPropertySetStorage_Delete(This,rfmtid) (This)->lpVtbl->Delete(This,rfmtid)
+#define IPropertySetStorage_Enum(This,ppenum) (This)->lpVtbl->Enum(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Create_Proxy(
+ IPropertySetStorage* This,
+ REFFMTID rfmtid,
+ const CLSID *pclsid,
+ DWORD grfFlags,
+ DWORD grfMode,
+ IPropertyStorage **ppprstg);
+void __RPC_STUB IPropertySetStorage_Create_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Open_Proxy(
+ IPropertySetStorage* This,
+ REFFMTID rfmtid,
+ DWORD grfMode,
+ IPropertyStorage **ppprstg);
+void __RPC_STUB IPropertySetStorage_Open_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Delete_Proxy(
+ IPropertySetStorage* This,
+ REFFMTID rfmtid);
+void __RPC_STUB IPropertySetStorage_Delete_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPropertySetStorage_Enum_Proxy(
+ IPropertySetStorage* This,
+ IEnumSTATPROPSETSTG **ppenum);
+void __RPC_STUB IPropertySetStorage_Enum_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPropertySetStorage_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATPROPSTG interface
+ */
+#ifndef __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+
+typedef IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
+DEFINE_GUID(IID_IEnumSTATPROPSTG, 0x00000139, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATPROPSTG : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ STATPROPSTG *rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumSTATPROPSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATPROPSTGVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumSTATPROPSTG* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumSTATPROPSTG* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumSTATPROPSTG* This);
+
+ /*** IEnumSTATPROPSTG methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumSTATPROPSTG* This,
+ ULONG celt,
+ STATPROPSTG *rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumSTATPROPSTG* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumSTATPROPSTG* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumSTATPROPSTG* This,
+ IEnumSTATPROPSTG **ppenum);
+
+ END_INTERFACE
+} IEnumSTATPROPSTGVtbl;
+interface IEnumSTATPROPSTG {
+ CONST_VTBL IEnumSTATPROPSTGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATPROPSTG_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATPROPSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATPROPSTG_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATPROPSTG methods ***/
+#define IEnumSTATPROPSTG_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATPROPSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATPROPSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATPROPSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_RemoteNext_Proxy(
+ IEnumSTATPROPSTG* This,
+ ULONG celt,
+ STATPROPSTG *rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Skip_Proxy(
+ IEnumSTATPROPSTG* This,
+ ULONG celt);
+void __RPC_STUB IEnumSTATPROPSTG_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Reset_Proxy(
+ IEnumSTATPROPSTG* This);
+void __RPC_STUB IEnumSTATPROPSTG_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Clone_Proxy(
+ IEnumSTATPROPSTG* This,
+ IEnumSTATPROPSTG **ppenum);
+void __RPC_STUB IEnumSTATPROPSTG_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATPROPSTG_Next_Proxy(
+ IEnumSTATPROPSTG* This,
+ ULONG celt,
+ STATPROPSTG *rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATPROPSTG_Next_Stub(
+ IEnumSTATPROPSTG* This,
+ ULONG celt,
+ STATPROPSTG *rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumSTATPROPSTG_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IEnumSTATPROPSETSTG interface
+ */
+#ifndef __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+
+typedef IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+DEFINE_GUID(IID_IEnumSTATPROPSETSTG, 0x0000013b, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IEnumSTATPROPSETSTG : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Next(
+ ULONG celt,
+ STATPROPSETSTG *rgelt,
+ ULONG *pceltFetched) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Skip(
+ ULONG celt) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clone(
+ IEnumSTATPROPSETSTG **ppenum) = 0;
+
+};
+#else
+typedef struct IEnumSTATPROPSETSTGVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IEnumSTATPROPSETSTG* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IEnumSTATPROPSETSTG* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IEnumSTATPROPSETSTG* This);
+
+ /*** IEnumSTATPROPSETSTG methods ***/
+ HRESULT (STDMETHODCALLTYPE *Next)(
+ IEnumSTATPROPSETSTG* This,
+ ULONG celt,
+ STATPROPSETSTG *rgelt,
+ ULONG *pceltFetched);
+
+ HRESULT (STDMETHODCALLTYPE *Skip)(
+ IEnumSTATPROPSETSTG* This,
+ ULONG celt);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IEnumSTATPROPSETSTG* This);
+
+ HRESULT (STDMETHODCALLTYPE *Clone)(
+ IEnumSTATPROPSETSTG* This,
+ IEnumSTATPROPSETSTG **ppenum);
+
+ END_INTERFACE
+} IEnumSTATPROPSETSTGVtbl;
+interface IEnumSTATPROPSETSTG {
+ CONST_VTBL IEnumSTATPROPSETSTGVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IEnumSTATPROPSETSTG_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IEnumSTATPROPSETSTG_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IEnumSTATPROPSETSTG_Release(This) (This)->lpVtbl->Release(This)
+/*** IEnumSTATPROPSETSTG methods ***/
+#define IEnumSTATPROPSETSTG_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)
+#define IEnumSTATPROPSETSTG_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)
+#define IEnumSTATPROPSETSTG_Reset(This) (This)->lpVtbl->Reset(This)
+#define IEnumSTATPROPSETSTG_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_RemoteNext_Proxy(
+ IEnumSTATPROPSETSTG* This,
+ ULONG celt,
+ STATPROPSETSTG *rgelt,
+ ULONG *pceltFetched);
+void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Skip_Proxy(
+ IEnumSTATPROPSETSTG* This,
+ ULONG celt);
+void __RPC_STUB IEnumSTATPROPSETSTG_Skip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Reset_Proxy(
+ IEnumSTATPROPSETSTG* This);
+void __RPC_STUB IEnumSTATPROPSETSTG_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Clone_Proxy(
+ IEnumSTATPROPSETSTG* This,
+ IEnumSTATPROPSETSTG **ppenum);
+void __RPC_STUB IEnumSTATPROPSETSTG_Clone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IEnumSTATPROPSETSTG_Next_Proxy(
+ IEnumSTATPROPSETSTG* This,
+ ULONG celt,
+ STATPROPSETSTG *rgelt,
+ ULONG *pceltFetched);
+HRESULT __RPC_STUB IEnumSTATPROPSETSTG_Next_Stub(
+ IEnumSTATPROPSETSTG* This,
+ ULONG celt,
+ STATPROPSETSTG *rgelt,
+ ULONG *pceltFetched);
+
+#endif /* __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ */
+
+HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);
+HRESULT WINAPI PropVariantClear(PROPVARIANT*);
+HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);
+
+#define _PROPVARIANT_INIT_DEFINED_
+#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))
+
+#ifndef _STGCREATEPROPSTG_DEFINED_
+#define _STGCREATEPROPSTG_DEFINED_
+HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);
+HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);
+HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);
+#define CCH_MAX_PROPSTG_NAME 31
+HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);
+HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);
+#endif /* _STGCREATEPROPSTG_DEFINED_ */
+
+/* Begin additional prototypes for all interfaces */
+
+ULONG __RPC_USER BSTR_UserSize (ULONG *, ULONG, BSTR *);
+unsigned char * __RPC_USER BSTR_UserMarshal (ULONG *, unsigned char *, BSTR *);
+unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
+void __RPC_USER BSTR_UserFree (ULONG *, BSTR *);
+ULONG __RPC_USER LPSAFEARRAY_UserSize (ULONG *, ULONG, LPSAFEARRAY *);
+unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal (ULONG *, unsigned char *, LPSAFEARRAY *);
+unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
+void __RPC_USER LPSAFEARRAY_UserFree (ULONG *, LPSAFEARRAY *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_PROPIDL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl
new file mode 100644
index 00000000..cf52e9e5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propidl.idl
@@ -0,0 +1,464 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ * Copyright 2004 Francois Gouget
+ * Copyright 2005 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "objidl.idl";
+import "oaidl.idl";
+#endif
+
+/*
+ * Windows SDK braindamage alert
+ *
+ * PID_DICTIONARY and PID_CODEPAGE are defined by msidefs.h too
+ * PID_SECURITY is defined in msidefs.h with a different value!
+ * So these need to be undefined first.
+ */
+cpp_quote("#ifdef PID_DICTIONARY")
+cpp_quote("#undef PID_DICTIONARY")
+cpp_quote("#endif")
+
+cpp_quote("#ifdef PID_CODEPAGE")
+cpp_quote("#undef PID_CODEPAGE")
+cpp_quote("#endif")
+
+cpp_quote("#ifdef PID_SECURITY")
+cpp_quote("#undef PID_SECURITY")
+cpp_quote("#endif")
+
+/******************** Property Storage ********************/
+
+interface IEnumSTATPROPSTG;
+interface IEnumSTATPROPSETSTG;
+
+[
+ object,
+ uuid(00000138-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IPropertyStorage : IUnknown
+{
+ typedef [unique] IPropertyStorage *LPPROPERTYSTORAGE;
+
+ const DWORD PROPSETFLAG_DEFAULT = 0;
+ const DWORD PROPSETFLAG_NONSIMPLE = 1;
+ const DWORD PROPSETFLAG_ANSI = 2;
+ const DWORD PROPSETFLAG_UNBUFFERED = 4;
+ const DWORD PROPSETFLAG_CASE_SENSITIVE = 8;
+
+ const DWORD PROPSET_BEHAVIOR_CASE_SENSITIVE = 1;
+
+ const PROPID PID_DICTIONARY = 0x00000000;
+ const PROPID PID_CODEPAGE = 0x00000001;
+ const PROPID PID_FIRST_USABLE = 0x00000002;
+ const PROPID PID_FIRST_NAME_DEFAULT = 0x00000fff;
+ const PROPID PID_LOCALE = 0x80000000;
+ const PROPID PID_MODIFY_TIME = 0x80000001;
+ const PROPID PID_SECURITY = 0x80000002;
+ const PROPID PID_BEHAVIOR = 0x80000003;
+ const PROPID PID_ILLEGAL = 0xffffffff;
+ const PROPID PID_MIN_READONLY = 0x80000000;
+ const PROPID PID_MAX_READONLY = 0xbfffffff;
+
+ typedef struct tagPROPVARIANT PROPVARIANT;
+
+#define TYPEDEF_CA(type, name) \
+ typedef struct tag##name { \
+ ULONG cElems; \
+ [size_is(cElems)] \
+ type *pElems; \
+ } name
+
+ TYPEDEF_CA(unsigned char, CAUB);
+ TYPEDEF_CA(short, CAI);
+ TYPEDEF_CA(USHORT, CAUI);
+ TYPEDEF_CA(long, CAL);
+ TYPEDEF_CA(ULONG, CAUL);
+ TYPEDEF_CA(float, CAFLT);
+ TYPEDEF_CA(double, CADBL);
+ TYPEDEF_CA(CY, CACY);
+ TYPEDEF_CA(DATE, CADATE);
+ TYPEDEF_CA(BSTR, CABSTR);
+ TYPEDEF_CA(BSTRBLOB, CABSTRBLOB);
+ TYPEDEF_CA(VARIANT_BOOL, CABOOL);
+ TYPEDEF_CA(SCODE, CASCODE);
+ TYPEDEF_CA(PROPVARIANT, CAPROPVARIANT);
+ TYPEDEF_CA(LARGE_INTEGER, CAH);
+ TYPEDEF_CA(ULARGE_INTEGER, CAUH);
+ TYPEDEF_CA(LPSTR, CALPSTR);
+ TYPEDEF_CA(LPWSTR, CALPWSTR);
+ TYPEDEF_CA(FILETIME, CAFILETIME);
+ TYPEDEF_CA(CLIPDATA, CACLIPDATA);
+ TYPEDEF_CA(CLSID, CACLSID);
+
+ struct tagPROPVARIANT {
+ VARTYPE vt;
+ WORD wReserved1;
+ WORD wReserved2;
+ WORD wReserved3;
+ [switch_is(vt & 0x1fff)] union {
+ [case(VT_EMPTY, VT_NULL)] ;
+ [case(VT_I1)] char cVal;
+ [case(VT_UI1)] UCHAR bVal;
+ [case(VT_I2)] short iVal;
+ [case(VT_UI2)] USHORT uiVal;
+ [case(VT_BOOL)] VARIANT_BOOL boolVal;
+#if 0 /* illegal in C++ */
+ [case(VT_ILLEGAL)] _VARIANT_BOOL bool;
+#endif
+ [case(VT_I4)] long lVal;
+ [case(VT_UI4)] ULONG ulVal;
+ [case(VT_R4)] float fltVal;
+ [case(VT_ERROR)] SCODE scode;
+ [case(VT_I8)] LARGE_INTEGER hVal;
+ [case(VT_UI8)] ULARGE_INTEGER uhVal;
+ [case(VT_R8)] double dblVal;
+ [case(VT_CY)] CY cyVal;
+ [case(VT_DATE)] DATE date;
+ [case(VT_FILETIME)] FILETIME filetime;
+ [case(VT_CLSID)] CLSID *puuid;
+ [case(VT_BLOB, VT_BLOB_OBJECT)] BLOB blob;
+ [case(VT_CF)] CLIPDATA *pclipdata;
+ [case(VT_STREAM, VT_STREAMED_OBJECT)] IStream *pStream;
+ [case(VT_STORAGE, VT_STORED_OBJECT)] IStorage *pStorage;
+ [case(VT_BSTR)] BSTR bstrVal;
+ [case(VT_BSTR_BLOB)] BSTRBLOB bstrblobVal;
+ [case(VT_LPSTR)] LPSTR pszVal;
+ [case(VT_LPWSTR)] LPWSTR pwszVal;
+ [case(VT_UI1|VT_VECTOR)] CAUB caub;
+ [case(VT_I2|VT_VECTOR)] CAI cai;
+ [case(VT_UI2|VT_VECTOR)] CAUI caui;
+ [case(VT_BOOL|VT_VECTOR)] CABOOL cabool;
+ [case(VT_I4|VT_VECTOR)] CAL cal;
+ [case(VT_UI4|VT_VECTOR)] CAUL caul;
+ [case(VT_R4|VT_VECTOR)] CAFLT caflt;
+ [case(VT_ERROR|VT_VECTOR)] CASCODE cascode;
+ [case(VT_I8|VT_VECTOR)] CAH cah;
+ [case(VT_UI8|VT_VECTOR)] CAUH cauh;
+ [case(VT_R8|VT_VECTOR)] CADBL cadbl;
+ [case(VT_CY|VT_VECTOR)] CACY cacy;
+ [case(VT_DATE|VT_VECTOR)] CADATE cadate;
+ [case(VT_FILETIME|VT_VECTOR)] CAFILETIME cafiletime;
+ [case(VT_CLSID|VT_VECTOR)] CACLSID cauuid;
+ [case(VT_CF|VT_VECTOR)] CACLIPDATA caclipdata;
+ [case(VT_BSTR|VT_VECTOR)] CABSTR cabstr;
+ [case(VT_BSTR_BLOB|VT_VECTOR)] CABSTRBLOB cabstrblob;
+ [case(VT_LPSTR|VT_VECTOR)] CALPSTR calpstr;
+ [case(VT_LPWSTR|VT_VECTOR)] CALPWSTR calpwstr;
+ [case(VT_VARIANT|VT_VECTOR)] CAPROPVARIANT capropvar;
+ [case(VT_ARRAY|VT_I1,
+ VT_ARRAY|VT_UI1,
+ VT_ARRAY|VT_I2,
+ VT_ARRAY|VT_UI2,
+ VT_ARRAY|VT_I4,
+ VT_ARRAY|VT_UI4,
+ VT_ARRAY|VT_INT,
+ VT_ARRAY|VT_UINT,
+ VT_ARRAY|VT_R4,
+ VT_ARRAY|VT_R8,
+ VT_ARRAY|VT_CY,
+ VT_ARRAY|VT_DATE,
+ VT_ARRAY|VT_BSTR,
+ VT_ARRAY|VT_BOOL,
+ VT_ARRAY|VT_DECIMAL,
+ VT_ARRAY|VT_DISPATCH,
+ VT_ARRAY|VT_UNKNOWN,
+ VT_ARRAY|VT_ERROR,
+ VT_ARRAY|VT_VARIANT)] LPSAFEARRAY parray;
+ [case(VT_BYREF|VT_I1)] CHAR *pcVal;
+ [case(VT_BYREF|VT_UI1)] UCHAR *pbVal;
+ [case(VT_BYREF|VT_I2)] SHORT *piVal;
+ [case(VT_BYREF|VT_UI2)] USHORT *puiVal;
+ [case(VT_BYREF|VT_I4)] LONG *plVal;
+ [case(VT_BYREF|VT_UI4)] ULONG *pulVal;
+ [case(VT_BYREF|VT_INT)] INT *pintVal;
+ [case(VT_BYREF|VT_UINT)] UINT *puintVal;
+ [case(VT_BYREF|VT_R4)] FLOAT *pfltVal;
+ [case(VT_BYREF|VT_R8)] DOUBLE *pdblVal;
+ [case(VT_BYREF|VT_BOOL)] VARIANT_BOOL *pboolVal;
+ [case(VT_BYREF|VT_DECIMAL)] DECIMAL *pdecVal;
+ [case(VT_BYREF|VT_ERROR)] SCODE *pscode;
+ [case(VT_BYREF|VT_CY)] CY *pcyVal;
+ [case(VT_BYREF|VT_DATE)] DATE *pdate;
+ [case(VT_BYREF|VT_BSTR)] BSTR *pbstrVal;
+ [case(VT_BYREF|VT_UNKNOWN)] IUnknown **ppunkVal;
+ [case(VT_BYREF|VT_DISPATCH)] IDispatch **ppdispVal;
+ [case(VT_BYREF|VT_ARRAY)] LPSAFEARRAY *pparray;
+ [case(VT_BYREF|VT_VARIANT)] PROPVARIANT *pvarVal;
+ };
+ };
+
+ typedef struct tagPROPVARIANT *LPPROPVARIANT;
+
+ cpp_quote("#if 0")
+ typedef const PROPVARIANT * REFPROPVARIANT;
+ cpp_quote("#endif")
+ cpp_quote("#ifndef _REFPROPVARIANT_DEFINED")
+ cpp_quote("#define _REFPROPVARIANT_DEFINED")
+ cpp_quote("#ifdef __cplusplus")
+ cpp_quote("#define REFPROPVARIANT const PROPVARIANT &")
+ cpp_quote("#else")
+ cpp_quote("#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST")
+ cpp_quote("#endif")
+ cpp_quote("#endif")
+
+ cpp_quote("#define PIDDI_THUMBNAIL 0x00000002L /* VT_BLOB */")
+ cpp_quote("")
+ cpp_quote("#define PIDSI_TITLE 0x00000002L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_SUBJECT 0x00000003L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_AUTHOR 0x00000004L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_KEYWORDS 0x00000005L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_COMMENTS 0x00000006L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_TEMPLATE 0x00000007L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_LASTAUTHOR 0x00000008L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_REVNUMBER 0x00000009L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_EDITTIME 0x0000000AL /* VT_FILETIME (UTC) */")
+ cpp_quote("#define PIDSI_LASTPRINTED 0x0000000BL /* VT_FILETIME (UTC) */")
+ cpp_quote("#define PIDSI_CREATE_DTM 0x0000000CL /* VT_FILETIME (UTC) */")
+ cpp_quote("#define PIDSI_LASTSAVE_DTM 0x0000000DL /* VT_FILETIME (UTC) */")
+ cpp_quote("#define PIDSI_PAGECOUNT 0x0000000EL /* VT_I4 */")
+ cpp_quote("#define PIDSI_WORDCOUNT 0x0000000FL /* VT_I4 */")
+ cpp_quote("#define PIDSI_CHARCOUNT 0x00000010L /* VT_I4 */")
+ cpp_quote("#define PIDSI_THUMBNAIL 0x00000011L /* VT_CF */")
+ cpp_quote("#define PIDSI_APPNAME 0x00000012L /* VT_LPSTR */")
+ cpp_quote("#define PIDSI_DOC_SECURITY 0x00000013L /* VT_I4 */")
+ cpp_quote("")
+ cpp_quote("#define PIDDSI_CATEGORY 0x00000002L /* VT_LPSTR */")
+ cpp_quote("#define PIDDSI_PRESFORMAT 0x00000003L /* VT_LPSTR */")
+ cpp_quote("#define PIDDSI_BYTECOUNT 0x00000004L /* VT_I4 */")
+ cpp_quote("#define PIDDSI_LINECOUNT 0x00000005L /* VT_I4 */")
+ cpp_quote("#define PIDDSI_PARCOUNT 0x00000006L /* VT_I4 */")
+ cpp_quote("#define PIDDSI_SLIDECOUNT 0x00000007L /* VT_I4 */")
+ cpp_quote("#define PIDDSI_NOTECOUNT 0x00000008L /* VT_I4 */")
+ cpp_quote("#define PIDDSI_HIDDENCOUNT 0x00000009L /* VT_I4 */")
+ cpp_quote("#define PIDDSI_MMCLIPCOUNT 0x0000000AL /* VT_I4 */")
+ cpp_quote("#define PIDDSI_SCALE 0x0000000BL /* VT_BOOL */")
+ cpp_quote("#define PIDDSI_HEADINGPAIR 0x0000000CL /* VT_VARIANT|VT_VECTOR */")
+ cpp_quote("#define PIDDSI_DOCPARTS 0x0000000DL /* VT_LPSTR|VT_VECTOR */")
+ cpp_quote("#define PIDDSI_MANAGER 0x0000000EL /* VT_LPSTR */")
+ cpp_quote("#define PIDDSI_COMPANY 0x0000000FL /* VT_LPSTR */")
+ cpp_quote("#define PIDDSI_LINKSDIRTY 0x00000010L /* VT_B0OL */")
+
+ const ULONG PRSPEC_INVALID = 0xffffffff;
+ const ULONG PRSPEC_LPWSTR = 0;
+ const ULONG PRSPEC_PROPID = 1;
+
+ typedef struct tagPROPSPEC {
+ ULONG ulKind;
+ [switch_is(ulKind)] union {
+ [case(PRSPEC_PROPID)] PROPID propid;
+ [case(PRSPEC_LPWSTR)] LPOLESTR lpwstr;
+ [default] ;
+ } DUMMYUNIONNAME;
+ } PROPSPEC;
+
+ typedef struct tagSTATPROPSTG {
+ LPOLESTR lpwstrName;
+ PROPID propid;
+ VARTYPE vt;
+ } STATPROPSTG;
+
+ cpp_quote("/* Macros for dwOSVersion member of STATPROPSETSTG */")
+ cpp_quote("#define PROPSETHDR_OSVER_KIND(dwOSVer) HIWORD((dwOSVer))")
+ cpp_quote("#define PROPSETHDR_OSVER_MAJOR(dwOSVer) LOBYTE(LOWORD((dwOSVer)))")
+ cpp_quote("#define PROPSETHDR_OSVER_MINOR(dwOSVer) HIBYTE(LOWORD((dwOSVer)))")
+ cpp_quote("#define PROPSETHDR_OSVERSION_UNKNOWN 0xffffffff")
+
+ typedef struct tagSTATPROPSETSTG {
+ FMTID fmtid;
+ CLSID clsid;
+ DWORD grfFlags;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+ DWORD dwOSVersion;
+ } STATPROPSETSTG;
+
+ HRESULT ReadMultiple(
+ [in] ULONG cpspec,
+ [in, size_is(cpspec)] const PROPSPEC rgpspec[],
+ [out, size_is(cpspec)] PROPVARIANT rgpropvar[]);
+
+ HRESULT WriteMultiple(
+ [in] ULONG cpspec,
+ [in, size_is(cpspec)] const PROPSPEC rgpspec[],
+ [in, size_is(cpspec)] const PROPVARIANT rgpropvar[],
+ [in] PROPID propidNameFirst);
+
+ HRESULT DeleteMultiple(
+ [in] ULONG cpspec,
+ [in, size_is(cpspec)] const PROPSPEC rgpspec[]);
+
+ HRESULT ReadPropertyNames(
+ [in] ULONG cpropid,
+ [in, size_is(cpropid)] const PROPID rgpropid[],
+ [out, size_is(cpropid)] LPOLESTR rglpwstrName[]);
+
+ HRESULT WritePropertyNames(
+ [in] ULONG cpropid,
+ [in, size_is(cpropid)] const PROPID rgpropid[],
+ [in, size_is(cpropid)] const LPOLESTR rglpwstrName[]);
+
+ HRESULT DeletePropertyNames(
+ [in] ULONG cpropid,
+ [in, size_is(cpropid)] const PROPID rgpropid[]);
+
+ HRESULT Commit(
+ [in] DWORD grfCommitFlags);
+
+ HRESULT Revert();
+
+ HRESULT Enum(
+ [out] IEnumSTATPROPSTG **ppenum);
+
+ HRESULT SetTimes(
+ [in] const FILETIME *pctime,
+ [in] const FILETIME *patime,
+ [in] const FILETIME *pmtime);
+
+ HRESULT SetClass(
+ [in] REFCLSID clsid);
+
+ HRESULT Stat(
+ [out] STATPROPSETSTG *statpsstg);
+}
+
+[
+ object,
+ uuid(0000013A-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IPropertySetStorage : IUnknown
+{
+ typedef [unique] IPropertySetStorage *LPPROPERTYSETSTORAGE;
+
+ HRESULT Create(
+ [in] REFFMTID rfmtid,
+ [in, unique] const CLSID *pclsid,
+ [in] DWORD grfFlags,
+ [in] DWORD grfMode,
+ [out] IPropertyStorage **ppprstg);
+
+ HRESULT Open(
+ [in] REFFMTID rfmtid,
+ [in] DWORD grfMode,
+ [out] IPropertyStorage **ppprstg);
+
+ HRESULT Delete(
+ [in] REFFMTID rfmtid);
+
+ HRESULT Enum(
+ [out] IEnumSTATPROPSETSTG **ppenum);
+}
+
+[
+ object,
+ uuid(00000139-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumSTATPROPSTG : IUnknown
+{
+ typedef [unique] IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATPROPSTG *rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATPROPSTG *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumSTATPROPSTG **ppenum);
+}
+
+[
+ object,
+ uuid(0000013B-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumSTATPROPSETSTG : IUnknown
+{
+ typedef [unique] IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+
+ [local]
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATPROPSETSTG *rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)]
+ HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)]
+ STATPROPSETSTG *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumSTATPROPSETSTG **ppenum);
+}
+
+typedef struct SERIALIZEDPROPERTYVALUE {
+ DWORD dwType;
+ BYTE rgb[1];
+} SERIALIZEDPROPERTYVALUE;
+
+cpp_quote("HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);")
+cpp_quote("HRESULT WINAPI PropVariantClear(PROPVARIANT*);")
+cpp_quote("HRESULT WINAPI PropVariantCopy(PROPVARIANT*,const PROPVARIANT*);")
+cpp_quote("")
+cpp_quote("#define _PROPVARIANT_INIT_DEFINED_")
+cpp_quote("#define PropVariantInit(p) memset((p), 0, sizeof(PROPVARIANT))")
+cpp_quote("")
+cpp_quote("#ifndef _STGCREATEPROPSTG_DEFINED_")
+cpp_quote("#define _STGCREATEPROPSTG_DEFINED_")
+cpp_quote("HRESULT WINAPI StgCreatePropStg(IUnknown *, REFFMTID, const CLSID *, DWORD, DWORD, IPropertyStorage **);")
+cpp_quote("HRESULT WINAPI StgOpenPropStg(IUnknown *, REFFMTID, DWORD, DWORD, IPropertyStorage **);")
+cpp_quote("HRESULT WINAPI StgCreatePropSetStg(IStorage *, DWORD, IPropertySetStorage **);")
+cpp_quote("#define CCH_MAX_PROPSTG_NAME 31")
+cpp_quote("HRESULT WINAPI FmtIdToPropStgName(const FMTID *, LPOLESTR);")
+cpp_quote("HRESULT WINAPI PropStgNameToFmtId(const LPOLESTR, FMTID *);")
+cpp_quote("#endif /* _STGCREATEPROPSTG_DEFINED_ */")
+cpp_quote("")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h
new file mode 100644
index 00000000..68ae86b0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkey.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 Maarten Lankhorst for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_PROPKEY
+#define _INC_PROPKEY
+
+#include <propkeydef.h>
+
+DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 7);
+DEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 10);
+DEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 2);
+DEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xe6822fee, 0x8c17, 0x4d62, 0x82, 0x3c, 0x8e, 0x9c, 0xfc, 0xbd, 0x1d, 0x5c, 100);
+DEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579e5d0, 0x1116, 0x4084, 0xbd, 0x9a, 0x9b, 0x4f, 0x7c, 0xb4, 0xdf, 0x5e, 100);
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 5);
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 6);
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 9);
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4c8b, 0x11d1, 0x8b, 0x80, 0x08, 0x00, 0x36, 0xb1, 0x1a, 0x03, 8);
+
+DEFINE_PROPERTYKEY(PKEY_Title, 0xf29f85e0,0x4ff9,0x1068,0xab,0x91,0x08,0x00,0x2b,0x27,0xb3,0xd9,2);
+
+DEFINE_PROPERTYKEY(PKEY_ItemName, 0x6b8da074,0x3b5c,0x43bc,0x88,0x6f,0x0a,0x2c,0xdc,0xe0,0x0b,0x6f,100);
+
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_ExcludeFromShowInNewInstall, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,8);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_ID, 0x9f4c2855,0x9f79,0x4B39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,5);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_IsDestListSeparator, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,6);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_PreventPinning, 0x9f4c2855,0x9F79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,9);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchCommand, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,2);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchDisplayNameResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,4);
+DEFINE_PROPERTYKEY(PKEY_AppUserModel_RelaunchIconResource, 0x9f4c2855,0x9f79,0x4b39,0xa8,0xd0,0xe1,0xd4,0x2d,0xe1,0xd5,0xf3,3);
+
+#endif /*_INC_PROPKEY*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h
new file mode 100644
index 00000000..c0c36114
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propkeydef.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef PID_FIRST_USABLE
+#define PID_FIRST_USABLE 2
+#endif
+
+#ifndef REFPROPERTYKEY
+#ifdef __cplusplus
+#define REFPROPERTYKEY const PROPERTYKEY &
+#else /*!__cplusplus*/
+#define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST
+#endif
+#endif
+
+#undef DEFINE_PROPERTYKEY
+
+#ifdef INITGUID
+#ifdef __cplusplus
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+ EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \
+ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid }
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+ const PROPERTYKEY DECLSPEC_SELECTANY name DECLSPEC_HIDDEN = \
+ { { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }, pid }
+#endif
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+ EXTERN_C const PROPERTYKEY name DECLSPEC_HIDDEN
+#endif
+
+#ifndef IsEqualPropertyKey
+#ifdef __cplusplus
+#define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID((a).fmtid,(b).fmtid))
+#else
+#define IsEqualPropertyKey(a,b) (((a).pid == (b).pid) && IsEqualIID(&(a).fmtid,&(b).fmtid))
+#endif
+#endif
+
+#ifndef _PROPERTYKEY_EQUALITY_OPERATORS_
+#define _PROPERTYKEY_EQUALITY_OPERATORS_
+#ifdef __cplusplus
+extern "C++"
+{
+
+inline bool operator==(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther)
+{
+ return IsEqualPropertyKey(guidOne, guidOther);
+}
+inline bool operator!=(REFPROPERTYKEY guidOne, REFPROPERTYKEY guidOther)
+{
+ return !(guidOne == guidOther);
+}
+
+}
+#endif
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl
new file mode 100644
index 00000000..c78e5c76
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propsys.idl
@@ -0,0 +1,832 @@
+/*
+ * system property interfaces
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "ocidl.idl";
+import "shtypes.idl";
+import "structuredquerycondition.idl";
+
+cpp_quote("#ifndef PSSTDAPI")
+cpp_quote("#define PSSTDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE")
+cpp_quote("#endif")
+
+cpp_quote("#if 0")
+typedef PROPERTYKEY *REFPROPERTYKEY;
+cpp_quote("#endif")
+cpp_quote("#include <propkeydef.h>")
+
+[
+ uuid(b7d14566-0509-4cce-a71f-0a554233bd9b),
+ object,
+ pointer_default(unique)
+]
+interface IInitializeWithFile : IUnknown
+{
+ HRESULT Initialize(
+ [in,string] LPCWSTR pszFilePath,
+ [in] DWORD grfMode
+ );
+}
+
+[
+ uuid(b824b49d-22ac-4161-ac8a-9916e8fa3f7f),
+ object,
+ pointer_default(unique)
+]
+interface IInitializeWithStream : IUnknown
+{
+ [local] HRESULT Initialize(
+ [in] IStream *pstream,
+ [in] DWORD grfMode
+ );
+}
+
+[
+ uuid(886d8eeb-8cf2-4446-8d02-cdba1dbdcf99),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyStore : IUnknown
+{
+ HRESULT GetCount(
+ [out] DWORD *cProps
+ );
+ HRESULT GetAt(
+ [in] DWORD iProp,
+ [out] PROPERTYKEY *pkey
+ );
+ HRESULT GetValue(
+ [in] REFPROPERTYKEY key,
+ [out] PROPVARIANT *pv
+ );
+ HRESULT SetValue(
+ [in] REFPROPERTYKEY key,
+ [in] REFPROPVARIANT propvar
+ );
+ HRESULT Commit(void);
+}
+
+typedef IPropertyStore *LPPROPERTYSTORE;
+
+[
+ uuid(71604b0f-97b0-4764-8577-2f13e98a1422),
+ object,
+ pointer_default(unique)
+]
+interface INamedPropertyStore : IUnknown
+{
+ HRESULT GetNamedValue(
+ [in,string] LPCWSTR pszName,
+ [out] PROPVARIANT *ppropvar
+ );
+ HRESULT SetNamedValue(
+ [in,string] LPCWSTR pszName,
+ [in] REFPROPVARIANT propvar
+ );
+ HRESULT GetNameCount(
+ [out] DWORD *pdwCount
+ );
+ HRESULT GetNameAt(
+ [in] DWORD iProp,
+ [out] BSTR *pbstrName
+ );
+}
+
+typedef [v1_enum] enum GETPROPERTYSTOREFLAGS
+{
+ GPS_DEFAULT = 0x00,
+ GPS_HANDLERPROPERTIESONLY = 0x01,
+ GPS_READWRITE = 0x02,
+ GPS_TEMPORARY = 0x04,
+ GPS_FASTPROPERTIESONLY = 0x08,
+ GPS_OPENSLOWITEM = 0x10,
+ GPS_DELAYCREATION = 0x20,
+ GPS_BESTEFFORT = 0x40,
+ GPS_NO_OPLOCK = 0x80,
+ GPS_MASK_VALID = 0xff
+} GETPROPERTYSTOREFLAGS;
+
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(GETPROPERTYSTOREFLAGS)")
+
+[
+ uuid(fc0ca0a7-c316-4fd2-9031-3e628e6d4f23),
+ object
+]
+interface IObjectWithPropertyKey : IUnknown
+{
+ HRESULT SetPropertyKey(
+ [in] REFPROPERTYKEY key
+ );
+ HRESULT GetPropertyKey(
+ [out] PROPERTYKEY *key
+ );
+}
+
+typedef [v1_enum] enum PKA_FLAGS
+{
+ PKA_SET,
+ PKA_APPEND,
+ PKA_DELETE
+} PKA_FLAGS;
+
+[
+ uuid(f917bc8a-1bba-4478-a245-1bde03eb9431),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyChange : IObjectWithPropertyKey
+{
+ HRESULT ApplyToPropVariant([in] REFPROPVARIANT propvarin, [out] PROPVARIANT *propvarout);
+}
+
+[
+ uuid(380f5cad-1b5e-42f2-805d-637fd392d31e),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyChangeArray : IUnknown
+{
+ HRESULT GetCount(
+ [out] UINT *pcOperations
+ );
+ HRESULT GetAt(
+ [in] UINT iIndex,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv
+ );
+ HRESULT InsertAt(
+ [in] UINT iIndex,
+ [in] IPropertyChange *ppropChange
+ );
+ HRESULT Append(
+ [in] IPropertyChange *ppropChange
+ );
+ HRESULT AppendOrReplace(
+ [in] IPropertyChange *ppropChange
+ );
+ HRESULT RemoveAt(
+ [in] UINT iIndex
+ );
+ HRESULT IsKeyInArray(
+ [in] REFPROPERTYKEY key
+ );
+}
+
+[
+ uuid(c8e2d566-186e-4d49-bf41-6909ead56acc),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyStoreCapabilities : IUnknown
+{
+ HRESULT IsPropertyWritable(
+ [in] REFPROPERTYKEY key
+ );
+}
+
+[
+ uuid(3017056d-9a91-4e90-937d-746c72abbf4f),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyStoreCache : IPropertyStore
+{
+ typedef [v1_enum] enum PSC_STATE
+ {
+ PSC_NORMAL = 0,
+ PSC_NOTINSOURCE,
+ PSC_DIRTY,
+ PSC_READONLY
+ } PSC_STATE;
+
+ HRESULT GetState(
+ [in] REFPROPERTYKEY key,
+ [out] PSC_STATE *pstate
+ );
+ HRESULT GetValueAndState(
+ [in] REFPROPERTYKEY key,
+ [out] PROPVARIANT *ppropvar,
+ [out] PSC_STATE *pstate
+ );
+ HRESULT SetState(
+ [in] REFPROPERTYKEY key,
+ [in] PSC_STATE pstate
+ );
+ HRESULT SetValueAndState(
+ [in] REFPROPERTYKEY key,
+ [in, unique] const PROPVARIANT *ppropvar,
+ [in] PSC_STATE state
+ );
+}
+
+[
+ uuid(11e1fbf9-2d56-4a6b-8db3-7cd193a471f2),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyEnumType : IUnknown
+{
+ typedef [v1_enum] enum PROPENUMTYPE
+ {
+ PET_DISCRETEVALUE = 0,
+ PET_RANGEDVALUE,
+ PET_DEFAULTVALUE,
+ PET_ENDRANGE
+ } PROPENUMTYPE;
+
+ HRESULT GetEnumType(
+ [out] PROPENUMTYPE *penumtype
+ );
+ HRESULT GetValue(
+ [out] PROPVARIANT *ppropvar
+ );
+ HRESULT GetRangeMinValue(
+ [out] PROPVARIANT *ppropvar
+ );
+ HRESULT GetRangeSetValue(
+ [out] PROPVARIANT *ppropvar
+ );
+ HRESULT GetDisplayText(
+ [out] LPWSTR *ppszDisplay
+ );
+}
+
+[
+ uuid(9b6e051c-5ddd-4321-9070-fe2acb55e974),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyEnumType2 : IPropertyEnumType
+{
+ HRESULT GetImageReference(
+ [out] LPWSTR *ppszImageRes
+ );
+}
+
+[
+ uuid(a99400f4-3d84-4557-94ba-1242fb2cc9a6),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyEnumTypeList : IUnknown
+{
+ HRESULT GetCount(
+ [out] UINT *pctypes
+ );
+ HRESULT GetAt(
+ [in] UINT itype,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv
+ );
+ HRESULT GetConditionAt(
+ [in] UINT nIndex,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv
+ );
+ HRESULT FindMatchingIndex(
+ [in] REFPROPVARIANT propvarCmp,
+ [out] UINT *pnIndex
+ );
+}
+
+[
+ uuid(6f79d558-3e96-4549-a1d1-7d75d2288814),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyDescription : IUnknown
+{
+ typedef [v1_enum] enum PROPDESC_TYPE_FLAGS
+ {
+ PDTF_DEFAULT = 0,
+ PDTF_MULTIPLEVALUES = 0x001,
+ PDTF_ISINNATE = 0x002,
+ PDTF_ISGROUP = 0x004,
+ PDTF_CANGROUPBY = 0x008,
+ PDTF_CANSTACKBY = 0x010,
+ PDTF_ISTREEPROPERTY = 0x020,
+ PDTF_INCLUDEINFULLTEXTQUERY = 0x040,
+ PDTF_ISVIEWABLE = 0x080,
+ PDTF_ISQUERYABLE = 0x100,
+ PDTF_CANBEPURGED = 0x200,
+ PDTF_SEARCHRAWVALUE = 0x400,
+ PDTF_ISSYSTEMPROPERTY = 0x80000000,
+ PDTF_MASK_ALL = 0x800007ff
+ } PROPDESC_TYPE_FLAGS;
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_TYPE_FLAGS)")
+
+ typedef [v1_enum] enum PROPDESC_VIEW_FLAGS
+ {
+ PDVF_DEFAULT = 0x0000,
+ PDVF_CENTERALIGN = 0x0001,
+ PDVF_RIGHTALIGN = 0x0002,
+ PDVF_BEGINNEWGROUP = 0x0004,
+ PDVF_FILLAREA = 0x0008,
+ PDVF_SORTDESCENDING = 0x0010,
+ PDVF_SHOWONLYIFPRESENT = 0x0020,
+ PDVF_SHOWBYDEFAULT = 0x0040,
+ PDVF_SHOWINPRIMARYLIST = 0x0080,
+ PDVF_SHOWINSECONDARYLIST = 0x0100,
+ PDVF_HIDELABEL = 0x0200,
+ PDVF_HIDDEN = 0x0800,
+ PDVF_CANWRAP = 0x1000,
+ PDVF_MASK_ALL = 0x1bff
+ } PROPDESC_VIEW_FLAGS;
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_VIEW_FLAGS)")
+
+ typedef [v1_enum] enum PROPDESC_DISPLAYTYPE
+ {
+ PDDT_STRING = 0,
+ PDDT_NUMBER,
+ PDDT_BOOLEAN,
+ PDDT_DATETIME,
+ PDDT_ENUMERATED
+ } PROPDESC_DISPLAYTYPE;
+
+ typedef [v1_enum] enum PROPDESC_GROUPING_RANGE
+ {
+ PDGR_DISCRETE = 0,
+ PDGR_ALPHANUMERIC,
+ PDGR_SIZE,
+ PDGR_DYNAMIC,
+ PDGR_DATE,
+ PDGR_PERCENT,
+ PDGR_ENUMERATED
+ } PROPDESC_GROUPING_RANGE;
+
+ typedef [v1_enum] enum PROPDESC_FORMAT_FLAGS
+ {
+ PDFF_DEFAULT = 0x0000,
+ PDFF_PREFIXNAME = 0x0001,
+ PDFF_FILENAME = 0x0002,
+ PDFF_ALWAYSKB = 0x0004,
+ PDFF_RESERVED_RIGHTTOLEFT = 0x0008,
+ PDFF_SHORTTIME = 0x0010,
+ PDFF_LONGTIME = 0x0020,
+ PDFF_HIDETIME = 0x0040,
+ PDFF_SHORTDATE = 0x0080,
+ PDFF_LONGDATE = 0x0100,
+ PDFF_HIDEDATE = 0x0200,
+ PDFF_RELATIVEDATE = 0x0400,
+ PDFF_USEEDITINVITATION = 0x0800,
+ PDFF_READONLY = 0x1000,
+ PDFF_NOAUTOREADINGORDER = 0x2000
+ } PROPDESC_FORMAT_FLAGS;
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_FORMAT_FLAGS)")
+
+ typedef [v1_enum] enum PROPDESC_SORTDESCRIPTION
+ {
+ PDSD_GENERAL = 0,
+ PDSD_A_Z,
+ PDSD_LOWEST_HIGHEST,
+ PDSD_SMALLEST_BIGGEST,
+ PDSD_OLDEST_NEWEST
+ } PROPDESC_SORTDESCRIPTION;
+
+ typedef [v1_enum] enum PROPDESC_RELATIVEDESCRIPTION_TYPE
+ {
+ PDRDT_GENERAL = 0,
+ PDRDT_DATE,
+ PDRDT_SIZE,
+ PDRDT_COUNT,
+ PDRDT_REVISION,
+ PDRDT_LENGTH,
+ PDRDT_DURATION,
+ PDRDT_SPEED,
+ PDRDT_RATE,
+ PDRDT_RATING,
+ PDRDT_PRIORITY
+ } PROPDESC_RELATIVEDESCRIPTION_TYPE;
+
+ typedef [v1_enum] enum PROPDESC_AGGREGATION_TYPE
+ {
+ PDAT_DEFAULT = 0,
+ PDAT_FIRST,
+ PDAT_SUM,
+ PDAT_AVERAGE,
+ PDAT_DATERANGE,
+ PDAT_UNION,
+ PDAT_MAX,
+ PDAT_MIN
+ } PROPDESC_AGGREGATION_TYPE;
+
+ typedef [v1_enum] enum PROPDESC_CONDITION_TYPE
+ {
+ PDCOT_NONE = 0,
+ PDCOT_STRING,
+ PDCOT_SIZE,
+ PDCOT_DATETIME,
+ PDCOT_BOOLEAN,
+ PDCOT_NUMBER
+ } PROPDESC_CONDITION_TYPE;
+
+ HRESULT GetPropertyKey(
+ [out] PROPERTYKEY *pkey
+ );
+ HRESULT GetCanonicalName(
+ [out, string] LPWSTR *ppszName
+ );
+ HRESULT GetPropertyType(
+ [out] VARTYPE *pvartype
+ );
+ HRESULT GetDisplayName(
+ [out, string] LPWSTR *ppszName
+ );
+ HRESULT GetEditInvitation(
+ [out, string] LPWSTR *ppszName
+ );
+ HRESULT GetTypeFlags(
+ [in] PROPDESC_TYPE_FLAGS mask,
+ [out] PROPDESC_TYPE_FLAGS *ppdtFlags
+ );
+ HRESULT GetViewFlags(
+ [out] PROPDESC_VIEW_FLAGS *ppdvFlags
+ );
+ HRESULT GetDefaultColumnWidth(
+ [out] UINT *pcxChars
+ );
+ HRESULT GetDisplayType(
+ [out] PROPDESC_DISPLAYTYPE *pdisplaytype
+ );
+ HRESULT GetColumnState(
+ [out] SHCOLSTATEF *pcsFlags
+ );
+ HRESULT GetGroupingRange(
+ [out] PROPDESC_GROUPING_RANGE *psd
+ );
+ HRESULT GetRelativeDescriptionType(
+ [out] PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt
+ );
+ HRESULT GetRelativeDescription(
+ [in] REFPROPVARIANT propvar1,
+ [in] REFPROPVARIANT propvar2,
+ [out,string] LPWSTR *ppszDesc1,
+ [out,string] LPWSTR *ppszDesc2
+ );
+ HRESULT GetSortDescription(
+ [out] PROPDESC_SORTDESCRIPTION *psd
+ );
+ HRESULT GetSortDescriptionLabel(
+ [in] BOOL fDescending,
+ [out,string] LPWSTR *ppszDescription
+ );
+ HRESULT GetAggregationType(
+ [out] PROPDESC_AGGREGATION_TYPE *paggtype
+ );
+ HRESULT GetConditionType(
+ [out] PROPDESC_CONDITION_TYPE *pcontype,
+ [out] CONDITION_OPERATION *popDefault
+ );
+ HRESULT GetEnumTypeList(
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ [local] HRESULT CoerceToCanonicalValue(
+ [in,out] PROPVARIANT *propvar
+ );
+ [call_as(CoerceToCanonicalValue)] HRESULT RemoteCoerceToCanonicalValue(
+ [in] REFPROPVARIANT propvar,
+ [out] PROPVARIANT *ppropvar
+ );
+ HRESULT FormatForDisplay(
+ [in] REFPROPVARIANT propvar,
+ [in] PROPDESC_FORMAT_FLAGS flags,
+ [out,string] LPWSTR *ppszDisplay
+ );
+ HRESULT IsValueCanonical(
+ [in] REFPROPVARIANT propvar
+ );
+}
+
+[
+ uuid(57d2eded-5062-400e-b107-5dae79fe57a6),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyDescription2 : IPropertyDescription
+{
+ HRESULT GetImageReferenceForValue(
+ [in] REFPROPVARIANT propvar,
+ [out,string] LPWSTR *ppszImageRes
+ );
+}
+
+[
+ uuid(f67104fc-2af9-46fd-b32d-243c1404f3d1),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyDescriptionAliasInfo : IPropertyDescription
+{
+ HRESULT GetSortByAlias(
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ HRESULT GetAdditionalSortByAliases(
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+}
+
+[
+ uuid(078f91bd-29a2-440f-924e-46a291524520),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyDescriptionSearchInfo : IPropertyDescription
+{
+ typedef [v1_enum] enum PROPDESC_SEARCHINFO_FLAGS
+ {
+ PDSIF_DEFAULT = 0x0,
+ PDSIF_ININVERTEDINDEX = 0x1,
+ PDSIF_ISCOLUMN = 0x2,
+ PDSIF_ISCOLUMNSPARSE = 0x4,
+ PDSIF_ALWAYSINCLUDE = 0x8,
+ } PROPDESC_SEARCHINFO_FLAGS;
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(PROPDESC_SEARCHINFO_FLAGS)")
+
+ typedef [v1_enum] enum PROPDESC_COLUMNINDEX_TYPE
+ {
+ PDCIT_NONE = 0,
+ PDCIT_ONDISK,
+ PDCIT_INMEMORY,
+ PDCIT_ONDEMAND,
+ PDCIT_ONDISKALL,
+ PDCIT_ONDISKVECTOR
+ } PROPDESC_COLUMNINDEX_TYPE;
+
+ HRESULT GetSearchInfoFlags(
+ [out] PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags
+ );
+ HRESULT GetColumnIndexType(
+ [out] PROPDESC_COLUMNINDEX_TYPE *ppdciType
+ );
+ HRESULT GetProjectionString(
+ [out] LPWSTR *ppszProjection
+ );
+ HRESULT GetMaxSize(
+ [out] UINT *pcbMaxSize
+ );
+}
+
+[
+ uuid(507393f4-2a3d-4a60-b59e-d9c75716c2dd),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyDescriptionRelatedPropertyInfo : IPropertyDescription
+{
+ HRESULT GetRelatedProperty(
+ [in] LPCWSTR ppszRelationshipName,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+}
+
+typedef [v1_enum] enum PROPDESC_ENUMFILTER
+{
+ PDEF_ALL = 0,
+ PDEF_SYSTEM,
+ PDEF_NONSYSTEM,
+ PDEF_VIEWABLE,
+ PDEF_QUERYABLE,
+ PDEF_INFULLTEXTQUERY,
+ PDEF_COLUMN
+} PROPDESC_ENUMFILTER;
+
+[
+ uuid(ca724e8a-c3e6-442b-88a4-6fb0db8035a3),
+ object,
+ pointer_default(unique)
+]
+interface IPropertySystem : IUnknown
+{
+ HRESULT GetPropertyDescription(
+ [in] REFPROPERTYKEY propkey,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ HRESULT GetPropertyDescriptionByName(
+ [in,string] LPCWSTR pszCanonicalName,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ HRESULT GetPropertyDescriptionListFromString(
+ [in,string] LPCWSTR pszPropList,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ HRESULT EnumeratePropertyDescriptions(
+ [in] PROPDESC_ENUMFILTER filterOn,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ HRESULT FormatForDisplay(
+ [in] REFPROPERTYKEY key,
+ [in] REFPROPVARIANT propvar,
+ [in] PROPDESC_FORMAT_FLAGS pdff,
+ [out,string,size_is(cchText)] LPWSTR pszText,
+ [in] DWORD cchText
+ );
+ HRESULT FormatForDisplayAlloc(
+ [in] REFPROPERTYKEY key,
+ [in] REFPROPVARIANT propvar,
+ [in] PROPDESC_FORMAT_FLAGS pdff,
+ [out,string] LPWSTR *pszText
+ );
+ HRESULT RegisterPropertySchema(
+ [in,string] LPCWSTR pszPath
+ );
+ HRESULT UnregisterPropertySchema(
+ [in,string] LPCWSTR pszPath
+ );
+ HRESULT RefreshPropertySchema(void);
+}
+
+[
+ uuid(1f9fc1d0-c39b-4b26-817f-011967d3440e),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyDescriptionList : IUnknown
+{
+ HRESULT GetCount(
+ [out] UINT *pcelem
+ );
+ HRESULT GetAt(
+ [in] UINT iElem,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+}
+
+[
+ uuid(bc110b6d-57e8-4148-a9c6-91015ab2f3a5),
+ object,
+ pointer_default(unique)
+]
+interface IPropertyStoreFactory : IUnknown
+{
+ HRESULT GetPropertyStore(
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in,unique] IUnknown *pUnkFactory,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+ HRESULT GetPropertyStoreForKeys(
+ [in,unique] const PROPERTYKEY *rgKeys,
+ [in] UINT cKeys,
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+}
+
+[
+ uuid(40d4577f-e237-4bdb-bd69-58f089431b6a),
+ object,
+ pointer_default(unique)
+]
+interface IDelayedPropertyStoreFactory : IPropertyStoreFactory
+{
+ HRESULT GetDelayedPropertyStore(
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in] DWORD dwStoreId,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+}
+
+[v1_enum] enum _PERSIST_SPROPSTORE_FLAGS
+{
+ FPSPS_DEFAULT = 0,
+ FPSPS_READONLY = 1
+};
+typedef int PERSIST_SPROPSTORE_FLAGS;
+
+typedef struct tagSERIALIZEDROPSTORAGE SERIALIZEDPROPSTORAGE;
+
+cpp_quote("#if 0") /* Wine doesn't have __unaligned builtin, hack */
+typedef SERIALIZEDPROPSTORAGE *PUSERIALIZEDPROPSTORAGE;
+typedef const SERIALIZEDPROPSTORAGE *PCUSERIALIZEDPROPSTORAGE;
+cpp_quote("#endif")
+cpp_quote("typedef SERIALIZEDPROPSTORAGE UNALIGNED *PUSERIALIZEDPROPSTORAGE;")
+cpp_quote("typedef const SERIALIZEDPROPSTORAGE UNALIGNED *PCUSERIALIZEDPROPSTORAGE;")
+
+[
+ uuid(e318ad57-0aa0-450f-aca5-6fab7103d917),
+ pointer_default(unique),
+ local
+]
+interface IPersistSerializedPropStorage : IUnknown
+{
+ HRESULT SetFlags(
+ [in] PERSIST_SPROPSTORE_FLAGS flags
+ );
+ HRESULT SetPropertyStorage(
+ [in] PCUSERIALIZEDPROPSTORAGE psps,
+ [in] DWORD cb
+ );
+ HRESULT GetPropertyStorage(
+ [out] SERIALIZEDPROPSTORAGE **psps,
+ [out] DWORD *pcb
+ );
+}
+
+[
+ uuid(77effa68-4f98-4366-ba72-573b3d880571),
+ pointer_default(unique),
+ local
+]
+interface IPersistSerializedPropStorage2 : IPersistSerializedPropStorage
+{
+ HRESULT GetpropertyStorageSize(
+ [out] DWORD *pcb
+ );
+ HRESULT GetPropertyStorageBuffer(
+ [out] SERIALIZEDPROPSTORAGE *psps,
+ [in] DWORD cb,
+ [out] DWORD *pcbWritten
+ );
+}
+
+[
+ uuid(fa955fd9-38be-4879-a6ce-824cf52d609f),
+ object,
+ pointer_default(unique)
+]
+interface IPropertySystemChangeNotify : IUnknown
+{
+ HRESULT SchemaRefreshed(void);
+}
+
+/* Interface for CoCreateInstance? */
+[
+ uuid(75121952-e0d0-43e5-9380-1d80483acf72),
+ pointer_default(unique)
+]
+interface ICreateObject : IUnknown
+{
+ HRESULT CreateObject(
+ [in] REFCLSID clsid,
+ [in,unique] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out,iid_is(riid)] void **ppv
+ );
+}
+
+cpp_quote("#define PKEY_PIDSTR_MAX 10")
+cpp_quote("#define GUIDSTRING_MAX 39")
+cpp_quote("#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)")
+
+cpp_quote("HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);")
+cpp_quote("HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);")
+cpp_quote("HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);")
+cpp_quote("HRESULT WINAPI PSRefreshPropertySchema(void);")
+
+/* TODO: Add remainder of the C api here */
+
+[
+ uuid(2cda3294-6c4f-4020-b161-27c530c81fa6),
+ lcid(0x0000),
+ version(1.0)
+]
+library PropSysObjects
+{
+ [uuid(9a02e012-6303-4e1e-b9a1-630f802592c5)] coclass InMemoryPropertyStore
+ {
+ interface IPropertyStore;
+ }
+ [uuid(b8967f86-58ae-4f96-9fb2-5d7904798f4b)] coclass PropertySystem
+ {
+ interface IPropertySystem;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h
new file mode 100644
index 00000000..936121ef
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/propvarutil.h
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2008 James Hawkins for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PROPVARUTIL_H
+#define __WINE_PROPVARUTIL_H
+
+#include <shtypes.h>
+#include <shlwapi.h>
+
+enum tagPROPVAR_CHANGE_FLAGS
+{
+ PVCHF_DEFAULT = 0x00000000,
+ PVCHF_NOVALUEPROP = 0x00000001,
+ PVCHF_ALPHABOOL = 0x00000002,
+ PVCHF_NOUSEROVERRIDE = 0x00000004,
+ PVCHF_LOCALBOOL = 0x00000008,
+ PVCHF_NOHEXSTRING = 0x00000010,
+};
+
+typedef int PROPVAR_CHANGE_FLAGS;
+
+enum tagPROPVAR_COMPARE_UNIT
+{
+ PVCU_DEFAULT = 0x00000000,
+ PVCU_SECOND = 0x00000001,
+ PVCU_MINUTE = 0x00000002,
+ PVCU_HOUR = 0x00000003,
+ PVCU_DAY = 0x00000004,
+ PVCU_MONTH = 0x00000005,
+ PVCU_YEAR = 0x00000006,
+};
+
+typedef int PROPVAR_COMPARE_UNIT;
+
+enum tagPROPVAR_COMPARE_FLAGS
+{
+ PVCF_DEFAULT = 0x00000000,
+ PVCF_TREATEMPTYASGREATERTHAN = 0x00000001,
+ PVCF_USESTRCMP = 0x00000002,
+ PVCF_USESTRCMPC = 0x00000004,
+ PVCF_USESTRCMPI = 0x00000008,
+ PVCF_USESTRCMPIC = 0x00000010,
+};
+
+typedef int PROPVAR_COMPARE_FLAGS;
+
+HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT propvarSrc,
+ PROPVAR_CHANGE_FLAGS flags, VARTYPE vt);
+HRESULT WINAPI InitPropVariantFromGUIDAsString(REFGUID guid, PROPVARIANT *ppropvar);
+HRESULT WINAPI InitVariantFromGUIDAsString(REFGUID guid, VARIANT *pvar);
+HRESULT WINAPI InitPropVariantFromBuffer(const VOID *pv, UINT cb, PROPVARIANT *ppropvar);
+HRESULT WINAPI InitVariantFromBuffer(const VOID *pv, UINT cb, VARIANT *pvar);
+HRESULT WINAPI PropVariantToGUID(const PROPVARIANT *ppropvar, GUID *guid);
+HRESULT WINAPI VariantToGUID(const VARIANT *pvar, GUID *guid);
+INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2,
+ PROPVAR_COMPARE_UNIT uint, PROPVAR_COMPARE_FLAGS flags);
+
+HRESULT WINAPI PropVariantToInt16(REFPROPVARIANT propvarIn, SHORT *ret);
+HRESULT WINAPI PropVariantToInt32(REFPROPVARIANT propvarIn, LONG *ret);
+HRESULT WINAPI PropVariantToInt64(REFPROPVARIANT propvarIn, LONGLONG *ret);
+HRESULT WINAPI PropVariantToUInt16(REFPROPVARIANT propvarIn, USHORT *ret);
+HRESULT WINAPI PropVariantToUInt32(REFPROPVARIANT propvarIn, ULONG *ret);
+HRESULT WINAPI PropVariantToUInt64(REFPROPVARIANT propvarIn, ULONGLONG *ret);
+
+#ifdef __cplusplus
+
+HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar);
+HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar);
+HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar);
+
+#ifndef NO_PROPVAR_INLINES
+
+inline HRESULT InitPropVariantFromBoolean(BOOL fVal, PROPVARIANT *ppropvar)
+{
+ ppropvar->vt = VT_BOOL;
+ ppropvar->boolVal = fVal ? VARIANT_TRUE : VARIANT_FALSE;
+ return S_OK;
+}
+
+inline HRESULT InitPropVariantFromString(PCWSTR psz, PROPVARIANT *ppropvar)
+{
+ HRESULT hres;
+
+ hres = SHStrDupW(psz, &ppropvar->pwszVal);
+ if(SUCCEEDED(hres))
+ ppropvar->vt = VT_LPWSTR;
+ else
+ PropVariantInit(ppropvar);
+
+ return hres;
+}
+
+inline HRESULT InitPropVariantFromInt64(LONGLONG llVal, PROPVARIANT *ppropvar)
+{
+ ppropvar->vt = VT_I8;
+ ppropvar->hVal.QuadPart = llVal;
+ return S_OK;
+}
+
+#endif
+#endif
+
+#endif /* __WINE_PROPVARUTIL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h
new file mode 100644
index 00000000..5c8181bd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/prsht.h
@@ -0,0 +1,547 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PRSHT_H
+#define __WINE_PRSHT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Property sheet support (callback procs)
+ */
+
+
+#define WC_PROPSHEETA "SysPropertySheet"
+#if defined(__GNUC__)
+# define WC_PROPSHEETW (const WCHAR []){ 'S','y','s', \
+ 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 }
+#elif defined(_MSC_VER)
+# define WC_PROPSHEETW L"SysPropertySheet"
+#else
+static const WCHAR WC_PROPSHEETW[] = { 'S','y','s',
+ 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 };
+#endif
+#define WC_PROPSHEET WINELIB_NAME_AW(WC_PROPSHEET)
+
+struct _PROPSHEETPAGEA; /** need to forward declare those structs **/
+struct _PROPSHEETPAGEW;
+struct _PSP;
+#ifndef _HPROPSHEETPAGE_DEFINED
+#define _HPROPSHEETPAGE_DEFINED
+typedef struct _PSP *HPROPSHEETPAGE;
+#endif /* _HPROPSHEETPAGE_DEFINED */
+
+
+typedef UINT (CALLBACK *LPFNPSPCALLBACKA)(HWND, UINT, struct _PROPSHEETPAGEA*);
+typedef UINT (CALLBACK *LPFNPSPCALLBACKW)(HWND, UINT, struct _PROPSHEETPAGEW*);
+typedef INT (CALLBACK *PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM);
+typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM);
+typedef BOOL (CALLBACK *LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM);
+
+/*
+ * Property sheet support (structures)
+ */
+
+typedef LPCDLGTEMPLATEA PROPSHEETPAGE_RESOURCEA;
+typedef LPCDLGTEMPLATEW PROPSHEETPAGE_RESOURCEW;
+DECL_WINELIB_TYPE_AW(PROPSHEETPAGE_RESOURCE)
+
+typedef struct _PROPSHEETPAGEA
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ union
+ {
+ LPCSTR pszTemplate;
+ PROPSHEETPAGE_RESOURCEA pResource;
+ } DUMMYUNIONNAME;
+ union
+ {
+ HICON hIcon;
+ LPCSTR pszIcon;
+ } DUMMYUNIONNAME2;
+ LPCSTR pszTitle;
+ DLGPROC pfnDlgProc;
+ LPARAM lParam;
+ LPFNPSPCALLBACKA pfnCallback;
+ UINT* pcRefParent;
+ LPCSTR pszHeaderTitle;
+ LPCSTR pszHeaderSubTitle;
+ HANDLE hActCtx;
+ union
+ {
+ HBITMAP hbmHeader;
+ LPCSTR pszbmHeader;
+ } DUMMYUNIONNAME3;
+} PROPSHEETPAGEA, *LPPROPSHEETPAGEA,
+ PROPSHEETPAGEA_LATEST, *LPPROPSHEETPAGEA_LATEST;
+
+typedef const PROPSHEETPAGEA *LPCPROPSHEETPAGEA, *LPCPROPSHEETPAGEA_LATEST;
+#define PROPSHEETPAGEA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pcRefParent)
+#define PROPSHEETPAGEA_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, pszHeaderSubTitle)
+#define PROPSHEETPAGEA_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEA, hActCtx)
+#define PROPSHEETPAGEA_V4_SIZE sizeof(PROPSHEETHEADERA)
+
+typedef struct _PROPSHEETPAGEW
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ union
+ {
+ LPCWSTR pszTemplate;
+ PROPSHEETPAGE_RESOURCEW pResource;
+ } DUMMYUNIONNAME;
+ union
+ {
+ HICON hIcon;
+ LPCWSTR pszIcon;
+ } DUMMYUNIONNAME2;
+ LPCWSTR pszTitle;
+ DLGPROC pfnDlgProc;
+ LPARAM lParam;
+ LPFNPSPCALLBACKW pfnCallback;
+ UINT* pcRefParent;
+ LPCWSTR pszHeaderTitle;
+ LPCWSTR pszHeaderSubTitle;
+ HANDLE hActCtx;
+ union
+ {
+ HBITMAP hbmHeader;
+ LPCWSTR pszbmHeader;
+ } DUMMYUNIONNAME3;
+} PROPSHEETPAGEW, *LPPROPSHEETPAGEW,
+ PROPSHEETPAGEW_LATEST, *LPPROPSHEETPAGEW_LATEST;
+
+typedef const PROPSHEETPAGEW *LPCPROPSHEETPAGEW, *LPCPROPSHEETPAGEW_LATEST;
+#define PROPSHEETPAGEW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pcRefParent)
+#define PROPSHEETPAGEW_V2_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, pszHeaderSubTitle)
+#define PROPSHEETPAGEW_V3_SIZE CCSIZEOF_STRUCT(PROPSHEETPAGEW, hActCtx)
+#define PROPSHEETPAGEW_V4_SIZE sizeof(PROPSHEETHEADERA)
+
+
+typedef struct _PROPSHEETHEADERA
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ union
+ {
+ HICON hIcon;
+ LPCSTR pszIcon;
+ }DUMMYUNIONNAME;
+ LPCSTR pszCaption;
+ UINT nPages;
+ union
+ {
+ UINT nStartPage;
+ LPCSTR pStartPage;
+ }DUMMYUNIONNAME2;
+ union
+ {
+ LPCPROPSHEETPAGEA ppsp;
+ HPROPSHEETPAGE* phpage;
+ }DUMMYUNIONNAME3;
+ PFNPROPSHEETCALLBACK pfnCallback;
+ union
+ {
+ HBITMAP hbmWatermark;
+ LPCSTR pszbmWatermark;
+ }DUMMYUNIONNAME4;
+ HPALETTE hplWatermark;
+ union
+ {
+ HBITMAP hbmHeader;
+ LPCSTR pszbmHeader;
+ }DUMMYUNIONNAME5;
+} PROPSHEETHEADERA, *LPPROPSHEETHEADERA;
+
+typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA;
+#define PROPSHEETHEADERA_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERA, pfnCallback)
+#define PROPSHEETHEADERA_V2_SIZE sizeof(PROPSHEETHEADERA)
+
+typedef struct _PROPSHEETHEADERW
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ union
+ {
+ HICON hIcon;
+ LPCWSTR pszIcon;
+ }DUMMYUNIONNAME;
+ LPCWSTR pszCaption;
+ UINT nPages;
+ union
+ {
+ UINT nStartPage;
+ LPCWSTR pStartPage;
+ }DUMMYUNIONNAME2;
+ union
+ {
+ LPCPROPSHEETPAGEW ppsp;
+ HPROPSHEETPAGE* phpage;
+ }DUMMYUNIONNAME3;
+ PFNPROPSHEETCALLBACK pfnCallback;
+ union
+ {
+ HBITMAP hbmWatermark;
+ LPCWSTR pszbmWatermark;
+ }DUMMYUNIONNAME4;
+ HPALETTE hplWatermark;
+ union
+ {
+ HBITMAP hbmHeader;
+ LPCWSTR pszbmHeader;
+ }DUMMYUNIONNAME5;
+} PROPSHEETHEADERW, *LPPROPSHEETHEADERW;
+
+typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW;
+#define PROPSHEETHEADERW_V1_SIZE CCSIZEOF_STRUCT(PROPSHEETHEADERW, pfnCallback)
+#define PROPSHEETHEADERW_V2_SIZE sizeof(PROPSHEETHEADERW)
+
+
+/*
+ * Property sheet support (methods)
+ */
+INT_PTR WINAPI PropertySheetA(LPCPROPSHEETHEADERA);
+INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW);
+#define PropertySheet WINELIB_NAME_AW(PropertySheet)
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(LPCPROPSHEETPAGEA);
+HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW);
+#define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage)
+BOOL WINAPI DestroyPropertySheetPage(HPROPSHEETPAGE hPropPage);
+
+/*
+ * Property sheet support (UNICODE-Winelib)
+ */
+
+DECL_WINELIB_TYPE_AW(PROPSHEETPAGE)
+DECL_WINELIB_TYPE_AW(LPPROPSHEETPAGE)
+DECL_WINELIB_TYPE_AW(LPCPROPSHEETPAGE)
+DECL_WINELIB_TYPE_AW(PROPSHEETHEADER)
+DECL_WINELIB_TYPE_AW(LPPROPSHEETHEADER)
+DECL_WINELIB_TYPE_AW(LPCPROPSHEETHEADER)
+DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK)
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define PRSHT_NAME_AW(base, suffix) \
+ base##_##suffix##_must_use_W_or_A_in_this_context \
+ base##_##suffix##_must_use_W_or_A_in_this_context
+# define DECL_PRSHT_TYPE_AW(base, suffix) /* nothing */
+#else /* WINE_NO_UNICODE_MACROS */
+# ifdef UNICODE
+# define PRSHT_NAME_AW(base, suffix) base##W_##suffix
+# else
+# define PRSHT_NAME_AW(base, suffix) base##A_##suffix
+# endif
+# define DECL_PRSHT_TYPE_AW(base, suffix) typedef PRSHT_NAME_AW(base, suffix) base##_##suffix;
+#endif /* WINE_NO_UNICODE_MACROS */
+
+DECL_PRSHT_TYPE_AW(PROPSHEETPAGE, LATEST)
+DECL_PRSHT_TYPE_AW(LPPROPSHEETPAGE, LATEST)
+DECL_PRSHT_TYPE_AW(LPCPROPSHEETPAGE, LATEST)
+#define PROPSHEETPAGE_V1_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V1_SIZE)
+#define PROPSHEETPAGE_V2_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V2_SIZE)
+#define PROPSHEETPAGE_V3_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V3_SIZE)
+#define PROPSHEETPAGE_V4_SIZE PRSHT_NAME_AW(PROPSHEETPAGE, V4_SIZE)
+#define PROPSHEETHEADER_V1_SIZE PRSHT_NAME_AW(PROPSHEETHEADER, V1_SIZE)
+#define PROPSHEETHEADER_V2_SIZE PRSHT_NAME_AW(PROPSHEETHEADER, V2_SIZE)
+
+#undef PRSHT_NAME_AW
+#undef DECL_PRSHT_TYPE_AW
+
+/*
+ * Property sheet support (defines)
+ */
+#define PSP_DEFAULT 0x0000
+#define PSP_DLGINDIRECT 0x0001
+#define PSP_USEHICON 0x0002
+#define PSP_USEICONID 0x0004
+#define PSP_USETITLE 0x0008
+#define PSP_RTLREADING 0x0010
+
+#define PSP_HASHELP 0x0020
+#define PSP_USEREFPARENT 0x0040
+#define PSP_USECALLBACK 0x0080
+#define PSP_PREMATURE 0x0400
+
+#define PSP_HIDEHEADER 0x00000800
+#define PSP_USEHEADERTITLE 0x00001000
+#define PSP_USEHEADERSUBTITLE 0x00002000
+#define PSP_USEFUSIONCONTEXT 0x00004000
+#define PSP_COMMANDLINKS 0x00040000
+
+#define PSPCB_RELEASE 1
+#define PSPCB_CREATE 2
+
+#define PSH_DEFAULT 0x0000
+#define PSH_PROPTITLE 0x0001
+#define PSH_USEHICON 0x0002
+#define PSH_USEICONID 0x0004
+#define PSH_PROPSHEETPAGE 0x0008
+#define PSH_WIZARDHASFINISH 0x0010
+#define PSH_WIZARD 0x0020
+#define PSH_USEPSTARTPAGE 0x0040
+#define PSH_NOAPPLYNOW 0x0080
+#define PSH_USECALLBACK 0x0100
+#define PSH_HASHELP 0x0200
+#define PSH_MODELESS 0x0400
+#define PSH_RTLREADING 0x0800
+#define PSH_WIZARDCONTEXTHELP 0x00001000
+
+#define PSH_WIZARD97_OLD 0x00002000 /* for IE < 5 */
+#define PSH_AEROWIZARD 0x00004000
+#define PSH_WATERMARK 0x00008000
+#define PSH_USEHBMWATERMARK 0x00010000
+#define PSH_USEHPLWATERMARK 0x00020000
+#define PSH_STRETCHWATERMARK 0x00040000
+#define PSH_HEADER 0x00080000
+#define PSH_USEHBMHEADER 0x00100000
+#define PSH_USEPAGELANG 0x00200000
+#define PSH_WIZARD_LITE 0x00400000
+#define PSH_WIZARD97_NEW 0x01000000 /* for IE >= 5 */
+#define PSH_NOCONTEXTHELP 0x02000000
+#define PSH_RESIZABLE 0x04000000
+#define PSH_HEADERBITMAP 0x08000000
+#define PSH_NOMARGIN 0x10000000
+#ifndef __WINESRC__
+# if defined(_WIN32_IE) && (_WIN32_IE < 0x0500)
+# define PSH_WIZARD97 PSH_WIZARD97_OLD
+# else
+# define PSH_WIZARD97 PSH_WIZARD97_NEW
+# endif
+#endif
+
+#define PSCB_INITIALIZED 1
+#define PSCB_PRECREATE 2
+
+typedef struct _PSHNOTIFY
+{
+ NMHDR hdr;
+ LPARAM lParam;
+} PSHNOTIFY, *LPPSHNOTIFY;
+
+#define PSN_FIRST (0U-200U)
+#define PSN_LAST (0U-299U)
+
+
+#define PSN_SETACTIVE (PSN_FIRST-0)
+#define PSN_KILLACTIVE (PSN_FIRST-1)
+/* #define PSN_VALIDATE (PSN_FIRST-1) */
+#define PSN_APPLY (PSN_FIRST-2)
+#define PSN_RESET (PSN_FIRST-3)
+/* #define PSN_CANCEL (PSN_FIRST-3) */
+#define PSN_HELP (PSN_FIRST-5)
+#define PSN_WIZBACK (PSN_FIRST-6)
+#define PSN_WIZNEXT (PSN_FIRST-7)
+#define PSN_WIZFINISH (PSN_FIRST-8)
+#define PSN_QUERYCANCEL (PSN_FIRST-9)
+#define PSN_GETOBJECT (PSN_FIRST-10)
+#define PSN_TRANSLATEACCELERATOR (PSN_FIRST-12)
+#define PSN_QUERYINITIALFOCUS (PSN_FIRST-13)
+
+#define PSNRET_NOERROR 0
+#define PSNRET_INVALID 1
+#define PSNRET_INVALID_NOCHANGEPAGE 2
+
+
+#define PSM_SETCURSEL (WM_USER + 101)
+#define PSM_REMOVEPAGE (WM_USER + 102)
+#define PSM_ADDPAGE (WM_USER + 103)
+#define PSM_CHANGED (WM_USER + 104)
+#define PSM_RESTARTWINDOWS (WM_USER + 105)
+#define PSM_REBOOTSYSTEM (WM_USER + 106)
+#define PSM_CANCELTOCLOSE (WM_USER + 107)
+#define PSM_QUERYSIBLINGS (WM_USER + 108)
+#define PSM_UNCHANGED (WM_USER + 109)
+#define PSM_APPLY (WM_USER + 110)
+#define PSM_SETTITLEA (WM_USER + 111)
+#define PSM_SETTITLEW (WM_USER + 120)
+#define PSM_SETTITLE WINELIB_NAME_AW(PSM_SETTITLE)
+#define PSM_SETWIZBUTTONS (WM_USER + 112)
+#define PSM_PRESSBUTTON (WM_USER + 113)
+#define PSM_SETCURSELID (WM_USER + 114)
+#define PSM_SETFINISHTEXTA (WM_USER + 115)
+#define PSM_SETFINISHTEXTW (WM_USER + 121)
+#define PSM_SETFINISHTEXT WINELIB_NAME_AW(PSM_SETFINISHTEXT)
+#define PSM_GETTABCONTROL (WM_USER + 116)
+#define PSM_ISDIALOGMESSAGE (WM_USER + 117)
+#define PSM_GETCURRENTPAGEHWND (WM_USER + 118)
+#define PSM_INSERTPAGE (WM_USER + 119)
+#define PSM_SETHEADERTITLEA (WM_USER + 125)
+#define PSM_SETHEADERTITLEW (WM_USER + 126)
+#define PSM_SETHEADERTITLE WINELIB_NAME_AW(PSM_SETHEADERTITLE)
+#define PSM_SETHEADERSUBTITLEA (WM_USER + 127)
+#define PSM_SETHEADERSUBTITLEW (WM_USER + 128)
+#define PSM_SETHEADERSUBTITLE WINELIB_NAME_AW(PSM_SETHEADERSUBTITLE)
+#define PSM_HWNDTOINDEX (WM_USER + 129)
+#define PSM_INDEXTOHWND (WM_USER + 130)
+#define PSM_PAGETOINDEX (WM_USER + 131)
+#define PSM_INDEXTOPAGE (WM_USER + 132)
+#define PSM_IDTOINDEX (WM_USER + 133)
+#define PSM_INDEXTOID (WM_USER + 134)
+#define PSM_GETRESULT (WM_USER + 135)
+#define PSM_RECALCPAGESIZES (WM_USER + 136)
+
+#define PSWIZB_BACK 0x00000001
+#define PSWIZB_NEXT 0x00000002
+#define PSWIZB_FINISH 0x00000004
+#define PSWIZB_DISABLEDFINISH 0x00000008
+
+#define PSBTN_BACK 0
+#define PSBTN_NEXT 1
+#define PSBTN_FINISH 2
+#define PSBTN_OK 3
+#define PSBTN_APPLYNOW 4
+#define PSBTN_CANCEL 5
+#define PSBTN_HELP 6
+#define PSBTN_MAX 6
+
+#define ID_PSRESTARTWINDOWS 0x2
+#define ID_PSREBOOTSYSTEM (ID_PSRESTARTWINDOWS | 0x1)
+
+
+#define WIZ_CXDLG 276
+#define WIZ_CYDLG 140
+
+#define WIZ_CXBMP 80
+
+#define WIZ_BODYX 92
+#define WIZ_BODYCX 184
+
+#define PROP_SM_CXDLG 212
+#define PROP_SM_CYDLG 188
+
+#define PROP_MED_CXDLG 227
+#define PROP_MED_CYDLG 215
+
+#define PROP_LG_CXDLG 252
+#define PROP_LG_CYDLG 218
+
+/*
+ * Property sheet support (macros)
+ */
+
+#define PropSheet_SetCurSel(hDlg, hpage, index) \
+ SendMessageA(hDlg, PSM_SETCURSEL, (WPARAM)index, (LPARAM)hpage)
+
+#define PropSheet_RemovePage(hDlg, index, hpage) \
+ SNDMSG(hDlg, PSM_REMOVEPAGE, index, (LPARAM)hpage)
+
+#define PropSheet_AddPage(hDlg, hpage) \
+ SNDMSG(hDlg, PSM_ADDPAGE, 0, (LPARAM)hpage)
+
+#define PropSheet_Changed(hDlg, hwnd) \
+ SNDMSG(hDlg, PSM_CHANGED, (WPARAM)hwnd, 0)
+
+#define PropSheet_RestartWindows(hDlg) \
+ SNDMSG(hDlg, PSM_RESTARTWINDOWS, 0, 0)
+
+#define PropSheet_RebootSystem(hDlg) \
+ SNDMSG(hDlg, PSM_REBOOTSYSTEM, 0, 0)
+
+#define PropSheet_CancelToClose(hDlg) \
+ PostMessage(hDlg, PSM_CANCELTOCLOSE, 0, 0)
+
+#define PropSheet_QuerySiblings(hDlg, wParam, lParam) \
+ SNDMSG(hDlg, PSM_QUERYSIBLINGS, wParam, lParam)
+
+#define PropSheet_UnChanged(hDlg, hwnd) \
+ SNDMSG(hDlg, PSM_UNCHANGED, (WPARAM)hwnd, 0)
+
+#define PropSheet_Apply(hDlg) \
+ SNDMSG(hDlg, PSM_APPLY, 0, 0)
+
+#define PropSheet_SetTitle(hDlg, wStyle, lpszText)\
+ SNDMSG(hDlg, PSM_SETTITLE, wStyle, (LPARAM)(LPCTSTR)lpszText)
+
+#define PropSheet_SetWizButtons(hDlg, dwFlags) \
+ PostMessage(hDlg, PSM_SETWIZBUTTONS, 0, (LPARAM)dwFlags)
+
+#define PropSheet_PressButton(hDlg, iButton) \
+ PostMessage(hDlg, PSM_PRESSBUTTON, (WPARAM)iButton, 0)
+
+#define PropSheet_SetCurSelByID(hDlg, id) \
+ SNDMSG(hDlg, PSM_SETCURSELID, 0, (LPARAM)id)
+
+#define PropSheet_SetFinishText(hDlg, lpszText) \
+ SNDMSG(hDlg, PSM_SETFINISHTEXT, 0, (LPARAM)lpszText)
+
+#define PropSheet_GetTabControl(hDlg) \
+ (HWND)SNDMSG(hDlg, PSM_GETTABCONTROL, 0, 0)
+
+#define PropSheet_IsDialogMessage(hDlg, pMsg) \
+ (BOOL)SNDMSG(hDlg, PSM_ISDIALOGMESSAGE, 0, (LPARAM)pMsg)
+
+#define PropSheet_GetCurrentPageHwnd(hDlg) \
+ (HWND)SNDMSG(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0)
+
+#define PropSheet_InsertPage(hDlg, index, hpage) \
+ SNDMSG(hDlg, PSM_INSERTPAGE, (WPARAM)(index), (LPARAM)(hpage))
+
+#define PropSheet_SetHeaderTitle(hDlg, index, lpszText) \
+ SNDMSG(hDlg, PSM_SETHEADERTITLE, (WPARAM)(index), (LPARAM)(lpszText))
+
+#define PropSheet_SetHeaderSubTitle(hDlg, index, lpszText) \
+ SNDMSG(hDlg, PSM_SETHEADERSUBTITLE, (WPARAM)(index), (LPARAM)(lpszText))
+
+#define PropSheet_HwndToIndex(hDlg, hwnd) \
+ (int)SNDMSG(hDlg, PSM_HWNDTOINDEX, (WPARAM)(hwnd), 0)
+
+#define PropSheet_IndexToHwnd(hDlg, i) \
+ (HWND)SNDMSG(hDlg, PSM_INDEXTOHWND, (WPARAM)(i), 0)
+
+#define PropSheet_PageToIndex(hDlg, hpage) \
+ (int)SNDMSG(hDlg, PSM_PAGETOINDEX, 0, (LPARAM)(hpage))
+
+#define PropSheet_IndexToPage(hDlg, i) \
+ (HPROPSHEETPAGE)SNDMSG(hDlg, PSM_INDEXTOPAGE, (WPARAM)(i), 0)
+
+#define PropSheet_IdToIndex(hDlg, id) \
+ (int)SNDMSG(hDlg, PSM_IDTOINDEX, 0, (LPARAM)(id))
+
+#define PropSheet_IndexToId(hDlg, i) \
+ SNDMSG(hDlg, PSM_INDEXTOID, (WPARAM)(i), 0)
+
+#define PropSheet_GetResult(hDlg) \
+ SNDMSG(hDlg, PSM_GETRESULT, 0, 0)
+
+#define PropSheet_RecalcPageSizes(hDlg) \
+ SNDMSG(hDlg, PSM_RECALCPAGESIZES, 0, 0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_PRSHT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h
new file mode 100644
index 00000000..1971d250
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/psapi.h
@@ -0,0 +1,128 @@
+/*
+ * Declarations for PSAPI
+ *
+ * Copyright (C) 1998 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_PSAPI_H
+#define __WINE_PSAPI_H
+
+typedef struct _MODULEINFO {
+ LPVOID lpBaseOfDll;
+ DWORD SizeOfImage;
+ LPVOID EntryPoint;
+} MODULEINFO, *LPMODULEINFO;
+
+typedef struct _PROCESS_MEMORY_COUNTERS {
+ DWORD cb;
+ DWORD PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+} PROCESS_MEMORY_COUNTERS;
+typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
+
+typedef struct _PSAPI_WS_WATCH_INFORMATION {
+ LPVOID FaultingPc;
+ LPVOID FaultingVa;
+} PSAPI_WS_WATCH_INFORMATION, *PPSAPI_WS_WATCH_INFORMATION;
+
+typedef struct _PERFORMANCE_INFORMATION {
+ DWORD cb;
+ SIZE_T CommitTotal;
+ SIZE_T CommitLimit;
+ SIZE_T CommitPeak;
+ SIZE_T PhysicalTotal;
+ SIZE_T PhysicalAvailable;
+ SIZE_T SystemCache;
+ SIZE_T KernelTotal;
+ SIZE_T KernelPaged;
+ SIZE_T KernelNonpaged;
+ SIZE_T PageSize;
+ DWORD HandleCount;
+ DWORD ProcessCount;
+ DWORD ThreadCount;
+} PERFORMANCE_INFORMATION, *PPERFORMANCE_INFORMATION;
+
+typedef struct _ENUM_PAGE_FILE_INFORMATION {
+ DWORD cb;
+ DWORD Reserved;
+ SIZE_T TotalSize;
+ SIZE_T TotalInUse;
+ SIZE_T PeakUsage;
+} ENUM_PAGE_FILE_INFORMATION, *PENUM_PAGE_FILE_INFORMATION;
+
+typedef BOOL (*PENUM_PAGE_FILE_CALLBACKA) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR);
+typedef BOOL (*PENUM_PAGE_FILE_CALLBACKW) (LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR);
+#define PENUM_PAGE_FILE_CALLBACK WINELIB_NAME_AW(PENUM_PAGE_FILE_CALLBACK)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI EnumProcesses(DWORD*, DWORD, DWORD*);
+BOOL WINAPI EnumProcessModules(HANDLE, HMODULE*, DWORD, LPDWORD);
+DWORD WINAPI GetModuleBaseNameA(HANDLE, HMODULE, LPSTR, DWORD);
+DWORD WINAPI GetModuleBaseNameW(HANDLE, HMODULE, LPWSTR, DWORD);
+#define GetModuleBaseName WINELIB_NAME_AW(GetModuleBaseName)
+DWORD WINAPI GetModuleFileNameExA(HANDLE, HMODULE, LPSTR, DWORD);
+DWORD WINAPI GetModuleFileNameExW(HANDLE, HMODULE, LPWSTR, DWORD);
+#define GetModuleFileNameEx WINELIB_NAME_AW(GetModuleFileNameEx)
+BOOL WINAPI GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD);
+BOOL WINAPI EmptyWorkingSet(HANDLE);
+BOOL WINAPI QueryWorkingSet(HANDLE, PVOID, DWORD);
+BOOL WINAPI QueryWorkingSetEx(HANDLE, PVOID, DWORD);
+BOOL WINAPI InitializeProcessForWsWatch(HANDLE);
+BOOL WINAPI GetWsChanges(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD);
+DWORD WINAPI GetMappedFileNameW(HANDLE, LPVOID, LPWSTR, DWORD);
+DWORD WINAPI GetMappedFileNameA(HANDLE, LPVOID, LPSTR, DWORD);
+#define GetMappedFileName WINELIB_NAME_AW(GetMappedFileName)
+BOOL WINAPI EnumDeviceDrivers(LPVOID*, DWORD, LPDWORD);
+DWORD WINAPI GetDeviceDriverBaseNameA(LPVOID, LPSTR, DWORD);
+DWORD WINAPI GetDeviceDriverBaseNameW(LPVOID, LPWSTR, DWORD);
+#define GetDeviceDriverBaseName WINELIB_NAME_AW(GetDeviceDriverBaseName)
+DWORD WINAPI GetDeviceDriverFileNameA(LPVOID, LPSTR, DWORD);
+DWORD WINAPI GetDeviceDriverFileNameW(LPVOID, LPWSTR, DWORD);
+#define GetDeviceDriverFileName WINELIB_NAME_AW(GetDeviceDriverFileName)
+BOOL WINAPI GetProcessMemoryInfo(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD);
+BOOL WINAPI GetPerformanceInfo(PPERFORMANCE_INFORMATION, DWORD);
+BOOL WINAPI EnumPageFilesA(PENUM_PAGE_FILE_CALLBACKA, LPVOID);
+BOOL WINAPI EnumPageFilesW(PENUM_PAGE_FILE_CALLBACKW, LPVOID);
+#define EnumPageFiles WINELIB_NAME_AW(EnumPageFiles)
+DWORD WINAPI GetProcessImageFileNameA(HANDLE, LPSTR, DWORD);
+DWORD WINAPI GetProcessImageFileNameW(HANDLE, LPWSTR, DWORD);
+#define GetProcessImageFileName WINELIB_NAME_AW(GetProcessImageFileName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_PSAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h
new file mode 100644
index 00000000..e826de24
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack1.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+ /* Depth > 15 */
+# error "Alignment nesting > 15 is not supported"
+
+#else
+
+# if !defined(__WINE_PSHPACK_H)
+# define __WINE_PSHPACK_H 1
+ /* Depth == 1 */
+# elif !defined(__WINE_PSHPACK_H2)
+# define __WINE_PSHPACK_H2 1
+ /* Depth == 2 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H3)
+# define __WINE_PSHPACK_H3 1
+ /* Depth == 3 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H4)
+# define __WINE_PSHPACK_H4 1
+ /* Depth == 4 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H5)
+# define __WINE_PSHPACK_H5 1
+ /* Depth == 5 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H6)
+# define __WINE_PSHPACK_H6 1
+ /* Depth == 6 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H7)
+# define __WINE_PSHPACK_H7 1
+ /* Depth == 7 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H8)
+# define __WINE_PSHPACK_H8 1
+ /* Depth == 8 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H9)
+# define __WINE_PSHPACK_H9 1
+ /* Depth == 9 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H10)
+# define __WINE_PSHPACK_H10 1
+ /* Depth == 10 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H11)
+# define __WINE_PSHPACK_H11 1
+ /* Depth == 11 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H12)
+# define __WINE_PSHPACK_H12 1
+ /* Depth == 12 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H13)
+# define __WINE_PSHPACK_H13 1
+ /* Depth == 13 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H14)
+# define __WINE_PSHPACK_H14 1
+ /* Depth == 14 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H15)
+# define __WINE_PSHPACK_H15 1
+ /* Depth == 15 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# endif
+
+# if defined(_MSC_VER) && (_MSC_VER >= 800)
+# pragma warning(disable:4103)
+# endif
+# if defined(__clang_major__) && defined(__has_warning)
+# if __has_warning("-Wpragma-pack")
+# pragma clang diagnostic ignored "-Wpragma-pack"
+# endif
+# endif
+
+# pragma pack(1)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h
new file mode 100644
index 00000000..0bf8787d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack2.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+ /* Depth > 15 */
+# error "Alignment nesting > 15 is not supported"
+
+#else
+
+# if !defined(__WINE_PSHPACK_H)
+# define __WINE_PSHPACK_H 2
+ /* Depth == 1 */
+# elif !defined(__WINE_PSHPACK_H2)
+# define __WINE_PSHPACK_H2 2
+ /* Depth == 2 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H3)
+# define __WINE_PSHPACK_H3 2
+ /* Depth == 3 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H4)
+# define __WINE_PSHPACK_H4 2
+ /* Depth == 4 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H5)
+# define __WINE_PSHPACK_H5 2
+ /* Depth == 5 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H6)
+# define __WINE_PSHPACK_H6 2
+ /* Depth == 6 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H7)
+# define __WINE_PSHPACK_H7 2
+ /* Depth == 7 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H8)
+# define __WINE_PSHPACK_H8 2
+ /* Depth == 8 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H9)
+# define __WINE_PSHPACK_H9 2
+ /* Depth == 9 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H10)
+# define __WINE_PSHPACK_H10 2
+ /* Depth == 10 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H11)
+# define __WINE_PSHPACK_H11 2
+ /* Depth == 11 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H12)
+# define __WINE_PSHPACK_H12 2
+ /* Depth == 12 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H13)
+# define __WINE_PSHPACK_H13 2
+ /* Depth == 13 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H14)
+# define __WINE_PSHPACK_H14 2
+ /* Depth == 14 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H15)
+# define __WINE_PSHPACK_H15 2
+ /* Depth == 15 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# endif
+
+# if defined(_MSC_VER) && (_MSC_VER >= 800)
+# pragma warning(disable:4103)
+# endif
+# if defined(__clang_major__) && defined(__has_warning)
+# if __has_warning("-Wpragma-pack")
+# pragma clang diagnostic ignored "-Wpragma-pack"
+# endif
+# endif
+
+# pragma pack(2)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h
new file mode 100644
index 00000000..1d542e8c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack4.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+ /* Depth > 15 */
+# error "Alignment nesting > 15 is not supported"
+
+#else
+
+# if !defined(__WINE_PSHPACK_H)
+# define __WINE_PSHPACK_H 4
+ /* Depth == 1 */
+# elif !defined(__WINE_PSHPACK_H2)
+# define __WINE_PSHPACK_H2 4
+ /* Depth == 2 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H3)
+# define __WINE_PSHPACK_H3 4
+ /* Depth == 3 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H4)
+# define __WINE_PSHPACK_H4 4
+ /* Depth == 4 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H5)
+# define __WINE_PSHPACK_H5 4
+ /* Depth == 5 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H6)
+# define __WINE_PSHPACK_H6 4
+ /* Depth == 6 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H7)
+# define __WINE_PSHPACK_H7 4
+ /* Depth == 7 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H8)
+# define __WINE_PSHPACK_H8 4
+ /* Depth == 8 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H9)
+# define __WINE_PSHPACK_H9 4
+ /* Depth == 9 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H10)
+# define __WINE_PSHPACK_H10 4
+ /* Depth == 10 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H11)
+# define __WINE_PSHPACK_H11 4
+ /* Depth == 11 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H12)
+# define __WINE_PSHPACK_H12 4
+ /* Depth == 12 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H13)
+# define __WINE_PSHPACK_H13 4
+ /* Depth == 13 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H14)
+# define __WINE_PSHPACK_H14 4
+ /* Depth == 14 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H15)
+# define __WINE_PSHPACK_H15 4
+ /* Depth == 15 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# endif
+
+# if defined(_MSC_VER) && (_MSC_VER >= 800)
+# pragma warning(disable:4103)
+# endif
+# if defined(__clang_major__) && defined(__has_warning)
+# if __has_warning("-Wpragma-pack")
+# pragma clang diagnostic ignored "-Wpragma-pack"
+# endif
+# endif
+
+# pragma pack(4)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h
new file mode 100644
index 00000000..3d45fbb5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pshpack8.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#if defined(__WINE_PSHPACK_H15)
+
+ /* Depth > 15 */
+# error "Alignment nesting > 15 is not supported"
+
+#else
+
+# if !defined(__WINE_PSHPACK_H)
+# define __WINE_PSHPACK_H 8
+ /* Depth == 1 */
+# elif !defined(__WINE_PSHPACK_H2)
+# define __WINE_PSHPACK_H2 8
+ /* Depth == 2 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H3)
+# define __WINE_PSHPACK_H3 8
+ /* Depth == 3 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H4)
+# define __WINE_PSHPACK_H4 8
+ /* Depth == 4 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H5)
+# define __WINE_PSHPACK_H5 8
+ /* Depth == 5 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H6)
+# define __WINE_PSHPACK_H6 8
+ /* Depth == 6 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H7)
+# define __WINE_PSHPACK_H7 8
+ /* Depth == 7 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H8)
+# define __WINE_PSHPACK_H8 8
+ /* Depth == 8 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H9)
+# define __WINE_PSHPACK_H9 8
+ /* Depth == 9 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H10)
+# define __WINE_PSHPACK_H10 8
+ /* Depth == 10 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H11)
+# define __WINE_PSHPACK_H11 8
+ /* Depth == 11 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H12)
+# define __WINE_PSHPACK_H12 8
+ /* Depth == 12 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H13)
+# define __WINE_PSHPACK_H13 8
+ /* Depth == 13 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H14)
+# define __WINE_PSHPACK_H14 8
+ /* Depth == 14 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# elif !defined(__WINE_PSHPACK_H15)
+# define __WINE_PSHPACK_H15 8
+ /* Depth == 15 */
+# define __WINE_INTERNAL_POPPACK
+# include <poppack.h>
+# endif
+
+# if defined(_MSC_VER) && (_MSC_VER >= 800)
+# pragma warning(disable:4103)
+# endif
+# if defined(__clang_major__) && defined(__has_warning)
+# if __has_warning("-Wpragma-pack")
+# pragma clang diagnostic ignored "-Wpragma-pack"
+# endif
+# endif
+
+# pragma pack(8)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl
new file mode 100644
index 00000000..3d1b3e12
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/pstore.idl
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "oaidl.idl";
+
+cpp_quote("#define PST_KEY_CURRENT_USER 0")
+cpp_quote("#define PST_KEY_LOCAL_MACHINE 1")
+
+cpp_quote("#define PST_E_OK 0x00000000L")
+cpp_quote("#define PST_E_TYPE_EXISTS 0x800C0004L")
+
+cpp_quote("#define PST_AUTHENTICODE 1")
+cpp_quote("#define PST_BINARY_CHECK 2")
+cpp_quote("#define PST_SECURITY_DESCRIPTOR 4")
+
+typedef DWORD PST_ACCESSMODE;
+typedef DWORD PST_ACCESSCLAUSETYPE;
+typedef DWORD PST_KEY;
+typedef DWORD PST_PROVIDERCAPABILITIES;
+typedef GUID PST_PROVIDERID, *PPST_PROVIDERID;
+
+/*****************************************************************************
+ * PSTOREC library
+ */
+[
+ uuid(5a6f1ebd-2db1-11d0-8c39-00c04fd9126b),
+ version(1.0),
+ helpstring("PStore 1.0 Type Library")
+]
+library PSTORECLib
+{
+ importlib("stdole2.tlb");
+
+typedef struct _PST_PROVIDERINFO
+{
+ DWORD cbSize;
+ PST_PROVIDERID ID;
+ PST_PROVIDERCAPABILITIES Capabilities;
+ LPWSTR szProviderName;
+} PST_PROVIDERINFO, *PPST_PROVIDERINFO;
+
+typedef struct _PST_PROMPTINFO
+{
+ DWORD cbSize;
+ DWORD dwPromptFlags;
+ HWND hwndApp;
+ LPCWSTR szPrompt;
+} PST_PROMPTINFO, *PPST_PROMPTINFO;
+
+typedef struct _PST_ACCESSCLAUSE {
+ DWORD cbSize;
+ PST_ACCESSCLAUSETYPE ClauseType;
+ DWORD cbClauseData;
+ BYTE* pbClauseData;
+} PST_ACCESSCLAUSE, *PPST_ACCESSCLAUSE;
+
+typedef struct _PST_ACCESSRULE {
+ DWORD cbSize;
+ PST_ACCESSMODE AccessModeFlags;
+ DWORD cClauses;
+ PST_ACCESSCLAUSE* rgClauses;
+} PST_ACCESSRULE, *PPST_ACCESSRULE;
+
+typedef struct _PST_ACCESSRULESET {
+ DWORD cbSize;
+ DWORD cClause;
+ PST_ACCESSRULE* rgRules;
+} PST_ACCESSRULESET, *PPST_ACCESSRULESET;
+
+typedef struct _PST_TYPEINFO {
+ DWORD cbSize;
+ LPWSTR szDisplayName;
+} PST_TYPEINFO, *PPST_TYPEINFO;
+
+[
+ object,
+ uuid(5a6f1ec1-2db1-11d0-8c39-00c04fd9126b),
+ pointer_default(unique)
+]
+interface IEnumPStoreItems : IUnknown
+{
+ HRESULT Clone(
+ [in] IEnumPStoreItems** ppenum );
+
+ HRESULT Next(
+ [in] DWORD celt,
+ [in] LPWSTR* rgelt,
+ [in] DWORD* pceltFetched );
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] DWORD celt );
+}
+
+[
+ object,
+ uuid(789c1cbf-31ee-11d0-8c39-00c04fd9126b),
+ pointer_default(unique)
+]
+interface IEnumPStoreTypes : IUnknown
+{
+ HRESULT Clone(
+ [in] IEnumPStoreTypes** ppenum );
+
+ HRESULT Next(
+ [in] DWORD celt,
+ [in] LPWSTR* rgelt,
+ [in] DWORD* pceltFetched );
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] DWORD celt );
+}
+
+/*****************************************************************************
+ * IPStore interface
+ */
+[
+ object,
+ uuid(5a6f1ec0-2db1-11d0-8c39-00c04fd9126b),
+ pointer_default(unique)
+]
+interface IPStore : IUnknown
+{
+ HRESULT GetInfo(
+ [in] PPST_PROVIDERINFO* ppProperties );
+
+ HRESULT GetProvParam(
+ [in] DWORD dwParam,
+ [out] DWORD* pcbData,
+ [out] BYTE** ppbData,
+ [in] DWORD dwFlags );
+
+ HRESULT SetProvParam(
+ [in] DWORD dwParam,
+ [in] DWORD cbData,
+ [in] BYTE* pbData,
+ [in] DWORD* dwFlags );
+
+ HRESULT CreateType(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] PPST_TYPEINFO pInfo,
+ [in] DWORD dwFlags );
+
+ HRESULT GetTypeInfo(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] PPST_TYPEINFO** ppInfo,
+ [in] DWORD dwFlags );
+
+ HRESULT DeleteType(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] DWORD dwFlags );
+
+ HRESULT CreateSubtype(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] const GUID* pSubtype,
+ [in] PPST_TYPEINFO pInfo,
+ [in] PPST_ACCESSRULESET pRules,
+ [in] DWORD dwFlags );
+
+ HRESULT GetSubtypeInfo(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] const GUID* pSubtype,
+ [in] PPST_TYPEINFO** ppInfo,
+ [in] DWORD dwFlags );
+
+ HRESULT DeleteSubtype(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] const GUID* pSubtype,
+ [in] DWORD dwFlags );
+
+ HRESULT ReadAccessRuleset(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] const GUID* pSubtype,
+ [in] PPST_TYPEINFO pInfo,
+ [in] PPST_ACCESSRULESET** ppRules,
+ [in] DWORD dwFlags );
+
+ HRESULT WriteAccessRuleset(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] const GUID* pSubtype,
+ [in] PPST_TYPEINFO pInfo,
+ [in] PPST_ACCESSRULESET pRules,
+ [in] DWORD dwFlags );
+
+ HRESULT EnumTypes(
+ [in] PST_KEY Key,
+ [in] DWORD dwFlags,
+ [in] IEnumPStoreTypes** ppenum );
+
+ HRESULT EnumSubtypes(
+ [in] PST_KEY Key,
+ [in] const GUID* pType,
+ [in] DWORD dwFlags,
+ [in] IEnumPStoreTypes** ppenum );
+
+ HRESULT DeleteItem(
+ [in] PST_KEY Key,
+ [in] const GUID* pItemType,
+ [in] const GUID* pItemSubType,
+ [in] LPCWSTR szItemName,
+ [in] PPST_PROMPTINFO pPromptInfo,
+ [in] DWORD dwFlags );
+
+ HRESULT ReadItem(
+ [in] PST_KEY Key,
+ [in] const GUID* pItemType,
+ [in] const GUID* pItemSubtype,
+ [in] LPCWSTR szItemName,
+ [in] DWORD *cbData,
+ [in] BYTE** pbData,
+ [in] PPST_PROMPTINFO pPromptInfo,
+ [in] DWORD dwFlags );
+
+ HRESULT WriteItem(
+ [in] PST_KEY Key,
+ [in] const GUID* pItemType,
+ [in] const GUID* pItemSubtype,
+ [in] LPCWSTR szItemName,
+ [in] DWORD cbData,
+ [in,size_is(cbData)] BYTE *ppbData,
+ [in] PPST_PROMPTINFO pPromptInfo,
+ [in] DWORD dwDefaultConfirmationStyle,
+ [in] DWORD dwFlags);
+
+ HRESULT OpenItem(
+ [in] PST_KEY Key,
+ [in] const GUID* pItemType,
+ [in] const GUID* pItemSubtype,
+ [in] LPCWSTR szItemName,
+ [in] PST_ACCESSMODE ModeFlags,
+ [in] PPST_PROMPTINFO pProomptInfo,
+ [in] DWORD dwFlags );
+
+ HRESULT CloseItem(
+ [in] PST_KEY Key,
+ [in] const GUID* pItemType,
+ [in] const GUID* pItemSubtype,
+ [in] LPCWSTR* szItemName,
+ [in] DWORD dwFlags );
+
+ HRESULT EnumItems(
+ [in] PST_KEY Key,
+ [in] const GUID* pItemType,
+ [in] const GUID* pItemSubtype,
+ [in] DWORD dwFlags,
+ [in] IEnumPStoreItems** ppenum );
+}
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl
new file mode 100644
index 00000000..4064afff
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/qedit.idl
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2008 Google (Lei Zhang)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+/* import "dxtrans.idl"; */
+import "amstream.idl";
+import "msxml.idl";
+
+[
+ object,
+ uuid(0579154A-2B53-4994-B0D0-E773148EFF85),
+ local,
+ pointer_default(unique)
+]
+interface ISampleGrabberCB : IUnknown
+{
+ HRESULT SampleCB(
+ double SampleTime,
+ IMediaSample * pSample
+ );
+ HRESULT BufferCB(
+ double SampleTime,
+ BYTE * pBuffer,
+ LONG BufferLen
+ );
+}
+
+[
+ object,
+ uuid(6B652FFF-11FE-4fce-92AD-0266B5D7C78F),
+ local,
+ pointer_default(unique)
+]
+interface ISampleGrabber: IUnknown
+{
+ HRESULT SetOneShot(
+ BOOL OneShot
+ );
+
+ HRESULT SetMediaType(
+ const AM_MEDIA_TYPE * pType
+ );
+
+ HRESULT GetConnectedMediaType(
+ AM_MEDIA_TYPE * pType
+ );
+
+ HRESULT SetBufferSamples(
+ BOOL BufferThem
+ );
+
+ HRESULT GetCurrentBuffer(
+ [in,out] LONG * pBufferSize,
+ [out] LONG * pBuffer
+ );
+
+ HRESULT GetCurrentSample(
+ [out] IMediaSample ** ppSample
+ );
+
+ HRESULT SetCallback(
+ ISampleGrabberCB * pCallback,
+ LONG WhichMethodToCallback
+ );
+};
+
+[
+ object,
+ uuid(65bd0710-24d2-4FF7-9324-ed2e5d3abafa),
+ pointer_default(unique)
+]
+interface IMediaDet : IUnknown
+{
+ HRESULT get_Filter(
+ [out] IUnknown* *pVal
+ );
+
+ HRESULT put_Filter(
+ IUnknown* newVal
+ );
+
+ HRESULT get_OutputStreams(
+ [out] LONG *pVal
+ );
+
+ HRESULT get_CurrentStream(
+ [out] LONG *pVal
+ );
+
+ HRESULT put_CurrentStream(
+ LONG newVal
+ );
+
+ HRESULT get_StreamType(
+ [out] GUID *pVal
+ );
+
+ HRESULT get_StreamTypeB(
+ [out] BSTR *pVal
+ );
+
+ HRESULT get_StreamLength(
+ [out] double *pVal
+ );
+
+ HRESULT get_Filename(
+ [out] BSTR *pVal
+ );
+
+ HRESULT put_Filename(
+ BSTR newVal
+ );
+
+ HRESULT GetBitmapBits(
+ double StreamTime,
+ LONG * pBufferSize,
+ char * pBuffer,
+ LONG Width,
+ LONG Height
+ );
+
+ HRESULT WriteBitmapBits(
+ double StreamTime,
+ LONG Width,
+ LONG Height,
+ BSTR Filename
+ );
+
+ HRESULT get_StreamMediaType(
+ [out] AM_MEDIA_TYPE * pVal
+ );
+
+ HRESULT GetSampleGrabber(
+ [out] ISampleGrabber ** ppVal
+ );
+
+ HRESULT get_FrameRate(
+ [out] double *pVal
+ );
+
+ HRESULT EnterBitmapGrabMode(
+ double SeekTime
+ );
+};
+
+[
+ uuid(65BD0711-24D2-4ff7-9324-ED2E5D3ABAFA),
+]
+coclass MediaDet
+{
+ [default] interface IMediaDet;
+};
+
+enum
+{
+ E_NOTINTREE = 0x80040400,
+ E_RENDER_ENGINE_IS_BROKEN = 0x80040401,
+ E_MUST_INIT_RENDERER = 0x80040402,
+ E_NOTDETERMINED = 0x80040403,
+ E_NO_TIMELINE = 0x80040404,
+ S_WARN_OUTPUTRESET = 40404
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h
new file mode 100644
index 00000000..4cd90a34
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ras.h
@@ -0,0 +1,526 @@
+/*
+ * Copyright (C) 1998 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RAS_H
+#define __WINE_RAS_H
+
+#include <lmcons.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <pshpack4.h>
+#include <inaddr.h>
+#include <in6addr.h>
+
+#define RAS_MaxCallbackNumber RAS_MaxPhoneNumber
+#define RAS_MaxDeviceName 128
+#define RAS_MaxDeviceType 16
+#define RAS_MaxEntryName 256
+#define RAS_MaxPhoneNumber 128
+#define RAS_MaxAreaCode 10
+#define RAS_MaxPadType 32
+#define RAS_MaxX25Address 200
+#define RAS_MaxFacilities 200
+#define RAS_MaxUserData 200
+#define RAS_MaxDnsSuffix 256
+
+/* szDeviceType strings for RASDEVINFO */
+#define RASDT_Direct "direct"
+#define RASDT_Modem "modem"
+#define RASDT_Isdn "isdn"
+#define RASDT_X25 "x25"
+#define RASDT_Vpn "vpn"
+#define RASDT_Pad "pad"
+#define RASDT_Generic "GENERIC"
+#define RASDT_Serial "SERIAL"
+#define RASDT_FrameRelay "FRAMERELAY"
+#define RASDT_Atm "ATM"
+#define RASDT_Sonet "SONET"
+#define RASDT_SW56 "SW56"
+#define RASDT_Irda "IRDA"
+#define RASDT_Parallel "PARALLEL"
+#define RASDT_PPPoE "PPPoE"
+
+typedef struct tagRASDEVINFOA {
+ DWORD dwSize;
+ CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+} RASDEVINFOA, *LPRASDEVINFOA;
+
+typedef struct tagRASDEVINFOW {
+ DWORD dwSize;
+ WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+} RASDEVINFOW, *LPRASDEVINFOW;
+
+DECL_WINELIB_TYPE_AW(RASDEVINFO)
+DECL_WINELIB_TYPE_AW(LPRASDEVINFO)
+
+DECLARE_HANDLE(HRASCONN);
+typedef HRASCONN* LPHRASCONN;
+
+typedef struct tagRASCONNA {
+ DWORD dwSize;
+ HRASCONN hRasConn;
+ CHAR szEntryName[ RAS_MaxEntryName + 1 ];
+ CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+ CHAR szPhonebook[ MAX_PATH ];
+ DWORD dwSubEntry;
+ GUID guidEntry;
+ DWORD dwFlags;
+ LUID luid;
+ GUID guidCorrelationId;
+} RASCONNA,*LPRASCONNA;
+
+typedef struct tagRASCONNW {
+ DWORD dwSize;
+ HRASCONN hRasConn;
+ WCHAR szEntryName[ RAS_MaxEntryName + 1 ];
+ WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+ WCHAR szPhonebook[ MAX_PATH ];
+ DWORD dwSubEntry;
+ GUID guidEntry;
+ DWORD dwFlags;
+ LUID luid;
+ GUID guidCorrelationId;
+} RASCONNW,*LPRASCONNW;
+
+DECL_WINELIB_TYPE_AW(RASCONN)
+DECL_WINELIB_TYPE_AW(LPRASCONN)
+
+typedef struct tagRASENTRYNAMEA {
+ DWORD dwSize;
+ CHAR szEntryName[ RAS_MaxEntryName + 1 ];
+} RASENTRYNAMEA, *LPRASENTRYNAMEA;
+
+typedef struct tagRASENTRYNAMEW {
+ DWORD dwSize;
+ WCHAR szEntryName[ RAS_MaxEntryName + 1 ];
+} RASENTRYNAMEW, *LPRASENTRYNAMEW;
+
+DECL_WINELIB_TYPE_AW(RASENTRYNAME)
+DECL_WINELIB_TYPE_AW(LPRASENTRYNAME)
+
+typedef struct tagRASDIALPARAMSA {
+ DWORD dwSize;
+ CHAR szEntryName[ RAS_MaxEntryName + 1 ];
+ CHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+ CHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
+ CHAR szUserName[ UNLEN + 1 ];
+ CHAR szPassword[ PWLEN + 1 ];
+ CHAR szDomain[ DNLEN + 1 ];
+ DWORD dwSubEntry;
+ DWORD dwCallbackId;
+} RASDIALPARAMSA, *LPRASDIALPARAMSA;
+
+typedef struct tagRASDIALPARAMSW {
+ DWORD dwSize;
+ WCHAR szEntryName[ RAS_MaxEntryName + 1 ];
+ WCHAR szPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+ WCHAR szCallbackNumber[ RAS_MaxCallbackNumber + 1 ];
+ WCHAR szUserName[ UNLEN + 1 ];
+ WCHAR szPassword[ PWLEN + 1 ];
+ WCHAR szDomain[ DNLEN + 1 ];
+ DWORD dwSubEntry;
+ DWORD dwCallbackId;
+} RASDIALPARAMSW, *LPRASDIALPARAMSW;
+
+DECL_WINELIB_TYPE_AW(RASDIALPARAMS)
+DECL_WINELIB_TYPE_AW(LPRASDIALPARAMS)
+
+typedef struct tagRASIPADDR {
+ BYTE classA,classB,classC,classD;
+} RASIPADDR;
+
+#define RASEO_UseCountryAndAreaCodes 0x0001
+#define RASEO_SpecificIpAddr 0x0002
+#define RASEO_SpecificNameServers 0x0004
+#define RASEO_IpHeaderCompression 0x0008
+#define RASEO_RemoteDefaultGateway 0x0010
+#define RASEO_DisableLcpExtensions 0x0020
+#define RASEO_TerminalBeforeDial 0x0040
+#define RASEO_TerminalAfterDial 0x0080
+#define RASEO_ModemLights 0x0100
+#define RASEO_SwCompression 0x0200
+#define RASEO_RequireEncryptedPw 0x0400
+#define RASEO_RequireMsEncryptedPw 0x0800
+#define RASEO_RequireDataEncryption 0x1000
+#define RASEO_NetworkLogon 0x2000
+#define RASEO_UseLogonCredentials 0x4000
+#define RASEO_PromoteAlternates 0x8000
+typedef struct tagRASENTRYA {
+ DWORD dwSize;
+ DWORD dwfOptions;
+
+ /* Location */
+
+ DWORD dwCountryID;
+ DWORD dwCountryCode;
+ CHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
+ CHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+ DWORD dwAlternateOffset;
+
+ /* IP related stuff */
+
+ RASIPADDR ipaddr;
+ RASIPADDR ipaddrDns;
+ RASIPADDR ipaddrDnsAlt;
+ RASIPADDR ipaddrWins;
+ RASIPADDR ipaddrWinsAlt;
+
+ /* Framing (for ppp/isdn etc...) */
+
+ DWORD dwFrameSize;
+ DWORD dwfNetProtocols;
+ DWORD dwFramingProtocol;
+
+ CHAR szScript[ MAX_PATH ];
+
+ CHAR szAutodialDll[ MAX_PATH ];
+ CHAR szAutodialFunc[ MAX_PATH ];
+
+ CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+
+ /* x25 only */
+
+ CHAR szX25PadType[ RAS_MaxPadType + 1 ];
+ CHAR szX25Address[ RAS_MaxX25Address + 1 ];
+ CHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
+ CHAR szX25UserData[ RAS_MaxUserData + 1 ];
+ DWORD dwChannels;
+
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+
+ /* Multilink and BAP */
+
+ DWORD dwSubEntries;
+ DWORD dwDialMode;
+ DWORD dwDialExtraPercent;
+ DWORD dwDialExtraSampleSeconds;
+ DWORD dwHangUpExtraPercent;
+ DWORD dwHangUpExtraSampleSeconds;
+
+ /* Idle time out */
+ DWORD dwIdleDisconnectSeconds;
+
+ DWORD dwType; /* entry type */
+ DWORD dwEncryptionType; /* type of encryption to use */
+ DWORD dwCustomAuthKey; /* authentication key for EAP */
+ GUID guidId; /* guid that represents the phone-book entry */
+ CHAR szCustomDialDll[MAX_PATH]; /* DLL for custom dialing */
+ DWORD dwVpnStrategy; /* specifies type of VPN protocol */
+
+ DWORD dwfOptions2;
+ DWORD dwfOptions3;
+ CHAR szDnsSuffix[RAS_MaxDnsSuffix];
+ DWORD dwTcpWindowSize;
+ CHAR szPrerequisitePbk[MAX_PATH];
+ CHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
+ DWORD dwRedialCount;
+ DWORD dwRedialPause;
+} RASENTRYA, *LPRASENTRYA;
+
+typedef struct tagRASENTRYW {
+ DWORD dwSize;
+ DWORD dwfOptions;
+
+ /* Location */
+
+ DWORD dwCountryID;
+ DWORD dwCountryCode;
+ WCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
+ WCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
+ DWORD dwAlternateOffset;
+
+ /* IP related stuff */
+
+ RASIPADDR ipaddr;
+ RASIPADDR ipaddrDns;
+ RASIPADDR ipaddrDnsAlt;
+ RASIPADDR ipaddrWins;
+ RASIPADDR ipaddrWinsAlt;
+
+ /* Framing (for ppp/isdn etc...) */
+
+ DWORD dwFrameSize;
+ DWORD dwfNetProtocols;
+ DWORD dwFramingProtocol;
+
+ WCHAR szScript[ MAX_PATH ];
+
+ WCHAR szAutodialDll[ MAX_PATH ];
+ WCHAR szAutodialFunc[ MAX_PATH ];
+
+ WCHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ WCHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+
+ /* x25 only */
+
+ WCHAR szX25PadType[ RAS_MaxPadType + 1 ];
+ WCHAR szX25Address[ RAS_MaxX25Address + 1 ];
+ WCHAR szX25Facilities[ RAS_MaxFacilities + 1 ];
+ WCHAR szX25UserData[ RAS_MaxUserData + 1 ];
+ DWORD dwChannels;
+
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+
+ /* Multilink and BAP */
+
+ DWORD dwSubEntries;
+ DWORD dwDialMode;
+ DWORD dwDialExtraPercent;
+ DWORD dwDialExtraSampleSeconds;
+ DWORD dwHangUpExtraPercent;
+ DWORD dwHangUpExtraSampleSeconds;
+
+ /* Idle time out */
+ DWORD dwIdleDisconnectSeconds;
+
+ DWORD dwType; /* entry type */
+ DWORD dwEncryptionType; /* type of encryption to use */
+ DWORD dwCustomAuthKey; /* authentication key for EAP */
+ GUID guidId; /* guid that represents the phone-book entry */
+ WCHAR szCustomDialDll[MAX_PATH]; /* DLL for custom dialing */
+ DWORD dwVpnStrategy; /* specifies type of VPN protocol */
+
+ DWORD dwfOptions2;
+ DWORD dwfOptions3;
+ WCHAR szDnsSuffix[RAS_MaxDnsSuffix];
+ DWORD dwTcpWindowSize;
+ WCHAR szPrerequisitePbk[MAX_PATH];
+ WCHAR szPrerequisiteEntry[RAS_MaxEntryName + 1];
+ DWORD dwRedialCount;
+ DWORD dwRedialPause;
+} RASENTRYW, *LPRASENTRYW;
+
+DECL_WINELIB_TYPE_AW(RASENTRY)
+
+#define RASCS_PAUSED 0x1000
+#define RASCS_DONE 0x2000
+typedef enum tagRASCONNSTATE
+{
+ RASCS_OpenPort = 0,
+ RASCS_PortOpened,
+ RASCS_ConnectDevice,
+ RASCS_DeviceConnected,
+ RASCS_AllDevicesConnected,
+ RASCS_Authenticate,
+ RASCS_AuthNotify,
+ RASCS_AuthRetry,
+ RASCS_AuthCallback,
+ RASCS_AuthChangePassword,
+ RASCS_AuthProject,
+ RASCS_AuthLinkSpeed,
+ RASCS_AuthAck,
+ RASCS_ReAuthenticate,
+ RASCS_Authenticated,
+ RASCS_PrepareForCallback,
+ RASCS_WaitForModemReset,
+ RASCS_WaitForCallback,
+ RASCS_Projected,
+ RASCS_StartAuthentication,
+ RASCS_CallbackComplete,
+ RASCS_LogonNetwork,
+ RASCS_SubEntryConnected,
+ RASCS_SubEntryDisconnected,
+ RASCS_Interactive = RASCS_PAUSED,
+ RASCS_RetryAuthentication,
+ RASCS_CallbackSetByCaller,
+ RASCS_PasswordExpired,
+ RASCS_Connected = RASCS_DONE,
+ RASCS_Disconnected
+} RASCONNSTATE, *LPRASCONNSTATE;
+
+typedef struct tagRASCONNSTATUSA
+{
+ DWORD dwSize;
+ RASCONNSTATE rasconnstate;
+ DWORD dwError;
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUSA, *LPRASCONNSTATUSA;
+
+typedef struct tagRASCONNSTATUSW
+{
+ DWORD dwSize;
+ RASCONNSTATE rasconnstate;
+ DWORD dwError;
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUSW, *LPRASCONNSTATUSW;
+
+DECL_WINELIB_TYPE_AW(RASCONNSTATUS)
+
+typedef enum tagRASPROJECTION
+{
+ RASP_Amb = 0x10000,
+ RASP_PppNbf = 0x803F,
+ RASP_PppIpx = 0x802B,
+ RASP_PppIp = 0x8021,
+ RASP_PppLcp = 0xC021,
+ RASP_Slip = 0x20000
+} RASPROJECTION, *LPRASPROJECTION;
+
+typedef struct tagRASSUBENTRYA
+{
+ DWORD dwSize;
+ DWORD dwfFlags;
+ CHAR szDeviceType[RAS_MaxDeviceType + 1];
+ CHAR szDeviceName[RAS_MaxDeviceName + 1];
+ CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+ DWORD dwAlternateOffset;
+} RASSUBENTRYA, *LPRASSUBENTRYA;
+
+typedef struct tagRASSUBENTRYW
+{
+ DWORD dwSize;
+ DWORD dwfFlags;
+ WCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ WCHAR szDeviceName[RAS_MaxDeviceName + 1];
+ WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1];
+ DWORD dwAlternateOffset;
+} RASSUBENTRYW, *LPRASSUBENTRYW;
+
+typedef struct tagRASDIALEXTENSIONS
+{
+ DWORD dwSize;
+ DWORD dwfOptions;
+ HWND hwndParent;
+ ULONG_PTR reserved;
+} RASDIALEXTENSIONS, *LPRASDIALEXTENSIONS;
+
+typedef struct tagRASAUTODIALENTRYA
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDialingLocation;
+ CHAR szEntry[ RAS_MaxEntryName + 1 ];
+} RASAUTODIALENTRYA, *LPRASAUTODIALENTRYA;
+
+typedef struct tagRASAUTODIALENTRYW
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwDialingLocation;
+ WCHAR szEntry[ RAS_MaxEntryName + 1 ];
+} RASAUTODIALENTRYW, *LPRASAUTODIALENTRYW;
+
+
+DWORD WINAPI RasConnectionNotificationA(HRASCONN,HANDLE,DWORD);
+DWORD WINAPI RasConnectionNotificationW(HRASCONN,HANDLE,DWORD);
+#define RasConnectionNotification WINELIB_NAME_AW(RasConnectionNotification)
+DWORD WINAPI RasCreatePhonebookEntryA(HWND,LPCSTR);
+DWORD WINAPI RasCreatePhonebookEntryW(HWND,LPCWSTR);
+#define RasCreatePhonebookEntry WINELIB_NAME_AW(RasCreatePhonebookEntry)
+DWORD WINAPI RasDeleteEntryA(LPCSTR,LPCSTR);
+DWORD WINAPI RasDeleteEntryW(LPCWSTR,LPCWSTR);
+#define RasDeleteEntry WINELIB_NAME_AW(RasDeleteEntry)
+DWORD WINAPI RasDeleteSubEntryA(LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI RasDeleteSubEntryW(LPCWSTR,LPCWSTR,DWORD);
+#define RasDeleteSubEntry WINELIB_NAME_AW(RasDeleteSubEntry)
+DWORD WINAPI RasDialA(LPRASDIALEXTENSIONS,LPCSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN);
+DWORD WINAPI RasDialW(LPRASDIALEXTENSIONS,LPCWSTR,LPRASDIALPARAMSW,DWORD,LPVOID,LPHRASCONN);
+#define RasDial WINELIB_NAME_AW(RasDial)
+DWORD WINAPI RasEditPhonebookEntryA(HWND,LPCSTR,LPCSTR);
+DWORD WINAPI RasEditPhonebookEntryW(HWND,LPCWSTR,LPCWSTR);
+#define RasEditPhonebookEntry WINELIB_NAME_AW(RasEditPhonebookEntry)
+DWORD WINAPI RasEnumAutodialAddressesA(LPSTR*,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumAutodialAddressesW(LPWSTR*,LPDWORD,LPDWORD);
+#define RasEnumAutodialAddresses WINELIB_NAME_AW(RasEnumAutodialAddresses)
+DWORD WINAPI RasEnumConnectionsA(LPRASCONNA,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumConnectionsW(LPRASCONNW,LPDWORD,LPDWORD);
+#define RasEnumConnections WINELIB_NAME_AW(RasEnumConnections)
+DWORD WINAPI RasEnumDevicesA(LPRASDEVINFOA,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumDevicesW(LPRASDEVINFOW,LPDWORD,LPDWORD);
+#define RasEnumDevices WINELIB_NAME_AW(RasEnumDevices)
+DWORD WINAPI RasEnumEntriesA(LPCSTR,LPCSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD);
+DWORD WINAPI RasEnumEntriesW(LPCWSTR,LPCWSTR,LPRASENTRYNAMEW,LPDWORD,LPDWORD);
+#define RasEnumEntries WINELIB_NAME_AW(RasEnumEntries)
+DWORD WINAPI RasGetAutodialAddressA(LPCSTR,LPDWORD,LPRASAUTODIALENTRYA,LPDWORD,LPDWORD);
+DWORD WINAPI RasGetAutodialAddressW(LPCWSTR,LPDWORD,LPRASAUTODIALENTRYW,LPDWORD,LPDWORD);
+#define RasGetAutodialAddresses WINELIB_NAME_AW(RasGetAutodialAddresses)
+DWORD WINAPI RasGetAutodialEnableA(DWORD,LPBOOL);
+DWORD WINAPI RasGetAutodialEnableW(DWORD,LPBOOL);
+#define RasGetAutodialEnable WINELIB_NAME_AW(RasGetAutodialEnable)
+DWORD WINAPI RasGetAutodialParamA(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue);
+DWORD WINAPI RasGetAutodialParamW(DWORD dwKey, LPVOID lpvValue, LPDWORD lpdwcbValue);
+#define RasGetAutodialParam WINELIB_NAME_AW(RasGetAutodialParam)
+DWORD WINAPI RasGetConnectStatusA(HRASCONN,LPRASCONNSTATUSA);
+DWORD WINAPI RasGetConnectStatusW(HRASCONN,LPRASCONNSTATUSW);
+#define RasGetConnectStatus WINELIB_NAME_AW(RasGetConnectStatus)
+DWORD WINAPI RasGetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,LPBOOL);
+DWORD WINAPI RasGetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,LPBOOL);
+#define RasGetEntryDialParams WINELIB_NAME_AW(RasGetEntryDialParams)
+DWORD WINAPI RasGetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,LPDWORD,LPBYTE,LPDWORD);
+DWORD WINAPI RasGetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,LPDWORD,LPBYTE,LPDWORD);
+#define RasGetEntryProperties WINELIB_NAME_AW(RasGetEntryProperties)
+DWORD WINAPI RasGetErrorStringA(UINT,LPSTR,DWORD);
+DWORD WINAPI RasGetErrorStringW(UINT,LPWSTR,DWORD);
+#define RasGetErrorString WINELIB_NAME_AW(RasGetErrorString)
+DWORD WINAPI RasGetProjectionInfoA(HRASCONN,RASPROJECTION,LPVOID,LPDWORD);
+DWORD WINAPI RasGetProjectionInfoW(HRASCONN,RASPROJECTION,LPVOID,LPDWORD);
+#define RasGetProjectionInfo WINELIB_NAME_AW(RasGetProjectionInfo)
+DWORD WINAPI RasHangUpA(HRASCONN);
+DWORD WINAPI RasHangUpW(HRASCONN);
+#define RasHangUp WINELIB_NAME_AW(RasHangUp)
+DWORD WINAPI RasRenameEntryA(LPCSTR,LPCSTR,LPCSTR);
+DWORD WINAPI RasRenameEntryW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define RasRenameEntry WINELIB_NAME_AW(RasRenameEntry)
+DWORD WINAPI RasSetAutodialAddressA(LPCSTR,DWORD,LPRASAUTODIALENTRYA,DWORD,DWORD);
+DWORD WINAPI RasSetAutodialAddressW(LPCWSTR,DWORD,LPRASAUTODIALENTRYW,DWORD,DWORD);
+#define RasSetAutodialAddress WINELIB_NAME_AW(RasSetAutodialAddress)
+DWORD WINAPI RasSetAutodialParamA(DWORD,LPVOID,DWORD);
+DWORD WINAPI RasSetAutodialParamW(DWORD,LPVOID,DWORD);
+#define RasSetAutodialParam WINELIB_NAME_AW(RasSetAutodialParam)
+DWORD WINAPI RasSetEntryDialParamsA(LPCSTR,LPRASDIALPARAMSA,BOOL);
+DWORD WINAPI RasSetEntryDialParamsW(LPCWSTR,LPRASDIALPARAMSW,BOOL);
+#define RasSetEntryDialParams WINELIB_NAME_AW(RasSetEntryDialParams)
+DWORD WINAPI RasSetSubEntryPropertiesA(LPCSTR,LPCSTR,DWORD,LPRASSUBENTRYA,DWORD,LPBYTE,DWORD);
+DWORD WINAPI RasSetSubEntryPropertiesW(LPCWSTR,LPCWSTR,DWORD,LPRASSUBENTRYW,DWORD,LPBYTE,DWORD);
+#define RasSetSubEntryProperties WINELIB_NAME_AW(RasSetSubEntryProperties)
+DWORD WINAPI RasValidateEntryNameA(LPCSTR lpszPhonebook, LPCSTR lpszEntry);
+DWORD WINAPI RasValidateEntryNameW(LPCWSTR lpszPhonebook, LPCWSTR lpszEntry);
+#define RasValidateEntryName WINELIB_NAME_AW(RasValidateEntryName)
+DWORD WINAPI RasSetEntryPropertiesA(LPCSTR,LPCSTR,LPRASENTRYA,DWORD,LPBYTE,DWORD);
+DWORD WINAPI RasSetEntryPropertiesW(LPCWSTR,LPCWSTR,LPRASENTRYW,DWORD,LPBYTE,DWORD);
+#define RasSetEntryProperties WINELIB_NAME_AW(RasSetEntryProperties)
+DWORD WINAPI RasSetAutodialEnableA(DWORD dwDialingLocation, BOOL fEnabled);
+DWORD WINAPI RasSetAutodialEnableW(DWORD dwDialingLocation, BOOL fEnabled);
+#define RasSetAutodialEnable WINELIB_NAME_AW(RasSetAutodialEnable)
+
+#include <poppack.h>
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h
new file mode 100644
index 00000000..c1f7bb91
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rasdlg.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <ras.h>
+
+typedef struct tagRASENTRYDLGW
+{
+ DWORD dwSize;
+ HWND hwndOwner;
+ DWORD dwFlags;
+ LONG xDlg;
+ LONG yDlg;
+ WCHAR szEntry[ RAS_MaxEntryName + 1 ];
+ DWORD dwError;
+ ULONG_PTR reserved;
+ ULONG_PTR reserved2;
+} RASENTRYDLGW;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h
new file mode 100644
index 00000000..91963fb9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/raserror.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008 Stefan Leichter
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RASERROR_H
+#define __WINE_RASERROR_H
+
+#define RASBASE 600
+#define ERROR_BUFFER_TOO_SMALL (RASBASE+3)
+#define ERROR_BUFFER_INVALID (RASBASE+10)
+#define ERROR_INVALID_SIZE (RASBASE+32)
+#define ERROR_STATE_MACHINES_NOT_STARTED (RASBASE+95)
+#define ERROR_RASMAN_CANNOT_INITIALIZE (RASBASE+111)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h
new file mode 100644
index 00000000..f60dbffc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/reason.h
@@ -0,0 +1,84 @@
+/*
+ * ExitWindowsEx() reason codes
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_REASON_H
+#define __WINE_REASON_H
+
+
+#define SHTDN_REASON_FLAG_USER_DEFINED 0x40000000
+#define SHTDN_REASON_FLAG_PLANNED 0x80000000
+
+#define SHTDN_REASON_MAJOR_OTHER 0x00000000
+#define SHTDN_REASON_MAJOR_NONE 0x00000000
+#define SHTDN_REASON_MAJOR_HARDWARE 0x00010000
+#define SHTDN_REASON_MAJOR_OPERATINGSYSTEM 0x00020000
+#define SHTDN_REASON_MAJOR_SOFTWARE 0x00030000
+#define SHTDN_REASON_MAJOR_APPLICATION 0x00040000
+#define SHTDN_REASON_MAJOR_SYSTEM 0x00050000
+#define SHTDN_REASON_MAJOR_POWER 0x00060000
+#define SHTDN_REASON_MAJOR_LEGACY_API 0x00070000
+
+#define SHTDN_REASON_MINOR_OTHER 0x00000000
+#define SHTDN_REASON_MINOR_MAINTENANCE 0x00000001
+#define SHTDN_REASON_MINOR_INSTALLATION 0x00000002
+#define SHTDN_REASON_MINOR_UPGRADE 0x00000003
+#define SHTDN_REASON_MINOR_RECONFIG 0x00000004
+#define SHTDN_REASON_MINOR_HUNG 0x00000005
+#define SHTDN_REASON_MINOR_UNSTABLE 0x00000006
+#define SHTDN_REASON_MINOR_DISK 0x00000007
+#define SHTDN_REASON_MINOR_PROCESSOR 0x00000008
+#define SHTDN_REASON_MINOR_NETWORKCARD 0x00000009
+#define SHTDN_REASON_MINOR_POWER_SUPPLY 0x0000000a
+#define SHTDN_REASON_MINOR_CORDUNPLUGGED 0x0000000b
+#define SHTDN_REASON_MINOR_ENVIRONMENT 0x0000000c
+#define SHTDN_REASON_MINOR_HARDWARE_DRIVER 0x0000000d
+#define SHTDN_REASON_MINOR_OTHERDRIVER 0x0000000e
+#define SHTDN_REASON_MINOR_BLUESCREEN 0x0000000f
+#define SHTDN_REASON_MINOR_SERVICEPACK 0x00000010
+#define SHTDN_REASON_MINOR_HOTFIX 0x00000011
+#define SHTDN_REASON_MINOR_SECURITYFIX 0x00000012
+#define SHTDN_REASON_MINOR_SECURITY 0x00000013
+#define SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY 0x00000014
+#define SHTDN_REASON_MINOR_WMI 0x00000015
+#define SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL 0x00000016
+#define SHTDN_REASON_MINOR_HOTFIX_UNINSTALL 0x00000017
+#define SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL 0x00000018
+#define SHTDN_REASON_MINOR_MMC 0x00000019
+#define SHTDN_REASON_MINOR_SYSTEMRESTORE 0x0000001a
+#define SHTDN_REASON_MINOR_TERMSRV 0x00000020
+#define SHTDN_REASON_MINOR_DC_PROMOTION 0x00000021
+#define SHTDN_REASON_MINOR_DC_DEMOTION 0x00000022
+#define SHTDN_REASON_MINOR_NONE 0x000000ff
+
+#define SHTDN_REASON_VALID_BIT_MASK 0xc0ffffff
+
+#define SHTDN_REASON_UNKNOWN SHTDN_REASON_MINOR_NONE
+#define SHTDN_REASON_LEGACY_API (SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h
new file mode 100644
index 00000000..522ec69d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/regstr.h
@@ -0,0 +1,42 @@
+/*
+ * Win32 registry string defines (see also winnt.h)
+ *
+ * Copyright (C) 2000 Andreas Mohr
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_REGSTR
+#define _INC_REGSTR
+
+
+#define REGSTR_PATH_UNINSTALL TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall")
+
+/* DisplayName <= 32 chars in Windows (otherwise not displayed for uninstall) */
+#define REGSTR_VAL_UNINSTALLER_DISPLAYNAME TEXT("DisplayName")
+/* UninstallString <= 63 chars in Windows (otherwise problems) */
+#define REGSTR_VAL_UNINSTALLER_COMMANDLINE TEXT("UninstallString")
+
+
+#endif /* _INC_REGSTR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h
new file mode 100644
index 00000000..8e5975f5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/restartmanager.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 Austin English
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef RESTARTMANAGER_H
+#define RESTARTMANAGER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CCH_RM_MAX_APP_NAME 255
+#define CH_RM_MAX_SVC_NAME 63
+
+typedef enum {
+ RmUnknownApp = 0,
+ RmMainWindow = 1,
+ RmOtherWindow = 2,
+ RmService = 3,
+ RmExplorer = 4,
+ RmConsole = 5,
+ RmCritical = 1000
+} RM_APP_TYPE;
+
+typedef struct {
+ DWORD dwProcessId;
+ FILETIME ProcessStartTime;
+} RM_UNIQUE_PROCESS, *PRM_UNIQUE_PROCESS;
+
+typedef struct {
+ RM_UNIQUE_PROCESS Process;
+ WCHAR strAppName[CCH_RM_MAX_APP_NAME+1];
+ WCHAR strServiceShortName[CH_RM_MAX_SVC_NAME+1];
+ RM_APP_TYPE ApplicationType;
+ ULONG AppStatus;
+ DWORD TSSessionID;
+ BOOL bRestartable;
+} RM_PROCESS_INFO, *PRM_PROCESS_INFO;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* RESTARTMANAGER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h
new file mode 100644
index 00000000..3a846b63
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/richedit.h
@@ -0,0 +1,1088 @@
+/*
+ * Copyright (C) 2000 Jean-Claude Batista
+ * Copyright (C) 2002 Andriy Palamarchuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RICHEDIT_H
+#define __WINE_RICHEDIT_H
+
+#include <pshpack4.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _RICHEDIT_VER
+#define _RICHEDIT_VER 0x0210
+#endif /* _RICHEDIT_VER */
+
+#define cchTextLimitDefault 0x7fff
+
+#if defined(__GNUC__)
+# define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 }
+#elif defined(_MSC_VER)
+# define MSFTEDIT_CLASS L"RichEdit50W"
+#else
+static const WCHAR MSFTEDIT_CLASS[] = { 'R','i','c','h','E','d','i','t','5','0','W',0 };
+#endif
+
+#define RICHEDIT_CLASS20A "RichEdit20A"
+#if defined(__GNUC__)
+# define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 }
+#elif defined(_MSC_VER)
+# define RICHEDIT_CLASS20W L"RichEdit20W"
+#else
+static const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 };
+#endif
+#define RICHEDIT_CLASS10A "RICHEDIT"
+
+#if (_RICHEDIT_VER >= 0x0200 )
+#define RICHEDIT_CLASS WINELIB_NAME_AW(RICHEDIT_CLASS20)
+#else
+#define RICHEDIT_CLASS RICHEDIT_CLASS10A
+#endif
+
+#ifndef WM_NOTIFY
+#define WM_NOTIFY 0x004e
+#endif
+#ifndef WM_CONTEXTMENU
+#define WM_CONTEXTMENU 0x007b
+#endif
+#ifndef WM_UNICHAR
+#define WM_UNICHAR 0x0109
+#endif
+#ifndef WM_PRINTCLIENT
+#define WM_PRINTCLIENT 0x0318
+#endif
+
+#ifndef EM_GETLIMITTEXT
+#define EM_GETLIMITTEXT (WM_USER + 37)
+#endif
+#ifndef EM_POSFROMCHAR
+#define EM_POSFROMCHAR (WM_USER + 38)
+#define EM_CHARFROMPOS (WM_USER + 39)
+#endif
+#ifndef EM_SCROLLCARET
+#define EM_SCROLLCARET (WM_USER + 49)
+#endif
+#define EM_CANPASTE (WM_USER + 50)
+#define EM_DISPLAYBAND (WM_USER + 51)
+#define EM_EXGETSEL (WM_USER + 52)
+#define EM_EXLIMITTEXT (WM_USER + 53)
+#define EM_EXLINEFROMCHAR (WM_USER + 54)
+#define EM_EXSETSEL (WM_USER + 55)
+#define EM_FINDTEXT (WM_USER + 56)
+#define EM_FORMATRANGE (WM_USER + 57)
+#define EM_GETCHARFORMAT (WM_USER + 58)
+#define EM_GETEVENTMASK (WM_USER + 59)
+#define EM_GETOLEINTERFACE (WM_USER + 60)
+#define EM_GETPARAFORMAT (WM_USER + 61)
+#define EM_GETSELTEXT (WM_USER + 62)
+#define EM_HIDESELECTION (WM_USER + 63)
+#define EM_PASTESPECIAL (WM_USER + 64)
+#define EM_REQUESTRESIZE (WM_USER + 65)
+#define EM_SELECTIONTYPE (WM_USER + 66)
+#define EM_SETBKGNDCOLOR (WM_USER + 67)
+#define EM_SETCHARFORMAT (WM_USER + 68)
+#define EM_SETEVENTMASK (WM_USER + 69)
+#define EM_SETOLECALLBACK (WM_USER + 70)
+#define EM_SETPARAFORMAT (WM_USER + 71)
+#define EM_SETTARGETDEVICE (WM_USER + 72)
+#define EM_STREAMIN (WM_USER + 73)
+#define EM_STREAMOUT (WM_USER + 74)
+#define EM_GETTEXTRANGE (WM_USER + 75)
+#define EM_FINDWORDBREAK (WM_USER + 76)
+#define EM_SETOPTIONS (WM_USER + 77)
+#define EM_GETOPTIONS (WM_USER + 78)
+#define EM_FINDTEXTEX (WM_USER + 79)
+#define EM_GETWORDBREAKPROCEX (WM_USER + 80)
+#define EM_SETWORDBREAKPROCEX (WM_USER + 81)
+
+#define EM_SETUNDOLIMIT (WM_USER + 82)
+#define EM_REDO (WM_USER + 84)
+#define EM_CANREDO (WM_USER + 85)
+#define EM_GETUNDONAME (WM_USER + 86)
+#define EM_GETREDONAME (WM_USER + 87)
+#define EM_STOPGROUPTYPING (WM_USER + 88)
+
+#define EM_SETTEXTMODE (WM_USER + 89)
+#define EM_GETTEXTMODE (WM_USER + 90)
+#define EM_AUTOURLDETECT (WM_USER + 91)
+#define EM_GETAUTOURLDETECT (WM_USER + 92)
+#define EM_SETPALETTE (WM_USER + 93)
+#define EM_GETTEXTEX (WM_USER + 94)
+#define EM_GETTEXTLENGTHEX (WM_USER + 95)
+#define EM_SHOWSCROLLBAR (WM_USER + 96)
+#define EM_SETTEXTEX (WM_USER + 97)
+
+#define EM_SETPUNCTUATION (WM_USER + 100)
+#define EM_GETPUNCTUATION (WM_USER + 101)
+#define EM_SETWORDWRAPMODE (WM_USER + 102)
+#define EM_GETWORDWRAPMODE (WM_USER + 103)
+#define EM_SETIMECOLOR (WM_USER + 104)
+#define EM_GETIMECOLOR (WM_USER + 105)
+#define EM_SETIMEOPTIONS (WM_USER + 106)
+#define EM_GETIMEOPTIONS (WM_USER + 107)
+#define EM_CONVPOSITION (WM_USER + 108)
+
+#define EM_SETLANGOPTIONS (WM_USER + 120)
+#define EM_GETLANGOPTIONS (WM_USER + 121)
+#define EM_GETIMECOMPMODE (WM_USER + 122)
+
+#define EM_FINDTEXTW (WM_USER + 123)
+#define EM_FINDTEXTEXW (WM_USER + 124)
+
+#define EM_RECONVERSION (WM_USER + 125)
+#define EM_SETIMEMODEBIAS (WM_USER + 126)
+#define EM_GETIMEMODEBIAS (WM_USER + 127)
+
+#define EM_SETBIDIOPTIONS (WM_USER + 200)
+#define EM_GETBIDIOPTIONS (WM_USER + 201)
+
+#define EM_SETTYPOGRAPHYOPTIONS (WM_USER + 202)
+#define EM_GETTYPOGRAPHYOPTIONS (WM_USER + 203)
+
+#define EM_SETEDITSTYLE (WM_USER + 204)
+#define EM_GETEDITSTYLE (WM_USER + 205)
+
+#define EM_OUTLINE (WM_USER + 220)
+
+#define EM_GETSCROLLPOS (WM_USER + 221)
+#define EM_SETSCROLLPOS (WM_USER + 222)
+
+#define EM_SETFONTSIZE (WM_USER + 223)
+#define EM_GETZOOM (WM_USER + 224)
+#define EM_SETZOOM (WM_USER + 225)
+#define EM_GETVIEWKIND (WM_USER + 226)
+#define EM_SETVIEWKIND (WM_USER + 227)
+
+#define EM_GETPAGE (WM_USER + 228)
+#define EM_SETPAGE (WM_USER + 229)
+#define EM_GETHYPHENATEINFO (WM_USER + 230)
+#define EM_SETHYPHENATEINFO (WM_USER + 231)
+#define EM_GETPAGEROTATE (WM_USER + 235)
+#define EM_SETPAGEROTATE (WM_USER + 236)
+#define EM_GETCTFMODEBIAS (WM_USER + 237)
+#define EM_SETCTFMODEBIAS (WM_USER + 238)
+#define EM_GETCTFOPENSTATUS (WM_USER + 240)
+#define EM_SETCTFOPENSTATUS (WM_USER + 241)
+#define EM_GETIMECOMPTEXT (WM_USER + 242)
+#define EM_ISIME (WM_USER + 243)
+#define EM_GETIMEPROPERTY (WM_USER + 244)
+#define EM_GETQUERYRTFOBJ (WM_USER + 269)
+#define EM_SETQUERYRTFOBJ (WM_USER + 270)
+
+/* New notifications */
+#define EN_MSGFILTER 0x0700
+#define EN_REQUESTRESIZE 0x0701
+#define EN_SELCHANGE 0x0702
+#define EN_DROPFILES 0x0703
+#define EN_PROTECTED 0x0704
+#define EN_CORRECTTEXT 0x0705
+#define EN_STOPNOUNDO 0x0706
+#define EN_IMECHANGE 0x0707
+#define EN_SAVECLIPBOARD 0x0708
+#define EN_OLEOPFAILED 0x0709
+#define EN_OBJECTPOSITIONS 0x070a
+#define EN_LINK 0x070b
+#define EN_DRAGDROPDONE 0x070c
+#define EN_PARAGRAPHEXPANDED 0x070d
+#define EN_PAGECHANGE 0x070e
+#define EN_LOWFIRTF 0x070f
+#define EN_ALIGNLTR 0x0710
+#define EN_ALIGNRTL 0x0711
+
+
+typedef DWORD (CALLBACK * EDITSTREAMCALLBACK)( DWORD_PTR, LPBYTE, LONG, LONG * );
+
+
+#define yHeightCharPtsMost 1638
+#define lDefaultTab 720
+
+/* tab stops number limit */
+#define MAX_TAB_STOPS 0x00000020
+
+#define MAX_TABLE_CELLS 63
+
+/* Rich edit control styles */
+#define ES_NOOLEDRAGDROP 0x00000008
+#define ES_DISABLENOSCROLL 0x00002000
+#define ES_SUNKEN 0x00004000
+#define ES_SAVESEL 0x00008000
+#define ES_SELFIME 0x00040000
+#define ES_NOIME 0x00080000
+#define ES_VERTICAL 0x00400000
+#define ES_SELECTIONBAR 0x01000000
+#define ES_EX_NOCALLOLEINIT 0x01000000
+
+/* the character formatting options */
+#define SCF_DEFAULT 0x00000000
+#define SCF_SELECTION 0x00000001
+#define SCF_WORD 0x00000002
+#define SCF_ALL 0x00000004
+#define SCF_USEUIRULES 0x00000008
+#define SCF_ASSOCIATEFONT 0x00000010
+#define SCF_NOKBUPDATE 0x00000020
+#define SCF_ASSOCIATEFONT2 0x00000040
+
+#ifndef WM_NOTIFY
+typedef struct _nmhdr
+{
+ HWND hwndFrom;
+ UINT idFrom;
+ UINT code;
+} NMHDR;
+#endif
+
+/* CHARFORMAT structure */
+typedef struct _charformat
+{
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ char szFaceName[LF_FACESIZE];
+} CHARFORMATA;
+
+typedef struct _charformatw
+{
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ WCHAR szFaceName[LF_FACESIZE];
+} CHARFORMATW;
+
+DECL_WINELIB_TYPE_AW(CHARFORMAT)
+
+typedef struct _charformat2a {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ char szFaceName[LF_FACESIZE];
+ WORD wWeight;
+ SHORT sSpacing;
+ COLORREF crBackColor;
+ LCID lcid;
+ DWORD dwReserved;
+ SHORT sStyle;
+ WORD wKerning;
+ BYTE bUnderlineType;
+ BYTE bAnimation;
+ BYTE bRevAuthor;
+} CHARFORMAT2A;
+
+typedef struct _charformat2w {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ WCHAR szFaceName[LF_FACESIZE];
+ WORD wWeight;
+ SHORT sSpacing;
+ COLORREF crBackColor;
+ LCID lcid;
+ DWORD dwReserved;
+ SHORT sStyle;
+ WORD wKerning;
+ BYTE bUnderlineType;
+ BYTE bAnimation;
+ BYTE bRevAuthor;
+} CHARFORMAT2W;
+
+DECL_WINELIB_TYPE_AW(CHARFORMAT2)
+
+#define CHARFORMATDELTA (sizeof(CHARFORMAT2) - sizeof(CHARFORMAT))
+
+/* CHARFORMAT masks */
+#define CFM_BOLD 0x00000001
+#define CFM_ITALIC 0x00000002
+#define CFM_UNDERLINE 0x00000004
+#define CFM_STRIKEOUT 0x00000008
+#define CFM_PROTECTED 0x00000010
+#define CFM_LINK 0x00000020
+#define CFM_SMALLCAPS 0x00000040
+#define CFM_ALLCAPS 0x00000080
+#define CFM_HIDDEN 0x00000100
+#define CFM_OUTLINE 0x00000200
+#define CFM_SHADOW 0x00000400
+#define CFM_EMBOSS 0x00000800
+#define CFM_IMPRINT 0x00001000
+#define CFM_DISABLED 0x00002000
+#define CFM_REVISED 0x00004000
+#define CFM_REVAUTHOR 0x00008000
+#define CFM_SUBSCRIPT 0x00030000
+#define CFM_SUPERSCRIPT 0x00030000
+#define CFM_ANIMATION 0x00040000
+#define CFM_STYLE 0x00080000
+#define CFM_KERNING 0x00100000
+#define CFM_SPACING 0x00200000
+#define CFM_WEIGHT 0x00400000
+#define CFM_UNDERLINETYPE 0x00800000
+#define CFM_LCID 0x02000000
+#define CFM_BACKCOLOR 0x04000000
+#define CFM_CHARSET 0x08000000
+#define CFM_OFFSET 0x10000000
+#define CFM_FACE 0x20000000
+#define CFM_COLOR 0x40000000
+#define CFM_SIZE 0x80000000
+
+#define CFM_EFFECTS (CFM_BOLD | \
+ CFM_ITALIC | \
+ CFM_UNDERLINE | \
+ CFM_COLOR | \
+ CFM_STRIKEOUT | \
+ CFE_PROTECTED | \
+ CFM_LINK)
+
+#define CFM_EFFECTS2 (CFM_EFFECTS | \
+ CFM_DISABLED | \
+ CFM_SMALLCAPS | \
+ CFM_ALLCAPS | \
+ CFM_HIDDEN | \
+ CFM_OUTLINE | \
+ CFM_SHADOW | \
+ CFM_EMBOSS | \
+ CFM_IMPRINT | \
+ CFM_DISABLED | \
+ CFM_REVISED | \
+ CFM_SUBSCRIPT | \
+ CFM_SUPERSCRIPT | \
+ CFM_BACKCOLOR)
+
+#define CFM_ALL (CFM_EFFECTS | \
+ CFM_SIZE | \
+ CFM_FACE | \
+ CFM_OFFSET | \
+ CFM_CHARSET)
+
+#define CFM_ALL2 (CFM_ALL | \
+ CFM_EFFECTS2 | \
+ CFM_BACKCOLOR | \
+ CFM_LCID | \
+ CFM_UNDERLINETYPE | \
+ CFM_WEIGHT | \
+ CFM_REVAUTHOR | \
+ CFM_SPACING | \
+ CFM_KERNING | \
+ CFM_STYLE | \
+ CFM_ANIMATION)
+
+/* CHARFORMAT effects */
+#define CFE_BOLD 0x00000001
+#define CFE_ITALIC 0x00000002
+#define CFE_UNDERLINE 0x00000004
+#define CFE_STRIKEOUT 0x00000008
+#define CFE_PROTECTED 0x00000010
+#define CFE_LINK 0x00000020
+#define CFE_SUBSCRIPT 0x00010000
+#define CFE_SUPERSCRIPT 0x00020000
+#define CFE_AUTOCOLOR 0x40000000
+
+#define CFE_SMALLCAPS CFM_SMALLCAPS
+#define CFE_ALLCAPS CFM_ALLCAPS
+#define CFE_HIDDEN CFM_HIDDEN
+#define CFE_OUTLINE CFM_OUTLINE
+#define CFE_SHADOW CFM_SHADOW
+#define CFE_EMBOSS CFM_EMBOSS
+#define CFE_IMPRINT CFM_IMPRINT
+#define CFE_DISABLED CFM_DISABLED
+#define CFE_REVISED CFM_REVISED
+#define CFE_AUTOBACKCOLOR CFM_BACKCOLOR
+
+#define CFU_UNDERLINENONE 0x00
+#define CFU_UNDERLINE 0x01
+#define CFU_UNDERLINEWORD 0x02
+#define CFU_UNDERLINEDOUBLE 0x03
+#define CFU_UNDERLINEDOTTED 0x04
+#define CFU_UNDERLINEDASH 0x05
+#define CFU_UNDERLINEDASHDOT 0x06
+#define CFU_UNDERLINEDASHDOTDOT 0x07
+#define CFU_UNDERLINEWAVE 0x08
+#define CFU_UNDERLINETHICK 0x09
+#define CFU_UNDERLINEHAIRLINE 0x0a
+#define CFU_UNDERLINEDOUBLEWAVE 0x0b
+#define CFU_UNDERLINEHEAVYWAVE 0x0c
+#define CFU_UNDERLINELONGDASH 0x0d
+#define CFU_UNDERLINETHICKDASH 0x0e
+#define CFU_UNDERLINETHICKDASHDOT 0x0f
+#define CFU_UNDERLINETHICKDASHDOTDOT 0x10
+#define CFU_UNDERLINETHICKDOTTED 0x11
+#define CFU_UNDERLINETHICKLONGDASH 0x12
+#define CFU_INVERT 0xFE
+#define CFU_CF1UNDERLINE 0xFF
+
+/* ECO operations */
+#define ECOOP_SET 0x0001
+#define ECOOP_OR 0x0002
+#define ECOOP_AND 0x0003
+#define ECOOP_XOR 0x0004
+
+/* edit control options */
+#define ECO_AUTOWORDSELECTION 0x00000001
+#define ECO_AUTOVSCROLL 0x00000040
+#define ECO_AUTOHSCROLL 0x00000080
+#define ECO_NOHIDESEL 0x00000100
+#define ECO_READONLY 0x00000800
+#define ECO_WANTRETURN 0x00001000
+#define ECO_SAVESEL 0x00008000
+#define ECO_SELECTIONBAR 0x01000000
+#define ECO_VERTICAL 0x00400000
+
+/* Event notification masks */
+#define ENM_NONE 0x00000000
+#define ENM_CHANGE 0x00000001
+#define ENM_UPDATE 0x00000002
+#define ENM_SCROLL 0x00000004
+#define ENM_SCROLLEVENTS 0x00000008
+#define ENM_DRAGDROPDONE 0x00000010
+#define ENM_PARAGRAPHEXPANDED 0x00000020
+#define ENM_PAGECHANGE 0x00000040
+#define ENM_KEYEVENTS 0x00010000
+#define ENM_MOUSEEVENTS 0x00020000
+#define ENM_REQUESTRESIZE 0x00040000
+#define ENM_SELCHANGE 0x00080000
+#define ENM_DROPFILES 0x00100000
+#define ENM_PROTECTED 0x00200000
+#define ENM_CORRECTTEXT 0x00400000
+#define ENM_IMECHANGE 0x00800000
+#define ENM_LANGCHANGE 0x01000000
+#define ENM_OBJECTPOSITIONS 0x02000000
+#define ENM_LINK 0x04000000
+#define ENM_LOWFIRTF 0x08000000
+
+typedef struct _bidioptions
+{
+ UINT cbSize;
+ WORD wMask;
+ WORD wEffects;
+} BIDIOPTIONS;
+
+#ifndef __RICHEDIT_CHARRANGE_DEFINED
+#define __RICHEDIT_CHARRANGE_DEFINED
+
+typedef struct _charrange
+{
+ LONG cpMin;
+ LONG cpMax;
+} CHARRANGE;
+
+#endif /* __RICHEDIT_CHARRANGE_DEFINED */
+
+typedef struct _textrange
+{
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+} TEXTRANGEA;
+
+typedef struct _textrangew
+{
+ CHARRANGE chrg;
+ LPWSTR lpstrText;
+} TEXTRANGEW;
+
+DECL_WINELIB_TYPE_AW(TEXTRANGE)
+
+typedef struct _editstream
+{
+ DWORD_PTR dwCookie;
+ DWORD dwError;
+ EDITSTREAMCALLBACK pfnCallback;
+} EDITSTREAM;
+
+typedef struct _compcolor {
+ COLORREF crText;
+ COLORREF crBackground;
+ DWORD dwEffects;
+} COMPCOLOR;
+
+typedef struct _encorrecttext {
+ NMHDR nmhdr;
+ CHARRANGE chrg;
+ WORD seltyp;
+} ENCORRECTTEXT;
+
+typedef struct _endropfiles {
+ NMHDR nmhdr;
+ HANDLE hDrop;
+ LONG cp;
+ BOOL fProtected;
+} ENDROPFILES;
+
+typedef struct _enlink {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+ CHARRANGE chrg;
+} ENLINK;
+
+typedef struct _enlowfirtf {
+ NMHDR nmhdr;
+ char *szControl;
+} ENLOWFIRTF;
+
+typedef struct {
+ NMHDR nmhdr;
+ LONG iob;
+ LONG lOper;
+ HRESULT hr;
+} ENOLEOPFAILED;
+
+typedef struct _enprotected {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+ CHARRANGE chrg;
+} ENPROTECTED, *LPENPROTECTED;
+
+typedef struct _ensaveclipboard {
+ NMHDR nmhdr;
+ LONG cObjectCount;
+ LONG cch;
+} ENSAVECLIPBOARD;
+
+typedef struct _findtextA {
+ CHARRANGE chrg;
+ LPCSTR lpstrText;
+} FINDTEXTA;
+
+typedef struct _findtextW {
+ CHARRANGE chrg;
+ LPCWSTR lpstrText;
+} FINDTEXTW;
+
+DECL_WINELIB_TYPE_AW(FINDTEXT)
+
+typedef struct _findtextexA {
+ CHARRANGE chrg;
+ LPCSTR lpstrText;
+ CHARRANGE chrgText;
+} FINDTEXTEXA;
+
+typedef struct _findtextexW {
+ CHARRANGE chrg;
+ LPCWSTR lpstrText;
+ CHARRANGE chrgText;
+} FINDTEXTEXW;
+
+DECL_WINELIB_TYPE_AW(FINDTEXTEX)
+
+typedef struct _formatrange {
+ HDC hdc;
+ HDC hdcTarget;
+ RECT rc;
+ RECT rcPage;
+ CHARRANGE chrg;
+} FORMATRANGE;
+
+typedef enum tagKHYPH
+{
+ khyphNil = 0,
+ khyphNormal = 1,
+ khyphAddBefore = 2,
+ khyphChangeBefore = 3,
+ khyphDeleteBefore = 4,
+ khyphChangeAfter = 5,
+ khyphDelAndChange = 6
+} KHYPH;
+
+typedef struct hyphresult
+{
+ KHYPH khyph;
+ LONG ichHyph;
+ WCHAR chHyph;
+} HYPHRESULT;
+
+typedef struct tagHyphenateInfo
+{
+ SHORT cbSize;
+ SHORT dxHyphenateZone;
+ void (WINAPI* pfnHyphenate)(WCHAR*, LANGID, LONG, HYPHRESULT*);
+} HYPHENATEINFO;
+
+typedef struct _msgfilter {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+} MSGFILTER;
+
+typedef struct _objectpositions {
+ NMHDR nmhdr;
+ LONG cObjectCount;
+ LONG *pcpPositions;
+} OBJECTPOSITIONS;
+
+typedef struct _paraformat {
+ UINT cbSize;
+ DWORD dwMask;
+ WORD wNumbering;
+ WORD wReserved;
+ LONG dxStartIndent;
+ LONG dxRightIndent;
+ LONG dxOffset;
+ WORD wAlignment;
+ SHORT cTabCount;
+ LONG rgxTabs[MAX_TAB_STOPS];
+} PARAFORMAT;
+
+typedef struct _paraformat2 {
+ UINT cbSize;
+ DWORD dwMask;
+ WORD wNumbering;
+ WORD wEffects;
+ LONG dxStartIndent;
+ LONG dxRightIndent;
+ LONG dxOffset;
+ WORD wAlignment;
+ SHORT cTabCount;
+ LONG rgxTabs[MAX_TAB_STOPS];
+ LONG dySpaceBefore, dySpaceAfter, dyLineSpacing;
+ SHORT sStyle;
+ BYTE bLineSpacingRule, bOutlineLevel;
+ WORD wShadingWeight, wShadingStyle;
+ WORD wNumberingStart, wNumberingStyle, wNumberingTab;
+ WORD wBorderSpace, wBorderWidth, wBorders;
+} PARAFORMAT2;
+
+typedef struct _selchange {
+ NMHDR nmhdr;
+ CHARRANGE chrg;
+ WORD seltyp;
+} SELCHANGE;
+
+typedef struct _reqresize {
+ NMHDR nmhdr;
+ RECT rc;
+} REQRESIZE;
+
+typedef struct _repastespecial {
+ DWORD dwAspect;
+ DWORD dwParam;
+} REPASTESPECIAL;
+
+typedef struct _punctuation {
+ UINT iSize;
+ LPSTR szPunctuation;
+} PUNCTUATION;
+
+typedef struct _gettextex {
+ DWORD cb;
+ DWORD flags;
+ UINT codepage;
+ LPCSTR lpDefaultChar;
+ LPBOOL lpUsedDefChar;
+} GETTEXTEX;
+
+typedef struct _imecomptext {
+ LONG cb;
+ DWORD flags;
+} IMECOMPTEXT;
+
+void WINAPI HyphenateProc(WCHAR*, LANGID, LONG, HYPHRESULT*);
+
+#define SF_TEXT 0x00000001
+#define SF_RTF 0x00000002
+#define SF_RTFNOOBJS 0x00000003
+#define SF_TEXTIZED 0x00000004
+#define SF_UNICODE 0x00000010
+#define SF_USECODEPAGE 0x00000020
+#define SF_NCRFORNONASCII 0x00000040
+#define SF_RTFVAL 0x00000700
+
+/* BIDIOPTIONS.wMask flag values */
+#define BOM_DEFPARADIR 0x00000001
+#define BOM_PLAINTEXT 0x00000002
+#define BOM_NEUTRALOVERRIDE 0x00000004
+#define BOM_CONTEXTREADING 0x00000008
+#define BOM_CONTEXTALIGNMENT 0x00000010
+#define BOM_LEGACYBIDICLASS 0x00000040
+
+/* BIDIOPTIONS.wEffects flag values */
+#define BOE_RTLDIR 0x00000001
+#define BOE_PLAINTEXT 0x00000002
+#define BOE_NEUTRALOVERRIDE 0x00000004
+#define BOE_CONTEXTREADING 0x00000008
+#define BOE_CONTEXTALIGNMENT 0x00000010
+#define BOE_LEGACYBIDICLASS 0x00000040
+
+/* Clipboard formats */
+#define CF_RTF TEXT("Rich Text Format")
+#define CF_RTFNOOBJS TEXT("Rich Text Format Without Objects")
+#define CF_RETEXTOBJ TEXT("RichEdit Text and Objects")
+
+/* Mode bias wParam values for EM_SETCTFMODEBIAS message */
+#define CTFMODEBIAS_DEFAULT 0x00000000
+#define CTFMODEBIAS_FILENAME 0x00000001
+#define CTFMODEBIAS_NAME 0x00000002
+#define CTFMODEBIAS_READING 0x00000003
+#define CTFMODEBIAS_DATETIME 0x00000004
+#define CTFMODEBIAS_CONVERSATION 0x00000005
+#define CTFMODEBIAS_NUMERIC 0x00000006
+#define CTFMODEBIAS_HIRAGANA 0x00000007
+#define CTFMODEBIAS_KATAKANA 0x00000008
+#define CTFMODEBIAS_HANGUL 0x00000009
+#define CTFMODEBIAS_HALFWIDTHKATAKANA 0x0000000a
+#define CTFMODEBIAS_FULLWIDTHALPHANUMERIC 0x0000000b
+#define CTFMODEBIAS_HALFWIDTHALPHANUMERIC 0x0000000c
+
+#define EMO_EXIT 0x00000000
+#define EMO_ENTER 0x00000001
+#define EMO_PROMOTE 0x00000002
+#define EMO_EXPAND 0x00000003
+#define EMO_MOVESELECTION 0x00000004
+#define EMO_GETVIEWMODE 0x00000005
+
+#define EMO_EXPANDSELECTION 0x00000000
+#define EMO_EXPANDDOCUMENT 0x00000001
+
+/* Page Rotate values used in wParam of EM_SETPAGEROTATE message */
+#define EPR_0 0x00000000
+#define EPR_270 0x00000001
+#define EPR_180 0x00000002
+#define EPR_90 0x00000003
+
+/* Find flags for wParam of EM_FINDTEXT message */
+#define FR_MATCHDIAC 0x20000000
+#define FR_MATCHKASHIDA 0x40000000
+#define FR_MATCHALEFHAMZA 0x80000000
+
+/* IME Compatibility Mode return values for EM_GETIMECOMPMODE message */
+#define ICM_NOTOPEN 0x00000000
+#define ICM_LEVEL3 0x00000001
+#define ICM_LEVEL2 0x00000002
+#define ICM_LEVEL2_5 0x00000003
+#define ICM_LEVEL2_SUI 0x00000004
+#define ICM_CTF 0x00000005
+
+/* Flags value for IMECOMPTEXT structure */
+#define ICT_RESULTREADSTR 0x00000001
+
+/* Input Method Flags used in EM_SETLANGOPTIONS message */
+#define IMF_AUTOKEYBOARD 0x00000001
+#define IMF_AUTOFONT 0x00000002
+#define IMF_IMECANCELCOMPLETE 0x00000004
+#define IMF_IMEALWAYSSENDNOTIFY 0x00000008
+#define IMF_AUTOFONTSIZEADJUST 0x00000010
+#define IMF_UIFONTS 0x00000020
+#define IMF_DUALFONT 0x00000080
+
+/* Parameters values for the EM_SETIMEMODEBIAS message */
+#define IMF_SMODE_PLAURALCLAUSE 0x00000001
+#define IMF_SMODE_NONE 0x00000002
+
+/* Parameters of the EM_SETIMEOPTIONS message */
+#define IMF_FORCENONE 0x00000001
+#define IMF_FORCEENABLE 0x00000002
+#define IMF_FORCEDISABLE 0x00000004
+#define IMF_CLOSESTATUSWINDOW 0x00000008
+#define IMF_VERTICAL 0x00000020
+#define IMF_FORCEACTIVE 0x00000040
+#define IMF_FORCEINACTIVE 0x00000080
+#define IMF_FORCEREMEMBER 0x00000100
+#define IMF_MULTIPLEEDIT 0x00000400
+
+/* return values of the EM_SELECTION_TYPE message */
+#define SEL_EMPTY 0x00000000
+#define SEL_TEXT 0x00000001
+#define SEL_OBJECT 0x00000002
+#define SEL_MULTICHAR 0x00000004
+#define SEL_MULTIOBJECT 0x00000008
+
+/* ENOLEOPFAILED.lOper value that indicates operation failure */
+#define OLEOP_DOVERB 0x00000001
+
+/* punctionation type values for wParam of EM_SETPUNCTUATION message */
+#define PC_FOLLOWING 0x00000001
+#define PC_LEADING 0x00000002
+#define PC_OVERFLOW 0x00000003
+#define PC_DELIMITER 0x00000004
+
+/* mask values in the PARAFORMAT structure */
+#define PFM_STARTINDENT 0x00000001
+#define PFM_RIGHTINDENT 0x00000002
+#define PFM_OFFSET 0x00000004
+#define PFM_ALIGNMENT 0x00000008
+#define PFM_TABSTOPS 0x00000010
+#define PFM_NUMBERING 0x00000020
+#define PFM_OFFSETINDENT 0x80000000
+
+/* mask values in the PARAFORMAT2 structure */
+#define PFM_SPACEBEFORE 0x00000040
+#define PFM_SPACEAFTER 0x00000080
+#define PFM_LINESPACING 0x00000100
+#define PFM_STYLE 0x00000400
+#define PFM_BORDER 0x00000800
+#define PFM_SHADING 0x00001000
+#define PFM_NUMBERINGSTYLE 0x00002000
+#define PFM_NUMBERINGTAB 0x00004000
+#define PFM_NUMBERINGSTART 0x00008000
+#define PFM_RTLPARA 0x00010000
+#define PFM_KEEP 0x00020000
+#define PFM_KEEPNEXT 0x00040000
+#define PFM_PAGEBREAKBEFORE 0x00080000
+#define PFM_NOLINENUMBER 0x00100000
+#define PFM_NOWIDOWCONTROL 0x00200000
+#define PFM_DONOTHYPHEN 0x00400000
+#define PFM_SIDEBYSIDE 0x00800000
+#define PFM_COLLAPSED 0x01000000
+#define PFM_OUTLINELEVEL 0x02000000
+#define PFM_BOX 0x04000000
+#define PFM_RESERVED2 0x08000000
+#define PFM_TABLEROWDELIMITER 0x10000000
+#define PFM_TEXTWRAPPINGBREAK 0x20000000
+#define PFM_TABLE 0x40000000
+
+#define PFM_ALL (PFM_STARTINDENT | \
+ PFM_RIGHTINDENT | \
+ PFM_OFFSET | \
+ PFM_ALIGNMENT | \
+ PFM_TABSTOPS | \
+ PFM_NUMBERING | \
+ PFM_OFFSETINDENT | \
+ PFM_RTLPARA)
+
+#define PFM_EFFECTS (PFM_RTLPARA | \
+ PFM_KEEP | \
+ PFM_KEEPNEXT | \
+ PFM_PAGEBREAKBEFORE | \
+ PFM_NOLINENUMBER | \
+ PFM_NOWIDOWCONTROL | \
+ PFM_DONOTHYPHEN | \
+ PFM_SIDEBYSIDE | \
+ PFM_TABLEROWDELIMITER | \
+ PFM_TABLE)
+
+#define PFM_ALL2 (PFM_ALL | \
+ PFM_EFFECTS | \
+ PFM_SPACEBEFORE | \
+ PFM_SPACEAFTER | \
+ PFM_LINESPACING | \
+ PFM_STYLE | \
+ PFM_BORDER | \
+ PFM_SHADING | \
+ PFM_NUMBERINGSTYLE | \
+ PFM_NUMBERINGTAB | \
+ PFM_NUMBERINGSTART)
+
+/* numbering option */
+#define PFN_BULLET 0x00000001
+#define PFN_ARABIC 0x00000002
+#define PFN_LCLETTER 0x00000003
+#define PFN_UCLETTER 0x00000004
+#define PFN_LCROMAN 0x00000005
+#define PFN_UCROMAN 0x00000006
+
+/* paragraph format numbering styles */
+#define PFNS_PAREN 0x00000000
+#define PFNS_PARENS 0x00000100
+#define PFNS_PERIOD 0x00000200
+#define PFNS_PLAIN 0x00000300
+#define PFNS_NONUMBER 0x00000400
+#define PFNS_NEWNUMBER 0x00008000
+
+/* paragraph alignment */
+#define PFA_LEFT 0x00000001
+#define PFA_RIGHT 0x00000002
+#define PFA_CENTER 0x00000003
+#define PFA_JUSTIFY 0x00000004
+#define PFA_FULL_INTERWORD 0x00000004
+#define PFA_FULL_INTERLETTER 0x00000005
+#define PFA_FULL_SCALED 0x00000006
+#define PFA_FULL_GLYPHS 0x00000007
+#define PFA_SNAP_GRID 0x00000008
+
+/* paragraph effects */
+#define PFE_RTLPARA 0x00000001
+#define PFE_KEEP 0x00000002
+#define PFE_KEEPNEXT 0x00000004
+#define PFE_PAGEBREAKBEFORE 0x00000008
+#define PFE_NOLINENUMBER 0x00000010
+#define PFE_NOWIDOWCONTROL 0x00000020
+#define PFE_DONOTHYPHEN 0x00000040
+#define PFE_SIDEBYSIDE 0x00000080
+#define PFE_COLLAPSED 0x00000100
+#define PFE_BOX 0x00000400
+#define PFE_TABLEROWDELIMITER 0x00001000
+#define PFE_TEXTWRAPPINGBREAK 0x00002000
+#define PFE_TABLE 0x00004000
+
+/* Set Edit Style flags for EM_SETEDITSTYLE message */
+#define SES_EMULATESYSEDIT 0x00000001
+#define SES_BEEPONMAXTEXT 0x00000002
+#define SES_EXTENDBACKCOLOR 0x00000004
+#define SES_MAPCPS 0x00000008
+#define SES_EMULATE10 0x00000010
+#define SES_USECRLF 0x00000020
+#define SES_NOXLTSYMBOLRANGE 0x00000020
+#define SES_USEAIMM 0x00000040
+#define SES_NOIME 0x00000080
+#define SES_ALLOWBEEPS 0x00000100
+#define SES_UPPERCASE 0x00000200
+#define SES_LOWERCASE 0x00000400
+#define SES_NOINPUTSEQUENCECHK 0x00000800
+#define SES_BIDI 0x00001000
+#define SES_SCROLLONKILLFOCUS 0x00002000
+#define SES_XLTCRCRLFTOCR 0x00004000
+#define SES_DRAFTMODE 0x00008000
+#define SES_USECTF 0x00010000
+#define SES_HIDEGRIDLINES 0x00020000
+#define SES_USEATFONT 0x00040000
+#define SES_CUSTOMLOOK 0x00080000
+#define SES_LBSCROLLNOTIFY 0x00100000
+#define SES_CTFALLOWEMBED 0x00200000
+#define SES_CTFALLOWSMARTTAG 0x00400000
+#define SES_CTFALLOWPROOFING 0x00800000
+
+/* streaming flags */
+#define SFF_WRITEXTRAPAR 0x00000080
+#define SFF_PWD 0x00000800
+#define SFF_KEEPDOCINFO 0x00001000
+#define SFF_PERSISTVIEWSCALE 0x00002000
+#define SFF_PLAINRTF 0x00004000
+#define SFF_SELECTION 0x00008000
+
+typedef enum _undonameid
+{
+ UID_UNKNOWN = 0,
+ UID_TYPING = 1,
+ UID_DELETE = 2,
+ UID_DRAGDROP = 3,
+ UID_CUT = 4,
+ UID_PASTE = 5,
+ UID_AUTOCORRECT = 6
+} UNDONAMEID;
+
+typedef LONG (*EDITWORDBREAKPROCEX)(char*,LONG,BYTE,INT);
+
+#define VM_OUTLINE 0x00000002
+#define VM_NORMAL 0x00000004
+#define VM_PAGE 0x00000009
+
+/* options of the EM_FINDWORDBREAK message */
+#define WB_CLASSIFY 0x00000003
+#define WB_MOVEWORDLEFT 0x00000004
+#define WB_MOVEWORDPREV 0x00000004
+#define WB_MOVEWORDRIGHT 0x00000005
+#define WB_MOVEWORDNEXT 0x00000005
+#define WB_LEFTBREAK 0x00000006
+#define WB_PREVBREAK 0x00000006
+#define WB_RIGHTBREAK 0x00000007
+#define WB_NEXTBREAK 0x00000007
+
+/* options of the EM_SETWORDWRAPMODE message */
+#define WBF_WORDWRAP 0x00000010
+#define WBF_WORDBREAK 0x00000020
+#define WBF_OVERFLOW 0x00000040
+#define WBF_LEVEL1 0x00000080
+#define WBF_LEVEL2 0x00000100
+#define WBF_CUSTOM 0x00000200
+
+#define WBF_CLASS ((BYTE) 0x0F)
+#define WBF_ISWHITE ((BYTE) 0x10)
+#define WBF_BREAKLINE ((BYTE) 0x20)
+#define WBF_BREAKAFTER ((BYTE) 0x40)
+
+/* Placeholder unicode character for an embedded object */
+#ifndef WCH_EMBEDDING
+#define WCH_EMBEDDING (WCHAR)0xFFFC
+#endif
+
+/* options of the EM_SETTEXTMODE message */
+#define TM_PLAINTEXT 0x00000001
+#define TM_RICHTEXT 0x00000002
+#define TM_SINGLELEVELUNDO 0x00000004
+#define TM_MULTILEVELUNDO 0x00000008
+#define TM_SINGLECODEPAGE 0x00000010
+#define TM_MULTICODEPAGE 0x00000020
+
+/* GETTEXTEX structure flags */
+#define GT_DEFAULT 0x00000000
+#define GT_USECRLF 0x00000001
+#define GT_SELECTION 0x00000002
+#define GT_RAWTEXT 0x00000004
+#define GT_NOHIDDENTEXT 0x00000008
+
+/* Options of the EM_SETTYPOGRAPHYOPTIONS message */
+#define TO_ADVANCEDTYPOGRAPHY 0x00000001
+#define TO_SIMPLELINEBREAK 0x00000002
+#define TO_DISABLECUSTOMTEXTOUT 0x00000004
+#define TO_ADVANCEDLAYOUT 0x00000008
+
+typedef struct _gettextlengthex {
+ DWORD flags;
+ UINT codepage;
+} GETTEXTLENGTHEX;
+
+/* Flags of the GETTEXTLENGTHEX structure */
+#define GTL_DEFAULT 0x00000000
+#define GTL_USECRLF 0x00000001
+#define GTL_PRECISE 0x00000002
+#define GTL_CLOSE 0x00000004
+#define GTL_NUMCHARS 0x00000008
+#define GTL_NUMBYTES 0x00000010
+
+#define GCM_RIGHTMOUSEDROP 0x8000
+
+/* Options of the EM_SETTEXTEX message */
+typedef struct _settextex {
+ DWORD flags;
+ UINT codepage;
+} SETTEXTEX;
+
+/* Flags of the EM_SETTEXTEX message */
+#define ST_DEFAULT 0x00000000
+#define ST_KEEPUNDO 0x00000001
+#define ST_SELECTION 0x00000002
+#define ST_NEWCHARS 0x00000004
+#define ST_UNICODE 0x00000008
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_RICHEDIT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl
new file mode 100644
index 00000000..a50681d1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/richole.idl
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2002 Andriy Palamarchuk
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("#if 0") /* not included on Windows */
+import "oleidl.idl";
+cpp_quote("#endif")
+
+/* REOBJECT structure flags */
+cpp_quote("#define REO_GETOBJ_NO_INTERFACES 0x00000000")
+cpp_quote("#define REO_GETOBJ_POLEOBJ 0x00000001")
+cpp_quote("#define REO_GETOBJ_PSTG 0x00000002")
+cpp_quote("#define REO_GETOBJ_POLESITE 0x00000004")
+cpp_quote("#define REO_GETOBJ_ALL_INTERFACES 0x00000007")
+cpp_quote("#define REO_CP_SELECTION 0xFFFFFFFF")
+cpp_quote("#define REO_IOB_SELECTION 0xFFFFFFFF")
+cpp_quote("#define REO_IOB_USE_CP 0xFFFFFFFE")
+cpp_quote("#define REO_NULL 0x00000000")
+cpp_quote("#define REO_READWRITEMASK 0x0000003F")
+cpp_quote("#define REO_DONTNEEDPALETTE 0x00000020")
+cpp_quote("#define REO_BLANK 0x00000010")
+cpp_quote("#define REO_DYNAMICSIZE 0x00000008")
+cpp_quote("#define REO_INVERTEDSELECT 0x00000004")
+cpp_quote("#define REO_BELOWBASELINE 0x00000002")
+cpp_quote("#define REO_RESIZABLE 0x00000001")
+cpp_quote("#define REO_LINK 0x80000000")
+cpp_quote("#define REO_STATIC 0x40000000")
+cpp_quote("#define REO_SELECTED 0x08000000")
+cpp_quote("#define REO_OPEN 0x04000000")
+cpp_quote("#define REO_INPLACEACTIVE 0x02000000")
+cpp_quote("#define REO_HILITED 0x01000000")
+cpp_quote("#define REO_LINKAVAILABLE 0x00800000")
+cpp_quote("#define REO_GETMETAFILE 0x00400000")
+
+/* clipboard operation flags */
+cpp_quote("#define RECO_PASTE 0x00000000")
+cpp_quote("#define RECO_DROP 0x00000001")
+cpp_quote("#define RECO_COPY 0x00000002")
+cpp_quote("#define RECO_CUT 0x00000003")
+cpp_quote("#define RECO_DRAG 0x00000004")
+
+typedef struct _reobject {
+ DWORD cbStruct;
+ LONG cp;
+ CLSID clsid;
+ LPOLEOBJECT poleobj;
+ LPSTORAGE pstg;
+ LPOLECLIENTSITE polesite;
+ SIZEL sizel;
+ DWORD dvaspect;
+ DWORD dwFlags;
+ DWORD dwUser;
+} REOBJECT;
+
+cpp_quote("#ifndef __RICHEDIT_CHARRANGE_DEFINED")
+cpp_quote("#define __RICHEDIT_CHARRANGE_DEFINED")
+
+typedef struct _charrange
+{
+ LONG cpMin;
+ LONG cpMax;
+} CHARRANGE;
+
+cpp_quote("#endif /* __RICHEDIT_CHARRANGE_DEFINED */")
+
+/*****************************************************************************
+ * IRichEditOle
+ */
+[
+ object,
+ uuid(00020d00-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IRichEditOle : IUnknown
+{
+ typedef [unique] IRichEditOle *LPRICHEDITOLE;
+
+ HRESULT GetClientSite(LPOLECLIENTSITE *lplpolesite);
+ HRESULT GetObjectCount();
+ HRESULT GetLinkCount();
+ HRESULT GetObject(LONG iob, REOBJECT *lpreobject, DWORD dwFlags);
+ HRESULT InsertObject(REOBJECT *lpreobject);
+ HRESULT ConvertObject(LONG iob, REFCLSID rclsidNew, LPCSTR lpstrUserTypeNew);
+ HRESULT ActivateAs(REFCLSID rclsid, REFCLSID rclsidAs);
+ HRESULT SetHostNames(LPCSTR lpstrContainerApp, LPCSTR lpstrContainerObj);
+ HRESULT SetLinkAvailable(LONG iob, BOOL fAvailable);
+ HRESULT SetDvaspect(LONG iob, DWORD dvaspect);
+ HRESULT HandsOffStorage(LONG iob);
+ HRESULT SaveCompleted(LONG iob, LPSTORAGE lpstg);
+ HRESULT InPlaceDeactivate();
+ HRESULT ContextSensitiveHelp(BOOL fEnterMode);
+ HRESULT GetClipboardData(CHARRANGE* lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj);
+ HRESULT ImportDataObject(LPDATAOBJECT lpdataobj, CLIPFORMAT cf, HGLOBAL hMetaPict);
+}
+
+/*****************************************************************************
+ * IRichEditOleCallback
+ */
+[
+ object,
+ uuid(00020d03-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IRichEditOleCallback : IUnknown
+{
+ typedef [unique] IRichEditOleCallback *LPRICHEDITOLECALLBACK;
+
+ HRESULT GetNewStorage(LPSTORAGE *lplpstg);
+ HRESULT GetInPlaceContext(LPOLEINPLACEFRAME *lplpFrame, LPOLEINPLACEUIWINDOW *lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo);
+ HRESULT ShowContainerUI(BOOL fShow);
+ HRESULT QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp);
+ HRESULT DeleteObject(LPOLEOBJECT lpoleobj);
+ HRESULT QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT *lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict);
+ HRESULT ContextSensitiveHelp(BOOL fEnterMode);
+ HRESULT GetClipboardData(CHARRANGE *lpchrg, DWORD reco, LPDATAOBJECT *lplpdataobj);
+ HRESULT GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect);
+ HRESULT GetContextMenu(WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE *lpchrg, HMENU *lphmenu);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h
new file mode 100644
index 00000000..48beda23
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxfguid.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2007 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RMXFGUID_H
+#define __WINE_RMXFGUID_H
+
+/*****************************************************************************
+ * Define GUIDs
+ */
+
+DEFINE_GUID(TID_D3DRMAnimation, 0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMAnimationKey, 0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMAnimationOptions, 0xe2bf56c0, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMAnimationSet, 0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMAppData, 0xe5745280, 0xb24f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMBoolean, 0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMBoolean2d, 0x4885ae63, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMCamera, 0x3d82ab51, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMColorRGB, 0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMColorRGBA, 0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMCoords2d, 0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMExternalVisual, 0x98116aa0, 0xbdba, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMFloatKeys, 0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrame, 0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMFramePosition, 0xe2bf56c1, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrameRotation, 0xe2bf56c3, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrameTransformMatrix, 0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMFrameVelocity, 0xe2bf56c2, 0x840f, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMGuid, 0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMIndexedColor, 0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMInfo, 0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMInlineData, 0x3a23eea0, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMLight, 0x3d82ab4a, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMLightAttenuation, 0xa8a98ba0, 0xc5e5, 0x11cf, 0xb9, 0x41, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMLightPenumbra, 0xaed22741, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMLightRange, 0xaed22742, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMLightUmbra, 0xaed22740, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x00, 0xaa, 0x00, 0xa7, 0x1a, 0x2f);
+
+DEFINE_GUID(TID_D3DRMMaterial, 0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMMaterialAmbientColor, 0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialArray, 0x35ff44e1, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialDiffuseColor, 0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialEmissiveColor, 0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialPower, 0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialSpecularColor, 0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMaterialWrap, 0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMatrix4x4, 0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMesh, 0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMMeshFace, 0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMMeshFaceWraps, 0xed1ec5c0, 0xc0a8, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMMeshMaterialList, 0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMeshNormals, 0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMeshTextureCoords, 0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMMeshVertexColors, 0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMProgressiveMesh, 0x8a63c360, 0x997d, 0x11d0, 0x94, 0x1c, 0x00, 0x80, 0xc8, 0x0c, 0xfa, 0x7b);
+
+DEFINE_GUID(TID_D3DRMPropertyBag, 0x7f0f21e1, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMRightHanded, 0x7f5d5ea0, 0xd53a, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMStringProperty, 0x7f0f21e0, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x71);
+
+DEFINE_GUID(TID_D3DRMTextureFilename, 0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMTextureReference, 0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMTimedFloatKeys, 0xf406b180, 0x7b3b, 0x11cf, 0x8f, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xa3);
+
+DEFINE_GUID(TID_D3DRMUrl, 0x3a23eea1, 0x94b1, 0x11d0, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+DEFINE_GUID(TID_D3DRMVector, 0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x00, 0x20, 0xaf, 0x71, 0xe4, 0x33);
+
+#endif /* __WINE_RMXFGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
new file mode 100644
index 00000000..99054b5d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rmxftmpl.x
@@ -0,0 +1,277 @@
+xof 0302txt 0064
+// Copyright (C) 2011 Dylan Smith
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+template Header
+{
+ <3D82AB43-62DA-11CF-AB39-0020AF71E433>
+ WORD major;
+ WORD minor;
+ DWORD flags;
+}
+
+template Vector
+{
+ <3D82AB5E-62DA-11CF-AB39-0020AF71E433>
+ FLOAT x;
+ FLOAT y;
+ FLOAT z;
+}
+
+template Coords2d
+{
+ <F6F23F44-7686-11CF-8F52-0040333594A3>
+ FLOAT u;
+ FLOAT v;
+}
+
+template Matrix4x4
+{
+ <F6F23F45-7686-11CF-8F52-0040333594A3>
+ array FLOAT matrix[16];
+}
+
+template ColorRGBA
+{
+ <35FF44E0-6C7C-11CF-8F52-0040333594A3>
+ FLOAT red;
+ FLOAT green;
+ FLOAT blue;
+ FLOAT alpha;
+}
+
+template ColorRGB
+{
+ <D3E16E81-7835-11CF-8F52-0040333594A3>
+ FLOAT red;
+ FLOAT green;
+ FLOAT blue;
+}
+
+template IndexedColor
+{
+ <1630B820-7842-11CF-8F52-0040333594A3>
+ DWORD index;
+ ColorRGBA indexColor;
+}
+
+template Boolean
+{
+ <537DA6A0-CA37-11D0-941C-0080C80CFA7B>
+ DWORD truefalse;
+}
+
+template Boolean2d
+{
+ <4885AE63-78E8-11CF-8F52-0040333594A3>
+ Boolean u;
+ Boolean v;
+}
+
+template MaterialWrap
+{
+ <4885AE60-78E8-11CF-8F52-0040333594A3>
+ Boolean u;
+ Boolean v;
+}
+
+template TextureFilename
+{
+ <A42790E1-7810-11CF-8F52-0040333594A3>
+ STRING filename;
+}
+
+template Material
+{
+ <3D82AB4D-62DA-11CF-AB39-0020AF71E433>
+ ColorRGBA faceColor;
+ FLOAT power;
+ ColorRGB specularColor;
+ ColorRGB emissiveColor;
+ [ ... ]
+}
+
+template MeshFace
+{
+ <3D82AB5F-62DA-11CF-AB39-0020AF71E433>
+ DWORD nFaceVertexIndices;
+ array DWORD faceVertexIndices[nFaceVertexIndices];
+}
+
+template MeshFaceWraps
+{
+ <ED1EC5C0-C0A8-11D0-941C-0080C80CFA7B>
+ DWORD nFaceWrapValues;
+ array Boolean2d faceWrapValues[nFaceWrapValues];
+}
+
+template MeshTextureCoords
+{
+ <F6F23F40-7686-11CF-8F52-0040333594A3>
+ DWORD nTextureCoords;
+ array Coords2d textureCoords[nTextureCoords];
+}
+
+template MeshMaterialList
+{
+ <F6F23F42-7686-11CF-8F52-0040333594A3>
+ DWORD nMaterials;
+ DWORD nFaceIndexes;
+ array DWORD faceIndexes[nFaceIndexes];
+ [ Material ]
+}
+
+template MeshNormals
+{
+ <F6F23F43-7686-11CF-8F52-0040333594A3>
+ DWORD nNormals;
+ array Vector normals[nNormals];
+ DWORD nFaceNormals;
+ array MeshFace faceNormals[nFaceNormals];
+}
+
+template MeshVertexColors
+{
+ <1630B821-7842-11CF-8F52-0040333594A3>
+ DWORD nVertexColors;
+ array IndexedColor vertexColors[nVertexColors];
+}
+
+template Mesh
+{
+ <3D82AB44-62DA-11CF-AB39-0020AF71E433>
+ DWORD nVertices;
+ array Vector vertices[nVertices];
+ DWORD nFaces;
+ array MeshFace faces[nFaces];
+ [ ... ]
+}
+
+template FrameTransformMatrix
+{
+ <F6F23F41-7686-11CF-8F52-0040333594A3>
+ Matrix4x4 frameMatrix;
+}
+
+template Frame
+{
+ <3D82AB46-62DA-11CF-AB39-0020AF71E433>
+ [ ... ]
+}
+
+template FloatKeys
+{
+ <10DD46A9-775B-11CF-8F52-0040333594A3>
+ DWORD nValues;
+ array FLOAT values[nValues];
+}
+
+template TimedFloatKeys
+{
+ <F406B180-7B3B-11CF-8F52-0040333594A3>
+ DWORD time;
+ FloatKeys tfkeys;
+}
+
+template AnimationKey
+{
+ <10DD46A8-775B-11CF-8F52-0040333594A3>
+ DWORD keyType;
+ DWORD nKeys;
+ array TimedFloatKeys keys[nKeys];
+}
+
+template AnimationOptions
+{
+ <E2BF56C0-840F-11CF-8F52-0040333594A3>
+ DWORD openclosed;
+ DWORD positionquality;
+}
+
+template Animation
+{
+ <3D82AB4F-62DA-11CF-AB39-0020AF71E433>
+ [ ... ]
+}
+
+template AnimationSet
+{
+ <3D82AB50-62DA-11CF-AB39-0020AF71E433>
+ [ Animation ]
+}
+
+template InlineData
+{
+ <3A23EEA0-94B1-11D0-AB39-0020AF71E433>
+ [ BINARY ]
+}
+
+template Url
+{
+ <3A23EEA1-94B1-11D0-AB39-0020AF71E433>
+ DWORD nUrls;
+ array STRING urls[nUrls];
+}
+
+template ProgressiveMesh
+{
+ <8A63C360-997D-11D0-941C-0080C80CFA7B>
+ [ Url, InlineData ]
+}
+
+template Guid
+{
+ <A42790E0-7810-11CF-8F52-0040333594A3>
+ DWORD data1;
+ WORD data2;
+ WORD data3;
+ array UCHAR data4[8];
+}
+
+template StringProperty
+{
+ <7F0F21E0-BFE1-11D1-82C0-00A0C9697271>
+ STRING key;
+ STRING value;
+}
+
+template PropertyBag
+{
+ <7F0F21E1-BFE1-11D1-82C0-00A0C9697271>
+ [ StringProperty ]
+}
+
+template ExternalVisual
+{
+ <98116AA0-BDBA-11D1-82C0-00A0C9697271>
+ Guid guidExternalVisual;
+ [ ... ]
+}
+
+template RightHanded
+{
+ <7F5D5EA0-D53A-11D1-82C0-00A0C9697271>
+ DWORD bRightHanded;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl
new file mode 100644
index 00000000..02d489af
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/row.idl
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ local,
+ object,
+ uuid(0c733ab4-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRow : IUnknown
+{
+ [local]
+ HRESULT GetColumns([in] DBORDINAL cColumns,
+ [in, out, size_is(cColumns), annotation("__inout_ecount(cColumns)")] DBCOLUMNACCESS rgColumns[]);
+
+
+ HRESULT GetSourceRowset([in, annotation("__in")] REFIID riid,
+ [out, iid_is(riid), annotation("__deref_opt_out_opt")] IUnknown **ppRowset,
+ [out, annotation("__out_opt")] HROW *phRow);
+
+ HRESULT Open([in, unique, annotation("__in_opt")] IUnknown *pUnkOuter,
+ [in, annotation("__in")] DBID *pColumnID,
+ [in, annotation("__in")] REFGUID rguidColumnType,
+ [in] DWORD dwBindFlags,
+ [in, annotation("__in")] REFIID riid,
+ [out, iid_is(riid), annotation("__deref_opt_out")] IUnknown **ppUnk);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl
new file mode 100644
index 00000000..69dd8312
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowchg.idl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ local,
+ object,
+ uuid(0c733ab5-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRowChange : IUnknown
+{
+ [local]
+ HRESULT SetColumns([in] DBORDINAL cColumns,
+ [in, out, size_is(cColumns), annotation("__in_ecount(cColumns)")] DBCOLUMNACCESS rgColumns[]);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl
new file mode 100644
index 00000000..5153e98f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpos.idl
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2013 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a94-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRowPosition : IUnknown
+{
+ typedef DWORD DBPOSITIONFLAGS;
+
+ enum DBPOSITIONFLAGSENUM {
+ DBPOSITION_OK,
+ DBPOSITION_NOROW,
+ DBPOSITION_BOF,
+ DBPOSITION_EOF
+ };
+
+ [local]
+ HRESULT ClearRowPosition();
+
+ [call_as(ClearRowPosition)]
+ HRESULT RemoteClearRowPosition([out] IErrorInfo **errorinfo);
+
+ [local]
+ HRESULT GetRowPosition([out] HCHAPTER *chapter,
+ [out] HROW *row,
+ [out] DBPOSITIONFLAGS *position_flags);
+
+ [call_as(GetRowPosition)]
+ HRESULT RemoteGetRowPosition([out] HCHAPTER *chapter,
+ [out] HROW *row,
+ [out] DBPOSITIONFLAGS *position_flags,
+ [out] IErrorInfo **errorinfo);
+ [local]
+ HRESULT GetRowset([in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **rowset);
+
+ [call_as(GetRowset)]
+ HRESULT RemoteGetRowset([in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **rowset,
+ [out] IErrorInfo **errorinfo);
+
+ [local]
+ HRESULT Initialize([in] IUnknown *rowset);
+
+ [call_as(Initialize)]
+ HRESULT RemoteInitialize([in] IUnknown *rowset,
+ [out] IErrorInfo **errorinfo);
+
+ [local]
+ HRESULT SetRowPosition([in] HCHAPTER chapter,
+ [in] HROW row,
+ [in] DBPOSITIONFLAGS flags);
+
+ [call_as(SetRowPosition)]
+ HRESULT RemoteSetRowPosition([in] HCHAPTER chapter,
+ [in] HROW row,
+ [in] DBPOSITIONFLAGS flags,
+ [out] IErrorInfo **errorinfo);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl
new file mode 100644
index 00000000..605c4aa6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rowpsc.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2013 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0997a571-126e-11d0-9f8a-00a0c9a0631e),
+ pointer_default(unique)
+]
+interface IRowPositionChange : IUnknown
+{
+ [local]
+ HRESULT OnRowPositionChange([in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cant_deny);
+
+ [call_as(OnRowPositionChange)]
+ HRESULT RemoteOnRowPositionChange([in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cant_deny,
+ [out] IErrorInfo **errorinfo);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h
new file mode 100644
index 00000000..298f39f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpc.h
@@ -0,0 +1,93 @@
+/*
+ * RPC interface
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef RPC_NO_WINDOWS_H
+# include <windows.h>
+#endif
+
+#ifndef __WINE_RPC_H
+#define __WINE_RPC_H
+
+#if defined(__powerpc__) || defined(_MAC) /* ? */
+# define __RPC_MAC__
+ /* Also define __RPC_WIN32__ to ensure compatibility */
+# define __RPC_WIN32__
+#elif defined(_WIN64)
+# define __RPC_WIN64__
+#else
+# define __RPC_WIN32__
+#endif
+
+#include <basetsd.h>
+
+#define __RPC_FAR
+#define __RPC_API __stdcall
+#define __RPC_USER __stdcall
+#define __RPC_STUB __stdcall
+#define RPC_ENTRY __stdcall
+#define RPCRTAPI
+typedef LONG RPC_STATUS;
+
+typedef void* I_RPC_HANDLE;
+
+#include <rpcdce.h>
+/* #include <rpcnsi.h> */
+#include <rpcnterr.h>
+#include <excpt.h>
+#include <winerror.h>
+#ifndef RPC_NO_WINDOWS_H
+#include <rpcasync.h>
+#endif
+
+#ifdef USE_COMPILER_EXCEPTIONS
+
+#define RpcTryExcept __try {
+#define RpcExcept(expr) } __except (expr) {
+#define RpcEndExcept }
+#define RpcTryFinally __try {
+#define RpcFinally } __finally {
+#define RpcEndFinally }
+#define RpcExceptionCode() GetExceptionCode()
+#define RpcAbnormalTermination() AbnormalTermination()
+
+#else /* USE_COMPILER_EXCEPTIONS */
+
+/* ignore exception handling for now */
+#define RpcTryExcept if (1) {
+#define RpcExcept(expr) } else {
+#define RpcEndExcept }
+#define RpcTryFinally
+#define RpcFinally
+#define RpcEndFinally
+#define RpcExceptionCode() 0
+/* #define RpcAbnormalTermination() abort() */
+
+#endif /* USE_COMPILER_EXCEPTIONS */
+
+#endif /*__WINE_RPC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h
new file mode 100644
index 00000000..3f4274d4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcasync.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RPCASYNC_H
+#define __WINE_RPCASYNC_H
+
+#ifdef RPC_NO_WINDOWS_H
+# include <windef.h>
+#endif
+
+#ifdef __RPC_WIN64__
+# include <pshpack8.h>
+#endif
+
+typedef struct tagRPC_ERROR_ENUM_HANDLE
+{
+ ULONG Signature;
+ void* CurrentPos;
+ void* Head;
+} RPC_ERROR_ENUM_HANDLE;
+
+typedef enum tagExtendedErrorParamTypes
+{
+ eeptAnsiString = 1,
+ eeptUnicodeString,
+ eeptLongVal,
+ eeptShortVal,
+ eeptPointerVal,
+ eeptNone,
+ eeptBinary
+} ExtendedErrorParamTypes;
+
+#define MaxNumberOfEEInfoParams 4
+#define RPC_EEINFO_VERSION 1
+
+typedef struct tagBinaryParam
+{
+ void *Buffer;
+ short Size;
+} BinaryParam;
+
+typedef struct tagRPC_EE_INFO_PARAM
+{
+ ExtendedErrorParamTypes ParameterType;
+ union
+ {
+ LPSTR AnsiString;
+ LPWSTR UnicodeString;
+ LONG LVal;
+ short SVal;
+ ULONGLONG PVal;
+ BinaryParam BVal;
+ } u;
+} RPC_EE_INFO_PARAM;
+
+#define EEInfoPreviousRecordsMissing 0x1
+#define EEInfoNextRecordsMissing 0x2
+#define EEInfoUseFileTime 0x4
+
+#define EEInfoGCCOM 11
+#define EEInfoGCFRS 12
+
+typedef struct tagRPC_EXTENDED_ERROR_INFO
+{
+ ULONG Version;
+ LPWSTR ComputerName;
+ ULONG ProcessID;
+ union
+ {
+ SYSTEMTIME SystemTime;
+ FILETIME FileTime;
+ } u;
+ ULONG GeneratingComponent;
+ ULONG Status;
+ USHORT DetectionLocation;
+ USHORT Flags;
+ int NumberOfParameters;
+ RPC_EE_INFO_PARAM Parameters[MaxNumberOfEEInfoParams];
+} RPC_EXTENDED_ERROR_INFO;
+
+#define RPC_ASYNC_VERSION_1_0 sizeof(RPC_ASYNC_STATE)
+
+typedef enum _RPC_NOTIFICATION_TYPES
+{
+ RpcNotificationTypeNone,
+ RpcNotificationTypeEvent,
+ RpcNotificationTypeApc,
+ RpcNotificationTypeIoc,
+ RpcNotificationTypeHwnd,
+ RpcNotificationTypeCallback,
+} RPC_NOTIFICATION_TYPES;
+
+typedef enum _RPC_ASYNC_EVENT
+{
+ RpcCallComplete,
+ RpcSendComplete,
+ RpcReceiveComplete,
+ RpcClientDisconnect,
+ RpcClientCancel,
+} RPC_ASYNC_EVENT;
+
+struct _RPC_ASYNC_STATE;
+
+typedef void RPC_ENTRY RPCNOTIFICATION_ROUTINE(struct _RPC_ASYNC_STATE *,void *,RPC_ASYNC_EVENT);
+typedef RPCNOTIFICATION_ROUTINE *PFN_RPCNOTIFICATION_ROUTINE;
+
+typedef union _RPC_ASYNC_NOTIFICATION_INFO
+{
+ struct
+ {
+ PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
+ HANDLE hThread;
+ } APC;
+ struct
+ {
+ HANDLE hIOPort;
+ DWORD dwNumberOfBytesTransferred;
+ DWORD_PTR dwCompletionKey;
+ LPOVERLAPPED lpOverlapped;
+ } IOC;
+ struct
+ {
+ HWND hWnd;
+ UINT Msg;
+ } HWND;
+ HANDLE hEvent;
+ PFN_RPCNOTIFICATION_ROUTINE NotificationRoutine;
+} RPC_ASYNC_NOTIFICATION_INFO, *PRPC_ASYNC_NOTIFICATION_INFO;
+
+#define RPC_C_NOTIFY_ON_SEND_COMPLETE 0x1
+#define RPC_C_INFINITE_TIMEOUT INFINITE
+
+typedef struct _RPC_ASYNC_STATE
+{
+ unsigned int Size;
+ ULONG Signature;
+ LONG Lock;
+ ULONG Flags;
+ void *StubInfo;
+ void *UserInfo;
+ void *RuntimeInfo;
+ RPC_ASYNC_EVENT Event;
+ RPC_NOTIFICATION_TYPES NotificationType;
+ RPC_ASYNC_NOTIFICATION_INFO u;
+ LONG_PTR Reserved[4];
+} RPC_ASYNC_STATE, *PRPC_ASYNC_STATE;
+
+#define RpcAsyncGetCallHandle(async) (((PRPC_ASYNC_STATE)async)->RuntimeInfo)
+
+#ifdef __RPC_WIN64__
+# include <poppack.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncInitializeHandle(PRPC_ASYNC_STATE,unsigned int);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncRegisterInfo(PRPC_ASYNC_STATE);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncGetCallStatus(PRPC_ASYNC_STATE);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCompleteCall(PRPC_ASYNC_STATE,void *);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCancelCall(PRPC_ASYNC_STATE,BOOL);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcAsyncCleanupThread(DWORD);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorStartEnumeration(RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNextRecord(RPC_ERROR_ENUM_HANDLE*,BOOL,RPC_EXTENDED_ERROR_INFO*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorEndEnumeration(RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorResetEnumeration(RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorGetNumberOfRecords(RPC_ERROR_ENUM_HANDLE*,int*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorSaveErrorInfo(RPC_ERROR_ENUM_HANDLE*,PVOID*,SIZE_T*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorLoadErrorInfo(PVOID,SIZE_T,RPC_ERROR_ENUM_HANDLE*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorAddRecord(RPC_EXTENDED_ERROR_INFO*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcErrorClearInformation(void);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcGetAuthorizationContextForClient(RPC_BINDING_HANDLE,BOOL,LPVOID,PLARGE_INTEGER,LUID,DWORD,PVOID,PVOID*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcFreeAuthorizationContext(PVOID*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockExclusive(RPC_BINDING_HANDLE,PVOID);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcSsContextLockShared(RPC_BINDING_HANDLE,PVOID);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncSetHandle(PRPC_MESSAGE,PRPC_ASYNC_STATE);
+RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcAsyncAbortCall(PRPC_ASYNC_STATE,ULONG);
+RPCRTAPI int RPC_ENTRY I_RpcExceptionFilter(ULONG);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h
new file mode 100644
index 00000000..8e95ec84
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdce.h
@@ -0,0 +1,635 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RPCDCE_H
+#define __WINE_RPCDCE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef IN
+#define IN
+#endif
+#ifndef OUT
+#define OUT
+#endif
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifndef UUID_DEFINED
+#define UUID_DEFINED
+typedef GUID UUID;
+#endif
+
+typedef unsigned char* RPC_CSTR;
+typedef unsigned short* RPC_WSTR;
+typedef void* RPC_AUTH_IDENTITY_HANDLE;
+typedef void* RPC_AUTHZ_HANDLE;
+typedef void* RPC_IF_HANDLE;
+typedef I_RPC_HANDLE RPC_BINDING_HANDLE;
+typedef RPC_BINDING_HANDLE handle_t;
+#define rpc_binding_handle_t RPC_BINDING_HANDLE
+#define RPC_MGR_EPV void
+
+typedef struct _RPC_BINDING_VECTOR
+{
+ ULONG Count;
+ RPC_BINDING_HANDLE BindingH[1];
+} RPC_BINDING_VECTOR;
+#define rpc_binding_vector_t RPC_BINDING_VECTOR
+
+typedef struct _UUID_VECTOR
+{
+ ULONG Count;
+ UUID *Uuid[1];
+} UUID_VECTOR;
+#define uuid_vector_t UUID_VECTOR
+
+typedef struct _RPC_IF_ID
+{
+ UUID Uuid;
+ unsigned short VersMajor;
+ unsigned short VersMinor;
+} RPC_IF_ID;
+
+typedef struct
+{
+ ULONG Count;
+ RPC_IF_ID *IfId[1];
+} RPC_IF_ID_VECTOR;
+
+typedef struct
+{
+ unsigned int Count;
+ ULONG Stats[1];
+} RPC_STATS_VECTOR;
+
+typedef struct _RPC_PROTSEQ_VECTORA
+{
+ unsigned int Count;
+ unsigned char *Protseq[1];
+} RPC_PROTSEQ_VECTORA;
+
+typedef struct _RPC_PROTSEQ_VECTORW
+{
+ unsigned int Count;
+ unsigned short *Protseq[1];
+} RPC_PROTSEQ_VECTORW;
+
+DECL_WINELIB_TYPE_AW(RPC_PROTSEQ_VECTOR)
+
+typedef I_RPC_HANDLE *RPC_EP_INQ_HANDLE;
+
+#define RPC_C_EP_ALL_ELTS 0
+#define RPC_C_EP_MATCH_BY_IF 1
+#define RPC_C_EP_MATCH_BY_OBJ 2
+#define RPC_C_EP_MATCH_BY_BOTH 3
+
+#define RPC_C_VERS_ALL 1
+#define RPC_C_VERS_COMPATIBLE 2
+#define RPC_C_VERS_EXACT 3
+#define RPC_C_VERS_MAJOR_ONLY 4
+#define RPC_C_VERS_UPTO 5
+
+#define RPC_C_BINDING_INFINITE_TIMEOUT 10
+#define RPC_C_BINDING_MIN_TIMEOUT 0
+#define RPC_C_BINDING_DEFAULT_TIMEOUT 5
+#define RPC_C_BINDING_MAX_TIMEOUT 9
+
+#define RPC_C_CANCEL_INFINITE_TIMEOUT -1
+
+#define RPC_C_LISTEN_MAX_CALLS_DEFAULT 1234
+#define RPC_C_PROTSEQ_MAX_REQS_DEFAULT 10
+
+#define RPC_PROTSEQ_TCP 0x1
+#define RPC_PROTSEQ_NMP 0x2
+#define RPC_PROTSEQ_LRPC 0x3
+#define RPC_PROTSEQ_HTTP 0x4
+
+/* RPC_POLICY EndpointFlags */
+#define RPC_C_BIND_TO_ALL_NICS 0x1
+#define RPC_C_USE_INTERNET_PORT 0x1
+#define RPC_C_USE_INTRANET_PORT 0x2
+#define RPC_C_DONT_FAIL 0x4
+
+/* RPC_POLICY EndpointFlags specific to the Falcon/RPC transport */
+#define RPC_C_MQ_TEMPORARY 0x0000
+#define RPC_C_MQ_PERMANENT 0x0001
+#define RPC_C_MQ_CLEAR_ON_OPEN 0x0002
+#define RPC_C_MQ_USE_EXISTING_SECURITY 0x0004
+#define RPC_C_MQ_AUTHN_LEVEL_NONE 0x0000
+#define RPC_C_MQ_AUTHN_LEVEL_PKT_INTEGRITY 0x0008
+#define RPC_C_MQ_AUTHN_LEVEL_PKT_PRIVACY 0x0010
+
+#define RPC_C_AUTHN_LEVEL_DEFAULT 0
+#define RPC_C_AUTHN_LEVEL_NONE 1
+#define RPC_C_AUTHN_LEVEL_CONNECT 2
+#define RPC_C_AUTHN_LEVEL_CALL 3
+#define RPC_C_AUTHN_LEVEL_PKT 4
+#define RPC_C_AUTHN_LEVEL_PKT_INTEGRITY 5
+#define RPC_C_AUTHN_LEVEL_PKT_PRIVACY 6
+
+#define RPC_C_AUTHN_NONE 0
+#define RPC_C_AUTHN_DCE_PRIVATE 1
+#define RPC_C_AUTHN_DCE_PUBLIC 2
+#define RPC_C_AUTHN_DEC_PUBLIC 4
+#define RPC_C_AUTHN_GSS_NEGOTIATE 9
+#define RPC_C_AUTHN_WINNT 10
+#define RPC_C_AUTHN_GSS_SCHANNEL 14
+#define RPC_C_AUTHN_GSS_KERBEROS 16
+#define RPC_C_AUTHN_DPA 17
+#define RPC_C_AUTHN_MSN 18
+#define RPC_C_AUTHN_DIGEST 21
+#define RPC_C_AUTHN_MQ 100
+#define RPC_C_AUTHN_DEFAULT 0xffffffff
+
+#define RPC_C_AUTHZ_NONE 0
+#define RPC_C_AUTHZ_NAME 1
+#define RPC_C_AUTHZ_DCE 2
+#define RPC_C_AUTHZ_DEFAULT 0xffffffff
+
+/* values for RPC_SECURITY_QOS*::ImpersonationType */
+#define RPC_C_IMP_LEVEL_DEFAULT 0
+#define RPC_C_IMP_LEVEL_ANONYMOUS 1
+#define RPC_C_IMP_LEVEL_IDENTIFY 2
+#define RPC_C_IMP_LEVEL_IMPERSONATE 3
+#define RPC_C_IMP_LEVEL_DELEGATE 4
+
+/* values for RPC_SECURITY_QOS*::IdentityTracking */
+#define RPC_C_QOS_IDENTITY_STATIC 0
+#define RPC_C_QOS_IDENTITY_DYNAMIC 1
+
+/* flags for RPC_SECURITY_QOS*::Capabilities */
+#define RPC_C_QOS_CAPABILITIES_DEFAULT 0x0
+#define RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH 0x1
+#define RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC 0x2
+#define RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY 0x4
+
+/* values for RPC_SECURITY_QOS*::Version */
+#define RPC_C_SECURITY_QOS_VERSION 1
+#define RPC_C_SECURITY_QOS_VERSION_1 1
+#define RPC_C_SECURITY_QOS_VERSION_2 2
+
+/* flags for RPC_SECURITY_QOS_V2::AdditionalSecurityInfoType */
+#define RPC_C_AUTHN_INFO_TYPE_HTTP 1
+
+/* flags for RPC_HTTP_TRANSPORT_CREDENTIALS::Flags */
+#define RPC_C_HTTP_FLAG_USE_SSL 0x1
+#define RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME 0x2
+
+/* values for RPC_HTTP_TRANSPORT_CREDENTIALS::AuthenticationTarget */
+#define RPC_C_HTTP_AUTHN_TARGET_SERVER 1
+#define RPC_C_HTTP_AUTHN_TARGET_PROXY 2
+
+#define RPC_C_HTTP_AUTHN_SCHEME_BASIC 0x01
+#define RPC_C_HTTP_AUTHN_SCHEME_NTLM 0x02
+#define RPC_C_HTTP_AUTHN_SCHEME_PASSPORT 0x04
+#define RPC_C_HTTP_AUTHN_SCHEME_DIGEST 0x08
+#define RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE 0x10
+
+typedef RPC_STATUS RPC_ENTRY RPC_IF_CALLBACK_FN( RPC_IF_HANDLE InterfaceUuid, void *Context );
+typedef void (__RPC_USER *RPC_AUTH_KEY_RETRIEVAL_FN)(void *, RPC_WSTR, ULONG, void **, RPC_STATUS *);
+
+typedef struct _RPC_POLICY
+{
+ unsigned int Length;
+ ULONG EndpointFlags;
+ ULONG NICFlags;
+} RPC_POLICY, *PRPC_POLICY;
+
+typedef struct _SEC_WINNT_AUTH_IDENTITY_W
+{
+ unsigned short* User;
+ ULONG UserLength;
+ unsigned short* Domain;
+ ULONG DomainLength;
+ unsigned short* Password;
+ ULONG PasswordLength;
+ ULONG Flags;
+} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
+
+typedef struct _SEC_WINNT_AUTH_IDENTITY_A
+{
+ unsigned char* User;
+ ULONG UserLength;
+ unsigned char* Domain;
+ ULONG DomainLength;
+ unsigned char* Password;
+ ULONG PasswordLength;
+ ULONG Flags;
+} SEC_WINNT_AUTH_IDENTITY_A, *PSEC_WINNT_AUTH_IDENTITY_A;
+
+typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_W
+{
+ SEC_WINNT_AUTH_IDENTITY_W *TransportCredentials;
+ ULONG Flags;
+ ULONG AuthenticationTarget;
+ ULONG NumberOfAuthnSchemes;
+ ULONG *AuthnSchemes;
+ unsigned short *ServerCertificateSubject;
+} RPC_HTTP_TRANSPORT_CREDENTIALS_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_W;
+
+typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_A
+{
+ SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials;
+ ULONG Flags;
+ ULONG AuthenticationTarget;
+ ULONG NumberOfAuthnSchemes;
+ ULONG *AuthnSchemes;
+ unsigned char *ServerCertificateSubject;
+} RPC_HTTP_TRANSPORT_CREDENTIALS_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_A;
+
+typedef struct _RPC_SECURITY_QOS {
+ ULONG Version;
+ ULONG Capabilities;
+ ULONG IdentityTracking;
+ ULONG ImpersonationType;
+} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;
+
+typedef struct _RPC_SECURITY_QOS_V2_W
+{
+ ULONG Version;
+ ULONG Capabilities;
+ ULONG IdentityTracking;
+ ULONG ImpersonationType;
+ ULONG AdditionalSecurityInfoType;
+ union
+ {
+ RPC_HTTP_TRANSPORT_CREDENTIALS_W *HttpCredentials;
+ } u;
+} RPC_SECURITY_QOS_V2_W, *PRPC_SECURITY_QOS_V2_W;
+
+typedef struct _RPC_SECURITY_QOS_V2_A
+{
+ ULONG Version;
+ ULONG Capabilities;
+ ULONG IdentityTracking;
+ ULONG ImpersonationType;
+ ULONG AdditionalSecurityInfoType;
+ union
+ {
+ RPC_HTTP_TRANSPORT_CREDENTIALS_A *HttpCredentials;
+ } u;
+} RPC_SECURITY_QOS_V2_A, *PRPC_SECURITY_QOS_V2_A;
+
+#define _SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(_SEC_WINNT_AUTH_IDENTITY_)
+#define SEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(SEC_WINNT_AUTH_IDENTITY_)
+#define PSEC_WINNT_AUTH_IDENTITY WINELIB_NAME_AW(PSEC_WINNT_AUTH_IDENTITY_)
+
+#define RPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(RPC_HTTP_TRANSPORT_CREDENTIALS_)
+#define PRPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(PRPC_HTTP_TRANSPORT_CREDENTIALS_)
+#define _RPC_HTTP_TRANSPORT_CREDENTIALS_ WINELIB_NAME_AW(_RPC_HTTP_TRANSPORT_CREDENTIALS_)
+
+#define RPC_SECURITY_QOS_V2 WINELIB_NAME_AW(RPC_SECURITY_QOS_V2_)
+#define PRPC_SECURITY_QOS_V2 WINELIB_NAME_AW(PRPC_SECURITY_QOS_V2_)
+#define _RPC_SECURITY_QOS_V2 WINELIB_NAME_AW(_RPC_SECURITY_QOS_V2_)
+
+/* SEC_WINNT_AUTH Flags */
+#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
+#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
+
+/* RpcServerRegisterIfEx Flags */
+#define RPC_IF_AUTOLISTEN 0x01
+#define RPC_IF_OLE 0x02
+#define RPC_IF_ALLOW_UNKNOWN_AUTHORITY 0x04
+#define RPC_IF_ALLOW_SECURE_ONLY 0x08
+#define RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 0x10
+#define RPC_IF_ALLOW_LOCAL_ONLY 0x20
+#define RPC_IF_SEC_NO_CACHE 0x40
+
+RPC_STATUS RPC_ENTRY DceErrorInqTextA(RPC_STATUS e, RPC_CSTR buffer);
+RPC_STATUS RPC_ENTRY DceErrorInqTextW(RPC_STATUS e, RPC_WSTR buffer);
+#define DceErrorInqText WINELIB_NAME_AW(DceErrorInqText)
+
+RPCRTAPI DECLSPEC_NORETURN void RPC_ENTRY
+ RpcRaiseException( RPC_STATUS exception );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingCopy( RPC_BINDING_HANDLE SourceBinding, RPC_BINDING_HANDLE* DestinationBinding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingFree( RPC_BINDING_HANDLE* Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR *OptionValue );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingReset( RPC_BINDING_HANDLE Binding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingSetObject( RPC_BINDING_HANDLE Binding, UUID* ObjectUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingSetOption( RPC_BINDING_HANDLE Binding, ULONG Option, ULONG_PTR OptionValue );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcObjectSetType( UUID* ObjUuid, UUID* TypeUuid );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingFromStringBindingA( RPC_CSTR StringBinding, RPC_BINDING_HANDLE* Binding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingFromStringBindingW( RPC_WSTR StringBinding, RPC_BINDING_HANDLE* Binding );
+#define RpcBindingFromStringBinding WINELIB_NAME_AW(RpcBindingFromStringBinding)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingToStringBindingA( RPC_BINDING_HANDLE Binding, RPC_CSTR *StringBinding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingToStringBindingW( RPC_BINDING_HANDLE Binding, RPC_WSTR *StringBinding );
+#define RpcBindingToStringBinding WINELIB_NAME_AW(RpcBindingToStringBinding)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingVectorFree( RPC_BINDING_VECTOR** BindingVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcStringBindingComposeA( RPC_CSTR ObjUuid, RPC_CSTR Protseq, RPC_CSTR NetworkAddr,
+ RPC_CSTR Endpoint, RPC_CSTR Options, RPC_CSTR *StringBinding );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcStringBindingComposeW( RPC_WSTR ObjUuid, RPC_WSTR Protseq, RPC_WSTR NetworkAddr,
+ RPC_WSTR Endpoint, RPC_WSTR Options, RPC_WSTR *StringBinding );
+#define RpcStringBindingCompose WINELIB_NAME_AW(RpcStringBindingCompose)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcStringBindingParseA( RPC_CSTR StringBinding, RPC_CSTR *ObjUuid, RPC_CSTR *Protseq,
+ RPC_CSTR *NetworkAddr, RPC_CSTR *Endpoint, RPC_CSTR *NetworkOptions );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcStringBindingParseW( RPC_WSTR StringBinding, RPC_WSTR *ObjUuid, RPC_WSTR *Protseq,
+ RPC_WSTR *NetworkAddr, RPC_WSTR *Endpoint, RPC_WSTR *NetworkOptions );
+#define RpcStringBindingParse WINELIB_NAME_AW(RpcStringBindingParse)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcEpResolveBinding( RPC_BINDING_HANDLE Binding, RPC_IF_HANDLE IfSpec );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcEpRegisterA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+ UUID_VECTOR* UuidVector, RPC_CSTR Annotation );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcEpRegisterW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+ UUID_VECTOR* UuidVector, RPC_WSTR Annotation );
+#define RpcEpRegister WINELIB_NAME_AW(RpcEpRegister)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcEpRegisterNoReplaceA( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+ UUID_VECTOR* UuidVector, RPC_CSTR Annotation );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcEpRegisterNoReplaceW( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+ UUID_VECTOR* UuidVector, RPC_WSTR Annotation );
+#define RpcEpRegisterNoReplace WINELIB_NAME_AW(RpcEpRegisterNoReplace)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcEpUnregister( RPC_IF_HANDLE IfSpec, RPC_BINDING_VECTOR* BindingVector,
+ UUID_VECTOR* UuidVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerListen( unsigned int MinimumCallThreads, unsigned int MaxCalls, unsigned int DontWait );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtEnableIdleCleanup( void );
+
+typedef int (__RPC_API *RPC_MGMT_AUTHORIZATION_FN)( RPC_BINDING_HANDLE, ULONG, RPC_STATUS * );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetAuthorizationFn( RPC_MGMT_AUTHORIZATION_FN );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcMgmtSetCancelTimeout(LONG);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtWaitServerListen( void );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtInqStats( RPC_BINDING_HANDLE Binding, RPC_STATS_VECTOR **Statistics );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtStopServerListening( RPC_BINDING_HANDLE Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtIsServerListening(RPC_BINDING_HANDLE Binding);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtInqIfIds( RPC_BINDING_HANDLE Binding, RPC_IF_ID_VECTOR** IfIdVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtEpEltInqBegin( RPC_BINDING_HANDLE EpBinding, ULONG InquiryType, RPC_IF_ID *IfId,
+ ULONG VersOption, UUID *ObjectUuid, RPC_EP_INQ_HANDLE *InquiryContext);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtSetComTimeout( RPC_BINDING_HANDLE Binding, unsigned int Timeout );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcMgmtSetServerStackSize( ULONG ThreadStackSize );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+RpcMgmtStatsVectorFree( RPC_STATS_VECTOR **StatsVector );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerRegisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerRegisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,
+ unsigned int Flags, unsigned int MaxCalls, RPC_IF_CALLBACK_FN* IfCallbackFn );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, RPC_MGR_EPV* MgrEpv,
+ unsigned int Flags, unsigned int MaxCalls, unsigned int MaxRpcSize, RPC_IF_CALLBACK_FN* IfCallbackFn );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUnregisterIf( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, unsigned int WaitForCallsToComplete );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUnregisterIfEx( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid, int RundownContextHandles );
+
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUseProtseqA(RPC_CSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor);
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUseProtseqW(RPC_WSTR Protseq, unsigned int MaxCalls, void *SecurityDescriptor);
+#define RpcServerUseProtseq WINELIB_NAME_AW(RpcServerUseProtseq)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUseProtseqEpA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUseProtseqEpW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor );
+#define RpcServerUseProtseqEp WINELIB_NAME_AW(RpcServerUseProtseqEp)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUseProtseqEpExA( RPC_CSTR Protseq, unsigned int MaxCalls, RPC_CSTR Endpoint, void *SecurityDescriptor,
+ PRPC_POLICY Policy );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerUseProtseqEpExW( RPC_WSTR Protseq, unsigned int MaxCalls, RPC_WSTR Endpoint, void *SecurityDescriptor,
+ PRPC_POLICY Policy );
+#define RpcServerUseProtseqEpEx WINELIB_NAME_AW(RpcServerUseProtseqEpEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerRegisterAuthInfoA( RPC_CSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,
+ void *Arg );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerRegisterAuthInfoW( RPC_WSTR ServerPrincName, ULONG AuthnSvc, RPC_AUTH_KEY_RETRIEVAL_FN GetKeyFn,
+ void *Arg );
+#define RpcServerRegisterAuthInfo WINELIB_NAME_AW(RpcServerRegisterAuthInfo)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingSetAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel,
+ ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr,
+ RPC_SECURITY_QOS *SecurityQos );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingSetAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel,
+ ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr,
+ RPC_SECURITY_QOS *SecurityQos );
+#define RpcBindingSetAuthInfoEx WINELIB_NAME_AW(RpcBindingSetAuthInfoEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingSetAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR ServerPrincName, ULONG AuthnLevel,
+ ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingSetAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR ServerPrincName, ULONG AuthnLevel,
+ ULONG AuthnSvc, RPC_AUTH_IDENTITY_HANDLE AuthIdentity, ULONG AuthzSvr );
+#define RpcBindingSetAuthInfo WINELIB_NAME_AW(RpcBindingSetAuthInfo)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthInfoExA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel,
+ ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc,
+ ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthInfoExW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel,
+ ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc,
+ ULONG RpcQosVersion, RPC_SECURITY_QOS *SecurityQOS );
+#define RpcBindingInqAuthInfoEx WINELIB_NAME_AW(RpcBindingInqAuthInfoEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthInfoA( RPC_BINDING_HANDLE Binding, RPC_CSTR * ServerPrincName, ULONG *AuthnLevel,
+ ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthInfoW( RPC_BINDING_HANDLE Binding, RPC_WSTR *ServerPrincName, ULONG *AuthnLevel,
+ ULONG *AuthnSvc, RPC_AUTH_IDENTITY_HANDLE *AuthIdentity, ULONG *AuthzSvc );
+#define RpcBindingInqAuthInfo WINELIB_NAME_AW(RpcBindingInqAuthInfo)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthClientA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+ RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+ ULONG *AuthzSvc );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthClientW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+ RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+ ULONG *AuthzSvc );
+#define RpcBindingInqAuthClient WINELIB_NAME_AW(RpcBindingInqAuthClient)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthClientExA( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+ RPC_CSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+ ULONG *AuthzSvc, ULONG Flags );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcBindingInqAuthClientExW( RPC_BINDING_HANDLE ClientBinding, RPC_AUTHZ_HANDLE *Privs,
+ RPC_WSTR *ServerPrincName, ULONG *AuthnLevel, ULONG *AuthnSvc,
+ ULONG *AuthzSvc, ULONG Flags );
+#define RpcBindingInqAuthClientEx WINELIB_NAME_AW(RpcBindingInqAuthClientEx)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThread(void*);
+RPCRTAPI RPC_STATUS RPC_ENTRY RpcCancelThreadEx(void*,LONG);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcImpersonateClient( RPC_BINDING_HANDLE Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcNetworkIsProtseqValidA( RPC_CSTR protseq );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcNetworkIsProtseqValidW( RPC_WSTR protseq );
+#define RpcNetworkIsProtseqValid WINELIB_NAME_AW(RpcNetworkIsProtseqValid)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA** protseqs );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs );
+#define RpcNetworkInqProtseqs WINELIB_NAME_AW(RpcNetworkInqProtseqs)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcProtseqVectorFreeA( RPC_PROTSEQ_VECTORA** protseqs );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcProtseqVectorFreeW( RPC_PROTSEQ_VECTORW** protseqs );
+#define RpcProtseqVectorFree WINELIB_NAME_AW(RpcProtseqVectorFree)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcRevertToSelf( void );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcRevertToSelfEx( RPC_BINDING_HANDLE Binding );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcStringFreeA(RPC_CSTR* String);
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcStringFreeW(RPC_WSTR* String);
+#define RpcStringFree WINELIB_NAME_AW(RpcStringFree)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidToStringA( UUID* Uuid, RPC_CSTR* StringUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidToStringW( UUID* Uuid, RPC_WSTR* StringUuid );
+#define UuidToString WINELIB_NAME_AW(UuidToString)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidFromStringA( RPC_CSTR StringUuid, UUID* Uuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidFromStringW( RPC_WSTR StringUuid, UUID* Uuid );
+#define UuidFromString WINELIB_NAME_AW(UuidFromString)
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidCreate( UUID* Uuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidCreateSequential( UUID* Uuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ UuidCreateNil( UUID* Uuid );
+RPCRTAPI signed int RPC_ENTRY
+ UuidCompare( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ );
+RPCRTAPI int RPC_ENTRY
+ UuidEqual( UUID* Uuid1, UUID* Uuid2, RPC_STATUS* Status_ );
+RPCRTAPI unsigned short RPC_ENTRY
+ UuidHash(UUID* Uuid, RPC_STATUS* Status_ );
+RPCRTAPI int RPC_ENTRY
+ UuidIsNil( UUID* Uuid, RPC_STATUS* Status_ );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerInqDefaultPrincNameA( ULONG AuthnSvc, RPC_CSTR *PrincName );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcServerInqDefaultPrincNameW( ULONG AuthnSvc, RPC_WSTR *PrincName );
+#define RpcServerInqDefaultPrincName WINELIB_NAME_AW(RpcServerInqDefaultPrincName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <rpcdcep.h>
+
+#endif /*__WINE_RPCDCE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h
new file mode 100644
index 00000000..b0d6f0d1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcdcep.h
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_RPCDCEP_H
+#define __WINE_RPCDCEP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _RPC_VERSION {
+ unsigned short MajorVersion;
+ unsigned short MinorVersion;
+} RPC_VERSION;
+
+typedef struct _RPC_SYNTAX_IDENTIFIER {
+ GUID SyntaxGUID;
+ RPC_VERSION SyntaxVersion;
+} RPC_SYNTAX_IDENTIFIER, *PRPC_SYNTAX_IDENTIFIER;
+
+typedef struct _RPC_MESSAGE
+{
+ RPC_BINDING_HANDLE Handle;
+ ULONG DataRepresentation;
+ void* Buffer;
+ unsigned int BufferLength;
+ unsigned int ProcNum;
+ PRPC_SYNTAX_IDENTIFIER TransferSyntax;
+ void* RpcInterfaceInformation;
+ void* ReservedForRuntime;
+ RPC_MGR_EPV* ManagerEpv;
+ void* ImportContext;
+ ULONG RpcFlags;
+} RPC_MESSAGE, *PRPC_MESSAGE;
+
+/* or'ed with ProcNum */
+#define RPC_FLAGS_VALID_BIT 0x00008000
+
+#define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *)0xfffff00d)
+
+#define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS 0x00000000
+#define RPC_CONTEXT_HANDLE_FLAGS 0x30000000
+#define RPC_CONTEXT_HANDLE_SERIALIZE 0x10000000
+#define RPC_CONTEXT_HANDLE_DONT_SERIALIZE 0x20000000
+#define RPC_TYPE_STRICT_CONTEXT_HANDLE 0x40000000
+
+#define RPC_NCA_FLAGS_DEFAULT 0x00000000
+#define RPC_NCA_FLAGS_IDEMPOTENT 0x00000001
+#define RPC_NCA_FLAGS_BROADCAST 0x00000002
+#define RPC_NCA_FLAGS_MAYBE 0x00000004
+
+#define RPC_BUFFER_COMPLETE 0x00001000
+#define RPC_BUFFER_PARTIAL 0x00002000
+#define RPC_BUFFER_EXTRA 0x00004000
+#define RPC_BUFFER_ASYNC 0x00008000
+#define RPC_BUFFER_NONOTIFY 0x00010000
+
+#define RPCFLG_MESSAGE 0x01000000
+#define RPCFLG_HAS_MULTI_SYNTAXES 0x02000000
+#define RPCFLG_HAS_CALLBACK 0x04000000
+#define RPCFLG_AUTO_COMPLETE 0x08000000
+#define RPCFLG_LOCAL_CALL 0x10000000
+#define RPCFLG_INPUT_SYNCHRONOUS 0x20000000
+#define RPCFLG_ASYNCHRONOUS 0x40000000
+#define RPCFLG_NON_NDR 0x80000000
+
+typedef void (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message);
+typedef RPC_STATUS (RPC_ENTRY *RPC_FORWARD_FUNCTION)(UUID *InterfaceId, RPC_VERSION *InterfaceVersion, UUID *ObjectId, unsigned char *Rpcpro, void **ppDestEndpoint);
+
+typedef struct
+{
+ unsigned int DispatchTableCount;
+ RPC_DISPATCH_FUNCTION* DispatchTable;
+ LONG_PTR Reserved;
+} RPC_DISPATCH_TABLE, *PRPC_DISPATCH_TABLE;
+
+typedef struct _RPC_PROTSEQ_ENDPOINT
+{
+ unsigned char* RpcProtocolSequence;
+ unsigned char* Endpoint;
+} RPC_PROTSEQ_ENDPOINT, *PRPC_PROTSEQ_ENDPOINT;
+
+#define NT351_INTERFACE_SIZE 0x40
+#define RPC_INTERFACE_HAS_PIPES 0x0001
+
+typedef struct _RPC_SERVER_INTERFACE
+{
+ unsigned int Length;
+ RPC_SYNTAX_IDENTIFIER InterfaceId;
+ RPC_SYNTAX_IDENTIFIER TransferSyntax;
+ PRPC_DISPATCH_TABLE DispatchTable;
+ unsigned int RpcProtseqEndpointCount;
+ PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
+ RPC_MGR_EPV* DefaultManagerEpv;
+ void const* InterpreterInfo;
+ unsigned int Flags;
+} RPC_SERVER_INTERFACE, *PRPC_SERVER_INTERFACE;
+
+typedef struct _RPC_CLIENT_INTERFACE
+{
+ unsigned int Length;
+ RPC_SYNTAX_IDENTIFIER InterfaceId;
+ RPC_SYNTAX_IDENTIFIER TransferSyntax;
+ PRPC_DISPATCH_TABLE DispatchTable;
+ unsigned int RpcProtseqEndpointCount;
+ PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
+ ULONG_PTR Reserved;
+ void const* InterpreterInfo;
+ unsigned int Flags;
+} RPC_CLIENT_INTERFACE, *PRPC_CLIENT_INTERFACE;
+
+#define RPC_C_OPT_COOKIE_AUTH 7
+
+typedef struct _RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR
+{
+ ULONG BufferSize;
+ char *Buffer;
+} RPC_C_OPT_COOKIE_AUTH_DESCRIPTOR;
+
+#define TRANSPORT_TYPE_CN 0x01
+#define TRANSPORT_TYPE_DG 0x02
+#define TRANSPORT_TYPE_LPC 0x04
+#define TRANSPORT_TYPE_WMSG 0x08
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcNegotiateTransferSyntax( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcGetBuffer( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcGetBufferWithObject( RPC_MESSAGE* Message, UUID* ObjectUuid );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcSendReceive( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcFreeBuffer( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcSend( RPC_MESSAGE* Message );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcReceive( RPC_MESSAGE* Message );
+
+RPCRTAPI void* RPC_ENTRY
+ I_RpcAllocate( unsigned int Size );
+RPCRTAPI void RPC_ENTRY
+ I_RpcFree( void* Object );
+
+RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
+ I_RpcGetCurrentCallHandle( void );
+
+/*
+ * The platform SDK headers don't define these functions at all if WINNT is defined
+ * The MSVC6 headers define two different sets of functions :
+ * If WINNT and MSWMSG are defined, the NT versions are defined
+ * If WINNT is not defined, the windows 9x versions are defined.
+ * Note that the prototypes for I_RpcBindingSetAsync are different for each case.
+ *
+ * Wine defaults to the WinNT case and only defines these function is MSWMSG is
+ * defined. Defining the NT functions by default causes MIDL generated proxies
+ * to not compile.
+ */
+
+#if 1 /* WINNT */
+#ifdef MSWMSG
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcServerStartListening( HWND hWnd );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcServerStopListening( void );
+/* WINNT */
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_GetThreadWindowHandle( HWND* hWnd );
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcAsyncSendReceive( RPC_MESSAGE* Message, void* Context, HWND hWnd );
+
+typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, HANDLE hSyncEvent);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn );
+
+RPCRTAPI UINT RPC_ENTRY
+ I_RpcWindowProc( void* hWnd, UINT Message, UINT wParam, ULONG lParam );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcSetWMsgEndpoint( WCHAR* Endpoint );
+
+#endif
+
+#else
+
+/* WIN9x */
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcServerStartListening( void* hWnd );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcServerStopListening( void );
+
+typedef RPC_STATUS (*RPC_BLOCKING_FN)(void* hWnd, void* Context, void* hSyncEvent);
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcBindingSetAsync( RPC_BINDING_HANDLE Binding, RPC_BLOCKING_FN BlockingFn, ULONG ServerTid );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcSetThreadParams( int fClientFree, void* Context, void* hWndClient );
+
+RPCRTAPI UINT RPC_ENTRY
+ I_RpcWindowProc( void* hWnd, unsigned int Message, unsigned int wParam, ULONG lParam );
+
+#endif
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ I_RpcBindingInqTransportType( RPC_BINDING_HANDLE Binding, unsigned int* Type );
+
+RPCRTAPI LONG RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WINE_RPCDCEP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h
new file mode 100644
index 00000000..e40b210c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcndr.h
@@ -0,0 +1,786 @@
+/*
+ * Copyright (C) 2000 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCNDR_H_VERSION__
+#define __RPCNDR_H_VERSION__ ( 500 )
+#endif
+
+#ifndef __WINE_RPCNDR_H
+#define __WINE_RPCNDR_H
+
+#include <basetsd.h>
+#include <rpcsal.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#undef CONST_VTBL
+#ifdef CONST_VTABLE
+# define CONST_VTBL const
+#else
+# define CONST_VTBL
+#endif
+
+#ifdef __cplusplus
+#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \
+ EXTERN_C const GUID DECLSPEC_SELECTANY name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#else
+#define EXTERN_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ const GUID DECLSPEC_SELECTANY name DECLSPEC_HIDDEN; \
+ const GUID DECLSPEC_SELECTANY name = \
+ { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#endif
+
+/* stupid #if can't handle casts... this __stupidity
+ is just a workaround for that limitation */
+
+#define __NDR_CHAR_REP_MASK 0x000f
+#define __NDR_INT_REP_MASK 0x00f0
+#define __NDR_FLOAT_REP_MASK 0xff00
+
+#define __NDR_IEEE_FLOAT 0x0000
+#define __NDR_VAX_FLOAT 0x0100
+#define __NDR_IBM_FLOAT 0x0300
+
+#define __NDR_ASCII_CHAR 0x0000
+#define __NDR_EBCDIC_CHAR 0x0001
+
+#define __NDR_LITTLE_ENDIAN 0x0010
+#define __NDR_BIG_ENDIAN 0x0000
+
+/* Mac's are special */
+#if defined(__RPC_MAC__)
+# define __NDR_LOCAL_DATA_REPRESENTATION \
+ (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_BIG_ENDIAN)
+#else
+# define __NDR_LOCAL_DATA_REPRESENTATION \
+ (__NDR_IEEE_FLOAT | __NDR_ASCII_CHAR | __NDR_LITTLE_ENDIAN)
+#endif
+
+#define __NDR_LOCAL_ENDIAN \
+ (__NDR_LOCAL_DATA_REPRESENTATION & __NDR_INT_REP_MASK)
+
+/* for convenience, define NDR_LOCAL_IS_BIG_ENDIAN iff it is */
+#if __NDR_LOCAL_ENDIAN == __NDR_BIG_ENDIAN
+# define NDR_LOCAL_IS_BIG_ENDIAN
+#elif __NDR_LOCAL_ENDIAN == __NDR_LITTLE_ENDIAN
+# undef NDR_LOCAL_IS_BIG_ENDIAN
+#else
+# error alien NDR_LOCAL_ENDIAN - Greg botched the defines again, please report
+#endif
+
+/* finally, do the casts like Microsoft */
+
+#define NDR_CHAR_REP_MASK ((ULONG) __NDR_CHAR_REP_MASK)
+#define NDR_INT_REP_MASK ((ULONG) __NDR_INT_REP_MASK)
+#define NDR_FLOAT_REP_MASK ((ULONG) __NDR_FLOAT_REP_MASK)
+#define NDR_IEEE_FLOAT ((ULONG) __NDR_IEEE_FLOAT)
+#define NDR_VAX_FLOAT ((ULONG) __NDR_VAX_FLOAT)
+#define NDR_IBM_FLOAT ((ULONG) __NDR_IBM_FLOAT)
+#define NDR_ASCII_CHAR ((ULONG) __NDR_ASCII_CHAR)
+#define NDR_EBCDIC_CHAR ((ULONG) __NDR_EBCDIC_CHAR)
+#define NDR_LITTLE_ENDIAN ((ULONG) __NDR_LITTLE_ENDIAN)
+#define NDR_BIG_ENDIAN ((ULONG) __NDR_BIG_ENDIAN)
+#define NDR_LOCAL_DATA_REPRESENTATION ((ULONG) __NDR_LOCAL_DATA_REPRESENTATION)
+#define NDR_LOCAL_ENDIAN ((ULONG) __NDR_LOCAL_ENDIAN)
+
+
+#define TARGET_IS_NT50_OR_LATER 1
+#define TARGET_IS_NT40_OR_LATER 1
+#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
+
+#define small char
+typedef unsigned char byte;
+typedef INT64 hyper;
+typedef UINT64 MIDL_uhyper;
+typedef unsigned char boolean;
+
+#define __RPC_CALLEE WINAPI
+#define RPC_VAR_ENTRY __cdecl
+#define NDR_SHAREABLE static
+
+#define MIDL_ascii_strlen(s) strlen(s)
+#define MIDL_ascii_strcpy(d,s) strcpy(d,s)
+#define MIDL_memset(d,v,n) memset(d,v,n)
+#define midl_user_free MIDL_user_free
+#define midl_user_allocate MIDL_user_allocate
+
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+#define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8)
+#define NdrFcLong(s) (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), \
+ (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24)
+
+#define RPC_BAD_STUB_DATA_EXCEPTION_FILTER \
+ ((RpcExceptionCode() == STATUS_ACCESS_VIOLATION) || \
+ (RpcExceptionCode() == STATUS_DATATYPE_MISALIGNMENT) || \
+ (RpcExceptionCode() == RPC_X_BAD_STUB_DATA) || \
+ (RpcExceptionCode() == RPC_S_INVALID_BOUND))
+
+typedef struct
+{
+ void *pad[2];
+ void *userContext;
+} *NDR_SCONTEXT;
+
+#define NDRSContextValue(hContext) (&(hContext)->userContext)
+#define cbNDRContext 20
+
+typedef void (__RPC_USER *NDR_RUNDOWN)(void *context);
+typedef void (__RPC_USER *NDR_NOTIFY_ROUTINE)(void);
+typedef void (__RPC_USER *NDR_NOTIFY2_ROUTINE)(boolean flag);
+
+#define DECLSPEC_UUID(x)
+#define MIDL_INTERFACE(x) struct
+
+struct _MIDL_STUB_MESSAGE;
+struct _MIDL_STUB_DESC;
+struct _FULL_PTR_XLAT_TABLES;
+struct NDR_ALLOC_ALL_NODES_CONTEXT;
+struct NDR_POINTER_QUEUE_STATE;
+
+typedef unsigned char *RPC_BUFPTR;
+typedef ULONG RPC_LENGTH;
+typedef void (__RPC_USER *EXPR_EVAL)(struct _MIDL_STUB_MESSAGE *);
+typedef const unsigned char *PFORMAT_STRING;
+
+typedef struct
+{
+ LONG Dimension;
+ ULONG *BufferConformanceMark;
+ ULONG *BufferVarianceMark;
+ ULONG *MaxCountArray;
+ ULONG *OffsetArray;
+ ULONG *ActualCountArray;
+} ARRAY_INFO, *PARRAY_INFO;
+
+typedef struct
+{
+ ULONG WireCodeset;
+ ULONG DesiredReceivingCodeset;
+ void *CSArrayInfo;
+} CS_STUB_INFO;
+
+typedef struct _NDR_PIPE_DESC *PNDR_PIPE_DESC;
+typedef struct _NDR_PIPE_MESSAGE *PNDR_PIPE_MESSAGE;
+typedef struct _NDR_ASYNC_MESSAGE *PNDR_ASYNC_MESSAGE;
+typedef struct _NDR_CORRELATION_INFO *PNDR_CORRELATION_INFO;
+
+typedef struct _MIDL_STUB_MESSAGE
+{
+ PRPC_MESSAGE RpcMsg;
+ unsigned char *Buffer;
+ unsigned char *BufferStart;
+ unsigned char *BufferEnd;
+ unsigned char *BufferMark;
+ ULONG BufferLength;
+ ULONG MemorySize;
+ unsigned char *Memory;
+ unsigned char IsClient;
+ unsigned char Pad;
+ unsigned short uFlags2;
+ int ReuseBuffer;
+ struct NDR_ALLOC_ALL_NODES_CONTEXT *pAllocAllNodesContext;
+ struct NDR_POINTER_QUEUE_STATE *pPointerQueueState;
+ int IgnoreEmbeddedPointers;
+ unsigned char *PointerBufferMark;
+ unsigned char CorrDespIncrement;
+ unsigned char uFlags;
+ unsigned short UniquePtrCount;
+ ULONG_PTR MaxCount;
+ ULONG Offset;
+ ULONG ActualCount;
+ void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
+ void (__RPC_API *pfnFree)(void *);
+ unsigned char *StackTop;
+ unsigned char *pPresentedType;
+ unsigned char *pTransmitType;
+ handle_t SavedHandle;
+ const struct _MIDL_STUB_DESC *StubDesc;
+ struct _FULL_PTR_XLAT_TABLES *FullPtrXlatTables;
+ ULONG FullPtrRefId;
+ ULONG PointerLength;
+ unsigned int fInDontFree:1;
+ unsigned int fDontCallFreeInst:1;
+ unsigned int fInOnlyParam:1;
+ unsigned int fHasReturn:1;
+ unsigned int fHasExtensions:1;
+ unsigned int fHasNewCorrDesc:1;
+ unsigned int fIsIn:1;
+ unsigned int fIsOut:1;
+ unsigned int fIsOicf:1;
+ unsigned int fBufferValid:1;
+ unsigned int fHasMemoryValidateCallback:1;
+ unsigned int fInFree:1;
+ unsigned int fNeedMCCP:1;
+ int fUnused:3;
+ int fUnused2:16;
+ DWORD dwDestContext;
+ void *pvDestContext;
+ NDR_SCONTEXT *SavedContextHandles;
+ LONG ParamNumber;
+ struct IRpcChannelBuffer *pRpcChannelBuffer;
+ PARRAY_INFO pArrayInfo;
+ ULONG *SizePtrCountArray;
+ ULONG *SizePtrOffsetArray;
+ ULONG *SizePtrLengthArray;
+ void *pArgQueue;
+ DWORD dwStubPhase;
+ void *LowStackMark;
+ PNDR_ASYNC_MESSAGE pAsyncMsg;
+ PNDR_CORRELATION_INFO pCorrInfo;
+ unsigned char *pCorrMemory;
+ void *pMemoryList;
+ CS_STUB_INFO *pCSInfo;
+ unsigned char *ConformanceMark;
+ unsigned char *VarianceMark;
+ INT_PTR Unused; /* BackingStoreLowMark on IA64 */
+ struct _NDR_PROC_CONTEXT *pContext;
+ void* ContextHandleHash;
+ void* pUserMarshalList;
+ INT_PTR Reserved51_3;
+ INT_PTR Reserved51_4;
+ INT_PTR Reserved51_5;
+} MIDL_STUB_MESSAGE, *PMIDL_STUB_MESSAGE;
+
+typedef void * (__RPC_API * GENERIC_BINDING_ROUTINE)(void *);
+typedef void (__RPC_API * GENERIC_UNBIND_ROUTINE)(void *, unsigned char *);
+
+typedef struct _GENERIC_BINDING_ROUTINE_PAIR
+{
+ GENERIC_BINDING_ROUTINE pfnBind;
+ GENERIC_UNBIND_ROUTINE pfnUnbind;
+} GENERIC_BINDING_ROUTINE_PAIR, *PGENERIC_BINDING_ROUTINE_PAIR;
+
+typedef struct __GENERIC_BINDING_INFO
+{
+ void *pObj;
+ unsigned int Size;
+ GENERIC_BINDING_ROUTINE pfnBind;
+ GENERIC_UNBIND_ROUTINE pfnUnbind;
+} GENERIC_BINDING_INFO, *PGENERIC_BINDING_INFO;
+
+typedef void (__RPC_USER *XMIT_HELPER_ROUTINE)(PMIDL_STUB_MESSAGE);
+
+typedef struct _XMIT_ROUTINE_QUINTUPLE
+{
+ XMIT_HELPER_ROUTINE pfnTranslateToXmit;
+ XMIT_HELPER_ROUTINE pfnTranslateFromXmit;
+ XMIT_HELPER_ROUTINE pfnFreeXmit;
+ XMIT_HELPER_ROUTINE pfnFreeInst;
+} XMIT_ROUTINE_QUINTUPLE, *PXMIT_ROUTINE_QUINTUPLE;
+
+typedef ULONG (__RPC_USER *USER_MARSHAL_SIZING_ROUTINE)(ULONG *, ULONG, void *);
+typedef unsigned char * (__RPC_USER *USER_MARSHAL_MARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);
+typedef unsigned char * (__RPC_USER *USER_MARSHAL_UNMARSHALLING_ROUTINE)(ULONG *, unsigned char *, void *);
+typedef void (__RPC_USER *USER_MARSHAL_FREEING_ROUTINE)(ULONG *, void *);
+
+typedef struct _USER_MARSHAL_ROUTINE_QUADRUPLE
+{
+ USER_MARSHAL_SIZING_ROUTINE pfnBufferSize;
+ USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall;
+ USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall;
+ USER_MARSHAL_FREEING_ROUTINE pfnFree;
+} USER_MARSHAL_ROUTINE_QUADRUPLE;
+
+/* 'USRC' */
+#define USER_MARSHAL_CB_SIGNATURE \
+ ( ( (DWORD)'U' << 24 ) | ( (DWORD)'S' << 16 ) | \
+ ( (DWORD)'R' << 8 ) | ( (DWORD)'C' ) )
+
+typedef enum
+{
+ USER_MARSHAL_CB_BUFFER_SIZE,
+ USER_MARSHAL_CB_MARSHALL,
+ USER_MARSHAL_CB_UNMARSHALL,
+ USER_MARSHAL_CB_FREE
+} USER_MARSHAL_CB_TYPE;
+
+typedef struct _USER_MARSHAL_CB
+{
+ ULONG Flags;
+ PMIDL_STUB_MESSAGE pStubMsg;
+ PFORMAT_STRING pReserve;
+ ULONG Signature;
+ USER_MARSHAL_CB_TYPE CBType;
+ PFORMAT_STRING pFormat;
+ PFORMAT_STRING pTypeFormat;
+} USER_MARSHAL_CB;
+
+#define USER_CALL_CTXT_MASK(f) ((f) & 0x00ff)
+#define USER_CALL_AUX_MASK(f) ((f) & 0xff00)
+#define GET_USER_DATA_REP(f) HIWORD(f)
+
+#define USER_CALL_IS_ASYNC 0x0100
+#define USER_CALL_NEW_CORRELATION_DESC 0x0200
+
+typedef struct _MALLOC_FREE_STRUCT
+{
+ void * (__WINE_ALLOC_SIZE(1) __RPC_USER *pfnAllocate)(SIZE_T);
+ void (__RPC_USER *pfnFree)(void *);
+} MALLOC_FREE_STRUCT;
+
+typedef struct _COMM_FAULT_OFFSETS
+{
+ short CommOffset;
+ short FaultOffset;
+} COMM_FAULT_OFFSETS;
+
+typedef struct _MIDL_STUB_DESC
+{
+ void *RpcInterfaceInformation;
+ void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
+ void (__RPC_API *pfnFree)(void *);
+ union {
+ handle_t *pAutoHandle;
+ handle_t *pPrimitiveHandle;
+ PGENERIC_BINDING_INFO pGenericBindingInfo;
+ } IMPLICIT_HANDLE_INFO;
+ const NDR_RUNDOWN *apfnNdrRundownRoutines;
+ const GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs;
+ const EXPR_EVAL *apfnExprEval;
+ const XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple;
+ const unsigned char *pFormatTypes;
+ int fCheckBounds;
+ ULONG Version;
+ MALLOC_FREE_STRUCT *pMallocFreeStruct;
+ LONG MIDLVersion;
+ const COMM_FAULT_OFFSETS *CommFaultOffsets;
+ const USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple;
+ const NDR_NOTIFY_ROUTINE *NotifyRoutineTable;
+ ULONG_PTR mFlags;
+ ULONG_PTR Reserved3;
+ ULONG_PTR Reserved4;
+ ULONG_PTR Reserved5;
+} MIDL_STUB_DESC;
+typedef const MIDL_STUB_DESC *PMIDL_STUB_DESC;
+
+typedef struct _MIDL_FORMAT_STRING
+{
+ short Pad;
+#if defined(__GNUC__)
+ unsigned char Format[0];
+#else
+ unsigned char Format[1];
+#endif
+} MIDL_FORMAT_STRING;
+
+typedef struct _MIDL_SYNTAX_INFO
+{
+ RPC_SYNTAX_IDENTIFIER TransferSyntax;
+ RPC_DISPATCH_TABLE* DispatchTable;
+ PFORMAT_STRING ProcString;
+ const unsigned short* FmtStringOffset;
+ PFORMAT_STRING TypeString;
+ const void* aUserMarshalQuadruple;
+ ULONG_PTR pReserved1;
+ ULONG_PTR pReserved2;
+} MIDL_SYNTAX_INFO, *PMIDL_SYNTAX_INFO;
+
+typedef void (__RPC_API *STUB_THUNK)( PMIDL_STUB_MESSAGE );
+
+#ifdef WINE_STRICT_PROTOTYPES
+typedef LONG (__RPC_API *SERVER_ROUTINE)(void);
+#else
+typedef LONG (__RPC_API *SERVER_ROUTINE)();
+#endif
+
+typedef struct _MIDL_SERVER_INFO_
+{
+ PMIDL_STUB_DESC pStubDesc;
+ const SERVER_ROUTINE *DispatchTable;
+ PFORMAT_STRING ProcString;
+ const unsigned short *FmtStringOffset;
+ const STUB_THUNK *ThunkTable;
+ PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
+ ULONG_PTR nCount;
+ PMIDL_SYNTAX_INFO pSyntaxInfo;
+} MIDL_SERVER_INFO, *PMIDL_SERVER_INFO;
+
+typedef struct _MIDL_STUBLESS_PROXY_INFO
+{
+ PMIDL_STUB_DESC pStubDesc;
+ PFORMAT_STRING ProcFormatString;
+ const unsigned short *FormatStringOffset;
+ PRPC_SYNTAX_IDENTIFIER pTransferSyntax;
+ ULONG_PTR nCount;
+ PMIDL_SYNTAX_INFO pSyntaxInfo;
+} MIDL_STUBLESS_PROXY_INFO, *PMIDL_STUBLESS_PROXY_INFO;
+
+
+#if defined(__i386__) && !defined(__MSC_VER) && !defined(__MINGW32__) && !defined(__CYGWIN__)
+/* Calling convention for returning structures/unions is different between Windows and gcc on i386 */
+typedef LONG_PTR CLIENT_CALL_RETURN;
+#else
+typedef union _CLIENT_CALL_RETURN
+{
+ void *Pointer;
+ LONG_PTR Simple;
+} CLIENT_CALL_RETURN;
+#endif
+
+typedef enum {
+ STUB_UNMARSHAL,
+ STUB_CALL_SERVER,
+ STUB_MARSHAL,
+ STUB_CALL_SERVER_NO_HRESULT
+} STUB_PHASE;
+
+typedef enum {
+ PROXY_CALCSIZE,
+ PROXY_GETBUFFER,
+ PROXY_MARSHAL,
+ PROXY_SENDRECEIVE,
+ PROXY_UNMARSHAL
+} PROXY_PHASE;
+
+typedef enum {
+ XLAT_SERVER = 1,
+ XLAT_CLIENT
+} XLAT_SIDE;
+
+typedef struct _FULL_PTR_TO_REFID_ELEMENT {
+ struct _FULL_PTR_TO_REFID_ELEMENT *Next;
+ void *Pointer;
+ ULONG RefId;
+ unsigned char State;
+} FULL_PTR_TO_REFID_ELEMENT, *PFULL_PTR_TO_REFID_ELEMENT;
+
+/* Full pointer translation tables */
+typedef struct _FULL_PTR_XLAT_TABLES {
+ struct {
+ void **XlatTable;
+ unsigned char *StateTable;
+ ULONG NumberOfEntries;
+ } RefIdToPointer;
+
+ struct {
+ PFULL_PTR_TO_REFID_ELEMENT *XlatTable;
+ ULONG NumberOfBuckets;
+ ULONG HashMask;
+ } PointerToRefId;
+
+ ULONG NextRefId;
+ XLAT_SIDE XlatSide;
+} FULL_PTR_XLAT_TABLES, *PFULL_PTR_XLAT_TABLES;
+
+struct IRpcStubBuffer;
+
+typedef ULONG error_status_t;
+typedef void * NDR_CCONTEXT;
+
+typedef struct _SCONTEXT_QUEUE {
+ ULONG NumberOfObjects;
+ NDR_SCONTEXT *ArrayOfObjects;
+} SCONTEXT_QUEUE, *PSCONTEXT_QUEUE;
+
+typedef struct _NDR_USER_MARSHAL_INFO_LEVEL1
+{
+ void *Buffer;
+ ULONG BufferSize;
+ void * (__WINE_ALLOC_SIZE(1) __RPC_API *pfnAllocate)(SIZE_T);
+ void (__RPC_API *pfnFree)(void *);
+ struct IRpcChannelBuffer *pRpcChannelBuffer;
+ ULONG_PTR Reserved[5];
+} NDR_USER_MARSHAL_INFO_LEVEL1;
+
+typedef struct _NDR_USER_MARSHAL_INFO
+{
+ ULONG InformationLevel;
+ union
+ {
+ NDR_USER_MARSHAL_INFO_LEVEL1 Level1;
+ } DUMMYUNIONNAME1;
+} NDR_USER_MARSHAL_INFO;
+
+/* Context Handles */
+
+RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY
+ NDRCContextBinding( NDR_CCONTEXT CContext );
+
+RPCRTAPI void RPC_ENTRY
+ NDRCContextMarshall( NDR_CCONTEXT CContext, void *pBuff );
+
+RPCRTAPI void RPC_ENTRY
+ NDRCContextUnmarshall( NDR_CCONTEXT *pCContext, RPC_BINDING_HANDLE hBinding,
+ void *pBuff, ULONG DataRepresentation );
+
+RPCRTAPI void RPC_ENTRY
+ NDRSContextMarshall( NDR_SCONTEXT CContext, void *pBuff, NDR_RUNDOWN userRunDownIn );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+ NDRSContextUnmarshall( void *pBuff, ULONG DataRepresentation );
+
+RPCRTAPI void RPC_ENTRY
+ NDRSContextMarshallEx( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
+ void *pBuff, NDR_RUNDOWN userRunDownIn );
+
+RPCRTAPI void RPC_ENTRY
+ NDRSContextMarshall2( RPC_BINDING_HANDLE BindingHandle, NDR_SCONTEXT CContext,
+ void *pBuff, NDR_RUNDOWN userRunDownIn, void * CtxGuard,
+ ULONG Flags );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+ NDRSContextUnmarshallEx( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
+ ULONG DataRepresentation );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+ NDRSContextUnmarshall2( RPC_BINDING_HANDLE BindingHandle, void *pBuff,
+ ULONG DataRepresentation, void *CtxGuard,
+ ULONG Flags );
+
+RPCRTAPI void RPC_ENTRY
+ NdrClientContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT ContextHandle, int fCheck );
+
+RPCRTAPI void RPC_ENTRY
+ NdrClientContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_CCONTEXT* pContextHandle,
+ RPC_BINDING_HANDLE BindHandle );
+
+RPCRTAPI void RPC_ENTRY
+ NdrServerContextMarshall ( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle, NDR_RUNDOWN RundownRoutine );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+ NdrServerContextUnmarshall( PMIDL_STUB_MESSAGE pStubMsg );
+
+RPCRTAPI void RPC_ENTRY
+ NdrContextHandleSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+ NdrContextHandleInitialize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+RPCRTAPI void RPC_ENTRY
+ NdrServerContextNewMarshall( PMIDL_STUB_MESSAGE pStubMsg, NDR_SCONTEXT ContextHandle,
+ NDR_RUNDOWN RundownRoutine, PFORMAT_STRING pFormat );
+
+RPCRTAPI NDR_SCONTEXT RPC_ENTRY
+ NdrServerContextNewUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ RpcSmDestroyClientContext( void **ContextHandle );
+
+RPCRTAPI void RPC_ENTRY
+ RpcSsDestroyClientContext( void **ContextHandle );
+
+RPCRTAPI void RPC_ENTRY
+ NdrSimpleTypeMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
+RPCRTAPI void RPC_ENTRY
+ NdrSimpleTypeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, unsigned char FormatChar );
+
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrByteCountPointerMarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrByteCountPointerUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );
+RPCRTAPI void RPC_ENTRY
+ NdrByteCountPointerBufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+RPCRTAPI void RPC_ENTRY
+ NdrByteCountPointerFree( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrRangeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc );
+
+/* while MS declares each prototype separately, I prefer to use macros for this kind of thing instead */
+#define SIMPLE_TYPE_MARSHAL(type) \
+RPCRTAPI unsigned char* RPC_ENTRY \
+ Ndr##type##Marshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
+RPCRTAPI unsigned char* RPC_ENTRY \
+ Ndr##type##Unmarshall( PMIDL_STUB_MESSAGE pStubMsg, unsigned char** ppMemory, PFORMAT_STRING pFormat, unsigned char fMustAlloc ); \
+RPCRTAPI void RPC_ENTRY \
+ Ndr##type##BufferSize( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat ); \
+RPCRTAPI ULONG RPC_ENTRY \
+ Ndr##type##MemorySize( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+#define TYPE_MARSHAL(type) \
+ SIMPLE_TYPE_MARSHAL(type) \
+RPCRTAPI void RPC_ENTRY \
+ Ndr##type##Free( PMIDL_STUB_MESSAGE pStubMsg, unsigned char* pMemory, PFORMAT_STRING pFormat );
+
+TYPE_MARSHAL(Pointer)
+TYPE_MARSHAL(SimpleStruct)
+TYPE_MARSHAL(ConformantStruct)
+TYPE_MARSHAL(ConformantVaryingStruct)
+TYPE_MARSHAL(ComplexStruct)
+TYPE_MARSHAL(FixedArray)
+TYPE_MARSHAL(ConformantArray)
+TYPE_MARSHAL(ConformantVaryingArray)
+TYPE_MARSHAL(VaryingArray)
+TYPE_MARSHAL(ComplexArray)
+TYPE_MARSHAL(EncapsulatedUnion)
+TYPE_MARSHAL(NonEncapsulatedUnion)
+TYPE_MARSHAL(XmitOrRepAs)
+TYPE_MARSHAL(UserMarshal)
+TYPE_MARSHAL(InterfacePointer)
+
+SIMPLE_TYPE_MARSHAL(ConformantString)
+SIMPLE_TYPE_MARSHAL(NonConformantString)
+
+#undef TYPE_MARSHAL
+#undef SIMPLE_TYPE_MARSHAL
+
+RPCRTAPI void RPC_ENTRY
+ NdrCorrelationInitialize( PMIDL_STUB_MESSAGE pStubMsg, void *pMemory, ULONG CacheSize, ULONG flags );
+RPCRTAPI void RPC_ENTRY
+ NdrCorrelationPass( PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrCorrelationFree( PMIDL_STUB_MESSAGE pStubMsg );
+
+RPCRTAPI void RPC_ENTRY
+ NdrConvert2( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, LONG NumberParams );
+RPCRTAPI void RPC_ENTRY
+ NdrConvert( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+
+#define USER_MARSHAL_FC_BYTE 1
+#define USER_MARSHAL_FC_CHAR 2
+#define USER_MARSHAL_FC_SMALL 3
+#define USER_MARSHAL_FC_USMALL 4
+#define USER_MARSHAL_FC_WCHAR 5
+#define USER_MARSHAL_FC_SHORT 6
+#define USER_MARSHAL_FC_USHORT 7
+#define USER_MARSHAL_FC_LONG 8
+#define USER_MARSHAL_FC_ULONG 9
+#define USER_MARSHAL_FC_FLOAT 10
+#define USER_MARSHAL_FC_HYPER 11
+#define USER_MARSHAL_FC_DOUBLE 12
+
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrUserMarshalSimpleTypeConvert( ULONG *pFlags, unsigned char *pBuffer, unsigned char FormatChar );
+
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+ NdrClientCall2( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+ NdrClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+ NdrAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+CLIENT_CALL_RETURN RPC_VAR_ENTRY
+ NdrDcomAsyncClientCall( PMIDL_STUB_DESC pStubDescriptor, PFORMAT_STRING pFormat, ... );
+
+RPCRTAPI void RPC_ENTRY
+ NdrServerCall2( PRPC_MESSAGE pRpcMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrServerCall( PRPC_MESSAGE pRpcMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrAsyncServerCall( PRPC_MESSAGE pRpcMsg );
+
+RPCRTAPI LONG RPC_ENTRY
+ NdrStubCall2( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+RPCRTAPI LONG RPC_ENTRY
+ NdrStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+RPCRTAPI LONG RPC_ENTRY
+ NdrAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+RPCRTAPI LONG RPC_ENTRY
+ NdrDcomAsyncStubCall( struct IRpcStubBuffer* pThis, struct IRpcChannelBuffer* pChannel, PRPC_MESSAGE pRpcMsg, DWORD * pdwStubPhase );
+
+RPCRTAPI void* RPC_ENTRY
+ NdrAllocate( PMIDL_STUB_MESSAGE pStubMsg, SIZE_T Len ) __WINE_ALLOC_SIZE(2);
+
+RPCRTAPI void RPC_ENTRY
+ NdrClearOutParameters( PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat, void *ArgAddr );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg, ULONG *pCommStatus,
+ ULONG *pFaultStatus, RPC_STATUS Status_ );
+
+RPCRTAPI void* RPC_ENTRY
+ NdrOleAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
+RPCRTAPI void RPC_ENTRY
+ NdrOleFree( void* NodeToFree );
+
+RPCRTAPI void RPC_ENTRY
+ NdrClientInitialize( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
+RPCRTAPI void RPC_ENTRY
+ NdrClientInitializeNew( PRPC_MESSAGE pRpcMessage, PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDesc, unsigned int ProcNum );
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrServerInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrServerInitializeNew( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc );
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrServerInitializeUnmarshall( PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc, PRPC_MESSAGE pRpcMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrServerInitializeMarshall( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrServerMarshall( struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat );
+RPCRTAPI void RPC_ENTRY
+ NdrServerUnmarshall( struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg,
+ PMIDL_STUB_MESSAGE pStubMsg, PMIDL_STUB_DESC pStubDesc,
+ PFORMAT_STRING pFormat, void *pParamList );
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrGetBuffer( PMIDL_STUB_MESSAGE stubmsg, ULONG buflen, RPC_BINDING_HANDLE handle );
+RPCRTAPI void RPC_ENTRY
+ NdrFreeBuffer( PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI unsigned char* RPC_ENTRY
+ NdrSendReceive( PMIDL_STUB_MESSAGE stubmsg, unsigned char *buffer );
+
+RPCRTAPI unsigned char * RPC_ENTRY
+ NdrNsGetBuffer( PMIDL_STUB_MESSAGE pStubMsg, ULONG BufferLength, RPC_BINDING_HANDLE Handle );
+RPCRTAPI unsigned char * RPC_ENTRY
+ NdrNsSendReceive( PMIDL_STUB_MESSAGE pStubMsg, unsigned char *pBufferEnd, RPC_BINDING_HANDLE *pAutoHandle );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ NdrGetDcomProtocolVersion( PMIDL_STUB_MESSAGE pStubMsg, RPC_VERSION *pVersion );
+
+RPCRTAPI PFULL_PTR_XLAT_TABLES RPC_ENTRY
+ NdrFullPointerXlatInit( ULONG NumberOfPointers, XLAT_SIDE XlatSide );
+RPCRTAPI void RPC_ENTRY
+ NdrFullPointerXlatFree( PFULL_PTR_XLAT_TABLES pXlatTables );
+RPCRTAPI int RPC_ENTRY
+ NdrFullPointerQueryPointer( PFULL_PTR_XLAT_TABLES pXlatTables, void *pPointer,
+ unsigned char QueryType, ULONG *pRefId );
+RPCRTAPI int RPC_ENTRY
+ NdrFullPointerQueryRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId,
+ unsigned char QueryType, void **ppPointer );
+RPCRTAPI void RPC_ENTRY
+ NdrFullPointerInsertRefId( PFULL_PTR_XLAT_TABLES pXlatTables, ULONG RefId, void *pPointer );
+RPCRTAPI int RPC_ENTRY
+ NdrFullPointerFree( PFULL_PTR_XLAT_TABLES pXlatTables, void *Pointer );
+
+RPCRTAPI void RPC_ENTRY
+ NdrRpcSsEnableAllocate( PMIDL_STUB_MESSAGE pMessage );
+RPCRTAPI void RPC_ENTRY
+ NdrRpcSsDisableAllocate( PMIDL_STUB_MESSAGE pMessage );
+RPCRTAPI void RPC_ENTRY
+ NdrRpcSmSetClientToOsf( PMIDL_STUB_MESSAGE pMessage );
+RPCRTAPI void * RPC_ENTRY
+ NdrRpcSmClientAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
+RPCRTAPI void RPC_ENTRY
+ NdrRpcSmClientFree( void *NodeToFree );
+RPCRTAPI void * RPC_ENTRY
+ NdrRpcSsDefaultAllocate( SIZE_T Size ) __WINE_ALLOC_SIZE(1);
+RPCRTAPI void RPC_ENTRY
+ NdrRpcSsDefaultFree( void *NodeToFree );
+
+RPCRTAPI RPC_STATUS RPC_ENTRY
+ NdrGetUserMarshalInfo( ULONG *pFlags, ULONG InformationLevel, NDR_USER_MARSHAL_INFO *pMarshalInfo );
+
+#ifdef __cplusplus
+}
+#endif
+#endif /*__WINE_RPCNDR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h
new file mode 100644
index 00000000..363b9591
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcnterr.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2001 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCNTERR_H__
+#define __RPCNTERR_H__
+
+#define RPC_S_OK ERROR_SUCCESS
+#define RPC_S_INVALID_ARG ERROR_INVALID_PARAMETER
+#define RPC_S_OUT_OF_MEMORY ERROR_OUTOFMEMORY
+#define RPC_S_OUT_OF_THREADS ERROR_MAX_THRDS_REACHED
+#define RPC_S_INVALID_LEVEL ERROR_INVALID_PARAMETER
+#define RPC_S_BUFFER_TOO_SMALL ERROR_INSUFFICIENT_BUFFER
+#define RPC_S_INVALID_SECURITY_DESC ERROR_INVALID_SECURITY_DESCR
+#define RPC_S_ACCESS_DENIED ERROR_ACCESS_DENIED
+#define RPC_S_SERVER_OUT_OF_MEMORY ERROR_NOT_ENOUGH_SERVER_MEMORY
+#define RPC_S_ASYNC_CALL_PENDING ERROR_IO_PENDING
+#define RPC_S_UNKNOWN_PRINCIPAL ERROR_NONE_MAPPED
+#define RPC_S_TIMEOUT ERROR_TIMEOUT
+
+#define RPC_X_NO_MEMORY RPC_S_OUT_OF_MEMORY
+#define RPC_X_INVALID_BOUND RPC_S_INVALID_BOUND
+#define RPC_X_INVALID_TAG RPC_S_INVALID_TAG
+#define RPC_X_ENUM_VALUE_TOO_LARGE RPC_X_ENUM_VALUE_OUT_OF_RANGE
+#define RPC_X_SS_CONTEXT_MISMATCH ERROR_INVALID_HANDLE
+#define RPC_X_INVALID_BUFFER ERROR_INVALID_USER_BUFFER
+#define RPC_X_PIPE_APP_MEMORY ERROR_OUTOFMEMORY
+#define RPC_X_INVALID_PIPE_OPERATION RPC_X_WRONG_PIPE_ORDER
+
+#endif /* __RPCNTERR_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h
new file mode 100644
index 00000000..75a0ee72
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcproxy.h
@@ -0,0 +1,394 @@
+/*
+ * Copyright (C) 2001 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCPROXY_H_VERSION__
+/* FIXME: Find an appropriate version number. I guess something is better than nothing */
+#define __RPCPROXY_H_VERSION__ ( 399 )
+#endif
+
+#ifndef __WINE_RPCPROXY_H
+#define __WINE_RPCPROXY_H
+
+#define __midl_proxy
+
+#include <basetsd.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;
+typedef struct tagCInterfaceProxyVtbl *PCInterfaceProxyVtblList;
+typedef const char *PCInterfaceName;
+typedef int __stdcall IIDLookupRtn( const IID *pIID, int *pIndex );
+typedef IIDLookupRtn *PIIDLookup;
+
+typedef struct tagProxyFileInfo
+{
+ const PCInterfaceProxyVtblList *pProxyVtblList;
+ const PCInterfaceStubVtblList *pStubVtblList;
+ const PCInterfaceName *pNamesArray;
+ const IID **pDelegatedIIDs;
+ const PIIDLookup pIIDLookupRtn;
+ unsigned short TableSize;
+ unsigned short TableVersion;
+ const IID **pAsyncIIDLookup;
+ LONG_PTR Filler2;
+ LONG_PTR Filler3;
+ LONG_PTR Filler4;
+} ProxyFileInfo;
+
+typedef ProxyFileInfo ExtendedProxyFileInfo;
+
+typedef struct tagCInterfaceProxyHeader
+{
+#ifdef USE_STUBLESS_PROXY
+ const void *pStublessProxyInfo;
+#endif
+ const IID *piid;
+} CInterfaceProxyHeader;
+
+#define CINTERFACE_PROXY_VTABLE(n) \
+ struct \
+ { \
+ CInterfaceProxyHeader header; \
+ void *Vtbl[n]; \
+ }
+
+typedef struct tagCInterfaceProxyVtbl
+{
+ CInterfaceProxyHeader header;
+#if defined(__GNUC__)
+ void *Vtbl[0];
+#else
+ void *Vtbl[1];
+#endif
+} CInterfaceProxyVtbl;
+
+typedef void (__RPC_STUB *PRPC_STUB_FUNCTION)(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *pdwStubPhase);
+
+typedef struct tagCInterfaceStubHeader
+{
+ const IID *piid;
+ const MIDL_SERVER_INFO *pServerInfo;
+ ULONG DispatchTableCount;
+ const PRPC_STUB_FUNCTION *pDispatchTable;
+} CInterfaceStubHeader;
+
+typedef struct tagCInterfaceStubVtbl
+{
+ CInterfaceStubHeader header;
+ IRpcStubBufferVtbl Vtbl;
+} CInterfaceStubVtbl;
+
+typedef struct tagCStdStubBuffer
+{
+ const IRpcStubBufferVtbl *lpVtbl;
+ LONG RefCount;
+ struct IUnknown *pvServerObject;
+ const struct ICallFactoryVtbl *pCallFactoryVtbl;
+ const IID *pAsyncIID;
+ struct IPSFactoryBuffer *pPSFactory;
+} CStdStubBuffer;
+
+typedef struct tagCStdPSFactoryBuffer
+{
+ const IPSFactoryBufferVtbl *lpVtbl;
+ LONG RefCount;
+ const ProxyFileInfo **pProxyFileList;
+ LONG Filler1;
+} CStdPSFactoryBuffer;
+
+#define STUB_FORWARDING_FUNCTION NdrStubForwardingFunction
+
+ULONG STDMETHODCALLTYPE CStdStubBuffer2_Release(IRpcStubBuffer *This) DECLSPEC_HIDDEN;
+ULONG STDMETHODCALLTYPE NdrCStdStubBuffer2_Release(IRpcStubBuffer *This, IPSFactoryBuffer *pPSF);
+
+#define CStdStubBuffer_DELEGATING_METHODS 0, 0, CStdStubBuffer2_Release, 0, 0, 0, 0, 0, 0, 0
+
+
+HRESULT WINAPI
+ CStdStubBuffer_QueryInterface( IRpcStubBuffer *This, REFIID riid, void **ppvObject );
+ULONG WINAPI
+ CStdStubBuffer_AddRef( IRpcStubBuffer *This );
+ULONG WINAPI
+ CStdStubBuffer_Release( IRpcStubBuffer *This ) DECLSPEC_HIDDEN;
+ULONG WINAPI
+ NdrCStdStubBuffer_Release( IRpcStubBuffer *This, IPSFactoryBuffer *pPSF );
+HRESULT WINAPI
+ CStdStubBuffer_Connect( IRpcStubBuffer *This, IUnknown *pUnkServer );
+void WINAPI
+ CStdStubBuffer_Disconnect( IRpcStubBuffer *This );
+HRESULT WINAPI
+ CStdStubBuffer_Invoke( IRpcStubBuffer *This, RPCOLEMESSAGE *pRpcMsg, IRpcChannelBuffer *pRpcChannelBuffer );
+IRpcStubBuffer * WINAPI
+ CStdStubBuffer_IsIIDSupported( IRpcStubBuffer *This, REFIID riid );
+ULONG WINAPI
+ CStdStubBuffer_CountRefs( IRpcStubBuffer *This );
+HRESULT WINAPI
+ CStdStubBuffer_DebugServerQueryInterface( IRpcStubBuffer *This, void **ppv );
+void WINAPI
+ CStdStubBuffer_DebugServerRelease( IRpcStubBuffer *This, void *pv );
+
+#define CStdStubBuffer_METHODS \
+ CStdStubBuffer_QueryInterface, \
+ CStdStubBuffer_AddRef, \
+ CStdStubBuffer_Release, \
+ CStdStubBuffer_Connect, \
+ CStdStubBuffer_Disconnect, \
+ CStdStubBuffer_Invoke, \
+ CStdStubBuffer_IsIIDSupported, \
+ CStdStubBuffer_CountRefs, \
+ CStdStubBuffer_DebugServerQueryInterface, \
+ CStdStubBuffer_DebugServerRelease
+
+RPCRTAPI void RPC_ENTRY
+ NdrProxyInitialize( void *This, PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDescriptor, unsigned int ProcNum );
+RPCRTAPI void RPC_ENTRY
+ NdrProxyGetBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrProxySendReceive( void *This, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI void RPC_ENTRY
+ NdrProxyFreeBuffer( void *This, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI HRESULT RPC_ENTRY
+ NdrProxyErrorHandler( DWORD dwExceptionCode );
+
+RPCRTAPI void RPC_ENTRY
+ NdrStubInitialize( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer );
+RPCRTAPI void RPC_ENTRY
+ NdrStubInitializePartial( PRPC_MESSAGE pRpcMsg, PMIDL_STUB_MESSAGE pStubMsg,
+ PMIDL_STUB_DESC pStubDescriptor, IRpcChannelBuffer *pRpcChannelBuffer,
+ ULONG RequestedBufferSize );
+void __RPC_STUB NdrStubForwardingFunction( IRpcStubBuffer *This, IRpcChannelBuffer *pChannel,
+ PRPC_MESSAGE pMsg, DWORD *pdwStubPhase );
+RPCRTAPI void RPC_ENTRY
+ NdrStubGetBuffer( IRpcStubBuffer *This, IRpcChannelBuffer *pRpcChannelBuffer, PMIDL_STUB_MESSAGE pStubMsg );
+RPCRTAPI HRESULT RPC_ENTRY
+ NdrStubErrorHandler( DWORD dwExceptionCode );
+
+RPCRTAPI HRESULT RPC_ENTRY
+ NdrDllGetClassObject( REFCLSID rclsid, REFIID riid, void **ppv, const ProxyFileInfo **pProxyFileList,
+ const CLSID *pclsid, CStdPSFactoryBuffer *pPSFactoryBuffer );
+RPCRTAPI HRESULT RPC_ENTRY
+ NdrDllCanUnloadNow( CStdPSFactoryBuffer *pPSFactoryBuffer );
+
+RPCRTAPI HRESULT RPC_ENTRY
+ NdrDllRegisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid );
+RPCRTAPI HRESULT RPC_ENTRY
+ NdrDllUnregisterProxy( HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid );
+
+HRESULT __wine_register_resources( HMODULE module ) DECLSPEC_HIDDEN;
+HRESULT __wine_unregister_resources( HMODULE module ) DECLSPEC_HIDDEN;
+
+#define CSTDSTUBBUFFERRELEASE(pFactory) \
+ULONG WINAPI CStdStubBuffer_Release(IRpcStubBuffer *This) \
+ { return NdrCStdStubBuffer_Release(This, (IPSFactoryBuffer *)pFactory); }
+
+#ifdef PROXY_DELEGATION
+#define CSTDSTUBBUFFER2RELEASE(pFactory) \
+ULONG WINAPI CStdStubBuffer2_Release(IRpcStubBuffer *This) \
+ { return NdrCStdStubBuffer2_Release(This, (IPSFactoryBuffer *)pFactory); }
+#else
+#define CSTDSTUBBUFFER2RELEASE(pFactory)
+#endif
+
+#define IID_GENERIC_CHECK_IID(name,pIID,index) memcmp(pIID, name##_ProxyVtblList[index]->header.piid, sizeof(IID))
+
+/*
+ * In these macros, BS stands for Binary Search. MIDL uses these to
+ * "unroll" a binary search into the module's IID_Lookup function.
+ * However, I haven't bothered to reimplement that stuff yet;
+ * I've just implemented a linear search for now.
+ */
+#define IID_BS_LOOKUP_SETUP \
+ int c;
+#define IID_BS_LOOKUP_INITIAL_TEST(name, sz, split)
+#define IID_BS_LOOKUP_NEXT_TEST(name, split)
+#define IID_BS_LOOKUP_RETURN_RESULT(name, sz, index) \
+ for (c=0; c<sz; c++) if (!name##_CHECK_IID(c)) { (index)=c; return 1; } \
+ return 0;
+
+/* macros used in dlldata.c files */
+#define EXTERN_PROXY_FILE(proxy) \
+ EXTERN_C const ProxyFileInfo proxy##_ProxyFileInfo DECLSPEC_HIDDEN;
+
+#define PROXYFILE_LIST_START \
+ const ProxyFileInfo * aProxyFileList[] DECLSPEC_HIDDEN = \
+ {
+
+#define REFERENCE_PROXY_FILE(proxy) \
+ & proxy##_ProxyFileInfo
+
+#define PROXYFILE_LIST_END \
+ NULL \
+ };
+
+
+/* define PROXY_CLSID to use an existing CLSID */
+/* define PROXY_CLSID_IS to specify the CLSID data of the PSFactoryBuffer */
+/* define neither to use the GUID of the first interface */
+#ifdef PROXY_CLSID
+# define CLSID_PSFACTORYBUFFER extern CLSID PROXY_CLSID DECLSPEC_HIDDEN;
+#else
+# ifdef PROXY_CLSID_IS
+# define CLSID_PSFACTORYBUFFER const CLSID CLSID_PSFactoryBuffer DECLSPEC_HIDDEN; \
+ const CLSID CLSID_PSFactoryBuffer = PROXY_CLSID_IS;
+# define PROXY_CLSID CLSID_PSFactoryBuffer
+# else
+# define CLSID_PSFACTORYBUFFER
+# endif
+#endif
+
+#ifndef PROXY_CLSID
+# define GET_DLL_CLSID (aProxyFileList[0]->pStubVtblList[0] ? \
+ aProxyFileList[0]->pStubVtblList[0]->header.piid : NULL)
+#else
+# define GET_DLL_CLSID &PROXY_CLSID
+#endif
+
+#ifdef ENTRY_PREFIX
+# define __rpc_macro_expand2(a, b) a##b
+# define __rpc_macro_expand(a, b) __rpc_macro_expand2(a, b)
+# define DLLREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllRegisterServer)
+# define DLLUNREGISTERSERVER_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllUnregisterServer)
+# define DLLMAIN_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllMain)
+# define DLLGETCLASSOBJECT_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllGetClassObject)
+# define DLLCANUNLOADNOW_ENTRY __rpc_macro_expand(ENTRY_PREFIX, DllCanUnloadNow)
+#else
+# define DLLREGISTERSERVER_ENTRY DllRegisterServer
+# define DLLUNREGISTERSERVER_ENTRY DllUnregisterServer
+# define DLLMAIN_ENTRY DllMain
+# define DLLGETCLASSOBJECT_ENTRY DllGetClassObject
+# define DLLCANUNLOADNOW_ENTRY DllCanUnloadNow
+#endif
+
+#ifdef WINE_REGISTER_DLL
+# define WINE_DO_REGISTER_DLL(pfl, clsid) return __wine_register_resources( hProxyDll )
+# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return __wine_unregister_resources( hProxyDll )
+#else
+# define WINE_DO_REGISTER_DLL(pfl, clsid) return NdrDllRegisterProxy( hProxyDll, (pfl), (clsid) )
+# define WINE_DO_UNREGISTER_DLL(pfl, clsid) return NdrDllUnregisterProxy( hProxyDll, (pfl), (clsid) )
+#endif
+
+
+#define DLLDATA_GETPROXYDLLINFO(pfl, rclsid) \
+ void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \
+ const CLSID **ppClsid) DECLSPEC_HIDDEN; \
+ void RPC_ENTRY GetProxyDllInfo(const ProxyFileInfo ***ppProxyFileInfo, \
+ const CLSID **ppClsid) \
+ { \
+ *ppProxyFileInfo = (pfl); \
+ *ppClsid = (rclsid); \
+ }
+
+#define DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, factory) \
+ HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, void **ppv) DECLSPEC_HIDDEN; \
+ HRESULT WINAPI DLLGETCLASSOBJECT_ENTRY(REFCLSID rclsid, REFIID riid, \
+ void **ppv) \
+ { \
+ return NdrDllGetClassObject(rclsid, riid, ppv, (pfl), \
+ (factory_clsid), factory); \
+ }
+
+#define DLLCANUNLOADNOW(factory) \
+ HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) DECLSPEC_HIDDEN; \
+ HRESULT WINAPI DLLCANUNLOADNOW_ENTRY(void) \
+ { \
+ return NdrDllCanUnloadNow((factory)); \
+ }
+
+#define REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid) \
+ HINSTANCE hProxyDll DECLSPEC_HIDDEN = NULL; \
+ \
+ BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) DECLSPEC_HIDDEN; \
+ BOOL WINAPI DLLMAIN_ENTRY(HINSTANCE hinstDLL, DWORD fdwReason, \
+ LPVOID lpvReserved) \
+ { \
+ if (fdwReason == DLL_PROCESS_ATTACH) \
+ { \
+ DisableThreadLibraryCalls(hinstDLL); \
+ hProxyDll = hinstDLL; \
+ } \
+ return TRUE; \
+ } \
+ \
+ HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \
+ HRESULT WINAPI DLLREGISTERSERVER_ENTRY(void) \
+ { \
+ WINE_DO_REGISTER_DLL( (pfl), (factory_clsid) ); \
+ } \
+ \
+ HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) DECLSPEC_HIDDEN; \
+ HRESULT WINAPI DLLUNREGISTERSERVER_ENTRY(void) \
+ { \
+ WINE_DO_UNREGISTER_DLL( (pfl), (factory_clsid) ); \
+ }
+
+#if defined(REGISTER_PROXY_DLL) || defined(WINE_REGISTER_DLL)
+# define DLLREGISTRY_ROUTINES(pfl, factory_clsid) \
+ REGISTER_PROXY_DLL_ROUTINES(pfl, factory_clsid)
+#else
+# define DLLREGISTRY_ROUTINES(pfl, factory_clsid)
+#endif
+
+#define DLLDATA_ROUTINES(pfl, factory_clsid) \
+ CLSID_PSFACTORYBUFFER \
+ CStdPSFactoryBuffer DECLSPEC_HIDDEN gPFactory = { NULL, 0, NULL, 0 }; \
+ DLLDATA_GETPROXYDLLINFO(pfl, factory_clsid) \
+ DLLGETCLASSOBJECTROUTINE(pfl, factory_clsid, &gPFactory) \
+ DLLCANUNLOADNOW(&gPFactory) \
+ CSTDSTUBBUFFERRELEASE(&gPFactory) \
+ CSTDSTUBBUFFER2RELEASE(&gPFactory) \
+ DLLREGISTRY_ROUTINES(pfl, factory_clsid)
+
+#if 0
+
+RPCRTAPI HRESULT RPC_ENTRY
+ CreateProxyFromTypeInfo( LPTYPEINFO pTypeInfo, LPUNKNOWN pUnkOuter, REFIID riid,
+ LPRPCPROXYBUFFER *ppProxy, LPVOID *ppv );
+RPCRTAPI HRESULT RPC_ENTRY
+ CreateStubFromTypeInfo( LPTYPEINFO pTypeInfo, REFIID riid, LPUNKNOWN pUnkServer,
+ LPRPCSTUBBUFFER *ppStub );
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*__WINE_RPCPROXY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h
new file mode 100644
index 00000000..aa14ee51
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rpcsal.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2011 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __RPCSAL_H_VERSION__
+# define __RPCSAL_H_VERSION__ 100
+#endif
+
+#define __RPC__deref_in
+#define __RPC__deref_in_opt
+#define __RPC__deref_in_string
+#define __RPC__deref_in_opt_string
+#define __RPC__deref_in_ecount(size)
+#define __RPC__deref_in_ecount_opt(size)
+#define __RPC__deref_in_ecount_opt_string(size)
+#define __RPC__deref_in_ecount_full(size)
+#define __RPC__deref_in_ecount_full_opt(size)
+#define __RPC__deref_in_ecount_full_string(size)
+#define __RPC__deref_in_ecount_full_opt_string(size)
+#define __RPC__deref_in_ecount_part(size, length)
+#define __RPC__deref_in_ecount_part_opt(size, length)
+#define __RPC__deref_in_xcount(size)
+#define __RPC__deref_in_xcount_opt(size)
+#define __RPC__deref_in_xcount_opt_string(size)
+#define __RPC__deref_in_xcount_full(size)
+#define __RPC__deref_in_xcount_full_opt(size)
+#define __RPC__deref_in_xcount_full_string(size)
+#define __RPC__deref_in_xcount_full_opt_string(size)
+#define __RPC__deref_in_xcount_part(size, length)
+#define __RPC__deref_in_xcount_part_opt(size, length)
+
+#define __RPC__deref_inout
+#define __RPC__deref_inout_opt
+#define __RPC__deref_inout_string
+#define __RPC__deref_inout_opt_string
+#define __RPC__deref_inout_ecount_opt(size)
+#define __RPC__deref_inout_ecount_full(size)
+#define __RPC__deref_inout_ecount_full_opt(size)
+#define __RPC__deref_inout_ecount_full_string(size)
+#define __RPC__deref_inout_ecount_full_opt_string(size)
+#define __RPC__deref_inout_ecount_part_opt(size, length)
+#define __RPC__deref_inout_xcount_opt(size)
+#define __RPC__deref_inout_xcount_full(size)
+#define __RPC__deref_inout_xcount_full_opt(size)
+#define __RPC__deref_inout_xcount_full_string(size)
+#define __RPC__deref_inout_xcount_full_opt_string(size)
+#define __RPC__deref_inout_xcount_part_opt(size, length)
+
+#define __RPC__deref_out
+#define __RPC__deref_out_opt
+#define __RPC__deref_out_string
+#define __RPC__deref_out_opt_string
+#define __RPC__deref_out_ecount(size)
+#define __RPC__deref_out_ecount_opt(size)
+#define __RPC__deref_out_ecount_full(size)
+#define __RPC__deref_out_ecount_full_opt(size)
+#define __RPC__deref_out_ecount_full_string(size)
+#define __RPC__deref_out_ecount_full_opt_string(size)
+#define __RPC__deref_out_ecount_part(size, length)
+#define __RPC__deref_out_ecount_part_opt(size, length)
+#define __RPC__deref_out_xcount(size)
+#define __RPC__deref_out_xcount_opt(size)
+#define __RPC__deref_out_xcount_full(size)
+#define __RPC__deref_out_xcount_full_opt(size)
+#define __RPC__deref_out_xcount_full_string(size)
+#define __RPC__deref_out_xcount_full_opt_string(size)
+#define __RPC__deref_out_xcount_part(size, length)
+#define __RPC__deref_out_xcount_part_opt(size, length)
+
+#define __RPC__deref_opt_in
+#define __RPC__deref_opt_in_opt
+#define __RPC__deref_opt_in_string
+#define __RPC__deref_opt_in_opt_string
+
+#define __RPC__deref_opt_inout
+#define __RPC__deref_opt_inout_opt
+#define __RPC__deref_opt_inout_string
+#define __RPC__deref_opt_inout_opt_string
+#define __RPC__deref_opt_inout_ecount(size)
+#define __RPC__deref_opt_inout_ecount_opt(size)
+#define __RPC__deref_opt_inout_ecount_full(size)
+#define __RPC__deref_opt_inout_ecount_full_opt(size)
+#define __RPC__deref_opt_inout_ecount_full_string(size)
+#define __RPC__deref_opt_inout_ecount_full_opt_string(size)
+#define __RPC__deref_opt_inout_ecount_part(size, length)
+#define __RPC__deref_opt_inout_ecount_part_opt(size, length)
+#define __RPC__deref_opt_inout_xcount(size)
+#define __RPC__deref_opt_inout_xcount_opt(size)
+#define __RPC__deref_opt_inout_xcount_full(size)
+#define __RPC__deref_opt_inout_xcount_full_opt(size)
+#define __RPC__deref_opt_inout_xcount_full_string(size)
+#define __RPC__deref_opt_inout_xcount_full_opt_string(size)
+#define __RPC__deref_opt_inout_xcount_part(size, length)
+#define __RPC__deref_opt_inout_xcount_part_opt(size, length)
+
+#define __RPC__in
+#define __RPC__in_opt
+#define __RPC__in_string
+#define __RPC__in_opt_string
+#define __RPC__in_ecount(size)
+#define __RPC__in_ecount_opt(size)
+#define __RPC__in_ecount_full(size)
+#define __RPC__in_ecount_full_opt(size)
+#define __RPC__in_ecount_full_string(size)
+#define __RPC__in_ecount_full_opt_string(size)
+#define __RPC__in_ecount_part(size, length)
+#define __RPC__in_ecount_part_opt(size, length)
+#define __RPC__in_xcount(size)
+#define __RPC__in_xcount_opt(size)
+#define __RPC__in_xcount_full(size)
+#define __RPC__in_xcount_full_opt(size)
+#define __RPC__in_xcount_full_string(size)
+#define __RPC__in_xcount_full_opt_string(size)
+#define __RPC__in_xcount_part(size, length)
+#define __RPC__in_xcount_part_opt(size, length)
+
+#define __RPC__inout
+#define __RPC__inout_opt
+#define __RPC__inout_string
+#define __RPC__inout_opt_string
+#define __RPC__opt_inout
+#define __RPC__inout_ecount(size)
+#define __RPC__inout_ecount_opt(size)
+#define __RPC__inout_ecount_full(size)
+#define __RPC__inout_ecount_full_opt(size)
+#define __RPC__inout_ecount_full_string(size)
+#define __RPC__inout_ecount_full_opt_string(size)
+#define __RPC__inout_ecount_part(size, length)
+#define __RPC__inout_ecount_part_opt(size, length)
+#define __RPC__inout_xcount(size)
+#define __RPC__inout_xcount_opt(size)
+#define __RPC__inout_xcount_full(size)
+#define __RPC__inout_xcount_full_opt(size)
+#define __RPC__inout_xcount_full_string(size)
+#define __RPC__inout_xcount_full_opt_string(size)
+#define __RPC__inout_xcount_part(size, length)
+#define __RPC__inout_xcount_part_opt(size, length)
+
+#define __RPC__out
+#define __RPC__out_ecount(size)
+#define __RPC__out_ecount_full(size)
+#define __RPC__out_ecount_full_string(size)
+#define __RPC__out_ecount_part(size, length)
+#define __RPC__out_xcount(size)
+#define __RPC__out_xcount_full(size)
+#define __RPC__out_xcount_full_string(size)
+#define __RPC__out_xcount_part(size, length)
+
+#define __RPC_full_pointer
+#define __RPC_ref_pointer
+#define __RPC_string
+#define __RPC_unique_pointer
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl
new file mode 100644
index 00000000..8dd3169a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstbas.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ local,
+ object,
+ uuid(0c733a7c-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRowset : IUnknown
+{
+ typedef DWORD DBROWOPTIONS;
+
+ HRESULT AddRefRows([in] DBCOUNTITEM cRows,
+ [in, size_is(cRows)] const HROW rghRows[],
+ [out, size_is(cRows)] DBREFCOUNT rgRefCounts[],
+ [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);
+
+ HRESULT GetData([in] HROW hRow,
+ [in] HACCESSOR hAccessor,
+ [out] void *pData);
+
+ HRESULT GetNextRows([in] HCHAPTER hReserved,
+ [in] DBROWOFFSET lRowsOffset,
+ [in] DBROWCOUNT cRows,
+ [out] DBCOUNTITEM *pcRowObtained,
+ [out, size_is(,cRows)] HROW **prghRows);
+
+ HRESULT ReleaseRows([in] DBCOUNTITEM cRows,
+ [in, size_is(cRows)] const HROW rghRows[],
+ [in, size_is(cRows)] DBROWOPTIONS rgRowOptions[],
+ [out, size_is(cRows)] DBREFCOUNT rgRefCounts[],
+ [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);
+
+ HRESULT RestartPosition([in] HCHAPTER hReserved);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl
new file mode 100644
index 00000000..a9641f38
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstinf.idl
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a55-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRowsetInfo : IUnknown
+{
+ [local]
+ HRESULT GetProperties([in] const ULONG cPropertyIDSets,
+ [in, size_is(cPropertyIDSets), annotation("__in_ecount_opt(cPropertyIDSets)")] const DBPROPIDSET rgPropertyIDSets[],
+ [in, out, annotation("__out")] ULONG *pcPropertySets,
+ [out, size_is(,*pcPropertySets), annotation("__deref_out_ecount_opt(*pcPropertySets)")] DBPROPSET **prgPropertySets);
+
+ [call_as(GetProperties)]
+ HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets,
+ [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+ [in, out] ULONG *pcPropertySets,
+ [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+ [local]
+ HRESULT GetReferencedRowset([in] DBORDINAL iOrdinal,
+ [in, annotation("__in")] REFIID riid,
+ [out, iid_is(riid), annotation("deref_out_opt")] IUnknown **ppReferencedRowset);
+
+ [call_as(GetReferencedRowset)]
+ HRESULT RemoteGetReferencedRowset([in] DBORDINAL iOrdinal,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppReferencedRowset,
+ [out] IErrorInfo **ppErrorInfoRem);
+ [local]
+ HRESULT GetSpecification([in, annotation("__in")] REFIID riid,
+ [out, iid_is(riid), annotation("__deref_out_opt")] IUnknown **ppSpecification);
+
+ [call_as(GetSpecification)]
+ HRESULT RemoteGetSpecification([in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppSpecification,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl
new file mode 100644
index 00000000..c5f3068d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstloc.idl
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ local,
+ object,
+ uuid(0c733a7d-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRowsetLocate : IRowset
+{
+ typedef DWORD DBCOMPARE;
+
+ enum DBCOMPAREENUM
+ {
+ DBCOMPARE_LT,
+ DBCOMPARE_EQ,
+ DBCOMPARE_GT,
+ DBCOMPARE_NE,
+ DBCOMPARE_NOTCOMPARABLE
+ };
+
+ HRESULT Compare([in] HCHAPTER hReserved,
+ [in] DBBKMARK cbBookmark1,
+ [in, size_is(cbBookmark1)] const BYTE *pBookmark1,
+ [in] DBBKMARK cbBookmark2,
+ [in, size_is(cbBookmark2)] const BYTE *pBookmark2,
+ [out] DBCOMPARE *pComparison);
+
+ HRESULT GetRowsAt([in] HWATCHREGION hReserved1,
+ [in] HCHAPTER hReserved2,
+ [in] DBBKMARK cbBookmark,
+ [in, size_is(cbBookmark)] const BYTE *pBookmark,
+ [in] DBROWOFFSET lRowsOffset,
+ [in] DBROWCOUNT cRows,
+ [out] DBCOUNTITEM *pcRowsObtained,
+ [out, size_is(,cRows)] HROW **prghRows);
+
+ HRESULT GetRowsByBookmark([in] HCHAPTER hReserved,
+ [in] DBCOUNTITEM cRows,
+ [in, size_is(cRows)] const DBBKMARK rgcbBookmarks[],
+ [in, size_is(cRows)] const BYTE *rgpBookmarks[],
+ [out, size_is(cRows)] HROW rghRows[],
+ [out, size_is(cRows)] DBROWSTATUS rgRowStatus[]);
+
+ HRESULT Hash([in] HCHAPTER hReserved,
+ [in] DBBKMARK cBookmarks,
+ [in, size_is(cBookmarks)] const DBBKMARK rgcbBookmarks[],
+ [in, size_is(cBookmarks)] const BYTE *rgpBookmarks[],
+ [out, size_is(cBookmarks)] DBHASHVALUE rgHashedValues[],
+ [out, size_is(cBookmarks)] DBROWSTATUS rgBookmarkStatus[]);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl
new file mode 100644
index 00000000..e9fa0b78
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rstnot.idl
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2013 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a83-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface IRowsetNotify : IUnknown
+{
+ [local]
+ HRESULT OnFieldChange([in] IRowset *rowset,
+ [in] HROW row,
+ [in] DBORDINAL ccols,
+ [in, size_is((ULONG)ccols)] DBORDINAL *columns,
+ [in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cantdeny);
+
+ [call_as(OnFieldChange)]
+ HRESULT RemoteOnFieldChange(
+ [in] IRowset *rowset,
+ [in] HROW row,
+ [in] DBORDINAL ccols,
+ [in, size_is((ULONG)ccols)] DBORDINAL *columns,
+ [in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cantdeny);
+
+ [local]
+ HRESULT OnRowChange([in] IRowset *rowset,
+ [in] DBCOUNTITEM rows,
+ [in, size_is((ULONG)rows)] HROW *hrows,
+ [in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cantdeny);
+
+ [call_as(OnRowChange)]
+ HRESULT RemoteOnRowChange(
+ [in] IRowset *rowset,
+ [in] DBCOUNTITEM rows,
+ [in, size_is((ULONG)rows)] HROW *hrows,
+ [in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cantdeny);
+
+ [local]
+ HRESULT OnRowsetChange([in] IRowset *rowset,
+ [in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cantdeny);
+
+ [call_as(OnRowsetChange)]
+ HRESULT RemoteOnRowsetChange(
+ [in] IRowset *rowset,
+ [in] DBREASON reason,
+ [in] DBEVENTPHASE phase,
+ [in] BOOL cantdeny);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h
new file mode 100644
index 00000000..3008013c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/rtutils.h
@@ -0,0 +1,58 @@
+/*
+ * Rtutils.h - Routing utilities / RRAS tracing
+ *
+ * Copyright (C) 2009 Alexander Scott-Johns
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _RTUTILS_H_
+#define _RTUTILS_H_
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI TraceRegisterExW(LPCWSTR name, DWORD flags);
+DWORD WINAPI TraceRegisterExA(LPCSTR name, DWORD flags);
+#define TraceRegisterEx WINELIB_NAME_AW(TraceRegisterEx)
+
+#define TraceRegisterW(name) TraceRegisterExW((name), 0)
+#define TraceRegisterA(name) TraceRegisterExA((name), 0)
+#define TraceRegister WINELIB_NAME_AW(TraceRegister)
+
+/* Flags for TraceRegisterEx(W|A) */
+#define TRACE_USE_FILE 1
+#define TRACE_USE_CONSOLE 2
+
+/* Return value of TraceRegisterEx(W|A) */
+#define INVALID_TRACEID 0xFFFFFFFF
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RTUTILS_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h
new file mode 100644
index 00000000..a1922a5e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/scarderr.h
@@ -0,0 +1,105 @@
+/*
+ * Winscard definitions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* Note that if you included winerror.h directly or indirectly,
+ * none of these definitions will be used!
+ */
+#ifndef SCARD_S_SUCCESS
+
+#define FACILITY_SYSTEM 0
+#define FACILITY_SCARD 16
+
+#define STATUS_SEVERITY_INFORMATIONAL ((NTSTATUS) 0x00000001)
+#define STATUS_SEVERITY_WARNING ((NTSTATUS) 0x00000002)
+#define STATUS_SEVERITY_ERROR ((NTSTATUS) 0x00000003)
+
+#define SCARD_S_SUCCESS NO_ERROR
+#define SCARD_F_INTERNAL_ERROR ((DWORD)0x80100001)
+#define SCARD_E_CANCELLED ((DWORD)0x80100002)
+#define SCARD_E_INVALID_HANDLE ((DWORD)0x80100003)
+#define SCARD_E_INVALID_PARAMETER ((DWORD)0x80100004)
+#define SCARD_E_INVALID_TARGET ((DWORD)0x80100005)
+#define SCARD_E_NO_MEMORY ((DWORD)0x80100006)
+#define SCARD_F_WAITED_TOO_LONG ((DWORD)0x80100007)
+#define SCARD_E_INSUFFICIENT_BUFFER ((DWORD)0x80100008)
+#define SCARD_E_UNKNOWN_READER ((DWORD)0x80100009)
+#define SCARD_E_TIMEOUT ((DWORD)0x8010000A)
+#define SCARD_E_SHARING_VIOLATION ((DWORD)0x8010000B)
+#define SCARD_E_NO_SMARTCARD ((DWORD)0x8010000C)
+#define SCARD_E_UNKNOWN_CARD ((DWORD)0x8010000D)
+#define SCARD_E_CANT_DISPOSE ((DWORD)0x8010000E)
+#define SCARD_E_PROTO_MISMATCH ((DWORD)0x8010000F)
+#define SCARD_E_NOT_READY ((DWORD)0x80100010)
+#define SCARD_E_INVALID_VALUE ((DWORD)0x80100011)
+#define SCARD_E_SYSTEM_CANCELLED ((DWORD)0x80100012)
+#define SCARD_F_COMM_ERROR ((DWORD)0x80100013)
+#define SCARD_F_UNKNOWN_ERROR ((DWORD)0x80100014)
+#define SCARD_E_INVALID_ATR ((DWORD)0x80100015)
+#define SCARD_E_NOT_TRANSACTED ((DWORD)0x80100016)
+#define SCARD_E_READER_UNAVAILABLE ((DWORD)0x80100017)
+#define SCARD_P_SHUTDOWN ((DWORD)0x80100018)
+#define SCARD_E_PCI_TOO_SMALL ((DWORD)0x80100019)
+#define SCARD_E_READER_UNSUPPORTED ((DWORD)0x8010001A)
+#define SCARD_E_DUPLICATE_READER ((DWORD)0x8010001B)
+#define SCARD_E_CARD_UNSUPPORTED ((DWORD)0x8010001C)
+#define SCARD_E_NO_SERVICE ((DWORD)0x8010001D)
+#define SCARD_E_SERVICE_STOPPED ((DWORD)0x8010001E)
+#define SCARD_E_UNEXPECTED ((DWORD)0x8010001F)
+#define SCARD_E_ICC_INSTALLATION ((DWORD)0x80100020)
+#define SCARD_E_ICC_CREATEORDER ((DWORD)0x80100021)
+#define SCARD_E_UNSUPPORTED_FEATURE ((DWORD)0x80100022)
+#define SCARD_E_DIR_NOT_FOUND ((DWORD)0x80100023)
+#define SCARD_E_FILE_NOT_FOUND ((DWORD)0x80100024)
+#define SCARD_E_NO_DIR ((DWORD)0x80100025)
+#define SCARD_E_NO_FILE ((DWORD)0x80100026)
+#define SCARD_E_NO_ACCESS ((DWORD)0x80100027)
+#define SCARD_E_WRITE_TOO_MANY ((DWORD)0x80100028)
+#define SCARD_E_BAD_SEEK ((DWORD)0x80100029)
+#define SCARD_E_INVALID_CHV ((DWORD)0x8010002A)
+#define SCARD_E_UNKNOWN_RES_MNG ((DWORD)0x8010002B)
+#define SCARD_E_NO_SUCH_CERTIFICATE ((DWORD)0x8010002C)
+#define SCARD_E_CERTIFICATE_UNAVAILABLE ((DWORD)0x8010002D)
+#define SCARD_E_NO_READERS_AVAILABLE ((DWORD)0x8010002E)
+#define SCARD_E_COMM_DATA_LOST ((DWORD)0x8010002F)
+#define SCARD_E_NO_KEY_CONTAINER ((DWORD)0x80100030)
+#define SCARD_E_SERVER_TOO_BUSY ((DWORD)0x80100031)
+#define SCARD_W_UNSUPPORTED_CARD ((DWORD)0x80100065)
+#define SCARD_W_UNRESPONSIVE_CARD ((DWORD)0x80100066)
+#define SCARD_W_UNPOWERED_CARD ((DWORD)0x80100067)
+#define SCARD_W_RESET_CARD ((DWORD)0x80100068)
+#define SCARD_W_REMOVED_CARD ((DWORD)0x80100069)
+#define SCARD_W_SECURITY_VIOLATION ((DWORD)0x8010006A)
+#define SCARD_W_WRONG_CHV ((DWORD)0x8010006B)
+#define SCARD_W_CHV_BLOCKED ((DWORD)0x8010006C)
+#define SCARD_W_EOF ((DWORD)0x8010006D)
+#define SCARD_W_CANCELLED_BY_USER ((DWORD)0x8010006E)
+#define SCARD_W_CARD_NOT_AUTHENTICATED ((DWORD)0x8010006F)
+#define SCARD_W_CACHE_ITEM_NOT_FOUND ((DWORD)0x80100070)
+#define SCARD_W_CACHE_ITEM_STALE ((DWORD)0x80100071)
+#define SCARD_W_CACHE_ITEM_TOO_BIG ((DWORD)0x80100072)
+
+#endif /* SCARD_S_SUCCESS */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h
new file mode 100644
index 00000000..bee7bb2e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/schannel.h
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2005 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SCHANNEL_H__
+#define __WINE_SCHANNEL_H__
+
+#include <wincrypt.h>
+
+/* Package names */
+#define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
+#if defined(__GNUC__)
+#define UNISP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',\
+ 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+#define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
+#else
+static const WCHAR UNISP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','U','n','i','f','i','e','d',' ','S','e','c','u','r','i','t','y',' ',
+ 'P','r','o','t','o','c','o','l',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define UNISP_NAME WINELIB_NAME_AW(UNISP_NAME_)
+
+#define SSL2SP_NAME_A "Microsoft SSL 2.0"
+#if defined(__GNUC__)
+#define SSL2SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','S','S','L',' ','2','.','0',0 }
+#elif defined(_MSC_VER)
+#define SSL2SP_NAME_W L"Microsoft SSL 2.0"
+#else
+static const WCHAR SSL2SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','S','S','L',' ','2','.','0',0 };
+#endif
+#define SSL2SP_NAME WINELIB_NAME_AW(SSL2SP_NAME_)
+
+#define SSL3SP_NAME_A "Microsoft SSL 3.0"
+#if defined(__GNUC__)
+#define SSL3SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','S','S','L',' ','3','.','0',0 }
+#elif defined(_MSC_VER)
+#define SSL3SP_NAME_W L"Microsoft SSL 3.0"
+#else
+static const WCHAR SSL3SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','S','S','L',' ','3','.','0',0 };
+#endif
+#define SSL3SP_NAME WINELIB_NAME_AW(SSL3SP_NAME_)
+
+#define TLS1SP_NAME_A "Microsoft TLS 1.0"
+#if defined(__GNUC__)
+#define TLS1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','T','L','S',' ','1','.','0',0 }
+#elif defined(_MSC_VER)
+#define TLS1SP_NAME_W L"Microsoft TLS 1.0"
+#else
+static const WCHAR TLS1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','T','L','S',' ','1','.','0',0 };
+#endif
+#define TLS1SP_NAME WINELIB_NAME_AW(TLS1SP_NAME_)
+
+#define PCT1SP_NAME_A "Microsoft PCT 1.0"
+#if defined(__GNUC__)
+#define PCT1SP_NAME_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',\
+ ' ','P','C','T',' ','1','.','0',0 }
+#elif defined(_MSC_VER)
+#define PCT1SP_NAME_W L"Microsoft PCT 1.0"
+#else
+static const WCHAR PCT1SP_NAME_W[] = { 'M','i','c','r','o','s','o','f','t',
+ ' ','P','C','T',' ','1','.','0',0 };
+#endif
+#define PCT1SP_NAME WINELIB_NAME_AW(PCT1SP_NAME_)
+
+#define SCHANNEL_NAME_A "Schannel"
+#if defined(__GNUC__)
+#define SCHANNEL_NAME_W (const WCHAR []){ 'S','c','h','a','n','n','e','l',0 }
+#elif defined(_MSC_VER)
+#define SCHANNEL_NAME_W L"Schannel"
+#else
+static const WCHAR SCHANNEL_NAME_W[] = { 'S','c','h','a','n','n','e','l',0 };
+#endif
+#define SCHANNEL_NAME WINELIB_NAME_AW(SCHANNEL_NAME_)
+
+#define SCH_CRED_V1 1
+#define SCH_CRED_V2 2
+#define SCH_CRED_VERSION 2
+#define SCH_CRED_V3 3
+#define SCHANNEL_CRED_VERSION 4
+
+#define SCHANNEL_RENEGOTIATE 0
+#define SCHANNEL_SHUTDOWN 1
+#define SCHANNEL_ALERT 2
+#define SCHANNEL_SESSION 3
+
+#define SP_PROT_ALL 0xffffffff
+#define SP_PROT_UNI_CLIENT 0x80000000
+#define SP_PROT_UNI_SERVER 0x40000000
+#define SP_PROT_TLS1_2_CLIENT 0x00000800
+#define SP_PROT_TLS1_2_SERVER 0x00000400
+#define SP_PROT_TLS1_1_CLIENT 0x00000200
+#define SP_PROT_TLS1_1_SERVER 0x00000100
+#define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT
+#define SP_PROT_TLS1_0_SERVER SP_PROT_TLS1_SERVER
+#define SP_PROT_TLS1_CLIENT 0x00000080
+#define SP_PROT_TLS1_SERVER 0x00000040
+#define SP_PROT_SSL3_CLIENT 0x00000020
+#define SP_PROT_SSL3_SERVER 0x00000010
+#define SP_PROT_SSL2_CLIENT 0x00000008
+#define SP_PROT_SSL2_SERVER 0x00000004
+#define SP_PROT_PCT1_CLIENT 0x00000002
+#define SP_PROT_PCT1_SERVER 0x00000001
+#define SP_PROT_NONE 0x00000000
+
+#define SP_PROT_UNI (SP_PROT_UNI_CLIENT | SP_PROT_UNI_SERVER)
+#define SP_PROT_TLS1_2 (SP_PROT_TLS1_2_CLIENT | SP_PROT_TLS1_2_SERVER)
+#define SP_PROT_TLS1_1 (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_1_SERVER)
+#define SP_PROT_TLS1_0 (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_0_SERVER)
+#define SP_PROT_TLS1 (SP_PROT_TLS1_CLIENT | SP_PROT_TLS1_SERVER)
+#define SP_PROT_SSL3 (SP_PROT_SSL3_CLIENT | SP_PROT_SSL3_SERVER)
+#define SP_PROT_SSL2 (SP_PROT_SSL2_CLIENT | SP_PROT_SSL2_SERVER)
+#define SP_PROT_PCT1 (SP_PROT_PCT1_CLIENT | SP_PROT_PCT1_SERVER)
+
+#define SP_PROT_SSL3TLS1_CLIENTS (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_CLIENT)
+#define SP_PROT_SSL3TLS1_SERVERS (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_SERVER)
+#define SP_PROT_SSL3TLS1_X_CLIENTS (SP_PROT_SSL3_CLIENT | SP_PROT_TLS1_X_CLIENT)
+#define SP_PROT_SSL3TLS1_X_SERVERS (SP_PROT_SSL3_SERVER | SP_PROT_TLS1_X_SERVER)
+#define SP_PROT_TLS1_X_CLIENT (SP_PROT_TLS1_0_CLIENT | SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)
+#define SP_PROT_TLS1_X_SERVER (SP_PROT_TLS1_0_SERVER | SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)
+#define SP_PROT_TLS1_1PLUS_CLIENT (SP_PROT_TLS1_1_CLIENT | SP_PROT_TLS1_2_CLIENT)
+#define SP_PROT_TLS1_1PLUS_SERVER (SP_PROT_TLS1_1_SERVER | SP_PROT_TLS1_2_SERVER)
+#define SP_PROT_CLIENTS (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT \
+ | SP_PROT_TLS1_CLIENT | SP_PROT_UNI_CLIENT)
+#define SP_PROT_SERVERS (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER \
+ | SP_PROT_TLS1_SERVER | SP_PROT_UNI_SERVER)
+#define SP_PROT_X_CLIENTS (SP_PROT_CLIENTS | SP_PROT_TLS1_X_CLIENT)
+#define SP_PROT_X_SERVERS (SP_PROT_SERVERS | SP_PROT_TLS1_X_SERVER)
+
+#define SP_PROT_SSL3TLS1 (SP_PROT_SSL3 | SP_PROT_TLS1)
+#define SP_PROT_SSL3TLS1_X (SP_PROT_SSL3 | SP_PROT_TLS1_X)
+#define SP_PROT_TLS1_X (SP_PROT_TLS1_X_CLIENT | SP_PROT_TLS1_X_SERVER)
+#define SP_PROT_TLS1_1PLUS (SP_PROT_TLS1_1PLUS_CLIENT | SP_PROT_TLS1_1PLUS_SERVER)
+
+#define SCH_CRED_NO_SYSTEM_MAPPER 2
+#define SCH_CRED_NO_SERVERNAME_CHECK 4
+#define SCH_CRED_MANUAL_CRED_VALIDATION 8
+#define SCH_CRED_NO_DEFAULT_CREDS 16
+#define SCH_CRED_AUTO_CRED_VALIDATION 32
+#define SCH_CRED_USE_DEFAULT_CREDS 64
+#define SCH_CRED_REVOCATION_CHECK_CHAIN_END_CERT 256
+#define SCH_CRED_REVOCATION_CHECK_CHAIN 512
+#define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 1024
+#define SCH_CRED_IGNORE_NO_REVOCATION_CHECK 2048
+#define SCH_CRED_IGNORE_REVOCATION_OFFLINE 4096
+
+#define SECPKG_ATTR_ISSUER_LIST 0x50
+#define SECPKG_ATTR_REMOTE_CRED 0x51
+#define SECPKG_ATTR_LOCAL_CRED 0x52
+#define SECPKG_ATTR_REMOTE_CERT_CONTEXT 0x53
+#define SECPKG_ATTR_LOCAL_CERT_CONTEXT 0x54
+#define SECPKG_ATTR_ROOT_STORE 0x55
+#define SECPKG_ATTR_SUPPORTED_ALGS 0x56
+#define SECPKG_ATTR_CIPHER_STRENGTHS 0x57
+#define SECPKG_ATTR_SUPPORTED_PROTOCOLS 0x58
+#define SECPKG_ATTR_ISSUER_LIST_EX 0x59
+#define SECPKG_ATTR_CONNECTION_INFO 0x5a
+#define SECPKG_ATTR_EAP_KEY_BLOCK 0x5b
+#define SECPKG_ATTR_MAPPED_CRED_ATTR 0x5c
+#define SECPKG_ATTR_SESSION_INFO 0x5d
+#define SECPKG_ATTR_APP_DATA 0x5e
+
+#define UNISP_RPC_ID 14
+
+struct _HMAPPER;
+
+typedef struct _SCHANNEL_CRED
+{
+ DWORD dwVersion;
+ DWORD cCreds;
+ PCCERT_CONTEXT *paCred;
+ HCERTSTORE hRootStore;
+ DWORD cMappers;
+ struct _HMAPPER **aphMappers;
+ DWORD cSupportedAlgs;
+ ALG_ID *palgSupportedAlgs;
+ DWORD grbitEnabledProtocols;
+ DWORD dwMinimumCipherStrength;
+ DWORD dwMaximumCipherStrength;
+ DWORD dwSessionLifespan;
+ DWORD dwFlags;
+ DWORD dwCredFormat;
+} SCHANNEL_CRED, *PSCHANNEL_CRED;
+
+typedef struct _SecPkgCred_SupportedAlgs
+{
+ DWORD cSupportedAlgs;
+ ALG_ID *palgSupportedAlgs;
+} SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs;
+
+typedef struct _SecPkgCred_CipherStrengths
+{
+ DWORD dwMinimumCipherStrength;
+ DWORD dwMaximumCipherStrength;
+} SecPkgCred_CipherStrengths, *PSecPkgCred_CipherStrengths;
+
+typedef struct _SecPkgCred_SupportedProtocols
+{
+ DWORD grbitProtocol;
+} SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols;
+
+typedef struct _SecPkgContext_IssuerListInfoEx
+{
+ PCERT_NAME_BLOB aIssuers;
+ DWORD cIssuers;
+} SecPkgContext_IssuerListInfoEx, *PSecPkgContext_IssuerListInfoEx;
+
+typedef struct _SecPkgContext_ConnectionInfo
+{
+ DWORD dwProtocol;
+ ALG_ID aiCipher;
+ DWORD dwCipherStrength;
+ ALG_ID aiHash;
+ DWORD dwHashStrength;
+ ALG_ID aiExch;
+ DWORD dwExchStrength;
+} SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo;
+
+#endif /* __WINE_SCHANNEL_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h
new file mode 100644
index 00000000..a8f471ee
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/schemadef.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2003 Kevin Koltzau
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SCHEMADEF_H
+#define __WINE_SCHEMADEF_H
+
+#define BEGIN_TM_SCHEMA(name)
+#define END_TM_SCHEMA(name)
+
+#define BEGIN_TM_ENUM(name) enum name {
+#define TM_ENUM(value, prefix, name) prefix##_##name = (value),
+#define END_TM_ENUM() };
+
+#define BEGIN_TM_PROPS() enum PropValues { \
+ DummyProp = 49,
+#define TM_PROP(value, prefix, name, type) prefix##_##name = (value),
+#define END_TM_PROPS() };
+
+#define BEGIN_TM_CLASS_PARTS(name) enum name##PARTS { \
+ name##PartFiller0,
+#define TM_PART(value, prefix, name) prefix##_##name = (value),
+#define END_TM_CLASS_PARTS() };
+
+#define BEGIN_TM_PART_STATES(name) enum name##STATES { \
+ name##StateFiller0,
+#define TM_STATE(value, prefix, name) prefix##_##name = (value),
+#define END_TM_PART_STATES() };
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h
new file mode 100644
index 00000000..97145ec4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/schnlsp.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2005 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHNLSP_H__
+#define __WINE_SHNLSP_H__
+
+#include <schannel.h>
+
+#endif /* __WINE_SHNLSP_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h
new file mode 100644
index 00000000..c89cbdfb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sddl.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2003 Ulrich Czekalla for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SDDL_H__
+#define __SDDL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Versioning */
+#define SDDL_REVISION_1 1
+#define SDDL_REVISION SDDL_REVISION_1
+
+#ifndef WINE_NO_UNICODE_MACROS
+/* Component tags */
+#ifndef UNICODE
+# define SDDL_OWNER "O"
+# define SDDL_GROUP "G"
+# define SDDL_DACL "D"
+# define SDDL_SACL "S"
+#else
+# if defined(__GNUC__)
+# define SDDL_OWNER (const WCHAR[]){ 'O',0 }
+# define SDDL_GROUP (const WCHAR[]){ 'G',0 }
+# define SDDL_DACL (const WCHAR[]){ 'D',0 }
+# define SDDL_SACL (const WCHAR[]){ 'S',0 }
+# elif defined(_MSC_VER)
+# define SDDL_OWNER L"O"
+# define SDDL_GROUP L"G"
+# define SDDL_DACL L"D"
+# define SDDL_SACL L"S"
+# else
+ static const WCHAR SDDL_OWNER[] = { 'O',0 };
+ static const WCHAR SDDL_GROUP[] = { 'G',0 };
+ static const WCHAR SDDL_DACL[] = { 'D',0 };
+ static const WCHAR SDDL_SACL[] = { 'S',0 };
+# endif
+#endif /* UNICODE */
+
+/* Separators as characters */
+/* SDDL_SEPERATORC is not a typo, as per Microsoft's headers */
+#ifndef UNICODE
+# define SDDL_SEPERATORC ';'
+# define SDDL_DELIMINATORC ':'
+# define SDDL_ACE_BEGINC '('
+# define SDDL_ACE_ENDC ')'
+#else
+# define SDDL_SEPERATORC ((WCHAR)';')
+# define SDDL_DELIMINATORC ((WCHAR)':')
+# define SDDL_ACE_BEGINC ((WCHAR)'(')
+# define SDDL_ACE_ENDC ((WCHAR)')')
+#endif /* UNICODE */
+
+/* Separators as strings */
+/* SDDL_SEPERATOR is not a typo, as per Microsoft's headers */
+#ifndef UNICODE
+# define SDDL_SEPERATOR ";"
+# define SDDL_DELIMINATOR ":"
+# define SDDL_ACE_BEGIN "("
+# define SDDL_ACE_END ")"
+#else
+# if defined(__GNUC__)
+# define SDDL_SEPERATOR (const WCHAR[]){ ';',0 }
+# define SDDL_DELIMINATOR (const WCHAR[]){ ':',0 }
+# define SDDL_ACE_BEGIN (const WCHAR[]){ '(',0 }
+# define SDDL_ACE_END (const WCHAR[]){ ')',0 }
+# elif defined(_MSC_VER)
+# define SDDL_SEPERATOR L";"
+# define SDDL_DELIMINATOR L":"
+# define SDDL_ACE_BEGIN L"("
+# define SDDL_ACE_END L")"
+# else
+ static const WCHAR SDDL_SEPERATOR[] = { ';',0 };
+ static const WCHAR SDDL_DELIMINATOR[] = { ':',0 };
+ static const WCHAR SDDL_ACE_BEGIN[] = { '(',0 };
+ static const WCHAR SDDL_ACE_END[] = { ')',0 };
+# endif
+#endif /* UNICODE */
+#endif /* WINE_NO_UNICODE_MACROS */
+
+BOOL WINAPI ConvertSidToStringSidA( PSID, LPSTR* );
+BOOL WINAPI ConvertSidToStringSidW( PSID, LPWSTR* );
+#define ConvertSidToStringSid WINELIB_NAME_AW(ConvertSidToStringSid)
+
+BOOL WINAPI ConvertStringSidToSidA( LPCSTR, PSID* );
+BOOL WINAPI ConvertStringSidToSidW( LPCWSTR, PSID* );
+#define ConvertStringSidToSid WINELIB_NAME_AW(ConvertStringSidToSid)
+
+BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorA(
+ LPCSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG );
+BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorW(
+ LPCWSTR, DWORD, PSECURITY_DESCRIPTOR*, PULONG );
+#define ConvertStringSecurityDescriptorToSecurityDescriptor WINELIB_NAME_AW(ConvertStringSecurityDescriptorToSecurityDescriptor)
+
+BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorA(
+ PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPSTR*, PULONG );
+BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorW(
+ PSECURITY_DESCRIPTOR, DWORD, SECURITY_INFORMATION, LPWSTR*, PULONG );
+#define ConvertSecurityDescriptorToStringSecurityDescriptor WINELIB_NAME_AW(ConvertSecurityDescriptorToStringSecurityDescriptor)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SDDL_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h
new file mode 100644
index 00000000..fd9c2dec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/secext.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SECEXT_H__
+#define __SECEXT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+ NameUnknown = 0,
+ NameFullyQualifiedDN = 1,
+ NameSamCompatible = 2,
+ NameDisplay = 3,
+ NameUniqueId = 6,
+ NameCanonical = 7,
+ NameUserPrincipal = 8,
+ NameCanonicalEx = 9,
+ NameServicePrincipal = 10,
+ NameDnsDomain = 12,
+ NameGivenName = 13,
+ NameSurname = 14,
+} EXTENDED_NAME_FORMAT, *PEXTENDED_NAME_FORMAT;
+
+BOOLEAN WINAPI GetComputerObjectNameA( EXTENDED_NAME_FORMAT, LPSTR, PULONG );
+BOOLEAN WINAPI GetComputerObjectNameW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG );
+#define GetComputerObjectName WINELIB_NAME_AW(GetComputerObjectName)
+
+BOOLEAN WINAPI GetUserNameExA( EXTENDED_NAME_FORMAT, LPSTR, PULONG );
+BOOLEAN WINAPI GetUserNameExW( EXTENDED_NAME_FORMAT, LPWSTR, PULONG );
+#define GetUserNameEx WINELIB_NAME_AW(GetUserNameEx)
+
+BOOLEAN WINAPI TranslateNameA( LPCSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPSTR, PULONG);
+BOOLEAN WINAPI TranslateNameW( LPCWSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPWSTR, PULONG);
+#define TranslateName WINELIB_NAME_AW(TranslateName)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SECEXT_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/security.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/security.h
new file mode 100644
index 00000000..1da8386d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/security.h
@@ -0,0 +1,35 @@
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _SECURITY_H
+#define _SECURITY_H
+
+#include <sspi.h>
+
+#if defined(SECURITY_WIN32) || defined(SECURITY_KERNEL)
+#include <secext.h>
+#endif
+
+#endif /* _SECURITY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h
new file mode 100644
index 00000000..14b024bc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensapi.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2005 Steven Edwards
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SENSAPI_H__
+#define __SENSAPI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define NETWORK_ALIVE_LAN 1
+#define NETWORK_ALIVE_WAN 2
+#define NETWORK_ALIVE_AOL 4
+
+typedef struct tagQOCINFO
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwInSpeed;
+ DWORD dwOutSpeed;
+} QOCINFO, *LPQOCINFO;
+
+BOOL WINAPI IsDestinationReachableA(LPCSTR lpszDestination, LPQOCINFO lpQOCInfo);
+BOOL WINAPI IsDestinationReachableW(LPCWSTR lpszDestination, LPQOCINFO lpQOCInfo);
+#define IsDestinationReachable WINELIB_NAME_AW(IsDestinationReachable)
+BOOL WINAPI IsNetworkAlive(LPDWORD lpdwFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SENSAPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl
new file mode 100644
index 00000000..0cb0ad53
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sensevts.idl
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "oaidl.idl";
+
+[
+ version(2.0),
+ uuid(d597deed-5b9f-11d1-8dd2-00aa004abd5e)
+]
+library SensEvents
+{
+ importlib("stdole2.tlb");
+
+ typedef struct SENS_QOCINFO
+ {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwOutSpeed;
+ DWORD dwInSpeed;
+ } SENS_QOCINFO, *LPSENS_QOCINFO;
+
+ [
+ object,
+ uuid(d597bab1-5b9f-11d1-8dd2-00aa004abd5e),
+ pointer_default(unique)
+ ]
+ interface ISensNetwork : IDispatch
+ {
+ HRESULT ConnectionMade(
+ [in] BSTR bstrConnection,
+ [in] ULONG ulType,
+ [in] LPSENS_QOCINFO lpQOCInfo );
+ HRESULT ConnectionMadeNoQOCInfo(
+ [in] BSTR bstrConnection,
+ [in] ULONG ulType );
+ HRESULT ConnectionLost(
+ [in] BSTR bstrConnection,
+ [in] ULONG ulType );
+ HRESULT DestinationReachable(
+ [in] BSTR bstrDestination,
+ [in] BSTR bstrConnection,
+ [in] ULONG ulType,
+ [in] LPSENS_QOCINFO lpQOCInfo );
+ HRESULT DestinationReachableNoQOCInfo(
+ [in] BSTR bstrDestination,
+ [in] BSTR bstrConnection,
+ [in] ULONG ulType );
+ }
+
+ [
+ object,
+ uuid(d597bab2-5b9f-11d1-8dd2-00aa004abd5e),
+ pointer_default(unique)
+ ]
+ interface ISensOnNow : IDispatch
+ {
+ HRESULT OnAcPower( void );
+ HRESULT OnBatteryPower(
+ [in] DWORD dwBatteryLifePercent );
+ HRESULT BatteryLow(
+ [in] DWORD dwBatteryLifePercent );
+ }
+
+ [
+ object,
+ uuid(d597bab3-5b9f-11d1-8dd2-00aa004abd5e),
+ pointer_default(unique)
+ ]
+ interface ISensLogon : IDispatch
+ {
+ HRESULT Logon(
+ [in] BSTR bstrUserName );
+ HRESULT Logoff(
+ [in] BSTR bstrUserName );
+ HRESULT StartShell(
+ [in] BSTR bstrUserName );
+ HRESULT DisplayLock(
+ [in] BSTR bstrUserName );
+ HRESULT DisplayUnlock(
+ [in] BSTR bstrUserName );
+ HRESULT StartScreenSaver(
+ [in] BSTR bstrUserName );
+ HRESULT StopScreenSaver(
+ [in] BSTR bstrUserName );
+ }
+
+ [
+ object,
+ uuid(d597bab4-5b9f-11d1-8dd2-00aa004abd5e),
+ pointer_default(unique)
+ ]
+ interface ISensLogon2 : IDispatch
+ {
+ HRESULT Logon(
+ [in] BSTR bstrUserName,
+ [in] DWORD dwSessionId );
+ HRESULT Logoff(
+ [in] BSTR bstrUserName,
+ [in] DWORD dwSessionId );
+ HRESULT SessionDisconnect(
+ [in] BSTR bstrUserName,
+ [in] DWORD dwSessionId );
+ HRESULT SessionReconnect(
+ [in] BSTR bstrUserName,
+ [in] DWORD dwSessionId );
+ HRESULT PostShell(
+ [in] BSTR bstrUserName,
+ [in] DWORD dwSessionId );
+ }
+
+} /* library SensEvents */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h
new file mode 100644
index 00000000..a838034a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.h
@@ -0,0 +1,114 @@
+/*** Autogenerated by WIDL 1.1.36 from servprov.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_SERVPROV_H
+#define __WIDL_SERVPROV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+
+/* Forward declarations */
+
+#ifndef __IServiceProvider_FWD_DEFINED__
+#define __IServiceProvider_FWD_DEFINED__
+typedef interface IServiceProvider IServiceProvider;
+#endif
+
+
+/*****************************************************************************
+ * IServiceProvider interface
+ */
+#ifndef __IServiceProvider_INTERFACE_DEFINED__
+#define __IServiceProvider_INTERFACE_DEFINED__
+
+typedef IServiceProvider *LPSERVICEPROVIDER;
+DEFINE_GUID(IID_IServiceProvider, 0x6d5140c1, 0x7436, 0x11ce, 0x80,0x34, 0x00,0xaa,0x00,0x60,0x09,0xfa);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IServiceProvider : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryService(
+ REFGUID guidService,
+ REFIID riid,
+ void **ppvObject) = 0;
+
+};
+#else
+typedef struct IServiceProviderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IServiceProvider* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IServiceProvider* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IServiceProvider* This);
+
+ /*** IServiceProvider methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryService)(
+ IServiceProvider* This,
+ REFGUID guidService,
+ REFIID riid,
+ void **ppvObject);
+
+ END_INTERFACE
+} IServiceProviderVtbl;
+interface IServiceProvider {
+ CONST_VTBL IServiceProviderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IServiceProvider_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IServiceProvider_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IServiceProvider_Release(This) (This)->lpVtbl->Release(This)
+/*** IServiceProvider methods ***/
+#define IServiceProvider_QueryService(This,guidService,riid,ppvObject) (This)->lpVtbl->QueryService(This,guidService,riid,ppvObject)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IServiceProvider_RemoteQueryService_Proxy(
+ IServiceProvider* This,
+ REFGUID guidService,
+ REFIID riid,
+ IUnknown **ppvObject);
+void __RPC_STUB IServiceProvider_RemoteQueryService_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IServiceProvider_QueryService_Proxy(
+ IServiceProvider* This,
+ REFGUID guidService,
+ REFIID riid,
+ void **ppvObject);
+HRESULT __RPC_STUB IServiceProvider_QueryService_Stub(
+ IServiceProvider* This,
+ REFGUID guidService,
+ REFIID riid,
+ IUnknown **ppvObject);
+
+#endif /* __IServiceProvider_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_SERVPROV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl
new file mode 100644
index 00000000..e36035f8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/servprov.idl
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 1999 Francois Gouget
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+
+/*****************************************************************************
+ * IServiceProvider interface
+ */
+[
+ object,
+ uuid(6d5140c1-7436-11ce-8034-00aa006009fa),
+ pointer_default(unique)
+]
+interface IServiceProvider : IUnknown
+{
+ typedef [unique] IServiceProvider *LPSERVICEPROVIDER;
+
+ [local]
+ HRESULT QueryService(
+ [in] REFGUID guidService,
+ [in] REFIID riid,
+ [out] void ** ppvObject);
+
+ [call_as(QueryService)]
+ HRESULT RemoteQueryService(
+ [in] REFGUID guidService,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown ** ppvObject);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl
new file mode 100644
index 00000000..87fd3172
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sesprp.idl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2009 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a85-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ISessionProperties : IUnknown
+{
+ [local]
+ HRESULT GetProperties([in] ULONG cPropertyIDSets,
+ [in, size_is(cPropertyIDSets)] const DBPROPIDSET rgPropertyIDSets[],
+ [in, out] ULONG *pcPropertySets,
+ [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets);
+
+ [call_as(GetProperties)]
+ HRESULT RemoteGetProperties([in] ULONG cPropertyIDSets,
+ [in, unique, size_is(cPropertyIDSets)] const DBPROPIDSET *rgPropertyIDSets,
+ [in, out] ULONG *pcPropertySets,
+ [out, size_is(,*pcPropertySets)] DBPROPSET **prgPropertySets,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+
+ [local]
+ HRESULT SetProperties([in] ULONG cPropertySets,
+ [in, out, unique, size_is(cPropertySets)] DBPROPSET rgPropertySets[]);
+
+ [call_as(SetProperties)]
+ HRESULT RemoteSetProperties([in] ULONG cPropertySets,
+ [in, unique, size_is(cPropertySets)] DBPROPSET *rgPropertySets,
+ [in] ULONG cTotalProps,
+ [out, size_is(cTotalProps)] DBPROPSTATUS *rgPropStatus,
+ [out] IErrorInfo **ppErrorInfoRem);
+
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h
new file mode 100644
index 00000000..ec306321
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/setupapi.h
@@ -0,0 +1,1873 @@
+/*
+ * Copyright (C) 2000 James Hatheway
+ * Copyright (C) 2007 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_SETUPAPI
+#define _INC_SETUPAPI
+
+#include <commctrl.h>
+#include <devpropdef.h>
+
+#ifdef _WIN64
+#include <pshpack8.h>
+#else
+#include <pshpack1.h>
+#endif
+
+/* setupapi doesn't use the normal convention, it adds an underscore before A/W */
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_SETUPAPI_TYPE_AW(type) /* nothing */
+#else
+# define DECL_WINELIB_SETUPAPI_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define type for handle to a loaded inf file */
+typedef PVOID HINF;
+
+/* Define type for handle to a device information set */
+typedef PVOID HDEVINFO;
+
+/* Define type for handle to a setup log file */
+typedef PVOID HSPFILELOG;
+
+/* Define type for setup file queue */
+typedef PVOID HSPFILEQ;
+
+typedef PVOID HDSKSPC;
+
+/* inf structure. */
+typedef struct _INFCONTEXT
+{
+ PVOID Inf;
+ PVOID CurrentInf;
+ UINT Section;
+ UINT Line;
+} INFCONTEXT, *PINFCONTEXT;
+
+typedef struct _SP_ALTPLATFORM_INFO_V2
+{
+ DWORD cbSize;
+ DWORD Platform;
+ DWORD MajorVersion;
+ DWORD MinorVersion;
+ WORD ProcessorArchitecture;
+ union
+ {
+ WORD Reserved;
+ WORD Flags;
+ } DUMMYUNIONNAME;
+ DWORD FirstValidatedMajorVersion;
+ DWORD FirstValidatedMinorVersion;
+} SP_ALTPLATFORM_INFO_V2, *PSP_ALTPLATFORM_INFO_V2;
+
+#define SP_ALTPLATFORM_FLAGS_VERSION_RANGE 0x0001
+
+typedef struct _SP_ALTPLATFORM_INFO_V1
+{
+ DWORD cbSize;
+ DWORD Platform;
+ DWORD MajorVersion;
+ DWORD MinorVersion;
+ WORD ProcessorArchitecture;
+ WORD Reserved;
+} SP_ALTPLATFORM_INFO_V1, *PSP_ALTPLATFORM_INFO_V1;
+
+typedef SP_ALTPLATFORM_INFO_V2 SP_ALTPLATFORM_INFO;
+typedef PSP_ALTPLATFORM_INFO_V2 PSP_ALTPLATFORM_INFO;
+
+typedef struct _SP_FILE_COPY_PARAMS_A
+{
+ DWORD cbSize;
+ HSPFILEQ QueueHandle;
+ PCSTR SourceRootPath;
+ PCSTR SourcePath;
+ PCSTR SourceFilename;
+ PCSTR SourceDescription;
+ PCSTR SourceTagfile;
+ PCSTR TargetDirectory;
+ PCSTR TargetFilename;
+ DWORD CopyStyle;
+ HINF LayoutInf;
+ PCSTR SecurityDescriptor;
+} SP_FILE_COPY_PARAMS_A, *PSP_FILE_COPY_PARAMS_A;
+
+typedef struct _SP_FILE_COPY_PARAMS_W
+{
+ DWORD cbSize;
+ HSPFILEQ QueueHandle;
+ PCWSTR SourceRootPath;
+ PCWSTR SourcePath;
+ PCWSTR SourceFilename;
+ PCWSTR SourceDescription;
+ PCWSTR SourceTagfile;
+ PCWSTR TargetDirectory;
+ PCWSTR TargetFilename;
+ DWORD CopyStyle;
+ HINF LayoutInf;
+ PCWSTR SecurityDescriptor;
+} SP_FILE_COPY_PARAMS_W, *PSP_FILE_COPY_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_FILE_COPY_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_COPY_PARAMS)
+
+typedef struct _SP_REGISTER_CONTROL_STATUSA
+{
+ DWORD cbSize;
+ PCSTR FileName;
+ DWORD Win32Error;
+ DWORD FailureCode;
+} SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA;
+
+typedef struct _SP_REGISTER_CONTROL_STATUSW
+{
+ DWORD cbSize;
+ PCWSTR FileName;
+ DWORD Win32Error;
+ DWORD FailureCode;
+} SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW;
+
+DECL_WINELIB_TYPE_AW(SP_REGISTER_CONTROL_STATUS)
+DECL_WINELIB_TYPE_AW(PSP_REGISTER_CONTROL_STATUS)
+
+#define SPREG_SUCCESS 0x00000000
+#define SPREG_LOADLIBRARY 0x00000001
+#define SPREG_GETPROCADDR 0x00000002
+#define SPREG_REGSVR 0x00000003
+#define SPREG_DLLINSTALL 0x00000004
+#define SPREG_TIMEOUT 0x00000005
+#define SPREG_UNKNOWN 0xffffffff
+
+typedef UINT (CALLBACK *PSP_FILE_CALLBACK_A)( PVOID Context, UINT Notification,
+ UINT_PTR Param1, UINT_PTR Param2 );
+typedef UINT (CALLBACK *PSP_FILE_CALLBACK_W)( PVOID Context, UINT Notification,
+ UINT_PTR Param1, UINT_PTR Param2 );
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_FILE_CALLBACK)
+
+#define LINE_LEN 256
+#define MAX_INF_STRING_LENGTH 4096
+#define MAX_TITLE_LEN 60
+#define MAX_INSTRUCTION_LEN 256
+#define MAX_LABEL_LEN 30
+#define MAX_SERVICE_NAME_LEN 256
+#define MAX_SUBTITLE_LEN 256
+#define SP_MAX_MACHINENAME_LENGTH (MAX_PATH + 3)
+
+typedef UINT DI_FUNCTION;
+
+typedef struct _SP_CLASSINSTALL_HEADER
+{
+ DWORD cbSize;
+ DI_FUNCTION InstallFunction;
+} SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
+
+typedef struct _SP_ENABLECLASS_PARAMS
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ GUID ClassGuid;
+ DWORD EnableMessage;
+} SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
+
+/* SP_ENABLECLASS_PARAMS EnableMessage values */
+#define ENABLECLASS_QUERY 0
+#define ENABLECLASS_SUCCESS 1
+#define ENABLECLASS_FAILURE 2
+
+typedef struct _SP_PROPCHANGE_PARAMS
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD StateChange;
+ DWORD Scope;
+ DWORD HwProfile;
+} SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
+
+/* SP_PROPCHANGE_PARAMS StateChange values */
+#define DICS_ENABLE 0x00000001
+#define DICS_DISABLE 0x00000002
+#define DICS_PROPCHANGE 0x00000003
+#define DICS_START 0x00000004
+#define DICS_STOP 0x00000005
+/* SP_PROPCHANGE_PARAMS Scope values */
+#define DICS_FLAG_GLOBAL 0x00000001
+#define DICS_FLAG_CONFIGSPECIFIC 0x00000002
+#define DICS_FLAG_CONFIGGENERAL 0x00000004
+
+
+typedef struct _SP_DEVINSTALL_PARAMS_A
+{
+ DWORD cbSize;
+ DWORD Flags;
+ DWORD FlagsEx;
+ HWND hwndParent;
+ PSP_FILE_CALLBACK_A InstallMsgHandler;
+ PVOID InstallMsgHandlerContext;
+ HSPFILEQ FileQueue;
+ ULONG_PTR ClassInstallReserved;
+ DWORD Reserved;
+ CHAR DriverPath[MAX_PATH];
+} SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
+
+typedef struct _SP_DEVINSTALL_PARAMS_W
+{
+ DWORD cbSize;
+ DWORD Flags;
+ DWORD FlagsEx;
+ HWND hwndParent;
+ PSP_FILE_CALLBACK_W InstallMsgHandler;
+ PVOID InstallMsgHandlerContext;
+ HSPFILEQ FileQueue;
+ ULONG_PTR ClassInstallReserved;
+ DWORD Reserved;
+ WCHAR DriverPath[MAX_PATH];
+} SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINSTALL_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINSTALL_PARAMS)
+
+/* SP_DEVINSTALL_PARAMS Flags values */
+#define DI_SHOWOEM 0x00000001
+#define DI_SHOWCOMPAT 0x00000002
+#define DI_SHOWCLASS 0x00000004
+#define DI_SHOWALL 0x00000007
+#define DI_NOVCP 0x00000008
+#define DI_DIDCOMPAT 0x00000010
+#define DI_DIDCLASS 0x00000020
+#define DI_AUTOASSIGNRES 0x00000040
+#define DI_NEEDRESTART 0x00000080
+#define DI_NEEDREBOOT 0x00000100
+#define DI_NOBROWSE 0x00000200
+#define DI_MULTMFGS 0x00000400
+#define DI_DISABLED 0x00000800
+#define DI_GENERALPAGE_ADDED 0x00001000
+#define DI_RESOURCEPAGE_ADDED 0x00002000
+#define DI_PROPERTIES_CHANGE 0x00004000
+#define DI_INF_IS_SORTED 0x00080000
+#define DI_ENUMSINGLEINF 0x00010000
+#define DI_DONOTCALLCONFIGMG 0x00020000
+#define DI_INSTALLDISABLED 0x00040000
+#define DI_COMPAT_FROM_CLASS 0x00080000
+#define DI_CLASSINSTALLPARAMS 0x00100000
+#define DI_NODI_DEFAULTACTION 0x00200000
+#define DI_QUIETINSTALL 0x00800000
+#define DI_NOFILECOPY 0x01000000
+#define DI_FORCECOPY 0x02000000
+#define DI_DRIVERPAGE_ADDED 0x04000000
+#define DI_USECI_SELECTSTRINGS 0x08000000
+#define DI_OVERRIDE_INFFLAGS 0x10000000
+#define DI_PROPS_NOCHANGEUSAGE 0x20000000
+#define DI_NOSELECTICONS 0x40000000
+#define DI_NOWRITE_IDS 0x80000000
+/* SP_DEVINSTALL_PARAMS FlagsEx values */
+#define DI_FLAGSEX_USEOLDINFSEARCH 0x00000001
+#define DI_FLAGSEX_RESERVED2 0x00000002
+#define DI_FLAGSEX_CI_FAILED 0x00000004
+#define DI_FLAGSEX_FINISHINSTALL_ACTION 0x00000008
+#define DI_FLAGSEX_DIDINFOLIST 0x00000010
+#define DI_FLAGSEX_DIDCOMPATINFO 0x00000020
+#define DI_FLAGSEX_FILTERCLASSES 0x00000040
+#define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080
+#define DI_FLAGSEX_DEVICECHANGE 0x00000100
+#define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200
+#define DI_FLAGSEX_PROPCHANGE_PENDING 0x00000400
+#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800
+#define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000
+#define DI_FLAGSEX_USECLASSFORCOMPAT 0x00002000
+#define DI_FLAGSEX_RESERVED3 0x00004000
+#define DI_FLAGSEX_NO_DRVREG_MODIFY 0x00008000
+#define DI_FLAGSEX_IN_SYSTEM_SETUP 0x00010000
+#define DI_FLAGSEX_INET_DRIVER 0x00020000
+#define DI_FLAGSEX_APPENDDRIVERLIST 0x00040000
+#define DI_FLAGSEX_PREINSTALLBACKUP 0x00080000
+#define DI_FLAGSEX_BACKUPONREPLACE 0x00100000
+#define DI_FLAGSEX_DRIVERLIST_FROM_URL 0x00200000
+#define DI_FLAGSEX_RESERVED1 0x00400000
+#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000
+#define DI_FLAGSEX_POWERPAGE_ADDED 0x01000000
+#define DI_FLAGSEX_FILTERSIMILARDRIVERS 0x02000000
+#define DI_FLAGSEX_INSTALLEDDRIVER 0x04000000
+#define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE 0x08000000
+#define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH 0x10000000
+#define DI_FLAGSEX_RESTART_DEVICE_ONLY 0x20000000
+#define DI_FLAGSEX_RECURSIVESEARCH 0x40000000
+#define DI_FLAGSEX_SEARCH_PUBLISHED_INFS 0x80000000
+
+typedef struct _SP_REMOVEDEVICE_PARAMS
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Scope;
+ DWORD HwProfile;
+} SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
+
+/* SP_REMOVEDEVICE_PARAMS Scope values */
+#define DI_REMOVEDEVICE_GLOBAL 0x00000001
+#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002
+
+typedef struct _SP_UNREMOVEDEVICE_PARAMS
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Scope;
+ DWORD HwProfile;
+} SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;
+
+/* SP_UNREMOVEDEVICE_PARAMS Scope values */
+#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002
+
+typedef struct _SP_SELECTDEVICE_PARAMS_A
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ CHAR Title[MAX_TITLE_LEN];
+ CHAR Instructions[MAX_INSTRUCTION_LEN];
+ CHAR ListLabel[MAX_LABEL_LEN];
+ CHAR SubTitle[MAX_SUBTITLE_LEN];
+ BYTE Reserved[2];
+} SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
+
+typedef struct _SP_SELECTDEVICE_PARAMS_W
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ WCHAR Title[MAX_TITLE_LEN];
+ WCHAR Instructions[MAX_INSTRUCTION_LEN];
+ WCHAR ListLabel[MAX_LABEL_LEN];
+ WCHAR SubTitle[MAX_SUBTITLE_LEN];
+} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
+
+typedef BOOL (CALLBACK *PDETECT_PROGRESS_NOTIFY)(PVOID ProgressNotifyParam,
+ DWORD DetectComplete);
+
+typedef struct _SP_DETECTDEVICE_PARAMS
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
+ PVOID ProgressNotifyParam;
+} SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;
+
+#define MAX_INSTALLWIZARD_DYNAPAGES 20
+
+typedef struct _SP_INSTALLWIZARD_DATA
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Flags;
+ HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
+ DWORD NumDynamicPages;
+ DWORD DynamicPageFlags;
+ DWORD PrivateFlags;
+ LPARAM PrivateData;
+ HWND hwndWizardDlg;
+} SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
+
+/* SP_INSTALLWIZARD_DATA Flags values */
+#define NDW_INSTALLFLAG_DIDFACTDEFS 0x00000001
+#define NDW_INSTALLFLAG_HARDWAREALLREADYIN 0x00000002
+#define NDW_INSTALLFLAG_NEEDRESTART DI_NEEDRESTART
+#define NDW_INSTALLFLAG_NEEDREBOOT DI_NEEDREBOOT
+#define NDW_INSTALLFLAG_NEEDSHUTDOWN 0x00000200
+#define NDW_INSTALLFLAG_EXPRESSINTRO 0x00000400
+#define NDW_INSTALLFLAG_SKIPISDEVINSTALLED 0x00000800
+#define NDW_INSTALLFLAG_NODETECTEDDEVS 0x00001000
+#define NDW_INSTALLFLAG_INSTALLSPECIFIC 0x00002000
+#define NDW_INSTALLFLAG_SKIPCLASSLIST 0x00004000
+#define NDW_INSTALLFLAG_CI_PICKED_OEM 0x00008000
+#define NDW_INSTALLFLAG_PCMCIAMODE 0x00010000
+#define NDW_INSTALLFLAG_PCMCIADEVICE 0x00020000
+#define NDW_INSTALLFLAG_USERCANCEL 0x00040000
+#define NDW_INSTALLFLAG_KNOWNCLASS 0x00080000
+/* SP_INSTALLWIZARD_DATA DynamicPageFlags values */
+#define DYNAWIZ_FLAG_PAGESADDED 0x00000001
+#define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002
+#define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004
+#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
+
+/* Resource IDs */
+#define MIN_IDD_DYNAWIZ_RESOURCE_ID 10000
+#define MAX_IDD_DYNAWIZ_RESOURCE_ID 11000
+
+#define IDD_DYNAWIZ_FIRSTPAGE 10000
+#define IDD_DYNAWIZ_SELECT_PREVPAGE 10001
+#define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002
+#define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003
+#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004
+#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006
+#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007
+#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008
+#define IDD_DYNAWIZ_SELECTDEV_PAGE 10009
+#define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010
+#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011
+#define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012
+
+#define IDI_RESOURCEFIRST 159
+#define IDI_RESOURCE IDI_RESOURCEFIRST
+#define IDI_RESOURCELAST 161
+#define IDI_RESOURCEOVERLAYFIRST 161
+#define IDI_RESOURCEOVERLAYLAST 161
+
+#define IDI_CLASSICON_OVERLAYFIRST 500
+#define IDI_CLASSICON_OVERLAYLAST 502
+#define IDI_PROBLEM_OVL 500
+#define IDI_DISABLED_OVL 501
+#define IDI_FORCED_OVL 502
+
+typedef struct _SP_NEWDEVICEWIZARD_DATA
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ DWORD Flags;
+ HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
+ DWORD NumDynamicPages;
+ HWND hwndWizardDlg;
+} SP_NEWDEVICEWIZARD_DATA, *PSP_NEWDEVICEWIZARD_DATA;
+
+typedef SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA;
+typedef PSP_NEWDEVICEWIZARD_DATA PSP_ADDPROPERTYPAGE_DATA;
+
+typedef struct _SP_TROUBLESHOOTER_PARAMS_A
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ CHAR ChmFile[MAX_PATH];
+ CHAR HtmlTroubleShooter[MAX_PATH];
+} SP_TROUBLESHOOTER_PARAMS_A, *PSP_TROUBLESHOOTER_PARAMS_A;
+
+typedef struct _SP_TROUBLESHOOTER_PARAMS_W
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ WCHAR ChmFile[MAX_PATH];
+ WCHAR HtmlTroubleShooter[MAX_PATH];
+} SP_TROUBLESHOOTER_PARAMS_W, *PSP_TROUBLESHOOTER_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_TROUBLESHOOTER_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_TROUBLESHOOTER_PARAMS)
+
+typedef struct _SP_POWERMESSAGEWAKE_PARAMS_A
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ CHAR PowerMessageWake[LINE_LEN * 2];
+} SP_POWERMESSAGEWAKE_PARAMS_A, *PSP_POWERMESSAGEWAKE_PARAMS_A;
+
+typedef struct _SP_POWERMESSAGEWAKE_PARAMS_W
+{
+ SP_CLASSINSTALL_HEADER ClassInstallHeader;
+ WCHAR PowerMessageWake[LINE_LEN * 2];
+} SP_POWERMESSAGEWAKE_PARAMS_W, *PSP_POWERMESSAGEWAKE_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_POWERMESSAGEWAKE_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_POWERMESSAGEWAKE_PARAMS)
+
+typedef struct _SP_DRVINFO_DATA_V1_A
+{
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ CHAR Description[LINE_LEN];
+ CHAR MfgName[LINE_LEN];
+ CHAR ProviderName[LINE_LEN];
+} SP_DRVINFO_DATA_V1_A, *PSP_DRVINFO_DATA_V1_A;
+
+typedef struct _SP_DRVINFO_DATA_V1_W
+{
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ WCHAR Description[LINE_LEN];
+ WCHAR MfgName[LINE_LEN];
+ WCHAR ProviderName[LINE_LEN];
+} SP_DRVINFO_DATA_V1_W, *PSP_DRVINFO_DATA_V1_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V1)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V1)
+
+typedef struct _SP_DRVINFO_DATA_V2_A
+{
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ CHAR Description[LINE_LEN];
+ CHAR MfgName[LINE_LEN];
+ CHAR ProviderName[LINE_LEN];
+ FILETIME DriverDate;
+ DWORDLONG DriverVersion;
+} SP_DRVINFO_DATA_V2_A, *PSP_DRVINFO_DATA_V2_A;
+
+typedef struct _SP_DRVINFO_DATA_V2_W
+{
+ DWORD cbSize;
+ DWORD DriverType;
+ ULONG_PTR Reserved;
+ WCHAR Description[LINE_LEN];
+ WCHAR MfgName[LINE_LEN];
+ WCHAR ProviderName[LINE_LEN];
+ FILETIME DriverDate;
+ DWORDLONG DriverVersion;
+} SP_DRVINFO_DATA_V2_W, *PSP_DRVINFO_DATA_V2_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA_V2)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA_V2)
+
+typedef SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A;
+typedef PSP_DRVINFO_DATA_V2_A PSP_DRVINFO_DATA_A;
+typedef SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W;
+typedef PSP_DRVINFO_DATA_V2_W PSP_DRVINFO_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DATA)
+
+typedef struct _SP_DRVINFO_DETAIL_DATA_A
+{
+ DWORD cbSize;
+ FILETIME InfDate;
+ DWORD CompatIDsOffset;
+ DWORD CompatIDsLength;
+ ULONG_PTR Reserved;
+ CHAR SectionName[LINE_LEN];
+ CHAR InfFileName[MAX_PATH];
+ CHAR DrvDescription[LINE_LEN];
+ CHAR HardwareID[ANYSIZE_ARRAY];
+} SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
+
+typedef struct _SP_DRVINFO_DETAIL_DATA_W
+{
+ DWORD cbSize;
+ FILETIME InfDate;
+ DWORD CompatIDsOffset;
+ DWORD CompatIDsLength;
+ ULONG_PTR Reserved;
+ WCHAR SectionName[LINE_LEN];
+ WCHAR InfFileName[MAX_PATH];
+ WCHAR DrvDescription[LINE_LEN];
+ WCHAR HardwareID[ANYSIZE_ARRAY];
+} SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DRVINFO_DETAIL_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DRVINFO_DETAIL_DATA)
+
+typedef struct _SP_DRVINSTALL_PARAMS
+{
+ DWORD cbSize;
+ DWORD Rank;
+ DWORD Flags;
+ DWORD_PTR PrivateData;
+ DWORD Reserved;
+} SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
+
+/* SP_DRVINSTALL_PARAMS Flags values */
+#define DNF_DUPDESC 0x00000001
+#define DNF_OLDDRIVER 0x00000002
+#define DNF_EXCLUDEFROMLIST 0x00000004
+#define DNF_NODRIVER 0x00000008
+#define DNF_LEGACYINF 0x00000010
+#define DNF_CLASS_DRIVER 0x00000020
+#define DNF_COMPATIBLE_DRIVER 0x00000040
+#define DNF_INET_DRIVER 0x00000080
+#define DNF_UNUSED1 0x00000100
+#define DNF_INDEXED_DRIVER 0x00000200
+#define DNF_OLD_INET_DRIVER 0x00000400
+#define DNF_BAD_DRIVER 0x00000800
+#define DNF_DUPPROVIDER 0x00001000
+#define DNF_INF_IS_SIGNED 0x00002000
+#define DNF_OEM_F6_INF 0x00004000
+#define DNF_DUPDRIVERVER 0x00008000
+#define DNF_BASIC_DRIVER 0x00010000
+#define DNF_AUTHENTICODE_SIGNED 0x00020000
+#define DNF_INSTALLEDDRIVER 0x00040000
+#define DNF_ALWAYSEXCLUDEFROMLIST 0x00080000
+/* SP_DRVINSTALL_PARAMS Rank values */
+#define DRIVER_HARDWAREID_RANK 0x00000fff
+#define DRIVER_COMPATID_RANK 0x00003fff
+#define DRIVER_UNTRUSTED_RANK 0x00008000
+#define DRIVER_UNTRUSTED_HARDWAREID_RANK 0x00008fff
+#define DRIVER_UNTRUSTED_COMPATID_RANK 0x0000bfff
+#define DRIVER_W9X_SUSPECT_RANK 0x0000c000
+#define DRIVER_W9X_SUSPECT_HARDWAREID_RANK 0x0000cfff
+
+/* Device Information structure (references a device instance that is a member
+ of a device information set) */
+typedef struct _SP_DEVINFO_DATA
+{
+ DWORD cbSize;
+ GUID ClassGuid;
+ DWORD DevInst; /* DEVINST handle */
+ ULONG_PTR Reserved;
+} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
+
+typedef struct _SP_DEVICE_INTERFACE_DATA
+{
+ DWORD cbSize;
+ GUID InterfaceClassGuid;
+ DWORD Flags;
+ ULONG_PTR Reserved;
+} SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
+
+#define SPINT_ACTIVE 0x00000001
+#define SPINT_DEFAULT 0x00000002
+#define SPINT_REMOVED 0x00000004
+
+typedef SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA;
+typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA;
+#define SPID_ACTIVE SPINT_ACTIVE
+#define SPID_DEFAULT SPINT_DEFAULT
+#define SPID_REMOVED SPINT_REMOVED
+
+typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A
+{
+ DWORD cbSize;
+ CHAR DevicePath[ANYSIZE_ARRAY];
+} SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
+
+typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W
+{
+ DWORD cbSize;
+ WCHAR DevicePath[ANYSIZE_ARRAY];
+} SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVICE_INTERFACE_DETAIL_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVICE_INTERFACE_DETAIL_DATA)
+
+typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {
+ DWORD cbSize;
+ GUID ClassGuid;
+ HANDLE RemoteMachineHandle;
+ CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
+} SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;
+
+typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {
+ DWORD cbSize;
+ GUID ClassGuid;
+ HANDLE RemoteMachineHandle;
+ WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
+} SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_DEVINFO_LIST_DETAIL_DATA)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_DEVINFO_LIST_DETAIL_DATA)
+
+typedef DWORD (CALLBACK *PSP_DETSIG_CMPPROC)(HDEVINFO, PSP_DEVINFO_DATA,
+ PSP_DEVINFO_DATA, PVOID);
+
+typedef struct _COINSTALLER_CONTEXT_DATA
+{
+ BOOL PostProcessing;
+ DWORD InstallResult;
+ PVOID PrivateData;
+} COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
+
+typedef struct _SP_CLASSIMAGELIST_DATA
+{
+ DWORD cbSize;
+ HIMAGELIST ImageList;
+ ULONG_PTR Reserved;
+} SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
+
+typedef struct _SP_PROPSHEETPAGE_REQUEST
+{
+ DWORD cbSize;
+ DWORD PageRequested;
+ HDEVINFO DeviceInfoSet;
+ PSP_DEVINFO_DATA DeviceInfoData;
+} SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
+
+/* SP_PROPSHEETPAGE_REQUEST PageRequested values */
+#define SPPSR_SELECT_DEVICE_RESOURCES 1
+#define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2
+#define SPPSR_ENUM_ADV_DEVICE_PROPERTIES 3
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_A
+{
+ DWORD cbSize;
+ CHAR FullInfPath[MAX_PATH];
+ INT FilenameOffset;
+} SP_BACKUP_QUEUE_PARAMS_V1_A, *PSP_BACKUP_QUEUE_PARAMS_V1_A;
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V1_W
+{
+ DWORD cbSize;
+ WCHAR FullInfPath[MAX_PATH];
+ INT FilenameOffset;
+} SP_BACKUP_QUEUE_PARAMS_V1_W, *PSP_BACKUP_QUEUE_PARAMS_V1_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V1)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V1)
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_A
+{
+ DWORD cbSize;
+ CHAR FullInfPath[MAX_PATH];
+ INT FilenameOffset;
+ CHAR ReinstallInstance[MAX_PATH];
+} SP_BACKUP_QUEUE_PARAMS_V2_A, *PSP_BACKUP_QUEUE_PARAMS_V2_A;
+
+typedef struct _SP_BACKUP_QUEUE_PARAMS_V2_W
+{
+ DWORD cbSize;
+ WCHAR FullInfPath[MAX_PATH];
+ INT FilenameOffset;
+ WCHAR ReinstallInstance[MAX_PATH];
+} SP_BACKUP_QUEUE_PARAMS_V2_W, *PSP_BACKUP_QUEUE_PARAMS_V2_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS_V2)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS_V2)
+
+typedef SP_BACKUP_QUEUE_PARAMS_V2_A SP_BACKUP_QUEUE_PARAMS_A;
+typedef PSP_BACKUP_QUEUE_PARAMS_V2_A PSP_BACKUP_QUEUE_PARAMS_A;
+typedef SP_BACKUP_QUEUE_PARAMS_V2_W SP_BACKUP_QUEUE_PARAMS_W;
+typedef PSP_BACKUP_QUEUE_PARAMS_V2_W PSP_BACKUP_QUEUE_PARAMS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_BACKUP_QUEUE_PARAMS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_BACKUP_QUEUE_PARAMS)
+
+typedef struct _FILE_IN_CABINET_INFO_A {
+ LPCSTR NameInCabinet;
+ DWORD FileSize;
+ DWORD Win32Error;
+ WORD DosDate;
+ WORD DosTime;
+ WORD DosAttribs;
+ CHAR FullTargetName[MAX_PATH];
+} FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
+
+typedef struct _FILE_IN_CABINET_INFO_W {
+ LPCWSTR NameInCabinet;
+ DWORD FileSize;
+ DWORD Win32Error;
+ WORD DosDate;
+ WORD DosTime;
+ WORD DosAttribs;
+ WCHAR FullTargetName[MAX_PATH];
+} FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(FILE_IN_CABINET_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PFILE_IN_CABINET_INFO)
+
+typedef struct _CABINET_INFO_A {
+ PCSTR CabinetPath;
+ PCSTR CabinetFile;
+ PCSTR DiskName;
+ USHORT SetId;
+ USHORT CabinetNumber;
+} CABINET_INFO_A, *PCABINET_INFO_A;
+
+typedef struct _CABINET_INFO_W {
+ PCWSTR CabinetPath;
+ PCWSTR CabinetFile;
+ PCWSTR DiskName;
+ USHORT SetId;
+ USHORT CabinetNumber;
+} CABINET_INFO_W, *PCABINET_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(CABINET_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PCABINET_INFO)
+
+typedef struct _SP_INF_INFORMATION {
+ DWORD InfStyle;
+ DWORD InfCount;
+ BYTE VersionData[ANYSIZE_ARRAY];
+} SP_INF_INFORMATION, *PSP_INF_INFORMATION;
+
+#define INF_STYLE_NONE 0x00
+#define INF_STYLE_OLDNT 0x01
+#define INF_STYLE_WIN4 0x02
+#define INF_STYLE_CACHE_ENABLE 0x10
+#define INF_STYLE_CACHE_DISABLE 0x20
+
+#define FILEOP_COPY 0
+#define FILEOP_RENAME 1
+#define FILEOP_DELETE 2
+#define FILEOP_BACKUP 3
+
+#define FILEOP_ABORT 0
+#define FILEOP_DOIT 1
+#define FILEOP_SKIP 2
+#define FILEOP_RETRY FILEOP_DOIT
+#define FILEOP_NEWPATH 4
+
+#define COPYFLG_WARN_IF_SKIP 0x00000001
+#define COPYFLG_NOSKIP 0x00000002
+#define COPYFLG_NOVERSIONCHECK 0x00000004
+#define COPYFLG_FORCE_FILE_IN_USE 0x00000008
+#define COPYFLG_NO_OVERWRITE 0x00000010
+#define COPYFLG_NO_VERSION_DIALOG 0x00000020
+#define COPYFLG_OVERWRITE_OLDER_ONLY 0x00000040
+#define COPYFLG_PROTECTED_WINDOWS_DRIVER_FILE 0x00000100
+#define COPYFLG_REPLACEONLY 0x00000400
+#define COPYFLG_NODECOMP 0x00000800
+#define COPYFLG_REPLACE_BOOT_FILE 0x00001000
+#define COPYFLG_NOPRUNE 0x00002000
+#define COPYFLG_IN_USE_TRY_RENAME 0x00004000
+
+#define DELFLG_IN_USE 0x00000001
+#define DELFLG_IN_USE1 0x00010000
+
+typedef struct _FILEPATHS_A
+{
+ PCSTR Target;
+ PCSTR Source;
+ UINT Win32Error;
+ DWORD Flags;
+} FILEPATHS_A, *PFILEPATHS_A;
+
+typedef struct _FILEPATHS_W
+{
+ PCWSTR Target;
+ PCWSTR Source;
+ UINT Win32Error;
+ DWORD Flags;
+} FILEPATHS_W, *PFILEPATHS_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS)
+
+typedef struct _FILEPATHS_SIGNERINFO_A
+{
+ PCSTR Target;
+ PCSTR Source;
+ UINT Win32Error;
+ DWORD Flags;
+ PCSTR DigitalSigner;
+ PCSTR Version;
+ PCSTR CatalogFile;
+} FILEPATHS_SIGNERINFO_A, *PFILEPATHS_SIGNERINFO_A;
+
+typedef struct _FILEPATHS_SIGNERINFO_W
+{
+ PCWSTR Target;
+ PCWSTR Source;
+ UINT Win32Error;
+ DWORD Flags;
+ PCWSTR DigitalSigner;
+ PCWSTR Version;
+ PCWSTR CatalogFile;
+} FILEPATHS_SIGNERINFO_W, *PFILEPATHS_SIGNERINFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(FILEPATHS_SIGNERINFO)
+
+typedef struct _SOURCE_MEDIA_A
+{
+ PCSTR Reserved;
+ PCSTR Tagfile;
+ PCSTR Description;
+ PCSTR SourcePath;
+ PCSTR SourceFile;
+ DWORD Flags;
+} SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
+
+typedef struct _SOURCE_MEDIA_W
+{
+ PCWSTR Reserved;
+ PCWSTR Tagfile;
+ PCWSTR Description;
+ PCWSTR SourcePath;
+ PCWSTR SourceFile;
+ DWORD Flags;
+} SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SOURCE_MEDIA)
+
+typedef struct _SP_ORIGINAL_FILE_INFO_A
+{
+ DWORD cbSize;
+ CHAR OriginalInfName[MAX_PATH];
+ CHAR OriginalCatalogName[MAX_PATH];
+} SP_ORIGINAL_FILE_INFO_A, *PSP_ORIGINAL_FILE_INFO_A;
+
+typedef struct _SP_ORIGINAL_FILE_INFO_W
+{
+ DWORD cbSize;
+ WCHAR OriginalInfName[MAX_PATH];
+ WCHAR OriginalCatalogName[MAX_PATH];
+} SP_ORIGINAL_FILE_INFO_W, *PSP_ORIGINAL_FILE_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_ORIGINAL_FILE_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_ORIGINAL_FILE_INFO)
+
+typedef struct _SP_INF_SIGNER_INFO_A
+{
+ DWORD cbSize;
+ CHAR CatalogFile[MAX_PATH];
+ CHAR DigitalSigner[MAX_PATH];
+ CHAR DigitalSignerVersion[MAX_PATH];
+} SP_INF_SIGNER_INFO_A, *PSP_INF_SIGNER_INFO_A;
+
+typedef struct _SP_INF_SIGNER_INFO_W
+{
+ DWORD cbSize;
+ WCHAR CatalogFile[MAX_PATH];
+ WCHAR DigitalSigner[MAX_PATH];
+ WCHAR DigitalSignerVersion[MAX_PATH];
+} SP_INF_SIGNER_INFO_W, *PSP_INF_SIGNER_INFO_W;
+
+DECL_WINELIB_SETUPAPI_TYPE_AW(SP_INF_SIGNER_INFO)
+DECL_WINELIB_SETUPAPI_TYPE_AW(PSP_INF_SIGNER_INFO)
+
+#define SPFILENOTIFY_STARTQUEUE 0x0001
+#define SPFILENOTIFY_ENDQUEUE 0x0002
+#define SPFILENOTIFY_STARTSUBQUEUE 0x0003
+#define SPFILENOTIFY_ENDSUBQUEUE 0x0004
+#define SPFILENOTIFY_STARTDELETE 0x0005
+#define SPFILENOTIFY_ENDDELETE 0x0006
+#define SPFILENOTIFY_DELETEERROR 0x0007
+#define SPFILENOTIFY_STARTRENAME 0x0008
+#define SPFILENOTIFY_ENDRENAME 0x0009
+#define SPFILENOTIFY_RENAMEERROR 0x000a
+#define SPFILENOTIFY_STARTCOPY 0x000b
+#define SPFILENOTIFY_ENDCOPY 0x000c
+#define SPFILENOTIFY_COPYERROR 0x000d
+#define SPFILENOTIFY_NEEDMEDIA 0x000e
+#define SPFILENOTIFY_QUEUESCAN 0x000f
+#define SPFILENOTIFY_CABINETINFO 0x0010
+#define SPFILENOTIFY_FILEINCABINET 0x0011
+#define SPFILENOTIFY_NEEDNEWCABINET 0x0012
+#define SPFILENOTIFY_FILEEXTRACTED 0x0013
+#define SPFILENOTIFY_FILEOPDELAYED 0x0014
+#define SPFILENOTIFY_STARTBACKUP 0x0015
+#define SPFILENOTIFY_BACKUPERROR 0x0016
+#define SPFILENOTIFY_ENDBACKUP 0x0017
+#define SPFILENOTIFY_QUEUESCAN_EX 0x0018
+#define SPFILENOTIFY_STARTREGISTRATION 0x0019
+#define SPFILENOTIFY_ENDREGISTRATION 0x0020
+#define SPFILENOTIFY_QUEUESCAN_SIGNERINFO 0x0040
+
+#define SPFILENOTIFY_LANGMISMATCH 0x00010000
+#define SPFILENOTIFY_TARGETEXISTS 0x00020000
+#define SPFILENOTIFY_TARGETNEWER 0x00040000
+
+#define SPINST_LOGCONFIG 0x00000001
+#define SPINST_INIFILES 0x00000002
+#define SPINST_REGISTRY 0x00000004
+#define SPINST_INI2REG 0x00000008
+#define SPINST_FILES 0x00000010
+#define SPINST_BITREG 0x00000020
+#define SPINST_REGSVR 0x00000040
+#define SPINST_UNREGSVR 0x00000080
+#define SPINST_PROFILEITEMS 0x00000100
+#define SPINST_COPYINF 0x00000200
+#define SPINST_ALL 0x000003ff
+#define SPINST_SINGLESECTION 0x00010000
+#define SPINST_LOGCONFIG_IS_FORCED 0x00020000
+#define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000
+#define SPINST_REGISTERCALLBACKAWARE 0x00080000
+
+#define SPSVCINST_TAGTOFRONT 0x00000001
+#define SPSVCINST_ASSOCSERVICE 0x00000002
+#define SPSVCINST_DELETEEVENTLOGENTRY 0x00000004
+#define SPSVCINST_NOCLOBBER_DISPLAYNAME 0x00000008
+#define SPSVCINST_NOCLOBBER_STARTTYPE 0x00000010
+#define SPSVCINST_NOCLOBBER_ERRORCONTROL 0x00000020
+#define SPSVCINST_NOCLOBBER_LOADORDERGROUP 0x00000040
+#define SPSVCINST_NOCLOBBER_DEPENDENCIES 0x00000080
+#define SPSVCINST_NOCLOBBER_DESCRIPTION 0x00000100
+#define SPSVCINST_STOPSERVICE 0x00000200
+#define SPSVCINST_CLOBBER_SECURITY 0x00000400
+#define SPSVCINST_STARTSERVICE 0x00000800
+
+#define SP_COPY_DELETESOURCE 0x00000001
+#define SP_COPY_REPLACEONLY 0x00000002
+#define SP_COPY_NEWER 0x00000004
+#define SP_COPY_NEWER_OR_SAME SP_COPY_NEWER
+#define SP_COPY_NOOVERWRITE 0x00000008
+#define SP_COPY_NODECOMP 0x00000010
+#define SP_COPY_LANGUAGEAWARE 0x00000020
+#define SP_COPY_SOURCE_ABSOLUTE 0x00000040
+#define SP_COPY_SOURCEPATH_ABSOLUTE 0x00000080
+#define SP_COPY_IN_USE_NEEDS_REBOOT 0x00000100
+#define SP_COPY_FORCE_IN_USE 0x00000200
+#define SP_COPY_NOSKIP 0x00000400
+#define SP_FLAG_CABINETCONTINUATION 0x00000800
+#define SP_COPY_FORCE_NOOVERWRITE 0x00001000
+#define SP_COPY_FORCE_NEWER 0x00002000
+#define SP_COPY_WARNIFSKIP 0x00004000
+#define SP_COPY_NOBROWSE 0x00008000
+#define SP_COPY_NEWER_ONLY 0x00010000
+#define SP_COPY_SOURCE_SIS_MASTER 0x00020000
+#define SP_COPY_OEMINF_CATALOG_ONLY 0x00040000
+#define SP_COPY_REPLACE_BOOT_FILE 0x00080000
+#define SP_COPY_NOPRUNE 0x00100000
+#define SP_COPY_OEM_F6_INF 0x00200000
+
+#define SP_BACKUP_BACKUPPASS 0x00000001
+#define SP_BACKUP_DEMANDPASS 0x00000002
+#define SP_BACKUP_SPECIAL 0x00000004
+#define SP_BACKUP_BOOTFILE 0x00000008
+
+#define SPOST_NONE 0
+#define SPOST_PATH 1
+#define SPOST_URL 2
+#define SPOST_MAX 3
+
+#define SPQ_SCAN_FILE_PRESENCE 0x00000001
+#define SPQ_SCAN_FILE_VALIDITY 0x00000002
+#define SPQ_SCAN_USE_CALLBACK 0x00000004
+#define SPQ_SCAN_USE_CALLBACKEX 0x00000008
+#define SPQ_SCAN_INFORM_USER 0x00000010
+#define SPQ_SCAN_PRUNE_COPY_QUEUE 0x00000020
+#define SPQ_SCAN_USE_CALLBACK_SIGNERINFO 0x00000040
+#define SPQ_SCAN_PRUNE_DELREN 0x00000080
+
+#define SPQ_DELAYED_COPY 0x00000001
+
+#define SPQ_FLAG_BACKUP_AWARE 0x00000001
+#define SPQ_FLAG_ABORT_IF_UNSIGNED 0x00000002
+#define SPQ_FLAG_FILES_MODIFIED 0x00000004
+#define SPQ_FLAG_VALID 0x00000007
+
+#define FLG_ADDREG_DELREG_BIT 0x00008000
+#define FLG_ADDREG_BINVALUETYPE 0x00000001
+#define FLG_ADDREG_NOCLOBBER 0x00000002
+#define FLG_ADDREG_DELVAL 0x00000004
+#define FLG_ADDREG_APPEND 0x00000008
+#define FLG_ADDREG_KEYONLY 0x00000010
+#define FLG_ADDREG_OVERWRITEONLY 0x00000020
+#define FLG_ADDREG_64BITKEY 0x00001000
+#define FLG_ADDREG_KEYONLY_COMMON 0x00002000
+#define FLG_ADDREG_32BITKEY 0x00004000
+#define FLG_ADDREG_TYPE_SZ 0x00000000
+#define FLG_ADDREG_TYPE_MULTI_SZ 0x00010000
+#define FLG_ADDREG_TYPE_EXPAND_SZ 0x00020000
+#define FLG_ADDREG_TYPE_BINARY (0x00000000 | FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_DWORD (0x00010000 | FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_NONE (0x00020000 | FLG_ADDREG_BINVALUETYPE)
+#define FLG_ADDREG_TYPE_MASK (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE)
+
+#define FLG_DELREG_VALUE (0x00000000)
+#define FLG_DELREG_TYPE_MASK FLG_ADDREG_TYPE_MASK
+#define FLG_DELREG_TYPE_SZ FLG_ADDREG_TYPE_SZ
+#define FLG_DELREG_TYPE_MULTI_SZ FLG_ADDREG_TYPE_MULTI_SZ
+#define FLG_DELREG_TYPE_EXPAND_SZ FLG_ADDREG_TYPE_EXPAND_SZ
+#define FLG_DELREG_TYPE_BINARY FLG_ADDREG_TYPE_BINARY
+#define FLG_DELREG_TYPE_DWORD FLG_ADDREG_TYPE_DWORD
+#define FLG_DELREG_TYPE_NONE FLG_ADDREG_TYPE_NONE
+#define FLG_DELREG_64BITKEY FLG_ADDREG_64BITKEY
+#define FLG_DELREG_KEYONLY_COMMON FLG_ADDREG_KEYONLY_COMMON
+#define FLG_DELREG_32BITKEY FLG_ADDREG_32BITKEY
+#define FLG_DELREG_OPERATION_MASK (0x000000FE)
+#define FLG_DELREG_MULTI_SZ_DELSTRING (FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT | 0x00000002)
+
+#define FLG_REGSVR_DLLREGISTER 0x00000001
+#define FLG_REGSVR_DLLINSTALL 0x00000002
+
+#define FLG_PROFITEM_CURRENTUSER 0x00000001
+#define FLG_PROFITEM_DELETE 0x00000002
+#define FLG_PROFITEM_GROUP 0x00000004
+#define FLG_PROFITEM_CSIDL 0x00000008
+
+#define DI_NOVCP 0x00000008
+
+/* Class installer function codes */
+#define DIF_SELECTDEVICE 0x01
+#define DIF_INSTALLDEVICE 0x02
+#define DIF_ASSIGNRESOURCES 0x03
+#define DIF_PROPERTIES 0x04
+#define DIF_REMOVE 0x05
+#define DIF_FIRSTTIMESETUP 0x06
+#define DIF_FOUNDDEVICE 0x07
+#define DIF_SELECTCLASSDRIVERS 0x08
+#define DIF_VALIDATECLASSDRIVERS 0x09
+#define DIF_INSTALLCLASSDRIVERS 0x0a
+#define DIF_CALCDISKSPACE 0x0b
+#define DIF_DESTROYPRIVATEDATA 0x0c
+#define DIF_VALIDATEDRIVER 0x0d
+#define DIF_MOVEDEVICE 0x0e
+#define DIF_DETECT 0x0f
+#define DIF_INSTALLWIZARD 0x10
+#define DIF_DESTROYWIZARDDATA 0x11
+#define DIF_PROPERTYCHANGE 0x12
+#define DIF_ENABLECLASS 0x13
+#define DIF_DETECTVERIFY 0x14
+#define DIF_INSTALLDEVICEFILES 0x15
+#define DIF_UNREMOVE 0x16
+#define DIF_SELECTBESTCOMPATDRV 0x17
+#define DIF_ALLOW_INSTALL 0x18
+#define DIF_REGISTERDEVICE 0x19
+#define DIF_NEWDEVICEWIZARD_PRESELECT 0x1a
+#define DIF_NEWDEVICEWIZARD_SELECT 0x1b
+#define DIF_NEWDEVICEWIZARD_PREANALYZE 0x1c
+#define DIF_NEWDEVICEWIZARD_POSTANALYZE 0x1d
+#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 0x1e
+#define DIF_UNUSED1 0x1f
+#define DIF_INSTALLINTERFACES 0x20
+#define DIF_DETECTCANCEL 0x21
+#define DIF_REGISTER_COINSTALLERS 0x22
+#define DIF_ADDPROPERTYPAGE_ADVANCED 0x23
+#define DIF_ADDPROPERTYPAGE_BASIC 0x24
+#define DIF_RESERVED1 0x25
+#define DIF_TROUBLESHOOTER 0x26
+#define DIF_POWERMESSAGEWAKE 0x27
+#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED 0x28
+#define DIF_UPDATEDRIVER_UI 0x29
+#define DIF_RESERVED2 0x30
+
+/* Directory ids */
+#define DIRID_ABSOLUTE (-1)
+#define DIRID_ABSOLUTE_16BIT 0xffff
+#define DIRID_NULL 0
+#define DIRID_SRCPATH 1
+#define DIRID_WINDOWS 10
+#define DIRID_SYSTEM 11
+#define DIRID_DRIVERS 12
+#define DIRID_IOSUBSYS DIRID_DRIVERS
+#define DIRID_INF 17
+#define DIRID_HELP 18
+#define DIRID_FONTS 20
+#define DIRID_VIEWERS 21
+#define DIRID_COLOR 23
+#define DIRID_APPS 24
+#define DIRID_SHARED 25
+#define DIRID_BOOT 30
+#define DIRID_SYSTEM16 50
+#define DIRID_SPOOL 51
+#define DIRID_SPOOLDRIVERS 52
+#define DIRID_USERPROFILE 53
+#define DIRID_LOADER 54
+#define DIRID_PRINTPROCESSOR 55
+#define DIRID_DEFAULT DIRID_SYSTEM
+
+#define DIRID_COMMON_STARTMENU 16406
+#define DIRID_COMMON_PROGRAMS 16407
+#define DIRID_COMMON_STARTUP 16408
+#define DIRID_COMMON_DESKTOPDIRECTORY 16409
+#define DIRID_COMMON_FAVORITES 16415
+#define DIRID_COMMON_APPDATA 16419
+#define DIRID_PROGRAM_FILES 16422
+#define DIRID_SYSTEM_X86 16425
+#define DIRID_PROGRAM_FILES_X86 16426
+#define DIRID_PROGRAM_FILES_COMMON 16427
+#define DIRID_PROGRAM_FILES_COMMONX86 16428
+#define DIRID_COMMON_TEMPLATES 16429
+#define DIRID_COMMON_DOCUMENTS 16430
+
+#define DIRID_USER 0x8000
+
+
+/* Error code */
+
+#define ERROR_EXPECTED_SECTION_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
+#define ERROR_BAD_SECTION_NAME_LINE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
+#define ERROR_SECTION_NAME_TOO_LONG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
+#define ERROR_GENERAL_SYNTAX (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
+#define ERROR_WRONG_INF_STYLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
+#define ERROR_SECTION_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
+#define ERROR_LINE_NOT_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
+#define ERROR_NO_BACKUP (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x103)
+#define ERROR_NO_ASSOCIATED_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
+#define ERROR_CLASS_MISMATCH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
+#define ERROR_DUPLICATE_FOUND (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
+#define ERROR_NO_DRIVER_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
+#define ERROR_KEY_DOES_NOT_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
+#define ERROR_INVALID_DEVINST_NAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
+#define ERROR_INVALID_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
+#define ERROR_DEVINST_ALREADY_EXISTS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
+#define ERROR_DEVINFO_NOT_REGISTERED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
+#define ERROR_INVALID_REG_PROPERTY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
+#define ERROR_NO_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
+#define ERROR_NO_SUCH_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
+#define ERROR_CANT_LOAD_CLASS_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
+#define ERROR_INVALID_CLASS_INSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
+#define ERROR_DI_DO_DEFAULT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
+#define ERROR_DI_NOFILECOPY (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
+#define ERROR_INVALID_HWPROFILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
+#define ERROR_NO_DEVICE_SELECTED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
+#define ERROR_DEVINFO_LIST_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
+#define ERROR_DEVINFO_DATA_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
+#define ERROR_DI_BAD_PATH (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
+#define ERROR_NO_CLASSINSTALL_PARAMS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
+#define ERROR_FILEQUEUE_LOCKED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
+#define ERROR_BAD_SERVICE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
+#define ERROR_NO_CLASS_DRIVER_LIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
+#define ERROR_NO_ASSOCIATED_SERVICE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
+#define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)
+#define ERROR_DEVICE_INTERFACE_ACTIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)
+#define ERROR_DEVICE_INTERFACE_REMOVED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)
+#define ERROR_BAD_INTERFACE_INSTALLSECT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)
+#define ERROR_NO_SUCH_INTERFACE_CLASS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)
+#define ERROR_INVALID_REFERENCE_STRING (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)
+#define ERROR_INVALID_MACHINENAME (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)
+#define ERROR_REMOTE_COMM_FAILURE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)
+#define ERROR_MACHINE_UNAVAILABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)
+#define ERROR_NO_CONFIGMGR_SERVICES (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)
+#define ERROR_INVALID_PROPPAGE_PROVIDER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)
+#define ERROR_NO_SUCH_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)
+#define ERROR_DI_POSTPROCESSING_REQUIRED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)
+#define ERROR_INVALID_COINSTALLER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)
+#define ERROR_NO_COMPAT_DRIVERS (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)
+#define ERROR_NO_DEVICE_ICON (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)
+#define ERROR_INVALID_INF_LOGCONFIG (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)
+#define ERROR_DI_DONT_INSTALL (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)
+#define ERROR_INVALID_FILTER_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)
+#define ERROR_NON_WINDOWS_NT_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22D)
+#define ERROR_NON_WINDOWS_DRIVER (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22E)
+#define ERROR_NO_CATALOG_FOR_OEM_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22F)
+#define ERROR_DEVINSTALL_QUEUE_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x230)
+#define ERROR_NOT_DISABLEABLE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x231)
+#define ERROR_CANT_REMOVE_DEVINST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x232)
+#define ERROR_INVALID_TARGET (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x233)
+#define ERROR_DRIVER_NONNATIVE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x234)
+#define ERROR_IN_WOW64 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235)
+#define ERROR_SET_SYSTEM_RESTORE_POINT (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x236)
+#define ERROR_INCORRECTLY_COPIED_INF (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x237)
+#define ERROR_SCE_DISABLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x238)
+#define ERROR_WRONG_INF_TYPE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x24A)
+#define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE
+#define ERROR_INTERFACE_DEVICE_ACTIVE ERROR_DEVICE_INTERFACE_ACTIVE
+#define ERROR_INTERFACE_DEVICE_REMOVED ERROR_DEVICE_INTERFACE_REMOVED
+#define ERROR_NO_SUCH_INTERFACE_DEVICE ERROR_NO_SUCH_DEVICE_INTERFACE
+#define ERROR_NOT_INSTALLED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
+
+/* flags for SetupDiGetClassDevs */
+#define DIGCF_DEFAULT 0x00000001
+#define DIGCF_PRESENT 0x00000002
+#define DIGCF_ALLCLASSES 0x00000004
+#define DIGCF_PROFILE 0x00000008
+#define DIGCF_DEVICEINTERFACE 0x00000010
+
+/* Flags for SetupDiOpenClassRegKeyEx */
+#define DIOCR_INSTALLER 0x00000001
+#define DIOCR_INTERFACE 0x00000002
+
+/* Flags for SetupDiBuildClassInfoList(Ex) */
+#define DIBCI_NOINSTALLCLASS 0x00000001
+#define DIBCI_NODISPLAYCLASS 0x00000002
+
+/* Flags for SetupDiCreateDeviceInfo */
+#define DICD_GENERATE_ID 0x00000001
+#define DICD_INHERIT_CLASSDRVS 0x00000002
+
+/* Flags for SetupDiOpenDeviceInfo */
+#define DIOD_INHERIT_CLASSDRVS 0x00000002
+#define DIOD_CANCEL_REMOVE 0x00000004
+
+/* Flags for SetupDiOpenDeviceInterface */
+#define DIODI_NO_ADD 0x00000001
+
+/* Flags for SetupDiRegisterDeviceInfo */
+#define SPRDI_FIND_DUPS 0x00000001
+
+/* Values for SetupDi*Info* DriverType */
+#define SPDIT_NODRIVER 0x00000000
+#define SPDIT_CLASSDRIVER 0x00000001
+#define SPDIT_COMPATDRIVER 0x00000002
+
+/* setup device registry property codes */
+#define SPDRP_DEVICEDESC 0x00000000
+#define SPDRP_HARDWAREID 0x00000001
+#define SPDRP_COMPATIBLEIDS 0x00000002
+#define SPDRP_UNUSED0 0x00000003
+#define SPDRP_SERVICE 0x00000004
+#define SPDRP_UNUSED1 0x00000005
+#define SPDRP_UNUSED2 0x00000006
+#define SPDRP_CLASS 0x00000007
+#define SPDRP_CLASSGUID 0x00000008
+#define SPDRP_DRIVER 0x00000009
+#define SPDRP_CONFIGFLAGS 0x0000000a
+#define SPDRP_MFG 0x0000000b
+#define SPDRP_FRIENDLYNAME 0x0000000c
+#define SPDRP_LOCATION_INFORMATION 0x0000000d
+#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME 0x0000000e
+#define SPDRP_CAPABILITIES 0x0000000f
+#define SPDRP_UI_NUMBER 0x00000010
+#define SPDRP_UPPERFILTERS 0x00000011
+#define SPDRP_LOWERFILTERS 0x00000012
+#define SPDRP_BUSTYPEGUID 0x00000013
+#define SPDRP_LEGACYBUSTYPE 0x00000014
+#define SPDRP_BUSNUMBER 0x00000015
+#define SPDRP_ENUMERATOR_NAME 0x00000016
+#define SPDRP_SECURITY 0x00000017
+#define SPDRP_SECURITY_SDS 0x00000018
+#define SPDRP_DEVTYPE 0x00000019
+#define SPDRP_EXCLUSIVE 0x0000001a
+#define SPDRP_CHARACTERISTICS 0x0000001b
+#define SPDRP_ADDRESS 0x0000001c
+#define SPDRP_UI_NUMBER_DESC_FORMAT 0x0000001d
+#define SPDRP_DEVICE_POWER_DATA 0x0000001e
+#define SPDRP_REMOVAL_POLICY 0x0000001f
+#define SPDRP_REMOVAL_POLICY_HW_DEFAULT 0x00000020
+#define SPDRP_REMOVAL_POLICY_OVERRIDE 0x00000021
+#define SPDRP_INSTALL_STATE 0x00000022
+#define SPDRP_MAXIMUM_PROPERTY 0x00000023
+
+#define DPROMPT_SUCCESS 0
+#define DPROMPT_CANCEL 1
+#define DPROMPT_SKIPFILE 2
+#define DPROMPT_BUFFERTOOSMALL 3
+#define DPROMPT_OUTOFMEMORY 4
+
+#define SETDIRID_NOT_FULL_PATH 0x00000001
+
+#define IDF_NOBROWSE 0x00000001
+#define IDF_NOSKIP 0x00000002
+#define IDF_NODETAILS 0x00000004
+#define IDF_NOCOMPRESSED 0x00000008
+#define IDF_CHECKFIRST 0x00000100
+#define IDF_NOBEEP 0x00000200
+#define IDF_NOFOREGROUND 0x00000400
+#define IDF_WARNIFSKIP 0x00000800
+
+#define IDF_NOREMOVABLEMEDIAPROMPT 0x00001000
+#define IDF_USEDISKNAMEASPROMPT 0x00002000
+#define IDF_OEMDISK 0x80000000
+
+#define INFINFO_INF_SPEC_IS_HINF 1
+#define INFINFO_INF_NAME_IS_ABSOLUTE 2
+#define INFINFO_DEFAULT_SEARCH 3
+#define INFINFO_REVERSE_DEFAULT_SEARCH 4
+#define INFINFO_INF_PATH_LIST_SEARCH 5
+
+#define LogSeverity DWORD
+#define LogSevInformation 0x00000000
+#define LogSevWarning 0x00000001
+#define LogSevError 0x00000002
+#define LogSevFatalError 0x00000003
+#define LogSevMaximum 0x00000004
+
+#define SRCINFO_PATH 1
+#define SRCINFO_TAGFILE 2
+#define SRCINFO_DESCRIPTION 3
+#define SRCINFO_FLAGS 4
+#define SRCINFO_TAGFILE2 5
+
+#define SRC_FLAGS_CABFILE (0x0010)
+
+#define FILE_COMPRESSION_NONE 0
+#define FILE_COMPRESSION_WINLZA 1
+#define FILE_COMPRESSION_MSZIP 2
+#define FILE_COMPRESSION_NTCAB 3
+
+#define SPDSL_IGNORE_DISK 0x00000001
+#define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002
+
+/* SetupInitializeFileLog Flags values */
+#define SPFILELOG_SYSTEMLOG 0x00000001
+#define SPFILELOG_FORCENEW 0x00000002
+#define SPFILELOG_QUERYONLY 0x00000004
+
+/* SetupLogFile Flags values */
+#define SPFILELOG_OEMFILE 0x00000001
+
+/* SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and SetupDiDeleteDevRegKey
+ * KeyType values
+ */
+#define DIREG_DEV 0x00000001
+#define DIREG_DRV 0x00000002
+#define DIREG_BOTH 0x00000004
+
+/* SetupDiDrawMiniIcon Flags values */
+#define DMI_MASK 0x00000001
+#define DMI_BKCOLOR 0x00000002
+#define DMI_USERECT 0x00000004
+
+/* SetupDiGetClassDevPropertySheets PropertySheetType values */
+#define DIGCDP_FLAG_BASIC 0x00000001
+#define DIGCDP_FLAG_ADVANCED 0x00000002
+#define DIGCDP_FLAG_REMOTE_BASIC 0x00000003
+#define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004
+
+typedef enum {
+ SetupFileLogSourceFilename,
+ SetupFileLogChecksum,
+ SetupFileLogDiskTagfile,
+ SetupFileLogDiskDescription,
+ SetupFileLogOtherInfo,
+ SetupFileLogMax
+} SetupFileLogInfo;
+
+/* SetupDiGetWizardPage PageType values */
+#define SPWPT_SELECTDEVICE 0x00000001
+/* SetupDiGetWizardPage Flags values */
+#define SPWP_USE_DEVINFO_DATA 0x00000001
+
+/* SetupDiGetCustomDeviceProperty Flags values */
+#define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001
+
+/* SetupConfigureWmiFromInfSection Flags values */
+#define SCWMI_CLOBBER_SECURITY 0x00000001
+
+/* SetupUninstallOEMInf Flags values */
+#define SUOI_FORCEDELETE 0x00000001
+
+LONG WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3);
+DWORD WINAPI CaptureAndConvertAnsiArg(PCSTR lpSrc, PWSTR *lpDst);
+DWORD WINAPI CaptureStringArg(PCWSTR lpSrc, PWSTR *lpDst);
+BOOL WINAPI DelayedMove(PCWSTR lpExistingFileName, PCWSTR lpNewFileName);
+BOOL WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName);
+PWSTR WINAPI DuplicateString(PCWSTR lpSrc);
+BOOL WINAPI EnablePrivilege(PCWSTR lpPrivilegeName, BOOL bEnable);
+BOOL WINAPI FileExists(PCWSTR lpFileName, PWIN32_FIND_DATAW lpFileFindData);
+void WINAPI InstallHinfSectionA( HWND hwnd, HINSTANCE handle, PCSTR cmdline, INT show );
+void WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, PCWSTR cmdline, INT show );
+#define InstallHinfSection WINELIB_NAME_AW(InstallHinfSection)
+BOOL WINAPI IsUserAdmin(VOID);
+PWSTR WINAPI MultiByteToUnicode(PCSTR lpMultiByteStr, UINT uCodePage);
+VOID WINAPI MyFree(PVOID lpMem);
+PVOID WINAPI MyMalloc(DWORD dwSize);
+PVOID WINAPI MyRealloc(PVOID lpSrc, DWORD dwSize);
+DWORD WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID *);
+LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE *, PDWORD, PDWORD);
+/* RetreiveFileSecurity is not a typo, as per Microsoft's dlls */
+DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR *);
+BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);
+BOOL WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
+#define SetupAddSectionToDiskSpaceList WINELIB_NAME_AW(SetupAddSectionToDiskSpaceList)
+BOOL WINAPI SetupAddToDiskSpaceListA(HDSKSPC, PCSTR, LONGLONG, UINT, PVOID, UINT);
+BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC, PCWSTR, LONGLONG, UINT, PVOID, UINT);
+#define SetupAddToDiskSpaceList WINELIB_NAME_AW(SetupAddToDiskSpaceList)
+BOOL WINAPI SetupAddToSourceListA(DWORD, PCSTR);
+BOOL WINAPI SetupAddToSourceListW(DWORD, PCWSTR);
+#define SetupAddToSourceList WINELIB_NAME_AW(SetupAddToSourceList)
+BOOL WINAPI SetupAdjustDiskSpaceListA(HDSKSPC, LPCSTR, LONGLONG, PVOID, UINT);
+BOOL WINAPI SetupAdjustDiskSpaceListW(HDSKSPC, LPCWSTR, LONGLONG, PVOID, UINT);
+#define SetupAdjustDiskSpaceList WINELIB_NAME_AW(SetupAdjustDiskSpaceList)
+BOOL WINAPI SetupCancelTemporarySourceList(void);
+BOOL WINAPI SetupConfigureWmiFromInfSectionA(HINF, PCSTR, DWORD);
+BOOL WINAPI SetupConfigureWmiFromInfSectionW(HINF, PCWSTR, DWORD);
+#define SetupConfigureWmiFromInfSection WINELIB_NAME_AW(SetupConfigureWmiFromInfSection)
+UINT WINAPI SetupBackupErrorA(HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD);
+UINT WINAPI SetupBackupErrorW(HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD);
+#define SetupBackupError WINELIB_NAME_AW(SetupBackupError)
+BOOL WINAPI SetupCloseFileQueue( HSPFILEQ );
+void WINAPI SetupCloseInfFile( HINF hinf );
+void WINAPI SetupCloseLog(void);
+BOOL WINAPI SetupCommitFileQueueA( HWND, HSPFILEQ, PSP_FILE_CALLBACK_A, PVOID );
+BOOL WINAPI SetupCommitFileQueueW( HWND, HSPFILEQ, PSP_FILE_CALLBACK_W, PVOID );
+#define SetupCommitFileQueue WINELIB_NAME_AW(SetupCommitFileQueue)
+UINT WINAPI SetupCopyErrorA( HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, UINT, DWORD, PSTR, DWORD, PDWORD );
+UINT WINAPI SetupCopyErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD, PWSTR, DWORD, PDWORD );
+#define SetupCopyError WINELIB_NAME_AW(SetupCopyError)
+BOOL WINAPI SetupCopyOEMInfA( PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR * );
+BOOL WINAPI SetupCopyOEMInfW( PCWSTR, PCWSTR, DWORD, DWORD, PWSTR, DWORD, PDWORD, PWSTR * );
+#define SetupCopyOEMInf WINELIB_NAME_AW(SetupCopyOEMInf)
+HDSKSPC WINAPI SetupCreateDiskSpaceListA(PVOID, DWORD, UINT);
+HDSKSPC WINAPI SetupCreateDiskSpaceListW(PVOID, DWORD, UINT);
+#define SetupCreateDiskSpaceList WINELIB_NAME_AW(SetupCreateDiskSpaceList)
+DWORD WINAPI SetupDecompressOrCopyFileA( PCSTR, PCSTR, PUINT );
+DWORD WINAPI SetupDecompressOrCopyFileW( PCWSTR, PCWSTR, PUINT );
+#define SetupDecompressOrCopyFile WINELIB_NAME_AW(SetupDecompressOrCopyFile)
+UINT WINAPI SetupDefaultQueueCallbackA( PVOID, UINT, UINT_PTR, UINT_PTR );
+UINT WINAPI SetupDefaultQueueCallbackW( PVOID, UINT, UINT_PTR, UINT_PTR );
+#define SetupDefaultQueueCallback WINELIB_NAME_AW(SetupDefaultQueueCallback)
+UINT WINAPI SetupDeleteErrorA( HWND, PCSTR, PCSTR, UINT, DWORD );
+UINT WINAPI SetupDeleteErrorW( HWND, PCWSTR, PCWSTR, UINT, DWORD );
+#define SetupDeleteError WINELIB_NAME_AW(SetupDeleteError)
+BOOL WINAPI SetupDestroyDiskSpaceList(HDSKSPC);
+BOOL WINAPI SetupDiAskForOEMDisk(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiBuildClassInfoList(DWORD, LPGUID, DWORD, PDWORD);
+BOOL WINAPI SetupDiBuildClassInfoListExA(DWORD, LPGUID, DWORD, PDWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiBuildClassInfoListExW(DWORD, LPGUID, DWORD, PDWORD, PCWSTR, PVOID);
+#define SetupDiBuildClassInfoListEx WINELIB_NAME_AW(SetupDiBuildClassInfoListEx)
+BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);
+BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION, HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiCancelDriverInfoSearch(HDEVINFO);
+BOOL WINAPI SetupDiChangeState(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiClassGuidsFromNameA(LPCSTR, LPGUID, DWORD, PDWORD);
+BOOL WINAPI SetupDiClassGuidsFromNameW(LPCWSTR, LPGUID, DWORD, PDWORD);
+#define SetupDiClassGuidsFromName WINELIB_NAME_AW(SetupDiClassGuidsFromName)
+BOOL WINAPI SetupDiClassGuidsFromNameExA(LPCSTR, LPGUID, DWORD, PDWORD, LPCSTR, PVOID);
+BOOL WINAPI SetupDiClassGuidsFromNameExW(LPCWSTR, LPGUID, DWORD, PDWORD, LPCWSTR, PVOID);
+#define SetupDiClassGuidsFromNameEx WINELIB_NAME_AW(SetupDiClassGuidsFromNameEx)
+BOOL WINAPI SetupDiClassNameFromGuidA(const GUID*, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupDiClassNameFromGuidW(const GUID*, PWSTR, DWORD, PDWORD);
+#define SetupDiClassNameFromGuid WINELIB_NAME_AW(SetupDiClassNameFromGuid)
+BOOL WINAPI SetupDiClassNameFromGuidExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiClassNameFromGuidExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
+#define SetupDiClassNameFromGuidEx WINELIB_NAME_AW(SetupDiClassNameFromGuidEx)
+HDEVINFO WINAPI SetupDiCreateDeviceInfoList(const GUID *, HWND);
+HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(const GUID *, HWND, PCSTR, PVOID);
+HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *, HWND, PCWSTR, PVOID);
+#define SetupDiCreateDeviceInfoListEx WINELIB_NAME_AW(SetupDiCreateDeviceInfoListEx)
+BOOL WINAPI SetupDiCreateDeviceInfoA(HDEVINFO, PCSTR, const GUID*, PCSTR, HWND, DWORD,PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiCreateDeviceInfoW(HDEVINFO, PCWSTR, const GUID*, PCWSTR, HWND, DWORD,PSP_DEVINFO_DATA);
+#define SetupDiCreateDeviceInfo WINELIB_NAME_AW(SetupDiCreateDeviceInfo)
+BOOL WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+BOOL WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+#define SetupDiCreateDeviceInterface WINELIB_NAME_AW(SetupDiCreateDeviceInterface)
+HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCSTR);
+HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, REGSAM, HINF, PCWSTR);
+#define SetupDiCreateDeviceInterfaceRegKey WINELIB_NAME_AW(SetupDiCreateDeviceInterfaceRegKey)
+HKEY WINAPI SetupDiCreateDevRegKeyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCSTR);
+HKEY WINAPI SetupDiCreateDevRegKeyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, HINF, PCWSTR);
+#define SetupDiCreateDevRegKey WINELIB_NAME_AW(SetupDiCreateDevRegKey)
+BOOL WINAPI SetupDiDeleteDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiDeleteDeviceInterfaceData(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);
+BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD);
+BOOL WINAPI SetupDiDeleteDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD);
+BOOL WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA);
+BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO);
+BOOL WINAPI SetupDiDestroyDriverInfoList(HDEVINFO, PSP_DEVINFO_DATA, DWORD);
+INT WINAPI SetupDiDrawMiniIcon(HDC, RECT, INT, DWORD);
+BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO, DWORD, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA, const GUID *, DWORD, PSP_DEVICE_INTERFACE_DATA);
+BOOL WINAPI SetupDiEnumDriverInfoA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_A);
+BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, PSP_DRVINFO_DATA_W);
+#define SetupDiEnumDriverInfo WINELIB_NAME_AW(SetupDiEnumDriverInfo)
+BOOL WINAPI SetupDiGetActualModelsSectionA(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PSTR, DWORD, PDWORD, PVOID);
+BOOL WINAPI SetupDiGetActualModelsSectionW(PINFCONTEXT, PSP_ALTPLATFORM_INFO, PWSTR, DWORD, PDWORD, PVOID);
+#define SetupDiGetActualModelsSection WINELIB_NAME_AW(SetupDiGetActualModelsSection)
+BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *);
+BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *);
+#define SetupDiGetActualSectionToInstall WINELIB_NAME_AW(SetupDiGetActualSectionToInstall)
+BOOL WINAPI SetupDiGetActualSectionToInstallExA(HINF, PCSTR, PSTR, DWORD, PDWORD, PSTR *, PVOID);
+BOOL WINAPI SetupDiGetActualSectionToInstallExW(HINF, PCWSTR, PWSTR, DWORD, PDWORD, PWSTR *, PVOID);
+#define SetupDiGetActualSectionToInstallEx WINELIB_NAME_AW(SetupDiGetActualSectionToInstallEx)
+BOOL WINAPI SetupDiGetClassBitmapIndex(const GUID *, PINT);
+BOOL WINAPI SetupDiGetClassDescriptionA(const GUID*, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetClassDescriptionW(const GUID*, PWSTR, DWORD, PDWORD);
+#define SetupDiGetClassDescription WINELIB_NAME_AW(SetupDiGetClassDescription)
+BOOL WINAPI SetupDiGetClassDescriptionExA(const GUID*, PSTR, DWORD, PDWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiGetClassDescriptionExW(const GUID*, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
+#define SetupDiGetClassDescriptionEx WINELIB_NAME_AW(SetupDiGetClassDescriptionEx)
+BOOL WINAPI SetupDiGetClassDevPropertySheetsA(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERA, DWORD, PDWORD, DWORD);
+BOOL WINAPI SetupDiGetClassDevPropertySheetsW(HDEVINFO, PSP_DEVINFO_DATA, LPPROPSHEETHEADERW, DWORD, PDWORD, DWORD);
+#define SetupDiGetClassDevPropertySheets WINELIB_NAME_AW(SetupDiGetClassDevPropertySheets)
+HDEVINFO WINAPI SetupDiGetClassDevsA(const GUID *,LPCSTR,HWND,DWORD);
+HDEVINFO WINAPI SetupDiGetClassDevsW(const GUID *,LPCWSTR,HWND,DWORD);
+#define SetupDiGetClassDevs WINELIB_NAME_AW(SetupDiGetClassDevs)
+HDEVINFO WINAPI SetupDiGetClassDevsExA(const GUID *, PCSTR, HWND, DWORD, HDEVINFO, PCSTR, PVOID);
+HDEVINFO WINAPI SetupDiGetClassDevsExW(const GUID *, PCWSTR, HWND, DWORD, HDEVINFO, PCWSTR, PVOID);
+#define SetupDiGetClassDevsEx WINELIB_NAME_AW(SetupDiGetClassDevsEx)
+BOOL WINAPI SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA, const GUID *, PINT);
+BOOL WINAPI SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA);
+BOOL WINAPI SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA, PCSTR, PVOID);
+BOOL WINAPI SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA, PCWSTR, PVOID);
+#define SetupDiGetClassImageListEx WINELIB_NAME_AW(SetupDiGetClassImageListEx)
+BOOL WINAPI SetupDiGetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD, PDWORD);
+#define SetupDiGetClassInstallParams WINELIB_NAME_AW(SetupDiGetClassInstallParams)
+BOOL WINAPI SetupDiGetClassRegistryPropertyA(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiGetClassRegistryPropertyW(const GUID *, DWORD, PDWORD, PBYTE, DWORD, PDWORD, PCWSTR, PVOID);
+#define SetupDiGetClassRegistryProperty WINELIB_NAME_AW(SetupDiGetClassRegistryProperty)
+BOOL WINAPI SetupDiGetCustomDevicePropertyA(HDEVINFO, PSP_DEVINFO_DATA, PCSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetCustomDevicePropertyW(HDEVINFO, PSP_DEVINFO_DATA, PCWSTR, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+#define SetupDiGetCustomDeviceProperty WINELIB_NAME_AW(SetupDiGetCustomDeviceProperty)
+BOOL WINAPI SetupDiGetDeviceInfoListClass(HDEVINFO, LPGUID);
+BOOL WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_A);
+BOOL WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO, PSP_DEVINFO_LIST_DETAIL_DATA_W);
+#define SetupDiGetDeviceInfoListDetail WINELIB_NAME_AW(SetupDiGetDeviceInfoListDetail)
+BOOL WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);
+BOOL WINAPI SetupDiGetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);
+#define SetupDiGetDeviceInstallParams WINELIB_NAME_AW(SetupDiGetDeviceInstallParams)
+BOOL WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO, PSP_DEVINFO_DATA, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO, PSP_DEVINFO_DATA, PWSTR, DWORD, PDWORD);
+#define SetupDiGetDeviceInstanceId WINELIB_NAME_AW(SetupDiGetDeviceInstanceId)
+BOOL WINAPI SetupDiGetDeviceInterfaceAlias(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, const GUID *, PSP_DEVICE_INTERFACE_DATA);
+BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A,
+ DWORD, PDWORD, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_W,
+ DWORD, PDWORD, PSP_DEVINFO_DATA);
+#define SetupDiGetDeviceInterfaceDetail WINELIB_NAME_AW(SetupDiGetDeviceInterfaceDetail)
+BOOL WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetDriverInfoDetailA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINFO_DETAIL_DATA_A, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetDriverInfoDetailW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINFO_DETAIL_DATA_W, DWORD, PDWORD);
+#define SetupDiGetDriverInfoDetail WINELIB_NAME_AW(SetupDiGetDriverInfoDetail)
+BOOL WINAPI SetupDiGetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);
+BOOL WINAPI SetupDiGetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);
+#define SetupDiGetDriverInstallParams WINELIB_NAME_AW(SetupDiGetDriverInstallParams)
+BOOL WINAPI SetupDiGetHwProfileFriendlyNameA(DWORD, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD, PWSTR, DWORD, PDWORD);
+#define SetupDiGetHwProfileFriendlyName WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyName)
+BOOL WINAPI SetupDiGetHwProfileFriendlyNameExA(DWORD, PSTR, DWORD, PDWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiGetHwProfileFriendlyNameExW(DWORD, PWSTR, DWORD, PDWORD, PCWSTR, PVOID);
+#define SetupDiGetHwProfileFriendlyNameEx WINELIB_NAME_AW(SetupDiGetHwProfileFriendlyNameEx)
+BOOL WINAPI SetupDiGetHwProfileList(PDWORD, DWORD, PDWORD, PDWORD);
+BOOL WINAPI SetupDiGetHwProfileListExA(PDWORD, DWORD, PDWORD, PDWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiGetHwProfileListExW(PDWORD, DWORD, PDWORD, PDWORD, PCWSTR, PVOID);
+#define SetupDiGetHwProfileListEx WINELIB_NAME_AW(SetupDiGetHwProfileListEx)
+BOOL WINAPI SetupDiGetINFClassA(PCSTR, LPGUID, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupDiGetINFClassW(PCWSTR, LPGUID, PWSTR, DWORD, PDWORD);
+#define SetupDiGetINFClass WINELIB_NAME_AW(SetupDiGetINFClass)
+BOOL WINAPI SetupDiGetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiGetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);
+BOOL WINAPI SetupDiGetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);
+#define SetupDiGetSelectedDriver WINELIB_NAME_AW(SetupDiGetSelectedDriver)
+HPROPSHEETPAGE WINAPI SetupDiGetWizardPage(HDEVINFO, PSP_DEVINFO_DATA, PSP_INSTALLWIZARD_DATA, DWORD, DWORD);
+BOOL WINAPI SetupDiInstallClassA(HWND, PCSTR, DWORD, HSPFILEQ);
+BOOL WINAPI SetupDiInstallClassW(HWND, PCWSTR, DWORD, HSPFILEQ);
+#define SetupDiInstallClass WINELIB_NAME_AW(SetupDiInstallClass)
+BOOL WINAPI SetupDiInstallClassExA(HWND, PCSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID);
+BOOL WINAPI SetupDiInstallClassExW(HWND, PCWSTR, DWORD, HSPFILEQ, const GUID *, PVOID, PVOID);
+#define SetupDiInstallClassEx WINELIB_NAME_AW(SetupDiInstallClassEx)
+BOOL WINAPI SetupDiInstallDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiInstallDeviceInterfaces(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiInstallDriverFiles(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiLoadClassIcon(const GUID *, HICON *, PINT);
+HKEY WINAPI SetupDiOpenClassRegKey(const GUID*, REGSAM);
+HKEY WINAPI SetupDiOpenClassRegKeyExA(const GUID*, REGSAM, DWORD, PCSTR, PVOID);
+HKEY WINAPI SetupDiOpenClassRegKeyExW(const GUID*, REGSAM, DWORD, PCWSTR, PVOID);
+#define SetupDiOpenClassRegKeyEx WINELIB_NAME_AW(SetupDiOpenClassRegKeyEx)
+BOOL WINAPI SetupDiOpenDeviceInfoA(HDEVINFO, PCSTR, HWND, DWORD, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiOpenDeviceInfoW(HDEVINFO, PCWSTR, HWND, DWORD, PSP_DEVINFO_DATA);
+#define SetupDiOpenDeviceInfo WINELIB_NAME_AW(SetupDiOpenDeviceInfo)
+BOOL WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO, PCSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+BOOL WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO, PCWSTR, DWORD, PSP_DEVICE_INTERFACE_DATA);
+#define SetupDiOpenDeviceInterface WINELIB_NAME_AW(SetupDiOpenDeviceInterface)
+BOOL WINAPI SetupDiOpenDeviceInterfaceRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, REGSAM);
+HKEY WINAPI SetupDiOpenDevRegKey(HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM);
+BOOL WINAPI SetupDiRegisterCoDeviceInstallers(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiRegisterDeviceInfo(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PSP_DETSIG_CMPPROC, PVOID, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiRemoveDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiRemoveDeviceInterface(HDEVINFO, PSP_DEVICE_INTERFACE_DATA);
+BOOL WINAPI SetupDiRestartDevices(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiSelectBestCompatDrv(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiSelectDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiSelectOEMDrv(HWND, HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiSetClassInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);
+BOOL WINAPI SetupDiSetClassInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_CLASSINSTALL_HEADER, DWORD);
+#define SetupDiSetClassInstallParams WINELIB_NAME_AW(SetupDiSetClassInstallParams)
+BOOL WINAPI SetupDiSetClassRegistryPropertyA(const GUID *, DWORD, const BYTE *, DWORD, PCSTR, PVOID);
+BOOL WINAPI SetupDiSetClassRegistryPropertyW(const GUID *, DWORD, const BYTE *, DWORD, PCWSTR, PVOID);
+#define SetupDiSetClassRegistryProperty WINELIB_NAME_AW(SetupDiSetClassRegistryProperty)
+BOOL WINAPI SetupDiSetDeviceInterfaceDefault(HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, PVOID);
+BOOL WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_A);
+BOOL WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINSTALL_PARAMS_W);
+#define SetupDiSetDeviceInstallParams WINELIB_NAME_AW(SetupDiSetDeviceInstallParams)
+BOOL WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD);
+BOOL WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO, PSP_DEVINFO_DATA, DWORD, const BYTE *, DWORD);
+#define SetupDiSetDeviceRegistryProperty WINELIB_NAME_AW(SetupDiSetDeviceRegistryProperty)
+BOOL WINAPI SetupDiSetDriverInstallParamsA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A, PSP_DRVINSTALL_PARAMS);
+BOOL WINAPI SetupDiSetDriverInstallParamsW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W, PSP_DRVINSTALL_PARAMS);
+#define SetupDiSetDriverInstallParams WINELIB_NAME_AW(SetupDiSetDriverInstallParams)
+BOOL WINAPI SetupDiSetSelectedDevice(HDEVINFO, PSP_DEVINFO_DATA);
+BOOL WINAPI SetupDiSetSelectedDriverA(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_A);
+BOOL WINAPI SetupDiSetSelectedDriverW(HDEVINFO, PSP_DEVINFO_DATA, PSP_DRVINFO_DATA_W);
+#define SetupDiSetSelectedDriver WINELIB_NAME_AW(SetupDiSetSelectedDriver)
+BOOL WINAPI SetupDiUnremoveDevice(HDEVINFO, PSP_DEVINFO_DATA);
+HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC, PVOID, DWORD, UINT);
+HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC, PVOID, DWORD, UINT);
+#define SetupDuplicateDiskSpaceList WINELIB_NAME_AW(SetupDuplicateDiskSpaceList)
+BOOL WINAPI SetupEnumInfSectionsA(HINF, UINT, PSTR, DWORD, DWORD *);
+BOOL WINAPI SetupEnumInfSectionsW(HINF, UINT, PWSTR, DWORD, DWORD *);
+#define SetupEnumInfSections WINELIB_NAME_AW(SetupEnumInfSections)
+BOOL WINAPI SetupFindFirstLineA( HINF hinf, PCSTR section, PCSTR key, INFCONTEXT *context );
+BOOL WINAPI SetupFindFirstLineW( HINF hinf, PCWSTR section, PCWSTR key, INFCONTEXT *context );
+#define SetupFindFirstLine WINELIB_NAME_AW(SetupFindFirstLine)
+BOOL WINAPI SetupFindNextLine( PINFCONTEXT context_in, PINFCONTEXT context_out );
+BOOL WINAPI SetupFindNextMatchLineA( PINFCONTEXT context_in, PCSTR key, PINFCONTEXT context_out );
+BOOL WINAPI SetupFindNextMatchLineW( PINFCONTEXT context_in, PCWSTR key, PINFCONTEXT context_out );
+#define SetupFindNextMatchLine WINELIB_NAME_AW(SetupFindNextMatchLine)
+BOOL WINAPI SetupFreeSourceListA(PCSTR **, UINT);
+BOOL WINAPI SetupFreeSourceListW(PCWSTR **, UINT);
+#define SetupFreeSourceList WINELIB_NAME_AW(SetupFreeSourceList)
+BOOL WINAPI SetupGetBackupInformationA(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_A BackupParams);
+BOOL WINAPI SetupGetBackupInformationW(HSPFILEQ, PSP_BACKUP_QUEUE_PARAMS_W BackupParams);
+#define SetupGetBackupInformation WINELIB_NAME_AW(SetupGetBackupInformation)
+BOOL WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, DWORD size, LPDWORD required );
+DWORD WINAPI SetupGetFieldCount( PINFCONTEXT context );
+DWORD WINAPI SetupGetFileCompressionInfoA(PCSTR, PSTR *, PDWORD, PDWORD, PUINT);
+DWORD WINAPI SetupGetFileCompressionInfoW(PCWSTR, PWSTR *, PDWORD, PDWORD, PUINT);
+#define SetupGetFileCompressionInfo WINELIB_NAME_AW(SetupGetFileCompressionInfo)
+BOOL WINAPI SetupGetFileCompressionInfoExA(PCSTR, PSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT);
+BOOL WINAPI SetupGetFileCompressionInfoExW(PCWSTR, PWSTR, DWORD, PDWORD, PDWORD, PDWORD, PUINT);
+#define SetupGetFileCompressionInfoEx WINELIB_NAME_AW(SetupGetFileCompressionInfoEx)
+BOOL WINAPI SetupGetFileQueueCount( HSPFILEQ, UINT, PUINT );
+BOOL WINAPI SetupGetFileQueueFlags( HSPFILEQ, PDWORD );
+BOOL WINAPI SetupGetInfFileListA(PCSTR, DWORD, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupGetInfFileListW(PCWSTR, DWORD, PWSTR, DWORD, PDWORD);
+#define SetupGetInfFileList WINELIB_NAME_AW(SetupGetFileList)
+BOOL WINAPI SetupGetInfInformationA( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);
+BOOL WINAPI SetupGetInfInformationW( LPCVOID, DWORD, PSP_INF_INFORMATION, DWORD, PDWORD);
+#define SetupGetInfInformation WINELIB_NAME_AW(SetupGetInfInformation)
+BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result );
+BOOL WINAPI SetupGetLineByIndexA( HINF, PCSTR, DWORD, INFCONTEXT * );
+BOOL WINAPI SetupGetLineByIndexW( HINF, PCWSTR, DWORD, INFCONTEXT * );
+#define SetupGetLineByIndex WINELIB_NAME_AW(SetupGetLineByIndex)
+LONG WINAPI SetupGetLineCountA( HINF hinf, PCSTR section );
+LONG WINAPI SetupGetLineCountW( HINF hinf, PCWSTR section );
+#define SetupGetLineCount WINELIB_NAME_AW(SetupGetLineCount)
+BOOL WINAPI SetupGetLineTextA( PINFCONTEXT context, HINF hinf, PCSTR section_name,PCSTR key_name, PSTR buffer, DWORD size, PDWORD required );
+BOOL WINAPI SetupGetLineTextW( PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required );
+#define SetupGetLineText WINELIB_NAME_AW(SetupGetLineText)
+BOOL WINAPI SetupGetMultiSzFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, LPDWORD required );
+BOOL WINAPI SetupGetMultiSzFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, LPDWORD required );
+#define SetupGetMultiSzField WINELIB_NAME_AW(SetupGetMultiSzField)
+BOOL WINAPI SetupGetNonInteractiveMode(void);
+BOOL WINAPI SetupGetSourceFileLocationA( HINF hinf, PINFCONTEXT context, PCSTR filename, PUINT source_id, PSTR buffer, DWORD buffer_size, PDWORD required_size );
+BOOL WINAPI SetupGetSourceFileLocationW( HINF hinf, PINFCONTEXT context, PCWSTR filename, PUINT source_id, PWSTR buffer, DWORD buffer_size, PDWORD required_size );
+#define SetupGetSourceFileLocation WINELIB_NAME_AW(SetupGetSourceFileLocation)
+BOOL WINAPI SetupGetSourceFileSizeA(HINF, PINFCONTEXT, PCSTR, PCSTR, PDWORD, UINT);
+BOOL WINAPI SetupGetSourceFileSizeW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PDWORD, UINT);
+#define SetupGetSourceFileSize WINELIB_NAME_AW(SetupGetSourceFileSize)
+BOOL WINAPI SetupGetSourceInfoA( HINF hinf, UINT source_id, UINT info, PSTR buffer, DWORD buffer_size, LPDWORD required_size );
+BOOL WINAPI SetupGetSourceInfoW( HINF hinf, UINT source_id, UINT info, PWSTR buffer, DWORD buffer_size, LPDWORD required_size );
+#define SetupGetSourceInfo WINELIB_NAME_AW(SetupGetSourceInfo)
+BOOL WINAPI SetupGetStringFieldA( PINFCONTEXT context, DWORD index, PSTR buffer, DWORD size, PDWORD required );
+BOOL WINAPI SetupGetStringFieldW( PINFCONTEXT context, DWORD index, PWSTR buffer, DWORD size, PDWORD required );
+#define SetupGetStringField WINELIB_NAME_AW(SetupGetStringField)
+BOOL WINAPI SetupGetTargetPathA( HINF hinf, PINFCONTEXT context, PCSTR section, PSTR buffer, DWORD buffer_size, PDWORD required_size );
+BOOL WINAPI SetupGetTargetPathW( HINF hinf, PINFCONTEXT context, PCWSTR section, PWSTR buffer, DWORD buffer_size, PDWORD required_size );
+#define SetupGetTargetPath WINELIB_NAME_AW(SetupGetTargetPath)
+PVOID WINAPI SetupInitDefaultQueueCallback( HWND );
+PVOID WINAPI SetupInitDefaultQueueCallbackEx( HWND, HWND, UINT, DWORD, PVOID );
+HSPFILELOG WINAPI SetupInitializeFileLogA(PCSTR, DWORD);
+HSPFILELOG WINAPI SetupInitializeFileLogW(PCWSTR, DWORD);
+#define SetupInitializeFileLog WINELIB_NAME_AW(SetupInitializeFileLog)
+BOOL WINAPI SetupInstallFileA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);
+BOOL WINAPI SetupInstallFileW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);
+#define SetupInstallFile WINELIB_NAME_AW(SetupInstallFile)
+BOOL WINAPI SetupInstallFileExA(HINF, PINFCONTEXT, PCSTR, PCSTR, PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID, PBOOL);
+BOOL WINAPI SetupInstallFileExW(HINF, PINFCONTEXT, PCWSTR, PCWSTR, PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID, PBOOL);
+#define SetupInstallFileEx WINELIB_NAME_AW(SetupInstallFileEx)
+BOOL WINAPI SetupInstallFilesFromInfSectionA( HINF, HINF, HSPFILEQ, PCSTR, PCSTR, UINT );
+BOOL WINAPI SetupInstallFilesFromInfSectionW( HINF, HINF, HSPFILEQ, PCWSTR, PCWSTR, UINT );
+#define SetupInstallFilesFromInfSection WINELIB_NAME_AW(SetupInstallFilesFromInfSection)
+BOOL WINAPI SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT,
+ PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA);
+BOOL WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT,
+ PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA);
+#define SetupInstallFromInfSection WINELIB_NAME_AW(SetupInstallFromInfSection)
+BOOL WINAPI SetupInstallServicesFromInfSectionA(HINF, PCSTR, DWORD);
+BOOL WINAPI SetupInstallServicesFromInfSectionW(HINF, PCWSTR, DWORD);
+#define SetupInstallServicesFromInfSection WINELIB_NAME_AW(SetupInstallServicesFromInfSection)
+BOOL WINAPI SetupInstallServicesFromInfSectionExA(HINF, PCSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);
+BOOL WINAPI SetupInstallServicesFromInfSectionExW(HINF, PCWSTR, DWORD, HDEVINFO, PSP_DEVINFO_DATA, PVOID, PVOID);
+#define SetupInstallServicesFromInfSectionEx WINELIB_NAME_AW(SetupInstallServicesFromInfSectionEx)
+BOOL WINAPI SetupIterateCabinetA(PCSTR, DWORD, PSP_FILE_CALLBACK_A, PVOID);
+BOOL WINAPI SetupIterateCabinetW(PCWSTR, DWORD, PSP_FILE_CALLBACK_W, PVOID);
+#define SetupIterateCabinet WINELIB_NAME_AW(SetupIterateCabinet)
+BOOL WINAPI SetupLogErrorA(LPCSTR,LogSeverity);
+BOOL WINAPI SetupLogErrorW(LPCWSTR,LogSeverity);
+#define SetupLogError WINELIB_NAME_AW(SetupLogError)
+BOOL WINAPI SetupLogFileA(HSPFILELOG, PCSTR, PCSTR, PCSTR, DWORD, PCSTR, PCSTR, PCSTR, DWORD);
+BOOL WINAPI SetupLogFileW(HSPFILELOG, PCWSTR, PCWSTR, PCWSTR, DWORD, PCWSTR, PCWSTR, PCWSTR, DWORD);
+#define SetupLogFile WINELIB_NAME_AW(SetupLogFile)
+BOOL WINAPI SetupOpenAppendInfFileA( PCSTR, HINF, UINT * );
+BOOL WINAPI SetupOpenAppendInfFileW( PCWSTR, HINF, UINT * );
+#define SetupOpenAppendInfFile WINELIB_NAME_AW(SetupOpenAppendInfFile)
+HSPFILEQ WINAPI SetupOpenFileQueue(void);
+HINF WINAPI SetupOpenInfFileA( PCSTR name, PCSTR pszclass, DWORD style, UINT *error );
+HINF WINAPI SetupOpenInfFileW( PCWSTR name, PCWSTR pszclass, DWORD style, UINT *error );
+#define SetupOpenInfFile WINELIB_NAME_AW(SetupOpenInfFile)
+BOOL WINAPI SetupOpenLog(BOOL);
+HINF WINAPI SetupOpenMasterInf( VOID );
+BOOL WINAPI SetupPrepareQueueForRestoreA(HSPFILEQ, PCSTR, DWORD);
+BOOL WINAPI SetupPrepareQueueForRestoreW(HSPFILEQ, PCWSTR, DWORD);
+#define SetupPrepareQueueForRestore WINELIB_NAME_AW(SetupPrepareQueueForRestore)
+UINT WINAPI SetupPromptForDiskA(HWND, PCSTR, PCSTR, PCSTR, PCSTR, PCSTR, DWORD, PSTR, DWORD, PDWORD);
+UINT WINAPI SetupPromptForDiskW(HWND, PCWSTR, PCWSTR, PCWSTR, PCWSTR, PCWSTR, DWORD, PWSTR, DWORD, PDWORD);
+#define SetupPromptForDisk WINELIB_NAME_AW(SetupPromptForDisk)
+INT WINAPI SetupPromptReboot( HSPFILEQ, HWND, BOOL);
+BOOL WINAPI SetupQueryDrivesInDiskSpaceListA(HDSKSPC, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupQueryDrivesInDiskSpaceListW(HDSKSPC, PWSTR, DWORD, PDWORD);
+#define SetupQueryDrivesInDiskSpaceList WINELIB_NAME_AW(SetupQueryDrivesInDiskSpaceList)
+BOOL WINAPI SetupQueryFileLogA(HSPFILELOG, PCSTR, PCSTR, SetupFileLogInfo, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupQueryFileLogW(HSPFILELOG, PCWSTR, PCWSTR, SetupFileLogInfo, PWSTR, DWORD, PDWORD);
+#define SetupQueryFileLog WINELIB_NAME_AW(SetupQueryFileLog)
+BOOL WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION, UINT, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION, UINT, PWSTR, DWORD, PDWORD);
+#define SetupQueryInfFileInformation WINELIB_NAME_AW(SetupQueryInFileInformation)
+BOOL WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A);
+BOOL WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_W);
+#define SetupQueryInfOriginalFileInformation WINELIB_NAME_AW(SetupQueryInfOriginalFileInformation)
+BOOL WINAPI SetupQueryInfVersionInformationA(PSP_INF_INFORMATION, UINT, PCSTR, PSTR, DWORD, PDWORD);
+BOOL WINAPI SetupQueryInfVersionInformationW(PSP_INF_INFORMATION, UINT, PCWSTR, PWSTR, DWORD, PDWORD);
+#define SetupQueryInfVersionInformation WINELIB_NAME_AW(SetupQueryInfVersionInformation)
+BOOL WINAPI SetupQuerySourceListA(DWORD, PCSTR **, PUINT);
+BOOL WINAPI SetupQuerySourceListW(DWORD, PCWSTR **, PUINT);
+#define SetupQuerySourceList WINELIB_NAME_AW(SetupQuerySourceList)
+BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC, PCSTR, LONGLONG *, PVOID, UINT);
+BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC, PCWSTR, LONGLONG *, PVOID, UINT);
+#define SetupQuerySpaceRequiredOnDrive WINELIB_NAME_AW(SetupQuerySpaceRequiredOnDrive)
+BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD);
+BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD);
+#define SetupQueueCopy WINELIB_NAME_AW(SetupQueueCopy)
+BOOL WINAPI SetupQueueCopyIndirectA( PSP_FILE_COPY_PARAMS_A );
+BOOL WINAPI SetupQueueCopyIndirectW( PSP_FILE_COPY_PARAMS_W );
+#define SetupQueueCopyIndirect WINELIB_NAME_AW(SetupQueueCopyIndirect)
+BOOL WINAPI SetupQueueCopySectionA( HSPFILEQ, PCSTR, HINF, HINF, PCSTR, DWORD );
+BOOL WINAPI SetupQueueCopySectionW( HSPFILEQ, PCWSTR, HINF, HINF, PCWSTR, DWORD );
+#define SetupQueueCopySection WINELIB_NAME_AW(SetupQueueCopySection)
+BOOL WINAPI SetupQueueDefaultCopyA( HSPFILEQ, HINF, PCSTR, PCSTR, PCSTR, DWORD );
+BOOL WINAPI SetupQueueDefaultCopyW( HSPFILEQ, HINF, PCWSTR, PCWSTR, PCWSTR, DWORD );
+#define SetupQueueDefaultCopy WINELIB_NAME_AW(SetupQueueDefaultCopy)
+BOOL WINAPI SetupQueueDeleteA( HSPFILEQ, PCSTR, PCSTR );
+BOOL WINAPI SetupQueueDeleteW( HSPFILEQ, PCWSTR, PCWSTR );
+#define SetupQueueDelete WINELIB_NAME_AW(SetupQueueDelete)
+BOOL WINAPI SetupQueueDeleteSectionA( HSPFILEQ, HINF, HINF, PCSTR );
+BOOL WINAPI SetupQueueDeleteSectionW( HSPFILEQ, HINF, HINF, PCWSTR );
+#define SetupQueueDeleteSection WINELIB_NAME_AW(SetupQueueDeleteSection)
+BOOL WINAPI SetupQueueRenameA( HSPFILEQ, PCSTR, PCSTR, PCSTR, PCSTR );
+BOOL WINAPI SetupQueueRenameW( HSPFILEQ, PCWSTR, PCWSTR, PCWSTR, PCWSTR );
+#define SetupQueueRename WINELIB_NAME_AW(SetupQueueRename)
+BOOL WINAPI SetupQueueRenameSectionA( HSPFILEQ, HINF, HINF, PCSTR );
+BOOL WINAPI SetupQueueRenameSectionW( HSPFILEQ, HINF, HINF, PCWSTR );
+#define SetupQueueRenameSection WINELIB_NAME_AW(SetupQueueRenameSection)
+BOOL WINAPI SetupRemoveFileLogEntryA(HSPFILELOG, PCSTR, PCSTR);
+BOOL WINAPI SetupRemoveFileLogEntryW(HSPFILELOG, PCWSTR, PCWSTR);
+#define SetupRemoveFileLogEntry WINELIB_NAME_AW(SetupRemoveFileLogEntry)
+BOOL WINAPI SetupRemoveFromDiskSpaceListA(HDSKSPC, PCSTR, UINT, PVOID, UINT);
+BOOL WINAPI SetupRemoveFromDiskSpaceListW(HDSKSPC, PCWSTR, UINT, PVOID, UINT);
+#define SetupRemoveFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveFromDiskSpaceList)
+BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, PVOID, UINT);
+BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, PVOID, UINT);
+#define SetupRemoveInstallSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveInstallSectionFromDiskSpaceList)
+BOOL WINAPI SetupRemoveSectionFromDiskSpaceListA(HDSKSPC, HINF, HINF, PCSTR, UINT, PVOID, UINT);
+BOOL WINAPI SetupRemoveSectionFromDiskSpaceListW(HDSKSPC, HINF, HINF, PCWSTR, UINT, PVOID, UINT);
+#define SetupRemoveSectionFromDiskSpaceList WINELIB_NAME_AW(SetupRemoveSectionFromDiskSpaceList)
+BOOL WINAPI SetupRemoveFromSourceListA(DWORD, PCSTR);
+BOOL WINAPI SetupRemoveFromSourceListW(DWORD, PCWSTR);
+#define SetupRemoveFromSourceList WINELIB_NAME_AW(SetupRemoveFromSourceList)
+UINT WINAPI SetupRenameErrorA( HWND, PCSTR, PCSTR, PCSTR, UINT, DWORD );
+UINT WINAPI SetupRenameErrorW( HWND, PCWSTR, PCWSTR, PCWSTR, UINT, DWORD );
+#define SetupRenameError WINELIB_NAME_AW(SetupRenameError)
+BOOL WINAPI SetupScanFileQueueA( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_A, PVOID, PDWORD );
+BOOL WINAPI SetupScanFileQueueW( HSPFILEQ, DWORD, HWND, PSP_FILE_CALLBACK_W, PVOID, PDWORD );
+#define SetupScanFileQueue WINELIB_NAME_AW(SetupScanFileQueue)
+BOOL WINAPI SetupSetDirectoryIdA( HINF, DWORD, PCSTR );
+BOOL WINAPI SetupSetDirectoryIdW( HINF, DWORD, PCWSTR );
+#define SetupSetDirectoryId WINELIB_NAME_AW(SetupSetDirectoryId)
+BOOL WINAPI SetupSetDirectoryIdExA( HINF, DWORD, PCSTR, DWORD, DWORD, PVOID );
+BOOL WINAPI SetupSetDirectoryIdExW( HINF, DWORD, PCWSTR, DWORD, DWORD, PVOID );
+#define SetupSetDirectoryIdEx WINELIB_NAME_AW(SetupSetDirectoryIdEx)
+BOOL WINAPI SetupSetFileQueueAlternatePlatformA( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCSTR );
+BOOL WINAPI SetupSetFileQueueAlternatePlatformW( HSPFILEQ, PSP_ALTPLATFORM_INFO, PCWSTR );
+#define SetupSetFileQueueAlternatePlatform WINELIB_NAME_AW(SetupSetFileQueueAlternatePlatform)
+BOOL WINAPI SetupSetFileQueueFlags( HSPFILEQ, DWORD, DWORD );
+BOOL WINAPI SetupSetNonInteractiveMode(BOOL);
+BOOL WINAPI SetupSetPlatformPathOverrideA(PCSTR);
+BOOL WINAPI SetupSetPlatformPathOverrideW(PCWSTR);
+#define SetupSetPlatformPathOverride WINELIB_NAME_AW(SetupSetPlatformPathOverride)
+BOOL WINAPI SetupSetSourceListA(DWORD, PCSTR *, UINT);
+BOOL WINAPI SetupSetSourceListW(DWORD, PCWSTR *, UINT);
+#define SetupSetSourceList WINELIB_NAME_AW(SetupSetSourceList)
+void WINAPI SetupTermDefaultQueueCallback( PVOID );
+BOOL WINAPI SetupTerminateFileLog(HSPFILELOG);
+BOOL WINAPI SetupUninstallOEMInfA(PCSTR, DWORD, PVOID);
+BOOL WINAPI SetupUninstallOEMInfW(PCWSTR, DWORD, PVOID);
+#define SetupUninstallOEMInf WINELIB_NAME_AW(SetupUninstallOEMInf)
+BOOL WINAPI SetupUninstallNewlyCopiedInfs(HSPFILEQ, DWORD, PVOID);
+BOOL WINAPI SetupVerifyInfFileA(PCSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_A);
+BOOL WINAPI SetupVerifyInfFileW(PCWSTR, PSP_ALTPLATFORM_INFO, PSP_INF_SIGNER_INFO_W);
+#define SetupVerifyInfFile WINELIB_NAME_AW(SetupVerifyInfFile)
+DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR);
+DWORD WINAPI TakeOwnershipOfFile(PCWSTR);
+PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);
+BOOL WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef DECL_WINELIB_SETUPAPI_TYPE_AW
+
+#include <poppack.h>
+
+#endif /* _INC_SETUPAPI */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h
new file mode 100644
index 00000000..acb5fa45
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sfc.h
@@ -0,0 +1,55 @@
+/*
+ * Definitions for the System File Checker (Windows File Protection)
+ *
+ * Copyright 2006 Detlef Riekenberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SFC_H
+#define __WINE_SFC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Types */
+
+typedef struct _PROTECTED_FILE_DATA {
+ WCHAR FileName[MAX_PATH];
+ DWORD FileNumber;
+} PROTECTED_FILE_DATA, *PPROTECTED_FILE_DATA;
+
+/* Functions */
+
+BOOL WINAPI SfcGetNextProtectedFile(HANDLE, PPROTECTED_FILE_DATA);
+BOOL WINAPI SfcIsFileProtected(HANDLE, LPCWSTR);
+BOOL WINAPI SfcIsKeyProtected(HKEY, LPCWSTR, REGSAM);
+BOOL WINAPI SfpVerifyFile(LPCSTR, LPSTR, DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl
new file mode 100644
index 00000000..033cd09d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdeprecated.idl
@@ -0,0 +1,613 @@
+/*
+ * Deprecated shell interfaces
+ *
+ * Copyright (C) 2010 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "ocidl.idl";
+import "shtypes.idl";
+import "shobjidl.idl";
+import "hlink.idl";
+import "exdisp.idl";
+
+cpp_quote("#define TLOG_BACK -1")
+cpp_quote("#define TLOG_FORE 1")
+
+cpp_quote("#define TLMENUF_INCLUDECURRENT 0x00000001")
+cpp_quote("#define TLMENUF_CHECKCURRENT (TLMENUF_INCLUDECURRENT | 0x00000002)")
+cpp_quote("#define TLMENUF_BACK 0x00000010")
+cpp_quote("#define TLMENUF_FORE 0x00000020")
+cpp_quote("#define TLMENUF_BACKANDFORTH (TLMENUF_BACK | TLMENUF_FORE | TLMENUF_INCLUDECURRENT)")
+
+[
+ hidden,
+ local,
+ object,
+ uuid(F46EDB3B-BC2F-11d0-9412-00AA00A3EBD3)
+]
+interface ITravelEntry : IUnknown
+{
+ HRESULT Invoke(
+ [in] IUnknown *punk);
+
+ HRESULT Update(
+ [in] IUnknown *punk,
+ [in] BOOL fIsLocalAnchor);
+
+ HRESULT GetPidl(
+ [out] LPITEMIDLIST *ppidl);
+};
+
+[
+ hidden,
+ local,
+ object,
+ uuid(66A9CB08-4802-11d2-A561-00A0C92DBFE8)
+]
+interface ITravelLog : IUnknown
+{
+ HRESULT AddEntry(
+ [in] IUnknown *punk,
+ [in] BOOL fIsLocalAnchor);
+
+ HRESULT UpdateEntry(
+ [in] IUnknown *punk,
+ [in] BOOL fIsLocalAnchor);
+
+ HRESULT UpdateExternal(
+ [in] IUnknown *punk,
+ [in] IUnknown *punkHLBrowseContext);
+
+ HRESULT Travel(
+ [in] IUnknown *punk,
+ [in] int iOffset);
+
+ HRESULT GetTravelEntry(
+ [in] IUnknown *punk,
+ [in] int iOffset,
+ [optional, out] ITravelEntry **ppte);
+
+ HRESULT FindTravelEntry(
+ [in] IUnknown *punk,
+ [in] LPCITEMIDLIST pidl,
+ [out] ITravelEntry **ppte);
+
+ HRESULT GetToolTipText(
+ [in] IUnknown *punk,
+ [in] int iOffset,
+ [in] int idsTemplate,
+ [out, size_is(cchText)] LPWSTR pwzText,
+ [in] DWORD cchText);
+
+ HRESULT InsertMenuEntries(
+ [in] IUnknown *punk,
+ [in] HMENU hmenu,
+ [in] int nPos,
+ [in] int idFirst,
+ [in] int idLast,
+ [in] DWORD dwFlags);
+
+ HRESULT Clone(
+ [out] ITravelLog **pptl);
+
+ DWORD CountEntries(
+ [in] IUnknown *punk);
+
+ HRESULT Revert();
+};
+
+typedef void *CIE4ConnectionPoint;
+
+[
+ local,
+ object,
+ uuid(0D7D1D00-6FC0-11D0-A974-00C04FD705A2)
+]
+interface IExpDispSupport : IUnknown
+{
+ HRESULT FindCIE4ConnectionPoint(
+ REFIID riid,
+ CIE4ConnectionPoint **ppccp);
+
+ HRESULT OnTranslateAccelerator(
+ MSG *pMsg,
+ DWORD grfModifiers);
+
+ HRESULT OnInvoke(
+ DISPID dispidMember,
+ REFIID iid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pdispparams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pexcepinfo,
+ UINT *puArgErr);
+};
+
+typedef enum tagBNSTATE
+{
+ BNS_NORMAL = 0,
+ BNS_BEGIN_NAVIGATE = 1,
+ BNS_NAVIGATE = 2
+
+} BNSTATE;
+
+enum {
+ SBSC_HIDE = 0,
+ SBSC_SHOW = 1,
+ SBSC_TOGGLE = 2,
+ SBSC_QUERY = 3
+};
+
+cpp_quote("#define BSF_REGISTERASDROPTARGET 0x00000001")
+cpp_quote("#define BSF_THEATERMODE 0x00000002")
+cpp_quote("#define BSF_NOLOCALFILEWARNING 0x00000010")
+cpp_quote("#define BSF_UISETBYAUTOMATION 0x00000100")
+cpp_quote("#define BSF_RESIZABLE 0x00000200")
+cpp_quote("#define BSF_CANMAXIMIZE 0x00000400")
+cpp_quote("#define BSF_TOPBROWSER 0x00000800")
+cpp_quote("#define BSF_NAVNOHISTORY 0x00001000")
+cpp_quote("#define BSF_HTMLNAVCANCELED 0x00002000")
+cpp_quote("#define BSF_DONTSHOWNAVCANCELPAGE 0x00004000")
+cpp_quote("#define BSF_SETNAVIGATABLECODEPAGE 0x00008000")
+cpp_quote("#define BSF_DELEGATEDNAVIGATION 0x00010000")
+cpp_quote("#define BSF_TRUSTEDFORACTIVEX 0x00020000")
+
+cpp_quote("#define HLNF_CALLERUNTRUSTED 0x00200000")
+cpp_quote("#define HLNF_TRUSTEDFORACTIVEX 0x00400000")
+cpp_quote("#define HLNF_DISABLEWINDOWRESTRICTIONS 0x00800000")
+cpp_quote("#define HLNF_TRUSTFIRSTDOWNLOAD 0x01000000")
+cpp_quote("#define HLNF_UNTRUSTEDFORDOWNLOAD 0x02000000")
+cpp_quote("#define SHHLNF_NOAUTOSELECT 0x04000000")
+cpp_quote("#define SHHLNF_WRITENOHISTORY 0x08000000")
+cpp_quote("#define HLNF_EXTERNALNAVIGATE 0x10000000")
+cpp_quote("#define HLNF_ALLOW_AUTONAVIGATE 0x20000000")
+cpp_quote("#define HLNF_NEWWINDOWSMANAGED 0x80000000")
+
+[
+ local,
+ object,
+ uuid(02ba3b52-0547-11d1-b833-00c04fc9b31f)
+]
+interface IBrowserService : IUnknown
+{
+ HRESULT GetParentSite(
+ [out] IOleInPlaceSite **ppipsite);
+
+ HRESULT SetTitle(
+ [in] IShellView *psv,
+ [in] LPCWSTR pszName);
+
+ HRESULT GetTitle(
+ [in] IShellView *psv,
+ [out, size_is(cchName)] LPWSTR pszName,
+ [in] DWORD cchName);
+
+ HRESULT GetOleObject(
+ [out] IOleObject **ppobjv);
+
+ HRESULT GetTravelLog(
+ [out, optional] ITravelLog **pptl);
+
+ HRESULT ShowControlWindow(
+ [in] UINT id,
+ [in] BOOL fShow);
+
+ HRESULT IsControlWindowShown(
+ [in] UINT id,
+ [out] BOOL *pfShown);
+
+ HRESULT IEGetDisplayName(
+ [in] PCIDLIST_ABSOLUTE pidl,
+ [out] LPWSTR pwszName,
+ [in] UINT uFlags);
+
+ HRESULT IEParseDisplayName(
+ [in] UINT uiCP,
+ [in] LPCWSTR pwszPath,
+ [out] PIDLIST_ABSOLUTE *ppidlOut);
+
+ HRESULT DisplayParseError(
+ [in] HRESULT hres,
+ [in] LPCWSTR pwszPath);
+
+ HRESULT NavigateToPidl(
+ [in] PCIDLIST_ABSOLUTE pidl,
+ [in] DWORD grfHLNF);
+
+ HRESULT SetNavigateState(
+ [in] BNSTATE bnstate);
+
+ HRESULT GetNavigateState(
+ [out] BNSTATE *pbnstate);
+
+ HRESULT NotifyRedirect(
+ [in] IShellView *psv,
+ [in] PCIDLIST_ABSOLUTE pidl,
+ [out] BOOL *pfDidBrowse);
+
+ HRESULT UpdateWindowList();
+
+ HRESULT UpdateBackForwardState();
+
+ HRESULT SetFlags(
+ [in] DWORD dwFlags,
+ [in] DWORD dwFlagMask);
+
+ HRESULT GetFlags(
+ [out] DWORD *pdwFlags);
+
+ HRESULT CanNavigateNow();
+
+ HRESULT GetPidl(
+ [out] PIDLIST_ABSOLUTE *ppidl);
+
+ HRESULT SetReferrer(
+ [in] PCIDLIST_ABSOLUTE pidl);
+
+ DWORD GetBrowserIndex();
+
+ HRESULT GetBrowserByIndex(
+ [in] DWORD dwID,
+ [out] IUnknown **ppunk);
+
+ HRESULT GetHistoryObject(
+ [out] IOleObject **ppole,
+ [out] IStream **pstm,
+ [out] IBindCtx **ppbc);
+
+ HRESULT SetHistoryObject(
+ [in] IOleObject *pole,
+ [in] BOOL fIsLocalAnchor);
+
+ HRESULT CacheOLEServer(
+ [in] IOleObject *pole);
+
+ HRESULT GetSetCodePage(
+ [in] VARIANT *pvarIn,
+ [out] VARIANT *pvarOut);
+
+ HRESULT OnHttpEquiv(
+ [in] IShellView *psv,
+ [in] BOOL fDone,
+ [in] VARIANT *pvarargIn,
+ [out] VARIANT *pvarargOut);
+
+ HRESULT GetPalette(
+ [out] HPALETTE *hpal);
+
+ HRESULT RegisterWindow(
+ [in] BOOL fForceRegister,
+ [in] int swc);
+}
+
+[
+ object,
+ local,
+ uuid(5836fb00-8187-11cf-a12b-00aa004ae837)
+]
+interface IShellService : IUnknown
+{
+ HRESULT SetOwner( [in] IUnknown *pUnk );
+}
+
+cpp_quote("#if 0")
+typedef HANDLE HMONITOR;
+cpp_quote("#endif")
+
+enum {
+ SECURELOCK_NOCHANGE = -1,
+ SECURELOCK_SET_UNSECURE = 0,
+ SECURELOCK_SET_MIXED = 1,
+ SECURELOCK_SET_SECUREUNKNOWNBIT = 2,
+ SECURELOCK_SET_SECURE40BIT = 3,
+ SECURELOCK_SET_SECURE56BIT = 4,
+ SECURELOCK_SET_FORTEZZA = 5,
+ SECURELOCK_SET_SECURE128BIT = 6,
+ SECURELOCK_FIRSTSUGGEST = 7,
+ SECURELOCK_SUGGEST_UNSECURE = SECURELOCK_FIRSTSUGGEST,
+ SECURELOCK_SUGGEST_MIXED = 8,
+ SECURELOCK_SUGGEST_SECUREUNKNOWNBIT = 9,
+ SECURELOCK_SUGGEST_SECURE40BIT = 10,
+ SECURELOCK_SUGGEST_SECURE56BIT = 11,
+ SECURELOCK_SUGGEST_FORTEZZA = 12,
+ SECURELOCK_SUGGEST_SECURE128BIT = 13,
+};
+
+
+typedef struct {
+ HWND _hwnd;
+ ITravelLog *_ptl;
+ IHlinkFrame *_phlf;
+ IWebBrowser2 *_pautoWB2;
+ IExpDispSupport *_pautoEDS;
+ IShellService *_pautoSS;
+ int _eSecureLockIcon;
+ DWORD _fCreatingViewWindow;
+ UINT _uActivateState;
+
+ LPCITEMIDLIST _pidlNewShellView;
+
+ IOleCommandTarget *_pctView;
+
+ LPITEMIDLIST _pidlCur;
+ IShellView *_psv;
+ IShellFolder *_psf;
+ HWND _hwndView;
+ LPWSTR _pszTitleCur;
+
+ LPITEMIDLIST _pidlPending;
+ IShellView *_psvPending;
+ IShellFolder *_psfPending;
+ HWND _hwndViewPending;
+ LPWSTR _pszTitlePending;
+
+ BOOL _fIsViewMSHTML;
+ BOOL _fPrivacyImpacted;
+
+} BASEBROWSERDATA, *LPBASEBROWSERDATA;
+typedef const BASEBROWSERDATA *LPCBASEBROWSERDATA;
+
+cpp_quote("#define VIEW_PRIORITY_RESTRICTED 0x00000070")
+cpp_quote("#define VIEW_PRIORITY_CACHEHIT 0x00000050")
+cpp_quote("#define VIEW_PRIORITY_STALECACHEHIT 0x00000045")
+cpp_quote("#define VIEW_PRIORITY_USEASDEFAULT 0x00000043")
+cpp_quote("#define VIEW_PRIORITY_SHELLEXT 0x00000040")
+cpp_quote("#define VIEW_PRIORITY_CACHEMISS 0x00000030")
+cpp_quote("#define VIEW_PRIORITY_INHERIT 0x00000020")
+cpp_quote("#define VIEW_PRIORITY_SHELLEXT_ASBACKUP 0x0015")
+cpp_quote("#define VIEW_PRIORITY_DESPERATE 0x00000010")
+cpp_quote("#define VIEW_PRIORITY_NONE 0x00000000")
+
+typedef struct tagFolderSetData {
+ FOLDERSETTINGS _fs;
+ SHELLVIEWID _vidRestore;
+ DWORD _dwViewPriority;
+} FOLDERSETDATA, *LPFOLDERSETDATA;
+
+typedef struct SToolbarItem {
+ IDockingWindow *ptbar;
+ BORDERWIDTHS rcBorderTool;
+ LPWSTR pwszItem;
+ BOOL fShow;
+ HMONITOR hMon;
+} TOOLBARITEM, *LPTOOLBARITEM;
+
+cpp_quote("#define ITB_VIEW ((UINT)-1)")
+
+[
+ local,
+ object,
+ uuid(68BD21CC-438B-11d2-A560-00A0C92DBFE8)
+]
+interface IBrowserService2 : IBrowserService
+{
+ LRESULT WndProcBS(
+ [in] HWND hwnd,
+ [in] UINT uMsg,
+ [in, out] WPARAM wParam,
+ [in, out] LPARAM lParam);
+
+ HRESULT SetAsDefFolderSettings();
+
+ HRESULT GetViewRect(
+ [in, out] RECT *prc);
+
+ HRESULT OnSize(
+ [in] WPARAM wParam);
+
+ HRESULT OnCreate(
+ [in] struct tagCREATESTRUCTW *pcs);
+
+ LRESULT OnCommand(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT OnDestroy();
+
+ LRESULT OnNotify(
+ [in, out] struct tagNMHDR *pnm);
+
+ HRESULT OnSetFocus();
+
+ HRESULT OnFrameWindowActivateBS(
+ [in] BOOL fActive);
+
+ HRESULT ReleaseShellView();
+
+ HRESULT ActivatePendingView();
+
+ HRESULT CreateViewWindow(
+ [in] IShellView *psvNew,
+ [in] IShellView *psvOld,
+ [out] LPRECT prcView,
+ [out] HWND *phwnd);
+
+ HRESULT CreateBrowserPropSheetExt(
+ [in] REFIID riid,
+ [out] void **ppv);
+
+ HRESULT GetViewWindow(
+ [out] HWND *phwndView);
+
+ HRESULT GetBaseBrowserData(
+ [in, out] LPCBASEBROWSERDATA *pbbd);
+
+ LPBASEBROWSERDATA PutBaseBrowserData();
+
+ HRESULT InitializeTravelLog(
+ [in] ITravelLog *ptl,
+ [in] DWORD dw);
+
+ HRESULT SetTopBrowser();
+
+ HRESULT Offline(
+ [in] int iCmd);
+
+ HRESULT AllowViewResize(
+ [in] BOOL f);
+
+ HRESULT SetActivateState(
+ [in] UINT u);
+
+ HRESULT UpdateSecureLockIcon(
+ [in] int eSecureLock);
+
+ HRESULT InitializeDownloadManager();
+
+ HRESULT InitializeTransitionSite();
+
+ HRESULT _Initialize(
+ [in] HWND hwnd,
+ [in] IUnknown *pauto);
+
+ HRESULT _CancelPendingNavigationAsync();
+
+ HRESULT _CancelPendingView();
+
+ HRESULT _MaySaveChanges();
+
+ HRESULT _PauseOrResumeView(
+ [in] BOOL fPaused);
+
+ HRESULT _DisableModeless();
+
+ HRESULT _NavigateToPidl(
+ [in] LPCITEMIDLIST pidl,
+ [in] DWORD grfHLNF,
+ [in] DWORD dwFlags);
+
+ HRESULT _TryShell2Rename(
+ [in] IShellView *psv,
+ [in] LPCITEMIDLIST pidlNew);
+
+ HRESULT _SwitchActivationNow();
+
+ HRESULT _ExecChildren(
+ [in] IUnknown *punkBar,
+ [in] BOOL fBroadcast,
+ [in] const GUID *pguidCmdGroup,
+ [in] DWORD nCmdID,
+ [in] DWORD nCmdexecopt,
+ [in] VARIANTARG *pvarargIn,
+ [in, out] VARIANTARG *pvarargOut);
+
+ HRESULT _SendChildren(
+ [in] HWND hwndBar,
+ [in] BOOL fBroadcast,
+ [in] UINT uMsg,
+ [in, out] WPARAM wParam,
+ [in, out] LPARAM lParam);
+
+ HRESULT GetFolderSetData(
+ [in, out] struct tagFolderSetData *pfsd);
+
+ HRESULT _OnFocusChange(
+ [in] UINT itb);
+
+ HRESULT v_ShowHideChildWindows(
+ [in] BOOL fChildOnly);
+
+ UINT _get_itbLastFocus();
+
+ HRESULT _put_itbLastFocus(
+ [in] UINT itbLastFocus);
+
+ HRESULT _UIActivateView(
+ [in] UINT uState);
+
+ HRESULT _GetViewBorderRect(
+ [in, out] RECT* prc);
+
+ HRESULT _UpdateViewRectSize();
+
+ HRESULT _ResizeNextBorder(
+ [in] UINT itb);
+
+ HRESULT _ResizeView();
+
+ HRESULT _GetEffectiveClientArea(
+ [in, out] LPRECT lprectBorder,
+ [in] HMONITOR hmon);
+
+ IStream* v_GetViewStream(
+ [in] LPCITEMIDLIST pidl,
+ [in] DWORD grfMode,
+ [in] LPCWSTR pwszName);
+
+ LRESULT ForwardViewMsg(
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT SetAcceleratorMenu(
+ [in] HACCEL hacc);
+
+ int _GetToolbarCount();
+
+ LPTOOLBARITEM _GetToolbarItem(
+ [in] int itb);
+
+ HRESULT _SaveToolbars(
+ [in] IStream *pstm);
+
+ HRESULT _LoadToolbars(
+ [in] IStream *pstm);
+
+ HRESULT _CloseAndReleaseToolbars(
+ [in] BOOL fClose);
+
+ HRESULT v_MayGetNextToolbarFocus(
+ [in] LPMSG lpMsg,
+ [in] UINT itbNext,
+ [in] int citb,
+ [out] LPTOOLBARITEM *pptbi,
+ [out] HWND *phwnd);
+
+ HRESULT _ResizeNextBorderHelper(
+ [in] UINT itb,
+ [in] BOOL bUseHmonitor);
+
+ UINT _FindTBar(
+ [in] IUnknown *punkSrc);
+
+ HRESULT _SetFocus(
+ [in] LPTOOLBARITEM ptbi,
+ [in] HWND hwnd,
+ [in] LPMSG lpMsg);
+
+ HRESULT v_MayTranslateAccelerator(
+ [in] MSG* pmsg);
+
+ HRESULT _GetBorderDWHelper(
+ [in] IUnknown *punkSrc,
+ [in] LPRECT lprectBorder,
+ [in] BOOL bUseHmonitor);
+
+ HRESULT v_CheckZoneCrossing(
+ [in, out] LPCITEMIDLIST pidl);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h
new file mode 100644
index 00000000..233f8073
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shdispid.h
@@ -0,0 +1,39 @@
+/*
+ * DispIds for Shell Interfaces
+ *
+ * Copyright (C) 2008 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _SHDISPID_H_
+#define _SHDISPID_H_
+
+#define DISPID_SELECTIONCHANGED 200
+#define DISPID_FILELISTENUMDONE 201
+#define DISPID_VERBINVOKED 202
+#define DISPID_DEFAULTVERBINVOKED 203
+#define DISPID_BEGINDRAG 204
+
+#endif /* defined _SHDISPID_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h
new file mode 100644
index 00000000..e526fe10
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shellapi.h
@@ -0,0 +1,670 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHELLAPI_H
+#define __WINE_SHELLAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <pshpack1.h>
+#endif
+
+DECLARE_HANDLE(HDROP);
+
+/******************************************
+ * DragObject
+ */
+
+typedef struct _DRAGINFOA
+{ UINT uSize;
+ POINT pt;
+ BOOL fNC;
+ LPSTR lpFileList;
+ DWORD grfKeyState;
+} DRAGINFOA, *LPDRAGINFOA;
+
+typedef struct _DRAGINFOW
+{ UINT uSize;
+ POINT pt;
+ BOOL fNC;
+ LPWSTR lpFileList;
+ DWORD grfKeyState;
+} DRAGINFOW, *LPDRAGINFOW;
+
+DECL_WINELIB_TYPE_AW(DRAGINFO)
+DECL_WINELIB_TYPE_AW(LPDRAGINFO)
+
+void WINAPI DragAcceptFiles(HWND hWnd, BOOL b);
+UINT WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength);
+UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength);
+#define DragQueryFile WINELIB_NAME_AW(DragQueryFile)
+void WINAPI DragFinish(HDROP h);
+BOOL WINAPI DragQueryPoint(HDROP hDrop, POINT *p);
+
+
+
+/******************************************
+ * Application Bar
+ */
+#define ABM_NEW 0x00000000
+#define ABM_REMOVE 0x00000001
+#define ABM_QUERYPOS 0x00000002
+#define ABM_SETPOS 0x00000003
+#define ABM_GETSTATE 0x00000004
+#define ABM_GETTASKBARPOS 0x00000005
+#define ABM_ACTIVATE 0x00000006
+#define ABM_GETAUTOHIDEBAR 0x00000007
+#define ABM_SETAUTOHIDEBAR 0x00000008
+#define ABM_WINDOWPOSCHANGED 0x00000009
+
+#define ABN_STATECHANGE 0x00000000
+#define ABN_POSCHANGED 0x00000001
+#define ABN_FULLSCREENAPP 0x00000002
+#define ABN_WINDOWARRANGE 0x00000003
+
+#define ABS_AUTOHIDE 0x00000001
+#define ABS_ALWAYSONTOP 0x00000002
+
+#define ABE_LEFT 0
+#define ABE_TOP 1
+#define ABE_RIGHT 2
+#define ABE_BOTTOM 3
+
+typedef struct _AppBarData
+{ DWORD cbSize;
+ HWND hWnd;
+ UINT uCallbackMessage;
+ UINT uEdge;
+ RECT rc;
+ LPARAM lParam;
+} APPBARDATA, *PAPPBARDATA;
+
+UINT_PTR WINAPI SHAppBarMessage(DWORD,PAPPBARDATA);
+
+/******************************************
+ * SHGetFileInfo
+ */
+
+#define SHGFI_LARGEICON 0x000000000 /* get large icon */
+#define SHGFI_SMALLICON 0x000000001 /* get small icon */
+#define SHGFI_OPENICON 0x000000002 /* get open icon */
+#define SHGFI_SHELLICONSIZE 0x000000004 /* get shell size icon */
+#define SHGFI_PIDL 0x000000008 /* pszPath is a pidl */
+#define SHGFI_USEFILEATTRIBUTES 0x000000010 /* use passed dwFileAttribute */
+#define SHGFI_ADDOVERLAYS 0x000000020
+#define SHGFI_OVERLAYINDEX 0x000000040
+#define SHGFI_ICON 0x000000100 /* get icon */
+#define SHGFI_DISPLAYNAME 0x000000200 /* get display name */
+#define SHGFI_TYPENAME 0x000000400 /* get type name */
+#define SHGFI_ATTRIBUTES 0x000000800 /* get attributes */
+#define SHGFI_ICONLOCATION 0x000001000 /* get icon location */
+#define SHGFI_EXETYPE 0x000002000 /* return exe type */
+#define SHGFI_SYSICONINDEX 0x000004000 /* get system icon index */
+#define SHGFI_LINKOVERLAY 0x000008000 /* put a link overlay on icon */
+#define SHGFI_SELECTED 0x000010000 /* show icon in selected state */
+#define SHGFI_ATTR_SPECIFIED 0x000020000 /* get only specified attributes */
+
+typedef struct tagSHFILEINFOA
+{ HICON hIcon; /* icon */
+ int iIcon; /* icon index */
+ DWORD dwAttributes; /* SFGAO_ flags */
+ CHAR szDisplayName[MAX_PATH];/* display name (or path) */
+ CHAR szTypeName[80]; /* type name */
+} SHFILEINFOA;
+
+typedef struct tagSHFILEINFOW
+{ HICON hIcon; /* icon */
+ int iIcon; /* icon index */
+ DWORD dwAttributes; /* SFGAO_ flags */
+ WCHAR szDisplayName[MAX_PATH];/* display name (or path) */
+ WCHAR szTypeName[80]; /* type name */
+} SHFILEINFOW;
+
+DECL_WINELIB_TYPE_AW(SHFILEINFO)
+
+DWORD_PTR WINAPI SHGetFileInfoA(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR,DWORD,SHFILEINFOW*,UINT,UINT);
+#define SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo)
+
+/******************************************
+ * SHGetImageList
+ */
+
+HRESULT WINAPI SHGetImageList(INT, REFIID, void **);
+
+#define SHIL_LARGE 0x0
+#define SHIL_SMALL 0x1
+#define SHIL_EXTRALARGE 0x2
+#define SHIL_SYSSMALL 0x3
+#define SHIL_JUMBO 0x4
+#define SHIL_LAST SHIL_JUMBO
+
+/******************************************
+ * SHSetFileInfo
+ */
+
+/******************************************
+* SHFileOperation
+*/
+#define FO_MOVE 0x0001
+#define FO_COPY 0x0002
+#define FO_DELETE 0x0003
+#define FO_RENAME 0x0004
+
+#define FOF_MULTIDESTFILES 0x0001
+#define FOF_CONFIRMMOUSE 0x0002
+#define FOF_SILENT 0x0004
+#define FOF_RENAMEONCOLLISION 0x0008
+#define FOF_NOCONFIRMATION 0x0010
+#define FOF_WANTMAPPINGHANDLE 0x0020
+#define FOF_ALLOWUNDO 0x0040
+#define FOF_FILESONLY 0x0080
+#define FOF_SIMPLEPROGRESS 0x0100
+#define FOF_NOCONFIRMMKDIR 0x0200
+#define FOF_NOERRORUI 0x0400
+#define FOF_NOCOPYSECURITYATTRIBS 0x0800
+#define FOF_NORECURSION 0x1000 /* don't do recursion into directories */
+#define FOF_NO_CONNECTED_ELEMENTS 0x2000 /* don't do connected files */
+#define FOF_WANTNUKEWARNING 0x4000 /* during delete operation, warn if delete instead
+ of recycling (even if FOF_NOCONFIRMATION) */
+#define FOF_NORECURSEREPARSE 0x8000 /* don't do recursion into reparse points */
+#define FOF_NO_UI (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR)
+
+typedef WORD FILEOP_FLAGS;
+
+#define PO_DELETE 0x0013
+#define PO_RENAME 0x0014
+#define PO_PORTCHANGE 0x0020
+#define PO_REN_PORT (PO_RENAME | PO_PORTCHANGE)
+
+typedef WORD PRINTEROP_FLAGS;
+
+typedef struct _SHFILEOPSTRUCTA
+{ HWND hwnd;
+ UINT wFunc;
+ LPCSTR pFrom;
+ LPCSTR pTo;
+ FILEOP_FLAGS fFlags;
+ BOOL fAnyOperationsAborted;
+ LPVOID hNameMappings;
+ LPCSTR lpszProgressTitle;
+} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
+
+typedef struct _SHFILEOPSTRUCTW
+{ HWND hwnd;
+ UINT wFunc;
+ LPCWSTR pFrom;
+ LPCWSTR pTo;
+ FILEOP_FLAGS fFlags;
+ BOOL fAnyOperationsAborted;
+ LPVOID hNameMappings;
+ LPCWSTR lpszProgressTitle;
+} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
+
+#define SHFILEOPSTRUCT WINELIB_NAME_AW(SHFILEOPSTRUCT)
+#define LPSHFILEOPSTRUCT WINELIB_NAME_AW(LPSHFILEOPSTRUCT)
+
+int WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp);
+int WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp);
+#define SHFileOperation WINELIB_NAME_AW(SHFileOperation)
+
+typedef struct _SHNAMEMAPPINGA
+{
+ LPSTR pszOldPath;
+ LPSTR pszNewPath;
+ int cchOldPath;
+ int cchNewPath;
+} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;
+
+typedef struct _SHNAMEMAPPINGW
+{
+ LPWSTR pszOldPath;
+ LPWSTR pszNewPath;
+ int cchOldPath;
+ int cchNewPath;
+} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;
+
+DECL_WINELIB_TYPE_AW(SHNAMEMAPPING)
+DECL_WINELIB_TYPE_AW(LPSHNAMEMAPPING)
+
+void WINAPI SHFreeNameMappings(HANDLE hNameMappings);
+
+/******************************************
+ * ShellExecute
+ */
+#define SE_ERR_SHARE 26
+#define SE_ERR_ASSOCINCOMPLETE 27
+#define SE_ERR_DDETIMEOUT 28
+#define SE_ERR_DDEFAIL 29
+#define SE_ERR_DDEBUSY 30
+#define SE_ERR_NOASSOC 31
+
+HINSTANCE WINAPI ShellExecuteA(HWND,LPCSTR,LPCSTR,LPCSTR,LPCSTR,INT);
+HINSTANCE WINAPI ShellExecuteW(HWND,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,INT);
+#define ShellExecute WINELIB_NAME_AW(ShellExecute)
+
+#define SE_ERR_FNF 2 /* file not found */
+#define SE_ERR_PNF 3 /* path not found */
+#define SE_ERR_ACCESSDENIED 5 /* access denied */
+#define SE_ERR_OOM 8 /* out of memory */
+#define SE_ERR_DLLNOTFOUND 32
+#define SE_ERR_SHARE 26
+#define SE_ERR_ASSOCINCOMPLETE 27
+#define SE_ERR_DDETIMEOUT 28
+#define SE_ERR_DDEFAIL 29
+#define SE_ERR_DDEBUSY 30
+#define SE_ERR_NOASSOC 31
+
+#define SEE_MASK_DEFAULT 0x00000000
+#define SEE_MASK_CLASSNAME 0x00000001
+#define SEE_MASK_CLASSKEY 0x00000003
+#define SEE_MASK_IDLIST 0x00000004
+#define SEE_MASK_INVOKEIDLIST 0x0000000c
+#define SEE_MASK_ICON 0x00000010
+#define SEE_MASK_HOTKEY 0x00000020
+#define SEE_MASK_NOCLOSEPROCESS 0x00000040
+#define SEE_MASK_CONNECTNETDRV 0x00000080
+#define SEE_MASK_NOASYNC 0x00000100
+#define SEE_MASK_FLAG_DDEWAIT SEE_MASK_NOASYNC
+#define SEE_MASK_DOENVSUBST 0x00000200
+#define SEE_MASK_FLAG_NO_UI 0x00000400
+#define SEE_MASK_UNICODE 0x00004000
+#define SEE_MASK_NO_CONSOLE 0x00008000
+#define SEE_MASK_ASYNCOK 0x00100000
+#define SEE_MASK_HMONITOR 0x00200000
+#define SEE_MASK_NOZONECHECKS 0x00800000
+#define SEE_MASK_NOQUERYCLASSSTORE 0x01000000
+#define SEE_MASK_WAITFORINPUTIDLE 0x02000000
+#define SEE_MASK_FLAG_LOG_USAGE 0x04000000
+
+typedef struct _SHELLEXECUTEINFOA
+{ DWORD cbSize;
+ ULONG fMask;
+ HWND hwnd;
+ LPCSTR lpVerb;
+ LPCSTR lpFile;
+ LPCSTR lpParameters;
+ LPCSTR lpDirectory;
+ INT nShow;
+ HINSTANCE hInstApp;
+ /* Optional fields */
+ LPVOID lpIDList;
+ LPCSTR lpClass;
+ HKEY hkeyClass;
+ DWORD dwHotKey;
+ union
+ { HANDLE hIcon;
+ HANDLE hMonitor;
+ } DUMMYUNIONNAME;
+ HANDLE hProcess;
+} SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA;
+
+typedef struct _SHELLEXECUTEINFOW
+{ DWORD cbSize;
+ ULONG fMask;
+ HWND hwnd;
+ LPCWSTR lpVerb;
+ LPCWSTR lpFile;
+ LPCWSTR lpParameters;
+ LPCWSTR lpDirectory;
+ INT nShow;
+ HINSTANCE hInstApp;
+ /* Optional fields*/
+ LPVOID lpIDList;
+ LPCWSTR lpClass;
+ HKEY hkeyClass;
+ DWORD dwHotKey;
+ union
+ { HANDLE hIcon;
+ HANDLE hMonitor;
+ } DUMMYUNIONNAME;
+ HANDLE hProcess;
+} SHELLEXECUTEINFOW, *LPSHELLEXECUTEINFOW;
+
+#define SHELLEXECUTEINFO WINELIB_NAME_AW(SHELLEXECUTEINFO)
+#define LPSHELLEXECUTEINFO WINELIB_NAME_AW(LPSHELLEXECUTEINFO)
+
+BOOL WINAPI ShellExecuteExA(LPSHELLEXECUTEINFOA lpExecInfo);
+BOOL WINAPI ShellExecuteExW(LPSHELLEXECUTEINFOW lpExecInfo);
+#define ShellExecuteEx WINELIB_NAME_AW(ShellExecuteEx)
+
+void WINAPI WinExecErrorA(HWND hwnd,INT error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);
+void WINAPI WinExecErrorW(HWND hwnd,INT error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);
+#define WinExecError WINELIB_NAME_AW(WinExecError)
+
+/******************************************
+ * Tray Notification
+ */
+/* notifyicondata.uFlags values*/
+#define NIF_MESSAGE 0x00000001
+#define NIF_ICON 0x00000002
+#define NIF_TIP 0x00000004
+#define NIF_STATE 0x00000008
+#define NIF_INFO 0x00000010
+#define NIF_GUID 0x00000020
+#define NIF_REALTIME 0x00000040
+#define NIF_SHOWTIP 0x00000080
+
+/* notifyicondata.dwState values */
+#define NIS_HIDDEN 0x00000001
+#define NIS_SHAREDICON 0x00000002
+
+/* notifyicondata.dwInfoFlags values */
+#define NIIF_NONE 0x00000000
+#define NIIF_INFO 0x00000001
+#define NIIF_WARNING 0x00000002
+#define NIIF_ERROR 0x00000003
+#define NIIF_USER 0x00000004
+#define NIIF_ICONMASK 0x0000000f
+#define NIIF_NOSOUND 0x00000010
+#define NIIF_LARGEICON 0x00000020
+
+/* dwMessage values */
+#define NIM_ADD 0x00000000
+#define NIM_MODIFY 0x00000001
+#define NIM_DELETE 0x00000002
+#define NIM_SETFOCUS 0x00000003
+#define NIM_SETVERSION 0x00000004
+
+#define NOTIFY_VERSION 3 /* supported by Windows 2000 and later */
+#define NOTIFY_VERSION_4 4 /* supported by Windows Vista */
+
+/* callback message lParam values */
+#define NIN_SELECT (WM_USER+0)
+#define NINF_KEY 1
+#define NIN_KEYSELECT (NIN_SELECT|NINF_KEY) /* WM_USER+1 */
+#define NIN_BALOONSHOW (WM_USER+2)
+#define NIN_BALOONHIDE (WM_USER+3)
+#define NIN_BALOONTIMEOUT (WM_USER+4)
+#define NIN_BALOONCLICK (WM_USER+5)
+#define NIN_POPUPOPEN (WM_USER+6)
+#define NIN_POPUPCLOSE (WM_USER+7)
+
+typedef struct _NOTIFYICONDATAA
+{ DWORD cbSize;
+ HWND hWnd;
+ UINT uID;
+ UINT uFlags;
+ UINT uCallbackMessage;
+ HICON hIcon;
+ CHAR szTip[128];
+ DWORD dwState;
+ DWORD dwStateMask;
+ CHAR szInfo[256];
+ union {
+ UINT uTimeout;
+ UINT uVersion;
+ } DUMMYUNIONNAME;
+ CHAR szInfoTitle[64];
+ DWORD dwInfoFlags;
+ GUID guidItem;
+ HICON hBalloonIcon;
+} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
+
+typedef struct _NOTIFYICONDATAW
+{ DWORD cbSize;
+ HWND hWnd;
+ UINT uID;
+ UINT uFlags;
+ UINT uCallbackMessage;
+ HICON hIcon;
+ WCHAR szTip[128];
+ DWORD dwState;
+ DWORD dwStateMask;
+ WCHAR szInfo[256];
+ union {
+ UINT uTimeout;
+ UINT uVersion;
+ } DUMMYUNIONNAME;
+ WCHAR szInfoTitle[64];
+ DWORD dwInfoFlags;
+ GUID guidItem;
+ HICON hBalloonIcon;
+} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
+
+DECL_WINELIB_TYPE_AW(NOTIFYICONDATA)
+DECL_WINELIB_TYPE_AW(PNOTIFYICONDATA)
+
+BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData);
+BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW lpData);
+
+#define Shell_NotifyIcon WINELIB_NAME_AW(Shell_NotifyIcon)
+
+/* pre IE 5.0 */
+#define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
+#define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
+
+/* pre Window XP */
+#define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
+#define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
+
+/* pre Window Vista */
+#define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon)
+#define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon)
+
+
+/******************************************
+ * Links
+ */
+
+#define SHGNLI_PIDL 0x01
+#define SHGNLI_PREFIXNAME 0x02
+#define SHGNLI_NOUNIQUE 0x04
+#define SHGNLI_NOLNK 0x08
+
+BOOL WINAPI SHGetNewLinkInfoA(LPCSTR,LPCSTR,LPSTR,BOOL*,UINT);
+BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR,LPCWSTR,LPWSTR,BOOL*,UINT);
+#define SHGetNewLinkInfo WINELIB_NAME_AW(SHGetNewLinkInfo)
+
+/******************************************
+ * Recycle bin
+ */
+
+typedef struct _SHQUERYRBINFO
+{
+ DWORD cbSize;
+ DWORDLONG i64Size;
+ DWORDLONG i64NumItems;
+} SHQUERYRBINFO, *LPSHQUERYRBINFO;
+
+HRESULT WINAPI SHEmptyRecycleBinA(HWND,LPCSTR,DWORD);
+HRESULT WINAPI SHEmptyRecycleBinW(HWND,LPCWSTR,DWORD);
+#define SHEmptyRecycleBin WINELIB_NAME_AW(SHEmptyRecycleBin)
+HRESULT WINAPI SHQueryRecycleBinA(LPCSTR,LPSHQUERYRBINFO);
+HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR,LPSHQUERYRBINFO);
+#define SHQueryRecycleBin WINELIB_NAME_AW(SHQueryRecycleBin)
+
+/******************************************
+ * Misc
+ */
+
+typedef enum SHSTOCKICONID
+{
+ SIID_INVALID=-1,
+ SIID_DOCNOASSOC,
+ SIID_DOCASSOC,
+ SIID_APPLICATION,
+ SIID_FOLDER,
+ SIID_FOLDEROPEN,
+ SIID_DRIVE525,
+ SIID_DRIVE35,
+ SIID_DRIVERREMOVE,
+ SIID_DRIVERFIXED,
+ SIID_DRIVERNET,
+ SIID_DRIVERNETDISABLE,
+ SIID_DRIVERCD,
+ SIID_DRIVERRAM,
+ SIID_WORLD,
+ /* Missing: 14 */
+ SIID_SERVER = 15,
+ SIID_PRINTER,
+ SIID_MYNETWORK,
+ /* Missing: 18 - 21 */
+ SIID_FIND = 22,
+ SIID_HELP,
+ /* Missing: 24 - 27 */
+ SIID_SHARE = 28,
+ SIID_LINK,
+ SIID_SLOWFILE,
+ SIID_RECYCLER,
+ SIID_RECYCLERFULL,
+ /* Missing: 33 - 39 */
+ SIID_MEDIACDAUDIO = 40,
+ /* Missing: 41 - 46 */
+ SIID_LOCK = 47,
+ /* Missing: 48 */
+ SIID_AUTOLIST = 49,
+ SIID_PRINTERNET,
+ SIID_SERVERSHARE,
+ SIID_PRINTERFAX,
+ SIID_PRINTERFAXNET,
+ SIID_PRINTERFILE,
+ SIID_STACK,
+ SIID_MEDIASVCD,
+ SIID_STUFFEDFOLDER,
+ SIID_DRIVEUNKNOWN,
+ SIID_DRIVEDVD,
+ SIID_MEDIADVD,
+ SIID_MEDIADVDRAM,
+ SIID_MEDIADVDRW,
+ SIID_MEDIADVDR,
+ SIID_MEDIADVDROM,
+ SIID_MEDIACDAUDIOPLUS,
+ SIID_MEDIACDRW,
+ SIID_MEDIACDR,
+ SIID_MEDIACDBURN,
+ SIID_MEDIABLANKCD,
+ SIID_MEDIACDROM,
+ SIID_AUDIOFILES,
+ SIID_IMAGEFILES,
+ SIID_VIDEOFILES,
+ SIID_MIXEDFILES,
+ SIID_FOLDERBACK,
+ SIID_FOLDERFRONT,
+ SIID_SHIELD,
+ SIID_WARNING,
+ SIID_INFO,
+ SIID_ERROR,
+ SIID_KEY,
+ SIID_SOFTWARE,
+ SIID_RENAME,
+ SIID_DELETE,
+ SIID_MEDIAAUDIODVD,
+ SIID_MEDIAMOVIEDVD,
+ SIID_MEDIAENHANCEDCD,
+ SIID_MEDIAENHANCEDDVD,
+ SIID_MEDIAHDDVD,
+ SIID_MEDIABLUERAY,
+ SIID_MEDIAVCD,
+ SIID_MEDIADVDPLUSR,
+ SIID_MEDIADVDPLUSRW,
+ SIID_DESKTOPPC,
+ SIID_MOBILEPC,
+ SIID_USERS,
+ SIID_MEDIASMARTMEDIA,
+ SIID_MEDIACOMPACTFLASH,
+ SIID_DEVICECELLPHONE,
+ SIID_DEVICECAMERA,
+ SIID_DEVICEVIDEOCAMERA,
+ SIID_DEVICEAUDIOPLAYER,
+ SIID_NETWORKCONNECT,
+ SIID_INTERNET,
+ SIID_ZIPFILE,
+ SIID_SETTINGS,
+ /* Missing: 107 - 131 */
+ SIID_DRIVEHDDVD = 132,
+ SIID_DRIVEBD,
+ SIID_MEDIAHDDVDROM,
+ SIID_MEDIAHDDVDR,
+ SIID_MEDIAHDDVDRAM,
+ SIID_MEDIABDROM,
+ SIID_MEDIABDR,
+ SIID_MEDIABDRE,
+ SIID_CLUSTEREDDRIVE,
+ /* Missing: 141 - 174 */
+ SIID_MAX_ICONS = 175
+}SHSTOCKICONID;
+
+typedef struct _SHSTOCKICONINFO
+{
+ DWORD cbSize;
+ HICON hIcon;
+ INT iSysImageIndex;
+ INT iIcon;
+ WCHAR szPath[MAX_PATH];
+} SHSTOCKICONINFO;
+
+/* flags for SHGetStockIconInfo */
+#define SHGSI_ICONLOCATION 0
+#define SHGSI_ICON SHGFI_ICON
+#define SHGSI_SYSICONINDEX SHGFI_SYSICONINDEX
+#define SHGSI_LINKOVERLAY SHGFI_LINKOVERLAY
+#define SHGSI_SELECTED SHGFI_SELECTED
+#define SHGSI_LARGEICON SHGFI_LARGEICON
+#define SHGSI_SMALLICON SHGFI_SMALLICON
+#define SHGSI_SHELLICONSIZE SHGFI_SHELLICONSIZE
+
+HRESULT WINAPI SHGetStockIconInfo(SHSTOCKICONID, UINT, SHSTOCKICONINFO*);
+LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR,int*);
+HICON WINAPI ExtractIconA(HINSTANCE,LPCSTR,UINT);
+HICON WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT);
+#define ExtractIcon WINELIB_NAME_AW(ExtractIcon)
+HICON WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD);
+HICON WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD);
+#define ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon)
+HICON WINAPI ExtractAssociatedIconExA(HINSTANCE,LPSTR,LPWORD,LPWORD);
+HICON WINAPI ExtractAssociatedIconExW(HINSTANCE,LPWSTR,LPWORD,LPWORD);
+#define ExtractAssociatedIconEx WINELIB_NAME_AW(ExtractAssociatedIconEx)
+UINT WINAPI ExtractIconExA(LPCSTR,INT,HICON*,HICON*,UINT);
+UINT WINAPI ExtractIconExW(LPCWSTR,INT,HICON*,HICON*,UINT);
+#define ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)
+HINSTANCE WINAPI FindExecutableA(LPCSTR,LPCSTR,LPSTR);
+HINSTANCE WINAPI FindExecutableW(LPCWSTR,LPCWSTR,LPWSTR);
+#define FindExecutable WINELIB_NAME_AW(FindExecutable)
+BOOL WINAPI ShellAboutA(HWND,LPCSTR,LPCSTR,HICON);
+BOOL WINAPI ShellAboutW(HWND,LPCWSTR,LPCWSTR,HICON);
+#define ShellAbout WINELIB_NAME_AW(ShellAbout)
+int WINAPIV ShellMessageBoxA(HINSTANCE,HWND,LPCSTR,LPCSTR,UINT,...);
+int WINAPIV ShellMessageBoxW(HINSTANCE,HWND,LPCWSTR,LPCWSTR,UINT,...);
+#define ShellMessageBox WINELIB_NAME_AW(ShellMessageBox)
+DWORD WINAPI DoEnvironmentSubstA(LPSTR, UINT);
+DWORD WINAPI DoEnvironmentSubstW(LPWSTR, UINT);
+#define DoEnvironmentSubst WINELIB_NAME_AW(DoEnvironmentSubst)
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#ifndef _WIN64
+#include <poppack.h>
+#endif
+
+#endif /* __WINE_SHELLAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl
new file mode 100644
index 00000000..1f882146
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shldisp.idl
@@ -0,0 +1,573 @@
+/*
+ * COM interfaces for shell objects
+ *
+ * Copyright (C) 2004 Maxime Bellengé
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "ocidl.idl";
+
+#include <shdispid.h>
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef ShellExecute")
+cpp_quote("#endif")
+
+/*****************************************************************************
+ * IEnumACString interface
+ */
+[
+ local,
+ object,
+ uuid(8e74c210-cf9d-4eaf-a403-7356428f0a5a),
+ pointer_default(unique)
+]
+interface IEnumACString : IEnumString
+{
+ typedef IEnumACString *PENUMACSTRING, *LPENUMACSTRING;
+
+ typedef enum _tagACENUMOPTION
+ {
+ ACEO_NONE = 0x00000000,
+ ACEO_MOSTRECENTFIRST = 0x00000001,
+ ACEO_FIRSTUNUSED = 0x00010000,
+ } ACENUMOPTION;
+
+ HRESULT NextItem( [out] LPWSTR pszUrl,
+ [in] ULONG cchMax,
+ [out] ULONG *pulSortIndex);
+
+ HRESULT SetEnumOptions( [in] DWORD dwOptions );
+
+ HRESULT GetEnumOptions( [out] DWORD *pdwOptions );
+}
+
+/*****************************************************************************
+ * IAutoComplete interface
+ */
+[
+ local,
+ object,
+ uuid(00bb2762-6a77-11d0-a535-00c04fd7d062),
+ pointer_default(unique)
+]
+interface IAutoComplete : IUnknown
+{
+ typedef IAutoComplete *LPAUTOCOMPLETE;
+
+ HRESULT Init( [in] HWND hwndEdit,
+ [in] IUnknown *punkACL,
+ [in] LPCOLESTR pwszRegKeyPath,
+ [in] LPCOLESTR pwszQuickComplete);
+
+ HRESULT Enable( [in] BOOL fEnable );
+}
+
+/*****************************************************************************
+ * IAutoComplete2 interface
+ */
+[
+ local,
+ object,
+ uuid(eac04bc0-3791-11d2-bb95-0060977b464c),
+ pointer_default(unique)
+]
+interface IAutoComplete2 : IAutoComplete
+{
+ typedef IAutoComplete2 *LPAUTOCOMPLETE2;
+
+ typedef enum _tagAUTOCOMPLETEOPTIONS
+ {
+ ACO_NONE = 0x00, /* No AutoComplete */
+ ACO_AUTOSUGGEST = 0x01, /* enable autosuggest dropdown */
+ ACO_AUTOAPPEND = 0x02, /* enable autoappend */
+ ACO_SEARCH = 0x04, /* add search entry to completion list */
+ ACO_FILTERPREFIXES = 0x08, /* don't match common prefixes (www., http://, etc) */
+ ACO_USETAB = 0x10, /* use tab to select autosuggest entries */
+ ACO_UPDOWNKEYDROPSLIST = 0x20, /* up/down arrow key invokes autosuggest dropdown (if enabled) */
+ ACO_RTLREADING = 0x40, /* enable RTL reading order for dropdown */
+ } AUTOCOMPLETEOPTIONS;
+
+ HRESULT SetOptions( [in] DWORD dwFlag);
+
+ HRESULT GetOptions( [out] DWORD *pdwFlag);
+}
+
+[
+ uuid(50a7e9b0-70ef-11d1-b75a-00a0c90564fe),
+ version(1.0)
+]
+library Shell32
+{
+
+importlib("stdole2.tlb");
+
+[
+ object,
+ oleautomation,
+ uuid(9ba05970-f6a8-11cf-a442-00a0c90a8f39),
+ pointer_default(unique)
+]
+interface IFolderViewOC : IDispatch
+{
+ HRESULT SetFolderView( [in] IDispatch *pdisp );
+}
+
+[
+ uuid(62112aa2-ebe4-11cf-a5fb-0020afe7292d)
+]
+dispinterface DShellFolderViewEvents
+{
+ properties:
+ methods:
+ [id(DISPID_SELECTIONCHANGED)]
+ void SelectionChanged();
+
+ [id(DISPID_FILELISTENUMDONE)]
+ void EnumDone();
+
+ [id(DISPID_VERBINVOKED)]
+ VARIANT_BOOL VerbInvoked();
+
+ [id(DISPID_DEFAULTVERBINVOKED)]
+ VARIANT_BOOL DefaultVerbInvoked();
+
+ [id(DISPID_BEGINDRAG)]
+ VARIANT_BOOL BeginDrag();
+}
+
+[
+ uuid(9ba05971-f6a8-11cf-a442-00a0c90a8f39),
+ hidden
+]
+coclass ShellFolderViewOC
+{
+ [default] interface IFolderViewOC;
+ [default, source] dispinterface DShellFolderViewEvents;
+}
+
+interface FolderItem;
+interface FolderItems;
+interface FolderItemVerb;
+interface FolderItemVerbs;
+
+/*****************************************************************************
+ * Folder interface
+ */
+[
+ object,
+ uuid(bbcbde60-c3ff-11ce-8350-444553540000),
+ oleautomation,
+ dual
+]
+interface Folder : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Title( [out, retval] BSTR *pbs );
+
+ [propget]
+ HRESULT Application( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT Parent( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT ParentFolder( [out, retval] Folder **ppsf );
+
+ HRESULT Items( [out, retval] FolderItems **ppid );
+
+ HRESULT ParseName( [in] BSTR bName, [out, retval] FolderItem **ppid );
+
+ HRESULT NewFolder( [in] BSTR bName, [in, optional] VARIANT vOptions );
+
+ HRESULT MoveHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions );
+
+ HRESULT CopyHere( [in] VARIANT vItem, [in, optional] VARIANT vOptions );
+
+ HRESULT GetDetailsOf( [in] VARIANT vItem,
+ [in] int iColumn,
+ [out, retval] BSTR *pbs );
+}
+
+/*****************************************************************************
+ * Folder2 interface
+ */
+[
+ object,
+ uuid(f0d2d8ef-3890-11d2-bf8b-00c04fb93661),
+ oleautomation,
+ dual
+]
+interface Folder2 : Folder
+{
+ [propget]
+ HRESULT Self( [out, retval] FolderItem **ppfi );
+
+ [propget]
+ HRESULT OfflineStatus( [out, retval] LONG *pul );
+
+ HRESULT Synchronize();
+
+ [propget, id(1)]
+ HRESULT HaveToShowWebViewBarricade(
+ [out, retval] VARIANT_BOOL *pbHaveToShowWebViewBarricade );
+
+ HRESULT DismissedWebViewBarricade();
+}
+
+/*****************************************************************************
+ * Folder3 interface
+ */
+[
+ object,
+ uuid(a7ae5f64-c4d7-4d7f-9307-4d24ee54b841),
+ oleautomation,
+ dual
+]
+interface Folder3 : Folder2
+{
+ [propget, id(2)]
+ HRESULT ShowWebViewBarricade(
+ [out, retval] VARIANT_BOOL *pbShowWebViewBarricade );
+
+ [propput, id(2)]
+ HRESULT ShowWebViewBarricade( [in] VARIANT_BOOL bShowWebViewBarricade );
+}
+
+/*****************************************************************************
+ * FolderItem interface
+ */
+[
+ object,
+ uuid(fac32c80-cbe4-11ce-8350-444553540000),
+ oleautomation,
+ dual
+]
+interface FolderItem : IDispatch
+{
+ typedef FolderItem *LPFOLDERITEM;
+
+ [propget]
+ HRESULT Application( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT Parent( [out, retval] IDispatch **ppid );
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT Name( [out, retval] BSTR *pbs );
+
+ [propput, id(DISPID_VALUE)]
+ HRESULT Name( [in] BSTR bs );
+
+ [propget]
+ HRESULT Path( [out, retval] BSTR *pbs );
+
+ [propget]
+ HRESULT GetLink( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT GetFolder( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT IsLink( [out, retval] VARIANT_BOOL *pb );
+
+ [propget]
+ HRESULT IsFolder( [out, retval] VARIANT_BOOL *pb );
+
+ [propget]
+ HRESULT IsFileSystem( [out, retval] VARIANT_BOOL *pb );
+
+ [propget]
+ HRESULT IsBrowsable( [out, retval] VARIANT_BOOL *pb );
+
+ [propget]
+ HRESULT ModifyDate( [out, retval] DATE *pdt );
+
+ [propput]
+ HRESULT ModifyDate( [in] DATE dt );
+
+ [propget]
+ HRESULT Size( [out, retval] LONG *pul );
+
+ [propget]
+ HRESULT Type( [out, retval] BSTR *pbs );
+
+ HRESULT Verbs( [out, retval] FolderItemVerbs **ppfic );
+
+ HRESULT InvokeVerb( [in, optional] VARIANT vVerb );
+}
+
+/*****************************************************************************
+ * FolderItems interface
+ */
+[
+ object,
+ uuid(744129e0-cbe5-11ce-8350-444553540000),
+ oleautomation,
+ dual
+]
+interface FolderItems : IDispatch
+{
+ [propget]
+ HRESULT Count( [out, retval] long *plCount );
+
+ [propget]
+ HRESULT Application( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT Parent( [out, retval] IDispatch **ppid );
+
+ HRESULT Item( [in, optional] VARIANT index,
+ [out, retval] FolderItem **ppid );
+
+ [id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **ppunk );
+}
+
+/*****************************************************************************
+ * FolderItemVerb interface
+ */
+[
+ object,
+ uuid(08ec3e00-50b0-11cf-960c-0080c7f4ee85),
+ oleautomation,
+ dual
+]
+interface FolderItemVerb : IDispatch
+{
+ [propget]
+ HRESULT Application( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT Parent( [out, retval] IDispatch **ppid );
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT Name( [out, retval] BSTR *pbs );
+
+ HRESULT DoIt();
+}
+
+/*****************************************************************************
+ * FolderItemVerbs interface
+ */
+[
+ object,
+ uuid(1f8352c0-50b0-11cf-960c-0080c7f4ee85),
+ oleautomation,
+ dual
+]
+interface FolderItemVerbs : IDispatch
+{
+ [propget]
+ HRESULT Count( [out, retval] long *plCount );
+
+ [propget]
+ HRESULT Application( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT Parent( [out, retval] IDispatch **ppid );
+
+ HRESULT Item( [in, optional] VARIANT index,
+ [out, retval] FolderItemVerb **ppid );
+
+ [id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **ppunk );
+}
+
+/*****************************************************************************
+ * IShellDispatch interface
+ */
+[
+ object,
+ uuid(d8f015c0-c278-11ce-a49e-444553540000),
+ oleautomation,
+ hidden,
+ dual
+]
+interface IShellDispatch : IDispatch
+{
+ [propget]
+ HRESULT Application( [out, retval] IDispatch **ppid );
+
+ [propget]
+ HRESULT Parent( [out, retval] IDispatch **ppid );
+
+ HRESULT NameSpace( [in] VARIANT vDir, [out, retval] Folder **ppsdf );
+
+ HRESULT BrowseForFolder( [in] long Hwnd,
+ [in] BSTR Title,
+ [in] long Options,
+ [in, optional] VARIANT RootFolder,
+ [out, retval] Folder **ppsdf );
+
+ HRESULT Windows( [out, retval] IDispatch **ppid );
+
+ HRESULT Open( [in] VARIANT vDir );
+
+ HRESULT Explore( [in] VARIANT vDir );
+
+ HRESULT MinimizeAll();
+
+ HRESULT UndoMinimizeALL();
+
+ HRESULT FileRun();
+
+ HRESULT CascadeWindows();
+
+ HRESULT TileVertically();
+
+ HRESULT TileHorizontally();
+
+ HRESULT ShutdownWindows();
+
+ HRESULT Suspend();
+
+ HRESULT EjectPC();
+
+ HRESULT SetTime();
+
+ HRESULT TrayProperties();
+
+ HRESULT Help();
+
+ HRESULT FindFiles();
+
+ HRESULT FindComputer();
+
+ HRESULT RefreshMenu();
+
+ HRESULT ControlPanelItem( [in] BSTR szDir );
+}
+
+[
+ object,
+ uuid(a4c6892c-3ba9-11d2-9dea-00c04fb16162),
+ oleautomation,
+ hidden,
+ dual,
+]
+interface IShellDispatch2 : IShellDispatch
+{
+ HRESULT IsRestricted([in] BSTR group, [in] BSTR restriction, [out, retval] long *value);
+ HRESULT ShellExecute([in] BSTR file, [in, optional] VARIANT args, [in, optional] VARIANT dir,
+ [in, optional] VARIANT op, [in, optional] VARIANT show);
+ HRESULT FindPrinter([in, optional] BSTR name, [in, optional] BSTR location, [in, optional] BSTR model);
+ HRESULT GetSystemInformation([in] BSTR name, [out, retval] VARIANT *ret);
+ HRESULT ServiceStart([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret);
+ HRESULT ServiceStop([in] BSTR service, [in] VARIANT persistent, [out, retval] VARIANT *ret);
+ HRESULT IsServiceRunning([in] BSTR service, [out, retval] VARIANT *running);
+ HRESULT CanStartStopService([in] BSTR service, [out, retval] VARIANT *ret);
+ HRESULT ShowBrowserBar([in] BSTR clsid, [in] VARIANT show, [out, retval] VARIANT *ret);
+}
+
+[
+ uuid(13709620-c279-11ce-a49e-444553540000)
+]
+coclass Shell
+{
+ [default] interface IShellDispatch2;
+}
+
+[
+ uuid(0a89a860-d7b1-11ce-8350-444553540000),
+ hidden
+]
+coclass ShellDispatchInproc
+{
+ interface IUnknown;
+}
+
+typedef
+[
+ uuid(ca31ea20-48d0-11cf-8350-444553540000)
+]
+enum ShellSpecialFolderConstants {
+ ssfDESKTOP = 0x00,
+ ssfPROGRAMS = 0x02,
+ ssfCONTROLS = 0x03,
+ ssfPRINTERS = 0x04,
+ ssfPERSONAL = 0x05,
+ ssfFAVORITES = 0x06,
+ ssfSTARTUP = 0x07,
+ ssfRECENT = 0x08,
+ ssfSENDTO = 0x09,
+ ssfBITBUCKET = 0x0a,
+ ssfSTARTMENU = 0x0b,
+ ssfDESKTOPDIRECTORY = 0x10,
+ ssfDRIVES = 0x11,
+ ssfNETWORK = 0x12,
+ ssfNETHOOD = 0x13,
+ ssfFONTS = 0x14,
+ ssfTEMPLATES = 0x15,
+ ssfCOMMONSTARTMENU = 0x16,
+ ssfCOMMONPROGRAMS = 0x17,
+ ssfCOMMONSTARTUP = 0x18,
+ ssfCOMMONDESKTOPDIR = 0x19,
+ ssfAPPDATA = 0x1a,
+ ssfPRINTHOOD = 0x1b,
+ ssfLOCALAPPDATA = 0x1c,
+ ssfALTSTARTUP = 0x1d,
+ ssfCOMMONALTSTARTUP = 0x1e,
+ ssfCOMMONFAVORITES = 0x1f,
+ ssfINTERNETCACHE = 0x20,
+ ssfCOOKIES = 0x21,
+ ssfHISTORY = 0x22,
+ ssfCOMMONAPPDATA = 0x23,
+ ssfWINDOWS = 0x24,
+ ssfSYSTEM = 0x25,
+ ssfPROGRAMFILES = 0x26,
+ ssfMYPICTURES = 0x27,
+ ssfPROFILE = 0x28,
+ ssfSYSTEMx86 = 0x29,
+ ssfPROGRAMFILESx86 = 0x30
+} ShellSpecialFolderConstants;
+
+} /* library Shell32 */
+
+/*****************************************************************************
+ * IAsyncOperation interface
+ */
+[
+ uuid(3d8b0590-f691-11d2-8ea9-006097df5bd4),
+ object,
+]
+
+interface IAsyncOperation : IUnknown
+{
+ typedef [unique] IAsyncOperation *LPASYNCOPERATION;
+
+ HRESULT SetAsyncMode([in] BOOL fDoOpAsync);
+
+ HRESULT GetAsyncMode([out] BOOL *pfIsOpAsync);
+
+ HRESULT StartOperation([in, unique, optional] IBindCtx *pbcReserved);
+
+ HRESULT InOperation([out] BOOL *pfInAsyncOp);
+
+ HRESULT EndOperation(
+ [in] HRESULT hResult,
+ [in, unique] IBindCtx *pbcReserved,
+ [in] DWORD dwEffects);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h
new file mode 100644
index 00000000..3e3d0879
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlguid.h
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 1999 Juergen Schmied
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHLGUID_H
+#define __WINE_SHLGUID_H
+
+DEFINE_OLEGUID(CLSID_ShellDesktop, 0x00021400, 0, 0);
+
+DEFINE_OLEGUID(CATID_BrowsableShellExt, 0x00021490, 0, 0);
+DEFINE_OLEGUID(CATID_BrowseInPlace, 0x00021491, 0, 0);
+DEFINE_OLEGUID(CATID_DeskBand, 0x00021492, 0, 0);
+DEFINE_OLEGUID(CATID_InfoBand, 0x00021493, 0, 0);
+DEFINE_OLEGUID(CATID_CommBand, 0x00021494, 0, 0);
+
+/* shell32 formatids */
+DEFINE_OLEGUID(FMTID_Intshcut, 0x000214A0, 0, 0);
+DEFINE_OLEGUID(FMTID_InternetSite, 0x000214A1, 0, 0);
+
+/* command group ids */
+DEFINE_OLEGUID(CGID_Explorer, 0x000214D0, 0, 0);
+DEFINE_OLEGUID(CGID_ShellDocView, 0x000214D1, 0, 0);
+DEFINE_OLEGUID(CGID_ShellServiceObject, 0x000214D2, 0, 0);
+DEFINE_OLEGUID(CGID_ExplorerBarDoc, 0x000214D3, 0, 0);
+
+DEFINE_OLEGUID(IID_IShellDetails, 0x000214EC, 0, 0);
+DEFINE_OLEGUID(IID_IDelayedRelease, 0x000214ED, 0, 0);
+DEFINE_OLEGUID(IID_IShellCopyHookA, 0x000214EF, 0, 0);
+DEFINE_OLEGUID(IID_IFileViewerA, 0x000214F0, 0, 0);
+DEFINE_OLEGUID(IID_IFileViewerSite, 0x000214F3, 0, 0);
+DEFINE_OLEGUID(IID_IPropSheetPage, 0x000214F6, 0, 0);
+DEFINE_OLEGUID(IID_IFileViewerW, 0x000214F8, 0, 0);
+DEFINE_OLEGUID(IID_IShellCopyHookW, 0x000214FC, 0, 0);
+DEFINE_OLEGUID(IID_IRemoteComputer, 0x000214FE, 0, 0);
+DEFINE_OLEGUID(IID_IQueryInfo, 0x00021500, 0, 0);
+
+
+/* avoid duplicate definitions with shobjidl.h (FIXME) */
+/* DEFINE_OLEGUID(IID_IShellPropSheetExt, 0x000214E9, 0, 0); */
+/* DEFINE_OLEGUID(IID_IExtractIconA, 0x000214EB, 0, 0); */
+/* DEFINE_OLEGUID(IID_IExtractIconW, 0x000214FA, 0, 0); */
+/* DEFINE_OLEGUID(IID_IContextMenu, 0x000214E4, 0, 0); */
+/* DEFINE_OLEGUID(IID_IContextMenu2, 0x000214F4, 0, 0); */
+/* DEFINE_OLEGUID(IID_ICommDlgBrowser, 0x000214F1, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellBrowser, 0x000214E2, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellView, 0x000214E3, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellFolder, 0x000214E6, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellExtInit, 0x000214E8, 0, 0); */
+/* DEFINE_OLEGUID(IID_IPersistFolder, 0x000214EA, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellLinkA, 0x000214EE, 0, 0); */
+/* DEFINE_OLEGUID(IID_IEnumIDList, 0x000214F2, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellLinkW, 0x000214F9, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellExecuteHookA, 0x000214F5, 0, 0); */
+/* DEFINE_OLEGUID(IID_IShellExecuteHookW, 0x000214FB, 0, 0); */
+/* DEFINE_OLEGUID(IID_INewShortcutHookA, 0x000214E1, 0, 0); */
+/* DEFINE_OLEGUID(IID_INewShortcutHookW, 0x000214F7, 0, 0); */
+
+#ifndef NO_INTSHCUT_GUIDS
+#include <isguids.h>
+#endif
+
+#ifndef NO_SHDOCVW_GUIDS
+# ifndef GUID_DEFS_ONLY
+# include <exdisp.h>
+# include <shldisp.h>
+# endif
+
+DEFINE_GUID(IID_IACList, 0x77A130B0,0x94FD,0x11D0,0xA5,0x44,0x00,0xC0,0x4F,0xD7,0xD0,0x62);
+DEFINE_GUID(IID_IACList2, 0x470141A0,0x5186,0x11D2,0xBB,0xB6,0x00,0x60,0x97,0x7B,0x46,0x4C);
+DEFINE_GUID(IID_IObjMgr, 0x00BB2761,0x6A77,0x11D0,0xA5,0x35,0x00,0xC0,0x4F,0xD7,0xD0,0x62);
+
+DEFINE_GUID(IID_IProgressDialog, 0xEBBC7C04,0x315E,0x11D2,0xB6,0x2F,0x00,0x60,0x97,0xDF,0x5B,0xD4);
+#define SID_SProgressUI CLSID_ProgressDialog
+
+DEFINE_GUID(CLSID_CUrlHistory, 0x3c374a40, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee);
+#define SID_SUrlHistory CLSID_CUrlHistory
+
+DEFINE_GUID(CLSID_CURLSearchHook, 0xcfbfae00, 0x17a6, 0x11d0, 0x99, 0xcb, 0x00, 0xc0, 0x4f, 0xd6, 0x44, 0x97);
+
+DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
+
+DEFINE_GUID(CLSID_AutoComplete, 0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
+DEFINE_GUID(CLSID_ACLMulti, 0x00bb2765, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
+DEFINE_GUID(CLSID_ACListISF, 0x03c036f1, 0xa186, 0x11d0, 0x82, 0x4a, 0x00, 0xaa, 0x00, 0x5b, 0x043, 0x83);
+
+#define SID_SInternetExplorer IID_IWebBrowserApp
+#define SID_SWebBrowserApp IID_IWebBrowserApp
+#define SID_SWebBrowserEventsService IID_IWebBrowserEventsService
+
+#endif /* NO_SHDOCVW_GUIDS */
+
+DEFINE_GUID(SID_STopWindow, 0x49e1b500, 0x4636, 0x11d3, 0x97, 0xf7, 0x00, 0xc0, 0x4f, 0x45, 0xd0, 0xb3);
+DEFINE_GUID(SID_SCommDlgBrowser, 0x80f30233, 0xb7df, 0x11d2, 0xa3, 0x3b, 0x00, 0x60, 0x97, 0xdf, 0x5b, 0xd4);
+
+#define SID_LinkSite IID_IShellLinkW
+#define SID_SShellBrowser IID_IShellBrowser
+#define SID_SShellDesktop CLSID_ShellDesktop
+#define IID_IFileViewer WINELIB_NAME_AW(IID_IFileViewer)
+#define IID_IShellLink WINELIB_NAME_AW(IID_IShellLink)
+#define IID_IExtractIcon WINELIB_NAME_AW(IID_IExtractIcon)
+#define IID_IShellCopyHook WINELIB_NAME_AW(IID_IShellCopyHook)
+#define IID_IShellExecuteHook WINELIB_NAME_AW(IID_IShellExecuteHook)
+#define IID_INewShortcutHook WINELIB_NAME_AW(IID_INewShortcutHook)
+
+DEFINE_GUID(IID_IDockingWindowSite, 0x2A342FC2, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
+DEFINE_GUID(IID_IInputObject, 0x68284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4);
+DEFINE_GUID(IID_IInputObjectSite, 0xF1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
+
+/****************************************************************************
+ * the next IID's are the namespace elements of the pidls
+ */
+DEFINE_GUID(CLSID_NetworkPlaces, 0x208D2C60, 0x3AEA, 0x1069, 0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_NetworkDomain, 0x46e06680, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);
+DEFINE_GUID(CLSID_NetworkServer, 0xc0542a90, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);
+DEFINE_GUID(CLSID_NetworkShare, 0x54a754c0, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49);
+DEFINE_GUID(CLSID_MyComputer, 0x20D04FE0, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_Internet, 0x871C5380, 0x42A0, 0x1069, 0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_ShellFSFolder, 0xF3364BA0, 0x65B9, 0x11CE, 0xA9, 0xBA, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
+DEFINE_GUID(CLSID_RecycleBin, 0x645FF040, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E);
+DEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D);
+DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03);
+DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D);
+
+DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57);
+
+DEFINE_GUID(CLSID_QueryAssociations, 0xa07034fd, 0x6caa, 0x4954, 0xac, 0x3f, 0x97, 0xa2, 0x72, 0x16, 0xf9, 0x8a);
+
+DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
+
+DEFINE_GUID(CLSID_ProgressDialog, 0xf8383852, 0xfcd3, 0x11d1, 0xa6, 0xb9, 0x0, 0x60, 0x97, 0xdf, 0x5b, 0xd4);
+
+DEFINE_GUID(CLSID_ShellItem, 0x2fe352ea, 0xfd1f, 0x11d2, 0xb1, 0xf4, 0x00, 0xc0, 0x4f, 0x8e, 0xeb, 0x3e);
+
+#define PSGUID_SHELLDETAILS {0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0}
+DEFINE_GUID(FMTID_ShellDetails, 0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0);
+#define PID_FINDDATA 0
+#define PID_NETRESOURCE 1
+#define PID_DESCRIPTIONID 2
+#define PID_WHICHFOLDER 3
+#define PID_NETWORKLOCATION 4
+#define PID_COMPUTERNAME 5
+
+/* Note: PSGUID_STORAGE defined in ntquery.h */
+DEFINE_GUID(FMTID_Storage, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac);
+/* PID_* for FMTID_Storage defined in ntquery.h*/
+
+#define PSGUID_DISPLACED {0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71}
+DEFINE_GUID(FMTID_Displaced, 0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71);
+#define PID_DISPLACED_FROM 2
+#define PID_DISPLACED_DATE 3
+
+DEFINE_GUID(CLSID_CAnchorBrowsePropertyPage, 0x3050F3BB, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
+DEFINE_GUID(CLSID_CDocBrowsePropertyPage, 0x3050F3B4, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
+DEFINE_GUID(CLSID_CImageBrowsePropertyPage, 0x3050F3B3, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
+
+DEFINE_GUID(VID_LargeIcons, 0x0057d0e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_SmallIcons, 0x089000c0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_List, 0x0e1fa5e0, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_Details, 0x137e7700, 0x3573, 0x11cf, 0xae, 0x69, 0x08, 0x00, 0x2b, 0x2e, 0x12, 0x62);
+DEFINE_GUID(VID_Thumbnails, 0x8bebb290, 0x52d0, 0x11d0, 0xb7, 0xf4, 0x00, 0xc0, 0x4f, 0xd7, 0x06, 0xec);
+DEFINE_GUID(VID_Tile, 0x65f125e5, 0x7be1, 0x4810, 0xba, 0x9d, 0xd2, 0x71, 0xc8, 0x43, 0x2c, 0xe3);
+DEFINE_GUID(VID_ThumbStrip, 0x8eefa624, 0xd1e9, 0x445b, 0x94, 0xb7, 0x74, 0xfb, 0xce, 0x2e, 0xa1, 0x1a);
+
+#include <knownfolders.h>
+
+/* FOLDERTYPEID */
+DEFINE_GUID(FOLDERTYPEID_Communications, 0x91475fe5, 0x586b, 0x4eba, 0x8d, 0x75, 0xd1, 0x74, 0x34, 0xb8, 0xcd, 0xf6);
+DEFINE_GUID(FOLDERTYPEID_CompressedFolder, 0x80213e82, 0xbcfd, 0x4c4f, 0x88, 0x17, 0xbb, 0x27, 0x60, 0x12, 0x67, 0xa9);
+DEFINE_GUID(FOLDERTYPEID_Contacts, 0xde2b70ec, 0x9bf7, 0x4a93, 0xbd, 0x3d, 0x24, 0x3f, 0x78, 0x81, 0xd4, 0x92);
+DEFINE_GUID(FOLDERTYPEID_ControlPanelCategory, 0xde4f0660, 0xfa10, 0x4b8f, 0xa4, 0x94, 0x06, 0x8b, 0x20, 0xb2, 0x23, 0x07);
+DEFINE_GUID(FOLDERTYPEID_ControlPanelClassic, 0x0c3794f3, 0xb545, 0x43aa, 0xa3, 0x29, 0xc3, 0x74, 0x30, 0xc5, 0x8d, 0x2a);
+DEFINE_GUID(FOLDERTYPEID_Documents, 0x7d49d726, 0x3c21, 0x4f05, 0x99, 0xaa, 0xfd, 0xc2, 0xc9, 0x47, 0x46, 0x56);
+DEFINE_GUID(FOLDERTYPEID_Games, 0xb689b0d0, 0x76d3, 0x4cbb, 0x87, 0xf7, 0x58, 0x5d, 0x0e, 0x0c, 0xe0, 0x70);
+DEFINE_GUID(FOLDERTYPEID_Generic, 0x5c4f28b5, 0xf869, 0x4e84, 0x8e, 0x60, 0xf1, 0x1d, 0xb9, 0x7c, 0x5c, 0xc7);
+DEFINE_GUID(FOLDERTYPEID_GenericLibrary, 0x5f4eab9a, 0x6833, 0x4f61, 0x89, 0x9d, 0x31, 0xcf, 0x46, 0x97, 0x9d, 0x49);
+DEFINE_GUID(FOLDERTYPEID_GenericSearchResults, 0x7fde1a1e, 0x8b31, 0x49a5, 0x93, 0xb8, 0x6b, 0xe1, 0x4c, 0xfa, 0x49, 0x43);
+DEFINE_GUID(FOLDERTYPEID_Invalid, 0x57807898, 0x8c4f, 0x4462, 0xbb, 0x63, 0x71, 0x04, 0x23, 0x80, 0xb1, 0x09);
+DEFINE_GUID(FOLDERTYPEID_Music, 0x94d6ddcc, 0x4a68, 0x4175, 0xa3, 0x74, 0xbd, 0x58, 0x4a, 0x51, 0x0b, 0x78);
+DEFINE_GUID(FOLDERTYPEID_NetworkExplorer, 0x25cc242b, 0x9a7c, 0x4f51, 0x80, 0xe0, 0x7a, 0x29, 0x28, 0xfe, 0xbe, 0x42);
+DEFINE_GUID(FOLDERTYPEID_OpenSearch, 0x8faf9629, 0x1980, 0x46ff, 0x80, 0x23, 0x9d, 0xce, 0xab, 0x9c, 0x3e, 0xe3);
+DEFINE_GUID(FOLDERTYPEID_OtherUsers, 0xb337fd00, 0x9dd5, 0x4635, 0xa6, 0xd4, 0xda, 0x33, 0xfd, 0x10, 0x2b, 0x7a);
+DEFINE_GUID(FOLDERTYPEID_Pictures, 0xb3690e58, 0xe961, 0x423b, 0xb6, 0x87, 0x38, 0x6e, 0xbf, 0xd8, 0x32, 0x39);
+DEFINE_GUID(FOLDERTYPEID_Printers, 0x2c7bbec6, 0xc844, 0x4a0a, 0x91, 0xfa, 0xce, 0xf6, 0xf5, 0x9c, 0xfd, 0xa1);
+DEFINE_GUID(FOLDERTYPEID_PublishedItems, 0x7f2f5b96, 0xff74, 0x41da, 0xaf, 0xd8, 0x1c, 0x78, 0xa5, 0xf3, 0xae, 0xa2);
+DEFINE_GUID(FOLDERTYPEID_RecordedTV, 0x5557a28f, 0x5da6, 0x4f83, 0x88, 0x09, 0xc2, 0xc9, 0x8a, 0x11, 0xa6, 0xfa);
+DEFINE_GUID(FOLDERTYPEID_RecycleBin, 0xd6d9e004, 0xcd87, 0x442b, 0x9d, 0x57, 0x5e, 0x0a, 0xeb, 0x4f, 0x6f, 0x72);
+DEFINE_GUID(FOLDERTYPEID_SavedGames, 0xd0363307, 0x28cb, 0x4106, 0x9f, 0x23, 0x29, 0x56, 0xe3, 0xe5, 0xe0, 0xe7);
+DEFINE_GUID(FOLDERTYPEID_SearchConnector, 0x982725ee, 0x6f47, 0x479e, 0xb4, 0x47, 0x81, 0x2b, 0xfa, 0x7d, 0x2e, 0x8f);
+DEFINE_GUID(FOLDERTYPEID_Searches, 0x0b0ba2e3, 0x405f, 0x415e, 0xa6, 0xee, 0xca, 0xd6, 0x25, 0x20, 0x78, 0x53);
+DEFINE_GUID(FOLDERTYPEID_SearchHome, 0x834d8a44, 0x0974, 0x4ed6, 0x86, 0x6e, 0xf2, 0x03, 0xd8, 0x0b, 0x38, 0x10);
+DEFINE_GUID(FOLDERTYPEID_SoftwareExplorer, 0xd674391b, 0x52d9, 0x4e07, 0x83, 0x4e, 0x67, 0xc9, 0x86, 0x10, 0xf3, 0x9d);
+DEFINE_GUID(FOLDERTYPEID_StartMenu, 0xef87b4cb, 0xf2ce, 0x4785, 0x86, 0x58, 0x4c, 0xa6, 0xc6, 0x3e, 0x38, 0xc6);
+DEFINE_GUID(FOLDERTYPEID_UserFiles, 0xcd0fc69b, 0x71e2, 0x46e5, 0x96, 0x90, 0x5b, 0xcd, 0x9f, 0x57, 0xaa, 0xb3);
+DEFINE_GUID(FOLDERTYPEID_UsersLibraries, 0xc4d98f09, 0x6124, 0x4fe0, 0x99, 0x42, 0x82, 0x64, 0x16, 0x08, 0x2d, 0xa9);
+DEFINE_GUID(FOLDERTYPEID_Videos, 0x5fa96407, 0x7e77, 0x483c, 0xac, 0x93, 0x69, 0x1d, 0x05, 0x85, 0x0d, 0xe8);
+
+/* IExplorerBrowser */
+DEFINE_GUID(EP_NavPane, 0xCB316B22, 0x25F7, 0x42B8, 0x8A, 0x09, 0x54, 0x0D, 0x23, 0xA4, 0x3C, 0x2F);
+DEFINE_GUID(EP_Commands,0xD9745868, 0xCA5F, 0x4A76, 0x91, 0xCD, 0xF5, 0xA1, 0x29, 0xFB, 0xB0, 0x76);
+DEFINE_GUID(EP_Commands_Organize, 0x72E81700, 0xE3EC, 0x4660, 0xBF, 0x24, 0x3C, 0x3B, 0x7B, 0x64, 0x88, 0x06);
+DEFINE_GUID(EP_Commands_View, 0x21F7C32D, 0xEEAA, 0x439B, 0xBB, 0x51, 0x37, 0xB9, 0x6F, 0xD6, 0xA9, 0x43);
+DEFINE_GUID(EP_DetailsPane, 0x43ABF98B, 0x89B8, 0x472D, 0xB9, 0xCE, 0xE6, 0x9B, 0x82, 0x29, 0xF0, 0x19);
+DEFINE_GUID(EP_PreviewPane, 0x893C63D1, 0x45C8, 0x4D17, 0xBE, 0x19, 0x22, 0x3B, 0xE7, 0x1B, 0xE3, 0x65);
+DEFINE_GUID(EP_QueryPane, 0x65BCDE4F, 0x4F07, 0x4F27, 0x83, 0xA7, 0x1A, 0xFC, 0xA4, 0xDF, 0x7D, 0xDD);
+DEFINE_GUID(EP_AdvQueryPane, 0xB4E9DB8B, 0x34BA, 0x4C39, 0xB5, 0xCC, 0x16, 0xA1, 0xBD, 0x2C, 0x41, 0x1C);
+
+/* IShellItem/IShellItemArray BindToHandler */
+DEFINE_GUID(BHID_SFObject, 0x3981E224, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_SFUIObject, 0x3981E225, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_SFViewObject,0x3981E226, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_Storage, 0x3981E227, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_Stream, 0x1CEBB3AB, 0x7C10, 0x499A, 0xA4,0x17, 0x92,0xCA,0x16,0xC4,0xCB,0x83);
+DEFINE_GUID(BHID_StorageEnum, 0x4621A4E3, 0xF0D6, 0x4773, 0x8A,0x9C, 0x46,0xE7,0x7B,0x17,0x48,0x40);
+DEFINE_GUID(BHID_Transfer, 0xD5E346A1, 0xF753, 0x4932, 0xB4,0x03, 0x45,0x74,0x80,0x0E,0x24,0x98);
+DEFINE_GUID(BHID_EnumItems, 0x94F60519, 0x2850, 0x4924, 0xAA,0x5A, 0xD1,0x5E,0x84,0x86,0x80,0x39);
+DEFINE_GUID(BHID_DataObject, 0xB8C0BD9F, 0xED24, 0x455C, 0x83,0xE6, 0xD5,0x39,0x0C,0x4F,0xE8,0xC4);
+DEFINE_GUID(BHID_Filter, 0x38D08778, 0xF557, 0x4690, 0x9E,0xBF, 0xBA,0x54,0x70,0x6A,0xD8,0xF7);
+DEFINE_GUID(BHID_LinkTargetItem, 0x3981E228, 0xF559, 0x11D3, 0x8E,0x3A, 0x00,0xC0,0x4F,0x68,0x37,0xD5);
+DEFINE_GUID(BHID_PropertyStore, 0x0384E1A4, 0x1523, 0x439C, 0xA4,0xC8, 0xAB,0x91,0x10,0x52,0xF5,0x86);
+DEFINE_GUID(BHID_ThumbnailHandler, 0x7B2E650A, 0x8E20, 0x4F4A, 0xB0,0x9E, 0x65,0x97,0xAF,0xC7,0x2F,0xB0);
+DEFINE_GUID(BHID_AssociationArray, 0xBEA9EF17, 0x82F1, 0x4F60, 0x92,0x84, 0x4F,0x8D,0xB7,0x5C,0x3B,0xE9);
+DEFINE_GUID(BHID_EnumAssocHandlers,0xB8AB0B9C, 0xC2EC, 0x4F7A, 0x91,0x8D, 0x31,0x49,0x00,0xE6,0x28,0x0A);
+
+#endif /* __WINE_SHLGUID_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h
new file mode 100644
index 00000000..efcde124
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlobj.h
@@ -0,0 +1,1775 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHLOBJ_H
+#define __WINE_SHLOBJ_H
+
+#include <ole2.h>
+#include <commctrl.h>
+#include <prsht.h>
+#include <shlguid.h>
+#include <shtypes.h>
+#include <shobjidl.h>
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetObject
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/* Except for specific structs, this header is byte packed */
+#include <pshpack1.h>
+
+#ifndef HPSXA_DEFINED
+#define HPSXA_DEFINED
+DECLARE_HANDLE(HPSXA);
+#endif
+
+UINT WINAPI SHAddFromPropSheetExtArray(HPSXA,LPFNADDPROPSHEETPAGE,LPARAM);
+LPVOID WINAPI SHAlloc(ULONG) __WINE_ALLOC_SIZE(1);
+HRESULT WINAPI SHCoCreateInstance(LPCWSTR,const CLSID*,IUnknown*,REFIID,LPVOID*);
+HPSXA WINAPI SHCreatePropSheetExtArray(HKEY,LPCWSTR,UINT);
+HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
+HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST,IShellFolder*,LPCITEMIDLIST,IShellItem**);
+DWORD WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*);
+DWORD WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*);
+#define SHCLSIDFromString WINELIB_NAME_AW(SHCLSIDFromString)
+HRESULT WINAPI SHCreateStdEnumFmtEtc(DWORD,const FORMATETC *,IEnumFORMATETC**);
+void WINAPI SHDestroyPropSheetExtArray(HPSXA);
+BOOL WINAPI SHFindFiles(LPCITEMIDLIST,LPCITEMIDLIST);
+DWORD WINAPI SHFormatDrive(HWND,UINT,UINT,UINT);
+void WINAPI SHFree(LPVOID);
+BOOL WINAPI GetFileNameFromBrowse(HWND,LPWSTR,DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+HRESULT WINAPI SHGetInstanceExplorer(IUnknown**);
+HRESULT WINAPI SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR);
+HRESULT WINAPI SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR);
+#define SHGetFolderPathAndSubDir WINELIB_NAME_AW(SHGetFolderPathAndSubDir);
+HRESULT WINAPI SHGetKnownFolderPath(REFKNOWNFOLDERID,DWORD,HANDLE,PWSTR*);
+BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR);
+BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR);
+#define SHGetPathFromIDList WINELIB_NAME_AW(SHGetPathFromIDList)
+INT WINAPI SHHandleUpdateImage(LPCITEMIDLIST);
+HRESULT WINAPI SHILCreateFromPath(LPCWSTR,LPITEMIDLIST*,DWORD*);
+HRESULT WINAPI SHLoadOLE(LPARAM);
+HRESULT WINAPI SHParseDisplayName(LPCWSTR,IBindCtx*,LPITEMIDLIST*,SFGAOF,SFGAOF*);
+HRESULT WINAPI SHPathPrepareForWriteA(HWND,IUnknown*,LPCSTR,DWORD);
+HRESULT WINAPI SHPathPrepareForWriteW(HWND,IUnknown*,LPCWSTR,DWORD);
+#define SHPathPrepareForWrite WINELIB_NAME_AW(SHPathPrepareForWrite);
+UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA,UINT,LPFNADDPROPSHEETPAGE,LPARAM);
+LPITEMIDLIST WINAPI SHSimpleIDListFromPath(LPCWSTR);
+BOOL WINAPI SHRunControlPanel(LPCWSTR, HWND);
+int WINAPI SHMapPIDLToSystemImageListIndex(IShellFolder*,LPCITEMIDLIST,int*);
+HRESULT WINAPI SHStartNetConnectionDialog(HWND,LPCSTR,DWORD);
+VOID WINAPI SHUpdateImageA(LPCSTR,INT,UINT,INT);
+VOID WINAPI SHUpdateImageW(LPCWSTR,INT,UINT,INT);
+#define SHUpdateImage WINELIB_NAME_AW(SHUpdateImage)
+int WINAPI RestartDialog(HWND,LPCWSTR,DWORD);
+int WINAPI RestartDialogEx(HWND,LPCWSTR,DWORD,DWORD);
+int WINAPI DriveType(int);
+int WINAPI RealDriveType(int, BOOL);
+int WINAPI IsNetDrive(int);
+BOOL WINAPI IsUserAnAdmin(void);
+UINT WINAPI Shell_MergeMenus(HMENU,HMENU,UINT,UINT,UINT,ULONG);
+BOOL WINAPI Shell_GetImageLists(HIMAGELIST*,HIMAGELIST*);
+BOOL WINAPI SignalFileOpen(PCIDLIST_ABSOLUTE);
+BOOL WINAPI ImportPrivacySettings(LPCWSTR, BOOL*, BOOL*);
+
+#define KF_FLAG_SIMPLE_IDLIST 0x00000100
+#define KF_FLAG_NOT_PARENT_RELATIVE 0x00000200
+#define KF_FLAG_DEFAULT_PATH 0x00000400
+#define KF_FLAG_INIT 0x00000800
+#define KF_FLAG_NO_ALIAS 0x00001000
+#define KF_FLAG_DONT_UNEXPAND 0x00002000
+#define KF_FLAG_DONT_VERIFY 0x00004000
+#define KF_FLAG_CREATE 0x00008000
+
+#define SHFMT_ERROR __MSABI_LONG(0xFFFFFFFF) /* Error on last format, drive may be formattable */
+#define SHFMT_CANCEL __MSABI_LONG(0xFFFFFFFE) /* Last format was cancelled */
+#define SHFMT_NOFORMAT __MSABI_LONG(0xFFFFFFFD) /* Drive is not formattable */
+
+/* SHFormatDrive flags */
+#define SHFMT_ID_DEFAULT 0xFFFF
+#define SHFMT_OPT_FULL 1
+#define SHFMT_OPT_SYSONLY 2
+
+/* SHPathPrepareForWrite flags */
+#define SHPPFW_NONE 0x00000000
+#define SHPPFW_DIRCREATE 0x00000001
+#define SHPPFW_DEFAULT SHPPFW_DIRCREATE
+#define SHPPFW_ASKDIRCREATE 0x00000002
+#define SHPPFW_IGNOREFILENAME 0x00000004
+#define SHPPFW_NOWRITECHECK 0x00000008
+#define SHPPFW_MEDIACHECKONLY 0x00000010
+
+/* SHObjectProperties flags */
+#define SHOP_PRINTERNAME 0x01
+#define SHOP_FILEPATH 0x02
+#define SHOP_VOLUMEGUID 0x04
+
+BOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR);
+
+#define PCS_FATAL 0x80000000
+#define PCS_REPLACEDCHAR 0x00000001
+#define PCS_REMOVEDCHAR 0x00000002
+#define PCS_TRUNCATED 0x00000004
+#define PCS_PATHTOOLONG 0x00000008
+
+int WINAPI PathCleanupSpec(LPCWSTR,LPWSTR);
+
+/* Shell_MergeMenus flags */
+#define MM_ADDSEPARATOR 0x00000001
+#define MM_SUBMENUSHAVEIDS 0x00000002
+#define MM_DONTREMOVESEPS 0x00000004
+
+/*****************************************************************************
+ * IContextMenu interface
+ */
+
+
+/* DATAOBJECT_InitShellIDList*/
+#define CFSTR_SHELLIDLISTA "Shell IDList Array" /* CF_IDLIST */
+#define CFSTR_SHELLIDLISTOFFSETA "Shell Object Offsets" /* CF_OBJECTPOSITIONS */
+#define CFSTR_NETRESOURCESA "Net Resource" /* CF_NETRESOURCE */
+/* DATAOBJECT_InitFileGroupDesc */
+#define CFSTR_FILEDESCRIPTORA "FileGroupDescriptor" /* CF_FILEGROUPDESCRIPTORA */
+/* DATAOBJECT_InitFileContents*/
+#define CFSTR_FILECONTENTSA "FileContents" /* CF_FILECONTENTS */
+#define CFSTR_FILENAMEA "FileName" /* CF_FILENAMEA */
+#define CFSTR_FILENAMEMAPA "FileNameMap" /* CF_FILENAMEMAPA */
+#define CFSTR_PRINTERGROUPA "PrinterFriendlyName" /* CF_PRINTERS */
+#define CFSTR_SHELLURLA "UniformResourceLocator"
+#define CFSTR_INETURLA CFSTR_SHELLURLA
+#define CFSTR_PREFERREDDROPEFFECTA "Preferred DropEffect"
+#define CFSTR_PERFORMEDDROPEFFECTA "Performed DropEffect"
+#define CFSTR_PASTESUCCEEDEDA "Paste Succeeded"
+#define CFSTR_INDRAGLOOPA "InShellDragLoop"
+#define CFSTR_DRAGCONTEXTA "DragContext"
+#define CFSTR_MOUNTEDVOLUMEA "MountedVolume"
+#define CFSTR_PERSISTEDDATAOBJECTA "PersistedDataObject"
+#define CFSTR_TARGETCLSIDA "TargetCLSID"
+#define CFSTR_AUTOPLAY_SHELLIDLISTSA "Autoplay Enumerated IDList Array"
+#define CFSTR_LOGICALPERFORMEDDROPEFFECTA "Logical Performed DropEffect"
+
+#if defined(__GNUC__)
+# define CFSTR_SHELLIDLISTW \
+ (const WCHAR []){ 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }
+# define CFSTR_SHELLIDLISTOFFSETW \
+ (const WCHAR []){ 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 }
+# define CFSTR_NETRESOURCESW \
+ (const WCHAR []){ 'N','e','t',' ','R','e','s','o','u','r','c','e',0 }
+# define CFSTR_FILEDESCRIPTORW \
+ (const WCHAR []){ 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 }
+# define CFSTR_FILECONTENTSW \
+ (const WCHAR []){ 'F','i','l','e','C','o','n','t','e','n','t','s',0 }
+# define CFSTR_FILENAMEW \
+ (const WCHAR []){ 'F','i','l','e','N','a','m','e','W',0 }
+# define CFSTR_FILENAMEMAPW \
+ (const WCHAR []){ 'F','i','l','e','N','a','m','e','M','a','p','W',0 }
+# define CFSTR_PRINTERGROUPW \
+ (const WCHAR []){ 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 }
+# define CFSTR_SHELLURLW \
+ (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 }
+# define CFSTR_INETURLW \
+ (const WCHAR []){ 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 }
+# define CFSTR_PREFERREDDROPEFFECTW \
+ (const WCHAR []){ 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }
+# define CFSTR_PERFORMEDDROPEFFECTW \
+ (const WCHAR []){ 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 }
+# define CFSTR_PASTESUCCEEDEDW \
+ (const WCHAR []){ 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 }
+# define CFSTR_INDRAGLOOPW \
+ (const WCHAR []){ 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 }
+# define CFSTR_DRAGCONTEXTW \
+ (const WCHAR []){ 'D','r','a','g','C','o','n','t','e','x','t',0 }
+# define CFSTR_MOUNTEDVOLUMEW \
+ (const WCHAR []){ 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 }
+# define CFSTR_PERSISTEDDATAOBJECTW \
+ (const WCHAR []){ 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 }
+# define CFSTR_TARGETCLSIDW \
+ (const WCHAR []){ 'T','a','r','g','e','t','C','L','S','I','D',0 }
+# define CFSTR_AUTOPLAY_SHELLIDLISTSW \
+ (const WCHAR []){ 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',\
+ ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 }
+# define CFSTR_LOGICALPERFORMEDDROPEFFECTW \
+ (const WCHAR []){ 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',\
+ ' ','D','r','o','p','E','f','f','e','c','t',0 }
+#elif defined(_MSC_VER)
+# define CFSTR_SHELLIDLISTW L"Shell IDList Array"
+# define CFSTR_SHELLIDLISTOFFSETW L"Shell Object Offsets"
+# define CFSTR_NETRESOURCESW L"Net Resource"
+# define CFSTR_FILEDESCRIPTORW L"FileGroupDescriptorW"
+# define CFSTR_FILECONTENTSW L"FileContents"
+# define CFSTR_FILENAMEW L"FileNameW"
+# define CFSTR_FILENAMEMAPW L"FileNameMapW"
+# define CFSTR_PRINTERGROUPW L"PrinterFriendlyName"
+# define CFSTR_SHELLURLW L"UniformResourceLocator"
+# define CFSTR_INETURLW L"UniformResourceLocatorW"
+# define CFSTR_PREFERREDDROPEFFECTW L"Preferred DropEffect"
+# define CFSTR_PERFORMEDDROPEFFECTW L"Performed DropEffect"
+# define CFSTR_PASTESUCCEEDEDW L"Paste Succeeded"
+# define CFSTR_INDRAGLOOPW L"InShellDragLoop"
+# define CFSTR_DRAGCONTEXTW L"DragContext"
+# define CFSTR_MOUNTEDVOLUMEW L"MountedVolume"
+# define CFSTR_PERSISTEDDATAOBJECTW L"PersistedDataObject"
+# define CFSTR_TARGETCLSIDW L"TargetCLSID"
+# define CFSTR_AUTOPLAY_SHELLIDLISTSW L"Autoplay Enumerated IDList Array"
+# define CFSTR_LOGICALPERFORMEDDROPEFFECTW L"Logical Performed DropEffect"
+#else
+static const WCHAR CFSTR_SHELLIDLISTW[] =
+ { 'S','h','e','l','l',' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };
+static const WCHAR CFSTR_SHELLIDLISTOFFSETW[] =
+ { 'S','h','e','l','l',' ','O','b','j','e','c','t',' ','O','f','f','s','e','t','s',0 };
+static const WCHAR CFSTR_NETRESOURCESW[] =
+ { 'N','e','t',' ','R','e','s','o','u','r','c','e',0 };
+static const WCHAR CFSTR_FILEDESCRIPTORW[] =
+ { 'F','i','l','e','G','r','o','u','p','D','e','s','c','r','i','p','t','o','r','W',0 };
+static const WCHAR CFSTR_FILECONTENTSW[] =
+ { 'F','i','l','e','C','o','n','t','e','n','t','s',0 };
+static const WCHAR CFSTR_FILENAMEW[] =
+ { 'F','i','l','e','N','a','m','e','W',0 };
+static const WCHAR CFSTR_FILENAMEMAPW[] =
+ { 'F','i','l','e','N','a','m','e','M','a','p','W',0 };
+static const WCHAR CFSTR_PRINTERGROUPW[] =
+ { 'P','r','i','n','t','e','r','F','r','i','e','n','d','l','y','N','a','m','e',0 };
+static const WCHAR CFSTR_SHELLURLW[] =
+ { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r',0 };
+static const WCHAR CFSTR_INETURLW[] =
+ { 'U','n','i','f','o','r','m','R','e','s','o','u','r','c','e','L','o','c','a','t','o','r','W',0 };
+static const WCHAR CFSTR_PREFERREDDROPEFFECTW[] =
+ { 'P','r','e','f','e','r','r','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };
+static const WCHAR CFSTR_PERFORMEDDROPEFFECTW[] =
+ { 'P','e','r','f','o','r','m','e','d',' ','D','r','o','p','E','f','f','e','c','t',0 };
+static const WCHAR CFSTR_PASTESUCCEEDEDW[] =
+ { 'P','a','s','t','e',' ','S','u','c','c','e','e','d','e','d',0 };
+static const WCHAR CFSTR_INDRAGLOOPW[] =
+ { 'I','n','S','h','e','l','l','D','r','a','g','L','o','o','p',0 };
+static const WCHAR CFSTR_DRAGCONTEXTW[] =
+ { 'D','r','a','g','C','o','n','t','e','x','t',0 };
+static const WCHAR CFSTR_MOUNTEDVOLUMEW[] =
+ { 'M','o','u','n','t','e','d','V','o','l','u','m','e',0 };
+static const WCHAR CFSTR_PERSISTEDDATAOBJECTW[] =
+ { 'P','e','r','s','i','s','t','e','d','D','a','t','a','O','b','j','e','c','t',0 };
+static const WCHAR CFSTR_TARGETCLSIDW[] =
+ { 'T','a','r','g','e','t','C','L','S','I','D',0 };
+static const WCHAR CFSTR_AUTOPLAY_SHELLIDLISTSW[] =
+ { 'A','u','t','o','p','l','a','y',' ','E','n','u','m','e','r','a','t','e','d',
+ ' ','I','D','L','i','s','t',' ','A','r','r','a','y',0 };
+static const WCHAR CFSTR_LOGICALPERFORMEDDROPEFFECTW[] =
+ { 'L','o','g','i','c','a','l',' ','P','e','r','f','o','r','m','e','d',
+ ' ','D','r','o','p','E','f','f','e','c','t',0 };
+#endif
+
+#define CFSTR_SHELLIDLIST WINELIB_NAME_AW(CFSTR_SHELLIDLIST)
+#define CFSTR_SHELLIDLISTOFFSET WINELIB_NAME_AW(CFSTR_SHELLIDLISTOFFSET)
+#define CFSTR_NETRESOURCES WINELIB_NAME_AW(CFSTR_NETRESOURCES)
+#define CFSTR_FILEDESCRIPTOR WINELIB_NAME_AW(CFSTR_FILEDESCRIPTOR)
+#define CFSTR_FILECONTENTS WINELIB_NAME_AW(CFSTR_FILECONTENTS)
+#define CFSTR_FILENAME WINELIB_NAME_AW(CFSTR_FILENAME)
+#define CFSTR_FILENAMEMAP WINELIB_NAME_AW(CFSTR_FILENAMEMAP)
+#define CFSTR_PRINTERGROUP WINELIB_NAME_AW(CFSTR_PRINTERGROUP)
+#define CFSTR_SHELLURL WINELIB_NAME_AW(CFSTR_SHELLURL)
+#define CFSTR_INETURL WINELIB_NAME_AW(CFSTR_INETURL)
+#define CFSTR_PREFERREDDROPEFFECT WINELIB_NAME_AW(CFSTR_PREFERREDDROPEFFECT)
+#define CFSTR_PERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_PERFORMEDDROPEFFECT)
+#define CFSTR_PASTESUCCEEDED WINELIB_NAME_AW(CFSTR_PASTESUCCEEDED)
+#define CFSTR_INDRAGLOOP WINELIB_NAME_AW(CFSTR_INDRAGLOOP)
+#define CFSTR_DRAGCONTEXT WINELIB_NAME_AW(CFSTR_DRAGCONTEXT)
+#define CFSTR_MOUNTEDVOLUME WINELIB_NAME_AW(CFSTR_MOUNTEDVOLUME)
+#define CFSTR_PERSISTEDDATAOBJECT WINELIB_NAME_AW(CFSTR_PERSISTEDDATAOBJECT)
+#define CFSTR_TARGETCLSID WINELIB_NAME_AW(CFSTR_TARGETCLSID)
+#define CFSTR_AUTOPLAY_SHELLIDLISTS WINELIB_NAME_AW(CFSTR_AUTOPLAY_SHELLIDLISTS)
+#define CFSTR_LOGICALPERFORMEDDROPEFFECT WINELIB_NAME_AW(CFSTR_LOGICALPERFORMEDDROPEFFECT)
+
+typedef struct
+{ UINT cidl;
+ UINT aoffset[1];
+} CIDA, *LPIDA;
+
+/************************************************************************
+* IShellView interface
+*/
+
+#define FCIDM_SHVIEWFIRST 0x0000
+/* undocumented */
+#define FCIDM_SHVIEW_ARRANGE 0x7001
+#define FCIDM_SHVIEW_DELETE 0x7011
+#define FCIDM_SHVIEW_PROPERTIES 0x7013
+#define FCIDM_SHVIEW_CUT 0x7018
+#define FCIDM_SHVIEW_COPY 0x7019
+#define FCIDM_SHVIEW_INSERT 0x701A
+#define FCIDM_SHVIEW_UNDO 0x701B
+#define FCIDM_SHVIEW_INSERTLINK 0x701C
+#define FCIDM_SHVIEW_SELECTALL 0x7021
+#define FCIDM_SHVIEW_INVERTSELECTION 0x7022
+
+#define FCIDM_SHVIEW_BIGICON 0x7029
+#define FCIDM_SHVIEW_SMALLICON 0x702A
+#define FCIDM_SHVIEW_LISTVIEW 0x702B
+#define FCIDM_SHVIEW_REPORTVIEW 0x702C
+/* 0x7030-0x703f are used by the shellbrowser */
+#define FCIDM_SHVIEW_AUTOARRANGE 0x7031
+#define FCIDM_SHVIEW_SNAPTOGRID 0x7032
+
+#define FCIDM_SHVIEW_HELP 0x7041
+#define FCIDM_SHVIEW_RENAME 0x7050
+#define FCIDM_SHVIEW_CREATELINK 0x7051
+#define FCIDM_SHVIEW_NEWLINK 0x7052
+#define FCIDM_SHVIEW_NEWFOLDER 0x7053
+
+#define FCIDM_SHVIEW_REFRESH 0x7100 /* FIXME */
+#define FCIDM_SHVIEW_EXPLORE 0x7101 /* FIXME */
+#define FCIDM_SHVIEW_OPEN 0x7102 /* FIXME */
+
+#define FCIDM_SHVIEWLAST 0x7fff
+#define FCIDM_BROWSERFIRST 0xA000
+/* undocumented toolbar items from stddlg's*/
+#define FCIDM_TB_UPFOLDER 0xA001
+#define FCIDM_TB_NEWFOLDER 0xA002
+#define FCIDM_TB_SMALLICON 0xA003
+#define FCIDM_TB_REPORTVIEW 0xA004
+#define FCIDM_TB_DESKTOP 0xA005 /* FIXME */
+
+#define FCIDM_BROWSERLAST 0xbf00
+#define FCIDM_GLOBALFIRST 0x8000
+#define FCIDM_GLOBALLAST 0x9fff
+
+/*
+* Global submenu IDs and separator IDs
+*/
+#define FCIDM_MENU_FILE (FCIDM_GLOBALFIRST+0x0000)
+#define FCIDM_MENU_EDIT (FCIDM_GLOBALFIRST+0x0040)
+#define FCIDM_MENU_VIEW (FCIDM_GLOBALFIRST+0x0080)
+#define FCIDM_MENU_VIEW_SEP_OPTIONS (FCIDM_GLOBALFIRST+0x0081)
+#define FCIDM_MENU_TOOLS (FCIDM_GLOBALFIRST+0x00c0)
+#define FCIDM_MENU_TOOLS_SEP_GOTO (FCIDM_GLOBALFIRST+0x00c1)
+#define FCIDM_MENU_HELP (FCIDM_GLOBALFIRST+0x0100)
+#define FCIDM_MENU_FIND (FCIDM_GLOBALFIRST+0x0140)
+#define FCIDM_MENU_EXPLORE (FCIDM_GLOBALFIRST+0x0150)
+#define FCIDM_MENU_FAVORITES (FCIDM_GLOBALFIRST+0x0170)
+
+/* control IDs known to the view */
+#define FCIDM_TOOLBAR (FCIDM_BROWSERFIRST + 0)
+#define FCIDM_STATUS (FCIDM_BROWSERFIRST + 1)
+
+#define INTERFACE IShellDetails
+DECLARE_INTERFACE_(IShellDetails, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IShellDetails methods ***/
+ STDMETHOD(GetDetailsOf)(THIS_ PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails) PURE;
+ STDMETHOD(ColumnClick)(THIS_ UINT iColumn) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellDetails_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellDetails_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IShellDetails_Release(p) (p)->lpVtbl->Release(p)
+/*** IShellDetails methods ***/
+#define IShellDetails_GetDetailsOf(p,a,b,c) (p)->lpVtbl->GetDetailsOf(p,a,b,c)
+#define IShellDetails_ColumnClick(p,a) (p)->lpVtbl->ColumnClick(p,a)
+#endif
+
+/* IQueryInfo interface */
+#define INTERFACE IQueryInfo
+DECLARE_INTERFACE_(IQueryInfo,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IQueryInfo methods ***/
+ STDMETHOD(GetInfoTip)(THIS_ DWORD dwFlags, WCHAR** lppTips) PURE;
+ STDMETHOD(GetInfoFlags)(THIS_ DWORD* lpFlags) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IQueryInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IQueryInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IQueryInfo_Release(p) (p)->lpVtbl->Release(p)
+/*** IQueryInfo methods ***/
+#define IQueryInfo_GetInfoTip(p,a,b) (p)->lpVtbl->GetInfoTip(p,a,b)
+#define IQueryInfo_GetInfoFlags(p,a) (p)->lpVtbl->GetInfoFlags(p,a)
+#endif
+
+/* IInputObject interface */
+#define INTERFACE IInputObject
+DECLARE_INTERFACE_(IInputObject,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IInputObject methods ***/
+ STDMETHOD(UIActivateIO)(THIS_ BOOL bActivating, LPMSG lpMsg) PURE;
+ STDMETHOD(HasFocusIO)(THIS) PURE;
+ STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IInputObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IInputObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IInputObject_Release(p) (p)->lpVtbl->Release(p)
+/*** IInputObject methods ***/
+#define IInputObject_UIActivateIO(p,a,b) (p)->lpVtbl->UIActivateIO(p,a,b)
+#define IInputObject_HasFocusIO(p) (p)->lpVtbl->HasFocusIO(p)
+#define IInputObject_TranslateAcceleratorIO(p,a) (p)->lpVtbl->TranslateAcceleratorIO(p,a)
+#endif
+
+/* IInputObjectSite interface */
+#define INTERFACE IInputObjectSite
+DECLARE_INTERFACE_(IInputObjectSite,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IInputObjectSite methods ***/
+ STDMETHOD(OnFocusChangeIS)(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IInputObjectSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IInputObjectSite_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IInputObjectSite_Release(p) (p)->lpVtbl->Release(p)
+/*** IInputObject methods ***/
+#define IInputObjectSite_OnFocusChangeIS(p,a,b) (p)->lpVtbl->OnFocusChangeIS(p,a,b)
+#endif
+
+/* IObjMgr interface */
+#define INTERFACE IObjMgr
+DECLARE_INTERFACE_(IObjMgr,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IObjMgr methods ***/
+ STDMETHOD(Append)(THIS_ LPUNKNOWN punk) PURE;
+ STDMETHOD(Remove)(THIS_ LPUNKNOWN punk) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IObjMgr_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IObjMgr_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IObjMgr_Release(p) (p)->lpVtbl->Release(p)
+/*** IObjMgr methods ***/
+#define IObjMgr_Append(p,a) (p)->lpVtbl->Append(p,a)
+#define IObjMgr_Remove(p,a) (p)->lpVtbl->Remove(p,a)
+#endif
+
+/* IACList interface */
+#define INTERFACE IACList
+DECLARE_INTERFACE_(IACList,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IACList methods ***/
+ STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IACList_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IACList_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IACList_Release(p) (p)->lpVtbl->Release(p)
+/*** IACList methods ***/
+#define IACList_Expand(p,a) (p)->lpVtbl->Expand(p,a)
+#endif
+
+/* IACList2 interface */
+#define INTERFACE IACList2
+DECLARE_INTERFACE_(IACList2,IACList)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IACList methods ***/
+ STDMETHOD(Expand)(THIS_ LPCOLESTR str) PURE;
+ /*** IACList2 methods ***/
+ STDMETHOD(SetOptions)(THIS_ DWORD dwFlag) PURE;
+ STDMETHOD(GetOptions)(THIS_ DWORD* pdwFlag) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IACList2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IACList2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IACList2_Release(p) (p)->lpVtbl->Release(p)
+/*** IACList2 methods ***/
+#define IACList2_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a)
+#define IACList2_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
+#endif
+
+/****************************************************************************
+ * IShellFolderViewCB interface
+ */
+
+#define INTERFACE IShellFolderViewCB
+DECLARE_INTERFACE_(IShellFolderViewCB,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IShellFolderViewCB methods ***/
+ STDMETHOD(MessageSFVCB)(THIS_ UINT uMsg, WPARAM wParam, LPARAM lParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellFolderViewCB_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellFolderViewCB_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IShellFolderViewCB_Release(p) (p)->lpVtbl->Release(p)
+/*** IShellFolderViewCB methods ***/
+#define IShellFolderViewCB_MessageSFVCB(p,a,b,c) (p)->lpVtbl->MessageSFVCB(p,a,b,c)
+#endif
+
+/****************************************************************************
+ * IShellFolderView interface
+ */
+
+#include <pshpack8.h>
+
+typedef struct _ITEMSPACING
+{
+ int cxSmall;
+ int cySmall;
+ int cxLarge;
+ int cyLarge;
+} ITEMSPACING;
+
+#include <poppack.h>
+
+#define INTERFACE IShellFolderView
+DEFINE_GUID(IID_IShellFolderView,0x37a378c0,0xf82d,0x11ce,0xae,0x65,0x08,0x00,0x2b,0x2e,0x12,0x62);
+DECLARE_INTERFACE_(IShellFolderView, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*** IShellFolderView methods ***/
+ STDMETHOD(Rearrange) (THIS_ LPARAM lParamSort) PURE;
+ STDMETHOD(GetArrangeParam) (THIS_ LPARAM *plParamSort) PURE;
+ STDMETHOD(ArrangeGrid) (THIS) PURE;
+ STDMETHOD(AutoArrange) (THIS) PURE;
+ STDMETHOD(GetAutoArrange) (THIS) PURE;
+ STDMETHOD(AddObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+ STDMETHOD(GetObject) (THIS_ PITEMID_CHILD *ppidl, UINT uItem) PURE;
+ STDMETHOD(RemoveObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+ STDMETHOD(GetObjectCount) (THIS_ UINT *puCount) PURE;
+ STDMETHOD(SetObjectCount) (THIS_ UINT uCount, UINT dwFlags) PURE;
+ STDMETHOD(UpdateObject) (THIS_ PITEMID_CHILD pidlOld, PITEMID_CHILD pidlNew, UINT *puItem) PURE;
+ STDMETHOD(RefreshObject) (THIS_ PITEMID_CHILD pidl, UINT *puItem) PURE;
+ STDMETHOD(SetRedraw) (THIS_ BOOL bRedraw) PURE;
+ STDMETHOD(GetSelectedCount) (THIS_ UINT *puSelected) PURE;
+ STDMETHOD(GetSelectedObjects) (THIS_ PCITEMID_CHILD **pppidl, UINT *puItems) PURE;
+ STDMETHOD(IsDropOnSource) (THIS_ IDropTarget *pDropTarget) PURE;
+ STDMETHOD(GetDragPoint) (THIS_ POINT *ppt) PURE;
+ STDMETHOD(GetDropPoint) (THIS_ POINT *ppt) PURE;
+ STDMETHOD(MoveIcons) (THIS_ IDataObject *pDataObject) PURE;
+ STDMETHOD(SetItemPos) (THIS_ PCUITEMID_CHILD pidl, POINT *ppt) PURE;
+ STDMETHOD(IsBkDropTarget) (THIS_ IDropTarget *pDropTarget) PURE;
+ STDMETHOD(SetClipboard) (THIS_ BOOL bMove) PURE;
+ STDMETHOD(SetPoints) (THIS_ IDataObject *pDataObject) PURE;
+ STDMETHOD(GetItemSpacing) (THIS_ ITEMSPACING *pSpacing) PURE;
+ STDMETHOD(SetCallback) (THIS_ IShellFolderViewCB* pNewCB, IShellFolderViewCB** ppOldCB) PURE;
+ STDMETHOD(Select) ( THIS_ UINT dwFlags ) PURE;
+ STDMETHOD(QuerySupport) (THIS_ UINT * pdwSupport ) PURE;
+ STDMETHOD(SetAutomationObject)(THIS_ IDispatch* pdisp) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IShellFolderView_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellFolderView_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IShellFolderView_Release(p) (p)->lpVtbl->Release(p)
+/*** IShellFolderView methods ***/
+#define IShellFolderView_Rearrange(p,a) (p)->lpVtbl->Rearrange(p,a)
+#define IShellFolderView_GetArrangeParam(p,a) (p)->lpVtbl->GetArrangeParam(p,a)
+#define IShellFolderView_ArrangeGrid(p) (p)->lpVtbl->ArrangeGrid(p)
+#define IShellFolderView_AutoArrange(p) (p)->lpVtbl->AutoArrange(p)
+#define IShellFolderView_GetAutoArrange(p) (p)->lpVtbl->GetAutoArrange(p)
+#define IShellFolderView_AddObject(p,a,b) (p)->lpVtbl->AddObject(p,a,b)
+#define IShellFolderView_GetObject(p,a,b) (p)->lpVtbl->GetObject(p,a,b)
+#define IShellFolderView_RemoveObject(p,a,b) (p)->lpVtbl->RemoveObject(p,a,b)
+#define IShellFolderView_GetObjectCount(p,a) (p)->lpVtbl->GetObjectCount(p,a)
+#define IShellFolderView_SetObjectCount(p,a,b) (p)->lpVtbl->SetObjectCount(p,a,b)
+#define IShellFolderView_UpdateObject(p,a,b,c) (p)->lpVtbl->UpdateObject(p,a,b,c)
+#define IShellFolderView_RefreshObject(p,a,b) (p)->lpVtbl->RefreshObject(p,a,b)
+#define IShellFolderView_SetRedraw(p,a) (p)->lpVtbl->SetRedraw(p,a)
+#define IShellFolderView_GetSelectedCount(p,a) (p)->lpVtbl->GetSelectedCount(p,a)
+#define IShellFolderView_GetSelectedObjects(p,a,b) (p)->lpVtbl->GetSelectedObjects(p,a,b)
+#define IShellFolderView_IsDropOnSource(p,a) (p)->lpVtbl->IsDropOnSource(p,a)
+#define IShellFolderView_GetDragPoint(p,a) (p)->lpVtbl->GetDragPoint(p,a)
+#define IShellFolderView_GetDropPoint(p,a) (p)->lpVtbl->GetDropPoint(p,a)
+#define IShellFolderView_MoveIcons(p,a) (p)->lpVtbl->MoveIcons(p,a)
+#define IShellFolderView_SetItemPos(p,a,b) (p)->lpVtbl->SetItemPos(p,a,b)
+#define IShellFolderView_DropTarget(p,a) (p)->lpVtbl->DropTarget(p,a)
+#define IShellFolderView_SetClipboard(p,a) (p)->lpVtbl->SetClipboard(p,a)
+#define IShellFolderView_SetPoints(p,a) (p)->lpVtbl->SetPoints(p,a)
+#define IShellFolderView_GetItemSpacing(p,a) (p)->lpVtbl->GetItemSpacing(p,a)
+#define IShellFolderView_SetCallback(p,a) (p)->lpVtbl->SetCallback(p,a)
+#define IShellFolderView_Select(p,a) (p)->lpVtbl->Select(p,a)
+#define IShellFolderView_QuerySupport(p,a) (p)->lpVtbl->QuerySupport(p,a)
+#define IShellFolderView_SetAutomationObject(p,a) (p)->lpVtbl->SetAutomationObject(p,a)
+#endif
+
+/* IProgressDialog interface */
+#define PROGDLG_NORMAL 0x00000000
+#define PROGDLG_MODAL 0x00000001
+#define PROGDLG_AUTOTIME 0x00000002
+#define PROGDLG_NOTIME 0x00000004
+#define PROGDLG_NOMINIMIZE 0x00000008
+#define PROGDLG_NOPROGRESSBAR 0x00000010
+#define PROGDLG_MARQUEEPROGRESS 0x00000020
+#define PROGDLG_NOCANCEL 0x00000040
+
+#define PDTIMER_RESET 0x00000001
+#define PDTIMER_PAUSE 0x00000002
+#define PDTIMER_RESUME 0x00000003
+
+#define INTERFACE IProgressDialog
+DECLARE_INTERFACE_(IProgressDialog,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+ /*** IProgressDialog methods ***/
+ STDMETHOD(StartProgressDialog)(THIS_ HWND hwndParent, IUnknown *punkEnableModeless, DWORD dwFlags, LPCVOID reserved) PURE;
+ STDMETHOD(StopProgressDialog)(THIS) PURE;
+ STDMETHOD(SetTitle)(THIS_ LPCWSTR pwzTitle) PURE;
+ STDMETHOD(SetAnimation)(THIS_ HINSTANCE hInstance, UINT uiResourceId) PURE;
+ STDMETHOD_(BOOL,HasUserCancelled)(THIS) PURE;
+ STDMETHOD(SetProgress)(THIS_ DWORD dwCompleted, DWORD dwTotal) PURE;
+ STDMETHOD(SetProgress64)(THIS_ ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
+ STDMETHOD(SetLine)(THIS_ DWORD dwLineNum, LPCWSTR pwzString, BOOL bPath, LPCVOID reserved) PURE;
+ STDMETHOD(SetCancelMsg)(THIS_ LPCWSTR pwzCancelMsg, LPCVOID reserved) PURE;
+ STDMETHOD(Timer)(THIS_ DWORD dwTimerAction, LPCVOID reserved) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IProgressDialog_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IProgressDialog_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IProgressDialog_Release(p) (p)->lpVtbl->Release(p)
+/*** IProgressDialog methods ***/
+#define IProgressDialog_StartProgressDialog(p,a,b,c,d) (p)->lpVtbl->StartProgressDialog(p,a,b,c,d)
+#define IProgressDialog_StopProgressDialog(p) (p)->lpVtbl->StopProgressDialog(p)
+#define IProgressDialog_SetTitle(p,a) (p)->lpVtbl->SetTitle(p,a)
+#define IProgressDialog_SetAnimation(p,a,b) (p)->lpVtbl->SetAnimation(p,a,b)
+#define IProgressDialog_HasUserCancelled(p) (p)->lpVtbl->HasUserCancelled(p)
+#define IProgressDialog_SetProgress(p,a,b) (p)->lpVtbl->SetProgress(p,a,b)
+#define IProgressDialog_SetProgress64(p,a,b) (p)->lpVtbl->SetProgress64(p,a,b)
+#define IProgressDialog_SetLine(p,a,b,c,d) (p)->lpVtbl->SetLine(p,a,b,c,d)
+#define IProgressDialog_SetCancelMsg(p,a,b) (p)->lpVtbl->SetCancelMsg(p,a,b)
+#define IProgressDialog_Timer(p,a,b) (p)->lpVtbl->Timer(p,a,b)
+#endif
+
+
+/****************************************************************************
+* SHAddToRecentDocs API
+*/
+#define SHARD_PIDL __MSABI_LONG(0x00000001)
+#define SHARD_PATHA __MSABI_LONG(0x00000002)
+#define SHARD_PATHW __MSABI_LONG(0x00000003)
+#define SHARD_PATH WINELIB_NAME_AW(SHARD_PATH)
+
+void WINAPI SHAddToRecentDocs(UINT,LPCVOID);
+
+/****************************************************************************
+ * SHBrowseForFolder API
+ */
+typedef INT (CALLBACK *BFFCALLBACK)(HWND,UINT,LPARAM,LPARAM);
+
+#include <pshpack8.h>
+
+typedef struct tagBROWSEINFOA {
+ HWND hwndOwner;
+ LPCITEMIDLIST pidlRoot;
+ LPSTR pszDisplayName;
+ LPCSTR lpszTitle;
+ UINT ulFlags;
+ BFFCALLBACK lpfn;
+ LPARAM lParam;
+ INT iImage;
+} BROWSEINFOA, *PBROWSEINFOA, *LPBROWSEINFOA;
+
+typedef struct tagBROWSEINFOW {
+ HWND hwndOwner;
+ LPCITEMIDLIST pidlRoot;
+ LPWSTR pszDisplayName;
+ LPCWSTR lpszTitle;
+ UINT ulFlags;
+ BFFCALLBACK lpfn;
+ LPARAM lParam;
+ INT iImage;
+} BROWSEINFOW, *PBROWSEINFOW, *LPBROWSEINFOW;
+
+#define BROWSEINFO WINELIB_NAME_AW(BROWSEINFO)
+#define PBROWSEINFO WINELIB_NAME_AW(PBROWSEINFO)
+#define LPBROWSEINFO WINELIB_NAME_AW(LPBROWSEINFO)
+
+#include <poppack.h>
+
+/* Browsing for directory. */
+#define BIF_RETURNONLYFSDIRS 0x0001
+#define BIF_DONTGOBELOWDOMAIN 0x0002
+#define BIF_STATUSTEXT 0x0004
+#define BIF_RETURNFSANCESTORS 0x0008
+#define BIF_EDITBOX 0x0010
+#define BIF_VALIDATE 0x0020
+#define BIF_NEWDIALOGSTYLE 0x0040
+#define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)
+#define BIF_BROWSEINCLUDEURLS 0x0080
+#define BIF_UAHINT 0x0100
+#define BIF_NONEWFOLDERBUTTON 0x0200
+#define BIF_NOTRANSLATETARGETS 0x0400
+
+#define BIF_BROWSEFORCOMPUTER 0x1000
+#define BIF_BROWSEFORPRINTER 0x2000
+#define BIF_BROWSEINCLUDEFILES 0x4000
+
+/* message from browser */
+#define BFFM_INITIALIZED 1
+#define BFFM_SELCHANGED 2
+#define BFFM_VALIDATEFAILEDA 3
+#define BFFM_VALIDATEFAILEDW 4
+#define BFFM_IUNKNOWN 5
+
+/* messages to browser */
+#define BFFM_SETSTATUSTEXTA (WM_USER+100)
+#define BFFM_ENABLEOK (WM_USER+101)
+#define BFFM_SETSELECTIONA (WM_USER+102)
+#define BFFM_SETSELECTIONW (WM_USER+103)
+#define BFFM_SETSTATUSTEXTW (WM_USER+104)
+#define BFFM_SETOKTEXT (WM_USER+105)
+#define BFFM_SETEXPANDED (WM_USER+106)
+
+LPITEMIDLIST WINAPI SHBrowseForFolderA(LPBROWSEINFOA lpbi);
+LPITEMIDLIST WINAPI SHBrowseForFolderW(LPBROWSEINFOW lpbi);
+#define SHBrowseForFolder WINELIB_NAME_AW(SHBrowseForFolder)
+#define BFFM_SETSTATUSTEXT WINELIB_NAME_AW(BFFM_SETSTATUSTEXT)
+#define BFFM_SETSELECTION WINELIB_NAME_AW(BFFM_SETSELECTION)
+#define BFFM_VALIDATEFAILED WINELIB_NAME_AW(BFFM_VALIDATEFAILED)
+
+/**********************************************************************
+ * SHCreateShellFolderViewEx API
+ */
+
+typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)(
+ IShellView* dwUser,
+ IShellFolder* pshf,
+ HWND hWnd,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+#include <pshpack8.h>
+
+typedef struct _CSFV
+{
+ UINT cbSize;
+ IShellFolder* pshf;
+ IShellView* psvOuter;
+ LPCITEMIDLIST pidl;
+ LONG lEvents;
+ LPFNVIEWCALLBACK pfnCallback;
+ FOLDERVIEWMODE fvm;
+} CSFV, *LPCSFV;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv);
+
+/* SHCreateShellFolderViewEx callback messages */
+#define SFVM_MERGEMENU 1
+#define SFVM_INVOKECOMMAND 2
+#define SFVM_GETHELPTEXT 3
+#define SFVM_GETTOOLTIPTEXT 4
+#define SFVM_GETBUTTONINFO 5
+#define SFVM_GETBUTTONS 6
+#define SFVM_INITMENUPOPUP 7
+#define SFVM_SELECTIONCHANGED 8 /* undocumented */
+#define SFVM_DRAWMENUITEM 9 /* undocumented */
+#define SFVM_MEASUREMENUITEM 10 /* undocumented */
+#define SFVM_EXITMENULOOP 11 /* undocumented */
+#define SFVM_VIEWRELEASE 12 /* undocumented */
+#define SFVM_GETNAMELENGTH 13 /* undocumented */
+#define SFVM_FSNOTIFY 14
+#define SFVM_WINDOWCREATED 15
+#define SFVM_WINDOWCLOSING 16 /* undocumented */
+#define SFVM_LISTREFRESHED 17 /* undocumented */
+#define SFVM_WINDOWFOCUSED 18 /* undocumented */
+#define SFVM_REGISTERCOPYHOOK 20 /* undocumented */
+#define SFVM_COPYHOOKCALLBACK 21 /* undocumented */
+#define SFVM_GETDETAILSOF 23
+#define SFVM_COLUMNCLICK 24
+#define SFVM_QUERYFSNOTIFY 25
+#define SFVM_DEFITEMCOUNT 26
+#define SFVM_DEFVIEWMODE 27
+#define SFVM_UNMERGEFROMMENU 28
+#define SFVM_ADDINGOBJECT 29 /* undocumented */
+#define SFVM_REMOVINGOBJECT 30 /* undocumented */
+#define SFVM_UPDATESTATUSBAR 31
+#define SFVM_BACKGROUNDENUM 32
+#define SFVM_GETCOMMANDDIR 33 /* undocumented */
+#define SFVM_GETCOLUMNSTREAM 34 /* undocumented */
+#define SFVM_CANSELECTALL 35 /* undocumented */
+#define SFVM_DIDDRAGDROP 36
+#define SFVM_ISSTRICTREFRESH 37 /* undocumented */
+#define SFVM_ISCHILDOBJECT 38 /* undocumented */
+#define SFVM_SETISFV 39
+#define SFVM_GETEXTVIEWS 40 /* undocumented */
+#define SFVM_THISIDLIST 41
+#define SFVM_ADDPROPERTYPAGES 47
+#define SFVM_BACKGROUNDENUMDONE 48
+#define SFVM_GETNOTIFY 49
+#define SFVM_GETSORTDEFAULTS 53
+#define SFVM_SIZE 57
+#define SFVM_GETZONE 58
+#define SFVM_GETPANE 59
+#define SFVM_GETHELPTOPIC 63
+#define SFVM_GETANIMATION 68
+#define SFVM_GET_CUSTOMVIEWINFO 77 /* undocumented */
+#define SFVM_ENUMERATEDITEMS 79 /* undocumented */
+#define SFVM_GET_VIEW_DATA 80 /* undocumented */
+#define SFVM_GET_WEBVIEW_LAYOUT 82 /* undocumented */
+#define SFVM_GET_WEBVIEW_CONTENT 83 /* undocumented */
+#define SFVM_GET_WEBVIEW_TASKS 84 /* undocumented */
+#define SFVM_GET_WEBVIEW_THEME 86 /* undocumented */
+#define SFVM_GETDEFERREDVIEWSETTINGS 92 /* undocumented */
+
+#include <pshpack8.h>
+
+typedef struct _SFV_CREATE
+{
+ UINT cbSize;
+ IShellFolder *pshf;
+ IShellView *psvOuter;
+ IShellFolderViewCB *psfvcb;
+} SFV_CREATE;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pscfv, IShellView **ppsv);
+
+/* Types and definitions for the SFM_* parameters */
+#include <pshpack8.h>
+
+#define QCMINFO_PLACE_BEFORE 0
+#define QCMINFO_PLACE_AFTER 1
+typedef struct _QCMINFO_IDMAP_PLACEMENT
+{
+ UINT id;
+ UINT fFlags;
+} QCMINFO_IDMAP_PLACEMENT;
+
+typedef struct _QCMINFO_IDMAP
+{
+ UINT nMaxIds;
+ QCMINFO_IDMAP_PLACEMENT pIdList[1];
+} QCMINFO_IDMAP;
+
+typedef struct _QCMINFO
+{
+ HMENU hmenu;
+ UINT indexMenu;
+ UINT idCmdFirst;
+ UINT idCmdLast;
+ QCMINFO_IDMAP const* pIdMap;
+} QCMINFO, *LPQCMINFO;
+
+#define TBIF_DEFAULT 0x00000000
+#define TBIF_APPEND 0x00000000
+#define TBIF_PREPEND 0x00000001
+#define TBIF_REPLACE 0x00000002
+#define TBIF_INTERNETBAR 0x00010000
+#define TBIF_STANDARDTOOLBAR 0x00020000
+#define TBIF_NOTOOLBAR 0x00030000
+
+typedef struct _TBINFO
+{
+ UINT cbuttons;
+ UINT uFlags;
+} TBINFO, *LPTBINFO;
+
+#include <poppack.h>
+
+/****************************************************************************
+* SHShellFolderView_Message API
+*/
+
+LRESULT WINAPI SHShellFolderView_Message(
+ HWND hwndCabinet,
+ UINT uMessage,
+ LPARAM lParam);
+
+/* SHShellFolderView_Message messages */
+#define SFVM_REARRANGE 0x0001
+#define SFVM_GETARRANGECOLUMN 0x0002 /* undocumented */
+#define SFVM_ADDOBJECT 0x0003
+#define SFVM_GETITEMCOUNT 0x0004 /* undocumented */
+#define SFVM_GETITEMPIDL 0x0005 /* undocumented */
+#define SFVM_REMOVEOBJECT 0x0006
+#define SFVM_UPDATEOBJECT 0x0007
+#define SFVM_SETREDRAW 0x0008 /* undocumented */
+#define SFVM_GETSELECTEDOBJECTS 0x0009
+#define SFVM_ISDROPONSOURCE 0x000A /* undocumented */
+#define SFVM_MOVEICONS 0x000B /* undocumented */
+#define SFVM_GETDRAGPOINT 0x000C /* undocumented */
+#define SFVM_GETDROPPOINT 0x000D /* undocumented */
+#define SFVM_SETITEMPOS 0x000E
+#define SFVM_ISDROPONBACKGROUND 0x000F /* undocumented */
+#define SFVM_SETCLIPBOARD 0x0010
+#define SFVM_TOGGLEAUTOARRANGE 0x0011 /* undocumented */
+#define SFVM_LINEUPICONS 0x0012 /* undocumented */
+#define SFVM_GETAUTOARRANGE 0x0013 /* undocumented */
+#define SFVM_GETSELECTEDCOUNT 0x0014 /* undocumented */
+#define SFVM_GETITEMSPACING 0x0015 /* undocumented */
+#define SFVM_REFRESHOBJECT 0x0016 /* undocumented */
+#define SFVM_SETPOINTS 0x0017
+
+/****************************************************************************
+* SHGetDataFromIDList API
+*/
+#define SHGDFIL_FINDDATA 1
+#define SHGDFIL_NETRESOURCE 2
+#define SHGDFIL_DESCRIPTIONID 3
+
+#define SHDID_ROOT_REGITEM 1
+#define SHDID_FS_FILE 2
+#define SHDID_FS_DIRECTORY 3
+#define SHDID_FS_OTHER 4
+#define SHDID_COMPUTER_DRIVE35 5
+#define SHDID_COMPUTER_DRIVE525 6
+#define SHDID_COMPUTER_REMOVABLE 7
+#define SHDID_COMPUTER_FIXED 8
+#define SHDID_COMPUTER_NETDRIVE 9
+#define SHDID_COMPUTER_CDROM 10
+#define SHDID_COMPUTER_RAMDISK 11
+#define SHDID_COMPUTER_OTHER 12
+#define SHDID_NET_DOMAIN 13
+#define SHDID_NET_SERVER 14
+#define SHDID_NET_SHARE 15
+#define SHDID_NET_RESTOFNET 16
+#define SHDID_NET_OTHER 17
+#define SHDID_COMPUTER_IMAGING 18
+#define SHDID_COMPUTER_AUDIO 19
+#define SHDID_COMPUTER_SHAREDDOCS 20
+
+#include <pshpack8.h>
+
+typedef struct _SHDESCRIPTIONID
+{ DWORD dwDescriptionId;
+ CLSID clsid;
+} SHDESCRIPTIONID, *LPSHDESCRIPTIONID;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
+HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID pv, int cb);
+#define SHGetDataFromIDList WINELIB_NAME_AW(SHGetDataFromIDList)
+
+BOOL WINAPI SHGetSpecialFolderPathA (HWND hwndOwner, LPSTR szPath, int nFolder, BOOL bCreate);
+BOOL WINAPI SHGetSpecialFolderPathW (HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate);
+#define SHGetSpecialFolderPath WINELIB_NAME_AW(SHGetSpecialFolderPath)
+
+HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal) ;
+
+/**********************************************************************
+ * SHGetSetSettings ()
+ */
+
+typedef struct
+{
+ BOOL fShowAllObjects : 1;
+ BOOL fShowExtensions : 1;
+ BOOL fNoConfirmRecycle : 1;
+
+ BOOL fShowSysFiles : 1;
+ BOOL fShowCompColor : 1;
+ BOOL fDoubleClickInWebView : 1;
+ BOOL fDesktopHTML : 1;
+ BOOL fWin95Classic : 1;
+ BOOL fDontPrettyPath : 1;
+ BOOL fShowAttribCol : 1;
+ BOOL fMapNetDrvBtn : 1;
+ BOOL fShowInfoTip : 1;
+ BOOL fHideIcons : 1;
+ BOOL fWebView : 1;
+ BOOL fFilter : 1;
+ BOOL fShowSuperHidden : 1;
+ BOOL fNoNetCrawling : 1;
+
+ UINT :15; /* Required for proper binary layout with gcc */
+ DWORD dwWin95Unused;
+ UINT uWin95Unused;
+ LONG lParamSort;
+ int iSortDirection;
+ UINT version;
+ UINT uNotUsed;
+ BOOL fSepProcess: 1;
+ BOOL fStartPanelOn: 1;
+ BOOL fShowStartPage: 1;
+ UINT fSpareFlags : 13;
+ UINT :15; /* Required for proper binary layout with gcc */
+} SHELLSTATE, *LPSHELLSTATE;
+
+/**********************************************************************
+ * SHGetSettings ()
+ */
+typedef struct
+{ BOOL fShowAllObjects : 1;
+ BOOL fShowExtensions : 1;
+ BOOL fNoConfirmRecycle : 1;
+ BOOL fShowSysFiles : 1;
+
+ BOOL fShowCompColor : 1;
+ BOOL fDoubleClickInWebView : 1;
+ BOOL fDesktopHTML : 1;
+ BOOL fWin95Classic : 1;
+
+ BOOL fDontPrettyPath : 1;
+ BOOL fShowAttribCol : 1;
+ BOOL fMapNetDrvBtn : 1;
+ BOOL fShowInfoTip : 1;
+
+ BOOL fHideIcons : 1;
+ UINT fRestFlags : 3;
+ UINT :15; /* Required for proper binary layout with gcc */
+} SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
+
+VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
+
+#define SSF_SHOWALLOBJECTS 0x0001
+#define SSF_SHOWEXTENSIONS 0x0002
+#define SSF_SHOWCOMPCOLOR 0x0008
+#define SSF_SHOWSYSFILES 0x0020
+#define SSF_DOUBLECLICKINWEBVIEW 0x0080
+#define SSF_SHOWATTRIBCOL 0x0100
+#define SSF_DESKTOPHTML 0x0200
+#define SSF_WIN95CLASSIC 0x0400
+#define SSF_DONTPRETTYPATH 0x0800
+#define SSF_SHOWINFOTIP 0x2000
+#define SSF_MAPNETDRVBUTTON 0x1000
+#define SSF_NOCONFIRMRECYCLE 0x8000
+#define SSF_HIDEICONS 0x4000
+
+/****************************************************************************
+* SHRestricted API
+*/
+typedef enum RESTRICTIONS
+{
+ REST_NONE = 0x00000000,
+ REST_NORUN = 0x00000001,
+ REST_NOCLOSE = 0x00000002,
+ REST_NOSAVESET = 0x00000004,
+ REST_NOFILEMENU = 0x00000008,
+ REST_NOSETFOLDERS = 0x00000010,
+ REST_NOSETTASKBAR = 0x00000020,
+ REST_NODESKTOP = 0x00000040,
+ REST_NOFIND = 0x00000080,
+ REST_NODRIVES = 0x00000100,
+ REST_NODRIVEAUTORUN = 0x00000200,
+ REST_NODRIVETYPEAUTORUN = 0x00000400,
+ REST_NONETHOOD = 0x00000800,
+ REST_STARTBANNER = 0x00001000,
+ REST_RESTRICTRUN = 0x00002000,
+ REST_NOPRINTERTABS = 0x00004000,
+ REST_NOPRINTERDELETE = 0x00008000,
+ REST_NOPRINTERADD = 0x00010000,
+ REST_NOSTARTMENUSUBFOLDERS = 0x00020000,
+ REST_MYDOCSONNET = 0x00040000,
+ REST_NOEXITTODOS = 0x00080000,
+ REST_ENFORCESHELLEXTSECURITY = 0x00100000,
+ REST_LINKRESOLVEIGNORELINKINFO = 0x00200000,
+ REST_NOCOMMONGROUPS = 0x00400000,
+ REST_SEPARATEDESKTOPPROCESS = 0x00800000,
+ REST_NOWEB = 0x01000000,
+ REST_NOTRAYCONTEXTMENU = 0x02000000,
+ REST_NOVIEWCONTEXTMENU = 0x04000000,
+ REST_NONETCONNECTDISCONNECT = 0x08000000,
+ REST_STARTMENULOGOFF = 0x10000000,
+ REST_NOSETTINGSASSIST = 0x20000000,
+ REST_NOINTERNETICON = 0x40000001,
+ REST_NORECENTDOCSHISTORY,
+ REST_NORECENTDOCSMENU,
+ REST_NOACTIVEDESKTOP,
+ REST_NOACTIVEDESKTOPCHANGES,
+ REST_NOFAVORITESMENU,
+ REST_CLEARRECENTDOCSONEXIT,
+ REST_CLASSICSHELL,
+ REST_NOCUSTOMIZEWEBVIEW,
+
+ REST_NOHTMLWALLPAPER = 0x40000010,
+ REST_NOCHANGINGWALLPAPER,
+ REST_NODESKCOMP,
+ REST_NOADDDESKCOMP,
+ REST_NODELDESKCOMP,
+ REST_NOCLOSEDESKCOMP,
+ REST_NOCLOSE_DRAGDROPBAND,
+ REST_NOMOVINGBAND,
+ REST_NOEDITDESKCOMP,
+ REST_NORESOLVESEARCH,
+ REST_NORESOLVETRACK,
+ REST_FORCECOPYACLWITHFILE,
+ REST_NOLOGO3CHANNELNOTIFY,
+ REST_NOFORGETSOFTWAREUPDATE,
+ REST_NOSETACTIVEDESKTOP,
+ REST_NOUPDATEWINDOWS,
+ REST_NOCHANGESTARMENU, /* 0x40000020 */
+ REST_NOFOLDEROPTIONS,
+ REST_HASFINDCOMPUTERS,
+ REST_INTELLIMENUS,
+ REST_RUNDLGMEMCHECKBOX,
+ REST_ARP_ShowPostSetup,
+ REST_NOCSC,
+ REST_NOCONTROLPANEL,
+ REST_ENUMWORKGROUP,
+ REST_ARP_NOARP,
+ REST_ARP_NOREMOVEPAGE,
+ REST_ARP_NOADDPAGE,
+ REST_ARP_NOWINSETUPPAGE,
+ REST_GREYMSIADS,
+ REST_NOCHANGEMAPPEDDRIVELABEL,
+ REST_NOCHANGEMAPPEDDRIVECOMMENT,
+ REST_MaxRecentDocs, /* 0x40000030 */
+ REST_NONETWORKCONNECTIONS,
+ REST_FORCESTARTMENULOGOFF,
+ REST_NOWEBVIEW,
+ REST_NOCUSTOMIZETHISFOLDER,
+ REST_NOENCRYPTION,
+
+ REST_ALLOWFRENCHENCRYPTION, /* not documented */
+
+ REST_DONTSHOWSUPERHIDDEN,
+ REST_NOSHELLSEARCHBUTTON,
+ REST_NOHARDWARETAB,
+ REST_NORUNASINSTALLPROMPT,
+ REST_PROMPTRUNASINSTALLNETPATH,
+ REST_NOMANAGEMYCOMPUTERVERB,
+ REST_NORECENTDOCSNETHOOD,
+ REST_DISALLOWRUN,
+ REST_NOWELCOMESCREEN,
+ REST_RESTRICTCPL, /* 0x40000040 */
+ REST_DISALLOWCPL,
+ REST_NOSMBALLOONTIP,
+ REST_NOSMHELP,
+ REST_NOWINKEYS,
+ REST_NOENCRYPTONMOVE,
+ REST_NOLOCALMACHINERUN,
+ REST_NOCURRENTUSERRUN,
+ REST_NOLOCALMACHINERUNONCE,
+ REST_NOCURRENTUSERRUNONCE,
+ REST_FORCEACTIVEDESKTOPON,
+ REST_NOCOMPUTERSNEARME,
+ REST_NOVIEWONDRIVE,
+ REST_NONETCRAWL,
+ REST_NOSHAREDDOCUMENTS,
+ REST_NOSMMYDOCS,
+ REST_NOSMMYPICS, /* 0x40000050 */
+ REST_ALLOWBITBUCKDRIVES,
+ REST_NONLEGACYSHELLMODE,
+ REST_NOCONTROLPANELBARRICADE,
+ REST_NOSTARTPAGE,
+ REST_NOAUTOTRAYNOTIFY,
+ REST_NOTASKGROUPING,
+ REST_NOCDBURNING,
+ REST_MYCOMPNOPROP,
+ REST_MYDOCSNOPROP,
+ REST_NOSTARTPANEL,
+ REST_NODISPLAYAPPEARANCEPAGE,
+ REST_NOTHEMESTAB,
+ REST_NOVISUALSTYLECHOICE,
+ REST_NOSIZECHOICE,
+ REST_NOCOLORCHOICE,
+ REST_SETVISUALSTYLE, /* 0x40000060 */
+ REST_STARTRUNNOHOMEPATH,
+ REST_NOUSERNAMEINSTARTPANEL,
+ REST_NOMYCOMPUTERICON,
+ REST_NOSMNETWORKPLACES,
+ REST_NOSMPINNEDLIST,
+ REST_NOSMMYMUSIC,
+ REST_NOSMEJECTPC,
+ REST_NOSMMOREPROGRAMS,
+ REST_NOSMMFUPROGRAMS,
+ REST_NOTRAYITEMSDISPLAY,
+ REST_NOTOOLBARSONTASKBAR,
+ /* 0x4000006C
+ 0x4000006D
+ 0x4000006E */
+ REST_NOSMCONFIGUREPROGRAMS = 0x4000006F,
+ REST_HIDECLOCK, /* 0x40000070 */
+ REST_NOLOWDISKSPACECHECKS,
+ REST_NOENTIRENETWORK,
+ REST_NODESKTOPCLEANUP,
+ REST_BITBUCKNUKEONDELETE,
+ REST_BITBUCKCONFIRMDELETE,
+ REST_BITBUCKNOPROP,
+ REST_NODISPBACKGROUND,
+ REST_NODISPSCREENSAVEPG,
+ REST_NODISPSETTINGSPG,
+ REST_NODISPSCREENSAVEPREVIEW,
+ REST_NODISPLAYCPL,
+ REST_HIDERUNASVERB,
+ REST_NOTHUMBNAILCACHE,
+ REST_NOSTRCMPLOGICAL,
+ REST_NOPUBLISHWIZARD,
+ REST_NOONLINEPRINTSWIZARD, /* 0x40000080 */
+ REST_NOWEBSERVICES,
+ REST_ALLOWUNHASHEDWEBVIEW,
+ REST_ALLOWLEGACYWEBVIEW,
+ REST_REVERTWEBVIEWSECURITY,
+
+ REST_INHERITCONSOLEHANDLES = 0x40000086,
+
+ REST_NODISCONNECT = 0x41000001,
+ REST_NOSECURITY,
+ REST_NOFILEASSOCIATE, /* 0x41000003 */
+} RESTRICTIONS;
+
+DWORD WINAPI SHRestricted(RESTRICTIONS rest);
+
+/****************************************************************************
+* SHChangeNotify API
+*/
+typedef struct _SHChangeNotifyEntry
+{
+ LPCITEMIDLIST pidl;
+ BOOL fRecursive;
+} SHChangeNotifyEntry;
+
+#define SHCNE_RENAMEITEM 0x00000001
+#define SHCNE_CREATE 0x00000002
+#define SHCNE_DELETE 0x00000004
+#define SHCNE_MKDIR 0x00000008
+#define SHCNE_RMDIR 0x00000010
+#define SHCNE_MEDIAINSERTED 0x00000020
+#define SHCNE_MEDIAREMOVED 0x00000040
+#define SHCNE_DRIVEREMOVED 0x00000080
+#define SHCNE_DRIVEADD 0x00000100
+#define SHCNE_NETSHARE 0x00000200
+#define SHCNE_NETUNSHARE 0x00000400
+#define SHCNE_ATTRIBUTES 0x00000800
+#define SHCNE_UPDATEDIR 0x00001000
+#define SHCNE_UPDATEITEM 0x00002000
+#define SHCNE_SERVERDISCONNECT 0x00004000
+#define SHCNE_UPDATEIMAGE 0x00008000
+#define SHCNE_DRIVEADDGUI 0x00010000
+#define SHCNE_RENAMEFOLDER 0x00020000
+#define SHCNE_FREESPACE 0x00040000
+
+#define SHCNE_EXTENDED_EVENT 0x04000000
+#define SHCNE_ASSOCCHANGED 0x08000000
+#define SHCNE_DISKEVENTS 0x0002381F
+#define SHCNE_GLOBALEVENTS 0x0C0581E0
+#define SHCNE_ALLEVENTS 0x7FFFFFFF
+#define SHCNE_INTERRUPT 0x80000000
+
+#define SHCNEE_ORDERCHANGED __MSABI_LONG(0x0002)
+#define SHCNEE_MSI_CHANGE __MSABI_LONG(0x0004)
+#define SHCNEE_MSI_UNINSTALL __MSABI_LONG(0x0005)
+
+#define SHCNF_IDLIST 0x0000
+#define SHCNF_PATHA 0x0001
+#define SHCNF_PRINTERA 0x0002
+#define SHCNF_DWORD 0x0003
+#define SHCNF_PATHW 0x0005
+#define SHCNF_PRINTERW 0x0006
+#define SHCNF_TYPE 0x00FF
+#define SHCNF_FLUSH 0x1000
+#define SHCNF_FLUSHNOWAIT 0x3000
+#define SHCNF_NOTIFYRECURSIVE 0x10000
+
+#define SHCNF_PATH WINELIB_NAME_AW(SHCNF_PATH)
+#define SHCNF_PRINTER WINELIB_NAME_AW(SHCNF_PRINTER)
+
+#define SHCNRF_InterruptLevel 0x0001
+#define SHCNRF_ShellLevel 0x0002
+#define SHCNRF_RecursiveInterrupt 0x1000
+#define SHCNRF_NewDelivery 0x8000
+
+void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
+
+typedef enum {
+ SLDF_HAS_ID_LIST = 0x00000001,
+ SLDF_HAS_LINK_INFO = 0x00000002,
+ SLDF_HAS_NAME = 0x00000004,
+ SLDF_HAS_RELPATH = 0x00000008,
+ SLDF_HAS_WORKINGDIR = 0x00000010,
+ SLDF_HAS_ARGS = 0x00000020,
+ SLDF_HAS_ICONLOCATION = 0x00000040,
+ SLDF_UNICODE = 0x00000080,
+ SLDF_FORCE_NO_LINKINFO = 0x00000100,
+ SLDF_HAS_EXP_SZ = 0x00000200,
+ SLDF_RUN_IN_SEPARATE = 0x00000400,
+ SLDF_HAS_LOGO3ID = 0x00000800,
+ SLDF_HAS_DARWINID = 0x00001000,
+ SLDF_RUNAS_USER = 0x00002000,
+ SLDF_HAS_EXP_ICON_SZ = 0x00004000,
+ SLDF_NO_PIDL_ALIAS = 0x00008000,
+ SLDF_FORCE_UNCNAME = 0x00010000,
+ SLDF_RUN_WITH_SHIMLAYER = 0x00020000,
+ SLDF_FORCE_NO_LINKTRACK = 0x00040000,
+ SLDF_ENABLE_TARGET_METADATA = 0x00080000,
+ SLDF_DISABLE_KNOWNFOLDER_RELATIVE_TRACKING = 0x00200000,
+ SLDF_VALID = 0x003ff7ff,
+ SLDF_RESERVED = 0x80000000,
+} SHELL_LINK_DATA_FLAGS;
+
+typedef struct tagDATABLOCKHEADER
+{
+ DWORD cbSize;
+ DWORD dwSignature;
+} DATABLOCK_HEADER, *LPDATABLOCK_HEADER, *LPDBLIST;
+
+typedef struct {
+ DATABLOCK_HEADER dbh;
+ CHAR szDarwinID[MAX_PATH];
+ WCHAR szwDarwinID[MAX_PATH];
+} EXP_DARWIN_LINK, *LPEXP_DARWIN_LINK;
+
+typedef struct {
+ DWORD cbSize;
+ DWORD cbSignature;
+ CHAR szTarget[MAX_PATH];
+ WCHAR szwTarget[MAX_PATH];
+} EXP_SZ_LINK, *LPEXP_SZ_LINK;
+
+typedef struct {
+ DWORD cbSize;
+ DWORD dwSignature;
+ DWORD idSpecialFolder;
+ DWORD cbOffset;
+} EXP_SPECIAL_FOLDER, *LPEXP_SPECIAL_FOLDER;
+
+typedef struct {
+ DWORD cbSize;
+ DWORD dwSignature;
+ BYTE abPropertyStorage[1];
+} EXP_PROPERTYSTORAGE;
+
+#define EXP_SZ_LINK_SIG 0xa0000001
+#define NT_CONSOLE_PROPS_SIG 0xa0000002
+#define NT_FE_CONSOLE_PROPS_SIG 0xa0000004
+#define EXP_SPECIAL_FOLDER_SIG 0xa0000005
+#define EXP_DARWIN_ID_SIG 0xa0000006
+#define EXP_SZ_ICON_SIG 0xa0000007
+#define EXP_LOGO3_ID_SIG EXP_SZ_ICON_SIG /* Old SDKs only */
+#define EXP_PROPERTYSTORAGE_SIG 0xa0000009
+
+typedef struct _SHChangeDWORDAsIDList {
+ USHORT cb;
+ DWORD dwItem1;
+ DWORD dwItem2;
+ USHORT cbZero;
+} SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList;
+
+typedef struct _SHChangeProductKeyAsIDList {
+ USHORT cb;
+ WCHAR wszProductKey[39];
+ USHORT cbZero;
+} SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
+
+ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
+ int cEntries, SHChangeNotifyEntry *pshcne);
+BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);
+HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,
+ LPITEMIDLIST **pppidl, LONG *plEvent);
+BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
+
+HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);
+
+/****************************************************************************
+* SHCreateDirectory API
+*/
+DWORD WINAPI SHCreateDirectory(HWND, LPCVOID);
+int WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);
+int WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);
+#define SHCreateDirectoryEx WINELIB_NAME_AW(SHCreateDirectoryEx)
+
+/****************************************************************************
+* SHGetSetFolderCustomSettings API
+*/
+typedef struct {
+ DWORD dwSize;
+ DWORD dwMask;
+ SHELLVIEWID *pvid;
+ LPWSTR pszWebViewTemplate;
+ DWORD cchWebViewTemplate;
+ LPWSTR pszWebViewTemplateVersion;
+ LPWSTR pszInfoTip;
+ DWORD cchInfoTip;
+ CLSID *pclsid;
+ DWORD dwFlags;
+ LPWSTR pszIconFile;
+ DWORD cchIconFile;
+ int iIconIndex;
+ LPWSTR pszLogo;
+ DWORD cchLogo;
+} SHFOLDERCUSTOMSETTINGS, *LPSHFOLDERCUSTOMSETTINGS;
+
+HRESULT WINAPI SHGetSetFolderCustomSettings(LPSHFOLDERCUSTOMSETTINGS pfcs, LPCSTR pszPath, DWORD dwReadWrite);
+
+/****************************************************************************
+* SHGetSpecialFolderLocation API
+*/
+HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, LPITEMIDLIST * ppidl);
+HRESULT WINAPI SHGetFolderLocation(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwReserved, LPITEMIDLIST *ppidl);
+
+/****************************************************************************
+* SHGetFolderPath API
+*/
+typedef enum {
+ SHGFP_TYPE_CURRENT = 0,
+ SHGFP_TYPE_DEFAULT = 1
+} SHGFP_TYPE;
+
+HRESULT WINAPI SHGetFolderPathA(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
+HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
+#define SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath)
+
+#define CSIDL_DESKTOP 0x0000
+#define CSIDL_INTERNET 0x0001
+#define CSIDL_PROGRAMS 0x0002
+#define CSIDL_CONTROLS 0x0003
+#define CSIDL_PRINTERS 0x0004
+#define CSIDL_PERSONAL 0x0005
+#define CSIDL_FAVORITES 0x0006
+#define CSIDL_STARTUP 0x0007
+#define CSIDL_RECENT 0x0008
+#define CSIDL_SENDTO 0x0009
+#define CSIDL_BITBUCKET 0x000a
+#define CSIDL_STARTMENU 0x000b
+#define CSIDL_MYDOCUMENTS CSIDL_PERSONAL
+#define CSIDL_MYMUSIC 0x000d
+#define CSIDL_MYVIDEO 0x000e
+#define CSIDL_DESKTOPDIRECTORY 0x0010
+#define CSIDL_DRIVES 0x0011
+#define CSIDL_NETWORK 0x0012
+#define CSIDL_NETHOOD 0x0013
+#define CSIDL_FONTS 0x0014
+#define CSIDL_TEMPLATES 0x0015
+#define CSIDL_COMMON_STARTMENU 0x0016
+#define CSIDL_COMMON_PROGRAMS 0X0017
+#define CSIDL_COMMON_STARTUP 0x0018
+#define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
+#define CSIDL_APPDATA 0x001a
+#define CSIDL_PRINTHOOD 0x001b
+#define CSIDL_LOCAL_APPDATA 0x001c
+#define CSIDL_ALTSTARTUP 0x001d
+#define CSIDL_COMMON_ALTSTARTUP 0x001e
+#define CSIDL_COMMON_FAVORITES 0x001f
+#define CSIDL_INTERNET_CACHE 0x0020
+#define CSIDL_COOKIES 0x0021
+#define CSIDL_HISTORY 0x0022
+#define CSIDL_COMMON_APPDATA 0x0023
+#define CSIDL_WINDOWS 0x0024
+#define CSIDL_SYSTEM 0x0025
+#define CSIDL_PROGRAM_FILES 0x0026
+#define CSIDL_MYPICTURES 0x0027
+#define CSIDL_PROFILE 0x0028
+#define CSIDL_SYSTEMX86 0x0029
+#define CSIDL_PROGRAM_FILESX86 0x002a
+#define CSIDL_PROGRAM_FILES_COMMON 0x002b
+#define CSIDL_PROGRAM_FILES_COMMONX86 0x002c
+#define CSIDL_COMMON_TEMPLATES 0x002d
+#define CSIDL_COMMON_DOCUMENTS 0x002e
+#define CSIDL_COMMON_ADMINTOOLS 0x002f
+#define CSIDL_ADMINTOOLS 0x0030
+#define CSIDL_CONNECTIONS 0x0031
+#define CSIDL_COMMON_MUSIC 0x0035
+#define CSIDL_COMMON_PICTURES 0x0036
+#define CSIDL_COMMON_VIDEO 0x0037
+#define CSIDL_RESOURCES 0x0038
+#define CSIDL_RESOURCES_LOCALIZED 0x0039
+#define CSIDL_COMMON_OEM_LINKS 0x003a
+#define CSIDL_CDBURN_AREA 0x003b
+#define CSIDL_COMPUTERSNEARME 0x003d
+#define CSIDL_PROFILES 0x003e
+#define CSIDL_FOLDER_MASK 0x00ff
+#define CSIDL_FLAG_PER_USER_INIT 0x0800
+#define CSIDL_FLAG_NO_ALIAS 0x1000
+#define CSIDL_FLAG_DONT_VERIFY 0x4000
+#define CSIDL_FLAG_CREATE 0x8000
+
+#define CSIDL_FLAG_MASK 0xff00
+
+/****************************************************************************
+ * SHGetDesktopFolder API
+ */
+HRESULT WINAPI SHGetDesktopFolder(IShellFolder * *);
+
+/****************************************************************************
+ * SHBindToParent API
+ */
+HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast);
+
+/****************************************************************************
+* SHDefExtractIcon API
+*/
+HRESULT WINAPI SHDefExtractIconA(LPCSTR pszIconFile, int iIndex, UINT uFlags,
+ HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
+HRESULT WINAPI SHDefExtractIconW(LPCWSTR pszIconFile, int iIndex, UINT uFlags,
+ HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize);
+#define SHDefExtractIcon WINELIB_NAME_AW(SHDefExtractIcon)
+
+/*
+ * DROPFILES for CF_HDROP and CF_PRINTERS
+ */
+typedef struct _DROPFILES
+{
+ DWORD pFiles;
+ POINT pt;
+ BOOL fNC;
+ BOOL fWide;
+} DROPFILES, *LPDROPFILES;
+
+/*
+ * Properties of a file in the clipboard
+ */
+typedef struct _FILEDESCRIPTORA {
+ DWORD dwFlags;
+ CLSID clsid;
+ SIZEL sizel;
+ POINTL pointl;
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ CHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORA, *LPFILEDESCRIPTORA;
+
+typedef struct _FILEDESCRIPTORW {
+ DWORD dwFlags;
+ CLSID clsid;
+ SIZEL sizel;
+ POINTL pointl;
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ WCHAR cFileName[MAX_PATH];
+} FILEDESCRIPTORW, *LPFILEDESCRIPTORW;
+
+DECL_WINELIB_TYPE_AW(FILEDESCRIPTOR)
+DECL_WINELIB_TYPE_AW(LPFILEDESCRIPTOR)
+
+/*
+ * CF_FILEGROUPDESCRIPTOR clipboard format
+ */
+typedef struct _FILEGROUPDESCRIPTORA {
+ UINT cItems;
+ FILEDESCRIPTORA fgd[1];
+} FILEGROUPDESCRIPTORA, *LPFILEGROUPDESCRIPTORA;
+
+typedef struct _FILEGROUPDESCRIPTORW {
+ UINT cItems;
+ FILEDESCRIPTORW fgd[1];
+} FILEGROUPDESCRIPTORW, *LPFILEGROUPDESCRIPTORW;
+
+DECL_WINELIB_TYPE_AW(FILEGROUPDESCRIPTOR)
+DECL_WINELIB_TYPE_AW(LPFILEGROUPDESCRIPTOR)
+
+/****************************************************************************
+ * Cabinet functions
+ */
+
+typedef struct {
+ WORD cLength;
+ WORD nVersion;
+ BOOL fFullPathTitle:1;
+ BOOL fSaveLocalView:1;
+ BOOL fNotShell:1;
+ BOOL fSimpleDefault:1;
+ BOOL fDontShowDescBar:1;
+ BOOL fNewWindowMode:1;
+ BOOL fShowCompColor:1;
+ BOOL fDontPrettyNames:1;
+ BOOL fAdminsCreateCommonGroups:1;
+ UINT fUnusedFlags:7;
+ UINT :15; /* Required for proper binary layout with gcc */
+ UINT fMenuEnumFilter;
+} CABINETSTATE, *LPCABINETSTATE;
+
+#define CABINETSTATE_VERSION 2
+
+BOOL WINAPI ReadCabinetState(CABINETSTATE *, int);
+BOOL WINAPI WriteCabinetState(CABINETSTATE *);
+
+/****************************************************************************
+ * Path Manipulation Routines
+ */
+
+/* PathProcessCommand flags */
+#define PPCF_ADDQUOTES 0x01
+#define PPCF_INCLUDEARGS 0x02
+#define PPCF_ADDARGUMENTS 0x03
+#define PPCF_NODIRECTORIES 0x10
+#define PPCF_DONTRESOLVE 0x20
+#define PPCF_FORCEQUALIFY 0x40
+#define PPCF_LONGESTPOSSIBLE 0x80
+
+/* PathResolve flags */
+#define PRF_VERIFYEXISTS 0x01
+#define PRF_EXECUTABLE 0x02
+#define PRF_TRYPROGRAMEXTENSIONS 0x03
+#define PRF_FIRSTDIRDEF 0x04
+#define PRF_DONTFINDLINK 0x08
+#define PRF_REQUIREABSOLUTE 0x10
+
+VOID WINAPI PathGetShortPath(LPWSTR pszPath);
+LONG WINAPI PathProcessCommand(LPCWSTR, LPWSTR, int, DWORD);
+int WINAPI PathResolve(LPWSTR, PZPCWSTR, UINT);
+BOOL WINAPI PathYetAnotherMakeUniqueName(LPWSTR, LPCWSTR, LPCWSTR, LPCWSTR);
+BOOL WINAPI Win32DeleteFile(LPCWSTR);
+
+/****************************************************************************
+ * Drag And Drop Routines
+ */
+
+/* DAD_AutoScroll sample structure */
+#define NUM_POINTS 3
+typedef struct
+{
+ int iNextSample;
+ DWORD dwLastScroll;
+ BOOL bFull;
+ POINT pts[NUM_POINTS];
+ DWORD dwTimes[NUM_POINTS];
+} AUTO_SCROLL_DATA;
+
+BOOL WINAPI DAD_SetDragImage(HIMAGELIST,LPPOINT);
+BOOL WINAPI DAD_DragEnterEx(HWND,POINT);
+BOOL WINAPI DAD_DragEnterEx2(HWND,POINT,IDataObject*);
+BOOL WINAPI DAD_DragMove(POINT);
+BOOL WINAPI DAD_DragLeave(void);
+BOOL WINAPI DAD_AutoScroll(HWND,AUTO_SCROLL_DATA*,LPPOINT);
+HRESULT WINAPI SHDoDragDrop(HWND,IDataObject*,IDropSource*,DWORD,LPDWORD);
+
+/****************************************************************************
+ * Internet shortcut properties
+ */
+
+#define PID_IS_URL 2
+#define PID_IS_NAME 4
+#define PID_IS_WORKINGDIR 5
+#define PID_IS_HOTKEY 6
+#define PID_IS_SHOWCMD 7
+#define PID_IS_ICONINDEX 8
+#define PID_IS_ICONFILE 9
+#define PID_IS_WHATSNEW 10
+#define PID_IS_AUTHOR 11
+#define PID_IS_DESCRIPTION 12
+#define PID_IS_COMMENT 13
+
+
+LPITEMIDLIST WINAPI ILAppendID(LPITEMIDLIST,LPCSHITEMID,BOOL);
+LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILCreateFromPathA(LPCSTR);
+LPITEMIDLIST WINAPI ILCreateFromPathW(LPCWSTR);
+#define ILCreateFromPath WINELIB_NAME_AW(ILCreateFromPath)
+LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST,LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindChild(LPCITEMIDLIST,LPCITEMIDLIST);
+LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST);
+void WINAPI ILFree(LPITEMIDLIST);
+LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST);
+UINT WINAPI ILGetSize(LPCITEMIDLIST);
+BOOL WINAPI ILIsEqual(LPCITEMIDLIST,LPCITEMIDLIST);
+BOOL WINAPI ILIsParent(LPCITEMIDLIST,LPCITEMIDLIST,BOOL);
+HRESULT WINAPI ILLoadFromStream(LPSTREAM,LPITEMIDLIST*);
+BOOL WINAPI ILRemoveLastID(LPITEMIDLIST);
+HRESULT WINAPI ILSaveToStream(LPSTREAM,LPCITEMIDLIST);
+
+static inline BOOL ILIsEmpty(LPCITEMIDLIST pidl)
+{
+ return !(pidl && pidl->mkid.cb);
+}
+
+#include <pshpack8.h>
+
+typedef struct {
+ HWND hwnd;
+ IContextMenuCB *pcmcb;
+ PCIDLIST_ABSOLUTE pidlFolder;
+ IShellFolder *psf;
+ UINT cidl;
+ PCUITEMID_CHILD_ARRAY apidl;
+ IUnknown *punkAssociationInfo;
+ UINT cKeys;
+ const HKEY *aKeys;
+} DEFCONTEXTMENU;
+
+#include <poppack.h>
+
+HRESULT WINAPI SHCreateDefaultContextMenu(const DEFCONTEXTMENU *pdcm, REFIID riid, void **ppv);
+
+typedef HRESULT (CALLBACK *LPFNDFMCALLBACK)(IShellFolder*,HWND,IDataObject*,UINT,WPARAM,LPARAM);
+
+HRESULT WINAPI CDefFolderMenu_Create2(LPCITEMIDLIST pidlFolder, HWND hwnd, UINT cidl,
+ LPCITEMIDLIST *apidl, IShellFolder *psf,
+ LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeys,
+ IContextMenu **ppcm);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_SHLOBJ_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h
new file mode 100644
index 00000000..94304252
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shlwapi.h
@@ -0,0 +1,1135 @@
+/*
+ * SHLWAPI.DLL functions
+ *
+ * Copyright (C) 2000 Juergen Schmied
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SHLWAPI_H
+#define __WINE_SHLWAPI_H
+
+/* FIXME: #include <specstrings.h> */
+#include <objbase.h>
+#include <shtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#include <pshpack8.h>
+
+#ifndef NO_SHLWAPI_REG
+
+/* Registry functions */
+
+DWORD WINAPI SHDeleteEmptyKeyA(HKEY,LPCSTR);
+DWORD WINAPI SHDeleteEmptyKeyW(HKEY,LPCWSTR);
+#define SHDeleteEmptyKey WINELIB_NAME_AW(SHDeleteEmptyKey)
+
+DWORD WINAPI SHDeleteKeyA(HKEY,LPCSTR);
+DWORD WINAPI SHDeleteKeyW(HKEY,LPCWSTR);
+#define SHDeleteKey WINELIB_NAME_AW(SHDeleteKey)
+
+DWORD WINAPI SHDeleteValueA(HKEY,LPCSTR,LPCSTR);
+DWORD WINAPI SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR);
+#define SHDeleteValue WINELIB_NAME_AW(SHDeleteValue)
+
+DWORD WINAPI SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD);
+DWORD WINAPI SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD);
+#define SHGetValue WINELIB_NAME_AW(SHGetValue)
+
+DWORD WINAPI SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD);
+DWORD WINAPI SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD);
+#define SHSetValue WINELIB_NAME_AW(SHSetValue)
+
+DWORD WINAPI SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+DWORD WINAPI SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+#define SHQueryValueEx WINELIB_NAME_AW(SHQueryValueEx)
+
+LONG WINAPI SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD);
+LONG WINAPI SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD);
+#define SHEnumKeyEx WINELIB_NAME_AW(SHEnumKeyEx)
+
+LONG WINAPI SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+LONG WINAPI SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD);
+#define SHEnumValue WINELIB_NAME_AW(SHEnumValue)
+
+LONG WINAPI SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+LONG WINAPI SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+#define SHQueryInfoKey WINELIB_NAME_AW(SHQueryInfoKey)
+
+DWORD WINAPI SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);
+DWORD WINAPI SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD);
+#define SHRegGetPath WINELIB_NAME_AW(SHRegGetPath)
+
+DWORD WINAPI SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);
+#define SHRegSetPath WINELIB_NAME_AW(SHRegSetPath)
+
+DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);
+DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);
+#define SHCopyKey WINELIB_NAME_AW(SHCopyKey)
+
+HKEY WINAPI SHRegDuplicateHKey(HKEY);
+
+/* SHRegGetValue flags */
+typedef INT SRRF;
+
+#define SRRF_RT_REG_NONE 0x1
+#define SRRF_RT_REG_SZ 0x2
+#define SRRF_RT_REG_EXPAND_SZ 0x4
+#define SRRF_RT_REG_BINARY 0x8
+#define SRRF_RT_REG_DWORD 0x10
+#define SRRF_RT_REG_MULTI_SZ 0x20
+#define SRRF_RT_REG_QWORD 0x40
+
+#define SRRF_RT_DWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_DWORD)
+#define SRRF_RT_QWORD (SRRF_RT_REG_BINARY|SRRF_RT_REG_QWORD)
+#define SRRF_RT_ANY 0xffff
+
+#define SRRF_RM_ANY 0
+#define SRRF_RM_NORMAL 0x10000
+#define SRRF_RM_SAFE 0x20000
+#define SRRF_RM_SAFENETWORK 0x40000
+
+#define SRRF_NOEXPAND 0x10000000
+#define SRRF_ZEROONFAILURE 0x20000000
+#define SRRF_NOVIRT 0x40000000
+
+LSTATUS WINAPI SHRegGetValueA(HKEY,LPCSTR,LPCSTR,SRRF,LPDWORD,LPVOID,LPDWORD);
+LSTATUS WINAPI SHRegGetValueW(HKEY,LPCWSTR,LPCWSTR,SRRF,LPDWORD,LPVOID,LPDWORD);
+#define SHRegGetValue WINELIB_NAME_AW(SHRegGetValue)
+
+/* Undocumented registry functions */
+
+DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR);
+DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR);
+#define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey)
+
+
+/* User registry functions */
+
+typedef enum
+{
+ SHREGDEL_DEFAULT = 0,
+ SHREGDEL_HKCU = 0x1,
+ SHREGDEL_HKLM = 0x10,
+ SHREGDEL_BOTH = SHREGDEL_HKLM | SHREGDEL_HKCU
+} SHREGDEL_FLAGS;
+
+typedef enum
+{
+ SHREGENUM_DEFAULT = 0,
+ SHREGENUM_HKCU = 0x1,
+ SHREGENUM_HKLM = 0x10,
+ SHREGENUM_BOTH = SHREGENUM_HKLM | SHREGENUM_HKCU
+} SHREGENUM_FLAGS;
+
+#define SHREGSET_HKCU 0x1 /* Apply to HKCU if empty */
+#define SHREGSET_FORCE_HKCU 0x2 /* Always apply to HKCU */
+#define SHREGSET_HKLM 0x4 /* Apply to HKLM if empty */
+#define SHREGSET_FORCE_HKLM 0x8 /* Always apply to HKLM */
+#define SHREGSET_DEFAULT (SHREGSET_FORCE_HKCU | SHREGSET_HKLM)
+
+typedef HANDLE HUSKEY;
+typedef HUSKEY *PHUSKEY;
+
+LONG WINAPI SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+LONG WINAPI SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD);
+#define SHRegCreateUSKey WINELIB_NAME_AW(SHRegCreateUSKey)
+
+LONG WINAPI SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+LONG WINAPI SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL);
+#define SHRegOpenUSKey WINELIB_NAME_AW(SHRegOpenUSKey)
+
+LONG WINAPI SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,
+ BOOL,LPVOID,DWORD);
+LONG WINAPI SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
+ BOOL,LPVOID,DWORD);
+#define SHRegQueryUSValue WINELIB_NAME_AW(SHRegQueryUSValue)
+
+LONG WINAPI SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
+LONG WINAPI SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+#define SHRegWriteUSValue WINELIB_NAME_AW(SHRegWriteUSValue)
+
+LONG WINAPI SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
+LONG WINAPI SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+#define SHRegDeleteUSValue WINELIB_NAME_AW(SHRegDeleteUSValue)
+
+LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS);
+LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS);
+#define SHRegDeleteEmptyUSKey WINELIB_NAME_AW(SHRegDeleteEmptyUSKey)
+
+LONG WINAPI SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS);
+LONG WINAPI SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS);
+#define SHRegEnumUSKey WINELIB_NAME_AW(SHRegEnumUSKey)
+
+LONG WINAPI SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,
+ LPVOID,LPDWORD,SHREGENUM_FLAGS);
+LONG WINAPI SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,
+ LPVOID,LPDWORD,SHREGENUM_FLAGS);
+#define SHRegEnumUSValue WINELIB_NAME_AW(SHRegEnumUSValue)
+
+LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
+ LPDWORD,SHREGENUM_FLAGS);
+LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,
+ LPDWORD,SHREGENUM_FLAGS);
+#define SHRegQueryInfoUSKey WINELIB_NAME_AW(SHRegQueryInfoUSKey)
+
+LONG WINAPI SHRegCloseUSKey(HUSKEY);
+
+LONG WINAPI SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,
+ BOOL,LPVOID,DWORD);
+LONG WINAPI SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,
+ BOOL,LPVOID,DWORD);
+#define SHRegGetUSValue WINELIB_NAME_AW(SHRegGetUSValue)
+
+LONG WINAPI SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD);
+LONG WINAPI SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD);
+#define SHRegSetUSValue WINELIB_NAME_AW(SHRegSetUSValue)
+
+BOOL WINAPI SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL);
+BOOL WINAPI SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL);
+#define SHRegGetBoolUSValue WINELIB_NAME_AW(SHRegGetBoolUSValue)
+
+int WINAPI SHRegGetIntW(HKEY,LPCWSTR,int);
+
+/* IQueryAssociation and helpers */
+enum
+{
+ ASSOCF_INIT_NOREMAPCLSID = 0x001, /* Don't map clsid->progid */
+ ASSOCF_INIT_BYEXENAME = 0x002, /* .exe name given */
+ ASSOCF_OPEN_BYEXENAME = 0x002, /* Synonym */
+ ASSOCF_INIT_DEFAULTTOSTAR = 0x004, /* Use * as base */
+ ASSOCF_INIT_DEFAULTTOFOLDER = 0x008, /* Use folder as base */
+ ASSOCF_NOUSERSETTINGS = 0x010, /* No HKCU reads */
+ ASSOCF_NOTRUNCATE = 0x020, /* Don't truncate return */
+ ASSOCF_VERIFY = 0x040, /* Verify data */
+ ASSOCF_REMAPRUNDLL = 0x080, /* Get rundll args */
+ ASSOCF_NOFIXUPS = 0x100, /* Don't fixup errors */
+ ASSOCF_IGNOREBASECLASS = 0x200, /* Don't read baseclass */
+ ASSOCF_INIT_IGNOREUNKNOWN = 0x400, /* Fail for unknown progid */
+};
+
+typedef DWORD ASSOCF;
+
+typedef enum
+{
+ ASSOCSTR_COMMAND = 1, /* Verb command */
+ ASSOCSTR_EXECUTABLE, /* .exe from command string */
+ ASSOCSTR_FRIENDLYDOCNAME, /* Friendly doc type name */
+ ASSOCSTR_FRIENDLYAPPNAME, /* Friendly .exe name */
+ ASSOCSTR_NOOPEN, /* noopen value */
+ ASSOCSTR_SHELLNEWVALUE, /* Use shellnew key */
+ ASSOCSTR_DDECOMMAND, /* DDE command template */
+ ASSOCSTR_DDEIFEXEC, /* DDE command for process create */
+ ASSOCSTR_DDEAPPLICATION, /* DDE app name */
+ ASSOCSTR_DDETOPIC, /* DDE topic */
+ ASSOCSTR_INFOTIP, /* Infotip */
+ ASSOCSTR_QUICKTIP, /* Quick infotip */
+ ASSOCSTR_TILEINFO, /* Properties for tileview */
+ ASSOCSTR_CONTENTTYPE, /* Mimetype */
+ ASSOCSTR_DEFAULTICON, /* Icon */
+ ASSOCSTR_SHELLEXTENSION, /* GUID for shell extension handler */
+ ASSOCSTR_MAX
+} ASSOCSTR;
+
+typedef enum
+{
+ ASSOCKEY_SHELLEXECCLASS = 1, /* Key for ShellExec */
+ ASSOCKEY_APP, /* Application */
+ ASSOCKEY_CLASS, /* Progid or class */
+ ASSOCKEY_BASECLASS, /* Base class */
+ ASSOCKEY_MAX
+} ASSOCKEY;
+
+typedef enum
+{
+ ASSOCDATA_MSIDESCRIPTOR = 1, /* Component descriptor */
+ ASSOCDATA_NOACTIVATEHANDLER, /* Don't activate */
+ ASSOCDATA_QUERYCLASSSTORE, /* Look in Class Store */
+ ASSOCDATA_HASPERUSERASSOC, /* Use user association */
+ ASSOCDATA_EDITFLAGS, /* Edit flags */
+ ASSOCDATA_VALUE, /* pszExtra is value */
+ ASSOCDATA_MAX
+} ASSOCDATA;
+
+typedef enum
+{
+ ASSOCENUM_NONE
+} ASSOCENUM;
+
+typedef struct IQueryAssociations *LPQUERYASSOCIATIONS;
+
+#define INTERFACE IQueryAssociations
+DECLARE_INTERFACE_(IQueryAssociations,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IQueryAssociations methods ***/
+ STDMETHOD(Init)(THIS_ ASSOCF flags, LPCWSTR pszAssoc, HKEY hkProgid, HWND hwnd) PURE;
+ STDMETHOD(GetString)(THIS_ ASSOCF flags, ASSOCSTR str, LPCWSTR pszExtra, LPWSTR pszOut, DWORD * pcchOut) PURE;
+ STDMETHOD(GetKey)(THIS_ ASSOCF flags, ASSOCKEY key, LPCWSTR pszExtra, HKEY * phkeyOut) PURE;
+ STDMETHOD(GetData)(THIS_ ASSOCF flags, ASSOCDATA data, LPCWSTR pszExtra, LPVOID pvOut, DWORD * pcbOut) PURE;
+ STDMETHOD(GetEnum)(THIS_ ASSOCF flags, ASSOCENUM assocenum, LPCWSTR pszExtra, REFIID riid, LPVOID * ppvOut) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IQueryAssociations_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IQueryAssociations_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IQueryAssociations_Release(p) (p)->lpVtbl->Release(p)
+#define IQueryAssociations_Init(p,a,b,c,d) (p)->lpVtbl->Init(p,a,b,c,d)
+#define IQueryAssociations_GetString(p,a,b,c,d,e) (p)->lpVtbl->GetString(p,a,b,c,d,e)
+#define IQueryAssociations_GetKey(p,a,b,c,d) (p)->lpVtbl->GetKey(p,a,b,c,d)
+#define IQueryAssociations_GetData(p,a,b,c,d,e) (p)->lpVtbl->GetData(p,a,b,c,d,e)
+#define IQueryAssociations_GetEnum(p,a,b,c,d,e) (p)->lpVtbl->GetEnum(p,a,b,c,d,e)
+#endif
+
+HRESULT WINAPI AssocCreate(CLSID,REFIID,LPVOID*);
+
+HRESULT WINAPI AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,LPDWORD);
+HRESULT WINAPI AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,LPDWORD);
+#define AssocQueryString WINELIB_NAME_AW(AssocQueryString)
+
+HRESULT WINAPI AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,LPDWORD);
+HRESULT WINAPI AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,LPDWORD);
+#define AssocQueryStringByKey WINELIB_NAME_AW(AssocQueryStringByKey)
+
+HRESULT WINAPI AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,PHKEY);
+HRESULT WINAPI AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,PHKEY);
+#define AssocQueryKey WINELIB_NAME_AW(AssocQueryKey)
+
+BOOL WINAPI AssocIsDangerous(LPCWSTR);
+
+#endif /* NO_SHLWAPI_REG */
+
+void WINAPI IUnknown_Set(IUnknown **ppunk, IUnknown *punk);
+void WINAPI IUnknown_AtomicRelease(IUnknown **punk);
+HRESULT WINAPI IUnknown_GetWindow(IUnknown *punk, HWND *phwnd);
+HRESULT WINAPI IUnknown_SetSite(IUnknown *punk, IUnknown *punkSite);
+HRESULT WINAPI IUnknown_GetSite(IUnknown *punk, REFIID riid, void **ppv);
+HRESULT WINAPI IUnknown_QueryService(IUnknown *punk, REFGUID guidService, REFIID riid, void **ppvOut);
+
+/* Path functions */
+#ifndef NO_SHLWAPI_PATH
+
+/* GetPathCharType return flags */
+#define GCT_INVALID 0x0
+#define GCT_LFNCHAR 0x1
+#define GCT_SHORTCHAR 0x2
+#define GCT_WILD 0x4
+#define GCT_SEPARATOR 0x8
+
+LPSTR WINAPI PathAddBackslashA(LPSTR);
+LPWSTR WINAPI PathAddBackslashW(LPWSTR);
+#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
+
+BOOL WINAPI PathAddExtensionA(LPSTR,LPCSTR);
+BOOL WINAPI PathAddExtensionW(LPWSTR,LPCWSTR);
+#define PathAddExtension WINELIB_NAME_AW(PathAddExtension)
+
+BOOL WINAPI PathAppendA(LPSTR,LPCSTR);
+BOOL WINAPI PathAppendW(LPWSTR,LPCWSTR);
+#define PathAppend WINELIB_NAME_AW(PathAppend)
+
+LPSTR WINAPI PathBuildRootA(LPSTR,int);
+LPWSTR WINAPI PathBuildRootW(LPWSTR,int);
+#define PathBuildRoot WINELIB_NAME_AW(PathBuiltRoot)
+
+BOOL WINAPI PathCanonicalizeA(LPSTR,LPCSTR);
+BOOL WINAPI PathCanonicalizeW(LPWSTR,LPCWSTR);
+#define PathCanonicalize WINELIB_NAME_AW(PathCanonicalize)
+
+LPSTR WINAPI PathCombineA(LPSTR,LPCSTR,LPCSTR);
+LPWSTR WINAPI PathCombineW(LPWSTR,LPCWSTR,LPCWSTR);
+#define PathCombine WINELIB_NAME_AW(PathCombine)
+
+BOOL WINAPI PathCompactPathA(HDC,LPSTR,UINT);
+BOOL WINAPI PathCompactPathW(HDC,LPWSTR,UINT);
+#define PathCompactPath WINELIB_NAME_AW(PathCompactPath)
+
+BOOL WINAPI PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD);
+BOOL WINAPI PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD);
+#define PathCompactPathEx WINELIB_NAME_AW(PathCompactPathEx)
+
+int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR);
+int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);
+#define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix)
+
+HRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl)
+
+HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD);
+
+BOOL WINAPI PathFileExistsA(LPCSTR);
+BOOL WINAPI PathFileExistsW(LPCWSTR);
+#define PathFileExists WINELIB_NAME_AW(PathFileExists)
+
+BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*);
+BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*);
+#define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes)
+
+LPSTR WINAPI PathFindExtensionA(LPCSTR);
+LPWSTR WINAPI PathFindExtensionW(LPCWSTR);
+#define PathFindExtension WINELIB_NAME_AW(PathFindExtension)
+
+LPSTR WINAPI PathFindFileNameA(LPCSTR);
+LPWSTR WINAPI PathFindFileNameW(LPCWSTR);
+#define PathFindFileName WINELIB_NAME_AW(PathFindFileName)
+
+LPSTR WINAPI PathFindNextComponentA(LPCSTR);
+LPWSTR WINAPI PathFindNextComponentW(LPCWSTR);
+#define PathFindNextComponent WINELIB_NAME_AW(PathFindNextComponent)
+
+BOOL WINAPI PathFindOnPathA(LPSTR,LPCSTR*);
+BOOL WINAPI PathFindOnPathW(LPWSTR,LPCWSTR*);
+#define PathFindOnPath WINELIB_NAME_AW(PathFindOnPath)
+
+LPSTR WINAPI PathGetArgsA(LPCSTR);
+LPWSTR WINAPI PathGetArgsW(LPCWSTR);
+#define PathGetArgs WINELIB_NAME_AW(PathGetArgs)
+
+UINT WINAPI PathGetCharTypeA(UCHAR);
+UINT WINAPI PathGetCharTypeW(WCHAR);
+#define PathGetCharType WINELIB_NAME_AW(PathGetCharType)
+
+int WINAPI PathGetDriveNumberA(LPCSTR);
+int WINAPI PathGetDriveNumberW(LPCWSTR);
+#define PathGetDriveNumber WINELIB_NAME_AW(PathGetDriveNumber)
+
+BOOL WINAPI PathIsDirectoryA(LPCSTR);
+BOOL WINAPI PathIsDirectoryW(LPCWSTR);
+#define PathIsDirectory WINELIB_NAME_AW(PathIsDirectory)
+
+BOOL WINAPI PathIsDirectoryEmptyA(LPCSTR);
+BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR);
+#define PathIsDirectoryEmpty WINELIB_NAME_AW(PathIsDirectoryEmpty)
+
+BOOL WINAPI PathIsFileSpecA(LPCSTR);
+BOOL WINAPI PathIsFileSpecW(LPCWSTR);
+#define PathIsFileSpec WINELIB_NAME_AW(PathIsFileSpec);
+
+BOOL WINAPI PathIsPrefixA(LPCSTR,LPCSTR);
+BOOL WINAPI PathIsPrefixW(LPCWSTR,LPCWSTR);
+#define PathIsPrefix WINELIB_NAME_AW(PathIsPrefix)
+
+BOOL WINAPI PathIsRelativeA(LPCSTR);
+BOOL WINAPI PathIsRelativeW(LPCWSTR);
+#define PathIsRelative WINELIB_NAME_AW(PathIsRelative)
+
+BOOL WINAPI PathIsRootA(LPCSTR);
+BOOL WINAPI PathIsRootW(LPCWSTR);
+#define PathIsRoot WINELIB_NAME_AW(PathIsRoot)
+
+BOOL WINAPI PathIsSameRootA(LPCSTR,LPCSTR);
+BOOL WINAPI PathIsSameRootW(LPCWSTR,LPCWSTR);
+#define PathIsSameRoot WINELIB_NAME_AW(PathIsSameRoot)
+
+BOOL WINAPI PathIsUNCA(LPCSTR);
+BOOL WINAPI PathIsUNCW(LPCWSTR);
+#define PathIsUNC WINELIB_NAME_AW(PathIsUNC)
+
+BOOL WINAPI PathIsUNCServerA(LPCSTR);
+BOOL WINAPI PathIsUNCServerW(LPCWSTR);
+#define PathIsUNCServer WINELIB_NAME_AW(PathIsUNCServer)
+
+BOOL WINAPI PathIsUNCServerShareA(LPCSTR);
+BOOL WINAPI PathIsUNCServerShareW(LPCWSTR);
+#define PathIsUNCServerShare WINELIB_NAME_AW(PathIsUNCServerShare)
+
+BOOL WINAPI PathIsContentTypeA(LPCSTR,LPCSTR);
+BOOL WINAPI PathIsContentTypeW(LPCWSTR,LPCWSTR);
+#define PathIsContentType WINELIB_NAME_AW(PathIsContentType)
+
+BOOL WINAPI PathIsURLA(LPCSTR);
+BOOL WINAPI PathIsURLW(LPCWSTR);
+#define PathIsURL WINELIB_NAME_AW(PathIsURL)
+
+BOOL WINAPI PathMakePrettyA(LPSTR);
+BOOL WINAPI PathMakePrettyW(LPWSTR);
+#define PathMakePretty WINELIB_NAME_AW(PathMakePretty)
+
+BOOL WINAPI PathMatchSpecA(LPCSTR,LPCSTR);
+BOOL WINAPI PathMatchSpecW(LPCWSTR,LPCWSTR);
+#define PathMatchSpec WINELIB_NAME_AW(PathMatchSpec)
+
+int WINAPI PathParseIconLocationA(LPSTR);
+int WINAPI PathParseIconLocationW(LPWSTR);
+#define PathParseIconLocation WINELIB_NAME_AW(PathParseIconLocation)
+
+VOID WINAPI PathQuoteSpacesA(LPSTR);
+VOID WINAPI PathQuoteSpacesW(LPWSTR);
+#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
+
+BOOL WINAPI PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD);
+BOOL WINAPI PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD);
+#define PathRelativePathTo WINELIB_NAME_AW(PathRelativePathTo)
+
+VOID WINAPI PathRemoveArgsA(LPSTR);
+VOID WINAPI PathRemoveArgsW(LPWSTR);
+#define PathRemoveArgs WINELIB_NAME_AW(PathRemoveArgs)
+
+LPSTR WINAPI PathRemoveBackslashA(LPSTR);
+LPWSTR WINAPI PathRemoveBackslashW(LPWSTR);
+#define PathRemoveBackslash WINELIB_NAME_AW(PathRemoveBackslash)
+
+VOID WINAPI PathRemoveBlanksA(LPSTR);
+VOID WINAPI PathRemoveBlanksW(LPWSTR);
+#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
+
+VOID WINAPI PathRemoveExtensionA(LPSTR);
+VOID WINAPI PathRemoveExtensionW(LPWSTR);
+#define PathRemoveExtension WINELIB_NAME_AW(PathRemoveExtension)
+
+BOOL WINAPI PathRemoveFileSpecA(LPSTR);
+BOOL WINAPI PathRemoveFileSpecW(LPWSTR);
+#define PathRemoveFileSpec WINELIB_NAME_AW(PathRemoveFileSpec)
+
+BOOL WINAPI PathRenameExtensionA(LPSTR,LPCSTR);
+BOOL WINAPI PathRenameExtensionW(LPWSTR,LPCWSTR);
+#define PathRenameExtension WINELIB_NAME_AW(PathRenameExtension)
+
+BOOL WINAPI PathSearchAndQualifyA(LPCSTR,LPSTR,UINT);
+BOOL WINAPI PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT);
+#define PathSearchAndQualify WINELIB_NAME_AW(PathSearchAndQualify)
+
+VOID WINAPI PathSetDlgItemPathA(HWND,int,LPCSTR);
+VOID WINAPI PathSetDlgItemPathW(HWND,int,LPCWSTR);
+#define PathSetDlgItemPath WINELIB_NAME_AW(PathSetDlgItemPath)
+
+LPSTR WINAPI PathSkipRootA(LPCSTR);
+LPWSTR WINAPI PathSkipRootW(LPCWSTR);
+#define PathSkipRoot WINELIB_NAME_AW(PathSkipRoot)
+
+VOID WINAPI PathStripPathA(LPSTR);
+VOID WINAPI PathStripPathW(LPWSTR);
+#define PathStripPath WINELIB_NAME_AW(PathStripPath)
+
+BOOL WINAPI PathStripToRootA(LPSTR);
+BOOL WINAPI PathStripToRootW(LPWSTR);
+#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)
+
+VOID WINAPI PathUnquoteSpacesA(LPSTR);
+VOID WINAPI PathUnquoteSpacesW(LPWSTR);
+#define PathUnquoteSpaces WINELIB_NAME_AW(PathUnquoteSpaces)
+
+BOOL WINAPI PathMakeSystemFolderA(LPCSTR);
+BOOL WINAPI PathMakeSystemFolderW(LPCWSTR);
+#define PathMakeSystemFolder WINELIB_NAME_AW(PathMakeSystemFolder)
+
+BOOL WINAPI PathUnmakeSystemFolderA(LPCSTR);
+BOOL WINAPI PathUnmakeSystemFolderW(LPCWSTR);
+#define PathUnmakeSystemFolder WINELIB_NAME_AW(PathUnmakeSystemFolder)
+
+BOOL WINAPI PathIsSystemFolderA(LPCSTR,DWORD);
+BOOL WINAPI PathIsSystemFolderW(LPCWSTR,DWORD);
+#define PathIsSystemFolder WINELIB_NAME_AW(PathIsSystemFolder)
+
+BOOL WINAPI PathIsNetworkPathA(LPCSTR);
+BOOL WINAPI PathIsNetworkPathW(LPCWSTR);
+#define PathIsNetworkPath WINELIB_NAME_AW(PathIsNetworkPath)
+
+BOOL WINAPI PathIsLFNFileSpecA(LPCSTR);
+BOOL WINAPI PathIsLFNFileSpecW(LPCWSTR);
+#define PathIsLFNFileSpec WINELIB_NAME_AW(PathIsLFNFileSpec)
+
+LPCSTR WINAPI PathFindSuffixArrayA(LPCSTR,LPCSTR *,int);
+LPCWSTR WINAPI PathFindSuffixArrayW(LPCWSTR,LPCWSTR *,int);
+#define PathFindSuffixArray WINELIB_NAME_AW(PathFindSuffixArray)
+
+VOID WINAPI PathUndecorateA(LPSTR);
+VOID WINAPI PathUndecorateW(LPWSTR);
+#define PathUndecorate WINELIB_NAME_AW(PathUndecorate)
+
+BOOL WINAPI PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT);
+BOOL WINAPI PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT);
+#define PathUnExpandEnvStrings WINELIB_NAME_AW(PathUnExpandEnvStrings)
+
+/* Url functions */
+typedef enum {
+ URL_SCHEME_INVALID = -1,
+ URL_SCHEME_UNKNOWN = 0,
+ URL_SCHEME_FTP,
+ URL_SCHEME_HTTP,
+ URL_SCHEME_GOPHER,
+ URL_SCHEME_MAILTO,
+ URL_SCHEME_NEWS,
+ URL_SCHEME_NNTP,
+ URL_SCHEME_TELNET,
+ URL_SCHEME_WAIS,
+ URL_SCHEME_FILE,
+ URL_SCHEME_MK,
+ URL_SCHEME_HTTPS,
+ URL_SCHEME_SHELL,
+ URL_SCHEME_SNEWS,
+ URL_SCHEME_LOCAL,
+ URL_SCHEME_JAVASCRIPT,
+ URL_SCHEME_VBSCRIPT,
+ URL_SCHEME_ABOUT,
+ URL_SCHEME_RES,
+ URL_SCHEME_MSSHELLROOTED,
+ URL_SCHEME_MSSHELLIDLIST,
+ URL_SCHEME_MSHELP,
+ URL_SCHEME_MSSHELLDEVICE,
+ URL_SCHEME_WILDCARD,
+ URL_SCHEME_SEARCH_MS,
+ URL_SCHEME_SEARCH,
+ URL_SCHEME_KNOWNFOLDER,
+ URL_SCHEME_MAXVALUE
+} URL_SCHEME;
+
+/* These are used by UrlGetPart routine */
+typedef enum {
+ URL_PART_NONE = 0,
+ URL_PART_SCHEME = 1,
+ URL_PART_HOSTNAME,
+ URL_PART_USERNAME,
+ URL_PART_PASSWORD,
+ URL_PART_PORT,
+ URL_PART_QUERY
+} URL_PART;
+
+#define URL_PARTFLAG_KEEPSCHEME 0x00000001
+
+/* These are used by the UrlIs... routines */
+typedef enum {
+ URLIS_URL,
+ URLIS_OPAQUE,
+ URLIS_NOHISTORY,
+ URLIS_FILEURL,
+ URLIS_APPLIABLE,
+ URLIS_DIRECTORY,
+ URLIS_HASQUERY
+} URLIS;
+
+/* This is used by the UrlApplyScheme... routines */
+#define URL_APPLY_FORCEAPPLY 0x00000008
+#define URL_APPLY_GUESSFILE 0x00000004
+#define URL_APPLY_GUESSSCHEME 0x00000002
+#define URL_APPLY_DEFAULT 0x00000001
+
+/* The following are used by UrlEscape..., UrlUnEscape...,
+ * UrlCanonicalize..., and UrlCombine... routines
+ */
+#define URL_WININET_COMPATIBILITY 0x80000000
+#define URL_PLUGGABLE_PROTOCOL 0x40000000
+#define URL_ESCAPE_UNSAFE 0x20000000
+#define URL_UNESCAPE 0x10000000
+
+#define URL_DONT_SIMPLIFY 0x08000000
+#define URL_NO_META URL_DONT_SIMPLIFY
+#define URL_ESCAPE_SPACES_ONLY 0x04000000
+#define URL_DONT_ESCAPE_EXTRA_INFO 0x02000000
+#define URL_DONT_UNESCAPE_EXTRA_INFO URL_DONT_ESCAPE_EXTRA_INFO
+#define URL_BROWSER_MODE URL_DONT_ESCAPE_EXTRA_INFO
+
+#define URL_INTERNAL_PATH 0x00800000 /* Will escape #'s in paths */
+#define URL_UNESCAPE_HIGH_ANSI_ONLY 0x00400000
+#define URL_CONVERT_IF_DOSPATH 0x00200000
+#define URL_UNESCAPE_INPLACE 0x00100000
+
+#define URL_FILE_USE_PATHURL 0x00010000
+
+#define URL_ESCAPE_SEGMENT_ONLY 0x00002000
+#define URL_ESCAPE_PERCENT 0x00001000
+
+HRESULT WINAPI UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlApplyScheme WINELIB_NAME_AW(UrlApplyScheme)
+
+HRESULT WINAPI UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlCanonicalize WINELIB_NAME_AW(UrlCanonicalize)
+
+HRESULT WINAPI UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlCombine WINELIB_NAME_AW(UrlCombine)
+
+INT WINAPI UrlCompareA(LPCSTR,LPCSTR,BOOL);
+INT WINAPI UrlCompareW(LPCWSTR,LPCWSTR,BOOL);
+#define UrlCompare WINELIB_NAME_AW(UrlCompare)
+
+HRESULT WINAPI UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlEscape WINELIB_NAME_AW(UrlEscape)
+
+#define UrlEscapeSpacesA(x,y,z) UrlCanonicalizeA(x, y, z, \
+ URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
+#define UrlEscapeSpacesW(x,y,z) UrlCanonicalizeW(x, y, z, \
+ URL_DONT_ESCAPE_EXTRA_INFO|URL_ESCAPE_SPACES_ONLY)
+#define UrlEscapeSpaces WINELIB_NAME_AW(UrlEscapeSpaces)
+
+LPCSTR WINAPI UrlGetLocationA(LPCSTR);
+LPCWSTR WINAPI UrlGetLocationW(LPCWSTR);
+#define UrlGetLocation WINELIB_NAME_AW(UrlGetLocation)
+
+HRESULT WINAPI UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD);
+HRESULT WINAPI UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD);
+#define UrlGetPart WINELIB_NAME_AW(UrlGetPart)
+
+HRESULT WINAPI HashData(const unsigned char *,DWORD,unsigned char *lpDest,DWORD);
+
+HRESULT WINAPI UrlHashA(LPCSTR,unsigned char *,DWORD);
+HRESULT WINAPI UrlHashW(LPCWSTR,unsigned char *,DWORD);
+#define UrlHash WINELIB_NAME_AW(UrlHash)
+
+BOOL WINAPI UrlIsA(LPCSTR,URLIS);
+BOOL WINAPI UrlIsW(LPCWSTR,URLIS);
+#define UrlIs WINELIB_NAME_AW(UrlIs)
+
+BOOL WINAPI UrlIsNoHistoryA(LPCSTR);
+BOOL WINAPI UrlIsNoHistoryW(LPCWSTR);
+#define UrlIsNoHistory WINELIB_NAME_AW(UrlIsNoHistory)
+
+BOOL WINAPI UrlIsOpaqueA(LPCSTR);
+BOOL WINAPI UrlIsOpaqueW(LPCWSTR);
+#define UrlIsOpaque WINELIB_NAME_AW(UrlIsOpaque)
+
+#define UrlIsFileUrlA(x) UrlIsA(x, URLIS_FILEURL)
+#define UrlIsFileUrlW(x) UrlIsW(x, URLIS_FILEURL)
+#define UrlIsFileUrl WINELIB_NAME_AW(UrlIsFileUrl)
+
+HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlUnescape WINELIB_NAME_AW(UrlUnescape)
+
+#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \
+ y | URL_UNESCAPE_INPLACE)
+#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \
+ y | URL_UNESCAPE_INPLACE)
+#define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace)
+
+HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);
+HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
+#define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath)
+
+typedef struct tagPARSEDURLA {
+ DWORD cbSize;
+ LPCSTR pszProtocol;
+ UINT cchProtocol;
+ LPCSTR pszSuffix;
+ UINT cchSuffix;
+ UINT nScheme;
+} PARSEDURLA, *PPARSEDURLA;
+
+typedef struct tagPARSEDURLW {
+ DWORD cbSize;
+ LPCWSTR pszProtocol;
+ UINT cchProtocol;
+ LPCWSTR pszSuffix;
+ UINT cchSuffix;
+ UINT nScheme;
+} PARSEDURLW, *PPARSEDURLW;
+
+HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu);
+HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu);
+#define ParseURL WINELIB_NAME_AW(ParseUrl)
+
+#endif /* NO_SHLWAPI_PATH */
+
+
+/* String functions */
+#ifndef NO_SHLWAPI_STRFCNS
+
+/* StrToIntEx flags */
+#define STIF_DEFAULT __MSABI_LONG(0x0)
+#define STIF_SUPPORT_HEX __MSABI_LONG(0x1)
+
+BOOL WINAPI ChrCmpIA (WORD,WORD);
+BOOL WINAPI ChrCmpIW (WCHAR,WCHAR);
+#define ChrCmpI WINELIB_NAME_AW(ChrCmpI)
+
+INT WINAPI StrCSpnA(LPCSTR,LPCSTR);
+INT WINAPI StrCSpnW(LPCWSTR,LPCWSTR);
+#define StrCSpn WINELIB_NAME_AW(StrCSpn)
+
+INT WINAPI StrCSpnIA(LPCSTR,LPCSTR);
+INT WINAPI StrCSpnIW(LPCWSTR,LPCWSTR);
+#define StrCSpnI WINELIB_NAME_AW(StrCSpnI)
+
+#define StrCatA lstrcatA
+LPWSTR WINAPI StrCatW(LPWSTR,LPCWSTR);
+#define StrCat WINELIB_NAME_AW(StrCat)
+
+LPSTR WINAPI StrCatBuffA(LPSTR,LPCSTR,INT);
+LPWSTR WINAPI StrCatBuffW(LPWSTR,LPCWSTR,INT);
+#define StrCatBuff WINELIB_NAME_AW(StrCatBuff)
+
+DWORD WINAPI StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR);
+
+LPSTR WINAPI StrChrA(LPCSTR,WORD);
+LPWSTR WINAPI StrChrW(LPCWSTR,WCHAR);
+#define StrChr WINELIB_NAME_AW(StrChr)
+
+LPSTR WINAPI StrChrIA(LPCSTR,WORD);
+LPWSTR WINAPI StrChrIW(LPCWSTR,WCHAR);
+#define StrChrI WINELIB_NAME_AW(StrChrI)
+
+#define StrCmpA lstrcmpA
+int WINAPI StrCmpW(LPCWSTR,LPCWSTR);
+#define StrCmp WINELIB_NAME_AW(StrCmp)
+
+#define StrCmpIA lstrcmpiA
+int WINAPI StrCmpIW(LPCWSTR,LPCWSTR);
+#define StrCmpI WINELIB_NAME_AW(StrCmpI)
+
+#define StrCpyA lstrcpyA
+LPWSTR WINAPI StrCpyW(LPWSTR,LPCWSTR);
+#define StrCpy WINELIB_NAME_AW(StrCpy)
+
+#define StrCpyNA lstrcpynA
+LPWSTR WINAPI StrCpyNW(LPWSTR,LPCWSTR,int);
+#define StrCpyN WINELIB_NAME_AW(StrCpyN)
+#define StrNCpy WINELIB_NAME_AW(StrCpyN)
+
+INT WINAPI StrCmpLogicalW(LPCWSTR,LPCWSTR);
+
+INT WINAPI StrCmpNA(LPCSTR,LPCSTR,INT);
+INT WINAPI StrCmpNW(LPCWSTR,LPCWSTR,INT);
+#define StrCmpN WINELIB_NAME_AW(StrCmpN)
+#define StrNCmp WINELIB_NAME_AW(StrCmpN)
+
+INT WINAPI StrCmpNIA(LPCSTR,LPCSTR,INT);
+INT WINAPI StrCmpNIW(LPCWSTR,LPCWSTR,INT);
+#define StrCmpNI WINELIB_NAME_AW(StrCmpNI)
+#define StrNCmpI WINELIB_NAME_AW(StrCmpNI)
+
+LPSTR WINAPI StrDupA(LPCSTR);
+LPWSTR WINAPI StrDupW(LPCWSTR);
+#define StrDup WINELIB_NAME_AW(StrDup)
+
+HRESULT WINAPI SHStrDupA(LPCSTR,WCHAR**);
+HRESULT WINAPI SHStrDupW(LPCWSTR,WCHAR**);
+#define SHStrDup WINELIB_NAME_AW(SHStrDup)
+
+LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT);
+
+/* A/W Pairing is broken for this function */
+LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT);
+LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT);
+#ifndef WINE_NO_UNICODE_MACROS
+#ifdef UNICODE
+#define StrFormatByteSize StrFormatByteSizeW
+#else
+#define StrFormatByteSize StrFormatByteSize64A
+#endif
+#endif
+
+LPSTR WINAPI StrFormatKBSizeA(LONGLONG,LPSTR,UINT);
+LPWSTR WINAPI StrFormatKBSizeW(LONGLONG,LPWSTR,UINT);
+#define StrFormatKBSize WINELIB_NAME_AW(StrFormatKBSize)
+
+int WINAPI StrFromTimeIntervalA(LPSTR,UINT,DWORD,int);
+int WINAPI StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int);
+#define StrFromTimeInterval WINELIB_NAME_AW(StrFromTimeInterval)
+
+BOOL WINAPI StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int);
+BOOL WINAPI StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int);
+#define StrIsIntlEqual WINELIB_NAME_AW(StrIsIntlEqual)
+
+#define StrIntlEqNA(a,b,c) StrIsIntlEqualA(TRUE,a,b,c)
+#define StrIntlEqNW(a,b,c) StrIsIntlEqualW(TRUE,a,b,c)
+
+#define StrIntlEqNIA(a,b,c) StrIsIntlEqualA(FALSE,a,b,c)
+#define StrIntlEqNIW(a,b,c) StrIsIntlEqualW(FALSE,a,b,c)
+
+LPSTR WINAPI StrNCatA(LPSTR,LPCSTR,int);
+LPWSTR WINAPI StrNCatW(LPWSTR,LPCWSTR,int);
+#define StrNCat WINELIB_NAME_AW(StrNCat)
+#define StrCatN WINELIB_NAME_AW(StrNCat)
+
+LPSTR WINAPI StrPBrkA(LPCSTR,LPCSTR);
+LPWSTR WINAPI StrPBrkW(LPCWSTR,LPCWSTR);
+#define StrPBrk WINELIB_NAME_AW(StrPBrk)
+
+LPSTR WINAPI StrRChrA(LPCSTR,LPCSTR,WORD);
+LPWSTR WINAPI StrRChrW(LPCWSTR,LPCWSTR,WORD);
+#define StrRChr WINELIB_NAME_AW(StrRChr)
+
+LPSTR WINAPI StrRChrIA(LPCSTR,LPCSTR,WORD);
+LPWSTR WINAPI StrRChrIW(LPCWSTR,LPCWSTR,WORD);
+#define StrRChrI WINELIB_NAME_AW(StrRChrI)
+
+LPSTR WINAPI StrRStrIA(LPCSTR,LPCSTR,LPCSTR);
+LPWSTR WINAPI StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define StrRStrI WINELIB_NAME_AW(StrRStrI)
+
+int WINAPI StrSpnA(LPCSTR,LPCSTR);
+int WINAPI StrSpnW(LPCWSTR,LPCWSTR);
+#define StrSpn WINELIB_NAME_AW(StrSpn)
+
+LPSTR WINAPI StrStrA(LPCSTR,LPCSTR);
+LPWSTR WINAPI StrStrW(LPCWSTR,LPCWSTR);
+#define StrStr WINELIB_NAME_AW(StrStr)
+
+LPSTR WINAPI StrStrIA(LPCSTR,LPCSTR);
+LPWSTR WINAPI StrStrIW(LPCWSTR,LPCWSTR);
+#define StrStrI WINELIB_NAME_AW(StrStrI)
+
+LPWSTR WINAPI StrStrNW(LPCWSTR,LPCWSTR,UINT);
+LPWSTR WINAPI StrStrNIW(LPCWSTR,LPCWSTR,UINT);
+
+int WINAPI StrToIntA(LPCSTR);
+int WINAPI StrToIntW(LPCWSTR);
+#define StrToInt WINELIB_NAME_AW(StrToInt)
+#define StrToLong WINELIB_NAME_AW(StrToInt)
+
+BOOL WINAPI StrToIntExA(LPCSTR,DWORD,int*);
+BOOL WINAPI StrToIntExW(LPCWSTR,DWORD,int*);
+#define StrToIntEx WINELIB_NAME_AW(StrToIntEx)
+
+BOOL WINAPI StrToInt64ExA(LPCSTR,DWORD,LONGLONG*);
+BOOL WINAPI StrToInt64ExW(LPCWSTR,DWORD,LONGLONG*);
+#define StrToIntEx64 WINELIB_NAME_AW(StrToIntEx64)
+
+BOOL WINAPI StrTrimA(LPSTR,LPCSTR);
+BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);
+#define StrTrim WINELIB_NAME_AW(StrTrim)
+
+INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list);
+INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list);
+#define wvnsprintf WINELIB_NAME_AW(wvnsprintf)
+
+INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...);
+INT WINAPIV wnsprintfW(LPWSTR,INT,LPCWSTR, ...);
+#define wnsprintf WINELIB_NAME_AW(wnsprintf)
+
+HRESULT WINAPI SHLoadIndirectString(LPCWSTR,LPWSTR,UINT,PVOID*);
+
+BOOL WINAPI IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int);
+BOOL WINAPI IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int);
+#define IntlStrEqWorker WINELIB_NAME_AW(IntlStrEqWorker)
+
+#define IntlStrEqNA(s1,s2,n) IntlStrEqWorkerA(TRUE,s1,s2,n)
+#define IntlStrEqNW(s1,s2,n) IntlStrEqWorkerW(TRUE,s1,s2,n)
+#define IntlStrEqN WINELIB_NAME_AW(IntlStrEqN)
+
+#define IntlStrEqNIA(s1,s2,n) IntlStrEqWorkerA(FALSE,s1,s2,n)
+#define IntlStrEqNIW(s1,s2,n) IntlStrEqWorkerW(FALSE,s1,s2,n)
+#define IntlStrEqNI WINELIB_NAME_AW(IntlStrEqNI)
+
+HRESULT WINAPI StrRetToStrA(STRRET*,LPCITEMIDLIST,LPSTR*);
+HRESULT WINAPI StrRetToStrW(STRRET*,LPCITEMIDLIST,LPWSTR*);
+#define StrRetToStr WINELIB_NAME_AW(StrRetToStr)
+
+HRESULT WINAPI StrRetToBufA(STRRET*,LPCITEMIDLIST,LPSTR,UINT);
+HRESULT WINAPI StrRetToBufW(STRRET*,LPCITEMIDLIST,LPWSTR,UINT);
+#define StrRetToBuf WINELIB_NAME_AW(StrRetToBuf)
+
+HRESULT WINAPI StrRetToBSTR(STRRET*,LPCITEMIDLIST,BSTR*);
+
+BOOL WINAPI IsCharSpaceA(CHAR);
+BOOL WINAPI IsCharSpaceW(WCHAR);
+#define IsCharSpace WINELIB_NAME_AW(IsCharSpace)
+
+#endif /* NO_SHLWAPI_STRFCNS */
+
+
+/* GDI functions */
+#ifndef NO_SHLWAPI_GDI
+
+HPALETTE WINAPI SHCreateShellPalette(HDC);
+
+COLORREF WINAPI ColorHLSToRGB(WORD,WORD,WORD);
+
+COLORREF WINAPI ColorAdjustLuma(COLORREF,int,BOOL);
+
+VOID WINAPI ColorRGBToHLS(COLORREF,LPWORD,LPWORD,LPWORD);
+
+#endif /* NO_SHLWAPI_GDI */
+
+/* Security functions */
+BOOL WINAPI IsInternetESCEnabled(void);
+
+/* Stream functions */
+#ifndef NO_SHLWAPI_STREAM
+
+struct IStream * WINAPI SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD);
+struct IStream * WINAPI SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD);
+#define SHOpenRegStream WINELIB_NAME_AW(SHOpenRegStream2) /* Uses version 2 */
+
+struct IStream * WINAPI SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD);
+struct IStream * WINAPI SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD);
+#define SHOpenRegStream2 WINELIB_NAME_AW(SHOpenRegStream2)
+
+HRESULT WINAPI SHCreateStreamOnFileA(LPCSTR,DWORD,struct IStream**);
+HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR,DWORD,struct IStream**);
+#define SHCreateStreamOnFile WINELIB_NAME_AW(SHCreateStreamOnFile)
+
+HRESULT WINAPI SHCreateStreamOnFileEx(LPCWSTR,DWORD,DWORD,BOOL,struct IStream*,struct IStream**);
+
+HRESULT WINAPI SHCreateStreamWrapper(LPBYTE,DWORD,DWORD,struct IStream**);
+
+#endif /* NO_SHLWAPI_STREAM */
+
+/* SHAutoComplete flags */
+#define SHACF_DEFAULT 0x00000000
+#define SHACF_FILESYSTEM 0x00000001
+#define SHACF_URLHISTORY 0x00000002
+#define SHACF_URLMRU 0x00000004
+#define SHACF_URLALL (SHACF_URLHISTORY|SHACF_URLMRU)
+#define SHACF_USETAB 0x00000008
+#define SHACF_FILESYS_ONLY 0x00000010
+#define SHACF_FILESYS_DIRS 0x00000020
+#define SHACF_AUTOSUGGEST_FORCE_ON 0x10000000
+#define SHACF_AUTOSUGGEST_FORCE_OFF 0x20000000
+#define SHACF_AUTOAPPEND_FORCE_ON 0x40000000
+#define SHACF_AUTOAPPEND_FORCE_OFF 0x80000000
+
+HRESULT WINAPI SHAutoComplete(HWND,DWORD);
+
+/* Threads */
+HRESULT WINAPI SHCreateThreadRef(LONG*, IUnknown**);
+HRESULT WINAPI SHGetThreadRef(IUnknown**);
+HRESULT WINAPI SHSetThreadRef(IUnknown*);
+HRESULT WINAPI SHReleaseThreadRef(void);
+
+/* SHCreateThread flags */
+#define CTF_INSIST 0x01 /* Always call */
+#define CTF_THREAD_REF 0x02 /* Hold thread ref */
+#define CTF_PROCESS_REF 0x04 /* Hold process ref */
+#define CTF_COINIT 0x08 /* Startup COM first */
+#define CTF_FREELIBANDEXIT 0x10 /* Hold DLL ref */
+#define CTF_REF_COUNTED 0x20 /* Thread is ref counted */
+#define CTF_WAIT_ALLOWCOM 0x40 /* Allow marshalling */
+
+BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE);
+
+BOOL WINAPI SHSkipJunction(struct IBindCtx*,const CLSID*);
+
+/* Version Information */
+
+typedef struct _DllVersionInfo {
+ DWORD cbSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformID;
+} DLLVERSIONINFO;
+
+#define DLLVER_PLATFORM_WINDOWS 0x01 /* Win9x */
+#define DLLVER_PLATFORM_NT 0x02 /* WinNT */
+
+typedef HRESULT (CALLBACK *DLLGETVERSIONPROC)(DLLVERSIONINFO *);
+
+#ifdef __WINESRC__
+/* shouldn't be here, but is nice for type checking */
+HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *) DECLSPEC_HIDDEN;
+#endif
+
+typedef struct _DLLVERSIONINFO2 {
+ DLLVERSIONINFO info1;
+ DWORD dwFlags; /* Reserved */
+ ULONGLONG DECLSPEC_ALIGN(8) ullVersion; /* 16 bits each for Major, Minor, Build, QFE */
+} DLLVERSIONINFO2;
+
+#define DLLVER_MAJOR_MASK 0xFFFF000000000000
+#define DLLVER_MINOR_MASK 0x0000FFFF00000000
+#define DLLVER_BUILD_MASK 0x00000000FFFF0000
+#define DLLVER_QFE_MASK 0x000000000000FFFF
+
+#define MAKEDLLVERULL(mjr, mnr, bld, qfe) (((ULONGLONG)(mjr)<< 48)| \
+ ((ULONGLONG)(mnr)<< 32) | ((ULONGLONG)(bld)<< 16) | (ULONGLONG)(qfe))
+
+HRESULT WINAPI DllInstall(BOOL,LPCWSTR) DECLSPEC_HIDDEN;
+
+
+/* IsOS definitions */
+
+#define OS_WIN32SORGREATER 0x00
+#define OS_NT 0x01
+#define OS_WIN95ORGREATER 0x02
+#define OS_NT4ORGREATER 0x03
+#define OS_WIN2000ORGREATER_ALT 0x04
+#define OS_WIN98ORGREATER 0x05
+#define OS_WIN98_GOLD 0x06
+#define OS_WIN2000ORGREATER 0x07
+#define OS_WIN2000PRO 0x08
+#define OS_WIN2000SERVER 0x09
+#define OS_WIN2000ADVSERVER 0x0A
+#define OS_WIN2000DATACENTER 0x0B
+#define OS_WIN2000TERMINAL 0x0C
+#define OS_EMBEDDED 0x0D
+#define OS_TERMINALCLIENT 0x0E
+#define OS_TERMINALREMOTEADMIN 0x0F
+#define OS_WIN95_GOLD 0x10
+#define OS_MEORGREATER 0x11
+#define OS_XPORGREATER 0x12
+#define OS_HOME 0x13
+#define OS_PROFESSIONAL 0x14
+#define OS_DATACENTER 0x15
+#define OS_ADVSERVER 0x16
+#define OS_SERVER 0x17
+#define OS_TERMINALSERVER 0x18
+#define OS_PERSONALTERMINALSERVER 0x19
+#define OS_FASTUSERSWITCHING 0x1A
+#define OS_WELCOMELOGONUI 0x1B
+#define OS_DOMAINMEMBER 0x1C
+#define OS_ANYSERVER 0x1D
+#define OS_WOW6432 0x1E
+#define OS_WEBSERVER 0x1F
+#define OS_SMALLBUSINESSSERVER 0x20
+#define OS_TABLETPC 0x21
+#define OS_SERVERADMINUI 0x22
+#define OS_MEDIACENTER 0x23
+#define OS_APPLIANCE 0x24
+
+BOOL WINAPI IsOS(DWORD);
+
+/* SHSetTimerQueueTimer definitions */
+#define TPS_EXECUTEIO 0x00000001
+#define TPS_LONGEXECTIME 0x00000008
+
+/* SHFormatDateTimeA/SHFormatDateTimeW flags */
+#define FDTF_SHORTTIME 0x00000001
+#define FDTF_SHORTDATE 0x00000002
+#define FDTF_DEFAULT (FDTF_SHORTDATE | FDTF_SHORTTIME)
+#define FDTF_LONGDATE 0x00000004
+#define FDTF_LONGTIME 0x00000008
+#define FDTF_RELATIVE 0x00000010
+#define FDTF_LTRDATE 0x00000100
+#define FDTF_RTLDATE 0x00000200
+#define FDTF_NOAUTOREADINGORDER 0x00000400
+
+
+typedef struct
+{
+ const IID *piid;
+ int dwOffset;
+} QITAB, *LPQITAB;
+
+HRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv);
+
+#include <poppack.h>
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_SHLWAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl
new file mode 100644
index 00000000..8e7f041a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shobjidl.idl
@@ -0,0 +1,3408 @@
+/*
+ * COM interfaces for shell objects
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "docobj.idl";
+import "shtypes.idl";
+import "servprov.idl";
+import "comcat.idl";
+import "propidl.idl";
+/* FIXME: import "prsht.idl";*/
+import "msxml.idl";
+import "wtypes.idl";
+import "propsys.idl";
+import "objectarray.idl";
+/* FIXME: import "structuredquery.idl"; */
+
+cpp_quote("/* FIXME: #include <sherrors.h> */")
+
+
+/*****************************************************************************
+ * IPersistFolder interface
+ */
+[
+ object,
+ uuid(000214ea-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IPersistFolder : IPersist
+{
+ typedef IPersistFolder *LPPERSISTFOLDER;
+
+ HRESULT Initialize( [in] LPCITEMIDLIST pidl );
+}
+
+
+/*****************************************************************************
+ * IPersistFolder2 interface
+ */
+[
+ object,
+ uuid(1ac3d9f0-175c-11d1-95be-00609797ea4f),
+ pointer_default(unique)
+]
+interface IPersistFolder2 : IPersistFolder
+{
+ typedef IPersistFolder2 *LPPERSISTFOLDER2;
+
+ HRESULT GetCurFolder( [out] LPITEMIDLIST *ppidl );
+}
+
+
+/*****************************************************************************
+ * IPersistIDList interface
+ */
+[
+ object,
+ uuid(1079acfc-29bd-11d3-8e0d-00c04f6837d5),
+ pointer_default(unique)
+]
+interface IPersistIDList : IPersist
+{
+ HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
+ HRESULT GetIDList( [out] LPITEMIDLIST *ppidl );
+}
+
+
+/*****************************************************************************
+ * IEnumIDList interface
+ */
+[
+ object,
+ uuid(000214f2-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IEnumIDList : IUnknown
+{
+ typedef IEnumIDList *LPENUMIDLIST;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] LPITEMIDLIST *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip( [in] ULONG celt );
+ HRESULT Reset();
+ HRESULT Clone( [out] IEnumIDList **ppenum );
+}
+
+/*****************************************************************************
+ * IShellPropSheetExt interface
+ */
+cpp_quote("#if 0")
+ typedef LPARAM LPFNSVADDPROPSHEETPAGE;
+cpp_quote("#else")
+cpp_quote("#include <prsht.h>")
+cpp_quote("typedef LPFNADDPROPSHEETPAGE LPFNSVADDPROPSHEETPAGE;")
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(000214E9-0000-0000-C000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IShellPropSheetExt : IUnknown
+{
+ enum tagSHELLPROPSHEETEXTPAGEID {
+ EXPPS_FILETYPES = 0x1
+ };
+
+ typedef UINT EXPPS;
+
+ HRESULT AddPages(
+ [in] LPFNSVADDPROPSHEETPAGE pfnAddPage,
+ [in] LPARAM lParam);
+ HRESULT ReplacePage(
+ [in] EXPPS uPageID,
+ [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith,
+ [in] LPARAM lParam);
+}
+typedef IShellPropSheetExt *LPSHELLPROPSHEETEXT;
+
+/*****************************************************************************
+ * IShellFolder interface
+ */
+[
+ object,
+ uuid(000214e6-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IShellFolder : IUnknown
+{
+ typedef IShellFolder * LPSHELLFOLDER;
+
+ typedef enum tagSHGDN
+ {
+ SHGDN_NORMAL = 0,
+ SHGDN_INFOLDER = 1,
+ SHGDN_FOREDITING = 0x1000,
+ SHGDN_INCLUDE_NONFILESYS = 0x2000,
+ SHGDN_FORADDRESSBAR = 0x4000,
+ SHGDN_FORPARSING = 0x8000
+ } SHGNO;
+
+ typedef DWORD SHGDNF;
+
+ enum tagSHCONTF
+ {
+ SHCONTF_FOLDERS = 32,
+ SHCONTF_NONFOLDERS = 64,
+ SHCONTF_INCLUDEHIDDEN = 128,
+ SHCONTF_INIT_ON_FIRST_NEXT = 256,
+ SHCONTF_NETPRINTERSRCH = 512,
+ SHCONTF_SHAREABLE = 1024,
+ SHCONTF_STORAGE = 2048
+ };
+
+ typedef DWORD SHCONTF;
+
+ cpp_quote("#define SFGAO_CANCOPY DROPEFFECT_COPY")
+ cpp_quote("#define SFGAO_CANMOVE DROPEFFECT_MOVE")
+ cpp_quote("#define SFGAO_CANLINK DROPEFFECT_LINK")
+ cpp_quote("#define SFGAO_STORAGE 0x00000008L")
+ cpp_quote("#define SFGAO_CANRENAME 0x00000010L")
+ cpp_quote("#define SFGAO_CANDELETE 0x00000020L")
+ cpp_quote("#define SFGAO_HASPROPSHEET 0x00000040L")
+ cpp_quote("#define SFGAO_DROPTARGET 0x00000100L")
+ cpp_quote("#define SFGAO_CAPABILITYMASK 0x00000177L")
+ cpp_quote("#define SFGAO_ENCRYPTED 0x00002000L")
+ cpp_quote("#define SFGAO_ISSLOW 0x00004000L")
+ cpp_quote("#define SFGAO_GHOSTED 0x00008000L")
+ cpp_quote("#define SFGAO_LINK 0x00010000L")
+ cpp_quote("#define SFGAO_SHARE 0x00020000L")
+ cpp_quote("#define SFGAO_READONLY 0x00040000L")
+ cpp_quote("#define SFGAO_HIDDEN 0x00080000L")
+ cpp_quote("#define SFGAO_DISPLAYATTRMASK 0x000FC000L")
+ cpp_quote("#define SFGAO_FILESYSANCESTOR 0x10000000L")
+ cpp_quote("#define SFGAO_FOLDER 0x20000000L")
+ cpp_quote("#define SFGAO_FILESYSTEM 0x40000000L")
+ cpp_quote("#define SFGAO_HASSUBFOLDER 0x80000000L")
+ cpp_quote("#define SFGAO_CONTENTSMASK 0x80000000L")
+ cpp_quote("#define SFGAO_VALIDATE 0x01000000L")
+ cpp_quote("#define SFGAO_REMOVABLE 0x02000000L")
+ cpp_quote("#define SFGAO_COMPRESSED 0x04000000L")
+ cpp_quote("#define SFGAO_BROWSABLE 0x08000000L")
+ cpp_quote("#define SFGAO_NONENUMERATED 0x00100000L")
+ cpp_quote("#define SFGAO_NEWCONTENT 0x00200000L")
+ cpp_quote("#define SFGAO_STREAM 0x00400000L")
+ cpp_quote("#define SFGAO_STORAGEANCESTOR 0x00800000L")
+
+ typedef ULONG SFGAOF;
+
+ HRESULT ParseDisplayName(
+ [in] HWND hwndOwner,
+ [in] LPBC pbcReserved,
+ [in, string] LPOLESTR lpszDisplayName,
+ [out] ULONG *pchEaten,
+ [out] LPITEMIDLIST *ppidl,
+ [in, out, unique] ULONG *pdwAttributes);
+
+ HRESULT EnumObjects(
+ [in] HWND hwndOwner,
+ [in] SHCONTF grfFlags,
+ [out] IEnumIDList **ppenumIDList);
+
+ HRESULT BindToObject(
+ [in] LPCITEMIDLIST pidl,
+ [in] LPBC pbcReserved,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvOut);
+
+ HRESULT BindToStorage(
+ [in] LPCITEMIDLIST pidl,
+ [in] LPBC pbcReserved,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObj);
+
+ HRESULT CompareIDs(
+ [in] LPARAM lParam,
+ [in] LPCITEMIDLIST pidl1,
+ [in] LPCITEMIDLIST pidl2);
+
+ HRESULT CreateViewObject(
+ [in] HWND hwndOwner,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvOut);
+
+ HRESULT GetAttributesOf(
+ [in] UINT cidl,
+ [in, size_is(cidl)] LPCITEMIDLIST *apidl,
+ [in, out] SFGAOF *rgfInOut);
+
+ HRESULT GetUIObjectOf(
+ [in] HWND hwndOwner,
+ [in] UINT cidl,
+ [in, size_is(cidl)] LPCITEMIDLIST *apidl,
+ [in] REFIID riid,
+ [in, out, unique] UINT *prgfInOut,
+ [out, iid_is(riid)] void **ppvOut);
+
+ HRESULT GetDisplayNameOf(
+ [in] LPCITEMIDLIST pidl,
+ [in] SHGDNF uFlags,
+ [out] STRRET *lpName);
+
+ HRESULT SetNameOf(
+ [in] HWND hwnd,
+ [in] LPCITEMIDLIST pidl,
+ [in, string] LPCOLESTR lpszName,
+ [in] SHGDNF uFlags,
+ [out] LPITEMIDLIST *ppidlOut);
+}
+
+
+/*****************************************************************************
+ * IEnumExtraSearch interface
+ */
+[
+ object,
+ uuid(0e700be1-9db6-11d1-a1ce-00c04fd75d13),
+ pointer_default(unique)
+]
+interface IEnumExtraSearch : IUnknown
+{
+ typedef IEnumExtraSearch *LPENUMEXTRASEARCH;
+
+ typedef struct
+ {
+ GUID guidSearch;
+ WCHAR wszFriendlyName[80];
+ /*
+ *WCHAR wszMenuText[80];
+ *WCHAR wszHelpText[MAX_PATH];
+ */
+ WCHAR wszUrl[2084];
+ /*
+ *WCHAR wszIcon[MAX_PATH+10];
+ *WCHAR wszGreyIcon[MAX_PATH+10];
+ *WCHAR wszClrIcon[MAX_PATH+10];
+ */
+ } EXTRASEARCH, *LPEXTRASEARCH;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] EXTRASEARCH *rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip( [in] ULONG celt );
+ HRESULT Reset();
+ HRESULT Clone( [out] IEnumExtraSearch **ppenum );
+}
+
+
+/*****************************************************************************
+ * IShellFolder2 interface
+ */
+[
+ object,
+ uuid(93f2f68c-1d1b-11d3-a30e-00c04f79abd1),
+ pointer_default(unique)
+]
+interface IShellFolder2 : IShellFolder
+{
+ typedef struct
+ {
+ GUID fmtid;
+ DWORD pid;
+ } SHCOLUMNID, *LPSHCOLUMNID;
+ typedef const SHCOLUMNID *LPCSHCOLUMNID;
+
+ HRESULT GetDefaultSearchGUID( [out] GUID *lpguid );
+ HRESULT EnumSearches( [out] IEnumExtraSearch **ppenum );
+ HRESULT GetDefaultColumn( [in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay );
+ HRESULT GetDefaultColumnState( [in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags );
+ HRESULT GetDetailsEx( [in] LPCITEMIDLIST pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv);
+ HRESULT GetDetailsOf( [in] LPCITEMIDLIST pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd);
+ HRESULT MapColumnToSCID( [in] UINT iColumn, [in] SHCOLUMNID *pscid );
+}
+
+/*****************************************************************************
+ * IShellItem interface
+ */
+[
+ object,
+ uuid(43826d1e-e718-42ee-bc55-a1e261c37bfe),
+ pointer_default(unique)
+]
+interface IShellItem : IUnknown
+{
+ typedef [v1_enum] enum {
+ SIGDN_NORMALDISPLAY = 0,
+ SIGDN_PARENTRELATIVEPARSING = 0x80018001,
+ SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000,
+ SIGDN_PARENTRELATIVEEDITING = 0x80031001,
+ SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000,
+ SIGDN_FILESYSPATH = 0x80058000,
+ SIGDN_URL = 0x80068000,
+ SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001,
+ SIGDN_PARENTRELATIVE = 0x80080001
+ } SIGDN; /* & 0xFFFF => SHGDN */
+
+ [v1_enum] enum _SICHINTF
+ {
+ SICHINT_DISPLAY = 0x00000000,
+ SICHINT_CANONICAL = 0x10000000,
+ SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000,
+ SICHINT_ALLFIELDS = 0x80000000
+ };
+ typedef DWORD SICHINTF;
+
+ HRESULT BindToHandler(
+ [in] IBindCtx *pbc,
+ [in] REFGUID rbhid,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvOut);
+
+ HRESULT GetParent( [out] IShellItem **ppsi );
+
+ HRESULT GetDisplayName(
+ [in] SIGDN sigdnName,
+ [out] LPWSTR *ppszName);
+
+ HRESULT GetAttributes(
+ [in] SFGAOF sfgaoMask,
+ [out] SFGAOF *psfgaoAttribs);
+
+ HRESULT Compare(
+ [in] IShellItem *psi,
+ [in] SICHINTF hint,
+ [out] int *piOrder);
+}
+
+/*****************************************************************************
+ * IShellItem2 interface
+ */
+[
+ object,
+ uuid(7E9FB0D3-919F-4307-AB2E-9B1860310C93),
+ pointer_default(unique)
+]
+interface IShellItem2 : IShellItem
+{
+ HRESULT GetPropertyStore(
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT GetPropertyStoreWithCreateObject(
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in] IUnknown *punkCreateObject,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT GetPropertyStoreForKeys(
+ [in, size_is(cKeys)] const PROPERTYKEY *rgKeys,
+ [in] UINT cKeys,
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT GetPropertyDescriptionList(
+ [in] REFPROPERTYKEY keyType,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT Update(
+ [in, unique] IBindCtx *pbc);
+
+ HRESULT GetProperty(
+ [in] REFPROPERTYKEY key,
+ [out] PROPVARIANT *ppropvar);
+
+ HRESULT GetCLSID(
+ [in] REFPROPERTYKEY key,
+ [out] CLSID *pclsid);
+
+ HRESULT GetFileTime (
+ [in] REFPROPERTYKEY key,
+ [out] FILETIME *pft);
+
+ HRESULT GetInt32(
+ [in] REFPROPERTYKEY key,
+ [out] int *pi);
+
+ HRESULT GetString(
+ [in] REFPROPERTYKEY key,
+ [out, string] LPWSTR *ppsz);
+
+ HRESULT GetUInt32(
+ [in] REFPROPERTYKEY key,
+ [out] ULONG *pui);
+
+ HRESULT GetUInt64(
+ [in] REFPROPERTYKEY key,
+ [out] ULONGLONG *pull);
+
+ HRESULT GetBool(
+ [in] REFPROPERTYKEY key,
+ [out] BOOL *pf);
+}
+
+typedef enum tagNWMF {
+ NWMF_UNLOADING = 0x0001,
+ NWMF_USERINITED = 0x0002,
+ NWMF_FIRST = 0x0004,
+ NWMF_OVERRIDEKEY = 0x0008,
+ NWMF_SHOWHELP = 0x0010,
+ NWMF_HTMLDIALOG = 0x0020,
+ NWMF_FROMDIALOGCHILD = 0x0040,
+ NWMF_USERREQUESTED = 0x0080,
+ NWMF_USERALLOWED = 0x0100
+} NWMF;
+
+[
+ uuid(d2bc4c84-3f72-4a52-a604-7bcbf3982cbb),
+ object,
+ pointer_default(unique)
+]
+interface INewWindowManager : IUnknown
+{
+ HRESULT EvaluateNewWindow(
+ [in, string] LPCWSTR pszUrl,
+ [in, string] LPCWSTR pszName,
+ [in, string] LPCWSTR pszUrlContext,
+ [in, string] LPCWSTR pszFeatures,
+ [in] BOOL fReplace,
+ [in] DWORD dwFlags,
+ [in] DWORD dwUserActionTime);
+}
+
+cpp_quote("#define SID_SNewWindowManager IID_INewWindowManager")
+
+/*****************************************************************************
+ * IEnumShellItems interface
+ */
+[
+ object,
+ uuid(70629033-E363-4A28-A567-0DB78006E6D7),
+ pointer_default(unique)
+]
+interface IEnumShellItems : IUnknown
+{
+ [local] HRESULT Next(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
+ [out] ULONG *pceltFetched);
+
+ [call_as(Next)] HRESULT RemoteNext(
+ [in] ULONG celt,
+ [out, size_is(celt), length_is(*pceltFetched)] IShellItem **rgelt,
+ [out] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumShellItems **ppenum);
+}
+
+/*****************************************************************************
+ * IShellItemArray interface
+ */
+[
+ object,
+ uuid(B63EA76D-1F85-456F-A19C-48159EFA858B),
+ pointer_default(unique)
+]
+interface IShellItemArray : IUnknown
+{
+ typedef [v1_enum] enum SIATTRIBFLAGS {
+ SIATTRIBFLAGS_AND = 0x0001,
+ SIATTRIBFLAGS_OR = 0x0002,
+ SIATTRIBFLAGS_APPCOMPAT = 0x0003,
+ SIATTRIBFLAGS_MASK = 0x0003,
+ SIATTRIBFLAGS_ALLITEMS = 0x4000
+ } SIATTRIBFLAGS;
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(SIATTRIBFLAGS)")
+
+ HRESULT BindToHandler(
+ [in, unique] IBindCtx *pbc,
+ [in] REFGUID bhid,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvOut);
+
+ HRESULT GetPropertyStore(
+ [in] GETPROPERTYSTOREFLAGS flags,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT GetPropertyDescriptionList(
+ [in] REFPROPERTYKEY keyType,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT GetAttributes(
+ [in] SIATTRIBFLAGS AttribFlags,
+ [in] SFGAOF sfgaoMask,
+ [out] SFGAOF *psfgaoAttribs);
+
+ HRESULT GetCount(
+ [out] DWORD *pdwNumItems);
+
+ HRESULT GetItemAt(
+ [in] DWORD dwIndex,
+ [out] IShellItem **ppsi);
+
+ HRESULT EnumItems(
+ [out] IEnumShellItems **ppenumShellItems);
+
+}
+
+typedef [v1_enum] enum DATAOBJ_GET_ITEM_FLAGS
+{
+ DOGIF_DEFAULT = 0x0,
+ DOGIF_TRAVERSE_LINK = 0x1,
+ DOGIF_NO_HDROP = 0x2,
+ DOGIF_NO_URL = 0x4,
+ DOGIF_ONLY_IF_ONE = 0x8
+} DATAOBJ_GET_ITEM_FLAGS;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(DATAOBJ_GET_ITEM_FLAGS)")
+
+cpp_quote("HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName);")
+cpp_quote("HRESULT WINAPI SHCreateItemFromParsingName(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHCreateItemFromIDList(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHGetItemFromDataObject(IDataObject *pdtobj, DATAOBJ_GET_ITEM_FLAGS dwFlags, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHGetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl);")
+cpp_quote("HRESULT WINAPI SHGetItemFromObject(IUnknown *punk, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHCreateShellItemArray(PCIDLIST_ABSOLUTE pidlParent, IShellFolder* psf, UINT cidl, PCUITEMID_CHILD_ARRAY ppidl, IShellItemArray **ppsiItemArray);")
+cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromShellItem(IShellItem *psi, REFIID riid, void **ppv);")
+cpp_quote("HRESULT WINAPI SHCreateShellItemArrayFromDataObject(IDataObject *pdo, REFIID riid, void **ppv);")
+
+/*****************************************************************************
+ * IShellItemFilter interface
+ */
+[
+ object,
+ uuid(2659B475-EEB8-48B7-8F07-B378810F48CF),
+ pointer_default(unique)
+]
+interface IShellItemFilter : IUnknown
+{
+ HRESULT IncludeItem(
+ [in] IShellItem *psi);
+
+ HRESULT GetEnumFlagsForItem(
+ [in] IShellItem *psi,
+ [out] SHCONTF *pgrfFlags);
+}
+
+/*****************************************************************************
+ * FOLDERSETTINGS
+ */
+typedef char *LPVIEWSETTINGS;
+
+typedef enum
+{
+ FWF_AUTOARRANGE = 0x00000001,
+ FWF_ABBREVIATEDNAMES = 0x00000002,
+ FWF_SNAPTOGRID = 0x00000004,
+ FWF_OWNERDATA = 0x00000008,
+ FWF_BESTFITWINDOW = 0x00000010,
+ FWF_DESKTOP = 0x00000020,
+ FWF_SINGLESEL = 0x00000040,
+ FWF_NOSUBFOLDERS = 0x00000080,
+ FWF_TRANSPARENT = 0x00000100,
+ FWF_NOCLIENTEDGE = 0x00000200,
+ FWF_NOSCROLL = 0x00000400,
+ FWF_ALIGNLEFT = 0x00000800,
+ FWF_NOICONS = 0x00001000,
+ FWF_SHOWSELALWAYS = 0x00002000,
+ FWF_NOVISIBLE = 0x00004000,
+ FWF_SINGLECLICKACTIVATE = 0x00008000,
+ FWF_NOWEBVIEW = 0x00010000,
+ FWF_HIDEFILENAMES = 0x00020000,
+ FWF_CHECKSELECT = 0x00040000,
+ FWF_NOENUMREFRESH = 0x00080000,
+ FWF_NOGROUPING = 0x00100000,
+ FWF_FULLROWSELECT = 0x00200000,
+ FWF_NOFILTERS = 0x00400000,
+ FWF_NOCOLUMNHEADER = 0x00800000,
+ FWF_NOHEADERINALLVIEWS = 0x01000000,
+ FWF_EXTENDEDTILES = 0x02000000,
+ FWF_TRICHECKSELECT = 0x04000000,
+ FWF_AUTOCHECKSELECT = 0x08000000,
+ FWF_NOBROWSERVIEWSTATE = 0x10000000,
+ FWF_SUBSETGROUPS = 0x20000000,
+ FWF_USESEARCHFOLDER = 0x40000000,
+ FWF_ALLOWRTLREADING = 0x80000000
+} FOLDERFLAGS;
+
+typedef enum
+{
+ FVM_AUTO =-1,
+ FVM_ICON = 1,
+ FVM_FIRST = FVM_ICON,
+ FVM_SMALLICON = 2,
+ FVM_LIST = 3,
+ FVM_DETAILS = 4,
+ FVM_THUMBNAIL = 5,
+ FVM_TILE = 6,
+ FVM_THUMBSTRIP = 7,
+ FVM_CONTENT = 8,
+ FVM_LAST = FVM_CONTENT
+} FOLDERVIEWMODE;
+
+typedef struct
+{
+ UINT ViewMode;
+ UINT fFlags;
+} FOLDERSETTINGS, *PFOLDERSETTINGS, *LPFOLDERSETTINGS;
+typedef const FOLDERSETTINGS *LPCFOLDERSETTINGS;
+
+/*****************************************************************************
+ * IShellIcon interface
+ */
+[
+ uuid(000214e5-0000-0000-c000-000000000046),
+ object,
+ pointer_default(unique)
+]
+interface IShellIcon : IUnknown
+{
+ HRESULT GetIconOf(
+ [in] PCUITEMID_CHILD pidl,
+ [in] UINT flags,
+ [out] int *pIconIndex);
+}
+
+/*****************************************************************************
+ * IShellView interface
+ */
+interface IShellBrowser; /* forward declaration */
+[
+ object,
+ uuid(000214e3-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IShellView : IOleWindow
+{
+ typedef IShellView *LPSHELLVIEW;
+
+ cpp_quote("#define SVSI_DESELECT 0x00000000")
+ cpp_quote("#define SVSI_SELECT 0x00000001")
+ cpp_quote("#define SVSI_EDIT 0x00000003")
+ cpp_quote("#define SVSI_DESELECTOTHERS 0x00000004")
+ cpp_quote("#define SVSI_ENSUREVISIBLE 0x00000008")
+ cpp_quote("#define SVSI_FOCUSED 0x00000010")
+ cpp_quote("#define SVSI_TRANSLATEPT 0x00000020")
+ cpp_quote("#define SVSI_SELECTIONMARK 0x00000040")
+ cpp_quote("#define SVSI_POSITIONITEM 0x00000080")
+ cpp_quote("#define SVSI_CHECK 0x00000100")
+ cpp_quote("#define SVSI_NOSTATECHANGE 0x80000000")
+
+ typedef UINT SVSIF;
+
+ typedef enum
+ {
+ SVGIO_BACKGROUND = 0x00000000,
+ SVGIO_SELECTION = 0x00000001,
+ SVGIO_ALLVIEW = 0x00000002,
+ SVGIO_CHECKED = 0x00000003,
+ SVGIO_TYPE_MASK = 0x0000000f,
+ SVGIO_FLAG_VIEWORDER = 0x80000000,
+ } SVGIO;
+
+ typedef enum
+ {
+ SVUIA_DEACTIVATE = 0,
+ SVUIA_ACTIVATE_NOFOCUS = 1,
+ SVUIA_ACTIVATE_FOCUS = 2,
+ SVUIA_INPLACEACTIVATE = 3
+ } SVUIA_STATUS;
+
+ HRESULT TranslateAccelerator( [in] MSG *pmsg );
+ HRESULT EnableModeless( [in] BOOL fEnable );
+ HRESULT UIActivate( [in] UINT uState );
+ HRESULT Refresh();
+ HRESULT CreateViewWindow(
+ [in] IShellView *psvPrevious,
+ [in] LPCFOLDERSETTINGS lpfs,
+ [in] IShellBrowser *psb,
+ [out] RECT *prcView,
+ [out] HWND *phWnd);
+
+ HRESULT DestroyViewWindow();
+ HRESULT GetCurrentInfo( [out] LPFOLDERSETTINGS lpfs );
+
+ [local] HRESULT AddPropertySheetPages(
+ [in] DWORD dwReserved,
+ [in] LPFNSVADDPROPSHEETPAGE pfn,
+ [in] LPARAM lparam);
+
+ HRESULT SaveViewState();
+ HRESULT SelectItem(
+ [in] LPCITEMIDLIST pidlItem,
+ [in] SVSIF uFlags);
+ HRESULT GetItemObject(
+ [in] UINT uItem,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+}
+
+[
+ object,
+ uuid(88e39e80-3578-11cf-ae69-08002b2e1262),
+ pointer_default(unique)
+]
+interface IShellView2 : IShellView
+{
+ typedef GUID SHELLVIEWID;
+cpp_quote("#include <pshpack8.h>")
+ typedef struct _SV2CVW2_PARAMS
+ {
+ DWORD cbSize;
+ IShellView *psvPrev;
+ LPCFOLDERSETTINGS pfs;
+ IShellBrowser *psbOwner;
+ RECT *prcView;
+ SHELLVIEWID const *pvid;
+ HWND hwndView;
+ } SV2CVW2_PARAMS, *LPSV2CVW2_PARAMS;
+cpp_quote("#include <poppack.h>")
+
+ HRESULT GetView(
+ [in, out] SHELLVIEWID *view_guid,
+ [in] ULONG view_type
+ );
+ HRESULT CreateViewWindow2(
+ [in] LPSV2CVW2_PARAMS view_params
+ );
+ HRESULT HandleRename(
+ [in] LPCITEMIDLIST new_pidl
+ );
+ HRESULT SelectAndPositionItem(
+ [in] LPCITEMIDLIST item,
+ [in] UINT flags,
+ [in] POINT *point
+ );
+}
+
+/*****************************************************************************
+ * IFolderView interface
+ */
+[
+ uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
+ object,
+ pointer_default(unique)
+]
+interface IFolderView : IUnknown
+{
+ HRESULT GetCurrentViewMode( [out] UINT *mode );
+ HRESULT SetCurrentViewMode( [in] UINT mode );
+ HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv );
+ HRESULT Item(
+ [in] int index,
+ [out] PITEMID_CHILD *ppidl
+ );
+ HRESULT ItemCount(
+ [in] UINT flags,
+ [out] int *items
+ );
+ HRESULT Items(
+ [in] UINT flags,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv
+ );
+ HRESULT GetSelectionMarkedItem( [out] int *item );
+ HRESULT GetFocusedItem( [out] int *item );
+ HRESULT GetItemPosition(
+ [in] PCUITEMID_CHILD pidl,
+ [out] POINT* ppt
+ );
+ HRESULT GetSpacing( [in, out, unique] POINT* pt );
+ HRESULT GetDefaultSpacing( [out] POINT* pt );
+ HRESULT GetAutoArrange();
+ HRESULT SelectItem(
+ [in] int item,
+ [in] DWORD flags
+ );
+ HRESULT SelectAndPositionItems(
+ [in] UINT cidl,
+ [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
+ [in, unique, size_is(cidl)] POINT* apt,
+ [in] DWORD flags
+ );
+}
+
+/*****************************************************************************
+ * IShellBrowser interface
+ */
+[
+ object,
+ uuid(000214e2-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IShellBrowser : IOleWindow
+{
+ typedef IShellBrowser *LPSHELLBROWSER;
+
+cpp_quote("#define SBSP_DEFBROWSER 0x00000000")
+cpp_quote("#define SBSP_SAMEBROWSER 0x00000001")
+cpp_quote("#define SBSP_NEWBROWSER 0x00000002")
+cpp_quote("#define SBSP_DEFMODE 0x00000000")
+cpp_quote("#define SBSP_OPENMODE 0x00000010")
+cpp_quote("#define SBSP_EXPLOREMODE 0x00000020")
+cpp_quote("#define SBSP_HELPMODE 0x00000040")
+cpp_quote("#define SBSP_NOTRANSFERHIST 0x00000080")
+cpp_quote("#define SBSP_ABSOLUTE 0x00000000")
+cpp_quote("#define SBSP_RELATIVE 0x00001000")
+cpp_quote("#define SBSP_PARENT 0x00002000")
+cpp_quote("#define SBSP_NAVIGATEBACK 0x00004000")
+cpp_quote("#define SBSP_NAVIGATEFORWARD 0x00008000")
+cpp_quote("#define SBSP_ALLOW_AUTONAVIGATE 0x00010000")
+cpp_quote("#define SBSP_KEEPSAMETEMPLATE 0x00020000")
+cpp_quote("#define SBSP_KEEPWORDWHEELTEXT 0x00040000")
+cpp_quote("#define SBSP_ACTIVATE_NOFOCUS 0x00080000")
+cpp_quote("#define SBSP_CREATENOHISTORY 0x00100000")
+cpp_quote("#define SBSP_PLAYNOSOUND 0x00200000")
+cpp_quote("#define SBSP_CALLERUNTURUSTED 0x00800000")
+cpp_quote("#define SBSP_TRUSTFIRSTDOWNLOAD 0x01000000")
+cpp_quote("#define SBSP_UNTRUSTEDFORDOWNLOAD 0x02000000")
+cpp_quote("#define SBSP_NOAUTOSELECT 0x04000000")
+cpp_quote("#define SBSP_WRITENOHISTORY 0x08000000")
+cpp_quote("#define SBSP_TRUSTEDFORACTIVEX 0x10000000")
+cpp_quote("#define SBSP_FEEDNAVIGATION 0x20000000")
+cpp_quote("#define SBSP_REDIRECT 0x40000000")
+cpp_quote("#define SBSP_INITIATEDBYHLINKFRAME 0x80000000")
+
+cpp_quote("#define FCW_STATUS 0x0001")
+cpp_quote("#define FCW_TOOLBAR 0x0002")
+cpp_quote("#define FCW_TREE 0x0003")
+cpp_quote("#define FCW_INTERNETBAR 0x0006")
+cpp_quote("#define FCW_PROGRESS 0x0008")
+
+cpp_quote("#define FCT_MERGE 0x0001")
+cpp_quote("#define FCT_CONFIGABLE 0x0002")
+cpp_quote("#define FCT_ADDTOEND 0x0004")
+
+cpp_quote("#if 0")
+ typedef LPARAM LPTBBUTTONSB;
+cpp_quote("#else")
+cpp_quote("#include <commctrl.h>")
+cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")
+cpp_quote("#endif")
+
+ HRESULT InsertMenusSB(
+ [in] HMENU hmenuShared,
+ [in, out] LPOLEMENUGROUPWIDTHS lpMenuWidths);
+
+ HRESULT SetMenuSB(
+ [in] HMENU hmenuShared,
+ [in] HOLEMENU holemenuReserved,
+ [in] HWND hwndActiveObject);
+
+ HRESULT RemoveMenusSB( [in] HMENU hmenuShared );
+ HRESULT SetStatusTextSB( [in, unique] LPCOLESTR pszStatusText );
+ HRESULT EnableModelessSB( [in] BOOL fEnable );
+ HRESULT TranslateAcceleratorSB( [in] MSG *pmsg, [in] WORD wID );
+
+ HRESULT BrowseObject(
+ [in] LPCITEMIDLIST pidl,
+ [in] UINT wFlags);
+
+ HRESULT GetViewStateStream(
+ [in] DWORD grfMode,
+ [out] IStream **ppStrm);
+
+ HRESULT GetControlWindow(
+ [in] UINT id,
+ [out] HWND *phwnd);
+
+ [local] HRESULT SendControlMsg(
+ [in] UINT id,
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [in] LRESULT *pret);
+
+ HRESULT QueryActiveShellView( [out] IShellView **ppshv );
+ HRESULT OnViewWindowActive( [in] IShellView *pshv );
+
+ [local]
+ HRESULT SetToolbarItems(
+ [in] LPTBBUTTONSB lpButtons,
+ [in] UINT nButtons,
+ [in] UINT uFlags);
+}
+
+
+/*****************************************************************************
+ * IShellLinkA interface
+ */
+[
+ object,
+ uuid(000214ee-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IShellLinkA : IUnknown
+{
+ typedef enum
+ {
+ SLR_NO_UI = 0x0001,
+ SLR_ANY_MATCH = 0x0002,
+ SLR_UPDATE = 0x0004,
+ SLR_NOUPDATE = 0x0008,
+ SLR_NOSEARCH = 0x0010,
+ SLR_NOTRACK = 0x0020,
+ SLR_NOLINKINFO = 0x0040,
+ SLR_INVOKE_MSI = 0x0080,
+ SLR_NO_UI_WITH_MSG_PUMP = 0x0101,
+ } SLR_FLAGS;
+
+ typedef enum
+ {
+ SLGP_SHORTPATH = 0x0001,
+ SLGP_UNCPRIORITY = 0x0002,
+ SLGP_RAWPATH = 0x0004,
+ } SLGP_FLAGS;
+
+ HRESULT GetPath(
+ [out, size_is(cch)] LPSTR pszFile,
+ [in] int cch,
+ [in, out, unique] WIN32_FIND_DATAA *pfd,
+ [in] DWORD fFlags);
+
+ HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );
+
+ HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
+
+ HRESULT GetDescription(
+ [out, size_is(cch)] LPSTR pszName,
+ [in] int cch);
+
+ HRESULT SetDescription( [in] LPCSTR pszName );
+
+ HRESULT GetWorkingDirectory(
+ [out, size_is(cch)] LPSTR pszDir,
+ [in] int cch);
+
+ HRESULT SetWorkingDirectory( [in] LPCSTR pszDir );
+
+ HRESULT GetArguments(
+ [out, size_is(cch)] LPSTR pszArgs,
+ [in] int cch);
+
+ HRESULT SetArguments( [in] LPCSTR pszArgs );
+
+ HRESULT GetHotkey( [out] WORD *pwHotkey );
+
+ HRESULT SetHotkey( [in] WORD wHotkey );
+
+ HRESULT GetShowCmd( [out] int *piShowCmd );
+
+ HRESULT SetShowCmd( [in] int iShowCmd );
+
+ HRESULT GetIconLocation(
+ [out, size_is(cch)] LPSTR pszIconPath,
+ [in] int cch,
+ [out] int *piIcon);
+
+ HRESULT SetIconLocation(
+ [in] LPCSTR pszIconPath,
+ [in] int iIcon);
+
+ HRESULT SetRelativePath(
+ [in] LPCSTR pszPathRel,
+ [in] DWORD dwReserved);
+
+ HRESULT Resolve(
+ [in] HWND hwnd,
+ [in] DWORD fFlags);
+
+ HRESULT SetPath( [in] LPCSTR pszFile );
+}
+
+
+/*****************************************************************************
+ * IShellLinkW interface
+ */
+[
+ object,
+ uuid(000214f9-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface IShellLinkW : IUnknown
+{
+ HRESULT GetPath(
+ [out, size_is(cch)] LPWSTR pszFile,
+ [in] int cch,
+ [in, out] WIN32_FIND_DATAW *pfd,
+ [in] DWORD fFlags);
+
+ HRESULT GetIDList( [out] LPITEMIDLIST * ppidl );
+
+ HRESULT SetIDList( [in] LPCITEMIDLIST pidl );
+
+ HRESULT GetDescription(
+ [out, size_is(cch)] LPWSTR pszName,
+ [in] int cch);
+
+ HRESULT SetDescription( [in] LPCWSTR pszName );
+
+ HRESULT GetWorkingDirectory(
+ [out, size_is(cch)] LPWSTR pszDir,
+ [in] int cch);
+
+ HRESULT SetWorkingDirectory( [in] LPCWSTR pszDir );
+
+ HRESULT GetArguments(
+ [out, size_is(cch)] LPWSTR pszArgs,
+ [in] int cch);
+
+ HRESULT SetArguments( [in] LPCWSTR pszArgs );
+
+ HRESULT GetHotkey( [out] WORD *pwHotkey );
+
+ HRESULT SetHotkey( [in] WORD wHotkey );
+
+ HRESULT GetShowCmd( [out] int *piShowCmd );
+
+ HRESULT SetShowCmd( [in] int iShowCmd );
+
+ HRESULT GetIconLocation(
+ [out, size_is(cch)] LPWSTR pszIconPath,
+ [in] int cch,
+ [out] int *piIcon);
+
+ HRESULT SetIconLocation(
+ [in] LPCWSTR pszIconPath,
+ [in] int iIcon);
+
+ HRESULT SetRelativePath(
+ [in] LPCWSTR pszPathRel,
+ [in] DWORD dwReserved);
+
+ HRESULT Resolve(
+ [in] HWND hwnd,
+ [in] DWORD fFlags);
+
+ HRESULT SetPath( [in] LPCWSTR pszFile );
+}
+
+cpp_quote("#define IShellLink WINELIB_NAME_AW(IShellLink)")
+
+
+/*****************************************************************************
+ * IShellExtInit interface
+ */
+[
+ object,
+ uuid(000214e8-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IShellExtInit : IUnknown
+{
+ typedef IShellExtInit *LPSHELLEXTINIT;
+
+ HRESULT Initialize(
+ [in] LPCITEMIDLIST pidlFolder,
+ [in] IDataObject *pdtobj,
+ [in] HKEY hkeyProgID);
+}
+
+
+/*******************************************************************************/
+/* Note: the following interfaces are not in shobjidl.idl under Windows, they */
+/* are declared directly in shlobj.h. It hopefully won't break anything to put */
+/* them here anyway. */
+/*******************************************************************************/
+
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
+
+
+/*****************************************************************************
+ * IPersistFolder3 interface
+ */
+[
+ object,
+ uuid(cef04fdf-fe72-11d2-87a5-00c04f6837cf),
+ pointer_default(unique)
+]
+interface IPersistFolder3 : IPersistFolder2
+{
+ typedef struct
+ {
+ LPITEMIDLIST pidlTargetFolder;
+ WCHAR szTargetParsingName[MAX_PATH];
+ WCHAR szNetworkProvider[MAX_PATH];
+ DWORD dwAttributes;
+ int csidl;
+ } PERSIST_FOLDER_TARGET_INFO;
+
+ HRESULT InitializeEx(
+ [in] IBindCtx *pbc,
+ [in] LPCITEMIDLIST pidlRoot,
+ [in] const PERSIST_FOLDER_TARGET_INFO *ppfti);
+
+ HRESULT GetFolderTargetInfo( [out] PERSIST_FOLDER_TARGET_INFO *ppfti );
+}
+
+
+/*****************************************************************************
+ * IExtractIconA interface
+ */
+[
+ object,
+ uuid(000214eb-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IExtractIconA : IUnknown
+{
+cpp_quote("#define GIL_OPENICON 0x0001")
+cpp_quote("#define GIL_FORSHELL 0x0002")
+cpp_quote("#define GIL_ASYNC 0x0020")
+cpp_quote("#define GIL_DEFAULTICON 0x0040")
+cpp_quote("#define GIL_FORSHORTCUT 0x0080")
+
+cpp_quote("#define GIL_SIMULATEDOC 0x0001")
+cpp_quote("#define GIL_PERINSTANCE 0x0002")
+cpp_quote("#define GIL_PERCLASS 0x0004")
+cpp_quote("#define GIL_NOTFILENAME 0x0008")
+cpp_quote("#define GIL_DONTCACHE 0x0010")
+
+ typedef IExtractIconA *LPEXTRACTICONA;
+
+ HRESULT GetIconLocation(
+ [in] UINT uFlags,
+ [out, size_is(cchMax)] LPSTR szIconFile,
+ [in] UINT cchMax,
+ [out] INT *piIndex,
+ [out] UINT *pwFlags);
+
+ HRESULT Extract(
+ [in] LPCSTR pszFile,
+ [in] UINT nIconIndex,
+ [out] HICON *phiconLarge,
+ [out] HICON *phiconSmall,
+ [in] UINT nIconSize );
+}
+
+
+/*****************************************************************************
+ * IExtractIconW interface
+ */
+[
+ object,
+ uuid(000214fa-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IExtractIconW : IUnknown
+{
+ typedef IExtractIconW *LPEXTRACTICONW;
+
+ HRESULT GetIconLocation(
+ [in] UINT uFlags,
+ [out, size_is(cchMax)] LPWSTR szIconFile,
+ [in] UINT cchMax,
+ [out] INT *piIndex,
+ [out] UINT *pwFlags);
+
+ HRESULT Extract(
+ [in] LPCWSTR pszFile,
+ [in] UINT nIconIndex,
+ [out] HICON *phiconLarge,
+ [out] HICON *phiconSmall,
+ [in] UINT nIconSize );
+}
+
+cpp_quote("#define LPEXTRACTICON WINELIB_NAME_AW(LPEXTRACTICON)")
+cpp_quote("#define IExtractIcon WINELIB_NAME_AW(IExtractIcon)")
+
+
+/*****************************************************************************
+ * ICommDlgBrowser interface
+ */
+[
+ object,
+ uuid(000214f1-0000-0000-c000-000000000046),
+ pointer_default(unique)
+]
+interface ICommDlgBrowser : IUnknown
+{
+cpp_quote("#define CDBOSC_SETFOCUS 0x00000000")
+cpp_quote("#define CDBOSC_KILLFOCUS 0x00000001")
+cpp_quote("#define CDBOSC_SELCHANGE 0x00000002")
+cpp_quote("#define CDBOSC_RENAME 0x00000003")
+cpp_quote("#define CDBOSC_STATECHANGE 0x00000004")
+
+ typedef ICommDlgBrowser *LPCOMMDLGBROWSER;
+
+ HRESULT OnDefaultCommand( [in] IShellView *shv );
+ HRESULT OnStateChange( [in] IShellView *shv, [in] ULONG uChange );
+ HRESULT IncludeObject( [in] IShellView *shv, [in] LPCITEMIDLIST pidl );
+}
+
+
+/*****************************************************************************
+ * ICommDlgBrowser2 interface
+ */
+[
+ object,
+ uuid(10339516-2894-11D2-9039-00C04F8EEB3E),
+ pointer_default(unique)
+]
+interface ICommDlgBrowser2 : ICommDlgBrowser
+{
+
+ HRESULT Notify(
+ [in] IShellView *ppshv,
+ [in] DWORD dwNotifyType);
+
+ HRESULT GetDefaultMenuText(
+ [in] IShellView *ppshv,
+ [out, string, size_is(cchMax)] LPWSTR pszText,
+ [in] int cchMax);
+
+ HRESULT GetViewFlags(
+ [out] DWORD *pdwFlags);
+}
+
+
+/*****************************************************************************
+ * ICommDlgBrowser3 interface
+ */
+[
+ object,
+ uuid(C8AD25A1-3294-41EE-8165-71174BD01C57),
+ pointer_default(unique)
+]
+interface ICommDlgBrowser3 : ICommDlgBrowser2
+{
+
+ HRESULT OnColumnClicked(
+ [in] IShellView *ppshv,
+ [in] int iColumn);
+
+ HRESULT GetCurrentFilter(
+ [out, string, size_is(cchFileSpec)] LPWSTR pszFileSpec,
+ [in] int cchFileSpec);
+
+ HRESULT OnPreviewCreated(
+ [in] IShellView *ppshv);
+}
+
+/*****************************************************************************
+ * IDockingWindow interface
+ */
+[
+ object,
+ uuid(012dd920-7b26-11d0-8ca9-00a0c92dbfe8)
+]
+interface IDockingWindow : IOleWindow
+{
+ HRESULT ShowDW(
+ [in] BOOL fShow);
+
+ HRESULT CloseDW(
+ [in] DWORD dwReserved);
+
+ HRESULT ResizeBorderDW(
+ [in] LPCRECT prcBorder,
+ [in] IUnknown *punkToolbarSite,
+ [in] BOOL fReserved);
+};
+
+
+/*****************************************************************************
+ * IDockingWindowFrame interface
+ */
+[
+ object,
+ uuid(47d2657a-7b27-11d0-8ca9-00a0c92dbfe8),
+ pointer_default(unique),
+ local
+]
+interface IDockingWindowFrame : IOleWindow
+{
+cpp_quote("#define DWFRF_NORMAL 0x0000")
+cpp_quote("#define DWFRF_DELETECONFIGDATA 0x0001")
+cpp_quote("#define DWFAF_HIDDEN 0x0001")
+
+ HRESULT AddToolbar(
+ [in] IUnknown *punkSrc,
+ [in] LPCWSTR pwszItem,
+ [in] DWORD dwAddFlags);
+
+ HRESULT RemoveToolbar(
+ [in] IUnknown *punkSrc,
+ [in] DWORD dwRemoveFlags);
+
+ HRESULT FindToolbar(
+ [in] LPCWSTR pwszItem,
+ [in] REFIID riid,
+ [out] LPVOID *ppvObj);
+}
+
+
+/*****************************************************************************
+ * IDragSourceHelper interface
+ */
+[
+ object,
+ uuid(de5bf786-477a-11d2-839d-00c04fd918d0),
+ pointer_default(unique),
+ local
+]
+interface IDragSourceHelper : IUnknown
+{
+ typedef struct
+ {
+ SIZE sizeDragImage;
+ POINT ptOffset;
+ HBITMAP hbmpDragImage;
+ COLORREF crColorKey;
+ } SHDRAGIMAGE, *LPSHDRAGIMAGE;
+
+ HRESULT InitializeFromBitmap(
+ [in] LPSHDRAGIMAGE pshdi,
+ [in] IDataObject *pDataObject);
+
+ HRESULT InitializeFromWindow(
+ [in] HWND hwnd,
+ [in] POINT *ppt,
+ [in] IDataObject *pDataObject);
+}
+
+
+/*****************************************************************************
+ * IDropTargetHelper interface
+ */
+[
+ object,
+ uuid(4657278b-411b-11d2-839a-00c04fd918d0),
+ pointer_default(unique),
+ local
+]
+interface IDropTargetHelper : IUnknown
+{
+ HRESULT DragEnter(
+ [in] HWND hwndTarget,
+ [in] IDataObject *pDataObject,
+ [in] POINT *ppt,
+ [in] DWORD dwEffect);
+
+ HRESULT DragLeave();
+
+ HRESULT DragOver(
+ [in] POINT *ppt,
+ [in] DWORD dwEffect);
+
+ HRESULT Drop(
+ [in] IDataObject *pDataObject,
+ [in] POINT *ppt,
+ [in] DWORD dwEffect);
+
+ HRESULT Show( [in] BOOL fShow );
+}
+
+
+/*****************************************************************************
+ * IContextMenu interface
+ */
+[
+ object,
+ uuid(000214e4-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IContextMenu : IUnknown
+{
+cpp_quote("#define CMF_NORMAL 0x00000000")
+cpp_quote("#define CMF_DEFAULTONLY 0x00000001")
+cpp_quote("#define CMF_VERBSONLY 0x00000002")
+cpp_quote("#define CMF_EXPLORE 0x00000004")
+cpp_quote("#define CMF_NOVERBS 0x00000008")
+cpp_quote("#define CMF_CANRENAME 0x00000010")
+cpp_quote("#define CMF_NODEFAULT 0x00000020")
+cpp_quote("#define CMF_INCLUDESTATIC 0x00000040")
+cpp_quote("#define CMF_EXTENDEDVERBS 0x00000100")
+cpp_quote("#define CMF_RESERVED 0xffff0000")
+
+cpp_quote("#define GCS_VERBA 0x00000000")
+cpp_quote("#define GCS_HELPTEXTA 0x00000001")
+cpp_quote("#define GCS_VALIDATEA 0x00000002")
+cpp_quote("#define GCS_VERBW 0x00000004")
+cpp_quote("#define GCS_HELPTEXTW 0x00000005")
+cpp_quote("#define GCS_VALIDATEW 0x00000006")
+cpp_quote("#define GCS_UNICODE 0x00000004")
+cpp_quote("#define GCS_VERB WINELIB_NAME_AW(GCS_VERB)")
+cpp_quote("#define GCS_HELPTEXT WINELIB_NAME_AW(GCS_HELPTEXT)")
+cpp_quote("#define GCS_VALIDATE WINELIB_NAME_AW(GCS_VALIDATE)")
+
+cpp_quote("#define CMDSTR_NEWFOLDERA \"NewFolder\"")
+cpp_quote("#define CMDSTR_VIEWLISTA \"ViewList\"")
+cpp_quote("#define CMDSTR_VIEWDETAILSA \"ViewDetails\"")
+cpp_quote("#if defined(__GNUC__)")
+cpp_quote("# define CMDSTR_NEWFOLDERW (const WCHAR []){ 'N','e','w','F','o','l','d','e','r',0 }")
+cpp_quote("# define CMDSTR_VIEWLISTW (const WCHAR []){ 'V','i','e','w','L','i','s','t',0 }")
+cpp_quote("# define CMDSTR_VIEWDETAILSW (const WCHAR []){ 'V','i','e','w','D','e','t','a','i','l','s',0 }")
+cpp_quote("#elif defined(_MSC_VER)")
+cpp_quote("# define CMDSTR_NEWFOLDERW L\"NewFolder\"")
+cpp_quote("# define CMDSTR_VIEWLISTW L\"ViewList\"")
+cpp_quote("# define CMDSTR_VIEWDETAILSW L\"ViewDetails\"")
+cpp_quote("#else")
+cpp_quote("static const WCHAR CMDSTR_NEWFOLDERW[] = {'N','e','w','F','o','l','d','e','r',0};")
+cpp_quote("static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0};")
+cpp_quote("static const WCHAR CMDSTR_VIEWDETAILSW[] = {'V','i','e','w','D','e','t','a','i','l','s',0};")
+cpp_quote("#endif")
+cpp_quote("#define CMDSTR_NEWFOLDER WINELIB_NAME_AW(CMDSTR_NEWFOLDER)")
+cpp_quote("#define CMDSTR_VIEWLIST WINELIB_NAME_AW(CMDSTR_VIEWLIST)")
+cpp_quote("#define CMDSTR_VIEWDETAILS WINELIB_NAME_AW(CMDSTR_VIEWDETAILS)")
+
+cpp_quote("#define CMIC_MASK_HOTKEY SEE_MASK_HOTKEY")
+cpp_quote("#define CMIC_MASK_ICON SEE_MASK_ICON")
+cpp_quote("#define CMIC_MASK_FLAG_NO_UI SEE_MASK_FLAG_NO_UI")
+cpp_quote("#define CMIC_MASK_UNICODE SEE_MASK_UNICODE")
+cpp_quote("#define CMIC_MASK_NO_CONSOLE SEE_MASK_NO_CONSOLE")
+cpp_quote("#define CMIC_MASK_HASLINKNAME SEE_MASK_HASLINKNAME")
+cpp_quote("#define CMIC_MASK_FLAG_SEP_VDM SEE_MASK_FLAG_SEPVDM")
+cpp_quote("#define CMIC_MASK_HASTITLE SEE_MASK_HASTITLE")
+cpp_quote("#define CMIC_MASK_ASYNCOK SEE_MASK_ASYNCOK")
+cpp_quote("#define CMIC_MASK_NOASYNC SEE_MASK_NOASYNC")
+cpp_quote("#define CMIC_MASK_SHIFT_DOWN 0x10000000")
+cpp_quote("#define CMIC_MASK_PTINVOKE 0x20000000")
+cpp_quote("#define CMIC_MASK_CONTROL_DOWN 0x40000000")
+cpp_quote("#define CMIC_MASK_FLAG_LOG_USAGE SEE_MASK_FLAG_LOG_USAGE")
+cpp_quote("#define CMIC_MASK_NOZONECHECKS SEE_MASK_NOZONECHECKS")
+
+ typedef IContextMenu *LPCONTEXTMENU;
+
+ typedef struct tagCMINVOKECOMMANDINFO
+ {
+ DWORD cbSize;
+ DWORD fMask;
+ HWND hwnd;
+ LPCSTR lpVerb;
+ LPCSTR lpParameters;
+ LPCSTR lpDirectory;
+ INT nShow;
+ DWORD dwHotKey;
+ HANDLE hIcon;
+ } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
+
+ typedef struct tagCMInvokeCommandInfoEx
+ {
+ DWORD cbSize;
+ DWORD fMask;
+ HWND hwnd;
+ LPCSTR lpVerb;
+ LPCSTR lpParameters;
+ LPCSTR lpDirectory;
+ INT nShow;
+ DWORD dwHotKey;
+ HANDLE hIcon;
+ LPCSTR lpTitle;
+ LPCWSTR lpVerbW;
+ LPCWSTR lpParametersW;
+ LPCWSTR lpDirectoryW;
+ LPCWSTR lpTitleW;
+ POINT ptInvoke;
+ } CMINVOKECOMMANDINFOEX, *LPCMINVOKECOMMANDINFOEX;
+
+ HRESULT QueryContextMenu(
+ [in] HMENU hmenu,
+ [in] UINT indexMenu,
+ [in] UINT idCmdFirst,
+ [in] UINT idCmdLast,
+ [in] UINT uFlags);
+
+ HRESULT InvokeCommand( [in] LPCMINVOKECOMMANDINFO lpici );
+
+ HRESULT GetCommandString(
+ [in] UINT_PTR idCmd,
+ [in] UINT uType,
+ [out] UINT *pwReserved,
+ [out, size_is(cchMax)] LPSTR pszName,
+ [in] UINT cchMax);
+}
+
+
+/*****************************************************************************
+ * IContextMenu2 interface
+ */
+[
+ object,
+ uuid(000214f4-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IContextMenu2 : IContextMenu
+{
+ typedef IContextMenu2 *LPCONTEXTMENU2;
+
+ HRESULT HandleMenuMsg(
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+}
+
+
+/*****************************************************************************
+ * IContextMenu3 interface
+ */
+[
+ object,
+ uuid(bcfce0a0-ec17-11d0-8d10-00a0c90f2719),
+ pointer_default(unique),
+ local
+]
+interface IContextMenu3 : IContextMenu2
+{
+ typedef IContextMenu3 *LPCONTEXTMENU3;
+
+ HRESULT HandleMenuMsg2(
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] LRESULT *plResult);
+}
+
+
+[
+ object,
+ uuid(3409e930-5a39-11d1-83fa-00a0c90dc849),
+ pointer_default(unique),
+ local
+]
+interface IContextMenuCB : IUnknown
+{
+ HRESULT CallBack(
+ [in] IShellFolder *psf,
+ [in] HWND hwndOwner,
+ [in] IDataObject *pdtobj,
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+}
+
+/*****************************************************************************
+ * IShellExecuteHookA interface
+ */
+[
+ object,
+ uuid(000214f5-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IShellExecuteHookA : IUnknown
+{
+ cpp_quote("struct _SHELLEXECUTEINFOA;")
+ HRESULT Execute(
+ [in, out] struct _SHELLEXECUTEINFOA* pei);
+}
+
+
+/*****************************************************************************
+ * IShellExecuteHookW interface
+ */
+[
+ object,
+ uuid(000214fb-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface IShellExecuteHookW : IUnknown
+{
+ cpp_quote("struct _SHELLEXECUTEINFOW;")
+ HRESULT Execute(
+ [in, out] struct _SHELLEXECUTEINFOW* pei);
+}
+
+/*****************************************************************************
+ * IShellLinkDataList interface
+ */
+[
+ object,
+ uuid(45e2b4ae-b1c3-11d0-b92f-00a0c90312e1),
+ pointer_default(unique)
+]
+interface IShellLinkDataList : IUnknown
+{
+ [local] HRESULT AddDataBlock(
+ [in] void *pDataBlock);
+ [local] HRESULT CopyDataBlock(
+ [in] DWORD dwSig,
+ [out] void **ppDataBlock);
+ HRESULT RemoveDataBlock(
+ [in] DWORD dwSig);
+ HRESULT GetFlags(
+ [out] DWORD *pdwFlags);
+ HRESULT SetFlags(
+ [in] DWORD dwFlags);
+}
+
+
+/*****************************************************************************
+ * IResolveShellLink interface
+ */
+[
+ object,
+ uuid(5cd52983-9449-11d2-963a-00c04f79adf0),
+ pointer_default(unique)
+]
+interface IResolveShellLink : IUnknown
+{
+ HRESULT ResolveShellLink(
+ [in] IUnknown *punk,
+ [in] HWND hwnd,
+ [in] DWORD fFlags);
+}
+
+
+/*****************************************************************************
+ * IURLSearchHook interface
+ */
+[
+ object,
+ uuid(ac60f6a0-0fd9-11d0-99cb-00c04fd64497),
+ pointer_default(unique),
+ local
+]
+interface IURLSearchHook : IUnknown
+{
+ HRESULT Translate(
+ [in, out] LPWSTR lpwszSearchURL,
+ [in] DWORD cchBufferSize);
+}
+
+
+/*****************************************************************************
+ * ISearchContext interface
+ */
+[
+ object,
+ uuid(09f656a2-41af-480c-88f7-16cc0d164615),
+ pointer_default(unique),
+ local
+]
+interface ISearchContext : IUnknown
+{
+ HRESULT GetSearchUrl(
+ [in] BSTR *pbstrSearchUrl);
+ HRESULT GetSearchText(
+ [in] BSTR *pbstrSearchText);
+ HRESULT GetSearchStyle(
+ [in] BSTR *pdwSearchStyle);
+}
+
+
+/*****************************************************************************
+ * IURLSearchHook2 interface
+ */
+[
+ object,
+ uuid(5ee44da4-6d32-46e3-86bc-07540dedd0e0),
+ pointer_default(unique),
+ local
+]
+interface IURLSearchHook2 : IURLSearchHook
+{
+ HRESULT TranslateWithSearchContext(
+ [in, out] LPWSTR lpwszSearchURL,
+ [in] DWORD cchBufferSize,
+ [in] ISearchContext *pSearchContext);
+}
+
+
+cpp_quote("#define INewShortcutHook WINELIB_NAME_AW(INewShortcutHook)")
+
+/*****************************************************************************
+ * INewShortcutHookA interface
+ */
+[
+ object,
+ uuid(000214e1-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface INewShortcutHookA : IUnknown
+{
+ HRESULT SetReferent(
+ [in] LPCSTR pcszReferent,
+ [in] HWND hwnd);
+ HRESULT GetReferent(
+ [out] LPSTR pcszReferent,
+ [in] int cchReferent);
+ HRESULT SetFolder(
+ [in] LPCSTR pcszReferent);
+ HRESULT GetFolder(
+ [out] LPSTR pcszReferent,
+ [in] int cchFolder);
+ HRESULT GetName(
+ [out] LPSTR pszName,
+ [in] int cchName);
+ HRESULT GetExtension(
+ [out] LPSTR pszExtension,
+ [in] int cchExtension);
+}
+
+
+/*****************************************************************************
+ * INewShortcutHookW interface
+ */
+[
+ object,
+ uuid(000214f7-0000-0000-c000-000000000046),
+ pointer_default(unique),
+ local
+]
+interface INewShortcutHookW : IUnknown
+{
+ HRESULT SetReferent(
+ [in] LPCWSTR pcszReferent,
+ [in] HWND hwnd);
+ HRESULT GetReferent(
+ [out] LPWSTR pcszReferent,
+ [in] int cchReferent);
+ HRESULT SetFolder(
+ [in] LPCWSTR pcszReferent);
+ HRESULT GetFolder(
+ [out] LPWSTR pcszReferent,
+ [in] int cchFolder);
+ HRESULT GetName(
+ [out] LPWSTR pszName,
+ [in] int cchName);
+ HRESULT GetExtension(
+ [out] LPWSTR pszExtension,
+ [in] int cchExtension);
+}
+
+/*****************************************************************************
+ * IRunnableTask interface
+ */
+[
+ object,
+ uuid(85788d00-6807-11d0-b810-00c04fd706ec),
+ pointer_default(unique),
+ local
+]
+interface IRunnableTask : IUnknown
+{
+ HRESULT Run();
+ HRESULT Kill([in] BOOL fWait);
+ HRESULT Suspend();
+ HRESULT Resume();
+ ULONG IsRunning();
+}
+
+/*****************************************************************************
+ * IShellChangeNotify interface
+ */
+[
+ object,
+ uuid(d82be2b1-5764-11d0-a96e-00c04fd705a2),
+ pointer_default(unique),
+ local
+]
+interface IShellChangeNotify : IUnknown
+{
+ HRESULT OnChange(
+ [in] LONG lEvent,
+ [in] LPCITEMIDLIST pidl1,
+ [in] LPCITEMIDLIST pidl2);
+}
+
+/*****************************************************************************
+ * IFileSystemBindData interface
+ */
+[
+ object,
+ uuid(01e18d10-4d8b-11d2-855d-006008059367),
+ pointer_default(unique),
+ local
+]
+interface IFileSystemBindData : IUnknown
+{
+ HRESULT SetFindData(
+ [in] const WIN32_FIND_DATAW *pfd);
+ HRESULT GetFindData(
+ [out] WIN32_FIND_DATAW *pfd);
+}
+
+/*****************************************************************************
+ * ITaskbarList interface
+ */
+[
+ object,
+ uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
+ pointer_default(unique)
+]
+interface ITaskbarList : IUnknown
+{
+ HRESULT HrInit();
+
+ HRESULT AddTab(
+ [in] HWND hwnd);
+
+ HRESULT DeleteTab(
+ [in] HWND hwnd);
+
+ HRESULT ActivateTab(
+ [in] HWND hwnd);
+
+ HRESULT SetActiveAlt(
+ [in] HWND hwnd);
+}
+
+/*****************************************************************************
+ * ITaskbarList2 interface
+ */
+[
+ object,
+ uuid(602D4995-B13A-429B-A66E-1935E44F4317),
+ pointer_default(unique)
+]
+interface ITaskbarList2 : ITaskbarList
+{
+ HRESULT MarkFullscreenWindow(
+ [in] HWND hwnd,
+ [in] BOOL fullscreen);
+}
+
+cpp_quote("#ifdef MIDL_PASS")
+typedef IUnknown* HIMAGELIST;
+cpp_quote("#endif")
+
+typedef [v1_enum] enum THUMBBUTTONFLAGS {
+ THBF_ENABLED = 0x0000,
+ THBF_DISABLED = 0x0001,
+ THBF_DISMISSONCLICK = 0x0002,
+ THBF_NOBACKGROUND = 0x0004,
+ THBF_HIDDEN = 0x0008,
+ THBF_NONINTERACTIVE = 0x0010
+} THUMBBUTTONFLAGS;
+
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONFLAGS)")
+
+typedef [v1_enum] enum THUMBBUTTONMASK {
+ THB_BITMAP = 0x0001,
+ THB_ICON = 0x0002,
+ THB_TOOLTIP = 0x0004,
+ THB_FLAGS = 0x0008
+} THUMBBUTTONMASK;
+
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(THUMBBUTTONMASK)")
+
+cpp_quote("#include <pshpack8.h>")
+typedef struct THUMBBUTTON {
+ THUMBBUTTONMASK dwMask;
+ UINT iId;
+ UINT iBitmap;
+ HICON hIcon;
+ WCHAR szTip[260];
+ THUMBBUTTONFLAGS dwFlags;
+} THUMBBUTTON, *LPTHUMBBUTTON;
+cpp_quote("#include <poppack.h>")
+
+[
+ uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf),
+ object
+]
+interface ITaskbarList3 : ITaskbarList2
+{
+ typedef [v1_enum] enum TBPFLAG {
+ TBPF_NOPROGRESS = 0x0000,
+ TBPF_INDETERMINATE = 0x0001,
+ TBPF_NORMAL = 0x0002,
+ TBPF_ERROR = 0x0004,
+ TBPF_PAUSED = 0x0008
+ } TBPFLAG;
+
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)")
+
+ HRESULT SetProgressValue(
+ [in] HWND hwnd,
+ [in] ULONGLONG ullCompleted,
+ [in] ULONGLONG ullTotal);
+
+ HRESULT SetProgressState(
+ [in] HWND hwnd,
+ [in] TBPFLAG tbpFlags);
+
+ HRESULT RegisterTab(
+ [in] HWND hwndTab,
+ [in] HWND hwndMDI);
+
+ HRESULT UnregisterTab([in] HWND hwndTab);
+
+ HRESULT SetTabOrder(
+ [in] HWND hwndTab,
+ [in] HWND hwndInsertBefore);
+
+ HRESULT SetTabActive(
+ [in] HWND hwndTab,
+ [in] HWND hwndMDI,
+ [in] DWORD dwReserved);
+
+ HRESULT ThumbBarAddButtons(
+ [in] HWND hwnd,
+ [in] UINT cButtons,
+ [in, size_is(cButtons)] LPTHUMBBUTTON pButton);
+
+ HRESULT ThumbBarUpdateButtons(
+ [in] HWND hwnd,
+ [in] UINT cButtons,
+ [in, size_is(cButtons)] LPTHUMBBUTTON pButton);
+
+ HRESULT ThumbBarSetImageList(
+ [in] HWND hwnd,
+ [in] HIMAGELIST himl);
+
+ HRESULT SetOverlayIcon(
+ [in] HWND hwnd,
+ [in] HICON hIcon,
+ [in, unique, string] LPCWSTR pszDescription);
+
+ HRESULT SetThumbnailTooltip(
+ [in] HWND hwnd,
+ [in, unique, string] LPCWSTR pszTip);
+
+ HRESULT SetThumbnailClip(
+ [in] HWND hwnd,
+ [in] RECT *prcClip);
+}
+
+[
+ uuid(c43dc798-95d1-4bea-9030-bb99e2983a1a),
+ object
+]
+interface ITaskbarList4 : ITaskbarList3
+{
+ typedef [v1_enum] enum STPFLAG {
+ STPF_NONE = 0x0000,
+ STPF_USEAPPTHUMBNAILALWAYS = 0x0001,
+ STPF_USEAPPTHUMBNAILWHENACTIVE = 0x0002,
+ STPF_USEAPPPEEKALWAYS = 0x0004,
+ STPF_USEAPPPEEKWHENACTIVE = 0x0008
+ } STPFLAG;
+
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(STPFLAG)")
+
+ HRESULT SetTabProperties(
+ [in] HWND hwndTab,
+ [in] STPFLAG stpFlags);
+}
+
+/*****************************************************************************
+ * IAutoCompleteDropDown interface
+ */
+[
+ object,
+ uuid(3CD141F4-3C6A-11d2-BCAA-00C04FD929DB),
+ pointer_default(unique)
+]
+interface IAutoCompleteDropDown : IUnknown
+{
+cpp_quote("#define ACDD_VISIBLE 0x0001")
+
+ HRESULT GetDropDownStatus(
+ [out] DWORD *pdwFlags,
+ [out, string] LPWSTR *ppwszString);
+
+ HRESULT ResetEnumerator();
+}
+
+[
+ object,
+ uuid(cb728b20-f786-11ce-92ad-00aa00a74cd0),
+ pointer_default(unique)
+]
+interface IProfferService : IUnknown
+{
+ HRESULT ProfferService(
+ [in] REFGUID service,
+ [in] IServiceProvider *pService,
+ [out] DWORD *pCookie);
+
+ HRESULT RevokeService([in] DWORD cookie);
+}
+
+/*****************************************************************************
+ * IExplorerBrowserEvents interface
+ */
+[
+ object,
+ uuid(361BBDC7-E6EE-4E13-BE58-58E2240C810F)
+]
+interface IExplorerBrowserEvents : IUnknown
+{
+ HRESULT OnNavigationPending(
+ [in] PCIDLIST_ABSOLUTE pidlFolder);
+
+ HRESULT OnViewCreated(
+ [in] IShellView *psv);
+
+ HRESULT OnNavigationComplete(
+ [in] PCIDLIST_ABSOLUTE pidlFolder);
+
+ HRESULT OnNavigationFailed(
+ [in] PCIDLIST_ABSOLUTE pidlFolder);
+}
+
+typedef GUID EXPLORERPANE;
+typedef EXPLORERPANE *REFEXPLORERPANE;
+
+cpp_quote("#define SID_ExplorerPaneVisibility IID_IExplorerPaneVisibility")
+
+/*****************************************************************************
+ * IExplorerPaneVisibility interface
+ */
+[
+ object,
+ uuid(E07010EC-BC17-44C0-97B0-46C7C95B9EDC)
+]
+interface IExplorerPaneVisibility : IUnknown
+{
+ typedef enum tagEXPLORERPANESTATE {
+ EPS_DONTCARE = 0x0,
+ EPS_DEFAULT_ON = 0x1,
+ EPS_DEFAULT_OFF = 0x2,
+ EPS_STATE_MASK = 0xffff,
+ EPS_INITIALSTATE = 0x10000,
+ EPS_FORCE = 0x20000
+ } EXPLORERPANESTATE;
+
+ HRESULT GetPaneState(
+ [in] REFEXPLORERPANE ep,
+ [out] EXPLORERPANESTATE *peps);
+}
+
+typedef [v1_enum] enum tagEXPLORER_BROWSER_FILL_FLAGS {
+ EBF_NONE = 0,
+ EBF_SELECTFROMDATAOBJECT = 0x100,
+ EBF_NODROPTARGET = 0x200
+} EXPLORER_BROWSER_FILL_FLAGS;
+
+typedef [v1_enum] enum tagEXPLORER_BROWSER_OPTIONS {
+ EBO_NONE = 0x00,
+ EBO_NAVIGATEONCE = 0x01,
+ EBO_SHOWFRAMES = 0x02,
+ EBO_ALWAYSNAVIGATE = 0x04,
+ EBO_NOTRAVELLOG = 0x08,
+ EBO_NOWRAPPERWINDOW = 0x10,
+ EBO_HTMLSHAREPOINTVIEW = 0x20
+} EXPLORER_BROWSER_OPTIONS;
+
+cpp_quote("#define SID_SExplorerBrowserFrame IID_ICommDlgBrowser")
+
+/*****************************************************************************
+ * IExplorerBrowser interface
+ */
+[
+ object,
+ uuid(DFD3B6B5-C10C-4BE9-85F6-A66969F402F6),
+ pointer_default(unique)
+]
+interface IExplorerBrowser : IUnknown
+{
+
+ [local] HRESULT Initialize(
+ [in] HWND hwndParent,
+ [in] const RECT *prc,
+ [in, unique] const FOLDERSETTINGS *pfs);
+
+ HRESULT Destroy();
+
+ [local] HRESULT SetRect(
+ [in,out,unique] HDWP *phdwp,
+ [in] RECT rcBrowser);
+
+ HRESULT SetPropertyBag(
+ [in, string] LPCWSTR pszPropertyBag);
+
+ HRESULT SetEmptyText(
+ [in, string] LPCWSTR pszEmptyText);
+
+ HRESULT SetFolderSettings(
+ [in] const FOLDERSETTINGS *pfs);
+
+ HRESULT Advise(
+ [in] IExplorerBrowserEvents *psbe,
+ [out] DWORD *pdwCookie);
+
+ HRESULT Unadvise(
+ [in] DWORD dwCookie);
+
+ HRESULT SetOptions(
+ [in] EXPLORER_BROWSER_OPTIONS dwFlag);
+
+ HRESULT GetOptions(
+ [out] EXPLORER_BROWSER_OPTIONS *pdwFlag);
+
+ HRESULT BrowseToIDList(
+ [in] PCUIDLIST_RELATIVE pidl,
+ [in] UINT uFlags);
+
+ HRESULT BrowseToObject(
+ [in] IUnknown *punk,
+ [in] UINT uFlags);
+
+ HRESULT FillFromObject(
+ [in] IUnknown *punk,
+ [in] EXPLORER_BROWSER_FILL_FLAGS dwFlags);
+
+ HRESULT RemoveAll();
+
+ HRESULT GetCurrentView(
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControl interface
+ */
+[
+ object,
+ uuid(028212A3-B627-47E9-8856-C14265554E4F)
+]
+interface INameSpaceTreeControl : IUnknown
+{
+ [v1_enum] enum _NSTCSTYLE {
+ NSTCS_HASEXPANDOS = 0x00000001,
+ NSTCS_HASLINES = 0x00000002,
+ NSTCS_SINGLECLICKEXPAND = 0x00000004,
+ NSTCS_FULLROWSELECT = 0x00000008,
+ NSTCS_SPRINGEXPAND = 0x00000010,
+ NSTCS_HORIZONTALSCROLL = 0x00000020,
+ NSTCS_ROOTHASEXPANDO = 0x00000040,
+ NSTCS_SHOWSELECTIONALWAYS = 0x00000080,
+ NSTCS_NOINFOTIP = 0x00000200,
+ NSTCS_EVENHEIGHT = 0x00000400,
+ NSTCS_NOREPLACEOPEN = 0x00000800,
+ NSTCS_DISABLEDRAGDROP = 0x00001000,
+ NSTCS_NOORDERSTREAM = 0x00002000,
+ NSTCS_RICHTOOLTIP = 0x00004000,
+ NSTCS_BORDER = 0x00008000,
+ NSTCS_NOEDITLABELS = 0x00010000,
+ NSTCS_TABSTOP = 0x00020000,
+ NSTCS_FAVORITESMODE = 0x00080000,
+ NSTCS_AUTOHSCROLL = 0x00100000,
+ NSTCS_FADEINOUTEXPANDOS = 0x00200000,
+ NSTCS_EMPTYTEXT = 0x00400000,
+ NSTCS_CHECKBOXES = 0x00800000,
+ NSTCS_PARTIALCHECKBOXES = 0x01000000,
+ NSTCS_EXCLUSIONCHECKBOXES = 0x02000000,
+ NSTCS_DIMMEDCHECKBOXES = 0x04000000,
+ NSTCS_NOINDENTCHECKS = 0x08000000,
+ NSTCS_ALLOWJUNCTIONS = 0x10000000,
+ NSTCS_SHOWTABSBUTTON = 0x20000000,
+ NSTCS_SHOWDELETEBUTTON = 0x40000000,
+ NSTCS_SHOWREFRESHBUTTON = (int)0x80000000
+ };
+ typedef DWORD NSTCSTYLE;
+
+ [v1_enum] enum _NSTCROOTSTYLE {
+ NSTCRS_VISIBLE = 0x0000,
+ NSTCRS_HIDDEN = 0x0001,
+ NSTCRS_EXPANDED = 0x0002
+ };
+ typedef DWORD NSTCROOTSTYLE;
+
+ [v1_enum] enum _NSTCITEMSTATE {
+ NSTCIS_NONE = 0x0000,
+ NSTCIS_SELECTED = 0x0001,
+ NSTCIS_EXPANDED = 0x0002,
+ NSTCIS_BOLD = 0x0004,
+ NSTCIS_DISABLED = 0x0008,
+ NSTCIS_SELECTEDNOEXPAND = 0x0010
+ };
+ typedef DWORD NSTCITEMSTATE;
+
+ typedef [v1_enum] enum NSTCGNI {
+ NSTCGNI_NEXT = 0,
+ NSTCGNI_NEXTVISIBLE = 1,
+ NSTCGNI_PREV = 2,
+ NSTCGNI_PREVVISIBLE = 3,
+ NSTCGNI_PARENT = 4,
+ NSTCGNI_CHILD = 5,
+ NSTCGNI_FIRSTVISIBLE = 6,
+ NSTCGNI_LASTVISIBLE = 7
+ } NSTCGNI;
+
+ HRESULT Initialize(
+ [in] HWND hwndParent,
+ [in, unique] RECT *prc,
+ [in] NSTCSTYLE nstcsFlags);
+
+ HRESULT TreeAdvise(
+ [in] IUnknown *punk,
+ [out] DWORD *pdwCookie);
+
+ HRESULT TreeUnadvise(
+ [in] DWORD dwCookie);
+
+ HRESULT AppendRoot(
+ [in] IShellItem *psiRoot,
+ [in] SHCONTF grfEnumFlags,
+ [in] NSTCROOTSTYLE grfRootStyle,
+ [in, unique] IShellItemFilter *pif);
+
+ HRESULT InsertRoot(
+ [in] int iIndex,
+ [in] IShellItem *psiRoot,
+ [in] SHCONTF grfEnumFlags,
+ [in] NSTCROOTSTYLE grfRootStyle,
+ [in, unique] IShellItemFilter *pif);
+
+ HRESULT RemoveRoot(
+ [in] IShellItem *psiRoot);
+
+ HRESULT RemoveAllRoots();
+
+ HRESULT GetRootItems(
+ [out] IShellItemArray **ppsiaRootItems);
+
+ HRESULT SetItemState(
+ [in] IShellItem *psi,
+ [in] NSTCITEMSTATE nstcisMask,
+ [in] NSTCITEMSTATE nstcisFlags);
+
+ HRESULT GetItemState(
+ [in] IShellItem *psi,
+ [in] NSTCITEMSTATE nstcismask,
+ [out] NSTCITEMSTATE *pnstcisFlags);
+
+ HRESULT GetSelectedItems(
+ [out] IShellItemArray **psiaItems);
+
+ HRESULT GetItemCustomState(
+ [in] IShellItem *psi,
+ [out] int *piStateNumber);
+
+ HRESULT SetItemCustomState(
+ [in] IShellItem *psi,
+ [in] int iStateNumber);
+
+ HRESULT EnsureItemVisible(
+ [in] IShellItem *psi);
+
+ HRESULT SetTheme(
+ [in, string] LPCWSTR pszTheme);
+
+ HRESULT GetNextItem(
+ [in, unique] IShellItem *psi,
+ [in] NSTCGNI nstcgi,
+ [out] IShellItem **ppsiNext);
+
+ HRESULT HitTest(
+ [in] POINT *ppt,
+ [out] IShellItem **ppsiOut);
+
+ HRESULT GetItemRect(
+ [in] IShellItem *psi,
+ [out] RECT *prect);
+
+ HRESULT CollapseAll();
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControl2 interface
+ */
+[
+ object,
+ uuid(7CC7AED8-290E-49BC-8945-C1401CC9306C)
+]
+interface INameSpaceTreeControl2 : INameSpaceTreeControl
+{
+ typedef [v1_enum] enum NSTCSTYLE2 {
+ NSTCS2_DEFAULT = 0x00,
+ NSTCS2_INTERRUPTNOTIFICATIONS = 0x01,
+ NSTCS2_SHOWNULLSPACEMENU = 0x02,
+ NSTCS2_DISPLAYPADDING = 0x04,
+ NSTCS2_DISPLAYPINNEDONLY = 0x08,
+ NTSCS2_NOSINGLETONAUTOEXPAND = 0x10, /* The apparent typo here is */
+ NTSCS2_NEVERINSERTNONENUMERATED = 0x20 /* present also in the Win SDK */
+ } NSTCSTYLE2;
+ cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(NSTCSTYLE2)")
+
+ HRESULT SetControlStyle(
+ [in] NSTCSTYLE nstcsMask,
+ [in] NSTCSTYLE nstcsStyle);
+
+ HRESULT GetControlStyle(
+ [in] NSTCSTYLE nstcsMask,
+ [out] NSTCSTYLE *pnstcsStyle);
+
+ HRESULT SetControlStyle2(
+ [in] NSTCSTYLE2 nstcsMask,
+ [in] NSTCSTYLE2 nstcsStyle);
+
+ HRESULT GetControlStyle2(
+ [in] NSTCSTYLE2 nstcsMask,
+ [out] NSTCSTYLE2 *pnstcsStyle);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControlEvents interface
+ */
+
+[
+ object,
+ uuid(93D77985-B3D8-4484-8318-672CDDA002CE),
+ local
+]
+interface INameSpaceTreeControlEvents : IUnknown
+{
+ [v1_enum] enum _NSTCEHITTEST {
+ NSTCEHT_NOWHERE = 0x0001,
+ NSTCEHT_ONITEMICON = 0x0002,
+ NSTCEHT_ONITEMLABEL = 0x0004,
+ NSTCEHT_ONITEMIDENT = 0x0008,
+ NSTCEHT_ONITEMBUTTON = 0x0010,
+ NSTCEHT_ONITEMRIGHT = 0x0020,
+ NSTCEHT_ONITEMSTATEICON = 0x0040,
+ NSTCEHT_ONITEM = 0x0046,
+ NSTCEHT_ONITEMTABBUTTON = 0x1000
+ };
+ typedef DWORD NSTCEHITTEST;
+
+ [v1_enum] enum _NSTCECLICKTYPE {
+ NSTCECT_LBUTTON = 0x1,
+ NSTCECT_MBUTTON = 0x2,
+ NSTCECT_RBUTTON = 0x3,
+ NSTCECT_BUTTON = 0x3,
+ NSTCECT_DBLCLICK = 0x4
+ };
+ typedef DWORD NSTCECLICKTYPE;
+
+ HRESULT OnItemClick(
+ [in] IShellItem *psi,
+ [in] NSTCEHITTEST nstceHitTest,
+ [in] NSTCECLICKTYPE nstceClickType);
+
+ HRESULT OnPropertyItemCommit(
+ [in] IShellItem *psi);
+
+ HRESULT OnItemStateChanging(
+ [in] IShellItem *psi,
+ [in] NSTCITEMSTATE nstcisMask,
+ [in] NSTCITEMSTATE nstcisState);
+
+ HRESULT OnItemStateChanged(
+ [in] IShellItem *psi,
+ [in] NSTCITEMSTATE nstcisMask,
+ [in] NSTCITEMSTATE nstcisState);
+
+ HRESULT OnSelectionChanged(
+ [in] IShellItemArray *psiaSelection);
+
+ HRESULT OnKeyboardInput(
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT OnBeforeExpand(
+ [in] IShellItem *psi);
+
+ HRESULT OnAfterExpand(
+ [in] IShellItem *psi);
+
+ HRESULT OnBeginLabelEdit(
+ [in] IShellItem *psi);
+
+ HRESULT OnEndLabelEdit(
+ [in] IShellItem *psi);
+
+ HRESULT OnGetToolTip(
+ [in] IShellItem *psi,
+ [out, string, size_is(cchTip)] LPWSTR pszTip,
+ [in] int cchTip);
+
+ HRESULT OnBeforeItemDelete(
+ [in] IShellItem *psi);
+
+ HRESULT OnItemAdded(
+ [in] IShellItem *psi,
+ [in] BOOL fIsRoot);
+
+ HRESULT OnItemDeleted(
+ [in] IShellItem *psi,
+ [in] BOOL fIsRoot);
+
+ HRESULT OnBeforeContextMenu(
+ [in, unique] IShellItem *psi,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT OnAfterContextMenu(
+ [in] IShellItem *psi,
+ [in] IContextMenu *pcmIn,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT OnBeforeStateImageChange(
+ [in] IShellItem *psi);
+
+ HRESULT OnGetDefaultIconIndex(
+ [in] IShellItem *psi,
+ [out] int *piDefaultIcon,
+ [out] int *piOpenIcon);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControlCustomDraw interface
+ */
+[
+ object,
+ uuid(2D3BA758-33EE-42D5-BB7B-5F3431D86C78),
+ local
+]
+
+interface INameSpaceTreeControlCustomDraw : IUnknown
+{
+ typedef struct NSTCCUSTOMDRAW
+ {
+ IShellItem *psi;
+ UINT uItemState;
+ NSTCITEMSTATE nstcis;
+ LPCWSTR pszText;
+ int iImage;
+ HIMAGELIST himl;
+ int iLevel;
+ int iIndent;
+ } NSTCCUSTOMDRAW;
+
+ HRESULT PrePaint(
+ [in] HDC hdc,
+ [in] RECT *prc,
+ [out] LRESULT *plres);
+
+ HRESULT PostPaint(
+ [in] HDC hdc,
+ [in] RECT *prc);
+
+ HRESULT ItemPrePaint(
+ [in] HDC hdc,
+ [in] RECT *prc,
+ [in, out] COLORREF *pclrText,
+ [in, out] COLORREF *pclrTextBk,
+ [out] LRESULT *plres);
+
+ HRESULT ItemPostPaint(
+ [in] HDC hdc,
+ [in] RECT *prc,
+ [in] NSTCCUSTOMDRAW *pnstccdItem);
+}
+
+/*****************************************************************************
+ * INameSpaceTreeControlDropHandler interface
+ */
+[
+ object,
+ uuid(F9C665D6-C2F2-4C19-BF33-8322D7352F51),
+ local
+]
+interface INameSpaceTreeControlDropHandler : IUnknown
+{
+ HRESULT OnDragEnter(
+ [in, unique] IShellItem *psiOver,
+ [in] IShellItemArray *psiaData,
+ [in] BOOL fOutsideSource,
+ [in] DWORD grfKeyState,
+ [in, out] DWORD *pdwEffect);
+
+ HRESULT OnDragOver(
+ [in, unique] IShellItem *psiOver,
+ [in] IShellItemArray *psiaData,
+ [in] DWORD grfKeyState,
+ [in, out] DWORD *pdwEffect);
+
+ HRESULT OnDragPosition(
+ [in, unique] IShellItem *psiOver,
+ [in] IShellItemArray *psiaData,
+ [in] int iNewPosition,
+ [in] int iOldPosition);
+
+ HRESULT OnDrop(
+ [in, unique] IShellItem *psiOver,
+ [in] IShellItemArray *psiaData,
+ [in] int iPosition,
+ [in] DWORD grfKeyState,
+ [in, out] DWORD *pdwEffect);
+
+ HRESULT OnDropPosition(
+ [in, unique] IShellItem *psiOver,
+ [in] IShellItemArray *psiaData,
+ [in] int iNewPosition,
+ [in] int iOldPosition);
+
+ HRESULT OnDragLeave(
+ [in, unique] IShellItem *psiOver);
+}
+cpp_quote("#define NSTCDHPOS_ONTOP -1")
+
+interface IFileDialog;
+
+typedef [v1_enum] enum FDE_OVERWRITE_RESPONSE
+{
+ FDEOR_DEFAULT = 0,
+ FDEOR_ACCCEP = 1,
+ FDEOR_REFUSE = 2
+} FDE_OVERWRITE_RESPONSE;
+
+typedef [v1_enum] enum FDE_SHAREVIOLATION_RESPONSE
+{
+ FDESVR_DEFAULT = 0,
+ FDESVR_ACCEPT = 1,
+ FDESVR_REFUSE = 2
+} FDE_SHAREVIOLATION_RESPONSE;
+
+/*****************************************************************************
+ * IFileDialogEvents interface
+ */
+[
+ object,
+ uuid(973510DB-7D7F-452B-8975-74A85828D354),
+ pointer_default(unique)
+]
+interface IFileDialogEvents : IUnknown
+{
+ HRESULT OnFileOk(
+ [in] IFileDialog *pfd);
+
+ HRESULT OnFolderChanging(
+ [in] IFileDialog *pfd,
+ [in] IShellItem *psiFolder);
+
+ HRESULT OnFolderChange(
+ [in] IFileDialog *pfd);
+
+ HRESULT OnSelectionChange(
+ [in] IFileDialog *pfd);
+
+ HRESULT OnShareViolation(
+ [in] IFileDialog *pfd,
+ [in] IShellItem *psi,
+ [out] FDE_SHAREVIOLATION_RESPONSE *pResponse);
+
+ HRESULT OnTypeChange(
+ [in] IFileDialog *pfd);
+
+ HRESULT OnOverwrite(
+ [in] IFileDialog *pfd,
+ [in] IShellItem *psi,
+ [out] FDE_OVERWRITE_RESPONSE *pResponse);
+}
+
+/*****************************************************************************
+ * IModalWindow interface
+ */
+[
+ object,
+ uuid(B4DB1657-70D7-485E-8E3E-6FCB5A5C1802),
+ pointer_default(unique)
+]
+interface IModalWindow : IUnknown
+{
+ [local]
+ HRESULT Show(
+ [in, unique, annotation("__in_opt")] HWND hwndOwner);
+
+ [call_as(Show)]
+ HRESULT RemoteShow(
+ [in, unique] HWND hwndOwner);
+}
+
+typedef [v1_enum] enum FDAP
+{
+ FDAP_BOTTOM = 0,
+ FDAP_TOP = 1
+} FDAP;
+
+/*****************************************************************************
+ * IFileDialog interface
+ */
+[
+ object,
+ uuid(42F85136-DB7E-439C-85F1-E4075D135FC8),
+ pointer_default(unique)
+]
+interface IFileDialog : IModalWindow
+{
+ [v1_enum] enum _FILEOPENDIALOGOPTIONS
+ {
+ FOS_OVERWRITEPROMPT = 0x00000002,
+ FOS_STRICTFILETYPES = 0x00000004,
+ FOS_NOCHANGEDIR = 0x00000008,
+ FOS_PICKFOLDERS = 0x00000020,
+ FOS_FORCEFILESYSTEM = 0x00000040,
+ FOS_ALLNONSTORAGEITEMS = 0x00000080,
+ FOS_NOVALIDATE = 0x00000100,
+ FOS_ALLOWMULTISELECT = 0x00000200,
+ FOS_PATHMUSTEXIST = 0x00000800,
+ FOS_FILEMUSTEXIST = 0x00001000,
+ FOS_CREATEPROMPT = 0x00002000,
+ FOS_SHAREAWARE = 0x00004000,
+ FOS_NOREADONLYRETURN = 0x00008000,
+ FOS_NOTESTFILECREATE = 0x00010000,
+ FOS_HIDEMRUPLACES = 0x00020000,
+ FOS_HIDEPINNEDPLACES = 0x00040000,
+ FOS_NODEREFERENCELINKS = 0x00100000,
+ FOS_DONTADDTORECENT = 0x02000000,
+ FOS_FORCESHOWHIDDEN = 0x10000000,
+ FOS_DEFAULTNOMINIMODE = 0x20000000,
+ FOS_FORCEPREVIEWPANEON = 0x40000000
+ };
+ typedef DWORD FILEOPENDIALOGOPTIONS;
+
+ HRESULT SetFileTypes(
+ [in] UINT cFileTypes,
+ [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFilterSpec);
+
+ HRESULT SetFileTypeIndex(
+ [in] UINT iFileType);
+
+ HRESULT GetFileTypeIndex(
+ [out] UINT *piFileType);
+
+ HRESULT Advise(
+ [in] IFileDialogEvents *pfde,
+ [out] DWORD *pdwCookie);
+
+ HRESULT Unadvise(
+ [in] DWORD dwCookie);
+
+ HRESULT SetOptions(
+ [in] FILEOPENDIALOGOPTIONS fos);
+
+ HRESULT GetOptions(
+ [in] FILEOPENDIALOGOPTIONS *pfos);
+
+ HRESULT SetDefaultFolder(
+ [in] IShellItem *psi);
+
+ HRESULT SetFolder(
+ [in] IShellItem *psi);
+
+ HRESULT GetFolder(
+ [out] IShellItem **ppsi);
+
+ HRESULT GetCurrentSelection(
+ [out] IShellItem **ppsi);
+
+ HRESULT SetFileName(
+ [in, string] LPCWSTR pszName);
+
+ HRESULT GetFileName(
+ [out, string] LPWSTR *pszName);
+
+ HRESULT SetTitle(
+ [in, string] LPCWSTR pszTitle);
+
+ HRESULT SetOkButtonLabel(
+ [in, string] LPCWSTR pszText);
+
+ HRESULT SetFileNameLabel(
+ [in, string] LPCWSTR pszLabel);
+
+ HRESULT GetResult(
+ [out] IShellItem **ppsi);
+
+ HRESULT AddPlace(
+ [in] IShellItem *psi,
+ [in] FDAP fdap);
+
+ HRESULT SetDefaultExtension(
+ [in, string] LPCWSTR pszDefaultExtension);
+
+ HRESULT Close(
+ [in] HRESULT hr);
+
+ HRESULT SetClientGuid(
+ [in] REFGUID guid);
+
+ HRESULT ClearClientData();
+
+ HRESULT SetFilter(
+ [in] IShellItemFilter *pFilter);
+}
+
+/*****************************************************************************
+ * IFileDialog2 interface
+ */
+[
+ object,
+ uuid(61744FC7-85B5-4791-A9B0-272276309B13),
+ pointer_default(unique)
+]
+interface IFileDialog2 : IFileDialog
+{
+ HRESULT SetCancelButtonLabel(
+ [in] LPCWSTR pszLabel);
+
+ HRESULT SetNavigationRoot(
+ [in] IShellItem *psi);
+}
+
+/*****************************************************************************
+ * IFileOperationProgressSink interface
+ */
+[
+ object,
+ uuid(04B0F1A7-9490-44BC-96E1-4296A31252E2),
+ pointer_default(unique)
+]
+interface IFileOperationProgressSink : IUnknown
+{
+ HRESULT StartOperations();
+
+ HRESULT FinishOperations(
+ [in] HRESULT hrResult);
+
+ HRESULT PreRenameItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in, unique, string] LPCWSTR pszNewName);
+
+ HRESULT PostRenameItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in, string] LPCWSTR pszNewName,
+ [in] HRESULT hrRename,
+ [in] IShellItem *psiNewlyCreated);
+
+ HRESULT PreMoveItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in] IShellItem *psiDestinationFolder,
+ [in, unique, string] LPCWSTR pszNewName);
+
+ HRESULT PostMoveItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in] IShellItem *psiDestinationFolder,
+ [in, unique, string] LPCWSTR pszNewName,
+ [in] HRESULT hrMove,
+ [in] IShellItem *psiNewlyCreated);
+
+ HRESULT PreCopyItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in] IShellItem *psiDestinationFolder,
+ [in, unique, string] LPCWSTR pszNewName);
+
+ HRESULT PostCopyItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in] IShellItem *psiDestinationFolder,
+ [in, unique, string] LPCWSTR pszNewName,
+ [in] HRESULT hrCopy,
+ [in] IShellItem *psiNewlyCreated);
+
+ HRESULT PreDeleteItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem);
+
+ HRESULT PostDeleteItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiItem,
+ [in] HRESULT hrDelete,
+ [in] IShellItem *psiNewlyCreated);
+
+ HRESULT PreNewItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiDestinationFolder,
+ [in, unique, string] LPCWSTR pszNewName);
+
+ HRESULT PostNewItem(
+ [in] DWORD dwFlags,
+ [in] IShellItem *psiDestinationFolder,
+ [in, unique, string] LPCWSTR pszNewName,
+ [in, unique, string] LPCWSTR pszTemplateName,
+ [in] DWORD dwFileAttributes,
+ [in] HRESULT hrNew,
+ [in] IShellItem *psiNewItem);
+
+ HRESULT UpdateProgress(
+ [in] UINT iWorkTotal,
+ [in] UINT iWorkSoFar);
+
+ HRESULT ResetTimer();
+
+ HRESULT PauseTimer();
+
+ HRESULT ResumeTimer();
+}
+
+/*****************************************************************************
+ * IFileSaveDialog interface
+ */
+[
+ object,
+ uuid(84BCCD23-5FDE-4CDB-AEA4-AF64B83D78AB),
+ pointer_default(unique)
+]
+interface IFileSaveDialog : IFileDialog
+{
+ HRESULT SetSaveAsItem(
+ [in] IShellItem *psi);
+
+ HRESULT SetProperties(
+ [in] IPropertyStore *pStore);
+
+ HRESULT SetCollectedProperties(
+ [in] IPropertyDescriptionList *pList,
+ [in] BOOL fAppendDefault);
+
+ HRESULT GetProperties(
+ [in] IPropertyStore **ppStore);
+
+ HRESULT ApplyProperties(
+ [in] IShellItem *psi,
+ [in] IPropertyStore *pStore,
+ [in, unique] HWND hwnd,
+ [in, unique] IFileOperationProgressSink *pSink);
+}
+
+
+/*****************************************************************************
+ * IFileOpenDialog interface
+ */
+[
+ object,
+ uuid(D57C7288-D4AD-4768-BE02-9D969532D960),
+ pointer_default(unique)
+]
+interface IFileOpenDialog : IFileDialog
+{
+ HRESULT GetResults(
+ [out] IShellItemArray **ppenum);
+
+ HRESULT GetSelectedItems(
+ [out] IShellItemArray **ppsai);
+}
+
+typedef [v1_enum] enum CDCONTROLSTATEF
+{
+ CDCS_INACTIVE = 0x0,
+ CDCS_ENABLED = 0x1,
+ CDCS_VISIBLE = 0x2,
+ CDCS_ENABLEDVISIBLE = 0x3
+} CDCONTROLSTATEF;
+cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(CDCONTROLSTATEF)")
+/*****************************************************************************
+ * IFileDialogCustomize interface
+ */
+[
+ object,
+ uuid(E6FDD21A-163F-4975-9C8C-A69F1BA37034),
+ pointer_default(unique)
+]
+interface IFileDialogCustomize : IUnknown
+{
+ HRESULT EnableOpenDropDown(
+ [in] DWORD dwIDCtl);
+
+ HRESULT AddMenu(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszLabel);
+
+ HRESULT AddPushButton(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszLabel);
+
+ HRESULT AddComboBox(
+ [in] DWORD dwIDCtl);
+
+ HRESULT AddRadioButtonList(
+ [in] DWORD dwIDCtl);
+
+ HRESULT AddCheckButton(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszLabel,
+ [in] BOOL bChecked);
+
+ HRESULT AddEditBox(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszText);
+
+ HRESULT AddSeparator(
+ [in] DWORD dwIDCtl);
+
+ HRESULT AddText(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszText);
+
+ HRESULT SetControlLabel(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszLabel);
+
+ HRESULT GetControlState(
+ [in] DWORD dwIDCtl,
+ [out] CDCONTROLSTATEF *pdwState);
+
+ HRESULT SetControlState(
+ [in] DWORD dwIDCtl,
+ [in] CDCONTROLSTATEF dwState);
+
+ HRESULT GetEditBoxText(
+ [in] DWORD dwIDCtl,
+ [out, string] WCHAR **ppszText);
+
+ HRESULT SetEditBoxText(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszText);
+
+ HRESULT GetCheckButtonState(
+ [in] DWORD dwIDCtl,
+ [out] BOOL *pbChecked);
+
+ HRESULT SetCheckButtonState(
+ [in] DWORD dwIDCtl,
+ [in] BOOL bChecked);
+
+ HRESULT AddControlItem(
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem,
+ [in] LPCWSTR pszLabel);
+
+ HRESULT RemoveControlItem(
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem);
+
+ HRESULT RemoveAllControlItems(
+ [in] DWORD dwIDCtl);
+
+ HRESULT GetControlItemState(
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem,
+ [out] CDCONTROLSTATEF *pdwState);
+
+ HRESULT SetControlItemState(
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem,
+ [in] CDCONTROLSTATEF dwState);
+
+ HRESULT GetSelectedControlItem(
+ [in] DWORD dwIDCtl,
+ [out] DWORD *pdwIDItem);
+
+ HRESULT SetSelectedControlItem(
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem);
+
+ HRESULT StartVisualGroup(
+ [in] DWORD dwIDCtl,
+ [in, string] LPCWSTR pszLabel);
+
+ HRESULT EndVisualGroup();
+
+ HRESULT MakeProminent(
+ [in] DWORD dwIDCtl);
+
+ HRESULT SetControlItemText(
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem,
+ [in, string] LPCWSTR pszLabel);
+}
+
+/*****************************************************************************
+ * IFileDialogControlEvents interface
+ */
+[
+ object,
+ uuid(36116642-D713-4B97-9B83-7484A9D00433),
+ pointer_default(unique)
+]
+interface IFileDialogControlEvents : IUnknown
+{
+ HRESULT OnItemSelected(
+ [in] IFileDialogCustomize *pfdc,
+ [in] DWORD dwIDCtl,
+ [in] DWORD dwIDItem);
+
+ HRESULT OnButtonClicked(
+ [in] IFileDialogCustomize *pfdc,
+ [in] DWORD dwIDCtl);
+
+ HRESULT OnCheckButtonToggled(
+ [in] IFileDialogCustomize *pfdc,
+ [in] BOOL dwIDCtl,
+ [in] BOOL bChecked);
+
+ HRESULT OnControlActivating(
+ [in] IFileDialogCustomize *pfdc,
+ [in] DWORD dwIDCtl);
+}
+
+typedef [v1_enum] enum tagKF_CATEGORY
+{
+ KF_CATEGORY_VIRTUAL = 0x00000001,
+ KF_CATEGORY_FIXED = 0x00000002,
+ KF_CATEGORY_COMMON = 0x00000003,
+ KF_CATEGORY_PERUSER = 0x00000004
+} KF_CATEGORY;
+
+typedef [v1_enum] enum tagKF_REDIRECTION_CAPABILITIES
+{
+ KF_REDIRECTION_CAPABILITIES_ALLOW_ALL = 0x000000ff,
+ KF_REDIRECTION_CAPABILITIES_REDIRECTABLE = 0x00000001,
+ KF_REDIRECTION_CAPABILITIES_DENY_ALL = 0x000fff00,
+ KF_REDIRECTION_CAPABILITIES_DENY_POLICY_REDIRECTED = 0x00000100,
+ KF_REDIRECTION_CAPABILITIES_DENY_POLICY = 0x00000200,
+ KF_REDIRECTION_CAPABILITIES_DENY_PERMISSIONS = 0x00000400
+} KF_REDIRECTION_CAPABILITIES;
+
+typedef [v1_enum] enum tagKF_DEFINITION_FLAGS
+{
+ KFDF_LOCAL_REDIRECT_ONLY = 0x00000002,
+ KFDF_ROAMABLE = 0x00000004,
+ KFDF_PRECREATE = 0x00000008,
+ KFDF_STREAM = 0x00000010,
+ KFDF_PUBLISHEXPANDEDPATH = 0x00000020
+} KF_DEFINITION_FLAGS;
+
+typedef struct tagKNOWNFOLDER_DEFINITION
+{
+ KF_CATEGORY category;
+ LPWSTR pszName;
+ LPWSTR pszDescription;
+ KNOWNFOLDERID fidParent;
+ LPWSTR pszRelativePath;
+ LPWSTR pszParsingName;
+ LPWSTR pszTooltip;
+ LPWSTR pszLocalizedName;
+ LPWSTR pszIcon;
+ LPWSTR pszSecurity;
+ DWORD dwAttributes;
+ KF_DEFINITION_FLAGS kfdFlags;
+ FOLDERTYPEID ftidType;
+} KNOWNFOLDER_DEFINITION;
+
+[
+ object,
+ uuid(3aa7af7e-9b36-420C-a8e3-f77d4674a488),
+ pointer_default(ref)
+]
+interface IKnownFolder : IUnknown
+{
+ HRESULT GetId(
+ [out] KNOWNFOLDERID *pkfid);
+
+ HRESULT GetCategory(
+ [out] KF_CATEGORY *pCategory);
+
+ HRESULT GetShellItem(
+ [in] DWORD dwFlags,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT GetPath(
+ [in] DWORD dwFlags,
+ [out, string] LPWSTR *ppszPath);
+
+ HRESULT SetPath(
+ [in] DWORD dwFlags,
+ [in, string] LPCWSTR pszPath);
+
+ HRESULT GetIDList(
+ [in] DWORD dwFlags,
+ [out] PIDLIST_ABSOLUTE *ppidl);
+
+ HRESULT GetFolderType(
+ [out] FOLDERTYPEID *pftid);
+
+ HRESULT GetRedirectionCapabilities(
+ [out] KF_REDIRECTION_CAPABILITIES *pCapabilities);
+
+ HRESULT GetFolderDefinition(
+ [out] KNOWNFOLDER_DEFINITION *pKFD);
+}
+
+typedef [v1_enum] enum tagKF_REDIRECT_FLAGS
+{
+ KF_REDIRECT_USER_EXCLUSIVE = 0x00000001,
+ KF_REDIRECT_COPY_SOURCE_DACL = 0x00000002,
+ KF_REDIRECT_OWNER_USER = 0x00000004,
+ KF_REDIRECT_SET_OWNER_EXPLICIT = 0x00000008,
+ KF_REDIRECT_CHECK_ONLY = 0x00000010,
+ KF_REDIRECT_WITH_UI = 0x00000020,
+ KF_REDIRECT_UNPIN = 0x00000040,
+ KF_REDIRECT_PIN = 0x00000080,
+ KF_REDIRECT_COPY_CONTENTS = 0x00000200,
+ KF_REDIRECT_DEL_SOURCE_CONTENTS = 0x00000400,
+ KF_REDIRECT_EXCLUDE_ALL_KNOWN_SUBFOLDERS = 0x00000800
+} KF_REDIRECT_FLAGS;
+
+[
+ object,
+ uuid(8BE2D872-86AA-4d47-B776-32CCA40C7018),
+ pointer_default(ref)
+]
+interface IKnownFolderManager : IUnknown
+{
+ typedef [v1_enum] enum tagFFFP_MODE
+ {
+ FFFP_EXACTMATCH,
+ FFFP_NEARESTPARENTMATCH
+ } FFFP_MODE;
+
+ HRESULT FolderIdFromCsidl(
+ [in] int nCsidl,
+ [out] KNOWNFOLDERID *pfid);
+
+ HRESULT FolderIdToCsidl(
+ [in] REFKNOWNFOLDERID rfid,
+ [out] int *pnCsidl);
+
+ HRESULT GetFolderIds(
+ [out, size_is(, *pCount)] KNOWNFOLDERID **ppKFId,
+ [in, out] UINT *pCount);
+
+ HRESULT GetFolder(
+ [in] REFKNOWNFOLDERID rfid,
+ [out] IKnownFolder **ppkf);
+
+ HRESULT GetFolderByName(
+ [in, string] LPCWSTR pszCanonicalName,
+ [out] IKnownFolder **ppkf);
+
+ HRESULT RegisterFolder(
+ [in] REFKNOWNFOLDERID rfid,
+ [in] KNOWNFOLDER_DEFINITION const *pKFD);
+
+ HRESULT UnregisterFolder(
+ [in] REFKNOWNFOLDERID rfid);
+
+ HRESULT FindFolderFromPath(
+ [in, string] LPCWSTR pszPath,
+ [in] FFFP_MODE mode,
+ [out] IKnownFolder **ppkf);
+
+ HRESULT FindFolderFromIDList(
+ [in] PCIDLIST_ABSOLUTE pidl,
+ [out] IKnownFolder **ppkf);
+
+ HRESULT Redirect(
+ [in] REFKNOWNFOLDERID rfid,
+ [in, unique] HWND hwnd,
+ [in] KF_REDIRECT_FLAGS flags,
+ [in, unique, string] LPCWSTR pszTargetPath,
+ [in] UINT cFolders,
+ [in, size_is(cFolders), unique] KNOWNFOLDERID const *pExclusion,
+ [out, string] LPWSTR *ppszError);
+}
+
+/* function for releasing structure returned from IKnownFolder::GetFolderDefinition */
+cpp_quote("static inline void FreeKnownFolderDefinitionFields(KNOWNFOLDER_DEFINITION *pKFD)")
+cpp_quote("{")
+cpp_quote(" CoTaskMemFree(pKFD->pszName);")
+cpp_quote(" CoTaskMemFree(pKFD->pszDescription);")
+cpp_quote(" CoTaskMemFree(pKFD->pszRelativePath);")
+cpp_quote(" CoTaskMemFree(pKFD->pszParsingName);")
+cpp_quote(" CoTaskMemFree(pKFD->pszTooltip);")
+cpp_quote(" CoTaskMemFree(pKFD->pszLocalizedName);")
+cpp_quote(" CoTaskMemFree(pKFD->pszIcon);")
+cpp_quote(" CoTaskMemFree(pKFD->pszSecurity);")
+cpp_quote("}")
+
+typedef [v1_enum] enum ASSOCIATIONLEVEL {
+ AL_MACHINE,
+ AL_EFFECTIVE,
+ AL_USER
+} ASSOCIATIONLEVEL;
+
+typedef [v1_enum] enum ASSOCIATIONTYPE {
+ AT_FILEEXTENSION,
+ AT_URLPROTOCOL,
+ AT_STARTMENUCLIENT,
+ AT_MIMETYPE
+} ASSOCIATIONTYPE;
+
+[
+ object,
+ uuid(4e530b0a-e611-4c77-a3ac-9031d022281b),
+ pointer_default(unique)
+]
+interface IApplicationAssociationRegistration : IUnknown
+{
+ HRESULT QueryCurrentDefault(
+ [in, string] LPCWSTR pszQuery,
+ [in] ASSOCIATIONTYPE atQueryType,
+ [in] ASSOCIATIONLEVEL alQueryLevel,
+ [out, string] LPWSTR *ppszAssociation);
+
+ HRESULT QueryAppIsDefault(
+ [in, string] LPCWSTR pszQuery,
+ [in] ASSOCIATIONTYPE atQueryType,
+ [in] ASSOCIATIONLEVEL alQueryLevel,
+ [in, string] LPCWSTR pszAppRegistryName,
+ [out] BOOL *pfDefault);
+
+ HRESULT QueryAppIsDefaultAll(
+ [in] ASSOCIATIONLEVEL alQueryLevel,
+ [in, string] LPCWSTR pszAppRegistryName,
+ [out] BOOL* pfDefault);
+
+ HRESULT SetAppAsDefault(
+ [in, string] LPCWSTR pszAppRegistryName,
+ [in, string] LPCWSTR pszSet,
+ [in] ASSOCIATIONTYPE atSetType);
+
+ HRESULT SetAppAsDefaultAll(
+ [in, string] LPCWSTR pszAppRegistryName);
+
+ HRESULT ClearUserAssociations();
+}
+
+[
+ uuid(6332debf-87b5-4670-90c0-5e57b408a49e),
+ object,
+ pointer_default(unique)
+]
+interface ICustomDestinationList : IUnknown
+{
+ typedef [v1_enum] enum KNOWNDESTCATEGORY {
+ KDC_FREQUENT = 1,
+ KDC_RECENT
+ } KNOWNDESTCATEGORY;
+
+ HRESULT SetAppID([in, string] LPCWSTR pszAppID);
+
+ HRESULT BeginList(
+ [out] UINT *pcMinSlots,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT AppendCategory(
+ [in, string] LPCWSTR pszCategory,
+ [in] IObjectArray *poa);
+
+ HRESULT AppendKnownCategory([in] KNOWNDESTCATEGORY category);
+ HRESULT AddUserTasks([in] IObjectArray *poa);
+ HRESULT CommitList();
+
+ HRESULT GetRemovedDestinations(
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv);
+
+ HRESULT DeleteList([in, unique, string] LPCWSTR pszAppID);
+ HRESULT AbortList();
+}
+
+/*****************************************************************************
+ * ShellObjects typelibrary
+ */
+[
+ uuid(50A7E9B1-70EF-11D1-B75A-00A0C90564FE),
+ lcid(0x0000),
+ version(1.0)
+]
+library ShellObjects
+{
+ [
+ uuid(71F96385-DDD6-48D3-A0C1-AE06E8B055FB)
+ ]
+ coclass ExplorerBrowser
+ {
+ interface IExplorerBrowser;
+ }
+
+ [
+ uuid(DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7)
+ ]
+ coclass FileOpenDialog
+ {
+ interface IFileOpenDialog;
+ }
+
+ [
+ uuid(C0B4E2F3-BA21-4773-8DBA-335EC946EB8B)
+ ]
+ coclass FileSaveDialog
+ {
+ interface IFileSaveDialog;
+ }
+
+ [
+ uuid(AE054212-3535-4430-83ED-D501AA6680E6)
+ ]
+ coclass NamespaceTreeControl
+ {
+ interface INameSpaceTreeControl2;
+ }
+
+ [
+ uuid(4df0c730-df9d-4ae3-9153-aa6b82e9795a)
+ ]
+ coclass KnownFolderManager
+ {
+ interface IKnownFolderManager;
+ }
+
+ [
+ uuid(591209c7-767b-42b2-9fba-44ee4615f2c7)
+ ]
+ coclass ApplicationAssociationRegistration
+ {
+ interface IApplicationAssociationRegistration;
+ }
+
+ [
+ uuid(00021401-0000-0000-c000-000000000046)
+ ]
+ coclass ShellLink
+ {
+ interface IShellLinkW;
+ }
+
+ [
+ uuid(56fdf344-fd6d-11d0-958a-006097c9a090)
+ ]
+ coclass TaskbarList
+ {
+ interface ITaskbarList4;
+ }
+
+ [
+ uuid(77f10cf0-3db5-4966-b520-b7c54fd35ed6)
+ ]
+ coclass DestinationList {
+ interface ICustomDestinationList;
+ }
+
+ [
+ uuid(2d3468c1-36a7-43b6-ac24-d3f02fd9607a)
+ ]
+ coclass EnumerableObjectCollection
+ {
+ interface IEnumObjects;
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl
new file mode 100644
index 00000000..f4c7ea9f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/shtypes.idl
@@ -0,0 +1,171 @@
+/*
+ * Type definitions for shell objects
+ *
+ * Copyright (C) 1999 Juergen Schmied
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+cpp_quote("#include <pshpack1.h>")
+typedef struct
+{
+ WORD cb; /* nr of bytes in this item */
+ BYTE abID[1]; /* first byte in this item */
+} SHITEMID, *LPSHITEMID;
+typedef const SHITEMID *LPCSHITEMID;
+
+typedef struct _ITEMIDLIST
+{
+ SHITEMID mkid; /* first itemid in list */
+} ITEMIDLIST,*LPITEMIDLIST;
+typedef const ITEMIDLIST *LPCITEMIDLIST;
+typedef LPITEMIDLIST PITEMID_CHILD;
+typedef const PITEMID_CHILD PCITEMID_CHILD;
+typedef LPCITEMIDLIST PCUITEMID_CHILD;
+typedef LPCITEMIDLIST *PCUITEMID_CHILD_ARRAY;
+typedef LPCITEMIDLIST PCUIDLIST_RELATIVE;
+typedef LPITEMIDLIST PIDLIST_ABSOLUTE;
+typedef LPCITEMIDLIST PCIDLIST_ABSOLUTE;
+cpp_quote("#include <poppack.h>")
+
+#ifndef MAX_PATH
+#define MAX_PATH 260
+#endif
+
+cpp_quote("#if 0")
+typedef struct { int dummy; } WIN32_FIND_DATAA, WIN32_FIND_DATAW;
+cpp_quote("#endif")
+
+typedef enum tagSTRRET_TYPE
+{
+ STRRET_WSTR = 0,
+ STRRET_OFFSET = 1,
+ STRRET_CSTR = 2
+} STRRET_TYPE;
+
+cpp_quote("#include <pshpack8.h>")
+typedef struct _STRRET
+{
+ UINT uType; /* STRRET_xxx */
+ [switch_type(UINT), switch_is(uType)] union
+ {
+ [case(STRRET_WSTR)][string] LPWSTR pOleStr; /* OLESTR that will be freed */
+ [case(STRRET_OFFSET)] UINT uOffset; /* Offset into SHITEMID (ANSI) */
+ [case(STRRET_CSTR)] char cStr[MAX_PATH]; /* ANSI Buffer */
+ } DUMMYUNIONNAME;
+} STRRET, *LPSTRRET;
+cpp_quote("#include <poppack.h>")
+
+cpp_quote("#include <pshpack1.h>")
+typedef struct
+{
+ int fmt;
+ int cxChar;
+ STRRET str;
+} SHELLDETAILS, *LPSHELLDETAILS;
+cpp_quote("#include <poppack.h>")
+
+typedef struct _COMDLG_FILTERSPEC
+{
+ [string] LPCWSTR pszName;
+ [string] LPCWSTR pszSpec;
+} COMDLG_FILTERSPEC;
+
+typedef [v1_enum] enum tagSHCOLSTATE
+{
+ SHCOLSTATE_DEFAULT = 0,
+ SHCOLSTATE_TYPE_STR,
+ SHCOLSTATE_TYPE_INT,
+ SHCOLSTATE_TYPE_DATE,
+ SHCOLSTATE_TYPEMASK = 0xf,
+ SHCOLSTATE_ONBYDEFAULT = 0x10,
+ SHCOLSTATE_SLOW = 0x20,
+ SHCOLSTATE_EXTENDED = 0x40,
+ SHCOLSTATE_SECONDARYUI = 0x80,
+ SHCOLSTATE_HIDDEN = 0x100,
+ SHCOLSTATE_PREFER_VARCMP = 0x200,
+ SHCOLSTATE_PREFER_FMTCMP = 0x400,
+ SHCOLSTATE_NOSORTBYFOLDERNESS = 0x800,
+ SHCOLSTATE_VIEWONLY = 0x10000,
+ SHCOLSTATE_BATCHREAD = 0x20000,
+ SHCOLSTATE_NO_GROUPBY = 0x40000,
+ SHCOLSTATE_FIXED_WIDTH = 0x1000,
+ SHCOLSTATE_NODPISCALE = 0x2000,
+ SHCOLSTATE_FIXED_RATIO = 0x4000,
+ SHCOLSTATE_DISPLAYMASK = 0xf000
+} SHCOLSTATE;
+
+typedef DWORD SHCOLSTATEF;
+
+typedef GUID KNOWNFOLDERID;
+
+cpp_quote("#if 0")
+typedef KNOWNFOLDERID *REFKNOWNFOLDERID;
+cpp_quote("#endif")
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID &")
+cpp_quote("#else")
+cpp_quote("#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST")
+cpp_quote("#endif")
+
+typedef GUID FOLDERTYPEID;
+
+cpp_quote("#if 0")
+typedef FOLDERTYPEID *REFFOLDERTYPEID;
+cpp_quote("#endif")
+
+cpp_quote("#ifdef __cplusplus")
+cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID &")
+cpp_quote("#else")
+cpp_quote("#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST")
+cpp_quote("#endif")
+
+typedef [v1_enum] enum tagPERCEIVED {
+ PERCEIVED_TYPE_CUSTOM = -3,
+ PERCEIVED_TYPE_UNSPECIFIED = -2,
+ PERCEIVED_TYPE_FOLDER = -1,
+ PERCEIVED_TYPE_UNKNOWN = 0,
+ PERCEIVED_TYPE_TEXT = 1,
+ PERCEIVED_TYPE_IMAGE = 2,
+ PERCEIVED_TYPE_AUDIO = 3,
+ PERCEIVED_TYPE_VIDEO = 4,
+ PERCEIVED_TYPE_COMPRESSED = 5,
+ PERCEIVED_TYPE_DOCUMENT = 6,
+ PERCEIVED_TYPE_SYSTEM = 7,
+ PERCEIVED_TYPE_APPLICATION = 8,
+ PERCEIVED_TYPE_GAMEMEDIA = 9,
+ PERCEIVED_TYPE_CONTACTS = 10
+} PERCEIVED;
+
+cpp_quote("#define PERCEIVEDFLAG_UNDEFINED 0x0000")
+cpp_quote("#define PERCEIVEDFLAG_SOFTCODED 0x0001")
+cpp_quote("#define PERCEIVEDFLAG_HARDCODED 0x0002")
+cpp_quote("#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004")
+cpp_quote("#define PERCEIVEDFLAG_GDIPLUS 0x0010")
+cpp_quote("#define PERCEIVEDFLAG_WMSDK 0x0020")
+cpp_quote("#define PERCEIVEDFLAG_ZIPFOLDER 0x0040")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h
new file mode 100644
index 00000000..a8ca7afb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sipbase.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SIPBASE_H
+#define __WINE_SIPBASE_H
+
+#include <mssip.h>
+
+#endif /* __WINE_SIPBASE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h
new file mode 100644
index 00000000..927174de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/slerror.h
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright 2008 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SLERROR_H
+#define __WINE_SLERROR_H
+
+#define SL_E_RIGHT_NOT_GRANTED 0xC004F013
+#define SL_E_DATATYPE_MISMATCHED 0xC004F01E
+
+#endif /* __WINE_SLERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h
new file mode 100644
index 00000000..9cd0a6d1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/slpublic.h
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright 2008 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SLPUBLIC_H
+#define __WINE_SLPUBLIC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _SLC_
+#define SLCAPI
+#else
+#define SLCAPI DECLSPEC_IMPORT
+#endif
+
+SLCAPI DWORD WINAPI SLGetWindowsInformationDWORD(LPCWSTR lpszValueName, LPDWORD pdwValue);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_SLPUBLIC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h
new file mode 100644
index 00000000..9b2ba934
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/snmp.h
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2005 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_SNMP_H
+#define _WINE_SNMP_H
+
+#include <windows.h>
+
+#include <pshpack4.h>
+
+typedef struct {
+ BYTE *stream;
+ UINT length;
+ BOOL dynamic;
+} AsnOctetString;
+
+typedef struct {
+ UINT idLength;
+ UINT *ids;
+} AsnObjectIdentifier;
+
+typedef LONG AsnInteger32;
+typedef ULONG AsnUnsigned32;
+typedef ULARGE_INTEGER AsnCounter64;
+typedef AsnUnsigned32 AsnCounter32;
+typedef AsnUnsigned32 AsnGauge32;
+typedef AsnUnsigned32 AsnTimeticks;
+typedef AsnOctetString AsnBits;
+typedef AsnOctetString AsnSequence;
+typedef AsnOctetString AsnImplicitSequence;
+typedef AsnOctetString AsnIPAddress;
+typedef AsnOctetString AsnNetworkAddress;
+typedef AsnOctetString AsnDisplayString;
+typedef AsnOctetString AsnOpaque;
+
+typedef struct {
+ BYTE asnType;
+ union {
+ AsnInteger32 number;
+ AsnUnsigned32 unsigned32;
+ AsnCounter64 counter64;
+ AsnOctetString string;
+ AsnBits bits;
+ AsnObjectIdentifier object;
+ AsnSequence sequence;
+ AsnIPAddress address;
+ AsnCounter32 counter;
+ AsnGauge32 gauge;
+ AsnTimeticks ticks;
+ AsnOpaque arbitrary;
+ } asnValue;
+} AsnAny;
+
+typedef AsnObjectIdentifier AsnObjectName;
+typedef AsnAny AsnObjectSyntax;
+
+typedef struct {
+ AsnObjectName name;
+ AsnObjectSyntax value;
+} SnmpVarBind;
+
+typedef struct {
+ SnmpVarBind *list;
+ UINT len;
+} SnmpVarBindList;
+
+#include <poppack.h>
+
+#define ASN_UNIVERSAL 0x00
+#define ASN_APPLICATION 0x40
+#define ASN_CONTEXT 0x80
+#define ASN_PRIVATE 0xc0
+#define ASN_PRIMITIVE 0x00
+#define ASN_CONSTRUCTOR 0x20
+
+#define SNMP_PDU_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x00)
+#define SNMP_PDU_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x01)
+#define SNMP_PDU_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x02)
+#define SNMP_PDU_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x03)
+#define SNMP_PDU_V1TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x04)
+#define SNMP_PDU_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x05)
+#define SNMP_PDU_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x06)
+#define SNMP_PDU_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x07)
+
+#define ASN_INTEGER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x02)
+#define ASN_BITS (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
+#define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04)
+#define ASN_NULL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x05)
+#define ASN_OBJECTIDENTIFIER (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x06)
+#define ASN_INTEGER32 ASN_INTEGER
+
+#define ASN_SEQUENCE (ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10)
+#define ASN_SEQUENCEOF ASN_SEQUENCE
+
+#define ASN_IPADDRESS (ASN_APPLICATION | ASN_PRIMITIVE | 0x00)
+#define ASN_COUNTER32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x01)
+#define ASN_GAUGE32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x02)
+#define ASN_TIMETICKS (ASN_APPLICATION | ASN_PRIMITIVE | 0x03)
+#define ASN_OPAQUE (ASN_APPLICATION | ASN_PRIMITIVE | 0x04)
+#define ASN_COUNTER64 (ASN_APPLICATION | ASN_PRIMITIVE | 0x06)
+#define ASN_UNSIGNED32 (ASN_APPLICATION | ASN_PRIMITIVE | 0x07)
+
+#define SNMP_EXCEPTION_NOSUCHOBJECT (ASN_CONTEXT | ASN_PRIMITIVE | 0x00)
+#define SNMP_EXCEPTION_NOSUCHINSTANCE (ASN_CONTEXT | ASN_PRIMITIVE | 0x01)
+#define SNMP_EXCEPTION_ENDOFMIBVIEW (ASN_CONTEXT | ASN_PRIMITIVE | 0x02)
+
+#define SNMP_EXTENSION_GET SNMP_PDU_GET
+#define SNMP_EXTENSION_GET_NEXT SNMP_PDU_GETNEXT
+#define SNMP_EXTENSION_GET_BULK SNMP_PDU_GETBULK
+#define SNMP_EXTENSION_SET_TEST (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x0)
+#define SNMP_EXTENSION_SET_COMMIT SNMP_PDU_SET
+#define SNMP_EXTENSION_SET_UNDO (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x1)
+#define SNMP_EXTENSION_SET_CLEANUP (ASN_PRIVATE | ASN_CONSTRUCTOR | 0x2)
+
+#define SNMP_ERRORSTATUS_NOERROR 0
+#define SNMP_ERRORSTATUS_TOOBIG 1
+#define SNMP_ERRORSTATUS_NOSUCHNAME 2
+#define SNMP_ERRORSTATUS_BADVALUE 3
+#define SNMP_ERRORSTATUS_READONLY 4
+#define SNMP_ERRORSTATUS_GENERR 5
+#define SNMP_ERRORSTATUS_NOACCESS 6
+#define SNMP_ERRORSTATUS_WRONGTYPE 7
+#define SNMP_ERRORSTATUS_WRONGLENGTH 8
+#define SNMP_ERRORSTATUS_WRONGENCODING 9
+#define SNMP_ERRORSTATUS_WRONGVALUE 10
+#define SNMP_ERRORSTATUS_NOCREATION 11
+#define SNMP_ERRORSTATUS_INCONSISTENTVALUE 12
+#define SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE 13
+#define SNMP_ERRORSTATUS_COMMITFAILED 14
+#define SNMP_ERRORSTATUS_UNDOFAILED 15
+#define SNMP_ERRORSTATUS_AUTHORIZATIONERROR 16
+#define SNMP_ERRORSTATUS_NOTWRITABLE 17
+#define SNMP_ERRORSTATUS_INCONSISTENTNAME 18
+
+#define SNMP_GENERICTRAP_COLDSTART 0
+#define SNMP_GENERICTRAP_WARMSTART 1
+#define SNMP_GENERICTRAP_LINKDOWN 2
+#define SNMP_GENERICTRAP_LINKUP 3
+#define SNMP_GENERICTRAP_AUTHFAILURE 4
+#define SNMP_GENERICTRAP_EGPNEIGHLOSS 5
+#define SNMP_GENERICTRAP_ENTERSPECIFIC 6
+
+#define SNMP_ACCESS_NONE 0
+#define SNMP_ACCESS_NOTIFY 1
+#define SNMP_ACCESS_READ_ONLY 2
+#define SNMP_ACCESS_READ_WRITE 3
+#define SNMP_ACCESS_READ_CREATE 4
+
+#define SNMP_LOG_SILENT 0
+#define SNMP_LOG_FATAL 1
+#define SNMP_LOG_ERROR 2
+#define SNMP_LOG_WARNING 3
+#define SNMP_LOG_TRACE 4
+#define SNMP_LOG_VERBOSE 5
+
+#define SNMP_OUTPUT_TO_CONSOLE 1
+#define SNMP_OUTPUT_TO_LOGFILE 2
+#define SNMP_OUTPUT_TO_EVENTLOG 4
+#define SNMP_OUTPUT_TO_DEBUGGER 8
+
+#define DEFINE_SIZEOF(x) (sizeof(x)/sizeof((x)[0]))
+#define DEFINE_OID(x) { DEFINE_SIZEOF(x),(x) }
+#define DEFINE_NULLOID() { 0, NULL }
+#define DEFINE_NULLOCTENTS() { NULL, 0, FALSE }
+
+#define DEFAULT_SNMP_PORT_UDP 161
+#define DEFAULT_SNMP_PORT_IPX 36879
+#define DEFAULT_SNMPTRAP_PORT_UDP 162
+#define DEFAULT_SNMPTRAP_PORT_IPX 36880
+
+#define SNMP_MAX_OID_LEN 128
+
+#define SNMP_MEM_ALLOC_ERROR 0
+#define SNMP_BERAPI_INVALID_LENGTH 10
+#define SNMP_BERAPI_INVALID_TAG 11
+#define SNMP_BERAPI_OVERFLOW 12
+#define SNMP_BERAPI_SHORT_BUFFER 13
+#define SNMP_BERAPI_INVALID_OBJELEM 14
+#define SNMP_PDUAPI_UNRECOGNIZED_PDU 20
+#define SNMP_PDUAPI_INVALID_ES 21
+#define SNMP_PDUAPI_INVALID_GT 22
+#define SNMP_AUTHAPI_INVALID_VERSION 30
+#define SNMP_AUTHAPI_INVALID_MSG_TYPE 31
+#define SNMP_AUTHAPI_TRIV_AUTH_FAILED 32
+
+#define SNMPAPI_NOERROR TRUE
+#define SNMPAPI_ERROR FALSE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI SnmpExtensionInit(DWORD dwUptimeReference,
+ HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion);
+BOOL WINAPI SnmpExtensionInitEx(AsnObjectIdentifier *pNextSupportedRegion);
+
+BOOL WINAPI SnmpExtensionMonitor(LPVOID pAgentMgmtData);
+
+BOOL WINAPI SnmpExtensionQuery(BYTE bPduType, SnmpVarBindList *pVarBindList,
+ AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex);
+BOOL WINAPI SnmpExtensionQueryEx(UINT nRequestType, UINT nTransactionId,
+ SnmpVarBindList *pVarBindList, AsnOctetString *pContextInfo,
+ AsnInteger32 *pErrorStatus, AsnInteger32 *pErrorIndex);
+
+BOOL WINAPI SnmpExtensionTrap(AsnObjectIdentifier *pEnterpriseOid,
+ AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId,
+ AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList);
+
+VOID WINAPI SnmpExtensionClose(VOID);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONINIT)(DWORD dwUptimeReference,
+ HANDLE *phSubagentTrapEvent, AsnObjectIdentifier *pFirstSupportedRegion);
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONINITEX)(
+ AsnObjectIdentifier *pNextSupportedRegion);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONMONITOR)(LPVOID pAgentMgmtData);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERY)(BYTE bPduType,
+ SnmpVarBindList *pVarBindList, AsnInteger32 *pErrorStatus,
+ AsnInteger32 *pErrorIndex);
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONQUERYEX)(UINT nRequestType,
+ UINT nTransactionId, SnmpVarBindList *pVarBindList,
+ AsnOctetString *pContextInfo, AsnInteger32 *pErrorStatus,
+ AsnInteger32 *pErrorIndex);
+
+typedef BOOL (WINAPI *PFNSNMPEXTENSIONTRAP)(AsnObjectIdentifier *pEnterpriseOid,
+ AsnInteger32 *pGenericTrapId, AsnInteger32 *pSpecificTrapId,
+ AsnTimeticks *pTimeStamp, SnmpVarBindList *pVarBindList);
+
+typedef VOID (WINAPI *PFNSNMPEXTENSIONCLOSE)(VOID);
+
+INT WINAPI SnmpUtilOidCpy(AsnObjectIdentifier *pOidDst,
+ AsnObjectIdentifier *pOidSrc);
+INT WINAPI SnmpUtilOidAppend(AsnObjectIdentifier *pOidDst,
+ AsnObjectIdentifier *pOidSrc);
+INT WINAPI SnmpUtilOidCmp(AsnObjectIdentifier *pOid1,
+ AsnObjectIdentifier *pOid2);
+INT WINAPI SnmpUtilOidNCmp(AsnObjectIdentifier *pOid1,
+ AsnObjectIdentifier *pOid2, UINT nSubIds);
+VOID WINAPI SnmpUtilOidFree(AsnObjectIdentifier *pOid);
+
+INT WINAPI SnmpUtilOctetsCmp(AsnOctetString *pOctets1,
+ AsnOctetString *pOctets2);
+INT WINAPI SnmpUtilOctetsNCmp(AsnOctetString *pOctets1,
+ AsnOctetString *pOctets2, UINT nChars);
+INT WINAPI SnmpUtilOctetsCpy(AsnOctetString *pOctetsDst,
+ AsnOctetString *pOctetsSrc);
+VOID WINAPI SnmpUtilOctetsFree(AsnOctetString *pOctets);
+
+INT WINAPI SnmpUtilAsnAnyCpy(AsnAny *pAnyDst, AsnAny *pAnySrc);
+VOID WINAPI SnmpUtilAsnAnyFree(AsnAny *pAny);
+
+INT WINAPI SnmpUtilVarBindCpy(SnmpVarBind *pVbDst, SnmpVarBind *pVbSrc);
+VOID WINAPI SnmpUtilVarBindFree(SnmpVarBind *pVb);
+
+INT WINAPI SnmpUtilVarBindListCpy(SnmpVarBindList *pVblDst,
+ SnmpVarBindList *pVblSrc);
+VOID WINAPI SnmpUtilVarBindListFree(SnmpVarBindList *pVbl);
+
+LPVOID WINAPI SnmpUtilMemAlloc(UINT nBytes) __WINE_ALLOC_SIZE(1);
+LPVOID WINAPI SnmpUtilMemReAlloc(LPVOID pMem, UINT nBytes) __WINE_ALLOC_SIZE(2);
+VOID WINAPI SnmpUtilMemFree(LPVOID pMem);
+
+LPSTR WINAPI SnmpUtilOidToA(AsnObjectIdentifier *Oid);
+LPSTR WINAPI SnmpUtilIdsToA(UINT *Ids, UINT IdLength);
+
+VOID WINAPI SnmpUtilPrintOid(AsnObjectIdentifier *Oid);
+VOID WINAPI SnmpUtilPrintAsnAny(AsnAny *pAny);
+
+DWORD WINAPI SnmpSvcGetUptime(VOID);
+VOID WINAPI SnmpSvcSetLogLevel(INT nLogLevel);
+VOID WINAPI SnmpSvcSetLogType(INT nLogType);
+
+VOID WINAPIV SnmpUtilDbgPrint(INT nLogLevel, LPSTR szFormat, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINE_SNMP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h
new file mode 100644
index 00000000..e79cf9f2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/softpub.h
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2006 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SOFTPUB_H
+#define __WINE_SOFTPUB_H
+
+#include <wintrust.h>
+
+#define WINTRUST_ACTION_GENERIC_CERT_VERIFY \
+ { 0x189a3842, 0x3041, 0x11d1, { 0x85,0xe1,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define SP_GENERIC_CERT_INIT_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0}
+#elif defined(_MSC_VER)
+#define SP_GENERIC_CERT_INIT_FUNCTION L"SoftpubDefCertInit"
+#else
+static const WCHAR SP_GENERIC_CERT_INIT_FUNCTION[] =
+ {'S','o','f','t','p','u','b','D','e','f','C','e','r','t','I','n','i','t', 0};
+#endif
+
+#define WINTRUST_ACTION_GENERIC_CHAIN_VERIFY \
+ { 0xfc451c16, 0xac75, 0x11d1, { 0xb4,0xb8,0x00,0xc0,0x4f,0xb6,0x6e,0xa0 }}
+
+#if defined(__GNUC__)
+#define GENERIC_CHAIN_FINALPOLICY_FUNCTION (const WCHAR []) \
+ {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0}
+#define GENERIC_CHAIN_CERTTRUST_FUNCTION (const WCHAR []) \
+ {'G','e','n','e','r','i','c','C','h','a','i','n','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
+#elif defined(_MSC_VER)
+#define GENERIC_CHAIN_FINALPOLICY_FUNCTION L"GenericChainFinalProv"
+#define GENERIC_CHAIN_CERTTRUST_FUNCTION L"GenericChainCertificateTrust"
+#else
+static const WCHAR GENERIC_CHAIN_FINALPOLICY_FUNCTION[] =
+ {'G','e','n','e','r','i','c','C','h','a','i','n','F','i','n','a','l','P','r','o','v', 0};
+static const WCHAR GENERIC_CHAIN_CERTTRUST_FUNCTION[] =
+ {'G','e','n','e','r','i','c','C','h','a','i','n','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
+#endif
+
+typedef struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO
+{
+ union {
+ DWORD cbStruct;
+ DWORD cbSize;
+ } DUMMYUNIONNAME;
+ PCCERT_CHAIN_CONTEXT pChainContext;
+ DWORD dwSignerType;
+ PCMSG_SIGNER_INFO pMsgSignerInfo;
+ DWORD dwError;
+ DWORD cCounterSigner;
+ struct _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO *rgpCounterSigner;
+} WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO, *PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;
+
+typedef HRESULT (WINAPI *PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK)(
+ PCRYPT_PROVIDER_DATA pProvData, DWORD dwStepError, DWORD dwRegPolicySettings,
+ DWORD cSigner, PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO rgpSigner,
+ void *pvPolicyArg);
+
+typedef struct _WTD_GENERIC_CHAIN_POLICY_CREATE_INFO
+{
+ union {
+ DWORD cbStruct;
+ DWORD cbSize;
+ } DUMMYUNIONNAME;
+ HCERTCHAINENGINE hChainEngine;
+ PCERT_CHAIN_PARA pChainPara;
+ DWORD dwFlags;
+ void *pvReserved;
+} WTD_GENERIC_CHAIN_POLICY_CREATE_INFO, *PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO;
+
+typedef struct _WTD_GENERIC_CHAIN_POLICY_DATA
+{
+ union {
+ DWORD cbStruct;
+ DWORD cbSize;
+ } DUMMYUNIONNAME;
+ PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pSignerChainInfo;
+ PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO pCounterSignerChainInfo;
+ PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK pfnPolicyCallback;
+ void *pvPolicyArg;
+} WTD_GENERIC_CHAIN_POLICY_DATA, *PWTD_GENERIC_CHAIN_POLICY_DATA;
+
+#if defined(__GNUC__)
+#define SP_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \
+ {'W','I','N','T','R','U','S','T','.','D','L','L' ,0}
+#elif defined(_MSC_VER)
+#define SP_POLICY_PROVIDER_DLL_NAME L"WINTRUST.DLL"
+#else
+static const WCHAR SP_POLICY_PROVIDER_DLL_NAME[] =
+ {'W','I','N','T','R','U','S','T','.','D','L','L', 0};
+#endif
+
+#define WINTRUST_ACTION_GENERIC_VERIFY_V2 \
+ { 0xaac56b, 0xcd44, 0x11d0, { 0x8c,0xc2,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define SP_INIT_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0}
+#define SP_OBJTRUST_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0}
+#define SP_SIGTRUST_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0}
+#define SP_CHKCERT_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0}
+#define SP_FINALPOLICY_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0}
+#define SP_CLEANUPPOLICY_FUNCTION (const WCHAR []) \
+ {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0}
+#elif defined(_MSC_VER)
+#define SP_INIT_FUNCTION L"SoftpubInitialize"
+#define SP_OBJTRUST_FUNCTION L"SoftpubLoadMessage"
+#define SP_SIGTRUST_FUNCTION L"SoftpubLoadSignature"
+#define SP_CHKCERT_FUNCTION L"SoftpubCheckCert"
+#define SP_FINALPOLICY_FUNCTION L"SoftpubAuthenticode"
+#define SP_CLEANUPPOLICY_FUNCTION L"SoftpubCleanup"
+#else
+static const WCHAR SP_INIT_FUNCTION[] =
+ {'S','o','f','t','p','u','b','I','n','i','t','i','a','l','i','z','e', 0};
+static const WCHAR SP_OBJTRUST_FUNCTION[] =
+ {'S','o','f','t','p','u','b','L','o','a','d','M','e','s','s','a','g','e', 0};
+static const WCHAR SP_SIGTRUST_FUNCTION[] =
+ {'S','o','f','t','p','u','b','L','o','a','d','S','i','g','n','a','t','u','r','e', 0};
+static const WCHAR SP_CHKCERT_FUNCTION[] =
+ {'S','o','f','t','p','u','b','C','h','e','c','k','C','e','r','t', 0};
+static const WCHAR SP_FINALPOLICY_FUNCTION[] =
+ {'S','o','f','t','p','u','b','A','u','t','h','e','n','t','i','c','o','d','e', 0};
+static const WCHAR SP_CLEANUPPOLICY_FUNCTION[] =
+ {'S','o','f','t','p','u','b','C','l','e','a','n','u','p', 0};
+#endif
+
+#define WINTRUST_ACTION_TRUSTPROVIDER_TEST \
+ { 0x573e31f8, 0xddba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define SP_TESTDUMPPOLICY_FUNCTION_TEST (const WCHAR []) \
+ {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0}
+#elif defined(_MSC_VER)
+#define SP_TESTDUMPPOLICY_FUNCTION_TEST L"SoftpubDumpStructure"
+#else
+static const WCHAR SP_TESTDUMPPOLICY_FUNCTION_TEST[] =
+ {'S','o','f','t','p','u','b','D','u','m','p','S','t','r','u','c','t','u','r','e', 0};
+#endif
+
+#define HTTPSPROV_ACTION \
+ { 0x573e31f8, 0xaaba, 0x11d0, { 0x8c,0xcb,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define HTTPS_CERTTRUST_FUNCTION (const WCHAR []) \
+ {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
+#define HTTPS_FINALPOLICY_FUNCTION (const WCHAR []) \
+ {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0}
+#elif defined(_MSC_VER)
+#define HTTPS_FINALPOLICY_FUNCTION L"HTTPSFinalProv"
+#define HTTPS_CERTTRUST_FUNCTION L"HTTPSCertificateTrust"
+#else
+static const WCHAR HTTPS_CERTTRUST_FUNCTION[] =
+ {'H','T','T','P','S','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
+static const WCHAR HTTPS_FINALPOLICY_FUNCTION[] =
+ {'H','T','T','P','S','F','i','n','a','l','P','r','o','v', 0};
+#endif
+
+#define OFFICESIGN_ACTION_VERIFY \
+ { 0x5555c2cd, 0x17fb, 0x11d1, { 0x85,0xc4,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define OFFICE_POLICY_PROVIDER_DLL_NAME (const WCHAR []) \
+ {'W','I','N','T','R','U','S','T','.','D','L','L' ,0}
+#define OFFICE_INITPROV_FUNCTION (const WCHAR []) \
+ {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}
+#define OFFICE_CLEANUPPOLICY_FUNCTION (const WCHAR []) \
+ {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}
+#elif defined(_MSC_VER)
+#define OFFICE_POLICY_PROVIDER_DLL_NAME SP_POLICY_PROVIDER_DLL_NAME
+#define OFFICE_INITPROV_FUNCTION L"OfficeInitializePolicy"
+#define OFFICE_CLEANUPPOLICY_FUNCTION L"OfficeCleanupPolicy"
+#else
+static const WCHAR OFFICE_POLICY_PROVIDER_DLL_NAME[] =
+ {'W','I','N','T','R','U','S','T','.','D','L','L', 0};
+static const WCHAR OFFICE_INITPROV_FUNCTION[] =
+ {'O','f','f','i','c','e','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0};
+static const WCHAR OFFICE_CLEANUPPOLICY_FUNCTION[] =
+ {'O','f','f','i','c','e','C','l','e','a','n','u','p','P','o','l','i','c','y', 0};
+#endif
+
+#define DRIVER_ACTION_VERIFY \
+ { 0xf750e6c3, 0x38ee, 0x11d1, { 0x85,0xe5,0x00,0xc0,0x4f,0xc2,0x95,0xee }}
+
+#if defined(__GNUC__)
+#define DRIVER_INITPROV_FUNCTION (const WCHAR []) \
+ {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0}
+#define DRIVER_FINALPOLPROV_FUNCTION (const WCHAR []) \
+ {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0}
+#define DRIVER_CLEANUPPOLICY_FUNCTION (const WCHAR []) \
+ {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0}
+#elif defined(_MSC_VER)
+#define DRIVER_INITPROV_FUNCTION L"DriverInitializePolicy"
+#define DRIVER_FINALPOLPROV_FUNCTION L"DriverFinalPolicy"
+#define DRIVER_CLEANUPPOLICY_FUNCTION L"DriverCleanupPolicy"
+#else
+static const WCHAR DRIVER_INITPROV_FUNCTION[] =
+ {'D','r','i','v','e','r','I','n','i','t','i','a','l','i','z','e','P','o','l','i','c','y', 0};
+static const WCHAR DRIVER_FINALPOLPROV_FUNCTION[] =
+ {'D','r','i','v','e','r','F','i','n','a','l','P','o','l','i','c','y', 0};
+static const WCHAR DRIVER_CLEANUPPOLICY_FUNCTION[] =
+ {'D','r','i','v','e','r','C','l','e','a','n','u','p','P','o','l','i','c','y', 0};
+#endif
+
+typedef struct DRIVER_VER_MAJORMINOR_
+{
+ DWORD dwMajor;
+ DWORD dwMinor;
+} DRIVER_VER_MAJORMINOR;
+
+typedef struct DRIVER_VER_INFO_
+{
+ DWORD cbStruct;
+ ULONG_PTR dwReserved1;
+ ULONG_PTR dwReserved2;
+ DWORD dwPlatform;
+ DWORD dwVersion;
+ WCHAR wszVersion[MAX_PATH];
+ WCHAR wszSignedBy[MAX_PATH];
+ PCCERT_CONTEXT pcSignerCertContext;
+ DRIVER_VER_MAJORMINOR sOSVersionLow;
+ DRIVER_VER_MAJORMINOR sOSVersionHigh;
+ DWORD dwBuildNumberLow;
+ DWORD dwBuildNumberHigh;
+} DRIVER_VER_INFO, *PDRIVER_VER_INFO;
+
+#endif /* __WINE_SOFTPUB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h
new file mode 100644
index 00000000..5e0b2c0d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sql.h
@@ -0,0 +1,755 @@
+/*
+ * ODBC definitions
+ *
+ * Copyright (C) 1999 Xiang Li
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SQL_H
+#define __SQL_H
+
+#ifndef ODBCVER
+#define ODBCVER 0x0351
+#endif
+
+#include <sqltypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SQL_NULL_DATA (-1)
+#define SQL_DATA_AT_EXEC (-2)
+#define SQL_SUCCESS 0
+#define SQL_SUCCESS_WITH_INFO 1
+#if (ODBCVER >= 0x0300)
+#define SQL_NO_DATA 100
+#endif
+#define SQL_ERROR (-1)
+#define SQL_INVALID_HANDLE (-2)
+#define SQL_STILL_EXECUTING 2
+#define SQL_NEED_DATA 99
+#define SQL_SUCCEEDED(rc) (((rc)&(~1))==0)
+
+#define SQL_NTS (-3)
+#define SQL_NTSL (__MSABI_LONG(-3))
+
+#define SQL_MAX_MESSAGE_LENGTH 512
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DATE_LEN 10
+#define SQL_TIME_LEN 8
+#define SQL_TIMESTAMP_LEN 19
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_HANDLE_ENV 1
+#define SQL_HANDLE_DBC 2
+#define SQL_HANDLE_STMT 3
+#define SQL_HANDLE_DESC 4
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_OUTPUT_NTS 10001
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_AUTO_IPD 10001
+#define SQL_ATTR_METADATA_ID 10014
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_APP_ROW_DESC 10010
+#define SQL_ATTR_APP_PARAM_DESC 10011
+#define SQL_ATTR_IMP_ROW_DESC 10012
+#define SQL_ATTR_IMP_PARAM_DESC 10013
+#define SQL_ATTR_CURSOR_SCROLLABLE (-1)
+#define SQL_ATTR_CURSOR_SENSITIVITY (-2)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NONSCROLLABLE 0
+#define SQL_SCROLLABLE 1
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_COUNT 1001
+#define SQL_DESC_TYPE 1002
+#define SQL_DESC_LENGTH 1003
+#define SQL_DESC_OCTET_LENGTH_PTR 1004
+#define SQL_DESC_PRECISION 1005
+#define SQL_DESC_SCALE 1006
+#define SQL_DESC_DATETIME_INTERVAL_CODE 1007
+#define SQL_DESC_NULLABLE 1008
+#define SQL_DESC_INDICATOR_PTR 1009
+#define SQL_DESC_DATA_PTR 1010
+#define SQL_DESC_NAME 1011
+#define SQL_DESC_UNNAMED 1012
+#define SQL_DESC_OCTET_LENGTH 1013
+#define SQL_DESC_ALLOC_TYPE 1099
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DIAG_RETURNCODE 1
+#define SQL_DIAG_NUMBER 2
+#define SQL_DIAG_ROW_COUNT 3
+#define SQL_DIAG_SQLSTATE 4
+#define SQL_DIAG_NATIVE 5
+#define SQL_DIAG_MESSAGE_TEXT 6
+#define SQL_DIAG_DYNAMIC_FUNCTION 7
+#define SQL_DIAG_CLASS_ORIGIN 8
+#define SQL_DIAG_SUBCLASS_ORIGIN 9
+#define SQL_DIAG_CONNECTION_NAME 10
+#define SQL_DIAG_SERVER_NAME 11
+#define SQL_DIAG_DYNAMIC_FUNCTION_CODE 12
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DIAG_ALTER_DOMAIN 3
+#define SQL_DIAG_ALTER_TABLE 4
+#define SQL_DIAG_CALL 7
+#define SQL_DIAG_CREATE_ASSERTION 6
+#define SQL_DIAG_CREATE_CHARACTER_SET 8
+#define SQL_DIAG_CREATE_COLLATION 10
+#define SQL_DIAG_CREATE_DOMAIN 23
+#define SQL_DIAG_CREATE_INDEX (-1)
+#define SQL_DIAG_CREATE_SCHEMA 64
+#define SQL_DIAG_CREATE_TABLE 77
+#define SQL_DIAG_CREATE_TRANSLATION 79
+#define SQL_DIAG_CREATE_VIEW 84
+#define SQL_DIAG_DELETE_WHERE 19
+#define SQL_DIAG_DROP_ASSERTION 24
+#define SQL_DIAG_DROP_CHARACTER_SET 25
+#define SQL_DIAG_DROP_COLLATION 26
+#define SQL_DIAG_DROP_DOMAIN 27
+#define SQL_DIAG_DROP_INDEX (-2)
+#define SQL_DIAG_DROP_SCHEMA 31
+#define SQL_DIAG_DROP_TABLE 32
+#define SQL_DIAG_DROP_TRANSLATION 33
+#define SQL_DIAG_DROP_VIEW 36
+#define SQL_DIAG_DYNAMIC_DELETE_CURSOR 38
+#define SQL_DIAG_DYNAMIC_UPDATE_CURSOR 81
+#define SQL_DIAG_GRANT 48
+#define SQL_DIAG_INSERT 50
+#define SQL_DIAG_REVOKE 59
+#define SQL_DIAG_SELECT_CURSOR 85
+#define SQL_DIAG_UNKNOWN_STATEMENT 0
+#define SQL_DIAG_UPDATE_WHERE 82
+#endif
+
+#define SQL_UNKNOWN_TYPE 0
+#define SQL_CHAR 1
+#define SQL_NUMERIC 2
+#define SQL_DECIMAL 3
+#define SQL_INTEGER 4
+#define SQL_SMALLINT 5
+#define SQL_FLOAT 6
+#define SQL_REAL 7
+#define SQL_DOUBLE 8
+#if (ODBCVER >= 0x0300)
+#define SQL_DATETIME 9
+#endif
+#define SQL_VARCHAR 12
+
+#if (ODBCVER >= 0x0300)
+#define SQL_TYPE_DATE 91
+#define SQL_TYPE_TIME 92
+#define SQL_TYPE_TIMESTAMP 93
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_UNSPECIFIED 0
+#define SQL_INSENSITIVE 1
+#define SQL_SENSITIVE 2
+#endif
+
+#define SQL_ALL_TYPES 0
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DEFAULT 99
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ARD_TYPE (-99)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CODE_DATE 1
+#define SQL_CODE_TIME 2
+#define SQL_CODE_TIMESTAMP 3
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_FALSE 0
+#define SQL_TRUE 1
+#endif
+
+#define SQL_NO_NULLS 0
+#define SQL_NULLABLE 1
+
+#define SQL_NULLABLE_UNKNOWN 2
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PRED_NONE 0
+#define SQL_PRED_CHAR 1
+#define SQL_PRED_BASIC 2
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NAMED 0
+#define SQL_UNNAMED 1
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_ALLOC_AUTO 1
+#define SQL_DESC_ALLOC_USER 2
+#endif
+
+#define SQL_CLOSE 0
+#define SQL_DROP 1
+#define SQL_UNBIND 2
+#define SQL_RESET_PARAMS 3
+#define SQL_FETCH_NEXT 1
+#define SQL_FETCH_FIRST 2
+#define SQL_FETCH_LAST 3
+#define SQL_FETCH_PRIOR 4
+#define SQL_FETCH_ABSOLUTE 5
+#define SQL_FETCH_RELATIVE 6
+
+#define SQL_COMMIT 0
+#define SQL_ROLLBACK 1
+
+#define SQL_NULL_HENV 0
+#define SQL_NULL_HDBC 0
+#define SQL_NULL_HSTMT 0
+#if (ODBCVER >= 0x0300)
+#define SQL_NULL_HDESC 0
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NULL_HANDLE __MSABI_LONG(0)
+#endif
+
+#define SQL_SCOPE_CURROW 0
+#define SQL_SCOPE_TRANSACTION 1
+#define SQL_SCOPE_SESSION 2
+
+#define SQL_PC_UNKNOWN 0
+#if (ODBCVER >= 0x0300)
+#define SQL_PC_NON_PSEUDO 1
+#endif
+#define SQL_PC_PSEUDO 2
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ROW_IDENTIFIER 1
+#endif
+
+#define SQL_INDEX_UNIQUE 0
+#define SQL_INDEX_ALL 1
+
+#define SQL_INDEX_CLUSTERED 1
+#define SQL_INDEX_HASHED 2
+#define SQL_INDEX_OTHER 3
+
+#define SQL_API_SQLALLOCCONNECT 1
+#define SQL_API_SQLALLOCENV 2
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLALLOCHANDLE 1001
+#endif
+#define SQL_API_SQLALLOCSTMT 3
+#define SQL_API_SQLBINDCOL 4
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLBINDPARAM 1002
+#endif
+#define SQL_API_SQLCANCEL 5
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLCLOSECURSOR 1003
+#define SQL_API_SQLCOLATTRIBUTE 6
+#endif
+#define SQL_API_SQLCOLUMNS 40
+#define SQL_API_SQLCONNECT 7
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLCOPYDESC 1004
+#endif
+#define SQL_API_SQLDATASOURCES 57
+#define SQL_API_SQLDESCRIBECOL 8
+#define SQL_API_SQLDISCONNECT 9
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLENDTRAN 1005
+#endif
+#define SQL_API_SQLERROR 10
+#define SQL_API_SQLEXECDIRECT 11
+#define SQL_API_SQLEXECUTE 12
+#define SQL_API_SQLFETCH 13
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLFETCHSCROLL 1021
+#endif
+#define SQL_API_SQLFREECONNECT 14
+#define SQL_API_SQLFREEENV 15
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLFREEHANDLE 1006
+#endif
+#define SQL_API_SQLFREESTMT 16
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLGETCONNECTATTR 1007
+#endif
+#define SQL_API_SQLGETCONNECTOPTION 42
+#define SQL_API_SQLGETCURSORNAME 17
+#define SQL_API_SQLGETDATA 43
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLGETDESCFIELD 1008
+#define SQL_API_SQLGETDESCREC 1009
+#define SQL_API_SQLGETDIAGFIELD 1010
+#define SQL_API_SQLGETDIAGREC 1011
+#define SQL_API_SQLGETENVATTR 1012
+#endif
+#define SQL_API_SQLGETFUNCTIONS 44
+#define SQL_API_SQLGETINFO 45
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLGETSTMTATTR 1014
+#endif
+#define SQL_API_SQLGETSTMTOPTION 46
+#define SQL_API_SQLGETTYPEINFO 47
+#define SQL_API_SQLNUMRESULTCOLS 18
+#define SQL_API_SQLPARAMDATA 48
+#define SQL_API_SQLPREPARE 19
+#define SQL_API_SQLPUTDATA 49
+#define SQL_API_SQLROWCOUNT 20
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLSETCONNECTATTR 1016
+#endif
+#define SQL_API_SQLSETCONNECTOPTION 50
+#define SQL_API_SQLSETCURSORNAME 21
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLSETDESCFIELD 1017
+#define SQL_API_SQLSETDESCREC 1018
+#define SQL_API_SQLSETENVATTR 1019
+#endif
+#define SQL_API_SQLSETPARAM 22
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLSETSTMTATTR 1020
+#endif
+#define SQL_API_SQLSETSTMTOPTION 51
+#define SQL_API_SQLSPECIALCOLUMNS 52
+#define SQL_API_SQLSTATISTICS 53
+#define SQL_API_SQLTABLES 54
+#define SQL_API_SQLTRANSACT 23
+
+#if (ODBCVER >= 0x0300)
+#define SQL_MAX_DRIVER_CONNECTIONS 0
+#define SQL_MAXIMUM_DRIVER_CONNECTIONS SQL_MAX_DRIVER_CONNECTIONS
+#define SQL_MAX_CONCURRENT_ACTIVITIES 1
+#define SQL_MAXIMUM_CONCURRENT_ACTIVITIES SQL_MAX_CONCURRENT_ACTIVITIES
+#endif
+#define SQL_DATA_SOURCE_NAME 2
+#define SQL_FETCH_DIRECTION 8
+#define SQL_SERVER_NAME 13
+#define SQL_SEARCH_PATTERN_ESCAPE 14
+#define SQL_DBMS_NAME 17
+#define SQL_DBMS_VER 18
+#define SQL_ACCESSIBLE_TABLES 19
+#define SQL_ACCESSIBLE_PROCEDURES 20
+#define SQL_CURSOR_COMMIT_BEHAVIOR 23
+#define SQL_DATA_SOURCE_READ_ONLY 25
+#define SQL_DEFAULT_TXN_ISOLATION 26
+#define SQL_IDENTIFIER_CASE 28
+#define SQL_IDENTIFIER_QUOTE_CHAR 29
+#define SQL_MAX_COLUMN_NAME_LEN 30
+#define SQL_MAXIMUM_COLUMN_NAME_LENGTH SQL_MAX_COLUMN_NAME_LEN
+#define SQL_MAX_CURSOR_NAME_LEN 31
+#define SQL_MAXIMUM_CURSOR_NAME_LENGTH SQL_MAX_CURSOR_NAME_LEN
+#define SQL_MAX_SCHEMA_NAME_LEN 32
+#define SQL_MAXIMUM_SCHEMA_NAME_LENGTH SQL_MAX_SCHEMA_NAME_LEN
+#define SQL_MAX_CATALOG_NAME_LEN 34
+#define SQL_MAXIMUM_CATALOG_NAME_LENGTH SQL_MAX_CATALOG_NAME_LEN
+#define SQL_MAX_TABLE_NAME_LEN 35
+#define SQL_SCROLL_CONCURRENCY 43
+#define SQL_TXN_CAPABLE 46
+#define SQL_TRANSACTION_CAPABLE SQL_TXN_CAPABLE
+#define SQL_USER_NAME 47
+#define SQL_TXN_ISOLATION_OPTION 72
+#define SQL_TRANSACTION_ISOLATION_OPTION SQL_TXN_ISOLATION_OPTION
+#define SQL_INTEGRITY 73
+#define SQL_GETDATA_EXTENSIONS 81
+#define SQL_NULL_COLLATION 85
+#define SQL_ALTER_TABLE 86
+#define SQL_ORDER_BY_COLUMNS_IN_SELECT 90
+#define SQL_SPECIAL_CHARACTERS 94
+#define SQL_MAX_COLUMNS_IN_GROUP_BY 97
+#define SQL_MAXIMUM_COLUMNS_IN_GROUP_BY SQL_MAX_COLUMNS_IN_GROUP_BY
+#define SQL_MAX_COLUMNS_IN_INDEX 98
+#define SQL_MAXIMUM_COLUMNS_IN_INDEX SQL_MAX_COLUMNS_IN_INDEX
+#define SQL_MAX_COLUMNS_IN_ORDER_BY 99
+#define SQL_MAXIMUM_COLUMNS_IN_ORDER_BY SQL_MAX_COLUMNS_IN_ORDER_BY
+#define SQL_MAX_COLUMNS_IN_SELECT 100
+#define SQL_MAXIMUM_COLUMNS_IN_SELECT SQL_MAX_COLUMNS_IN_SELECT
+#define SQL_MAX_COLUMNS_IN_TABLE 101
+#define SQL_MAX_INDEX_SIZE 102
+#define SQL_MAXIMUM_INDEX_SIZE SQL_MAX_INDEX_SIZE
+#define SQL_MAX_ROW_SIZE 104
+#define SQL_MAXIMUM_ROW_SIZE SQL_MAX_ROW_SIZE
+#define SQL_MAX_STATEMENT_LEN 105
+#define SQL_MAXIMUM_STATEMENT_LENGTH SQL_MAX_STATEMENT_LEN
+#define SQL_MAX_TABLES_IN_SELECT 106
+#define SQL_MAXIMUM_TABLES_IN_SELECT SQL_MAX_TABLES_IN_SELECT
+#define SQL_MAX_USER_NAME_LEN 107
+#define SQL_MAXIMUM_USER_NAME_LENGTH SQL_MAX_USER_NAME_LEN
+#if (ODBCVER >= 0x0300)
+#define SQL_OJ_CAPABILITIES 115
+#define SQL_OUTER_JOIN_CAPABILITIES SQL_OJ_CAPABILITIES
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_XOPEN_CLI_YEAR 10000
+#define SQL_CURSOR_SENSITIVITY 10001
+#define SQL_DESCRIBE_PARAMETER 10002
+#define SQL_CATALOG_NAME 10003
+#define SQL_COLLATION_SEQ 10004
+#define SQL_MAX_IDENTIFIER_LEN 10005
+#define SQL_MAXIMUM_IDENTIFIER_LENGTH SQL_MAX_IDENTIFIER_LEN
+#endif
+
+#if (ODBCVER >= 0x0200)
+#define SQL_AT_ADD_COLUMN __MSABI_LONG(0x00000001)
+#define SQL_AT_DROP_COLUMN __MSABI_LONG(0x00000002)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AT_ADD_CONSTRAINT __MSABI_LONG(0x00000008)
+
+#endif /* ODBCVER >= 0x0300 */
+
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AM_NONE 0
+#define SQL_AM_CONNECTION 1
+#define SQL_AM_STATEMENT 2
+#endif
+
+#define SQL_CB_DELETE 0
+#define SQL_CB_CLOSE 1
+#define SQL_CB_PRESERVE 2
+
+#define SQL_FD_FETCH_NEXT __MSABI_LONG(0x00000001)
+#define SQL_FD_FETCH_FIRST __MSABI_LONG(0x00000002)
+#define SQL_FD_FETCH_LAST __MSABI_LONG(0x00000004)
+#define SQL_FD_FETCH_PRIOR __MSABI_LONG(0x00000008)
+#define SQL_FD_FETCH_ABSOLUTE __MSABI_LONG(0x00000010)
+#define SQL_FD_FETCH_RELATIVE __MSABI_LONG(0x00000020)
+
+#define SQL_GD_ANY_COLUMN __MSABI_LONG(0x00000001)
+#define SQL_GD_ANY_ORDER __MSABI_LONG(0x00000002)
+
+#define SQL_IC_UPPER 1
+#define SQL_IC_LOWER 2
+#define SQL_IC_SENSITIVE 3
+#define SQL_IC_MIXED 4
+
+#if (ODBCVER >= 0x0201)
+#define SQL_OJ_LEFT __MSABI_LONG(0x00000001)
+#define SQL_OJ_RIGHT __MSABI_LONG(0x00000002)
+#define SQL_OJ_FULL __MSABI_LONG(0x00000004)
+#define SQL_OJ_NESTED __MSABI_LONG(0x00000008)
+#define SQL_OJ_NOT_ORDERED __MSABI_LONG(0x00000010)
+#define SQL_OJ_INNER __MSABI_LONG(0x00000020)
+#define SQL_OJ_ALL_COMPARISON_OPS __MSABI_LONG(0x00000040)
+#endif
+
+#define SQL_SCCO_READ_ONLY __MSABI_LONG(0x00000001)
+#define SQL_SCCO_LOCK __MSABI_LONG(0x00000002)
+#define SQL_SCCO_OPT_ROWVER __MSABI_LONG(0x00000004)
+#define SQL_SCCO_OPT_VALUES __MSABI_LONG(0x00000008)
+
+#define SQL_TC_NONE 0
+#define SQL_TC_DML 1
+#define SQL_TC_ALL 2
+#define SQL_TC_DDL_COMMIT 3
+#define SQL_TC_DDL_IGNORE 4
+
+#define SQL_TXN_READ_UNCOMMITTED __MSABI_LONG(0x00000001)
+#define SQL_TRANSACTION_READ_UNCOMMITTED SQL_TXN_READ_UNCOMMITTED
+#define SQL_TXN_READ_COMMITTED __MSABI_LONG(0x00000002)
+#define SQL_TRANSACTION_READ_COMMITTED SQL_TXN_READ_COMMITTED
+#define SQL_TXN_REPEATABLE_READ __MSABI_LONG(0x00000004)
+#define SQL_TRANSACTION_REPEATABLE_READ SQL_TXN_REPEATABLE_READ
+#define SQL_TXN_SERIALIZABLE __MSABI_LONG(0x00000008)
+#define SQL_TRANSACTION_SERIALIZABLE SQL_TXN_SERIALIZABLE
+
+#define SQL_NC_HIGH 0
+#define SQL_NC_LOW 1
+
+SQLRETURN WINAPI SQLAllocConnect(SQLHENV EnvironmentHandle,
+ SQLHDBC *ConnectionHandle);
+
+SQLRETURN WINAPI SQLAllocEnv(SQLHENV *EnvironmentHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLAllocHandle(SQLSMALLINT HandleType,
+ SQLHANDLE InputHandle, SQLHANDLE *OutputHandle);
+#endif
+
+SQLRETURN WINAPI SQLAllocStmt(SQLHDBC ConnectionHandle,
+ SQLHSTMT *StatementHandle);
+
+SQLRETURN WINAPI SQLBindCol(SQLHSTMT StatementHandle,
+ SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
+ SQLPOINTER TargetValue, SQLINTEGER BufferLength,
+ SQLINTEGER *StrLen_or_Ind);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLBindParam(SQLHSTMT StatementHandle,
+ SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
+ SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
+ SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
+ SQLINTEGER *StrLen_or_Ind);
+#endif
+
+SQLRETURN WINAPI SQLCancel(SQLHSTMT StatementHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLCloseCursor(SQLHSTMT StatementHandle);
+
+SQLRETURN WINAPI SQLColAttribute (SQLHSTMT StatementHandle,
+ SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier,
+ SQLPOINTER CharacterAttribute, SQLSMALLINT BufferLength,
+ SQLSMALLINT *StringLength, SQLPOINTER NumericAttribute);
+#endif
+
+
+SQLRETURN WINAPI SQLColumns(SQLHSTMT StatementHandle,
+ SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
+ SQLCHAR *TableName, SQLSMALLINT NameLength3,
+ SQLCHAR *ColumnName, SQLSMALLINT NameLength4);
+
+
+SQLRETURN WINAPI SQLConnect(SQLHDBC ConnectionHandle,
+ SQLCHAR *ServerName, SQLSMALLINT NameLength1,
+ SQLCHAR *UserName, SQLSMALLINT NameLength2,
+ SQLCHAR *Authentication, SQLSMALLINT NameLength3);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLCopyDesc(SQLHDESC SourceDescHandle,
+ SQLHDESC TargetDescHandle);
+#endif
+
+SQLRETURN WINAPI SQLDataSources(SQLHENV EnvironmentHandle,
+ SQLUSMALLINT Direction, SQLCHAR *ServerName,
+ SQLSMALLINT BufferLength1, SQLSMALLINT *NameLength1,
+ SQLCHAR *Description, SQLSMALLINT BufferLength2,
+ SQLSMALLINT *NameLength2);
+
+SQLRETURN WINAPI SQLDescribeCol(SQLHSTMT StatementHandle,
+ SQLUSMALLINT ColumnNumber, SQLCHAR *ColumnName,
+ SQLSMALLINT BufferLength, SQLSMALLINT *NameLength,
+ SQLSMALLINT *DataType, SQLUINTEGER *ColumnSize,
+ SQLSMALLINT *DecimalDigits, SQLSMALLINT *Nullable);
+
+SQLRETURN WINAPI SQLDisconnect(SQLHDBC ConnectionHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle,
+ SQLSMALLINT CompletionType);
+#endif
+
+SQLRETURN WINAPI SQLError(SQLHENV EnvironmentHandle,
+ SQLHDBC ConnectionHandle, SQLHSTMT StatementHandle,
+ SQLCHAR *Sqlstate, SQLINTEGER *NativeError,
+ SQLCHAR *MessageText, SQLSMALLINT BufferLength,
+ SQLSMALLINT *TextLength);
+
+SQLRETURN WINAPI SQLExecDirect(SQLHSTMT StatementHandle,
+ SQLCHAR *StatementText, SQLINTEGER TextLength);
+
+SQLRETURN WINAPI SQLExecute(SQLHSTMT StatementHandle);
+
+SQLRETURN WINAPI SQLFetch(SQLHSTMT StatementHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLFetchScroll(SQLHSTMT StatementHandle,
+ SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset);
+#endif
+
+SQLRETURN WINAPI SQLFreeConnect(SQLHDBC ConnectionHandle);
+
+SQLRETURN WINAPI SQLFreeEnv(SQLHENV EnvironmentHandle);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle);
+#endif
+
+SQLRETURN WINAPI SQLFreeStmt(SQLHSTMT StatementHandle,
+ SQLUSMALLINT Option);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLGetConnectAttr(SQLHDBC ConnectionHandle,
+ SQLINTEGER Attribute, SQLPOINTER Value,
+ SQLINTEGER BufferLength, SQLINTEGER *StringLength);
+#endif
+
+SQLRETURN WINAPI SQLGetConnectOption(SQLHDBC ConnectionHandle,
+ SQLUSMALLINT Option, SQLPOINTER Value);
+
+SQLRETURN WINAPI SQLGetCursorName(SQLHSTMT StatementHandle,
+ SQLCHAR *CursorName, SQLSMALLINT BufferLength,
+ SQLSMALLINT *NameLength);
+
+SQLRETURN WINAPI SQLGetData(SQLHSTMT StatementHandle,
+ SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
+ SQLPOINTER TargetValue, SQLINTEGER BufferLength,
+ SQLINTEGER *StrLen_or_Ind);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLGetDescField(SQLHDESC DescriptorHandle,
+ SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
+ SQLPOINTER Value, SQLINTEGER BufferLength,
+ SQLINTEGER *StringLength);
+
+SQLRETURN WINAPI SQLGetDescRec(SQLHDESC DescriptorHandle,
+ SQLSMALLINT RecNumber, SQLCHAR *Name,
+ SQLSMALLINT BufferLength, SQLSMALLINT *StringLength,
+ SQLSMALLINT *Type, SQLSMALLINT *SubType,
+ SQLINTEGER *Length, SQLSMALLINT *Precision,
+ SQLSMALLINT *Scale, SQLSMALLINT *Nullable);
+
+SQLRETURN WINAPI SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle,
+ SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier,
+ SQLPOINTER DiagInfo, SQLSMALLINT BufferLength,
+ SQLSMALLINT *StringLength);
+
+SQLRETURN WINAPI SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle,
+ SQLSMALLINT RecNumber, SQLCHAR *Sqlstate,
+ SQLINTEGER *NativeError, SQLCHAR *MessageText,
+ SQLSMALLINT BufferLength, SQLSMALLINT *TextLength);
+
+SQLRETURN WINAPI SQLGetEnvAttr(SQLHENV EnvironmentHandle,
+ SQLINTEGER Attribute, SQLPOINTER Value,
+ SQLINTEGER BufferLength, SQLINTEGER *StringLength);
+#endif
+
+SQLRETURN WINAPI SQLGetFunctions(SQLHDBC ConnectionHandle,
+ SQLUSMALLINT FunctionId, SQLUSMALLINT *Supported);
+
+SQLRETURN WINAPI SQLGetInfo(SQLHDBC ConnectionHandle,
+ SQLUSMALLINT InfoType, SQLPOINTER InfoValue,
+ SQLSMALLINT BufferLength, SQLSMALLINT *StringLength);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLGetStmtAttr(SQLHSTMT StatementHandle,
+ SQLINTEGER Attribute, SQLPOINTER Value,
+ SQLINTEGER BufferLength, SQLINTEGER *StringLength);
+#endif
+
+SQLRETURN WINAPI SQLGetStmtOption(SQLHSTMT StatementHandle,
+ SQLUSMALLINT Option, SQLPOINTER Value);
+
+SQLRETURN WINAPI SQLGetTypeInfo(SQLHSTMT StatementHandle,
+ SQLSMALLINT DataType);
+
+SQLRETURN WINAPI SQLNumResultCols(SQLHSTMT StatementHandle,
+ SQLSMALLINT *ColumnCount);
+
+SQLRETURN WINAPI SQLParamData(SQLHSTMT StatementHandle,
+ SQLPOINTER *Value);
+
+SQLRETURN WINAPI SQLPrepare(SQLHSTMT StatementHandle,
+ SQLCHAR *StatementText, SQLINTEGER TextLength);
+
+SQLRETURN WINAPI SQLPutData(SQLHSTMT StatementHandle,
+ SQLPOINTER Data, SQLINTEGER StrLen_or_Ind);
+
+SQLRETURN WINAPI SQLRowCount(SQLHSTMT StatementHandle,
+ SQLINTEGER *RowCount);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLSetConnectAttr(SQLHDBC ConnectionHandle,
+ SQLINTEGER Attribute, SQLPOINTER Value,
+ SQLINTEGER StringLength);
+#endif
+
+SQLRETURN WINAPI SQLSetConnectOption(SQLHDBC ConnectionHandle,
+ SQLUSMALLINT Option, SQLUINTEGER Value);
+
+SQLRETURN WINAPI SQLSetCursorName(SQLHSTMT StatementHandle,
+ SQLCHAR *CursorName, SQLSMALLINT NameLength);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLSetDescField(SQLHDESC DescriptorHandle,
+ SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier,
+ SQLPOINTER Value, SQLINTEGER BufferLength);
+
+SQLRETURN WINAPI SQLSetDescRec(SQLHDESC DescriptorHandle,
+ SQLSMALLINT RecNumber, SQLSMALLINT Type,
+ SQLSMALLINT SubType, SQLINTEGER Length,
+ SQLSMALLINT Precision, SQLSMALLINT Scale,
+ SQLPOINTER Data, SQLINTEGER *StringLength,
+ SQLINTEGER *Indicator);
+
+SQLRETURN WINAPI SQLSetEnvAttr(SQLHENV EnvironmentHandle,
+ SQLINTEGER Attribute, SQLPOINTER Value,
+ SQLINTEGER StringLength);
+#endif
+
+SQLRETURN WINAPI SQLSetParam(SQLHSTMT StatementHandle,
+ SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType,
+ SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision,
+ SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue,
+ SQLINTEGER *StrLen_or_Ind);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLSetStmtAttr(SQLHSTMT StatementHandle,
+ SQLINTEGER Attribute, SQLPOINTER Value,
+ SQLINTEGER StringLength);
+#endif
+
+SQLRETURN WINAPI SQLSetStmtOption(SQLHSTMT StatementHandle,
+ SQLUSMALLINT Option, SQLUINTEGER Value);
+
+SQLRETURN WINAPI SQLSpecialColumns(SQLHSTMT StatementHandle,
+ SQLUSMALLINT IdentifierType, SQLCHAR *CatalogName,
+ SQLSMALLINT NameLength1, SQLCHAR *SchemaName,
+ SQLSMALLINT NameLength2, SQLCHAR *TableName,
+ SQLSMALLINT NameLength3, SQLUSMALLINT Scope,
+ SQLUSMALLINT Nullable);
+
+SQLRETURN WINAPI SQLStatistics(SQLHSTMT StatementHandle,
+ SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
+ SQLCHAR *TableName, SQLSMALLINT NameLength3,
+ SQLUSMALLINT Unique, SQLUSMALLINT Reserved);
+
+SQLRETURN WINAPI SQLTables(SQLHSTMT StatementHandle,
+ SQLCHAR *CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR *SchemaName, SQLSMALLINT NameLength2,
+ SQLCHAR *TableName, SQLSMALLINT NameLength3,
+ SQLCHAR *TableType, SQLSMALLINT NameLength4);
+
+SQLRETURN WINAPI SQLTransact(SQLHENV EnvironmentHandle,
+ SQLHDBC ConnectionHandle, SQLUSMALLINT CompletionType);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h
new file mode 100644
index 00000000..f97050f3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqlext.h
@@ -0,0 +1,1682 @@
+/*
+ * MS SQL Extension definitions
+ *
+ * Copyright (C) 1999 Xiang Li
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SQLEXT_H
+#define __SQLEXT_H
+
+#include <sql.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SQL_SPEC_MAJOR 3
+#define SQL_SPEC_MINOR 51
+#define SQL_SPEC_STRING "03.51"
+
+#define SQL_SQLSTATE_SIZE 5
+#define SQL_MAX_DSN_LENGTH 32
+
+#define SQL_MAX_OPTION_STRING_LENGTH 256
+
+#if (ODBCVER < 0x0300)
+#define SQL_NO_DATA_FOUND 100
+#else
+#define SQL_NO_DATA_FOUND SQL_NO_DATA
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_HANDLE_SENV 5
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_ODBC_VERSION 200
+#define SQL_ATTR_CONNECTION_POOLING 201
+#define SQL_ATTR_CP_MATCH 202
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CP_OFF __MSABI_LONG(0U)
+#define SQL_CP_ONE_PER_DRIVER __MSABI_LONG(1U)
+#define SQL_CP_ONE_PER_HENV __MSABI_LONG(2U)
+#define SQL_CP_DEFAULT SQL_CP_OFF
+
+#define SQL_CP_STRICT_MATCH __MSABI_LONG(0U)
+#define SQL_CP_RELAXED_MATCH __MSABI_LONG(1U)
+#define SQL_CP_MATCH_DEFAULT SQL_CP_STRICT_MATCH
+
+#define SQL_OV_ODBC2 __MSABI_LONG(2U)
+#define SQL_OV_ODBC3 __MSABI_LONG(3U)
+#endif
+
+#define SQL_ACCESS_MODE 101
+#define SQL_AUTOCOMMIT 102
+#define SQL_LOGIN_TIMEOUT 103
+#define SQL_OPT_TRACE 104
+#define SQL_OPT_TRACEFILE 105
+#define SQL_TRANSLATE_DLL 106
+#define SQL_TRANSLATE_OPTION 107
+#define SQL_TXN_ISOLATION 108
+#define SQL_CURRENT_QUALIFIER 109
+#define SQL_ODBC_CURSORS 110
+#define SQL_QUIET_MODE 111
+#define SQL_PACKET_SIZE 112
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_ACCESS_MODE SQL_ACCESS_MODE
+#define SQL_ATTR_AUTOCOMMIT SQL_AUTOCOMMIT
+#define SQL_ATTR_CONNECTION_TIMEOUT 113
+#define SQL_ATTR_CURRENT_CATALOG SQL_CURRENT_QUALIFIER
+#define SQL_ATTR_DISCONNECT_BEHAVIOR 114
+#define SQL_ATTR_ENLIST_IN_DTC 1207
+#define SQL_ATTR_ENLIST_IN_XA 1208
+#define SQL_ATTR_LOGIN_TIMEOUT SQL_LOGIN_TIMEOUT
+#define SQL_ATTR_ODBC_CURSORS SQL_ODBC_CURSORS
+#define SQL_ATTR_PACKET_SIZE SQL_PACKET_SIZE
+#define SQL_ATTR_QUIET_MODE SQL_QUIET_MODE
+#define SQL_ATTR_TRACE SQL_OPT_TRACE
+#define SQL_ATTR_TRACEFILE SQL_OPT_TRACEFILE
+#define SQL_ATTR_TRANSLATE_LIB SQL_TRANSLATE_DLL
+#define SQL_ATTR_TRANSLATE_OPTION SQL_TRANSLATE_OPTION
+#define SQL_ATTR_TXN_ISOLATION SQL_TXN_ISOLATION
+#endif
+
+#define SQL_ATTR_CONNECTION_DEAD 1209
+
+#if (ODBCVER >= 0x0351)
+#define SQL_ATTR_ANSI_APP 115
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_CONNECT_OPT_DRVR_START 1000
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_CONN_OPT_MAX SQL_PACKET_SIZE
+#define SQL_CONN_OPT_MIN SQL_ACCESS_MODE
+#endif
+
+#define SQL_MODE_READ_WRITE __MSABI_LONG(0U)
+#define SQL_MODE_READ_ONLY __MSABI_LONG(1U)
+#define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE
+
+#define SQL_AUTOCOMMIT_OFF __MSABI_LONG(0U)
+#define SQL_AUTOCOMMIT_ON __MSABI_LONG(1U)
+#define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON
+
+#define SQL_LOGIN_TIMEOUT_DEFAULT __MSABI_LONG(15U)
+
+#define SQL_OPT_TRACE_OFF __MSABI_LONG(0U)
+#define SQL_OPT_TRACE_ON __MSABI_LONG(1U)
+#define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF
+#define SQL_OPT_TRACE_FILE_DEFAULT "\\SQL.LOG"
+
+#define SQL_CUR_USE_IF_NEEDED __MSABI_LONG(0U)
+#define SQL_CUR_USE_ODBC __MSABI_LONG(1U)
+#define SQL_CUR_USE_DRIVER __MSABI_LONG(2U)
+#define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DB_RETURN_TO_POOL __MSABI_LONG(0U)
+#define SQL_DB_DISCONNECT __MSABI_LONG(1U)
+#define SQL_DB_DEFAULT SQL_DB_RETURN_TO_POOL
+
+#define SQL_DTC_DONE __MSABI_LONG(0)
+#endif
+
+#define SQL_CD_TRUE __MSABI_LONG(1)
+#define SQL_CD_FALSE __MSABI_LONG(0)
+
+#if (ODBCVER >= 0x0351)
+#define SQL_AA_TRUE __MSABI_LONG(1)
+#define SQL_AA_FALSE __MSABI_LONG(0)
+#endif
+
+#define SQL_QUERY_TIMEOUT 0
+#define SQL_MAX_ROWS 1
+#define SQL_NOSCAN 2
+#define SQL_MAX_LENGTH 3
+#define SQL_ASYNC_ENABLE 4
+#define SQL_BIND_TYPE 5
+#define SQL_CURSOR_TYPE 6
+#define SQL_CONCURRENCY 7
+#define SQL_KEYSET_SIZE 8
+#define SQL_ROWSET_SIZE 9
+#define SQL_SIMULATE_CURSOR 10
+#define SQL_RETRIEVE_DATA 11
+#define SQL_USE_BOOKMARKS 12
+#define SQL_GET_BOOKMARK 13
+#define SQL_ROW_NUMBER 14
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ATTR_ASYNC_ENABLE 4
+#define SQL_ATTR_CONCURRENCY SQL_CONCURRENCY
+#define SQL_ATTR_CURSOR_TYPE SQL_CURSOR_TYPE
+#define SQL_ATTR_ENABLE_AUTO_IPD 15
+#define SQL_ATTR_FETCH_BOOKMARK_PTR 16
+#define SQL_ATTR_KEYSET_SIZE SQL_KEYSET_SIZE
+#define SQL_ATTR_MAX_LENGTH SQL_MAX_LENGTH
+#define SQL_ATTR_MAX_ROWS SQL_MAX_ROWS
+#define SQL_ATTR_NOSCAN SQL_NOSCAN
+#define SQL_ATTR_PARAM_BIND_OFFSET_PTR 17
+#define SQL_ATTR_PARAM_BIND_TYPE 18
+#define SQL_ATTR_PARAM_OPERATION_PTR 19
+#define SQL_ATTR_PARAM_STATUS_PTR 20
+#define SQL_ATTR_PARAMS_PROCESSED_PTR 21
+#define SQL_ATTR_RETRIEVE_DATA SQL_RETRIEVE_DATA
+#define SQL_ATTR_ROW_BIND_OFFSET_PTR 23
+#define SQL_ATTR_ROW_BIND_TYPE SQL_BIND_TYPE
+#define SQL_ATTR_ROW_NUMBER SQL_ROW_NUMBER
+#define SQL_ATTR_ROW_OPERATION_PTR 24
+#define SQL_ATTR_ROW_STATUS_PTR 25
+#define SQL_ATTR_ROWS_FETCHED_PTR 26
+#define SQL_ATTR_ROW_ARRAY_SIZE 27
+#define SQL_ATTR_SIMULATE_CURSOR SQL_SIMULATE_CURSOR
+#define SQL_ATTR_USE_BOOKMARKS SQL_USE_BOOKMARKS
+
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_STMT_OPT_MAX SQL_ROW_NUMBER
+#define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_COL_PRED_CHAR SQL_LIKE_ONLY
+#define SQL_COL_PRED_BASIC SQL_ALL_EXCEPT_LIKE
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_IS_POINTER (-4)
+#define SQL_IS_UINTEGER (-5)
+#define SQL_IS_INTEGER (-6)
+#define SQL_IS_USMALLINT (-7)
+#define SQL_IS_SMALLINT (-8)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PARAM_BIND_BY_COLUMN __MSABI_LONG(0U)
+#define SQL_PARAM_BIND_TYPE_DEFAULT SQL_PARAM_BIND_BY_COLUMN
+#endif
+
+#define SQL_QUERY_TIMEOUT_DEFAULT __MSABI_LONG(0U)
+
+#define SQL_MAX_ROWS_DEFAULT __MSABI_LONG(0U)
+
+#define SQL_NOSCAN_OFF __MSABI_LONG(0U)
+#define SQL_NOSCAN_ON __MSABI_LONG(1U)
+#define SQL_NOSCAN_DEFAULT SQL_NOSCAN_OFF
+
+#define SQL_MAX_LENGTH_DEFAULT __MSABI_LONG(0U)
+
+#define SQL_ASYNC_ENABLE_OFF __MSABI_LONG(0U)
+#define SQL_ASYNC_ENABLE_ON __MSABI_LONG(1U)
+#define SQL_ASYNC_ENABLE_DEFAULT SQL_ASYNC_ENABLE_OFF
+
+#define SQL_BIND_BY_COLUMN __MSABI_LONG(0U)
+#define SQL_BIND_TYPE_DEFAULT SQL_BIND_BY_COLUMN
+
+#define SQL_CONCUR_READ_ONLY 1
+#define SQL_CONCUR_LOCK 2
+#define SQL_CONCUR_ROWVER 3
+#define SQL_CONCUR_VALUES 4
+#define SQL_CONCUR_DEFAULT SQL_CONCUR_READ_ONLY
+
+#define SQL_CURSOR_FORWARD_ONLY __MSABI_LONG(0U)
+#define SQL_CURSOR_KEYSET_DRIVEN __MSABI_LONG(1U)
+#define SQL_CURSOR_DYNAMIC __MSABI_LONG(2U)
+#define SQL_CURSOR_STATIC __MSABI_LONG(3U)
+#define SQL_CURSOR_TYPE_DEFAULT SQL_CURSOR_FORWARD_ONLY
+
+#define SQL_ROWSET_SIZE_DEFAULT __MSABI_LONG(1U)
+
+#define SQL_KEYSET_SIZE_DEFAULT __MSABI_LONG(0U)
+
+#define SQL_SC_NON_UNIQUE __MSABI_LONG(0U)
+#define SQL_SC_TRY_UNIQUE __MSABI_LONG(1U)
+#define SQL_SC_UNIQUE __MSABI_LONG(2U)
+
+#define SQL_RD_OFF __MSABI_LONG(0U)
+#define SQL_RD_ON __MSABI_LONG(1U)
+#define SQL_RD_DEFAULT SQL_RD_ON
+
+#define SQL_UB_OFF __MSABI_LONG(0U)
+#define SQL_UB_ON __MSABI_LONG(1U)
+#define SQL_UB_DEFAULT SQL_UB_OFF
+
+#if (ODBCVER >= 0x0300)
+#define SQL_UB_FIXED SQL_UB_ON
+#define SQL_UB_VARIABLE __MSABI_LONG(2U)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DESC_ARRAY_SIZE 20
+#define SQL_DESC_ARRAY_STATUS_PTR 21
+#define SQL_DESC_AUTO_UNIQUE_VALUE SQL_COLUMN_AUTO_INCREMENT
+#define SQL_DESC_BASE_COLUMN_NAME 22
+#define SQL_DESC_BASE_TABLE_NAME 23
+#define SQL_DESC_BIND_OFFSET_PTR 24
+#define SQL_DESC_BIND_TYPE 25
+#define SQL_DESC_CASE_SENSITIVE SQL_COLUMN_CASE_SENSITIVE
+#define SQL_DESC_CATALOG_NAME SQL_COLUMN_QUALIFIER_NAME
+#define SQL_DESC_CONCISE_TYPE SQL_COLUMN_TYPE
+#define SQL_DESC_DATETIME_INTERVAL_PRECISION 26
+#define SQL_DESC_DISPLAY_SIZE SQL_COLUMN_DISPLAY_SIZE
+#define SQL_DESC_FIXED_PREC_SCALE SQL_COLUMN_MONEY
+#define SQL_DESC_LABEL SQL_COLUMN_LABEL
+#define SQL_DESC_LITERAL_PREFIX 27
+#define SQL_DESC_LITERAL_SUFFIX 28
+#define SQL_DESC_LOCAL_TYPE_NAME 29
+#define SQL_DESC_MAXIMUM_SCALE 30
+#define SQL_DESC_MINIMUM_SCALE 31
+#define SQL_DESC_NUM_PREC_RADIX 32
+#define SQL_DESC_PARAMETER_TYPE 33
+#define SQL_DESC_ROWS_PROCESSED_PTR 34
+#if (ODBCVER >= 0x0350)
+#define SQL_DESC_ROWVER 35
+#endif
+#define SQL_DESC_SCHEMA_NAME SQL_COLUMN_OWNER_NAME
+#define SQL_DESC_SEARCHABLE SQL_COLUMN_SEARCHABLE
+#define SQL_DESC_TYPE_NAME SQL_COLUMN_TYPE_NAME
+#define SQL_DESC_TABLE_NAME SQL_COLUMN_TABLE_NAME
+#define SQL_DESC_UNSIGNED SQL_COLUMN_UNSIGNED
+#define SQL_DESC_UPDATABLE SQL_COLUMN_UPDATABLE
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_DIAG_CURSOR_ROW_COUNT (-1249)
+#define SQL_DIAG_ROW_NUMBER (-1248)
+#define SQL_DIAG_COLUMN_NUMBER (-1247)
+#endif
+
+#define SQL_DATE 9
+#if (ODBCVER >= 0x0300)
+#define SQL_INTERVAL 10
+#endif
+#define SQL_TIME 10
+#define SQL_TIMESTAMP 11
+#define SQL_LONGVARCHAR (-1)
+#define SQL_BINARY (-2)
+#define SQL_VARBINARY (-3)
+#define SQL_LONGVARBINARY (-4)
+#define SQL_BIGINT (-5)
+#define SQL_TINYINT (-6)
+#define SQL_BIT (-7)
+#if (ODBCVER >= 0x0350)
+#define SQL_GUID (-11)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CODE_YEAR 1
+#define SQL_CODE_MONTH 2
+#define SQL_CODE_DAY 3
+#define SQL_CODE_HOUR 4
+#define SQL_CODE_MINUTE 5
+#define SQL_CODE_SECOND 6
+#define SQL_CODE_YEAR_TO_MONTH 7
+#define SQL_CODE_DAY_TO_HOUR 8
+#define SQL_CODE_DAY_TO_MINUTE 9
+#define SQL_CODE_DAY_TO_SECOND 10
+#define SQL_CODE_HOUR_TO_MINUTE 11
+#define SQL_CODE_HOUR_TO_SECOND 12
+#define SQL_CODE_MINUTE_TO_SECOND 13
+
+#define SQL_INTERVAL_YEAR (100 + SQL_CODE_YEAR)
+#define SQL_INTERVAL_MONTH (100 + SQL_CODE_MONTH)
+#define SQL_INTERVAL_DAY (100 + SQL_CODE_DAY)
+#define SQL_INTERVAL_HOUR (100 + SQL_CODE_HOUR)
+#define SQL_INTERVAL_MINUTE (100 + SQL_CODE_MINUTE)
+#define SQL_INTERVAL_SECOND (100 + SQL_CODE_SECOND)
+#define SQL_INTERVAL_YEAR_TO_MONTH (100 + SQL_CODE_YEAR_TO_MONTH)
+#define SQL_INTERVAL_DAY_TO_HOUR (100 + SQL_CODE_DAY_TO_HOUR)
+#define SQL_INTERVAL_DAY_TO_MINUTE (100 + SQL_CODE_DAY_TO_MINUTE)
+#define SQL_INTERVAL_DAY_TO_SECOND (100 + SQL_CODE_DAY_TO_SECOND)
+#define SQL_INTERVAL_HOUR_TO_MINUTE (100 + SQL_CODE_HOUR_TO_MINUTE)
+#define SQL_INTERVAL_HOUR_TO_SECOND (100 + SQL_CODE_HOUR_TO_SECOND)
+#define SQL_INTERVAL_MINUTE_TO_SECOND (100 + SQL_CODE_MINUTE_TO_SECOND)
+
+#else
+#define SQL_INTERVAL_YEAR (-80)
+#define SQL_INTERVAL_MONTH (-81)
+#define SQL_INTERVAL_YEAR_TO_MONTH (-82)
+#define SQL_INTERVAL_DAY (-83)
+#define SQL_INTERVAL_HOUR (-84)
+#define SQL_INTERVAL_MINUTE (-85)
+#define SQL_INTERVAL_SECOND (-86)
+#define SQL_INTERVAL_DAY_TO_HOUR (-87)
+#define SQL_INTERVAL_DAY_TO_MINUTE (-88)
+#define SQL_INTERVAL_DAY_TO_SECOND (-89)
+#define SQL_INTERVAL_HOUR_TO_MINUTE (-90)
+#define SQL_INTERVAL_HOUR_TO_SECOND (-91)
+#define SQL_INTERVAL_MINUTE_TO_SECOND (-92)
+#endif
+
+
+#if (ODBCVER <= 0x0300)
+#define SQL_UNICODE (-95)
+#define SQL_UNICODE_VARCHAR (-96)
+#define SQL_UNICODE_LONGVARCHAR (-97)
+#define SQL_UNICODE_CHAR SQL_UNICODE
+#else
+
+#define SQL_UNICODE SQL_WCHAR
+#define SQL_UNICODE_VARCHAR SQL_WVARCHAR
+#define SQL_UNICODE_LONGVARCHAR SQL_WLONGVARCHAR
+#define SQL_UNICODE_CHAR SQL_WCHAR
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_TYPE_DRIVER_START SQL_INTERVAL_YEAR
+#define SQL_TYPE_DRIVER_END SQL_UNICODE_LONGVARCHAR
+#endif
+
+#define SQL_C_CHAR SQL_CHAR
+#define SQL_C_LONG SQL_INTEGER
+#define SQL_C_SHORT SQL_SMALLINT
+#define SQL_C_FLOAT SQL_REAL
+#define SQL_C_DOUBLE SQL_DOUBLE
+#if (ODBCVER >= 0x0300)
+#define SQL_C_NUMERIC SQL_NUMERIC
+#endif
+#define SQL_C_DEFAULT 99
+
+#define SQL_SIGNED_OFFSET (-20)
+#define SQL_UNSIGNED_OFFSET (-22)
+
+#define SQL_C_DATE SQL_DATE
+#define SQL_C_TIME SQL_TIME
+#define SQL_C_TIMESTAMP SQL_TIMESTAMP
+#if (ODBCVER >= 0x0300)
+#define SQL_C_TYPE_DATE SQL_TYPE_DATE
+#define SQL_C_TYPE_TIME SQL_TYPE_TIME
+#define SQL_C_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP
+#define SQL_C_INTERVAL_YEAR SQL_INTERVAL_YEAR
+#define SQL_C_INTERVAL_MONTH SQL_INTERVAL_MONTH
+#define SQL_C_INTERVAL_DAY SQL_INTERVAL_DAY
+#define SQL_C_INTERVAL_HOUR SQL_INTERVAL_HOUR
+#define SQL_C_INTERVAL_MINUTE SQL_INTERVAL_MINUTE
+#define SQL_C_INTERVAL_SECOND SQL_INTERVAL_SECOND
+#define SQL_C_INTERVAL_YEAR_TO_MONTH SQL_INTERVAL_YEAR_TO_MONTH
+#define SQL_C_INTERVAL_DAY_TO_HOUR SQL_INTERVAL_DAY_TO_HOUR
+#define SQL_C_INTERVAL_DAY_TO_MINUTE SQL_INTERVAL_DAY_TO_MINUTE
+#define SQL_C_INTERVAL_DAY_TO_SECOND SQL_INTERVAL_DAY_TO_SECOND
+#define SQL_C_INTERVAL_HOUR_TO_MINUTE SQL_INTERVAL_HOUR_TO_MINUTE
+#define SQL_C_INTERVAL_HOUR_TO_SECOND SQL_INTERVAL_HOUR_TO_SECOND
+#define SQL_C_INTERVAL_MINUTE_TO_SECOND SQL_INTERVAL_MINUTE_TO_SECOND
+#endif
+#define SQL_C_BINARY SQL_BINARY
+#define SQL_C_BIT SQL_BIT
+#if (ODBCVER >= 0x0300)
+#define SQL_C_SBIGINT (SQL_BIGINT+SQL_SIGNED_OFFSET)
+#define SQL_C_UBIGINT (SQL_BIGINT+SQL_UNSIGNED_OFFSET)
+#endif
+#define SQL_C_TINYINT SQL_TINYINT
+#define SQL_C_SLONG (SQL_C_LONG+SQL_SIGNED_OFFSET)
+#define SQL_C_SSHORT (SQL_C_SHORT+SQL_SIGNED_OFFSET)
+#define SQL_C_STINYINT (SQL_TINYINT+SQL_SIGNED_OFFSET)
+#define SQL_C_ULONG (SQL_C_LONG+SQL_UNSIGNED_OFFSET)
+#define SQL_C_USHORT (SQL_C_SHORT+SQL_UNSIGNED_OFFSET)
+#define SQL_C_UTINYINT (SQL_TINYINT+SQL_UNSIGNED_OFFSET)
+#define SQL_C_BOOKMARK SQL_C_ULONG
+
+#if (ODBCVER >= 0x0350)
+#define SQL_C_GUID SQL_GUID
+#endif
+
+#define SQL_TYPE_NULL 0
+#if (ODBCVER < 0x0300)
+#define SQL_TYPE_MIN SQL_BIT
+#define SQL_TYPE_MAX SQL_VARCHAR
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_C_VARBOOKMARK SQL_C_BINARY
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_NO_ROW_NUMBER (-1)
+#define SQL_NO_COLUMN_NUMBER (-1)
+#define SQL_ROW_NUMBER_UNKNOWN (-2)
+#define SQL_COLUMN_NUMBER_UNKNOWN (-2)
+#endif
+
+#define SQL_DEFAULT_PARAM (-5)
+#define SQL_IGNORE (-6)
+#if (ODBCVER >= 0x0300)
+#define SQL_COLUMN_IGNORE SQL_IGNORE
+#endif
+#define SQL_LEN_DATA_AT_EXEC_OFFSET (-100)
+#define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET)
+
+#define SQL_LEN_BINARY_ATTR_OFFSET (-100)
+#define SQL_LEN_BINARY_ATTR(length) (-(length)+SQL_LEN_BINARY_ATTR_OFFSET)
+
+#define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT
+#define SQL_SETPARAM_VALUE_MAX (__MSABI_LONG(-1))
+
+#define SQL_COLUMN_COUNT 0
+#define SQL_COLUMN_NAME 1
+#define SQL_COLUMN_TYPE 2
+#define SQL_COLUMN_LENGTH 3
+#define SQL_COLUMN_PRECISION 4
+#define SQL_COLUMN_SCALE 5
+#define SQL_COLUMN_DISPLAY_SIZE 6
+#define SQL_COLUMN_NULLABLE 7
+#define SQL_COLUMN_UNSIGNED 8
+#define SQL_COLUMN_MONEY 9
+#define SQL_COLUMN_UPDATABLE 10
+#define SQL_COLUMN_AUTO_INCREMENT 11
+#define SQL_COLUMN_CASE_SENSITIVE 12
+#define SQL_COLUMN_SEARCHABLE 13
+#define SQL_COLUMN_TYPE_NAME 14
+#define SQL_COLUMN_TABLE_NAME 15
+#define SQL_COLUMN_OWNER_NAME 16
+#define SQL_COLUMN_QUALIFIER_NAME 17
+#define SQL_COLUMN_LABEL 18
+#define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL
+#if (ODBCVER < 0x0300)
+#define SQL_COLUMN_DRIVER_START 1000
+#endif
+
+#define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT
+
+#define SQL_ATTR_READONLY 0
+#define SQL_ATTR_WRITE 1
+#define SQL_ATTR_READWRITE_UNKNOWN 2
+
+#define SQL_UNSEARCHABLE 0
+#define SQL_LIKE_ONLY 1
+#define SQL_ALL_EXCEPT_LIKE 2
+#define SQL_SEARCHABLE 3
+#define SQL_PRED_SEARCHABLE SQL_SEARCHABLE
+
+
+#define SQL_NO_TOTAL (-4)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_API_SQLALLOCHANDLESTD 73
+#define SQL_API_SQLBULKOPERATIONS 24
+#endif
+#define SQL_API_SQLBINDPARAMETER 72
+#define SQL_API_SQLBROWSECONNECT 55
+#define SQL_API_SQLCOLATTRIBUTES 6
+#define SQL_API_SQLCOLUMNPRIVILEGES 56
+#define SQL_API_SQLDESCRIBEPARAM 58
+#define SQL_API_SQLDRIVERCONNECT 41
+#define SQL_API_SQLDRIVERS 71
+#define SQL_API_SQLEXTENDEDFETCH 59
+#define SQL_API_SQLFOREIGNKEYS 60
+#define SQL_API_SQLMORERESULTS 61
+#define SQL_API_SQLNATIVESQL 62
+#define SQL_API_SQLNUMPARAMS 63
+#define SQL_API_SQLPARAMOPTIONS 64
+#define SQL_API_SQLPRIMARYKEYS 65
+#define SQL_API_SQLPROCEDURECOLUMNS 66
+#define SQL_API_SQLPROCEDURES 67
+#define SQL_API_SQLSETPOS 68
+#define SQL_API_SQLSETSCROLLOPTIONS 69
+#define SQL_API_SQLTABLEPRIVILEGES 70
+
+#if (ODBCVER < 0x0300)
+#define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER
+#define SQL_NUM_FUNCTIONS 23
+#define SQL_EXT_API_START 40
+#define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1)
+#endif
+
+#define SQL_API_ALL_FUNCTIONS 0
+
+#define SQL_API_LOADBYORDINAL 199
+
+#if (ODBCVER >= 0x0300)
+#define SQL_API_ODBC3_ALL_FUNCTIONS 999
+#define SQL_API_ODBC3_ALL_FUNCTIONS_SIZE 250
+
+
+#define SQL_FUNC_EXISTS(pfExists, uwAPI) ((*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) & (1 << ((uwAPI) & 0x000F)) ) ? SQL_TRUE : SQL_FALSE )
+
+#endif
+
+#define SQL_INFO_FIRST 0
+#define SQL_ACTIVE_CONNECTIONS 0
+#define SQL_ACTIVE_STATEMENTS 1
+#define SQL_DRIVER_HDBC 3
+#define SQL_DRIVER_HENV 4
+#define SQL_DRIVER_HSTMT 5
+#define SQL_DRIVER_NAME 6
+#define SQL_DRIVER_VER 7
+#define SQL_ODBC_API_CONFORMANCE 9
+#define SQL_ODBC_VER 10
+#define SQL_ROW_UPDATES 11
+#define SQL_ODBC_SAG_CLI_CONFORMANCE 12
+#define SQL_ODBC_SQL_CONFORMANCE 15
+#define SQL_PROCEDURES 21
+#define SQL_CONCAT_NULL_BEHAVIOR 22
+#define SQL_CURSOR_ROLLBACK_BEHAVIOR 24
+#define SQL_EXPRESSIONS_IN_ORDERBY 27
+#define SQL_MAX_OWNER_NAME_LEN 32
+#define SQL_MAX_PROCEDURE_NAME_LEN 33
+#define SQL_MAX_QUALIFIER_NAME_LEN 34
+#define SQL_MULT_RESULT_SETS 36
+#define SQL_MULTIPLE_ACTIVE_TXN 37
+#define SQL_OUTER_JOINS 38
+#define SQL_OWNER_TERM 39
+#define SQL_PROCEDURE_TERM 40
+#define SQL_QUALIFIER_NAME_SEPARATOR 41
+#define SQL_QUALIFIER_TERM 42
+#define SQL_SCROLL_OPTIONS 44
+#define SQL_TABLE_TERM 45
+#define SQL_CONVERT_FUNCTIONS 48
+#define SQL_NUMERIC_FUNCTIONS 49
+#define SQL_STRING_FUNCTIONS 50
+#define SQL_SYSTEM_FUNCTIONS 51
+#define SQL_TIMEDATE_FUNCTIONS 52
+#define SQL_CONVERT_BIGINT 53
+#define SQL_CONVERT_BINARY 54
+#define SQL_CONVERT_BIT 55
+#define SQL_CONVERT_CHAR 56
+#define SQL_CONVERT_DATE 57
+#define SQL_CONVERT_DECIMAL 58
+#define SQL_CONVERT_DOUBLE 59
+#define SQL_CONVERT_FLOAT 60
+#define SQL_CONVERT_INTEGER 61
+#define SQL_CONVERT_LONGVARCHAR 62
+#define SQL_CONVERT_NUMERIC 63
+#define SQL_CONVERT_REAL 64
+#define SQL_CONVERT_SMALLINT 65
+#define SQL_CONVERT_TIME 66
+#define SQL_CONVERT_TIMESTAMP 67
+#define SQL_CONVERT_TINYINT 68
+#define SQL_CONVERT_VARBINARY 69
+#define SQL_CONVERT_VARCHAR 70
+#define SQL_CONVERT_LONGVARBINARY 71
+#define SQL_ODBC_SQL_OPT_IEF 73
+#define SQL_CORRELATION_NAME 74
+#define SQL_NON_NULLABLE_COLUMNS 75
+#define SQL_DRIVER_HLIB 76
+#define SQL_DRIVER_ODBC_VER 77
+#define SQL_LOCK_TYPES 78
+#define SQL_POS_OPERATIONS 79
+#define SQL_POSITIONED_STATEMENTS 80
+#define SQL_BOOKMARK_PERSISTENCE 82
+#define SQL_STATIC_SENSITIVITY 83
+#define SQL_FILE_USAGE 84
+#define SQL_COLUMN_ALIAS 87
+#define SQL_GROUP_BY 88
+#define SQL_KEYWORDS 89
+#define SQL_OWNER_USAGE 91
+#define SQL_QUALIFIER_USAGE 92
+#define SQL_QUOTED_IDENTIFIER_CASE 93
+#define SQL_SUBQUERIES 95
+#define SQL_UNION 96
+#define SQL_MAX_ROW_SIZE_INCLUDES_LONG 103
+#define SQL_MAX_CHAR_LITERAL_LEN 108
+#define SQL_TIMEDATE_ADD_INTERVALS 109
+#define SQL_TIMEDATE_DIFF_INTERVALS 110
+#define SQL_NEED_LONG_DATA_LEN 111
+#define SQL_MAX_BINARY_LITERAL_LEN 112
+#define SQL_LIKE_ESCAPE_CLAUSE 113
+#define SQL_QUALIFIER_LOCATION 114
+
+#if (ODBCVER >= 0x0201 && ODBCVER < 0x0300)
+#define SQL_OJ_CAPABILITIES 65003
+#endif
+
+#if (ODBCVER < 0x0300)
+#define SQL_INFO_LAST SQL_QUALIFIER_LOCATION
+#define SQL_INFO_DRIVER_START 1000
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ACTIVE_ENVIRONMENTS 116
+#define SQL_ALTER_DOMAIN 117
+
+#define SQL_SQL_CONFORMANCE 118
+#define SQL_DATETIME_LITERALS 119
+
+#define SQL_ASYNC_MODE 10021
+#define SQL_BATCH_ROW_COUNT 120
+#define SQL_BATCH_SUPPORT 121
+#define SQL_CATALOG_LOCATION SQL_QUALIFIER_LOCATION
+#define SQL_CATALOG_NAME_SEPARATOR SQL_QUALIFIER_NAME_SEPARATOR
+#define SQL_CATALOG_TERM SQL_QUALIFIER_TERM
+#define SQL_CATALOG_USAGE SQL_QUALIFIER_USAGE
+#define SQL_CONVERT_WCHAR 122
+#define SQL_CONVERT_INTERVAL_DAY_TIME 123
+#define SQL_CONVERT_INTERVAL_YEAR_MONTH 124
+#define SQL_CONVERT_WLONGVARCHAR 125
+#define SQL_CONVERT_WVARCHAR 126
+#define SQL_CREATE_ASSERTION 127
+#define SQL_CREATE_CHARACTER_SET 128
+#define SQL_CREATE_COLLATION 129
+#define SQL_CREATE_DOMAIN 130
+#define SQL_CREATE_SCHEMA 131
+#define SQL_CREATE_TABLE 132
+#define SQL_CREATE_TRANSLATION 133
+#define SQL_CREATE_VIEW 134
+#define SQL_DRIVER_HDESC 135
+#define SQL_DROP_ASSERTION 136
+#define SQL_DROP_CHARACTER_SET 137
+#define SQL_DROP_COLLATION 138
+#define SQL_DROP_DOMAIN 139
+#define SQL_DROP_SCHEMA 140
+#define SQL_DROP_TABLE 141
+#define SQL_DROP_TRANSLATION 142
+#define SQL_DROP_VIEW 143
+#define SQL_DYNAMIC_CURSOR_ATTRIBUTES1 144
+#define SQL_DYNAMIC_CURSOR_ATTRIBUTES2 145
+#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 146
+#define SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 147
+#define SQL_INDEX_KEYWORDS 148
+#define SQL_INFO_SCHEMA_VIEWS 149
+#define SQL_KEYSET_CURSOR_ATTRIBUTES1 150
+#define SQL_KEYSET_CURSOR_ATTRIBUTES2 151
+#define SQL_MAX_ASYNC_CONCURRENT_STATEMENTS 10022
+#define SQL_ODBC_INTERFACE_CONFORMANCE 152
+#define SQL_PARAM_ARRAY_ROW_COUNTS 153
+#define SQL_PARAM_ARRAY_SELECTS 154
+#define SQL_SCHEMA_TERM SQL_OWNER_TERM
+#define SQL_SCHEMA_USAGE SQL_OWNER_USAGE
+#define SQL_SQL92_DATETIME_FUNCTIONS 155
+#define SQL_SQL92_FOREIGN_KEY_DELETE_RULE 156
+#define SQL_SQL92_FOREIGN_KEY_UPDATE_RULE 157
+#define SQL_SQL92_GRANT 158
+#define SQL_SQL92_NUMERIC_VALUE_FUNCTIONS 159
+#define SQL_SQL92_PREDICATES 160
+#define SQL_SQL92_RELATIONAL_JOIN_OPERATORS 161
+#define SQL_SQL92_REVOKE 162
+#define SQL_SQL92_ROW_VALUE_CONSTRUCTOR 163
+#define SQL_SQL92_STRING_FUNCTIONS 164
+#define SQL_SQL92_VALUE_EXPRESSIONS 165
+#define SQL_STANDARD_CLI_CONFORMANCE 166
+#define SQL_STATIC_CURSOR_ATTRIBUTES1 167
+#define SQL_STATIC_CURSOR_ATTRIBUTES2 168
+
+#define SQL_AGGREGATE_FUNCTIONS 169
+#define SQL_DDL_INDEX 170
+#define SQL_DM_VER 171
+#define SQL_INSERT_STATEMENT 172
+#define SQL_UNION_STATEMENT SQL_UNION
+#endif
+
+#define SQL_DTC_TRANSITION_COST 1750
+
+#if (ODBCVER >= 0x0300)
+
+#define SQL_AT_ADD_COLUMN_SINGLE __MSABI_LONG(0x00000020)
+#define SQL_AT_ADD_COLUMN_DEFAULT __MSABI_LONG(0x00000040)
+#define SQL_AT_ADD_COLUMN_COLLATION __MSABI_LONG(0x00000080)
+#define SQL_AT_SET_COLUMN_DEFAULT __MSABI_LONG(0x00000100)
+#define SQL_AT_DROP_COLUMN_DEFAULT __MSABI_LONG(0x00000200)
+#define SQL_AT_DROP_COLUMN_CASCADE __MSABI_LONG(0x00000400)
+#define SQL_AT_DROP_COLUMN_RESTRICT __MSABI_LONG(0x00000800)
+#define SQL_AT_ADD_TABLE_CONSTRAINT __MSABI_LONG(0x00001000)
+#define SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE __MSABI_LONG(0x00002000)
+#define SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT __MSABI_LONG(0x00004000)
+#define SQL_AT_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00008000)
+#define SQL_AT_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00010000)
+#define SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00020000)
+#define SQL_AT_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00040000)
+#define SQL_AT_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00080000)
+#endif
+
+#define SQL_CVT_CHAR __MSABI_LONG(0x00000001)
+#define SQL_CVT_NUMERIC __MSABI_LONG(0x00000002)
+#define SQL_CVT_DECIMAL __MSABI_LONG(0x00000004)
+#define SQL_CVT_INTEGER __MSABI_LONG(0x00000008)
+#define SQL_CVT_SMALLINT __MSABI_LONG(0x00000010)
+#define SQL_CVT_FLOAT __MSABI_LONG(0x00000020)
+#define SQL_CVT_REAL __MSABI_LONG(0x00000040)
+#define SQL_CVT_DOUBLE __MSABI_LONG(0x00000080)
+#define SQL_CVT_VARCHAR __MSABI_LONG(0x00000100)
+#define SQL_CVT_LONGVARCHAR __MSABI_LONG(0x00000200)
+#define SQL_CVT_BINARY __MSABI_LONG(0x00000400)
+#define SQL_CVT_VARBINARY __MSABI_LONG(0x00000800)
+#define SQL_CVT_BIT __MSABI_LONG(0x00001000)
+#define SQL_CVT_TINYINT __MSABI_LONG(0x00002000)
+#define SQL_CVT_BIGINT __MSABI_LONG(0x00004000)
+#define SQL_CVT_DATE __MSABI_LONG(0x00008000)
+#define SQL_CVT_TIME __MSABI_LONG(0x00010000)
+#define SQL_CVT_TIMESTAMP __MSABI_LONG(0x00020000)
+#define SQL_CVT_LONGVARBINARY __MSABI_LONG(0x00040000)
+#if (ODBCVER >= 0x0300)
+#define SQL_CVT_INTERVAL_YEAR_MONTH __MSABI_LONG(0x00080000)
+#define SQL_CVT_INTERVAL_DAY_TIME __MSABI_LONG(0x00100000)
+#define SQL_CVT_WCHAR __MSABI_LONG(0x00200000)
+#define SQL_CVT_WLONGVARCHAR __MSABI_LONG(0x00400000)
+#define SQL_CVT_WVARCHAR __MSABI_LONG(0x00800000)
+
+#endif
+
+
+#define SQL_FN_CVT_CONVERT __MSABI_LONG(0x00000001)
+#if (ODBCVER >= 0x0300)
+#define SQL_FN_CVT_CAST __MSABI_LONG(0x00000002)
+#endif
+
+#define SQL_FN_STR_CONCAT __MSABI_LONG(0x00000001)
+#define SQL_FN_STR_INSERT __MSABI_LONG(0x00000002)
+#define SQL_FN_STR_LEFT __MSABI_LONG(0x00000004)
+#define SQL_FN_STR_LTRIM __MSABI_LONG(0x00000008)
+#define SQL_FN_STR_LENGTH __MSABI_LONG(0x00000010)
+#define SQL_FN_STR_LOCATE __MSABI_LONG(0x00000020)
+#define SQL_FN_STR_LCASE __MSABI_LONG(0x00000040)
+#define SQL_FN_STR_REPEAT __MSABI_LONG(0x00000080)
+#define SQL_FN_STR_REPLACE __MSABI_LONG(0x00000100)
+#define SQL_FN_STR_RIGHT __MSABI_LONG(0x00000200)
+#define SQL_FN_STR_RTRIM __MSABI_LONG(0x00000400)
+#define SQL_FN_STR_SUBSTRING __MSABI_LONG(0x00000800)
+#define SQL_FN_STR_UCASE __MSABI_LONG(0x00001000)
+#define SQL_FN_STR_ASCII __MSABI_LONG(0x00002000)
+#define SQL_FN_STR_CHAR __MSABI_LONG(0x00004000)
+#define SQL_FN_STR_DIFFERENCE __MSABI_LONG(0x00008000)
+#define SQL_FN_STR_LOCATE_2 __MSABI_LONG(0x00010000)
+#define SQL_FN_STR_SOUNDEX __MSABI_LONG(0x00020000)
+#define SQL_FN_STR_SPACE __MSABI_LONG(0x00040000)
+#if (ODBCVER >= 0x0300)
+#define SQL_FN_STR_BIT_LENGTH __MSABI_LONG(0x00080000)
+#define SQL_FN_STR_CHAR_LENGTH __MSABI_LONG(0x00100000)
+#define SQL_FN_STR_CHARACTER_LENGTH __MSABI_LONG(0x00200000)
+#define SQL_FN_STR_OCTET_LENGTH __MSABI_LONG(0x00400000)
+#define SQL_FN_STR_POSITION __MSABI_LONG(0x00800000)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SSF_CONVERT __MSABI_LONG(0x00000001)
+#define SQL_SSF_LOWER __MSABI_LONG(0x00000002)
+#define SQL_SSF_UPPER __MSABI_LONG(0x00000004)
+#define SQL_SSF_SUBSTRING __MSABI_LONG(0x00000008)
+#define SQL_SSF_TRANSLATE __MSABI_LONG(0x00000010)
+#define SQL_SSF_TRIM_BOTH __MSABI_LONG(0x00000020)
+#define SQL_SSF_TRIM_LEADING __MSABI_LONG(0x00000040)
+#define SQL_SSF_TRIM_TRAILING __MSABI_LONG(0x00000080)
+#endif
+
+#define SQL_FN_NUM_ABS __MSABI_LONG(0x00000001)
+#define SQL_FN_NUM_ACOS __MSABI_LONG(0x00000002)
+#define SQL_FN_NUM_ASIN __MSABI_LONG(0x00000004)
+#define SQL_FN_NUM_ATAN __MSABI_LONG(0x00000008)
+#define SQL_FN_NUM_ATAN2 __MSABI_LONG(0x00000010)
+#define SQL_FN_NUM_CEILING __MSABI_LONG(0x00000020)
+#define SQL_FN_NUM_COS __MSABI_LONG(0x00000040)
+#define SQL_FN_NUM_COT __MSABI_LONG(0x00000080)
+#define SQL_FN_NUM_EXP __MSABI_LONG(0x00000100)
+#define SQL_FN_NUM_FLOOR __MSABI_LONG(0x00000200)
+#define SQL_FN_NUM_LOG __MSABI_LONG(0x00000400)
+#define SQL_FN_NUM_MOD __MSABI_LONG(0x00000800)
+#define SQL_FN_NUM_SIGN __MSABI_LONG(0x00001000)
+#define SQL_FN_NUM_SIN __MSABI_LONG(0x00002000)
+#define SQL_FN_NUM_SQRT __MSABI_LONG(0x00004000)
+#define SQL_FN_NUM_TAN __MSABI_LONG(0x00008000)
+#define SQL_FN_NUM_PI __MSABI_LONG(0x00010000)
+#define SQL_FN_NUM_RAND __MSABI_LONG(0x00020000)
+#define SQL_FN_NUM_DEGREES __MSABI_LONG(0x00040000)
+#define SQL_FN_NUM_LOG10 __MSABI_LONG(0x00080000)
+#define SQL_FN_NUM_POWER __MSABI_LONG(0x00100000)
+#define SQL_FN_NUM_RADIANS __MSABI_LONG(0x00200000)
+#define SQL_FN_NUM_ROUND __MSABI_LONG(0x00400000)
+#define SQL_FN_NUM_TRUNCATE __MSABI_LONG(0x00800000)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SNVF_BIT_LENGTH __MSABI_LONG(0x00000001)
+#define SQL_SNVF_CHAR_LENGTH __MSABI_LONG(0x00000002)
+#define SQL_SNVF_CHARACTER_LENGTH __MSABI_LONG(0x00000004)
+#define SQL_SNVF_EXTRACT __MSABI_LONG(0x00000008)
+#define SQL_SNVF_OCTET_LENGTH __MSABI_LONG(0x00000010)
+#define SQL_SNVF_POSITION __MSABI_LONG(0x00000020)
+#endif
+
+#define SQL_FN_TD_NOW __MSABI_LONG(0x00000001)
+#define SQL_FN_TD_CURDATE __MSABI_LONG(0x00000002)
+#define SQL_FN_TD_DAYOFMONTH __MSABI_LONG(0x00000004)
+#define SQL_FN_TD_DAYOFWEEK __MSABI_LONG(0x00000008)
+#define SQL_FN_TD_DAYOFYEAR __MSABI_LONG(0x00000010)
+#define SQL_FN_TD_MONTH __MSABI_LONG(0x00000020)
+#define SQL_FN_TD_QUARTER __MSABI_LONG(0x00000040)
+#define SQL_FN_TD_WEEK __MSABI_LONG(0x00000080)
+#define SQL_FN_TD_YEAR __MSABI_LONG(0x00000100)
+#define SQL_FN_TD_CURTIME __MSABI_LONG(0x00000200)
+#define SQL_FN_TD_HOUR __MSABI_LONG(0x00000400)
+#define SQL_FN_TD_MINUTE __MSABI_LONG(0x00000800)
+#define SQL_FN_TD_SECOND __MSABI_LONG(0x00001000)
+#define SQL_FN_TD_TIMESTAMPADD __MSABI_LONG(0x00002000)
+#define SQL_FN_TD_TIMESTAMPDIFF __MSABI_LONG(0x00004000)
+#define SQL_FN_TD_DAYNAME __MSABI_LONG(0x00008000)
+#define SQL_FN_TD_MONTHNAME __MSABI_LONG(0x00010000)
+#if (ODBCVER >= 0x0300)
+#define SQL_FN_TD_CURRENT_DATE __MSABI_LONG(0x00020000)
+#define SQL_FN_TD_CURRENT_TIME __MSABI_LONG(0x00040000)
+#define SQL_FN_TD_CURRENT_TIMESTAMP __MSABI_LONG(0x00080000)
+#define SQL_FN_TD_EXTRACT __MSABI_LONG(0x00100000)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SDF_CURRENT_DATE __MSABI_LONG(0x00000001)
+#define SQL_SDF_CURRENT_TIME __MSABI_LONG(0x00000002)
+#define SQL_SDF_CURRENT_TIMESTAMP __MSABI_LONG(0x00000004)
+#endif
+
+#define SQL_FN_SYS_USERNAME __MSABI_LONG(0x00000001)
+#define SQL_FN_SYS_DBNAME __MSABI_LONG(0x00000002)
+#define SQL_FN_SYS_IFNULL __MSABI_LONG(0x00000004)
+
+#define SQL_FN_TSI_FRAC_SECOND __MSABI_LONG(0x00000001)
+#define SQL_FN_TSI_SECOND __MSABI_LONG(0x00000002)
+#define SQL_FN_TSI_MINUTE __MSABI_LONG(0x00000004)
+#define SQL_FN_TSI_HOUR __MSABI_LONG(0x00000008)
+#define SQL_FN_TSI_DAY __MSABI_LONG(0x00000010)
+#define SQL_FN_TSI_WEEK __MSABI_LONG(0x00000020)
+#define SQL_FN_TSI_MONTH __MSABI_LONG(0x00000040)
+#define SQL_FN_TSI_QUARTER __MSABI_LONG(0x00000080)
+#define SQL_FN_TSI_YEAR __MSABI_LONG(0x00000100)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CA1_NEXT __MSABI_LONG(0x00000001)
+#define SQL_CA1_ABSOLUTE __MSABI_LONG(0x00000002)
+#define SQL_CA1_RELATIVE __MSABI_LONG(0x00000004)
+#define SQL_CA1_BOOKMARK __MSABI_LONG(0x00000008)
+
+#define SQL_CA1_LOCK_NO_CHANGE __MSABI_LONG(0x00000040)
+#define SQL_CA1_LOCK_EXCLUSIVE __MSABI_LONG(0x00000080)
+#define SQL_CA1_LOCK_UNLOCK __MSABI_LONG(0x00000100)
+
+#define SQL_CA1_POS_POSITION __MSABI_LONG(0x00000200)
+#define SQL_CA1_POS_UPDATE __MSABI_LONG(0x00000400)
+#define SQL_CA1_POS_DELETE __MSABI_LONG(0x00000800)
+#define SQL_CA1_POS_REFRESH __MSABI_LONG(0x00001000)
+
+#define SQL_CA1_POSITIONED_UPDATE __MSABI_LONG(0x00002000)
+#define SQL_CA1_POSITIONED_DELETE __MSABI_LONG(0x00004000)
+#define SQL_CA1_SELECT_FOR_UPDATE __MSABI_LONG(0x00008000)
+
+#define SQL_CA1_BULK_ADD __MSABI_LONG(0x00010000)
+#define SQL_CA1_BULK_UPDATE_BY_BOOKMARK __MSABI_LONG(0x00020000)
+#define SQL_CA1_BULK_DELETE_BY_BOOKMARK __MSABI_LONG(0x00040000)
+#define SQL_CA1_BULK_FETCH_BY_BOOKMARK __MSABI_LONG(0x00080000)
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CA2_READ_ONLY_CONCURRENCY __MSABI_LONG(0x00000001)
+#define SQL_CA2_LOCK_CONCURRENCY __MSABI_LONG(0x00000002)
+#define SQL_CA2_OPT_ROWVER_CONCURRENCY __MSABI_LONG(0x00000004)
+#define SQL_CA2_OPT_VALUES_CONCURRENCY __MSABI_LONG(0x00000008)
+
+#define SQL_CA2_SENSITIVITY_ADDITIONS __MSABI_LONG(0x00000010)
+#define SQL_CA2_SENSITIVITY_DELETIONS __MSABI_LONG(0x00000020)
+#define SQL_CA2_SENSITIVITY_UPDATES __MSABI_LONG(0x00000040)
+
+#define SQL_CA2_MAX_ROWS_SELECT __MSABI_LONG(0x00000080)
+#define SQL_CA2_MAX_ROWS_INSERT __MSABI_LONG(0x00000100)
+#define SQL_CA2_MAX_ROWS_DELETE __MSABI_LONG(0x00000200)
+#define SQL_CA2_MAX_ROWS_UPDATE __MSABI_LONG(0x00000400)
+#define SQL_CA2_MAX_ROWS_CATALOG __MSABI_LONG(0x00000800)
+#define SQL_CA2_MAX_ROWS_AFFECTS_ALL (SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_INSERT | SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_MAX_ROWS_CATALOG)
+
+#define SQL_CA2_CRC_EXACT __MSABI_LONG(0x00001000)
+#define SQL_CA2_CRC_APPROXIMATE __MSABI_LONG(0x00002000)
+
+#define SQL_CA2_SIMULATE_NON_UNIQUE __MSABI_LONG(0x00004000)
+#define SQL_CA2_SIMULATE_TRY_UNIQUE __MSABI_LONG(0x00008000)
+#define SQL_CA2_SIMULATE_UNIQUE __MSABI_LONG(0x00010000)
+#endif
+
+#define SQL_OAC_NONE 0x0000
+#define SQL_OAC_LEVEL1 0x0001
+#define SQL_OAC_LEVEL2 0x0002
+
+#define SQL_OSCC_NOT_COMPLIANT 0x0000
+#define SQL_OSCC_COMPLIANT 0x0001
+
+#define SQL_OSC_MINIMUM 0x0000
+#define SQL_OSC_CORE 0x0001
+#define SQL_OSC_EXTENDED 0x0002
+
+#define SQL_CB_NULL 0x0000
+#define SQL_CB_NON_NULL 0x0001
+
+#define SQL_SO_FORWARD_ONLY __MSABI_LONG(0x00000001)
+#define SQL_SO_KEYSET_DRIVEN __MSABI_LONG(0x00000002)
+#define SQL_SO_DYNAMIC __MSABI_LONG(0x00000004)
+#define SQL_SO_MIXED __MSABI_LONG(0x00000008)
+#define SQL_SO_STATIC __MSABI_LONG(0x00000010)
+
+#define SQL_FD_FETCH_BOOKMARK __MSABI_LONG(0x00000080)
+
+#define SQL_CN_NONE 0x0000
+#define SQL_CN_DIFFERENT 0x0001
+#define SQL_CN_ANY 0x0002
+
+#define SQL_NNC_NULL 0x0000
+#define SQL_NNC_NON_NULL 0x0001
+
+#define SQL_NC_START 0x0002
+#define SQL_NC_END 0x0004
+
+#define SQL_FILE_NOT_SUPPORTED 0x0000
+#define SQL_FILE_TABLE 0x0001
+#define SQL_FILE_QUALIFIER 0x0002
+#define SQL_FILE_CATALOG SQL_FILE_QUALIFIER
+
+#define SQL_GD_BLOCK __MSABI_LONG(0x00000004)
+#define SQL_GD_BOUND __MSABI_LONG(0x00000008)
+
+#define SQL_PS_POSITIONED_DELETE __MSABI_LONG(0x00000001)
+#define SQL_PS_POSITIONED_UPDATE __MSABI_LONG(0x00000002)
+#define SQL_PS_SELECT_FOR_UPDATE __MSABI_LONG(0x00000004)
+
+#define SQL_GB_NOT_SUPPORTED 0x0000
+#define SQL_GB_GROUP_BY_EQUALS_SELECT 0x0001
+#define SQL_GB_GROUP_BY_CONTAINS_SELECT 0x0002
+#define SQL_GB_NO_RELATION 0x0003
+#if (ODBCVER >= 0x0300)
+#define SQL_GB_COLLATE 0x0004
+
+#endif
+
+#define SQL_OU_DML_STATEMENTS __MSABI_LONG(0x00000001)
+#define SQL_OU_PROCEDURE_INVOCATION __MSABI_LONG(0x00000002)
+#define SQL_OU_TABLE_DEFINITION __MSABI_LONG(0x00000004)
+#define SQL_OU_INDEX_DEFINITION __MSABI_LONG(0x00000008)
+#define SQL_OU_PRIVILEGE_DEFINITION __MSABI_LONG(0x00000010)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_SU_DML_STATEMENTS SQL_OU_DML_STATEMENTS
+#define SQL_SU_PROCEDURE_INVOCATION SQL_OU_PROCEDURE_INVOCATION
+#define SQL_SU_TABLE_DEFINITION SQL_OU_TABLE_DEFINITION
+#define SQL_SU_INDEX_DEFINITION SQL_OU_INDEX_DEFINITION
+#define SQL_SU_PRIVILEGE_DEFINITION SQL_OU_PRIVILEGE_DEFINITION
+#endif
+
+#define SQL_QU_DML_STATEMENTS __MSABI_LONG(0x00000001)
+#define SQL_QU_PROCEDURE_INVOCATION __MSABI_LONG(0x00000002)
+#define SQL_QU_TABLE_DEFINITION __MSABI_LONG(0x00000004)
+#define SQL_QU_INDEX_DEFINITION __MSABI_LONG(0x00000008)
+#define SQL_QU_PRIVILEGE_DEFINITION __MSABI_LONG(0x00000010)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_CU_DML_STATEMENTS SQL_QU_DML_STATEMENTS
+#define SQL_CU_PROCEDURE_INVOCATION SQL_QU_PROCEDURE_INVOCATION
+#define SQL_CU_TABLE_DEFINITION SQL_QU_TABLE_DEFINITION
+#define SQL_CU_INDEX_DEFINITION SQL_QU_INDEX_DEFINITION
+#define SQL_CU_PRIVILEGE_DEFINITION SQL_QU_PRIVILEGE_DEFINITION
+#endif
+
+#define SQL_SQ_COMPARISON __MSABI_LONG(0x00000001)
+#define SQL_SQ_EXISTS __MSABI_LONG(0x00000002)
+#define SQL_SQ_IN __MSABI_LONG(0x00000004)
+#define SQL_SQ_QUANTIFIED __MSABI_LONG(0x00000008)
+#define SQL_SQ_CORRELATED_SUBQUERIES __MSABI_LONG(0x00000010)
+
+#define SQL_U_UNION __MSABI_LONG(0x00000001)
+#define SQL_U_UNION_ALL __MSABI_LONG(0x00000002)
+
+#define SQL_BP_CLOSE __MSABI_LONG(0x00000001)
+#define SQL_BP_DELETE __MSABI_LONG(0x00000002)
+#define SQL_BP_DROP __MSABI_LONG(0x00000004)
+#define SQL_BP_TRANSACTION __MSABI_LONG(0x00000008)
+#define SQL_BP_UPDATE __MSABI_LONG(0x00000010)
+#define SQL_BP_OTHER_HSTMT __MSABI_LONG(0x00000020)
+#define SQL_BP_SCROLL __MSABI_LONG(0x00000040)
+
+#define SQL_SS_ADDITIONS __MSABI_LONG(0x00000001)
+#define SQL_SS_DELETIONS __MSABI_LONG(0x00000002)
+#define SQL_SS_UPDATES __MSABI_LONG(0x00000004)
+
+#define SQL_CV_CREATE_VIEW __MSABI_LONG(0x00000001)
+#define SQL_CV_CHECK_OPTION __MSABI_LONG(0x00000002)
+#define SQL_CV_CASCADED __MSABI_LONG(0x00000004)
+#define SQL_CV_LOCAL __MSABI_LONG(0x00000008)
+
+#define SQL_LCK_NO_CHANGE __MSABI_LONG(0x00000001)
+#define SQL_LCK_EXCLUSIVE __MSABI_LONG(0x00000002)
+#define SQL_LCK_UNLOCK __MSABI_LONG(0x00000004)
+
+#define SQL_POS_POSITION __MSABI_LONG(0x00000001)
+#define SQL_POS_REFRESH __MSABI_LONG(0x00000002)
+#define SQL_POS_UPDATE __MSABI_LONG(0x00000004)
+#define SQL_POS_DELETE __MSABI_LONG(0x00000008)
+#define SQL_POS_ADD __MSABI_LONG(0x00000010)
+
+#define SQL_QL_START 0x0001
+#define SQL_QL_END 0x0002
+
+#if (ODBCVER >= 0x0300)
+#define SQL_AF_AVG __MSABI_LONG(0x00000001)
+#define SQL_AF_COUNT __MSABI_LONG(0x00000002)
+#define SQL_AF_MAX __MSABI_LONG(0x00000004)
+#define SQL_AF_MIN __MSABI_LONG(0x00000008)
+#define SQL_AF_SUM __MSABI_LONG(0x00000010)
+#define SQL_AF_DISTINCT __MSABI_LONG(0x00000020)
+#define SQL_AF_ALL __MSABI_LONG(0x00000040)
+
+#define SQL_SC_SQL92_ENTRY __MSABI_LONG(0x00000001)
+#define SQL_SC_FIPS127_2_TRANSITIONAL __MSABI_LONG(0x00000002)
+#define SQL_SC_SQL92_INTERMEDIATE __MSABI_LONG(0x00000004)
+#define SQL_SC_SQL92_FULL __MSABI_LONG(0x00000008)
+
+#define SQL_DL_SQL92_DATE __MSABI_LONG(0x00000001)
+#define SQL_DL_SQL92_TIME __MSABI_LONG(0x00000002)
+#define SQL_DL_SQL92_TIMESTAMP __MSABI_LONG(0x00000004)
+#define SQL_DL_SQL92_INTERVAL_YEAR __MSABI_LONG(0x00000008)
+#define SQL_DL_SQL92_INTERVAL_MONTH __MSABI_LONG(0x00000010)
+#define SQL_DL_SQL92_INTERVAL_DAY __MSABI_LONG(0x00000020)
+#define SQL_DL_SQL92_INTERVAL_HOUR __MSABI_LONG(0x00000040)
+#define SQL_DL_SQL92_INTERVAL_MINUTE __MSABI_LONG(0x00000080)
+#define SQL_DL_SQL92_INTERVAL_SECOND __MSABI_LONG(0x00000100)
+#define SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH __MSABI_LONG(0x00000200)
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR __MSABI_LONG(0x00000400)
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE __MSABI_LONG(0x00000800)
+#define SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND __MSABI_LONG(0x00001000)
+#define SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE __MSABI_LONG(0x00002000)
+#define SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND __MSABI_LONG(0x00004000)
+#define SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND __MSABI_LONG(0x00008000)
+
+#define SQL_CL_START SQL_QL_START
+#define SQL_CL_END SQL_QL_END
+
+#define SQL_BRC_PROCEDURES 0x0000001
+#define SQL_BRC_EXPLICIT 0x0000002
+#define SQL_BRC_ROLLED_UP 0x0000004
+
+#define SQL_BS_SELECT_EXPLICIT __MSABI_LONG(0x00000001)
+#define SQL_BS_ROW_COUNT_EXPLICIT __MSABI_LONG(0x00000002)
+#define SQL_BS_SELECT_PROC __MSABI_LONG(0x00000004)
+#define SQL_BS_ROW_COUNT_PROC __MSABI_LONG(0x00000008)
+
+#define SQL_PARC_BATCH 1
+#define SQL_PARC_NO_BATCH 2
+
+#define SQL_PAS_BATCH 1
+#define SQL_PAS_NO_BATCH 2
+#define SQL_PAS_NO_SELECT 3
+
+#define SQL_IK_NONE __MSABI_LONG(0x00000000)
+#define SQL_IK_ASC __MSABI_LONG(0x00000001)
+#define SQL_IK_DESC __MSABI_LONG(0x00000002)
+#define SQL_IK_ALL (SQL_IK_ASC | SQL_IK_DESC)
+
+#define SQL_ISV_ASSERTIONS __MSABI_LONG(0x00000001)
+#define SQL_ISV_CHARACTER_SETS __MSABI_LONG(0x00000002)
+#define SQL_ISV_CHECK_CONSTRAINTS __MSABI_LONG(0x00000004)
+#define SQL_ISV_COLLATIONS __MSABI_LONG(0x00000008)
+#define SQL_ISV_COLUMN_DOMAIN_USAGE __MSABI_LONG(0x00000010)
+#define SQL_ISV_COLUMN_PRIVILEGES __MSABI_LONG(0x00000020)
+#define SQL_ISV_COLUMNS __MSABI_LONG(0x00000040)
+#define SQL_ISV_CONSTRAINT_COLUMN_USAGE __MSABI_LONG(0x00000080)
+#define SQL_ISV_CONSTRAINT_TABLE_USAGE __MSABI_LONG(0x00000100)
+#define SQL_ISV_DOMAIN_CONSTRAINTS __MSABI_LONG(0x00000200)
+#define SQL_ISV_DOMAINS __MSABI_LONG(0x00000400)
+#define SQL_ISV_KEY_COLUMN_USAGE __MSABI_LONG(0x00000800)
+#define SQL_ISV_REFERENTIAL_CONSTRAINTS __MSABI_LONG(0x00001000)
+#define SQL_ISV_SCHEMATA __MSABI_LONG(0x00002000)
+#define SQL_ISV_SQL_LANGUAGES __MSABI_LONG(0x00004000)
+#define SQL_ISV_TABLE_CONSTRAINTS __MSABI_LONG(0x00008000)
+#define SQL_ISV_TABLE_PRIVILEGES __MSABI_LONG(0x00010000)
+#define SQL_ISV_TABLES __MSABI_LONG(0x00020000)
+#define SQL_ISV_TRANSLATIONS __MSABI_LONG(0x00040000)
+#define SQL_ISV_USAGE_PRIVILEGES __MSABI_LONG(0x00080000)
+#define SQL_ISV_VIEW_COLUMN_USAGE __MSABI_LONG(0x00100000)
+#define SQL_ISV_VIEW_TABLE_USAGE __MSABI_LONG(0x00200000)
+#define SQL_ISV_VIEWS __MSABI_LONG(0x00400000)
+
+#define SQL_AM_NONE 0
+#define SQL_AM_CONNECTION 1
+#define SQL_AM_STATEMENT 2
+
+#define SQL_AD_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00000001)
+#define SQL_AD_ADD_DOMAIN_CONSTRAINT __MSABI_LONG(0x00000002)
+#define SQL_AD_DROP_DOMAIN_CONSTRAINT __MSABI_LONG(0x00000004)
+#define SQL_AD_ADD_DOMAIN_DEFAULT __MSABI_LONG(0x00000008)
+#define SQL_AD_DROP_DOMAIN_DEFAULT __MSABI_LONG(0x00000010)
+#define SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000020)
+#define SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000040)
+#define SQL_AD_ADD_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000080)
+#define SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000100)
+
+#define SQL_CS_CREATE_SCHEMA __MSABI_LONG(0x00000001)
+#define SQL_CS_AUTHORIZATION __MSABI_LONG(0x00000002)
+#define SQL_CS_DEFAULT_CHARACTER_SET __MSABI_LONG(0x00000004)
+
+#define SQL_CTR_CREATE_TRANSLATION __MSABI_LONG(0x00000001)
+
+#define SQL_CA_CREATE_ASSERTION __MSABI_LONG(0x00000001)
+#define SQL_CA_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000010)
+#define SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000020)
+#define SQL_CA_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000040)
+#define SQL_CA_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000080)
+
+#define SQL_CCS_CREATE_CHARACTER_SET __MSABI_LONG(0x00000001)
+#define SQL_CCS_COLLATE_CLAUSE __MSABI_LONG(0x00000002)
+#define SQL_CCS_LIMITED_COLLATION __MSABI_LONG(0x00000004)
+
+#define SQL_CCOL_CREATE_COLLATION __MSABI_LONG(0x00000001)
+
+#define SQL_CDO_CREATE_DOMAIN __MSABI_LONG(0x00000001)
+#define SQL_CDO_DEFAULT __MSABI_LONG(0x00000002)
+#define SQL_CDO_CONSTRAINT __MSABI_LONG(0x00000004)
+#define SQL_CDO_COLLATION __MSABI_LONG(0x00000008)
+#define SQL_CDO_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00000010)
+#define SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000020)
+#define SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000040)
+#define SQL_CDO_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000080)
+#define SQL_CDO_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000100)
+
+#define SQL_CT_CREATE_TABLE __MSABI_LONG(0x00000001)
+#define SQL_CT_COMMIT_PRESERVE __MSABI_LONG(0x00000002)
+#define SQL_CT_COMMIT_DELETE __MSABI_LONG(0x00000004)
+#define SQL_CT_GLOBAL_TEMPORARY __MSABI_LONG(0x00000008)
+#define SQL_CT_LOCAL_TEMPORARY __MSABI_LONG(0x00000010)
+#define SQL_CT_CONSTRAINT_INITIALLY_DEFERRED __MSABI_LONG(0x00000020)
+#define SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE __MSABI_LONG(0x00000040)
+#define SQL_CT_CONSTRAINT_DEFERRABLE __MSABI_LONG(0x00000080)
+#define SQL_CT_CONSTRAINT_NON_DEFERRABLE __MSABI_LONG(0x00000100)
+#define SQL_CT_COLUMN_CONSTRAINT __MSABI_LONG(0x00000200)
+#define SQL_CT_COLUMN_DEFAULT __MSABI_LONG(0x00000400)
+#define SQL_CT_COLUMN_COLLATION __MSABI_LONG(0x00000800)
+#define SQL_CT_TABLE_CONSTRAINT __MSABI_LONG(0x00001000)
+#define SQL_CT_CONSTRAINT_NAME_DEFINITION __MSABI_LONG(0x00002000)
+
+#define SQL_DI_CREATE_INDEX __MSABI_LONG(0x00000001)
+#define SQL_DI_DROP_INDEX __MSABI_LONG(0x00000002)
+
+#define SQL_DC_DROP_COLLATION __MSABI_LONG(0x00000001)
+
+#define SQL_DD_DROP_DOMAIN __MSABI_LONG(0x00000001)
+#define SQL_DD_RESTRICT __MSABI_LONG(0x00000002)
+#define SQL_DD_CASCADE __MSABI_LONG(0x00000004)
+
+#define SQL_DS_DROP_SCHEMA __MSABI_LONG(0x00000001)
+#define SQL_DS_RESTRICT __MSABI_LONG(0x00000002)
+#define SQL_DS_CASCADE __MSABI_LONG(0x00000004)
+
+#define SQL_DCS_DROP_CHARACTER_SET __MSABI_LONG(0x00000001)
+
+#define SQL_DA_DROP_ASSERTION __MSABI_LONG(0x00000001)
+
+#define SQL_DT_DROP_TABLE __MSABI_LONG(0x00000001)
+#define SQL_DT_RESTRICT __MSABI_LONG(0x00000002)
+#define SQL_DT_CASCADE __MSABI_LONG(0x00000004)
+
+#define SQL_DTR_DROP_TRANSLATION __MSABI_LONG(0x00000001)
+
+#define SQL_DV_DROP_VIEW __MSABI_LONG(0x00000001)
+#define SQL_DV_RESTRICT __MSABI_LONG(0x00000002)
+#define SQL_DV_CASCADE __MSABI_LONG(0x00000004)
+
+#define SQL_IS_INSERT_LITERALS __MSABI_LONG(0x00000001)
+#define SQL_IS_INSERT_SEARCHED __MSABI_LONG(0x00000002)
+#define SQL_IS_SELECT_INTO __MSABI_LONG(0x00000004)
+
+#define SQL_OIC_CORE __MSABI_LONG(1U)
+#define SQL_OIC_LEVEL1 __MSABI_LONG(2U)
+#define SQL_OIC_LEVEL2 __MSABI_LONG(3U)
+
+#define SQL_SFKD_CASCADE __MSABI_LONG(0x00000001)
+#define SQL_SFKD_NO_ACTION __MSABI_LONG(0x00000002)
+#define SQL_SFKD_SET_DEFAULT __MSABI_LONG(0x00000004)
+#define SQL_SFKD_SET_NULL __MSABI_LONG(0x00000008)
+
+#define SQL_SFKU_CASCADE __MSABI_LONG(0x00000001)
+#define SQL_SFKU_NO_ACTION __MSABI_LONG(0x00000002)
+#define SQL_SFKU_SET_DEFAULT __MSABI_LONG(0x00000004)
+#define SQL_SFKU_SET_NULL __MSABI_LONG(0x00000008)
+
+#define SQL_SG_USAGE_ON_DOMAIN __MSABI_LONG(0x00000001)
+#define SQL_SG_USAGE_ON_CHARACTER_SET __MSABI_LONG(0x00000002)
+#define SQL_SG_USAGE_ON_COLLATION __MSABI_LONG(0x00000004)
+#define SQL_SG_USAGE_ON_TRANSLATION __MSABI_LONG(0x00000008)
+#define SQL_SG_WITH_GRANT_OPTION __MSABI_LONG(0x00000010)
+#define SQL_SG_DELETE_TABLE __MSABI_LONG(0x00000020)
+#define SQL_SG_INSERT_TABLE __MSABI_LONG(0x00000040)
+#define SQL_SG_INSERT_COLUMN __MSABI_LONG(0x00000080)
+#define SQL_SG_REFERENCES_TABLE __MSABI_LONG(0x00000100)
+#define SQL_SG_REFERENCES_COLUMN __MSABI_LONG(0x00000200)
+#define SQL_SG_SELECT_TABLE __MSABI_LONG(0x00000400)
+#define SQL_SG_UPDATE_TABLE __MSABI_LONG(0x00000800)
+#define SQL_SG_UPDATE_COLUMN __MSABI_LONG(0x00001000)
+
+#define SQL_SP_EXISTS __MSABI_LONG(0x00000001)
+#define SQL_SP_ISNOTNULL __MSABI_LONG(0x00000002)
+#define SQL_SP_ISNULL __MSABI_LONG(0x00000004)
+#define SQL_SP_MATCH_FULL __MSABI_LONG(0x00000008)
+#define SQL_SP_MATCH_PARTIAL __MSABI_LONG(0x00000010)
+#define SQL_SP_MATCH_UNIQUE_FULL __MSABI_LONG(0x00000020)
+#define SQL_SP_MATCH_UNIQUE_PARTIAL __MSABI_LONG(0x00000040)
+#define SQL_SP_OVERLAPS __MSABI_LONG(0x00000080)
+#define SQL_SP_UNIQUE __MSABI_LONG(0x00000100)
+#define SQL_SP_LIKE __MSABI_LONG(0x00000200)
+#define SQL_SP_IN __MSABI_LONG(0x00000400)
+#define SQL_SP_BETWEEN __MSABI_LONG(0x00000800)
+#define SQL_SP_COMPARISON __MSABI_LONG(0x00001000)
+#define SQL_SP_QUANTIFIED_COMPARISON __MSABI_LONG(0x00002000)
+
+#define SQL_SRJO_CORRESPONDING_CLAUSE __MSABI_LONG(0x00000001)
+#define SQL_SRJO_CROSS_JOIN __MSABI_LONG(0x00000002)
+#define SQL_SRJO_EXCEPT_JOIN __MSABI_LONG(0x00000004)
+#define SQL_SRJO_FULL_OUTER_JOIN __MSABI_LONG(0x00000008)
+#define SQL_SRJO_INNER_JOIN __MSABI_LONG(0x00000010)
+#define SQL_SRJO_INTERSECT_JOIN __MSABI_LONG(0x00000020)
+#define SQL_SRJO_LEFT_OUTER_JOIN __MSABI_LONG(0x00000040)
+#define SQL_SRJO_NATURAL_JOIN __MSABI_LONG(0x00000080)
+#define SQL_SRJO_RIGHT_OUTER_JOIN __MSABI_LONG(0x00000100)
+#define SQL_SRJO_UNION_JOIN __MSABI_LONG(0x00000200)
+
+#define SQL_SR_USAGE_ON_DOMAIN __MSABI_LONG(0x00000001)
+#define SQL_SR_USAGE_ON_CHARACTER_SET __MSABI_LONG(0x00000002)
+#define SQL_SR_USAGE_ON_COLLATION __MSABI_LONG(0x00000004)
+#define SQL_SR_USAGE_ON_TRANSLATION __MSABI_LONG(0x00000008)
+#define SQL_SR_GRANT_OPTION_FOR __MSABI_LONG(0x00000010)
+#define SQL_SR_CASCADE __MSABI_LONG(0x00000020)
+#define SQL_SR_RESTRICT __MSABI_LONG(0x00000040)
+#define SQL_SR_DELETE_TABLE __MSABI_LONG(0x00000080)
+#define SQL_SR_INSERT_TABLE __MSABI_LONG(0x00000100)
+#define SQL_SR_INSERT_COLUMN __MSABI_LONG(0x00000200)
+#define SQL_SR_REFERENCES_TABLE __MSABI_LONG(0x00000400)
+#define SQL_SR_REFERENCES_COLUMN __MSABI_LONG(0x00000800)
+#define SQL_SR_SELECT_TABLE __MSABI_LONG(0x00001000)
+#define SQL_SR_UPDATE_TABLE __MSABI_LONG(0x00002000)
+#define SQL_SR_UPDATE_COLUMN __MSABI_LONG(0x00004000)
+
+#define SQL_SRVC_VALUE_EXPRESSION __MSABI_LONG(0x00000001)
+#define SQL_SRVC_NULL __MSABI_LONG(0x00000002)
+#define SQL_SRVC_DEFAULT __MSABI_LONG(0x00000004)
+#define SQL_SRVC_ROW_SUBQUERY __MSABI_LONG(0x00000008)
+
+#define SQL_SVE_CASE __MSABI_LONG(0x00000001)
+#define SQL_SVE_CAST __MSABI_LONG(0x00000002)
+#define SQL_SVE_COALESCE __MSABI_LONG(0x00000004)
+#define SQL_SVE_NULLIF __MSABI_LONG(0x00000008)
+
+#define SQL_SCC_XOPEN_CLI_VERSION1 __MSABI_LONG(0x00000001)
+#define SQL_SCC_ISO92_CLI __MSABI_LONG(0x00000002)
+
+#define SQL_US_UNION SQL_U_UNION
+#define SQL_US_UNION_ALL SQL_U_UNION_ALL
+
+#endif
+
+#define SQL_DTC_ENLIST_EXPENSIVE __MSABI_LONG(0x00000001)
+#define SQL_DTC_UNENLIST_EXPENSIVE __MSABI_LONG(0x00000002)
+
+#if (ODBCVER >= 0x0300)
+#define SQL_FETCH_FIRST_USER 31
+#define SQL_FETCH_FIRST_SYSTEM 32
+#endif
+
+#define SQL_ENTIRE_ROWSET 0
+
+#define SQL_POSITION 0
+#define SQL_REFRESH 1
+#define SQL_UPDATE 2
+#define SQL_DELETE 3
+
+#define SQL_ADD 4
+#define SQL_SETPOS_MAX_OPTION_VALUE SQL_ADD
+#if (ODBCVER >= 0x0300)
+#define SQL_UPDATE_BY_BOOKMARK 5
+#define SQL_DELETE_BY_BOOKMARK 6
+#define SQL_FETCH_BY_BOOKMARK 7
+
+#endif
+
+#define SQL_LOCK_NO_CHANGE 0
+#define SQL_LOCK_EXCLUSIVE 1
+#define SQL_LOCK_UNLOCK 2
+
+#define SQL_SETPOS_MAX_LOCK_VALUE SQL_LOCK_UNLOCK
+
+#define SQL_POSITION_TO(hstmt,irow) SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE)
+#define SQL_LOCK_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_POSITION,fLock)
+#define SQL_REFRESH_RECORD(hstmt,irow,fLock) SQLSetPos(hstmt,irow,SQL_REFRESH,fLock)
+#define SQL_UPDATE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE)
+#define SQL_DELETE_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE)
+#define SQL_ADD_RECORD(hstmt,irow) SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE)
+
+#define SQL_BEST_ROWID 1
+#define SQL_ROWVER 2
+
+#define SQL_PC_NOT_PSEUDO 1
+
+#define SQL_QUICK 0
+#define SQL_ENSURE 1
+
+#define SQL_TABLE_STAT 0
+
+#if (ODBCVER >= 0x0300)
+#define SQL_ALL_CATALOGS "%"
+#define SQL_ALL_SCHEMAS "%"
+#define SQL_ALL_TABLE_TYPES "%"
+#endif /* ODBCVER >= 0x0300 */
+
+#define SQL_DRIVER_NOPROMPT 0
+#define SQL_DRIVER_COMPLETE 1
+#define SQL_DRIVER_PROMPT 2
+#define SQL_DRIVER_COMPLETE_REQUIRED 3
+
+SQLRETURN WINAPI SQLDriverConnect(
+ SQLHDBC hdbc,
+ SQLHWND hwnd,
+ SQLCHAR *szConnStrIn,
+ SQLSMALLINT cbConnStrIn,
+ SQLCHAR *szConnStrOut,
+ SQLSMALLINT cbConnStrOutMax,
+ SQLSMALLINT *pcbConnStrOut,
+ SQLUSMALLINT fDriverCompletion);
+
+#define SQL_FETCH_BOOKMARK 8
+
+#define SQL_ROW_SUCCESS 0
+#define SQL_ROW_DELETED 1
+#define SQL_ROW_UPDATED 2
+#define SQL_ROW_NOROW 3
+#define SQL_ROW_ADDED 4
+#define SQL_ROW_ERROR 5
+#if (ODBCVER >= 0x0300)
+#define SQL_ROW_SUCCESS_WITH_INFO 6
+#define SQL_ROW_PROCEED 0
+#define SQL_ROW_IGNORE 1
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_PARAM_SUCCESS 0
+#define SQL_PARAM_SUCCESS_WITH_INFO 6
+#define SQL_PARAM_ERROR 5
+#define SQL_PARAM_UNUSED 7
+#define SQL_PARAM_DIAG_UNAVAILABLE 1
+
+#define SQL_PARAM_PROCEED 0
+#define SQL_PARAM_IGNORE 1
+#endif
+
+#define SQL_CASCADE 0
+#define SQL_RESTRICT 1
+#define SQL_SET_NULL 2
+#if (ODBCVER >= 0x0250)
+#define SQL_NO_ACTION 3
+#define SQL_SET_DEFAULT 4
+#endif
+
+#if (ODBCVER >= 0x0300)
+
+#define SQL_INITIALLY_DEFERRED 5
+#define SQL_INITIALLY_IMMEDIATE 6
+#define SQL_NOT_DEFERRABLE 7
+
+#endif
+
+#define SQL_PARAM_TYPE_UNKNOWN 0
+#define SQL_PARAM_INPUT 1
+#define SQL_PARAM_INPUT_OUTPUT 2
+#define SQL_RESULT_COL 3
+#define SQL_PARAM_OUTPUT 4
+#define SQL_RETURN_VALUE 5
+
+#define SQL_PT_UNKNOWN 0
+#define SQL_PT_PROCEDURE 1
+#define SQL_PT_FUNCTION 2
+
+#define SQL_ODBC_KEYWORDS "ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"
+
+SQLRETURN WINAPI SQLBrowseConnect(
+ SQLHDBC hdbc,
+ SQLCHAR *szConnStrIn,
+ SQLSMALLINT cbConnStrIn,
+ SQLCHAR *szConnStrOut,
+ SQLSMALLINT cbConnStrOutMax,
+ SQLSMALLINT *pcbConnStrOut);
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLBulkOperations(
+ SQLHSTMT StatementHandle,
+ SQLSMALLINT Operation);
+#endif
+
+SQLRETURN WINAPI SQLColAttributes(
+ SQLHSTMT hstmt,
+ SQLUSMALLINT icol,
+ SQLUSMALLINT fDescType,
+ SQLPOINTER rgbDesc,
+ SQLSMALLINT cbDescMax,
+ SQLSMALLINT *pcbDesc,
+ SQLINTEGER *pfDesc);
+
+SQLRETURN WINAPI SQLColumnPrivileges(
+ SQLHSTMT hstmt,
+ SQLCHAR *szCatalogName,
+ SQLSMALLINT cbCatalogName,
+ SQLCHAR *szSchemaName,
+ SQLSMALLINT cbSchemaName,
+ SQLCHAR *szTableName,
+ SQLSMALLINT cbTableName,
+ SQLCHAR *szColumnName,
+ SQLSMALLINT cbColumnName);
+
+SQLRETURN WINAPI SQLDescribeParam(
+ SQLHSTMT hstmt,
+ SQLUSMALLINT ipar,
+ SQLSMALLINT *pfSqlType,
+ SQLUINTEGER *pcbParamDef,
+ SQLSMALLINT *pibScale,
+ SQLSMALLINT *pfNullable);
+
+SQLRETURN WINAPI SQLExtendedFetch(
+ SQLHSTMT hstmt,
+ SQLUSMALLINT fFetchType,
+ SQLINTEGER irow,
+ SQLUINTEGER *pcrow,
+ SQLUSMALLINT *rgfRowStatus);
+
+SQLRETURN WINAPI SQLForeignKeys(
+ SQLHSTMT hstmt,
+ SQLCHAR *szPkCatalogName,
+ SQLSMALLINT cbPkCatalogName,
+ SQLCHAR *szPkSchemaName,
+ SQLSMALLINT cbPkSchemaName,
+ SQLCHAR *szPkTableName,
+ SQLSMALLINT cbPkTableName,
+ SQLCHAR *szFkCatalogName,
+ SQLSMALLINT cbFkCatalogName,
+ SQLCHAR *szFkSchemaName,
+ SQLSMALLINT cbFkSchemaName,
+ SQLCHAR *szFkTableName,
+ SQLSMALLINT cbFkTableName);
+
+SQLRETURN WINAPI SQLMoreResults(
+ SQLHSTMT hstmt);
+
+SQLRETURN WINAPI SQLNativeSql(
+ SQLHDBC hdbc,
+ SQLCHAR *szSqlStrIn,
+ SQLINTEGER cbSqlStrIn,
+ SQLCHAR *szSqlStr,
+ SQLINTEGER cbSqlStrMax,
+ SQLINTEGER *pcbSqlStr);
+
+SQLRETURN WINAPI SQLNumParams(
+ SQLHSTMT hstmt,
+ SQLSMALLINT *pcpar);
+
+SQLRETURN WINAPI SQLParamOptions(
+ SQLHSTMT hstmt,
+ SQLUINTEGER crow,
+ SQLUINTEGER *pirow);
+
+SQLRETURN WINAPI SQLPrimaryKeys(
+ SQLHSTMT hstmt,
+ SQLCHAR *szCatalogName,
+ SQLSMALLINT cbCatalogName,
+ SQLCHAR *szSchemaName,
+ SQLSMALLINT cbSchemaName,
+ SQLCHAR *szTableName,
+ SQLSMALLINT cbTableName);
+
+SQLRETURN WINAPI SQLProcedureColumns(
+ SQLHSTMT hstmt,
+ SQLCHAR *szCatalogName,
+ SQLSMALLINT cbCatalogName,
+ SQLCHAR *szSchemaName,
+ SQLSMALLINT cbSchemaName,
+ SQLCHAR *szProcName,
+ SQLSMALLINT cbProcName,
+ SQLCHAR *szColumnName,
+ SQLSMALLINT cbColumnName);
+
+SQLRETURN WINAPI SQLProcedures(
+ SQLHSTMT hstmt,
+ SQLCHAR *szCatalogName,
+ SQLSMALLINT cbCatalogName,
+ SQLCHAR *szSchemaName,
+ SQLSMALLINT cbSchemaName,
+ SQLCHAR *szProcName,
+ SQLSMALLINT cbProcName);
+
+SQLRETURN WINAPI SQLSetPos(
+ SQLHSTMT hstmt,
+ SQLUSMALLINT irow,
+ SQLUSMALLINT fOption,
+ SQLUSMALLINT fLock);
+
+SQLRETURN WINAPI SQLTablePrivileges(
+ SQLHSTMT hstmt,
+ SQLCHAR *szCatalogName,
+ SQLSMALLINT cbCatalogName,
+ SQLCHAR *szSchemaName,
+ SQLSMALLINT cbSchemaName,
+ SQLCHAR *szTableName,
+ SQLSMALLINT cbTableName);
+
+SQLRETURN WINAPI SQLDrivers(
+ SQLHENV henv,
+ SQLUSMALLINT fDirection,
+ SQLCHAR *szDriverDesc,
+ SQLSMALLINT cbDriverDescMax,
+ SQLSMALLINT *pcbDriverDesc,
+ SQLCHAR *szDriverAttributes,
+ SQLSMALLINT cbDrvrAttrMax,
+ SQLSMALLINT *pcbDrvrAttr);
+
+SQLRETURN WINAPI SQLBindParameter(
+ SQLHSTMT hstmt,
+ SQLUSMALLINT ipar,
+ SQLSMALLINT fParamType,
+ SQLSMALLINT fCType,
+ SQLSMALLINT fSqlType,
+ SQLUINTEGER cbColDef,
+ SQLSMALLINT ibScale,
+ SQLPOINTER rgbValue,
+ SQLINTEGER cbValueMax,
+ SQLINTEGER *pcbValue);
+
+#ifdef ODBC_STD
+#define SQLAllocHandle SQLAllocHandleStd
+#define SQLAllocEnv(phenv) SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, phenv)
+
+#define SQL_YEAR SQL_CODE_YEAR
+#define SQL_MONTH SQL_CODE_MONTH
+#define SQL_DAY SQL_CODE_DAY
+#define SQL_HOUR SQL_CODE_HOUR
+#define SQL_MINUTE SQL_CODE_MINUTE
+#define SQL_SECOND SQL_CODE_SECOND
+#define SQL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH
+#define SQL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR
+#define SQL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE
+#define SQL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND
+#define SQL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE
+#define SQL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND
+#define SQL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND
+#endif
+
+#if (ODBCVER >= 0x0300)
+SQLRETURN WINAPI SQLAllocHandleStd(
+ SQLSMALLINT fHandleType,
+ SQLHANDLE hInput,
+ SQLHANDLE *phOutput);
+#endif
+
+#define SQL_DATABASE_NAME 16
+#define SQL_FD_FETCH_PREV SQL_FD_FETCH_PRIOR
+#define SQL_FETCH_PREV SQL_FETCH_PRIOR
+#define SQL_CONCUR_TIMESTAMP SQL_CONCUR_ROWVER
+#define SQL_SCCO_OPT_TIMESTAMP SQL_SCCO_OPT_ROWVER
+#define SQL_CC_DELETE SQL_CB_DELETE
+#define SQL_CR_DELETE SQL_CB_DELETE
+#define SQL_CC_CLOSE SQL_CB_CLOSE
+#define SQL_CR_CLOSE SQL_CB_CLOSE
+#define SQL_CC_PRESERVE SQL_CB_PRESERVE
+#define SQL_CR_PRESERVE SQL_CB_PRESERVE
+#define SQL_SCROLL_FORWARD_ONLY __MSABI_LONG(0)
+#define SQL_SCROLL_KEYSET_DRIVEN (__MSABI_LONG(-1))
+#define SQL_SCROLL_DYNAMIC (__MSABI_LONG(-2))
+#define SQL_SCROLL_STATIC (__MSABI_LONG(-3))
+
+SQLRETURN WINAPI SQLSetScrollOptions(
+ SQLHSTMT hstmt,
+ SQLUSMALLINT fConcurrency,
+ SQLINTEGER crowKeyset,
+ SQLUSMALLINT crowRowset);
+
+#define TRACE_VERSION 1000
+
+RETCODE TraceOpenLogFile(LPWSTR,LPWSTR,DWORD);
+RETCODE TraceCloseLogFile(void);
+VOID TraceReturn(RETCODE,RETCODE);
+DWORD TraceVersion(void);
+
+/*#define TRACE_ON __MSABI_LONG(0x00000001)*/
+#define TRACE_VS_EVENT_ON __MSABI_LONG(0x00000002)
+
+RETCODE TraceVSControl(DWORD);
+
+#define ODBC_VS_FLAG_UNICODE_ARG __MSABI_LONG(0x00000001)
+#define ODBC_VS_FLAG_UNICODE_COR __MSABI_LONG(0x00000002)
+#define ODBC_VS_FLAG_RETCODE __MSABI_LONG(0x00000004)
+#define ODBC_VS_FLAG_STOP __MSABI_LONG(0x00000008)
+
+typedef struct tagODBC_VS_ARGS {
+ const GUID *pguidEvent;
+ DWORD dwFlags;
+ union {
+ WCHAR *wszArg;
+ CHAR *szArg;
+ } DUMMYUNIONNAME1;
+ union {
+ WCHAR *wszCorrelation;
+ CHAR *szCorrelation;
+ } DUMMYUNIONNAME2;
+ RETCODE RetCode;
+} ODBC_VS_ARGS, *PODBC_VS_ARGS;
+
+VOID FireVSDebugEvent(PODBC_VS_ARGS);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h
new file mode 100644
index 00000000..5933cfa4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sqltypes.h
@@ -0,0 +1,258 @@
+/*
+ * Copyright (C) 1999 Xiang Li
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __SQLTYPES_H
+#define __SQLTYPES_H
+
+#ifndef ODBCVER
+#define ODBCVER 0x0351
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned char SQLCHAR;
+#ifdef WINE_UNICODE_NATIVE
+typedef wchar_t SQLWCHAR;
+#else
+typedef unsigned short SQLWCHAR;
+#endif
+#ifndef UNICODE
+typedef SQLCHAR SQLTCHAR;
+#else
+typedef SQLWCHAR SQLTCHAR;
+#endif
+
+#if (ODBCVER >= 0x0300)
+typedef unsigned char SQLDATE;
+typedef unsigned char SQLDECIMAL;
+typedef double SQLDOUBLE;
+typedef double SQLFLOAT;
+#endif
+
+typedef int SQLINTEGER;
+
+#if (ODBCVER >= 0x0300)
+typedef unsigned char SQLNUMERIC;
+#endif
+
+typedef void * SQLPOINTER;
+
+#if (ODBCVER >= 0x0300)
+typedef float SQLREAL;
+#endif
+
+typedef signed short int SQLSMALLINT;
+typedef unsigned short SQLUSMALLINT;
+
+#if (ODBCVER >= 0x0300)
+typedef unsigned char SQLTIME;
+typedef unsigned char SQLTIMESTAMP;
+typedef unsigned char SQLVARCHAR;
+#endif
+
+typedef SQLSMALLINT SQLRETURN;
+
+#if (ODBCVER >= 0x0300)
+typedef void *SQLHANDLE;
+typedef SQLHANDLE SQLHENV;
+typedef SQLHANDLE SQLHDBC;
+typedef SQLHANDLE SQLHSTMT;
+typedef SQLHANDLE SQLHDESC;
+#else
+typedef void *SQLHENV;
+typedef void *SQLHDBC;
+typedef void *SQLHSTMT;
+#endif
+
+typedef signed char SCHAR;
+typedef SCHAR SQLSCHAR;
+typedef int SDWORD;
+typedef signed short int SWORD;
+typedef unsigned int UDWORD;
+typedef unsigned short int UWORD;
+typedef UDWORD SQLUINTEGER;
+typedef signed long SLONG;
+typedef signed short SSHORT;
+typedef double SDOUBLE;
+typedef double LDOUBLE;
+typedef float SFLOAT;
+typedef void* PTR;
+typedef signed short RETCODE;
+typedef void* SQLHWND;
+
+#ifdef _WIN64
+typedef INT64 SQLLEN;
+typedef UINT64 SQLULEN;
+typedef UINT64 SQLSETPOSIROW;
+#else
+#define SQLLEN SQLINTEGER
+#define SQLULEN SQLUINTEGER
+#define SQLSETPOSIROW SQLUSMALLINT
+#endif
+
+typedef SQLHANDLE HENV;
+typedef SQLHANDLE HDBC;
+typedef SQLHANDLE HSTMT;
+
+#ifndef __SQLDATE
+#define __SQLDATE
+typedef struct tagDATE_STRUCT
+{
+ SQLSMALLINT year;
+ SQLUSMALLINT month;
+ SQLUSMALLINT day;
+} DATE_STRUCT;
+
+#if (ODBCVER >= 0x0300)
+typedef DATE_STRUCT SQL_DATE_STRUCT;
+#endif
+
+typedef struct tagTIME_STRUCT
+{
+ SQLUSMALLINT hour;
+ SQLUSMALLINT minute;
+ SQLUSMALLINT second;
+} TIME_STRUCT;
+
+#if (ODBCVER >= 0x0300)
+typedef TIME_STRUCT SQL_TIME_STRUCT;
+#endif
+
+typedef struct tagTIMESTAMP_STRUCT
+{
+ SQLSMALLINT year;
+ SQLUSMALLINT month;
+ SQLUSMALLINT day;
+ SQLUSMALLINT hour;
+ SQLUSMALLINT minute;
+ SQLUSMALLINT second;
+ SQLUINTEGER fraction;
+} TIMESTAMP_STRUCT;
+
+#if (ODBCVER >= 0x0300)
+typedef TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT;
+#endif
+
+
+#if (ODBCVER >= 0x0300)
+typedef enum
+{
+ SQL_IS_YEAR = 1,
+ SQL_IS_MONTH = 2,
+ SQL_IS_DAY = 3,
+ SQL_IS_HOUR = 4,
+ SQL_IS_MINUTE = 5,
+ SQL_IS_SECOND = 6,
+ SQL_IS_YEAR_TO_MONTH = 7,
+ SQL_IS_DAY_TO_HOUR = 8,
+ SQL_IS_DAY_TO_MINUTE = 9,
+ SQL_IS_DAY_TO_SECOND = 10,
+ SQL_IS_HOUR_TO_MINUTE = 11,
+ SQL_IS_HOUR_TO_SECOND = 12,
+ SQL_IS_MINUTE_TO_SECOND = 13
+} SQLINTERVAL;
+
+#endif
+
+#if (ODBCVER >= 0x0300)
+typedef struct tagSQL_YEAR_MONTH
+{
+ SQLUINTEGER year;
+ SQLUINTEGER month;
+} SQL_YEAR_MONTH_STRUCT;
+
+typedef struct tagSQL_DAY_SECOND
+{
+ SQLUINTEGER day;
+ SQLUINTEGER hour;
+ SQLUINTEGER minute;
+ SQLUINTEGER second;
+ SQLUINTEGER fraction;
+} SQL_DAY_SECOND_STRUCT;
+
+typedef struct tagSQL_INTERVAL_STRUCT
+{
+ SQLINTERVAL interval_type;
+ SQLSMALLINT interval_sign;
+ union {
+ SQL_YEAR_MONTH_STRUCT year_month;
+ SQL_DAY_SECOND_STRUCT day_second;
+ } intval;
+
+} SQL_INTERVAL_STRUCT;
+
+#endif
+
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define ODBCINT64 __int64
+#define UODBCINT64 unsigned __int64
+#ifdef ODBCINT64
+typedef ODBCINT64 SQLBIGINT;
+typedef unsigned ODBCINT64 SQLUBIGINT;
+#endif
+#endif
+
+#if (ODBCVER >= 0x0300)
+#define SQL_MAX_NUMERIC_LEN 16
+typedef struct tagSQL_NUMERIC_STRUCT
+{
+ SQLCHAR precision;
+ SQLSCHAR scale;
+ SQLCHAR sign; /* 1=pos 0=neg */
+ SQLCHAR val[SQL_MAX_NUMERIC_LEN];
+} SQL_NUMERIC_STRUCT;
+#endif
+
+#if (ODBCVER >= 0x0350)
+#ifdef GUID_DEFINED
+typedef GUID SQLGUID;
+#else
+typedef struct tagSQLGUID
+{
+ DWORD Data1;
+ WORD Data2;
+ WORD Data3;
+ BYTE Data4[ 8 ];
+} SQLGUID;
+#endif
+#endif
+
+
+typedef SQLULEN BOOKMARK;
+
+#define SQL_WCHAR (-8)
+#define SQL_C_WCHAR SQL_WCHAR
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl
new file mode 100644
index 00000000..f616f97c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/srcrst.idl
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2013 Alistair Leslie-Hughes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ object,
+ uuid(0c733a1e-2a1c-11ce-ade5-00aa0044773d),
+ pointer_default(unique)
+]
+interface ISourcesRowset : IUnknown
+{
+ typedef DWORD DBSOURCETYPE;
+
+ enum DBSOURCETYPEENUM
+ {
+ DBSOURCETYPE_DATASOURCE = 1,
+ DBSOURCETYPE_ENUMERATOR = 2,
+ };
+
+ enum DBSOURCETYPEENUM20
+ {
+ DBSOURCETYPE_DATASOURCE_TDP = 1,
+ DBSOURCETYPE_DATASOURCE_MDP = 3,
+ };
+
+ enum DBSOURCETYPEENUM25
+ {
+ DBSOURCETYPE_BINDER = 4,
+ };
+
+ [local]
+ HRESULT GetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets,
+ [in, out] DBPROPSET rgProperties[], [out] IUnknown **ppSourcesRowset);
+
+ [call_as(GetSourcesRowset)]
+ HRESULT RemoteGetSourcesRowset([in] IUnknown * pUnkOuter, [in] REFIID riid, [in] ULONG cPropertySets,
+ [in] DBPROPSET * rgProperties, [out] IUnknown **ppSourcesRowset, [in] ULONG cTotalProps,
+ [out] DBPROPSTATUS *rgPropStatus, [out] IErrorInfo **ppErrorInfoRem);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h
new file mode 100644
index 00000000..bf055e4f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/srrestoreptapi.h
@@ -0,0 +1,67 @@
+/*
+ * System Restore definitions
+ *
+ * Copyright 2008 Paul Vriens
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SRRESTOREPTAPI_H
+#define __WINE_SRRESTOREPTAPI_H
+
+/* Event types */
+#define BEGIN_NESTED_SYSTEM_CHANGE 102
+#define END_NESTED_SYSTEM_CHANGE 103
+
+/* Restore point types */
+#define APPLICATION_INSTALL 0
+
+#define MAX_DESC 64
+
+#pragma pack(1)
+
+typedef struct _RESTOREPTINFOA {
+ DWORD dwEventType;
+ DWORD dwRestorePtType;
+ INT64 llSequenceNumber;
+ CHAR szDescription[MAX_DESC];
+} RESTOREPOINTINFOA, *PRESTOREPOINTINFOA;
+
+typedef struct _SMGRSTATUS {
+ DWORD nStatus;
+ INT64 llSequenceNumber;
+} STATEMGRSTATUS, *PSTATEMGRSTATUS;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI SRSetRestorePointA(PRESTOREPOINTINFOA, PSTATEMGRSTATUS);
+DWORD WINAPI SRRemoveRestorePoint(DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(__WINE_SRRESTOREPTAPI_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h
new file mode 100644
index 00000000..5361cbe3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sspi.h
@@ -0,0 +1,842 @@
+/*
+ * Copyright (C) 2004 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SSPI_H__
+#define __WINE_SSPI_H__
+
+/* FIXME: #include <sdkddkver.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SEC_ENTRY __stdcall
+
+typedef WCHAR SEC_WCHAR;
+typedef CHAR SEC_CHAR;
+
+#ifndef __SECSTATUS_DEFINED__
+#define __SECSTATUS_DEFINED__
+typedef LONG SECURITY_STATUS;
+#endif
+
+#ifdef UNICODE
+typedef SEC_WCHAR * SECURITY_PSTR;
+typedef const SEC_WCHAR * SECURITY_PCSTR;
+#else
+typedef SEC_CHAR * SECURITY_PSTR;
+typedef const SEC_CHAR * SECURITY_PCSTR;
+#endif
+
+#ifndef __SECHANDLE_DEFINED__
+#define __SECHANDLE_DEFINED__
+typedef struct _SecHandle
+{
+ ULONG_PTR dwLower;
+ ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+#endif
+
+#define SecInvalidateHandle(x) do { \
+ ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \
+ ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \
+ } while (0)
+
+#define SecIsValidHandle(x) \
+ ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \
+ (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))
+
+typedef SecHandle CredHandle;
+typedef PSecHandle PCredHandle;
+
+#ifndef __WINE_CTXTHANDLE_DEFINED__
+#define __WINE_CTXTHANDLE_DEFINED__
+typedef SecHandle CtxtHandle;
+typedef PSecHandle PCtxtHandle;
+#endif
+
+typedef struct _SECURITY_INTEGER
+{
+ ULONG LowPart;
+ LONG HighPart;
+} SECURITY_INTEGER, *PSECURITY_INTEGER;
+typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
+
+#ifndef __UNICODE_STRING_DEFINED__
+#define __UNICODE_STRING_DEFINED__
+typedef struct _UNICODE_STRING {
+ USHORT Length; /* bytes */
+ USHORT MaximumLength; /* bytes */
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
+
+typedef struct _SecPkgInfoA
+{
+ ULONG fCapabilities;
+ USHORT wVersion;
+ USHORT wRPCID;
+ ULONG cbMaxToken;
+ SEC_CHAR *Name;
+ SEC_CHAR *Comment;
+} SecPkgInfoA, *PSecPkgInfoA;
+
+typedef struct _SecPkgInfoW
+{
+ ULONG fCapabilities;
+ USHORT wVersion;
+ USHORT wRPCID;
+ ULONG cbMaxToken;
+ SEC_WCHAR *Name;
+ SEC_WCHAR *Comment;
+} SecPkgInfoW, *PSecPkgInfoW;
+
+#define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo)
+#define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo)
+
+/* fCapabilities field of SecPkgInfo */
+#define SECPKG_FLAG_INTEGRITY 0x00000001
+#define SECPKG_FLAG_PRIVACY 0x00000002
+#define SECPKG_FLAG_TOKEN_ONLY 0x00000004
+#define SECPKG_FLAG_DATAGRAM 0x00000008
+#define SECPKG_FLAG_CONNECTION 0x00000010
+#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
+#define SECPKG_FLAG_CLIENT_ONLY 0x00000040
+#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
+#define SECPKG_FLAG_IMPERSONATION 0x00000100
+#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
+#define SECPKG_FLAG_STREAM 0x00000400
+#define SECPKG_FLAG_NEGOTIABLE 0x00000800
+#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
+#define SECPKG_FLAG_LOGON 0x00002000
+#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
+#define SECPKG_FLAG_FRAGMENT 0x00008000
+#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
+#define SECPKG_FLAG_DELEGATION 0x00020000
+#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
+#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
+#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
+#define SECPKG_FLAG_NEGOTIABLE2 0x00200000
+#define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000
+#define SECPKG_FLAG_APPCONTAINER_CHECKS 0x00800000
+
+#define SECPKG_ID_NONE 0xffff
+
+typedef struct _SecBuffer
+{
+ ULONG cbBuffer;
+ ULONG BufferType;
+ PVOID pvBuffer;
+} SecBuffer, *PSecBuffer;
+
+/* values for BufferType */
+#define SECBUFFER_EMPTY 0
+#define SECBUFFER_DATA 1
+#define SECBUFFER_TOKEN 2
+#define SECBUFFER_PKG_PARAMS 3
+#define SECBUFFER_MISSING 4
+#define SECBUFFER_EXTRA 5
+#define SECBUFFER_STREAM_TRAILER 6
+#define SECBUFFER_STREAM_HEADER 7
+#define SECBUFFER_NEGOTIATION_INFO 8
+#define SECBUFFER_PADDING 9
+#define SECBUFFER_STREAM 10
+#define SECBUFFER_MECHLIST 11
+#define SECBUFFER_MECHLIST_SIGNATURE 12
+#define SECBUFFER_TARGET 13
+#define SECBUFFER_CHANNEL_BINDINGS 14
+
+#define SECBUFFER_ATTRMASK 0xf0000000
+#define SECBUFFER_READONLY 0x80000000
+#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
+#define SECBUFFER_RESERVED 0x60000000
+
+typedef struct _SecBufferDesc
+{
+ ULONG ulVersion;
+ ULONG cBuffers;
+ PSecBuffer pBuffers;
+} SecBufferDesc, *PSecBufferDesc;
+
+/* values for ulVersion */
+#define SECBUFFER_VERSION 0
+
+typedef void (SEC_ENTRY *SEC_GET_KEY_FN)(void *Arg, void *Principal,
+ ULONG KeyVer, void **Key, SECURITY_STATUS *Status);
+
+SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(PULONG pcPackages,
+ PSecPkgInfoA *ppPackageInfo);
+SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(PULONG pcPackages,
+ PSecPkgInfoW *ppPackageInfo);
+#define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages)
+
+typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG,
+ PSecPkgInfoA *);
+typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG,
+ PSecPkgInfoW *);
+#define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_)
+
+SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA(
+ PCredHandle phCredential, ULONG ulAttribute, void *pBuffer);
+SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW(
+ PCredHandle phCredential, ULONG ulAttribute, void *pBuffer);
+#define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes)
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)
+ (PCredHandle, ULONG, PVOID);
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)
+ (PCredHandle, ULONG, PVOID);
+#define QUERY_CREDENTIALS_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CREDENTIALS_ATTRIBUTES_FN_)
+
+/* values for QueryCredentialsAttributes ulAttribute */
+#define SECPKG_CRED_ATTR_NAMES 1
+
+/* types for QueryCredentialsAttributes */
+typedef struct _SecPkgCredentials_NamesA
+{
+ SEC_CHAR *sUserName;
+} SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA;
+
+typedef struct _SecPkgCredentials_NamesW
+{
+ SEC_WCHAR *sUserName;
+} SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;
+
+#define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names)
+
+SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA(
+ SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialsUse,
+ PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn,
+ PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry);
+SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW(
+ SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse,
+ PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn,
+ PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry);
+#define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle)
+
+/* flags for fCredentialsUse */
+#define SECPKG_CRED_INBOUND 0x00000001
+#define SECPKG_CRED_OUTBOUND 0x00000002
+#define SECPKG_CRED_BOTH (SECPKG_CRED_INBOUND | SECPKG_CRED_OUTBOUND)
+#define SECPKG_CRED_DEFAULT 0x00000004
+#define SECPKG_CRED_RESERVED 0xf0000000
+
+typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(
+ SEC_CHAR *, SEC_CHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,
+ PCredHandle, PTimeStamp);
+typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
+ SEC_WCHAR *, SEC_WCHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,
+ PCredHandle, PTimeStamp);
+#define ACQUIRE_CREDENTIALS_HANDLE_FN WINELIB_NAME_AW(ACQUIRE_CREDENTIALS_HANDLE_FN_)
+
+SECURITY_STATUS SEC_ENTRY FreeContextBuffer(PVOID pv);
+
+typedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)(PVOID);
+
+SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(PCredHandle
+ phCredential);
+
+#define FreeCredentialHandle FreeCredentialsHandle
+
+typedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);
+
+SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA(
+ PCredHandle phCredential, PCtxtHandle phContext,
+ SEC_CHAR *pszTargetName, ULONG fContextReq,
+ ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput,
+ ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput,
+ ULONG *pfContextAttr, PTimeStamp ptsExpiry);
+SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(
+ PCredHandle phCredential, PCtxtHandle phContext,
+ SEC_WCHAR *pszTargetName, ULONG fContextReq,
+ ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput,
+ ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput,
+ ULONG *pfContextAttr, PTimeStamp ptsExpiry);
+#define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext)
+
+typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A)
+ (PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG, ULONG, PSecBufferDesc,
+ ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp);
+typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W)
+ (PCredHandle, PCtxtHandle, SEC_WCHAR *, ULONG, ULONG, ULONG, PSecBufferDesc,
+ ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp);
+#define INITIALIZE_SECURITY_CONTEXT_FN WINELIB_NAME_AW(INITIALIZE_SECURITY_CONTEXT_FN_)
+
+/* flags for InitializeSecurityContext fContextReq and pfContextAttr */
+#define ISC_REQ_DELEGATE 0x00000001
+#define ISC_REQ_MUTUAL_AUTH 0x00000002
+#define ISC_REQ_REPLAY_DETECT 0x00000004
+#define ISC_REQ_SEQUENCE_DETECT 0x00000008
+#define ISC_REQ_CONFIDENTIALITY 0x00000010
+#define ISC_REQ_USE_SESSION_KEY 0x00000020
+#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
+#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
+#define ISC_REQ_ALLOCATE_MEMORY 0x00000100
+#define ISC_REQ_USE_DCE_STYLE 0x00000200
+#define ISC_REQ_DATAGRAM 0x00000400
+#define ISC_REQ_CONNECTION 0x00000800
+#define ISC_REQ_CALL_LEVEL 0x00001000
+#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
+#define ISC_REQ_EXTENDED_ERROR 0x00004000
+#define ISC_REQ_STREAM 0x00008000
+#define ISC_REQ_INTEGRITY 0x00010000
+#define ISC_REQ_IDENTIFY 0x00020000
+#define ISC_REQ_NULL_SESSION 0x00040000
+#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
+#define ISC_REQ_RESERVED1 0x00100000
+#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
+
+#define ISC_RET_DELEGATE 0x00000001
+#define ISC_RET_MUTUAL_AUTH 0x00000002
+#define ISC_RET_REPLAY_DETECT 0x00000004
+#define ISC_RET_SEQUENCE_DETECT 0x00000008
+#define ISC_RET_CONFIDENTIALITY 0x00000010
+#define ISC_RET_USE_SESSION_KEY 0x00000020
+#define ISC_RET_USED_COLLECTED_CREDS 0x00000040
+#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
+#define ISC_RET_ALLOCATED_MEMORY 0x00000100
+#define ISC_RET_USED_DCE_STYLE 0x00000200
+#define ISC_RET_DATAGRAM 0x00000400
+#define ISC_RET_CONNECTION 0x00000800
+#define ISC_RET_INTERMEDIATE_RETURN 0x00001000
+#define ISC_RET_CALL_LEVEL 0x00002000
+#define ISC_RET_EXTENDED_ERROR 0x00004000
+#define ISC_RET_STREAM 0x00008000
+#define ISC_RET_INTEGRITY 0x00010000
+#define ISC_RET_IDENTIFY 0x00020000
+#define ISC_RET_NULL_SESSION 0x00040000
+#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
+#define ISC_RET_RESERVED1 0x00100000
+#define ISC_RET_FRAGMENT_ONLY 0x00200000
+
+SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
+ PCredHandle phCredential, PCtxtHandle phContext, PSecBufferDesc pInput,
+ ULONG fContextReq, ULONG TargetDataRep,
+ PCtxtHandle phNewContext, PSecBufferDesc pOutput,
+ ULONG *pfContextAttr, PTimeStamp ptsExpiry);
+
+typedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,
+ PCtxtHandle, PSecBufferDesc, ULONG, ULONG, PCtxtHandle,
+ PSecBufferDesc, ULONG *, PTimeStamp);
+
+/* flags for AcceptSecurityContext fContextReq and pfContextAttr */
+#define ASC_REQ_DELEGATE 0x00000001
+#define ASC_REQ_MUTUAL_AUTH 0x00000002
+#define ASC_REQ_REPLAY_DETECT 0x00000004
+#define ASC_REQ_SEQUENCE_DETECT 0x00000008
+#define ASC_REQ_CONFIDENTIALITY 0x00000010
+#define ASC_REQ_USE_SESSION_KEY 0x00000020
+#define ASC_REQ_ALLOCATE_MEMORY 0x00000100
+#define ASC_REQ_USE_DCE_STYLE 0x00000200
+#define ASC_REQ_DATAGRAM 0x00000400
+#define ASC_REQ_CONNECTION 0x00000800
+#define ASC_REQ_CALL_LEVEL 0x00001000
+#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
+#define ASC_REQ_EXTENDED_ERROR 0x00008000
+#define ASC_REQ_STREAM 0x00010000
+#define ASC_REQ_INTEGRITY 0x00020000
+#define ASC_REQ_LICENSING 0x00040000
+#define ASC_REQ_IDENTIFY 0x00080000
+#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
+#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
+#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
+#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
+#define ASC_REQ_FRAGMENT_NO_TOKEN 0x01000000
+
+#define ASC_RET_DELEGATE 0x00000001
+#define ASC_RET_MUTUAL_AUTH 0x00000002
+#define ASC_RET_REPLAY_DETECT 0x00000004
+#define ASC_RET_SEQUENCE_DETECT 0x00000008
+#define ASC_RET_CONFIDENTIALITY 0x00000010
+#define ASC_RET_USE_SESSION_KEY 0x00000020
+#define ASC_RET_ALLOCATED_MEMORY 0x00000100
+#define ASC_RET_USED_DCE_STYLE 0x00000200
+#define ASC_RET_DATAGRAM 0x00000400
+#define ASC_RET_CONNECTION 0x00000800
+#define ASC_RET_CALL_LEVEL 0x00002000
+#define ASC_RET_THIRD_LEG_FAILED 0x00004000
+#define ASC_RET_EXTENDED_ERROR 0x00008000
+#define ASC_RET_STREAM 0x00010000
+#define ASC_RET_INTEGRITY 0x00020000
+#define ASC_RET_LICENSING 0x00040000
+#define ASC_RET_IDENTIFY 0x00080000
+#define ASC_RET_NULL_SESSION 0x00100000
+#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
+#define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000
+#define ASC_RET_FRAGMENT_ONLY 0x00800000
+#define ASC_RET_NO_TOKEN 0x01000000
+
+/* values for TargetDataRep */
+#define SECURITY_NATIVE_DREP 0x00000010
+#define SECURITY_NETWORK_DREP 0x00000000
+
+SECURITY_STATUS SEC_ENTRY CompleteAuthToken(PCtxtHandle phContext,
+ PSecBufferDesc pToken);
+
+typedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,
+ PSecBufferDesc);
+
+SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(PCtxtHandle phContext);
+
+typedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);
+
+SECURITY_STATUS SEC_ENTRY ApplyControlToken(PCtxtHandle phContext,
+ PSecBufferDesc pInput);
+
+typedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle,
+ PSecBufferDesc);
+
+SECURITY_STATUS SEC_ENTRY QueryContextAttributesA(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer);
+SECURITY_STATUS SEC_ENTRY QueryContextAttributesW(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer);
+#define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes)
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,
+ ULONG, void *);
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,
+ ULONG, void *);
+#define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_)
+
+/* values for QueryContextAttributes/SetContextAttributes ulAttribute */
+#define SECPKG_ATTR_SIZES 0
+#define SECPKG_ATTR_NAMES 1
+#define SECPKG_ATTR_LIFESPAN 2
+#define SECPKG_ATTR_DCE_INFO 3
+#define SECPKG_ATTR_STREAM_SIZES 4
+#define SECPKG_ATTR_KEY_INFO 5
+#define SECPKG_ATTR_AUTHORITY 6
+#define SECPKG_ATTR_PROTO_INFO 7
+#define SECPKG_ATTR_PASSWORD_EXPIRY 8
+#define SECPKG_ATTR_SESSION_KEY 9
+#define SECPKG_ATTR_PACKAGE_INFO 10
+#define SECPKG_ATTR_USER_FLAGS 11
+#define SECPKG_ATTR_NEGOTIATION_INFO 12
+#define SECPKG_ATTR_NATIVE_NAMES 13
+#define SECPKG_ATTR_FLAGS 14
+#define SECPKG_ATTR_USE_VALIDATED 15
+#define SECPKG_ATTR_CREDENTIAL_NAME 16
+#define SECPKG_ATTR_TARGET_INFORMATION 17
+#define SECPKG_ATTR_ACCESS_TOKEN 18
+#define SECPKG_ATTR_TARGET 19
+#define SECPKG_ATTR_AUTHENTICATION_ID 20
+
+/* types for QueryContextAttributes/SetContextAttributes */
+
+typedef struct _SecPkgContext_Sizes
+{
+ ULONG cbMaxToken;
+ ULONG cbMaxSignature;
+ ULONG cbBlockSize;
+ ULONG cbSecurityTrailer;
+} SecPkgContext_Sizes, *PSecPkgContext_Sizes;
+
+typedef struct _SecPkgContext_StreamSizes
+{
+ ULONG cbHeader;
+ ULONG cbTrailer;
+ ULONG cbMaximumMessage;
+ ULONG cbBuffers;
+ ULONG cbBlockSize;
+} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
+
+typedef struct _SecPkgContext_NamesA
+{
+ SEC_CHAR *sUserName;
+} SecPkgContext_NamesA, *PSecPkgContext_NamesA;
+
+typedef struct _SecPkgContext_NamesW
+{
+ SEC_WCHAR *sUserName;
+} SecPkgContext_NamesW, *PSecPkgContext_NamesW;
+
+#define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names)
+#define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names)
+
+typedef struct _SecPkgContext_Lifespan
+{
+ TimeStamp tsStart;
+ TimeStamp tsExpiry;
+} SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
+
+typedef struct _SecPkgContext_DceInfo
+{
+ ULONG AuthzSvc;
+ PVOID pPac;
+} SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
+
+typedef struct _SecPkgContext_KeyInfoA
+{
+ SEC_CHAR *sSignatureAlgorithmName;
+ SEC_CHAR *sEncryptAlgorithmName;
+ ULONG KeySize;
+ ULONG SignatureAlgorithm;
+ ULONG EncryptAlgorithm;
+} SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA;
+
+typedef struct _SecPkgContext_KeyInfoW
+{
+ SEC_WCHAR *sSignatureAlgorithmName;
+ SEC_WCHAR *sEncryptAlgorithmName;
+ ULONG KeySize;
+ ULONG SignatureAlgorithm;
+ ULONG EncryptAlgorithm;
+} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
+
+#define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo)
+#define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo)
+
+typedef struct _SecPkgContext_AuthorityA
+{
+ SEC_CHAR *sAuthorityName;
+} SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA;
+
+typedef struct _SecPkgContext_AuthorityW
+{
+ SEC_WCHAR *sAuthorityName;
+} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
+
+#define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority)
+#define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority)
+
+typedef struct _SecPkgContext_ProtoInfoA
+{
+ SEC_CHAR *sProtocolName;
+ ULONG majorVersion;
+ ULONG minorVersion;
+} SecPkgContext_ProtoInfoA, *PSecPkgContext_ProtoInfoA;
+
+typedef struct _SecPkgContext_ProtoInfoW
+{
+ SEC_WCHAR *sProtocolName;
+ ULONG majorVersion;
+ ULONG minorVersion;
+} SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
+
+#define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo)
+#define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo)
+
+typedef struct _SecPkgContext_PasswordExpiry
+{
+ TimeStamp tsPasswordExpires;
+} SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry;
+
+typedef struct _SecPkgContext_SessionKey
+{
+ ULONG SessionKeyLength;
+ unsigned char *SessionKey;
+} SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
+
+typedef struct _SecPkgContext_PackageInfoA
+{
+ PSecPkgInfoA PackageInfo;
+} SecPkgContext_PackageInfoA, *PSecPkgContext_PackageInfoA;
+
+typedef struct _SecPkgContext_PackageInfoW
+{
+ PSecPkgInfoW PackageInfo;
+} SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
+
+#define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo)
+#define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo)
+
+typedef struct _SecPkgContext_Flags
+{
+ ULONG Flags;
+} SecPkgContext_Flags, *PSecPkgContext_Flags;
+
+typedef struct _SecPkgContext_UserFlags
+{
+ ULONG UserFlags;
+} SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
+
+typedef struct _SecPkgContext_NegotiationInfoA
+{
+ PSecPkgInfoA PackageInfo;
+ ULONG NegotiationState;
+} SecPkgContext_NegotiationInfoA, *PSecPkgContext_NegotiationInfoA;
+
+typedef struct _SecPkgContext_NegotiationInfoW
+{
+ PSecPkgInfoW PackageInfo;
+ ULONG NegotiationState;
+} SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW;
+
+#define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo)
+#define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo)
+
+/* values for NegotiationState */
+#define SECPKG_NEGOTIATION_COMPLETE 0
+#define SECPKG_NEGOTIATION_OPTIMISTIC 1
+#define SECPKG_NEGOTIATION_IN_PROGRESS 2
+#define SECPKG_NEGOTIATION_DIRECT 3
+#define SECPKG_NEGOTIATION_TRY_MULTICRED 4
+
+typedef struct _SecPkgContext_NativeNamesA
+{
+ SEC_CHAR *sClientName;
+ SEC_CHAR *sServerName;
+} SecPkgContext_NativeNamesA, *PSecPkgContext_NativeNamesA;
+
+typedef struct _SecPkgContext_NativeNamesW
+{
+ SEC_WCHAR *sClientName;
+ SEC_WCHAR *sServerName;
+} SecPkgContext_NativeNamesW, *PSecPkgContext_NativeNamesW;
+
+#define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames)
+#define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames)
+
+typedef struct _SecPkgContext_CredentialNameA
+{
+ ULONG CredentialType;
+ SEC_CHAR *sCredentialName;
+} SecPkgContext_CredentialNameA, *PSecPkgContext_CredentialNameA;
+
+typedef struct _SecPkgContext_CredentialNameW
+{
+ ULONG CredentialType;
+ SEC_WCHAR *sCredentialName;
+} SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
+
+#define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName)
+#define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName)
+
+typedef struct _SecPkgContext_AccessToken
+{
+ void *AccessToken;
+} SecPkgContext_AccessToken, *PSecPkgContext_AccessToken;
+
+typedef struct _SecPkgContext_TargetInformation
+{
+ ULONG MarshalledTargetInfoLength;
+ unsigned char *MarshalledTargetInfo;
+} SecPkgContext_TargetInformation, *PSecPkgContext_TargetInformation;
+
+typedef struct _SecPkgContext_AuthzID
+{
+ ULONG AuthzIDLength;
+ char *AuthzID;
+} SecPkgContext_AuthzID, *PSecPkgContext_AuthzID;
+
+typedef struct _SecPkgContext_Target
+{
+ ULONG TargetLength;
+ char *Target;
+} SecPkgContext_Target, *PSecPkgContext_Target;
+
+SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(PCtxtHandle phContext);
+
+typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN)
+ (PCtxtHandle);
+
+SECURITY_STATUS SEC_ENTRY RevertSecurityContext(PCtxtHandle phContext);
+
+typedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);
+
+SECURITY_STATUS SEC_ENTRY MakeSignature(PCtxtHandle phContext,
+ ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo);
+
+typedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)(PCtxtHandle,
+ ULONG, PSecBufferDesc, ULONG);
+
+SECURITY_STATUS SEC_ENTRY VerifySignature(PCtxtHandle phContext,
+ PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP);
+
+typedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)(PCtxtHandle,
+ PSecBufferDesc, ULONG, PULONG);
+
+SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA(
+ SEC_CHAR *pszPackageName, PSecPkgInfoA *ppPackageInfo);
+SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW(
+ SEC_WCHAR *pszPackageName, PSecPkgInfoW *ppPackageInfo);
+#define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo)
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A)
+ (SEC_CHAR *, PSecPkgInfoA *);
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W)
+ (SEC_WCHAR *, PSecPkgInfoW *);
+#define QUERY_SECURITY_PACKAGE_INFO_FN WINELIB_NAME_AW(QUERY_SECURITY_PACKAGE_INFO_FN_)
+
+SECURITY_STATUS SEC_ENTRY ExportSecurityContext(PCtxtHandle phContext,
+ ULONG fFlags, PSecBuffer pPackedContext, void **pToken);
+
+typedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle,
+ ULONG, PSecBuffer, void **);
+
+/* values for ExportSecurityContext fFlags */
+#define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
+#define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
+
+SECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR *pszPackage,
+ PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext);
+SECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR *pszPackage,
+ PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext);
+#define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext)
+
+typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *,
+ PSecBuffer, void *, PCtxtHandle);
+typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR *,
+ PSecBuffer, void *, PCtxtHandle);
+#define IMPORT_SECURITY_CONTEXT_FN WINELIB_NAME_AW(IMPORT_SECURITY_CONTEXT_FN_)
+
+SECURITY_STATUS SEC_ENTRY AddCredentialsA(PCredHandle hCredentials,
+ SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialUse,
+ void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument,
+ PTimeStamp ptsExpiry);
+SECURITY_STATUS SEC_ENTRY AddCredentialsW(PCredHandle hCredentials,
+ SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialUse,
+ void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument,
+ PTimeStamp ptsExpiry);
+#define AddCredentials WINELIB_NAME_AW(AddCredentials)
+
+typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)(PCredHandle,
+ SEC_CHAR *, SEC_CHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,
+ PTimeStamp);
+typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)(PCredHandle,
+ SEC_WCHAR *, SEC_WCHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,
+ PTimeStamp);
+
+SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(PCtxtHandle phContext,
+ HANDLE *phToken);
+
+typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN)
+ (PCtxtHandle, HANDLE *);
+
+SECURITY_STATUS SEC_ENTRY EncryptMessage(PCtxtHandle phContext, ULONG fQOP,
+ PSecBufferDesc pMessage, ULONG MessageSeqNo);
+SECURITY_STATUS SEC_ENTRY DecryptMessage(PCtxtHandle phContext,
+ PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP);
+
+/* values for EncryptMessage fQOP */
+#define SECQOP_WRAP_NO_ENCRYPT 0x80000001
+
+typedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)(PCtxtHandle, ULONG,
+ PSecBufferDesc, ULONG);
+typedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)(PCtxtHandle,
+ PSecBufferDesc, ULONG, PULONG);
+
+SECURITY_STATUS SEC_ENTRY SetContextAttributesA(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer, ULONG cbBuffer);
+SECURITY_STATUS SEC_ENTRY SetContextAttributesW(PCtxtHandle phContext,
+ ULONG ulAttribute, void *pBuffer, ULONG cbBuffer);
+#define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes)
+
+typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,
+ ULONG, void *, ULONG);
+typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,
+ ULONG, void *, ULONG);
+
+#define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
+#define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
+#define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI)
+
+typedef struct _SECURITY_FUNCTION_TABLE_A
+{
+ ULONG dwVersion;
+ ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
+ QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
+ ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
+ FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
+ void *Reserved2;
+ INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
+ ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
+ COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
+ DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
+ APPLY_CONTROL_TOKEN_FN ApplyControlToken;
+ QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
+ IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
+ REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
+ MAKE_SIGNATURE_FN MakeSignature;
+ VERIFY_SIGNATURE_FN VerifySignature;
+ FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
+ QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
+ void *Reserved3;
+ void *Reserved4;
+ EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
+ IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA;
+ ADD_CREDENTIALS_FN_A AddCredentialsA;
+ void *Reserved8;
+ QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
+ ENCRYPT_MESSAGE_FN EncryptMessage;
+ DECRYPT_MESSAGE_FN DecryptMessage;
+ SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA;
+} SecurityFunctionTableA, *PSecurityFunctionTableA;
+
+typedef struct _SECURITY_FUNCTION_TABLE_W
+{
+ ULONG dwVersion;
+ ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
+ QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
+ ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
+ FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
+ void *Reserved2;
+ INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
+ ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
+ COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
+ DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
+ APPLY_CONTROL_TOKEN_FN ApplyControlToken;
+ QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
+ IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
+ REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
+ MAKE_SIGNATURE_FN MakeSignature;
+ VERIFY_SIGNATURE_FN VerifySignature;
+ FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
+ QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
+ void *Reserved3;
+ void *Reserved4;
+ EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
+ IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
+ ADD_CREDENTIALS_FN_W AddCredentialsW;
+ void *Reserved8;
+ QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
+ ENCRYPT_MESSAGE_FN EncryptMessage;
+ DECRYPT_MESSAGE_FN DecryptMessage;
+ SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
+} SecurityFunctionTableW, *PSecurityFunctionTableW;
+
+#define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable)
+#define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable)
+
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
+
+PSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA(void);
+PSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW(void);
+#define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface)
+
+typedef PSecurityFunctionTableA (SEC_ENTRY *INIT_SECURITY_INTERFACE_A)(void);
+typedef PSecurityFunctionTableW (SEC_ENTRY *INIT_SECURITY_INTERFACE_W)(void);
+#define INIT_SECURITY_INTERFACE WINELIB_NAME_AW(INIT_SECURITY_INTERFACE_)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ndef __WINE_SSPI_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in b/src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in
new file mode 100644
index 00000000..9788f702
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/stamp-h.in
@@ -0,0 +1 @@
+timestamp
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl
new file mode 100644
index 00000000..15877637
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/stdole2.idl
@@ -0,0 +1,440 @@
+/*
+ * Copyright (C) 2003 Robert Shearman
+ * 2005 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ uuid(00020430-0000-0000-C000-000000000046),
+ version(2.0),
+ helpstring("OLE Automation")
+]
+library stdole
+{
+ /* typedefs aren't stored in the type library.
+ These type names are known by the type compiler so it
+ doesn't really matter what we define them as. */
+
+ typedef short VARIANT_BOOL;
+ typedef long BSTR;
+ typedef double CURRENCY;
+ typedef unsigned long HRESULT;
+ typedef void *VARIANT;
+ typedef unsigned long SCODE;
+
+ typedef struct GUID {
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[ 8 ];
+ } GUID;
+
+ typedef struct DISPPARAMS {
+ VARIANT *rgvarg;
+ long *rgdispidNamedArgs;
+ unsigned int cArgs;
+ unsigned int cNamedArgs;
+ } DISPPARAMS;
+
+ typedef struct EXCEPINFO {
+ unsigned short wCode;
+ unsigned short wReserved;
+ BSTR bstrSource;
+ BSTR bstrDescription;
+ BSTR bstrHelpFile;
+ unsigned long dwHelpContext;
+ void *pvReserved;
+ void *pfnDeferredFillIn;
+ SCODE scode;
+ } EXCEPINFO;
+
+ [
+ odl,
+ uuid(00000000-0000-0000-C000-000000000046),
+ hidden
+ ]
+ interface IUnknown
+ {
+ [restricted]
+ HRESULT QueryInterface(
+ [in] GUID *riid,
+ [out] void **ppvObj);
+
+ [restricted]
+ unsigned long AddRef();
+
+ [restricted]
+ unsigned long Release();
+ }
+
+ [
+ odl,
+ uuid(00020400-0000-0000-C000-000000000046),
+ restricted
+ ]
+ interface IDispatch : IUnknown
+ {
+ [restricted]
+ HRESULT GetTypeInfoCount(
+ [out] unsigned int *pctinfo);
+
+ [restricted]
+ HRESULT GetTypeInfo(
+ [in] unsigned int itinfo,
+ [in] unsigned long lcid,
+ [out] void **pptinfo);
+
+ [restricted]
+ HRESULT GetIDsOfNames(
+ [in] GUID *riid,
+ [in] char **rgszNames,
+ [in] unsigned int cNames,
+ [in] unsigned long lcid,
+ [out] long *rgdispid);
+
+ [restricted]
+ HRESULT Invoke(
+ [in] long dispidMember,
+ [in] GUID *riid,
+ [in] unsigned long lcid,
+ [in] unsigned short wFlags,
+ [in] DISPPARAMS *pdispparams,
+ [out] VARIANT *pvarResult,
+ [out] EXCEPINFO *pexcepinfo,
+ [out] unsigned int *puArgErr);
+
+ }
+
+ [
+ odl,
+ uuid(00020404-0000-0000-C000-000000000046),
+ hidden
+ ]
+ interface IEnumVARIANT : IUnknown
+ {
+ HRESULT Next(
+ [in] unsigned long celt,
+ [in] VARIANT *rgvar,
+ [out] unsigned long *pceltFetched);
+
+ HRESULT Skip(
+ [in] unsigned long celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IEnumVARIANT **ppenum);
+ }
+
+ typedef [uuid(66504301-BE0F-101A-8BBB-00AA00300CAB), public]
+ unsigned long OLE_COLOR;
+
+ typedef [uuid(66504302-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_XPOS_PIXELS;
+
+ typedef [uuid(66504303-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_YPOS_PIXELS;
+
+ typedef [uuid(66504304-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_XSIZE_PIXELS;
+
+ typedef [uuid(66504305-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_YSIZE_PIXELS;
+
+ typedef [uuid(66504306-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_XPOS_HIMETRIC;
+
+ typedef [uuid(66504307-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_YPOS_HIMETRIC;
+
+ typedef [uuid(66504308-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_XSIZE_HIMETRIC;
+
+ typedef [uuid(66504309-BE0F-101A-8BBB-00AA00300CAB), public]
+ long OLE_YSIZE_HIMETRIC;
+
+ typedef [uuid(BF030640-9069-101B-AE2D-08002B2EC713), public]
+ float OLE_XPOS_CONTAINER;
+
+ typedef [uuid(BF030641-9069-101B-AE2D-08002B2EC713), public]
+ float OLE_YPOS_CONTAINER;
+
+ typedef [uuid(BF030642-9069-101B-AE2D-08002B2EC713), public]
+ float OLE_XSIZE_CONTAINER;
+
+ typedef [uuid(BF030643-9069-101B-AE2D-08002B2EC713), public]
+ float OLE_YSIZE_CONTAINER;
+
+ typedef [uuid(66504313-BE0F-101A-8BBB-00AA00300CAB), public]
+ int OLE_HANDLE;
+
+ typedef [uuid(6650430B-BE0F-101A-8BBB-00AA00300CAB), public]
+ VARIANT_BOOL OLE_OPTEXCLUSIVE;
+
+ typedef [uuid(BF030644-9069-101B-AE2D-08002B2EC713), public]
+ VARIANT_BOOL OLE_CANCELBOOL;
+
+ typedef [uuid(BF030645-9069-101B-AE2D-08002B2EC713), public]
+ VARIANT_BOOL OLE_ENABLEDEFAULTBOOL;
+
+ [
+ uuid(6650430A-BE0F-101A-8BBB-00AA00300CAB)
+ ]
+ enum OLE_TRISTATE {
+ Unchecked = 0,
+ Checked = 1,
+ Gray = 2
+ };
+
+ typedef [uuid(6650430D-BE0F-101A-8BBB-00AA00300CAB), public]
+ BSTR FONTNAME;
+
+ typedef [uuid(6650430E-BE0F-101A-8BBB-00AA00300CAB), public]
+ CURRENCY FONTSIZE;
+
+ typedef [uuid(6650430F-BE0F-101A-8BBB-00AA00300CAB), public]
+ VARIANT_BOOL FONTBOLD;
+
+ typedef [uuid(66504310-BE0F-101A-8BBB-00AA00300CAB), public]
+ VARIANT_BOOL FONTITALIC;
+
+ typedef [uuid(66504311-BE0F-101A-8BBB-00AA00300CAB), public]
+ VARIANT_BOOL FONTUNDERSCORE;
+
+ typedef [uuid(66504312-BE0F-101A-8BBB-00AA00300CAB), public]
+ VARIANT_BOOL FONTSTRIKETHROUGH;
+
+
+ [
+ odl,
+ uuid(BEF6E002-A874-101A-8BBA-00AA00300CAB),
+ helpstring("Font Object"),
+ hidden
+ ]
+ interface IFont : IUnknown {
+ [propget] HRESULT Name([out, retval] BSTR *pname);
+ [propput] HRESULT Name([in] BSTR pname);
+
+ [propget] HRESULT Size([out, retval] CURRENCY *psize);
+ [propput] HRESULT Size([in] CURRENCY psize);
+
+ [propget] HRESULT Bold([out, retval] VARIANT_BOOL *pbold);
+ [propput] HRESULT Bold([in] VARIANT_BOOL pbold);
+
+ [propget] HRESULT Italic([out, retval] VARIANT_BOOL *pitalic);
+ [propput] HRESULT Italic([in] VARIANT_BOOL pitalic);
+
+ [propget] HRESULT Underline([out, retval] VARIANT_BOOL *punderline);
+ [propput] HRESULT Underline([in] VARIANT_BOOL punderline);
+
+ [propget] HRESULT Strikethrough([out, retval] VARIANT_BOOL *pstrikethrough);
+ [propput] HRESULT Strikethrough([in] VARIANT_BOOL pstrikethrough);
+
+ [propget] HRESULT Weight([out, retval] short *pweight);
+ [propput] HRESULT Weight([in] short pweight);
+
+ [propget] HRESULT Charset([out, retval] short *pcharset);
+ [propput] HRESULT Charset([in] short pcharset);
+
+ [propget] HRESULT hFont([out, retval] OLE_HANDLE *phfont);
+
+ HRESULT Clone([out] IFont **ppfont);
+
+ HRESULT IsEqual([in] IFont *pfontOther);
+
+ HRESULT SetRatio([in] long cyLogical, [in] long cyHimetric);
+
+ HRESULT AddRefHfont([in] OLE_HANDLE hFont);
+
+ HRESULT ReleaseHfont([in] OLE_HANDLE hFont);
+ };
+
+
+ [
+ odl,
+ uuid(BEF6E003-A874-101A-8BBA-00AA00300CAB)
+ ]
+ dispinterface Font {
+ properties:
+ [id(0x0)] BSTR Name;
+ [id(0x2)] CURRENCY Size;
+ [id(0x3)] VARIANT_BOOL Bold;
+ [id(0x4)] VARIANT_BOOL Italic;
+ [id(0x5)] VARIANT_BOOL Underline;
+ [id(0x6)] VARIANT_BOOL Strikethrough;
+ [id(0x7)] short Weight;
+ [id(0x8)] short Charset;
+ methods:
+ }
+
+ typedef [public] Font IFontDisp;
+
+ [
+ uuid(0BE35203-8F91-11CE-9DE3-00AA004BB851)
+ ]
+ coclass StdFont {
+ [default] dispinterface Font;
+ /* FIXME: We can't reference dispinterface FontEvents here because we need it to
+ appear at the end of the typelib. */
+/* [default, source] dispinterface FontEvents;*/
+ interface IFont;
+ };
+
+ [
+ odl,
+ uuid(7BF80980-BF32-101A-8BBB-00AA00300CAB),
+ helpstring("Picture Object"),
+ hidden
+ ]
+ interface IPicture : IUnknown {
+ [propget] HRESULT Handle([out, retval] OLE_HANDLE *phandle);
+
+ [propget] HRESULT hPal([out, retval] OLE_HANDLE *phpal);
+
+ [propget] HRESULT Type([out, retval] short *ptype);
+
+ [propget] HRESULT Width([out, retval] OLE_XSIZE_HIMETRIC *pwidth);
+
+ [propget] HRESULT Height([out, retval] OLE_YSIZE_HIMETRIC *pheight);
+
+ HRESULT Render([in] int hdc,
+ [in] long x,
+ [in] long y,
+ [in] long cx,
+ [in] long cy,
+ [in] OLE_XPOS_HIMETRIC xSrc,
+ [in] OLE_YPOS_HIMETRIC ySrc,
+ [in] OLE_XSIZE_HIMETRIC cxSrc,
+ [in] OLE_YSIZE_HIMETRIC cySrc,
+ [in] void *prcWBounds);
+
+ [propput] HRESULT hPal([in] OLE_HANDLE phpal);
+
+ [propget] HRESULT CurDC([out, retval] int *phdcOut);
+
+ HRESULT SelectPicture([in] int hdcIn,
+ [out] int *phdcOut,
+ [out] OLE_HANDLE *phbmpOut);
+
+ [propget] HRESULT KeepOriginalFormat([out, retval] VARIANT_BOOL *pfkeep);
+ [propput] HRESULT KeepOriginalFormat([in] VARIANT_BOOL pfkeep);
+
+ HRESULT PictureChanged();
+
+ HRESULT SaveAsFile([in] void *pstm,
+ [in] VARIANT_BOOL fSaveMemCopy,
+ [out] long *pcbSize);
+
+ [propget] HRESULT Attributes([out, retval] long *pdwAttr);
+
+ HRESULT SetHdc([in] OLE_HANDLE hdc);
+ };
+
+ [
+ uuid(7BF80981-BF32-101A-8BBB-00AA00300CAB)
+ ]
+ dispinterface Picture {
+ properties:
+ [id(0x0), readonly] OLE_HANDLE Handle;
+ [id(0x2)] OLE_HANDLE hPal;
+ [id(0x3), readonly] short Type;
+ [id(0x4), readonly] OLE_XSIZE_HIMETRIC Width;
+ [id(0x5), readonly] OLE_YSIZE_HIMETRIC Height;
+ methods:
+ [id(0x6)] void Render(int hdc,
+ long x,
+ long y,
+ long cx,
+ long cy,
+ OLE_XPOS_HIMETRIC xSrc,
+ OLE_YPOS_HIMETRIC ySrc,
+ OLE_XSIZE_HIMETRIC cxSrc,
+ OLE_YSIZE_HIMETRIC cySrc,
+ void *prcWBounds);
+ };
+
+ typedef [public] Picture IPictureDisp;
+
+ [
+ uuid(0BE35204-8F91-11CE-9DE3-00AA004BB851)
+ ]
+ coclass StdPicture {
+ [default] dispinterface Picture;
+ interface IPicture;
+ };
+
+ [
+ uuid(E6C8FA08-BD9F-11D0-985E-00C04FC29993)
+ ]
+ enum LoadPictureConstants {
+ Default = 0,
+ Monochrome = 1,
+ VgaColor = 2,
+ Color = 4
+ };
+
+ [
+ dllname("oleaut32.dll"),
+ uuid(91209AC0-60F6-11CF-9C5D-00AA00C1489E),
+ helpstring("Functions for Standard OLE Objects"),
+ helpcontext(0x2775)
+ ]
+ module StdFunctions{
+ [
+ entry("OleLoadPictureFileEx"),
+ helpstring("Loads a picture from a file"),
+ helpcontext(0x2775)
+ ]
+ HRESULT LoadPicture([in, optional] VARIANT filename,
+ [in, optional, defaultvalue(0)] int widthDesired,
+ [in, optional, defaultvalue(0)] int heightDesired,
+ [in, optional, defaultvalue(Default)] enum LoadPictureConstants flags,
+ [out, retval] IPictureDisp **retval);
+ [
+ entry("OleSavePictureFile"),
+ helpstring("Saves a picture to a file"),
+ helpcontext(0x2775)
+ ]
+ HRESULT SavePicture([in] IPictureDisp *Picture,
+ [in] BSTR filename);
+ };
+
+
+ [
+ uuid(4EF6100A-AF88-11D0-9846-00C04FC29993),
+ helpstring("Event Interface for the Font Object"),
+ hidden
+ ]
+ dispinterface FontEvents {
+ properties:
+ methods:
+ [id(0x9)] void FontChanged([in] BSTR PropertyName);
+ };
+
+ typedef [public] FontEvents IFontEventsDisp;
+
+
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h
new file mode 100644
index 00000000..4808839c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/sti.h
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2009 Damjan Jovanovic
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STI_H
+#define __WINE_STI_H
+
+#include <objbase.h>
+/* #include <stireg.h> */
+/* #include <stierr.h> */
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DEFINE_GUID(CLSID_Sti, 0xB323F8E0, 0x2E68, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C);
+
+DEFINE_GUID(IID_IStillImageW, 0x641BD880, 0x2DC8, 0x11D0, 0x90, 0xEA, 0x00, 0xAA, 0x00, 0x60, 0xF8, 0x6C);
+
+DEFINE_GUID(IID_IStillImageA, 0xA7B1F740, 0x1D7F, 0x11D1, 0xAC, 0xA9, 0x00, 0xA0, 0x24, 0x38, 0xAD, 0x48);
+
+#define STI_VERSION_REAL 0x00000002
+#define STI_VERSION_FLAG_UNICODE 0x01000000
+
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+# define STI_VERSION (STI_VERSION_REAL | STI_VERSION_FLAG_UNICODE)
+# else
+# define STI_VERSION (STI_VERSION_REAL)
+# endif
+#endif
+
+typedef struct IStillImageA *PSTIA;
+typedef struct IStillImageW *PSTIW;
+DECL_WINELIB_TYPE_AW(PSTI)
+typedef struct IStillImageA *LPSTILLIMAGEA;
+typedef struct IStillImageW *LPSTILLIMAGEW;
+DECL_WINELIB_TYPE_AW(LPSTILLIMAGE)
+typedef struct IStiDeviceA *PSTIDEVICEA;
+typedef struct IStiDeviceW *PSTIDEVICEW;
+DECL_WINELIB_TYPE_AW(PSTIDEVICE)
+
+HRESULT WINAPI StiCreateInstanceA(HINSTANCE hinst, DWORD dwVer, PSTIA *ppSti, LPUNKNOWN pUnkOuter);
+HRESULT WINAPI StiCreateInstanceW(HINSTANCE hinst, DWORD dwVer, PSTIW *ppSti, LPUNKNOWN pUnkOuter);
+#define StiCreateInstance WINELIB_NAME_AW(StiCreateInstance)
+
+typedef DWORD STI_DEVICE_TYPE;
+typedef enum _STI_DEVICE_MJ_TYPE
+{
+ StiDeviceTypeDefault = 0,
+ StiDeviceTypeScanner = 1,
+ StiDeviceTypeDigitalCamera = 2,
+ StiDeviceTypeStreamingVideo = 3
+} STI_DEVICE_MJ_TYPE;
+
+#define GET_STIDEVICE_TYPE(dwDevType) HIWORD(dwDevType)
+#define GET_STIDEVICE_SUBTYPE(dwDevType) LOWORD(dwDevType)
+
+typedef struct _STI_DEV_CAPS {
+ DWORD dwGeneric;
+} STI_DEV_CAPS, *PSTI_DEV_CAPS;
+
+#define STI_MAX_INTERNAL_NAME_LENGTH 128
+
+typedef struct _STI_DEVICE_INFORMATIONW {
+ DWORD dwSize;
+ STI_DEVICE_TYPE DeviceType;
+ WCHAR szDeviceInternalName[STI_MAX_INTERNAL_NAME_LENGTH];
+ STI_DEV_CAPS DeviceCapabilities;
+ DWORD dwHardwareConfiguration;
+ LPWSTR pszVendorDescription;
+ LPWSTR pszDeviceDescription;
+ LPWSTR pszPortName;
+ LPWSTR pszPropProvider;
+ LPWSTR pszLocalName;
+} STI_DEVICE_INFORMATIONW, *PSTI_DEVICE_INFORMATIONW;
+
+typedef STI_DEVICE_INFORMATIONW STI_DEVICE_INFORMATION;
+typedef PSTI_DEVICE_INFORMATIONW PSTI_DEVICE_INFORMATION;
+
+#define MAX_NOTIFICATION_DATA 64
+
+typedef struct _STINOTIFY {
+ DWORD dwSize;
+ GUID guidNotificationCode;
+ BYTE abNotificationData[MAX_NOTIFICATION_DATA];
+} STINOTIFY,*LPSTINOTIFY;
+
+#define INTERFACE IStillImageW
+DECLARE_INTERFACE_(IStillImageW, IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IStillImageW methods ***/
+ STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+ STDMETHOD(GetDeviceList)(THIS_ DWORD dwType, DWORD dwFlags, DWORD *pdwItemsReturned, LPVOID *ppBuffer) PURE;
+ STDMETHOD(GetDeviceInfo)(THIS_ LPWSTR pwszDeviceName, LPVOID *ppBuffer) PURE;
+ STDMETHOD(CreateDevice)(THIS_ LPWSTR pwszDeviceName, DWORD dwMode, PSTIDEVICEW *pDevice, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(GetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, LPDWORD pType, LPBYTE pData, LPDWORD cbData) PURE;
+ STDMETHOD(SetDeviceValue)(THIS_ LPWSTR pwszDeviceName, LPWSTR pValueName, DWORD type, LPBYTE pData, DWORD cbData) PURE;
+ STDMETHOD(GetSTILaunchInformation)(THIS_ LPWSTR pwszDeviceName, DWORD *pdwEventCode, LPWSTR pwszEventName) PURE;
+ STDMETHOD(RegisterLaunchApplication)(THIS_ LPWSTR pwszAppName, LPWSTR pwszCommandLine) PURE;
+ STDMETHOD(UnregisterLaunchApplication)(THIS_ LPWSTR pwszAppName) PURE;
+ STDMETHOD(EnableHwNotifications)(THIS_ LPCWSTR pwszDeviceName, BOOL bNewState) PURE;
+ STDMETHOD(GetHwNotificationState)(THIS_ LPCWSTR pwszDeviceName, BOOL *pbCurrentState) PURE;
+ STDMETHOD(RefreshDeviceBus)(THIS_ LPCWSTR pwszDeviceName) PURE;
+ STDMETHOD(LaunchApplicationForDevice)(THIS_ LPWSTR pwszDeviceName, LPWSTR pwszAppName, LPSTINOTIFY pStiNotify);
+ STDMETHOD(SetupDeviceParameters)(THIS_ PSTI_DEVICE_INFORMATIONW pDevInfo);
+ STDMETHOD(WriteToErrorLog)(THIS_ DWORD dwMessageType, LPCWSTR pszMessage) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IStillImage_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IStillImage_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IStillImage_Release(p) (p)->lpVtbl->Release(p)
+/*** IStillImage methods ***/
+#define IStillImage_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IStillImage_GetDeviceList(p,a,b,c,d) (p)->lpVtbl->GetDeviceList(p,a,b,c,d)
+#define IStillImage_GetDeviceInfo(p,a,b) (p)->lpVtbl->GetDeviceInfo(p,a,b)
+#define IStillImage_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d)
+#define IStillImage_GetDeviceValue(p,a,b,c,d,e) (p)->lpVtbl->GetDeviceValue(p,a,b,c,d,e)
+#define IStillImage_SetDeviceValue(p,a,b,c,d,e) (p)->lpVtbl->SetDeviceValue(p,a,b,c,d,e)
+#define IStillImage_GetSTILaunchInformation(p,a,b,c) (p)->lpVtbl->GetSTILaunchInformation(p,a,b,c)
+#define IStillImage_RegisterLaunchApplication(p,a,b) (p)->lpVtbl->RegisterLaunchApplication(p,a,b)
+#define IStillImage_UnregisterLaunchApplication(p,a) (p)->lpVtbl->UnregisterLaunchApplication(p,a)
+#define IStillImage_EnableHwNotifications(p,a,b) (p)->lpVtbl->EnableHwNotifications(p,a,b)
+#define IStillImage_GetHwNotificationState(p,a,b) (p)->lpVtbl->GetHwNotificationState(p,a,b)
+#define IStillImage_RefreshDeviceBus(p,a) (p)->lpVtbl->RefreshDeviceBus(p,a)
+#define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->lpVtbl->LaunchApplicationForDevice(p,a,b,c)
+#define IStillImage_SetupDeviceParameters(p,a) (p)->lpVtbl->SetupDeviceParameters(p,a)
+#define IStillImage_WriteToErrorLog(p,a,b) (p)->lpVtbl->WriteToErrorLog(p,a,b)
+#else
+/*** IUnknown methods ***/
+#define IStillImage_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#define IStillImage_AddRef(p) (p)->AddRef()
+#define IStillImage_Release(p) (p)->Release()
+/*** IStillImage methods ***/
+#define IStillImage_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IStillImage_GetDeviceList(p,a,b,c,d) (p)->GetDeviceList(a,b,c,d)
+#define IStillImage_GetDeviceInfo(p,a,b) (p)->GetDeviceInfo(a,b)
+#define IStillImage_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d)
+#define IStillImage_GetDeviceValue(p,a,b,c,d,e) (p)->GetDeviceValue(a,b,c,d,e)
+#define IStillImage_SetDeviceValue(p,a,b,c,d,e) (p)->SetDeviceValue(a,b,c,d,e)
+#define IStillImage_GetSTILaunchInformation(p,a,b,c) (p)->GetSTILaunchInformation(a,b,c)
+#define IStillImage_RegisterLaunchApplication(p,a,b) (p)->RegisterLaunchApplication(a,b)
+#define IStillImage_UnregisterLaunchApplication(p,a) (p)->UnregisterLaunchApplication(a)
+#define IStillImage_EnableHwNotifications(p,a,b) (p)->EnableHwNotifications(a,b)
+#define IStillImage_GetHwNotificationState(p,a,b) (p)->GetHwNotificationState(a,b)
+#define IStillImage_RefreshDeviceBus(p,a) (p)->RefreshDeviceBus(a)
+#define IStillImage_LaunchApplicationForDevice(p,a,b,c) (p)->LaunchApplicationForDevice(a,b,c)
+#define IStillImage_SetupDeviceParameters(p,a) (p)->SetupDeviceParameters(a)
+#define IStillImage_WriteToErrorLog(p,a,b) (p)->WriteToErrorLog(a,b)
+#endif
+
+#ifdef __cplusplus
+};
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_STI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h
new file mode 100644
index 00000000..b098c286
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/storage.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 1999 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STORAGE_H
+#define __WINE_STORAGE_H
+
+/* "storage.h" is obsolete, you should include "objbase.h" instead */
+
+#include <objbase.h>
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl
new file mode 100644
index 00000000..46730c7c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/strmif.idl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2002 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+
+#include <devenum.idl>
+
+#include <axcore.idl>
+
+#include <axextend.idl>
+
+#include <dyngraph.idl>
+
+/* TODO: #include <dvdif.h> */
+#include <vmrender.idl>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h
new file mode 100644
index 00000000..e7e6fcf0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/strsafe.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2010 Thomas Mullaly
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_STRSAFE_H
+#define __WINE_STRSAFE_H
+
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+/* Windows version includes this header. */
+/* #include <specstring.h> */
+
+#define STRSAFE_E_INSUFFICIENT_BUFFER ((HRESULT)0x8007007A)
+#define STRSAFE_E_INVALID_PARAM ((HRESULT)0x80070075)
+#define STRSAFE_E_END_OF_FILE ((HRESULT)0x80070026)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl
new file mode 100644
index 00000000..8336a90c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/structuredquerycondition.idl
@@ -0,0 +1,61 @@
+/*
+ * structured query condition
+ *
+ * Copyright 2009 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "objidl.idl";
+import "propidl.idl";
+
+typedef [v1_enum] enum tagCONDITION_TYPE
+{
+ CT_AND_CONDITION,
+ CT_OR_CONDITION,
+ CT_NOT_CONDITION,
+ CT_LEAF_CONDITION
+} CONDITION_TYPE;
+
+typedef [v1_enum] enum tagCONDITION_OPERATION
+{
+ COP_IMPLICIT,
+ COP_EQUAL,
+ COP_NOTEQUAL,
+ COP_LESSTHAN,
+ COP_GREATERTHAN,
+ COP_LESSTHANOREQUAL,
+ COP_GREATERTHANOREQUAL,
+ COP_VALUE_STARTSWITH,
+ COP_VALUE_ENDSWITH,
+ COP_VALUE_CONTAINS,
+ COP_VALUE_NOTCONTAINS,
+ COP_DOSWILDCARDS,
+ COP_WORD_EQUAL,
+ COP_WORD_STARTSWITH,
+ COP_APPLICATION_SPECIFIC
+} CONDITION_OPERATION;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h
new file mode 100644
index 00000000..adbe7912
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/svrapi.h
@@ -0,0 +1,55 @@
+/*
+* Copyright 2006 Konstantin Petrov
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef SVRAPI_INCLUDED
+#define SVRAPI_INCLUDED
+
+#include <lmcons.h>
+#include <lmerr.h>
+
+#include <pshpack1.h>
+
+typedef struct _share_info_1 {
+ char shi1_netname[LM20_NNLEN+1];
+ char shi1_pad1;
+ unsigned short shi1_type;
+ char* shi1_remark;
+} share_info_1;
+
+typedef struct _share_info_50 {
+ char shi50_netname[LM20_NNLEN+1];
+ unsigned char shi50_type;
+ unsigned short shi50_flags;
+ char* shi50_remark;
+ char* shi50_path;
+ char shi50_rw_password[SHPWLEN+1];
+ char shi50_ro_password[SHPWLEN+1];
+} share_info_50;
+
+#include <poppack.h>
+
+#endif /* SVRAPI_INCLUDED */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h
new file mode 100644
index 00000000..e3379218
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/t2embapi.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2009 Andrew Nguyen
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_T2EMBAPI_H
+#define __WINE_T2EMBAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CHARSET_UNICODE 1
+#define CHARSET_DEFAULT 1
+#define CHARSET_SYMBOL 2
+#define CHARSET_GLYPHIDX 3
+
+#define LICENSE_INSTALLABLE 0x0000
+#define LICENSE_DEFAULT 0x0000
+#define LICENSE_NOEMBEDDING 0x0002
+#define LICENSE_PREVIEWPRINT 0x0004
+#define LICENSE_EDITABLE 0x0008
+
+#define TTLOAD_PRIVATE 0x0001
+
+/* Possible return values. */
+#define E_NONE __MSABI_LONG(0x0000)
+#define E_API_NOTIMPL __MSABI_LONG(0x0001)
+
+typedef ULONG (WINAPIV * READEMBEDPROC)(void*,void*,ULONG);
+typedef ULONG (WINAPIV * WRITEEMBEDPROC)(void*,void*,ULONG);
+
+typedef struct
+{
+ unsigned short usStructSize;
+ unsigned short usRefStrSize;
+ unsigned short *pusRefStr;
+} TTLOADINFO;
+
+typedef struct
+{
+ unsigned short usStructSize;
+ unsigned short usRootStrSize;
+ unsigned short *pusRootStr;
+} TTEMBEDINFO;
+
+LONG WINAPI TTLoadEmbeddedFont(HANDLE*,ULONG,ULONG*,ULONG,ULONG*,READEMBEDPROC,
+ LPVOID,LPWSTR,LPSTR,TTLOADINFO*);
+LONG WINAPI TTDeleteEmbeddedFont(HANDLE,ULONG,ULONG*);
+
+/* embedding privileges */
+#define EMBED_PREVIEWPRINT 1
+#define EMBED_EDITABLE 2
+#define EMBED_INSTALLABLE 3
+#define EMBED_NOEMBEDDING 4
+
+LONG WINAPI TTGetEmbeddingType(HDC, ULONG*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h
new file mode 100644
index 00000000..3a23f0c8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tapi.h
@@ -0,0 +1,1077 @@
+/*
+ * TAPI definitions
+ *
+ * Copyright (c) 1999 Andreas Mohr
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TAPI_H
+#define __WINE_TAPI_H
+
+#include <windows.h>
+#include <basetsd.h>
+#include <oaidl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef HANDLE HCALL, *LPHCALL;
+typedef HANDLE HLINE, *LPHLINE;
+typedef HANDLE HLINEAPP, *LPHLINEAPP;
+typedef HANDLE HPHONE, *LPHPHONE;
+typedef HANDLE HPHONEAPP, *LPHPHONEAPP;
+
+#define TAPIERR_REQUESTFAILED __MSABI_LONG(-16)
+#define LINEERR_ALLOCATED 0x80000001
+#define LINEERR_BADDEVICEID 0x80000002
+#define LINEERR_BEARERMODEUNAVAIL 0x80000003
+#define LINEERR_CALLUNAVAIL 0x80000005
+#define LINEERR_COMPLETIONOVERRUN 0x80000006
+#define LINEERR_CONFERENCEFULL 0x80000007
+#define LINEERR_DIALBILLING 0x80000008
+#define LINEERR_DIALDIALTONE 0x80000009
+#define LINEERR_DIALPROMPT 0x8000000A
+#define LINEERR_DIALQUIET 0x8000000B
+#define LINEERR_INCOMPATIBLEAPIVERSION 0x8000000C
+#define LINEERR_INCOMPATIBLEEXTVERSION 0x8000000D
+#define LINEERR_INIFILECORRUPT 0x8000000E
+#define LINEERR_INUSE 0x8000000F
+#define LINEERR_INVALADDRESS 0x80000010
+#define LINEERR_INVALADDRESSID 0x80000011
+#define LINEERR_INVALADDRESSMODE 0x80000012
+#define LINEERR_INVALADDRESSSTATE 0x80000013
+#define LINEERR_INVALAPPHANDLE 0x80000014
+#define LINEERR_INVALAPPNAME 0x80000015
+#define LINEERR_INVALBEARERMODE 0x80000016
+#define LINEERR_INVALCALLCOMPLMODE 0x80000017
+#define LINEERR_INVALCALLHANDLE 0x80000018
+#define LINEERR_INVALCALLPARAMS 0x80000019
+#define LINEERR_INVALCALLPRIVILEGE 0x8000001A
+#define LINEERR_INVALCALLSELECT 0x8000001B
+#define LINEERR_INVALCALLSTATE 0x8000001C
+#define LINEERR_INVALCALLSTATELIST 0x8000001D
+#define LINEERR_INVALCARD 0x8000001E
+#define LINEERR_INVALCOMPLETIONID 0x8000001F
+#define LINEERR_INVALCONFCALLHANDLE 0x80000020
+#define LINEERR_INVALCONSULTCALLHANDLE 0x80000021
+#define LINEERR_INVALCOUNTRYCODE 0x80000022
+#define LINEERR_INVALDEVICECLASS 0x80000023
+#define LINEERR_INVALDEVICEHANDLE 0x80000024
+#define LINEERR_INVALDIALPARAMS 0x80000025
+#define LINEERR_INVALDIGITLIST 0x80000026
+#define LINEERR_INVALDIGITMODE 0x80000027
+#define LINEERR_INVALDIGITS 0x80000028
+#define LINEERR_INVALEXTVERSION 0x80000029
+#define LINEERR_INVALGROUPID 0x8000002A
+#define LINEERR_INVALLINEHANDLE 0x8000002B
+#define LINEERR_INVALLINESTATE 0x8000002C
+#define LINEERR_INVALLOCATION 0x8000002D
+#define LINEERR_INVALMEDIALIST 0x8000002E
+#define LINEERR_INVALMEDIAMODE 0x8000002F
+#define LINEERR_INVALMESSAGEID 0x80000030
+#define LINEERR_INVALPARAM 0x80000032
+#define LINEERR_INVALPARKID 0x80000033
+#define LINEERR_INVALPARKMODE 0x80000034
+#define LINEERR_INVALPOINTER 0x80000035
+#define LINEERR_INVALPRIVSELECT 0x80000036
+#define LINEERR_INVALRATE 0x80000037
+#define LINEERR_INVALREQUESTMODE 0x80000038
+#define LINEERR_INVALTERMINALID 0x80000039
+#define LINEERR_INVALTERMINALMODE 0x8000003A
+#define LINEERR_INVALTIMEOUT 0x8000003B
+#define LINEERR_INVALTONE 0x8000003C
+#define LINEERR_INVALTONELIST 0x8000003D
+#define LINEERR_INVALTONEMODE 0x8000003E
+#define LINEERR_INVALTRANSFERMODE 0x8000003F
+#define LINEERR_LINEMAPPERFAILED 0x80000040
+#define LINEERR_NOCONFERENCE 0x80000041
+#define LINEERR_NODEVICE 0x80000042
+#define LINEERR_NODRIVER 0x80000043
+#define LINEERR_NOMEM 0x80000044
+#define LINEERR_NOREQUEST 0x80000045
+#define LINEERR_NOTOWNER 0x80000046
+#define LINEERR_NOTREGISTERED 0x80000047
+#define LINEERR_OPERATIONFAILED 0x80000048
+#define LINEERR_OPERATIONUNAVAIL 0x80000049
+#define LINEERR_RATEUNAVAIL 0x8000004A
+#define LINEERR_RESOURCEUNAVAIL 0x8000004B
+#define LINEERR_REQUESTOVERRUN 0x8000004C
+#define LINEERR_STRUCTURETOOSMALL 0x8000004D
+#define LINEERR_TARGETNOTFOUND 0x8000004E
+#define LINEERR_TARGETSELF 0x8000004F
+#define LINEERR_UNINITIALIZED 0x80000050
+#define LINEERR_USERUSERINFOTOOBIG 0x80000051
+#define LINEERR_REINIT 0x80000052
+#define LINEERR_ADDRESSBLOCKED 0x80000053
+#define LINEERR_BILLINGREJECTED 0x80000054
+#define LINEERR_INVALFEATURE 0x80000055
+#define LINEERR_NOMULTIPLEINSTANCE 0x80000056
+
+#define STRINGFORMAT_ASCII 0x00000001
+#define STRINGFORMAT_DBCS 0x00000002
+#define STRINGFORMAT_UNICODE 0x00000003
+#define STRINGFORMAT_BINARY 0x00000004
+
+#define LINEADDRESSMODE_ADDRESSID 0x00000001
+#define LINEADDRESSMODE_DIALABLEADDR 0x00000002
+
+#define LINEBEARERMODE_VOICE 0x00000001
+#define LINEBEARERMODE_SPEECH 0x00000002
+#define LINEBEARERMODE_MULTIUSE 0x00000004
+#define LINEBEARERMODE_DATA 0x00000008
+#define LINEBEARERMODE_ALTSPEECHDATA 0x00000010
+#define LINEBEARERMODE_NONCALLSIGNALING 0x00000020
+#define LINEBEARERMODE_PASSTHROUGH 0x00000040
+
+#define LINEMEDIAMODE_UNKNOWN 0x00000002
+#define LINEMEDIAMODE_INTERACTIVEVOICE 0x00000004
+#define LINEMEDIAMODE_AUTOMATEDVOICE 0x00000008
+#define LINEMEDIAMODE_DATAMODEM 0x00000010
+
+#define LINEDEVCAPFLAGS_CROSSADDRCONF 0x00000001
+#define LINEDEVCAPFLAGS_HIGHLEVCOMP 0x00000002
+#define LINEDEVCAPFLAGS_LOWLEVCOMP 0x00000004
+#define LINEDEVCAPFLAGS_MEDIACONTROL 0x00000008
+#define LINEDEVCAPFLAGS_MULTIPLEADDR 0x00000010
+#define LINEDEVCAPFLAGS_CLOSEDROP 0x00000020
+#define LINEDEVCAPFLAGS_DIALBILLING 0x00000040
+#define LINEDEVCAPFLAGS_DIALQUIET 0x00000080
+#define LINEDEVCAPFLAGS_DIALDIALTONE 0x00000100
+
+#define LINEDEVSTATE_OTHER 0x00000001
+#define LINEDEVSTATE_RINGING 0x00000002
+#define LINEDEVSTATE_CONNECTED 0x00000004
+#define LINEDEVSTATE_DISCONNECTED 0x00000008
+#define LINEDEVSTATE_MSGWAITON 0x00000010
+#define LINEDEVSTATE_MSGWAITOFF 0x00000020
+#define LINEDEVSTATE_INSERVICE 0x00000040
+#define LINEDEVSTATE_OUTOFSERVICE 0x00000080
+#define LINEDEVSTATE_MAINTENANCE 0x00000100
+#define LINEDEVSTATE_OPEN 0x00000200
+#define LINEDEVSTATE_CLOSE 0x00000400
+#define LINEDEVSTATE_NUMCALLS 0x00000800
+#define LINEDEVSTATE_NUMCOMPLETIONS 0x00001000
+#define LINEDEVSTATE_TERMINALS 0x00002000
+#define LINEDEVSTATE_ROAMMODE 0x00004000
+#define LINEDEVSTATE_BATTERY 0x00008000
+#define LINEDEVSTATE_SIGNAL 0x00010000
+#define LINEDEVSTATE_DEVSPECIFIC 0x00020000
+#define LINEDEVSTATE_REINIT 0x00040000
+#define LINEDEVSTATE_LOCK 0x00080000
+
+#define LINEDEVSTATE_CAPSCHANGE 0x00100000
+#define LINEDEVSTATE_CONFIGCHANGE 0x00200000
+#define LINEDEVSTATE_TRANSLATECHANGE 0x00400000
+#define LINEDEVSTATE_COMPLCANCEL 0x00800000
+#define LINEDEVSTATE_REMOVED 0x01000000
+
+#define LINELOCATIONOPTION_PULSEDIAL 0x00000001
+
+
+#define LINEFEATURE_DEVSPECIFIC 0x00000001
+#define LINEFEATURE_DEVSPECIFICFEAT 0x00000002
+#define LINEFEATURE_FORWARD 0x00000004
+#define LINEFEATURE_MAKECALL 0x00000008
+#define LINEFEATURE_SETMEDIACONTROL 0x00000010
+#define LINEFEATURE_SETTERMINAL 0x00000020
+#define LINEFEATURE_SETDEVSTATUS 0x00000040
+#define LINEFEATURE_FORWARDFWD 0x00000080
+#define LINEFEATURE_FORWARDDND 0x00000100
+
+/* tapi callback messages */
+
+#define LINE_ADDRESSSTATE __MSABI_LONG(0)
+#define LINE_CALLINFO __MSABI_LONG(1)
+#define LINE_CALLSTATE __MSABI_LONG(2)
+#define LINE_CLOSE __MSABI_LONG(3)
+#define LINE_DEVSPECIFIC __MSABI_LONG(4)
+#define LINE_DEVSPECIFICFEATURE __MSABI_LONG(5)
+#define LINE_GATHERDIGITS __MSABI_LONG(6)
+#define LINE_GENERATE __MSABI_LONG(7)
+#define LINE_LINEDEVSTATE __MSABI_LONG(8)
+#define LINE_MONITORDIGITS __MSABI_LONG(9)
+#define LINE_MONITORMEDIA __MSABI_LONG(10)
+#define LINE_MONITORTONE __MSABI_LONG(11)
+#define LINE_REPLY __MSABI_LONG(12)
+#define LINE_REQUEST __MSABI_LONG(13)
+#define PHONE_BUTTON __MSABI_LONG(14)
+#define PHONE_CLOSE __MSABI_LONG(15)
+#define PHONE_DEVSPECIFIC __MSABI_LONG(16)
+#define PHONE_REPLY __MSABI_LONG(17)
+#define PHONE_STATE __MSABI_LONG(18)
+#define LINE_CREATE __MSABI_LONG(19)
+#define PHONE_CREATE __MSABI_LONG(20)
+
+#define LINE_AGENTSPECIFIC __MSABI_LONG(21)
+#define LINE_AGENTSTATUS __MSABI_LONG(22)
+#define LINE_APPNEWCALL __MSABI_LONG(23)
+#define LINE_PROXYREQUEST __MSABI_LONG(24)
+#define LINE_REMOVE __MSABI_LONG(25)
+#define PHONE_REMOVE __MSABI_LONG(26)
+/* these are used as Param1 of line_callstate messages */
+#define LINECALLSTATE_IDLE 0x00000001
+#define LINECALLSTATE_OFFERING 0x00000002
+#define LINECALLSTATE_ACCEPTED 0x00000004
+#define LINECALLSTATE_DIALTONE 0x00000008
+#define LINECALLSTATE_DIALING 0x00000010
+#define LINECALLSTATE_RINGBACK 0x00000020
+#define LINECALLSTATE_BUSY 0x00000040
+#define LINECALLSTATE_SPECIALINFO 0x00000080
+#define LINECALLSTATE_CONNECTED 0x00000100
+#define LINECALLSTATE_PROCEEDING 0x00000200
+#define LINECALLSTATE_ONHOLD 0x00000400
+#define LINECALLSTATE_CONFERENCED 0x00000800
+#define LINECALLSTATE_ONHOLDPENDCONF 0x00001000
+#define LINECALLSTATE_ONHOLDPENDTRANSFER 0x00002000
+#define LINECALLSTATE_DISCONNECTED 0x00004000
+#define LINECALLSTATE_UNKNOWN 0x00008000
+#define LINECONNECTEDMODE_ACTIVE 0x00000001
+#define LINECONNECTEDMODE_INACTIVE 0x00000002
+#define LINECONNECTEDMODE_ACTIVEHELD 0x00000004
+#define LINECONNECTEDMODE_INACTIVEHELD 0x00000008
+#define LINECONNECTEDMODE_CONFIRMED 0x00000010
+
+/* these are Param2 values for state_disconnected line_callstate messages */
+#define LINEDISCONNECTMODE_NORMAL 0x00000001
+#define LINEDISCONNECTMODE_UNKNOWN 0x00000002
+#define LINEDISCONNECTMODE_REJECT 0x00000004
+#define LINEDISCONNECTMODE_PICKUP 0x00000008
+#define LINEDISCONNECTMODE_FORWARDED 0x00000010
+#define LINEDISCONNECTMODE_BUSY 0x00000020
+#define LINEDISCONNECTMODE_NOANSWER 0x00000040
+#define LINEDISCONNECTMODE_BADADDRESS 0x00000080
+#define LINEDISCONNECTMODE_UNREACHABLE 0x00000100
+#define LINEDISCONNECTMODE_CONGESTION 0x00000200
+#define LINEDISCONNECTMODE_INCOMPATIBLE 0x00000400
+#define LINEDISCONNECTMODE_UNAVAIL 0x00000800
+#define LINEDISCONNECTMODE_NODIALTONE 0x00001000
+#define LINEDISCONNECTMODE_NUMBERCHANGED 0x00002000
+#define LINEDISCONNECTMODE_OUTOFORDER 0x00004000
+#define LINEDISCONNECTMODE_TEMPFAILURE 0x00008000
+#define LINEDISCONNECTMODE_QOSUNAVAIL 0x00010000
+#define LINEDISCONNECTMODE_BLOCKED 0x00020000
+#define LINEDISCONNECTMODE_DONOTDISTURB 0x00040000
+#define LINEDISCONNECTMODE_CANCELLED 0x00080000
+
+#define LINECALLSELECT_LINE 0x00000001
+#define LINECALLSELECT_ADDRESS 0x00000002
+#define LINECALLSELECT_CALL 0x00000004
+#define LINECALLSELECT_DEVICEID 0x00000008
+
+#define LINECALLPRIVILEGE_NONE 0x00000001
+#define LINECALLPRIVILEGE_MONITOR 0x00000002
+#define LINECALLPRIVILEGE_OWNER 0x00000004
+#define LINECALLFEATURE_ACCEPT 0x00000001
+#define LINECALLFEATURE_ADDTOCONF 0x00000002
+#define LINECALLFEATURE_ANSWER 0x00000004
+#define LINECALLFEATURE_BLINDTRANSFER 0x00000008
+#define LINECALLFEATURE_COMPLETECALL 0x00000010
+#define LINECALLFEATURE_COMPLETETRANSF 0x00000020
+#define LINECALLFEATURE_DIAL 0x00000040
+#define LINECALLFEATURE_DROP 0x00000080
+#define LINECALLFEATURE_GATHERDIGITS 0x00000100
+#define LINECALLFEATURE_GENERATEDIGITS 0x00000200
+#define LINECALLFEATURE_GENERATETONE 0x00000400
+#define LINECALLFEATURE_HOLD 0x00000800
+#define LINECALLFEATURE_MONITORDIGITS 0x00001000
+#define LINECALLFEATURE_MONITORMEDIA 0x00002000
+#define LINECALLFEATURE_MONITORTONES 0x00004000
+#define LINECALLFEATURE_PARK 0x00008000
+#define LINECALLFEATURE_PREPAREADDCONF 0x00010000
+#define LINECALLFEATURE_REDIRECT 0x00020000
+#define LINECALLFEATURE_REMOVEFROMCONF 0x00040000
+#define LINECALLFEATURE_SECURECALL 0x00080000
+#define LINECALLFEATURE_SENDUSERUSER 0x00100000
+#define LINECALLFEATURE_SETCALLPARAMS 0x00200000
+#define LINECALLFEATURE_SETMEDIACONTROL 0x00400000
+#define LINECALLFEATURE_SETTERMINAL 0x00800000
+#define LINECALLFEATURE_SETUPCONF 0x01000000
+#define LINECALLFEATURE_SETUPTRANSFER 0x02000000
+#define LINECALLFEATURE_SWAPHOLD 0x04000000
+#define LINECALLFEATURE_UNHOLD 0x08000000
+#define LINECALLFEATURE_RELEASEUSERUSERINFO 0x10000000
+
+typedef struct lineaddresscaps_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwLineDeviceID;
+ DWORD dwAddressSize;
+ DWORD dwAddressOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwAddressSharing;
+ DWORD dwAddressStates;
+ DWORD dwCallInfoStates;
+ DWORD dwCallerIDFlags;
+ DWORD dwCalledIDFlags;
+ DWORD dwConnectedIDFlags;
+ DWORD dwRedirectionIDFlags;
+ DWORD dwRedirectingIDFlags;
+ DWORD dwCallStates;
+ DWORD dwDialToneModes;
+ DWORD dwBusyModes;
+ DWORD dwSpecialInfo;
+ DWORD dwDisconnectModes;
+ DWORD dwMaxNumActiveCalls;
+ DWORD dwMaxNumOnHoldCalls;
+ DWORD dwMaxNumOnHoldPendingCalls;
+ DWORD dwMaxNumConference;
+ DWORD dwMaxNumTransConf;
+ DWORD dwAddrCapFlags;
+ DWORD dwCallFeatures;
+ DWORD dwRemoveFromConfCaps;
+ DWORD dwRemoveFromConfState;
+ DWORD dwTransferModes;
+ DWORD dwParkModes;
+ DWORD dwForwardModes;
+ DWORD dwMaxForwardEntries;
+ DWORD dwMaxSpecificEntries;
+ DWORD dwMinFwdNumRings;
+ DWORD dwMaxFwdNumRings;
+ DWORD dwMaxCallCompletions;
+ DWORD dwCallCompletionConds;
+ DWORD dwCallCompletionModes;
+ DWORD dwNumCompletionMessages;
+ DWORD dwCompletionMsgTextEntrySize;
+ DWORD dwCompletionMsgTextSize;
+ DWORD dwCompletionMsgTextOffset;
+ DWORD dwAddressFeatures;
+} LINEADDRESSCAPS, *LPLINEADDRESSCAPS;
+
+typedef struct lineaddressstatus_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwNumInUse;
+ DWORD dwNumActiveCalls;
+ DWORD dwNumOnHoldCalls;
+ DWORD dwNumOnHoldPendCalls;
+ DWORD dwAddressFeatures;
+ DWORD dwNumRingsNoAnswer;
+ DWORD dwForwardNumEntries;
+ DWORD dwForwardSize;
+ DWORD dwForwardOffset;
+ DWORD dwTerminalModesSize;
+ DWORD dwTerminalModesOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} LINEADDRESSSTATUS, *LPLINEADDRESSSTATUS;
+
+typedef struct linedialparams_tag {
+ DWORD dwDialPause;
+ DWORD dwDialSpeed;
+ DWORD dwDigitDuration;
+ DWORD dwWaitForDialtone;
+} LINEDIALPARAMS, *LPLINEDIALPARAMS;
+
+typedef struct linecallinfo_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ HLINE hLine;
+ DWORD dwLineDeviceID;
+ DWORD dwAddressID;
+ DWORD dwBearerMode;
+ DWORD dwRate;
+ DWORD dwMediaMode;
+ DWORD dwAppSpecific;
+ DWORD dwCallID;
+ DWORD dwRelatedCallID;
+ DWORD dwCallParamFlags;
+ DWORD dwCallStates;
+ DWORD dwMonitorDigitModes;
+ DWORD dwMonitorMediaModes;
+ LINEDIALPARAMS DialParams;
+ DWORD dwOrigin;
+ DWORD dwReason;
+ DWORD dwCompletionID;
+ DWORD dwNumOwners;
+ DWORD dwNumMonitors;
+ DWORD dwCountryCode;
+ DWORD dwTrunk;
+ DWORD dwCallerIDFlags;
+ DWORD dwCallerIDSize;
+ DWORD dwCallerIDOffset;
+ DWORD dwCallerIDNameSize;
+ DWORD dwCallerIDNameOffset;
+ DWORD dwCalledIDFlags;
+ DWORD dwCalledIDSize;
+ DWORD dwCalledIDOffset;
+ DWORD dwCalledIDNameSize;
+ DWORD dwCalledIDNameOffset;
+ DWORD dwConnectedIDFlags;
+ DWORD dwConnectedIDSize;
+ DWORD dwConnectedIDOffset;
+ DWORD dwConnectedIDNameSize;
+ DWORD dwConnectedIDNameOffset;
+ DWORD dwRedirectionIDFlags;
+ DWORD dwRedirectionIDSize;
+ DWORD dwRedirectionIDOffset;
+ DWORD dwRedirectionIDNameSize;
+ DWORD dwRedirectionIDNameOffset;
+ DWORD dwRedirectingIDFlags;
+ DWORD dwRedirectingIDSize;
+ DWORD dwRedirectingIDOffset;
+ DWORD dwRedirectingIDNameSize;
+ DWORD dwRedirectingIDNameOffset;
+ DWORD dwAppNameSize;
+ DWORD dwAppNameOffset;
+ DWORD dwDisplayableAddressSize;
+ DWORD dwDisplayableAddressOffset;
+ DWORD dwCalledPartySize;
+ DWORD dwCalledPartyOffset;
+ DWORD dwCommentSize;
+ DWORD dwCommentOffset;
+ DWORD dwDisplaySize;
+ DWORD dwDisplayOffset;
+ DWORD dwUserUserInfoSize;
+ DWORD dwUserUserInfoOffset;
+ DWORD dwHighLevelCompSize;
+ DWORD dwHighLevelCompOffset;
+ DWORD dwLowLevelCompSize;
+ DWORD dwLowLevelCompOffset;
+ DWORD dwChargingInfoSize;
+ DWORD dwChargingInfoOffset;
+ DWORD dwTerminalModesSize;
+ DWORD dwTerminalModesOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} LINECALLINFO, *LPLINECALLINFO;
+
+typedef struct linecalllist_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwCallsNumEntries;
+ DWORD dwCallsSize;
+ DWORD dwCallsOffset;
+} LINECALLLIST, *LPLINECALLLIST;
+
+typedef struct linecallparams_tag {
+ DWORD dwTotalSize;
+ DWORD dwBearerMode;
+ DWORD dwMinRate;
+ DWORD dwMaxRate;
+ DWORD dwMediaMode;
+ DWORD dwCallParamFlags;
+ DWORD dwAddressMode;
+ DWORD dwAddressID;
+ LINEDIALPARAMS DialParams;
+ DWORD dwOrigAddressSize;
+ DWORD dwOrigAddressOffset;
+ DWORD dwDisplayableAddressSize;
+ DWORD dwDisplayableAddressOffset;
+ DWORD dwCalledPartySize;
+ DWORD dwCalledPartyOffset;
+ DWORD dwCommentSize;
+ DWORD dwCommentOffset;
+ DWORD dwUserUserInfoSize;
+ DWORD dwUserUserInfoOffset;
+ DWORD dwHighLevelCompSize;
+ DWORD dwHighLevelCompOffset;
+ DWORD dwLowLevelCompSize;
+ DWORD dwLowLevelCompOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} LINECALLPARAMS, *LPLINECALLPARAMS;
+
+typedef struct linecallstatus_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwCallState;
+ DWORD dwCallStateMode;
+ DWORD dwCallPrivilege;
+ DWORD dwCallFeatures;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} LINECALLSTATUS, *LPLINECALLSTATUS;
+
+typedef struct linecountrylist_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwNumCountries;
+ DWORD dwCountryListSize;
+ DWORD dwCountryListOffset;
+} LINECOUNTRYLIST, *LPLINECOUNTRYLIST;
+
+typedef struct linecountryentry_tag {
+ DWORD dwCountryID;
+ DWORD dwCountryCode;
+ DWORD dwNextCountryID;
+ DWORD dwCountryNameSize;
+ DWORD dwCountryNameOffset;
+ DWORD dwSameAreaRuleSize;
+ DWORD dwSameAreaRuleOffset;
+ DWORD dwLongDistanceRuleSize;
+ DWORD dwLongDistanceRuleOffset;
+ DWORD dwInternationalRuleSize;
+ DWORD dwInternationalRuleOffset;
+} LINECOUNTRYENTRY, *LPLINECOUNTRYENTRY;
+
+typedef struct linedevcaps_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwProviderInfoSize;
+ DWORD dwProviderInfoOffset;
+ DWORD dwSwitchInfoSize;
+ DWORD dwSwitchInfoOffset;
+ DWORD dwPermanentLineID;
+ DWORD dwLineNameSize;
+ DWORD dwLineNameOffset;
+ DWORD dwStringFormat;
+ DWORD dwAddressModes;
+ DWORD dwNumAddresses;
+ DWORD dwBearerModes;
+ DWORD dwMaxRate;
+ DWORD dwMediaModes;
+ DWORD dwGenerateToneModes;
+ DWORD dwGenerateToneMaxNumFreq;
+ DWORD dwGenerateDigitModes;
+ DWORD dwMonitorToneMaxNumFreq;
+ DWORD dwMonitorToneMaxNumEntries;
+ DWORD dwMonitorDigitModes;
+ DWORD dwGatherDigitsMinTimeout;
+ DWORD dwGatherDigitsMaxTimeout;
+ DWORD dwMedCtlDigitMaxListSize;
+ DWORD dwMedCtlMediaMaxListSize;
+ DWORD dwMedCtlToneMaxListSize;
+ DWORD dwMedCtlCallStateMaxListSize;
+ DWORD dwDevCapFlags;
+ DWORD dwMaxNumActiveCalls;
+ DWORD dwAnswerMode;
+ DWORD dwRingModes;
+ DWORD dwLineStates;
+ DWORD dwUUIAcceptSize;
+ DWORD dwUUIAnswerSize;
+ DWORD dwUUIMakeCallSize;
+ DWORD dwUUIDropSize;
+ DWORD dwUUISendUserUserInfoSize;
+ DWORD dwUUICallInfoSize;
+ LINEDIALPARAMS MinDialParams;
+ LINEDIALPARAMS MaxDialParams;
+ LINEDIALPARAMS DefaultDialParams;
+ DWORD dwNumTerminals;
+ DWORD dwTerminalCapsSize;
+ DWORD dwTerminalCapsOffset;
+ DWORD dwTerminalTextEntrySize;
+ DWORD dwTerminalTextSize;
+ DWORD dwTerminalTextOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwLineFeatures;
+} LINEDEVCAPS, *LPLINEDEVCAPS;
+
+typedef struct linedevstatus_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwNumOpens;
+ DWORD dwOpenMediaModes;
+ DWORD dwNumActiveCalls;
+ DWORD dwNumOnHoldCalls;
+ DWORD dwNumOnHoldPendCalls;
+ DWORD dwLineFeatures;
+ DWORD dwNumCallCompletions;
+ DWORD dwRingMode;
+ DWORD dwSignalLevel;
+ DWORD dwBatteryLevel;
+ DWORD dwRoamMode;
+ DWORD dwDevStatusFlags;
+ DWORD dwTerminalModesSize;
+ DWORD dwTerminalModesOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} LINEDEVSTATUS, *LPLINEDEVSTATUS;
+
+typedef struct lineextensionid_tag {
+ DWORD dwExtensionID0;
+ DWORD dwExtensionID1;
+ DWORD dwExtensionID2;
+ DWORD dwExtensionID3;
+} LINEEXTENSIONID, *LPLINEEXTENSIONID;
+
+typedef struct lineforward_tag {
+ DWORD dwForwardMode;
+ DWORD dwCallerAddressSize;
+ DWORD dwCallerAddressOffset;
+ DWORD dwDestCountryCode;
+ DWORD dwDestAddressSize;
+ DWORD dwDestAddressOffset;
+} LINEFORWARD, *LPLINEFORWARD;
+
+typedef struct lineforwardlist_tag {
+ DWORD dwTotalSize;
+ DWORD dwNumEntries;
+ LINEFORWARD ForwardList[1];
+} LINEFORWARDLIST, *LPLINEFORWARDLIST;
+
+typedef struct linegeneratetone_tag {
+ DWORD dwFrequency;
+ DWORD dwCadenceOn;
+ DWORD dwCadenceOff;
+ DWORD dwVolume;
+} LINEGENERATETONE, *LPLINEGENERATETONE;
+
+typedef struct lineinitializeexparams_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwOptions;
+ union {
+ HANDLE hEvent;
+ HANDLE hCompletionPort;
+ } Handles;
+ DWORD dwCompletionKey;
+} LINEINITIALIZEEXPARAMS, *LPLINEINITIALIZEEXPARAMS;
+
+typedef struct linemediacontrolcallstate_tag {
+ DWORD dwCallStates;
+ DWORD dwMediaControl;
+} LINEMEDIACONTROLCALLSTATE, *LPLINEMEDIACONTROLCALLSTATE;
+
+typedef struct linemediacontroldigit_tag {
+ DWORD dwDigit;
+ DWORD dwDigitModes;
+ DWORD dwMediaControl;
+} LINEMEDIACONTROLDIGIT, *LPLINEMEDIACONTROLDIGIT;
+
+typedef struct linemediacontrolmedia_tag {
+ DWORD dwMediaModes;
+ DWORD dwDuration;
+ DWORD dwMediaControl;
+} LINEMEDIACONTROLMEDIA, *LPLINEMEDIACONTROLMEDIA;
+
+typedef struct linemediacontroltone_tag {
+ DWORD dwAppSpecific;
+ DWORD dwDuration;
+ DWORD dwFrequency1;
+ DWORD dwFrequency2;
+ DWORD dwFrequency3;
+ DWORD dwMediaControl;
+} LINEMEDIACONTROLTONE, *LPLINEMEDIACONTROLTONE;
+
+typedef struct linemonitortone_tag {
+ DWORD dwAppSpecific;
+ DWORD dwDuration;
+ DWORD dwFrequency1;
+ DWORD dwFrequency2;
+ DWORD dwFrequency3;
+} LINEMONITORTONE, *LPLINEMONITORTONE;
+
+typedef struct lineproviderlist_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwNumProviders;
+ DWORD dwProviderListSize;
+ DWORD dwProviderListOffset;
+} LINEPROVIDERLIST, *LPLINEPROVIDERLIST;
+
+typedef struct linetranslatecaps_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwNumLocations;
+ DWORD dwLocationListSize;
+ DWORD dwLocationListOffset;
+ DWORD dwCurrentLocationID;
+ DWORD dwNumCards;
+ DWORD dwCardListSize;
+ DWORD dwCardListOffset;
+ DWORD dwCurrentPreferredCardID;
+} LINETRANSLATECAPS, *LPLINETRANSLATECAPS;
+
+typedef struct linelocationentry_tag {
+ DWORD dwPermanentLocationID;
+ DWORD dwLocationNameSize;
+ DWORD dwLocationNameOffset;
+ DWORD dwCountryCode;
+ DWORD dwCityCodeSize;
+ DWORD dwCityCodeOffset;
+ DWORD dwPreferredCardID;
+ DWORD dwLocalAccessCodeSize;
+ DWORD dwLocalAccessCodeOffset;
+ DWORD dwLongDistanceAccessCodeSize;
+ DWORD dwLongDistanceAccessCodeOffset;
+ DWORD dwTollPrefixListSize;
+ DWORD dwTollPrefixListOffset;
+ DWORD dwCountryID;
+ DWORD dwOptions;
+ DWORD dwCancelCallWaitingSize;
+ DWORD dwCancelCallWaitingOffset;
+} LINELOCATIONENTRY, *LPLINELOCATIONENTRY;
+
+typedef struct linecardentry_tag {
+ DWORD dwPermanentCardID;
+ DWORD dwCardNameSize;
+ DWORD dwCardNameOffset;
+ DWORD dwCardNumberDigits;
+ DWORD dwSameAreaRuleSize;
+ DWORD dwSameAreaRuleOffset;
+ DWORD dwLongDistanceRuleSize;
+ DWORD dwLongDistanceRuleOffset;
+ DWORD dwInternationalRuleSize;
+ DWORD dwInternationalRuleOffset;
+ DWORD dwOptions;
+} LINECARDENTRY, *LPLINECARDENTRY;
+
+
+typedef struct linetranslateoutput_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwDialableStringSize;
+ DWORD dwDialableStringOffset;
+ DWORD dwDisplayableStringSize;
+ DWORD dwDisplayableStringOffset;
+ DWORD dwCurrentCountry;
+ DWORD dwDestCountry;
+ DWORD dwTranslateResults;
+} LINETRANSLATEOUTPUT, *LPLINETRANSLATEOUTPUT;
+
+typedef struct linemessage_tag {
+ DWORD hDevice;
+ DWORD dwMessageID;
+ DWORD_PTR dwCallbackInstance;
+ DWORD_PTR dwParam1;
+ DWORD_PTR dwParam2;
+ DWORD_PTR dwParam3;
+} LINEMESSAGE, *LPLINEMESSAGE;
+
+typedef void (CALLBACK *LINECALLBACK)(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD);
+
+typedef struct _PHONEAPP {
+ int dummy;
+} PHONEAPP, *LPPHONEAPP;
+
+typedef struct _PHONE {
+ DWORD dwRingMode;
+ DWORD dwVolume;
+} PHONE, *LPPHONE;
+
+typedef struct phonebuttoninfo_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwButtonMode;
+ DWORD dwButtonFunction;
+ DWORD dwButtonTextSize;
+ DWORD dwButtonTextOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwButtonState;
+} PHONEBUTTONINFO, *LPPHONEBUTTONINFO;
+
+typedef struct phonecaps_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwProviderInfoSize;
+ DWORD dwProviderInfoOffset;
+ DWORD dwPhoneInfoSize;
+ DWORD dwPhoneInfoOffset;
+ DWORD dwPermanentPhoneID;
+ DWORD dwPhoneNameSize;
+ DWORD dwPhoneNameOffset;
+ DWORD dwStringFormat;
+ DWORD dwPhoneStates;
+ DWORD dwHookSwitchDevs;
+ DWORD dwHandsetHookSwitchModes;
+ DWORD dwSpeakerHookSwitchModes;
+ DWORD dwHeadsetHookSwitchModes;
+ DWORD dwVolumeFlags;
+ DWORD dwGainFlags;
+ DWORD dwDisplayNumRows;
+ DWORD dwDisplayNumColumns;
+ DWORD dwNumRingModes;
+ DWORD dwNumButtonLamps;
+ DWORD dwButtonModesSize;
+ DWORD dwButtonModesOffset;
+ DWORD dwButtonFunctionsSize;
+ DWORD dwButtonFunctionsOffset;
+ DWORD dwLampModesSize;
+ DWORD dwLampModesOffset;
+ DWORD dwNumSetData;
+ DWORD dwSetDataSize;
+ DWORD dwSetDataOffset;
+ DWORD dwNumGetData;
+ DWORD dwGetDataSize;
+ DWORD dwGetDataOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} PHONECAPS, *LPPHONECAPS;
+
+typedef struct phoneextensionid_tag {
+ DWORD dwExtensionID0;
+ DWORD dwExtensionID1;
+ DWORD dwExtensionID2;
+ DWORD dwExtensionID3;
+} PHONEEXTENSIONID, *LPPHONEEXTENSIONID;
+
+typedef struct phoneinitializeexparams_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwOptions;
+ union {
+ HANDLE hEvent;
+ HANDLE hCompletionPort;
+ } Handles;
+ DWORD dwCompletionKey;
+} PHONEINITIALIZEEXPARAMS, *LPPHONEINITIALIZEEXPARAMS;
+
+typedef struct phonemessage_tag {
+ DWORD hDevice;
+ DWORD dwMessageID;
+ DWORD_PTR dwCallbackInstance;
+ DWORD_PTR dwParam1;
+ DWORD_PTR dwParam2;
+ DWORD_PTR dwParam3;
+} PHONEMESSAGE, *LPPHONEMESSAGE;
+
+typedef struct phonestatus_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwStatusFlags;
+ DWORD dwNumOwners;
+ DWORD dwRingMOde;
+ DWORD dwRingVolume;
+ DWORD dwHandsetHookSwitchMode;
+ DWORD dwHandsetVolume;
+ DWORD dwHandsetGain;
+ DWORD dwSpeakerHookSwitchMode;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerGain;
+ DWORD dwHeadsetHookSwitchMode;
+ DWORD dwHeadsetVolume;
+ DWORD dwHeadsetGain;
+ DWORD dwDisplaySize;
+ DWORD dwDisplayOffset;
+ DWORD dwLampModesSize;
+ DWORD dwLampModesOffset;
+ DWORD dwOwnerNameSize;
+ DWORD dwOwnerNameOffset;
+ DWORD dwDevSpecificSize;
+ DWORD dwDevSpecificOffset;
+} PHONESTATUS, *LPPHONESTATUS;
+
+typedef void (CALLBACK *PHONECALLBACK)(HANDLE, DWORD, DWORD, DWORD, DWORD, DWORD);
+
+typedef struct varstring_tag {
+ DWORD dwTotalSize;
+ DWORD dwNeededSize;
+ DWORD dwUsedSize;
+ DWORD dwStringFormat;
+ DWORD dwStringSize;
+ DWORD dwStringOffset;
+} VARSTRING, *LPVARSTRING;
+
+/* line functions */
+DWORD WINAPI lineAccept(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineAddProviderA(LPCSTR,HWND,LPDWORD);
+DWORD WINAPI lineAddProviderW(LPCWSTR,HWND,LPDWORD);
+#define lineAddProvider WINELIB_NAME_AW(lineAddProvider)
+DWORD WINAPI lineAddToConference(HCALL,HCALL);
+DWORD WINAPI lineAnswer(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineBlindTransfer(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineClose(HLINE);
+DWORD WINAPI lineCompleteCall(HCALL,LPDWORD,DWORD,DWORD);
+DWORD WINAPI lineCompleteTransfer(HCALL,HCALL,LPHCALL,DWORD);
+DWORD WINAPI lineConfigDialog(DWORD,HWND,LPCSTR);
+DWORD WINAPI lineConfigDialogEdit(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
+DWORD WINAPI lineConfigProvider(HWND,DWORD);
+DWORD WINAPI lineDeallocateCall(HCALL);
+DWORD WINAPI lineDevSpecific(HLINE,DWORD,HCALL,LPVOID,DWORD);
+DWORD WINAPI lineDevSpecificFeature(HLINE,DWORD,LPVOID,DWORD);
+DWORD WINAPI lineDial(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineDrop(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineForward(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineGatherDigits(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
+DWORD WINAPI lineGenerateDigits(HCALL,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGenerateTone(HCALL,DWORD,DWORD,DWORD,LPLINEGENERATETONE);
+DWORD WINAPI lineGetAddressCaps(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
+DWORD WINAPI lineGetAddressID(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGetAddressStatus(HLINE,DWORD,LPLINEADDRESSSTATUS);
+DWORD WINAPI lineGetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);
+DWORD WINAPI lineGetCallInfo(HCALL,LPLINECALLINFO);
+DWORD WINAPI lineGetCallStatus(HCALL,LPLINECALLSTATUS);
+DWORD WINAPI lineGetConfRelatedCalls(HCALL,LPLINECALLLIST);
+DWORD WINAPI lineGetCountry(DWORD,DWORD,LPLINECOUNTRYLIST);
+DWORD WINAPI lineGetDevCapsA(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
+DWORD WINAPI lineGetDevCapsW(HLINEAPP,DWORD,DWORD,DWORD,LPLINEDEVCAPS);
+#define lineGetDevCaps WINELIB_NAME_AW(lineGetDevCaps);
+DWORD WINAPI lineGetDevConfig(DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetIDA(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetIDW(HLINE,DWORD,HCALL,DWORD,LPVARSTRING,LPCWSTR);
+#define lineGetID WINELIB_NAME_AW(lineGetID);
+DWORD WINAPI lineGetIcon(DWORD,LPCSTR,HICON *);
+DWORD WINAPI lineGetLineDevStatus(HLINE,LPLINEDEVSTATUS);
+DWORD WINAPI lineGetNewCalls(HLINE,DWORD,DWORD,LPLINECALLLIST);
+DWORD WINAPI lineGetNumRings(HLINE,DWORD,LPDWORD);
+DWORD WINAPI lineGetProviderListA(DWORD,LPLINEPROVIDERLIST);
+DWORD WINAPI lineGetProviderListW(DWORD,LPLINEPROVIDERLIST);
+#define lineGetProviderList WINELIB_NAME_AW(lineGetProviderList)
+DWORD WINAPI lineGetRequest(HLINEAPP,DWORD,LPVOID);
+DWORD WINAPI lineGetStatusMessages(HLINE,LPDWORD,LPDWORD);
+DWORD WINAPI lineGetTranslateCaps(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
+DWORD WINAPI lineHandoff(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineHold(HCALL);
+DWORD WINAPI lineInitialize(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD);
+LONG WINAPI lineInitializeExA(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
+LONG WINAPI lineInitializeExW(LPHLINEAPP,HINSTANCE,LINECALLBACK,LPCWSTR,LPDWORD,LPDWORD,LPLINEINITIALIZEEXPARAMS);
+#define lineInitializeEx WINELIB_NAME_AW(lineInitializeEx)
+DWORD WINAPI lineMakeCallA(HLINE,LPHCALL,LPCSTR,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineMakeCallW(HLINE,LPHCALL,LPCWSTR,DWORD,LPLINECALLPARAMS);
+#define lineMakeCall WINELIB_NAMEAW(lineMakeCall);
+DWORD WINAPI lineMonitorDigits(HCALL,DWORD);
+DWORD WINAPI lineMonitorMedia(HCALL,DWORD);
+DWORD WINAPI lineMonitorTones(HCALL,LPLINEMONITORTONE,DWORD);
+DWORD WINAPI lineNegotiateAPIVersion(HLINEAPP,DWORD,DWORD,DWORD,LPDWORD,LPLINEEXTENSIONID);
+DWORD WINAPI lineNegotiateExtVersion(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
+DWORD WINAPI lineOpen(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI linePark(HCALL,DWORD,LPCSTR,LPVARSTRING);
+DWORD WINAPI linePickup(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
+DWORD WINAPI linePrepareAddToConference(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineRedirect(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineRegisterRequestRecipient(HLINEAPP,DWORD,DWORD,DWORD);
+DWORD WINAPI lineReleaseUserUserInfo(HCALL);
+DWORD WINAPI lineRemoveFromConference(HCALL);
+DWORD WINAPI lineRemoveProvider(DWORD,HWND);
+DWORD WINAPI lineSecureCall(HCALL);
+DWORD WINAPI lineSendUserUserInfo(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineSetAppPriority(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetAppSpecific(HCALL,DWORD);
+DWORD WINAPI lineSetCallParams(HCALL,DWORD,DWORD,DWORD,LPLINEDIALPARAMS);
+DWORD WINAPI lineSetCallPrivilege(HCALL,DWORD);
+DWORD WINAPI lineSetCurrentLocation(HLINEAPP,DWORD);
+DWORD WINAPI lineSetDevConfig(DWORD,LPVOID,DWORD,LPCSTR);
+DWORD WINAPI lineSetMediaControl(HLINE,DWORD,HCALL,DWORD,LPLINEMEDIACONTROLDIGIT,DWORD,LPLINEMEDIACONTROLMEDIA,DWORD,LPLINEMEDIACONTROLTONE,DWORD,LPLINEMEDIACONTROLCALLSTATE,DWORD);
+DWORD WINAPI lineSetMediaMode(HCALL,DWORD);
+DWORD WINAPI lineSetNumRings(HLINE,DWORD,DWORD);
+DWORD WINAPI lineSetStatusMessages(HLINE,DWORD,DWORD);
+DWORD WINAPI lineSetTerminal(HLINE,DWORD,HCALL,DWORD,DWORD,DWORD,DWORD);
+DWORD WINAPI lineSetTollList(HLINEAPP,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetupConference(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineSetupTransfer(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineShutdown(HLINEAPP);
+DWORD WINAPI lineSwapHold(HCALL,HCALL);
+DWORD WINAPI lineTranslateAddress(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
+DWORD WINAPI lineTranslateDialog(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
+DWORD WINAPI lineUncompleteCall(HLINE,DWORD);
+DWORD WINAPI lineUnHold(HCALL);
+DWORD WINAPI lineUnpark(HLINE,DWORD,LPHCALL,LPCSTR);
+
+DWORD WINAPI lineBlindTransferA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineConfigDialogA(DWORD,HWND,LPCSTR);
+DWORD WINAPI lineConfigDialogEditA(DWORD,HWND,LPCSTR,LPVOID const,DWORD,LPVARSTRING);
+DWORD WINAPI lineDialA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineForwardA(HLINE,DWORD,DWORD,LPLINEFORWARDLIST,DWORD,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineGatherDigitsA(HCALL,DWORD,LPSTR,DWORD,LPCSTR,DWORD,DWORD);
+DWORD WINAPI lineGenerateDigitsA(HCALL,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGetAddressCapsA(HLINEAPP,DWORD,DWORD,DWORD,DWORD,LPLINEADDRESSCAPS);
+DWORD WINAPI lineGetAddressIDA(HLINE,LPDWORD,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineGetAddressStatusA(HLINE,DWORD,LPLINEADDRESSSTATUS);
+DWORD WINAPI lineGetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPVARSTRING,LPDWORD);
+DWORD WINAPI lineGetCallInfoA(HCALL,LPLINECALLINFO);
+DWORD WINAPI lineGetCountryA(DWORD,DWORD,LPLINECOUNTRYLIST);
+DWORD WINAPI lineGetDevConfigA(DWORD,LPVARSTRING,LPCSTR);
+DWORD WINAPI lineGetIconA(DWORD,LPCSTR,HICON *);
+DWORD WINAPI lineGetLineDevStatusA(HLINE,LPLINEDEVSTATUS);
+DWORD WINAPI lineGetRequestA(HLINEAPP,DWORD,LPVOID);
+DWORD WINAPI lineGetTranslateCapsA(HLINEAPP,DWORD,LPLINETRANSLATECAPS);
+DWORD WINAPI lineHandoffA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineOpenA(HLINEAPP,DWORD,LPHLINE,DWORD,DWORD,DWORD,DWORD,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineParkA(HCALL,DWORD,LPCSTR,LPVARSTRING);
+DWORD WINAPI linePickupA(HLINE,DWORD,LPHCALL,LPCSTR,LPCSTR);
+DWORD WINAPI linePrepareAddToConferenceA(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineRedirectA(HCALL,LPCSTR,DWORD);
+DWORD WINAPI lineSetAppPriorityA(LPCSTR,DWORD,LPLINEEXTENSIONID const,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetDevConfigA(DWORD,LPVOID,DWORD,LPCSTR);
+DWORD WINAPI lineSetTollListA(HLINEAPP,DWORD,LPCSTR,DWORD);
+DWORD WINAPI lineSetupConferenceA(HCALL,HLINE,LPHCALL,LPHCALL,DWORD,LPLINECALLPARAMS);
+DWORD WINAPI lineSetupTransferA(HCALL,LPHCALL,LPLINECALLPARAMS);
+DWORD WINAPI lineTranslateAddressA(HLINEAPP,DWORD,DWORD,LPCSTR,DWORD,DWORD,LPLINETRANSLATEOUTPUT);
+DWORD WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
+DWORD WINAPI lineUnhold(HCALL);
+DWORD WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR);
+
+/* phone functions */
+DWORD WINAPI phoneClose(HPHONE);
+DWORD WINAPI phoneConfigDialog(DWORD,HWND,LPCSTR);
+DWORD WINAPI phoneDevSpecific(HPHONE,LPVOID,DWORD);
+DWORD WINAPI phoneGetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
+DWORD WINAPI phoneGetData(HPHONE,DWORD,LPVOID,DWORD);
+DWORD WINAPI phoneGetDevCaps(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
+DWORD WINAPI phoneGetDisplay(HPHONE,LPVARSTRING);
+DWORD WINAPI phoneGetGain(HPHONE,DWORD,LPDWORD);
+DWORD WINAPI phoneGetHookSwitch(HPHONE,LPDWORD);
+DWORD WINAPI phoneGetID(HPHONE,LPVARSTRING,LPCSTR);
+DWORD WINAPI phoneGetIcon(DWORD,LPCSTR,HICON *);
+DWORD WINAPI phoneGetLamp(HPHONE,DWORD,LPDWORD);
+DWORD WINAPI phoneGetRing(HPHONE,LPDWORD,LPDWORD);
+DWORD WINAPI phoneGetStatus(HPHONE,LPPHONESTATUS);
+DWORD WINAPI phoneGetStatusMessages(HPHONE,LPDWORD,LPDWORD,LPDWORD);
+DWORD WINAPI phoneGetVolume(HPHONE,DWORD,LPDWORD);
+DWORD WINAPI phoneInitialize(LPHPHONEAPP,HINSTANCE,PHONECALLBACK,LPCSTR,LPDWORD);
+DWORD WINAPI phoneNegotiateAPIVersion(HPHONEAPP,DWORD,DWORD,DWORD,LPDWORD,LPPHONEEXTENSIONID);
+DWORD WINAPI phoneNegotiateExtVersion(HPHONEAPP,DWORD,DWORD,DWORD,DWORD,LPDWORD);
+DWORD WINAPI phoneOpen(HPHONEAPP,DWORD,LPHPHONE,DWORD,DWORD,DWORD,DWORD);
+DWORD WINAPI phoneSetButtonInfo(HPHONE,DWORD,LPPHONEBUTTONINFO);
+DWORD WINAPI phoneSetData(HPHONE,DWORD,LPVOID,DWORD);
+DWORD WINAPI phoneSetDisplay(HPHONE,DWORD,DWORD,LPCSTR,DWORD);
+DWORD WINAPI phoneSetGain(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetHookSwitch(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetLamp(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetRing(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneSetStatusMessages(HPHONE,DWORD,DWORD,DWORD);
+DWORD WINAPI phoneSetVolume(HPHONE,DWORD,DWORD);
+DWORD WINAPI phoneShutdown(HPHONEAPP);
+
+DWORD WINAPI phoneConfigDialogA(DWORD,HWND,LPCSTR);
+DWORD WINAPI phoneGetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);
+DWORD WINAPI phoneGetDevCapsA(HPHONEAPP,DWORD,DWORD,DWORD,LPPHONECAPS);
+DWORD WINAPI phoneGetIDA(HPHONE,LPVARSTRING,LPCSTR);
+DWORD WINAPI phoneGetIconA(DWORD,LPCSTR,HICON *);
+DWORD WINAPI phoneGetStatusA(HPHONE,LPPHONESTATUS);
+DWORD WINAPI phoneSetButtonInfoA(HPHONE,DWORD,LPPHONEBUTTONINFO);
+
+/* "assisted" functions */
+DWORD WINAPI tapiGetLocationInfo(LPSTR,LPSTR);
+DWORD WINAPI tapiRequestMakeCall(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+
+DWORD WINAPI tapiGetLocationInfoA(LPSTR,LPSTR);
+DWORD WINAPI tapiRequestMakeCallA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_TAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h
new file mode 100644
index 00000000..36403857
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tchar.h
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 1998 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TCHAR_H
+#define __WINE_TCHAR_H
+
+#ifdef __WINESRC__
+#error Wine should not include tchar.h internally
+#endif
+
+#if defined(_UNICODE) || defined(_MBCS)
+#error You must use msvcrt when building in Unicode/MBCS mode
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*****************************************************************************
+ * tchar routines
+ */
+#define _strdec(start,current) ((start)<(current) ? ((char*)(current))-1 : NULL)
+#define _strinc(current) (((char*)(current))+1)
+#define _strncnt(str,max) (strlen(str)>(max) ? (max) : strlen(str))
+#define _strnextc(str) ((unsigned int)*(str))
+#define _strninc(str,n) (((char*)(str))+(n))
+#define _strspnp(s1,s2) (*((s1)+=strspn((s1),(s2))) ? (s1) : NULL)
+
+
+/*****************************************************************************
+ * tchar mappings
+ */
+#ifndef _UNICODE
+# ifndef _MBCS
+# include <string.h>
+# define WINE_tchar_routine(std,mbcs,unicode) std
+# else
+# include <mbstring.h>
+# define WINE_tchar_routine(std,mbcs,unicode) mbcs
+# endif
+#else /* _UNICODE */
+# include <wchar.h>
+# define WINE_tchar_routine(std,mbcs,unicode) unicode
+#endif
+
+#define WINE_tchar_true(a) (1)
+#define WINE_tchar_false(a) (0)
+#define WINE_tchar_tclen(a) (1)
+#define WINE_tchar_tccpy(a,b) do { *(a)=*(b); } while (0)
+
+#define __targv WINE_tchar_routine(__argv, __argv, __wargv)
+#define _fgettc WINE_tchar_routine(fgetc, fgetc, fgetwc)
+#define _fgettchar WINE_tchar_routine(fgetchar, fgetchar, _fgetwchar)
+#define _fgetts WINE_tchar_routine(fgets, fgets, fgetws)
+#define _fputtc WINE_tchar_routine(fputc, fputc, fputwc)
+#define _fputtchar WINE_tchar_routine(fputchar, fputchar, _fputwchar)
+#define _fputts WINE_tchar_routine(fputs, fputs, fputws)
+#define _ftprintf WINE_tchar_routine(fprintf, fprintf, fwprintf)
+#define _ftscanf WINE_tchar_routine(fscanf, fscanf, fwscanf)
+#define _gettc WINE_tchar_routine(getc, getc, getwc)
+#define _gettchar WINE_tchar_routine(getchar, getchar, getwchar)
+#define _getts WINE_tchar_routine(gets, gets, getws)
+#define _isalnum WINE_tchar_routine(isalnum, _ismbcalnum, iswalnum)
+#define _istalpha WINE_tchar_routine(isalpha, _ismbcalpha, iswalpha)
+#define _istascii WINE_tchar_routine(isascii, __isascii, iswascii)
+#define _istcntrl WINE_tchar_routine(iscntrl, iscntrl, iswcntrl)
+#define _istdigit WINE_tchar_routine(isdigit, _ismbcdigit, iswdigit)
+#define _istgraph WINE_tchar_routine(isgraph, _ismbcgraph, iswgraph)
+#define _istlead WINE_tchar_routine(WINE_tchar_false,_ismbblead, WINE_tchar_false)
+#define _istleadbyte WINE_tchar_routine(WINE_tchar_false,isleadbyte, WINE_tchar_false)
+#define _istlegal WINE_tchar_routine(WINE_tchar_true, _ismbclegal, WINE_tchar_true)
+#define _istlower WINE_tchar_routine(islower, _ismbcslower,iswlower)
+#define _istprint WINE_tchar_routine(isprint, _ismbcprint, iswprint)
+#define _istpunct WINE_tchar_routine(ispunct, _ismbcpunct, iswpunct)
+#define _istspace WINE_tchar_routine(isspace, _ismbcspace, iswspace)
+#define _istupper WINE_tchar_routine(isupper, _ismbcupper, iswupper)
+#define _istxdigit WINE_tchar_routine(isxdigit, isxdigit, iswxdigit)
+#define _itot WINE_tchar_routine(_itoa, _itoa, _itow)
+#define _ltot WINE_tchar_routine(_ltoa, _ltoa, _ltow)
+#define _puttc WINE_tchar_routine(putc, putc, putwc)
+#define _puttchar WINE_tchar_routine(putchar, putchar, putwchar)
+#define _putts WINE_tchar_routine(puts, puts, putws)
+#define _sntprintf WINE_tchar_routine(snprintf, snprintf, snwprintf)
+#define _stprintf WINE_tchar_routine(sprintf, sprintf, swprintf)
+#define _stscanf WINE_tchar_routine(sscanf, sscanf, swscanf)
+#define _taccess WINE_tchar_routine(access, _access, _waccess)
+#define _tasctime WINE_tchar_routine(asctime, asctime, _wasctime)
+#define _tccpy WINE_tchar_routine(WINE_tchar_tccpy,_mbccpy, WINE_tchar_tccpy)
+#define _tchdir WINE_tchar_routine(chdir, _chdir, _wchdir)
+#define _tclen WINE_tchar_routine(WINE_tchar_tclen,_mbclen, WINE_tchar_tclen)
+#define _tchmod WINE_tchar_routine(chmod, _chmod, _wchmod)
+#define _tcreat WINE_tchar_routine(creat, _creat, _wcreat)
+#define _tcscat WINE_tchar_routine(strcat, _mbscat, wcscat)
+#define _tcschr WINE_tchar_routine(strchr, _mbschr, wcschr)
+#define _tcsclen WINE_tchar_routine(strlen, _mbslen, wcslen)
+#define _tcscmp WINE_tchar_routine(strcmp, _mbscmp, wcscmp)
+#define _tcscoll WINE_tchar_routine(strcoll, _mbscoll, wcscoll)
+#define _tcscpy WINE_tchar_routine(strcpy, _mbscpy, wcscpy)
+#define _tcscspn WINE_tchar_routine(strcspn, _mbscspn, wcscspn)
+#define _tcsdec WINE_tchar_routine(_strdec, _mbsdec, _wcsdec)
+#define _tcsdup WINE_tchar_routine(strdup, _mbsdup, _wcsdup)
+#define _tcsftime WINE_tchar_routine(strftime, strftime, wcsftime)
+#define _tcsicmp WINE_tchar_routine(strcasecmp, _mbsicmp, _wcsicmp)
+#define _tcsicoll WINE_tchar_routine(_stricoll, _stricoll, _wcsicoll)
+#define _tcsinc WINE_tchar_routine(_strinc, _mbsinc, _wcsinc)
+#define _tcslen WINE_tchar_routine(strlen, strlen, wcslen)
+#define _tcslwr WINE_tchar_routine(_strlwr, _mbslwr, _wcslwr)
+#define _tcsnbcnt WINE_tchar_routine(_strncnt, _mbsnbcnt, _wcnscnt)
+#define _tcsncat WINE_tchar_routine(strncat, _mbsnbcat, wcsncat)
+#define _tcsnccat WINE_tchar_routine(strncat, _mbsncat, wcsncat)
+#define _tcsncmp WINE_tchar_routine(strncmp, _mbsnbcmp, wcsncmp)
+#define _tcsnccmp WINE_tchar_routine(strncmp, _mbsncmp, wcsncmp)
+#define _tcsnccnt WINE_tchar_routine(_strncnt, _mbsnccnt, _wcsncnt)
+#define _tcsnccpy WINE_tchar_routine(strncpy, _mbsncpy, wcsncpy)
+#define _tcsncicmp WINE_tchar_routine(_strnicmp, _mbsnicmp, _wcsnicmp)
+#define _tcsncpy WINE_tchar_routine(strncpy, _mbsnbcpy, wcsncpy)
+#define _tcsncset WINE_tchar_routine(_strnset, _mbsnset, _wcsnset)
+#define _tcsnextc WINE_tchar_routine(_strnextc, _mbsnextc, _wcsnextc)
+#define _tcsnicmp WINE_tchar_routine(_strnicmp, _mbsnicmp, _wcsnicmp)
+#define _tcsnicoll WINE_tchar_routine(_strnicoll, _strnicoll _wcsnicoll)
+#define _tcsninc WINE_tchar_routine(_strninc, _mbsninc, _wcsninc)
+#define _tcsnccnt WINE_tchar_routine(_strncnt, _mbsnccnt, _wcsncnt)
+#define _tcsnset WINE_tchar_routine(_strnset, _mbsnbset, _wcsnset)
+#define _tcspbrk WINE_tchar_routine(strpbrk, _mbspbrk, wcspbrk)
+#define _tcsspnp WINE_tchar_routine(_strspnp, _mbsspnp, _wcsspnp)
+#define _tcsrchr WINE_tchar_routine(strrchr, _mbsrchr, wcsrchr)
+#define _tcsrev WINE_tchar_routine(_strrev, _mbsrev, _wcsrev)
+#define _tcsset WINE_tchar_routine(_strset, _mbsset, _wcsset)
+#define _tcsspn WINE_tchar_routine(strspn, _mbsspn, wcsspn)
+#define _tcsstr WINE_tchar_routine(strstr, _mbsstr, wcsstr)
+#define _tcstod WINE_tchar_routine(strtod, strtod, wcstod)
+#define _tcstok WINE_tchar_routine(strtok, _mbstok, wcstok)
+#define _tcstol WINE_tchar_routine(strtol, strtol, wcstol)
+#define _tcstoul WINE_tchar_routine(strtoul, strtoul, wcstoul)
+#define _tcsupr WINE_tchar_routine(_strupr, _mbsupr, _wcsupr)
+#define _tcsxfrm WINE_tchar_routine(strxfrm, strxfrm, wcsxfrm)
+#define _tctime WINE_tchar_routine(ctime, ctime, _wctime)
+#define _tenviron WINE_tchar_routine(_environ, _environ, _wenviron)
+#define _texecl WINE_tchar_routine(execl, _execl, _wexecl)
+#define _texecle WINE_tchar_routine(execle, _execle, _wexecle)
+#define _texeclp WINE_tchar_routine(execlp, _execlp, _wexeclp)
+#define _texeclpe WINE_tchar_routine(execlpe, _execlpe, _wexeclpe)
+#define _texecv WINE_tchar_routine(execv, _execv, _wexecv)
+#define _texecve WINE_tchar_routine(execve, _execve, _wexecve)
+#define _texecvp WINE_tchar_routine(execvp, _execvp, _wexecvp)
+#define _texecvpe WINE_tchar_routine(execvpe, _execvpe, _wexecvpe)
+#define _tfdopen WINE_tchar_routine(fdopen, _fdopen, _wfdopen)
+#define _tfinddata_t WINE_tchar_routine(_finddata_t, _finddata_t, _wfinddata_t)
+#define _tfinddatai64_t WINE_tchar_routine(_finddatai64_t,_finddatai64_t,_wfinddatai64_t)
+#define _tfindfirst WINE_tchar_routine(_findfirst, _findfirst, _wfindfirst)
+#define _tfindnext WINE_tchar_routine(_findnext, _findnext, _wfindnext)
+#define _tfopen WINE_tchar_routine(fopen, fopen, _wfopen)
+#define _tfreopen WINE_tchar_routine(freopen, freopen, _wfreopen)
+#define _tfsopen WINE_tchar_routine(_fsopen, _fsopen, _wfsopen)
+#define _tfullpath WINE_tchar_routine(_fullpath, _fullpath, _wfullpath)
+#define _tgetcwd WINE_tchar_routine(getcwd, _getcwd, _wgetcwd)
+#define _tgetenv WINE_tchar_routine(getenv, getenv, _wgetenv)
+#define _tmain WINE_tchar_routine(main, main, wmain)
+#define _tmakepath WINE_tchar_routine(_makepath, _makepath, _wmakepath)
+#define _tmkdir WINE_tchar_routine(mkdir, _mkdir, _wmkdir)
+#define _tmktemp WINE_tchar_routine(mktemp, _mktemp, _wmktemp)
+#define _tperror WINE_tchar_routine(perror, perror, _wperror)
+#define _topen WINE_tchar_routine(open, _open, _wopen)
+#define _totlower WINE_tchar_routine(tolower, _mbctolower, towlower)
+#define _totupper WINE_tchar_routine(toupper, _mbctoupper, towupper)
+#define _tpopen WINE_tchar_routine(popen, _popen, _wpopen)
+#define _tprintf WINE_tchar_routine(printf, printf, wprintf)
+#define _tremove WINE_tchar_routine(remove, remove, _wremove)
+#define _trename WINE_tchar_routine(rename, rename, _wrename)
+#define _trmdir WINE_tchar_routine(rmdir, _rmdir, _wrmdir)
+#define _tsearchenv WINE_tchar_routine(_searchenv, _searchenv, _wsearchenv)
+#define _tscanf WINE_tchar_routine(scanf, scanf, wscanf)
+#define _tsetlocale WINE_tchar_routine(setlocale, setlocale, _wsetlocale)
+#define _tsopen WINE_tchar_routine(_sopen, _sopen, _wsopen)
+#define _tspawnl WINE_tchar_routine(_spawnl, _spawnl, _wspawnl)
+#define _tspawnle WINE_tchar_routine(_spawnle, _spawnle, _wspawnle)
+#define _tspawnlp WINE_tchar_routine(_spawnlp, _spawnlp, _wspawnlp)
+#define _tspawnlpe WINE_tchar_routine(_spawnlpe, _spawnlpe, _wspawnlpe)
+#define _tspawnv WINE_tchar_routine(_spawnv, _spawnv, _wspawnv)
+#define _tspawnve WINE_tchar_routine(_spawnve, _spawnve, _wspawnve)
+#define _tspawnvp WINE_tchar_routine(_spawnvp, _spawnvp, _tspawnvp)
+#define _tspawnvpe WINE_tchar_routine(_spawnvpe, _spawnvpe, _tspawnvpe)
+#define _tsplitpath WINE_tchar_routine(_splitpath, _splitpath, _wsplitpath)
+#define _tstat WINE_tchar_routine(_stat, _stat, _wstat)
+#define _tstrdate WINE_tchar_routine(_strdate, _strdate, _wstrdate)
+#define _tstrtime WINE_tchar_routine(_strtime, _strtime, _wstrtime)
+#define _tsystem WINE_tchar_routine(system, system, _wsystem)
+#define _ttempnam WINE_tchar_routine(tempnam, _tempnam, _wtempnam)
+#define _ttmpnam WINE_tchar_routine(tmpnam, tmpnam, _wtmpnam)
+#define _ttoi WINE_tchar_routine(atoi, atoi, _wtoi)
+#define _ttol WINE_tchar_routine(atol, atol, _wtol)
+#define _tutime WINE_tchar_routine(utime, _utime, _wutime)
+#define _tWinMain WINE_tchar_routine(WinMain, WinMain, wWinMain)
+#define _ultot WINE_tchar_routine(_ultoa, _ultoa, _ultow)
+#define _ungettc WINE_tchar_routine(ungetc, ungetc, ungetwc)
+#define _vftprintf WINE_tchar_routine(vfprintf, vfprintf, vfwprintf)
+#define _vsntprintf WINE_tchar_routine(vsnprintf, _vsnprintf, _vsnwprintf)
+#define _vstprintf WINE_tchar_routine(vsprintf, vsprintf, vswprintf)
+#define _vtprintf WINE_tchar_routine(vprintf, vprintf, vwprintf)
+#define _TEOF WINE_tchar_routine(EOF, EOF, WEOF)
+
+#define __T(x) __TEXT(x)
+#define _T(x) __T(x)
+#define _TEXT(x) __T(x)
+
+#ifdef _UNICODE
+#if !defined(_WINT_T_DEFINED) && !defined(__WINT_TYPE__)
+typedef unsigned short wint_t;
+#endif
+
+#ifndef _WCTYPE_T_DEFINED
+typedef unsigned short wctype_t;
+#define _WCTYPE_T_DEFINED
+#endif
+
+#ifndef __TCHAR_DEFINED
+#ifdef WINE_UNICODE_NATIVE
+typedef wchar_t _TCHAR;
+#else
+typedef unsigned short _TCHAR;
+#endif
+typedef _TCHAR _TUCHAR;
+typedef _TCHAR _TSCHAR;
+typedef _TCHAR _TXCHAR;
+typedef _TCHAR _TINT;
+#define __TCHAR_DEFINED
+#endif
+
+#else /* _UNICODE */
+#ifndef __TCHAR_DEFINED
+typedef char _TCHAR;
+typedef unsigned char _TUCHAR;
+typedef signed char _TSCHAR;
+#ifndef _MBCS
+typedef unsigned char _TXCHAR;
+typedef int _TINT;
+#else
+typedef char _TXCHAR;
+typedef unsigned int _TINT;
+#endif
+#endif
+#endif
+
+#ifndef _TCHAR_DEFINED
+typedef _TCHAR TCHAR, *PTCHAR;
+#define _TCHAR_DEFINED
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_TCHAR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h
new file mode 100644
index 00000000..74248a05
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tcpmib.h
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TCPMIB_H
+#define __WINE_TCPMIB_H
+
+#define TCPIP_OWNING_MODULE_SIZE 16
+
+
+/* TCP tables */
+
+typedef enum
+{
+ MIB_TCP_STATE_CLOSED = 1,
+ MIB_TCP_STATE_LISTEN = 2,
+ MIB_TCP_STATE_SYN_SENT = 3,
+ MIB_TCP_STATE_SYN_RCVD = 4,
+ MIB_TCP_STATE_ESTAB = 5,
+ MIB_TCP_STATE_FIN_WAIT1 = 6,
+ MIB_TCP_STATE_FIN_WAIT2 = 7,
+ MIB_TCP_STATE_CLOSE_WAIT = 8,
+ MIB_TCP_STATE_CLOSING = 9,
+ MIB_TCP_STATE_LAST_ACK = 10,
+ MIB_TCP_STATE_TIME_WAIT = 11,
+ MIB_TCP_STATE_DELETE_TCB = 12,
+} MIB_TCP_STATE;
+
+typedef enum
+{
+ TcpConnectionOffloadStateInHost,
+ TcpConnectionOffloadStateOffloading,
+ TcpConnectionOffloadStateOffloaded,
+ TcpConnectionOffloadStateUploading,
+ TcpConnectionOffloadStateMax,
+} TCP_CONNECTION_OFFLOAD_STATE, *PTCP_CONNECTION_OFFLOAD_STATE;
+
+typedef struct _MIB_TCPROW
+{
+ union
+ {
+ DWORD dwState;
+ MIB_TCP_STATE State;
+ } DUMMYUNIONNAME;
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwRemoteAddr;
+ DWORD dwRemotePort;
+} MIB_TCPROW, *PMIB_TCPROW;
+
+typedef struct _MIB_TCPTABLE
+{
+ DWORD dwNumEntries;
+ MIB_TCPROW table[1];
+} MIB_TCPTABLE, *PMIB_TCPTABLE;
+
+typedef struct _MIB_TCP6ROW {
+ MIB_TCP_STATE State;
+ IN6_ADDR LocalAddr;
+ DWORD dwLocalScopeId;
+ DWORD dwLocalPort;
+ IN6_ADDR RemoteAddr;
+ DWORD dwRemoteScopeId;
+ DWORD dwRemotePort;
+} MIB_TCP6ROW, *PMIB_TCP6ROW;
+
+typedef struct _MIB_TCP6TABLE {
+ DWORD dwNumEntries;
+ MIB_TCP6ROW table[1];
+} MIB_TCP6TABLE, *PMIB_TCP6TABLE;
+
+typedef struct _MIB_TCP6ROW2 {
+ IN6_ADDR LocalAddr;
+ DWORD dwLocalScopeId;
+ DWORD dwLocalPort;
+ IN6_ADDR RemoteAddr;
+ DWORD dwRemoteScopeId;
+ DWORD dwRemotePort;
+ MIB_TCP_STATE State;
+ DWORD dwOwningPid;
+ TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
+} MIB_TCP6ROW2, *PMIB_TCP6ROW2;
+
+typedef struct _MIB_TCP6TABLE2 {
+ DWORD dwNumEntries;
+ MIB_TCP6ROW2 table[1];
+} MIB_TCP6TABLE2, *PMIB_TCP6TABLE2;
+
+typedef struct _MIB_TCPROW_OWNER_PID
+{
+ DWORD dwState;
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwRemoteAddr;
+ DWORD dwRemotePort;
+ DWORD dwOwningPid;
+} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;
+
+typedef struct _MIB_TCPTABLE_OWNER_PID
+{
+ DWORD dwNumEntries;
+ MIB_TCPROW_OWNER_PID table[1];
+} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;
+
+typedef struct _MIB_TCPROW_OWNER_MODULE
+{
+ DWORD dwState;
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwRemoteAddr;
+ DWORD dwRemotePort;
+ DWORD dwOwningPid;
+ LARGE_INTEGER liCreateTimestamp;
+ ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
+} MIB_TCPROW_OWNER_MODULE, *PMIB_TCPROW_OWNER_MODULE;
+
+typedef struct _MIB_TCPTABLE_OWNER_MODULE
+{
+ DWORD dwNumEntries;
+ MIB_TCPROW_OWNER_MODULE table[1];
+} MIB_TCPTABLE_OWNER_MODULE, *PMIB_TCPTABLE_OWNER_MODULE;
+
+typedef struct _MIB_TCPROW2
+{
+ DWORD dwState;
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwRemoteAddr;
+ DWORD dwRemotePort;
+ DWORD dwOwningPid;
+ TCP_CONNECTION_OFFLOAD_STATE dwOffloadState;
+} MIB_TCPROW2, *PMIB_TCPROW2;
+
+typedef struct _MIB_TCPTABLE2
+{
+ DWORD dwNumEntries;
+ MIB_TCPROW2 table[1];
+} MIB_TCPTABLE2, *PMIB_TCPTABLE2;
+
+
+/* TCP stats */
+
+typedef enum
+{
+ TcpRtoAlgorithmOther = 0,
+ TcpRtoAlgorithmConstant = 1,
+ TcpRtoAlgorithmRsre = 2,
+ TcpRtoAlgorithmVanj = 3,
+
+ MIB_TCP_RTO_OTHER = 1,
+ MIB_TCP_RTO_CONSTANT = 2,
+ MIB_TCP_RTO_RSRE = 3,
+ MIB_TCP_RTO_VANJ = 4,
+} TCP_RTO_ALGORITHM, *PTCP_RTO_ALGORITHM;
+
+typedef struct _MIB_TCPSTATS
+{
+ union
+ {
+ DWORD dwRtoAlgorithm;
+ TCP_RTO_ALGORITHM RtoAlgorithm;
+ } DUMMYUNIONNAME;
+ DWORD dwRtoMin;
+ DWORD dwRtoMax;
+ DWORD dwMaxConn;
+ DWORD dwActiveOpens;
+ DWORD dwPassiveOpens;
+ DWORD dwAttemptFails;
+ DWORD dwEstabResets;
+ DWORD dwCurrEstab;
+ DWORD dwInSegs;
+ DWORD dwOutSegs;
+ DWORD dwRetransSegs;
+ DWORD dwInErrs;
+ DWORD dwOutRsts;
+ DWORD dwNumConns;
+} MIB_TCPSTATS, *PMIB_TCPSTATS;
+
+#endif /* __WINE_TCPMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h
new file mode 100644
index 00000000..bda03759
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/textserv.h
@@ -0,0 +1,378 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _TEXTSERV_H
+#define _TEXTSERV_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EXTERN_C const IID IID_ITextServices;
+EXTERN_C const IID IID_ITextHost;
+
+/*****************************************************************************
+ * ITextServices interface
+ */
+#define INTERFACE ITextServices
+DECLARE_INTERFACE_(ITextServices,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_
+ REFIID riid,
+ void** ppvObject) PURE;
+
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ /*** ITextServices methods ***/
+
+ STDMETHOD(TxSendMessage)( THIS_
+ UINT msg, WPARAM wparam, LPARAM lparam, LRESULT* plresult) PURE;
+
+ STDMETHOD(TxDraw)( THIS_
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void* pvAspect,
+ DVTARGETDEVICE* ptd,
+ HDC hdcDraw,
+ HDC hicTargetDev,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ LPRECT lprcUpdate,
+ BOOL (CALLBACK * pfnContinue)(DWORD),
+ DWORD dwContinue,
+ LONG lViewId) PURE;
+
+ STDMETHOD(TxGetHScroll)( THIS_
+ LONG* plMin,
+ LONG* plMax,
+ LONG* plPos,
+ LONG* plPage,
+ BOOL* pfEnabled) PURE;
+
+ STDMETHOD(TxGetVScroll)( THIS_
+ LONG* plMin,
+ LONG* plMax,
+ LONG* plPos,
+ LONG* plPage,
+ BOOL* pfEnabled) PURE;
+
+ STDMETHOD(OnTxSetCursor)( THIS_
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void* pvAspect,
+ DVTARGETDEVICE* ptd,
+ HDC hdcDraw,
+ HDC hicTargetDev,
+ LPCRECT lprcClient,
+ INT x,
+ INT y) PURE;
+
+ STDMETHOD(TxQueryHitPoint)( THIS_
+ DWORD dwDrawAspect,
+ LONG lindex,
+ void* pvAspect,
+ DVTARGETDEVICE* ptd,
+ HDC hdcDraw,
+ HDC hicTargetDev,
+ LPCRECT lprcClient,
+ INT x,
+ INT y,
+ DWORD* pHitResult) PURE;
+
+ STDMETHOD(OnTxInplaceActivate)( THIS_
+ LPCRECT prcClient) PURE;
+
+ STDMETHOD(OnTxInplaceDeactivate)( THIS ) PURE;
+
+ STDMETHOD(OnTxUIActivate)( THIS ) PURE;
+
+ STDMETHOD(OnTxUIDeactivate)( THIS ) PURE;
+
+ STDMETHOD(TxGetText)( THIS_
+ BSTR* pbstrText) PURE;
+
+ STDMETHOD(TxSetText)( THIS_
+ LPCWSTR pszText) PURE;
+
+ STDMETHOD(TxGetCurrentTargetX)( THIS_
+ LONG* x) PURE;
+
+ STDMETHOD(TxGetBaseLinePos)( THIS_
+ LONG* x) PURE;
+
+ STDMETHOD(TxGetNaturalSize)( THIS_
+ DWORD dwAspect,
+ HDC hdcDraw,
+ HDC hicTargetDev,
+ DVTARGETDEVICE* ptd,
+ DWORD dwMode,
+ const SIZEL* psizelExtent,
+ LONG* pwidth,
+ LONG* pheight) PURE;
+
+ STDMETHOD(TxGetDropTarget)( THIS_
+ IDropTarget** ppDropTarget) PURE;
+
+ STDMETHOD(OnTxPropertyBitsChange)( THIS_
+ DWORD dwMask,
+ DWORD dwBits) PURE;
+
+ STDMETHOD(TxGetCachedSize)( THIS_
+ DWORD* pdwWidth,
+ DWORD* pdwHeight) PURE;
+
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITextServices_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITextServices_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITextServices_Release(p) (p)->lpVtbl->Release(p)
+#endif
+
+typedef enum _TXTBACKSTYLE {
+ TXTBACK_TRANSPARENT = 0,
+ TXTBACK_OPAQUE
+} TXTBACKSTYLE;
+
+enum TXTHITRESULT {
+ TXTHITRESULT_NOHIT = 0,
+ TXTHITRESULT_TRANSPARENT = 1,
+ TXTHITRESULT_CLOSE = 2,
+ TXTHITRESULT_HIT = 3
+};
+
+enum TXTNATURALSIZE {
+ TXTNS_FITTOCONTENT = 1,
+ TXTNS_ROUNDTOLINE = 2
+};
+
+enum TXTVIEW {
+ TXTVIEW_ACTIVE = 0,
+ TXTVIEW_INACTIVE = 1
+};
+
+#define TXTBIT_RICHTEXT 0x000001
+#define TXTBIT_MULTILINE 0x000002
+#define TXTBIT_READONLY 0x000004
+#define TXTBIT_SHOWACCELERATOR 0x000008
+#define TXTBIT_USEPASSWORD 0x000010
+#define TXTBIT_HIDESELECTION 0x000020
+#define TXTBIT_SAVESELECTION 0x000040
+#define TXTBIT_AUTOWORDSEL 0x000080
+#define TXTBIT_VERTICAL 0x000100
+#define TXTBIT_SELBARCHANGE 0x000200
+#define TXTBIT_WORDWRAP 0x000400
+#define TXTBIT_ALLOWBEEP 0x000800
+#define TXTBIT_DISABLEDRAG 0x001000
+#define TXTBIT_VIEWINSETCHANGE 0x002000
+#define TXTBIT_BACKSTYLECHANGE 0x004000
+#define TXTBIT_MAXLENGTHCHANGE 0x008000
+#define TXTBIT_SCROLLBARCHANGE 0x010000
+#define TXTBIT_CHARFORMATCHANGE 0x020000
+#define TXTBIT_PARAFORMATCHANGE 0x040000
+#define TXTBIT_EXTENTCHANGE 0x080000
+#define TXTBIT_CLIENTRECTCHANGE 0x100000
+#define TXTBIT_USECURRENTBKG 0x200000
+
+/*****************************************************************************
+ * ITextHost interface
+ */
+#define INTERFACE ITextHost
+DECLARE_INTERFACE_(ITextHost,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD(QueryInterface)(THIS_
+ REFIID riid,
+ void** ppvObject) PURE;
+
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+
+ /*** ITextHost methods ***/
+ STDMETHOD_(HDC,TxGetDC)( THIS
+ ) PURE;
+
+ STDMETHOD_(INT,TxReleaseDC)( THIS_
+ HDC hdc) PURE;
+
+ STDMETHOD_(BOOL,TxShowScrollBar)( THIS_
+ INT fnBar,
+ BOOL fShow) PURE;
+
+ STDMETHOD_(BOOL,TxEnableScrollBar)( THIS_
+ INT fuSBFlags,
+ INT fuArrowflags) PURE;
+
+ STDMETHOD_(BOOL,TxSetScrollRange)( THIS_
+ INT fnBar,
+ LONG nMinPos,
+ INT nMaxPos,
+ BOOL fRedraw) PURE;
+
+ STDMETHOD_(BOOL,TxSetScrollPos)( THIS_
+ INT fnBar,
+ INT nPos,
+ BOOL fRedraw) PURE;
+
+ STDMETHOD_(void,TxInvalidateRect)( THIS_
+ LPCRECT prc,
+ BOOL fMode) PURE;
+
+ STDMETHOD_(void,TxViewChange)( THIS_
+ BOOL fUpdate) PURE;
+
+ STDMETHOD_(BOOL,TxCreateCaret)( THIS_
+ HBITMAP hbmp,
+ INT xWidth,
+ INT yHeight) PURE;
+
+ STDMETHOD_(BOOL,TxShowCaret)( THIS_
+ BOOL fShow) PURE;
+
+ STDMETHOD_(BOOL,TxSetCaretPos)( THIS_
+ INT x,
+ INT y) PURE;
+
+ STDMETHOD_(BOOL,TxSetTimer)( THIS_
+ UINT idTimer,
+ UINT uTimeout) PURE;
+
+ STDMETHOD_(void,TxKillTimer)( THIS_
+ UINT idTimer) PURE;
+
+ STDMETHOD_(void,TxScrollWindowEx)( THIS_
+ INT dx,
+ INT dy,
+ LPCRECT lprcScroll,
+ LPCRECT lprcClip,
+ HRGN hRgnUpdate,
+ LPRECT lprcUpdate,
+ UINT fuScroll) PURE;
+
+ STDMETHOD_(void,TxSetCapture)( THIS_
+ BOOL fCapture) PURE;
+
+ STDMETHOD_(void,TxSetFocus)( THIS
+ ) PURE;
+
+ STDMETHOD_(void,TxSetCursor)( THIS_
+ HCURSOR hcur,
+ BOOL fText) PURE;
+
+ STDMETHOD_(BOOL,TxScreenToClient)( THIS_
+ LPPOINT lppt) PURE;
+
+ STDMETHOD_(BOOL,TxClientToScreen)( THIS_
+ LPPOINT lppt) PURE;
+
+ STDMETHOD(TxActivate)( THIS_
+ LONG* plOldState) PURE;
+
+ STDMETHOD(TxDeactivate)( THIS_
+ LONG lNewState) PURE;
+
+ STDMETHOD(TxGetClientRect)( THIS_
+ LPRECT prc) PURE;
+
+ STDMETHOD(TxGetViewInset)( THIS_
+ LPRECT prc) PURE;
+
+ STDMETHOD(TxGetCharFormat)( THIS_
+ const CHARFORMATW** ppCF) PURE;
+
+ STDMETHOD(TxGetParaFormat)( THIS_
+ const PARAFORMAT** ppPF) PURE;
+
+ STDMETHOD_(COLORREF,TxGetSysColor)( THIS_
+ int nIndex) PURE;
+
+ STDMETHOD(TxGetBackStyle)( THIS_
+ TXTBACKSTYLE* pStyle) PURE;
+
+ STDMETHOD(TxGetMaxLength)( THIS_
+ DWORD* plength) PURE;
+
+ STDMETHOD(TxGetScrollBars)( THIS_
+ DWORD* pdwScrollBar) PURE;
+
+ STDMETHOD(TxGetPasswordChar)( THIS_
+ WCHAR* pch) PURE;
+
+ STDMETHOD(TxGetAcceleratorPos)( THIS_
+ LONG* pch) PURE;
+
+ STDMETHOD(TxGetExtent)( THIS_
+ LPSIZEL lpExtent) PURE;
+
+ STDMETHOD(OnTxCharFormatChange)( THIS_
+ const CHARFORMATW* pcf) PURE;
+
+ STDMETHOD(OnTxParaFormatChange)( THIS_
+ const PARAFORMAT* ppf) PURE;
+
+ STDMETHOD(TxGetPropertyBits)( THIS_
+ DWORD dwMask,
+ DWORD* pdwBits) PURE;
+
+ STDMETHOD(TxNotify)( THIS_
+ DWORD iNotify,
+ void* pv) PURE;
+
+ STDMETHOD_(HIMC,TxImmGetContext)( THIS
+ ) PURE;
+
+ STDMETHOD_(void,TxImmReleaseContext)( THIS_
+ HIMC himc) PURE;
+
+ STDMETHOD(TxGetSelectionBarWidth)( THIS_
+ LONG* lSelBarWidth) PURE;
+
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ITextHost_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITextHost_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITextHost_Release(p) (p)->lpVtbl->Release(p)
+#endif
+
+HRESULT WINAPI CreateTextServices(IUnknown*,ITextHost*,IUnknown**);
+
+typedef HRESULT (WINAPI *PCreateTextServices)(IUnknown*,ITextHost*,IUnknown**);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TEXTSERV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl
new file mode 100644
index 00000000..dc203cbd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/textstor.idl
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2009 Aric Stewart, CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "oaidl.idl";
+#endif
+
+cpp_quote("#define TS_E_INVALIDPOS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0200)")
+cpp_quote("#define TS_E_NOLOCK MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0201)")
+cpp_quote("#define TS_E_NOOBJECT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0202)")
+cpp_quote("#define TS_E_NOSERVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0203)")
+cpp_quote("#define TS_E_NOINTERFACE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0204)")
+cpp_quote("#define TS_E_NOSELECTION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0205)")
+cpp_quote("#define TS_E_NOLAYOUT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0206)")
+cpp_quote("#define TS_E_INVALIDPOINT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0207)")
+cpp_quote("#define TS_E_SYNCHRONOUS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)")
+cpp_quote("#define TS_E_READONLY MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0209)")
+cpp_quote("#define TS_E_FORMAT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x020a)")
+
+cpp_quote("#define TS_S_ASYNC MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)")
+
+
+const ULONG TS_DEFAULT_SELECTION = ~0u;
+
+const DWORD TS_SD_READONLY = 0x001;
+const DWORD TS_SD_LOADING = 0x002;
+
+const DWORD TS_SS_DISJOINTSEL = 0x001;
+const DWORD TS_SS_REGIONS = 0x002;
+const DWORD TS_SS_TRANSITORY = 0x004;
+const DWORD TS_SS_NOHIDDENTEXT = 0x008;
+
+const DWORD TS_AS_TEXT_CHANGE = 0x01;
+const DWORD TS_AS_SEL_CHANGE = 0x02;
+const DWORD TS_AS_LAYOUT_CHANGE = 0x04;
+const DWORD TS_AS_ATTR_CHANGE = 0x08;
+const DWORD TS_AS_STATUS_CHANGE = 0x10;
+
+const DWORD TS_AS_ALL_SINKS = (TS_AS_TEXT_CHANGE | TS_AS_SEL_CHANGE | TS_AS_LAYOUT_CHANGE | TS_AS_ATTR_CHANGE | TS_AS_STATUS_CHANGE);
+
+const DWORD TS_LF_SYNC = 0x1;
+const DWORD TS_LF_READ = 0x2;
+const DWORD TS_LF_READWRITE = 0x6;
+
+const WCHAR TS_CHAR_EMBEDDED = 0xfffc;
+const WCHAR TS_CHAR_REGION = 0x0000;
+const WCHAR TS_CHAR_REPLACEMENT = 0xfffd;
+
+const DWORD TS_IAS_NOQUERY = 0x1;
+const DWORD TS_IAS_QUERYONLY = 0x2;
+
+const DWORD TS_ST_CORRECTION = 0x1;
+
+typedef [uuid(05fcf85b-5e9c-4c3e-ab71-29471d4f38e7)] enum { TS_AE_NONE, TS_AE_START, TS_AE_END } TsActiveSelEnd;
+typedef [uuid(033b0df0-f193-4170-b47b-141afc247878)] enum { TS_RT_PLAIN, TS_RT_HIDDEN, TS_RT_OPAQUE } TsRunType;
+typedef [uuid(ef3457d9-8446-49a7-a9e6-b50d9d5f3fd9)] GUID TS_ATTRID;
+
+typedef [uuid(fec4f516-c503-45b1-a5fd-7a3d8ab07049)] struct TS_STATUS
+{
+ DWORD dwDynamicFlags;
+ DWORD dwStaticFlags;
+} TS_STATUS;
+
+typedef [uuid(f3181bd6-bcf0-41d3-a81c-474b17ec38fb)] struct TS_TEXTCHANGE
+{
+ LONG acpStart;
+ LONG acpOldEnd;
+ LONG acpNewEnd;
+} TS_TEXTCHANGE;
+
+typedef [uuid(7ecc3ffa-8f73-4d91-98ed-76f8ac5b1600)] struct TS_SELECTIONSTYLE
+{
+ TsActiveSelEnd ase;
+ BOOL fInterimChar;
+} TS_SELECTIONSTYLE;
+
+typedef [uuid(c4b9c33b-8a0d-4426-bebe-d444a4701fe9)] struct TS_SELECTION_ACP
+{
+ LONG acpStart;
+ LONG acpEnd;
+ TS_SELECTIONSTYLE style;
+} TS_SELECTION_ACP;
+
+typedef [uuid(a6231949-37c5-4b74-a24e-2a26c327201d)] struct TS_RUNINFO
+{
+ ULONG uCount;
+ TsRunType type;
+} TS_RUNINFO;
+
+typedef [uuid(2cc2b33f-1174-4507-b8d9-5bc0eb37c197)] struct TS_ATTRVAL
+{
+ TS_ATTRID idAttr;
+ DWORD dwOverlapId;
+ VARIANT varValue;
+} TS_ATTRVAL;
+
+const DWORD TS_ATTR_FIND_BACKWARDS = 0x0001;
+const DWORD TS_ATTR_FIND_WANT_OFFSET = 0x0002;
+const DWORD TS_ATTR_FIND_UPDATESTART = 0x0004;
+const DWORD TS_ATTR_FIND_WANT_VALUE = 0x0008;
+const DWORD TS_ATTR_FIND_WANT_END = 0x0010;
+const DWORD TS_ATTR_FIND_HIDDEN = 0x0020;
+
+typedef [uuid(7899d7c4-5f07-493c-a89a-fac8e777f476)] enum { TS_LC_CREATE, TS_LC_CHANGE, TS_LC_DESTROY } TsLayoutCode;
+typedef [uuid(1faf509e-44c1-458e-950a-38a96705a62b)] DWORD TsViewCookie;
+
+[
+ object,
+ uuid(22d44c94-a419-4542-a272-ae26093ececf),
+ pointer_default(unique)
+]
+interface ITextStoreACPSink : IUnknown
+{
+ HRESULT OnTextChange(
+ [in] DWORD dwFlags,
+ [in] const TS_TEXTCHANGE *pChange);
+
+ HRESULT OnSelectionChange();
+
+ HRESULT OnLayoutChange(
+ [in] TsLayoutCode lcode,
+ [in] TsViewCookie vcView);
+
+ HRESULT OnStatusChange(
+ [in] DWORD dwFlags);
+
+ HRESULT OnAttrsChange(
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [in] ULONG cAttrs,
+ [in, size_is(cAttrs)] const TS_ATTRID *paAttrs);
+
+ HRESULT OnLockGranted(
+ [in] DWORD dwLockFlags);
+
+ HRESULT OnStartEditTransaction();
+
+ HRESULT OnEndEditTransaction();
+};
+
+[
+ object,
+ uuid(28888fe3-c2a0-483a-a3ea-8cb1ce51ff3d),
+ pointer_default(unique)
+]
+interface ITextStoreACP : IUnknown
+{
+ HRESULT AdviseSink(
+ [in] REFIID riid,
+ [in, iid_is(riid)] IUnknown *punk,
+ [in] DWORD dwMask);
+
+ HRESULT UnadviseSink(
+ [in] IUnknown *punk);
+
+ HRESULT RequestLock(
+ [in] DWORD dwLockFlags,
+ [out] HRESULT *phrSession);
+
+ HRESULT GetStatus(
+ [out] TS_STATUS *pdcs);
+
+ HRESULT QueryInsert(
+ [in] LONG acpTestStart,
+ [in] LONG acpTestEnd,
+ [in] ULONG cch,
+ [out] LONG *pacpResultStart,
+ [out] LONG *pacpResultEnd);
+
+ HRESULT GetSelection(
+ [in] ULONG ulIndex,
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] TS_SELECTION_ACP *pSelection,
+ [out] ULONG *pcFetched);
+
+ HRESULT SetSelection(
+ [in] ULONG ulCount,
+ [in, size_is(ulCount)] const TS_SELECTION_ACP *pSelection);
+
+ HRESULT GetText(
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [out, size_is(cchPlainReq), length_is(*pcchPlainRet)] WCHAR *pchPlain,
+ [in] ULONG cchPlainReq,
+ [out] ULONG *pcchPlainRet,
+ [out, size_is(cRunInfoReq), length_is(*pcRunInfoRet)] TS_RUNINFO *prgRunInfo,
+ [in] ULONG cRunInfoReq,
+ [out] ULONG *pcRunInfoRet,
+ [out] LONG *pacpNext);
+
+ HRESULT SetText(
+ [in] DWORD dwFlags,
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [in, size_is(cch)] const WCHAR *pchText,
+ [in] ULONG cch,
+ [out] TS_TEXTCHANGE *pChange);
+
+ HRESULT GetFormattedText(
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [out] IDataObject **ppDataObject);
+
+ HRESULT GetEmbedded(
+ [in] LONG acpPos,
+ [in] REFGUID rguidService,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppunk);
+
+ HRESULT QueryInsertEmbedded(
+ [in] const GUID *pguidService,
+ [in] const FORMATETC *pFormatEtc,
+ [out] BOOL *pfInsertable);
+
+ HRESULT InsertEmbedded(
+ [in] DWORD dwFlags,
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [in] IDataObject *pDataObject,
+ [out] TS_TEXTCHANGE *pChange);
+
+
+ HRESULT InsertTextAtSelection(
+ [in] DWORD dwFlags,
+ [in, size_is(cch)] const WCHAR *pchText,
+ [in] ULONG cch,
+ [out] LONG *pacpStart,
+ [out] LONG *pacpEnd,
+ [out] TS_TEXTCHANGE *pChange);
+
+ HRESULT InsertEmbeddedAtSelection(
+ [in] DWORD dwFlags,
+ [in] IDataObject *pDataObject,
+ [out] LONG *pacpStart,
+ [out] LONG *pacpEnd,
+ [out] TS_TEXTCHANGE *pChange);
+
+ HRESULT RequestSupportedAttrs(
+ [in] DWORD dwFlags,
+ [in] ULONG cFilterAttrs,
+ [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs);
+
+ HRESULT RequestAttrsAtPosition(
+ [in] LONG acpPos,
+ [in] ULONG cFilterAttrs,
+ [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,
+ [in] DWORD dwFlags);
+
+ HRESULT RequestAttrsTransitioningAtPosition(
+ [in] LONG acpPos,
+ [in] ULONG cFilterAttrs,
+ [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,
+ [in] DWORD dwFlags);
+
+ HRESULT FindNextAttrTransition(
+ [in] LONG acpStart,
+ [in] LONG acpHalt,
+ [in] ULONG cFilterAttrs,
+ [in, size_is(cFilterAttrs), unique] const TS_ATTRID *paFilterAttrs,
+ [in] DWORD dwFlags,
+ [out] LONG *pacpNext,
+ [out] BOOL *pfFound,
+ [out] LONG *plFoundOffset);
+
+ HRESULT RetrieveRequestedAttrs(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] TS_ATTRVAL *paAttrVals,
+ [out] ULONG *pcFetched);
+
+ HRESULT GetEndACP(
+ [out] LONG *pacp);
+
+ HRESULT GetActiveView(
+ [out] TsViewCookie *pvcView);
+
+ HRESULT GetACPFromPoint(
+ [in] TsViewCookie vcView,
+ [in] const POINT *ptScreen,
+ [in] DWORD dwFlags,
+ [out] LONG *pacp);
+
+ HRESULT GetTextExt(
+ [in] TsViewCookie vcView,
+ [in] LONG acpStart,
+ [in] LONG acpEnd,
+ [out] RECT *prc,
+ [out] BOOL *pfClipped);
+
+ HRESULT GetScreenExt(
+ [in] TsViewCookie vcView,
+ [out] RECT *prc);
+
+ HRESULT GetWnd(
+ [in] TsViewCookie vcView,
+ [out] HWND *phwnd);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h
new file mode 100644
index 00000000..2002c29c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlhelp32.h
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 1998 Patrick Spinler
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TLHELP32_H
+#define __WINE_TLHELP32_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * CreateToolhelp32Snapshot
+ */
+
+#define TH32CS_SNAPHEAPLIST 0x00000001
+#define TH32CS_SNAPPROCESS 0x00000002
+#define TH32CS_SNAPTHREAD 0x00000004
+#define TH32CS_SNAPMODULE 0x00000008
+#define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
+#define TH32CS_INHERIT 0x80000000
+
+HANDLE WINAPI CreateToolhelp32Snapshot(DWORD,DWORD);
+
+/*
+ * thread entry list as created by CreateToolHelp32Snapshot
+ */
+
+typedef struct tagTHREADENTRY32
+{
+ DWORD dwSize;
+ DWORD cntUsage;
+ DWORD th32ThreadID;
+ DWORD th32OwnerProcessID;
+ LONG tpBasePri;
+ LONG tpDeltaPri;
+ DWORD dwFlags;
+} THREADENTRY32, *PTHREADENTRY32, *LPTHREADENTRY32;
+
+BOOL WINAPI Thread32First(HANDLE,LPTHREADENTRY32);
+BOOL WINAPI Thread32Next(HANDLE,LPTHREADENTRY32);
+
+/*
+ * Process entry list as created by CreateToolHelp32Snapshot
+ */
+
+typedef struct tagPROCESSENTRY32
+{
+ DWORD dwSize;
+ DWORD cntUsage;
+ DWORD th32ProcessID;
+ ULONG_PTR th32DefaultHeapID;
+ DWORD th32ModuleID;
+ DWORD cntThreads;
+ DWORD th32ParentProcessID;
+ LONG pcPriClassBase;
+ DWORD dwFlags;
+ char szExeFile[MAX_PATH];
+} PROCESSENTRY32, *PPROCESSENTRY32, *LPPROCESSENTRY32;
+
+typedef struct tagPROCESSENTRY32W
+{
+ DWORD dwSize;
+ DWORD cntUsage;
+ DWORD th32ProcessID;
+ ULONG_PTR th32DefaultHeapID;
+ DWORD th32ModuleID;
+ DWORD cntThreads;
+ DWORD th32ParentProcessID;
+ LONG pcPriClassBase;
+ DWORD dwFlags;
+ WCHAR szExeFile[MAX_PATH];
+} PROCESSENTRY32W, *PPROCESSENTRY32W, *LPPROCESSENTRY32W;
+
+BOOL WINAPI Process32First(HANDLE,LPPROCESSENTRY32);
+BOOL WINAPI Process32FirstW(HANDLE,LPPROCESSENTRY32W);
+BOOL WINAPI Process32Next(HANDLE,LPPROCESSENTRY32);
+BOOL WINAPI Process32NextW(HANDLE,LPPROCESSENTRY32W);
+
+#ifdef UNICODE
+#define Process32First Process32FirstW
+#define Process32Next Process32NextW
+#define PROCESSENTRY32 PROCESSENTRY32W
+#define PPROCESSENTRY32 PPROCESSENTRY32W
+#define LPPROCESSENTRY32 LPPROCESSENTRY32W
+#endif
+
+/*
+ * Module entry list as created by CreateToolHelp32Snapshot
+ */
+
+#define MAX_MODULE_NAME32 255
+
+typedef struct tagMODULEENTRY32
+{
+ DWORD dwSize;
+ DWORD th32ModuleID;
+ DWORD th32ProcessID;
+ DWORD GlblcntUsage;
+ DWORD ProccntUsage;
+ BYTE *modBaseAddr;
+ DWORD modBaseSize;
+ HMODULE hModule;
+ char szModule[MAX_MODULE_NAME32 + 1];
+ char szExePath[MAX_PATH];
+} MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32;
+
+typedef struct tagMODULEENTRY32W
+{
+ DWORD dwSize;
+ DWORD th32ModuleID;
+ DWORD th32ProcessID;
+ DWORD GlblcntUsage;
+ DWORD ProccntUsage;
+ BYTE *modBaseAddr;
+ DWORD modBaseSize;
+ HMODULE hModule;
+ WCHAR szModule[MAX_MODULE_NAME32 + 1];
+ WCHAR szExePath[MAX_PATH];
+} MODULEENTRY32W, *PMODULEENTRY32W, *LPMODULEENTRY32W;
+
+BOOL WINAPI Module32First(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32FirstW(HANDLE,LPMODULEENTRY32W);
+BOOL WINAPI Module32Next(HANDLE,LPMODULEENTRY32);
+BOOL WINAPI Module32NextW(HANDLE,LPMODULEENTRY32W);
+
+#ifdef UNICODE
+#define Module32First Module32FirstW
+#define Module32Next Module32NextW
+#define MODULEENTRY32 MODULEENTRY32W
+#define PMODULEENTRY32 PMODULEENTRY32W
+#define LPMODULEENTRY32 LPMODULEENTRY32W
+#endif
+
+typedef struct tagHEAPLIST32
+{
+ SIZE_T dwSize;
+ DWORD th32ProcessID;
+ ULONG_PTR th32HeapID;
+ DWORD dwFlags;
+} HEAPLIST32, *PHEAPLIST32, *LPHEAPLIST32;
+
+#define HF32_DEFAULT 1
+#define HF32_SHARED 2
+
+BOOL WINAPI Heap32ListFirst(HANDLE,LPHEAPLIST32);
+BOOL WINAPI Heap32ListNext(HANDLE,LPHEAPLIST32);
+BOOL WINAPI Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,SIZE_T,SIZE_T*);
+
+typedef struct tagHEAPENTRY32
+{
+ SIZE_T dwSize;
+ HANDLE hHandle;
+ ULONG_PTR dwAddress;
+ SIZE_T dwBlockSize;
+ DWORD dwFlags;
+ DWORD dwLockCount;
+ DWORD dwResvd;
+ DWORD th32ProcessID;
+ ULONG_PTR th32HeapID;
+} HEAPENTRY32, *PHEAPENTRY32, *LPHEAPENTRY32;
+
+BOOL WINAPI Heap32First(LPHEAPENTRY32,DWORD,ULONG_PTR);
+BOOL WINAPI Heap32Next(LPHEAPENTRY32);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_TLHELP32_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl
new file mode 100644
index 00000000..228d6f30
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tlogstg.idl
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "shtypes.idl";
+
+typedef struct _WINDOWDATA {
+ DWORD dwWindowID;
+ UINT uiCP;
+ PIDLIST_ABSOLUTE pidl;
+ [string] LPWSTR lpszUrl;
+ [string] LPWSTR lpszUrlLocation;
+ [string] LPWSTR lpszTitle;
+} WINDOWDATA;
+
+typedef WINDOWDATA *LPWINDOWDATA;
+typedef const WINDOWDATA *LPCWINDOWDATA;
+
+[
+ uuid(241c033e-e659-43da-aa4d-4086dbc4758d),
+ object
+]
+interface ITravelLogClient : IUnknown
+{
+ HRESULT FindWindowByIndex(
+ [in] DWORD dwID,
+ [out] IUnknown **ppunk);
+
+ HRESULT GetWindowData(
+ [in] IStream *pStream,
+ [out] LPWINDOWDATA pWinData);
+
+ HRESULT LoadHistoryPosition(
+ [in] LPWSTR pszUrlLocation,
+ [in] DWORD dwPosition);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h
new file mode 100644
index 00000000..2fb47b60
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tmschema.h
@@ -0,0 +1,1279 @@
+/*
+ * Copyright (C) 2003 Kevin Koltzau
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TMSCHEMA_H
+#define __WINE_TMSCHEMA_H
+
+#include <schemadef.h>
+
+BEGIN_TM_SCHEMA(ThemeMgrSchema)
+
+
+/***** ENUMERATIONS *****/
+
+/* BGTYPE Enum */
+BEGIN_TM_ENUM(BGTYPE)
+ TM_ENUM(0, BT, IMAGEFILE)
+ TM_ENUM(1, BT, BORDERFILL)
+ TM_ENUM(2, BT, NONE)
+END_TM_ENUM()
+
+/* IMAGELAYOUT Enum */
+BEGIN_TM_ENUM(IMAGELAYOUT)
+ TM_ENUM(0, IL, VERTICAL)
+ TM_ENUM(1, IL, HORIZONTAL)
+END_TM_ENUM()
+
+/* BORDERTYPE Enum */
+BEGIN_TM_ENUM(BORDERTYPE)
+ TM_ENUM(0, BT, RECT)
+ TM_ENUM(1, BT, ROUNDRECT)
+ TM_ENUM(2, BT, ELLIPSE)
+END_TM_ENUM()
+
+/* FILLTYPE Enum */
+BEGIN_TM_ENUM(FILLTYPE)
+ TM_ENUM(0, FT, SOLID)
+ TM_ENUM(1, FT, VERTGRADIENT)
+ TM_ENUM(2, FT, HORZGRADIENT)
+ TM_ENUM(3, FT, RADIALGRADIENT)
+ TM_ENUM(4, FT, TILEIMAGE)
+END_TM_ENUM()
+
+/* SIZINGTYPE Enum */
+BEGIN_TM_ENUM(SIZINGTYPE)
+ TM_ENUM(0, ST, TRUESIZE)
+ TM_ENUM(1, ST, STRETCH)
+ TM_ENUM(2, ST, TILE)
+END_TM_ENUM()
+
+/* HALIGN Enum */
+BEGIN_TM_ENUM(HALIGN)
+ TM_ENUM(0, HA, LEFT)
+ TM_ENUM(1, HA, CENTER)
+ TM_ENUM(2, HA, RIGHT)
+END_TM_ENUM()
+
+/* CONTENTALIGNMENT Enum */
+BEGIN_TM_ENUM(CONTENTALIGNMENT)
+ TM_ENUM(0, CA, LEFT)
+ TM_ENUM(1, CA, CENTER)
+ TM_ENUM(2, CA, RIGHT)
+END_TM_ENUM()
+
+/* VALIGN Enum */
+BEGIN_TM_ENUM(VALIGN)
+ TM_ENUM(0, VA, TOP)
+ TM_ENUM(1, VA, CENTER)
+ TM_ENUM(2, VA, BOTTOM)
+END_TM_ENUM()
+
+/* OFFSETTYPE Enum */
+BEGIN_TM_ENUM(OFFSETTYPE)
+ TM_ENUM(0, OT, TOPLEFT)
+ TM_ENUM(1, OT, TOPRIGHT)
+ TM_ENUM(2, OT, TOPMIDDLE)
+ TM_ENUM(3, OT, BOTTOMLEFT)
+ TM_ENUM(4, OT, BOTTOMRIGHT)
+ TM_ENUM(5, OT, BOTTOMMIDDLE)
+ TM_ENUM(6, OT, MIDDLELEFT)
+ TM_ENUM(7, OT, MIDDLERIGHT)
+ TM_ENUM(8, OT, LEFTOFCAPTION)
+ TM_ENUM(9, OT, RIGHTOFCAPTION)
+ TM_ENUM(10, OT, LEFTOFLASTBUTTON)
+ TM_ENUM(11, OT, RIGHTOFLASTBUTTON)
+ TM_ENUM(12, OT, ABOVELASTBUTTON)
+ TM_ENUM(13, OT, BELOWLASTBUTTON)
+END_TM_ENUM()
+
+/* ICONEFFECT Enum */
+BEGIN_TM_ENUM(ICONEFFECT)
+ TM_ENUM(0, ICE, NONE)
+ TM_ENUM(1, ICE, GLOW)
+ TM_ENUM(2, ICE, SHADOW)
+ TM_ENUM(3, ICE, PULSE)
+ TM_ENUM(4, ICE, ALPHA)
+END_TM_ENUM()
+
+/* TEXTSHADOWTYPE Enum */
+BEGIN_TM_ENUM(TEXTSHADOWTYPE)
+ TM_ENUM(0, TST, NONE)
+ TM_ENUM(1, TST, SINGLE)
+ TM_ENUM(2, TST, CONTINUOUS)
+END_TM_ENUM()
+
+/* GLYPHTYPE Enum */
+BEGIN_TM_ENUM(GLYPHTYPE)
+ TM_ENUM(0, GT, NONE)
+ TM_ENUM(1, GT, IMAGEGLYPH)
+ TM_ENUM(2, GT, FONTGLYPH)
+END_TM_ENUM()
+
+/* IMAGESELECTTYPE Enum */
+BEGIN_TM_ENUM(IMAGESELECTTYPE)
+ TM_ENUM(0, IST, NONE)
+ TM_ENUM(1, IST, SIZE)
+ TM_ENUM(2, IST, DPI)
+END_TM_ENUM()
+
+/* TRUESIZESCALINGTYPE Enum */
+BEGIN_TM_ENUM(TRUESIZESCALINGTYPE)
+ TM_ENUM(0, TSST, NONE)
+ TM_ENUM(1, TSST, SIZE)
+ TM_ENUM(2, TSST, DPI)
+END_TM_ENUM()
+
+/* GLYPHFONTSIZINGTYPE Enum */
+BEGIN_TM_ENUM(GLYPHFONTSIZINGTYPE)
+ TM_ENUM(0, GFST, NONE)
+ TM_ENUM(1, GFST, SIZE)
+ TM_ENUM(2, GFST, DPI)
+END_TM_ENUM()
+
+
+/***** PROPERTIES *****/
+BEGIN_TM_PROPS()
+
+ /* Primitive types */
+ TM_PROP(201, TMT, STRING, STRING)
+ TM_PROP(202, TMT, INT, INT)
+ TM_PROP(203, TMT, BOOL, BOOL)
+ TM_PROP(204, TMT, COLOR, COLOR)
+ TM_PROP(205, TMT, MARGINS, MARGINS)
+ TM_PROP(206, TMT, FILENAME, FILENAME)
+ TM_PROP(207, TMT, SIZE, SIZE)
+ TM_PROP(208, TMT, POSITION, POSITION)
+ TM_PROP(209, TMT, RECT, RECT)
+ TM_PROP(210, TMT, FONT, FONT)
+ TM_PROP(211, TMT, INTLIST, INTLIST)
+ /* we should have ENUM around here */
+
+ /* Misc properties */
+ TM_PROP(401, TMT, COLORSCHEMES, STRING)
+ TM_PROP(402, TMT, SIZES, STRING)
+ TM_PROP(403, TMT, CHARSET, INT)
+
+ /* Documentation properties */
+ TM_PROP(601, TMT, DISPLAYNAME, STRING)
+ TM_PROP(602, TMT, TOOLTIP, STRING)
+ TM_PROP(603, TMT, COMPANY, STRING)
+ TM_PROP(604, TMT, AUTHOR, STRING)
+ TM_PROP(605, TMT, COPYRIGHT, STRING)
+ TM_PROP(606, TMT, URL, STRING)
+ TM_PROP(607, TMT, VERSION, STRING)
+ TM_PROP(608, TMT, DESCRIPTION, STRING)
+# define TMT_FIRST_RCSTRING_NAME TMT_DISPLAYNAME
+# define TMT_LAST_RCSTRING_NAME TMT_DESCRIPTION
+
+ /* Font theme metric properties */
+ TM_PROP(801, TMT, CAPTIONFONT, FONT)
+ TM_PROP(802, TMT, SMALLCAPTIONFONT, FONT)
+ TM_PROP(803, TMT, MENUFONT, FONT)
+ TM_PROP(804, TMT, STATUSFONT, FONT)
+ TM_PROP(805, TMT, MSGBOXFONT, FONT)
+ TM_PROP(806, TMT, ICONTITLEFONT, FONT)
+# define TMT_FIRSTFONT TMT_CAPTIONFONT
+# define TMT_LASTFONT TMT_ICONTITLEFONT
+
+ /* Bool theme metric properties */
+ TM_PROP(1001, TMT, FLATMENUS, BOOL)
+# define TMT_FIRSTBOOL TMT_FLATMENUS
+# define TMT_LASTBOOL TMT_FLATMENUS
+
+ /* Size theme metric properties */
+ TM_PROP(1201, TMT, SIZINGBORDERWIDTH, SIZE)
+ TM_PROP(1202, TMT, SCROLLBARWIDTH, SIZE)
+ TM_PROP(1203, TMT, SCROLLBARHEIGHT, SIZE)
+ TM_PROP(1204, TMT, CAPTIONBARWIDTH, SIZE)
+ TM_PROP(1205, TMT, CAPTIONBARHEIGHT, SIZE)
+ TM_PROP(1206, TMT, SMCAPTIONBARWIDTH, SIZE)
+ TM_PROP(1207, TMT, SMCAPTIONBARHEIGHT, SIZE)
+ TM_PROP(1208, TMT, MENUBARWIDTH, SIZE)
+ TM_PROP(1209, TMT, MENUBARHEIGHT, SIZE)
+# define TMT_FIRSTSIZE TMT_SIZINGBORDERWIDTH
+# define TMT_LASTSIZE TMT_MENUBARHEIGHT
+
+ /* Int theme metric properties */
+ TM_PROP(1301, TMT, MINCOLORDEPTH, INT)
+# define TMT_FIRSTINT TMT_MINCOLORDEPTH
+# define TMT_LASTINT TMT_MINCOLORDEPTH
+
+ /* String theme metric properties */
+ TM_PROP(1401, TMT, CSSNAME, STRING)
+ TM_PROP(1402, TMT, XMLNAME, STRING)
+# define TMT_FIRSTSTRING TMT_CSSNAME
+# define TMT_LASTSTRING TMT_XMLNAME
+
+ /* Color theme metric properties */
+ TM_PROP(1601, TMT, SCROLLBAR, COLOR)
+ TM_PROP(1602, TMT, BACKGROUND, COLOR)
+ TM_PROP(1603, TMT, ACTIVECAPTION, COLOR)
+ TM_PROP(1604, TMT, INACTIVECAPTION, COLOR)
+ TM_PROP(1605, TMT, MENU, COLOR)
+ TM_PROP(1606, TMT, WINDOW, COLOR)
+ TM_PROP(1607, TMT, WINDOWFRAME, COLOR)
+ TM_PROP(1608, TMT, MENUTEXT, COLOR)
+ TM_PROP(1609, TMT, WINDOWTEXT, COLOR)
+ TM_PROP(1610, TMT, CAPTIONTEXT, COLOR)
+ TM_PROP(1611, TMT, ACTIVEBORDER, COLOR)
+ TM_PROP(1612, TMT, INACTIVEBORDER, COLOR)
+ TM_PROP(1613, TMT, APPWORKSPACE, COLOR)
+ TM_PROP(1614, TMT, HIGHLIGHT, COLOR)
+ TM_PROP(1615, TMT, HIGHLIGHTTEXT, COLOR)
+ TM_PROP(1616, TMT, BTNFACE, COLOR)
+ TM_PROP(1617, TMT, BTNSHADOW, COLOR)
+ TM_PROP(1618, TMT, GRAYTEXT, COLOR)
+ TM_PROP(1619, TMT, BTNTEXT, COLOR)
+ TM_PROP(1620, TMT, INACTIVECAPTIONTEXT, COLOR)
+ TM_PROP(1621, TMT, BTNHIGHLIGHT, COLOR)
+ TM_PROP(1622, TMT, DKSHADOW3D, COLOR)
+ TM_PROP(1623, TMT, LIGHT3D, COLOR)
+ TM_PROP(1624, TMT, INFOTEXT, COLOR)
+ TM_PROP(1625, TMT, INFOBK, COLOR)
+ TM_PROP(1626, TMT, BUTTONALTERNATEFACE, COLOR)
+ TM_PROP(1627, TMT, HOTTRACKING, COLOR)
+ TM_PROP(1628, TMT, GRADIENTACTIVECAPTION, COLOR)
+ TM_PROP(1629, TMT, GRADIENTINACTIVECAPTION, COLOR)
+ TM_PROP(1630, TMT, MENUHILIGHT, COLOR)
+ TM_PROP(1631, TMT, MENUBAR, COLOR)
+# define TMT_FIRSTCOLOR TMT_SCROLLBAR
+# define TMT_LASTCOLOR TMT_MENUBAR
+
+ /* hue substitutions */
+ TM_PROP(1801, TMT, FROMHUE1, INT)
+ TM_PROP(1802, TMT, FROMHUE2, INT)
+ TM_PROP(1803, TMT, FROMHUE3, INT)
+ TM_PROP(1804, TMT, FROMHUE4, INT)
+ TM_PROP(1805, TMT, FROMHUE5, INT)
+ TM_PROP(1806, TMT, TOHUE1, INT)
+ TM_PROP(1807, TMT, TOHUE2, INT)
+ TM_PROP(1808, TMT, TOHUE3, INT)
+ TM_PROP(1809, TMT, TOHUE4, INT)
+ TM_PROP(1810, TMT, TOHUE5, INT)
+
+ /* color substitutions */
+ TM_PROP(2001, TMT, FROMCOLOR1, COLOR)
+ TM_PROP(2002, TMT, FROMCOLOR2, COLOR)
+ TM_PROP(2003, TMT, FROMCOLOR3, COLOR)
+ TM_PROP(2004, TMT, FROMCOLOR4, COLOR)
+ TM_PROP(2005, TMT, FROMCOLOR5, COLOR)
+ TM_PROP(2006, TMT, TOCOLOR1, COLOR)
+ TM_PROP(2007, TMT, TOCOLOR2, COLOR)
+ TM_PROP(2008, TMT, TOCOLOR3, COLOR)
+ TM_PROP(2009, TMT, TOCOLOR4, COLOR)
+ TM_PROP(2010, TMT, TOCOLOR5, COLOR)
+
+ /* Bool rendering properties */
+ TM_PROP(2201, TMT, TRANSPARENT, BOOL)
+ TM_PROP(2202, TMT, AUTOSIZE, BOOL)
+ TM_PROP(2203, TMT, BORDERONLY, BOOL)
+ TM_PROP(2204, TMT, COMPOSITED, BOOL)
+ TM_PROP(2205, TMT, BGFILL, BOOL)
+ TM_PROP(2206, TMT, GLYPHTRANSPARENT, BOOL)
+ TM_PROP(2207, TMT, GLYPHONLY, BOOL)
+ TM_PROP(2208, TMT, ALWAYSSHOWSIZINGBAR, BOOL)
+ TM_PROP(2209, TMT, MIRRORIMAGE, BOOL)
+ TM_PROP(2210, TMT, UNIFORMSIZING, BOOL)
+ TM_PROP(2211, TMT, INTEGRALSIZING, BOOL)
+ TM_PROP(2212, TMT, SOURCEGROW, BOOL)
+ TM_PROP(2213, TMT, SOURCESHRINK, BOOL)
+
+ /* Int rendering properties */
+ TM_PROP(2401, TMT, IMAGECOUNT, INT)
+ TM_PROP(2402, TMT, ALPHALEVEL, INT)
+ TM_PROP(2403, TMT, BORDERSIZE, INT)
+ TM_PROP(2404, TMT, ROUNDCORNERWIDTH, INT)
+ TM_PROP(2405, TMT, ROUNDCORNERHEIGHT, INT)
+ TM_PROP(2406, TMT, GRADIENTRATIO1, INT)
+ TM_PROP(2407, TMT, GRADIENTRATIO2, INT)
+ TM_PROP(2408, TMT, GRADIENTRATIO3, INT)
+ TM_PROP(2409, TMT, GRADIENTRATIO4, INT)
+ TM_PROP(2410, TMT, GRADIENTRATIO5, INT)
+ TM_PROP(2411, TMT, PROGRESSCHUNKSIZE, INT)
+ TM_PROP(2412, TMT, PROGRESSSPACESIZE, INT)
+ TM_PROP(2413, TMT, SATURATION, INT)
+ TM_PROP(2414, TMT, TEXTBORDERSIZE, INT)
+ TM_PROP(2415, TMT, ALPHATHRESHOLD, INT)
+ TM_PROP(2416, TMT, WIDTH, SIZE)
+ TM_PROP(2417, TMT, HEIGHT, SIZE)
+ TM_PROP(2418, TMT, GLYPHINDEX, INT)
+ TM_PROP(2419, TMT, TRUESIZESTRETCHMARK, INT)
+ TM_PROP(2420, TMT, MINDPI1, INT)
+ TM_PROP(2421, TMT, MINDPI2, INT)
+ TM_PROP(2422, TMT, MINDPI3, INT)
+ TM_PROP(2423, TMT, MINDPI4, INT)
+ TM_PROP(2424, TMT, MINDPI5, INT)
+
+ /* Font rendering properties */
+ TM_PROP(2601, TMT, GLYPHFONT, FONT)
+
+ /* Filename rendering properties */
+ TM_PROP(3001, TMT, IMAGEFILE, FILENAME)
+ TM_PROP(3002, TMT, IMAGEFILE1, FILENAME)
+ TM_PROP(3003, TMT, IMAGEFILE2, FILENAME)
+ TM_PROP(3004, TMT, IMAGEFILE3, FILENAME)
+ TM_PROP(3005, TMT, IMAGEFILE4, FILENAME)
+ TM_PROP(3006, TMT, IMAGEFILE5, FILENAME)
+ TM_PROP(3007, TMT, STOCKIMAGEFILE, FILENAME)
+ TM_PROP(3008, TMT, GLYPHIMAGEFILE, FILENAME)
+
+ /* String rendering properties */
+ TM_PROP(3201, TMT, TEXT, STRING)
+
+ /* Position rendering properties */
+ TM_PROP(3401, TMT, OFFSET, POSITION)
+ TM_PROP(3402, TMT, TEXTSHADOWOFFSET, POSITION)
+ TM_PROP(3403, TMT, MINSIZE, POSITION)
+ TM_PROP(3404, TMT, MINSIZE1, POSITION)
+ TM_PROP(3405, TMT, MINSIZE2, POSITION)
+ TM_PROP(3406, TMT, MINSIZE3, POSITION)
+ TM_PROP(3407, TMT, MINSIZE4, POSITION)
+ TM_PROP(3408, TMT, MINSIZE5, POSITION)
+ TM_PROP(3409, TMT, NORMALSIZE, POSITION)
+
+ /* Margin rendering properties */
+ TM_PROP(3601, TMT, SIZINGMARGINS, MARGINS)
+ TM_PROP(3602, TMT, CONTENTMARGINS, MARGINS)
+ TM_PROP(3603, TMT, CAPTIONMARGINS, MARGINS)
+
+ /* Color rendering properties */
+ TM_PROP(3801, TMT, BORDERCOLOR, COLOR)
+ TM_PROP(3802, TMT, FILLCOLOR, COLOR)
+ TM_PROP(3803, TMT, TEXTCOLOR, COLOR)
+ TM_PROP(3804, TMT, EDGELIGHTCOLOR, COLOR)
+ TM_PROP(3805, TMT, EDGEHIGHLIGHTCOLOR, COLOR)
+ TM_PROP(3806, TMT, EDGESHADOWCOLOR, COLOR)
+ TM_PROP(3807, TMT, EDGEDKSHADOWCOLOR, COLOR)
+ TM_PROP(3808, TMT, EDGEFILLCOLOR, COLOR)
+ TM_PROP(3809, TMT, TRANSPARENTCOLOR, COLOR)
+ TM_PROP(3810, TMT, GRADIENTCOLOR1, COLOR)
+ TM_PROP(3811, TMT, GRADIENTCOLOR2, COLOR)
+ TM_PROP(3812, TMT, GRADIENTCOLOR3, COLOR)
+ TM_PROP(3813, TMT, GRADIENTCOLOR4, COLOR)
+ TM_PROP(3814, TMT, GRADIENTCOLOR5, COLOR)
+ TM_PROP(3815, TMT, SHADOWCOLOR, COLOR)
+ TM_PROP(3816, TMT, GLOWCOLOR, COLOR)
+ TM_PROP(3817, TMT, TEXTBORDERCOLOR, COLOR)
+ TM_PROP(3818, TMT, TEXTSHADOWCOLOR, COLOR)
+ TM_PROP(3819, TMT, GLYPHTEXTCOLOR, COLOR)
+ TM_PROP(3820, TMT, GLYPHTRANSPARENTCOLOR, COLOR)
+ TM_PROP(3821, TMT, FILLCOLORHINT, COLOR)
+ TM_PROP(3822, TMT, BORDERCOLORHINT, COLOR)
+ TM_PROP(3823, TMT, ACCENTCOLORHINT, COLOR)
+
+ /* Enum rendering properties */
+ TM_PROP(4001, TMT, BGTYPE, ENUM)
+ TM_PROP(4002, TMT, BORDERTYPE, ENUM)
+ TM_PROP(4003, TMT, FILLTYPE, ENUM)
+ TM_PROP(4004, TMT, SIZINGTYPE, ENUM)
+ TM_PROP(4005, TMT, HALIGN, ENUM)
+ TM_PROP(4006, TMT, CONTENTALIGNMENT, ENUM)
+ TM_PROP(4007, TMT, VALIGN, ENUM)
+ TM_PROP(4008, TMT, OFFSETTYPE, ENUM)
+ TM_PROP(4009, TMT, ICONEFFECT, ENUM)
+ TM_PROP(4010, TMT, TEXTSHADOWTYPE, ENUM)
+ TM_PROP(4011, TMT, IMAGELAYOUT, ENUM)
+ TM_PROP(4012, TMT, GLYPHTYPE, ENUM)
+ TM_PROP(4013, TMT, IMAGESELECTTYPE, ENUM)
+ TM_PROP(4014, TMT, GLYPHFONTSIZINGTYPE, ENUM)
+ TM_PROP(4015, TMT, TRUESIZESCALINGTYPE, ENUM)
+
+ /* custom properties */
+ TM_PROP(5001, TMT, USERPICTURE, BOOL)
+ TM_PROP(5002, TMT, DEFAULTPANESIZE, RECT)
+ TM_PROP(5003, TMT, BLENDCOLOR, COLOR)
+
+END_TM_PROPS()
+
+
+/***** PARTS & STATES *****/
+
+/* BUTTON parts */
+BEGIN_TM_CLASS_PARTS(BUTTON)
+ TM_PART(1, BP, PUSHBUTTON)
+ TM_PART(2, BP, RADIOBUTTON)
+ TM_PART(3, BP, CHECKBOX)
+ TM_PART(4, BP, GROUPBOX)
+ TM_PART(5, BP, USERBUTTON)
+END_TM_CLASS_PARTS()
+
+/* BUTTON - PUSHBUTTON states */
+BEGIN_TM_PART_STATES(PUSHBUTTON)
+ TM_STATE(1, PBS, NORMAL)
+ TM_STATE(2, PBS, HOT)
+ TM_STATE(3, PBS, PRESSED)
+ TM_STATE(4, PBS, DISABLED)
+ TM_STATE(5, PBS, DEFAULTED)
+END_TM_PART_STATES()
+
+/* BUTTON - RADIOBUTTON states */
+BEGIN_TM_PART_STATES(RADIOBUTTON)
+ TM_STATE(1, RBS, UNCHECKEDNORMAL)
+ TM_STATE(2, RBS, UNCHECKEDHOT)
+ TM_STATE(3, RBS, UNCHECKEDPRESSED)
+ TM_STATE(4, RBS, UNCHECKEDDISABLED)
+ TM_STATE(5, RBS, CHECKEDNORMAL)
+ TM_STATE(6, RBS, CHECKEDHOT)
+ TM_STATE(7, RBS, CHECKEDPRESSED)
+ TM_STATE(8, RBS, CHECKEDDISABLED)
+END_TM_PART_STATES()
+
+/* BUTTON - CHECKBOX states */
+BEGIN_TM_PART_STATES(CHECKBOX)
+ TM_STATE(1, CBS, UNCHECKEDNORMAL)
+ TM_STATE(2, CBS, UNCHECKEDHOT)
+ TM_STATE(3, CBS, UNCHECKEDPRESSED)
+ TM_STATE(4, CBS, UNCHECKEDDISABLED)
+ TM_STATE(5, CBS, CHECKEDNORMAL)
+ TM_STATE(6, CBS, CHECKEDHOT)
+ TM_STATE(7, CBS, CHECKEDPRESSED)
+ TM_STATE(8, CBS, CHECKEDDISABLED)
+ TM_STATE(9, CBS, MIXEDNORMAL)
+ TM_STATE(10, CBS, MIXEDHOT)
+ TM_STATE(11, CBS, MIXEDPRESSED)
+ TM_STATE(12, CBS, MIXEDDISABLED)
+END_TM_PART_STATES()
+
+/* BUTTON - GROUPBOX states */
+BEGIN_TM_PART_STATES(GROUPBOX)
+ TM_STATE(1, GBS, NORMAL)
+ TM_STATE(2, GBS, DISABLED)
+END_TM_PART_STATES()
+
+/* CLOCK parts */
+BEGIN_TM_CLASS_PARTS(CLOCK)
+ TM_PART(1, CLP, TIME)
+END_TM_CLASS_PARTS()
+
+/* CLOCK states */
+BEGIN_TM_PART_STATES(CLOCK)
+ TM_STATE(1, CLS, NORMAL)
+END_TM_PART_STATES()
+
+/* COMBOBOX parts */
+BEGIN_TM_CLASS_PARTS(COMBOBOX)
+ TM_PART(1, CP, DROPDOWNBUTTON)
+END_TM_CLASS_PARTS()
+
+/* COMBOBOX states */
+BEGIN_TM_PART_STATES(COMBOBOX)
+ TM_STATE(1, CBXS, NORMAL)
+ TM_STATE(2, CBXS, HOT)
+ TM_STATE(3, CBXS, PRESSED)
+ TM_STATE(4, CBXS, DISABLED)
+END_TM_PART_STATES()
+
+/* EDIT parts */
+BEGIN_TM_CLASS_PARTS(EDIT)
+ TM_PART(1, EP, EDITTEXT)
+ TM_PART(2, EP, CARET)
+END_TM_CLASS_PARTS()
+
+/* EDIT - EDITTEXT states */
+BEGIN_TM_PART_STATES(EDITTEXT)
+ TM_STATE(1, ETS, NORMAL)
+ TM_STATE(2, ETS, HOT)
+ TM_STATE(3, ETS, SELECTED)
+ TM_STATE(4, ETS, DISABLED)
+ TM_STATE(5, ETS, FOCUSED)
+ TM_STATE(6, ETS, READONLY)
+ TM_STATE(7, ETS, ASSIST)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR parts */
+BEGIN_TM_CLASS_PARTS(EXPLORERBAR)
+ TM_PART(1, EBP, HEADERBACKGROUND)
+ TM_PART(2, EBP, HEADERCLOSE)
+ TM_PART(3, EBP, HEADERPIN)
+ TM_PART(4, EBP, IEBARMENU)
+ TM_PART(5, EBP, NORMALGROUPBACKGROUND)
+ TM_PART(6, EBP, NORMALGROUPCOLLAPSE)
+ TM_PART(7, EBP, NORMALGROUPEXPAND)
+ TM_PART(8, EBP, NORMALGROUPHEAD)
+ TM_PART(9, EBP, SPECIALGROUPBACKGROUND)
+ TM_PART(10, EBP, SPECIALGROUPCOLLAPSE)
+ TM_PART(11, EBP, SPECIALGROUPEXPAND)
+ TM_PART(12, EBP, SPECIALGROUPHEAD)
+END_TM_CLASS_PARTS()
+
+/* EXPLORERBAR - HEADERCLOSE states */
+BEGIN_TM_PART_STATES(HEADERCLOSE)
+ TM_STATE(1, EBHC, NORMAL)
+ TM_STATE(2, EBHC, HOT)
+ TM_STATE(3, EBHC, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - HEADERPIN states */
+BEGIN_TM_PART_STATES(HEADERPIN)
+ TM_STATE(1, EBHP, NORMAL)
+ TM_STATE(2, EBHP, HOT)
+ TM_STATE(3, EBHP, PRESSED)
+ TM_STATE(4, EBHP, SELECTEDNORMAL)
+ TM_STATE(5, EBHP, SELECTEDHOT)
+ TM_STATE(6, EBHP, SELECTEDPRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - IEBARMENU states */
+BEGIN_TM_PART_STATES(IEBARMENU)
+ TM_STATE(1, EBM, NORMAL)
+ TM_STATE(2, EBM, HOT)
+ TM_STATE(3, EBM, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - NORMALGROUPCOLLAPSE states */
+BEGIN_TM_PART_STATES(NORMALGROUPCOLLAPSE)
+ TM_STATE(1, EBNGC, NORMAL)
+ TM_STATE(2, EBNGC, HOT)
+ TM_STATE(3, EBNGC, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - NORMALGROUPEXPAND states */
+BEGIN_TM_PART_STATES(NORMALGROUPEXPAND)
+ TM_STATE(1, EBNGE, NORMAL)
+ TM_STATE(2, EBNGE, HOT)
+ TM_STATE(3, EBNGE, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - SPECIALGROUPCOLLAPSE states */
+BEGIN_TM_PART_STATES(SPECIALGROUPCOLLAPSE)
+ TM_STATE(1, EBSGC, NORMAL)
+ TM_STATE(2, EBSGC, HOT)
+ TM_STATE(3, EBSGC, PRESSED)
+END_TM_PART_STATES()
+
+/* EXPLORERBAR - SPECIALGROUPEXPAND states */
+BEGIN_TM_PART_STATES(SPECIALGROUPEXPAND)
+ TM_STATE(1, EBSGE, NORMAL)
+ TM_STATE(2, EBSGE, HOT)
+ TM_STATE(3, EBSGE, PRESSED)
+END_TM_PART_STATES()
+
+/* GLOBALS parts */
+BEGIN_TM_CLASS_PARTS(GLOBALS)
+ TM_PART(1, GP, BORDER)
+ TM_PART(2, GP, LINEHORZ)
+ TM_PART(3, GP, LINEVERT)
+END_TM_CLASS_PARTS()
+
+/* GLOBALS - BORDER states */
+BEGIN_TM_PART_STATES(BORDER)
+ TM_STATE(1, BSS, FLAT)
+ TM_STATE(2, BSS, RAISED)
+ TM_STATE(3, BSS, SUNKEN)
+END_TM_PART_STATES()
+
+/* GLOBALS - LINEHORZ states */
+BEGIN_TM_PART_STATES(LINEHORZ)
+ TM_STATE(1, LHS, FLAT)
+ TM_STATE(2, LHS, RAISED)
+ TM_STATE(3, LHS, SUNKEN)
+END_TM_PART_STATES()
+
+/* GLOBAL - LINEVERT states */
+BEGIN_TM_PART_STATES(LINEVERT)
+ TM_STATE(1, LVS, FLAT)
+ TM_STATE(2, LVS, RAISED)
+ TM_STATE(3, LVS, SUNKEN)
+END_TM_PART_STATES()
+
+/* HEADER parts */
+BEGIN_TM_CLASS_PARTS(HEADER)
+ TM_PART(1, HP, HEADERITEM)
+ TM_PART(2, HP, HEADERITEMLEFT)
+ TM_PART(3, HP, HEADERITEMRIGHT)
+ TM_PART(4, HP, HEADERSORTARROW)
+END_TM_CLASS_PARTS()
+
+/* HEADER - HEADERITEM states */
+BEGIN_TM_PART_STATES(HEADERITEM)
+ TM_STATE(1, HIS, NORMAL)
+ TM_STATE(2, HIS, HOT)
+ TM_STATE(3, HIS, PRESSED)
+END_TM_PART_STATES()
+
+/* HEADER - HEADERITEMLEFT states */
+BEGIN_TM_PART_STATES(HEADERITEMLEFT)
+ TM_STATE(1, HILS, NORMAL)
+ TM_STATE(2, HILS, HOT)
+ TM_STATE(3, HILS, PRESSED)
+END_TM_PART_STATES()
+
+/* HEADER - HEADERITEMRIGHT states */
+BEGIN_TM_PART_STATES(HEADERITEMRIGHT)
+ TM_STATE(1, HIRS, NORMAL)
+ TM_STATE(2, HIRS, HOT)
+ TM_STATE(3, HIRS, PRESSED)
+END_TM_PART_STATES()
+
+/* HEADER - HEADERSORTARROW states */
+BEGIN_TM_PART_STATES(HEADERSORTARROW)
+ TM_STATE(1, HSAS, SORTEDUP)
+ TM_STATE(2, HSAS, SORTEDDOWN)
+END_TM_PART_STATES()
+
+/* LISTVIEW parts */
+BEGIN_TM_CLASS_PARTS(LISTVIEW)
+ TM_PART(1, LVP, LISTITEM)
+ TM_PART(2, LVP, LISTGROUP)
+ TM_PART(3, LVP, LISTDETAIL)
+ TM_PART(4, LVP, LISTSORTEDDETAIL)
+ TM_PART(5, LVP, EMPTYTEXT)
+END_TM_CLASS_PARTS()
+
+/* LISTVIEW - LISTITEM states */
+BEGIN_TM_PART_STATES(LISTITEM)
+ TM_STATE(1, LIS, NORMAL)
+ TM_STATE(2, LIS, HOT)
+ TM_STATE(3, LIS, SELECTED)
+ TM_STATE(4, LIS, DISABLED)
+ TM_STATE(5, LIS, SELECTEDNOTFOCUS)
+END_TM_PART_STATES()
+
+/* MENU parts */
+BEGIN_TM_CLASS_PARTS(MENU)
+ TM_PART(1, MP, MENUITEM)
+ TM_PART(2, MP, MENUDROPDOWN)
+ TM_PART(3, MP, MENUBARITEM)
+ TM_PART(4, MP, MENUBARDROPDOWN)
+ TM_PART(5, MP, CHEVRON)
+ TM_PART(6, MP, SEPARATOR)
+END_TM_CLASS_PARTS()
+
+/* MENU - * states */
+BEGIN_TM_PART_STATES(MENU)
+ TM_STATE(1, MS, NORMAL)
+ TM_STATE(2, MS, SELECTED)
+ TM_STATE(3, MS, DEMOTED)
+END_TM_PART_STATES()
+
+/* MENUBAND parts */
+BEGIN_TM_CLASS_PARTS(MENUBAND)
+ TM_PART(1, MDP, NEWAPPBUTTON)
+/* MDP_SEPERATOR isn't a typo, as per Microsoft's headers */
+ TM_PART(2, MDP, SEPERATOR)
+END_TM_CLASS_PARTS()
+
+/* MENUBAND states */
+BEGIN_TM_PART_STATES(MENUBAND)
+ TM_STATE(1, MDS, NORMAL)
+ TM_STATE(2, MDS, HOT)
+ TM_STATE(3, MDS, PRESSED)
+ TM_STATE(4, MDS, DISABLED)
+ TM_STATE(5, MDS, CHECKED)
+ TM_STATE(6, MDS, HOTCHECKED)
+END_TM_PART_STATES()
+
+/* PAGE parts */
+BEGIN_TM_CLASS_PARTS(PAGE)
+ TM_PART(1, PGRP, UP)
+ TM_PART(2, PGRP, DOWN)
+ TM_PART(3, PGRP, UPHORZ)
+ TM_PART(4, PGRP, DOWNHORZ)
+END_TM_CLASS_PARTS()
+
+/* PAGE - UP states */
+BEGIN_TM_PART_STATES(UP)
+ TM_STATE(1, UPS, NORMAL)
+ TM_STATE(2, UPS, HOT)
+ TM_STATE(3, UPS, PRESSED)
+ TM_STATE(4, UPS, DISABLED)
+END_TM_PART_STATES()
+
+/* PAGE - DOWN states */
+BEGIN_TM_PART_STATES(DOWN)
+ TM_STATE(1, DNS, NORMAL)
+ TM_STATE(2, DNS, HOT)
+ TM_STATE(3, DNS, PRESSED)
+ TM_STATE(4, DNS, DISABLED)
+END_TM_PART_STATES()
+
+/* PAGE - UPHORZ states */
+BEGIN_TM_PART_STATES(UPHORZ)
+ TM_STATE(1, UPHZS, NORMAL)
+ TM_STATE(2, UPHZS, HOT)
+ TM_STATE(3, UPHZS, PRESSED)
+ TM_STATE(4, UPHZS, DISABLED)
+END_TM_PART_STATES()
+
+/* PAGE - DOWNHORZ states */
+BEGIN_TM_PART_STATES(DOWNHORZ)
+ TM_STATE(1, DNHZS, NORMAL)
+ TM_STATE(2, DNHZS, HOT)
+ TM_STATE(3, DNHZS, PRESSED)
+ TM_STATE(4, DNHZS, DISABLED)
+END_TM_PART_STATES()
+
+/* PROGRESS parts */
+BEGIN_TM_CLASS_PARTS(PROGRESS)
+ TM_PART(1, PP, BAR)
+ TM_PART(2, PP, BARVERT)
+ TM_PART(3, PP, CHUNK)
+ TM_PART(4, PP, CHUNKVERT)
+END_TM_CLASS_PARTS()
+
+/* REBAR parts */
+BEGIN_TM_CLASS_PARTS(REBAR)
+ TM_PART(1, RP, GRIPPER)
+ TM_PART(2, RP, GRIPPERVERT)
+ TM_PART(3, RP, BAND)
+ TM_PART(4, RP, CHEVRON)
+ TM_PART(5, RP, CHEVRONVERT)
+END_TM_CLASS_PARTS()
+
+/* REBAR - CHEVRON states */
+BEGIN_TM_PART_STATES(CHEVRON)
+ TM_STATE(1, CHEVS, NORMAL)
+ TM_STATE(2, CHEVS, HOT)
+ TM_STATE(3, CHEVS, PRESSED)
+END_TM_PART_STATES()
+
+/* SCROLLBAR parts */
+BEGIN_TM_CLASS_PARTS(SCROLLBAR)
+ TM_PART(1, SBP, ARROWBTN)
+ TM_PART(2, SBP, THUMBBTNHORZ)
+ TM_PART(3, SBP, THUMBBTNVERT)
+ TM_PART(4, SBP, LOWERTRACKHORZ)
+ TM_PART(5, SBP, UPPERTRACKHORZ)
+ TM_PART(6, SBP, LOWERTRACKVERT)
+ TM_PART(7, SBP, UPPERTRACKVERT)
+ TM_PART(8, SBP, GRIPPERHORZ)
+ TM_PART(9, SBP, GRIPPERVERT)
+ TM_PART(10, SBP, SIZEBOX)
+END_TM_CLASS_PARTS()
+
+/* SCROLLBAR - ARROWBTN states */
+BEGIN_TM_PART_STATES(ARROWBTN)
+ TM_STATE(1, ABS, UPNORMAL)
+ TM_STATE(2, ABS, UPHOT)
+ TM_STATE(3, ABS, UPPRESSED)
+ TM_STATE(4, ABS, UPDISABLED)
+ TM_STATE(5, ABS, DOWNNORMAL)
+ TM_STATE(6, ABS, DOWNHOT)
+ TM_STATE(7, ABS, DOWNPRESSED)
+ TM_STATE(8, ABS, DOWNDISABLED)
+ TM_STATE(9, ABS, LEFTNORMAL)
+ TM_STATE(10, ABS, LEFTHOT)
+ TM_STATE(11, ABS, LEFTPRESSED)
+ TM_STATE(12, ABS, LEFTDISABLED)
+ TM_STATE(13, ABS, RIGHTNORMAL)
+ TM_STATE(14, ABS, RIGHTHOT)
+ TM_STATE(15, ABS, RIGHTPRESSED)
+ TM_STATE(16, ABS, RIGHTDISABLED)
+END_TM_PART_STATES()
+
+/* SCROLLBAR - LOWER* / THUMB* / UPPER* states */
+BEGIN_TM_PART_STATES(SCROLLBAR)
+ TM_STATE(1, SCRBS, NORMAL)
+ TM_STATE(2, SCRBS, HOT)
+ TM_STATE(3, SCRBS, PRESSED)
+ TM_STATE(4, SCRBS, DISABLED)
+END_TM_PART_STATES()
+
+/* SCROLLBAR - SIZEBOX states */
+BEGIN_TM_PART_STATES(SIZEBOX)
+ TM_STATE(1, SZB, RIGHTALIGN)
+ TM_STATE(2, SZB, LEFTALIGN)
+END_TM_PART_STATES()
+
+/* SPIN parts */
+BEGIN_TM_CLASS_PARTS(SPIN)
+ TM_PART(1, SPNP, UP)
+ TM_PART(2, SPNP, DOWN)
+ TM_PART(3, SPNP, UPHORZ)
+ TM_PART(4, SPNP, DOWNHORZ)
+END_TM_CLASS_PARTS()
+
+/* SPIN * states */
+/* See PAGE states */
+
+/* STARTPANEL parts */
+BEGIN_TM_CLASS_PARTS(STARTPANEL)
+ TM_PART(1, SPP, USERPANE)
+ TM_PART(2, SPP, MOREPROGRAMS)
+ TM_PART(3, SPP, MOREPROGRAMSARROW)
+ TM_PART(4, SPP, PROGLIST)
+ TM_PART(5, SPP, PROGLISTSEPARATOR)
+ TM_PART(6, SPP, PLACESLIST)
+ TM_PART(7, SPP, PLACESLISTSEPARATOR)
+ TM_PART(8, SPP, LOGOFF)
+ TM_PART(9, SPP, LOGOFFBUTTONS)
+ TM_PART(10, SPP, USERPICTURE)
+ TM_PART(11, SPP, PREVIEW)
+END_TM_CLASS_PARTS()
+
+/* STARTPANEL - MOREPROGRAMSARROW states */
+BEGIN_TM_PART_STATES(MOREPROGRAMSARROW)
+ TM_STATE(1, SPS, NORMAL)
+ TM_STATE(2, SPS, HOT)
+ TM_STATE(3, SPS, PRESSED)
+END_TM_PART_STATES()
+
+/* STARTPANEL - LOGOFFBUTTONS states */
+BEGIN_TM_PART_STATES(LOGOFFBUTTONS)
+ TM_STATE(1, SPLS, NORMAL)
+ TM_STATE(2, SPLS, HOT)
+ TM_STATE(3, SPLS, PRESSED)
+END_TM_PART_STATES()
+
+/* STATUS parts */
+BEGIN_TM_CLASS_PARTS(STATUS)
+ TM_PART(1, SP, PANE)
+ TM_PART(2, SP, GRIPPERPANE)
+ TM_PART(3, SP, GRIPPER)
+END_TM_CLASS_PARTS()
+
+/* TAB parts */
+BEGIN_TM_CLASS_PARTS(TAB)
+ TM_PART(1, TABP, TABITEM)
+ TM_PART(2, TABP, TABITEMLEFTEDGE)
+ TM_PART(3, TABP, TABITEMRIGHTEDGE)
+ TM_PART(4, TABP, TABITEMBOTHEDGE)
+ TM_PART(5, TABP, TOPTABITEM)
+ TM_PART(6, TABP, TOPTABITEMLEFTEDGE)
+ TM_PART(7, TABP, TOPTABITEMRIGHTEDGE)
+ TM_PART(8, TABP, TOPTABITEMBOTHEDGE)
+ TM_PART(9, TABP, PANE)
+ TM_PART(10, TABP, BODY)
+END_TM_CLASS_PARTS()
+
+/* TAB - TABITEM states */
+BEGIN_TM_PART_STATES(TABITEM)
+ TM_STATE(1, TIS, NORMAL)
+ TM_STATE(2, TIS, HOT)
+ TM_STATE(3, TIS, SELECTED)
+ TM_STATE(4, TIS, DISABLED)
+ TM_STATE(5, TIS, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TABITEMLEFTEDGE states */
+BEGIN_TM_PART_STATES(TABITEMLEFTEDGE)
+ TM_STATE(1, TILES, NORMAL)
+ TM_STATE(2, TILES, HOT)
+ TM_STATE(3, TILES, SELECTED)
+ TM_STATE(4, TILES, DISABLED)
+ TM_STATE(5, TILES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TABITEMRIGHTEDGE states */
+BEGIN_TM_PART_STATES(TABITEMRIGHTEDGE)
+ TM_STATE(1, TIRES, NORMAL)
+ TM_STATE(2, TIRES, HOT)
+ TM_STATE(3, TIRES, SELECTED)
+ TM_STATE(4, TIRES, DISABLED)
+ TM_STATE(5, TIRES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TABITEMBOTHEDGES states */
+BEGIN_TM_PART_STATES(TABITEMBOTHEDGES)
+ TM_STATE(1, TIBES, NORMAL)
+ TM_STATE(2, TIBES, HOT)
+ TM_STATE(3, TIBES, SELECTED)
+ TM_STATE(4, TIBES, DISABLED)
+ TM_STATE(5, TIBES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEM states */
+BEGIN_TM_PART_STATES(TOPTABITEM)
+ TM_STATE(1, TTIS, NORMAL)
+ TM_STATE(2, TTIS, HOT)
+ TM_STATE(3, TTIS, SELECTED)
+ TM_STATE(4, TTIS, DISABLED)
+ TM_STATE(5, TTIS, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEMLEFTEDGE states */
+BEGIN_TM_PART_STATES(TOPTABITEMLEFTEDGE)
+ TM_STATE(1, TTILES, NORMAL)
+ TM_STATE(2, TTILES, HOT)
+ TM_STATE(3, TTILES, SELECTED)
+ TM_STATE(4, TTILES, DISABLED)
+ TM_STATE(5, TTILES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEMRIGHTEDGE states */
+BEGIN_TM_PART_STATES(TOPTABITEMRIGHTEDGE)
+ TM_STATE(1, TTIRES, NORMAL)
+ TM_STATE(2, TTIRES, HOT)
+ TM_STATE(3, TTIRES, SELECTED)
+ TM_STATE(4, TTIRES, DISABLED)
+ TM_STATE(5, TTIRES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TAB - TOPTABITEMBOTHEDGES states */
+BEGIN_TM_PART_STATES(TOPTABITEMBOTHEDGES)
+ TM_STATE(1, TTIBES, NORMAL)
+ TM_STATE(2, TTIBES, HOT)
+ TM_STATE(3, TTIBES, SELECTED)
+ TM_STATE(4, TTIBES, DISABLED)
+ TM_STATE(5, TTIBES, FOCUSED)
+END_TM_PART_STATES()
+
+/* TASKBAND parts */
+BEGIN_TM_CLASS_PARTS(TASKBAND)
+ TM_PART(1, TDP, GROUPCOUNT)
+ TM_PART(2, TDP, FLASHBUTTON)
+ TM_PART(3, TDP, FLASHBUTTONGROUPMENU)
+END_TM_CLASS_PARTS()
+
+/* TASKBAR parts */
+BEGIN_TM_CLASS_PARTS(TASKBAR)
+ TM_PART(1, TBP, BACKGROUNDBOTTOM)
+ TM_PART(2, TBP, BACKGROUNDRIGHT)
+ TM_PART(3, TBP, BACKGROUNDTOP)
+ TM_PART(4, TBP, BACKGROUNDLEFT)
+ TM_PART(5, TBP, SIZINGBARBOTTOM)
+ TM_PART(6, TBP, SIZINGBARRIGHT)
+ TM_PART(7, TBP, SIZINGBARTOP)
+ TM_PART(8, TBP, SIZINGBARLEFT)
+END_TM_CLASS_PARTS()
+
+/* TOOLBAR parts */
+BEGIN_TM_CLASS_PARTS(TOOLBAR)
+ TM_PART(1, TP, BUTTON)
+ TM_PART(2, TP, DROPDOWNBUTTON)
+ TM_PART(3, TP, SPLITBUTTON)
+ TM_PART(4, TP, SPLITBUTTONDROPDOWN)
+ TM_PART(5, TP, SEPARATOR)
+ TM_PART(6, TP, SEPARATORVERT)
+END_TM_CLASS_PARTS()
+
+/* TOOLBAR - * states */
+BEGIN_TM_PART_STATES(TOOLBAR)
+ TM_STATE(1, TS, NORMAL)
+ TM_STATE(2, TS, HOT)
+ TM_STATE(3, TS, PRESSED)
+ TM_STATE(4, TS, DISABLED)
+ TM_STATE(5, TS, CHECKED)
+ TM_STATE(6, TS, HOTCHECKED)
+END_TM_PART_STATES()
+
+/* TOOLTIP parts */
+BEGIN_TM_CLASS_PARTS(TOOLTIP)
+ TM_PART(1, TTP, STANDARD)
+ TM_PART(2, TTP, STANDARDTITLE)
+ TM_PART(3, TTP, BALLOON)
+ TM_PART(4, TTP, BALLOONTITLE)
+ TM_PART(5, TTP, CLOSE)
+END_TM_CLASS_PARTS()
+
+/* TOOLTIP - STANDARD states */
+BEGIN_TM_PART_STATES(STANDARD)
+ TM_STATE(1, TTSS, NORMAL)
+ TM_STATE(2, TTSS, LINK)
+END_TM_PART_STATES()
+
+/* TOOLTIP - STANDARDTITLE states */
+/* See TOOLTIP STANDARD */
+
+/* TOOLTIP - BALLOON states */
+BEGIN_TM_PART_STATES(BALLOON)
+ TM_STATE(1, TTBS, NORMAL)
+ TM_STATE(2, TTBS, LINK)
+END_TM_PART_STATES()
+
+/* TOOLTIP - BALLOONTITLE states */
+/* See TOOLTIP BALLOON */
+
+/* TOOLTIP - CLOSE states */
+BEGIN_TM_PART_STATES(CLOSE)
+ TM_STATE(1, TTCS, NORMAL)
+ TM_STATE(2, TTCS, HOT)
+ TM_STATE(3, TTCS, PRESSED)
+END_TM_PART_STATES()
+
+/* TRACKBAR parts */
+BEGIN_TM_CLASS_PARTS(TRACKBAR)
+ TM_PART(1, TKP, TRACK)
+ TM_PART(2, TKP, TRACKVERT)
+ TM_PART(3, TKP, THUMB)
+ TM_PART(4, TKP, THUMBBOTTOM)
+ TM_PART(5, TKP, THUMBTOP)
+ TM_PART(6, TKP, THUMBVERT)
+ TM_PART(7, TKP, THUMBLEFT)
+ TM_PART(8, TKP, THUMBRIGHT)
+ TM_PART(9, TKP, TICS)
+ TM_PART(10, TKP, TICSVERT)
+END_TM_CLASS_PARTS()
+
+/* TRACKBAR states */
+BEGIN_TM_PART_STATES(TRACKBAR)
+ TM_STATE(1, TKS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TRACK states */
+BEGIN_TM_PART_STATES(TRACK)
+ TM_STATE(1, TRS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TRACKVERT states */
+BEGIN_TM_PART_STATES(TRACKVERT)
+ TM_STATE(1, TRVS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMB states */
+BEGIN_TM_PART_STATES(THUMB)
+ TM_STATE(1, TUS, NORMAL)
+ TM_STATE(2, TUS, HOT)
+ TM_STATE(3, TUS, PRESSED)
+ TM_STATE(4, TUS, FOCUSED)
+ TM_STATE(5, TUS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBBOTTOM states */
+BEGIN_TM_PART_STATES(THUMBBOTTOM)
+ TM_STATE(1, TUBS, NORMAL)
+ TM_STATE(2, TUBS, HOT)
+ TM_STATE(3, TUBS, PRESSED)
+ TM_STATE(4, TUBS, FOCUSED)
+ TM_STATE(5, TUBS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBTOP states */
+BEGIN_TM_PART_STATES(THUMBTOP)
+ TM_STATE(1, TUTS, NORMAL)
+ TM_STATE(2, TUTS, HOT)
+ TM_STATE(3, TUTS, PRESSED)
+ TM_STATE(4, TUTS, FOCUSED)
+ TM_STATE(5, TUTS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBVERT states */
+BEGIN_TM_PART_STATES(THUMBVERT)
+ TM_STATE(1, TUVS, NORMAL)
+ TM_STATE(2, TUVS, HOT)
+ TM_STATE(3, TUVS, PRESSED)
+ TM_STATE(4, TUVS, FOCUSED)
+ TM_STATE(5, TUVS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBLEFT states */
+BEGIN_TM_PART_STATES(THUMBLEFT)
+ TM_STATE(1, TUVLS, NORMAL)
+ TM_STATE(2, TUVLS, HOT)
+ TM_STATE(3, TUVLS, PRESSED)
+ TM_STATE(4, TUVLS, FOCUSED)
+ TM_STATE(5, TUVLS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - THUMBRIGHT states */
+BEGIN_TM_PART_STATES(THUMBRIGHT)
+ TM_STATE(1, TUVRS, NORMAL)
+ TM_STATE(2, TUVRS, HOT)
+ TM_STATE(3, TUVRS, PRESSED)
+ TM_STATE(4, TUVRS, FOCUSED)
+ TM_STATE(5, TUVRS, DISABLED)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TICS states */
+BEGIN_TM_PART_STATES(TICS)
+ TM_STATE(1, TSS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRACKBAR - TICSVERT states */
+BEGIN_TM_PART_STATES(TICSVERT)
+ TM_STATE(1, TSVS, NORMAL)
+END_TM_PART_STATES()
+
+/* TRAYNOTIFY parts */
+BEGIN_TM_CLASS_PARTS(TRAYNOTIFY)
+ TM_PART(1, TNP, BACKGROUND)
+ TM_PART(2, TNP, ANIMBACKGROUND)
+END_TM_CLASS_PARTS()
+
+/* TREEVIEW parts */
+BEGIN_TM_CLASS_PARTS(TREEVIEW)
+ TM_PART(1, TVP, TREEITEM)
+ TM_PART(2, TVP, GLYPH)
+ TM_PART(3, TVP, BRANCH)
+END_TM_CLASS_PARTS()
+
+/* TREEVIEW - TREEITEM states */
+BEGIN_TM_PART_STATES(TREEITEM)
+ TM_STATE(1, TREIS, NORMAL)
+ TM_STATE(2, TREIS, HOT)
+ TM_STATE(3, TREIS, SELECTED)
+ TM_STATE(4, TREIS, DISABLED)
+ TM_STATE(5, TREIS, SELECTEDNOTFOCUS)
+END_TM_PART_STATES()
+
+/* TREEVIEW - GLYPH states */
+BEGIN_TM_PART_STATES(GLYPH)
+ TM_STATE(1, GLPS, CLOSED)
+ TM_STATE(2, GLPS, OPENED)
+END_TM_PART_STATES()
+
+/* WINDOW parts */
+BEGIN_TM_CLASS_PARTS(WINDOW)
+ TM_PART(1, WP, CAPTION)
+ TM_PART(2, WP, SMALLCAPTION)
+ TM_PART(3, WP, MINCAPTION)
+ TM_PART(4, WP, SMALLMINCAPTION)
+ TM_PART(5, WP, MAXCAPTION)
+ TM_PART(6, WP, SMALLMAXCAPTION)
+ TM_PART(7, WP, FRAMELEFT)
+ TM_PART(8, WP, FRAMERIGHT)
+ TM_PART(9, WP, FRAMEBOTTOM)
+ TM_PART(10, WP, SMALLFRAMELEFT)
+ TM_PART(11, WP, SMALLFRAMERIGHT)
+ TM_PART(12, WP, SMALLFRAMEBOTTOM)
+ TM_PART(13, WP, SYSBUTTON)
+ TM_PART(14, WP, MDISYSBUTTON)
+ TM_PART(15, WP, MINBUTTON)
+ TM_PART(16, WP, MDIMINBUTTON)
+ TM_PART(17, WP, MAXBUTTON)
+ TM_PART(18, WP, CLOSEBUTTON)
+ TM_PART(19, WP, SMALLCLOSEBUTTON)
+ TM_PART(20, WP, MDICLOSEBUTTON)
+ TM_PART(21, WP, RESTOREBUTTON)
+ TM_PART(22, WP, MDIRESTOREBUTTON)
+ TM_PART(23, WP, HELPBUTTON)
+ TM_PART(24, WP, MDIHELPBUTTON)
+ TM_PART(25, WP, HORZSCROLL)
+ TM_PART(26, WP, HORZTHUMB)
+ TM_PART(27, WP, VERTSCROLL)
+ TM_PART(28, WP, VERTTHUMB)
+ TM_PART(29, WP, DIALOG)
+ TM_PART(30, WP, CAPTIONSIZINGTEMPLATE)
+ TM_PART(31, WP, SMALLCAPTIONSIZINGTEMPLATE)
+ TM_PART(32, WP, FRAMELEFTSIZINGTEMPLATE)
+ TM_PART(33, WP, SMALLFRAMELEFTSIZINGTEMPLATE)
+ TM_PART(34, WP, FRAMERIGHTSIZINGTEMPLATE)
+ TM_PART(35, WP, SMALLFRAMERIGHTSIZINGTEMPLATE)
+ TM_PART(36, WP, FRAMEBOTTOMSIZINGTEMPLATE)
+ TM_PART(37, WP, SMALLFRAMEBOTTOMSIZINGTEMPLATE)
+END_TM_CLASS_PARTS()
+
+/* WINDOW - CAPTION / SMALLCAPTION states */
+BEGIN_TM_PART_STATES(CAPTION)
+ TM_STATE(1, CS, ACTIVE)
+ TM_STATE(2, CS, INACTIVE)
+ TM_STATE(3, CS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MINCAPTION / SMALLMINCAPTION states */
+BEGIN_TM_PART_STATES(MINCAPTION)
+ TM_STATE(1, MNCS, ACTIVE)
+ TM_STATE(2, MNCS, INACTIVE)
+ TM_STATE(3, MNCS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MAXCAPTION / SMALLMAXCAPTION states */
+BEGIN_TM_PART_STATES(MAXCAPTION)
+ TM_STATE(1, MXCS, ACTIVE)
+ TM_STATE(2, MXCS, INACTIVE)
+ TM_STATE(3, MXCS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - FRAME* / SMALLFRAME* states */
+BEGIN_TM_PART_STATES(FRAME)
+ TM_STATE(1, FS, ACTIVE)
+ TM_STATE(2, FS, INACTIVE)
+END_TM_PART_STATES()
+
+/* WINDOW - SYSBUTTON / MDISYSBUTTON states */
+BEGIN_TM_PART_STATES(SYSBUTTON)
+ TM_STATE(1, SBS, NORMAL)
+ TM_STATE(2, SBS, HOT)
+ TM_STATE(3, SBS, PUSHED)
+ TM_STATE(4, SBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MINBUTTON / MDIMINBUTTON states */
+BEGIN_TM_PART_STATES(MINBUTTON)
+ TM_STATE(1, MINBS, NORMAL)
+ TM_STATE(2, MINBS, HOT)
+ TM_STATE(3, MINBS, PUSHED)
+ TM_STATE(4, MINBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - MAXBUTTON states */
+BEGIN_TM_PART_STATES(MAXBUTTON)
+ TM_STATE(1, MAXBS, NORMAL)
+ TM_STATE(2, MAXBS, HOT)
+ TM_STATE(3, MAXBS, PUSHED)
+ TM_STATE(4, MAXBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - CLOSEBUTTON / SMALLCLOSEBUTTON / MDICLOSEBUTTON states */
+BEGIN_TM_PART_STATES(CLOSEBUTTON)
+ TM_STATE(1, CBS, NORMAL)
+ TM_STATE(2, CBS, HOT)
+ TM_STATE(3, CBS, PUSHED)
+ TM_STATE(4, CBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - RESTOREBUTTON / MDIRESTOREBUTTON states */
+BEGIN_TM_PART_STATES(RESTOREBUTTON)
+ TM_STATE(1, RBS, NORMAL)
+ TM_STATE(2, RBS, HOT)
+ TM_STATE(3, RBS, PUSHED)
+ TM_STATE(4, RBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - HELPBUTTON / MDIHELPBUTTON states */
+BEGIN_TM_PART_STATES(HELPBUTTON)
+ TM_STATE(1, HBS, NORMAL)
+ TM_STATE(2, HBS, HOT)
+ TM_STATE(3, HBS, PUSHED)
+ TM_STATE(4, HBS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - HORZSCROLL states */
+BEGIN_TM_PART_STATES(HORZSCROLL)
+ TM_STATE(1, HSS, NORMAL)
+ TM_STATE(2, HSS, HOT)
+ TM_STATE(3, HSS, PUSHED)
+ TM_STATE(4, HSS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - HORZTHUMB states */
+BEGIN_TM_PART_STATES(HORZTHUMB)
+ TM_STATE(1, HTS, NORMAL)
+ TM_STATE(2, HTS, HOT)
+ TM_STATE(3, HTS, PUSHED)
+ TM_STATE(4, HTS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - VERTSCROLL states */
+BEGIN_TM_PART_STATES(VERTSCROLL)
+ TM_STATE(1, VSS, NORMAL)
+ TM_STATE(2, VSS, HOT)
+ TM_STATE(3, VSS, PUSHED)
+ TM_STATE(4, VSS, DISABLED)
+END_TM_PART_STATES()
+
+/* WINDOW - VERTTHUMB states */
+BEGIN_TM_PART_STATES(VERTTHUMB)
+ TM_STATE(1, VTS, NORMAL)
+ TM_STATE(2, VTS, HOT)
+ TM_STATE(3, VTS, PUSHED)
+ TM_STATE(4, VTS, DISABLED)
+END_TM_PART_STATES()
+
+END_TM_SCHEMA(ThemeMgrSchema)
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl
new file mode 100644
index 00000000..f636e20d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/tom.idl
@@ -0,0 +1,444 @@
+/*
+ * Copyright 2006 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef FindText")
+cpp_quote("#endif")
+
+typedef enum tagTomConstants
+{
+ tomFalse = 0,
+ tomTrue = -1,
+ tomUndefined = -9999999,
+ tomToggle = -9999998,
+ tomAutoColor = -9999997,
+ tomDefault = -9999996,
+ tomSuspend = -9999995,
+ tomResume = -9999994,
+ tomApplyNow = 0,
+ tomApplyLater = 1,
+ tomTrackParms = 2,
+ tomCacheParms = 3,
+ tomBackward = 0xc0000001,
+ tomForward = 0x3fffffff,
+ tomMove = 0,
+ tomExtend = 1,
+ tomNoSelection = 0,
+ tomSelectionIP = 1,
+ tomSelectionNormal = 2,
+ tomSelectionFrame = 3,
+ tomSelectionColumn = 4,
+ tomSelectionRow = 5,
+ tomSelectionBlock = 6,
+ tomSelectionInlineShape = 7,
+ tomSelectionShape = 8,
+ tomSelStartActive = 1,
+ tomSelAtEOL = 2,
+ tomSelOvertype = 4,
+ tomSelActive = 8,
+ tomSelReplace = 16,
+ tomEnd = 0,
+ tomStart = 32,
+ tomCollapseEnd = 0,
+ tomCollapseStart = 1,
+ tomClientCoord = 256,
+ tomNone = 0,
+ tomSingle = 1,
+ tomWords = 2,
+ tomDouble = 3,
+ tomDotted = 4,
+ tomDash = 5,
+ tomDashDot = 6,
+ tomDashDotDot = 7,
+ tomWave = 8,
+ tomThick = 9,
+ tomHair = 10,
+ tomLineSpaceSingle = 0,
+ tomLineSpace1pt5 = 1,
+ tomLineSpaceDouble = 2,
+ tomLineSpaceAtLeast = 3,
+ tomLineSpaceExactly = 4,
+ tomLineSpaceMultiple = 5,
+ tomAlignLeft = 0,
+ tomAlignCenter = 1,
+ tomAlignRight = 2,
+ tomAlignJustify = 3,
+ tomAlignDecimal = 3,
+ tomAlignBar = 4,
+ tomAlignInterWord = 3,
+ tomAlignInterLetter = 4,
+ tomAlignScaled = 5,
+ tomAlignGlyphs = 6,
+ tomAlignSnapGrid = 7,
+ tomSpaces = 0,
+ tomDots = 1,
+ tomDashes = 2,
+ tomLines = 3,
+ tomThickLines = 4,
+ tomEquals = 5,
+ tomTabBack = -3,
+ tomTabNext = -2,
+ tomTabHere = -1,
+ tomListBullet = 1,
+ tomListNumberAsArabic = 2,
+ tomListNumberAsLCLetter = 3,
+ tomListNumberAsUCLetter = 4,
+ tomListNumberAsLCRoman = 5,
+ tomListNumberAsUCRoman = 6,
+ tomListNumberAsSequence = 7,
+ tomListParentheses = 0x10000,
+ tomListPeriod = 0x20000,
+ tomListPlain = 0x30000,
+ tomCharacter = 1,
+ tomWord = 2,
+ tomSentence = 3,
+ tomParagraph = 4,
+ tomLine = 5,
+ tomStory = 6,
+ tomScreen = 7,
+ tomSection = 8,
+ tomColumn = 9,
+ tomRow = 10,
+ tomWindow = 11,
+ tomCell = 12,
+ tomCharFormat = 13,
+ tomParaFormat = 14,
+ tomTable = 15,
+ tomObject = 16,
+ tomMatchWord = 2,
+ tomMatchCase = 4,
+ tomMatchPattern = 8,
+ tomUnknownStory = 0,
+ tomMainTextStory = 1,
+ tomFootnotesStory = 2,
+ tomEndnotesStory = 3,
+ tomCommentsStory = 4,
+ tomTextFrameStory = 5,
+ tomEvenPagesHeaderStory = 6,
+ tomPrimaryHeaderStory = 7,
+ tomEvenPagesFooterStory = 8,
+ tomPrimaryFooterStory = 9,
+ tomFirstPageHeaderStory = 10,
+ tomFirstPageFooterStory = 11,
+ tomNoAnimation = 0,
+ tomLasVegasLights = 1,
+ tomBlinkingBackground = 2,
+ tomSparkleText = 3,
+ tomMarchingBlackAnts = 4,
+ tomMarchingRedAnts = 5,
+ tomShimmer = 6,
+ tomWipeDown = 7,
+ tomWipeRight = 8,
+ tomAnimationMax = 8,
+ tomLowerCase = 0,
+ tomUpperCase = 1,
+ tomTitleCase = 2,
+ tomSentenceCase = 4,
+ tomToggleCase = 5,
+ tomReadOnly = 0x100,
+ tomShareDenyRead = 0x200,
+ tomShareDenyWrite = 0x400,
+ tomPasteFile = 0x1000,
+ tomCreateNew = 0x10,
+ tomCreateAlways = 0x20,
+ tomOpenExisting = 0x30,
+ tomOpenAlways = 0x40,
+ tomTruncateExisting = 0x50,
+ tomRTF = 0x1,
+ tomText = 0x2,
+ tomHTML = 0x3,
+ tomWordDocument = 0x4,
+ tomBold = 0x80000001,
+ tomItalic = 0x80000002,
+ tomUnderline = 0x80000004,
+ tomStrikeout = 0x80000008,
+ tomProtected = 0x80000010,
+ tomLink = 0x80000020,
+ tomSmallCaps = 0x80000040,
+ tomAllCaps = 0x80000080,
+ tomHidden = 0x80000100,
+ tomOutline = 0x80000200,
+ tomShadow = 0x80000400,
+ tomEmboss = 0x80000800,
+ tomImprint = 0x80001000,
+ tomDisabled = 0x80002000,
+ tomRevised = 0x80004000,
+ tomNormalCaret = 0,
+ tomKoreanBlockCaret = 0x1,
+ tomIncludeInset = 0x1,
+ tomIgnoreCurrentFont = 0,
+ tomMatchFontCharset = 0x1,
+ tomMatchFontSignature = 0x2,
+ tomCharset = 0x80000000,
+ tomRE10Mode = 0x1,
+ tomNoIME = 0x80000,
+ tomSelfIME = 0x40000
+} tomConstants;
+
+interface ITextRange;
+interface ITextSelection;
+interface ITextStoryRanges;
+
+[
+ object,
+ uuid(8cc497c0-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextDocument : IDispatch
+{
+ HRESULT GetName([retval, out]BSTR *pName);
+ HRESULT GetSelection([retval, out]ITextSelection **ppSel);
+ HRESULT GetStoryCount([retval, out]LONG *pCount);
+ HRESULT GetStoryRanges([retval, out]ITextStoryRanges **ppStories);
+ HRESULT GetSaved([retval, out]LONG *pValue);
+ HRESULT SetSaved([in]LONG Value);
+ HRESULT GetDefaultTabStop([retval, out]float *pValue);
+ HRESULT SetDefaultTabStop([in]float Value);
+ HRESULT New();
+ HRESULT Open([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);
+ HRESULT Save([in]VARIANT *pVar, [in]LONG Flags, [in]LONG CodePage);
+ HRESULT Freeze([retval, out]LONG *pCount);
+ HRESULT Unfreeze([retval, out]LONG *pCount);
+ HRESULT BeginEditCollection();
+ HRESULT EndEditCollection();
+ HRESULT Undo([in]LONG Count, [retval, out]LONG *prop);
+ HRESULT Redo([in]LONG Count, [retval, out]LONG *prop);
+ HRESULT Range([in]LONG cp1, [in]LONG cp2, [retval, out]ITextRange **ppRange);
+ HRESULT RangeFromPoint([in]LONG x, [in]LONG y, [retval, out]ITextRange **ppRange);
+}
+
+interface ITextFont;
+interface ITextPara;
+
+[
+ object,
+ uuid(8cc497c2-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextRange : IDispatch
+{
+ HRESULT GetText([retval, out]BSTR *pbstr);
+ HRESULT SetText([in]BSTR bstr);
+ HRESULT GetChar([retval, out]LONG *pch);
+ HRESULT SetChar([in]LONG ch);
+ HRESULT GetDuplicate([retval, out]ITextRange **ppRange);
+ HRESULT GetFormattedText([retval, out]ITextRange **ppRange);
+ HRESULT SetFormattedText([in]ITextRange *pRange);
+ HRESULT GetStart([retval, out]LONG *pcpFirst);
+ HRESULT SetStart([in]LONG cpFirst);
+ HRESULT GetEnd([retval, out]LONG *pcpLim);
+ HRESULT SetEnd([in]LONG cpLim);
+ HRESULT GetFont([retval, out]ITextFont **pFont);
+ HRESULT SetFont([in]ITextFont *pFont);
+ HRESULT GetPara([retval, out]ITextPara **ppPara);
+ HRESULT SetPara([in]ITextPara *pPara);
+ HRESULT GetStoryLength([retval, out]LONG *pcch);
+ HRESULT GetStoryType([retval, out]LONG *pValue);
+ HRESULT Collapse([in]LONG bStart);
+ HRESULT Expand([in]LONG Unit, [retval, out]LONG *pDelta);
+ HRESULT GetIndex([in]LONG Unit, [retval, out]LONG *pIndex);
+ HRESULT SetIndex([in]LONG Unit, [in]LONG Index, [in]LONG Extend);
+ HRESULT SetRange([in]LONG cpActive, [in]LONG cpOther);
+ HRESULT InRange([in]ITextRange *pRange, [retval, out]LONG *pb);
+ HRESULT InStory([in]ITextRange *pRange, [retval, out]LONG *pb);
+ HRESULT IsEqual([in]ITextRange *pRange, [retval, out]LONG *pb);
+ HRESULT Select();
+ HRESULT StartOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT EndOf([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT Move([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveStart([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveEnd([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveStartWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveEndWhile([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveStartUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT MoveEndUntil([in]VARIANT *Cset, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT FindText([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
+ HRESULT FindTextStart([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
+ HRESULT FindTextEnd([in]BSTR bstr, [in]LONG cch, [in]LONG Flags, [retval, out]LONG *pLength);
+ HRESULT Delete([in]LONG Unit, [in]LONG Count, [retval, out]LONG *pDelta);
+ HRESULT Cut([out]VARIANT *pVar);
+ HRESULT Copy([out]VARIANT *pVar);
+ HRESULT Paste([in]VARIANT *pVar, [in]LONG Format);
+ HRESULT CanPaste([in]VARIANT *pVar, [in]LONG Format, [retval, out]LONG *pb);
+ HRESULT CanEdit([retval, out]LONG *pb);
+ HRESULT ChangeCase([in]LONG Type);
+ HRESULT GetPoint([in]LONG Type, [out]LONG *cx, [out]LONG *cy);
+ HRESULT SetPoint([in]LONG x, [in]LONG y, [in]LONG Type, [in]LONG Extend);
+ HRESULT ScrollIntoView([in]LONG Value);
+ HRESULT GetEmbeddedObject([retval, out]IUnknown **ppv);
+}
+
+[
+ object,
+ uuid(8cc497c1-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextSelection : ITextRange
+{
+ HRESULT GetFlags([retval, out]LONG *pFlags);
+ HRESULT SetFlags([in]LONG Flags);
+ HRESULT GetType([retval, out]LONG *pType);
+ HRESULT MoveLeft([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT MoveRight([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT MoveUp([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT MoveDown([in]LONG Unit, [in]LONG Count, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT HomeKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT EndKey([in]LONG Unit, [in]LONG Extend, [retval, out]LONG *pDelta);
+ HRESULT TypeText([in]BSTR bstr);
+}
+
+[
+ object,
+ uuid(8cc497c3-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextFont : IDispatch
+{
+ HRESULT GetDuplicate([retval, out]ITextFont **ppFont);
+ HRESULT SetDuplicate([in]ITextFont *pFont);
+ HRESULT CanChange([out]LONG *pB);
+ HRESULT IsEqual([in]ITextFont *pFont, [retval, out]LONG *pB);
+ HRESULT Reset([in]LONG Value);
+ HRESULT GetStyle([retval, out]LONG *pValue);
+ HRESULT SetStyle([in]LONG Value);
+ HRESULT GetAllCaps([retval, out]LONG *pValue);
+ HRESULT SetAllCaps([in]LONG Value);
+ HRESULT GetAnimation([retval, out]LONG *pValue);
+ HRESULT SetAnimation([in]LONG Value);
+ HRESULT GetBackColor([retval, out]LONG *pValue);
+ HRESULT SetBackColor([in]LONG Value);
+ HRESULT GetBold([retval, out]LONG *pValue);
+ HRESULT SetBold([in]LONG Value);
+ HRESULT GetEmboss([retval, out]LONG *pValue);
+ HRESULT SetEmboss([in]LONG Value);
+ HRESULT GetForeColor([retval, out]LONG *pValue);
+ HRESULT SetForeColor([in]LONG Value);
+ HRESULT GetHidden([retval, out]LONG *pValue);
+ HRESULT SetHidden([in]LONG Value);
+ HRESULT GetEngrave([retval, out]LONG *pValue);
+ HRESULT SetEngrave([in]LONG Value);
+ HRESULT GetItalic([retval, out]LONG *pValue);
+ HRESULT SetItalic([in]LONG Value);
+ HRESULT GetKerning([retval, out]LONG *pValue);
+ HRESULT SetKerning([in]LONG Value);
+ HRESULT GetLanguageID([retval, out]LONG *pValue);
+ HRESULT SetLanguageID([in]LONG Value);
+ HRESULT GetName([retval, out]BSTR *pValue);
+ HRESULT SetName([in]BSTR Value);
+ HRESULT GetOutline([retval, out]LONG *pValue);
+ HRESULT SetOutline([in]LONG Value);
+ HRESULT GetPosition([retval, out]LONG *pValue);
+ HRESULT SetPosition([in]LONG Value);
+ HRESULT GetProtected([retval, out]LONG *pValue);
+ HRESULT SetProtected([in]LONG Value);
+ HRESULT GetShadow([retval, out]LONG *pValue);
+ HRESULT SetShadow([in]LONG Value);
+ HRESULT GetSize([retval, out]LONG *pValue);
+ HRESULT SetSize([in]LONG Value);
+ HRESULT GetSmallCaps([retval, out]LONG *pValue);
+ HRESULT SetSmallCaps([in]LONG Value);
+ HRESULT GetSpacing([retval, out]float *pValue);
+ HRESULT SetSpacing([in]float Value);
+ HRESULT GetStrikeThrough([retval, out]LONG *pValue);
+ HRESULT SetStrikeThrough([in]LONG Value);
+ HRESULT GetSubscript([retval, out]LONG *pValue);
+ HRESULT SetSubscript([in]LONG Value);
+ HRESULT GetSuperscript([retval, out]LONG *pValue);
+ HRESULT SetSuperscript([in]LONG Value);
+ HRESULT GetUnderline([retval, out]LONG *pValue);
+ HRESULT SetUnderline([in]LONG Value);
+ HRESULT GetWeight([retval, out]LONG *pValue);
+ HRESULT SetWeight([in]LONG Value);
+}
+
+[
+ object,
+ uuid(8cc497c4-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextPara : IDispatch
+{
+ HRESULT GetDuplicate([retval, out]ITextPara **ppPara);
+ HRESULT SetDuplicate([in]ITextPara *pPara);
+ HRESULT CanChange([out]LONG *pB);
+ HRESULT IsEqual([in]ITextPara *pPara, [retval, out]LONG *pB);
+ HRESULT Reset([in]LONG Value);
+ HRESULT GetStyle([retval, out]LONG *pValue);
+ HRESULT SetStyle([in]LONG Value);
+ HRESULT GetAlignment([retval, out]LONG *pValue);
+ HRESULT SetAlignment([in]LONG Value);
+ HRESULT GetHyphenation([retval, out]LONG *pValue);
+ HRESULT SetHyphenation([in]LONG Value);
+ HRESULT GetFirstLineIndent([retval, out]float *pValue);
+ HRESULT GetKeepTogether([retval, out]LONG *pValue);
+ HRESULT SetKeepTogether([in]LONG Value);
+ HRESULT GetKeepWithNext([retval, out]LONG *pValue);
+ HRESULT SetKeepWithNext([in]LONG Value);
+ HRESULT GetLeftIndent([retval, out]float *pValue);
+ HRESULT GetLineSpacing([retval, out]float *pValue);
+ HRESULT GetLineSpacingRule([retval, out]LONG *pValue);
+ HRESULT GetListAlignment([retval, out]LONG *pValue);
+ HRESULT SetListAlignment([in]LONG Value);
+ HRESULT GetListLevelIndex([retval, out]LONG *pValue);
+ HRESULT SetListLevelIndex([in]LONG Value);
+ HRESULT GetListStart([retval, out]LONG *pValue);
+ HRESULT SetListStart([in]LONG Value);
+ HRESULT GetListTab([retval, out]LONG *pValue);
+ HRESULT SetListTab([in]LONG Value);
+ HRESULT GetListType([retval, out]LONG *pValue);
+ HRESULT SetListType([in]LONG Value);
+ HRESULT GetNoLineNumber([retval, out]LONG *pValue);
+ HRESULT SetNoLineNumber([in]LONG Value);
+ HRESULT GetPageBreakBefore([retval, out]LONG *pValue);
+ HRESULT SetPageBreakBefore([in]LONG Value);
+ HRESULT GetRightIndent([retval, out]float *pValue);
+ HRESULT SetRightIndent([in]float Value);
+ HRESULT SetIndents([in]float StartIndent, [in]float LeftIndent, [in]float RightIndent);
+ HRESULT SetLineSpacing([in]LONG LineSpacingRule, [in]float LineSpacing);
+ HRESULT GetSpaceAfter([retval, out]float *pValue);
+ HRESULT SetSpaceAfter([in]float Value);
+ HRESULT GetSpaceBefore([retval, out]float *pValue);
+ HRESULT SetSpaceBefore([in]float Value);
+ HRESULT GetWindowControl([retval, out]float *pValue);
+ HRESULT SetWindowControl([in]float Value);
+ HRESULT GetTabCount([retval, out]LONG *pCount);
+ HRESULT AddTab([in]float tbPos, [in]LONG tbAlign, [in]LONG tbLeader);
+ HRESULT ClearAllTabs();
+ HRESULT DeleteTab([in]float tbPos);
+ HRESULT GetTab([in]LONG iTab, [out]float *ptbPos, [out]LONG *ptbAlign, [out]LONG *ptbLeader);
+}
+
+[
+ object,
+ uuid(8cc497c5-a1df-11ce-8098-00aa0047be5d)
+]
+interface ITextStoryRanges : IDispatch
+{
+ HRESULT _NewEnum([retval, out]IUnknown **ppUnkEnum);
+ HRESULT Item([in]LONG Index, [retval, out]ITextRange **ppRange);
+ HRESULT GetCount([retval, out]LONG *pCount);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h
new file mode 100644
index 00000000..7651c571
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/traffic.h
@@ -0,0 +1,57 @@
+/*
+ * TRAFFIC definitions
+ *
+ * Copyright (c) 2009 Stefan Leichter
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_TRAFFIC_H
+#define __WINE_TRAFFIC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef VOID (CALLBACK * TCI_ADD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);
+typedef VOID (CALLBACK * TCI_DEL_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);
+typedef VOID (CALLBACK * TCI_MOD_FLOW_COMPLETE_HANDLER)(HANDLE, ULONG);
+typedef VOID (CALLBACK * TCI_NOTIFY_HANDLER)
+ (HANDLE,HANDLE,ULONG,HANDLE,ULONG,PVOID);
+
+typedef struct _TCI_CLIENT_FUNC_LIST
+{
+ TCI_NOTIFY_HANDLER ClNotifyHandler;
+ TCI_ADD_FLOW_COMPLETE_HANDLER ClAddFlowCompleteHandler;
+ TCI_MOD_FLOW_COMPLETE_HANDLER ClModifyFlowCompleteHandler;
+ TCI_DEL_FLOW_COMPLETE_HANDLER ClDeleteFlowCompleteHandler;
+} TCI_CLIENT_FUNC_LIST, *PTCI_CLIENT_FUNC_LIST;
+
+ULONG WINAPI TcRegisterClient(ULONG,HANDLE,PTCI_CLIENT_FUNC_LIST,PHANDLE);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_TRAFFIC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl
new file mode 100644
index 00000000..16bcc857
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/transact.idl
@@ -0,0 +1,235 @@
+/*
+ * Copyright (C) 2013 Daniel Jeliński
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#include <winerror.h>")
+
+interface ITransaction;
+interface ITransactionCloner;
+interface ITransaction2;
+interface ITransactionDispenser;
+interface ITransactionOptions;
+interface ITransactionOutcomeEvents;
+interface ITmNodeName;
+
+typedef struct BOID {
+ byte rgb[16];
+} BOID;
+
+cpp_quote("#ifndef MAX_TRAN_DESC_DEFINED")
+cpp_quote("#define MAX_TRAN_DESC_DEFINED")
+typedef enum TX_MISC_CONSTANTS {
+ MAX_TRAN_DESC = 40
+} TX_MISC_CONSTANTS;
+cpp_quote("#endif")
+
+typedef BOID XACTUOW;
+typedef LONG ISOLEVEL;
+
+typedef enum ISOLATIONLEVEL {
+ ISOLATIONLEVEL_UNSPECIFIED = 0xffffffff,
+ ISOLATIONLEVEL_CHAOS = 0x10,
+ ISOLATIONLEVEL_READUNCOMMITTED = 0x100,
+ ISOLATIONLEVEL_BROWSE = 0x100,
+ ISOLATIONLEVEL_CURSORSTABILITY = 0x1000,
+ ISOLATIONLEVEL_READCOMMITTED = 0x1000,
+ ISOLATIONLEVEL_REPEATABLEREAD = 0x10000,
+ ISOLATIONLEVEL_SERIALIZABLE = 0x100000,
+ ISOLATIONLEVEL_ISOLATED = 0x100000
+} ISOLATIONLEVEL;
+
+typedef struct XACTTRANSINFO {
+ XACTUOW uow;
+ ISOLEVEL isoLevel;
+ ULONG isoFlags;
+ DWORD grfTCSupported;
+ DWORD grfRMSupported;
+ DWORD grfTCSupportedRetaining;
+ DWORD grfRMSupportedRetaining;
+} XACTTRANSINFO;
+
+typedef struct XACTSTATS {
+ ULONG cOpen;
+ ULONG cCommitting;
+ ULONG cCommitted;
+ ULONG cAborting;
+ ULONG cAborted;
+ ULONG cInDoubt;
+ ULONG cHeuristicDecision;
+ FILETIME timeTransactionsUp;
+} XACTSTATS;
+
+typedef enum ISOFLAG {
+ ISOFLAG_RETAIN_COMMIT_DC = 1,
+ ISOFLAG_RETAIN_COMMIT = 2,
+ ISOFLAG_RETAIN_COMMIT_NO = 3,
+ ISOFLAG_RETAIN_ABORT_DC = 4,
+ ISOFLAG_RETAIN_ABORT = 8,
+ ISOFLAG_RETAIN_ABORT_NO = 12,
+ ISOFLAG_RETAIN_DONTCARE = ISOFLAG_RETAIN_COMMIT_DC | ISOFLAG_RETAIN_ABORT_DC,
+ ISOFLAG_RETAIN_BOTH = ISOFLAG_RETAIN_COMMIT | ISOFLAG_RETAIN_ABORT,
+ ISOFLAG_RETAIN_NONE = ISOFLAG_RETAIN_COMMIT_NO | ISOFLAG_RETAIN_ABORT_NO,
+ ISOFLAG_OPTIMISTIC = 16,
+ ISOFLAG_READONLY = 32
+} ISOFLAG;
+
+typedef enum XACTTC {
+ XACTTC_NONE = 0,
+ XACTTC_SYNC_PHASEONE = 1,
+ XACTTC_SYNC_PHASETWO = 2,
+ XACTTC_SYNC = 2,
+ XACTTC_ASYNC_PHASEONE = 4,
+ XACTTC_ASYNC = 4
+} XACTTC;
+
+typedef enum XACTRM {
+ XACTRM_OPTIMISTICLASTWINS = 1,
+ XACTRM_NOREADONLYPREPARES
+} XACTRM;
+
+typedef enum XACTCONST {
+ XACTCONST_TIMEOUTINFINITE
+} XACTCONST;
+
+typedef enum XACTHEURISTIC {
+ XACTHEURISTIC_ABORT = 1,
+ XACTHEURISTIC_COMMIT,
+ XACTHEURISTIC_DAMAGE,
+ XACTHEURISTIC_DANGER
+} XACTHEURISTIC;
+
+typedef enum XACTSTAT {
+ XACTSTAT_NONE = 0,
+ XACTSTAT_OPENNORMAL = 0x1,
+ XACTSTAT_OPENREFUSED = 0x2,
+ XACTSTAT_PREPARING = 0x4,
+ XACTSTAT_PREPARED = 0x8,
+ XACTSTAT_PREPARERETAINING = 0x10,
+ XACTSTAT_PREPARERETAINED = 0x20,
+ XACTSTAT_COMMITTING = 0x40,
+ XACTSTAT_COMMITRETAINING = 0x80,
+ XACTSTAT_ABORTING = 0x100,
+ XACTSTAT_ABORTED = 0x200,
+ XACTSTAT_COMMITTED = 0x400,
+ XACTSTAT_HEURISTIC_ABORT = 0x800,
+ XACTSTAT_HEURISTIC_COMMIT = 0x1000,
+ XACTSTAT_HEURISTIC_DAMAGE = 0x2000,
+ XACTSTAT_HEURISTIC_DANGER = 0x4000,
+ XACTSTAT_FORCED_ABORT = 0x8000,
+ XACTSTAT_FORCED_COMMIT = 0x10000,
+ XACTSTAT_INDOUBT = 0x20000,
+ XACTSTAT_CLOSED = 0x40000,
+ XACTSTAT_OPEN = 0x3,
+ XACTSTAT_NOTPREPARED = 0x7ffc3,
+ XACTSTAT_ALL = 0x7ffff
+} XACTSTAT;
+
+typedef struct XACTOPT {
+ ULONG ulTimeout;
+ char szDescription[40 ];
+} XACTOPT;
+
+[
+ object,
+ uuid(0fb15084-af41-11ce-bd2b-204c4f4f5020)
+]
+interface ITransaction : IUnknown {
+ HRESULT Commit([in] BOOL fRetaining,
+ [in] DWORD grfTC,
+ [in] DWORD grfRM);
+ HRESULT Abort([in, unique] BOID *pboidReason,
+ [in] BOOL fRetaining,
+ [in] BOOL fAsync);
+ HRESULT GetTransactionInfo([out] XACTTRANSINFO *pinfo);
+};
+
+[
+ object,
+ uuid(02656950-2152-11d0-944C-00A0C905416E)
+]
+interface ITransactionCloner : ITransaction {
+ HRESULT CloneWithCommitDisabled([out] ITransaction **ppITransaction);
+};
+
+[
+ object,
+ uuid(34021548-0065-11d3-bac1-00c04f797be2)
+]
+interface ITransaction2 : ITransactionCloner {
+ HRESULT GetTransactionInfo2([out] XACTTRANSINFO *pinfo);
+};
+
+[
+ object,
+ uuid(3A6AD9E1-23B9-11cf-AD60-00AA00A74CCD)
+]
+interface ITransactionDispenser : IUnknown {
+ HRESULT GetOptionsObject([out] ITransactionOptions **ppOptions);
+ HRESULT BeginTransaction([in, unique] IUnknown *punkOuter,
+ [in] ISOLEVEL isoLevel,
+ [in] ULONG isoFlags,
+ [in, unique] ITransactionOptions *pOptions,
+ [out] ITransaction **ppTransaction);
+};
+
+[
+ object,
+ uuid(3A6AD9E0-23B9-11cf-AD60-00AA00A74CCD)
+]
+interface ITransactionOptions : IUnknown {
+ HRESULT SetOptions([in] XACTOPT *pOptions);
+ HRESULT GetOptions([in, out] XACTOPT *pOptions);
+};
+
+[
+ object,
+ uuid(3A6AD9E2-23B9-11cf-AD60-00AA00A74CCD)
+]
+interface ITransactionOutcomeEvents : IUnknown {
+ HRESULT Committed([in] BOOL fRetaining,
+ [in, unique] XACTUOW *pNewUOW,
+ [in] HRESULT hr);
+ HRESULT Aborted([in, unique] BOID *pboidReason,
+ [in] BOOL fRetaining,
+ [in, unique] XACTUOW *pNewUOW,
+ [in] HRESULT hr);
+ HRESULT HeuristicDecision([in] DWORD dwDecision,
+ [in, unique] BOID *pboidReason,
+ [in] HRESULT hr);
+ HRESULT Indoubt(void);
+};
+
+[
+ object,
+ uuid(30274F88-6EE4-474e-9B95-7807BC9EF8CF)
+]
+interface ITmNodeName : IUnknown {
+ HRESULT GetNodeNameSize([out] ULONG *pcbNodeNameSize);
+ HRESULT GetNodeName([in] ULONG cbNodeNameBufferSize,
+ [in, out] LPWSTR pNodeNameBuffer);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h
new file mode 100644
index 00000000..bdbda476
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/twain.h
@@ -0,0 +1,1849 @@
+/* ======================================================================== *\
+
+ Copyright (C) 1991, 1992 TWAIN Working Group: Aldus, Caere, Eastman-Kodak,
+ Hewlett-Packard and Logitech Corporations. All rights reserved.
+
+ Copyright (C) 1997 TWAIN Working Group: Bell+Howell, Canon, DocuMagix,
+ Fujitsu, Genoa Technology, Hewlett-Packard, Kofax Imaging Products, and
+ Ricoh Corporation. All rights reserved.
+
+ Copyright (C) 1998 TWAIN Working Group: Adobe Systems Incorporated,
+ Canon Information Systems, Eastman Kodak Company,
+ Fujitsu Computer Products of America, Genoa Technology,
+ Hewlett-Packard Company, Intel Corporation, Kofax Image Products,
+ JFL Peripheral Solutions Inc., Ricoh Corporation, and Xerox Corporation.
+ All rights reserved.
+
+ TWAIN.h - This is the definitive include file for applications and
+ data sources written to the TWAIN specification.
+ It defines constants, data structures, messages etc.
+ for the public interface to TWAIN.
+
+ Revision History:
+ version 1.0, March 6, 1992. TWAIN 1.0.
+ version 1.1, January 1993. Tech Notes 1.1
+ version 1.5, June 1993. Specification Update 1.5
+ Change DC to TW
+ Change filename from DC.H to TWAIN.H
+ version 1.5, July 1993. Remove spaces from country identifiers
+
+ version 1.7, July 1997 Added Capabilities and data structure for
+ document imaging and digital cameras.
+ KHL.
+ version 1.7, July 1997 Inserted Borland compatible structure packing
+ directives provided by Mentor. JMH
+ version 1.7, Aug 1997 Expanded file tabs to spaces.
+ NOTE: future authors should be sure to have
+ their editors set to automatically expand tabs
+ to spaces (original tab setting was 4 spaces).
+ version 1.7, Sept 1997 Added job control values
+ Added return codes
+ version 1.7, Sept 1997 changed definition of pRGBRESPONSE to
+ pTW_RGBRESPONSE
+ version 1.7 Aug 1998 Added missing TWEI_BARCODEROTATION values
+ TWBCOR_ types JMH
+ version 1.8 August 1998 Added new types and definitions required
+ for 1.8 Specification JMH
+ version 1.8 January 1999 Changed search mode from SRCH_ to TWBD_ as
+ in 1.8 Specification, added TWBT_MAXICODE JMH
+ version 1.8 January 1999 Removed undocumented duplicate AUTO<cap> JMH
+\* ======================================================================== */
+
+#ifndef TWAIN
+#define TWAIN
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+
+/* The Twain structures must be packed on 2 byte alignment */
+#include "pshpack2.h"
+
+#undef FAR
+#define FAR
+
+/****************************************************************************
+ * TWAIN Version *
+ ****************************************************************************/
+#define TWON_PROTOCOLMINOR 8 /* Changed for Version 1.8 */
+#define TWON_PROTOCOLMAJOR 1
+
+/****************************************************************************
+ * Platform Dependent Definitions and Typedefs *
+ ****************************************************************************/
+
+/* Define one of the following, depending on the platform */
+/* #define _MAC_ */
+/* #define _UNIX_ */
+#define _MSWIN_
+
+#ifdef _MSWIN_
+ typedef HANDLE TW_HANDLE;
+ typedef LPVOID TW_MEMREF;
+ typedef BYTE * HPBYTE;
+ typedef void * HPVOID;
+#endif /* _MSWIN_ */
+
+#ifdef _MAC_
+#define PASCAL pascal
+#define FAR
+ typedef Handle TW_HANDLE;
+ typedef char *TW_MEMREF;
+#endif /* _MAC_ */
+
+#ifdef _UNIX_
+/* #define PASCAL pascal */
+#define FAR
+ typedef unsigned char *TW_HANDLE;
+ typedef unsigned char *TW_MEMREF;
+#endif /* _UNIX_ */
+
+/****************************************************************************
+ * Type Definitions *
+ ****************************************************************************/
+
+/* String types. These include room for the strings and a NULL char, *
+ * or, on the Mac, a length byte followed by the string. *
+ * TW_STR255 must hold less than 256 chars so length fits in first byte. */
+typedef char TW_STR32[34], FAR *pTW_STR32;
+typedef char TW_STR64[66], FAR *pTW_STR64;
+typedef char TW_STR128[130], FAR *pTW_STR128;
+typedef char TW_STR255[256], FAR *pTW_STR255;
+
+/* Numeric types. */
+typedef char TW_INT8, FAR *pTW_INT8;
+typedef short TW_INT16, FAR *pTW_INT16;
+typedef LONG TW_INT32, FAR *pTW_INT32;
+typedef unsigned char TW_UINT8, FAR *pTW_UINT8;
+typedef unsigned short TW_UINT16, FAR *pTW_UINT16;
+typedef ULONG TW_UINT32, FAR *pTW_UINT32;
+typedef unsigned short TW_BOOL, FAR *pTW_BOOL;
+
+/* Fixed point structure type. */
+typedef struct {
+ TW_INT16 Whole; /* maintains the sign */
+ TW_UINT16 Frac;
+} TW_FIX32, FAR *pTW_FIX32;
+
+/****************************************************************************
+ * Structure Definitions *
+ ****************************************************************************/
+
+/* No DAT needed. */
+typedef struct {
+ TW_FIX32 X;
+ TW_FIX32 Y;
+ TW_FIX32 Z;
+} TW_CIEPOINT, FAR * pTW_CIEPOINT;
+
+/* No DAT needed. */
+typedef struct {
+ TW_FIX32 StartIn;
+ TW_FIX32 BreakIn;
+ TW_FIX32 EndIn;
+ TW_FIX32 StartOut;
+ TW_FIX32 BreakOut;
+ TW_FIX32 EndOut;
+ TW_FIX32 Gamma;
+ TW_FIX32 SampleCount; /* if =0 use the gamma */
+} TW_DECODEFUNCTION, FAR * pTW_DECODEFUNCTION;
+
+/* No DAT needed. */
+typedef struct {
+ TW_UINT8 Index; /* Value used to index into the color table. */
+ TW_UINT8 Channel1; /* First tri-stimulus value (e.g Red) */
+ TW_UINT8 Channel2; /* Second tri-stimulus value (e.g Green) */
+ TW_UINT8 Channel3; /* Third tri-stimulus value (e.g Blue) */
+} TW_ELEMENT8, FAR * pTW_ELEMENT8;
+
+/* No DAT. Defines a frame rectangle in ICAP_UNITS coordinates. */
+typedef struct {
+ TW_FIX32 Left;
+ TW_FIX32 Top;
+ TW_FIX32 Right;
+ TW_FIX32 Bottom;
+} TW_FRAME, FAR * pTW_FRAME;
+
+/* No DAT needed. Used to manage memory buffers. */
+typedef struct {
+ TW_UINT32 Flags; /* Any combination of the TWMF_ constants. */
+ TW_UINT32 Length; /* Number of bytes stored in buffer TheMem. */
+ TW_MEMREF TheMem; /* Pointer or handle to the allocated memory buffer. */
+} TW_MEMORY, FAR * pTW_MEMORY;
+
+/* No DAT needed. */
+typedef struct {
+ TW_DECODEFUNCTION Decode[3];
+ TW_FIX32 Mix[3][3];
+} TW_TRANSFORMSTAGE, FAR * pTW_TRANSFORMSTAGE;
+
+/* No DAT needed. Describes version of software currently running. */
+typedef struct {
+ TW_UINT16 MajorNum; /* Major revision number of the software. */
+ TW_UINT16 MinorNum; /* Incremental revision number of the software. */
+ TW_UINT16 Language; /* e.g. TWLG_SWISSFRENCH */
+ TW_UINT16 Country; /* e.g. TWCY_SWITZERLAND */
+ TW_STR32 Info; /* e.g. "1.0b3 Beta release" */
+} TW_VERSION, FAR * pTW_VERSION;
+
+/* TWON_ARRAY. Container for array of values (a simplified TW_ENUMERATION) */
+typedef struct {
+ TW_UINT16 ItemType;
+ TW_UINT32 NumItems; /* How many items in ItemList */
+ TW_UINT8 ItemList[1]; /* Array of ItemType values starts here */
+} TW_ARRAY, FAR * pTW_ARRAY;
+
+/* TWON_ENUMERATION. Container for a collection of values. */
+typedef struct {
+ TW_UINT16 ItemType;
+ TW_UINT32 NumItems; /* How many items in ItemList */
+ TW_UINT32 CurrentIndex; /* Current value is in ItemList[CurrentIndex] */
+ TW_UINT32 DefaultIndex; /* Powerup value is in ItemList[DefaultIndex] */
+ TW_UINT8 ItemList[1]; /* Array of ItemType values starts here */
+} TW_ENUMERATION, FAR * pTW_ENUMERATION;
+
+/* TWON_ONEVALUE. Container for one value. */
+typedef struct {
+ TW_UINT16 ItemType;
+ TW_UINT32 Item;
+} TW_ONEVALUE, FAR * pTW_ONEVALUE;
+
+/* TWON_RANGE. Container for a range of values. */
+typedef struct {
+ TW_UINT16 ItemType;
+ TW_UINT32 MinValue; /* Starting value in the range. */
+ TW_UINT32 MaxValue; /* Final value in the range. */
+ TW_UINT32 StepSize; /* Increment from MinValue to MaxValue. */
+ TW_UINT32 DefaultValue; /* Power-up value. */
+ TW_UINT32 CurrentValue; /* The value that is currently in effect. */
+} TW_RANGE, FAR * pTW_RANGE;
+
+/* DAT_CAPABILITY. Used by application to get/set capability from/in a data source. */
+typedef struct {
+ TW_UINT16 Cap; /* id of capability to set or get, e.g. CAP_BRIGHTNESS */
+ TW_UINT16 ConType; /* TWON_ONEVALUE, _RANGE, _ENUMERATION or _ARRAY */
+ TW_HANDLE hContainer; /* Handle to container of type Dat */
+} TW_CAPABILITY, FAR * pTW_CAPABILITY;
+
+/* DAT_CIECOLOR. */
+typedef struct {
+ TW_UINT16 ColorSpace;
+ TW_INT16 LowEndian;
+ TW_INT16 DeviceDependent;
+ TW_INT32 VersionNumber;
+ TW_TRANSFORMSTAGE StageABC;
+ TW_TRANSFORMSTAGE StageLMN;
+ TW_CIEPOINT WhitePoint;
+ TW_CIEPOINT BlackPoint;
+ TW_CIEPOINT WhitePaper;
+ TW_CIEPOINT BlackInk;
+ TW_FIX32 Samples[1];
+} TW_CIECOLOR, FAR * pTW_CIECOLOR;
+
+/* DAT_EVENT. For passing events down from the application to the DS. */
+typedef struct {
+ TW_MEMREF pEvent; /* Windows pMSG or Mac pEvent. */
+ TW_UINT16 TWMessage; /* TW msg from data source, e.g. MSG_XFERREADY */
+} TW_EVENT, FAR * pTW_EVENT;
+
+/* DAT_GRAYRESPONSE */
+typedef struct {
+ TW_ELEMENT8 Response[1];
+} TW_GRAYRESPONSE, FAR * pTW_GRAYRESPONSE;
+
+/* DAT_IDENTITY. Identifies the program/library/code resource. */
+typedef struct {
+ TW_UINT32 Id; /* Unique number. In Windows, application hWnd */
+ TW_VERSION Version; /* Identifies the piece of code */
+ TW_UINT16 ProtocolMajor; /* Application and DS must set to TWON_PROTOCOLMAJOR */
+ TW_UINT16 ProtocolMinor; /* Application and DS must set to TWON_PROTOCOLMINOR */
+ TW_UINT32 SupportedGroups; /* Bit field OR combination of DG_ constants */
+ TW_STR32 Manufacturer; /* Manufacturer name, e.g. "Hewlett-Packard" */
+ TW_STR32 ProductFamily; /* Product family name, e.g. "ScanJet" */
+ TW_STR32 ProductName; /* Product name, e.g. "ScanJet Plus" */
+} TW_IDENTITY, FAR * pTW_IDENTITY;
+
+/* DAT_IMAGEINFO. Application gets detailed image info from DS with this. */
+typedef struct {
+ TW_FIX32 XResolution; /* Resolution in the horizontal */
+ TW_FIX32 YResolution; /* Resolution in the vertical */
+ TW_INT32 ImageWidth; /* Columns in the image, -1 if unknown by DS*/
+ TW_INT32 ImageLength; /* Rows in the image, -1 if unknown by DS */
+ TW_INT16 SamplesPerPixel; /* Number of samples per pixel, 3 for RGB */
+ TW_INT16 BitsPerSample[8]; /* Number of bits for each sample */
+ TW_INT16 BitsPerPixel; /* Number of bits for each padded pixel */
+ TW_BOOL Planar; /* True if Planar, False if chunky */
+ TW_INT16 PixelType; /* How to interp data; photo interp (TWPT_) */
+ TW_UINT16 Compression; /* How the data is compressed (TWCP_xxxx) */
+} TW_IMAGEINFO, FAR * pTW_IMAGEINFO;
+
+/* DAT_IMAGELAYOUT. Provides image layout information in current units. */
+typedef struct {
+ TW_FRAME Frame; /* Frame coords within larger document */
+ TW_UINT32 DocumentNumber;
+ TW_UINT32 PageNumber; /* Reset when you go to next document */
+ TW_UINT32 FrameNumber; /* Reset when you go to next page */
+} TW_IMAGELAYOUT, FAR * pTW_IMAGELAYOUT;
+
+/* DAT_IMAGEMEMXFER. Used to pass image data (e.g. in strips) from DS to application.*/
+typedef struct {
+ TW_UINT16 Compression; /* How the data is compressed */
+ TW_UINT32 BytesPerRow; /* Number of bytes in a row of data */
+ TW_UINT32 Columns; /* How many columns */
+ TW_UINT32 Rows; /* How many rows */
+ TW_UINT32 XOffset; /* How far from the side of the image */
+ TW_UINT32 YOffset; /* How far from the top of the image */
+ TW_UINT32 BytesWritten; /* How many bytes written in Memory */
+ TW_MEMORY Memory; /* Mem struct used to pass actual image data */
+} TW_IMAGEMEMXFER, FAR * pTW_IMAGEMEMXFER;
+
+/* Changed in 1.1: QuantTable, HuffmanDC, HuffmanAC TW_MEMREF -> TW_MEMORY */
+/* DAT_JPEGCOMPRESSION. Based on JPEG Draft International Std, ver 10918-1. */
+typedef struct {
+ TW_UINT16 ColorSpace; /* One of the TWPT_xxxx values */
+ TW_UINT32 SubSampling; /* Two word "array" for subsampling values */
+ TW_UINT16 NumComponents; /* Number of color components in image */
+ TW_UINT16 RestartFrequency; /* Frequency of restart marker codes in MDU's */
+ TW_UINT16 QuantMap[4]; /* Mapping of components to QuantTables */
+ TW_MEMORY QuantTable[4]; /* Quantization tables */
+ TW_UINT16 HuffmanMap[4]; /* Mapping of components to Huffman tables */
+ TW_MEMORY HuffmanDC[2]; /* DC Huffman tables */
+ TW_MEMORY HuffmanAC[2]; /* AC Huffman tables */
+} TW_JPEGCOMPRESSION, FAR * pTW_JPEGCOMPRESSION;
+
+/* DAT_PALETTE8. Color palette when TWPT_PALETTE pixels xfer'd in mem buf. */
+typedef struct {
+ TW_UINT16 NumColors; /* Number of colors in the color table. */
+ TW_UINT16 PaletteType; /* TWPA_xxxx, specifies type of palette. */
+ TW_ELEMENT8 Colors[256]; /* Array of palette values starts here. */
+} TW_PALETTE8, FAR * pTW_PALETTE8;
+
+/* DAT_PENDINGXFERS. Used with MSG_ENDXFER to indicate additional data. */
+typedef struct {
+ TW_UINT16 Count;
+ union {
+ TW_UINT32 EOJ;
+ TW_UINT32 Reserved;
+ } u;
+} TW_PENDINGXFERS, FAR *pTW_PENDINGXFERS;
+
+/* DAT_RGBRESPONSE */
+typedef struct {
+ TW_ELEMENT8 Response[1];
+} TW_RGBRESPONSE, FAR * pTW_RGBRESPONSE;
+
+/* DAT_SETUPFILEXFER. Sets up DS to application data transfer via a file. */
+typedef struct {
+ TW_STR255 FileName;
+ TW_UINT16 Format; /* Any TWFF_ constant */
+ TW_INT16 VRefNum; /* Used for Mac only */
+} TW_SETUPFILEXFER, FAR * pTW_SETUPFILEXFER;
+
+/* DAT_SETUPMEMXFER. Sets up DS to application data transfer via a memory buffer. */
+typedef struct {
+ TW_UINT32 MinBufSize;
+ TW_UINT32 MaxBufSize;
+ TW_UINT32 Preferred;
+} TW_SETUPMEMXFER, FAR * pTW_SETUPMEMXFER;
+
+/* DAT_STATUS. Application gets detailed status info from a data source with this. */
+typedef struct {
+ TW_UINT16 ConditionCode; /* Any TWCC_ constant */
+ TW_UINT16 Reserved; /* Future expansion space */
+} TW_STATUS, FAR * pTW_STATUS;
+
+/* DAT_USERINTERFACE. Coordinates UI between application and data source. */
+typedef struct {
+ TW_BOOL ShowUI; /* TRUE if DS should bring up its UI */
+ TW_BOOL ModalUI; /* For Mac only - true if the DS's UI is modal */
+ TW_HANDLE hParent; /* For windows only - Application window handle */
+} TW_USERINTERFACE, FAR * pTW_USERINTERFACE;
+
+/* SDH - 03/21/95 - TWUNK */
+/* DAT_TWUNKIDENTITY. Provides DS identity and 'other' information necessary */
+/* across thunk link. */
+typedef struct {
+ TW_IDENTITY identity; /* Identity of data source. */
+ TW_STR255 dsPath; /* Full path and file name of data source. */
+} TW_TWUNKIDENTITY, FAR * pTW_TWUNKIDENTITY;
+
+/* SDH - 03/21/95 - TWUNK */
+/* Provides DS_Entry parameters over thunk link. */
+typedef struct
+{
+ TW_INT8 destFlag; /* TRUE if dest is not NULL */
+ TW_IDENTITY dest; /* Identity of data source (if used) */
+ TW_INT32 dataGroup; /* DSM_Entry dataGroup parameter */
+ TW_INT16 dataArgType; /* DSM_Entry dataArgType parameter */
+ TW_INT16 message; /* DSM_Entry message parameter */
+ TW_INT32 pDataSize; /* Size of pData (0 if NULL) */
+ /* TW_MEMREF pData; */ /* Based on implementation specifics, a */
+ /* pData parameter makes no sense in this */
+ /* structure, but data (if provided) will be*/
+ /* appended in the data block. */
+ } TW_TWUNKDSENTRYPARAMS, FAR * pTW_TWUNKDSENTRYPARAMS;
+
+/* SDH - 03/21/95 - TWUNK */
+/* Provides DS_Entry results over thunk link. */
+typedef struct
+{
+ TW_UINT16 returnCode; /* Thunker DsEntry return code. */
+ TW_UINT16 conditionCode; /* Thunker DsEntry condition code. */
+ TW_INT32 pDataSize; /* Size of pData (0 if NULL) */
+ /* TW_MEMREF pData; */ /* Based on implementation specifics, a */
+ /* pData parameter makes no sense in this */
+ /* structure, but data (if provided) will be*/
+ /* appended in the data block. */
+} TW_TWUNKDSENTRYRETURN, FAR * pTW_TWUNKDSENTRYRETURN;
+
+/* WJD - 950818 */
+/* Added for 1.6 Specification */
+/* TWAIN 1.6 CAP_SUPPORTEDCAPSEXT structure */
+typedef struct
+{
+ TW_UINT16 Cap; /* Which CAP/ICAP info is relevant to */
+ TW_UINT16 Properties; /* Messages this CAP/ICAP supports */
+} TW_CAPEXT, FAR * pTW_CAPEXT;
+
+/* ----------------------------------------------------------------------- *\
+
+ Version 1.7: Added Following data structure for Document Imaging
+ July 1997 Enhancement.
+ KHL TW_CUSTOMDSDATA -- For Saving and Restoring Source's
+ state.
+ TW_INFO -- Each attribute for extended image
+ information.
+ TW_EXTIMAGEINFO -- Extended image information structure.
+
+\* ----------------------------------------------------------------------- */
+
+typedef struct {
+ TW_UINT32 InfoLength; /* Length of Information in bytes. */
+ TW_HANDLE hData; /* Place holder for data, DS Allocates */
+}TW_CUSTOMDSDATA, FAR *pTW_CUSTOMDSDATA;
+
+typedef struct {
+ TW_UINT16 InfoID;
+ TW_UINT16 ItemType;
+ TW_UINT16 NumItems;
+ TW_UINT16 CondCode;
+ TW_UINT32 Item;
+}TW_INFO, FAR* pTW_INFO;
+
+typedef struct {
+ TW_UINT32 NumInfos;
+ TW_INFO Info[1];
+}TW_EXTIMAGEINFO, FAR* pTW_EXTIMAGEINFO;
+
+/* Added 1.8 */
+
+/* DAT_AUDIOINFO, information about audio data */
+typedef struct {
+ TW_STR255 Name; /* name of audio data */
+ TW_UINT32 Reserved; /* reserved space */
+} TW_AUDIOINFO, FAR * pTW_AUDIOINFO;
+
+/* DAT_DEVICEEVENT, information about events */
+typedef struct {
+ TW_UINT32 Event; /* One of the TWDE_xxxx values. */
+ TW_STR255 DeviceName; /* The name of the device that generated the event */
+ TW_UINT32 BatteryMinutes; /* Battery Minutes Remaining */
+ TW_INT16 BatteryPercentage; /* Battery Percentage Remaining */
+ TW_INT32 PowerSupply; /* Power Supply */
+ TW_FIX32 XResolution; /* Resolution */
+ TW_FIX32 YResolution; /* Resolution */
+ TW_UINT32 FlashUsed2; /* Flash Used2 */
+ TW_UINT32 AutomaticCapture; /* Automatic Capture */
+ TW_UINT32 TimeBeforeFirstCapture; /* Automatic Capture */
+ TW_UINT32 TimeBetweenCaptures; /* Automatic Capture */
+} TW_DEVICEEVENT, FAR * pTW_DEVICEEVENT;
+
+/* DAT_FILESYSTEM, information about TWAIN file system */
+typedef struct {
+ /* DG_CONTROL / DAT_FILESYSTEM / MSG_xxxx fields */
+ TW_STR255 InputName; /* The name of the input or source file */
+ TW_STR255 OutputName; /* The result of an operation or the name of a destination file */
+ TW_MEMREF Context; /* Source specific data used to remember state information */
+ /* DG_CONTROL / DAT_FILESYSTEM / MSG_DELETE field */
+ int Recursive; /* recursively delete all sub-directories */
+ /* DG_CONTROL / DAT_FILESYSTEM / MSG_GETINFO fields */
+ TW_INT32 FileType; /* One of the TWFT_xxxx values */
+ TW_UINT32 Size; /* Size of current FileType */
+ TW_STR32 CreateTimeDate; /* creation date of the file */
+ TW_STR32 ModifiedTimeDate; /* last date the file was modified */
+ TW_UINT32 FreeSpace; /* bytes of free space on the current device */
+ TW_INT32 NewImageSize; /* estimate of the amount of space a new image would take up */
+ TW_UINT32 NumberOfFiles; /* number of files, depends on FileType */
+ TW_UINT32 NumberOfSnippets; /**/
+ char Reserved[512]; /**/
+} TW_FILESYSTEM, FAR * pTW_FILESYSTEM;
+
+/* DAT_PASSTHRU, device dependent data to pass through Data Source */
+typedef struct {
+ TW_MEMREF pCommand; /* Pointer to Command buffer */
+ TW_UINT32 CommandBytes; /* Number of bytes in Command buffer */
+ TW_INT32 Direction; /* One of the TWDR_xxxx values. Defines the direction of data flow */
+ TW_MEMREF pData; /* Pointer to Data buffer */
+ TW_UINT32 DataBytes; /* Number of bytes in Data buffer */
+ TW_UINT32 DataBytesXfered; /* Number of bytes successfully transferred */
+} TW_PASSTHRU, FAR * pTW_PASSTHRU;
+
+/* DAT_SETUPAUDIOFILEXFER, information required to setup an audio file transfer */
+typedef struct {
+ TW_STR255 FileName; /* full path target file */
+ TW_UINT16 Format; /* one of TWAF_xxxx */
+ TW_INT16 VRefNum;
+} TW_SETUPAUDIOFILEXFER, FAR * pTW_SETUPAUDIOFILEXFER;
+
+/****************************************************************************
+ * Generic Constants *
+ ****************************************************************************/
+
+#define TWON_ARRAY 3 /* indicates TW_ARRAY container */
+#define TWON_ENUMERATION 4 /* indicates TW_ENUMERATION container */
+#define TWON_ONEVALUE 5 /* indicates TW_ONEVALUE container */
+#define TWON_RANGE 6 /* indicates TW_RANGE container */
+
+#define TWON_ICONID 962 /* res Id of icon used in USERSELECT lbox */
+#define TWON_DSMID 461 /* res Id of the DSM version num resource */
+#define TWON_DSMCODEID 63 /* res Id of the Mac SM Code resource */
+
+#define TWON_DONTCARE8 0xff
+#define TWON_DONTCARE16 0xffff
+#define TWON_DONTCARE32 0xffffffff
+
+/* Flags used in TW_MEMORY structure. */
+#define TWMF_APPOWNS 0x1
+#define TWMF_DSMOWNS 0x2
+#define TWMF_DSOWNS 0x4
+#define TWMF_POINTER 0x8
+#define TWMF_HANDLE 0x10
+
+/* Palette types for TW_PALETTE8 */
+#define TWPA_RGB 0
+#define TWPA_GRAY 1
+#define TWPA_CMY 2
+
+/* There are four containers used for capabilities negotiation:
+ * TWON_ONEVALUE, TWON_RANGE, TWON_ENUMERATION, TWON_ARRAY
+ * In each container structure ItemType can be TWTY_INT8, TWTY_INT16, etc.
+ * The kind of data stored in the container can be determined by doing
+ * DCItemSize[ItemType] where the following is defined in TWAIN glue code:
+ * DCItemSize[]= { sizeof(TW_INT8),
+ * sizeof(TW_INT16),
+ * etc.
+ * sizeof(TW_UINT32) };
+ *
+ */
+
+#define TWTY_INT8 0x0000 /* Means Item is a TW_INT8 */
+#define TWTY_INT16 0x0001 /* Means Item is a TW_INT16 */
+#define TWTY_INT32 0x0002 /* Means Item is a TW_INT32 */
+
+#define TWTY_UINT8 0x0003 /* Means Item is a TW_UINT8 */
+#define TWTY_UINT16 0x0004 /* Means Item is a TW_UINT16 */
+#define TWTY_UINT32 0x0005 /* Means Item is a TW_UINT32 */
+
+#define TWTY_BOOL 0x0006 /* Means Item is a TW_BOOL */
+
+#define TWTY_FIX32 0x0007 /* Means Item is a TW_FIX32 */
+
+#define TWTY_FRAME 0x0008 /* Means Item is a TW_FRAME */
+
+#define TWTY_STR32 0x0009 /* Means Item is a TW_STR32 */
+#define TWTY_STR64 0x000a /* Means Item is a TW_STR64 */
+#define TWTY_STR128 0x000b /* Means Item is a TW_STR128 */
+#define TWTY_STR255 0x000c /* Means Item is a TW_STR255 */
+
+/****************************************************************************
+ * Capability Constants *
+ ****************************************************************************/
+
+/* ICAP_BITORDER values (BO_ means Bit Order) */
+#define TWBO_LSBFIRST 0
+#define TWBO_MSBFIRST 1
+
+/* ICAP_COMPRESSION values (CP_ means ComPression ) */
+#define TWCP_NONE 0
+#define TWCP_PACKBITS 1
+#define TWCP_GROUP31D 2 /* Follows CCITT spec (no End Of Line) */
+#define TWCP_GROUP31DEOL 3 /* Follows CCITT spec (has End Of Line) */
+#define TWCP_GROUP32D 4 /* Follows CCITT spec (use cap for K Factor) */
+#define TWCP_GROUP4 5 /* Follows CCITT spec */
+#define TWCP_JPEG 6 /* Use capability for more info */
+#define TWCP_LZW 7 /* Must license from Unisys and IBM to use */
+#define TWCP_JBIG 8 /* For Bitonal images -- Added 1.7 KHL */
+/* Added 1.8 */
+#define TWCP_PNG 9
+#define TWCP_RLE4 10
+#define TWCP_RLE8 11
+#define TWCP_BITFIELDS 12
+
+
+/* ICAP_IMAGEFILEFORMAT values (FF_means File Format) */
+#define TWFF_TIFF 0 /* Tagged Image File Format */
+#define TWFF_PICT 1 /* Macintosh PICT */
+#define TWFF_BMP 2 /* Windows Bitmap */
+#define TWFF_XBM 3 /* X-Windows Bitmap */
+#define TWFF_JFIF 4 /* JPEG File Interchange Format */
+#define TWFF_FPX 5 /* Flash Pix */
+#define TWFF_TIFFMULTI 6 /* Multi-page tiff file */
+#define TWFF_PNG 7
+#define TWFF_SPIFF 8
+#define TWFF_EXIF 9
+
+
+/* ICAP_FILTER values (FT_ means Filter Type) */
+#define TWFT_RED 0
+#define TWFT_GREEN 1
+#define TWFT_BLUE 2
+#define TWFT_NONE 3
+#define TWFT_WHITE 4
+#define TWFT_CYAN 5
+#define TWFT_MAGENTA 6
+#define TWFT_YELLOW 7
+#define TWFT_BLACK 8
+
+/* ICAP_LIGHTPATH values (LP_ means Light Path) */
+#define TWLP_REFLECTIVE 0
+#define TWLP_TRANSMISSIVE 1
+
+/* ICAP_LIGHTSOURCE values (LS_ means Light Source) */
+#define TWLS_RED 0
+#define TWLS_GREEN 1
+#define TWLS_BLUE 2
+#define TWLS_NONE 3
+#define TWLS_WHITE 4
+#define TWLS_UV 5
+#define TWLS_IR 6
+
+/* ICAP_ORIENTATION values (OR_ means ORientation) */
+#define TWOR_ROT0 0
+#define TWOR_ROT90 1
+#define TWOR_ROT180 2
+#define TWOR_ROT270 3
+#define TWOR_PORTRAIT TWOR_ROT0
+#define TWOR_LANDSCAPE TWOR_ROT270
+
+/* ICAP_PLANARCHUNKY values (PC_ means Planar/Chunky ) */
+#define TWPC_CHUNKY 0
+#define TWPC_PLANAR 1
+
+/* ICAP_PIXELFLAVOR values (PF_ means Pixel Flavor) */
+#define TWPF_CHOCOLATE 0 /* zero pixel represents darkest shade */
+#define TWPF_VANILLA 1 /* zero pixel represents lightest shade */
+
+/* ICAP_PIXELTYPE values (PT_ means Pixel Type) */
+#define TWPT_BW 0 /* Black and White */
+#define TWPT_GRAY 1
+#define TWPT_RGB 2
+#define TWPT_PALETTE 3
+#define TWPT_CMY 4
+#define TWPT_CMYK 5
+#define TWPT_YUV 6
+#define TWPT_YUVK 7
+#define TWPT_CIEXYZ 8
+
+/* ICAP_SUPPORTEDSIZES values (SS_ means Supported Sizes) */
+#define TWSS_NONE 0
+#define TWSS_A4LETTER 1
+#define TWSS_B5LETTER 2
+#define TWSS_USLETTER 3
+#define TWSS_USLEGAL 4
+/* Added 1.5 */
+#define TWSS_A5 5
+#define TWSS_B4 6
+#define TWSS_B6 7
+/*#define TWSS_B 8 */
+/* Added 1.7 */
+#define TWSS_USLEDGER 9
+#define TWSS_USEXECUTIVE 10
+#define TWSS_A3 11
+#define TWSS_B3 12
+#define TWSS_A6 13
+#define TWSS_C4 14
+#define TWSS_C5 15
+#define TWSS_C6 16
+/* Added 1.8 */
+#define TWSS_4A0 17
+#define TWSS_2A0 18
+#define TWSS_A0 19
+#define TWSS_A1 20
+#define TWSS_A2 21
+#define TWSS_A4 TWSS_A4LETTER
+#define TWSS_A7 22
+#define TWSS_A8 23
+#define TWSS_A9 24
+#define TWSS_A10 25
+#define TWSS_ISOB0 26
+#define TWSS_ISOB1 27
+#define TWSS_ISOB2 28
+#define TWSS_ISOB3 TWSS_B3
+#define TWSS_ISOB4 TWSS_B4
+#define TWSS_ISOB5 29
+#define TWSS_ISOB6 TWSS_B6
+#define TWSS_ISOB7 30
+#define TWSS_ISOB8 31
+#define TWSS_ISOB9 32
+#define TWSS_ISOB10 33
+#define TWSS_JISB0 34
+#define TWSS_JISB1 35
+#define TWSS_JISB2 36
+#define TWSS_JISB3 37
+#define TWSS_JISB4 38
+#define TWSS_JISB5 TWSS_B5LETTER
+#define TWSS_JISB6 39
+#define TWSS_JISB7 40
+#define TWSS_JISB8 41
+#define TWSS_JISB9 42
+#define TWSS_JISB10 43
+#define TWSS_C0 44
+#define TWSS_C1 45
+#define TWSS_C2 46
+#define TWSS_C3 47
+#define TWSS_C7 48
+#define TWSS_C8 49
+#define TWSS_C9 50
+#define TWSS_C10 51
+#define TWSS_USSTATEMENT 52
+#define TWSS_BUSINESSCARD 53
+
+/* ICAP_XFERMECH values (SX_ means Setup XFer) */
+#define TWSX_NATIVE 0
+#define TWSX_FILE 1
+#define TWSX_MEMORY 2
+
+/* ICAP_UNITS values (UN_ means UNits) */
+#define TWUN_INCHES 0
+#define TWUN_CENTIMETERS 1
+#define TWUN_PICAS 2
+#define TWUN_POINTS 3
+#define TWUN_TWIPS 4
+#define TWUN_PIXELS 5
+
+/* Added 1.5 */
+/* ICAP_BITDEPTHREDUCTION values (BR_ means Bitdepth Reduction) */
+#define TWBR_THRESHOLD 0
+#define TWBR_HALFTONE 1
+#define TWBR_CUSTHALFTONE 2
+#define TWBR_DIFFUSION 3
+
+/* Added 1.7 */
+/* ICAP_DUPLEX values */
+#define TWDX_NONE 0
+#define TWDX_1PASSDUPLEX 1
+#define TWDX_2PASSDUPLEX 2
+
+/* Added 1.7 */
+/* TWEI_BARCODETYPE values */
+#define TWBT_3OF9 0
+#define TWBT_2OF5INTERLEAVED 1
+#define TWBT_2OF5NONINTERLEAVED 2
+#define TWBT_CODE93 3
+#define TWBT_CODE128 4
+#define TWBT_UCC128 5
+#define TWBT_CODABAR 6
+#define TWBT_UPCA 7
+#define TWBT_UPCE 8
+#define TWBT_EAN8 9
+#define TWBT_EAN13 10
+#define TWBT_POSTNET 11
+#define TWBT_PDF417 12
+/* Added 1.8 */
+#define TWBT_2OF5INDUSTRIAL 13
+#define TWBT_2OF5MATRIX 14
+#define TWBT_2OF5DATALOGIC 15
+#define TWBT_2OF5IATA 16
+#define TWBT_3OF9FULLASCII 17
+#define TWBT_CODABARWITHSTARTSTOP 18
+#define TWBT_MAXICODE 19
+
+/* Added 1.7 */
+/* TWEI_DESKEWSTATUS values */
+#define TWDSK_SUCCESS 0
+#define TWDSK_REPORTONLY 1
+#define TWDSK_FAIL 2
+#define TWDSK_DISABLED 3
+
+/* Added 1.7 */
+/* TWEI_PATCHCODE values */
+#define TWPCH_PATCH1 0
+#define TWPCH_PATCH2 1
+#define TWPCH_PATCH3 2
+#define TWPCH_PATCH4 3
+#define TWPCH_PATCH6 4
+#define TWPCH_PATCHT 5
+
+/* Added 1.7 */
+/* CAP_JOBCONTROL values */
+#define TWJC_NONE 0
+#define TWJC_JSIC 1
+#define TWJC_JSIS 2
+#define TWJC_JSXC 3
+#define TWJC_JSXS 4
+
+/* Added 1.7 */
+/* TWEI_BARCODEROTATION values (BCOR_ means barcode rotation) */
+#define TWBCOR_ROT0 0
+#define TWBCOR_ROT90 1
+#define TWBCOR_ROT180 2
+#define TWBCOR_ROT270 3
+#define TWBCOR_ROTX 4
+
+/* Added 1.8 */
+/* ACAP_AUDIOFILEFORMAT values (AF_ means audio format) */
+#define TWAF_WAV 0
+#define TWAF_AIFF 1
+#define TWAF_AU 3
+#define TWAF_SND 4
+
+/* CAP_ALARMS values (AL_ means alarms) */
+#define TWAL_ALARM 0
+#define TWAL_FEEDERERROR 1
+#define TWAL_FEEDERWARNING 2
+#define TWAL_BARCODE 3
+#define TWAL_DOUBLEFEED 4
+#define TWAL_JAM 5
+#define TWAL_PATCHCODE 6
+#define TWAL_POWER 7
+#define TWAL_SKEW 8
+
+/* CAP_CLEARBUFFERS values (CB_ means clear buffers) */
+#define TWCB_AUTO 0
+#define TWCB_CLEAR 1
+#define TWCB_NOCLEAR 2
+
+/* CAP_DEVICEEVENT values (DE_ means device event) */
+#define TWDE_CUSTOMEVENTS 0x8000
+#define TWDE_CHECKAUTOMATICCAPTURE 0
+#define TWDE_CHECKBATTERY 1
+#define TWDE_CHECKDEVICEONLINE 2
+#define TWDE_CHECKFLASH 3
+#define TWDE_CHECKPOWERSUPPLY 4
+#define TWDE_CHECKRESOLUTION 5
+#define TWDE_DEVICEADDED 6
+#define TWDE_DEVICEOFFLINE 7
+#define TWDE_DEVICEREADY 8
+#define TWDE_DEVICEREMOVED 9
+#define TWDE_IMAGECAPTURED 10
+#define TWDE_IMAGEDELETED 11
+#define TWDE_PAPERDOUBLEFEED 12
+#define TWDE_PAPERJAM 13
+#define TWDE_LAMPFAILURE 14
+#define TWDE_POWERSAVE 15
+#define TWDE_POWERSAVENOTIFY 16
+
+/* CAP_FEEDERALIGNMENT values (FA_ means feeder alignment) */
+#define TWFA_NONE 0
+#define TWFA_LEFT 1
+#define TWFA_CENTER 2
+#define TWFA_RIGHT 3
+
+/* CAP_FEEDERORDER values (FO_ means feeder order) */
+#define TWFO_FIRSTPAGEFIRST 0
+#define TWFO_LASTPAGEFIRST 1
+
+/* CAP_FILESYSTEM values (FS_ means file system) */
+#define TWFS_FILESYSTEM 0
+#define TWFS_RECURSIVEDELETE 1
+
+/* CAP_POWERSUPPLY values (PS_ means power supply) */
+#define TWPS_EXTERNAL 0
+#define TWPS_BATTERY 1
+
+/* CAP_PRINTER values (PR_ means printer) */
+#define TWPR_IMPRINTERTOPBEFORE 0
+#define TWPR_IMPRINTERTOPAFTER 1
+#define TWPR_IMPRINTERBOTTOMBEFORE 2
+#define TWPR_IMPRINTERBOTTOMAFTER 3
+#define TWPR_ENDORSERTOPBEFORE 4
+#define TWPR_ENDORSERTOPAFTER 5
+#define TWPR_ENDORSERBOTTOMBEFORE 6
+#define TWPR_ENDORSERBOTTOMAFTER 7
+
+/* CAP_PRINTERMODE values (PM_ means printer mode) */
+#define TWPM_SINGLESTRING 0
+#define TWPM_MULTISTRING 1
+#define TWPM_COMPOUNDSTRING 2
+
+/* ICAP_BARCODESEARCHMODE values (TWBD_ means search) */
+#define TWBD_HORZ 0
+#define TWBD_VERT 1
+#define TWBD_HORZVERT 2
+#define TWBD_VERTHORZ 3
+
+/* ICAP_FLASHUSED2 values (FL_ means flash) */
+#define TWFL_NONE 0
+#define TWFL_OFF 1
+#define TWFL_ON 2
+#define TWFL_AUTO 3
+#define TWFL_REDEYE 4
+
+/* ICAP_FLIPROTATION values (FR_ means flip rotation) */
+#define TWFR_BOOK 0
+#define TWFR_FANFOLD 1
+
+/* ICAP_IMAGEFILTER values (IF_ means image filter) */
+#define TWIF_NONE 0
+#define TWIF_AUTO 1
+#define TWIF_LOWPASS 2
+#define TWIF_BANDPASS 3
+#define TWIF_HIGHPASS 4
+#define TWIF_TEXT TWIF_BANDPASS
+#define TWIF_FINELINE TWIF_HIGHPASS
+
+/* ICAP_NOISEFILTER values (NF_ means noise filter) */
+#define TWNF_NONE 0
+#define TWNF_AUTO 1
+#define TWNF_LONEPIXEL 2
+#define TWNF_MAJORITYRULE 3
+
+/* ICAP_OVERSCAN values (OV_ means overscan) */
+#define TWOV_NONE 0
+#define TWOV_AUTO 1
+#define TWOV_TOPBOTTOM 2
+#define TWOV_LEFTRIGHT 3
+#define TWOV_ALL 4
+
+/* TW_FILESYSTEM.FileType values (FT_ means file type) */
+#define TWFY_CAMERA 0
+#define TWFY_CAMERATOP 1
+#define TWFY_CAMERABOTTOM 2
+#define TWFY_CAMERAPREVIEW 3
+#define TWFY_DOMAIN 4
+#define TWFY_HOST 5
+#define TWFY_DIRECTORY 6
+#define TWFY_IMAGE 7
+#define TWFY_UNKNOWN 8
+
+/****************************************************************************
+ * Country Constants *
+ ****************************************************************************/
+
+#define TWCY_AFGHANISTAN 1001
+#define TWCY_ALGERIA 213
+#define TWCY_AMERICANSAMOA 684
+#define TWCY_ANDORRA 033
+#define TWCY_ANGOLA 1002
+#define TWCY_ANGUILLA 8090
+#define TWCY_ANTIGUA 8091
+#define TWCY_ARGENTINA 54
+#define TWCY_ARUBA 297
+#define TWCY_ASCENSIONI 247
+#define TWCY_AUSTRALIA 61
+#define TWCY_AUSTRIA 43
+#define TWCY_BAHAMAS 8092
+#define TWCY_BAHRAIN 973
+#define TWCY_BANGLADESH 880
+#define TWCY_BARBADOS 8093
+#define TWCY_BELGIUM 32
+#define TWCY_BELIZE 501
+#define TWCY_BENIN 229
+#define TWCY_BERMUDA 8094
+#define TWCY_BHUTAN 1003
+#define TWCY_BOLIVIA 591
+#define TWCY_BOTSWANA 267
+#define TWCY_BRITAIN 6
+#define TWCY_BRITVIRGINIS 8095
+#define TWCY_BRAZIL 55
+#define TWCY_BRUNEI 673
+#define TWCY_BULGARIA 359
+#define TWCY_BURKINAFASO 1004
+#define TWCY_BURMA 1005
+#define TWCY_BURUNDI 1006
+#define TWCY_CAMAROON 237
+#define TWCY_CANADA 2
+#define TWCY_CAPEVERDEIS 238
+#define TWCY_CAYMANIS 8096
+#define TWCY_CENTRALAFREP 1007
+#define TWCY_CHAD 1008
+#define TWCY_CHILE 56
+#define TWCY_CHINA 86
+#define TWCY_CHRISTMASIS 1009
+#define TWCY_COCOSIS 1009
+#define TWCY_COLOMBIA 57
+#define TWCY_COMOROS 1010
+#define TWCY_CONGO 1011
+#define TWCY_COOKIS 1012
+#define TWCY_COSTARICA 506
+#define TWCY_CUBA 005
+#define TWCY_CYPRUS 357
+#define TWCY_CZECHOSLOVAKIA 42
+#define TWCY_DENMARK 45
+#define TWCY_DJIBOUTI 1013
+#define TWCY_DOMINICA 8097
+#define TWCY_DOMINCANREP 8098
+#define TWCY_EASTERIS 1014
+#define TWCY_ECUADOR 593
+#define TWCY_EGYPT 20
+#define TWCY_ELSALVADOR 503
+#define TWCY_EQGUINEA 1015
+#define TWCY_ETHIOPIA 251
+#define TWCY_FALKLANDIS 1016
+#define TWCY_FAEROEIS 298
+#define TWCY_FIJIISLANDS 679
+#define TWCY_FINLAND 358
+#define TWCY_FRANCE 33
+#define TWCY_FRANTILLES 596
+#define TWCY_FRGUIANA 594
+#define TWCY_FRPOLYNEISA 689
+#define TWCY_FUTANAIS 1043
+#define TWCY_GABON 241
+#define TWCY_GAMBIA 220
+#define TWCY_GERMANY 49
+#define TWCY_GHANA 233
+#define TWCY_GIBRALTER 350
+#define TWCY_GREECE 30
+#define TWCY_GREENLAND 299
+#define TWCY_GRENADA 8099
+#define TWCY_GRENEDINES 8015
+#define TWCY_GUADELOUPE 590
+#define TWCY_GUAM 671
+#define TWCY_GUANTANAMOBAY 5399
+#define TWCY_GUATEMALA 502
+#define TWCY_GUINEA 224
+#define TWCY_GUINEABISSAU 1017
+#define TWCY_GUYANA 592
+#define TWCY_HAITI 509
+#define TWCY_HONDURAS 504
+#define TWCY_HONGKONG 852
+#define TWCY_HUNGARY 36
+#define TWCY_ICELAND 354
+#define TWCY_INDIA 91
+#define TWCY_INDONESIA 62
+#define TWCY_IRAN 98
+#define TWCY_IRAQ 964
+#define TWCY_IRELAND 353
+#define TWCY_ISRAEL 972
+#define TWCY_ITALY 39
+#define TWCY_IVORYCOAST 225
+#define TWCY_JAMAICA 8010
+#define TWCY_JAPAN 81
+#define TWCY_JORDAN 962
+#define TWCY_KENYA 254
+#define TWCY_KIRIBATI 1018
+#define TWCY_KOREA 82
+#define TWCY_KUWAIT 965
+#define TWCY_LAOS 1019
+#define TWCY_LEBANON 1020
+#define TWCY_LIBERIA 231
+#define TWCY_LIBYA 218
+#define TWCY_LIECHTENSTEIN 41
+#define TWCY_LUXENBOURG 352
+#define TWCY_MACAO 853
+#define TWCY_MADAGASCAR 1021
+#define TWCY_MALAWI 265
+#define TWCY_MALAYSIA 60
+#define TWCY_MALDIVES 960
+#define TWCY_MALI 1022
+#define TWCY_MALTA 356
+#define TWCY_MARSHALLIS 692
+#define TWCY_MAURITANIA 1023
+#define TWCY_MAURITIUS 230
+#define TWCY_MEXICO 3
+#define TWCY_MICRONESIA 691
+#define TWCY_MIQUELON 508
+#define TWCY_MONACO 33
+#define TWCY_MONGOLIA 1024
+#define TWCY_MONTSERRAT 8011
+#define TWCY_MOROCCO 212
+#define TWCY_MOZAMBIQUE 1025
+#define TWCY_NAMIBIA 264
+#define TWCY_NAURU 1026
+#define TWCY_NEPAL 977
+#define TWCY_NETHERLANDS 31
+#define TWCY_NETHANTILLES 599
+#define TWCY_NEVIS 8012
+#define TWCY_NEWCALEDONIA 687
+#define TWCY_NEWZEALAND 64
+#define TWCY_NICARAGUA 505
+#define TWCY_NIGER 227
+#define TWCY_NIGERIA 234
+#define TWCY_NIUE 1027
+#define TWCY_NORFOLKI 1028
+#define TWCY_NORWAY 47
+#define TWCY_OMAN 968
+#define TWCY_PAKISTAN 92
+#define TWCY_PALAU 1029
+#define TWCY_PANAMA 507
+#define TWCY_PARAGUAY 595
+#define TWCY_PERU 51
+#define TWCY_PHILLIPPINES 63
+#define TWCY_PITCAIRNIS 1030
+#define TWCY_PNEWGUINEA 675
+#define TWCY_POLAND 48
+#define TWCY_PORTUGAL 351
+#define TWCY_QATAR 974
+#define TWCY_REUNIONI 1031
+#define TWCY_ROMANIA 40
+#define TWCY_RWANDA 250
+#define TWCY_SAIPAN 670
+#define TWCY_SANMARINO 39
+#define TWCY_SAOTOME 1033
+#define TWCY_SAUDIARABIA 966
+#define TWCY_SENEGAL 221
+#define TWCY_SEYCHELLESIS 1034
+#define TWCY_SIERRALEONE 1035
+#define TWCY_SINGAPORE 65
+#define TWCY_SOLOMONIS 1036
+#define TWCY_SOMALI 1037
+#define TWCY_SOUTHAFRICA 27
+#define TWCY_SPAIN 34
+#define TWCY_SRILANKA 94
+#define TWCY_STHELENA 1032
+#define TWCY_STKITTS 8013
+#define TWCY_STLUCIA 8014
+#define TWCY_STPIERRE 508
+#define TWCY_STVINCENT 8015
+#define TWCY_SUDAN 1038
+#define TWCY_SURINAME 597
+#define TWCY_SWAZILAND 268
+#define TWCY_SWEDEN 46
+#define TWCY_SWITZERLAND 41
+#define TWCY_SYRIA 1039
+#define TWCY_TAIWAN 886
+#define TWCY_TANZANIA 255
+#define TWCY_THAILAND 66
+#define TWCY_TOBAGO 8016
+#define TWCY_TOGO 228
+#define TWCY_TONGAIS 676
+#define TWCY_TRINIDAD 8016
+#define TWCY_TUNISIA 216
+#define TWCY_TURKEY 90
+#define TWCY_TURKSCAICOS 8017
+#define TWCY_TUVALU 1040
+#define TWCY_UGANDA 256
+#define TWCY_USSR 7
+#define TWCY_UAEMIRATES 971
+#define TWCY_UNITEDKINGDOM 44
+#define TWCY_USA 1
+#define TWCY_URUGUAY 598
+#define TWCY_VANUATU 1041
+#define TWCY_VATICANCITY 39
+#define TWCY_VENEZUELA 58
+#define TWCY_WAKE 1042
+#define TWCY_WALLISIS 1043
+#define TWCY_WESTERNSAHARA 1044
+#define TWCY_WESTERNSAMOA 1045
+#define TWCY_YEMEN 1046
+#define TWCY_YUGOSLAVIA 38
+#define TWCY_ZAIRE 243
+#define TWCY_ZAMBIA 260
+#define TWCY_ZIMBABWE 263
+/* Added for 1.8 */
+#define TWCY_ALBANIA 355
+#define TWCY_ARMENIA 374
+#define TWCY_AZERBAIJAN 994
+#define TWCY_BELARUS 375
+#define TWCY_BOSNIAHERZGO 387
+#define TWCY_CAMBODIA 855
+#define TWCY_CROATIA 385
+#define TWCY_CZECHREPUBLIC 420
+#define TWCY_DIEGOGARCIA 246
+#define TWCY_ERITREA 291
+#define TWCY_ESTONIA 372
+#define TWCY_GEORGIA 995
+#define TWCY_LATVIA 371
+#define TWCY_LESOTHO 266
+#define TWCY_LITHUANIA 370
+#define TWCY_MACEDONIA 389
+#define TWCY_MAYOTTEIS 269
+#define TWCY_MOLDOVA 373
+#define TWCY_MYANMAR 95
+#define TWCY_NORTHKOREA 850
+#define TWCY_PUERTORICO 787
+#define TWCY_RUSSIA 7
+#define TWCY_SERBIA 381
+#define TWCY_SLOVAKIA 421
+#define TWCY_SLOVENIA 386
+#define TWCY_SOUTHKOREA 82
+#define TWCY_UKRAINE 380
+#define TWCY_USVIRGINIS 340
+#define TWCY_VIETNAM 84
+
+/****************************************************************************
+ * Language Constants *
+ ****************************************************************************/
+
+#define TWLG_DAN 0 /* Danish */
+#define TWLG_DUT 1 /* Dutch */
+#define TWLG_ENG 2 /* International English */
+#define TWLG_FCF 3 /* French Canadian */
+#define TWLG_FIN 4 /* Finnish */
+#define TWLG_FRN 5 /* French */
+#define TWLG_GER 6 /* German */
+#define TWLG_ICE 7 /* Icelandic */
+#define TWLG_ITN 8 /* Italian */
+#define TWLG_NOR 9 /* Norwegian */
+#define TWLG_POR 10 /* Portuguese */
+#define TWLG_SPA 11 /* Spanish */
+#define TWLG_SWE 12 /* Swedish */
+#define TWLG_USA 13 /* U.S. English */
+/* Added for 1.8 */
+#define TWLG_USERLOCALE -1
+#define TWLG_AFRIKAANS 14
+#define TWLG_ALBANIA 15
+#define TWLG_ARABIC 16
+#define TWLG_ARABIC_ALGERIA 17
+#define TWLG_ARABIC_BAHRAIN 18
+#define TWLG_ARABIC_EGYPT 19
+#define TWLG_ARABIC_IRAQ 20
+#define TWLG_ARABIC_JORDAN 21
+#define TWLG_ARABIC_KUWAIT 22
+#define TWLG_ARABIC_LEBANON 23
+#define TWLG_ARABIC_LIBYA 24
+#define TWLG_ARABIC_MOROCCO 25
+#define TWLG_ARABIC_OMAN 26
+#define TWLG_ARABIC_QATAR 27
+#define TWLG_ARABIC_SAUDIARABIA 28
+#define TWLG_ARABIC_SYRIA 29
+#define TWLG_ARABIC_TUNISIA 30
+#define TWLG_ARABIC_UAE 31 /* United Arabic Emirates */
+#define TWLG_ARABIC_YEMEN 32
+#define TWLG_BASQUE 33
+#define TWLG_BYELORUSSIAN 34
+#define TWLG_BULGARIAN 35
+#define TWLG_CATALAN 36
+#define TWLG_CHINESE 37
+#define TWLG_CHINESE_HONGKONG 38
+#define TWLG_CHINESE_PRC 39 /* People's Republic of China */
+#define TWLG_CHINESE_SINGAPORE 40
+#define TWLG_CHINESE_SIMPLIFIED 41
+#define TWLG_CHINESE_TAIWAN 42
+#define TWLG_CHINESE_TRADITIONAL 43
+#define TWLG_CROATIA 44
+#define TWLG_CZECH 45
+#define TWLG_DANISH TWLG_DAN
+#define TWLG_DUTCH TWLG_DUT
+#define TWLG_DUTCH_BELGIAN 46
+#define TWLG_ENGLISH TWLG_ENG
+#define TWLG_ENGLISH_AUSTRALIAN 47
+#define TWLG_ENGLISH_CANADIAN 48
+#define TWLG_ENGLISH_IRELAND 49
+#define TWLG_ENGLISH_NEWZEALAND 50
+#define TWLG_ENGLISH_SOUTHAFRICA 51
+#define TWLG_ENGLISH_UK 52
+#define TWLG_ENGLISH_USA TWLG_USA
+#define TWLG_ESTONIAN 53
+#define TWLG_FAEROESE 54
+#define TWLG_FARSI 55
+#define TWLG_FINNISH TWLG_FIN
+#define TWLG_FRENCH TWLG_FRN
+#define TWLG_FRENCH_BELGIAN 56
+#define TWLG_FRENCH_CANADIAN TWLG_FCF
+#define TWLG_FRENCH_LUXEMBOURG 57
+#define TWLG_FRENCH_SWISS 58
+#define TWLG_GERMAN TWLG_GER
+#define TWLG_GERMAN_AUSTRIAN 59
+#define TWLG_GERMAN_LUXEMBOURG 60
+#define TWLG_GERMAN_LIECHTENSTEIN 61
+#define TWLG_GERMAN_SWISS 62
+#define TWLG_GREEK 63
+#define TWLG_HEBREW 64
+#define TWLG_HUNGARIAN 65
+#define TWLG_ICELANDIC TWLG_ICE
+#define TWLG_INDONESIAN 66
+#define TWLG_ITALIAN TWLG_ITN
+#define TWLG_ITALIAN_SWISS 67
+#define TWLG_JAPANESE 68
+#define TWLG_KOREAN 69
+#define TWLG_KOREAN_JOHAB 70
+#define TWLG_LATVIAN 71
+#define TWLG_LITHUANIAN 72
+#define TWLG_NORWEGIAN TWLG_NOR
+#define TWLG_NORWEGIAN_BOKMAL 73
+#define TWLG_NORWEGIAN_NYNORSK 74
+#define TWLG_POLISH 75
+#define TWLG_PORTUGUESE TWLG_POR
+#define TWLG_PORTUGUESE_BRAZIL 76
+#define TWLG_ROMANIAN 77
+#define TWLG_RUSSIAN 78
+#define TWLG_SERBIAN_LATIN 79
+#define TWLG_SLOVAK 80
+#define TWLG_SLOVENIAN 81
+#define TWLG_SPANISH TWLG_SPA
+#define TWLG_SPANISH_MEXICAN 82
+#define TWLG_SPANISH_MODERN 83
+#define TWLG_SWEDISH TWLG_SWE
+#define TWLG_THAI 84
+#define TWLG_TURKISH 85
+#define TWLG_UKRANIAN 86
+/* More stuff added for 1.8 */
+#define TWLG_ASSAMESE 87
+#define TWLG_BENGALI 88
+#define TWLG_BIHARI 89
+#define TWLG_BODO 90
+#define TWLG_DOGRI 91
+#define TWLG_GUJARATI 92
+#define TWLG_HARYANVI 93
+#define TWLG_HINDI 94
+#define TWLG_KANNADA 95
+#define TWLG_KASHMIRI 96
+#define TWLG_MALAYALAM 97
+#define TWLG_MARATHI 98
+#define TWLG_MARWARI 99
+#define TWLG_MEGHALAYAN 100
+#define TWLG_MIZO 101
+#define TWLG_NAGA 102
+#define TWLG_ORISSI 103
+#define TWLG_PUNJABI 104
+#define TWLG_PUSHTU 105
+#define TWLG_SERBIAN_CYRILLIC 106
+#define TWLG_SIKKIMI 107
+#define TWLG_SWEDISH_FINLAND 108
+#define TWLG_TAMIL 109
+#define TWLG_TELUGU 110
+#define TWLG_TRIPURI 111
+#define TWLG_URDU 112
+#define TWLG_VIETNAMESE 113
+
+/****************************************************************************
+ * Data Groups *
+ ****************************************************************************/
+
+/* More Data Groups may be added in the future.
+ * Possible candidates include text, vector graphics, sound, etc.
+ * NOTE: Data Group constants must be powers of 2 as they are used
+ * as bitflags when Application asks DSM to present a list of DSs.
+ */
+
+#define DG_CONTROL 0x0001L /* data pertaining to control */
+#define DG_IMAGE 0x0002L /* data pertaining to raster images */
+/* Added 1.8 */
+#define DG_AUDIO 0x0004L /* data pertaining to audio */
+
+/****************************************************************************
+ * Data Argument Types *
+ ****************************************************************************/
+
+/* SDH - 03/23/95 - WATCH */
+/* The thunker requires knowledge about size of data being passed in the */
+/* lpData parameter to DS_Entry (which is not readily available due to */
+/* type LPVOID. Thus, we key off the DAT_ argument to determine the size. */
+/* This has a couple implications: */
+/* 1) Any additional DAT_ features require modifications to the thunk code */
+/* for thunker support. */
+/* 2) Any applications which use the custom capabilities are not supported */
+/* under thunking since we have no way of knowing what size data (if */
+/* any) is being passed. */
+
+#define DAT_NULL 0x0000 /* No data or structure. */
+#define DAT_CUSTOMBASE 0x8000 /* Base of custom DATs. */
+
+/* Data Argument Types for the DG_CONTROL Data Group. */
+#define DAT_CAPABILITY 0x0001 /* TW_CAPABILITY */
+#define DAT_EVENT 0x0002 /* TW_EVENT */
+#define DAT_IDENTITY 0x0003 /* TW_IDENTITY */
+#define DAT_PARENT 0x0004 /* TW_HANDLE, application win handle in Windows */
+#define DAT_PENDINGXFERS 0x0005 /* TW_PENDINGXFERS */
+#define DAT_SETUPMEMXFER 0x0006 /* TW_SETUPMEMXFER */
+#define DAT_SETUPFILEXFER 0x0007 /* TW_SETUPFILEXFER */
+#define DAT_STATUS 0x0008 /* TW_STATUS */
+#define DAT_USERINTERFACE 0x0009 /* TW_USERINTERFACE */
+#define DAT_XFERGROUP 0x000a /* TW_UINT32 */
+/* SDH - 03/21/95 - TWUNK */
+/* Additional message required for thunker to request the special */
+/* identity information. */
+#define DAT_TWUNKIDENTITY 0x000b /* TW_TWUNKIDENTITY */
+#define DAT_CUSTOMDSDATA 0x000c /* TW_CUSTOMDSDATA. */
+/* Added 1.8 */
+#define DAT_DEVICEEVENT 0x000d /* TW_DEVICEEVENT */
+#define DAT_FILESYSTEM 0x000e /* TW_FILESYSTEM */
+#define DAT_PASSTHRU 0x000f /* TW_PASSTHRU */
+
+/* Data Argument Types for the DG_IMAGE Data Group. */
+#define DAT_IMAGEINFO 0x0101 /* TW_IMAGEINFO */
+#define DAT_IMAGELAYOUT 0x0102 /* TW_IMAGELAYOUT */
+#define DAT_IMAGEMEMXFER 0x0103 /* TW_IMAGEMEMXFER */
+#define DAT_IMAGENATIVEXFER 0x0104 /* TW_UINT32 loword is hDIB, PICHandle */
+#define DAT_IMAGEFILEXFER 0x0105 /* Null data */
+#define DAT_CIECOLOR 0x0106 /* TW_CIECOLOR */
+#define DAT_GRAYRESPONSE 0x0107 /* TW_GRAYRESPONSE */
+#define DAT_RGBRESPONSE 0x0108 /* TW_RGBRESPONSE */
+#define DAT_JPEGCOMPRESSION 0x0109 /* TW_JPEGCOMPRESSION */
+#define DAT_PALETTE8 0x010a /* TW_PALETTE8 */
+#define DAT_EXTIMAGEINFO 0x010b /* TW_EXTIMAGEINFO -- for 1.7 Spec. */
+
+/* Added 1.8 */
+/* Data Argument Types for the DG_AUDIO Data Group. */
+#define DAT_AUDIOFILEXFER 0x0201 /* Null data */
+#define DAT_AUDIOINFO 0x0202 /* TW_AUDIOINFO */
+#define DAT_AUDIONATIVEXFER 0x0203 /* TW_UINT32 handle to WAV, (AIFF Mac) */
+
+/****************************************************************************
+ * Messages *
+ ****************************************************************************/
+
+/* All message constants are unique.
+ * Messages are grouped according to which DATs they are used with.*/
+
+#define MSG_NULL 0x0000 /* Used in TW_EVENT structure */
+#define MSG_CUSTOMBASE 0x8000 /* Base of custom messages */
+
+/* Generic messages may be used with any of several DATs. */
+#define MSG_GET 0x0001 /* Get one or more values */
+#define MSG_GETCURRENT 0x0002 /* Get current value */
+#define MSG_GETDEFAULT 0x0003 /* Get default (e.g. power up) value */
+#define MSG_GETFIRST 0x0004 /* Get first of a series of items, e.g. DSs */
+#define MSG_GETNEXT 0x0005 /* Iterate through a series of items. */
+#define MSG_SET 0x0006 /* Set one or more values */
+#define MSG_RESET 0x0007 /* Set current value to default value */
+#define MSG_QUERYSUPPORT 0x0008 /* Get supported operations on the cap. */
+
+/* Messages used with DAT_NULL */
+#define MSG_XFERREADY 0x0101 /* The data source has data ready */
+#define MSG_CLOSEDSREQ 0x0102 /* Request for Application. to close DS */
+#define MSG_CLOSEDSOK 0x0103 /* Tell the Application. to save the state. */
+/* Added 1.8 */
+#define MSG_DEVICEEVENT 0X0104 /* Some event has taken place */
+
+/* Messages used with a pointer to a DAT_STATUS structure */
+#define MSG_CHECKSTATUS 0x0201 /* Get status information */
+
+/* Messages used with a pointer to DAT_PARENT data */
+#define MSG_OPENDSM 0x0301 /* Open the DSM */
+#define MSG_CLOSEDSM 0x0302 /* Close the DSM */
+
+/* Messages used with a pointer to a DAT_IDENTITY structure */
+#define MSG_OPENDS 0x0401 /* Open a data source */
+#define MSG_CLOSEDS 0x0402 /* Close a data source */
+#define MSG_USERSELECT 0x0403 /* Put up a dialog of all DS */
+
+/* Messages used with a pointer to a DAT_USERINTERFACE structure */
+#define MSG_DISABLEDS 0x0501 /* Disable data transfer in the DS */
+#define MSG_ENABLEDS 0x0502 /* Enable data transfer in the DS */
+#define MSG_ENABLEDSUIONLY 0x0503 /* Enable for saving DS state only. */
+
+/* Messages used with a pointer to a DAT_EVENT structure */
+#define MSG_PROCESSEVENT 0x0601
+
+/* Messages used with a pointer to a DAT_PENDINGXFERS structure */
+#define MSG_ENDXFER 0x0701
+
+/* Added 1.8 */
+/* Messages used with a pointer to a DAT_FILESYSTEM structure */
+#define MSG_CHANGEDIRECTORY 0x0801
+#define MSG_CREATEDIRECTORY 0x0802
+#define MSG_DELETE 0x0803
+#define MSG_FORMATMEDIA 0x0804
+#define MSG_GETCLOSE 0x0805
+#define MSG_GETFIRSTFILE 0x0806
+#define MSG_GETINFO 0x0807
+#define MSG_GETNEXTFILE 0x0808
+#define MSG_RENAME 0x0809
+
+/* Messages used with a pointer to a DAT_PASSTHRU structure */
+#define MSG_PASSTHRU 0x0901
+
+/****************************************************************************
+ * Capabilities *
+ ****************************************************************************/
+
+#define CAP_CUSTOMBASE 0x8000 /* Base of custom capabilities */
+
+/* all data sources are REQUIRED to support these caps */
+#define CAP_XFERCOUNT 0x0001
+
+/* image data sources are REQUIRED to support these caps */
+#define ICAP_COMPRESSION 0x0100
+#define ICAP_PIXELTYPE 0x0101
+#define ICAP_UNITS 0x0102 /* default is TWUN_INCHES */
+#define ICAP_XFERMECH 0x0103
+
+/* all data sources MAY support these caps */
+#define CAP_AUTHOR 0x1000
+#define CAP_CAPTION 0x1001
+#define CAP_FEEDERENABLED 0x1002
+#define CAP_FEEDERLOADED 0x1003
+#define CAP_TIMEDATE 0x1004
+#define CAP_SUPPORTEDCAPS 0x1005
+#define CAP_EXTENDEDCAPS 0x1006
+#define CAP_AUTOFEED 0x1007
+#define CAP_CLEARPAGE 0x1008
+#define CAP_FEEDPAGE 0x1009
+#define CAP_REWINDPAGE 0x100a
+#define CAP_INDICATORS 0x100b /* Added 1.1 */
+#define CAP_SUPPORTEDCAPSEXT 0x100c /* Added 1.6 */
+#define CAP_PAPERDETECTABLE 0x100d /* Added 1.6 */
+#define CAP_UICONTROLLABLE 0x100e /* Added 1.6 */
+#define CAP_DEVICEONLINE 0x100f /* Added 1.6 */
+#define CAP_AUTOSCAN 0x1010 /* Added 1.6 */
+#define CAP_THUMBNAILSENABLED 0x1011 /* Added 1.7 */
+#define CAP_DUPLEX 0x1012 /* Added 1.7 */
+#define CAP_DUPLEXENABLED 0x1013 /* Added 1.7 */
+#define CAP_ENABLEDSUIONLY 0x1014 /* Added 1.7 */
+#define CAP_CUSTOMDSDATA 0x1015 /* Added 1.7 */
+#define CAP_ENDORSER 0x1016 /* Added 1.7 */
+#define CAP_JOBCONTROL 0x1017 /* Added 1.7 */
+#define CAP_ALARMS 0x1018 /* Added 1.8 */
+#define CAP_ALARMVOLUME 0x1019 /* Added 1.8 */
+#define CAP_AUTOMATICCAPTURE 0x101a /* Added 1.8 */
+#define CAP_TIMEBEFOREFIRSTCAPTURE 0x101b /* Added 1.8 */
+#define CAP_TIMEBETWEENCAPTURES 0x101c /* Added 1.8 */
+#define CAP_CLEARBUFFERS 0x101d /* Added 1.8 */
+#define CAP_MAXBATCHBUFFERS 0x101e /* Added 1.8 */
+#define CAP_DEVICETIMEDATE 0x101f /* Added 1.8 */
+#define CAP_POWERSUPPLY 0x1020 /* Added 1.8 */
+#define CAP_CAMERAPREVIEWUI 0x1021 /* Added 1.8 */
+#define CAP_DEVICEEVENT 0x1022 /* Added 1.8 */
+#define CAP_PAGEMULTIPLEACQUIRE 0x1023 /* Added 1.8 */
+#define CAP_SERIALNUMBER 0x1024 /* Added 1.8 */
+#define CAP_FILESYSTEM 0x1025 /* Added 1.8 */
+#define CAP_PRINTER 0x1026 /* Added 1.8 */
+#define CAP_PRINTERENABLED 0x1027 /* Added 1.8 */
+#define CAP_PRINTERINDEX 0x1028 /* Added 1.8 */
+#define CAP_PRINTERMODE 0x1029 /* Added 1.8 */
+#define CAP_PRINTERSTRING 0x102a /* Added 1.8 */
+#define CAP_PRINTERSUFFIX 0x102b /* Added 1.8 */
+#define CAP_LANGUAGE 0x102c /* Added 1.8 */
+#define CAP_FEEDERALIGNMENT 0x102d /* Added 1.8 */
+#define CAP_FEEDERORDER 0x102e /* Added 1.8 */
+#define CAP_PAPERBINDING 0x102f /* Added 1.8 */
+#define CAP_REACQUIREALLOWED 0x1030 /* Added 1.8 */
+#define CAP_PASSTHRU 0x1031 /* Added 1.8 */
+#define CAP_BATTERYMINUTES 0x1032 /* Added 1.8 */
+#define CAP_BATTERYPERCENTAGE 0x1033 /* Added 1.8 */
+#define CAP_POWERDOWNTIME 0x1034 /* Added 1.8 */
+
+/* image data sources MAY support these caps */
+#define ICAP_AUTOBRIGHT 0x1100
+#define ICAP_BRIGHTNESS 0x1101
+#define ICAP_CONTRAST 0x1103
+#define ICAP_CUSTHALFTONE 0x1104
+#define ICAP_EXPOSURETIME 0x1105
+#define ICAP_FILTER 0x1106
+#define ICAP_FLASHUSED 0x1107
+#define ICAP_GAMMA 0x1108
+#define ICAP_HALFTONES 0x1109
+#define ICAP_HIGHLIGHT 0x110a
+#define ICAP_IMAGEFILEFORMAT 0x110c
+#define ICAP_LAMPSTATE 0x110d
+#define ICAP_LIGHTSOURCE 0x110e
+#define ICAP_ORIENTATION 0x1110
+#define ICAP_PHYSICALWIDTH 0x1111
+#define ICAP_PHYSICALHEIGHT 0x1112
+#define ICAP_SHADOW 0x1113
+#define ICAP_FRAMES 0x1114
+#define ICAP_XNATIVERESOLUTION 0x1116
+#define ICAP_YNATIVERESOLUTION 0x1117
+#define ICAP_XRESOLUTION 0x1118
+#define ICAP_YRESOLUTION 0x1119
+#define ICAP_MAXFRAMES 0x111a
+#define ICAP_TILES 0x111b
+#define ICAP_BITORDER 0x111c
+#define ICAP_CCITTKFACTOR 0x111d
+#define ICAP_LIGHTPATH 0x111e
+#define ICAP_PIXELFLAVOR 0x111f
+#define ICAP_PLANARCHUNKY 0x1120
+#define ICAP_ROTATION 0x1121
+#define ICAP_SUPPORTEDSIZES 0x1122
+#define ICAP_THRESHOLD 0x1123
+#define ICAP_XSCALING 0x1124
+#define ICAP_YSCALING 0x1125
+#define ICAP_BITORDERCODES 0x1126
+#define ICAP_PIXELFLAVORCODES 0x1127
+#define ICAP_JPEGPIXELTYPE 0x1128
+#define ICAP_TIMEFILL 0x112a
+#define ICAP_BITDEPTH 0x112b
+#define ICAP_BITDEPTHREDUCTION 0x112c /* Added 1.5 */
+#define ICAP_UNDEFINEDIMAGESIZE 0x112d /* Added 1.6 */
+#define ICAP_IMAGEDATASET 0x112e /* Added 1.7 */
+#define ICAP_EXTIMAGEINFO 0x112f /* Added 1.7 */
+#define ICAP_MINIMUMHEIGHT 0x1130 /* Added 1.7 */
+#define ICAP_MINIMUMWIDTH 0x1131 /* Added 1.7 */
+#define ICAP_AUTODISCARDBLANKPAGES 0x1134 /* Added 1.8 */
+#define ICAP_FLIPROTATION 0x1136 /* Added 1.8 */
+#define ICAP_BARCODEDETECTIONENABLED 0x1137 /* Added 1.8 */
+#define ICAP_SUPPORTEDBARCODETYPES 0x1138 /* Added 1.8 */
+#define ICAP_BARCODEMAXSEARCHPRIORITIES 0x1139 /* Added 1.8 */
+#define ICAP_BARCODESEARCHPRIORITIES 0x113a /* Added 1.8 */
+#define ICAP_BARCODESEARCHMODE 0x113b /* Added 1.8 */
+#define ICAP_BARCODEMAXRETRIES 0x113c /* Added 1.8 */
+#define ICAP_BARCODETIMEOUT 0x113d /* Added 1.8 */
+#define ICAP_ZOOMFACTOR 0x113e /* Added 1.8 */
+#define ICAP_PATCHCODEDETECTIONENABLED 0x113f /* Added 1.8 */
+#define ICAP_SUPPORTEDPATCHCODETYPES 0x1140 /* Added 1.8 */
+#define ICAP_PATCHCODEMAXSEARCHPRIORITIES 0x1141 /* Added 1.8 */
+#define ICAP_PATCHCODESEARCHPRIORITIES 0x1142 /* Added 1.8 */
+#define ICAP_PATCHCODESEARCHMODE 0x1143 /* Added 1.8 */
+#define ICAP_PATCHCODEMAXRETRIES 0x1144 /* Added 1.8 */
+#define ICAP_PATCHCODETIMEOUT 0x1145 /* Added 1.8 */
+#define ICAP_FLASHUSED2 0x1146 /* Added 1.8 */
+#define ICAP_IMAGEFILTER 0x1147 /* Added 1.8 */
+#define ICAP_NOISEFILTER 0x1148 /* Added 1.8 */
+#define ICAP_OVERSCAN 0x1149 /* Added 1.8 */
+#define ICAP_AUTOMATICBORDERDETECTION 0x1150 /* Added 1.8 */
+#define ICAP_AUTOMATICDESKEW 0x1151 /* Added 1.8 */
+#define ICAP_AUTOMATICROTATE 0x1152 /* Added 1.8 */
+
+/* image data sources MAY support these audio caps */
+#define ACAP_AUDIOFILEFORMAT 0x1201 /* Added 1.8 */
+#define ACAP_XFERMECH 0x1202 /* Added 1.8 */
+
+/* ----------------------------------------------------------------------- *\
+
+ Version 1.7: Following is Extended Image Info Attributes.
+ July 1997
+ KHL
+
+\* ----------------------------------------------------------------------- */
+
+#define TWEI_BARCODEX 0x1200
+#define TWEI_BARCODEY 0x1201
+#define TWEI_BARCODETEXT 0x1202
+#define TWEI_BARCODETYPE 0x1203
+#define TWEI_DESHADETOP 0x1204
+#define TWEI_DESHADELEFT 0x1205
+#define TWEI_DESHADEHEIGHT 0x1206
+#define TWEI_DESHADEWIDTH 0x1207
+#define TWEI_DESHADESIZE 0x1208
+#define TWEI_SPECKLESREMOVED 0x1209
+#define TWEI_HORZLINEXCOORD 0x120A
+#define TWEI_HORZLINEYCOORD 0x120B
+#define TWEI_HORZLINELENGTH 0x120C
+#define TWEI_HORZLINETHICKNESS 0x120D
+#define TWEI_VERTLINEXCOORD 0x120E
+#define TWEI_VERTLINEYCOORD 0x120F
+#define TWEI_VERTLINELENGTH 0x1210
+#define TWEI_VERTLINETHICKNESS 0x1211
+#define TWEI_PATCHCODE 0x1212
+#define TWEI_ENDORSEDTEXT 0x1213
+#define TWEI_FORMCONFIDENCE 0x1214
+#define TWEI_FORMTEMPLATEMATCH 0x1215
+#define TWEI_FORMTEMPLATEPAGEMATCH 0x1216
+#define TWEI_FORMHORZDOCOFFSET 0x1217
+#define TWEI_FORMVERTDOCOFFSET 0x1218
+#define TWEI_BARCODECOUNT 0x1219
+#define TWEI_BARCODECONFIDENCE 0x121A
+#define TWEI_BARCODEROTATION 0x121B
+#define TWEI_BARCODETEXTLENGTH 0x121C
+#define TWEI_DESHADECOUNT 0x121D
+#define TWEI_DESHADEBLACKCOUNTOLD 0x121E
+#define TWEI_DESHADEBLACKCOUNTNEW 0x121F
+#define TWEI_DESHADEBLACKRLMIN 0x1220
+#define TWEI_DESHADEBLACKRLMAX 0x1221
+#define TWEI_DESHADEWHITECOUNTOLD 0x1222
+#define TWEI_DESHADEWHITECOUNTNEW 0x1223
+#define TWEI_DESHADEWHITERLMIN 0x1224
+#define TWEI_DESHADEWHITERLAVE 0x1225
+#define TWEI_DESHADEWHITERLMAX 0x1226
+#define TWEI_BLACKSPECKLESREMOVED 0x1227
+#define TWEI_WHITESPECKLESREMOVED 0x1228
+#define TWEI_HORZLINECOUNT 0x1229
+#define TWEI_VERTLINECOUNT 0x122A
+#define TWEI_DESKEWSTATUS 0x122B
+#define TWEI_SKEWORIGINALANGLE 0x122C
+#define TWEI_SKEWFINALANGLE 0x122D
+#define TWEI_SKEWCONFIDENCE 0x122E
+#define TWEI_SKEWWINDOWX1 0x122F
+#define TWEI_SKEWWINDOWY1 0x1230
+#define TWEI_SKEWWINDOWX2 0x1231
+#define TWEI_SKEWWINDOWY2 0x1232
+#define TWEI_SKEWWINDOWX3 0x1233
+#define TWEI_SKEWWINDOWY3 0x1234
+#define TWEI_SKEWWINDOWX4 0x1235
+#define TWEI_SKEWWINDOWY4 0x1236
+
+#define TWEJ_NONE 0x0000
+#define TWEJ_MIDSEPARATOR 0x0001
+#define TWEJ_PATCH1 0x0002
+#define TWEJ_PATCH2 0x0003
+#define TWEJ_PATCH3 0x0004
+#define TWEJ_PATCH4 0x0005
+#define TWEJ_PATCH6 0x0006
+#define TWEJ_PATCHT 0x0007
+
+/***************************************************************************
+ * Return Codes and Condition Codes section *
+ ***************************************************************************/
+
+/* Return Codes: DSM_Entry and DS_Entry may return any one of these values. */
+#define TWRC_CUSTOMBASE 0x8000
+
+#define TWRC_SUCCESS 0
+#define TWRC_FAILURE 1 /* Application may get TW_STATUS for info on failure */
+#define TWRC_CHECKSTATUS 2 /* "tried hard"; get status */
+#define TWRC_CANCEL 3
+#define TWRC_DSEVENT 4
+#define TWRC_NOTDSEVENT 5
+#define TWRC_XFERDONE 6
+#define TWRC_ENDOFLIST 7 /* After MSG_GETNEXT if nothing left */
+#define TWRC_INFONOTSUPPORTED 8
+#define TWRC_DATANOTAVAILABLE 9
+
+/* Condition Codes: Application gets these by doing DG_CONTROL DAT_STATUS MSG_GET. */
+#define TWCC_CUSTOMBASE 0x8000
+
+#define TWCC_SUCCESS 0 /* It worked! */
+#define TWCC_BUMMER 1 /* Failure due to unknown causes */
+#define TWCC_LOWMEMORY 2 /* Not enough memory to perform operation */
+#define TWCC_NODS 3 /* No Data Source */
+#define TWCC_MAXCONNECTIONS 4 /* DS is connected to max possible applications */
+#define TWCC_OPERATIONERROR 5 /* DS or DSM reported error, application shouldn't */
+#define TWCC_BADCAP 6 /* Unknown capability */
+#define TWCC_BADPROTOCOL 9 /* Unrecognized MSG DG DAT combination */
+#define TWCC_BADVALUE 10 /* Data parameter out of range */
+#define TWCC_SEQERROR 11 /* DG DAT MSG out of expected sequence */
+#define TWCC_BADDEST 12 /* Unknown destination Application/Source in DSM_Entry */
+#define TWCC_CAPUNSUPPORTED 13 /* Capability not supported by source */
+#define TWCC_CAPBADOPERATION 14 /* Operation not supported by capability */
+#define TWCC_CAPSEQERROR 15 /* Capability has dependency on other capability */
+/* Added 1.8 */
+#define TWCC_DENIED 16 /* File System operation is denied (file is protected) */
+#define TWCC_FILEEXISTS 17 /* Operation failed because file already exists. */
+#define TWCC_FILENOTFOUND 18 /* File not found */
+#define TWCC_NOTEMPTY 19 /* Operation failed because directory is not empty */
+#define TWCC_PAPERJAM 20 /* The feeder is jammed */
+#define TWCC_PAPERDOUBLEFEED 21 /* The feeder detected multiple pages */
+#define TWCC_FILEWRITEERROR 22 /* Error writing the file (meant for things like disk full conditions) */
+#define TWCC_CHECKDEVICEONLINE 23 /* The device went offline prior to or during this operation */
+
+
+/* bit patterns: for query the operation that are supported by the data source on a capability */
+/* Application gets these through DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT */
+/* Added 1.6 */
+#define TWQC_GET 0x0001
+#define TWQC_SET 0x0002
+#define TWQC_GETDEFAULT 0x0004
+#define TWQC_GETCURRENT 0x0008
+#define TWQC_RESET 0x0010
+
+
+/****************************************************************************
+ * Entry Points *
+ ****************************************************************************/
+
+/**********************************************************************
+ * Function: DSM_Entry, the only entry point into the Data Source Manager.
+ *
+ * Parameters:
+ * pOrigin Identifies the source module of the message. This could
+ * identify an Application, a Source, or the Source Manager.
+ *
+ * pDest Identifies the destination module for the message.
+ * This could identify an application or a data source.
+ * If this is NULL, the message goes to the Source Manager.
+ *
+ * DG The Data Group.
+ * Example: DG_IMAGE.
+ *
+ * DAT The Data Attribute Type.
+ * Example: DAT_IMAGEMEMXFER.
+ *
+ * MSG The message. Messages are interpreted by the destination module
+ * with respect to the Data Group and the Data Attribute Type.
+ * Example: MSG_GET.
+ *
+ * pData A pointer to the data structure or variable identified
+ * by the Data Attribute Type.
+ * Example: (TW_MEMREF)&ImageMemXfer
+ * where ImageMemXfer is a TW_IMAGEMEMXFER structure.
+ *
+ * Returns:
+ * ReturnCode
+ * Example: TWRC_SUCCESS.
+ *
+ ********************************************************************/
+
+/* Don't mangle the name "DSM_Entry" if we're compiling in C++! */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef _MSWIN_
+TW_UINT16 FAR PASCAL DSM_Entry( pTW_IDENTITY pOrigin,
+ pTW_IDENTITY pDest,
+ TW_UINT32 DG,
+ TW_UINT16 DAT,
+ TW_UINT16 MSG,
+ TW_MEMREF pData);
+
+typedef TW_UINT16 (FAR PASCAL *DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY,
+ TW_UINT32, TW_UINT16,
+ TW_UINT16, TW_MEMREF);
+#else /* _MSWIN_ */
+
+/*FAR PASCAL TW_UINT16 DSM_Entry( pTW_IDENTITY pOrigin,
+ pTW_IDENTITY pDest,
+ TW_UINT32 DG,
+ TW_UINT16 DAT,
+ TW_UINT16 MSG,
+ TW_MEMREF pData);*/
+
+typedef TW_UINT16 (*DSMENTRYPROC)(pTW_IDENTITY, pTW_IDENTITY,
+ TW_UINT32, TW_UINT16,
+ TW_UINT16, TW_MEMREF);
+#endif /* _MSWIN_ */
+
+#ifdef __cplusplus
+}
+#endif /* cplusplus */
+
+
+/**********************************************************************
+ * Function: DS_Entry, the entry point provided by a Data Source.
+ *
+ * Parameters:
+ * pOrigin Identifies the source module of the message. This could
+ * identify an application or the Data Source Manager.
+ *
+ * DG The Data Group.
+ * Example: DG_IMAGE.
+ *
+ * DAT The Data Attribute Type.
+ * Example: DAT_IMAGEMEMXFER.
+ *
+ * MSG The message. Messages are interpreted by the data source
+ * with respect to the Data Group and the Data Attribute Type.
+ * Example: MSG_GET.
+ *
+ * pData A pointer to the data structure or variable identified
+ * by the Data Attribute Type.
+ * Example: (TW_MEMREF)&ImageMemXfer
+ * where ImageMemXfer is a TW_IMAGEMEMXFER structure.
+ *
+ * Returns:
+ * ReturnCode
+ * Example: TWRC_SUCCESS.
+ *
+ * Note:
+ * The DSPROC type is only used by an application when it calls
+ * a Data Source directly, bypassing the Data Source Manager.
+ *
+ ********************************************************************/
+/* Don't mangle the name "DS_Entry" if we're compiling in C++! */
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+#ifdef _MSWIN_
+ TW_UINT16 DECLSPEC_EXPORT PASCAL DS_Entry (pTW_IDENTITY pOrigin,
+ TW_UINT32 DG,
+ TW_UINT16 DAT,
+ TW_UINT16 MSG,
+ TW_MEMREF pData);
+
+ typedef TW_UINT16 (FAR PASCAL *DSENTRYPROC) (pTW_IDENTITY pOrigin,
+ TW_UINT32 DG,
+ TW_UINT16 DAT,
+ TW_UINT16 MSG,
+ TW_MEMREF pData);
+#else /* _MSWIN_ */
+/*FAR PASCAL TW_UINT16 DS_Entry( pTW_IDENTITY pOrigin,
+ TW_UINT32 DG,
+ TW_UINT16 DAT,
+ TW_UINT16 MSG,
+ TW_MEMREF pData);*/
+
+typedef TW_UINT16 (*DSENTRYPROC)(pTW_IDENTITY,
+ TW_UINT32, TW_UINT16,
+ TW_UINT16, TW_MEMREF);
+#endif /* _MSWIN_ */
+#ifdef __cplusplus
+}
+#endif /* cplusplus */
+
+/* The Twain structures must be packed on 2 byte alignment */
+#include "poppack.h"
+
+#endif /* TWAIN */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl
new file mode 100644
index 00000000..69b14ce4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/txcoord.idl
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2013 Daniel Jeliński
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "transact.idl";
+import "objidl.idl";
+
+interface ITransactionResourceAsync;
+interface ITransactionLastResourceAsync;
+interface ITransactionResource;
+interface ITransactionEnlistmentAsync;
+interface ITransactionLastEnlistmentAsync;
+interface ITransactionExportFactory;
+interface ITransactionImportWhereabouts;
+interface ITransactionExport;
+interface ITransactionImport;
+interface ITipTransaction;
+interface ITipHelper;
+interface ITipPullSink;
+interface IDtcNetworkAccessConfig;
+interface IDtcNetworkAccessConfig2;
+
+[
+ object,
+ uuid(69e971f0-23ce-11cf-ad60-00aa00a74ccd)
+]
+interface ITransactionResourceAsync : IUnknown {
+ HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase);
+ HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW);
+ HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW);
+ HRESULT TMDown(void);
+};
+
+[
+ object,
+ uuid(c82bd532-5b30-11d3-8a91-00c04f79eb6d)
+]
+interface ITransactionLastResourceAsync : IUnknown {
+ HRESULT DelegateCommit([in]DWORD grfRM);
+ HRESULT ForgetRequest([in]XACTUOW *pNewUOW);
+};
+
+[
+ object,
+ uuid(ee5ff7b3-4572-11d0-9452-00a0c905416e)
+]
+interface ITransactionResource : IUnknown {
+ HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase);
+ HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW);
+ HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW);
+ HRESULT TMDown(void);
+};
+
+[
+ object,
+ uuid(0fb15081-af41-11ce-bd2b-204c4f4f5020)
+]
+interface ITransactionEnlistmentAsync : IUnknown {
+ HRESULT PrepareRequestDone([in]HRESULT hr,[in]IMoniker *pmk,[in]BOID *pboidReason);
+ HRESULT CommitRequestDone([in]HRESULT hr);
+ HRESULT AbortRequestDone([in]HRESULT hr);
+};
+
+[
+ object,
+ uuid(c82bd533-5b30-11d3-8a91-00c04f79eb6d)
+]
+interface ITransactionLastEnlistmentAsync : IUnknown {
+ HRESULT TransactionOutcome([in]XACTSTAT XactStat,[in]BOID *pboidReason);
+};
+
+[
+ object,
+ uuid(e1cf9b53-8745-11ce-a9ba-00aa006c3706)
+]
+interface ITransactionExportFactory : IUnknown {
+ HRESULT GetRemoteClassId([in]CLSID *pclsid);
+ HRESULT Create([in]ULONG cbWhereabouts,[in]byte *rgbWhereabouts,[out]ITransactionExport **ppExport);
+};
+
+[
+ object,
+ uuid(0141fda4-8fc0-11ce-bd18-204c4f4f5020)
+]
+interface ITransactionImportWhereabouts : IUnknown {
+ HRESULT GetWhereaboutsSize([out]ULONG *pcbWhereabouts);
+ HRESULT GetWhereabouts([in]ULONG cbWhereabouts,[out]byte *rgbWhereabouts,[out]ULONG *pcbUsed);
+};
+
+[
+ object,
+ uuid(0141fda5-8fc0-11ce-bd18-204c4f4f5020)
+]
+interface ITransactionExport : IUnknown {
+ HRESULT Export([in]IUnknown *punkTransaction,[out]ULONG *pcbTransactionCookie);
+ HRESULT GetTransactionCookie([in]IUnknown *punkTransaction,[in]ULONG cbTransactionCookie,[out]byte *rgbTransactionCookie,[out]ULONG *pcbUsed);
+};
+
+[
+ object,
+ uuid(e1cf9b5a-8745-11ce-a9ba-00aa006c3706)
+]
+interface ITransactionImport : IUnknown {
+ HRESULT Import([in]ULONG cbTransactionCookie,[in]byte *rgbTransactionCookie,[in]IID *piid,[out,iid_is(piid)]void **ppvTransaction);
+};
+[
+ object,
+ uuid(17cf72d0-bac5-11d1-b1bf-00c04fc2f3ef)
+]
+interface ITipTransaction : IUnknown {
+ HRESULT Push([in]char *i_pszRemoteTmUrl,[out]char **o_ppszRemoteTxUrl);
+ HRESULT GetTransactionUrl([out]char **o_ppszLocalTxUrl);
+};
+[
+ object,
+ uuid(17cf72d1-bac5-11d1-b1bf-00c04fc2f3ef)
+]
+interface ITipHelper : IUnknown {
+ HRESULT Pull([in]char *i_pszTxUrl,[out]ITransaction **o_ppITransaction);
+ HRESULT PullAsync([in]char *i_pszTxUrl,[in]ITipPullSink *i_pTipPullSink,[out]ITransaction **o_ppITransaction);
+ HRESULT GetLocalTmUrl([out]char **o_ppszLocalTmUrl);
+};
+[
+ object,
+ uuid(17cf72d2-bac5-11d1-b1bf-00c04fc2f3ef)
+]
+interface ITipPullSink : IUnknown {
+ HRESULT PullComplete([in]HRESULT i_hrPull);
+};
+[
+ object,
+ uuid(9797c15d-a428-4291-87b6-0995031a678d)
+]
+interface IDtcNetworkAccessConfig : IUnknown {
+ HRESULT GetAnyNetworkAccess([out]BOOL *pbAnyNetworkAccess);
+ HRESULT SetAnyNetworkAccess([in]BOOL bAnyNetworkAccess);
+ HRESULT GetNetworkAdministrationAccess([out]BOOL *pbNetworkAdministrationAccess);
+ HRESULT SetNetworkAdministrationAccess([in]BOOL bNetworkAdministrationAccess);
+ HRESULT GetNetworkTransactionAccess([out]BOOL *pbNetworkTransactionAccess);
+ HRESULT SetNetworkTransactionAccess([in]BOOL bNetworkTransactionAccess);
+ HRESULT GetNetworkClientAccess([out]BOOL *pbNetworkClientAccess);
+ HRESULT SetNetworkClientAccess([in]BOOL bNetworkClientAccess);
+ HRESULT GetNetworkTIPAccess([out]BOOL *pbNetworkTIPAccess);
+ HRESULT SetNetworkTIPAccess([in]BOOL bNetworkTIPAccess);
+ HRESULT GetXAAccess([out]BOOL *pbXAAccess);
+ HRESULT SetXAAccess([in]BOOL bXAAccess);
+ HRESULT RestartDtcService(void);
+};
+
+typedef enum AUTHENTICATION_LEVEL {
+ NO_AUTHENTICATION_REQUIRED,
+ INCOMING_AUTHENTICATION_REQUIRED,
+ MUTUAL_AUTHENTICATION_REQUIRED
+} AUTHENTICATION_LEVEL;
+
+[
+ object,
+ uuid(a7aa013b-eb7d-4f42-b41c-b2dec09ae034)
+]
+interface IDtcNetworkAccessConfig2 : IDtcNetworkAccessConfig {
+ HRESULT GetNetworkInboundAccess([out]BOOL *pbInbound);
+ HRESULT GetNetworkOutboundAccess([out]BOOL *pbOutbound);
+ HRESULT SetNetworkInboundAccess([in]BOOL bInbound);
+ HRESULT SetNetworkOutboundAccess([in]BOOL bOutbound);
+ HRESULT GetAuthenticationLevel([out]AUTHENTICATION_LEVEL *pAuthLevel);
+ HRESULT SetAuthenticationLevel([in]AUTHENTICATION_LEVEL AuthLevel);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl
new file mode 100644
index 00000000..532747ae
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/txdtc.idl
@@ -0,0 +1,524 @@
+/*
+ * Copyright (C) 2013 Daniel Jeliński
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "txcoord.idl";
+
+interface IXATransLookup;
+interface IXATransLookup2;
+interface IResourceManagerSink;
+interface IResourceManager;
+interface ILastResourceManager;
+interface IResourceManager2;
+interface IXAConfig;
+/*interface IRMHelper;
+interface IXAObtainRMInfo;*/
+interface IResourceManagerFactory;
+interface IResourceManagerFactory2;
+interface IPrepareInfo;
+interface IPrepareInfo2;
+interface IGetDispenser;
+interface ITransactionVoterBallotAsync2;
+interface ITransactionVoterNotifyAsync2;
+interface ITransactionVoterFactory2;
+interface ITransactionPhase0EnlistmentAsync;
+interface ITransactionPhase0NotifyAsync;
+interface ITransactionPhase0Factory;
+interface ITransactionTransmitter;
+interface ITransactionTransmitterFactory;
+interface ITransactionReceiver;
+interface ITransactionReceiverFactory;
+interface IDtcLuConfigure;
+interface IDtcLuRecovery;
+interface IDtcLuRecoveryFactory;
+interface IDtcLuRecoveryInitiatedByDtcTransWork;
+interface IDtcLuRecoveryInitiatedByDtcStatusWork;
+interface IDtcLuRecoveryInitiatedByDtc;
+interface IDtcLuRecoveryInitiatedByLuWork;
+interface IDtcLuRecoveryInitiatedByLu;
+interface IDtcLuRmEnlistment;
+interface IDtcLuRmEnlistmentSink;
+interface IDtcLuRmEnlistmentFactory;
+interface IDtcLuSubordinateDtc;
+interface IDtcLuSubordinateDtcSink;
+interface IDtcLuSubordinateDtcFactory;
+
+cpp_quote("#define XACTTOMSG(dwXact) (dwXact-0x00040000+0x40000000)")
+typedef enum XACT_DTC_CONSTANTS {
+ XACT_E_CONNECTION_REQUEST_DENIED = 0x8004d100,
+ XACT_E_TOOMANY_ENLISTMENTS = 0x8004d101,
+ XACT_E_DUPLICATE_GUID = 0x8004d102,
+ XACT_E_NOTSINGLEPHASE = 0x8004d103,
+ XACT_E_RECOVERYALREADYDONE = 0x8004d104,
+ XACT_E_PROTOCOL = 0x8004d105,
+ XACT_E_RM_FAILURE = 0x8004d106,
+ XACT_E_RECOVERY_FAILED = 0x8004d107,
+ XACT_E_LU_NOT_FOUND = 0x8004d108,
+ XACT_E_DUPLICATE_LU = 0x8004d109,
+ XACT_E_LU_NOT_CONNECTED = 0x8004d10a,
+ XACT_E_DUPLICATE_TRANSID = 0x8004d10b,
+ XACT_E_LU_BUSY = 0x8004d10c,
+ XACT_E_LU_NO_RECOVERY_PROCESS = 0x8004d10d,
+ XACT_E_LU_DOWN = 0x8004d10e,
+ XACT_E_LU_RECOVERING = 0x8004d10f,
+ XACT_E_LU_RECOVERY_MISMATCH = 0x8004d110,
+ XACT_E_RM_UNAVAILABLE = 0x8004d111,
+ XACT_E_LRMRECOVERYALREADYDONE = 0x8004d112,
+ XACT_E_NOLASTRESOURCEINTERFACE = 0x8004d113,
+ XACT_S_NONOTIFY = 0x4d100,
+ XACT_OK_NONOTIFY = 0x4d101,
+ dwUSER_MS_SQLSERVER = 0xffff
+} XACT_DTC_CONSTANTS;
+
+cpp_quote("#ifndef _XID_T_DEFINED")
+cpp_quote("#define _XID_T_DEFINED")
+typedef struct xid_t {
+ LONG32 formatID;
+ LONG32 gtrid_length;
+ LONG32 bqual_length;
+ char data[128 ];
+} XID;
+cpp_quote("#endif")
+/* idl doesn't like this type
+cpp_quote("#ifndef _XA_SWITCH_T_DEFINED")
+cpp_quote("#define _XA_SWITCH_T_DEFINED")
+typedef struct xa_switch_t {
+ char name[32 ];
+ LONG32 flags;
+ LONG32 version;
+ int (__cdecl *xa_open_entry)(char *__MIDL_0004,int __MIDL_0005,LONG32 __MIDL_0006);
+ int (__cdecl *xa_close_entry)(char *__MIDL_0008,int __MIDL_0009,LONG32 __MIDL_0010);
+ int (__cdecl *xa_start_entry)(XID *__MIDL_0012,int __MIDL_0013,LONG32 __MIDL_0014);
+ int (__cdecl *xa_end_entry)(XID *__MIDL_0016,int __MIDL_0017,LONG32 __MIDL_0018);
+ int (__cdecl *xa_rollback_entry)(XID *__MIDL_0020,int __MIDL_0021,LONG32 __MIDL_0022);
+ int (__cdecl *xa_prepare_entry)(XID *__MIDL_0024,int __MIDL_0025,LONG32 __MIDL_0026);
+ int (__cdecl *xa_commit_entry)(XID *__MIDL_0028,int __MIDL_0029,LONG32 __MIDL_0030);
+ int (__cdecl *xa_recover_entry)(XID *__MIDL_0032,LONG32 __MIDL_0033,int __MIDL_0034,LONG32 __MIDL_0035);
+ int (__cdecl *xa_forget_entry)(XID *__MIDL_0037,int __MIDL_0038,LONG32 __MIDL_0039);
+ int (__cdecl *xa_complete_entry)(int *__MIDL_0041,int *__MIDL_0042,int __MIDL_0043,LONG32 __MIDL_0044);
+} xa_switch_t;
+cpp_quote("#endif")
+*/
+[
+ object,
+ uuid(f3b1f131-eeda-11ce-aed4-00aa0051e2c4)
+]
+interface IXATransLookup : IUnknown {
+ HRESULT Lookup([out]ITransaction **ppTransaction);
+};
+[
+ object,
+ uuid(bf193c85-0d1a-4290-b88f-d2cb8873d1e7)
+]
+interface IXATransLookup2 : IUnknown {
+ HRESULT Lookup([in]XID *pXID,[out]ITransaction **ppTransaction);
+};
+[
+ object,
+ uuid(0d563181-defb-11ce-aed1-00aa0051e2c4)
+]
+interface IResourceManagerSink : IUnknown {
+ HRESULT TMDown(void);
+};
+[
+ object,
+ uuid(13741d21-87eb-11ce-8081-0080c758527e)
+]
+interface IResourceManager : IUnknown {
+ HRESULT Enlist([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pRes,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]ITransactionEnlistmentAsync **ppEnlist);
+ HRESULT Reenlist([in]byte *pPrepInfo,[in]ULONG cbPrepInfo,[in]DWORD lTimeout,[out]XACTSTAT *pXactStat);
+ HRESULT ReenlistmentComplete(void);
+ HRESULT GetDistributedTransactionManager([in]REFIID iid,[out,iid_is(iid)]void **ppvObject);
+};
+[
+ object,
+ uuid(4d964ad4-5b33-11d3-8a91-00c04f79eb6d)
+]
+interface ILastResourceManager : IUnknown {
+ HRESULT TransactionCommitted([in]byte *pPrepInfo,[in]ULONG cbPrepInfo);
+ HRESULT RecoveryDone(void);
+};
+[
+ object,
+ uuid(d136c69a-f749-11d1-8f47-00c04f8ee57d)
+]
+interface IResourceManager2 : IResourceManager {
+ HRESULT Enlist2([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pResAsync,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]XID *pXid,[out]ITransactionEnlistmentAsync **ppEnlist);
+ HRESULT Reenlist2([in]XID *pXid,[in]DWORD dwTimeout,[out]XACTSTAT *pXactStat);
+};
+[
+ object,
+ uuid(c8a6e3a1-9a8c-11cf-a308-00a0c905416e)
+]
+interface IXAConfig : IUnknown {
+ HRESULT Initialize([in]GUID clsidHelperDll);
+ HRESULT Terminate(void);
+};
+/* commented out because idl doesn't accept xa_switch_t type
+[
+ object,
+ uuid(E793F6D1-F53D-11cf-A60D-00A0C905416E)
+]
+interface IRMHelper : IUnknown {
+ HRESULT RMCount([in]DWORD dwcTotalNumberOfRMs);
+ HRESULT RMInfo([in]xa_switch_t *pXa_Switch,[in]BOOL fCDeclCallingConv,[in]char *pszOpenString,[in]char *pszCloseString,[in]GUID guidRMRecovery);
+};
+[
+ object,
+ uuid(E793F6D2-F53D-11cf-A60D-00A0C905416E)
+]
+interface IXAObtainRMInfo : IUnknown {
+ HRESULT ObtainRMInfo([in]IRMHelper *pIRMHelper);
+};*/
+[
+ object,
+ uuid(13741d20-87eb-11ce-8081-0080c758527e)
+]
+interface IResourceManagerFactory : IUnknown {
+ HRESULT Create([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[out]IResourceManager **ppResMgr);
+};
+[
+ object,
+ uuid(6b369c21-fbd2-11d1-8f47-00c04f8ee57d)
+]
+interface IResourceManagerFactory2 : IResourceManagerFactory {
+ HRESULT CreateEx([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[in]REFIID riidRequested,[out, iid_is(riidRequested)]void **ppvResMgr);
+};
+
+[
+ object,
+ uuid(80c7bfd0-87ee-11ce-8081-0080c758527e)
+]
+interface IPrepareInfo : IUnknown {
+ HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo);
+ HRESULT GetPrepareInfo([out]byte *pPrepInfo);
+};
+[
+ object,
+ uuid(5fab2547-9779-11d1-b886-00c04fb9618a)
+]
+interface IPrepareInfo2 : IUnknown {
+ HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo);
+ HRESULT GetPrepareInfo([in]ULONG cbPrepareInfo,[out]byte *pPrepInfo);
+};
+[
+ object,
+ uuid(c23cc370-87ef-11ce-8081-0080c758527e)
+]
+interface IGetDispenser : IUnknown {
+ HRESULT GetDispenser([in]REFIID iid,[out,iid_is(iid)]void **ppvObject);
+};
+[
+ object,
+ uuid(5433376c-414d-11d3-b206-00c04fc2f3ef)
+]
+interface ITransactionVoterBallotAsync2 : IUnknown {
+ HRESULT VoteRequestDone([in]HRESULT hr,[in]BOID *pboidReason);
+};
+[
+ object,
+ uuid(5433376b-414d-11d3-b206-00c04fc2f3ef)
+]
+interface ITransactionVoterNotifyAsync2 : ITransactionOutcomeEvents {
+ HRESULT VoteRequest(void);
+};
+[
+ object,
+ uuid(5433376a-414d-11d3-b206-00c04fc2f3ef)
+]
+interface ITransactionVoterFactory2 : IUnknown {
+ HRESULT Create([in]ITransaction *pTransaction,[in]ITransactionVoterNotifyAsync2 *pVoterNotify,[out]ITransactionVoterBallotAsync2 **ppVoterBallot);
+};
+[
+ object,
+ uuid(82dc88e1-a954-11d1-8f88-00600895e7d5)
+]
+interface ITransactionPhase0EnlistmentAsync : IUnknown {
+ HRESULT Enable(void);
+ HRESULT WaitForEnlistment(void);
+ HRESULT Phase0Done(void);
+ HRESULT Unenlist(void);
+ HRESULT GetTransaction([out]ITransaction **ppITransaction);
+};
+[
+ object,
+ uuid(ef081809-0c76-11d2-87a6-00c04f990f34)
+]
+interface ITransactionPhase0NotifyAsync : IUnknown {
+ HRESULT Phase0Request([in]BOOL fAbortingHint);
+ HRESULT EnlistCompleted([in]HRESULT status);
+};
+[
+ object,
+ uuid(82dc88e0-a954-11d1-8f88-00600895e7d5)
+]
+interface ITransactionPhase0Factory : IUnknown {
+ HRESULT Create([in]ITransactionPhase0NotifyAsync *pPhase0Notify,[out]ITransactionPhase0EnlistmentAsync **ppPhase0Enlistment);
+};
+[
+ object,
+ uuid(59313e01-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionTransmitter : IUnknown {
+ HRESULT Set([in]ITransaction *pTransaction);
+ HRESULT GetPropagationTokenSize([out]ULONG *pcbToken);
+ HRESULT MarshalPropagationToken([in]ULONG cbToken,[out]byte *rgbToken,[out]ULONG *pcbUsed);
+ HRESULT UnmarshalReturnToken([in]ULONG cbReturnToken,[in]byte *rgbReturnToken);
+ HRESULT Reset(void);
+};
+[
+ object,
+ uuid(59313e00-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionTransmitterFactory : IUnknown {
+ HRESULT Create([out]ITransactionTransmitter **ppTransmitter);
+};
+[
+ object,
+ uuid(59313e03-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionReceiver : IUnknown {
+ HRESULT UnmarshalPropagationToken([in]ULONG cbToken,[in]byte *rgbToken,[out]ITransaction **ppTransaction);
+ HRESULT GetReturnTokenSize([out]ULONG *pcbReturnToken);
+ HRESULT MarshalReturnToken([in]ULONG cbReturnToken,[out]byte *rgbReturnToken,[out]ULONG *pcbUsed);
+ HRESULT Reset(void);
+};
+[
+ object,
+ uuid(59313e02-b36c-11cf-a539-00aa006887c3)
+]
+interface ITransactionReceiverFactory : IUnknown {
+ HRESULT Create([out]ITransactionReceiver **ppReceiver);
+};
+
+typedef struct _ProxyConfigParams {
+ WORD wcThreadsMax;
+} PROXY_CONFIG_PARAMS;
+
+[
+ object,
+ uuid(4131e760-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuConfigure : IUnknown {
+ HRESULT Add([in]byte *pucLuPair,[in]DWORD cbLuPair);
+ HRESULT Delete([in]byte *pucLuPair,[in]DWORD cbLuPair);
+};
+[
+ object,
+ uuid(ac2b8ad2-d6f0-11d0-b386-00a0c9083365)
+]
+interface IDtcLuRecovery : IUnknown {
+};
+[
+ object,
+ uuid(4131e762-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryFactory : IUnknown {
+ HRESULT Create([in]byte *pucLuPair,[in]DWORD cbLuPair,[out]IDtcLuRecovery **ppRecovery);
+};
+
+typedef enum _DtcLu_LocalRecovery_Work {
+ DTCINITIATEDRECOVERYWORK_CHECKLUSTATUS = 1,
+ DTCINITIATEDRECOVERYWORK_TRANS,
+ DTCINITIATEDRECOVERYWORK_TMDOWN
+} DTCINITIATEDRECOVERYWORK;
+
+typedef enum _DtcLu_Xln {
+ DTCLUXLN_COLD = 1,
+ DTCLUXLN_WARM
+} DTCLUXLN;
+
+typedef enum _DtcLu_Xln_Confirmation {
+ DTCLUXLNCONFIRMATION_CONFIRM = 1,
+ DTCLUXLNCONFIRMATION_LOGNAMEMISMATCH,
+ DTCLUXLNCONFIRMATION_COLDWARMMISMATCH,
+ DTCLUXLNCONFIRMATION_OBSOLETE
+} DTCLUXLNCONFIRMATION;
+
+typedef enum _DtcLu_Xln_Response {
+ DTCLUXLNRESPONSE_OK_SENDOURXLNBACK = 1,
+ DTCLUXLNRESPONSE_OK_SENDCONFIRMATION,
+ DTCLUXLNRESPONSE_LOGNAMEMISMATCH,
+ DTCLUXLNRESPONSE_COLDWARMMISMATCH
+} DTCLUXLNRESPONSE;
+
+typedef enum _DtcLu_Xln_Error {
+ DTCLUXLNERROR_PROTOCOL = 1,
+ DTCLUXLNERROR_LOGNAMEMISMATCH,
+ DTCLUXLNERROR_COLDWARMMISMATCH
+} DTCLUXLNERROR;
+
+typedef enum _DtcLu_CompareState {
+ DTCLUCOMPARESTATE_COMMITTED = 1,
+ DTCLUCOMPARESTATE_HEURISTICCOMMITTED,
+ DTCLUCOMPARESTATE_HEURISTICMIXED,
+ DTCLUCOMPARESTATE_HEURISTICRESET,
+ DTCLUCOMPARESTATE_INDOUBT,
+ DTCLUCOMPARESTATE_RESET
+} DTCLUCOMPARESTATE;
+
+typedef enum _DtcLu_CompareStates_Confirmation {
+ DTCLUCOMPARESTATESCONFIRMATION_CONFIRM = 1,
+ DTCLUCOMPARESTATESCONFIRMATION_PROTOCOL
+} DTCLUCOMPARESTATESCONFIRMATION;
+
+typedef enum _DtcLu_CompareStates_Error {
+ DTCLUCOMPARESTATESERROR_PROTOCOL = 1
+} DTCLUCOMPARESTATESERROR;
+
+typedef enum _DtcLu_CompareStates_Response {
+ DTCLUCOMPARESTATESRESPONSE_OK = 1,
+ DTCLUCOMPARESTATESRESPONSE_PROTOCOL
+} DTCLUCOMPARESTATESRESPONSE;
+
+[
+ object,
+ uuid(4131e765-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryInitiatedByDtcTransWork : IUnknown {
+ HRESULT GetLogNameSizes([out]DWORD *pcbOurLogName,[out]DWORD *pcbRemoteLogName);
+ HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[in,out]unsigned char *pRemoteLogName,[out]DWORD *pdwProtocol);
+ HRESULT HandleConfirmationFromOurXln([in]DTCLUXLNCONFIRMATION Confirmation);
+ HRESULT HandleTheirXlnResponse([in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]DWORD dwProtocol,[out]DTCLUXLNCONFIRMATION *pConfirmation);
+ HRESULT HandleErrorFromOurXln([in]DTCLUXLNERROR Error);
+ HRESULT CheckForCompareStates([out]BOOL *fCompareStates);
+ HRESULT GetOurTransIdSize([in,out]DWORD *pcbOurTransId);
+ HRESULT GetOurCompareStates([in,out]unsigned char *pOurTransId,[out]DTCLUCOMPARESTATE *pCompareState);
+ HRESULT HandleTheirCompareStatesResponse([in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESCONFIRMATION *pConfirmation);
+ HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error);
+ HRESULT ConversationLost(void);
+ HRESULT GetRecoverySeqNum([out]LONG *plRecoverySeqNum);
+ HRESULT ObsoleteRecoverySeqNum([in]LONG lNewRecoverySeqNum);
+};
+[
+ object,
+ uuid(4131e766-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryInitiatedByDtcStatusWork : IUnknown {
+ HRESULT HandleCheckLuStatus([in]LONG lRecoverySeqNum);
+};
+[
+ object,
+ uuid(4131e764-1aea-11d0-944b-00a0c905416e)
+]
+[local] interface IDtcLuRecoveryInitiatedByDtc : IUnknown {
+ HRESULT GetWork([in,out]DTCINITIATEDRECOVERYWORK *pWork,[in,out]void **ppv);
+};
+[
+ object,
+ uuid(ac2b8ad1-d6f0-11d0-b386-00a0c9083365)
+]
+interface IDtcLuRecoveryInitiatedByLuWork : IUnknown {
+ HRESULT HandleTheirXln([in]LONG lRecoverySeqNum,[in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]unsigned char *pOurLogName,[in]DWORD cbOurLogName,[in]DWORD dwProtocol,[out]DTCLUXLNRESPONSE *pResponse);
+ HRESULT GetOurLogNameSize([in,out]DWORD *pcbOurLogName);
+ HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[out]DWORD *pdwProtocol);
+ HRESULT HandleConfirmationOfOurXln([in]DTCLUXLNCONFIRMATION Confirmation);
+ HRESULT HandleTheirCompareStates([in,out]unsigned char *pRemoteTransId,[in]DWORD cbRemoteTransId,[in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESRESPONSE *pResponse,[out]DTCLUCOMPARESTATE *pCompareState);
+ HRESULT HandleConfirmationOfOurCompareStates([in]DTCLUCOMPARESTATESCONFIRMATION Confirmation);
+ HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error);
+ HRESULT ConversationLost(void);
+};
+[
+ object,
+ uuid(4131e768-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRecoveryInitiatedByLu : IUnknown {
+ HRESULT GetObjectToHandleWorkFromLu([out]IDtcLuRecoveryInitiatedByLuWork **ppWork);
+};
+[
+ object,
+ uuid(4131e769-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRmEnlistment : IUnknown {
+ HRESULT Unplug([in]BOOL fConversationLost);
+ HRESULT BackedOut(void);
+ HRESULT BackOut(void);
+ HRESULT Committed(void);
+ HRESULT Forget(void);
+ HRESULT RequestCommit(void);
+};
+[
+ object,
+ uuid(4131e770-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRmEnlistmentSink : IUnknown {
+ HRESULT AckUnplug(void);
+ HRESULT TmDown(void);
+ HRESULT SessionLost(void);
+ HRESULT BackedOut(void);
+ HRESULT BackOut(void);
+ HRESULT Committed(void);
+ HRESULT Forget(void);
+ HRESULT Prepare(void);
+ HRESULT RequestCommit(void);
+};
+[
+ object,
+ uuid(4131e771-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuRmEnlistmentFactory : IUnknown {
+ HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]ITransaction *pITransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuRmEnlistmentSink *pRmEnlistmentSink,[in,out]IDtcLuRmEnlistment **ppRmEnlistment);
+};
+[
+ object,
+ uuid(4131e773-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuSubordinateDtc : IUnknown {
+ HRESULT Unplug([in]BOOL fConversationLost);
+ HRESULT BackedOut(void);
+ HRESULT BackOut(void);
+ HRESULT Committed(void);
+ HRESULT Forget(void);
+ HRESULT Prepare(void);
+ HRESULT RequestCommit(void);
+};
+[
+ object,
+ uuid(4131e774-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuSubordinateDtcSink : IUnknown {
+ HRESULT AckUnplug(void);
+ HRESULT TmDown(void);
+ HRESULT SessionLost(void);
+ HRESULT BackedOut(void);
+ HRESULT BackOut(void);
+ HRESULT Committed(void);
+ HRESULT Forget(void);
+ HRESULT RequestCommit(void);
+};
+[
+ object,
+ uuid(4131e775-1aea-11d0-944b-00a0c905416e)
+]
+interface IDtcLuSubordinateDtcFactory : IUnknown {
+ HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]IUnknown *punkTransactionOuter,[in]ISOLEVEL isoLevel,[in]ULONG isoFlags,[in]ITransactionOptions *pOptions,[out]ITransaction **ppTransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuSubordinateDtcSink *pSubordinateDtcSink,[in,out]IDtcLuSubordinateDtc **ppSubordinateDtc);
+};
+
+/* these GUIDs were found in mingw header, but without corresponding interface definitions
+ DEFINE_GUID(IID_IXAResourceManager,0x4131e751,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);
+ DEFINE_GUID(IID_IXAResourceManagerFactory,0x4131e750,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);
+ DEFINE_GUID(IID_IXATransaction,0x4131e752,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e);
+*/
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h
new file mode 100644
index 00000000..a0a1cde7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/udpmib.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2003 Juan Lang
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_UDPMIB_H
+#define __WINE_UDPMIB_H
+
+#define TCPIP_OWNING_MODULE_SIZE 16
+
+
+/* UDP table */
+
+typedef struct _MIB_UDPROW
+{
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+} MIB_UDPROW, *PMIB_UDPROW;
+
+typedef struct _MIB_UDPTABLE
+{
+ DWORD dwNumEntries;
+ MIB_UDPROW table[1];
+} MIB_UDPTABLE, *PMIB_UDPTABLE;
+
+typedef struct _MIB_UDPROW_OWNER_PID
+{
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwOwningPid;
+} MIB_UDPROW_OWNER_PID, *PMIB_UDPROW_OWNER_PID;
+
+typedef struct _MIB_UDPTABLE_OWNER_PID
+{
+ DWORD dwNumEntries;
+ MIB_UDPROW_OWNER_PID table[1];
+} MIB_UDPTABLE_OWNER_PID, *PMIB_UDPTABLE_OWNER_PID;
+
+typedef struct _MIB_UDPROW_OWNER_MODULE
+{
+ DWORD dwLocalAddr;
+ DWORD dwLocalPort;
+ DWORD dwOwningPid;
+ LARGE_INTEGER liCreateTimestamp;
+ __C89_NAMELESS union
+ {
+ __C89_NAMELESS struct
+ {
+ int SpecificPortBind:1;
+ } __C89_NAMELESSSTRUCTNAME;
+ int dwFlags;
+ } __C89_NAMELESSUNIONNAME;
+ ULONGLONG OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
+} MIB_UDPROW_OWNER_MODULE, *PMIB_UDPROW_OWNER_MODULE;
+
+typedef struct _MIB_UDPTABLE_OWNER_MODULE
+{
+ DWORD dwNumEntries;
+ MIB_UDPROW_OWNER_MODULE table[1];
+} MIB_UDPTABLE_OWNER_MODULE, *PMIB_UDPTABLE_OWNER_MODULE;
+
+/* UDP statistics */
+
+typedef struct _MIB_UDPSTATS
+{
+ DWORD dwInDatagrams;
+ DWORD dwNoPorts;
+ DWORD dwInErrors;
+ DWORD dwOutDatagrams;
+ DWORD dwNumAddrs;
+} MIB_UDPSTATS, *PMIB_UDPSTATS;
+
+#endif /* __WINE_UDPMIB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h
new file mode 100644
index 00000000..aac9f07b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomation.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <uiautomationcore.h>
+#include <uiautomationclient.h>
+#include <uiautomationcoreapi.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl
new file mode 100644
index 00000000..8d91ac74
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationclient.idl
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define DO_NO_IMPORTS
+import "uiautomationcore.idl";
+
+[
+ uuid(944de083-8fb8-45cf-bcb7-c477acb2f897),
+ lcid(0),
+ version(1.0)
+]
+library UIAutomationClient {
+ importlib ("stdole2.tlb");
+
+ /* FIXME: Uncomment when properly supported in widl
+ [dllname("<no entry points>")]
+ module UIA_PropertyIds
+ {
+ */
+ const long UIA_RuntimeIdPropertyId = 30000;
+ const long UIA_BoundingRectanglePropertyId = 30001;
+ const long UIA_ProcessIdPropertyId = 30002;
+ const long UIA_ControlTypePropertyId = 30003;
+ const long UIA_LocalizedControlTypePropertyId = 30004;
+ const long UIA_NamePropertyId = 30005;
+ const long UIA_AcceleratorKeyPropertyId = 30006;
+ const long UIA_AccessKeyPropertyId = 30007;
+ const long UIA_HasKeyboardFocusPropertyId = 30008;
+ const long UIA_IsKeyboardFocusablePropertyId = 30009;
+ const long UIA_IsEnabledPropertyId = 30010;
+ const long UIA_AutomationIdPropertyId = 30011;
+ const long UIA_ClassNamePropertyId = 30012;
+ const long UIA_HelpTextPropertyId = 30013;
+ const long UIA_ClickablePointPropertyId = 30014;
+ const long UIA_CulturePropertyId = 30015;
+ const long UIA_IsControlElementPropertyId = 30016;
+ const long UIA_IsContentElementPropertyId = 30017;
+ const long UIA_LabeledByPropertyId = 30018;
+ const long UIA_IsPasswordPropertyId = 30019;
+ const long UIA_NativeWindowHandlePropertyId = 30020;
+ const long UIA_ItemTypePropertyId = 30021;
+ const long UIA_IsOffscreenPropertyId = 30022;
+ const long UIA_OrientationPropertyId = 30023;
+ const long UIA_FrameworkIdPropertyId = 30024;
+ const long UIA_IsRequiredForFormPropertyId = 30025;
+ const long UIA_ItemStatusPropertyId = 30026;
+ const long UIA_IsDockPatternAvailablePropertyId = 30027;
+ const long UIA_IsExpandCollapsePatternAvailablePropertyId = 30028;
+ const long UIA_IsGridItemPatternAvailablePropertyId = 30029;
+ const long UIA_IsGridPatternAvailablePropertyId = 30030;
+ const long UIA_IsInvokePatternAvailablePropertyId = 30031;
+ const long UIA_IsMultipleViewPatternAvailablePropertyId = 30032;
+ const long UIA_IsRangeValuePatternAvailablePropertyId = 30033;
+ const long UIA_IsScrollPatternAvailablePropertyId = 30034;
+ const long UIA_IsScrollItemPatternAvailablePropertyId = 30035;
+ const long UIA_IsSelectionItemPatternAvailablePropertyId = 30036;
+ const long UIA_IsSelectionPatternAvailablePropertyId = 30037;
+ const long UIA_IsTablePatternAvailablePropertyId = 30038;
+ const long UIA_IsTableItemPatternAvailablePropertyId = 30039;
+ const long UIA_IsTextPatternAvailablePropertyId = 30040;
+ const long UIA_IsTogglePatternAvailablePropertyId = 30041;
+ const long UIA_IsTransformPatternAvailablePropertyId = 30042;
+ const long UIA_IsValuePatternAvailablePropertyId = 30043;
+ const long UIA_IsWindowPatternAvailablePropertyId = 30044;
+ const long UIA_ValueValuePropertyId = 30045;
+ const long UIA_ValueIsReadOnlyPropertyId = 30046;
+ const long UIA_RangeValueValuePropertyId = 30047;
+ const long UIA_RangeValueIsReadOnlyPropertyId = 30048;
+ const long UIA_RangeValueMinimumPropertyId = 30049;
+ const long UIA_RangeValueMaximumPropertyId = 30050;
+ const long UIA_RangeValueLargeChangePropertyId = 30051;
+ const long UIA_RangeValueSmallChangePropertyId = 30052;
+ const long UIA_ScrollHorizontalScrollPercentPropertyId = 30053;
+ const long UIA_ScrollHorizontalViewSizePropertyId = 30054;
+ const long UIA_ScrollVerticalScrollPercentPropertyId = 30055;
+ const long UIA_ScrollVerticalViewSizePropertyId = 30056;
+ const long UIA_ScrollHorizontallyScrollablePropertyId = 30057;
+ const long UIA_ScrollVerticallyScrollablePropertyId = 30058;
+ const long UIA_SelectionSelectionPropertyId = 30059;
+ const long UIA_SelectionCanSelectMultiplePropertyId = 30060;
+ const long UIA_SelectionIsSelectionRequiredPropertyId = 30061;
+ const long UIA_GridRowCountPropertyId = 30062;
+ const long UIA_GridColumnCountPropertyId = 30063;
+ const long UIA_GridItemRowPropertyId = 30064;
+ const long UIA_GridItemColumnPropertyId = 30065;
+ const long UIA_GridItemRowSpanPropertyId = 30066;
+ const long UIA_GridItemColumnSpanPropertyId = 30067;
+ const long UIA_GridItemContainingGridPropertyId = 30068;
+ const long UIA_DockDockPositionPropertyId = 30069;
+ const long UIA_ExpandCollapseExpandCollapseStatePropertyId = 30070;
+ const long UIA_MultipleViewCurrentViewPropertyId = 30071;
+ const long UIA_MultipleViewSupportedViewsPropertyId = 30072;
+ const long UIA_WindowCanMaximizePropertyId = 30073;
+ const long UIA_WindowCanMinimizePropertyId = 30074;
+ const long UIA_WindowWindowVisualStatePropertyId = 30075;
+ const long UIA_WindowWindowInteractionStatePropertyId = 30076;
+ const long UIA_WindowIsModalPropertyId = 30077;
+ const long UIA_WindowIsTopmostPropertyId = 30078;
+ const long UIA_SelectionItemIsSelectedPropertyId = 30079;
+ const long UIA_SelectionItemSelectionContainerPropertyId = 30080;
+ const long UIA_TableRowHeadersPropertyId = 30081;
+ const long UIA_TableColumnHeadersPropertyId = 30082;
+ const long UIA_TableRowOrColumnMajorPropertyId = 30083;
+ const long UIA_TableItemRowHeaderItemsPropertyId = 30084;
+ const long UIA_TableItemColumnHeaderItemsPropertyId = 30085;
+ const long UIA_ToggleToggleStatePropertyId = 30086;
+ const long UIA_TransformCanMovePropertyId = 30087;
+ const long UIA_TransformCanResizePropertyId = 30088;
+ const long UIA_TransformCanRotatePropertyId = 30089;
+ const long UIA_IsLegacyIAccessiblePatternAvailablePropertyId = 30090;
+ const long UIA_LegacyIAccessibleChildIdPropertyId = 30091;
+ const long UIA_LegacyIAccessibleNamePropertyId = 30092;
+ const long UIA_LegacyIAccessibleValuePropertyId = 30093;
+ const long UIA_LegacyIAccessibleDescriptionPropertyId = 30094;
+ const long UIA_LegacyIAccessibleRolePropertyId = 30095;
+ const long UIA_LegacyIAccessibleStatePropertyId = 30096;
+ const long UIA_LegacyIAccessibleHelpPropertyId = 30097;
+ const long UIA_LegacyIAccessibleKeyboardShortcutPropertyId = 30098;
+ const long UIA_LegacyIAccessibleSelectionPropertyId = 30099;
+ const long UIA_LegacyIAccessibleDefaultActionPropertyId = 30100;
+ const long UIA_AriaRolePropertyId = 30101;
+ const long UIA_AriaPropertiesPropertyId = 30102;
+ const long UIA_IsDataValidForFormPropertyId = 30103;
+ const long UIA_ControllerForPropertyId = 30104;
+ const long UIA_DescribedByPropertyId = 30105;
+ const long UIA_FlowsToPropertyId = 30106;
+ const long UIA_ProviderDescriptionPropertyId = 30107;
+ const long UIA_IsItemContainerPatternAvailablePropertyId = 30108;
+ const long UIA_IsVirtualizedItemPatternAvailablePropertyId = 30109;
+ const long UIA_IsSynchronizedInputPatternAvailablePropertyId = 30110;
+ /*
+ }
+ */
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl
new file mode 100644
index 00000000..4c2a9ab4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcore.idl
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define DO_NO_IMPORTS
+import "oaidl.idl";
+import "oleacc.idl";
+
+enum ProviderOptions {
+ ProviderOptions_ClientSideProvider = 0x0001,
+ ProviderOptions_ServerSideProvider = 0x0002,
+ ProviderOptions_NonClientAreaProvider = 0x0004,
+ ProviderOptions_OverrideProvider = 0x0008,
+ ProviderOptions_ProviderOwnsSetFocus = 0x0010,
+ ProviderOptions_UseComThreading = 0x0020
+};
+
+typedef int PROPERTYID;
+typedef int PATTERNID;
+typedef int EVENTID;
+typedef int TEXTATTRIBUTEID;
+typedef int CONTROLTYPEID;
+
+[
+ version(1.0),
+ uuid(930299ce-9965-4dec-b0f4-a54848d4b667),
+ lcid(0),
+ hidden
+]
+library UIA
+{
+ importlib("stdole2.tlb");
+
+ [
+ object,
+ uuid(d6dd68d1-86fd-4332-8666-9abedea2d24c),
+ pointer_default(unique)
+ ]
+ interface IRawElementProviderSimple : IUnknown
+ {
+ [propget] HRESULT ProviderOptions([out, retval] enum ProviderOptions *pRetVal);
+
+ HRESULT GetPatternProvider(
+ [in] PATTERNID patternId,
+ [out, retval] IUnknown **pRetVal);
+
+ HRESULT GetPropertyValue(
+ [in] PROPERTYID propertyId,
+ [out, retval] VARIANT *pRetVal);
+
+ [propget] HRESULT HostRawElementProvider([out, retval] IRawElementProviderSimple **pRetVal);
+ }
+
+ [
+ object,
+ uuid(f8b80ada-2c44-48d0-89be-5ff23c9cd875),
+ pointer_default(unique),
+ oleautomation
+ ]
+ interface IAccessibleEx : IUnknown
+ {
+ HRESULT GetObjectForChild(
+ [in] long idChild,
+ [out, retval] IAccessibleEx **pRetVal);
+
+ HRESULT GetIAccessiblePair(
+ [out] IAccessible **ppAcc,
+ [out] long *pidChild);
+
+ HRESULT GetRuntimeId(
+ [out, retval] SAFEARRAY(int) *pRetVal);
+
+ HRESULT ConvertReturnedElement(
+ [in] IRawElementProviderSimple *pIn,
+ [out] IAccessibleEx **ppRetValOut);
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h
new file mode 100644
index 00000000..0adc206a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uiautomationcoreapi.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_UIAUTOMATIONCOREAPI
+#define _INC_UIAUTOMATIONCOREAPI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define UIA_E_ELEMENTNOTENABLED 0x80040200
+#define UIA_E_ELEMENTNOTAVAILABLE 0x80040201
+#define UIA_E_NOCLICKABLEPOINT 0x80040202
+#define UIA_E_PROXYASSEMBLYNOTLOADED 0x80040203
+#define UIA_E_NOTSUPPORTED 0x80040204
+#define UIA_E_INVALIDOPERATION 0x80131509
+#define UIA_E_TIMEOUT 0x80131505
+
+#define UiaAppendRuntimeId 3
+#define UiaRootObjectId -25
+
+DECLARE_HANDLE(HUIANODE);
+DECLARE_HANDLE(HUIAPATTERNOBJECT);
+DECLARE_HANDLE(HUIATEXTRANGE);
+DECLARE_HANDLE(HUIAEVENT);
+
+BOOL WINAPI UiaPatternRelease(HUIAPATTERNOBJECT hobj);
+BOOL WINAPI UiaTextRangeRelease(HUIATEXTRANGE hobj);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INC_UIAUTOMATIONCOREAPI */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h
new file mode 100644
index 00000000..7381cfee
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.h
@@ -0,0 +1,221 @@
+/*** Autogenerated by WIDL 1.1.36 from unknwn.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_UNKNWN_H
+#define __WIDL_UNKNWN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <wtypes.h>
+
+/* Forward declarations */
+
+#ifndef __IUnknown_FWD_DEFINED__
+#define __IUnknown_FWD_DEFINED__
+typedef interface IUnknown IUnknown;
+#endif
+
+#ifndef __IClassFactory_FWD_DEFINED__
+#define __IClassFactory_FWD_DEFINED__
+typedef interface IClassFactory IClassFactory;
+#endif
+
+
+/*****************************************************************************
+ * IUnknown interface
+ */
+#ifndef __IUnknown_INTERFACE_DEFINED__
+#define __IUnknown_INTERFACE_DEFINED__
+
+typedef IUnknown *LPUNKNOWN;
+DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUnknown
+{
+ BEGIN_INTERFACE
+
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+ REFIID riid,
+ void **ppvObject) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE AddRef(
+ ) = 0;
+
+ virtual ULONG STDMETHODCALLTYPE Release(
+ ) = 0;
+
+ END_INTERFACE
+};
+#else
+typedef struct IUnknownVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IUnknown* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IUnknown* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IUnknown* This);
+
+ END_INTERFACE
+} IUnknownVtbl;
+interface IUnknown {
+ CONST_VTBL IUnknownVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUnknown_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUnknown_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUnknown_Release(This) (This)->lpVtbl->Release(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(
+ IUnknown* This,
+ REFIID riid,
+ void **ppvObject);
+void __RPC_STUB IUnknown_QueryInterface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(
+ IUnknown* This);
+void __RPC_STUB IUnknown_AddRef_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(
+ IUnknown* This);
+void __RPC_STUB IUnknown_Release_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IUnknown_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IClassFactory interface
+ */
+#ifndef __IClassFactory_INTERFACE_DEFINED__
+#define __IClassFactory_INTERFACE_DEFINED__
+
+typedef IClassFactory *LPCLASSFACTORY;
+DEFINE_GUID(IID_IClassFactory, 0x00000001, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IClassFactory : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateInstance(
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ void **ppvObject) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockServer(
+ BOOL fLock) = 0;
+
+};
+#else
+typedef struct IClassFactoryVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IClassFactory* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IClassFactory* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IClassFactory* This);
+
+ /*** IClassFactory methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateInstance)(
+ IClassFactory* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ void **ppvObject);
+
+ HRESULT (STDMETHODCALLTYPE *LockServer)(
+ IClassFactory* This,
+ BOOL fLock);
+
+ END_INTERFACE
+} IClassFactoryVtbl;
+interface IClassFactory {
+ CONST_VTBL IClassFactoryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IClassFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IClassFactory_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IClassFactory_Release(This) (This)->lpVtbl->Release(This)
+/*** IClassFactory methods ***/
+#define IClassFactory_CreateInstance(This,pUnkOuter,riid,ppvObject) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObject)
+#define IClassFactory_LockServer(This,fLock) (This)->lpVtbl->LockServer(This,fLock)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IClassFactory_RemoteCreateInstance_Proxy(
+ IClassFactory* This,
+ REFIID riid,
+ IUnknown **ppvObject);
+void __RPC_STUB IClassFactory_RemoteCreateInstance_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IClassFactory_RemoteLockServer_Proxy(
+ IClassFactory* This,
+ BOOL fLock);
+void __RPC_STUB IClassFactory_RemoteLockServer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IClassFactory_CreateInstance_Proxy(
+ IClassFactory* This,
+ IUnknown *pUnkOuter,
+ REFIID riid,
+ void **ppvObject);
+HRESULT __RPC_STUB IClassFactory_CreateInstance_Stub(
+ IClassFactory* This,
+ REFIID riid,
+ IUnknown **ppvObject);
+HRESULT CALLBACK IClassFactory_LockServer_Proxy(
+ IClassFactory* This,
+ BOOL fLock);
+HRESULT __RPC_STUB IClassFactory_LockServer_Stub(
+ IClassFactory* This,
+ BOOL fLock);
+
+#endif /* __IClassFactory_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_UNKNWN_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl
new file mode 100644
index 00000000..dc0f1504
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/unknwn.idl
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2002 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef DO_NO_IMPORTS
+import "wtypes.idl";
+#endif
+
+cpp_quote("#ifdef __WINESRC__")
+cpp_quote("#define WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#endif")
+
+cpp_quote("#ifdef WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#define SAVE_WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#undef WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#endif")
+
+[
+ local,
+ object,
+ uuid(00000000-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IUnknown
+{
+ typedef [unique] IUnknown *LPUNKNOWN;
+
+ HRESULT QueryInterface(
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObject);
+ ULONG AddRef();
+ ULONG Release();
+}
+
+cpp_quote("#ifdef SAVE_WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#define WIDL_C_INLINE_WRAPPERS")
+cpp_quote("#endif")
+
+[
+ object,
+ uuid(00000001-0000-0000-C000-000000000046),
+ pointer_default(unique)
+]
+interface IClassFactory : IUnknown
+{
+ typedef [unique] IClassFactory *LPCLASSFACTORY;
+
+ [local]
+ HRESULT CreateInstance(
+ [in, unique] IUnknown *pUnkOuter,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvObject);
+
+ [call_as(CreateInstance)]
+ HRESULT RemoteCreateInstance(
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppvObject);
+
+ [local]
+ HRESULT LockServer(
+ [in] BOOL fLock);
+
+ [call_as(LockServer)]
+ HRESULT RemoteLockServer(
+ [in] BOOL fLock);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl
new file mode 100644
index 00000000..537fa47a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlhist.idl
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2006 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "oaidl.idl";
+import "docobj.idl";
+
+cpp_quote("#define STATURL_QUERYFLAG_ISCACHED 0x010000")
+cpp_quote("#define STATURL_QUERYFLAG_NOURL 0x020000")
+cpp_quote("#define STATURL_QUERYFLAG_NOTITLE 0x040000")
+cpp_quote("#define STATURL_QUERYFLAG_TOPLEVEL 0x080000")
+
+cpp_quote("#define STATURLFLAG_ISCACHED 0x0001")
+cpp_quote("#define STATURLFLAG_ISTOPLEVEL 0x0002")
+
+typedef enum _ADDURL_FLAG
+{
+ ADDURL_FIRST = 0,
+ ADDURL_ADDTOHISTORYANDCACHE = 0,
+ ADDURL_ADDTOCACHE = 1,
+ ADDURL_Max = 0x7fffffff
+} ADDURL_FLAG;
+
+/*****************************************************************************
+ * IEnumSTATURL interface
+ */
+[
+ object,
+ uuid(3c374a42-bae4-11cf-bf7d-00aa006946ee),
+ pointer_default(unique)
+]
+interface IEnumSTATURL : IUnknown
+{
+ typedef [unique] IEnumSTATURL *LPENUMSTATURL;
+
+ typedef struct _STATURL
+ {
+ DWORD cbSize;
+ LPWSTR pwcsUrl;
+ LPWSTR pwcsTitle;
+ FILETIME ftLastVisited;
+ FILETIME ftLastUpdated;
+ FILETIME ftExpires;
+ DWORD dwFlags;
+ } STATURL, *LPSTATURL;
+
+ HRESULT Next(
+ [in] ULONG celt,
+ [in, out] LPSTATURL rgelt,
+ [in, out] ULONG *pceltFetched);
+
+ HRESULT Skip([in] ULONG celt);
+ HRESULT Reset();
+ HRESULT Clone([out] IEnumSTATURL **ppenum);
+
+ HRESULT SetFilter(
+ [in] LPCOLESTR poszFilter,
+ [in] DWORD dwFlags);
+}
+
+/*****************************************************************************
+ * IUrlHistoryStg interface
+ */
+[
+ object,
+ uuid(3c374a41-bae4-11cf-bf7d-00aa006946ee),
+ pointer_default(unique)
+]
+interface IUrlHistoryStg : IUnknown
+{
+ typedef [unique] IUrlHistoryStg *LPURLHISTORYSTG;
+
+ HRESULT AddUrl(
+ [in] LPCOLESTR pocsUrl,
+ [in, unique] LPCOLESTR pocsTitle,
+ [in] DWORD dwFlags);
+
+ HRESULT DeleteUrl(
+ [in] LPCOLESTR pocsUrl,
+ [in] DWORD dwFlags);
+
+ HRESULT QueryUrl(
+ [in] LPCOLESTR pocsUrl,
+ [in] DWORD dwFlags,
+ [in, out, unique] LPSTATURL lpSTATURL);
+
+ HRESULT BindToObject(
+ [in] LPCOLESTR pocsUrl,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppvOut);
+
+ HRESULT EnumUrls(
+ [out] IEnumSTATURL **ppEnum);
+}
+
+/*****************************************************************************
+ * IUrlHistoryStg2 interface
+ */
+[
+ object,
+ uuid(afa0dc11-c313-11d0-831a-00c04fd5ae38),
+ pointer_default(unique)
+]
+interface IUrlHistoryStg2 : IUrlHistoryStg
+{
+ typedef [unique] IUrlHistoryStg2 *LPURLHISTORYSTG2;
+
+ HRESULT AddUrlAndNotify(
+ [in] LPCOLESTR pocsUrl,
+ [in,unique] LPCOLESTR pocsTitle,
+ [in] DWORD dwFlags,
+ [in] BOOL fWriteHistory,
+ [in] IOleCommandTarget *poctNotify,
+ [in, unique] IUnknown *punkISFolder);
+
+ HRESULT ClearHistory();
+}
+
+/*****************************************************************************
+ * IUrlHistoryNotify interface
+ */
+[
+ object,
+ uuid(bc40bec1-c493-11d0-831b-00C04fd5ae38),
+ pointer_default(unique)
+]
+interface IUrlHistoryNotify : IOleCommandTarget
+{
+ typedef [unique] IUrlHistoryNotify *LPURLHISTORYNOTIFY;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h
new file mode 100644
index 00000000..7f7915fa
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.h
@@ -0,0 +1,5449 @@
+/*** Autogenerated by WIDL 1.1.36 from urlmon.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_URLMON_H
+#define __WIDL_URLMON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <objidl.h>
+#include <oleidl.h>
+#include <servprov.h>
+#include <msxml.h>
+
+/* Forward declarations */
+
+#ifndef __IInternet_FWD_DEFINED__
+#define __IInternet_FWD_DEFINED__
+typedef interface IInternet IInternet;
+#endif
+
+#ifndef __IBinding_FWD_DEFINED__
+#define __IBinding_FWD_DEFINED__
+typedef interface IBinding IBinding;
+#endif
+
+#ifndef __IBindStatusCallback_FWD_DEFINED__
+#define __IBindStatusCallback_FWD_DEFINED__
+typedef interface IBindStatusCallback IBindStatusCallback;
+#endif
+
+#ifndef __IBindStatusCallbackEx_FWD_DEFINED__
+#define __IBindStatusCallbackEx_FWD_DEFINED__
+typedef interface IBindStatusCallbackEx IBindStatusCallbackEx;
+#endif
+
+#ifndef __IAuthenticate_FWD_DEFINED__
+#define __IAuthenticate_FWD_DEFINED__
+typedef interface IAuthenticate IAuthenticate;
+#endif
+
+#ifndef __IHttpNegotiate_FWD_DEFINED__
+#define __IHttpNegotiate_FWD_DEFINED__
+typedef interface IHttpNegotiate IHttpNegotiate;
+#endif
+
+#ifndef __IHttpNegotiate2_FWD_DEFINED__
+#define __IHttpNegotiate2_FWD_DEFINED__
+typedef interface IHttpNegotiate2 IHttpNegotiate2;
+#endif
+
+#ifndef __IBindHost_FWD_DEFINED__
+#define __IBindHost_FWD_DEFINED__
+typedef interface IBindHost IBindHost;
+#endif
+
+#ifndef __IWinInetInfo_FWD_DEFINED__
+#define __IWinInetInfo_FWD_DEFINED__
+typedef interface IWinInetInfo IWinInetInfo;
+#endif
+
+#ifndef __IWinInetHttpInfo_FWD_DEFINED__
+#define __IWinInetHttpInfo_FWD_DEFINED__
+typedef interface IWinInetHttpInfo IWinInetHttpInfo;
+#endif
+
+#ifndef __IWindowForBindingUI_FWD_DEFINED__
+#define __IWindowForBindingUI_FWD_DEFINED__
+typedef interface IWindowForBindingUI IWindowForBindingUI;
+#endif
+
+#ifndef __IHttpSecurity_FWD_DEFINED__
+#define __IHttpSecurity_FWD_DEFINED__
+typedef interface IHttpSecurity IHttpSecurity;
+#endif
+
+#ifndef __IPersistMoniker_FWD_DEFINED__
+#define __IPersistMoniker_FWD_DEFINED__
+typedef interface IPersistMoniker IPersistMoniker;
+#endif
+
+#ifndef __IMonikerProp_FWD_DEFINED__
+#define __IMonikerProp_FWD_DEFINED__
+typedef interface IMonikerProp IMonikerProp;
+#endif
+
+#ifndef __IBindProtocol_FWD_DEFINED__
+#define __IBindProtocol_FWD_DEFINED__
+typedef interface IBindProtocol IBindProtocol;
+#endif
+
+#ifndef __IInternetBindInfo_FWD_DEFINED__
+#define __IInternetBindInfo_FWD_DEFINED__
+typedef interface IInternetBindInfo IInternetBindInfo;
+#endif
+
+#ifndef __IInternetPriority_FWD_DEFINED__
+#define __IInternetPriority_FWD_DEFINED__
+typedef interface IInternetPriority IInternetPriority;
+#endif
+
+#ifndef __IInternetProtocolRoot_FWD_DEFINED__
+#define __IInternetProtocolRoot_FWD_DEFINED__
+typedef interface IInternetProtocolRoot IInternetProtocolRoot;
+#endif
+
+#ifndef __IInternetProtocolSink_FWD_DEFINED__
+#define __IInternetProtocolSink_FWD_DEFINED__
+typedef interface IInternetProtocolSink IInternetProtocolSink;
+#endif
+
+#ifndef __IInternetProtocol_FWD_DEFINED__
+#define __IInternetProtocol_FWD_DEFINED__
+typedef interface IInternetProtocol IInternetProtocol;
+#endif
+
+#ifndef __IInternetProtocolInfo_FWD_DEFINED__
+#define __IInternetProtocolInfo_FWD_DEFINED__
+typedef interface IInternetProtocolInfo IInternetProtocolInfo;
+#endif
+
+#ifndef __IInternetSession_FWD_DEFINED__
+#define __IInternetSession_FWD_DEFINED__
+typedef interface IInternetSession IInternetSession;
+#endif
+
+#ifndef __IInternetSecurityMgrSite_FWD_DEFINED__
+#define __IInternetSecurityMgrSite_FWD_DEFINED__
+typedef interface IInternetSecurityMgrSite IInternetSecurityMgrSite;
+#endif
+
+#ifndef __IInternetSecurityManager_FWD_DEFINED__
+#define __IInternetSecurityManager_FWD_DEFINED__
+typedef interface IInternetSecurityManager IInternetSecurityManager;
+#endif
+
+#ifndef __IInternetHostSecurityManager_FWD_DEFINED__
+#define __IInternetHostSecurityManager_FWD_DEFINED__
+typedef interface IInternetHostSecurityManager IInternetHostSecurityManager;
+#endif
+
+#ifndef __IInternetZoneManager_FWD_DEFINED__
+#define __IInternetZoneManager_FWD_DEFINED__
+typedef interface IInternetZoneManager IInternetZoneManager;
+#endif
+
+#ifndef __IInternetZoneManagerEx_FWD_DEFINED__
+#define __IInternetZoneManagerEx_FWD_DEFINED__
+typedef interface IInternetZoneManagerEx IInternetZoneManagerEx;
+#endif
+
+#ifndef __IInternetZoneManagerEx2_FWD_DEFINED__
+#define __IInternetZoneManagerEx2_FWD_DEFINED__
+typedef interface IInternetZoneManagerEx2 IInternetZoneManagerEx2;
+#endif
+
+#ifndef __ISoftDistExt_FWD_DEFINED__
+#define __ISoftDistExt_FWD_DEFINED__
+typedef interface ISoftDistExt ISoftDistExt;
+#endif
+
+#ifndef __IUri_FWD_DEFINED__
+#define __IUri_FWD_DEFINED__
+typedef interface IUri IUri;
+#endif
+
+#ifndef __IUriContainer_FWD_DEFINED__
+#define __IUriContainer_FWD_DEFINED__
+typedef interface IUriContainer IUriContainer;
+#endif
+
+#ifndef __IInternetProtocolEx_FWD_DEFINED__
+#define __IInternetProtocolEx_FWD_DEFINED__
+typedef interface IInternetProtocolEx IInternetProtocolEx;
+#endif
+
+
+#ifdef WINE_NO_UNICODE_MACROS
+#undef GetUserName
+#endif
+#ifndef __IInternetProtocolSink_FWD_DEFINED__
+#define __IInternetProtocolSink_FWD_DEFINED__
+typedef interface IInternetProtocolSink IInternetProtocolSink;
+#endif
+
+/*****************************************************************************
+ * IInternet interface
+ */
+#ifndef __IInternet_INTERFACE_DEFINED__
+#define __IInternet_INTERFACE_DEFINED__
+
+typedef IInternet *LPIINTERNET;
+DEFINE_GUID(IID_IInternet, 0x79eac9e0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternet : public IUnknown
+{
+};
+#else
+typedef struct IInternetVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternet* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternet* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternet* This);
+
+ END_INTERFACE
+} IInternetVtbl;
+interface IInternet {
+ CONST_VTBL IInternetVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternet_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternet_Release(This) (This)->lpVtbl->Release(This)
+#endif
+
+#endif
+
+
+#endif /* __IInternet_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBinding interface
+ */
+#ifndef __IBinding_INTERFACE_DEFINED__
+#define __IBinding_INTERFACE_DEFINED__
+
+typedef IBinding *LPBINDING;
+DEFINE_GUID(IID_IBinding, 0x79eac9c0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBinding : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Abort(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Suspend(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Resume(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPriority(
+ LONG nPriority) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPriority(
+ LONG *pnPriority) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBindResult(
+ CLSID *pclsidProtocol,
+ DWORD *pdwResult,
+ LPOLESTR *pszResult,
+ DWORD *pdwReserved) = 0;
+
+};
+#else
+typedef struct IBindingVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBinding* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBinding* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBinding* This);
+
+ /*** IBinding methods ***/
+ HRESULT (STDMETHODCALLTYPE *Abort)(
+ IBinding* This);
+
+ HRESULT (STDMETHODCALLTYPE *Suspend)(
+ IBinding* This);
+
+ HRESULT (STDMETHODCALLTYPE *Resume)(
+ IBinding* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetPriority)(
+ IBinding* This,
+ LONG nPriority);
+
+ HRESULT (STDMETHODCALLTYPE *GetPriority)(
+ IBinding* This,
+ LONG *pnPriority);
+
+ HRESULT (STDMETHODCALLTYPE *GetBindResult)(
+ IBinding* This,
+ CLSID *pclsidProtocol,
+ DWORD *pdwResult,
+ LPOLESTR *pszResult,
+ DWORD *pdwReserved);
+
+ END_INTERFACE
+} IBindingVtbl;
+interface IBinding {
+ CONST_VTBL IBindingVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBinding_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBinding_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBinding_Release(This) (This)->lpVtbl->Release(This)
+/*** IBinding methods ***/
+#define IBinding_Abort(This) (This)->lpVtbl->Abort(This)
+#define IBinding_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IBinding_Resume(This) (This)->lpVtbl->Resume(This)
+#define IBinding_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)
+#define IBinding_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#define IBinding_GetBindResult(This,pclsidProtocol,pdwResult,pszResult,pdwReserved) (This)->lpVtbl->GetBindResult(This,pclsidProtocol,pdwResult,pszResult,pdwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBinding_Abort_Proxy(
+ IBinding* This);
+void __RPC_STUB IBinding_Abort_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_Suspend_Proxy(
+ IBinding* This);
+void __RPC_STUB IBinding_Suspend_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_Resume_Proxy(
+ IBinding* This);
+void __RPC_STUB IBinding_Resume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_SetPriority_Proxy(
+ IBinding* This,
+ LONG nPriority);
+void __RPC_STUB IBinding_SetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_GetPriority_Proxy(
+ IBinding* This,
+ LONG *pnPriority);
+void __RPC_STUB IBinding_GetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBinding_RemoteGetBindResult_Proxy(
+ IBinding* This,
+ CLSID *pclsidProtocol,
+ DWORD *pdwResult,
+ LPOLESTR *pszResult,
+ DWORD dwReserved);
+void __RPC_STUB IBinding_RemoteGetBindResult_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IBinding_GetBindResult_Proxy(
+ IBinding* This,
+ CLSID *pclsidProtocol,
+ DWORD *pdwResult,
+ LPOLESTR *pszResult,
+ DWORD *pdwReserved);
+HRESULT __RPC_STUB IBinding_GetBindResult_Stub(
+ IBinding* This,
+ CLSID *pclsidProtocol,
+ DWORD *pdwResult,
+ LPOLESTR *pszResult,
+ DWORD dwReserved);
+
+#endif /* __IBinding_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBindStatusCallback interface
+ */
+#ifndef __IBindStatusCallback_INTERFACE_DEFINED__
+#define __IBindStatusCallback_INTERFACE_DEFINED__
+
+typedef IBindStatusCallback *LPBINDSTATUSCALLBACK;
+typedef enum __WIDL_urlmon_generated_name_00000000 {
+ BINDVERB_GET = 0x0,
+ BINDVERB_POST = 0x1,
+ BINDVERB_PUT = 0x2,
+ BINDVERB_CUSTOM = 0x3
+} BINDVERB;
+typedef enum __WIDL_urlmon_generated_name_00000001 {
+ BINDINFOF_URLENCODESTGMEDDATA = 0x1,
+ BINDINFOF_URLENCODEDEXTRAINFO = 0x2
+} BINDINFOF;
+typedef enum __WIDL_urlmon_generated_name_00000002 {
+ BINDF_ASYNCHRONOUS = 0x1,
+ BINDF_ASYNCSTORAGE = 0x2,
+ BINDF_NOPROGRESSIVERENDERING = 0x4,
+ BINDF_OFFLINEOPERATION = 0x8,
+ BINDF_GETNEWESTVERSION = 0x10,
+ BINDF_NOWRITECACHE = 0x20,
+ BINDF_NEEDFILE = 0x40,
+ BINDF_PULLDATA = 0x80,
+ BINDF_IGNORESECURITYPROBLEM = 0x100,
+ BINDF_RESYNCHRONIZE = 0x200,
+ BINDF_HYPERLINK = 0x400,
+ BINDF_NO_UI = 0x800,
+ BINDF_SILENTOPERATION = 0x1000,
+ BINDF_PRAGMA_NO_CACHE = 0x2000,
+ BINDF_GETCLASSOBJECT = 0x4000,
+ BINDF_RESERVED_1 = 0x8000,
+ BINDF_FREE_THREADED = 0x10000,
+ BINDF_DIRECT_READ = 0x20000,
+ BINDF_FORMS_SUBMIT = 0x40000,
+ BINDF_GETFROMCACHE_IF_NET_FAIL = 0x80000,
+ BINDF_FROMURLMON = 0x100000,
+ BINDF_FWD_BACK = 0x200000,
+ BINDF_PREFERDEFAULTHANDLER = 0x400000,
+ BINDF_ENFORCERESTRICTED = 0x800000
+} BINDF;
+typedef enum __WIDL_urlmon_generated_name_00000003 {
+ URL_ENCODING_NONE = 0x0,
+ URL_ENCODING_ENABLE_UTF8 = 0x10000000,
+ URL_ENCODING_DISABLE_UTF8 = 0x20000000
+} URL_ENCODING;
+typedef struct _tagBINDINFO {
+ ULONG cbSize;
+ LPWSTR szExtraInfo;
+ STGMEDIUM stgmedData;
+ DWORD grfBindInfoF;
+ DWORD dwBindVerb;
+ LPWSTR szCustomVerb;
+ DWORD cbstgmedData;
+ DWORD dwOptions;
+ DWORD dwOptionsFlags;
+ DWORD dwCodePage;
+ SECURITY_ATTRIBUTES securityAttributes;
+ IID iid;
+ IUnknown *pUnk;
+ DWORD dwReserved;
+} BINDINFO;
+typedef struct _REMSECURITY_ATTRIBUTES {
+ DWORD nLength;
+ DWORD lpSecurityDescriptor;
+ BOOL bInheritHandle;
+} REMSECURITY_ATTRIBUTES;
+typedef struct _REMSECURITY_ATTRIBUTES *PREMSECURITY_ATTRIBUTES;
+typedef struct _REMSECURITY_ATTRIBUTES *LPREMSECURITY_ATTRIBUTES;
+typedef struct _tagRemBINDINFO {
+ ULONG cbSize;
+ LPWSTR szExtraInfo;
+ DWORD grfBindInfoF;
+ DWORD dwBindVerb;
+ LPWSTR szCustomVerb;
+ DWORD cbstgmedData;
+ DWORD dwOptions;
+ DWORD dwOptionsFlags;
+ DWORD dwCodePage;
+ REMSECURITY_ATTRIBUTES securityAttributes;
+ IID iid;
+ IUnknown *pUnk;
+ DWORD dwReserved;
+} RemBINDINFO;
+typedef struct tagRemFORMATETC {
+ DWORD cfFormat;
+ DWORD ptd;
+ DWORD dwAspect;
+ LONG lindex;
+ DWORD tymed;
+} RemFORMATETC;
+typedef struct tagRemFORMATETC *LPREMFORMATETC;
+typedef enum __WIDL_urlmon_generated_name_00000004 {
+ BSCF_FIRSTDATANOTIFICATION = 0x1,
+ BSCF_INTERMEDIATEDATANOTIFICATION = 0x2,
+ BSCF_LASTDATANOTIFICATION = 0x4,
+ BSCF_DATAFULLYAVAILABLE = 0x8,
+ BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10,
+ BSCF_SKIPDRAINDATAFORFILEURLS = 0x20,
+ BSCF_64BITLENGTHDOWNLOAD = 0x40
+} BSCF;
+typedef enum BINDSTATUS {
+ BINDSTATUS_FINDINGRESOURCE = 1,
+ BINDSTATUS_CONNECTING = 2,
+ BINDSTATUS_REDIRECTING = 3,
+ BINDSTATUS_BEGINDOWNLOADDATA = 4,
+ BINDSTATUS_DOWNLOADINGDATA = 5,
+ BINDSTATUS_ENDDOWNLOADDATA = 6,
+ BINDSTATUS_BEGINDOWNLOADCOMPONENTS = 7,
+ BINDSTATUS_INSTALLINGCOMPONENTS = 8,
+ BINDSTATUS_ENDDOWNLOADCOMPONENTS = 9,
+ BINDSTATUS_USINGCACHEDCOPY = 10,
+ BINDSTATUS_SENDINGREQUEST = 11,
+ BINDSTATUS_CLASSIDAVAILABLE = 12,
+ BINDSTATUS_MIMETYPEAVAILABLE = 13,
+ BINDSTATUS_CACHEFILENAMEAVAILABLE = 14,
+ BINDSTATUS_BEGINSYNCOPERATION = 15,
+ BINDSTATUS_ENDSYNCOPERATION = 16,
+ BINDSTATUS_BEGINUPLOADDATA = 17,
+ BINDSTATUS_UPLOADINGDATA = 18,
+ BINDSTATUS_ENDUPLOADINGDATA = 19,
+ BINDSTATUS_PROTOCOLCLASSID = 20,
+ BINDSTATUS_ENCODING = 21,
+ BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE = 22,
+ BINDSTATUS_CLASSINSTALLLOCATION = 23,
+ BINDSTATUS_DECODING = 24,
+ BINDSTATUS_LOADINGMIMEHANDLER = 25,
+ BINDSTATUS_CONTENTDISPOSITIONATTACH = 26,
+ BINDSTATUS_FILTERREPORTMIMETYPE = 27,
+ BINDSTATUS_CLSIDCANINSTANTIATE = 28,
+ BINDSTATUS_IUNKNOWNAVAILABLE = 29,
+ BINDSTATUS_DIRECTBIND = 30,
+ BINDSTATUS_RAWMIMETYPE = 31,
+ BINDSTATUS_PROXYDETECTING = 32,
+ BINDSTATUS_ACCEPTRANGES = 33,
+ BINDSTATUS_COOKIE_SENT = 34,
+ BINDSTATUS_COMPACT_POLICY_RECEIVED = 35,
+ BINDSTATUS_COOKIE_SUPPRESSED = 36,
+ BINDSTATUS_COOKIE_STATE_UNKNOWN = 37,
+ BINDSTATUS_COOKIE_STATE_ACCEPT = 38,
+ BINDSTATUS_COOKIE_STATE_REJECT = 39,
+ BINDSTATUS_COOKIE_STATE_PROMPT = 40,
+ BINDSTATUS_COOKIE_STATE_LEASH = 41,
+ BINDSTATUS_COOKIE_STATE_DOWNGRADE = 42,
+ BINDSTATUS_POLICY_HREF = 43,
+ BINDSTATUS_P3P_HEADER = 44,
+ BINDSTATUS_SESSION_COOKIE_RECEIVED = 45,
+ BINDSTATUS_PERSISTENT_COOKIE_RECEIVED = 46,
+ BINDSTATUS_SESSION_COOKIES_ALLOWED = 47,
+ BINDSTATUS_CACHECONTROL = 48,
+ BINDSTATUS_CONTENTDISPOSITIONFILENAME = 49,
+ BINDSTATUS_MIMETEXTPLAINMISMATCH = 50,
+ BINDSTATUS_PUBLISHERAVAILABLE = 51,
+ BINDSTATUS_DISPLAYNAMEAVAILABLE = 52
+} BINDSTATUS;
+DEFINE_GUID(IID_IBindStatusCallback, 0x79eac9c1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindStatusCallback : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
+ DWORD dwReserved,
+ IBinding *pib) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPriority(
+ LONG *pnPriority) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnLowResource(
+ DWORD reserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnProgress(
+ ULONG ulProgress,
+ ULONG ulProgressMax,
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnStopBinding(
+ HRESULT hresult,
+ LPCWSTR szError) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnDataAvailable(
+ DWORD grfBSCF,
+ DWORD dwSize,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pstgmed) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable(
+ REFIID riid,
+ IUnknown *punk) = 0;
+
+};
+#else
+typedef struct IBindStatusCallbackVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBindStatusCallback* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBindStatusCallback* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBindStatusCallback* This);
+
+ /*** IBindStatusCallback methods ***/
+ HRESULT (STDMETHODCALLTYPE *OnStartBinding)(
+ IBindStatusCallback* This,
+ DWORD dwReserved,
+ IBinding *pib);
+
+ HRESULT (STDMETHODCALLTYPE *GetPriority)(
+ IBindStatusCallback* This,
+ LONG *pnPriority);
+
+ HRESULT (STDMETHODCALLTYPE *OnLowResource)(
+ IBindStatusCallback* This,
+ DWORD reserved);
+
+ HRESULT (STDMETHODCALLTYPE *OnProgress)(
+ IBindStatusCallback* This,
+ ULONG ulProgress,
+ ULONG ulProgressMax,
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText);
+
+ HRESULT (STDMETHODCALLTYPE *OnStopBinding)(
+ IBindStatusCallback* This,
+ HRESULT hresult,
+ LPCWSTR szError);
+
+ HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
+ IBindStatusCallback* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo);
+
+ HRESULT (STDMETHODCALLTYPE *OnDataAvailable)(
+ IBindStatusCallback* This,
+ DWORD grfBSCF,
+ DWORD dwSize,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pstgmed);
+
+ HRESULT (STDMETHODCALLTYPE *OnObjectAvailable)(
+ IBindStatusCallback* This,
+ REFIID riid,
+ IUnknown *punk);
+
+ END_INTERFACE
+} IBindStatusCallbackVtbl;
+interface IBindStatusCallback {
+ CONST_VTBL IBindStatusCallbackVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindStatusCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindStatusCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindStatusCallback_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindStatusCallback methods ***/
+#define IBindStatusCallback_OnStartBinding(This,dwReserved,pib) (This)->lpVtbl->OnStartBinding(This,dwReserved,pib)
+#define IBindStatusCallback_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#define IBindStatusCallback_OnLowResource(This,reserved) (This)->lpVtbl->OnLowResource(This,reserved)
+#define IBindStatusCallback_OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText) (This)->lpVtbl->OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText)
+#define IBindStatusCallback_OnStopBinding(This,hresult,szError) (This)->lpVtbl->OnStopBinding(This,hresult,szError)
+#define IBindStatusCallback_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
+#define IBindStatusCallback_OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed) (This)->lpVtbl->OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed)
+#define IBindStatusCallback_OnObjectAvailable(This,riid,punk) (This)->lpVtbl->OnObjectAvailable(This,riid,punk)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnStartBinding_Proxy(
+ IBindStatusCallback* This,
+ DWORD dwReserved,
+ IBinding *pib);
+void __RPC_STUB IBindStatusCallback_OnStartBinding_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_GetPriority_Proxy(
+ IBindStatusCallback* This,
+ LONG *pnPriority);
+void __RPC_STUB IBindStatusCallback_GetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnLowResource_Proxy(
+ IBindStatusCallback* This,
+ DWORD reserved);
+void __RPC_STUB IBindStatusCallback_OnLowResource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnProgress_Proxy(
+ IBindStatusCallback* This,
+ ULONG ulProgress,
+ ULONG ulProgressMax,
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText);
+void __RPC_STUB IBindStatusCallback_OnProgress_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnStopBinding_Proxy(
+ IBindStatusCallback* This,
+ HRESULT hresult,
+ LPCWSTR szError);
+void __RPC_STUB IBindStatusCallback_OnStopBinding_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_RemoteGetBindInfo_Proxy(
+ IBindStatusCallback* This,
+ DWORD *grfBINDF,
+ RemBINDINFO *pbindinfo,
+ RemSTGMEDIUM *pstgmed);
+void __RPC_STUB IBindStatusCallback_RemoteGetBindInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_RemoteOnDataAvailable_Proxy(
+ IBindStatusCallback* This,
+ DWORD grfBSCF,
+ DWORD dwSize,
+ RemFORMATETC *pformatetc,
+ RemSTGMEDIUM *pstgmed);
+void __RPC_STUB IBindStatusCallback_RemoteOnDataAvailable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindStatusCallback_OnObjectAvailable_Proxy(
+ IBindStatusCallback* This,
+ REFIID riid,
+ IUnknown *punk);
+void __RPC_STUB IBindStatusCallback_OnObjectAvailable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
+ IBindStatusCallback* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo);
+HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
+ IBindStatusCallback* This,
+ DWORD *grfBINDF,
+ RemBINDINFO *pbindinfo,
+ RemSTGMEDIUM *pstgmed);
+HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
+ IBindStatusCallback* This,
+ DWORD grfBSCF,
+ DWORD dwSize,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pstgmed);
+HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
+ IBindStatusCallback* This,
+ DWORD grfBSCF,
+ DWORD dwSize,
+ RemFORMATETC *pformatetc,
+ RemSTGMEDIUM *pstgmed);
+
+#endif /* __IBindStatusCallback_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IBindStatusCallbackEx interface
+ */
+#ifndef __IBindStatusCallbackEx_INTERFACE_DEFINED__
+#define __IBindStatusCallbackEx_INTERFACE_DEFINED__
+
+typedef IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX;
+typedef enum __WIDL_urlmon_generated_name_00000005 {
+ BINDF2_DISABLEBASICOVERHTTP = 0x1,
+ BINDF2_DISABLEAUTOCOOKIEHANDLING = 0x2,
+ BINDF2_READ_DATA_GREATER_THAN_4GB = 0x4,
+ BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID = 0x8,
+ BINDF2_RESERVED_3 = 0x20000000,
+ BINDF2_RESERVED_2 = 0x40000000,
+ BINDF2_RESERVED_1 = 0x80000000
+} BINDF2;
+DEFINE_GUID(IID_IBindStatusCallbackEx, 0xaaa74ef9, 0x8ee7, 0x4659, 0x88,0xd9, 0xf8,0xc5,0x04,0xda,0x73,0xcc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindStatusCallbackEx : public IBindStatusCallback
+{
+ virtual HRESULT STDMETHODCALLTYPE GetBindInfoEx(
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo,
+ DWORD *grfBINDF2,
+ DWORD *pdwReserved) = 0;
+
+};
+#else
+typedef struct IBindStatusCallbackExVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBindStatusCallbackEx* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBindStatusCallbackEx* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBindStatusCallbackEx* This);
+
+ /*** IBindStatusCallback methods ***/
+ HRESULT (STDMETHODCALLTYPE *OnStartBinding)(
+ IBindStatusCallbackEx* This,
+ DWORD dwReserved,
+ IBinding *pib);
+
+ HRESULT (STDMETHODCALLTYPE *GetPriority)(
+ IBindStatusCallbackEx* This,
+ LONG *pnPriority);
+
+ HRESULT (STDMETHODCALLTYPE *OnLowResource)(
+ IBindStatusCallbackEx* This,
+ DWORD reserved);
+
+ HRESULT (STDMETHODCALLTYPE *OnProgress)(
+ IBindStatusCallbackEx* This,
+ ULONG ulProgress,
+ ULONG ulProgressMax,
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText);
+
+ HRESULT (STDMETHODCALLTYPE *OnStopBinding)(
+ IBindStatusCallbackEx* This,
+ HRESULT hresult,
+ LPCWSTR szError);
+
+ HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
+ IBindStatusCallbackEx* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo);
+
+ HRESULT (STDMETHODCALLTYPE *OnDataAvailable)(
+ IBindStatusCallbackEx* This,
+ DWORD grfBSCF,
+ DWORD dwSize,
+ FORMATETC *pformatetc,
+ STGMEDIUM *pstgmed);
+
+ HRESULT (STDMETHODCALLTYPE *OnObjectAvailable)(
+ IBindStatusCallbackEx* This,
+ REFIID riid,
+ IUnknown *punk);
+
+ /*** IBindStatusCallbackEx methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBindInfoEx)(
+ IBindStatusCallbackEx* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo,
+ DWORD *grfBINDF2,
+ DWORD *pdwReserved);
+
+ END_INTERFACE
+} IBindStatusCallbackExVtbl;
+interface IBindStatusCallbackEx {
+ CONST_VTBL IBindStatusCallbackExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindStatusCallbackEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindStatusCallbackEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindStatusCallbackEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindStatusCallback methods ***/
+#define IBindStatusCallbackEx_OnStartBinding(This,dwReserved,pib) (This)->lpVtbl->OnStartBinding(This,dwReserved,pib)
+#define IBindStatusCallbackEx_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#define IBindStatusCallbackEx_OnLowResource(This,reserved) (This)->lpVtbl->OnLowResource(This,reserved)
+#define IBindStatusCallbackEx_OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText) (This)->lpVtbl->OnProgress(This,ulProgress,ulProgressMax,ulStatusCode,szStatusText)
+#define IBindStatusCallbackEx_OnStopBinding(This,hresult,szError) (This)->lpVtbl->OnStopBinding(This,hresult,szError)
+#define IBindStatusCallbackEx_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
+#define IBindStatusCallbackEx_OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed) (This)->lpVtbl->OnDataAvailable(This,grfBSCF,dwSize,pformatetc,pstgmed)
+#define IBindStatusCallbackEx_OnObjectAvailable(This,riid,punk) (This)->lpVtbl->OnObjectAvailable(This,riid,punk)
+/*** IBindStatusCallbackEx methods ***/
+#define IBindStatusCallbackEx_GetBindInfoEx(This,grfBINDF,pbindinfo,grfBINDF2,pdwReserved) (This)->lpVtbl->GetBindInfoEx(This,grfBINDF,pbindinfo,grfBINDF2,pdwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindStatusCallbackEx_RemoteGetBindInfoEx_Proxy(
+ IBindStatusCallbackEx* This,
+ DWORD *grfBINDF,
+ RemBINDINFO *pbindinfo,
+ RemSTGMEDIUM *pstgmed,
+ DWORD *grfBINDF2,
+ DWORD *pdwReserved);
+void __RPC_STUB IBindStatusCallbackEx_RemoteGetBindInfoEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
+ IBindStatusCallbackEx* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo,
+ DWORD *grfBINDF2,
+ DWORD *pdwReserved);
+HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
+ IBindStatusCallbackEx* This,
+ DWORD *grfBINDF,
+ RemBINDINFO *pbindinfo,
+ RemSTGMEDIUM *pstgmed,
+ DWORD *grfBINDF2,
+ DWORD *pdwReserved);
+
+#endif /* __IBindStatusCallbackEx_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IAuthenticate interface
+ */
+#ifndef __IAuthenticate_INTERFACE_DEFINED__
+#define __IAuthenticate_INTERFACE_DEFINED__
+
+typedef IAuthenticate *LPAUTHENTICATION;
+DEFINE_GUID(IID_IAuthenticate, 0x79eac9d0, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IAuthenticate : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Authenticate(
+ HWND *phwnd,
+ LPWSTR *pszUsername,
+ LPWSTR *pszPassword) = 0;
+
+};
+#else
+typedef struct IAuthenticateVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IAuthenticate* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IAuthenticate* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IAuthenticate* This);
+
+ /*** IAuthenticate methods ***/
+ HRESULT (STDMETHODCALLTYPE *Authenticate)(
+ IAuthenticate* This,
+ HWND *phwnd,
+ LPWSTR *pszUsername,
+ LPWSTR *pszPassword);
+
+ END_INTERFACE
+} IAuthenticateVtbl;
+interface IAuthenticate {
+ CONST_VTBL IAuthenticateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IAuthenticate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAuthenticate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAuthenticate_Release(This) (This)->lpVtbl->Release(This)
+/*** IAuthenticate methods ***/
+#define IAuthenticate_Authenticate(This,phwnd,pszUsername,pszPassword) (This)->lpVtbl->Authenticate(This,phwnd,pszUsername,pszPassword)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IAuthenticate_Authenticate_Proxy(
+ IAuthenticate* This,
+ HWND *phwnd,
+ LPWSTR *pszUsername,
+ LPWSTR *pszPassword);
+void __RPC_STUB IAuthenticate_Authenticate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IAuthenticate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IHttpNegotiate interface
+ */
+#ifndef __IHttpNegotiate_INTERFACE_DEFINED__
+#define __IHttpNegotiate_INTERFACE_DEFINED__
+
+typedef IHttpNegotiate *LPHTTPNEGOTIATE;
+DEFINE_GUID(IID_IHttpNegotiate, 0x79eac9d2, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IHttpNegotiate : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE BeginningTransaction(
+ LPCWSTR szURL,
+ LPCWSTR szHeaders,
+ DWORD dwReserved,
+ LPWSTR *pszAdditionalHeaders) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE OnResponse(
+ DWORD dwResponseCode,
+ LPCWSTR szResponseHeaders,
+ LPCWSTR szRequestHeaders,
+ LPWSTR *pszAdditionalRequestHeaders) = 0;
+
+};
+#else
+typedef struct IHttpNegotiateVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IHttpNegotiate* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IHttpNegotiate* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IHttpNegotiate* This);
+
+ /*** IHttpNegotiate methods ***/
+ HRESULT (STDMETHODCALLTYPE *BeginningTransaction)(
+ IHttpNegotiate* This,
+ LPCWSTR szURL,
+ LPCWSTR szHeaders,
+ DWORD dwReserved,
+ LPWSTR *pszAdditionalHeaders);
+
+ HRESULT (STDMETHODCALLTYPE *OnResponse)(
+ IHttpNegotiate* This,
+ DWORD dwResponseCode,
+ LPCWSTR szResponseHeaders,
+ LPCWSTR szRequestHeaders,
+ LPWSTR *pszAdditionalRequestHeaders);
+
+ END_INTERFACE
+} IHttpNegotiateVtbl;
+interface IHttpNegotiate {
+ CONST_VTBL IHttpNegotiateVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IHttpNegotiate_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IHttpNegotiate_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IHttpNegotiate_Release(This) (This)->lpVtbl->Release(This)
+/*** IHttpNegotiate methods ***/
+#define IHttpNegotiate_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)
+#define IHttpNegotiate_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IHttpNegotiate_BeginningTransaction_Proxy(
+ IHttpNegotiate* This,
+ LPCWSTR szURL,
+ LPCWSTR szHeaders,
+ DWORD dwReserved,
+ LPWSTR *pszAdditionalHeaders);
+void __RPC_STUB IHttpNegotiate_BeginningTransaction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IHttpNegotiate_OnResponse_Proxy(
+ IHttpNegotiate* This,
+ DWORD dwResponseCode,
+ LPCWSTR szResponseHeaders,
+ LPCWSTR szRequestHeaders,
+ LPWSTR *pszAdditionalRequestHeaders);
+void __RPC_STUB IHttpNegotiate_OnResponse_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IHttpNegotiate_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IHttpNegotiate2 interface
+ */
+#ifndef __IHttpNegotiate2_INTERFACE_DEFINED__
+#define __IHttpNegotiate2_INTERFACE_DEFINED__
+
+typedef IHttpNegotiate2 *LPHTTPNEGOTIATE2;
+DEFINE_GUID(IID_IHttpNegotiate2, 0x4f9f9fcb, 0xe0f4, 0x48eb, 0xb7,0xab, 0xfa,0x2e,0xa9,0x36,0x5c,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IHttpNegotiate2 : public IHttpNegotiate
+{
+ virtual HRESULT STDMETHODCALLTYPE GetRootSecurityId(
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved) = 0;
+
+};
+#else
+typedef struct IHttpNegotiate2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IHttpNegotiate2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IHttpNegotiate2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IHttpNegotiate2* This);
+
+ /*** IHttpNegotiate methods ***/
+ HRESULT (STDMETHODCALLTYPE *BeginningTransaction)(
+ IHttpNegotiate2* This,
+ LPCWSTR szURL,
+ LPCWSTR szHeaders,
+ DWORD dwReserved,
+ LPWSTR *pszAdditionalHeaders);
+
+ HRESULT (STDMETHODCALLTYPE *OnResponse)(
+ IHttpNegotiate2* This,
+ DWORD dwResponseCode,
+ LPCWSTR szResponseHeaders,
+ LPCWSTR szRequestHeaders,
+ LPWSTR *pszAdditionalRequestHeaders);
+
+ /*** IHttpNegotiate2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetRootSecurityId)(
+ IHttpNegotiate2* This,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved);
+
+ END_INTERFACE
+} IHttpNegotiate2Vtbl;
+interface IHttpNegotiate2 {
+ CONST_VTBL IHttpNegotiate2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IHttpNegotiate2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IHttpNegotiate2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IHttpNegotiate2_Release(This) (This)->lpVtbl->Release(This)
+/*** IHttpNegotiate methods ***/
+#define IHttpNegotiate2_BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders) (This)->lpVtbl->BeginningTransaction(This,szURL,szHeaders,dwReserved,pszAdditionalHeaders)
+#define IHttpNegotiate2_OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders) (This)->lpVtbl->OnResponse(This,dwResponseCode,szResponseHeaders,szRequestHeaders,pszAdditionalRequestHeaders)
+/*** IHttpNegotiate2 methods ***/
+#define IHttpNegotiate2_GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetRootSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IHttpNegotiate2_GetRootSecurityId_Proxy(
+ IHttpNegotiate2* This,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved);
+void __RPC_STUB IHttpNegotiate2_GetRootSecurityId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IHttpNegotiate2_INTERFACE_DEFINED__ */
+
+#define SID_IBindHost IID_IBindHost
+#define SID_SBindHost IID_IBindHost
+/*****************************************************************************
+ * IBindHost interface
+ */
+#ifndef __IBindHost_INTERFACE_DEFINED__
+#define __IBindHost_INTERFACE_DEFINED__
+
+typedef IBindHost *LPBINDHOST;
+DEFINE_GUID(IID_IBindHost, 0xfc4801a1, 0x2ba9, 0x11cf, 0xa2,0x29, 0x00,0xaa,0x00,0x3d,0x73,0x52);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindHost : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateMoniker(
+ LPOLESTR szName,
+ IBindCtx *pBC,
+ IMoniker **ppmk,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MonikerBindToStorage(
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ void **ppvObj) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MonikerBindToObject(
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ void **ppvObj) = 0;
+
+};
+#else
+typedef struct IBindHostVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBindHost* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBindHost* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBindHost* This);
+
+ /*** IBindHost methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateMoniker)(
+ IBindHost* This,
+ LPOLESTR szName,
+ IBindCtx *pBC,
+ IMoniker **ppmk,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *MonikerBindToStorage)(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ void **ppvObj);
+
+ HRESULT (STDMETHODCALLTYPE *MonikerBindToObject)(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ void **ppvObj);
+
+ END_INTERFACE
+} IBindHostVtbl;
+interface IBindHost {
+ CONST_VTBL IBindHostVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindHost_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindHost_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindHost_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindHost methods ***/
+#define IBindHost_CreateMoniker(This,szName,pBC,ppmk,dwReserved) (This)->lpVtbl->CreateMoniker(This,szName,pBC,ppmk,dwReserved)
+#define IBindHost_MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToStorage(This,pMk,pBC,pBSC,riid,ppvObj)
+#define IBindHost_MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj) (This)->lpVtbl->MonikerBindToObject(This,pMk,pBC,pBSC,riid,ppvObj)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindHost_CreateMoniker_Proxy(
+ IBindHost* This,
+ LPOLESTR szName,
+ IBindCtx *pBC,
+ IMoniker **ppmk,
+ DWORD dwReserved);
+void __RPC_STUB IBindHost_CreateMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindHost_RemoteMonikerBindToStorage_Proxy(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ IUnknown **ppvObj);
+void __RPC_STUB IBindHost_RemoteMonikerBindToStorage_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IBindHost_RemoteMonikerBindToObject_Proxy(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ IUnknown **ppvObj);
+void __RPC_STUB IBindHost_RemoteMonikerBindToObject_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ void **ppvObj);
+HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ IUnknown **ppvObj);
+HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ void **ppvObj);
+HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(
+ IBindHost* This,
+ IMoniker *pMk,
+ IBindCtx *pBC,
+ IBindStatusCallback *pBSC,
+ REFIID riid,
+ IUnknown **ppvObj);
+
+#endif /* __IBindHost_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWinInetInfo interface
+ */
+#ifndef __IWinInetInfo_INTERFACE_DEFINED__
+#define __IWinInetInfo_INTERFACE_DEFINED__
+
+typedef IWinInetInfo *LPWININETINFO;
+DEFINE_GUID(IID_IWinInetInfo, 0x79eac9d6, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWinInetInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryOption(
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf) = 0;
+
+};
+#else
+typedef struct IWinInetInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWinInetInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWinInetInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWinInetInfo* This);
+
+ /*** IWinInetInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryOption)(
+ IWinInetInfo* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf);
+
+ END_INTERFACE
+} IWinInetInfoVtbl;
+interface IWinInetInfo {
+ CONST_VTBL IWinInetInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWinInetInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWinInetInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWinInetInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IWinInetInfo methods ***/
+#define IWinInetInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWinInetInfo_RemoteQueryOption_Proxy(
+ IWinInetInfo* This,
+ DWORD dwOption,
+ BYTE *pBuffer,
+ DWORD *pcbBuf);
+void __RPC_STUB IWinInetInfo_RemoteQueryOption_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(
+ IWinInetInfo* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf);
+HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(
+ IWinInetInfo* This,
+ DWORD dwOption,
+ BYTE *pBuffer,
+ DWORD *pcbBuf);
+
+#endif /* __IWinInetInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWinInetHttpInfo interface
+ */
+#ifndef __IWinInetHttpInfo_INTERFACE_DEFINED__
+#define __IWinInetHttpInfo_INTERFACE_DEFINED__
+
+typedef IWinInetHttpInfo *LPWININETHTTPINFO;
+DEFINE_GUID(IID_IWinInetHttpInfo, 0x79eac9d8, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWinInetHttpInfo : public IWinInetInfo
+{
+ virtual HRESULT STDMETHODCALLTYPE QueryInfo(
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf,
+ DWORD *pdwFlags,
+ DWORD *pdwReserved) = 0;
+
+};
+#else
+typedef struct IWinInetHttpInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWinInetHttpInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWinInetHttpInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWinInetHttpInfo* This);
+
+ /*** IWinInetInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryOption)(
+ IWinInetHttpInfo* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf);
+
+ /*** IWinInetHttpInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInfo)(
+ IWinInetHttpInfo* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf,
+ DWORD *pdwFlags,
+ DWORD *pdwReserved);
+
+ END_INTERFACE
+} IWinInetHttpInfoVtbl;
+interface IWinInetHttpInfo {
+ CONST_VTBL IWinInetHttpInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWinInetHttpInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWinInetHttpInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWinInetHttpInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IWinInetInfo methods ***/
+#define IWinInetHttpInfo_QueryOption(This,dwOption,pBuffer,pcbBuf) (This)->lpVtbl->QueryOption(This,dwOption,pBuffer,pcbBuf)
+/*** IWinInetHttpInfo methods ***/
+#define IWinInetHttpInfo_QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved) (This)->lpVtbl->QueryInfo(This,dwOption,pBuffer,pcbBuf,pdwFlags,pdwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWinInetHttpInfo_RemoteQueryInfo_Proxy(
+ IWinInetHttpInfo* This,
+ DWORD dwOption,
+ BYTE *pBuffer,
+ DWORD *pcbBuf,
+ DWORD *pdwFlags,
+ DWORD *pdwReserved);
+void __RPC_STUB IWinInetHttpInfo_RemoteQueryInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(
+ IWinInetHttpInfo* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD *pcbBuf,
+ DWORD *pdwFlags,
+ DWORD *pdwReserved);
+HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(
+ IWinInetHttpInfo* This,
+ DWORD dwOption,
+ BYTE *pBuffer,
+ DWORD *pcbBuf,
+ DWORD *pdwFlags,
+ DWORD *pdwReserved);
+
+#endif /* __IWinInetHttpInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWindowForBindingUI interface
+ */
+#ifndef __IWindowForBindingUI_INTERFACE_DEFINED__
+#define __IWindowForBindingUI_INTERFACE_DEFINED__
+
+typedef IWindowForBindingUI *LPWINDOWFORBINDINGUI;
+DEFINE_GUID(IID_IWindowForBindingUI, 0x79eac9d5, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWindowForBindingUI : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetWindow(
+ REFGUID rguidReason,
+ HWND *phwnd) = 0;
+
+};
+#else
+typedef struct IWindowForBindingUIVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWindowForBindingUI* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWindowForBindingUI* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWindowForBindingUI* This);
+
+ /*** IWindowForBindingUI methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IWindowForBindingUI* This,
+ REFGUID rguidReason,
+ HWND *phwnd);
+
+ END_INTERFACE
+} IWindowForBindingUIVtbl;
+interface IWindowForBindingUI {
+ CONST_VTBL IWindowForBindingUIVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWindowForBindingUI_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWindowForBindingUI_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWindowForBindingUI_Release(This) (This)->lpVtbl->Release(This)
+/*** IWindowForBindingUI methods ***/
+#define IWindowForBindingUI_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
+ IWindowForBindingUI* This,
+ REFGUID rguidReason,
+ HWND *phwnd);
+void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWindowForBindingUI_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IHttpSecurity interface
+ */
+#ifndef __IHttpSecurity_INTERFACE_DEFINED__
+#define __IHttpSecurity_INTERFACE_DEFINED__
+
+typedef IHttpSecurity *LPHTTPSECURITY;
+DEFINE_GUID(IID_IHttpSecurity, 0x79eac9d7, 0xbafa, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IHttpSecurity : public IWindowForBindingUI
+{
+ virtual HRESULT STDMETHODCALLTYPE OnSecurityProblem(
+ DWORD dwProblem) = 0;
+
+};
+#else
+typedef struct IHttpSecurityVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IHttpSecurity* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IHttpSecurity* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IHttpSecurity* This);
+
+ /*** IWindowForBindingUI methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IHttpSecurity* This,
+ REFGUID rguidReason,
+ HWND *phwnd);
+
+ /*** IHttpSecurity methods ***/
+ HRESULT (STDMETHODCALLTYPE *OnSecurityProblem)(
+ IHttpSecurity* This,
+ DWORD dwProblem);
+
+ END_INTERFACE
+} IHttpSecurityVtbl;
+interface IHttpSecurity {
+ CONST_VTBL IHttpSecurityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IHttpSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IHttpSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IHttpSecurity_Release(This) (This)->lpVtbl->Release(This)
+/*** IWindowForBindingUI methods ***/
+#define IHttpSecurity_GetWindow(This,rguidReason,phwnd) (This)->lpVtbl->GetWindow(This,rguidReason,phwnd)
+/*** IHttpSecurity methods ***/
+#define IHttpSecurity_OnSecurityProblem(This,dwProblem) (This)->lpVtbl->OnSecurityProblem(This,dwProblem)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IHttpSecurity_OnSecurityProblem_Proxy(
+ IHttpSecurity* This,
+ DWORD dwProblem);
+void __RPC_STUB IHttpSecurity_OnSecurityProblem_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IHttpSecurity_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IPersistMoniker interface
+ */
+#ifndef __IPersistMoniker_INTERFACE_DEFINED__
+#define __IPersistMoniker_INTERFACE_DEFINED__
+
+typedef IPersistMoniker *LPPERSISTMONIKER;
+DEFINE_GUID(IID_IPersistMoniker, 0x79eac9c9, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IPersistMoniker : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetClassID(
+ CLSID *pClassID) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsDirty(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Load(
+ BOOL fFullyAvailable,
+ IMoniker *pimkName,
+ LPBC pibc,
+ DWORD grfMode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Save(
+ IMoniker *pimkName,
+ LPBC pbc,
+ BOOL fRemember) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SaveCompleted(
+ IMoniker *pimkName,
+ LPBC pibc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCurMoniker(
+ IMoniker **ppimkName) = 0;
+
+};
+#else
+typedef struct IPersistMonikerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IPersistMoniker* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IPersistMoniker* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IPersistMoniker* This);
+
+ /*** IPersistMoniker methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClassID)(
+ IPersistMoniker* This,
+ CLSID *pClassID);
+
+ HRESULT (STDMETHODCALLTYPE *IsDirty)(
+ IPersistMoniker* This);
+
+ HRESULT (STDMETHODCALLTYPE *Load)(
+ IPersistMoniker* This,
+ BOOL fFullyAvailable,
+ IMoniker *pimkName,
+ LPBC pibc,
+ DWORD grfMode);
+
+ HRESULT (STDMETHODCALLTYPE *Save)(
+ IPersistMoniker* This,
+ IMoniker *pimkName,
+ LPBC pbc,
+ BOOL fRemember);
+
+ HRESULT (STDMETHODCALLTYPE *SaveCompleted)(
+ IPersistMoniker* This,
+ IMoniker *pimkName,
+ LPBC pibc);
+
+ HRESULT (STDMETHODCALLTYPE *GetCurMoniker)(
+ IPersistMoniker* This,
+ IMoniker **ppimkName);
+
+ END_INTERFACE
+} IPersistMonikerVtbl;
+interface IPersistMoniker {
+ CONST_VTBL IPersistMonikerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IPersistMoniker_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IPersistMoniker_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IPersistMoniker_Release(This) (This)->lpVtbl->Release(This)
+/*** IPersistMoniker methods ***/
+#define IPersistMoniker_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
+#define IPersistMoniker_IsDirty(This) (This)->lpVtbl->IsDirty(This)
+#define IPersistMoniker_Load(This,fFullyAvailable,pimkName,pibc,grfMode) (This)->lpVtbl->Load(This,fFullyAvailable,pimkName,pibc,grfMode)
+#define IPersistMoniker_Save(This,pimkName,pbc,fRemember) (This)->lpVtbl->Save(This,pimkName,pbc,fRemember)
+#define IPersistMoniker_SaveCompleted(This,pimkName,pibc) (This)->lpVtbl->SaveCompleted(This,pimkName,pibc)
+#define IPersistMoniker_GetCurMoniker(This,ppimkName) (This)->lpVtbl->GetCurMoniker(This,ppimkName)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IPersistMoniker_GetClassID_Proxy(
+ IPersistMoniker* This,
+ CLSID *pClassID);
+void __RPC_STUB IPersistMoniker_GetClassID_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_IsDirty_Proxy(
+ IPersistMoniker* This);
+void __RPC_STUB IPersistMoniker_IsDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_Load_Proxy(
+ IPersistMoniker* This,
+ BOOL fFullyAvailable,
+ IMoniker *pimkName,
+ LPBC pibc,
+ DWORD grfMode);
+void __RPC_STUB IPersistMoniker_Load_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_Save_Proxy(
+ IPersistMoniker* This,
+ IMoniker *pimkName,
+ LPBC pbc,
+ BOOL fRemember);
+void __RPC_STUB IPersistMoniker_Save_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_SaveCompleted_Proxy(
+ IPersistMoniker* This,
+ IMoniker *pimkName,
+ LPBC pibc);
+void __RPC_STUB IPersistMoniker_SaveCompleted_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IPersistMoniker_GetCurMoniker_Proxy(
+ IPersistMoniker* This,
+ IMoniker **ppimkName);
+void __RPC_STUB IPersistMoniker_GetCurMoniker_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IPersistMoniker_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IMonikerProp interface
+ */
+#ifndef __IMonikerProp_INTERFACE_DEFINED__
+#define __IMonikerProp_INTERFACE_DEFINED__
+
+typedef IMonikerProp *LPMONIKERPROP;
+typedef enum __WIDL_urlmon_generated_name_00000006 {
+ MIMETYPEPROP = 0,
+ USE_SRC_URL = 1,
+ CLASSIDPROP = 2,
+ TRUSTEDDOWNLOADPROP = 3,
+ POPUPLEVELPROP = 4
+} MONIKERPROPERTY;
+DEFINE_GUID(IID_IMonikerProp, 0xa5ca5f7f, 0x1847, 0x4d87, 0x9c,0x5b, 0x91,0x85,0x09,0xf7,0x51,0x1d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IMonikerProp : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE PutProperty(
+ MONIKERPROPERTY mkp,
+ LPCWSTR val) = 0;
+
+};
+#else
+typedef struct IMonikerPropVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IMonikerProp* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IMonikerProp* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IMonikerProp* This);
+
+ /*** IMonikerProp methods ***/
+ HRESULT (STDMETHODCALLTYPE *PutProperty)(
+ IMonikerProp* This,
+ MONIKERPROPERTY mkp,
+ LPCWSTR val);
+
+ END_INTERFACE
+} IMonikerPropVtbl;
+interface IMonikerProp {
+ CONST_VTBL IMonikerPropVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IMonikerProp_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IMonikerProp_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IMonikerProp_Release(This) (This)->lpVtbl->Release(This)
+/*** IMonikerProp methods ***/
+#define IMonikerProp_PutProperty(This,mkp,val) (This)->lpVtbl->PutProperty(This,mkp,val)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IMonikerProp_PutProperty_Proxy(
+ IMonikerProp* This,
+ MONIKERPROPERTY mkp,
+ LPCWSTR val);
+void __RPC_STUB IMonikerProp_PutProperty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IMonikerProp_INTERFACE_DEFINED__ */
+
+#ifndef _LPBINDPROTOCOL_DEFINED
+#define _LPBINDPROTOCOL_DEFINED
+/*****************************************************************************
+ * IBindProtocol interface
+ */
+#ifndef __IBindProtocol_INTERFACE_DEFINED__
+#define __IBindProtocol_INTERFACE_DEFINED__
+
+typedef IBindProtocol *LPBINDPROTOCOL;
+DEFINE_GUID(IID_IBindProtocol, 0x79eac9cd, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IBindProtocol : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateBinding(
+ LPCWSTR szUrl,
+ IBindCtx *pbc,
+ IBinding **ppb) = 0;
+
+};
+#else
+typedef struct IBindProtocolVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IBindProtocol* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IBindProtocol* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IBindProtocol* This);
+
+ /*** IBindProtocol methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateBinding)(
+ IBindProtocol* This,
+ LPCWSTR szUrl,
+ IBindCtx *pbc,
+ IBinding **ppb);
+
+ END_INTERFACE
+} IBindProtocolVtbl;
+interface IBindProtocol {
+ CONST_VTBL IBindProtocolVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IBindProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IBindProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IBindProtocol_Release(This) (This)->lpVtbl->Release(This)
+/*** IBindProtocol methods ***/
+#define IBindProtocol_CreateBinding(This,szUrl,pbc,ppb) (This)->lpVtbl->CreateBinding(This,szUrl,pbc,ppb)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IBindProtocol_CreateBinding_Proxy(
+ IBindProtocol* This,
+ LPCWSTR szUrl,
+ IBindCtx *pbc,
+ IBinding **ppb);
+void __RPC_STUB IBindProtocol_CreateBinding_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IBindProtocol_INTERFACE_DEFINED__ */
+
+#endif /* !defined _LPBINDPROTOCOL_DEFINED */
+/*****************************************************************************
+ * IInternetBindInfo interface
+ */
+#ifndef __IInternetBindInfo_INTERFACE_DEFINED__
+#define __IInternetBindInfo_INTERFACE_DEFINED__
+
+typedef IInternetBindInfo *LPIINTERNETBINDINFO;
+typedef enum tagBINDSTRING {
+ BINDSTRING_HEADERS = 1,
+ BINDSTRING_ACCEPT_MIMES = 2,
+ BINDSTRING_EXTRA_URL = 3,
+ BINDSTRING_LANGUAGE = 4,
+ BINDSTRING_USERNAME = 5,
+ BINDSTRING_PASSWORD = 6,
+ BINDSTRING_UA_PIXELS = 7,
+ BINDSTRING_UA_COLOR = 8,
+ BINDSTRING_OS = 9,
+ BINDSTRING_USER_AGENT = 10,
+ BINDSTRING_ACCEPT_ENCODINGS = 11,
+ BINDSTRING_POST_COOKIE = 12,
+ BINDSTRING_POST_DATA_MIME = 13,
+ BINDSTRING_URL = 14,
+ BINDSTRING_IID = 15,
+ BINDSTRING_FLAG_BIND_TO_OBJECT = 16,
+ BINDSTRING_PTR_BIND_CONTEXT = 17
+} BINDSTRING;
+DEFINE_GUID(IID_IInternetBindInfo, 0x79eac9e1, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetBindInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetBindInfo(
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBindString(
+ ULONG ulStringType,
+ LPOLESTR *ppwzStr,
+ ULONG cEl,
+ ULONG *pcElFetched) = 0;
+
+};
+#else
+typedef struct IInternetBindInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetBindInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetBindInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetBindInfo* This);
+
+ /*** IInternetBindInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetBindInfo)(
+ IInternetBindInfo* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetBindString)(
+ IInternetBindInfo* This,
+ ULONG ulStringType,
+ LPOLESTR *ppwzStr,
+ ULONG cEl,
+ ULONG *pcElFetched);
+
+ END_INTERFACE
+} IInternetBindInfoVtbl;
+interface IInternetBindInfo {
+ CONST_VTBL IInternetBindInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetBindInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetBindInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetBindInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetBindInfo methods ***/
+#define IInternetBindInfo_GetBindInfo(This,grfBINDF,pbindinfo) (This)->lpVtbl->GetBindInfo(This,grfBINDF,pbindinfo)
+#define IInternetBindInfo_GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched) (This)->lpVtbl->GetBindString(This,ulStringType,ppwzStr,cEl,pcElFetched)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetBindInfo_GetBindInfo_Proxy(
+ IInternetBindInfo* This,
+ DWORD *grfBINDF,
+ BINDINFO *pbindinfo);
+void __RPC_STUB IInternetBindInfo_GetBindInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetBindInfo_GetBindString_Proxy(
+ IInternetBindInfo* This,
+ ULONG ulStringType,
+ LPOLESTR *ppwzStr,
+ ULONG cEl,
+ ULONG *pcElFetched);
+void __RPC_STUB IInternetBindInfo_GetBindString_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetBindInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetPriority interface
+ */
+#ifndef __IInternetPriority_INTERFACE_DEFINED__
+#define __IInternetPriority_INTERFACE_DEFINED__
+
+typedef IInternetPriority *LPIINTERNETPRIORITY;
+DEFINE_GUID(IID_IInternetPriority, 0x79eac9eb, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetPriority : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetPriority(
+ LONG nPriority) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPriority(
+ LONG *pnPriority) = 0;
+
+};
+#else
+typedef struct IInternetPriorityVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetPriority* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetPriority* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetPriority* This);
+
+ /*** IInternetPriority methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPriority)(
+ IInternetPriority* This,
+ LONG nPriority);
+
+ HRESULT (STDMETHODCALLTYPE *GetPriority)(
+ IInternetPriority* This,
+ LONG *pnPriority);
+
+ END_INTERFACE
+} IInternetPriorityVtbl;
+interface IInternetPriority {
+ CONST_VTBL IInternetPriorityVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetPriority_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetPriority_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetPriority_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetPriority methods ***/
+#define IInternetPriority_SetPriority(This,nPriority) (This)->lpVtbl->SetPriority(This,nPriority)
+#define IInternetPriority_GetPriority(This,pnPriority) (This)->lpVtbl->GetPriority(This,pnPriority)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetPriority_SetPriority_Proxy(
+ IInternetPriority* This,
+ LONG nPriority);
+void __RPC_STUB IInternetPriority_SetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetPriority_GetPriority_Proxy(
+ IInternetPriority* This,
+ LONG *pnPriority);
+void __RPC_STUB IInternetPriority_GetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetPriority_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolRoot interface
+ */
+#ifndef __IInternetProtocolRoot_INTERFACE_DEFINED__
+#define __IInternetProtocolRoot_INTERFACE_DEFINED__
+
+typedef IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
+typedef enum _tagPI_FLAGS {
+ PI_PARSE_URL = 0x1,
+ PI_FILTER_MODE = 0x2,
+ PI_FORCE_ASYNC = 0x4,
+ PI_USE_WORKERTHREAD = 0x8,
+ PI_MIMEVERIFICATION = 0x10,
+ PI_CLSIDLOOKUP = 0x20,
+ PI_DATAPROGRESS = 0x40,
+ PI_SYNCHRONOUS = 0x80,
+ PI_APARTMENTTHREADED = 0x100,
+ PI_CLASSINSTALL = 0x200,
+ PD_FORCE_SWITCH = 0x10000
+} PI_FLAGS;
+typedef struct _tagPROTOCOLDATA {
+ DWORD grfFlags;
+ DWORD dwState;
+ LPVOID pData;
+ ULONG cbData;
+} PROTOCOLDATA;
+DEFINE_GUID(IID_IInternetProtocolRoot, 0x79eac9e3, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolRoot : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Start(
+ LPCWSTR szUrl,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE_PTR dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Continue(
+ PROTOCOLDATA *pProtocolData) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Abort(
+ HRESULT hrReason,
+ DWORD dwOptions) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Terminate(
+ DWORD dwOptions) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Suspend(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Resume(
+ ) = 0;
+
+};
+#else
+typedef struct IInternetProtocolRootVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetProtocolRoot* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetProtocolRoot* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetProtocolRoot* This);
+
+ /*** IInternetProtocolRoot methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IInternetProtocolRoot* This,
+ LPCWSTR szUrl,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE_PTR dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *Continue)(
+ IInternetProtocolRoot* This,
+ PROTOCOLDATA *pProtocolData);
+
+ HRESULT (STDMETHODCALLTYPE *Abort)(
+ IInternetProtocolRoot* This,
+ HRESULT hrReason,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *Terminate)(
+ IInternetProtocolRoot* This,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *Suspend)(
+ IInternetProtocolRoot* This);
+
+ HRESULT (STDMETHODCALLTYPE *Resume)(
+ IInternetProtocolRoot* This);
+
+ END_INTERFACE
+} IInternetProtocolRootVtbl;
+interface IInternetProtocolRoot {
+ CONST_VTBL IInternetProtocolRootVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolRoot_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolRoot_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolRoot_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolRoot methods ***/
+#define IInternetProtocolRoot_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#define IInternetProtocolRoot_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
+#define IInternetProtocolRoot_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
+#define IInternetProtocolRoot_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
+#define IInternetProtocolRoot_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IInternetProtocolRoot_Resume(This) (This)->lpVtbl->Resume(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Start_Proxy(
+ IInternetProtocolRoot* This,
+ LPCWSTR szUrl,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE_PTR dwReserved);
+void __RPC_STUB IInternetProtocolRoot_Start_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Continue_Proxy(
+ IInternetProtocolRoot* This,
+ PROTOCOLDATA *pProtocolData);
+void __RPC_STUB IInternetProtocolRoot_Continue_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Abort_Proxy(
+ IInternetProtocolRoot* This,
+ HRESULT hrReason,
+ DWORD dwOptions);
+void __RPC_STUB IInternetProtocolRoot_Abort_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Terminate_Proxy(
+ IInternetProtocolRoot* This,
+ DWORD dwOptions);
+void __RPC_STUB IInternetProtocolRoot_Terminate_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Suspend_Proxy(
+ IInternetProtocolRoot* This);
+void __RPC_STUB IInternetProtocolRoot_Suspend_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolRoot_Resume_Proxy(
+ IInternetProtocolRoot* This);
+void __RPC_STUB IInternetProtocolRoot_Resume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetProtocolRoot_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolSink interface
+ */
+#ifndef __IInternetProtocolSink_INTERFACE_DEFINED__
+#define __IInternetProtocolSink_INTERFACE_DEFINED__
+
+typedef IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
+DEFINE_GUID(IID_IInternetProtocolSink, 0x79eac9e5, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolSink : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Switch(
+ PROTOCOLDATA *pProtocolData) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReportProgress(
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReportData(
+ DWORD grfBSCF,
+ ULONG ulProgress,
+ ULONG ulProgressMax) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReportResult(
+ HRESULT hrResult,
+ DWORD dwError,
+ LPCWSTR szResult) = 0;
+
+};
+#else
+typedef struct IInternetProtocolSinkVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetProtocolSink* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetProtocolSink* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetProtocolSink* This);
+
+ /*** IInternetProtocolSink methods ***/
+ HRESULT (STDMETHODCALLTYPE *Switch)(
+ IInternetProtocolSink* This,
+ PROTOCOLDATA *pProtocolData);
+
+ HRESULT (STDMETHODCALLTYPE *ReportProgress)(
+ IInternetProtocolSink* This,
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText);
+
+ HRESULT (STDMETHODCALLTYPE *ReportData)(
+ IInternetProtocolSink* This,
+ DWORD grfBSCF,
+ ULONG ulProgress,
+ ULONG ulProgressMax);
+
+ HRESULT (STDMETHODCALLTYPE *ReportResult)(
+ IInternetProtocolSink* This,
+ HRESULT hrResult,
+ DWORD dwError,
+ LPCWSTR szResult);
+
+ END_INTERFACE
+} IInternetProtocolSinkVtbl;
+interface IInternetProtocolSink {
+ CONST_VTBL IInternetProtocolSinkVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolSink_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolSink_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolSink methods ***/
+#define IInternetProtocolSink_Switch(This,pProtocolData) (This)->lpVtbl->Switch(This,pProtocolData)
+#define IInternetProtocolSink_ReportProgress(This,ulStatusCode,szStatusText) (This)->lpVtbl->ReportProgress(This,ulStatusCode,szStatusText)
+#define IInternetProtocolSink_ReportData(This,grfBSCF,ulProgress,ulProgressMax) (This)->lpVtbl->ReportData(This,grfBSCF,ulProgress,ulProgressMax)
+#define IInternetProtocolSink_ReportResult(This,hrResult,dwError,szResult) (This)->lpVtbl->ReportResult(This,hrResult,dwError,szResult)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_Switch_Proxy(
+ IInternetProtocolSink* This,
+ PROTOCOLDATA *pProtocolData);
+void __RPC_STUB IInternetProtocolSink_Switch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportProgress_Proxy(
+ IInternetProtocolSink* This,
+ ULONG ulStatusCode,
+ LPCWSTR szStatusText);
+void __RPC_STUB IInternetProtocolSink_ReportProgress_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportData_Proxy(
+ IInternetProtocolSink* This,
+ DWORD grfBSCF,
+ ULONG ulProgress,
+ ULONG ulProgressMax);
+void __RPC_STUB IInternetProtocolSink_ReportData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolSink_ReportResult_Proxy(
+ IInternetProtocolSink* This,
+ HRESULT hrResult,
+ DWORD dwError,
+ LPCWSTR szResult);
+void __RPC_STUB IInternetProtocolSink_ReportResult_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetProtocolSink_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocol interface
+ */
+#ifndef __IInternetProtocol_INTERFACE_DEFINED__
+#define __IInternetProtocol_INTERFACE_DEFINED__
+
+typedef IInternetProtocol *LPIINTERNETPROTOCOL;
+DEFINE_GUID(IID_IInternetProtocol, 0x79eac9e4, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocol : public IInternetProtocolRoot
+{
+ virtual HRESULT STDMETHODCALLTYPE Read(
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Seek(
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRequest(
+ DWORD dwOptions) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRequest(
+ ) = 0;
+
+};
+#else
+typedef struct IInternetProtocolVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetProtocol* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetProtocol* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetProtocol* This);
+
+ /*** IInternetProtocolRoot methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IInternetProtocol* This,
+ LPCWSTR szUrl,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE_PTR dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *Continue)(
+ IInternetProtocol* This,
+ PROTOCOLDATA *pProtocolData);
+
+ HRESULT (STDMETHODCALLTYPE *Abort)(
+ IInternetProtocol* This,
+ HRESULT hrReason,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *Terminate)(
+ IInternetProtocol* This,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *Suspend)(
+ IInternetProtocol* This);
+
+ HRESULT (STDMETHODCALLTYPE *Resume)(
+ IInternetProtocol* This);
+
+ /*** IInternetProtocol methods ***/
+ HRESULT (STDMETHODCALLTYPE *Read)(
+ IInternetProtocol* This,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+
+ HRESULT (STDMETHODCALLTYPE *Seek)(
+ IInternetProtocol* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+
+ HRESULT (STDMETHODCALLTYPE *LockRequest)(
+ IInternetProtocol* This,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRequest)(
+ IInternetProtocol* This);
+
+ END_INTERFACE
+} IInternetProtocolVtbl;
+interface IInternetProtocol {
+ CONST_VTBL IInternetProtocolVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocol_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocol_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocol_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolRoot methods ***/
+#define IInternetProtocol_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#define IInternetProtocol_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
+#define IInternetProtocol_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
+#define IInternetProtocol_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
+#define IInternetProtocol_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IInternetProtocol_Resume(This) (This)->lpVtbl->Resume(This)
+/*** IInternetProtocol methods ***/
+#define IInternetProtocol_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IInternetProtocol_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IInternetProtocol_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)
+#define IInternetProtocol_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocol_Read_Proxy(
+ IInternetProtocol* This,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+void __RPC_STUB IInternetProtocol_Read_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocol_Seek_Proxy(
+ IInternetProtocol* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+void __RPC_STUB IInternetProtocol_Seek_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocol_LockRequest_Proxy(
+ IInternetProtocol* This,
+ DWORD dwOptions);
+void __RPC_STUB IInternetProtocol_LockRequest_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocol_UnlockRequest_Proxy(
+ IInternetProtocol* This);
+void __RPC_STUB IInternetProtocol_UnlockRequest_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetProtocol_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolInfo interface
+ */
+#ifndef __IInternetProtocolInfo_INTERFACE_DEFINED__
+#define __IInternetProtocolInfo_INTERFACE_DEFINED__
+
+typedef IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
+typedef enum _tagPARSEACTION {
+ PARSE_CANONICALIZE = 1,
+ PARSE_FRIENDLY = 2,
+ PARSE_SECURITY_URL = 3,
+ PARSE_ROOTDOCUMENT = 4,
+ PARSE_DOCUMENT = 5,
+ PARSE_ANCHOR = 6,
+ PARSE_ENCODE = 7,
+ PARSE_DECODE = 8,
+ PARSE_PATH_FROM_URL = 9,
+ PARSE_URL_FROM_PATH = 10,
+ PARSE_MIME = 11,
+ PARSE_SERVER = 12,
+ PARSE_SCHEMA = 13,
+ PARSE_SITE = 14,
+ PARSE_DOMAIN = 15,
+ PARSE_LOCATION = 16,
+ PARSE_SECURITY_DOMAIN = 17,
+ PARSE_ESCAPE = 18,
+ PARSE_UNESCAPE = 19
+} PARSEACTION;
+typedef enum _tagPSUACTION {
+ PSU_DEFAULT = 1,
+ PSU_SECURITY_URL_ONLY = 2
+} PSUACTION;
+typedef enum _tagQUERYOPTION {
+ QUERY_EXPIRATION_DATE = 1,
+ QUERY_TIME_OF_LAST_CHANGE = 2,
+ QUERY_CONTENT_ENCODING = 3,
+ QUERY_CONTENT_TYPE = 4,
+ QUERY_REFRESH = 5,
+ QUERY_RECOMBINE = 6,
+ QUERY_CAN_NAVIGATE = 7,
+ QUERY_USES_NETWORK = 8,
+ QUERY_IS_CACHED = 9,
+ QUERY_IS_INSTALLEDENTRY = 10,
+ QUERY_IS_CACHED_OR_MAPPED = 11,
+ QUERY_USES_CACHE = 12,
+ QUERY_IS_SECURE = 13,
+ QUERY_IS_SAFE = 14,
+ QUERY_USES_HISTORYFOLDER = 15
+} QUERYOPTION;
+DEFINE_GUID(IID_IInternetProtocolInfo, 0x79eac9ec, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolInfo : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ParseUrl(
+ LPCWSTR pwzUrl,
+ PARSEACTION ParseAction,
+ DWORD dwParseFlags,
+ LPWSTR pwzResult,
+ DWORD cchResult,
+ DWORD *pcchResult,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CombineUrl(
+ LPCWSTR pwzBaseUrl,
+ LPCWSTR pwzRelativeUrl,
+ DWORD dwCombineFlags,
+ LPWSTR pwzResult,
+ DWORD cchResult,
+ DWORD *pcchResult,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CompareUrl(
+ LPCWSTR pwzUrl1,
+ LPCWSTR pwzUrl2,
+ DWORD dwCompareFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE QueryInfo(
+ LPCWSTR pwzUrl,
+ QUERYOPTION OueryOption,
+ DWORD dwQueryFlags,
+ LPVOID pBuffer,
+ DWORD cbBuffer,
+ DWORD *pcbBuf,
+ DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetProtocolInfoVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetProtocolInfo* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetProtocolInfo* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetProtocolInfo* This);
+
+ /*** IInternetProtocolInfo methods ***/
+ HRESULT (STDMETHODCALLTYPE *ParseUrl)(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzUrl,
+ PARSEACTION ParseAction,
+ DWORD dwParseFlags,
+ LPWSTR pwzResult,
+ DWORD cchResult,
+ DWORD *pcchResult,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *CombineUrl)(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzBaseUrl,
+ LPCWSTR pwzRelativeUrl,
+ DWORD dwCombineFlags,
+ LPWSTR pwzResult,
+ DWORD cchResult,
+ DWORD *pcchResult,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *CompareUrl)(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzUrl1,
+ LPCWSTR pwzUrl2,
+ DWORD dwCompareFlags);
+
+ HRESULT (STDMETHODCALLTYPE *QueryInfo)(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzUrl,
+ QUERYOPTION OueryOption,
+ DWORD dwQueryFlags,
+ LPVOID pBuffer,
+ DWORD cbBuffer,
+ DWORD *pcbBuf,
+ DWORD dwReserved);
+
+ END_INTERFACE
+} IInternetProtocolInfoVtbl;
+interface IInternetProtocolInfo {
+ CONST_VTBL IInternetProtocolInfoVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolInfo_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolInfo methods ***/
+#define IInternetProtocolInfo_ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->ParseUrl(This,pwzUrl,ParseAction,dwParseFlags,pwzResult,cchResult,pcchResult,dwReserved)
+#define IInternetProtocolInfo_CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved) (This)->lpVtbl->CombineUrl(This,pwzBaseUrl,pwzRelativeUrl,dwCombineFlags,pwzResult,cchResult,pcchResult,dwReserved)
+#define IInternetProtocolInfo_CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags) (This)->lpVtbl->CompareUrl(This,pwzUrl1,pwzUrl2,dwCompareFlags)
+#define IInternetProtocolInfo_QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved) (This)->lpVtbl->QueryInfo(This,pwzUrl,OueryOption,dwQueryFlags,pBuffer,cbBuffer,pcbBuf,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_ParseUrl_Proxy(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzUrl,
+ PARSEACTION ParseAction,
+ DWORD dwParseFlags,
+ LPWSTR pwzResult,
+ DWORD cchResult,
+ DWORD *pcchResult,
+ DWORD dwReserved);
+void __RPC_STUB IInternetProtocolInfo_ParseUrl_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_CombineUrl_Proxy(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzBaseUrl,
+ LPCWSTR pwzRelativeUrl,
+ DWORD dwCombineFlags,
+ LPWSTR pwzResult,
+ DWORD cchResult,
+ DWORD *pcchResult,
+ DWORD dwReserved);
+void __RPC_STUB IInternetProtocolInfo_CombineUrl_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_CompareUrl_Proxy(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzUrl1,
+ LPCWSTR pwzUrl2,
+ DWORD dwCompareFlags);
+void __RPC_STUB IInternetProtocolInfo_CompareUrl_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetProtocolInfo_QueryInfo_Proxy(
+ IInternetProtocolInfo* This,
+ LPCWSTR pwzUrl,
+ QUERYOPTION OueryOption,
+ DWORD dwQueryFlags,
+ LPVOID pBuffer,
+ DWORD cbBuffer,
+ DWORD *pcbBuf,
+ DWORD dwReserved);
+void __RPC_STUB IInternetProtocolInfo_QueryInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetProtocolInfo_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetSession interface
+ */
+#ifndef __IInternetSession_INTERFACE_DEFINED__
+#define __IInternetSession_INTERFACE_DEFINED__
+
+typedef IInternetSession *LPIINTERNETSESSION;
+typedef enum _tagOIBDG_FLAGS {
+ OIBDG_APARTMENTTHREADED = 0x100,
+ OIBDG_DATAONLY = 0x1000
+} OIBDG_FLAGS;
+DEFINE_GUID(IID_IInternetSession, 0x79eac9e7, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetSession : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE RegisterNameSpace(
+ IClassFactory *pCF,
+ REFCLSID rclsid,
+ LPCWSTR pwzProtocol,
+ ULONG cPatterns,
+ const LPCWSTR *ppwzPatterns,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnregisterNameSpace(
+ IClassFactory *pCF,
+ LPCWSTR pszProtocol) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterMimeFilter(
+ IClassFactory *pCF,
+ REFCLSID rclsid,
+ LPCWSTR pwzType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnregisterMimeFilter(
+ IClassFactory *pCF,
+ LPCWSTR pwzType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateBinding(
+ LPBC pBC,
+ LPCWSTR szUrl,
+ IUnknown *pUnkOuter,
+ IUnknown **ppUnk,
+ IInternetProtocol **ppOInetProt,
+ DWORD dwOption) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSessionOption(
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD dwBufferLength,
+ DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetSessionVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetSession* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetSession* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetSession* This);
+
+ /*** IInternetSession methods ***/
+ HRESULT (STDMETHODCALLTYPE *RegisterNameSpace)(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ REFCLSID rclsid,
+ LPCWSTR pwzProtocol,
+ ULONG cPatterns,
+ const LPCWSTR *ppwzPatterns,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *UnregisterNameSpace)(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ LPCWSTR pszProtocol);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterMimeFilter)(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ REFCLSID rclsid,
+ LPCWSTR pwzType);
+
+ HRESULT (STDMETHODCALLTYPE *UnregisterMimeFilter)(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ LPCWSTR pwzType);
+
+ HRESULT (STDMETHODCALLTYPE *CreateBinding)(
+ IInternetSession* This,
+ LPBC pBC,
+ LPCWSTR szUrl,
+ IUnknown *pUnkOuter,
+ IUnknown **ppUnk,
+ IInternetProtocol **ppOInetProt,
+ DWORD dwOption);
+
+ HRESULT (STDMETHODCALLTYPE *SetSessionOption)(
+ IInternetSession* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD dwBufferLength,
+ DWORD dwReserved);
+
+ END_INTERFACE
+} IInternetSessionVtbl;
+interface IInternetSession {
+ CONST_VTBL IInternetSessionVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetSession_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetSession_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetSession methods ***/
+#define IInternetSession_RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved) (This)->lpVtbl->RegisterNameSpace(This,pCF,rclsid,pwzProtocol,cPatterns,ppwzPatterns,dwReserved)
+#define IInternetSession_UnregisterNameSpace(This,pCF,pszProtocol) (This)->lpVtbl->UnregisterNameSpace(This,pCF,pszProtocol)
+#define IInternetSession_RegisterMimeFilter(This,pCF,rclsid,pwzType) (This)->lpVtbl->RegisterMimeFilter(This,pCF,rclsid,pwzType)
+#define IInternetSession_UnregisterMimeFilter(This,pCF,pwzType) (This)->lpVtbl->UnregisterMimeFilter(This,pCF,pwzType)
+#define IInternetSession_CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption) (This)->lpVtbl->CreateBinding(This,pBC,szUrl,pUnkOuter,ppUnk,ppOInetProt,dwOption)
+#define IInternetSession_SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved) (This)->lpVtbl->SetSessionOption(This,dwOption,pBuffer,dwBufferLength,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetSession_RegisterNameSpace_Proxy(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ REFCLSID rclsid,
+ LPCWSTR pwzProtocol,
+ ULONG cPatterns,
+ const LPCWSTR *ppwzPatterns,
+ DWORD dwReserved);
+void __RPC_STUB IInternetSession_RegisterNameSpace_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_UnregisterNameSpace_Proxy(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ LPCWSTR pszProtocol);
+void __RPC_STUB IInternetSession_UnregisterNameSpace_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_RegisterMimeFilter_Proxy(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ REFCLSID rclsid,
+ LPCWSTR pwzType);
+void __RPC_STUB IInternetSession_RegisterMimeFilter_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_UnregisterMimeFilter_Proxy(
+ IInternetSession* This,
+ IClassFactory *pCF,
+ LPCWSTR pwzType);
+void __RPC_STUB IInternetSession_UnregisterMimeFilter_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_CreateBinding_Proxy(
+ IInternetSession* This,
+ LPBC pBC,
+ LPCWSTR szUrl,
+ IUnknown *pUnkOuter,
+ IUnknown **ppUnk,
+ IInternetProtocol **ppOInetProt,
+ DWORD dwOption);
+void __RPC_STUB IInternetSession_CreateBinding_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSession_SetSessionOption_Proxy(
+ IInternetSession* This,
+ DWORD dwOption,
+ LPVOID pBuffer,
+ DWORD dwBufferLength,
+ DWORD dwReserved);
+void __RPC_STUB IInternetSession_SetSessionOption_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetSession_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetSecurityMgrSite interface
+ */
+#ifndef __IInternetSecurityMgrSite_INTERFACE_DEFINED__
+#define __IInternetSecurityMgrSite_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetSecurityMgrSite, 0x79eac9ed, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetSecurityMgrSite : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetWindow(
+ HWND *phwnd) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnableModeless(
+ BOOL fEnable) = 0;
+
+};
+#else
+typedef struct IInternetSecurityMgrSiteVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetSecurityMgrSite* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetSecurityMgrSite* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetSecurityMgrSite* This);
+
+ /*** IInternetSecurityMgrSite methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetWindow)(
+ IInternetSecurityMgrSite* This,
+ HWND *phwnd);
+
+ HRESULT (STDMETHODCALLTYPE *EnableModeless)(
+ IInternetSecurityMgrSite* This,
+ BOOL fEnable);
+
+ END_INTERFACE
+} IInternetSecurityMgrSiteVtbl;
+interface IInternetSecurityMgrSite {
+ CONST_VTBL IInternetSecurityMgrSiteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetSecurityMgrSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetSecurityMgrSite_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetSecurityMgrSite_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetSecurityMgrSite methods ***/
+#define IInternetSecurityMgrSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)
+#define IInternetSecurityMgrSite_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetSecurityMgrSite_GetWindow_Proxy(
+ IInternetSecurityMgrSite* This,
+ HWND *phwnd);
+void __RPC_STUB IInternetSecurityMgrSite_GetWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityMgrSite_EnableModeless_Proxy(
+ IInternetSecurityMgrSite* This,
+ BOOL fEnable);
+void __RPC_STUB IInternetSecurityMgrSite_EnableModeless_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetSecurityMgrSite_INTERFACE_DEFINED__ */
+
+#define SID_SInternetSecurityManager IID_IInternetSecurityManager
+/*****************************************************************************
+ * IInternetSecurityManager interface
+ */
+#ifndef __IInternetSecurityManager_INTERFACE_DEFINED__
+#define __IInternetSecurityManager_INTERFACE_DEFINED__
+
+#define MAX_SIZE_SECURITY_ID 512
+typedef enum __WIDL_urlmon_generated_name_00000007 {
+ PUAF_DEFAULT = 0x0,
+ PUAF_NOUI = 0x1,
+ PUAF_ISFILE = 0x2,
+ PUAF_WARN_IF_DENIED = 0x4,
+ PUAF_FORCEUI_FOREGROUND = 0x8,
+ PUAF_CHECK_TIPS = 0x10
+} PUAF;
+typedef enum __WIDL_urlmon_generated_name_00000008 {
+ SZM_CREATE = 0x0,
+ SZM_DELETE = 0x1
+} SZM_FLAGS;
+DEFINE_GUID(IID_IInternetSecurityManager, 0x79eac9ee, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetSecurityManager : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE SetSecuritySite(
+ IInternetSecurityMgrSite *pSite) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSecuritySite(
+ IInternetSecurityMgrSite **ppSite) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MapUrlToZone(
+ LPCWSTR pwszUrl,
+ DWORD *pdwZone,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
+ LPCWSTR pwszUrl,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
+ LPCWSTR pwszUrl,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwFlags,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
+ LPCWSTR pwszUrl,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetZoneMapping(
+ DWORD dwZone,
+ LPCWSTR lpszPattern,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetZoneMappings(
+ DWORD dwZone,
+ IEnumString **ppenumString,
+ DWORD dwFlags) = 0;
+
+};
+#else
+typedef struct IInternetSecurityManagerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetSecurityManager* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetSecurityManager* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetSecurityManager* This);
+
+ /*** IInternetSecurityManager methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetSecuritySite)(
+ IInternetSecurityManager* This,
+ IInternetSecurityMgrSite *pSite);
+
+ HRESULT (STDMETHODCALLTYPE *GetSecuritySite)(
+ IInternetSecurityManager* This,
+ IInternetSecurityMgrSite **ppSite);
+
+ HRESULT (STDMETHODCALLTYPE *MapUrlToZone)(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ DWORD *pdwZone,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetSecurityId)(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *ProcessUrlAction)(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwFlags,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *QueryCustomPolicy)(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneMapping)(
+ IInternetSecurityManager* This,
+ DWORD dwZone,
+ LPCWSTR lpszPattern,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneMappings)(
+ IInternetSecurityManager* This,
+ DWORD dwZone,
+ IEnumString **ppenumString,
+ DWORD dwFlags);
+
+ END_INTERFACE
+} IInternetSecurityManagerVtbl;
+interface IInternetSecurityManager {
+ CONST_VTBL IInternetSecurityManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetSecurityManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetSecurityManager methods ***/
+#define IInternetSecurityManager_SetSecuritySite(This,pSite) (This)->lpVtbl->SetSecuritySite(This,pSite)
+#define IInternetSecurityManager_GetSecuritySite(This,ppSite) (This)->lpVtbl->GetSecuritySite(This,ppSite)
+#define IInternetSecurityManager_MapUrlToZone(This,pwszUrl,pdwZone,dwFlags) (This)->lpVtbl->MapUrlToZone(This,pwszUrl,pdwZone,dwFlags)
+#define IInternetSecurityManager_GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pwszUrl,pbSecurityId,pcbSecurityId,dwReserved)
+#define IInternetSecurityManager_ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,pwszUrl,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)
+#define IInternetSecurityManager_QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,pwszUrl,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)
+#define IInternetSecurityManager_SetZoneMapping(This,dwZone,lpszPattern,dwFlags) (This)->lpVtbl->SetZoneMapping(This,dwZone,lpszPattern,dwFlags)
+#define IInternetSecurityManager_GetZoneMappings(This,dwZone,ppenumString,dwFlags) (This)->lpVtbl->GetZoneMappings(This,dwZone,ppenumString,dwFlags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_SetSecuritySite_Proxy(
+ IInternetSecurityManager* This,
+ IInternetSecurityMgrSite *pSite);
+void __RPC_STUB IInternetSecurityManager_SetSecuritySite_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetSecuritySite_Proxy(
+ IInternetSecurityManager* This,
+ IInternetSecurityMgrSite **ppSite);
+void __RPC_STUB IInternetSecurityManager_GetSecuritySite_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_MapUrlToZone_Proxy(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ DWORD *pdwZone,
+ DWORD dwFlags);
+void __RPC_STUB IInternetSecurityManager_MapUrlToZone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetSecurityId_Proxy(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved);
+void __RPC_STUB IInternetSecurityManager_GetSecurityId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_ProcessUrlAction_Proxy(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwFlags,
+ DWORD dwReserved);
+void __RPC_STUB IInternetSecurityManager_ProcessUrlAction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_QueryCustomPolicy_Proxy(
+ IInternetSecurityManager* This,
+ LPCWSTR pwszUrl,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwReserved);
+void __RPC_STUB IInternetSecurityManager_QueryCustomPolicy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_SetZoneMapping_Proxy(
+ IInternetSecurityManager* This,
+ DWORD dwZone,
+ LPCWSTR lpszPattern,
+ DWORD dwFlags);
+void __RPC_STUB IInternetSecurityManager_SetZoneMapping_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetSecurityManager_GetZoneMappings_Proxy(
+ IInternetSecurityManager* This,
+ DWORD dwZone,
+ IEnumString **ppenumString,
+ DWORD dwFlags);
+void __RPC_STUB IInternetSecurityManager_GetZoneMappings_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetSecurityManager_INTERFACE_DEFINED__ */
+
+#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager
+/*****************************************************************************
+ * IInternetHostSecurityManager interface
+ */
+#ifndef __IInternetHostSecurityManager_INTERFACE_DEFINED__
+#define __IInternetHostSecurityManager_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetHostSecurityManager, 0x3af280b6, 0xcb3f, 0x11d0, 0x89,0x1e, 0x00,0xc0,0x4f,0xb6,0xbf,0xc4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetHostSecurityManager : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetSecurityId(
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ProcessUrlAction(
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwFlags,
+ DWORD dwReserved) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE QueryCustomPolicy(
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetHostSecurityManagerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetHostSecurityManager* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetHostSecurityManager* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetHostSecurityManager* This);
+
+ /*** IInternetHostSecurityManager methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetSecurityId)(
+ IInternetHostSecurityManager* This,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *ProcessUrlAction)(
+ IInternetHostSecurityManager* This,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwFlags,
+ DWORD dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *QueryCustomPolicy)(
+ IInternetHostSecurityManager* This,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwReserved);
+
+ END_INTERFACE
+} IInternetHostSecurityManagerVtbl;
+interface IInternetHostSecurityManager {
+ CONST_VTBL IInternetHostSecurityManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetHostSecurityManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetHostSecurityManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetHostSecurityManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetHostSecurityManager methods ***/
+#define IInternetHostSecurityManager_GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved) (This)->lpVtbl->GetSecurityId(This,pbSecurityId,pcbSecurityId,dwReserved)
+#define IInternetHostSecurityManager_ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved) (This)->lpVtbl->ProcessUrlAction(This,dwAction,pPolicy,cbPolicy,pContext,cbContext,dwFlags,dwReserved)
+#define IInternetHostSecurityManager_QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved) (This)->lpVtbl->QueryCustomPolicy(This,guidKey,ppPolicy,pcbPolicy,pContext,cbContext,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_GetSecurityId_Proxy(
+ IInternetHostSecurityManager* This,
+ BYTE *pbSecurityId,
+ DWORD *pcbSecurityId,
+ DWORD_PTR dwReserved);
+void __RPC_STUB IInternetHostSecurityManager_GetSecurityId_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_ProcessUrlAction_Proxy(
+ IInternetHostSecurityManager* This,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwFlags,
+ DWORD dwReserved);
+void __RPC_STUB IInternetHostSecurityManager_ProcessUrlAction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetHostSecurityManager_QueryCustomPolicy_Proxy(
+ IInternetHostSecurityManager* This,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ BYTE *pContext,
+ DWORD cbContext,
+ DWORD dwReserved);
+void __RPC_STUB IInternetHostSecurityManager_QueryCustomPolicy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetHostSecurityManager_INTERFACE_DEFINED__ */
+
+#define URLACTION_MIN 0x00001000
+#define URLACTION_DOWNLOAD_MIN 0x00001000
+#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX 0x00001001
+#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX 0x00001004
+#define URLACTION_DOWNLOAD_CURR_MAX 0x00001004
+#define URLACTION_DOWNLOAD_MAX 0x000011ff
+#define URLACTION_ACTIVEX_MIN 0x00001200
+#define URLACTION_ACTIVEX_RUN 0x00001200
+#define URLPOLICY_ACTIVEX_CHECK_LIST 0x00010000
+#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY 0x00001201
+#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY 0x00001202
+#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY 0x00001203
+#define URLACTION_SCRIPT_OVERRIDE_SAFETY 0x00001401
+#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY 0x00001204
+#define URLACTION_ACTIVEX_TREATASUNTRUSTED 0x00001205
+#define URLACTION_ACTIVEX_CURR_MAX 0x00001205
+#define URLACTION_ACTIVEX_MAX 0x000013ff
+#define URLACTION_SCRIPT_MIN 0x00001400
+#define URLACTION_SCRIPT_RUN 0x00001400
+#define URLACTION_SCRIPT_JAVA_USE 0x00001402
+#define URLACTION_SCRIPT_SAFE_ACTIVEX 0x00001405
+#define URLACTION_CROSS_DOMAIN_DATA 0x00001406
+#define URLACTION_SCRIPT_PASTE 0x00001407
+#define URLACTION_SCRIPT_CURR_MAX 0x00001407
+#define URLACTION_SCRIPT_MAX 0x000015ff
+#define URLACTION_HTML_MIN 0x00001600
+#define URLACTION_HTML_SUBMIT_FORMS 0x00001601
+#define URLACTION_HTML_SUBMIT_FORMS_FROM 0x00001602
+#define URLACTION_HTML_SUBMIT_FORMS_TO 0x00001603
+#define URLACTION_HTML_FONT_DOWNLOAD 0x00001604
+#define URLACTION_HTML_JAVA_RUN 0x00001605
+#define URLACTION_HTML_USERDATA_SAVE 0x00001606
+#define URLACTION_HTML_SUBFRAME_NAVIGATE 0x00001607
+#define URLACTION_HTML_META_REFRESH 0x00001608
+#define URLACTION_HTML_MIXED_CONTENT 0x00001609
+#define URLACTION_HTML_MAX 0x000017ff
+#define URLACTION_SHELL_MIN 0x00001800
+#define URLACTION_SHELL_INSTALL_DTITEMS 0x00001800
+#define URLACTION_SHELL_MOVE_OR_COPY 0x00001802
+#define URLACTION_SHELL_FILE_DOWNLOAD 0x00001803
+#define URLACTION_SHELL_VERB 0x00001804
+#define URLACTION_SHELL_WEBVIEW_VERB 0x00001805
+#define URLACTION_SHELL_CURR_MAX 0x00001805
+#define URLACTION_SHELL_MAX 0x000019ff
+#define URLACTION_NETWORK_MIN 0x00001a00
+#define URLACTION_CREDENTIALS_USE 0x00001a00
+#define URLACTION_AUTHENTICATE_CLIENT 0x00001a01
+#define URLACTION_COOKIES 0x00001a02
+#define URLACTION_COOKIES_SESSION 0x00001a03
+#define URLACTION_CLIENT_CERT_PROMPT 0x00001a04
+#define URLACTION_COOKIES_THIRD_PARTY 0x00001a05
+#define URLACTION_COOKIES_SESSION_THIRD_PARTY 0x00001a06
+#define URLACTION_COOKIES_ENABLED 0x00001a10
+#define URLACTION_NETWORK_CURR_MAX 0x00001a10
+#define URLACTION_NETWORK_MAX 0x00001bff
+#define URLACTION_JAVA_MIN 0x00001c00
+#define URLACTION_JAVA_PERMISSIONS 0x00001c00
+#define URLPOLICY_JAVA_PROHIBIT 0x00000000
+#define URLPOLICY_JAVA_HIGH 0x00010000
+#define URLPOLICY_JAVA_MEDIUM 0x00020000
+#define URLPOLICY_JAVA_LOW 0x00030000
+#define URLPOLICY_JAVA_CUSTOM 0x00800000
+#define URLACTION_JAVA_CURR_MAX 0x00001c00
+#define URLACTION_JAVA_MAX 0x00001cff
+#define URLACTION_INFODELIVERY_MIN 0x00001d00
+#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS 0x00001d00
+#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS 0x00001d01
+#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS 0x00001d02
+#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS 0x00001d03
+#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS 0x00001d04
+#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS 0x00001d05
+#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING 0x00001d06
+#define URLACTION_INFODELIVERY_CURR_MAX 0x00001d06
+#define URLACTION_INFODELIVERY_MAX 0x00001dff
+#define URLACTION_CHANNEL_SOFTDIST_MIN 0x00001e00
+#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS 0x00001e05
+#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT 0x00010000
+#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE 0x00020000
+#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL 0x00030000
+#define URLACTION_CHANNEL_SOFTDIST_MAX 0x00001eff
+#define URLPOLICY_ALLOW 0x00
+#define URLPOLICY_QUERY 0x01
+#define URLPOLICY_DISALLOW 0x03
+#define URLPOLICY_NOTIFY_ON_ALLOW 0x10
+#define URLPOLICY_NOTIFY_ON_DISALLOW 0x20
+#define URLPOLICY_LOG_ON_ALLOW 0x40
+#define URLPOLICY_LOG_ON_DISALLOW 0x80
+#define URLPOLICY_DONTCHECKDLGBOX 0x100
+#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK 0x00000000
+#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER 0x00010000
+#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT 0x00020000
+#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY 0x00030000
+#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK 0x00000000
+#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE 0x00010000
+#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY 0x00030000
+#define URLPOLICY_MASK_PERMISSIONS 0x0f
+#define GetUrlPolicyPermissions(dw) (dw & URLPOLICY_MASK_PERMISSIONS)
+#define SetUrlPolicyPermissions(dw,dw2) ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))
+/*****************************************************************************
+ * IInternetZoneManager interface
+ */
+#ifndef __IInternetZoneManager_INTERFACE_DEFINED__
+#define __IInternetZoneManager_INTERFACE_DEFINED__
+
+typedef IInternetZoneManager *LPURLZONEMANAGER;
+typedef enum tagURLZONE {
+ URLZONE_PREDEFINED_MIN = 0,
+ URLZONE_LOCAL_MACHINE = 0,
+ URLZONE_INTRANET = 1,
+ URLZONE_TRUSTED = 2,
+ URLZONE_INTERNET = 3,
+ URLZONE_UNTRUSTED = 4,
+ URLZONE_PREDEFINED_MAX = 999,
+ URLZONE_USER_MIN = 1000,
+ URLZONE_USER_MAX = 10000
+} URLZONE;
+typedef enum tagURLTEMPLATE {
+ URLTEMPLATE_CUSTOM = 0x0,
+ URLTEMPLATE_PREDEFINED_MIN = 0x10000,
+ URLTEMPLATE_LOW = 0x10000,
+ URLTEMPLATE_MEDLOW = 0x10500,
+ URLTEMPLATE_MEDIUM = 0x11000,
+ URLTEMPLATE_MEDHIGH = 0x11500,
+ URLTEMPLATE_HIGH = 0x12000,
+ URLTEMPLATE_PREDEFINED_MAX = 0x20000
+} URLTEMPLATE;
+typedef enum __WIDL_urlmon_generated_name_00000009 {
+ ZAFLAGS_CUSTOM_EDIT = 0x1,
+ ZAFLAGS_ADD_SITES = 0x2,
+ ZAFLAGS_REQUIRE_VERIFICATION = 0x4,
+ ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x8,
+ ZAFLAGS_INCLUDE_INTRANET_SITES = 0x10,
+ ZAFLAGS_NO_UI = 0x20,
+ ZAFLAGS_SUPPORTS_VERIFICATION = 0x40,
+ ZAFLAGS_UNC_AS_INTRANET = 0x80,
+ ZAFLAGS_DETECT_INTRANET = 0x100,
+ ZAFLAGS_USE_LOCKED_ZONES = 0x10000,
+ ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x20000,
+ ZAFLAGS_NO_CACHE = 0x40000
+} ZAFLAGS;
+enum {
+ MAX_ZONE_PATH = 260,
+ MAX_ZONE_DESCRIPTION = 200
+};
+
+typedef struct _ZONEATTRIBUTES {
+ ULONG cbSize;
+ WCHAR szDisplayName[260];
+ WCHAR szDescription[200];
+ WCHAR szIconPath[260];
+ DWORD dwTemplateMinLevel;
+ DWORD dwTemplateRecommended;
+ DWORD dwTemplateCurrentLevel;
+ DWORD dwFlags;
+} ZONEATTRIBUTES;
+typedef struct _ZONEATTRIBUTES *LPZONEATTRIBUTES;
+typedef enum _URLZONEREG {
+ URLZONEREG_DEFAULT = 0,
+ URLZONEREG_HKLM = 1,
+ URLZONEREG_HKCU = 2
+} URLZONEREG;
+DEFINE_GUID(IID_IInternetZoneManager, 0x79eac9ef, 0xbaf9, 0x11ce, 0x8c,0x82, 0x00,0xaa,0x00,0x4b,0xa9,0x0b);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetZoneManager : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetZoneAttributes(
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetZoneAttributes(
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetZoneCustomPolicy(
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ URLZONEREG ulrZoneReg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetZoneCustomPolicy(
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE *ppPolicy,
+ DWORD pcbPolicy,
+ URLZONEREG ulrZoneReg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetZoneActionPolicy(
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetZoneActionPolicy(
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PromptAction(
+ DWORD dwAction,
+ HWND hwndParent,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwPromptFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LogAction(
+ DWORD dwAction,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwLogFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateZoneEnumerator(
+ DWORD *pdwEnum,
+ DWORD *pdwCount,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetZoneAt(
+ DWORD dwEnum,
+ DWORD dwIndex,
+ DWORD *pdwZone) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DestroyZoneEnumerator(
+ DWORD dwEnum) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CopyTemplatePoliciesToZone(
+ DWORD dwTemplate,
+ DWORD dwZone,
+ DWORD dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetZoneManagerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetZoneManager* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetZoneManager* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetZoneManager* This);
+
+ /*** IInternetZoneManager methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ URLZONEREG ulrZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE *ppPolicy,
+ DWORD pcbPolicy,
+ URLZONEREG ulrZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *PromptAction)(
+ IInternetZoneManager* This,
+ DWORD dwAction,
+ HWND hwndParent,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwPromptFlags);
+
+ HRESULT (STDMETHODCALLTYPE *LogAction)(
+ IInternetZoneManager* This,
+ DWORD dwAction,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwLogFlags);
+
+ HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
+ IInternetZoneManager* This,
+ DWORD *pdwEnum,
+ DWORD *pdwCount,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
+ IInternetZoneManager* This,
+ DWORD dwEnum,
+ DWORD dwIndex,
+ DWORD *pdwZone);
+
+ HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
+ IInternetZoneManager* This,
+ DWORD dwEnum);
+
+ HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
+ IInternetZoneManager* This,
+ DWORD dwTemplate,
+ DWORD dwZone,
+ DWORD dwReserved);
+
+ END_INTERFACE
+} IInternetZoneManagerVtbl;
+interface IInternetZoneManager {
+ CONST_VTBL IInternetZoneManagerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetZoneManager_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetZoneManager_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetZoneManager_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetZoneManager methods ***/
+#define IInternetZoneManager_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManager_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManager_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManager_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManager_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManager_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManager_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
+#define IInternetZoneManager_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
+#define IInternetZoneManager_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
+#define IInternetZoneManager_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
+#define IInternetZoneManager_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
+#define IInternetZoneManager_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneAttributes_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+void __RPC_STUB IInternetZoneManager_GetZoneAttributes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneAttributes_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+void __RPC_STUB IInternetZoneManager_SetZoneAttributes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneCustomPolicy_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ URLZONEREG ulrZoneReg);
+void __RPC_STUB IInternetZoneManager_GetZoneCustomPolicy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneCustomPolicy_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE *ppPolicy,
+ DWORD pcbPolicy,
+ URLZONEREG ulrZoneReg);
+void __RPC_STUB IInternetZoneManager_SetZoneCustomPolicy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneActionPolicy_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+void __RPC_STUB IInternetZoneManager_GetZoneActionPolicy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_SetZoneActionPolicy_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+void __RPC_STUB IInternetZoneManager_SetZoneActionPolicy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_PromptAction_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwAction,
+ HWND hwndParent,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwPromptFlags);
+void __RPC_STUB IInternetZoneManager_PromptAction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_LogAction_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwAction,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwLogFlags);
+void __RPC_STUB IInternetZoneManager_LogAction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_CreateZoneEnumerator_Proxy(
+ IInternetZoneManager* This,
+ DWORD *pdwEnum,
+ DWORD *pdwCount,
+ DWORD dwFlags);
+void __RPC_STUB IInternetZoneManager_CreateZoneEnumerator_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_GetZoneAt_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwEnum,
+ DWORD dwIndex,
+ DWORD *pdwZone);
+void __RPC_STUB IInternetZoneManager_GetZoneAt_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_DestroyZoneEnumerator_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwEnum);
+void __RPC_STUB IInternetZoneManager_DestroyZoneEnumerator_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManager_CopyTemplatePoliciesToZone_Proxy(
+ IInternetZoneManager* This,
+ DWORD dwTemplate,
+ DWORD dwZone,
+ DWORD dwReserved);
+void __RPC_STUB IInternetZoneManager_CopyTemplatePoliciesToZone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetZoneManager_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetZoneManagerEx interface
+ */
+#ifndef __IInternetZoneManagerEx_INTERFACE_DEFINED__
+#define __IInternetZoneManagerEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetZoneManagerEx, 0xa4c23339, 0x8e06, 0x431e, 0x9b,0xf4, 0x7e,0x71,0x1c,0x08,0x56,0x48);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetZoneManagerEx : public IInternetZoneManager
+{
+ virtual HRESULT STDMETHODCALLTYPE GetZoneActionPolicyEx(
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetZoneActionPolicyEx(
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags) = 0;
+
+};
+#else
+typedef struct IInternetZoneManagerExVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetZoneManagerEx* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetZoneManagerEx* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetZoneManagerEx* This);
+
+ /*** IInternetZoneManager methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ URLZONEREG ulrZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE *ppPolicy,
+ DWORD pcbPolicy,
+ URLZONEREG ulrZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *PromptAction)(
+ IInternetZoneManagerEx* This,
+ DWORD dwAction,
+ HWND hwndParent,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwPromptFlags);
+
+ HRESULT (STDMETHODCALLTYPE *LogAction)(
+ IInternetZoneManagerEx* This,
+ DWORD dwAction,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwLogFlags);
+
+ HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
+ IInternetZoneManagerEx* This,
+ DWORD *pdwEnum,
+ DWORD *pdwCount,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
+ IInternetZoneManagerEx* This,
+ DWORD dwEnum,
+ DWORD dwIndex,
+ DWORD *pdwZone);
+
+ HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
+ IInternetZoneManagerEx* This,
+ DWORD dwEnum);
+
+ HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
+ IInternetZoneManagerEx* This,
+ DWORD dwTemplate,
+ DWORD dwZone,
+ DWORD dwReserved);
+
+ /*** IInternetZoneManagerEx methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicyEx)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicyEx)(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags);
+
+ END_INTERFACE
+} IInternetZoneManagerExVtbl;
+interface IInternetZoneManagerEx {
+ CONST_VTBL IInternetZoneManagerExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetZoneManagerEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetZoneManagerEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetZoneManagerEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetZoneManager methods ***/
+#define IInternetZoneManagerEx_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
+#define IInternetZoneManagerEx_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
+#define IInternetZoneManagerEx_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
+#define IInternetZoneManagerEx_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
+#define IInternetZoneManagerEx_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
+#define IInternetZoneManagerEx_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
+/*** IInternetZoneManagerEx methods ***/
+#define IInternetZoneManagerEx_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+#define IInternetZoneManagerEx_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx_GetZoneActionPolicyEx_Proxy(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags);
+void __RPC_STUB IInternetZoneManagerEx_GetZoneActionPolicyEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx_SetZoneActionPolicyEx_Proxy(
+ IInternetZoneManagerEx* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags);
+void __RPC_STUB IInternetZoneManagerEx_SetZoneActionPolicyEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetZoneManagerEx_INTERFACE_DEFINED__ */
+
+#define SECURITY_IE_STATE_GREEN 0
+#define SECURITY_IE_STATE_RED 1
+/*****************************************************************************
+ * IInternetZoneManagerEx2 interface
+ */
+#ifndef __IInternetZoneManagerEx2_INTERFACE_DEFINED__
+#define __IInternetZoneManagerEx2_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetZoneManagerEx2, 0xedc17559, 0xdd5d, 0x4846, 0x8e,0xef, 0x8b,0xec,0xba,0x5a,0x4a,0xbf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetZoneManagerEx2 : public IInternetZoneManagerEx
+{
+ virtual HRESULT STDMETHODCALLTYPE GetZoneAttributesEx(
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetZoneSecurityState(
+ DWORD dwZoneIndex,
+ BOOL fRespectPolicy,
+ LPDWORD pdwState,
+ BOOL *pfPolicyEncountered) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetIESecurityState(
+ BOOL fRespectPolicy,
+ LPDWORD pdwState,
+ BOOL *pfPolicyEncountered,
+ BOOL fNoCache) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FixInsecureSettings(
+ ) = 0;
+
+};
+#else
+typedef struct IInternetZoneManagerEx2Vtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetZoneManagerEx2* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetZoneManagerEx2* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetZoneManagerEx2* This);
+
+ /*** IInternetZoneManager methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetZoneAttributes)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneAttributes)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneCustomPolicy)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE **ppPolicy,
+ DWORD *pcbPolicy,
+ URLZONEREG ulrZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneCustomPolicy)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ REFGUID guidKey,
+ BYTE *ppPolicy,
+ DWORD pcbPolicy,
+ URLZONEREG ulrZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicy)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicy)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg);
+
+ HRESULT (STDMETHODCALLTYPE *PromptAction)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwAction,
+ HWND hwndParent,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwPromptFlags);
+
+ HRESULT (STDMETHODCALLTYPE *LogAction)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwAction,
+ LPCWSTR pwszUrl,
+ LPCWSTR pwszText,
+ DWORD dwLogFlags);
+
+ HRESULT (STDMETHODCALLTYPE *CreateZoneEnumerator)(
+ IInternetZoneManagerEx2* This,
+ DWORD *pdwEnum,
+ DWORD *pdwCount,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneAt)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwEnum,
+ DWORD dwIndex,
+ DWORD *pdwZone);
+
+ HRESULT (STDMETHODCALLTYPE *DestroyZoneEnumerator)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwEnum);
+
+ HRESULT (STDMETHODCALLTYPE *CopyTemplatePoliciesToZone)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwTemplate,
+ DWORD dwZone,
+ DWORD dwReserved);
+
+ /*** IInternetZoneManagerEx methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetZoneActionPolicyEx)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *SetZoneActionPolicyEx)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ DWORD dwAction,
+ BYTE *pPolicy,
+ DWORD cbPolicy,
+ URLZONEREG urlZoneReg,
+ DWORD dwFlags);
+
+ /*** IInternetZoneManagerEx2 methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetZoneAttributesEx)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetZoneSecurityState)(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZoneIndex,
+ BOOL fRespectPolicy,
+ LPDWORD pdwState,
+ BOOL *pfPolicyEncountered);
+
+ HRESULT (STDMETHODCALLTYPE *GetIESecurityState)(
+ IInternetZoneManagerEx2* This,
+ BOOL fRespectPolicy,
+ LPDWORD pdwState,
+ BOOL *pfPolicyEncountered,
+ BOOL fNoCache);
+
+ HRESULT (STDMETHODCALLTYPE *FixInsecureSettings)(
+ IInternetZoneManagerEx2* This);
+
+ END_INTERFACE
+} IInternetZoneManagerEx2Vtbl;
+interface IInternetZoneManagerEx2 {
+ CONST_VTBL IInternetZoneManagerEx2Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetZoneManagerEx2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetZoneManagerEx2_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetZoneManagerEx2_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetZoneManager methods ***/
+#define IInternetZoneManagerEx2_GetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->GetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx2_SetZoneAttributes(This,dwZone,pZoneAttributes) (This)->lpVtbl->SetZoneAttributes(This,dwZone,pZoneAttributes)
+#define IInternetZoneManagerEx2_GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->GetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx2_SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg) (This)->lpVtbl->SetZoneCustomPolicy(This,dwZone,guidKey,ppPolicy,pcbPolicy,ulrZoneReg)
+#define IInternetZoneManagerEx2_GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->GetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx2_SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg) (This)->lpVtbl->SetZoneActionPolicy(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg)
+#define IInternetZoneManagerEx2_PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags) (This)->lpVtbl->PromptAction(This,dwAction,hwndParent,pwszUrl,pwszText,dwPromptFlags)
+#define IInternetZoneManagerEx2_LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags) (This)->lpVtbl->LogAction(This,dwAction,pwszUrl,pwszText,dwLogFlags)
+#define IInternetZoneManagerEx2_CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags) (This)->lpVtbl->CreateZoneEnumerator(This,pdwEnum,pdwCount,dwFlags)
+#define IInternetZoneManagerEx2_GetZoneAt(This,dwEnum,dwIndex,pdwZone) (This)->lpVtbl->GetZoneAt(This,dwEnum,dwIndex,pdwZone)
+#define IInternetZoneManagerEx2_DestroyZoneEnumerator(This,dwEnum) (This)->lpVtbl->DestroyZoneEnumerator(This,dwEnum)
+#define IInternetZoneManagerEx2_CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved) (This)->lpVtbl->CopyTemplatePoliciesToZone(This,dwTemplate,dwZone,dwReserved)
+/*** IInternetZoneManagerEx methods ***/
+#define IInternetZoneManagerEx2_GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->GetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+#define IInternetZoneManagerEx2_SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags) (This)->lpVtbl->SetZoneActionPolicyEx(This,dwZone,dwAction,pPolicy,cbPolicy,urlZoneReg,dwFlags)
+/*** IInternetZoneManagerEx2 methods ***/
+#define IInternetZoneManagerEx2_GetZoneAttributesEx(This,dwZone,pZoneAttributes,dwFlags) (This)->lpVtbl->GetZoneAttributesEx(This,dwZone,pZoneAttributes,dwFlags)
+#define IInternetZoneManagerEx2_GetZoneSecurityState(This,dwZoneIndex,fRespectPolicy,pdwState,pfPolicyEncountered) (This)->lpVtbl->GetZoneSecurityState(This,dwZoneIndex,fRespectPolicy,pdwState,pfPolicyEncountered)
+#define IInternetZoneManagerEx2_GetIESecurityState(This,fRespectPolicy,pdwState,pfPolicyEncountered,fNoCache) (This)->lpVtbl->GetIESecurityState(This,fRespectPolicy,pdwState,pfPolicyEncountered,fNoCache)
+#define IInternetZoneManagerEx2_FixInsecureSettings(This) (This)->lpVtbl->FixInsecureSettings(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetZoneAttributesEx_Proxy(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZone,
+ ZONEATTRIBUTES *pZoneAttributes,
+ DWORD dwFlags);
+void __RPC_STUB IInternetZoneManagerEx2_GetZoneAttributesEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetZoneSecurityState_Proxy(
+ IInternetZoneManagerEx2* This,
+ DWORD dwZoneIndex,
+ BOOL fRespectPolicy,
+ LPDWORD pdwState,
+ BOOL *pfPolicyEncountered);
+void __RPC_STUB IInternetZoneManagerEx2_GetZoneSecurityState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_GetIESecurityState_Proxy(
+ IInternetZoneManagerEx2* This,
+ BOOL fRespectPolicy,
+ LPDWORD pdwState,
+ BOOL *pfPolicyEncountered,
+ BOOL fNoCache);
+void __RPC_STUB IInternetZoneManagerEx2_GetIESecurityState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IInternetZoneManagerEx2_FixInsecureSettings_Proxy(
+ IInternetZoneManagerEx2* This);
+void __RPC_STUB IInternetZoneManagerEx2_FixInsecureSettings_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetZoneManagerEx2_INTERFACE_DEFINED__ */
+
+typedef struct _tagSOFTDISTINFO {
+ ULONG cbSize;
+ DWORD dwFlags;
+ DWORD dwAdState;
+ LPWSTR szTitle;
+ LPWSTR szAbstract;
+ LPWSTR szHREF;
+ DWORD dwInstalledVersionMS;
+ DWORD dwInstalledVersionLS;
+ DWORD dwUpdateVersionMS;
+ DWORD dwUpdateVersionLS;
+ DWORD dwAdvertisedVersionMS;
+ DWORD dwAdvertisedVersionLS;
+ DWORD dwReserved;
+} SOFTDISTINFO;
+typedef struct _tagSOFTDISTINFO *LPSOFTDISTINFO;
+typedef struct _tagCODEBASEHOLD {
+ DWORD cbSize;
+ LPWSTR szDistUnit;
+ LPWSTR szCodeBase;
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+ DWORD dwStyle;
+} CODEBASEHOLD;
+typedef struct _tagCODEBASEHOLD *LPCODEBASEHOLD;
+/*****************************************************************************
+ * ISoftDistExt interface
+ */
+#ifndef __ISoftDistExt_INTERFACE_DEFINED__
+#define __ISoftDistExt_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISoftDistExt, 0xb15b8dc1, 0xc7e1, 0x11d0, 0x86,0x80, 0x00,0xaa,0x00,0xbd,0xcb,0x71);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface ISoftDistExt : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE ProcessSoftDist(
+ LPCWSTR szCDFURL,
+ IXMLElement *pSoftDistElement,
+ LPSOFTDISTINFO lpsdi) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFirstCodeBase(
+ LPWSTR *szCodeBase,
+ LPDWORD dwMaxSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetNextCodeBase(
+ LPWSTR *szCodeBase,
+ LPDWORD dwMaxSize) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AsyncInstallDistributionUnit(
+ IBindCtx *pbc,
+ LPVOID lpReserved,
+ DWORD flags,
+ LPCODEBASEHOLD lpcbh) = 0;
+
+};
+#else
+typedef struct ISoftDistExtVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ ISoftDistExt* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ ISoftDistExt* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ ISoftDistExt* This);
+
+ /*** ISoftDistExt methods ***/
+ HRESULT (STDMETHODCALLTYPE *ProcessSoftDist)(
+ ISoftDistExt* This,
+ LPCWSTR szCDFURL,
+ IXMLElement *pSoftDistElement,
+ LPSOFTDISTINFO lpsdi);
+
+ HRESULT (STDMETHODCALLTYPE *GetFirstCodeBase)(
+ ISoftDistExt* This,
+ LPWSTR *szCodeBase,
+ LPDWORD dwMaxSize);
+
+ HRESULT (STDMETHODCALLTYPE *GetNextCodeBase)(
+ ISoftDistExt* This,
+ LPWSTR *szCodeBase,
+ LPDWORD dwMaxSize);
+
+ HRESULT (STDMETHODCALLTYPE *AsyncInstallDistributionUnit)(
+ ISoftDistExt* This,
+ IBindCtx *pbc,
+ LPVOID lpReserved,
+ DWORD flags,
+ LPCODEBASEHOLD lpcbh);
+
+ END_INTERFACE
+} ISoftDistExtVtbl;
+interface ISoftDistExt {
+ CONST_VTBL ISoftDistExtVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define ISoftDistExt_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISoftDistExt_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISoftDistExt_Release(This) (This)->lpVtbl->Release(This)
+/*** ISoftDistExt methods ***/
+#define ISoftDistExt_ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi) (This)->lpVtbl->ProcessSoftDist(This,szCDFURL,pSoftDistElement,lpsdi)
+#define ISoftDistExt_GetFirstCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetFirstCodeBase(This,szCodeBase,dwMaxSize)
+#define ISoftDistExt_GetNextCodeBase(This,szCodeBase,dwMaxSize) (This)->lpVtbl->GetNextCodeBase(This,szCodeBase,dwMaxSize)
+#define ISoftDistExt_AsyncInstallDistributionUnit(This,pbc,lpReserved,flags,lpcbh) (This)->lpVtbl->AsyncInstallDistributionUnit(This,pbc,lpReserved,flags,lpcbh)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE ISoftDistExt_ProcessSoftDist_Proxy(
+ ISoftDistExt* This,
+ LPCWSTR szCDFURL,
+ IXMLElement *pSoftDistElement,
+ LPSOFTDISTINFO lpsdi);
+void __RPC_STUB ISoftDistExt_ProcessSoftDist_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISoftDistExt_GetFirstCodeBase_Proxy(
+ ISoftDistExt* This,
+ LPWSTR *szCodeBase,
+ LPDWORD dwMaxSize);
+void __RPC_STUB ISoftDistExt_GetFirstCodeBase_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISoftDistExt_GetNextCodeBase_Proxy(
+ ISoftDistExt* This,
+ LPWSTR *szCodeBase,
+ LPDWORD dwMaxSize);
+void __RPC_STUB ISoftDistExt_GetNextCodeBase_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE ISoftDistExt_AsyncInstallDistributionUnit_Proxy(
+ ISoftDistExt* This,
+ IBindCtx *pbc,
+ LPVOID lpReserved,
+ DWORD flags,
+ LPCODEBASEHOLD lpcbh);
+void __RPC_STUB ISoftDistExt_AsyncInstallDistributionUnit_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __ISoftDistExt_INTERFACE_DEFINED__ */
+
+typedef enum _tagINTERNETFEATURELIST {
+ FEATURE_OBJECT_CACHING = 0,
+ FEATURE_ZONE_ELEVATION = 1,
+ FEATURE_MIME_HANDLING = 2,
+ FEATURE_MIME_SNIFFING = 3,
+ FEATURE_WINDOW_RESTRICTIONS = 4,
+ FEATURE_WEBOC_POPUPMANAGEMENT = 5,
+ FEATURE_BEHAVIORS = 6,
+ FEATURE_DISABLE_MK_PROTOCOL = 7,
+ FEATURE_LOCALMACHINE_LOCKDOWN = 8,
+ FEATURE_SECURITYBAND = 9,
+ FEATURE_RESTRICT_ACTIVEXINSTALL = 10,
+ FEATURE_VALIDATE_NAVIGATE_URL = 11,
+ FEATURE_RESTRICT_FILEDOWNLOAD = 12,
+ FEATURE_ADDON_MANAGEMENT = 13,
+ FEATURE_PROTOCOL_LOCKDOWN = 14,
+ FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15,
+ FEATURE_SAFE_BINDTOOBJECT = 16,
+ FEATURE_UNC_SAVEDFILECHECK = 17,
+ FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18,
+ FEATURE_TABBED_BROWSING = 19,
+ FEATURE_SSLUX = 20,
+ FEATURE_DISABLE_NAVIGATION_SOUNDS = 21,
+ FEATURE_DISABLE_LEGACY_COMPRESSION = 22,
+ FEATURE_FORCE_ADDR_AND_STATUS = 23,
+ FEATURE_XMLHTTP = 24,
+ FEATURE_DISABLE_TELNET_PROTOCOL = 25,
+ FEATURE_FEEDS = 26,
+ FEATURE_BLOCK_INPUT_PROMPTS = 27,
+ FEATURE_DOMSTORAGE = 28,
+ FEATURE_XDOMAINREQUEST = 29,
+ FEATURE_DATAURI = 30,
+ FEATURE_AJAX_CONNECTIONSERVICES = 31,
+ FEATURE_ENTRY_COUNT = 32
+} INTERNETFEATURELIST;
+typedef struct _tagPROTOCOLFILTERDATA {
+ DWORD cbSize;
+ IInternetProtocolSink *pProtocolSink;
+ IInternetProtocol *pProtocol;
+ IUnknown *pUnk;
+ DWORD dwFilterFlags;
+} PROTOCOLFILTERDATA;
+/*****************************************************************************
+ * IUri interface
+ */
+#ifndef __IUri_INTERFACE_DEFINED__
+#define __IUri_INTERFACE_DEFINED__
+
+typedef enum __WIDL_urlmon_generated_name_0000000A {
+ Uri_PROPERTY_ABSOLUTE_URI = 0,
+ Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI,
+ Uri_PROPERTY_AUTHORITY = 1,
+ Uri_PROPERTY_DISPLAY_URI = 2,
+ Uri_PROPERTY_DOMAIN = 3,
+ Uri_PROPERTY_EXTENSION = 4,
+ Uri_PROPERTY_FRAGMENT = 5,
+ Uri_PROPERTY_HOST = 6,
+ Uri_PROPERTY_PASSWORD = 7,
+ Uri_PROPERTY_PATH = 8,
+ Uri_PROPERTY_PATH_AND_QUERY = 9,
+ Uri_PROPERTY_QUERY = 10,
+ Uri_PROPERTY_RAW_URI = 11,
+ Uri_PROPERTY_SCHEME_NAME = 12,
+ Uri_PROPERTY_USER_INFO = 13,
+ Uri_PROPERTY_USER_NAME = 14,
+ Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME,
+ Uri_PROPERTY_HOST_TYPE = 15,
+ Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE,
+ Uri_PROPERTY_PORT = 16,
+ Uri_PROPERTY_SCHEME = 17,
+ Uri_PROPERTY_ZONE = 18,
+ Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE
+} Uri_PROPERTY;
+DEFINE_GUID(IID_IUri, 0xa39ee748, 0x6a27, 0x4817, 0xa6,0xf2, 0x13,0x91,0x4b,0xef,0x58,0x90);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUri : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetPropertyBSTR(
+ Uri_PROPERTY uriProp,
+ BSTR *pbstrProperty,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPropertyLength(
+ Uri_PROPERTY uriProp,
+ DWORD *pcchProperty,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPropertyDWORD(
+ Uri_PROPERTY uriProp,
+ DWORD *pdwProperty,
+ DWORD dwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE HasProperty(
+ Uri_PROPERTY uriProp,
+ BOOL *pfHasProperty) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAbsoluteUri(
+ BSTR *pbstrAbsoluteUri) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAuthority(
+ BSTR *pbstrAuthority) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayUri(
+ BSTR *pbstrDisplayString) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDomain(
+ BSTR *pbstrDomain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetExtension(
+ BSTR *pbstrExtension) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFragment(
+ BSTR *pbstrFragment) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetHost(
+ BSTR *pbstrHost) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPassword(
+ BSTR *pbstrPassword) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPath(
+ BSTR *pbstrPath) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPathAndQuery(
+ BSTR *pbstrPathAndQuery) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetQuery(
+ BSTR *pbstrQuery) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRawUri(
+ BSTR *pbstrRawUri) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSchemeName(
+ BSTR *pbstrSchemeName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetUserInfo(
+ BSTR *pbstrUserInfo) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetUserName(
+ BSTR *pbstrUserName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetHostType(
+ DWORD *pdwHostType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPort(
+ DWORD *pdwPort) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetScheme(
+ DWORD *pdwScheme) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetZone(
+ DWORD *pdwZone) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetProperties(
+ LPDWORD pdwFlags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsEqual(
+ IUri *pUri,
+ BOOL *pfEqual) = 0;
+
+};
+#else
+typedef struct IUriVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IUri* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IUri* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IUri* This);
+
+ /*** IUri methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetPropertyBSTR)(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ BSTR *pbstrProperty,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPropertyLength)(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ DWORD *pcchProperty,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPropertyDWORD)(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ DWORD *pdwProperty,
+ DWORD dwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *HasProperty)(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ BOOL *pfHasProperty);
+
+ HRESULT (STDMETHODCALLTYPE *GetAbsoluteUri)(
+ IUri* This,
+ BSTR *pbstrAbsoluteUri);
+
+ HRESULT (STDMETHODCALLTYPE *GetAuthority)(
+ IUri* This,
+ BSTR *pbstrAuthority);
+
+ HRESULT (STDMETHODCALLTYPE *GetDisplayUri)(
+ IUri* This,
+ BSTR *pbstrDisplayString);
+
+ HRESULT (STDMETHODCALLTYPE *GetDomain)(
+ IUri* This,
+ BSTR *pbstrDomain);
+
+ HRESULT (STDMETHODCALLTYPE *GetExtension)(
+ IUri* This,
+ BSTR *pbstrExtension);
+
+ HRESULT (STDMETHODCALLTYPE *GetFragment)(
+ IUri* This,
+ BSTR *pbstrFragment);
+
+ HRESULT (STDMETHODCALLTYPE *GetHost)(
+ IUri* This,
+ BSTR *pbstrHost);
+
+ HRESULT (STDMETHODCALLTYPE *GetPassword)(
+ IUri* This,
+ BSTR *pbstrPassword);
+
+ HRESULT (STDMETHODCALLTYPE *GetPath)(
+ IUri* This,
+ BSTR *pbstrPath);
+
+ HRESULT (STDMETHODCALLTYPE *GetPathAndQuery)(
+ IUri* This,
+ BSTR *pbstrPathAndQuery);
+
+ HRESULT (STDMETHODCALLTYPE *GetQuery)(
+ IUri* This,
+ BSTR *pbstrQuery);
+
+ HRESULT (STDMETHODCALLTYPE *GetRawUri)(
+ IUri* This,
+ BSTR *pbstrRawUri);
+
+ HRESULT (STDMETHODCALLTYPE *GetSchemeName)(
+ IUri* This,
+ BSTR *pbstrSchemeName);
+
+ HRESULT (STDMETHODCALLTYPE *GetUserInfo)(
+ IUri* This,
+ BSTR *pbstrUserInfo);
+
+ HRESULT (STDMETHODCALLTYPE *GetUserName)(
+ IUri* This,
+ BSTR *pbstrUserName);
+
+ HRESULT (STDMETHODCALLTYPE *GetHostType)(
+ IUri* This,
+ DWORD *pdwHostType);
+
+ HRESULT (STDMETHODCALLTYPE *GetPort)(
+ IUri* This,
+ DWORD *pdwPort);
+
+ HRESULT (STDMETHODCALLTYPE *GetScheme)(
+ IUri* This,
+ DWORD *pdwScheme);
+
+ HRESULT (STDMETHODCALLTYPE *GetZone)(
+ IUri* This,
+ DWORD *pdwZone);
+
+ HRESULT (STDMETHODCALLTYPE *GetProperties)(
+ IUri* This,
+ LPDWORD pdwFlags);
+
+ HRESULT (STDMETHODCALLTYPE *IsEqual)(
+ IUri* This,
+ IUri *pUri,
+ BOOL *pfEqual);
+
+ END_INTERFACE
+} IUriVtbl;
+interface IUri {
+ CONST_VTBL IUriVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUri_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUri_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUri_Release(This) (This)->lpVtbl->Release(This)
+/*** IUri methods ***/
+#define IUri_GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags) (This)->lpVtbl->GetPropertyBSTR(This,uriProp,pbstrProperty,dwFlags)
+#define IUri_GetPropertyLength(This,uriProp,pcchProperty,dwFlags) (This)->lpVtbl->GetPropertyLength(This,uriProp,pcchProperty,dwFlags)
+#define IUri_GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags) (This)->lpVtbl->GetPropertyDWORD(This,uriProp,pdwProperty,dwFlags)
+#define IUri_HasProperty(This,uriProp,pfHasProperty) (This)->lpVtbl->HasProperty(This,uriProp,pfHasProperty)
+#define IUri_GetAbsoluteUri(This,pbstrAbsoluteUri) (This)->lpVtbl->GetAbsoluteUri(This,pbstrAbsoluteUri)
+#define IUri_GetAuthority(This,pbstrAuthority) (This)->lpVtbl->GetAuthority(This,pbstrAuthority)
+#define IUri_GetDisplayUri(This,pbstrDisplayString) (This)->lpVtbl->GetDisplayUri(This,pbstrDisplayString)
+#define IUri_GetDomain(This,pbstrDomain) (This)->lpVtbl->GetDomain(This,pbstrDomain)
+#define IUri_GetExtension(This,pbstrExtension) (This)->lpVtbl->GetExtension(This,pbstrExtension)
+#define IUri_GetFragment(This,pbstrFragment) (This)->lpVtbl->GetFragment(This,pbstrFragment)
+#define IUri_GetHost(This,pbstrHost) (This)->lpVtbl->GetHost(This,pbstrHost)
+#define IUri_GetPassword(This,pbstrPassword) (This)->lpVtbl->GetPassword(This,pbstrPassword)
+#define IUri_GetPath(This,pbstrPath) (This)->lpVtbl->GetPath(This,pbstrPath)
+#define IUri_GetPathAndQuery(This,pbstrPathAndQuery) (This)->lpVtbl->GetPathAndQuery(This,pbstrPathAndQuery)
+#define IUri_GetQuery(This,pbstrQuery) (This)->lpVtbl->GetQuery(This,pbstrQuery)
+#define IUri_GetRawUri(This,pbstrRawUri) (This)->lpVtbl->GetRawUri(This,pbstrRawUri)
+#define IUri_GetSchemeName(This,pbstrSchemeName) (This)->lpVtbl->GetSchemeName(This,pbstrSchemeName)
+#define IUri_GetUserInfo(This,pbstrUserInfo) (This)->lpVtbl->GetUserInfo(This,pbstrUserInfo)
+#define IUri_GetUserName(This,pbstrUserName) (This)->lpVtbl->GetUserName(This,pbstrUserName)
+#define IUri_GetHostType(This,pdwHostType) (This)->lpVtbl->GetHostType(This,pdwHostType)
+#define IUri_GetPort(This,pdwPort) (This)->lpVtbl->GetPort(This,pdwPort)
+#define IUri_GetScheme(This,pdwScheme) (This)->lpVtbl->GetScheme(This,pdwScheme)
+#define IUri_GetZone(This,pdwZone) (This)->lpVtbl->GetZone(This,pdwZone)
+#define IUri_GetProperties(This,pdwFlags) (This)->lpVtbl->GetProperties(This,pdwFlags)
+#define IUri_IsEqual(This,pUri,pfEqual) (This)->lpVtbl->IsEqual(This,pUri,pfEqual)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUri_GetPropertyBSTR_Proxy(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ BSTR *pbstrProperty,
+ DWORD dwFlags);
+void __RPC_STUB IUri_GetPropertyBSTR_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPropertyLength_Proxy(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ DWORD *pcchProperty,
+ DWORD dwFlags);
+void __RPC_STUB IUri_GetPropertyLength_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPropertyDWORD_Proxy(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ DWORD *pdwProperty,
+ DWORD dwFlags);
+void __RPC_STUB IUri_GetPropertyDWORD_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_HasProperty_Proxy(
+ IUri* This,
+ Uri_PROPERTY uriProp,
+ BOOL *pfHasProperty);
+void __RPC_STUB IUri_HasProperty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetAbsoluteUri_Proxy(
+ IUri* This,
+ BSTR *pbstrAbsoluteUri);
+void __RPC_STUB IUri_GetAbsoluteUri_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetAuthority_Proxy(
+ IUri* This,
+ BSTR *pbstrAuthority);
+void __RPC_STUB IUri_GetAuthority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetDisplayUri_Proxy(
+ IUri* This,
+ BSTR *pbstrDisplayString);
+void __RPC_STUB IUri_GetDisplayUri_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetDomain_Proxy(
+ IUri* This,
+ BSTR *pbstrDomain);
+void __RPC_STUB IUri_GetDomain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetExtension_Proxy(
+ IUri* This,
+ BSTR *pbstrExtension);
+void __RPC_STUB IUri_GetExtension_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetFragment_Proxy(
+ IUri* This,
+ BSTR *pbstrFragment);
+void __RPC_STUB IUri_GetFragment_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetHost_Proxy(
+ IUri* This,
+ BSTR *pbstrHost);
+void __RPC_STUB IUri_GetHost_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPassword_Proxy(
+ IUri* This,
+ BSTR *pbstrPassword);
+void __RPC_STUB IUri_GetPassword_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPath_Proxy(
+ IUri* This,
+ BSTR *pbstrPath);
+void __RPC_STUB IUri_GetPath_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPathAndQuery_Proxy(
+ IUri* This,
+ BSTR *pbstrPathAndQuery);
+void __RPC_STUB IUri_GetPathAndQuery_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetQuery_Proxy(
+ IUri* This,
+ BSTR *pbstrQuery);
+void __RPC_STUB IUri_GetQuery_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetRawUri_Proxy(
+ IUri* This,
+ BSTR *pbstrRawUri);
+void __RPC_STUB IUri_GetRawUri_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetSchemeName_Proxy(
+ IUri* This,
+ BSTR *pbstrSchemeName);
+void __RPC_STUB IUri_GetSchemeName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetUserInfo_Proxy(
+ IUri* This,
+ BSTR *pbstrUserInfo);
+void __RPC_STUB IUri_GetUserInfo_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetUserName_Proxy(
+ IUri* This,
+ BSTR *pbstrUserName);
+void __RPC_STUB IUri_GetUserName_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetHostType_Proxy(
+ IUri* This,
+ DWORD *pdwHostType);
+void __RPC_STUB IUri_GetHostType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetPort_Proxy(
+ IUri* This,
+ DWORD *pdwPort);
+void __RPC_STUB IUri_GetPort_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetScheme_Proxy(
+ IUri* This,
+ DWORD *pdwScheme);
+void __RPC_STUB IUri_GetScheme_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetZone_Proxy(
+ IUri* This,
+ DWORD *pdwZone);
+void __RPC_STUB IUri_GetZone_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_GetProperties_Proxy(
+ IUri* This,
+ LPDWORD pdwFlags);
+void __RPC_STUB IUri_GetProperties_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IUri_IsEqual_Proxy(
+ IUri* This,
+ IUri *pUri,
+ BOOL *pfEqual);
+void __RPC_STUB IUri_IsEqual_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IUri_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IUriContainer interface
+ */
+#ifndef __IUriContainer_INTERFACE_DEFINED__
+#define __IUriContainer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IUriContainer, 0xa158a630, 0xed6f, 0x45fb, 0xb9,0x87, 0xf6,0x86,0x76,0xf5,0x77,0x52);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IUriContainer : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetIUri(
+ IUri **ppIUri) = 0;
+
+};
+#else
+typedef struct IUriContainerVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IUriContainer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IUriContainer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IUriContainer* This);
+
+ /*** IUriContainer methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetIUri)(
+ IUriContainer* This,
+ IUri **ppIUri);
+
+ END_INTERFACE
+} IUriContainerVtbl;
+interface IUriContainer {
+ CONST_VTBL IUriContainerVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IUriContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IUriContainer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IUriContainer_Release(This) (This)->lpVtbl->Release(This)
+/*** IUriContainer methods ***/
+#define IUriContainer_GetIUri(This,ppIUri) (This)->lpVtbl->GetIUri(This,ppIUri)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IUriContainer_GetIUri_Proxy(
+ IUriContainer* This,
+ IUri **ppIUri);
+void __RPC_STUB IUriContainer_GetIUri_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IUriContainer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IInternetProtocolEx interface
+ */
+#ifndef __IInternetProtocolEx_INTERFACE_DEFINED__
+#define __IInternetProtocolEx_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IInternetProtocolEx, 0xc7a98e66, 0x1010, 0x492c, 0xa1,0xc8, 0xc8,0x09,0xe1,0xf7,0x59,0x05);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IInternetProtocolEx : public IInternetProtocol
+{
+ virtual HRESULT STDMETHODCALLTYPE StartEx(
+ IUri *pUri,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE *dwReserved) = 0;
+
+};
+#else
+typedef struct IInternetProtocolExVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IInternetProtocolEx* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IInternetProtocolEx* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IInternetProtocolEx* This);
+
+ /*** IInternetProtocolRoot methods ***/
+ HRESULT (STDMETHODCALLTYPE *Start)(
+ IInternetProtocolEx* This,
+ LPCWSTR szUrl,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE_PTR dwReserved);
+
+ HRESULT (STDMETHODCALLTYPE *Continue)(
+ IInternetProtocolEx* This,
+ PROTOCOLDATA *pProtocolData);
+
+ HRESULT (STDMETHODCALLTYPE *Abort)(
+ IInternetProtocolEx* This,
+ HRESULT hrReason,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *Terminate)(
+ IInternetProtocolEx* This,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *Suspend)(
+ IInternetProtocolEx* This);
+
+ HRESULT (STDMETHODCALLTYPE *Resume)(
+ IInternetProtocolEx* This);
+
+ /*** IInternetProtocol methods ***/
+ HRESULT (STDMETHODCALLTYPE *Read)(
+ IInternetProtocolEx* This,
+ void *pv,
+ ULONG cb,
+ ULONG *pcbRead);
+
+ HRESULT (STDMETHODCALLTYPE *Seek)(
+ IInternetProtocolEx* This,
+ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER *plibNewPosition);
+
+ HRESULT (STDMETHODCALLTYPE *LockRequest)(
+ IInternetProtocolEx* This,
+ DWORD dwOptions);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRequest)(
+ IInternetProtocolEx* This);
+
+ /*** IInternetProtocolEx methods ***/
+ HRESULT (STDMETHODCALLTYPE *StartEx)(
+ IInternetProtocolEx* This,
+ IUri *pUri,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE *dwReserved);
+
+ END_INTERFACE
+} IInternetProtocolExVtbl;
+interface IInternetProtocolEx {
+ CONST_VTBL IInternetProtocolExVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IInternetProtocolEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IInternetProtocolEx_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IInternetProtocolEx_Release(This) (This)->lpVtbl->Release(This)
+/*** IInternetProtocolRoot methods ***/
+#define IInternetProtocolEx_Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->Start(This,szUrl,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#define IInternetProtocolEx_Continue(This,pProtocolData) (This)->lpVtbl->Continue(This,pProtocolData)
+#define IInternetProtocolEx_Abort(This,hrReason,dwOptions) (This)->lpVtbl->Abort(This,hrReason,dwOptions)
+#define IInternetProtocolEx_Terminate(This,dwOptions) (This)->lpVtbl->Terminate(This,dwOptions)
+#define IInternetProtocolEx_Suspend(This) (This)->lpVtbl->Suspend(This)
+#define IInternetProtocolEx_Resume(This) (This)->lpVtbl->Resume(This)
+/*** IInternetProtocol methods ***/
+#define IInternetProtocolEx_Read(This,pv,cb,pcbRead) (This)->lpVtbl->Read(This,pv,cb,pcbRead)
+#define IInternetProtocolEx_Seek(This,dlibMove,dwOrigin,plibNewPosition) (This)->lpVtbl->Seek(This,dlibMove,dwOrigin,plibNewPosition)
+#define IInternetProtocolEx_LockRequest(This,dwOptions) (This)->lpVtbl->LockRequest(This,dwOptions)
+#define IInternetProtocolEx_UnlockRequest(This) (This)->lpVtbl->UnlockRequest(This)
+/*** IInternetProtocolEx methods ***/
+#define IInternetProtocolEx_StartEx(This,pUri,pOIProtSink,pOIBindInfo,grfPI,dwReserved) (This)->lpVtbl->StartEx(This,pUri,pOIProtSink,pOIBindInfo,grfPI,dwReserved)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IInternetProtocolEx_StartEx_Proxy(
+ IInternetProtocolEx* This,
+ IUri *pUri,
+ IInternetProtocolSink *pOIProtSink,
+ IInternetBindInfo *pOIBindInfo,
+ DWORD grfPI,
+ HANDLE *dwReserved);
+void __RPC_STUB IInternetProtocolEx_StartEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IInternetProtocolEx_INTERFACE_DEFINED__ */
+
+#define CONFIRMSAFETYACTION_LOADOBJECT 0x00000001
+struct CONFIRMSAFETY {
+ CLSID clsid;
+ IUnknown *pUnk;
+ DWORD dwFlags;
+};
+
+EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;
+DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);
+DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);
+DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
+DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
+DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);
+DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);
+DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);
+DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);
+#define URLMON_OPTION_USERAGENT 0x10000001
+#define URLMON_OPTION_USERAGENT_REFRESH 0x10000002
+#define URLMON_OPTION_URL_ENCODING 0x10000004
+#define MK_S_ASYNCHRONOUS _HRESULT_TYPEDEF_(0x000401E8)
+#ifndef S_ASYNCHRONOUS
+#define S_ASYNCHRONOUS MK_S_ASYNCHRONOUS
+#endif
+#define INET_E_ERROR_FIRST _HRESULT_TYPEDEF_(0x800C0002)
+#define INET_E_INVALID_URL _HRESULT_TYPEDEF_(0x800C0002)
+#define INET_E_NO_SESSION _HRESULT_TYPEDEF_(0x800C0003)
+#define INET_E_CANNOT_CONNECT _HRESULT_TYPEDEF_(0x800C0004)
+#define INET_E_RESOURCE_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0005)
+#define INET_E_OBJECT_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0006)
+#define INET_E_DATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x800C0007)
+#define INET_E_DOWNLOAD_FAILURE _HRESULT_TYPEDEF_(0x800C0008)
+#define INET_E_AUTHENTICATION_REQUIRED _HRESULT_TYPEDEF_(0x800C0009)
+#define INET_E_NO_VALID_MEDIA _HRESULT_TYPEDEF_(0x800C000A)
+#define INET_E_CONNECTION_TIMEOUT _HRESULT_TYPEDEF_(0x800C000B)
+#define INET_E_INVALID_REQUEST _HRESULT_TYPEDEF_(0x800C000C)
+#define INET_E_UNKNOWN_PROTOCOL _HRESULT_TYPEDEF_(0x800C000D)
+#define INET_E_SECURITY_PROBLEM _HRESULT_TYPEDEF_(0x800C000E)
+#define INET_E_CANNOT_LOAD_DATA _HRESULT_TYPEDEF_(0x800C000F)
+#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)
+#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)
+#define INET_E_QUERYOPTION_UNKNOWN _HRESULT_TYPEDEF_(0x800C0013)
+#define INET_E_REDIRECT_FAILED _HRESULT_TYPEDEF_(0x800C0014)
+#define INET_E_REDIRECT_TO_DIR _HRESULT_TYPEDEF_(0x800C0015)
+#define INET_E_CANNOT_LOCK_REQUEST _HRESULT_TYPEDEF_(0x800C0016)
+#define INET_E_ERROR_LAST INET_E_REDIRECT_TO_DIR
+#define INET_E_DEFAULT_ACTION INET_E_USE_DEFAULT_PROTOCOLHANDLER
+HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);
+HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);
+HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);
+HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);
+HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);
+HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);
+HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);
+HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);
+HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);
+HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);
+HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
+HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);
+HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);
+HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);
+HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);
+HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);
+HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);
+HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);
+HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);
+HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);
+HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);
+HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);
+HRESULT WINAPI HlinkGoBack(IUnknown*);
+HRESULT WINAPI HlinkGoForward(IUnknown*);
+HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);
+HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);
+HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);
+HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);
+HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);
+HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);
+HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);
+HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);
+HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);
+HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);
+void WINAPI ReleaseBindInfo(BINDINFO*);
+HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);
+HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);
+HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
+HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);
+#define OInetCombineUrl CoInternetCombineUrl
+#define OInetCompareUrl CoInternetCompareUrl
+#define OInetGetSession CoInternetGetSession
+BOOL WINAPI IsLoggingEnabledA(LPCSTR);
+BOOL WINAPI IsLoggingEnabledW(LPCWSTR);
+#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)
+#define MKSYS_URLMONIKER 6
+#define URL_MK_LEGACY 0
+#define URL_MK_UNIFORM 1
+/* Begin additional prototypes for all interfaces */
+
+ULONG __RPC_USER STGMEDIUM_UserSize (ULONG *, ULONG, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserMarshal (ULONG *, unsigned char *, STGMEDIUM *);
+unsigned char * __RPC_USER STGMEDIUM_UserUnmarshal(ULONG *, unsigned char *, STGMEDIUM *);
+void __RPC_USER STGMEDIUM_UserFree (ULONG *, STGMEDIUM *);
+ULONG __RPC_USER CLIPFORMAT_UserSize (ULONG *, ULONG, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserMarshal (ULONG *, unsigned char *, CLIPFORMAT *);
+unsigned char * __RPC_USER CLIPFORMAT_UserUnmarshal(ULONG *, unsigned char *, CLIPFORMAT *);
+void __RPC_USER CLIPFORMAT_UserFree (ULONG *, CLIPFORMAT *);
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_URLMON_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl
new file mode 100644
index 00000000..c1f7b5a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/urlmon.idl
@@ -0,0 +1,2172 @@
+/*
+ * Copyright (C) 2000 Ulrich Czekalla
+ * Copyright (C) 2003 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+import "servprov.idl";
+import "msxml.idl";
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetUserName")
+cpp_quote("#undef SetPort")
+cpp_quote("#endif")
+
+interface IInternetProtocolSink;
+interface IUri;
+
+/*****************************************************************************
+ * IInternet interface
+ */
+[
+ object,
+ uuid(79eac9e0-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique),
+ local
+]
+interface IInternet : IUnknown
+{
+ typedef [unique] IInternet *LPIINTERNET;
+}
+
+/*****************************************************************************
+ * IBinding interface
+ */
+[
+ object,
+ uuid(79eac9c0-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IBinding : IUnknown
+{
+ typedef [unique] IBinding *LPBINDING;
+
+ HRESULT Abort();
+ HRESULT Suspend();
+ HRESULT Resume();
+
+ HRESULT SetPriority(
+ [in] LONG nPriority);
+
+ HRESULT GetPriority(
+ [out] LONG * pnPriority);
+
+ [local]
+ HRESULT GetBindResult(
+ [out] CLSID *pclsidProtocol,
+ [out] DWORD *pdwResult,
+ [out] LPOLESTR *pszResult,
+ [in, out] DWORD *pdwReserved);
+
+ [call_as(GetBindResult)]
+ HRESULT RemoteGetBindResult(
+ [out] CLSID *pclsidProtocol,
+ [out] DWORD *pdwResult,
+ [out] LPOLESTR *pszResult,
+ [in] DWORD dwReserved);
+}
+
+
+/*****************************************************************************
+ * IBindStatusCallback interface
+ */
+[
+ object,
+ uuid(79eac9c1-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IBindStatusCallback : IUnknown
+{
+ typedef [unique] IBindStatusCallback *LPBINDSTATUSCALLBACK;
+
+ typedef enum
+ {
+ BINDVERB_GET = 0x00000000,
+ BINDVERB_POST = 0x00000001,
+ BINDVERB_PUT = 0x00000002,
+ BINDVERB_CUSTOM = 0x00000003
+ } BINDVERB;
+
+ typedef enum
+ {
+ BINDINFOF_URLENCODESTGMEDDATA = 0x00000001,
+ BINDINFOF_URLENCODEDEXTRAINFO = 0x00000002
+ } BINDINFOF;
+
+ typedef enum
+ {
+ BINDF_ASYNCHRONOUS = 0x00000001,
+ BINDF_ASYNCSTORAGE = 0x00000002,
+ BINDF_NOPROGRESSIVERENDERING = 0x00000004,
+ BINDF_OFFLINEOPERATION = 0x00000008,
+ BINDF_GETNEWESTVERSION = 0x00000010,
+ BINDF_NOWRITECACHE = 0x00000020,
+ BINDF_NEEDFILE = 0x00000040,
+ BINDF_PULLDATA = 0x00000080,
+ BINDF_IGNORESECURITYPROBLEM = 0x00000100,
+ BINDF_RESYNCHRONIZE = 0x00000200,
+ BINDF_HYPERLINK = 0x00000400,
+ BINDF_NO_UI = 0x00000800,
+ BINDF_SILENTOPERATION = 0x00001000,
+ BINDF_PRAGMA_NO_CACHE = 0x00002000,
+ BINDF_GETCLASSOBJECT = 0x00004000,
+ BINDF_RESERVED_1 = 0x00008000,
+ BINDF_FREE_THREADED = 0x00010000,
+ BINDF_DIRECT_READ = 0x00020000,
+ BINDF_FORMS_SUBMIT = 0x00040000,
+ BINDF_GETFROMCACHE_IF_NET_FAIL = 0x00080000,
+ BINDF_FROMURLMON = 0x00100000,
+ BINDF_FWD_BACK = 0x00200000,
+ BINDF_PREFERDEFAULTHANDLER = 0x00400000,
+ BINDF_ENFORCERESTRICTED = 0x00800000
+ } BINDF;
+
+ typedef enum
+ {
+ URL_ENCODING_NONE = 0x00000000,
+ URL_ENCODING_ENABLE_UTF8 = 0x10000000,
+ URL_ENCODING_DISABLE_UTF8 = 0x20000000
+ } URL_ENCODING;
+
+ typedef struct _tagBINDINFO
+ {
+ ULONG cbSize;
+ LPWSTR szExtraInfo;
+ STGMEDIUM stgmedData;
+ DWORD grfBindInfoF;
+ DWORD dwBindVerb;
+ LPWSTR szCustomVerb;
+ DWORD cbstgmedData;
+ DWORD dwOptions;
+ DWORD dwOptionsFlags;
+ DWORD dwCodePage;
+ SECURITY_ATTRIBUTES securityAttributes;
+ IID iid;
+ IUnknown *pUnk;
+ DWORD dwReserved;
+ } BINDINFO;
+
+ typedef struct _REMSECURITY_ATTRIBUTES
+ {
+ DWORD nLength;
+ DWORD lpSecurityDescriptor;
+ BOOL bInheritHandle;
+ } REMSECURITY_ATTRIBUTES, *PREMSECURITY_ATTRIBUTES, *LPREMSECURITY_ATTRIBUTES;
+
+ typedef struct _tagRemBINDINFO
+ {
+ ULONG cbSize;
+ LPWSTR szExtraInfo;
+ DWORD grfBindInfoF;
+ DWORD dwBindVerb;
+ LPWSTR szCustomVerb;
+ DWORD cbstgmedData;
+ DWORD dwOptions;
+ DWORD dwOptionsFlags;
+ DWORD dwCodePage;
+ REMSECURITY_ATTRIBUTES securityAttributes;
+ IID iid;
+ IUnknown *pUnk;
+ DWORD dwReserved;
+ } RemBINDINFO;
+
+ typedef struct tagRemFORMATETC
+ {
+ DWORD cfFormat;
+ DWORD ptd;
+ DWORD dwAspect;
+ LONG lindex;
+ DWORD tymed;
+ } RemFORMATETC, *LPREMFORMATETC;
+
+ typedef enum
+ {
+ BSCF_FIRSTDATANOTIFICATION = 0x01,
+ BSCF_INTERMEDIATEDATANOTIFICATION = 0x02,
+ BSCF_LASTDATANOTIFICATION = 0x04,
+ BSCF_DATAFULLYAVAILABLE = 0x08,
+ BSCF_AVAILABLEDATASIZEUNKNOWN = 0x10,
+ BSCF_SKIPDRAINDATAFORFILEURLS = 0x20,
+ BSCF_64BITLENGTHDOWNLOAD = 0x40
+ } BSCF;
+
+ typedef enum BINDSTATUS
+ {
+ BINDSTATUS_FINDINGRESOURCE = 1,
+ BINDSTATUS_CONNECTING,
+ BINDSTATUS_REDIRECTING,
+ BINDSTATUS_BEGINDOWNLOADDATA,
+ BINDSTATUS_DOWNLOADINGDATA,
+ BINDSTATUS_ENDDOWNLOADDATA,
+ BINDSTATUS_BEGINDOWNLOADCOMPONENTS,
+ BINDSTATUS_INSTALLINGCOMPONENTS,
+ BINDSTATUS_ENDDOWNLOADCOMPONENTS,
+ BINDSTATUS_USINGCACHEDCOPY,
+ BINDSTATUS_SENDINGREQUEST,
+ BINDSTATUS_CLASSIDAVAILABLE,
+ BINDSTATUS_MIMETYPEAVAILABLE,
+ BINDSTATUS_CACHEFILENAMEAVAILABLE,
+ BINDSTATUS_BEGINSYNCOPERATION,
+ BINDSTATUS_ENDSYNCOPERATION,
+ BINDSTATUS_BEGINUPLOADDATA,
+ BINDSTATUS_UPLOADINGDATA,
+ BINDSTATUS_ENDUPLOADINGDATA,
+ BINDSTATUS_PROTOCOLCLASSID,
+ BINDSTATUS_ENCODING,
+ BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE,
+ BINDSTATUS_CLASSINSTALLLOCATION,
+ BINDSTATUS_DECODING,
+ BINDSTATUS_LOADINGMIMEHANDLER,
+ BINDSTATUS_CONTENTDISPOSITIONATTACH,
+ BINDSTATUS_FILTERREPORTMIMETYPE,
+ BINDSTATUS_CLSIDCANINSTANTIATE,
+ BINDSTATUS_IUNKNOWNAVAILABLE,
+ BINDSTATUS_DIRECTBIND,
+ BINDSTATUS_RAWMIMETYPE,
+ BINDSTATUS_PROXYDETECTING,
+ BINDSTATUS_ACCEPTRANGES,
+ BINDSTATUS_COOKIE_SENT,
+ BINDSTATUS_COMPACT_POLICY_RECEIVED,
+ BINDSTATUS_COOKIE_SUPPRESSED,
+ BINDSTATUS_COOKIE_STATE_UNKNOWN,
+ BINDSTATUS_COOKIE_STATE_ACCEPT,
+ BINDSTATUS_COOKIE_STATE_REJECT,
+ BINDSTATUS_COOKIE_STATE_PROMPT,
+ BINDSTATUS_COOKIE_STATE_LEASH,
+ BINDSTATUS_COOKIE_STATE_DOWNGRADE,
+ BINDSTATUS_POLICY_HREF,
+ BINDSTATUS_P3P_HEADER,
+ BINDSTATUS_SESSION_COOKIE_RECEIVED,
+ BINDSTATUS_PERSISTENT_COOKIE_RECEIVED,
+ BINDSTATUS_SESSION_COOKIES_ALLOWED,
+ BINDSTATUS_CACHECONTROL,
+ BINDSTATUS_CONTENTDISPOSITIONFILENAME,
+ BINDSTATUS_MIMETEXTPLAINMISMATCH,
+ BINDSTATUS_PUBLISHERAVAILABLE,
+ BINDSTATUS_DISPLAYNAMEAVAILABLE
+ } BINDSTATUS;
+
+
+ HRESULT OnStartBinding(
+ [in] DWORD dwReserved,
+ [in] IBinding * pib);
+
+ HRESULT GetPriority(
+ [out] LONG * pnPriority);
+
+ HRESULT OnLowResource(
+ [in] DWORD reserved);
+
+ HRESULT OnProgress(
+ [in] ULONG ulProgress,
+ [in] ULONG ulProgressMax,
+ [in] ULONG ulStatusCode,
+ [in] LPCWSTR szStatusText);
+
+ HRESULT OnStopBinding(
+ [in] HRESULT hresult,
+ [in, unique] LPCWSTR szError);
+
+ [local]
+ HRESULT GetBindInfo(
+ [out] DWORD *grfBINDF,
+ [in, out, unique] BINDINFO * pbindinfo);
+
+ [call_as(GetBindInfo)]
+ HRESULT RemoteGetBindInfo(
+ [out] DWORD *grfBINDF,
+ [in, out, unique] RemBINDINFO * pbindinfo,
+ [in, out, unique] RemSTGMEDIUM* pstgmed);
+
+ [local]
+ HRESULT OnDataAvailable(
+ [in] DWORD grfBSCF,
+ [in] DWORD dwSize,
+ [in] FORMATETC* pformatetc,
+ [in] STGMEDIUM* pstgmed);
+
+ [call_as(OnDataAvailable)]
+ HRESULT RemoteOnDataAvailable(
+ [in] DWORD grfBSCF,
+ [in] DWORD dwSize,
+ [in] RemFORMATETC *pformatetc,
+ [in] RemSTGMEDIUM* pstgmed);
+
+ HRESULT OnObjectAvailable(
+ [in] REFIID riid,
+ [in, iid_is(riid)] IUnknown* punk);
+}
+
+/*****************************************************************************
+ * IBindStatusCallbackEx interface
+ */
+[
+ object,
+ uuid(aaa74ef9-8ee7-4659-88d9-f8c504da73cc),
+ pointer_default(unique)
+]
+interface IBindStatusCallbackEx : IBindStatusCallback
+{
+ typedef [unique] IBindStatusCallbackEx *LPBINDSTATUSCALLBACKEX;
+
+ typedef enum {
+ BINDF2_DISABLEBASICOVERHTTP = 0x00000001,
+ BINDF2_DISABLEAUTOCOOKIEHANDLING = 0x00000002,
+ BINDF2_READ_DATA_GREATER_THAN_4GB = 0x00000004,
+ BINDF2_DISABLE_HTTP_REDIRECT_XSECURITYID = 0x00000008,
+ BINDF2_RESERVED_3 = 0x20000000,
+ BINDF2_RESERVED_2 = 0x40000000,
+ BINDF2_RESERVED_1 = 0x80000000,
+ } BINDF2;
+
+ [local]
+ HRESULT GetBindInfoEx(
+ [out] DWORD *grfBINDF,
+ [in, out, unique] BINDINFO *pbindinfo,
+ [out] DWORD *grfBINDF2,
+ [out] DWORD *pdwReserved);
+
+ [call_as(GetBindInfoEx)]
+ HRESULT RemoteGetBindInfoEx(
+ [out] DWORD *grfBINDF,
+ [in, out, unique] RemBINDINFO *pbindinfo,
+ [in, out, unique] RemSTGMEDIUM *pstgmed,
+ [out] DWORD *grfBINDF2,
+ [out] DWORD *pdwReserved);
+}
+
+
+/*****************************************************************************
+ * IAuthenticate interface
+ */
+[
+ object,
+ uuid(79EAC9D0-BAf9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IAuthenticate : IUnknown
+{
+ typedef [unique] IAuthenticate *LPAUTHENTICATION;
+
+ HRESULT Authenticate(
+ [out] HWND* phwnd,
+ [out] LPWSTR *pszUsername,
+ [out] LPWSTR *pszPassword);
+}
+
+/*****************************************************************************
+ * IHttpNegotiate interface
+ */
+[
+ object,
+ uuid(79EAC9D2-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IHttpNegotiate : IUnknown
+{
+ typedef [unique] IHttpNegotiate *LPHTTPNEGOTIATE;
+
+ HRESULT BeginningTransaction(
+ [in] LPCWSTR szURL,
+ [in, unique] LPCWSTR szHeaders,
+ [in] DWORD dwReserved,
+ [out] LPWSTR *pszAdditionalHeaders);
+
+ HRESULT OnResponse(
+ [in] DWORD dwResponseCode,
+ [in, unique] LPCWSTR szResponseHeaders,
+ [in, unique] LPCWSTR szRequestHeaders,
+ [out] LPWSTR *pszAdditionalRequestHeaders);
+}
+
+/*****************************************************************************
+ * IHttpNegotiate2 interface
+ */
+[
+ object,
+ uuid(4F9F9FCB-E0F4-48eb-B7AB-FA2EA9365CB4),
+ pointer_default(unique)
+]
+interface IHttpNegotiate2 : IHttpNegotiate
+{
+ typedef [unique] IHttpNegotiate2 *LPHTTPNEGOTIATE2;
+
+ HRESULT GetRootSecurityId(
+ [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
+ [in, out] DWORD *pcbSecurityId,
+ [in] DWORD_PTR dwReserved);
+}
+
+/*****************************************************************************
+ * IBindHost interface
+ */
+cpp_quote("#define SID_IBindHost IID_IBindHost")
+cpp_quote("#define SID_SBindHost IID_IBindHost")
+[
+ object,
+ uuid(fc4801a1-2ba9-11cf-a229-00aa003d7352),
+ pointer_default(unique)
+]
+interface IBindHost : IUnknown
+{
+ typedef [unique] IBindHost *LPBINDHOST;
+
+ HRESULT CreateMoniker(
+ [in] LPOLESTR szName,
+ [in] IBindCtx *pBC,
+ [out] IMoniker** ppmk,
+ [in] DWORD dwReserved);
+
+ [local]
+ HRESULT MonikerBindToStorage(
+ [in] IMoniker *pMk,
+ [in] IBindCtx *pBC,
+ [in] IBindStatusCallback *pBSC,
+ [in] REFIID riid,
+ [out] void **ppvObj);
+
+ [call_as(MonikerBindToStorage)]
+ HRESULT RemoteMonikerBindToStorage(
+ [in, unique] IMoniker *pMk,
+ [in, unique] IBindCtx *pBC,
+ [in, unique] IBindStatusCallback *pBSC,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppvObj);
+
+ [local]
+ HRESULT MonikerBindToObject(
+ [in] IMoniker *pMk,
+ [in] IBindCtx *pBC,
+ [in] IBindStatusCallback *pBSC,
+ [in] REFIID riid,
+ [out] void **ppvObj);
+
+ [call_as(MonikerBindToObject)]
+ HRESULT RemoteMonikerBindToObject(
+ [in, unique] IMoniker *pMk,
+ [in, unique] IBindCtx *pBC,
+ [in, unique] IBindStatusCallback *pBSC,
+ [in] REFIID riid,
+ [out, iid_is(riid)] IUnknown **ppvObj);
+}
+
+
+/*****************************************************************************
+ * IWinInetInfo interface
+ */
+[
+ object,
+ uuid(79eac9d6-bafa-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IWinInetInfo : IUnknown
+{
+ typedef [unique] IWinInetInfo *LPWININETINFO;
+
+ [local]
+ HRESULT QueryOption(
+ [in] DWORD dwOption,
+ [in, out, size_is(*pcbBuf)] LPVOID pBuffer,
+ [in, out] DWORD *pcbBuf);
+
+ [call_as(QueryOption)]
+ HRESULT RemoteQueryOption(
+ [in] DWORD dwOption,
+ [in, out, size_is(*pcbBuf)] BYTE *pBuffer,
+ [in, out] DWORD *pcbBuf);
+}
+
+
+
+/*****************************************************************************
+ * IWinInetHttpInfo interface
+ */
+[
+ object,
+ uuid(79eac9d8-bafa-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IWinInetHttpInfo : IWinInetInfo
+{
+ typedef [unique] IWinInetHttpInfo *LPWININETHTTPINFO;
+
+ [local]
+ HRESULT QueryInfo(
+ [in] DWORD dwOption,
+ [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
+ [in, out] DWORD *pcbBuf,
+ [in, out] DWORD *pdwFlags,
+ [in, out] DWORD *pdwReserved);
+
+ [call_as(QueryInfo)]
+ HRESULT RemoteQueryInfo(
+ [in] DWORD dwOption,
+ [in,out,size_is(*pcbBuf)] BYTE *pBuffer,
+ [in, out] DWORD *pcbBuf,
+ [in, out] DWORD *pdwFlags,
+ [in, out] DWORD *pdwReserved);
+}
+
+/*****************************************************************************
+ * IWindowForBindingUI interface
+ */
+[
+ local,
+ object,
+ uuid(79eac9d5-bafa-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IWindowForBindingUI : IUnknown
+{
+ typedef [unique] IWindowForBindingUI *LPWINDOWFORBINDINGUI;
+
+ HRESULT GetWindow(
+ [in] REFGUID rguidReason,
+ [out] HWND *phwnd);
+}
+
+/*****************************************************************************
+ * ICodeInstall interface
+ */
+[
+ local,
+ object,
+ uuid(79eac9d1-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface ICodeInstall : IWindowForBindingUI
+{
+ typedef [unique] ICodeInstall *LPCODEINSTALL;
+
+ typedef enum {
+ CIP_DISK_FULL,
+ CIP_ACCESS_DENIED,
+ CIP_NEWER_VERSION_EXISTS,
+ CIP_OLDER_VERSION_EXISTS,
+ CIP_NAME_CONFLICT,
+ CIP_TRUST_VERIFICATION_COMPONENT_MISSING,
+ CIP_EXE_SELF_REGISTERATION_TIMEOUT,
+ CIP_UNSAFE_TO_ABORT,
+ CIP_NEED_REBOOT,
+ CIP_NEED_REBOOT_UI_PERMISSION
+ } CIP_STATUS;
+
+ HRESULT OnCodeInstallProblem(
+ [in] ULONG ulStatusCode,
+ [in, unique] LPCWSTR szDestination,
+ [in, unique] LPCWSTR szSource,
+ [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IHttpSecurity interface
+ */
+[
+ object,
+ uuid(79eac9d7-bafa-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IHttpSecurity : IWindowForBindingUI
+{
+ typedef [unique] IHttpSecurity *LPHTTPSECURITY;
+
+ HRESULT OnSecurityProblem(
+ [in] DWORD dwProblem);
+}
+
+
+/*****************************************************************************
+ * IPersistMoniker interface
+ */
+[
+ object,
+ uuid(79eac9c9-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IPersistMoniker : IUnknown
+{
+ typedef [unique] IPersistMoniker *LPPERSISTMONIKER;
+
+ HRESULT GetClassID(
+ [out] CLSID *pClassID);
+
+ HRESULT IsDirty();
+
+ HRESULT Load(
+ [in] BOOL fFullyAvailable,
+ [in] IMoniker *pimkName,
+ [in] LPBC pibc,
+ [in] DWORD grfMode);
+
+ HRESULT Save(
+ [in] IMoniker *pimkName,
+ [in] LPBC pbc,
+ [in] BOOL fRemember);
+
+ HRESULT SaveCompleted(
+ [in] IMoniker *pimkName,
+ [in] LPBC pibc);
+
+ HRESULT GetCurMoniker(
+ [out] IMoniker **ppimkName);
+}
+
+/*****************************************************************************
+ * IMonikerProp interface
+ */
+[
+ object,
+ uuid(A5CA5F7F-1847-4D87-9C5B-918509F7511D),
+ pointer_default(unique)
+]
+interface IMonikerProp : IUnknown
+{
+ typedef [unique] IMonikerProp *LPMONIKERPROP;
+
+ typedef enum {
+ MIMETYPEPROP = 0,
+ USE_SRC_URL = 1,
+ CLASSIDPROP = 2,
+ TRUSTEDDOWNLOADPROP = 3,
+ POPUPLEVELPROP = 4
+ } MONIKERPROPERTY;
+
+ HRESULT PutProperty(
+ [in] MONIKERPROPERTY mkp,
+ [in] LPCWSTR val);
+}
+
+cpp_quote("#ifndef _LPBINDPROTOCOL_DEFINED")
+cpp_quote("#define _LPBINDPROTOCOL_DEFINED")
+
+/*****************************************************************************
+ * IBindProtocol interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9CD-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IBindProtocol : IUnknown
+{
+ typedef [unique] IBindProtocol *LPBINDPROTOCOL;
+
+ HRESULT CreateBinding(
+ [in] LPCWSTR szUrl,
+ [in] IBindCtx *pbc,
+ [out] IBinding **ppb);
+}
+
+cpp_quote("#endif /* !defined _LPBINDPROTOCOL_DEFINED */")
+
+/*****************************************************************************
+ * IInternetBindInfo interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9E1-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IInternetBindInfo : IUnknown
+{
+ typedef [unique] IInternetBindInfo *LPIINTERNETBINDINFO;
+
+ typedef enum tagBINDSTRING
+ {
+ BINDSTRING_HEADERS = 1,
+ BINDSTRING_ACCEPT_MIMES,
+ BINDSTRING_EXTRA_URL,
+ BINDSTRING_LANGUAGE,
+ BINDSTRING_USERNAME,
+ BINDSTRING_PASSWORD,
+ BINDSTRING_UA_PIXELS,
+ BINDSTRING_UA_COLOR,
+ BINDSTRING_OS,
+ BINDSTRING_USER_AGENT,
+ BINDSTRING_ACCEPT_ENCODINGS,
+ BINDSTRING_POST_COOKIE,
+ BINDSTRING_POST_DATA_MIME,
+ BINDSTRING_URL,
+ BINDSTRING_IID,
+ BINDSTRING_FLAG_BIND_TO_OBJECT,
+ BINDSTRING_PTR_BIND_CONTEXT
+ } BINDSTRING;
+
+ HRESULT GetBindInfo(
+ [out] DWORD *grfBINDF,
+ [in, out, unique] BINDINFO *pbindinfo);
+
+ HRESULT GetBindString(
+ [in] ULONG ulStringType,
+ [in, out] LPOLESTR *ppwzStr,
+ [in] ULONG cEl,
+ [in, out] ULONG *pcElFetched);
+}
+
+/*****************************************************************************
+ * IInternetPriority interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9EB-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IInternetPriority : IUnknown
+{
+ typedef [unique] IInternetPriority *LPIINTERNETPRIORITY;
+
+ HRESULT SetPriority([in] LONG nPriority);
+ HRESULT GetPriority([out] LONG *pnPriority);
+}
+
+/*****************************************************************************
+ * IInternetProtocolRoot interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9E3-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IInternetProtocolRoot : IUnknown
+{
+ typedef [unique] IInternetProtocolRoot *LPIINTERNETPROTOCOLROOT;
+
+ typedef enum _tagPI_FLAGS
+ {
+ PI_PARSE_URL = 0x00000001,
+ PI_FILTER_MODE = 0x00000002,
+ PI_FORCE_ASYNC = 0x00000004,
+ PI_USE_WORKERTHREAD = 0x00000008,
+ PI_MIMEVERIFICATION = 0x00000010,
+ PI_CLSIDLOOKUP = 0x00000020,
+ PI_DATAPROGRESS = 0x00000040,
+ PI_SYNCHRONOUS = 0x00000080,
+ PI_APARTMENTTHREADED = 0x00000100,
+ PI_CLASSINSTALL = 0x00000200,
+ PD_FORCE_SWITCH = 0x00010000
+ } PI_FLAGS;
+
+ typedef struct _tagPROTOCOLDATA
+ {
+ DWORD grfFlags;
+ DWORD dwState;
+ LPVOID pData;
+ ULONG cbData;
+ } PROTOCOLDATA;
+
+ HRESULT Start(
+ [in] LPCWSTR szUrl,
+ [in] IInternetProtocolSink *pOIProtSink,
+ [in] IInternetBindInfo *pOIBindInfo,
+ [in] DWORD grfPI,
+ [in] HANDLE_PTR dwReserved);
+
+ HRESULT Continue(
+ [in] PROTOCOLDATA *pProtocolData);
+
+ HRESULT Abort(
+ [in] HRESULT hrReason,
+ [in] DWORD dwOptions);
+
+ HRESULT Terminate(
+ [in] DWORD dwOptions);
+
+ HRESULT Suspend();
+
+ HRESULT Resume();
+}
+
+/*****************************************************************************
+ * IInternetProtocolSink interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9E5-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IInternetProtocolSink : IUnknown
+{
+ typedef [unique] IInternetProtocolSink *LPIINTERNETPROTOCOLSINK;
+
+ HRESULT Switch(
+ [in] PROTOCOLDATA *pProtocolData);
+
+ HRESULT ReportProgress(
+ [in] ULONG ulStatusCode,
+ [in] LPCWSTR szStatusText);
+
+ HRESULT ReportData(
+ [in] DWORD grfBSCF,
+ [in] ULONG ulProgress,
+ [in] ULONG ulProgressMax);
+
+ HRESULT ReportResult(
+ [in] HRESULT hrResult,
+ [in] DWORD dwError,
+ [in] LPCWSTR szResult);
+}
+
+/*****************************************************************************
+ * IInternetProtocol interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9E4-BAF9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IInternetProtocol : IInternetProtocolRoot
+{
+ typedef [unique] IInternetProtocol *LPIINTERNETPROTOCOL;
+
+ HRESULT Read(
+ [in,out, size_is(cb), length_is(*pcbRead)] void *pv,
+ [in] ULONG cb,
+ [out] ULONG *pcbRead);
+
+ HRESULT Seek(
+ [in] LARGE_INTEGER dlibMove,
+ [in] DWORD dwOrigin,
+ [out] ULARGE_INTEGER *plibNewPosition);
+
+ HRESULT LockRequest(
+ [in] DWORD dwOptions);
+
+ HRESULT UnlockRequest();
+}
+
+/*****************************************************************************
+ * IInternetProtocolInfo interface
+ */
+[
+ local,
+ object,
+ uuid(79eac9ec-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IInternetProtocolInfo : IUnknown
+{
+ typedef [unique] IInternetProtocolInfo *LPIINTERNETPROTOCOLINFO;
+
+ typedef enum _tagPARSEACTION
+ {
+ PARSE_CANONICALIZE = 1,
+ PARSE_FRIENDLY,
+ PARSE_SECURITY_URL,
+ PARSE_ROOTDOCUMENT,
+ PARSE_DOCUMENT,
+ PARSE_ANCHOR,
+ PARSE_ENCODE,
+ PARSE_DECODE,
+ PARSE_PATH_FROM_URL,
+ PARSE_URL_FROM_PATH,
+ PARSE_MIME,
+ PARSE_SERVER,
+ PARSE_SCHEMA,
+ PARSE_SITE,
+ PARSE_DOMAIN,
+ PARSE_LOCATION,
+ PARSE_SECURITY_DOMAIN,
+ PARSE_ESCAPE,
+ PARSE_UNESCAPE
+ } PARSEACTION;
+
+ typedef enum _tagPSUACTION
+ {
+ PSU_DEFAULT = 1,
+ PSU_SECURITY_URL_ONLY
+ } PSUACTION;
+
+ typedef enum _tagQUERYOPTION
+ {
+ QUERY_EXPIRATION_DATE = 1,
+ QUERY_TIME_OF_LAST_CHANGE,
+ QUERY_CONTENT_ENCODING,
+ QUERY_CONTENT_TYPE,
+ QUERY_REFRESH,
+ QUERY_RECOMBINE,
+ QUERY_CAN_NAVIGATE,
+ QUERY_USES_NETWORK,
+ QUERY_IS_CACHED,
+ QUERY_IS_INSTALLEDENTRY,
+ QUERY_IS_CACHED_OR_MAPPED,
+ QUERY_USES_CACHE,
+ QUERY_IS_SECURE,
+ QUERY_IS_SAFE,
+ QUERY_USES_HISTORYFOLDER,
+ QUERY_IS_CACHED_AND_USABLE_OFFLINE
+ } QUERYOPTION;
+
+ HRESULT ParseUrl(
+ [in] LPCWSTR pwzUrl,
+ [in] PARSEACTION ParseAction,
+ [in] DWORD dwParseFlags,
+ [out] LPWSTR pwzResult,
+ [in] DWORD cchResult,
+ [out] DWORD *pcchResult,
+ [in] DWORD dwReserved);
+
+ HRESULT CombineUrl(
+ [in] LPCWSTR pwzBaseUrl,
+ [in] LPCWSTR pwzRelativeUrl,
+ [in] DWORD dwCombineFlags,
+ [out] LPWSTR pwzResult,
+ [in] DWORD cchResult,
+ [out] DWORD *pcchResult,
+ [in] DWORD dwReserved);
+
+ HRESULT CompareUrl(
+ [in] LPCWSTR pwzUrl1,
+ [in] LPCWSTR pwzUrl2,
+ [in] DWORD dwCompareFlags);
+
+ HRESULT QueryInfo(
+ [in] LPCWSTR pwzUrl,
+ [in] QUERYOPTION OueryOption,
+ [in] DWORD dwQueryFlags,
+ [in, out,size_is(*pcbBuf)] LPVOID pBuffer,
+ [in] DWORD cbBuffer,
+ [in, out] DWORD *pcbBuf,
+ [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetSession interface
+ */
+[
+ local,
+ object,
+ uuid(79eac9e7-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IInternetSession : IUnknown
+{
+ typedef [unique] IInternetSession *LPIINTERNETSESSION;
+
+ typedef enum _tagOIBDG_FLAGS
+ {
+ OIBDG_APARTMENTTHREADED = 0x0100,
+ OIBDG_DATAONLY = 0x1000
+ } OIBDG_FLAGS;
+
+ HRESULT RegisterNameSpace(
+ [in] IClassFactory *pCF,
+ [in] REFCLSID rclsid,
+ [in] LPCWSTR pwzProtocol,
+ [in] ULONG cPatterns,
+ [in] const LPCWSTR *ppwzPatterns,
+ [in] DWORD dwReserved);
+
+ HRESULT UnregisterNameSpace(
+ [in] IClassFactory *pCF,
+ [in] LPCWSTR pszProtocol);
+
+ HRESULT RegisterMimeFilter(
+ [in] IClassFactory *pCF,
+ [in] REFCLSID rclsid,
+ [in] LPCWSTR pwzType);
+
+ HRESULT UnregisterMimeFilter(
+ [in] IClassFactory *pCF,
+ [in] LPCWSTR pwzType);
+
+ HRESULT CreateBinding(
+ [in] LPBC pBC,
+ [in] LPCWSTR szUrl,
+ [in] IUnknown *pUnkOuter,
+ [out, unique] IUnknown **ppUnk,
+ [out, unique] IInternetProtocol **ppOInetProt,
+ [in] DWORD dwOption);
+
+ HRESULT SetSessionOption(
+ [in] DWORD dwOption,
+ [in] LPVOID pBuffer,
+ [in] DWORD dwBufferLength,
+ [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetSecurityMgrSite interface
+ */
+[
+ local,
+ object,
+ uuid(79eac9ed-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IInternetSecurityMgrSite : IUnknown
+{
+ HRESULT GetWindow(
+ [out] HWND *phwnd);
+
+ HRESULT EnableModeless(
+ [in] BOOL fEnable);
+}
+
+
+/*****************************************************************************
+ * IInternetSecurityManager interface
+ */
+cpp_quote("#define SID_SInternetSecurityManager IID_IInternetSecurityManager")
+
+[
+ object,
+ uuid(79eac9ee-baf9-11ce-8c82-00aa004ba90b),
+ pointer_default(unique)
+]
+interface IInternetSecurityManager : IUnknown
+{
+ HRESULT SetSecuritySite(
+ [in, unique] IInternetSecurityMgrSite *pSite);
+
+ HRESULT GetSecuritySite(
+ [out] IInternetSecurityMgrSite **ppSite);
+
+ HRESULT MapUrlToZone(
+ [in] LPCWSTR pwszUrl,
+ [out] DWORD *pdwZone,
+ [in] DWORD dwFlags);
+
+cpp_quote("#define MAX_SIZE_SECURITY_ID 512")
+
+ HRESULT GetSecurityId(
+ [in] LPCWSTR pwszUrl,
+ [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
+ [in, out] DWORD *pcbSecurityId,
+ [in] DWORD_PTR dwReserved);
+
+
+ typedef enum {
+ PUAF_DEFAULT = 0x00,
+ PUAF_NOUI = 0x01,
+ PUAF_ISFILE = 0x02,
+ PUAF_WARN_IF_DENIED = 0x04,
+ PUAF_FORCEUI_FOREGROUND = 0x08,
+ PUAF_CHECK_TIPS = 0x10
+ } PUAF;
+
+ HRESULT ProcessUrlAction(
+ [in] LPCWSTR pwszUrl,
+ [in] DWORD dwAction,
+ [out, size_is(cbPolicy)] BYTE *pPolicy,
+ [in] DWORD cbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwFlags,
+ [in] DWORD dwReserved);
+
+ HRESULT QueryCustomPolicy(
+ [in] LPCWSTR pwszUrl,
+ [in] REFGUID guidKey,
+ [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,
+ [out] DWORD *pcbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwReserved);
+
+ typedef enum {
+ SZM_CREATE = 0x0,
+ SZM_DELETE = 0x1
+ } SZM_FLAGS;
+
+ HRESULT SetZoneMapping(
+ [in] DWORD dwZone,
+ [in] LPCWSTR lpszPattern,
+ [in] DWORD dwFlags);
+
+ HRESULT GetZoneMappings(
+ [in] DWORD dwZone,
+ [out] IEnumString **ppenumString,
+ [in] DWORD dwFlags);
+}
+
+/*****************************************************************************
+ * IInternetSecurityManagerEx interface
+ */
+cpp_quote("#define SID_SInternetSecurityManagerEx IID_IInternetSecurityManagerEx")
+
+[
+ object,
+ uuid(f164edf1-cc7c-4f0d-9a94-34222625C393),
+ pointer_default(unique)
+]
+interface IInternetSecurityManagerEx : IInternetSecurityManager
+{
+ HRESULT ProcessUrlActionEx(
+ [in] LPCWSTR pwszUrl,
+ [in] DWORD dwAction,
+ [out] BYTE *pPolicy,
+ [in] DWORD cbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwFlags,
+ [in] DWORD dwReserved,
+ [out] DWORD *pdwOutFlags);
+}
+
+/*****************************************************************************
+ * IInternetSecurityManagerEx2 interface
+ */
+cpp_quote("#define SID_SInternetSecurityManagerEx2 IID_IInternetSecurityManagerEx2")
+
+[
+ object,
+ uuid(f1e50292-a795-4117-8e09-2b560a72ac60),
+ pointer_default(unique)
+]
+interface IInternetSecurityManagerEx2 : IInternetSecurityManagerEx
+{
+ HRESULT MapUrlToZoneEx2(
+ [in] IUri *pUri,
+ [out] DWORD *pdwZone,
+ [in] DWORD dwFlags,
+ [out] LPWSTR *ppwszMappedUrl,
+ [out] DWORD *pdwOutFlags);
+
+ HRESULT ProcessUrlActionEx2(
+ [in] IUri *pUri,
+ [in] DWORD dwAction,
+ [out] BYTE *pPolicy,
+ [in] DWORD cbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwFlags,
+ [in] DWORD_PTR dwReserved,
+ [out] DWORD *pdwOutFlags);
+
+ HRESULT GetSecurityIdEx2(
+ [in] IUri *pUri,
+ [out] BYTE *pbSecurityId,
+ [in, out] DWORD *pcbSecurityId,
+ [in] DWORD_PTR dwReserved);
+
+ HRESULT QueryCustomPolicyEx2(
+ [in] IUri *pUri,
+ [in] REFGUID guidKey,
+ [out] BYTE **ppPolicy,
+ [out] DWORD *pcbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD_PTR dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetHostSecurityManager interface
+ */
+cpp_quote("#define SID_SInternetHostSecurityManager IID_IInternetHostSecurityManager")
+
+[
+ local,
+ object,
+ uuid(3af280b6-cb3f-11d0-891e-00c04fb6bfc4),
+ pointer_default(unique)
+]
+interface IInternetHostSecurityManager : IUnknown
+{
+ HRESULT GetSecurityId(
+ [out, size_is(*pcbSecurityId)] BYTE *pbSecurityId,
+ [in, out] DWORD *pcbSecurityId,
+ [in] DWORD_PTR dwReserved);
+
+ HRESULT ProcessUrlAction(
+ [in] DWORD dwAction,
+ [out, size_is(cbPolicy)] BYTE *pPolicy,
+ [in] DWORD cbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwFlags,
+ [in] DWORD dwReserved);
+
+ HRESULT QueryCustomPolicy(
+ [in] REFGUID guidKey,
+ [out, size_is(,*pcbPolicy)] BYTE **ppPolicy,
+ [out] DWORD *pcbPolicy,
+ [in] BYTE *pContext,
+ [in] DWORD cbContext,
+ [in] DWORD dwReserved);
+}
+
+cpp_quote("#define URLACTION_MIN 0x00001000")
+cpp_quote("#define URLACTION_DOWNLOAD_MIN 0x00001000")
+cpp_quote("#define URLACTION_DOWNLOAD_SIGNED_ACTIVEX 0x00001001")
+cpp_quote("#define URLACTION_DOWNLOAD_UNSIGNED_ACTIVEX 0x00001004")
+cpp_quote("#define URLACTION_DOWNLOAD_CURR_MAX 0x00001004")
+cpp_quote("#define URLACTION_DOWNLOAD_MAX 0x000011ff")
+
+cpp_quote("#define URLACTION_ACTIVEX_MIN 0x00001200")
+cpp_quote("#define URLACTION_ACTIVEX_RUN 0x00001200")
+cpp_quote("#define URLPOLICY_ACTIVEX_CHECK_LIST 0x00010000")
+cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_OBJECT_SAFETY 0x00001201")
+cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_DATA_SAFETY 0x00001202")
+cpp_quote("#define URLACTION_ACTIVEX_OVERRIDE_SCRIPT_SAFETY 0x00001203")
+cpp_quote("#define URLACTION_SCRIPT_OVERRIDE_SAFETY 0x00001401")
+cpp_quote("#define URLACTION_ACTIVEX_CONFIRM_NOOBJECTSAFETY 0x00001204")
+cpp_quote("#define URLACTION_ACTIVEX_TREATASUNTRUSTED 0x00001205")
+cpp_quote("#define URLACTION_ACTIVEX_CURR_MAX 0x00001205")
+cpp_quote("#define URLACTION_ACTIVEX_MAX 0x000013ff")
+
+cpp_quote("#define URLACTION_SCRIPT_MIN 0x00001400")
+cpp_quote("#define URLACTION_SCRIPT_RUN 0x00001400")
+cpp_quote("#define URLACTION_SCRIPT_JAVA_USE 0x00001402")
+cpp_quote("#define URLACTION_SCRIPT_SAFE_ACTIVEX 0x00001405")
+cpp_quote("#define URLACTION_CROSS_DOMAIN_DATA 0x00001406")
+cpp_quote("#define URLACTION_SCRIPT_PASTE 0x00001407")
+cpp_quote("#define URLACTION_SCRIPT_CURR_MAX 0x00001407")
+cpp_quote("#define URLACTION_SCRIPT_MAX 0x000015ff")
+
+cpp_quote("#define URLACTION_HTML_MIN 0x00001600")
+cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS 0x00001601")
+cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_FROM 0x00001602")
+cpp_quote("#define URLACTION_HTML_SUBMIT_FORMS_TO 0x00001603")
+cpp_quote("#define URLACTION_HTML_FONT_DOWNLOAD 0x00001604")
+cpp_quote("#define URLACTION_HTML_JAVA_RUN 0x00001605")
+cpp_quote("#define URLACTION_HTML_USERDATA_SAVE 0x00001606")
+cpp_quote("#define URLACTION_HTML_SUBFRAME_NAVIGATE 0x00001607")
+cpp_quote("#define URLACTION_HTML_META_REFRESH 0x00001608")
+cpp_quote("#define URLACTION_HTML_MIXED_CONTENT 0x00001609")
+cpp_quote("#define URLACTION_HTML_MAX 0x000017ff")
+
+cpp_quote("#define URLACTION_SHELL_MIN 0x00001800")
+cpp_quote("#define URLACTION_SHELL_INSTALL_DTITEMS 0x00001800")
+cpp_quote("#define URLACTION_SHELL_MOVE_OR_COPY 0x00001802")
+cpp_quote("#define URLACTION_SHELL_FILE_DOWNLOAD 0x00001803")
+cpp_quote("#define URLACTION_SHELL_VERB 0x00001804")
+cpp_quote("#define URLACTION_SHELL_WEBVIEW_VERB 0x00001805")
+cpp_quote("#define URLACTION_SHELL_CURR_MAX 0x00001805")
+cpp_quote("#define URLACTION_SHELL_MAX 0x000019ff")
+
+cpp_quote("#define URLACTION_NETWORK_MIN 0x00001a00")
+cpp_quote("#define URLACTION_CREDENTIALS_USE 0x00001a00")
+cpp_quote("#define URLACTION_AUTHENTICATE_CLIENT 0x00001a01")
+cpp_quote("#define URLACTION_COOKIES 0x00001a02")
+cpp_quote("#define URLACTION_COOKIES_SESSION 0x00001a03")
+cpp_quote("#define URLACTION_CLIENT_CERT_PROMPT 0x00001a04")
+cpp_quote("#define URLACTION_COOKIES_THIRD_PARTY 0x00001a05")
+cpp_quote("#define URLACTION_COOKIES_SESSION_THIRD_PARTY 0x00001a06")
+cpp_quote("#define URLACTION_COOKIES_ENABLED 0x00001a10")
+cpp_quote("#define URLACTION_NETWORK_CURR_MAX 0x00001a10")
+cpp_quote("#define URLACTION_NETWORK_MAX 0x00001bff")
+
+cpp_quote("#define URLACTION_JAVA_MIN 0x00001c00")
+cpp_quote("#define URLACTION_JAVA_PERMISSIONS 0x00001c00")
+cpp_quote("#define URLPOLICY_JAVA_PROHIBIT 0x00000000")
+cpp_quote("#define URLPOLICY_JAVA_HIGH 0x00010000")
+cpp_quote("#define URLPOLICY_JAVA_MEDIUM 0x00020000")
+cpp_quote("#define URLPOLICY_JAVA_LOW 0x00030000")
+cpp_quote("#define URLPOLICY_JAVA_CUSTOM 0x00800000")
+cpp_quote("#define URLACTION_JAVA_CURR_MAX 0x00001c00")
+cpp_quote("#define URLACTION_JAVA_MAX 0x00001cff")
+
+cpp_quote("#define URLACTION_INFODELIVERY_MIN 0x00001d00")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_CHANNELS 0x00001d00")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_CHANNELS 0x00001d01")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_CHANNELS 0x00001d02")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_ADDING_SUBSCRIPTIONS 0x00001d03")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_EDITING_SUBSCRIPTIONS 0x00001d04")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_REMOVING_SUBSCRIPTIONS 0x00001d05")
+cpp_quote("#define URLACTION_INFODELIVERY_NO_CHANNEL_LOGGING 0x00001d06")
+cpp_quote("#define URLACTION_INFODELIVERY_CURR_MAX 0x00001d06")
+cpp_quote("#define URLACTION_INFODELIVERY_MAX 0x00001dff")
+
+cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MIN 0x00001e00")
+cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_PERMISSIONS 0x00001e05")
+cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PROHIBIT 0x00010000")
+cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_PRECACHE 0x00020000")
+cpp_quote("#define URLPOLICY_CHANNEL_SOFTDIST_AUTOINSTALL 0x00030000")
+cpp_quote("#define URLACTION_CHANNEL_SOFTDIST_MAX 0x00001eff")
+
+cpp_quote("#define URLACTION_BEHAVIOR_MIN 0x00002000")
+cpp_quote("#define URLACTION_BEHAVIOR_RUN 0x00002000")
+cpp_quote("#define URLPOLICY_BEHAVIOR_CHECK_LIST 0x00010000")
+
+cpp_quote("#define URLACTION_FEATURE_MIN 0x00002100")
+cpp_quote("#define URLACTION_FEATURE_MIME_SNIFFING 0x00002100")
+cpp_quote("#define URLACTION_FEATURE_ZONE_ELEVATION 0x00002101")
+cpp_quote("#define URLACTION_FEATURE_WINDOW_RESTRICTIONS 0x00002102")
+cpp_quote("#define URLACTION_FEATURE_SCRIPT_STATUS_BAR 0x00002103")
+cpp_quote("#define URLACTION_FEATURE_FORCE_ADDR_AND_STATUS 0x00002104")
+cpp_quote("#define URLACTION_FEATURE_BLOCK_INPUT_PROMPTS 0x00002105")
+
+cpp_quote("#define URLPOLICY_ALLOW 0x00")
+cpp_quote("#define URLPOLICY_QUERY 0x01")
+cpp_quote("#define URLPOLICY_DISALLOW 0x03")
+
+cpp_quote("#define URLPOLICY_NOTIFY_ON_ALLOW 0x10")
+cpp_quote("#define URLPOLICY_NOTIFY_ON_DISALLOW 0x20")
+
+cpp_quote("#define URLPOLICY_LOG_ON_ALLOW 0x40")
+cpp_quote("#define URLPOLICY_LOG_ON_DISALLOW 0x80")
+
+cpp_quote("#define URLPOLICY_DONTCHECKDLGBOX 0x100")
+
+cpp_quote("#define URLPOLICY_CREDENTIALS_SILENT_LOGON_OK 0x00000000")
+cpp_quote("#define URLPOLICY_CREDENTIALS_MUST_PROMPT_USER 0x00010000")
+cpp_quote("#define URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT 0x00020000")
+cpp_quote("#define URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY 0x00030000")
+
+cpp_quote("#define URLPOLICY_AUTHENTICATE_CLEARTEXT_OK 0x00000000")
+cpp_quote("#define URLPOLICY_AUTHENTICATE_CHALLENGE_RESPONSE 0x00010000")
+cpp_quote("#define URLPOLICY_AUTHENTICATE_MUTUAL_ONLY 0x00030000")
+
+cpp_quote("#define URLPOLICY_MASK_PERMISSIONS 0x0f")
+cpp_quote("#define GetUrlPolicyPermissions(dw) (dw & URLPOLICY_MASK_PERMISSIONS)")
+cpp_quote("#define SetUrlPolicyPermissions(dw,dw2) ((dw) = ((dw) & ~URLPOLICY_MASK_PERMISSIONS) | (dw2))")
+
+/*****************************************************************************
+ * IInternetZoneManager interface
+ */
+[
+ local,
+ object,
+ uuid(79EAC9EF-BAf9-11CE-8C82-00AA004BA90B),
+ pointer_default(unique)
+]
+interface IInternetZoneManager : IUnknown
+{
+ typedef [unique] IInternetZoneManager* LPURLZONEMANAGER;
+
+ typedef enum tagURLZONE
+ {
+ URLZONE_INVALID = -1,
+ URLZONE_PREDEFINED_MIN = 0,
+ URLZONE_LOCAL_MACHINE = 0,
+ URLZONE_INTRANET = 1,
+ URLZONE_TRUSTED = 2,
+ URLZONE_INTERNET = 3,
+ URLZONE_UNTRUSTED = 4,
+ URLZONE_PREDEFINED_MAX = 999,
+ URLZONE_USER_MIN = 1000,
+ URLZONE_USER_MAX = 10000,
+ } URLZONE;
+
+ typedef enum tagURLTEMPLATE
+ {
+ URLTEMPLATE_CUSTOM = 0x00000,
+ URLTEMPLATE_PREDEFINED_MIN = 0x10000,
+ URLTEMPLATE_LOW = 0x10000,
+ URLTEMPLATE_MEDLOW = 0x10500,
+ URLTEMPLATE_MEDIUM = 0x11000,
+ URLTEMPLATE_MEDHIGH = 0x11500,
+ URLTEMPLATE_HIGH = 0x12000,
+ URLTEMPLATE_PREDEFINED_MAX = 0x20000,
+ } URLTEMPLATE ;
+
+ typedef enum {
+ ZAFLAGS_CUSTOM_EDIT = 0x00000001,
+ ZAFLAGS_ADD_SITES = 0x00000002,
+ ZAFLAGS_REQUIRE_VERIFICATION = 0x00000004,
+ ZAFLAGS_INCLUDE_PROXY_OVERRIDE = 0x00000008,
+ ZAFLAGS_INCLUDE_INTRANET_SITES = 0x00000010,
+ ZAFLAGS_NO_UI = 0x00000020,
+ ZAFLAGS_SUPPORTS_VERIFICATION = 0x00000040,
+ ZAFLAGS_UNC_AS_INTRANET = 0x00000080,
+ ZAFLAGS_DETECT_INTRANET = 0x00000100,
+ ZAFLAGS_USE_LOCKED_ZONES = 0x00010000,
+ ZAFLAGS_VERIFY_TEMPLATE_SETTINGS = 0x00020000,
+ ZAFLAGS_NO_CACHE = 0x00040000,
+ } ZAFLAGS ;
+
+ enum {
+ MAX_ZONE_PATH = 260,
+ MAX_ZONE_DESCRIPTION = 200
+ };
+
+ typedef struct _ZONEATTRIBUTES {
+ ULONG cbSize;
+ WCHAR szDisplayName[MAX_ZONE_PATH];
+ WCHAR szDescription[MAX_ZONE_DESCRIPTION];
+ WCHAR szIconPath[MAX_ZONE_PATH];
+ DWORD dwTemplateMinLevel;
+ DWORD dwTemplateRecommended;
+ DWORD dwTemplateCurrentLevel;
+ DWORD dwFlags;
+ } ZONEATTRIBUTES, *LPZONEATTRIBUTES;
+
+ typedef enum _URLZONEREG {
+ URLZONEREG_DEFAULT,
+ URLZONEREG_HKLM,
+ URLZONEREG_HKCU
+ } URLZONEREG;
+
+ HRESULT GetZoneAttributes(
+ [in] DWORD dwZone,
+ [in, out, unique] ZONEATTRIBUTES* pZoneAttributes);
+
+ HRESULT SetZoneAttributes(
+ [in] DWORD dwZone,
+ [in] ZONEATTRIBUTES* pZoneAttributes);
+
+ HRESULT GetZoneCustomPolicy(
+ [in] DWORD dwZone,
+ [in] REFGUID guidKey,
+ [out] BYTE **ppPolicy,
+ [out] DWORD* pcbPolicy,
+ [in] URLZONEREG ulrZoneReg);
+
+ HRESULT SetZoneCustomPolicy(
+ [in] DWORD dwZone,
+ [in] REFGUID guidKey,
+ [in] BYTE *ppPolicy,
+ [in] DWORD pcbPolicy,
+ [in] URLZONEREG ulrZoneReg);
+
+ HRESULT GetZoneActionPolicy(
+ [in] DWORD dwZone,
+ [in] DWORD dwAction,
+ [out] BYTE* pPolicy,
+ [in] DWORD cbPolicy,
+ [in] URLZONEREG urlZoneReg);
+
+ HRESULT SetZoneActionPolicy(
+ [in] DWORD dwZone,
+ [in] DWORD dwAction,
+ [in] BYTE* pPolicy,
+ [in] DWORD cbPolicy,
+ [in] URLZONEREG urlZoneReg);
+
+ HRESULT PromptAction(
+ [in] DWORD dwAction,
+ [in] HWND hwndParent,
+ [in] LPCWSTR pwszUrl,
+ [in] LPCWSTR pwszText,
+ [in] DWORD dwPromptFlags );
+
+ HRESULT LogAction(
+ [in] DWORD dwAction,
+ [in] LPCWSTR pwszUrl,
+ [in] LPCWSTR pwszText,
+ [in] DWORD dwLogFlags);
+
+ HRESULT CreateZoneEnumerator(
+ [out] DWORD* pdwEnum,
+ [out] DWORD* pdwCount,
+ [in] DWORD dwFlags);
+
+ HRESULT GetZoneAt(
+ [in] DWORD dwEnum,
+ [in] DWORD dwIndex,
+ [out] DWORD* pdwZone);
+
+ HRESULT DestroyZoneEnumerator(
+ [in] DWORD dwEnum);
+
+ HRESULT CopyTemplatePoliciesToZone(
+ [in] DWORD dwTemplate,
+ [in] DWORD dwZone,
+ [in] DWORD dwReserved);
+}
+
+/*****************************************************************************
+ * IInternetZoneManagerEx interface
+ */
+[
+ local,
+ object,
+ uuid(A4C23339-8E06-431E-9BF4-7E711C085648),
+ pointer_default(unique)
+]
+interface IInternetZoneManagerEx : IInternetZoneManager
+{
+ HRESULT GetZoneActionPolicyEx(
+ [in] DWORD dwZone,
+ [in] DWORD dwAction,
+ [out] BYTE* pPolicy,
+ [in] DWORD cbPolicy,
+ [in] URLZONEREG urlZoneReg,
+ [in] DWORD dwFlags);
+
+ HRESULT SetZoneActionPolicyEx(
+ [in] DWORD dwZone,
+ [in] DWORD dwAction,
+ [in] BYTE* pPolicy,
+ [in] DWORD cbPolicy,
+ [in] URLZONEREG urlZoneReg,
+ [in] DWORD dwFlags);
+
+}
+
+/*****************************************************************************
+ * IInternetZoneManagerEx2 interface
+ */
+
+cpp_quote("#define SECURITY_IE_STATE_GREEN 0")
+cpp_quote("#define SECURITY_IE_STATE_RED 1")
+
+[
+ local,
+ object,
+ uuid(EDC17559-DD5D-4846-8EEF-8BECBA5A4ABF),
+ pointer_default(unique)
+]
+interface IInternetZoneManagerEx2 : IInternetZoneManagerEx
+{
+ HRESULT GetZoneAttributesEx(
+ [in] DWORD dwZone,
+ [in, out, unique] ZONEATTRIBUTES* pZoneAttributes,
+ [in] DWORD dwFlags);
+
+ HRESULT GetZoneSecurityState(
+ [in] DWORD dwZoneIndex,
+ [in] BOOL fRespectPolicy,
+ [in, out] LPDWORD pdwState,
+ [in, out] BOOL *pfPolicyEncountered);
+
+ HRESULT GetIESecurityState(
+ [in] BOOL fRespectPolicy,
+ [in, out] LPDWORD pdwState,
+ [in, out] BOOL *pfPolicyEncountered,
+ [in] BOOL fNoCache);
+
+ HRESULT FixInsecureSettings(void);
+
+}
+
+
+typedef struct _tagSOFTDISTINFO
+{
+ ULONG cbSize;
+ DWORD dwFlags;
+ DWORD dwAdState;
+ LPWSTR szTitle;
+ LPWSTR szAbstract;
+ LPWSTR szHREF;
+ DWORD dwInstalledVersionMS;
+ DWORD dwInstalledVersionLS;
+ DWORD dwUpdateVersionMS;
+ DWORD dwUpdateVersionLS;
+ DWORD dwAdvertisedVersionMS;
+ DWORD dwAdvertisedVersionLS;
+ DWORD dwReserved;
+} SOFTDISTINFO, *LPSOFTDISTINFO;
+
+typedef struct _tagCODEBASEHOLD
+{
+ DWORD cbSize;
+ LPWSTR szDistUnit;
+ LPWSTR szCodeBase;
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+ DWORD dwStyle;
+} CODEBASEHOLD, *LPCODEBASEHOLD;
+
+[
+ local,
+ object,
+ uuid(b15b8dc1-c7e1-11d0-8680-00aa00bdcb71),
+ pointer_default(unique)
+]
+interface ISoftDistExt : IUnknown
+{
+ HRESULT ProcessSoftDist(
+ [in] LPCWSTR szCDFURL,
+ [in] IXMLElement *pSoftDistElement,
+ [in, out] LPSOFTDISTINFO lpsdi );
+
+ HRESULT GetFirstCodeBase(
+ [in] LPWSTR *szCodeBase,
+ [in] LPDWORD dwMaxSize );
+
+ HRESULT GetNextCodeBase(
+ [in] LPWSTR *szCodeBase,
+ [in] LPDWORD dwMaxSize );
+
+ HRESULT AsyncInstallDistributionUnit(
+ [in] IBindCtx *pbc,
+ [in] LPVOID lpReserved,
+ [in] DWORD flags,
+ [in] LPCODEBASEHOLD lpcbh);
+}
+
+typedef enum _tagINTERNETFEATURELIST
+{
+ FEATURE_OBJECT_CACHING,
+ FEATURE_ZONE_ELEVATION,
+ FEATURE_MIME_HANDLING,
+ FEATURE_MIME_SNIFFING,
+ FEATURE_WINDOW_RESTRICTIONS,
+ FEATURE_WEBOC_POPUPMANAGEMENT,
+ FEATURE_BEHAVIORS,
+ FEATURE_DISABLE_MK_PROTOCOL,
+ FEATURE_LOCALMACHINE_LOCKDOWN,
+ FEATURE_SECURITYBAND,
+ FEATURE_RESTRICT_ACTIVEXINSTALL,
+ FEATURE_VALIDATE_NAVIGATE_URL,
+ FEATURE_RESTRICT_FILEDOWNLOAD,
+ FEATURE_ADDON_MANAGEMENT,
+ FEATURE_PROTOCOL_LOCKDOWN,
+ FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,
+ FEATURE_SAFE_BINDTOOBJECT,
+ FEATURE_UNC_SAVEDFILECHECK,
+ FEATURE_GET_URL_DOM_FILEPATH_UNENCODED,
+ FEATURE_TABBED_BROWSING,
+ FEATURE_SSLUX,
+ FEATURE_DISABLE_NAVIGATION_SOUNDS,
+ FEATURE_DISABLE_LEGACY_COMPRESSION,
+ FEATURE_FORCE_ADDR_AND_STATUS,
+ FEATURE_XMLHTTP,
+ FEATURE_DISABLE_TELNET_PROTOCOL,
+ FEATURE_FEEDS,
+ FEATURE_BLOCK_INPUT_PROMPTS,
+ FEATURE_ENTRY_COUNT
+} INTERNETFEATURELIST;
+
+cpp_quote("#define SET_FEATURE_ON_THREAD 0x00000001")
+cpp_quote("#define SET_FEATURE_ON_PROCESS 0x00000002")
+cpp_quote("#define SET_FEATURE_IN_REGISTRY 0x00000004")
+cpp_quote("#define SET_FEATURE_ON_THREAD_LOCALMACHINE 0x00000008")
+cpp_quote("#define SET_FEATURE_ON_THREAD_INTRANET 0x00000010")
+cpp_quote("#define SET_FEATURE_ON_THREAD_TRUSTED 0x00000020")
+cpp_quote("#define SET_FEATURE_ON_THREAD_INTERNET 0x00000040")
+cpp_quote("#define SET_FEATURE_ON_THREAD_RESTRICTED 0x00000080")
+
+cpp_quote("#define GET_FEATURE_FROM_THREAD 0x00000001")
+cpp_quote("#define GET_FEATURE_FROM_PROCESS 0x00000002")
+cpp_quote("#define GET_FEATURE_FROM_REGISTRY 0x00000004")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_LOCALMACHINE 0x00000008")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_INTRANET 0x00000010")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_TRUSTED 0x00000020")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_INTERNET 0x00000040")
+cpp_quote("#define GET_FEATURE_FROM_THREAD_RESTRICTED 0x00000080")
+
+typedef struct _tagPROTOCOLFILTERDATA {
+ DWORD cbSize;
+ IInternetProtocolSink *pProtocolSink;
+ IInternetProtocol *pProtocol;
+ IUnknown *pUnk;
+ DWORD dwFilterFlags;
+} PROTOCOLFILTERDATA;
+
+/*****************************************************************************
+ * IUri interface
+ */
+[
+ object,
+ uuid(a39ee748-6a27-4817-a6f2-13914bef5890),
+ pointer_default(unique)
+]
+interface IUri : IUnknown
+{
+ typedef enum
+ {
+ Uri_PROPERTY_ABSOLUTE_URI = 0,
+ Uri_PROPERTY_STRING_START = Uri_PROPERTY_ABSOLUTE_URI,
+ Uri_PROPERTY_AUTHORITY = 1,
+ Uri_PROPERTY_DISPLAY_URI = 2,
+ Uri_PROPERTY_DOMAIN = 3,
+ Uri_PROPERTY_EXTENSION = 4,
+ Uri_PROPERTY_FRAGMENT = 5,
+ Uri_PROPERTY_HOST = 6,
+ Uri_PROPERTY_PASSWORD = 7,
+ Uri_PROPERTY_PATH = 8,
+ Uri_PROPERTY_PATH_AND_QUERY = 9,
+ Uri_PROPERTY_QUERY = 10,
+ Uri_PROPERTY_RAW_URI = 11,
+ Uri_PROPERTY_SCHEME_NAME = 12,
+ Uri_PROPERTY_USER_INFO = 13,
+ Uri_PROPERTY_USER_NAME = 14,
+ Uri_PROPERTY_STRING_LAST = Uri_PROPERTY_USER_NAME,
+ Uri_PROPERTY_HOST_TYPE = 15,
+ Uri_PROPERTY_DWORD_START = Uri_PROPERTY_HOST_TYPE,
+ Uri_PROPERTY_PORT = 16,
+ Uri_PROPERTY_SCHEME = 17,
+ Uri_PROPERTY_ZONE = 18,
+ Uri_PROPERTY_DWORD_LAST = Uri_PROPERTY_ZONE
+ } Uri_PROPERTY;
+
+ typedef enum
+ {
+ Uri_HOST_UNKNOWN = 0,
+ Uri_HOST_DNS = 1,
+ Uri_HOST_IPV4 = 2,
+ Uri_HOST_IPV6 = 3,
+ Uri_HOST_IDN = 4
+ } Uri_HOST_TYPE;
+
+ HRESULT GetPropertyBSTR(
+ [in] Uri_PROPERTY uriProp,
+ [out] BSTR *pbstrProperty,
+ [in] DWORD dwFlags);
+
+ HRESULT GetPropertyLength(
+ [in] Uri_PROPERTY uriProp,
+ [out] DWORD *pcchProperty,
+ [in] DWORD dwFlags);
+
+ HRESULT GetPropertyDWORD(
+ [in] Uri_PROPERTY uriProp,
+ [out] DWORD *pdwProperty,
+ [in] DWORD dwFlags);
+
+ HRESULT HasProperty(
+ [in] Uri_PROPERTY uriProp,
+ [out] BOOL *pfHasProperty);
+
+ HRESULT GetAbsoluteUri(
+ [out] BSTR *pbstrAbsoluteUri);
+
+ HRESULT GetAuthority(
+ [out] BSTR *pbstrAuthority);
+
+ HRESULT GetDisplayUri(
+ [out] BSTR *pbstrDisplayString);
+
+ HRESULT GetDomain(
+ [out] BSTR *pbstrDomain);
+
+ HRESULT GetExtension(
+ [out] BSTR *pbstrExtension);
+
+ HRESULT GetFragment(
+ [out] BSTR *pbstrFragment);
+
+ HRESULT GetHost(
+ [out] BSTR *pbstrHost);
+
+ HRESULT GetPassword(
+ [out] BSTR *pbstrPassword);
+
+ HRESULT GetPath(
+ [out] BSTR *pbstrPath);
+
+ HRESULT GetPathAndQuery(
+ [out] BSTR *pbstrPathAndQuery);
+
+ HRESULT GetQuery(
+ [out] BSTR *pbstrQuery);
+
+ HRESULT GetRawUri(
+ [out] BSTR *pbstrRawUri);
+
+ HRESULT GetSchemeName(
+ [out] BSTR *pbstrSchemeName);
+
+ HRESULT GetUserInfo(
+ [out] BSTR *pbstrUserInfo);
+
+ HRESULT GetUserName(
+ [out] BSTR *pbstrUserName);
+
+ HRESULT GetHostType(
+ [out] DWORD *pdwHostType);
+
+ HRESULT GetPort(
+ [out] DWORD *pdwPort);
+
+ HRESULT GetScheme(
+ [out] DWORD *pdwScheme);
+
+ HRESULT GetZone(
+ [out] DWORD *pdwZone);
+
+ HRESULT GetProperties(
+ [out] LPDWORD pdwFlags);
+
+ HRESULT IsEqual(
+ [in] IUri *pUri,
+ [out] BOOL *pfEqual);
+}
+
+cpp_quote("HRESULT WINAPI CreateUri(LPCWSTR,DWORD,DWORD_PTR,IUri**);")
+cpp_quote("HRESULT WINAPI CreateUriWithFragment(LPCWSTR,LPCWSTR,DWORD,DWORD_PTR,IUri**);")
+cpp_quote("HRESULT WINAPI CreateUriFromMultiByteString(LPCSTR,DWORD,DWORD,DWORD,DWORD_PTR,IUri**);")
+
+cpp_quote("#define Uri_HAS_ABSOLUTE_URI (1 << Uri_PROPERTY_ABSOLUTE_URI)")
+cpp_quote("#define Uri_HAS_AUTHORITY (1 << Uri_PROPERTY_AUTHORITY)")
+cpp_quote("#define Uri_HAS_DISPLAY_URI (1 << Uri_PROPERTY_DISPLAY_URI)")
+cpp_quote("#define Uri_HAS_DOMAIN (1 << Uri_PROPERTY_DOMAIN)")
+cpp_quote("#define Uri_HAS_EXTENSION (1 << Uri_PROPERTY_EXTENSION)")
+cpp_quote("#define Uri_HAS_FRAGMENT (1 << Uri_PROPERTY_FRAGMENT)")
+cpp_quote("#define Uri_HAS_HOST (1 << Uri_PROPERTY_HOST)")
+cpp_quote("#define Uri_HAS_PASSWORD (1 << Uri_PROPERTY_PASSWORD)")
+cpp_quote("#define Uri_HAS_PATH (1 << Uri_PROPERTY_PATH)")
+cpp_quote("#define Uri_HAS_QUERY (1 << Uri_PROPERTY_QUERY)")
+cpp_quote("#define Uri_HAS_RAW_URI (1 << Uri_PROPERTY_RAW_URI)")
+cpp_quote("#define Uri_HAS_SCHEME_NAME (1 << Uri_PROPERTY_SCHEME_NAME)")
+cpp_quote("#define Uri_HAS_USER_NAME (1 << Uri_PROPERTY_USER_NAME)")
+cpp_quote("#define Uri_HAS_PATH_AND_QUERY (1 << Uri_PROPERTY_PATH_AND_QUERY)")
+cpp_quote("#define Uri_HAS_USER_INFO (1 << Uri_PROPERTY_USER_INFO)")
+cpp_quote("#define Uri_HAS_HOST_TYPE (1 << Uri_PROPERTY_HOST_TYPE)")
+cpp_quote("#define Uri_HAS_PORT (1 << Uri_PROPERTY_PORT)")
+cpp_quote("#define Uri_HAS_SCHEME (1 << Uri_PROPERTY_SCHEME)")
+cpp_quote("#define Uri_HAS_ZONE (1 << Uri_PROPERTY_ZONE)")
+
+cpp_quote("#define Uri_CREATE_ALLOW_RELATIVE 0x0001")
+cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_WILDCARD_SCHEME 0x0002")
+cpp_quote("#define Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME 0x0004")
+cpp_quote("#define Uri_CREATE_NOFRAG 0x0008")
+cpp_quote("#define Uri_CREATE_NO_CANONICALIZE 0x0010")
+cpp_quote("#define Uri_CREATE_CANONICALIZE 0x0100")
+cpp_quote("#define Uri_CREATE_FILE_USE_DOS_PATH 0x0020")
+cpp_quote("#define Uri_CREATE_DECODE_EXTRA_INFO 0x0040")
+cpp_quote("#define Uri_CREATE_NO_DECODE_EXTRA_INFO 0x0080")
+cpp_quote("#define Uri_CREATE_CRACK_UNKNOWN_SCHEMES 0x0200")
+cpp_quote("#define Uri_CREATE_NO_CRACK_UNKNOWN_SCHEMES 0x0400")
+cpp_quote("#define Uri_CREATE_PRE_PROCESS_HTML_URI 0x0800")
+cpp_quote("#define Uri_CREATE_NO_PRE_PROCESS_HTML_URI 0x1000")
+cpp_quote("#define Uri_CREATE_IE_SETTINGS 0x2000")
+cpp_quote("#define Uri_CREATE_NO_IE_SETTINGS 0x4000")
+cpp_quote("#define Uri_CREATE_NO_ENCODE_FORBIDDEN_CHARACTERS 0x8000")
+
+cpp_quote("#define Uri_DISPLAY_NO_FRAGMENT 0x00000001")
+cpp_quote("#define Uri_PUNYCODE_IDN_HOST 0x00000002")
+cpp_quote("#define Uri_DISPLAY_IDN_HOST 0x00000004")
+
+cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8 0x00000001")
+cpp_quote("#define Uri_ENCODING_USER_INFO_AND_PATH_IS_CP 0x00000002")
+cpp_quote("#define Uri_ENCODING_HOST_IS_IDN 0x00000004")
+cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8 0x00000008")
+cpp_quote("#define Uri_ENCODING_HOST_IS_PERCENT_ENCODED_CP 0x00000010")
+cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8 0x00000020")
+cpp_quote("#define Uri_ENCODING_QUERY_AND_FRAGMENT_IS_CP 0x00000040")
+cpp_quote("#define Uri_ENCODING_RFC (Uri_ENCODING_USER_INFO_AND_PATH_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_HOST_IS_PERCENT_ENCODED_UTF8|Uri_ENCODING_QUERY_AND_FRAGMENT_IS_PERCENT_ENCODED_UTF8)")
+
+cpp_quote("#define UriBuilder_USE_ORIGINAL_FLAGS 0x00000001")
+
+/*****************************************************************************
+ * IUriContainer interface
+ */
+[
+ local,
+ object,
+ uuid(a158a630-ed6f-45fb-b987-f68676f57752),
+ pointer_default(unique)
+]
+interface IUriContainer : IUnknown
+{
+ HRESULT GetIUri([out] IUri **ppIUri);
+}
+
+/*****************************************************************************
+ * IUriBuilder interface
+ */
+[
+ local,
+ object,
+ uuid(4221b2e1-8955-46c0-bd5b-de9897565de7),
+ pointer_default(unique)
+]
+interface IUriBuilder: IUnknown
+{
+ HRESULT CreateUriSimple(
+ [in] DWORD dwAllowEncodingPropertyMask,
+ [in] DWORD_PTR dwReserved,
+ [out] IUri **ppIUri);
+
+ HRESULT CreateUri(
+ [in] DWORD dwCreateFlags,
+ [in] DWORD dwAllowEncodingPropertyMask,
+ [in] DWORD_PTR dwReserved,
+ [out] IUri **ppIUri);
+
+ HRESULT CreateUriWithFlags(
+ [in] DWORD dwCreateFlags,
+ [in] DWORD dwUriBuilderFlags,
+ [in] DWORD dwAllowEncodingPropertyMask,
+ [in] DWORD_PTR dwReserved,
+ [out] IUri **ppIUri);
+
+ HRESULT GetIUri(
+ [out] IUri **ppIUri);
+
+ HRESULT SetIUri(
+ [in, unique] IUri *pIUri);
+
+ HRESULT GetFragment(
+ [out] DWORD *pcchFragment,
+ [out] LPCWSTR *ppwzFragment);
+
+ HRESULT GetHost(
+ [out] DWORD *pcchHost,
+ [out] LPCWSTR *ppwzHost);
+
+ HRESULT GetPassword(
+ [out] DWORD *pcchPassword,
+ [out] LPCWSTR *ppwzPassword);
+
+ HRESULT GetPath(
+ [out] DWORD *pcchPath,
+ [out] LPCWSTR *ppwzPath);
+
+ HRESULT GetPort(
+ [out] BOOL *pfHasPort,
+ [out] DWORD *pdwPort);
+
+ HRESULT GetQuery(
+ [out] DWORD *pcchQuery,
+ [out] LPCWSTR *ppwzQuery);
+
+ HRESULT GetSchemeName(
+ [out] DWORD *pcchSchemeName,
+ [out] LPCWSTR *ppwzSchemeName);
+
+ HRESULT GetUserName(
+ [out] DWORD *pcchUserName,
+ [out] LPCWSTR *ppwzUserName);
+
+ HRESULT SetFragment(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT SetHost(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT SetPassword(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT SetPath(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT SetPort(
+ [in] BOOL fHasPort,
+ [in] DWORD dwNewValue);
+
+ HRESULT SetQuery(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT SetSchemeName(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT SetUserName(
+ [in] LPCWSTR pwzNewValue);
+
+ HRESULT RemoveProperties(
+ [in] DWORD dwPropertyMask);
+
+ HRESULT HasBeenModified(
+ [out] BOOL *pfModified);
+};
+
+cpp_quote("HRESULT WINAPI CreateIUriBuilder(IUri*,DWORD,DWORD_PTR,IUriBuilder**);")
+
+/*****************************************************************************
+ * IUriBuilderFactory interface
+ */
+[
+ local,
+ object,
+ uuid(e982ce48-0b96-440c-bc37-0c869b27a29e),
+ pointer_default(unique)
+]
+interface IUriBuilderFactory : IUnknown
+{
+ HRESULT CreateIUriBuilder(
+ [in] DWORD dwFlags,
+ [in] DWORD_PTR dwReserved,
+ [out] IUriBuilder **ppIUriBuilder);
+
+ HRESULT CreateInitializedIUriBuilder(
+ [in] DWORD dwFlags,
+ [in] DWORD_PTR dwReserved,
+ [out] IUriBuilder **ppIUriBuilder);
+}
+
+/*****************************************************************************
+ * IInternetProtocolEx interface
+ */
+[
+ local,
+ object,
+ uuid(c7a98e66-1010-492c-a1c8-c809e1f75905),
+ pointer_default(unique)
+]
+interface IInternetProtocolEx : IInternetProtocol
+{
+ HRESULT StartEx(
+ [in] IUri *pUri,
+ [in] IInternetProtocolSink *pOIProtSink,
+ [in] IInternetBindInfo *pOIBindInfo,
+ [in] DWORD grfPI,
+ [in] HANDLE *dwReserved);
+}
+
+/*****************************************************************************
+ * IGetBindHandle interface
+ */
+[
+ local,
+ object,
+ uuid(AF0FF408-129D-4b20-91F0-02BD23D88352),
+ pointer_default(unique)
+]
+interface IGetBindHandle : IUnknown
+{
+ typedef [unique] IGetBindHandle *LPGETBINDHANDLE;
+
+ typedef enum {
+ BINDHANDLETYPES_APPCACHE = 0x00000000,
+ BINDHANDLETYPES_DEPENDENCY = 0x00000001,
+ BINDHANDLETYPES_COUNT
+ } BINDHANDLETYPES;
+
+ HRESULT GetBindHandle(
+ [in] BINDHANDLETYPES enumRequestedHandle,
+ [out] HANDLE *pRetHandle);
+}
+
+cpp_quote("#define CONFIRMSAFETYACTION_LOADOBJECT 0x00000001")
+
+struct CONFIRMSAFETY
+{
+ CLSID clsid;
+ IUnknown *pUnk;
+ DWORD dwFlags;
+};
+
+cpp_quote("EXTERN_C const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY;")
+
+cpp_quote("DEFINE_GUID(CLSID_InternetSecurityManager, 0x7b8a2d94, 0x0ac9, 0x11d1, 0x89, 0x6c, 0x00, 0xc0, 0x4f, 0xB6, 0xbf, 0xc4);")
+cpp_quote("DEFINE_GUID(CLSID_InternetZoneManager, 0x7B8A2D95, 0x0AC9, 0x11D1, 0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4);")
+cpp_quote("DEFINE_GUID(IID_IAsyncMoniker, 0x79EAC9D3, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
+cpp_quote("DEFINE_GUID(IID_IAsyncBindCtx, 0x79EAC9D4, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_StdURLMoniker, 0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_DeCompMimeFilter, 0x8f6b0360, 0xb80d, 0x11d0, 0xa9,0xb3, 0x00,0x60,0x97,0x94,0x23,0x11);")
+
+cpp_quote("DEFINE_GUID(CLSID_CdlProtocol, 0x3dd53d40, 0x7b8b, 0x11D0, 0xb0,0x13, 0x00,0xaa,0x00,0x59,0xce,0x02);")
+cpp_quote("DEFINE_GUID(CLSID_FileProtocol, 0x79EAC9E7, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_FtpProtocol, 0x79EAC9E3, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_GopherProtocol, 0x79EAC9E4, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_HttpProtocol, 0x79EAC9E2, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_HttpSProtocol, 0x79EAC9E5, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+cpp_quote("DEFINE_GUID(CLSID_MkProtocol, 0x79EAC9E6, 0xBAF9, 0x11CE, 0x8C,0x82, 0x00,0xAA,0x00,0x4B,0xA9,0x0B);")
+
+cpp_quote("#define URLMON_OPTION_USERAGENT 0x10000001")
+cpp_quote("#define URLMON_OPTION_USERAGENT_REFRESH 0x10000002")
+cpp_quote("#define URLMON_OPTION_URL_ENCODING 0x10000004")
+
+cpp_quote("#define MK_S_ASYNCHRONOUS _HRESULT_TYPEDEF_(0x000401E8)")
+cpp_quote("#ifndef S_ASYNCHRONOUS")
+cpp_quote("#define S_ASYNCHRONOUS MK_S_ASYNCHRONOUS")
+cpp_quote("#endif")
+
+cpp_quote("#define INET_E_ERROR_FIRST _HRESULT_TYPEDEF_(0x800C0002)")
+cpp_quote("#define INET_E_INVALID_URL _HRESULT_TYPEDEF_(0x800C0002)")
+cpp_quote("#define INET_E_NO_SESSION _HRESULT_TYPEDEF_(0x800C0003)")
+cpp_quote("#define INET_E_CANNOT_CONNECT _HRESULT_TYPEDEF_(0x800C0004)")
+cpp_quote("#define INET_E_RESOURCE_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0005)")
+cpp_quote("#define INET_E_OBJECT_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0006)")
+cpp_quote("#define INET_E_DATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x800C0007)")
+cpp_quote("#define INET_E_DOWNLOAD_FAILURE _HRESULT_TYPEDEF_(0x800C0008)")
+cpp_quote("#define INET_E_AUTHENTICATION_REQUIRED _HRESULT_TYPEDEF_(0x800C0009)")
+cpp_quote("#define INET_E_NO_VALID_MEDIA _HRESULT_TYPEDEF_(0x800C000A)")
+cpp_quote("#define INET_E_CONNECTION_TIMEOUT _HRESULT_TYPEDEF_(0x800C000B)")
+cpp_quote("#define INET_E_INVALID_REQUEST _HRESULT_TYPEDEF_(0x800C000C)")
+cpp_quote("#define INET_E_UNKNOWN_PROTOCOL _HRESULT_TYPEDEF_(0x800C000D)")
+cpp_quote("#define INET_E_SECURITY_PROBLEM _HRESULT_TYPEDEF_(0x800C000E)")
+cpp_quote("#define INET_E_CANNOT_LOAD_DATA _HRESULT_TYPEDEF_(0x800C000F)")
+cpp_quote("#define INET_E_CANNOT_INSTANTIATE_OBJECT _HRESULT_TYPEDEF_(0x800C0010)")
+cpp_quote("#define INET_E_USE_DEFAULT_PROTOCOLHANDLER _HRESULT_TYPEDEF_(0x800C0011)")
+cpp_quote("#define INET_E_USE_DEFAULT_SETTING _HRESULT_TYPEDEF_(0x800C0012L)")
+cpp_quote("#define INET_E_DEFAULT_ACTION INET_E_USE_DEFAULT_PROTOCOLHANDLER")
+cpp_quote("#define INET_E_QUERYOPTION_UNKNOWN _HRESULT_TYPEDEF_(0x800C0013)")
+cpp_quote("#define INET_E_REDIRECT_FAILED _HRESULT_TYPEDEF_(0x800C0014)")
+cpp_quote("#define INET_E_REDIRECT_TO_DIR _HRESULT_TYPEDEF_(0x800C0015)")
+cpp_quote("#define INET_E_CANNOT_LOCK_REQUEST _HRESULT_TYPEDEF_(0x800C0016)")
+cpp_quote("#define INET_E_USE_EXTENDED_BINDING _HRESULT_TYPEDEF_(0x800C0017)")
+cpp_quote("#define INET_E_TERMINATED_BIND _HRESULT_TYPEDEF_(0x800C0018)")
+cpp_quote("#define INET_E_INVALID_CERTIFICATE _HRESULT_TYPEDEF_(0x800C0019)")
+cpp_quote("#define INET_E_CODE_DOWNLOAD_DECLINED _HRESULT_TYPEDEF_(0x800C0100)")
+cpp_quote("#define INET_E_RESULT_DISPATCHED _HRESULT_TYPEDEF_(0x800C0200)")
+cpp_quote("#define INET_E_CANNOT_REPLACE_SFP_FILE _HRESULT_TYPEDEF_(0x800C0300)")
+cpp_quote("#define INET_E_CODE_INSTALL_SUPPRESSED _HRESULT_TYPEDEF_(0x800C0400)")
+cpp_quote("#define INET_E_CODE_INSTALL_BLOCKED_BY_HASH_POLICY _HRESULT_TYPEDEF_(0x800C0500)")
+cpp_quote("#define INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE _HRESULT_TYPEDEF_(0x800C0501)")
+cpp_quote("#define INET_E_ERROR_LAST INET_E_DOWNLOAD_BLOCKED_BY_INPRIVATE")
+
+cpp_quote("HRESULT WINAPI CoGetClassObjectFromURL(REFCLSID, LPCWSTR, DWORD, DWORD, LPCWSTR, LPBINDCTX, DWORD, LPVOID, REFIID, LPVOID*);")
+cpp_quote("HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk);")
+cpp_quote("HRESULT WINAPI CreateURLMonikerEx(IMoniker*,LPCWSTR,IMoniker**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateURLMonikerEx2(IMoniker*,IUri*,IMoniker**,DWORD);")
+cpp_quote("HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbsc, DWORD dwReserved);")
+cpp_quote("HRESULT WINAPI CompareSecurityIds(BYTE*,DWORD,BYTE*,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI URLDownloadToFileA(LPUNKNOWN,LPCSTR,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN,LPCWSTR,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN,LPCSTR,LPSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN,LPCWSTR,LPWSTR,DWORD,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI CoInternetGetSession(DWORD,IInternetSession**,DWORD);")
+cpp_quote("HRESULT WINAPI MkParseDisplayNameEx(IBindCtx*,LPCWSTR,ULONG*,IMoniker**);")
+cpp_quote("HRESULT WINAPI IsAsyncMoniker(IMoniker* pmk);")
+cpp_quote("HRESULT WINAPI CreateAsyncBindCtx(DWORD, IBindStatusCallback*, IEnumFORMATETC*, IBindCtx**);")
+cpp_quote("HRESULT WINAPI CreateAsyncBindCtxEx(IBindCtx*,DWORD,IBindStatusCallback*,IEnumFORMATETC*,IBindCtx**,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCreateSecurityManager(IServiceProvider*,IInternetSecurityManager**,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCombineUrl(LPCWSTR,LPCWSTR,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCombineUrlEx(IUri*,LPCWSTR,DWORD,IUri**,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI CoInternetCompareUrl(LPCWSTR,LPCWSTR,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetCombineIUri(IUri*,IUri*,DWORD,IUri**,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI CoInternetCreateZoneManager(IServiceProvider*, IInternetZoneManager**, DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetParseUrl(LPCWSTR,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetParseIUri(IUri*,PARSEACTION,DWORD,LPWSTR,DWORD,DWORD*,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI CoInternetQueryInfo(LPCWSTR,QUERYOPTION,DWORD,LPVOID,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetSetFeatureEnabled(INTERNETFEATURELIST,DWORD,BOOL);")
+cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST,DWORD dwFlags);")
+cpp_quote("HRESULT WINAPI CoInternetIsFeatureEnabledForUrl(INTERNETFEATURELIST,DWORD,LPCWSTR,IInternetSecurityManager*);")
+cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrl(LPCWSTR,LPWSTR*,PSUACTION,DWORD);")
+cpp_quote("HRESULT WINAPI CoInternetGetSecurityUrlEx(IUri*,IUri**,PSUACTION,DWORD_PTR);")
+cpp_quote("HRESULT WINAPI AsyncInstallDistributionUnit(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,LPCWSTR,IBindCtx*,LPVOID,DWORD);")
+cpp_quote("HRESULT WINAPI CreateFormatEnumerator(UINT,FORMATETC*,IEnumFORMATETC**);")
+cpp_quote("HRESULT WINAPI GetSoftwareUpdateInfo( LPCWSTR szDistUnit, LPSOFTDISTINFO psdi);")
+cpp_quote("HRESULT WINAPI FaultInIEFeature(HWND,uCLSSPEC*,QUERYCONTEXT*,DWORD);")
+cpp_quote("HRESULT WINAPI FindMimeFromData(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,LPWSTR*,DWORD);")
+cpp_quote("HRESULT WINAPI GetClassFileOrMime(LPBC,LPCWSTR,LPVOID,DWORD,LPCWSTR,DWORD,CLSID*);")
+cpp_quote("HRESULT WINAPI HlinkGoBack(IUnknown*);")
+cpp_quote("HRESULT WINAPI HlinkGoForward(IUnknown*);")
+cpp_quote("HRESULT WINAPI HlinkNavigateMoniker(IUnknown*,IMoniker*);")
+cpp_quote("HRESULT WINAPI HlinkNavigateString(IUnknown*,LPCWSTR);")
+cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToMoniker(IMoniker*,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR,LPCWSTR,LPCWSTR,IUnknown*,IBindCtx*,IBindStatusCallback*,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI IsValidURL(LPBC,LPCWSTR,DWORD);")
+cpp_quote("HRESULT WINAPI ObtainUserAgentString(DWORD,LPSTR,DWORD*);")
+cpp_quote("HRESULT WINAPI RegisterFormatEnumerator(LPBC,IEnumFORMATETC*,DWORD);")
+cpp_quote("HRESULT WINAPI RevokeFormatEnumerator(LPBC,IEnumFORMATETC*);")
+cpp_quote("HRESULT WINAPI RevokeBindStatusCallback(LPBC,IBindStatusCallback*);")
+cpp_quote("HRESULT WINAPI CopyStgMedium(const STGMEDIUM*,STGMEDIUM*);")
+cpp_quote("HRESULT WINAPI CopyBindInfo(const BINDINFO*,BINDINFO*);")
+cpp_quote("void WINAPI ReleaseBindInfo(BINDINFO*);")
+cpp_quote("HRESULT WINAPI UrlMkGetSessionOption(DWORD,LPVOID,DWORD,DWORD*,DWORD);")
+cpp_quote("HRESULT WINAPI UrlMkSetSessionOption(DWORD,LPVOID,DWORD,DWORD);")
+cpp_quote("HRESULT WINAPI URLOpenStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenPullStreamA(LPUNKNOWN,LPCSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenPullStreamW(LPUNKNOWN,LPCWSTR,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenBlockingStreamA(LPUNKNOWN,LPCSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
+cpp_quote("HRESULT WINAPI URLOpenBlockingStreamW(LPUNKNOWN,LPCWSTR,LPSTREAM*,DWORD,LPBINDSTATUSCALLBACK);")
+
+cpp_quote("#define OInetCombineUrl CoInternetCombineUrl")
+cpp_quote("#define OInetCompareUrl CoInternetCompareUrl")
+cpp_quote("#define OInetGetSession CoInternetGetSession")
+
+cpp_quote("BOOL WINAPI IsLoggingEnabledA(LPCSTR);")
+cpp_quote("BOOL WINAPI IsLoggingEnabledW(LPCWSTR);")
+cpp_quote("#define IsLoggingEnabled WINELIB_NAME_AW(IsLoggingEnabled)")
+
+cpp_quote("#define MKSYS_URLMONIKER 6")
+cpp_quote("#define URL_MK_LEGACY 0")
+cpp_quote("#define URL_MK_UNIFORM 1")
+cpp_quote("#define URL_MK_NO_CANONICALIZE 2")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h
new file mode 100644
index 00000000..170d5579
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/userenv.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_USERENV_H
+#define __WINE_USERENV_H
+
+#include <wbemcli.h>
+#include <profinfo.h>
+
+#define PT_TEMPORARY 0x00000001
+#define PT_ROAMING 0x00000002
+#define PT_MANDATORY 0x00000004
+
+typedef enum _GPO_LINK {
+ GPLinkUnknown = 0,
+ GPLinkMachine,
+ GPLinkSite,
+ GPLinkDomain,
+ GPLinkOrganizationalUnit
+} GPO_LINK, *PGPO_LINK;
+
+typedef struct _GROUP_POLICY_OBJECTA {
+ DWORD dwOptions;
+ DWORD dwVersion;
+ LPSTR lpDSPath;
+ LPSTR lpFileSysPath;
+ LPSTR lpDisplayName;
+ CHAR szGPOName[50];
+ GPO_LINK GPOLink;
+ LPARAM lParam;
+ struct _GROUP_POLICY_OBJECTA *pNext;
+ struct _GROUP_POLICY_OBJECTA *pPrev;
+ LPSTR lpExtensions;
+ LPARAM lParam2;
+ LPSTR lpLink;
+} GROUP_POLICY_OBJECTA, *PGROUP_POLICY_OBJECTA;
+
+typedef struct _GROUP_POLICY_OBJECTW {
+ DWORD dwOptions;
+ DWORD dwVersion;
+ LPWSTR lpDSPath;
+ LPWSTR lpFileSysPath;
+ LPWSTR lpDisplayName;
+ WCHAR szGPOName[50];
+ GPO_LINK GPOLink;
+ LPARAM lParam;
+ struct _GROUP_POLICY_OBJECTW *pNext;
+ struct _GROUP_POLICY_OBJECTW *pPrev;
+ LPWSTR lpExtensions;
+ LPARAM lParam2;
+ LPWSTR lpLink;
+} GROUP_POLICY_OBJECTW, *PGROUP_POLICY_OBJECTW;
+
+DECL_WINELIB_TYPE_AW(GROUP_POLICY_OBJECT)
+DECL_WINELIB_TYPE_AW(PGROUP_POLICY_OBJECT)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI CreateEnvironmentBlock(LPVOID*,HANDLE,BOOL);
+BOOL WINAPI DestroyEnvironmentBlock(LPVOID);
+HANDLE WINAPI EnterCriticalPolicySection(BOOL);
+BOOL WINAPI ExpandEnvironmentStringsForUserA(HANDLE,LPCSTR,LPSTR,DWORD);
+BOOL WINAPI ExpandEnvironmentStringsForUserW(HANDLE,LPCWSTR,LPWSTR,DWORD);
+#define ExpandEnvironmentStringsForUser WINELIB_NAME_AW(ExpandEnvironmentStringsForUser)
+DWORD WINAPI GetAppliedGPOListW(DWORD,LPCWSTR,PSID,GUID*,PGROUP_POLICY_OBJECTW*);
+DWORD WINAPI GetAppliedGPOListA(DWORD,LPCSTR,PSID,GUID*,PGROUP_POLICY_OBJECTA*);
+#define GetAppliedGPOList WINELIB_NAME_AW(GetAppliedGPOList)
+BOOL WINAPI GetUserProfileDirectoryA(HANDLE,LPSTR,LPDWORD);
+BOOL WINAPI GetUserProfileDirectoryW(HANDLE,LPWSTR,LPDWORD);
+#define GetUserProfileDirectory WINELIB_NAME_AW(GetUserProfileDirectory)
+BOOL WINAPI GetProfilesDirectoryA(LPSTR,LPDWORD);
+BOOL WINAPI GetProfilesDirectoryW(LPWSTR,LPDWORD);
+#define GetProfilesDirectory WINELIB_NAME_AW(GetProfilesDirectory)
+BOOL WINAPI GetAllUsersProfileDirectoryA(LPSTR,LPDWORD);
+BOOL WINAPI GetAllUsersProfileDirectoryW(LPWSTR,LPDWORD);
+#define GetAllUsersProfileDirectory WINELIB_NAME_AW(GetAllUsersProfileDirectory)
+BOOL WINAPI GetProfileType(DWORD*);
+BOOL WINAPI LeaveCriticalPolicySection(HANDLE);
+BOOL WINAPI LoadUserProfileA(HANDLE,LPPROFILEINFOA);
+BOOL WINAPI LoadUserProfileW(HANDLE,LPPROFILEINFOW);
+#define LoadUserProfile WINELIB_NAME_AW(LoadUserProfile)
+BOOL WINAPI RegisterGPNotification(HANDLE,BOOL);
+BOOL WINAPI UnloadUserProfile(HANDLE,HANDLE);
+BOOL WINAPI UnregisterGPNotification(HANDLE);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_USERENV_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h
new file mode 100644
index 00000000..814932bb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/usp10.h
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2005 Steven Edwards
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __USP10_H
+#define __USP10_H
+
+#include <windows.h>
+/* FIXME: #include <specstrings.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** ScriptStringAnalyse */
+#define SSA_PASSWORD 0x00000001
+#define SSA_TAB 0x00000002
+#define SSA_CLIP 0x00000004
+#define SSA_FIT 0x00000008
+#define SSA_DZWG 0x00000010
+#define SSA_FALLBACK 0x00000020
+#define SSA_BREAK 0x00000040
+#define SSA_GLYPHS 0x00000080
+#define SSA_RTL 0x00000100
+#define SSA_GCP 0x00000200
+#define SSA_HOTKEY 0x00000400
+#define SSA_METAFILE 0x00000800
+#define SSA_LINK 0x00001000
+#define SSA_HIDEHOTKEY 0x00002000
+#define SSA_HOTKEYONLY 0x00002400
+#define SSA_FULLMEASURE 0x04000000
+#define SSA_LPKANSIFALLBACK 0x08000000
+#define SSA_PIDX 0x10000000
+#define SSA_LAYOUTRTL 0x20000000
+#define SSA_DONTGLYPH 0x40000000
+#define SSA_NOKASHIDA 0x80000000
+
+/** StringIsComplex */
+#define SIC_COMPLEX 1
+#define SIC_ASCIIDIGIT 2
+#define SIC_NEUTRAL 4
+
+/** ScriptGetCMap */
+#define SGCM_RTL 0x00000001
+
+/** ScriptApplyDigitSubstitution */
+#define SCRIPT_DIGITSUBSTITUTE_CONTEXT 0
+#define SCRIPT_DIGITSUBSTITUTE_NONE 1
+#define SCRIPT_DIGITSUBSTITUTE_NATIONAL 2
+#define SCRIPT_DIGITSUBSTITUTE_TRADITIONAL 3
+
+#define SCRIPT_UNDEFINED 0
+
+#define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200)
+
+typedef enum tag_SCRIPT_JUSTIFY {
+ SCRIPT_JUSTIFY_NONE = 0,
+ SCRIPT_JUSTIFY_ARABIC_BLANK = 1,
+ SCRIPT_JUSTIFY_CHARACTER = 2,
+ SCRIPT_JUSTIFY_RESERVED1 = 3,
+ SCRIPT_JUSTIFY_BLANK = 4,
+ SCRIPT_JUSTIFY_RESERVED2 = 5,
+ SCRIPT_JUSTIFY_RESERVED3 = 6,
+ SCRIPT_JUSTIFY_ARABIC_NORMAL = 7,
+ SCRIPT_JUSTIFY_ARABIC_KASHIDA = 8,
+ SCRIPT_JUSTIFY_ARABIC_ALEF = 9,
+ SCRIPT_JUSTIFY_ARABIC_HA = 10,
+ SCRIPT_JUSTIFY_ARABIC_RA = 11,
+ SCRIPT_JUSTIFY_ARABIC_BA = 12,
+ SCRIPT_JUSTIFY_ARABIC_BARA = 13,
+ SCRIPT_JUSTIFY_ARABIC_SEEN = 14,
+ SCRIPT_JUSTIFY_ARABIC_SEEN_M = 15,
+} SCRIPT_JUSTIFY;
+
+typedef struct tag_SCRIPT_CONTROL {
+ DWORD uDefaultLanguage :16;
+ DWORD fContextDigits :1;
+ DWORD fInvertPreBoundDir :1;
+ DWORD fInvertPostBoundDir :1;
+ DWORD fLinkStringBefore :1;
+ DWORD fLinkStringAfter :1;
+ DWORD fNeutralOverride :1;
+ DWORD fNumericOverride :1;
+ DWORD fLegacyBidiClass :1;
+ DWORD fMergeNeutralItems :1;
+ DWORD fReserved :7;
+} SCRIPT_CONTROL;
+
+typedef struct {
+ DWORD langid :16;
+ DWORD fNumeric :1;
+ DWORD fComplex :1;
+ DWORD fNeedsWordBreaking :1;
+ DWORD fNeedsCaretInfo :1;
+ DWORD bCharSet :8;
+ DWORD fControl :1;
+ DWORD fPrivateUseArea :1;
+ DWORD fNeedsCharacterJustify :1;
+ DWORD fInvalidGlyph :1;
+ DWORD fInvalidLogAttr :1;
+ DWORD fCDM :1;
+ DWORD fAmbiguousCharSet :1;
+ DWORD fClusterSizeVaries :1;
+ DWORD fRejectInvalid :1;
+} SCRIPT_PROPERTIES;
+
+typedef struct tag_SCRIPT_STATE {
+ WORD uBidiLevel :5;
+ WORD fOverrideDirection :1;
+ WORD fInhibitSymSwap :1;
+ WORD fCharShape :1;
+ WORD fDigitSubstitute :1;
+ WORD fInhibitLigate :1;
+ WORD fDisplayZWG :1;
+ WORD fArabicNumContext :1;
+ WORD fGcpClusters :1;
+ WORD fReserved :1;
+ WORD fEngineReserved :2;
+} SCRIPT_STATE;
+
+typedef struct tag_SCRIPT_ANALYSIS {
+ WORD eScript :10;
+ WORD fRTL :1;
+ WORD fLayoutRTL :1;
+ WORD fLinkBefore :1;
+ WORD fLinkAfter :1;
+ WORD fLogicalOrder :1;
+ WORD fNoGlyphIndex :1;
+ SCRIPT_STATE s;
+} SCRIPT_ANALYSIS;
+
+typedef struct tag_SCRIPT_ITEM {
+ int iCharPos;
+ SCRIPT_ANALYSIS a;
+} SCRIPT_ITEM;
+
+typedef struct tag_SCRIPT_DIGITSUBSTITUTE {
+ DWORD NationalDigitLanguage :16;
+ DWORD TraditionalDigitLanguage :16;
+ DWORD DigitSubstitute :8;
+ DWORD dwReserved;
+} SCRIPT_DIGITSUBSTITUTE;
+
+typedef struct tag_SCRIPT_FONTPROPERTIES {
+ int cBytes;
+ WORD wgBlank;
+ WORD wgDefault;
+ WORD wgInvalid;
+ WORD wgKashida;
+ int iKashidaWidth;
+} SCRIPT_FONTPROPERTIES;
+
+typedef struct tag_SCRIPT_TABDEF {
+ int cTabStops;
+ int iScale;
+ int *pTabStops;
+ int iTabOrigin;
+} SCRIPT_TABDEF;
+
+typedef struct tag_SCRIPT_VISATTR {
+ WORD uJustification :4;
+ WORD fClusterStart :1;
+ WORD fDiacritic :1;
+ WORD fZeroWidth :1;
+ WORD fReserved :1;
+ WORD fShapeReserved :8;
+} SCRIPT_VISATTR;
+
+typedef struct tag_SCRIPT_LOGATTR {
+ BYTE fSoftBreak :1;
+ BYTE fWhiteSpace :1;
+ BYTE fCharStop :1;
+ BYTE fWordStop :1;
+ BYTE fInvalid :1;
+ BYTE fReserved :3;
+} SCRIPT_LOGATTR;
+
+typedef void *SCRIPT_CACHE;
+typedef void *SCRIPT_STRING_ANALYSIS;
+
+#ifndef LSDEFS_DEFINED
+typedef struct tagGOFFSET {
+ LONG du;
+ LONG dv;
+} GOFFSET;
+#endif
+
+typedef ULONG OPENTYPE_TAG;
+
+typedef struct tagOPENTYPE_FEATURE_RECORD
+{
+ OPENTYPE_TAG tagFeature;
+ LONG lParameter;
+} OPENTYPE_FEATURE_RECORD;
+
+typedef struct tagSCRIPT_GLYPHPROP
+{
+ SCRIPT_VISATTR sva;
+ WORD reserved;
+} SCRIPT_GLYPHPROP;
+
+typedef struct tagSCRIPT_CHARPROP
+{
+ WORD fCanGlyphAlone :1;
+ WORD reserved :15;
+} SCRIPT_CHARPROP;
+
+typedef struct tagTEXTRANGE_PROPERTIES
+{
+ OPENTYPE_FEATURE_RECORD *potfRecords;
+ INT cotfRecords;
+} TEXTRANGE_PROPERTIES;
+
+/* Function Declarations */
+
+HRESULT WINAPI ScriptApplyDigitSubstitution(const SCRIPT_DIGITSUBSTITUTE* psds,
+ SCRIPT_CONTROL* psc, SCRIPT_STATE* pss);
+HRESULT WINAPI ScriptApplyLogicalWidth(const int *piDx, int cChars, int cGlyphs, const WORD *pwLogClust,
+ const SCRIPT_VISATTR *psva, const int *piAdvance,
+ const SCRIPT_ANALYSIS *psa, ABC *pABC, int *piJustify);
+HRESULT WINAPI ScriptRecordDigitSubstitution(LCID Locale, SCRIPT_DIGITSUBSTITUTE *psds);
+HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItems,
+ const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState,
+ SCRIPT_ITEM *pItems, int *pcItems);
+HRESULT WINAPI ScriptGetCMap(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcInChars, int cChars,
+ DWORD dwFlags, WORD *pwOutGlyphs);
+HRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPROPERTIES *sfp);
+HRESULT WINAPI ScriptGetGlyphABCWidth(HDC hdc, SCRIPT_CACHE *psc, WORD wGlyph, ABC *pABC);
+HRESULT WINAPI ScriptGetLogicalWidths(const SCRIPT_ANALYSIS *psa, int cChars, int cGlyphs,
+ const int *piGlyphWidth, const WORD *pwLogClust,
+ const SCRIPT_VISATTR *psva, int *piDx);
+HRESULT WINAPI ScriptGetProperties(const SCRIPT_PROPERTIES ***ppSp, int *piNumScripts);
+HRESULT WINAPI ScriptStringAnalyse(HDC hdc,
+ const void *pString,
+ int cString,
+ int cGlyphs,
+ int iCharset,
+ DWORD dwFlags,
+ int iReqWidth,
+ SCRIPT_CONTROL *psControl,
+ SCRIPT_STATE *psState,
+ const int *piDx,
+ SCRIPT_TABDEF *pTabdef,
+ const BYTE *pbInClass,
+ SCRIPT_STRING_ANALYSIS *pssa);
+HRESULT WINAPI ScriptStringValidate(SCRIPT_STRING_ANALYSIS ssa);
+HRESULT WINAPI ScriptStringFree(SCRIPT_STRING_ANALYSIS *pssa);
+HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc);
+HRESULT WINAPI ScriptIsComplex(const WCHAR* pwcInChars, int cInChars, DWORD dwFlags);
+HRESULT WINAPI ScriptJustify(const SCRIPT_VISATTR *psva, const int *piAdvance, int cGlyphs,
+ int iDx, int iMinKashida, int *piJustify);
+HRESULT WINAPI ScriptLayout(int cRuns, const BYTE *pbLevel, int *piVisualToLogical, int *piLogicalToVisual);
+HRESULT WINAPI ScriptShape(HDC hdc, SCRIPT_CACHE *psc, const WCHAR *pwcChars, int cChars, int cMaxGlyphs,
+ SCRIPT_ANALYSIS *psa, WORD *pwOutGlyphs, WORD *pwLogClust, SCRIPT_VISATTR *psva, int *pcGlyphs);
+HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, int cGlyphs, const SCRIPT_VISATTR *psva,
+ SCRIPT_ANALYSIS *psa, int *piAdvance, GOFFSET *pGoffset, ABC *pABC );
+HRESULT WINAPI ScriptBreak(const WCHAR *pwcChars, int cChars, const SCRIPT_ANALYSIS *psa, SCRIPT_LOGATTR *psla);
+HRESULT WINAPI ScriptCacheGetHeight(HDC hdc, SCRIPT_CACHE *psc, LONG *tmHeight);
+HRESULT WINAPI ScriptCPtoX(int iCP, BOOL fTrailing, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva,
+ const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piX);
+HRESULT WINAPI ScriptXtoCP(int iX, int cChars, int cGlyphs, const WORD *pwLogClust, const SCRIPT_VISATTR *psva,
+ const int *piAdvance, const SCRIPT_ANALYSIS *psa, int *piCP, int *piTrailing);
+HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrailing, int *pX);
+HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int *piCh , int *piTrailing);
+HRESULT WINAPI ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS ssa, int *piDx);
+HRESULT WINAPI ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS ssa, UINT *puOrder);
+HRESULT WINAPI ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa, int iX, int iY, UINT uOptions, const RECT *prc,
+ int iMinSel, int iMaxSel, BOOL fDisabled);
+HRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UINT fuOptions, const RECT *lprc,
+ const SCRIPT_ANALYSIS *psa, const WCHAR *pwcReserved, int iReserved, const WORD *pwGlyphs,
+ int cGlyphs, const int *piAdvance, const int *piJustify, const GOFFSET *pGoffset);
+const int* WINAPI ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS ssa);
+const SCRIPT_LOGATTR* WINAPI ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS ssa);
+const SIZE* WINAPI ScriptString_pSize(SCRIPT_STRING_ANALYSIS ssa);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __USP10_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h
new file mode 100644
index 00000000..f0b86791
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uuids.h
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef OUR_GUID_ENTRY
+#define OUR_GUID_ENTRY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8);
+#endif
+
+#define MEDIATYPE_NULL GUID_NULL
+#define MEDIASUBTYPE_NULL GUID_NULL
+
+OUR_GUID_ENTRY(MEDIASUBTYPE_None, 0xe436eb8e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIATYPE_Video, 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Audio, 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Text, 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Midi, 0x7364696d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_Stream, 0xe436eb83, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIATYPE_Interleaved, 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_File, 0x656c6966, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_ScriptCommand, 0x73636d64, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_AUXLine21Data, 0x670aea80, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIATYPE_Timecode, 0x0482dee3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIATYPE_LMRT, 0x74726c6d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_URL_STREAM, 0x736c7275, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YVU9, 0x39555659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Y411, 0x31313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Y41P, 0x50313459, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YUY2, 0x32595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YVYU, 0x55595659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_UYVY, 0x59565955, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Y211, 0x31313259, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_YV12, 0x32315659, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AYUV, 0x56555941, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_CLJR, 0x524a4c43, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_IF09, 0x39304649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_CPLA, 0x414c5043, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MJPG, 0x47504a4d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_TVMJ, 0x4a4d5654, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_WAKE, 0x454b4157, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_CFCC, 0x43434643, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_IJPG, 0x47504a49, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Plum, 0x6d756c50, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVCS, 0x53435644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DVSD, 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MDVF, 0x4656444d, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB1, 0xe436eb78, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB4, 0xe436eb79, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB8, 0xe436eb7a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB565, 0xe436eb7b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB555, 0xe436eb7c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB24, 0xe436eb7d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_RGB32, 0xe436eb7e, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Overlay, 0xe436eb7f, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Packet, 0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Payload, 0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1AudioPayload, 0x00000050, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIATYPE_MPEG1SystemStream, 0xe436eb82, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1System, 0xe436eb84, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1VideoCD, 0xe436eb85, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Video, 0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG1Audio, 0xe436eb87, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Avi, 0xe436eb88, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Asf, 0x3db80f90, 0x9412, 0x11d1, 0xad, 0xed, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTMovie, 0xe436eb89, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTRpza, 0x617a7072, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTSmc, 0x20636d73, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTRle, 0x20656c72, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_QTJpeg, 0x6765706a, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_PCMAudio_Obsolete, 0xe436eb8a, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_PCM, 0x00000001, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_WAVE, 0xe436eb8b, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AU, 0xe436eb8c, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AIFF, 0xe436eb8d, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(MEDIASUBTYPE_dvsd, 0x64737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_dvhd, 0x64687664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_dvsl, 0x6c737664, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_BytePair, 0x6e8d4a22, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_GOPPacket, 0x6e8d4a23, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIASUBTYPE_Line21_VBIRawData, 0x6e8d4a24, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DssVideo, 0xa0af4f81, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(MEDIASUBTYPE_DssAudio, 0xa0af4f82, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(MEDIASUBTYPE_VPVideo, 0x5a9b6a40, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(MEDIASUBTYPE_VPVBI, 0x5a9b6a41, 0x1a22, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IAMCutListElement, 0xcde29520, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)
+OUR_GUID_ENTRY(IID_IAMFileCutListElement, 0xf0947070, 0x276c, 0x11d0, 0x83, 0x16, 0x00, 0x20, 0xaf, 0x11, 0xc0, 0x10)
+OUR_GUID_ENTRY(IID_IAMVideoCutListElement, 0xcde29522, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)
+OUR_GUID_ENTRY(IID_IAMAudioCutListElement, 0xcde29524, 0x3418, 0x11cf, 0xa5, 0xb0, 0x00, 0x20, 0xaf, 0x05, 0x3d, 0x8f)
+OUR_GUID_ENTRY(CLSID_CutListSource, 0xa5ea8d20, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_IStandardCutList, 0xa5ea8d29, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_IFileClip, 0xa5ea8d2a, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_ICutListGraphBuilder, 0xa5ea8d2c, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CutListGraphBuilder, 0xa5ea8d2f, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_SimpleCutList, 0xa5ea8d30, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_VideoFileClip, 0xa5ea8d31, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_AudioFileClip, 0xa5ea8d32, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CutListCacheMemory, 0xa5ea8d33, 0x253d, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder, 0xbf87b6e0, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_CaptureGraphBuilder2, 0xbf87b6e1, 0x8c27, 0x11d0, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_ProtoFilterGraph, 0xe436ebb0, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_SystemClock, 0xe436ebb1, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_FilterMapper, 0xe436ebb2, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_FilterGraph, 0xe436ebb3, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_FilterGraphNoThread, 0xe436ebb8, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_MPEG1Doc, 0xe4bbd160, 0x4269, 0x11ce, 0x83, 0x8d, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_FileSource, 0x701722e0, 0x8ae3, 0x11ce, 0xa8, 0x5c, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)
+OUR_GUID_ENTRY(CLSID_MPEG1PacketPlayer, 0x26c25940, 0x4ca9, 0x11ce, 0xa8, 0x28, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)
+OUR_GUID_ENTRY(CLSID_MPEG1Splitter, 0x336475d0, 0x942a, 0x11ce, 0xa8, 0x70, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5)
+OUR_GUID_ENTRY(CLSID_CMpegVideoCodec, 0xfeb50740, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c)
+OUR_GUID_ENTRY(CLSID_CMpegAudioCodec, 0x4a2286e0, 0x7bef, 0x11ce, 0x9b, 0xd9, 0x00, 0x00, 0xe2, 0x02, 0x59, 0x9c)
+OUR_GUID_ENTRY(CLSID_TextRender, 0xe30629d3, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)
+OUR_GUID_ENTRY(CLSID_InfTee, 0xf8388a40, 0xd5bb, 0x11d0, 0xbe, 0x5a, 0x00, 0x80, 0xc7, 0x06, 0x56, 0x8e)
+OUR_GUID_ENTRY(CLSID_AviSplitter, 0x1b544c20, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)
+OUR_GUID_ENTRY(CLSID_AviReader, 0x1b544c21, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)
+OUR_GUID_ENTRY(CLSID_VfwCapture, 0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1e)
+OUR_GUID_ENTRY(CLSID_CaptureProperties, 0x1b544c22, 0xfd0b, 0x11ce, 0x8c, 0x63, 0x00, 0xaa, 0x00, 0x44, 0xb5, 0x1f)
+OUR_GUID_ENTRY(CLSID_FGControl, 0xe436ebb4, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_MOVReader, 0x44584800, 0xf8ee, 0x11ce, 0xb2, 0xd4, 0x00, 0xdd, 0x01, 0x10, 0x1b, 0x85)
+OUR_GUID_ENTRY(CLSID_QuickTimeParser, 0xd51bd5a0, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a)
+OUR_GUID_ENTRY(CLSID_WAVEParser, 0xd51bd5a1, 0x7548, 0x11cf, 0xa5, 0x20, 0x00, 0x80, 0xc7, 0x7e, 0xf5, 0x8a)
+OUR_GUID_ENTRY(CLSID_QTDec, 0xfdfe9681, 0x74a3, 0x11d0, 0xaf, 0xa7, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_AVIDoc, 0xd3588ab0, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_AVIDocWriter, 0xd3588ab1, 0x0781, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_SampleGrabber, 0xc1f400a0, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)
+OUR_GUID_ENTRY(CLSID_NullRenderer, 0xc1f400a4, 0x3f08, 0x11d3, 0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37)
+OUR_GUID_ENTRY(CLSID_VideoRenderer, 0x70e102b0, 0x5556, 0x11ce, 0x97, 0xc0, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_VideoRendererDefault, 0x6bc1cffa, 0x8fc1, 0x4261, 0xac, 0x22, 0xcf, 0xb4, 0xcc, 0x38, 0xdb, 0x50)
+OUR_GUID_ENTRY(CLSID_Colour, 0x1643e180, 0x90f5, 0x11ce, 0x97, 0xd5, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_Dither, 0x1da08500, 0x9edc, 0x11cf, 0xbc, 0x10, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(CLSID_ModexRenderer, 0x07167665, 0x5011, 0x11cf, 0xbf, 0x33, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_AudioRender, 0xe30629d1, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)
+OUR_GUID_ENTRY(CLSID_AudioProperties, 0x05589faf, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_DSoundRender, 0x79376820, 0x07d0, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67)
+OUR_GUID_ENTRY(CLSID_AudioRecord, 0xe30629d2, 0x27e5, 0x11ce, 0x87, 0x5d, 0x00, 0x60, 0x8c, 0xb7, 0x80, 0x66)
+OUR_GUID_ENTRY(CLSID_AudioInputMixerProperties, 0x2ca8ca52, 0x3c3f, 0x11d2, 0xb7, 0x3d, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d)
+OUR_GUID_ENTRY(CLSID_AVIDec, 0xcf49d4e0, 0x1115, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_AVIDraw, 0xa888df60, 0x1e90, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9)
+OUR_GUID_ENTRY(CLSID_ACMWrapper, 0x6a08cf80, 0x0e18, 0x11cf, 0xa2, 0x4d, 0x00, 0x20, 0xaf, 0xd7, 0x97, 0x67)
+OUR_GUID_ENTRY(CLSID_AsyncReader, 0xe436ebb5, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_URLReader, 0xe436ebb6, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_PersistMonikerPID, 0xe436ebb7, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70)
+OUR_GUID_ENTRY(CLSID_AMovie, 0x5f2759c0, 0x7685, 0x11cf, 0x8b, 0x23, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60)
+OUR_GUID_ENTRY(CLSID_AVICo, 0xd76e2820, 0x1563, 0x11cf, 0xac, 0x98, 0x00, 0xaa, 0x00, 0x4c, 0x0f, 0xa9)
+OUR_GUID_ENTRY(CLSID_FileWriter, 0x8596e5f0, 0x0da5, 0x11d0, 0xbd, 0x21, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AviDest, 0xe2510970, 0xf137, 0x11ce, 0x8b, 0x67, 0x00, 0xaa, 0x00, 0xa3, 0xf1, 0xa6)
+OUR_GUID_ENTRY(CLSID_AsfMux, 0xf560ae42, 0x6cdd, 0x11d1, 0xad, 0xe2, 0x00, 0x00, 0xf8, 0x75, 0x4b, 0x99)
+OUR_GUID_ENTRY(CLSID_AviMuxProptyPage, 0xc647b5c0, 0x157c, 0x11d0, 0xbd, 0x23, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AviMuxProptyPage1, 0x0a9ae910, 0x85c0, 0x11d0, 0xbd, 0x42, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AVIMIDIRender, 0x07b65360, 0xc445, 0x11ce, 0xaf, 0xde, 0x00, 0xaa, 0x00, 0x6c, 0x14, 0xf4)
+OUR_GUID_ENTRY(CLSID_DVVideoCodec, 0xb1b77c00, 0xc3e4, 0x11cf, 0xaf, 0x79, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVVideoEnc, 0x13aa3650, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVSplitter, 0x4eb31670, 0x9fc6, 0x11cf, 0xaf, 0x6e, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVMux, 0x129d7e40, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_SeekingPassThru, 0x060af76c, 0x68dd, 0x11d0, 0x8f, 0xc1, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d)
+OUR_GUID_ENTRY(CLSID_Line21Decoder, 0x6e8d4a20, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(CLSID_OverlayMixer, 0xcd8743a1, 0x3736, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(CLSID_VBISurfaces, 0x814b9800, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(CLSID_SystemDeviceEnum, 0x62be5d10, 0x60eb, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CDeviceMoniker, 0x4315d437, 0x5b8c, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_VideoInputDeviceCategory, 0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CVidCapClassManager, 0x860bb310, 0x5d01, 0x11d0, 0xbd, 0x3b, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_LegacyAmFilterCategory, 0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CQzFilterClassManager, 0x083863f1, 0x70de, 0x11d0, 0xbd, 0x40, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_VideoCompressorCategory, 0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CIcmCoClassManager, 0x33d9a760, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AudioCompressorCategory, 0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CAcmCoClassManager, 0x33d9a761, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AudioInputDeviceCategory, 0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CWaveinClassManager, 0x33d9a762, 0x90c8, 0x11d0, 0xbd, 0x43, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_AudioRendererCategory, 0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_CWaveOutClassManager, 0xe0f158e1, 0xcb04, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_MidiRendererCategory, 0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b)
+OUR_GUID_ENTRY(CLSID_CMidiOutClassManager, 0x4efe2452, 0x168a, 0x11d1, 0xbc, 0x76, 0x00, 0xc0, 0x4f, 0xb9, 0x45, 0x3b)
+OUR_GUID_ENTRY(CLSID_TransmitCategory, 0xcc7bfb41, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59)
+OUR_GUID_ENTRY(CLSID_DeviceControlCategory, 0xcc7bfb46, 0xf175, 0x11d1, 0xa3, 0x92, 0x00, 0xe0, 0x29, 0x1f, 0x39, 0x59)
+OUR_GUID_ENTRY(CLSID_ActiveMovieCategories, 0xda4e3da0, 0xd07d, 0x11d0, 0xbd, 0x50, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_DVDHWDecodersCategory, 0x2721ae20, 0x7e70, 0x11d0, 0xa5, 0xd6, 0x28, 0xdb, 0x04, 0xc1, 0x00, 0x00)
+OUR_GUID_ENTRY(CLSID_FilterMapper2, 0xcda42200, 0xbd88, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_MemoryAllocator, 0x1e651cc0, 0xb199, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45)
+OUR_GUID_ENTRY(CLSID_MediaPropertyBag, 0xcdbd8d00, 0xc193, 0x11d0, 0xbd, 0x4e, 0x00, 0xa0, 0xc9, 0x11, 0xce, 0x86)
+OUR_GUID_ENTRY(CLSID_DvdGraphBuilder, 0xfcc152b7, 0xf372, 0x11d0, 0x8e, 0x00, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b)
+OUR_GUID_ENTRY(CLSID_DVDNavigator, 0x9b8c4620, 0x2c1a, 0x11d0, 0x84, 0x93, 0x00, 0xa0, 0x24, 0x38, 0xad, 0x48)
+OUR_GUID_ENTRY(CLSID_SmartTee, 0xcc58e280, 0x8aa1, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(FORMAT_None, 0x0f6417d6, 0xc318, 0x11d0, 0xa4, 0x3f, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96)
+OUR_GUID_ENTRY(FORMAT_VideoInfo, 0x05589f80, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_VideoInfo2, 0xf72a76a0, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(FORMAT_WaveFormatEx, 0x05589f81, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_MPEGVideo, 0x05589f82, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_MPEGStreams, 0x05589f83, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(FORMAT_DvInfo, 0x05589f84, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_DirectDrawProperties, 0x944d4c00, 0xdd52, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(CLSID_PerformanceProperties, 0x59ce6880, 0xacf8, 0x11cf, 0xb5, 0x6e, 0x00, 0x80, 0xc7, 0xc4, 0xb6, 0x8a)
+OUR_GUID_ENTRY(CLSID_QualityProperties, 0x418afb70, 0xf8b8, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3)
+OUR_GUID_ENTRY(IID_IBaseVideoMixer, 0x61ded640, 0xe912, 0x11ce, 0xa0, 0x99, 0x00, 0xaa, 0x00, 0x47, 0x9a, 0x58)
+OUR_GUID_ENTRY(IID_IDirectDrawVideo, 0x36d39eb0, 0xdd75, 0x11ce, 0xbf, 0x0e, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(IID_IQualProp, 0x1bd0ecb0, 0xf8e2, 0x11ce, 0xaa, 0xc6, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3)
+OUR_GUID_ENTRY(CLSID_VPObject, 0xce292861, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPObject, 0xce292862, 0xfc88, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPControl, 0x25df12c1, 0x3de0, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(CLSID_VPVBIObject, 0x814b9801, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IVPVBIObject, 0x814b9802, 0x1c88, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IVPConfig, 0xbc29a660, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPNotify, 0xc76794a1, 0xd6c5, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPNotify2, 0xebf47183, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IVPVBIConfig, 0xec529b00, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IVPVBINotify, 0xec529b01, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a)
+OUR_GUID_ENTRY(IID_IMixerPinConfig, 0x593cdde1, 0x0759, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(IID_IMixerPinConfig2, 0xebf47182, 0x8764, 0x11d1, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b)
+OUR_GUID_ENTRY(CLSID_ModexProperties, 0x0618aa30, 0x6bc4, 0x11cf, 0xbf, 0x36, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(IID_IFullScreenVideo, 0xdd1d7110, 0x7836, 0x11cf, 0xbf, 0x47, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a)
+OUR_GUID_ENTRY(IID_IFullScreenVideoEx, 0x53479470, 0xf1dd, 0x11cf, 0xbc, 0x42, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(CLSID_DVDecPropertiesPage, 0x101193c0, 0x0bfe, 0x11d0, 0xaf, 0x91, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVEncPropertiesPage, 0x4150f050, 0xbb6f, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(CLSID_DVMuxPropertyPage, 0x4db880e0, 0xc10d, 0x11d0, 0xaf, 0xb9, 0x00, 0xaa, 0x00, 0xb6, 0x7a, 0x42)
+OUR_GUID_ENTRY(IID_IAMDirectSound, 0x546f4260, 0xd53e, 0x11cf, 0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(IID_IMpegAudioDecoder, 0xb45dd570, 0x3c77, 0x11d1, 0xab, 0xe1, 0x00, 0xa0, 0xc9, 0x05, 0xf3, 0x75)
+OUR_GUID_ENTRY(IID_IAMLine21Decoder, 0x6e8d4a21, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7)
+OUR_GUID_ENTRY(FORMAT_AnalogVideo, 0x0482dde0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIATYPE_AnalogVideo, 0x0482dde1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_NTSC_M, 0x0482dde2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_B, 0x0482dde5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_D, 0x0482dde6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_G, 0x0482dde7, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_H, 0x0482dde8, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_I, 0x0482dde9, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_M, 0x0482ddea, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_PAL_N, 0x0482ddeb, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_B, 0x0482ddf0, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_D, 0x0482ddf1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_G, 0x0482ddf2, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_H, 0x0482ddf3, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K, 0x0482ddf4, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_K1, 0x0482ddf5, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIASUBTYPE_AnalogVideo_SECAM_L, 0x0482ddf6, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(MEDIATYPE_AnalogAudio, 0x0482dee1, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(TIME_FORMAT_NONE, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
+OUR_GUID_ENTRY(TIME_FORMAT_FRAME, 0x7b785570, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_BYTE, 0x7b785571, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_SAMPLE, 0x7b785572, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_FIELD, 0x7b785573, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(TIME_FORMAT_MEDIA_TIME, 0x7b785574, 0x8c82, 0x11cf, 0xbc, 0x0c, 0x00, 0xaa, 0x00, 0xac, 0x74, 0xf6)
+OUR_GUID_ENTRY(AMPROPSETID_Pin, 0x9b00f101, 0x1567, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(PIN_CATEGORY_CAPTURE, 0xfb6c4281, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_PREVIEW, 0xfb6c4282, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_ANALOGVIDEOIN, 0xfb6c4283, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_VBI, 0xfb6c4284, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT, 0xfb6c4285, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_NABTS, 0xfb6c4286, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_EDS, 0xfb6c4287, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_TELETEXT, 0xfb6c4288, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_CC, 0xfb6c4289, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_STILL, 0xfb6c428a, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_TIMECODE, 0xfb6c428b, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(PIN_CATEGORY_VIDEOPORT_VBI, 0xfb6c428c, 0x0353, 0x11d1, 0x90, 0x5f, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba)
+OUR_GUID_ENTRY(LOOK_UPSTREAM_ONLY, 0xac798be0, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(LOOK_DOWNSTREAM_ONLY, 0xac798be1, 0x98e3, 0x11d1, 0xb3, 0xf1, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5)
+OUR_GUID_ENTRY(CLSID_TVTunerFilterPropertyPage, 0x266eee41, 0x6c63, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65)
+OUR_GUID_ENTRY(CLSID_CrossbarFilterPropertyPage, 0x71f96461, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_TVAudioFilterPropertyPage, 0x71f96463, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_VideoProcAmpPropertyPage, 0x71f96464, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_CameraControlPropertyPage, 0x71f96465, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_AnalogVideoDecoderPropertyPage, 0x71f96466, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_VideoStreamConfigPropertyPage, 0x71f96467, 0x78f3, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56)
+OUR_GUID_ENTRY(CLSID_VideoMixingRenderer9, 0x51b4abf3, 0x748f, 0x4e3b, 0xa2, 0x76, 0xc8, 0x28, 0x33, 0x0e, 0x92, 0x6a)
+
+#undef OUR_GUID_ENTRY
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h
new file mode 100644
index 00000000..e496f01f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/uxtheme.h
@@ -0,0 +1,217 @@
+/*
+ * Win32 5.1 theme definitions
+ *
+ * Copyright (C) 2003 Kevin Koltzau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_UXTHEME_H
+#define __WINE_UXTHEME_H
+
+#include <commctrl.h>
+
+typedef HANDLE HTHEME;
+
+HRESULT WINAPI CloseThemeData(HTHEME hTheme);
+HRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*);
+
+#define DTBG_CLIPRECT 0x00000001
+#define DTBG_DRAWSOLID 0x00000002
+#define DTBG_OMITBORDER 0x00000004
+#define DTBG_OMITCONTENT 0x00000008
+#define DTBG_COMPUTINGREGION 0x00000010
+#define DTBG_MIRRORDC 0x00000020
+
+typedef struct _DTBGOPTS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ RECT rcClip;
+} DTBGOPTS, *PDTBGOPTS;
+
+HRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*,
+ const DTBGOPTS*);
+HRESULT WINAPI DrawThemeEdge(HTHEME,HDC,int,int,const RECT*,UINT,UINT,
+ RECT*);
+HRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int);
+HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*);
+
+#define DTT_GRAYED 0x1
+
+HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD,
+ const RECT*);
+
+#define ETDT_DISABLE 0x00000001
+#define ETDT_ENABLE 0x00000002
+#define ETDT_USETABTEXTURE 0x00000004
+#define ETDT_ENABLETAB (ETDT_ENABLE|ETDT_USETABTEXTURE)
+
+HRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD);
+HRESULT WINAPI EnableTheming(BOOL);
+HRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int);
+
+#define STAP_ALLOW_NONCLIENT (1<<0)
+#define STAP_ALLOW_CONTROLS (1<<1)
+#define STAP_ALLOW_WEBCONTENT (1<<2)
+
+DWORD WINAPI GetThemeAppProperties(void);
+HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME,HDC,int,int,
+ const RECT*,RECT*);
+HRESULT WINAPI GetThemeBackgroundExtent(HTHEME,HDC,int,int,const RECT*,RECT*);
+HRESULT WINAPI GetThemeBackgroundRegion(HTHEME,HDC,int,int,const RECT*,HRGN*);
+HRESULT WINAPI GetThemeBool(HTHEME,int,int,int,BOOL*);
+HRESULT WINAPI GetThemeColor(HTHEME,int,int,int,COLORREF*);
+
+#if defined(__GNUC__)
+# define SZ_THDOCPROP_DISPLAYNAME (const WCHAR []){ 'D','i','s','p','l','a','y','N','a','m','e',0 }
+# define SZ_THDOCPROP_CANONICALNAME (const WCHAR []){ 'T','h','e','m','e','N','a','m','e',0 }
+# define SZ_THDOCPROP_TOOLTIP (const WCHAR []){ 'T','o','o','l','T','i','p',0 }
+# define SZ_THDOCPROP_AUTHOR (const WCHAR []){ 'a','u','t','h','o','r',0 }
+#elif defined(_MSC_VER)
+# define SZ_THDOCPROP_DISPLAYNAME L"DisplayName"
+# define SZ_THDOCPROP_CANONICALNAME L"ThemeName"
+# define SZ_THDOCPROP_TOOLTIP L"ToolTip"
+# define SZ_THDOCPROP_AUTHOR L"author"
+#else
+static const WCHAR SZ_THDOCPROP_DISPLAYNAME[] = { 'D','i','s','p','l','a','y','N','a','m','e',0 };
+static const WCHAR SZ_THDOCPROP_CANONICALNAME[] = { 'T','h','e','m','e','N','a','m','e',0 };
+static const WCHAR SZ_THDOCPROP_TOOLTIP[] = { 'T','o','o','l','T','i','p',0 };
+static const WCHAR SZ_THDOCPROP_AUTHOR[] = { 'a','u','t','h','o','r',0 };
+#endif
+
+HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR,LPCWSTR,LPWSTR,int);
+HRESULT WINAPI GetThemeEnumValue(HTHEME,int,int,int,int*);
+HRESULT WINAPI GetThemeFilename(HTHEME,int,int,int,LPWSTR,int);
+HRESULT WINAPI GetThemeFont(HTHEME,HDC,int,int,int,LOGFONTW*);
+HRESULT WINAPI GetThemeInt(HTHEME,int,int,int,int*);
+
+#define MAX_INTLIST_COUNT 10
+typedef struct _INTLIST {
+ int iValueCount;
+ int iValues[MAX_INTLIST_COUNT];
+} INTLIST, *PINTLIST;
+
+HRESULT WINAPI GetThemeIntList(HTHEME,int,int,int,INTLIST*);
+
+typedef struct _MARGINS {
+ int cxLeftWidth;
+ int cxRightWidth;
+ int cyTopHeight;
+ int cyBottomHeight;
+} MARGINS, *PMARGINS;
+
+HRESULT WINAPI GetThemeMargins(HTHEME,HDC,int,int,int,RECT*,MARGINS*);
+HRESULT WINAPI GetThemeMetric(HTHEME,HDC,int,int,int,int*);
+
+typedef enum {
+ TS_MIN,
+ TS_TRUE,
+ TS_DRAW
+} THEMESIZE;
+
+HRESULT WINAPI GetThemePartSize(HTHEME,HDC,int,int,RECT*,THEMESIZE,SIZE*);
+HRESULT WINAPI GetThemePosition(HTHEME,int,int,int,POINT*);
+
+typedef enum {
+ PO_STATE,
+ PO_PART,
+ PO_CLASS,
+ PO_GLOBAL,
+ PO_NOTFOUND
+} PROPERTYORIGIN;
+
+HRESULT WINAPI GetThemePropertyOrigin(HTHEME,int,int,int,PROPERTYORIGIN*);
+HRESULT WINAPI GetThemeRect(HTHEME,int,int,int,RECT*);
+HRESULT WINAPI GetThemeString(HTHEME,int,int,int,LPWSTR,int);
+BOOL WINAPI GetThemeSysBool(HTHEME,int);
+COLORREF WINAPI GetThemeSysColor(HTHEME,int);
+HBRUSH WINAPI GetThemeSysColorBrush(HTHEME,int);
+HRESULT WINAPI GetThemeSysFont(HTHEME,int,LOGFONTW*);
+HRESULT WINAPI GetThemeSysInt(HTHEME,int,int*);
+int WINAPI GetThemeSysSize(HTHEME,int);
+HRESULT WINAPI GetThemeSysString(HTHEME,int,LPWSTR,int);
+HRESULT WINAPI GetThemeTextExtent(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,
+ const RECT*,RECT*);
+HRESULT WINAPI GetThemeTextMetrics(HTHEME,HDC,int,int,TEXTMETRICW*);
+HTHEME WINAPI GetWindowTheme(HWND);
+
+#define HTTB_BACKGROUNDSEG 0x0000
+#define HTTB_FIXEDBORDER 0x0002
+#define HTTB_CAPTION 0x0004
+#define HTTB_RESIZINGBORDER_LEFT 0x0010
+#define HTTB_RESIZINGBORDER_TOP 0x0020
+#define HTTB_RESIZINGBORDER_RIGHT 0x0040
+#define HTTB_RESIZINGBORDER_BOTTOM 0x0080
+#define HTTB_RESIZINGBORDER \
+ (HTTB_RESIZINGBORDER_LEFT|HTTB_RESIZINGBORDER_TOP|\
+ HTTB_RESIZINGBORDER_RIGHT|HTTB_RESIZINGBORDER_BOTTOM)
+#define HTTB_SIZINGTEMPLATE 0x0100
+#define HTTB_SYSTEMSIZINGMARGINS 0x0200
+
+#define OTD_FORCE_RECT_SIZING 0x0001
+#define OTD_NONCLIENT 0x0002
+#define OTD_VALIDBITS (OTD_FORCE_RECT_SIZING | OTD_NONCLIENT)
+
+HRESULT WINAPI HitTestThemeBackground(HTHEME,HDC,int,int,DWORD,const RECT*,
+ HRGN,POINT,WORD*);
+BOOL WINAPI IsAppThemed(void);
+BOOL WINAPI IsThemeActive(void);
+BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME,int,int);
+BOOL WINAPI IsThemeDialogTextureEnabled(HWND);
+BOOL WINAPI IsThemePartDefined(HTHEME,int,int);
+HTHEME WINAPI OpenThemeData(HWND,LPCWSTR);
+HTHEME WINAPI OpenThemeDataEx(HWND,LPCWSTR,DWORD);
+void WINAPI SetThemeAppProperties(DWORD);
+HRESULT WINAPI SetWindowTheme(HWND,LPCWSTR,LPCWSTR);
+
+
+/* Double-buffered Drawing API */
+
+typedef HANDLE HPAINTBUFFER;
+
+HRESULT WINAPI BufferedPaintInit(VOID);
+HRESULT WINAPI BufferedPaintUnInit(VOID);
+
+typedef enum _BP_BUFFERFORMAT
+{
+ BPBF_COMPATIBLEBITMAP,
+ BPBF_DIB,
+ BPBF_TOPDOWNDIB,
+ BPBF_TOPDOWNMONODIB
+} BP_BUFFERFORMAT;
+
+typedef struct _BP_PAINTPARAMS
+{
+ DWORD cbSize;
+ DWORD dwFlags;
+ const RECT *prcExclude;
+ const BLENDFUNCTION *pBlendFunction;
+} BP_PAINTPARAMS, *PBP_PAINTPARAMS;
+
+HPAINTBUFFER WINAPI BeginBufferedPaint(HDC, const RECT *, BP_BUFFERFORMAT,
+ BP_PAINTPARAMS *,HDC *);
+
+HRESULT WINAPI EndBufferedPaint(HPAINTBUFFER, BOOL);
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h
new file mode 100644
index 00000000..18c2dfe4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vdmdbg.h
@@ -0,0 +1,49 @@
+/*
+ * VDMDBG definitions
+ *
+ * Copyright (C) 2007 James Hawkins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VDMDBG_H
+#define __WINE_VDMDBG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef BOOL (WINAPI *PROCESSENUMPROC)(DWORD, DWORD, LPARAM);
+typedef BOOL (WINAPI *TASKENUMPROC)(DWORD, WORD, WORD, LPARAM);
+typedef BOOL (WINAPI *TASKENUMPROCEX)(DWORD, WORD, WORD, PSZ, PSZ, LPARAM);
+
+INT WINAPI VDMEnumProcessWOW(PROCESSENUMPROC, LPARAM);
+INT WINAPI VDMEnumTaskWOW(DWORD, TASKENUMPROC, LPARAM);
+INT WINAPI VDMEnumTaskWOWEx(DWORD, TASKENUMPROCEX, LPARAM);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_VDMDBG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h
new file mode 100644
index 00000000..e8457a78
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ver.h
@@ -0,0 +1,37 @@
+/* Definitions for the VERsion infolibrary (VER.DLL)
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * Marked as obsolete: Albert den Haan (Corel Corp) 1999-04-28
+ * VER.H obsolete, include winver.h instead
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VER_H
+#define __WINE_VER_H
+
+#include <winver.h>
+
+#endif /* __WINE_VER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h
new file mode 100644
index 00000000..22567abe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/verrsrc.h
@@ -0,0 +1,182 @@
+/* Definitions for the VERsion info library (VER.DLL)
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VERRSRC_H
+#define __WINE_VERRSRC_H
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define __MSABI_LONG(x) x ## l
+# else
+# define __MSABI_LONG(x) x
+# endif
+#endif
+
+/* resource ids for different version infos */
+#define VS_FILE_INFO RT_VERSION
+#define VS_VERSION_INFO 1
+#define VS_USER_DEFINED 100
+
+#define VS_FFI_SIGNATURE __MSABI_LONG(0xfeef04bd) /* FileInfo Magic */
+#define VS_FFI_STRUCVERSION __MSABI_LONG(0x00010000) /* struc version 1.0 */
+#define VS_FFI_FILEFLAGSMASK __MSABI_LONG(0x0000003f) /* valid flags */
+
+/* VS_VERSION.dwFileFlags */
+#define VS_FF_DEBUG __MSABI_LONG(0x01)
+#define VS_FF_PRERELEASE __MSABI_LONG(0x02)
+#define VS_FF_PATCHED __MSABI_LONG(0x04)
+#define VS_FF_PRIVATEBUILD __MSABI_LONG(0x08)
+#define VS_FF_INFOINFERRED __MSABI_LONG(0x10)
+#define VS_FF_SPECIALBUILD __MSABI_LONG(0x20)
+
+/* VS_VERSION.dwFileOS */
+
+/* major os version */
+#define VOS_UNKNOWN __MSABI_LONG(0x00000000)
+#define VOS_DOS __MSABI_LONG(0x00010000)
+#define VOS_OS216 __MSABI_LONG(0x00020000)
+#define VOS_OS232 __MSABI_LONG(0x00030000)
+#define VOS_NT __MSABI_LONG(0x00040000)
+#define VOS_WINCE __MSABI_LONG(0x00050000)
+
+/* minor os version */
+#define VOS__BASE __MSABI_LONG(0x00000000)
+#define VOS__WINDOWS16 __MSABI_LONG(0x00000001)
+#define VOS__PM16 __MSABI_LONG(0x00000002)
+#define VOS__PM32 __MSABI_LONG(0x00000003)
+#define VOS__WINDOWS32 __MSABI_LONG(0x00000004)
+
+/* possible versions */
+#define VOS_DOS_WINDOWS16 (VOS_DOS|VOS__WINDOWS16)
+#define VOS_DOS_WINDOWS32 (VOS_DOS|VOS__WINDOWS32)
+#define VOS_OS216_PM16 (VOS_OS216|VOS__PM16)
+#define VOS_OS232_PM32 (VOS_OS232|VOS__PM32)
+#define VOS_NT_WINDOWS32 (VOS_NT|VOS__WINDOWS32)
+
+/* VS_VERSION.dwFileType */
+#define VFT_UNKNOWN __MSABI_LONG(0x00000000)
+#define VFT_APP __MSABI_LONG(0x00000001)
+#define VFT_DLL __MSABI_LONG(0x00000002)
+#define VFT_DRV __MSABI_LONG(0x00000003)
+#define VFT_FONT __MSABI_LONG(0x00000004)
+#define VFT_VXD __MSABI_LONG(0x00000005)
+/* ??one type missing?? __MSABI_LONG(0x00000006) -Marcus */
+#define VFT_STATIC_LIB __MSABI_LONG(0x00000007)
+
+/* VS_VERSION.dwFileSubtype for VFT_DRV */
+#define VFT2_UNKNOWN __MSABI_LONG(0x00000000)
+#define VFT2_DRV_PRINTER __MSABI_LONG(0x00000001)
+#define VFT2_DRV_KEYBOARD __MSABI_LONG(0x00000002)
+#define VFT2_DRV_LANGUAGE __MSABI_LONG(0x00000003)
+#define VFT2_DRV_DISPLAY __MSABI_LONG(0x00000004)
+#define VFT2_DRV_MOUSE __MSABI_LONG(0x00000005)
+#define VFT2_DRV_NETWORK __MSABI_LONG(0x00000006)
+#define VFT2_DRV_SYSTEM __MSABI_LONG(0x00000007)
+#define VFT2_DRV_INSTALLABLE __MSABI_LONG(0x00000008)
+#define VFT2_DRV_SOUND __MSABI_LONG(0x00000009)
+#define VFT2_DRV_COMM __MSABI_LONG(0x0000000a)
+#define VFT2_DRV_INPUTMETHOD __MSABI_LONG(0x0000000b)
+#define VFT2_DRV_VERSIONED_PRINTER __MSABI_LONG(0x0000000c)
+
+/* VS_VERSION.dwFileSubtype for VFT_FONT */
+#define VFT2_FONT_RASTER __MSABI_LONG(0x00000001)
+#define VFT2_FONT_VECTOR __MSABI_LONG(0x00000002)
+#define VFT2_FONT_TRUETYPE __MSABI_LONG(0x00000003)
+
+/* VerFindFile Flags */
+ /* input */
+#define VFFF_ISSHAREDFILE 0x0001
+
+ /* output (returned) */
+#define VFF_CURNEDEST 0x0001
+#define VFF_FILEINUSE 0x0002
+#define VFF_BUFFTOOSMALL 0x0004
+
+/* VerInstallFile Flags */
+ /* input */
+#define VIFF_FORCEINSTALL 0x0001
+#define VIFF_DONTDELETEOLD 0x0002
+
+ /* output (return) */
+#define VIF_TEMPFILE __MSABI_LONG(0x00000001)
+#define VIF_MISMATCH __MSABI_LONG(0x00000002)
+#define VIF_SRCOLD __MSABI_LONG(0x00000004)
+#define VIF_DIFFLANG __MSABI_LONG(0x00000008)
+#define VIF_DIFFCODEPG __MSABI_LONG(0x00000010)
+#define VIF_DIFFTYPE __MSABI_LONG(0x00000020)
+#define VIF_WRITEPROT __MSABI_LONG(0x00000040)
+#define VIF_FILEINUSE __MSABI_LONG(0x00000080)
+#define VIF_OUTOFSPACE __MSABI_LONG(0x00000100)
+#define VIF_ACCESSVIOLATION __MSABI_LONG(0x00000200)
+#define VIF_SHARINGVIOLATION __MSABI_LONG(0x00000400)
+#define VIF_CANNOTCREATE __MSABI_LONG(0x00000800)
+#define VIF_CANNOTDELETE __MSABI_LONG(0x00001000)
+#define VIF_CANNOTRENAME __MSABI_LONG(0x00002000)
+#define VIF_CANNOTDELETECUR __MSABI_LONG(0x00004000)
+#define VIF_OUTOFMEMORY __MSABI_LONG(0x00008000)
+#define VIF_CANNOTREADSRC __MSABI_LONG(0x00010000)
+#define VIF_CANNOTREADDST __MSABI_LONG(0x00020000)
+#define VIF_BUFFTOOSMALL __MSABI_LONG(0x00040000)
+#define VIF_CANNOTLOADLZ32 __MSABI_LONG(0x00080000)
+#define VIF_CANNOTLOADCABINET __MSABI_LONG(0x00100000)
+
+
+#ifndef RC_INVOKED
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define FILE_VER_GET_LOCALISED 0x01
+#define FILE_VER_GET_NEUTRAL 0x02
+#define FILE_VER_GET_PREFETCHED 0x04
+
+typedef struct tagVS_FIXEDFILEINFO {
+ DWORD dwSignature;
+ DWORD dwStrucVersion;
+ DWORD dwFileVersionMS;
+ DWORD dwFileVersionLS;
+ DWORD dwProductVersionMS;
+ DWORD dwProductVersionLS;
+ DWORD dwFileFlagsMask;
+ DWORD dwFileFlags;
+ DWORD dwFileOS;
+ DWORD dwFileType;
+ DWORD dwFileSubtype;
+ DWORD dwFileDateMS;
+ DWORD dwFileDateLS;
+} VS_FIXEDFILEINFO;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* RC_INVOKED */
+
+#endif /* __WINE_VERRSRC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h
new file mode 100644
index 00000000..9c3ea096
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfw.h
@@ -0,0 +1,1953 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_VFW_H
+#define __WINE_VFW_H
+
+#include <mmsystem.h>
+#include <mmreg.h>
+#include <msacm.h>
+
+#define VFWAPI WINAPI
+#define VFWAPIV WINAPIV
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef HANDLE HDRAWDIB;
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+typedef struct IAVIStream *PAVISTREAM;
+typedef struct IAVIFile *PAVIFILE;
+typedef struct IGetFrame *PGETFRAME;
+typedef struct IAVIEditStream *PAVIEDITSTREAM;
+
+/* Installable Compressor Manager */
+
+#define ICVERSION 0x0104
+
+DECLARE_HANDLE(HIC);
+
+/* error return codes */
+#define ICERR_OK 0
+#define ICERR_DONTDRAW 1
+#define ICERR_NEWPALETTE 2
+#define ICERR_GOTOKEYFRAME 3
+#define ICERR_STOPDRAWING 4
+
+#define ICERR_UNSUPPORTED -1
+#define ICERR_BADFORMAT -2
+#define ICERR_MEMORY -3
+#define ICERR_INTERNAL -4
+#define ICERR_BADFLAGS -5
+#define ICERR_BADPARAM -6
+#define ICERR_BADSIZE -7
+#define ICERR_BADHANDLE -8
+#define ICERR_CANTUPDATE -9
+#define ICERR_ABORT -10
+#define ICERR_ERROR -100
+#define ICERR_BADBITDEPTH -200
+#define ICERR_BADIMAGESIZE -201
+
+#define ICERR_CUSTOM -400
+
+/* ICM Messages */
+#define ICM_USER (DRV_USER+0x0000)
+
+/* ICM driver message range */
+#define ICM_RESERVED_LOW (DRV_USER+0x1000)
+#define ICM_RESERVED_HIGH (DRV_USER+0x2000)
+#define ICM_RESERVED ICM_RESERVED_LOW
+
+#define ICM_GETSTATE (ICM_RESERVED+0)
+#define ICM_SETSTATE (ICM_RESERVED+1)
+#define ICM_GETINFO (ICM_RESERVED+2)
+
+#define ICM_CONFIGURE (ICM_RESERVED+10)
+#define ICM_ABOUT (ICM_RESERVED+11)
+/* */
+
+#define ICM_GETDEFAULTQUALITY (ICM_RESERVED+30)
+#define ICM_GETQUALITY (ICM_RESERVED+31)
+#define ICM_SETQUALITY (ICM_RESERVED+32)
+
+#define ICM_SET (ICM_RESERVED+40)
+#define ICM_GET (ICM_RESERVED+41)
+
+/* 2 constant FOURCC codes */
+#define ICM_FRAMERATE mmioFOURCC('F','r','m','R')
+#define ICM_KEYFRAMERATE mmioFOURCC('K','e','y','R')
+
+#define ICM_COMPRESS_GET_FORMAT (ICM_USER+4)
+#define ICM_COMPRESS_GET_SIZE (ICM_USER+5)
+#define ICM_COMPRESS_QUERY (ICM_USER+6)
+#define ICM_COMPRESS_BEGIN (ICM_USER+7)
+#define ICM_COMPRESS (ICM_USER+8)
+#define ICM_COMPRESS_END (ICM_USER+9)
+
+#define ICM_DECOMPRESS_GET_FORMAT (ICM_USER+10)
+#define ICM_DECOMPRESS_QUERY (ICM_USER+11)
+#define ICM_DECOMPRESS_BEGIN (ICM_USER+12)
+#define ICM_DECOMPRESS (ICM_USER+13)
+#define ICM_DECOMPRESS_END (ICM_USER+14)
+#define ICM_DECOMPRESS_SET_PALETTE (ICM_USER+29)
+#define ICM_DECOMPRESS_GET_PALETTE (ICM_USER+30)
+
+#define ICM_DRAW_QUERY (ICM_USER+31)
+#define ICM_DRAW_BEGIN (ICM_USER+15)
+#define ICM_DRAW_GET_PALETTE (ICM_USER+16)
+#define ICM_DRAW_START (ICM_USER+18)
+#define ICM_DRAW_STOP (ICM_USER+19)
+#define ICM_DRAW_END (ICM_USER+21)
+#define ICM_DRAW_GETTIME (ICM_USER+32)
+#define ICM_DRAW (ICM_USER+33)
+#define ICM_DRAW_WINDOW (ICM_USER+34)
+#define ICM_DRAW_SETTIME (ICM_USER+35)
+#define ICM_DRAW_REALIZE (ICM_USER+36)
+#define ICM_DRAW_FLUSH (ICM_USER+37)
+#define ICM_DRAW_RENDERBUFFER (ICM_USER+38)
+
+#define ICM_DRAW_START_PLAY (ICM_USER+39)
+#define ICM_DRAW_STOP_PLAY (ICM_USER+40)
+
+#define ICM_DRAW_SUGGESTFORMAT (ICM_USER+50)
+#define ICM_DRAW_CHANGEPALETTE (ICM_USER+51)
+
+#define ICM_GETBUFFERSWANTED (ICM_USER+41)
+
+#define ICM_GETDEFAULTKEYFRAMERATE (ICM_USER+42)
+
+#define ICM_DECOMPRESSEX_BEGIN (ICM_USER+60)
+#define ICM_DECOMPRESSEX_QUERY (ICM_USER+61)
+#define ICM_DECOMPRESSEX (ICM_USER+62)
+#define ICM_DECOMPRESSEX_END (ICM_USER+63)
+
+#define ICM_COMPRESS_FRAMES_INFO (ICM_USER+70)
+#define ICM_SET_STATUS_PROC (ICM_USER+72)
+
+#ifndef comptypeDIB
+#define comptypeDIB mmioFOURCC('D','I','B',' ')
+#endif
+
+/* structs */
+
+/* NOTE: Only the 16 bit structs are packed. Structs that are packed anyway
+ * have not been changed. If a structure is later extended, you may need to create
+ * two versions of it.
+ */
+
+typedef struct {
+ DWORD dwSize; /* 00: size */
+ DWORD fccType; /* 04: type 'vidc' usually */
+ DWORD fccHandler; /* 08: */
+ DWORD dwVersion; /* 0c: version of compman opening you */
+ DWORD dwFlags; /* 10: LOWORD is type specific */
+ LRESULT dwError; /* 14: */
+ LPVOID pV1Reserved; /* 18: */
+ LPVOID pV2Reserved; /* 1c: */
+ DWORD dnDevNode; /* 20: */
+ /* 24: */
+} ICOPEN,*LPICOPEN;
+
+#define ICCOMPRESS_KEYFRAME __MSABI_LONG(0x00000001)
+
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiOutput;
+ LPVOID lpOutput;
+ LPBITMAPINFOHEADER lpbiInput;
+ LPVOID lpInput;
+ LPDWORD lpckid;
+ LPDWORD lpdwFlags;
+ LONG lFrameNum;
+ DWORD dwFrameSize;
+ DWORD dwQuality;
+ LPBITMAPINFOHEADER lpbiPrev;
+ LPVOID lpPrev;
+} ICCOMPRESS;
+
+DWORD VFWAPIV ICCompress(
+ HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiOutput,LPVOID lpData,
+ LPBITMAPINFOHEADER lpbiInput,LPVOID lpBits,LPDWORD lpckid,
+ LPDWORD lpdwFlags,LONG lFrameNum,DWORD dwFrameSize,DWORD dwQuality,
+ LPBITMAPINFOHEADER lpbiPrev,LPVOID lpPrev
+);
+
+#define ICCompressGetFormat(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic,ICM_COMPRESS_GET_FORMAT,(DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ )
+
+#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)
+
+#define ICCompressBegin(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic, ICM_COMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ )
+
+#define ICCompressGetSize(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic, ICM_COMPRESS_GET_SIZE, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ )
+
+#define ICCompressQuery(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic, ICM_COMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ )
+
+#define ICCompressEnd(hic) ICSendMessage(hic, ICM_COMPRESS_END, 0, 0)
+
+/* ICCOMPRESSFRAMES.dwFlags */
+#define ICCOMPRESSFRAMES_PADDING 0x00000001
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiOutput;
+ LPARAM lOutput;
+ LPBITMAPINFOHEADER lpbiInput;
+ LPARAM lInput;
+ LONG lStartFrame;
+ LONG lFrameCount;
+ LONG lQuality;
+ LONG lDataRate;
+ LONG lKeyRate;
+ DWORD dwRate;
+ DWORD dwScale;
+ DWORD dwOverheadPerFrame;
+ DWORD dwReserved2;
+ LONG (CALLBACK *GetData)(LPARAM lInput,LONG lFrame,LPVOID lpBits,LONG len);
+ LONG (CALLBACK *PutData)(LPARAM lOutput,LONG lFrame,LPVOID lpBits,LONG len);
+} ICCOMPRESSFRAMES;
+
+typedef struct {
+ DWORD dwFlags;
+ LPARAM lParam;
+ /* messages for Status callback */
+#define ICSTATUS_START 0
+#define ICSTATUS_STATUS 1
+#define ICSTATUS_END 2
+#define ICSTATUS_ERROR 3
+#define ICSTATUS_YIELD 4
+ /* FIXME: some X11 libs define Status as int... */
+ /* LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l); */
+ LONG (CALLBACK *zStatus)(LPARAM lParam, UINT message, LONG l);
+} ICSETSTATUSPROC;
+
+/* Values for wMode of ICOpen() */
+#define ICMODE_COMPRESS 1
+#define ICMODE_DECOMPRESS 2
+#define ICMODE_FASTDECOMPRESS 3
+#define ICMODE_QUERY 4
+#define ICMODE_FASTCOMPRESS 5
+#define ICMODE_DRAW 8
+
+/* quality flags */
+#define ICQUALITY_LOW 0
+#define ICQUALITY_HIGH 10000
+#define ICQUALITY_DEFAULT -1
+
+typedef struct {
+ DWORD dwSize; /* 00: */
+ DWORD fccType; /* 04:compressor type 'vidc' 'audc' */
+ DWORD fccHandler; /* 08:compressor sub-type 'rle ' 'jpeg' 'pcm '*/
+ DWORD dwFlags; /* 0c:flags LOWORD is type specific */
+ DWORD dwVersion; /* 10:version of the driver */
+ DWORD dwVersionICM; /* 14:version of the ICM used */
+ /*
+ * under Win32, the driver always returns UNICODE strings.
+ */
+ WCHAR szName[16]; /* 18:short name */
+ WCHAR szDescription[128]; /* 38:long name */
+ WCHAR szDriver[128]; /* 138:driver that contains compressor*/
+ /* 238: */
+} ICINFO;
+
+/* ICINFO.dwFlags */
+#define VIDCF_QUALITY 0x0001 /* supports quality */
+#define VIDCF_CRUNCH 0x0002 /* supports crunching to a frame size */
+#define VIDCF_TEMPORAL 0x0004 /* supports inter-frame compress */
+#define VIDCF_COMPRESSFRAMES 0x0008 /* wants the compress all frames message */
+#define VIDCF_DRAW 0x0010 /* supports drawing */
+#define VIDCF_FASTTEMPORALC 0x0020 /* does not need prev frame on compress */
+#define VIDCF_FASTTEMPORALD 0x0080 /* does not need prev frame on decompress */
+#define VIDCF_QUALITYTIME 0x0040 /* supports temporal quality */
+
+#define VIDCF_FASTTEMPORAL (VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)
+
+
+/* function shortcuts */
+/* ICM_ABOUT */
+#define ICMF_ABOUT_QUERY 0x00000001
+
+#define ICQueryAbout(hic) \
+ (ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)-1,ICMF_ABOUT_QUERY)==ICERR_OK)
+
+#define ICAbout(hic, hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD_PTR)(UINT_PTR)(hwnd),0)
+
+/* ICM_CONFIGURE */
+#define ICMF_CONFIGURE_QUERY 0x00000001
+#define ICQueryConfigure(hic) \
+ (ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)
+
+#define ICConfigure(hic,hwnd) \
+ ICSendMessage(hic,ICM_CONFIGURE,(DWORD_PTR)(UINT_PTR)(hwnd),0)
+
+/* Decompression stuff */
+#define ICDECOMPRESS_HURRYUP 0x80000000 /* don't draw just buffer (hurry up!) */
+#define ICDECOMPRESS_UPDATE 0x40000000 /* don't draw just update screen */
+#define ICDECOMPRESS_PREROLL 0x20000000 /* this frame is before real start */
+#define ICDECOMPRESS_NULLFRAME 0x10000000 /* repeat last frame */
+#define ICDECOMPRESS_NOTKEYFRAME 0x08000000 /* this frame is not a key frame */
+
+typedef struct {
+ DWORD dwFlags; /* flags (from AVI index...) */
+ LPBITMAPINFOHEADER lpbiInput; /* BITMAPINFO of compressed data */
+ LPVOID lpInput; /* compressed data */
+ LPBITMAPINFOHEADER lpbiOutput; /* DIB to decompress to */
+ LPVOID lpOutput;
+ DWORD ckid; /* ckid from AVI file */
+} ICDECOMPRESS;
+
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiSrc;
+ LPVOID lpSrc;
+ LPBITMAPINFOHEADER lpbiDst;
+ LPVOID lpDst;
+
+ /* changed for ICM_DECOMPRESSEX */
+ INT xDst; /* destination rectangle */
+ INT yDst;
+ INT dxDst;
+ INT dyDst;
+
+ INT xSrc; /* source rectangle */
+ INT ySrc;
+ INT dxSrc;
+ INT dySrc;
+} ICDECOMPRESSEX;
+
+DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,LPVOID lpData,LPBITMAPINFOHEADER lpbi,LPVOID lpBits);
+
+#define ICDecompressBegin(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic, ICM_DECOMPRESS_BEGIN, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ )
+
+#define ICDecompressQuery(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic,ICM_DECOMPRESS_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR) (LPVOID)(lpbiOutput) \
+ )
+
+#define ICDecompressGetFormat(hic, lpbiInput, lpbiOutput) \
+ ((LONG)ICSendMessage( \
+ hic,ICM_DECOMPRESS_GET_FORMAT, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ ))
+
+#define ICDecompressGetFormatSize(hic, lpbi) \
+ ICDecompressGetFormat(hic, lpbi, NULL)
+
+#define ICDecompressGetPalette(hic, lpbiInput, lpbiOutput) \
+ ICSendMessage( \
+ hic, ICM_DECOMPRESS_GET_PALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), \
+ (DWORD_PTR)(LPVOID)(lpbiOutput) \
+ )
+
+#define ICDecompressSetPalette(hic,lpbiPalette) \
+ ICSendMessage( \
+ hic,ICM_DECOMPRESS_SET_PALETTE, \
+ (DWORD_PTR)(LPVOID)(lpbiPalette),0 \
+ )
+
+#define ICDecompressEnd(hic) ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0)
+
+LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD_PTR dw1, DWORD_PTR dw2);
+
+static inline LRESULT VFWAPI ICDecompressEx(HIC hic, DWORD dwFlags,
+ LPBITMAPINFOHEADER lpbiSrc, LPVOID lpSrc,
+ int xSrc, int ySrc, int dxSrc, int dySrc,
+ LPBITMAPINFOHEADER lpbiDst, LPVOID lpDst,
+ int xDst, int yDst, int dxDst, int dyDst)
+{
+ ICDECOMPRESSEX ic;
+
+ ic.dwFlags = dwFlags;
+ ic.lpbiSrc = lpbiSrc;
+ ic.lpSrc = lpSrc;
+ ic.xSrc = xSrc;
+ ic.ySrc = ySrc;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.lpbiDst = lpbiDst;
+ ic.lpDst = lpDst;
+ ic.xDst = xDst;
+ ic.yDst = yDst;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ return ICSendMessage(hic, ICM_DECOMPRESSEX, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+static inline LRESULT VFWAPI ICDecompressExBegin(HIC hic, DWORD dwFlags,
+ LPBITMAPINFOHEADER lpbiSrc,
+ LPVOID lpSrc,
+ int xSrc, int ySrc, int dxSrc, int dySrc,
+ LPBITMAPINFOHEADER lpbiDst,
+ LPVOID lpDst,
+ int xDst,
+ int yDst,
+ int dxDst,
+ int dyDst)
+{
+ ICDECOMPRESSEX ic;
+
+ ic.dwFlags = dwFlags;
+ ic.lpbiSrc = lpbiSrc;
+ ic.lpSrc = lpSrc;
+ ic.xSrc = xSrc;
+ ic.ySrc = ySrc;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.lpbiDst = lpbiDst;
+ ic.lpDst = lpDst;
+ ic.xDst = xDst;
+ ic.yDst = yDst;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, (DWORD_PTR)&ic, sizeof(ic));
+}
+static inline LRESULT VFWAPI ICDecompressExQuery(HIC hic, DWORD dwFlags,
+ LPBITMAPINFOHEADER lpbiSrc,
+ LPVOID lpSrc,
+ int xSrc, int ySrc, int dxSrc, int dySrc,
+ LPBITMAPINFOHEADER lpbiDst,
+ LPVOID lpDst,
+ int xDst,
+ int yDst,
+ int dxDst,
+ int dyDst)
+{
+ ICDECOMPRESSEX ic;
+
+ ic.dwFlags = dwFlags;
+ ic.lpbiSrc = lpbiSrc;
+ ic.lpSrc = lpSrc;
+ ic.xSrc = xSrc;
+ ic.ySrc = ySrc;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.lpbiDst = lpbiDst;
+ ic.lpDst = lpDst;
+ ic.xDst = xDst;
+ ic.yDst = yDst;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+#define ICDecompressExEnd(hic) \
+ ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0)
+
+#define ICDRAW_QUERY __MSABI_LONG(0x00000001) /* test for support */
+#define ICDRAW_FULLSCREEN __MSABI_LONG(0x00000002) /* draw to full screen */
+#define ICDRAW_HDC __MSABI_LONG(0x00000004) /* draw to a HDC/HWND */
+#define ICDRAW_ANIMATE __MSABI_LONG(0x00000008) /* expect palette animation */
+#define ICDRAW_CONTINUE __MSABI_LONG(0x00000010) /* draw is a continuation of previous draw */
+#define ICDRAW_MEMORYDC __MSABI_LONG(0x00000020) /* DC is offscreen, by the way */
+#define ICDRAW_UPDATING __MSABI_LONG(0x00000040) /* We're updating, as opposed to playing */
+#define ICDRAW_RENDER __MSABI_LONG(0x00000080) /* used to render data not draw it */
+#define ICDRAW_BUFFER __MSABI_LONG(0x00000100) /* buffer data offscreen, we will need to update it */
+
+#define ICDecompressOpen(fccType, fccHandler, lpbiIn, lpbiOut) \
+ ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS)
+
+#define ICDrawOpen(fccType, fccHandler, lpbiIn) \
+ ICLocate(fccType, fccHandler, lpbiIn, NULL, ICMODE_DRAW)
+
+HANDLE VFWAPI ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
+ LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality,
+ LONG* plSize);
+
+HANDLE VFWAPI ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn,
+ LPVOID lpBits, LPBITMAPINFO lpbiOut);
+
+BOOL VFWAPI ICInfo(DWORD fccType, DWORD fccHandler, ICINFO * lpicinfo);
+BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags);
+BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags);
+LRESULT VFWAPI ICGetInfo(HIC hic,ICINFO *picinfo, DWORD cb);
+HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode);
+#ifdef WINE_STRICT_PROTOTYPES
+HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, DRIVERPROC lpfnHandler);
+#else
+HIC VFWAPI ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler);
+#endif
+
+LRESULT VFWAPI ICClose(HIC hic);
+HIC VFWAPI ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags);
+HIC VFWAPI ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy);
+
+/* Values for wFlags of ICInstall() */
+#define ICINSTALL_UNICODE 0x8000
+#define ICINSTALL_FUNCTION 0x0001
+#define ICINSTALL_DRIVER 0x0002
+#define ICINSTALL_HDRV 0x0004
+#define ICINSTALL_DRIVERW 0x8002
+
+#define ICGetState(hic, pv, cb) \
+ ICSendMessage(hic, ICM_GETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb))
+#define ICSetState(hic, pv, cb) \
+ ICSendMessage(hic, ICM_SETSTATE, (DWORD_PTR)(LPVOID)(pv), (DWORD_PTR)(cb))
+#define ICGetStateSize(hic) \
+ ICGetState(hic, NULL, 0)
+
+static inline DWORD ICGetDefaultQuality(HIC hic)
+{
+ DWORD dwICValue;
+ ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD));
+ return dwICValue;
+}
+
+static inline DWORD ICGetDefaultKeyFrameRate(HIC hic)
+{
+ DWORD dwICValue;
+ ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD_PTR)(LPVOID)&dwICValue, sizeof(DWORD));
+ return dwICValue;
+}
+
+#define ICDrawWindow(hic, prc) \
+ ICSendMessage(hic, ICM_DRAW_WINDOW, (DWORD_PTR)(LPVOID)(prc), sizeof(RECT))
+
+/* As passed to ICM_DRAW_SUGGESTFORMAT */
+typedef struct {
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpbiIn;
+ LPBITMAPINFOHEADER lpbiSuggest;
+ INT dxSrc;
+ INT dySrc;
+ INT dxDst;
+ INT dyDst;
+ HIC hicDecompressor;
+} ICDRAWSUGGEST;
+
+typedef struct {
+ DWORD dwFlags;
+ int iStart;
+ int iLen;
+ LPPALETTEENTRY lppe;
+} ICPALETTE;
+
+DWORD VFWAPIV ICDrawBegin(
+ HIC hic,
+ DWORD dwFlags,/* flags */
+ HPALETTE hpal, /* palette to draw with */
+ HWND hwnd, /* window to draw to */
+ HDC hdc, /* HDC to draw to */
+ INT xDst, /* destination rectangle */
+ INT yDst,
+ INT dxDst,
+ INT dyDst,
+ LPBITMAPINFOHEADER lpbi, /* format of frame to draw */
+ INT xSrc, /* source rectangle */
+ INT ySrc,
+ INT dxSrc,
+ INT dySrc,
+ DWORD dwRate, /* frames/second = (dwRate/dwScale) */
+ DWORD dwScale
+);
+
+/* as passed to ICM_DRAW_BEGIN */
+typedef struct {
+ DWORD dwFlags;
+ HPALETTE hpal;
+ HWND hwnd;
+ HDC hdc;
+ INT xDst;
+ INT yDst;
+ INT dxDst;
+ INT dyDst;
+ LPBITMAPINFOHEADER lpbi;
+ INT xSrc;
+ INT ySrc;
+ INT dxSrc;
+ INT dySrc;
+ DWORD dwRate;
+ DWORD dwScale;
+} ICDRAWBEGIN;
+
+#define ICDRAW_HURRYUP __MSABI_LONG(0x80000000) /* don't draw just buffer (hurry up!) */
+#define ICDRAW_UPDATE __MSABI_LONG(0x40000000) /* don't draw just update screen */
+#define ICDRAW_PREROLL __MSABI_LONG(0x20000000) /* this frame is before real start */
+#define ICDRAW_NULLFRAME __MSABI_LONG(0x10000000) /* repeat last frame */
+#define ICDRAW_NOTKEYFRAME __MSABI_LONG(0x08000000) /* this frame is not a key frame */
+
+typedef struct {
+ DWORD dwFlags;
+ LPVOID lpFormat;
+ LPVOID lpData;
+ DWORD cbData;
+ LONG lTime;
+} ICDRAW;
+
+DWORD VFWAPIV ICDraw(HIC hic,DWORD dwFlags,LPVOID lpFormat,LPVOID lpData,DWORD cbData,LONG lTime);
+
+static inline LRESULT VFWAPI ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn,
+ LPBITMAPINFOHEADER lpbiOut,
+ int dxSrc, int dySrc,
+ int dxDst, int dyDst,
+ HIC hicDecomp)
+{
+ ICDRAWSUGGEST ic;
+
+ ic.lpbiIn = lpbiIn;
+ ic.lpbiSuggest = lpbiOut;
+ ic.dxSrc = dxSrc;
+ ic.dySrc = dySrc;
+ ic.dxDst = dxDst;
+ ic.dyDst = dyDst;
+ ic.hicDecompressor = hicDecomp;
+ return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+#define ICDrawQuery(hic, lpbiInput) \
+ ICSendMessage(hic, ICM_DRAW_QUERY, (DWORD_PTR)(LPVOID)(lpbiInput), 0)
+
+#define ICDrawChangePalette(hic, lpbiInput) \
+ ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, (DWORD_PTR)(LPVOID)(lpbiInput), 0)
+
+#define ICGetBuffersWanted(hic, lpdwBuffers) \
+ ICSendMessage(hic, ICM_GETBUFFERSWANTED, (DWORD_PTR)(LPVOID)(lpdwBuffers), 0)
+
+#define ICDrawEnd(hic) \
+ ICSendMessage(hic, ICM_DRAW_END, 0, 0)
+
+#define ICDrawStart(hic) \
+ ICSendMessage(hic, ICM_DRAW_START, 0, 0)
+
+#define ICDrawStartPlay(hic, lFrom, lTo) \
+ ICSendMessage(hic, ICM_DRAW_START_PLAY, (DWORD_PTR)(lFrom), (DWORD_PTR)(lTo))
+
+#define ICDrawStop(hic) \
+ ICSendMessage(hic, ICM_DRAW_STOP, 0, 0)
+
+#define ICDrawStopPlay(hic) \
+ ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0)
+
+#define ICDrawGetTime(hic, lplTime) \
+ ICSendMessage(hic, ICM_DRAW_GETTIME, (DWORD_PTR)(LPVOID)(lplTime), 0)
+
+#define ICDrawSetTime(hic, lTime) \
+ ICSendMessage(hic, ICM_DRAW_SETTIME, (DWORD_PTR)lTime, 0)
+
+#define ICDrawRealize(hic, hdc, fBackground) \
+ ICSendMessage(hic, ICM_DRAW_REALIZE, (DWORD_PTR)(UINT_PTR)(HDC)(hdc), (DWORD_PTR)(BOOL)(fBackground))
+
+#define ICDrawFlush(hic) \
+ ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0)
+
+#define ICDrawRenderBuffer(hic) \
+ ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0)
+
+static inline LRESULT VFWAPI ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam,
+ LONG (CALLBACK *fpfnStatus)(LPARAM, UINT, LONG))
+{
+ ICSETSTATUSPROC ic;
+
+ ic.dwFlags = dwFlags;
+ ic.lParam = lParam;
+ /* FIXME: see comment in ICSETSTATUSPROC definition */
+ ic.zStatus = fpfnStatus;
+
+ return ICSendMessage(hic, ICM_SET_STATUS_PROC, (DWORD_PTR)&ic, sizeof(ic));
+}
+
+typedef struct {
+ LONG cbSize;
+ DWORD dwFlags;
+ HIC hic;
+ DWORD fccType;
+ DWORD fccHandler;
+ LPBITMAPINFO lpbiIn;
+ LPBITMAPINFO lpbiOut;
+ LPVOID lpBitsOut;
+ LPVOID lpBitsPrev;
+ LONG lFrame;
+ LONG lKey;
+ LONG lDataRate;
+ LONG lQ;
+ LONG lKeyCount;
+ LPVOID lpState;
+ LONG cbState;
+} COMPVARS, *PCOMPVARS;
+
+#define ICMF_COMPVARS_VALID 0x00000001
+
+BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData,
+ PCOMPVARS pc, LPSTR lpszTitle);
+
+#define ICMF_CHOOSE_KEYFRAME 0x0001
+#define ICMF_CHOOSE_DATARATE 0x0002
+#define ICMF_CHOOSE_PREVIEW 0x0004
+#define ICMF_CHOOSE_ALLCOMPRESSORS 0x0008
+
+BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn);
+void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc);
+
+LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits,
+ BOOL *pfKey, LONG *plSize);
+void VFWAPI ICCompressorFree(PCOMPVARS pc);
+
+/********************* AVIFILE function declarations *************************/
+
+#ifndef mmioFOURCC
+#define mmioFOURCC( ch0, ch1, ch2, ch3 ) \
+ ( (DWORD)(BYTE)(ch0) | ( (DWORD)(BYTE)(ch1) << 8 ) | \
+ ( (DWORD)(BYTE)(ch2) << 16 ) | ( (DWORD)(BYTE)(ch3) << 24 ) )
+#endif
+
+#ifndef aviTWOCC
+#define aviTWOCC(ch0, ch1) ((WORD)(BYTE)(ch0) | ((WORD)(BYTE)(ch1) << 8))
+#endif
+
+typedef WORD TWOCC;
+
+#define ICTYPE_VIDEO mmioFOURCC('v', 'i', 'd', 'c')
+#define ICTYPE_AUDIO mmioFOURCC('a', 'u', 'd', 'c')
+
+#define formtypeAVI mmioFOURCC('A', 'V', 'I', ' ')
+#define listtypeAVIHEADER mmioFOURCC('h', 'd', 'r', 'l')
+#define ckidAVIMAINHDR mmioFOURCC('a', 'v', 'i', 'h')
+#define listtypeSTREAMHEADER mmioFOURCC('s', 't', 'r', 'l')
+#define ckidSTREAMHEADER mmioFOURCC('s', 't', 'r', 'h')
+#define ckidSTREAMFORMAT mmioFOURCC('s', 't', 'r', 'f')
+#define ckidSTREAMHANDLERDATA mmioFOURCC('s', 't', 'r', 'd')
+#define ckidSTREAMNAME mmioFOURCC('s', 't', 'r', 'n')
+
+#define listtypeAVIMOVIE mmioFOURCC('m', 'o', 'v', 'i')
+#define listtypeAVIRECORD mmioFOURCC('r', 'e', 'c', ' ')
+
+#define ckidAVINEWINDEX mmioFOURCC('i', 'd', 'x', '1')
+
+#define streamtypeANY 0U
+#define streamtypeVIDEO mmioFOURCC('v', 'i', 'd', 's')
+#define streamtypeAUDIO mmioFOURCC('a', 'u', 'd', 's')
+#define streamtypeMIDI mmioFOURCC('m', 'i', 'd', 's')
+#define streamtypeTEXT mmioFOURCC('t', 'x', 't', 's')
+
+/* Basic chunk types */
+#define cktypeDIBbits aviTWOCC('d', 'b')
+#define cktypeDIBcompressed aviTWOCC('d', 'c')
+#define cktypePALchange aviTWOCC('p', 'c')
+#define cktypeWAVEbytes aviTWOCC('w', 'b')
+
+/* Chunk id to use for extra chunks for padding. */
+#define ckidAVIPADDING mmioFOURCC('J', 'U', 'N', 'K')
+
+#define FromHex(n) (((n) >= 'A') ? ((n) + 10 - 'A') : ((n) - '0'))
+#define StreamFromFOURCC(fcc) ((WORD)((FromHex(LOBYTE(LOWORD(fcc))) << 4) + \
+ (FromHex(HIBYTE(LOWORD(fcc))))))
+#define TWOCCFromFOURCC(fcc) HIWORD(fcc)
+#define ToHex(n) ((BYTE)(((n) > 9) ? ((n) - 10 + 'A') : ((n) + '0')))
+#define MAKEAVICKID(tcc, stream) \
+ MAKELONG((ToHex((stream) & 0x0f) << 8) | \
+ (ToHex(((stream) & 0xf0) >> 4)), tcc)
+
+/* AVIFileHdr.dwFlags */
+#define AVIF_HASINDEX 0x00000010 /* Index at end of file? */
+#define AVIF_MUSTUSEINDEX 0x00000020
+#define AVIF_ISINTERLEAVED 0x00000100
+#define AVIF_TRUSTCKTYPE 0x00000800 /* Use CKType to find key frames*/
+#define AVIF_WASCAPTUREFILE 0x00010000
+#define AVIF_COPYRIGHTED 0x00020000
+
+#define AVI_HEADERSIZE 2048
+
+typedef BOOL (CALLBACK *AVISAVECALLBACK)(INT);
+
+typedef struct _MainAVIHeader
+{
+ DWORD dwMicroSecPerFrame;
+ DWORD dwMaxBytesPerSec;
+ DWORD dwPaddingGranularity;
+ DWORD dwFlags;
+ DWORD dwTotalFrames;
+ DWORD dwInitialFrames;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwReserved[4];
+} MainAVIHeader;
+
+/* AVIStreamHeader.dwFlags */
+#define AVISF_DISABLED 0x00000001
+#define AVISF_VIDEO_PALCHANGES 0x00010000
+
+typedef struct {
+ FOURCC fccType;
+ FOURCC fccHandler;
+ DWORD dwFlags; /* AVISF_* */
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwInitialFrames;
+ DWORD dwScale;
+ DWORD dwRate; /* dwRate / dwScale == samples/second */
+ DWORD dwStart;
+ DWORD dwLength; /* In units above... */
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ struct { SHORT left, top, right, bottom; } rcFrame; /* word.word - word.word in file */
+} AVIStreamHeader;
+
+/* AVIINDEXENTRY.dwFlags */
+#define AVIIF_LIST 0x00000001 /* chunk is a 'LIST' */
+#define AVIIF_TWOCC 0x00000002
+#define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */
+#define AVIIF_FIRSTPART 0x00000020
+#define AVIIF_LASTPART 0x00000040
+#define AVIIF_MIDPART (AVIIF_LASTPART|AVIIF_FIRSTPART)
+#define AVIIF_NOTIME 0x00000100 /* this frame doesn't take any time */
+#define AVIIF_COMPUSE 0x0FFF0000
+
+typedef struct _AVIINDEXENTRY {
+ DWORD ckid;
+ DWORD dwFlags;
+ DWORD dwChunkOffset;
+ DWORD dwChunkLength;
+} AVIINDEXENTRY;
+
+typedef struct _AVIPALCHANGE {
+ BYTE bFirstEntry;
+ BYTE bNumEntries;
+ WORD wFlags; /* pad */
+ PALETTEENTRY peNew[1];
+} AVIPALCHANGE;
+
+#define AVIIF_KEYFRAME 0x00000010 /* this frame is a key frame. */
+
+#define AVIGETFRAMEF_BESTDISPLAYFMT 1
+
+typedef struct _AVISTREAMINFOA {
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwFlags; /* AVIIF_* */
+ DWORD dwCaps;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwScale;
+ DWORD dwRate; /* dwRate / dwScale == samples/second */
+ DWORD dwStart;
+ DWORD dwLength; /* In units above... */
+ DWORD dwInitialFrames;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ RECT rcFrame;
+ DWORD dwEditCount;
+ DWORD dwFormatChangeCount;
+ CHAR szName[64];
+} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;
+
+typedef struct _AVISTREAMINFOW {
+ DWORD fccType;
+ DWORD fccHandler;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ WORD wPriority;
+ WORD wLanguage;
+ DWORD dwScale;
+ DWORD dwRate; /* dwRate / dwScale == samples/second */
+ DWORD dwStart;
+ DWORD dwLength; /* In units above... */
+ DWORD dwInitialFrames;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwQuality;
+ DWORD dwSampleSize;
+ RECT rcFrame;
+ DWORD dwEditCount;
+ DWORD dwFormatChangeCount;
+ WCHAR szName[64];
+} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;
+DECL_WINELIB_TYPE_AW(AVISTREAMINFO)
+DECL_WINELIB_TYPE_AW(LPAVISTREAMINFO)
+DECL_WINELIB_TYPE_AW(PAVISTREAMINFO)
+
+#define AVISTREAMINFO_DISABLED 0x00000001
+#define AVISTREAMINFO_FORMATCHANGES 0x00010000
+
+/* AVIFILEINFO.dwFlags */
+#define AVIFILEINFO_HASINDEX 0x00000010
+#define AVIFILEINFO_MUSTUSEINDEX 0x00000020
+#define AVIFILEINFO_ISINTERLEAVED 0x00000100
+#define AVIFILEINFO_TRUSTCKTYPE 0x00000800
+#define AVIFILEINFO_WASCAPTUREFILE 0x00010000
+#define AVIFILEINFO_COPYRIGHTED 0x00020000
+
+/* AVIFILEINFO.dwCaps */
+#define AVIFILECAPS_CANREAD 0x00000001
+#define AVIFILECAPS_CANWRITE 0x00000002
+#define AVIFILECAPS_ALLKEYFRAMES 0x00000010
+#define AVIFILECAPS_NOCOMPRESSION 0x00000020
+
+typedef struct _AVIFILEINFOW {
+ DWORD dwMaxBytesPerSec;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwLength;
+ DWORD dwEditCount;
+ WCHAR szFileType[64];
+} AVIFILEINFOW, * LPAVIFILEINFOW, *PAVIFILEINFOW;
+typedef struct _AVIFILEINFOA {
+ DWORD dwMaxBytesPerSec;
+ DWORD dwFlags;
+ DWORD dwCaps;
+ DWORD dwStreams;
+ DWORD dwSuggestedBufferSize;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwScale;
+ DWORD dwRate;
+ DWORD dwLength;
+ DWORD dwEditCount;
+ CHAR szFileType[64];
+} AVIFILEINFOA, * LPAVIFILEINFOA, *PAVIFILEINFOA;
+DECL_WINELIB_TYPE_AW(AVIFILEINFO)
+DECL_WINELIB_TYPE_AW(PAVIFILEINFO)
+DECL_WINELIB_TYPE_AW(LPAVIFILEINFO)
+
+/* AVICOMPRESSOPTIONS.dwFlags. determines presence of fields in below struct */
+#define AVICOMPRESSF_INTERLEAVE 0x00000001
+#define AVICOMPRESSF_DATARATE 0x00000002
+#define AVICOMPRESSF_KEYFRAMES 0x00000004
+#define AVICOMPRESSF_VALID 0x00000008
+
+typedef struct {
+ DWORD fccType; /* stream type, for consistency */
+ DWORD fccHandler; /* compressor */
+ DWORD dwKeyFrameEvery; /* keyframe rate */
+ DWORD dwQuality; /* compress quality 0-10,000 */
+ DWORD dwBytesPerSecond; /* bytes per second */
+ DWORD dwFlags; /* flags... see below */
+ LPVOID lpFormat; /* save format */
+ DWORD cbFormat;
+ LPVOID lpParms; /* compressor options */
+ DWORD cbParms;
+ DWORD dwInterleaveEvery; /* for non-video streams only */
+} AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;
+
+#define FIND_DIR __MSABI_LONG(0x0000000F) /* direction mask */
+#define FIND_NEXT __MSABI_LONG(0x00000001) /* search forward */
+#define FIND_PREV __MSABI_LONG(0x00000004) /* search backward */
+#define FIND_FROM_START __MSABI_LONG(0x00000008) /* start at the logical beginning */
+
+#define FIND_TYPE __MSABI_LONG(0x000000F0) /* type mask */
+#define FIND_KEY __MSABI_LONG(0x00000010) /* find a key frame */
+#define FIND_ANY __MSABI_LONG(0x00000020) /* find any (non-empty) sample */
+#define FIND_FORMAT __MSABI_LONG(0x00000040) /* find a formatchange */
+
+#define FIND_RET __MSABI_LONG(0x0000F000) /* return mask */
+#define FIND_POS __MSABI_LONG(0x00000000) /* return logical position */
+#define FIND_LENGTH __MSABI_LONG(0x00001000) /* return logical size */
+#define FIND_OFFSET __MSABI_LONG(0x00002000) /* return physical position */
+#define FIND_SIZE __MSABI_LONG(0x00003000) /* return physical size */
+#define FIND_INDEX __MSABI_LONG(0x00004000) /* return physical index position */
+
+#include <ole2.h>
+
+#define DEFINE_AVIGUID(name, l, w1, w2) \
+ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+DEFINE_AVIGUID(IID_IAVIFile, 0x00020020, 0, 0);
+DEFINE_AVIGUID(IID_IAVIStream, 0x00020021, 0, 0);
+DEFINE_AVIGUID(IID_IAVIStreaming, 0x00020022, 0, 0);
+DEFINE_AVIGUID(IID_IGetFrame, 0x00020023, 0, 0);
+DEFINE_AVIGUID(IID_IAVIEditStream, 0x00020024, 0, 0);
+
+DEFINE_AVIGUID(CLSID_AVISimpleUnMarshal,0x00020009, 0, 0);
+DEFINE_AVIGUID(CLSID_AVIFile, 0x00020000, 0, 0);
+
+/*****************************************************************************
+ * IAVIStream interface
+ */
+#define INTERFACE IAVIStream
+DECLARE_INTERFACE_(IAVIStream,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IAVIStream methods ***/
+ STDMETHOD(Create)(THIS_ LPARAM lParam1, LPARAM lParam2) PURE;
+ STDMETHOD(Info)(THIS_ AVISTREAMINFOW *psi, LONG lSize) PURE;
+ STDMETHOD_(LONG,FindSample)(THIS_ LONG lPos, LONG lFlags) PURE;
+ STDMETHOD(ReadFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG *lpcbFormat) PURE;
+ STDMETHOD(SetFormat)(THIS_ LONG lPos, LPVOID lpFormat, LONG cbFormat) PURE;
+ STDMETHOD(Read)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, LONG *plBytes, LONG *plSamples) PURE;
+ STDMETHOD(Write)(THIS_ LONG lStart, LONG lSamples, LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, LONG *plSampWritten, LONG *plBytesWritten) PURE;
+ STDMETHOD(Delete)(THIS_ LONG lStart, LONG lSamples) PURE;
+ STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE;
+ STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE;
+ STDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW *plInfo, LONG cbInfo) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIStream_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IAVIStream_Release(p) (p)->lpVtbl->Release(p)
+/*** IAVIStream methods ***/
+#define IAVIStream_Create(p,a,b) (p)->lpVtbl->Create(p,a,b)
+#define IAVIStream_Info(p,a,b) (p)->lpVtbl->Info(p,a,b)
+#define IAVIStream_FindSample(p,a,b) (p)->lpVtbl->FindSample(p,a,b)
+#define IAVIStream_ReadFormat(p,a,b,c) (p)->lpVtbl->ReadFormat(p,a,b,c)
+#define IAVIStream_SetFormat(p,a,b,c) (p)->lpVtbl->SetFormat(p,a,b,c)
+#define IAVIStream_Read(p,a,b,c,d,e,f) (p)->lpVtbl->Read(p,a,b,c,d,e,f)
+#define IAVIStream_Write(p,a,b,c,d,e,f,g) (p)->lpVtbl->Write(p,a,b,c,d,e,f,g)
+#define IAVIStream_Delete(p,a,b) (p)->lpVtbl->Delete(p,a,b)
+#define IAVIStream_ReadData(p,a,b,c) (p)->lpVtbl->ReadData(p,a,b,c)
+#define IAVIStream_WriteData(p,a,b,c) (p)->lpVtbl->WriteData(p,a,b,c)
+#define IAVIStream_SetInfo(p,a,b) (p)->lpVtbl->SetInfo(p,a,b)
+#endif
+
+#define AVISTREAMREAD_CONVENIENT (__MSABI_LONG(-1))
+
+ULONG WINAPI AVIStreamAddRef(PAVISTREAM iface);
+ULONG WINAPI AVIStreamRelease(PAVISTREAM iface);
+HRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*);
+HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG size);
+HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG size);
+#define AVIStreamInfo WINELIB_NAME_AW(AVIStreamInfo)
+LONG WINAPI AVIStreamFindSample(PAVISTREAM pstream, LONG pos, LONG flags);
+HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize);
+HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize);
+HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
+HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
+HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread);
+HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size);
+
+PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM pavi,LPBITMAPINFOHEADER lpbiWanted);
+LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos);
+HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg);
+
+HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *lpOptions,CLSID*pclsidHandler);
+HRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE *ppfile, int nStreams, PAVISTREAM *ppStreams);
+HRESULT WINAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM * ppstream);
+
+HRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM *ppavi, LPCSTR szFile,
+ DWORD fccType, LONG lParam,
+ UINT mode, CLSID *pclsidHandler);
+HRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM *ppavi, LPCWSTR szFile,
+ DWORD fccType, LONG lParam,
+ UINT mode, CLSID *pclsidHandler);
+#define AVIStreamOpenFromFile WINELIB_NAME_AW(AVIStreamOpenFromFile)
+
+LONG WINAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate);
+LONG WINAPI AVIStreamEndStreaming(PAVISTREAM pavi);
+
+HRESULT WINAPI AVIBuildFilterA(LPSTR szFilter, LONG cbFilter, BOOL fSaving);
+HRESULT WINAPI AVIBuildFilterW(LPWSTR szFilter, LONG cbFilter, BOOL fSaving);
+#define AVIBuildFilter WINELIB_NAME_AW(AVIBuildFilter)
+
+BOOL WINAPI AVISaveOptions(HWND hWnd,UINT uFlags,INT nStream,
+ PAVISTREAM *ppavi,LPAVICOMPRESSOPTIONS *ppOptions);
+HRESULT WINAPI AVISaveOptionsFree(INT nStreams,LPAVICOMPRESSOPTIONS*ppOptions);
+
+HRESULT CDECL AVISaveA(LPCSTR szFile, CLSID *pclsidHandler,
+ AVISAVECALLBACK lpfnCallback, int nStreams,
+ PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...);
+HRESULT CDECL AVISaveW(LPCWSTR szFile, CLSID *pclsidHandler,
+ AVISAVECALLBACK lpfnCallback, int nStreams,
+ PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...);
+#define AVISave WINELIB_NAME_AW(AVISave)
+
+HRESULT WINAPI AVISaveVA(LPCSTR szFile, CLSID *pclsidHandler,
+ AVISAVECALLBACK lpfnCallback, int nStream,
+ PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);
+HRESULT WINAPI AVISaveVW(LPCWSTR szFile, CLSID *pclsidHandler,
+ AVISAVECALLBACK lpfnCallback, int nStream,
+ PAVISTREAM *ppavi, LPAVICOMPRESSOPTIONS *plpOptions);
+#define AVISaveV WINELIB_NAME_AW(AVISaveV)
+
+LONG WINAPI AVIStreamStart(PAVISTREAM iface);
+LONG WINAPI AVIStreamLength(PAVISTREAM iface);
+LONG WINAPI AVIStreamSampleToTime(PAVISTREAM pstream, LONG lSample);
+LONG WINAPI AVIStreamTimeToSample(PAVISTREAM pstream, LONG lTime);
+
+#define AVIFileClose(pavi) \
+ AVIFileRelease(pavi)
+#define AVIStreamClose(pavi) \
+ AVIStreamRelease(pavi);
+#define AVIStreamEnd(pavi) \
+ (AVIStreamStart(pavi) + AVIStreamLength(pavi))
+#define AVIStreamEndTime(pavi) \
+ AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi))
+#define AVIStreamFormatSize(pavi, lPos, plSize) \
+ AVIStreamReadFormat(pavi, lPos, NULL, plSize)
+#define AVIStreamLengthTime(pavi) \
+ AVIStreamSampleToTime(pavi, AVIStreamLength(pavi))
+#define AVIStreamSampleSize(pavi,pos,psize) \
+ AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL)
+#define AVIStreamSampleToSample(pavi1, pavi2, samp2) \
+ AVIStreamTimeToSample(pavi1, AVIStreamSampleToTime(pavi2, samp2))
+#define AVIStreamStartTime(pavi) \
+ AVIStreamSampleToTime(pavi, AVIStreamStart(pavi))
+
+#define AVIStreamNextSample(pavi, pos) \
+ AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_ANY)
+#define AVIStreamPrevSample(pavi, pos) \
+ AVIStreamFindSample(pavi, pos - 1, FIND_PREV | FIND_ANY)
+#define AVIStreamNearestSample(pavi, pos) \
+ AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_ANY)
+#define AVStreamNextKeyFrame(pavi,pos) \
+ AVIStreamFindSample(pavi, pos + 1, FIND_NEXT | FIND_KEY)
+#define AVStreamPrevKeyFrame(pavi,pos) \
+ AVIStreamFindSample(pavi, pos - 1, FIND_NEXT | FIND_KEY)
+#define AVIStreamNearestKeyFrame(pavi,pos) \
+ AVIStreamFindSample(pavi, pos, FIND_PREV | FIND_KEY)
+#define AVIStreamIsKeyFrame(pavi, pos) \
+ (AVIStreamNearestKeyFrame(pavi, pos) == pos)
+
+/*****************************************************************************
+ * IAVIStreaming interface
+ */
+#define INTERFACE IAVIStreaming
+DECLARE_INTERFACE_(IAVIStreaming,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IAVIStreaming methods ***/
+ STDMETHOD(Begin)(IAVIStreaming*iface,LONG lStart,LONG lEnd,LONG lRate) PURE;
+ STDMETHOD(End)(IAVIStreaming*iface) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIStreaming_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIStreaming_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IAVIStreaming_Release(p) (p)->lpVtbl->Release(p)
+/*** IAVIStreaming methods ***/
+#define IAVIStreaming_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)
+#define IAVIStreaming_End(p) (p)->lpVtbl->End(p)
+#endif
+
+/*****************************************************************************
+ * IAVIEditStream interface
+ */
+#define INTERFACE IAVIEditStream
+DECLARE_INTERFACE_(IAVIEditStream,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IAVIEditStream methods ***/
+ STDMETHOD(Cut)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE;
+ STDMETHOD(Copy)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM*ppResult) PURE;
+ STDMETHOD(Paste)(IAVIEditStream*iface,LONG*plStart,LONG*plLength,PAVISTREAM pSource,LONG lStart,LONG lEnd) PURE;
+ STDMETHOD(Clone)(IAVIEditStream*iface,PAVISTREAM*ppResult) PURE;
+ STDMETHOD(SetInfo)(IAVIEditStream*iface,LPAVISTREAMINFOW asi, LONG size) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIEditStream_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIEditStream_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IAVIEditStream_Release(p) (p)->lpVtbl->Release(p)
+/*** IAVIEditStream methods ***/
+#define IAVIEditStream_Cut(p,a,b,c) (p)->lpVtbl->Cut(p,a,b,c)
+#define IAVIEditStream_Copy(p,a,b,c) (p)->lpVtbl->Copy(p,a,b,c)
+#define IAVIEditStream_Paste(p,a,b,c,d,e) (p)->lpVtbl->Paste(p,a,b,c,d,e)
+#define IAVIEditStream_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#define IAVIEditStream_SetInfo(p,a,b) (p)->lpVtbl->SetInfo(p,a,b)
+#endif
+
+HRESULT WINAPI CreateEditableStream(PAVISTREAM *ppEditable,PAVISTREAM pSource);
+HRESULT WINAPI EditStreamClone(PAVISTREAM pStream, PAVISTREAM *ppResult);
+HRESULT WINAPI EditStreamCopy(PAVISTREAM pStream, LONG *plStart,
+ LONG *plLength, PAVISTREAM *ppResult);
+HRESULT WINAPI EditStreamCut(PAVISTREAM pStream, LONG *plStart,
+ LONG *plLength, PAVISTREAM *ppResult);
+HRESULT WINAPI EditStreamPaste(PAVISTREAM pDest, LONG *plStart, LONG *plLength,
+ PAVISTREAM pSource, LONG lStart, LONG lEnd);
+
+HRESULT WINAPI EditStreamSetInfoA(PAVISTREAM pstream, LPAVISTREAMINFOA asi,
+ LONG size);
+HRESULT WINAPI EditStreamSetInfoW(PAVISTREAM pstream, LPAVISTREAMINFOW asi,
+ LONG size);
+#define EditStreamSetInfo WINELIB_NAME_AW(EditStreamSetInfo)
+
+HRESULT WINAPI EditStreamSetNameA(PAVISTREAM pstream, LPCSTR szName);
+HRESULT WINAPI EditStreamSetNameW(PAVISTREAM pstream, LPCWSTR szName);
+#define EditStreamSetName WINELIB_NAME_AW(EditStreamSetName)
+
+/*****************************************************************************
+ * IAVIFile interface
+ */
+/* In Win32 this interface uses UNICODE only */
+#define INTERFACE IAVIFile
+DECLARE_INTERFACE_(IAVIFile,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IAVIFile methods ***/
+ STDMETHOD(Info)(THIS_ AVIFILEINFOW *pfi, LONG lSize) PURE;
+ STDMETHOD(GetStream)(THIS_ PAVISTREAM *ppStream, DWORD fccType, LONG lParam) PURE;
+ STDMETHOD(CreateStream)(THIS_ PAVISTREAM *ppStream, AVISTREAMINFOW *psi) PURE;
+ STDMETHOD(WriteData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG cbBuffer) PURE;
+ STDMETHOD(ReadData)(THIS_ DWORD fcc, LPVOID lpBuffer, LONG *lpcbBuffer) PURE;
+ STDMETHOD(EndRecord)(THIS) PURE;
+ STDMETHOD(DeleteStream)(THIS_ DWORD fccType, LONG lParam) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IAVIFile_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IAVIFile_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IAVIFile_Release(p) (p)->lpVtbl->Release(p)
+/*** IAVIFile methods ***/
+#define IAVIFile_Info(p,a,b) (p)->lpVtbl->Info(p,a,b)
+#define IAVIFile_GetStream(p,a,b,c) (p)->lpVtbl->GetStream(p,a,b,c)
+#define IAVIFile_CreateStream(p,a,b) (p)->lpVtbl->CreateStream(p,a,b)
+#define IAVIFile_WriteData(p,a,b,c) (p)->lpVtbl->WriteData(p,a,b,c)
+#define IAVIFile_ReadData(p,a,b,c) (p)->lpVtbl->ReadData(p,a,b,c)
+#define IAVIFile_EndRecord(p) (p)->lpVtbl->EndRecord(p)
+#define IAVIFile_DeleteStream(p,a,b) (p)->lpVtbl->DeleteStream(p,a,b)
+#endif
+
+void WINAPI AVIFileInit(void);
+void WINAPI AVIFileExit(void);
+
+HRESULT WINAPI AVIFileOpenA(PAVIFILE* ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler);
+HRESULT WINAPI AVIFileOpenW(PAVIFILE* ppfile,LPCWSTR szFile,UINT uMode,LPCLSID lpHandler);
+#define AVIFileOpen WINELIB_NAME_AW(AVIFileOpen)
+
+ULONG WINAPI AVIFileAddRef(PAVIFILE pfile);
+ULONG WINAPI AVIFileRelease(PAVIFILE pfile);
+HRESULT WINAPI AVIFileInfoA(PAVIFILE pfile,PAVIFILEINFOA pfi,LONG lSize);
+HRESULT WINAPI AVIFileInfoW(PAVIFILE pfile,PAVIFILEINFOW pfi,LONG lSize);
+#define AVIFileInfo WINELIB_NAME_AW(AVIFileInfo)
+HRESULT WINAPI AVIFileGetStream(PAVIFILE pfile,PAVISTREAM* avis,DWORD fccType,LONG lParam);
+HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOA* psi);
+HRESULT WINAPI AVIFileCreateStreamW(PAVIFILE pfile,PAVISTREAM* ppavi,AVISTREAMINFOW* psi);
+#define AVIFileCreateStream WINELIB_NAME_AW(AVIFileCreateStream)
+HRESULT WINAPI AVIFileWriteData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LONG size);
+HRESULT WINAPI AVIFileReadData(PAVIFILE pfile,DWORD fcc,LPVOID lp,LPLONG size);
+HRESULT WINAPI AVIFileEndRecord(PAVIFILE pfile);
+
+/*****************************************************************************
+ * IGetFrame interface
+ */
+#define INTERFACE IGetFrame
+DECLARE_INTERFACE_(IGetFrame,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IGetFrame methods ***/
+ STDMETHOD_(LPVOID,GetFrame)(THIS_ LONG lPos) PURE;
+ STDMETHOD(Begin)(THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE;
+ STDMETHOD(End)(THIS) PURE;
+ STDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, INT x, INT y, INT dx, INT dy) PURE;
+};
+#undef INTERFACE
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IGetFrame_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IGetFrame_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IGetFrame_Release(p) (p)->lpVtbl->Release(p)
+/*** IGetFrame methods ***/
+#define IGetFrame_GetFrame(p,a) (p)->lpVtbl->GetFrame(p,a)
+#define IGetFrame_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)
+#define IGetFrame_End(p) (p)->lpVtbl->End(p)
+#define IGetFrame_SetFormat(p,a,b,c,d,e,f) (p)->lpVtbl->SetFormat(p,a,b,c,d,e,f)
+#endif
+
+HRESULT WINAPI AVIClearClipboard(void);
+HRESULT WINAPI AVIGetFromClipboard(PAVIFILE *ppfile);
+HRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE pfile);
+
+#ifdef OFN_READONLY
+BOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn);
+BOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn);
+#define GetOpenFileNamePreview WINELIB_NAME_AW(GetOpenFileNamePreview)
+BOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn);
+BOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn);
+#define GetSaveFileNamePreview WINELIB_NAME_AW(GetSaveFileNamePreview)
+#endif
+
+#define AVIERR_OK 0
+#define MAKE_AVIERR(error) MAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+error)
+
+#define AVIERR_UNSUPPORTED MAKE_AVIERR(101)
+#define AVIERR_BADFORMAT MAKE_AVIERR(102)
+#define AVIERR_MEMORY MAKE_AVIERR(103)
+#define AVIERR_INTERNAL MAKE_AVIERR(104)
+#define AVIERR_BADFLAGS MAKE_AVIERR(105)
+#define AVIERR_BADPARAM MAKE_AVIERR(106)
+#define AVIERR_BADSIZE MAKE_AVIERR(107)
+#define AVIERR_BADHANDLE MAKE_AVIERR(108)
+#define AVIERR_FILEREAD MAKE_AVIERR(109)
+#define AVIERR_FILEWRITE MAKE_AVIERR(110)
+#define AVIERR_FILEOPEN MAKE_AVIERR(111)
+#define AVIERR_COMPRESSOR MAKE_AVIERR(112)
+#define AVIERR_NOCOMPRESSOR MAKE_AVIERR(113)
+#define AVIERR_READONLY MAKE_AVIERR(114)
+#define AVIERR_NODATA MAKE_AVIERR(115)
+#define AVIERR_BUFFERTOOSMALL MAKE_AVIERR(116)
+#define AVIERR_CANTCOMPRESS MAKE_AVIERR(117)
+#define AVIERR_USERABORT MAKE_AVIERR(198)
+#define AVIERR_ERROR MAKE_AVIERR(199)
+
+BOOL VFWAPIV MCIWndRegisterClass(void);
+
+HWND VFWAPIV MCIWndCreateA(HWND, HINSTANCE, DWORD, LPCSTR);
+HWND VFWAPIV MCIWndCreateW(HWND, HINSTANCE, DWORD, LPCWSTR);
+#define MCIWndCreate WINELIB_NAME_AW(MCIWndCreate)
+
+#define MCIWNDOPENF_NEW 0x0001
+
+#define MCIWNDF_NOAUTOSIZEWINDOW 0x0001
+#define MCIWNDF_NOPLAYBAR 0x0002
+#define MCIWNDF_NOAUTOSIZEMOVIE 0x0004
+#define MCIWNDF_NOMENU 0x0008
+#define MCIWNDF_SHOWNAME 0x0010
+#define MCIWNDF_SHOWPOS 0x0020
+#define MCIWNDF_SHOWMODE 0x0040
+#define MCIWNDF_SHOWALL 0x0070
+
+#define MCIWNDF_NOTIFYMODE 0x0100
+#define MCIWNDF_NOTIFYPOS 0x0200
+#define MCIWNDF_NOTIFYSIZE 0x0400
+#define MCIWNDF_NOTIFYERROR 0x1000
+#define MCIWNDF_NOTIFYALL 0x1F00
+
+#define MCIWNDF_NOTIFYANSI 0x0080
+
+#define MCIWNDF_NOTIFYMEDIAA 0x0880
+#define MCIWNDF_NOTIFYMEDIAW 0x0800
+#define MCIWNDF_NOTIFYMEDIA WINELIB_NAME_AW(MCIWNDF_NOTIFYMEDIA)
+
+#define MCIWNDF_RECORD 0x2000
+#define MCIWNDF_NOERRORDLG 0x4000
+#define MCIWNDF_NOOPEN 0x8000
+
+#ifdef __cplusplus
+#define MCIWndSM ::SendMessage
+#else
+#define MCIWndSM SendMessage
+#endif
+
+#define MCIWndCanPlay(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0)
+#define MCIWndCanRecord(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0)
+#define MCIWndCanSave(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0)
+#define MCIWndCanWindow(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0)
+#define MCIWndCanEject(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0)
+#define MCIWndCanConfig(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0)
+#define MCIWndPaletteKick(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0)
+
+#define MCIWndSave(hWnd,szFile) (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile))
+#define MCIWndSaveDialog(hWnd) MCIWndSave(hWnd,-1)
+
+#define MCIWndNew(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp))
+
+#define MCIWndRecord(hWnd) (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0)
+#define MCIWndOpen(hWnd,sz,f) (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))
+#define MCIWndOpenDialog(hWnd) MCIWndOpen(hWnd,-1,0)
+#define MCIWndClose(hWnd) (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0)
+#define MCIWndPlay(hWnd) (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0)
+#define MCIWndStop(hWnd) (LONG)MCIWndSM(hWnd,MCI_STOP,0,0)
+#define MCIWndPause(hWnd) (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0)
+#define MCIWndResume(hWnd) (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0)
+#define MCIWndSeek(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos))
+#define MCIWndEject(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0)
+
+#define MCIWndHome(hWnd) MCIWndSeek(hWnd,MCIWND_START)
+#define MCIWndEnd(hWnd) MCIWndSeek(hWnd,MCIWND_END)
+
+#define MCIWndGetSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPutSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc))
+
+#define MCIWndGetDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc))
+#define MCIWndPutDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc))
+
+#define MCIWndPlayReverse(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0)
+#define MCIWndPlayFrom(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos))
+#define MCIWndPlayTo(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO, 0,(LPARAM)(LONG)(lPos))
+#define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd))
+
+#define MCIWndGetDeviceID(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0)
+#define MCIWndGetAlias(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0)
+#define MCIWndGetMode(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetPosition(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0)
+#define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetStart(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0)
+#define MCIWndGetLength(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0)
+#define MCIWndGetEnd(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0)
+
+#define MCIWndStep(hWnd,n) (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(LONG)(n))
+
+#define MCIWndDestroy(hWnd) (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0)
+#define MCIWndSetZoom(hWnd,iZoom) (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom))
+#define MCIWndGetZoom(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0)
+#define MCIWndSetVolume(hWnd,iVol) (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol))
+#define MCIWndGetVolume(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0)
+#define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed))
+#define MCIWndGetSpeed(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0)
+#define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp))
+#define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))
+#define MCIWndValidateMedia(hWnd) (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0)
+
+#define MCIWndSetRepeat(hWnd,f) (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f))
+#define MCIWndGetRepeat(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0)
+
+#define MCIWndUseFrames(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("frames"))
+#define MCIWndUseTime(hWnd) MCIWndSetTimeFormat(hWnd,TEXT("ms"))
+
+#define MCIWndSetActiveTimer(hWnd,active) \
+ (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER, \
+ (WPARAM)(UINT)(active),0)
+#define MCIWndSetInactiveTimer(hWnd,inactive) \
+ (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER, \
+ (WPARAM)(UINT)(inactive),0)
+#define MCIWndSetTimers(hWnd,active,inactive) \
+ (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),\
+ (LPARAM)(UINT)(inactive))
+#define MCIWndGetActiveTimer(hWnd) \
+ (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0);
+#define MCIWndGetInactiveTimer(hWnd) \
+ (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0);
+
+#define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0)
+
+#define MCIWndSendString(hWnd,sz) (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz))
+#define MCIWndReturnString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+
+#define MCIWndGetPalette(hWnd) (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0)
+#define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0)
+
+#define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+#define MCIWndGetDevice(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))
+
+#define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0)
+#define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))
+
+#define MCIWndOpenInterface(hWnd,pUnk) (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk))
+
+#define MCIWndSetOwner(hWnd,hWndP) (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0)
+
+#define MCIWNDM_GETDEVICEID (WM_USER + 100)
+#define MCIWNDM_GETSTART (WM_USER + 103)
+#define MCIWNDM_GETLENGTH (WM_USER + 104)
+#define MCIWNDM_GETEND (WM_USER + 105)
+#define MCIWNDM_EJECT (WM_USER + 107)
+#define MCIWNDM_SETZOOM (WM_USER + 108)
+#define MCIWNDM_GETZOOM (WM_USER + 109)
+#define MCIWNDM_SETVOLUME (WM_USER + 110)
+#define MCIWNDM_GETVOLUME (WM_USER + 111)
+#define MCIWNDM_SETSPEED (WM_USER + 112)
+#define MCIWNDM_GETSPEED (WM_USER + 113)
+#define MCIWNDM_SETREPEAT (WM_USER + 114)
+#define MCIWNDM_GETREPEAT (WM_USER + 115)
+#define MCIWNDM_REALIZE (WM_USER + 118)
+#define MCIWNDM_VALIDATEMEDIA (WM_USER + 121)
+#define MCIWNDM_PLAYFROM (WM_USER + 122)
+#define MCIWNDM_PLAYTO (WM_USER + 123)
+#define MCIWNDM_GETPALETTE (WM_USER + 126)
+#define MCIWNDM_SETPALETTE (WM_USER + 127)
+#define MCIWNDM_SETTIMERS (WM_USER + 129)
+#define MCIWNDM_SETACTIVETIMER (WM_USER + 130)
+#define MCIWNDM_SETINACTIVETIMER (WM_USER + 131)
+#define MCIWNDM_GETACTIVETIMER (WM_USER + 132)
+#define MCIWNDM_GETINACTIVETIMER (WM_USER + 133)
+#define MCIWNDM_CHANGESTYLES (WM_USER + 135)
+#define MCIWNDM_GETSTYLES (WM_USER + 136)
+#define MCIWNDM_GETALIAS (WM_USER + 137)
+#define MCIWNDM_PLAYREVERSE (WM_USER + 139)
+#define MCIWNDM_GET_SOURCE (WM_USER + 140)
+#define MCIWNDM_PUT_SOURCE (WM_USER + 141)
+#define MCIWNDM_GET_DEST (WM_USER + 142)
+#define MCIWNDM_PUT_DEST (WM_USER + 143)
+#define MCIWNDM_CAN_PLAY (WM_USER + 144)
+#define MCIWNDM_CAN_WINDOW (WM_USER + 145)
+#define MCIWNDM_CAN_RECORD (WM_USER + 146)
+#define MCIWNDM_CAN_SAVE (WM_USER + 147)
+#define MCIWNDM_CAN_EJECT (WM_USER + 148)
+#define MCIWNDM_CAN_CONFIG (WM_USER + 149)
+#define MCIWNDM_PALETTEKICK (WM_USER + 150)
+#define MCIWNDM_OPENINTERFACE (WM_USER + 151)
+#define MCIWNDM_SETOWNER (WM_USER + 152)
+
+#define MCIWNDM_SENDSTRINGA (WM_USER + 101)
+#define MCIWNDM_GETPOSITIONA (WM_USER + 102)
+#define MCIWNDM_GETMODEA (WM_USER + 106)
+#define MCIWNDM_SETTIMEFORMATA (WM_USER + 119)
+#define MCIWNDM_GETTIMEFORMATA (WM_USER + 120)
+#define MCIWNDM_GETFILENAMEA (WM_USER + 124)
+#define MCIWNDM_GETDEVICEA (WM_USER + 125)
+#define MCIWNDM_GETERRORA (WM_USER + 128)
+#define MCIWNDM_NEWA (WM_USER + 134)
+#define MCIWNDM_RETURNSTRINGA (WM_USER + 138)
+#define MCIWNDM_OPENA (WM_USER + 153)
+
+#define MCIWNDM_SENDSTRINGW (WM_USER + 201)
+#define MCIWNDM_GETPOSITIONW (WM_USER + 202)
+#define MCIWNDM_GETMODEW (WM_USER + 206)
+#define MCIWNDM_SETTIMEFORMATW (WM_USER + 219)
+#define MCIWNDM_GETTIMEFORMATW (WM_USER + 220)
+#define MCIWNDM_GETFILENAMEW (WM_USER + 224)
+#define MCIWNDM_GETDEVICEW (WM_USER + 225)
+#define MCIWNDM_GETERRORW (WM_USER + 228)
+#define MCIWNDM_NEWW (WM_USER + 234)
+#define MCIWNDM_RETURNSTRINGW (WM_USER + 238)
+#define MCIWNDM_OPENW (WM_USER + 252)
+
+#define MCIWNDM_SENDSTRING WINELIB_NAME_AW(MCIWNDM_SENDSTRING)
+#define MCIWNDM_GETPOSITION WINELIB_NAME_AW(MCIWNDM_GETPOSITION)
+#define MCIWNDM_GETMODE WINELIB_NAME_AW(MCIWNDM_GETMODE)
+#define MCIWNDM_SETTIMEFORMAT WINELIB_NAME_AW(MCIWNDM_SETTIMEFORMAT)
+#define MCIWNDM_GETTIMEFORMAT WINELIB_NAME_AW(MCIWNDM_GETTIMEFORMAT)
+#define MCIWNDM_GETFILENAME WINELIB_NAME_AW(MCIWNDM_GETFILENAME)
+#define MCIWNDM_GETDEVICE WINELIB_NAME_AW(MCIWNDM_GETDEVICE)
+#define MCIWNDM_GETERROR WINELIB_NAME_AW(MCIWNDM_GETERROR)
+#define MCIWNDM_NEW WINELIB_NAME_AW(MCIWNDM_NEW)
+#define MCIWNDM_RETURNSTRING WINELIB_NAME_AW(MCIWNDM_RETURNSTRING)
+#define MCIWNDM_OPEN WINELIB_NAME_AW(MCIWNDM_OPEN)
+
+#define MCIWNDM_NOTIFYMODE (WM_USER + 200)
+#define MCIWNDM_NOTIFYPOS (WM_USER + 201)
+#define MCIWNDM_NOTIFYSIZE (WM_USER + 202)
+#define MCIWNDM_NOTIFYMEDIA (WM_USER + 203)
+#define MCIWNDM_NOTIFYERROR (WM_USER + 205)
+
+#define MCIWND_START -1
+#define MCIWND_END -2
+
+/********************************************
+ * DrawDib declarations
+ */
+
+typedef struct
+{
+ LONG timeCount;
+ LONG timeDraw;
+ LONG timeDecompress;
+ LONG timeDither;
+ LONG timeStretch;
+ LONG timeBlt;
+ LONG timeSetDIBits;
+} DRAWDIBTIME, *LPDRAWDIBTIME;
+
+HDRAWDIB VFWAPI DrawDibOpen( void );
+UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground);
+
+BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd, HDC hdc, INT dxDst, INT dyDst,
+ LPBITMAPINFOHEADER lpbi, INT dxSrc, INT dySrc, UINT wFlags);
+
+BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc, INT xDst, INT yDst, INT dxDst, INT dyDst,
+ LPBITMAPINFOHEADER lpbi, LPVOID lpBits,
+ INT xSrc, INT ySrc, INT dxSrc, INT dySrc, UINT wFlags);
+
+/* DrawDibDraw flags */
+
+#define DDF_UPDATE 0x0002
+#define DDF_SAME_HDC 0x0004
+#define DDF_SAME_DRAW 0x0008
+#define DDF_DONTDRAW 0x0010
+#define DDF_ANIMATE 0x0020
+#define DDF_BUFFER 0x0040
+#define DDF_JUSTDRAWIT 0x0080
+#define DDF_FULLSCREEN 0x0100
+#define DDF_BACKGROUNDPAL 0x0200
+#define DDF_NOTKEYFRAME 0x0400
+#define DDF_HURRYUP 0x0800
+#define DDF_HALFTONE 0x1000
+
+#define DDF_PREROLL DDF_DONTDRAW
+#define DDF_SAME_DIB DDF_SAME_DRAW
+#define DDF_SAME_SIZE DDF_SAME_DRAW
+
+BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal);
+HPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe);
+LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags);
+
+BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate);
+BOOL VFWAPI DrawDibStop(HDRAWDIB hdd);
+#define DrawDibUpdate(hdd, hdc, x, y) \
+ DrawDibDraw(hdd, hdc, x, y, 0, 0, NULL, NULL, 0, 0, 0, 0, DDF_UPDATE)
+
+BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibClose(HDRAWDIB hdd);
+BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime);
+
+/* display profiling */
+#define PD_CAN_DRAW_DIB 0x0001
+#define PD_CAN_STRETCHDIB 0x0002
+#define PD_STRETCHDIB_1_1_OK 0x0004
+#define PD_STRETCHDIB_1_2_OK 0x0008
+#define PD_STRETCHDIB_1_N_OK 0x0010
+
+DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi);
+
+DECLARE_HANDLE(HVIDEO);
+typedef HVIDEO *LPHVIDEO;
+
+DWORD VFWAPI VideoForWindowsVersion(void);
+
+LONG VFWAPI InitVFW(void);
+LONG VFWAPI TermVFW(void);
+
+#define DV_ERR_OK (0)
+#define DV_ERR_BASE (1)
+#define DV_ERR_NONSPECIFIC (DV_ERR_BASE)
+#define DV_ERR_BADFORMAT (DV_ERR_BASE + 1)
+#define DV_ERR_STILLPLAYING (DV_ERR_BASE + 2)
+#define DV_ERR_UNPREPARED (DV_ERR_BASE + 3)
+#define DV_ERR_SYNC (DV_ERR_BASE + 4)
+#define DV_ERR_TOOMANYCHANNELS (DV_ERR_BASE + 5)
+#define DV_ERR_NOTDETECTED (DV_ERR_BASE + 6)
+#define DV_ERR_BADINSTALL (DV_ERR_BASE + 7)
+#define DV_ERR_CREATEPALETTE (DV_ERR_BASE + 8)
+#define DV_ERR_SIZEFIELD (DV_ERR_BASE + 9)
+#define DV_ERR_PARAM1 (DV_ERR_BASE + 10)
+#define DV_ERR_PARAM2 (DV_ERR_BASE + 11)
+#define DV_ERR_CONFIG1 (DV_ERR_BASE + 12)
+#define DV_ERR_CONFIG2 (DV_ERR_BASE + 13)
+#define DV_ERR_FLAGS (DV_ERR_BASE + 14)
+#define DV_ERR_13 (DV_ERR_BASE + 15)
+
+#define DV_ERR_NOTSUPPORTED (DV_ERR_BASE + 16)
+#define DV_ERR_NOMEM (DV_ERR_BASE + 17)
+#define DV_ERR_ALLOCATED (DV_ERR_BASE + 18)
+#define DV_ERR_BADDEVICEID (DV_ERR_BASE + 19)
+#define DV_ERR_INVALHANDLE (DV_ERR_BASE + 20)
+#define DV_ERR_BADERRNUM (DV_ERR_BASE + 21)
+#define DV_ERR_NO_BUFFERS (DV_ERR_BASE + 22)
+
+#define DV_ERR_MEM_CONFLICT (DV_ERR_BASE + 23)
+#define DV_ERR_IO_CONFLICT (DV_ERR_BASE + 24)
+#define DV_ERR_DMA_CONFLICT (DV_ERR_BASE + 25)
+#define DV_ERR_INT_CONFLICT (DV_ERR_BASE + 26)
+#define DV_ERR_PROTECT_ONLY (DV_ERR_BASE + 27)
+#define DV_ERR_LASTERROR (DV_ERR_BASE + 27)
+
+#define DV_ERR_USER_MSG (DV_ERR_BASE + 1000)
+
+#ifndef MM_DRVM_OPEN
+#define MM_DRVM_OPEN 0x3D0
+#define MM_DRVM_CLOSE 0x3D1
+#define MM_DRVM_DATA 0x3D2
+#define MM_DRVM_ERROR 0x3D3
+
+#define DV_VM_OPEN MM_DRVM_OPEN
+#define DV_VM_CLOSE MM_DRVM_CLOSE
+#define DV_VM_DATA MM_DRVM_DATA
+#define DV_VM_ERROR MM_DRVM_ERROR
+#endif
+
+typedef struct videohdr_tag {
+ LPBYTE lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesUsed;
+ DWORD dwTimeCaptured;
+ DWORD_PTR dwUser;
+ DWORD dwFlags;
+ DWORD_PTR dwReserved[4];
+} VIDEOHDR, *PVIDEOHDR, *LPVIDEOHDR;
+
+#define VHDR_DONE 0x00000001
+#define VHDR_PREPARED 0x00000002
+#define VHDR_INQUEUE 0x00000004
+#define VHDR_KEYFRAME 0x00000008
+
+typedef struct channel_caps_tag {
+ DWORD dwFlags;
+ DWORD dwSrcRectXMod;
+ DWORD dwSrcRectYMod;
+ DWORD dwSrcRectWidthMod;
+ DWORD dwSrcRectHeightMod;
+ DWORD dwDstRectXMod;
+ DWORD dwDstRectYMod;
+ DWORD dwDstRectWidthMod;
+ DWORD dwDstRectHeightMod;
+} CHANNEL_CAPS, *PCHANNEL_CAPS, *LPCHANNEL_CAPS;
+
+#define VCAPS_OVERLAY 0x00000001
+#define VCAPS_SRC_CAN_CLIP 0x00000002
+#define VCAPS_DST_CAN_CLIP 0x00000004
+#define VCAPS_CAN_SCALE 0x00000008
+
+#define VIDEO_EXTERNALIN 0x0001
+#define VIDEO_EXTERNALOUT 0x0002
+#define VIDEO_IN 0x0004
+#define VIDEO_OUT 0x0008
+
+#define VIDEO_DLG_QUERY 0x0010
+
+#define VIDEO_CONFIGURE_QUERY 0x8000
+
+#define VIDEO_CONFIGURE_SET 0x1000
+
+#define VIDEO_CONFIGURE_GET 0x2000
+#define VIDEO_CONFIGURE_QUERYSIZE 0x0001
+
+#define VIDEO_CONFIGURE_CURRENT 0x0010
+#define VIDEO_CONFIGURE_NOMINAL 0x0020
+#define VIDEO_CONFIGURE_MIN 0x0040
+#define VIDEO_CONFIGURE_MAX 0x0080
+
+#define DVM_USER 0x4000
+
+#define DVM_CONFIGURE_START 0x1000
+#define DVM_CONFIGURE_END 0x1FFF
+
+#define DVM_PALETTE (DVM_CONFIGURE_START + 1)
+#define DVM_FORMAT (DVM_CONFIGURE_START + 2)
+#define DVM_PALETTERGB555 (DVM_CONFIGURE_START + 3)
+#define DVM_SRC_RECT (DVM_CONFIGURE_START + 4)
+#define DVM_DST_RECT (DVM_CONFIGURE_START + 5)
+
+#define AVICapSM(hwnd,m,w,l) ((IsWindow(hwnd)) ? SendMessage(hwnd,m,w,l) : 0)
+
+#define WM_CAP_START WM_USER
+
+#define WM_CAP_UNICODE_START WM_USER+100
+
+#define WM_CAP_GET_CAPSTREAMPTR (WM_CAP_START + 1)
+
+#define WM_CAP_SET_CALLBACK_ERRORW (WM_CAP_UNICODE_START + 2)
+#define WM_CAP_SET_CALLBACK_STATUSW (WM_CAP_UNICODE_START + 3)
+#define WM_CAP_SET_CALLBACK_ERRORA (WM_CAP_START + 2)
+#define WM_CAP_SET_CALLBACK_STATUSA (WM_CAP_START+ 3)
+
+#define WM_CAP_SET_CALLBACK_ERROR WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_ERROR)
+#define WM_CAP_SET_CALLBACK_STATUS WINELIB_NAME_AW(WM_CAP_SET_CALLBACK_STATUS)
+
+#define WM_CAP_SET_CALLBACK_YIELD (WM_CAP_START + 4)
+#define WM_CAP_SET_CALLBACK_FRAME (WM_CAP_START + 5)
+#define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START + 6)
+#define WM_CAP_SET_CALLBACK_WAVESTREAM (WM_CAP_START + 7)
+#define WM_CAP_GET_USER_DATA (WM_CAP_START + 8)
+#define WM_CAP_SET_USER_DATA (WM_CAP_START + 9)
+
+#define WM_CAP_DRIVER_CONNECT (WM_CAP_START + 10)
+#define WM_CAP_DRIVER_DISCONNECT (WM_CAP_START + 11)
+
+#define WM_CAP_DRIVER_GET_NAMEA (WM_CAP_START + 12)
+#define WM_CAP_DRIVER_GET_VERSIONA (WM_CAP_START + 13)
+#define WM_CAP_DRIVER_GET_NAMEW (WM_CAP_UNICODE_START + 12)
+#define WM_CAP_DRIVER_GET_VERSIONW (WM_CAP_UNICODE_START + 13)
+
+#define WM_CAP_DRIVER_GET_NAME WINELIB_NAME_AW(WM_CAP_DRIVER_GET_NAME)
+#define WM_CAP_DRIVER_GET_VERSION WINELIB_NAME_AW(WM_CAP_DRIVER_GET_VERSION)
+
+#define WM_CAP_DRIVER_GET_CAPS (WM_CAP_START + 14)
+
+#define WM_CAP_FILE_SET_CAPTURE_FILEA (WM_CAP_START + 20)
+#define WM_CAP_FILE_GET_CAPTURE_FILEA (WM_CAP_START + 21)
+#define WM_CAP_FILE_ALLOCATE (WM_CAP_START + 22)
+#define WM_CAP_FILE_SAVEASA (WM_CAP_START + 23)
+#define WM_CAP_FILE_SET_INFOCHUNK (WM_CAP_START + 24)
+#define WM_CAP_FILE_SAVEDIBA (WM_CAP_START + 25)
+#define WM_CAP_FILE_SET_CAPTURE_FILEW (WM_CAP_UNICODE_START + 20)
+#define WM_CAP_FILE_GET_CAPTURE_FILEW (WM_CAP_UNICODE_START + 21)
+#define WM_CAP_FILE_SAVEASW (WM_CAP_UNICODE_START + 23)
+#define WM_CAP_FILE_SAVEDIBW (WM_CAP_UNICODE_START + 25)
+
+#define WM_CAP_FILE_SET_CAPTURE_FILE WINELIB_NAME_AW(WM_CAP_FILE_SET_CAPTURE_FILE)
+#define WM_CAP_FILE_GET_CAPTURE_FILE WINELIB_NAME_AW(WM_CAP_FILE_GET_CAPTURE_FILE)
+#define WM_CAP_FILE_SAVEAS WINELIB_NAME_AW(WM_CAP_FILE_SAVEAS)
+#define WM_CAP_FILE_SAVEDIB WINELIB_NAME_AW(WM_CAP_FILE_SAVEDIB)
+
+#define WM_CAP_EDIT_COPY (WM_CAP_START + 30)
+
+#define WM_CAP_SET_AUDIOFORMAT (WM_CAP_START + 35)
+#define WM_CAP_GET_AUDIOFORMAT (WM_CAP_START + 36)
+
+#define WM_CAP_DLG_VIDEOFORMAT (WM_CAP_START + 41)
+#define WM_CAP_DLG_VIDEOSOURCE (WM_CAP_START + 42)
+#define WM_CAP_DLG_VIDEODISPLAY (WM_CAP_START + 43)
+#define WM_CAP_GET_VIDEOFORMAT (WM_CAP_START + 44)
+#define WM_CAP_SET_VIDEOFORMAT (WM_CAP_START + 45)
+#define WM_CAP_DLG_VIDEOCOMPRESSION (WM_CAP_START + 46)
+
+#define WM_CAP_SET_PREVIEW (WM_CAP_START + 50)
+#define WM_CAP_SET_OVERLAY (WM_CAP_START + 51)
+#define WM_CAP_SET_PREVIEWRATE (WM_CAP_START + 52)
+#define WM_CAP_SET_SCALE (WM_CAP_START + 53)
+#define WM_CAP_GET_STATUS (WM_CAP_START + 54)
+#define WM_CAP_SET_SCROLL (WM_CAP_START + 55)
+
+#define WM_CAP_GRAB_FRAME (WM_CAP_START + 60)
+#define WM_CAP_GRAB_FRAME_NOSTOP (WM_CAP_START + 61)
+
+#define WM_CAP_SEQUENCE (WM_CAP_START + 62)
+#define WM_CAP_SEQUENCE_NOFILE (WM_CAP_START + 63)
+#define WM_CAP_SET_SEQUENCE_SETUP (WM_CAP_START + 64)
+#define WM_CAP_GET_SEQUENCE_SETUP (WM_CAP_START + 65)
+
+#define WM_CAP_SET_MCI_DEVICEA (WM_CAP_START + 66)
+#define WM_CAP_GET_MCI_DEVICEA (WM_CAP_START + 67)
+#define WM_CAP_SET_MCI_DEVICEW (WM_CAP_UNICODE_START + 66)
+#define WM_CAP_GET_MCI_DEVICEW (WM_CAP_UNICODE_START + 67)
+
+#define WM_CAP_SET_MCI_DEVICE WINELIB_NAME_AW(WM_CAP_SET_MCI_DEVICE)
+#define WM_CAP_GET_MCI_DEVICE WINELIB_NAME_AW(WM_CAP_GET_MCI_DEVICE)
+
+#define WM_CAP_STOP (WM_CAP_START + 68)
+#define WM_CAP_ABORT (WM_CAP_START + 69)
+
+#define WM_CAP_SINGLE_FRAME_OPEN (WM_CAP_START + 70)
+#define WM_CAP_SINGLE_FRAME_CLOSE (WM_CAP_START + 71)
+#define WM_CAP_SINGLE_FRAME (WM_CAP_START + 72)
+
+#define WM_CAP_PAL_OPENA (WM_CAP_START + 80)
+#define WM_CAP_PAL_SAVEA (WM_CAP_START + 81)
+#define WM_CAP_PAL_OPENW (WM_CAP_UNICODE_START + 80)
+#define WM_CAP_PAL_SAVEW (WM_CAP_UNICODE_START + 81)
+
+#define WM_CAP_PAL_OPEN WINELIB_NAME_AW(WM_CAP_PAL_OPEN)
+#define WM_CAP_PAL_SAVE WINELIB_NAME_AW(WM_CAP_PAL_SAVE)
+
+#define WM_CAP_PAL_PASTE (WM_CAP_START + 82)
+#define WM_CAP_PAL_AUTOCREATE (WM_CAP_START + 83)
+#define WM_CAP_PAL_MANUALCREATE (WM_CAP_START + 84)
+
+#define WM_CAP_SET_CALLBACK_CAPCONTROL (WM_CAP_START + 85)
+
+#define WM_CAP_UNICODE_END WM_CAP_PAL_SAVEW
+#define WM_CAP_END WM_CAP_UNICODE_END
+
+typedef struct tagCapDriverCaps {
+ UINT wDeviceIndex;
+ BOOL fHasOverlay;
+ BOOL fHasDlgVideoSource;
+ BOOL fHasDlgVideoFormat;
+ BOOL fHasDlgVideoDisplay;
+ BOOL fCaptureInitialized;
+ BOOL fDriverSuppliesPalettes;
+ HANDLE hVideoIn;
+ HANDLE hVideoOut;
+ HANDLE hVideoExtIn;
+ HANDLE hVideoExtOut;
+} CAPDRIVERCAPS, *PCAPDRIVERCAPS, *LPCAPDRIVERCAPS;
+
+typedef struct tagCapStatus {
+ UINT uiImageWidth;
+ UINT uiImageHeight;
+ BOOL fLiveWindow;
+ BOOL fOverlayWindow;
+ BOOL fScale;
+ POINT ptScroll;
+ BOOL fUsingDefaultPalette;
+ BOOL fAudioHardware;
+ BOOL fCapFileExists;
+ DWORD dwCurrentVideoFrame;
+ DWORD dwCurrentVideoFramesDropped;
+ DWORD dwCurrentWaveSamples;
+ DWORD dwCurrentTimeElapsedMS;
+ HPALETTE hPalCurrent;
+ BOOL fCapturingNow;
+ DWORD dwReturn;
+ UINT wNumVideoAllocated;
+ UINT wNumAudioAllocated;
+} CAPSTATUS, *PCAPSTATUS, *LPCAPSTATUS;
+
+
+typedef struct tagCaptureParms {
+ DWORD dwRequestMicroSecPerFrame;
+ BOOL fMakeUserHitOKToCapture;
+ UINT wPercentDropForError;
+ BOOL fYield;
+ DWORD dwIndexSize;
+ UINT wChunkGranularity;
+ BOOL fUsingDOSMemory;
+ UINT wNumVideoRequested;
+ BOOL fCaptureAudio;
+ UINT wNumAudioRequested;
+ UINT vKeyAbort;
+ BOOL fAbortLeftMouse;
+ BOOL fAbortRightMouse;
+ BOOL fLimitEnabled;
+ UINT wTimeLimit;
+ BOOL fMCIControl;
+ BOOL fStepMCIDevice;
+ DWORD dwMCIStartTime;
+ DWORD dwMCIStopTime;
+ BOOL fStepCaptureAt2x;
+ UINT wStepCaptureAverageFrames;
+ DWORD dwAudioBufferSize;
+ BOOL fDisableWriteCache;
+ UINT AVStreamMaster;
+} CAPTUREPARMS, *PCAPTUREPARMS, *LPCAPTUREPARMS;
+
+typedef LRESULT (CALLBACK* CAPYIELDCALLBACK) (HWND hWnd);
+typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz);
+typedef LRESULT (CALLBACK* CAPERRORCALLBACKW) (HWND hWnd, int nID, LPCWSTR lpsz);
+typedef LRESULT (CALLBACK* CAPSTATUSCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz);
+typedef LRESULT (CALLBACK* CAPERRORCALLBACKA) (HWND hWnd, int nID, LPCSTR lpsz);
+typedef LRESULT (CALLBACK* CAPVIDEOCALLBACK) (HWND hWnd, LPVIDEOHDR lpVHdr);
+typedef LRESULT (CALLBACK* CAPWAVECALLBACK) (HWND hWnd, LPWAVEHDR lpWHdr);
+typedef LRESULT (CALLBACK* CAPCONTROLCALLBACK)(HWND hWnd, int nState);
+
+HWND VFWAPI capCreateCaptureWindowA(LPCSTR,DWORD,INT,INT,INT,INT,HWND,INT);
+HWND VFWAPI capCreateCaptureWindowW(LPCWSTR,DWORD,INT,INT,INT,INT,HWND,INT);
+#define capCreateCaptureWindow WINELIB_NAME_AW(capCreateCaptureWindow)
+BOOL VFWAPI capGetDriverDescriptionA(WORD,LPSTR,INT,LPSTR,INT);
+BOOL VFWAPI capGetDriverDescriptionW(WORD,LPWSTR,INT,LPWSTR,INT);
+#define capGetDriverDescription WINELIB_NAME_AW(capGetDriverDescription)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __WINE_VFW_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h
new file mode 100644
index 00000000..401f4279
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vfwmsgs.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#define VFW_S_NO_MORE_ITEMS ((HRESULT)0x00040103)
+#define VFW_S_DUPLICATE_NAME ((HRESULT)0x0004022D)
+#define VFW_S_STATE_INTERMEDIATE ((HRESULT)0x00040237)
+#define VFW_S_PARTIAL_RENDER ((HRESULT)0x00040242)
+#define VFW_S_SOME_DATA_IGNORED ((HRESULT)0x00040245)
+#define VFW_S_CONNECTIONS_DEFERRED ((HRESULT)0x00040246)
+#define VFW_S_RESOURCE_NOT_NEEDED ((HRESULT)0x00040250)
+#define VFW_S_MEDIA_TYPE_IGNORED ((HRESULT)0x00040254)
+#define VFW_S_VIDEO_NOT_RENDERED ((HRESULT)0x00040257)
+#define VFW_S_AUDIO_NOT_RENDERED ((HRESULT)0x00040258)
+#define VFW_S_RPZA ((HRESULT)0x0004025A)
+#define VFW_S_ESTIMATED ((HRESULT)0x00040260)
+#define VFW_S_RESERVED ((HRESULT)0x00040263)
+#define VFW_S_STREAM_OFF ((HRESULT)0x00040267)
+#define VFW_S_CANT_CUE ((HRESULT)0x00040268)
+#define VFW_S_NO_STOP_TIME ((HRESULT)0x00040270)
+#define VFW_S_NOPREVIEWPIN ((HRESULT)0x0004027E)
+#define VFW_S_DVD_NON_ONE_SEQUENTIAL ((HRESULT)0x00040280)
+#define VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE ((HRESULT)0x0004028C)
+#define VFW_S_DVD_NOT_ACCURATE ((HRESULT)0x0004028D)
+#define VFW_E_INVALIDMEDIATYPE ((HRESULT)0x80040200)
+#define VFW_E_INVALIDSUBTYPE ((HRESULT)0x80040201)
+#define VFW_E_NEED_OWNER ((HRESULT)0x80040202)
+#define VFW_E_ENUM_OUT_OF_SYNC ((HRESULT)0x80040203)
+#define VFW_E_ALREADY_CONNECTED ((HRESULT)0x80040204)
+#define VFW_E_FILTER_ACTIVE ((HRESULT)0x80040205)
+#define VFW_E_NO_TYPES ((HRESULT)0x80040206)
+#define VFW_E_NO_ACCEPTABLE_TYPES ((HRESULT)0x80040207)
+#define VFW_E_INVALID_DIRECTION ((HRESULT)0x80040208)
+#define VFW_E_NOT_CONNECTED ((HRESULT)0x80040209)
+#define VFW_E_NO_ALLOCATOR ((HRESULT)0x8004020A)
+#define VFW_E_RUNTIME_ERROR ((HRESULT)0x8004020B)
+#define VFW_E_BUFFER_NOTSET ((HRESULT)0x8004020C)
+#define VFW_E_BUFFER_OVERFLOW ((HRESULT)0x8004020D)
+#define VFW_E_BADALIGN ((HRESULT)0x8004020E)
+#define VFW_E_ALREADY_COMMITTED ((HRESULT)0x8004020F)
+#define VFW_E_BUFFERS_OUTSTANDING ((HRESULT)0x80040210)
+#define VFW_E_NOT_COMMITTED ((HRESULT)0x80040211)
+#define VFW_E_SIZENOTSET ((HRESULT)0x80040212)
+#define VFW_E_NO_CLOCK ((HRESULT)0x80040213)
+#define VFW_E_NO_SINK ((HRESULT)0x80040214)
+#define VFW_E_NO_INTERFACE ((HRESULT)0x80040215)
+#define VFW_E_NOT_FOUND ((HRESULT)0x80040216)
+#define VFW_E_CANNOT_CONNECT ((HRESULT)0x80040217)
+#define VFW_E_CANNOT_RENDER ((HRESULT)0x80040218)
+#define VFW_E_CHANGING_FORMAT ((HRESULT)0x80040219)
+#define VFW_E_NO_COLOR_KEY_SET ((HRESULT)0x8004021A)
+#define VFW_E_NOT_OVERLAY_CONNECTION ((HRESULT)0x8004021B)
+#define VFW_E_NOT_SAMPLE_CONNECTION ((HRESULT)0x8004021C)
+#define VFW_E_PALETTE_SET ((HRESULT)0x8004021D)
+#define VFW_E_COLOR_KEY_SET ((HRESULT)0x8004021E)
+#define VFW_E_NO_COLOR_KEY_FOUND ((HRESULT)0x8004021F)
+#define VFW_E_NO_PALETTE_AVAILABLE ((HRESULT)0x80040220)
+#define VFW_E_NO_DISPLAY_PALETTE ((HRESULT)0x80040221)
+#define VFW_E_TOO_MANY_COLORS ((HRESULT)0x80040222)
+#define VFW_E_STATE_CHANGED ((HRESULT)0x80040223)
+#define VFW_E_NOT_STOPPED ((HRESULT)0x80040224)
+#define VFW_E_NOT_PAUSED ((HRESULT)0x80040225)
+#define VFW_E_NOT_RUNNING ((HRESULT)0x80040226)
+#define VFW_E_WRONG_STATE ((HRESULT)0x80040227)
+#define VFW_E_START_TIME_AFTER_END ((HRESULT)0x80040228)
+#define VFW_E_INVALID_RECT ((HRESULT)0x80040229)
+#define VFW_E_TYPE_NOT_ACCEPTED ((HRESULT)0x8004022A)
+#define VFW_E_SAMPLE_REJECTED ((HRESULT)0x8004022B)
+#define VFW_E_SAMPLE_REJECTED_EOS ((HRESULT)0x8004022C)
+#define VFW_E_DUPLICATE_NAME ((HRESULT)0x8004022D)
+#define VFW_E_TIMEOUT ((HRESULT)0x8004022E)
+#define VFW_E_INVALID_FILE_FORMAT ((HRESULT)0x8004022F)
+#define VFW_E_ENUM_OUT_OF_RANGE ((HRESULT)0x80040230)
+#define VFW_E_CIRCULAR_GRAPH ((HRESULT)0x80040231)
+#define VFW_E_NOT_ALLOWED_TO_SAVE ((HRESULT)0x80040232)
+#define VFW_E_TIME_ALREADY_PASSED ((HRESULT)0x80040233)
+#define VFW_E_ALREADY_CANCELLED ((HRESULT)0x80040234)
+#define VFW_E_CORRUPT_GRAPH_FILE ((HRESULT)0x80040235)
+#define VFW_E_ADVISE_ALREADY_SET ((HRESULT)0x80040236)
+#define VFW_E_NO_MODEX_AVAILABLE ((HRESULT)0x80040238)
+#define VFW_E_NO_ADVISE_SET ((HRESULT)0x80040239)
+#define VFW_E_NO_FULLSCREEN ((HRESULT)0x8004023A)
+#define VFW_E_IN_FULLSCREEN_MODE ((HRESULT)0x8004023B)
+#define VFW_E_UNKNOWN_FILE_TYPE ((HRESULT)0x80040240)
+#define VFW_E_CANNOT_LOAD_SOURCE_FILTER ((HRESULT)0x80040241)
+#define VFW_E_FILE_TOO_SHORT ((HRESULT)0x80040243)
+#define VFW_E_INVALID_FILE_VERSION ((HRESULT)0x80040244)
+#define VFW_E_INVALID_CLSID ((HRESULT)0x80040247)
+#define VFW_E_INVALID_MEDIA_TYPE ((HRESULT)0x80040248)
+#define VFW_E_SAMPLE_TIME_NOT_SET ((HRESULT)0x80040249)
+#define VFW_E_MEDIA_TIME_NOT_SET ((HRESULT)0x80040251)
+#define VFW_E_NO_TIME_FORMAT_SET ((HRESULT)0x80040252)
+#define VFW_E_MONO_AUDIO_HW ((HRESULT)0x80040253)
+#define VFW_E_NO_DECOMPRESSOR ((HRESULT)0x80040255)
+#define VFW_E_NO_AUDIO_HARDWARE ((HRESULT)0x80040256)
+#define VFW_E_RPZA ((HRESULT)0x80040259)
+#define VFW_E_PROCESSOR_NOT_SUITABLE ((HRESULT)0x8004025B)
+#define VFW_E_UNSUPPORTED_AUDIO ((HRESULT)0x8004025C)
+#define VFW_E_UNSUPPORTED_VIDEO ((HRESULT)0x8004025D)
+#define VFW_E_MPEG_NOT_CONSTRAINED ((HRESULT)0x8004025E)
+#define VFW_E_NOT_IN_GRAPH ((HRESULT)0x8004025F)
+#define VFW_E_NO_TIME_FORMAT ((HRESULT)0x80040261)
+#define VFW_E_READ_ONLY ((HRESULT)0x80040262)
+#define VFW_E_BUFFER_UNDERFLOW ((HRESULT)0x80040264)
+#define VFW_E_UNSUPPORTED_STREAM ((HRESULT)0x80040265)
+#define VFW_E_NO_TRANSPORT ((HRESULT)0x80040266)
+#define VFW_E_BAD_VIDEOCD ((HRESULT)0x80040269)
+#define VFW_E_OUT_OF_VIDEO_MEMORY ((HRESULT)0x80040271)
+#define VFW_E_VP_NEGOTIATION_FAILED ((HRESULT)0x80040272)
+#define VFW_E_DDRAW_CAPS_NOT_SUITABLE ((HRESULT)0x80040273)
+#define VFW_E_NO_VP_HARDWARE ((HRESULT)0x80040274)
+#define VFW_E_NO_CAPTURE_HARDWARE ((HRESULT)0x80040275)
+#define VFW_E_DVD_OPERATION_INHIBITED ((HRESULT)0x80040276)
+#define VFW_E_DVD_INVALIDDOMAIN ((HRESULT)0x80040277)
+#define VFW_E_DVD_NO_BUTTON ((HRESULT)0x80040278)
+#define VFW_E_DVD_GRAPHNOTREADY ((HRESULT)0x80040279)
+#define VFW_E_DVD_RENDERFAIL ((HRESULT)0x8004027A)
+#define VFW_E_DVD_DECNOTENOUGH ((HRESULT)0x8004027B)
+#define VFW_E_DDRAW_VERSION_NOT_SUITABLE ((HRESULT)0x8004027C)
+#define VFW_E_COPYPROT_FAILED ((HRESULT)0x8004027D)
+#define VFW_E_TIME_EXPIRED ((HRESULT)0x8004027F)
+#define VFW_E_DVD_WRONG_SPEED ((HRESULT)0x80040281)
+#define VFW_E_DVD_MENU_DOES_NOT_EXIST ((HRESULT)0x80040282)
+#define VFW_E_DVD_CMD_CANCELLED ((HRESULT)0x80040283)
+#define VFW_E_DVD_STATE_WRONG_VERSION ((HRESULT)0x80040284)
+#define VFW_E_DVD_STATE_CORRUPT ((HRESULT)0x80040285)
+#define VFW_E_DVD_STATE_WRONG_DISC ((HRESULT)0x80040286)
+#define VFW_E_DVD_INCOMPATIBLE_REGION ((HRESULT)0x80040287)
+#define VFW_E_DVD_NO_ATTRIBUTES ((HRESULT)0x80040288)
+#define VFW_E_DVD_NO_GOUP_PGC ((HRESULT)0x80040289)
+#define VFW_E_DVD_LOW_PARENTAL_LEVEL ((HRESULT)0x8004028A)
+#define VFW_E_DVD_NOT_IN_KARAOKE_MODE ((HRESULT)0x8004028B)
+#define VFW_E_FRAME_STEP_UNSUPPORTED ((HRESULT)0x8004028E)
+#define VFW_E_DVD_STREAM_DISABLED ((HRESULT)0x8004028F)
+#define VFW_E_DVD_TITLE_UNKNOWN ((HRESULT)0x80040290)
+#define VFW_E_DVD_INVALID_DISC ((HRESULT)0x80040291)
+#define VFW_E_DVD_NO_RESUME_INFORMATION ((HRESULT)0x80040292)
+#define VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD ((HRESULT)0x80040293)
+#define VFW_E_PIN_ALREADY_BLOCKED ((HRESULT)0x80040294)
+#define VFW_E_CERTIFICATION_FAILURE ((HRESULT)0x80040295)
+#define VFW_E_VMR_NOT_IN_MIXER_MODE ((HRESULT)0x80040296)
+#define VFW_E_VMR_NO_AP_SUPPLIED ((HRESULT)0x80040297)
+#define VFW_E_VMR_NO_DEINTERLACE_HW ((HRESULT)0x80040298)
+#define VFW_E_DVD_VMR9_INCOMPATIBLEDEC ((HRESULT)0x8004029A)
+#define VFW_E_BAD_KEY ((HRESULT)0x800403F2)
+
+#ifndef E_PROP_ID_UNSUPPORTED
+#define E_PROP_ID_UNSUPPORTED ((HRESULT)0x80070490)
+#endif
+#ifndef E_PROP_SET_UNSUPPORTED
+#define E_PROP_SET_UNSUPPORTED ((HRESULT)0x80070492)
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl
new file mode 100644
index 00000000..acb6c11a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmr9.idl
@@ -0,0 +1,533 @@
+/*
+ * Copyright 2008 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+
+cpp_quote("#if 0")
+interface IDirect3DSurface9;
+interface IDirect3DDevice9;
+typedef LONGLONG REFERENCE_TIME;
+typedef DWORD D3DFORMAT;
+typedef DWORD D3DPOOL;
+typedef HANDLE HMONITOR;
+typedef struct { char dummy; } AM_MEDIA_TYPE;
+typedef struct { char dummy; } D3DCOLOR;
+cpp_quote("#endif")
+
+interface IVMRSurface9;
+interface IVMRSurfaceAllocator9;
+interface IVMRSurfaceAllocatorEx9;
+interface IVMRSurfaceAllocatorNotify9;
+interface IVMRImagePresenter9;
+interface IVMRImagePresenterConfig9;
+interface IVMRMonitorConfig9;
+interface IVMRWindowlessControl9;
+interface IVMRMixerControl9;
+interface IVMRImageCompositor9;
+interface IVMRMixerBitmap9;
+interface IVMRFilterConfig9;
+interface IVMRAspectRatioControl9;
+interface IVMRVideoStreamControl9;
+
+typedef enum _VMR9PresentationFlags
+{
+ VMR9Sample_SyncPoint = 0x1,
+ VMR9Sample_Preroll = 0x2,
+ VMR9Sample_Discontinuity = 0x4,
+ VMR9Sample_TimeValid = 0x8,
+ VMR9Sample_SrcDstRectsValid = 0x10
+} VMR9PresentationFlags;
+
+typedef struct _VMR9PresentationInfo
+{
+ DWORD dwFlags; /* Flags defined above */
+ IDirect3DSurface9 *lpSurf;
+ REFERENCE_TIME rtStart;
+ REFERENCE_TIME rtEnd;
+ SIZE szAspectRatio;
+ RECT rcSrc;
+ RECT rcDst;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} VMR9PresentationInfo;
+
+[
+ local,
+ object,
+ uuid(69188c61-12a3-40f0-8ffc-342e7b433fd7),
+ helpstring("IVMRImagePresenter9 interface"),
+ pointer_default(unique)
+]
+interface IVMRImagePresenter9 : IUnknown
+{
+ HRESULT StartPresenting([in] DWORD_PTR id);
+ HRESULT StopPresenting([in] DWORD_PTR id);
+ HRESULT PresentImage([in] DWORD_PTR id, [in] VMR9PresentationInfo *info);
+};
+
+typedef enum _VMR9SurfaceAllocationFlags
+{
+ VMR9AllocFlag_3DRenderTarget = 0x1,
+ VMR9AllocFlag_DXVATarget = 0x2,
+ VMR9AllocFlag_TextureSurface = 0x4,
+ VMR9AllocFlag_OffscreenSurface = 0x8,
+ VMR9AllocFlag_RGBDynamicSwitch = 0x10,
+ VMR9AllocFlag_UsageReserved = 0xe0,
+ VMR9AllocFlag_UsageMask = 0xff,
+} VMR9SurfaceAllocationFlags;
+
+typedef struct _VMR9AllocationInfo
+{
+ DWORD dwFlags; /* Flags defined above */
+ DWORD dwWidth;
+ DWORD dwHeight;
+ D3DFORMAT Format;
+ D3DPOOL Pool;
+ DWORD MinBuffers;
+ SIZE szAspectRatio;
+ SIZE szNativeSize;
+} VMR9AllocationInfo;
+
+[
+ local,
+ object,
+ uuid(8d5148ea-3f5d-46cf-9df1-d1b896eedb1f),
+ helpstring("IVMRSurfaceAllocator9 interface"),
+ pointer_default(unique)
+]
+interface IVMRSurfaceAllocator9 : IUnknown
+{
+ HRESULT InitializeDevice([in] DWORD_PTR id, [in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers);
+ HRESULT TerminateDevice([in] DWORD_PTR id);
+ HRESULT GetSurface([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface);
+ HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify9 *allocnotify);
+};
+
+[
+ local,
+ object,
+ uuid(6de9a68a-a928-4522-bf57-655ae3866456),
+ helpstring("IVMRSurfaceAllocatorEx9 interface"),
+ pointer_default(unique)
+]
+interface IVMRSurfaceAllocatorEx9 : IVMRSurfaceAllocator9
+{
+ HRESULT GetSurfaceEx([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface, [out] RECT *dest);
+};
+
+[
+ local,
+ object,
+ uuid(dca3f5df-bb3a-4d03-bd81-84614bfbfa0c),
+ helpstring("IVMRSurfaceAllocatorNotify9 interface"),
+ pointer_default(unique)
+]
+interface IVMRSurfaceAllocatorNotify9 : IUnknown
+{
+ HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator9 *alloc);
+ HRESULT SetD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);
+ HRESULT ChangeD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);
+ HRESULT AllocateSurfaceHelper([in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers, [out] IDirect3DSurface9 **surface);
+ HRESULT NotifyEvent([in] LONG code, [in] LONG_PTR param1, [in] LONG_PTR param2);
+};
+
+typedef enum _VMR9AspectRatioMode
+{
+ VMR9ARMode_None,
+ VMR9ARMode_LetterBox
+} VMR9AspectRatioMode;
+
+[
+ local,
+ object,
+ uuid(8f537d09-f85e-4414-b23b-502e54c79927),
+ helpstring("IVMRWindowlessControl interface"),
+ pointer_default(unique)
+]
+interface IVMRWindowlessControl9 : IUnknown
+{
+ HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *arwidth, [out] LONG *arheight);
+ HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);
+ HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);
+ HRESULT SetVideoPosition([in] const RECT *source, [in] const RECT *dest);
+ HRESULT GetVideoPosition([out] RECT *source, [out] RECT *dest);
+ HRESULT GetAspectRatioMode([out] DWORD *mode);
+ HRESULT SetAspectRatioMode([in] DWORD mode);
+ HRESULT SetVideoClippingWindow([in] HWND hwnd);
+ HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
+ HRESULT DisplayModeChanged();
+ HRESULT GetCurrentImage([out] BYTE **dib);
+ HRESULT SetBorderColor([in] COLORREF color);
+ HRESULT GetBorderColor([out] COLORREF *color);
+};
+
+typedef enum _VMR9MixerPrefs
+{
+ /* Decimation */
+ MixerPref9_NoDecimation = 0x1,
+ MixerPref9_DecimateOutput = 0x2,
+ MixerPref9_ARAdjustXorY = 0x4,
+ MixerPref9_NonSquareMixing = 0x8,
+ MixerPref9_DecimateMask = 0xf,
+
+ /* Filtering */
+ MixerPref9_BiLinearFiltering = 0x10,
+ MixerPref9_PointFiltering = 0x20,
+ MixerPref9_AnisotropicFiltering = 0x40,
+ MixerPref9_PyramidalQuadFiltering = 0x80,
+ MixerPref9_GaussianQuadFiltering = 0x100,
+ MixerPref9_FilteringReserved = 0xe00,
+ MixerPref9_FilteringMask = 0xff0,
+
+ /* Render target */
+ MixerPref9_RenderTargetRGB = 0x1000,
+ MixerPref9_RenderTargetYUV = 0x2000,
+ MixerPref9_RenderTargetReserved = 0xfc000,
+
+ MixerPref9_DynamicSwitchToBOB = 0x100000,
+ MixerPref9_DynamicDecimateBy2 = 0x200000,
+ MixerPref9_DynamicReserved = 0xc00000,
+ MixerPref9_DynamicMask = 0xf00000,
+} VMR9MixerPrefs;
+
+typedef struct _VMR9NormalizedRect
+{
+ FLOAT left;
+ FLOAT top;
+ FLOAT right;
+ FLOAT bottom;
+} VMR9NormalizedRect;
+
+typedef enum _VMR9ProcAmpControlFlags
+{
+ ProcAmpControl9_Brightness = 0x1,
+ ProcAmpControl9_Contrast = 0x2,
+ ProcAmpControl9_Hue = 0x4,
+ ProcAmpControl9_Saturation = 0x8,
+ ProcAmpControl9_Mask = 0xf
+} VMR9ProcAmpControlFlags;
+
+typedef struct _VMR9ProcAmpControl
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ FLOAT Brightness;
+ FLOAT Contrast;
+ FLOAT Hue;
+ FLOAT Saturation;
+} VMR9ProcAmpControl;
+
+typedef struct _VMR9ProcAmpControlRange
+{
+ DWORD dwSize;
+ VMR9ProcAmpControlFlags dwProperty;
+ FLOAT MinValue;
+ FLOAT MaxValue;
+ FLOAT DefaultValue;
+ FLOAT StepSize;
+} VMR9ProcAmpControlRange;
+
+[
+ local,
+ object,
+ uuid(1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b),
+ helpstring("IVMRMixerControl9 interface"),
+ pointer_default(unique)
+]
+interface IVMRMixerControl9 : IUnknown
+{
+ HRESULT SetAlpha([in] DWORD streamid, [in] FLOAT alpha);
+ HRESULT GetAlpha([in] DWORD streamid, [out] FLOAT *alpha);
+ HRESULT SetZOrder([in] DWORD streamid, [in] DWORD zorder);
+ HRESULT GetZOrder([in] DWORD streamid, [out] DWORD *zorder);
+ HRESULT SetOutputRect([in] DWORD streamid, [in] const VMR9NormalizedRect *rect);
+ HRESULT GetOutputRect([in] DWORD streamid, [out] VMR9NormalizedRect *rect);
+ HRESULT SetBackgroundClr([in] COLORREF back);
+ HRESULT GetBackgroundClr([out] COLORREF *back);
+ HRESULT SetMixingPrefs([in] DWORD mixingprefs);
+ HRESULT GetMixingPrefs([out] DWORD *mixingprefs);
+ HRESULT SetProcAmpControl([in] DWORD streamid, [in] VMR9ProcAmpControl *control);
+ HRESULT GetProcAmpControl([in] DWORD streamid, [in, out] VMR9ProcAmpControl *control);
+ HRESULT GetProcAmpControlRange([in] DWORD streamid, [in, out] VMR9ProcAmpControlRange *controlrange);
+};
+
+typedef struct _VMR9AlphaBitmap
+{
+ DWORD dwFlags;
+ HDC hdc;
+ IDirect3DSurface9 *pDDS;
+ RECT rSrc;
+ VMR9NormalizedRect *rDest;
+ FLOAT fAlpha;
+ COLORREF clrSrcKey;
+ DWORD dwFilterMode;
+} VMR9AlphaBitmap;
+
+typedef enum _VMR9AlphaBitmapFlags
+{
+ VMR9AlphaBitmap_Disable = 0x1,
+ VMR9AlphaBitmap_hDC = 0x2,
+ VMR9AlphaBitmap_EntireDDS = 0x4,
+ VMR9AlphaBitmap_SrcColorKey = 0x8,
+ VMR9AlphaBitmap_SrcRect = 0x10,
+ VMR9AlphaBitmap_FilterMode = 0x20
+} VMR9AlphaBitmapFlags;
+
+[
+ local,
+ object,
+ uuid(ced175e5-1935-4820-81bd-ff6ad00c9108),
+ helpstring("IVMRMixerBitmap interface"),
+ pointer_default(unique)
+]
+interface IVMRMixerBitmap9 : IUnknown
+{
+ HRESULT SetAlphaBitmap([in] const VMR9AlphaBitmap *bitmap);
+ HRESULT UpdateAlphaBitmapParameters([in] const VMR9AlphaBitmap *bitmap);
+ HRESULT GetAlphaBitmapParameters([out] VMR9AlphaBitmap *bitmap);
+};
+
+[
+ local,
+ object,
+ uuid(dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc),
+ helpstring("IVMRSurface interface"),
+ pointer_default(unique)
+]
+interface IVMRSurface9 : IUnknown
+{
+ HRESULT IsSurfaceLocked();
+ HRESULT LockSurface([out] BYTE **surface);
+ HRESULT UnlockSurface();
+ HRESULT GetSurface([out] IDirect3DSurface9 **surface);
+};
+
+typedef enum _VMR9RenderPrefs
+{
+ RenderPrefs9_DoNotRenderBorder = 0x1,
+ RenderPrefs9_Mask = 0x1
+} VMR9RenderPrefs;
+
+[
+ local,
+ object,
+ uuid(45c15cab-6e22-420a-8043-ae1f0ac02c7d),
+ helpstring("IVMRImagePresenterConfig9 interface"),
+ pointer_default(unique)
+]
+interface IVMRImagePresenterConfig9 : IUnknown
+{
+ HRESULT SetRenderingPrefs([in] DWORD renderflags);
+ HRESULT GetRenderingPrefs([out] DWORD *renderflags);
+};
+
+[
+ local,
+ object,
+ uuid(d0cfe38b-93e7-4772-8957-0400c49a4485),
+ helpstring("IVMRMixerStreamConfig interface"),
+ pointer_default(unique)
+]
+interface IVMRVideoStreamControl9: IUnknown
+{
+ HRESULT SetStreamActiveState([in] BOOL active);
+ HRESULT GetStreamActiveState([out] BOOL *active);
+};
+
+typedef enum _VMR9Mode
+{
+ VMR9Mode_Windowed = 0x1,
+ VMR9Mode_Windowless = 0x2,
+ VMR9Mode_Renderless = 0x4,
+ VMR9Mode_Mask = 0x7
+} VMR9Mode;
+
+[
+ local,
+ object,
+ uuid(5a804648-4f66-4867-9c43-4f5c822cf1b8),
+ helpstring("IVMRFilterConfig9 interface"),
+ pointer_default(unique)
+]
+interface IVMRFilterConfig9 : IUnknown
+{
+ HRESULT SetImageCompositor([in] IVMRImageCompositor9 *compositor);
+ HRESULT SetNumberOfStreams([in] DWORD max);
+ HRESULT GetNumberOfStreams([out] DWORD *max);
+ HRESULT SetRenderingPrefs([in] DWORD renderflags);
+ HRESULT GetRenderingPrefs([out] DWORD *renderflags);
+ HRESULT SetRenderingMode([in] DWORD mode);
+ HRESULT GetRenderingMode([out] DWORD *mode);
+};
+
+[
+ local,
+ object,
+ uuid(00d96c29-bbde-4efc-9901-bb5036392146),
+ helpstring("IVMRAspectRatioControl9 interface"),
+ pointer_default(unique)
+]
+interface IVMRAspectRatioControl9 : IUnknown
+{
+ HRESULT GetAspectRatioMode([out] DWORD *mode);
+ HRESULT SetAspectRatioMode([in] DWORD mode);
+}
+
+#define VMR9DEVICENAMELEN 32
+#define VMR9DEVICEDESCRIPTIONLEN 512
+
+typedef struct _VMR9MonitorInfo
+{
+ UINT uDevID;
+ RECT rcMonitor;
+ HMONITOR hMon;
+ DWORD dwFlags;
+ WCHAR szDevice[VMR9DEVICENAMELEN];
+ WCHAR szDescription[VMR9DEVICEDESCRIPTIONLEN];
+ LARGE_INTEGER liDriverVersion;
+ DWORD dwVendorId;
+ DWORD dwDeviceId;
+ DWORD dwSubSysId;
+ DWORD dwRevision;
+} VMR9MonitorInfo;
+
+[
+ local,
+ object,
+ uuid(46c2e457-8ba0-4eef-b80b-0680f0978749),
+ helpstring("IVMRMonitorConfig9 interface"),
+ pointer_default(unique)
+]
+interface IVMRMonitorConfig9 : IUnknown
+{
+ HRESULT SetMonitor([in] UINT uDev);
+ HRESULT GetMonitor([out] UINT *uDev);
+ HRESULT SetDefaultMonitor([in] UINT uDev);
+ HRESULT GetDefaultMonitor([out] UINT *uDev);
+ HRESULT GetAvailableMonitors([out, size_is(arraysize)] VMR9MonitorInfo *info, [in] DWORD arraysize, [out] DWORD *numdev);
+};
+
+typedef enum _VMR9DeinterlacePrefs
+{
+ DeinterlacePref9_NextBest = 0x1,
+ DeinterlacePref9_BOB = 0x2,
+ DeinterlacePref9_Weave = 0x4,
+ DeinterlacePref9_Mask = 0x7
+} VMR9DeinterlacePrefs;
+
+typedef enum _VMR9DeinterlaceTech
+{
+ DeinterlaceTech9_Unknown = 0,
+ DeinterlaceTech9_BOBLineReplicate = 0x1,
+ DeinterlaceTech9_BOBVerticalStretch = 0x2,
+ DeinterlaceTech9_MedianFiltering = 0x4,
+ DeinterlaceTech9_EdgeFiltering = 0x10,
+ DeinterlaceTech9_FieldAdaptive = 0x20,
+ DeinterlaceTech9_PixelAdaptive = 0x40,
+ DeinterlaceTech9_MotionVectorSteered = 0x80
+} VMR9DeinterlaceTech;
+
+typedef struct _VMR9Frequency
+{
+ DWORD dwNumerator;
+ DWORD dwDenominator;
+} VMR9Frequency;
+
+typedef enum _VMR9_SampleFormat
+{
+ VMR9_SampleReserved = 1,
+ VMR9_SampleProgressiveFrame = 2,
+ VMR9_SampleFieldInterleavedEvenFirst = 3,
+ VMR9_SampleFieldInterleavedOddFirst = 4,
+ VMR9_SampleFieldSingleEven = 5,
+ VMR9_SampleFieldSingleOdd = 6,
+} VMR9_SampleFormat;
+
+typedef struct _VMR9VideoDesc
+{
+ DWORD dwSize;
+ DWORD dwSampleWidth;
+ DWORD dwSampleHeight;
+ VMR9_SampleFormat SampleFormat;
+ DWORD dwFourCC;
+ VMR9Frequency InputSampleFreq;
+ VMR9Frequency OutputFrameFreq;
+} VMR9VideoDesc;
+
+typedef struct _VMR9DeinterlaceCaps {
+ DWORD dwSize;
+ DWORD dwNumPreviousOutputFrames;
+ DWORD dwNumForwardRefSamples;
+ DWORD dwNumBackwardRefSamples;
+ VMR9DeinterlaceTech DeinterlaceTechnology;
+} VMR9DeinterlaceCaps;
+
+[
+ local,
+ object,
+ uuid(a215fb8d-13c2-4f7f-993c-003d6271a459),
+ helpstring("IVMRDeinterlaceControl9 interface"),
+ pointer_default(unique)
+]
+interface IVMRDeinterlaceControl9 : IUnknown
+{
+ HRESULT GetNumberOfDeinterlaceModes([in] VMR9VideoDesc *desc, [in, out] DWORD *nummodes, [out] GUID *modes);
+ HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMR9VideoDesc *desc, [out] VMR9DeinterlaceCaps *caps);
+ HRESULT GetDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);
+ HRESULT SetDeinterlaceMode([in] DWORD streamid, [in] GUID *mode);
+ HRESULT GetDeinterlacePrefs([out] DWORD *prefs);
+ HRESULT SetDeinterlacePrefs([in] DWORD prefs);
+ HRESULT GetActualDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);
+};
+
+typedef struct _VMR9VideoStreamInfo {
+ IDirect3DSurface9 *pddsVideoSurface;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwStrmID;
+ FLOAT fAlpha;
+ VMR9NormalizedRect rNormal;
+ REFERENCE_TIME rtStart;
+ REFERENCE_TIME rtEnd;
+ VMR9_SampleFormat SampleFormat;
+} VMR9VideoStreamInfo;
+
+[
+ local,
+ object,
+ uuid(4a5c89eb-df51-4654-ac2a-e48e02bbabf6),
+ helpstring("IVMRImageCompositor9 interface"),
+ pointer_default(unique)
+]
+interface IVMRImageCompositor9 : IUnknown
+{
+ HRESULT InitCompositionDevice([in] IUnknown *d3ddev);
+ HRESULT TermCompositionDevice([in] IUnknown *d3ddev);
+ HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirect3DSurface9 *d3dtarget, [in] AM_MEDIA_TYPE *mttarget,
+ [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop, D3DCOLOR back,
+ [in] VMR9VideoStreamInfo *info, [in] UINT streams);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl
new file mode 100644
index 00000000..0a79f021
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vmrender.idl
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 2008 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("#if 0")
+typedef DWORD IDirectDrawSurface7;
+typedef DWORD IDirectDraw7;
+typedef DWORD *LPBITMAPINFOHEADER;
+typedef DWORD *LPDDPIXELFORMAT;
+typedef struct { DWORD dw1, dw2; } DDCOLORKEY;
+cpp_quote("#endif")
+cpp_quote("#include <ddraw.h>")
+
+interface IVMRSurface;
+interface IVMRSurfaceAllocator;
+interface IVMRSurfaceAllocatorNotify;
+interface IVMRImagePresenter;
+interface IVMRImagePresenterNotify;
+interface IVMRWindowlessControl;
+interface IVMRMixerControl;
+interface IVMRMixerBitmap;
+interface IVMRFilterConfig;
+interface IVMRAspectRatioControl;
+interface IVMRDeinterlaceControl;
+interface IVMRMonitorConfig;
+interface IVMRImageCompositor;
+interface IVMRVideoStreamControl;
+
+typedef enum _VMRPresentationFlags
+{
+ VMRSample_SyncPoint = 0x01,
+ VMRSample_Preroll = 0x02,
+ VMRSample_Discontinuity = 0x04,
+ VMRSample_TimeValid = 0x08,
+ VMRSample_SrcDstRectsValid = 0x10
+} VMRPresentationFlags;
+
+typedef struct tagVMRPRESENTATIONINFO
+{
+ DWORD dwFlags;
+ IDirectDrawSurface7 *lpSurf;
+ REFERENCE_TIME rtStart, rtEnd;
+ SIZE szAspectRatio;
+ RECT rcSrc, rcDst;
+ DWORD dwTypeSpecificFlags;
+ DWORD dwInterlaceFlags;
+} VMRPRESENTATIONINFO;
+
+[
+ local,
+ object,
+ uuid(ce704fe7-e71e-41fb-baa2-c4403e1182f5),
+ helpstring("IVMRImagePresenter interface"),
+ pointer_default(unique)
+]
+interface IVMRImagePresenter : IUnknown
+{
+ HRESULT StartPresenting([in] DWORD_PTR id);
+ HRESULT StopPresenting([in] DWORD_PTR id);
+ HRESULT PresentImage([in] DWORD_PTR id, [in] VMRPRESENTATIONINFO *info);
+};
+
+typedef enum _VMRSurfaceAllocationFlags
+{
+ AMAP_PIXELFORMAT_VALID = 0x01,
+ AMAP_3D_TARGET = 0x02,
+ AMAP_ALLOW_SYSMEM = 0x04,
+ AMAP_FORCE_SYSMEM = 0x08,
+ AMAP_DIRECTED_FLIP = 0x10,
+ AMAP_DXVA_TARGET = 0x20
+} VMRSurfaceAllocationFlags;
+
+typedef struct tagVMRALLOCATIONINFO
+{
+ DWORD dwFlags;
+ LPBITMAPINFOHEADER lpHdr;
+ LPDDPIXELFORMAT lpPixFmt;
+ SIZE szAspectRatio;
+ DWORD dwMinBuffers;
+ DWORD dwMaxBuffers;
+ DWORD dwInterlaceFlags;
+ SIZE szNativeSize;
+} VMRALLOCATIONINFO;
+
+[
+ local,
+ object,
+ uuid(31ce832e-4484-458b-8cca-f4d7e3db0b52),
+ helpstring("IVMRSurfaceAllocator interface"),
+ pointer_default(unique)
+]
+interface IVMRSurfaceAllocator : IUnknown
+{
+ HRESULT AllocateSurface([in] DWORD_PTR id, [in] VMRALLOCATIONINFO *allocinfo, [in, out] DWORD *buffers, IDirectDrawSurface7 **surface);
+ HRESULT FreeSurface([in] DWORD_PTR id);
+ HRESULT PrepareSurface([in] DWORD_PTR id, [in] IDirectDrawSurface7 *surface, [in] DWORD dwSurfaceFlags);
+ HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify *notify);
+};
+
+[
+ local,
+ object,
+ uuid(aada05a8-5a4e-4729-af0b-cea27aed51e2),
+ helpstring("IVMRSurfaceAllocatorNotify interface"),
+ pointer_default(unique)
+]
+interface IVMRSurfaceAllocatorNotify : IUnknown
+{
+ HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator *allocator);
+ HRESULT SetDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor);
+ HRESULT ChangeDDrawDevice([in] IDirectDraw7 *device, [in] HMONITOR monitor);
+ HRESULT RestoreDDrawSurfaces();
+ HRESULT NotifyEvent([in] LONG EventCode, [in] LONG_PTR p1, [in] LONG_PTR p2);
+ HRESULT SetBorderColor([in] COLORREF border);
+};
+
+typedef enum _VMR_ASPECT_RATIO_MODE
+{
+ VMR_ARMODE_NONE,
+ VMR_ARMODE_LETTER_BOX
+} VMR_ASPECT_RATIO_MODE;
+
+[
+ local,
+ object,
+ uuid(0eb1088c-4dcd-46f0-878f-39dae86a51b7),
+ helpstring("IVMRWindowlessControl interface"),
+ pointer_default(unique)
+]
+interface IVMRWindowlessControl : IUnknown
+{
+ HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *ar_width, [out] LONG *ar_height);
+ HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);
+ HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);
+ HRESULT SetVideoPosition([in] const RECT *src_rect, [in] const RECT *dst_rect);
+ HRESULT GetVideoPosition([out] RECT *src_rect, [out] RECT *dst_rect);
+ HRESULT GetAspectRatioMode([out] DWORD *mode);
+ HRESULT SetAspectRatioMode([in] DWORD mode);
+ HRESULT SetVideoClippingWindow([in] HWND hwnd);
+ HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
+ HRESULT DisplayModeChanged();
+ HRESULT GetCurrentImage([out] BYTE **data);
+ HRESULT SetBorderColor([in] COLORREF border);
+ HRESULT GetBorderColor([out] COLORREF *border);
+ HRESULT SetColorKey([in] COLORREF key);
+ HRESULT GetColorKey([out] COLORREF *key);
+};
+
+typedef enum _VMRMixerPrefs
+{
+ MixerPref_NoDecimation = 0x0001,
+ MixerPref_DecimateOutput = 0x0002,
+ MixerPref_ARAdjustXorY = 0x0004,
+ MixerPref_DecimationReserved = 0x0008,
+ MixerPref_DecimateMask = 0x000f,
+
+ MixerPref_BiLinearFiltering = 0x0010,
+ MixerPref_PointFiltering = 0x0020,
+ MixerPref_FinteringMask = 0x00f0,
+
+ MixerPref_RenderTargetRGB = 0x0100,
+ MixerPref_RenderTargetYUV = 0x1000,
+ MixerPref_RenderTargetYUV420 = 0x0200,
+ MixerPref_RenderTargetYUV422 = 0x0400,
+ MixerPref_RenderTargetYUV444 = 0x0800,
+ MixerPref_RenderTargetReserved = 0xe000,
+ MixerPref_RenderTargetMask = 0xff00,
+
+ MixerPref_DynamicSwitchToBOB = 0x10000,
+ MixerPref_DynamicDecimateBy2 = 0x20000,
+ MixerPref_DynamicReserved = 0xc0000,
+ MixerPref_DynamicMask = 0xf0000
+} VMRMixerPrefs;
+
+typedef struct _NORMALIZEDRECT
+{
+ FLOAT left, top, right, bottom;
+} NORMALIZEDRECT;
+
+[
+ local,
+ object,
+ uuid(1c1a17b0-bed0-415d-974b-dc6696131599),
+ helpstring("IVMRMixerControl interface"),
+ pointer_default(unique)
+]
+interface IVMRMixerControl : IUnknown
+{
+ HRESULT SetAlpha([in] DWORD id, [in] FLOAT alpha);
+ HRESULT GetAlpha([in] DWORD id, [out] FLOAT *alpha);
+ HRESULT SetZOrder([in] DWORD id, [in] DWORD z);
+ HRESULT GetZOrder([in] DWORD id, [out] DWORD *z);
+ HRESULT SetOutputRect([in] DWORD id, [in] const NORMALIZEDRECT *rect);
+ HRESULT SetBackgroundClr([in] COLORREF background);
+ HRESULT GetBackgroundClr([out] COLORREF *background);
+ HRESULT SetMixingPrefs([in] DWORD prefs);
+ HRESULT GetMixingPrefs([out] DWORD *prefs);
+};
+
+typedef struct tagVMRGUID
+{
+ struct _GUID *pGUID, GUID;
+} VMRGUID;
+
+#define VMRDEVICENAMELEN 32
+#define VMRDEVICEDESCRIPTIONLEN 256
+
+typedef struct tagVMRMONITORINFO
+{
+ VMRGUID guid;
+ RECT rcMonitor;
+ HMONITOR hMon;
+ DWORD dwFlags;
+ WCHAR szDevice[VMRDEVICENAMELEN];
+ WCHAR szDescription[VMRDEVICEDESCRIPTIONLEN];
+ LARGE_INTEGER liDriverVersion;
+ DWORD dwVendorId;
+ DWORD dwDeviceId;
+ DWORD dwSubSysId;
+ DWORD dwRevision;
+} VMRMONITORINFO;
+
+[
+ local,
+ object,
+ uuid(9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce),
+ helpstring("IVMRMonitorConfig interface"),
+ pointer_default(unique)
+]
+interface IVMRMonitorConfig : IUnknown
+{
+ HRESULT SetMonitor([in] const VMRGUID *vmrguid);
+ HRESULT GetMonitor([out] VMRGUID *vmrguid);
+ HRESULT SetDefaultMonitor([in] const VMRGUID *vmrguid);
+ HRESULT GetDefaultMonitor([out] VMRGUID *vmrguid);
+ HRESULT GetAvailableMonitors([out, size_is(array_size)] VMRMONITORINFO *info, [in] DWORD array_size, [out] DWORD *retrieved);
+}
+
+typedef enum _VMRRenderPrefs
+{
+ RenderPrefs_RestrictToInitialMonitor = 0x00,
+ RenderPrefs_ForceOffScreen = 0x01,
+ RenderPrefs_ForceOverlays = 0x02,
+ RenderPrefs_AllowOverlays = 0x00,
+ RenderPrefs_AllowOffscreen = 0x00,
+ RenderPrefs_DoNotRenderColorKeyAndBorder = 0x08,
+ RenderPrefs_Reserved = 0x10,
+ RenderPrefs_PreferAGPMemWhenMixing = 0x20,
+ RenderPrefs_Mask = 0x3f
+} VMRRenderPrefs;
+
+typedef enum _VMRMode
+{
+ VMRMode_Windowed = 0x1,
+ VMRMode_Windowless = 0x2,
+ VMRMode_Renderless = 0x4,
+ VMRMode_Mask = 0x7
+} VMRMode;
+
+enum { MAX_NUMBER_OF_STREAMS = 16 };
+
+[
+ local,
+ object,
+ uuid(9e5530c5-7034-48b4-bb46-0b8a6efc8e36),
+ helpstring("IVMRFilterConfig interface"),
+ pointer_default(unique)
+]
+interface IVMRFilterConfig : IUnknown
+{
+ HRESULT SetImageCompositor([in] IVMRImageCompositor *compositor);
+ HRESULT SetNumberOfStreams([in] DWORD streams);
+ HRESULT GetNumberOfStreams([out] DWORD *streams);
+ HRESULT SetRenderingPrefs([in] DWORD prefs);
+ HRESULT GetRenderingPrefs([out] DWORD *prefs);
+ HRESULT SetRenderingMode([in] DWORD mode);
+ HRESULT GetRenderingMode([out] DWORD *mode);
+};
+
+[
+ local,
+ object,
+ uuid(ede80b5c-bad6-4623-b537-65586c9f8dfd),
+ helpstring("IVMRAspectRatioControl interface"),
+ pointer_default(unique)
+]
+interface IVMRAspectRatioControl : IUnknown
+{
+ HRESULT GetAspectRatioMode([out] DWORD *armode);
+ HRESULT SetAspectRatioMode([in] DWORD armode);
+};
+
+typedef enum _VMRDeinterlacePrefs
+{
+ DeinterlacePref_NextBest = 0x1,
+ DeinterlacePref_BOB = 0x2,
+ DeinterlacePref_Weave = 0x4,
+ DeinterlacePref_Mask = 0x7
+} VMRDeinterlacePrefs;
+
+typedef enum _VMRDeinterlaceTech
+{
+ DeinterlaceTech_Unknown = 0x00,
+ DeinterlaceTech_BOBLineReplicate = 0x01,
+ DeinterlaceTech_BOBVerticalStretch = 0x02,
+ DeinterlaceTech_MedianFiltering = 0x04,
+ DeinterlaceTech_EdgeFiltering = 0x08,
+ DeinterlaceTech_FieldAdaptive = 0x10,
+ DeinterlaceTech_PixelAdaptive = 0x20,
+ DeinterlaceTech_MotionVectorSteered = 0x80
+} VMRDeinterlaceTech;
+
+typedef struct _VMRFrequency
+{
+ DWORD dwNumerator, dwDenominator;
+} VMRFrequency;
+
+typedef struct _VMRVideoDesc
+{
+ DWORD dwSize;
+ DWORD dwSampleWidth;
+ DWORD dwSampleHeight;
+ BOOL SingleFieldPerSample;
+ DWORD dwFourCC;
+ VMRFrequency InputSampleFreq;
+ VMRFrequency OutputFrameFreq;
+} VMRVideoDesc;
+
+typedef struct _VMRDeinterlaceCaps
+{
+ DWORD dwSize;
+ DWORD dwNumPreviousOutputFrames;
+ DWORD dwNumForwardRefSamples;
+ DWORD dwNumBackwardRefSamples;
+ VMRDeinterlaceTech DeinterlaceTechnology;
+} VMRDeinterlaceCaps;
+
+[
+ local,
+ object,
+ uuid(bb057577-0db8-4e6a-87a7-1a8c9a505a0f),
+ helpstring("IVMRDeinterlaceControl interface"),
+ pointer_default(unique)
+]
+interface IVMRDeinterlaceControl : IUnknown
+{
+ HRESULT GetNumberOfDeinterlaceModes([in] VMRVideoDesc *desc, [in, out] DWORD *num_modes, [out] GUID *modes);
+ HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMRVideoDesc *desc, [in, out] VMRDeinterlaceCaps *caps);
+ HRESULT GetDeinterlaceMode([in] DWORD id, [out] GUID *mode);
+ HRESULT SetDeinterlaceMode([in] DWORD id, [in] GUID *mode);
+ HRESULT GetDeinterlacePrefs([out] DWORD *prefs);
+ HRESULT SetDeinterlacePrefs([in] DWORD prefs);
+ HRESULT GetActualDeinterlaceMode([in] DWORD id, [out] GUID *mode);
+};
+
+typedef struct _VMRALPHABITMAP
+{
+ DWORD dwFlags;
+ HDC hdc;
+ IDirectDrawSurface7 *pDDS;
+ RECT rSrc;
+ RECT rDest;
+ FLOAT fAlpha;
+ COLORREF clrSrcKey;
+} VMRALPHABITMAP, *PVMRALPHABITMAP;
+
+cpp_quote("#define VMRBITMAP_DISABLE (0x01)")
+cpp_quote("#define VMRBITMAP_HDC (0x02)")
+cpp_quote("#define VMRBITMAP_ENTIREDDS (0x04)")
+cpp_quote("#define VMRBITMAP_SRCCOLORKEY (0x08)")
+cpp_quote("#define VMRBITMAP_SRCRECT (0x10)")
+
+[
+ local,
+ object,
+ uuid(1e673275-0257-40aa-af20-7c608d4a0428),
+ helpstring("IVMRMixerBitmap interface"),
+ pointer_default(unique)
+]
+interface IVMRMixerBitmap : IUnknown
+{
+ HRESULT SetAlphaBitmap([in] const VMRALPHABITMAP *params);
+ HRESULT UpdateAlphaBitmapParameters([in] VMRALPHABITMAP *params);
+ HRESULT GetAlphaBitmapParameters([out] VMRALPHABITMAP *params);
+};
+
+typedef struct _VMRVIDEOSTREAMINFO
+{
+ IDirectDrawSurface7 *pddsVideoSurface;
+ DWORD dwWidth;
+ DWORD dwHeight;
+ DWORD dwStrmID;
+ FLOAT fAlpha;
+ DDCOLORKEY ddClrKey;
+ NORMALIZEDRECT rNormal;
+} VMRVIDEOSTREAMINFO;
+
+[
+ local,
+ object,
+ uuid(7a4fb5af-479f-4074-bb40-ce6722e43c82),
+ helpstring("IVMRImageCompositor interface"),
+ pointer_default(unique)
+]
+interface IVMRImageCompositor : IUnknown
+{
+ HRESULT InitCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget);
+ HRESULT TermCompositionTarget([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget);
+ HRESULT SetStreamMediaType([in] DWORD id, [in] AM_MEDIA_TYPE *pmt, [in] BOOL texture);
+ HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirectDrawSurface7 *rendertarget,
+ [in] AM_MEDIA_TYPE *pmt, [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop,
+ [in] DWORD backgrnd, [in] VMRVIDEOSTREAMINFO *info, [in] UINT streams);
+};
+
+[
+ local,
+ object,
+ uuid(058d1f11-2a54-4bef-bd54-df706626b727),
+ helpstring("IVMRVideoStreamControl interface"),
+ pointer_default(unique)
+]
+interface IVMRVideoStreamControl : IUnknown
+{
+ HRESULT SetColorKey([in] DDCOLORKEY *key);
+ HRESULT GetColorKey([out] DDCOLORKEY *key);
+ HRESULT SetStreamActiveState([in] BOOL active);
+ HRESULT GetStreamActiveState([out] BOOL *active);
+};
+
+[
+ local,
+ object,
+ uuid(9f3a1c85-8555-49ba-935f-be5b5b29d178),
+ helpstring("IVMRImagePresenterConfig interface"),
+ pointer_default(unique)
+]
+interface IVMRImagePresenterConfig : IUnknown
+{
+ HRESULT SetRenderingPrefs([in] DWORD prefs);
+ HRESULT GetRenderingPrefs([out] DWORD *prefs);
+};
+
+[
+ local,
+ object,
+ uuid(e6f7ce40-4673-44f1-8f77-5499d68cb4ea),
+ helpstring("IVMRImagePresenterExclModeConfig interface"),
+ pointer_default(unique)
+]
+interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
+{
+ HRESULT SetXlcModeDDObjAndPrimarySurface([in] IDirectDraw7 *dddev, [in] IDirectDrawSurface7 *ddsurface);
+ HRESULT GetXlcModeDDObjAndPrimarySurface([out] IDirectDraw7 **dddev, [out] IDirectDrawSurface7 **ddsurface);
+};
+
+[
+ local,
+ object,
+ uuid(aac18c18-e186-46d2-825d-a1f8dc8e395a),
+ helpstring("IVPManager interface"),
+ pointer_default(unique)
+]
+interface IVPManager : IUnknown
+{
+ HRESULT SetVideoPortIndex([in] DWORD index);
+ HRESULT GetVideoPortIndex([out] DWORD *index);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h
new file mode 100644
index 00000000..91a25051
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vsstyle.h
@@ -0,0 +1,1748 @@
+/*
+ * Copyright (C) 2011 Piotr Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __VSSTYLE_H__
+#define __VSSTYLE_H__
+
+
+#define TMTVS_RESERVEDLOW 100000
+#define TMTVS_RESERVEDHIGH 19999
+
+/* AEROWIZARDSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_AEROWIZARDSTYLE (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0}
+#define VSCLASS_AEROWIZARD (const WCHAR []){'A','E','R','O','W','I','Z','A','R','D',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_AEROWIZARDSTYLE L"AEROWIZARDSTYLE"
+#define VSCLASS_AEROWIZARD L"AEROWIZARD"
+#else
+static const WCHAR VSCLASS_AEROWIZARDSTYLE[] = {'A','E','R','O','W','I','Z','A','R','D','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_AEROWIZARD [] = {'A','E','R','O','W','I','Z','A','R','D',0};
+#endif
+
+enum AEROWIZARDPARTS {
+ AW_TITLEBAR = 1,
+ AW_HEADERAREA = 2,
+ AW_CONTENTAREA = 3,
+ AW_COMMANDAREA = 4,
+ AW_BUTTON = 5,
+};
+
+#define AEROWIZARDSTYLEPARTS AEROWIZARDPARTS;
+
+enum TITLEBARSTATES {
+ AW_S_TITLEBAR_ACTIVE = 1,
+ AW_S_TITLEBAR_INACTIVE = 2,
+};
+
+enum HEADERAREASTATES {
+ AW_S_HEADERAREA_NOMARGIN = 1,
+};
+
+enum CONTENTAREASTATES {
+ AW_S_CONTENTAREA_NOMARGIN = 1,
+};
+
+/* BUTTONSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_BUTTONSTYLE (const WCHAR []){'B','U','T','T','O','N','S','T','Y','L','E',0}
+#define VSCLASS_BUTTON (const WCHAR []){'B','U','T','T','O','N',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_BUTTONSTYLE L"BUTTONSTYLE"
+#define VSCLASS_BUTTON L"BUTTON"
+#else
+static const WCHAR VSCLASS_BUTTONSTYLE [] = {'B','U','T','T','O','N','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_BUTTON [] = {'B','U','T','T','O','N',0};
+#endif
+
+enum BUTTONPARTS {
+ BP_PUSHBUTTON = 1,
+ BP_RADIOBUTTON = 2,
+ BP_CHECKBOX = 3,
+ BP_GROUPBOX = 4,
+ BP_USERBUTTON = 5,
+ BP_COMMANDLINK = 6,
+ BP_COMMANDLINKGLYPH = 7,
+};
+
+#define BUTTONSTYLEPARTS BUTTONPARTS;
+
+enum PUSHBUTTONSTATES {
+ PBS_NORMAL = 1,
+ PBS_HOT = 2,
+ PBS_PRESSED = 3,
+ PBS_DISABLED = 4,
+ PBS_DEFAULTED = 5,
+ PBS_DEFAULTED_ANIMATING = 6,
+};
+
+enum RADIOBUTTONSTATES {
+ RBS_UNCHECKEDNORMAL = 1,
+ RBS_UNCHECKEDHOT = 2,
+ RBS_UNCHECKEDPRESSED = 3,
+ RBS_UNCHECKEDDISABLED = 4,
+ RBS_CHECKEDNORMAL = 5,
+ RBS_CHECKEDHOT = 6,
+ RBS_CHECKEDPRESSED = 7,
+ RBS_CHECKEDDISABLED = 8,
+};
+
+enum CHECKBOXSTATES {
+ CBS_UNCHECKEDNORMAL = 1,
+ CBS_UNCHECKEDHOT = 2,
+ CBS_UNCHECKEDPRESSED = 3,
+ CBS_UNCHECKEDDISABLED = 4,
+ CBS_CHECKEDNORMAL = 5,
+ CBS_CHECKEDHOT = 6,
+ CBS_CHECKEDPRESSED = 7,
+ CBS_CHECKEDDISABLED = 8,
+ CBS_MIXEDNORMAL = 9,
+ CBS_MIXEDHOT = 10,
+ CBS_MIXEDPRESSED = 11,
+ CBS_MIXEDDISABLED = 12,
+ CBS_IMPLICITNORMAL = 13,
+ CBS_IMPLICITHOT = 14,
+ CBS_IMPLICITPRESSED = 15,
+ CBS_IMPLICITDISABLED = 16,
+ CBS_EXCLUDEDNORMAL = 17,
+ CBS_EXCLUDEDHOT = 18,
+ CBS_EXCLUDEDPRESSED = 19,
+ CBS_EXCLUDEDDISABLED = 20,
+};
+
+enum GROUPBOXSTATES {
+ GBS_NORMAL = 1,
+ GBS_DISABLED = 2,
+};
+
+enum COMMANDLINKSTATES {
+ CMDLS_NORMAL = 1,
+ CMDLS_HOT = 2,
+ CMDLS_PRESSED = 3,
+ CMDLS_DISABLED = 4,
+ CMDLS_DEFAULTED = 5,
+ CMDLS_DEFAULTED_ANIMATING = 6,
+};
+
+enum COMMANDLINKGLYPHSTATES {
+ CMDLGS_NORMAL = 1,
+ CMDLGS_HOT = 2,
+ CMDLGS_PRESSED = 3,
+ CMDLGS_DISABLED = 4,
+ CMDLGS_DEFAULTED = 5,
+};
+
+/* COMBOBOXSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_COMBOBOXSTYLE (const WCHAR []){'C','O','M','B','O','B','O','X','S','T','Y','L','E',0}
+#define VSCLASS_COMBOBOX (const WCHAR []){'C','O','M','B','O','B','O','X',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_COMBOBOXSTYLE L"COMBOBOXSTYLE"
+#define VSCLASS_COMBOBOX L"COMBOBOX"
+#else
+static const WCHAR VSCLASS_COMBOBOXSTYLE [] = {'C','O','M','B','O','B','O','X','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_COMBOBOX [] = {'C','O','M','B','O','B','O','X',0};
+#endif
+
+enum COMBOBOXPARTS {
+ CP_DROPDOWNBUTTON = 1,
+ CP_BACKGROUND = 2,
+ CP_TRANSPARENTBACKGROUND = 3,
+ CP_BORDER = 4,
+ CP_READONLY = 5,
+ CP_DROPDOWNBUTTONRIGHT = 6,
+ CP_DROPDOWNBUTTONLEFT = 7,
+ CP_CUEBANNER = 8,
+};
+
+#define COMBOBOXSTYLEPARTS COMBOBOXPARTS;
+
+enum COMBOBOXSTYLESTATES {
+ CBXS_NORMAL = 1,
+ CBXS_HOT = 2,
+ CBXS_PRESSED = 3,
+ CBXS_DISABLED = 4,
+};
+
+enum DROPDOWNBUTTONRIGHTSTATES {
+ CBXSR_NORMAL = 1,
+ CBXSR_HOT = 2,
+ CBXSR_PRESSED = 3,
+ CBXSR_DISABLED = 4,
+};
+
+enum DROPDOWNBUTTONLEFTSTATES {
+ CBXSL_NORMAL = 1,
+ CBXSL_HOT = 2,
+ CBXSL_PRESSED = 3,
+ CBXSL_DISABLED = 4,
+};
+
+enum TRANSPARENTBACKGROUNDSTATES {
+ CBTBS_NORMAL = 1,
+ CBTBS_HOT = 2,
+ CBTBS_DISABLED = 3,
+ CBTBS_FOCUSED = 4,
+};
+
+enum BORDERSTATES {
+ CBB_NORMAL = 1,
+ CBB_HOT = 2,
+ CBB_FOCUSED = 3,
+ CBB_DISABLED = 4,
+};
+
+enum READONLYSTATES {
+ CBRO_NORMAL = 1,
+ CBRO_HOT = 2,
+ CBRO_PRESSED = 3,
+ CBRO_DISABLED = 4,
+};
+
+enum CUEBANNERSTATES {
+ CBCB_NORMAL = 1,
+ CBCB_HOT = 2,
+ CBCB_PRESSED = 3,
+ CBCB_DISABLED = 4,
+};
+
+/* COMMUNICATIONSSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_COMMUNICATIONSSTYLE (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0}
+#define VSCLASS_COMMUNICATIONS (const WCHAR []){'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_COMMUNICATIONSSTYLE L"COMMUNICATIONSSTYLE"
+#define VSCLASS_COMMUNICATIONS L"COMMUNICATIONS"
+#else
+static const WCHAR VSCLASS_COMMUNICATIONSSTYLE [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_COMMUNICATIONS [] = {'C','O','M','M','U','N','I','C','A','T','I','O','N','S',0};
+#endif
+
+enum COMMUNICATIONSPARTS {
+ CSST_TAB = 1,
+};
+
+#define COMMUNICATIONSSTYLEPARTS COMMUNICATIONSPARTS;
+
+enum TABSTATES {
+ CSTB_NORMAL = 1,
+ CSTB_HOT = 2,
+ CSTB_SELECTED = 3,
+};
+
+/* CONTROLPANELSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_CONTROLPANELSTYLE (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0}
+#define VSCLASS_CONTROLPANEL (const WCHAR []){'C','O','N','T','R','O','L','P','A','N','E','L',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_CONTROLPANELSTYLE L"CONTROLPANELSTYLE"
+#define VSCLASS_CONTROLPANEL L"CONTROLPANEL"
+#else
+static const WCHAR VSCLASS_CONTROLPANELSTYLE [] = {'C','O','N','T','R','O','L','P','A','N','E','L','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_CONTROLPANEL [] = {'C','O','N','T','R','O','L','P','A','N','E','L',0};
+#endif
+
+enum CONTROLPANELPARTS {
+ CPANEL_NAVIGATIONPANE = 1,
+ CPANEL_CONTENTPANE = 2,
+ CPANEL_NAVIGATIONPANELABEL = 3,
+ CPANEL_CONTENTPANELABEL = 4,
+ CPANEL_TITLE = 5,
+ CPANEL_BODYTEXT = 6,
+ CPANEL_HELPLINK = 7,
+ CPANEL_TASKLINK = 8,
+ CPANEL_GROUPTEXT = 9,
+ CPANEL_CONTENTLINK = 10,
+ CPANEL_SECTIONTITLELINK = 11,
+ CPANEL_LARGECOMMANDAREA = 12,
+ CPANEL_SMALLCOMMANDAREA = 13,
+ CPANEL_BUTTON = 14,
+ CPANEL_MESSAGETEXT = 15,
+ CPANEL_NAVIGATIONPANELINE = 16,
+ CPANEL_CONTENTPANELINE = 17,
+ CPANEL_BANNERAREA = 18,
+ CPANEL_BODYTITLE = 19,
+};
+
+#define CONTROLPANELSTYLEPARTS CONTROLPANELPARTS;
+
+enum HELPLINKSTATES {
+ CPHL_NORMAL = 1,
+ CPHL_HOT = 2,
+ CPHL_PRESSED = 3,
+ CPHL_DISABLED = 4,
+};
+
+enum TASKLINKSTATES {
+ CPTL_NORMAL = 1,
+ CPTL_HOT = 2,
+ CPTL_PRESSED = 3,
+ CPTL_DISABLED = 4,
+ CPTL_PAGE = 5,
+};
+
+enum CONTENTLINKSTATES {
+ CPCL_NORMAL = 1,
+ CPCL_HOT = 2,
+ CPCL_PRESSED = 3,
+ CPCL_DISABLED = 4,
+};
+
+enum SECTIONTITLELINKSTATES {
+ CPSTL_NORMAL = 1,
+ CPSTL_HOT = 2,
+};
+
+/* DATEPICKERSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_DATEPICKERSTYLE (const WCHAR []){'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0}
+#define VSCLASS_DATEPICKER (const WCHAR []){'D','A','T','E','P','I','C','K','E','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_DATEPICKERSTYLE L"DATEPICKERSTYLE"
+#define VSCLASS_DATEPICKER L"DATEPICKER"
+#else
+static const WCHAR VSCLASS_DATEPICKERSTYLE[] = {'D','A','T','E','P','I','C','K','E','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_DATEPICKER [] = {'D','A','T','E','P','I','C','K','E','R',0};
+#endif
+
+enum DATEPICKERPARTS {
+ DP_DATETEXT = 1,
+ DP_DATEBORDER = 2,
+ DP_SHOWCALENDARBUTTONRIGHT = 3,
+};
+
+#define DATEPICKERSTYLEPARTS DATEPICKERPARTS;
+
+enum DATETEXTSTATES {
+ DPDT_NORMAL = 1,
+ DPDT_DISABLED = 2,
+ DPDT_SELECTED = 3,
+};
+
+enum DATEBORDERSTATES {
+ DPDB_NORMAL = 1,
+ DPDB_HOT = 2,
+ DPDB_FOCUSED = 3,
+ DPDB_DISABLED = 4,
+};
+
+enum SHOWCALENDARBUTTONRIGHTSTATES {
+ DPSCBR_NORMAL = 1,
+ DPSCBR_HOT = 2,
+ DPSCBR_PRESSED = 3,
+ DPSCBR_DISABLED = 4,
+};
+
+/* DRAGDROPSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_DRAGDROPSTYLE (const WCHAR []){'D','R','A','G','D','R','O','P','S','T','Y','L','E',0}
+#define VSCLASS_DRAGDROP (const WCHAR []){'D','R','A','G','D','R','O','P',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_DRAGDROPSTYLE L"DRAGDROPSTYLE"
+#define VSCLASS_DRAGDROP L"DRAGDROP"
+#else
+static const WCHAR VSCLASS_DRAGDROPSTYLE [] = {'D','R','A','G','D','R','O','P','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_DRAGDROP [] = {'D','R','A','G','D','R','O','P',0};
+#endif
+
+enum DRAGDROPPARTS {
+ DD_COPY = 1,
+ DD_MOVE = 2,
+ DD_UPDATEMETADATA = 3,
+ DD_CREATELINK = 4,
+ DD_WARNING = 5,
+ DD_NONE = 6,
+ DD_IMAGEBG = 7,
+ DD_TEXTBG = 8,
+};
+
+#define DRAGDROPSTYLEPARTS DRAGDROPPARTS;
+
+enum COPYSTATES {
+ DDCOPY_HIGHLIGHT = 1,
+ DDCOPY_NOHIGHLIGHT = 2,
+};
+
+enum MOVESTATES {
+ DDMOVE_HIGHLIGHT = 1,
+ DDMOVE_NOHIGHLIGHT = 2,
+};
+
+enum UPDATEMETADATASTATES {
+ DDUPDATEMETADATA_HIGHLIGHT = 1,
+ DDUPDATEMETADATA_NOHIGHLIGHT = 2,
+};
+
+enum CREATELINKSTATES {
+ DDCREATELINK_HIGHLIGHT = 1,
+ DDCREATELINK_NOHIGHLIGHT = 2,
+};
+
+enum WARNINGSTATES {
+ DDWARNING_HIGHLIGHT = 1,
+ DDWARNING_NOHIGHLIGHT = 2,
+};
+
+enum NONESTATES {
+ DDNONE_HIGHLIGHT = 1,
+ DDNONE_NOHIGHLIGHT = 2,
+};
+
+/* EDITSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_EDITSTYLE (const WCHAR []){'E','D','I','T','S','T','Y','L','E',0}
+#define VSCLASS_EDIT (const WCHAR []){'E','D','I','T',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_EDITSTYLE L"EDITSTYLE"
+#define VSCLASS_EDIT L"EDIT"
+#else
+static const WCHAR VSCLASS_EDITSTYLE [] = {'E','D','I','T','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_EDIT [] = {'E','D','I','T',0};
+#endif
+
+enum EDITPARTS {
+ EP_EDITTEXT = 1,
+ EP_CARET = 2,
+ EP_BACKGROUND = 3,
+ EP_PASSWORD = 4,
+ EP_BACKGROUNDWITHBORDER = 5,
+ EP_EDITBORDER_NOSCROLL = 6,
+ EP_EDITBORDER_HSCROLL = 7,
+ EP_EDITBORDER_VSCROLL = 8,
+ EP_EDITBORDER_HVSCROLL = 9,
+};
+
+#define EDITSTYLEPARTS EDITPARTS;
+
+enum EDITTEXTSTATES {
+ ETS_NORMAL = 1,
+ ETS_HOT = 2,
+ ETS_SELECTED = 3,
+ ETS_DISABLED = 4,
+ ETS_FOCUSED = 5,
+ ETS_READONLY = 6,
+ ETS_ASSIST = 7,
+ ETS_CUEBANNER = 8,
+};
+
+enum BACKGROUNDSTATES {
+ EBS_NORMAL = 1,
+ EBS_HOT = 2,
+ EBS_DISABLED = 3,
+ EBS_FOCUSED = 4,
+ EBS_READONLY = 5,
+ EBS_ASSIST = 6,
+};
+
+enum BACKGROUNDWITHBORDERSTATES {
+ EBWBS_NORMAL = 1,
+ EBWBS_HOT = 2,
+ EBWBS_DISABLED = 3,
+ EBWBS_FOCUSED = 4,
+};
+
+enum EDITBORDER_NOSCROLLSTATES {
+ EPSN_NORMAL = 1,
+ EPSN_HOT = 2,
+ EPSN_FOCUSED = 3,
+ EPSN_DISABLED = 4,
+};
+
+enum EDITBORDER_HSCROLLSTATES {
+ EPSH_NORMAL = 1,
+ EPSH_HOT = 2,
+ EPSH_FOCUSED = 3,
+ EPSH_DISABLED = 4,
+};
+
+enum EDITBORDER_VSCROLLSTATES {
+ EPSV_NORMAL = 1,
+ EPSV_HOT = 2,
+ EPSV_FOCUSED = 3,
+ EPSV_DISABLED = 4,
+};
+
+enum EDITBORDER_HVSCROLLSTATES {
+ EPSHV_NORMAL = 1,
+ EPSHV_HOT = 2,
+ EPSHV_FOCUSED = 3,
+ EPSHV_DISABLED = 4,
+};
+
+/* EXPLORERBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_EXPLORERBARSTYLE (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_EXPLORERBAR (const WCHAR []){'E','X','P','L','O','R','E','R','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_EXPLORERBARSTYLE L"EXPLORERBARSTYLE"
+#define VSCLASS_EXPLORERBAR L"EXPLORERBAR"
+#else
+static const WCHAR VSCLASS_EXPLORERBARSTYLE [] = {'E','X','P','L','O','R','E','R','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_EXPLORERBAR [] = {'E','X','P','L','O','R','E','R','B','A','R',0};
+#endif
+
+enum EXPLORERBARPARTS {
+ EBP_HEADERBACKGROUND = 1,
+ EBP_HEADERCLOSE = 2,
+ EBP_HEADERPIN = 3,
+ EBP_IEBARMENU = 4,
+ EBP_NORMALGROUPBACKGROUND = 5,
+ EBP_NORMALGROUPCOLLAPSE = 6,
+ EBP_NORMALGROUPEXPAND = 7,
+ EBP_NORMALGROUPHEAD = 8,
+ EBP_SPECIALGROUPBACKGROUND = 9,
+ EBP_SPECIALGROUPCOLLAPSE = 10,
+ EBP_SPECIALGROUPEXPAND = 11,
+ EBP_SPECIALGROUPHEAD = 12,
+};
+
+#define EXPLORERBARSTYLEPARTS EXPLORERBARPARTS;
+
+enum HEADERCLOSESTATES {
+ EBHC_NORMAL = 1,
+ EBHC_HOT = 2,
+ EBHC_PRESSED = 3,
+};
+
+enum HEADERPINSTATES {
+ EBHP_NORMAL = 1,
+ EBHP_HOT = 2,
+ EBHP_PRESSED = 3,
+ EBHP_SELECTEDNORMAL = 4,
+ EBHP_SELECTEDHOT = 5,
+ EBHP_SELECTEDPRESSED = 6,
+};
+
+enum IEBARMENUSTATES {
+ EBM_NORMAL = 1,
+ EBM_HOT = 2,
+ EBM_PRESSED = 3,
+};
+
+enum NORMALGROUPCOLLAPSESTATES {
+ EBNGC_NORMAL = 1,
+ EBNGC_HOT = 2,
+ EBNGC_PRESSED = 3,
+};
+
+enum NORMALGROUPEXPANDSTATES {
+ EBNGE_NORMAL = 1,
+ EBNGE_HOT = 2,
+ EBNGE_PRESSED = 3,
+};
+
+enum SPECIALGROUPCOLLAPSESTATES {
+ EBSGC_NORMAL = 1,
+ EBSGC_HOT = 2,
+ EBSGC_PRESSED = 3,
+};
+
+enum SPECIALGROUPEXPANDSTATES {
+ EBSGE_NORMAL = 1,
+ EBSGE_HOT = 2,
+ EBSGE_PRESSED = 3,
+};
+
+/* FLYOUTSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_FLYOUTSTYLE (const WCHAR []){'F','L','Y','O','U','T','S','T','Y','L','E',0}
+#define VSCLASS_FLYOUT (const WCHAR []){'F','L','Y','O','U','T',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_FLYOUTSTYLE L"FLYOUTSTYLE"
+#define VSCLASS_FLYOUT L"FLYOUT"
+#else
+static const WCHAR VSCLASS_FLYOUTSTYLE [] = {'F','L','Y','O','U','T','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_FLYOUT [] = {'F','L','Y','O','U','T',0};
+#endif
+
+enum FLYOUTPARTS {
+ FLYOUT_HEADER = 1,
+ FLYOUT_BODY = 2,
+ FLYOUT_LABEL = 3,
+ FLYOUT_LINK = 4,
+ FLYOUT_DIVIDER = 5,
+ FLYOUT_WINDOW = 6,
+ FLYOUT_LINKAREA = 7,
+ FLYOUT_LINKHEADER = 8,
+};
+
+#define FLYOUTSTYLEPARTS FLYOUTPARTS;
+
+enum LABELSTATES {
+ FLS_NORMAL = 1,
+ FLS_SELECTED = 2,
+ FLS_EMPHASIZED = 3,
+ FLS_DISABLED = 4,
+};
+
+enum LINKSTATES {
+ FLYOUTLINK_NORMAL = 1,
+ FLYOUTLINK_HOVER = 2,
+};
+
+enum BODYSTATES {
+ FBS_NORMAL = 1,
+ FBS_EMPHASIZED = 2,
+};
+
+enum LINKHEADERSTATES {
+ FLH_NORMAL = 1,
+ FLH_HOVER = 2,
+};
+
+/* HEADERSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_HEADERSTYLE (const WCHAR []){'H','E','A','D','E','R','S','T','Y','L','E',0}
+#define VSCLASS_HEADER (const WCHAR []){'H','E','A','D','E','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_HEADERSTYLE L"HEADERSTYLE"
+#define VSCLASS_HEADER L"HEADER"
+#else
+static const WCHAR VSCLASS_HEADERSTYLE [] = {'H','E','A','D','E','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_HEADER [] = {'H','E','A','D','E','R',0};
+#endif
+
+enum HEADERPARTS {
+ HP_HEADERITEM = 1,
+ HP_HEADERITEMLEFT = 2,
+ HP_HEADERITEMRIGHT = 3,
+ HP_HEADERSORTARROW = 4,
+ HP_HEADERDROPDOWN = 5,
+ HP_HEADERDROPDOWNFILTER = 6,
+ HP_HEADEROVERFLOW = 7,
+};
+
+#define HEADERSTYLEPARTS HEADERPARTS;
+
+enum HEADERSTYLESTATES {
+ HBG_DETAILS = 1,
+ HBG_ICON = 2,
+};
+
+enum HEADERITEMSTATES {
+ HIS_NORMAL = 1,
+ HIS_HOT = 2,
+ HIS_PRESSED = 3,
+ HIS_SORTEDNORMAL = 4,
+ HIS_SORTEDHOT = 5,
+ HIS_SORTEDPRESSED = 6,
+ HIS_ICONNORMAL = 7,
+ HIS_ICONHOT = 8,
+ HIS_ICONPRESSED = 9,
+ HIS_ICONSORTEDNORMAL = 10,
+ HIS_ICONSORTEDHOT = 11,
+ HIS_ICONSORTEDPRESSED = 12,
+};
+
+enum HEADERITEMLEFTSTATES {
+ HILS_NORMAL = 1,
+ HILS_HOT = 2,
+ HILS_PRESSED = 3,
+};
+
+enum HEADERITEMRIGHTSTATES {
+ HIRS_NORMAL = 1,
+ HIRS_HOT = 2,
+ HIRS_PRESSED = 3,
+};
+
+enum HEADERSORTARROWSTATES {
+ HSAS_SORTEDUP = 1,
+ HSAS_SORTEDDOWN = 2,
+};
+
+enum HEADERDROPDOWNSTATES {
+ HDDS_NORMAL = 1,
+ HDDS_SOFTHOT = 2,
+ HDDS_HOT = 3,
+};
+
+enum HEADERDROPDOWNFILTERSTATES {
+ HDDFS_NORMAL = 1,
+ HDDFS_SOFTHOT = 2,
+ HDDFS_HOT = 3,
+};
+
+enum HEADEROVERFLOWSTATES {
+ HOFS_NORMAL = 1,
+ HOFS_HOT = 2,
+};
+
+/* LISTBOXSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_LISTBOXSTYLE (const WCHAR []){'L','I','S','T','B','O','X','S','T','Y','L','E',0}
+#define VSCLASS_LISTBOX (const WCHAR []){'L','I','S','T','B','O','X',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_LISTBOXSTYLE L"LISTBOXSTYLE"
+#define VSCLASS_LISTBOX L"LISTBOX"
+#else
+static const WCHAR VSCLASS_LISTBOXSTYLE [] = {'L','I','S','T','B','O','X','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_LISTBOX[] = {'L','I','S','T','B','O','X',0};
+#endif
+
+enum LISTBOXPARTS {
+ LBCP_BORDER_HSCROLL = 1,
+ LBCP_BORDER_HVSCROLL = 2,
+ LBCP_BORDER_NOSCROLL = 3,
+ LBCP_BORDER_VSCROLL = 4,
+ LBCP_ITEM = 5,
+};
+
+#define LISTBOXSTYLEPARTS LISTBOXPARTS;
+
+enum BORDER_HSCROLLSTATES {
+ LBPSH_NORMAL = 1,
+ LBPSH_FOCUSED = 2,
+ LBPSH_HOT = 3,
+ LBPSH_DISABLED = 4,
+};
+
+enum BORDER_HVSCROLLSTATES {
+ LBPSHV_NORMAL = 1,
+ LBPSHV_FOCUSED = 2,
+ LBPSHV_HOT = 3,
+ LBPSHV_DISABLED = 4,
+};
+
+enum BORDER_NOSCROLLSTATES {
+ LBPSN_NORMAL = 1,
+ LBPSN_FOCUSED = 2,
+ LBPSN_HOT = 3,
+ LBPSN_DISABLED = 4,
+};
+
+enum BORDER_VSCROLLSTATES {
+ LBPSV_NORMAL = 1,
+ LBPSV_FOCUSED = 2,
+ LBPSV_HOT = 3,
+ LBPSV_DISABLED = 4,
+};
+
+enum ITEMSTATES {
+ LBPSI_HOT = 1,
+ LBPSI_HOTSELECTED = 2,
+ LBPSI_SELECTED = 3,
+ LBPSI_SELECTEDNOTFOCUS = 4,
+};
+
+/* LISTVIEWSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_LISTVIEWSTYLE (const WCHAR []){'L','I','S','T','V','I','E','W','S','T','Y','L','E',0}
+#define VSCLASS_LISTVIEW (const WCHAR []){'L','I','S','T','V','I','E','W',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_LISTVIEWSTYLE L"LISTVIEWSTYLE"
+#define VSCLASS_LISTVIEW L"LISTVIEW"
+#else
+static const WCHAR VSCLASS_LISTVIEWSTYLE [] = {'L','I','S','T','V','I','E','W','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_LISTVIEW [] = {'L','I','S','T','V','I','E','W',0};
+#endif
+
+enum LISTVIEWPARTS {
+ LVP_LISTITEM = 1,
+ LVP_LISTGROUP = 2,
+ LVP_LISTDETAIL = 3,
+ LVP_LISTSORTEDDETAIL = 4,
+ LVP_EMPTYTEXT = 5,
+ LVP_GROUPHEADER = 6,
+ LVP_GROUPHEADERLINE = 7,
+ LVP_EXPANDBUTTON = 8,
+ LVP_COLLAPSEBUTTON = 9,
+ LVP_COLUMNDETAIL = 10,
+};
+
+#define LISTVIEWSTYLEPARTS LISTVIEWPARTS;
+
+enum LISTITEMSTATES {
+ LISS_NORMAL = 1,
+ LISS_HOT = 2,
+ LISS_SELECTED = 3,
+ LISS_DISABLED = 4,
+ LISS_SELECTEDNOTFOCUS = 5,
+ LISS_HOTSELECTED = 6,
+};
+
+enum GROUPHEADERSTATES {
+ LVGH_OPEN = 1,
+ LVGH_OPENHOT = 2,
+ LVGH_OPENSELECTED = 3,
+ LVGH_OPENSELECTEDHOT = 4,
+ LVGH_OPENSELECTEDNOTFOCUSED = 5,
+ LVGH_OPENSELECTEDNOTFOCUSEDHOT = 6,
+ LVGH_OPENMIXEDSELECTION = 7,
+ LVGH_OPENMIXEDSELECTIONHOT = 8,
+ LVGH_CLOSE = 9,
+ LVGH_CLOSEHOT = 10,
+ LVGH_CLOSESELECTED = 11,
+ LVGH_CLOSESELECTEDHOT = 12,
+ LVGH_CLOSESELECTEDNOTFOCUSED = 13,
+ LVGH_CLOSESELECTEDNOTFOCUSEDHOT = 14,
+ LVGH_CLOSEMIXEDSELECTION = 15,
+ LVGH_CLOSEMIXEDSELECTIONHOT = 16,
+};
+
+enum GROUPHEADERLINESTATES {
+ LVGHL_OPEN = 1,
+ LVGHL_OPENHOT = 2,
+ LVGHL_OPENSELECTED = 3,
+ LVGHL_OPENSELECTEDHOT = 4,
+ LVGHL_OPENSELECTEDNOTFOCUSED = 5,
+ LVGHL_OPENSELECTEDNOTFOCUSEDHOT = 6,
+ LVGHL_OPENMIXEDSELECTION = 7,
+ LVGHL_OPENMIXEDSELECTIONHOT = 8,
+ LVGHL_CLOSE = 9,
+ LVGHL_CLOSEHOT = 10,
+ LVGHL_CLOSESELECTED = 11,
+ LVGHL_CLOSESELECTEDHOT = 12,
+ LVGHL_CLOSESELECTEDNOTFOCUSED = 13,
+ LVGHL_CLOSESELECTEDNOTFOCUSEDHOT = 14,
+ LVGHL_CLOSEMIXEDSELECTION = 15,
+ LVGHL_CLOSEMIXEDSELECTIONHOT = 16,
+};
+
+enum EXPANDBUTTONSTATES {
+ LVEB_NORMAL = 1,
+ LVEB_HOVER = 2,
+ LVEB_PUSHED = 3,
+};
+
+enum COLLAPSEBUTTONSTATES {
+ LVCB_NORMAL = 1,
+ LVCB_HOVER = 2,
+ LVCB_PUSHED = 3,
+};
+
+/* MENUSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_MENUSTYLE (const WCHAR []){'M','E','N','U','S','T','Y','L','E',0}
+#define VSCLASS_MENU (const WCHAR []){'M','E','N','U',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_MENUSTYLE L"MENUSTYLE"
+#define VSCLASS_MENU L"MENU"
+#else
+static const WCHAR VSCLASS_MENUSTYLE [] = {'M','E','N','U','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_MENU [] = {'M','E','N','U',0};
+#endif
+
+enum MENUPARTS {
+ MENU_MENUITEM_TMSCHEMA = 1,
+ MENU_MENUDROPDOWN_TMSCHEMA = 2,
+ MENU_MENUBARITEM_TMSCHEMA = 3,
+ MENU_MENUBARDROPDOWN_TMSCHEMA = 4,
+ MENU_CHEVRON_TMSCHEMA = 5,
+ MENU_SEPARATOR_TMSCHEMA = 6,
+ MENU_BARBACKGROUND = 7,
+ MENU_BARITEM = 8,
+ MENU_POPUPBACKGROUND = 9,
+ MENU_POPUPBORDERS = 10,
+ MENU_POPUPCHECK = 11,
+ MENU_POPUPCHECKBACKGROUND = 12,
+ MENU_POPUPGUTTER = 13,
+ MENU_POPUPITEM = 14,
+ MENU_POPUPSEPARATOR = 15,
+ MENU_POPUPSUBMENU = 16,
+ MENU_SYSTEMCLOSE = 17,
+ MENU_SYSTEMMAXIMIZE = 18,
+ MENU_SYSTEMMINIMIZE = 19,
+ MENU_SYSTEMRESTORE = 20,
+};
+
+#define MENUSTYLEPARTS MENUPARTS;
+
+enum BARBACKGROUNDSTATES {
+ MB_ACTIVE = 1,
+ MB_INACTIVE = 2,
+};
+
+enum BARITEMSTATES {
+ MBI_NORMAL = 1,
+ MBI_HOT = 2,
+ MBI_PUSHED = 3,
+ MBI_DISABLED = 4,
+ MBI_DISABLEDHOT = 5,
+ MBI_DISABLEDPUSHED = 6,
+};
+
+enum POPUPCHECKSTATES {
+ MC_CHECKMARKNORMAL = 1,
+ MC_CHECKMARKDISABLED = 2,
+ MC_BULLETNORMAL = 3,
+ MC_BULLETDISABLED = 4,
+};
+
+enum POPUPCHECKBACKGROUNDSTATES {
+ MCB_DISABLED = 1,
+ MCB_NORMAL = 2,
+ MCB_BITMAP = 3,
+};
+
+enum POPUPITEMSTATES {
+ MPI_NORMAL = 1,
+ MPI_HOT = 2,
+ MPI_DISABLED = 3,
+ MPI_DISABLEDHOT = 4,
+};
+
+enum POPUPSUBMENUSTATES {
+ MSM_NORMAL = 1,
+ MSM_DISABLED = 2,
+};
+
+enum SYSTEMCLOSESTATES {
+ MSYSC_NORMAL = 1,
+ MSYSC_DISABLED = 2,
+};
+
+enum SYSTEMMAXIMIZESTATES {
+ MSYSMX_NORMAL = 1,
+ MSYSMX_DISABLED = 2,
+};
+
+enum SYSTEMMINIMIZESTATES {
+ MSYSMN_NORMAL = 1,
+ MSYSMN_DISABLED = 2,
+};
+
+enum SYSTEMRESTORESTATES {
+ MSYSR_NORMAL = 1,
+ MSYSR_DISABLED = 2,
+};
+
+/* NAVIGATION class */
+#if defined(__GNUC__)
+#define VSCLASS_NAVIGATION (const WCHAR []){'N','A','V','I','G','A','T','I','O','N',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_NAVIGATION L"NAVIGATION"
+#else
+static const WCHAR VSCLASS_NAVIGATION [] = {'N','A','V','I','G','A','T','I','O','N',0};
+#endif
+
+enum NAVIGATIONPARTS {
+ NAV_BACKBUTTON = 1,
+ NAV_FORWARDBUTTON = 2,
+ NAV_MENUBUTTON = 3,
+};
+
+enum NAV_BACKBUTTONSTATES {
+ NAV_BB_NORMAL = 1,
+ NAV_BB_HOT = 2,
+ NAV_BB_PRESSED = 3,
+ NAV_BB_DISABLED = 4,
+};
+
+enum NAV_FORWARDBUTTONSTATES {
+ NAV_FB_NORMAL = 1,
+ NAV_FB_HOT = 2,
+ NAV_FB_PRESSED = 3,
+ NAV_FB_DISABLED = 4,
+};
+
+enum NAV_MENUBUTTONSTATES {
+ NAV_MB_NORMAL = 1,
+ NAV_MB_HOT = 2,
+ NAV_MB_PRESSED = 3,
+ NAV_MB_DISABLED = 4,
+};
+
+/* PROGRESSSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_PROGRESSSTYLE (const WCHAR []){'P','R','O','G','R','E','S','S','S','T','Y','L','E',0}
+#define VSCLASS_PROGRESS (const WCHAR []){'P','R','O','G','R','E','S','S',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_PROGRESSSTYLE L"PROGRESSSTYLE"
+#define VSCLASS_PROGRESS L"PROGRESS"
+#else
+static const WCHAR VSCLASS_PROGRESSSTYLE [] = {'P','R','O','G','R','E','S','S','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_PROGRESS [] = {'P','R','O','G','R','E','S','S',0};
+#endif
+
+enum PROGRESSPARTS {
+ PP_BAR = 1,
+ PP_BARVERT = 2,
+ PP_CHUNK = 3,
+ PP_CHUNKVERT = 4,
+ PP_FILL = 5,
+ PP_FILLVERT = 6,
+ PP_PULSEOVERLAY = 7,
+ PP_MOVEOVERLAY = 8,
+ PP_PULSEOVERLAYVERT = 9,
+ PP_MOVEOVERLAYVERT = 10,
+ PP_TRANSPARENTBAR = 11,
+ PP_TRANSPARENTBARVERT = 12,
+};
+
+#define PROGRESSSTYLEPARTS PROGRESSPARTS;
+
+enum TRANSPARENTBARSTATES {
+ PBBS_NORMAL = 1,
+ PBBS_PARTIAL = 2,
+};
+
+enum TRANSPARENTBARVERTSTATES {
+ PBBVS_NORMAL = 1,
+ PBBVS_PARTIAL = 2,
+};
+
+enum FILLSTATES {
+ PBFS_NORMAL = 1,
+ PBFS_ERROR = 2,
+ PBFS_PAUSED = 3,
+ PBFS_PARTIAL = 4,
+};
+
+enum FILLVERTSTATES {
+ PBFVS_NORMAL = 1,
+ PBFVS_ERROR = 2,
+ PBFVS_PAUSED = 3,
+ PBFVS_PARTIAL = 4,
+};
+
+/* REBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_REBARSTYLE (const WCHAR []){'R','E','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_REBAR (const WCHAR []){'R','E','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_REBARSTYLE L"REBARSTYLE"
+#define VSCLASS_REBAR L"REBAR"
+#else
+static const WCHAR VSCLASS_REBARSTYLE [] = {'R','E','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_REBAR [] = {'R','E','B','A','R',0};
+#endif
+
+enum REBARPARTS {
+ RP_GRIPPER = 1,
+ RP_GRIPPERVERT = 2,
+ RP_BAND = 3,
+ RP_CHEVRON = 4,
+ RP_CHEVRONVERT = 5,
+ RP_BACKGROUND = 6,
+ RP_SPLITTER = 7,
+ RP_SPLITTERVERT = 8,
+};
+
+#define REBARSTYLEPARTS REBARPARTS;
+
+enum CHEVRONSTATES {
+ CHEVS_NORMAL = 1,
+ CHEVS_HOT = 2,
+ CHEVS_PRESSED = 3,
+};
+
+enum CHEVRONVERTSTATES {
+ CHEVSV_NORMAL = 1,
+ CHEVSV_HOT = 2,
+ CHEVSV_PRESSED = 3,
+};
+
+enum SPLITTERSTATES {
+ SPLITS_NORMAL = 1,
+ SPLITS_HOT = 2,
+ SPLITS_PRESSED = 3,
+};
+
+enum SPLITTERVERTSTATES {
+ SPLITSV_NORMAL = 1,
+ SPLITSV_HOT = 2,
+ SPLITSV_PRESSED = 3,
+};
+
+/* SCROLLBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_SCROLLBARSTYLE (const WCHAR []){'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_SCROLLBAR (const WCHAR []){'S','C','R','O','L','L','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_SCROLLBARSTYLE L"SCROLLBARSTYLE"
+#define VSCLASS_SCROLLBAR L"SCROLLBAR"
+#else
+static const WCHAR VSCLASS_SCROLLBARSTYLE [] = {'S','C','R','O','L','L','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_SCROLLBAR [] = {'S','C','R','O','L','L','B','A','R',0};
+#endif
+
+enum SCROLLBARPARTS {
+ SBP_ARROWBTN = 1,
+ SBP_THUMBBTNHORZ = 2,
+ SBP_THUMBBTNVERT = 3,
+ SBP_LOWERTRACKHORZ = 4,
+ SBP_UPPERTRACKHORZ = 5,
+ SBP_LOWERTRACKVERT = 6,
+ SBP_UPPERTRACKVERT = 7,
+ SBP_GRIPPERHORZ = 8,
+ SBP_GRIPPERVERT = 9,
+ SBP_SIZEBOX = 10,
+};
+
+#define SCROLLBARSTYLEPARTS SCROLLBARPARTS;
+
+enum ARROWBTNSTATES {
+ ABS_UPNORMAL = 1,
+ ABS_UPHOT = 2,
+ ABS_UPPRESSED = 3,
+ ABS_UPDISABLED = 4,
+ ABS_DOWNNORMAL = 5,
+ ABS_DOWNHOT = 6,
+ ABS_DOWNPRESSED = 7,
+ ABS_DOWNDISABLED = 8,
+ ABS_LEFTNORMAL = 9,
+ ABS_LEFTHOT = 10,
+ ABS_LEFTPRESSED = 11,
+ ABS_LEFTDISABLED = 12,
+ ABS_RIGHTNORMAL = 13,
+ ABS_RIGHTHOT = 14,
+ ABS_RIGHTPRESSED = 15,
+ ABS_RIGHTDISABLED = 16,
+ ABS_UPHOVER = 17,
+ ABS_DOWNHOVER = 18,
+ ABS_LEFTHOVER = 19,
+ ABS_RIGHTHOVER = 20,
+};
+
+enum SCROLLBARSTYLESTATES {
+ SCRBS_NORMAL = 1,
+ SCRBS_HOT = 2,
+ SCRBS_PRESSED = 3,
+ SCRBS_DISABLED = 4,
+ SCRBS_HOVER = 5,
+};
+
+enum SIZEBOXSTATES {
+ SZB_RIGHTALIGN = 1,
+ SZB_LEFTALIGN = 2,
+ SZB_TOPRIGHTALIGN = 3,
+ SZB_TOPLEFTALIGN = 4,
+ SZB_HALFBOTTOMRIGHTALIGN = 5,
+ SZB_HALFBOTTOMLEFTALIGN = 6,
+ SZB_HALFTOPRIGHTALIGN = 7,
+ SZB_HALFTOPLEFTALIGN = 8,
+};
+
+/* SPINSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_SPINSTYLE (const WCHAR []){'S','P','I','N','S','T','Y','L','E',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_SPINSTYLE L"SPINSTYLE"
+#else
+static const WCHAR VSCLASS_SPINSTYLE [] = {'S','P','I','N','S','T','Y','L','E',0};
+#endif
+#if defined(__GNUC__)
+#define VSCLASS_SPIN (const WCHAR []){'S','P','I','N',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_SPIN L"SPIN"
+#else
+static const WCHAR VSCLASS_SPIN [] = {'S','P','I','N',0};
+#endif
+
+enum SPINPARTS {
+ SPNP_UP = 1,
+ SPNP_DOWN = 2,
+ SPNP_UPHORZ = 3,
+ SPNP_DOWNHORZ = 4,
+};
+
+#define SPINSTYLEPARTS SPINPARTS;
+
+enum UPSTATES {
+ UPS_NORMAL = 1,
+ UPS_HOT = 2,
+ UPS_PRESSED = 3,
+ UPS_DISABLED = 4,
+};
+
+enum DOWNSTATES {
+ DNS_NORMAL = 1,
+ DNS_HOT = 2,
+ DNS_PRESSED = 3,
+ DNS_DISABLED = 4,
+};
+
+enum UPHORZSTATES {
+ UPHZS_NORMAL = 1,
+ UPHZS_HOT = 2,
+ UPHZS_PRESSED = 3,
+ UPHZS_DISABLED = 4,
+};
+
+enum DOWNHORZSTATES {
+ DNHZS_NORMAL = 1,
+ DNHZS_HOT = 2,
+ DNHZS_PRESSED = 3,
+ DNHZS_DISABLED = 4,
+};
+
+/* STATUSSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_STATUSSTYLE (const WCHAR []){'S','T','A','T','U','S','S','T','Y','L','E',0}
+#define VSCLASS_STATUS (const WCHAR []){'S','T','A','T','U','S',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_STATUSSTYLE L"STATUSSTYLE"
+#define VSCLASS_STATUS L"STATUS"
+#else
+static const WCHAR VSCLASS_STATUSSTYLE [] = {'S','T','A','T','U','S','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_STATUS [] = {'S','T','A','T','U','S',0};
+#endif
+
+enum STATUSPARTS {
+ SP_PANE = 1,
+ SP_GRIPPERPANE = 2,
+ SP_GRIPPER = 3,
+};
+
+#define STATUSSTYLEPARTS STATUSPARTS;
+
+/* TABSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TABSTYLE (const WCHAR []){'T','A','B','S','T','Y','L','E',0}
+#define VSCLASS_TAB (const WCHAR []){'T','A','B',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TABSTYLE L"TABSTYLE"
+#define VSCLASS_TAB L"TAB"
+#else
+static const WCHAR VSCLASS_TABSTYLE [] = {'T','A','B','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TAB [] = {'T','A','B',0};
+#endif
+
+enum TABPARTS {
+ TABP_TABITEM = 1,
+ TABP_TABITEMLEFTEDGE = 2,
+ TABP_TABITEMRIGHTEDGE = 3,
+ TABP_TABITEMBOTHEDGE = 4,
+ TABP_TOPTABITEM = 5,
+ TABP_TOPTABITEMLEFTEDGE = 6,
+ TABP_TOPTABITEMRIGHTEDGE = 7,
+ TABP_TOPTABITEMBOTHEDGE = 8,
+ TABP_PANE = 9,
+ TABP_BODY = 10,
+ TABP_AEROWIZARDBODY = 11,
+};
+
+#define TABSTYLEPARTS TABPARTS;
+
+enum TABITEMSTATES {
+ TIS_NORMAL = 1,
+ TIS_HOT = 2,
+ TIS_SELECTED = 3,
+ TIS_DISABLED = 4,
+ TIS_FOCUSED = 5,
+};
+
+enum TABITEMLEFTEDGESTATES {
+ TILES_NORMAL = 1,
+ TILES_HOT = 2,
+ TILES_SELECTED = 3,
+ TILES_DISABLED = 4,
+ TILES_FOCUSED = 5,
+};
+
+enum TABITEMRIGHTEDGESTATES {
+ TIRES_NORMAL = 1,
+ TIRES_HOT = 2,
+ TIRES_SELECTED = 3,
+ TIRES_DISABLED = 4,
+ TIRES_FOCUSED = 5,
+};
+
+enum TABITEMBOTHEDGESTATES {
+ TIBES_NORMAL = 1,
+ TIBES_HOT = 2,
+ TIBES_SELECTED = 3,
+ TIBES_DISABLED = 4,
+ TIBES_FOCUSED = 5,
+};
+
+enum TOPTABITEMSTATES {
+ TTIS_NORMAL = 1,
+ TTIS_HOT = 2,
+ TTIS_SELECTED = 3,
+ TTIS_DISABLED = 4,
+ TTIS_FOCUSED = 5,
+};
+
+enum TOPTABITEMLEFTEDGESTATES {
+ TTILES_NORMAL = 1,
+ TTILES_HOT = 2,
+ TTILES_SELECTED = 3,
+ TTILES_DISABLED = 4,
+ TTILES_FOCUSED = 5,
+};
+
+enum TOPTABITEMRIGHTEDGESTATES {
+ TTIRES_NORMAL = 1,
+ TTIRES_HOT = 2,
+ TTIRES_SELECTED = 3,
+ TTIRES_DISABLED = 4,
+ TTIRES_FOCUSED = 5,
+};
+
+enum TOPTABITEMBOTHEDGESTATES {
+ TTIBES_NORMAL = 1,
+ TTIBES_HOT = 2,
+ TTIBES_SELECTED = 3,
+ TTIBES_DISABLED = 4,
+ TTIBES_FOCUSED = 5,
+};
+
+/* TASKDIALOGSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TASKDIALOGSTYLE (const WCHAR []){'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0}
+#define VSCLASS_TASKDIALOG (const WCHAR []){'T','A','S','K','D','I','A','L','O','G',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TASKDIALOGSTYLE L"TASKDIALOGSTYLE"
+#define VSCLASS_TASKDIALOG L"TASKDIALOG"
+#else
+static const WCHAR VSCLASS_TASKDIALOGSTYLE[] = {'T','A','S','K','D','I','A','L','O','G','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TASKDIALOG [] = {'T','A','S','K','D','I','A','L','O','G',0};
+#endif
+
+enum TASKDIALOGPARTS {
+ TDLG_PRIMARYPANEL = 1,
+ TDLG_MAININSTRUCTIONPANE = 2,
+ TDLG_MAINICON = 3,
+ TDLG_CONTENTPANE = 4,
+ TDLG_CONTENTICON = 5,
+ TDLG_EXPANDEDCONTENT = 6,
+ TDLG_COMMANDLINKPANE = 7,
+ TDLG_SECONDARYPANEL = 8,
+ TDLG_CONTROLPANE = 9,
+ TDLG_BUTTONSECTION = 10,
+ TDLG_BUTTONWRAPPER = 11,
+ TDLG_EXPANDOTEXT = 12,
+ TDLG_EXPANDOBUTTON = 13,
+ TDLG_VERIFICATIONTEXT = 14,
+ TDLG_FOOTNOTEPANE = 15,
+ TDLG_FOOTNOTEAREA = 16,
+ TDLG_FOOTNOTESEPARATOR = 17,
+ TDLG_EXPANDEDFOOTERAREA = 18,
+ TDLG_PROGRESSBAR = 19,
+ TDLG_IMAGEALIGNMENT = 20,
+ TDLG_RADIOBUTTONPANE = 21,
+};
+
+#define TASKDIALOGSTYLEPARTS TASKDIALOGPARTS;
+
+enum CONTENTPANESTATES {
+ TDLGCPS_STANDALONE = 1,
+};
+
+enum EXPANDOBUTTONSTATES {
+ TDLGEBS_NORMAL = 1,
+ TDLGEBS_HOVER = 2,
+ TDLGEBS_PRESSED = 3,
+ TDLGEBS_EXPANDEDNORMAL = 4,
+ TDLGEBS_EXPANDEDHOVER = 5,
+ TDLGEBS_EXPANDEDPRESSED = 6,
+};
+
+/* TEXTSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TEXTSTYLE (const WCHAR []){'T','E','X','T','S','T','Y','L','E',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TEXTSTYLE L"TEXTSTYLE"
+#else
+static const WCHAR VSCLASS_TEXTSTYLE [] = {'T','E','X','T','S','T','Y','L','E',0};
+#endif
+
+enum TEXTSTYLEPARTS {
+ TEXT_MAININSTRUCTION = 1,
+ TEXT_INSTRUCTION = 2,
+ TEXT_BODYTITLE = 3,
+ TEXT_BODYTEXT = 4,
+ TEXT_SECONDARYTEXT = 5,
+ TEXT_HYPERLINKTEXT = 6,
+ TEXT_EXPANDED = 7,
+ TEXT_LABEL = 8,
+ TEXT_CONTROLLABEL = 9,
+};
+
+enum HYPERLINKTEXTSTATES {
+ TS_HYPERLINK_NORMAL = 1,
+ TS_HYPERLINK_HOT = 2,
+ TS_HYPERLINK_PRESSED = 3,
+ TS_HYPERLINK_DISABLED = 4,
+};
+
+enum CONTROLLABELSTATES {
+ TS_CONTROLLABEL_NORMAL = 1,
+ TS_CONTROLLABEL_DISABLED = 2,
+};
+
+/* TOOLBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TOOLBARSTYLE (const WCHAR []){'T','O','O','L','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_TOOLBAR (const WCHAR []){'T','O','O','L','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TOOLBARSTYLE L"TOOLBARSTYLE"
+#define VSCLASS_TOOLBAR L"TOOLBAR"
+#else
+static const WCHAR VSCLASS_TOOLBARSTYLE [] = {'T','O','O','L','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TOOLBAR[] = {'T','O','O','L','B','A','R',0};
+#endif
+
+enum TOOLBARPARTS {
+ TP_BUTTON = 1,
+ TP_DROPDOWNBUTTON = 2,
+ TP_SPLITBUTTON = 3,
+ TP_SPLITBUTTONDROPDOWN = 4,
+ TP_SEPARATOR = 5,
+ TP_SEPARATORVERT = 6,
+};
+
+#define TOOLBARSTYLEPARTS TOOLBARPARTS;
+
+enum TOOLBARSTYLESTATES {
+ TS_NORMAL = 1,
+ TS_HOT = 2,
+ TS_PRESSED = 3,
+ TS_DISABLED = 4,
+ TS_CHECKED = 5,
+ TS_HOTCHECKED = 6,
+ TS_NEARHOT = 7,
+ TS_OTHERSIDEHOT = 8,
+};
+
+/* TOOLTIPSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TOOLTIPSTYLE (const WCHAR []){'T','O','O','L','T','I','P','S','T','Y','L','E',0}
+#define VSCLASS_TOOLTIP (const WCHAR []){'T','O','O','L','T','I','P',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TOOLTIPSTYLE L"TOOLTIPSTYLE"
+#define VSCLASS_TOOLTIP L"TOOLTIP"
+#else
+static const WCHAR VSCLASS_TOOLTIPSTYLE [] = {'T','O','O','L','T','I','P','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TOOLTIP[] = {'T','O','O','L','T','I','P',0};
+#endif
+
+enum TOOLTIPPARTS {
+ TTP_STANDARD = 1,
+ TTP_STANDARDTITLE = 2,
+ TTP_BALLOON = 3,
+ TTP_BALLOONTITLE = 4,
+ TTP_CLOSE = 5,
+ TTP_BALLOONSTEM = 6,
+};
+
+#define TOOLTIPSTYLEPARTS TOOLTIPPARTS;
+
+enum CLOSESTATES {
+ TTCS_NORMAL = 1,
+ TTCS_HOT = 2,
+ TTCS_PRESSED = 3,
+};
+
+enum STANDARDSTATES {
+ TTSS_NORMAL = 1,
+ TTSS_LINK = 2,
+};
+
+enum BALLOONSTATES {
+ TTBS_NORMAL = 1,
+ TTBS_LINK = 2,
+};
+
+enum BALLOONSTEMSTATES {
+ TTBSS_POINTINGUPLEFTWALL = 1,
+ TTBSS_POINTINGUPCENTERED = 2,
+ TTBSS_POINTINGUPRIGHTWALL = 3,
+ TTBSS_POINTINGDOWNRIGHTWALL = 4,
+ TTBSS_POINTINGDOWNCENTERED = 5,
+ TTBSS_POINTINGDOWNLEFTWALL = 6,
+};
+
+/* TRACKBARSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TRACKBARSTYLE (const WCHAR []){'T','R','A','C','K','B','A','R','S','T','Y','L','E',0}
+#define VSCLASS_TRACKBAR (const WCHAR []){'T','R','A','C','K','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TRACKBARSTYLE L"TRACKBARSTYLE"
+#define VSCLASS_TRACKBAR L"TRACKBAR"
+#else
+static const WCHAR VSCLASS_TRACKBARSTYLE [] = {'T','R','A','C','K','B','A','R','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TRACKBAR [] = {'T','R','A','C','K','B','A','R',0};
+#endif
+
+enum TRACKBARPARTS {
+ TKP_TRACK = 1,
+ TKP_TRACKVERT = 2,
+ TKP_THUMB = 3,
+ TKP_THUMBBOTTOM = 4,
+ TKP_THUMBTOP = 5,
+ TKP_THUMBVERT = 6,
+ TKP_THUMBLEFT = 7,
+ TKP_THUMBRIGHT = 8,
+ TKP_TICS = 9,
+ TKP_TICSVERT = 10,
+};
+
+#define TRACKBARSTYLEPARTS TRACKBARPARTS;
+
+enum TRACKBARSTYLESTATES {
+ TKS_NORMAL = 1,
+};
+
+enum TRACKSTATES {
+ TRS_NORMAL = 1,
+};
+
+enum TRACKVERTSTATES {
+ TRVS_NORMAL = 1,
+};
+
+enum THUMBSTATES {
+ TUS_NORMAL = 1,
+ TUS_HOT = 2,
+ TUS_PRESSED = 3,
+ TUS_FOCUSED = 4,
+ TUS_DISABLED = 5,
+};
+
+enum THUMBBOTTOMSTATES {
+ TUBS_NORMAL = 1,
+ TUBS_HOT = 2,
+ TUBS_PRESSED = 3,
+ TUBS_FOCUSED = 4,
+ TUBS_DISABLED = 5,
+};
+
+enum THUMBTOPSTATES {
+ TUTS_NORMAL = 1,
+ TUTS_HOT = 2,
+ TUTS_PRESSED = 3,
+ TUTS_FOCUSED = 4,
+ TUTS_DISABLED = 5,
+};
+
+enum THUMBVERTSTATES {
+ TUVS_NORMAL = 1,
+ TUVS_HOT = 2,
+ TUVS_PRESSED = 3,
+ TUVS_FOCUSED = 4,
+ TUVS_DISABLED = 5,
+};
+
+enum THUMBLEFTSTATES {
+ TUVLS_NORMAL = 1,
+ TUVLS_HOT = 2,
+ TUVLS_PRESSED = 3,
+ TUVLS_FOCUSED = 4,
+ TUVLS_DISABLED = 5,
+};
+
+enum THUMBRIGHTSTATES {
+ TUVRS_NORMAL = 1,
+ TUVRS_HOT = 2,
+ TUVRS_PRESSED = 3,
+ TUVRS_FOCUSED = 4,
+ TUVRS_DISABLED = 5,
+};
+
+enum TICSSTATES {
+ TSS_NORMAL = 1,
+};
+
+enum TICSVERTSTATES {
+ TSVS_NORMAL = 1,
+};
+
+/* TREEVIEWSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_TREEVIEWSTYLE (const WCHAR []){'T','R','E','E','V','I','E','W','S','T','Y','L','E',0}
+#define VSCLASS_TREEVIEW (const WCHAR []){'T','R','E','E','V','I','E','W',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TREEVIEWSTYLE L"TREEVIEWSTYLE"
+#define VSCLASS_TREEVIEW L"TREEVIEW"
+#else
+static const WCHAR VSCLASS_TREEVIEWSTYLE [] = {'T','R','E','E','V','I','E','W','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_TREEVIEW [] = {'T','R','E','E','V','I','E','W',0};
+#endif
+
+enum TREEVIEWPARTS {
+ TVP_TREEITEM = 1,
+ TVP_GLYPH = 2,
+ TVP_BRANCH = 3,
+ TVP_HOTGLYPH = 4,
+};
+
+#define TREEVIEWSTYLEPARTS TREEVIEWPARTS;
+
+enum TREEITEMSTATES {
+ TREIS_NORMAL = 1,
+ TREIS_HOT = 2,
+ TREIS_SELECTED = 3,
+ TREIS_DISABLED = 4,
+ TREIS_SELECTEDNOTFOCUS = 5,
+ TREIS_HOTSELECTED = 6,
+};
+
+enum GLYPHSTATES {
+ GLPS_CLOSED = 1,
+ GLPS_OPENED = 2,
+};
+
+enum HOTGLYPHSTATES {
+ HGLPS_CLOSED = 1,
+ HGLPS_OPENED = 2,
+};
+
+/* WINDOWSTYLE class */
+#if defined(__GNUC__)
+#define VSCLASS_WINDOWSTYLE (const WCHAR []){'W','I','N','D','O','W','S','T','Y','L','E',0}
+#define VSCLASS_WINDOW (const WCHAR []){'W','I','N','D','O','W',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_WINDOWSTYLE L"WINDOWSTYLE"
+#define VSCLASS_WINDOW L"WINDOW"
+#else
+static const WCHAR VSCLASS_WINDOWSTYLE [] = {'W','I','N','D','O','W','S','T','Y','L','E',0};
+static const WCHAR VSCLASS_WINDOW [] = {'W','I','N','D','O','W',0};
+#endif
+
+enum WINDOWPARTS {
+ WP_CAPTION = 1,
+ WP_SMALLCAPTION = 2,
+ WP_MINCAPTION = 3,
+ WP_SMALLMINCAPTION = 4,
+ WP_MAXCAPTION = 5,
+ WP_SMALLMAXCAPTION = 6,
+ WP_FRAMELEFT = 7,
+ WP_FRAMERIGHT = 8,
+ WP_FRAMEBOTTOM = 9,
+ WP_SMALLFRAMELEFT = 10,
+ WP_SMALLFRAMERIGHT = 11,
+ WP_SMALLFRAMEBOTTOM = 12,
+ WP_SYSBUTTON = 13,
+ WP_MDISYSBUTTON = 14,
+ WP_MINBUTTON = 15,
+ WP_MDIMINBUTTON = 16,
+ WP_MAXBUTTON = 17,
+ WP_CLOSEBUTTON = 18,
+ WP_SMALLCLOSEBUTTON = 19,
+ WP_MDICLOSEBUTTON = 20,
+ WP_RESTOREBUTTON = 21,
+ WP_MDIRESTOREBUTTON = 22,
+ WP_HELPBUTTON = 23,
+ WP_MDIHELPBUTTON = 24,
+ WP_HORZSCROLL = 25,
+ WP_HORZTHUMB = 26,
+ WP_VERTSCROLL = 27,
+ WP_VERTTHUMB = 28,
+ WP_DIALOG = 29,
+ WP_CAPTIONSIZINGTEMPLATE = 30,
+ WP_SMALLCAPTIONSIZINGTEMPLATE = 31,
+ WP_FRAMELEFTSIZINGTEMPLATE = 32,
+ WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33,
+ WP_FRAMERIGHTSIZINGTEMPLATE = 34,
+ WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35,
+ WP_FRAMEBOTTOMSIZINGTEMPLATE = 36,
+ WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37,
+ WP_FRAME = 38,
+};
+
+#define WINDOWSTYLEPARTS WINDOWPARTS;
+
+enum FRAMESTATES {
+ FS_ACTIVE = 1,
+ FS_INACTIVE = 2,
+};
+
+enum CAPTIONSTATES {
+ CS_ACTIVE = 1,
+ CS_INACTIVE = 2,
+ CS_DISABLED = 3,
+};
+
+enum MAXCAPTIONSTATES {
+ MXCS_ACTIVE = 1,
+ MXCS_INACTIVE = 2,
+ MXCS_DISABLED = 3,
+};
+
+enum MINCAPTIONSTATES {
+ MNCS_ACTIVE = 1,
+ MNCS_INACTIVE = 2,
+ MNCS_DISABLED = 3,
+};
+
+enum HORZSCROLLSTATES {
+ HSS_NORMAL = 1,
+ HSS_HOT = 2,
+ HSS_PUSHED = 3,
+ HSS_DISABLED = 4,
+};
+
+enum HORZTHUMBSTATES {
+ HTS_NORMAL = 1,
+ HTS_HOT = 2,
+ HTS_PUSHED = 3,
+ HTS_DISABLED = 4,
+};
+
+enum VERTSCROLLSTATES {
+ VSS_NORMAL = 1,
+ VSS_HOT = 2,
+ VSS_PUSHED = 3,
+ VSS_DISABLED = 4,
+};
+
+enum VERTTHUMBSTATES {
+ VTS_NORMAL = 1,
+ VTS_HOT = 2,
+ VTS_PUSHED = 3,
+ VTS_DISABLED = 4,
+};
+
+enum SYSBUTTONSTATES {
+ SBS_NORMAL = 1,
+ SBS_HOT = 2,
+ SBS_PUSHED = 3,
+ SBS_DISABLED = 4,
+};
+
+enum MINBUTTONSTATES {
+ MINBS_NORMAL = 1,
+ MINBS_HOT = 2,
+ MINBS_PUSHED = 3,
+ MINBS_DISABLED = 4,
+};
+
+enum RESTOREBUTTONSTATES {
+ RBS_NORMAL = 1,
+ RBS_HOT = 2,
+ RBS_PUSHED = 3,
+ RBS_DISABLED = 4,
+};
+
+enum HELPBUTTONSTATES {
+ HBS_NORMAL = 1,
+ HBS_HOT = 2,
+ HBS_PUSHED = 3,
+ HBS_DISABLED = 4,
+};
+
+enum CLOSEBUTTONSTATES {
+ CBS_NORMAL = 1,
+ CBS_HOT = 2,
+ CBS_PUSHED = 3,
+ CBS_DISABLED = 4,
+};
+
+#endif /* __VSSTYLE_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h
new file mode 100644
index 00000000..a76a6097
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/vssym32.h
@@ -0,0 +1,687 @@
+/*
+ * Copyright (C) 2011 Piotr Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __VSSYM32_H__
+#define __VSSYM32_H__
+
+#include "vsstyle.h"
+
+
+enum BGTYPE {
+ BT_IMAGEFILE = 0,
+ BT_BORDERFILL = 1,
+ BT_NONE = 2,
+};
+
+enum IMAGELAYOUT {
+ IL_VERTICAL = 0,
+ IL_HORIZONTAL = 1,
+};
+
+enum BORDERTYPE {
+ BT_RECT = 0,
+ BT_ROUNDRECT = 1,
+ BT_ELLIPSE = 2,
+};
+
+enum FILLTYPE {
+ FT_SOLID = 0,
+ FT_VERTGRADIENT = 1,
+ FT_HORZGRADIENT = 2,
+ FT_RADIALGRADIENT = 3,
+ FT_TILEIMAGE = 4,
+};
+
+enum SIZINGTYPE {
+ ST_TRUESIZE = 0,
+ ST_STRETCH = 1,
+ ST_TILE = 2,
+};
+
+enum HALIGN {
+ HA_LEFT = 0,
+ HA_CENTER = 1,
+ HA_RIGHT = 2,
+};
+
+enum CONTENTALIGNMENT {
+ CA_LEFT = 0,
+ CA_CENTER = 1,
+ CA_RIGHT = 2,
+};
+
+enum VALIGN {
+ VA_TOP = 0,
+ VA_CENTER = 1,
+ VA_BOTTOM = 2,
+};
+
+enum OFFSETTYPE {
+ OT_TOPLEFT = 0,
+ OT_TOPRIGHT = 1,
+ OT_TOPMIDDLE = 2,
+ OT_BOTTOMLEFT = 3,
+ OT_BOTTOMRIGHT = 4,
+ OT_BOTTOMMIDDLE = 5,
+ OT_MIDDLELEFT = 6,
+ OT_MIDDLERIGHT = 7,
+ OT_LEFTOFCAPTION = 8,
+ OT_RIGHTOFCAPTION = 9,
+ OT_LEFTOFLASTBUTTON = 10,
+ OT_RIGHTOFLASTBUTTON = 11,
+ OT_ABOVELASTBUTTON = 12,
+ OT_BELOWLASTBUTTON = 13,
+};
+
+enum ICONEFFECT {
+ ICE_NONE = 0,
+ ICE_GLOW = 1,
+ ICE_SHADOW = 2,
+ ICE_PULSE = 3,
+ ICE_ALPHA = 4,
+};
+
+enum TEXTSHADOWTYPE {
+ TST_NONE = 0,
+ TST_SINGLE = 1,
+ TST_CONTINUOUS = 2,
+};
+
+enum GLYPHTYPE {
+ GT_NONE = 0,
+ GT_IMAGEGLYPH = 1,
+ GT_FONTGLYPH = 2,
+};
+
+enum IMAGESELECTTYPE {
+ IST_NONE = 0,
+ IST_SIZE = 1,
+ IST_DPI = 2,
+};
+
+enum TRUESIZESCALINGTYPE {
+ TSST_NONE = 0,
+ TSST_SIZE = 1,
+ TSST_DPI = 2,
+};
+
+enum GLYPHFONTSIZINGTYPE {
+ GFST_NONE = 0,
+ GFST_SIZE = 1,
+ GFST_DPI = 2,
+};
+
+#define TMT_RESERVEDLOW 0
+#define TMT_RESERVEDHIGH 7999
+
+#define TMT_DIBDATA 2
+#define TMT_GLYPHDIBDATA 8
+#define TMT_ENUM 200
+#define TMT_STRING 201
+#define TMT_INT 202
+#define TMT_BOOL 203
+#define TMT_COLOR 204
+#define TMT_MARGINS 205
+#define TMT_FILENAME 206
+#define TMT_SIZE 207
+#define TMT_POSITION 208
+#define TMT_RECT 209
+#define TMT_FONT 210
+#define TMT_INTLIST 211
+#define TMT_HBITMAP 212
+#define TMT_DISKSTREAM 213
+#define TMT_STREAM 214
+#define TMT_BITMAPREF 215
+#define TMT_COLORSCHEMES 401
+#define TMT_SIZES 402
+#define TMT_CHARSET 403
+#define TMT_NAME 600
+#define TMT_DISPLAYNAME 601
+#define TMT_TOOLTIP 602
+#define TMT_COMPANY 603
+#define TMT_AUTHOR 604
+#define TMT_COPYRIGHT 605
+#define TMT_URL 606
+#define TMT_VERSION 607
+#define TMT_DESCRIPTION 608
+#define TMT_FIRST_RCSTRING_NAME TMT_DISPLAYNAME
+#define TMT_LAST_RCSTRING_NAME TMT_DESCRIPTION
+#define TMT_CAPTIONFONT 801
+#define TMT_SMALLCAPTIONFONT 802
+#define TMT_MENUFONT 803
+#define TMT_STATUSFONT 804
+#define TMT_MSGBOXFONT 805
+#define TMT_ICONTITLEFONT 806
+#define TMT_HEADING1FONT 807
+#define TMT_HEADING2FONT 808
+#define TMT_BODYFONT 809
+#define TMT_FIRSTFONT TMT_CAPTIONFONT
+#define TMT_LASTFONT TMT_BODYFONT
+#define TMT_FLATMENUS 1001
+#define TMT_FIRSTBOOL TMT_FLATMENUS
+#define TMT_LASTBOOL TMT_FLATMENUS
+#define TMT_SIZINGBORDERWIDTH 1201
+#define TMT_SCROLLBARWIDTH 1202
+#define TMT_SCROLLBARHEIGHT 1203
+#define TMT_CAPTIONBARWIDTH 1204
+#define TMT_CAPTIONBARHEIGHT 1205
+#define TMT_SMCAPTIONBARWIDTH 1206
+#define TMT_SMCAPTIONBARHEIGHT 1207
+#define TMT_MENUBARWIDTH 1208
+#define TMT_MENUBARHEIGHT 1209
+#define TMT_PADDEDBORDERWIDTH 1210
+#define TMT_FIRSTSIZE TMT_SIZINGBORDERWIDTH
+#define TMT_LASTSIZE TMT_PADDEDBORDERWIDTH
+#define TMT_MINCOLORDEPTH 1301
+#define TMT_FIRSTINT TMT_MINCOLORDEPTH
+#define TMT_LASTINT TMT_MINCOLORDEPTH
+#define TMT_CSSNAME 1401
+#define TMT_XMLNAME 1402
+#define TMT_LASTUPDATED 1403
+#define TMT_ALIAS 1404
+#define TMT_FIRSTSTRING TMT_CSSNAME
+#define TMT_LASTSTRING TMT_ALIAS
+#define TMT_SCROLLBAR 1601
+#define TMT_BACKGROUND 1602
+#define TMT_ACTIVECAPTION 1603
+#define TMT_INACTIVECAPTION 1604
+#define TMT_MENU 1605
+#define TMT_WINDOW 1606
+#define TMT_WINDOWFRAME 1607
+#define TMT_MENUTEXT 1608
+#define TMT_WINDOWTEXT 1609
+#define TMT_CAPTIONTEXT 1610
+#define TMT_ACTIVEBORDER 1611
+#define TMT_INACTIVEBORDER 1612
+#define TMT_APPWORKSPACE 1613
+#define TMT_HIGHLIGHT 1614
+#define TMT_HIGHLIGHTTEXT 1615
+#define TMT_BTNFACE 1616
+#define TMT_BTNSHADOW 1617
+#define TMT_GRAYTEXT 1618
+#define TMT_BTNTEXT 1619
+#define TMT_INACTIVECAPTIONTEXT 1620
+#define TMT_BTNHIGHLIGHT 1621
+#define TMT_DKSHADOW3D 1622
+#define TMT_LIGHT3D 1623
+#define TMT_INFOTEXT 1624
+#define TMT_INFOBK 1625
+#define TMT_BUTTONALTERNATEFACE 1626
+#define TMT_HOTTRACKING 1627
+#define TMT_GRADIENTACTIVECAPTION 1628
+#define TMT_GRADIENTINACTIVECAPTION 1629
+#define TMT_MENUHILIGHT 1630
+#define TMT_MENUBAR 1631
+#define TMT_FIRSTCOLOR TMT_SCROLLBAR
+#define TMT_LASTCOLOR TMT_MENUBAR
+#define TMT_FROMHUE1 1801
+#define TMT_FROMHUE2 1802
+#define TMT_FROMHUE3 1803
+#define TMT_FROMHUE4 1804
+#define TMT_FROMHUE5 1805
+#define TMT_TOHUE1 1806
+#define TMT_TOHUE2 1807
+#define TMT_TOHUE3 1808
+#define TMT_TOHUE4 1809
+#define TMT_TOHUE5 1810
+#define TMT_FROMCOLOR1 2001
+#define TMT_FROMCOLOR2 2002
+#define TMT_FROMCOLOR3 2003
+#define TMT_FROMCOLOR4 2004
+#define TMT_FROMCOLOR5 2005
+#define TMT_TOCOLOR1 2006
+#define TMT_TOCOLOR2 2007
+#define TMT_TOCOLOR3 2008
+#define TMT_TOCOLOR4 2009
+#define TMT_TOCOLOR5 2010
+#define TMT_TRANSPARENT 2201
+#define TMT_AUTOSIZE 2202
+#define TMT_BORDERONLY 2203
+#define TMT_COMPOSITED 2204
+#define TMT_BGFILL 2205
+#define TMT_GLYPHTRANSPARENT 2206
+#define TMT_GLYPHONLY 2207
+#define TMT_ALWAYSSHOWSIZINGBAR 2208
+#define TMT_MIRRORIMAGE 2209
+#define TMT_UNIFORMSIZING 2210
+#define TMT_INTEGRALSIZING 2211
+#define TMT_SOURCEGROW 2212
+#define TMT_SOURCESHRINK 2213
+#define TMT_DRAWBORDERS 2214
+#define TMT_NOETCHEDEFFECT 2215
+#define TMT_TEXTAPPLYOVERLAY 2216
+#define TMT_TEXTGLOW 2217
+#define TMT_TEXTITALIC 2218
+#define TMT_COMPOSITEDOPAQUE 2219
+#define TMT_LOCALIZEDMIRRORIMAGE 2220
+#define TMT_IMAGECOUNT 2401
+#define TMT_ALPHALEVEL 2402
+#define TMT_BORDERSIZE 2403
+#define TMT_ROUNDCORNERWIDTH 2404
+#define TMT_ROUNDCORNERHEIGHT 2405
+#define TMT_GRADIENTRATIO1 2406
+#define TMT_GRADIENTRATIO2 2407
+#define TMT_GRADIENTRATIO3 2408
+#define TMT_GRADIENTRATIO4 2409
+#define TMT_GRADIENTRATIO5 2410
+#define TMT_PROGRESSCHUNKSIZE 2411
+#define TMT_PROGRESSSPACESIZE 2412
+#define TMT_SATURATION 2413
+#define TMT_TEXTBORDERSIZE 2414
+#define TMT_ALPHATHRESHOLD 2415
+#define TMT_WIDTH 2416
+#define TMT_HEIGHT 2417
+#define TMT_GLYPHINDEX 2418
+#define TMT_TRUESIZESTRETCHMARK 2419
+#define TMT_MINDPI1 2420
+#define TMT_MINDPI2 2421
+#define TMT_MINDPI3 2422
+#define TMT_MINDPI4 2423
+#define TMT_MINDPI5 2424
+#define TMT_TEXTGLOWSIZE 2425
+#define TMT_FRAMESPERSECOND 2426
+#define TMT_PIXELSPERFRAME 2427
+#define TMT_ANIMATIONDELAY 2428
+#define TMT_GLOWINTENSITY 2429
+#define TMT_OPACITY 2430
+#define TMT_COLORIZATIONCOLOR 2431
+#define TMT_COLORIZATIONOPACITY 2432
+#define TMT_GLYPHFONT 2601
+#define TMT_IMAGEFILE 3001
+#define TMT_IMAGEFILE1 3002
+#define TMT_IMAGEFILE2 3003
+#define TMT_IMAGEFILE3 3004
+#define TMT_IMAGEFILE4 3005
+#define TMT_IMAGEFILE5 3006
+#define TMT_GLYPHIMAGEFILE 3008
+#define TMT_TEXT 3201
+#define TMT_CLASSICVALUE 3202
+#define TMT_OFFSET 3401
+#define TMT_TEXTSHADOWOFFSET 3402
+#define TMT_MINSIZE 3403
+#define TMT_MINSIZE1 3404
+#define TMT_MINSIZE2 3405
+#define TMT_MINSIZE3 3406
+#define TMT_MINSIZE4 3407
+#define TMT_MINSIZE5 3408
+#define TMT_NORMALSIZE 3409
+#define TMT_SIZINGMARGINS 3601
+#define TMT_CONTENTMARGINS 3602
+#define TMT_CAPTIONMARGINS 3603
+#define TMT_BORDERCOLOR 3801
+#define TMT_FILLCOLOR 3802
+#define TMT_TEXTCOLOR 3803
+#define TMT_EDGELIGHTCOLOR 3804
+#define TMT_EDGEHIGHLIGHTCOLOR 3805
+#define TMT_EDGESHADOWCOLOR 3806
+#define TMT_EDGEDKSHADOWCOLOR 3807
+#define TMT_EDGEFILLCOLOR 3808
+#define TMT_TRANSPARENTCOLOR 3809
+#define TMT_GRADIENTCOLOR1 3810
+#define TMT_GRADIENTCOLOR2 3811
+#define TMT_GRADIENTCOLOR3 3812
+#define TMT_GRADIENTCOLOR4 3813
+#define TMT_GRADIENTCOLOR5 3814
+#define TMT_SHADOWCOLOR 3815
+#define TMT_GLOWCOLOR 3816
+#define TMT_TEXTBORDERCOLOR 3817
+#define TMT_TEXTSHADOWCOLOR 3818
+#define TMT_GLYPHTEXTCOLOR 3819
+#define TMT_GLYPHTRANSPARENTCOLOR 3820
+#define TMT_FILLCOLORHINT 3821
+#define TMT_BORDERCOLORHINT 3822
+#define TMT_ACCENTCOLORHINT 3823
+#define TMT_TEXTCOLORHINT 3824
+#define TMT_HEADING1TEXTCOLOR 3825
+#define TMT_HEADING2TEXTCOLOR 3826
+#define TMT_BODYTEXTCOLOR 3827
+#define TMT_BGTYPE 4001
+#define TMT_BORDERTYPE 4002
+#define TMT_FILLTYPE 4003
+#define TMT_SIZINGTYPE 4004
+#define TMT_HALIGN 4005
+#define TMT_CONTENTALIGNMENT 4006
+#define TMT_VALIGN 4007
+#define TMT_OFFSETTYPE 4008
+#define TMT_ICONEFFECT 4009
+#define TMT_TEXTSHADOWTYPE 4010
+#define TMT_IMAGELAYOUT 4011
+#define TMT_GLYPHTYPE 4012
+#define TMT_IMAGESELECTTYPE 4013
+#define TMT_GLYPHFONTSIZINGTYPE 4014
+#define TMT_TRUESIZESCALINGTYPE 4015
+#define TMT_USERPICTURE 5001
+#define TMT_DEFAULTPANESIZE 5002
+#define TMT_BLENDCOLOR 5003
+#define TMT_CUSTOMSPLITRECT 5004
+#define TMT_ANIMATIONBUTTONRECT 5005
+#define TMT_ANIMATIONDURATION 5006
+#define TMT_TRANSITIONDURATIONS 6000
+#define TMT_SCALEDBACKGROUND 7001
+#define TMT_ATLASIMAGE 8000
+#define TMT_ATLASINPUTIMAGE 8001
+#define TMT_ATLASRECT 8002
+
+/* LINK class */
+#if defined(__GNUC__)
+#define VSCLASS_LINK (const WCHAR []){'L','I','N','K',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_LINK L"LINK"
+#else
+static const WCHAR VSCLASS_LINK[] = {'L','I','N','K',0};
+#endif
+
+enum LINKPARTS {
+ LP_HYPERLINK = 1,
+};
+
+enum HYPERLINKSTATES {
+ HLS_NORMALTEXT = 1,
+ HLS_LINKTEXT = 2,
+};
+
+/* EMPTYMARKUP class */
+#if defined(__GNUC__)
+#define VSCLASS_EMPTYMARKUP (const WCHAR []){'E','M','P','T','Y','M','A','R','K','U','P',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_EMPTYMARKUP L"EMPTYMARKUP"
+#else
+static const WCHAR VSCLASS_EMPTYMARKUP[] = {'E','M','P','T','Y','M','A','R','K','U','P',0};
+#endif
+
+enum EMPTYMARKUPPARTS {
+ EMP_MARKUPTEXT = 1,
+};
+
+enum MARKUPTEXTSTATES {
+ EMT_NORMALTEXT = 1,
+ EMT_LINKTEXT = 2,
+};
+
+/* STATIC class */
+#if defined(__GNUC__)
+#define VSCLASS_STATIC (const WCHAR []){'S','T','A','T','I','C',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_STATIC L"STATIC"
+#else
+static const WCHAR VSCLASS_STATIC[] = {'S','T','A','T','I','C',0};
+#endif
+
+enum STATICPARTS {
+ STAT_TEXT = 1,
+};
+
+/* PAGE class */
+#if defined(__GNUC__)
+#define VSCLASS_PAGE (const WCHAR []){'P','A','G','E',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_PAGE L"PAGE"
+#else
+static const WCHAR VSCLASS_PAGE[] = {'P','A','G','E',0};
+#endif
+
+enum PAGEPARTS {
+ PGRP_UP = 1,
+ PGRP_DOWN = 2,
+ PGRP_UPHORZ = 3,
+ PGRP_DOWNHORZ = 4,
+};
+
+/* MONTHCAL class */
+#if defined(__GNUC__)
+#define VSCLASS_MONTHCAL (const WCHAR []){'M','O','N','T','H','C','A','L',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_MONTHCAL L"MONTHCAL"
+#else
+static const WCHAR VSCLASS_MONTHCAL[] = {'M','O','N','T','H','C','A','L',0};
+#endif
+
+enum MONTHCALPARTS {
+ MC_BACKGROUND = 1,
+ MC_BORDERS = 2,
+ MC_GRIDBACKGROUND = 3,
+ MC_COLHEADERSPLITTER = 4,
+ MC_GRIDCELLBACKGROUND = 5,
+ MC_GRIDCELL = 6,
+ MC_GRIDCELLUPPER = 7,
+ MC_TRAILINGGRIDCELL = 8,
+ MC_TRAILINGGRIDCELLUPPER = 9,
+ MC_NAVNEXT = 10,
+ MC_NAVPREV = 11,
+};
+
+enum GRIDCELLBACKGROUNDSTATES {
+ MCGCB_SELECTED = 1,
+ MCGCB_HOT = 2,
+ MCGCB_SELECTEDHOT = 3,
+ MCGCB_SELECTEDNOTFOCUSED = 4,
+ MCGCB_TODAY = 5,
+};
+
+enum GRIDCELLSTATES {
+ MCGC_HOT = 1,
+ MCGC_HASSTATE = 2,
+ MCGC_HASSTATEHOT = 3,
+ MCGC_TODAY = 4,
+};
+
+enum GRIDCELLUPPERSTATES {
+ MCGCU_HOT = 1,
+ MCGCU_HASSTATE = 2,
+ MCGCU_HASSTATEHOT = 3,
+};
+
+enum TRAILINGGRIDCELLSTATES {
+ MCTGC_HOT = 1,
+ MCTGC_HASSTATE = 2,
+ MCTGC_HASSTATEHOT = 3,
+ MCTGC_TODAY = 4,
+};
+
+enum TRAILINGGRIDCELLUPPERSTATES {
+ MCTGCU_HOT = 1,
+ MCTGCU_HASSTATE = 2,
+ MCTGCU_HASSTATEHOT = 3,
+};
+
+enum NAVNEXTSTATES {
+ MCNN_NORMAL = 1,
+ MCNN_HOT = 2,
+ MCNN_PRESSED = 3,
+ MCNN_DISABLED = 4,
+};
+
+enum NAVPREVSTATES {
+ MCNP_NORMAL = 1,
+ MCNP_HOT = 2,
+ MCNP_PRESSED = 3,
+ MCNP_DISABLED = 4,
+};
+
+/* CLOCK class */
+#if defined(__GNUC__)
+#define VSCLASS_CLOCK (const WCHAR []){'C','L','O','C','K',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_CLOCK L"CLOCK"
+#else
+static const WCHAR VSCLASS_CLOCK[] = {'C','L','O','C','K',0};
+#endif
+
+enum CLOCKPARTS {
+ CLP_TIME = 1,
+};
+
+enum CLOCKSTATES {
+ CLS_NORMAL = 1,
+};
+
+/* TRAYNOTIFY class */
+#if defined(__GNUC__)
+#define VSCLASS_TRAYNOTIFY (const WCHAR []){'T','R','A','Y','N','O','T','I','F','Y',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TRAYNOTIFY L"TRAYNOTIFY"
+#else
+static const WCHAR VSCLASS_TRAYNOTIFY[] = {'T','R','A','Y','N','O','T','I','F','Y',0};
+#endif
+
+enum TRAYNOTIFYPARTS {
+ TNP_BACKGROUND = 1,
+ TNP_ANIMBACKGROUND = 2,
+};
+
+/* TASKBAR class */
+#if defined(__GNUC__)
+#define VSCLASS_TASKBAR (const WCHAR []){'T','A','S','K','B','A','R',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TASKBAR L"TASKBAR"
+#else
+static const WCHAR VSCLASS_TASKBAR[] = {'T','A','S','K','B','A','R',0};
+#endif
+
+enum TASKBARPARTS {
+ TBP_BACKGROUNDBOTTOM = 1,
+ TBP_BACKGROUNDRIGHT = 2,
+ TBP_BACKGROUNDTOP = 3,
+ TBP_BACKGROUNDLEFT = 4,
+ TBP_SIZINGBARBOTTOM = 5,
+ TBP_SIZINGBARRIGHT = 6,
+ TBP_SIZINGBARTOP = 7,
+ TBP_SIZINGBARLEFT = 8,
+};
+
+/* TASKBAND class */
+#if defined(__GNUC__)
+#define VSCLASS_TASKBAND (const WCHAR []){'T','A','S','K','B','A','N','D',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_TASKBAND L"TASKBAND"
+#else
+static const WCHAR VSCLASS_TASKBAND[] = {'T','A','S','K','B','A','N','D',0};
+#endif
+
+enum TASKBANDPARTS {
+ TDP_GROUPCOUNT = 1,
+ TDP_FLASHBUTTON = 2,
+ TDP_FLASHBUTTONGROUPMENU = 3,
+};
+
+/* STARTPANEL class */
+#if defined(__GNUC__)
+#define VSCLASS_STARTPANEL (const WCHAR []){'S','T','A','R','T','P','A','N','E','L',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_STARTPANEL L"STARTPANEL"
+#else
+static const WCHAR VSCLASS_STARTPANEL[] = {'S','T','A','R','T','P','A','N','E','L',0};
+#endif
+
+enum STARTPANELPARTS {
+ SPP_USERPANE = 1,
+ SPP_MOREPROGRAMS = 2,
+ SPP_MOREPROGRAMSARROW = 3,
+ SPP_PROGLIST = 4,
+ SPP_PROGLISTSEPARATOR = 5,
+ SPP_PLACESLIST = 6,
+ SPP_PLACESLISTSEPARATOR = 7,
+ SPP_LOGOFF = 8,
+ SPP_LOGOFFBUTTONS = 9,
+ SPP_USERPICTURE = 10,
+ SPP_PREVIEW = 11,
+ SPP_MOREPROGRAMSTAB = 12,
+ SPP_NSCHOST = 13,
+ SPP_SOFTWAREEXPLORER = 14,
+ SPP_OPENBOX = 15,
+ SPP_SEARCHVIEW = 16,
+ SPP_MOREPROGRAMSARROWBACK = 17,
+ SPP_TOPMATCH = 18,
+ SPP_LOGOFFSPLITBUTTONDROPDOWN = 19,
+};
+
+enum MOREPROGRAMSTABSTATES {
+ SPMPT_NORMAL = 1,
+ SPMPT_HOT = 2,
+ SPMPT_SELECTED = 3,
+ SPMPT_DISABLED = 4,
+ SPMPT_FOCUSED = 5,
+};
+
+enum SOFTWAREEXPLORERSTATES {
+ SPSE_NORMAL = 1,
+ SPSE_HOT = 2,
+ SPSE_SELECTED = 3,
+ SPSE_DISABLED = 4,
+ SPSE_FOCUSED = 5,
+};
+
+enum OPENBOXSTATES {
+ SPOB_NORMAL = 1,
+ SPOB_HOT = 2,
+ SPOB_SELECTED = 3,
+ SPOB_DISABLED = 4,
+ SPOB_FOCUSED = 5,
+};
+
+enum MOREPROGRAMSARROWSTATES {
+ SPS_NORMAL = 1,
+ SPS_HOT = 2,
+ SPS_PRESSED = 3,
+};
+
+enum MOREPROGRAMSARROWBACKSTATES {
+ SPSB_NORMAL = 1,
+ SPSB_HOT = 2,
+ SPSB_PRESSED = 3,
+};
+
+enum LOGOFFBUTTONSSTATES {
+ SPLS_NORMAL = 1,
+ SPLS_HOT = 2,
+ SPLS_PRESSED = 3,
+};
+
+/* MENUBAND class */
+#if defined(__GNUC__)
+#define VSCLASS_MENUBAND (const WCHAR []){'M','E','N','U','B','A','N','D',0}
+#elif defined(_MSC_VER)
+#define VSCLASS_MENUBAND L"MENUBAND"
+#else
+static const WCHAR VSCLASS_MENUBAND[] = {'M','E','N','U','B','A','N','D',0};
+#endif
+
+enum MENUBANDPARTS {
+ MDP_NEWAPPBUTTON = 1,
+ MDP_SEPERATOR = 2,
+};
+
+enum MENUBANDSTATES {
+ MDS_NORMAL = 1,
+ MDS_HOT = 2,
+ MDS_PRESSED = 3,
+ MDS_DISABLED = 4,
+ MDS_CHECKED = 5,
+ MDS_HOTCHECKED = 6,
+};
+
+#endif /* __VSSYM32_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl
new file mode 100644
index 00000000..2b50dd88
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemcli.idl
@@ -0,0 +1,671 @@
+/*
+ * Copyright 2009 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+cpp_quote("DEFINE_GUID(CLSID_WbemLocator, 0x4590f811,0x1d3A,0x11d0,0x89,0x1f,0x00,0xaa,0x00,0x4b,0x2e,0x24);")
+cpp_quote("DEFINE_GUID(CLSID_WbemStatusCode, 0xeb87e1bd,0x3233,0x11d2,0xae,0xc9,0x00,0xc0,0x4f,0xb6,0x88,0x20);")
+
+import "oaidl.idl";
+import "objidl.idl";
+
+interface IWbemContext;
+interface IWbemServices;
+interface IWbemStatusCodeText;
+interface IWbemCallResult;
+interface IWbemObjectSink;
+interface IWbemClassObject;
+interface IEnumWbemClassObject;
+interface IWbemQualifierSet;
+
+typedef [v1_enum] enum tag_WBEMSTATUS
+{
+ WBEM_NO_ERROR = 0,
+ WBEM_S_NO_ERROR = 0,
+ WBEM_S_SAME = 0,
+ WBEM_S_FALSE = 1,
+ WBEM_S_ALREADY_EXISTS = 0x40001,
+ WBEM_S_RESET_TO_DEFAULT = 0x40002,
+ WBEM_S_DIFFERENT = 0x40003,
+ WBEM_S_TIMEDOUT = 0x40004,
+ WBEM_S_NO_MORE_DATA = 0x40005,
+ WBEM_S_OPERATION_CANCELLED = 0x40006,
+ WBEM_S_PENDING = 0x40007,
+ WBEM_S_DUPLICATE_OBJECTS = 0x40008,
+ WBEM_S_ACCESS_DENIED = 0x40009,
+ WBEM_S_PARTIAL_RESULTS = 0x40010,
+ WBEM_S_SOURCE_NOT_AVAILABLE = 0x40017,
+ WBEM_E_FAILED = 0x80041001,
+ WBEM_E_NOT_FOUND = 0x80041002,
+ WBEM_E_ACCESS_DENIED = 0x80041003,
+ WBEM_E_PROVIDER_FAILURE = 0x80041004,
+ WBEM_E_TYPE_MISMATCH = 0x80041005,
+ WBEM_E_OUT_OF_MEMORY = 0x80041006,
+ WBEM_E_INVALID_CONTEXT = 0x80041007,
+ WBEM_E_INVALID_PARAMETER = 0x80041008,
+ WBEM_E_NOT_AVAILABLE = 0x80041009,
+ WBEM_E_CRITICAL_ERROR = 0x8004100a,
+ WBEM_E_INVALID_STREAM = 0x8004100b,
+ WBEM_E_NOT_SUPPORTED = 0x8004100c,
+ WBEM_E_INVALID_SUPERCLASS = 0x8004100d,
+ WBEM_E_INVALID_NAMESPACE = 0x8004100e,
+ WBEM_E_INVALID_OBJECT = 0x8004100f,
+ WBEM_E_INVALID_CLASS = 0x80041010,
+ WBEM_E_PROVIDER_NOT_FOUND = 0x80041011,
+ WBEM_E_INVALID_PROVIDER_REGISTRATION = 0x80041012,
+ WBEM_E_PROVIDER_LOAD_FAILURE = 0x80041013,
+ WBEM_E_INITIALIZATION_FAILURE = 0x80041014,
+ WBEM_E_TRANSPORT_FAILURE = 0x80041015,
+ WBEM_E_INVALID_OPERATION = 0x80041016,
+ WBEM_E_INVALID_QUERY = 0x80041017,
+ WBEM_E_INVALID_QUERY_TYPE = 0x80041018,
+ WBEM_E_ALREADY_EXISTS = 0x80041019,
+ WBEM_E_OVERRIDE_NOT_ALLOWED = 0x8004101a,
+ WBEM_E_PROPAGATED_QUALIFIER = 0x8004101b,
+ WBEM_E_PROPAGATED_PROPERTY = 0x8004101c,
+ WBEM_E_UNEXPECTED = 0x8004101d,
+ WBEM_E_ILLEGAL_OPERATION = 0x8004101e,
+ WBEM_E_CANNOT_BE_KEY = 0x8004101f,
+ WBEM_E_INCOMPLETE_CLASS = 0x80041020,
+ WBEM_E_INVALID_SYNTAX = 0x80041021,
+ WBEM_E_NONDECORATED_OBJECT = 0x80041022,
+ WBEM_E_READ_ONLY = 0x80041023,
+ WBEM_E_PROVIDER_NOT_CAPABLE = 0x80041024,
+ WBEM_E_CLASS_HAS_CHILDREN = 0x80041025,
+ WBEM_E_CLASS_HAS_INSTANCES = 0x80041026,
+ WBEM_E_QUERY_NOT_IMPLEMENTED = 0x80041027,
+ WBEM_E_ILLEGAL_NULL = 0x80041028,
+ WBEM_E_INVALID_QUALIFIER_TYPE = 0x80041029,
+ WBEM_E_INVALID_PROPERTY_TYPE = 0x8004102a,
+ WBEM_E_VALUE_OUT_OF_RANGE = 0x8004102b,
+ WBEM_E_CANNOT_BE_SINGLETON = 0x8004102c,
+ WBEM_E_INVALID_CIM_TYPE = 0x8004102d,
+ WBEM_E_INVALID_METHOD = 0x8004102e,
+ WBEM_E_INVALID_METHOD_PARAMETERS = 0x8004102f,
+ WBEM_E_SYSTEM_PROPERTY = 0x80041030,
+ WBEM_E_INVALID_PROPERTY = 0x80041031,
+ WBEM_E_CALL_CANCELLED = 0x80041032,
+ WBEM_E_SHUTTING_DOWN = 0x80041033,
+ WBEM_E_PROPAGATED_METHOD = 0x80041034,
+ WBEM_E_UNSUPPORTED_PARAMETER = 0x80041035,
+ WBEM_E_MISSING_PARAMETER_ID = 0x80041036,
+ WBEM_E_INVALID_PARAMETER_ID = 0x80041037,
+ WBEM_E_NONCONSECUTIVE_PARAMETER_IDS = 0x80041038,
+ WBEM_E_PARAMETER_ID_ON_RETVAL = 0x80041039,
+ WBEM_E_INVALID_OBJECT_PATH = 0x8004103a,
+ WBEM_E_OUT_OF_DISK_SPACE = 0x8004103b,
+ WBEM_E_BUFFER_TOO_SMALL = 0x8004103c,
+ WBEM_E_UNSUPPORTED_PUT_EXTENSION = 0x8004103d,
+ WBEM_E_UNKNOWN_OBJECT_TYPE = 0x8004103e,
+ WBEM_E_UNKNOWN_PACKET_TYPE = 0x8004103f,
+ WBEM_E_MARSHAL_VERSION_MISMATCH = 0x80041040,
+ WBEM_E_MARSHAL_INVALID_SIGNATURE = 0x80041041,
+ WBEM_E_INVALID_QUALIFIER = 0x80041042,
+ WBEM_E_INVALID_DUPLICATE_PARAMETER = 0x80041043,
+ WBEM_E_TOO_MUCH_DATA = 0x80041044,
+ WBEM_E_SERVER_TOO_BUSY = 0x80041045,
+ WBEM_E_INVALID_FLAVOR = 0x80041046,
+ WBEM_E_CIRCULAR_REFERENCE = 0x80041047,
+ WBEM_E_UNSUPPORTED_CLASS_UPDATE = 0x80041048,
+ WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE = 0x80041049,
+ WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE = 0x80041050,
+ WBEM_E_TOO_MANY_PROPERTIES = 0x80041051,
+ WBEM_E_UPDATE_TYPE_MISMATCH = 0x80041052,
+ WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED = 0x80041053,
+ WBEM_E_UPDATE_PROPAGATED_METHOD = 0x80041054,
+ WBEM_E_METHOD_NOT_IMPLEMENTED = 0x80041055,
+ WBEM_E_METHOD_DISABLED = 0x80041056,
+ WBEM_E_REFRESHER_BUSY = 0x80041057,
+ WBEM_E_UNPARSABLE_QUERY = 0x80041058,
+ WBEM_E_NOT_EVENT_CLASS = 0x80041059,
+ WBEM_E_MISSING_GROUP_WITHIN = 0x8004105a,
+ WBEM_E_MISSING_AGGREGATION_LIST = 0x8004105b,
+ WBEM_E_PROPERTY_NOT_AN_OBJECT = 0x8004105c,
+ WBEM_E_AGGREGATING_BY_OBJECT = 0x8004105d,
+ WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY = 0x8004105f,
+ WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING = 0x80041060,
+ WBEM_E_QUEUE_OVERFLOW = 0x80041061,
+ WBEM_E_PRIVILEGE_NOT_HELD = 0x80041062,
+ WBEM_E_INVALID_OPERATOR = 0x80041063,
+ WBEM_E_LOCAL_CREDENTIALS = 0x80041064,
+ WBEM_E_CANNOT_BE_ABSTRACT = 0x80041065,
+ WBEM_E_AMENDED_OBJECT = 0x80041066,
+ WBEM_E_CLIENT_TOO_SLOW = 0x80041067,
+ WBEM_E_NULL_SECURITY_DESCRIPTOR = 0x80041068,
+ WBEM_E_TIMED_OUT = 0x80041069,
+ WBEM_E_INVALID_ASSOCIATION = 0x8004106a,
+ WBEM_E_AMBIGUOUS_OPERATION = 0x8004106b,
+ WBEM_E_QUOTA_VIOLATION = 0x8004106c,
+ WBEM_E_RESERVED_001 = 0x8004106d,
+ WBEM_E_RESERVED_002 = 0x8004106e,
+ WBEM_E_UNSUPPORTED_LOCALE = 0x8004106f,
+ WBEM_E_HANDLE_OUT_OF_DATE = 0x80041070,
+ WBEM_E_CONNECTION_FAILED = 0x80041071,
+ WBEM_E_INVALID_HANDLE_REQUEST = 0x80041072,
+ WBEM_E_PROPERTY_NAME_TOO_WIDE = 0x80041073,
+ WBEM_E_CLASS_NAME_TOO_WIDE = 0x80041074,
+ WBEM_E_METHOD_NAME_TOO_WIDE = 0x80041075,
+ WBEM_E_QUALIFIER_NAME_TOO_WIDE = 0x80041076,
+ WBEM_E_RERUN_COMMAND = 0x80041077,
+ WBEM_E_DATABASE_VER_MISMATCH = 0x80041078,
+ WBEM_E_VETO_DELETE = 0x80041079,
+ WBEM_E_VETO_PUT = 0x8004107a,
+ WBEM_E_INVALID_LOCALE = 0x80041080,
+ WBEM_E_PROVIDER_SUSPENDED = 0x80041081,
+ WBEM_E_SYNCHRONIZATION_REQUIRED = 0x80041082,
+ WBEM_E_NO_SCHEMA = 0x80041083,
+ WBEM_E_PROVIDER_ALREADY_REGISTERED = 0x80041084,
+ WBEM_E_PROVIDER_NOT_REGISTERED = 0x80041085,
+ WBEM_E_FATAL_TRANSPORT_ERROR = 0x80041086,
+ WBEM_E_ENCRYPTED_CONNECTION_REQUIRED = 0x80041087,
+ WBEM_E_PROVIDER_TIMED_OUT = 0x80041088,
+ WBEM_E_NO_KEY = 0x80041089,
+ WBEM_E_PROVIDER_DISABLED = 0x8004108a
+} WBEMSTATUS;
+
+typedef [v1_enum] enum tag_WBEM_STATUS_TYPE
+{
+ WBEM_STATUS_COMPLETE = 0,
+ WBEM_STATUS_REQUIREMENTS = 1,
+ WBEM_STATUS_PROGRESS = 2
+} WBEM_STATUS_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE
+{
+ WBEM_NO_WAIT = 0,
+ WBEM_INFINITE = 0xffffffff
+} WBEM_TIMEOUT_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_CONDITION_FLAG_TYPE
+{
+ WBEM_FLAG_ALWAYS = 0,
+ WBEM_FLAG_ONLY_IF_TRUE = 0x1,
+ WBEM_FLAG_ONLY_IF_FALSE = 0x2,
+ WBEM_FLAG_ONLY_IF_IDENTICAL = 0x3,
+ WBEM_MASK_PRIMARY_CONDITION = 0x3,
+ WBEM_FLAG_KEYS_ONLY = 0x4,
+ WBEM_FLAG_REFS_ONLY = 0x8,
+ WBEM_FLAG_LOCAL_ONLY = 0x10,
+ WBEM_FLAG_PROPAGATED_ONLY = 0x20,
+ WBEM_FLAG_SYSTEM_ONLY = 0x30,
+ WBEM_FLAG_NONSYSTEM_ONLY = 0x40,
+ WBEM_MASK_CONDITION_ORIGIN = 0x70,
+ WBEM_FLAG_CLASS_OVERRIDES_ONLY = 0x100,
+ WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200,
+ WBEM_MASK_CLASS_CONDITION = 0x300
+} WBEM_CONDITION_FLAG_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_FLAVOR_TYPE
+{
+ WBEM_FLAVOR_DONT_PROPAGATE = 0,
+ WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE = 0x1,
+ WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS = 0x2,
+ WBEM_FLAVOR_MASK_PROPAGATION = 0xf,
+ WBEM_FLAVOR_OVERRIDABLE = 0,
+ WBEM_FLAVOR_NOT_OVERRIDABLE = 0x10,
+ WBEM_FLAVOR_MASK_PERMISSIONS = 0x10,
+ WBEM_FLAVOR_ORIGIN_LOCAL = 0,
+ WBEM_FLAVOR_ORIGIN_PROPAGATED = 0x20,
+ WBEM_FLAVOR_ORIGIN_SYSTEM = 0x40,
+ WBEM_FLAVOR_MASK_ORIGIN = 0x60,
+ WBEM_FLAVOR_NOT_AMENDED = 0,
+ WBEM_FLAVOR_AMENDED = 0x80,
+ WBEM_FLAVOR_MASK_AMENDED = 0x80
+} WBEM_FLAVOR_TYPE;
+
+typedef [v1_enum] enum tag_WBEM_GENUS_TYPE
+{
+ WBEM_GENUS_CLASS = 1,
+ WBEM_GENUS_INSTANCE = 2
+} WBEM_GENUS_TYPE;
+
+typedef [v1_enum] enum tag_CIMTYPE_ENUMERATION
+{
+ CIM_ILLEGAL = 0xfff,
+ CIM_EMPTY = 0,
+ CIM_SINT16 = 2,
+ CIM_SINT32 = 3,
+ CIM_REAL32 = 4,
+ CIM_REAL64 = 5,
+ CIM_STRING = 8,
+ CIM_BOOLEAN = 11,
+ CIM_OBJECT = 13,
+ CIM_SINT8 = 16,
+ CIM_UINT8 = 17,
+ CIM_UINT16 = 18,
+ CIM_UINT32 = 19,
+ CIM_SINT64 = 20,
+ CIM_UINT64 = 21,
+ CIM_DATETIME = 101,
+ CIM_REFERENCE = 102,
+ CIM_CHAR16 = 103,
+ CIM_FLAG_ARRAY = 0x2000
+} CIMTYPE_ENUMERATION;
+
+typedef long CIMTYPE;
+
+[
+ object,
+ restricted,
+ local,
+ uuid(dc12a687-737f-11cf-884d-00aa004b2e24),
+ pointer_default(unique)
+]
+interface IWbemLocator : IUnknown
+{
+ HRESULT ConnectServer(
+ [in] const BSTR strNetworkResource,
+ [in] const BSTR strUser,
+ [in] const BSTR strPassword,
+ [in] const BSTR strLocale,
+ [in] LONG lSecurityFlags,
+ [in] const BSTR strAuthority,
+ [in] IWbemContext *pCtx,
+ [out] IWbemServices **ppNamespace);
+};
+
+[
+ object,
+ local,
+ uuid(eb87e1bc-3233-11d2-aec9-00c04fb68820)
+]
+interface IWbemStatusCodeText : IUnknown
+{
+ HRESULT GetErrorCodeText(
+ [in] HRESULT hRes,
+ [in] LCID LocaleId,
+ [in] LONG lFlags,
+ [out] BSTR *MessageText);
+
+ HRESULT GetFacilityCodeText(
+ [in] HRESULT hRes,
+ [in] LCID LocaleId,
+ [in] LONG lFlags,
+ [out] BSTR *MessageText);
+};
+
+[
+ object,
+ restricted,
+ uuid(7c857801-7381-11cf-884d-00aa004b2e24)
+]
+interface IWbemObjectSink : IUnknown
+{
+ HRESULT Indicate(
+ [in] long lObjectCount,
+ [in, size_is(lObjectCount)] IWbemClassObject **apObjArray);
+
+ HRESULT SetStatus(
+ [in] long lFlags,
+ [in] HRESULT hResult,
+ [in] BSTR strParam,
+ [in] IWbemClassObject *pObjParam);
+};
+
+typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE
+{
+ WBEM_FLAG_RETURN_WBEM_COMPLETE = 0,
+ WBEM_FLAG_BIDIRECTIONAL = 0,
+ WBEM_FLAG_RETURN_ERROR_OBJECT = 0,
+ WBEM_FLAG_DONT_SEND_STATUS = 0,
+ WBEM_FLAG_SEND_ONLY_SELECTED = 0,
+ WBEM_FLAG_RETURN_IMMEDIATELY = 0x10,
+ WBEM_FLAG_FORWARD_ONLY = 0x20,
+ WBEM_FLAG_NO_ERROR_OBJECT = 0x40,
+ WBEM_FLAG_SEND_STATUS = 0x80,
+ WBEM_FLAG_ENSURE_LOCATABLE = 0x100,
+ WBEM_FLAG_DIRECT_READ = 0x200,
+ WBEM_MASK_RESERVED_FLAGS = 0x1f000,
+ WBEM_FLAG_USE_AMENDED_QUALIFIERS = 0x20000,
+ WBEM_FLAG_STRONG_VALIDATION = 0x100000
+} WBEM_GENERIC_FLAG_TYPE;
+
+[
+ object,
+ restricted,
+ uuid(9556dc99-828c-11cf-a37e-00aa003240c7),
+ pointer_default(unique)
+]
+interface IWbemServices : IUnknown
+{
+ HRESULT OpenNamespace(
+ [in] const BSTR strNamespace,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IWbemServices **ppWorkingNamespace,
+ [out] IWbemCallResult **ppResult);
+
+ HRESULT CancelAsyncCall(
+ [in] IWbemObjectSink *pSink);
+
+ HRESULT QueryObjectSink(
+ [in] long lFlags,
+ [out] IWbemObjectSink **ppResponseHandler);
+
+ HRESULT GetObject(
+ [in] const BSTR strObjectPath,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IWbemClassObject **ppObject,
+ [out] IWbemCallResult **ppCallResult);
+
+ HRESULT GetObjectAsync(
+ [in] const BSTR strObjectPath,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT PutClass(
+ [in] IWbemClassObject *pObject,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IWbemCallResult **ppCallResult);
+
+ HRESULT PutClassAsync(
+ [in] IWbemClassObject *pObject,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT DeleteClass(
+ [in] const BSTR strClass,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IWbemCallResult **ppCallResult);
+
+ HRESULT DeleteClassAsync(
+ [in] const BSTR strClass,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT CreateClassEnum(
+ [in] const BSTR strSuperclass,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IEnumWbemClassObject **ppEnum);
+
+ HRESULT CreateClassEnumAsync(
+ [in] const BSTR strSuperclass,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT PutInstance(
+ [in] IWbemClassObject *pInst,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IWbemCallResult **ppCallResult);
+
+ HRESULT PutInstanceAsync(
+ [in] IWbemClassObject *pInst,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT DeleteInstance(
+ [in] const BSTR strObjectPath,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IWbemCallResult **ppCallResult);
+
+ HRESULT DeleteInstanceAsync(
+ [in] const BSTR strObjectPath,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT CreateInstanceEnum(
+ [in] const BSTR strFilter,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IEnumWbemClassObject **ppEnum);
+
+ HRESULT CreateInstanceEnumAsync(
+ [in] const BSTR strFilter,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT ExecQuery(
+ [in] const BSTR strQueryLanguage,
+ [in] const BSTR strQuery,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IEnumWbemClassObject **ppEnum);
+
+ HRESULT ExecQueryAsync(
+ [in] const BSTR strQueryLanguage,
+ [in] const BSTR strQuery,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT ExecNotificationQuery(
+ [in] const BSTR strQueryLanguage,
+ [in] const BSTR strQuery,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [out] IEnumWbemClassObject **ppEnum);
+
+ HRESULT ExecNotificationQueryAsync(
+ [in] const BSTR strQueryLanguage,
+ [in] const BSTR strQuery,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemObjectSink *pResponseHandler);
+
+ HRESULT ExecMethod(
+ [in] const BSTR strObjectPath,
+ [in] const BSTR strMethodName,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemClassObject *pInParams,
+ [out] IWbemClassObject **ppOutParams,
+ [out] IWbemCallResult **ppCallResult);
+
+ HRESULT ExecMethodAsync(
+ [in] const BSTR strObjectPath,
+ [in] const BSTR strMethodName,
+ [in] long lFlags,
+ [in] IWbemContext *pCtx,
+ [in] IWbemClassObject *pInParams,
+ [in] IWbemObjectSink *pResponseHandler);
+};
+
+[
+ object,
+ restricted,
+ uuid(027947e1-d731-11ce-a357-000000000001)
+]
+interface IEnumWbemClassObject : IUnknown
+{
+ HRESULT Reset();
+
+ HRESULT Next(
+ [in] long lTimeout,
+ [in] ULONG uCount,
+ [out, size_is(uCount), length_is(*puReturned)] IWbemClassObject **apObjects,
+ [out] ULONG *puReturned);
+
+ HRESULT NextAsync(
+ [in] ULONG uCount,
+ [in] IWbemObjectSink *pSink);
+
+ HRESULT Clone(
+ [out] IEnumWbemClassObject **ppEnum);
+
+ HRESULT Skip(
+ [in] long lTimeout,
+ [in] ULONG nCount);
+};
+
+[
+ object,
+ restricted,
+ local,
+ uuid(dc12a681-737f-11cf-884d-00aa004b2e24)
+]
+interface IWbemClassObject : IUnknown
+{
+ HRESULT GetQualifierSet(
+ [out] IWbemQualifierSet **ppQualSet);
+
+ HRESULT Get(
+ [in,string] LPCWSTR wszName,
+ [in] long lFlags,
+ [out] VARIANT *pVal,
+ [out] CIMTYPE *pType,
+ [out] long *plFlavor);
+
+ HRESULT Put(
+ [in,string] LPCWSTR wszName,
+ [in] long lFlags,
+ [in] VARIANT *pVal,
+ [in] CIMTYPE Type);
+
+ HRESULT Delete(
+ [in,string] LPCWSTR wszName);
+
+ HRESULT GetNames(
+ [in,string] LPCWSTR wszQualifierName,
+ [in] long lFlags,
+ [in] VARIANT *pQualifierVal,
+ [out] SAFEARRAY **pNames);
+
+ HRESULT BeginEnumeration(
+ [in] long lEnumFlags);
+
+ HRESULT Next(
+ [in] long lFlags,
+ [out] BSTR *strName,
+ [out] VARIANT *pVal,
+ [out] CIMTYPE *pType,
+ [out] long *plFlavor);
+
+ HRESULT EndEnumeration();
+
+ HRESULT GetPropertyQualifierSet(
+ [in,string] LPCWSTR wszProperty,
+ [out] IWbemQualifierSet **ppQualSet);
+
+ HRESULT Clone(
+ [out] IWbemClassObject **ppCopy);
+
+ HRESULT GetObjectText(
+ [in] long lFlags,
+ [out] BSTR *pstrObjectText);
+
+ HRESULT SpawnDerivedClass(
+ [in] long lFlags,
+ [out] IWbemClassObject **ppNewClass);
+
+ HRESULT SpawnInstance(
+ [in] long lFlags,
+ [out] IWbemClassObject **ppNewInstance);
+
+ HRESULT CompareTo(
+ [in] long lFlags,
+ [in] IWbemClassObject *pCompareTo);
+
+ HRESULT GetPropertyOrigin(
+ [in,string] LPCWSTR wszName,
+ [out] BSTR *pstrClassName);
+
+ HRESULT InheritsFrom(
+ [in] LPCWSTR strAncestor);
+
+ HRESULT GetMethod(
+ [in,string] LPCWSTR wszName,
+ [in] long lFlags,
+ [out] IWbemClassObject **ppInSignature,
+ [out] IWbemClassObject **ppOutSignature);
+
+ HRESULT PutMethod(
+ [in,string] LPCWSTR wszName,
+ [in] long lFlags,
+ [in] IWbemClassObject *pInSignature,
+ [in] IWbemClassObject *pOutSignature);
+
+ HRESULT DeleteMethod(
+ [in,string] LPCWSTR wszName);
+
+ HRESULT BeginMethodEnumeration(
+ [in] long lEnumFlags);
+
+ HRESULT NextMethod(
+ [in] long lFlags,
+ [out] BSTR *pstrName,
+ [out] IWbemClassObject **ppInSignature,
+ [out] IWbemClassObject **ppOutSignature);
+
+ HRESULT EndMethodEnumeration();
+
+ HRESULT GetMethodQualifierSet(
+ [in,string] LPCWSTR wszMethod,
+ [out] IWbemQualifierSet **ppQualSet);
+
+ HRESULT GetMethodOrigin(
+ [in,string] LPCWSTR wszMethodName,
+ [out] BSTR *pstrClassName);
+}
+
+[
+ object,
+ restricted,
+ local,
+ uuid(dc12a680-737f-11cf-884d-00aa004b2e24)
+]
+interface IWbemQualifierSet : IUnknown
+{
+ HRESULT Get(
+ [in,string] LPCWSTR wszName,
+ [in] long lFlags,
+ [out] VARIANT *pVal,
+ [out] long *plFlavor);
+
+ HRESULT Put(
+ [in,string] LPCWSTR wszName,
+ [in] VARIANT *pVal,
+ [in] long lFlavor);
+
+ HRESULT Delete(
+ [in,string] LPCWSTR wszName);
+
+ HRESULT GetNames(
+ [in] long lFlags,
+ [out] SAFEARRAY **pNames);
+
+ HRESULT BeginEnumeration(
+ [in] long lFlags);
+
+ HRESULT Next(
+ [in] long lFlags,
+ [out] BSTR *pstrName,
+ [out] VARIANT *pVal,
+ [out] long *plFlavor);
+
+ HRESULT EndEnumeration();
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl
new file mode 100644
index 00000000..c810dba2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemdisp.idl
@@ -0,0 +1,1130 @@
+/*
+ * Copyright 2013 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "dispex.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ uuid(565783c6-cb41-11d1-8b02-00600806d9b6),
+ helpstring("Microsoft WMI Scripting V1.2 Library"),
+ lcid(0x0000),
+ version(1.2)
+]
+library WbemScripting
+{
+
+importlib("stdole2.tlb");
+
+interface ISWbemEventSource;
+interface ISWbemLocator;
+interface ISWbemMethod;
+interface ISWbemMethodSet;
+interface ISWbemNamedValue;
+interface ISWbemNamedValueSet;
+interface ISWbemObject;
+interface ISWbemObjectPath;
+interface ISWbemObjectSet;
+interface ISWbemPrivilege;
+interface ISWbemPrivilegeSet;
+interface ISWbemProperty;
+interface ISWbemPropertySet;
+interface ISWbemQualifier;
+interface ISWbemQualifierSet;
+interface ISWbemSecurity;
+interface ISWbemServices;
+
+[
+ object,
+ local,
+ uuid(27d54d92-0ebe-11d2-8b22-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemEventSource : IDispatch
+{
+ [ id(1) ]
+ HRESULT NextEvent(
+ [in] long iTimeoutMs,
+ [out, retval] ISWbemObject **objWbemObject);
+
+ [ id(2), propget ]
+ HRESULT Security_(
+ [out, retval] ISWbemSecurity **objWbemSecurity);
+};
+
+[
+ object,
+ local,
+ uuid(76a6415b-cb41-11d1-8b02-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ pointer_default(unique)
+]
+interface ISWbemLocator : IDispatch
+{
+ [ id(1) ]
+ HRESULT ConnectServer(
+ [in] BSTR strServer,
+ [in] BSTR strNamespace,
+ [in] BSTR strUser,
+ [in] BSTR strPassword,
+ [in] BSTR strLocale,
+ [in] BSTR strAuthority,
+ [in] long iSecurityFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemServices **objWbemServices);
+
+ [ id(2), propget ]
+ HRESULT Security_(
+ ISWbemSecurity **objWbemSecurity);
+};
+
+[
+ object,
+ local,
+ uuid(422e8e90-d955-11d1-8b09-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ pointer_default(unique),
+ nonextensible
+]
+interface ISWbemMethod : IDispatch
+{
+ [ id(1), propget ]
+ HRESULT Name(
+ [out, retval] BSTR *strName);
+
+ [ id(2), propget ]
+ HRESULT Origin(
+ [out, retval] BSTR *strOrigin);
+
+ [ id(3), propget ]
+ HRESULT InParameters(
+ [out, retval] ISWbemObject **objWbemInParameters);
+
+ [ id(4), propget ]
+ HRESULT OutParameters(
+ [out, retval] ISWbemObject **objWbemOutParameters);
+
+ [ id(5), propget ]
+ HRESULT Qualifiers_(
+ [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
+};
+
+[
+ object,
+ local,
+ uuid(c93ba292-d955-11d1-8b09-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemMethodSet : IDispatch
+{
+ [ id(DISPID_NEWENUM), propget, restricted ]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **pUnk);
+
+ [ id(DISPID_VALUE) ]
+ HRESULT Item(
+ [in] BSTR strName,
+ [in] long iFlags,
+ [out, retval] ISWbemMethod **objWbemMethod);
+
+ [ id(1), propget ]
+ HRESULT Count(
+ [out, retval] long *iCount);
+};
+
+[
+ object,
+ local,
+ uuid(76a64164-cb41-11d1-8b02-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation
+]
+interface ISWbemNamedValue : IDispatch
+{
+ [ id(DISPID_VALUE), propget ]
+ HRESULT Value(
+ [out, retval] VARIANT *varValue);
+
+ [ id(DISPID_VALUE), propput ]
+ HRESULT Value(
+ [in] VARIANT *varValue);
+
+ [ id(2), propget ]
+ HRESULT Name(
+ [out, retval] BSTR *strName);
+};
+
+[
+ object,
+ local,
+ uuid(cf2376ea-ce8c-11d1-8b05-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation
+]
+interface ISWbemNamedValueSet : IDispatch
+{
+ [ id(DISPID_NEWENUM), propget, restricted ]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **pUnk);
+
+ [ id(DISPID_VALUE) ]
+ HRESULT Item(
+ [in] BSTR strName,
+ [in] long iFlags,
+ [out, retval] ISWbemNamedValue **objWbemNamedValue);
+
+ [ id(1), propget ]
+ HRESULT Count(
+ [out, retval] long *iCount);
+
+ [ id(2) ]
+ HRESULT Add(
+ [in] BSTR strName,
+ [in] VARIANT *varValue,
+ [in] long iFlags,
+ [out, retval] ISWbemNamedValue **objWbemNamedValue);
+
+ [ id(3) ]
+ HRESULT Remove(
+ [in] BSTR strName,
+ [in] long iFlags);
+
+ [ id(4) ]
+ HRESULT Clone(
+ [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);
+
+ [ id(5) ]
+ HRESULT DeleteAll();
+};
+
+[
+ object,
+ local,
+ uuid(76A6415A-CB41-11d1-8B02-00600806D9B6),
+ dual,
+ hidden,
+ oleautomation
+]
+interface ISWbemObject : IDispatch
+{
+ [ id(1) ]
+ HRESULT Put_(
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectPath **objWbemObjectPath);
+
+ [ id(2) ]
+ HRESULT PutAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id (3) ]
+ HRESULT Delete_(
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet);
+
+ [ id (4) ]
+ HRESULT DeleteAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(5) ]
+ HRESULT Instances_(
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(6) ]
+ HRESULT InstancesAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(7) ]
+ HRESULT Subclasses_(
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(8) ]
+ HRESULT SubclassesAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(9) ]
+ HRESULT Associators_(
+ [in] BSTR strAssocClass,
+ [in] BSTR strResultClass,
+ [in] BSTR strResultRole,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredAssocQualifier,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(10) ]
+ HRESULT AssociatorsAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strAssocClass,
+ [in] BSTR strResultClass,
+ [in] BSTR strResultRole,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredAssocQualifier,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(11) ]
+ HRESULT References_(
+ [in] BSTR strResultClass,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(12) ]
+ HRESULT ReferencesAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strResultClass,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(13) ]
+ HRESULT ExecMethod_(
+ [in] BSTR strMethodName,
+ [in] IDispatch *objWbemInParameters,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObject **objWbemOutParameters);
+
+ [ id(14) ]
+ HRESULT ExecMethodAsync_(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strMethodName,
+ [in] IDispatch *objWbemInParameters,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(15) ]
+ HRESULT Clone_(
+ [out, retval] ISWbemObject **objWbemObject);
+
+ [ id(16) ]
+ HRESULT GetObjectText_(
+ [in] long iFlags,
+ [out, retval] BSTR *strObjectText);
+
+ [ id(17) ]
+ HRESULT SpawnDerivedClass_(
+ [in] long iFlags,
+ [out, retval] ISWbemObject **objWbemObject);
+
+ [ id(18) ]
+ HRESULT SpawnInstance_(
+ [in] long iFlags,
+ [out, retval] ISWbemObject **objWbemObject);
+
+ [ id(19) ]
+ HRESULT CompareTo_(
+ [in] IDispatch *objWbemObject,
+ [in] long iFlags,
+ [out, retval] VARIANT_BOOL *bResult);
+
+ [ id(20), propget ]
+ HRESULT Qualifiers_(
+ [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
+
+ [ id(21), propget ]
+ HRESULT Properties_(
+ [out, retval] ISWbemPropertySet **objWbemPropertySet);
+
+ [ id(22), propget ]
+ HRESULT Methods_(
+ [out, retval] ISWbemMethodSet **objWbemMethodSet);
+
+ [ id(23), propget ]
+ HRESULT Derivation_(
+ [out, retval] VARIANT *strClassNameArray);
+
+ [ id(24), propget ]
+ HRESULT Path_(
+ [out, retval] ISWbemObjectPath **objWbemObjectPath);
+
+ [ id(25), propget ]
+ HRESULT Security_(
+ [out, retval] ISWbemSecurity **objWbemSecurity);
+};
+
+[
+ object,
+ local,
+ uuid(5791bc27-ce9c-11d1-97bf-0000f81e849c),
+ dual,
+ hidden,
+ oleautomation,
+ pointer_default(unique)
+]
+interface ISWbemObjectPath : IDispatch
+{
+ [ id(DISPID_VALUE), propget ]
+ HRESULT Path(
+ [out, retval] BSTR *strPath);
+
+ [ id(DISPID_VALUE), propput ]
+ HRESULT Path(
+ [in] BSTR strPath);
+
+ [ id(1), propget ]
+ HRESULT RelPath(
+ [out, retval] BSTR *strRelPath);
+
+ [ id(1), propput ]
+ HRESULT RelPath(
+ [in] BSTR strRelPath);
+
+ [ id(2), propget ]
+ HRESULT Server(
+ [out, retval] BSTR *strServer);
+
+ [ id(2), propput ]
+ HRESULT Server(
+ [in] BSTR strServer);
+
+ [ id(3), propget ]
+ HRESULT Namespace(
+ [out, retval] BSTR *strNamespace);
+
+ [ id(3), propput ]
+ HRESULT Namespace(
+ [in] BSTR strNamespace);
+
+ [ id(4), propget ]
+ HRESULT ParentNamespace(
+ [out, retval] BSTR *strParentNamespace);
+
+ [ id(5), propget ]
+ HRESULT DisplayName(
+ [out, retval] BSTR *strDisplayName);
+
+ [ id(5), propput ]
+ HRESULT DisplayName(
+ [in] BSTR strDisplayName);
+
+ [ id(6), propget ]
+ HRESULT Class(
+ [out, retval] BSTR *strClass);
+
+ [ id(6), propput ]
+ HRESULT Class(
+ [in] BSTR strClass);
+
+ [ id(7), propget ]
+ HRESULT IsClass(
+ [out, retval] VARIANT_BOOL *bIsClass);
+
+ [ id(8) ]
+ HRESULT SetAsClass();
+
+ [ id(9), propget ]
+ HRESULT IsSingleton(
+ [out, retval] VARIANT_BOOL *bIsSingleton);
+
+ [ id(10) ]
+ HRESULT SetAsSingleton();
+
+ [ id(11), propget ]
+ HRESULT Keys(
+ [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);
+
+ [ id(12), propget ]
+ HRESULT Security_(
+ [out, retval] ISWbemSecurity **objWbemSecurity);
+
+ [ id(13), propget ]
+ HRESULT Locale(
+ [out, retval] BSTR *strLocale);
+
+ [ id(13), propput ]
+ HRESULT Locale(
+ [in] BSTR strLocale);
+
+ [ id(14), propget ]
+ HRESULT Authority(
+ [out, retval] BSTR *strAuthority);
+
+ [ id(14), propput ]
+ HRESULT Authority(
+ [in] BSTR strAuthority);
+};
+
+[
+ object,
+ local,
+ uuid(76a6415f-cb41-11d1-8b02-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemObjectSet : IDispatch
+{
+ [ id(DISPID_NEWENUM), propget, restricted ]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **pUnk);
+
+ [ id(DISPID_VALUE) ]
+ HRESULT Item(
+ [in] BSTR strObjectPath,
+ [in] long iFlags,
+ [out, retval] ISWbemObject **objWbemObject);
+
+ [ id(1), propget ]
+ HRESULT Count(
+ [out, retval] long *iCount);
+
+ [ id(4), propget ]
+ HRESULT Security_(
+ [out, retval] ISWbemSecurity **objWbemSecurity);
+
+ [ id(5) ]
+ HRESULT ItemIndex(
+ [in] long lIndex,
+ [out, retval] ISWbemObject **objWbemObject);
+};
+
+typedef
+[
+ v1_enum,
+ uuid(176d2f70-5af3-11d2-8b4a-00600806d9b6)
+]
+enum WbemPrivilegeEnum
+{
+ wbemPrivilegeCreateToken = 1,
+ wbemPrivilegePrimaryToken = 2,
+ wbemPrivilegeLockMemory = 3,
+ wbemPrivilegeIncreaseQuota = 4,
+ wbemPrivilegeMachineAccount = 5,
+ wbemPrivilegeTcb = 6,
+ wbemPrivilegeSecurity = 7,
+ wbemPrivilegeTakeOwnership = 8,
+ wbemPrivilegeLoadDriver = 9,
+ wbemPrivilegeSystemProfile = 10,
+ wbemPrivilegeSystemtime = 11,
+ wbemPrivilegeProfileSingleProcess = 12,
+ wbemPrivilegeIncreaseBasePriority = 13,
+ wbemPrivilegeCreatePagefile = 14,
+ wbemPrivilegeCreatePermanent = 15,
+ wbemPrivilegeBackup = 16,
+ wbemPrivilegeRestore = 17,
+ wbemPrivilegeShutdown = 18,
+ wbemPrivilegeDebug = 19,
+ wbemPrivilegeAudit = 20,
+ wbemPrivilegeSystemEnvironment = 21,
+ wbemPrivilegeChangeNotify = 22,
+ wbemPrivilegeRemoteShutdown = 23,
+ wbemPrivilegeUndock = 24,
+ wbemPrivilegeSyncAgent = 25,
+ wbemPrivilegeEnableDelegation = 26,
+ wbemPrivilegeManageVolume = 27
+} WbemPrivilegeEnum;
+
+[
+ object,
+ local,
+ uuid(26ee67bd-5804-11d2-8b4a-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemPrivilege : IDispatch
+{
+ [ id(DISPID_VALUE), propget ]
+ HRESULT IsEnabled(
+ [out, retval] VARIANT_BOOL *bIsEnabled);
+
+ [ id(DISPID_VALUE), propput ]
+ HRESULT IsEnabled(
+ [in] VARIANT_BOOL bIsEnabled);
+
+ [ id(1), propget ]
+ HRESULT Name(
+ [out, retval] BSTR *strDisplayName);
+
+ [ id(2), propget ]
+ HRESULT DisplayName(
+ [out, retval] BSTR *strDisplayName);
+
+ [ id(3), propget ]
+ HRESULT Identifier(
+ [out, retval] WbemPrivilegeEnum *iPrivilege);
+};
+
+[
+ object,
+ local,
+ uuid(26ee67bf-5804-11d2-8b4a-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemPrivilegeSet : IDispatch
+{
+ [ id(DISPID_NEWENUM), propget, restricted ]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **pUnk);
+
+ [ id(DISPID_VALUE) ]
+ HRESULT Item(
+ [in] WbemPrivilegeEnum iPrivilege,
+ [out, retval] ISWbemPrivilege **objWbemPrivilege);
+
+ [ id(1), propget ]
+ HRESULT Count(
+ [out, retval] long *iCount);
+
+ [ id(2) ]
+ HRESULT Add(
+ [in] WbemPrivilegeEnum iPrivilege,
+ [in] VARIANT_BOOL bIsEnabled,
+ [out, retval] ISWbemPrivilege **objWbemPrivilege);
+
+ [ id(3) ]
+ HRESULT Remove(
+ [in] WbemPrivilegeEnum iPrivilege);
+
+ [ id(4) ]
+ HRESULT DeleteAll();
+
+ [ id(5) ]
+ HRESULT AddAsString(
+ [in] BSTR strPrivilege,
+ [in] VARIANT_BOOL bIsEnabled,
+ [out, retval] ISWbemPrivilege **objWbemPrivilege);
+};
+
+typedef
+[
+ v1_enum,
+ uuid(4a249b7b-fc9a-11d1-8b1e-00600806d9b6),
+]
+enum WbemCimtypeEnum
+{
+ wbemCimtypeSint16 = 2,
+ wbemCimtypeSint32 = 3,
+ wbemCimtypeReal32 = 4,
+ wbemCimtypeReal64 = 5,
+ wbemCimtypeString = 8,
+ wbemCimtypeBoolean = 11,
+ wbemCimtypeObject = 13,
+ wbemCimtypeSint8 = 16,
+ wbemCimtypeUint8 = 17,
+ wbemCimtypeUint16 = 18,
+ wbemCimtypeUint32 = 19,
+ wbemCimtypeSint64 = 20,
+ wbemCimtypeUint64 = 21,
+ wbemCimtypeDatetime = 101,
+ wbemCimtypeReference = 102,
+ wbemCimtypeChar16 = 103
+} WbemCimtypeEnum;
+
+[
+ object,
+ local,
+ uuid(1a388f98-d4ba-11d1-8b09-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ pointer_default(unique)
+]
+interface ISWbemProperty : IDispatch
+{
+ [ id(DISPID_VALUE), propget ]
+ HRESULT Value(
+ [out, retval] VARIANT *varValue);
+
+ [ id(DISPID_VALUE), propput ]
+ HRESULT Value(
+ [in] VARIANT *varValue);
+
+ [ id(1), propget ]
+ HRESULT Name(
+ [out, retval] BSTR *strName);
+
+ [ id(2), propget ]
+ HRESULT IsLocal(
+ [out, retval] VARIANT_BOOL *bIsLocal);
+
+ [ id(3), propget ]
+ HRESULT Origin(
+ [out, retval] BSTR *strOrigin);
+
+ [ id(4), propget ]
+ HRESULT CIMType(
+ [out, retval] WbemCimtypeEnum *iCimType);
+
+ [ id(5), propget ]
+ HRESULT Qualifiers_(
+ [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
+
+ [ id(6), propget ]
+ HRESULT IsArray(
+ [out, retval] VARIANT_BOOL *bIsArray);
+};
+
+[
+ object,
+ local,
+ uuid(dea0a7b2-d4ba-11d1-8b09-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation
+]
+interface ISWbemPropertySet : IDispatch
+{
+ [ id(DISPID_NEWENUM), propget, restricted ]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **pUnk);
+
+ [ id(DISPID_VALUE) ]
+ HRESULT Item(
+ [in] BSTR strName,
+ [in] long iFlags,
+ [out, retval] ISWbemProperty **objWbemProperty);
+
+ [ id(1), propget ]
+ HRESULT Count(
+ [out, retval] long *iCount);
+
+ [ id(2) ]
+ HRESULT Add(
+ [in] BSTR strName,
+ [in] WbemCimtypeEnum iCIMType,
+ [in] VARIANT_BOOL bIsArray,
+ [in] long iFlags,
+ [out, retval] ISWbemProperty **objWbemProperty);
+
+ [ id(3) ]
+ HRESULT Remove(
+ [in] BSTR strName,
+ [in] long iFlags);
+};
+
+[
+ object,
+ local,
+ uuid(79b05932-d3b7-11d1-8b06-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible,
+ pointer_default(unique)
+]
+interface ISWbemQualifier : IDispatch
+{
+ [ id(DISPID_VALUE), propget ]
+ HRESULT Value(
+ [out, retval] VARIANT *varValue);
+
+ [ id(DISPID_VALUE), propput ]
+ HRESULT Value(
+ [in] VARIANT *varValue);
+
+ [ id(1), propget ]
+ HRESULT Name(
+ [out, retval] BSTR *strName);
+
+ [ id(2), propget ]
+ HRESULT IsLocal(
+ [out, retval] VARIANT_BOOL *bIsLocal);
+
+ [ id(3), propget ]
+ HRESULT PropagatesToSubclass(
+ [out, retval] VARIANT_BOOL *bPropagatesToSubclass);
+
+ [ id(3), propput ]
+ HRESULT PropagatesToSubclass(
+ [in] VARIANT_BOOL bPropagatesToSubclass);
+
+ [ id(4), propget ]
+ HRESULT PropagatesToInstance(
+ [out, retval] VARIANT_BOOL *bPropagatesToInstance);
+
+ [ id(4), propput ]
+ HRESULT PropagatesToInstance(
+ [in] VARIANT_BOOL bPropagatesToInstance);
+
+ [ id(5), propget ]
+ HRESULT IsOverridable(
+ [out, retval] VARIANT_BOOL *bIsOverridable);
+
+ [ id(5), propput ]
+ HRESULT IsOverridable(
+ [in] VARIANT_BOOL bIsOverridable);
+
+ [ id(6), propget ]
+ HRESULT IsAmended(
+ [out, retval] VARIANT_BOOL *bIsAmended);
+};
+
+[
+ object,
+ local,
+ uuid(9b16ed16-d3df-11d1-8b08-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemQualifierSet : IDispatch
+{
+ [ id(DISPID_NEWENUM), propget, restricted ]
+ HRESULT _NewEnum(
+ [out, retval] IUnknown **pUnk);
+
+ [ id(DISPID_VALUE) ]
+ HRESULT Item(
+ [in] BSTR name,
+ [in] long iFlags,
+ [out, retval] ISWbemQualifier **objWbemQualifier);
+
+ [ id(1), propget ]
+ HRESULT Count(
+ [out, retval] long *iCount);
+
+ [ id(2) ]
+ HRESULT Add(
+ [in] BSTR strName,
+ [in] VARIANT *varVal,
+ [in] VARIANT_BOOL bPropagatesToSubclass,
+ [in] VARIANT_BOOL bPropagatesToInstance,
+ [in] VARIANT_BOOL bIsOverridable,
+ [in] long iFlags,
+ [out, retval] ISWbemQualifier **objWbemQualifier);
+
+ [ id(3) ]
+ HRESULT Remove(
+ [in] BSTR strName,
+ [in] long iFlags);
+};
+
+typedef
+[
+ v1_enum,
+ uuid(b54d66e8-2287-11d2-8b33-00600806d9b6)
+]
+enum WbemImpersonationLevelEnum
+{
+ wbemImpersonationLevelAnonymous = 1,
+ wbemImpersonationLevelIdentify = 2,
+ wbemImpersonationLevelImpersonate = 3,
+ wbemImpersonationLevelDelegate = 4
+} WbemImpersonationLevelEnum;
+
+typedef
+[
+ v1_enum,
+ uuid(b54d66e7-2287-11d2-8b33-00600806d9b6)
+]
+enum WbemAuthenticationLevelEnum
+{
+ wbemAuthenticationLevelDefault = 0,
+ wbemAuthenticationLevelNone = 1,
+ wbemAuthenticationLevelConnect = 2,
+ wbemAuthenticationLevelCall = 3,
+ wbemAuthenticationLevelPkt = 4,
+ wbemAuthenticationLevelPktIntegrity = 5,
+ wbemAuthenticationLevelPktPrivacy = 6
+} WbemAuthenticationLevelEnum;
+
+[
+ object,
+ local,
+ uuid(b54d66e6-2287-11d2-8b33-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ nonextensible
+]
+interface ISWbemSecurity : IDispatch
+{
+ [ id(1), propget ]
+ HRESULT ImpersonationLevel(
+ [out, retval] WbemImpersonationLevelEnum *iImpersonationLevel);
+
+ [ id(1), propput ]
+ HRESULT ImpersonationLevel(
+ [in] WbemImpersonationLevelEnum iImpersonationLevel);
+
+ [ id(2), propget ]
+ HRESULT AuthenticationLevel(
+ [out, retval] WbemAuthenticationLevelEnum *iAuthenticationLevel);
+
+ [ id(2), propput ]
+ HRESULT AuthenticationLevel(
+ [in] WbemAuthenticationLevelEnum iAuthenticationLevel);
+
+ [ id(3), propget ]
+ HRESULT Privileges(
+ [out, retval] ISWbemPrivilegeSet **objWbemPrivilegeSet);
+};
+
+[
+ object,
+ local,
+ uuid(76a6415c-cb41-11d1-8b02-00600806d9b6),
+ dual,
+ hidden,
+ oleautomation,
+ pointer_default(unique)
+]
+interface ISWbemServices : IDispatch
+{
+ [ id(1) ]
+ HRESULT Get(
+ [in] BSTR strObjectPath,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObject **objWbemObject);
+
+ [ id(2) ]
+ HRESULT GetAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strObjectPath,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(3) ]
+ HRESULT Delete(
+ [in] BSTR strObjectPath,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet);
+
+ [ id(4) ]
+ HRESULT DeleteAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strObjectPath,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(5) ]
+ HRESULT InstancesOf(
+ [in] BSTR strClass,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(6) ]
+ HRESULT InstancesOfAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strClass,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(7) ]
+ HRESULT SubclassesOf(
+ [in] BSTR strSuperclass,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(8) ]
+ HRESULT SubclassesOfAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strSuperclass,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(9) ]
+ HRESULT ExecQuery(
+ [in] BSTR strQuery,
+ [in] BSTR strQueryLanguage,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(10) ]
+ HRESULT ExecQueryAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strQuery,
+ [in] BSTR strQueryLanguage,
+ [in] long lFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(11) ]
+ HRESULT AssociatorsOf(
+ [in] BSTR strObjectPath,
+ [in] BSTR strAssocClass,
+ [in] BSTR strResultClass,
+ [in] BSTR strResultRole,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredAssocQualifier,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(12) ]
+ HRESULT AssociatorsOfAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strObjectPath,
+ [in] BSTR strAssocClass,
+ [in] BSTR strResultClass,
+ [in] BSTR strResultRole,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredAssocQualifier,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(13) ]
+ HRESULT ReferencesTo(
+ [in] BSTR strObjectPath,
+ [in] BSTR strResultClass,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObjectSet **objWbemObjectSet);
+
+ [ id(14) ]
+ HRESULT ReferencesToAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strObjectPath,
+ [in] BSTR strResultClass,
+ [in] BSTR strRole,
+ [in] VARIANT_BOOL bClassesOnly,
+ [in] VARIANT_BOOL bSchemaOnly,
+ [in] BSTR strRequiredQualifier,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(15) ]
+ HRESULT ExecNotificationQuery(
+ [in] BSTR strQuery,
+ [in] BSTR strQueryLanguage,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemEventSource **objWbemEventSource);
+
+ [ id(16) ]
+ HRESULT ExecNotificationQueryAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strQuery,
+ [in] BSTR strQueryLanguage,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(17) ]
+ HRESULT ExecMethod(
+ [in] BSTR strObjectPath,
+ [in] BSTR strMethodName,
+ [in] IDispatch *objWbemInParameters,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [out, retval] ISWbemObject **objWbemOutParameters);
+
+ [ id(18) ]
+ HRESULT ExecMethodAsync(
+ [in] IDispatch *objWbemSink,
+ [in] BSTR strObjectPath,
+ [in] BSTR strMethodName,
+ [in] IDispatch *objWbemInParameters,
+ [in] long iFlags,
+ [in] IDispatch *objWbemNamedValueSet,
+ [in] IDispatch *objWbemAsyncContext);
+
+ [ id(19), propget ]
+ HRESULT Security_(
+ [out, retval] ISWbemSecurity **objWbemSecurity);
+};
+
+[
+ threading(apartment),
+ uuid(76a64158-cb41-11d1-8b02-00600806d9b6),
+ progid("WbemScripting.SWbemLocator.1"),
+ vi_progid("WbemScripting.SWbemLocator")
+]
+coclass SWbemLocator
+{
+ interface ISWbemLocator;
+};
+
+}; /* WbemScripting */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl
new file mode 100644
index 00000000..7c59baa0
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wbemprov.idl
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2012 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+[
+ uuid(092df710-7010-11d1-ad90-00c04fd8fdff)
+]
+library WbemProviders_v1
+{
+ [
+ uuid(cb8555cc-9128-11d1-ad9b-00c04fd8fdff)
+ ]
+ coclass WbemAdministrativeLocator { interface IWbemLocator; }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h
new file mode 100644
index 00000000..4083903f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/werapi.h
@@ -0,0 +1,199 @@
+/*
+ * Windows Error Reporting definitions
+ *
+ * Copyright (C) 2010 Louis Lenders
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WERAPI_H
+#define __WINE_WERAPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Only 10 parameter are allowed in WerReportSetParameter */
+#define WER_MAX_PARAM_COUNT 10
+#define WER_P0 0
+#define WER_P1 1
+#define WER_P2 2
+#define WER_P3 3
+#define WER_P4 4
+#define WER_P5 5
+#define WER_P6 6
+#define WER_P7 7
+#define WER_P8 8
+#define WER_P9 9
+
+/* Flags for WerReportSubmit */
+#define WER_SUBMIT_HONOR_RECOVERY 0x0001
+#define WER_SUBMIT_HONOR_RESTART 0x0002
+#define WER_SUBMIT_QUEUE 0x0004
+#define WER_SUBMIT_SHOW_DEBUG 0x0008
+#define WER_SUBMIT_ADD_REGISTERED_DATA 0x0010
+#define WER_SUBMIT_OUTOFPROCESS 0x0020
+#define WER_SUBMIT_NO_CLOSE_UI 0x0040
+#define WER_SUBMIT_NO_QUEUE 0x0080
+#define WER_SUBMIT_NO_ARCHIVE 0x0100
+#define WER_SUBMIT_START_MINIMIZED 0x0200
+#define WER_SUBMIT_OUTOFPROCESS_ASYNC 0x0400
+#define WER_SUBMIT_BYPASS_DATA_THROTTLING 0x0800
+#define WER_SUBMIT_ARCHIVE_PARAMETERS_ONLY 0x1000
+#define WER_SUBMIT_REPORT_MACHINE_ID 0x2000
+
+#define WER_MAX_PREFERRED_MODULES 128
+#define WER_MAX_PREFERRED_MODULES_BUFFER 256
+
+/* #### */
+
+typedef HANDLE HREPORT;
+
+typedef enum _WER_CONSENT
+{
+ WerConsentNotAsked = 1,
+ WerConsentApproved,
+ WerConsentDenied,
+ WerConsentAlwaysPrompt,
+ WerConsentMax
+} WER_CONSENT;
+
+typedef enum _WER_FILE_TYPE
+{
+ WerFileTypeMicrodump = 1,
+ WerFileTypeMinidump,
+ WerFileTypeHeapdump,
+ WerFileTypeUserDocument,
+ WerFileTypeOther,
+ WerFileTypeMax
+} WER_FILE_TYPE;
+
+typedef enum _WER_REGISTER_FILE_TYPE
+{
+ WerRegFileTypeUserDocument = 1,
+ WerRegFileTypeOther = 2,
+ WerRegFileTypeMax
+} WER_REGISTER_FILE_TYPE;
+
+typedef struct _WER_REPORT_INFORMATION
+{
+ DWORD dwSize;
+ HANDLE hProcess;
+ WCHAR wzConsentKey[64];
+ WCHAR wzFriendlyEventName[128];
+ WCHAR wzApplicationName[128];
+ WCHAR wzApplicationPath[MAX_PATH];
+ WCHAR wzDescription[512];
+ HWND hwndParent;
+} WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION;
+
+
+typedef enum _WER_REPORT_TYPE
+{
+ WerReportNonCritical = 0,
+ WerReportCritical,
+ WerReportApplicationCrash,
+ WerReportApplicationHang,
+ WerReportKernel,
+ WerReportInvalid
+} WER_REPORT_TYPE;
+
+typedef enum _WER_SUBMIT_RESULT
+{
+ WerReportQueued = 1,
+ WerReportUploaded,
+ WerReportDebug,
+ WerReportFailed,
+ WerDisabled,
+ WerReportCancelled,
+ WerDisabledQueue,
+ WerReportAsync,
+ WerCustomAction
+} WER_SUBMIT_RESULT, *PWER_SUBMIT_RESULT;
+
+typedef enum _WER_DUMP_TYPE
+{
+ WerDumpTypeMicroDump = 1,
+ WerDumpTypeMiniDump,
+ WerDumpTypeHeapDump,
+ WerDumpTypeMax
+} WER_DUMP_TYPE;
+
+typedef enum _WER_REPORT_UI
+{
+ WerUIAdditionalDataDlgHeader = 1,
+ WerUIIconFilePath = 2,
+ WerUIConsentDlgHeader = 3,
+ WerUIConsentDlgBody = 4,
+ WerUIOnlineSolutionCheckText = 5,
+ WerUIOfflineSolutionCheckText = 6,
+ WerUICloseText = 7,
+ WerUICloseDlgHeader = 8,
+ WerUICloseDlgBody = 9,
+ WerUICloseDlgButtonText = 10,
+ WerUICustomActionButtonText = 11,
+ WerUIMax
+} WER_REPORT_UI;
+
+/* #### */
+
+typedef struct _WER_DUMP_CUSTOM_OPTIONS
+{
+ DWORD dwSize;
+ DWORD dwMask;
+ DWORD dwDumpFlags;
+ BOOL bOnlyThisThread;
+ DWORD dwExceptionThreadFlags;
+ DWORD dwOtherThreadFlags;
+ DWORD dwExceptionThreadExFlags;
+ DWORD dwOtherThreadExFlags;
+ DWORD dwPreferredModuleFlags;
+ DWORD dwOtherModuleFlags;
+ WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER];
+
+} WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS;
+
+typedef struct _WER_EXCEPTION_INFORMATION
+{
+ PEXCEPTION_POINTERS pExceptionPointers;
+ BOOL bClientPointers;
+} WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION;
+
+/* #### */
+
+HRESULT WINAPI WerAddExcludedApplication(PCWSTR, BOOL);
+HRESULT WINAPI WerRegisterFile(PCWSTR file, WER_REGISTER_FILE_TYPE regfiletype, DWORD flags);
+HRESULT WINAPI WerRemoveExcludedApplication(PCWSTR, BOOL);
+HRESULT WINAPI WerReportAddFile(HREPORT, PCWSTR, WER_FILE_TYPE, DWORD);
+HRESULT WINAPI WerReportCloseHandle(HREPORT);
+HRESULT WINAPI WerReportCreate(PCWSTR, WER_REPORT_TYPE, PWER_REPORT_INFORMATION, HREPORT*);
+HRESULT WINAPI WerReportSetParameter(HREPORT, DWORD, PCWSTR, PCWSTR);
+HRESULT WINAPI WerReportSetUIOption(HREPORT, WER_REPORT_UI, PCWSTR);
+HRESULT WINAPI WerReportSubmit(HREPORT, WER_CONSENT, DWORD, PWER_SUBMIT_RESULT);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WERAPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h
new file mode 100644
index 00000000..347179f1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wfext.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WFEXT_H
+#define __WINE_WFEXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+LONG WINAPI FMExtensionProc(HWND,WORD,LONG);
+LONG WINAPI FMExtensionProcW(HWND,WORD,LONG);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h
new file mode 100644
index 00000000..4541a2fc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2009 Damjan Jovanovic
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifdef __WINESRC__
+#error Specify wia_lh.h or wia_xp.h explicitly in Wine
+#endif
+
+#if (_WIN32_WINNT >= 0x0600)
+#include <wia_lh.h>
+#elif (_WIN32_WINNT >= 0x0501)
+#include <wia_xp.h>
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl
new file mode 100644
index 00000000..50d09da4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_lh.idl
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2009 Damjan Jovanovic
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "propidl.idl";
+
+interface IEnumWIA_DEV_INFO;
+interface IWiaItem;
+interface IWiaEventCallback;
+
+cpp_quote("DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);")
+
+[
+ object,
+ uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811)
+]
+interface IWiaDevMgr : IUnknown
+{
+ HRESULT EnumDeviceInfo(
+ [in] LONG lFlag,
+ [retval, out] IEnumWIA_DEV_INFO **ppIEnum);
+
+ HRESULT CreateDevice(
+ [in] BSTR bstrDeviceID,
+ [out] IWiaItem **ppWiaItemRoot);
+
+ HRESULT SelectDeviceDlg(
+ [in] HWND hwndParent,
+ [in] LONG lDeviceType,
+ [in] LONG lFlags,
+ [in, out] BSTR *pbstrDeviceID,
+ [retval, out] IWiaItem **ppItemRoot);
+
+ HRESULT SelectDeviceDlgID(
+ [in] HWND hwndParent,
+ [in] LONG lDeviceType,
+ [in] LONG lFlags,
+ [retval, out] BSTR *pbstrDeviceID);
+
+ HRESULT GetImageDlg(
+ [in] HWND hwndParent,
+ [in] LONG lDeviceType,
+ [in] LONG lFlags,
+ [in] LONG lIntent,
+ [in] IWiaItem *pItemRoot,
+ [in] BSTR bstrFilename,
+ [in, out] GUID *pguidFormat);
+
+ HRESULT RegisterEventCallbackProgram(
+ [in] LONG lFlags,
+ [in] BSTR bstrDeviceID,
+ [in] const GUID *pEventGUID,
+ [in] BSTR bstrCommandline,
+ [in] BSTR bstrName,
+ [in] BSTR bstrDescription,
+ [in] BSTR bstrIcon);
+
+ HRESULT RegisterEventCallbackInterface(
+ [in] LONG lFlags,
+ [in] BSTR bstrDeviceID,
+ [in] const GUID *pEventGUID,
+ [unique, in] IWiaEventCallback *pIWiaEventCallback,
+ [out] IUnknown **pEventObject);
+
+ HRESULT RegisterEventCallbackCLSID(
+ [in] LONG lFlags,
+ [in] BSTR bstrDeviceID,
+ [in] const GUID *pEventGUID,
+ [unique, in] const GUID *pClsID,
+ [in] BSTR bstrName,
+ [in] BSTR bstrDescription,
+ [in] BSTR bstrIcon);
+
+ HRESULT AddDeviceDlg(
+ [in] HWND hwndParent,
+ [in] LONG lFlags);
+}
+
+[
+ object,
+ uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811)
+]
+interface IEnumWIA_DEV_INFO : IUnknown
+{
+ /* fill in */
+}
+
+[
+ object,
+ uuid(4db1ad10-3391-11d2-9a33-00c04fa36145)
+]
+interface IWiaItem : IUnknown
+{
+ /* FIXME: fill in */
+}
+
+[
+ object,
+ uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e)
+]
+interface IWiaEventCallback : IUnknown
+{
+ HRESULT ImageEventCallback(
+ [in] const GUID *pEventGUID,
+ [in] BSTR bstrEventDescription,
+ [in] BSTR bstrDeviceID,
+ [in] BSTR bstrDeviceDescription,
+ [in] DWORD dwDeviceType,
+ [in] BSTR bstrFullItemName,
+ [in,out] ULONG *pulEventType,
+ [in] ULONG ulReserved);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl
new file mode 100644
index 00000000..50d09da4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wia_xp.idl
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2009 Damjan Jovanovic
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "oaidl.idl";
+import "propidl.idl";
+
+interface IEnumWIA_DEV_INFO;
+interface IWiaItem;
+interface IWiaEventCallback;
+
+cpp_quote("DEFINE_GUID(CLSID_WiaDevMgr, 0xa1f4e726,0x8cf1,0x11d1,0xbf,0x92,0x00,0x60,0x08,0x1e,0xd8,0x11);")
+
+[
+ object,
+ uuid(5eb2502a-8cf1-11d1-bf92-0060081ed811)
+]
+interface IWiaDevMgr : IUnknown
+{
+ HRESULT EnumDeviceInfo(
+ [in] LONG lFlag,
+ [retval, out] IEnumWIA_DEV_INFO **ppIEnum);
+
+ HRESULT CreateDevice(
+ [in] BSTR bstrDeviceID,
+ [out] IWiaItem **ppWiaItemRoot);
+
+ HRESULT SelectDeviceDlg(
+ [in] HWND hwndParent,
+ [in] LONG lDeviceType,
+ [in] LONG lFlags,
+ [in, out] BSTR *pbstrDeviceID,
+ [retval, out] IWiaItem **ppItemRoot);
+
+ HRESULT SelectDeviceDlgID(
+ [in] HWND hwndParent,
+ [in] LONG lDeviceType,
+ [in] LONG lFlags,
+ [retval, out] BSTR *pbstrDeviceID);
+
+ HRESULT GetImageDlg(
+ [in] HWND hwndParent,
+ [in] LONG lDeviceType,
+ [in] LONG lFlags,
+ [in] LONG lIntent,
+ [in] IWiaItem *pItemRoot,
+ [in] BSTR bstrFilename,
+ [in, out] GUID *pguidFormat);
+
+ HRESULT RegisterEventCallbackProgram(
+ [in] LONG lFlags,
+ [in] BSTR bstrDeviceID,
+ [in] const GUID *pEventGUID,
+ [in] BSTR bstrCommandline,
+ [in] BSTR bstrName,
+ [in] BSTR bstrDescription,
+ [in] BSTR bstrIcon);
+
+ HRESULT RegisterEventCallbackInterface(
+ [in] LONG lFlags,
+ [in] BSTR bstrDeviceID,
+ [in] const GUID *pEventGUID,
+ [unique, in] IWiaEventCallback *pIWiaEventCallback,
+ [out] IUnknown **pEventObject);
+
+ HRESULT RegisterEventCallbackCLSID(
+ [in] LONG lFlags,
+ [in] BSTR bstrDeviceID,
+ [in] const GUID *pEventGUID,
+ [unique, in] const GUID *pClsID,
+ [in] BSTR bstrName,
+ [in] BSTR bstrDescription,
+ [in] BSTR bstrIcon);
+
+ HRESULT AddDeviceDlg(
+ [in] HWND hwndParent,
+ [in] LONG lFlags);
+}
+
+[
+ object,
+ uuid(5e38b83c-8cf1-11d1-bf92-0060081ed811)
+]
+interface IEnumWIA_DEV_INFO : IUnknown
+{
+ /* fill in */
+}
+
+[
+ object,
+ uuid(4db1ad10-3391-11d2-9a33-00c04fa36145)
+]
+interface IWiaItem : IUnknown
+{
+ /* FIXME: fill in */
+}
+
+[
+ object,
+ uuid(ae6287b0-0084-11d2-973b-00a0c9068f2e)
+]
+interface IWiaEventCallback : IUnknown
+{
+ HRESULT ImageEventCallback(
+ [in] const GUID *pEventGUID,
+ [in] BSTR bstrEventDescription,
+ [in] BSTR bstrDeviceID,
+ [in] BSTR bstrDeviceDescription,
+ [in] DWORD dwDeviceType,
+ [in] BSTR bstrFullItemName,
+ [in,out] ULONG *pulEventType,
+ [in] ULONG ulReserved);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h
new file mode 100644
index 00000000..c63ad3ce
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winbase.h
@@ -0,0 +1,2825 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINBASE_H
+#define __WINE_WINBASE_H
+
+#include <winerror.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _KERNEL32_
+#define WINBASEAPI
+#else
+#define WINBASEAPI DECLSPEC_IMPORT
+#endif
+
+#ifdef _ADVAPI32_
+#define WINADVAPI
+#else
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+ /* Windows Exit Procedure flag values */
+#define WEP_FREE_DLL 0
+#define WEP_SYSTEM_EXIT 1
+
+typedef DWORD (CALLBACK *LPTHREAD_START_ROUTINE)(LPVOID);
+
+typedef VOID (WINAPI *PFIBER_START_ROUTINE)( LPVOID lpFiberParameter );
+typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE;
+
+#define FIBER_FLAG_FLOAT_SWITCH 1
+
+typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
+typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
+typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
+
+typedef RTL_CRITICAL_SECTION_DEBUG CRITICAL_SECTION_DEBUG;
+typedef PRTL_CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG;
+typedef PRTL_CRITICAL_SECTION_DEBUG LPCRITICAL_SECTION_DEBUG;
+
+#define CRITICAL_SECTION_NO_DEBUG_INFO RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO
+
+typedef RTL_SRWLOCK SRWLOCK;
+typedef PRTL_SRWLOCK PSRWLOCK;
+
+#define SRWLOCK_INIT RTL_SRWLOCK_INIT
+
+typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;
+
+#define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT
+#define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED
+typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;
+
+#define EXCEPTION_DEBUG_EVENT 1
+#define CREATE_THREAD_DEBUG_EVENT 2
+#define CREATE_PROCESS_DEBUG_EVENT 3
+#define EXIT_THREAD_DEBUG_EVENT 4
+#define EXIT_PROCESS_DEBUG_EVENT 5
+#define LOAD_DLL_DEBUG_EVENT 6
+#define UNLOAD_DLL_DEBUG_EVENT 7
+#define OUTPUT_DEBUG_STRING_EVENT 8
+#define RIP_EVENT 9
+
+typedef struct _EXCEPTION_DEBUG_INFO {
+ EXCEPTION_RECORD ExceptionRecord;
+ DWORD dwFirstChance;
+} EXCEPTION_DEBUG_INFO;
+
+typedef struct _CREATE_THREAD_DEBUG_INFO {
+ HANDLE hThread;
+ LPVOID lpThreadLocalBase;
+ LPTHREAD_START_ROUTINE lpStartAddress;
+} CREATE_THREAD_DEBUG_INFO;
+
+typedef struct _CREATE_PROCESS_DEBUG_INFO {
+ HANDLE hFile;
+ HANDLE hProcess;
+ HANDLE hThread;
+ LPVOID lpBaseOfImage;
+ DWORD dwDebugInfoFileOffset;
+ DWORD nDebugInfoSize;
+ LPVOID lpThreadLocalBase;
+ LPTHREAD_START_ROUTINE lpStartAddress;
+ LPVOID lpImageName;
+ WORD fUnicode;
+} CREATE_PROCESS_DEBUG_INFO;
+
+typedef struct _EXIT_THREAD_DEBUG_INFO {
+ DWORD dwExitCode;
+} EXIT_THREAD_DEBUG_INFO;
+
+typedef struct _EXIT_PROCESS_DEBUG_INFO {
+ DWORD dwExitCode;
+} EXIT_PROCESS_DEBUG_INFO;
+
+typedef struct _LOAD_DLL_DEBUG_INFO {
+ HANDLE hFile;
+ LPVOID lpBaseOfDll;
+ DWORD dwDebugInfoFileOffset;
+ DWORD nDebugInfoSize;
+ LPVOID lpImageName;
+ WORD fUnicode;
+} LOAD_DLL_DEBUG_INFO;
+
+typedef struct _UNLOAD_DLL_DEBUG_INFO {
+ LPVOID lpBaseOfDll;
+} UNLOAD_DLL_DEBUG_INFO;
+
+typedef struct _OUTPUT_DEBUG_STRING_INFO {
+ LPSTR lpDebugStringData;
+ WORD fUnicode;
+ WORD nDebugStringLength;
+} OUTPUT_DEBUG_STRING_INFO;
+
+typedef struct _RIP_INFO {
+ DWORD dwError;
+ DWORD dwType;
+} RIP_INFO;
+
+typedef struct _DEBUG_EVENT {
+ DWORD dwDebugEventCode;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+ union {
+ EXCEPTION_DEBUG_INFO Exception;
+ CREATE_THREAD_DEBUG_INFO CreateThread;
+ CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
+ EXIT_THREAD_DEBUG_INFO ExitThread;
+ EXIT_PROCESS_DEBUG_INFO ExitProcess;
+ LOAD_DLL_DEBUG_INFO LoadDll;
+ UNLOAD_DLL_DEBUG_INFO UnloadDll;
+ OUTPUT_DEBUG_STRING_INFO DebugString;
+ RIP_INFO RipInfo;
+ } u;
+} DEBUG_EVENT, *LPDEBUG_EVENT;
+
+typedef PCONTEXT LPCONTEXT;
+typedef PEXCEPTION_RECORD LPEXCEPTION_RECORD;
+typedef PEXCEPTION_POINTERS LPEXCEPTION_POINTERS;
+
+typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS);
+typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
+
+#define OFS_MAXPATHNAME 128
+typedef struct _OFSTRUCT
+{
+ BYTE cBytes;
+ BYTE fFixedDisk;
+ WORD nErrCode;
+ WORD Reserved1;
+ WORD Reserved2;
+ CHAR szPathName[OFS_MAXPATHNAME];
+} OFSTRUCT, *POFSTRUCT, *LPOFSTRUCT;
+
+#define OF_READ 0x0000
+#define OF_WRITE 0x0001
+#define OF_READWRITE 0x0002
+#define OF_SHARE_COMPAT 0x0000
+#define OF_SHARE_EXCLUSIVE 0x0010
+#define OF_SHARE_DENY_WRITE 0x0020
+#define OF_SHARE_DENY_READ 0x0030
+#define OF_SHARE_DENY_NONE 0x0040
+#define OF_PARSE 0x0100
+#define OF_DELETE 0x0200
+#define OF_VERIFY 0x0400 /* Used with OF_REOPEN */
+#define OF_SEARCH 0x0400 /* Used without OF_REOPEN */
+#define OF_CANCEL 0x0800
+#define OF_CREATE 0x1000
+#define OF_PROMPT 0x2000
+#define OF_EXIST 0x4000
+#define OF_REOPEN 0x8000
+
+/* SetErrorMode values */
+#define SEM_FAILCRITICALERRORS 0x0001
+#define SEM_NOGPFAULTERRORBOX 0x0002
+#define SEM_NOALIGNMENTFAULTEXCEPT 0x0004
+#define SEM_NOOPENFILEERRORBOX 0x8000
+
+/* CopyFileEx flags */
+#define COPY_FILE_FAIL_IF_EXISTS 0x00000001
+#define COPY_FILE_RESTARTABLE 0x00000002
+#define COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x00000004
+#define COPY_FILE_ALLOW_DECRYPTED_DESTINATION 0x00000008
+#define COPY_FILE_COPY_SYMLINK 0x00000800
+#define COPY_FILE_NO_BUFFERING 0x00001000
+
+/* return values for CopyProgressRoutine */
+#define PROGRESS_CONTINUE 0
+#define PROGRESS_CANCEL 1
+#define PROGRESS_STOP 2
+#define PROGRESS_QUIET 3
+
+/* reason codes for CopyProgressRoutine */
+#define CALLBACK_CHUNK_FINISHED 0
+#define CALLBACK_STREAM_SWITCH 1
+
+/* GetTempFileName() Flags */
+#define TF_FORCEDRIVE 0x80
+
+#define DRIVE_UNKNOWN 0
+#define DRIVE_NO_ROOT_DIR 1
+#define DRIVE_REMOVABLE 2
+#define DRIVE_FIXED 3
+#define DRIVE_REMOTE 4
+/* Win32 additions */
+#define DRIVE_CDROM 5
+#define DRIVE_RAMDISK 6
+
+#define MAX_COMPUTERNAME_LENGTH 15
+
+/* The security attributes structure */
+typedef struct _SECURITY_ATTRIBUTES
+{
+ DWORD nLength;
+ LPVOID lpSecurityDescriptor;
+ BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+
+#ifndef _FILETIME_
+#define _FILETIME_
+/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
+typedef struct _FILETIME
+{
+#ifdef WORDS_BIGENDIAN
+ DWORD dwHighDateTime;
+ DWORD dwLowDateTime;
+#else
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#endif /* _FILETIME_ */
+
+/* Find* structures */
+typedef struct _WIN32_FIND_DATAA
+{
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD dwReserved0;
+ DWORD dwReserved1;
+ CHAR cFileName[260];
+ CHAR cAlternateFileName[14];
+} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAW
+{
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD dwReserved0;
+ DWORD dwReserved1;
+ WCHAR cFileName[260];
+ WCHAR cAlternateFileName[14];
+} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
+
+DECL_WINELIB_TYPE_AW(WIN32_FIND_DATA)
+DECL_WINELIB_TYPE_AW(PWIN32_FIND_DATA)
+DECL_WINELIB_TYPE_AW(LPWIN32_FIND_DATA)
+
+typedef enum _FINDEX_INFO_LEVELS
+{
+ FindExInfoStandard,
+ FindExInfoMaxInfoLevel
+} FINDEX_INFO_LEVELS;
+
+typedef enum _FINDEX_SEARCH_OPS
+{
+ FindExSearchNameMatch,
+ FindExSearchLimitToDirectories,
+ FindExSearchLimitToDevices,
+ FindExSearchMaxSearchOp
+} FINDEX_SEARCH_OPS;
+
+typedef struct _PROCESS_HEAP_ENTRY
+{
+ LPVOID lpData;
+ DWORD cbData;
+ BYTE cbOverhead;
+ BYTE iRegionIndex;
+ WORD wFlags;
+ union {
+ struct {
+ HANDLE hMem;
+ DWORD dwReserved[3];
+ } Block;
+ struct {
+ DWORD dwCommittedSize;
+ DWORD dwUnCommittedSize;
+ LPVOID lpFirstBlock;
+ LPVOID lpLastBlock;
+ } Region;
+ } DUMMYUNIONNAME;
+} PROCESS_HEAP_ENTRY, *PPROCESS_HEAP_ENTRY, *LPPROCESS_HEAP_ENTRY;
+
+#define PROCESS_HEAP_REGION 0x0001
+#define PROCESS_HEAP_UNCOMMITTED_RANGE 0x0002
+#define PROCESS_HEAP_ENTRY_BUSY 0x0004
+#define PROCESS_HEAP_ENTRY_MOVEABLE 0x0010
+#define PROCESS_HEAP_ENTRY_DDESHARE 0x0020
+
+#define INVALID_HANDLE_VALUE ((HANDLE)~(ULONG_PTR)0)
+#define INVALID_FILE_SIZE (~0u)
+#define INVALID_SET_FILE_POINTER (~0u)
+#define INVALID_FILE_ATTRIBUTES (~0u)
+
+#define LOCKFILE_FAIL_IMMEDIATELY 1
+#define LOCKFILE_EXCLUSIVE_LOCK 2
+
+#define FLS_OUT_OF_INDEXES (~0u)
+#define TLS_OUT_OF_INDEXES (~0u)
+
+#define SHUTDOWN_NORETRY 1
+
+/* comm */
+
+#define CBR_110 0xFF10
+#define CBR_300 0xFF11
+#define CBR_600 0xFF12
+#define CBR_1200 0xFF13
+#define CBR_2400 0xFF14
+#define CBR_4800 0xFF15
+#define CBR_9600 0xFF16
+#define CBR_14400 0xFF17
+#define CBR_19200 0xFF18
+#define CBR_38400 0xFF1B
+#define CBR_56000 0xFF1F
+#define CBR_57600 0xFF20
+#define CBR_115200 0xFF21
+#define CBR_128000 0xFF23
+#define CBR_256000 0xFF27
+
+#define NOPARITY 0
+#define ODDPARITY 1
+#define EVENPARITY 2
+#define MARKPARITY 3
+#define SPACEPARITY 4
+#define ONESTOPBIT 0
+#define ONE5STOPBITS 1
+#define TWOSTOPBITS 2
+
+#define IGNORE 0
+#define INFINITE 0xFFFFFFFF
+
+#define CE_RXOVER 0x0001
+#define CE_OVERRUN 0x0002
+#define CE_RXPARITY 0x0004
+#define CE_FRAME 0x0008
+#define CE_BREAK 0x0010
+#define CE_CTSTO 0x0020
+#define CE_DSRTO 0x0040
+#define CE_RLSDTO 0x0080
+#define CE_TXFULL 0x0100
+#define CE_PTO 0x0200
+#define CE_IOE 0x0400
+#define CE_DNS 0x0800
+#define CE_OOP 0x1000
+#define CE_MODE 0x8000
+
+#define IE_BADID -1
+#define IE_OPEN -2
+#define IE_NOPEN -3
+#define IE_MEMORY -4
+#define IE_DEFAULT -5
+#define IE_HARDWARE -10
+#define IE_BYTESIZE -11
+#define IE_BAUDRATE -12
+
+#define EV_RXCHAR 0x0001
+#define EV_RXFLAG 0x0002
+#define EV_TXEMPTY 0x0004
+#define EV_CTS 0x0008
+#define EV_DSR 0x0010
+#define EV_RLSD 0x0020
+#define EV_BREAK 0x0040
+#define EV_ERR 0x0080
+#define EV_RING 0x0100
+#define EV_PERR 0x0200
+#define EV_RX80FULL 0x0400
+#define EV_EVENT1 0x0800
+#define EV_EVENT2 0x1000
+
+#define SETXOFF 1
+#define SETXON 2
+#define SETRTS 3
+#define CLRRTS 4
+#define SETDTR 5
+#define CLRDTR 6
+#define RESETDEV 7
+#define SETBREAK 8
+#define CLRBREAK 9
+
+/* Purge functions for Comm Port */
+#define PURGE_TXABORT 0x0001 /* Kill the pending/current writes to the
+ comm port */
+#define PURGE_RXABORT 0x0002 /*Kill the pending/current reads to
+ the comm port */
+#define PURGE_TXCLEAR 0x0004 /* Kill the transmit queue if there*/
+#define PURGE_RXCLEAR 0x0008 /* Kill the typeahead buffer if there*/
+
+
+/* Modem Status Flags */
+#define MS_CTS_ON ((DWORD)0x0010)
+#define MS_DSR_ON ((DWORD)0x0020)
+#define MS_RING_ON ((DWORD)0x0040)
+#define MS_RLSD_ON ((DWORD)0x0080)
+
+#define RTS_CONTROL_DISABLE 0
+#define RTS_CONTROL_ENABLE 1
+#define RTS_CONTROL_HANDSHAKE 2
+#define RTS_CONTROL_TOGGLE 3
+
+#define DTR_CONTROL_DISABLE 0
+#define DTR_CONTROL_ENABLE 1
+#define DTR_CONTROL_HANDSHAKE 2
+
+
+#define LMEM_FIXED 0
+#define LMEM_MOVEABLE 0x0002
+#define LMEM_NOCOMPACT 0x0010
+#define LMEM_NODISCARD 0x0020
+#define LMEM_ZEROINIT 0x0040
+#define LMEM_MODIFY 0x0080
+#define LMEM_DISCARDABLE 0x0F00
+#define LMEM_DISCARDED 0x4000
+#define LMEM_INVALID_HANDLE 0x8000
+#define LMEM_LOCKCOUNT 0x00FF
+
+#define LPTR (LMEM_FIXED | LMEM_ZEROINIT)
+#define LHND (LMEM_MOVEABLE | LMEM_ZEROINIT)
+
+#define NONZEROLHND (LMEM_MOVEABLE)
+#define NONZEROLPTR (LMEM_FIXED)
+
+#define LocalDiscard(h) (LocalReAlloc((h),0,LMEM_MOVEABLE))
+
+#define GMEM_FIXED 0x0000
+#define GMEM_MOVEABLE 0x0002
+#define GMEM_NOCOMPACT 0x0010
+#define GMEM_NODISCARD 0x0020
+#define GMEM_ZEROINIT 0x0040
+#define GMEM_MODIFY 0x0080
+#define GMEM_DISCARDABLE 0x0100
+#define GMEM_NOT_BANKED 0x1000
+#define GMEM_SHARE 0x2000
+#define GMEM_DDESHARE 0x2000
+#define GMEM_NOTIFY 0x4000
+#define GMEM_LOWER GMEM_NOT_BANKED
+#define GMEM_DISCARDED 0x4000
+#define GMEM_LOCKCOUNT 0x00ff
+#define GMEM_INVALID_HANDLE 0x8000
+
+#define GHND (GMEM_MOVEABLE | GMEM_ZEROINIT)
+#define GPTR (GMEM_FIXED | GMEM_ZEROINIT)
+
+#define GlobalLRUNewest(h) ((HANDLE)(h))
+#define GlobalLRUOldest(h) ((HANDLE)(h))
+#define GlobalDiscard(h) (GlobalReAlloc((h),0,GMEM_MOVEABLE))
+
+#define INVALID_ATOM ((ATOM)0)
+#define MAXINTATOM 0xc000
+#ifdef WINE_NO_UNICODE_MACROS /* force using a cast */
+#define MAKEINTATOM(atom) ((ULONG_PTR)((WORD)(atom)))
+#else
+#define MAKEINTATOM(atom) ((LPTSTR)((ULONG_PTR)((WORD)(atom))))
+#endif
+
+typedef struct tagMEMORYSTATUS
+{
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ SIZE_T dwTotalPhys;
+ SIZE_T dwAvailPhys;
+ SIZE_T dwTotalPageFile;
+ SIZE_T dwAvailPageFile;
+ SIZE_T dwTotalVirtual;
+ SIZE_T dwAvailVirtual;
+} MEMORYSTATUS, *LPMEMORYSTATUS;
+
+#include <pshpack8.h>
+typedef struct tagMEMORYSTATUSEX {
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ DWORDLONG DECLSPEC_ALIGN(8) ullTotalPhys;
+ DWORDLONG DECLSPEC_ALIGN(8) ullAvailPhys;
+ DWORDLONG DECLSPEC_ALIGN(8) ullTotalPageFile;
+ DWORDLONG DECLSPEC_ALIGN(8) ullAvailPageFile;
+ DWORDLONG DECLSPEC_ALIGN(8) ullTotalVirtual;
+ DWORDLONG DECLSPEC_ALIGN(8) ullAvailVirtual;
+ DWORDLONG DECLSPEC_ALIGN(8) ullAvailExtendedVirtual;
+} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
+#include <poppack.h>
+
+typedef enum _MEMORY_RESOURCE_NOTIFICATION_TYPE {
+ LowMemoryResourceNotification,
+ HighMemoryResourceNotification
+} MEMORY_RESOURCE_NOTIFICATION_TYPE;
+
+#ifndef _SYSTEMTIME_
+#define _SYSTEMTIME_
+typedef struct _SYSTEMTIME{
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
+#endif /* _SYSTEMTIME_ */
+
+/* The 'overlapped' data structure used by async I/O functions.
+ */
+typedef struct _OVERLAPPED {
+#ifdef WORDS_BIGENDIAN
+ ULONG_PTR InternalHigh;
+ ULONG_PTR Internal;
+#else
+ ULONG_PTR Internal;
+ ULONG_PTR InternalHigh;
+#endif
+ union {
+ struct {
+#ifdef WORDS_BIGENDIAN
+ DWORD OffsetHigh;
+ DWORD Offset;
+#else
+ DWORD Offset;
+ DWORD OffsetHigh;
+#endif
+ } DUMMYSTRUCTNAME;
+ PVOID Pointer;
+ } DUMMYUNIONNAME;
+ HANDLE hEvent;
+} OVERLAPPED, *LPOVERLAPPED;
+
+typedef VOID (CALLBACK *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPOVERLAPPED);
+
+/* Process startup information.
+ */
+
+/* STARTUPINFO.dwFlags */
+#define STARTF_USESHOWWINDOW 0x00000001
+#define STARTF_USESIZE 0x00000002
+#define STARTF_USEPOSITION 0x00000004
+#define STARTF_USECOUNTCHARS 0x00000008
+#define STARTF_USEFILLATTRIBUTE 0x00000010
+#define STARTF_RUNFULLSCREEN 0x00000020
+#define STARTF_FORCEONFEEDBACK 0x00000040
+#define STARTF_FORCEOFFFEEDBACK 0x00000080
+#define STARTF_USESTDHANDLES 0x00000100
+#define STARTF_USEHOTKEY 0x00000200
+
+typedef struct _STARTUPINFOA{
+ DWORD cb; /* 00: size of struct */
+ LPSTR lpReserved; /* 04: */
+ LPSTR lpDesktop; /* 08: */
+ LPSTR lpTitle; /* 0c: */
+ DWORD dwX; /* 10: */
+ DWORD dwY; /* 14: */
+ DWORD dwXSize; /* 18: */
+ DWORD dwYSize; /* 1c: */
+ DWORD dwXCountChars; /* 20: */
+ DWORD dwYCountChars; /* 24: */
+ DWORD dwFillAttribute; /* 28: */
+ DWORD dwFlags; /* 2c: */
+ WORD wShowWindow; /* 30: */
+ WORD cbReserved2; /* 32: */
+ BYTE *lpReserved2; /* 34: */
+ HANDLE hStdInput; /* 38: */
+ HANDLE hStdOutput; /* 3c: */
+ HANDLE hStdError; /* 40: */
+} STARTUPINFOA, *LPSTARTUPINFOA;
+
+typedef struct _STARTUPINFOW{
+ DWORD cb;
+ LPWSTR lpReserved;
+ LPWSTR lpDesktop;
+ LPWSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ BYTE *lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFOW, *LPSTARTUPINFOW;
+
+DECL_WINELIB_TYPE_AW(STARTUPINFO)
+DECL_WINELIB_TYPE_AW(LPSTARTUPINFO)
+
+typedef struct _PROCESS_INFORMATION{
+ HANDLE hProcess;
+ HANDLE hThread;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+
+typedef struct _TIME_DYNAMIC_ZONE_INFORMATION
+{
+ LONG Bias;
+ WCHAR StandardName[32];
+ SYSTEMTIME StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[32];
+ SYSTEMTIME DaylightDate;
+ LONG DaylightBias;
+ WCHAR TimeZoneKeyName[128];
+ BOOLEAN DynamicDaylightTimeDisabled;
+} DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION;
+
+typedef struct _TIME_ZONE_INFORMATION{
+ LONG Bias;
+ WCHAR StandardName[32];
+ SYSTEMTIME StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[32];
+ SYSTEMTIME DaylightDate;
+ LONG DaylightBias;
+} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
+
+#define TIME_ZONE_ID_INVALID ((DWORD)0xFFFFFFFF)
+#define TIME_ZONE_ID_UNKNOWN 0
+#define TIME_ZONE_ID_STANDARD 1
+#define TIME_ZONE_ID_DAYLIGHT 2
+
+/* CreateProcess: dwCreationFlag values
+ */
+#define DEBUG_PROCESS 0x00000001
+#define DEBUG_ONLY_THIS_PROCESS 0x00000002
+#define CREATE_SUSPENDED 0x00000004
+#define DETACHED_PROCESS 0x00000008
+#define CREATE_NEW_CONSOLE 0x00000010
+#define NORMAL_PRIORITY_CLASS 0x00000020
+#define IDLE_PRIORITY_CLASS 0x00000040
+#define HIGH_PRIORITY_CLASS 0x00000080
+#define REALTIME_PRIORITY_CLASS 0x00000100
+#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
+#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
+#define CREATE_NEW_PROCESS_GROUP 0x00000200
+#define CREATE_UNICODE_ENVIRONMENT 0x00000400
+#define CREATE_SEPARATE_WOW_VDM 0x00000800
+#define CREATE_SHARED_WOW_VDM 0x00001000
+#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
+#define CREATE_DEFAULT_ERROR_MODE 0x04000000
+#define CREATE_NO_WINDOW 0x08000000
+#define PROFILE_USER 0x10000000
+#define PROFILE_KERNEL 0x20000000
+#define PROFILE_SERVER 0x40000000
+
+
+/* File object type definitions
+ */
+#define FILE_TYPE_UNKNOWN 0
+#define FILE_TYPE_DISK 1
+#define FILE_TYPE_CHAR 2
+#define FILE_TYPE_PIPE 3
+#define FILE_TYPE_REMOTE 32768
+
+/* File encryption status
+ */
+#define FILE_ENCRYPTABLE 0
+#define FILE_IS_ENCRYPTED 1
+#define FILE_SYSTEM_ATTR 2
+#define FILE_ROOT_DIR 3
+#define FILE_SYSTEM_DIR 4
+#define FILE_UNKNOWN 5
+#define FILE_SYSTEM_NOT_SUPPORT 6
+#define FILE_USER_DISALLOWED 7
+#define FILE_READ_ONLY 8
+#define FILE_DIR_DISALOWED 9
+
+/* File creation flags
+ */
+#define FILE_FLAG_WRITE_THROUGH 0x80000000
+#define FILE_FLAG_OVERLAPPED 0x40000000
+#define FILE_FLAG_NO_BUFFERING 0x20000000
+#define FILE_FLAG_RANDOM_ACCESS 0x10000000
+#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000
+#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000
+#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000
+#define FILE_FLAG_POSIX_SEMANTICS 0x01000000
+#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000
+#define FILE_FLAG_OPEN_NO_RECALL 0x00100000
+#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000
+
+#define CREATE_NEW 1
+#define CREATE_ALWAYS 2
+#define OPEN_EXISTING 3
+#define OPEN_ALWAYS 4
+#define TRUNCATE_EXISTING 5
+
+/* Standard handle identifiers
+ */
+#define STD_INPUT_HANDLE ((DWORD) -10)
+#define STD_OUTPUT_HANDLE ((DWORD) -11)
+#define STD_ERROR_HANDLE ((DWORD) -12)
+
+typedef struct _BY_HANDLE_FILE_INFORMATION
+{
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD dwVolumeSerialNumber;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD nNumberOfLinks;
+ DWORD nFileIndexHigh;
+ DWORD nFileIndexLow;
+} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION ;
+
+typedef enum _FILE_ID_TYPE {
+ FileIdType,
+ ObjectIdType,
+ ExtendedFileIdType,
+ MaximumFileIdType
+} FILE_ID_TYPE, *PFILE_ID_TYPE;
+
+typedef struct _FILE_ID_DESCRIPTOR {
+ DWORD dwSize;
+ FILE_ID_TYPE Type;
+ union {
+ LARGE_INTEGER FileId;
+ GUID ObjectId;
+ } DUMMYUNIONNAME;
+} FILE_ID_DESCRIPTOR, *LPFILE_ID_DESCRIPTOR;
+
+typedef enum _FILE_INFO_BY_HANDLE_CLASS {
+ FileBasicInfo,
+ FileStandardInfo,
+ FileNameInfo,
+ FileRenameInfo,
+ FileDispositionInfo,
+ FileAllocationInfo,
+ FileEndOfFileInfo,
+ FileStreamInfo,
+ FileCompressionInfo,
+ FileAttributeTagInfo,
+ FileIdBothDirectoryInfo,
+ FileIdBothDirectoryRestartInfo,
+ FileIoPriorityHintInfo,
+ FileRemoteProtocolInfo,
+ FileFullDirectoryInfo,
+ FileFullDirectoryRestartInfo,
+ FileStorageInfo,
+ FileAlignmentInfo,
+ FileIdInfo,
+ FileIdExtdDirectoryInfo,
+ FileIdExtdDirectoryRestartInfo,
+ MaximumFileInfoByHandlesClass
+} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
+
+typedef struct _FILE_ID_BOTH_DIR_INFO {
+ DWORD NextEntryOffset;
+ DWORD FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ DWORD FileAttributes;
+ DWORD FileNameLength;
+ DWORD EaSize;
+ CCHAR ShortNameLength;
+ WCHAR ShortName[12];
+ LARGE_INTEGER FileId;
+ WCHAR FileName[1];
+} FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO;
+
+#define PIPE_ACCESS_INBOUND 1
+#define PIPE_ACCESS_OUTBOUND 2
+#define PIPE_ACCESS_DUPLEX 3
+
+#define PIPE_CLIENT_END 0
+#define PIPE_SERVER_END 1
+#define PIPE_READMODE_BYTE 0
+#define PIPE_READMODE_MESSAGE 2
+#define PIPE_TYPE_BYTE 0
+#define PIPE_TYPE_MESSAGE 4
+
+#define PIPE_WAIT 0
+#define PIPE_NOWAIT 1
+
+#define PIPE_UNLIMITED_INSTANCES 255
+
+#define NMPWAIT_WAIT_FOREVER 0xffffffff
+#define NMPWAIT_NOWAIT 0x00000001
+#define NMPWAIT_USE_DEFAULT_WAIT 0x00000000
+
+/* Security flags for dwFlagsAndAttributes of CreateFile */
+#define SECURITY_ANONYMOUS (SecurityAnonymous << 16)
+#define SECURITY_IDENTIFICATION (SecurityIdentification << 16)
+#define SECURITY_IMPERSONATION (SecurityImpersonation << 16)
+#define SECURITY_DELEGATION (SecurityDelegation << 16)
+
+#define SECURITY_CONTEXT_TRACKING 0x00040000
+#define SECURITY_EFFECTIVE_ONLY 0x00080000
+
+#define SECURITY_SQOS_PRESENT 0x00100000
+#define SECURITY_VALID_SQOS_FLAGS 0x001f0000
+
+typedef struct _SYSTEM_POWER_STATUS
+{
+ BYTE ACLineStatus;
+ BYTE BatteryFlag;
+ BYTE BatteryLifePercent;
+ BYTE Reserved1;
+ DWORD BatteryLifeTime;
+ DWORD BatteryFullLifeTime;
+} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;
+
+
+typedef struct _SYSTEM_INFO
+{
+ union {
+ DWORD dwOemId; /* Obsolete field - do not use */
+ struct {
+ WORD wProcessorArchitecture;
+ WORD wReserved;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ DWORD dwPageSize;
+ LPVOID lpMinimumApplicationAddress;
+ LPVOID lpMaximumApplicationAddress;
+ DWORD_PTR dwActiveProcessorMask;
+ DWORD dwNumberOfProcessors;
+ DWORD dwProcessorType;
+ DWORD dwAllocationGranularity;
+ WORD wProcessorLevel;
+ WORD wProcessorRevision;
+} SYSTEM_INFO, *LPSYSTEM_INFO;
+
+typedef BOOL (CALLBACK *ENUMRESTYPEPROCA)(HMODULE,LPSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESTYPEPROCW)(HMODULE,LPWSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESNAMEPROCA)(HMODULE,LPCSTR,LPSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESNAMEPROCW)(HMODULE,LPCWSTR,LPWSTR,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESLANGPROCA)(HMODULE,LPCSTR,LPCSTR,WORD,LONG_PTR);
+typedef BOOL (CALLBACK *ENUMRESLANGPROCW)(HMODULE,LPCWSTR,LPCWSTR,WORD,LONG_PTR);
+
+DECL_WINELIB_TYPE_AW(ENUMRESTYPEPROC)
+DECL_WINELIB_TYPE_AW(ENUMRESNAMEPROC)
+DECL_WINELIB_TYPE_AW(ENUMRESLANGPROC)
+
+/* flags that can be passed to LoadLibraryEx */
+#define DONT_RESOLVE_DLL_REFERENCES 0x00000001
+#define LOAD_LIBRARY_AS_DATAFILE 0x00000002
+#define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008
+#define LOAD_IGNORE_CODE_AUTHZ_LEVEL 0x00000010
+#define LOAD_LIBRARY_AS_IMAGE_RESOURCE 0x00000020
+#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x00000040
+#define LOAD_LIBRARY_REQUIRE_SIGNED_TARGET 0x00000080
+
+#define GET_MODULE_HANDLE_EX_FLAG_PIN 1
+#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
+#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
+
+typedef PLDT_ENTRY LPLDT_ENTRY;
+
+typedef enum _GET_FILEEX_INFO_LEVELS {
+ GetFileExInfoStandard
+} GET_FILEEX_INFO_LEVELS;
+
+typedef struct _WIN32_FILE_ATTRIBUTES_DATA {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
+
+/*
+ * This one seems to be a Win32 only definition. It also is defined with
+ * WINAPI instead of CALLBACK in the windows headers.
+ */
+typedef DWORD (CALLBACK *LPPROGRESS_ROUTINE)(LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER,
+ LARGE_INTEGER, DWORD, DWORD, HANDLE,
+ HANDLE, LPVOID);
+
+typedef DWORD (WINAPI *APPLICATION_RECOVERY_CALLBACK)(PVOID);
+
+typedef enum _COPYFILE2_MESSAGE_TYPE
+{
+ COPYFILE2_CALLBACK_NONE = 0,
+ COPYFILE2_CALLBACK_CHUNK_STARTED,
+ COPYFILE2_CALLBACK_CHUNK_FINISHED,
+ COPYFILE2_CALLBACK_STREAM_STARTED,
+ COPYFILE2_CALLBACK_STREAM_FINISHED,
+ COPYFILE2_CALLBACK_POLL_CONTINUE,
+ COPYFILE2_CALLBACK_ERROR,
+ COPYFILE2_CALLBACK_MAX,
+} COPYFILE2_MESSAGE_TYPE;
+
+typedef enum _COPYFILE2_MESSAGE_ACTION
+{
+ COPYFILE2_PROGRESS_CONTINUE = 0,
+ COPYFILE2_PROGRESS_CANCEL,
+ COPYFILE2_PROGRESS_STOP,
+ COPYFILE2_PROGRESS_QUIET,
+ COPYFILE2_PROGRESS_PAUSE,
+} COPYFILE2_MESSAGE_ACTION;
+
+typedef enum _COPYFILE2_COPY_PHASE
+{
+ COPYFILE2_PHASE_NONE = 0,
+ COPYFILE2_PHASE_PREPARE_SOURCE,
+ COPYFILE2_PHASE_PREPARE_DEST,
+ COPYFILE2_PHASE_READ_SOURCE,
+ COPYFILE2_PHASE_WRITE_DESTINATION,
+ COPYFILE2_PHASE_SERVER_COPY,
+ COPYFILE2_PHASE_NAMEGRAFT_COPY,
+ COPYFILE2_PHASE_MAX,
+} COPYFILE2_COPY_PHASE;
+
+typedef struct COPYFILE2_MESSAGE
+{
+ COPYFILE2_MESSAGE_TYPE Type;
+ DWORD dwPadding;
+ union
+ {
+ struct
+ {
+ DWORD dwStreamNumber;
+ DWORD dwReserved;
+ HANDLE hSourceFile;
+ HANDLE hDestinationFile;
+ ULARGE_INTEGER uliChunkNumber;
+ ULARGE_INTEGER uliChunkSize;
+ ULARGE_INTEGER uliStreamSize;
+ ULARGE_INTEGER uliTotalFileSize;
+ } ChunkStarted;
+ struct
+ {
+ DWORD dwStreamNumber;
+ DWORD dwFlags;
+ HANDLE hSourceFile;
+ HANDLE hDestinationFile;
+ ULARGE_INTEGER uliChunkNumber;
+ ULARGE_INTEGER uliChunkSize;
+ ULARGE_INTEGER uliStreamSize;
+ ULARGE_INTEGER uliStreamBytesTransferred;
+ ULARGE_INTEGER uliTotalFileSize;
+ ULARGE_INTEGER uliTotalBytesTransferred;
+ } ChunkFinished;
+ struct
+ {
+ DWORD dwStreamNumber;
+ DWORD dwReserved;
+ HANDLE hSourceFile;
+ HANDLE hDestinationFile;
+ ULARGE_INTEGER uliStreamSize;
+ ULARGE_INTEGER uliTotalFileSize;
+ } StreamStarted;
+ struct
+ {
+ DWORD dwStreamNumber;
+ DWORD dwReserved;
+ HANDLE hSourceFile;
+ HANDLE hDestinationFile;
+ ULARGE_INTEGER uliStreamSize;
+ ULARGE_INTEGER uliStreamBytesTransferred;
+ ULARGE_INTEGER uliTotalFileSize;
+ ULARGE_INTEGER uliTotalBytesTransferred;
+ } StreamFinished;
+ struct
+ {
+ DWORD dwReserved;
+ } PollContinue;
+ struct
+ {
+ COPYFILE2_COPY_PHASE CopyPhase;
+ DWORD dwStreamNumber;
+ HRESULT hrFailure;
+ DWORD dwReserved;
+ ULARGE_INTEGER uliChunkNumber;
+ ULARGE_INTEGER uliStreamSize;
+ ULARGE_INTEGER uliStreamBytesTransferred;
+ ULARGE_INTEGER uliTotalFileSize;
+ ULARGE_INTEGER uliTotalBytesTransferred;
+ } Error;
+ } Info;
+} COPYFILE2_MESSAGE;
+
+typedef COPYFILE2_MESSAGE_ACTION (CALLBACK *PCOPYFILE2_PROGRESS_ROUTINE)(const COPYFILE2_MESSAGE*,PVOID);
+
+typedef struct COPYFILE2_EXTENDED_PARAMETERS
+{
+ DWORD dwSize;
+ DWORD dwCopyFlags;
+ BOOL *pfCancel;
+ PCOPYFILE2_PROGRESS_ROUTINE pProgressRoutine;
+ PVOID pvCallbackContext;
+} COPYFILE2_EXTENDED_PARAMETERS;
+
+#define CREATE_EVENT_MANUAL_RESET 1
+#define CREATE_EVENT_INITIAL_SET 2
+
+#define CREATE_MUTEX_INITIAL_OWNER 1
+
+#define CREATE_WAITABLE_TIMER_MANUAL_RESET 1
+
+#define WAIT_FAILED 0xffffffff
+#define WAIT_OBJECT_0 0
+#define WAIT_ABANDONED STATUS_ABANDONED_WAIT_0
+#define WAIT_ABANDONED_0 STATUS_ABANDONED_WAIT_0
+#define WAIT_IO_COMPLETION STATUS_USER_APC
+#define WAIT_TIMEOUT STATUS_TIMEOUT
+#define STILL_ACTIVE STATUS_PENDING
+
+#define FILE_BEGIN 0
+#define FILE_CURRENT 1
+#define FILE_END 2
+
+#define FILE_MAP_COPY 0x00000001
+#define FILE_MAP_WRITE 0x00000002
+#define FILE_MAP_READ 0x00000004
+#define FILE_MAP_ALL_ACCESS 0x000f001f
+#define FILE_MAP_EXECUTE 0x00000020
+
+#define MOVEFILE_REPLACE_EXISTING 0x00000001
+#define MOVEFILE_COPY_ALLOWED 0x00000002
+#define MOVEFILE_DELAY_UNTIL_REBOOT 0x00000004
+#define MOVEFILE_WRITE_THROUGH 0x00000008
+
+#define REPLACEFILE_WRITE_THROUGH 0x00000001
+#define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002
+
+#define FS_CASE_SENSITIVE FILE_CASE_SENSITIVE_SEARCH
+#define FS_CASE_IS_PRESERVED FILE_CASE_PRESERVED_NAMES
+#define FS_UNICODE_STORED_ON_DISK FILE_UNICODE_ON_DISK
+#define FS_PERSISTENT_ACLS FILE_PERSISTENT_ACLS
+#define FS_VOL_IS_COMPRESSED FILE_VOLUME_IS_COMPRESSED
+#define FS_FILE_COMPRESSION FILE_FILE_COMPRESSION
+
+#define MUTEX_MODIFY_STATE MUTANT_QUERY_STATE
+#define MUTEX_ALL_ACCESS MUTANT_ALL_ACCESS
+
+#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
+#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
+#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
+#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
+#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
+#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
+#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
+#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
+#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
+#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
+#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
+#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
+#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
+#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
+#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
+#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
+#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
+#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
+#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
+#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
+#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
+#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
+#define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
+
+#define HANDLE_FLAG_INHERIT 0x00000001
+#define HANDLE_FLAG_PROTECT_FROM_CLOSE 0x00000002
+
+#define HINSTANCE_ERROR 32
+
+#define THREAD_PRIORITY_LOWEST THREAD_BASE_PRIORITY_MIN
+#define THREAD_PRIORITY_BELOW_NORMAL (THREAD_PRIORITY_LOWEST+1)
+#define THREAD_PRIORITY_NORMAL 0
+#define THREAD_PRIORITY_HIGHEST THREAD_BASE_PRIORITY_MAX
+#define THREAD_PRIORITY_ABOVE_NORMAL (THREAD_PRIORITY_HIGHEST-1)
+#define THREAD_PRIORITY_ERROR_RETURN (0x7fffffff)
+#define THREAD_PRIORITY_TIME_CRITICAL THREAD_BASE_PRIORITY_LOWRT
+#define THREAD_PRIORITY_IDLE THREAD_BASE_PRIORITY_IDLE
+
+/* flags to FormatMessage */
+#define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100
+#define FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200
+#define FORMAT_MESSAGE_FROM_STRING 0x00000400
+#define FORMAT_MESSAGE_FROM_HMODULE 0x00000800
+#define FORMAT_MESSAGE_FROM_SYSTEM 0x00001000
+#define FORMAT_MESSAGE_ARGUMENT_ARRAY 0x00002000
+#define FORMAT_MESSAGE_MAX_WIDTH_MASK 0x000000FF
+
+/* flags to ACTCTX[AW] */
+#define ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID (0x00000001)
+#define ACTCTX_FLAG_LANGID_VALID (0x00000002)
+#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID (0x00000004)
+#define ACTCTX_FLAG_RESOURCE_NAME_VALID (0x00000008)
+#define ACTCTX_FLAG_SET_PROCESS_DEFAULT (0x00000010)
+#define ACTCTX_FLAG_APPLICATION_NAME_VALID (0x00000020)
+#define ACTCTX_FLAG_SOURCE_IS_ASSEMBLYREF (0x00000040)
+#define ACTCTX_FLAG_HMODULE_VALID (0x00000080)
+
+/* flags to DeactiveActCtx */
+#define DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION (0x00000001)
+
+/* flags to FindActCtxSection{Guid,String[AW]} */
+#define FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX (0x00000001)
+#define FIND_ACTCTX_SECTION_KEY_RETURN_FLAGS (0x00000002)
+#define FIND_ACTCTX_SECTION_KEY_RETURN_ASSEMBLY_METADATA (0x00000004)
+
+/* flags to QueryActCtxW */
+#define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX (0x00000004)
+#define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE (0x00000008)
+#define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS (0x00000010)
+#define QUERY_ACTCTX_FLAG_NO_ADDREF (0x80000000)
+
+typedef struct tagACTCTXA {
+ ULONG cbSize;
+ DWORD dwFlags;
+ LPCSTR lpSource;
+ USHORT wProcessorArchitecture;
+ LANGID wLangId;
+ LPCSTR lpAssemblyDirectory;
+ LPCSTR lpResourceName;
+ LPCSTR lpApplicationName;
+ HMODULE hModule;
+} ACTCTXA, *PACTCTXA;
+
+typedef struct tagACTCTXW {
+ ULONG cbSize;
+ DWORD dwFlags;
+ LPCWSTR lpSource;
+ USHORT wProcessorArchitecture;
+ LANGID wLangId;
+ LPCWSTR lpAssemblyDirectory;
+ LPCWSTR lpResourceName;
+ LPCWSTR lpApplicationName;
+ HMODULE hModule;
+} ACTCTXW, *PACTCTXW;
+
+DECL_WINELIB_TYPE_AW(ACTCTX)
+DECL_WINELIB_TYPE_AW(PACTCTX)
+
+typedef const ACTCTXA *PCACTCTXA;
+typedef const ACTCTXW *PCACTCTXW;
+DECL_WINELIB_TYPE_AW(PCACTCTX)
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA_2600 {
+ ULONG cbSize;
+ ULONG ulDataFormatVersion;
+ PVOID lpData;
+ ULONG ulLength;
+ PVOID lpSectionGlobalData;
+ ULONG ulSectionGlobalDataLength;
+ PVOID lpSectionBase;
+ ULONG ulSectionTotalLength;
+ HANDLE hActCtx;
+ ULONG ulAssemblyRosterIndex;
+} ACTCTX_SECTION_KEYED_DATA_2600, *PACTCTX_SECTION_KEYED_DATA_2600;
+typedef const ACTCTX_SECTION_KEYED_DATA_2600 *PCACTCTX_SECTION_KEYED_DATA_2600;
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
+ PVOID lpInformation;
+ PVOID lpSectionBase;
+ ULONG ulSectionLength;
+ PVOID lpSectionGlobalDataBase;
+ ULONG ulSectionGlobalDataLength;
+} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+typedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA {
+ ULONG cbSize;
+ ULONG ulDataFormatVersion;
+ PVOID lpData;
+ ULONG ulLength;
+ PVOID lpSectionGlobalData;
+ ULONG ulSectionGlobalDataLength;
+ PVOID lpSectionBase;
+ ULONG ulSectionTotalLength;
+ HANDLE hActCtx;
+ ULONG ulAssemblyRosterIndex;
+
+ /* Non 2600 extra fields */
+ ULONG ulFlags;
+ ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;
+} ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA;
+typedef const ACTCTX_SECTION_KEYED_DATA *PCACTCTX_SECTION_KEYED_DATA;
+
+typedef struct _ACTIVATION_CONTEXT_BASIC_INFORMATION {
+ HANDLE hActCtx;
+ DWORD dwFlags;
+} ACTIVATION_CONTEXT_BASIC_INFORMATION, *PACTIVATION_CONTEXT_BASIC_INFORMATION;
+
+typedef BOOL (WINAPI *PQUERYACTCTXW_FUNC)(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *);
+
+typedef struct tagCOMSTAT
+{
+ DWORD fCtsHold : 1;
+ DWORD fDsrHold : 1;
+ DWORD fRlsdHold : 1;
+ DWORD fXoffHold : 1;
+ DWORD fXoffSent : 1;
+ DWORD fEof : 1;
+ DWORD fTxim : 1;
+ DWORD fReserved : 25;
+ DWORD cbInQue;
+ DWORD cbOutQue;
+} COMSTAT, *LPCOMSTAT;
+
+typedef struct tagDCB
+{
+ DWORD DCBlength;
+ DWORD BaudRate;
+ unsigned fBinary :1;
+ unsigned fParity :1;
+ unsigned fOutxCtsFlow :1;
+ unsigned fOutxDsrFlow :1;
+ unsigned fDtrControl :2;
+ unsigned fDsrSensitivity :1;
+ unsigned fTXContinueOnXoff :1;
+ unsigned fOutX :1;
+ unsigned fInX :1;
+ unsigned fErrorChar :1;
+ unsigned fNull :1;
+ unsigned fRtsControl :2;
+ unsigned fAbortOnError :1;
+ unsigned fDummy2 :17;
+ WORD wReserved;
+ WORD XonLim;
+ WORD XoffLim;
+ BYTE ByteSize;
+ BYTE Parity;
+ BYTE StopBits;
+ char XonChar;
+ char XoffChar;
+ char ErrorChar;
+ char EofChar;
+ char EvtChar;
+ WORD wReserved1;
+} DCB, *LPDCB;
+
+typedef struct tagCOMMCONFIG {
+ DWORD dwSize;
+ WORD wVersion;
+ WORD wReserved;
+ DCB dcb;
+ DWORD dwProviderSubType;
+ DWORD dwProviderOffset;
+ DWORD dwProviderSize;
+ DWORD wcProviderData[1];
+} COMMCONFIG, *LPCOMMCONFIG;
+
+typedef struct tagCOMMPROP {
+ WORD wPacketLength;
+ WORD wPacketVersion;
+ DWORD dwServiceMask;
+ DWORD dwReserved1;
+ DWORD dwMaxTxQueue;
+ DWORD dwMaxRxQueue;
+ DWORD dwMaxBaud;
+ DWORD dwProvSubType;
+ DWORD dwProvCapabilities;
+ DWORD dwSettableParams;
+ DWORD dwSettableBaud;
+ WORD wSettableData;
+ WORD wSettableStopParity;
+ DWORD dwCurrentTxQueue;
+ DWORD dwCurrentRxQueue;
+ DWORD dwProvSpec1;
+ DWORD dwProvSpec2;
+ WCHAR wcProvChar[1];
+} COMMPROP, *LPCOMMPROP;
+
+#define SP_SERIALCOMM ((DWORD)1)
+
+#define BAUD_075 ((DWORD)0x01)
+#define BAUD_110 ((DWORD)0x02)
+#define BAUD_134_5 ((DWORD)0x04)
+#define BAUD_150 ((DWORD)0x08)
+#define BAUD_300 ((DWORD)0x10)
+#define BAUD_600 ((DWORD)0x20)
+#define BAUD_1200 ((DWORD)0x40)
+#define BAUD_1800 ((DWORD)0x80)
+#define BAUD_2400 ((DWORD)0x100)
+#define BAUD_4800 ((DWORD)0x200)
+#define BAUD_7200 ((DWORD)0x400)
+#define BAUD_9600 ((DWORD)0x800)
+#define BAUD_14400 ((DWORD)0x1000)
+#define BAUD_19200 ((DWORD)0x2000)
+#define BAUD_38400 ((DWORD)0x4000)
+#define BAUD_56K ((DWORD)0x8000)
+#define BAUD_57600 ((DWORD)0x40000)
+#define BAUD_115200 ((DWORD)0x20000)
+#define BAUD_128K ((DWORD)0x10000)
+#define BAUD_USER ((DWORD)0x10000000)
+
+#define PST_FAX ((DWORD)0x21)
+#define PST_LAT ((DWORD)0x101)
+#define PST_MODEM ((DWORD)0x06)
+#define PST_NETWORK_BRIDGE ((DWORD)0x100)
+#define PST_PARALLELPORT ((DWORD)0x02)
+#define PST_RS232 ((DWORD)0x01)
+#define PST_RS442 ((DWORD)0x03)
+#define PST_RS423 ((DWORD)0x04)
+#define PST_RS449 ((DWORD)0x06)
+#define PST_SCANNER ((DWORD)0x22)
+#define PST_TCPIP_TELNET ((DWORD)0x102)
+#define PST_UNSPECIFIED ((DWORD)0x00)
+#define PST_X25 ((DWORD)0x103)
+
+#define PCF_16BITMODE ((DWORD)0x200)
+#define PCF_DTRDSR ((DWORD)0x01)
+#define PCF_INTTIMEOUTS ((DWORD)0x80)
+#define PCF_PARITY_CHECK ((DWORD)0x08)
+#define PCF_RLSD ((DWORD)0x04)
+#define PCF_RTSCTS ((DWORD)0x02)
+#define PCF_SETXCHAR ((DWORD)0x20)
+#define PCF_SPECIALCHARS ((DWORD)0x100)
+#define PCF_TOTALTIMEOUTS ((DWORD)0x40)
+#define PCF_XONXOFF ((DWORD)0x10)
+
+#define SP_BAUD ((DWORD)0x02)
+#define SP_DATABITS ((DWORD)0x04)
+#define SP_HANDSHAKING ((DWORD)0x10)
+#define SP_PARITY ((DWORD)0x01)
+#define SP_PARITY_CHECK ((DWORD)0x20)
+#define SP_RLSD ((DWORD)0x40)
+#define SP_STOPBITS ((DWORD)0x08)
+
+#define DATABITS_5 ((DWORD)0x01)
+#define DATABITS_6 ((DWORD)0x02)
+#define DATABITS_7 ((DWORD)0x04)
+#define DATABITS_8 ((DWORD)0x08)
+#define DATABITS_16 ((DWORD)0x10)
+#define DATABITS_16X ((DWORD)0x20)
+
+#define STOPBITS_10 ((DWORD)1)
+#define STOPBITS_15 ((DWORD)2)
+#define STOPBITS_20 ((DWORD)4)
+
+#define PARITY_NONE ((DWORD)0x100)
+#define PARITY_ODD ((DWORD)0x200)
+#define PARITY_EVEN ((DWORD)0x400)
+#define PARITY_MARK ((DWORD)0x800)
+#define PARITY_SPACE ((DWORD)0x1000)
+
+typedef struct tagCOMMTIMEOUTS {
+ DWORD ReadIntervalTimeout;
+ DWORD ReadTotalTimeoutMultiplier;
+ DWORD ReadTotalTimeoutConstant;
+ DWORD WriteTotalTimeoutMultiplier;
+ DWORD WriteTotalTimeoutConstant;
+} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
+
+#define GET_TAPE_MEDIA_INFORMATION 0
+#define GET_TAPE_DRIVE_INFORMATION 1
+#define SET_TAPE_MEDIA_INFORMATION 0
+#define SET_TAPE_DRIVE_INFORMATION 1
+
+#define PROCESS_NAME_NATIVE 1
+
+typedef void (CALLBACK *PAPCFUNC)(ULONG_PTR);
+typedef void (CALLBACK *PTIMERAPCROUTINE)(LPVOID,DWORD,DWORD);
+
+typedef enum _COMPUTER_NAME_FORMAT
+{
+ ComputerNameNetBIOS,
+ ComputerNameDnsHostname,
+ ComputerNameDnsDomain,
+ ComputerNameDnsFullyQualified,
+ ComputerNamePhysicalNetBIOS,
+ ComputerNamePhysicalDnsHostname,
+ ComputerNamePhysicalDnsDomain,
+ ComputerNamePhysicalDnsFullyQualified,
+ ComputerNameMax
+} COMPUTER_NAME_FORMAT;
+
+#define HW_PROFILE_GUIDLEN 39
+#define MAX_PROFILE_LEN 80
+
+#define DOCKINFO_UNDOCKED 0x1
+#define DOCKINFO_DOCKED 0x2
+#define DOCKINFO_USER_SUPPLIED 0x4
+#define DOCKINFO_USER_UNDOCKED (DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED)
+#define DOCKINFO_USER_DOCKED (DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED)
+
+typedef struct tagHW_PROFILE_INFOA {
+ DWORD dwDockInfo;
+ CHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
+ CHAR szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA;
+
+typedef struct tagHW_PROFILE_INFOW {
+ DWORD dwDockInfo;
+ WCHAR szHwProfileGuid[HW_PROFILE_GUIDLEN];
+ WCHAR szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW;
+
+DECL_WINELIB_TYPE_AW(HW_PROFILE_INFO)
+DECL_WINELIB_TYPE_AW(LPHW_PROFILE_INFO)
+
+typedef enum _DEP_SYSTEM_POLICY_TYPE {
+ AlwaysOff = 0,
+ AlwaysOn = 1,
+ OptIn = 2,
+ OptOut = 3
+} DEP_SYSTEM_POLICY_TYPE;
+
+/* Event Logging */
+
+#define EVENTLOG_FULL_INFO 0
+
+typedef struct _EVENTLOG_FULL_INFORMATION {
+ DWORD dwFull;
+} EVENTLOG_FULL_INFORMATION, *LPEVENTLOG_FULL_INFORMATION;
+
+
+/* Stream data structures and defines */
+/*the types of backup data -- WIN32_STREAM_ID.dwStreamId below*/
+#define BACKUP_INVALID 0
+#define BACKUP_DATA 1
+#define BACKUP_EA_DATA 2
+#define BACKUP_SECURITY_DATA 3
+#define BACKUP_ALTERNATE_DATA 4
+#define BACKUP_LINK 5
+#define BACKUP_PROPERTY_DATA 6
+#define BACKUP_OBJECT_ID 7
+#define BACKUP_REPARSE_DATA 8
+#define BACKUP_SPARSE_BLOCK 9
+
+/*flags for WIN32_STREAM_ID.dwStreamAttributes below*/
+#define STREAM_NORMAL_ATTRIBUTE 0
+#define STREAM_MODIFIED_WHEN_READ 1
+#define STREAM_CONTAINS_SECURITY 2
+#define STREAM_CONTAINS_PROPERTIES 4
+#define STREAM_SPARSE_ATTRIBUTE 8
+
+#include <pshpack8.h>
+typedef struct _WIN32_STREAM_ID {
+ DWORD dwStreamId;
+ DWORD dwStreamAttributes;
+ LARGE_INTEGER DECLSPEC_ALIGN(8) Size;
+ DWORD dwStreamNameSize;
+ WCHAR cStreamName[ANYSIZE_ARRAY];
+} WIN32_STREAM_ID, *LPWIN32_STREAM_ID;
+#include <poppack.h>
+
+
+/* GetBinaryType return values.
+ */
+
+#define SCS_32BIT_BINARY 0
+#define SCS_DOS_BINARY 1
+#define SCS_WOW_BINARY 2
+#define SCS_PIF_BINARY 3
+#define SCS_POSIX_BINARY 4
+#define SCS_OS216_BINARY 5
+#define SCS_64BIT_BINARY 6
+
+/* flags for DefineDosDevice */
+#define DDD_RAW_TARGET_PATH 0x00000001
+#define DDD_REMOVE_DEFINITION 0x00000002
+#define DDD_EXACT_MATCH_ON_REMOVE 0x00000004
+#define DDD_NO_BROADCAST_SYSTEM 0x00000008
+#define DDD_LUID_BROADCAST_DRIVE 0x00000010
+
+#define LOGON_WITH_PROFILE 0x00000001
+#define LOGON_NETCREDENTIALS_ONLY 0x00000002
+#define LOGON_ZERO_PASSWORD_BUFFER 0x80000000
+
+/* one-time initialisation API */
+typedef RTL_RUN_ONCE INIT_ONCE;
+typedef PRTL_RUN_ONCE PINIT_ONCE;
+typedef PRTL_RUN_ONCE LPINIT_ONCE;
+#define INIT_ONCE_STATIC_INIT RTL_RUN_ONCE_INIT
+#define INIT_ONCE_CHECK_ONLY RTL_RUN_ONCE_CHECK_ONLY
+#define INIT_ONCE_ASYNC RTL_RUN_ONCE_ASYNC
+#define INIT_ONCE_INIT_FAILED RTL_RUN_ONCE_INIT_FAILED
+/* initialization callback prototype */
+typedef BOOL (WINAPI *PINIT_ONCE_FN)(PINIT_ONCE,PVOID,PVOID*);
+
+WINBASEAPI BOOL WINAPI ActivateActCtx(HANDLE,ULONG_PTR *);
+WINADVAPI BOOL WINAPI AddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
+WINADVAPI BOOL WINAPI AddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+WINADVAPI BOOL WINAPI AddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
+WINADVAPI BOOL WINAPI AddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+WINADVAPI BOOL WINAPI AddAce(PACL,DWORD,DWORD,LPVOID,DWORD);
+WINBASEAPI ATOM WINAPI AddAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI AddAtomW(LPCWSTR);
+#define AddAtom WINELIB_NAME_AW(AddAtom)
+WINADVAPI BOOL WINAPI AddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
+WINADVAPI BOOL WINAPI AddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
+WINBASEAPI VOID WINAPI AddRefActCtx(HANDLE);
+WINBASEAPI PVOID WINAPI AddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
+WINADVAPI BOOL WINAPI AdjustTokenGroups(HANDLE,BOOL,PTOKEN_GROUPS,DWORD,PTOKEN_GROUPS,PDWORD);
+WINADVAPI BOOL WINAPI AccessCheck(PSECURITY_DESCRIPTOR,HANDLE,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);
+WINADVAPI BOOL WINAPI AccessCheckAndAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);
+WINADVAPI BOOL WINAPI AccessCheckAndAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,DWORD,PGENERIC_MAPPING,BOOL,LPDWORD,LPBOOL,LPBOOL);
+#define AccessCheckAndAuditAlarm WINELIB_NAME_AW(AccessCheckAndAuditAlarm)
+WINADVAPI BOOL WINAPI AccessCheckByType(PSECURITY_DESCRIPTOR,PSID,HANDLE,DWORD,POBJECT_TYPE_LIST,DWORD,PGENERIC_MAPPING,PPRIVILEGE_SET,LPDWORD,LPDWORD,LPBOOL);
+WINBASEAPI VOID WINAPI AcquireSRWLockExclusive(PSRWLOCK);
+WINBASEAPI VOID WINAPI AcquireSRWLockShared(PSRWLOCK);
+WINADVAPI BOOL WINAPI AdjustTokenPrivileges(HANDLE,BOOL,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+WINADVAPI BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
+WINADVAPI BOOL WINAPI AllocateLocallyUniqueId(PLUID);
+WINADVAPI BOOL WINAPI AreAllAccessesGranted(DWORD,DWORD);
+WINADVAPI BOOL WINAPI AreAnyAccessesGranted(DWORD,DWORD);
+WINBASEAPI BOOL WINAPI AreFileApisANSI(void);
+WINBASEAPI BOOL WINAPI AssignProcessToJobObject(HANDLE,HANDLE);
+WINADVAPI BOOL WINAPI BackupEventLogA(HANDLE,LPCSTR);
+WINADVAPI BOOL WINAPI BackupEventLogW(HANDLE,LPCWSTR);
+#define BackupEventLog WINELIB_NAME_AW(BackupEventLog)
+WINBASEAPI BOOL WINAPI BackupRead(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);
+WINBASEAPI BOOL WINAPI BackupSeek(HANDLE,DWORD,DWORD,LPDWORD,LPDWORD,LPVOID*);
+WINBASEAPI BOOL WINAPI BackupWrite(HANDLE,LPBYTE,DWORD,LPDWORD,BOOL,BOOL,LPVOID*);
+WINBASEAPI BOOL WINAPI Beep(DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI BeginUpdateResourceA(LPCSTR,BOOL);
+WINBASEAPI HANDLE WINAPI BeginUpdateResourceW(LPCWSTR,BOOL);
+#define BeginUpdateResource WINELIB_NAME_AW(BeginUpdateResource)
+WINBASEAPI BOOL WINAPI BindIoCompletionCallback(HANDLE,LPOVERLAPPED_COMPLETION_ROUTINE,ULONG);
+WINBASEAPI BOOL WINAPI BuildCommDCBA(LPCSTR,LPDCB);
+WINBASEAPI BOOL WINAPI BuildCommDCBW(LPCWSTR,LPDCB);
+#define BuildCommDCB WINELIB_NAME_AW(BuildCommDCB)
+WINBASEAPI BOOL WINAPI BuildCommDCBAndTimeoutsA(LPCSTR,LPDCB,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL WINAPI BuildCommDCBAndTimeoutsW(LPCWSTR,LPDCB,LPCOMMTIMEOUTS);
+#define BuildCommDCBAndTimeouts WINELIB_NAME_AW(BuildCommDCBAndTimeouts)
+WINBASEAPI BOOL WINAPI CallNamedPipeA(LPCSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);
+WINBASEAPI BOOL WINAPI CallNamedPipeW(LPCWSTR,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,DWORD);
+#define CallNamedPipe WINELIB_NAME_AW(CallNamedPipe)
+WINBASEAPI BOOL WINAPI CancelIo(HANDLE);
+WINBASEAPI BOOL WINAPI CancelIoEx(HANDLE,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI CancelTimerQueueTimer(HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI CancelWaitableTimer(HANDLE);
+WINBASEAPI BOOL WINAPI ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG);
+WINADVAPI BOOL WINAPI CheckTokenMembership(HANDLE,PSID,PBOOL);
+WINBASEAPI BOOL WINAPI ClearCommBreak(HANDLE);
+WINBASEAPI BOOL WINAPI ClearCommError(HANDLE,LPDWORD,LPCOMSTAT);
+WINADVAPI BOOL WINAPI ClearEventLogA(HANDLE,LPCSTR);
+WINADVAPI BOOL WINAPI ClearEventLogW(HANDLE,LPCWSTR);
+#define ClearEventLog WINELIB_NAME_AW(ClearEventLog)
+WINADVAPI BOOL WINAPI CloseEventLog(HANDLE);
+WINBASEAPI BOOL WINAPI CloseHandle(HANDLE);
+WINBASEAPI BOOL WINAPI CommConfigDialogA(LPCSTR,HWND,LPCOMMCONFIG);
+WINBASEAPI BOOL WINAPI CommConfigDialogW(LPCWSTR,HWND,LPCOMMCONFIG);
+#define CommConfigDialog WINELIB_NAME_AW(CommConfigDialog)
+WINBASEAPI BOOL WINAPI ConnectNamedPipe(HANDLE,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI ContinueDebugEvent(DWORD,DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI ConvertToGlobalHandle(HANDLE hSrc);
+WINBASEAPI BOOL WINAPI CopyFileA(LPCSTR,LPCSTR,BOOL);
+WINBASEAPI BOOL WINAPI CopyFileW(LPCWSTR,LPCWSTR,BOOL);
+#define CopyFile WINELIB_NAME_AW(CopyFile)
+WINBASEAPI HRESULT WINAPI CopyFile2(PCWSTR,PCWSTR,COPYFILE2_EXTENDED_PARAMETERS*);
+WINBASEAPI BOOL WINAPI CopyFileExA(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);
+WINBASEAPI BOOL WINAPI CopyFileExW(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD);
+#define CopyFileEx WINELIB_NAME_AW(CopyFileEx)
+WINADVAPI BOOL WINAPI CopySid(DWORD,PSID,PSID);
+WINBASEAPI INT WINAPI CompareFileTime(const FILETIME*,const FILETIME*);
+WINBASEAPI BOOL WINAPI ConvertFiberToThread(void);
+WINBASEAPI LPVOID WINAPI ConvertThreadToFiber(LPVOID);
+WINBASEAPI LPVOID WINAPI ConvertThreadToFiberEx(LPVOID,DWORD);
+WINADVAPI BOOL WINAPI ConvertToAutoInheritPrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,GUID*,BOOL,PGENERIC_MAPPING);
+WINBASEAPI HANDLE WINAPI CreateActCtxA(PCACTCTXA);
+WINBASEAPI HANDLE WINAPI CreateActCtxW(PCACTCTXW);
+#define CreateActCtx WINELIB_NAME_AW(CreateActCtx)
+WINBASEAPI BOOL WINAPI CreateDirectoryA(LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreateDirectoryW(LPCWSTR,LPSECURITY_ATTRIBUTES);
+#define CreateDirectory WINELIB_NAME_AW(CreateDirectory)
+WINBASEAPI BOOL WINAPI CreateDirectoryExA(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINBASEAPI BOOL WINAPI CreateDirectoryExW(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
+#define CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx)
+WINBASEAPI HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateEventW(LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCWSTR);
+#define CreateEvent WINELIB_NAME_AW(CreateEvent)
+WINBASEAPI HANDLE WINAPI CreateEventExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI CreateEventExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);
+#define CreateEventEx WINELIB_NAME_AW(CreateEventEx)
+WINBASEAPI LPVOID WINAPI CreateFiber(SIZE_T,LPFIBER_START_ROUTINE,LPVOID);
+WINBASEAPI LPVOID WINAPI CreateFiberEx(SIZE_T,SIZE_T,DWORD,LPFIBER_START_ROUTINE,LPVOID);
+WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
+WINBASEAPI HANDLE WINAPI CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
+#define CreateFile WINELIB_NAME_AW(CreateFile)
+WINBASEAPI HANDLE WINAPI CreateFileMappingA(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR);
+#define CreateFileMapping WINELIB_NAME_AW(CreateFileMapping)
+WINBASEAPI HANDLE WINAPI CreateIoCompletionPort(HANDLE,HANDLE,ULONG_PTR,DWORD);
+WINBASEAPI HANDLE WINAPI CreateJobObjectA(LPSECURITY_ATTRIBUTES,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateJobObjectW(LPSECURITY_ATTRIBUTES,LPCWSTR);
+#define CreateJobObject WINELIB_NAME_AW(CreateJobObject)
+WINBASEAPI HANDLE WINAPI CreateMailslotA(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE WINAPI CreateMailslotW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+#define CreateMailslot WINELIB_NAME_AW(CreateMailslot)
+WINBASEAPI HANDLE WINAPI CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE);
+WINBASEAPI HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
+#define CreateMutex WINELIB_NAME_AW(CreateMutex)
+WINBASEAPI HANDLE WINAPI CreateMutexExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI CreateMutexExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);
+#define CreateMutexEx WINELIB_NAME_AW(CreateMutexEx)
+WINBASEAPI HANDLE WINAPI CreateNamedPipeA(LPCSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+WINBASEAPI HANDLE WINAPI CreateNamedPipeW(LPCWSTR,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPSECURITY_ATTRIBUTES);
+#define CreateNamedPipe WINELIB_NAME_AW(CreateNamedPipe)
+WINBASEAPI BOOL WINAPI CreatePipe(PHANDLE,PHANDLE,LPSECURITY_ATTRIBUTES,DWORD);
+WINADVAPI BOOL WINAPI CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOL,HANDLE,PGENERIC_MAPPING);
+WINBASEAPI BOOL WINAPI CreateProcessA(LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+WINBASEAPI BOOL WINAPI CreateProcessW(LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+#define CreateProcess WINELIB_NAME_AW(CreateProcess)
+WINADVAPI BOOL WINAPI CreateProcessAsUserA(HANDLE,LPCSTR,LPSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCSTR,LPSTARTUPINFOA,LPPROCESS_INFORMATION);
+WINADVAPI BOOL WINAPI CreateProcessAsUserW(HANDLE,LPCWSTR,LPWSTR,LPSECURITY_ATTRIBUTES,LPSECURITY_ATTRIBUTES,BOOL,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+#define CreateProcessAsUser WINELIB_NAME_AW(CreateProcessAsUser)
+WINADVAPI BOOL WINAPI CreateProcessWithLogonW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPCWSTR,LPWSTR,DWORD,LPVOID,LPCWSTR,LPSTARTUPINFOW,LPPROCESS_INFORMATION);
+WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE,LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI CreateRestrictedToken(HANDLE,DWORD,DWORD,PSID_AND_ATTRIBUTES,DWORD,PLUID_AND_ATTRIBUTES,DWORD,PSID_AND_ATTRIBUTES,PHANDLE);
+WINBASEAPI HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateSemaphoreW(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
+#define CreateSemaphore WINELIB_NAME_AW(CreateSemaphore)
+WINBASEAPI HANDLE WINAPI CreateSemaphoreExA(SECURITY_ATTRIBUTES*,LONG,LONG,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI CreateSemaphoreExW(SECURITY_ATTRIBUTES*,LONG,LONG,LPCWSTR,DWORD,DWORD);
+#define CreateSemaphoreEx WINELIB_NAME_AW(CreateSemaphoreEx)
+WINBASEAPI DWORD WINAPI CreateTapePartition(HANDLE,DWORD,DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES,SIZE_T,LPTHREAD_START_ROUTINE,LPVOID,DWORD,LPDWORD);
+WINBASEAPI HANDLE WINAPI CreateTimerQueue(void);
+WINBASEAPI BOOL WINAPI CreateTimerQueueTimer(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,ULONG);
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR);
+#define CreateWaitableTimer WINELIB_NAME_AW(CreateWaitableTimer)
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerExA(SECURITY_ATTRIBUTES*,LPCSTR,DWORD,DWORD);
+WINBASEAPI HANDLE WINAPI CreateWaitableTimerExW(SECURITY_ATTRIBUTES*,LPCWSTR,DWORD,DWORD);
+#define CreateWaitableTimerEx WINELIB_NAME_AW(CreateWaitableTimerEx)
+WINADVAPI BOOL WINAPI CreateWellKnownSid(WELL_KNOWN_SID_TYPE,PSID,PSID,DWORD*);
+WINBASEAPI BOOL WINAPI DeactivateActCtx(DWORD,ULONG_PTR);
+WINBASEAPI BOOL WINAPI DebugActiveProcess(DWORD);
+WINBASEAPI BOOL WINAPI DebugActiveProcessStop(DWORD);
+WINBASEAPI void WINAPI DebugBreak(void);
+WINBASEAPI BOOL WINAPI DebugBreakProcess(HANDLE);
+WINBASEAPI BOOL WINAPI DebugSetProcessKillOnExit(BOOL);
+WINBASEAPI PVOID WINAPI DecodePointer(PVOID);
+WINADVAPI BOOL WINAPI DecryptFileA(LPCSTR,DWORD);
+WINADVAPI BOOL WINAPI DecryptFileW(LPCWSTR,DWORD);
+#define DecryptFile WINELIB_NAME_AW(DecryptFile)
+WINBASEAPI BOOL WINAPI DefineDosDeviceA(DWORD,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI DefineDosDeviceW(DWORD,LPCWSTR,LPCWSTR);
+#define DefineDosDevice WINELIB_NAME_AW(DefineDosDevice)
+#define DefineHandleTable(w) ((w),TRUE)
+WINADVAPI BOOL WINAPI DeleteAce(PACL,DWORD);
+WINBASEAPI ATOM WINAPI DeleteAtom(ATOM);
+WINBASEAPI void WINAPI DeleteCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI void WINAPI DeleteFiber(LPVOID);
+WINBASEAPI BOOL WINAPI DeleteFileA(LPCSTR);
+WINBASEAPI BOOL WINAPI DeleteFileW(LPCWSTR);
+#define DeleteFile WINELIB_NAME_AW(DeleteFile)
+WINBASEAPI BOOL WINAPI DeleteTimerQueue(HANDLE);
+WINBASEAPI BOOL WINAPI DeleteTimerQueueEx(HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI DeleteTimerQueueTimer(HANDLE,HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI DeleteVolumeMountPointA(LPCSTR);
+WINBASEAPI BOOL WINAPI DeleteVolumeMountPointW(LPCWSTR);
+#define DeleteVolumeMountPoint WINELIB_NAME_AW(DeleteVolumeMountPoint)
+WINADVAPI BOOL WINAPI DeregisterEventSource(HANDLE);
+WINADVAPI BOOL WINAPI DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR*);
+WINBASEAPI BOOL WINAPI DeviceIoControl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI DisableThreadLibraryCalls(HMODULE);
+WINBASEAPI BOOL WINAPI DisconnectNamedPipe(HANDLE);
+WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameA(LPCSTR,LPSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI DnsHostnameToComputerNameW(LPCWSTR,LPWSTR,LPDWORD);
+#define DnsHostnameToComputerName WINELIB_NAME_AW(DnsHostnameToComputerName)
+WINBASEAPI BOOL WINAPI DosDateTimeToFileTime(WORD,WORD,LPFILETIME);
+WINBASEAPI BOOL WINAPI DuplicateHandle(HANDLE,HANDLE,HANDLE,HANDLE*,DWORD,BOOL,DWORD);
+WINADVAPI BOOL WINAPI DuplicateToken(HANDLE,SECURITY_IMPERSONATION_LEVEL,PHANDLE);
+WINADVAPI BOOL WINAPI DuplicateTokenEx(HANDLE,DWORD,LPSECURITY_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+WINBASEAPI BOOL WINAPI EscapeCommFunction(HANDLE,UINT);
+WINBASEAPI PVOID WINAPI EncodePointer(PVOID);
+WINADVAPI BOOL WINAPI EncryptFileA(LPCSTR);
+WINADVAPI BOOL WINAPI EncryptFileW(LPCWSTR);
+#define EncryptFile WINELIB_NAME_AW(EncryptFile)
+WINBASEAPI BOOL WINAPI EndUpdateResourceA(HANDLE,BOOL);
+WINBASEAPI BOOL WINAPI EndUpdateResourceW(HANDLE,BOOL);
+#define EndUpdateResource WINELIB_NAME_AW(EndUpdateResource)
+WINBASEAPI void WINAPI EnterCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI BOOL WINAPI EnumResourceLanguagesA(HMODULE,LPCSTR,LPCSTR,ENUMRESLANGPROCA,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceLanguagesW(HMODULE,LPCWSTR,LPCWSTR,ENUMRESLANGPROCW,LONG_PTR);
+#define EnumResourceLanguages WINELIB_NAME_AW(EnumResourceLanguages)
+WINBASEAPI BOOL WINAPI EnumResourceNamesA(HMODULE,LPCSTR,ENUMRESNAMEPROCA,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceNamesW(HMODULE,LPCWSTR,ENUMRESNAMEPROCW,LONG_PTR);
+#define EnumResourceNames WINELIB_NAME_AW(EnumResourceNames)
+WINBASEAPI BOOL WINAPI EnumResourceTypesA(HMODULE,ENUMRESTYPEPROCA,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumResourceTypesW(HMODULE,ENUMRESTYPEPROCW,LONG_PTR);
+#define EnumResourceTypes WINELIB_NAME_AW(EnumResourceTypes)
+WINADVAPI BOOL WINAPI EqualSid(PSID, PSID);
+WINADVAPI BOOL WINAPI EqualPrefixSid(PSID,PSID);
+WINBASEAPI DWORD WINAPI EraseTape(HANDLE,DWORD,BOOL);
+WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitProcess(DWORD);
+WINBASEAPI VOID DECLSPEC_NORETURN WINAPI ExitThread(DWORD);
+WINBASEAPI DWORD WINAPI ExpandEnvironmentStringsA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI ExpandEnvironmentStringsW(LPCWSTR,LPWSTR,DWORD);
+#define ExpandEnvironmentStrings WINELIB_NAME_AW(ExpandEnvironmentStrings)
+WINBASEAPI void WINAPI FatalAppExitA(UINT,LPCSTR);
+WINBASEAPI void WINAPI FatalAppExitW(UINT,LPCWSTR);
+WINBASEAPI void WINAPI FatalExit(int);
+#define FatalAppExit WINELIB_NAME_AW(FatalAppExit)
+WINADVAPI BOOL WINAPI FileEncryptionStatusA(LPCSTR,LPDWORD);
+WINADVAPI BOOL WINAPI FileEncryptionStatusW(LPCWSTR,LPDWORD);
+#define FileEncryptionStatus WINELIB_NAME_AW(FileEncryptionStatus)
+WINBASEAPI BOOL WINAPI FileTimeToDosDateTime(const FILETIME*,LPWORD,LPWORD);
+WINBASEAPI BOOL WINAPI FileTimeToLocalFileTime(const FILETIME*,LPFILETIME);
+WINBASEAPI BOOL WINAPI FileTimeToSystemTime(const FILETIME*,LPSYSTEMTIME);
+WINBASEAPI BOOL WINAPI FindActCtxSectionStringA(DWORD,const GUID *,ULONG,LPCSTR,PACTCTX_SECTION_KEYED_DATA);
+WINBASEAPI BOOL WINAPI FindActCtxSectionStringW(DWORD,const GUID *,ULONG,LPCWSTR,PACTCTX_SECTION_KEYED_DATA);
+#define FindActCtxSectionString WINELIB_NAME_AW(FindActCtxSectionString)
+WINBASEAPI BOOL WINAPI FindActCtxSectionGuid(DWORD,const GUID *,ULONG,const GUID *,PACTCTX_SECTION_KEYED_DATA);
+WINBASEAPI ATOM WINAPI FindAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI FindAtomW(LPCWSTR);
+#define FindAtom WINELIB_NAME_AW(FindAtom)
+WINBASEAPI BOOL WINAPI FindClose(HANDLE);
+WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationA(LPCSTR,BOOL,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstChangeNotificationW(LPCWSTR,BOOL,DWORD);
+#define FindFirstChangeNotification WINELIB_NAME_AW(FindFirstChangeNotification)
+WINBASEAPI HANDLE WINAPI FindFirstFileA(LPCSTR,LPWIN32_FIND_DATAA);
+WINBASEAPI HANDLE WINAPI FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW);
+#define FindFirstFile WINELIB_NAME_AW(FindFirstFile)
+WINBASEAPI HANDLE WINAPI FindFirstFileExA(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstFileExW(LPCWSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);
+#define FindFirstFileEx WINELIB_NAME_AW(FindFirstFileEx)
+WINADVAPI BOOL WINAPI FindFirstFreeAce(PACL,LPVOID*);
+WINBASEAPI BOOL WINAPI FindNextChangeNotification(HANDLE);
+WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE,LPWIN32_FIND_DATAA);
+WINBASEAPI BOOL WINAPI FindNextFileW(HANDLE,LPWIN32_FIND_DATAW);
+#define FindNextFile WINELIB_NAME_AW(FindNextFile)
+WINBASEAPI BOOL WINAPI FindCloseChangeNotification(HANDLE);
+WINBASEAPI HRSRC WINAPI FindResourceA(HMODULE,LPCSTR,LPCSTR);
+WINBASEAPI HRSRC WINAPI FindResourceW(HMODULE,LPCWSTR,LPCWSTR);
+#define FindResource WINELIB_NAME_AW(FindResource)
+WINBASEAPI HRSRC WINAPI FindResourceExA(HMODULE,LPCSTR,LPCSTR,WORD);
+WINBASEAPI HRSRC WINAPI FindResourceExW(HMODULE,LPCWSTR,LPCWSTR,WORD);
+#define FindResourceEx WINELIB_NAME_AW(FindResourceEx)
+WINBASEAPI HANDLE WINAPI FindFirstVolumeA(LPSTR,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstVolumeW(LPWSTR,DWORD);
+#define FindFirstVolume WINELIB_NAME_AW(FindFirstVolume)
+WINBASEAPI HANDLE WINAPI FindFirstVolumeMountPointA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI HANDLE WINAPI FindFirstVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);
+#define FindFirstVolumeMountPoint WINELIB_NAME_AW(FindFirstVolumeMountPoint)
+WINBASEAPI BOOL WINAPI FindNextVolumeA(HANDLE,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI FindNextVolumeW(HANDLE,LPWSTR,DWORD);
+#define FindNextVolume WINELIB_NAME_AW(FindNextVolume)
+WINBASEAPI BOOL WINAPI FindNextVolumeMountPointA(HANDLE,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI FindNextVolumeMountPointW(HANDLE,LPWSTR,DWORD);
+#define FindNextVolumeMountPoint WINELIB_NAME_AW(FindNextVolumeMountPoint)
+WINBASEAPI BOOL WINAPI FindVolumeClose(HANDLE);
+WINBASEAPI BOOL WINAPI FindVolumeMountPointClose(HANDLE);
+WINBASEAPI DWORD WINAPI FlsAlloc(PFLS_CALLBACK_FUNCTION);
+WINBASEAPI BOOL WINAPI FlsFree(DWORD);
+WINBASEAPI PVOID WINAPI FlsGetValue(DWORD);
+WINBASEAPI BOOL WINAPI FlsSetValue(DWORD,PVOID);
+WINBASEAPI BOOL WINAPI FlushFileBuffers(HANDLE);
+WINBASEAPI BOOL WINAPI FlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+WINBASEAPI BOOL WINAPI FlushViewOfFile(LPCVOID,SIZE_T);
+WINBASEAPI DWORD WINAPI FormatMessageA(DWORD,LPCVOID,DWORD,DWORD,LPSTR,DWORD,__ms_va_list*);
+WINBASEAPI DWORD WINAPI FormatMessageW(DWORD,LPCVOID,DWORD,DWORD,LPWSTR,DWORD,__ms_va_list*);
+#define FormatMessage WINELIB_NAME_AW(FormatMessage)
+WINBASEAPI BOOL WINAPI FreeEnvironmentStringsA(LPSTR);
+WINBASEAPI BOOL WINAPI FreeEnvironmentStringsW(LPWSTR);
+#define FreeEnvironmentStrings WINELIB_NAME_AW(FreeEnvironmentStrings)
+WINBASEAPI BOOL WINAPI FreeLibrary(HMODULE);
+WINBASEAPI VOID DECLSPEC_NORETURN WINAPI FreeLibraryAndExitThread(HINSTANCE,DWORD);
+#define FreeModule(handle) FreeLibrary(handle)
+#define FreeProcInstance(proc) /*nothing*/
+WINBASEAPI BOOL WINAPI FreeResource(HGLOBAL);
+WINADVAPI PVOID WINAPI FreeSid(PSID);
+WINADVAPI BOOL WINAPI GetAce(PACL,DWORD,LPVOID*);
+WINADVAPI BOOL WINAPI GetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI UINT WINAPI GetAtomNameA(ATOM,LPSTR,INT);
+WINBASEAPI UINT WINAPI GetAtomNameW(ATOM,LPWSTR,INT);
+#define GetAtomName WINELIB_NAME_AW(GetAtomName)
+WINBASEAPI BOOL WINAPI GetBinaryTypeA( LPCSTR lpApplicationName, LPDWORD lpBinaryType );
+WINBASEAPI BOOL WINAPI GetBinaryTypeW( LPCWSTR lpApplicationName, LPDWORD lpBinaryType );
+#define GetBinaryType WINELIB_NAME_AW(GetBinaryType)
+WINBASEAPI BOOL WINAPI GetCurrentActCtx(HANDLE *);
+WINBASEAPI BOOL WINAPI GetCommConfig(HANDLE,LPCOMMCONFIG,LPDWORD);
+WINBASEAPI BOOL WINAPI GetCommMask(HANDLE,LPDWORD);
+WINBASEAPI BOOL WINAPI GetCommModemStatus(HANDLE,LPDWORD);
+WINBASEAPI BOOL WINAPI GetCommProperties(HANDLE,LPCOMMPROP);
+WINBASEAPI BOOL WINAPI GetCommState(HANDLE,LPDCB);
+WINBASEAPI BOOL WINAPI GetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);
+WINBASEAPI LPSTR WINAPI GetCommandLineA(void);
+WINBASEAPI LPWSTR WINAPI GetCommandLineW(void);
+#define GetCommandLine WINELIB_NAME_AW(GetCommandLine)
+WINBASEAPI DWORD WINAPI GetCompressedFileSizeA(LPCSTR,LPDWORD);
+WINBASEAPI DWORD WINAPI GetCompressedFileSizeW(LPCWSTR,LPDWORD);
+#define GetCompressedFileSize WINELIB_NAME_AW(GetCompressedFileSize)
+WINBASEAPI BOOL WINAPI GetComputerNameA(LPSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI GetComputerNameW(LPWSTR,LPDWORD);
+#define GetComputerName WINELIB_NAME_AW(GetComputerName)
+WINBASEAPI BOOL WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT,LPSTR,LPDWORD);
+WINBASEAPI BOOL WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT,LPWSTR,LPDWORD);
+#define GetComputerNameEx WINELIB_NAME_AW(GetComputerNameEx)
+WINBASEAPI UINT WINAPI GetCurrentDirectoryA(UINT,LPSTR);
+WINBASEAPI UINT WINAPI GetCurrentDirectoryW(UINT,LPWSTR);
+#define GetCurrentDirectory WINELIB_NAME_AW(GetCurrentDirectory)
+WINADVAPI BOOL WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA);
+WINADVAPI BOOL WINAPI GetCurrentHwProfileW(LPHW_PROFILE_INFOW);
+#define GetCurrentHwProfile WINELIB_NAME_AW(GetCurrentHwProfile)
+WINBASEAPI HANDLE WINAPI GetCurrentProcess(void);
+WINBASEAPI DWORD WINAPI GetCurrentProcessorNumber(void);
+WINBASEAPI VOID WINAPI GetCurrentProcessorNumberEx(PPROCESSOR_NUMBER);
+WINBASEAPI HANDLE WINAPI GetCurrentThread(void);
+#define GetCurrentTime() GetTickCount()
+WINBASEAPI BOOL WINAPI GetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,LPDWORD);
+WINBASEAPI BOOL WINAPI GetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,LPDWORD);
+#define GetDefaultCommConfig WINELIB_NAME_AW(GetDefaultCommConfig)
+WINBASEAPI BOOL WINAPI GetDevicePowerState(HANDLE,BOOL*);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceA(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceW(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+#define GetDiskFreeSpace WINELIB_NAME_AW(GetDiskFreeSpace)
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceExA(LPCSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+WINBASEAPI BOOL WINAPI GetDiskFreeSpaceExW(LPCWSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER);
+#define GetDiskFreeSpaceEx WINELIB_NAME_AW(GetDiskFreeSpaceEx)
+WINBASEAPI DWORD WINAPI GetDllDirectoryA(DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetDllDirectoryW(DWORD,LPWSTR);
+#define GetDllDirectory WINELIB_NAME_AW(GetDllDirectory)
+WINBASEAPI UINT WINAPI GetDriveTypeA(LPCSTR);
+WINBASEAPI UINT WINAPI GetDriveTypeW(LPCWSTR);
+#define GetDriveType WINELIB_NAME_AW(GetDriveType)
+WINBASEAPI DWORD WINAPI GetDynamicTimeZoneInformation(PDYNAMIC_TIME_ZONE_INFORMATION);
+WINBASEAPI LPSTR WINAPI GetEnvironmentStringsA(void);
+WINBASEAPI LPWSTR WINAPI GetEnvironmentStringsW(void);
+#define GetEnvironmentStrings WINELIB_NAME_AW(GetEnvironmentStrings)
+WINBASEAPI DWORD WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD);
+#define GetEnvironmentVariable WINELIB_NAME_AW(GetEnvironmentVariable)
+WINBASEAPI UINT WINAPI GetErrorMode(void);
+WINADVAPI BOOL WINAPI GetEventLogInformation(HANDLE,DWORD,LPVOID,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI GetExitCodeProcess(HANDLE,LPDWORD);
+WINBASEAPI BOOL WINAPI GetExitCodeThread(HANDLE,LPDWORD);
+WINBASEAPI DWORD WINAPI GetFileAttributesA(LPCSTR);
+WINBASEAPI DWORD WINAPI GetFileAttributesW(LPCWSTR);
+#define GetFileAttributes WINELIB_NAME_AW(GetFileAttributes)
+WINBASEAPI BOOL WINAPI GetFileAttributesExA(LPCSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
+WINBASEAPI BOOL WINAPI GetFileAttributesExW(LPCWSTR,GET_FILEEX_INFO_LEVELS,LPVOID);
+#define GetFileAttributesEx WINELIB_NAME_AW(GetFileAttributesEx)
+WINBASEAPI BOOL WINAPI GetFileInformationByHandle(HANDLE,BY_HANDLE_FILE_INFORMATION*);
+WINBASEAPI BOOL WINAPI GetFileInformationByHandleEx(HANDLE,FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD);
+WINADVAPI BOOL WINAPI GetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI GetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+#define GetFileSecurity WINELIB_NAME_AW(GetFileSecurity)
+WINBASEAPI DWORD WINAPI GetFileSize(HANDLE,LPDWORD);
+WINBASEAPI BOOL WINAPI GetFileSizeEx(HANDLE,PLARGE_INTEGER);
+WINBASEAPI BOOL WINAPI GetFileTime(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD WINAPI GetFileType(HANDLE);
+#define GetFreeSpace(w) (__MSABI_LONG(0x100000))
+WINBASEAPI DWORD WINAPI GetFullPathNameA(LPCSTR,DWORD,LPSTR,LPSTR*);
+WINBASEAPI DWORD WINAPI GetFullPathNameW(LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+#define GetFullPathName WINELIB_NAME_AW(GetFullPathName)
+WINBASEAPI BOOL WINAPI GetHandleInformation(HANDLE,LPDWORD);
+WINADVAPI BOOL WINAPI GetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI DWORD WINAPI GetLengthSid(PSID);
+WINBASEAPI VOID WINAPI GetLocalTime(LPSYSTEMTIME);
+WINBASEAPI DWORD WINAPI GetLogicalDrives(void);
+WINBASEAPI UINT WINAPI GetLogicalDriveStringsA(UINT,LPSTR);
+WINBASEAPI UINT WINAPI GetLogicalDriveStringsW(UINT,LPWSTR);
+#define GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
+WINBASEAPI DWORD WINAPI GetLongPathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetLongPathNameW(LPCWSTR,LPWSTR,DWORD);
+#define GetLongPathName WINELIB_NAME_AW(GetLongPathName)
+WINBASEAPI BOOL WINAPI GetMailslotInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI DWORD WINAPI GetModuleFileNameA(HMODULE,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetModuleFileNameW(HMODULE,LPWSTR,DWORD);
+#define GetModuleFileName WINELIB_NAME_AW(GetModuleFileName)
+WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR);
+WINBASEAPI HMODULE WINAPI GetModuleHandleW(LPCWSTR);
+#define GetModuleHandle WINELIB_NAME_AW(GetModuleHandle)
+WINBASEAPI BOOL WINAPI GetModuleHandleExA(DWORD,LPCSTR,HMODULE*);
+WINBASEAPI BOOL WINAPI GetModuleHandleExW(DWORD,LPCWSTR,HMODULE*);
+#define GetModuleHandleEx WINELIB_NAME_AW(GetModuleHandleEx)
+WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateA(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetNamedPipeHandleStateW(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
+#define GetNamedPipeHandleState WINELIB_NAME_AW(GetNamedPipeHandleState)
+WINBASEAPI BOOL WINAPI GetNamedPipeInfo(HANDLE,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI VOID WINAPI GetNativeSystemInfo(LPSYSTEM_INFO);
+WINADVAPI BOOL WINAPI GetNumberOfEventLogRecords(HANDLE,PDWORD);
+WINADVAPI BOOL WINAPI GetOldestEventLogRecord(HANDLE,PDWORD);
+WINBASEAPI BOOL WINAPI GetOverlappedResult(HANDLE,LPOVERLAPPED,LPDWORD,BOOL);
+WINBASEAPI DWORD WINAPI GetPriorityClass(HANDLE);
+WINADVAPI BOOL WINAPI GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,PDWORD);
+WINBASEAPI UINT WINAPI GetPrivateProfileIntA(LPCSTR,LPCSTR,INT,LPCSTR);
+WINBASEAPI UINT WINAPI GetPrivateProfileIntW(LPCWSTR,LPCWSTR,INT,LPCWSTR);
+#define GetPrivateProfileInt WINELIB_NAME_AW(GetPrivateProfileInt)
+WINBASEAPI INT WINAPI GetPrivateProfileSectionA(LPCSTR,LPSTR,DWORD,LPCSTR);
+WINBASEAPI INT WINAPI GetPrivateProfileSectionW(LPCWSTR,LPWSTR,DWORD,LPCWSTR);
+#define GetPrivateProfileSection WINELIB_NAME_AW(GetPrivateProfileSection)
+WINBASEAPI DWORD WINAPI GetPrivateProfileSectionNamesA(LPSTR,DWORD,LPCSTR);
+WINBASEAPI DWORD WINAPI GetPrivateProfileSectionNamesW(LPWSTR,DWORD,LPCWSTR);
+#define GetPrivateProfileSectionNames WINELIB_NAME_AW(GetPrivateProfileSectionNames)
+WINBASEAPI INT WINAPI GetPrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT,LPCSTR);
+WINBASEAPI INT WINAPI GetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT,LPCWSTR);
+#define GetPrivateProfileString WINELIB_NAME_AW(GetPrivateProfileString)
+WINBASEAPI BOOL WINAPI GetPrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+WINBASEAPI BOOL WINAPI GetPrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
+#define GetPrivateProfileStruct WINELIB_NAME_AW(GetPrivateProfileStruct)
+WINBASEAPI FARPROC WINAPI GetProcAddress(HMODULE,LPCSTR);
+WINBASEAPI BOOL WINAPI GetProcessAffinityMask(HANDLE,PDWORD_PTR,PDWORD_PTR);
+WINBASEAPI BOOL WINAPI GetLogicalProcessorInformation(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,PDWORD);
+WINBASEAPI BOOL WINAPI GetLogicalProcessorInformationEx(LOGICAL_PROCESSOR_RELATIONSHIP,PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,PDWORD);
+WINBASEAPI DWORD WINAPI GetProcessHeaps(DWORD,PHANDLE);
+WINBASEAPI DWORD WINAPI GetProcessId(HANDLE);
+WINBASEAPI BOOL WINAPI GetProcessIoCounters(HANDLE,PIO_COUNTERS);
+WINBASEAPI BOOL WINAPI GetProcessPriorityBoost(HANDLE,PBOOL);
+WINBASEAPI BOOL WINAPI GetProcessShutdownParameters(LPDWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI GetProcessTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);
+WINBASEAPI DWORD WINAPI GetProcessVersion(DWORD);
+WINBASEAPI BOOL WINAPI GetProcessWorkingSetSize(HANDLE,PSIZE_T,PSIZE_T);
+WINBASEAPI BOOL WINAPI GetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD);
+WINBASEAPI UINT WINAPI GetProfileIntA(LPCSTR,LPCSTR,INT);
+WINBASEAPI UINT WINAPI GetProfileIntW(LPCWSTR,LPCWSTR,INT);
+#define GetProfileInt WINELIB_NAME_AW(GetProfileInt)
+WINBASEAPI INT WINAPI GetProfileSectionA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI INT WINAPI GetProfileSectionW(LPCWSTR,LPWSTR,DWORD);
+#define GetProfileSection WINELIB_NAME_AW(GetProfileSection)
+WINBASEAPI INT WINAPI GetProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT);
+WINBASEAPI INT WINAPI GetProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,UINT);
+#define GetProfileString WINELIB_NAME_AW(GetProfileString)
+WINBASEAPI BOOL WINAPI GetQueuedCompletionStatus(HANDLE,LPDWORD,PULONG_PTR,LPOVERLAPPED*,DWORD);
+WINADVAPI BOOL WINAPI GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
+WINADVAPI BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);
+WINADVAPI BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);
+WINADVAPI DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR);
+WINADVAPI BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID *,LPBOOL);
+WINADVAPI BOOL WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,LPBOOL,PACL *,LPBOOL);
+WINADVAPI PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID);
+WINADVAPI DWORD WINAPI GetSidLengthRequired(BYTE);
+WINADVAPI PDWORD WINAPI GetSidSubAuthority(PSID,DWORD);
+WINADVAPI PUCHAR WINAPI GetSidSubAuthorityCount(PSID);
+WINBASEAPI DWORD WINAPI GetShortPathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetShortPathNameW(LPCWSTR,LPWSTR,DWORD);
+#define GetShortPathName WINELIB_NAME_AW(GetShortPathName)
+WINBASEAPI VOID WINAPI GetStartupInfoA(LPSTARTUPINFOA);
+WINBASEAPI VOID WINAPI GetStartupInfoW(LPSTARTUPINFOW);
+#define GetStartupInfo WINELIB_NAME_AW(GetStartupInfo)
+WINBASEAPI HANDLE WINAPI GetStdHandle(DWORD);
+WINBASEAPI UINT WINAPI GetSystemDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetSystemDirectoryW(LPWSTR,UINT);
+#define GetSystemDirectory WINELIB_NAME_AW(GetSystemDirectory)
+WINBASEAPI VOID WINAPI GetSystemInfo(LPSYSTEM_INFO);
+WINBASEAPI BOOL WINAPI GetSystemPowerStatus(LPSYSTEM_POWER_STATUS);
+WINBASEAPI BOOL WINAPI GetSystemRegistryQuota(PDWORD,PDWORD);
+WINBASEAPI VOID WINAPI GetSystemTime(LPSYSTEMTIME);
+WINBASEAPI BOOL WINAPI GetSystemTimeAdjustment(PDWORD,PDWORD,PBOOL);
+WINBASEAPI VOID WINAPI GetSystemTimeAsFileTime(LPFILETIME);
+WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetSystemWindowsDirectoryW(LPWSTR,UINT);
+#define GetSystemWindowsDirectory WINELIB_NAME_AW(GetSystemWindowsDirectory)
+WINBASEAPI UINT WINAPI GetSystemWow64DirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetSystemWow64DirectoryW(LPWSTR,UINT);
+#define GetSystemWow64Directory WINELIB_NAME_AW(GetSystemWow64Directory)
+WINBASEAPI DWORD WINAPI GetTapeParameters(HANDLE,DWORD,LPDWORD,LPVOID);
+WINBASEAPI DWORD WINAPI GetTapePosition(HANDLE,DWORD,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI DWORD WINAPI GetTapeStatus(HANDLE);
+WINBASEAPI UINT WINAPI GetTempFileNameA(LPCSTR,LPCSTR,UINT,LPSTR);
+WINBASEAPI UINT WINAPI GetTempFileNameW(LPCWSTR,LPCWSTR,UINT,LPWSTR);
+#define GetTempFileName WINELIB_NAME_AW(GetTempFileName)
+WINBASEAPI DWORD WINAPI GetTempPathA(DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetTempPathW(DWORD,LPWSTR);
+#define GetTempPath WINELIB_NAME_AW(GetTempPath)
+WINBASEAPI DWORD WINAPI GetThreadId(HANDLE);
+WINBASEAPI BOOL WINAPI GetThreadIOPendingFlag(HANDLE,PBOOL);
+WINBASEAPI DWORD WINAPI GetTickCount(void);
+WINBASEAPI ULONGLONG WINAPI GetTickCount64(void);
+WINBASEAPI DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION);
+WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE,CONTEXT *);
+WINBASEAPI DWORD WINAPI GetThreadErrorMode(void);
+WINBASEAPI INT WINAPI GetThreadPriority(HANDLE);
+WINBASEAPI BOOL WINAPI GetThreadPriorityBoost(HANDLE,PBOOL);
+WINBASEAPI BOOL WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY);
+WINBASEAPI BOOL WINAPI GetThreadTimes(HANDLE,LPFILETIME,LPFILETIME,LPFILETIME,LPFILETIME);
+WINADVAPI BOOL WINAPI GetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI GetUserNameA(LPSTR,LPDWORD);
+WINADVAPI BOOL WINAPI GetUserNameW(LPWSTR,LPDWORD);
+#define GetUserName WINELIB_NAME_AW(GetUserName)
+WINBASEAPI DWORD WINAPI GetVersion(void);
+WINBASEAPI BOOL WINAPI GetVersionExA(OSVERSIONINFOA*);
+WINBASEAPI BOOL WINAPI GetVersionExW(OSVERSIONINFOW*);
+#define GetVersionEx WINELIB_NAME_AW(GetVersionEx)
+WINBASEAPI BOOL WINAPI GetVolumeInformationA(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumeInformationW(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
+#define GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)
+WINBASEAPI BOOL WINAPI GetVolumeNameForVolumeMountPointA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumeNameForVolumeMountPointW(LPCWSTR,LPWSTR,DWORD);
+#define GetVolumeNameForVolumeMountPoint WINELIB_NAME_AW(GetVolumeNameForVolumeMountPoint)
+WINBASEAPI BOOL WINAPI GetVolumePathNameA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI BOOL WINAPI GetVolumePathNameW(LPCWSTR,LPWSTR,DWORD);
+#define GetVolumePathName WINELIB_NAME_AW(GetVolumePathName)
+WINBASEAPI BOOL WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR,LPSTR,DWORD,PDWORD);
+WINBASEAPI BOOL WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR,LPWSTR,DWORD,PDWORD);
+#define GetVolumePathNamesForVolumeName WINELIB_NAME_AW(GetVolumePathNamesForVolumeName)
+WINBASEAPI UINT WINAPI GetWindowsDirectoryA(LPSTR,UINT);
+WINBASEAPI UINT WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
+#define GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)
+WINBASEAPI UINT WINAPI GetWriteWatch(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*);
+WINBASEAPI ATOM WINAPI GlobalAddAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI GlobalAddAtomW(LPCWSTR);
+#define GlobalAddAtom WINELIB_NAME_AW(GlobalAddAtom)
+WINBASEAPI HGLOBAL WINAPI GlobalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);
+WINBASEAPI SIZE_T WINAPI GlobalCompact(DWORD);
+WINBASEAPI ATOM WINAPI GlobalDeleteAtom(ATOM);
+WINBASEAPI ATOM WINAPI GlobalFindAtomA(LPCSTR);
+WINBASEAPI ATOM WINAPI GlobalFindAtomW(LPCWSTR);
+#define GlobalFindAtom WINELIB_NAME_AW(GlobalFindAtom)
+WINBASEAPI VOID WINAPI GlobalFix(HGLOBAL);
+WINBASEAPI UINT WINAPI GlobalFlags(HGLOBAL);
+WINBASEAPI HGLOBAL WINAPI GlobalFree(HGLOBAL);
+WINBASEAPI UINT WINAPI GlobalGetAtomNameA(ATOM,LPSTR,INT);
+WINBASEAPI UINT WINAPI GlobalGetAtomNameW(ATOM,LPWSTR,INT);
+#define GlobalGetAtomName WINELIB_NAME_AW(GlobalGetAtomName)
+WINBASEAPI HGLOBAL WINAPI GlobalHandle(LPCVOID);
+WINBASEAPI LPVOID WINAPI GlobalLock(HGLOBAL);
+WINBASEAPI VOID WINAPI GlobalMemoryStatus(LPMEMORYSTATUS);
+WINBASEAPI BOOL WINAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX);
+WINBASEAPI HGLOBAL WINAPI GlobalReAlloc(HGLOBAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(3);
+WINBASEAPI SIZE_T WINAPI GlobalSize(HGLOBAL);
+WINBASEAPI VOID WINAPI GlobalUnfix(HGLOBAL);
+WINBASEAPI BOOL WINAPI GlobalUnlock(HGLOBAL);
+WINBASEAPI BOOL WINAPI GlobalUnWire(HGLOBAL);
+WINBASEAPI LPVOID WINAPI GlobalWire(HGLOBAL);
+#define HasOverlappedCompleted(lpOverlapped) ((lpOverlapped)->Internal != STATUS_PENDING)
+WINBASEAPI LPVOID WINAPI HeapAlloc(HANDLE,DWORD,SIZE_T) __WINE_ALLOC_SIZE(3);
+WINBASEAPI SIZE_T WINAPI HeapCompact(HANDLE,DWORD);
+WINBASEAPI HANDLE WINAPI HeapCreate(DWORD,SIZE_T,SIZE_T);
+WINBASEAPI BOOL WINAPI HeapDestroy(HANDLE);
+WINBASEAPI BOOL WINAPI HeapFree(HANDLE,DWORD,LPVOID);
+WINBASEAPI BOOL WINAPI HeapLock(HANDLE);
+WINBASEAPI LPVOID WINAPI HeapReAlloc(HANDLE,DWORD,LPVOID,SIZE_T) __WINE_ALLOC_SIZE(4);
+WINBASEAPI BOOL WINAPI HeapQueryInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);
+WINBASEAPI BOOL WINAPI HeapSetInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T);
+WINBASEAPI SIZE_T WINAPI HeapSize(HANDLE,DWORD,LPCVOID);
+WINBASEAPI BOOL WINAPI HeapUnlock(HANDLE);
+WINBASEAPI BOOL WINAPI HeapValidate(HANDLE,DWORD,LPCVOID);
+WINBASEAPI BOOL WINAPI HeapWalk(HANDLE,LPPROCESS_HEAP_ENTRY);
+WINBASEAPI BOOL WINAPI InitAtomTable(DWORD);
+WINADVAPI BOOL WINAPI InitializeAcl(PACL,DWORD,DWORD);
+WINBASEAPI VOID WINAPI InitializeConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI void WINAPI InitializeCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI BOOL WINAPI InitializeCriticalSectionAndSpinCount(CRITICAL_SECTION *,DWORD);
+WINBASEAPI BOOL WINAPI InitializeCriticalSectionEx(CRITICAL_SECTION *,DWORD,DWORD);
+WINADVAPI BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+WINADVAPI BOOL WINAPI InitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+WINBASEAPI VOID WINAPI InitializeSListHead(PSLIST_HEADER);
+WINBASEAPI VOID WINAPI InitializeSRWLock(PSRWLOCK);
+WINBASEAPI BOOL WINAPI InitOnceBeginInitialize(PINIT_ONCE, DWORD, PBOOL, PVOID*);
+WINBASEAPI BOOL WINAPI InitOnceComplete(PINIT_ONCE, DWORD, PVOID);
+WINBASEAPI BOOL WINAPI InitOnceExecuteOnce(PINIT_ONCE,PINIT_ONCE_FN,PVOID,PVOID*);
+WINBASEAPI VOID WINAPI InitOnceInitialize(PINIT_ONCE);
+WINBASEAPI PSLIST_ENTRY WINAPI InterlockedFlushSList(PSLIST_HEADER);
+WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPopEntrySList(PSLIST_HEADER);
+WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+WINBASEAPI BOOL WINAPI IsBadCodePtr(FARPROC);
+WINBASEAPI BOOL WINAPI IsBadHugeReadPtr(LPCVOID,UINT);
+WINBASEAPI BOOL WINAPI IsBadHugeWritePtr(LPVOID,UINT);
+WINBASEAPI BOOL WINAPI IsBadReadPtr(LPCVOID,UINT);
+WINBASEAPI BOOL WINAPI IsBadStringPtrA(LPCSTR,UINT);
+WINBASEAPI BOOL WINAPI IsBadStringPtrW(LPCWSTR,UINT);
+#define IsBadStringPtr WINELIB_NAME_AW(IsBadStringPtr)
+WINBASEAPI BOOL WINAPI IsBadWritePtr(LPVOID,UINT);
+WINBASEAPI BOOL WINAPI IsDebuggerPresent(void);
+WINBASEAPI BOOL WINAPI IsSystemResumeAutomatic(void);
+WINADVAPI BOOL WINAPI IsTextUnicode(LPCVOID,INT,LPINT);
+WINADVAPI BOOL WINAPI IsTokenRestricted(HANDLE);
+WINADVAPI BOOL WINAPI IsValidAcl(PACL);
+WINADVAPI BOOL WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+WINADVAPI BOOL WINAPI IsValidSid(PSID);
+WINADVAPI BOOL WINAPI IsWellKnownSid(PSID,WELL_KNOWN_SID_TYPE);
+WINBASEAPI BOOL WINAPI IsWow64Process(HANDLE,PBOOL);
+WINADVAPI BOOL WINAPI ImpersonateLoggedOnUser(HANDLE);
+WINADVAPI BOOL WINAPI ImpersonateNamedPipeClient(HANDLE);
+WINADVAPI BOOL WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
+WINBASEAPI BOOL WINAPI IsProcessInJob(HANDLE,HANDLE,PBOOL);
+WINBASEAPI BOOL WINAPI IsProcessorFeaturePresent(DWORD);
+WINBASEAPI void WINAPI LeaveCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI HMODULE WINAPI LoadLibraryA(LPCSTR);
+WINBASEAPI HMODULE WINAPI LoadLibraryW(LPCWSTR);
+#define LoadLibrary WINELIB_NAME_AW(LoadLibrary)
+WINBASEAPI HMODULE WINAPI LoadLibraryExA(LPCSTR,HANDLE,DWORD);
+WINBASEAPI HMODULE WINAPI LoadLibraryExW(LPCWSTR,HANDLE,DWORD);
+#define LoadLibraryEx WINELIB_NAME_AW(LoadLibraryEx)
+WINBASEAPI DWORD WINAPI LoadModule(LPCSTR,LPVOID);
+WINBASEAPI HGLOBAL WINAPI LoadResource(HMODULE,HRSRC);
+WINBASEAPI HLOCAL WINAPI LocalAlloc(UINT,SIZE_T) __WINE_ALLOC_SIZE(2);
+WINBASEAPI SIZE_T WINAPI LocalCompact(UINT);
+WINBASEAPI UINT WINAPI LocalFlags(HLOCAL);
+WINBASEAPI HLOCAL WINAPI LocalFree(HLOCAL);
+WINBASEAPI HLOCAL WINAPI LocalHandle(LPCVOID);
+WINBASEAPI LPVOID WINAPI LocalLock(HLOCAL);
+WINBASEAPI HLOCAL WINAPI LocalReAlloc(HLOCAL,SIZE_T,UINT) __WINE_ALLOC_SIZE(3);
+WINBASEAPI SIZE_T WINAPI LocalShrink(HGLOBAL,UINT);
+WINBASEAPI SIZE_T WINAPI LocalSize(HLOCAL);
+WINBASEAPI BOOL WINAPI LocalUnlock(HLOCAL);
+WINBASEAPI LPVOID WINAPI LockResource(HGLOBAL);
+#define LockSegment(handle) GlobalFix((HANDLE)(handle))
+WINADVAPI BOOL WINAPI LookupAccountNameA(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
+WINADVAPI BOOL WINAPI LookupAccountNameW(LPCWSTR,LPCWSTR,PSID,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE);
+#define LookupAccountName WINELIB_NAME_AW(LookupAccountName)
+WINADVAPI BOOL WINAPI LookupAccountSidA(LPCSTR,PSID,LPSTR,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
+WINADVAPI BOOL WINAPI LookupAccountSidW(LPCWSTR,PSID,LPWSTR,LPDWORD,LPWSTR,LPDWORD,PSID_NAME_USE);
+#define LookupAccountSid WINELIB_NAME_AW(LookupAccountSid)
+WINBASEAPI BOOL WINAPI LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
+WINBASEAPI BOOL WINAPI LockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI LockFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED);
+WINADVAPI BOOL WINAPI LogonUserA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,PHANDLE);
+WINADVAPI BOOL WINAPI LogonUserW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD,PHANDLE);
+#define LogonUser WINELIB_NAME_AW(LogonUser)
+WINADVAPI BOOL WINAPI LookupPrivilegeDisplayNameA(LPCSTR,LPCSTR,LPSTR,LPDWORD,LPDWORD);
+WINADVAPI BOOL WINAPI LookupPrivilegeDisplayNameW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,LPDWORD);
+#define LookupPrivilegeDisplayName WINELIB_NAME_AW(LookupPrivilegeDisplayName)
+WINADVAPI BOOL WINAPI LookupPrivilegeNameA(LPCSTR,PLUID,LPSTR,LPDWORD);
+WINADVAPI BOOL WINAPI LookupPrivilegeNameW(LPCWSTR,PLUID,LPWSTR,LPDWORD);
+#define LookupPrivilegeName WINELIB_NAME_AW(LookupPrivilegeName)
+WINADVAPI BOOL WINAPI LookupPrivilegeValueA(LPCSTR,LPCSTR,PLUID);
+WINADVAPI BOOL WINAPI LookupPrivilegeValueW(LPCWSTR,LPCWSTR,PLUID);
+#define LookupPrivilegeValue WINELIB_NAME_AW(LookupPrivilegeValue)
+WINADVAPI BOOL WINAPI MakeAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD,PACL,LPDWORD,PACL,LPDWORD,PSID,LPDWORD,PSID,LPDWORD);
+WINBASEAPI void WINAPI MakeCriticalSectionGlobal(CRITICAL_SECTION *lpCrit);
+#define MakeProcInstance(proc,inst) (proc)
+WINADVAPI BOOL WINAPI MakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
+WINADVAPI VOID WINAPI MapGenericMask(PDWORD,PGENERIC_MAPPING);
+WINBASEAPI HMODULE WINAPI MapHModuleSL(WORD);
+WINBASEAPI WORD WINAPI MapHModuleLS(HMODULE);
+WINBASEAPI LPVOID WINAPI MapViewOfFile(HANDLE,DWORD,DWORD,DWORD,SIZE_T);
+WINBASEAPI LPVOID WINAPI MapViewOfFileEx(HANDLE,DWORD,DWORD,DWORD,SIZE_T,LPVOID);
+WINBASEAPI BOOL WINAPI MoveFileA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI MoveFileW(LPCWSTR,LPCWSTR);
+#define MoveFile WINELIB_NAME_AW(MoveFile)
+WINBASEAPI BOOL WINAPI MoveFileExA(LPCSTR,LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI MoveFileExW(LPCWSTR,LPCWSTR,DWORD);
+#define MoveFileEx WINELIB_NAME_AW(MoveFileEx)
+WINBASEAPI BOOL WINAPI MoveFileWithProgressA(LPCSTR,LPCSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);
+WINBASEAPI BOOL WINAPI MoveFileWithProgressW(LPCWSTR,LPCWSTR,LPPROGRESS_ROUTINE,LPVOID,DWORD);
+#define MoveFileWithProgress WINELIB_NAME_AW(MoveFileWithProgress)
+WINBASEAPI INT WINAPI MulDiv(INT,INT,INT);
+WINBASEAPI BOOL WINAPI NeedCurrentDirectoryForExePathA(LPCSTR);
+WINBASEAPI BOOL WINAPI NeedCurrentDirectoryForExePathW(LPCWSTR);
+#define NeedCurrentDirectoryForExePath WINELIB_NAME_AW(NeedCurrentDirectoryForExePath)
+WINADVAPI BOOL WINAPI NotifyChangeEventLog(HANDLE,HANDLE);
+WINADVAPI BOOL WINAPI ObjectCloseAuditAlarmA(LPCSTR,LPVOID,BOOL);
+WINADVAPI BOOL WINAPI ObjectCloseAuditAlarmW(LPCWSTR,LPVOID,BOOL);
+#define ObjectCloseAuditAlarm WINELIB_NAME_AW(ObjectCloseAuditAlarm)
+WINADVAPI BOOL WINAPI ObjectDeleteAuditAlarmA(LPCSTR,LPVOID,BOOL);
+WINADVAPI BOOL WINAPI ObjectDeleteAuditAlarmW(LPCWSTR,LPVOID,BOOL);
+#define ObjectDeleteAuditAlarm WINELIB_NAME_AW(ObjectDeleteAuditAlarm)
+WINADVAPI BOOL WINAPI ObjectOpenAuditAlarmA(LPCSTR,LPVOID,LPSTR,LPSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL);
+WINADVAPI BOOL WINAPI ObjectOpenAuditAlarmW(LPCWSTR,LPVOID,LPWSTR,LPWSTR,PSECURITY_DESCRIPTOR,HANDLE,DWORD,DWORD,PPRIVILEGE_SET,BOOL,BOOL,LPBOOL);
+#define ObjectOpenAuditAlarm WINELIB_NAME_AW(ObjectOpenAuditAlarm)
+WINADVAPI BOOL WINAPI ObjectPrivilegeAuditAlarmA(LPCSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);
+WINADVAPI BOOL WINAPI ObjectPrivilegeAuditAlarmW(LPCWSTR,LPVOID,HANDLE,DWORD,PPRIVILEGE_SET,BOOL);
+#define ObjectPrivilegeAuditAlarm WINELIB_NAME_AW(ObjectPrivilegeAuditAlarm)
+WINADVAPI HANDLE WINAPI OpenBackupEventLogA(LPCSTR,LPCSTR);
+WINADVAPI HANDLE WINAPI OpenBackupEventLogW(LPCWSTR,LPCWSTR);
+#define OpenBackupEventLog WINELIB_NAME_AW(OpenBackupEventLog)
+WINBASEAPI HANDLE WINAPI OpenEventA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenEventW(DWORD,BOOL,LPCWSTR);
+#define OpenEvent WINELIB_NAME_AW(OpenEvent)
+WINADVAPI HANDLE WINAPI OpenEventLogA(LPCSTR,LPCSTR);
+WINADVAPI HANDLE WINAPI OpenEventLogW(LPCWSTR,LPCWSTR);
+#define OpenEventLog WINELIB_NAME_AW(OpenEventLog)
+WINBASEAPI HFILE WINAPI OpenFile(LPCSTR,OFSTRUCT*,UINT);
+WINBASEAPI HANDLE WINAPI OpenFileMappingA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenFileMappingW(DWORD,BOOL,LPCWSTR);
+#define OpenFileMapping WINELIB_NAME_AW(OpenFileMapping)
+WINBASEAPI HANDLE WINAPI OpenJobObjectA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenJobObjectW(DWORD,BOOL,LPCWSTR);
+#define OpenJobObject WINELIB_NAME_AW(OpenJobObject)
+WINBASEAPI HANDLE WINAPI OpenMutexA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenMutexW(DWORD,BOOL,LPCWSTR);
+#define OpenMutex WINELIB_NAME_AW(OpenMutex)
+WINBASEAPI HANDLE WINAPI OpenProcess(DWORD,BOOL,DWORD);
+WINADVAPI BOOL WINAPI OpenProcessToken(HANDLE,DWORD,PHANDLE);
+WINBASEAPI HANDLE WINAPI OpenSemaphoreA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenSemaphoreW(DWORD,BOOL,LPCWSTR);
+#define OpenSemaphore WINELIB_NAME_AW(OpenSemaphore)
+WINBASEAPI HANDLE WINAPI OpenThread(DWORD,BOOL,DWORD);
+WINADVAPI BOOL WINAPI OpenThreadToken(HANDLE,DWORD,BOOL,PHANDLE);
+WINBASEAPI HANDLE WINAPI OpenWaitableTimerA(DWORD,BOOL,LPCSTR);
+WINBASEAPI HANDLE WINAPI OpenWaitableTimerW(DWORD,BOOL,LPCWSTR);
+#define OpenWaitableTimer WINELIB_NAME_AW(OpenWaitableTimer)
+WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR);
+WINBASEAPI VOID WINAPI OutputDebugStringW(LPCWSTR);
+#define OutputDebugString WINELIB_NAME_AW(OutputDebugString)
+WINBASEAPI BOOL WINAPI PeekNamedPipe(HANDLE,PVOID,DWORD,PDWORD,PDWORD,PDWORD);
+WINBASEAPI BOOL WINAPI PostQueuedCompletionStatus(HANDLE,DWORD,ULONG_PTR,LPOVERLAPPED);
+WINBASEAPI DWORD WINAPI PrepareTape(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL WINAPI ProcessIdToSessionId(DWORD,DWORD*);
+WINADVAPI BOOL WINAPI PrivilegeCheck(HANDLE,PPRIVILEGE_SET,LPBOOL);
+WINADVAPI BOOL WINAPI PrivilegedServiceAuditAlarmA(LPCSTR,LPCSTR,HANDLE,PPRIVILEGE_SET,BOOL);
+WINADVAPI BOOL WINAPI PrivilegedServiceAuditAlarmW(LPCWSTR,LPCWSTR,HANDLE,PPRIVILEGE_SET,BOOL);
+#define PrivilegedServiceAuditAlarm WINELIB_NAME_AW(PrivilegedServiceAuditAlarm)
+WINBASEAPI BOOL WINAPI PulseEvent(HANDLE);
+WINBASEAPI BOOL WINAPI PurgeComm(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI QueryActCtxW(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T *);
+WINBASEAPI USHORT WINAPI QueryDepthSList(PSLIST_HEADER);
+WINBASEAPI DWORD WINAPI QueryDosDeviceA(LPCSTR,LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI QueryDosDeviceW(LPCWSTR,LPWSTR,DWORD);
+#define QueryDosDevice WINELIB_NAME_AW(QueryDosDevice)
+WINBASEAPI BOOL WINAPI QueryFullProcessImageNameA(HANDLE,DWORD,LPSTR,PDWORD);
+WINBASEAPI BOOL WINAPI QueryFullProcessImageNameW(HANDLE,DWORD,LPWSTR,PDWORD);
+#define QueryFullProcessImageName WINELIB_NAME_AW(QueryFullProcessImageName)
+WINBASEAPI BOOL WINAPI QueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD,DWORD*);
+WINBASEAPI BOOL WINAPI QueryMemoryResourceNotification(HANDLE,PBOOL);
+WINBASEAPI BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER*);
+WINBASEAPI BOOL WINAPI QueryPerformanceFrequency(LARGE_INTEGER*);
+WINBASEAPI DWORD WINAPI QueueUserAPC(PAPCFUNC,HANDLE,ULONG_PTR);
+WINBASEAPI BOOL WINAPI QueueUserWorkItem(LPTHREAD_START_ROUTINE,PVOID,ULONG);
+WINBASEAPI void WINAPI RaiseException(DWORD,DWORD,DWORD,const ULONG_PTR *);
+WINADVAPI BOOL WINAPI ReadEventLogA(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *);
+WINADVAPI BOOL WINAPI ReadEventLogW(HANDLE,DWORD,DWORD,LPVOID,DWORD,DWORD *,DWORD *);
+#define ReadEventLog WINELIB_NAME_AW(ReadEventLog)
+WINBASEAPI BOOL WINAPI ReadDirectoryChangesW(HANDLE,LPVOID,DWORD,BOOL,DWORD,LPDWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL WINAPI ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI ReadFileEx(HANDLE,LPVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL WINAPI ReadFileScatter(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI ReadProcessMemory(HANDLE,LPCVOID,LPVOID,SIZE_T,SIZE_T*);
+WINADVAPI HANDLE WINAPI RegisterEventSourceA(LPCSTR,LPCSTR);
+WINADVAPI HANDLE WINAPI RegisterEventSourceW(LPCWSTR,LPCWSTR);
+#define RegisterEventSource WINELIB_NAME_AW(RegisterEventSource)
+WINBASEAPI BOOL WINAPI RegisterWaitForSingleObject(PHANDLE,HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);
+WINBASEAPI HANDLE WINAPI RegisterWaitForSingleObjectEx(HANDLE,WAITORTIMERCALLBACK,PVOID,ULONG,ULONG);
+WINBASEAPI VOID WINAPI ReleaseActCtx(HANDLE);
+WINBASEAPI BOOL WINAPI ReleaseMutex(HANDLE);
+WINBASEAPI BOOL WINAPI ReleaseSemaphore(HANDLE,LONG,LPLONG);
+WINBASEAPI VOID WINAPI ReleaseSRWLockExclusive(PSRWLOCK);
+WINBASEAPI VOID WINAPI ReleaseSRWLockShared(PSRWLOCK);
+WINBASEAPI ULONG WINAPI RemoveVectoredExceptionHandler(PVOID);
+WINBASEAPI BOOL WINAPI ReplaceFileA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPVOID,LPVOID);
+WINBASEAPI BOOL WINAPI ReplaceFileW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPVOID,LPVOID);
+#define ReplaceFile WINELIB_NAME_AW(ReplaceFile)
+WINBASEAPI BOOL WINAPI RemoveDirectoryA(LPCSTR);
+WINBASEAPI BOOL WINAPI RemoveDirectoryW(LPCWSTR);
+#define RemoveDirectory WINELIB_NAME_AW(RemoveDirectory)
+WINADVAPI BOOL WINAPI ReportEventA(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCSTR *,LPVOID);
+WINADVAPI BOOL WINAPI ReportEventW(HANDLE,WORD,WORD,DWORD,PSID,WORD,DWORD,LPCWSTR *,LPVOID);
+WINBASEAPI BOOL WINAPI RequestWakeupLatency(LATENCY_TIME latency);
+#define ReportEvent WINELIB_NAME_AW(ReportEvent)
+WINBASEAPI BOOL WINAPI ResetEvent(HANDLE);
+WINBASEAPI UINT WINAPI ResetWriteWatch(LPVOID,SIZE_T);
+WINBASEAPI DWORD WINAPI ResumeThread(HANDLE);
+WINADVAPI BOOL WINAPI RevertToSelf(void);
+WINBASEAPI DWORD WINAPI SearchPathA(LPCSTR,LPCSTR,LPCSTR,DWORD,LPSTR,LPSTR*);
+WINBASEAPI DWORD WINAPI SearchPathW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
+#define SearchPath WINELIB_NAME_AW(SearchPath)
+WINADVAPI BOOL WINAPI SetAclInformation(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+WINBASEAPI BOOL WINAPI SetCommConfig(HANDLE,LPCOMMCONFIG,DWORD);
+WINBASEAPI BOOL WINAPI SetCommBreak(HANDLE);
+WINBASEAPI BOOL WINAPI SetCommMask(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetCommState(HANDLE,LPDCB);
+WINBASEAPI BOOL WINAPI SetCommTimeouts(HANDLE,LPCOMMTIMEOUTS);
+WINBASEAPI BOOL WINAPI SetComputerNameA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetComputerNameW(LPCWSTR);
+#define SetComputerName WINELIB_NAME_AW(SetComputerName)
+WINBASEAPI BOOL WINAPI SetComputerNameExA(COMPUTER_NAME_FORMAT,LPCSTR);
+WINBASEAPI BOOL WINAPI SetComputerNameExW(COMPUTER_NAME_FORMAT,LPCWSTR);
+#define SetComputerNameEx WINELIB_NAME_AW(SetComputerNameEx)
+WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount(LPCRITICAL_SECTION,DWORD);
+WINBASEAPI BOOL WINAPI SetCurrentDirectoryA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetCurrentDirectoryW(LPCWSTR);
+#define SetCurrentDirectory WINELIB_NAME_AW(SetCurrentDirectory)
+WINBASEAPI BOOL WINAPI SetDefaultCommConfigA(LPCSTR,LPCOMMCONFIG,DWORD);
+WINBASEAPI BOOL WINAPI SetDefaultCommConfigW(LPCWSTR,LPCOMMCONFIG,DWORD);
+#define SetDefaultCommConfig WINELIB_NAME_AW(SetDefaultCommConfig)
+WINBASEAPI BOOL WINAPI SetDllDirectoryA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetDllDirectoryW(LPCWSTR);
+#define SetDllDirectory WINELIB_NAME_AW(SetDllDirectory)
+WINBASEAPI BOOL WINAPI SetDynamicTimeZoneInformation(const DYNAMIC_TIME_ZONE_INFORMATION*);
+WINBASEAPI BOOL WINAPI SetEndOfFile(HANDLE);
+WINBASEAPI BOOL WINAPI SetEnvironmentVariableA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI SetEnvironmentVariableW(LPCWSTR,LPCWSTR);
+#define SetEnvironmentVariable WINELIB_NAME_AW(SetEnvironmentVariable)
+WINBASEAPI UINT WINAPI SetErrorMode(UINT);
+WINBASEAPI BOOL WINAPI SetEvent(HANDLE);
+WINBASEAPI VOID WINAPI SetFileApisToANSI(void);
+WINBASEAPI VOID WINAPI SetFileApisToOEM(void);
+WINBASEAPI BOOL WINAPI SetFileAttributesA(LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR,DWORD);
+#define SetFileAttributes WINELIB_NAME_AW(SetFileAttributes)
+WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE,LONG,LPLONG,DWORD);
+WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE,LARGE_INTEGER,LARGE_INTEGER*,DWORD);
+WINADVAPI BOOL WINAPI SetFileSecurityA(LPCSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI BOOL WINAPI SetFileSecurityW(LPCWSTR,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+#define SetFileSecurity WINELIB_NAME_AW(SetFileSecurity)
+WINBASEAPI BOOL WINAPI SetFileTime(HANDLE,const FILETIME*,const FILETIME*,const FILETIME*);
+WINBASEAPI BOOL WINAPI SetFileValidData(HANDLE,LONGLONG);
+WINBASEAPI UINT WINAPI SetHandleCount(UINT);
+WINBASEAPI BOOL WINAPI SetHandleInformation(HANDLE,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI SetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,LPVOID,DWORD);
+WINADVAPI BOOL WINAPI SetKernelObjectSecurity(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINBASEAPI BOOL WINAPI SetLocalTime(const SYSTEMTIME*);
+WINBASEAPI BOOL WINAPI SetMailslotInfo(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetNamedPipeHandleState(HANDLE,LPDWORD,LPDWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI SetPriorityClass(HANDLE,DWORD);
+WINADVAPI BOOL WINAPI SetPrivateObjectSecurity(SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,PGENERIC_MAPPING,HANDLE);
+WINBASEAPI BOOL WINAPI SetProcessAffinityMask(HANDLE,DWORD_PTR);
+WINBASEAPI BOOL WINAPI SetProcessPriorityBoost(HANDLE,BOOL);
+WINBASEAPI BOOL WINAPI SetProcessShutdownParameters(DWORD,DWORD);
+WINBASEAPI BOOL WINAPI SetProcessWorkingSetSize(HANDLE,SIZE_T,SIZE_T);
+WINADVAPI BOOL WINAPI SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);
+WINADVAPI BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
+WINADVAPI BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR,PSID,BOOL);
+WINADVAPI BOOL WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR,PSID,BOOL);
+WINADVAPI BOOL WINAPI SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR,BOOL,PACL,BOOL);
+WINBASEAPI BOOL WINAPI SetStdHandle(DWORD,HANDLE);
+#define SetSwapAreaSize(w) (w)
+WINBASEAPI BOOL WINAPI SetSystemPowerState(BOOL,BOOL);
+WINBASEAPI BOOL WINAPI SetSystemTime(const SYSTEMTIME*);
+WINBASEAPI BOOL WINAPI SetSystemTimeAdjustment(DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SetTapeParameters(HANDLE,DWORD,LPVOID);
+WINBASEAPI DWORD WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL);
+WINBASEAPI DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR);
+WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE,const CONTEXT *);
+WINBASEAPI BOOL WINAPI SetThreadErrorMode(DWORD,LPDWORD);
+WINBASEAPI DWORD WINAPI SetThreadExecutionState(EXECUTION_STATE);
+WINBASEAPI DWORD WINAPI SetThreadIdealProcessor(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetThreadPriority(HANDLE,INT);
+WINBASEAPI BOOL WINAPI SetThreadPriorityBoost(HANDLE,BOOL);
+WINADVAPI BOOL WINAPI SetThreadToken(PHANDLE,HANDLE);
+WINBASEAPI HANDLE WINAPI SetTimerQueueTimer(HANDLE,WAITORTIMERCALLBACK,PVOID,DWORD,DWORD,BOOL);
+WINBASEAPI BOOL WINAPI SetTimeZoneInformation(const TIME_ZONE_INFORMATION *);
+WINADVAPI BOOL WINAPI SetTokenInformation(HANDLE,TOKEN_INFORMATION_CLASS,LPVOID,DWORD);
+WINBASEAPI LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER);
+WINBASEAPI BOOL WINAPI SetVolumeLabelA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI SetVolumeLabelW(LPCWSTR,LPCWSTR);
+#define SetVolumeLabel WINELIB_NAME_AW(SetVolumeLabel)
+WINBASEAPI BOOL WINAPI SetVolumeMountPointA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI SetVolumeMountPointW(LPCSTR,LPCSTR);
+#define SetVolumeMountPoint WINELIB_NAME_AW(SetVolumeMountPoint)
+WINBASEAPI BOOL WINAPI SetWaitableTimer(HANDLE,const LARGE_INTEGER*,LONG,PTIMERAPCROUTINE,LPVOID,BOOL);
+WINBASEAPI BOOL WINAPI SetupComm(HANDLE,DWORD,DWORD);
+WINBASEAPI DWORD WINAPI SignalObjectAndWait(HANDLE,HANDLE,DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SizeofResource(HMODULE,HRSRC);
+WINBASEAPI VOID WINAPI Sleep(DWORD);
+WINBASEAPI BOOL WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE,PCRITICAL_SECTION,DWORD);
+WINBASEAPI DWORD WINAPI SleepEx(DWORD,BOOL);
+WINBASEAPI DWORD WINAPI SuspendThread(HANDLE);
+WINBASEAPI void WINAPI SwitchToFiber(LPVOID);
+WINBASEAPI BOOL WINAPI SwitchToThread(void);
+WINBASEAPI BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME*,LPFILETIME);
+WINBASEAPI BOOL WINAPI SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME);
+WINBASEAPI BOOL WINAPI TerminateJobObject(HANDLE,UINT);
+WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI TerminateThread(HANDLE,DWORD);
+WINBASEAPI DWORD WINAPI TlsAlloc(void);
+WINBASEAPI BOOL WINAPI TlsFree(DWORD);
+WINBASEAPI LPVOID WINAPI TlsGetValue(DWORD);
+WINBASEAPI BOOL WINAPI TlsSetValue(DWORD,LPVOID);
+WINBASEAPI BOOL WINAPI TransactNamedPipe(HANDLE,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI TransmitCommChar(HANDLE,CHAR);
+WINBASEAPI BOOL WINAPI TryAcquireSRWLockExclusive(PSRWLOCK);
+WINBASEAPI BOOL WINAPI TryAcquireSRWLockShared(PSRWLOCK);
+WINBASEAPI BOOL WINAPI TryEnterCriticalSection(CRITICAL_SECTION *lpCrit);
+WINBASEAPI BOOL WINAPI TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION*,const SYSTEMTIME*,LPSYSTEMTIME);
+WINBASEAPI LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS);
+WINBASEAPI BOOL WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED);
+#define UnlockSegment(handle) GlobalUnfix((HANDLE)(handle))
+WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID);
+WINBASEAPI BOOL WINAPI UnregisterWait(HANDLE);
+WINBASEAPI BOOL WINAPI UnregisterWaitEx(HANDLE,HANDLE);
+WINBASEAPI BOOL WINAPI UpdateResourceA(HANDLE,LPCSTR,LPCSTR,WORD,LPVOID,DWORD);
+WINBASEAPI BOOL WINAPI UpdateResourceW(HANDLE,LPCWSTR,LPCWSTR,WORD,LPVOID,DWORD);
+#define UpdateResource WINELIB_NAME_AW(UpdateResource)
+WINBASEAPI BOOL WINAPI VerifyVersionInfoA(LPOSVERSIONINFOEXA,DWORD,DWORDLONG);
+WINBASEAPI BOOL WINAPI VerifyVersionInfoW(LPOSVERSIONINFOEXW,DWORD,DWORDLONG);
+#define VerifyVersionInfo WINELIB_NAME_AW(VerifyVersionInfo)
+WINBASEAPI LPVOID WINAPI VirtualAlloc(LPVOID,SIZE_T,DWORD,DWORD);
+WINBASEAPI LPVOID WINAPI VirtualAllocEx(HANDLE,LPVOID,SIZE_T,DWORD,DWORD);
+WINBASEAPI BOOL WINAPI VirtualFree(LPVOID,SIZE_T,DWORD);
+WINBASEAPI BOOL WINAPI VirtualFreeEx(HANDLE,LPVOID,SIZE_T,DWORD);
+WINBASEAPI BOOL WINAPI VirtualLock(LPVOID,SIZE_T);
+WINBASEAPI BOOL WINAPI VirtualProtect(LPVOID,SIZE_T,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI VirtualProtectEx(HANDLE,LPVOID,SIZE_T,DWORD,LPDWORD);
+WINBASEAPI SIZE_T WINAPI VirtualQuery(LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T);
+WINBASEAPI SIZE_T WINAPI VirtualQueryEx(HANDLE,LPCVOID,PMEMORY_BASIC_INFORMATION,SIZE_T);
+WINBASEAPI BOOL WINAPI VirtualUnlock(LPVOID,SIZE_T);
+WINBASEAPI DWORD WINAPI WTSGetActiveConsoleSessionId(void);
+WINBASEAPI BOOL WINAPI WaitCommEvent(HANDLE,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI WaitForDebugEvent(LPDEBUG_EVENT,DWORD);
+WINBASEAPI DWORD WINAPI WaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD);
+WINBASEAPI DWORD WINAPI WaitForMultipleObjectsEx(DWORD,const HANDLE*,BOOL,DWORD,BOOL);
+WINBASEAPI DWORD WINAPI WaitForSingleObject(HANDLE,DWORD);
+WINBASEAPI DWORD WINAPI WaitForSingleObjectEx(HANDLE,DWORD,BOOL);
+WINBASEAPI BOOL WINAPI WaitNamedPipeA(LPCSTR,DWORD);
+WINBASEAPI BOOL WINAPI WaitNamedPipeW(LPCWSTR,DWORD);
+#define WaitNamedPipe WINELIB_NAME_AW(WaitNamedPipe)
+WINBASEAPI VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE);
+WINBASEAPI UINT WINAPI WinExec(LPCSTR,UINT);
+WINBASEAPI BOOL WINAPI Wow64DisableWow64FsRedirection(PVOID*);
+WINBASEAPI BOOLEAN WINAPI Wow64EnableWow64FsRedirection(BOOLEAN);
+WINBASEAPI BOOL WINAPI Wow64RevertWow64FsRedirection(PVOID);
+WINBASEAPI BOOL WINAPI WriteFile(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI WriteFileEx(HANDLE,LPCVOID,DWORD,LPOVERLAPPED,LPOVERLAPPED_COMPLETION_ROUTINE);
+WINBASEAPI BOOL WINAPI WriteFileGather(HANDLE,FILE_SEGMENT_ELEMENT*,DWORD,LPDWORD,LPOVERLAPPED);
+WINBASEAPI BOOL WINAPI WritePrivateProfileSectionA(LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileSectionW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)
+WINBASEAPI BOOL WINAPI WritePrivateProfileStringA(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+#define WritePrivateProfileString WINELIB_NAME_AW(WritePrivateProfileString)
+WINBASEAPI BOOL WINAPI WritePrivateProfileStructA(LPCSTR,LPCSTR,LPVOID,UINT,LPCSTR);
+WINBASEAPI BOOL WINAPI WritePrivateProfileStructW(LPCWSTR,LPCWSTR,LPVOID,UINT,LPCWSTR);
+#define WritePrivateProfileStruct WINELIB_NAME_AW(WritePrivateProfileStruct)
+WINBASEAPI BOOL WINAPI WriteProcessMemory(HANDLE,LPVOID,LPCVOID,SIZE_T,SIZE_T*);
+WINBASEAPI BOOL WINAPI WriteProfileSectionA(LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WriteProfileSectionW(LPCWSTR,LPCWSTR);
+#define WritePrivateProfileSection WINELIB_NAME_AW(WritePrivateProfileSection)
+WINBASEAPI BOOL WINAPI WriteProfileStringA(LPCSTR,LPCSTR,LPCSTR);
+WINBASEAPI BOOL WINAPI WriteProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define WriteProfileString WINELIB_NAME_AW(WriteProfileString)
+WINBASEAPI DWORD WINAPI WriteTapemark(HANDLE,DWORD,DWORD,BOOL);
+#define Yield()
+WINBASEAPI BOOL WINAPI ZombifyActCtx(HANDLE);
+
+WINBASEAPI INT WINAPI lstrcmpA(LPCSTR,LPCSTR);
+WINBASEAPI INT WINAPI lstrcmpW(LPCWSTR,LPCWSTR);
+WINBASEAPI INT WINAPI lstrcmpiA(LPCSTR,LPCSTR);
+WINBASEAPI INT WINAPI lstrcmpiW(LPCWSTR,LPCWSTR);
+
+#if !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING)
+
+WINBASEAPI LPSTR WINAPI lstrcatA(LPSTR,LPCSTR);
+WINBASEAPI LPWSTR WINAPI lstrcatW(LPWSTR,LPCWSTR);
+WINBASEAPI LPSTR WINAPI lstrcpyA(LPSTR,LPCSTR);
+WINBASEAPI LPWSTR WINAPI lstrcpyW(LPWSTR,LPCWSTR);
+WINBASEAPI LPSTR WINAPI lstrcpynA(LPSTR,LPCSTR,INT);
+WINBASEAPI LPWSTR WINAPI lstrcpynW(LPWSTR,LPCWSTR,INT);
+WINBASEAPI INT WINAPI lstrlenA(LPCSTR);
+WINBASEAPI INT WINAPI lstrlenW(LPCWSTR);
+
+#else
+
+/* string functions without the exception handler */
+
+static inline LPWSTR WINAPI lstrcpynW( LPWSTR dst, LPCWSTR src, INT n )
+{
+ LPWSTR d = dst;
+ LPCWSTR s = src;
+ UINT count = n;
+
+ while ((count > 1) && *s)
+ {
+ count--;
+ *d++ = *s++;
+ }
+ if (count) *d = 0;
+ return dst;
+}
+
+static inline LPSTR WINAPI lstrcpynA( LPSTR dst, LPCSTR src, INT n )
+{
+ LPSTR d = dst;
+ LPCSTR s = src;
+ UINT count = n;
+
+ while ((count > 1) && *s)
+ {
+ count--;
+ *d++ = *s++;
+ }
+ if (count) *d = 0;
+ return dst;
+}
+
+static inline INT WINAPI lstrlenW( LPCWSTR str )
+{
+ const WCHAR *s = str;
+ while (*s) s++;
+ return s - str;
+}
+
+static inline INT WINAPI lstrlenA( LPCSTR str )
+{
+ return strlen( str );
+}
+
+static inline LPWSTR WINAPI lstrcpyW( LPWSTR dst, LPCWSTR src )
+{
+ WCHAR *p = dst;
+ while ((*p++ = *src++));
+ return dst;
+}
+
+static inline LPSTR WINAPI lstrcpyA( LPSTR dst, LPCSTR src )
+{
+ return strcpy( dst, src );
+}
+
+static inline LPWSTR WINAPI lstrcatW( LPWSTR dst, LPCWSTR src )
+{
+ WCHAR *p = dst;
+ while (*p) p++;
+ while ((*p++ = *src++));
+ return dst;
+}
+
+static inline LPSTR WINAPI lstrcatA( LPSTR dst, LPCSTR src )
+{
+ return strcat( dst, src );
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#undef strncpy
+#define strncpy(d,s,n) error do_not_use_strncpy_use_lstrcpynA_or_memcpy_instead
+
+#endif /* !defined(__WINESRC__) || defined(WINE_NO_INLINE_STRING) */
+
+#define lstrcat WINELIB_NAME_AW(lstrcat)
+#define lstrcmp WINELIB_NAME_AW(lstrcmp)
+#define lstrcmpi WINELIB_NAME_AW(lstrcmpi)
+#define lstrcpy WINELIB_NAME_AW(lstrcpy)
+#define lstrcpyn WINELIB_NAME_AW(lstrcpyn)
+#define lstrlen WINELIB_NAME_AW(lstrlen)
+
+WINBASEAPI LONG WINAPI _hread(HFILE,LPVOID,LONG);
+WINBASEAPI LONG WINAPI _hwrite(HFILE,LPCSTR,LONG);
+WINBASEAPI HFILE WINAPI _lcreat(LPCSTR,INT);
+WINBASEAPI HFILE WINAPI _lclose(HFILE);
+WINBASEAPI LONG WINAPI _llseek(HFILE,LONG,INT);
+WINBASEAPI HFILE WINAPI _lopen(LPCSTR,INT);
+WINBASEAPI UINT WINAPI _lread(HFILE,LPVOID,UINT);
+WINBASEAPI UINT WINAPI _lwrite(HFILE,LPCSTR,UINT);
+
+/* compatibility macros */
+#define FillMemory RtlFillMemory
+#define MoveMemory RtlMoveMemory
+#define ZeroMemory RtlZeroMemory
+#define CopyMemory RtlCopyMemory
+
+/* Wine internal functions */
+
+extern char * CDECL wine_get_unix_file_name( LPCWSTR dos );
+extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );
+
+
+/* Interlocked functions */
+
+#ifdef __i386__
+# if defined(__GNUC__) && !defined(_NTSYSTEM_) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+ LONG ret;
+ __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+ return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+ LONG ret;
+ __asm__ __volatile__( "lock; xchgl %0,(%1)"
+ : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+ return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+ LONG ret;
+ __asm__ __volatile__( "lock; xaddl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+ return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+ return InterlockedExchangeAdd( dest, 1 ) + 1;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+ return InterlockedExchangeAdd( dest, -1 ) - 1;
+}
+
+# else /* __GNUC__ */
+
+WINBASEAPI LONG WINAPI InterlockedCompareExchange(LONG volatile*,LONG,LONG);
+WINBASEAPI LONG WINAPI InterlockedDecrement(LONG volatile*);
+WINBASEAPI LONG WINAPI InterlockedExchange(LONG volatile*,LONG);
+WINBASEAPI LONG WINAPI InterlockedExchangeAdd(LONG volatile*,LONG);
+WINBASEAPI LONG WINAPI InterlockedIncrement(LONG volatile*);
+
+# endif /* __GNUC__ */
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+ return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+ return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val );
+}
+
+WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGLONG,LONGLONG);
+
+#elif defined(_MSC_VER)
+
+#pragma intrinsic(_InterlockedCompareExchange)
+#pragma intrinsic(_InterlockedCompareExchangePointer)
+#pragma intrinsic(_InterlockedCompareExchange64)
+#pragma intrinsic(_InterlockedExchange)
+#pragma intrinsic(_InterlockedExchangePointer)
+#pragma intrinsic(_InterlockedExchangeAdd)
+#pragma intrinsic(_InterlockedIncrement)
+#pragma intrinsic(_InterlockedDecrement)
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+ return _InterlockedCompareExchange( dest, xchg, compare );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+ return _InterlockedCompareExchangePointer( dest, xchg, compare );
+}
+
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+{
+ return _InterlockedCompareExchange64( dest, xchg, compare );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+ return _InterlockedExchange( dest, val );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+ return _InterlockedExchangePointer( dest, val );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+ return _InterlockedExchangeAdd( dest, incr );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+ return _InterlockedIncrement( dest );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+ return _InterlockedDecrement( dest );
+}
+
+#elif defined(__GNUC__)
+
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+{
+ return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+{
+ return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+{
+ return __sync_val_compare_and_swap( dest, compare, xchg );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+{
+ LONG ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( "lock; xchgl %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+ do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+ return ret;
+}
+
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+{
+ PVOID ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( "lock; xchgq %0,(%1)" : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+ do ret = *dest; while (!__sync_bool_compare_and_swap( dest, ret, val ));
+#endif
+ return ret;
+}
+
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+{
+ return __sync_fetch_and_add( dest, incr );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+{
+ return __sync_add_and_fetch( dest, 1 );
+}
+
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+{
+ return __sync_add_and_fetch( dest, -1 );
+}
+
+#endif /* __i386__ */
+
+/* A few optimizations for gcc */
+
+#if defined(__GNUC__) && !defined(__MINGW32__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+
+static FORCEINLINE DWORD WINAPI GetLastError(void)
+{
+ DWORD ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( ".byte 0x65\n\tmovl 0x68,%0" : "=r" (ret) );
+#else
+ __asm__ __volatile__( ".byte 0x64\n\tmovl 0x34,%0" : "=r" (ret) );
+#endif
+ return ret;
+}
+
+static FORCEINLINE DWORD WINAPI GetCurrentProcessId(void)
+{
+ DWORD ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( ".byte 0x65\n\tmovl 0x40,%0" : "=r" (ret) );
+#else
+ __asm__ __volatile__( ".byte 0x64\n\tmovl 0x20,%0" : "=r" (ret) );
+#endif
+ return ret;
+}
+
+static FORCEINLINE DWORD WINAPI GetCurrentThreadId(void)
+{
+ DWORD ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( ".byte 0x65\n\tmovl 0x48,%0" : "=r" (ret) );
+#else
+ __asm__ __volatile__( ".byte 0x64\n\tmovl 0x24,%0" : "=r" (ret) );
+#endif
+ return ret;
+}
+
+static FORCEINLINE void WINAPI SetLastError( DWORD err )
+{
+#ifdef __x86_64__
+ __asm__ __volatile__( ".byte 0x65\n\tmovl %0,0x68" : : "r" (err) : "memory" );
+#else
+ __asm__ __volatile__( ".byte 0x64\n\tmovl %0,0x34" : : "r" (err) : "memory" );
+#endif
+}
+
+static FORCEINLINE HANDLE WINAPI GetProcessHeap(void)
+{
+ HANDLE *pdb;
+#ifdef __x86_64__
+ __asm__ __volatile__( ".byte 0x65\n\tmovq 0x60,%0" : "=r" (pdb) );
+ return pdb[0x30 / sizeof(HANDLE)]; /* get dword at offset 0x30 in pdb */
+#else
+ __asm__ __volatile__( ".byte 0x64\n\tmovl 0x30,%0" : "=r" (pdb) );
+ return pdb[0x18 / sizeof(HANDLE)]; /* get dword at offset 0x18 in pdb */
+#endif
+}
+
+#else /* __GNUC__ */
+
+WINBASEAPI DWORD WINAPI GetCurrentProcessId(void);
+WINBASEAPI DWORD WINAPI GetCurrentThreadId(void);
+WINBASEAPI DWORD WINAPI GetLastError(void);
+WINBASEAPI HANDLE WINAPI GetProcessHeap(void);
+WINBASEAPI VOID WINAPI SetLastError(DWORD);
+
+#endif /* __GNUC__ */
+
+#ifdef __WINESRC__
+#define GetCurrentProcess() ((HANDLE)~(ULONG_PTR)0)
+#define GetCurrentThread() ((HANDLE)~(ULONG_PTR)1)
+#endif
+
+/* WinMain(entry point) must be declared in winbase.h. */
+/* If this is not declared, we cannot compile many sources written with C++. */
+int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
+
+#ifdef __WINESRC__
+/* shouldn't be here, but is nice for type checking */
+BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) DECLSPEC_HIDDEN;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINBASE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl
new file mode 100644
index 00000000..db0b9174
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodec.idl
@@ -0,0 +1,1041 @@
+/*
+ * Copyright 2009 Vincent Povirk for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "propidl.idl";
+import "ocidl.idl";
+
+cpp_quote("#define WINCODEC_SDK_VERSION 0x0236")
+
+#define CODEC_FORCE_DWORD 0x7fffffff
+
+typedef enum WICDecodeOptions {
+ WICDecodeMetadataCacheOnDemand = 0x00000000,
+ WICDecodeMetadataCacheOnLoad = 0x00000001,
+ WICMETADATACACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICDecodeOptions;
+
+typedef enum WICBitmapCreateCacheOption {
+ WICBitmapNoCache = 0x00000000,
+ WICBitmapCacheOnDemand = 0x00000001,
+ WICBitmapCacheOnLoad = 0x00000002,
+ WICBITMAPCREATECACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapCreateCacheOption;
+
+typedef enum WICBitmapAlphaChannelOption {
+ WICBitmapUseAlpha = 0x00000000,
+ WICBitmapUsePremultipliedAlpha = 0x00000001,
+ WICBitmapIgnoreAlpha = 0x00000002,
+ WICBITMAPALPHACHANNELOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapAlphaChannelOption;
+
+typedef enum WICBitmapDecoderCapabilities {
+ WICBitmapDecoderCapabilitySameEncoder = 0x00000001,
+ WICBitmapDecoderCapabilityCanDecodeAllImages = 0x00000002,
+ WICBitmapDecoderCapabilityCanDecodeSomeImages = 0x00000004,
+ WICBitmapDecoderCapabilityCanEnumerateMetadata = 0x00000008,
+ WICBitmapDecoderCapabilityCanDecodeThumbnail = 0x00000010,
+} WICBitmapDecoderCapabilities;
+
+typedef enum WICBitmapDitherType {
+ WICBitmapDitherTypeNone = 0x00000000,
+ WICBitmapDitherTypeSolid = 0x00000000,
+ WICBitmapDitherTypeOrdered4x4 = 0x00000001,
+ WICBitmapDitherTypeOrdered8x8 = 0x00000002,
+ WICBitmapDitherTypeOrdered16x16 = 0x00000003,
+ WICBitmapDitherTypeSpiral4x4 = 0x00000004,
+ WICBitmapDitherTypeSpiral8x8 = 0x00000005,
+ WICBitmapDitherTypeDualSpiral4x4 = 0x00000006,
+ WICBitmapDitherTypeDualSpiral8x8 = 0x00000007,
+ WICBitmapDitherTypeErrorDiffusion = 0x00000008,
+ WICBITMAPDITHERTYPE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapDitherType;
+
+typedef enum WICBitmapEncoderCacheOption {
+ WICBitmapEncoderCacheInMemory = 0x00000000,
+ WICBitmapEncoderCacheTempFile = 0x00000001,
+ WICBitmapEncoderNoCache = 0x00000002,
+ WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapEncoderCacheOption;
+
+typedef enum WICBitmapInterpolationMode {
+ WICBitmapInterpolationModeNearestNeighbor = 0x00000000,
+ WICBitmapInterpolationModeLinear = 0x00000001,
+ WICBitmapInterpolationModeCubic = 0x00000002,
+ WICBitmapInterpolationModeFant = 0x00000003,
+ WICBITMAPINTERPOLATIONMODE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapInterpolationMode;
+
+typedef enum WICBitmapLockFlags {
+ WICBitmapLockRead = 0x00000001,
+ WICBitmapLockWrite = 0x00000002,
+ WICBITMAPLOCKFLAGS_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapLockFlags;
+
+typedef enum WICBitmapPaletteType {
+ WICBitmapPaletteTypeCustom = 0x00000000,
+ WICBitmapPaletteTypeMedianCut = 0x00000001,
+ WICBitmapPaletteTypeFixedBW = 0x00000002,
+ WICBitmapPaletteTypeFixedHalftone8 = 0x00000003,
+ WICBitmapPaletteTypeFixedHalftone27 = 0x00000004,
+ WICBitmapPaletteTypeFixedHalftone64 = 0x00000005,
+ WICBitmapPaletteTypeFixedHalftone125 = 0x00000006,
+ WICBitmapPaletteTypeFixedHalftone216 = 0x00000007,
+ WICBitmapPaletteTypeFixedWebPalette = WICBitmapPaletteTypeFixedHalftone216,
+ WICBitmapPaletteTypeFixedHalftone252 = 0x00000008,
+ WICBitmapPaletteTypeFixedHalftone256 = 0x00000009,
+ WICBitmapPaletteTypeFixedGray4 = 0x0000000A,
+ WICBitmapPaletteTypeFixedGray16 = 0x0000000B,
+ WICBitmapPaletteTypeFixedGray256 = 0x0000000C,
+ WICBITMAPPALETTETYPE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapPaletteType;
+
+typedef enum WICBitmapTransformOptions {
+ WICBitmapTransformRotate0 = 0x00000000,
+ WICBitmapTransformRotate90 = 0x00000001,
+ WICBitmapTransformRotate180 = 0x00000002,
+ WICBitmapTransformRotate270 = 0x00000003,
+ WICBitmapTransformFlipHorizontal = 0x00000008,
+ WICBitmapTransformFlipVertical = 0x00000010,
+ WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICBitmapTransformOptions;
+
+typedef enum WICColorContextType {
+ WICColorContextUninitialized = 0x00000000,
+ WICColorContextProfile = 0x00000001,
+ WICColorContextExifColorSpace = 0x00000002
+} WICColorContextType;
+
+typedef enum WICComponentType {
+ WICDecoder = 0x00000001,
+ WICEncoder = 0x00000002,
+ WICPixelFormatConverter = 0x00000004,
+ WICMetadataReader = 0x00000008,
+ WICMetadataWriter = 0x00000010,
+ WICPixelFormat = 0x00000020,
+ WICCOMPONENTTYPE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICComponentType;
+
+typedef enum WICComponentSigning {
+ WICComponentSigned = 0x00000001,
+ WICComponentUnsigned = 0x00000002,
+ WICComponentSafe = 0x00000004,
+ WICComponentDisabled = 0x80000000
+} WICComponentSigning;
+
+typedef enum WICComponentEnumerateOptions {
+ WICComponentEnumerateDefault = 0x00000000,
+ WICComponentEnumerateRefresh = 0x00000001,
+ WICComponentEnumerateBuiltInOnly = 0x20000000,
+ WICComponentEnumerateUnsigned = 0x40000000,
+ WICComponentEnumerateDisabled = 0x80000000
+} WICComponentEnumerateOptions;
+
+typedef enum WICPixelFormatNumericRepresentation {
+ WICPixelFormatNumericRepresentationUnspecified = 0x00000000,
+ WICPixelFormatNumericRepresentationIndexed = 0x00000001,
+ WICPixelFormatNumericRepresentationUnsignedInteger = 0x00000002,
+ WICPixelFormatNumericRepresentationSignedInteger = 0x00000003,
+ WICPixelFormatNumericRepresentationFixed = 0x00000004,
+ WICPixelFormatNumericRepresentationFloat = 0x00000005,
+ WICPIXELFORMATNUMERICREPRESENTATION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICPixelFormatNumericRepresentation;
+
+typedef enum WICTiffCompressionOption {
+ WICTiffCompressionDontCare = 0x00000000,
+ WICTiffCompressionNone = 0x00000001,
+ WICTiffCompressionCCITT3 = 0x00000002,
+ WICTiffCompressionCCITT4 = 0x00000003,
+ WICTiffCompressionLZW = 0x00000004,
+ WICTiffCompressionRLE = 0x00000005,
+ WICTiffCompressionZIP = 0x00000006,
+ WICTiffCompressionLZWHDifferencing = 0x00000007,
+ WICTIFFCOMPRESSIONOPTION_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICTiffCompressionOption;
+
+typedef GUID WICPixelFormatGUID;
+typedef REFGUID REFWICPixelFormatGUID;
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormatDontCare, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x00);")
+cpp_quote("#define GUID_WICPixelFormatUndefined GUID_WICPixelFormatDontCare")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat1bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x01);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat2bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x02);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat4bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x03);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat8bppIndexed, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x04);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormatBlackWhite, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x05);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat2bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x06);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat4bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x07);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat8bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x08);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppGray, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0b);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGR555, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x09);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGR565, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0a);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat16bppBGRA5551, 0x05ec7c2b,0xf1e6,0x4961,0xad,0x46,0xe1,0xcc,0x81,0x0a,0x87,0xd2);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat24bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0c);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat24bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0d);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGR, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0e);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x0f);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppPBGRA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x10);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat48bppRGB, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x15);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x16);")
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x17);")
+
+cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppCMYK, 0x6fddc324,0x4e03,0x4fbe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x1c);")
+
+typedef struct WICRect {
+ INT X;
+ INT Y;
+ INT Width;
+ INT Height;
+} WICRect;
+
+typedef struct WICBitmapPattern {
+ ULARGE_INTEGER Position;
+ ULONG Length;
+ BYTE *Pattern;
+ BYTE *Mask;
+ BOOL EndOfStream;
+} WICBitmapPattern;
+
+typedef UINT32 WICColor;
+
+cpp_quote("#define WINCODEC_ERR_WRONGSTATE 0x88982f04")
+cpp_quote("#define WINCODEC_ERR_VALUEOUTOFRANGE 0x88982f05")
+cpp_quote("#define WINCODEC_ERR_NOTINITIALIZED 0x88982f0c")
+cpp_quote("#define WINCODEC_ERR_ALREADYLOCKED 0x88982f0d")
+cpp_quote("#define WINCODEC_ERR_PROPERTYNOTFOUND 0x88982f40")
+cpp_quote("#define WINCODEC_ERR_CODECNOTHUMBNAIL 0x88982f44")
+cpp_quote("#define WINCODEC_ERR_PALETTEUNAVAILABLE 0x88982f45")
+cpp_quote("#define WINCODEC_ERR_COMPONENTNOTFOUND 0x88982f50")
+cpp_quote("#define WINCODEC_ERR_BADIMAGE 0x88982f60")
+cpp_quote("#define WINCODEC_ERR_FRAMEMISSING 0x88982f62")
+cpp_quote("#define WINCODEC_ERR_BADMETADATAHEADER 0x88982f63")
+cpp_quote("#define WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT 0x88982f80")
+cpp_quote("#define WINCODEC_ERR_UNSUPPORTEDOPERATION 0x88982f81")
+cpp_quote("#define WINCODEC_ERR_INSUFFICIENTBUFFER 0x88982f8c")
+cpp_quote("#define WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE 0x88982f8e")
+cpp_quote("#define WINCODEC_ERR_WIN32ERROR 0x88982f94")
+
+interface IWICPalette;
+
+[
+ object,
+ uuid(3c613a02-34b2-44ea-9a7c-45aea9c6fd6d)
+]
+interface IWICColorContext : IUnknown
+{
+ HRESULT InitializeFromFilename(
+ [in] LPCWSTR wzFilename);
+
+ HRESULT InitializeFromMemory(
+ [in, size_is(cbBufferSize)] const BYTE *pbBuffer,
+ [in] UINT cbBufferSize);
+
+ HRESULT InitializeFromExifColorSpace(
+ [in] UINT value);
+
+ HRESULT GetType(
+ [out] WICColorContextType *pType);
+
+ HRESULT GetProfileBytes(
+ [in] UINT cbBuffer,
+ [in, out, unique, size_is(cbBuffer)] BYTE *pbBuffer,
+ [out] UINT *pcbActual);
+
+ HRESULT GetExifColorSpace(
+ [out] UINT *pValue);
+}
+
+[
+ object,
+ uuid(00000120-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapSource : IUnknown
+{
+ HRESULT GetSize(
+ [out] UINT *puiWidth,
+ [out] UINT *puiHeight);
+
+ HRESULT GetPixelFormat(
+ [out] WICPixelFormatGUID *pPixelFormat);
+
+ HRESULT GetResolution(
+ [out] double *pDpiX,
+ [out] double *pDpiY);
+
+ HRESULT CopyPalette(
+ [in] IWICPalette *pIPalette);
+
+ HRESULT CopyPixels(
+ [in] const WICRect *prc,
+ [in] UINT cbStride,
+ [in] UINT cbBufferSize,
+ [out, size_is(cbBufferSize)] BYTE *pbBuffer);
+}
+
+[
+ object,
+ uuid(00000123-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapLock : IUnknown
+{
+ HRESULT GetSize(
+ [out] UINT *pWidth,
+ [out] UINT *pHeight);
+
+ HRESULT GetStride(
+ [out] UINT *pcbStride);
+
+ HRESULT GetDataPointer(
+ [out] UINT *pcbBufferSize,
+ [out, size_is(,*pcbBufferSize)] BYTE **ppbData);
+
+ HRESULT GetPixelFormat(
+ [out] WICPixelFormatGUID *pPixelFormat);
+}
+
+[
+ object,
+ uuid(5009834f-2d6a-41ce-9e1b-17c5aff7a782)
+]
+interface IWICBitmapFlipRotator : IWICBitmapSource
+{
+ HRESULT Initialize(
+ [in] IWICBitmapSource *pISource,
+ [in] WICBitmapTransformOptions options);
+}
+
+[
+ object,
+ uuid(00000121-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmap : IWICBitmapSource
+{
+ HRESULT Lock(
+ [in] const WICRect *prcLock,
+ [in] DWORD flags,
+ [out] IWICBitmapLock **ppILock);
+
+ HRESULT SetPalette(
+ [in] IWICPalette *pIPalette);
+
+ HRESULT SetResolution(
+ [in] double dpiX,
+ [in] double dpiY);
+}
+
+[
+ object,
+ uuid(00000040-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICPalette : IUnknown
+{
+ HRESULT InitializePredefined(
+ [in] WICBitmapPaletteType ePaletteType,
+ [in] BOOL fAddTransparentColor);
+
+ HRESULT InitializeCustom(
+ [in, size_is(colorCount)] WICColor *pColors,
+ [in] UINT colorCount);
+
+ HRESULT InitializeFromBitmap(
+ [in] IWICBitmapSource *pISurface,
+ [in] UINT colorCount,
+ [in] BOOL fAddTransparentColor);
+
+ HRESULT InitializeFromPalette(
+ [in] IWICPalette *pIPalette);
+
+ HRESULT GetType(
+ [out] WICBitmapPaletteType *pePaletteType);
+
+ HRESULT GetColorCount(
+ [out] UINT *pcCount);
+
+ HRESULT GetColors(
+ [in] UINT colorCount,
+ [out, size_is(colorCount)] WICColor *pColors,
+ [out] UINT *pcActualColors);
+
+ HRESULT IsBlackWhite(
+ [out] BOOL *pfIsBlackWhite);
+
+ HRESULT IsGrayscale(
+ [out] BOOL *pfIsGrayscale);
+
+ HRESULT HasAlpha(
+ [out] BOOL *pfHasAlpha);
+}
+
+[
+ object,
+ uuid(23bc3f0a-698b-4357-886b-f24d50671334)
+]
+interface IWICComponentInfo : IUnknown
+{
+ HRESULT GetComponentType(
+ [out] WICComponentType *pType);
+
+ HRESULT GetCLSID(
+ [out] CLSID *pclsid);
+
+ HRESULT GetSigningStatus(
+ [out] DWORD *pStatus);
+
+ HRESULT GetAuthor(
+ [in] UINT cchAuthor,
+ [in, out, unique, size_is(cchAuthor)] WCHAR *wzAuthor,
+ [out] UINT *pcchActual);
+
+ HRESULT GetVendorGUID(
+ [out] GUID *pguidVendor);
+
+ HRESULT GetVersion(
+ [in] UINT cchVersion,
+ [in, out, unique, size_is(cchVersion)] WCHAR *wzVersion,
+ [out] UINT *pcchActual);
+
+ HRESULT GetSpecVersion(
+ [in] UINT cchSpecVersion,
+ [in, out, unique, size_is(cchSpecVersion)] WCHAR *wzSpecVersion,
+ [out] UINT *pcchActual);
+
+ HRESULT GetFriendlyName(
+ [in] UINT cchFriendlyName,
+ [in, out, unique, size_is(cchFriendlyName)] WCHAR *wzFriendlyName,
+ [out] UINT *pcchActual);
+}
+
+[
+ object,
+ uuid(30989668-e1c9-4597-b395-458eedb808df)
+]
+interface IWICMetadataQueryReader : IUnknown
+{
+ HRESULT GetContainerFormat(
+ [out] GUID *pguidContainerFormat);
+
+ HRESULT GetLocation(
+ [in] UINT cchMaxLength,
+ [in, out, unique, size_is(cchMaxLength)] WCHAR *wzNamespace,
+ [out] UINT *pcchActualLength);
+
+ HRESULT GetMetadataByName(
+ [in] LPCWSTR wzName,
+ [in, out, unique] PROPVARIANT *pvarValue);
+
+ HRESULT GetEnumerator(
+ [out] IEnumString **ppIEnumString);
+}
+
+[
+ object,
+ uuid(a721791a-0def-4d06-bd91-2118bf1db10b)
+]
+interface IWICMetadataQueryWriter : IWICMetadataQueryReader
+{
+ HRESULT SetMetadataByName(
+ [in] LPCWSTR wzName,
+ [in] const PROPVARIANT *pvarValue);
+
+ HRESULT RemoveMetadataByName(
+ [in] LPCWSTR wzName);
+}
+
+[
+ object,
+ uuid(3b16811b-6a43-4ec9-a813-3d930c13b940)
+]
+interface IWICBitmapFrameDecode : IWICBitmapSource
+{
+ HRESULT GetMetadataQueryReader(
+ [out] IWICMetadataQueryReader **ppIMetadataQueryReader);
+
+ HRESULT GetColorContexts(
+ [in] UINT cCount,
+ [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts,
+ [out] UINT *pcActualCount);
+
+ HRESULT GetThumbnail(
+ [out] IWICBitmapSource **ppIThumbnail);
+}
+
+[
+ object,
+ uuid(e8eda601-3d48-431a-ab44-69059be88bbe)
+]
+interface IWICPixelFormatInfo : IWICComponentInfo
+{
+ HRESULT GetFormatGUID(
+ [out] GUID* pFormat);
+
+ HRESULT GetColorContext(
+ [out] IWICColorContext **ppIColorContext);
+
+ HRESULT GetBitsPerPixel(
+ [out] UINT *puiBitsPerPixel);
+
+ HRESULT GetChannelCount(
+ [out] UINT *puiChannelCount);
+
+ HRESULT GetChannelMask(
+ [in] UINT uiChannelIndex,
+ [in] UINT cbMaskBuffer,
+ [in, out, unique, size_is(cbMaskBuffer)] BYTE *pbMaskBuffer,
+ [out] UINT *pcbActual);
+}
+
+[
+ object,
+ uuid(a9db33a2-af5f-43c7-b679-74f5984b5aa4)
+]
+interface IWICPixelFormatInfo2 : IWICPixelFormatInfo
+{
+ HRESULT SupportsTransparency(
+ [out] BOOL *pfSupportsTransparency);
+
+ HRESULT GetNumericRepresentation(
+ [out] WICPixelFormatNumericRepresentation *pNumericRepresentation);
+}
+
+[
+ object,
+ uuid(e87a44c4-b76e-4c47-8b09-298eb12a2714)
+]
+interface IWICBitmapCodecInfo : IWICComponentInfo
+{
+ HRESULT GetContainerFormat(
+ [out] GUID *pguidContainerFormat);
+
+ HRESULT GetPixelFormats(
+ [in] UINT cFormats,
+ [in, out, unique, size_is(cFormats)] GUID *pguidPixelFormats,
+ [out] UINT *pcActual);
+
+ HRESULT GetColorManagementVersion(
+ [in] UINT cchColorManagementVersion,
+ [in, out, unique, size_is(cchColorManagementVersion)] WCHAR *wzColorManagementVersion,
+ [out] UINT *pcchActual);
+
+ HRESULT GetDeviceManufacturer(
+ [in] UINT cchDeviceManufacturer,
+ [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer,
+ [out] UINT *pcchActual);
+
+ HRESULT GetDeviceModels(
+ [in] UINT cchDeviceModels,
+ [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels,
+ [out] UINT *pcchActual);
+
+ HRESULT GetMimeTypes(
+ [in] UINT cchMimeTypes,
+ [in, out, unique, size_is(cchMimeTypes)] WCHAR *wzMimeTypes,
+ [out] UINT *pcchActual);
+
+ HRESULT GetFileExtensions(
+ [in] UINT cchFileExtensions,
+ [in, out, unique, size_is(cchFileExtensions)] WCHAR *wzFileExtensions,
+ [out] UINT *pcchActual);
+
+ HRESULT DoesSupportAnimation(
+ [out] BOOL *pfSupportAnimation);
+
+ HRESULT DoesSupportChromaKey(
+ [out] BOOL *pfSupportChromaKey);
+
+ HRESULT DoesSupportLossless(
+ [out] BOOL *pfSupportLossless);
+
+ HRESULT DoesSupportMultiframe(
+ [out] BOOL *pfSupportMultiframe);
+
+ HRESULT MatchesMimeType(
+ [in] LPCWSTR wzMimeType,
+ [out] BOOL *pfMatches);
+}
+
+interface IWICBitmapDecoder;
+
+[
+ object,
+ uuid(d8cd007f-d08f-4191-9bfc-236ea7f0e4b5)
+]
+interface IWICBitmapDecoderInfo : IWICBitmapCodecInfo
+{
+ [local]
+ HRESULT GetPatterns(
+ [in] UINT cbSizePatterns,
+ [in, out, unique] WICBitmapPattern *pPatterns,
+ [in, out, unique] UINT *pcPatterns,
+ [in, out, unique] UINT *pcbPatternsActual);
+
+ HRESULT MatchesPattern(
+ [in] IStream *pIStream,
+ [out] BOOL *pfMatches);
+
+ HRESULT CreateInstance(
+ [out] IWICBitmapDecoder **ppIBitmapDecoder);
+}
+
+[
+ object,
+ uuid(9edde9e7-8dee-47ea-99df-e6faf2ed44bf)
+]
+interface IWICBitmapDecoder : IUnknown
+{
+ HRESULT QueryCapability(
+ [in] IStream *pIStream,
+ [out] DWORD *pdwCapability);
+
+ HRESULT Initialize(
+ [in] IStream *pIStream,
+ [in] WICDecodeOptions cacheOptions);
+
+ HRESULT GetContainerFormat(
+ [out] GUID *pguidContainerFormat);
+
+ HRESULT GetDecoderInfo(
+ [out] IWICBitmapDecoderInfo **ppIDecoderInfo);
+
+ HRESULT CopyPalette(
+ [in] IWICPalette *pIPalette);
+
+ HRESULT GetMetadataQueryReader(
+ [out] IWICMetadataQueryReader **ppIMetadataQueryReader);
+
+ HRESULT GetPreview(
+ [out] IWICBitmapSource **ppIBitmapSource);
+
+ HRESULT GetColorContexts(
+ [in] UINT cCount,
+ [in, out, unique, size_is(cCount)] IWICColorContext **ppIColorContexts,
+ [out] UINT *pcActualCount);
+
+ HRESULT GetThumbnail(
+ [out] IWICBitmapSource **ppIThumbnail);
+
+ HRESULT GetFrameCount(
+ [out] UINT *pCount);
+
+ HRESULT GetFrame(
+ [in] UINT index,
+ [out] IWICBitmapFrameDecode **ppIBitmapFrame);
+}
+
+[
+ object,
+ uuid(00000105-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapFrameEncode : IUnknown
+{
+ HRESULT Initialize(
+ [in, unique] IPropertyBag2 *pIEncoderOptions);
+
+ HRESULT SetSize(
+ [in] UINT uiWidth,
+ [in] UINT uiHeight);
+
+ HRESULT SetResolution(
+ [in] double dpiX,
+ [in] double dpiY);
+
+ HRESULT SetPixelFormat(
+ [in, out] WICPixelFormatGUID *pPixelFormat);
+
+ HRESULT SetColorContexts(
+ [in] UINT cCount,
+ [in, size_is(cCount)] IWICColorContext **ppIColorContext);
+
+ HRESULT SetPalette(
+ [in] IWICPalette *pIPalette);
+
+ HRESULT SetThumbnail(
+ [in] IWICBitmapSource *pIThumbnail);
+
+ HRESULT WritePixels(
+ [in] UINT lineCount,
+ [in] UINT cbStride,
+ [in] UINT cbBufferSize,
+ [in, size_is(cbBufferSize)] BYTE *pbPixels);
+
+ HRESULT WriteSource(
+ [in] IWICBitmapSource *pIBitmapSource,
+ [in, unique] WICRect *prc);
+
+ HRESULT Commit();
+
+ HRESULT GetMetadataQueryWriter(
+ IWICMetadataQueryWriter **ppIMetadataQueryWriter);
+}
+
+interface IWICBitmapEncoder;
+
+[
+ object,
+ uuid(94c9b4ee-a09f-4f92-8a1e-4a9bce7e76fb)
+]
+interface IWICBitmapEncoderInfo : IWICBitmapCodecInfo
+{
+ HRESULT CreateInstance(
+ [out] IWICBitmapEncoder **ppIBitmapEncoder);
+}
+
+[
+ object,
+ uuid(00000103-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapEncoder : IUnknown
+{
+ HRESULT Initialize(
+ [in] IStream *pIStream,
+ [in] WICBitmapEncoderCacheOption cacheOption);
+
+ HRESULT GetContainerFormat(
+ [out] GUID *pguidContainerFormat);
+
+ HRESULT GetEncoderInfo(
+ [out] IWICBitmapEncoderInfo **ppIEncoderInfo);
+
+ HRESULT SetColorContexts(
+ [in] UINT cCount,
+ [in, size_is(cCount)] IWICColorContext **ppIColorContext);
+
+ HRESULT SetPalette(
+ [in] IWICPalette *pIPalette);
+
+ HRESULT SetThumbnail(
+ [in] IWICBitmapSource *pIThumbnail);
+
+ HRESULT SetPreview(
+ [in] IWICBitmapSource *pIPreview);
+
+ HRESULT CreateNewFrame(
+ [out] IWICBitmapFrameEncode **ppIFrameEncode,
+ [in, out, unique] IPropertyBag2 **ppIEncoderOptions);
+
+ HRESULT Commit();
+
+ HRESULT GetMetadataQueryWriter(
+ [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter);
+}
+
+[
+ object,
+ uuid(00000301-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICFormatConverter : IWICBitmapSource
+{
+ HRESULT Initialize(
+ [in] IWICBitmapSource *pISource,
+ [in] REFWICPixelFormatGUID dstFormat,
+ [in] WICBitmapDitherType dither,
+ [in] IWICPalette *pIPalette,
+ [in] double alphaThresholdPercent,
+ [in] WICBitmapPaletteType paletteTranslate);
+
+ HRESULT CanConvert(
+ [in] REFWICPixelFormatGUID srcPixelFormat,
+ [in] REFWICPixelFormatGUID dstPixelFormat,
+ [out] BOOL *pfCanConvert);
+}
+
+[
+ object,
+ uuid(9f34fb65-13f4-4f15-bc57-3726b5e53d9f)
+]
+interface IWICFormatConverterInfo : IWICComponentInfo
+{
+ HRESULT GetPixelFormats(
+ [in] UINT cFormats,
+ [in, out, size_is(cFormats)] WICPixelFormatGUID *pPixelFormatGUIDs,
+ [out] UINT *pcActual);
+
+ HRESULT CreateInstance(
+ [out] IWICFormatConverter **ppIConverter);
+}
+
+[
+ object,
+ uuid(135ff860-22b7-4ddf-b0f6-218f4f299a43)
+]
+interface IWICStream : IStream
+{
+ HRESULT InitializeFromIStream(
+ [in] IStream *pIStream);
+
+ HRESULT InitializeFromFilename(
+ [in] LPCWSTR wzFileName,
+ [in] DWORD dwAccessMode);
+
+ HRESULT InitializeFromMemory(
+ [in, size_is(cbBufferSize)] BYTE *pbBuffer,
+ [in] DWORD cbBufferSize);
+
+ HRESULT InitializeFromIStreamRegion(
+ [in] IStream *pIStream,
+ [in] ULARGE_INTEGER ulOffset,
+ [in] ULARGE_INTEGER ulMaxSize);
+}
+
+[
+ object,
+ uuid(00000302-a8f2-4877-ba0a-fd2b6645fb94)
+]
+interface IWICBitmapScaler : IWICBitmapSource
+{
+ HRESULT Initialize(
+ [in] IWICBitmapSource *pISource,
+ [in] UINT uiWidth,
+ [in] UINT uiHeight,
+ [in] WICBitmapInterpolationMode mode);
+}
+
+[
+ object,
+ uuid(e4fbcf03-223d-4e81-9333-d635556dd1b5)
+]
+interface IWICBitmapClipper : IWICBitmapSource
+{
+ HRESULT Initialize(
+ [in] IWICBitmapSource *pISource,
+ [in] const WICRect *prc);
+}
+
+[
+ object,
+ uuid(b66f034f-d0e2-40ab-b436-6de39e321a94)
+]
+interface IWICColorTransform : IWICBitmapSource
+{
+ HRESULT Initialize(
+ [in] IWICBitmapSource *pIBitmapSource,
+ [in] IWICColorContext *pIContextSource,
+ [in] IWICColorContext *pIContextDest,
+ [in] REFWICPixelFormatGUID pixelFmtDest);
+}
+
+[
+ object,
+ uuid(b84e2c09-78c9-4ac4-8bd3-524ae1663a2f)
+]
+interface IWICFastMetadataEncoder : IUnknown
+{
+ HRESULT Commit();
+
+ HRESULT GetMetadataQueryWriter(
+ [out] IWICMetadataQueryWriter **ppIMetadataQueryWriter);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_WICImagingFactory, 0xcacaf262,0x9370,0x4615,0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0x0a);")
+
+[
+ object,
+ uuid(ec5ec8a9-c395-4314-9c77-54d7a935ff70)
+]
+interface IWICImagingFactory : IUnknown
+{
+ HRESULT CreateDecoderFromFilename(
+ [in] LPCWSTR wzFilename,
+ [in, unique] const GUID *pguidVendor,
+ [in] DWORD dwDesiredAccess,
+ [in] WICDecodeOptions metadataOptions,
+ [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+ HRESULT CreateDecoderFromStream(
+ [in] IStream *pIStream,
+ [in, unique] const GUID *pguidVendor,
+ [in] WICDecodeOptions metadataOptions,
+ [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+ HRESULT CreateDecoderFromFileHandle(
+ [in] ULONG_PTR hFile,
+ [in, unique] const GUID *pguidVendor,
+ [in] WICDecodeOptions metadataOptions,
+ [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+ HRESULT CreateComponentInfo(
+ [in] REFCLSID clsidComponent,
+ [out] IWICComponentInfo **ppIInfo);
+
+ HRESULT CreateDecoder(
+ [in] REFGUID guidContainerFormat,
+ [in, unique] const GUID *pguidVendor,
+ [out, retval] IWICBitmapDecoder **ppIDecoder);
+
+ HRESULT CreateEncoder(
+ [in] REFGUID guidContainerFormat,
+ [in, unique] const GUID *pguidVendor,
+ [out, retval] IWICBitmapEncoder **ppIEncoder);
+
+ HRESULT CreatePalette(
+ [out] IWICPalette **ppIPalette);
+
+ HRESULT CreateFormatConverter(
+ [out] IWICFormatConverter **ppIFormatConverter);
+
+ HRESULT CreateBitmapScaler(
+ [out] IWICBitmapScaler **ppIBitmapScaler);
+
+ HRESULT CreateBitmapClipper(
+ [out] IWICBitmapClipper **ppIBitmapClipper);
+
+ HRESULT CreateBitmapFlipRotator(
+ [out] IWICBitmapFlipRotator **ppIBitmapFlipRotator);
+
+ HRESULT CreateStream(
+ [out] IWICStream **ppIWICStream);
+
+ HRESULT CreateColorContext(
+ [out] IWICColorContext **ppIWICColorContext);
+
+ HRESULT CreateColorTransformer(
+ [out] IWICColorTransform **ppIWICColorTransform);
+
+ HRESULT CreateBitmap(
+ [in] UINT uiWidth,
+ [in] UINT uiHeight,
+ [in] REFWICPixelFormatGUID pixelFormat,
+ [in] WICBitmapCreateCacheOption option,
+ [out] IWICBitmap **ppIBitmap);
+
+ HRESULT CreateBitmapFromSource(
+ [in] IWICBitmapSource *piBitmapSource,
+ [in] WICBitmapCreateCacheOption option,
+ [out] IWICBitmap **ppIBitmap);
+
+ HRESULT CreateBitmapFromSourceRect(
+ [in] IWICBitmapSource *piBitmapSource,
+ [in] UINT x,
+ [in] UINT y,
+ [in] UINT width,
+ [in] UINT height,
+ [out] IWICBitmap **ppIBitmap);
+
+ HRESULT CreateBitmapFromMemory(
+ [in] UINT uiWidth,
+ [in] UINT uiHeight,
+ [in] REFWICPixelFormatGUID pixelFormat,
+ [in] UINT cbStride,
+ [in] UINT cbBufferSize,
+ [in, size_is(cbBufferSize)] BYTE *pbBuffer,
+ [out] IWICBitmap **ppIBitmap);
+
+ HRESULT CreateBitmapFromHBITMAP(
+ [in] HBITMAP hBitmap,
+ [in, unique] HPALETTE hPalette,
+ [in] WICBitmapAlphaChannelOption options,
+ [out] IWICBitmap **ppIBitmap);
+
+ HRESULT CreateBitmapFromHICON(
+ [in] HICON hIcon,
+ [out] IWICBitmap **ppIBitmap);
+
+ HRESULT CreateComponentEnumerator(
+ [in] DWORD componentTypes,
+ [in] DWORD options,
+ [out] IEnumUnknown **ppIEnumUnknown);
+
+ HRESULT CreateFastMetadataEncoderFromDecoder(
+ [in] IWICBitmapDecoder *pIDecoder,
+ [out] IWICFastMetadataEncoder **ppIFastEncoder);
+
+ HRESULT CreateFastMetadataEncoderFromFrameDecode(
+ [in] IWICBitmapFrameDecode *pIFrameDecoder,
+ [out] IWICFastMetadataEncoder **ppIFastEncoder);
+
+ HRESULT CreateQueryWriter(
+ [in] REFGUID guidMetadataFormat,
+ [in, unique] const GUID *pguidVendor,
+ [out] IWICMetadataQueryWriter **ppIQueryWriter);
+
+ HRESULT CreateQueryWriterFromReader(
+ [in] IWICMetadataQueryReader *pIQueryReader,
+ [in, unique] const GUID *pguidVendor,
+ [out] IWICMetadataQueryWriter **ppIQueryWriter);
+}
+
+[
+ local,
+ object,
+ uuid(dc2bb46d-3f07-481e-8625-220c4aedbb33)
+]
+interface IWICEnumMetadataItem : IUnknown
+{
+ HRESULT Next(
+ [in] ULONG celt,
+ [in, out, unique, size_is(celt)] PROPVARIANT *rgeltSchema,
+ [in, out, size_is(celt)] PROPVARIANT *rgeltId,
+ [in, out, optional, size_is(celt)] PROPVARIANT *rgeltValue,
+ [out, optional] ULONG *pceltFetched);
+
+ HRESULT Skip(
+ [in] ULONG celt);
+
+ HRESULT Reset();
+
+ HRESULT Clone(
+ [out] IWICEnumMetadataItem **ppIEnumMetadataItem);
+}
+
+cpp_quote("HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICBmpDecoder, 0x6b462062,0x7cbf,0x400d,0x9f,0xdb,0x81,0x3d,0xd1,0x0f,0x27,0x78);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngDecoder, 0x389ea17b,0x5078,0x4cde,0xb6,0xef,0x25,0xc1,0x51,0x75,0xc7,0x51);")
+cpp_quote("DEFINE_GUID(CLSID_WICIcoDecoder, 0xc61bfcdf,0x2e0f,0x4aad,0xa8,0xd7,0xe0,0x6b,0xaf,0xeb,0xcd,0xfe);")
+cpp_quote("DEFINE_GUID(CLSID_WICJpegDecoder, 0x9456a480,0xe88b,0x43ea,0x9e,0x73,0x0b,0x2d,0x9b,0x71,0xb1,0xca);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifDecoder, 0x381dda3c,0x9ce9,0x4834,0xa2,0x3e,0x1f,0x98,0xf8,0xfc,0x52,0xbe);")
+cpp_quote("DEFINE_GUID(CLSID_WICTiffDecoder, 0xb54e85d9,0xfe23,0x499f,0x8b,0x88,0x6a,0xce,0xa7,0x13,0x75,0x2b);")
+cpp_quote("DEFINE_GUID(CLSID_WICWmpDecoder, 0xa26cec36,0x234c,0x4950,0xae,0x16,0xe3,0x4a,0xac,0xe7,0x1d,0x0d);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICBmpEncoder, 0x69be8bb4,0xd66d,0x47c8,0x86,0x5a,0xed,0x15,0x89,0x43,0x37,0x82);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngEncoder, 0x27949969,0x876a,0x41d7,0x94,0x47,0x56,0x8f,0x6a,0x35,0xa4,0xdc);")
+cpp_quote("DEFINE_GUID(CLSID_WICJpegEncoder, 0x1a34f5c1,0x4a5a,0x46dc,0xb6,0x44,0x1f,0x45,0x67,0xe7,0xa6,0x76);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifEncoder, 0x114f5598,0x0b22,0x40a0,0x86,0xa1,0xc8,0x3e,0xa4,0x95,0xad,0xbd);")
+cpp_quote("DEFINE_GUID(CLSID_WICTiffEncoder, 0x0131be10,0x2001,0x4c5f,0xa9,0xb0,0xcc,0x88,0xfa,0xb6,0x4c,0xe8);")
+cpp_quote("DEFINE_GUID(CLSID_WICWmpEncoder, 0xac4ce3cb,0xe1c1,0x44cd,0x82,0x15,0x5a,0x16,0x65,0x50,0x9e,0xc2);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICDefaultFormatConverter, 0x1a3f11dc,0xb514,0x4b17,0x8c,0x5f,0x21,0x54,0x51,0x38,0x52,0xf1);")
+
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatBmp, 0x0af1d87e,0xfcfe,0x4188,0xbd,0xeb,0xa7,0x90,0x64,0x71,0xcb,0xe3);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatPng, 0x1b7cfaf4,0x713f,0x473c,0xbb,0xcd,0x61,0x37,0x42,0x5f,0xae,0xaf);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatIco, 0xa3a860c4,0x338f,0x4c17,0x91,0x9a,0xfb,0xa4,0xb5,0x62,0x8f,0x21);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatJpeg, 0x19e4a5aa,0x5662,0x4fc5,0xa0,0xc0,0x17,0x58,0x02,0x8e,0x10,0x57);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatTiff, 0x163bcc30,0xe2e9,0x4f0b,0x96,0x1d,0xa3,0xe9,0xfd,0xb7,0x88,0xa3);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatGif, 0x1f8a5601,0x7d4d,0x4cbd,0x9c,0x82,0x1b,0xc8,0xd4,0xee,0xb9,0xa5);")
+cpp_quote("DEFINE_GUID(GUID_ContainerFormatWmp, 0x57a37caa,0x367a,0x4540,0x91,0x6b,0xf1,0x83,0xc5,0x09,0x3a,0x4b);")
+
+cpp_quote("DEFINE_GUID(GUID_VendorMicrosoft, 0xf0e749ca,0xedef,0x4589,0xa7,0x3a,0xee,0x0e,0x62,0x6a,0x2a,0x2b);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICImagingCategories, 0xfae3d380,0xfea4,0x4623,0x8c,0x75,0xc6,0xb6,0x11,0x10,0xb6,0x81);")
+cpp_quote("DEFINE_GUID(CATID_WICBitmapDecoders, 0x7ed96837,0x96f0,0x4812,0xb2,0x11,0xf1,0x3c,0x24,0x11,0x7e,0xd3);")
+cpp_quote("DEFINE_GUID(CATID_WICBitmapEncoders, 0xac757296,0x3522,0x4e11,0x98,0x62,0xc1,0x7b,0xe5,0xa1,0x76,0x7e);")
+cpp_quote("DEFINE_GUID(CATID_WICFormatConverters, 0x7835eae8,0xbf14,0x49d1,0x93,0xce,0x53,0x3a,0x40,0x7b,0x22,0x48);")
+cpp_quote("DEFINE_GUID(CATID_WICMetadataReader, 0x05af94d8,0x7174,0x4cd2,0xbe,0x4a,0x41,0x24,0xb8,0x0e,0xe4,0xb8);")
+cpp_quote("DEFINE_GUID(CATID_WICPixelFormats, 0x2b46e70f,0xcda7,0x473e,0x89,0xf6,0xdc,0x96,0x30,0xa2,0x39,0x0b);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl
new file mode 100644
index 00000000..37009883
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincodecsdk.idl
@@ -0,0 +1,330 @@
+/*
+ * Copyright 2011 Vincent Povirk for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+import "wincodec.idl";
+
+typedef enum WICPersistOptions {
+ WICPersistOptionsDefault = 0x00000000,
+ WICPersistOptionsLittleEndian = 0x00000000,
+ WICPersistOptionsBigEndian = 0x00000001,
+ WICPersistOptionsStrictFormat = 0x00000002,
+ WICPersistOptionsNoCacheStream = 0x00000004,
+ WICPersistOptionPreferUTF8 = 0x00000008,
+ WICPersistOptionsMask = 0x0000FFFF
+} WICPersistOptions;
+
+typedef enum WICMetadataCreationOptions {
+ WICMetadataCreationDefault = 0x00000000,
+ WICMetadataCreationAllowUnknown = WICMetadataCreationDefault,
+ WICMetadataCreationFailUnknown = 0x00010000,
+ WICMetadataCreationMask = 0xFFFF0000
+} WICMetadataCreationOptions;
+
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatUnknown, 0xa45e592f,0x9078,0x4a7c,0xad,0xb5,0x4e,0xdc,0x4f,0xd6,0x1b,0x1f);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktEXt, 0x568d8936,0xc0a9,0x4923,0x90,0x5d,0xdf,0x2b,0x38,0x23,0x8f,0xbc);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatChunktIME, 0x6b00ae2d,0xe24b,0x460a,0x98,0xb6,0x87,0x8b,0xd0,0x30,0x72,0xfd);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatIfd, 0x537396c6,0x2d8a,0x4bb6,0x9b,0xf8,0x2f,0x0a,0x8e,0x2a,0x3a,0xdf);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatExif, 0x1c3c4f9d,0xb84a,0x467d,0x94,0x93,0x36,0xcf,0xbd,0x59,0xea,0x57);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMP, 0xbb5acc38,0xf216,0x4cec,0xa6,0xc5,0x5f,0x6e,0x73,0x97,0x63,0xa9);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatXMPStruct, 0x22383cf1,0xed17,0x4e2e,0xaf,0x17,0xd8,0x5b,0x8f,0x6b,0x30,0xd0);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatIMD, 0xbd2bb086,0x4d52,0x48dd,0x96,0x77,0xdb,0x48,0x3e,0x85,0xae,0x8f);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatLSD, 0xe256031e,0x6299,0x4929,0xb9,0x8d,0x5a,0xc8,0x84,0xaf,0xba,0x92);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatGCE, 0x2a25cad8,0xdeeb,0x4c69,0xa7,0x88,0x0e,0xc2,0x26,0x6d,0xca,0xfd);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatAPE, 0x2e043dc2,0xc967,0x4e05,0x87,0x5e,0x61,0x8b,0xf6,0x7e,0x85,0xc3);")
+cpp_quote("DEFINE_GUID(GUID_MetadataFormatGifComment, 0xc4b6e0e0,0xcfb4,0x4ad3,0xab,0x33,0x9a,0xad,0x23,0x55,0xa3,0x4a);")
+
+cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataReader, 0x699745c2,0x5066,0x4b82,0xa8,0xe3,0xd4,0x04,0x78,0xdb,0xec,0x8c);")
+cpp_quote("DEFINE_GUID(CLSID_WICUnknownMetadataWriter, 0xa09cca86,0x27ba,0x4f39,0x90,0x53,0x12,0x1f,0xa4,0xdc,0x08,0xfc);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataReader, 0x4b59afcc,0xb8c3,0x408a,0xb6,0x70,0x89,0xe5,0xfa,0xb6,0xfd,0xa7);")
+cpp_quote("DEFINE_GUID(CLSID_WICPngTextMetadataWriter, 0xb5ebafb9,0x253e,0x4a72,0xa7,0x44,0x07,0x62,0xd2,0x68,0x56,0x83);")
+cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataReader, 0x8f914656,0x9d0a,0x4eb2,0x90,0x19,0x0b,0xf9,0x6d,0x8a,0x9e,0xe6);")
+cpp_quote("DEFINE_GUID(CLSID_WICIfdMetadataWriter, 0xb1ebfc28,0xc9bd,0x47a2,0x8d,0x33,0xb9,0x48,0x76,0x97,0x77,0xa7);")
+cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataReader, 0xd9403860,0x297f,0x4a49,0xbf,0x9b,0x77,0x89,0x81,0x50,0xa4,0x42);")
+cpp_quote("DEFINE_GUID(CLSID_WICExifMetadataWriter, 0xc9a14cda,0xc339,0x460b,0x90,0x78,0xd4,0xde,0xbc,0xfa,0xbe,0x91);")
+cpp_quote("DEFINE_GUID(CLSID_WICXMPStructMetadataReader, 0x01b90d9a,0x8209,0x47f7,0x9c,0x52,0xe1,0x24,0x4b,0xf5,0x0c,0xed);")
+cpp_quote("DEFINE_GUID(CLSID_WICXMPStructMetadataWriter, 0x22c21f93,0x7ddb,0x411c,0x9b,0x17,0xc5,0xb7,0xbd,0x06,0x4a,0xbc);")
+cpp_quote("DEFINE_GUID(CLSID_WICLSDMetadataReader, 0x41070793,0x59e4,0x479a,0xa1,0xf7,0x95,0x4a,0xdc,0x2e,0xf5,0xfc);")
+cpp_quote("DEFINE_GUID(CLSID_WICLSDMetadataWriter, 0x73c037e7,0xe5d9,0x4954,0x87,0x6a,0x6d,0xa8,0x1d,0x6e,0x57,0x68);")
+cpp_quote("DEFINE_GUID(CLSID_WICIMDMetadataReader, 0x7447a267,0x0015,0x42c8,0xa8,0xf1,0xfb,0x3b,0x94,0xc6,0x83,0x61);")
+cpp_quote("DEFINE_GUID(CLSID_WICIMDMetadataWriter, 0x8c89071f,0x452e,0x4e95,0x96,0x82,0x9d,0x10,0x24,0x62,0x71,0x72);")
+cpp_quote("DEFINE_GUID(CLSID_WICGCEMetadataReader, 0xb92e345d,0xf52d,0x41f3,0xb5,0x62,0x08,0x1b,0xc7,0x72,0xe3,0xb9);")
+cpp_quote("DEFINE_GUID(CLSID_WICGCEMetadataWriter, 0xaf95dc76,0x16b2,0x47f4,0xb3,0xea,0x3c,0x31,0x79,0x66,0x93,0xe7);")
+cpp_quote("DEFINE_GUID(CLSID_WICAPEMetadataReader, 0x1767b93a,0xb021,0x44ea,0x92,0x0f,0x86,0x3c,0x11,0xf4,0xf7,0x68);")
+cpp_quote("DEFINE_GUID(CLSID_WICAPEMetadataWriter, 0xbd6edfca,0x2890,0x482f,0xb2,0x33,0x8d,0x73,0x39,0xa1,0xcf,0x8d);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifCommentMetadataReader, 0x32557d3b,0x69dc,0x4f95,0x83,0x6e,0xf5,0x97,0x2b,0x2f,0x61,0x59);")
+cpp_quote("DEFINE_GUID(CLSID_WICGifCommentMetadataWriter, 0xa02797fc,0xc4ae,0x418c,0xaf,0x95,0xe6,0x37,0xc7,0xea,0xd2,0xa1);")
+
+typedef struct WICMetadataPattern {
+ ULARGE_INTEGER Position;
+ ULONG Length;
+ BYTE *Pattern;
+ BYTE *Mask;
+ ULARGE_INTEGER DataOffset;
+} WICMetadataPattern;
+
+typedef struct WICMetadataHeader {
+ ULARGE_INTEGER Position;
+ ULONG Length;
+ BYTE *Header;
+ ULARGE_INTEGER DataOffset;
+} WICMetadataHeader;
+
+[
+ object,
+ uuid(aba958bf-c672-44d1-8d61-ce6df2e682c2)
+]
+interface IWICMetadataHandlerInfo : IWICComponentInfo
+{
+ HRESULT GetMetadataFormat(
+ [out] GUID *pguidMetadataFormat);
+
+ HRESULT GetContainerFormats(
+ [in] UINT cContainerFormats,
+ [in, out, unique, size_is(cContainerFormats)] GUID *pguidContainerFormats,
+ [out] UINT *pcchActual);
+
+ HRESULT GetDeviceManufacturer(
+ [in] UINT cchDeviceManufacturer,
+ [in, out, unique, size_is(cchDeviceManufacturer)] WCHAR *wzDeviceManufacturer,
+ [out] UINT *pcchActual);
+
+ HRESULT GetDeviceModels(
+ [in] UINT cchDeviceModels,
+ [in, out, unique, size_is(cchDeviceModels)] WCHAR *wzDeviceModels,
+ [out] UINT *pcchActual);
+
+ HRESULT DoesRequireFullStream(
+ [out] BOOL *pfRequiresFullStream);
+
+ HRESULT DoesSupportPadding(
+ [out] BOOL *pfSupportsPadding);
+
+ HRESULT DoesRequireFixedSize(
+ [out] BOOL *pfFixedSize);
+}
+
+[
+ object,
+ uuid(9204fe99-d8fc-4fd5-a001-9536b067a899)
+]
+interface IWICMetadataReader : IUnknown
+{
+ HRESULT GetMetadataFormat(
+ [out] GUID *pguidMetadataFormat);
+
+ HRESULT GetMetadataHandlerInfo(
+ [out] IWICMetadataHandlerInfo **ppIHandler);
+
+ HRESULT GetCount(
+ [out] UINT *pcCount);
+
+ HRESULT GetValueByIndex(
+ [in] UINT nIndex,
+ [in, out, unique] PROPVARIANT *pvarSchema,
+ [in, out, unique] PROPVARIANT *pvarId,
+ [in, out, unique] PROPVARIANT *pvarValue);
+
+ HRESULT GetValue(
+ [in] const PROPVARIANT *pvarSchema,
+ [in] const PROPVARIANT *pvarId,
+ [in, out, unique] PROPVARIANT *pvarValue);
+
+ HRESULT GetEnumerator(
+ [out] IWICEnumMetadataItem **ppIEnumMetadata);
+}
+
+[
+ object,
+ uuid(eebf1f5b-07c1-4447-a3ab-22acaf78a804)
+]
+interface IWICMetadataReaderInfo : IWICMetadataHandlerInfo
+{
+ [local]
+ HRESULT GetPatterns(
+ [in] REFGUID guidContainerFormat,
+ [in] UINT cbSize,
+ [out, unique] WICMetadataPattern *pPattern,
+ [out, unique] UINT *pcCount,
+ [out, unique] UINT *pcbActual);
+
+ HRESULT MatchesPattern(
+ [in] REFGUID guidContainerFormat,
+ [in] IStream *pIStream,
+ [out] BOOL *pfMatches);
+
+ HRESULT CreateInstance(
+ [out] IWICMetadataReader **ppIReader);
+}
+
+[
+ object,
+ uuid(f7836e16-3be0-470b-86bb-160d0aecd7de)
+]
+interface IWICMetadataWriter : IWICMetadataReader
+{
+ HRESULT SetValue(
+ [in, unique] const PROPVARIANT *pvarSchema,
+ [in] const PROPVARIANT *pvarId,
+ [in] const PROPVARIANT *pvarValue);
+
+ HRESULT SetValueByIndex(
+ [in] UINT nIndex,
+ [in, unique] const PROPVARIANT *pvarSchema,
+ [in] const PROPVARIANT *pvarId,
+ [in] const PROPVARIANT *pvarValue);
+
+ HRESULT RemoveValue(
+ [in, unique] const PROPVARIANT *pvarSchema,
+ [in] const PROPVARIANT *pvarId);
+
+ HRESULT RemoveValueByIndex(
+ [in] UINT nIndex);
+}
+
+[
+ object,
+ uuid(b22e3fba-3925-4323-b5c1-9ebfc430f236)
+]
+interface IWICMetadataWriterInfo : IWICMetadataHandlerInfo
+{
+ [local]
+ HRESULT GetHeader(
+ [in] REFGUID guidContainerFormat,
+ [in] UINT cbSize,
+ [out, unique] WICMetadataHeader *pHeader,
+ [out, unique] UINT *pcbActual);
+
+ HRESULT CreateInstance(
+ [out] IWICMetadataWriter **ppIWriter);
+}
+
+[
+ object,
+ uuid(feaa2a8d-b3f3-43e4-b25c-d1de990a1ae1)
+]
+interface IWICMetadataBlockReader : IUnknown
+{
+ HRESULT GetContainerFormat(
+ [out] GUID *pguidContainerFormat);
+
+ HRESULT GetCount(
+ [out] UINT *pcCount);
+
+ HRESULT GetReaderByIndex(
+ [in] UINT nIndex,
+ [out] IWICMetadataReader **ppIMetadataReader);
+
+ HRESULT GetEnumerator(
+ [out] IEnumUnknown **ppIEnumMetadata);
+}
+
+[
+ object,
+ uuid(08fb9676-b444-41e8-8dbe-6a53a542bff1)
+]
+interface IWICMetadataBlockWriter : IWICMetadataBlockReader
+{
+ HRESULT InitializeFromBlockReader(
+ [in] IWICMetadataBlockReader *pIMDBlockReader);
+
+ HRESULT GetWriterByIndex(
+ [in] UINT nIndex,
+ [out] IWICMetadataWriter **ppIMetadataWriter);
+
+ HRESULT AddWriter(
+ [in] IWICMetadataWriter *pIMetadataWriter);
+
+ HRESULT SetWriterByIndex(
+ [in] UINT nIndex,
+ [in] IWICMetadataWriter *pIMetadataWriter);
+
+ HRESULT RemoveWriterByIndex(
+ [in] UINT nIndex);
+}
+
+[
+ object,
+ uuid(00675040-6908-45f8-86a3-49c7dfd6d9ad)
+]
+interface IWICPersistStream : IPersistStream
+{
+ HRESULT LoadEx(
+ [in, unique] IStream *pIStream,
+ [in, unique] const GUID *pguidPreferredVendor,
+ [in] DWORD dwPersistOptions);
+
+ HRESULT SaveEx(
+ [in] IStream *pIStream,
+ [in] DWORD dwPersistOptions,
+ [in] BOOL fClearDirty);
+}
+
+[
+ object,
+ uuid(412d0c3a-9650-44fa-af5b-dd2a06c8e8fb)
+]
+interface IWICComponentFactory : IWICImagingFactory
+{
+ HRESULT CreateMetadataReader(
+ [in] REFGUID guidMetadataFormat,
+ [in, unique] const GUID *pguidVendor,
+ [in] DWORD dwOptions,
+ [in] IStream *pIStream,
+ [out] IWICMetadataReader **ppIReader);
+
+ HRESULT CreateMetadataReaderFromContainer(
+ [in] REFGUID guidMetadataFormat,
+ [in, unique] const GUID *pguidVendor,
+ [in] DWORD dwOptions,
+ [in] IStream *pIStream,
+ [out] IWICMetadataReader **ppIReader);
+
+ HRESULT CreateMetadataWriter(
+ [in] REFGUID guidMetadataFormat,
+ [in, unique] const GUID *pguidVendor,
+ [in] DWORD dwMetadataOptions,
+ [out] IWICMetadataWriter **ppIWriter);
+
+ HRESULT CreateMetadataWriterFromReader(
+ [in] IWICMetadataReader *pIReader,
+ [in, unique] const GUID *pguidVendor,
+ [out] IWICMetadataWriter **ppIWriter);
+
+ HRESULT CreateQueryReaderFromBlockReader(
+ [in] IWICMetadataBlockReader *pIBlockReader,
+ [out] IWICMetadataQueryReader **ppIQueryReader);
+
+ HRESULT CreateQueryWriterFromBlockWriter(
+ [in] IWICMetadataBlockWriter *pIBlockWriter,
+ [out] IWICMetadataQueryWriter **ppIQueryWriter);
+
+ HRESULT CreateEncoderPropertyBag(
+ [in, unique, size_is(cCount)] PROPBAG2 *ppropOptions,
+ [in] UINT cCount,
+ [out] IPropertyBag2 **ppIPropertyBag);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h
new file mode 100644
index 00000000..3a22c03f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincon.h
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINCON_H
+#define __WINE_WINCON_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef NOGDI
+#include <wingdi.h>
+#endif
+
+/* AttachConsole special pid value */
+#define ATTACH_PARENT_PROCESS ((DWORD) -1)
+
+/* GetConsoleDisplayMode flags */
+#define CONSOLE_FULLSCREEN 1
+#define CONSOLE_FULLSCREEN_HARDWARE 2
+
+/* SetConsoleDisplayMode flags */
+#define CONSOLE_FULLSCREEN_MODE 1
+#define CONSOLE_WINDOWED_MODE 2
+
+/* CONSOLE_SELECTION_INFO.dwFlags */
+#define CONSOLE_NO_SELECTION 0x00
+#define CONSOLE_SELECTION_IN_PROGRESS 0x01
+#define CONSOLE_SELECTION_NOT_EMPTY 0x02
+#define CONSOLE_MOUSE_SELECTION 0x04
+#define CONSOLE_MOUSE_DOWN 0x08
+
+/* handler routine control signal type */
+#define CTRL_C_EVENT 0
+#define CTRL_BREAK_EVENT 1
+#define CTRL_CLOSE_EVENT 2
+#define CTRL_LOGOFF_EVENT 5
+#define CTRL_SHUTDOWN_EVENT 6
+
+/* Console Mode flags */
+#define ENABLE_PROCESSED_INPUT 0x0001
+#define ENABLE_LINE_INPUT 0x0002
+#define ENABLE_ECHO_INPUT 0x0004
+#define ENABLE_WINDOW_INPUT 0x0008
+#define ENABLE_MOUSE_INPUT 0x0010
+#define ENABLE_INSERT_MODE 0x0020
+#define ENABLE_QUICK_EDIT_MODE 0x0040
+#define ENABLE_EXTENDED_FLAGS 0x0080
+#define ENABLE_AUTO_POSITION 0x0100
+
+#define ENABLE_PROCESSED_OUTPUT 0x01
+#define ENABLE_WRAP_AT_EOL_OUTPUT 0x02
+
+
+typedef BOOL (WINAPI *PHANDLER_ROUTINE)(DWORD dwCtrlType);
+
+/* Attributes flags: */
+
+#define FOREGROUND_BLUE 0x0001
+#define FOREGROUND_GREEN 0x0002
+#define FOREGROUND_RED 0x0004
+#define FOREGROUND_INTENSITY 0x0008
+#define BACKGROUND_BLUE 0x0010
+#define BACKGROUND_GREEN 0x0020
+#define BACKGROUND_RED 0x0040
+#define BACKGROUND_INTENSITY 0x0080
+#define COMMON_LVB_LEADING_BYTE 0x0100
+#define COMMON_LVB_TRAILING_BYTE 0x0200
+#define COMMON_LVB_GRID_HORIZONTAL 0x0400
+#define COMMON_LVB_GRID_LVERTICAL 0x0800
+#define COMMON_LVB_GRID_RVERTICAL 0x1000
+#define COMMON_LVB_REVERSE_VIDEO 0x4000
+#define COMMON_LVB_UNDERSCORE 0x8000
+
+/* CONSOLE_HISTORY_INFO.dwFlags */
+#define HISTORY_NO_DUP_FLAG 0x01
+
+typedef struct _CONSOLE_CURSOR_INFO {
+ DWORD dwSize; /* Between 1 & 100 for percentage of cell filled */
+ BOOL bVisible; /* Visibility of cursor */
+} CONSOLE_CURSOR_INFO, *LPCONSOLE_CURSOR_INFO;
+
+typedef struct tagCOORD
+{
+ SHORT X;
+ SHORT Y;
+} COORD, *LPCOORD;
+
+typedef struct tagSMALL_RECT
+{
+ SHORT Left;
+ SHORT Top;
+ SHORT Right;
+ SHORT Bottom;
+} SMALL_RECT,*LPSMALL_RECT;
+
+typedef struct _CONSOLE_FONT_INFO
+{
+ DWORD nFont;
+ COORD dwFontSize;
+} CONSOLE_FONT_INFO,*LPCONSOLE_FONT_INFO;
+
+#ifndef NOGDI
+typedef struct _CONSOLE_FONT_INFOEX
+{
+ ULONG cbSize;
+ DWORD nFont;
+ COORD dwFontSize;
+ UINT FontFamily;
+ UINT FontWeight;
+ WCHAR FaceName[LF_FACESIZE];
+} CONSOLE_FONT_INFOEX,*LPCONSOLE_FONT_INFOEX;
+#endif
+
+typedef struct tagCONSOLE_HISTORY_INFO
+{
+ UINT cbSize;
+ UINT HistoryBufferSize;
+ UINT NumberOfHistoryBuffers;
+ DWORD dwFlags;
+} CONSOLE_HISTORY_INFO,*LPCONSOLE_HISTORY_INFO;
+
+typedef struct _CONSOLE_READCONSOLE_CONTROL
+{
+ ULONG nLength;
+ ULONG nInitialChars;
+ ULONG dwCtrlWakeupMask;
+ ULONG dwConsoleKeyState;
+} CONSOLE_READCONSOLE_CONTROL,*LPCONSOLE_READCONSOLE_CONTROL;
+
+typedef struct tagCONSOLE_SCREEN_BUFFER_INFO
+{
+ COORD dwSize;
+ COORD dwCursorPosition;
+ WORD wAttributes;
+ SMALL_RECT srWindow;
+ COORD dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO,*LPCONSOLE_SCREEN_BUFFER_INFO;
+
+typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX
+{
+ ULONG cbSize;
+ COORD dwSize;
+ COORD dwCursorPosition;
+ WORD wAttributes;
+ SMALL_RECT srWindow;
+ COORD dwMaximumWindowSize;
+ WORD wPopupAttributes;
+ BOOL bFullscreenSupported;
+ COLORREF ColorTable[16];
+} CONSOLE_SCREEN_BUFFER_INFOEX,*LPCONSOLE_SCREEN_BUFFER_INFOEX;
+
+typedef struct _CONSOLE_SELECTION_INFO
+{
+ DWORD dwFlags;
+ COORD dwSelectionAnchor;
+ SMALL_RECT srSelection;
+} CONSOLE_SELECTION_INFO,*LPCONSOLE_SELECTION_INFO;
+
+typedef struct tagCHAR_INFO
+{
+ union
+ {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } Char;
+ WORD Attributes;
+} CHAR_INFO,*LPCHAR_INFO;
+
+typedef struct tagKEY_EVENT_RECORD
+{
+ BOOL bKeyDown; /* 04 */
+ WORD wRepeatCount; /* 08 */
+ WORD wVirtualKeyCode; /* 0A */
+ WORD wVirtualScanCode; /* 0C */
+ union /* 0E */
+ {
+ WCHAR UnicodeChar; /* 0E */
+ CHAR AsciiChar; /* 0E */
+ } uChar;
+ DWORD dwControlKeyState; /* 10 */
+} KEY_EVENT_RECORD,*LPKEY_EVENT_RECORD;
+
+/* dwControlKeyState bitmask */
+#define RIGHT_ALT_PRESSED 0x0001
+#define LEFT_ALT_PRESSED 0x0002
+#define RIGHT_CTRL_PRESSED 0x0004
+#define LEFT_CTRL_PRESSED 0x0008
+#define SHIFT_PRESSED 0x0010
+#define NUMLOCK_ON 0x0020
+#define SCROLLLOCK_ON 0x0040
+#define CAPSLOCK_ON 0x0080
+#define ENHANCED_KEY 0x0100
+
+typedef struct tagMOUSE_EVENT_RECORD
+{
+ COORD dwMousePosition;
+ DWORD dwButtonState;
+ DWORD dwControlKeyState;
+ DWORD dwEventFlags;
+} MOUSE_EVENT_RECORD,*LPMOUSE_EVENT_RECORD;
+
+/* MOUSE_EVENT_RECORD.dwButtonState */
+#define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
+#define RIGHTMOST_BUTTON_PRESSED 0x0002
+#define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
+#define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
+#define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
+
+/* MOUSE_EVENT_RECORD.dwEventFlags */
+#define MOUSE_MOVED 0x0001
+#define DOUBLE_CLICK 0x0002
+#define MOUSE_WHEELED 0x0004
+#define MOUSE_HWHEELED 0x0008
+
+typedef struct tagWINDOW_BUFFER_SIZE_RECORD
+{
+ COORD dwSize;
+} WINDOW_BUFFER_SIZE_RECORD,*LPWINDOW_BUFFER_SIZE_RECORD;
+
+typedef struct tagMENU_EVENT_RECORD
+{
+ UINT dwCommandId; /* perhaps UINT16 ??? */
+} MENU_EVENT_RECORD,*LPMENU_EVENT_RECORD;
+
+typedef struct tagFOCUS_EVENT_RECORD
+{
+ BOOL bSetFocus; /* perhaps BOOL16 ??? */
+} FOCUS_EVENT_RECORD,*LPFOCUS_EVENT_RECORD;
+
+typedef struct tagINPUT_RECORD
+{
+ WORD EventType; /* 00 */
+ union
+ {
+ KEY_EVENT_RECORD KeyEvent;
+ MOUSE_EVENT_RECORD MouseEvent;
+ WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+ MENU_EVENT_RECORD MenuEvent;
+ FOCUS_EVENT_RECORD FocusEvent;
+ } Event;
+} INPUT_RECORD,*PINPUT_RECORD;
+
+/* INPUT_RECORD.wEventType */
+#define KEY_EVENT 0x01
+#define MOUSE_EVENT 0x02
+#define WINDOW_BUFFER_SIZE_EVENT 0x04
+#define MENU_EVENT 0x08
+#define FOCUS_EVENT 0x10
+
+#define CONSOLE_TEXTMODE_BUFFER 1
+
+#ifdef __i386__
+/* Note: this should return a COORD, but calling convention for returning
+ * structures is different between Windows and gcc on i386. */
+
+WINBASEAPI DWORD WINAPI GetConsoleFontSize(HANDLE, DWORD);
+WINBASEAPI DWORD WINAPI GetLargestConsoleWindowSize(HANDLE);
+
+static inline COORD __wine_GetConsoleFontSize_wrapper(HANDLE h, DWORD d)
+{
+ union {
+ COORD c;
+ DWORD dw;
+ } u;
+ u.dw = GetConsoleFontSize(h, d);
+ return u.c;
+}
+#define GetConsoleFontSize(h, d) __wine_GetConsoleFontSize_wrapper(h, d)
+
+static inline COORD __wine_GetLargestConsoleWindowSize_wrapper(HANDLE h)
+{
+ union {
+ COORD c;
+ DWORD dw;
+ } u;
+ u.dw = GetLargestConsoleWindowSize(h);
+ return u.c;
+}
+#define GetLargestConsoleWindowSize(h) __wine_GetLargestConsoleWindowSize_wrapper(h)
+
+#else /* __i386__ */
+WINBASEAPI COORD WINAPI GetConsoleFontSize(HANDLE, DWORD);
+WINBASEAPI COORD WINAPI GetLargestConsoleWindowSize(HANDLE);
+#endif /* __i386__ */
+
+WINBASEAPI BOOL WINAPI AddConsoleAliasA(LPSTR,LPSTR,LPSTR);
+WINBASEAPI BOOL WINAPI AddConsoleAliasW(LPWSTR,LPWSTR,LPWSTR);
+#define AddConsoleAlias WINELIB_NAME_AW(AddConsoleAlias)
+WINBASEAPI BOOL WINAPI AllocConsole(VOID);
+WINBASEAPI BOOL WINAPI AttachConsole(DWORD);
+WINBASEAPI HANDLE WINAPI CreateConsoleScreenBuffer( DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,LPVOID);
+WINBASEAPI BOOL WINAPI FillConsoleOutputAttribute( HANDLE,WORD,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI FillConsoleOutputCharacterA(HANDLE,CHAR,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI FillConsoleOutputCharacterW(HANDLE,WCHAR,DWORD,COORD,LPDWORD);
+#define FillConsoleOutputCharacter WINELIB_NAME_AW(FillConsoleOutputCharacter)
+WINBASEAPI BOOL WINAPI FlushConsoleInputBuffer( HANDLE);
+WINBASEAPI BOOL WINAPI FreeConsole(VOID);
+WINBASEAPI BOOL WINAPI GenerateConsoleCtrlEvent( DWORD,DWORD);
+WINBASEAPI DWORD WINAPI GetConsoleAliasA(LPSTR,LPSTR,DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetConsoleAliasW(LPWSTR,LPWSTR,DWORD,LPWSTR);
+#define GetConsoleAlias WINELIB_NAME_AW(GetConsoleAlias)
+WINBASEAPI DWORD WINAPI GetConsoleAliasesA(LPSTR,DWORD,LPSTR);
+WINBASEAPI DWORD WINAPI GetConsoleAliasesW(LPWSTR,DWORD,LPWSTR);
+#define GetConsoleAliases WINELIB_NAME_AW(GetConsoleAliases)
+WINBASEAPI DWORD WINAPI GetConsoleAliasesLengthA(LPSTR);
+WINBASEAPI DWORD WINAPI GetConsoleAliasesLengthW(LPWSTR);
+#define GetConsoleAliasesLength WINELIB_NAME_AW(GetConsoleAliasesLength)
+WINBASEAPI DWORD WINAPI GetConsoleAliasExesA(LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetConsoleAliasExesW(LPWSTR,DWORD);
+#define GetConsoleAliasExes WINELIB_NAME_AW(GetConsoleAliasExes)
+WINBASEAPI DWORD WINAPI GetConsoleAliasExesLengthA(VOID);
+WINBASEAPI DWORD WINAPI GetConsoleAliasExesLengthW(VOID);
+#define GetConsoleAliasExesLength WINELIB_NAME_AW(GetConsoleAliasExesLength)
+WINBASEAPI UINT WINAPI GetConsoleCP(VOID);
+WINBASEAPI BOOL WINAPI GetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO);
+WINBASEAPI BOOL WINAPI GetConsoleDisplayMode(LPDWORD);
+WINBASEAPI BOOL WINAPI GetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO);
+WINBASEAPI BOOL WINAPI GetConsoleInputExeNameA(DWORD,LPSTR);
+WINBASEAPI BOOL WINAPI GetConsoleInputExeNameW(DWORD,LPWSTR);
+#define GetConsoleInputExeName WINELIB_NAME_AW(GetConsoleInputExeName)
+WINBASEAPI BOOL WINAPI GetConsoleMode( HANDLE,LPDWORD);
+WINBASEAPI DWORD WINAPI GetConsoleOriginalTitleA(LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetConsoleOriginalTitleW(LPWSTR,DWORD);
+#define GetConsoleOriginalTitle WINELIB_NAME_AW(GetConsoleOriginalTitle)
+WINBASEAPI UINT WINAPI GetConsoleOutputCP(VOID);
+WINBASEAPI DWORD WINAPI GetConsoleProcessList(LPDWORD,DWORD);
+WINBASEAPI BOOL WINAPI GetConsoleScreenBufferInfo(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFO);
+WINBASEAPI BOOL WINAPI GetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX);
+WINBASEAPI DWORD WINAPI GetConsoleTitleA(LPSTR,DWORD);
+WINBASEAPI DWORD WINAPI GetConsoleTitleW(LPWSTR,DWORD);
+#define GetConsoleTitle WINELIB_NAME_AW(GetConsoleTitle)
+WINBASEAPI HWND WINAPI GetConsoleWindow(void);
+WINBASEAPI BOOL WINAPI GetCurrentConsoleFont(HANDLE,BOOL,LPCONSOLE_FONT_INFO);
+WINBASEAPI BOOL WINAPI GetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX);
+WINBASEAPI BOOL WINAPI GetNumberOfConsoleInputEvents( HANDLE,LPDWORD);
+WINBASEAPI BOOL WINAPI GetNumberOfConsoleMouseButtons(LPDWORD);
+WINBASEAPI BOOL WINAPI PeekConsoleInputA( HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI PeekConsoleInputW( HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+#define PeekConsoleInput WINELIB_NAME_AW(PeekConsoleInput)
+WINBASEAPI BOOL WINAPI ReadConsoleA(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);
+WINBASEAPI BOOL WINAPI ReadConsoleW(HANDLE,LPVOID,DWORD,LPDWORD,LPVOID);
+#define ReadConsole WINELIB_NAME_AW(ReadConsole)
+WINBASEAPI BOOL WINAPI ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,LPDWORD);
+#define ReadConsoleInput WINELIB_NAME_AW(ReadConsoleInput)
+WINBASEAPI BOOL WINAPI ReadConsoleOutputA( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT);
+WINBASEAPI BOOL WINAPI ReadConsoleOutputW( HANDLE,LPCHAR_INFO,COORD,COORD,LPSMALL_RECT);
+#define ReadConsoleOutput WINELIB_NAME_AW(ReadConsoleOutput)
+WINBASEAPI BOOL WINAPI ReadConsoleOutputAttribute( HANDLE,LPWORD,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI ReadConsoleOutputCharacterA(HANDLE,LPSTR,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI ReadConsoleOutputCharacterW(HANDLE,LPWSTR,DWORD,COORD,LPDWORD);
+#define ReadConsoleOutputCharacter WINELIB_NAME_AW(ReadConsoleOutputCharacter)
+WINBASEAPI BOOL WINAPI ScrollConsoleScreenBufferA( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO);
+WINBASEAPI BOOL WINAPI ScrollConsoleScreenBufferW( HANDLE,LPSMALL_RECT,LPSMALL_RECT,COORD,LPCHAR_INFO);
+#define ScrollConsoleScreenBuffer WINELIB_NAME_AW(ScrollConsoleScreenBuffer)
+WINBASEAPI BOOL WINAPI SetConsoleActiveScreenBuffer( HANDLE);
+WINBASEAPI BOOL WINAPI SetConsoleCP(UINT);
+WINBASEAPI BOOL WINAPI SetConsoleCtrlHandler( PHANDLER_ROUTINE,BOOL);
+WINBASEAPI BOOL WINAPI SetConsoleCursorInfo( HANDLE,LPCONSOLE_CURSOR_INFO);
+WINBASEAPI BOOL WINAPI SetConsoleCursorPosition(HANDLE,COORD);
+WINBASEAPI BOOL WINAPI SetConsoleDisplayMode(HANDLE,DWORD,LPCOORD);
+WINBASEAPI BOOL WINAPI SetConsoleHistoryInfo(LPCONSOLE_HISTORY_INFO);
+WINBASEAPI BOOL WINAPI SetConsoleMode( HANDLE,DWORD);
+WINBASEAPI BOOL WINAPI SetConsoleOutputCP(UINT);
+WINBASEAPI BOOL WINAPI SetConsoleScreenBufferInfoEx(HANDLE,LPCONSOLE_SCREEN_BUFFER_INFOEX);
+WINBASEAPI BOOL WINAPI SetConsoleScreenBufferSize(HANDLE,COORD);
+WINBASEAPI BOOL WINAPI SetConsoleTextAttribute( HANDLE,WORD);
+WINBASEAPI BOOL WINAPI SetConsoleTitleA(LPCSTR);
+WINBASEAPI BOOL WINAPI SetConsoleTitleW(LPCWSTR);
+#define SetConsoleTitle WINELIB_NAME_AW(SetConsoleTitle)
+WINBASEAPI BOOL WINAPI SetConsoleWindowInfo( HANDLE,BOOL,LPSMALL_RECT);
+WINBASEAPI BOOL WINAPI SetCurrentConsoleFontEx(HANDLE,BOOL,LPCONSOLE_FONT_INFOEX);
+WINBASEAPI BOOL WINAPI WriteConsoleA(HANDLE,const void *,DWORD,LPDWORD,void *);
+WINBASEAPI BOOL WINAPI WriteConsoleW(HANDLE,const void *,DWORD,LPDWORD,void *);
+#define WriteConsole WINELIB_NAME_AW(WriteConsole)
+WINBASEAPI BOOL WINAPI WriteConsoleInputA(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD);
+WINBASEAPI BOOL WINAPI WriteConsoleInputW(HANDLE,const INPUT_RECORD *,DWORD,LPDWORD);
+#define WriteConsoleInput WINELIB_NAME_AW(WriteConsoleInput)
+WINBASEAPI BOOL WINAPI WriteConsoleOutputA(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT);
+WINBASEAPI BOOL WINAPI WriteConsoleOutputW(HANDLE,const CHAR_INFO*,COORD,COORD,LPSMALL_RECT);
+#define WriteConsoleOutput WINELIB_NAME_AW(WriteConsoleOutput)
+WINBASEAPI BOOL WINAPI WriteConsoleOutputAttribute(HANDLE,const WORD *,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI WriteConsoleOutputCharacterA(HANDLE,LPCSTR,DWORD,COORD,LPDWORD);
+WINBASEAPI BOOL WINAPI WriteConsoleOutputCharacterW(HANDLE,LPCWSTR,DWORD,COORD,LPDWORD);
+#define WriteConsoleOutputCharacter WINELIB_NAME_AW(WriteConsoleOutputCharacter)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINCON_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h
new file mode 100644
index 00000000..16798c6f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincred.h
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2006 Robert Shearman (for CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINCRED_H_
+#define _WINCRED_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _ADVAPI32_
+#define WINADVAPI
+#else
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+#ifndef __SECHANDLE_DEFINED__
+#define __SECHANDLE_DEFINED__
+typedef struct _SecHandle
+{
+ ULONG_PTR dwLower;
+ ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+#endif
+
+#ifndef __WINE_CTXTHANDLE_DEFINED__
+#define __WINE_CTXTHANDLE_DEFINED__
+typedef SecHandle CtxtHandle;
+typedef PSecHandle PCtxtHandle;
+#endif
+
+typedef struct _CREDENTIAL_ATTRIBUTEA
+{
+ LPSTR Keyword;
+ DWORD Flags;
+ DWORD ValueSize;
+ LPBYTE Value;
+} CREDENTIAL_ATTRIBUTEA, *PCREDENTIAL_ATTRIBUTEA;
+
+typedef struct _CREDENTIAL_ATTRIBUTEW
+{
+ LPWSTR Keyword;
+ DWORD Flags;
+ DWORD ValueSize;
+ LPBYTE Value;
+} CREDENTIAL_ATTRIBUTEW, *PCREDENTIAL_ATTRIBUTEW;
+
+DECL_WINELIB_TYPE_AW(CREDENTIAL_ATTRIBUTE)
+DECL_WINELIB_TYPE_AW(PCREDENTIAL_ATTRIBUTE)
+
+typedef struct _CREDENTIALA
+{
+ DWORD Flags;
+ DWORD Type;
+ LPSTR TargetName;
+ LPSTR Comment;
+ FILETIME LastWritten;
+ DWORD CredentialBlobSize;
+ LPBYTE CredentialBlob;
+ DWORD Persist;
+ DWORD AttributeCount;
+ PCREDENTIAL_ATTRIBUTEA Attributes;
+ LPSTR TargetAlias;
+ LPSTR UserName;
+} CREDENTIALA, *PCREDENTIALA;
+
+typedef struct _CREDENTIALW
+{
+ DWORD Flags;
+ DWORD Type;
+ LPWSTR TargetName;
+ LPWSTR Comment;
+ FILETIME LastWritten;
+ DWORD CredentialBlobSize;
+ LPBYTE CredentialBlob;
+ DWORD Persist;
+ DWORD AttributeCount;
+ PCREDENTIAL_ATTRIBUTEW Attributes;
+ LPWSTR TargetAlias;
+ LPWSTR UserName;
+} CREDENTIALW, *PCREDENTIALW;
+
+DECL_WINELIB_TYPE_AW(CREDENTIAL)
+DECL_WINELIB_TYPE_AW(PCREDENTIAL)
+
+typedef struct _CREDENTIAL_TARGET_INFORMATIONA
+{
+ LPSTR TargetName;
+ LPSTR NetbiosServerName;
+ LPSTR DnsServerName;
+ LPSTR NetbiosDomainName;
+ LPSTR DnsDomainName;
+ LPSTR DnsTreeName;
+ LPSTR PackageName;
+ DWORD Flags;
+ DWORD CredTypeCount;
+ LPDWORD CredTypes;
+} CREDENTIAL_TARGET_INFORMATIONA, *PCREDENTIAL_TARGET_INFORMATIONA;
+
+typedef struct _CREDENTIAL_TARGET_INFORMATIONW
+{
+ LPWSTR TargetName;
+ LPWSTR NetbiosServerName;
+ LPWSTR DnsServerName;
+ LPWSTR NetbiosDomainName;
+ LPWSTR DnsDomainName;
+ LPWSTR DnsTreeName;
+ LPWSTR PackageName;
+ DWORD Flags;
+ DWORD CredTypeCount;
+ LPDWORD CredTypes;
+} CREDENTIAL_TARGET_INFORMATIONW, *PCREDENTIAL_TARGET_INFORMATIONW;
+
+DECL_WINELIB_TYPE_AW(CREDENTIAL_TARGET_INFORMATION)
+DECL_WINELIB_TYPE_AW(PCREDENTIAL_TARGET_INFORMATION)
+
+typedef struct _CREDUI_INFOA
+{
+ DWORD cbSize;
+ HWND hwndParent;
+ PCSTR pszMessageText;
+ PCSTR pszCaptionText;
+ HBITMAP hbmBanner;
+} CREDUI_INFOA, *PCREDUI_INFOA;
+
+typedef struct _CREDUI_INFOW
+{
+ DWORD cbSize;
+ HWND hwndParent;
+ PCWSTR pszMessageText;
+ PCWSTR pszCaptionText;
+ HBITMAP hbmBanner;
+} CREDUI_INFOW, *PCREDUI_INFOW;
+
+DECL_WINELIB_TYPE_AW(CREDUI_INFO)
+DECL_WINELIB_TYPE_AW(PCREDUI_INFO)
+
+typedef enum _CRED_MARSHAL_TYPE
+{
+ CertCredential = 1,
+ UsernameTargetCredential,
+ BinaryBlobCredential
+} CRED_MARSHAL_TYPE, *PCRED_MARSHAL_TYPE;
+
+#define CERT_HASH_LENGTH 20
+
+typedef struct _CERT_CREDENTIAL_INFO
+{
+ ULONG cbSize;
+ UCHAR rgbHashOfCert[CERT_HASH_LENGTH];
+} CERT_CREDENTIAL_INFO, *PCERT_CREDENTIAL_INFO;
+
+typedef struct _USERNAME_TARGET_CREDENTIAL_INFO
+{
+ LPWSTR UserName;
+} USERNAME_TARGET_CREDENTIAL_INFO;
+
+typedef struct _BINARY_BLOB_CREDENTIAL_INFO
+{
+ ULONG cbBlob;
+ LPBYTE pbBlob;
+} BINARY_BLOB_CREDENTIAL_INFO, *PBINARY_BLOB_CREDENTIAL_INFO;
+
+#define CRED_MAX_STRING_LENGTH 256
+#define CRED_MAX_USERNAME_LENGTH 513
+#define CRED_MAX_GENERIC_TARGET_NAME_LENGTH 32767
+#define CRED_MAX_DOMAIN_TARGET_NAME_LENGTH 337
+#define CRED_MAX_VALUE_SIZE 256
+#define CRED_MAX_ATTRIBUTES 64
+
+#define CRED_MAX_BLOB_SIZE 512
+
+#define CREDUI_MAX_MESSAGE_LENGTH 32767
+#define CREDUI_MAX_CAPTION_LENGTH 128
+#define CREDUI_MAX_GENERIC_TARGET_LENGTH CRED_MAX_GENERIC_TARGET_NAME_LENGTH
+#define CREDUI_MAX_DOMAIN_TARGET_LENGTH CRED_MAX_DOMAIN_TARGET_LENGTH
+#define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH
+#define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2)
+
+/* flags for CREDENTIAL::Flags */
+#define CRED_FLAGS_PASSWORD_FOR_CERT 0x0001
+#define CRED_FLAGS_PROMPT_NOW 0x0002
+#define CRED_FLAGS_USERNAME_TARGET 0x0004
+#define CRED_FLAGS_OWF_CRED_BLOB 0x0008
+#define CRED_FLAGS_VALID_FLAGS 0x000f
+
+/* values for CREDENTIAL::Type */
+#define CRED_TYPE_GENERIC 1
+#define CRED_TYPE_DOMAIN_PASSWORD 2
+#define CRED_TYPE_DOMAIN_CERTIFICATE 3
+#define CRED_TYPE_DOMAIN_VISIBLE_PASSWORD 4
+#define CRED_TYPE_GENERIC_CERTIFICATE 5
+#define CRED_TYPE_MAXIMUM 6
+#define CRED_TYPE_MAXIMUM_EX (CRED_TYPE_MAXIMUM+1000)
+
+/* values for CREDENTIAL::Persist */
+#define CRED_PERSIST_NONE 0
+#define CRED_PERSIST_SESSION 1
+#define CRED_PERSIST_LOCAL_MACHINE 2
+#define CRED_PERSIST_ENTERPRISE 3
+
+/* values for CREDENTIAL_TARGET_INFORMATION::Flags */
+#define CRED_TI_SERVER_FORMAT_UNKNOWN 1
+#define CRED_TI_DOMAIN_FORMAT_UNKNOWN 2
+#define CRED_TI_ONLY_PASSWORD_REQUIRED 4
+
+#define CREDUI_FLAGS_INCORRECT_PASSWORD 0x00000001
+#define CREDUI_FLAGS_DO_NOT_PERSIST 0x00000002
+#define CREDUI_FLAGS_REQUEST_ADMINISTRATOR 0x00000004
+#define CREDUI_FLAGS_EXCLUDE_CERTIFICATES 0x00000008
+#define CREDUI_FLAGS_REQUIRE_CERTIFICATE 0x00000010
+#define CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX 0x00000040
+#define CREDUI_FLAGS_ALWAYS_SHOW_UI 0x00000080
+#define CREDUI_FLAGS_REQUIRE_SMARTCARD 0x00000100
+#define CREDUI_FLAGS_PASSWORD_ONLY_OK 0x00000200
+#define CREDUI_FLAGS_VALIDATE_USERNAME 0x00000400
+#define CREDUI_FLAGS_COMPLETE_USERNAME 0x00000800
+#define CREDUI_FLAGS_PERSIST 0x00001000
+#define CREDUI_FLAGS_SERVER_CREDENTIAL 0x00004000
+#define CREDUI_FLAGS_EXPECT_CONFIRMATION 0x00020000
+#define CREDUI_FLAGS_GENERIC_CREDENTIALS 0x00040000
+#define CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS 0x00080000
+#define CREDUI_FLAGS_KEEP_USERNAME 0x00100000
+
+/* flags for CredWrite and CredWriteDomainCredentials */
+#define CRED_PRESERVE_CREDENTIAL_BLOB 0x00000001
+
+WINADVAPI BOOL WINAPI CredDeleteA(LPCSTR,DWORD,DWORD);
+WINADVAPI BOOL WINAPI CredDeleteW(LPCWSTR,DWORD,DWORD);
+#define CredDelete WINELIB_NAME_AW(CredDelete)
+WINADVAPI BOOL WINAPI CredEnumerateA(LPCSTR,DWORD,DWORD *,PCREDENTIALA **);
+WINADVAPI BOOL WINAPI CredEnumerateW(LPCWSTR,DWORD,DWORD *,PCREDENTIALW **);
+#define CredEnumerate WINELIB_NAME_AW(CredEnumerate)
+WINADVAPI VOID WINAPI CredFree(PVOID);
+WINADVAPI BOOL WINAPI CredGetSessionTypes(DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI CredIsMarshaledCredentialA(LPCSTR);
+WINADVAPI BOOL WINAPI CredIsMarshaledCredentialW(LPCWSTR);
+#define CredIsMarshaledCredential WINELIB_NAME_AW(CredIsMarshaledCredential)
+WINADVAPI BOOL WINAPI CredMarshalCredentialA(CRED_MARSHAL_TYPE,PVOID,LPSTR *);
+WINADVAPI BOOL WINAPI CredMarshalCredentialW(CRED_MARSHAL_TYPE,PVOID,LPWSTR *);
+#define CredMarshalCredential WINELIB_NAME_AW(CredMarshalCredential)
+WINADVAPI BOOL WINAPI CredReadA(LPCSTR,DWORD,DWORD,PCREDENTIALA *);
+WINADVAPI BOOL WINAPI CredReadW(LPCWSTR,DWORD,DWORD,PCREDENTIALW *);
+#define CredRead WINELIB_NAME_AW(CredRead)
+WINADVAPI BOOL WINAPI CredReadDomainCredentialsA(PCREDENTIAL_TARGET_INFORMATIONA,DWORD,DWORD *,PCREDENTIALA **);
+WINADVAPI BOOL WINAPI CredReadDomainCredentialsW(PCREDENTIAL_TARGET_INFORMATIONW,DWORD,DWORD *,PCREDENTIALW **);
+#define CredReadDomainCredentials WINELIB_NAME_AW(CredReadDomainCredentials)
+WINADVAPI BOOL WINAPI CredRenameA(LPCSTR,LPCSTR,DWORD,DWORD);
+WINADVAPI BOOL WINAPI CredRenameW(LPCWSTR,LPCWSTR,DWORD,DWORD);
+#define CredRename WINELIB_NAME_AW(CredRename)
+WINADVAPI BOOL WINAPI CredUnmarshalCredentialA(LPCSTR,PCRED_MARSHAL_TYPE,PVOID *);
+WINADVAPI BOOL WINAPI CredUnmarshalCredentialW(LPCWSTR,PCRED_MARSHAL_TYPE,PVOID *);
+#define CredUnmarshalCredential WINELIB_NAME_AW(CredUnmarshalCredential)
+WINADVAPI BOOL WINAPI CredWriteA(PCREDENTIALA,DWORD);
+WINADVAPI BOOL WINAPI CredWriteW(PCREDENTIALW,DWORD);
+#define CredWrite WINELIB_NAME_AW(CredWrite)
+
+DWORD WINAPI CredUICmdLinePromptForCredentialsW(PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD);
+DWORD WINAPI CredUICmdLinePromptForCredentialsA(PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD);
+#define CredUICmdLinePromptForCredentials WINELIB_NAME_AW(CredUICmdLinePromptForCredentials)
+DWORD WINAPI CredUIConfirmCredentialsW(PCWSTR,BOOL);
+DWORD WINAPI CredUIConfirmCredentialsA(PCSTR,BOOL);
+#define CredUIConfirmCredentials WINELIB_NAME_AW(CredUIConfirmCredentials)
+DWORD WINAPI CredUIParseUserNameW(PCWSTR,PWSTR,ULONG,PWSTR,ULONG);
+DWORD WINAPI CredUIParseUserNameA(PCSTR,PSTR,ULONG,PSTR,ULONG);
+#define CredUIParseUserName WINELIB_NAME_AW(CredUIParseUserName)
+DWORD WINAPI CredUIPromptForCredentialsW(PCREDUI_INFOW,PCWSTR,PCtxtHandle,DWORD,PWSTR,ULONG,PWSTR,ULONG,PBOOL,DWORD);
+DWORD WINAPI CredUIPromptForCredentialsA(PCREDUI_INFOA,PCSTR,PCtxtHandle,DWORD,PSTR,ULONG,PSTR,ULONG,PBOOL,DWORD);
+#define CredUIPromptForCredentials WINELIB_NAME_AW(CredUIPromptForCredentials)
+DWORD WINAPI CredUIStoreSSOCredW(PCWSTR,PCWSTR,PCWSTR,BOOL);
+/* Note: no CredUIStoreSSOCredA in PSDK header */
+DWORD WINAPI CredUIReadSSOCredW(PCWSTR,PWSTR*);
+/* Note: no CredUIReadSSOCredA in PSDK header */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINCRED_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h
new file mode 100644
index 00000000..91f37584
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wincrypt.h
@@ -0,0 +1,4589 @@
+/*
+ * Copyright (C) 2002 Travis Michielsen
+ * Copyright (C) 2004-2005 Juan Lang
+ * Copyright (C) 2007 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINCRYPT_H
+#define __WINE_WINCRYPT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <bcrypt.h>
+/* FIXME: #include <ncrypt.h> */
+
+#ifdef _ADVAPI32_
+# define WINADVAPI
+#else
+# define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+/* some typedefs for function parameters */
+typedef unsigned int ALG_ID;
+typedef ULONG_PTR HCRYPTPROV;
+typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;
+typedef ULONG_PTR HCRYPTPROV_LEGACY;
+typedef ULONG_PTR HCRYPTKEY;
+typedef ULONG_PTR HCRYPTHASH;
+typedef void *HCERTSTORE;
+typedef void *HCRYPTMSG;
+typedef void *HCERTSTOREPROV;
+typedef void *HCRYPTOIDFUNCSET;
+typedef void *HCRYPTOIDFUNCADDR;
+typedef void *HCRYPTDEFAULTCONTEXT;
+
+/* CSP Structs */
+
+typedef struct _PROV_ENUMALGS {
+ ALG_ID aiAlgid;
+ DWORD dwBitLen;
+ DWORD dwNameLen;
+ CHAR szName[20];
+} PROV_ENUMALGS;
+
+typedef struct _PROV_ENUMALGS_EX {
+ ALG_ID aiAlgid;
+ DWORD dwDefaultLen;
+ DWORD dwMinLen;
+ DWORD dwMaxLen;
+ DWORD dwProtocols;
+ DWORD dwNameLen;
+ CHAR szName[20];
+ DWORD dwLongNameLen;
+ CHAR szLongName[40];
+} PROV_ENUMALGS_EX;
+
+#define SCHANNEL_MAC_KEY 0
+#define SCHANNEL_ENC_KEY 1
+
+typedef struct _SCHANNEL_ALG {
+ DWORD dwUse;
+ ALG_ID Algid;
+ DWORD cBits;
+ DWORD dwFlags;
+ DWORD dwReserved;
+} SCHANNEL_ALG, *PSCHANNEL_ALG;
+
+
+#define CRYPT_IPSEC_HMAC_KEY 0x0100
+
+typedef struct _HMAC_INFO {
+ ALG_ID HashAlgid;
+ BYTE* pbInnerString;
+ DWORD cbInnerString;
+ BYTE* pbOuterString;
+ DWORD cbOuterString;
+} HMAC_INFO, *PHMAC_INFO;
+
+typedef struct _CRYPTOAPI_BLOB {
+ DWORD cbData;
+ BYTE* pbData;
+} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
+ CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
+ CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
+ CERT_NAME_BLOB, *PCERT_NAME_BLOB,
+ CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
+ CERT_BLOB, *PCERT_BLOB,
+ CRL_BLOB, *PCRL_BLOB,
+ DATA_BLOB, *PDATA_BLOB,
+ CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
+ CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
+ CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
+ CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
+ CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
+
+typedef struct _CRYPTPROTECT_PROMPTSTRUCT{
+ DWORD cbSize;
+ DWORD dwPromptFlags;
+ HWND hwndApp;
+ LPCWSTR szPrompt;
+} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT;
+
+typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Parameters;
+} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
+
+typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Value;
+} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
+
+typedef struct _PUBLICKEYSTRUC {
+ BYTE bType;
+ BYTE bVersion;
+ WORD reserved;
+ ALG_ID aiKeyAlg;
+} BLOBHEADER, PUBLICKEYSTRUC;
+
+typedef struct _RSAPUBKEY {
+ DWORD magic;
+ DWORD bitlen;
+ DWORD pubexp;
+} RSAPUBKEY;
+
+typedef struct _PUBKEY {
+ DWORD magic;
+ DWORD bitlen;
+} DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;
+
+typedef struct _DSSSEED {
+ DWORD counter;
+ BYTE seed[20];
+} DSSSEED;
+
+typedef struct _PUBKEYVER3 {
+ DWORD magic;
+ DWORD bitlenP;
+ DWORD bitlenQ;
+ DWORD bitlenJ;
+ DSSSEED DSSSeed;
+} DHPUBKEY_VER3, DSSPUBKEY_VER3;
+
+typedef struct _PRIVKEYVER3 {
+ DWORD magic;
+ DWORD bitlenP;
+ DWORD bitlenQ;
+ DWORD bitlenJ;
+ DWORD bitlenX;
+ DSSSEED DSSSeed;
+} DHPRIVKEY_VER3, DSSPRIVKEY_VER3;
+
+typedef struct _KEY_TYPE_SUBTYPE {
+ DWORD dwKeySpec;
+ GUID Type;
+ GUID SubType;
+} KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;
+
+typedef struct _CERT_FORTEZZA_DATA_PROP {
+ unsigned char SerialNumber[8];
+ int CertIndex;
+ unsigned char CertLabel[36];
+} CERT_FORTEZZA_DATA_PROP;
+
+typedef struct _CMS_DH_KEY_INFO {
+ DWORD dwVersion;
+ ALG_ID Algid;
+ LPSTR pszContentEncObjId;
+ CRYPT_DATA_BLOB PubInfo;
+ void *pReserved;
+} CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;
+
+typedef struct _CRYPT_BIT_BLOB {
+ DWORD cbData;
+ BYTE *pbData;
+ DWORD cUnusedBits;
+} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
+
+typedef struct _CRYPT_KEY_PROV_PARAM {
+ DWORD dwParam;
+ BYTE *pbData;
+ DWORD cbData;
+ DWORD dwFlags;
+} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM;
+
+typedef struct _CRYPT_KEY_PROV_INFO {
+ LPWSTR pwszContainerName;
+ LPWSTR pwszProvName;
+ DWORD dwProvType;
+ DWORD dwFlags;
+ DWORD cProvParam;
+ PCRYPT_KEY_PROV_PARAM rgProvParam;
+ DWORD dwKeySpec;
+} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
+
+typedef struct _CERT_KEY_CONTEXT {
+ DWORD cbSize;
+ HCRYPTPROV hCryptProv;
+ DWORD dwKeySpec;
+} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT;
+
+typedef struct _CERT_PUBLIC_KEY_INFO {
+ CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+ CRYPT_BIT_BLOB PublicKey;
+} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO;
+
+typedef struct _CERT_EXTENSION {
+ LPSTR pszObjId;
+ BOOL fCritical;
+ CRYPT_OBJID_BLOB Value;
+} CERT_EXTENSION, *PCERT_EXTENSION;
+
+typedef struct _CERT_EXTENSIONS {
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
+
+typedef struct _CERT_INFO {
+ DWORD dwVersion;
+ CRYPT_INTEGER_BLOB SerialNumber;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CERT_NAME_BLOB Issuer;
+ FILETIME NotBefore;
+ FILETIME NotAfter;
+ CERT_NAME_BLOB Subject;
+ CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+ CRYPT_BIT_BLOB IssuerUniqueId;
+ CRYPT_BIT_BLOB SubjectUniqueId;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CERT_INFO, *PCERT_INFO;
+
+typedef struct _CERT_RDN_ATTR {
+ LPSTR pszObjId;
+ DWORD dwValueType;
+ CERT_RDN_VALUE_BLOB Value;
+} CERT_RDN_ATTR, *PCERT_RDN_ATTR;
+
+typedef struct _CERT_RDN {
+ DWORD cRDNAttr;
+ PCERT_RDN_ATTR rgRDNAttr;
+} CERT_RDN, *PCERT_RDN;
+
+typedef struct _CERT_NAME_INFO {
+ DWORD cRDN;
+ PCERT_RDN rgRDN;
+} CERT_NAME_INFO, *PCERT_NAME_INFO;
+
+typedef struct _CERT_NAME_VALUE {
+ DWORD dwValueType;
+ CERT_RDN_VALUE_BLOB Value;
+} CERT_NAME_VALUE, *PCERT_NAME_VALUE;
+
+typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO {
+ CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm;
+ CRYPT_DATA_BLOB EncryptedPrivateKey;
+} CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO;
+
+typedef struct _CERT_AUTHORITY_KEY_ID_INFO {
+ CRYPT_DATA_BLOB KeyId;
+ CERT_NAME_BLOB CertIssuer;
+ CRYPT_INTEGER_BLOB CertSerialNumber;
+} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO;
+
+typedef struct _CERT_PRIVATE_KEY_VALIDITY {
+ FILETIME NotBefore;
+ FILETIME NotAfter;
+} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;
+
+typedef struct _CERT_KEY_ATTRIBUTES_INFO {
+ CRYPT_DATA_BLOB KeyId;
+ CRYPT_BIT_BLOB IntendedKeyUsage;
+ PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod;
+} CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO;
+
+/* byte 0 */
+#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80
+#define CERT_NON_REPUDIATION_KEY_USAGE 0x40
+#define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20
+#define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10
+#define CERT_KEY_AGREEMENT_KEY_USAGE 0x08
+#define CERT_KEY_CERT_SIGN_KEY_USAGE 0x04
+#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x02
+#define CERT_CRL_SIGN_KEY_USAGE 0x02
+#define CERT_ENCIPHER_ONLY_KEY_USAGE 0x01
+/* byte 1 */
+#define CERT_DECIPHER_ONLY_KEY_USAGE 0x80
+
+typedef struct _CERT_POLICY_ID {
+ DWORD cCertPolicyElementId;
+ LPSTR *rgbszCertPolicyElementId;
+} CERT_POLICY_ID, *PCERT_POLICY_ID;
+
+typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO {
+ DWORD cCertPolicyId;
+ PCERT_POLICY_ID rgCertPolicyId;
+ CRYPT_BIT_BLOB RestrictedKeyUsage;
+} CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO;
+
+typedef struct _CERT_OTHER_NAME {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Value;
+} CERT_OTHER_NAME, *PCERT_OTHER_NAME;
+
+typedef struct _CERT_ALT_NAME_ENTRY {
+ DWORD dwAltNameChoice;
+ union {
+ PCERT_OTHER_NAME pOtherName;
+ LPWSTR pwszRfc822Name;
+ LPWSTR pwszDNSName;
+ CERT_NAME_BLOB DirectoryName;
+ LPWSTR pwszURL;
+ CRYPT_DATA_BLOB IPAddress;
+ LPSTR pszRegisteredID;
+ } DUMMYUNIONNAME;
+} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY;
+
+#define CERT_ALT_NAME_OTHER_NAME 1
+#define CERT_ALT_NAME_RFC822_NAME 2
+#define CERT_ALT_NAME_DNS_NAME 3
+#define CERT_ALT_NAME_X400_ADDRESS 4
+#define CERT_ALT_NAME_DIRECTORY_NAME 5
+#define CERT_ALT_NAME_EDI_PARTY_NAME 6
+#define CERT_ALT_NAME_URL 7
+#define CERT_ALT_NAME_IP_ADDRESS 8
+#define CERT_ALT_NAME_REGISTERED_ID 9
+
+typedef struct _CERT_ALT_NAME_INFO {
+ DWORD cAltEntry;
+ PCERT_ALT_NAME_ENTRY rgAltEntry;
+} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO;
+
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
+#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \
+ (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \
+ CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
+#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \
+ ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
+
+typedef struct _CERT_BASIC_CONSTRAINTS_INFO {
+ CRYPT_BIT_BLOB SubjectType;
+ BOOL fPathLenConstraint;
+ DWORD dwPathLenConstraint;
+ DWORD cSubtreesConstraint;
+ CERT_NAME_BLOB *rgSubtreesConstraint;
+} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO;
+
+#define CERT_CA_SUBJECT_FLAG 0x80
+#define CERT_END_ENTITY_SUBJECT_FLAG 0x40
+
+typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
+ BOOL fCA;
+ BOOL fPathLenConstraint;
+ DWORD dwPathLenConstraint;
+} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
+
+typedef struct _CERT_POLICY_QUALIFIER_INFO {
+ LPSTR pszPolicyQualifierId;
+ CRYPT_OBJID_BLOB Qualifier;
+} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO;
+
+typedef struct _CERT_POLICY_INFO {
+ LPSTR pszPolicyIdentifier;
+ DWORD cPolicyQualifier;
+ CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier;
+} CERT_POLICY_INFO, *PCERT_POLICY_INFO;
+
+typedef struct _CERT_POLICIES_INFO {
+ DWORD cPolicyInfo;
+ CERT_POLICY_INFO *rgPolicyInfo;
+} CERT_POLICIES_INFO, *PCERT_POLICIES_INFO;
+
+typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE {
+ LPSTR pszOrganization;
+ DWORD cNoticeNumbers;
+ int *rgNoticeNumbers;
+} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE,
+ *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE;
+
+typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE {
+ CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference;
+ LPWSTR pszDisplayText;
+} CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE;
+
+typedef struct _CPS_URLS {
+ LPWSTR pszURL;
+ CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm;
+ CRYPT_DATA_BLOB *pDigest;
+} CPS_URLS, *PCPS_URLS;
+
+typedef struct _CERT_POLICY95_QUALIFIER1 {
+ LPWSTR pszPracticesReference;
+ LPSTR pszNoticeIdentifier;
+ LPSTR pszNSINoticeIdentifier;
+ DWORD cCPSURLs;
+ CPS_URLS *rgCPSURLs;
+} CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1;
+
+typedef struct _CERT_POLICY_MAPPING {
+ LPSTR pszIssuerDomainPolicy;
+ LPSTR pszSubjectDomainPolicy;
+} CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING;
+
+typedef struct _CERT_POLICY_MAPPINGS_INFO {
+ DWORD cPolicyMapping;
+ PCERT_POLICY_MAPPING rgPolicyMapping;
+} CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO;
+
+typedef struct _CERT_POLICY_CONSTRAINTS_INFO {
+ BOOL fRequireExplicitPolicy;
+ DWORD dwRequireExplicitPolicySkipCerts;
+ BOOL fInhibitPolicyMapping;
+ DWORD dwInhibitPolicyMappingSkipCerts;
+} CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO;
+
+typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY {
+ LPSTR pszObjId;
+ DWORD cValue;
+ PCRYPT_DER_BLOB rgValue;
+} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY;
+
+typedef struct _CRYPT_CONTENT_INFO {
+ LPSTR pszObjId;
+ CRYPT_DER_BLOB Content;
+} CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO;
+
+typedef struct _CRYPT_SEQUENCE_OF_ANY {
+ DWORD cValue;
+ PCRYPT_DER_BLOB rgValue;
+} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY;
+
+typedef struct _CERT_AUTHORITY_KEY_ID2_INFO {
+ CRYPT_DATA_BLOB KeyId;
+ CERT_ALT_NAME_INFO AuthorityCertIssuer;
+ CRYPT_INTEGER_BLOB AuthorityCertSerialNumber;
+} CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO;
+
+typedef struct _CERT_ACCESS_DESCRIPTION {
+ LPSTR pszAccessMethod;
+ CERT_ALT_NAME_ENTRY AccessLocation;
+} CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION;
+
+typedef struct _CERT_AUTHORITY_INFO_ACCESS {
+ DWORD cAccDescr;
+ PCERT_ACCESS_DESCRIPTION rgAccDescr;
+} CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS;
+
+typedef struct _CERT_CONTEXT {
+ DWORD dwCertEncodingType;
+ BYTE *pbCertEncoded;
+ DWORD cbCertEncoded;
+ PCERT_INFO pCertInfo;
+ HCERTSTORE hCertStore;
+} CERT_CONTEXT, *PCERT_CONTEXT;
+typedef const CERT_CONTEXT *PCCERT_CONTEXT;
+
+typedef struct _CRL_ENTRY {
+ CRYPT_INTEGER_BLOB SerialNumber;
+ FILETIME RevocationDate;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CRL_ENTRY, *PCRL_ENTRY;
+
+typedef struct _CRL_INFO {
+ DWORD dwVersion;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CERT_NAME_BLOB Issuer;
+ FILETIME ThisUpdate;
+ FILETIME NextUpdate;
+ DWORD cCRLEntry;
+ PCRL_ENTRY rgCRLEntry;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CRL_INFO, *PCRL_INFO;
+
+typedef struct _CRL_DIST_POINT_NAME {
+ DWORD dwDistPointNameChoice;
+ union {
+ CERT_ALT_NAME_INFO FullName;
+ } DUMMYUNIONNAME;
+} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME;
+
+#define CRL_DIST_POINT_NO_NAME 0
+#define CRL_DIST_POINT_FULL_NAME 1
+#define CRL_DIST_POINT_ISSUER_RDN_NAME 2
+
+typedef struct _CRL_DIST_POINT {
+ CRL_DIST_POINT_NAME DistPointName;
+ CRYPT_BIT_BLOB ReasonFlags;
+ CERT_ALT_NAME_INFO CRLIssuer;
+} CRL_DIST_POINT, *PCRL_DIST_POINT;
+
+#define CRL_REASON_UNUSED_FLAG 0x80
+#define CRL_REASON_KEY_COMPROMISE_FLAG 0x40
+#define CRL_REASON_CA_COMPROMISE_FLAG 0x20
+#define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10
+#define CRL_REASON_SUPERSEDED_FLAG 0x08
+#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04
+#define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x02
+
+typedef struct _CRL_DIST_POINTS_INFO {
+ DWORD cDistPoint;
+ PCRL_DIST_POINT rgDistPoint;
+} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO;
+
+#define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f
+#define CRL_DIST_POINT_ERR_INDEX_SHIFT 24
+#define GET_CRL_DIST_POINT_ERR_INDEX(x) \
+ (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK)
+
+#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000)
+#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \
+ ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT)
+
+typedef struct _CROSS_CERT_DIST_POINTS_INFO {
+ DWORD dwSyncDeltaTime;
+ DWORD cDistPoint;
+ PCERT_ALT_NAME_INFO rgDistPoint;
+} CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO;
+
+#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff
+#define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24
+#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \
+ (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \
+ CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
+
+typedef struct _CERT_PAIR {
+ CERT_BLOB Forward;
+ CERT_BLOB Reverse;
+} CERT_PAIR, *PCERT_PAIR;
+
+typedef struct _CRL_ISSUING_DIST_POINT {
+ CRL_DIST_POINT_NAME DistPointName;
+ BOOL fOnlyContainsUserCerts;
+ BOOL fOnlyContainsCACerts;
+ CRYPT_BIT_BLOB OnlySomeReasonFlags;
+ BOOL fIndirectCRL;
+} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT;
+
+typedef struct _CERT_GENERAL_SUBTREE {
+ CERT_ALT_NAME_ENTRY Base;
+ DWORD dwMinimum;
+ BOOL fMaximum;
+ DWORD dwMaximum;
+} CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE;
+
+typedef struct _CERT_NAME_CONSTRAINTS_INFO {
+ DWORD cPermittedSubtree;
+ PCERT_GENERAL_SUBTREE rgPermittedSubtree;
+ DWORD cExcludedSubtree;
+ PCERT_GENERAL_SUBTREE rgExcludedSubtree;
+} CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO;
+
+#define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000)
+#define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT)
+
+typedef struct _CRYPT_ATTRIBUTE {
+ LPSTR pszObjId;
+ DWORD cValue;
+ PCRYPT_DATA_BLOB rgValue;
+} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
+
+typedef struct _CRYPT_ATTRIBUTES {
+ DWORD cAttr;
+ PCRYPT_ATTRIBUTE rgAttr;
+} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
+
+typedef struct _CERT_REQUEST_INFO {
+ DWORD dwVersion;
+ CERT_NAME_BLOB Subject;
+ CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+ DWORD cAttribute;
+ PCRYPT_ATTRIBUTE rgAttribute;
+} CERT_REQUEST_INFO, *PCERT_REQUEST_INFO;
+
+typedef struct _CERT_KEYGEN_REQUEST_INFO {
+ DWORD dwVersion;
+ CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
+ LPWSTR pwszChallengeString;
+} CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO;
+
+typedef struct _CERT_SIGNED_CONTENT_INFO {
+ CRYPT_DER_BLOB ToBeSigned;
+ CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
+ CRYPT_BIT_BLOB Signature;
+} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
+
+typedef struct _CRL_CONTEXT {
+ DWORD dwCertEncodingType;
+ BYTE *pbCrlEncoded;
+ DWORD cbCrlEncoded;
+ PCRL_INFO pCrlInfo;
+ HCERTSTORE hCertStore;
+} CRL_CONTEXT, *PCRL_CONTEXT;
+typedef const CRL_CONTEXT *PCCRL_CONTEXT;
+
+#define SORTED_CTL_EXT_FLAGS_OFFSET (0*4)
+#define SORTED_CTL_EXT_COUNT_OFFSET (1*4)
+#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (2*4)
+#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (3*4)
+
+#define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1
+
+typedef struct _CERT_DSS_PARAMETERS {
+ CRYPT_UINT_BLOB p;
+ CRYPT_UINT_BLOB q;
+ CRYPT_UINT_BLOB g;
+} CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS;
+
+#define CERT_DSS_R_LEN 20
+#define CERT_DSS_S_LEN 20
+#define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN)
+
+#define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN (2 + 2*(2 + 20 +1))
+
+typedef struct _CERT_DH_PARAMETERS {
+ CRYPT_UINT_BLOB p;
+ CRYPT_UINT_BLOB g;
+} CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS;
+
+typedef struct _CERT_X942_DH_VALIDATION_PARAMS {
+ CRYPT_BIT_BLOB seed;
+ DWORD pgenCounter;
+} CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS;
+
+typedef struct _CERT_X942_DH_PARAMETERS {
+ CRYPT_UINT_BLOB p;
+ CRYPT_UINT_BLOB g;
+ CRYPT_UINT_BLOB q;
+ CRYPT_UINT_BLOB j;
+ PCERT_X942_DH_VALIDATION_PARAMS pValidationParams;
+} CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS;
+
+#define CRYPT_X942_COUNTER_BYTE_LENGTH 4
+#define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4
+#define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8)
+
+typedef struct _CRYPT_X942_OTHER_INFO {
+ LPSTR pszContentEncryptionObjId;
+ BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH];
+ BYTE rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH];
+ CRYPT_DATA_BLOB PubInfo;
+} CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO;
+
+typedef struct _CRYPT_RC2_CBC_PARAMETERS {
+ DWORD dwVersion;
+ BOOL fIV;
+ BYTE rgbIV[4];
+} CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS;
+
+#define CRYPT_RC2_40BIT_VERSION 160
+#define CRYPT_RC2_56BIT_VERSION 52
+#define CRYPT_RC2_64BIT_VERSION 120
+#define CRYPT_RC2_128BIT_VERSION 58
+
+typedef struct _CRYPT_SMIME_CAPABILITY {
+ LPSTR pszObjId;
+ CRYPT_OBJID_BLOB Parameters;
+} CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY;
+
+typedef struct _CRYPT_SMIME_CAPABILITIES {
+ DWORD cCapability;
+ PCRYPT_SMIME_CAPABILITY rgCapability;
+} CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES;
+
+typedef struct _VTableProvStruc {
+ DWORD Version;
+#ifdef WINE_STRICT_PROTOTYPES
+ BOOL (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*);
+ void (WINAPI *FuncReturnhWnd)(HWND*);
+#else
+ FARPROC FuncVerifyImage;
+ FARPROC FuncReturnhWnd;
+#endif
+ DWORD dwProvType;
+ BYTE *pbContextInfo;
+ DWORD cbContextInfo;
+ LPSTR pszProvName;
+} VTableProvStruc, *PVTableProvStruc;
+
+typedef struct _CERT_PRIVATE_KEY_INFO {
+ DWORD Version;
+ CRYPT_ALGORITHM_IDENTIFIER Algorithm;
+ CRYPT_DER_BLOB PrivateKey;
+ PCRYPT_ATTRIBUTES pAttributes;
+} CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO;
+
+typedef struct _CTL_USAGE {
+ DWORD cUsageIdentifier;
+ LPSTR *rgpszUsageIdentifier;
+} CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE;
+
+typedef struct _CTL_ENTRY {
+ CRYPT_DATA_BLOB SubjectIdentifier;
+ DWORD cAttribute;
+ PCRYPT_ATTRIBUTE rgAttribute;
+} CTL_ENTRY, *PCTL_ENTRY;
+
+typedef struct _CTL_INFO {
+ DWORD dwVersion;
+ CTL_USAGE SubjectUsage;
+ CRYPT_DATA_BLOB ListIdentifier;
+ CRYPT_INTEGER_BLOB SequenceNumber;
+ FILETIME ThisUpdate;
+ FILETIME NextUpdate;
+ CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm;
+ DWORD cCTLEntry;
+ PCTL_ENTRY rgCTLEntry;
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CTL_INFO, *PCTL_INFO;
+
+typedef struct _CTL_CONTEXT {
+ DWORD dwMsgAndCertEncodingType;
+ BYTE *pbCtlEncoded;
+ DWORD cbCtlEncoded;
+ PCTL_INFO pCtlInfo;
+ HCERTSTORE hCertStore;
+ HCRYPTMSG hCryptMsg;
+ BYTE *pbCtlContext;
+ DWORD cbCtlContext;
+} CTL_CONTEXT, *PCTL_CONTEXT;
+typedef const CTL_CONTEXT *PCCTL_CONTEXT;
+
+typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO {
+ LPSTR pszTimeStampAlgorithm;
+ LPSTR pszContentType;
+ CRYPT_OBJID_BLOB Content;
+ DWORD cAttribute;
+ PCRYPT_ATTRIBUTE rgAttribute;
+} CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO;
+
+typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR {
+ LPWSTR pwszName;
+ LPWSTR pwszValue;
+} CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR;
+
+typedef struct _CMSG_SIGNER_INFO {
+ DWORD dwVersion;
+ CERT_NAME_BLOB Issuer;
+ CRYPT_INTEGER_BLOB SerialNumber;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+ CRYPT_DATA_BLOB EncryptedHash;
+ CRYPT_ATTRIBUTES AuthAttrs;
+ CRYPT_ATTRIBUTES UnauthAttrs;
+} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO;
+
+#define CMSG_VERIFY_SIGNER_PUBKEY 1
+#define CMSG_VERIFY_SIGNER_CERT 2
+#define CMSG_VERIFY_SIGNER_CHAIN 3
+#define CMSG_VERIFY_SIGNER_NULL 4
+
+typedef struct _CERT_REVOCATION_CRL_INFO {
+ DWORD cbSize;
+ PCCRL_CONTEXT pBaseCrlContext;
+ PCCRL_CONTEXT pDeltaCrlContext;
+ PCRL_ENTRY pCrlEntry;
+ BOOL fDeltaCrlEntry;
+} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO;
+
+typedef struct _CERT_REVOCATION_INFO {
+ DWORD cbSize;
+ DWORD dwRevocationResult;
+ LPCSTR pszRevocationOid;
+ LPVOID pvOidSpecificInfo;
+ BOOL fHasFreshnessTime;
+ DWORD dwFreshnessTime;
+ PCERT_REVOCATION_CRL_INFO pCrlInfo;
+} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO;
+
+typedef struct _CERT_REVOCATION_PARA {
+ DWORD cbSize;
+ PCCERT_CONTEXT pIssuerCert;
+ DWORD cCertStore;
+ HCERTSTORE *rgCertStore;
+ HCERTSTORE hCrlStore;
+ LPFILETIME pftTimeToUse;
+#ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS
+ DWORD dwUrlRetrievalTimeout;
+ BOOL fCheckFreshnessTime;
+ DWORD dwFreshnessTime;
+ LPFILETIME pftCurrentTime;
+ PCERT_REVOCATION_CRL_INFO pCrlInfo;
+#endif
+} CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA;
+
+#define CERT_CONTEXT_REVOCATION_TYPE 1
+#define CERT_VERIFY_REV_CHAIN_FLAG 0x00000001
+#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x00000002
+#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004
+
+typedef struct _CTL_VERIFY_USAGE_PARA {
+ DWORD cbSize;
+ CRYPT_DATA_BLOB ListIdentifier;
+ DWORD cCtlStore;
+ HCERTSTORE *rghCtlStore;
+ DWORD cSignerStore;
+ HCERTSTORE *rghSignerStore;
+} CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA;
+
+typedef struct _CTL_VERIFY_USAGE_STATUS {
+ DWORD cbSize;
+ DWORD dwError;
+ DWORD dwFlags;
+ PCCTL_CONTEXT *ppCtl;
+ DWORD dwCtlEntryIndex;
+ PCCERT_CONTEXT *ppSigner;
+ DWORD dwSignerIndex;
+} CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS;
+
+#define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1
+#define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2
+#define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4
+#define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8
+#define CERT_VERIFY_UPDATED_CTL_FLAG 0x1
+
+typedef struct _CERT_CHAIN {
+ DWORD cCerts;
+ PCERT_BLOB certs;
+ CRYPT_KEY_PROV_INFO keyLocatorInfo;
+} CERT_CHAIN, *PCERT_CHAIN;
+
+typedef struct _CERT_REVOCATION_STATUS {
+ DWORD cbSize;
+ DWORD dwIndex;
+ DWORD dwError;
+ DWORD dwReason;
+ BOOL fHasFreshnessTime;
+ DWORD dwFreshnessTime;
+} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS;
+
+typedef struct _CERT_TRUST_LIST_INFO {
+ DWORD cbSize;
+ PCTL_ENTRY pCtlEntry;
+ PCCTL_CONTEXT pCtlContext;
+} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO;
+
+#define CERT_TRUST_NO_ERROR 0x00000000
+#define CERT_TRUST_IS_NOT_TIME_VALID 0x00000001
+#define CERT_TRUST_IS_NOT_TIME_NESTED 0x00000002
+#define CERT_TRUST_IS_REVOKED 0x00000004
+#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x00000008
+#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x00000010
+#define CERT_TRUST_IS_UNTRUSTED_ROOT 0x00000020
+#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x00000040
+#define CERT_TRUST_IS_CYCLIC 0x00000080
+#define CERT_TRUST_INVALID_EXTENSION 0x00000100
+#define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x00000200
+#define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x00000400
+#define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x00000800
+#define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000
+#define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x00002000
+#define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000
+#define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x00008000
+#define CERT_TRUST_IS_OFFLINE_REVOCATION 0x01000000
+#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x02000000
+#define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x04000000
+#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x08000000
+
+#define CERT_TRUST_IS_PARTIAL_CHAIN 0x00010000
+#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x00020000
+#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x00040000
+#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x00080000
+
+#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x00000001
+#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x00000002
+#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x00000004
+#define CERT_TRUST_IS_SELF_SIGNED 0x00000008
+
+#define CERT_TRUST_HAS_PREFERRED_ISSUER 0x00000100
+#define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x00000200
+#define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x00000400
+#define CERT_TRUST_IS_PEER_TRUSTED 0x00000800
+#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x00001000
+
+#define CERT_TRUST_IS_COMPLEX_CHAIN 0x00010000
+
+typedef struct _CERT_TRUST_STATUS {
+ DWORD dwErrorStatus;
+ DWORD dwInfoStatus;
+} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
+
+typedef struct _CERT_CHAIN_ELEMENT {
+ DWORD cbSize;
+ PCCERT_CONTEXT pCertContext;
+ CERT_TRUST_STATUS TrustStatus;
+ PCERT_REVOCATION_INFO pRevocationInfo;
+ PCERT_ENHKEY_USAGE pIssuanceUsage;
+ PCERT_ENHKEY_USAGE pApplicationUsage;
+ LPCWSTR pwszExtendedErrorInfo;
+} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT;
+
+typedef struct _CERT_SIMPLE_CHAIN {
+ DWORD cbSize;
+ CERT_TRUST_STATUS TrustStatus;
+ DWORD cElement;
+ PCERT_CHAIN_ELEMENT *rgpElement;
+ PCERT_TRUST_LIST_INFO pTrustListInfo;
+ BOOL fHasRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN;
+
+typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
+typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT;
+
+struct _CERT_CHAIN_CONTEXT {
+ DWORD cbSize;
+ CERT_TRUST_STATUS TrustStatus;
+ DWORD cChain;
+ PCERT_SIMPLE_CHAIN *rgpChain;
+ DWORD cLowerQualityChainContext;
+ PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext;
+ BOOL fHasRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+};
+
+typedef struct _CERT_CHAIN_POLICY_PARA {
+ DWORD cbSize;
+ DWORD dwFlags;
+ void *pvExtraPolicyPara;
+} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA;
+
+typedef struct _CERT_CHAIN_POLICY_STATUS {
+ DWORD cbSize;
+ DWORD dwError;
+ LONG lChainIndex;
+ LONG lElementIndex;
+ void *pvExtraPolicyStatus;
+} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS;
+
+#define CERT_CHAIN_POLICY_BASE ((LPCSTR)1)
+#define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR)2)
+#define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR)3)
+#define CERT_CHAIN_POLICY_SSL ((LPCSTR)4)
+#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5)
+#define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR)6)
+#define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR)7)
+
+#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x00000001
+#define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x00000002
+#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x00000004
+#define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008
+
+#define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \
+ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG )
+
+#define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x00000010
+#define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x00000020
+#define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x00000040
+#define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x00000080
+
+#define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x00000100
+#define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x00000200
+#define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x00000400
+#define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x00000800
+
+#define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \
+ CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \
+ CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG )
+
+#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x00001000
+#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000
+#define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x00004000
+#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x00008000
+#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
+
+typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA {
+ DWORD cbSize;
+ DWORD dwRegPolicySettings;
+ PCMSG_SIGNER_INFO pSignerInfo;
+} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA,
+ *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS {
+ DWORD cbSize;
+ BOOL fCommercial;
+} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS,
+ *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS;
+
+typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA {
+ DWORD cbSize;
+ DWORD dwRegPolicySettings;
+ BOOL fCommercial;
+} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA,
+ *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+typedef struct _HTTPSPolicyCallbackData {
+ union {
+ DWORD cbStruct;
+ DWORD cbSize;
+ } DUMMYUNIONNAME;
+ DWORD dwAuthType;
+ DWORD fdwChecks;
+ WCHAR *pwszServerName;
+} HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData,
+ SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA;
+
+/* Values for HTTPSPolicyCallbackData's dwAuthType */
+#define AUTHTYPE_CLIENT 1
+#define AUTHTYPE_SERVER 2
+/* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */
+
+#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000
+#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000
+
+#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000
+
+#define USAGE_MATCH_TYPE_AND 0x00000000
+#define USAGE_MATCH_TYPE_OR 0x00000001
+
+typedef struct _CERT_USAGE_MATCH {
+ DWORD dwType;
+ CERT_ENHKEY_USAGE Usage;
+} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH;
+
+typedef struct _CTL_USAGE_MATCH {
+ DWORD dwType;
+ CTL_USAGE Usage;
+} CTL_USAGE_MATCH, *PCTL_USAGE_MATCH;
+
+#define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000
+#define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000
+#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000
+#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000
+
+#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x08000000
+
+#define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x00000040
+#define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x00000080
+#define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x00000100
+#define CERT_CHAIN_TIMESTAMP_TIME 0x00000200
+
+typedef struct _CERT_CHAIN_PARA {
+ DWORD cbSize;
+ CERT_USAGE_MATCH RequestedUsage;
+#ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
+ CERT_USAGE_MATCH RequestedIssuancePolicy;
+ DWORD dwUrlRetrievalTimeout;
+ BOOL fCheckRevocationFreshnessTime;
+ DWORD dwRevocationFreshnessTime;
+ LPFILETIME pftCacheResync;
+#endif
+} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA;
+
+typedef struct _CERT_SYSTEM_STORE_INFO {
+ DWORD cbSize;
+} CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO;
+
+typedef struct _CERT_PHYSICAL_STORE_INFO {
+ DWORD cbSize;
+ LPSTR pszOpenStoreProvider;
+ DWORD dwOpenEncodingType;
+ DWORD dwOpenFlags;
+ CRYPT_DATA_BLOB OpenParameters;
+ DWORD dwFlags;
+ DWORD dwPriority;
+} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO;
+
+typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA {
+ union {
+ HKEY hKeyBase;
+ VOID *pvBase;
+ } DUMMYUNIONNAME;
+ union {
+ void *pvSystemStore;
+ LPCSTR pszSystemStore;
+ LPCWSTR pwszSystemStore;
+ } DUMMYUNIONNAME2;
+} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA;
+
+typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
+ LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
+
+typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore,
+ DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved,
+ void *pvArg);
+
+typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore,
+ DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo,
+ void *pvReserved, void *pvArg);
+
+/* Encode/decode object */
+typedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
+typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
+
+typedef struct _CRYPT_ENCODE_PARA {
+ DWORD cbSize;
+ PFN_CRYPT_ALLOC pfnAlloc;
+ PFN_CRYPT_FREE pfnFree;
+} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA;
+
+typedef struct _CRYPT_DECODE_PARA {
+ DWORD cbSize;
+ PFN_CRYPT_ALLOC pfnAlloc;
+ PFN_CRYPT_FREE pfnFree;
+} CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA;
+
+typedef struct _CERT_STORE_PROV_INFO {
+ DWORD cbSize;
+ DWORD cStoreProvFunc;
+ void **rgpvStoreProvFunc;
+ HCERTSTOREPROV hStoreProv;
+ DWORD dwStoreProvFlags;
+ HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
+} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
+
+typedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)(
+ LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore,
+ PCERT_STORE_PROV_INFO pStoreProvInfo);
+
+typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv,
+ DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv,
+ PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags,
+ PCCERT_CONTEXT *ppProvCertContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv,
+ PCCERT_CONTEXT pCertContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags,
+ PCCRL_CONTEXT *ppProvCrlContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCRL_CONTEXT pCrlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv,
+ PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags,
+ PCCTL_CONTEXT *ppProvCtlContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv,
+ PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)(
+ HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv,
+ DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara);
+
+typedef struct _CERT_STORE_PROV_FIND_INFO {
+ DWORD cbSize;
+ DWORD dwMsgAndCertEncodingType;
+ DWORD dwFindFlags;
+ DWORD dwFindType;
+ const void *pvFindPara;
+} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO;
+typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO,
+ *PCCERT_STORE_PROV_FIND_INFO;
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv,
+ PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext,
+ DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext,
+ void *pvStoreProvFindInfo, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId,
+ DWORD dwFlags, void *pvData, DWORD *pcbData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv,
+ PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext,
+ DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)(
+ HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext,
+ void *pvStoreProvFindInfo, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId,
+ DWORD dwFlags, void *pvData, DWORD *pcbData);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv,
+ PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags);
+
+typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)(
+ HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId,
+ DWORD dwFlags, void *pvData);
+
+typedef struct _CERT_CREATE_CONTEXT_PARA {
+ DWORD cbSize;
+ PFN_CRYPT_FREE pfnFree;
+ void *pvFree;
+} CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA;
+
+typedef struct _CRYPT_OID_FUNC_ENTRY {
+ LPCSTR pszOID;
+ void *pvFuncAddr;
+} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY;
+
+typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType,
+ LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[],
+ LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[],
+ const DWORD rgcbValueData[], void *pvArg);
+
+#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff
+
+typedef struct _CRYPT_OID_INFO {
+ DWORD cbSize;
+ LPCSTR pszOID;
+ LPCWSTR pwszName;
+ DWORD dwGroupId;
+ union {
+ DWORD dwValue;
+ ALG_ID Algid;
+ DWORD dwLength;
+ } DUMMYUNIONNAME;
+ CRYPT_DATA_BLOB ExtraInfo;
+} CRYPT_OID_INFO, *PCRYPT_OID_INFO;
+typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO;
+
+typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo,
+ void *pvArg);
+
+typedef struct _CRYPT_SIGN_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgEncodingType;
+ PCCERT_CONTEXT pSigningCert;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ void * pvHashAuxInfo;
+ DWORD cMsgCert;
+ PCCERT_CONTEXT *rgpMsgCert;
+ DWORD cMsgCrl;
+ PCCRL_CONTEXT *rgpMsgCrl;
+ DWORD cAuthAttr;
+ PCRYPT_ATTRIBUTE rgAuthAttr;
+ DWORD cUnauthAttr;
+ PCRYPT_ATTRIBUTE rgUnauthAttr;
+ DWORD dwFlags;
+ DWORD dwInnerContentType;
+#ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
+ CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+ void * pvHashEncryptionAuxInfo;
+#endif
+} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA;
+
+#define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x00000001
+#define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002
+#define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x00000004
+#define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x00000008
+
+typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg,
+ DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore);
+
+typedef struct _CRYPT_VERIFY_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgAndCertEncodingType;
+ HCRYPTPROV_LEGACY hCryptProv;
+ PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate;
+ void * pvGetArg;
+} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA;
+
+typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgEncodingType;
+ HCRYPTPROV_LEGACY hCryptProv;
+ CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+ void * pvEncryptionAuxInfo;
+ DWORD dwFlags;
+ DWORD dwInnerContentType;
+} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
+
+#define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004
+
+typedef struct _CRYPT_DECRYPT_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgAndCertEncodingType;
+ DWORD cCertStore;
+ HCERTSTORE *rghCertStore;
+#ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS
+ DWORD dwFlags;
+#endif
+} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA;
+
+typedef struct _CRYPT_HASH_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgEncodingType;
+ HCRYPTPROV_LEGACY hCryptProv;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ void * pvHashAuxInfo;
+} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA;
+
+typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgAndCertEncodingType;
+ HCRYPTPROV hCryptProv;
+ DWORD dwKeySpec;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ void * pvHashAuxInfo;
+} CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA;
+
+typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgEncodingType;
+ HCRYPTPROV_LEGACY hCryptProv;
+} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA;
+
+typedef struct _CRYPT_URL_ARRAY {
+ DWORD cUrl;
+ LPWSTR *rgwszUrl;
+} CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY;
+
+typedef struct _CRYPT_URL_INFO {
+ DWORD cbSize;
+ DWORD dwSyncDeltaTime;
+ DWORD cGroup;
+ DWORD *rgcGroupEntry;
+} CRYPT_URL_INFO, *PCRYPT_URL_INFO;
+
+#define URL_OID_CERTIFICATE_ISSUER ((LPCSTR)1)
+#define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR)2)
+#define URL_OID_CTL_ISSUER ((LPCSTR)3)
+#define URL_OID_CTL_NEXT_UPDATE ((LPCSTR)4)
+#define URL_OID_CRL_ISSUER ((LPCSTR)5)
+#define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR)6)
+#define URL_OID_CRL_FRESHEST_CRL ((LPCSTR)7)
+#define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR)8)
+#define URL_OID_CERTIFICATE_OCSP ((LPCSTR)9)
+#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10)
+#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11)
+#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS ((LPCSTR)12)
+
+#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
+
+typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC;
+
+typedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid,
+ LPVOID pvParam);
+
+#define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1)
+#define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2)
+
+typedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)(
+ void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid,
+ void *pvObject);
+
+typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION
+{
+ PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion;
+ void *pvCompletion;
+} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION;
+
+typedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)(
+ HCRYPTASYNC hAsyncRetrieve);
+
+typedef struct _CRYPT_BLOB_ARRAY
+{
+ DWORD cBlob;
+ PCRYPT_DATA_BLOB rgBlob;
+} CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY;
+
+typedef struct _CRYPT_CREDENTIALS {
+ DWORD cbSize;
+ LPCSTR pszCredentialsOid;
+ LPVOID pvCredentials;
+} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS;
+
+#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1)
+#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2)
+#define CREDENTIAL_OID_PASSWORD_CREDENTIALS \
+ WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_)
+
+typedef struct _CRYPT_PASSWORD_CREDENTIALSA {
+ DWORD cbSize;
+ LPSTR pszUsername;
+ LPSTR pszPassword;
+} CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA;
+
+typedef struct _CRYPT_PASSWORD_CREDENTIALSW {
+ DWORD cbSize;
+ LPWSTR pszUsername;
+ LPWSTR pszPassword;
+} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW;
+#define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS)
+#define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS)
+
+typedef struct _CRYPT_RETRIEVE_AUX_INFO {
+ DWORD cbSize;
+ FILETIME *pLastSyncTime;
+ DWORD dwMaxUrlRetrievalByteCount;
+} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO;
+
+typedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid,
+ PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext);
+
+#define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \
+ "SchemeDllRetrieveEncodedObject"
+#define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \
+ "SchemeDllRetrieveEncodedObjectW"
+/* The signature of SchemeDllRetrieveEncodedObjectW is:
+BOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl,
+ LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout,
+ PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject,
+ void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve,
+ PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+ */
+
+#define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
+/* The signature of ContextDllCreateObjectContext is:
+BOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid,
+ DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt);
+ */
+
+#define CONTEXT_OID_CERTIFICATE ((LPCSTR)1)
+#define CONTEXT_OID_CRL ((LPCSTR)2)
+#define CONTEXT_OID_CTL ((LPCSTR)3)
+#define CONTEXT_OID_PKCS7 ((LPCSTR)4)
+#define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5)
+
+#define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x00000001
+#define CRYPT_CACHE_ONLY_RETRIEVAL 0x00000002
+#define CRYPT_WIRE_ONLY_RETRIEVAL 0x00000004
+#define CRYPT_DONT_CACHE_RESULT 0x00000008
+#define CRYPT_ASYNC_RETRIEVAL 0x00000010
+#define CRYPT_STICKY_CACHE_RETRIEVAL 0x00001000
+#define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000
+#define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x00004000
+#define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x00008000
+#define CRYPT_LDAP_SIGN_RETRIEVAL 0x00010000
+#define CRYPT_NO_AUTH_RETRIEVAL 0x00020000
+#define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x00040000
+#define CRYPT_AIA_RETRIEVAL 0x00080000
+
+#define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x00000020
+#define CRYPT_VERIFY_DATA_HASH 0x00000040
+#define CRYPT_KEEP_TIME_VALID 0x00000080
+#define CRYPT_DONT_VERIFY_SIGNATURE 0x00000100
+#define CRYPT_DONT_CHECK_TIME_VALIDITY 0x00000200
+#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400
+#define CRYPT_ACCUMULATIVE_TIMEOUT 0x00000800
+
+typedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg);
+
+typedef struct _CERT_CRL_CONTEXT_PAIR
+{
+ PCCERT_CONTEXT pCertContext;
+ PCCRL_CONTEXT pCrlContext;
+} CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR;
+typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR;
+
+#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
+
+#define TIME_VALID_OID_GET_CTL ((LPCSTR)1)
+#define TIME_VALID_OID_GET_CRL ((LPCSTR)2)
+#define TIME_VALID_OID_GET_CRL_FROM_CERT ((LPCSTR)3)
+#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
+#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
+
+#define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
+
+#define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1)
+#define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2)
+#define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3)
+#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4)
+#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5)
+
+/* OID group IDs */
+#define CRYPT_HASH_ALG_OID_GROUP_ID 1
+#define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 2
+#define CRYPT_PUBKEY_ALG_OID_GROUP_ID 3
+#define CRYPT_SIGN_ALG_OID_GROUP_ID 4
+#define CRYPT_RDN_ATTR_OID_GROUP_ID 5
+#define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 6
+#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7
+#define CRYPT_POLICY_OID_GROUP_ID 8
+#define CRYPT_TEMPLATE_OID_GROUP_ID 9
+#define CRYPT_LAST_OID_GROUP_ID 9
+
+#define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID
+#define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID
+
+#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1
+#define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2
+#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4
+
+#define CRYPT_OID_INFO_OID_KEY 1
+#define CRYPT_OID_INFO_NAME_KEY 2
+#define CRYPT_OID_INFO_ALGID_KEY 3
+#define CRYPT_OID_INFO_SIGN_KEY 4
+
+/* Algorithm IDs */
+
+#define GET_ALG_CLASS(x) (x & (7 << 13))
+#define GET_ALG_TYPE(x) (x & (15 << 9))
+#define GET_ALG_SID(x) (x & (511))
+
+/* Algorithm Classes */
+#define ALG_CLASS_ANY (0)
+#define ALG_CLASS_SIGNATURE (1 << 13)
+#define ALG_CLASS_MSG_ENCRYPT (2 << 13)
+#define ALG_CLASS_DATA_ENCRYPT (3 << 13)
+#define ALG_CLASS_HASH (4 << 13)
+#define ALG_CLASS_KEY_EXCHANGE (5 << 13)
+#define ALG_CLASS_ALL (7 << 13)
+/* Algorithm types */
+#define ALG_TYPE_ANY (0)
+#define ALG_TYPE_DSS (1 << 9)
+#define ALG_TYPE_RSA (2 << 9)
+#define ALG_TYPE_BLOCK (3 << 9)
+#define ALG_TYPE_STREAM (4 << 9)
+#define ALG_TYPE_DH (5 << 9)
+#define ALG_TYPE_SECURECHANNEL (6 << 9)
+
+/* SIDs */
+#define ALG_SID_ANY (0)
+/* RSA SIDs */
+#define ALG_SID_RSA_ANY 0
+#define ALG_SID_RSA_PKCS 1
+#define ALG_SID_RSA_MSATWORK 2
+#define ALG_SID_RSA_ENTRUST 3
+#define ALG_SID_RSA_PGP 4
+/* DSS SIDs */
+#define ALG_SID_DSS_ANY 0
+#define ALG_SID_DSS_PKCS 1
+#define ALG_SID_DSS_DMS 2
+
+/* DES SIDs */
+#define ALG_SID_DES 1
+#define ALG_SID_3DES 3
+#define ALG_SID_DESX 4
+#define ALG_SID_IDEA 5
+#define ALG_SID_CAST 6
+#define ALG_SID_SAFERSK64 7
+#define ALG_SID_SAFERSK128 8
+#define ALG_SID_3DES_112 9
+#define ALG_SID_CYLINK_MEK 12
+#define ALG_SID_RC5 13
+#define ALG_SID_AES_128 14
+#define ALG_SID_AES_192 15
+#define ALG_SID_AES_256 16
+#define ALG_SID_AES 17
+/* Diffie-Hellmans SIDs */
+#define ALG_SID_DH_SANDF 1
+#define ALG_SID_DH_EPHEM 2
+#define ALG_SID_AGREED_KEY_ANY 3
+#define ALG_SID_KEA 4
+#define ALG_SID_ECDH 5
+/* RC2 SIDs */
+#define ALG_SID_RC4 1
+#define ALG_SID_RC2 2
+#define ALG_SID_SEAL 2
+/* Hash SIDs */
+#define ALG_SID_MD2 1
+#define ALG_SID_MD4 2
+#define ALG_SID_MD5 3
+#define ALG_SID_SHA 4
+#define ALG_SID_SHA1 ALG_SID_SHA
+#define ALG_SID_MAC 5
+#define ALG_SID_RIPEMD 6
+#define ALG_SID_RIPEMD160 7
+#define ALG_SID_SSL3SHAMD5 8
+#define ALG_SID_HMAC 9
+#define ALG_SID_TLS1PRF 10
+#define ALG_SID_HASH_REPLACE_OWF 11
+#define ALG_SID_SHA_256 12
+#define ALG_SID_SHA_384 13
+#define ALG_SID_SHA_512 14
+/* SCHANNEL SIDs */
+#define ALG_SID_SSL3_MASTER 1
+#define ALG_SID_SCHANNEL_MASTER_HASH 2
+#define ALG_SID_SCHANNEL_MAC_KEY 3
+#define ALG_SID_PCT1_MASTER 4
+#define ALG_SID_SSL2_MASTER 5
+#define ALG_SID_TLS1_MASTER 6
+#define ALG_SID_SCHANNEL_ENC_KEY 7
+#define ALG_SID_EXAMPLE 80
+
+/* Algorithm Definitions */
+#define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
+#define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
+#define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
+#define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
+#define CALG_SHA1 CALG_SHA
+#define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
+#define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
+#define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
+#define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
+#define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF)
+#define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
+#define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
+#define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
+#define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
+#define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
+#define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY)
+#define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF)
+#define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM)
+#define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH)
+#define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
+#define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES)
+#define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2)
+#define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES)
+#define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112)
+#define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128)
+#define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192)
+#define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256)
+#define CALG_AES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES)
+#define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4)
+#define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL)
+#define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC5)
+#define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER)
+#define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH)
+#define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY)
+#define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY)
+#define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER)
+#define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER)
+#define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER)
+
+
+/* Protocol Flags */
+#define CRYPT_FLAG_PCT1 0x0001
+#define CRYPT_FLAG_SSL2 0x0002
+#define CRYPT_FLAG_SSL3 0x0004
+#define CRYPT_FLAG_TLS1 0x0008
+#define CRYPT_FLAG_IPSEC 0x0010
+#define CRYPT_FLAG_SIGNING 0x0020
+
+/* Provider names */
+#define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
+#if defined(__GNUC__)
+# define MS_DEF_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
+ 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
+#else
+static const WCHAR MS_DEF_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
+ 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
+#endif
+#define MS_DEF_PROV WINELIB_NAME_AW(MS_DEF_PROV_)
+
+#define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
+#if defined(__GNUC__)
+# define MS_ENHANCED_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
+ 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }
+#elif defined(_MSC_VER)
+# define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
+#else
+static const WCHAR MS_ENHANCED_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
+ 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 };
+#endif
+#define MS_ENHANCED_PROV WINELIB_NAME_AW(MS_ENHANCED_PROV_)
+
+#define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_STRONG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', \
+ 'P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
+#else
+static const WCHAR MS_STRONG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ',
+ 'P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_STRONG_PROV WINELIB_NAME_AW(MS_STRONG_PROV_)
+
+#define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_RSA_SIG_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_RSA_SIG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_RSA_SIG_PROV WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_)
+
+#define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_RSA_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'R','S','A',' ','S','C','h','a','n','n','e','l',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'R','S','A',' ','S','C','h','a','n','n','e','l',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_RSA_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_)
+
+#define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_DSS_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'B','a','s','e',' ','D','S','S',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_DSS_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'B','a','s','e',' ','D','S','S',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_DSS_PROV WINELIB_NAME_AW(MS_DEF_DSS_PROV_)
+
+#define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', \
+ 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ',
+ 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_DSS_DH_PROV WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_)
+
+#define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_ENH_DSS_DH_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', \
+ 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
+#else
+static const WCHAR MS_ENH_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ',
+ 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_ENH_DSS_DH_PROV WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_)
+
+#define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_DEF_DH_SCHANNEL_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'D','H',' ','S','C','h','a','n','n','e','l',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
+#else
+static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'D','H',' ','S','C','h','a','n','n','e','l',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_DEF_DH_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_)
+
+#define MS_SCARD_PROV_A "Microsoft Base Smart Card Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_SCARD_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', \
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_SCARD_PROV_W L"Microsoft Base Smart Card Cryptographic Provider"
+#else
+static const WCHAR MS_SCARD_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_SCARD_PROV WINELIB_NAME_AW(MS_SCARD_PROV_)
+
+#define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
+#if defined(__GNUC__)
+# define MS_ENH_RSA_AES_PROV_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }
+#elif defined(_MSC_VER)
+# define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
+#else
+static const WCHAR MS_ENH_RSA_AES_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 };
+#endif
+#define MS_ENH_RSA_AES_PROV WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_)
+
+#define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
+#if defined(__GNUC__)
+# define MS_ENH_RSA_AES_PROV_XP_W (const WCHAR []){ 'M','i','c','r','o','s','o','f','t',' ', \
+ 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',\
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',\
+ '(','P','r','o','t','o','t','y','p','e',')',0 }
+#elif defined(_MSC_VER)
+# define MS_ENH_RSA_AES_PROV_XP_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
+#else
+static const WCHAR MS_ENH_RSA_AES_PROV_XP_W[] = { 'M','i','c','r','o','s','o','f','t',' ',
+ 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ',
+ 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ',
+ '(','P','r','o','t','o','t','y','p','e',')',0 };
+#endif
+#define MS_ENH_RSA_AES_PROV_XP WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_XP_)
+
+/* Key Specs*/
+#define AT_KEYEXCHANGE 1
+#define AT_SIGNATURE 2
+
+/* Provider Types */
+#define PROV_RSA_FULL 1
+#define PROV_RSA_SIG 2
+#define PROV_DSS 3
+#define PROV_FORTEZZA 4
+#define PROV_MS_EXCHANGE 5
+#define PROV_SSL 6
+#define PROV_RSA_SCHANNEL 12
+#define PROV_DSS_DH 13
+#define PROV_EC_ECDSA_SIG 14
+#define PROV_EC_ECNRA_SIG 15
+#define PROV_EC_ECDSA_FULL 16
+#define PROV_EC_ECNRA_FULL 17
+#define PROV_DH_SCHANNEL 18
+#define PROV_SPYRUS_LYNKS 20
+#define PROV_RNG 21
+#define PROV_INTEL_SEC 22
+#define PROV_REPLACE_OWF 23
+#define PROV_RSA_AES 24
+
+/* FLAGS Section */
+
+#define CRYPT_FIRST 1
+#define CRYPT_NEXT 2
+
+#define CRYPT_IMPL_HARDWARE 1
+#define CRYPT_IMPL_SOFTWARE 2
+#define CRYPT_IMPL_MIXED 3
+#define CRYPT_IMPL_UNKNOWN 4
+
+/* CryptAcquireContext */
+#define CRYPT_VERIFYCONTEXT 0xF0000000
+#define CRYPT_NEWKEYSET 0x00000008
+#define CRYPT_DELETEKEYSET 0x00000010
+#define CRYPT_MACHINE_KEYSET 0x00000020
+#define CRYPT_SILENT 0x00000040
+
+/* Crypt{Get|Set}Provider */
+#define CRYPT_MACHINE_DEFAULT 0x00000001
+#define CRYPT_USER_DEFAULT 0x00000002
+#define CRYPT_DELETE_DEFAULT 0x00000004
+
+/* Crypt{Get/Set}ProvParam */
+#define PP_CLIENT_HWND 1
+#define PP_ENUMALGS 1
+#define PP_ENUMCONTAINERS 2
+#define PP_IMPTYPE 3
+#define PP_NAME 4
+#define PP_VERSION 5
+#define PP_CONTAINER 6
+#define PP_CHANGE_PASSWORD 7
+#define PP_KEYSET_SEC_DESCR 8
+#define PP_KEY_TYPE_SUBTYPE 10
+#define PP_CONTEXT_INFO 11
+#define PP_KEYEXCHANGE_KEYSIZE 12
+#define PP_SIGNATURE_KEYSIZE 13
+#define PP_KEYEXCHANGE_ALG 14
+#define PP_SIGNATURE_ALG 15
+#define PP_PROVTYPE 16
+#define PP_KEYSTORAGE 17
+#define PP_SYM_KEYSIZE 19
+#define PP_SESSION_KEYSIZE 20
+#define PP_UI_PROMPT 21
+#define PP_ENUMALGS_EX 22
+#define PP_DELETEKEY 24
+#define PP_ENUMMANDROOTS 25
+#define PP_ENUMELECTROOTS 26
+#define PP_KEYSET_TYPE 27
+#define PP_ADMIN_PIN 31
+#define PP_KEYEXCHANGE_PIN 32
+#define PP_SIGNATURE_PIN 33
+#define PP_SIG_KEYSIZE_INC 34
+#define PP_KEYX_KEYSIZE_INC 35
+#define PP_UNIQUE_CONTAINER 36
+#define PP_SGC_INFO 37
+#define PP_USE_HARDWARE_RNG 38
+#define PP_KEYSPEC 39
+#define PP_ENUMEX_SIGNING_PROT 40
+#define PP_CRYPT_COUNT_KEY_USE 41
+#define PP_USER_CERTSTORE 42
+#define PP_SMARTCARD_READER 43
+#define PP_SMARTCARD_GUID 45
+#define PP_ROOT_CERTSTORE 46
+
+/* Values returned by CryptGetProvParam of PP_KEYSTORAGE */
+#define CRYPT_SEC_DESCR 0x00000001
+#define CRYPT_PSTORE 0x00000002
+#define CRYPT_UI_PROMPT 0x00000004
+
+/* Crypt{Get/Set}KeyParam */
+#define KP_IV 1
+#define KP_SALT 2
+#define KP_PADDING 3
+#define KP_MODE 4
+#define KP_MODE_BITS 5
+#define KP_PERMISSIONS 6
+#define KP_ALGID 7
+#define KP_BLOCKLEN 8
+#define KP_KEYLEN 9
+#define KP_SALT_EX 10
+#define KP_P 11
+#define KP_G 12
+#define KP_Q 13
+#define KP_X 14
+#define KP_Y 15
+#define KP_RA 16
+#define KP_RB 17
+#define KP_INFO 18
+#define KP_EFFECTIVE_KEYLEN 19
+#define KP_SCHANNEL_ALG 20
+#define KP_CLIENT_RANDOM 21
+#define KP_SERVER_RANDOM 22
+#define KP_RP 23
+#define KP_PRECOMP_MD5 24
+#define KP_PRECOMP_SHA 25
+#define KP_CERTIFICATE 26
+#define KP_CLEAR_KEY 27
+#define KP_PUB_EX_LEN 28
+#define KP_PUB_EX_VAL 29
+#define KP_KEYVAL 30
+#define KP_ADMIN_PIN 31
+#define KP_KEYEXCHANGE_PIN 32
+#define KP_SIGNATURE_PIN 33
+#define KP_PREHASH 34
+#define KP_ROUNDS 35
+#define KP_OAEP_PARAMS 36
+#define KP_CMS_KEY_INFO 37
+#define KP_CMS_DH_KEY_INFO 38
+#define KP_PUB_PARAMS 39
+#define KP_VERIFY_PARAMS 40
+#define KP_HIGHEST_VERSION 41
+#define KP_GET_USE_COUNT 42
+
+/* Values for KP_PADDING */
+#define PKCS5_PADDING 1
+#define RANDOM_PADDING 2
+#define ZERO_PADDING 3
+
+/* CryptSignHash/CryptVerifySignature */
+#define CRYPT_NOHASHOID 0x00000001
+#define CRYPT_TYPE2_FORMAT 0x00000002
+#define CRYPT_X931_FORMAT 0x00000004
+
+/* Crypt{Get,Set}HashParam */
+#define HP_ALGID 0x0001
+#define HP_HASHVAL 0x0002
+#define HP_HASHSIZE 0x0004
+#define HP_HMAC_INFO 0x0005
+#define HP_TLS1PRF_LABEL 0x0006
+#define HP_TLS1PRF_SEED 0x0007
+
+/* Crypt{Get,Set}KeyParam */
+#define CRYPT_MODE_CBC 1
+#define CRYPT_MODE_ECB 2
+#define CRYPT_MODE_OFB 3
+#define CRYPT_MODE_CFB 4
+
+#define CRYPT_ENCRYPT 0x0001
+#define CRYPT_DECRYPT 0x0002
+#define CRYPT_EXPORT 0x0004
+#define CRYPT_READ 0x0008
+#define CRYPT_WRITE 0x0010
+#define CRYPT_MAC 0x0020
+#define CRYPT_EXPORT_KEY 0x0040
+#define CRYPT_IMPORT_KEY 0x0080
+#define CRYPT_ARCHIVE 0x0100
+
+/* Crypt*Key */
+#define CRYPT_EXPORTABLE 0x00000001
+#define CRYPT_USER_PROTECTED 0x00000002
+#define CRYPT_CREATE_SALT 0x00000004
+#define CRYPT_UPDATE_KEY 0x00000008
+#define CRYPT_NO_SALT 0x00000010
+#define CRYPT_PREGEN 0x00000040
+#define CRYPT_SERVER 0x00000400
+#define CRYPT_ARCHIVABLE 0x00004000
+
+/* CryptExportKey */
+#define CRYPT_SSL2_FALLBACK 0x00000002
+#define CRYPT_DESTROYKEY 0x00000004
+#define CRYPT_OAEP 0x00000040
+
+/* CryptHashSessionKey */
+#define CRYPT_LITTLE_ENDIAN 0x00000001
+
+/* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */
+#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x0001
+#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x0002
+/* Crypt{Protect,Unprotect}Data flags */
+#define CRYPTPROTECT_UI_FORBIDDEN 0x0001
+#define CRYPTPROTECT_LOCAL_MACHINE 0x0004
+#define CRYPTPROTECT_AUDIT 0x0010
+#define CRYPTPROTECT_VERIFY_PROTECTION 0x0040
+
+/* Blob Types */
+#define SIMPLEBLOB 0x1
+#define PUBLICKEYBLOB 0x6
+#define PRIVATEKEYBLOB 0x7
+#define PLAINTEXTKEYBLOB 0x8
+#define OPAQUEKEYBLOB 0x9
+#define PUBLICKEYBLOBEX 0xA
+#define SYMMETRICWRAPKEYBLOB 0xB
+
+#define CUR_BLOB_VERSION 2
+
+/* cert store provider types */
+#define CERT_STORE_PROV_MSG ((LPCSTR)1)
+#define CERT_STORE_PROV_MEMORY ((LPCSTR)2)
+#define CERT_STORE_PROV_FILE ((LPCSTR)3)
+#define CERT_STORE_PROV_REG ((LPCSTR)4)
+#define CERT_STORE_PROV_PKCS7 ((LPCSTR)5)
+#define CERT_STORE_PROV_SERIALIZED ((LPCSTR)6)
+#define CERT_STORE_PROV_FILENAME_A ((LPCSTR)7)
+#define CERT_STORE_PROV_FILENAME_W ((LPCSTR)8)
+#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)9)
+#define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)10)
+#define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
+#define CERT_STORE_PROV_COLLECTION ((LPCSTR)11)
+#define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR)12)
+#define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR)13)
+#define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W
+#define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR)14)
+#define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W
+#define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR)15)
+#define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W
+#define CERT_STORE_PROV_LDAP_W ((LPCSTR)16)
+#define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W
+
+#define sz_CERT_STORE_PROV_MEMORY "Memory"
+#define sz_CERT_STORE_PROV_FILENAME_W "File"
+#define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
+#define sz_CERT_STORE_PROV_SYSTEM_W "System"
+#define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
+#define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
+#define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
+#define sz_CERT_STORE_PROV_COLLECTION "Collection"
+#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
+#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
+#define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
+#define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
+#define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
+#define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
+#define sz_CERT_STORE_PROV_LDAP_W "Ldap"
+#define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
+
+/* types for CertOpenStore dwEncodingType */
+#define CERT_ENCODING_TYPE_MASK 0x0000ffff
+#define CMSG_ENCODING_TYPE_MASK 0xffff0000
+#define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK)
+#define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK)
+
+#define CRYPT_ASN_ENCODING 0x00000001
+#define CRYPT_NDR_ENCODING 0x00000002
+#define X509_ASN_ENCODING 0x00000001
+#define X509_NDR_ENCODING 0x00000002
+#define PKCS_7_ASN_ENCODING 0x00010000
+#define PKCS_7_NDR_ENCODING 0x00020000
+
+/* system store locations */
+#define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000
+#define CERT_SYSTEM_STORE_LOCATION_SHIFT 16
+
+/* system store location ids */
+/* hkcu */
+#define CERT_SYSTEM_STORE_CURRENT_USER_ID 1
+/* hklm */
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2
+/* hklm\Software\Microsoft\Cryptography\Services */
+#define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4
+#define CERT_SYSTEM_STORE_SERVICES_ID 5
+/* HKEY_USERS */
+#define CERT_SYSTEM_STORE_USERS_ID 6
+/* hkcu\Software\Policies\Microsoft\SystemCertificates */
+#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7
+/* hklm\Software\Policies\Microsoft\SystemCertificates */
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8
+/* hklm\Software\Microsoft\EnterpriseCertificates */
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9
+
+/* system store location values */
+#define CERT_SYSTEM_STORE_CURRENT_USER \
+ (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE \
+ (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_CURRENT_SERVICE \
+ (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_SERVICES \
+ (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_USERS \
+ (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \
+ (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \
+ (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \
+ (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT)
+
+#if defined(__GNUC__)
+#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH (const WCHAR[])\
+ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t',\
+ '\\','S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',\
+ 0 }
+#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH (const WCHAR[])\
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
+ 't','i','f','i','c','a','t','e','s',0 }
+#elif defined(_MSC_VER)
+#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \
+ L"Software\\Microsoft\\SystemCertificates"
+#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \
+ L"Software\\Policies\\Microsoft\\SystemCertificates"
+#else
+static const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
+ 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 };
+static const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
+ 't','i','f','i','c','a','t','e','s',0 };
+#endif
+
+#if defined(__GNUC__)
+#define CERT_EFSBLOB_REGPATH (const WCHAR[])\
+{'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
+ 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 }
+#define CERT_EFSBLOB_VALUE_NAME (const WCHAR[]) {'E','F','S','B','l','o','b',0 }
+#elif defined(_MSC_VER)
+#define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS"
+#define CERT_EFSBLOB_VALUE_NAME L"EFSBlob"
+#else
+static const WCHAR CERT_EFSBLOB_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
+ 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 };
+static const CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 };
+#endif
+
+#if defined(__GNUC__)
+#define CERT_PROT_ROOT_FLAGS_REGPATH (const WCHAR[])\
+{'\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o','t',\
+ 's',0 }
+#define CERT_PROT_ROOT_FLAGS_VALUE_NAME (const WCHAR[])\
+{'F','l','a','g','s',0 }
+#elif defined(_MSC_VER)
+#define CERT_PROT_ROOT_FLAGS_REGPATH L"\\Root\\ProtectedRoots"
+#define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags"
+#else
+static const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] =
+ { '\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o',
+ 't','s',0 };
+static const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 };
+#endif
+
+#define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x01
+#define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x02
+#define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x04
+#define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x08
+#define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10
+#define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20
+
+#if defined(__GNUC__)
+#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH (const WCHAR[])\
+{'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',\
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',\
+ 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',\
+ 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 }
+#elif defined(_MSC_VER)
+#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \
+ CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
+#else
+static const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\',
+ 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r',
+ 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d',
+ 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 };
+#endif
+
+#if defined(__GNUC__)
+#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH (const WCHAR[])\
+{'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',\
+ 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',\
+ 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',\
+ 'S','a','f','e','r',0 }
+#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME (const WCHAR[])\
+{'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
+#elif defined(_MSC_VER)
+#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \
+ CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer"
+#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags"
+#else
+static const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] =
+ {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
+ 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\',
+ 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\',
+ 'S','a','f','e','r',0 };
+static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] =
+ { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 };
+#endif
+
+#define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x00000000
+#define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x00000001
+#define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002
+#define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x00000003
+#define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x00000100
+#define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x00000200
+
+/* flags for CertOpenStore dwFlags */
+#define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x00000001
+#define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x00000002
+#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004
+#define CERT_STORE_DELETE_FLAG 0x00000010
+#define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x00000020
+#define CERT_STORE_SHARE_STORE_FLAG 0x00000040
+#define CERT_STORE_SHARE_CONTEXT_FLAG 0x00000080
+#define CERT_STORE_MANIFOLD_FLAG 0x00000100
+#define CERT_STORE_ENUM_ARCHIVED_FLAG 0x00000200
+#define CERT_STORE_UPDATE_KEYID_FLAG 0x00000400
+#define CERT_STORE_BACKUP_RESTORE_FLAG 0x00000800
+#define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x00001000
+#define CERT_STORE_CREATE_NEW_FLAG 0x00002000
+#define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000
+#define CERT_STORE_READONLY_FLAG 0x00008000
+
+#define CERT_REGISTRY_STORE_REMOTE_FLAG 0x00010000
+#define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x00020000
+#define CERT_REGISTRY_STORE_ROAMING_FLAG 0x00040000
+#define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000
+#define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x01000000
+#define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000
+
+#define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000
+
+/* CertCloseStore dwFlags */
+#define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001
+#define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002
+
+/* dwAddDisposition */
+#define CERT_STORE_ADD_NEW 1
+#define CERT_STORE_ADD_USE_EXISTING 2
+#define CERT_STORE_ADD_REPLACE_EXISTING 3
+#define CERT_STORE_ADD_ALWAYS 4
+#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5
+#define CERT_STORE_ADD_NEWER 6
+#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7
+
+/* Installable OID function defs */
+#define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv"
+#define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject"
+#define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject"
+#define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx"
+#define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx"
+#define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateComObject"
+#define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation"
+#define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage"
+#define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject"
+#define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo"
+#define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
+#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx"
+#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx"
+#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
+#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
+#define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \
+ "CertDllVerifyCertificateChainPolicy"
+#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
+#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
+#define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
+#define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans"
+#define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans"
+
+#define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID"
+#define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
+#if defined(__GNUC__)
+# define CRYPT_OID_REG_DLL_VALUE_NAME (const WCHAR []){ 'D','l','l',0 }
+# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME \
+ (const WCHAR []){ 'F','u','n','c','N','a','m','e',0 }
+# define CRYPT_OID_REG_FLAGS_VALUE_NAME \
+ (const WCHAR []){ 'C','r','y','p','t','F','l','a','g','s',0 }
+#elif defined(_MSC_VER)
+# define CRYPT_OID_REG_DLL_VALUE_NAME L"Dll"
+# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName"
+# define CRYPT_OID_REG_FLAGS_VALUE_NAME L"CryptFlags"
+#else
+static const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 };
+static const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] =
+ { 'F','u','n','c','N','a','m','e',0 };
+static const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] =
+ { 'C','r','y','p','t','F','l','a','g','s',0 };
+#endif
+#define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
+#define CRYPT_DEFAULT_OID "DEFAULT"
+
+#define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1
+
+#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1
+
+#define CRYPT_REGISTER_FIRST_INDEX 0
+#define CRYPT_REGISTER_LAST_INDEX 0xffffffff
+
+/* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */
+#define CERT_STORE_PROV_EXTERNAL_FLAG 0x1
+#define CERT_STORE_PROV_DELETED_FLAG 0x2
+#define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4
+#define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8
+#define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10
+
+/* function indices */
+#define CERT_STORE_PROV_CLOSE_FUNC 0
+#define CERT_STORE_PROV_READ_CERT_FUNC 1
+#define CERT_STORE_PROV_WRITE_CERT_FUNC 2
+#define CERT_STORE_PROV_DELETE_CERT_FUNC 3
+#define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4
+#define CERT_STORE_PROV_READ_CRL_FUNC 5
+#define CERT_STORE_PROV_WRITE_CRL_FUNC 6
+#define CERT_STORE_PROV_DELETE_CRL_FUNC 7
+#define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8
+#define CERT_STORE_PROV_READ_CTL_FUNC 9
+#define CERT_STORE_PROV_WRITE_CTL_FUNC 10
+#define CERT_STORE_PROV_DELETE_CTL_FUNC 11
+#define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12
+#define CERT_STORE_PROV_CONTROL_FUNC 13
+#define CERT_STORE_PROV_FIND_CERT_FUNC 14
+#define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 15
+#define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16
+#define CERT_STORE_PROV_FIND_CRL_FUNC 17
+#define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 18
+#define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 19
+#define CERT_STORE_PROV_FIND_CTL_FUNC 20
+#define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21
+#define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22
+
+/* physical store dwFlags, also used by CertAddStoreToCollection as
+ * dwUpdateFlags
+ */
+#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1
+#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2
+#define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG 0x4
+#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8
+
+/* dwFlag values for CertEnumPhysicalStore callback */
+#define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1
+
+/* predefined store names */
+#if defined(__GNUC__)
+# define CERT_PHYSICAL_STORE_DEFAULT_NAME (const WCHAR[])\
+ {'.','D','e','f','a','u','l','t','0'}
+# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME (const WCHAR[])\
+ {'.','G','r','o','u','p','P','o','l','i','c','y',0}
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME (const WCHAR[])\
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}
+# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME (const WCHAR[])\
+ {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME (const WCHAR[])\
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',\
+ 'P','o','l','i','c','y',0}
+# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME (const WCHAR[])\
+ {'.','E','n','t','e','r','p','r','i','s','e',0}
+# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME (const WCHAR[])\
+ {'.','A','u','t','h','R','o','o','t',0}
+#elif defined(_MSC_VER)
+# define CERT_PHYSICAL_STORE_DEFAULT_NAME \
+ L".Default"
+# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \
+ L".GroupPolicy"
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \
+ L".LocalMachine"
+# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \
+ L".UserCertificate"
+# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \
+ L".LocalMachineGroupPolicy"
+# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \
+ L".Enterprise"
+# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \
+ L".AuthRoot"
+#else
+static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] =
+ {'.','D','e','f','a','u','l','t','0'};
+static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] =
+ {'.','G','r','o','u','p','P','o','l','i','c','y',0};
+static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] =
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e',0};
+static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] =
+ {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0};
+static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] =
+ {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p',
+ 'P','o','l','i','c','y',0};
+static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] =
+ {'.','E','n','t','e','r','p','r','i','s','e',0};
+static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] =
+ {'.','A','u','t','h','R','o','o','t',0};
+#endif
+
+/* cert system store flags */
+#define CERT_SYSTEM_STORE_MASK 0xffff0000
+#define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000
+
+/* CertFindChainInStore dwFindType types */
+#define CERT_CHAIN_FIND_BY_ISSUER 1
+
+/* CertSaveStore dwSaveAs values */
+#define CERT_STORE_SAVE_AS_STORE 1
+#define CERT_STORE_SAVE_AS_PKCS7 2
+/* CertSaveStore dwSaveTo values */
+#define CERT_STORE_SAVE_TO_FILE 1
+#define CERT_STORE_SAVE_TO_MEMORY 2
+#define CERT_STORE_SAVE_TO_FILENAME_A 3
+#define CERT_STORE_SAVE_TO_FILENAME_W 4
+#define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W
+
+/* CERT_INFO versions/flags */
+#define CERT_V1 0
+#define CERT_V2 1
+#define CERT_V3 2
+#define CERT_INFO_VERSION_FLAG 1
+#define CERT_INFO_SERIAL_NUMBER_FLAG 2
+#define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 3
+#define CERT_INFO_ISSUER_FLAG 4
+#define CERT_INFO_NOT_BEFORE_FLAG 5
+#define CERT_INFO_NOT_AFTER_FLAG 6
+#define CERT_INFO_SUBJECT_FLAG 7
+#define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8
+#define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 9
+#define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 10
+#define CERT_INFO_EXTENSION_FLAG 11
+
+/* CERT_REQUEST_INFO versions */
+#define CERT_REQUEST_V1 0
+
+/* CERT_KEYGEN_REQUEST_INFO versions */
+#define CERT_KEYGEN_REQUEST_V1 0
+
+/* CRL versions */
+#define CRL_V1 0
+#define CRL_V2 1
+
+/* CTL versions */
+#define CTL_V1 0
+
+/* Certificate, CRL, CTL property IDs */
+#define CERT_KEY_PROV_HANDLE_PROP_ID 1
+#define CERT_KEY_PROV_INFO_PROP_ID 2
+#define CERT_SHA1_HASH_PROP_ID 3
+#define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID
+#define CERT_MD5_HASH_PROP_ID 4
+#define CERT_KEY_CONTEXT_PROP_ID 5
+#define CERT_KEY_SPEC_PROP_ID 6
+#define CERT_IE30_RESERVED_PROP_ID 7
+#define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8
+#define CERT_ENHKEY_USAGE_PROP_ID 9
+#define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID
+#define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10
+#define CERT_FRIENDLY_NAME_PROP_ID 11
+#define CERT_PVK_FILE_PROP_ID 12
+#define CERT_DESCRIPTION_PROP_ID 13
+#define CERT_ACCESS_STATE_PROP_ID 14
+#define CERT_SIGNATURE_HASH_PROP_ID 15
+#define CERT_SMART_CARD_DATA_PROP_ID 16
+#define CERT_EFS_PROP_ID 17
+#define CERT_FORTEZZA_DATA_PROP 18
+#define CERT_ARCHIVED_PROP_ID 19
+#define CERT_KEY_IDENTIFIER_PROP_ID 20
+#define CERT_AUTO_ENROLL_PROP_ID 21
+#define CERT_PUBKEY_ALG_PARA_PROP_ID 22
+#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23
+#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24
+#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25
+#define CERT_ENROLLMENT_PROP_ID 26
+#define CERT_DATE_STAMP_PROP_ID 27
+#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28
+#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29
+#define CERT_EXTENDED_ERROR_INFO_PROP_ID 30
+/* 31 -- unused?
+ 32 -- cert prop id
+ 33 -- CRL prop id
+ 34 -- CTL prop id
+ 35 -- KeyId prop id
+ 36-63 -- reserved
+ */
+#define CERT_RENEWAL_PROP_ID 64
+#define CERT_ARCHIVED_KEY_HASH_PROP_ID 65
+#define CERT_AUTO_ENROLL_RETRY_PROP_ID 66
+#define CERT_AIA_URL_RETRIEVED_PROP_ID 67
+#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68
+#define CERT_BACKED_UP_PROP_ID 69
+#define CERT_OCSP_RESPONSE_PROP_ID 70
+#define CERT_REQUEST_ORIGINATOR_PROP_ID 71
+#define CERT_SOURCE_LOCATION_PROP_ID 72
+#define CERT_SOURCE_URL_PROP_ID 73
+#define CERT_NEW_KEY_PROP_ID 74
+#define CERT_OCSP_CACHE_PREFIX_PROP_ID 75
+#define CERT_SMART_CARD_ROOT_INFO_PROP_ID 76
+#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 77
+#define CERT_NCRYPT_KEY_HANDLE_PROP_ID 78
+#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79
+#define CERT_SUBJECT_INFO_ACCESS_PROP_ID 80
+#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81
+#define CERT_CA_DISABLE_CRL_PROP_ID 82
+#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 83
+#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84
+
+#define CERT_FIRST_RESERVED_PROP_ID 85
+#define CERT_LAST_RESERVED_PROP_ID 0x00007fff
+#define CERT_FIRST_USER_PROP_ID 0x00008000
+#define CERT_LAST_USER_PROP_ID 0x0000ffff
+
+#define IS_CERT_HASH_PROP_ID(x) \
+ ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \
+ (x) == CERT_SIGNATURE_HASH_PROP_ID)
+
+#define IS_PUBKEY_HASH_PROP_ID(x) \
+ ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
+ (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID)
+
+#define IS_CHAIN_HASH_PROP_ID(x) \
+ ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \
+ (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \
+ (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \
+ (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID)
+
+/* access state flags */
+#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1
+#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2
+#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
+
+/* CertSetCertificateContextProperty flags */
+#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000
+#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000
+
+/* CERT_RDN attribute dwValueType types */
+#define CERT_RDN_TYPE_MASK 0x000000ff
+#define CERT_RDN_ANY_TYPE 0
+#define CERT_RDN_ENCODED_BLOB 1
+#define CERT_RDN_OCTET_STRING 2
+#define CERT_RDN_NUMERIC_STRING 3
+#define CERT_RDN_PRINTABLE_STRING 4
+#define CERT_RDN_TELETEX_STRING 5
+#define CERT_RDN_T61_STRING 5
+#define CERT_RDN_VIDEOTEX_STRING 6
+#define CERT_RDN_IA5_STRING 7
+#define CERT_RDN_GRAPHIC_STRING 8
+#define CERT_RDN_VISIBLE_STRING 9
+#define CERT_RDN_ISO646_STRING 9
+#define CERT_RDN_GENERAL_STRING 10
+#define CERT_RDN_UNIVERSAL_STRING 11
+#define CERT_RDN_INT4_STRING 11
+#define CERT_RDN_BMP_STRING 12
+#define CERT_RDN_UNICODE_STRING 12
+#define CERT_RDN_UTF8_STRING 13
+
+/* CERT_RDN attribute dwValueType flags */
+#define CERT_RDN_FLAGS_MASK 0xff000000
+#define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000
+#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x4000000
+#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000
+#define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x0100000
+
+#define IS_CERT_RDN_CHAR_STRING(x) \
+ (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
+
+/* CertIsRDNAttrsInCertificateName flags */
+#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1
+#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2
+
+/* CRL reason codes */
+#define CRL_REASON_UNSPECIFIED 0
+#define CRL_REASON_KEY_COMPROMISE 1
+#define CRL_REASON_CA_COMPROMISE 2
+#define CRL_REASON_AFFILIATION_CHANGED 3
+#define CRL_REASON_SUPERSEDED 4
+#define CRL_REASON_CESSATION_OF_OPERATION 5
+#define CRL_REASON_CERTIFICATE_HOLD 6
+#define CRL_REASON_REMOVE_FROM_CRL 8
+
+/* CertControlStore control types */
+#define CERT_STORE_CTRL_RESYNC 1
+#define CERT_STORE_CTRL_NOTIFY_CHANGE 2
+#define CERT_STORE_CTRL_COMMIT 3
+#define CERT_STORE_CTRL_AUTO_RESYNC 4
+#define CERT_STORE_CTRL_CANCEL_NOTIFY 5
+
+#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1
+#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2
+
+/* cert store properties */
+#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000
+
+/* CertCreateContext flags */
+#define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1
+#define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2
+#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4
+#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8
+
+#define CERT_COMPARE_MASK 0xffff
+#define CERT_COMPARE_SHIFT 16
+#define CERT_COMPARE_ANY 0
+#define CERT_COMPARE_SHA1_HASH 1
+#define CERT_COMPARE_HASH CERT_COMPARE_SHA1_HASH
+#define CERT_COMPARE_NAME 2
+#define CERT_COMPARE_ATTR 3
+#define CERT_COMPARE_MD5_HASH 4
+#define CERT_COMPARE_PROPERTY 5
+#define CERT_COMPARE_PUBLIC_KEY 6
+#define CERT_COMPARE_NAME_STR_A 7
+#define CERT_COMPARE_NAME_STR_W 8
+#define CERT_COMPARE_KEY_SPEC 9
+#define CERT_COMPARE_ENHKEY_USAGE 10
+#define CERT_COMPARE_CTL_USAGE CERT_COMPARE_ENHKEY_USAGE
+#define CERT_COMPARE_SUBJECT_CERT 11
+#define CERT_COMPARE_ISSUER_OF 12
+#define CERT_COMPARE_EXISTING 13
+#define CERT_COMPARE_SIGNATURE_HASH 14
+#define CERT_COMPARE_KEY_IDENTIFIER 15
+#define CERT_COMPARE_CERT_ID 16
+#define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17
+#define CERT_COMPARE_PUBKEY_MD5_HASH 18
+
+/* values of dwFindType for CertFind*InStore */
+#define CERT_FIND_ANY \
+ (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SHA1_HASH \
+ (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_MD5_HASH \
+ (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SIGNATURE_HASH \
+ (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
+#define CERT_FIND_KEY_IDENTIFIER \
+ (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
+#define CERT_FIND_HASH CERT_FIND_SHA1_HASH
+#define CERT_FIND_PROPERTY \
+ (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
+#define CERT_FIND_PUBLIC_KEY \
+ (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
+#define CERT_FIND_SUBJECT_NAME \
+ (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_SUBJECT_ATTR \
+ (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_ISSUER_NAME \
+ (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_ISSUER_ATTR \
+ (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_SUBJECT_STR_A \
+ (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_SUBJECT_STR_W \
+ (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
+#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W
+#define CERT_FIND_ISSUER_STR_A \
+ (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_ISSUER_STR_W \
+ (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
+#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W
+#define CERT_FIND_KEY_SPEC \
+ (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
+#define CERT_FIND_ENHKEY_USAGE \
+ (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
+#define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE
+#define CERT_FIND_SUBJECT_CERT \
+ (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
+#define CERT_FIND_ISSUER_OF \
+ (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
+#define CERT_FIND_EXISTING \
+ (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
+#define CERT_FIND_CERT_ID \
+ (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
+#define CERT_FIND_CROSS_CERT_DIST_POINTS \
+ (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
+#define CERT_FIND_PUBKEY_MD5_HASH \
+ (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
+
+#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1
+#define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG 0x1
+#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2
+#define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG 0x2
+#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4
+#define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG 0x4
+#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8
+#define CERT_FIND_NO_CTL_USAGE_FLAG 0x8
+#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10
+#define CERT_FIND_OR_CTL_USAGE_FLAG 0x10
+#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20
+#define CERT_FIND_VALID_CTL_USAGE_FLAG 0x20
+
+#define CRL_FIND_ANY 0
+#define CRL_FIND_ISSUED_BY 1
+#define CRL_FIND_EXISTING 2
+#define CRL_FIND_ISSUED_FOR 3
+
+#define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1
+#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2
+#define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4
+#define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8
+
+typedef struct _CRL_FIND_ISSUED_FOR_PARA
+{
+ PCCERT_CONTEXT pSubjectCert;
+ PCCERT_CONTEXT pIssuerCert;
+} CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA;
+
+#define CTL_FIND_ANY 0
+#define CTL_FIND_SHA1_HASH 1
+#define CTL_FIND_MD5_HASH 2
+#define CTL_FIND_USAGE 3
+#define CTL_FIND_SUBJECT 4
+#define CTL_FIND_EXISTING 5
+
+typedef struct _CTL_FIND_USAGE_PARA
+{
+ DWORD cbSize;
+ CTL_USAGE SubjectUsage;
+ CRYPT_DATA_BLOB ListIdentifier;
+ PCERT_INFO pSigner;
+} CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA;
+
+#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff
+#define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO)-1)
+#define CTL_FIND_SAME_USAGE_FLAG 0x00000001
+
+typedef struct _CTL_FIND_SUBJECT_PARA
+{
+ DWORD cbSize;
+ PCTL_FIND_USAGE_PARA pUsagePara;
+ DWORD dwSubjectType;
+ void *pvSubject;
+} CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA;
+
+/* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */
+#define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1
+
+/* CertAddSerializedElementToStore context types */
+#define CERT_STORE_CERTIFICATE_CONTEXT 1
+#define CERT_STORE_CRL_CONTEXT 2
+#define CERT_STORE_CTL_CONTEXT 3
+#define CERT_STORE_ALL_CONTEXT_FLAG ~0U
+#define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \
+ (1 << CERT_STORE_CERTIFICATE_CONTEXT)
+#define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT)
+#define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT)
+
+/* CryptBinaryToString/CryptStringToBinary flags */
+#define CRYPT_STRING_BASE64HEADER 0x00000000
+#define CRYPT_STRING_BASE64 0x00000001
+#define CRYPT_STRING_BINARY 0x00000002
+#define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003
+#define CRYPT_STRING_HEX 0x00000004
+#define CRYPT_STRING_HEXASCII 0x00000005
+#define CRYPT_STRING_BASE64_ANY 0x00000006
+#define CRYPT_STRING_ANY 0x00000007
+#define CRYPT_STRING_HEX_ANY 0x00000008
+#define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009
+#define CRYPT_STRING_HEXADDR 0x0000000a
+#define CRYPT_STRING_HEXASCIIADDR 0x0000000b
+#define CRYPT_STRING_NOCRLF 0x40000000
+#define CRYPT_STRING_NOCR 0x80000000
+
+/* OIDs */
+#define szOID_RSA "1.2.840.113549"
+#define szOID_PKCS "1.2.840.113549.1"
+#define szOID_RSA_HASH "1.2.840.113549.2"
+#define szOID_RSA_ENCRYPT "1.2.840.113549.3"
+#define szOID_PKCS_1 "1.2.840.113549.1.1"
+#define szOID_PKCS_2 "1.2.840.113549.1.2"
+#define szOID_PKCS_3 "1.2.840.113549.1.3"
+#define szOID_PKCS_4 "1.2.840.113549.1.4"
+#define szOID_PKCS_5 "1.2.840.113549.1.5"
+#define szOID_PKCS_6 "1.2.840.113549.1.6"
+#define szOID_PKCS_7 "1.2.840.113549.1.7"
+#define szOID_PKCS_8 "1.2.840.113549.1.8"
+#define szOID_PKCS_9 "1.2.840.113549.1.9"
+#define szOID_PKCS_10 "1.2.840.113549.1.10"
+#define szOID_PKCS_11 "1.2.840.113549.1.12"
+#define szOID_RSA_RSA "1.2.840.113549.1.1.1"
+#define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA
+#define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA
+#define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA
+#define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
+#define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
+#define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
+#define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
+#define szOID_RSA_SET0AEP_RSA "1.2.840.113549.1.1.6"
+#define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11"
+#define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12"
+#define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13"
+#define szOID_RSA_DH "1.2.840.113549.1.3.1"
+#define szOID_RSA_data "1.2.840.113549.1.7.1"
+#define szOID_RSA_signedData "1.2.840.113549.1.7.2"
+#define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
+#define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
+#define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
+#define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
+#define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
+#define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
+#define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
+#define szOID_RSA_contentType "1.2.840.113549.1.9.3"
+#define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
+#define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
+#define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
+#define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
+#define szOID_RSA_unstructAddr "1.2.840.113549.1.9.9"
+#define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
+#define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
+#define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
+#define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
+#define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
+#define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
+#define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
+#define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
+#define szOID_RSA_MD2 "1.2.840.113549.2.2"
+#define szOID_RSA_MD4 "1.2.840.113549.2.4"
+#define szOID_RSA_MD5 "1.2.840.113549.2.5"
+#define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
+#define szOID_RSA_RC4 "1.2.840.113549.3.4"
+#define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
+#define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
+#define szOID_ANSI_X942 "1.2.840.10046"
+#define szOID_ANSI_X942_DH "1.2.840.10046.2.1"
+#define szOID_X957 "1.2.840.10040"
+#define szOID_X957_DSA "1.2.840.10040.4.1"
+#define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
+#define szOID_DS "2.5"
+#define szOID_DSALG "2.5.8"
+#define szOID_DSALG_CRPT "2.5.8.1"
+#define szOID_DSALG_HASH "2.5.8.2"
+#define szOID_DSALG_SIGN "2.5.8.3"
+#define szOID_DSALG_RSA "2.5.8.1.1"
+#define szOID_OIW "1.3.14"
+#define szOID_OIWSEC "1.3.14.3.2"
+#define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
+#define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
+#define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
+#define szOID_OIWSEC_desECB "1.3.14.3.2.6"
+#define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
+#define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
+#define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
+#define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
+#define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
+#define szOID_OIWSEC_dsa "1.3.14.3.2.12"
+#define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
+#define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
+#define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
+#define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
+#define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
+#define szOID_OIWSEC_sha "1.3.14.3.2.18"
+#define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
+#define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
+#define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
+#define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
+#define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
+#define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
+#define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
+#define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
+#define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
+#define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
+#define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
+#define szOID_OIWDIR "1.3.14.7.2"
+#define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
+#define szOID_OIWDIR_HASH "1.3.14.7.2.2"
+#define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
+#define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
+#define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
+#define szOID_INFOSEC "2.16.840.1.101.2.1"
+#define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
+#define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
+#define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
+#define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
+#define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
+#define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
+#define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
+#define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
+#define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
+#define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
+#define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
+#define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
+#define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
+#define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
+#define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
+#define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
+#define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
+#define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
+#define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
+#define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
+#define szOID_INFOSEC_mosaicUpdateInteg "2.16.840.1.101.2.1.1.21"
+#define szOID_COMMON_NAME "2.5.4.3"
+#define szOID_SUR_NAME "2.5.4.4"
+#define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
+#define szOID_COUNTRY_NAME "2.5.4.6"
+#define szOID_LOCALITY_NAME "2.5.4.7"
+#define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
+#define szOID_STREET_ADDRESS "2.5.4.9"
+#define szOID_ORGANIZATION_NAME "2.5.4.10"
+#define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
+#define szOID_TITLE "2.5.4.12"
+#define szOID_DESCRIPTION "2.5.4.13"
+#define szOID_SEARCH_GUIDE "2.5.4.14"
+#define szOID_BUSINESS_CATEGORY "2.5.4.15"
+#define szOID_POSTAL_ADDRESS "2.5.4.16"
+#define szOID_POSTAL_CODE "2.5.4.17"
+#define szOID_POST_OFFICE_BOX "2.5.4.18"
+#define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
+#define szOID_TELEPHONE_NUMBER "2.5.4.20"
+#define szOID_TELEX_NUMBER "2.5.4.21"
+#define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22"
+#define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23"
+#define szOID_X21_ADDRESS "2.5.4.24"
+#define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25"
+#define szOID_REGISTERED_ADDRESS "2.5.4.26"
+#define szOID_DESTINATION_INDICATOR "2.5.4.27"
+#define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28"
+#define szOID_PRESENTATION_ADDRESS "2.5.4.29"
+#define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
+#define szOID_MEMBER "2.5.4.31"
+#define szOID_OWNER "2.5.4.32"
+#define szOID_ROLE_OCCUPANT "2.5.4.33"
+#define szOID_SEE_ALSO "2.5.4.34"
+#define szOID_USER_PASSWORD "2.5.4.35"
+#define szOID_USER_CERTIFICATE "2.5.4.36"
+#define szOID_CA_CERTIFICATE "2.5.4.37"
+#define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38"
+#define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39"
+#define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40"
+#define szOID_GIVEN_NAME "2.5.4.42"
+#define szOID_INITIALS "2.5.4.43"
+#define szOID_DN_QUALIFIER "2.5.4.46"
+#define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
+#define szOID_KEY_ATTRIBUTES "2.5.29.2"
+#define szOID_CERT_POLICIES_95 "2.5.29.3"
+#define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
+#define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5"
+#define szOID_SUBJECT_ALT_NAME "2.5.29.7"
+#define szOID_ISSUER_ALT_NAME "2.5.29.8"
+#define szOID_SUBJECT_DIR_ATTRS "2.5.29.9"
+#define szOID_BASIC_CONSTRAINTS "2.5.29.10"
+#define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
+#define szOID_KEY_USAGE "2.5.29.15"
+#define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16"
+#define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
+#define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
+#define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
+#define szOID_CRL_NUMBER "2.5.29.20"
+#define szOID_CRL_REASON_CODE "2.5.29.21"
+#define szOID_REASON_CODE_HOLD "2.5.29.23"
+#define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
+#define szOID_ISSUING_DIST_POINT "2.5.29.28"
+#define szOID_NAME_CONSTRAINTS "2.5.29.30"
+#define szOID_CRL_DIST_POINTS "2.5.29.31"
+#define szOID_CERT_POLICIES "2.5.29.32"
+#define szOID_ANY_CERT_POLICY "2.5.29.32.0"
+#define szOID_POLICY_MAPPINGS "2.5.29.33"
+#define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
+#define szOID_POLICY_CONSTRAINTS "2.5.29.36"
+#define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
+#define szOID_FRESHEST_CRL "2.5.29.46"
+#define szOID_INHIBIT_ANY_POLICY "2.5.29.54"
+#define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
+#define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20"
+#define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21"
+#define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
+#define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2"
+#define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1"
+#define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2"
+#ifndef szOID_SERVER_GATED_CRYPTO
+#define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3"
+#endif
+#ifndef szOID_SGC_NETSCAPE
+#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
+#endif
+#define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4"
+#define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1"
+#define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5"
+#define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6"
+#define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7"
+#define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8"
+#define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9"
+#define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10"
+#define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11"
+#define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12"
+#define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13"
+#define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14"
+#define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1"
+#ifndef szOID_DRM
+#define szOID_DRM "1.3.6.1.4.1.311.10.5.1"
+#endif
+#ifndef szOID_DRM_INDIVIDUALIZATION
+#define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2"
+#endif
+#ifndef szOID_LICENSES
+#define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1"
+#endif
+#ifndef szOID_LICENSE_SERVER
+#define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2"
+#endif
+#define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1"
+#define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
+#define szOID_CTL "1.3.6.1.4.1.311.10.1"
+#define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1"
+#define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1"
+#define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1"
+#define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
+#define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2"
+#define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3"
+#define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
+#define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2"
+#define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1"
+#define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2"
+#define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1"
+#ifndef szOID_KP_SMARTCARD_LOGON
+#define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2"
+#endif
+#ifndef szOID_NT_PRINCIPAL_NAME
+#define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3"
+#endif
+#define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3"
+#ifndef szOID_CERTSRV_CA_VERSION
+#define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1"
+#endif
+#define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2"
+#define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
+#define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
+#define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5"
+#define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6"
+#define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
+#define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8"
+#define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9"
+#define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
+#define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
+#define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
+#define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13"
+#define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14"
+#define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15"
+#define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16"
+#define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17"
+#define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19"
+#define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20"
+#define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21"
+#define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22"
+#define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1"
+#define szOID_PKIX "1.3.6.1.5.5.7"
+#define szOID_PKIX_PE "1.3.6.1.5.5.7.1"
+#define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
+#define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1"
+#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
+#define szOID_PKIX_KP "1.3.6.1.5.5.7.3"
+#define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
+#define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
+#define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3"
+#define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4"
+#define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5"
+#define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6"
+#define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7"
+#define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8"
+#define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
+#define szOID_CMC "1.3.6.1.5.5.7.7"
+#define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1"
+#define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2"
+#define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3"
+#define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4"
+#define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5"
+#define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6"
+#define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7"
+#define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8"
+#define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9"
+#define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10"
+#define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11"
+#define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15"
+#define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16"
+#define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17"
+#define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18"
+#define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19"
+#define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21"
+#define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22"
+#define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23"
+#define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2"
+#define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3"
+#define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48"
+#define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1"
+#define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2"
+#define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2"
+
+#ifndef szOID_SERIALIZED
+#define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1"
+#endif
+
+#ifndef szOID_PRODUCT_UPDATE
+#define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1"
+#endif
+
+#define szOID_NETSCAPE "2.16.840.1.113730"
+#define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1"
+#define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1"
+#define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2"
+#define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3"
+#define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4"
+#define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7"
+#define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8"
+#define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12"
+#define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13"
+#define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2"
+#define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5"
+
+/* Bits for szOID_NETSCAPE_CERT_TYPE */
+#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80
+#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40
+#define NETSCAPE_SMIME_CERT_TYPE 0x20
+#define NETSCAPE_SIGN_CERT_TYPE 0x10
+#define NETSCAPE_SSL_CA_CERT_TYPE 0x04
+#define NETSCAPE_SMIME_CA_CERT_TYPE 0x02
+#define NETSCAPE_SIGN_CA_CERT_TYPE 0x01
+
+#define CRYPT_ENCODE_DECODE_NONE 0
+#define X509_CERT ((LPCSTR)1)
+#define X509_CERT_TO_BE_SIGNED ((LPCSTR)2)
+#define X509_CERT_CRL_TO_BE_SIGNED ((LPCSTR)3)
+#define X509_CERT_REQUEST_TO_BE_SIGNED ((LPCSTR)4)
+#define X509_EXTENSIONS ((LPCSTR)5)
+#define X509_NAME_VALUE ((LPCSTR)6)
+#define X509_ANY_STRING X509_NAME_VALUE
+#define X509_NAME ((LPCSTR)7)
+#define X509_PUBLIC_KEY_INFO ((LPCSTR)8)
+#define X509_AUTHORITY_KEY_ID ((LPCSTR)9)
+#define X509_KEY_ATTRIBUTES ((LPCSTR)10)
+#define X509_KEY_USAGE_RESTRICTION ((LPCSTR)11)
+#define X509_ALTERNATE_NAME ((LPCSTR)12)
+#define X509_BASIC_CONSTRAINTS ((LPCSTR)13)
+#define X509_KEY_USAGE ((LPCSTR)14)
+#define X509_BASIC_CONSTRAINTS2 ((LPCSTR)15)
+#define X509_CERT_POLICIES ((LPCSTR)16)
+#define PKCS_UTC_TIME ((LPCSTR)17)
+#define PKCS_TIME_REQUEST ((LPCSTR)18)
+#define RSA_CSP_PUBLICKEYBLOB ((LPCSTR)19)
+#define X509_UNICODE_NAME ((LPCSTR)20)
+#define X509_KEYGEN_REQUEST_TO_BE_SIGNED ((LPCSTR)21)
+#define PKCS_ATTRIBUTE ((LPCSTR)22)
+#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY ((LPCSTR)23)
+#define X509_UNICODE_NAME_VALUE ((LPCSTR)24)
+#define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE
+#define X509_OCTET_STRING ((LPCSTR)25)
+#define X509_BITS ((LPCSTR)26)
+#define X509_INTEGER ((LPCSTR)27)
+#define X509_MULTI_BYTE_INTEGER ((LPCSTR)28)
+#define X509_ENUMERATED ((LPCSTR)29)
+#define X509_CRL_REASON_CODE X509_ENUMERATED
+#define X509_CHOICE_OF_TIME ((LPCSTR)30)
+#define X509_AUTHORITY_KEY_ID2 ((LPCSTR)31)
+#define X509_AUTHORITY_INFO_ACCESS ((LPCSTR)32)
+#define PKCS_CONTENT_INFO ((LPCSTR)33)
+#define X509_SEQUENCE_OF_ANY ((LPCSTR)34)
+#define X509_CRL_DIST_POINTS ((LPCSTR)35)
+#define X509_ENHANCED_KEY_USAGE ((LPCSTR)36)
+#define PKCS_CTL ((LPCSTR)37)
+#define X509_MULTI_BYTE_UINT ((LPCSTR)38)
+#define X509_DSS_PUBLICKEY X509_MULTI_BYTE_UINT
+#define X509_DSS_PARAMETERS ((LPCSTR)39)
+#define X509_DSS_SIGNATURE ((LPCSTR)40)
+#define PKCS_RC2_CBC_PARAMETERS ((LPCSTR)41)
+#define PKCS_SMIME_CAPABILITIES ((LPCSTR)42)
+#define PKCS_RSA_PRIVATE_KEY ((LPCSTR)43)
+#define PKCS_PRIVATE_KEY_INFO ((LPCSTR)44)
+#define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR)45)
+#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46)
+#define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT
+#define X509_DH_PARAMETERS ((LPCSTR)47)
+#define PKCS_ATTRIBUTES ((LPCSTR)48)
+#define PKCS_SORTED_CTL ((LPCSTR)49)
+#define X942_DH_PARAMETERS ((LPCSTR)50)
+#define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR)51)
+#define X942_OTHER_INFO ((LPCSTR)52)
+#define X509_CERT_PAIR ((LPCSTR)53)
+#define X509_ISSUING_DIST_POINT ((LPCSTR)54)
+#define X509_NAME_CONSTRAINTS ((LPCSTR)55)
+#define X509_POLICY_MAPPINGS ((LPCSTR)56)
+#define X509_POLICY_CONSTRAINTS ((LPCSTR)57)
+#define X509_CROSS_CERT_DIST_POINTS ((LPCSTR)58)
+#define CMC_DATA ((LPCSTR)59)
+#define CMC_RESPONSE ((LPCSTR)60)
+#define CMC_STATUS ((LPCSTR)61)
+#define CMC_ADD_EXTENSIONS ((LPCSTR)62)
+#define CMC_ADD_ATTRIBUTES ((LPCSTR)63)
+#define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64)
+#define PKCS7_SIGNER_INFO ((LPCSTR)500)
+#define CMS_SIGNER_INFO ((LPCSTR)501)
+
+/* encode/decode flags */
+#define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008
+#define CRYPT_ENCODE_ALLOC_FLAG 0x08000
+#define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000
+#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \
+ CERT_RDN_ENABLE_T61_UNICODE_FLAG
+#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \
+ CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
+#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \
+ CERT_RDN_DISABLE_CHECK_TYPE_FLAG
+
+#define CRYPT_DECODE_NOCOPY_FLAG 0x00001
+#define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x00002
+#define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x00004
+#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008
+#define CRYPT_DECODE_ALLOC_FLAG 0x08000
+#define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \
+ CERT_RDN_DISABLE_IE4_UTF8_FLAG
+
+#define CERT_STORE_SIGNATURE_FLAG 0x00000001
+#define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002
+#define CERT_STORE_REVOCATION_FLAG 0x00000004
+#define CERT_STORE_NO_CRL_FLAG 0x00010000
+#define CERT_STORE_NO_ISSUER_FLAG 0x00020000
+
+#define CERT_STORE_BASE_CRL_FLAG 0x00000100
+#define CERT_STORE_DELTA_CRL_FLAG 0x00000200
+
+/* subject types for CryptVerifyCertificateSignatureEx */
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2
+#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3
+
+/* issuer types for CryptVerifyCertificateSignatureEx */
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3
+#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4
+
+#define CRYPT_GET_URL_FROM_PROPERTY 0x00000001
+#define CRYPT_GET_URL_FROM_EXTENSION 0x00000002
+#define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004
+#define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x00000008
+
+/* Certificate name string types and flags */
+#define CERT_SIMPLE_NAME_STR 1
+#define CERT_OID_NAME_STR 2
+#define CERT_X500_NAME_STR 3
+#define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000
+#define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000
+#define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000
+#define CERT_NAME_STR_CRLF_FLAG 0x08000000
+#define CERT_NAME_STR_COMMA_FLAG 0x04000000
+#define CERT_NAME_STR_REVERSE_FLAG 0x02000000
+#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000
+#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x00020000
+#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x00010000
+
+#define CERT_NAME_EMAIL_TYPE 1
+#define CERT_NAME_RDN_TYPE 2
+#define CERT_NAME_ATTR_TYPE 3
+#define CERT_NAME_SIMPLE_DISPLAY_TYPE 4
+#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5
+#define CERT_NAME_DNS_TYPE 6
+#define CERT_NAME_URL_TYPE 7
+#define CERT_NAME_UPN_TYPE 8
+
+#define CERT_NAME_ISSUER_FLAG 0x00000001
+#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000
+
+/* CryptFormatObject flags */
+#define CRYPT_FORMAT_STR_MULTI_LINE 0x0001
+#define CRYPT_FORMAT_STR_NO_HEX 0x0010
+
+#define CRYPT_FORMAT_SIMPLE 0x0001
+#define CRYPT_FORMAT_X509 0x0002
+#define CRYPT_FORMAT_OID 0x0004
+#define CRYPT_FORMAT_RDN_SEMICOLON 0x0100
+#define CRYPT_FORMAT_RDN_CRLF 0x0200
+#define CRYPT_FORMAT_RDN_UNQUOTE 0x0400
+#define CRYPT_FORMAT_RDN_REVERSE 0x0800
+
+#define CRYPT_FORMAT_COMMA 0x1000
+#define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON
+#define CRYPT_FORMAT_CRLF CRYPT_FORMAT_RDN_CRLF
+
+/* CryptQueryObject types and flags */
+#define CERT_QUERY_OBJECT_FILE 1
+#define CERT_QUERY_OBJECT_BLOB 2
+
+#define CERT_QUERY_CONTENT_CERT 1
+#define CERT_QUERY_CONTENT_CTL 2
+#define CERT_QUERY_CONTENT_CRL 3
+#define CERT_QUERY_CONTENT_SERIALIZED_STORE 4
+#define CERT_QUERY_CONTENT_SERIALIZED_CERT 5
+#define CERT_QUERY_CONTENT_SERIALIZED_CTL 6
+#define CERT_QUERY_CONTENT_SERIALIZED_CRL 7
+#define CERT_QUERY_CONTENT_PKCS7_SIGNED 8
+#define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 9
+#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10
+#define CERT_QUERY_CONTENT_PKCS10 11
+#define CERT_QUERY_CONTENT_PFX 12
+#define CERT_QUERY_CONTENT_CERT_PAIR 13
+
+#define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT)
+#define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL)
+#define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
+#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \
+ (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
+#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \
+ (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
+#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \
+ (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
+#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \
+ (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
+#define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10)
+#define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX)
+#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR)
+
+#define CERT_QUERY_CONTENT_FLAG_ALL \
+ CERT_QUERY_CONTENT_FLAG_CERT | \
+ CERT_QUERY_CONTENT_FLAG_CTL | \
+ CERT_QUERY_CONTENT_FLAG_CRL | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \
+ CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \
+ CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \
+ CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \
+ CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \
+ CERT_QUERY_CONTENT_FLAG_PKCS10 | \
+ CERT_QUERY_CONTENT_FLAG_PFX | \
+ CERT_QUERY_CONTENT_FLAG_CERT_PAIR
+
+#define CERT_QUERY_FORMAT_BINARY 1
+#define CERT_QUERY_FORMAT_BASE64_ENCODED 2
+#define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3
+
+#define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY)
+#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \
+ (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
+#define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
+ (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
+
+#define CERT_QUERY_FORMAT_FLAG_ALL \
+ CERT_QUERY_FORMAT_FLAG_BINARY | \
+ CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \
+ CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \
+
+#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001
+#define CERT_SET_KEY_CONTEXT_PROP_ID 0x00000001
+
+#define CERT_CREATE_SELFSIGN_NO_SIGN 1
+#define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2
+
+/* flags for CryptAcquireCertificatePrivateKey */
+#define CRYPT_ACQUIRE_CACHE_FLAG 0x00000001
+#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002
+#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004
+#define CRYPT_ACQUIRE_SILENT_FLAG 0x00000040
+
+/* flags for CryptFindCertificateKeyProvInfo */
+#define CRYPT_FIND_USER_KEYSET_FLAG 0x00000001
+#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002
+#define CRYPT_FIND_SILENT_KEYSET_FLAG 0x00000040
+
+/* Chain engines and chains */
+typedef HANDLE HCERTCHAINENGINE;
+#define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL)
+#define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1)
+
+#define CERT_CHAIN_CACHE_END_CERT 0x00000001
+#define CERT_CHAIN_THREAD_STORE_SYNC 0x00000002
+#define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004
+#define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x00000008
+#define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010
+#define CERT_CHAIN_ENABLE_SHARE_STORE 0x00000020
+
+typedef struct _CERT_CHAIN_ENGINE_CONFIG
+{
+ DWORD cbSize;
+ HCERTSTORE hRestrictedRoot;
+ HCERTSTORE hRestrictedTrust;
+ HCERTSTORE hRestrictedOther;
+ DWORD cAdditionalStore;
+ HCERTSTORE *rghAdditionalStore;
+ DWORD dwFlags;
+ DWORD dwUrlRetrievalTimeout;
+ DWORD MaximumCachedCertificates;
+ DWORD CycleDetectionModulus;
+ HCERTSTORE hExclusiveRoot;
+ HCERTSTORE hExclusiveRootTrustedPeople;
+} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
+
+/* message-related definitions */
+
+typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData,
+ DWORD cbData, BOOL fFinal);
+
+#define CMSG_INDEFINITE_LENGTH 0xffffffff
+
+typedef struct _CMSG_STREAM_INFO
+{
+ DWORD cbContent;
+ PFN_CMSG_STREAM_OUTPUT pfnStreamOutput;
+ void *pvArg;
+} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO;
+
+typedef struct _CERT_ISSUER_SERIAL_NUMBER
+{
+ CERT_NAME_BLOB Issuer;
+ CRYPT_INTEGER_BLOB SerialNumber;
+} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER;
+
+typedef struct _CERT_ID
+{
+ DWORD dwIdChoice;
+ union {
+ CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber;
+ CRYPT_HASH_BLOB KeyId;
+ CRYPT_HASH_BLOB HashId;
+ } DUMMYUNIONNAME;
+} CERT_ID, *PCERT_ID;
+
+#define CERT_ID_ISSUER_SERIAL_NUMBER 1
+#define CERT_ID_KEY_IDENTIFIER 2
+#define CERT_ID_SHA1_HASH 3
+
+#ifndef USE_WC_PREFIX
+#undef CMSG_DATA /* may be defined by sys/socket.h */
+#define CMSG_DATA 1
+#define CMSG_SIGNED 2
+#define CMSG_ENVELOPED 3
+#define CMSG_SIGNED_AND_ENVELOPED 4
+#define CMSG_HASHED 5
+#define CMSG_ENCRYPTED 6
+
+#define CMSG_ALL_FLAGS ~0U
+#define CMSG_DATA_FLAG (1 << CMSG_DATA)
+#define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED)
+#define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED)
+#define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED)
+#define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED)
+#else
+#define WC_CMSG_DATA 1
+#define WC_CMSG_SIGNED 2
+#define WC_CMSG_ENVELOPED 3
+#define WC_CMSG_SIGNED_AND_ENVELOPED 4
+#define WC_CMSG_HASHED 5
+#define WC_CMSG_ENCRYPTED 6
+
+#define WC_CMSG_ALL_FLAGS ~0U
+#define WC_CMSG_DATA_FLAG (1 << WC_CMSG_DATA)
+#define WC_CMSG_SIGNED_FLAG (1 << WC_CMSG_SIGNED)
+#define WC_CMSG_ENVELOPED_FLAG (1 << WC_CMSG_ENVELOPED)
+#define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED)
+#define WC_CMSG_ENCRYPTED_FLAG (1 << WC_CMSG_ENCRYPTED)
+#endif
+
+typedef struct _CMSG_SIGNER_ENCODE_INFO
+{
+ DWORD cbSize;
+ PCERT_INFO pCertInfo;
+ HCRYPTPROV hCryptProv;
+ DWORD dwKeySpec;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ void *pvHashAuxInfo;
+ DWORD cAuthAttr;
+ PCRYPT_ATTRIBUTE rgAuthAttr;
+ DWORD cUnauthAttr;
+ PCRYPT_ATTRIBUTE rgUnauthAttr;
+#ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
+ CERT_ID SignerId;
+ CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+ void *pvHashEncryptionAuxInfo;
+#endif
+} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO;
+
+typedef struct _CMSG_SIGNED_ENCODE_INFO
+{
+ DWORD cbSize;
+ DWORD cSigners;
+ PCMSG_SIGNER_ENCODE_INFO rgSigners;
+ DWORD cCertEncoded;
+ PCERT_BLOB rgCertEncoded;
+ DWORD cCrlEncoded;
+ PCRL_BLOB rgCrlEncoded;
+#ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
+ DWORD cAttrCertEncoded;
+ PCERT_BLOB rgAttrCertEncoded;
+#endif
+} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO;
+
+typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
+{
+ DWORD cbSize;
+ CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+ void *pvKeyEncryptionAuxInfo;
+ HCRYPTPROV_LEGACY hCryptProv;
+ CRYPT_BIT_BLOB RecipientPublicKey;
+ CERT_ID RecipientId;
+} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO;
+
+typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO
+{
+ DWORD cbSize;
+ CRYPT_BIT_BLOB RecipientPublicKey;
+ CERT_ID RecipientId;
+ FILETIME Date;
+ PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO,
+ *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO;
+
+typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
+{
+ DWORD cbSize;
+ CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+ void *pvKeyEncryptionAuxInfo;
+ CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm;
+ void *pvKeyWrapAuxInfo;
+ HCRYPTPROV_LEGACY hCryptProv;
+ DWORD dwKeySpec;
+ DWORD dwKeyChoice;
+ union {
+ PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm;
+ PCERT_ID pSenderId;
+ } DUMMYUNIONNAME;
+ CRYPT_DATA_BLOB UserKeyingMaterial;
+ DWORD cRecipientEncryptedKeys;
+ PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys;
+} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO;
+
+#define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1
+#define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 2
+
+typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
+{
+ DWORD cbSize;
+ CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+ void *pvKeyEncryptionAuxInfo;
+ HCRYPTPROV hCryptProv;
+ DWORD dwKeyChoice;
+ union {
+ HCRYPTKEY hKeyEncryptionKey;
+ void *pvKeyEncryptionKey;
+ } DUMMYUNIONNAME;
+ CRYPT_DATA_BLOB KeyId;
+ FILETIME Date;
+ PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO;
+
+#define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1
+
+typedef struct _CMSG_RECIPIENT_ENCODE_INFO
+{
+ DWORD dwRecipientChoice;
+ union {
+ PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans;
+ PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree;
+ PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList;
+ } DUMMYUNIONNAME;
+} CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO;
+
+#define CMSG_KEY_TRANS_RECIPIENT 1
+#define CMSG_KEY_AGREE_RECIPIENT 2
+#define CMSG_MAIL_LIST_RECIPIENT 3
+
+typedef struct _CMSG_ENVELOPED_ENCODE_INFO
+{
+ DWORD cbSize;
+ HCRYPTPROV_LEGACY hCryptProv;
+ CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+ void *pvEncryptionAuxInfo;
+ DWORD cRecipients;
+ PCERT_INFO *rgpRecipientCert;
+#ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS
+ PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
+ DWORD cCertEncoded;
+ PCERT_BLOB rgCertEncoded;
+ DWORD cCrlEncoded;
+ PCRL_BLOB rgCrlEncoded;
+ DWORD cAttrCertEncoded;
+ PCERT_BLOB rgAttrCertEncoded;
+ DWORD cUnprotectedAttr;
+ PCRYPT_ATTRIBUTE rgUnprotectedAttr;
+#endif
+} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;
+
+typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO
+{
+ DWORD cbSize;
+ CMSG_SIGNED_ENCODE_INFO SignedInfo;
+ CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo;
+} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO,
+ *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO;
+
+typedef struct _CMSG_HASHED_ENCODE_INFO
+{
+ DWORD cbSize;
+ HCRYPTPROV_LEGACY hCryptProv;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ void *pvHashAuxInfo;
+} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO;
+
+typedef struct _CMSG_ENCRYPTED_ENCODE_INFO
+{
+ DWORD cbSize;
+ CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+ void *pvEncryptionAuxInfo;
+} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO;
+
+#define CMSG_BARE_CONTENT_FLAG 0x00000001
+#define CMSG_LENGTH_ONLY_FLAG 0x00000002
+#define CMSG_DETACHED_FLAG 0x00000004
+#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008
+#define CMSG_CONTENTS_OCTETS_FLAG 0x00000010
+#define CMSG_MAX_LENGTH_FLAG 0x00000020
+#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040
+#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x00008000
+
+#define CMSG_CTRL_VERIFY_SIGNATURE 1
+#define CMSG_CTRL_DECRYPT 2
+#define CMSG_CTRL_VERIFY_HASH 5
+#define CMSG_CTRL_ADD_SIGNER 6
+#define CMSG_CTRL_DEL_SIGNER 7
+#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8
+#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9
+#define CMSG_CTRL_ADD_CERT 10
+#define CMSG_CTRL_DEL_CERT 11
+#define CMSG_CTRL_ADD_CRL 12
+#define CMSG_CTRL_DEL_CRL 13
+#define CMSG_CTRL_ADD_ATTR_CERT 14
+#define CMSG_CTRL_DEL_ATTR_CERT 15
+#define CMSG_CTRL_KEY_TRANS_DECRYPT 16
+#define CMSG_CTRL_KEY_AGREE_DECRYPT 17
+#define CMSG_CTRL_MAIL_LIST_DECRYPT 18
+#define CMSG_CTRL_VERIFY_SIGNATURE_EX 19
+#define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20
+
+typedef struct _CMSG_CTRL_DECRYPT_PARA
+{
+ DWORD cbSize;
+ HCRYPTPROV hCryptProv;
+ DWORD dwKeySpec;
+ DWORD dwRecipientIndex;
+} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA;
+
+typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
+{
+ DWORD cbSize;
+ DWORD dwSignerIndex;
+ CRYPT_DATA_BLOB blob;
+} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA,
+ *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA;
+
+typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA
+{
+ DWORD cbSize;
+ DWORD dwSignerIndex;
+ DWORD dwUnauthAttrIndex;
+} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA,
+ *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA;
+
+typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA {
+ DWORD cbSize;
+ HCRYPTPROV hCryptProv;
+ DWORD dwSignerIndex;
+ DWORD dwSignerType;
+ void *pvSigner;
+} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA;
+
+#define CMSG_VERIFY_SIGNER_PUBKEY 1
+#define CMSG_VERIFY_SIGNER_CERT 2
+#define CMSG_VERIFY_SIGNER_CHAIN 3
+#define CMSG_VERIFY_SIGNER_NULL 4
+
+#define CMSG_TYPE_PARAM 1
+#define CMSG_CONTENT_PARAM 2
+#define CMSG_BARE_CONTENT_PARAM 3
+#define CMSG_INNER_CONTENT_TYPE_PARAM 4
+#define CMSG_SIGNER_COUNT_PARAM 5
+#define CMSG_SIGNER_INFO_PARAM 6
+#define CMSG_SIGNER_CERT_INFO_PARAM 7
+#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8
+#define CMSG_SIGNER_AUTH_ATTR_PARAM 9
+#define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10
+#define CMSG_CERT_COUNT_PARAM 11
+#define CMSG_CERT_PARAM 12
+#define CMSG_CRL_COUNT_PARAM 13
+#define CMSG_CRL_PARAM 14
+#define CMSG_ENVELOPE_ALGORITHM_PARAM 15
+#define CMSG_RECIPIENT_COUNT_PARAM 17
+#define CMSG_RECIPIENT_INDEX_PARAM 18
+#define CMSG_RECIPIENT_INFO_PARAM 19
+#define CMSG_HASH_ALGORITHM_PARAM 20
+#define CMSG_HASH_DATA_PARAM 21
+#define CMSG_COMPUTED_HASH_PARAM 22
+#define CMSG_ENCRYPT_PARAM 26
+#define CMSG_ENCRYPTED_DIGEST 27
+#define CMSG_ENCODED_SIGNER 28
+#define CMSG_ENCODED_MESSAGE 29
+#define CMSG_VERSION_PARAM 30
+#define CMSG_ATTR_CERT_COUNT_PARAM 31
+#define CMSG_ATTR_CERT_PARAM 32
+#define CMSG_CMS_RECIPIENT_COUNT_PARAM 33
+#define CMSG_CMS_RECIPIENT_INDEX_PARAM 34
+#define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35
+#define CMSG_CMS_RECIPIENT_INFO_PARAM 36
+#define CMSG_UNPROTECTED_ATTR_PARAM 37
+#define CMSG_SIGNER_CERT_ID_PARAM 38
+#define CMSG_CMS_SIGNER_INFO_PARAM 39
+
+typedef struct _CMSG_CMS_SIGNER_INFO {
+ DWORD dwVersion;
+ CERT_ID SignerId;
+ CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
+ CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm;
+ CRYPT_DATA_BLOB EncryptedHash;
+ CRYPT_ATTRIBUTES AuthAttrs;
+ CRYPT_ATTRIBUTES UnauthAttrs;
+} CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO;
+
+typedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR;
+
+#define CMSG_SIGNED_DATA_V1 1
+#define CMSG_SIGNED_DATA_V3 3
+#define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1
+#define CMSG_SIGNED_DATA_CMS_VERSION CMSG_SIGNED_DATA_V3
+
+#define CMSG_SIGNER_INFO_V1 1
+#define CMSG_SIGNER_INFO_V3 3
+#define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1
+#define CMSG_SIGNER_INFO_CMS_VERSION CMSG_SIGNER_INFO_V3
+
+#define CMSG_HASHED_DATA_V0 0
+#define CMSG_HASHED_DATA_V2 2
+#define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0
+#define CMSG_HASHED_DATA_CMS_VERSION CMSG_HASHED_DATA_V2
+
+#define CMSG_ENVELOPED_DATA_V0 0
+#define CMSG_ENVELOPED_DATA_V2 2
+#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0
+#define CMSG_ENVELOPED_DATA_CMS_VERSION CMSG_ENVELOPED_DATA_V2
+
+typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO {
+ DWORD dwVersion;
+ CERT_ID RecipientId;
+ CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+ CRYPT_DATA_BLOB EncryptedKey;
+} CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO;
+
+typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO {
+ CERT_ID RecipientId;
+ CRYPT_DATA_BLOB EncryptedKey;
+ PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO;
+
+typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO {
+ DWORD dwVersion;
+ DWORD dwOriginatorChoice;
+ union {
+ CERT_ID OriginatorCertId;
+ CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo;
+ } DUMMYUNIONNAME;
+ CRYPT_ALGORITHM_IDENTIFIER UserKeyingMaterial;
+ DWORD cRecipientEncryptedKeys;
+ PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys;
+} CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO;
+
+#define CMSG_KEY_AGREE_ORIGINATOR_CERT 1
+#define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2
+
+typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO {
+ DWORD dwVersion;
+ CRYPT_DATA_BLOB KeyId;
+ CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+ CRYPT_DATA_BLOB EncryptedKey;
+ FILETIME Date;
+ PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr;
+} CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO;
+
+typedef struct _CMSG_CMS_RECIPIENT_INFO {
+ DWORD dwRecipientChoice;
+ union {
+ PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
+ PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree;
+ PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList;
+ } DUMMYUNIONNAME;
+} CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO;
+
+#define CMSG_ENVELOPED_RECIPIENT_V0 0
+#define CMSG_ENVELOPED_RECIPIENT_V2 2
+#define CMSG_ENVELOPED_RECIPIENT_V3 3
+#define CMSG_ENVELOPED_RECIPIENT_V4 4
+#define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0
+#define CMSG_KEY_TRANS_CMS_VERSION CMSG_ENVELOPED_RECIPIENT_V2
+#define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3
+#define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4
+
+typedef void * (WINAPI *PFN_CMSG_ALLOC)(size_t cb);
+typedef void (WINAPI *PFN_CMSG_FREE)(void *pv);
+
+typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
+ DWORD cbSize;
+ HCRYPTPROV hCryptProv;
+ CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+ void *pvEncryptionAuxInfo;
+ DWORD cRecipients;
+ PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
+ PFN_CMSG_ALLOC pfnAlloc;
+ PFN_CMSG_FREE pfnFree;
+ DWORD dwEncryptFlags;
+ HCRYPTKEY hContentEncryptKey;
+ DWORD dwFlags;
+} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;
+
+typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO {
+ DWORD cbSize;
+ DWORD dwRecipientIndex;
+ CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm;
+ CRYPT_DATA_BLOB EncryptedKey;
+ DWORD dwFlags;
+} CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO;
+
+typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA {
+ DWORD cbSize;
+ HCRYPTPROV hCryptProv;
+ DWORD dwKeySpec;
+ PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans;
+ DWORD dwRecipientIndex;
+} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA;
+
+typedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)(
+ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags,
+ void *pvReserved);
+
+typedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)(
+ PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo,
+ PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo,
+ PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo,
+ DWORD dwFlags, void *pvReserved);
+
+typedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)(
+ PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm,
+ PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags,
+ void *pvReserved, HCRYPTKEY *phContentEncryptKey);
+
+/* CryptMsgGetAndVerifySigner flags */
+#define CMSG_TRUSTED_SIGNER_FLAG 0x1
+#define CMSG_SIGNER_ONLY_FLAG 0x2
+#define CMSG_USE_SIGNER_INDEX_FLAG 0x4
+
+/* CryptMsgSignCTL flags */
+#define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000
+
+/* CryptMsgEncodeAndSignCTL flags */
+#define CMSG_ENCODED_SORTED_CTL_FLAG 0x1
+#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
+
+/* PFXImportCertStore flags */
+#define CRYPT_USER_KEYSET 0x00001000
+#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
+/* PFXExportCertStore flags */
+#define REPORT_NO_PRIVATE_KEY 0x00000001
+#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002
+#define EXPORT_PRIVATE_KEYS 0x00000004
+#define PKCS12_EXPORT_RESERVED_MASK 0xffff0000
+
+/* function declarations */
+/* advapi32.dll */
+WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);
+WINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD);
+#define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext)
+WINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *);
+WINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *);
+WINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *);
+WINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH);
+WINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY);
+WINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *);
+WINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
+WINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
+#define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders)
+WINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *);
+WINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *);
+#define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes)
+WINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *);
+WINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *);
+WINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *);
+#define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider)
+WINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, const BYTE *, DWORD, DWORD);
+WINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD);
+WINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, const BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *);
+WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, ULONG_PTR);
+WINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, const BYTE *, DWORD);
+WINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, const BYTE *, DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD);
+#define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider)
+WINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD);
+WINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD);
+#define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx)
+WINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, const BYTE *, DWORD);
+WINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *);
+WINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *);
+#define CryptSignHash WINELIB_NAME_AW(CryptSignHash)
+WINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD);
+WINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD);
+#define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature)
+
+/* crypt32.dll functions */
+LPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1);
+LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2);
+VOID WINAPI CryptMemFree(LPVOID pv);
+
+BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary,
+ DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
+BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary,
+ DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString);
+#define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString)
+
+BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString,
+ DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
+ DWORD *pdwSkip, DWORD *pdwFlags);
+BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString,
+ DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
+ DWORD *pdwSkip, DWORD *pdwFlags);
+#define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary)
+
+BOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync);
+BOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
+ LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree);
+BOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid,
+ LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree);
+BOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync);
+
+BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR);
+BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR);
+BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
+ LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType,
+ BYTE *pbValueData, DWORD *pcbValueData);
+BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName,
+ LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType,
+ const BYTE *pbValueData, DWORD cbValueData);
+BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR);
+BOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR);
+BOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName,
+ LPCSTR pszOID, DWORD dwFlags, void *pvArg,
+ PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc);
+HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD);
+BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,
+ DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList);
+BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
+ DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,
+ HCRYPTOIDFUNCADDR *phFuncAddr);
+BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
+ DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr,
+ HCRYPTOIDFUNCADDR *phFuncAddr);
+BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,
+ DWORD dwFlags);
+BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,
+ DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry,
+ const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags);
+BOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv,
+ DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags,
+ void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext);
+BOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext,
+ DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg,
+ PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo);
+PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
+ DWORD dwGroupId);
+BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags);
+BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo);
+
+LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName);
+
+LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId);
+DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId);
+
+/* cert store functions */
+HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType,
+ HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara);
+
+HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv,
+ LPCSTR szSubSystemProtocol);
+HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv,
+ LPCWSTR szSubSystemProtocol);
+#define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore)
+
+PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pPrev);
+
+PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,
+ PCCRL_CONTEXT pPrev);
+
+PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,
+ PCCTL_CONTEXT pPrev);
+
+BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg,
+ PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum);
+
+BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
+ void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum);
+
+BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
+ void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum);
+
+BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
+ LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved);
+
+BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
+ DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags);
+
+BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
+ HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority);
+
+void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,
+ HCERTSTORE hSiblingStore);
+
+BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,
+ HCERTCHAINENGINE *phChainEngine);
+
+BOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
+
+VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine);
+
+BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine,
+ PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore,
+ PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved,
+ PCCERT_CHAIN_CONTEXT *ppChainContext);
+
+PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(
+ PCCERT_CHAIN_CONTEXT pChainContext);
+
+VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext);
+
+PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext);
+
+BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID,
+ PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara,
+ PCERT_CHAIN_POLICY_STATUS pPolicyStatus);
+
+DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,
+ DWORD dwPropId);
+
+BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
+ DWORD dwPropId, void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
+ DWORD dwPropId, DWORD dwFlags, const void *pvData);
+
+DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext,
+ DWORD dwPropId);
+
+BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
+ DWORD dwPropId, void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext,
+ DWORD dwPropId, DWORD dwFlags, const void *pvData);
+
+DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId);
+
+BOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext,
+ void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier,
+ PCRYPT_DER_BLOB pEncodedAttributes);
+
+BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId, void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId, DWORD dwFlags, const void *pvData);
+
+BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
+ void *pvData, DWORD *pcbData);
+
+BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
+ DWORD dwFlags, const void *pvData);
+
+BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,
+ DWORD dwCtrlType, void const *pvCtrlPara);
+
+HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore);
+
+BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags );
+
+BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext );
+
+BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext );
+
+BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext );
+
+BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
+ PCCERT_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore,
+ PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
+ PCCRL_CONTEXT *ppStoreContext );
+
+BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore,
+ PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
+ PCCTL_CONTEXT *ppStoreContext );
+
+BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
+ PCCERT_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore,
+ PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
+ PCCRL_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore,
+ PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
+ PCCTL_CONTEXT *ppStoreContext);
+
+BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded,
+ DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
+
+BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName,
+ const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName,
+ const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+#define CertAddEncodedCertificateToSystemStore \
+ WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore)
+
+BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded,
+ DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
+
+BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,
+ DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded,
+ DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
+
+BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore,
+ const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags,
+ DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext);
+
+BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,
+ PCERT_INFO pCertId1, PCERT_INFO pCertId2);
+BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType,
+ PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2);
+BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1,
+ PCRYPT_INTEGER_BLOB pInt2);
+BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType,
+ PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2);
+DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType,
+ PCERT_PUBLIC_KEY_INFO pPublicKey);
+
+const void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
+ PCERT_CREATE_CONTEXT_PARA pCreatePara);
+
+PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
+ const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+
+PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
+ const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
+
+PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
+ const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
+
+PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,
+ PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags,
+ PCRYPT_KEY_PROV_INFO pKeyProvInfo,
+ PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime,
+ PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions);
+
+BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
+
+BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
+
+BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
+
+PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(
+ PCCERT_CONTEXT pCertContext);
+
+PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext);
+
+PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext);
+
+PCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext );
+
+PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext);
+
+PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType,
+ const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext);
+
+PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext,
+ DWORD *pdwFlags);
+
+PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore,
+ DWORD dwCertEncodingType, PCERT_INFO pCertId);
+
+PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore,
+ PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags);
+
+BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+
+BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+
+BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
+
+BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType,
+ PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage);
+
+BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags,
+ PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage);
+BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext,
+ PCERT_ENHKEY_USAGE pUsage);
+BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
+ LPCSTR pszUsageIdentifier);
+BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext,
+ LPCSTR pszUsageIdentifier);
+BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts,
+ int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs);
+
+BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
+BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara,
+ void *pvEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo,
+ DWORD *pcbStructInfo);
+BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
+ PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo);
+
+BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType,
+ DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType,
+ const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat);
+
+BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
+ DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
+ DWORD *pcbComputedHash);
+
+BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid,
+ DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo,
+ BYTE *pbComputedHash, DWORD *pcbComputedHash);
+
+BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType,
+ const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash,
+ DWORD *pcbComputedHash);
+
+BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject,
+ DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags,
+ DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType,
+ DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg,
+ const void** ppvContext);
+
+BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned,
+ DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+ const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature);
+
+BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv,
+ DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType,
+ const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
+ const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded,
+ PCERT_PUBLIC_KEY_INFO pPublicKey);
+
+BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject,
+ DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved);
+
+PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr,
+ CRYPT_ATTRIBUTE rgAttr[]);
+PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions,
+ CERT_EXTENSION rgExtensions[]);
+PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName);
+
+BOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier,
+ PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved,
+ PCRYPT_DER_BLOB pEncodedAttributes);
+
+BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType,
+ DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN);
+
+BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert,
+ PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved);
+BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert,
+ PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved,
+ PCRL_ENTRY *ppCrlEntry);
+BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType,
+ PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]);
+
+BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject,
+ PCCERT_CONTEXT pIssuer, DWORD *pdwFlags);
+
+LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify,
+ PCRL_INFO pCrlInfo);
+LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify,
+ PCERT_INFO pCertInfo);
+BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo,
+ PCERT_INFO pIssuerInfo);
+
+BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType,
+ void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags,
+ PCTL_VERIFY_USAGE_PARA pVerifyUsagePara,
+ PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus);
+
+BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType,
+ DWORD cContext, PVOID rgpvContext[], DWORD dwFlags,
+ PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus);
+
+BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+BOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
+ DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags,
+ void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo);
+BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv,
+ DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey);
+BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv,
+ DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg,
+ DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey);
+
+BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,
+ DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec,
+ BOOL *pfCallerFreeProv);
+
+BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,
+ DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,
+ DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
+ CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
+
+BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr,
+ DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
+ CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
+
+DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType,
+ DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString);
+DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType,
+ DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString);
+#define CertGetNameString WINELIB_NAME_AW(CertGetNameString)
+
+DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
+ LPSTR psz, DWORD csz);
+DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue,
+ LPWSTR psz, DWORD csz);
+#define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr)
+
+DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
+ DWORD dwStrType, LPSTR psz, DWORD csz);
+DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName,
+ DWORD dwStrType, LPWSTR psz, DWORD csz);
+#define CertNameToStr WINELIB_NAME_AW(CertNameToStr)
+
+BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500,
+ DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
+ LPCSTR *ppszError);
+BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500,
+ DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded,
+ LPCWSTR *ppszError);
+#define CertStrToName WINELIB_NAME_AW(CertStrToName)
+
+DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType,
+ DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo,
+ LPSTR pszInnerContentObjID, DWORD cbData);
+
+BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg);
+
+BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags,
+ DWORD dwCtrlType, const void *pvCtrlPara);
+
+BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex,
+ DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners);
+
+BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo,
+ DWORD cbSignerInfo, DWORD cCountersigners,
+ PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature,
+ PDWORD pcbCountersignature);
+
+HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg);
+
+BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType,
+ PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
+ BYTE *pbEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore,
+ HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner,
+ DWORD *pdwSignerIndex);
+
+BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
+ DWORD dwIndex, void *pvData, DWORD *pcbData);
+
+HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
+ DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo,
+ PCMSG_STREAM_INFO pStreamInfo);
+
+HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags,
+ DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID,
+ PCMSG_STREAM_INFO pStreamInfo);
+
+BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent,
+ DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags,
+ BYTE *pbEncoded, DWORD *pcbEncoded);
+
+BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,
+ DWORD cbData, BOOL fFinal);
+
+BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
+ PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
+ PCERT_INFO pciCountersigner);
+
+BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv,
+ DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo,
+ PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature,
+ DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
+ BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[],
+ DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob);
+BOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara,
+ const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob,
+ DWORD *pcbSignedBlob);
+
+BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
+ DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,
+ BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert);
+BOOL WINAPI CryptVerifyMessageSignatureWithKey(
+ PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
+ PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob,
+ DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded);
+
+BOOL WINAPI CryptVerifyDetachedMessageSignature(
+ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
+ const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned,
+ const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[],
+ PCCERT_CONTEXT *ppSignerCert);
+LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,
+ const BYTE *pbSignedBlob, DWORD cbSignedBlob);
+
+BOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
+ DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[],
+ const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob,
+ DWORD *pcbEncryptedBlob);
+BOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
+ const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
+ DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert);
+
+BOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara,
+ PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert,
+ PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted,
+ DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob,
+ DWORD *pcbSignedAndEncryptedBlob);
+BOOL WINAPI CryptDecryptAndVerifyMessageSignature(
+ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
+ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
+ const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted,
+ DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
+
+HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,
+ HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob,
+ DWORD cbSignedBlob);
+
+BOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags,
+ PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
+ PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex,
+ const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType,
+ DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded,
+ DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert);
+
+BOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara,
+ BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[],
+ DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob,
+ BYTE *pbComputedHash, DWORD *pcbComputedHash);
+BOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
+ BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed,
+ DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
+ BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed,
+ const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash,
+ DWORD *pcbComputedHash);
+
+/* PFX functions */
+HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
+ DWORD dwFlags);
+BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
+BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
+ DWORD dwFlags);
+BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
+ LPCWSTR szPassword, void *pvReserved, DWORD dwFlags);
+BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
+ LPCWSTR szPassword, DWORD dwFlags);
+BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
+ DWORD dwFlags);
+
+/* cryptnet.dll functions */
+BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
+
+BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags,
+ PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo,
+ DWORD *pcbUrlInfo, LPVOID pvReserved);
+
+BOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara,
+ PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout,
+ void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved);
+
+BOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara,
+ PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel,
+ const void *pvArg, DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved);
+
+BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid,
+ DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
+ HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
+ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid,
+ DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject,
+ HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify,
+ PCRYPT_RETRIEVE_AUX_INFO pAuxInfo);
+#define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl)
+
+/* Not found in crypt32.dll but in softpub.dll */
+HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains,
+ DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName,
+ LPCWSTR pwszPurpose, DWORD dwKeySpec);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h
new file mode 100644
index 00000000..e09584a1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windef.h
@@ -0,0 +1,425 @@
+/*
+ * Basic types definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINDEF_
+#define _WINDEF_
+
+#ifndef WINVER
+#define WINVER 0x0500
+#endif
+
+#ifndef NO_STRICT
+# ifndef STRICT
+# define STRICT
+# endif /* STRICT */
+#endif /* NO_STRICT */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Calling conventions definitions */
+
+#if (defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc64__) || defined(__aarch64__)) && !defined(_WIN64)
+#define _WIN64
+#endif
+
+#ifndef _WIN64
+# if defined(__i386__) && !defined(_X86_)
+# define _X86_
+# endif
+# if defined(_X86_) && !defined(__i386__)
+# define __i386__
+# endif
+#endif
+
+#ifndef __stdcall
+# ifdef __i386__
+# ifdef __GNUC__
+# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)
+# define __stdcall __attribute__((__stdcall__)) __attribute__((__force_align_arg_pointer__))
+# else
+# define __stdcall __attribute__((__stdcall__))
+# endif
+# elif defined(_MSC_VER)
+ /* Nothing needs to be done. __stdcall already exists */
+# else
+# error You need to define __stdcall for your compiler
+# endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+# define __stdcall __attribute__((ms_abi))
+# else /* __i386__ */
+# define __stdcall
+# endif /* __i386__ */
+#endif /* __stdcall */
+
+#ifndef __cdecl
+# if defined(__i386__) && defined(__GNUC__)
+# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || defined(__APPLE__)
+# define __cdecl __attribute__((__cdecl__)) __attribute__((__force_align_arg_pointer__))
+# else
+# define __cdecl __attribute__((__cdecl__))
+# endif
+# elif defined(__x86_64__) && defined (__GNUC__)
+# define __cdecl __attribute__((ms_abi))
+# elif !defined(_MSC_VER)
+# define __cdecl
+# endif
+#endif /* __cdecl */
+
+#ifndef __ms_va_list
+# if defined(__x86_64__) && defined (__GNUC__)
+# define __ms_va_list __builtin_ms_va_list
+# define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
+# define __ms_va_end(list) __builtin_ms_va_end(list)
+# else
+# define __ms_va_list va_list
+# define __ms_va_start(list,arg) va_start(list,arg)
+# define __ms_va_end(list) va_end(list)
+# endif
+#endif
+
+#ifdef __WINESRC__
+#define __ONLY_IN_WINELIB(x) do_not_use_this_in_wine
+#else
+#define __ONLY_IN_WINELIB(x) x
+#endif
+
+#ifndef pascal
+#define pascal __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _pascal
+#define _pascal __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _stdcall
+#define _stdcall __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef _fastcall
+#define _fastcall __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __fastcall
+#define __fastcall __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef __export
+#define __export __ONLY_IN_WINELIB(__stdcall)
+#endif
+#ifndef cdecl
+#define cdecl __ONLY_IN_WINELIB(__cdecl)
+#endif
+#ifndef _cdecl
+#define _cdecl __ONLY_IN_WINELIB(__cdecl)
+#endif
+
+#ifndef near
+#define near __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef far
+#define far __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef _near
+#define _near __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef _far
+#define _far __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef NEAR
+#define NEAR __ONLY_IN_WINELIB(/* nothing */)
+#endif
+#ifndef FAR
+#define FAR __ONLY_IN_WINELIB(/* nothing */)
+#endif
+
+#ifndef _MSC_VER
+# ifndef _declspec
+# define _declspec(x) __ONLY_IN_WINELIB(/* nothing */)
+# endif
+# ifndef __declspec
+# define __declspec(x) __ONLY_IN_WINELIB(/* nothing */)
+# endif
+#endif
+
+#ifdef _MSC_VER
+# define inline __inline
+#endif
+
+#define CALLBACK __stdcall
+#define WINAPI __stdcall
+#define APIPRIVATE __stdcall
+#define PASCAL __stdcall
+#define CDECL __cdecl
+#define _CDECL __cdecl
+#define WINAPIV __cdecl
+#define APIENTRY WINAPI
+#define CONST __ONLY_IN_WINELIB(const)
+
+/* Misc. constants. */
+
+#undef NULL
+#ifdef __cplusplus
+#define NULL 0
+#else
+#define NULL ((void*)0)
+#endif
+
+#ifdef FALSE
+#undef FALSE
+#endif
+#define FALSE 0
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#define TRUE 1
+
+#ifndef IN
+#define IN
+#endif
+
+#ifndef OUT
+#define OUT
+#endif
+
+#ifndef OPTIONAL
+#define OPTIONAL
+#endif
+
+/* Standard data types */
+
+typedef void *LPVOID;
+typedef const void *LPCVOID;
+typedef int BOOL, *PBOOL, *LPBOOL;
+typedef unsigned char BYTE, *PBYTE, *LPBYTE;
+typedef unsigned char UCHAR, *PUCHAR;
+typedef unsigned short WORD, *PWORD, *LPWORD;
+typedef unsigned short USHORT, *PUSHORT;
+typedef int INT, *PINT, *LPINT;
+typedef unsigned int UINT, *PUINT;
+typedef float FLOAT, *PFLOAT;
+typedef char *PSZ;
+#ifdef _MSC_VER
+typedef long *LPLONG;
+typedef unsigned long DWORD, *PDWORD, *LPDWORD;
+typedef unsigned long ULONG, *PULONG;
+#else
+typedef int *LPLONG;
+typedef unsigned int DWORD, *PDWORD, *LPDWORD;
+typedef unsigned int ULONG, *PULONG;
+#endif
+
+/* Macros to map Winelib names to the correct implementation name */
+/* Note that Winelib is purely Win32. */
+
+#ifdef __WINESRC__
+#define WINE_NO_UNICODE_MACROS 1
+#define WINE_STRICT_PROTOTYPES 1
+#endif
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define WINELIB_NAME_AW(func) \
+ func##_must_be_suffixed_with_W_or_A_in_this_context \
+ func##_must_be_suffixed_with_W_or_A_in_this_context
+#else /* WINE_NO_UNICODE_MACROS */
+# ifdef UNICODE
+# define WINELIB_NAME_AW(func) func##W
+# else
+# define WINELIB_NAME_AW(func) func##A
+# endif
+#endif /* WINE_NO_UNICODE_MACROS */
+
+#ifdef WINE_NO_UNICODE_MACROS
+# define DECL_WINELIB_TYPE_AW(type) /* nothing */
+#else
+# define DECL_WINELIB_TYPE_AW(type) typedef WINELIB_NAME_AW(type) type;
+#endif
+
+#include <winnt.h>
+
+/* Polymorphic types */
+
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+typedef LONG_PTR LRESULT;
+
+/* Integer types */
+
+typedef WORD ATOM;
+typedef DWORD COLORREF, *LPCOLORREF;
+
+
+/* Handle types */
+
+typedef int HFILE;
+DECLARE_HANDLE(HACCEL);
+DECLARE_HANDLE(HBITMAP);
+DECLARE_HANDLE(HBRUSH);
+DECLARE_HANDLE(HCOLORSPACE);
+DECLARE_HANDLE(HDC);
+DECLARE_HANDLE(HDESK);
+DECLARE_HANDLE(HENHMETAFILE);
+DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HGLRC);
+DECLARE_HANDLE(HHOOK);
+DECLARE_HANDLE(HICON);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HKEY);
+typedef HKEY *PHKEY;
+DECLARE_HANDLE(HKL);
+DECLARE_HANDLE(HMENU);
+DECLARE_HANDLE(HMETAFILE);
+DECLARE_HANDLE(HMONITOR);
+DECLARE_HANDLE(HPALETTE);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HRSRC);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HWINEVENTHOOK);
+DECLARE_HANDLE(HWINSTA);
+DECLARE_HANDLE(HWND);
+
+/* Handle types that must remain interchangeable even with strict on */
+
+typedef HINSTANCE HMODULE;
+typedef HANDLE HGDIOBJ;
+typedef HANDLE HGLOBAL;
+typedef HANDLE HLOCAL;
+typedef HANDLE GLOBALHANDLE;
+typedef HANDLE LOCALHANDLE;
+typedef HICON HCURSOR;
+
+/* Callback function pointers types */
+
+#ifdef WINE_STRICT_PROTOTYPES
+typedef INT_PTR (CALLBACK *FARPROC)(void);
+typedef INT_PTR (CALLBACK *NEARPROC)(void);
+typedef INT_PTR (CALLBACK *PROC)(void);
+#else
+typedef INT_PTR (CALLBACK *FARPROC)();
+typedef INT_PTR (CALLBACK *NEARPROC)();
+typedef INT_PTR (CALLBACK *PROC)();
+#endif
+
+/* Macros to split words and longs. */
+
+#define LOBYTE(w) ((BYTE)((DWORD_PTR)(w) & 0xFF))
+#define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8))
+
+#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xFFFF))
+#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
+
+#define MAKEWORD(low,high) ((WORD)(((BYTE)((DWORD_PTR)(low) & 0xFF)) | ((WORD)((BYTE)((DWORD_PTR)(high) & 0xFF))) << 8))
+#define MAKELONG(low,high) ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))
+
+/* min and max macros */
+#ifndef NOMINMAX
+#ifndef max
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+#endif /* NOMINMAX */
+
+#ifdef MAX_PATH /* Work-around for Mingw */
+#undef MAX_PATH
+#endif /* MAX_PATH */
+
+#define MAX_PATH 260
+#define HFILE_ERROR ((HFILE)-1)
+
+/* The SIZE structure */
+typedef struct tagSIZE
+{
+ LONG cx;
+ LONG cy;
+} SIZE, *PSIZE, *LPSIZE;
+
+typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
+
+/* The POINT structure */
+typedef struct tagPOINT
+{
+ LONG x;
+ LONG y;
+} POINT, *PPOINT, *LPPOINT;
+
+typedef struct _POINTL
+{
+ LONG x;
+ LONG y;
+} POINTL, *PPOINTL;
+
+/* The POINTS structure */
+
+typedef struct tagPOINTS
+{
+#ifdef WORDS_BIGENDIAN
+ SHORT y;
+ SHORT x;
+#else
+ SHORT x;
+ SHORT y;
+#endif
+} POINTS, *PPOINTS, *LPPOINTS;
+
+typedef struct _FILETIME {
+#ifdef WORDS_BIGENDIAN
+ DWORD dwHighDateTime;
+ DWORD dwLowDateTime;
+#else
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#define _FILETIME_
+
+/* The RECT structure */
+typedef struct tagRECT
+{
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECT, *PRECT, *LPRECT;
+typedef const RECT *LPCRECT;
+
+typedef struct _RECTL
+{
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECTL, *PRECTL, *LPRECTL;
+
+typedef const RECTL *LPCRECTL;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDEF_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h
new file mode 100644
index 00000000..f4942d8f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windns.h
@@ -0,0 +1,666 @@
+/*
+ * DNS support
+ *
+ * Copyright (C) 2006 Matthew Kehrer
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDNS_H
+#define __WINE_WINDNS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DNS_TYPE_ZERO 0x0000
+#define DNS_TYPE_A 0x0001
+#define DNS_TYPE_NS 0x0002
+#define DNS_TYPE_MD 0x0003
+#define DNS_TYPE_MF 0x0004
+#define DNS_TYPE_CNAME 0x0005
+#define DNS_TYPE_SOA 0x0006
+#define DNS_TYPE_MB 0x0007
+#define DNS_TYPE_MG 0x0008
+#define DNS_TYPE_MR 0x0009
+#define DNS_TYPE_NULL 0x000a
+#define DNS_TYPE_WKS 0x000b
+#define DNS_TYPE_PTR 0x000c
+#define DNS_TYPE_HINFO 0x000d
+#define DNS_TYPE_MINFO 0x000e
+#define DNS_TYPE_MX 0x000f
+#define DNS_TYPE_TEXT 0x0010
+#define DNS_TYPE_RP 0x0011
+#define DNS_TYPE_AFSDB 0x0012
+#define DNS_TYPE_X25 0x0013
+#define DNS_TYPE_ISDN 0x0014
+#define DNS_TYPE_RT 0x0015
+#define DNS_TYPE_NSAP 0x0016
+#define DNS_TYPE_NSAPPTR 0x0017
+#define DNS_TYPE_SIG 0x0018
+#define DNS_TYPE_KEY 0x0019
+#define DNS_TYPE_PX 0x001a
+#define DNS_TYPE_GPOS 0x001b
+#define DNS_TYPE_AAAA 0x001c
+#define DNS_TYPE_LOC 0x001d
+#define DNS_TYPE_NXT 0x001e
+#define DNS_TYPE_EID 0x001f
+#define DNS_TYPE_NIMLOC 0x0020
+#define DNS_TYPE_SRV 0x0021
+#define DNS_TYPE_ATMA 0x0022
+#define DNS_TYPE_NAPTR 0x0023
+#define DNS_TYPE_KX 0x0024
+#define DNS_TYPE_CERT 0x0025
+#define DNS_TYPE_A6 0x0026
+#define DNS_TYPE_DNAME 0x0027
+#define DNS_TYPE_SINK 0x0028
+#define DNS_TYPE_OPT 0x0029
+#define DNS_TYPE_UINFO 0x0064
+#define DNS_TYPE_UID 0x0065
+#define DNS_TYPE_GID 0x0066
+#define DNS_TYPE_UNSPEC 0x0067
+#define DNS_TYPE_ADDRS 0x00f8
+#define DNS_TYPE_TKEY 0x00f9
+#define DNS_TYPE_TSIG 0x00fa
+#define DNS_TYPE_IXFR 0x00fb
+#define DNS_TYPE_AXFR 0x00fc
+#define DNS_TYPE_MAILB 0x00fd
+#define DNS_TYPE_MAILA 0x00fe
+#define DNS_TYPE_ALL 0x00ff
+#define DNS_TYPE_ANY 0x00ff
+
+#define DNS_TYPE_WINS 0xff01
+#define DNS_TYPE_WINSR 0xff02
+#define DNS_TYPE_NBSTAT (DNS_TYPE_WINSR)
+
+#define DNS_QUERY_STANDARD 0x00000000
+#define DNS_QUERY_ACCEPT_TRUNCATED_RESPONSE 0x00000001
+#define DNS_QUERY_USE_TCP_ONLY 0x00000002
+#define DNS_QUERY_NO_RECURSION 0x00000004
+#define DNS_QUERY_BYPASS_CACHE 0x00000008
+#define DNS_QUERY_NO_WIRE_QUERY 0x00000010
+#define DNS_QUERY_NO_LOCAL_NAME 0x00000020
+#define DNS_QUERY_NO_HOSTS_FILE 0x00000040
+#define DNS_QUERY_NO_NETBT 0x00000080
+#define DNS_QUERY_WIRE_ONLY 0x00000100
+#define DNS_QUERY_RETURN_MESSAGE 0x00000200
+#define DNS_QUERY_TREAT_AS_FQDN 0x00001000
+#define DNS_QUERY_DONT_RESET_TTL_VALUES 0x00100000
+#define DNS_QUERY_RESERVED 0xff000000
+
+typedef enum _DNS_NAME_FORMAT
+{
+ DnsNameDomain,
+ DnsNameDomainLabel,
+ DnsNameHostnameFull,
+ DnsNameHostnameLabel,
+ DnsNameWildcard,
+ DnsNameSrvRecord
+} DNS_NAME_FORMAT;
+
+typedef enum _DNS_FREE_TYPE
+{
+ DnsFreeFlat,
+ DnsFreeRecordList,
+ DnsFreeParsedMessageFields
+} DNS_FREE_TYPE;
+
+typedef enum _DNS_CHARSET
+{
+ DnsCharSetUnknown,
+ DnsCharSetUnicode,
+ DnsCharSetUtf8,
+ DnsCharSetAnsi
+} DNS_CHARSET;
+
+typedef enum _DNS_CONFIG_TYPE
+{
+ DnsConfigPrimaryDomainName_W,
+ DnsConfigPrimaryDomainName_A,
+ DnsConfigPrimaryDomainName_UTF8,
+ DnsConfigAdapterDomainName_W,
+ DnsConfigAdapterDomainName_A,
+ DnsConfigAdapterDomainName_UTF8,
+ DnsConfigDnsServerList,
+ DnsConfigSearchList,
+ DnsConfigAdapterInfo,
+ DnsConfigPrimaryHostNameRegistrationEnabled,
+ DnsConfigAdapterHostNameRegistrationEnabled,
+ DnsConfigAddressRegistrationMaxCount,
+ DnsConfigHostName_W,
+ DnsConfigHostName_A,
+ DnsConfigHostName_UTF8,
+ DnsConfigFullHostName_W,
+ DnsConfigFullHostName_A,
+ DnsConfigFullHostName_UTF8
+} DNS_CONFIG_TYPE;
+
+typedef enum _DnsSection
+{
+ DnsSectionQuestion,
+ DnsSectionAnswer,
+ DnsSectionAuthority,
+ DnsSectionAddtional /* Not a typo, as per Microsoft's headers */
+} DNS_SECTION;
+
+typedef LONG DNS_STATUS, *PDNS_STATUS;
+typedef DWORD IP4_ADDRESS, *PIP4_ADDRESS;
+
+typedef struct
+{
+ DWORD IP6Dword[4];
+} IP6_ADDRESS, *PIP6_ADDRESS, DNS_IP6_ADDRESS, *PDNS_IP6_ADDRESS;
+
+#define SIZEOF_IP4_ADDRESS 4
+#define IP4_ADDRESS_STRING_LENGTH 16
+#define IP6_ADDRESS_STRING_LENGTH 65
+#define DNS_ADDRESS_STRING_LENGTH IP6_ADDRESS_STRING_LENGTH
+#define IP4_ADDRESS_STRING_BUFFER_LENGTH IP4_ADDRESS_STRING_LENGTH
+#define IP6_ADDRESS_STRING_BUFFER_LENGTH IP6_ADDRESS_STRING_LENGTH
+
+typedef struct _IP4_ARRAY
+{
+ DWORD AddrCount;
+ IP4_ADDRESS AddrArray[1];
+} IP4_ARRAY, *PIP4_ARRAY;
+
+typedef struct _DNS_HEADER
+{
+ WORD Xid;
+ BYTE RecursionDesired;
+ BYTE Truncation;
+ BYTE Authoritative;
+ BYTE Opcode;
+ BYTE IsResponse;
+ BYTE ResponseCode;
+ BYTE Reserved;
+ BYTE RecursionAvailable;
+ WORD QuestionCount;
+ WORD AnswerCount;
+ WORD NameServerCount;
+ WORD AdditionalCount;
+} DNS_HEADER, *PDNS_HEADER;
+
+typedef struct _DNS_MESSAGE_BUFFER
+{
+ DNS_HEADER MessageHead;
+ CHAR MessageBody[1];
+} DNS_MESSAGE_BUFFER, *PDNS_MESSAGE_BUFFER;
+
+typedef struct
+{
+ IP4_ADDRESS IpAddress;
+} DNS_A_DATA, *PDNS_A_DATA;
+
+typedef struct _DnsRecordFlags
+{
+ DWORD Section :2;
+ DWORD Delete :1;
+ DWORD CharSet :2;
+ DWORD Unused :3;
+ DWORD Reserved :24;
+} DNS_RECORD_FLAGS;
+
+typedef struct
+{
+ PSTR pNamePrimaryServer;
+ PSTR pNameAdministrator;
+ DWORD dwSerialNo;
+ DWORD dwRefresh;
+ DWORD dwRetry;
+ DWORD dwExpire;
+ DWORD dwDefaultTtl;
+} DNS_SOA_DATAA, *PDNS_SOA_DATAA;
+
+typedef struct
+{
+ PWSTR pNamePrimaryServer;
+ PWSTR pNameAdministrator;
+ DWORD dwSerialNo;
+ DWORD dwRefresh;
+ DWORD dwRetry;
+ DWORD dwExpire;
+ DWORD dwDefaultTtl;
+} DNS_SOA_DATAW, *PDNS_SOA_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_SOA_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_SOA_DATA)
+
+typedef struct
+{
+ PSTR pNameHost;
+} DNS_PTR_DATAA, *PDNS_PTR_DATAA;
+
+typedef struct
+{
+ PWSTR pNameHost;
+} DNS_PTR_DATAW, *PDNS_PTR_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_PTR_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_PTR_DATA)
+
+typedef struct
+{
+ PSTR pNameMailbox;
+ PSTR pNameErrorsMailbox;
+} DNS_MINFO_DATAA, *PDNS_MINFO_DATAA;
+
+typedef struct
+{
+ PWSTR pNameMailbox;
+ PWSTR pNameErrorsMailbox;
+} DNS_MINFO_DATAW, *PDNS_MINFO_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_MINFO_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_MINFO_DATA)
+
+typedef struct
+{
+ PSTR pNameExchange;
+ WORD wPreference;
+ WORD Pad;
+} DNS_MX_DATAA, *PDNS_MX_DATAA;
+
+typedef struct
+{
+ PWSTR pNameExchange;
+ WORD wPreference;
+ WORD Pad;
+} DNS_MX_DATAW, *PDNS_MX_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_MX_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_MX_DATA)
+
+typedef struct
+{
+ DWORD dwStringCount;
+ PSTR pStringArray[1];
+} DNS_TXT_DATAA, *PDNS_TXT_DATAA;
+
+typedef struct
+{
+ DWORD dwStringCount;
+ PWSTR pStringArray[1];
+} DNS_TXT_DATAW, *PDNS_TXT_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_TXT_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_TXT_DATA)
+
+typedef struct
+{
+ DWORD dwByteCount;
+ BYTE Data[1];
+} DNS_NULL_DATA, *PDNS_NULL_DATA;
+
+typedef struct
+{
+ IP4_ADDRESS IpAddress;
+ UCHAR chProtocol;
+ BYTE BitMask[1];
+} DNS_WKS_DATA, *PDNS_WKS_DATA;
+
+typedef struct
+{
+ DNS_IP6_ADDRESS Ip6Address;
+} DNS_AAAA_DATA, *PDNS_AAAA_DATA;
+
+typedef struct
+{
+ WORD wFlags;
+ BYTE chProtocol;
+ BYTE chAlgorithm;
+ BYTE Key[1];
+} DNS_KEY_DATA, *PDNS_KEY_DATA;
+
+typedef struct
+{
+ WORD wVersion;
+ WORD wSize;
+ WORD wHorPrec;
+ WORD wVerPrec;
+ DWORD dwLatitude;
+ DWORD dwLongitude;
+ DWORD dwAltitude;
+} DNS_LOC_DATA, *PDNS_LOC_DATA;
+
+typedef struct
+{
+ PSTR pNameSigner;
+ WORD wTypeCovered;
+ BYTE chAlgorithm;
+ BYTE chLabelCount;
+ DWORD dwOriginalTtl;
+ DWORD dwExpiration;
+ DWORD dwTimeSigned;
+ WORD wKeyTag;
+ WORD Pad;
+ BYTE Signature[1];
+} DNS_SIG_DATAA, *PDNS_SIG_DATAA;
+
+typedef struct
+{
+ PWSTR pNameSigner;
+ WORD wTypeCovered;
+ BYTE chAlgorithm;
+ BYTE chLabelCount;
+ DWORD dwOriginalTtl;
+ DWORD dwExpiration;
+ DWORD dwTimeSigned;
+ WORD wKeyTag;
+ WORD Pad;
+ BYTE Signature[1];
+} DNS_SIG_DATAW, *PDNS_SIG_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_SIG_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_SIG_DATA)
+
+#define DNS_ATMA_MAX_ADDR_LENGTH 20
+
+typedef struct
+{
+ BYTE AddressType;
+ BYTE Address[DNS_ATMA_MAX_ADDR_LENGTH];
+} DNS_ATMA_DATA, *PDNS_ATMA_DATA;
+
+typedef struct
+{
+ PSTR pNameNext;
+ WORD wNumTypes;
+ WORD wTypes[1];
+} DNS_NXT_DATAA, *PDNS_NXT_DATAA;
+
+typedef struct
+{
+ PWSTR pNameNext;
+ WORD wNumTypes;
+ WORD wTypes[1];
+} DNS_NXT_DATAW, *PDNS_NXT_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_NXT_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_NXT_DATA)
+
+typedef struct
+{
+ PSTR pNameTarget;
+ WORD wPriority;
+ WORD wWeight;
+ WORD wPort;
+ WORD Pad;
+} DNS_SRV_DATAA, *PDNS_SRV_DATAA;
+
+typedef struct
+{
+ PWSTR pNameTarget;
+ WORD wPriority;
+ WORD wWeight;
+ WORD wPort;
+ WORD Pad;
+} DNS_SRV_DATAW, *PDNS_SRV_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_SRV_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_SRV_DATA)
+
+typedef struct
+{
+ PSTR pNameAlgorithm;
+ PBYTE pAlgorithmPacket;
+ PBYTE pKey;
+ PBYTE pOtherData;
+ DWORD dwCreateTime;
+ DWORD dwExpireTime;
+ WORD wMode;
+ WORD wError;
+ WORD wKeyLength;
+ WORD wOtherLength;
+ UCHAR cAlgNameLength;
+ BOOL bPacketPointers;
+} DNS_TKEY_DATAA, *PDNS_TKEY_DATAA;
+
+typedef struct
+{
+ PWSTR pNameAlgorithm;
+ PBYTE pAlgorithmPacket;
+ PBYTE pKey;
+ PBYTE pOtherData;
+ DWORD dwCreateTime;
+ DWORD dwExpireTime;
+ WORD wMode;
+ WORD wError;
+ WORD wKeyLength;
+ WORD wOtherLength;
+ UCHAR cAlgNameLength;
+ BOOL bPacketPointers;
+} DNS_TKEY_DATAW, *PDNS_TKEY_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_TKEY_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_TKEY_DATA)
+
+typedef struct
+{
+ PSTR pNameAlgorithm;
+ PBYTE pAlgorithmPacket;
+ PBYTE pSignature;
+ PBYTE pOtherData;
+ LONGLONG i64CreateTime;
+ WORD wFudgeTime;
+ WORD wOriginalXid;
+ WORD wError;
+ WORD wSigLength;
+ WORD wOtherLength;
+ UCHAR cAlgNameLength;
+ BOOL bPacketPointers;
+} DNS_TSIG_DATAA, *PDNS_TSIG_DATAA;
+
+typedef struct
+{
+ PWSTR pNameAlgorithm;
+ PBYTE pAlgorithmPacket;
+ PBYTE pSignature;
+ PBYTE pOtherData;
+ LONGLONG i64CreateTime;
+ WORD wFudgeTime;
+ WORD wOriginalXid;
+ WORD wError;
+ WORD wSigLength;
+ WORD wOtherLength;
+ UCHAR cAlgNameLength;
+ BOOL bPacketPointers;
+} DNS_TSIG_DATAW, *PDNS_TSIG_DATAW;
+
+typedef struct
+{
+ DWORD dwMappingFlag;
+ DWORD dwLookupTimeout;
+ DWORD dwCacheTimeout;
+ DWORD cWinsServerCount;
+ IP4_ADDRESS WinsServers[1];
+} DNS_WINS_DATA, *PDNS_WINS_DATA;
+
+typedef struct
+{
+ DWORD dwMappingFlag;
+ DWORD dwLookupTimeout;
+ DWORD dwCacheTimeout;
+ PSTR pNameResultDomain;
+} DNS_WINSR_DATAA, *PDNS_WINSR_DATAA;
+
+typedef struct
+{
+ DWORD dwMappingFlag;
+ DWORD dwLookupTimeout;
+ DWORD dwCacheTimeout;
+ PWSTR pNameResultDomain;
+} DNS_WINSR_DATAW, *PDNS_WINSR_DATAW;
+
+DECL_WINELIB_TYPE_AW(DNS_WINSR_DATA)
+DECL_WINELIB_TYPE_AW(PDNS_WINSR_DATA)
+
+typedef struct _DnsRecordA
+{
+ struct _DnsRecordA *pNext;
+ PSTR pName;
+ WORD wType;
+ WORD wDataLength;
+ union
+ {
+ DWORD DW;
+ DNS_RECORD_FLAGS S;
+ } Flags;
+ DWORD dwTtl;
+ DWORD dwReserved;
+ union
+ {
+ DNS_A_DATA A;
+ DNS_SOA_DATAA SOA, Soa;
+ DNS_PTR_DATAA PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
+ DNS_MINFO_DATAA MINFO, Minfo, RP, Rp;
+ DNS_MX_DATAA MX, Mx, AFSDB, Afsdb, RT, Rt;
+ DNS_TXT_DATAA HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
+ DNS_NULL_DATA Null;
+ DNS_WKS_DATA WKS, Wks;
+ DNS_AAAA_DATA AAAA;
+ DNS_KEY_DATA KEY, Key;
+ DNS_SIG_DATAA SIG, Sig;
+ DNS_ATMA_DATA ATMA, Atma;
+ DNS_NXT_DATAA NXT, Nxt;
+ DNS_SRV_DATAA SRV, Srv;
+ DNS_TKEY_DATAA TKEY, Tkey;
+ DNS_TSIG_DATAA TSIG, Tsig;
+ DNS_WINS_DATA WINS, Wins;
+ DNS_WINSR_DATAA WINSR, WinsR, NBSTAT, Nbstat;
+ } Data;
+} DNS_RECORDA, *PDNS_RECORDA;
+
+typedef struct _DnsRecordW
+{
+ struct _DnsRecordW *pNext;
+ PWSTR pName;
+ WORD wType;
+ WORD wDataLength;
+ union
+ {
+ DWORD DW;
+ DNS_RECORD_FLAGS S;
+ } Flags;
+ DWORD dwTtl;
+ DWORD dwReserved;
+ union
+ {
+ DNS_A_DATA A;
+ DNS_SOA_DATAW SOA, Soa;
+ DNS_PTR_DATAW PTR, Ptr, NS, Ns, CNAME, Cname, MB, Mb, MD, Md, MF, Mf, MG, Mg, MR, Mr;
+ DNS_MINFO_DATAW MINFO, Minfo, RP, Rp;
+ DNS_MX_DATAW MX, Mx, AFSDB, Afsdb, RT, Rt;
+ DNS_TXT_DATAW HINFO, Hinfo, ISDN, Isdn, TXT, Txt, X25;
+ DNS_NULL_DATA Null;
+ DNS_WKS_DATA WKS, Wks;
+ DNS_AAAA_DATA AAAA;
+ DNS_KEY_DATA KEY, Key;
+ DNS_SIG_DATAW SIG, Sig;
+ DNS_ATMA_DATA ATMA, Atma;
+ DNS_NXT_DATAW NXT, Nxt;
+ DNS_SRV_DATAW SRV, Srv;
+ DNS_TKEY_DATAW TKEY, Tkey;
+ DNS_TSIG_DATAW TSIG, Tsig;
+ DNS_WINS_DATA WINS, Wins;
+ DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat;
+ } Data;
+} DNS_RECORDW, *PDNS_RECORDW;
+
+#if defined(__WINESRC__) || defined(UNICODE)
+typedef DNS_RECORDW DNS_RECORD;
+typedef PDNS_RECORDW PDNS_RECORD;
+#else
+typedef DNS_RECORDA DNS_RECORD;
+typedef PDNS_RECORDA PDNS_RECORD;
+#endif
+
+typedef struct _DnsRRSet
+{
+ PDNS_RECORD pFirstRR;
+ PDNS_RECORD pLastRR;
+} DNS_RRSET, *PDNS_RRSET;
+
+#define DNS_RRSET_INIT( rrset ) \
+{ \
+ PDNS_RRSET _prrset = &(rrset); \
+ _prrset->pFirstRR = NULL; \
+ _prrset->pLastRR = (PDNS_RECORD) &_prrset->pFirstRR; \
+}
+
+#define DNS_RRSET_ADD( rrset, pnewRR ) \
+{ \
+ PDNS_RRSET _prrset = &(rrset); \
+ PDNS_RECORD _prrnew = (pnewRR); \
+ _prrset->pLastRR->pNext = _prrnew; \
+ _prrset->pLastRR = _prrnew; \
+}
+
+#define DNS_RRSET_TERMINATE( rrset ) \
+{ \
+ PDNS_RRSET _prrset = &(rrset); \
+ _prrset->pLastRR->pNext = NULL; \
+}
+
+DNS_STATUS WINAPI DnsAcquireContextHandle_A(DWORD,PVOID,PHANDLE);
+DNS_STATUS WINAPI DnsAcquireContextHandle_W(DWORD,PVOID,PHANDLE);
+#define DnsAcquireContextHandle WINELIB_NAME_AW(DnsAcquireContextHandle_)
+DNS_STATUS WINAPI DnsExtractRecordsFromMessage_W(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDW*);
+DNS_STATUS WINAPI DnsExtractRecordsFromMessage_UTF8(PDNS_MESSAGE_BUFFER,WORD,PDNS_RECORDA*);
+VOID WINAPI DnsFree(PVOID,DNS_FREE_TYPE);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_A(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_W(PDNS_RECORDW,PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsModifyRecordsInSet_UTF8(PDNS_RECORDA,PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+#define DnsModifyRecordsInSet WINELIB_NAME_AW(DnsModifyRecordsInSet_)
+BOOL WINAPI DnsNameCompare_A(PCSTR,PCSTR);
+BOOL WINAPI DnsNameCompare_W(PCWSTR,PCWSTR);
+#define DnsNameCompare WINELIB_NAME_AW(DnsNameCompare_)
+DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*);
+DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PVOID,PDNS_RECORDW*,PVOID*);
+DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PVOID,PDNS_RECORDA*,PVOID*);
+#define DnsQuery WINELIB_NAME_AW(DnsQuery_)
+DNS_STATUS WINAPI DnsQueryConfig(DNS_CONFIG_TYPE,DWORD,PCWSTR,PVOID,PVOID,PDWORD);
+BOOL WINAPI DnsRecordCompare(PDNS_RECORD,PDNS_RECORD);
+PDNS_RECORD WINAPI DnsRecordCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
+VOID WINAPI DnsRecordListFree(PDNS_RECORD,DNS_FREE_TYPE);
+BOOL WINAPI DnsRecordSetCompare(PDNS_RECORD,PDNS_RECORD,PDNS_RECORD*,PDNS_RECORD*);
+PDNS_RECORD WINAPI DnsRecordSetCopyEx(PDNS_RECORD,DNS_CHARSET,DNS_CHARSET);
+PDNS_RECORD WINAPI DnsRecordSetDetach(PDNS_RECORD);
+void WINAPI DnsReleaseContextHandle(HANDLE);
+DNS_STATUS WINAPI DnsReplaceRecordSetA(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsReplaceRecordSetW(PDNS_RECORDW,DWORD,HANDLE,PVOID,PVOID);
+DNS_STATUS WINAPI DnsReplaceRecordSetUTF8(PDNS_RECORDA,DWORD,HANDLE,PVOID,PVOID);
+#define DnsReplaceRecordSet WINELIB_NAME_AW(DnsReplaceRecordSet)
+DNS_STATUS WINAPI DnsValidateName_A(PCSTR,DNS_NAME_FORMAT);
+DNS_STATUS WINAPI DnsValidateName_W(PCWSTR, DNS_NAME_FORMAT);
+DNS_STATUS WINAPI DnsValidateName_UTF8(PCSTR,DNS_NAME_FORMAT);
+#define DnsValidateName WINELIB_NAME_AW(DnsValidateName_)
+BOOL WINAPI DnsWriteQuestionToBuffer_W(PDNS_MESSAGE_BUFFER,PDWORD,PCWSTR,WORD,WORD,BOOL);
+BOOL WINAPI DnsWriteQuestionToBuffer_UTF8(PDNS_MESSAGE_BUFFER,PDWORD,PCSTR,WORD,WORD,BOOL);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h
new file mode 100644
index 00000000..1510204b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windows.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDOWS_H
+#define __WINE_WINDOWS_H
+
+#if defined(_MSC_VER) && (_MSC_VER >= 800) && !defined(__cplusplus)
+/* TYPE_ALIGNMENT generates this - move it outside the warning push/pop scope. */
+# pragma warning(disable:4116)
+#endif
+
+#ifndef _INC_WINDOWS
+#define _INC_WINDOWS
+
+#if defined(RC_INVOKED) && !defined(NOWINRES)
+#include <winresrc.h>
+#else /* RC_INVOKED && !NOWINRES */
+
+/* All the basic includes */
+#include <excpt.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <wingdi.h>
+#include <winuser.h>
+#include <winnls.h>
+#include <wincon.h>
+#include <winver.h>
+#include <winreg.h>
+#include <winnetwk.h>
+
+/* Not so essential ones */
+#ifndef __WINESRC__
+
+#ifndef WIN32_LEAN_AND_MEAN
+
+#include <cderr.h>
+#include <dde.h>
+#include <ddeml.h>
+#include <dlgs.h>
+#include <lzexpand.h>
+#include <mmsystem.h>
+#include <nb30.h>
+#include <rpc.h>
+#include <shellapi.h>
+#include <winperf.h>
+
+#ifndef WINE_NOWINSOCK
+#include <winsock.h>
+#endif /* WINE_NOWINSOCK */
+
+#ifndef NOCRYPT
+#include <wincrypt.h>
+/* #include <winefs.h> */
+#include <winscard.h>
+#endif /* !NOCRYPT */
+
+#ifndef NOGDI
+#include <winspool.h>
+#ifdef INC_OLE1
+/* #include <ole.h> */
+#else
+#include <ole2.h>
+#endif
+#include <commdlg.h>
+#endif /* !NOGDI */
+
+#endif /* !WIN32_LEAN_AND_MEAN */
+
+/* #include <stralign.h> */
+
+#ifdef INC_OLE2
+#include <ole2.h>
+#endif /* INC_OLE2 */
+
+#ifndef NOSERVICE
+#include <winsvc.h>
+#endif /* !NOSERVICE */
+
+#ifndef NOMCX
+#include <mcx.h>
+#endif /* !NOMCX */
+
+#ifndef NOIMM
+#include <imm.h>
+#endif /* !NOIMM */
+
+#endif /* __WINESRC__ */
+
+#endif /* RC_INVOKED && !NOWINRES */
+#endif /* _INC_WINDOWS */
+#endif /* __WINE_WINDOWS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h
new file mode 100644
index 00000000..fea94e8e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/windowsx.h
@@ -0,0 +1,1448 @@
+/* Copyright (C) 1999 Corel Corporation (Paul Quinn)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _INC_WINDOWSX
+#define _INC_WINDOWSX
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __WINESRC__
+/* This file contains macros that cause warnings on gcc 4.1, so avoid it. */
+#error Please avoid use of windowsx.h in Wine source code.
+#endif
+
+#ifndef SNDMSG
+#ifdef __cplusplus
+#define SNDMSG ::SendMessage
+#else /* __cplusplus */
+#define SNDMSG SendMessage
+#endif /* __cplusplus */
+#endif /* SNDMSG */
+
+#define GET_WPARAM(wp, lp) (wp)
+#define GET_LPARAM(wp, lp) (lp)
+
+#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
+#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
+
+#define GET_EM_LINESCROLL_MPS(vert, horz) (WPARAM)horz, (LPARAM)vert
+
+#define GET_EM_SETSEL_START(wp, lp) (INT)(wp)
+#define GET_EM_SETSEL_END(wp, lp) (lp)
+#define GET_EM_SETSEL_MPS(iStart, iEnd) (WPARAM)(iStart), (LPARAM)(iEnd)
+
+#define GET_WM_ACTIVATE_STATE(wp, lp) LOWORD(wp)
+#define GET_WM_ACTIVATE_FMINIMIZED(wp, lp) (BOOL)HIWORD(wp)
+#define GET_WM_ACTIVATE_HWND(wp, lp) (HWND)(lp)
+#define GET_WM_ACTIVATE_MPS(s, fmin, hwnd) (WPARAM)MAKELONG((s), (fmin)), (LPARAM)(hwnd)
+
+#define GET_WM_CHANGECBCHAIN_HWNDNEXT(wp, lp) (HWND)(lp)
+
+#define GET_WM_CHARTOITEM_CHAR(wp, lp) (TCHAR)LOWORD(wp)
+#define GET_WM_CHARTOITEM_POS(wp, lp) HIWORD(wp)
+#define GET_WM_CHARTOITEM_HWND(wp, lp) (HWND)(lp)
+#define GET_WM_CHARTOITEM_MPS(ch, pos, hwnd) (WPARAM)MAKELONG((pos), (ch)), (LPARAM)(hwnd)
+
+#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
+#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp)
+#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp)
+#define GET_WM_COMMAND_MPS(id, hwnd, cmd) (WPARAM)MAKELONG(id, cmd), (LPARAM)(hwnd)
+
+#define WM_CTLCOLOR 0x0019
+
+#define GET_WM_CTLCOLOR_HDC(wp, lp, msg) (HDC)(wp)
+#define GET_WM_CTLCOLOR_HWND(wp, lp, msg) (HWND)(lp)
+#define GET_WM_CTLCOLOR_TYPE(wp, lp, msg) (WORD)(msg - WM_CTLCOLORMSGBOX)
+#define GET_WM_CTLCOLOR_MSG(type) (WORD)(WM_CTLCOLORMSGBOX+(type))
+#define GET_WM_CTLCOLOR_MPS(hdc, hwnd, type) (WPARAM)(hdc), (LPARAM)(hwnd)
+
+#define GET_WM_HSCROLL_CODE(wp, lp) LOWORD(wp)
+#define GET_WM_HSCROLL_POS(wp, lp) HIWORD(wp)
+#define GET_WM_HSCROLL_HWND(wp, lp) (HWND)(lp)
+#define GET_WM_HSCROLL_MPS(code, pos, hwnd) (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd)
+
+#define GET_WM_MENUCHAR_CHAR(wp, lp) (TCHAR)LOWORD(wp)
+#define GET_WM_MENUCHAR_HMENU(wp, lp) (HMENU)(lp)
+#define GET_WM_MENUCHAR_FMENU(wp, lp) (BOOL)HIWORD(wp)
+#define GET_WM_MENUCHAR_MPS(ch, hmenu, f) (WPARAM)MAKELONG(ch, f), (LPARAM)(hmenu)
+
+#define GET_WM_MENUSELECT_CMD(wp, lp) LOWORD(wp)
+#define GET_WM_MENUSELECT_FLAGS(wp, lp) (UINT)(int)(short)HIWORD(wp)
+#define GET_WM_MENUSELECT_HMENU(wp, lp) (HMENU)(lp)
+#define GET_WM_MENUSELECT_MPS(cmd, f, hmenu) (WPARAM)MAKELONG(cmd, f), (LPARAM)(hmenu)
+
+#define GET_WM_MDIACTIVATE_FACTIVATE(hwnd, wp, lp) (lp == (LPARAM)hwnd)
+#define GET_WM_MDIACTIVATE_HWNDDEACT(wp, lp) (HWND)(wp)
+#define GET_WM_MDIACTIVATE_HWNDACTIVATE(wp, lp) (HWND)(lp)
+#define GET_WM_MDIACTIVATE_MPS(f, hwndD, hwndA) (WPARAM)(hwndA), 0
+#define GET_WM_MDISETMENU_MPS(hmenuF, hmenuW) (WPARAM)hmenuF, (LPARAM)hmenuW
+
+#define GET_WM_PARENTNOTIFY_MSG(wp, lp) LOWORD(wp)
+#define GET_WM_PARENTNOTIFY_ID(wp, lp) HIWORD(wp)
+#define GET_WM_PARENTNOTIFY_HWNDCHILD(wp, lp) (HWND)(lp)
+#define GET_WM_PARENTNOTIFY_X(wp, lp) (int)(short)LOWORD(lp)
+#define GET_WM_PARENTNOTIFY_Y(wp, lp) (int)(short)HIWORD(lp)
+#define GET_WM_PARENTNOTIFY_MPS(msg, id, hwnd) (WPARAM)MAKELONG(id, msg), (LPARAM)(hwnd)
+#define GET_WM_PARENTNOTIFY2_MPS(msg, x, y) (WPARAM)MAKELONG(0, msg), MAKELONG(x, y)
+
+#define GET_WM_VKEYTOITEM_CODE(wp, lp) (int)(short)LOWORD(wp)
+#define GET_WM_VKEYTOITEM_ITEM(wp, lp) HIWORD(wp)
+#define GET_WM_VKEYTOITEM_HWND(wp, lp) (HWND)(lp)
+#define GET_WM_VKEYTOITEM_MPS(code, item, hwnd) (WPARAM)MAKELONG(item, code), (LPARAM)(hwnd)
+
+#define GET_WM_VSCROLL_CODE(wp, lp) LOWORD(wp)
+#define GET_WM_VSCROLL_POS(wp, lp) HIWORD(wp)
+#define GET_WM_VSCROLL_HWND(wp, lp) (HWND)(lp)
+#define GET_WM_VSCROLL_MPS(code, pos, hwnd) (WPARAM)MAKELONG(code, pos), (LPARAM)(hwnd)
+
+/****** KERNEL Macro APIs ******************************************************/
+
+#define GetInstanceModule(hInst) (HMODULE)(hInst)
+#define GlobalPtrHandle(lp) ((HGLOBAL)GlobalHandle(lp))
+#define GlobalLockPtr(lp) ((BOOL)GlobalLock(GlobalPtrHandle(lp)))
+#define GlobalUnlockPtr(lp) GlobalUnlock(GlobalPtrHandle(lp))
+#define GlobalAllocPtr(flags, cb) (GlobalLock(GlobalAlloc((flags), (cb))))
+#define GlobalReAllocPtr(lp, cbNew, flags) (GlobalUnlockPtr(lp), GlobalLock(GlobalReAlloc(GlobalPtrHandle(lp) , (cbNew), (flags))))
+#define GlobalFreePtr(lp) (GlobalUnlockPtr(lp), (BOOL)(ULONG_PTR)GlobalFree(GlobalPtrHandle(lp)))
+
+/****** USER Macro APIs ******************************************************/
+
+#define GetWindowInstance(hwnd) ((HMODULE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE))
+
+#define GetWindowStyle(hwnd) ((DWORD)GetWindowLong(hwnd, GWL_STYLE))
+#define GetWindowExStyle(hwnd) ((DWORD)GetWindowLong(hwnd, GWL_EXSTYLE))
+
+#define GetWindowOwner(hwnd) GetWindow(hwnd, GW_OWNER)
+
+#define GetFirstChild(hwnd) GetTopWindow(hwnd)
+#define GetFirstSibling(hwnd) GetWindow(hwnd, GW_HWNDFIRST)
+#define GetLastSibling(hwnd) GetWindow(hwnd, GW_HWNDLAST)
+#define GetNextSibling(hwnd) GetWindow(hwnd, GW_HWNDNEXT)
+#define GetPrevSibling(hwnd) GetWindow(hwnd, GW_HWNDPREV)
+
+#define GetWindowID(hwnd) GetDlgCtrlID(hwnd)
+
+#define SetWindowRedraw(hwnd, fRedraw) \
+ ((void)SendMessage(hwnd, WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L))
+#define SubclassWindow(hwnd, lpfn) \
+ ((WNDPROC)SetWindowLongPtr((hwnd), GWLP_WNDPROC, (LPARAM)(WNDPROC)(lpfn)))
+
+#define IsMinimized(hwnd) IsIconic(hwnd)
+#define IsMaximized(hwnd) IsZoomed(hwnd)
+#define IsRestored(hwnd) ((GetWindowStyle(hwnd) & (WS_MINIMIZE | WS_MAXIMIZE)) == 0L)
+#define SetWindowFont(hwnd, hfont, fRedraw) \
+ FORWARD_WM_SETFONT((hwnd), (hfont), (fRedraw), SendMessage)
+
+#define GetWindowFont(hwnd) FORWARD_WM_GETFONT((hwnd), SendMessage)
+
+#define MapWindowRect(hwndFrom, hwndTo, lprc) \
+ MapWindowPoints((hwndFrom), (hwndTo), (POINT *)(lprc), 2)
+
+#define IsLButtonDown() (GetKeyState(VK_LBUTTON) < 0)
+#define IsRButtonDown() (GetKeyState(VK_RBUTTON) < 0)
+#define IsMButtonDown() (GetKeyState(VK_MBUTTON) < 0)
+
+#define SetDlgMsgResult(hwnd, msg, result) (( \
+ (msg) == WM_CTLCOLORMSGBOX || \
+ (msg) == WM_CTLCOLOREDIT || \
+ (msg) == WM_CTLCOLORLISTBOX || \
+ (msg) == WM_CTLCOLORBTN || \
+ (msg) == WM_CTLCOLORDLG || \
+ (msg) == WM_CTLCOLORSCROLLBAR || \
+ (msg) == WM_CTLCOLORSTATIC || \
+ (msg) == WM_COMPAREITEM || \
+ (msg) == WM_VKEYTOITEM || \
+ (msg) == WM_CHARTOITEM || \
+ (msg) == WM_QUERYDRAGICON || \
+ (msg) == WM_INITDIALOG \
+ ) ? (BOOL)(result) : (SetWindowLongPtr((hwnd), DWLP_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))
+
+#define DefDlgProcEx(hwnd, msg, wParam, lParam, pfRecursion) \
+ (*(pfRecursion) = TRUE, DefDlgProc(hwnd, msg, wParam, lParam))
+
+#define CheckDefDlgRecursion(pfRecursion) \
+ if (*(pfRecursion)) { *(pfRecursion) = FALSE; return FALSE; }
+
+#define SubclassDialog(hwndDlg, lpfn) \
+ ((DLGPROC)SetWindowLongPtr(hwndDlg, DWLP_DLGPROC, (LPARAM)(DLGPROC)(lpfn)))
+
+#define DeletePen(hpen) DeleteObject((HGDIOBJ)(HPEN)(hpen))
+#define SelectPen(hdc, hpen) ((HPEN)SelectObject((hdc), (HGDIOBJ)(HPEN)(hpen)))
+#define GetStockPen(i) ((HPEN)GetStockObject(i))
+
+#define DeleteBrush(hbr) DeleteObject((HGDIOBJ)(HBRUSH)(hbr))
+#define SelectBrush(hdc, hbr) ((HBRUSH)SelectObject((hdc), (HGDIOBJ)(HBRUSH)(hbr)))
+#define GetStockBrush(i) ((HBRUSH)GetStockObject(i))
+
+#define DeleteRgn(hrgn) DeleteObject((HGDIOBJ)(HRGN)(hrgn))
+
+#define CopyRgn(hrgnDst, hrgnSrc) CombineRgn(hrgnDst, hrgnSrc, 0, RGN_COPY)
+#define IntersectRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_AND)
+#define SubtractRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_DIFF)
+#define UnionRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_OR)
+#define XorRgn(hrgnResult, hrgnA, hrgnB) CombineRgn(hrgnResult, hrgnA, hrgnB, RGN_XOR)
+
+#define DeletePalette(hpal) DeleteObject((HGDIOBJ)(HPALETTE)(hpal))
+
+#define DeleteFont(hfont) DeleteObject((HGDIOBJ)(HFONT)(hfont))
+#define SelectFont(hdc, hfont) ((HFONT)SelectObject((hdc), (HGDIOBJ)(HFONT) (hfont)))
+#define GetStockFont(i) ((HFONT)GetStockObject(i))
+#define DeleteBitmap(hbm) DeleteObject((HGDIOBJ)(HBITMAP)(hbm))
+#define SelectBitmap(hdc, hbm) ((HBITMAP)SelectObject((hdc), (HGDIOBJ)(HBITMAP)(hbm)))
+#define InsetRect(lprc, dx, dy) InflateRect((lprc), -(dx), -(dy))
+
+
+/* Button Message APIs */
+
+#define Button_Enable(hwndCtl, fEnable) \
+ EnableWindow((hwndCtl), (fEnable))
+
+#define Button_GetCheck(hwndCtl) \
+ ((int)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L))
+
+#define Button_GetState(hwndCtl) \
+ ((int)SendMessage((hwndCtl), BM_GETSTATE, 0L, 0L))
+
+#define Button_GetText(hwndCtl, lpch, cchMax) \
+ GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define Button_GetTextLength(hwndCtl) \
+ GetWindowTextLength(hwndCtl)
+
+#define Button_SetCheck(hwndCtl, check) \
+ ((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L))
+
+#define Button_SetState(hwndCtl, state) \
+ ((UINT)SendMessage((hwndCtl), BM_SETSTATE, (WPARAM)(int)(state), 0L))
+
+#define Button_SetStyle(hwndCtl, style, fRedraw) \
+ ((void)SendMessage((hwndCtl), BM_SETSTYLE, (WPARAM)LOWORD(style), MAKELPARAM((fRedraw) != 0, 0)))
+
+#define Button_SetText(hwndCtl, lpsz) \
+ SetWindowText((hwndCtl), (lpsz))
+
+
+/* ComboBox Message APIs */
+
+#define ComboBox_AddItemData(hwndCtl, data) \
+ ((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data)))
+
+#define ComboBox_AddString(hwndCtl, lpsz) \
+ ((int)SendMessage((hwndCtl), CB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ComboBox_DeleteString(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), CB_DELETESTRING, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_Dir(hwndCtl, attrs, lpszFileSpec) \
+ ((int)SendMessage((hwndCtl), CB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))
+
+#define ComboBox_Enable(hwndCtl, fEnable) \
+ EnableWindow((hwndCtl), (fEnable))
+
+#define ComboBox_FindItemData(hwndCtl, indexStart, data) \
+ ((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
+
+#define ComboBox_FindString(hwndCtl, indexStart, lpszFind) \
+ ((int)SendMessage((hwndCtl), CB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ComboBox_FindStringExact(hwndCtl, indexStart, lpszFind) \
+ ((int)SendMessage((hwndCtl), CB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ComboBox_GetCount(hwndCtl) \
+ ((int)SendMessage((hwndCtl), CB_GETCOUNT, 0L, 0L))
+
+#define ComboBox_GetCurSel(hwndCtl) \
+ ((int)SendMessage((hwndCtl), CB_GETCURSEL, 0L, 0L))
+
+#define ComboBox_GetDroppedControlRect(hwndCtl, lprc) \
+ ((void)SendMessage((hwndCtl), CB_GETDROPPEDCONTROLRECT, 0L, (LPARAM)(RECT *)(lprc)))
+
+#define ComboBox_GetDroppedState(hwndCtl) \
+ ((BOOL)SendMessage((hwndCtl), CB_GETDROPPEDSTATE, 0L, 0L))
+
+#define ComboBox_GetEditSel(hwndCtl) \
+ ((DWORD)SendMessage((hwndCtl), CB_GETEDITSEL, 0L, 0L))
+
+#define ComboBox_GetExtendedUI(hwndCtl) \
+ ((UINT)SendMessage((hwndCtl), CB_GETEXTENDEDUI, 0L, 0L))
+
+#define ComboBox_GetItemData(hwndCtl, index) \
+ ((LRESULT)SendMessage((hwndCtl), CB_GETITEMDATA, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_GetItemHeight(hwndCtl) \
+ ((int)SendMessage((hwndCtl), CB_GETITEMHEIGHT, 0L, 0L))
+
+#define ComboBox_GetLBText(hwndCtl, index, lpszBuffer) \
+ ((int)SendMessage((hwndCtl), CB_GETLBTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))
+
+#define ComboBox_GetLBTextLen(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), CB_GETLBTEXTLEN, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_InsertItemData(hwndCtl, index, data) \
+ ((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data)))
+
+#define ComboBox_LimitText(hwndCtl, cchLimit) \
+ ((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L))
+
+#define ComboBox_GetText(hwndCtl, lpch, cchMax) \
+ GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define ComboBox_GetTextLength(hwndCtl) \
+ GetWindowTextLength(hwndCtl)
+
+#define ComboBox_InsertString(hwndCtl, index, lpsz) \
+ ((int)SendMessage((hwndCtl), CB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ComboBox_LimitText(hwndCtl, cchLimit) \
+ ((int)SendMessage((hwndCtl), CB_LIMITTEXT, (WPARAM)(int)(cchLimit), 0L))
+
+#define ComboBox_ResetContent(hwndCtl) \
+ ((int)SendMessage((hwndCtl), CB_RESETCONTENT, 0L, 0L))
+
+#define ComboBox_SelectItemData(hwndCtl, indexStart, data) \
+ ((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))
+
+#define ComboBox_SelectString(hwndCtl, indexStart, lpszSelect) \
+ ((int)SendMessage((hwndCtl), CB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszSelect)))
+
+#define ComboBox_SetCurSel(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), CB_SETCURSEL, (WPARAM)(int)(index), 0L))
+
+#define ComboBox_SetEditSel(hwndCtl, ichStart, ichEnd) \
+ ((int)SendMessage((hwndCtl), CB_SETEDITSEL, 0L, MAKELPARAM((ichStart), (ichEnd))))
+
+#define ComboBox_SetExtendedUI(hwndCtl, flags) \
+ ((int)SendMessage((hwndCtl), CB_SETEXTENDEDUI, (WPARAM)(UINT)(flags), 0L))
+
+#define ComboBox_SetItemData(hwndCtl, index, data) \
+ ((int)SendMessage((hwndCtl), CB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data)))
+
+#define ComboBox_SetItemHeight(hwndCtl, index, cyItem) \
+ ((int)SendMessage((hwndCtl), CB_SETITEMHEIGHT, (WPARAM)(int)(index), (LPARAM)(int)cyItem))
+
+#define ComboBox_SetText(hwndCtl, lpsz) \
+ SetWindowText((hwndCtl), (lpsz))
+
+#define ComboBox_ShowDropdown(hwndCtl, fShow) \
+ ((BOOL)SendMessage((hwndCtl), CB_SHOWDROPDOWN, (WPARAM)(BOOL)(fShow), 0L))
+
+
+/* Edit Message APIs */
+
+#define Edit_CanUndo(hwndCtl) \
+ ((BOOL)SendMessage((hwndCtl), EM_CANUNDO, 0L, 0L))
+
+#define Edit_EmptyUndoBuffer(hwndCtl) \
+ ((void)SendMessage((hwndCtl), EM_EMPTYUNDOBUFFER, 0L, 0L))
+
+#define Edit_Enable(hwndCtl, fEnable) \
+ EnableWindow((hwndCtl), (fEnable))
+
+#define Edit_FmtLines(hwndCtl, fAddEOL) \
+ ((BOOL)SendMessage((hwndCtl), EM_FMTLINES, (WPARAM)(BOOL)(fAddEOL), 0L))
+
+#define Edit_GetFirstVisibleLine(hwndCtl) \
+ ((int)SendMessage((hwndCtl), EM_GETFIRSTVISIBLELINE, 0L, 0L))
+
+#define Edit_GetHandle(hwndCtl) \
+ ((HLOCAL)SendMessage((hwndCtl), EM_GETHANDLE, 0L, 0L))
+
+#define Edit_GetLine(hwndCtl, line, lpch, cchMax) \
+ ((*((int *)(lpch)) = (cchMax)), ((int)SendMessage((hwndCtl), EM_GETLINE, (WPARAM)(int)(line), (LPARAM)(LPTSTR)(lpch))))
+
+#define Edit_GetModify(hwndCtl) \
+ ((BOOL)SendMessage((hwndCtl), EM_GETMODIFY, 0L, 0L))
+
+#define Edit_GetPasswordChar(hwndCtl) \
+ ((TCHAR)SendMessage((hwndCtl), EM_GETPASSWORDCHAR, 0L, 0L))
+
+#define Edit_GetRect(hwndCtl, lprc) \
+ ((void)SendMessage((hwndCtl), EM_GETRECT, 0L, (LPARAM)(RECT *)(lprc)))
+
+#define Edit_GetSel(hwndCtl) \
+ ((DWORD)SendMessage((hwndCtl), EM_GETSEL, 0L, 0L))
+
+#define Edit_GetText(hwndCtl, lpch, cchMax) \
+ GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define Edit_GetTextLength(hwndCtl) \
+ GetWindowTextLength(hwndCtl)
+
+#define Edit_GetWordBreakProc(hwndCtl) \
+ ((EDITWORDBREAKPROC)SendMessage((hwndCtl), EM_GETWORDBREAKPROC, 0L, 0L))
+
+#define Edit_LimitText(hwndCtl, cchMax) \
+ ((void)SendMessage((hwndCtl), EM_LIMITTEXT, (WPARAM)(UINT)(cchMax), 0L))
+
+#define Edit_LineFromChar(hwndCtl, ich) \
+ ((int)SendMessage((hwndCtl), EM_LINEFROMCHAR, (WPARAM)(int)(ich), 0L))
+
+#define Edit_LineIndex(hwndCtl, line) \
+ ((int)SendMessage((hwndCtl), EM_LINEINDEX, (WPARAM)(int)(line), 0L))
+
+#define Edit_GetLineCount(hwndCtl) \
+ ((int)SendMessage((hwndCtl), EM_GETLINECOUNT, 0L, 0L))
+
+#define Edit_LineLength(hwndCtl, line) \
+ ((int)SendMessage((hwndCtl), EM_LINELENGTH, (WPARAM)(int)(line), 0L))
+
+#define Edit_ReplaceSel(hwndCtl, lpszReplace) \
+ ((void)SendMessage((hwndCtl), EM_REPLACESEL, 0L, (LPARAM)(LPCTSTR)(lpszReplace)))
+
+#define Edit_Scroll(hwndCtl, dv, dh) \
+ ((void)SendMessage((hwndCtl), EM_LINESCROLL, (WPARAM)(int)(dh), (LPARAM)(int)(dv)))
+
+#define Edit_ScrollCaret(hwndCtl) \
+ ((BOOL)SendMessage((hwndCtl), EM_SCROLLCARET, 0, 0L))
+
+#define Edit_SetHandle(hwndCtl, h) \
+ ((void)SendMessage((hwndCtl), EM_SETHANDLE, (WPARAM)(UINT)(HLOCAL)(h), 0L))
+
+#define Edit_SetModify(hwndCtl, fModified) \
+ ((void)SendMessage((hwndCtl), EM_SETMODIFY, (WPARAM)(UINT)(fModified), 0L))
+
+#define Edit_SetPasswordChar(hwndCtl, ch) \
+ ((void)SendMessage((hwndCtl), EM_SETPASSWORDCHAR, (WPARAM)(UINT)(ch), 0L))
+
+#define Edit_SetReadOnly(hwndCtl, fReadOnly) \
+ ((BOOL)SendMessage((hwndCtl), EM_SETREADONLY, (WPARAM)(BOOL)(fReadOnly), 0L))
+
+#define Edit_SetRect(hwndCtl, lprc) \
+ ((void)SendMessage((hwndCtl), EM_SETRECT, 0L, (LPARAM)(const RECT *)(lprc)))
+
+#define Edit_SetRectNoPaint(hwndCtl, lprc) \
+ ((void)SendMessage((hwndCtl), EM_SETRECTNP, 0L, (LPARAM)(const RECT *)(lprc)))
+
+#define Edit_SetSel(hwndCtl, ichStart, ichEnd) \
+ ((void)SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd)))
+
+#define Edit_SetTabStops(hwndCtl, cTabs, lpTabs) \
+ ((void)SendMessage((hwndCtl), EM_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(const int *)(lpTabs)))
+
+#define Edit_SetText(hwndCtl, lpsz) \
+ SetWindowText((hwndCtl), (lpsz))
+
+#define Edit_SetWordBreakProc(hwndCtl, lpfnWordBreak) \
+ ((void)SendMessage((hwndCtl), EM_SETWORDBREAKPROC, 0L, (LPARAM)(EDITWORDBREAKPROC)(lpfnWordBreak)))
+
+#define Edit_Undo(hwndCtl) \
+ ((BOOL)SendMessage((hwndCtl), EM_UNDO, 0L, 0L))
+
+
+/* ListBox Message APIs */
+
+#define ListBox_AddItemData(hwndCtl, data) \
+ ((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_AddString(hwndCtl, lpsz) \
+ ((int)SendMessage((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ListBox_DeleteString(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), LB_DELETESTRING, (WPARAM)(int)(index), 0L))
+
+#define ListBox_Dir(hwndCtl, attrs, lpszFileSpec) \
+ ((int)SendMessage((hwndCtl), LB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))
+
+#define ListBox_Enable(hwndCtl, fEnable) \
+ EnableWindow((hwndCtl), (fEnable))
+
+#define ListBox_FindItemData(hwndCtl, indexStart, data) \
+ ((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_FindString(hwndCtl, indexStart, lpszFind) \
+ ((int)SendMessage((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ListBox_FindStringExact(hwndCtl, indexStart, lpszFind) \
+ ((int)SendMessage((hwndCtl), LB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ListBox_GetCaretIndex(hwndCtl) \
+ ((int)SendMessage((hwndCtl), LB_GETCARETINDEX, 0L, 0L))
+
+#define ListBox_GetCurSel(hwndCtl) \
+ ((int)SendMessage((hwndCtl), LB_GETCURSEL, 0L, 0L))
+
+#define ListBox_GetCount(hwndCtl) \
+ ((int)SendMessage((hwndCtl), LB_GETCOUNT, 0L, 0L))
+
+#define ListBox_GetHorizontalExtent(hwndCtl) \
+ ((int)SendMessage((hwndCtl), LB_GETHORIZONTALEXTENT, 0L, 0L))
+
+#define ListBox_GetItemData(hwndCtl, index) \
+ ((LRESULT)SendMessage((hwndCtl), LB_GETITEMDATA, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetItemHeight(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), LB_GETITEMHEIGHT, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetItemRect(hwndCtl, index, lprc) \
+ ((int)SendMessage((hwndCtl), LB_GETITEMRECT, (WPARAM)(int)(index), (LPARAM)(RECT *)(lprc)))
+
+#define ListBox_GetSel(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), LB_GETSEL, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetSelCount(hwndCtl) \
+ ((int)SendMessage((hwndCtl), LB_GETSELCOUNT, 0L, 0L))
+
+#define ListBox_GetSelItems(hwndCtl, cItems, lpItems) \
+ ((int)SendMessage((hwndCtl), LB_GETSELITEMS, (WPARAM)(int)(cItems), (LPARAM)(int *)(lpItems)))
+
+#define ListBox_GetText(hwndCtl, index, lpszBuffer) \
+ ((int)SendMessage((hwndCtl), LB_GETTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))
+
+#define ListBox_GetTextLen(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), LB_GETTEXTLEN, (WPARAM)(int)(index), 0L))
+
+#define ListBox_GetTopIndex(hwndCtl) \
+ ((int)SendMessage((hwndCtl), LB_GETTOPINDEX, 0L, 0L))
+
+#define ListBox_InsertItemData(hwndCtl, index, data) \
+ ((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_InsertString(hwndCtl, index, lpsz) \
+ ((int)SendMessage((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
+
+#define ListBox_ResetContent(hwndCtl) \
+ ((BOOL)SendMessage((hwndCtl), LB_RESETCONTENT, 0L, 0L))
+
+#define ListBox_SelectItemData(hwndCtl, indexStart, data) \
+ ((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(data)))
+
+#define ListBox_SelectString(hwndCtl, indexStart, lpszFind) \
+ ((int)SendMessage((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
+
+#define ListBox_SelItemRange(hwndCtl, fSelect, first, last) \
+ ((int)SendMessage((hwndCtl), LB_SELITEMRANGE, (WPARAM)(BOOL)(fSelect), MAKELPARAM((first), (last))))
+
+#define ListBox_SetCaretIndex(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), LB_SETCARETINDEX, (WPARAM)(int)(index), 0L))
+
+#define ListBox_SetColumnWidth(hwndCtl, cxColumn) \
+ ((void)SendMessage((hwndCtl), LB_SETCOLUMNWIDTH, (WPARAM)(int)(cxColumn), 0L))
+
+#define ListBox_SetCurSel(hwndCtl, index) \
+ ((int)SendMessage((hwndCtl), LB_SETCURSEL, (WPARAM)(int)(index), 0L))
+
+#define ListBox_SetHorizontalExtent(hwndCtl, cxExtent) \
+ ((void)SendMessage((hwndCtl), LB_SETHORIZONTALEXTENT, (WPARAM)(int)(cxExtent), 0L))
+
+#define ListBox_SetItemData(hwndCtl, index, data) \
+ ((int)SendMessage((hwndCtl), LB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(DWORD)(data)))
+
+#define ListBox_SetItemHeight(hwndCtl, index, cy) \
+ ((int)SendMessage((hwndCtl), LB_SETITEMHEIGHT, (WPARAM)(int)(index), MAKELPARAM((cy), 0)))
+
+#define ListBox_SetSel(hwndCtl, fSelect, index) \
+ ((int)SendMessage((hwndCtl), LB_SETSEL, (WPARAM)(BOOL)(fSelect), (LPARAM)(UINT)(index)))
+
+#define ListBox_SetTabStops(hwndCtl, cTabs, lpTabs) \
+ ((BOOL)SendMessage((hwndCtl), LB_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(int *)(lpTabs)))
+
+#define ListBox_SetTopIndex(hwndCtl, indexTop) \
+ ((int)SendMessage((hwndCtl), LB_SETTOPINDEX, (WPARAM)(int)(indexTop), 0L))
+
+
+/* Scrollbar Message APIs */
+
+#define ScrollBar_Enable(hwndCtl, flags) \
+ EnableScrollBar((hwndCtl), SB_CTL, (flags))
+
+#define ScrollBar_GetPos(hwndCtl) \
+ GetScrollPos((hwndCtl), SB_CTL)
+
+#define ScrollBar_GetRange(hwndCtl, lpposMin, lpposMax) \
+ GetScrollRange((hwndCtl), SB_CTL, (lpposMin), (lpposMax))
+
+#define ScrollBar_SetPos(hwndCtl, pos, fRedraw) \
+ SetScrollPos((hwndCtl), SB_CTL, (pos), (fRedraw))
+
+#define ScrollBar_SetRange(hwndCtl, posMin, posMax, fRedraw) \
+ SetScrollRange((hwndCtl), SB_CTL, (posMin), (posMax), (fRedraw))
+
+#define ScrollBar_Show(hwndCtl, fShow) \
+ ShowWindow((hwndCtl), (fShow) ? SW_SHOWNORMAL : SW_HIDE)
+
+
+/* Static Message APIs */
+
+#define Static_Enable(hwndCtl, fEnable) \
+ EnableWindow((hwndCtl), (fEnable))
+
+#define Static_GetIcon(hwndCtl, hIcon) \
+ ((HICON)SendMessage((hwndCtl), STM_GETICON, 0L, 0L))
+
+#define Static_GetText(hwndCtl, lpch, cchMax) \
+ GetWindowText((hwndCtl), (lpch), (cchMax))
+
+#define Static_GetTextLength(hwndCtl) \
+ GetWindowTextLength(hwndCtl)
+
+#define Static_SetIcon(hwndCtl, hIcon) \
+ ((HICON)SendMessage((hwndCtl), STM_SETICON, (WPARAM)(HICON)(hIcon), 0L))
+
+#define Static_SetText(hwndCtl, lpsz) \
+ SetWindowText((hwndCtl), (lpsz))
+
+
+/****** Message crackers ****************************************************/
+
+#define HANDLE_MSG(hwnd, message, fn) \
+ case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
+
+/* void Cls_OnCompacting(HWND hwnd, UINT compactRatio) */
+#define HANDLE_WM_COMPACTING(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam)), 0L)
+#define FORWARD_WM_COMPACTING(hwnd, compactRatio, fn) \
+ (void)(fn)((hwnd), WM_COMPACTING, (WPARAM)(UINT)(compactRatio), 0L)
+
+/* void Cls_OnWinIniChange(HWND hwnd, LPCTSTR lpszSectionName) */
+#define HANDLE_WM_WININICHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
+#define FORWARD_WM_WININICHANGE(hwnd, lpszSectionName, fn) \
+ (void)(fn)((hwnd), WM_WININICHANGE, 0L, (LPARAM)(LPCTSTR)(lpszSectionName))
+
+/* void Cls_OnSysColorChange(HWND hwnd) */
+#define HANDLE_WM_SYSCOLORCHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_SYSCOLORCHANGE(hwnd, fn) \
+ (void)(fn)((hwnd), WM_SYSCOLORCHANGE, 0L, 0L)
+
+/* BOOL Cls_OnQueryNewPalette(HWND hwnd) */
+#define HANDLE_WM_QUERYNEWPALETTE(hwnd, wParam, lParam, fn) \
+ MAKELRESULT((BOOL)(fn)(hwnd), 0L)
+#define FORWARD_WM_QUERYNEWPALETTE(hwnd, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_QUERYNEWPALETTE, 0L, 0L)
+
+/* void Cls_OnPaletteIsChanging(HWND hwnd, HWND hwndPaletteChange) */
+#define HANDLE_WM_PALETTEISCHANGING(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_PALETTEISCHANGING(hwnd, hwndPaletteChange, fn) \
+ (void)(fn)((hwnd), WM_PALETTEISCHANGING, (WPARAM)(HWND)(hwndPaletteChange), 0L)
+
+/* void Cls_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange) */
+#define HANDLE_WM_PALETTECHANGED(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_PALETTECHANGED(hwnd, hwndPaletteChange, fn) \
+ (void)(fn)((hwnd), WM_PALETTECHANGED, (WPARAM)(HWND)(hwndPaletteChange), 0L)
+
+/* void Cls_OnFontChange(HWND hwnd) */
+#define HANDLE_WM_FONTCHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_FONTCHANGE(hwnd, fn) \
+ (void)(fn)((hwnd), WM_FONTCHANGE, 0L, 0L)
+
+/* void Cls_OnSpoolerStatus(HWND hwnd, UINT status, int cJobInQueue) */
+#define HANDLE_WM_SPOOLERSTATUS(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_SPOOLERSTATUS(hwnd, status, cJobInQueue, fn) \
+ (void)(fn)((hwnd), WM_SPOOLERSTATUS, (WPARAM)(status), MAKELPARAM((cJobInQueue), 0))
+
+/* void Cls_OnDevModeChange(HWND hwnd, LPCTSTR lpszDeviceName) */
+#define HANDLE_WM_DEVMODECHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
+#define FORWARD_WM_DEVMODECHANGE(hwnd, lpszDeviceName, fn) \
+ (void)(fn)((hwnd), WM_DEVMODECHANGE, 0L, (LPARAM)(LPCTSTR)(lpszDeviceName))
+
+/* void Cls_OnTimeChange(HWND hwnd) */
+#define HANDLE_WM_TIMECHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_TIMECHANGE(hwnd, fn) \
+ (void)(fn)((hwnd), WM_TIMECHANGE, 0L, 0L)
+
+/* void Cls_OnPower(HWND hwnd, int code) */
+#define HANDLE_WM_POWER(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(wParam)), 0L)
+#define FORWARD_WM_POWER(hwnd, code, fn) \
+ (void)(fn)((hwnd), WM_POWER, (WPARAM)(int)(code), 0L)
+
+/* BOOL Cls_OnQueryEndSession(HWND hwnd) */
+#define HANDLE_WM_QUERYENDSESSION(hwnd, wParam, lParam, fn) \
+ MAKELRESULT((BOOL)(fn)(hwnd), 0L)
+#define FORWARD_WM_QUERYENDSESSION(hwnd, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_QUERYENDSESSION, 0L, 0L)
+
+/* void Cls_OnEndSession(HWND hwnd, BOOL fEnding) */
+#define HANDLE_WM_ENDSESSION(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (BOOL)(wParam)), 0L)
+#define FORWARD_WM_ENDSESSION(hwnd, fEnding, fn) \
+ (void)(fn)((hwnd), WM_ENDSESSION, (WPARAM)(BOOL)(fEnding), 0L)
+
+/* void Cls_OnQuit(HWND hwnd, int exitCode) */
+#define HANDLE_WM_QUIT(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(wParam)), 0L)
+#define FORWARD_WM_QUIT(hwnd, exitCode, fn) \
+ (void)(fn)((hwnd), WM_QUIT, (WPARAM)(exitCode), 0L)
+
+/* This message is in Windows 3.1 only */
+/* void Cls_OnSystemError(HWND hwnd, int errCode) */
+#define HANDLE_WM_SYSTEMERROR(hwnd, wParam, lParam, fn) 0L
+#define FORWARD_WM_SYSTEMERROR(hwnd, errCode, fn) 0L
+
+/* BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
+#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)
+#define FORWARD_WM_CREATE(hwnd, lpCreateStruct, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_CREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
+
+/* BOOL Cls_OnNCCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct) */
+#define HANDLE_WM_NCCREATE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPCREATESTRUCT)(lParam))
+#define FORWARD_WM_NCCREATE(hwnd, lpCreateStruct, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_NCCREATE, 0L, (LPARAM)(LPCREATESTRUCT)(lpCreateStruct))
+
+/* void Cls_OnDestroy(HWND hwnd) */
+#define HANDLE_WM_DESTROY(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_DESTROY(hwnd, fn) \
+ (void)(fn)((hwnd), WM_DESTROY, 0L, 0L)
+
+/* void Cls_OnNCDestroy(HWND hwnd) */
+#define HANDLE_WM_NCDESTROY(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_NCDESTROY(hwnd, fn) \
+ (void)(fn)((hwnd), WM_NCDESTROY, 0L, 0L)
+
+/* void Cls_OnShowWindow(HWND hwnd, BOOL fShow, UINT status) */
+#define HANDLE_WM_SHOWWINDOW(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (BOOL)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD_WM_SHOWWINDOW(hwnd, fShow, status, fn) \
+ (void)(fn)((hwnd), WM_SHOWWINDOW, (WPARAM)(BOOL)(fShow), (LPARAM)(UINT)(status))
+
+/* void Cls_OnSetRedraw(HWND hwnd, BOOL fRedraw) */
+#define HANDLE_WM_SETREDRAW(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (BOOL)(wParam)), 0L)
+#define FORWARD_WM_SETREDRAW(hwnd, fRedraw, fn) \
+ (void)(fn)((hwnd), WM_SETREDRAW, (WPARAM)(BOOL)(fRedraw), 0L)
+
+/* void Cls_OnEnable(HWND hwnd, BOOL fEnable) */
+#define HANDLE_WM_ENABLE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (BOOL)(wParam)), 0L)
+#define FORWARD_WM_ENABLE(hwnd, fEnable, fn) \
+ (void)(fn)((hwnd), WM_ENABLE, (WPARAM)(BOOL)(fEnable), 0L)
+
+/* void Cls_OnSetText(HWND hwnd, LPCTSTR lpszText) */
+#define HANDLE_WM_SETTEXT(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (LPCTSTR)(lParam)), 0L)
+#define FORWARD_WM_SETTEXT(hwnd, lpszText, fn) \
+ (void)(fn)((hwnd), WM_SETTEXT, 0L, (LPARAM)(LPCTSTR)(lpszText))
+
+/* INT Cls_OnGetText(HWND hwnd, int cchTextMax, LPTSTR lpszText) */
+#define HANDLE_WM_GETTEXT(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(int)(fn)((hwnd), (int)(wParam), (LPTSTR)(lParam))
+#define FORWARD_WM_GETTEXT(hwnd, cchTextMax, lpszText, fn) \
+ (int)(DWORD)(fn)((hwnd), WM_GETTEXT, (WPARAM)(int)(cchTextMax), (LPARAM)(LPTSTR)(lpszText))
+
+/* INT Cls_OnGetTextLength(HWND hwnd) */
+#define HANDLE_WM_GETTEXTLENGTH(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(int)(fn)(hwnd)
+#define FORWARD_WM_GETTEXTLENGTH(hwnd, fn) \
+ (int)(DWORD)(fn)((hwnd), WM_GETTEXTLENGTH, 0L, 0L)
+
+/* BOOL Cls_OnWindowPosChanging(HWND hwnd, LPWINDOWPOS lpwpos) */
+#define HANDLE_WM_WINDOWPOSCHANGING(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (LPWINDOWPOS)(lParam))
+#define FORWARD_WM_WINDOWPOSCHANGING(hwnd, lpwpos, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_WINDOWPOSCHANGING, 0L, (LPARAM)(LPWINDOWPOS)(lpwpos))
+
+/* void Cls_OnWindowPosChanged(HWND hwnd, const LPWINDOWPOS lpwpos) */
+#define HANDLE_WM_WINDOWPOSCHANGED(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (const LPWINDOWPOS)(lParam)), 0L)
+#define FORWARD_WM_WINDOWPOSCHANGED(hwnd, lpwpos, fn) \
+ (void)(fn)((hwnd), WM_WINDOWPOSCHANGED, 0L, (LPARAM)(const LPWINDOWPOS)(lpwpos))
+
+/* void Cls_OnMove(HWND hwnd, int x, int y) */
+#define HANDLE_WM_MOVE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_MOVE(hwnd, x, y, fn) \
+ (void)(fn)((hwnd), WM_MOVE, 0L, MAKELPARAM((x), (y)))
+
+/* void Cls_OnSize(HWND hwnd, UINT state, int cx, int cy) */
+#define HANDLE_WM_SIZE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SIZE(hwnd, state, cx, cy, fn) \
+ (void)(fn)((hwnd), WM_SIZE, (WPARAM)(UINT)(state), MAKELPARAM((cx), (cy)))
+
+/* void Cls_OnClose(HWND hwnd) */
+#define HANDLE_WM_CLOSE(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_CLOSE(hwnd, fn) \
+ (void)(fn)((hwnd), WM_CLOSE, 0L, 0L)
+
+/* BOOL Cls_OnQueryOpen(HWND hwnd) */
+#define HANDLE_WM_QUERYOPEN(hwnd, wParam, lParam, fn) \
+ MAKELRESULT((BOOL)(fn)(hwnd), 0L)
+#define FORWARD_WM_QUERYOPEN(hwnd, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_QUERYOPEN, 0L, 0L)
+
+/* void Cls_OnPaint(HWND hwnd) */
+#define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_PAINT(hwnd, fn) \
+ (void)(fn)((hwnd), WM_PAINT, 0L, 0L)
+
+/* BOOL Cls_OnEraseBkgnd(HWND hwnd, HDC hdc) */
+#define HANDLE_WM_ERASEBKGND(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))
+#define FORWARD_WM_ERASEBKGND(hwnd, hdc, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_ERASEBKGND, (WPARAM)(HDC)(hdc), 0L)
+
+/* BOOL Cls_OnIconEraseBkgnd(HWND hwnd, HDC hdc) */
+#define HANDLE_WM_ICONERASEBKGND(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HDC)(wParam))
+#define FORWARD_WM_ICONERASEBKGND(hwnd, hdc, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_ICONERASEBKGND, (WPARAM)(HDC)(hdc), 0L)
+
+/* void Cls_OnNCPaint(HWND hwnd, HRGN hrgn) */
+#define HANDLE_WM_NCPAINT(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HRGN)(wParam)), 0L)
+#define FORWARD_WM_NCPAINT(hwnd, hrgn, fn) \
+ (void)(fn)((hwnd), WM_NCPAINT, (WPARAM)(HRGN)(hrgn), 0L)
+
+/* UINT Cls_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp) */
+#define HANDLE_WM_NCCALCSIZE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(0), (NCCALCSIZE_PARAMS *)(lParam))
+#define FORWARD_WM_NCCALCSIZE(hwnd, fCalcValidRects, lpcsp, fn) \
+ (UINT)(DWORD)(fn)((hwnd), WM_NCCALCSIZE, 0L, (LPARAM)(NCCALCSIZE_PARAMS *)(lpcsp))
+
+/* HICON Cls_OnQueryDragIcon(HWND hwnd) */
+#define HANDLE_WM_QUERYDRAGICON(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)(hwnd)
+#define FORWARD_WM_QUERYDRAGICON(hwnd, fn) \
+ (HICON)(UINT)(DWORD)(fn)((hwnd), WM_QUERYDRAGICON, 0L, 0L)
+
+/* void Cls_OnDropFiles(HWND hwnd, HDROP hdrop) */
+#define HANDLE_WM_DROPFILES(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HDROP)(wParam)), 0L)
+#define FORWARD_WM_DROPFILES(hwnd, hdrop, fn) \
+ (void)(fn)((hwnd), WM_DROPFILES, (WPARAM)(HDROP)(hdrop), 0L)
+
+/* void Cls_OnActivate(HWND hwnd, UINT state, HWND hwndActDeact, BOOL fMinimized) */
+#define HANDLE_WM_ACTIVATE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (BOOL)HIWORD(wParam)), 0L)
+#define FORWARD_WM_ACTIVATE(hwnd, state, hwndActDeact, fMinimized, fn) \
+ (void)(fn)((hwnd), WM_ACTIVATE, MAKEWPARAM((state), (fMinimized)), (LPARAM)(HWND)(hwndActDeact))
+
+/* void Cls_OnActivateApp(HWND hwnd, BOOL fActivate, DWORD dwThreadId) */
+#define HANDLE_WM_ACTIVATEAPP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (BOOL)(wParam), (DWORD)(lParam)), 0L)
+#define FORWARD_WM_ACTIVATEAPP(hwnd, fActivate, dwThreadId, fn) \
+ (void)(fn)((hwnd), WM_ACTIVATEAPP, (WPARAM)(BOOL)(fActivate), (LPARAM)(dwThreadId))
+
+/* BOOL Cls_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized) */
+#define HANDLE_WM_NCACTIVATE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (BOOL)(wParam), 0L, 0L)
+#define FORWARD_WM_NCACTIVATE(hwnd, fActive, hwndActDeact, fMinimized, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_NCACTIVATE, (WPARAM)(BOOL)(fActive), 0L)
+
+/* void Cls_OnSetFocus(HWND hwnd, HWND hwndOldFocus) */
+#define HANDLE_WM_SETFOCUS(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_SETFOCUS(hwnd, hwndOldFocus, fn) \
+ (void)(fn)((hwnd), WM_SETFOCUS, (WPARAM)(HWND)(hwndOldFocus), 0L)
+
+/* void Cls_OnKillFocus(HWND hwnd, HWND hwndNewFocus) */
+#define HANDLE_WM_KILLFOCUS(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_KILLFOCUS(hwnd, hwndNewFocus, fn) \
+ (void)(fn)((hwnd), WM_KILLFOCUS, (WPARAM)(HWND)(hwndNewFocus), 0L)
+
+/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_KEYDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_KEYDOWN(hwnd, vk, cRepeat, flags, fn) \
+ (void)(fn)((hwnd), WM_KEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_KEYUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_KEYUP(hwnd, vk, cRepeat, flags, fn) \
+ (void)(fn)((hwnd), WM_KEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_CHAR(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_CHAR(hwnd, ch, cRepeat, fn) \
+ (void)(fn)((hwnd), WM_CHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))
+
+/* void Cls_OnDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_DEADCHAR(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_DEADCHAR(hwnd, ch, cRepeat, fn) \
+ (void)(fn)((hwnd), WM_DEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat),0))
+
+/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_SYSKEYDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), TRUE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SYSKEYDOWN(hwnd, vk, cRepeat, flags, fn) \
+ (void)(fn)((hwnd), WM_SYSKEYDOWN, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnSysKey(HWND hwnd, UINT vk, BOOL fDown, int cRepeat, UINT flags) */
+#define HANDLE_WM_SYSKEYUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), FALSE, (int)(short)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SYSKEYUP(hwnd, vk, cRepeat, flags, fn) \
+ (void)(fn)((hwnd), WM_SYSKEYUP, (WPARAM)(UINT)(vk), MAKELPARAM((cRepeat), (flags)))
+
+/* void Cls_OnSysChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_SYSCHAR(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_SYSCHAR(hwnd, ch, cRepeat, fn) \
+ (void)(fn)((hwnd), WM_SYSCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))
+
+/* void Cls_OnSysDeadChar(HWND hwnd, TCHAR ch, int cRepeat) */
+#define HANDLE_WM_SYSDEADCHAR(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (TCHAR)(wParam), (int)(short)LOWORD(lParam)), 0L)
+#define FORWARD_WM_SYSDEADCHAR(hwnd, ch, cRepeat, fn) \
+ (void)(fn)((hwnd), WM_SYSDEADCHAR, (WPARAM)(TCHAR)(ch), MAKELPARAM((cRepeat), 0))
+
+/* void Cls_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_MOUSEMOVE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_MOUSEMOVE(hwnd, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), WM_MOUSEMOVE, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_LBUTTONDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_LBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), (fDoubleClick) ? WM_LBUTTONDBLCLK : WM_LBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_LBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_LBUTTONUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_LBUTTONUP(hwnd, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), WM_LBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_RBUTTONDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_RBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), (fDoubleClick) ? WM_RBUTTONDBLCLK : WM_RBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_RBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnRButtonUp(HWND hwnd, int x, int y, UINT flags) */
+#define HANDLE_WM_RBUTTONUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_RBUTTONUP(hwnd, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), WM_RBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_MBUTTONDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_MBUTTONDOWN(hwnd, fDoubleClick, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), (fDoubleClick) ? WM_MBUTTONDBLCLK : WM_MBUTTONDOWN, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags) */
+#define HANDLE_WM_MBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnMButtonUp(HWND hwnd, int x, int y, UINT flags) */
+#define HANDLE_WM_MBUTTONUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_MBUTTONUP(hwnd, x, y, keyFlags, fn) \
+ (void)(fn)((hwnd), WM_MBUTTONUP, (WPARAM)(UINT)(keyFlags), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCMouseMove(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMOUSEMOVE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCMOUSEMOVE(hwnd, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), WM_NCMOUSEMOVE, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCLBUTTONDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCLBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), (fDoubleClick) ? WM_NCLBUTTONDBLCLK : WM_NCLBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCLBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnNCLButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCLBUTTONUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCLBUTTONUP(hwnd, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), WM_NCLBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)))
+
+/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCRBUTTONDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCRBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), (fDoubleClick) ? WM_NCRBUTTONDBLCLK : WM_NCRBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* void Cls_OnNCRButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCRBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnNCRButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCRBUTTONUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCRBUTTONUP(hwnd, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), WM_NCRBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMBUTTONDOWN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), FALSE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCMBUTTONDOWN(hwnd, fDoubleClick, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), (fDoubleClick) ? WM_NCMBUTTONDBLCLK : WM_NCMBUTTONDOWN, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* void Cls_OnNCMButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMBUTTONDBLCLK(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), TRUE, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+
+/* void Cls_OnNCMButtonUp(HWND hwnd, int x, int y, UINT codeHitTest) */
+#define HANDLE_WM_NCMBUTTONUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam), (UINT)(wParam)), 0L)
+#define FORWARD_WM_NCMBUTTONUP(hwnd, x, y, codeHitTest, fn) \
+ (void)(fn)((hwnd), WM_NCMBUTTONUP, (WPARAM)(UINT)(codeHitTest), MAKELPARAM((x), (y)) )
+
+/* int Cls_OnMouseActivate(HWND hwnd, HWND hwndTopLevel, UINT codeHitTest, UINT msg) */
+#define HANDLE_WM_MOUSEACTIVATE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(int)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))
+#define FORWARD_WM_MOUSEACTIVATE(hwnd, hwndTopLevel, codeHitTest, msg, fn) \
+ (int)(DWORD)(fn)((hwnd), WM_MOUSEACTIVATE, (WPARAM)(HWND)(hwndTopLevel), MAKELPARAM((codeHitTest), (msg)))
+
+/* void Cls_OnCancelMode(HWND hwnd) */
+#define HANDLE_WM_CANCELMODE(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_CANCELMODE(hwnd, fn) (void)(fn)((hwnd), WM_CANCELMODE, 0L, 0L)
+
+/* void Cls_OnInitMenu(HWND hwnd, HMENU hMenu) */
+#define HANDLE_WM_INITMENU(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HMENU)(wParam)), 0L)
+#define FORWARD_WM_INITMENU(hwnd, hMenu, fn) \
+ (void)(fn)((hwnd), WM_INITMENU, (WPARAM)(HMENU)(hMenu), 0L)
+
+/* void Cls_OnMenuSelect(HWND hwnd, HMENU hmenu, int item, HMENU hmenuPopup, UINT flags) */
+#define HANDLE_WM_MENUSELECT(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HMENU)(lParam), \
+ (HIWORD(wParam) & MF_POPUP) ? 0L : (int)(LOWORD(wParam)), \
+ (HIWORD(wParam) & MF_POPUP) ? GetSubMenu((HMENU)lParam, LOWORD(wParam)) : 0L, \
+ (UINT)(((short)HIWORD(wParam) == -1) ? 0xFFFFFFFF : HIWORD(wParam))), 0L)
+#define FORWARD_WM_MENUSELECT(hwnd, hmenu, item, hmenuPopup, flags, fn) \
+ (void)(fn)((hwnd), WM_MENUSELECT, MAKEWPARAM((item), (flags)), (LPARAM)(HMENU)((hmenu) ? (hmenu) : (hmenuPopup)))
+
+/* DWORD Cls_OnMenuChar(HWND hwnd, UINT ch, UINT flags, HMENU hmenu) */
+#define HANDLE_WM_MENUCHAR(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(fn)((hwnd), (UINT)(LOWORD(wParam)), (UINT)HIWORD(wParam), (HMENU)(lParam))
+#define FORWARD_WM_MENUCHAR(hwnd, ch, flags, hmenu, fn) \
+ (DWORD)(fn)((hwnd), WM_MENUCHAR, MAKEWPARAM(flags, (WORD)(ch)), (LPARAM)(HMENU)(hmenu))
+
+/* void Cls_OnHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
+#define HANDLE_WM_HSCROLL(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L)
+#define FORWARD_WM_HSCROLL(hwnd, hwndCtl, code, pos, fn) \
+ (void)(fn)((hwnd), WM_HSCROLL, MAKEWPARAM((UINT)(int)(code),(UINT)(int)(pos)), (LPARAM)(UINT)(hwndCtl))
+
+/* void Cls_OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos) */
+#define HANDLE_WM_VSCROLL(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(lParam), (UINT)(LOWORD(wParam)), (int)(short)HIWORD(wParam)), 0L)
+#define FORWARD_WM_VSCROLL(hwnd, hwndCtl, code, pos, fn) \
+ (void)(fn)((hwnd), WM_VSCROLL, MAKEWPARAM((UINT)(int)(code), (UINT)(int)(pos)), (LPARAM)(HWND)(hwndCtl))
+
+/* void Cls_OnCut(HWND hwnd) */
+#define HANDLE_WM_CUT(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_CUT(hwnd, fn) (void)(fn)((hwnd), WM_CUT, 0L, 0L)
+
+/* void Cls_OnCopy(HWND hwnd) */
+#define HANDLE_WM_COPY(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_COPY(hwnd, fn) (void)(fn)((hwnd), WM_COPY, 0L, 0L)
+
+/* void Cls_OnPaste(HWND hwnd) */
+#define HANDLE_WM_PASTE(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_PASTE(hwnd, fn) (void)(fn)((hwnd), WM_PASTE, 0L, 0L)
+
+/* void Cls_OnClear(HWND hwnd) */
+#define HANDLE_WM_CLEAR(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_CLEAR(hwnd, fn) (void)(fn)((hwnd), WM_CLEAR, 0L, 0L)
+
+/* void Cls_OnUndo(HWND hwnd) */
+#define HANDLE_WM_UNDO(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_UNDO(hwnd, fn) (void)(fn)((hwnd), WM_UNDO, 0L, 0L)
+
+/* HANDLE Cls_OnRenderFormat(HWND hwnd, UINT fmt) */
+#define HANDLE_WM_RENDERFORMAT(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HANDLE)(fn)((hwnd), (UINT)(wParam))
+#define FORWARD_WM_RENDERFORMAT(hwnd, fmt, fn) \
+ (HANDLE)(UINT)(DWORD)(fn)((hwnd), WM_RENDERFORMAT, (WPARAM)(UINT)(fmt), 0L)
+
+/* void Cls_OnRenderAllFormats(HWND hwnd) */
+#define HANDLE_WM_RENDERALLFORMATS(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_RENDERALLFORMATS(hwnd, fn) (void)(fn)((hwnd), WM_RENDERALLFORMATS, 0L, 0L)
+
+/* void Cls_OnDestroyClipboard(HWND hwnd) */
+#define HANDLE_WM_DESTROYCLIPBOARD(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_DESTROYCLIPBOARD(hwnd, fn) (void)(fn)((hwnd), WM_DESTROYCLIPBOARD, 0L, 0L)
+
+/* void Cls_OnDrawClipboard(HWND hwnd) */
+#define HANDLE_WM_DRAWCLIPBOARD(hwnd, wParam, lParam, fn) ((fn)(hwnd), 0L)
+#define FORWARD_WM_DRAWCLIPBOARD(hwnd, fn) (void)(fn)((hwnd), WM_DRAWCLIPBOARD, 0L, 0L)
+
+/* void Cls_OnPaintClipboard(HWND hwnd, HWND hwndCBViewer, const LPPAINTSTRUCT lpPaintStruct) */
+#define HANDLE_WM_PAINTCLIPBOARD(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam), (const LPPAINTSTRUCT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)
+#define FORWARD_WM_PAINTCLIPBOARD(hwnd, hwndCBViewer, lpPaintStruct, fn) \
+ (void)(fn)((hwnd), WM_PAINTCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPPAINTSTRUCT)(lpPaintStruct))
+
+/* void Cls_OnSizeClipboard(HWND hwnd, HWND hwndCBViewer, const LPRECT lprc) */
+#define HANDLE_WM_SIZECLIPBOARD(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam), (const LPRECT)GlobalLock((HGLOBAL)(lParam))), GlobalUnlock((HGLOBAL)(lParam)), 0L)
+#define FORWARD_WM_SIZECLIPBOARD(hwnd, hwndCBViewer, lprc, fn) \
+ (void)(fn)((hwnd), WM_SIZECLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), (LPARAM)(LPRECT)(lprc))
+
+/* void Cls_OnVScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
+#define HANDLE_WM_VSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_VSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \
+ (void)(fn)((hwnd), WM_VSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))
+
+/* void Cls_OnHScrollClipboard(HWND hwnd, HWND hwndCBViewer, UINT code, int pos) */
+#define HANDLE_WM_HSCROLLCLIPBOARD(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_HSCROLLCLIPBOARD(hwnd, hwndCBViewer, code, pos, fn) \
+ (void)(fn)((hwnd), WM_HSCROLLCLIPBOARD, (WPARAM)(HWND)(hwndCBViewer), MAKELPARAM((code), (pos)))
+
+/* void Cls_OnAskCBFormatName(HWND hwnd, int cchMax, LPTSTR rgchName) */
+#define HANDLE_WM_ASKCBFORMATNAME(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(wParam), (LPTSTR)(lParam)), 0L)
+#define FORWARD_WM_ASKCBFORMATNAME(hwnd, cchMax, rgchName, fn) \
+ (void)(fn)((hwnd), WM_ASKCBFORMATNAME, (WPARAM)(int)(cchMax), (LPARAM)(rgchName))
+
+/* void Cls_OnChangeCBChain(HWND hwnd, HWND hwndRemove, HWND hwndNext) */
+#define HANDLE_WM_CHANGECBCHAIN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam), (HWND)(lParam)), 0L)
+#define FORWARD_WM_CHANGECBCHAIN(hwnd, hwndRemove, hwndNext, fn) \
+ (void)(fn)((hwnd), WM_CHANGECBCHAIN, (WPARAM)(HWND)(hwndRemove), (LPARAM)(HWND)(hwndNext))
+
+/* BOOL Cls_OnSetCursor(HWND hwnd, HWND hwndCursor, UINT codeHitTest, UINT msg) */
+#define HANDLE_WM_SETCURSOR(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam))
+#define FORWARD_WM_SETCURSOR(hwnd, hwndCursor, codeHitTest, msg, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_SETCURSOR, (WPARAM)(HWND)(hwndCursor), MAKELPARAM((codeHitTest), (msg)))
+
+/* void Cls_OnSysCommand(HWND hwnd, UINT cmd, int x, int y) */
+#define HANDLE_WM_SYSCOMMAND(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)), 0L)
+#define FORWARD_WM_SYSCOMMAND(hwnd, cmd, x, y, fn) \
+ (void)(fn)((hwnd), WM_SYSCOMMAND, (WPARAM)(UINT)(cmd), MAKELPARAM((x), (y)))
+
+/* HWND Cls_MDICreate(HWND hwnd, const LPMDICREATESTRUCT lpmcs) */
+#define HANDLE_WM_MDICREATE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (LPMDICREATESTRUCT)(lParam))
+#define FORWARD_WM_MDICREATE(hwnd, lpmcs, fn) \
+ (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDICREATE, 0L, (LPARAM)(LPMDICREATESTRUCT)(lpmcs))
+
+/* void Cls_MDIDestroy(HWND hwnd, HWND hwndDestroy) */
+#define HANDLE_WM_MDIDESTROY(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIDESTROY(hwnd, hwndDestroy, fn) \
+ (void)(fn)((hwnd), WM_MDIDESTROY, (WPARAM)(hwndDestroy), 0L)
+
+/* NOTE: Usable only by MDI client windows */
+/* void Cls_MDIActivate(HWND hwnd, BOOL fActive, HWND hwndActivate, HWND hwndDeactivate) */
+#define HANDLE_WM_MDIACTIVATE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (BOOL)(lParam == (LPARAM)hwnd), (HWND)(lParam), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIACTIVATE(hwnd, fActive, hwndActivate, hwndDeactivate, fn) \
+ (void)(fn)(hwnd, WM_MDIACTIVATE, (WPARAM)(hwndDeactivate), (LPARAM)(hwndActivate))
+
+/* void Cls_MDIRestore(HWND hwnd, HWND hwndRestore) */
+#define HANDLE_WM_MDIRESTORE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIRESTORE(hwnd, hwndRestore, fn) \
+ (void)(fn)((hwnd), WM_MDIRESTORE, (WPARAM)(hwndRestore), 0L)
+
+/* HWND Cls_MDINext(HWND hwnd, HWND hwndCur, BOOL fPrev) */
+#define HANDLE_WM_MDINEXT(hwnd, wParam, lParam, fn) \
+ (LRESULT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)lParam)
+#define FORWARD_WM_MDINEXT(hwnd, hwndCur, fPrev, fn) \
+ (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDINEXT, (WPARAM)(hwndCur), (LPARAM)(fPrev))
+
+/* void Cls_MDIMaximize(HWND hwnd, HWND hwndMaximize) */
+#define HANDLE_WM_MDIMAXIMIZE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam)), 0L)
+#define FORWARD_WM_MDIMAXIMIZE(hwnd, hwndMaximize, fn) \
+ (void)(fn)((hwnd), WM_MDIMAXIMIZE, (WPARAM)(hwndMaximize), 0L)
+
+/* BOOL Cls_MDITile(HWND hwnd, UINT cmd) */
+#define HANDLE_WM_MDITILE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))
+#define FORWARD_WM_MDITILE(hwnd, cmd, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_MDITILE, (WPARAM)(cmd), 0L)
+
+/* BOOL Cls_MDICascade(HWND hwnd, UINT cmd) */
+#define HANDLE_WM_MDICASCADE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(fn)((hwnd), (UINT)(wParam))
+#define FORWARD_WM_MDICASCADE(hwnd, cmd, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_MDICASCADE, (WPARAM)(cmd), 0L)
+
+/* void Cls_MDIIconArrange(HWND hwnd) */
+#define HANDLE_WM_MDIICONARRANGE(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_MDIICONARRANGE(hwnd, fn) \
+ (void)(fn)((hwnd), WM_MDIICONARRANGE, 0L, 0L)
+
+/* HWND Cls_MDIGetActive(HWND hwnd) */
+#define HANDLE_WM_MDIGETACTIVE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)(hwnd)
+#define FORWARD_WM_MDIGETACTIVE(hwnd, fn) \
+ (HWND)(UINT)(DWORD)(fn)((hwnd), WM_MDIGETACTIVE, 0L, 0L)
+
+/* HMENU Cls_MDISetMenu(HWND hwnd, BOOL fRefresh, HMENU hmenuFrame, HMENU hmenuWindow) */
+#define HANDLE_WM_MDISETMENU(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (BOOL)(wParam), (HMENU)(wParam), (HMENU)(lParam))
+#define FORWARD_WM_MDISETMENU(hwnd, fRefresh, hmenuFrame, hmenuWindow, fn) \
+ (HMENU)(UINT)(DWORD)(fn)((hwnd), WM_MDISETMENU, (WPARAM)((fRefresh) ? (hmenuFrame) : 0), (LPARAM)(hmenuWindow))
+
+/* void Cls_OnChildActivate(HWND hwnd) */
+#define HANDLE_WM_CHILDACTIVATE(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_CHILDACTIVATE(hwnd, fn) \
+ (void)(fn)((hwnd), WM_CHILDACTIVATE, 0L, 0L)
+
+/* BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) */
+#define HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd), (HWND)(wParam), lParam)
+#define FORWARD_WM_INITDIALOG(hwnd, hwndFocus, lParam, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_INITDIALOG, (WPARAM)(HWND)(hwndFocus), (lParam))
+
+/* HWND Cls_OnNextDlgCtl(HWND hwnd, HWND hwndSetFocus, BOOL fNext) */
+#define HANDLE_WM_NEXTDLGCTL(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HWND)(fn)((hwnd), (HWND)(wParam), (BOOL)(lParam))
+#define FORWARD_WM_NEXTDLGCTL(hwnd, hwndSetFocus, fNext, fn) \
+ (HWND)(UINT)(DWORD)(fn)((hwnd), WM_NEXTDLGCTL, (WPARAM)(HWND)(hwndSetFocus), (LPARAM)(fNext))
+
+/* void Cls_OnParentNotify(HWND hwnd, UINT msg, HWND hwndChild, int idChild) */
+#define HANDLE_WM_PARENTNOTIFY(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
+#define FORWARD_WM_PARENTNOTIFY(hwnd, msg, hwndChild, idChild, fn) \
+ (void)(fn)((hwnd), WM_PARENTNOTIFY, MAKEWPARAM(msg, idChild), (LPARAM)(hwndChild))
+
+/* void Cls_OnEnterIdle(HWND hwnd, UINT source, HWND hwndSource) */
+#define HANDLE_WM_ENTERIDLE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), (HWND)(lParam)), 0L)
+#define FORWARD_WM_ENTERIDLE(hwnd, source, hwndSource, fn) \
+ (void)(fn)((hwnd), WM_ENTERIDLE, (WPARAM)(UINT)(source), (LPARAM)(HWND)(hwndSource))
+
+/* UINT Cls_OnGetDlgCode(HWND hwnd, LPMSG lpmsg) */
+#define HANDLE_WM_GETDLGCODE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)(hwnd, (LPMSG)(lParam))
+#define FORWARD_WM_GETDLGCODE(hwnd, lpmsg, fn) \
+ (UINT)(DWORD)(fn)((hwnd), WM_GETDLGCODE, (lpmsg ? lpmsg->wParam : 0), (LPARAM)(LPMSG)(lpmsg))
+
+/* HBRUSH Cls_OnCtlColor(HWND hwnd, HDC hdc, HWND hwndChild, int type) */
+#define HANDLE_WM_CTLCOLORMSGBOX(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_MSGBOX)
+#define FORWARD_WM_CTLCOLORMSGBOX(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORMSGBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLOREDIT(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_EDIT)
+#define FORWARD_WM_CTLCOLOREDIT(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLOREDIT, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORLISTBOX(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_LISTBOX)
+#define FORWARD_WM_CTLCOLORLISTBOX(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORLISTBOX, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORBTN(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_BTN)
+#define FORWARD_WM_CTLCOLORBTN(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORBTN, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORDLG(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_DLG)
+#define FORWARD_WM_CTLCOLORDLG(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORDLG, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORSCROLLBAR(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_SCROLLBAR)
+#define FORWARD_WM_CTLCOLORSCROLLBAR(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORSCROLLBAR, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+#define HANDLE_WM_CTLCOLORSTATIC(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(HBRUSH)(fn)((hwnd), (HDC)(wParam), (HWND)(lParam), CTLCOLOR_STATIC)
+#define FORWARD_WM_CTLCOLORSTATIC(hwnd, hdc, hwndChild, fn) \
+ (HBRUSH)(UINT)(DWORD)(fn)((hwnd), WM_CTLCOLORSTATIC, (WPARAM)(HDC)(hdc), (LPARAM)(HWND)(hwndChild))
+
+/* void Cls_OnDeleteItem(HWND hwnd, const DELETEITEMSTRUCT * lpDeleteItem) */
+#define HANDLE_WM_DELETEITEM(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (const DELETEITEMSTRUCT *)(lParam)), 0L)
+#define FORWARD_WM_DELETEITEM(hwnd, lpDeleteItem, fn) \
+ (void)(fn)((hwnd), WM_DELETEITEM, (WPARAM)(((const DELETEITEMSTRUCT *)(lpDeleteItem))->CtlID), (LPARAM)(const DELETEITEMSTRUCT *)(lpDeleteItem))
+
+/* int Cls_OnCompareItem(HWND hwnd, const COMPAREITEMSTRUCT * lpCompareItem) */
+#define HANDLE_WM_COMPAREITEM(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(int)(fn)((hwnd), (const COMPAREITEMSTRUCT *)(lParam))
+#define FORWARD_WM_COMPAREITEM(hwnd, lpCompareItem, fn) \
+ (int)(DWORD)(fn)((hwnd), WM_COMPAREITEM, (WPARAM)(((const COMPAREITEMSTRUCT *)(lpCompareItem))->CtlID), (LPARAM)(const COMPAREITEMSTRUCT *)(lpCompareItem))
+
+/* int Cls_OnVkeyToItem(HWND hwnd, UINT vk, HWND hwndListbox, int iCaret) */
+#define HANDLE_WM_VKEYTOITEM(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))
+#define FORWARD_WM_VKEYTOITEM(hwnd, vk, hwndListBox, iCaret, fn) \
+ (int)(DWORD)(fn)((hwnd), WM_VKEYTOITEM, MAKEWPARAM((vk), (iCaret)), (LPARAM)(hwndListBox))
+
+/* int Cls_OnCharToItem(HWND hwnd, UINT ch, HWND hwndListbox, int iCaret) */
+#define HANDLE_WM_CHARTOITEM(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(int)(fn)((hwnd), (UINT)LOWORD(wParam), (HWND)(lParam), (int)(short)HIWORD(wParam))
+#define FORWARD_WM_CHARTOITEM(hwnd, ch, hwndListBox, iCaret, fn) \
+ (int)(DWORD)(fn)((hwnd), WM_CHARTOITEM, MAKEWPARAM((UINT)(ch), (UINT)(iCaret)), (LPARAM)(hwndListBox))
+
+/* void Cls_OnQueueSync(HWND hwnd) */
+#define HANDLE_WM_QUEUESYNC(hwnd, wParam, lParam, fn) \
+ ((fn)(hwnd), 0L)
+#define FORWARD_WM_QUEUESYNC(hwnd, fn) \
+ (void)(fn)((hwnd), WM_QUEUESYNC, 0L, 0L)
+/* void Cls_OnCommNotify(HWND hwnd, int cid, UINT flags) */
+#define HANDLE_WM_COMMNOTIFY(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(wParam), (UINT)LOWORD(lParam)), 0L)
+#define FORWARD_WM_COMMNOTIFY(hwnd, cid, flags, fn) \
+ (void)(fn)((hwnd), WM_COMMNOTIFY, (WPARAM)(cid), MAKELPARAM((flags), 0))
+
+/* void Cls_OnDisplayChange(HWND hwnd, UINT bitsPerPixel, UINT cxScreen, UINT cyScreen) */
+#define HANDLE_WM_DISPLAYCHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (UINT)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_DISPLAYCHANGE(hwnd, bitsPerPixel, cxScreen, cyScreen, fn) \
+ (void)(fn)((hwnd), WM_DISPLAYCHANGE, (WPARAM)(UINT)(bitsPerPixel), (LPARAM)MAKELPARAM((UINT)(cxScreen), (UINT)(cyScreen)))
+
+/* BOOL Cls_OnDeviceChange(HWND hwnd, UINT uEvent, DWORD dwEventData) */
+#define HANDLE_WM_DEVICECHANGE(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(BOOL)(fn)((hwnd), (UINT)(wParam), (DWORD)(wParam))
+#define FORWARD_WM_DEVICECHANGE(hwnd, uEvent, dwEventData, fn) \
+ (BOOL)(DWORD)(fn)((hwnd), WM_DEVICECHANGE, (WPARAM)(UINT)(uEvent), (LPARAM)(DWORD)(dwEventData))
+
+/* void Cls_OnContextMenu(HWND hwnd, HWND hwndContext, UINT xPos, UINT yPos) */
+#define HANDLE_WM_CONTEXTMENU(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HWND)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD_WM_CONTEXTMENU(hwnd, hwndContext, xPos, yPos, fn) \
+ (void)(fn)((hwnd), WM_CONTEXTMENU, (WPARAM)(HWND)(hwndContext), MAKELPARAM((UINT)(xPos), (UINT)(yPos)))
+
+/* void Cls_OnMeasureItem(HWND hwnd, MEASUREITEMSTRUCT * lpMeasureItem) */
+#define HANDLE_WM_MEASUREITEM(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (MEASUREITEMSTRUCT *)(lParam)), 0L)
+#define FORWARD_WM_MEASUREITEM(hwnd, lpMeasureItem, fn) \
+ (void)(fn)((hwnd), WM_MEASUREITEM, (WPARAM)(((MEASUREITEMSTRUCT *)lpMeasureItem)->CtlID), (LPARAM)(MEASUREITEMSTRUCT *)(lpMeasureItem))
+
+/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
+#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
+#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
+ (void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))
+
+/* void Cls_OnTimer(HWND hwnd, UINT id) */
+#define HANDLE_WM_TIMER(hwnd, wParam, lParam, fn) ((fn)((hwnd), (UINT)(wParam)), 0L)
+#define FORWARD_WM_TIMER(hwnd, id, fn) (void)(fn)((hwnd), WM_TIMER, (WPARAM)(UINT)(id), 0L)
+
+/* void Cls_OnInitMenuPopup(HWND hwnd, HMENU hMenu, UINT item, BOOL fSystemMenu) */
+#define HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HMENU)(wParam), (UINT)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L)
+#define FORWARD_WM_INITMENUPOPUP(hwnd, hMenu, item, fSystemMenu, fn) \
+ (void)(fn)((hwnd), WM_INITMENUPOPUP, (WPARAM)(HMENU)(hMenu), MAKELPARAM((item),(fSystemMenu)))
+
+/* UINT Cls_OnNCHitTest(HWND hwnd, int x, int y) */
+#define HANDLE_WM_NCHITTEST(hwnd, wParam, lParam, fn) \
+ (LRESULT)(DWORD)(UINT)(fn)((hwnd), (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam))
+#define FORWARD_WM_NCHITTEST(hwnd, x, y, fn) \
+ (UINT)(DWORD)(fn)((hwnd), WM_NCHITTEST, 0L, MAKELPARAM((x), (y)))
+
+/* HFONT Cls_OnGetFont(HWND hwnd) */
+#define HANDLE_WM_GETFONT(hwnd, wParam, lParam, fn) (LRESULT)(DWORD)(UINT)(HFONT)(fn)(hwnd)
+#define FORWARD_WM_GETFONT(hwnd, fn) (HFONT)(UINT)(DWORD)(fn)((hwnd), WM_GETFONT, 0L, 0L)
+
+/* void Cls_OnSetFont(HWND hwndCtl, HFONT hfont, BOOL fRedraw) */
+#define HANDLE_WM_SETFONT(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HFONT)(wParam), (BOOL)(lParam)), 0L)
+#define FORWARD_WM_SETFONT(hwnd, hfont, fRedraw, fn) \
+ (void)(fn)((hwnd), WM_SETFONT, (WPARAM)(HFONT)(hfont), (LPARAM)(BOOL)(fRedraw))
+
+/* void Cls_OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpMinMaxInfo) */
+#define HANDLE_WM_GETMINMAXINFO(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (LPMINMAXINFO)(lParam)), 0L)
+#define FORWARD_WM_GETMINMAXINFO(hwnd, lpMinMaxInfo, fn) \
+ (void)(fn)((hwnd), WM_GETMINMAXINFO, 0L, (LPARAM)(LPMINMAXINFO)(lpMinMaxInfo))
+
+/* void Cls_OnDrawItem(HWND hwnd, const DRAWITEMSTRUCT lpDrawItem) */
+#define HANDLE_WM_DRAWITEM(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (const DRAWITEMSTRUCT *)(lParam)), 0L)
+#define FORWARD_WM_DRAWITEM(hwnd, lpDrawItem, fn) \
+ (void)(fn)((hwnd), WM_DRAWITEM, (WPARAM)(((const DRAWITEMSTRUCT *)lpDrawItem)->CtlID), (LPARAM)(const DRAWITEMSTRUCT *)(lpDrawItem))
+
+
+/****** C runtime porting macros ****************************************/
+
+#define _ncalloc calloc
+#define _nexpand _expand
+#define _ffree free
+#define _fmalloc malloc
+#define _fmemccpy _memccpy
+#define _fmemchr memchr
+#define _fmemcmp memcmp
+#define _fmemcpy memcpy
+#define _fmemicmp _memicmp
+#define _fmemmove memmove
+#define _fmemset memset
+#define _fmsize _msize
+#define _frealloc realloc
+#define _fstrcat strcat
+#define _fstrchr strchr
+#define _fstrcmp strcmp
+#define _fstrcpy strcpy
+#define _fstrcspn strcspn
+#define _fstrdup _strdup
+#define _fstricmp _stricmp
+#define _fstrlen strlen
+#define _fstrlwr _strlwr
+#define _fstrncat strncat
+#define _fstrncmp strncmp
+#define _fstrncpy strncpy
+#define _fstrnicmp _strnicmp
+#define _fstrnset _strnset
+#define _fstrpbrk strpbrk
+#define _fstrrchr strrchr
+#define _fstrrev _strrev
+#define _fstrset _strset
+#define _fstrspn strspn
+#define _fstrstr strstr
+#define _fstrtok strtok
+#define _fstrupr _strupr
+#define _nfree free
+#define _nmalloc malloc
+#define _nmsize _msize
+#define _nrealloc realloc
+#define _nstrdup _strdup
+#define hmemcpy MoveMemory
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl
new file mode 100644
index 00000000..565ae90b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dcetypes.idl
@@ -0,0 +1,97 @@
+/*
+ * Common DCE Types
+ *
+ * Copyright 2006 Robert Shearman (for CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* pull in GUID type */
+import "wtypes.idl";
+
+typedef unsigned small unsigned8;
+typedef unsigned short unsigned16;
+typedef unsigned long unsigned32;
+typedef small signed8;
+typedef short signed16;
+typedef long signed32;
+typedef unsigned32 boolean32;
+typedef unsigned hyper u_int64;
+typedef unsigned long u_int32;
+typedef unsigned short u_int16;
+typedef unsigned small u_int8;
+
+typedef [ptr] GUID *uuid_p_t;
+
+typedef struct twr_t
+{
+ unsigned32 tower_length;
+ [size_is(tower_length)] byte tower_octet_string[];
+} twr_t;
+typedef [ptr] twr_t *twr_p_t;
+
+typedef struct ndr_context_handle
+{
+ unsigned32 context_handle_attributes;
+ GUID context_handle_uuid;
+} ndr_context_handle;
+
+const long ndr_c_int_big_endian = 0;
+const long ndr_c_int_little_endian = 1;
+const long ndr_c_float_ieee = 0;
+const long ndr_c_float_vax = 1;
+const long ndr_c_float_cray = 2;
+const long ndr_c_float_ibm = 3;
+const long ndr_c_char_ascii = 0;
+const long ndr_c_char_ebcdic = 1;
+
+typedef struct
+{
+ unsigned8 int_rep;
+ unsigned8 char_rep;
+ unsigned8 float_rep;
+ byte reserved;
+} ndr_format_t, *ndr_format_p_t;
+
+typedef struct
+{
+ GUID uuid;
+ unsigned16 vers_major;
+ unsigned16 vers_minor;
+} rpc_if_id_t;
+typedef [unique] rpc_if_id_t *rpc_if_id_p_t;
+
+typedef struct
+{
+ unsigned32 count;
+ [size_is(count)]
+ rpc_if_id_p_t if_id[*];
+} rpc_if_id_vector_t;
+typedef [unique] rpc_if_id_vector_t *rpc_if_id_vector_p_t;
+
+typedef struct
+{
+ unsigned32 count;
+ unsigned32 stats[1]; /* length_is (count) */
+} rpc_stats_vector_t, *rpc_stats_vector_p_t;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h
new file mode 100644
index 00000000..5db641bf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/debug.h
@@ -0,0 +1,297 @@
+/*
+ * Wine debugging interface
+ *
+ * Copyright 1999 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_DEBUG_H
+#define __WINE_WINE_DEBUG_H
+
+#include <stdarg.h>
+#include <windef.h>
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _GUID;
+
+/*
+ * Internal definitions (do not use these directly)
+ */
+
+enum __wine_debug_class
+{
+ __WINE_DBCL_FIXME,
+ __WINE_DBCL_ERR,
+ __WINE_DBCL_WARN,
+ __WINE_DBCL_TRACE,
+
+ __WINE_DBCL_INIT = 7 /* lazy init flag */
+};
+
+struct __wine_debug_channel
+{
+ unsigned char flags;
+ char name[15];
+};
+
+#ifndef WINE_NO_TRACE_MSGS
+# define __WINE_GET_DEBUGGING_TRACE(dbch) ((dbch)->flags & (1 << __WINE_DBCL_TRACE))
+#else
+# define __WINE_GET_DEBUGGING_TRACE(dbch) 0
+#endif
+
+#ifndef WINE_NO_DEBUG_MSGS
+# define __WINE_GET_DEBUGGING_WARN(dbch) ((dbch)->flags & (1 << __WINE_DBCL_WARN))
+# define __WINE_GET_DEBUGGING_FIXME(dbch) ((dbch)->flags & (1 << __WINE_DBCL_FIXME))
+#else
+# define __WINE_GET_DEBUGGING_WARN(dbch) 0
+# define __WINE_GET_DEBUGGING_FIXME(dbch) 0
+#endif
+
+/* define error macro regardless of what is configured */
+#define __WINE_GET_DEBUGGING_ERR(dbch) ((dbch)->flags & (1 << __WINE_DBCL_ERR))
+
+#define __WINE_GET_DEBUGGING(dbcl,dbch) __WINE_GET_DEBUGGING##dbcl(dbch)
+
+#define __WINE_IS_DEBUG_ON(dbcl,dbch) \
+ (__WINE_GET_DEBUGGING##dbcl(dbch) && (__wine_dbg_get_channel_flags(dbch) & (1 << __WINE_DBCL##dbcl)))
+
+#ifdef __GNUC__
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+ struct __wine_debug_channel * const __dbch = (dbch); \
+ const enum __wine_debug_class __dbcl = __WINE_DBCL##dbcl; \
+ __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(args...) \
+ wine_dbg_log( __dbcl, __dbch, __FUNCTION__, args); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(args...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(args...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(args...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#elif defined(__SUNPRO_C)
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+ do { if(__WINE_GET_DEBUGGING(dbcl,(dbch))) { \
+ struct __wine_debug_channel * const __dbch = (dbch); \
+ const enum __WINE_DEBUG_CLASS __dbcl = __WINE_DBCL##dbcl; \
+ __WINE_DBG_LOG
+
+#define __WINE_DBG_LOG(...) \
+ wine_dbg_log( __dbcl, __dbch, __func__, __VA_ARGS__); } } while(0)
+
+#define __WINE_PRINTF_ATTR(fmt,args)
+
+#ifdef WINE_NO_TRACE_MSGS
+#define WINE_TRACE(...) do { } while(0)
+#define WINE_TRACE_(ch) WINE_TRACE
+#endif
+
+#ifdef WINE_NO_DEBUG_MSGS
+#define WINE_WARN(...) do { } while(0)
+#define WINE_WARN_(ch) WINE_WARN
+#define WINE_FIXME(...) do { } while(0)
+#define WINE_FIXME_(ch) WINE_FIXME
+#endif
+
+#else /* !__GNUC__ && !__SUNPRO_C */
+
+#define __WINE_DPRINTF(dbcl,dbch) \
+ (!__WINE_GET_DEBUGGING(dbcl,(dbch)) || \
+ (wine_dbg_log(__WINE_DBCL##dbcl,(dbch),__FILE__,"%d: ",__LINE__) == -1)) ? \
+ (void)0 : (void)wine_dbg_printf
+
+#define __WINE_PRINTF_ATTR(fmt, args)
+
+#endif /* !__GNUC__ && !__SUNPRO_C */
+
+struct __wine_debug_functions
+{
+ char * (*get_temp_buffer)( size_t n );
+ void (*release_temp_buffer)( char *buffer, size_t n );
+ const char * (*dbgstr_an)( const char * s, int n );
+ const char * (*dbgstr_wn)( const WCHAR *s, int n );
+ int (*dbg_vprintf)( const char *format, va_list args );
+ int (*dbg_vlog)( enum __wine_debug_class cls, struct __wine_debug_channel *channel,
+ const char *function, const char *format, va_list args );
+};
+
+extern unsigned char __wine_dbg_get_channel_flags( struct __wine_debug_channel *channel );
+extern int __wine_dbg_set_channel_flags( struct __wine_debug_channel *channel,
+ unsigned char set, unsigned char clear );
+extern void __wine_dbg_set_functions( const struct __wine_debug_functions *new_funcs,
+ struct __wine_debug_functions *old_funcs, size_t size );
+
+/*
+ * Exported definitions and macros
+ */
+
+/* These functions return a printable version of a string, including
+ quotes. The string will be valid for some time, but not indefinitely
+ as strings are re-used. */
+extern const char *wine_dbgstr_an( const char * s, int n );
+extern const char *wine_dbgstr_wn( const WCHAR *s, int n );
+extern const char *wine_dbg_sprintf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+
+extern int wine_dbg_printf( const char *format, ... ) __WINE_PRINTF_ATTR(1,2);
+extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func,
+ const char *format, ... ) __WINE_PRINTF_ATTR(4,5);
+
+static inline const char *wine_dbgstr_a( const char *s )
+{
+ return wine_dbgstr_an( s, -1 );
+}
+
+static inline const char *wine_dbgstr_w( const WCHAR *s )
+{
+ return wine_dbgstr_wn( s, -1 );
+}
+
+static inline const char *wine_dbgstr_guid( const GUID *id )
+{
+ if (!id) return "(null)";
+ if (!((ULONG_PTR)id >> 16)) return wine_dbg_sprintf( "<guid-0x%04hx>", (WORD)(ULONG_PTR)id );
+ return wine_dbg_sprintf( "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
+ id->Data1, id->Data2, id->Data3,
+ id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
+ id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
+}
+
+static inline const char *wine_dbgstr_point( const POINT *pt )
+{
+ if (!pt) return "(null)";
+ return wine_dbg_sprintf( "(%d,%d)", pt->x, pt->y );
+}
+
+static inline const char *wine_dbgstr_size( const SIZE *size )
+{
+ if (!size) return "(null)";
+ return wine_dbg_sprintf( "(%d,%d)", size->cx, size->cy );
+}
+
+static inline const char *wine_dbgstr_rect( const RECT *rect )
+{
+ if (!rect) return "(null)";
+ return wine_dbg_sprintf( "(%d,%d)-(%d,%d)", rect->left, rect->top,
+ rect->right, rect->bottom );
+}
+
+static inline const char *wine_dbgstr_longlong( ULONGLONG ll )
+{
+ if (sizeof(ll) > sizeof(unsigned long) && ll >> 32)
+ return wine_dbg_sprintf( "%lx%08lx", (unsigned long)(ll >> 32), (unsigned long)ll );
+ else return wine_dbg_sprintf( "%lx", (unsigned long)ll );
+}
+
+#ifndef WINE_TRACE
+#define WINE_TRACE __WINE_DPRINTF(_TRACE,__wine_dbch___default)
+#define WINE_TRACE_(ch) __WINE_DPRINTF(_TRACE,&__wine_dbch_##ch)
+#endif
+#define WINE_TRACE_ON(ch) __WINE_IS_DEBUG_ON(_TRACE,&__wine_dbch_##ch)
+
+#ifndef WINE_WARN
+#define WINE_WARN __WINE_DPRINTF(_WARN,__wine_dbch___default)
+#define WINE_WARN_(ch) __WINE_DPRINTF(_WARN,&__wine_dbch_##ch)
+#endif
+#define WINE_WARN_ON(ch) __WINE_IS_DEBUG_ON(_WARN,&__wine_dbch_##ch)
+
+#ifndef WINE_FIXME
+#define WINE_FIXME __WINE_DPRINTF(_FIXME,__wine_dbch___default)
+#define WINE_FIXME_(ch) __WINE_DPRINTF(_FIXME,&__wine_dbch_##ch)
+#endif
+#define WINE_FIXME_ON(ch) __WINE_IS_DEBUG_ON(_FIXME,&__wine_dbch_##ch)
+
+#define WINE_ERR __WINE_DPRINTF(_ERR,__wine_dbch___default)
+#define WINE_ERR_(ch) __WINE_DPRINTF(_ERR,&__wine_dbch_##ch)
+#define WINE_ERR_ON(ch) __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch)
+
+#define WINE_DECLARE_DEBUG_CHANNEL(ch) \
+ static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }
+#define WINE_DEFAULT_DEBUG_CHANNEL(ch) \
+ static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \
+ static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch
+
+#define WINE_DPRINTF wine_dbg_printf
+#define WINE_MESSAGE wine_dbg_printf
+
+#ifdef __WINESRC__
+/* Wine uses shorter names that are very likely to conflict with other software */
+
+static inline const char *debugstr_an( const char * s, int n ) { return wine_dbgstr_an( s, n ); }
+static inline const char *debugstr_wn( const WCHAR *s, int n ) { return wine_dbgstr_wn( s, n ); }
+static inline const char *debugstr_guid( const struct _GUID *id ) { return wine_dbgstr_guid(id); }
+static inline const char *debugstr_a( const char *s ) { return wine_dbgstr_an( s, -1 ); }
+static inline const char *debugstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+#define TRACE WINE_TRACE
+#define TRACE_(ch) WINE_TRACE_(ch)
+#define TRACE_ON(ch) WINE_TRACE_ON(ch)
+
+#define WARN WINE_WARN
+#define WARN_(ch) WINE_WARN_(ch)
+#define WARN_ON(ch) WINE_WARN_ON(ch)
+
+#define FIXME WINE_FIXME
+#define FIXME_(ch) WINE_FIXME_(ch)
+#define FIXME_ON(ch) WINE_FIXME_ON(ch)
+
+#undef ERR /* Solaris got an 'ERR' define in <sys/reg.h> */
+#define ERR WINE_ERR
+#define ERR_(ch) WINE_ERR_(ch)
+#define ERR_ON(ch) WINE_ERR_ON(ch)
+
+#define DPRINTF WINE_DPRINTF
+#define MESSAGE WINE_MESSAGE
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINE_DEBUG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h
new file mode 100644
index 00000000..86903c27
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/dplaysp.h
@@ -0,0 +1,375 @@
+/*
+ * Copyright 2000 Peter Hunnisett
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_DIRECT_PLAY_SP_H
+#define __WINE_DIRECT_PLAY_SP_H
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "dplay.h"
+#include "dplobby.h"
+
+/* GUID for IDirectPlaySP {0C9F6360-CC61-11cf-ACEC-00AA006886E3} */
+DEFINE_GUID(IID_IDirectPlaySP, 0xc9f6360, 0xcc61, 0x11cf, 0xac, 0xec, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3);
+typedef struct IDirectPlaySP *LPDIRECTPLAYSP;
+
+
+typedef BOOL (CALLBACK *LPENUMMRUCALLBACK)( LPCVOID lpData,
+ DWORD dwDataSize,
+ LPVOID lpContext );
+
+/* For SP. Top 16 bits is dplay, bottom 16 is SP */
+#define DPSP_MAJORVERSION 0x00060000
+#define DPSP_DX5VERSION 0x00050000
+#define DPSP_DX3VERSION 0x00040000
+
+#define DPSP_MAJORVERSIONMASK 0xFFFF0000
+#define DPSP_MINORVERSIONMASK 0x0000FFFF
+
+
+/* Some flags */
+#define DPLAYI_PLAYER_SYSPLAYER 0x00000001
+#define DPLAYI_PLAYER_NAMESRVR 0x00000002
+#define DPLAYI_PLAYER_PLAYERINGROUP 0x00000004
+#define DPLAYI_PLAYER_PLAYERLOCAL 0x00000008
+#define DPLAYI_GROUP_SYSGROUP 0x00000020
+#define DPLAYI_GROUP_DPLAYOWNS 0x00000040
+#define DPLAYI_PLAYER_APPSERVER 0x00000080
+#define DPLAYI_GROUP_HIDDEN 0x00000400
+
+/* Define the COM interface */
+#define INTERFACE IDirectPlaySP
+DECLARE_INTERFACE_(IDirectPlaySP,IUnknown)
+{
+ /*** IUnknown methods ***/
+ STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
+ STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG,Release)(THIS) PURE;
+ /*** IDirectPlaySP methods ***/
+ STDMETHOD(AddMRUEntry)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPCVOID lpData, DWORD dwDataSize, DWORD dwMaxEntries ) PURE;
+ STDMETHOD(CreateAddress)(THIS_ REFGUID guidSP, REFGUID guidDataType, LPCVOID lpData, DWORD dwDataSize, LPVOID lpAddress,LPDWORD lpdwAddressSize) PURE;
+ STDMETHOD(EnumAddress)(THIS_ LPDPENUMADDRESSCALLBACK lpEnumAddressCallback, LPCVOID lpAddress, DWORD dwAddressSize, LPVOID lpContext ) PURE;
+ STDMETHOD(EnumMRUEntries)(THIS_ LPCWSTR lpSection, LPCWSTR lpKey, LPENUMMRUCALLBACK lpEnumMRUCallback, LPVOID lpContext ) PURE;
+ STDMETHOD(GetPlayerFlags)(THIS_ DPID idPlayer, LPDWORD lpdwPlayerFlags ) PURE;
+ STDMETHOD(GetSPPlayerData)(THIS_ DPID idPlayer, LPVOID *lplpData, LPDWORD lpdwDataSize, DWORD dwFlags ) PURE;
+ STDMETHOD(HandleMessage)(THIS_ LPVOID lpMessageBody, DWORD dwMessageBodySize, LPVOID lpMessageHeader ) PURE;
+ STDMETHOD(SetSPPlayerData)(THIS_ DPID idPlayer, LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE;
+ STDMETHOD(CreateCompoundAddress)(THIS_ LPCDPCOMPOUNDADDRESSELEMENT lpElements, DWORD dwElementCount, LPVOID lpAddress, LPDWORD lpdwAddressSize ) PURE;
+ STDMETHOD(GetSPData)(THIS_ LPVOID *lplpData, LPDWORD dwDataSize, DWORD dwFlags ) PURE;
+ STDMETHOD(SetSPData)(THIS_ LPVOID lpData, DWORD dwDataSize, DWORD dwFlags ) PURE;
+ STDMETHOD_(VOID,SendComplete)(THIS_ LPVOID , DWORD ) PURE;
+};
+#undef INTERFACE
+
+
+/* NOTE: The microsoft provided header file doesn't have these access
+ * functions
+ */
+#if !defined (__cplusplus) || defined(CINTERFACE)
+/*** IUnknown methods ***/
+#define IDirectPlaySP_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectPlaySP_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectPlaySP_Release(p) (p)->lpVtbl->Release(p)
+/*** IDirectPlaySP methods ***/
+#define IDirectPlaySP_AddMRUEntry(p,a,b,c,d,e) (p)->lpVtbl->AddMRUEntry(p,a,b,c,d,e)
+#define IDirectPlaySP_CreateAddress(p,a,b,c,d,e,f) (p)->lpVtbl->CreateAddress(p,a,b,c,d,e,f)
+#define IDirectPlaySP_EnumAddress(p,a,b,c,d) (p)->lpVtbl->EnumAddress(p,a,b,c,d)
+#define IDirectPlaySP_EnumMRUEntries(p,a,b,c,d) (p)->lpVtbl->EnumMRUEntries(p,a,b,c,d)
+#define IDirectPlaySP_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b)
+#define IDirectPlaySP_GetSPPlayerData(p,a,b,c,d) (p)->lpVtbl->GetSPPlayerData(p,a,b,c,d)
+#define IDirectPlaySP_HandleMessage(p,a,b,c) (p)->lpVtbl->HandleMessage(p,a,b,c)
+#define IDirectPlaySP_SetSPPlayerData(p,a,b,c,d) (p)->lpVtbl->SetSPPlayerData(p,a,b,c,d)
+#define IDirectPlaySP_CreateCompoundAddress(p,a,b,c,d) (p)->lpVtbl->CreateCompoundAddress(p,a,b,c,d)
+#define IDirectPlaySP_GetSPData(p,a,b,c) (p)->lpVtbl->GetSPData(p,a,b,c)
+#define IDirectPlaySP_SetSPData(p,a,b,c) (p)->lpVtbl->SetSPData(p,a,b,c)
+#define IDirectPlaySP_SendComplete(p,a,b) (p)->lpVtbl->SendComplete(p,a,b)
+#endif
+
+/* SP Callback stuff */
+
+typedef struct tagDPSP_ADDPLAYERTOGROUPDATA
+{
+ DPID idPlayer;
+ DPID idGroup;
+ IDirectPlaySP* lpISP;
+} DPSP_ADDPLAYERTOGROUPDATA, *LPDPSP_ADDPLAYERTOGROUPDATA;
+
+typedef struct tagDPSP_CLOSEDATA
+{
+ IDirectPlaySP* lpISP;
+} DPSP_CLOSEDATA, *LPDPSP_CLOSEDATA;
+
+typedef struct tagDPSP_CREATEGROUPDATA
+{
+ DPID idGroup;
+ DWORD dwFlags;
+ LPVOID lpSPMessageHeader;
+ IDirectPlaySP* lpISP;
+} DPSP_CREATEGROUPDATA, *LPDPSP_CREATEGROUPDATA;
+
+typedef struct tagDPSP_CREATEPLAYERDATA
+{
+ DPID idPlayer;
+ DWORD dwFlags;
+ LPVOID lpSPMessageHeader;
+ IDirectPlaySP* lpISP;
+} DPSP_CREATEPLAYERDATA, *LPDPSP_CREATEPLAYERDATA;
+
+typedef struct tagDPSP_DELETEGROUPDATA
+{
+ DPID idGroup;
+ DWORD dwFlags;
+ IDirectPlaySP* lpISP;
+} DPSP_DELETEGROUPDATA, *LPDPSP_DELETEGROUPDATA;
+
+typedef struct tagDPSP_DELETEPLAYERDATA
+{
+ DPID idPlayer;
+ DWORD dwFlags;
+ IDirectPlaySP* lpISP;
+} DPSP_DELETEPLAYERDATA, *LPDPSP_DELETEPLAYERDATA;
+
+typedef struct tagDPSP_ENUMSESSIONSDATA
+{
+ LPVOID lpMessage;
+ DWORD dwMessageSize;
+ IDirectPlaySP* lpISP;
+ BOOL bReturnStatus;
+} DPSP_ENUMSESSIONSDATA, *LPDPSP_ENUMSESSIONSDATA;
+
+typedef struct _DPSP_GETADDRESSDATA
+{
+ DPID idPlayer;
+ DWORD dwFlags;
+ LPDPADDRESS lpAddress;
+ LPDWORD lpdwAddressSize;
+ IDirectPlaySP* lpISP;
+} DPSP_GETADDRESSDATA, *LPDPSP_GETADDRESSDATA;
+
+typedef struct tagDPSP_GETADDRESSCHOICESDATA
+{
+ LPDPADDRESS lpAddress;
+ LPDWORD lpdwAddressSize;
+ IDirectPlaySP* lpISP;
+} DPSP_GETADDRESSCHOICESDATA, *LPDPSP_GETADDRESSCHOICESDATA;
+
+typedef struct tagDPSP_GETCAPSDATA
+{
+ DPID idPlayer;
+ LPDPCAPS lpCaps;
+ DWORD dwFlags;
+ IDirectPlaySP* lpISP;
+} DPSP_GETCAPSDATA, *LPDPSP_GETCAPSDATA;
+
+typedef struct tagDPSP_OPENDATA
+{
+ BOOL bCreate;
+ LPVOID lpSPMessageHeader;
+ IDirectPlaySP* lpISP;
+ BOOL bReturnStatus;
+ DWORD dwOpenFlags;
+ DWORD dwSessionFlags;
+} DPSP_OPENDATA, *LPDPSP_OPENDATA;
+
+typedef struct tagDPSP_REMOVEPLAYERFROMGROUPDATA
+{
+ DPID idPlayer;
+ DPID idGroup;
+ IDirectPlaySP* lpISP;
+} DPSP_REMOVEPLAYERFROMGROUPDATA, *LPDPSP_REMOVEPLAYERFROMGROUPDATA;
+
+typedef struct tagDPSP_REPLYDATA
+{
+ LPVOID lpSPMessageHeader;
+ LPVOID lpMessage;
+ DWORD dwMessageSize;
+ DPID idNameServer;
+ IDirectPlaySP* lpISP;
+} DPSP_REPLYDATA, *LPDPSP_REPLYDATA;
+
+typedef struct tagDPSP_SENDDATA
+{
+ DWORD dwFlags;
+ DPID idPlayerTo;
+ DPID idPlayerFrom;
+ LPVOID lpMessage;
+ DWORD dwMessageSize;
+ BOOL bSystemMessage;
+ IDirectPlaySP* lpISP;
+} DPSP_SENDDATA, *LPDPSP_SENDDATA;
+
+typedef struct tagDPSP_SENDTOGROUPDATA
+{
+ DWORD dwFlags;
+ DPID idGroupTo;
+ DPID idPlayerFrom;
+ LPVOID lpMessage;
+ DWORD dwMessageSize;
+ IDirectPlaySP* lpISP;
+} DPSP_SENDTOGROUPDATA, *LPDPSP_SENDTOGROUPDATA;
+
+typedef struct tagDPSP_SENDEXDATA
+{
+ IDirectPlaySP* lpISP;
+ DWORD dwFlags;
+ DPID idPlayerTo;
+ DPID idPlayerFrom;
+ LPSGBUFFER lpSendBuffers;
+ DWORD cBuffers;
+ DWORD dwMessageSize;
+ DWORD dwPriority;
+ DWORD dwTimeout;
+ LPVOID lpDPContext;
+ LPDWORD lpdwSPMsgID;
+ BOOL bSystemMessage;
+} DPSP_SENDEXDATA, *LPDPSP_SENDEXDATA;
+
+typedef struct tagDPSP_SENDTOGROUPEXDATA
+{
+ IDirectPlaySP* lpISP;
+ DWORD dwFlags;
+ DPID idGroupTo;
+ DPID idPlayerFrom;
+ LPSGBUFFER lpSendBuffers;
+ DWORD cBuffers;
+ DWORD dwMessageSize;
+ DWORD dwPriority;
+ DWORD dwTimeout;
+ LPVOID lpDPContext;
+ LPDWORD lpdwSPMsgID;
+} DPSP_SENDTOGROUPEXDATA, *LPDPSP_SENDTOGROUPEXDATA;
+
+typedef struct tagDPSP_GETMESSAGEQUEUEDATA
+{
+ IDirectPlaySP* lpISP;
+ DWORD dwFlags;
+ DPID idFrom;
+ DPID idTo;
+ LPDWORD lpdwNumMsgs;
+ LPDWORD lpdwNumBytes;
+} DPSP_GETMESSAGEQUEUEDATA, *LPDPSP_GETMESSAGEQUEUEDATA;
+
+#define DPCANCELSEND_PRIORITY 0x00000001
+#define DPCANCELSEND_ALL 0x00000002
+
+typedef struct tagDPSP_CANCELDATA
+{
+ IDirectPlaySP* lpISP;
+ DWORD dwFlags;
+ LPRGLPVOID lprglpvSPMsgID;
+ DWORD cSPMsgID;
+ DWORD dwMinPriority;
+ DWORD dwMaxPriority;
+} DPSP_CANCELDATA, *LPDPSP_CANCELDATA;
+
+typedef struct tagDPSP_SHUTDOWNDATA
+{
+ IDirectPlaySP* lpISP;
+} DPSP_SHUTDOWNDATA, *LPDPSP_SHUTDOWNDATA;
+
+
+/* Prototypes returned by SPInit */
+typedef HRESULT (WINAPI *LPDPSP_CREATEPLAYER)(LPDPSP_CREATEPLAYERDATA);
+typedef HRESULT (WINAPI *LPDPSP_DELETEPLAYER)(LPDPSP_DELETEPLAYERDATA);
+typedef HRESULT (WINAPI *LPDPSP_SEND)(LPDPSP_SENDDATA);
+typedef HRESULT (WINAPI *LPDPSP_ENUMSESSIONS)(LPDPSP_ENUMSESSIONSDATA);
+typedef HRESULT (WINAPI *LPDPSP_REPLY)(LPDPSP_REPLYDATA);
+typedef HRESULT (WINAPI *LPDPSP_SHUTDOWN)(void);
+typedef HRESULT (WINAPI *LPDPSP_CREATEGROUP)(LPDPSP_CREATEGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_DELETEGROUP)(LPDPSP_DELETEGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_ADDPLAYERTOGROUP)(LPDPSP_ADDPLAYERTOGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_REMOVEPLAYERFROMGROUP)(LPDPSP_REMOVEPLAYERFROMGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETCAPS)(LPDPSP_GETCAPSDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETADDRESS)(LPDPSP_GETADDRESSDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETADDRESSCHOICES)(LPDPSP_GETADDRESSCHOICESDATA);
+typedef HRESULT (WINAPI *LPDPSP_OPEN)(LPDPSP_OPENDATA);
+typedef HRESULT (WINAPI *LPDPSP_CLOSE)(void);
+typedef HRESULT (WINAPI *LPDPSP_SENDTOGROUP)(LPDPSP_SENDTOGROUPDATA);
+typedef HRESULT (WINAPI *LPDPSP_SHUTDOWNEX)(LPDPSP_SHUTDOWNDATA);
+typedef HRESULT (WINAPI *LPDPSP_CLOSEEX)(LPDPSP_CLOSEDATA);
+typedef HRESULT (WINAPI *LPDPSP_SENDEX)(LPDPSP_SENDEXDATA);
+typedef HRESULT (WINAPI *LPDPSP_SENDTOGROUPEX)(LPDPSP_SENDTOGROUPEXDATA);
+typedef HRESULT (WINAPI *LPDPSP_CANCEL)(LPDPSP_CANCELDATA);
+typedef HRESULT (WINAPI *LPDPSP_GETMESSAGEQUEUE)(LPDPSP_GETMESSAGEQUEUEDATA);
+
+
+typedef struct tagDPSP_SPCALLBACKS
+{
+ DWORD dwSize;
+ DWORD dwVersion;
+
+ LPDPSP_ENUMSESSIONS EnumSessions; /* Must be provided */
+ LPDPSP_REPLY Reply; /* Must be provided */
+ LPDPSP_SEND Send; /* Must be provided */
+ LPDPSP_ADDPLAYERTOGROUP AddPlayerToGroup; /* Optional */
+ LPDPSP_CLOSE Close; /* Optional */
+ LPDPSP_CREATEGROUP CreateGroup; /* Optional */
+ LPDPSP_CREATEPLAYER CreatePlayer; /* Optional */
+ LPDPSP_DELETEGROUP DeleteGroup; /* Optional */
+ LPDPSP_DELETEPLAYER DeletePlayer; /* Optional */
+ LPDPSP_GETADDRESS GetAddress; /* Optional */
+ LPDPSP_GETCAPS GetCaps; /* Optional */
+ LPDPSP_OPEN Open; /* Optional */
+ LPDPSP_REMOVEPLAYERFROMGROUP RemovePlayerFromGroup; /* Optional */
+ LPDPSP_SENDTOGROUP SendToGroup; /* Optional */
+ LPDPSP_SHUTDOWN Shutdown; /* Optional */
+
+ LPDPSP_CLOSEEX CloseEx; /* Optional */
+ LPDPSP_SHUTDOWNEX ShutdownEx; /* Optional */
+ LPDPSP_GETADDRESSCHOICES GetAddressChoices; /* Optional */
+
+ LPDPSP_SENDEX SendEx; /* Optional */
+ LPDPSP_SENDTOGROUPEX SendToGroupEx; /* Optional */
+ LPDPSP_CANCEL Cancel; /* Optional */
+ LPDPSP_GETMESSAGEQUEUE GetMessageQueue; /* Optional */
+} DPSP_SPCALLBACKS, *LPDPSP_SPCALLBACKS;
+
+typedef struct tagSPINITDATA
+{
+ LPDPSP_SPCALLBACKS lpCB;
+ IDirectPlaySP* lpISP;
+ LPWSTR lpszName;
+ LPGUID lpGuid;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwSPHeaderSize;
+ LPDPADDRESS lpAddress;
+ DWORD dwAddressSize;
+ DWORD dwSPVersion;
+} SPINITDATA, *LPSPINITDATA;
+
+typedef HRESULT (WINAPI *LPDPSP_SPINIT)(LPSPINITDATA);
+
+/* This variable is exported from the DLL at ordinal 6 to be accessed by the
+ * SP directly
+ */
+extern DWORD gdwDPlaySPRefCount;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl
new file mode 100644
index 00000000..099f8261
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/epm.idl
@@ -0,0 +1,131 @@
+/*
+ * Endpoint Mapper
+ *
+ * Copyright 2006 Robert Shearman (for CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* FIXME: should be import */
+#include "dcetypes.idl"
+
+cpp_quote("RPC_STATUS WINAPI TowerExplode(")
+cpp_quote(" const twr_t *tower, PRPC_SYNTAX_IDENTIFIER object, PRPC_SYNTAX_IDENTIFIER syntax,")
+cpp_quote(" char **protseq, char **endpoint, char **address);")
+cpp_quote("RPC_STATUS WINAPI TowerConstruct(")
+cpp_quote(" const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax,")
+cpp_quote(" const char *protseq, const char *endpoint, const char *address,")
+cpp_quote(" twr_t **tower);")
+
+[
+ uuid(e1af8308-5d1f-11c9-91a4-08002b14a0fa),
+ version(3.0),
+ pointer_default(ref)
+]
+interface epm
+{
+ const long ept_max_annotation_size = 64;
+
+ typedef struct
+ {
+ GUID object;
+ twr_t *tower;
+ [string] char annotation[ept_max_annotation_size];
+ } ept_entry_t, *ept_entry_p_t;
+
+ typedef [context_handle] void *ept_lookup_handle_t;
+
+ /* Adds entries to an endpoint map */
+ void ept_insert(
+ [in] handle_t h,
+ [in] unsigned32 num_ents,
+ [in, size_is(num_ents)]
+ ept_entry_t entries[],
+ [in] boolean32 replace,
+ [out] error_status_t *status
+ );
+
+ /* Removes entries from an endpoint map */
+ void ept_delete(
+ [in] handle_t h,
+ [in] unsigned32 num_ents,
+ [in, size_is(num_ents)]
+ ept_entry_t entries[],
+ [out] error_status_t *status
+ );
+
+ /* Lookup entries in an endpoint map */
+ [idempotent]
+ void ept_lookup(
+ [in] handle_t h,
+ [in] unsigned32 inquiry_type,
+ [in] uuid_p_t object,
+ [in] rpc_if_id_p_t interface_id,
+ [in] unsigned32 vers_option,
+ [in, out] ept_lookup_handle_t *entry_handle,
+ [in] unsigned32 max_ents,
+ [out] unsigned32 *num_ents,
+ [out, length_is(*num_ents), size_is(max_ents)]
+ ept_entry_t entries[],
+ [out] error_status_t *status
+ );
+
+ /* Lookup entries in an endpoint map using the given input pattern */
+ [idempotent]
+ void ept_map(
+ [in] handle_t h,
+ [in] uuid_p_t object,
+ [in] twr_p_t map_tower,
+ [in, out] ept_lookup_handle_t *entry_handle,
+ [in] unsigned32 max_towers,
+ [out] unsigned32 *num_towers,
+ [out, length_is(*num_towers), size_is(max_towers)]
+ twr_p_t *towers,
+ [out] error_status_t *status
+ );
+
+ /* Free the context handle returned by ept_lookup or ept_map */
+ void ept_lookup_handle_free(
+ [in] handle_t h,
+ [in, out] ept_lookup_handle_t *entry_handle,
+ [out] error_status_t *status
+ );
+
+ /* Inquires as to the endpoint map's object identifier */
+ [idempotent]
+ void ept_inq_object(
+ [in] handle_t h,
+ [out] GUID *ept_object,
+ [out] error_status_t *status
+ );
+
+ /* Deletes matching entries in the endpoint map */
+ void ept_mgmt_delete(
+ [in] handle_t h,
+ [in] boolean32 object_speced,
+ [in] uuid_p_t object,
+ [in] twr_p_t tower,
+ [out] error_status_t *status
+ );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h
new file mode 100644
index 00000000..82f1323f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/exception.h
@@ -0,0 +1,282 @@
+/*
+ * Wine exception handling
+ *
+ * Copyright (c) 1999 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_EXCEPTION_H
+#define __WINE_WINE_EXCEPTION_H
+
+#include <setjmp.h>
+#include <windef.h>
+#include <excpt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* The following definitions allow using exceptions in Wine and Winelib code
+ *
+ * They should be used like this:
+ *
+ * __TRY
+ * {
+ * do some stuff that can raise an exception
+ * }
+ * __EXCEPT(filter_func)
+ * {
+ * handle the exception here
+ * }
+ * __ENDTRY
+ *
+ * or
+ *
+ * __TRY
+ * {
+ * do some stuff that can raise an exception
+ * }
+ * __FINALLY(finally_func)
+ *
+ * The filter_func and finally_func functions must be defined like this:
+ *
+ * LONG CALLBACK filter_func( PEXCEPTION_POINTERS __eptr ) { ... }
+ *
+ * void CALLBACK finally_func( BOOL __normal ) { ... }
+ *
+ * The filter function must return one of the EXCEPTION_* code; it can
+ * use GetExceptionInformation() and GetExceptionCode() to retrieve the
+ * exception info.
+ *
+ * Warning: inside a __TRY or __EXCEPT block, 'break' or 'continue' statements
+ * break out of the current block. You cannot use 'return', 'goto'
+ * or 'longjmp' to leave a __TRY block, as this will surely crash.
+ * You can use them to leave a __EXCEPT block though.
+ *
+ * -- AJ
+ */
+
+#ifndef __GNUC__
+#define __attribute__(x) /* nothing */
+#endif
+
+/* Define this if you want to use your compiler built-in __try/__except support.
+ * This is only useful when compiling to a native Windows binary, as the built-in
+ * compiler exceptions will most certainly not work under Winelib.
+ */
+#ifdef USE_COMPILER_EXCEPTIONS
+
+#define __TRY __try
+#define __EXCEPT(func) __except((func)(GetExceptionInformation()))
+#define __FINALLY(func) __finally { (func)(!AbnormalTermination()); }
+#define __ENDTRY /*nothing*/
+#define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+#define __EXCEPT_ALL __except(EXCEPTION_EXECUTE_HANDLER)
+
+#else /* USE_COMPILER_EXCEPTIONS */
+
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#define sigjmp_buf jmp_buf
+#define sigsetjmp(buf,sigs) setjmp(buf)
+#define siglongjmp(buf,val) longjmp(buf,val)
+#endif
+
+extern void __wine_rtl_unwind( EXCEPTION_REGISTRATION_RECORD* frame, EXCEPTION_RECORD *record,
+ void (*target)(void) ) DECLSPEC_HIDDEN DECLSPEC_NORETURN;
+extern DWORD __wine_exception_handler( EXCEPTION_RECORD *record,
+ EXCEPTION_REGISTRATION_RECORD *frame,
+ CONTEXT *context,
+ EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+extern DWORD __wine_exception_handler_page_fault( EXCEPTION_RECORD *record,
+ EXCEPTION_REGISTRATION_RECORD *frame,
+ CONTEXT *context,
+ EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+extern DWORD __wine_exception_handler_all( EXCEPTION_RECORD *record,
+ EXCEPTION_REGISTRATION_RECORD *frame,
+ CONTEXT *context,
+ EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+extern DWORD __wine_finally_handler( EXCEPTION_RECORD *record,
+ EXCEPTION_REGISTRATION_RECORD *frame,
+ CONTEXT *context,
+ EXCEPTION_REGISTRATION_RECORD **pdispatcher ) DECLSPEC_HIDDEN;
+
+#define __TRY \
+ do { __WINE_FRAME __f; \
+ int __first = 1; \
+ for (;;) if (!__first) \
+ { \
+ do {
+
+#define __EXCEPT(func) \
+ } while(0); \
+ __wine_pop_frame( &__f.frame ); \
+ break; \
+ } else { \
+ __f.frame.Handler = __wine_exception_handler; \
+ __f.u.filter = (func); \
+ if (sigsetjmp( __f.jmp, 0 )) { \
+ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
+ do {
+
+/* convenience handler for page fault exceptions */
+#define __EXCEPT_PAGE_FAULT \
+ } while(0); \
+ __wine_pop_frame( &__f.frame ); \
+ break; \
+ } else { \
+ __f.frame.Handler = __wine_exception_handler_page_fault; \
+ if (sigsetjmp( __f.jmp, 0 )) { \
+ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
+ do {
+
+/* convenience handler for all exception */
+#define __EXCEPT_ALL \
+ } while(0); \
+ __wine_pop_frame( &__f.frame ); \
+ break; \
+ } else { \
+ __f.frame.Handler = __wine_exception_handler_all; \
+ if (sigsetjmp( __f.jmp, 0 )) { \
+ const __WINE_FRAME * const __eptr __attribute__((unused)) = &__f; \
+ do {
+
+#define __ENDTRY \
+ } while (0); \
+ break; \
+ } \
+ __wine_push_frame( &__f.frame ); \
+ __first = 0; \
+ } \
+ } while (0);
+
+#define __FINALLY(func) \
+ } while(0); \
+ __wine_pop_frame( &__f.frame ); \
+ (func)(1); \
+ break; \
+ } else { \
+ __f.frame.Handler = __wine_finally_handler; \
+ __f.u.finally_func = (func); \
+ __wine_push_frame( &__f.frame ); \
+ __first = 0; \
+ } \
+ } while (0);
+
+
+typedef LONG (CALLBACK *__WINE_FILTER)(PEXCEPTION_POINTERS);
+typedef void (CALLBACK *__WINE_FINALLY)(BOOL);
+
+#define GetExceptionInformation() (__eptr)
+#define GetExceptionCode() (__eptr->ExceptionRecord->ExceptionCode)
+#define AbnormalTermination() (!__normal)
+
+typedef struct __tagWINE_FRAME
+{
+ EXCEPTION_REGISTRATION_RECORD frame;
+ union
+ {
+ /* exception data */
+ __WINE_FILTER filter;
+ /* finally data */
+ __WINE_FINALLY finally_func;
+ } u;
+ sigjmp_buf jmp;
+ /* hack to make GetExceptionCode() work in handler */
+ DWORD ExceptionCode;
+ const struct __tagWINE_FRAME *ExceptionRecord;
+} __WINE_FRAME;
+
+#endif /* USE_COMPILER_EXCEPTIONS */
+
+static inline EXCEPTION_REGISTRATION_RECORD *__wine_push_frame( EXCEPTION_REGISTRATION_RECORD *frame )
+{
+#if defined(__GNUC__) && defined(__i386__)
+ EXCEPTION_REGISTRATION_RECORD *prev;
+ __asm__ __volatile__(".byte 0x64\n\tmovl (0),%0"
+ "\n\tmovl %0,(%1)"
+ "\n\t.byte 0x64\n\tmovl %1,(0)"
+ : "=&r" (prev) : "r" (frame) : "memory" );
+ return prev;
+#else
+ NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
+ frame->Prev = teb->ExceptionList;
+ teb->ExceptionList = frame;
+ return frame->Prev;
+#endif
+}
+
+static inline EXCEPTION_REGISTRATION_RECORD *__wine_pop_frame( EXCEPTION_REGISTRATION_RECORD *frame )
+{
+#if defined(__GNUC__) && defined(__i386__)
+ __asm__ __volatile__(".byte 0x64\n\tmovl %0,(0)"
+ : : "r" (frame->Prev) : "memory" );
+ return frame->Prev;
+
+#else
+ NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
+ teb->ExceptionList = frame->Prev;
+ return frame->Prev;
+#endif
+}
+
+static inline EXCEPTION_REGISTRATION_RECORD *__wine_get_frame(void)
+{
+#if defined(__GNUC__) && defined(__i386__)
+ EXCEPTION_REGISTRATION_RECORD *ret;
+ __asm__ __volatile__(".byte 0x64\n\tmovl (0),%0" : "=r" (ret) );
+ return ret;
+#else
+ NT_TIB *teb = (NT_TIB *)NtCurrentTeb();
+ return teb->ExceptionList;
+#endif
+}
+
+/* Exception handling flags - from OS/2 2.0 exception handling */
+
+/* Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD */
+#define EH_NONCONTINUABLE 0x01
+#define EH_UNWINDING 0x02
+#define EH_EXIT_UNWIND 0x04
+#define EH_STACK_INVALID 0x08
+#define EH_NESTED_CALL 0x10
+#define EH_TARGET_UNWIND 0x20
+
+/* Wine-specific exceptions codes */
+
+#define EXCEPTION_WINE_STUB 0x80000100 /* stub entry point called */
+#define EXCEPTION_WINE_ASSERTION 0x80000101 /* assertion failed */
+
+/* unhandled return status from vm86 mode */
+#define EXCEPTION_VM86_INTx 0x80000110
+#define EXCEPTION_VM86_STI 0x80000111
+#define EXCEPTION_VM86_PICRETURN 0x80000112
+
+extern void __wine_enter_vm86( CONTEXT *context );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINE_EXCEPTION_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h
new file mode 100644
index 00000000..e9f18c78
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/gdi_driver.h
@@ -0,0 +1,291 @@
+/*
+ * Definitions for Wine GDI drivers
+ *
+ * Copyright 2011 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_GDI_DRIVER_H
+#define __WINE_WINE_GDI_DRIVER_H
+
+#include "wine/list.h"
+
+struct gdi_dc_funcs;
+struct opengl_funcs;
+
+typedef struct gdi_physdev
+{
+ const struct gdi_dc_funcs *funcs;
+ struct gdi_physdev *next;
+ HDC hdc;
+} *PHYSDEV;
+
+struct bitblt_coords
+{
+ int log_x; /* original position and size, in logical coords */
+ int log_y;
+ int log_width;
+ int log_height;
+ int x; /* mapped position and size, in device coords */
+ int y;
+ int width;
+ int height;
+ RECT visrect; /* rectangle clipped to the visible part, in device coords */
+ DWORD layout; /* DC layout */
+};
+
+struct gdi_image_bits
+{
+ void *ptr; /* pointer to the bits */
+ BOOL is_copy; /* whether this is a copy of the bits that can be modified */
+ void (*free)(struct gdi_image_bits *); /* callback for freeing the bits */
+ void *param; /* extra parameter for callback private use */
+};
+
+struct brush_pattern
+{
+ BITMAPINFO *info; /* DIB info */
+ struct gdi_image_bits bits; /* DIB bits */
+ UINT usage; /* color usage for DIB info */
+};
+
+struct gdi_dc_funcs
+{
+ INT (*pAbortDoc)(PHYSDEV);
+ BOOL (*pAbortPath)(PHYSDEV);
+ BOOL (*pAlphaBlend)(PHYSDEV,struct bitblt_coords*,PHYSDEV,struct bitblt_coords*,BLENDFUNCTION);
+ BOOL (*pAngleArc)(PHYSDEV,INT,INT,DWORD,FLOAT,FLOAT);
+ BOOL (*pArc)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+ BOOL (*pArcTo)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+ BOOL (*pBeginPath)(PHYSDEV);
+ DWORD (*pBlendImage)(PHYSDEV,BITMAPINFO*,const struct gdi_image_bits*,struct bitblt_coords*,struct bitblt_coords*,BLENDFUNCTION);
+ BOOL (*pChord)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+ BOOL (*pCloseFigure)(PHYSDEV);
+ BOOL (*pCreateCompatibleDC)(PHYSDEV,PHYSDEV*);
+ BOOL (*pCreateDC)(PHYSDEV*,LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+ BOOL (*pDeleteDC)(PHYSDEV);
+ BOOL (*pDeleteObject)(PHYSDEV,HGDIOBJ);
+ DWORD (*pDeviceCapabilities)(LPSTR,LPCSTR,LPCSTR,WORD,LPSTR,LPDEVMODEA);
+ BOOL (*pEllipse)(PHYSDEV,INT,INT,INT,INT);
+ INT (*pEndDoc)(PHYSDEV);
+ INT (*pEndPage)(PHYSDEV);
+ BOOL (*pEndPath)(PHYSDEV);
+ BOOL (*pEnumFonts)(PHYSDEV,LPLOGFONTW,FONTENUMPROCW,LPARAM);
+ INT (*pEnumICMProfiles)(PHYSDEV,ICMENUMPROCW,LPARAM);
+ INT (*pExcludeClipRect)(PHYSDEV,INT,INT,INT,INT);
+ INT (*pExtDeviceMode)(LPSTR,HWND,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,DWORD);
+ INT (*pExtEscape)(PHYSDEV,INT,INT,LPCVOID,INT,LPVOID);
+ BOOL (*pExtFloodFill)(PHYSDEV,INT,INT,COLORREF,UINT);
+ INT (*pExtSelectClipRgn)(PHYSDEV,HRGN,INT);
+ BOOL (*pExtTextOut)(PHYSDEV,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);
+ BOOL (*pFillPath)(PHYSDEV);
+ BOOL (*pFillRgn)(PHYSDEV,HRGN,HBRUSH);
+ BOOL (*pFlattenPath)(PHYSDEV);
+ BOOL (*pFontIsLinked)(PHYSDEV);
+ BOOL (*pFrameRgn)(PHYSDEV,HRGN,HBRUSH,INT,INT);
+ BOOL (*pGdiComment)(PHYSDEV,UINT,const BYTE*);
+ BOOL (*pGdiRealizationInfo)(PHYSDEV,void*);
+ UINT (*pGetBoundsRect)(PHYSDEV,RECT*,UINT);
+ BOOL (*pGetCharABCWidths)(PHYSDEV,UINT,UINT,LPABC);
+ BOOL (*pGetCharABCWidthsI)(PHYSDEV,UINT,UINT,WORD*,LPABC);
+ BOOL (*pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT);
+ INT (*pGetDeviceCaps)(PHYSDEV,INT);
+ BOOL (*pGetDeviceGammaRamp)(PHYSDEV,LPVOID);
+ DWORD (*pGetFontData)(PHYSDEV,DWORD,DWORD,LPVOID,DWORD);
+ DWORD (*pGetFontUnicodeRanges)(PHYSDEV,LPGLYPHSET);
+ DWORD (*pGetGlyphIndices)(PHYSDEV,LPCWSTR,INT,LPWORD,DWORD);
+ DWORD (*pGetGlyphOutline)(PHYSDEV,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+ BOOL (*pGetICMProfile)(PHYSDEV,LPDWORD,LPWSTR);
+ DWORD (*pGetImage)(PHYSDEV,BITMAPINFO*,struct gdi_image_bits*,struct bitblt_coords*);
+ DWORD (*pGetKerningPairs)(PHYSDEV,DWORD,LPKERNINGPAIR);
+ COLORREF (*pGetNearestColor)(PHYSDEV,COLORREF);
+ UINT (*pGetOutlineTextMetrics)(PHYSDEV,UINT,LPOUTLINETEXTMETRICW);
+ COLORREF (*pGetPixel)(PHYSDEV,INT,INT);
+ UINT (*pGetSystemPaletteEntries)(PHYSDEV,UINT,UINT,LPPALETTEENTRY);
+ UINT (*pGetTextCharsetInfo)(PHYSDEV,LPFONTSIGNATURE,DWORD);
+ BOOL (*pGetTextExtentExPoint)(PHYSDEV,LPCWSTR,INT,LPINT);
+ BOOL (*pGetTextExtentExPointI)(PHYSDEV,const WORD*,INT,LPINT);
+ INT (*pGetTextFace)(PHYSDEV,INT,LPWSTR);
+ BOOL (*pGetTextMetrics)(PHYSDEV,TEXTMETRICW*);
+ BOOL (*pGradientFill)(PHYSDEV,TRIVERTEX*,ULONG,void*,ULONG,ULONG);
+ INT (*pIntersectClipRect)(PHYSDEV,INT,INT,INT,INT);
+ BOOL (*pInvertRgn)(PHYSDEV,HRGN);
+ BOOL (*pLineTo)(PHYSDEV,INT,INT);
+ BOOL (*pModifyWorldTransform)(PHYSDEV,const XFORM*,DWORD);
+ BOOL (*pMoveTo)(PHYSDEV,INT,INT);
+ INT (*pOffsetClipRgn)(PHYSDEV,INT,INT);
+ BOOL (*pOffsetViewportOrgEx)(PHYSDEV,INT,INT,POINT*);
+ BOOL (*pOffsetWindowOrgEx)(PHYSDEV,INT,INT,POINT*);
+ BOOL (*pPaintRgn)(PHYSDEV,HRGN);
+ BOOL (*pPatBlt)(PHYSDEV,struct bitblt_coords*,DWORD);
+ BOOL (*pPie)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
+ BOOL (*pPolyBezier)(PHYSDEV,const POINT*,DWORD);
+ BOOL (*pPolyBezierTo)(PHYSDEV,const POINT*,DWORD);
+ BOOL (*pPolyDraw)(PHYSDEV,const POINT*,const BYTE *,DWORD);
+ BOOL (*pPolyPolygon)(PHYSDEV,const POINT*,const INT*,UINT);
+ BOOL (*pPolyPolyline)(PHYSDEV,const POINT*,const DWORD*,DWORD);
+ BOOL (*pPolygon)(PHYSDEV,const POINT*,INT);
+ BOOL (*pPolyline)(PHYSDEV,const POINT*,INT);
+ BOOL (*pPolylineTo)(PHYSDEV,const POINT*,INT);
+ DWORD (*pPutImage)(PHYSDEV,HRGN,BITMAPINFO*,const struct gdi_image_bits*,struct bitblt_coords*,struct bitblt_coords*,DWORD);
+ UINT (*pRealizeDefaultPalette)(PHYSDEV);
+ UINT (*pRealizePalette)(PHYSDEV,HPALETTE,BOOL);
+ BOOL (*pRectangle)(PHYSDEV,INT,INT,INT,INT);
+ HDC (*pResetDC)(PHYSDEV,const DEVMODEW*);
+ BOOL (*pRestoreDC)(PHYSDEV,INT);
+ BOOL (*pRoundRect)(PHYSDEV,INT,INT,INT,INT,INT,INT);
+ INT (*pSaveDC)(PHYSDEV);
+ BOOL (*pScaleViewportExtEx)(PHYSDEV,INT,INT,INT,INT,SIZE*);
+ BOOL (*pScaleWindowExtEx)(PHYSDEV,INT,INT,INT,INT,SIZE*);
+ HBITMAP (*pSelectBitmap)(PHYSDEV,HBITMAP);
+ HBRUSH (*pSelectBrush)(PHYSDEV,HBRUSH,const struct brush_pattern*);
+ BOOL (*pSelectClipPath)(PHYSDEV,INT);
+ HFONT (*pSelectFont)(PHYSDEV,HFONT,UINT*);
+ HPALETTE (*pSelectPalette)(PHYSDEV,HPALETTE,BOOL);
+ HPEN (*pSelectPen)(PHYSDEV,HPEN,const struct brush_pattern*);
+ INT (*pSetArcDirection)(PHYSDEV,INT);
+ COLORREF (*pSetBkColor)(PHYSDEV,COLORREF);
+ INT (*pSetBkMode)(PHYSDEV,INT);
+ UINT (*pSetBoundsRect)(PHYSDEV,RECT*,UINT);
+ COLORREF (*pSetDCBrushColor)(PHYSDEV, COLORREF);
+ COLORREF (*pSetDCPenColor)(PHYSDEV, COLORREF);
+ INT (*pSetDIBitsToDevice)(PHYSDEV,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,BITMAPINFO*,UINT);
+ VOID (*pSetDeviceClipping)(PHYSDEV,HRGN);
+ BOOL (*pSetDeviceGammaRamp)(PHYSDEV,LPVOID);
+ DWORD (*pSetLayout)(PHYSDEV,DWORD);
+ INT (*pSetMapMode)(PHYSDEV,INT);
+ DWORD (*pSetMapperFlags)(PHYSDEV,DWORD);
+ COLORREF (*pSetPixel)(PHYSDEV,INT,INT,COLORREF);
+ INT (*pSetPolyFillMode)(PHYSDEV,INT);
+ INT (*pSetROP2)(PHYSDEV,INT);
+ INT (*pSetRelAbs)(PHYSDEV,INT);
+ INT (*pSetStretchBltMode)(PHYSDEV,INT);
+ UINT (*pSetTextAlign)(PHYSDEV,UINT);
+ INT (*pSetTextCharacterExtra)(PHYSDEV,INT);
+ COLORREF (*pSetTextColor)(PHYSDEV,COLORREF);
+ BOOL (*pSetTextJustification)(PHYSDEV,INT,INT);
+ BOOL (*pSetViewportExtEx)(PHYSDEV,INT,INT,SIZE*);
+ BOOL (*pSetViewportOrgEx)(PHYSDEV,INT,INT,POINT*);
+ BOOL (*pSetWindowExtEx)(PHYSDEV,INT,INT,SIZE*);
+ BOOL (*pSetWindowOrgEx)(PHYSDEV,INT,INT,POINT*);
+ BOOL (*pSetWorldTransform)(PHYSDEV,const XFORM*);
+ INT (*pStartDoc)(PHYSDEV,const DOCINFOW*);
+ INT (*pStartPage)(PHYSDEV);
+ BOOL (*pStretchBlt)(PHYSDEV,struct bitblt_coords*,PHYSDEV,struct bitblt_coords*,DWORD);
+ INT (*pStretchDIBits)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT,const void*,BITMAPINFO*,UINT,DWORD);
+ BOOL (*pStrokeAndFillPath)(PHYSDEV);
+ BOOL (*pStrokePath)(PHYSDEV);
+ BOOL (*pUnrealizePalette)(HPALETTE);
+ BOOL (*pWidenPath)(PHYSDEV);
+ struct opengl_funcs * (*wine_get_wgl_driver)(PHYSDEV,UINT);
+
+ /* priority order for the driver on the stack */
+ UINT priority;
+};
+
+/* increment this when you change the DC function table */
+#define WINE_GDI_DRIVER_VERSION 46
+
+#define GDI_PRIORITY_NULL_DRV 0 /* null driver */
+#define GDI_PRIORITY_FONT_DRV 100 /* any font driver */
+#define GDI_PRIORITY_GRAPHICS_DRV 200 /* any graphics driver */
+#define GDI_PRIORITY_DIB_DRV 300 /* the DIB driver */
+#define GDI_PRIORITY_PATH_DRV 400 /* the path driver */
+
+static inline PHYSDEV get_physdev_entry_point( PHYSDEV dev, size_t offset )
+{
+ while (!((void **)dev->funcs)[offset / sizeof(void *)]) dev = dev->next;
+ return dev;
+}
+
+#define GET_NEXT_PHYSDEV(dev,func) \
+ get_physdev_entry_point( (dev)->next, FIELD_OFFSET(struct gdi_dc_funcs,func))
+
+static inline void push_dc_driver( PHYSDEV *dev, PHYSDEV physdev, const struct gdi_dc_funcs *funcs )
+{
+ while ((*dev)->funcs->priority > funcs->priority) dev = &(*dev)->next;
+ physdev->funcs = funcs;
+ physdev->next = *dev;
+ physdev->hdc = (*dev)->hdc;
+ *dev = physdev;
+}
+
+/* support for window surfaces */
+
+struct window_surface;
+
+struct window_surface_funcs
+{
+ void (*lock)( struct window_surface *surface );
+ void (*unlock)( struct window_surface *surface );
+ void* (*get_info)( struct window_surface *surface, BITMAPINFO *info );
+ RECT* (*get_bounds)( struct window_surface *surface );
+ void (*set_region)( struct window_surface *surface, HRGN region );
+ void (*flush)( struct window_surface *surface );
+ void (*destroy)( struct window_surface *surface );
+};
+
+struct window_surface
+{
+ const struct window_surface_funcs *funcs; /* driver-specific implementations */
+ struct list entry; /* entry in global list managed by user32 */
+ LONG ref; /* reference count */
+ RECT rect; /* constant, no locking needed */
+ /* driver-specific fields here */
+};
+
+static inline ULONG window_surface_add_ref( struct window_surface *surface )
+{
+ return InterlockedIncrement( &surface->ref );
+}
+
+static inline ULONG window_surface_release( struct window_surface *surface )
+{
+ ULONG ret = InterlockedDecrement( &surface->ref );
+ if (!ret) surface->funcs->destroy( surface );
+ return ret;
+}
+
+/* the DC hook support is only exported on Win16, the 32-bit version is a Wine extension */
+
+#define DCHC_INVALIDVISRGN 0x0001
+#define DCHC_DELETEDC 0x0002
+#define DCHF_INVALIDATEVISRGN 0x0001
+#define DCHF_VALIDATEVISRGN 0x0002
+#define DCHF_RESETDC 0x0004 /* Wine extension */
+
+typedef BOOL (CALLBACK *DCHOOKPROC)(HDC,WORD,DWORD_PTR,LPARAM);
+
+WINGDIAPI DWORD_PTR WINAPI GetDCHook(HDC,DCHOOKPROC*);
+WINGDIAPI BOOL WINAPI SetDCHook(HDC,DCHOOKPROC,DWORD_PTR);
+WINGDIAPI WORD WINAPI SetHookFlags(HDC,WORD);
+
+extern void CDECL __wine_make_gdi_object_system( HGDIOBJ handle, BOOL set );
+extern void CDECL __wine_set_visible_region( HDC hdc, HRGN hrgn, const RECT *vis_rect,
+ const RECT *device_rect, struct window_surface *surface );
+extern HMODULE CDECL __wine_get_driver_module( HDC hdc );
+extern struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version );
+
+#endif /* __WINE_WINE_GDI_DRIVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl
new file mode 100644
index 00000000..d8537c6e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/irot.idl
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2007 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+cpp_quote("#define IROT_PROTSEQ {'n','c','a','l','r','p','c',0}")
+cpp_quote("#define IROT_ENDPOINT {'i','r','o','t',0}")
+
+typedef struct tagMonikerComparisonData {
+ ULONG ulCntData;
+ [size_is(ulCntData)] BYTE abData[];
+} MonikerComparisonData;
+
+[
+ uuid(7a98c254-6808-11cf-b73b-00aa00b677a8),
+ version(0.2),
+ strict_context_handle
+]
+interface Irot
+{
+ typedef struct tagInterfaceData
+ {
+ ULONG ulCntData;
+ [size_is(ulCntData)] BYTE abData[];
+ } InterfaceData;
+
+ typedef [unique] InterfaceData *PInterfaceData;
+
+ typedef struct tagInterfaceList
+ {
+ ULONG size;
+ [size_is(size)] PInterfaceData interfaces[];
+ } InterfaceList;
+
+ typedef [unique] InterfaceList *PInterfaceList;
+
+ typedef DWORD IrotCookie;
+
+ typedef handle_t IrotHandle;
+ typedef [context_handle] void *IrotContextHandle;
+
+ HRESULT IrotRegister(
+ [in] IrotHandle h,
+ [in] const MonikerComparisonData *moniker_data,
+ [in] const InterfaceData *object,
+ [in] const InterfaceData *moniker,
+ [in] const FILETIME *time,
+ [in] DWORD grfFlags,
+ [out] IrotCookie *cookie,
+ [out] IrotContextHandle *ctxt_handle);
+
+ HRESULT IrotRevoke(
+ [in] IrotHandle h,
+ [in] IrotCookie cookie,
+ [in, out] IrotContextHandle *ctxt_handle,
+ [out] PInterfaceData *object,
+ [out] PInterfaceData *moniker);
+
+ HRESULT IrotIsRunning(
+ [in] IrotHandle h,
+ [in] const MonikerComparisonData *moniker_data);
+
+ HRESULT IrotGetObject(
+ [in] IrotHandle h,
+ [in] const MonikerComparisonData *moniker_data,
+ [out] PInterfaceData *obj,
+ [out] IrotCookie *cookie);
+
+ HRESULT IrotNoteChangeTime(
+ [in] IrotHandle h,
+ [in] IrotCookie cookie,
+ [in] const FILETIME *time);
+
+ HRESULT IrotGetTimeOfLastChange(
+ [in] IrotHandle h,
+ [in] const MonikerComparisonData *moniker_data,
+ [out] FILETIME *time);
+
+ HRESULT IrotEnumRunning(
+ [in] IrotHandle h,
+ [out] PInterfaceList *list);
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl
new file mode 100644
index 00000000..7888f1ab
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/itss.idl
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2004 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+typedef struct _ITS_Control_Data
+{
+ UINT cdwControlData;
+ UINT adwControlData[1];
+
+} ITS_Control_Data, *PITS_Control_Data;
+
+typedef enum ECompactionLev {
+ COMPACT_DATA = 0,
+ COMPACT_DATA_AND_PATH
+} ECompactionLev;
+
+[
+ object,
+ uuid(88cc31de-27ab-11d0-9df9-00a0c922e6ec),
+ pointer_default(unique)
+]
+interface IITStorage : IUnknown
+{
+ HRESULT StgCreateDocfile(
+ [in] const WCHAR * pwcsName,
+ [in] DWORD grfMode,
+ [in] DWORD reserved,
+ [out] IStorage ** ppstgOpen);
+
+ HRESULT StgCreateDocfileOnILockBytes(
+ [in] ILockBytes * plkbyt,
+ [in] DWORD grfMode,
+ [in] DWORD reserved,
+ [out] IStorage ** ppstgOpen);
+
+
+ HRESULT StgIsStorageFile(
+ [in] const WCHAR * pwcsName);
+
+ HRESULT StgIsStorageILockBytes(
+ [in] ILockBytes * plkbyt);
+
+ HRESULT StgOpenStorage(
+ [in] const WCHAR * pwcsName,
+ [in] IStorage * pstgPriority,
+ [in] DWORD grfMode,
+ [in] SNB snbExclude,
+ [in] DWORD reserved,
+ [out] IStorage ** ppstgOpen);
+
+ HRESULT StgOpenStorageOnILockBytes(
+ [in] ILockBytes * plkbyt,
+ [in] IStorage * pStgPriority,
+ [in] DWORD grfMode,
+ [in] SNB snbExclude,
+ [in] DWORD reserved,
+ [out] IStorage ** ppstgOpen);
+
+ HRESULT StgSetTimes(
+ [in] WCHAR const * lpszName,
+ [in] FILETIME const * pctime,
+ [in] FILETIME const * patime,
+ [in] FILETIME const * pmtime);
+
+ HRESULT SetControlData(
+ [in] PITS_Control_Data pControlData);
+
+ HRESULT DefaultControlData(
+ [out] PITS_Control_Data * ppControlData);
+
+ HRESULT Compact(
+ [in] const WCHAR * pwcsName,
+ [in] ECompactionLev iLev);
+}
+
+cpp_quote("DEFINE_GUID(CLSID_ITStorage,0x5d02926a,0x212e,0x11d0,0x9d,0xf9,0x00,0xa0,0xc9,0x22,0xe6,0xec);")
+cpp_quote("DEFINE_GUID(CLSID_MSFSStore,0xd54eee56,0xaaab,0x11d0,0x9e,0x1d,0x00,0xa0,0xc9,0x22,0xe6,0xec);")
+cpp_quote("DEFINE_GUID(CLSID_MSITStore,0x9d148290,0xb9c8,0x11d0,0xa4,0xcc,0x00,0x00,0xf8,0x01,0x49,0xf6);")
+cpp_quote("DEFINE_GUID(CLSID_ITSProtocol,0x9d148291,0xb9c8,0x11d0,0xa4,0xcc,0x00,0x00,0xf8,0x01,0x49,0xf6);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h
new file mode 100644
index 00000000..14f1bbcc
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/library.h
@@ -0,0 +1,208 @@
+/*
+ * Definitions for the Wine library
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_LIBRARY_H
+#define __WINE_WINE_LIBRARY_H
+
+#include <stdarg.h>
+#include <sys/types.h>
+
+#include <windef.h>
+#include <winbase.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* configuration */
+
+extern const char *wine_get_build_dir(void);
+extern const char *wine_get_config_dir(void);
+extern const char *wine_get_data_dir(void);
+extern const char *wine_get_server_dir(void);
+extern const char *wine_get_user_name(void);
+extern const char *wine_get_version(void);
+extern const char *wine_get_build_id(void);
+extern void wine_init_argv0_path( const char *argv0 );
+extern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var );
+
+/* dll loading */
+
+typedef void (*load_dll_callback_t)( void *, const char * );
+
+extern void *wine_dlopen( const char *filename, int flag, char *error, size_t errorsize );
+extern void *wine_dlsym( void *handle, const char *symbol, char *error, size_t errorsize );
+extern int wine_dlclose( void *handle, char *error, size_t errorsize );
+extern void wine_dll_set_callback( load_dll_callback_t load );
+extern void *wine_dll_load( const char *filename, char *error, int errorsize, int *file_exists );
+extern void *wine_dll_load_main_exe( const char *name, char *error, int errorsize,
+ int test_only, int *file_exists );
+extern void wine_dll_unload( void *handle );
+extern const char *wine_dll_enum_load_path( unsigned int index );
+extern int wine_dll_get_owner( const char *name, char *buffer, int size, int *file_exists );
+
+extern int __wine_main_argc;
+extern char **__wine_main_argv;
+extern WCHAR **__wine_main_wargv;
+extern void __wine_dll_register( const IMAGE_NT_HEADERS *header, const char *filename );
+extern void wine_init( int argc, char *argv[], char *error, int error_size );
+
+/* portability */
+
+extern void DECLSPEC_NORETURN wine_switch_to_stack( void (*func)(void *), void *arg, void *stack );
+extern int wine_call_on_stack( int (*func)(void *), void *arg, void *stack );
+
+/* memory mappings */
+
+extern void *wine_anon_mmap( void *start, size_t size, int prot, int flags );
+extern void wine_mmap_add_reserved_area( void *addr, size_t size );
+extern void wine_mmap_remove_reserved_area( void *addr, size_t size, int unmap );
+extern int wine_mmap_is_in_reserved_area( void *addr, size_t size );
+extern int wine_mmap_enum_reserved_areas( int (*enum_func)(void *base, size_t size, void *arg),
+ void *arg, int top_down );
+
+#ifdef __i386__
+
+/* LDT management */
+
+extern void wine_ldt_init_locking( void (*lock_func)(void), void (*unlock_func)(void) );
+extern void wine_ldt_get_entry( unsigned short sel, LDT_ENTRY *entry );
+extern int wine_ldt_set_entry( unsigned short sel, const LDT_ENTRY *entry );
+extern int wine_ldt_is_system( unsigned short sel );
+extern void *wine_ldt_get_ptr( unsigned short sel, unsigned long offset );
+extern unsigned short wine_ldt_alloc_entries( int count );
+extern unsigned short wine_ldt_realloc_entries( unsigned short sel, int oldcount, int newcount );
+extern void wine_ldt_free_entries( unsigned short sel, int count );
+extern unsigned short wine_ldt_alloc_fs(void);
+extern void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry );
+extern void wine_ldt_free_fs( unsigned short sel );
+
+/* the local copy of the LDT */
+extern struct __wine_ldt_copy
+{
+ void *base[8192]; /* base address or 0 if entry is free */
+ unsigned long limit[8192]; /* limit in bytes or 0 if entry is free */
+ unsigned char flags[8192]; /* flags (defined below) */
+} wine_ldt_copy;
+
+#define WINE_LDT_FLAGS_DATA 0x13 /* Data segment */
+#define WINE_LDT_FLAGS_STACK 0x17 /* Stack segment */
+#define WINE_LDT_FLAGS_CODE 0x1b /* Code segment */
+#define WINE_LDT_FLAGS_TYPE_MASK 0x1f /* Mask for segment type */
+#define WINE_LDT_FLAGS_32BIT 0x40 /* Segment is 32-bit (code or stack) */
+#define WINE_LDT_FLAGS_ALLOCATED 0x80 /* Segment is allocated (no longer free) */
+
+/* helper functions to manipulate the LDT_ENTRY structure */
+static inline void wine_ldt_set_base( LDT_ENTRY *ent, const void *base )
+{
+ ent->BaseLow = (WORD)(ULONG_PTR)base;
+ ent->HighWord.Bits.BaseMid = (BYTE)((ULONG_PTR)base >> 16);
+ ent->HighWord.Bits.BaseHi = (BYTE)((ULONG_PTR)base >> 24);
+}
+static inline void wine_ldt_set_limit( LDT_ENTRY *ent, unsigned int limit )
+{
+ if ((ent->HighWord.Bits.Granularity = (limit >= 0x100000))) limit >>= 12;
+ ent->LimitLow = (WORD)limit;
+ ent->HighWord.Bits.LimitHi = (limit >> 16);
+}
+static inline void *wine_ldt_get_base( const LDT_ENTRY *ent )
+{
+ return (void *)(ent->BaseLow |
+ (ULONG_PTR)ent->HighWord.Bits.BaseMid << 16 |
+ (ULONG_PTR)ent->HighWord.Bits.BaseHi << 24);
+}
+static inline unsigned int wine_ldt_get_limit( const LDT_ENTRY *ent )
+{
+ unsigned int limit = ent->LimitLow | (ent->HighWord.Bits.LimitHi << 16);
+ if (ent->HighWord.Bits.Granularity) limit = (limit << 12) | 0xfff;
+ return limit;
+}
+static inline void wine_ldt_set_flags( LDT_ENTRY *ent, unsigned char flags )
+{
+ ent->HighWord.Bits.Dpl = 3;
+ ent->HighWord.Bits.Pres = 1;
+ ent->HighWord.Bits.Type = flags;
+ ent->HighWord.Bits.Sys = 0;
+ ent->HighWord.Bits.Reserved_0 = 0;
+ ent->HighWord.Bits.Default_Big = (flags & WINE_LDT_FLAGS_32BIT) != 0;
+}
+static inline unsigned char wine_ldt_get_flags( const LDT_ENTRY *ent )
+{
+ unsigned char ret = ent->HighWord.Bits.Type;
+ if (ent->HighWord.Bits.Default_Big) ret |= WINE_LDT_FLAGS_32BIT;
+ return ret;
+}
+static inline int wine_ldt_is_empty( const LDT_ENTRY *ent )
+{
+ const DWORD *dw = (const DWORD *)ent;
+ return (dw[0] | dw[1]) == 0;
+}
+
+/* segment register access */
+
+# if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+# define __DEFINE_GET_SEG(seg) \
+ static FORCEINLINE unsigned short wine_get_##seg(void) \
+ { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; }
+# define __DEFINE_SET_SEG(seg) \
+ static FORCEINLINE void wine_set_##seg(int val) \
+ { __asm__("movw %w0,%%" #seg : : "r" (val)); }
+# elif defined(_MSC_VER)
+# define __DEFINE_GET_SEG(seg) \
+ static inline unsigned short wine_get_##seg(void) \
+ { unsigned short res; __asm { mov res, seg } return res; }
+# define __DEFINE_SET_SEG(seg) \
+ static inline void wine_set_##seg(unsigned short val) { __asm { mov seg, val } }
+# else /* __GNUC__ || _MSC_VER */
+# define __DEFINE_GET_SEG(seg) extern unsigned short wine_get_##seg(void);
+# define __DEFINE_SET_SEG(seg) extern void wine_set_##seg(unsigned int);
+# endif /* __GNUC__ || _MSC_VER */
+
+__DEFINE_GET_SEG(cs)
+__DEFINE_GET_SEG(ds)
+__DEFINE_GET_SEG(es)
+__DEFINE_GET_SEG(fs)
+__DEFINE_GET_SEG(gs)
+__DEFINE_GET_SEG(ss)
+__DEFINE_SET_SEG(fs)
+__DEFINE_SET_SEG(gs)
+#undef __DEFINE_GET_SEG
+#undef __DEFINE_SET_SEG
+
+#endif /* __i386__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINE_LIBRARY_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h
new file mode 100644
index 00000000..6f7afed5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/list.h
@@ -0,0 +1,243 @@
+/*
+ * Linked lists support
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_SERVER_LIST_H
+#define __WINE_SERVER_LIST_H
+
+#include <stddef.h>
+
+struct list
+{
+ struct list *next;
+ struct list *prev;
+};
+
+/* Define a list like so:
+ *
+ * struct gadget
+ * {
+ * struct list entry; <-- doesn't have to be the first item in the struct
+ * int a, b;
+ * };
+ *
+ * static struct list global_gadgets = LIST_INIT( global_gadgets );
+ *
+ * or
+ *
+ * struct some_global_thing
+ * {
+ * struct list gadgets;
+ * };
+ *
+ * list_init( &some_global_thing->gadgets );
+ *
+ * Manipulate it like this:
+ *
+ * list_add_head( &global_gadgets, &new_gadget->entry );
+ * list_remove( &new_gadget->entry );
+ * list_add_after( &some_random_gadget->entry, &new_gadget->entry );
+ *
+ * And to iterate over it:
+ *
+ * struct gadget *gadget;
+ * LIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
+ * {
+ * ...
+ * }
+ *
+ */
+
+/* add an element after the specified one */
+static inline void list_add_after( struct list *elem, struct list *to_add )
+{
+ to_add->next = elem->next;
+ to_add->prev = elem;
+ elem->next->prev = to_add;
+ elem->next = to_add;
+}
+
+/* add an element before the specified one */
+static inline void list_add_before( struct list *elem, struct list *to_add )
+{
+ to_add->next = elem;
+ to_add->prev = elem->prev;
+ elem->prev->next = to_add;
+ elem->prev = to_add;
+}
+
+/* add element at the head of the list */
+static inline void list_add_head( struct list *list, struct list *elem )
+{
+ list_add_after( list, elem );
+}
+
+/* add element at the tail of the list */
+static inline void list_add_tail( struct list *list, struct list *elem )
+{
+ list_add_before( list, elem );
+}
+
+/* remove an element from its list */
+static inline void list_remove( struct list *elem )
+{
+ elem->next->prev = elem->prev;
+ elem->prev->next = elem->next;
+}
+
+/* get the next element */
+static inline struct list *list_next( const struct list *list, const struct list *elem )
+{
+ struct list *ret = elem->next;
+ if (elem->next == list) ret = NULL;
+ return ret;
+}
+
+/* get the previous element */
+static inline struct list *list_prev( const struct list *list, const struct list *elem )
+{
+ struct list *ret = elem->prev;
+ if (elem->prev == list) ret = NULL;
+ return ret;
+}
+
+/* get the first element */
+static inline struct list *list_head( const struct list *list )
+{
+ return list_next( list, list );
+}
+
+/* get the last element */
+static inline struct list *list_tail( const struct list *list )
+{
+ return list_prev( list, list );
+}
+
+/* check if a list is empty */
+static inline int list_empty( const struct list *list )
+{
+ return list->next == list;
+}
+
+/* initialize a list */
+static inline void list_init( struct list *list )
+{
+ list->next = list->prev = list;
+}
+
+/* count the elements of a list */
+static inline unsigned int list_count( const struct list *list )
+{
+ unsigned count = 0;
+ const struct list *ptr;
+ for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
+ return count;
+}
+
+/* move all elements from src to the tail of dst */
+static inline void list_move_tail( struct list *dst, struct list *src )
+{
+ if (list_empty(src)) return;
+
+ dst->prev->next = src->next;
+ src->next->prev = dst->prev;
+ dst->prev = src->prev;
+ src->prev->next = dst;
+ list_init(src);
+}
+
+/* move all elements from src to the head of dst */
+static inline void list_move_head( struct list *dst, struct list *src )
+{
+ if (list_empty(src)) return;
+
+ dst->next->prev = src->prev;
+ src->prev->next = dst->next;
+ dst->next = src->next;
+ src->next->prev = dst;
+ list_init(src);
+}
+
+/* iterate through the list */
+#define LIST_FOR_EACH(cursor,list) \
+ for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
+
+/* iterate through the list, with safety against removal */
+#define LIST_FOR_EACH_SAFE(cursor, cursor2, list) \
+ for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
+ (cursor) != (list); \
+ (cursor) = (cursor2), (cursor2) = (cursor)->next)
+
+/* iterate through the list using a list entry */
+#define LIST_FOR_EACH_ENTRY(elem, list, type, field) \
+ for ((elem) = LIST_ENTRY((list)->next, type, field); \
+ &(elem)->field != (list); \
+ (elem) = LIST_ENTRY((elem)->field.next, type, field))
+
+/* iterate through the list using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
+ for ((cursor) = LIST_ENTRY((list)->next, type, field), \
+ (cursor2) = LIST_ENTRY((cursor)->field.next, type, field); \
+ &(cursor)->field != (list); \
+ (cursor) = (cursor2), \
+ (cursor2) = LIST_ENTRY((cursor)->field.next, type, field))
+
+/* iterate through the list in reverse order */
+#define LIST_FOR_EACH_REV(cursor,list) \
+ for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
+
+/* iterate through the list in reverse order, with safety against removal */
+#define LIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
+ for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
+ (cursor) != (list); \
+ (cursor) = (cursor2), (cursor2) = (cursor)->prev)
+
+/* iterate through the list in reverse order using a list entry */
+#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
+ for ((elem) = LIST_ENTRY((list)->prev, type, field); \
+ &(elem)->field != (list); \
+ (elem) = LIST_ENTRY((elem)->field.prev, type, field))
+
+/* iterate through the list in reverse order using a list entry, with safety against removal */
+#define LIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
+ for ((cursor) = LIST_ENTRY((list)->prev, type, field), \
+ (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field); \
+ &(cursor)->field != (list); \
+ (cursor) = (cursor2), \
+ (cursor2) = LIST_ENTRY((cursor)->field.prev, type, field))
+
+/* macros for statically initialized lists */
+#undef LIST_INIT
+#define LIST_INIT(list) { &(list), &(list) }
+
+/* get pointer to object containing list element */
+#undef LIST_ENTRY
+#define LIST_ENTRY(elem, type, field) \
+ ((type *)((char *)(elem) - offsetof(type, field)))
+
+#endif /* __WINE_SERVER_LIST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h
new file mode 100644
index 00000000..abbe7cd7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mmsystem16.h
@@ -0,0 +1,822 @@
+/*
+ * MMSYSTEM - Multimedia Wine Extension ... :-)
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_MMSYSTEM16_H
+#define __WINE_WINE_MMSYSTEM16_H
+
+#include <windef.h>
+#include <wine/windef16.h>
+#include <mmddk.h>
+
+#include <pshpack1.h>
+
+typedef UINT16 MMVERSION16;
+typedef UINT16 MCIDEVICEID16;
+typedef UINT16 MMRESULT16;
+
+typedef struct {
+ UINT16 wType; /* indicates the contents of the union */
+ union {
+ DWORD ms; /* milliseconds */
+ DWORD sample; /* samples */
+ DWORD cb; /* byte count */
+ struct { /* SMPTE */
+ BYTE hour; /* hours */
+ BYTE min; /* minutes */
+ BYTE sec; /* seconds */
+ BYTE frame; /* frames */
+ BYTE fps; /* frames per second */
+ BYTE dummy; /* pad */
+ } smpte;
+ struct { /* MIDI */
+ DWORD songptrpos; /* song pointer position */
+ } midi;
+ } u;
+} MMTIME16, *LPMMTIME16;
+
+typedef struct {
+ DWORD dwDCISize;
+ SEGPTR lpszDCISectionName;
+ SEGPTR lpszDCIAliasName;
+} DRVCONFIGINFO16, *LPDRVCONFIGINFO16;
+
+/* GetDriverInfo16 references this structure, so this a struct defined
+ * in the Win16 API.
+ * GetDriverInfo has been deprecated in Win32.
+ */
+typedef struct
+{
+ UINT16 length;
+ HDRVR16 hDriver;
+ HINSTANCE16 hModule;
+ CHAR szAliasName[128];
+} DRIVERINFOSTRUCT16, *LPDRIVERINFOSTRUCT16;
+
+LRESULT WINAPI DefDriverProc16(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
+HDRVR16 WINAPI OpenDriver16(LPCSTR,LPCSTR,LPARAM);
+LRESULT WINAPI CloseDriver16(HDRVR16,LPARAM,LPARAM);
+LRESULT WINAPI SendDriverMessage16(HDRVR16,UINT16,LPARAM,LPARAM);
+HMODULE16 WINAPI GetDriverModuleHandle16(HDRVR16);
+HDRVR16 WINAPI GetNextDriver16(HDRVR16,DWORD);
+BOOL16 WINAPI GetDriverInfo16(HDRVR16,DRIVERINFOSTRUCT16 *);
+
+typedef void (CALLBACK *LPDRVCALLBACK16) (HDRVR16,UINT16,DWORD,DWORD,DWORD);
+typedef LPDRVCALLBACK16 LPWAVECALLBACK16;
+
+UINT16 WINAPI mmsystemGetVersion16(void);
+BOOL16 WINAPI sndPlaySound16(LPCSTR,UINT16);
+
+typedef struct {
+ WORD wMid; /* manufacturer ID */
+ WORD wPid; /* product ID */
+ MMVERSION16 vDriverVersion; /* version of the driver */
+ CHAR szPname[MAXPNAMELEN]; /* product name (0 terminated string) */
+ DWORD dwFormats; /* formats supported */
+ WORD wChannels; /* number of sources supported */
+ DWORD dwSupport; /* functionality supported by driver */
+} WAVEOUTCAPS16, *LPWAVEOUTCAPS16;
+
+typedef struct {
+ WORD wMid; /* manufacturer ID */
+ WORD wPid; /* product ID */
+ MMVERSION16 vDriverVersion; /* version of the driver */
+ CHAR szPname[MAXPNAMELEN]; /* product name (0 terminated string) */
+ DWORD dwFormats; /* formats supported */
+ WORD wChannels; /* number of channels supported */
+} WAVEINCAPS16, *LPWAVEINCAPS16;
+
+typedef struct {
+ HWAVE16 hWave;
+ LPWAVEFORMATEX lpFormat;
+ DWORD dwCallback;
+ DWORD dwInstance;
+ UINT16 uMappedDeviceID;
+ DWORD dnDevNode;
+} WAVEOPENDESC16, *LPWAVEOPENDESC16;
+
+UINT16 WINAPI waveOutGetNumDevs16(void);
+UINT16 WINAPI waveOutGetDevCaps16(UINT16,LPWAVEOUTCAPS16,UINT16);
+UINT16 WINAPI waveOutGetVolume16(UINT16,DWORD*);
+UINT16 WINAPI waveOutSetVolume16(UINT16,DWORD);
+UINT16 WINAPI waveOutGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16 WINAPI waveOutOpen16(HWAVEOUT16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD);
+UINT16 WINAPI waveOutClose16(HWAVEOUT16);
+UINT16 WINAPI waveOutPrepareHeader16(HWAVEOUT16,SEGPTR,UINT16);
+UINT16 WINAPI waveOutUnprepareHeader16(HWAVEOUT16,SEGPTR,UINT16);
+UINT16 WINAPI waveOutWrite16(HWAVEOUT16,SEGPTR,UINT16);
+UINT16 WINAPI waveOutPause16(HWAVEOUT16);
+UINT16 WINAPI waveOutRestart16(HWAVEOUT16);
+UINT16 WINAPI waveOutReset16(HWAVEOUT16);
+UINT16 WINAPI waveOutBreakLoop16(HWAVEOUT16);
+UINT16 WINAPI waveOutGetPosition16(HWAVEOUT16,LPMMTIME16,UINT16);
+UINT16 WINAPI waveOutGetPitch16(HWAVEOUT16,DWORD*);
+UINT16 WINAPI waveOutSetPitch16(HWAVEOUT16,DWORD);
+UINT16 WINAPI waveOutGetPlaybackRate16(HWAVEOUT16,DWORD*);
+UINT16 WINAPI waveOutSetPlaybackRate16(HWAVEOUT16,DWORD);
+UINT16 WINAPI waveOutGetID16(HWAVEOUT16,UINT16*);
+DWORD WINAPI waveOutMessage16(HWAVEOUT16,UINT16,DWORD,DWORD);
+UINT16 WINAPI waveInGetNumDevs16(void);
+UINT16 WINAPI waveInGetDevCaps16(UINT16,LPWAVEINCAPS16,UINT16);
+UINT16 WINAPI waveInGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16 WINAPI waveInOpen16(HWAVEIN16*,UINT16,const WAVEFORMATEX *,DWORD,DWORD,DWORD);
+UINT16 WINAPI waveInClose16(HWAVEIN16);
+UINT16 WINAPI waveInPrepareHeader16(HWAVEIN16,SEGPTR,UINT16);
+UINT16 WINAPI waveInUnprepareHeader16(HWAVEIN16,SEGPTR,UINT16);
+UINT16 WINAPI waveInAddBuffer16(HWAVEIN16,SEGPTR,UINT16);
+UINT16 WINAPI waveInStart16(HWAVEIN16);
+UINT16 WINAPI waveInStop16(HWAVEIN16);
+UINT16 WINAPI waveInReset16(HWAVEIN16);
+UINT16 WINAPI waveInGetPosition16(HWAVEIN16,LPMMTIME16,UINT16);
+UINT16 WINAPI waveInGetID16(HWAVEIN16,UINT16*);
+DWORD WINAPI waveInMessage16(HWAVEIN16,UINT16,DWORD,DWORD);
+
+typedef LPDRVCALLBACK16 LPMIDICALLBACK16;
+
+typedef struct {
+ WORD wMid; /* manufacturer ID */
+ WORD wPid; /* product ID */
+ MMVERSION16 vDriverVersion; /* version of the driver */
+ CHAR szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
+ WORD wTechnology; /* type of device */
+ WORD wVoices; /* # of voices (internal synth only) */
+ WORD wNotes; /* max # of notes (internal synth only) */
+ WORD wChannelMask; /* channels used (internal synth only) */
+ DWORD dwSupport; /* functionality supported by driver */
+} MIDIOUTCAPS16, *LPMIDIOUTCAPS16;
+
+typedef struct {
+ WORD wMid; /* manufacturer ID */
+ WORD wPid; /* product ID */
+ MMVERSION16 vDriverVersion; /* version of the driver */
+ CHAR szPname[MAXPNAMELEN];/* product name (NULL terminated string) */
+ DWORD dwSupport; /* included in win95 and higher */
+} MIDIINCAPS16, *LPMIDIINCAPS16;
+
+typedef struct midihdr16_tag {
+ LPSTR lpData; /* pointer to locked data block */
+ DWORD dwBufferLength; /* length of data in data block */
+ DWORD dwBytesRecorded;/* used for input only */
+ DWORD dwUser; /* for client's use */
+ DWORD dwFlags; /* assorted flags (see defines) */
+ struct midihdr16_tag *lpNext; /* reserved for driver */
+ DWORD reserved; /* reserved for driver */
+} MIDIHDR16, *LPMIDIHDR16;
+
+typedef struct {
+ HMIDI16 hMidi;
+ DWORD dwCallback;
+ DWORD dwInstance;
+ UINT16 reserved;
+ DWORD dnDevNode;
+ DWORD cIds;
+ MIDIOPENSTRMID rgIds;
+} MIDIOPENDESC16, *LPMIDIOPENDESC16;
+
+UINT16 WINAPI midiOutGetNumDevs16(void);
+UINT16 WINAPI midiOutGetDevCaps16(UINT16,LPMIDIOUTCAPS16,UINT16);
+UINT16 WINAPI midiOutGetVolume16(UINT16,DWORD*);
+UINT16 WINAPI midiOutSetVolume16(UINT16,DWORD);
+UINT16 WINAPI midiOutGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16 WINAPI midiOutOpen16(HMIDIOUT16*,UINT16,DWORD,DWORD,DWORD);
+UINT16 WINAPI midiOutClose16(HMIDIOUT16);
+UINT16 WINAPI midiOutPrepareHeader16(HMIDIOUT16,SEGPTR,UINT16);
+UINT16 WINAPI midiOutUnprepareHeader16(HMIDIOUT16,SEGPTR,UINT16);
+UINT16 WINAPI midiOutShortMsg16(HMIDIOUT16,DWORD);
+UINT16 WINAPI midiOutLongMsg16(HMIDIOUT16,SEGPTR,UINT16);
+UINT16 WINAPI midiOutReset16(HMIDIOUT16);
+UINT16 WINAPI midiOutCachePatches16(HMIDIOUT16,UINT16,WORD*,UINT16);
+UINT16 WINAPI midiOutCacheDrumPatches16(HMIDIOUT16,UINT16,WORD*,UINT16);
+UINT16 WINAPI midiOutGetID16(HMIDIOUT16,UINT16*);
+DWORD WINAPI midiOutMessage16(HMIDIOUT16,UINT16,DWORD,DWORD);
+UINT16 WINAPI midiInGetNumDevs16(void);
+UINT16 WINAPI midiInGetDevCaps16(UINT16,LPMIDIINCAPS16,UINT16);
+UINT16 WINAPI midiInGetErrorText16(UINT16,LPSTR,UINT16);
+UINT16 WINAPI midiInOpen16(HMIDIIN16*,UINT16,DWORD,DWORD,DWORD);
+UINT16 WINAPI midiInClose16(HMIDIIN16);
+UINT16 WINAPI midiInPrepareHeader16(HMIDIIN16,SEGPTR,UINT16);
+UINT16 WINAPI midiInUnprepareHeader16(HMIDIIN16,SEGPTR,UINT16);
+UINT16 WINAPI midiInAddBuffer16(HMIDIIN16,SEGPTR,UINT16);
+UINT16 WINAPI midiInStart16(HMIDIIN16);
+UINT16 WINAPI midiInStop16(HMIDIIN16);
+UINT16 WINAPI midiInReset16(HMIDIIN16);
+UINT16 WINAPI midiInGetID16(HMIDIIN16,UINT16*);
+DWORD WINAPI midiInMessage16(HMIDIIN16,UINT16,DWORD,DWORD);
+MMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hms);
+MMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16*,LPUINT16,DWORD,DWORD,DWORD,DWORD);
+MMRESULT16 WINAPI midiStreamOut16(HMIDISTRM16,LPMIDIHDR16,UINT16);
+MMRESULT16 WINAPI midiStreamPause16(HMIDISTRM16);
+MMRESULT16 WINAPI midiStreamPosition16(HMIDISTRM16,LPMMTIME16,UINT16);
+MMRESULT16 WINAPI midiStreamProperty16(HMIDISTRM16,LPBYTE,DWORD);
+MMRESULT16 WINAPI midiStreamRestart16(HMIDISTRM16);
+MMRESULT16 WINAPI midiStreamStop16(HMIDISTRM16);
+
+typedef struct {
+ WORD wMid; /* manufacturer ID */
+ WORD wPid; /* product ID */
+ MMVERSION16 vDriverVersion; /* version of the driver */
+ CHAR szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */
+ WORD wTechnology; /* type of device */
+ DWORD dwSupport; /* functionality supported by driver */
+} AUXCAPS16, *LPAUXCAPS16;
+
+typedef void (CALLBACK *LPTIMECALLBACK16)(UINT16,UINT16,DWORD,DWORD,DWORD);
+
+typedef struct {
+ UINT16 wPeriodMin; /* minimum period supported */
+ UINT16 wPeriodMax; /* maximum period supported */
+} TIMECAPS16,*LPTIMECAPS16;
+
+typedef struct {
+ WORD wMid; /* manufacturer ID */
+ WORD wPid; /* product ID */
+ char szPname[MAXPNAMELEN]; /* product name (NULL terminated string) */
+ UINT16 wXmin; /* minimum x position value */
+ UINT16 wXmax; /* maximum x position value */
+ UINT16 wYmin; /* minimum y position value */
+ UINT16 wYmax; /* maximum y position value */
+ UINT16 wZmin; /* minimum z position value */
+ UINT16 wZmax; /* maximum z position value */
+ UINT16 wNumButtons; /* number of buttons */
+ UINT16 wPeriodMin; /* minimum message period when captured */
+ UINT16 wPeriodMax; /* maximum message period when captured */
+ /* win95,nt4 additions: */
+ UINT16 wRmin; /* minimum r position value */
+ UINT16 wRmax; /* maximum r position value */
+ UINT16 wUmin; /* minimum u (5th axis) position value */
+ UINT16 wUmax; /* maximum u (5th axis) position value */
+ UINT16 wVmin; /* minimum v (6th axis) position value */
+ UINT16 wVmax; /* maximum v (6th axis) position value */
+ UINT16 wCaps; /* joystick capabilities */
+ UINT16 wMaxAxes; /* maximum number of axes supported */
+ UINT16 wNumAxes; /* number of axes in use */
+ UINT16 wMaxButtons; /* maximum number of buttons supported */
+ CHAR szRegKey[MAXPNAMELEN]; /* registry key */
+ CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; /* OEM VxD in use */
+} JOYCAPS16, *LPJOYCAPS16;
+
+typedef struct {
+ UINT16 wXpos; /* x position */
+ UINT16 wYpos; /* y position */
+ UINT16 wZpos; /* z position */
+ UINT16 wButtons; /* button states */
+} JOYINFO16, *LPJOYINFO16;
+
+typedef struct {
+ WORD wMid; /* manufacturer id */
+ WORD wPid; /* product id */
+ MMVERSION16 vDriverVersion; /* version of the driver */
+ CHAR szPname[MAXPNAMELEN]; /* product name */
+ DWORD fdwSupport; /* misc. support bits */
+ DWORD cDestinations; /* count of destinations */
+} MIXERCAPS16,*LPMIXERCAPS16;
+
+typedef struct tMIXEROPENDESC16
+{
+ HMIXEROBJ16 hmx;
+ LPVOID pReserved0;
+ DWORD dwCallback;
+ DWORD dwInstance;
+} MIXEROPENDESC16, *LPMIXEROPENDESC16;
+
+typedef struct {
+ DWORD cbStruct; /* size of MIXERLINE structure */
+ DWORD dwDestination; /* zero based destination index */
+ DWORD dwSource; /* zero based source index (if source) */
+ DWORD dwLineID; /* unique line id for mixer device */
+ DWORD fdwLine; /* state/information about line */
+ DWORD dwUser; /* driver specific information */
+ DWORD dwComponentType; /* component type line connects to */
+ DWORD cChannels; /* number of channels line supports */
+ DWORD cConnections; /* number of connections [possible] */
+ DWORD cControls; /* number of controls at this line */
+ CHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+ struct {
+ DWORD dwType; /* MIXERLINE_TARGETTYPE_xxxx */
+ DWORD dwDeviceID; /* target device ID of device type */
+ WORD wMid; /* of target device */
+ WORD wPid; /* " */
+ MMVERSION16 vDriverVersion; /* " */
+ CHAR szPname[MAXPNAMELEN]; /* " */
+ } Target;
+} MIXERLINE16, *LPMIXERLINE16;
+
+typedef struct {
+ DWORD cbStruct; /* size in bytes of MIXERCONTROL */
+ DWORD dwControlID; /* unique control id for mixer device */
+ DWORD dwControlType; /* MIXERCONTROL_CONTROLTYPE_xxx */
+ DWORD fdwControl; /* MIXERCONTROL_CONTROLF_xxx */
+ DWORD cMultipleItems; /* if MIXERCONTROL_CONTROLF_MULTIPLE set */
+ CHAR szShortName[MIXER_SHORT_NAME_CHARS];
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+ union {
+ struct {
+ LONG lMinimum; /* signed minimum for this control */
+ LONG lMaximum; /* signed maximum for this control */
+ } s;
+ struct {
+ DWORD dwMinimum; /* unsigned minimum for this control */
+ DWORD dwMaximum; /* unsigned maximum for this control */
+ } s1;
+ DWORD dwReserved[6];
+ } Bounds;
+ union {
+ DWORD cSteps; /* # of steps between min & max */
+ DWORD cbCustomData; /* size in bytes of custom data */
+ DWORD dwReserved[6]; /* !!! needed? we have cbStruct.... */
+ } Metrics;
+} MIXERCONTROL16, *LPMIXERCONTROL16;
+
+typedef struct {
+ DWORD cbStruct; /* size in bytes of MIXERLINECONTROLS */
+ DWORD dwLineID; /* line id (from MIXERLINE.dwLineID) */
+ union {
+ DWORD dwControlID; /* MIXER_GETLINECONTROLSF_ONEBYID */
+ DWORD dwControlType; /* MIXER_GETLINECONTROLSF_ONEBYTYPE */
+ } u;
+ DWORD cControls; /* count of controls pmxctrl points to */
+ DWORD cbmxctrl; /* size in bytes of _one_ MIXERCONTROL */
+ SEGPTR pamxctrl; /* pointer to first MIXERCONTROL array */
+} MIXERLINECONTROLS16, *LPMIXERLINECONTROLS16;
+
+typedef struct {
+ DWORD cbStruct; /* size in bytes of MIXERCONTROLDETAILS */
+ DWORD dwControlID; /* control id to get/set details on */
+ DWORD cChannels; /* number of channels in paDetails array */
+ union {
+ HWND16 hwndOwner; /* for MIXER_SETCONTROLDETAILSF_CUSTOM */
+ DWORD cMultipleItems; /* if _MULTIPLE, the number of items per channel */
+ } u;
+ DWORD cbDetails; /* size of _one_ details_XX struct */
+ LPVOID paDetails; /* pointer to array of details_XX structs */
+} MIXERCONTROLDETAILS16,*LPMIXERCONTROLDETAILS16;
+
+typedef struct {
+ DWORD dwParam1;
+ DWORD dwParam2;
+ CHAR szName[MIXER_LONG_NAME_CHARS];
+} MIXERCONTROLDETAILS_LISTTEXT16,*LPMIXERCONTROLDETAILS_LISTTEXT16;
+
+typedef LRESULT (CALLBACK *LPMMIOPROC16)(LPSTR lpmmioinfo,UINT16 uMessage,
+ LPARAM lParam1,LPARAM lParam2);
+
+typedef struct {
+ DWORD dwFlags; /* general status flags */
+ FOURCC fccIOProc; /* pointer to I/O procedure */
+ LPMMIOPROC16 pIOProc; /* pointer to I/O procedure */
+ UINT16 wErrorRet; /* place for error to be returned */
+ HTASK16 hTask; /* alternate local task */
+ /* fields maintained by MMIO functions during buffered I/O */
+ LONG cchBuffer; /* size of I/O buffer (or 0L) */
+ HPSTR pchBuffer; /* start of I/O buffer (or NULL) */
+ HPSTR pchNext; /* pointer to next byte to read/write */
+ HPSTR pchEndRead; /* pointer to last valid byte to read */
+ HPSTR pchEndWrite; /* pointer to last byte to write */
+ LONG lBufOffset; /* disk offset of start of buffer */
+ /* fields maintained by I/O procedure */
+ LONG lDiskOffset; /* disk offset of next read or write */
+ DWORD adwInfo[3]; /* data specific to type of MMIOPROC */
+ /* other fields maintained by MMIO */
+ DWORD dwReserved1; /* reserved for MMIO use */
+ DWORD dwReserved2; /* reserved for MMIO use */
+ HMMIO16 hmmio; /* handle to open file */
+} MMIOINFO16, *LPMMIOINFO16;
+
+typedef UINT16 (CALLBACK *YIELDPROC16)(UINT16,DWORD);
+
+UINT16 WINAPI auxGetNumDevs16(void);
+UINT16 WINAPI auxGetDevCaps16 (UINT16,LPAUXCAPS16,UINT16);
+UINT16 WINAPI auxSetVolume16(UINT16,DWORD);
+UINT16 WINAPI auxGetVolume16(UINT16,LPDWORD);
+DWORD WINAPI auxOutMessage16(UINT16,UINT16,DWORD,DWORD);
+MMRESULT16 WINAPI timeGetSystemTime16(LPMMTIME16,UINT16);
+MMRESULT16 WINAPI timeSetEvent16(UINT16,UINT16,LPTIMECALLBACK16,DWORD,UINT16);
+MMRESULT16 WINAPI timeKillEvent16(UINT16);
+MMRESULT16 WINAPI timeGetDevCaps16(LPTIMECAPS16,UINT16);
+MMRESULT16 WINAPI timeBeginPeriod16(UINT16);
+MMRESULT16 WINAPI timeEndPeriod16(UINT16);
+MMRESULT16 WINAPI joyGetDevCaps16 (UINT16,LPJOYCAPS16,UINT16);
+UINT16 WINAPI joyGetNumDevs16(void);
+MMRESULT16 WINAPI joyGetPos16(UINT16,LPJOYINFO16);
+MMRESULT16 WINAPI joyGetPosEx16(UINT16,LPJOYINFOEX);
+MMRESULT16 WINAPI joyGetThreshold16(UINT16,UINT16*);
+MMRESULT16 WINAPI joyReleaseCapture16(UINT16);
+MMRESULT16 WINAPI joySetCapture16(HWND16,UINT16,UINT16,BOOL16);
+MMRESULT16 WINAPI joySetThreshold16(UINT16,UINT16);
+UINT16 WINAPI mixerGetNumDevs16(void);
+UINT16 WINAPI mixerOpen16(LPHMIXER16,UINT16,DWORD,DWORD,DWORD);
+UINT16 WINAPI mixerClose16(HMIXER16);
+DWORD WINAPI mixerMessage16(HMIXER16,UINT16,DWORD,DWORD);
+UINT16 WINAPI mixerGetDevCaps16(UINT16,LPMIXERCAPS16,UINT16);
+UINT16 WINAPI mixerGetLineInfo16(HMIXEROBJ16,LPMIXERLINE16,DWORD);
+UINT16 WINAPI mixerGetID16(HMIXEROBJ16,LPUINT16,DWORD);
+UINT16 WINAPI mixerGetLineControls16(HMIXEROBJ16,LPMIXERLINECONTROLS16,DWORD);
+UINT16 WINAPI mixerGetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);
+UINT16 WINAPI mixerSetControlDetails16(HMIXEROBJ16,LPMIXERCONTROLDETAILS16,DWORD);
+LPMMIOPROC16 WINAPI mmioInstallIOProc16(FOURCC,LPMMIOPROC16,DWORD);
+FOURCC WINAPI mmioStringToFOURCC16(LPCSTR,UINT16);
+HMMIO16 WINAPI mmioOpen16(LPSTR,MMIOINFO16*,DWORD);
+UINT16 WINAPI mmioRename16(LPCSTR,LPCSTR,MMIOINFO16*,DWORD);
+MMRESULT16 WINAPI mmioClose16(HMMIO16,UINT16);
+LONG WINAPI mmioRead16(HMMIO16,HPSTR,LONG);
+LONG WINAPI mmioWrite16(HMMIO16,HPCSTR,LONG);
+LONG WINAPI mmioSeek16(HMMIO16,LONG,INT16);
+MMRESULT16 WINAPI mmioGetInfo16(HMMIO16,MMIOINFO16*,UINT16);
+MMRESULT16 WINAPI mmioSetInfo16(HMMIO16,const MMIOINFO16*,UINT16);
+UINT16 WINAPI mmioSetBuffer16(HMMIO16,SEGPTR,LONG,UINT16);
+UINT16 WINAPI mmioFlush16(HMMIO16,UINT16);
+UINT16 WINAPI mmioAdvance16(HMMIO16,MMIOINFO16*,UINT16);
+LRESULT WINAPI mmioSendMessage16(HMMIO16,UINT16,LPARAM,LPARAM);
+UINT16 WINAPI mmioDescend16(HMMIO16,MMCKINFO*,const MMCKINFO*,UINT16);
+UINT16 WINAPI mmioAscend16(HMMIO16,MMCKINFO*,UINT16);
+UINT16 WINAPI mmioCreateChunk16(HMMIO16,MMCKINFO*,UINT16);
+DWORD WINAPI mciSendCommand16(UINT16,UINT16,DWORD,DWORD);
+DWORD WINAPI mciSendString16(LPCSTR,LPSTR,UINT16,HWND16);
+UINT16 WINAPI mciGetDeviceID16(LPCSTR);
+UINT16 WINAPI mciGetDeviceIDFromElementID16(DWORD,LPCSTR);
+BOOL16 WINAPI mciGetErrorString16 (DWORD,LPSTR,UINT16);
+BOOL16 WINAPI mciSetYieldProc16(UINT16,YIELDPROC16,DWORD);
+HTASK16 WINAPI mciGetCreatorTask16(UINT16);
+YIELDPROC16 WINAPI mciGetYieldProc16(UINT16,DWORD*);
+DWORD WINAPI mciGetDriverData16(UINT16 uDeviceID);
+BOOL16 WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD dwData);
+UINT16 WINAPI mciDriverYield16(UINT16 uDeviceID);
+BOOL16 WINAPI mciDriverNotify16(HWND16 hwndCallback, UINT16 uDeviceID,
+ UINT16 uStatus);
+UINT16 WINAPI mciLoadCommandResource16(HINSTANCE16 hInstance,
+ LPCSTR lpResName, UINT16 uType);
+BOOL16 WINAPI mciFreeCommandResource16(UINT16 uTable);
+
+HINSTANCE16 WINAPI mmTaskCreate16(SEGPTR spProc, HINSTANCE16 *lphMmTask, DWORD dwPmt);
+void WINAPI mmTaskBlock16(HINSTANCE16 hInst);
+LRESULT WINAPI mmTaskSignal16(HTASK16 ht);
+void WINAPI mmTaskYield16(void);
+LRESULT WINAPI mmThreadCreate16(FARPROC16 fpThreadAddr, LPHANDLE16 lpHndl,
+ DWORD dwPmt, DWORD dwFlags);
+void WINAPI mmThreadSignal16(HANDLE16 hndl);
+void WINAPI mmThreadBlock16(HANDLE16 hndl);
+HANDLE16 WINAPI mmThreadGetTask16(HANDLE16 hndl);
+BOOL16 WINAPI mmThreadIsValid16(HANDLE16 hndl);
+BOOL16 WINAPI mmThreadIsCurrent16(HANDLE16 hndl);
+
+BOOL16 WINAPI DriverCallback16(DWORD dwCallBack, UINT16 uFlags, HANDLE16 hDev,
+ WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);
+
+typedef struct {
+ DWORD dwCallback;
+ WORD wDeviceID;
+ WORD wReserved0;
+ SEGPTR lpstrDeviceType;
+ SEGPTR lpstrElementName;
+ SEGPTR lpstrAlias;
+} MCI_OPEN_PARMS16, *LPMCI_OPEN_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrReturn;
+ DWORD dwRetSize;
+} MCI_INFO_PARMS16, *LPMCI_INFO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwNumber;
+ WORD wDeviceType;
+ WORD wReserved0;
+} MCI_SYSINFO_PARMS16, *LPMCI_SYSINFO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ UINT16 nVirtKey;
+ WORD wReserved0;
+ HWND16 hwndBreak;
+ WORD wReserved1;
+} MCI_BREAK_PARMS16, *LPMCI_BREAK_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpfilename;
+} MCI_LOAD_PARMS16, *LPMCI_LOAD_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrSoundName;
+} MCI_SOUND_PARMS16, *LPMCI_SOUND_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrCommand;
+} MCI_VD_ESCAPE_PARMS16, *LPMCI_VD_ESCAPE_PARMS16;
+
+typedef struct {
+ UINT16 wDeviceID; /* device ID */
+ SEGPTR lpstrParams; /* parameter string for entry in SYSTEM.INI */
+ UINT16 wCustomCommandTable; /* custom command table (0xFFFF if none)
+ * filled in by the driver */
+ UINT16 wType; /* driver type (filled in by the driver) */
+} MCI_OPEN_DRIVER_PARMS16, *LPMCI_OPEN_DRIVER_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ MCIDEVICEID16 wDeviceID;
+ WORD wReserved0;
+ SEGPTR lpstrDeviceType;
+ SEGPTR lpstrElementName;
+ SEGPTR lpstrAlias;
+ DWORD dwBufferSeconds;
+} MCI_WAVE_OPEN_PARMS16, *LPMCI_WAVE_OPEN_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ UINT16 wInput;
+ UINT16 wReserved0;
+ UINT16 wOutput;
+ UINT16 wReserved1;
+ UINT16 wFormatTag;
+ UINT16 wReserved2;
+ UINT16 nChannels;
+ UINT16 wReserved3;
+ DWORD nSamplesPerSec;
+ DWORD nAvgBytesPerSec;
+ UINT16 nBlockAlign;
+ UINT16 wReserved4;
+ UINT16 wBitsPerSample;
+ UINT16 wReserved5;
+} MCI_WAVE_SET_PARMS16, * LPMCI_WAVE_SET_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ UINT16 wDeviceID;
+ UINT16 wReserved0;
+ SEGPTR lpstrDeviceType;
+ SEGPTR lpstrElementName;
+ SEGPTR lpstrAlias;
+ DWORD dwStyle;
+ HWND16 hWndParent;
+ UINT16 wReserved1;
+} MCI_ANIM_OPEN_PARMS16, *LPMCI_ANIM_OPEN_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ HWND16 hWnd;
+ WORD wReserved1;
+ WORD nCmdShow;
+ WORD wReserved2;
+ SEGPTR lpstrText;
+} MCI_ANIM_WINDOW_PARMS16, *LPMCI_ANIM_WINDOW_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+#ifdef MCI_USE_OFFEXT
+ POINT16 ptOffset;
+ POINT16 ptExtent;
+#else /* ifdef MCI_USE_OFFEXT */
+ RECT16 rc;
+#endif /* ifdef MCI_USE_OFFEXT */
+} MCI_ANIM_RECT_PARMS16, *LPMCI_ANIM_RECT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ RECT16 rc;
+ HDC16 hDC;
+} MCI_ANIM_UPDATE_PARMS16, *LPMCI_ANIM_UPDATE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ MCIDEVICEID16 wDeviceID;
+ WORD wReserved0;
+ SEGPTR lpstrDeviceType;
+ SEGPTR lpstrElementName;
+ SEGPTR lpstrAlias;
+ DWORD dwStyle;
+ HWND16 hWndParent;
+ WORD wReserved1;
+} MCI_OVLY_OPEN_PARMS16, *LPMCI_OVLY_OPEN_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ HWND16 hWnd;
+ WORD wReserved1;
+ UINT16 nCmdShow;
+ WORD wReserved2;
+ SEGPTR lpstrText;
+} MCI_OVLY_WINDOW_PARMS16, *LPMCI_OVLY_WINDOW_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+#ifdef MCI_USE_OFFEXT
+ POINT16 ptOffset;
+ POINT16 ptExtent;
+#else /* ifdef MCI_USE_OFFEXT */
+ RECT16 rc;
+#endif /* ifdef MCI_USE_OFFEXT */
+} MCI_OVLY_RECT_PARMS16, *LPMCI_OVLY_RECT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpfilename;
+ RECT16 rc;
+} MCI_OVLY_SAVE_PARMS16, *LPMCI_OVLY_SAVE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpfilename;
+ RECT16 rc;
+} MCI_OVLY_LOAD_PARMS16, *LPMCI_OVLY_LOAD_PARMS16;
+
+/* from digitalv / 16 bit */
+typedef struct {
+ DWORD dwCallback;
+ RECT16 rc;
+} MCI_DGV_RECT_PARMS16, *LPMCI_DGV_RECT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrFileName;
+ RECT16 rc;
+} MCI_DGV_CAPTURE_PARMS16, *LPMCI_DGV_CAPTURE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_COPY_PARMS16, *LPMCI_DGV_COPY_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_CUT_PARMS16, * LPMCI_DGV_CUT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_DELETE_PARMS16, * LPMCI_DGV_DELETE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_FREEZE_PARMS16, * LPMCI_DGV_FREEZE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwItem;
+} MCI_DGV_INFO_PARMS16, * LPMCI_DGV_INFO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrReturn;
+ DWORD dwLength;
+ DWORD dwNumber;
+ DWORD dwItem;
+ SEGPTR lpstrAlgorithm;
+} MCI_DGV_LIST_PARMS16, *LPMCI_DGV_LIST_PARMS16;
+
+typedef MCI_LOAD_PARMS16 MCI_DGV_LOAD_PARMS16 , * LPMCI_DGV_LOAD_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ UINT16 wDeviceID;
+ UINT16 wReserved0;
+ SEGPTR lpstrDeviceType;
+ SEGPTR lpstrElementName;
+ SEGPTR lpstrAlias;
+ DWORD dwStyle;
+ HWND16 hWndParent;
+ UINT16 wReserved1;
+} MCI_DGV_OPEN_PARMS16, *LPMCI_DGV_OPEN_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_PASTE_PARMS16, * LPMCI_DGV_PASTE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_PUT_PARMS16, * LPMCI_DGV_PUT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ SEGPTR lpstrName;
+ SEGPTR lpstrAlgorithm;
+ DWORD dwHandle;
+} MCI_DGV_QUALITY_PARMS16, *LPMCI_DGV_QUALITY_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_RECORD_PARMS16, * LPMCI_DGV_RECORD_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrPath;
+ DWORD dwSize;
+} MCI_DGV_RESERVE_PARMS16, *LPMCI_DGV_RESERVE_PARMS16A;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrFileName;
+ RECT16 rc;
+} MCI_DGV_RESTORE_PARMS16, *LPMCI_DGV_RESTORE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ SEGPTR lpstrFileName;
+ RECT16 rc;
+} MCI_DGV_SAVE_PARMS16, *LPMCI_DGV_SAVE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ SEGPTR lpstrAlgorithm;
+ SEGPTR lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMS16, *LPMCI_DGV_SETAUDIO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ SEGPTR lpstrAlgorithm;
+ SEGPTR lpstrQuality;
+ DWORD dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMS16, *LPMCI_DGV_SETVIDEO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+ SEGPTR lpstrDrive;
+ DWORD dwReference;
+} MCI_DGV_STATUS_PARMS16, *LPMCI_DGV_STATUS_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ RECT16 rc;
+ HDC16 hDC;
+ UINT16 wReserved0;
+} MCI_DGV_UPDATE_PARMS16, * LPMCI_DGV_UPDATE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_UNFREEZE_PARMS16, * LPMCI_DGV_UNFREEZE_PARMS16;
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_WHERE_PARMS16, * LPMCI_DGV_WHERE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ HWND16 hWnd;
+ UINT16 wReserved1;
+ UINT16 nCmdShow;
+ UINT16 wReserved2;
+ SEGPTR lpstrText;
+} MCI_DGV_WINDOW_PARMS16, *LPMCI_DGV_WINDOW_PARMS16;
+
+#include <poppack.h>
+
+#endif /* __WINE_WINE_MMSYSTEM16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h
new file mode 100644
index 00000000..6f3593d3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/mscvpdb.h
@@ -0,0 +1,2197 @@
+/*
+ * MS debug information definitions.
+ *
+ * Copyright (C) 1996 Eric Youngdale
+ * Copyright (C) 1999-2000 Ulrich Weigand
+ * Copyright (C) 2004 Eric Pouech
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* MS has stored all its debug information in a set of structures
+ * which has been rather consistent across the years (ie you can grasp
+ * some continuity, and not so many drastic changes).
+ *
+ * A bit of history on the various formats
+ * MSVC 1.0 PDB v1 (new format for debug info)
+ * MSVC 2.0 Inclusion in link of debug info (PDB v2)
+ * MSVC 5.0 Types are 24 bits (instead of 16 for <= 4.x)
+ * MSVC x.0 PDB (change in internal streams layout)
+ *
+ * .DBG Contains COFF, FPO and Codeview info
+ * .PDB New format for debug info (information is
+ * derived from Codeview information)
+ * VCx0.PDB x major MSVC number, stores types, while
+ * <project>.PDB stores symbols.
+ *
+ * Debug information can either be found in the debug section of a PE
+ * module (in something close to a .DBG file), or the debug section
+ * can actually refer to an external file, which can be in turn,
+ * either a .DBG or .PDB file.
+ *
+ * Regarding PDB files:
+ * -------------------
+ * They are implemented as a set of internal files (as a small file
+ * system). The file is split into blocks, an internal file is made
+ * of a set of blocks. Internal files are accessed through
+ * numbers. For example,
+ * 1/ is the ROOT (basic information on the file)
+ * 2/ is the Symbol information (global symbols, local variables...)
+ * 3/ is the Type internal file (each the symbols can have type
+ * information associated with it).
+ *
+ * Over the years, three formats existed for the PDB:
+ * - ?? was rather linked to 16 bit code (our support shall be rather
+ * bad)
+ * - JG: it's the signature embedded in the file header. This format
+ * has been used in MSVC 2.0 => 5.0.
+ * - DS: it's the signature embedded in the file header. It's the
+ * current format supported my MS.
+ *
+ * Types internal stream
+ * ---------------------
+ * Types (from the Type internal file) have existed in three flavors
+ * (note that those flavors came as historical evolution, but there
+ * isn't a one to one link between types evolution and PDB formats'
+ * evolutions:
+ * - the first flavor (suffixed by V1 in this file), where the types
+ * and subtypes are 16 bit entities; and where strings are in Pascal
+ * format (first char is their length and are not 0 terminated)
+ * - the second flavor (suffixed by V2) differs from first flavor with
+ * types and subtypes as 32 bit entities. This forced some
+ * reordering of fields in some types
+ * - the third flavor (suffixed by V3) differs from second flavor with
+ * strings stored as C strings (ie are 0 terminated, instead of
+ * length prefixed)
+ * The different flavors can coexist in the same file (is this really
+ * true ??)
+ *
+ * For the evolution of types, the need of the second flavor was the
+ * number of types to be defined (limited to 0xFFFF, including the C
+ * basic types); the need of the third flavor is the increase of
+ * symbol size (to be greater than 256), which was likely needed for
+ * complex C++ types (nested + templates).
+ *
+ * It's somehow difficult to represent the layout of those types on
+ * disk because:
+ * - some integral values are stored as numeric leaf, which size is
+ * variable depending on its value
+ *
+ * Symbols internal stream
+ * -----------------------
+ * Here also we find three flavors (that we've suffixed with _V1, _V2
+ * and _V3) even if their evolution is closer to the evolution of
+ * types, they are not completely linked together.
+ */
+
+#include "pshpack1.h"
+
+/* ======================================== *
+ * Type information
+ * ======================================== */
+
+struct p_string
+{
+ unsigned char namelen;
+ char name[1];
+};
+
+union codeview_type
+{
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ } generic;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int attribute;
+ short int type;
+ } modifier_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ int type;
+ short int attribute;
+ } modifier_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int attribute;
+ short int datatype;
+ struct p_string p_name;
+ } pointer_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned int datatype;
+ unsigned int attribute;
+ struct p_string p_name;
+ } pointer_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int elemtype;
+ short int idxtype;
+ unsigned short int arrlen; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } array_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned int elemtype;
+ unsigned int idxtype;
+ unsigned short int arrlen; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } array_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned int elemtype;
+ unsigned int idxtype;
+ unsigned short int arrlen; /* numeric leaf */
+#if 0
+ char name[1];
+#endif
+ } array_v3;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int n_element;
+ short int fieldlist;
+ short int property;
+ short int derived;
+ short int vshape;
+ unsigned short int structlen; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } struct_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int n_element;
+ short int property;
+ unsigned int fieldlist;
+ unsigned int derived;
+ unsigned int vshape;
+ unsigned short int structlen; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } struct_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int n_element;
+ short int property;
+ unsigned int fieldlist;
+ unsigned int derived;
+ unsigned int vshape;
+ unsigned short int structlen; /* numeric leaf */
+#if 0
+ char name[1];
+#endif
+ } struct_v3;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int count;
+ short int fieldlist;
+ short int property;
+ unsigned short int un_len; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } union_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int count;
+ short int property;
+ unsigned int fieldlist;
+ unsigned short int un_len; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } union_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int count;
+ short int property;
+ unsigned int fieldlist;
+ unsigned short int un_len; /* numeric leaf */
+#if 0
+ char name[1];
+#endif
+ } union_v3;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int count;
+ short int type;
+ short int fieldlist;
+ short int property;
+ struct p_string p_name;
+ } enumeration_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int count;
+ short int property;
+ unsigned int type;
+ unsigned int fieldlist;
+ struct p_string p_name;
+ } enumeration_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ short int count;
+ short int property;
+ unsigned int type;
+ unsigned int fieldlist;
+ char name[1];
+ } enumeration_v3;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned short int rvtype;
+ unsigned char call;
+ unsigned char reserved;
+ unsigned short int params;
+ unsigned short int arglist;
+ } procedure_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned int rvtype;
+ unsigned char call;
+ unsigned char reserved;
+ unsigned short int params;
+ unsigned int arglist;
+ } procedure_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned short int rvtype;
+ unsigned short int class_type;
+ unsigned short int this_type;
+ unsigned char call;
+ unsigned char reserved;
+ unsigned short int params;
+ unsigned short int arglist;
+ unsigned int this_adjust;
+ } mfunction_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned int rvtype;
+ unsigned int class_type;
+ unsigned this_type;
+ unsigned char call;
+ unsigned char reserved;
+ unsigned short params;
+ unsigned int arglist;
+ unsigned int this_adjust;
+ } mfunction_v2;
+};
+
+union codeview_reftype
+{
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ } generic;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned char list[1];
+ } fieldlist;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned char nbits;
+ unsigned char bitoff;
+ unsigned short type;
+ } bitfield_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned int type;
+ unsigned char nbits;
+ unsigned char bitoff;
+ } bitfield_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned short num;
+ unsigned short args[1];
+ } arglist_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned num;
+ unsigned args[1];
+ } arglist_v2;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned short num;
+ unsigned short drvdcls[1];
+ } derived_v1;
+
+ struct
+ {
+ unsigned short int len;
+ short int id;
+ unsigned num;
+ unsigned drvdcls[1];
+ } derived_v2;
+};
+
+union codeview_fieldtype
+{
+ struct
+ {
+ short int id;
+ } generic;
+
+ struct
+ {
+ short int id;
+ short int type;
+ short int attribute;
+ unsigned short int offset; /* numeric leaf */
+ } bclass_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ unsigned short int offset; /* numeric leaf */
+ } bclass_v2;
+
+ struct
+ {
+ short int id;
+ short int btype;
+ short int vbtype;
+ short int attribute;
+ unsigned short int vbpoff; /* numeric leaf */
+#if 0
+ unsigned short int vboff; /* numeric leaf */
+#endif
+ } vbclass_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int btype;
+ unsigned int vbtype;
+ unsigned short int vbpoff; /* numeric leaf */
+#if 0
+ unsigned short int vboff; /* numeric leaf */
+#endif
+ } vbclass_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned short int value; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } enumerate_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned short int value; /* numeric leaf */
+#if 0
+ char name[1];
+#endif
+ } enumerate_v3;
+
+ struct
+ {
+ short int id;
+ short int type;
+ struct p_string p_name;
+ } friendfcn_v1;
+
+ struct
+ {
+ short int id;
+ short int _pad0;
+ unsigned int type;
+ struct p_string p_name;
+ } friendfcn_v2;
+
+ struct
+ {
+ short int id;
+ short int type;
+ short int attribute;
+ unsigned short int offset; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } member_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ unsigned short int offset; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } member_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ unsigned short int offset; /* numeric leaf */
+#if 0
+ unsigned char name[1];
+#endif
+ }
+ member_v3;
+
+ struct
+ {
+ short int id;
+ short int type;
+ short int attribute;
+ struct p_string p_name;
+ } stmember_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ struct p_string p_name;
+ } stmember_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ char name[1];
+ } stmember_v3;
+
+ struct
+ {
+ short int id;
+ short int count;
+ short int mlist;
+ struct p_string p_name;
+ } method_v1;
+
+ struct
+ {
+ short int id;
+ short int count;
+ unsigned int mlist;
+ struct p_string p_name;
+ } method_v2;
+
+ struct
+ {
+ short int id;
+ short int count;
+ unsigned int mlist;
+ char name[1];
+ } method_v3;
+
+ struct
+ {
+ short int id;
+ short int type;
+ struct p_string p_name;
+ } nesttype_v1;
+
+ struct
+ {
+ short int id;
+ short int _pad0;
+ unsigned int type;
+ struct p_string p_name;
+ } nesttype_v2;
+
+ struct
+ {
+ short int id;
+ short int _pad0;
+ unsigned int type;
+ char name[1];
+ } nesttype_v3;
+
+ struct
+ {
+ short int id;
+ short int type;
+ } vfunctab_v1;
+
+ struct
+ {
+ short int id;
+ short int _pad0;
+ unsigned int type;
+ } vfunctab_v2;
+
+ struct
+ {
+ short int id;
+ short int type;
+ } friendcls_v1;
+
+ struct
+ {
+ short int id;
+ short int _pad0;
+ unsigned int type;
+ } friendcls_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ short int type;
+ struct p_string p_name;
+ } onemethod_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ struct p_string p_name;
+ } onemethod_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ char name[1];
+ } onemethod_v3;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ short int type;
+ unsigned int vtab_offset;
+ struct p_string p_name;
+ } onemethod_virt_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ unsigned int vtab_offset;
+ struct p_string p_name;
+ } onemethod_virt_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ unsigned int vtab_offset;
+ char name[1];
+ } onemethod_virt_v3;
+
+ struct
+ {
+ short int id;
+ short int type;
+ unsigned int offset;
+ } vfuncoff_v1;
+
+ struct
+ {
+ short int id;
+ short int _pad0;
+ unsigned int type;
+ unsigned int offset;
+ } vfuncoff_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ short int type;
+ struct p_string p_name;
+ } nesttypeex_v1;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ struct p_string p_name;
+ } nesttypeex_v2;
+
+ struct
+ {
+ short int id;
+ short int attribute;
+ unsigned int type;
+ struct p_string p_name;
+ } membermodify_v2;
+
+ struct
+ {
+ short int id;
+ short int ref;
+ } index_v1;
+
+ struct
+ {
+ short int id;
+ short int unk;
+ unsigned int ref;
+ } index_v2;
+};
+
+
+/*
+ * This covers the basic datatypes that VC++ seems to be using these days.
+ * 32 bit mode only. There are additional numbers for the pointers in 16
+ * bit mode. There are many other types listed in the documents, but these
+ * are apparently not used by the compiler, or represent pointer types
+ * that are not used.
+ *
+ * Official MS documentation says that type (< 0x4000, so 12 bits) is made of:
+ * +----------+------+------+----------+------+
+ * | 11 | 10-8 | 7-4 | 3 | 2-0 |
+ * +----------+------+------+----------+------+
+ * | reserved | mode | type | reserved | size |
+ * +----------+------+------+----------+------+
+ * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've
+ * added this basic type... as if bit 3 had been integrated into the size field
+ */
+
+/* the type number of a built-in type is a 16-bit value specified in the following format:
+ bit # | 11 | 10-8 | 7-4 | 3 | 2-0 |
+ field | reserved | mode | type | reserved | size |
+
+ where
+ <type> is one of the following types:
+ 0x00 Special
+ 0x01 Signed integral value
+ 0x02 Unsigned integral value
+ 0x03 Boolean
+ 0x04 Real
+ 0x05 Complex
+ 0x06 Special2
+ 0x07 Real int value
+ 0x08 Reserved
+ 0x09 Reserved
+ 0x0a Reserved
+ 0x0b Reserved
+ 0x0c Reserved
+ 0x0d Reserved
+ 0x0e Reserved
+ 0x0f Reserved for debugger expression evaluator
+
+ <size> is an enumerated value for each of the types.
+ Type = special
+ 0x00 No type
+ 0x01 Absolute symbol
+ 0x02 Segment
+ 0x03 Void
+ 0x04 Basic 8-byte currency value
+ 0x05 Near Basic string
+ 0x06 Far Basic string
+ 0x07 Untranslated type from previous Microsoft symbol formats
+ Type = signed/unsigned integral and Boolean values
+ 0x00 1 byte
+ 0x01 2 byte
+ 0x02 4 byte
+ 0x03 8 byte
+ 0x04 Reserved
+ 0x05 Reserved
+ 0x06 Reserved
+ 0x07 Reserved
+ Type = real and complex
+ 0x00 32 bit
+ 0x01 64 bit
+ 0x02 80 bit
+ 0x03 128 bit
+ 0x04 48 bit
+ 0x05 Reserved
+ 0x06 Reserved
+ 0x07 Reserved
+ Type = special2
+ 0x00 Bit
+ 0x01 Pascal CHAR
+ Type = Real int
+ 0x00 Char
+ 0x01 Wide character
+ 0x02 2-byte signed integer
+ 0x03 2-byte unsigned integer
+ 0x04 4-byte signed integer
+ 0x05 4-byte unsigned integer
+ 0x06 8-byte signed integer
+ 0x07 8-byte unsigned integer
+
+ <mode> is the pointer mode:
+ 0x00 Direct; not a pointer
+ 0x01 Near pointer
+ 0x02 Far pointer
+ 0x03 Huge pointer
+ 0x04 32-bit near pointer
+ 0x05 32-bit far pointer
+ 0x06 64-bit near pointer
+ 0x07 Reserved
+*/
+
+/* basic types */
+#define T_NOTYPE 0x0000 /* Notype */
+#define T_ABS 0x0001 /* Abs */
+#define T_SEGMENT 0x0002 /* segment type */
+#define T_VOID 0x0003 /* Void */
+#define T_CURRENCY 0x0004 /* basic 8-byte currency value */
+#define T_NBASICSTR 0x0005 /* near basic string */
+#define T_FBASICSTR 0x0006 /* far basic string */
+#define T_NOTTRANS 0x0007 /* untranslated type record from MS symbol format */
+#define T_HRESULT 0x0008 /* HRESULT - or error code ??? */
+#define T_CHAR 0x0010 /* signed char */
+#define T_SHORT 0x0011 /* short */
+#define T_LONG 0x0012 /* long */
+#define T_QUAD 0x0013 /* long long */
+#define T_UCHAR 0x0020 /* unsigned char */
+#define T_USHORT 0x0021 /* unsigned short */
+#define T_ULONG 0x0022 /* unsigned long */
+#define T_UQUAD 0x0023 /* unsigned long long */
+#define T_BOOL08 0x0030 /* 8-bit boolean */
+#define T_BOOL16 0x0031 /* 16-bit boolean */
+#define T_BOOL32 0x0032 /* 32-bit boolean */
+#define T_BOOL64 0x0033 /* 64-bit boolean */
+#define T_REAL32 0x0040 /* float */
+#define T_REAL64 0x0041 /* double */
+#define T_REAL80 0x0042 /* 80-bit real */
+#define T_REAL128 0x0043 /* 128-bit real */
+#define T_REAL48 0x0044 /* 48-bit real */
+#define T_CPLX32 0x0050 /* 32-bit complex number */
+#define T_CPLX64 0x0051 /* 64-bit complex number */
+#define T_CPLX80 0x0052 /* 80-bit complex number */
+#define T_CPLX128 0x0053 /* 128-bit complex number */
+#define T_BIT 0x0060 /* bit */
+#define T_PASCHAR 0x0061 /* pascal CHAR */
+#define T_RCHAR 0x0070 /* real char */
+#define T_WCHAR 0x0071 /* wide char */
+#define T_INT2 0x0072 /* real 16-bit signed int */
+#define T_UINT2 0x0073 /* real 16-bit unsigned int */
+#define T_INT4 0x0074 /* int */
+#define T_UINT4 0x0075 /* unsigned int */
+#define T_INT8 0x0076 /* 64-bit signed int */
+#define T_UINT8 0x0077 /* 64-bit unsigned int */
+
+
+/* near pointers to basic types */
+#define T_PVOID 0x0103 /* near pointer to void */
+#define T_PCHAR 0x0110 /* Near pointer to 8-bit signed */
+#define T_PSHORT 0x0111 /* Near pointer to 16-bit signed */
+#define T_PLONG 0x0112 /* Near pointer to 32-bit signed */
+#define T_PQUAD 0x0113 /* Near pointer to 64-bit signed */
+#define T_PUCHAR 0x0120 /* Near pointer to 8-bit unsigned */
+#define T_PUSHORT 0x0121 /* Near pointer to 16-bit unsigned */
+#define T_PULONG 0x0122 /* Near pointer to 32-bit unsigned */
+#define T_PUQUAD 0x0123 /* Near pointer to 64-bit unsigned */
+#define T_PBOOL08 0x0130 /* Near pointer to 8-bit Boolean */
+#define T_PBOOL16 0x0131 /* Near pointer to 16-bit Boolean */
+#define T_PBOOL32 0x0132 /* Near pointer to 32-bit Boolean */
+#define T_PBOOL64 0x0133 /* Near pointer to 64-bit Boolean */
+#define T_PREAL32 0x0140 /* Near pointer to 32-bit real */
+#define T_PREAL64 0x0141 /* Near pointer to 64-bit real */
+#define T_PREAL80 0x0142 /* Near pointer to 80-bit real */
+#define T_PREAL128 0x0143 /* Near pointer to 128-bit real */
+#define T_PREAL48 0x0144 /* Near pointer to 48-bit real */
+#define T_PCPLX32 0x0150 /* Near pointer to 32-bit complex */
+#define T_PCPLX64 0x0151 /* Near pointer to 64-bit complex */
+#define T_PCPLX80 0x0152 /* Near pointer to 80-bit complex */
+#define T_PCPLX128 0x0153 /* Near pointer to 128-bit complex */
+#define T_PRCHAR 0x0170 /* Near pointer to a real char */
+#define T_PWCHAR 0x0171 /* Near pointer to a wide char */
+#define T_PINT2 0x0172 /* Near pointer to 16-bit signed int */
+#define T_PUINT2 0x0173 /* Near pointer to 16-bit unsigned int */
+#define T_PINT4 0x0174 /* Near pointer to 32-bit signed int */
+#define T_PUINT4 0x0175 /* Near pointer to 32-bit unsigned int */
+#define T_PINT8 0x0176 /* Near pointer to 64-bit signed int */
+#define T_PUINT8 0x0177 /* Near pointer to 64-bit unsigned int */
+
+
+/* far pointers to basic types */
+#define T_PFVOID 0x0203 /* Far pointer to void */
+#define T_PFCHAR 0x0210 /* Far pointer to 8-bit signed */
+#define T_PFSHORT 0x0211 /* Far pointer to 16-bit signed */
+#define T_PFLONG 0x0212 /* Far pointer to 32-bit signed */
+#define T_PFQUAD 0x0213 /* Far pointer to 64-bit signed */
+#define T_PFUCHAR 0x0220 /* Far pointer to 8-bit unsigned */
+#define T_PFUSHORT 0x0221 /* Far pointer to 16-bit unsigned */
+#define T_PFULONG 0x0222 /* Far pointer to 32-bit unsigned */
+#define T_PFUQUAD 0x0223 /* Far pointer to 64-bit unsigned */
+#define T_PFBOOL08 0x0230 /* Far pointer to 8-bit Boolean */
+#define T_PFBOOL16 0x0231 /* Far pointer to 16-bit Boolean */
+#define T_PFBOOL32 0x0232 /* Far pointer to 32-bit Boolean */
+#define T_PFBOOL64 0x0233 /* Far pointer to 64-bit Boolean */
+#define T_PFREAL32 0x0240 /* Far pointer to 32-bit real */
+#define T_PFREAL64 0x0241 /* Far pointer to 64-bit real */
+#define T_PFREAL80 0x0242 /* Far pointer to 80-bit real */
+#define T_PFREAL128 0x0243 /* Far pointer to 128-bit real */
+#define T_PFREAL48 0x0244 /* Far pointer to 48-bit real */
+#define T_PFCPLX32 0x0250 /* Far pointer to 32-bit complex */
+#define T_PFCPLX64 0x0251 /* Far pointer to 64-bit complex */
+#define T_PFCPLX80 0x0252 /* Far pointer to 80-bit complex */
+#define T_PFCPLX128 0x0253 /* Far pointer to 128-bit complex */
+#define T_PFRCHAR 0x0270 /* Far pointer to a real char */
+#define T_PFWCHAR 0x0271 /* Far pointer to a wide char */
+#define T_PFINT2 0x0272 /* Far pointer to 16-bit signed int */
+#define T_PFUINT2 0x0273 /* Far pointer to 16-bit unsigned int */
+#define T_PFINT4 0x0274 /* Far pointer to 32-bit signed int */
+#define T_PFUINT4 0x0275 /* Far pointer to 32-bit unsigned int */
+#define T_PFINT8 0x0276 /* Far pointer to 64-bit signed int */
+#define T_PFUINT8 0x0277 /* Far pointer to 64-bit unsigned int */
+
+
+/* huge pointers to basic types */
+#define T_PHVOID 0x0303 /* Huge pointer to void */
+#define T_PHCHAR 0x0310 /* Huge pointer to 8-bit signed */
+#define T_PHSHORT 0x0311 /* Huge pointer to 16-bit signed */
+#define T_PHLONG 0x0312 /* Huge pointer to 32-bit signed */
+#define T_PHQUAD 0x0313 /* Huge pointer to 64-bit signed */
+#define T_PHUCHAR 0x0320 /* Huge pointer to 8-bit unsigned */
+#define T_PHUSHORT 0x0321 /* Huge pointer to 16-bit unsigned */
+#define T_PHULONG 0x0322 /* Huge pointer to 32-bit unsigned */
+#define T_PHUQUAD 0x0323 /* Huge pointer to 64-bit unsigned */
+#define T_PHBOOL08 0x0330 /* Huge pointer to 8-bit Boolean */
+#define T_PHBOOL16 0x0331 /* Huge pointer to 16-bit Boolean */
+#define T_PHBOOL32 0x0332 /* Huge pointer to 32-bit Boolean */
+#define T_PHBOOL64 0x0333 /* Huge pointer to 64-bit Boolean */
+#define T_PHREAL32 0x0340 /* Huge pointer to 32-bit real */
+#define T_PHREAL64 0x0341 /* Huge pointer to 64-bit real */
+#define T_PHREAL80 0x0342 /* Huge pointer to 80-bit real */
+#define T_PHREAL128 0x0343 /* Huge pointer to 128-bit real */
+#define T_PHREAL48 0x0344 /* Huge pointer to 48-bit real */
+#define T_PHCPLX32 0x0350 /* Huge pointer to 32-bit complex */
+#define T_PHCPLX64 0x0351 /* Huge pointer to 64-bit complex */
+#define T_PHCPLX80 0x0352 /* Huge pointer to 80-bit complex */
+#define T_PHCPLX128 0x0353 /* Huge pointer to 128-bit real */
+#define T_PHRCHAR 0x0370 /* Huge pointer to a real char */
+#define T_PHWCHAR 0x0371 /* Huge pointer to a wide char */
+#define T_PHINT2 0x0372 /* Huge pointer to 16-bit signed int */
+#define T_PHUINT2 0x0373 /* Huge pointer to 16-bit unsigned int */
+#define T_PHINT4 0x0374 /* Huge pointer to 32-bit signed int */
+#define T_PHUINT4 0x0375 /* Huge pointer to 32-bit unsigned int */
+#define T_PHINT8 0x0376 /* Huge pointer to 64-bit signed int */
+#define T_PHUINT8 0x0377 /* Huge pointer to 64-bit unsigned int */
+
+
+/* 32-bit near pointers to basic types */
+#define T_32PVOID 0x0403 /* 32-bit near pointer to void */
+#define T_32PHRESULT 0x0408 /* 16:32 near pointer to HRESULT - or error code ??? */
+#define T_32PCHAR 0x0410 /* 16:32 near pointer to 8-bit signed */
+#define T_32PSHORT 0x0411 /* 16:32 near pointer to 16-bit signed */
+#define T_32PLONG 0x0412 /* 16:32 near pointer to 32-bit signed */
+#define T_32PQUAD 0x0413 /* 16:32 near pointer to 64-bit signed */
+#define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8-bit unsigned */
+#define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16-bit unsigned */
+#define T_32PULONG 0x0422 /* 16:32 near pointer to 32-bit unsigned */
+#define T_32PUQUAD 0x0423 /* 16:32 near pointer to 64-bit unsigned */
+#define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8-bit Boolean */
+#define T_32PBOOL16 0x0431 /* 16:32 near pointer to 16-bit Boolean */
+#define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32-bit Boolean */
+#define T_32PBOOL64 0x0433 /* 16:32 near pointer to 64-bit Boolean */
+#define T_32PREAL32 0x0440 /* 16:32 near pointer to 32-bit real */
+#define T_32PREAL64 0x0441 /* 16:32 near pointer to 64-bit real */
+#define T_32PREAL80 0x0442 /* 16:32 near pointer to 80-bit real */
+#define T_32PREAL128 0x0443 /* 16:32 near pointer to 128-bit real */
+#define T_32PREAL48 0x0444 /* 16:32 near pointer to 48-bit real */
+#define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32-bit complex */
+#define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64-bit complex */
+#define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80-bit complex */
+#define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128-bit complex */
+#define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */
+#define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */
+#define T_32PINT2 0x0472 /* 16:32 near pointer to 16-bit signed int */
+#define T_32PUINT2 0x0473 /* 16:32 near pointer to 16-bit unsigned int */
+#define T_32PINT4 0x0474 /* 16:32 near pointer to 32-bit signed int */
+#define T_32PUINT4 0x0475 /* 16:32 near pointer to 32-bit unsigned int */
+#define T_32PINT8 0x0476 /* 16:32 near pointer to 64-bit signed int */
+#define T_32PUINT8 0x0477 /* 16:32 near pointer to 64-bit unsigned int */
+
+
+/* 32-bit far pointers to basic types */
+#define T_32PFVOID 0x0503 /* 32-bit far pointer to void */
+#define T_32PFHRESULT 0x0508 /* 16:32 far pointer to HRESULT - or error code ??? */
+#define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */
+#define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */
+#define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */
+#define T_32PFQUAD 0x0513 /* 16:32 far pointer to 64-bit signed */
+#define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8-bit unsigned */
+#define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16-bit unsigned */
+#define T_32PFULONG 0x0522 /* 16:32 far pointer to 32-bit unsigned */
+#define T_32PFUQUAD 0x0523 /* 16:32 far pointer to 64-bit unsigned */
+#define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8-bit Boolean */
+#define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16-bit Boolean */
+#define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32-bit Boolean */
+#define T_32PFBOOL64 0x0533 /* 16:32 far pointer to 64-bit Boolean */
+#define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32-bit real */
+#define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64-bit real */
+#define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80-bit real */
+#define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128-bit real */
+#define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48-bit real */
+#define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32-bit complex */
+#define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64-bit complex */
+#define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80-bit complex */
+#define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128-bit complex */
+#define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */
+#define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */
+#define T_32PFINT2 0x0572 /* 16:32 far pointer to 16-bit signed int */
+#define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16-bit unsigned int */
+#define T_32PFINT4 0x0574 /* 16:32 far pointer to 32-bit signed int */
+#define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32-bit unsigned int */
+#define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */
+#define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */
+
+/* 64-bit near pointers to basic types */
+#define T_64PVOID 0x0603 /* 64-bit near pointer to void */
+#define T_64PHRESULT 0x0608 /* 64 near pointer to HRESULT - or error code ??? */
+#define T_64PCHAR 0x0610 /* 64 near pointer to 8-bit signed */
+#define T_64PSHORT 0x0611 /* 64 near pointer to 16-bit signed */
+#define T_64PLONG 0x0612 /* 64 near pointer to 32-bit signed */
+#define T_64PQUAD 0x0613 /* 64 near pointer to 64-bit signed */
+#define T_64PUCHAR 0x0620 /* 64 near pointer to 8-bit unsigned */
+#define T_64PUSHORT 0x0621 /* 64 near pointer to 16-bit unsigned */
+#define T_64PULONG 0x0622 /* 64 near pointer to 32-bit unsigned */
+#define T_64PUQUAD 0x0623 /* 64 near pointer to 64-bit unsigned */
+#define T_64PBOOL08 0x0630 /* 64 near pointer to 8-bit Boolean */
+#define T_64PBOOL16 0x0631 /* 64 near pointer to 16-bit Boolean */
+#define T_64PBOOL32 0x0632 /* 64 near pointer to 32-bit Boolean */
+#define T_64PBOOL64 0x0633 /* 64 near pointer to 64-bit Boolean */
+#define T_64PREAL32 0x0640 /* 64 near pointer to 32-bit real */
+#define T_64PREAL64 0x0641 /* 64 near pointer to 64-bit real */
+#define T_64PREAL80 0x0642 /* 64 near pointer to 80-bit real */
+#define T_64PREAL128 0x0643 /* 64 near pointer to 128-bit real */
+#define T_64PREAL48 0x0644 /* 64 near pointer to 48-bit real */
+#define T_64PCPLX32 0x0650 /* 64 near pointer to 32-bit complex */
+#define T_64PCPLX64 0x0651 /* 64 near pointer to 64-bit complex */
+#define T_64PCPLX80 0x0652 /* 64 near pointer to 80-bit complex */
+#define T_64PCPLX128 0x0653 /* 64 near pointer to 128-bit complex */
+#define T_64PRCHAR 0x0670 /* 64 near pointer to a real char */
+#define T_64PWCHAR 0x0671 /* 64 near pointer to a wide char */
+#define T_64PINT2 0x0672 /* 64 near pointer to 16-bit signed int */
+#define T_64PUINT2 0x0673 /* 64 near pointer to 16-bit unsigned int */
+#define T_64PINT4 0x0674 /* 64 near pointer to 32-bit signed int */
+#define T_64PUINT4 0x0675 /* 64 near pointer to 32-bit unsigned int */
+#define T_64PINT8 0x0676 /* 64 near pointer to 64-bit signed int */
+#define T_64PUINT8 0x0677 /* 64 near pointer to 64-bit unsigned int */
+
+/* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */
+#define T_MAXPREDEFINEDTYPE 0x0580 /* maximum type index for all built-in types */
+#define T_MAXBASICTYPE 0x0080 /* maximum type index all non-pointer built-in types */
+#define T_BASICTYPE_MASK 0x00ff /* mask of bits that can potentially identify a non-pointer basic type */
+#define T_BASICTYPE_SHIFT 8 /* shift count to push out the basic type bits from a type number */
+#define T_MODE_MASK 0x0700 /* type mode mask (ptr/non-ptr) */
+#define T_SIZE_MASK 0x0007 /* type size mask (depends on 'type' value) */
+#define T_TYPE_MASK 0x00f0 /* type type mask (data treatment mode) */
+
+/* bit patterns for the <mode> portion of a built-in type number */
+#define T_NEARPTR_BITS 0x0100
+#define T_FARPTR_BITS 0x0200
+#define T_HUGEPTR_BITS 0x0300
+#define T_NEAR32PTR_BITS 0x0400
+#define T_FAR32PTR_BITS 0x0500
+#define T_NEAR64PTR_BITS 0x0600
+
+#define LF_MODIFIER_V1 0x0001
+#define LF_POINTER_V1 0x0002
+#define LF_ARRAY_V1 0x0003
+#define LF_CLASS_V1 0x0004
+#define LF_STRUCTURE_V1 0x0005
+#define LF_UNION_V1 0x0006
+#define LF_ENUM_V1 0x0007
+#define LF_PROCEDURE_V1 0x0008
+#define LF_MFUNCTION_V1 0x0009
+#define LF_VTSHAPE_V1 0x000a
+#define LF_COBOL0_V1 0x000b
+#define LF_COBOL1_V1 0x000c
+#define LF_BARRAY_V1 0x000d
+#define LF_LABEL_V1 0x000e
+#define LF_NULL_V1 0x000f
+#define LF_NOTTRAN_V1 0x0010
+#define LF_DIMARRAY_V1 0x0011
+#define LF_VFTPATH_V1 0x0012
+#define LF_PRECOMP_V1 0x0013
+#define LF_ENDPRECOMP_V1 0x0014
+#define LF_OEM_V1 0x0015
+#define LF_TYPESERVER_V1 0x0016
+
+#define LF_MODIFIER_V2 0x1001 /* variants with new 32-bit type indices (V2) */
+#define LF_POINTER_V2 0x1002
+#define LF_ARRAY_V2 0x1003
+#define LF_CLASS_V2 0x1004
+#define LF_STRUCTURE_V2 0x1005
+#define LF_UNION_V2 0x1006
+#define LF_ENUM_V2 0x1007
+#define LF_PROCEDURE_V2 0x1008
+#define LF_MFUNCTION_V2 0x1009
+#define LF_COBOL0_V2 0x100a
+#define LF_BARRAY_V2 0x100b
+#define LF_DIMARRAY_V2 0x100c
+#define LF_VFTPATH_V2 0x100d
+#define LF_PRECOMP_V2 0x100e
+#define LF_OEM_V2 0x100f
+
+#define LF_SKIP_V1 0x0200
+#define LF_ARGLIST_V1 0x0201
+#define LF_DEFARG_V1 0x0202
+#define LF_LIST_V1 0x0203
+#define LF_FIELDLIST_V1 0x0204
+#define LF_DERIVED_V1 0x0205
+#define LF_BITFIELD_V1 0x0206
+#define LF_METHODLIST_V1 0x0207
+#define LF_DIMCONU_V1 0x0208
+#define LF_DIMCONLU_V1 0x0209
+#define LF_DIMVARU_V1 0x020a
+#define LF_DIMVARLU_V1 0x020b
+#define LF_REFSYM_V1 0x020c
+
+#define LF_SKIP_V2 0x1200 /* variants with new 32-bit type indices (V2) */
+#define LF_ARGLIST_V2 0x1201
+#define LF_DEFARG_V2 0x1202
+#define LF_FIELDLIST_V2 0x1203
+#define LF_DERIVED_V2 0x1204
+#define LF_BITFIELD_V2 0x1205
+#define LF_METHODLIST_V2 0x1206
+#define LF_DIMCONU_V2 0x1207
+#define LF_DIMCONLU_V2 0x1208
+#define LF_DIMVARU_V2 0x1209
+#define LF_DIMVARLU_V2 0x120a
+
+/* Field lists */
+#define LF_BCLASS_V1 0x0400
+#define LF_VBCLASS_V1 0x0401
+#define LF_IVBCLASS_V1 0x0402
+#define LF_ENUMERATE_V1 0x0403
+#define LF_FRIENDFCN_V1 0x0404
+#define LF_INDEX_V1 0x0405
+#define LF_MEMBER_V1 0x0406
+#define LF_STMEMBER_V1 0x0407
+#define LF_METHOD_V1 0x0408
+#define LF_NESTTYPE_V1 0x0409
+#define LF_VFUNCTAB_V1 0x040a
+#define LF_FRIENDCLS_V1 0x040b
+#define LF_ONEMETHOD_V1 0x040c
+#define LF_VFUNCOFF_V1 0x040d
+#define LF_NESTTYPEEX_V1 0x040e
+#define LF_MEMBERMODIFY_V1 0x040f
+
+#define LF_BCLASS_V2 0x1400 /* variants with new 32-bit type indices (V2) */
+#define LF_VBCLASS_V2 0x1401
+#define LF_IVBCLASS_V2 0x1402
+#define LF_FRIENDFCN_V2 0x1403
+#define LF_INDEX_V2 0x1404
+#define LF_MEMBER_V2 0x1405
+#define LF_STMEMBER_V2 0x1406
+#define LF_METHOD_V2 0x1407
+#define LF_NESTTYPE_V2 0x1408
+#define LF_VFUNCTAB_V2 0x1409
+#define LF_FRIENDCLS_V2 0x140a
+#define LF_ONEMETHOD_V2 0x140b
+#define LF_VFUNCOFF_V2 0x140c
+#define LF_NESTTYPEEX_V2 0x140d
+
+#define LF_ENUMERATE_V3 0x1502
+#define LF_ARRAY_V3 0x1503
+#define LF_CLASS_V3 0x1504
+#define LF_STRUCTURE_V3 0x1505
+#define LF_UNION_V3 0x1506
+#define LF_ENUM_V3 0x1507
+#define LF_MEMBER_V3 0x150d
+#define LF_STMEMBER_V3 0x150e
+#define LF_METHOD_V3 0x150f
+#define LF_NESTTYPE_V3 0x1510
+#define LF_ONEMETHOD_V3 0x1511
+
+#define LF_NUMERIC 0x8000 /* numeric leaf types */
+#define LF_CHAR 0x8000
+#define LF_SHORT 0x8001
+#define LF_USHORT 0x8002
+#define LF_LONG 0x8003
+#define LF_ULONG 0x8004
+#define LF_REAL32 0x8005
+#define LF_REAL64 0x8006
+#define LF_REAL80 0x8007
+#define LF_REAL128 0x8008
+#define LF_QUADWORD 0x8009
+#define LF_UQUADWORD 0x800a
+#define LF_REAL48 0x800b
+#define LF_COMPLEX32 0x800c
+#define LF_COMPLEX64 0x800d
+#define LF_COMPLEX80 0x800e
+#define LF_COMPLEX128 0x800f
+#define LF_VARSTRING 0x8010
+
+/* ======================================== *
+ * Symbol information
+ * ======================================== */
+
+union codeview_symbol
+{
+ struct
+ {
+ short int len;
+ short int id;
+ } generic;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned short symtype;
+ struct p_string p_name;
+ } data_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int symtype;
+ unsigned int offset;
+ unsigned short segment;
+ struct p_string p_name;
+ } data_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int symtype;
+ unsigned int offset;
+ unsigned short segment;
+ char name[1];
+ } data_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int pparent;
+ unsigned int pend;
+ unsigned int next;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned short thunk_len;
+ unsigned char thtype;
+ struct p_string p_name;
+ } thunk_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int pparent;
+ unsigned int pend;
+ unsigned int next;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned short thunk_len;
+ unsigned char thtype;
+ char name[1];
+ } thunk_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int pparent;
+ unsigned int pend;
+ unsigned int next;
+ unsigned int proc_len;
+ unsigned int debug_start;
+ unsigned int debug_end;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned short proctype;
+ unsigned char flags;
+ struct p_string p_name;
+ } proc_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int pparent;
+ unsigned int pend;
+ unsigned int next;
+ unsigned int proc_len;
+ unsigned int debug_start;
+ unsigned int debug_end;
+ unsigned int proctype;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned char flags;
+ struct p_string p_name;
+ } proc_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int pparent;
+ unsigned int pend;
+ unsigned int next;
+ unsigned int proc_len;
+ unsigned int debug_start;
+ unsigned int debug_end;
+ unsigned int proctype;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned char flags;
+ char name[1];
+ } proc_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int symtype;
+ unsigned int offset;
+ unsigned short segment;
+ struct p_string p_name;
+ } public_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int symtype;
+ unsigned int offset;
+ unsigned short segment;
+ char name[1];
+ } public_v3;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_BPREL_V1 */
+ unsigned int offset; /* Stack offset relative to BP */
+ unsigned short symtype;
+ struct p_string p_name;
+ } stack_v1;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_BPREL_V2 */
+ unsigned int offset; /* Stack offset relative to EBP */
+ unsigned int symtype;
+ struct p_string p_name;
+ } stack_v2;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_BPREL_V3 */
+ int offset; /* Stack offset relative to BP */
+ unsigned int symtype;
+ char name[1];
+ } stack_v3;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_BPREL_V3 */
+ int offset; /* Stack offset relative to BP */
+ unsigned int symtype;
+ unsigned short reg;
+ char name[1];
+ } regrel_v3;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_REGISTER */
+ unsigned short type;
+ unsigned short reg;
+ struct p_string p_name;
+ /* don't handle register tracking */
+ } register_v1;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_REGISTER_V2 */
+ unsigned int type; /* check whether type & reg are correct */
+ unsigned short reg;
+ struct p_string p_name;
+ /* don't handle register tracking */
+ } register_v2;
+
+ struct
+ {
+ short int len; /* Total length of this entry */
+ short int id; /* Always S_REGISTER_V3 */
+ unsigned int type; /* check whether type & reg are correct */
+ unsigned short reg;
+ char name[1];
+ /* don't handle register tracking */
+ } register_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int parent;
+ unsigned int end;
+ unsigned int length;
+ unsigned int offset;
+ unsigned short segment;
+ struct p_string p_name;
+ } block_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int parent;
+ unsigned int end;
+ unsigned int length;
+ unsigned int offset;
+ unsigned short segment;
+ char name[1];
+ } block_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned char flags;
+ struct p_string p_name;
+ } label_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned char flags;
+ char name[1];
+ } label_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned short type;
+ unsigned short cvalue; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } constant_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned type;
+ unsigned short cvalue; /* numeric leaf */
+#if 0
+ struct p_string p_name;
+#endif
+ } constant_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned type;
+ unsigned short cvalue;
+#if 0
+ char name[1];
+#endif
+ } constant_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned short type;
+ struct p_string p_name;
+ } udt_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned type;
+ struct p_string p_name;
+ } udt_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int type;
+ char name[1];
+ } udt_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ char signature[4];
+ struct p_string p_name;
+ } objname_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int unknown;
+ struct p_string p_name;
+ } compiland_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned unknown1[4];
+ unsigned short unknown2;
+ struct p_string p_name;
+ } compiland_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int unknown;
+ char name[1];
+ } compiland_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int offset;
+ unsigned short segment;
+ unsigned short symtype;
+ struct p_string p_name;
+ } thread_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int symtype;
+ unsigned int offset;
+ unsigned short segment;
+ struct p_string p_name;
+ } thread_v2;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int symtype;
+ unsigned int offset;
+ unsigned short segment;
+ char name[1];
+ } thread_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int offset;
+ unsigned short segment;
+ } ssearch_v1;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int offset;
+ unsigned int unknown;
+ } security_cookie_v3;
+
+ struct
+ {
+ short int len;
+ short int id;
+ unsigned int sz_frame; /* size of frame */
+ unsigned int unknown2;
+ unsigned int unknown3;
+ unsigned int sz_saved_regs; /* size of saved registers from callee */
+ unsigned int eh_offset; /* offset for exception handler */
+ unsigned short eh_sect; /* section for exception handler */
+ unsigned int flags;
+ } frame_info_v2;
+};
+
+#define S_COMPILAND_V1 0x0001
+#define S_REGISTER_V1 0x0002
+#define S_CONSTANT_V1 0x0003
+#define S_UDT_V1 0x0004
+#define S_SSEARCH_V1 0x0005
+#define S_END_V1 0x0006
+#define S_SKIP_V1 0x0007
+#define S_CVRESERVE_V1 0x0008
+#define S_OBJNAME_V1 0x0009
+#define S_ENDARG_V1 0x000a
+#define S_COBOLUDT_V1 0x000b
+#define S_MANYREG_V1 0x000c
+#define S_RETURN_V1 0x000d
+#define S_ENTRYTHIS_V1 0x000e
+
+#define S_BPREL_V1 0x0200
+#define S_LDATA_V1 0x0201
+#define S_GDATA_V1 0x0202
+#define S_PUB_V1 0x0203
+#define S_LPROC_V1 0x0204
+#define S_GPROC_V1 0x0205
+#define S_THUNK_V1 0x0206
+#define S_BLOCK_V1 0x0207
+#define S_WITH_V1 0x0208
+#define S_LABEL_V1 0x0209
+#define S_CEXMODEL_V1 0x020a
+#define S_VFTPATH_V1 0x020b
+#define S_REGREL_V1 0x020c
+#define S_LTHREAD_V1 0x020d
+#define S_GTHREAD_V1 0x020e
+
+#define S_PROCREF_V1 0x0400
+#define S_DATAREF_V1 0x0401
+#define S_ALIGN_V1 0x0402
+#define S_LPROCREF_V1 0x0403
+
+#define S_REGISTER_V2 0x1001 /* Variants with new 32-bit type indices */
+#define S_CONSTANT_V2 0x1002
+#define S_UDT_V2 0x1003
+#define S_COBOLUDT_V2 0x1004
+#define S_MANYREG_V2 0x1005
+#define S_BPREL_V2 0x1006
+#define S_LDATA_V2 0x1007
+#define S_GDATA_V2 0x1008
+#define S_PUB_V2 0x1009
+#define S_LPROC_V2 0x100a
+#define S_GPROC_V2 0x100b
+#define S_VFTTABLE_V2 0x100c
+#define S_REGREL_V2 0x100d
+#define S_LTHREAD_V2 0x100e
+#define S_GTHREAD_V2 0x100f
+#define S_FRAMEINFO_V2 0x1012
+#define S_COMPILAND_V2 0x1013
+
+#define S_COMPILAND_V3 0x1101
+#define S_THUNK_V3 0x1102
+#define S_BLOCK_V3 0x1103
+#define S_LABEL_V3 0x1105
+#define S_REGISTER_V3 0x1106
+#define S_CONSTANT_V3 0x1107
+#define S_UDT_V3 0x1108
+#define S_BPREL_V3 0x110B
+#define S_LDATA_V3 0x110C
+#define S_GDATA_V3 0x110D
+#define S_PUB_V3 0x110E
+#define S_LPROC_V3 0x110F
+#define S_GPROC_V3 0x1110
+#define S_REGREL_V3 0x1111
+#define S_LTHREAD_V3 0x1112
+#define S_GTHREAD_V3 0x1113
+#define S_MSTOOL_V3 0x1116 /* compiler command line options and build information */
+#define S_PUB_FUNC1_V3 0x1125 /* didn't get the difference between the two */
+#define S_PUB_FUNC2_V3 0x1127
+#define S_SECTINFO_V3 0x1136
+#define S_SUBSECTINFO_V3 0x1137
+#define S_ENTRYPOINT_V3 0x1138
+#define S_SECUCOOKIE_V3 0x113A
+#define S_MSTOOLINFO_V3 0x113C
+#define S_MSTOOLENV_V3 0x113D
+
+/* ======================================== *
+ * Line number information
+ * ======================================== */
+
+struct codeview_linetab_block
+{
+ unsigned short seg;
+ unsigned short num_lines;
+ unsigned int offsets[1]; /* in fact num_lines */
+/* unsigned short linenos[]; */
+};
+
+struct startend
+{
+ unsigned int start;
+ unsigned int end;
+};
+
+#define LT2_LINES_BLOCK 0x000000f2
+#define LT2_FILES_BLOCK 0x000000f4
+
+/* there's a new line tab structure from MS Studio 2005 and after
+ * it's made of a list of codeview_linetab2 blocks.
+ * We've only seen (so far) list with a single LT2_FILES_BLOCK and several
+ * LT2_LINES_BLOCK. The LT2_FILES block has been encountered either as first
+ * or last block of the list.
+ * A LT2_FILES contains one or several codeview_linetab2_file:s
+ */
+
+struct codeview_linetab2
+{
+ DWORD header;
+ DWORD size_of_block;
+};
+
+static inline const struct codeview_linetab2* codeview_linetab2_next_block(const struct codeview_linetab2* lt2)
+{
+ return (const struct codeview_linetab2*)((const char*)(lt2 + 1) + lt2->size_of_block);
+}
+
+struct codeview_linetab2_file
+{
+ DWORD offset; /* offset in string table for filename */
+ WORD unk; /* always 0x0110... type of following information ??? */
+ BYTE md5[16]; /* MD5 signature of file (signature on file's content or name ???) */
+ WORD pad0; /* always 0 */
+};
+
+struct codeview_lt2blk_files
+{
+ struct codeview_linetab2 lt2; /* LT2_FILES */
+ struct codeview_linetab2_file file[1];
+};
+
+struct codeview_lt2blk_lines
+{
+ struct codeview_linetab2 lt2; /* LT2_LINE_BLOCK */
+ DWORD start; /* start address of function with line numbers */
+ DWORD seg; /* segment of function with line numbers */
+ DWORD size; /* size of function with line numbers */
+ DWORD file_offset; /* offset for accessing corresponding codeview_linetab2_file */
+ DWORD nlines; /* number of lines in this block */
+ DWORD size_lines; /* number of bytes following for line number information */
+ struct {
+ DWORD offset; /* offset (from <seg>:<start>) for line number */
+ DWORD lineno; /* the line number (OR:ed with 0x80000000 why ???) */
+ } l[1]; /* actually array of <nlines> */
+};
+
+/* ======================================== *
+ * PDB file information
+ * ======================================== */
+
+
+struct PDB_FILE
+{
+ DWORD size;
+ DWORD unknown;
+};
+
+struct PDB_JG_HEADER
+{
+ CHAR ident[40];
+ DWORD signature;
+ DWORD block_size;
+ WORD free_list;
+ WORD total_alloc;
+ struct PDB_FILE toc;
+ WORD toc_block[1];
+};
+
+struct PDB_DS_HEADER
+{
+ char signature[32];
+ DWORD block_size;
+ DWORD unknown1;
+ DWORD num_pages;
+ DWORD toc_size;
+ DWORD unknown2;
+ DWORD toc_page;
+};
+
+struct PDB_JG_TOC
+{
+ DWORD num_files;
+ struct PDB_FILE file[1];
+};
+
+struct PDB_DS_TOC
+{
+ DWORD num_files;
+ DWORD file_size[1];
+};
+
+struct PDB_JG_ROOT
+{
+ DWORD Version;
+ DWORD TimeDateStamp;
+ DWORD Age;
+ DWORD cbNames;
+ CHAR names[1];
+};
+
+struct PDB_DS_ROOT
+{
+ DWORD Version;
+ DWORD TimeDateStamp;
+ DWORD Age;
+ GUID guid;
+ DWORD cbNames;
+ CHAR names[1];
+};
+
+typedef struct _PDB_TYPES_OLD
+{
+ DWORD version;
+ WORD first_index;
+ WORD last_index;
+ DWORD type_size;
+ WORD file;
+ WORD pad;
+} PDB_TYPES_OLD, *PPDB_TYPES_OLD;
+
+typedef struct _PDB_TYPES
+{
+ DWORD version;
+ DWORD type_offset;
+ DWORD first_index;
+ DWORD last_index;
+ DWORD type_size;
+ WORD file;
+ WORD pad;
+ DWORD hash_size;
+ DWORD hash_base;
+ DWORD hash_offset;
+ DWORD hash_len;
+ DWORD search_offset;
+ DWORD search_len;
+ DWORD unknown_offset;
+ DWORD unknown_len;
+} PDB_TYPES, *PPDB_TYPES;
+
+typedef struct _PDB_SYMBOL_RANGE
+{
+ WORD segment;
+ WORD pad1;
+ DWORD offset;
+ DWORD size;
+ DWORD characteristics;
+ WORD index;
+ WORD pad2;
+} PDB_SYMBOL_RANGE, *PPDB_SYMBOL_RANGE;
+
+typedef struct _PDB_SYMBOL_RANGE_EX
+{
+ WORD segment;
+ WORD pad1;
+ DWORD offset;
+ DWORD size;
+ DWORD characteristics;
+ WORD index;
+ WORD pad2;
+ DWORD timestamp;
+ DWORD unknown;
+} PDB_SYMBOL_RANGE_EX, *PPDB_SYMBOL_RANGE_EX;
+
+typedef struct _PDB_SYMBOL_FILE
+{
+ DWORD unknown1;
+ PDB_SYMBOL_RANGE range;
+ WORD flag;
+ WORD file;
+ DWORD symbol_size;
+ DWORD lineno_size;
+ DWORD unknown2;
+ DWORD nSrcFiles;
+ DWORD attribute;
+ CHAR filename[1];
+} PDB_SYMBOL_FILE, *PPDB_SYMBOL_FILE;
+
+typedef struct _PDB_SYMBOL_FILE_EX
+{
+ DWORD unknown1;
+ PDB_SYMBOL_RANGE_EX range;
+ WORD flag;
+ WORD file;
+ DWORD symbol_size;
+ DWORD lineno_size;
+ DWORD unknown2;
+ DWORD nSrcFiles;
+ DWORD attribute;
+ DWORD reserved[2];
+ CHAR filename[1];
+} PDB_SYMBOL_FILE_EX, *PPDB_SYMBOL_FILE_EX;
+
+typedef struct _PDB_SYMBOL_SOURCE
+{
+ WORD nModules;
+ WORD nSrcFiles;
+ WORD table[1];
+} PDB_SYMBOL_SOURCE, *PPDB_SYMBOL_SOURCE;
+
+typedef struct _PDB_SYMBOL_IMPORT
+{
+ DWORD unknown1;
+ DWORD unknown2;
+ DWORD TimeDateStamp;
+ DWORD Age;
+ CHAR filename[1];
+} PDB_SYMBOL_IMPORT, *PPDB_SYMBOL_IMPORT;
+
+typedef struct _PDB_SYMBOLS_OLD
+{
+ WORD hash1_file;
+ WORD hash2_file;
+ WORD gsym_file;
+ WORD pad;
+ DWORD module_size;
+ DWORD offset_size;
+ DWORD hash_size;
+ DWORD srcmodule_size;
+} PDB_SYMBOLS_OLD, *PPDB_SYMBOLS_OLD;
+
+typedef struct _PDB_SYMBOLS
+{
+ DWORD signature;
+ DWORD version;
+ DWORD unknown;
+ DWORD hash1_file;
+ DWORD hash2_file;
+ WORD gsym_file;
+ WORD unknown1;
+ DWORD module_size;
+ DWORD offset_size;
+ DWORD hash_size;
+ DWORD srcmodule_size;
+ DWORD pdbimport_size;
+ DWORD resvd0;
+ DWORD stream_index_size;
+ DWORD unknown2_size;
+ WORD resvd3;
+ WORD machine;
+ DWORD resvd4;
+} PDB_SYMBOLS, *PPDB_SYMBOLS;
+
+typedef struct
+{
+ WORD FPO;
+ WORD unk0;
+ WORD unk1;
+ WORD unk2;
+ WORD unk3;
+ WORD segments;
+} PDB_STREAM_INDEXES_OLD;
+
+typedef struct
+{
+ WORD FPO;
+ WORD unk0;
+ WORD unk1;
+ WORD unk2;
+ WORD unk3;
+ WORD segments;
+ WORD unk4;
+ WORD unk5;
+ WORD unk6;
+ WORD FPO_EXT;
+ WORD unk7;
+} PDB_STREAM_INDEXES;
+
+typedef struct _PDB_FPO_DATA
+{
+ DWORD start;
+ DWORD func_size;
+ DWORD locals_size;
+ DWORD params_size;
+ DWORD maxstack_size;
+ DWORD str_offset;
+ WORD prolog_size;
+ WORD savedregs_size;
+#define PDB_FPO_DFL_SEH 0x00000001
+#define PDB_FPO_DFL_EH 0x00000002
+#define PDB_FPO_DFL_IN_BLOCK 0x00000004
+ DWORD flags;
+} PDB_FPO_DATA;
+
+#include "poppack.h"
+
+/* ----------------------------------------------
+ * Information used for parsing
+ * ---------------------------------------------- */
+
+typedef struct
+{
+ DWORD from;
+ DWORD to;
+} OMAP_DATA;
+
+struct msc_debug_info
+{
+ struct module* module;
+ int nsect;
+ const IMAGE_SECTION_HEADER* sectp;
+ int nomap;
+ const OMAP_DATA* omapp;
+ const BYTE* root;
+};
+
+/* coff.c */
+extern BOOL coff_process_info(const struct msc_debug_info* msc_dbg);
+
+/* ===================================================
+ * The old CodeView stuff (for NB09 and NB11)
+ * =================================================== */
+
+#define sstModule 0x120
+#define sstTypes 0x121
+#define sstPublic 0x122
+#define sstPublicSym 0x123
+#define sstSymbols 0x124
+#define sstAlignSym 0x125
+#define sstSrcLnSeg 0x126
+#define sstSrcModule 0x127
+#define sstLibraries 0x128
+#define sstGlobalSym 0x129
+#define sstGlobalPub 0x12a
+#define sstGlobalTypes 0x12b
+#define sstMPC 0x12c
+#define sstSegMap 0x12d
+#define sstSegName 0x12e
+#define sstPreComp 0x12f
+#define sstFileIndex 0x133
+#define sstStaticSym 0x134
+
+/* overall structure information */
+typedef struct OMFSignature
+{
+ char Signature[4];
+ long filepos;
+} OMFSignature;
+
+typedef struct OMFSignatureRSDS
+{
+ char Signature[4];
+ GUID guid;
+ DWORD age;
+ CHAR name[1];
+} OMFSignatureRSDS;
+
+typedef struct _CODEVIEW_PDB_DATA
+{
+ char Signature[4];
+ long filepos;
+ DWORD timestamp;
+ DWORD age;
+ CHAR name[1];
+} CODEVIEW_PDB_DATA, *PCODEVIEW_PDB_DATA;
+
+typedef struct OMFDirHeader
+{
+ WORD cbDirHeader;
+ WORD cbDirEntry;
+ DWORD cDir;
+ DWORD lfoNextDir;
+ DWORD flags;
+} OMFDirHeader;
+
+typedef struct OMFDirEntry
+{
+ WORD SubSection;
+ WORD iMod;
+ DWORD lfo;
+ DWORD cb;
+} OMFDirEntry;
+
+/* sstModule subsection */
+
+typedef struct OMFSegDesc
+{
+ WORD Seg;
+ WORD pad;
+ DWORD Off;
+ DWORD cbSeg;
+} OMFSegDesc;
+
+typedef struct OMFModule
+{
+ WORD ovlNumber;
+ WORD iLib;
+ WORD cSeg;
+ char Style[2];
+/*
+ OMFSegDesc SegInfo[cSeg];
+ p_string Name;
+*/
+} OMFModule;
+
+typedef struct OMFGlobalTypes
+{
+ DWORD flags;
+ DWORD cTypes;
+/*
+ DWORD offset[cTypes];
+ types_record[];
+*/
+} OMFGlobalTypes;
+
+/* sstGlobalPub section */
+
+/* Header for symbol table */
+typedef struct OMFSymHash
+{
+ unsigned short symhash;
+ unsigned short addrhash;
+ unsigned long cbSymbol;
+ unsigned long cbHSym;
+ unsigned long cbHAddr;
+} OMFSymHash;
+
+/* sstSegMap section */
+
+typedef struct OMFSegMapDesc
+{
+ unsigned short flags;
+ unsigned short ovl;
+ unsigned short group;
+ unsigned short frame;
+ unsigned short iSegName;
+ unsigned short iClassName;
+ unsigned long offset;
+ unsigned long cbSeg;
+} OMFSegMapDesc;
+
+typedef struct OMFSegMap
+{
+ unsigned short cSeg;
+ unsigned short cSegLog;
+/* OMFSegMapDesc rgDesc[0];*/
+} OMFSegMap;
+
+
+/* sstSrcModule section */
+
+typedef struct OMFSourceLine
+{
+ unsigned short Seg;
+ unsigned short cLnOff;
+ unsigned long offset[1];
+ unsigned short lineNbr[1];
+} OMFSourceLine;
+
+typedef struct OMFSourceFile
+{
+ unsigned short cSeg;
+ unsigned short reserved;
+ unsigned long baseSrcLn[1];
+ unsigned short cFName;
+ char Name;
+} OMFSourceFile;
+
+typedef struct OMFSourceModule
+{
+ unsigned short cFile;
+ unsigned short cSeg;
+ unsigned long baseSrcFile[1];
+} OMFSourceModule;
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h
new file mode 100644
index 00000000..5f0e119f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/port.h
@@ -0,0 +1,484 @@
+/*
+ * Wine porting definitions
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_PORT_H
+#define __WINE_WINE_PORT_H
+
+#ifndef __WINE_CONFIG_H
+# error You must include config.h to use this header
+#endif
+
+#ifdef __WINE_BASETSD_H
+# error You must include port.h before all other headers
+#endif
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE /* for pread/pwrite */
+#endif
+#include <fcntl.h>
+#include <math.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_DIRECT_H
+# include <direct.h>
+#endif
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+#ifdef HAVE_PROCESS_H
+# include <process.h>
+#endif
+#include <string.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+
+/****************************************************************
+ * Type definitions
+ */
+
+#if !defined(_MSC_VER) && !defined(__int64)
+# if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)
+# define __int64 long
+# else
+# define __int64 long long
+# endif
+#endif
+
+#ifndef HAVE_MODE_T
+typedef int mode_t;
+#endif
+#ifndef HAVE_OFF_T
+typedef long off_t;
+#endif
+#ifndef HAVE_PID_T
+typedef int pid_t;
+#endif
+#ifndef HAVE_SIZE_T
+typedef unsigned int size_t;
+#endif
+#ifndef HAVE_SSIZE_T
+typedef int ssize_t;
+#endif
+#ifndef HAVE_FSBLKCNT_T
+typedef unsigned long fsblkcnt_t;
+#endif
+#ifndef HAVE_FSFILCNT_T
+typedef unsigned long fsfilcnt_t;
+#endif
+
+#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS
+struct statvfs
+{
+ unsigned long f_bsize;
+ unsigned long f_frsize;
+ fsblkcnt_t f_blocks;
+ fsblkcnt_t f_bfree;
+ fsblkcnt_t f_bavail;
+ fsfilcnt_t f_files;
+ fsfilcnt_t f_ffree;
+ fsfilcnt_t f_favail;
+ unsigned long f_fsid;
+ unsigned long f_flag;
+ unsigned long f_namemax;
+};
+#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */
+
+
+/****************************************************************
+ * Macro definitions
+ */
+
+#ifdef HAVE_DLFCN_H
+#include <dlfcn.h>
+#else
+#define RTLD_LAZY 0x001
+#define RTLD_NOW 0x002
+#define RTLD_GLOBAL 0x100
+#endif
+
+#ifdef HAVE_ONE_ARG_MKDIR
+#define mkdir(path,mode) mkdir(path)
+#endif
+
+#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE)
+#define ftruncate chsize
+#endif
+
+#if !defined(HAVE_POPEN) && defined(HAVE__POPEN)
+#define popen _popen
+#endif
+
+#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE)
+#define pclose _pclose
+#endif
+
+#if !defined(HAVE_STRDUP) && defined(HAVE__STRDUP)
+#define strdup _strdup
+#endif
+
+#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF)
+#define snprintf _snprintf
+#endif
+
+#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF)
+#define vsnprintf _vsnprintf
+#endif
+
+#if !defined(HAVE_STRTOLL) && defined(HAVE__STRTOI64)
+#define strtoll _strtoi64
+#endif
+
+#if !defined(HAVE_STRTOULL) && defined(HAVE__STRTOUI64)
+#define strtoull _strtoui64
+#endif
+
+#ifndef S_ISLNK
+# define S_ISLNK(mod) (0)
+#endif
+
+#ifndef S_ISSOCK
+# define S_ISSOCK(mod) (0)
+#endif
+
+#ifndef S_ISDIR
+# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR)
+#endif
+
+#ifndef S_ISCHR
+# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR)
+#endif
+
+#ifndef S_ISFIFO
+# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO)
+#endif
+
+#ifndef S_ISREG
+# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG)
+#endif
+
+/* So we open files in 64 bit access mode on Linux */
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK 0
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/****************************************************************
+ * Constants
+ */
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#ifndef M_PI_2
+#define M_PI_2 1.570796326794896619
+#endif
+
+#ifndef INFINITY
+static inline float __port_infinity(void)
+{
+ static const unsigned __inf_bytes = 0x7f800000;
+ return *(const float *)&__inf_bytes;
+}
+#define INFINITY __port_infinity()
+#endif
+
+#ifndef NAN
+static inline float __port_nan(void)
+{
+ static const unsigned __nan_bytes = 0x7fc00000;
+ return *(const float *)&__nan_bytes;
+}
+#define NAN __port_nan()
+#endif
+
+
+/****************************************************************
+ * Function definitions (only when using libwine_port)
+ */
+
+#ifndef NO_LIBWINE_PORT
+
+#ifndef HAVE_FSTATVFS
+int fstatvfs( int fd, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_GETOPT_LONG_ONLY
+extern char *optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+struct option;
+
+#ifndef HAVE_STRUCT_OPTION_NAME
+struct option
+{
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+};
+#endif
+
+extern int getopt_long (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind);
+extern int getopt_long_only (int ___argc, char *const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind);
+#endif /* HAVE_GETOPT_LONG_ONLY */
+
+#ifndef HAVE_FFS
+int ffs( int x );
+#endif
+
+#ifndef HAVE_ISINF
+int isinf(double x);
+#endif
+
+#ifndef HAVE_ISNAN
+int isnan(double x);
+#endif
+
+#ifndef HAVE_LSTAT
+int lstat(const char *file_name, struct stat *buf);
+#endif /* HAVE_LSTAT */
+
+#ifndef HAVE_MEMMOVE
+void *memmove(void *dest, const void *src, size_t len);
+#endif /* !defined(HAVE_MEMMOVE) */
+
+#ifndef HAVE_POLL
+struct pollfd
+{
+ int fd;
+ short events;
+ short revents;
+};
+#define POLLIN 0x01
+#define POLLPRI 0x02
+#define POLLOUT 0x04
+#define POLLERR 0x08
+#define POLLHUP 0x10
+#define POLLNVAL 0x20
+int poll( struct pollfd *fds, unsigned int count, int timeout );
+#endif /* HAVE_POLL */
+
+#ifndef HAVE_PREAD
+ssize_t pread( int fd, void *buf, size_t count, off_t offset );
+#endif /* HAVE_PREAD */
+
+#ifndef HAVE_PWRITE
+ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset );
+#endif /* HAVE_PWRITE */
+
+#ifndef HAVE_READLINK
+int readlink( const char *path, char *buf, size_t size );
+#endif /* HAVE_READLINK */
+
+#ifndef HAVE_STATVFS
+int statvfs( const char *path, struct statvfs *buf );
+#endif
+
+#ifndef HAVE_STRNCASECMP
+# ifndef HAVE__STRNICMP
+int strncasecmp(const char *str1, const char *str2, size_t n);
+# else
+# define strncasecmp _strnicmp
+# endif
+#endif /* !defined(HAVE_STRNCASECMP) */
+
+#ifndef HAVE_STRERROR
+const char *strerror(int err);
+#endif /* !defined(HAVE_STRERROR) */
+
+#ifndef HAVE_STRCASECMP
+# ifndef HAVE__STRICMP
+int strcasecmp(const char *str1, const char *str2);
+# else
+# define strcasecmp _stricmp
+# endif
+#endif /* !defined(HAVE_STRCASECMP) */
+
+#ifndef HAVE_SYMLINK
+int symlink(const char *from, const char *to);
+#endif
+
+#ifndef HAVE_USLEEP
+int usleep (unsigned int useconds);
+#endif /* !defined(HAVE_USLEEP) */
+
+#ifdef __i386__
+static inline void *memcpy_unaligned( void *dst, const void *src, size_t size )
+{
+ return memcpy( dst, src, size );
+}
+#else
+extern void *memcpy_unaligned( void *dst, const void *src, size_t size );
+#endif /* __i386__ */
+
+extern int mkstemps(char *template, int suffix_len);
+
+/* Process creation flags */
+#ifndef _P_WAIT
+# define _P_WAIT 0
+# define _P_NOWAIT 1
+# define _P_OVERLAY 2
+# define _P_NOWAITO 3
+# define _P_DETACH 4
+#endif
+#ifndef HAVE__SPAWNVP
+extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]);
+#endif
+
+/* Interlocked functions */
+
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+
+static inline int interlocked_cmpxchg( int *dest, int xchg, int compare )
+{
+ int ret;
+ __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+ return ret;
+}
+
+static inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare )
+{
+ void *ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( "lock; cmpxchgq %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#else
+ __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
+ : "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" );
+#endif
+ return ret;
+}
+
+static inline int interlocked_xchg( int *dest, int val )
+{
+ int ret;
+ __asm__ __volatile__( "lock; xchgl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+ return ret;
+}
+
+static inline void *interlocked_xchg_ptr( void **dest, void *val )
+{
+ void *ret;
+#ifdef __x86_64__
+ __asm__ __volatile__( "lock; xchgq %0,(%1)"
+ : "=r" (ret) :"r" (dest), "0" (val) : "memory" );
+#else
+ __asm__ __volatile__( "lock; xchgl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (val) : "memory" );
+#endif
+ return ret;
+}
+
+static inline int interlocked_xchg_add( int *dest, int incr )
+{
+ int ret;
+ __asm__ __volatile__( "lock; xaddl %0,(%1)"
+ : "=r" (ret) : "r" (dest), "0" (incr) : "memory" );
+ return ret;
+}
+
+#ifdef __x86_64__
+static inline unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+ __int64 xchg_low, __int64 *compare )
+{
+ unsigned char ret;
+ __asm__ __volatile__( "lock cmpxchg16b %0; setz %b2"
+ : "=m" (dest[0]), "=m" (dest[1]), "=r" (ret),
+ "=a" (compare[0]), "=d" (compare[1])
+ : "m" (dest[0]), "m" (dest[1]), "3" (compare[0]), "4" (compare[1]),
+ "c" (xchg_high), "b" (xchg_low) );
+ return ret;
+}
+#endif
+
+#else /* __GNUC__ */
+
+extern int interlocked_cmpxchg( int *dest, int xchg, int compare );
+extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare );
+extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare );
+extern int interlocked_xchg( int *dest, int val );
+extern void *interlocked_xchg_ptr( void **dest, void *val );
+extern int interlocked_xchg_add( int *dest, int incr );
+#if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64)
+extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
+ __int64 xchg_low, __int64 *compare );
+#endif
+
+#endif /* __GNUC__ */
+
+#else /* NO_LIBWINE_PORT */
+
+#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable
+
+#define ffs __WINE_NOT_PORTABLE(ffs)
+#define fstatvfs __WINE_NOT_PORTABLE(fstatvfs)
+#define getopt_long __WINE_NOT_PORTABLE(getopt_long)
+#define getopt_long_only __WINE_NOT_PORTABLE(getopt_long_only)
+#define interlocked_cmpxchg __WINE_NOT_PORTABLE(interlocked_cmpxchg)
+#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr)
+#define interlocked_xchg __WINE_NOT_PORTABLE(interlocked_xchg)
+#define interlocked_xchg_ptr __WINE_NOT_PORTABLE(interlocked_xchg_ptr)
+#define interlocked_xchg_add __WINE_NOT_PORTABLE(interlocked_xchg_add)
+#define lstat __WINE_NOT_PORTABLE(lstat)
+#define memcpy_unaligned __WINE_NOT_PORTABLE(memcpy_unaligned)
+#undef memmove
+#define memmove __WINE_NOT_PORTABLE(memmove)
+#define pread __WINE_NOT_PORTABLE(pread)
+#define pwrite __WINE_NOT_PORTABLE(pwrite)
+#define spawnvp __WINE_NOT_PORTABLE(spawnvp)
+#define statvfs __WINE_NOT_PORTABLE(statvfs)
+#define strcasecmp __WINE_NOT_PORTABLE(strcasecmp)
+#define strerror __WINE_NOT_PORTABLE(strerror)
+#define strncasecmp __WINE_NOT_PORTABLE(strncasecmp)
+#define usleep __WINE_NOT_PORTABLE(usleep)
+
+#endif /* NO_LIBWINE_PORT */
+
+#endif /* !defined(__WINE_WINE_PORT_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h
new file mode 100644
index 00000000..4488a01d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rbtree.h
@@ -0,0 +1,351 @@
+/*
+ * Red-black search tree support
+ *
+ * Copyright 2009 Henri Verbeet
+ * Copyright 2009 Andrew Riedi
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_RBTREE_H
+#define __WINE_WINE_RBTREE_H
+
+#define WINE_RB_ENTRY_VALUE(element, type, field) \
+ ((type *)((char *)(element) - offsetof(type, field)))
+
+struct wine_rb_entry
+{
+ struct wine_rb_entry *left;
+ struct wine_rb_entry *right;
+ unsigned int flags;
+};
+
+struct wine_rb_stack
+{
+ struct wine_rb_entry ***entries;
+ size_t count;
+ size_t size;
+};
+
+struct wine_rb_functions
+{
+ void *(*alloc)(size_t size);
+ void *(*realloc)(void *ptr, size_t size);
+ void (*free)(void *ptr);
+ int (*compare)(const void *key, const struct wine_rb_entry *entry);
+};
+
+struct wine_rb_tree
+{
+ const struct wine_rb_functions *functions;
+ struct wine_rb_entry *root;
+ struct wine_rb_stack stack;
+};
+
+typedef void (wine_rb_traverse_func_t)(struct wine_rb_entry *entry, void *context);
+
+#define WINE_RB_FLAG_RED 0x1
+#define WINE_RB_FLAG_STOP 0x2
+#define WINE_RB_FLAG_TRAVERSED_LEFT 0x4
+#define WINE_RB_FLAG_TRAVERSED_RIGHT 0x8
+
+static inline void wine_rb_stack_clear(struct wine_rb_stack *stack)
+{
+ stack->count = 0;
+}
+
+static inline void wine_rb_stack_push(struct wine_rb_stack *stack, struct wine_rb_entry **entry)
+{
+ stack->entries[stack->count++] = entry;
+}
+
+static inline int wine_rb_ensure_stack_size(struct wine_rb_tree *tree, size_t size)
+{
+ struct wine_rb_stack *stack = &tree->stack;
+
+ if (size > stack->size)
+ {
+ size_t new_size = stack->size << 1;
+ struct wine_rb_entry ***new_entries = tree->functions->realloc(stack->entries,
+ new_size * sizeof(*stack->entries));
+
+ if (!new_entries) return -1;
+
+ stack->entries = new_entries;
+ stack->size = new_size;
+ }
+
+ return 0;
+}
+
+static inline int wine_rb_is_red(struct wine_rb_entry *entry)
+{
+ return entry && (entry->flags & WINE_RB_FLAG_RED);
+}
+
+static inline void wine_rb_rotate_left(struct wine_rb_entry **entry)
+{
+ struct wine_rb_entry *e = *entry;
+ struct wine_rb_entry *right = e->right;
+
+ e->right = right->left;
+ right->left = e;
+ right->flags &= ~WINE_RB_FLAG_RED;
+ right->flags |= e->flags & WINE_RB_FLAG_RED;
+ e->flags |= WINE_RB_FLAG_RED;
+ *entry = right;
+}
+
+static inline void wine_rb_rotate_right(struct wine_rb_entry **entry)
+{
+ struct wine_rb_entry *e = *entry;
+ struct wine_rb_entry *left = e->left;
+
+ e->left = left->right;
+ left->right = e;
+ left->flags &= ~WINE_RB_FLAG_RED;
+ left->flags |= e->flags & WINE_RB_FLAG_RED;
+ e->flags |= WINE_RB_FLAG_RED;
+ *entry = left;
+}
+
+static inline void wine_rb_flip_color(struct wine_rb_entry *entry)
+{
+ entry->flags ^= WINE_RB_FLAG_RED;
+ entry->left->flags ^= WINE_RB_FLAG_RED;
+ entry->right->flags ^= WINE_RB_FLAG_RED;
+}
+
+static inline void wine_rb_fixup(struct wine_rb_stack *stack)
+{
+ while (stack->count)
+ {
+ struct wine_rb_entry **entry = stack->entries[stack->count - 1];
+
+ if ((*entry)->flags & WINE_RB_FLAG_STOP)
+ {
+ (*entry)->flags &= ~WINE_RB_FLAG_STOP;
+ return;
+ }
+
+ if (wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->left)) wine_rb_rotate_left(entry);
+ if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->left->left)) wine_rb_rotate_right(entry);
+ if (wine_rb_is_red((*entry)->left) && wine_rb_is_red((*entry)->right)) wine_rb_flip_color(*entry);
+ --stack->count;
+ }
+}
+
+static inline void wine_rb_move_red_left(struct wine_rb_entry **entry)
+{
+ wine_rb_flip_color(*entry);
+ if (wine_rb_is_red((*entry)->right->left))
+ {
+ wine_rb_rotate_right(&(*entry)->right);
+ wine_rb_rotate_left(entry);
+ wine_rb_flip_color(*entry);
+ }
+}
+
+static inline void wine_rb_move_red_right(struct wine_rb_entry **entry)
+{
+ wine_rb_flip_color(*entry);
+ if (wine_rb_is_red((*entry)->left->left))
+ {
+ wine_rb_rotate_right(entry);
+ wine_rb_flip_color(*entry);
+ }
+}
+
+static inline void wine_rb_postorder(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+ struct wine_rb_entry **entry;
+
+ if (!tree->root) return;
+
+ for (entry = &tree->root;;)
+ {
+ struct wine_rb_entry *e = *entry;
+
+ if (e->left && !(e->flags & WINE_RB_FLAG_TRAVERSED_LEFT))
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ e->flags |= WINE_RB_FLAG_TRAVERSED_LEFT;
+ entry = &e->left;
+ continue;
+ }
+
+ if (e->right && !(e->flags & WINE_RB_FLAG_TRAVERSED_RIGHT))
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ e->flags |= WINE_RB_FLAG_TRAVERSED_RIGHT;
+ entry = &e->right;
+ continue;
+ }
+
+ e->flags &= ~(WINE_RB_FLAG_TRAVERSED_LEFT | WINE_RB_FLAG_TRAVERSED_RIGHT);
+ callback(e, context);
+
+ if (!tree->stack.count) break;
+ entry = tree->stack.entries[--tree->stack.count];
+ }
+}
+
+static inline int wine_rb_init(struct wine_rb_tree *tree, const struct wine_rb_functions *functions)
+{
+ tree->functions = functions;
+ tree->root = NULL;
+
+ tree->stack.entries = functions->alloc(16 * sizeof(*tree->stack.entries));
+ if (!tree->stack.entries) return -1;
+ tree->stack.size = 16;
+ tree->stack.count = 0;
+
+ return 0;
+}
+
+static inline void wine_rb_for_each_entry(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+ wine_rb_postorder(tree, callback, context);
+}
+
+static inline void wine_rb_destroy(struct wine_rb_tree *tree, wine_rb_traverse_func_t *callback, void *context)
+{
+ /* Note that we use postorder here because the callback will likely free the entry. */
+ if (callback) wine_rb_postorder(tree, callback, context);
+
+ tree->root = NULL;
+ tree->functions->free(tree->stack.entries);
+}
+
+static inline struct wine_rb_entry *wine_rb_get(const struct wine_rb_tree *tree, const void *key)
+{
+ struct wine_rb_entry *entry = tree->root;
+ while (entry)
+ {
+ int c = tree->functions->compare(key, entry);
+ if (!c) return entry;
+ entry = c < 0 ? entry->left : entry->right;
+ }
+ return NULL;
+}
+
+static inline int wine_rb_put(struct wine_rb_tree *tree, const void *key, struct wine_rb_entry *entry)
+{
+ struct wine_rb_entry **parent = &tree->root;
+ size_t black_height = 1;
+
+ while (*parent)
+ {
+ int c;
+
+ if (!wine_rb_is_red(*parent)) ++black_height;
+
+ wine_rb_stack_push(&tree->stack, parent);
+
+ c = tree->functions->compare(key, *parent);
+ if (!c)
+ {
+ wine_rb_stack_clear(&tree->stack);
+ return -1;
+ }
+ else if (c < 0) parent = &(*parent)->left;
+ else parent = &(*parent)->right;
+ }
+
+ /* After insertion, the path length to any node should be <= (black_height + 1) * 2. */
+ if (wine_rb_ensure_stack_size(tree, black_height << 1) == -1)
+ {
+ wine_rb_stack_clear(&tree->stack);
+ return -1;
+ }
+
+ entry->flags = WINE_RB_FLAG_RED;
+ entry->left = NULL;
+ entry->right = NULL;
+ *parent = entry;
+
+ wine_rb_fixup(&tree->stack);
+ tree->root->flags &= ~WINE_RB_FLAG_RED;
+
+ return 0;
+}
+
+static inline void wine_rb_remove(struct wine_rb_tree *tree, const void *key)
+{
+ struct wine_rb_entry **entry = &tree->root;
+
+ while (*entry)
+ {
+ if (tree->functions->compare(key, *entry) < 0)
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ if (!wine_rb_is_red((*entry)->left) && !wine_rb_is_red((*entry)->left->left)) wine_rb_move_red_left(entry);
+ entry = &(*entry)->left;
+ }
+ else
+ {
+ if (wine_rb_is_red((*entry)->left)) wine_rb_rotate_right(entry);
+ if (!tree->functions->compare(key, *entry) && !(*entry)->right)
+ {
+ *entry = NULL;
+ break;
+ }
+ if (!wine_rb_is_red((*entry)->right) && !wine_rb_is_red((*entry)->right->left))
+ wine_rb_move_red_right(entry);
+ if (!tree->functions->compare(key, *entry))
+ {
+ struct wine_rb_entry **e = &(*entry)->right;
+ struct wine_rb_entry *m = *e;
+ while (m->left) m = m->left;
+
+ wine_rb_stack_push(&tree->stack, entry);
+ (*entry)->flags |= WINE_RB_FLAG_STOP;
+
+ while ((*e)->left)
+ {
+ wine_rb_stack_push(&tree->stack, e);
+ if (!wine_rb_is_red((*e)->left) && !wine_rb_is_red((*e)->left->left)) wine_rb_move_red_left(e);
+ e = &(*e)->left;
+ }
+ *e = NULL;
+ wine_rb_fixup(&tree->stack);
+
+ *m = **entry;
+ *entry = m;
+
+ break;
+ }
+ else
+ {
+ wine_rb_stack_push(&tree->stack, entry);
+ entry = &(*entry)->right;
+ }
+ }
+ }
+
+ wine_rb_fixup(&tree->stack);
+ if (tree->root) tree->root->flags &= ~WINE_RB_FLAG_RED;
+}
+
+#endif /* __WINE_WINE_RBTREE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h
new file mode 100644
index 00000000..53dd1633
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/rpcfc.h
@@ -0,0 +1,205 @@
+/*
+ * RPC format chars, as found by studying MIDL output.
+ * Some, but not all, usage of these are explained on MSDN.
+ */
+
+#ifndef __WINE_RPCFC_H
+#define __WINE_RPCFC_H
+
+/* base types */
+#define RPC_FC_BYTE 0x01
+#define RPC_FC_CHAR 0x02
+#define RPC_FC_SMALL 0x03
+#define RPC_FC_USMALL 0x04
+#define RPC_FC_WCHAR 0x05
+#define RPC_FC_SHORT 0x06
+#define RPC_FC_USHORT 0x07
+#define RPC_FC_LONG 0x08
+#define RPC_FC_ULONG 0x09
+#define RPC_FC_FLOAT 0x0a
+#define RPC_FC_HYPER 0x0b
+#define RPC_FC_DOUBLE 0x0c
+#define RPC_FC_ENUM16 0x0d
+#define RPC_FC_ENUM32 0x0e
+#define RPC_FC_IGNORE 0x0f
+#define RPC_FC_ERROR_STATUS_T 0x10
+
+/* other stuff */
+#define RPC_FC_RP 0x11 /* reference pointer */
+#define RPC_FC_UP 0x12 /* unique pointer */
+#define RPC_FC_OP 0x13 /* unique pointer in object ? */
+#define RPC_FC_FP 0x14 /* full pointer */
+
+#define RPC_FC_STRUCT 0x15 /* simple structure */
+/* FC_STRUCT: align-1, NdrFcShort(size), fields */
+
+#define RPC_FC_PSTRUCT 0x16 /* simple structure w/ pointers */
+/* FC_PTRUCT: align-1, NdrFcShort(size), ptrs, fields */
+
+#define RPC_FC_CSTRUCT 0x17 /* conformant structure */
+
+#define RPC_FC_CPSTRUCT 0x18 /* conformant structure w/ pointers */
+
+#define RPC_FC_CVSTRUCT 0x19 /* conformant varying struct */
+
+#define RPC_FC_BOGUS_STRUCT 0x1a /* complex structure */
+
+#define RPC_FC_CARRAY 0x1b /* conformant array */
+/* FC_CARRAY: align-1, NdrFcShort(size), conformance, ptrs, fields */
+#define RPC_FC_CVARRAY 0x1c /* conformant varying array */
+/* FC_CARRAY: align-1, NdrFcShort(size), conformance, variance, ptrs, fields */
+#define RPC_FC_SMFARRAY 0x1d /* small (<64K) fixed array */
+/* FC_SMFARRAY: align-1, NdrFcShort(size), ptrs, fields */
+
+#define RPC_FC_LGFARRAY 0x1e /* large (>= 64k) fixed array */
+
+#define RPC_FC_SMVARRAY 0x1f /* small (<64k) varying array */
+
+#define RPC_FC_LGVARRAY 0x20 /* large (>= 64k) varying array */
+
+#define RPC_FC_BOGUS_ARRAY 0x21 /* complex array */
+
+#define RPC_FC_C_CSTRING 0x22
+#define RPC_FC_C_SSTRING 0x24
+#define RPC_FC_C_WSTRING 0x25
+#define RPC_FC_CSTRING 0x26
+#define RPC_FC_SSTRING 0x28
+#define RPC_FC_WSTRING 0x29
+
+#define RPC_FC_ENCAPSULATED_UNION 0x2a
+#define RPC_FC_NON_ENCAPSULATED_UNION 0x2b
+
+#define RPC_FC_BYTE_COUNT_POINTER 0x2c /* [byte_count] ACF attribute */
+
+#define RPC_FC_TRANSMIT_AS 0x2d
+#define RPC_FC_REPRESENT_AS 0x2e
+
+#define RPC_FC_IP 0x2f /* interface pointer */
+/* FC_IP: FC_CONSTANT_IID iid */
+/* FC_IP: FC_PAD correlation */
+
+#define RPC_FC_BIND_CONTEXT 0x30
+
+#define RPC_FC_BIND_GENERIC 0x31
+#define RPC_FC_BIND_PRIMITIVE 0x32
+#define RPC_FC_AUTO_HANDLE 0x33
+#define RPC_FC_CALLBACK_HANDLE 0x34
+
+#define RPC_FC_POINTER 0x36
+
+#define RPC_FC_ALIGNM2 0x37
+#define RPC_FC_ALIGNM4 0x38
+#define RPC_FC_ALIGNM8 0x39
+
+#define RPC_FC_STRUCTPAD1 0x3d
+#define RPC_FC_STRUCTPAD2 0x3e
+#define RPC_FC_STRUCTPAD3 0x3f
+#define RPC_FC_STRUCTPAD4 0x40
+#define RPC_FC_STRUCTPAD5 0x41
+#define RPC_FC_STRUCTPAD6 0x42
+#define RPC_FC_STRUCTPAD7 0x43
+
+#define RPC_FC_STRING_SIZED 0x44
+
+#define RPC_FC_NO_REPEAT 0x46
+#define RPC_FC_FIXED_REPEAT 0x47
+#define RPC_FC_VARIABLE_REPEAT 0x48
+#define RPC_FC_FIXED_OFFSET 0x49
+#define RPC_FC_VARIABLE_OFFSET 0x4a
+
+#define RPC_FC_PP 0x4b /* pointer layout */
+/* FC_PP: FC_PAD layouts */
+/* layouts: FC_NO_REPEAT FC_PAD instance */
+/* instance: NdrFcShort(memofs), NdrFcShort(bufofs), desc */
+
+#define RPC_FC_EMBEDDED_COMPLEX 0x4c
+/* FC_EMBEDDED_COMPLEX: padding, NdrFcShort(typeofs) */
+
+#define RPC_FC_IN_PARAM 0x4d
+/* FC_IN_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_IN_PARAM_BASETYPE 0x4e
+/* FC_IN_PARAM_BASETYPE: basetype */
+#define RPC_FC_IN_PARAM_NO_FREE_INST 0x4f
+#define RPC_FC_IN_OUT_PARAM 0x50
+/* FC_IN_OUT_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_OUT_PARAM 0x51
+/* FC_OUT_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_RETURN_PARAM 0x52
+/* FC_RETURN_PARAM: stacksiz, NdrFcShort(typeofs) */
+#define RPC_FC_RETURN_PARAM_BASETYPE 0x53
+/* FC_RETURN_PARAM_BASETYPE: basetype */
+
+#define RPC_FC_DEREFERENCE 0x54
+#define RPC_FC_DIV_2 0x55
+#define RPC_FC_MULT_2 0x56
+#define RPC_FC_ADD_1 0x57
+#define RPC_FC_SUB_1 0x58
+
+#define RPC_FC_CALLBACK 0x59
+
+#define RPC_FC_CONSTANT_IID 0x5a
+/* FC_CONSTANT_IID: NdrFcLong(), NdrFcShort(), NdrFcShort(), 8x () */
+
+#define RPC_FC_END 0x5b
+#define RPC_FC_PAD 0x5c
+
+#define RPC_FC_USER_MARSHAL 0xb4
+
+#define RPC_FC_RANGE 0xb7
+
+#define RPC_FC_INT3264 0xb8
+#define RPC_FC_UINT3264 0xb9
+
+/* FC_RP/UP/OP/FP: flags, NdrFcShort(typeofs)/basetype */
+#define RPC_FC_P_ALLOCALLNODES 0x01
+#define RPC_FC_P_DONTFREE 0x02
+#define RPC_FC_P_ONSTACK 0x04 /* [alloced_on_stack] */
+#define RPC_FC_P_SIMPLEPOINTER 0x08 /* [simple_pointer] */
+#define RPC_FC_P_DEREF 0x10
+
+#define RPC_FC_BIND_EXPLICIT 0x00
+
+/* proc header: oiflags, NdrFcLong(rpcflags), NdrFcShort(procnum), NdrFcShort(stacksiz),
+ * oi2 header: NdrFcShort(clientbuf), NdrFcShort(servbuf), oi2flags, parmcount
+ * oi2 parameters: NdrFcShort(flags), NdrFcShort(stackofs), NdrFcShort(typeofs)/basetype */
+#define RPC_FC_PROC_OIF_FULLPTR 0x01
+#define RPC_FC_PROC_OIF_RPCSSALLOC 0x02
+#define RPC_FC_PROC_OIF_OBJECT 0x04
+#define RPC_FC_PROC_OIF_RPCFLAGS 0x08
+#define RPC_FC_PROC_OIF_OBJ_V2 0x20
+#define RPC_FC_PROC_OIF_HAS_COMM_OR_FAULT 0x20
+#define RPC_FC_PROC_OIF_NEWINIT 0x40
+
+#define RPC_FC_PROC_PF_MUSTSIZE 0x0001
+#define RPC_FC_PROC_PF_MUSTFREE 0x0002
+#define RPC_FC_PROC_PF_PIPE 0x0004
+#define RPC_FC_PROC_PF_IN 0x0008
+#define RPC_FC_PROC_PF_OUT 0x0010
+#define RPC_FC_PROC_PF_RETURN 0x0020
+#define RPC_FC_PROC_PF_BASETYPE 0x0040
+#define RPC_FC_PROC_PF_BYVAL 0x0080
+#define RPC_FC_PROC_PF_SIMPLEREF 0x0100
+#define RPC_FC_PROC_PF_DONTFREEINST 0x0200
+#define RPC_FC_PROC_PF_SAVEASYNC 0x0400
+#define RPC_FC_PROC_PF_SRVALLOCSIZE 0xe000 /* in 8 byte units */
+
+/* correlation types */
+#define RPC_FC_NORMAL_CONFORMANCE 0x00
+#define RPC_FC_POINTER_CONFORMANCE 0x10
+#define RPC_FC_TOP_LEVEL_CONFORMANCE 0x20
+#define RPC_FC_CONSTANT_CONFORMANCE 0x40
+#define RPC_FC_TOP_LEVEL_MULTID_CONFORMANCE 0x80
+
+/* user marshal flags */
+#define USER_MARSHAL_UNIQUE 0x80
+#define USER_MARSHAL_REF 0x40
+#define USER_MARSHAL_POINTER 0xc0
+#define USER_MARSHAL_IID 0x20
+
+/* context handle flags */
+#define NDR_CONTEXT_HANDLE_CANNOT_BE_NULL 0x01
+#define NDR_CONTEXT_HANDLE_SERIALIZE 0x02
+#define NDR_CONTEXT_HANDLE_NO_SERIALIZE 0x04
+#define NDR_STRICT_CONTEXT_HANDLE 0x08
+
+#endif /* __WINE_RPCFC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h
new file mode 100644
index 00000000..88d1aebb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server.h
@@ -0,0 +1,151 @@
+/*
+ * Definitions for the client side of the Wine server communication
+ *
+ * Copyright (C) 1998 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_SERVER_H
+#define __WINE_WINE_SERVER_H
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winternl.h>
+#include <wine/server_protocol.h>
+
+/* client communication functions */
+
+struct __server_iovec
+{
+ const void *ptr;
+ data_size_t size;
+};
+
+#define __SERVER_MAX_DATA 5
+
+struct __server_request_info
+{
+ union
+ {
+ union generic_request req; /* request structure */
+ union generic_reply reply; /* reply structure */
+ } u;
+ unsigned int data_count; /* count of request data pointers */
+ void *reply_data; /* reply data pointer */
+ struct __server_iovec data[__SERVER_MAX_DATA]; /* request variable size data */
+};
+
+extern unsigned int wine_server_call( void *req_ptr );
+extern void CDECL wine_server_send_fd( int fd );
+extern int CDECL wine_server_fd_to_handle( int fd, unsigned int access, unsigned int attributes, HANDLE *handle );
+extern int CDECL wine_server_handle_to_fd( HANDLE handle, unsigned int access, int *unix_fd, unsigned int *options );
+extern void CDECL wine_server_release_fd( HANDLE handle, int unix_fd );
+
+/* do a server call and set the last error code */
+static inline unsigned int wine_server_call_err( void *req_ptr )
+{
+ unsigned int res = wine_server_call( req_ptr );
+ if (res) SetLastError( RtlNtStatusToDosError(res) );
+ return res;
+}
+
+/* get the size of the variable part of the returned reply */
+static inline data_size_t wine_server_reply_size( const void *reply )
+{
+ return ((const struct reply_header *)reply)->reply_size;
+}
+
+/* add some data to be sent along with the request */
+static inline void wine_server_add_data( void *req_ptr, const void *ptr, data_size_t size )
+{
+ struct __server_request_info * const req = req_ptr;
+ if (size)
+ {
+ req->data[req->data_count].ptr = ptr;
+ req->data[req->data_count++].size = size;
+ req->u.req.request_header.request_size += size;
+ }
+}
+
+/* set the pointer and max size for the reply var data */
+static inline void wine_server_set_reply( void *req_ptr, void *ptr, data_size_t max_size )
+{
+ struct __server_request_info * const req = req_ptr;
+ req->reply_data = ptr;
+ req->u.req.request_header.reply_size = max_size;
+}
+
+/* convert an object handle to a server handle */
+static inline obj_handle_t wine_server_obj_handle( HANDLE handle )
+{
+ if ((int)(INT_PTR)handle != (INT_PTR)handle) return 0xfffffff0; /* some invalid handle */
+ return (INT_PTR)handle;
+}
+
+/* convert a user handle to a server handle */
+static inline user_handle_t wine_server_user_handle( HANDLE handle )
+{
+ return (UINT_PTR)handle;
+}
+
+/* convert a server handle to a generic handle */
+static inline HANDLE wine_server_ptr_handle( obj_handle_t handle )
+{
+ return (HANDLE)(INT_PTR)(int)handle;
+}
+
+/* convert a client pointer to a server client_ptr_t */
+static inline client_ptr_t wine_server_client_ptr( const void *ptr )
+{
+ return (client_ptr_t)(ULONG_PTR)ptr;
+}
+
+/* convert a server client_ptr_t to a real pointer */
+static inline void *wine_server_get_ptr( client_ptr_t ptr )
+{
+ return (void *)(ULONG_PTR)ptr;
+}
+
+
+/* macros for server requests */
+
+#define SERVER_START_REQ(type) \
+ do { \
+ struct __server_request_info __req; \
+ struct type##_request * const req = &__req.u.req.type##_request; \
+ const struct type##_reply * const reply = &__req.u.reply.type##_reply; \
+ memset( &__req.u.req, 0, sizeof(__req.u.req) ); \
+ __req.u.req.request_header.req = REQ_##type; \
+ __req.data_count = 0; \
+ (void)reply; \
+ do
+
+#define SERVER_END_REQ \
+ while(0); \
+ } while(0)
+
+
+#endif /* __WINE_WINE_SERVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h
new file mode 100644
index 00000000..b98e6d8f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/server_protocol.h
@@ -0,0 +1,5828 @@
+/*
+ * Wine server protocol definitions
+ *
+ * This file is automatically generated; DO NO EDIT!
+ * Edit server/protocol.def instead and re-run tools/make_requests
+ */
+
+#ifndef __WINE_WINE_SERVER_PROTOCOL_H
+#define __WINE_WINE_SERVER_PROTOCOL_H
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include <windef.h>
+#include <winbase.h>
+
+typedef unsigned int obj_handle_t;
+typedef unsigned int user_handle_t;
+typedef unsigned int atom_t;
+typedef unsigned int process_id_t;
+typedef unsigned int thread_id_t;
+typedef unsigned int data_size_t;
+typedef unsigned int ioctl_code_t;
+typedef unsigned __int64 lparam_t;
+typedef unsigned __int64 apc_param_t;
+typedef unsigned __int64 mem_size_t;
+typedef unsigned __int64 file_pos_t;
+typedef unsigned __int64 client_ptr_t;
+typedef unsigned __int64 affinity_t;
+typedef client_ptr_t mod_handle_t;
+
+struct request_header
+{
+ int req;
+ data_size_t request_size;
+ data_size_t reply_size;
+};
+
+struct reply_header
+{
+ unsigned int error;
+ data_size_t reply_size;
+};
+
+
+
+struct request_max_size
+{
+ int pad[16];
+};
+
+#define FIRST_USER_HANDLE 0x0020
+#define LAST_USER_HANDLE 0xffef
+
+
+
+typedef union
+{
+ int code;
+ struct
+ {
+ int code;
+ int first;
+ unsigned int exc_code;
+ unsigned int flags;
+ client_ptr_t record;
+ client_ptr_t address;
+ int nb_params;
+ int __pad;
+ client_ptr_t params[15];
+ } exception;
+ struct
+ {
+ int code;
+ obj_handle_t handle;
+ client_ptr_t teb;
+ client_ptr_t start;
+ } create_thread;
+ struct
+ {
+ int code;
+ obj_handle_t file;
+ obj_handle_t process;
+ obj_handle_t thread;
+ mod_handle_t base;
+ int dbg_offset;
+ int dbg_size;
+ client_ptr_t teb;
+ client_ptr_t start;
+ client_ptr_t name;
+ int unicode;
+ } create_process;
+ struct
+ {
+ int code;
+ int exit_code;
+ } exit;
+ struct
+ {
+ int code;
+ obj_handle_t handle;
+ mod_handle_t base;
+ int dbg_offset;
+ int dbg_size;
+ client_ptr_t name;
+ int unicode;
+ } load_dll;
+ struct
+ {
+ int code;
+ int __pad;
+ mod_handle_t base;
+ } unload_dll;
+ struct
+ {
+ int code;
+ data_size_t length;
+ client_ptr_t string;
+ } output_string;
+ struct
+ {
+ int code;
+ int error;
+ int type;
+ } rip_info;
+} debug_event_t;
+
+
+enum cpu_type
+{
+ CPU_x86, CPU_x86_64, CPU_POWERPC, CPU_ARM, CPU_ARM64
+};
+typedef int cpu_type_t;
+
+
+typedef struct
+{
+ cpu_type_t cpu;
+ unsigned int flags;
+ union
+ {
+ struct { unsigned int eip, ebp, esp, eflags, cs, ss; } i386_regs;
+ struct { unsigned __int64 rip, rbp, rsp;
+ unsigned int cs, ss, flags, __pad; } x86_64_regs;
+ struct { unsigned int iar, msr, ctr, lr, dar, dsisr, trap, __pad; } powerpc_regs;
+ struct { unsigned int sp, lr, pc, cpsr; } arm_regs;
+ struct { unsigned __int64 sp, pc, pstate; } arm64_regs;
+ } ctl;
+ union
+ {
+ struct { unsigned int eax, ebx, ecx, edx, esi, edi; } i386_regs;
+ struct { unsigned __int64 rax,rbx, rcx, rdx, rsi, rdi,
+ r8, r9, r10, r11, r12, r13, r14, r15; } x86_64_regs;
+ struct { unsigned int gpr[32], cr, xer; } powerpc_regs;
+ struct { unsigned int r[13]; } arm_regs;
+ struct { unsigned __int64 x[31]; } arm64_regs;
+ } integer;
+ union
+ {
+ struct { unsigned int ds, es, fs, gs; } i386_regs;
+ struct { unsigned int ds, es, fs, gs; } x86_64_regs;
+ } seg;
+ union
+ {
+ struct { unsigned int ctrl, status, tag, err_off, err_sel, data_off, data_sel, cr0npx;
+ unsigned char regs[80]; } i386_regs;
+ struct { struct { unsigned __int64 low, high; } fpregs[32]; } x86_64_regs;
+ struct { double fpr[32], fpscr; } powerpc_regs;
+ } fp;
+ union
+ {
+ struct { unsigned int dr0, dr1, dr2, dr3, dr6, dr7; } i386_regs;
+ struct { unsigned __int64 dr0, dr1, dr2, dr3, dr6, dr7; } x86_64_regs;
+ struct { unsigned int dr[8]; } powerpc_regs;
+ } debug;
+ union
+ {
+ unsigned char i386_regs[512];
+ } ext;
+} context_t;
+
+#define SERVER_CTX_CONTROL 0x01
+#define SERVER_CTX_INTEGER 0x02
+#define SERVER_CTX_SEGMENTS 0x04
+#define SERVER_CTX_FLOATING_POINT 0x08
+#define SERVER_CTX_DEBUG_REGISTERS 0x10
+#define SERVER_CTX_EXTENDED_REGISTERS 0x20
+
+
+struct send_fd
+{
+ thread_id_t tid;
+ int fd;
+};
+
+
+struct wake_up_reply
+{
+ client_ptr_t cookie;
+ int signaled;
+ int __pad;
+};
+
+
+typedef __int64 timeout_t;
+#define TIMEOUT_INFINITE (((timeout_t)0x7fffffff) << 32 | 0xffffffff)
+
+
+typedef struct
+{
+ unsigned int debug_flags;
+ unsigned int console_flags;
+ obj_handle_t console;
+ obj_handle_t hstdin;
+ obj_handle_t hstdout;
+ obj_handle_t hstderr;
+ unsigned int x;
+ unsigned int y;
+ unsigned int xsize;
+ unsigned int ysize;
+ unsigned int xchars;
+ unsigned int ychars;
+ unsigned int attribute;
+ unsigned int flags;
+ unsigned int show;
+ data_size_t curdir_len;
+ data_size_t dllpath_len;
+ data_size_t imagepath_len;
+ data_size_t cmdline_len;
+ data_size_t title_len;
+ data_size_t desktop_len;
+ data_size_t shellinfo_len;
+ data_size_t runtime_len;
+
+
+
+
+
+
+
+
+} startup_info_t;
+
+
+typedef struct
+{
+ atom_t atom;
+ int string;
+ lparam_t data;
+} property_data_t;
+
+
+typedef struct
+{
+ int left;
+ int top;
+ int right;
+ int bottom;
+} rectangle_t;
+
+
+typedef struct
+{
+ obj_handle_t handle;
+ obj_handle_t event;
+ client_ptr_t callback;
+ client_ptr_t iosb;
+ client_ptr_t arg;
+ apc_param_t cvalue;
+} async_data_t;
+
+
+
+struct hardware_msg_data
+{
+ lparam_t info;
+ int x;
+ int y;
+ unsigned int hw_id;
+ unsigned int flags;
+ union
+ {
+ int type;
+ struct
+ {
+ int type;
+ unsigned int message;
+ unsigned short vkey;
+ unsigned short scan;
+ } kbd;
+ struct
+ {
+ int type;
+ int x;
+ int y;
+ unsigned int data;
+ } mouse;
+ } rawinput;
+};
+
+struct callback_msg_data
+{
+ client_ptr_t callback;
+ lparam_t data;
+ lparam_t result;
+};
+
+struct winevent_msg_data
+{
+ user_handle_t hook;
+ thread_id_t tid;
+ client_ptr_t hook_proc;
+
+};
+
+typedef union
+{
+ int type;
+ struct
+ {
+ int type;
+ unsigned short vkey;
+ unsigned short scan;
+ unsigned int flags;
+ unsigned int time;
+ lparam_t info;
+ } kbd;
+ struct
+ {
+ int type;
+ int x;
+ int y;
+ unsigned int data;
+ unsigned int flags;
+ unsigned int time;
+ lparam_t info;
+ } mouse;
+ struct
+ {
+ int type;
+ unsigned int msg;
+ lparam_t lparam;
+ } hw;
+} hw_input_t;
+
+typedef union
+{
+ unsigned char bytes[1];
+ struct hardware_msg_data hardware;
+ struct callback_msg_data callback;
+ struct winevent_msg_data winevent;
+} message_data_t;
+
+
+typedef struct
+{
+ WCHAR ch;
+ unsigned short attr;
+} char_info_t;
+
+
+struct filesystem_event
+{
+ int action;
+ data_size_t len;
+ char name[1];
+};
+
+typedef struct
+{
+ unsigned int low_part;
+ int high_part;
+} luid_t;
+
+#define MAX_ACL_LEN 65535
+
+struct security_descriptor
+{
+ unsigned int control;
+ data_size_t owner_len;
+ data_size_t group_len;
+ data_size_t sacl_len;
+ data_size_t dacl_len;
+
+
+
+
+};
+
+struct object_attributes
+{
+ obj_handle_t rootdir;
+ data_size_t sd_len;
+ data_size_t name_len;
+
+
+};
+
+struct token_groups
+{
+ unsigned int count;
+
+
+};
+
+enum select_op
+{
+ SELECT_NONE,
+ SELECT_WAIT,
+ SELECT_WAIT_ALL,
+ SELECT_SIGNAL_AND_WAIT,
+ SELECT_KEYED_EVENT_WAIT,
+ SELECT_KEYED_EVENT_RELEASE
+};
+
+typedef union
+{
+ enum select_op op;
+ struct
+ {
+ enum select_op op;
+ obj_handle_t handles[MAXIMUM_WAIT_OBJECTS];
+ } wait;
+ struct
+ {
+ enum select_op op;
+ obj_handle_t wait;
+ obj_handle_t signal;
+ } signal_and_wait;
+ struct
+ {
+ enum select_op op;
+ obj_handle_t handle;
+ client_ptr_t key;
+ } keyed_event;
+} select_op_t;
+
+enum apc_type
+{
+ APC_NONE,
+ APC_USER,
+ APC_TIMER,
+ APC_ASYNC_IO,
+ APC_VIRTUAL_ALLOC,
+ APC_VIRTUAL_FREE,
+ APC_VIRTUAL_QUERY,
+ APC_VIRTUAL_PROTECT,
+ APC_VIRTUAL_FLUSH,
+ APC_VIRTUAL_LOCK,
+ APC_VIRTUAL_UNLOCK,
+ APC_MAP_VIEW,
+ APC_UNMAP_VIEW,
+ APC_CREATE_THREAD
+};
+
+typedef union
+{
+ enum apc_type type;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t func;
+ apc_param_t args[3];
+ } user;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t func;
+ timeout_t time;
+ client_ptr_t arg;
+ } timer;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t func;
+ client_ptr_t user;
+ client_ptr_t sb;
+ } async_io;
+ struct
+ {
+ enum apc_type type;
+ unsigned int op_type;
+ client_ptr_t addr;
+ mem_size_t size;
+ unsigned int zero_bits;
+ unsigned int prot;
+ } virtual_alloc;
+ struct
+ {
+ enum apc_type type;
+ unsigned int op_type;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_free;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t addr;
+ } virtual_query;
+ struct
+ {
+ enum apc_type type;
+ unsigned int prot;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_protect;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_flush;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_lock;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_unlock;
+ struct
+ {
+ enum apc_type type;
+ obj_handle_t handle;
+ client_ptr_t addr;
+ mem_size_t size;
+ file_pos_t offset;
+ unsigned int alloc_type;
+ unsigned short zero_bits;
+ unsigned short prot;
+ } map_view;
+ struct
+ {
+ enum apc_type type;
+ int __pad;
+ client_ptr_t addr;
+ } unmap_view;
+ struct
+ {
+ enum apc_type type;
+ int suspend;
+ client_ptr_t func;
+ client_ptr_t arg;
+ mem_size_t reserve;
+ mem_size_t commit;
+ } create_thread;
+} apc_call_t;
+
+typedef union
+{
+ enum apc_type type;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t apc;
+ unsigned int total;
+ } async_io;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_alloc;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_free;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t base;
+ client_ptr_t alloc_base;
+ mem_size_t size;
+ unsigned short state;
+ unsigned short prot;
+ unsigned short alloc_prot;
+ unsigned short alloc_type;
+ } virtual_query;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ unsigned int prot;
+ } virtual_protect;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_flush;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_lock;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ } virtual_unlock;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ client_ptr_t addr;
+ mem_size_t size;
+ } map_view;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ } unmap_view;
+ struct
+ {
+ enum apc_type type;
+ unsigned int status;
+ thread_id_t tid;
+ obj_handle_t handle;
+ } create_thread;
+} apc_result_t;
+
+struct rawinput_device
+{
+ unsigned short usage_page;
+ unsigned short usage;
+ unsigned int flags;
+ user_handle_t target;
+};
+
+
+
+
+
+struct new_process_request
+{
+ struct request_header __header;
+ int inherit_all;
+ unsigned int create_flags;
+ int socket_fd;
+ obj_handle_t exe_file;
+ unsigned int process_access;
+ unsigned int process_attr;
+ unsigned int thread_access;
+ unsigned int thread_attr;
+ data_size_t info_size;
+ /* VARARG(info,startup_info,info_size); */
+ /* VARARG(env,unicode_str); */
+};
+struct new_process_reply
+{
+ struct reply_header __header;
+ obj_handle_t info;
+ process_id_t pid;
+ obj_handle_t phandle;
+ thread_id_t tid;
+ obj_handle_t thandle;
+ char __pad_28[4];
+};
+
+
+
+struct get_new_process_info_request
+{
+ struct request_header __header;
+ obj_handle_t info;
+};
+struct get_new_process_info_reply
+{
+ struct reply_header __header;
+ int success;
+ int exit_code;
+};
+
+
+
+struct new_thread_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ int suspend;
+ int request_fd;
+ char __pad_28[4];
+};
+struct new_thread_reply
+{
+ struct reply_header __header;
+ thread_id_t tid;
+ obj_handle_t handle;
+};
+
+
+
+struct get_startup_info_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct get_startup_info_reply
+{
+ struct reply_header __header;
+ obj_handle_t exe_file;
+ data_size_t info_size;
+ /* VARARG(info,startup_info,info_size); */
+ /* VARARG(env,unicode_str); */
+};
+
+
+
+struct init_process_done_request
+{
+ struct request_header __header;
+ int gui;
+ mod_handle_t module;
+ client_ptr_t ldt_copy;
+ client_ptr_t entry;
+};
+struct init_process_done_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct init_thread_request
+{
+ struct request_header __header;
+ int unix_pid;
+ int unix_tid;
+ int debug_level;
+ client_ptr_t teb;
+ client_ptr_t entry;
+ int reply_fd;
+ int wait_fd;
+ cpu_type_t cpu;
+ char __pad_52[4];
+};
+struct init_thread_reply
+{
+ struct reply_header __header;
+ process_id_t pid;
+ thread_id_t tid;
+ timeout_t server_start;
+ data_size_t info_size;
+ int version;
+ unsigned int all_cpus;
+ char __pad_36[4];
+};
+
+
+
+struct terminate_process_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int exit_code;
+ char __pad_20[4];
+};
+struct terminate_process_reply
+{
+ struct reply_header __header;
+ int self;
+ char __pad_12[4];
+};
+
+
+
+struct terminate_thread_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int exit_code;
+ char __pad_20[4];
+};
+struct terminate_thread_reply
+{
+ struct reply_header __header;
+ int self;
+ int last;
+};
+
+
+
+struct get_process_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_process_info_reply
+{
+ struct reply_header __header;
+ process_id_t pid;
+ process_id_t ppid;
+ affinity_t affinity;
+ client_ptr_t peb;
+ timeout_t start_time;
+ timeout_t end_time;
+ int exit_code;
+ int priority;
+ cpu_type_t cpu;
+ int debugger_present;
+};
+
+
+
+struct set_process_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int mask;
+ int priority;
+ affinity_t affinity;
+};
+struct set_process_info_reply
+{
+ struct reply_header __header;
+};
+#define SET_PROCESS_INFO_PRIORITY 0x01
+#define SET_PROCESS_INFO_AFFINITY 0x02
+
+
+
+struct get_thread_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ thread_id_t tid_in;
+ char __pad_20[4];
+};
+struct get_thread_info_reply
+{
+ struct reply_header __header;
+ process_id_t pid;
+ thread_id_t tid;
+ client_ptr_t teb;
+ affinity_t affinity;
+ timeout_t creation_time;
+ timeout_t exit_time;
+ int exit_code;
+ int priority;
+ int last;
+ char __pad_60[4];
+};
+
+
+
+struct set_thread_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int mask;
+ int priority;
+ affinity_t affinity;
+ obj_handle_t token;
+ char __pad_36[4];
+};
+struct set_thread_info_reply
+{
+ struct reply_header __header;
+};
+#define SET_THREAD_INFO_PRIORITY 0x01
+#define SET_THREAD_INFO_AFFINITY 0x02
+#define SET_THREAD_INFO_TOKEN 0x04
+
+
+
+struct get_dll_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ mod_handle_t base_address;
+};
+struct get_dll_info_reply
+{
+ struct reply_header __header;
+ client_ptr_t entry_point;
+ data_size_t size;
+ data_size_t filename_len;
+ /* VARARG(filename,unicode_str); */
+};
+
+
+
+struct suspend_thread_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct suspend_thread_reply
+{
+ struct reply_header __header;
+ int count;
+ char __pad_12[4];
+};
+
+
+
+struct resume_thread_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct resume_thread_reply
+{
+ struct reply_header __header;
+ int count;
+ char __pad_12[4];
+};
+
+
+
+struct load_dll_request
+{
+ struct request_header __header;
+ obj_handle_t mapping;
+ mod_handle_t base;
+ client_ptr_t name;
+ data_size_t size;
+ int dbg_offset;
+ int dbg_size;
+ /* VARARG(filename,unicode_str); */
+ char __pad_44[4];
+};
+struct load_dll_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct unload_dll_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+ mod_handle_t base;
+};
+struct unload_dll_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct queue_apc_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ apc_call_t call;
+};
+struct queue_apc_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ int self;
+};
+
+
+
+struct get_apc_result_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_apc_result_reply
+{
+ struct reply_header __header;
+ apc_result_t result;
+};
+
+
+
+struct close_handle_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct close_handle_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_handle_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int flags;
+ int mask;
+};
+struct set_handle_info_reply
+{
+ struct reply_header __header;
+ int old_flags;
+ char __pad_12[4];
+};
+
+
+
+struct dup_handle_request
+{
+ struct request_header __header;
+ obj_handle_t src_process;
+ obj_handle_t src_handle;
+ obj_handle_t dst_process;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int options;
+ char __pad_36[4];
+};
+struct dup_handle_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ int self;
+ int closed;
+ char __pad_20[4];
+};
+#define DUP_HANDLE_CLOSE_SOURCE DUPLICATE_CLOSE_SOURCE
+#define DUP_HANDLE_SAME_ACCESS DUPLICATE_SAME_ACCESS
+#define DUP_HANDLE_MAKE_GLOBAL 0x80000000
+
+
+
+struct open_process_request
+{
+ struct request_header __header;
+ process_id_t pid;
+ unsigned int access;
+ unsigned int attributes;
+};
+struct open_process_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_thread_request
+{
+ struct request_header __header;
+ thread_id_t tid;
+ unsigned int access;
+ unsigned int attributes;
+};
+struct open_thread_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct select_request
+{
+ struct request_header __header;
+ int flags;
+ client_ptr_t cookie;
+ timeout_t timeout;
+ obj_handle_t prev_apc;
+ /* VARARG(result,apc_result); */
+ /* VARARG(data,select_op); */
+ char __pad_36[4];
+};
+struct select_reply
+{
+ struct reply_header __header;
+ timeout_t timeout;
+ apc_call_t call;
+ obj_handle_t apc_handle;
+ char __pad_60[4];
+};
+#define SELECT_ALERTABLE 1
+#define SELECT_INTERRUPTIBLE 2
+
+
+
+struct create_event_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ int manual_reset;
+ int initial_state;
+ /* VARARG(objattr,object_attributes); */
+ char __pad_28[4];
+};
+struct create_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+struct event_op_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int op;
+ char __pad_20[4];
+};
+struct event_op_reply
+{
+ struct reply_header __header;
+};
+enum event_op { PULSE_EVENT, SET_EVENT, RESET_EVENT };
+
+struct query_event_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct query_event_reply
+{
+ struct reply_header __header;
+ int manual_reset;
+ int state;
+};
+
+
+struct open_event_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct create_keyed_event_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ /* VARARG(objattr,object_attributes); */
+ char __pad_20[4];
+};
+struct create_keyed_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+struct open_keyed_event_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_keyed_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct create_mutex_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ int owned;
+ /* VARARG(objattr,object_attributes); */
+};
+struct create_mutex_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct release_mutex_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct release_mutex_reply
+{
+ struct reply_header __header;
+ unsigned int prev_count;
+ char __pad_12[4];
+};
+
+
+
+struct open_mutex_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_mutex_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct create_semaphore_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int initial;
+ unsigned int max;
+ /* VARARG(objattr,object_attributes); */
+ char __pad_28[4];
+};
+struct create_semaphore_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct release_semaphore_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int count;
+ char __pad_20[4];
+};
+struct release_semaphore_reply
+{
+ struct reply_header __header;
+ unsigned int prev_count;
+ char __pad_12[4];
+};
+
+
+
+struct open_semaphore_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_semaphore_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct create_file_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int sharing;
+ int create;
+ unsigned int options;
+ unsigned int attrs;
+ /* VARARG(objattr,object_attributes); */
+ /* VARARG(filename,string); */
+ char __pad_36[4];
+};
+struct create_file_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_file_object_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ unsigned int sharing;
+ unsigned int options;
+ /* VARARG(filename,unicode_str); */
+};
+struct open_file_object_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct alloc_file_handle_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ int fd;
+};
+struct alloc_file_handle_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct get_handle_unix_name_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_handle_unix_name_reply
+{
+ struct reply_header __header;
+ data_size_t name_len;
+ /* VARARG(name,string); */
+ char __pad_12[4];
+};
+
+
+
+struct get_handle_fd_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_handle_fd_reply
+{
+ struct reply_header __header;
+ int type;
+ int cacheable;
+ unsigned int access;
+ unsigned int options;
+};
+enum server_fd_type
+{
+ FD_TYPE_INVALID,
+ FD_TYPE_FILE,
+ FD_TYPE_DIR,
+ FD_TYPE_SOCKET,
+ FD_TYPE_SERIAL,
+ FD_TYPE_PIPE,
+ FD_TYPE_MAILSLOT,
+ FD_TYPE_CHAR,
+ FD_TYPE_DEVICE,
+ FD_TYPE_NB_TYPES
+};
+
+
+
+struct flush_file_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct flush_file_reply
+{
+ struct reply_header __header;
+ obj_handle_t event;
+ char __pad_12[4];
+};
+
+
+
+struct lock_file_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ file_pos_t offset;
+ file_pos_t count;
+ int shared;
+ int wait;
+};
+struct lock_file_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ int overlapped;
+};
+
+
+
+struct unlock_file_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ file_pos_t offset;
+ file_pos_t count;
+};
+struct unlock_file_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct create_socket_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ int family;
+ int type;
+ int protocol;
+ unsigned int flags;
+ char __pad_36[4];
+};
+struct create_socket_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct accept_socket_request
+{
+ struct request_header __header;
+ obj_handle_t lhandle;
+ unsigned int access;
+ unsigned int attributes;
+};
+struct accept_socket_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct accept_into_socket_request
+{
+ struct request_header __header;
+ obj_handle_t lhandle;
+ obj_handle_t ahandle;
+ char __pad_20[4];
+};
+struct accept_into_socket_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_socket_event_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int mask;
+ obj_handle_t event;
+ user_handle_t window;
+ unsigned int msg;
+};
+struct set_socket_event_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_socket_event_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int service;
+ obj_handle_t c_event;
+};
+struct get_socket_event_reply
+{
+ struct reply_header __header;
+ unsigned int mask;
+ unsigned int pmask;
+ unsigned int state;
+ /* VARARG(errors,ints); */
+ char __pad_20[4];
+};
+
+
+
+struct get_socket_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_socket_info_reply
+{
+ struct reply_header __header;
+ int family;
+ int type;
+ int protocol;
+ char __pad_20[4];
+};
+
+
+
+struct enable_socket_event_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int mask;
+ unsigned int sstate;
+ unsigned int cstate;
+ char __pad_28[4];
+};
+struct enable_socket_event_reply
+{
+ struct reply_header __header;
+};
+
+struct set_socket_deferred_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ obj_handle_t deferred;
+ char __pad_20[4];
+};
+struct set_socket_deferred_reply
+{
+ struct reply_header __header;
+};
+
+
+struct alloc_console_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ process_id_t pid;
+ int input_fd;
+ char __pad_28[4];
+};
+struct alloc_console_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle_in;
+ obj_handle_t event;
+};
+
+
+
+struct free_console_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct free_console_reply
+{
+ struct reply_header __header;
+};
+
+
+#define CONSOLE_RENDERER_NONE_EVENT 0x00
+#define CONSOLE_RENDERER_TITLE_EVENT 0x01
+#define CONSOLE_RENDERER_ACTIVE_SB_EVENT 0x02
+#define CONSOLE_RENDERER_SB_RESIZE_EVENT 0x03
+#define CONSOLE_RENDERER_UPDATE_EVENT 0x04
+#define CONSOLE_RENDERER_CURSOR_POS_EVENT 0x05
+#define CONSOLE_RENDERER_CURSOR_GEOM_EVENT 0x06
+#define CONSOLE_RENDERER_DISPLAY_EVENT 0x07
+#define CONSOLE_RENDERER_EXIT_EVENT 0x08
+struct console_renderer_event
+{
+ short event;
+ union
+ {
+ struct update
+ {
+ short top;
+ short bottom;
+ } update;
+ struct resize
+ {
+ short width;
+ short height;
+ } resize;
+ struct cursor_pos
+ {
+ short x;
+ short y;
+ } cursor_pos;
+ struct cursor_geom
+ {
+ short visible;
+ short size;
+ } cursor_geom;
+ struct display
+ {
+ short left;
+ short top;
+ short width;
+ short height;
+ } display;
+ } u;
+};
+
+
+struct get_console_renderer_events_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_console_renderer_events_reply
+{
+ struct reply_header __header;
+ /* VARARG(data,bytes); */
+};
+
+
+
+struct open_console_request
+{
+ struct request_header __header;
+ obj_handle_t from;
+
+ unsigned int access;
+ unsigned int attributes;
+ int share;
+ char __pad_28[4];
+};
+struct open_console_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct get_console_wait_event_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct get_console_wait_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+struct get_console_mode_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_console_mode_reply
+{
+ struct reply_header __header;
+ int mode;
+ char __pad_12[4];
+};
+
+
+
+struct set_console_mode_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int mode;
+ char __pad_20[4];
+};
+struct set_console_mode_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_console_input_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int mask;
+ obj_handle_t active_sb;
+ int history_mode;
+ int history_size;
+ int edition_mode;
+ int input_cp;
+ int output_cp;
+ user_handle_t win;
+ /* VARARG(title,unicode_str); */
+};
+struct set_console_input_info_reply
+{
+ struct reply_header __header;
+};
+#define SET_CONSOLE_INPUT_INFO_ACTIVE_SB 0x01
+#define SET_CONSOLE_INPUT_INFO_TITLE 0x02
+#define SET_CONSOLE_INPUT_INFO_HISTORY_MODE 0x04
+#define SET_CONSOLE_INPUT_INFO_HISTORY_SIZE 0x08
+#define SET_CONSOLE_INPUT_INFO_EDITION_MODE 0x10
+#define SET_CONSOLE_INPUT_INFO_INPUT_CODEPAGE 0x20
+#define SET_CONSOLE_INPUT_INFO_OUTPUT_CODEPAGE 0x40
+#define SET_CONSOLE_INPUT_INFO_WIN 0x80
+
+
+
+struct get_console_input_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_console_input_info_reply
+{
+ struct reply_header __header;
+ int history_mode;
+ int history_size;
+ int history_index;
+ int edition_mode;
+ int input_cp;
+ int output_cp;
+ user_handle_t win;
+ /* VARARG(title,unicode_str); */
+ char __pad_36[4];
+};
+
+
+
+struct append_console_input_history_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ /* VARARG(line,unicode_str); */
+};
+struct append_console_input_history_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_console_input_history_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int index;
+ char __pad_20[4];
+};
+struct get_console_input_history_reply
+{
+ struct reply_header __header;
+ int total;
+ /* VARARG(line,unicode_str); */
+ char __pad_12[4];
+};
+
+
+
+struct create_console_output_request
+{
+ struct request_header __header;
+ obj_handle_t handle_in;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int share;
+ int fd;
+};
+struct create_console_output_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle_out;
+ char __pad_12[4];
+};
+
+
+
+struct set_console_output_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int mask;
+ short int cursor_size;
+ short int cursor_visible;
+ short int cursor_x;
+ short int cursor_y;
+ short int width;
+ short int height;
+ short int attr;
+ short int win_left;
+ short int win_top;
+ short int win_right;
+ short int win_bottom;
+ short int max_width;
+ short int max_height;
+ char __pad_46[2];
+};
+struct set_console_output_info_reply
+{
+ struct reply_header __header;
+};
+#define SET_CONSOLE_OUTPUT_INFO_CURSOR_GEOM 0x01
+#define SET_CONSOLE_OUTPUT_INFO_CURSOR_POS 0x02
+#define SET_CONSOLE_OUTPUT_INFO_SIZE 0x04
+#define SET_CONSOLE_OUTPUT_INFO_ATTR 0x08
+#define SET_CONSOLE_OUTPUT_INFO_DISPLAY_WINDOW 0x10
+#define SET_CONSOLE_OUTPUT_INFO_MAX_SIZE 0x20
+
+
+
+struct get_console_output_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_console_output_info_reply
+{
+ struct reply_header __header;
+ short int cursor_size;
+ short int cursor_visible;
+ short int cursor_x;
+ short int cursor_y;
+ short int width;
+ short int height;
+ short int attr;
+ short int win_left;
+ short int win_top;
+ short int win_right;
+ short int win_bottom;
+ short int max_width;
+ short int max_height;
+ char __pad_34[6];
+};
+
+
+struct write_console_input_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ /* VARARG(rec,input_records); */
+};
+struct write_console_input_reply
+{
+ struct reply_header __header;
+ int written;
+ char __pad_12[4];
+};
+
+
+
+struct read_console_input_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int flush;
+ char __pad_20[4];
+};
+struct read_console_input_reply
+{
+ struct reply_header __header;
+ int read;
+ /* VARARG(rec,input_records); */
+ char __pad_12[4];
+};
+
+
+
+struct write_console_output_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int x;
+ int y;
+ int mode;
+ int wrap;
+ /* VARARG(data,bytes); */
+};
+struct write_console_output_reply
+{
+ struct reply_header __header;
+ int written;
+ int width;
+ int height;
+ char __pad_20[4];
+};
+enum char_info_mode
+{
+ CHAR_INFO_MODE_TEXT,
+ CHAR_INFO_MODE_ATTR,
+ CHAR_INFO_MODE_TEXTATTR,
+ CHAR_INFO_MODE_TEXTSTDATTR
+};
+
+
+
+struct fill_console_output_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int x;
+ int y;
+ int mode;
+ int count;
+ int wrap;
+ char_info_t data;
+};
+struct fill_console_output_reply
+{
+ struct reply_header __header;
+ int written;
+ char __pad_12[4];
+};
+
+
+
+struct read_console_output_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int x;
+ int y;
+ int mode;
+ int wrap;
+};
+struct read_console_output_reply
+{
+ struct reply_header __header;
+ int width;
+ int height;
+ /* VARARG(data,bytes); */
+};
+
+
+
+struct move_console_output_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ short int x_src;
+ short int y_src;
+ short int x_dst;
+ short int y_dst;
+ short int w;
+ short int h;
+ char __pad_28[4];
+};
+struct move_console_output_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct send_console_signal_request
+{
+ struct request_header __header;
+ int signal;
+ process_id_t group_id;
+ char __pad_20[4];
+};
+struct send_console_signal_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct read_directory_changes_request
+{
+ struct request_header __header;
+ unsigned int filter;
+ int subtree;
+ int want_data;
+ async_data_t async;
+};
+struct read_directory_changes_reply
+{
+ struct reply_header __header;
+};
+
+
+struct read_change_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct read_change_reply
+{
+ struct reply_header __header;
+ /* VARARG(events,filesystem_event); */
+};
+
+
+
+struct create_mapping_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int protect;
+ mem_size_t size;
+ obj_handle_t file_handle;
+ /* VARARG(objattr,object_attributes); */
+ char __pad_36[4];
+};
+struct create_mapping_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+#define VPROT_READ 0x01
+#define VPROT_WRITE 0x02
+#define VPROT_EXEC 0x04
+#define VPROT_WRITECOPY 0x08
+#define VPROT_GUARD 0x10
+#define VPROT_NOCACHE 0x20
+#define VPROT_COMMITTED 0x40
+#define VPROT_WRITEWATCH 0x80
+
+#define VPROT_IMAGE 0x0100
+#define VPROT_SYSTEM 0x0200
+#define VPROT_VALLOC 0x0400
+#define VPROT_NOEXEC 0x0800
+
+
+
+struct open_mapping_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_mapping_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct get_mapping_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int access;
+ char __pad_20[4];
+};
+struct get_mapping_info_reply
+{
+ struct reply_header __header;
+ mem_size_t size;
+ int protect;
+ int header_size;
+ client_ptr_t base;
+ obj_handle_t mapping;
+ obj_handle_t shared_file;
+};
+
+
+
+struct get_mapping_committed_range_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ file_pos_t offset;
+};
+struct get_mapping_committed_range_reply
+{
+ struct reply_header __header;
+ mem_size_t size;
+ int committed;
+ char __pad_20[4];
+};
+
+
+
+struct add_mapping_committed_range_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ file_pos_t offset;
+ mem_size_t size;
+};
+struct add_mapping_committed_range_reply
+{
+ struct reply_header __header;
+};
+
+
+#define SNAP_PROCESS 0x00000001
+#define SNAP_THREAD 0x00000002
+
+struct create_snapshot_request
+{
+ struct request_header __header;
+ unsigned int attributes;
+ unsigned int flags;
+ char __pad_20[4];
+};
+struct create_snapshot_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct next_process_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int reset;
+ char __pad_20[4];
+};
+struct next_process_reply
+{
+ struct reply_header __header;
+ int count;
+ process_id_t pid;
+ process_id_t ppid;
+ int threads;
+ int priority;
+ int handles;
+ int unix_pid;
+ /* VARARG(filename,unicode_str); */
+ char __pad_36[4];
+};
+
+
+
+struct next_thread_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int reset;
+ char __pad_20[4];
+};
+struct next_thread_reply
+{
+ struct reply_header __header;
+ int count;
+ process_id_t pid;
+ thread_id_t tid;
+ int base_pri;
+ int delta_pri;
+ char __pad_28[4];
+};
+
+
+
+struct wait_debug_event_request
+{
+ struct request_header __header;
+ int get_handle;
+};
+struct wait_debug_event_reply
+{
+ struct reply_header __header;
+ process_id_t pid;
+ thread_id_t tid;
+ obj_handle_t wait;
+ /* VARARG(event,debug_event); */
+ char __pad_20[4];
+};
+
+
+
+struct queue_exception_event_request
+{
+ struct request_header __header;
+ int first;
+ unsigned int code;
+ unsigned int flags;
+ client_ptr_t record;
+ client_ptr_t address;
+ data_size_t len;
+ /* VARARG(params,uints64,len); */
+ /* VARARG(context,context); */
+ char __pad_44[4];
+};
+struct queue_exception_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct get_exception_status_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_exception_status_reply
+{
+ struct reply_header __header;
+ /* VARARG(context,context); */
+};
+
+
+
+struct output_debug_string_request
+{
+ struct request_header __header;
+ data_size_t length;
+ client_ptr_t string;
+};
+struct output_debug_string_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct continue_debug_event_request
+{
+ struct request_header __header;
+ process_id_t pid;
+ thread_id_t tid;
+ int status;
+};
+struct continue_debug_event_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct debug_process_request
+{
+ struct request_header __header;
+ process_id_t pid;
+ int attach;
+ char __pad_20[4];
+};
+struct debug_process_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct debug_break_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct debug_break_reply
+{
+ struct reply_header __header;
+ int self;
+ char __pad_12[4];
+};
+
+
+
+struct set_debugger_kill_on_exit_request
+{
+ struct request_header __header;
+ int kill_on_exit;
+};
+struct set_debugger_kill_on_exit_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct read_process_memory_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ client_ptr_t addr;
+};
+struct read_process_memory_reply
+{
+ struct reply_header __header;
+ /* VARARG(data,bytes); */
+};
+
+
+
+struct write_process_memory_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ client_ptr_t addr;
+ /* VARARG(data,bytes); */
+};
+struct write_process_memory_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct create_key_request
+{
+ struct request_header __header;
+ obj_handle_t parent;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int options;
+ data_size_t namelen;
+ /* VARARG(name,unicode_str,namelen); */
+ /* VARARG(class,unicode_str); */
+};
+struct create_key_reply
+{
+ struct reply_header __header;
+ obj_handle_t hkey;
+ int created;
+};
+
+
+struct open_key_request
+{
+ struct request_header __header;
+ obj_handle_t parent;
+ unsigned int access;
+ unsigned int attributes;
+ /* VARARG(name,unicode_str); */
+};
+struct open_key_reply
+{
+ struct reply_header __header;
+ obj_handle_t hkey;
+ char __pad_12[4];
+};
+
+
+
+struct delete_key_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+};
+struct delete_key_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct flush_key_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+};
+struct flush_key_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct enum_key_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ int index;
+ int info_class;
+};
+struct enum_key_reply
+{
+ struct reply_header __header;
+ int subkeys;
+ int max_subkey;
+ int max_class;
+ int values;
+ int max_value;
+ int max_data;
+ timeout_t modif;
+ data_size_t total;
+ data_size_t namelen;
+ /* VARARG(name,unicode_str,namelen); */
+ /* VARARG(class,unicode_str); */
+};
+
+
+
+struct set_key_value_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ int type;
+ data_size_t namelen;
+ /* VARARG(name,unicode_str,namelen); */
+ /* VARARG(data,bytes); */
+};
+struct set_key_value_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_key_value_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ /* VARARG(name,unicode_str); */
+};
+struct get_key_value_reply
+{
+ struct reply_header __header;
+ int type;
+ data_size_t total;
+ /* VARARG(data,bytes); */
+};
+
+
+
+struct enum_key_value_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ int index;
+ int info_class;
+};
+struct enum_key_value_reply
+{
+ struct reply_header __header;
+ int type;
+ data_size_t total;
+ data_size_t namelen;
+ /* VARARG(name,unicode_str,namelen); */
+ /* VARARG(data,bytes); */
+ char __pad_20[4];
+};
+
+
+
+struct delete_key_value_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ /* VARARG(name,unicode_str); */
+};
+struct delete_key_value_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct load_registry_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ obj_handle_t file;
+ /* VARARG(name,unicode_str); */
+ char __pad_20[4];
+};
+struct load_registry_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct unload_registry_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+};
+struct unload_registry_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct save_registry_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ obj_handle_t file;
+ char __pad_20[4];
+};
+struct save_registry_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_registry_notification_request
+{
+ struct request_header __header;
+ obj_handle_t hkey;
+ obj_handle_t event;
+ int subtree;
+ unsigned int filter;
+ char __pad_28[4];
+};
+struct set_registry_notification_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct create_timer_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ int manual;
+ /* VARARG(name,unicode_str); */
+ char __pad_28[4];
+};
+struct create_timer_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_timer_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_timer_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+struct set_timer_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ timeout_t expire;
+ client_ptr_t callback;
+ client_ptr_t arg;
+ int period;
+ char __pad_44[4];
+};
+struct set_timer_reply
+{
+ struct reply_header __header;
+ int signaled;
+ char __pad_12[4];
+};
+
+
+struct cancel_timer_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct cancel_timer_reply
+{
+ struct reply_header __header;
+ int signaled;
+ char __pad_12[4];
+};
+
+
+struct get_timer_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_timer_info_reply
+{
+ struct reply_header __header;
+ timeout_t when;
+ int signaled;
+ char __pad_20[4];
+};
+
+
+
+struct get_thread_context_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int flags;
+ int suspend;
+};
+struct get_thread_context_reply
+{
+ struct reply_header __header;
+ int self;
+ /* VARARG(context,context); */
+ char __pad_12[4];
+};
+
+
+
+struct set_thread_context_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int suspend;
+ /* VARARG(context,context); */
+ char __pad_20[4];
+};
+struct set_thread_context_reply
+{
+ struct reply_header __header;
+ int self;
+ char __pad_12[4];
+};
+
+
+
+struct get_selector_entry_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int entry;
+ char __pad_20[4];
+};
+struct get_selector_entry_reply
+{
+ struct reply_header __header;
+ unsigned int base;
+ unsigned int limit;
+ unsigned char flags;
+ char __pad_17[7];
+};
+
+
+
+struct add_atom_request
+{
+ struct request_header __header;
+ obj_handle_t table;
+ /* VARARG(name,unicode_str); */
+};
+struct add_atom_reply
+{
+ struct reply_header __header;
+ atom_t atom;
+ char __pad_12[4];
+};
+
+
+
+struct delete_atom_request
+{
+ struct request_header __header;
+ obj_handle_t table;
+ atom_t atom;
+ char __pad_20[4];
+};
+struct delete_atom_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct find_atom_request
+{
+ struct request_header __header;
+ obj_handle_t table;
+ /* VARARG(name,unicode_str); */
+};
+struct find_atom_reply
+{
+ struct reply_header __header;
+ atom_t atom;
+ char __pad_12[4];
+};
+
+
+
+struct get_atom_information_request
+{
+ struct request_header __header;
+ obj_handle_t table;
+ atom_t atom;
+ char __pad_20[4];
+};
+struct get_atom_information_reply
+{
+ struct reply_header __header;
+ int count;
+ int pinned;
+ data_size_t total;
+ /* VARARG(name,unicode_str); */
+ char __pad_20[4];
+};
+
+
+
+struct set_atom_information_request
+{
+ struct request_header __header;
+ obj_handle_t table;
+ atom_t atom;
+ int pinned;
+};
+struct set_atom_information_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct empty_atom_table_request
+{
+ struct request_header __header;
+ obj_handle_t table;
+ int if_pinned;
+ char __pad_20[4];
+};
+struct empty_atom_table_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct init_atom_table_request
+{
+ struct request_header __header;
+ int entries;
+};
+struct init_atom_table_reply
+{
+ struct reply_header __header;
+ obj_handle_t table;
+ char __pad_12[4];
+};
+
+
+
+struct get_msg_queue_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct get_msg_queue_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct set_queue_fd_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct set_queue_fd_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_queue_mask_request
+{
+ struct request_header __header;
+ unsigned int wake_mask;
+ unsigned int changed_mask;
+ int skip_wait;
+};
+struct set_queue_mask_reply
+{
+ struct reply_header __header;
+ unsigned int wake_bits;
+ unsigned int changed_bits;
+};
+
+
+
+struct get_queue_status_request
+{
+ struct request_header __header;
+ int clear;
+};
+struct get_queue_status_reply
+{
+ struct reply_header __header;
+ unsigned int wake_bits;
+ unsigned int changed_bits;
+};
+
+
+
+struct get_process_idle_event_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_process_idle_event_reply
+{
+ struct reply_header __header;
+ obj_handle_t event;
+ char __pad_12[4];
+};
+
+
+
+struct send_message_request
+{
+ struct request_header __header;
+ thread_id_t id;
+ int type;
+ int flags;
+ user_handle_t win;
+ unsigned int msg;
+ lparam_t wparam;
+ lparam_t lparam;
+ timeout_t timeout;
+ /* VARARG(data,message_data); */
+};
+struct send_message_reply
+{
+ struct reply_header __header;
+};
+
+struct post_quit_message_request
+{
+ struct request_header __header;
+ int exit_code;
+};
+struct post_quit_message_reply
+{
+ struct reply_header __header;
+};
+
+enum message_type
+{
+ MSG_ASCII,
+ MSG_UNICODE,
+ MSG_NOTIFY,
+ MSG_CALLBACK,
+ MSG_CALLBACK_RESULT,
+ MSG_OTHER_PROCESS,
+ MSG_POSTED,
+ MSG_HARDWARE,
+ MSG_WINEVENT,
+ MSG_HOOK_LL
+};
+#define SEND_MSG_ABORT_IF_HUNG 0x01
+
+
+
+struct send_hardware_message_request
+{
+ struct request_header __header;
+ user_handle_t win;
+ hw_input_t input;
+ unsigned int flags;
+ char __pad_52[4];
+};
+struct send_hardware_message_reply
+{
+ struct reply_header __header;
+ int wait;
+ int prev_x;
+ int prev_y;
+ int new_x;
+ int new_y;
+ /* VARARG(keystate,bytes); */
+ char __pad_28[4];
+};
+#define SEND_HWMSG_INJECTED 0x01
+
+
+
+struct get_message_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ user_handle_t get_win;
+ unsigned int get_first;
+ unsigned int get_last;
+ unsigned int hw_id;
+ unsigned int wake_mask;
+ unsigned int changed_mask;
+};
+struct get_message_reply
+{
+ struct reply_header __header;
+ user_handle_t win;
+ unsigned int msg;
+ lparam_t wparam;
+ lparam_t lparam;
+ int type;
+ unsigned int time;
+ unsigned int active_hooks;
+ data_size_t total;
+ /* VARARG(data,message_data); */
+};
+
+
+
+struct reply_message_request
+{
+ struct request_header __header;
+ int remove;
+ lparam_t result;
+ /* VARARG(data,bytes); */
+};
+struct reply_message_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct accept_hardware_message_request
+{
+ struct request_header __header;
+ unsigned int hw_id;
+ int remove;
+ user_handle_t new_win;
+};
+struct accept_hardware_message_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_message_reply_request
+{
+ struct request_header __header;
+ int cancel;
+};
+struct get_message_reply_reply
+{
+ struct reply_header __header;
+ lparam_t result;
+ /* VARARG(data,bytes); */
+};
+
+
+
+struct set_win_timer_request
+{
+ struct request_header __header;
+ user_handle_t win;
+ unsigned int msg;
+ unsigned int rate;
+ lparam_t id;
+ lparam_t lparam;
+};
+struct set_win_timer_reply
+{
+ struct reply_header __header;
+ lparam_t id;
+};
+
+
+
+struct kill_win_timer_request
+{
+ struct request_header __header;
+ user_handle_t win;
+ lparam_t id;
+ unsigned int msg;
+ char __pad_28[4];
+};
+struct kill_win_timer_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct is_window_hung_request
+{
+ struct request_header __header;
+ user_handle_t win;
+};
+struct is_window_hung_reply
+{
+ struct reply_header __header;
+ int is_hung;
+ char __pad_12[4];
+};
+
+
+
+struct get_serial_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_serial_info_reply
+{
+ struct reply_header __header;
+ unsigned int readinterval;
+ unsigned int readconst;
+ unsigned int readmult;
+ unsigned int writeconst;
+ unsigned int writemult;
+ unsigned int eventmask;
+ unsigned int cookie;
+ char __pad_36[4];
+};
+
+
+
+struct set_serial_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int flags;
+ unsigned int readinterval;
+ unsigned int readconst;
+ unsigned int readmult;
+ unsigned int writeconst;
+ unsigned int writemult;
+ unsigned int eventmask;
+ char __pad_44[4];
+};
+struct set_serial_info_reply
+{
+ struct reply_header __header;
+};
+#define SERIALINFO_SET_TIMEOUTS 0x01
+#define SERIALINFO_SET_MASK 0x02
+
+
+
+struct register_async_request
+{
+ struct request_header __header;
+ int type;
+ async_data_t async;
+ int count;
+ char __pad_60[4];
+};
+struct register_async_reply
+{
+ struct reply_header __header;
+};
+#define ASYNC_TYPE_READ 0x01
+#define ASYNC_TYPE_WRITE 0x02
+#define ASYNC_TYPE_WAIT 0x03
+
+
+
+struct cancel_async_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ client_ptr_t iosb;
+ int only_thread;
+ char __pad_28[4];
+};
+struct cancel_async_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct ioctl_request
+{
+ struct request_header __header;
+ ioctl_code_t code;
+ async_data_t async;
+ int blocking;
+ /* VARARG(in_data,bytes); */
+ char __pad_60[4];
+};
+struct ioctl_reply
+{
+ struct reply_header __header;
+ obj_handle_t wait;
+ unsigned int options;
+ /* VARARG(out_data,bytes); */
+};
+
+
+
+struct get_ioctl_result_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ client_ptr_t user_arg;
+};
+struct get_ioctl_result_reply
+{
+ struct reply_header __header;
+ /* VARARG(out_data,bytes); */
+};
+
+
+
+struct create_named_pipe_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ unsigned int options;
+ unsigned int sharing;
+ unsigned int maxinstances;
+ unsigned int outsize;
+ unsigned int insize;
+ char __pad_44[4];
+ timeout_t timeout;
+ unsigned int flags;
+ /* VARARG(name,unicode_str); */
+ char __pad_60[4];
+};
+struct create_named_pipe_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+#define NAMED_PIPE_MESSAGE_STREAM_WRITE 0x0001
+#define NAMED_PIPE_MESSAGE_STREAM_READ 0x0002
+#define NAMED_PIPE_NONBLOCKING_MODE 0x0004
+#define NAMED_PIPE_SERVER_END 0x8000
+
+
+struct get_named_pipe_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_named_pipe_info_reply
+{
+ struct reply_header __header;
+ unsigned int flags;
+ unsigned int sharing;
+ unsigned int maxinstances;
+ unsigned int instances;
+ unsigned int outsize;
+ unsigned int insize;
+};
+
+
+
+struct create_window_request
+{
+ struct request_header __header;
+ user_handle_t parent;
+ user_handle_t owner;
+ atom_t atom;
+ mod_handle_t instance;
+ /* VARARG(class,unicode_str); */
+};
+struct create_window_reply
+{
+ struct reply_header __header;
+ user_handle_t handle;
+ user_handle_t parent;
+ user_handle_t owner;
+ int extra;
+ client_ptr_t class_ptr;
+};
+
+
+
+struct destroy_window_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct destroy_window_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_desktop_window_request
+{
+ struct request_header __header;
+ int force;
+};
+struct get_desktop_window_reply
+{
+ struct reply_header __header;
+ user_handle_t top_window;
+ user_handle_t msg_window;
+};
+
+
+
+struct set_window_owner_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ user_handle_t owner;
+ char __pad_20[4];
+};
+struct set_window_owner_reply
+{
+ struct reply_header __header;
+ user_handle_t full_owner;
+ user_handle_t prev_owner;
+};
+
+
+
+struct get_window_info_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct get_window_info_reply
+{
+ struct reply_header __header;
+ user_handle_t full_handle;
+ user_handle_t last_active;
+ process_id_t pid;
+ thread_id_t tid;
+ atom_t atom;
+ int is_unicode;
+};
+
+
+
+struct set_window_info_request
+{
+ struct request_header __header;
+ unsigned short flags;
+ short int is_unicode;
+ user_handle_t handle;
+ unsigned int style;
+ unsigned int ex_style;
+ unsigned int id;
+ mod_handle_t instance;
+ lparam_t user_data;
+ int extra_offset;
+ data_size_t extra_size;
+ lparam_t extra_value;
+};
+struct set_window_info_reply
+{
+ struct reply_header __header;
+ unsigned int old_style;
+ unsigned int old_ex_style;
+ mod_handle_t old_instance;
+ lparam_t old_user_data;
+ lparam_t old_extra_value;
+ unsigned int old_id;
+ char __pad_44[4];
+};
+#define SET_WIN_STYLE 0x01
+#define SET_WIN_EXSTYLE 0x02
+#define SET_WIN_ID 0x04
+#define SET_WIN_INSTANCE 0x08
+#define SET_WIN_USERDATA 0x10
+#define SET_WIN_EXTRA 0x20
+#define SET_WIN_UNICODE 0x40
+
+
+
+struct set_parent_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ user_handle_t parent;
+ char __pad_20[4];
+};
+struct set_parent_reply
+{
+ struct reply_header __header;
+ user_handle_t old_parent;
+ user_handle_t full_parent;
+};
+
+
+
+struct get_window_parents_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct get_window_parents_reply
+{
+ struct reply_header __header;
+ int count;
+ /* VARARG(parents,user_handles); */
+ char __pad_12[4];
+};
+
+
+
+struct get_window_children_request
+{
+ struct request_header __header;
+ obj_handle_t desktop;
+ user_handle_t parent;
+ atom_t atom;
+ thread_id_t tid;
+ /* VARARG(class,unicode_str); */
+ char __pad_28[4];
+};
+struct get_window_children_reply
+{
+ struct reply_header __header;
+ int count;
+ /* VARARG(children,user_handles); */
+ char __pad_12[4];
+};
+
+
+
+struct get_window_children_from_point_request
+{
+ struct request_header __header;
+ user_handle_t parent;
+ int x;
+ int y;
+};
+struct get_window_children_from_point_reply
+{
+ struct reply_header __header;
+ int count;
+ /* VARARG(children,user_handles); */
+ char __pad_12[4];
+};
+
+
+
+struct get_window_tree_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct get_window_tree_reply
+{
+ struct reply_header __header;
+ user_handle_t parent;
+ user_handle_t owner;
+ user_handle_t next_sibling;
+ user_handle_t prev_sibling;
+ user_handle_t first_sibling;
+ user_handle_t last_sibling;
+ user_handle_t first_child;
+ user_handle_t last_child;
+};
+
+
+struct set_window_pos_request
+{
+ struct request_header __header;
+ unsigned short swp_flags;
+ unsigned short paint_flags;
+ user_handle_t handle;
+ user_handle_t previous;
+ rectangle_t window;
+ rectangle_t client;
+ /* VARARG(valid,rectangles); */
+};
+struct set_window_pos_reply
+{
+ struct reply_header __header;
+ unsigned int new_style;
+ unsigned int new_ex_style;
+ user_handle_t surface_win;
+ char __pad_20[4];
+};
+#define SET_WINPOS_PAINT_SURFACE 0x01
+#define SET_WINPOS_PIXEL_FORMAT 0x02
+
+
+struct get_window_rectangles_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ int relative;
+ char __pad_20[4];
+};
+struct get_window_rectangles_reply
+{
+ struct reply_header __header;
+ rectangle_t window;
+ rectangle_t visible;
+ rectangle_t client;
+};
+enum coords_relative
+{
+ COORDS_CLIENT,
+ COORDS_WINDOW,
+ COORDS_PARENT,
+ COORDS_SCREEN
+};
+
+
+
+struct get_window_text_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct get_window_text_reply
+{
+ struct reply_header __header;
+ /* VARARG(text,unicode_str); */
+};
+
+
+
+struct set_window_text_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ /* VARARG(text,unicode_str); */
+};
+struct set_window_text_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_windows_offset_request
+{
+ struct request_header __header;
+ user_handle_t from;
+ user_handle_t to;
+ char __pad_20[4];
+};
+struct get_windows_offset_reply
+{
+ struct reply_header __header;
+ int x;
+ int y;
+ int mirror;
+ char __pad_20[4];
+};
+
+
+
+struct get_visible_region_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ unsigned int flags;
+ char __pad_20[4];
+};
+struct get_visible_region_reply
+{
+ struct reply_header __header;
+ user_handle_t top_win;
+ rectangle_t top_rect;
+ rectangle_t win_rect;
+ unsigned int paint_flags;
+ data_size_t total_size;
+ /* VARARG(region,rectangles); */
+ char __pad_52[4];
+};
+
+
+
+struct get_surface_region_request
+{
+ struct request_header __header;
+ user_handle_t window;
+};
+struct get_surface_region_reply
+{
+ struct reply_header __header;
+ rectangle_t visible_rect;
+ data_size_t total_size;
+ /* VARARG(region,rectangles); */
+ char __pad_28[4];
+};
+
+
+
+struct get_window_region_request
+{
+ struct request_header __header;
+ user_handle_t window;
+};
+struct get_window_region_reply
+{
+ struct reply_header __header;
+ data_size_t total_size;
+ /* VARARG(region,rectangles); */
+ char __pad_12[4];
+};
+
+
+
+struct set_window_region_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ int redraw;
+ /* VARARG(region,rectangles); */
+ char __pad_20[4];
+};
+struct set_window_region_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_update_region_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ user_handle_t from_child;
+ unsigned int flags;
+};
+struct get_update_region_reply
+{
+ struct reply_header __header;
+ user_handle_t child;
+ unsigned int flags;
+ data_size_t total_size;
+ /* VARARG(region,rectangles); */
+ char __pad_20[4];
+};
+#define UPDATE_NONCLIENT 0x01
+#define UPDATE_ERASE 0x02
+#define UPDATE_PAINT 0x04
+#define UPDATE_INTERNALPAINT 0x08
+#define UPDATE_ALLCHILDREN 0x10
+#define UPDATE_NOCHILDREN 0x20
+#define UPDATE_NOREGION 0x40
+#define UPDATE_DELAYED_ERASE 0x80
+
+
+
+struct update_window_zorder_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ rectangle_t rect;
+};
+struct update_window_zorder_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct redraw_window_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ unsigned int flags;
+ /* VARARG(region,rectangles); */
+ char __pad_20[4];
+};
+struct redraw_window_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_window_property_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ lparam_t data;
+ atom_t atom;
+ /* VARARG(name,unicode_str); */
+ char __pad_28[4];
+};
+struct set_window_property_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct remove_window_property_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ atom_t atom;
+ /* VARARG(name,unicode_str); */
+ char __pad_20[4];
+};
+struct remove_window_property_reply
+{
+ struct reply_header __header;
+ lparam_t data;
+};
+
+
+
+struct get_window_property_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ atom_t atom;
+ /* VARARG(name,unicode_str); */
+ char __pad_20[4];
+};
+struct get_window_property_reply
+{
+ struct reply_header __header;
+ lparam_t data;
+};
+
+
+
+struct get_window_properties_request
+{
+ struct request_header __header;
+ user_handle_t window;
+};
+struct get_window_properties_reply
+{
+ struct reply_header __header;
+ int total;
+ /* VARARG(props,properties); */
+ char __pad_12[4];
+};
+
+
+
+struct create_winstation_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ unsigned int access;
+ unsigned int attributes;
+ /* VARARG(name,unicode_str); */
+};
+struct create_winstation_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_winstation_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ /* VARARG(name,unicode_str); */
+ char __pad_20[4];
+};
+struct open_winstation_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct close_winstation_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct close_winstation_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_process_winstation_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct get_process_winstation_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct set_process_winstation_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct set_process_winstation_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct enum_winstation_request
+{
+ struct request_header __header;
+ unsigned int index;
+};
+struct enum_winstation_reply
+{
+ struct reply_header __header;
+ unsigned int next;
+ /* VARARG(name,unicode_str); */
+ char __pad_12[4];
+};
+
+
+
+struct create_desktop_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ unsigned int access;
+ unsigned int attributes;
+ /* VARARG(name,unicode_str); */
+};
+struct create_desktop_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_desktop_request
+{
+ struct request_header __header;
+ obj_handle_t winsta;
+ unsigned int flags;
+ unsigned int access;
+ unsigned int attributes;
+ /* VARARG(name,unicode_str); */
+ char __pad_28[4];
+};
+struct open_desktop_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct close_desktop_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct close_desktop_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_thread_desktop_request
+{
+ struct request_header __header;
+ thread_id_t tid;
+};
+struct get_thread_desktop_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct set_thread_desktop_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct set_thread_desktop_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct enum_desktop_request
+{
+ struct request_header __header;
+ obj_handle_t winstation;
+ unsigned int index;
+ char __pad_20[4];
+};
+struct enum_desktop_reply
+{
+ struct reply_header __header;
+ unsigned int next;
+ /* VARARG(name,unicode_str); */
+ char __pad_12[4];
+};
+
+
+
+struct set_user_object_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int flags;
+ unsigned int obj_flags;
+};
+struct set_user_object_info_reply
+{
+ struct reply_header __header;
+ int is_desktop;
+ unsigned int old_obj_flags;
+ /* VARARG(name,unicode_str); */
+};
+#define SET_USER_OBJECT_FLAGS 1
+
+
+
+struct register_hotkey_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ int id;
+ unsigned int flags;
+ unsigned int vkey;
+ char __pad_28[4];
+};
+struct register_hotkey_reply
+{
+ struct reply_header __header;
+ int replaced;
+ unsigned int flags;
+ unsigned int vkey;
+ char __pad_20[4];
+};
+
+
+
+struct unregister_hotkey_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ int id;
+ char __pad_20[4];
+};
+struct unregister_hotkey_reply
+{
+ struct reply_header __header;
+ unsigned int flags;
+ unsigned int vkey;
+};
+
+
+
+struct attach_thread_input_request
+{
+ struct request_header __header;
+ thread_id_t tid_from;
+ thread_id_t tid_to;
+ int attach;
+};
+struct attach_thread_input_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_thread_input_request
+{
+ struct request_header __header;
+ thread_id_t tid;
+};
+struct get_thread_input_reply
+{
+ struct reply_header __header;
+ user_handle_t focus;
+ user_handle_t capture;
+ user_handle_t active;
+ user_handle_t foreground;
+ user_handle_t menu_owner;
+ user_handle_t move_size;
+ user_handle_t caret;
+ user_handle_t cursor;
+ int show_count;
+ rectangle_t rect;
+ char __pad_60[4];
+};
+
+
+
+struct get_last_input_time_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct get_last_input_time_reply
+{
+ struct reply_header __header;
+ unsigned int time;
+ char __pad_12[4];
+};
+
+
+
+struct get_key_state_request
+{
+ struct request_header __header;
+ thread_id_t tid;
+ int key;
+ char __pad_20[4];
+};
+struct get_key_state_reply
+{
+ struct reply_header __header;
+ unsigned char state;
+ /* VARARG(keystate,bytes); */
+ char __pad_9[7];
+};
+
+
+struct set_key_state_request
+{
+ struct request_header __header;
+ thread_id_t tid;
+ int async;
+ /* VARARG(keystate,bytes); */
+ char __pad_20[4];
+};
+struct set_key_state_reply
+{
+ struct reply_header __header;
+};
+
+
+struct set_foreground_window_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct set_foreground_window_reply
+{
+ struct reply_header __header;
+ user_handle_t previous;
+ int send_msg_old;
+ int send_msg_new;
+ char __pad_20[4];
+};
+
+
+struct set_focus_window_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct set_focus_window_reply
+{
+ struct reply_header __header;
+ user_handle_t previous;
+ char __pad_12[4];
+};
+
+
+struct set_active_window_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct set_active_window_reply
+{
+ struct reply_header __header;
+ user_handle_t previous;
+ char __pad_12[4];
+};
+
+
+struct set_capture_window_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ unsigned int flags;
+ char __pad_20[4];
+};
+struct set_capture_window_reply
+{
+ struct reply_header __header;
+ user_handle_t previous;
+ user_handle_t full_handle;
+};
+#define CAPTURE_MENU 0x01
+#define CAPTURE_MOVESIZE 0x02
+
+
+
+struct set_caret_window_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ int width;
+ int height;
+};
+struct set_caret_window_reply
+{
+ struct reply_header __header;
+ user_handle_t previous;
+ rectangle_t old_rect;
+ int old_hide;
+ int old_state;
+ char __pad_36[4];
+};
+
+
+
+struct set_caret_info_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ user_handle_t handle;
+ int x;
+ int y;
+ int hide;
+ int state;
+ char __pad_36[4];
+};
+struct set_caret_info_reply
+{
+ struct reply_header __header;
+ user_handle_t full_handle;
+ rectangle_t old_rect;
+ int old_hide;
+ int old_state;
+ char __pad_36[4];
+};
+#define SET_CARET_POS 0x01
+#define SET_CARET_HIDE 0x02
+#define SET_CARET_STATE 0x04
+
+
+
+struct set_hook_request
+{
+ struct request_header __header;
+ int id;
+ process_id_t pid;
+ thread_id_t tid;
+ int event_min;
+ int event_max;
+ client_ptr_t proc;
+ int flags;
+ int unicode;
+ /* VARARG(module,unicode_str); */
+};
+struct set_hook_reply
+{
+ struct reply_header __header;
+ user_handle_t handle;
+ unsigned int active_hooks;
+};
+
+
+
+struct remove_hook_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ client_ptr_t proc;
+ int id;
+ char __pad_28[4];
+};
+struct remove_hook_reply
+{
+ struct reply_header __header;
+ unsigned int active_hooks;
+ char __pad_12[4];
+};
+
+
+
+struct start_hook_chain_request
+{
+ struct request_header __header;
+ int id;
+ int event;
+ user_handle_t window;
+ int object_id;
+ int child_id;
+};
+struct start_hook_chain_reply
+{
+ struct reply_header __header;
+ user_handle_t handle;
+ process_id_t pid;
+ thread_id_t tid;
+ int unicode;
+ client_ptr_t proc;
+ unsigned int active_hooks;
+ /* VARARG(module,unicode_str); */
+ char __pad_36[4];
+};
+
+
+
+struct finish_hook_chain_request
+{
+ struct request_header __header;
+ int id;
+};
+struct finish_hook_chain_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_hook_info_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ int get_next;
+ int event;
+ user_handle_t window;
+ int object_id;
+ int child_id;
+ char __pad_36[4];
+};
+struct get_hook_info_reply
+{
+ struct reply_header __header;
+ user_handle_t handle;
+ int id;
+ process_id_t pid;
+ thread_id_t tid;
+ client_ptr_t proc;
+ int unicode;
+ /* VARARG(module,unicode_str); */
+ char __pad_36[4];
+};
+
+
+
+struct create_class_request
+{
+ struct request_header __header;
+ int local;
+ atom_t atom;
+ unsigned int style;
+ mod_handle_t instance;
+ int extra;
+ int win_extra;
+ client_ptr_t client_ptr;
+ /* VARARG(name,unicode_str); */
+};
+struct create_class_reply
+{
+ struct reply_header __header;
+ atom_t atom;
+ char __pad_12[4];
+};
+
+
+
+struct destroy_class_request
+{
+ struct request_header __header;
+ atom_t atom;
+ mod_handle_t instance;
+ /* VARARG(name,unicode_str); */
+};
+struct destroy_class_reply
+{
+ struct reply_header __header;
+ client_ptr_t client_ptr;
+};
+
+
+
+struct set_class_info_request
+{
+ struct request_header __header;
+ user_handle_t window;
+ unsigned int flags;
+ atom_t atom;
+ unsigned int style;
+ int win_extra;
+ mod_handle_t instance;
+ int extra_offset;
+ data_size_t extra_size;
+ lparam_t extra_value;
+};
+struct set_class_info_reply
+{
+ struct reply_header __header;
+ atom_t old_atom;
+ unsigned int old_style;
+ int old_extra;
+ int old_win_extra;
+ mod_handle_t old_instance;
+ lparam_t old_extra_value;
+};
+#define SET_CLASS_ATOM 0x0001
+#define SET_CLASS_STYLE 0x0002
+#define SET_CLASS_WINEXTRA 0x0004
+#define SET_CLASS_INSTANCE 0x0008
+#define SET_CLASS_EXTRA 0x0010
+
+
+
+struct set_clipboard_info_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ user_handle_t clipboard;
+ user_handle_t owner;
+ user_handle_t viewer;
+ unsigned int seqno;
+};
+struct set_clipboard_info_reply
+{
+ struct reply_header __header;
+ unsigned int flags;
+ user_handle_t old_clipboard;
+ user_handle_t old_owner;
+ user_handle_t old_viewer;
+ unsigned int seqno;
+ char __pad_28[4];
+};
+
+#define SET_CB_OPEN 0x001
+#define SET_CB_OWNER 0x002
+#define SET_CB_VIEWER 0x004
+#define SET_CB_SEQNO 0x008
+#define SET_CB_RELOWNER 0x010
+#define SET_CB_CLOSE 0x020
+#define CB_OPEN 0x040
+#define CB_OWNER 0x080
+#define CB_PROCESS 0x100
+
+
+
+struct open_token_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int flags;
+ char __pad_28[4];
+};
+struct open_token_reply
+{
+ struct reply_header __header;
+ obj_handle_t token;
+ char __pad_12[4];
+};
+#define OPEN_TOKEN_THREAD 1
+#define OPEN_TOKEN_AS_SELF 2
+
+
+
+struct set_global_windows_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ user_handle_t shell_window;
+ user_handle_t shell_listview;
+ user_handle_t progman_window;
+ user_handle_t taskman_window;
+};
+struct set_global_windows_reply
+{
+ struct reply_header __header;
+ user_handle_t old_shell_window;
+ user_handle_t old_shell_listview;
+ user_handle_t old_progman_window;
+ user_handle_t old_taskman_window;
+};
+#define SET_GLOBAL_SHELL_WINDOWS 0x01
+#define SET_GLOBAL_PROGMAN_WINDOW 0x02
+#define SET_GLOBAL_TASKMAN_WINDOW 0x04
+
+
+struct adjust_token_privileges_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int disable_all;
+ int get_modified_state;
+ /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+};
+struct adjust_token_privileges_reply
+{
+ struct reply_header __header;
+ unsigned int len;
+ /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+ char __pad_12[4];
+};
+
+
+struct get_token_privileges_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_token_privileges_reply
+{
+ struct reply_header __header;
+ unsigned int len;
+ /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+ char __pad_12[4];
+};
+
+
+struct check_token_privileges_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ int all_required;
+ /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+ char __pad_20[4];
+};
+struct check_token_privileges_reply
+{
+ struct reply_header __header;
+ int has_privileges;
+ /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+ char __pad_12[4];
+};
+
+struct duplicate_token_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int access;
+ unsigned int attributes;
+ int primary;
+ int impersonation_level;
+};
+struct duplicate_token_reply
+{
+ struct reply_header __header;
+ obj_handle_t new_handle;
+ char __pad_12[4];
+};
+
+struct access_check_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int desired_access;
+ unsigned int mapping_read;
+ unsigned int mapping_write;
+ unsigned int mapping_execute;
+ unsigned int mapping_all;
+ /* VARARG(sd,security_descriptor); */
+ char __pad_36[4];
+};
+struct access_check_reply
+{
+ struct reply_header __header;
+ unsigned int access_granted;
+ unsigned int access_status;
+ unsigned int privileges_len;
+ /* VARARG(privileges,LUID_AND_ATTRIBUTES); */
+ char __pad_20[4];
+};
+
+struct get_token_sid_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int which_sid;
+ char __pad_20[4];
+};
+struct get_token_sid_reply
+{
+ struct reply_header __header;
+ data_size_t sid_len;
+ /* VARARG(sid,SID); */
+ char __pad_12[4];
+};
+
+struct get_token_groups_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_token_groups_reply
+{
+ struct reply_header __header;
+ data_size_t user_len;
+ /* VARARG(user,token_groups); */
+ char __pad_12[4];
+};
+
+struct get_token_default_dacl_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_token_default_dacl_reply
+{
+ struct reply_header __header;
+ data_size_t acl_len;
+ /* VARARG(acl,ACL); */
+ char __pad_12[4];
+};
+
+struct set_token_default_dacl_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ /* VARARG(acl,ACL); */
+};
+struct set_token_default_dacl_reply
+{
+ struct reply_header __header;
+};
+
+struct set_security_object_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int security_info;
+ /* VARARG(sd,security_descriptor); */
+ char __pad_20[4];
+};
+struct set_security_object_reply
+{
+ struct reply_header __header;
+};
+
+struct get_security_object_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int security_info;
+ char __pad_20[4];
+};
+struct get_security_object_reply
+{
+ struct reply_header __header;
+ unsigned int sd_len;
+ /* VARARG(sd,security_descriptor); */
+ char __pad_12[4];
+};
+
+
+struct create_mailslot_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ timeout_t read_timeout;
+ unsigned int max_msgsize;
+ /* VARARG(name,unicode_str); */
+ char __pad_36[4];
+};
+struct create_mailslot_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct set_mailslot_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ timeout_t read_timeout;
+ unsigned int flags;
+ char __pad_28[4];
+};
+struct set_mailslot_info_reply
+{
+ struct reply_header __header;
+ timeout_t read_timeout;
+ unsigned int max_msgsize;
+ char __pad_20[4];
+};
+#define MAILSLOT_SET_READ_TIMEOUT 1
+
+
+
+struct create_directory_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(directory_name,unicode_str); */
+};
+struct create_directory_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_directory_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(directory_name,unicode_str); */
+};
+struct open_directory_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct get_directory_entry_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ unsigned int index;
+ char __pad_20[4];
+};
+struct get_directory_entry_reply
+{
+ struct reply_header __header;
+ data_size_t name_len;
+ /* VARARG(name,unicode_str,name_len); */
+ /* VARARG(type,unicode_str); */
+ char __pad_12[4];
+};
+
+
+
+struct create_symlink_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ data_size_t name_len;
+ /* VARARG(name,unicode_str,name_len); */
+ /* VARARG(target_name,unicode_str); */
+ char __pad_28[4];
+};
+struct create_symlink_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_symlink_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(name,unicode_str); */
+};
+struct open_symlink_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct query_symlink_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct query_symlink_reply
+{
+ struct reply_header __header;
+ data_size_t total;
+ /* VARARG(target_name,unicode_str); */
+ char __pad_12[4];
+};
+
+
+
+struct get_object_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_object_info_reply
+{
+ struct reply_header __header;
+ unsigned int access;
+ unsigned int ref_count;
+ data_size_t total;
+ /* VARARG(name,unicode_str); */
+ char __pad_20[4];
+};
+
+
+
+struct unlink_object_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct unlink_object_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_token_impersonation_level_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_token_impersonation_level_reply
+{
+ struct reply_header __header;
+ int impersonation_level;
+ char __pad_12[4];
+};
+
+
+struct allocate_locally_unique_id_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct allocate_locally_unique_id_reply
+{
+ struct reply_header __header;
+ luid_t luid;
+};
+
+
+
+struct create_device_manager_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ char __pad_20[4];
+};
+struct create_device_manager_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct create_device_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ client_ptr_t user_ptr;
+ obj_handle_t manager;
+ /* VARARG(name,unicode_str); */
+ char __pad_36[4];
+};
+struct create_device_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct delete_device_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct delete_device_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_next_device_request_request
+{
+ struct request_header __header;
+ obj_handle_t manager;
+ obj_handle_t prev;
+ unsigned int status;
+ /* VARARG(prev_data,bytes); */
+};
+struct get_next_device_request_reply
+{
+ struct reply_header __header;
+ obj_handle_t next;
+ ioctl_code_t code;
+ client_ptr_t user_ptr;
+ process_id_t client_pid;
+ thread_id_t client_tid;
+ data_size_t in_size;
+ data_size_t out_size;
+ /* VARARG(next_data,bytes); */
+};
+
+
+
+struct make_process_system_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct make_process_system_reply
+{
+ struct reply_header __header;
+ obj_handle_t event;
+ char __pad_12[4];
+};
+
+
+
+struct get_token_statistics_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct get_token_statistics_reply
+{
+ struct reply_header __header;
+ luid_t token_id;
+ luid_t modified_id;
+ int primary;
+ int impersonation_level;
+ int group_count;
+ int privilege_count;
+};
+
+
+
+struct create_completion_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ unsigned int concurrent;
+ obj_handle_t rootdir;
+ /* VARARG(filename,string); */
+ char __pad_28[4];
+};
+struct create_completion_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct open_completion_request
+{
+ struct request_header __header;
+ unsigned int access;
+ unsigned int attributes;
+ obj_handle_t rootdir;
+ /* VARARG(filename,string); */
+};
+struct open_completion_reply
+{
+ struct reply_header __header;
+ obj_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct add_completion_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ apc_param_t ckey;
+ apc_param_t cvalue;
+ apc_param_t information;
+ unsigned int status;
+ char __pad_44[4];
+};
+struct add_completion_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct remove_completion_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct remove_completion_reply
+{
+ struct reply_header __header;
+ apc_param_t ckey;
+ apc_param_t cvalue;
+ apc_param_t information;
+ unsigned int status;
+ char __pad_36[4];
+};
+
+
+
+struct query_completion_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+};
+struct query_completion_reply
+{
+ struct reply_header __header;
+ unsigned int depth;
+ char __pad_12[4];
+};
+
+
+
+struct set_completion_info_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ apc_param_t ckey;
+ obj_handle_t chandle;
+ char __pad_28[4];
+};
+struct set_completion_info_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct add_fd_completion_request
+{
+ struct request_header __header;
+ obj_handle_t handle;
+ apc_param_t cvalue;
+ apc_param_t information;
+ unsigned int status;
+ char __pad_36[4];
+};
+struct add_fd_completion_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_window_layered_info_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct get_window_layered_info_reply
+{
+ struct reply_header __header;
+ unsigned int color_key;
+ unsigned int alpha;
+ unsigned int flags;
+ char __pad_20[4];
+};
+
+
+
+struct set_window_layered_info_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+ unsigned int color_key;
+ unsigned int alpha;
+ unsigned int flags;
+ char __pad_28[4];
+};
+struct set_window_layered_info_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct alloc_user_handle_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct alloc_user_handle_reply
+{
+ struct reply_header __header;
+ user_handle_t handle;
+ char __pad_12[4];
+};
+
+
+
+struct free_user_handle_request
+{
+ struct request_header __header;
+ user_handle_t handle;
+};
+struct free_user_handle_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct set_cursor_request
+{
+ struct request_header __header;
+ unsigned int flags;
+ user_handle_t handle;
+ int show_count;
+ int x;
+ int y;
+ rectangle_t clip;
+ unsigned int clip_msg;
+ char __pad_52[4];
+};
+struct set_cursor_reply
+{
+ struct reply_header __header;
+ user_handle_t prev_handle;
+ int prev_count;
+ int prev_x;
+ int prev_y;
+ int new_x;
+ int new_y;
+ rectangle_t new_clip;
+ unsigned int last_change;
+ char __pad_52[4];
+};
+#define SET_CURSOR_HANDLE 0x01
+#define SET_CURSOR_COUNT 0x02
+#define SET_CURSOR_POS 0x04
+#define SET_CURSOR_CLIP 0x08
+#define SET_CURSOR_NOCLIP 0x10
+
+
+
+struct update_rawinput_devices_request
+{
+ struct request_header __header;
+ /* VARARG(devices,rawinput_devices); */
+ char __pad_12[4];
+};
+struct update_rawinput_devices_reply
+{
+ struct reply_header __header;
+};
+
+
+
+struct get_suspend_context_request
+{
+ struct request_header __header;
+ char __pad_12[4];
+};
+struct get_suspend_context_reply
+{
+ struct reply_header __header;
+ /* VARARG(context,context); */
+};
+
+
+
+struct set_suspend_context_request
+{
+ struct request_header __header;
+ /* VARARG(context,context); */
+ char __pad_12[4];
+};
+struct set_suspend_context_reply
+{
+ struct reply_header __header;
+};
+
+
+enum request
+{
+ REQ_new_process,
+ REQ_get_new_process_info,
+ REQ_new_thread,
+ REQ_get_startup_info,
+ REQ_init_process_done,
+ REQ_init_thread,
+ REQ_terminate_process,
+ REQ_terminate_thread,
+ REQ_get_process_info,
+ REQ_set_process_info,
+ REQ_get_thread_info,
+ REQ_set_thread_info,
+ REQ_get_dll_info,
+ REQ_suspend_thread,
+ REQ_resume_thread,
+ REQ_load_dll,
+ REQ_unload_dll,
+ REQ_queue_apc,
+ REQ_get_apc_result,
+ REQ_close_handle,
+ REQ_set_handle_info,
+ REQ_dup_handle,
+ REQ_open_process,
+ REQ_open_thread,
+ REQ_select,
+ REQ_create_event,
+ REQ_event_op,
+ REQ_query_event,
+ REQ_open_event,
+ REQ_create_keyed_event,
+ REQ_open_keyed_event,
+ REQ_create_mutex,
+ REQ_release_mutex,
+ REQ_open_mutex,
+ REQ_create_semaphore,
+ REQ_release_semaphore,
+ REQ_open_semaphore,
+ REQ_create_file,
+ REQ_open_file_object,
+ REQ_alloc_file_handle,
+ REQ_get_handle_unix_name,
+ REQ_get_handle_fd,
+ REQ_flush_file,
+ REQ_lock_file,
+ REQ_unlock_file,
+ REQ_create_socket,
+ REQ_accept_socket,
+ REQ_accept_into_socket,
+ REQ_set_socket_event,
+ REQ_get_socket_event,
+ REQ_get_socket_info,
+ REQ_enable_socket_event,
+ REQ_set_socket_deferred,
+ REQ_alloc_console,
+ REQ_free_console,
+ REQ_get_console_renderer_events,
+ REQ_open_console,
+ REQ_get_console_wait_event,
+ REQ_get_console_mode,
+ REQ_set_console_mode,
+ REQ_set_console_input_info,
+ REQ_get_console_input_info,
+ REQ_append_console_input_history,
+ REQ_get_console_input_history,
+ REQ_create_console_output,
+ REQ_set_console_output_info,
+ REQ_get_console_output_info,
+ REQ_write_console_input,
+ REQ_read_console_input,
+ REQ_write_console_output,
+ REQ_fill_console_output,
+ REQ_read_console_output,
+ REQ_move_console_output,
+ REQ_send_console_signal,
+ REQ_read_directory_changes,
+ REQ_read_change,
+ REQ_create_mapping,
+ REQ_open_mapping,
+ REQ_get_mapping_info,
+ REQ_get_mapping_committed_range,
+ REQ_add_mapping_committed_range,
+ REQ_create_snapshot,
+ REQ_next_process,
+ REQ_next_thread,
+ REQ_wait_debug_event,
+ REQ_queue_exception_event,
+ REQ_get_exception_status,
+ REQ_output_debug_string,
+ REQ_continue_debug_event,
+ REQ_debug_process,
+ REQ_debug_break,
+ REQ_set_debugger_kill_on_exit,
+ REQ_read_process_memory,
+ REQ_write_process_memory,
+ REQ_create_key,
+ REQ_open_key,
+ REQ_delete_key,
+ REQ_flush_key,
+ REQ_enum_key,
+ REQ_set_key_value,
+ REQ_get_key_value,
+ REQ_enum_key_value,
+ REQ_delete_key_value,
+ REQ_load_registry,
+ REQ_unload_registry,
+ REQ_save_registry,
+ REQ_set_registry_notification,
+ REQ_create_timer,
+ REQ_open_timer,
+ REQ_set_timer,
+ REQ_cancel_timer,
+ REQ_get_timer_info,
+ REQ_get_thread_context,
+ REQ_set_thread_context,
+ REQ_get_selector_entry,
+ REQ_add_atom,
+ REQ_delete_atom,
+ REQ_find_atom,
+ REQ_get_atom_information,
+ REQ_set_atom_information,
+ REQ_empty_atom_table,
+ REQ_init_atom_table,
+ REQ_get_msg_queue,
+ REQ_set_queue_fd,
+ REQ_set_queue_mask,
+ REQ_get_queue_status,
+ REQ_get_process_idle_event,
+ REQ_send_message,
+ REQ_post_quit_message,
+ REQ_send_hardware_message,
+ REQ_get_message,
+ REQ_reply_message,
+ REQ_accept_hardware_message,
+ REQ_get_message_reply,
+ REQ_set_win_timer,
+ REQ_kill_win_timer,
+ REQ_is_window_hung,
+ REQ_get_serial_info,
+ REQ_set_serial_info,
+ REQ_register_async,
+ REQ_cancel_async,
+ REQ_ioctl,
+ REQ_get_ioctl_result,
+ REQ_create_named_pipe,
+ REQ_get_named_pipe_info,
+ REQ_create_window,
+ REQ_destroy_window,
+ REQ_get_desktop_window,
+ REQ_set_window_owner,
+ REQ_get_window_info,
+ REQ_set_window_info,
+ REQ_set_parent,
+ REQ_get_window_parents,
+ REQ_get_window_children,
+ REQ_get_window_children_from_point,
+ REQ_get_window_tree,
+ REQ_set_window_pos,
+ REQ_get_window_rectangles,
+ REQ_get_window_text,
+ REQ_set_window_text,
+ REQ_get_windows_offset,
+ REQ_get_visible_region,
+ REQ_get_surface_region,
+ REQ_get_window_region,
+ REQ_set_window_region,
+ REQ_get_update_region,
+ REQ_update_window_zorder,
+ REQ_redraw_window,
+ REQ_set_window_property,
+ REQ_remove_window_property,
+ REQ_get_window_property,
+ REQ_get_window_properties,
+ REQ_create_winstation,
+ REQ_open_winstation,
+ REQ_close_winstation,
+ REQ_get_process_winstation,
+ REQ_set_process_winstation,
+ REQ_enum_winstation,
+ REQ_create_desktop,
+ REQ_open_desktop,
+ REQ_close_desktop,
+ REQ_get_thread_desktop,
+ REQ_set_thread_desktop,
+ REQ_enum_desktop,
+ REQ_set_user_object_info,
+ REQ_register_hotkey,
+ REQ_unregister_hotkey,
+ REQ_attach_thread_input,
+ REQ_get_thread_input,
+ REQ_get_last_input_time,
+ REQ_get_key_state,
+ REQ_set_key_state,
+ REQ_set_foreground_window,
+ REQ_set_focus_window,
+ REQ_set_active_window,
+ REQ_set_capture_window,
+ REQ_set_caret_window,
+ REQ_set_caret_info,
+ REQ_set_hook,
+ REQ_remove_hook,
+ REQ_start_hook_chain,
+ REQ_finish_hook_chain,
+ REQ_get_hook_info,
+ REQ_create_class,
+ REQ_destroy_class,
+ REQ_set_class_info,
+ REQ_set_clipboard_info,
+ REQ_open_token,
+ REQ_set_global_windows,
+ REQ_adjust_token_privileges,
+ REQ_get_token_privileges,
+ REQ_check_token_privileges,
+ REQ_duplicate_token,
+ REQ_access_check,
+ REQ_get_token_sid,
+ REQ_get_token_groups,
+ REQ_get_token_default_dacl,
+ REQ_set_token_default_dacl,
+ REQ_set_security_object,
+ REQ_get_security_object,
+ REQ_create_mailslot,
+ REQ_set_mailslot_info,
+ REQ_create_directory,
+ REQ_open_directory,
+ REQ_get_directory_entry,
+ REQ_create_symlink,
+ REQ_open_symlink,
+ REQ_query_symlink,
+ REQ_get_object_info,
+ REQ_unlink_object,
+ REQ_get_token_impersonation_level,
+ REQ_allocate_locally_unique_id,
+ REQ_create_device_manager,
+ REQ_create_device,
+ REQ_delete_device,
+ REQ_get_next_device_request,
+ REQ_make_process_system,
+ REQ_get_token_statistics,
+ REQ_create_completion,
+ REQ_open_completion,
+ REQ_add_completion,
+ REQ_remove_completion,
+ REQ_query_completion,
+ REQ_set_completion_info,
+ REQ_add_fd_completion,
+ REQ_get_window_layered_info,
+ REQ_set_window_layered_info,
+ REQ_alloc_user_handle,
+ REQ_free_user_handle,
+ REQ_set_cursor,
+ REQ_update_rawinput_devices,
+ REQ_get_suspend_context,
+ REQ_set_suspend_context,
+ REQ_NB_REQUESTS
+};
+
+union generic_request
+{
+ struct request_max_size max_size;
+ struct request_header request_header;
+ struct new_process_request new_process_request;
+ struct get_new_process_info_request get_new_process_info_request;
+ struct new_thread_request new_thread_request;
+ struct get_startup_info_request get_startup_info_request;
+ struct init_process_done_request init_process_done_request;
+ struct init_thread_request init_thread_request;
+ struct terminate_process_request terminate_process_request;
+ struct terminate_thread_request terminate_thread_request;
+ struct get_process_info_request get_process_info_request;
+ struct set_process_info_request set_process_info_request;
+ struct get_thread_info_request get_thread_info_request;
+ struct set_thread_info_request set_thread_info_request;
+ struct get_dll_info_request get_dll_info_request;
+ struct suspend_thread_request suspend_thread_request;
+ struct resume_thread_request resume_thread_request;
+ struct load_dll_request load_dll_request;
+ struct unload_dll_request unload_dll_request;
+ struct queue_apc_request queue_apc_request;
+ struct get_apc_result_request get_apc_result_request;
+ struct close_handle_request close_handle_request;
+ struct set_handle_info_request set_handle_info_request;
+ struct dup_handle_request dup_handle_request;
+ struct open_process_request open_process_request;
+ struct open_thread_request open_thread_request;
+ struct select_request select_request;
+ struct create_event_request create_event_request;
+ struct event_op_request event_op_request;
+ struct query_event_request query_event_request;
+ struct open_event_request open_event_request;
+ struct create_keyed_event_request create_keyed_event_request;
+ struct open_keyed_event_request open_keyed_event_request;
+ struct create_mutex_request create_mutex_request;
+ struct release_mutex_request release_mutex_request;
+ struct open_mutex_request open_mutex_request;
+ struct create_semaphore_request create_semaphore_request;
+ struct release_semaphore_request release_semaphore_request;
+ struct open_semaphore_request open_semaphore_request;
+ struct create_file_request create_file_request;
+ struct open_file_object_request open_file_object_request;
+ struct alloc_file_handle_request alloc_file_handle_request;
+ struct get_handle_unix_name_request get_handle_unix_name_request;
+ struct get_handle_fd_request get_handle_fd_request;
+ struct flush_file_request flush_file_request;
+ struct lock_file_request lock_file_request;
+ struct unlock_file_request unlock_file_request;
+ struct create_socket_request create_socket_request;
+ struct accept_socket_request accept_socket_request;
+ struct accept_into_socket_request accept_into_socket_request;
+ struct set_socket_event_request set_socket_event_request;
+ struct get_socket_event_request get_socket_event_request;
+ struct get_socket_info_request get_socket_info_request;
+ struct enable_socket_event_request enable_socket_event_request;
+ struct set_socket_deferred_request set_socket_deferred_request;
+ struct alloc_console_request alloc_console_request;
+ struct free_console_request free_console_request;
+ struct get_console_renderer_events_request get_console_renderer_events_request;
+ struct open_console_request open_console_request;
+ struct get_console_wait_event_request get_console_wait_event_request;
+ struct get_console_mode_request get_console_mode_request;
+ struct set_console_mode_request set_console_mode_request;
+ struct set_console_input_info_request set_console_input_info_request;
+ struct get_console_input_info_request get_console_input_info_request;
+ struct append_console_input_history_request append_console_input_history_request;
+ struct get_console_input_history_request get_console_input_history_request;
+ struct create_console_output_request create_console_output_request;
+ struct set_console_output_info_request set_console_output_info_request;
+ struct get_console_output_info_request get_console_output_info_request;
+ struct write_console_input_request write_console_input_request;
+ struct read_console_input_request read_console_input_request;
+ struct write_console_output_request write_console_output_request;
+ struct fill_console_output_request fill_console_output_request;
+ struct read_console_output_request read_console_output_request;
+ struct move_console_output_request move_console_output_request;
+ struct send_console_signal_request send_console_signal_request;
+ struct read_directory_changes_request read_directory_changes_request;
+ struct read_change_request read_change_request;
+ struct create_mapping_request create_mapping_request;
+ struct open_mapping_request open_mapping_request;
+ struct get_mapping_info_request get_mapping_info_request;
+ struct get_mapping_committed_range_request get_mapping_committed_range_request;
+ struct add_mapping_committed_range_request add_mapping_committed_range_request;
+ struct create_snapshot_request create_snapshot_request;
+ struct next_process_request next_process_request;
+ struct next_thread_request next_thread_request;
+ struct wait_debug_event_request wait_debug_event_request;
+ struct queue_exception_event_request queue_exception_event_request;
+ struct get_exception_status_request get_exception_status_request;
+ struct output_debug_string_request output_debug_string_request;
+ struct continue_debug_event_request continue_debug_event_request;
+ struct debug_process_request debug_process_request;
+ struct debug_break_request debug_break_request;
+ struct set_debugger_kill_on_exit_request set_debugger_kill_on_exit_request;
+ struct read_process_memory_request read_process_memory_request;
+ struct write_process_memory_request write_process_memory_request;
+ struct create_key_request create_key_request;
+ struct open_key_request open_key_request;
+ struct delete_key_request delete_key_request;
+ struct flush_key_request flush_key_request;
+ struct enum_key_request enum_key_request;
+ struct set_key_value_request set_key_value_request;
+ struct get_key_value_request get_key_value_request;
+ struct enum_key_value_request enum_key_value_request;
+ struct delete_key_value_request delete_key_value_request;
+ struct load_registry_request load_registry_request;
+ struct unload_registry_request unload_registry_request;
+ struct save_registry_request save_registry_request;
+ struct set_registry_notification_request set_registry_notification_request;
+ struct create_timer_request create_timer_request;
+ struct open_timer_request open_timer_request;
+ struct set_timer_request set_timer_request;
+ struct cancel_timer_request cancel_timer_request;
+ struct get_timer_info_request get_timer_info_request;
+ struct get_thread_context_request get_thread_context_request;
+ struct set_thread_context_request set_thread_context_request;
+ struct get_selector_entry_request get_selector_entry_request;
+ struct add_atom_request add_atom_request;
+ struct delete_atom_request delete_atom_request;
+ struct find_atom_request find_atom_request;
+ struct get_atom_information_request get_atom_information_request;
+ struct set_atom_information_request set_atom_information_request;
+ struct empty_atom_table_request empty_atom_table_request;
+ struct init_atom_table_request init_atom_table_request;
+ struct get_msg_queue_request get_msg_queue_request;
+ struct set_queue_fd_request set_queue_fd_request;
+ struct set_queue_mask_request set_queue_mask_request;
+ struct get_queue_status_request get_queue_status_request;
+ struct get_process_idle_event_request get_process_idle_event_request;
+ struct send_message_request send_message_request;
+ struct post_quit_message_request post_quit_message_request;
+ struct send_hardware_message_request send_hardware_message_request;
+ struct get_message_request get_message_request;
+ struct reply_message_request reply_message_request;
+ struct accept_hardware_message_request accept_hardware_message_request;
+ struct get_message_reply_request get_message_reply_request;
+ struct set_win_timer_request set_win_timer_request;
+ struct kill_win_timer_request kill_win_timer_request;
+ struct is_window_hung_request is_window_hung_request;
+ struct get_serial_info_request get_serial_info_request;
+ struct set_serial_info_request set_serial_info_request;
+ struct register_async_request register_async_request;
+ struct cancel_async_request cancel_async_request;
+ struct ioctl_request ioctl_request;
+ struct get_ioctl_result_request get_ioctl_result_request;
+ struct create_named_pipe_request create_named_pipe_request;
+ struct get_named_pipe_info_request get_named_pipe_info_request;
+ struct create_window_request create_window_request;
+ struct destroy_window_request destroy_window_request;
+ struct get_desktop_window_request get_desktop_window_request;
+ struct set_window_owner_request set_window_owner_request;
+ struct get_window_info_request get_window_info_request;
+ struct set_window_info_request set_window_info_request;
+ struct set_parent_request set_parent_request;
+ struct get_window_parents_request get_window_parents_request;
+ struct get_window_children_request get_window_children_request;
+ struct get_window_children_from_point_request get_window_children_from_point_request;
+ struct get_window_tree_request get_window_tree_request;
+ struct set_window_pos_request set_window_pos_request;
+ struct get_window_rectangles_request get_window_rectangles_request;
+ struct get_window_text_request get_window_text_request;
+ struct set_window_text_request set_window_text_request;
+ struct get_windows_offset_request get_windows_offset_request;
+ struct get_visible_region_request get_visible_region_request;
+ struct get_surface_region_request get_surface_region_request;
+ struct get_window_region_request get_window_region_request;
+ struct set_window_region_request set_window_region_request;
+ struct get_update_region_request get_update_region_request;
+ struct update_window_zorder_request update_window_zorder_request;
+ struct redraw_window_request redraw_window_request;
+ struct set_window_property_request set_window_property_request;
+ struct remove_window_property_request remove_window_property_request;
+ struct get_window_property_request get_window_property_request;
+ struct get_window_properties_request get_window_properties_request;
+ struct create_winstation_request create_winstation_request;
+ struct open_winstation_request open_winstation_request;
+ struct close_winstation_request close_winstation_request;
+ struct get_process_winstation_request get_process_winstation_request;
+ struct set_process_winstation_request set_process_winstation_request;
+ struct enum_winstation_request enum_winstation_request;
+ struct create_desktop_request create_desktop_request;
+ struct open_desktop_request open_desktop_request;
+ struct close_desktop_request close_desktop_request;
+ struct get_thread_desktop_request get_thread_desktop_request;
+ struct set_thread_desktop_request set_thread_desktop_request;
+ struct enum_desktop_request enum_desktop_request;
+ struct set_user_object_info_request set_user_object_info_request;
+ struct register_hotkey_request register_hotkey_request;
+ struct unregister_hotkey_request unregister_hotkey_request;
+ struct attach_thread_input_request attach_thread_input_request;
+ struct get_thread_input_request get_thread_input_request;
+ struct get_last_input_time_request get_last_input_time_request;
+ struct get_key_state_request get_key_state_request;
+ struct set_key_state_request set_key_state_request;
+ struct set_foreground_window_request set_foreground_window_request;
+ struct set_focus_window_request set_focus_window_request;
+ struct set_active_window_request set_active_window_request;
+ struct set_capture_window_request set_capture_window_request;
+ struct set_caret_window_request set_caret_window_request;
+ struct set_caret_info_request set_caret_info_request;
+ struct set_hook_request set_hook_request;
+ struct remove_hook_request remove_hook_request;
+ struct start_hook_chain_request start_hook_chain_request;
+ struct finish_hook_chain_request finish_hook_chain_request;
+ struct get_hook_info_request get_hook_info_request;
+ struct create_class_request create_class_request;
+ struct destroy_class_request destroy_class_request;
+ struct set_class_info_request set_class_info_request;
+ struct set_clipboard_info_request set_clipboard_info_request;
+ struct open_token_request open_token_request;
+ struct set_global_windows_request set_global_windows_request;
+ struct adjust_token_privileges_request adjust_token_privileges_request;
+ struct get_token_privileges_request get_token_privileges_request;
+ struct check_token_privileges_request check_token_privileges_request;
+ struct duplicate_token_request duplicate_token_request;
+ struct access_check_request access_check_request;
+ struct get_token_sid_request get_token_sid_request;
+ struct get_token_groups_request get_token_groups_request;
+ struct get_token_default_dacl_request get_token_default_dacl_request;
+ struct set_token_default_dacl_request set_token_default_dacl_request;
+ struct set_security_object_request set_security_object_request;
+ struct get_security_object_request get_security_object_request;
+ struct create_mailslot_request create_mailslot_request;
+ struct set_mailslot_info_request set_mailslot_info_request;
+ struct create_directory_request create_directory_request;
+ struct open_directory_request open_directory_request;
+ struct get_directory_entry_request get_directory_entry_request;
+ struct create_symlink_request create_symlink_request;
+ struct open_symlink_request open_symlink_request;
+ struct query_symlink_request query_symlink_request;
+ struct get_object_info_request get_object_info_request;
+ struct unlink_object_request unlink_object_request;
+ struct get_token_impersonation_level_request get_token_impersonation_level_request;
+ struct allocate_locally_unique_id_request allocate_locally_unique_id_request;
+ struct create_device_manager_request create_device_manager_request;
+ struct create_device_request create_device_request;
+ struct delete_device_request delete_device_request;
+ struct get_next_device_request_request get_next_device_request_request;
+ struct make_process_system_request make_process_system_request;
+ struct get_token_statistics_request get_token_statistics_request;
+ struct create_completion_request create_completion_request;
+ struct open_completion_request open_completion_request;
+ struct add_completion_request add_completion_request;
+ struct remove_completion_request remove_completion_request;
+ struct query_completion_request query_completion_request;
+ struct set_completion_info_request set_completion_info_request;
+ struct add_fd_completion_request add_fd_completion_request;
+ struct get_window_layered_info_request get_window_layered_info_request;
+ struct set_window_layered_info_request set_window_layered_info_request;
+ struct alloc_user_handle_request alloc_user_handle_request;
+ struct free_user_handle_request free_user_handle_request;
+ struct set_cursor_request set_cursor_request;
+ struct update_rawinput_devices_request update_rawinput_devices_request;
+ struct get_suspend_context_request get_suspend_context_request;
+ struct set_suspend_context_request set_suspend_context_request;
+};
+union generic_reply
+{
+ struct request_max_size max_size;
+ struct reply_header reply_header;
+ struct new_process_reply new_process_reply;
+ struct get_new_process_info_reply get_new_process_info_reply;
+ struct new_thread_reply new_thread_reply;
+ struct get_startup_info_reply get_startup_info_reply;
+ struct init_process_done_reply init_process_done_reply;
+ struct init_thread_reply init_thread_reply;
+ struct terminate_process_reply terminate_process_reply;
+ struct terminate_thread_reply terminate_thread_reply;
+ struct get_process_info_reply get_process_info_reply;
+ struct set_process_info_reply set_process_info_reply;
+ struct get_thread_info_reply get_thread_info_reply;
+ struct set_thread_info_reply set_thread_info_reply;
+ struct get_dll_info_reply get_dll_info_reply;
+ struct suspend_thread_reply suspend_thread_reply;
+ struct resume_thread_reply resume_thread_reply;
+ struct load_dll_reply load_dll_reply;
+ struct unload_dll_reply unload_dll_reply;
+ struct queue_apc_reply queue_apc_reply;
+ struct get_apc_result_reply get_apc_result_reply;
+ struct close_handle_reply close_handle_reply;
+ struct set_handle_info_reply set_handle_info_reply;
+ struct dup_handle_reply dup_handle_reply;
+ struct open_process_reply open_process_reply;
+ struct open_thread_reply open_thread_reply;
+ struct select_reply select_reply;
+ struct create_event_reply create_event_reply;
+ struct event_op_reply event_op_reply;
+ struct query_event_reply query_event_reply;
+ struct open_event_reply open_event_reply;
+ struct create_keyed_event_reply create_keyed_event_reply;
+ struct open_keyed_event_reply open_keyed_event_reply;
+ struct create_mutex_reply create_mutex_reply;
+ struct release_mutex_reply release_mutex_reply;
+ struct open_mutex_reply open_mutex_reply;
+ struct create_semaphore_reply create_semaphore_reply;
+ struct release_semaphore_reply release_semaphore_reply;
+ struct open_semaphore_reply open_semaphore_reply;
+ struct create_file_reply create_file_reply;
+ struct open_file_object_reply open_file_object_reply;
+ struct alloc_file_handle_reply alloc_file_handle_reply;
+ struct get_handle_unix_name_reply get_handle_unix_name_reply;
+ struct get_handle_fd_reply get_handle_fd_reply;
+ struct flush_file_reply flush_file_reply;
+ struct lock_file_reply lock_file_reply;
+ struct unlock_file_reply unlock_file_reply;
+ struct create_socket_reply create_socket_reply;
+ struct accept_socket_reply accept_socket_reply;
+ struct accept_into_socket_reply accept_into_socket_reply;
+ struct set_socket_event_reply set_socket_event_reply;
+ struct get_socket_event_reply get_socket_event_reply;
+ struct get_socket_info_reply get_socket_info_reply;
+ struct enable_socket_event_reply enable_socket_event_reply;
+ struct set_socket_deferred_reply set_socket_deferred_reply;
+ struct alloc_console_reply alloc_console_reply;
+ struct free_console_reply free_console_reply;
+ struct get_console_renderer_events_reply get_console_renderer_events_reply;
+ struct open_console_reply open_console_reply;
+ struct get_console_wait_event_reply get_console_wait_event_reply;
+ struct get_console_mode_reply get_console_mode_reply;
+ struct set_console_mode_reply set_console_mode_reply;
+ struct set_console_input_info_reply set_console_input_info_reply;
+ struct get_console_input_info_reply get_console_input_info_reply;
+ struct append_console_input_history_reply append_console_input_history_reply;
+ struct get_console_input_history_reply get_console_input_history_reply;
+ struct create_console_output_reply create_console_output_reply;
+ struct set_console_output_info_reply set_console_output_info_reply;
+ struct get_console_output_info_reply get_console_output_info_reply;
+ struct write_console_input_reply write_console_input_reply;
+ struct read_console_input_reply read_console_input_reply;
+ struct write_console_output_reply write_console_output_reply;
+ struct fill_console_output_reply fill_console_output_reply;
+ struct read_console_output_reply read_console_output_reply;
+ struct move_console_output_reply move_console_output_reply;
+ struct send_console_signal_reply send_console_signal_reply;
+ struct read_directory_changes_reply read_directory_changes_reply;
+ struct read_change_reply read_change_reply;
+ struct create_mapping_reply create_mapping_reply;
+ struct open_mapping_reply open_mapping_reply;
+ struct get_mapping_info_reply get_mapping_info_reply;
+ struct get_mapping_committed_range_reply get_mapping_committed_range_reply;
+ struct add_mapping_committed_range_reply add_mapping_committed_range_reply;
+ struct create_snapshot_reply create_snapshot_reply;
+ struct next_process_reply next_process_reply;
+ struct next_thread_reply next_thread_reply;
+ struct wait_debug_event_reply wait_debug_event_reply;
+ struct queue_exception_event_reply queue_exception_event_reply;
+ struct get_exception_status_reply get_exception_status_reply;
+ struct output_debug_string_reply output_debug_string_reply;
+ struct continue_debug_event_reply continue_debug_event_reply;
+ struct debug_process_reply debug_process_reply;
+ struct debug_break_reply debug_break_reply;
+ struct set_debugger_kill_on_exit_reply set_debugger_kill_on_exit_reply;
+ struct read_process_memory_reply read_process_memory_reply;
+ struct write_process_memory_reply write_process_memory_reply;
+ struct create_key_reply create_key_reply;
+ struct open_key_reply open_key_reply;
+ struct delete_key_reply delete_key_reply;
+ struct flush_key_reply flush_key_reply;
+ struct enum_key_reply enum_key_reply;
+ struct set_key_value_reply set_key_value_reply;
+ struct get_key_value_reply get_key_value_reply;
+ struct enum_key_value_reply enum_key_value_reply;
+ struct delete_key_value_reply delete_key_value_reply;
+ struct load_registry_reply load_registry_reply;
+ struct unload_registry_reply unload_registry_reply;
+ struct save_registry_reply save_registry_reply;
+ struct set_registry_notification_reply set_registry_notification_reply;
+ struct create_timer_reply create_timer_reply;
+ struct open_timer_reply open_timer_reply;
+ struct set_timer_reply set_timer_reply;
+ struct cancel_timer_reply cancel_timer_reply;
+ struct get_timer_info_reply get_timer_info_reply;
+ struct get_thread_context_reply get_thread_context_reply;
+ struct set_thread_context_reply set_thread_context_reply;
+ struct get_selector_entry_reply get_selector_entry_reply;
+ struct add_atom_reply add_atom_reply;
+ struct delete_atom_reply delete_atom_reply;
+ struct find_atom_reply find_atom_reply;
+ struct get_atom_information_reply get_atom_information_reply;
+ struct set_atom_information_reply set_atom_information_reply;
+ struct empty_atom_table_reply empty_atom_table_reply;
+ struct init_atom_table_reply init_atom_table_reply;
+ struct get_msg_queue_reply get_msg_queue_reply;
+ struct set_queue_fd_reply set_queue_fd_reply;
+ struct set_queue_mask_reply set_queue_mask_reply;
+ struct get_queue_status_reply get_queue_status_reply;
+ struct get_process_idle_event_reply get_process_idle_event_reply;
+ struct send_message_reply send_message_reply;
+ struct post_quit_message_reply post_quit_message_reply;
+ struct send_hardware_message_reply send_hardware_message_reply;
+ struct get_message_reply get_message_reply;
+ struct reply_message_reply reply_message_reply;
+ struct accept_hardware_message_reply accept_hardware_message_reply;
+ struct get_message_reply_reply get_message_reply_reply;
+ struct set_win_timer_reply set_win_timer_reply;
+ struct kill_win_timer_reply kill_win_timer_reply;
+ struct is_window_hung_reply is_window_hung_reply;
+ struct get_serial_info_reply get_serial_info_reply;
+ struct set_serial_info_reply set_serial_info_reply;
+ struct register_async_reply register_async_reply;
+ struct cancel_async_reply cancel_async_reply;
+ struct ioctl_reply ioctl_reply;
+ struct get_ioctl_result_reply get_ioctl_result_reply;
+ struct create_named_pipe_reply create_named_pipe_reply;
+ struct get_named_pipe_info_reply get_named_pipe_info_reply;
+ struct create_window_reply create_window_reply;
+ struct destroy_window_reply destroy_window_reply;
+ struct get_desktop_window_reply get_desktop_window_reply;
+ struct set_window_owner_reply set_window_owner_reply;
+ struct get_window_info_reply get_window_info_reply;
+ struct set_window_info_reply set_window_info_reply;
+ struct set_parent_reply set_parent_reply;
+ struct get_window_parents_reply get_window_parents_reply;
+ struct get_window_children_reply get_window_children_reply;
+ struct get_window_children_from_point_reply get_window_children_from_point_reply;
+ struct get_window_tree_reply get_window_tree_reply;
+ struct set_window_pos_reply set_window_pos_reply;
+ struct get_window_rectangles_reply get_window_rectangles_reply;
+ struct get_window_text_reply get_window_text_reply;
+ struct set_window_text_reply set_window_text_reply;
+ struct get_windows_offset_reply get_windows_offset_reply;
+ struct get_visible_region_reply get_visible_region_reply;
+ struct get_surface_region_reply get_surface_region_reply;
+ struct get_window_region_reply get_window_region_reply;
+ struct set_window_region_reply set_window_region_reply;
+ struct get_update_region_reply get_update_region_reply;
+ struct update_window_zorder_reply update_window_zorder_reply;
+ struct redraw_window_reply redraw_window_reply;
+ struct set_window_property_reply set_window_property_reply;
+ struct remove_window_property_reply remove_window_property_reply;
+ struct get_window_property_reply get_window_property_reply;
+ struct get_window_properties_reply get_window_properties_reply;
+ struct create_winstation_reply create_winstation_reply;
+ struct open_winstation_reply open_winstation_reply;
+ struct close_winstation_reply close_winstation_reply;
+ struct get_process_winstation_reply get_process_winstation_reply;
+ struct set_process_winstation_reply set_process_winstation_reply;
+ struct enum_winstation_reply enum_winstation_reply;
+ struct create_desktop_reply create_desktop_reply;
+ struct open_desktop_reply open_desktop_reply;
+ struct close_desktop_reply close_desktop_reply;
+ struct get_thread_desktop_reply get_thread_desktop_reply;
+ struct set_thread_desktop_reply set_thread_desktop_reply;
+ struct enum_desktop_reply enum_desktop_reply;
+ struct set_user_object_info_reply set_user_object_info_reply;
+ struct register_hotkey_reply register_hotkey_reply;
+ struct unregister_hotkey_reply unregister_hotkey_reply;
+ struct attach_thread_input_reply attach_thread_input_reply;
+ struct get_thread_input_reply get_thread_input_reply;
+ struct get_last_input_time_reply get_last_input_time_reply;
+ struct get_key_state_reply get_key_state_reply;
+ struct set_key_state_reply set_key_state_reply;
+ struct set_foreground_window_reply set_foreground_window_reply;
+ struct set_focus_window_reply set_focus_window_reply;
+ struct set_active_window_reply set_active_window_reply;
+ struct set_capture_window_reply set_capture_window_reply;
+ struct set_caret_window_reply set_caret_window_reply;
+ struct set_caret_info_reply set_caret_info_reply;
+ struct set_hook_reply set_hook_reply;
+ struct remove_hook_reply remove_hook_reply;
+ struct start_hook_chain_reply start_hook_chain_reply;
+ struct finish_hook_chain_reply finish_hook_chain_reply;
+ struct get_hook_info_reply get_hook_info_reply;
+ struct create_class_reply create_class_reply;
+ struct destroy_class_reply destroy_class_reply;
+ struct set_class_info_reply set_class_info_reply;
+ struct set_clipboard_info_reply set_clipboard_info_reply;
+ struct open_token_reply open_token_reply;
+ struct set_global_windows_reply set_global_windows_reply;
+ struct adjust_token_privileges_reply adjust_token_privileges_reply;
+ struct get_token_privileges_reply get_token_privileges_reply;
+ struct check_token_privileges_reply check_token_privileges_reply;
+ struct duplicate_token_reply duplicate_token_reply;
+ struct access_check_reply access_check_reply;
+ struct get_token_sid_reply get_token_sid_reply;
+ struct get_token_groups_reply get_token_groups_reply;
+ struct get_token_default_dacl_reply get_token_default_dacl_reply;
+ struct set_token_default_dacl_reply set_token_default_dacl_reply;
+ struct set_security_object_reply set_security_object_reply;
+ struct get_security_object_reply get_security_object_reply;
+ struct create_mailslot_reply create_mailslot_reply;
+ struct set_mailslot_info_reply set_mailslot_info_reply;
+ struct create_directory_reply create_directory_reply;
+ struct open_directory_reply open_directory_reply;
+ struct get_directory_entry_reply get_directory_entry_reply;
+ struct create_symlink_reply create_symlink_reply;
+ struct open_symlink_reply open_symlink_reply;
+ struct query_symlink_reply query_symlink_reply;
+ struct get_object_info_reply get_object_info_reply;
+ struct unlink_object_reply unlink_object_reply;
+ struct get_token_impersonation_level_reply get_token_impersonation_level_reply;
+ struct allocate_locally_unique_id_reply allocate_locally_unique_id_reply;
+ struct create_device_manager_reply create_device_manager_reply;
+ struct create_device_reply create_device_reply;
+ struct delete_device_reply delete_device_reply;
+ struct get_next_device_request_reply get_next_device_request_reply;
+ struct make_process_system_reply make_process_system_reply;
+ struct get_token_statistics_reply get_token_statistics_reply;
+ struct create_completion_reply create_completion_reply;
+ struct open_completion_reply open_completion_reply;
+ struct add_completion_reply add_completion_reply;
+ struct remove_completion_reply remove_completion_reply;
+ struct query_completion_reply query_completion_reply;
+ struct set_completion_info_reply set_completion_info_reply;
+ struct add_fd_completion_reply add_fd_completion_reply;
+ struct get_window_layered_info_reply get_window_layered_info_reply;
+ struct set_window_layered_info_reply set_window_layered_info_reply;
+ struct alloc_user_handle_reply alloc_user_handle_reply;
+ struct free_user_handle_reply free_user_handle_reply;
+ struct set_cursor_reply set_cursor_reply;
+ struct update_rawinput_devices_reply update_rawinput_devices_reply;
+ struct get_suspend_context_reply get_suspend_context_reply;
+ struct set_suspend_context_reply set_suspend_context_reply;
+};
+
+#define SERVER_PROTOCOL_VERSION 449
+
+#endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h
new file mode 100644
index 00000000..f9928da9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/strmbase.h
@@ -0,0 +1,669 @@
+/*
+ * Header file for Wine's strmbase implementation
+ *
+ * Copyright 2003 Robert Shearman
+ * Copyright 2010 Aric Stewart, CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc);
+void WINAPI FreeMediaType(AM_MEDIA_TYPE * pMediaType);
+AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const * pSrc);
+void WINAPI DeleteMediaType(AM_MEDIA_TYPE * pMediaType);
+
+/* Pin functions */
+
+typedef struct BasePin
+{
+ IPin IPin_iface;
+ LONG refCount;
+ LPCRITICAL_SECTION pCritSec;
+ PIN_INFO pinInfo;
+ IPin * pConnectedTo;
+ AM_MEDIA_TYPE mtCurrent;
+ REFERENCE_TIME tStart;
+ REFERENCE_TIME tStop;
+ double dRate;
+
+ const struct BasePinFuncTable* pFuncsTable;
+} BasePin;
+
+typedef HRESULT (WINAPI *BasePin_CheckMediaType)(BasePin *This, const AM_MEDIA_TYPE *pmt);
+typedef HRESULT (WINAPI *BasePin_AttemptConnection)(BasePin *This, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt);
+typedef LONG (WINAPI *BasePin_GetMediaTypeVersion)(BasePin *This);
+typedef HRESULT (WINAPI *BasePin_GetMediaType)(BasePin *This, int iPosition, AM_MEDIA_TYPE *amt);
+
+typedef struct BasePinFuncTable {
+ /* Required for Input Pins*/
+ BasePin_CheckMediaType pfnCheckMediaType;
+ /* Required for Output Pins*/
+ BasePin_AttemptConnection pfnAttemptConnection;
+ /* Required for BasePinImpl_EnumMediaTypes */
+ BasePin_GetMediaTypeVersion pfnGetMediaTypeVersion;
+ BasePin_GetMediaType pfnGetMediaType;
+} BasePinFuncTable;
+
+typedef struct BaseOutputPin
+{
+ /* inheritance C style! */
+ BasePin pin;
+ IMemInputPin * pMemInputPin;
+ IMemAllocator * pAllocator;
+
+ const struct BaseOutputPinFuncTable* pFuncsTable;
+} BaseOutputPin;
+
+typedef HRESULT (WINAPI *BaseOutputPin_DecideBufferSize)(BaseOutputPin *This, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest);
+typedef HRESULT (WINAPI *BaseOutputPin_DecideAllocator)(BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc);
+typedef HRESULT (WINAPI *BaseOutputPin_BreakConnect)(BaseOutputPin * This);
+
+typedef struct BaseOutputPinFuncTable {
+ /* Required for BaseOutputPinImpl_DecideAllocator */
+ BaseOutputPin_DecideBufferSize pfnDecideBufferSize;
+ /* Required for BaseOutputPinImpl_AttemptConnection */
+ BaseOutputPin_DecideAllocator pfnDecideAllocator;
+ BaseOutputPin_BreakConnect pfnBreakConnect;
+} BaseOutputPinFuncTable;
+
+typedef struct BaseInputPin
+{
+ /* inheritance C style! */
+ BasePin pin;
+
+ IMemInputPin IMemInputPin_iface;
+ IMemAllocator * pAllocator;
+ BOOL flushing, end_of_stream;
+ IMemAllocator *preferred_allocator;
+
+ const struct BaseInputPinFuncTable* pFuncsTable;
+} BaseInputPin;
+
+typedef HRESULT (WINAPI *BaseInputPin_Receive)(BaseInputPin *This, IMediaSample *pSample);
+
+typedef struct BaseInputPinFuncTable {
+ /* Optional */
+ BaseInputPin_Receive pfnReceive;
+} BaseInputPinFuncTable;
+
+/* Base Pin */
+HRESULT WINAPI BasePinImpl_GetMediaType(BasePin *This, int iPosition, AM_MEDIA_TYPE *pmt);
+LONG WINAPI BasePinImpl_GetMediaTypeVersion(BasePin *This);
+ULONG WINAPI BasePinImpl_AddRef(IPin * iface);
+HRESULT WINAPI BasePinImpl_Disconnect(IPin * iface);
+HRESULT WINAPI BasePinImpl_ConnectedTo(IPin * iface, IPin ** ppPin);
+HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin * iface, PIN_INFO * pInfo);
+HRESULT WINAPI BasePinImpl_QueryDirection(IPin * iface, PIN_DIRECTION * pPinDir);
+HRESULT WINAPI BasePinImpl_QueryId(IPin * iface, LPWSTR * Id);
+HRESULT WINAPI BasePinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum);
+HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin, ULONG * cPin);
+HRESULT WINAPI BasePinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+/* Base Output Pin */
+HRESULT WINAPI BaseOutputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI BaseOutputPinImpl_Release(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface);
+HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface);
+
+HRESULT WINAPI BaseOutputPinImpl_GetDeliveryBuffer(BaseOutputPin * This, IMediaSample ** ppSample, REFERENCE_TIME * tStart, REFERENCE_TIME * tStop, DWORD dwFlags);
+HRESULT WINAPI BaseOutputPinImpl_Deliver(BaseOutputPin * This, IMediaSample * pSample);
+HRESULT WINAPI BaseOutputPinImpl_BreakConnect(BaseOutputPin * This);
+HRESULT WINAPI BaseOutputPinImpl_Active(BaseOutputPin * This);
+HRESULT WINAPI BaseOutputPinImpl_Inactive(BaseOutputPin * This);
+HRESULT WINAPI BaseOutputPinImpl_InitAllocator(BaseOutputPin *This, IMemAllocator **pMemAlloc);
+HRESULT WINAPI BaseOutputPinImpl_DecideAllocator(BaseOutputPin *This, IMemInputPin *pPin, IMemAllocator **pAlloc);
+HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(BasePin *This, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+
+HRESULT WINAPI BaseOutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, LONG outputpin_size, const PIN_INFO * pPinInfo, const BasePinFuncTable* pBaseFuncsTable, const BaseOutputPinFuncTable* pBaseOutputFuncsTable, LPCRITICAL_SECTION pCritSec, IPin ** ppPin);
+
+/* Base Input Pin */
+HRESULT WINAPI BaseInputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI BaseInputPinImpl_Release(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_Connect(IPin * iface, IPin * pConnector, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseInputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseInputPinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt);
+HRESULT WINAPI BaseInputPinImpl_EndOfStream(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_BeginFlush(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_EndFlush(IPin * iface);
+HRESULT WINAPI BaseInputPinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+HRESULT BaseInputPin_Construct(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, const BasePinFuncTable* pBaseFuncsTable, const BaseInputPinFuncTable* pBaseInputFuncsTable, LPCRITICAL_SECTION pCritSec, IMemAllocator *, IPin ** ppPin);
+
+typedef struct BaseFilter
+{
+ IBaseFilter IBaseFilter_iface;
+ LONG refCount;
+ CRITICAL_SECTION csFilter;
+
+ FILTER_STATE state;
+ REFERENCE_TIME rtStreamStart;
+ IReferenceClock * pClock;
+ FILTER_INFO filterInfo;
+ CLSID clsid;
+ LONG pinVersion;
+
+ const struct BaseFilterFuncTable* pFuncsTable;
+} BaseFilter;
+
+typedef IPin* (WINAPI *BaseFilter_GetPin)(BaseFilter* iface, int iPosition);
+typedef LONG (WINAPI *BaseFilter_GetPinCount)(BaseFilter* iface);
+typedef LONG (WINAPI *BaseFilter_GetPinVersion)(BaseFilter* iface);
+
+typedef struct BaseFilterFuncTable {
+ /* Required */
+ BaseFilter_GetPin pfnGetPin;
+ BaseFilter_GetPinCount pfnGetPinCount;
+} BaseFilterFuncTable;
+
+HRESULT WINAPI BaseFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI BaseFilterImpl_AddRef(IBaseFilter * iface);
+ULONG WINAPI BaseFilterImpl_Release(IBaseFilter * iface);
+HRESULT WINAPI BaseFilterImpl_GetClassID(IBaseFilter * iface, CLSID * pClsid);
+HRESULT WINAPI BaseFilterImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState );
+HRESULT WINAPI BaseFilterImpl_SetSyncSource(IBaseFilter * iface, IReferenceClock *pClock);
+HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter * iface, IReferenceClock **ppClock);
+HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum);
+HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo);
+HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter * iface, IFilterGraph *pGraph, LPCWSTR pName );
+HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter * iface, LPWSTR *pVendorInfo);
+
+LONG WINAPI BaseFilterImpl_GetPinVersion(BaseFilter* This);
+VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter* This);
+
+HRESULT WINAPI BaseFilter_Init(BaseFilter * This, const IBaseFilterVtbl *Vtbl, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseFilterFuncTable* pBaseFuncsTable);
+
+/* Enums */
+HRESULT WINAPI EnumMediaTypes_Construct(BasePin *iface, BasePin_GetMediaType enumFunc, BasePin_GetMediaTypeVersion versionFunc, IEnumMediaTypes ** ppEnum);
+
+HRESULT WINAPI EnumPins_Construct(BaseFilter *base, BaseFilter_GetPin receive_pin, BaseFilter_GetPinCount receive_pincount, BaseFilter_GetPinVersion receive_version, IEnumPins ** ppEnum);
+
+/* Transform Filter */
+typedef struct TransformFilter
+{
+ BaseFilter filter;
+
+ IPin **ppPins;
+ ULONG npins;
+ AM_MEDIA_TYPE pmt;
+ CRITICAL_SECTION csReceive;
+
+ const struct TransformFilterFuncTable * pFuncsTable;
+ struct QualityControlImpl *qcimpl;
+ /* IMediaSeeking and IMediaPosition are implemented by ISeekingPassThru */
+ IUnknown *seekthru_unk;
+} TransformFilter;
+
+typedef HRESULT (WINAPI *TransformFilter_DecideBufferSize) (TransformFilter *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest);
+typedef HRESULT (WINAPI *TransformFilter_StartStreaming) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_StopStreaming) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_Receive) (TransformFilter* iface, IMediaSample* pIn);
+typedef HRESULT (WINAPI *TransformFilter_CompleteConnect) (TransformFilter *iface, PIN_DIRECTION dir, IPin *pPin);
+typedef HRESULT (WINAPI *TransformFilter_BreakConnect) (TransformFilter *iface, PIN_DIRECTION dir);
+typedef HRESULT (WINAPI *TransformFilter_SetMediaType) (TransformFilter *iface, PIN_DIRECTION dir, const AM_MEDIA_TYPE *pMediaType);
+typedef HRESULT (WINAPI *TransformFilter_CheckInputType) (TransformFilter *iface, const AM_MEDIA_TYPE *pMediaType);
+typedef HRESULT (WINAPI *TransformFilter_EndOfStream) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_BeginFlush) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_EndFlush) (TransformFilter *iface);
+typedef HRESULT (WINAPI *TransformFilter_NewSegment) (TransformFilter *iface,
+REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+typedef HRESULT (WINAPI *TransformFilter_Notify) (TransformFilter *iface, IBaseFilter *sender, Quality qm);
+
+typedef struct TransformFilterFuncTable {
+ /* Required */
+ TransformFilter_DecideBufferSize pfnDecideBufferSize;
+ /* Optional */
+ TransformFilter_StartStreaming pfnStartStreaming;
+ TransformFilter_Receive pfnReceive;
+ TransformFilter_StopStreaming pfnStopStreaming;
+ TransformFilter_CheckInputType pfnCheckInputType;
+ TransformFilter_SetMediaType pfnSetMediaType;
+ TransformFilter_CompleteConnect pfnCompleteConnect;
+ TransformFilter_BreakConnect pfnBreakConnect;
+ TransformFilter_EndOfStream pfnEndOfStream;
+ TransformFilter_BeginFlush pfnBeginFlush;
+ TransformFilter_EndFlush pfnEndFlush;
+ TransformFilter_NewSegment pfnNewSegment;
+ TransformFilter_Notify pfnNotify;
+} TransformFilterFuncTable;
+
+HRESULT WINAPI TransformFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI TransformFilterImpl_Release(IBaseFilter * iface);
+HRESULT WINAPI TransformFilterImpl_Stop(IBaseFilter * iface);
+HRESULT WINAPI TransformFilterImpl_Pause(IBaseFilter * iface);
+HRESULT WINAPI TransformFilterImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart);
+HRESULT WINAPI TransformFilterImpl_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin);
+HRESULT WINAPI TransformFilterImpl_Notify(TransformFilter *iface, IBaseFilter *sender, Quality qm);
+
+HRESULT TransformFilter_Construct( const IBaseFilterVtbl *filterVtbl, LONG filter_size, const CLSID* pClsid, const TransformFilterFuncTable* pFuncsTable, IBaseFilter ** ppTransformFilter);
+
+/* Source Seeking */
+typedef HRESULT (WINAPI *SourceSeeking_ChangeRate)(IMediaSeeking *iface);
+typedef HRESULT (WINAPI *SourceSeeking_ChangeStart)(IMediaSeeking *iface);
+typedef HRESULT (WINAPI *SourceSeeking_ChangeStop)(IMediaSeeking *iface);
+
+typedef struct SourceSeeking
+{
+ IMediaSeeking IMediaSeeking_iface;
+
+ ULONG refCount;
+ SourceSeeking_ChangeStop fnChangeStop;
+ SourceSeeking_ChangeStart fnChangeStart;
+ SourceSeeking_ChangeRate fnChangeRate;
+ DWORD dwCapabilities;
+ double dRate;
+ LONGLONG llCurrent, llStop, llDuration;
+ GUID timeformat;
+ PCRITICAL_SECTION crst;
+} SourceSeeking;
+
+HRESULT SourceSeeking_Init(SourceSeeking *pSeeking, const IMediaSeekingVtbl *Vtbl, SourceSeeking_ChangeStop fnChangeStop, SourceSeeking_ChangeStart fnChangeStart, SourceSeeking_ChangeRate fnChangeRate, PCRITICAL_SECTION crit_sect);
+
+HRESULT WINAPI SourceSeekingImpl_GetCapabilities(IMediaSeeking * iface, DWORD * pCapabilities);
+HRESULT WINAPI SourceSeekingImpl_CheckCapabilities(IMediaSeeking * iface, DWORD * pCapabilities);
+HRESULT WINAPI SourceSeekingImpl_IsFormatSupported(IMediaSeeking * iface, const GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_QueryPreferredFormat(IMediaSeeking * iface, GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_GetTimeFormat(IMediaSeeking * iface, GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_IsUsingTimeFormat(IMediaSeeking * iface, const GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_SetTimeFormat(IMediaSeeking * iface, const GUID * pFormat);
+HRESULT WINAPI SourceSeekingImpl_GetDuration(IMediaSeeking * iface, LONGLONG * pDuration);
+HRESULT WINAPI SourceSeekingImpl_GetStopPosition(IMediaSeeking * iface, LONGLONG * pStop);
+HRESULT WINAPI SourceSeekingImpl_GetCurrentPosition(IMediaSeeking * iface, LONGLONG * pCurrent);
+HRESULT WINAPI SourceSeekingImpl_ConvertTimeFormat(IMediaSeeking * iface, LONGLONG * pTarget, const GUID * pTargetFormat, LONGLONG Source, const GUID * pSourceFormat);
+HRESULT WINAPI SourceSeekingImpl_SetPositions(IMediaSeeking * iface, LONGLONG * pCurrent, DWORD dwCurrentFlags, LONGLONG * pStop, DWORD dwStopFlags);
+HRESULT WINAPI SourceSeekingImpl_GetPositions(IMediaSeeking * iface, LONGLONG * pCurrent, LONGLONG * pStop);
+HRESULT WINAPI SourceSeekingImpl_GetAvailable(IMediaSeeking * iface, LONGLONG * pEarliest, LONGLONG * pLatest);
+HRESULT WINAPI SourceSeekingImpl_SetRate(IMediaSeeking * iface, double dRate);
+HRESULT WINAPI SourceSeekingImpl_GetRate(IMediaSeeking * iface, double * dRate);
+HRESULT WINAPI SourceSeekingImpl_GetPreroll(IMediaSeeking * iface, LONGLONG * pPreroll);
+
+/* PosPassThru */
+HRESULT WINAPI RendererPosPassThru_RegisterMediaTime(IUnknown *iface, REFERENCE_TIME start);
+HRESULT WINAPI RendererPosPassThru_ResetMediaTime(IUnknown *iface);
+HRESULT WINAPI RendererPosPassThru_EOS(IUnknown *iface);
+
+HRESULT WINAPI CreatePosPassThru(IUnknown* pUnkOuter, BOOL bRenderer, IPin *pPin, IUnknown **ppPassThru);
+HRESULT WINAPI PosPassThru_Construct(IUnknown* pUnkOuter, LPVOID *ppPassThru);
+
+/* Filter Registration */
+
+typedef REGPINTYPES AMOVIESETUP_MEDIATYPE;
+typedef REGFILTERPINS AMOVIESETUP_PIN;
+
+typedef struct AMOVIESETUP_FILTER {
+ const CLSID *clsid;
+ const WCHAR *name;
+ DWORD merit;
+ UINT pins;
+ const AMOVIESETUP_PIN *pPin;
+} AMOVIESETUP_FILTER, *LPAMOVIESETUP_FILTER;
+
+typedef IUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);
+typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid);
+
+typedef struct tagFactoryTemplate {
+ const WCHAR *m_Name;
+ const CLSID *m_ClsID;
+ LPFNNewCOMObject m_lpfnNew;
+ LPFNInitRoutine m_lpfnInit;
+ const AMOVIESETUP_FILTER *m_pAMovieSetup_Filter;
+} FactoryTemplate;
+
+HRESULT WINAPI AMovieDllRegisterServer2(BOOL bRegister);
+HRESULT WINAPI AMovieSetupRegisterFilter2(const AMOVIESETUP_FILTER *pFilter, IFilterMapper2 *pIFM2, BOOL bRegister);
+
+/* Output Queue */
+typedef struct tagOutputQueue {
+ CRITICAL_SECTION csQueue;
+
+ BaseOutputPin * pInputPin;
+
+ HANDLE hThread;
+ HANDLE hProcessQueue;
+
+ LONG lBatchSize;
+ BOOL bBatchExact;
+ BOOL bTerminate;
+ BOOL bSendAnyway;
+
+ struct list *SampleList;
+
+ const struct OutputQueueFuncTable* pFuncsTable;
+} OutputQueue;
+
+typedef DWORD (WINAPI *OutputQueue_ThreadProc)(OutputQueue *This);
+
+typedef struct OutputQueueFuncTable
+{
+ OutputQueue_ThreadProc pfnThreadProc;
+} OutputQueueFuncTable;
+
+HRESULT WINAPI OutputQueue_Construct( BaseOutputPin *pInputPin, BOOL bAuto,
+ BOOL bQueue, LONG lBatchSize, BOOL bBatchExact, DWORD dwPriority,
+ const OutputQueueFuncTable* pFuncsTable, OutputQueue **ppOutputQueue );
+HRESULT WINAPI OutputQueue_Destroy(OutputQueue *pOutputQueue);
+HRESULT WINAPI OutputQueue_ReceiveMultiple(OutputQueue *pOutputQueue, IMediaSample **ppSamples, LONG nSamples, LONG *nSamplesProcessed);
+HRESULT WINAPI OutputQueue_Receive(OutputQueue *pOutputQueue, IMediaSample *pSample);
+VOID WINAPI OutputQueue_EOS(OutputQueue *pOutputQueue);
+VOID WINAPI OutputQueue_SendAnyway(OutputQueue *pOutputQueue);
+DWORD WINAPI OutputQueueImpl_ThreadProc(OutputQueue *pOutputQueue);
+
+typedef struct tagBaseWindow
+{
+ HWND hWnd;
+ LONG Width;
+ LONG Height;
+ HINSTANCE hInstance;
+ LPWSTR pClassName;
+ DWORD ClassStyles;
+ DWORD WindowStyles;
+ DWORD WindowStylesEx;
+ HDC hDC;
+
+ const struct BaseWindowFuncTable* pFuncsTable;
+} BaseWindow;
+
+typedef LPWSTR (WINAPI *BaseWindow_GetClassWindowStyles)(BaseWindow *This, DWORD *pClassStyles, DWORD *pWindowStyles, DWORD *pWindowStylesEx);
+typedef RECT (WINAPI *BaseWindow_GetDefaultRect)(BaseWindow *This);
+typedef BOOL (WINAPI *BaseWindow_PossiblyEatMessage)(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam);
+typedef LRESULT (WINAPI *BaseWindow_OnReceiveMessage)(BaseWindow *This, HWND hwnd, INT uMsg, WPARAM wParam, LPARAM lParam);
+typedef BOOL (WINAPI *BaseWindow_OnSize)(BaseWindow *This, LONG Height, LONG Width);
+
+typedef struct BaseWindowFuncTable
+{
+ /* Required */
+ BaseWindow_GetClassWindowStyles pfnGetClassWindowStyles;
+ BaseWindow_GetDefaultRect pfnGetDefaultRect;
+ /* Optional, WinProc Related */
+ BaseWindow_OnReceiveMessage pfnOnReceiveMessage;
+ BaseWindow_PossiblyEatMessage pfnPossiblyEatMessage;
+ BaseWindow_OnSize pfnOnSize;
+} BaseWindowFuncTable;
+
+HRESULT WINAPI BaseWindow_Init(BaseWindow *pBaseWindow, const BaseWindowFuncTable* pFuncsTable);
+HRESULT WINAPI BaseWindow_Destroy(BaseWindow *pBaseWindow);
+
+HRESULT WINAPI BaseWindowImpl_PrepareWindow(BaseWindow *This);
+HRESULT WINAPI BaseWindowImpl_DoneWithWindow(BaseWindow *This);
+RECT WINAPI BaseWindowImpl_GetDefaultRect(BaseWindow *This);
+LRESULT WINAPI BaseWindowImpl_OnReceiveMessage(BaseWindow *This, HWND hwnd, INT uMsg, WPARAM wParam, LPARAM lParam);
+BOOL WINAPI BaseWindowImpl_OnSize(BaseWindow *This, LONG Height, LONG Width);
+
+typedef struct{
+ ITypeInfo *pTypeInfo;
+} BaseDispatch;
+
+HRESULT WINAPI BaseDispatch_Init(BaseDispatch *This, REFIID riid);
+HRESULT WINAPI BaseDispatch_Destroy(BaseDispatch *This);
+HRESULT WINAPI BaseDispatchImpl_GetIDsOfNames(BaseDispatch *This, REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid);
+HRESULT WINAPI BaseDispatchImpl_GetTypeInfo(BaseDispatch *This, REFIID riid, UINT itinfo, LCID lcid, ITypeInfo **pptinfo);
+HRESULT WINAPI BaseDispatchImpl_GetTypeInfoCount(BaseDispatch *This, UINT *pctinfo);
+
+#ifdef __IVideoWindow_FWD_DEFINED__
+typedef struct tagBaseControlWindow
+{
+ BaseWindow baseWindow;
+ IVideoWindow IVideoWindow_iface;
+ BaseDispatch baseDispatch;
+
+ BOOL AutoShow;
+ HWND hwndDrain;
+ HWND hwndOwner;
+ BaseFilter* pFilter;
+ CRITICAL_SECTION* pInterfaceLock;
+ BasePin* pPin;
+} BaseControlWindow;
+
+HRESULT WINAPI BaseControlWindow_Init(BaseControlWindow *pControlWindow, const IVideoWindowVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseWindowFuncTable* pFuncsTable);
+HRESULT WINAPI BaseControlWindow_Destroy(BaseControlWindow *pControlWindow);
+
+BOOL WINAPI BaseControlWindowImpl_PossiblyEatMessage(BaseWindow *This, UINT uMsg, WPARAM wParam, LPARAM lParam);
+HRESULT WINAPI BaseControlWindowImpl_GetTypeInfoCount(IVideoWindow *iface, UINT*pctinfo);
+HRESULT WINAPI BaseControlWindowImpl_GetTypeInfo(IVideoWindow *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo);
+HRESULT WINAPI BaseControlWindowImpl_GetIDsOfNames(IVideoWindow *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId);
+HRESULT WINAPI BaseControlWindowImpl_Invoke(IVideoWindow *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS*pDispParams, VARIANT*pVarResult, EXCEPINFO*pExepInfo, UINT*puArgErr);
+HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCaption);
+HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *strCaption);
+HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle);
+HRESULT WINAPI BaseControlWindowImpl_get_WindowStyle(IVideoWindow *iface, LONG *WindowStyle);
+HRESULT WINAPI BaseControlWindowImpl_put_WindowStyleEx(IVideoWindow *iface, LONG WindowStyleEx);
+HRESULT WINAPI BaseControlWindowImpl_get_WindowStyleEx(IVideoWindow *iface, LONG *WindowStyleEx);
+HRESULT WINAPI BaseControlWindowImpl_put_AutoShow(IVideoWindow *iface, LONG AutoShow);
+HRESULT WINAPI BaseControlWindowImpl_get_AutoShow(IVideoWindow *iface, LONG *AutoShow);
+HRESULT WINAPI BaseControlWindowImpl_put_WindowState(IVideoWindow *iface, LONG WindowState);
+HRESULT WINAPI BaseControlWindowImpl_get_WindowState(IVideoWindow *iface, LONG *WindowState);
+HRESULT WINAPI BaseControlWindowImpl_put_BackgroundPalette(IVideoWindow *iface, LONG BackgroundPalette);
+HRESULT WINAPI BaseControlWindowImpl_get_BackgroundPalette(IVideoWindow *iface, LONG *pBackgroundPalette);
+HRESULT WINAPI BaseControlWindowImpl_put_Visible(IVideoWindow *iface, LONG Visible);
+HRESULT WINAPI BaseControlWindowImpl_get_Visible(IVideoWindow *iface, LONG *pVisible);
+HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG Left);
+HRESULT WINAPI BaseControlWindowImpl_get_Left(IVideoWindow *iface, LONG *pLeft);
+HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG Width);
+HRESULT WINAPI BaseControlWindowImpl_get_Width(IVideoWindow *iface, LONG *pWidth);
+HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG Top);
+HRESULT WINAPI BaseControlWindowImpl_get_Top(IVideoWindow *iface, LONG *pTop);
+
+HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG Height);
+HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND Owner);
+HRESULT WINAPI BaseControlWindowImpl_get_Owner(IVideoWindow *iface, OAHWND *Owner);
+HRESULT WINAPI BaseControlWindowImpl_put_MessageDrain(IVideoWindow *iface, OAHWND Drain);
+HRESULT WINAPI BaseControlWindowImpl_get_MessageDrain(IVideoWindow *iface, OAHWND *Drain);
+HRESULT WINAPI BaseControlWindowImpl_get_BorderColor(IVideoWindow *iface, LONG *Color);
+HRESULT WINAPI BaseControlWindowImpl_put_BorderColor(IVideoWindow *iface, LONG Color);
+HRESULT WINAPI BaseControlWindowImpl_get_FullScreenMode(IVideoWindow *iface, LONG *FullScreenMode);
+HRESULT WINAPI BaseControlWindowImpl_put_FullScreenMode(IVideoWindow *iface, LONG FullScreenMode);
+HRESULT WINAPI BaseControlWindowImpl_SetWindowForeground(IVideoWindow *iface, LONG Focus);
+HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG Left, LONG Top, LONG Width, LONG Height);
+HRESULT WINAPI BaseControlWindowImpl_GetWindowPosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_NotifyOwnerMessage(IVideoWindow *iface, OAHWND hwnd, LONG uMsg, LONG_PTR wParam, LONG_PTR lParam);
+HRESULT WINAPI BaseControlWindowImpl_GetMinIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_GetMaxIdealImageSize(IVideoWindow *iface, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_GetRestorePosition(IVideoWindow *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlWindowImpl_HideCursor(IVideoWindow *iface, LONG HideCursor);
+HRESULT WINAPI BaseControlWindowImpl_IsCursorHidden(IVideoWindow *iface, LONG *CursorHidden);
+#endif
+
+#ifdef __IBasicVideo_FWD_DEFINED__
+#ifdef __amvideo_h__
+typedef struct tagBaseControlVideo
+{
+ IBasicVideo IBasicVideo_iface;
+ BaseDispatch baseDispatch;
+
+ BaseFilter* pFilter;
+ CRITICAL_SECTION* pInterfaceLock;
+ BasePin* pPin;
+
+ const struct BaseControlVideoFuncTable* pFuncsTable;
+} BaseControlVideo;
+
+typedef HRESULT (WINAPI *BaseControlVideo_GetSourceRect)(BaseControlVideo* This, RECT *pSourceRect);
+typedef HRESULT (WINAPI *BaseControlVideo_GetStaticImage)(BaseControlVideo* This, LONG *pBufferSize, LONG *pDIBImage);
+typedef HRESULT (WINAPI *BaseControlVideo_GetTargetRect)(BaseControlVideo* This, RECT *pTargetRect);
+typedef VIDEOINFOHEADER* (WINAPI *BaseControlVideo_GetVideoFormat)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_IsDefaultSourceRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_IsDefaultTargetRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultSourceRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultTargetRect)(BaseControlVideo* This);
+typedef HRESULT (WINAPI *BaseControlVideo_SetSourceRect)(BaseControlVideo* This, RECT *pSourceRect);
+typedef HRESULT (WINAPI *BaseControlVideo_SetTargetRect)(BaseControlVideo* This, RECT *pTargetRect);
+
+typedef struct BaseControlVideoFuncTable {
+ /* Required */
+ BaseControlVideo_GetSourceRect pfnGetSourceRect;
+ BaseControlVideo_GetStaticImage pfnGetStaticImage;
+ BaseControlVideo_GetTargetRect pfnGetTargetRect;
+ BaseControlVideo_GetVideoFormat pfnGetVideoFormat;
+ BaseControlVideo_IsDefaultSourceRect pfnIsDefaultSourceRect;
+ BaseControlVideo_IsDefaultTargetRect pfnIsDefaultTargetRect;
+ BaseControlVideo_SetDefaultSourceRect pfnSetDefaultSourceRect;
+ BaseControlVideo_SetDefaultTargetRect pfnSetDefaultTargetRect;
+ BaseControlVideo_SetSourceRect pfnSetSourceRect;
+ BaseControlVideo_SetTargetRect pfnSetTargetRect;
+} BaseControlVideoFuncTable;
+
+HRESULT WINAPI BaseControlVideo_Init(BaseControlVideo *pControlVideo, const IBasicVideoVtbl *lpVtbl, BaseFilter *owner, CRITICAL_SECTION *lock, BasePin* pPin, const BaseControlVideoFuncTable* pFuncsTable);
+HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo);
+
+HRESULT WINAPI BaseControlVideoImpl_GetTypeInfoCount(IBasicVideo *iface, UINT*pctinfo);
+HRESULT WINAPI BaseControlVideoImpl_GetTypeInfo(IBasicVideo *iface, UINT iTInfo, LCID lcid, ITypeInfo**ppTInfo);
+HRESULT WINAPI BaseControlVideoImpl_GetIDsOfNames(IBasicVideo *iface, REFIID riid, LPOLESTR*rgszNames, UINT cNames, LCID lcid, DISPID*rgDispId);
+HRESULT WINAPI BaseControlVideoImpl_Invoke(IBasicVideo *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS*pDispParams, VARIANT*pVarResult, EXCEPINFO*pExepInfo, UINT*puArgErr);
+HRESULT WINAPI BaseControlVideoImpl_get_AvgTimePerFrame(IBasicVideo *iface, REFTIME *pAvgTimePerFrame);
+HRESULT WINAPI BaseControlVideoImpl_get_BitRate(IBasicVideo *iface, LONG *pBitRate);
+HRESULT WINAPI BaseControlVideoImpl_get_BitErrorRate(IBasicVideo *iface, LONG *pBitErrorRate);
+HRESULT WINAPI BaseControlVideoImpl_get_VideoWidth(IBasicVideo *iface, LONG *pVideoWidth);
+HRESULT WINAPI BaseControlVideoImpl_get_VideoHeight(IBasicVideo *iface, LONG *pVideoHeight);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceLeft(IBasicVideo *iface, LONG SourceLeft);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceWidth(IBasicVideo *iface, LONG SourceWidth);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceTop(IBasicVideo *iface, LONG SourceTop);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop);
+HRESULT WINAPI BaseControlVideoImpl_put_SourceHeight(IBasicVideo *iface, LONG SourceHeight);
+HRESULT WINAPI BaseControlVideoImpl_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationLeft(IBasicVideo *iface, LONG DestinationLeft);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationWidth(IBasicVideo *iface, LONG DestinationWidth);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationTop(IBasicVideo *iface, LONG DestinationTop);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop);
+HRESULT WINAPI BaseControlVideoImpl_put_DestinationHeight(IBasicVideo *iface, LONG DestinationHeight);
+HRESULT WINAPI BaseControlVideoImpl_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight);
+HRESULT WINAPI BaseControlVideoImpl_SetSourcePosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height);
+HRESULT WINAPI BaseControlVideoImpl_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlVideoImpl_SetDefaultSourcePosition(IBasicVideo *iface);
+HRESULT WINAPI BaseControlVideoImpl_SetDestinationPosition(IBasicVideo *iface, LONG Left, LONG Top, LONG Width, LONG Height);
+HRESULT WINAPI BaseControlVideoImpl_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlVideoImpl_SetDefaultDestinationPosition(IBasicVideo *iface);
+HRESULT WINAPI BaseControlVideoImpl_GetVideoSize(IBasicVideo *iface, LONG *pWidth, LONG *pHeight);
+HRESULT WINAPI BaseControlVideoImpl_GetVideoPaletteEntries(IBasicVideo *iface, LONG StartIndex, LONG Entries, LONG *pRetrieved, LONG *pPalette);
+HRESULT WINAPI BaseControlVideoImpl_GetCurrentImage(IBasicVideo *iface, LONG *pBufferSize, LONG *pDIBImage);
+HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultSource(IBasicVideo *iface);
+HRESULT WINAPI BaseControlVideoImpl_IsUsingDefaultDestination(IBasicVideo *iface);
+#endif
+#endif
+
+/* BaseRenderer Filter */
+typedef struct BaseRendererTag
+{
+ BaseFilter filter;
+
+ BaseInputPin *pInputPin;
+ IUnknown *pPosition;
+ CRITICAL_SECTION csRenderLock;
+ HANDLE evComplete;
+ HANDLE ThreadSignal;
+ HANDLE RenderEvent;
+ IMediaSample *pMediaSample;
+
+ IQualityControl *pQSink;
+ struct QualityControlImpl *qcimpl;
+
+ const struct BaseRendererFuncTable * pFuncsTable;
+} BaseRenderer;
+
+typedef HRESULT (WINAPI *BaseRenderer_CheckMediaType)(BaseRenderer *This, const AM_MEDIA_TYPE *pmt);
+typedef HRESULT (WINAPI *BaseRenderer_DoRenderSample)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnReceiveFirstSample)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnRenderEnd)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnRenderStart)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef VOID (WINAPI *BaseRenderer_OnStartStreaming)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_OnStopStreaming)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_OnWaitEnd)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_OnWaitStart)(BaseRenderer *This);
+typedef VOID (WINAPI *BaseRenderer_PrepareRender)(BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_ShouldDrawSampleNow)(BaseRenderer *This, IMediaSample *pMediaSample, REFERENCE_TIME *pStartTime, REFERENCE_TIME *pEndTime);
+typedef HRESULT (WINAPI *BaseRenderer_PrepareReceive)(BaseRenderer *This, IMediaSample *pMediaSample);
+typedef HRESULT (WINAPI *BaseRenderer_EndOfStream)(BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_BeginFlush) (BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_EndFlush) (BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_BreakConnect) (BaseRenderer *This);
+typedef HRESULT (WINAPI *BaseRenderer_CompleteConnect) (BaseRenderer *This, IPin *pReceivePin);
+
+typedef struct BaseRendererFuncTable {
+ /* Required */
+ BaseRenderer_CheckMediaType pfnCheckMediaType;
+ BaseRenderer_DoRenderSample pfnDoRenderSample;
+ /* Optional, Data Handlers */
+ BaseRenderer_OnReceiveFirstSample pfnOnReceiveFirstSample;
+ BaseRenderer_OnRenderEnd pfnOnRenderEnd;
+ BaseRenderer_OnRenderStart pfnOnRenderStart;
+ BaseRenderer_OnStartStreaming pfnOnStartStreaming;
+ BaseRenderer_OnStopStreaming pfnOnStopStreaming;
+ BaseRenderer_OnWaitEnd pfnOnWaitEnd;
+ BaseRenderer_OnWaitStart pfnOnWaitStart;
+ BaseRenderer_PrepareRender pfnPrepareRender;
+ BaseRenderer_ShouldDrawSampleNow pfnShouldDrawSampleNow;
+ BaseRenderer_PrepareReceive pfnPrepareReceive;
+ /* Optional, Input Pin */
+ BaseRenderer_CompleteConnect pfnCompleteConnect;
+ BaseRenderer_BreakConnect pfnBreakConnect;
+ BaseRenderer_EndOfStream pfnEndOfStream;
+ BaseRenderer_BeginFlush pfnBeginFlush;
+ BaseRenderer_EndFlush pfnEndFlush;
+} BaseRendererFuncTable;
+
+HRESULT WINAPI BaseRendererImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
+ULONG WINAPI BaseRendererImpl_Release(IBaseFilter * iface);
+HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSample);
+HRESULT WINAPI BaseRendererImpl_FindPin(IBaseFilter * iface, LPCWSTR Id, IPin **ppPin);
+HRESULT WINAPI BaseRendererImpl_Stop(IBaseFilter * iface);
+HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart);
+HRESULT WINAPI BaseRendererImpl_Pause(IBaseFilter * iface);
+HRESULT WINAPI BaseRendererImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *clock);
+HRESULT WINAPI BaseRendererImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState);
+HRESULT WINAPI BaseRendererImpl_EndOfStream(BaseRenderer* iface);
+HRESULT WINAPI BaseRendererImpl_BeginFlush(BaseRenderer* iface);
+HRESULT WINAPI BaseRendererImpl_EndFlush(BaseRenderer* iface);
+HRESULT WINAPI BaseRendererImpl_ClearPendingSample(BaseRenderer *iface);
+
+HRESULT WINAPI BaseRenderer_Init(BaseRenderer *This, const IBaseFilterVtbl *Vtbl, IUnknown *pUnkOuter, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseRendererFuncTable* pBaseFuncsTable);
+
+#ifdef __IBasicAudio_FWD_DEFINED__
+typedef struct tagBasicAudio
+{
+ IBasicAudio IBasicAudio_iface;
+ BaseDispatch baseDispatch;
+} BasicAudio;
+
+HRESULT WINAPI BasicAudio_Init(BasicAudio *This, const IBasicAudioVtbl *Vtbl);
+HRESULT WINAPI BasicAudio_Destroy(BasicAudio *pBasicAudio);
+
+HRESULT WINAPI BasicAudioImpl_GetTypeInfoCount(IBasicAudio *iface, UINT*pctinfo);
+HRESULT WINAPI BasicAudioImpl_GetTypeInfo(IBasicAudio *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+HRESULT WINAPI BasicAudioImpl_GetIDsOfNames(IBasicAudio *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+HRESULT WINAPI BasicAudioImpl_Invoke(IBasicAudio *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr);
+#endif
+
+/* Dll Functions */
+BOOL WINAPI STRMBASE_DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv);
+HRESULT WINAPI STRMBASE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv);
+HRESULT WINAPI STRMBASE_DllCanUnloadNow(void);
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl
new file mode 100644
index 00000000..9b80b45d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/svcctl.idl
@@ -0,0 +1,380 @@
+/*
+ * svcctl interface definitions - exported by services.exe to access the
+ * services database
+ *
+ * Copyright 2007 Google (Mikolaj Zalewski)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "wtypes.idl";
+
+/*
+ * some defined for the C code
+ */
+cpp_quote("#include \"winsvc.h\"")
+cpp_quote("#define SVCCTL_TRANSPORT {'n','c','a','c','n','_','n','p',0}")
+cpp_quote("#define SVCCTL_ENDPOINT {'\\\\','p','i','p','e','\\\\','s','v','c','c','t','l',0}")
+
+/* Not the Windows event name - if needed the true one can be found in Inside Windows */
+cpp_quote("#define SVCCTL_STARTED_EVENT {'_','_','w','i','n','e','_','S','v','c','c','t','l','S','t','a','r','t','e','d',0}")
+
+/* Service startup protocol over control pipe - not compatible with Windows */
+enum service_pipe_command
+{
+ WINESERV_STARTINFO = 1,
+ WINESERV_SENDCONTROL = 2
+};
+
+typedef struct service_start_info_t
+{
+ enum service_pipe_command cmd; /* request code */
+ DWORD total_size; /* total request size */
+ DWORD name_size; /* size of name in data buffer */
+ DWORD control; /* control code */
+ WCHAR data[1];
+} service_start_info;
+
+[
+ uuid(367abb81-9844-35f1-ad32-98f038001003),
+ version(2.0),
+ pointer_default(unique),
+ endpoint("ncacn_np:[\\pipe\\svcctl]")
+]
+interface svcctl
+{
+ /* handle types */
+ typedef [handle] LPCWSTR MACHINE_HANDLEW;
+ typedef [context_handle] void *SC_RPC_HANDLE;
+ typedef [context_handle] void *SC_RPC_LOCK;
+
+ /* undocumented access rights */
+ cpp_quote("#define SERVICE_SET_STATUS 0x8000")
+
+cpp_quote("#if 0 /* already defined in winsvc.h */")
+typedef struct _QUERY_SERVICE_CONFIGW {
+ DWORD dwServiceType;
+ DWORD dwStartType;
+ DWORD dwErrorControl;
+ [unique] LPWSTR lpBinaryPathName;
+ [unique] LPWSTR lpLoadOrderGroup;
+ DWORD dwTagId;
+ [unique] LPWSTR lpDependencies;
+ [unique] LPWSTR lpServiceStartName;
+ [unique] LPWSTR lpDisplayName;
+} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
+
+typedef struct _SERVICE_STATUS {
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+} SERVICE_STATUS, *LPSERVICE_STATUS;
+
+typedef enum _SC_STATUS_TYPE {
+ SC_STATUS_PROCESS_INFO = 0
+} SC_STATUS_TYPE;
+
+typedef struct _SERVICE_DESCRIPTIONW {
+ LPWSTR lpDescription;
+} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
+
+typedef enum _SC_ACTION_TYPE {
+ SC_ACTION_NONE = 0,
+ SC_ACTION_RESTART = 1,
+ SC_ACTION_REBOOT = 2,
+ SC_ACTION_RUN_COMMAND = 3
+} SC_ACTION_TYPE;
+
+typedef struct _SC_ACTION {
+ SC_ACTION_TYPE Type;
+ DWORD Delay;
+} SC_ACTION,*LPSC_ACTION;
+
+typedef struct _SERVICE_FAILURE_ACTIONSW {
+ DWORD dwResetPeriod;
+ [unique] LPWSTR lpRebootMsg;
+ [unique] LPWSTR lpCommand;
+ DWORD cActions;
+ [size_is(cActions)] SC_ACTION *lpsaActions;
+} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
+
+typedef struct _SERVICE_PRESHUTDOWN_INFO {
+ DWORD dwPreshutdownTimeout;
+} SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO;
+
+#define SERVICE_CONFIG_DESCRIPTION 1
+#define SERVICE_CONFIG_FAILURE_ACTIONS 2
+#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3
+#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4
+#define SERVICE_CONFIG_SERVICE_SID_INFO 5
+#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
+#define SERVICE_CONFIG_PRESHUTDOWN_INFO 7
+
+typedef struct _ENUM_SERVICE_STATUSW {
+ LPWSTR lpServiceName;
+ LPWSTR lpDisplayName;
+ SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
+
+cpp_quote("#endif")
+
+typedef [switch_type(DWORD)] union
+{
+ [case (SERVICE_CONFIG_DESCRIPTION)] SERVICE_DESCRIPTIONW descr;
+ [case (SERVICE_CONFIG_FAILURE_ACTIONS)] SERVICE_FAILURE_ACTIONSW actions;
+ [case (SERVICE_CONFIG_PRESHUTDOWN_INFO)] SERVICE_PRESHUTDOWN_INFO preshutdown;
+} SERVICE_CONFIG2W;
+
+ /* Compatible with Windows function 0x00 */
+ DWORD svcctl_CloseServiceHandle(
+ [in,out] SC_RPC_HANDLE *handle
+ );
+
+ /* Compatible with Windows function 0x01 */
+ DWORD svcctl_ControlService(
+ [in] SC_RPC_HANDLE hService,
+ [in] DWORD dwControl,
+ [out] SERVICE_STATUS *lpServiceStatus
+ );
+
+ /* Compatible with Windows function 0x02 */
+ DWORD svcctl_DeleteService(
+ [in] SC_RPC_HANDLE hService
+ );
+
+ /* Compatible with Windows function 0x03 */
+ DWORD svcctl_LockServiceDatabase(
+ [in] SC_RPC_HANDLE hSCManager,
+ [out] SC_RPC_LOCK *phLock
+ );
+
+ /* Not compatible with Windows function 0x04 */
+ DWORD svcctl_QueryServiceObjectSecurity(/* FIXME */);
+
+ /* Not compatible with Windows function 0x05 */
+ DWORD svcctl_SetServiceObjectSecurity(/* FIXME */);
+
+ /* Not compatible with Windows function 0x06 */
+ DWORD svcctl_QueryServiceStatus(/* FIXME */);
+
+ /* Compatible with Windows function 0x07 */
+ DWORD svcctl_SetServiceStatus(
+ [in] SC_RPC_HANDLE hServiceStatus,
+ [in] LPSERVICE_STATUS lpServiceStatus
+ );
+
+ /* Compatible with Windows function 0x08 */
+ DWORD svcctl_UnlockServiceDatabase(
+ [in,out] SC_RPC_LOCK *phLock
+ );
+
+ /* Not compatible with Windows function 0x09 */
+ DWORD svcctl_NotifyBootConfigStatus(/* FIXME */);
+
+ /* Not compatible with Windows function 0x0a */
+ DWORD svcctl_SCSetServiceBitsW(/* FIXME */);
+
+ /* Compatible with Windows function 0x0b */
+ DWORD svcctl_ChangeServiceConfigW(
+ [in] SC_RPC_HANDLE hService,
+ [in] DWORD dwServiceType,
+ [in] DWORD dwStartType,
+ [in] DWORD dwErrorControl,
+ [in,unique] LPCWSTR lpBinaryPathName,
+ [in,unique] LPCWSTR lpLoadOrderGroupKey,
+ [in,out,unique] DWORD *lpdwTagId,
+ [in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
+ [in] DWORD dwDependenciesSize,
+ [in,unique] LPCWSTR lpServiceStartName,
+ [in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
+ [in] DWORD dwPasswordSize,
+ [in,unique] LPCWSTR lpDisplayName
+ );
+
+ /* Compatible with Windows function 0x0c */
+ DWORD svcctl_CreateServiceW(
+ [in] SC_RPC_HANDLE hSCManager,
+ [in] LPCWSTR lpServiceName,
+ [in,unique] LPCWSTR lpDisplayName,
+ [in] DWORD dwDesiredAccess,
+ [in] DWORD dwServiceType,
+ [in] DWORD dwStartType,
+ [in] DWORD dwErrorControl,
+ [in] LPCWSTR lpBinaryPathName,
+ [in,unique] LPCWSTR lpLoadOrderGroup,
+ [in,out,unique] DWORD *lpdwTagId,
+ [in,unique,size_is(dwDependenciesSize)] const BYTE *lpDependencies,
+ [in] DWORD dwDependenciesSize,
+ [in,unique] LPCWSTR lpServiceStartName,
+ [in,unique,size_is(dwPasswordSize)] const BYTE *lpPassword,
+ [in] DWORD dwPasswordSize,
+ [out] SC_RPC_HANDLE *phService
+ );
+
+ /* Not compatible with Windows function 0x0d */
+ DWORD svcctl_EnumDependentServicesW(/* FIXME */);
+
+ /* Not compatible with Windows function 0x0e */
+ DWORD svcctl_EnumServicesStatusW(
+ [in] SC_RPC_HANDLE hmngr,
+ [in] DWORD type,
+ [in] DWORD state,
+ [out,size_is(size)] BYTE *buffer,
+ [in] DWORD size,
+ [out] LPDWORD needed,
+ [out] LPDWORD returned
+ );
+
+ /* Compatible with Windows function 0x0f */
+ DWORD svcctl_OpenSCManagerW(
+ [in,unique] MACHINE_HANDLEW MachineName,
+ [in,unique] LPCWSTR DatabaseName,
+ [in] DWORD dwAccessMask,
+ [out] SC_RPC_HANDLE *handle
+ );
+
+ /* Compatible with Windows function 0x10 */
+ DWORD svcctl_OpenServiceW(
+ [in] SC_RPC_HANDLE hSCManager,
+ [in] LPCWSTR lpServiceName,
+ [in] DWORD dwDesiredAccess,
+ [out] SC_RPC_HANDLE *phService
+ );
+
+ /* Windows function 0x11 must be using a different prototype - not compatible */
+ DWORD svcctl_QueryServiceConfigW(
+ [in] SC_RPC_HANDLE hService,
+ [out] QUERY_SERVICE_CONFIGW *config);
+
+ /* Not compatible with Windows function 0x12 */
+ DWORD svcctl_QueryServiceLockStatusW(/* FIXME */);
+
+ /* Untested with Windows function 0x13 */
+ DWORD svcctl_StartServiceW(
+ [in] SC_RPC_HANDLE hService,
+ [in] DWORD dwNumServiceArgs,
+ [in,unique,size_is(dwNumServiceArgs)] LPCWSTR *lpServiceArgVectors
+ );
+
+ /* Compatible with Windows function 0x14 */
+ DWORD svcctl_GetServiceDisplayNameW(
+ [in] SC_RPC_HANDLE hSCManager,
+ [in] LPCWSTR lpServiceName,
+ [out,string,size_is(*cchBufSize+1)] WCHAR lpBuffer[],
+ [in,out] DWORD *cchBufSize);
+
+ /* Compatible with Windows function 0x15 */
+ DWORD svcctl_GetServiceKeyNameW(
+ [in] SC_RPC_HANDLE hSCManager,
+ [in] LPCWSTR lpServiceDisplayName,
+ [out,string,size_is(*cchBufSize+1)] WCHAR lpBuffer[],
+ [in,out] DWORD *cchBufSize);
+
+ /* Not compatible with Windows function 0x16 */
+ DWORD svcctl_SCSetServiceBitsA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x17 */
+ DWORD svcctl_ChangeServiceConfigA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x18 */
+ DWORD svcctl_CreateServiceA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x19 */
+ DWORD svcctl_EnumDependentServicesA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x1a */
+ DWORD svcctl_EnumServicesStatusA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x1b */
+ DWORD svcctl_OpenSCManagerA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x1c */
+ DWORD svcctl_OpenServiceA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x1d */
+ DWORD svcctl_QueryServiceConfigA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x1e */
+ DWORD svcctl_QueryServiceLockStatusA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x1f */
+ DWORD svcctl_StartServiceA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x20 */
+ DWORD svcctl_GetServiceDisplayNameA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x21 */
+ DWORD svcctl_GetServiceKeyNameA(/* FIXME */);
+
+ /* Not compatible with Windows function 0x22 */
+ DWORD svcctl_GetCurrentGroupStateW(/* FIXME */);
+
+ /* Not compatible with Windows function 0x23 */
+ DWORD svcctl_EnumServiceGroupW(/* FIXME */);
+
+ /* Not compatible with Windows function 0x24 */
+ DWORD svcctl_ChangeServiceConfig2A(/* FIXME */);
+
+ /* Untested with Windows function 0x25 */
+ DWORD svcctl_ChangeServiceConfig2W(
+ [in] SC_RPC_HANDLE hService,
+ [in] DWORD InfoLevel,
+ [in,switch_is(InfoLevel)] SERVICE_CONFIG2W *config );
+
+ /* Not compatible with Windows function 0x26 */
+ DWORD svcctl_QueryServiceConfig2A(/* FIXME */);
+
+ /* Untested with Windows function 0x27 */
+ DWORD svcctl_QueryServiceConfig2W(
+ [in] SC_RPC_HANDLE hService,
+ [in] DWORD InfoLevel,
+ [out,size_is(cbBufSize)] BYTE lpBuffer[],
+ [in] DWORD cbBufSize,
+ [out] LPDWORD pcbBytesNeeded
+ );
+
+ /* Untested with Windows function 0x28 */
+ DWORD svcctl_QueryServiceStatusEx(
+ [in] SC_RPC_HANDLE hService,
+ [in] SC_STATUS_TYPE InfoLevel,
+ [out,size_is(cbBufSize)] BYTE *lpBuffer,
+ [in] DWORD cbBufSize,
+ [out] LPDWORD pcbBytesNeeded
+ );
+
+ DWORD svcctl_EnumServicesStatusExW(
+ [in] SC_RPC_HANDLE hmngr,
+ [in] DWORD type,
+ [in] DWORD state,
+ [out,size_is(size)] BYTE *buffer,
+ [in] DWORD size,
+ [out] LPDWORD needed,
+ [out] LPDWORD returned,
+ [in,unique] LPCWSTR group
+ );
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h
new file mode 100644
index 00000000..2fac3613
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/test.h
@@ -0,0 +1,654 @@
+/*
+ * Definitions for Wine C unit tests.
+ *
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_TEST_H
+#define __WINE_WINE_TEST_H
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <windef.h>
+#include <winbase.h>
+
+#ifdef __WINE_CONFIG_H
+#error config.h should not be used in Wine tests
+#endif
+#ifdef __WINE_WINE_LIBRARY_H
+#error wine/library.h should not be used in Wine tests
+#endif
+#ifdef __WINE_WINE_UNICODE_H
+#error wine/unicode.h should not be used in Wine tests
+#endif
+#ifdef __WINE_WINE_DEBUG_H
+#error wine/debug.h should not be used in Wine tests
+#endif
+
+#ifndef INVALID_FILE_ATTRIBUTES
+#define INVALID_FILE_ATTRIBUTES (~0u)
+#endif
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER (~0u)
+#endif
+
+/* debug level */
+extern int winetest_debug;
+
+/* running in interactive mode? */
+extern int winetest_interactive;
+
+/* current platform */
+extern const char *winetest_platform;
+
+extern void winetest_set_location( const char* file, int line );
+extern void winetest_start_todo( const char* platform );
+extern int winetest_loop_todo(void);
+extern void winetest_end_todo( const char* platform );
+extern int winetest_get_mainargs( char*** pargv );
+extern LONG winetest_get_failures(void);
+extern void winetest_add_failures( LONG new_failures );
+extern void winetest_wait_child_process( HANDLE process );
+
+extern const char *wine_dbgstr_wn( const WCHAR *str, int n );
+static inline const char *wine_dbgstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
+
+/* strcmpW is available for tests compiled under Wine, but not in standalone
+ * builds under Windows, so we reimplement it under a different name. */
+static inline int winetest_strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+ while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+ return *str1 - *str2;
+}
+
+#ifdef STANDALONE
+#define START_TEST(name) \
+ static void func_##name(void); \
+ const struct test winetest_testlist[] = { { #name, func_##name }, { 0, 0 } }; \
+ static void func_##name(void)
+#else
+#define START_TEST(name) void func_##name(void)
+#endif
+
+#if defined(__x86_64__) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT)
+#define __winetest_cdecl __cdecl
+#define __winetest_va_list __builtin_ms_va_list
+#else
+#define __winetest_cdecl
+#define __winetest_va_list va_list
+#endif
+
+extern int broken( int condition );
+extern int winetest_vok( int condition, const char *msg, __winetest_va_list ap );
+extern void winetest_vskip( const char *msg, __winetest_va_list ap );
+
+#ifdef __GNUC__
+
+extern void __winetest_cdecl winetest_ok( int condition, const char *msg, ... ) __attribute__((format (printf,2,3) ));
+extern void __winetest_cdecl winetest_skip( const char *msg, ... ) __attribute__((format (printf,1,2)));
+extern void __winetest_cdecl winetest_win_skip( const char *msg, ... ) __attribute__((format (printf,1,2)));
+extern void __winetest_cdecl winetest_trace( const char *msg, ... ) __attribute__((format (printf,1,2)));
+
+#else /* __GNUC__ */
+
+extern void __winetest_cdecl winetest_ok( int condition, const char *msg, ... );
+extern void __winetest_cdecl winetest_skip( const char *msg, ... );
+extern void __winetest_cdecl winetest_win_skip( const char *msg, ... );
+extern void __winetest_cdecl winetest_trace( const char *msg, ... );
+
+#endif /* __GNUC__ */
+
+#define ok_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_ok
+#define skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_skip
+#define win_skip_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_win_skip
+#define trace_(file, line) (winetest_set_location(file, line), 0) ? (void)0 : winetest_trace
+
+#define ok ok_(__FILE__, __LINE__)
+#define skip skip_(__FILE__, __LINE__)
+#define win_skip win_skip_(__FILE__, __LINE__)
+#define trace trace_(__FILE__, __LINE__)
+
+#define todo(platform) for (winetest_start_todo(platform); \
+ winetest_loop_todo(); \
+ winetest_end_todo(platform))
+#define todo_wine todo("wine")
+
+
+#ifdef NONAMELESSUNION
+# define U(x) (x).u
+# define U1(x) (x).u1
+# define U2(x) (x).u2
+# define U3(x) (x).u3
+# define U4(x) (x).u4
+# define U5(x) (x).u5
+# define U6(x) (x).u6
+# define U7(x) (x).u7
+# define U8(x) (x).u8
+#else
+# define U(x) (x)
+# define U1(x) (x)
+# define U2(x) (x)
+# define U3(x) (x)
+# define U4(x) (x)
+# define U5(x) (x)
+# define U6(x) (x)
+# define U7(x) (x)
+# define U8(x) (x)
+#endif
+
+#ifdef NONAMELESSSTRUCT
+# define S(x) (x).s
+# define S1(x) (x).s1
+# define S2(x) (x).s2
+# define S3(x) (x).s3
+# define S4(x) (x).s4
+# define S5(x) (x).s5
+#else
+# define S(x) (x)
+# define S1(x) (x)
+# define S2(x) (x)
+# define S3(x) (x)
+# define S4(x) (x)
+# define S5(x) (x)
+#endif
+
+
+/************************************************************************/
+/* Below is the implementation of the various functions, to be included
+ * directly into the generated testlist.c file.
+ * It is done that way so that the dlls can build the test routines with
+ * different includes or flags if needed.
+ */
+
+#ifdef STANDALONE
+
+#include <stdio.h>
+#include <excpt.h>
+
+#if defined(__x86_64__) && defined(__GNUC__) && defined(__WINE_USE_MSVCRT)
+# define __winetest_va_start(list,arg) __builtin_ms_va_start(list,arg)
+# define __winetest_va_end(list) __builtin_ms_va_end(list)
+#else
+# define __winetest_va_start(list,arg) va_start(list,arg)
+# define __winetest_va_end(list) va_end(list)
+#endif
+
+struct test
+{
+ const char *name;
+ void (*func)(void);
+};
+
+extern const struct test winetest_testlist[];
+
+/* debug level */
+int winetest_debug = 1;
+
+/* interactive mode? */
+int winetest_interactive = 0;
+
+/* current platform */
+const char *winetest_platform = "windows";
+
+/* report successful tests (BOOL) */
+static int report_success = 0;
+
+/* passing arguments around */
+static int winetest_argc;
+static char** winetest_argv;
+
+static const struct test *current_test; /* test currently being run */
+
+static LONG successes; /* number of successful tests */
+static LONG failures; /* number of failures */
+static LONG skipped; /* number of skipped test chunks */
+static LONG todo_successes; /* number of successful tests inside todo block */
+static LONG todo_failures; /* number of failures inside todo block */
+
+/* The following data must be kept track of on a per-thread basis */
+typedef struct
+{
+ const char* current_file; /* file of current check */
+ int current_line; /* line of current check */
+ int todo_level; /* current todo nesting level */
+ int todo_do_loop;
+ char *str_pos; /* position in debug buffer */
+ char strings[2000]; /* buffer for debug strings */
+} tls_data;
+static DWORD tls_index;
+
+static tls_data* get_tls_data(void)
+{
+ tls_data* data;
+ DWORD last_error;
+
+ last_error=GetLastError();
+ data=TlsGetValue(tls_index);
+ if (!data)
+ {
+ data=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(tls_data));
+ data->str_pos = data->strings;
+ TlsSetValue(tls_index,data);
+ }
+ SetLastError(last_error);
+ return data;
+}
+
+/* allocate some tmp space for a string */
+static char *get_temp_buffer( size_t n )
+{
+ tls_data *data = get_tls_data();
+ char *res = data->str_pos;
+
+ if (res + n >= &data->strings[sizeof(data->strings)]) res = data->strings;
+ data->str_pos = res + n;
+ return res;
+}
+
+/* release extra space that we requested in gimme1() */
+static void release_temp_buffer( char *ptr, size_t size )
+{
+ tls_data *data = get_tls_data();
+ data->str_pos = ptr + size;
+}
+
+static void exit_process( int code )
+{
+ fflush( stdout );
+ ExitProcess( code );
+}
+
+
+void winetest_set_location( const char* file, int line )
+{
+ tls_data* data=get_tls_data();
+ data->current_file=strrchr(file,'/');
+ if (data->current_file==NULL)
+ data->current_file=strrchr(file,'\\');
+ if (data->current_file==NULL)
+ data->current_file=file;
+ else
+ data->current_file++;
+ data->current_line=line;
+}
+
+int broken( int condition )
+{
+ return (strcmp(winetest_platform, "windows") == 0) && condition;
+}
+
+/*
+ * Checks condition.
+ * Parameters:
+ * - condition - condition to check;
+ * - msg test description;
+ * - file - test application source code file name of the check
+ * - line - test application source code file line number of the check
+ * Return:
+ * 0 if condition does not have the expected value, 1 otherwise
+ */
+int winetest_vok( int condition, const char *msg, __winetest_va_list args )
+{
+ tls_data* data=get_tls_data();
+
+ if (data->todo_level)
+ {
+ if (condition)
+ {
+ fprintf( stdout, "%s:%d: Test succeeded inside todo block: ",
+ data->current_file, data->current_line );
+ vfprintf(stdout, msg, args);
+ InterlockedIncrement(&todo_failures);
+ return 0;
+ }
+ else
+ {
+ if (winetest_debug > 0)
+ {
+ fprintf( stdout, "%s:%d: Test marked todo: ",
+ data->current_file, data->current_line );
+ vfprintf(stdout, msg, args);
+ }
+ InterlockedIncrement(&todo_successes);
+ return 1;
+ }
+ }
+ else
+ {
+ if (!condition)
+ {
+ fprintf( stdout, "%s:%d: Test failed: ",
+ data->current_file, data->current_line );
+ vfprintf(stdout, msg, args);
+ InterlockedIncrement(&failures);
+ return 0;
+ }
+ else
+ {
+ if (report_success)
+ fprintf( stdout, "%s:%d: Test succeeded\n",
+ data->current_file, data->current_line);
+ InterlockedIncrement(&successes);
+ return 1;
+ }
+ }
+}
+
+void __winetest_cdecl winetest_ok( int condition, const char *msg, ... )
+{
+ __winetest_va_list valist;
+
+ __winetest_va_start(valist, msg);
+ winetest_vok(condition, msg, valist);
+ __winetest_va_end(valist);
+}
+
+void __winetest_cdecl winetest_trace( const char *msg, ... )
+{
+ __winetest_va_list valist;
+ tls_data* data=get_tls_data();
+
+ if (winetest_debug > 0)
+ {
+ fprintf( stdout, "%s:%d: ", data->current_file, data->current_line );
+ __winetest_va_start(valist, msg);
+ vfprintf(stdout, msg, valist);
+ __winetest_va_end(valist);
+ }
+}
+
+void winetest_vskip( const char *msg, __winetest_va_list args )
+{
+ tls_data* data=get_tls_data();
+
+ fprintf( stdout, "%s:%d: Tests skipped: ", data->current_file, data->current_line );
+ vfprintf(stdout, msg, args);
+ skipped++;
+}
+
+void __winetest_cdecl winetest_skip( const char *msg, ... )
+{
+ __winetest_va_list valist;
+ __winetest_va_start(valist, msg);
+ winetest_vskip(msg, valist);
+ __winetest_va_end(valist);
+}
+
+void __winetest_cdecl winetest_win_skip( const char *msg, ... )
+{
+ __winetest_va_list valist;
+ __winetest_va_start(valist, msg);
+ if (strcmp(winetest_platform, "windows") == 0)
+ winetest_vskip(msg, valist);
+ else
+ winetest_vok(0, msg, valist);
+ __winetest_va_end(valist);
+}
+
+void winetest_start_todo( const char* platform )
+{
+ tls_data* data=get_tls_data();
+ if (strcmp(winetest_platform,platform)==0)
+ data->todo_level++;
+ data->todo_do_loop=1;
+}
+
+int winetest_loop_todo(void)
+{
+ tls_data* data=get_tls_data();
+ int do_loop=data->todo_do_loop;
+ data->todo_do_loop=0;
+ return do_loop;
+}
+
+void winetest_end_todo( const char* platform )
+{
+ if (strcmp(winetest_platform,platform)==0)
+ {
+ tls_data* data=get_tls_data();
+ data->todo_level--;
+ }
+}
+
+int winetest_get_mainargs( char*** pargv )
+{
+ *pargv = winetest_argv;
+ return winetest_argc;
+}
+
+LONG winetest_get_failures(void)
+{
+ return failures;
+}
+
+void winetest_add_failures( LONG new_failures )
+{
+ while (new_failures-- > 0)
+ InterlockedIncrement( &failures );
+}
+
+void winetest_wait_child_process( HANDLE process )
+{
+ DWORD exit_code = 1;
+
+ if (WaitForSingleObject( process, 30000 ))
+ fprintf( stdout, "%s: child process wait failed\n", current_test->name );
+ else
+ GetExitCodeProcess( process, &exit_code );
+
+ if (exit_code)
+ {
+ if (exit_code > 255)
+ {
+ fprintf( stdout, "%s: exception 0x%08x in child process\n", current_test->name, exit_code );
+ InterlockedIncrement( &failures );
+ }
+ else
+ {
+ fprintf( stdout, "%s: %u failures in child process\n",
+ current_test->name, exit_code );
+ while (exit_code-- > 0)
+ InterlockedIncrement(&failures);
+ }
+ }
+}
+
+const char *wine_dbgstr_wn( const WCHAR *str, int n )
+{
+ char *dst, *res;
+ size_t size;
+
+ if (!((ULONG_PTR)str >> 16))
+ {
+ if (!str) return "(null)";
+ res = get_temp_buffer( 6 );
+ sprintf( res, "#%04x", LOWORD(str) );
+ return res;
+ }
+ if (n == -1)
+ {
+ const WCHAR *end = str;
+ while (*end) end++;
+ n = end - str;
+ }
+ if (n < 0) n = 0;
+ size = 12 + min( 300, n * 5 );
+ dst = res = get_temp_buffer( size );
+ *dst++ = 'L';
+ *dst++ = '"';
+ while (n-- > 0 && dst <= res + size - 10)
+ {
+ WCHAR c = *str++;
+ switch (c)
+ {
+ case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
+ case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
+ case '\t': *dst++ = '\\'; *dst++ = 't'; break;
+ case '"': *dst++ = '\\'; *dst++ = '"'; break;
+ case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
+ default:
+ if (c >= ' ' && c <= 126)
+ *dst++ = c;
+ else
+ {
+ *dst++ = '\\';
+ sprintf(dst,"%04x",c);
+ dst+=4;
+ }
+ }
+ }
+ *dst++ = '"';
+ if (n > 0)
+ {
+ *dst++ = '.';
+ *dst++ = '.';
+ *dst++ = '.';
+ }
+ *dst++ = 0;
+ release_temp_buffer( res, dst - res );
+ return res;
+}
+
+/* Find a test by name */
+static const struct test *find_test( const char *name )
+{
+ const struct test *test;
+ const char *p;
+ size_t len;
+
+ if ((p = strrchr( name, '/' ))) name = p + 1;
+ if ((p = strrchr( name, '\\' ))) name = p + 1;
+ len = strlen(name);
+ if (len > 2 && !strcmp( name + len - 2, ".c" )) len -= 2;
+
+ for (test = winetest_testlist; test->name; test++)
+ {
+ if (!strncmp( test->name, name, len ) && !test->name[len]) break;
+ }
+ return test->name ? test : NULL;
+}
+
+
+/* Display list of valid tests */
+static void list_tests(void)
+{
+ const struct test *test;
+
+ fprintf( stdout, "Valid test names:\n" );
+ for (test = winetest_testlist; test->name; test++) fprintf( stdout, " %s\n", test->name );
+}
+
+
+/* Run a named test, and return exit status */
+static int run_test( const char *name )
+{
+ const struct test *test;
+ int status;
+
+ if (!(test = find_test( name )))
+ {
+ fprintf( stdout, "Fatal: test '%s' does not exist.\n", name );
+ exit_process(1);
+ }
+ successes = failures = todo_successes = todo_failures = 0;
+ tls_index=TlsAlloc();
+ current_test = test;
+ test->func();
+
+ if (winetest_debug)
+ {
+ fprintf( stdout, "%s: %d tests executed (%d marked as todo, %d %s), %d skipped.\n",
+ test->name, successes + failures + todo_successes + todo_failures,
+ todo_successes, failures + todo_failures,
+ (failures + todo_failures != 1) ? "failures" : "failure",
+ skipped );
+ }
+ status = (failures + todo_failures < 255) ? failures + todo_failures : 255;
+ return status;
+}
+
+
+/* Display usage and exit */
+static void usage( const char *argv0 )
+{
+ fprintf( stdout, "Usage: %s test_name\n\n", argv0 );
+ list_tests();
+ exit_process(1);
+}
+
+/* trap unhandled exceptions */
+static LONG CALLBACK exc_filter( EXCEPTION_POINTERS *ptrs )
+{
+ tls_data *data = get_tls_data();
+
+ if (data->current_file)
+ fprintf( stdout, "%s:%d: this is the last test seen before the exception\n",
+ data->current_file, data->current_line );
+ fprintf( stdout, "%s: unhandled exception %08x at %p\n", current_test->name,
+ ptrs->ExceptionRecord->ExceptionCode, ptrs->ExceptionRecord->ExceptionAddress );
+ fflush( stdout );
+ return EXCEPTION_EXECUTE_HANDLER;
+}
+
+#ifdef __GNUC__
+void _fpreset(void) {} /* override the mingw fpu init code */
+#endif
+
+/* main function */
+int main( int argc, char **argv )
+{
+ char p[128];
+
+ setvbuf (stdout, NULL, _IONBF, 0);
+
+ winetest_argc = argc;
+ winetest_argv = argv;
+
+ if (GetEnvironmentVariableA( "WINETEST_PLATFORM", p, sizeof(p) )) winetest_platform = strdup(p);
+ if (GetEnvironmentVariableA( "WINETEST_DEBUG", p, sizeof(p) )) winetest_debug = atoi(p);
+ if (GetEnvironmentVariableA( "WINETEST_INTERACTIVE", p, sizeof(p) )) winetest_interactive = atoi(p);
+ if (GetEnvironmentVariableA( "WINETEST_REPORT_SUCCESS", p, sizeof(p) )) report_success = atoi(p);
+
+ if (!strcmp( winetest_platform, "windows" )) SetUnhandledExceptionFilter( exc_filter );
+ if (!winetest_interactive) SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX );
+
+ if (!argv[1])
+ {
+ if (winetest_testlist[0].name && !winetest_testlist[1].name) /* only one test */
+ return run_test( winetest_testlist[0].name );
+ usage( argv[0] );
+ }
+ if (!strcmp( argv[1], "--list" ))
+ {
+ list_tests();
+ return 0;
+ }
+ return run_test(argv[1]);
+}
+
+#endif /* STANDALONE */
+
+#endif /* __WINE_WINE_TEST_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h
new file mode 100644
index 00000000..4257f153
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/unicode.h
@@ -0,0 +1,320 @@
+/*
+ * Wine internal Unicode definitions
+ *
+ * Copyright 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_UNICODE_H
+#define __WINE_WINE_UNICODE_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+
+#ifdef __WINE_WINE_TEST_H
+#error This file should not be used in Wine tests
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINE_UNICODE_API
+# if defined(_MSC_VER) || defined(__MINGW32__)
+# define WINE_UNICODE_API DECLSPEC_IMPORT
+# else
+# define WINE_UNICODE_API
+# endif
+#endif
+
+#ifndef WINE_UNICODE_INLINE
+#define WINE_UNICODE_INLINE static inline
+#endif
+
+/* code page info common to SBCS and DBCS */
+struct cp_info
+{
+ unsigned int codepage; /* codepage id */
+ unsigned int char_size; /* char size (1 or 2 bytes) */
+ WCHAR def_char; /* default char value (can be double-byte) */
+ WCHAR def_unicode_char; /* default Unicode char value */
+ const char *name; /* code page name */
+};
+
+struct sbcs_table
+{
+ struct cp_info info;
+ const WCHAR *cp2uni; /* code page -> Unicode map */
+ const WCHAR *cp2uni_glyphs; /* code page -> Unicode map with glyph chars */
+ const unsigned char *uni2cp_low; /* Unicode -> code page map */
+ const unsigned short *uni2cp_high;
+};
+
+struct dbcs_table
+{
+ struct cp_info info;
+ const WCHAR *cp2uni; /* code page -> Unicode map */
+ const unsigned char *cp2uni_leadbytes;
+ const unsigned short *uni2cp_low; /* Unicode -> code page map */
+ const unsigned short *uni2cp_high;
+ unsigned char lead_bytes[12]; /* lead bytes ranges */
+};
+
+union cptable
+{
+ struct cp_info info;
+ struct sbcs_table sbcs;
+ struct dbcs_table dbcs;
+};
+
+extern const union cptable *wine_cp_get_table( unsigned int codepage );
+extern const union cptable *wine_cp_enum_table( unsigned int index );
+
+extern int wine_cp_mbstowcs( const union cptable *table, int flags,
+ const char *src, int srclen,
+ WCHAR *dst, int dstlen );
+extern int wine_cp_wcstombs( const union cptable *table, int flags,
+ const WCHAR *src, int srclen,
+ char *dst, int dstlen, const char *defchar, int *used );
+extern int wine_cpsymbol_mbstowcs( const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_cpsymbol_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen );
+extern int wine_utf8_wcstombs( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+
+extern int wine_compare_string( int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 );
+extern int wine_get_sortkey( int flags, const WCHAR *src, int srclen, char *dst, int dstlen );
+extern int wine_fold_string( int flags, const WCHAR *src, int srclen , WCHAR *dst, int dstlen );
+
+extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );
+extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );
+extern int memicmpW( const WCHAR *str1, const WCHAR *str2, int n );
+extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
+extern long int strtolW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern unsigned long int strtoulW( const WCHAR *nptr, WCHAR **endptr, int base );
+extern int sprintfW( WCHAR *str, const WCHAR *format, ... );
+extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... );
+extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist );
+extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist );
+
+WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch )
+{
+ return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]);
+}
+
+WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch )
+{
+ extern WINE_UNICODE_API const WCHAR wine_casemap_lower[];
+ return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch )
+{
+ extern WINE_UNICODE_API const WCHAR wine_casemap_upper[];
+ return ch + wine_casemap_upper[wine_casemap_upper[ch >> 8] + (ch & 0xff)];
+}
+
+/* the character type contains the C1_* flags in the low 12 bits */
+/* and the C2_* type in the high 4 bits */
+WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch )
+{
+ extern WINE_UNICODE_API const unsigned short wine_wctype_table[];
+ return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)];
+}
+
+WINE_UNICODE_INLINE int iscntrlW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_CNTRL;
+}
+
+WINE_UNICODE_INLINE int ispunctW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_PUNCT;
+}
+
+WINE_UNICODE_INLINE int isspaceW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_SPACE;
+}
+
+WINE_UNICODE_INLINE int isdigitW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_DIGIT;
+}
+
+WINE_UNICODE_INLINE int isxdigitW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_XDIGIT;
+}
+
+WINE_UNICODE_INLINE int islowerW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_LOWER;
+}
+
+WINE_UNICODE_INLINE int isupperW( WCHAR wc )
+{
+ return get_char_typeW(wc) & C1_UPPER;
+}
+
+WINE_UNICODE_INLINE int isalnumW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isalphaW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isgraphW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+WINE_UNICODE_INLINE int isprintW( WCHAR wc )
+{
+ return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER);
+}
+
+/* some useful string manipulation routines */
+
+WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str )
+{
+ const WCHAR *s = str;
+ while (*s) s++;
+ return s - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
+{
+ WCHAR *p = dst;
+ while ((*p++ = *src++));
+ return dst;
+}
+
+/* strncpy doesn't do what you think, don't use it */
+#define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead
+
+WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 )
+{
+ while (*str1 && (*str1 == *str2)) { str1++; str2++; }
+ return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
+{
+ if (n <= 0) return 0;
+ while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
+ return *str1 - *str2;
+}
+
+WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src )
+{
+ strcpyW( dst + strlenW(dst), src );
+ return dst;
+}
+
+WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch )
+{
+ do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++);
+ return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch )
+{
+ WCHAR *ret = NULL;
+ do { if (*str == ch) ret = (WCHAR *)(ULONG_PTR)str; } while (*str++);
+ return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept )
+{
+ for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str;
+ return NULL;
+}
+
+WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept )
+{
+ const WCHAR *ptr;
+ for (ptr = str; *ptr; ptr++) if (!strchrW( accept, *ptr )) break;
+ return ptr - str;
+}
+
+WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject )
+{
+ const WCHAR *ptr;
+ for (ptr = str; *ptr; ptr++) if (strchrW( reject, *ptr )) break;
+ return ptr - str;
+}
+
+WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str )
+{
+ WCHAR *ret;
+ for (ret = str; *str; str++) *str = tolowerW(*str);
+ return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str )
+{
+ WCHAR *ret;
+ for (ret = str; *str; str++) *str = toupperW(*str);
+ return ret;
+}
+
+WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+ const WCHAR *end;
+ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) return (WCHAR *)(ULONG_PTR)ptr;
+ return NULL;
+}
+
+WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
+{
+ const WCHAR *end;
+ WCHAR *ret = NULL;
+ for (end = ptr + n; ptr < end; ptr++) if (*ptr == ch) ret = (WCHAR *)(ULONG_PTR)ptr;
+ return ret;
+}
+
+WINE_UNICODE_INLINE long int atolW( const WCHAR *str )
+{
+ return strtolW( str, (WCHAR **)0, 10 );
+}
+
+WINE_UNICODE_INLINE int atoiW( const WCHAR *str )
+{
+ return (int)atolW( str );
+}
+
+#undef WINE_UNICODE_INLINE
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINE_UNICODE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h
new file mode 100644
index 00000000..d3cfc7e2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl.h
@@ -0,0 +1,5081 @@
+/* Automatically generated from http://www.opengl.org/registry/api files; DO NOT EDIT! */
+
+#ifndef __WINE_WGL_H
+#define __WINE_WGL_H
+
+#ifndef GLAPIENTRY
+#define GLAPIENTRY __stdcall
+#endif
+
+typedef unsigned int GLbitfield;
+typedef unsigned char GLboolean;
+typedef signed char GLbyte;
+typedef char GLchar;
+typedef char GLcharARB;
+typedef double GLclampd;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef unsigned int GLenum;
+typedef float GLfloat;
+typedef unsigned short GLhalfNV;
+typedef unsigned int GLhandleARB;
+typedef int GLint;
+typedef INT64 GLint64;
+typedef INT_PTR GLintptr;
+typedef INT_PTR GLintptrARB;
+typedef short GLshort;
+typedef int GLsizei;
+typedef INT_PTR GLsizeiptr;
+typedef INT_PTR GLsizeiptrARB;
+typedef const unsigned char * GLstring;
+typedef struct __GLsync * GLsync;
+typedef unsigned char GLubyte;
+typedef unsigned int GLuint;
+typedef UINT64 GLuint64;
+typedef unsigned short GLushort;
+typedef INT_PTR GLvdpauSurfaceNV;
+typedef void GLvoid;
+
+#define GL_1PASS_EXT 0x80A1
+#define GL_1PASS_SGIS 0x80A1
+#define GL_2D 0x0600
+#define GL_2PASS_0_EXT 0x80A2
+#define GL_2PASS_0_SGIS 0x80A2
+#define GL_2PASS_1_EXT 0x80A3
+#define GL_2PASS_1_SGIS 0x80A3
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_2_BYTES 0x1407
+#define GL_3D 0x0601
+#define GL_3DC_XY_AMD 0x87FA
+#define GL_3DC_X_AMD 0x87F9
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_3_BYTES 0x1408
+#define GL_422_AVERAGE_EXT 0x80CE
+#define GL_422_EXT 0x80CC
+#define GL_422_REV_AVERAGE_EXT 0x80CF
+#define GL_422_REV_EXT 0x80CD
+#define GL_4D_COLOR_TEXTURE 0x0604
+#define GL_4PASS_0_EXT 0x80A4
+#define GL_4PASS_0_SGIS 0x80A4
+#define GL_4PASS_1_EXT 0x80A5
+#define GL_4PASS_1_SGIS 0x80A5
+#define GL_4PASS_2_EXT 0x80A6
+#define GL_4PASS_2_SGIS 0x80A6
+#define GL_4PASS_3_EXT 0x80A7
+#define GL_4PASS_3_SGIS 0x80A7
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_4_BYTES 0x1409
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_ABGR_EXT 0x8000
+#define GL_ACCUM 0x0100
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+#define GL_ACTIVE_SUBROUTINES 0x8DE5
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_ACTIVE_TEXTURE_ARB 0x84E0
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_ACTIVE_VARYINGS_NV 0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
+#define GL_ADD 0x0104
+#define GL_ADD_ATI 0x8963
+#define GL_ADD_BLEND_IMG 0x8C09
+#define GL_ADD_SIGNED 0x8574
+#define GL_ADD_SIGNED_ARB 0x8574
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F
+#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF
+#define GL_ALPHA 0x1906
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA12_EXT 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_ALPHA16F_ARB 0x881C
+#define GL_ALPHA16I_EXT 0x8D8A
+#define GL_ALPHA16UI_EXT 0x8D78
+#define GL_ALPHA16_EXT 0x803E
+#define GL_ALPHA16_SNORM 0x9018
+#define GL_ALPHA32F_ARB 0x8816
+#define GL_ALPHA32I_EXT 0x8D84
+#define GL_ALPHA32UI_EXT 0x8D72
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA4_EXT 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA8I_EXT 0x8D90
+#define GL_ALPHA8UI_EXT 0x8D7E
+#define GL_ALPHA8_EXT 0x803C
+#define GL_ALPHA8_SNORM 0x9014
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_ALPHA_BITS 0x0D55
+#define GL_ALPHA_FLOAT16_APPLE 0x881C
+#define GL_ALPHA_FLOAT16_ATI 0x881C
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_ALPHA_FLOAT32_ATI 0x8816
+#define GL_ALPHA_INTEGER 0x8D97
+#define GL_ALPHA_INTEGER_EXT 0x8D97
+#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
+#define GL_ALPHA_MAX_SGIX 0x8321
+#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
+#define GL_ALPHA_MIN_SGIX 0x8320
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_SNORM 0x9010
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1
+#define GL_ALPHA_TEST_QCOM 0x0BC0
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_ALPHA_TEST_REF_QCOM 0x0BC2
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_ALREADY_SIGNALED_APPLE 0x911A
+#define GL_ALWAYS 0x0207
+#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D
+#define GL_AMBIENT 0x1200
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_AND 0x1501
+#define GL_AND_INVERTED 0x1504
+#define GL_AND_REVERSE 0x1502
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A
+#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F
+#define GL_ARC_TO_NV 0xFE
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8
+#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
+#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
+#define GL_ASYNC_MARKER_SGIX 0x8329
+#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
+#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
+#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93
+#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
+#define GL_ATC_RGB_AMD 0x8C92
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ATTENUATION_EXT 0x834D
+#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
+#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_AUTO_GENERATE_MIPMAP 0x8295
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14
+#define GL_AVERAGE_EXT 0x8335
+#define GL_AVERAGE_HP 0x8160
+#define GL_BACK 0x0405
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_NORMALS_HINT_PGI 0x1A223
+#define GL_BACK_PRIMARY_COLOR_NV 0x8C77
+#define GL_BACK_RIGHT 0x0403
+#define GL_BACK_SECONDARY_COLOR_NV 0x8C78
+#define GL_BEVEL_NV 0x90A6
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_BGRA_EXT 0x80E1
+#define GL_BGRA_INTEGER 0x8D9B
+#define GL_BGRA_INTEGER_EXT 0x8D9B
+#define GL_BGR_EXT 0x80E0
+#define GL_BGR_INTEGER 0x8D9A
+#define GL_BGR_INTEGER_EXT 0x8D9A
+#define GL_BIAS_BIT_ATI 0x00000008
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0
+#define GL_BINORMAL_ARRAY_EXT 0x843A
+#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
+#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
+#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
+#define GL_BITMAP 0x1A00
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_BLEND 0x0BE2
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_COLOR_EXT 0x8005
+#define GL_BLEND_DST 0x0BE0
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_DST_ALPHA_EXT 0x80CA
+#define GL_BLEND_DST_ALPHA_OES 0x80CA
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_DST_RGB_EXT 0x80C8
+#define GL_BLEND_DST_RGB_OES 0x80C8
+#define GL_BLEND_EQUATION 0x8009
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D
+#define GL_BLEND_EQUATION_ALPHA_OES 0x883D
+#define GL_BLEND_EQUATION_EXT 0x8009
+#define GL_BLEND_EQUATION_OES 0x8009
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_BLEND_EQUATION_RGB_EXT 0x8009
+#define GL_BLEND_EQUATION_RGB_OES 0x8009
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
+#define GL_BLEND_SRC_ALPHA_OES 0x80CB
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_SRC_RGB_EXT 0x80C9
+#define GL_BLEND_SRC_RGB_OES 0x80C9
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_BLUE 0x1905
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_BLUE_BITS 0x0D54
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_BLUE_INTEGER 0x8D96
+#define GL_BLUE_INTEGER_EXT 0x8D96
+#define GL_BLUE_MAX_CLAMP_INGR 0x8566
+#define GL_BLUE_MIN_CLAMP_INGR 0x8562
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BOLD_BIT_NV 0x01
+#define GL_BOOL 0x8B56
+#define GL_BOOL_ARB 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC2_ARB 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC3_ARB 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_BOOL_VEC4_ARB 0x8B59
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_BUFFER 0x82E0
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_ACCESS_ARB 0x88BB
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_ACCESS_OES 0x88BB
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13
+#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAPPED_ARB 0x88BC
+#define GL_BUFFER_MAPPED_OES 0x88BC
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
+#define GL_BUFFER_MAP_POINTER_OES 0x88BD
+#define GL_BUFFER_OBJECT_APPLE 0x85B3
+#define GL_BUFFER_OBJECT_EXT 0x9151
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200
+#define GL_BUFFER_USAGE 0x8765
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_BUMP_ENVMAP_ATI 0x877B
+#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
+#define GL_BUMP_ROT_MATRIX_ATI 0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
+#define GL_BUMP_TARGET_ATI 0x877C
+#define GL_BUMP_TEX_UNITS_ATI 0x8778
+#define GL_BYTE 0x1400
+#define GL_C3F_V3F 0x2A24
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183
+#define GL_CAVEAT_SUPPORT 0x82B8
+#define GL_CCW 0x0901
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_CLAMP 0x2900
+#define GL_CLAMP_FRAGMENT_COLOR 0x891B
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
+#define GL_CLAMP_READ_COLOR 0x891C
+#define GL_CLAMP_READ_COLOR_ARB 0x891C
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+#define GL_CLAMP_TO_BORDER_SGIS 0x812D
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_CLAMP_TO_EDGE_SGIS 0x812F
+#define GL_CLAMP_VERTEX_COLOR 0x891A
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
+#define GL_CLEAR 0x1500
+#define GL_CLEAR_BUFFER 0x82B4
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_CLIP_DISTANCE0 0x3000
+#define GL_CLIP_DISTANCE1 0x3001
+#define GL_CLIP_DISTANCE2 0x3002
+#define GL_CLIP_DISTANCE3 0x3003
+#define GL_CLIP_DISTANCE4 0x3004
+#define GL_CLIP_DISTANCE5 0x3005
+#define GL_CLIP_DISTANCE6 0x3006
+#define GL_CLIP_DISTANCE7 0x3007
+#define GL_CLIP_DISTANCE_NV 0x8C7A
+#define GL_CLIP_FAR_HINT_PGI 0x1A221
+#define GL_CLIP_NEAR_HINT_PGI 0x1A220
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_CMYKA_EXT 0x800D
+#define GL_CMYK_EXT 0x800C
+#define GL_CND0_ATI 0x896B
+#define GL_CND_ATI 0x896A
+#define GL_COEFF 0x0A00
+#define GL_COLOR 0x1800
+#define GL_COLOR3_BIT_PGI 0x00010000
+#define GL_COLOR4_BIT_PGI 0x00020000
+#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
+#define GL_COLOR_ARRAY 0x8076
+#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23
+#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D
+#define GL_COLOR_ARRAY_LIST_IBM 103072
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
+#define GL_COLOR_ATTACHMENT0_NV 0x8CE0
+#define GL_COLOR_ATTACHMENT0_OES 0x8CE0
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
+#define GL_COLOR_ATTACHMENT10_NV 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
+#define GL_COLOR_ATTACHMENT11_NV 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
+#define GL_COLOR_ATTACHMENT12_NV 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
+#define GL_COLOR_ATTACHMENT13_NV 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
+#define GL_COLOR_ATTACHMENT14_NV 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
+#define GL_COLOR_ATTACHMENT15_NV 0x8CEF
+#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
+#define GL_COLOR_ATTACHMENT1_NV 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
+#define GL_COLOR_ATTACHMENT2_NV 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
+#define GL_COLOR_ATTACHMENT3_NV 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
+#define GL_COLOR_ATTACHMENT4_NV 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
+#define GL_COLOR_ATTACHMENT5_NV 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
+#define GL_COLOR_ATTACHMENT6_NV 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
+#define GL_COLOR_ATTACHMENT7_NV 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
+#define GL_COLOR_ATTACHMENT8_NV 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
+#define GL_COLOR_ATTACHMENT9_NV 0x8CE9
+#define GL_COLOR_ATTACHMENT_EXT 0x90F0
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_COMPONENTS 0x8283
+#define GL_COLOR_ENCODING 0x8296
+#define GL_COLOR_EXT 0x1800
+#define GL_COLOR_FLOAT_APPLE 0x8A0F
+#define GL_COLOR_INDEX 0x1900
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEXES 0x1603
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_SGI 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
+#define GL_COLOR_RENDERABLE 0x8286
+#define GL_COLOR_SAMPLES_NV 0x8E20
+#define GL_COLOR_SUM 0x8458
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_COLOR_SUM_CLAMP_NV 0x854F
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_COLOR_TABLE 0x80D0
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
+#define GL_COLOR_TABLE_SGI 0x80D0
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_COMBINE 0x8570
+#define GL_COMBINE4_NV 0x8503
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_AB_OUTPUT_NV 0x854A
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_CD_OUTPUT_NV 0x854B
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_COMBINE_ALPHA_ARB 0x8572
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_COMBINE_ARB 0x8570
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_RGB_ARB 0x8571
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E
+#define GL_COMPARE_R_TO_TEXTURE 0x884E
+#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
+#define GL_COMPATIBLE_SUBROUTINES 0x8E4B
+#define GL_COMPILE 0x1300
+#define GL_COMPILE_AND_EXECUTE 0x1301
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_ALPHA_ARB 0x84E9
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_RED_RGTC1 0x8DBB
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
+#define GL_COMPRESSED_RG 0x8226
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_RGBA_ARB 0x84EE
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#define GL_COMPRESSED_RGB_ARB 0x84ED
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
+#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
+#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RG_RGTC2 0x8DBD
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
+#define GL_COMPRESSED_SLUMINANCE 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
+#define GL_COMPRESSED_SRGB 0x8C48
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+#define GL_COMPRESSED_SRGB_EXT 0x8C48
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+#define GL_COMPUTE_LOCAL_WORK_SIZE 0x8267
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#define GL_COMPUTE_SUBROUTINE 0x92ED
+#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3
+#define GL_COMPUTE_TEXTURE 0x82A0
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_CONDITION_SATISFIED_APPLE 0x911C
+#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD
+#define GL_CONSTANT 0x8576
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_CONSTANT_ALPHA_EXT 0x8003
+#define GL_CONSTANT_ARB 0x8576
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_CONSTANT_BORDER_HP 0x8151
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_CONSTANT_COLOR0_NV 0x852A
+#define GL_CONSTANT_COLOR1_NV 0x852B
+#define GL_CONSTANT_COLOR_EXT 0x8001
+#define GL_CONSTANT_EXT 0x8576
+#define GL_CONST_EYE_NV 0x86E5
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GL_CONTEXT_PROFILE_MASK 0x9126
+#define GL_CONTINUOUS_AMD 0x9007
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_1D_EXT 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_CONVOLUTION_2D_EXT 0x8011
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_FORMAT_EXT 0x8017
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
+#define GL_CONVOLUTION_HINT_SGIX 0x8316
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_WIDTH_EXT 0x8018
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_10_ATI 0x894B
+#define GL_CON_11_ATI 0x894C
+#define GL_CON_12_ATI 0x894D
+#define GL_CON_13_ATI 0x894E
+#define GL_CON_14_ATI 0x894F
+#define GL_CON_15_ATI 0x8950
+#define GL_CON_16_ATI 0x8951
+#define GL_CON_17_ATI 0x8952
+#define GL_CON_18_ATI 0x8953
+#define GL_CON_19_ATI 0x8954
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_20_ATI 0x8955
+#define GL_CON_21_ATI 0x8956
+#define GL_CON_22_ATI 0x8957
+#define GL_CON_23_ATI 0x8958
+#define GL_CON_24_ATI 0x8959
+#define GL_CON_25_ATI 0x895A
+#define GL_CON_26_ATI 0x895B
+#define GL_CON_27_ATI 0x895C
+#define GL_CON_28_ATI 0x895D
+#define GL_CON_29_ATI 0x895E
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_30_ATI 0x895F
+#define GL_CON_31_ATI 0x8960
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_CON_8_ATI 0x8949
+#define GL_CON_9_ATI 0x894A
+#define GL_COORD_REPLACE 0x8862
+#define GL_COORD_REPLACE_ARB 0x8862
+#define GL_COORD_REPLACE_NV 0x8862
+#define GL_COPY 0x1503
+#define GL_COPY_INVERTED 0x150C
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_COUNTER_RANGE_AMD 0x8BC1
+#define GL_COUNTER_TYPE_AMD 0x8BC0
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5
+#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2
+#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7
+#define GL_COVERAGE_BUFFERS_NV 0x8ED3
+#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000
+#define GL_COVERAGE_COMPONENT4_NV 0x8ED1
+#define GL_COVERAGE_COMPONENT_NV 0x8ED0
+#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6
+#define GL_COVERAGE_SAMPLES_NV 0x80A9
+#define GL_CPU_OPTIMIZED_QCOM 0x8FB1
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_CUBIC_EXT 0x8334
+#define GL_CUBIC_HP 0x815F
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_CULL_FRAGMENT_NV 0x86E7
+#define GL_CULL_MODES_NV 0x86E0
+#define GL_CULL_VERTEX_EXT 0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB
+#define GL_CULL_VERTEX_IBM 103050
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+#define GL_CURRENT_ATTRIB_NV 0x8626
+#define GL_CURRENT_BINORMAL_EXT 0x843C
+#define GL_CURRENT_BIT 0x00000001
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_FOG_COORD 0x8453
+#define GL_CURRENT_FOG_COORDINATE 0x8453
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
+#define GL_CURRENT_MATRIX_NV 0x8641
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
+#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
+#define GL_CURRENT_PALETTE_MATRIX_OES 0x8843
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_CURRENT_QUERY 0x8865
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_CURRENT_QUERY_EXT 0x8865
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_SECONDARY_COLOR 0x8459
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_CURRENT_TANGENT_EXT 0x843B
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_CURRENT_TIME_NV 0x8E28
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_CURRENT_VERTEX_EXT 0x87E2
+#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
+#define GL_CURRENT_WEIGHT_ARB 0x86A8
+#define GL_CW 0x0900
+#define GL_DATA_BUFFER_AMD 0x9151
+#define GL_DEBUG_ASSERT_MESA 0x875B
+#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B
+#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A
+#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
+#define GL_DEBUG_LOGGED_MESSAGES 0x9145
+#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145
+#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
+#define GL_DEBUG_OBJECT_MESA 0x8759
+#define GL_DEBUG_OUTPUT 0x92E0
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
+#define GL_DEBUG_PRINT_MESA 0x875A
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146
+#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148
+#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#define GL_DEBUG_SOURCE_API 0x8246
+#define GL_DEBUG_SOURCE_API_ARB 0x8246
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
+#define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
+#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
+#define GL_DECAL 0x2101
+#define GL_DECODE_EXT 0x8A49
+#define GL_DECR 0x1E03
+#define GL_DECR_WRAP 0x8508
+#define GL_DECR_WRAP_EXT 0x8508
+#define GL_DECR_WRAP_OES 0x8508
+#define GL_DEFORMATIONS_MASK_SGIX 0x8196
+#define GL_DELETE_STATUS 0x8B80
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DEPTH 0x1801
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_DEPTH24_STENCIL8_EXT 0x88F0
+#define GL_DEPTH24_STENCIL8_OES 0x88F0
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_DEPTH32F_STENCIL8_NV 0x8DAC
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
+#define GL_DEPTH_ATTACHMENT_OES 0x8D00
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_DEPTH_BITS 0x0D56
+#define GL_DEPTH_BOUNDS_EXT 0x8891
+#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF
+#define GL_DEPTH_CLAMP 0x864F
+#define GL_DEPTH_CLAMP_FAR_AMD 0x901F
+#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E
+#define GL_DEPTH_CLAMP_NV 0x864F
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_COMPONENT 0x1902
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT16_ARB 0x81A5
+#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C
+#define GL_DEPTH_COMPONENT16_OES 0x81A5
+#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT24_ARB 0x81A6
+#define GL_DEPTH_COMPONENT24_OES 0x81A6
+#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH_COMPONENT32F_NV 0x8DAB
+#define GL_DEPTH_COMPONENT32_ARB 0x81A7
+#define GL_DEPTH_COMPONENT32_OES 0x81A7
+#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
+#define GL_DEPTH_COMPONENTS 0x8284
+#define GL_DEPTH_EXT 0x1801
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311
+#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312
+#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_RENDERABLE 0x8287
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_DEPTH_STENCIL_EXT 0x84F9
+#define GL_DEPTH_STENCIL_MESA 0x8750
+#define GL_DEPTH_STENCIL_NV 0x84F9
+#define GL_DEPTH_STENCIL_OES 0x84F9
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
+#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_TEXTURE_MODE 0x884B
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B
+#define GL_DIFFUSE 0x1201
+#define GL_DISCARD_ATI 0x8763
+#define GL_DISCARD_NV 0x8530
+#define GL_DISCRETE_AMD 0x9006
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_DISPLAY_LIST 0x82E7
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+#define GL_DISTANCE_ATTENUATION_SGIS 0x8129
+#define GL_DITHER 0x0BD0
+#define GL_DOMAIN 0x0A02
+#define GL_DONT_CARE 0x1100
+#define GL_DOT2_ADD_ATI 0x896C
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+#define GL_DOT3_RGBA_ARB 0x86AF
+#define GL_DOT3_RGBA_EXT 0x8741
+#define GL_DOT3_RGBA_IMG 0x86AF
+#define GL_DOT3_RGB_ARB 0x86AE
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT4_ATI 0x8967
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_NV 0x86EC
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_DOUBLE 0x140A
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_DOUBLE_EXT 0x140A
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT2_EXT 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT3_EXT 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_MAT4_EXT 0x8F48
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC2_EXT 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC3_EXT 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+#define GL_DOUBLE_VEC4_EXT 0x8FFE
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER0_ATI 0x8825
+#define GL_DRAW_BUFFER0_NV 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER10_ARB 0x882F
+#define GL_DRAW_BUFFER10_ATI 0x882F
+#define GL_DRAW_BUFFER10_NV 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER11_ATI 0x8830
+#define GL_DRAW_BUFFER11_NV 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER12_ATI 0x8831
+#define GL_DRAW_BUFFER12_NV 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER13_ATI 0x8832
+#define GL_DRAW_BUFFER13_NV 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER14_ATI 0x8833
+#define GL_DRAW_BUFFER14_NV 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_DRAW_BUFFER15_ARB 0x8834
+#define GL_DRAW_BUFFER15_ATI 0x8834
+#define GL_DRAW_BUFFER15_NV 0x8834
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER1_ATI 0x8826
+#define GL_DRAW_BUFFER1_NV 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER2_ATI 0x8827
+#define GL_DRAW_BUFFER2_NV 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER3_ATI 0x8828
+#define GL_DRAW_BUFFER3_NV 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER4_ATI 0x8829
+#define GL_DRAW_BUFFER4_NV 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER5_ARB 0x882A
+#define GL_DRAW_BUFFER5_ATI 0x882A
+#define GL_DRAW_BUFFER5_NV 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER6_ARB 0x882B
+#define GL_DRAW_BUFFER6_ATI 0x882B
+#define GL_DRAW_BUFFER6_NV 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER7_ARB 0x882C
+#define GL_DRAW_BUFFER7_ATI 0x882C
+#define GL_DRAW_BUFFER7_NV 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER8_ARB 0x882D
+#define GL_DRAW_BUFFER8_ATI 0x882D
+#define GL_DRAW_BUFFER8_NV 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER9_ARB 0x882E
+#define GL_DRAW_BUFFER9_ATI 0x882E
+#define GL_DRAW_BUFFER9_NV 0x882E
+#define GL_DRAW_BUFFER_EXT 0x0C01
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
+#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42
+#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40
+#define GL_DRAW_PIXELS_APPLE 0x8A0A
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_DSDT_NV 0x86F5
+#define GL_DST_ALPHA 0x0304
+#define GL_DST_COLOR 0x0306
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_BIAS_NV 0x8717
+#define GL_DT_SCALE_NV 0x8711
+#define GL_DU8DV8_ATI 0x877A
+#define GL_DUAL_ALPHA12_SGIS 0x8112
+#define GL_DUAL_ALPHA16_SGIS 0x8113
+#define GL_DUAL_ALPHA4_SGIS 0x8110
+#define GL_DUAL_ALPHA8_SGIS 0x8111
+#define GL_DUAL_INTENSITY12_SGIS 0x811A
+#define GL_DUAL_INTENSITY16_SGIS 0x811B
+#define GL_DUAL_INTENSITY4_SGIS 0x8118
+#define GL_DUAL_INTENSITY8_SGIS 0x8119
+#define GL_DUAL_LUMINANCE12_SGIS 0x8116
+#define GL_DUAL_LUMINANCE16_SGIS 0x8117
+#define GL_DUAL_LUMINANCE4_SGIS 0x8114
+#define GL_DUAL_LUMINANCE8_SGIS 0x8115
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D
+#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124
+#define GL_DUDV_ATI 0x8779
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4
+#define GL_DYNAMIC_ATI 0x8761
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_DYNAMIC_COPY_ARB 0x88EA
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_DRAW_ARB 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_READ_ARB 0x88E9
+#define GL_EDGEFLAG_BIT_PGI 0x00040000
+#define GL_EDGE_FLAG 0x0B43
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29
+#define GL_ELEMENT_ARRAY_APPLE 0x8A0C
+#define GL_ELEMENT_ARRAY_ATI 0x8768
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33
+#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E
+#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
+#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D
+#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
+#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F
+#define GL_EMBOSS_CONSTANT_NV 0x855E
+#define GL_EMBOSS_LIGHT_NV 0x855D
+#define GL_EMBOSS_MAP_NV 0x855F
+#define GL_EMISSION 0x1600
+#define GL_ENABLE_BIT 0x00002000
+#define GL_EQUAL 0x0202
+#define GL_EQUIV 0x1509
+#define GL_ETC1_RGB8_OES 0x8D64
+#define GL_EVAL_2D_NV 0x86C0
+#define GL_EVAL_BIT 0x00010000
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
+#define GL_EVAL_VERTEX_ATRRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATRRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATRRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATRRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATRRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATRRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATRRIB15_NV 0x86D5
+#define GL_EVAL_VERTEX_ATRRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATRRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATRRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATRRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATRRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATRRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATRRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATRRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATRRIB9_NV 0x86CF
+#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
+#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
+#define GL_EXP 0x0800
+#define GL_EXP2 0x0801
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXTENSIONS 0x1F03
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160
+#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2
+#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0
+#define GL_EYE_LINEAR 0x2400
+#define GL_EYE_LINE_SGIS 0x81F6
+#define GL_EYE_PLANE 0x2502
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+#define GL_EYE_POINT_SGIS 0x81F4
+#define GL_EYE_RADIAL_NV 0x855B
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_FACTOR_ALPHA_MODULATE_IMG 0x8C07
+#define GL_FACTOR_MAX_AMD 0x901D
+#define GL_FACTOR_MIN_AMD 0x901C
+#define GL_FAILURE_NV 0x9030
+#define GL_FALSE 0
+#define GL_FASTEST 0x1101
+#define GL_FEEDBACK 0x1C01
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+#define GL_FENCE_APPLE 0x8A0B
+#define GL_FENCE_CONDITION_NV 0x84F4
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FIELDS_NV 0x8E27
+#define GL_FIELD_LOWER_NV 0x9023
+#define GL_FIELD_UPPER_NV 0x9022
+#define GL_FILE_NAME_NV 0x9074
+#define GL_FILL 0x1B02
+#define GL_FILTER 0x829A
+#define GL_FILTER4_SGIS 0x8146
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
+#define GL_FIXED 0x140C
+#define GL_FIXED_OES 0x140C
+#define GL_FIXED_ONLY 0x891D
+#define GL_FIXED_ONLY_ARB 0x891D
+#define GL_FLAT 0x1D00
+#define GL_FLOAT 0x1406
+#define GL_FLOAT16_NV 0x8FF8
+#define GL_FLOAT16_VEC2_NV 0x8FF9
+#define GL_FLOAT16_VEC3_NV 0x8FFA
+#define GL_FLOAT16_VEC4_NV 0x8FFB
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT2_ARB 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT3_ARB 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_FLOAT_MAT4_ARB 0x8B5C
+#define GL_FLOAT_R16_NV 0x8884
+#define GL_FLOAT_R32_NV 0x8885
+#define GL_FLOAT_RG16_NV 0x8886
+#define GL_FLOAT_RG32_NV 0x8887
+#define GL_FLOAT_RGB16_NV 0x8888
+#define GL_FLOAT_RGB32_NV 0x8889
+#define GL_FLOAT_RGBA16_NV 0x888A
+#define GL_FLOAT_RGBA32_NV 0x888B
+#define GL_FLOAT_RGBA_MODE_NV 0x888E
+#define GL_FLOAT_RGBA_NV 0x8883
+#define GL_FLOAT_RGB_NV 0x8882
+#define GL_FLOAT_RG_NV 0x8881
+#define GL_FLOAT_R_NV 0x8880
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC2_ARB 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC3_ARB 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_FLOAT_VEC4_ARB 0x8B52
+#define GL_FOG 0x0B60
+#define GL_FOG_BIT 0x00000080
+#define GL_FOG_COLOR 0x0B66
+#define GL_FOG_COORD 0x8451
+#define GL_FOG_COORDINATE 0x8451
+#define GL_FOG_COORDINATE_ARRAY 0x8457
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FOG_COORDINATE_SOURCE 0x8450
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORD_ARRAY 0x8457
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D
+#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32
+#define GL_FOG_COORD_ARRAY_POINTER 0x8456
+#define GL_FOG_COORD_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORD_ARRAY_TYPE 0x8454
+#define GL_FOG_COORD_SRC 0x8450
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_DISTANCE_MODE_NV 0x855A
+#define GL_FOG_END 0x0B64
+#define GL_FOG_FACTOR_TO_ALPHA_SGIX 0x836F
+#define GL_FOG_FUNC_POINTS_SGIS 0x812B
+#define GL_FOG_FUNC_SGIS 0x812A
+#define GL_FOG_GEN_MODE_NV 0x855A
+#define GL_FOG_HINT 0x0C54
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_OFFSET_SGIX 0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
+#define GL_FOG_SCALE_SGIX 0x81FC
+#define GL_FOG_SCALE_VALUE_SGIX 0x81FD
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+#define GL_FOG_START 0x0B63
+#define GL_FONT_ASCENDER_NV 0x00200000
+#define GL_FONT_DESCENDER_NV 0x00400000
+#define GL_FONT_HAS_KERNING_NV 0x10000000
+#define GL_FONT_HEIGHT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_NV 0x02000000
+#define GL_FONT_MAX_ADVANCE_WIDTH_NV 0x01000000
+#define GL_FONT_UNDERLINE_POSITION_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_NV 0x08000000
+#define GL_FONT_UNITS_PER_EM_NV 0x00100000
+#define GL_FONT_X_MAX_BOUNDS_NV 0x00040000
+#define GL_FONT_X_MIN_BOUNDS_NV 0x00010000
+#define GL_FONT_Y_MAX_BOUNDS_NV 0x00080000
+#define GL_FONT_Y_MIN_BOUNDS_NV 0x00020000
+#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
+#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
+#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX 0x8314
+#define GL_FRAGMENTS_INSTRUMENT_MAX_SGIX 0x8315
+#define GL_FRAGMENTS_INSTRUMENT_SGIX 0x8313
+#define GL_FRAGMENT_ALPHA_MODULATE_IMG 0x8C08
+#define GL_FRAGMENT_COLOR_EXT 0x834C
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401
+#define GL_FRAGMENT_DEPTH 0x8452
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_FRAGMENT_LIGHT0_SGIX 0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX 0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX 0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX 0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX 0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX 0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX 0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX 0x8413
+#define GL_FRAGMENT_LIGHTING_SGIX 0x8400
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_MATERIAL_EXT 0x8349
+#define GL_FRAGMENT_NORMAL_EXT 0x834A
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873
+#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8BB3
+#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8BB2
+#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA 0x8BB1
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
+#define GL_FRAGMENT_PROGRAM_NV 0x8870
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
+#define GL_FRAGMENT_PROGRAM_POSITION_MESA 0x8BB0
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_FRAGMENT_SHADER_ARB 0x8B30
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
+#define GL_FRAGMENT_SUBROUTINE 0x92EC
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2
+#define GL_FRAGMENT_TEXTURE 0x829F
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_FRAMEBUFFER_BINDING_ANGLE 0x8CA6
+#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_FRAMEBUFFER_BINDING_OES 0x8CA6
+#define GL_FRAMEBUFFER_BLEND 0x828B
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
+#define GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_EXT 0x8D40
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES 0x8CDC
+#define GL_FRAMEBUFFER_OES 0x8D40
+#define GL_FRAMEBUFFER_RENDERABLE 0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
+#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
+#define GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD
+#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C
+#define GL_FRAMEZOOM_SGIX 0x818B
+#define GL_FRAME_NV 0x8E26
+#define GL_FRONT 0x0404
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_FRONT_FACE 0x0B46
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_FULL_RANGE_EXT 0x87E1
+#define GL_FULL_STIPPLE_HINT_PGI 0x1A219
+#define GL_FULL_SUPPORT 0x82B7
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_ADD_EXT 0x8006
+#define GL_FUNC_ADD_OES 0x8006
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
+#define GL_FUNC_REVERSE_SUBTRACT_OES 0x800B
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_FUNC_SUBTRACT_EXT 0x800A
+#define GL_FUNC_SUBTRACT_OES 0x800A
+#define GL_GCCSO_SHADER_BINARY_FJ 0x9260
+#define GL_GENERATE_MIPMAP 0x8191
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERIC_ATTRIB_NV 0x8C7D
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002
+#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB
+#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC
+#define GL_GEOMETRY_PROGRAM_NV 0x8C26
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_SHADER_ARB 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_GEOMETRY_SHADER_EXT 0x8DD9
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_GEOMETRY_SUBROUTINE 0x92EB
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1
+#define GL_GEOMETRY_TEXTURE 0x829E
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA
+#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA
+#define GL_GEQUAL 0x0206
+#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292
+#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
+#define GL_GLOBAL_ALPHA_SUN 0x81D9
+#define GL_GLYPH_HAS_KERNING_NV 0x100
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_GPU_ADDRESS_NV 0x8F34
+#define GL_GPU_OPTIMIZED_QCOM 0x8FB2
+#define GL_GREATER 0x0204
+#define GL_GREEN 0x1904
+#define GL_GREEN_BIAS 0x0D19
+#define GL_GREEN_BITS 0x0D53
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_GREEN_INTEGER 0x8D95
+#define GL_GREEN_INTEGER_EXT 0x8D95
+#define GL_GREEN_MAX_CLAMP_INGR 0x8565
+#define GL_GREEN_MIN_CLAMP_INGR 0x8561
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253
+#define GL_HALF_APPLE 0x140B
+#define GL_HALF_BIAS_NEGATE_NV 0x853B
+#define GL_HALF_BIAS_NORMAL_NV 0x853A
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_HALF_FLOAT 0x140B
+#define GL_HALF_FLOAT_ARB 0x140B
+#define GL_HALF_FLOAT_NV 0x140B
+#define GL_HALF_FLOAT_OES 0x8D61
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_HIGH_INT 0x8DF5
+#define GL_HILO16_NV 0x86F8
+#define GL_HILO8_NV 0x885E
+#define GL_HILO_NV 0x86F4
+#define GL_HINT_BIT 0x00008000
+#define GL_HISTOGRAM 0x8024
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
+#define GL_HISTOGRAM_EXT 0x8024
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_FORMAT_EXT 0x8027
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_HISTOGRAM_SINK_EXT 0x802D
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_WIDTH_EXT 0x8026
+#define GL_HI_BIAS_NV 0x8714
+#define GL_HI_SCALE_NV 0x870E
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_IDENTITY_NV 0x862A
+#define GL_IGNORE_BORDER_HP 0x8150
+#define GL_IMAGE_1D 0x904C
+#define GL_IMAGE_1D_ARRAY 0x9052
+#define GL_IMAGE_1D_ARRAY_EXT 0x9052
+#define GL_IMAGE_1D_EXT 0x904C
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_IMAGE_2D_ARRAY_EXT 0x9053
+#define GL_IMAGE_2D_EXT 0x904D
+#define GL_IMAGE_2D_MULTISAMPLE 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056
+#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055
+#define GL_IMAGE_2D_RECT 0x904F
+#define GL_IMAGE_2D_RECT_EXT 0x904F
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_3D_EXT 0x904E
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_IMAGE_BUFFER_EXT 0x9051
+#define GL_IMAGE_CLASS_10_10_10_2 0x82C3
+#define GL_IMAGE_CLASS_11_11_10 0x82C2
+#define GL_IMAGE_CLASS_1_X_16 0x82BE
+#define GL_IMAGE_CLASS_1_X_32 0x82BB
+#define GL_IMAGE_CLASS_1_X_8 0x82C1
+#define GL_IMAGE_CLASS_2_X_16 0x82BD
+#define GL_IMAGE_CLASS_2_X_32 0x82BA
+#define GL_IMAGE_CLASS_2_X_8 0x82C0
+#define GL_IMAGE_CLASS_4_X_16 0x82BC
+#define GL_IMAGE_CLASS_4_X_32 0x82B9
+#define GL_IMAGE_CLASS_4_X_8 0x82BF
+#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_CUBE_EXT 0x9050
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054
+#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_MAG_FILTER_HP 0x815C
+#define GL_IMAGE_MIN_FILTER_HP 0x815D
+#define GL_IMAGE_PIXEL_FORMAT 0x82A9
+#define GL_IMAGE_PIXEL_TYPE 0x82AA
+#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B
+#define GL_IMAGE_SCALE_X_HP 0x8155
+#define GL_IMAGE_SCALE_Y_HP 0x8156
+#define GL_IMAGE_TEXEL_SIZE 0x82A7
+#define GL_IMAGE_TRANSFORM_2D_HP 0x8161
+#define GL_IMAGE_TRANSLATE_X_HP 0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP 0x8158
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_INCR 0x1E02
+#define GL_INCR_WRAP 0x8507
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_INCR_WRAP_OES 0x8507
+#define GL_INDEX 0x8222
+#define GL_INDEX_ARRAY 0x8077
+#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24
+#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E
+#define GL_INDEX_ARRAY_LIST_IBM 103073
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_BITS 0x0D51
+#define GL_INDEX_BIT_PGI 0x00080000
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_INDEX_MATERIAL_EXT 0x81B8
+#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA
+#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9
+#define GL_INDEX_MODE 0x0C30
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_TEST_EXT 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT 0x81B6
+#define GL_INDEX_TEST_REF_EXT 0x81B7
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181
+#define GL_INT 0x1404
+#define GL_INT16_NV 0x8FE4
+#define GL_INT16_VEC2_NV 0x8FE5
+#define GL_INT16_VEC3_NV 0x8FE6
+#define GL_INT16_VEC4_NV 0x8FE7
+#define GL_INT64_NV 0x140E
+#define GL_INT64_VEC2_NV 0x8FE9
+#define GL_INT64_VEC3_NV 0x8FEA
+#define GL_INT64_VEC4_NV 0x8FEB
+#define GL_INT8_NV 0x8FE0
+#define GL_INT8_VEC2_NV 0x8FE1
+#define GL_INT8_VEC3_NV 0x8FE2
+#define GL_INT8_VEC4_NV 0x8FE3
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY12_EXT 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_INTENSITY16F_ARB 0x881D
+#define GL_INTENSITY16I_EXT 0x8D8B
+#define GL_INTENSITY16UI_EXT 0x8D79
+#define GL_INTENSITY16_EXT 0x804D
+#define GL_INTENSITY16_SNORM 0x901B
+#define GL_INTENSITY32F_ARB 0x8817
+#define GL_INTENSITY32I_EXT 0x8D85
+#define GL_INTENSITY32UI_EXT 0x8D73
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY4_EXT 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY8I_EXT 0x8D91
+#define GL_INTENSITY8UI_EXT 0x8D7F
+#define GL_INTENSITY8_EXT 0x804B
+#define GL_INTENSITY8_SNORM 0x9017
+#define GL_INTENSITY_EXT 0x8049
+#define GL_INTENSITY_FLOAT16_APPLE 0x881D
+#define GL_INTENSITY_FLOAT16_ATI 0x881D
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_INTENSITY_FLOAT32_ATI 0x8817
+#define GL_INTENSITY_SNORM 0x9013
+#define GL_INTERLACE_OML 0x8980
+#define GL_INTERLACE_READ_INGR 0x8568
+#define GL_INTERLACE_READ_OML 0x8981
+#define GL_INTERLACE_SGIX 0x8094
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C
+#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C
+#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274
+#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B
+#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273
+#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A
+#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275
+#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C
+#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272
+#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279
+#define GL_INTERNALFORMAT_PREFERRED 0x8270
+#define GL_INTERNALFORMAT_RED_SIZE 0x8271
+#define GL_INTERNALFORMAT_RED_TYPE 0x8278
+#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277
+#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276
+#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D
+#define GL_INTERNALFORMAT_SUPPORTED 0x826F
+#define GL_INTERPOLATE 0x8575
+#define GL_INTERPOLATE_ARB 0x8575
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_INT_10_10_10_2_OES 0x8DF7
+#define GL_INT_2_10_10_10_REV 0x8D9F
+#define GL_INT_IMAGE_1D 0x9057
+#define GL_INT_IMAGE_1D_ARRAY 0x905D
+#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D
+#define GL_INT_IMAGE_1D_EXT 0x9057
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E
+#define GL_INT_IMAGE_2D_EXT 0x9058
+#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060
+#define GL_INT_IMAGE_2D_RECT 0x905A
+#define GL_INT_IMAGE_2D_RECT_EXT 0x905A
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_3D_EXT 0x9059
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_INT_IMAGE_BUFFER_EXT 0x905C
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_CUBE_EXT 0x905B
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F
+#define GL_INT_SAMPLER_1D 0x8DC9
+#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE
+#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE
+#define GL_INT_SAMPLER_1D_EXT 0x8DC9
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF
+#define GL_INT_SAMPLER_2D_EXT 0x8DCA
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_INT_SAMPLER_2D_RECT 0x8DCD
+#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_3D_EXT 0x8DCB
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_INT_SAMPLER_BUFFER_AMD 0x9002
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E
+#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC2_ARB 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC3_ARB 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_INT_VEC4_ARB 0x8B55
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#define GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+#define GL_INVALID_OPERATION 0x0502
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVARIANT_DATATYPE_EXT 0x87EB
+#define GL_INVARIANT_EXT 0x87C2
+#define GL_INVARIANT_VALUE_EXT 0x87EA
+#define GL_INVERSE_NV 0x862B
+#define GL_INVERSE_TRANSPOSE_NV 0x862D
+#define GL_INVERT 0x150A
+#define GL_INVERTED_SCREEN_W_REND 0x8491
+#define GL_IR_INSTRUMENT1_SGIX 0x817F
+#define GL_ISOLINES 0x8E7A
+#define GL_IS_PER_PATCH 0x92E7
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_IUI_N3F_V2F_EXT 0x81AF
+#define GL_IUI_N3F_V3F_EXT 0x81B0
+#define GL_IUI_V2F_EXT 0x81AD
+#define GL_IUI_V3F_EXT 0x81AE
+#define GL_KEEP 0x1E00
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027
+#define GL_LAYER_NV 0x8DAA
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_LEFT 0x0406
+#define GL_LEQUAL 0x0203
+#define GL_LERP_ATI 0x8969
+#define GL_LESS 0x0201
+#define GL_LIGHT0 0x4000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_LIGHT_ENV_MODE_SGIX 0x8407
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LINE 0x1B01
+#define GL_LINEAR 0x2601
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F
+#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099
+#define GL_LINEAR_DETAIL_SGIS 0x8097
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF
+#define GL_LINEAR_SHARPEN_SGIS 0x80AD
+#define GL_LINES 0x0001
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINES_ADJACENCY_ARB 0x000A
+#define GL_LINES_ADJACENCY_EXT 0x000A
+#define GL_LINE_BIT 0x00000004
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_QUALITY_HINT_SGIX 0x835B
+#define GL_LINE_RESET_TOKEN 0x0707
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LINE_STRIP 0x0003
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B
+#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
+#define GL_LINE_TOKEN 0x0702
+#define GL_LINE_TO_NV 0x04
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_LINE_WIDTH_RANGE 0x0B22
+#define GL_LINK_STATUS 0x8B82
+#define GL_LIST_BASE 0x0B32
+#define GL_LIST_BIT 0x00020000
+#define GL_LIST_INDEX 0x0B33
+#define GL_LIST_MODE 0x0B30
+#define GL_LIST_PRIORITY_SGIX 0x8182
+#define GL_LOAD 0x0101
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
+#define GL_LOCAL_CONSTANT_EXT 0x87C3
+#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
+#define GL_LOCAL_EXT 0x87C4
+#define GL_LOCATION 0x930E
+#define GL_LOCATION_INDEX 0x930F
+#define GL_LOGIC_OP 0x0BF1
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GL_LOWER_LEFT 0x8CA1
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_LOW_INT 0x8DF3
+#define GL_LO_BIAS_NV 0x8715
+#define GL_LO_SCALE_NV 0x870F
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
+#define GL_LUMINANCE12_EXT 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE16F_ARB 0x881E
+#define GL_LUMINANCE16I_EXT 0x8D8C
+#define GL_LUMINANCE16UI_EXT 0x8D7A
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
+#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A
+#define GL_LUMINANCE16_EXT 0x8042
+#define GL_LUMINANCE16_SNORM 0x9019
+#define GL_LUMINANCE32F_ARB 0x8818
+#define GL_LUMINANCE32I_EXT 0x8D86
+#define GL_LUMINANCE32UI_EXT 0x8D74
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+#define GL_LUMINANCE4_EXT 0x803F
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE8I_EXT 0x8D92
+#define GL_LUMINANCE8UI_EXT 0x8D80
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE8_SNORM 0x9015
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D
+#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B
+#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
+#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87
+#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75
+#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93
+#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D
+#define GL_LUMINANCE_ALPHA_SNORM 0x9012
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881E
+#define GL_LUMINANCE_FLOAT16_ATI 0x881E
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_FLOAT32_ATI 0x8818
+#define GL_LUMINANCE_INTEGER_EXT 0x8D9C
+#define GL_LUMINANCE_SNORM 0x9011
+#define GL_MAD_ATI 0x8968
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MALI_SHADER_BINARY_ARM 0x8F60
+#define GL_MANUAL_GENERATE_MIPMAP 0x8294
+#define GL_MAP1_BINORMAL_EXT 0x8446
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TANGENT_EXT 0x8444
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
+#define GL_MAP2_BINORMAL_EXT 0x8447
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TANGENT_EXT 0x8445
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
+#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_READ_BIT_EXT 0x0001
+#define GL_MAP_STENCIL 0x0D11
+#define GL_MAP_TESSELLATION_NV 0x86C2
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_WRITE_BIT_EXT 0x0002
+#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C
+#define GL_MATRIX0_ARB 0x88C0
+#define GL_MATRIX0_NV 0x8630
+#define GL_MATRIX10_ARB 0x88CA
+#define GL_MATRIX11_ARB 0x88CB
+#define GL_MATRIX12_ARB 0x88CC
+#define GL_MATRIX13_ARB 0x88CD
+#define GL_MATRIX14_ARB 0x88CE
+#define GL_MATRIX15_ARB 0x88CF
+#define GL_MATRIX16_ARB 0x88D0
+#define GL_MATRIX17_ARB 0x88D1
+#define GL_MATRIX18_ARB 0x88D2
+#define GL_MATRIX19_ARB 0x88D3
+#define GL_MATRIX1_ARB 0x88C1
+#define GL_MATRIX1_NV 0x8631
+#define GL_MATRIX20_ARB 0x88D4
+#define GL_MATRIX21_ARB 0x88D5
+#define GL_MATRIX22_ARB 0x88D6
+#define GL_MATRIX23_ARB 0x88D7
+#define GL_MATRIX24_ARB 0x88D8
+#define GL_MATRIX25_ARB 0x88D9
+#define GL_MATRIX26_ARB 0x88DA
+#define GL_MATRIX27_ARB 0x88DB
+#define GL_MATRIX28_ARB 0x88DC
+#define GL_MATRIX29_ARB 0x88DD
+#define GL_MATRIX2_ARB 0x88C2
+#define GL_MATRIX2_NV 0x8632
+#define GL_MATRIX30_ARB 0x88DE
+#define GL_MATRIX31_ARB 0x88DF
+#define GL_MATRIX3_ARB 0x88C3
+#define GL_MATRIX3_NV 0x8633
+#define GL_MATRIX4_ARB 0x88C4
+#define GL_MATRIX4_NV 0x8634
+#define GL_MATRIX5_ARB 0x88C5
+#define GL_MATRIX5_NV 0x8635
+#define GL_MATRIX6_ARB 0x88C6
+#define GL_MATRIX6_NV 0x8636
+#define GL_MATRIX7_ARB 0x88C7
+#define GL_MATRIX7_NV 0x8637
+#define GL_MATRIX8_ARB 0x88C8
+#define GL_MATRIX9_ARB 0x88C9
+#define GL_MATRIX_EXT 0x87C0
+#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
+#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES 0x8B9E
+#define GL_MATRIX_INDEX_ARRAY_OES 0x8844
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+#define GL_MATRIX_INDEX_ARRAY_POINTER_OES 0x8849
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
+#define GL_MATRIX_INDEX_ARRAY_SIZE_OES 0x8846
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES 0x8848
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
+#define GL_MATRIX_INDEX_ARRAY_TYPE_OES 0x8847
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_MATRIX_PALETTE_ARB 0x8840
+#define GL_MATRIX_PALETTE_OES 0x8840
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
+#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
+#define GL_MAT_EMISSION_BIT_PGI 0x00800000
+#define GL_MAT_SHININESS_BIT_PGI 0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
+#define GL_MAX 0x8008
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138
+#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_MAX_CLIP_DISTANCES 0x0D32
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
+#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMBINED_DIMENSIONS 0x8282
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES 0x851C
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
+#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
+#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
+#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197
+#define GL_MAX_DEPTH 0x8280
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_MAX_DRAW_BUFFERS_ATI 0x8824
+#define GL_MAX_DRAW_BUFFERS_NV 0x8824
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_EXT 0x8008
+#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
+#define GL_MAX_HEIGHT 0x827F
+#define GL_MAX_IMAGE_SAMPLES 0x906D
+#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_IMAGE_UNITS_EXT 0x8F38
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+#define GL_MAX_LABEL_LENGTH 0x82E8
+#define GL_MAX_LAYERS 0x8281
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
+#define GL_MAX_PALETTE_MATRICES_OES 0x8842
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
+#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
+#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45
+#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
+#define GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_MAX_SAMPLES_ANGLE 0x8D57
+#define GL_MAX_SAMPLES_EXT 0x8D57
+#define GL_MAX_SAMPLES_IMG 0x9135
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A
+#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+#define GL_MAX_SUBROUTINES 0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
+#define GL_MAX_TEXTURE_COORDS 0x8871
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_COORDS_NV 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+#define GL_MAX_TRACK_MATRICES_NV 0x862F
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B
+#define GL_MAX_VARYING_FLOATS 0x8B4B
+#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
+#define GL_MAX_VERTEX_HINT_PGI 0x1A22D
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
+#define GL_MAX_VERTEX_UNITS_OES 0x86A4
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
+#define GL_MAX_VIEWPORTS 0x825B
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_MAX_WIDTH 0x827E
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_MIN 0x8007
+#define GL_MINMAX 0x802E
+#define GL_MINMAX_EXT 0x802E
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_FORMAT_EXT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_MINMAX_SINK_EXT 0x8030
+#define GL_MINOR_VERSION 0x821C
+#define GL_MIN_EXT 0x8007
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B
+#define GL_MIN_LOD_WARNING_AMD 0x919C
+#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37
+#define GL_MIN_SPARSE_LEVEL_AMD 0x919B
+#define GL_MIPMAP 0x8293
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#define GL_MIRRORED_REPEAT_IBM 0x8370
+#define GL_MIRRORED_REPEAT_OES 0x8370
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_EXT 0x8742
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_MODELVIEW 0x1700
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW10_ARB 0x872A
+#define GL_MODELVIEW11_ARB 0x872B
+#define GL_MODELVIEW12_ARB 0x872C
+#define GL_MODELVIEW13_ARB 0x872D
+#define GL_MODELVIEW14_ARB 0x872E
+#define GL_MODELVIEW15_ARB 0x872F
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW1_ARB 0x850A
+#define GL_MODELVIEW1_EXT 0x850A
+#define GL_MODELVIEW1_MATRIX_EXT 0x8506
+#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873A
+#define GL_MODELVIEW27_ARB 0x873B
+#define GL_MODELVIEW28_ARB 0x873C
+#define GL_MODELVIEW29_ARB 0x873D
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW30_ARB 0x873E
+#define GL_MODELVIEW31_ARB 0x873F
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_MODELVIEW_MATRIX1_EXT 0x8506
+#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES 0x898D
+#define GL_MODELVIEW_PROJECTION_NV 0x8629
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_MODULATE 0x2100
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_COLOR_IMG 0x8C04
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_MOVE_TO_NV 0x02
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOV_ATI 0x8961
+#define GL_MULT 0x0103
+#define GL_MULTISAMPLE 0x809D
+#define GL_MULTISAMPLE_3DFX 0x86B2
+#define GL_MULTISAMPLE_ARB 0x809D
+#define GL_MULTISAMPLE_BIT 0x20000000
+#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
+#define GL_MULTISAMPLE_SGIS 0x809D
+#define GL_MULTIVIEW_EXT 0x90F1
+#define GL_MULTI_HULLS_NV 0x908C
+#define GL_MUL_ATI 0x8964
+#define GL_MVP_MATRIX_EXT 0x87E3
+#define GL_N3F_V3F 0x2A25
+#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB 0x8DEA
+#define GL_NAME_LENGTH 0x92F9
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_NAND 0x150E
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202
+#define GL_NEAREST 0x2600
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_NEGATIVE_ONE_EXT 0x87DF
+#define GL_NEGATIVE_W_EXT 0x87DC
+#define GL_NEGATIVE_X_EXT 0x87D9
+#define GL_NEGATIVE_Y_EXT 0x87DA
+#define GL_NEGATIVE_Z_EXT 0x87DB
+#define GL_NEVER 0x0200
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025
+#define GL_NICEST 0x1102
+#define GL_NONE 0
+#define GL_NOOP 0x1505
+#define GL_NOR 0x1508
+#define GL_NORMALIZE 0x0BA1
+#define GL_NORMALIZED_RANGE_EXT 0x87E0
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22
+#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C
+#define GL_NORMAL_ARRAY_LIST_IBM 103071
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_BIT_PGI 0x08000000
+#define GL_NORMAL_MAP 0x8511
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_NORMAL_MAP_EXT 0x8511
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_NORMAL_MAP_OES 0x8511
+#define GL_NOTEQUAL 0x0205
+#define GL_NO_ERROR 0
+#define GL_NO_RESET_NOTIFICATION_ARB 0x8261
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_NUM_FILL_STREAMS_NV 0x8E29
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
+#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
+#define GL_NUM_PASSES_ATI 0x8970
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
+#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_OBJECT_LINE_SGIS 0x81F7
+#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
+#define GL_OBJECT_PLANE 0x2501
+#define GL_OBJECT_POINT_SGIS 0x81F5
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
+#define GL_OBJECT_TYPE 0x9112
+#define GL_OBJECT_TYPE_APPLE 0x9112
+#define GL_OBJECT_TYPE_ARB 0x8B4E
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
+#define GL_OCCLUSION_TEST_HP 0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
+#define GL_OFFSET 0x92FC
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
+#define GL_ONE 1
+#define GL_ONE_EXT 0x87DE
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
+#define GL_ONE_MINUS_SRC1_COLOR 0x88FA
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND0_ALPHA_ARB 0x8598
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND0_RGB_ARB 0x8590
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND1_ALPHA_ARB 0x8599
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND1_RGB_ARB 0x8591
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_OPERAND2_ALPHA_ARB 0x859A
+#define GL_OPERAND2_ALPHA_EXT 0x859A
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND2_RGB_ARB 0x8592
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND3_ALPHA_NV 0x859B
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OP_ADD_EXT 0x8787
+#define GL_OP_CLAMP_EXT 0x878E
+#define GL_OP_CROSS_PRODUCT_EXT 0x8797
+#define GL_OP_DOT3_EXT 0x8784
+#define GL_OP_DOT4_EXT 0x8785
+#define GL_OP_EXP_BASE_2_EXT 0x8791
+#define GL_OP_FLOOR_EXT 0x878F
+#define GL_OP_FRAC_EXT 0x8789
+#define GL_OP_INDEX_EXT 0x8782
+#define GL_OP_LOG_BASE_2_EXT 0x8792
+#define GL_OP_MADD_EXT 0x8788
+#define GL_OP_MAX_EXT 0x878A
+#define GL_OP_MIN_EXT 0x878B
+#define GL_OP_MOV_EXT 0x8799
+#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
+#define GL_OP_MUL_EXT 0x8786
+#define GL_OP_NEGATE_EXT 0x8783
+#define GL_OP_POWER_EXT 0x8793
+#define GL_OP_RECIP_EXT 0x8794
+#define GL_OP_RECIP_SQRT_EXT 0x8795
+#define GL_OP_ROUND_EXT 0x8790
+#define GL_OP_SET_GE_EXT 0x878C
+#define GL_OP_SET_LT_EXT 0x878D
+#define GL_OP_SUB_EXT 0x8796
+#define GL_OR 0x1507
+#define GL_ORDER 0x0A01
+#define GL_OR_INVERTED 0x150D
+#define GL_OR_REVERSE 0x150B
+#define GL_OUTPUT_COLOR0_EXT 0x879B
+#define GL_OUTPUT_COLOR1_EXT 0x879C
+#define GL_OUTPUT_FOG_EXT 0x87BD
+#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
+#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
+#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
+#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
+#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
+#define GL_OUTPUT_VERTEX_EXT 0x879A
+#define GL_OUT_OF_MEMORY 0x0505
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_PACK_CMYK_HINT_EXT 0x800E
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C
+#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B
+#define GL_PACK_COMPRESSED_SIZE_SGIX 0x831C
+#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
+#define GL_PACK_INVERT_MESA 0x8758
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B
+#define GL_PACK_RESAMPLE_OML 0x8984
+#define GL_PACK_RESAMPLE_SGIX 0x842C
+#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4
+#define GL_PACK_ROW_BYTES_APPLE 0x8A15
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_SKIP_IMAGES_EXT 0x806B
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130
+#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_PALETTE4_R5_G6_B5_OES 0x8B92
+#define GL_PALETTE4_RGB5_A1_OES 0x8B94
+#define GL_PALETTE4_RGB8_OES 0x8B90
+#define GL_PALETTE4_RGBA4_OES 0x8B93
+#define GL_PALETTE4_RGBA8_OES 0x8B91
+#define GL_PALETTE8_R5_G6_B5_OES 0x8B97
+#define GL_PALETTE8_RGB5_A1_OES 0x8B99
+#define GL_PALETTE8_RGB8_OES 0x8B95
+#define GL_PALETTE8_RGBA4_OES 0x8B98
+#define GL_PALETTE8_RGBA8_OES 0x8B96
+#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
+#define GL_PARTIAL_SUCCESS_NV 0x902E
+#define GL_PASS_THROUGH_NV 0x86E6
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_PATCHES 0x000E
+#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FOG_GEN_MODE_NV 0x90AC
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_PATH_SAMPLE_QUALITY_NV 0x9085
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_PATH_STROKE_BOUND_NV 0x9086
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_PATH_STROKE_OVERSAMPLE_COUNT_NV 0x9087
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PERCENTAGE_AMD 0x8BC3
+#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0
+#define GL_PERFMON_RESULT_AMD 0x8BC6
+#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5
+#define GL_PERFORMANCE_MONITOR_AMD 0x9152
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_PERTURB_EXT 0x85AE
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+#define GL_PHONG_HINT_WIN 0x80EB
+#define GL_PHONG_WIN 0x80EA
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080
+#define GL_PIXEL_COUNTER_BITS_NV 0x8864
+#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
+#define GL_PIXEL_COUNT_NV 0x8866
+#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356
+#define GL_PIXEL_MAG_FILTER_EXT 0x8331
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MIN_FILTER_EXT 0x8332
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
+#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2
+#define GL_PIXEL_TEXTURE_SGIS 0x8353
+#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189
+#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A
+#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188
+#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187
+#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B
+#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184
+#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186
+#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185
+#define GL_PIXEL_TEX_GEN_SGIX 0x8139
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142
+#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141
+#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140
+#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
+#define GL_PN_TRIANGLES_ATI 0x87F0
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_POINT 0x1B00
+#define GL_POINTS 0x0000
+#define GL_POINT_BIT 0x00000002
+#define GL_POINT_DISTANCE_ATTENUATION 0x8129
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F
+#define GL_POINT_SIZE_ARRAY_OES 0x8B9C
+#define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C
+#define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B
+#define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_POINT_SIZE_MAX 0x8127
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_SIZE_MAX_SGIS 0x8127
+#define GL_POINT_SIZE_MIN 0x8126
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MIN_SGIS 0x8126
+#define GL_POINT_SIZE_RANGE 0x0B12
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_POINT_SPRITE 0x8861
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
+#define GL_POINT_SPRITE_NV 0x8861
+#define GL_POINT_SPRITE_R_MODE_NV 0x8863
+#define GL_POINT_TOKEN 0x0701
+#define GL_POLYGON 0x0009
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
+#define GL_POLYGON_OFFSET_EXT 0x8037
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
+#define GL_POLYGON_OFFSET_FILL 0x8037
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_POSITION 0x1203
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8
+#define GL_PRESENT_DURATION_NV 0x8E2B
+#define GL_PRESENT_TIME_NV 0x8E2A
+#define GL_PRESERVE_ATI 0x8762
+#define GL_PREVIOUS 0x8578
+#define GL_PREVIOUS_ARB 0x8578
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PRIMARY_COLOR_ARB 0x8577
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
+#define GL_PRIMITIVES_GENERATED_NV 0x8C87
+#define GL_PRIMITIVE_ID_NV 0x8C7C
+#define GL_PRIMITIVE_RESTART 0x8F9D
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
+#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
+#define GL_PRIMITIVE_RESTART_NV 0x8558
+#define GL_PROGRAM 0x82E2
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
+#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_PROGRAM_ERROR_STRING_NV 0x8874
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_LENGTH_NV 0x8627
+#define GL_PROGRAM_MATRIX_EXT 0x8E2D
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_OBJECT_ARB 0x8B40
+#define GL_PROGRAM_OBJECT_EXT 0x8B40
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
+#define GL_PROGRAM_PARAMETER_NV 0x8644
+#define GL_PROGRAM_PIPELINE 0x82E4
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
+#define GL_PROGRAM_POINT_SIZE 0x8642
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_PROGRAM_POINT_SIZE_EXT 0x8642
+#define GL_PROGRAM_RESIDENT_NV 0x8647
+#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_PROGRAM_SEPARABLE_EXT 0x8258
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_PROGRAM_STRING_NV 0x8628
+#define GL_PROGRAM_TARGET_NV 0x8646
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_PROJECTION 0x1701
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898E
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_PROJECTIVE_2D_NV 0x9093
+#define GL_PROJECTIVE_3D_NV 0x9095
+#define GL_PROVOKING_VERTEX 0x8E4F
+#define GL_PROVOKING_VERTEX_EXT 0x8E4F
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_PROXY_HISTOGRAM_EXT 0x8025
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19
+#define GL_PROXY_TEXTURE_1D_EXT 0x8063
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B
+#define GL_PROXY_TEXTURE_2D_EXT 0x8064
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_PROXY_TEXTURE_4D_SGIS 0x8135
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
+#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
+#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
+#define GL_PURGEABLE_APPLE 0x8A1D
+#define GL_Q 0x2003
+#define GL_QUADRATIC_ATTENUATION 0x1209
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_QUADS 0x0007
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C
+#define GL_QUAD_ALPHA4_SGIS 0x811E
+#define GL_QUAD_ALPHA8_SGIS 0x811F
+#define GL_QUAD_INTENSITY4_SGIS 0x8122
+#define GL_QUAD_INTENSITY8_SGIS 0x8123
+#define GL_QUAD_LUMINANCE4_SGIS 0x8120
+#define GL_QUAD_LUMINANCE8_SGIS 0x8121
+#define GL_QUAD_MESH_SUN 0x8614
+#define GL_QUAD_STRIP 0x0008
+#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_QUERY 0x82E3
+#define GL_QUERY_BUFFER_AMD 0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD 0x9193
+#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+#define GL_QUERY_BY_REGION_WAIT 0x8E15
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_QUERY_NO_WAIT 0x8E14
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_OBJECT_AMD 0x9153
+#define GL_QUERY_OBJECT_EXT 0x9153
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867
+#define GL_QUERY_RESULT_EXT 0x8866
+#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194
+#define GL_QUERY_WAIT 0x8E13
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_R 0x2002
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_R11F_G11F_B10F_EXT 0x8C3A
+#define GL_R16 0x822A
+#define GL_R16F 0x822D
+#define GL_R16F_EXT 0x822D
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R16_SNORM 0x8F98
+#define GL_R1UI_C3F_V3F_SUN 0x85C6
+#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
+#define GL_R1UI_C4UB_V3F_SUN 0x85C5
+#define GL_R1UI_N3F_V3F_SUN 0x85C7
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
+#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
+#define GL_R1UI_T2F_V3F_SUN 0x85C9
+#define GL_R1UI_V3F_SUN 0x85C4
+#define GL_R32F 0x822E
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_R3_G3_B2 0x2A10
+#define GL_R8 0x8229
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R8_EXT 0x8229
+#define GL_R8_SNORM 0x8F94
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_RASTERIZER_DISCARD_EXT 0x8C89
+#define GL_RASTERIZER_DISCARD_NV 0x8C89
+#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262
+#define GL_READ_BUFFER 0x0C02
+#define GL_READ_BUFFER_EXT 0x0C02
+#define GL_READ_BUFFER_NV 0x0C02
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
+#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
+#define GL_READ_ONLY 0x88B8
+#define GL_READ_ONLY_ARB 0x88B8
+#define GL_READ_PIXELS 0x828C
+#define GL_READ_PIXELS_FORMAT 0x828D
+#define GL_READ_PIXELS_TYPE 0x828E
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+#define GL_READ_WRITE 0x88BA
+#define GL_READ_WRITE_ARB 0x88BA
+#define GL_RECIP_ADD_SIGNED_ALPHA_IMG 0x8C05
+#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE
+#define GL_RECT_NV 0xF6
+#define GL_RED 0x1903
+#define GL_REDUCE 0x8016
+#define GL_REDUCE_EXT 0x8016
+#define GL_RED_BIAS 0x0D15
+#define GL_RED_BITS 0x0D52
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_RED_EXT 0x1903
+#define GL_RED_INTEGER 0x8D94
+#define GL_RED_INTEGER_EXT 0x8D94
+#define GL_RED_MAX_CLAMP_INGR 0x8564
+#define GL_RED_MIN_CLAMP_INGR 0x8560
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_SNORM 0x8F90
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E
+#define GL_REFERENCE_PLANE_SGIX 0x817D
+#define GL_REFLECTION_MAP 0x8512
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_REFLECTION_MAP_EXT 0x8512
+#define GL_REFLECTION_MAP_NV 0x8512
+#define GL_REFLECTION_MAP_OES 0x8512
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_10_ATI 0x892B
+#define GL_REG_11_ATI 0x892C
+#define GL_REG_12_ATI 0x892D
+#define GL_REG_13_ATI 0x892E
+#define GL_REG_14_ATI 0x892F
+#define GL_REG_15_ATI 0x8930
+#define GL_REG_16_ATI 0x8931
+#define GL_REG_17_ATI 0x8932
+#define GL_REG_18_ATI 0x8933
+#define GL_REG_19_ATI 0x8934
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_20_ATI 0x8935
+#define GL_REG_21_ATI 0x8936
+#define GL_REG_22_ATI 0x8937
+#define GL_REG_23_ATI 0x8938
+#define GL_REG_24_ATI 0x8939
+#define GL_REG_25_ATI 0x893A
+#define GL_REG_26_ATI 0x893B
+#define GL_REG_27_ATI 0x893C
+#define GL_REG_28_ATI 0x893D
+#define GL_REG_29_ATI 0x893E
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_30_ATI 0x893F
+#define GL_REG_31_ATI 0x8940
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_REG_6_ATI 0x8927
+#define GL_REG_7_ATI 0x8928
+#define GL_REG_8_ATI 0x8929
+#define GL_REG_9_ATI 0x892A
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_RELEASED_APPLE 0x8A19
+#define GL_RENDER 0x1C00
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
+#define GL_RENDERBUFFER_ALPHA_SIZE_OES 0x8D53
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_RENDERBUFFER_BINDING_ANGLE 0x8CA7
+#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
+#define GL_RENDERBUFFER_BINDING_OES 0x8CA7
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
+#define GL_RENDERBUFFER_BLUE_SIZE_OES 0x8D52
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
+#define GL_RENDERBUFFER_DEPTH_SIZE_OES 0x8D54
+#define GL_RENDERBUFFER_EXT 0x8D41
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
+#define GL_RENDERBUFFER_GREEN_SIZE_OES 0x8D51
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
+#define GL_RENDERBUFFER_HEIGHT_OES 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES 0x8D44
+#define GL_RENDERBUFFER_OES 0x8D41
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
+#define GL_RENDERBUFFER_RED_SIZE_OES 0x8D50
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
+#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
+#define GL_RENDERBUFFER_STENCIL_SIZE_OES 0x8D55
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
+#define GL_RENDERBUFFER_WIDTH_OES 0x8D42
+#define GL_RENDERER 0x1F01
+#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3
+#define GL_RENDER_MODE 0x0C40
+#define GL_REPEAT 0x2901
+#define GL_REPLACE 0x1E01
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_SUN 0x81D8
+#define GL_REPLACE_EXT 0x8062
+#define GL_REPLACE_MIDDLE_SUN 0x0002
+#define GL_REPLACE_OLDEST_SUN 0x0003
+#define GL_REPLACE_VALUE_AMD 0x874B
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_REPLICATE_BORDER_HP 0x8153
+#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68
+#define GL_RESAMPLE_AVERAGE_OML 0x8988
+#define GL_RESAMPLE_DECIMATE_OML 0x8989
+#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
+#define GL_RESAMPLE_REPLICATE_OML 0x8986
+#define GL_RESAMPLE_REPLICATE_SGIX 0x842E
+#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
+#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_RESCALE_NORMAL_EXT 0x803A
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GL_RESTART_PATH_NV 0xF0
+#define GL_RESTART_SUN 0x0001
+#define GL_RETAINED_APPLE 0x8A1B
+#define GL_RETURN 0x0102
+#define GL_RG 0x8227
+#define GL_RG16 0x822C
+#define GL_RG16F 0x822F
+#define GL_RG16F_EXT 0x822F
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG16_SNORM 0x8F99
+#define GL_RG32F 0x8230
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_RG8 0x822B
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG8_EXT 0x822B
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB 0x1907
+#define GL_RGB10 0x8052
+#define GL_RGB10_A2 0x8059
+#define GL_RGB10_A2UI 0x906F
+#define GL_RGB10_A2_EXT 0x8059
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB12_EXT 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGB16F 0x881B
+#define GL_RGB16F_ARB 0x881B
+#define GL_RGB16F_EXT 0x881B
+#define GL_RGB16I 0x8D89
+#define GL_RGB16I_EXT 0x8D89
+#define GL_RGB16UI 0x8D77
+#define GL_RGB16UI_EXT 0x8D77
+#define GL_RGB16_EXT 0x8054
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGB2_EXT 0x804E
+#define GL_RGB32F 0x8815
+#define GL_RGB32F_ARB 0x8815
+#define GL_RGB32I 0x8D83
+#define GL_RGB32I_EXT 0x8D83
+#define GL_RGB32UI 0x8D71
+#define GL_RGB32UI_EXT 0x8D71
+#define GL_RGB4 0x804F
+#define GL_RGB4_EXT 0x804F
+#define GL_RGB4_S3TC 0x83A1
+#define GL_RGB5 0x8050
+#define GL_RGB565 0x8D62
+#define GL_RGB565_OES 0x8D62
+#define GL_RGB5_A1 0x8057
+#define GL_RGB5_A1_EXT 0x8057
+#define GL_RGB5_A1_OES 0x8057
+#define GL_RGB5_EXT 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB8I 0x8D8F
+#define GL_RGB8I_EXT 0x8D8F
+#define GL_RGB8UI 0x8D7D
+#define GL_RGB8UI_EXT 0x8D7D
+#define GL_RGB8_EXT 0x8051
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGB9_E5 0x8C3D
+#define GL_RGB9_E5_EXT 0x8C3D
+#define GL_RGBA 0x1908
+#define GL_RGBA12 0x805A
+#define GL_RGBA12_EXT 0x805A
+#define GL_RGBA16 0x805B
+#define GL_RGBA16F 0x881A
+#define GL_RGBA16F_ARB 0x881A
+#define GL_RGBA16F_EXT 0x881A
+#define GL_RGBA16I 0x8D88
+#define GL_RGBA16I_EXT 0x8D88
+#define GL_RGBA16UI 0x8D76
+#define GL_RGBA16UI_EXT 0x8D76
+#define GL_RGBA16_EXT 0x805B
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_RGBA2 0x8055
+#define GL_RGBA2_EXT 0x8055
+#define GL_RGBA32F 0x8814
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGBA32I 0x8D82
+#define GL_RGBA32I_EXT 0x8D82
+#define GL_RGBA32UI 0x8D70
+#define GL_RGBA32UI_EXT 0x8D70
+#define GL_RGBA4 0x8056
+#define GL_RGBA4_DXT5_S3TC 0x83A5
+#define GL_RGBA4_EXT 0x8056
+#define GL_RGBA4_OES 0x8056
+#define GL_RGBA4_S3TC 0x83A3
+#define GL_RGBA8 0x8058
+#define GL_RGBA8I 0x8D8E
+#define GL_RGBA8I_EXT 0x8D8E
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGBA8UI_EXT 0x8D7C
+#define GL_RGBA8_EXT 0x8058
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_RGBA_DXT5_S3TC 0x83A4
+#define GL_RGBA_FLOAT16_APPLE 0x881A
+#define GL_RGBA_FLOAT16_ATI 0x881A
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGBA_FLOAT32_ATI 0x8814
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_RGBA_FLOAT_MODE_ATI 0x8820
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_RGBA_INTEGER_EXT 0x8D99
+#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E
+#define GL_RGBA_MODE 0x0C31
+#define GL_RGBA_S3TC 0x83A2
+#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C
+#define GL_RGBA_SNORM 0x8F93
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_RGB_422_APPLE 0x8A1F
+#define GL_RGB_FLOAT16_APPLE 0x881B
+#define GL_RGB_FLOAT16_ATI 0x881B
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_RGB_FLOAT32_ATI 0x8815
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGB_INTEGER_EXT 0x8D98
+#define GL_RGB_S3TC 0x83A0
+#define GL_RGB_SCALE 0x8573
+#define GL_RGB_SCALE_ARB 0x8573
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_RGB_SNORM 0x8F92
+#define GL_RG_EXT 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_RG_SNORM 0x8F91
+#define GL_RIGHT 0x0407
+#define GL_ROUND_NV 0x90A4
+#define GL_S 0x2000
+#define GL_SAMPLER 0x82E6
+#define GL_SAMPLER_1D 0x8B5D
+#define GL_SAMPLER_1D_ARB 0x8B5D
+#define GL_SAMPLER_1D_ARRAY 0x8DC0
+#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0
+#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3
+#define GL_SAMPLER_1D_SHADOW 0x8B61
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_2D_ARB 0x8B5E
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_SAMPLER_2D_RECT 0x8B63
+#define GL_SAMPLER_2D_RECT_ARB 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
+#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_3D_ARB 0x8B5F
+#define GL_SAMPLER_3D_OES 0x8B5F
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_SAMPLER_BUFFER_AMD 0x9001
+#define GL_SAMPLER_BUFFER_EXT 0x8DC2
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_SAMPLER_CUBE_ARB 0x8B60
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5
+#define GL_SAMPLER_EXTERNAL_OES 0x8D66
+#define GL_SAMPLER_OBJECT_AMD 0x9155
+#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLES_3DFX 0x86B4
+#define GL_SAMPLES_ARB 0x80A9
+#define GL_SAMPLES_EXT 0x80A9
+#define GL_SAMPLES_PASSED 0x8914
+#define GL_SAMPLES_PASSED_ARB 0x8914
+#define GL_SAMPLES_SGIS 0x80A9
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
+#define GL_SAMPLE_BUFFERS_ARB 0x80A8
+#define GL_SAMPLE_BUFFERS_EXT 0x80A8
+#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_COVERAGE_ARB 0x80A0
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_EXT 0x80A0
+#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
+#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
+#define GL_SAMPLE_MASK_NV 0x8E51
+#define GL_SAMPLE_MASK_SGIS 0x80A0
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
+#define GL_SAMPLE_MASK_VALUE_NV 0x8E52
+#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
+#define GL_SAMPLE_PATTERN_EXT 0x80AC
+#define GL_SAMPLE_PATTERN_SGIS 0x80AC
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_POSITION_NV 0x8E50
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_SAMPLE_SHADING_ARB 0x8C36
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_SCALAR_EXT 0x87BE
+#define GL_SCALEBIAS_HINT_SGIX 0x8322
+#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB
+#define GL_SCALE_BY_FOUR_NV 0x853F
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_SCALE_BY_TWO_NV 0x853E
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_SCISSOR_BOX 0x0C10
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_SCREEN_COORDINATES_REND 0x8490
+#define GL_SECONDARY_COLOR_ARRAY 0x845E
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
+#define GL_SELECT 0x1C02
+#define GL_SELECTION_BUFFER_POINTER 0x0DF3
+#define GL_SELECTION_BUFFER_SIZE 0x0DF4
+#define GL_SEPARABLE_2D 0x8012
+#define GL_SEPARABLE_2D_EXT 0x8012
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D
+#define GL_SEPARATE_ATTRIBS_NV 0x8C8D
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
+#define GL_SET 0x150F
+#define GL_SET_AMD 0x874A
+#define GL_SGX_BINARY_IMG 0x8C0A
+#define GL_SGX_PROGRAM_BINARY_IMG 0x9130
+#define GL_SHADER 0x82E1
+#define GL_SHADER_BINARY_DMP 0x9250
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_SHADER_BINARY_VIV 0x8FC4
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_CONSISTENT_NV 0x86DD
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020
+#define GL_SHADER_IMAGE_ATOMIC 0x82A6
+#define GL_SHADER_IMAGE_LOAD 0x82A4
+#define GL_SHADER_IMAGE_STORE 0x82A5
+#define GL_SHADER_INCLUDE_ARB 0x8DAE
+#define GL_SHADER_OBJECT_ARB 0x8B48
+#define GL_SHADER_OBJECT_EXT 0x8B48
+#define GL_SHADER_OPERATION_NV 0x86DF
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_SHADE_MODEL 0x0B54
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+#define GL_SHADOW_AMBIENT_SGIX 0x80BF
+#define GL_SHADOW_ATTENUATION_EXT 0x834E
+#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+#define GL_SHININESS 0x1601
+#define GL_SHORT 0x1402
+#define GL_SIGNALED 0x9119
+#define GL_SIGNALED_APPLE 0x9119
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_HILO8_NV 0x885F
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_IDENTITY_NV 0x853C
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_NEGATE_NV 0x853D
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SINGLE_COLOR_EXT 0x81F9
+#define GL_SKIP_DECODE_EXT 0x8A4A
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_SLICE_ACCUM_SUN 0x85CC
+#define GL_SLIM10U_SGIX 0x831E
+#define GL_SLIM12S_SGIX 0x831F
+#define GL_SLIM8U_SGIX 0x831D
+#define GL_SLUMINANCE 0x8C46
+#define GL_SLUMINANCE8 0x8C47
+#define GL_SLUMINANCE8_ALPHA8 0x8C45
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
+#define GL_SLUMINANCE8_EXT 0x8C47
+#define GL_SLUMINANCE_ALPHA 0x8C44
+#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
+#define GL_SLUMINANCE_EXT 0x8C46
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_SMOOTH 0x1D01
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE0_ALPHA_ARB 0x8588
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE0_RGB_ARB 0x8580
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE1_ALPHA_ARB 0x8589
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE1_RGB_ARB 0x8581
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_SOURCE2_ALPHA_ARB 0x858A
+#define GL_SOURCE2_ALPHA_EXT 0x858A
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE2_RGB_ARB 0x8582
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE3_ALPHA_NV 0x858B
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SPARE0_NV 0x852E
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_SPARE1_NV 0x852F
+#define GL_SPECULAR 0x1202
+#define GL_SPHERE_MAP 0x2402
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPRITE_AXIAL_SGIX 0x814C
+#define GL_SPRITE_AXIS_SGIX 0x814A
+#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E
+#define GL_SPRITE_MODE_SGIX 0x8149
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D
+#define GL_SPRITE_SGIX 0x8148
+#define GL_SPRITE_TRANSLATION_SGIX 0x814B
+#define GL_SQUARE_NV 0x90A3
+#define GL_SRC0_ALPHA 0x8588
+#define GL_SRC0_RGB 0x8580
+#define GL_SRC1_ALPHA 0x8589
+#define GL_SRC1_COLOR 0x88F9
+#define GL_SRC1_RGB 0x8581
+#define GL_SRC2_ALPHA 0x858A
+#define GL_SRC2_RGB 0x8582
+#define GL_SRC_ALPHA 0x0302
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_SRC_COLOR 0x0300
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_SRGB8_ALPHA8_EXT 0x8C43
+#define GL_SRGB8_EXT 0x8C41
+#define GL_SRGB_ALPHA 0x8C42
+#define GL_SRGB_ALPHA_EXT 0x8C42
+#define GL_SRGB_DECODE_ARB 0x8299
+#define GL_SRGB_EXT 0x8C40
+#define GL_SRGB_READ 0x8297
+#define GL_SRGB_WRITE 0x8298
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_STATE_RESTORE 0x8BDC
+#define GL_STATIC_ATI 0x8760
+#define GL_STATIC_COPY 0x88E6
+#define GL_STATIC_COPY_ARB 0x88E6
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_DRAW_ARB 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_READ_ARB 0x88E5
+#define GL_STENCIL 0x1802
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_STENCIL_ATTACHMENT_EXT 0x8D20
+#define GL_STENCIL_ATTACHMENT_OES 0x8D20
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_STENCIL_BITS 0x0D57
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_COMPONENTS 0x8285
+#define GL_STENCIL_EXT 0x1802
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_INDEX 0x1901
+#define GL_STENCIL_INDEX1 0x8D46
+#define GL_STENCIL_INDEX16 0x8D49
+#define GL_STENCIL_INDEX16_EXT 0x8D49
+#define GL_STENCIL_INDEX1_EXT 0x8D46
+#define GL_STENCIL_INDEX1_OES 0x8D46
+#define GL_STENCIL_INDEX4 0x8D47
+#define GL_STENCIL_INDEX4_EXT 0x8D47
+#define GL_STENCIL_INDEX4_OES 0x8D47
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_STENCIL_INDEX8_EXT 0x8D48
+#define GL_STENCIL_INDEX8_OES 0x8D48
+#define GL_STENCIL_OP_VALUE_AMD 0x874C
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_RENDERABLE 0x8288
+#define GL_STENCIL_TAG_BITS_EXT 0x88F2
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STEREO 0x0C33
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_CLIENT_APPLE 0x85B4
+#define GL_STORAGE_PRIVATE_APPLE 0x85BD
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+#define GL_STREAM_COPY 0x88E2
+#define GL_STREAM_COPY_ARB 0x88E2
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_DRAW_ARB 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_READ_ARB 0x88E1
+#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F
+#define GL_SUBTRACT 0x84E7
+#define GL_SUBTRACT_ARB 0x84E7
+#define GL_SUB_ATI 0x8965
+#define GL_SUCCESS_NV 0x902F
+#define GL_SURFACE_MAPPED_NV 0x8700
+#define GL_SURFACE_REGISTERED_NV 0x86FD
+#define GL_SURFACE_STATE_NV 0x86EB
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_SWIZZLE_STRQ_ATI 0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SYNC_CL_EVENT_ARB 0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_CONDITION_APPLE 0x9113
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_FENCE_APPLE 0x9116
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FLAGS_APPLE 0x9115
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117
+#define GL_SYNC_OBJECT_APPLE 0x8A53
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_STATUS_APPLE 0x9114
+#define GL_SYNC_X11_FENCE_EXT 0x90E1
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_T 0x2001
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4
+#define GL_T2F_IUI_V2F_EXT 0x81B1
+#define GL_T2F_IUI_V3F_EXT 0x81B2
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+#define GL_T4F_V4F 0x2A28
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_TABLE_TOO_LARGE_EXT 0x8031
+#define GL_TANGENT_ARRAY_EXT 0x8439
+#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
+#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
+#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
+#define GL_TESSELLATION_FACTOR_AMD 0x9005
+#define GL_TESSELLATION_MODE_AMD 0x9004
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_CONTROL_PROGRAM_NV 0x891E
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_CONTROL_SUBROUTINE 0x92E9
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF
+#define GL_TESS_CONTROL_TEXTURE 0x829C
+#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0
+#define GL_TESS_EVALUATION_TEXTURE 0x829D
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TEXCOORD1_BIT_PGI 0x10000000
+#define GL_TEXCOORD2_BIT_PGI 0x20000000
+#define GL_TEXCOORD3_BIT_PGI 0x40000000
+#define GL_TEXCOORD4_BIT_PGI 0x80000000
+#define GL_TEXTURE 0x1702
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE0_ARB 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE10_ARB 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE11_ARB 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE12_ARB 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE13_ARB 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE14_ARB 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE15_ARB 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE16_ARB 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE17_ARB 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE18_ARB 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE19_ARB 0x84D3
+#define GL_TEXTURE1_ARB 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE20_ARB 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE21_ARB 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE22_ARB 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE23_ARB 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE24_ARB 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE25_ARB 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE26_ARB 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE27_ARB 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE28_ARB 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE29_ARB 0x84DD
+#define GL_TEXTURE2_ARB 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE30_ARB 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_TEXTURE31_ARB 0x84DF
+#define GL_TEXTURE3_ARB 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE4_ARB 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE5_ARB 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE6_ARB 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE7_ARB 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE8_ARB 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE9_ARB 0x84C9
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_1D_ARRAY 0x8C18
+#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18
+#define GL_TEXTURE_1D_BINDING_EXT 0x8068
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
+#define GL_TEXTURE_1D_STACK_MESAX 0x8759
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A
+#define GL_TEXTURE_2D_BINDING_EXT 0x8069
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
+#define GL_TEXTURE_2D_STACK_MESAX 0x875A
+#define GL_TEXTURE_3D 0x806F
+#define GL_TEXTURE_3D_BINDING_EXT 0x806A
+#define GL_TEXTURE_3D_BINDING_OES 0x806A
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_TEXTURE_3D_OES 0x806F
+#define GL_TEXTURE_4DSIZE_SGIS 0x8136
+#define GL_TEXTURE_4D_BINDING_SGIS 0x814F
+#define GL_TEXTURE_4D_SGIS 0x8134
+#define GL_TEXTURE_ALPHA_MODULATE_IMG 0x8C06
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
+#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C
+#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
+#define GL_TEXTURE_BINDING_CUBE_MAP_OES 0x8514
+#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67
+#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
+#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
+#define GL_TEXTURE_BORDER 0x1005
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_TEXTURE_BUFFER_ARB 0x8C2A
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_EXT 0x8C2A
+#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E
+#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E
+#define GL_TEXTURE_BUFFER_OFFSET 0x919D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#define GL_TEXTURE_BUFFER_SIZE 0x919E
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046
+#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
+#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
+#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B
+#define GL_TEXTURE_COMPARE_SGIX 0x819A
+#define GL_TEXTURE_COMPONENTS 0x1003
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
+#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_NV 0x8C79
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045
+#define GL_TEXTURE_CROP_RECT_OES 0x8B9D
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009
+#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES 0x8516
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES 0x8518
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES 0x851A
+#define GL_TEXTURE_CUBE_MAP_OES 0x8513
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES 0x8515
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES 0x8517
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES 0x8519
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001
+#define GL_TEXTURE_DEFORMATION_SGIX 0x8195
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_DEPTH_QCOM 0x8BD4
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
+#define GL_TEXTURE_DS_SIZE_NV 0x871D
+#define GL_TEXTURE_DT_SIZE_NV 0x871E
+#define GL_TEXTURE_ENV 0x2300
+#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE
+#define GL_TEXTURE_ENV_COLOR 0x2201
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_EXTERNAL_OES 0x8D65
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008
+#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147
+#define GL_TEXTURE_FILTER_CONTROL 0x8500
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C
+#define GL_TEXTURE_FORMAT_QCOM 0x8BD6
+#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
+#define GL_TEXTURE_GATHER 0x82A2
+#define GL_TEXTURE_GATHER_SHADOW 0x82A3
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_TEXTURE_GEN_Q 0x0C63
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_STR_OES 0x8D60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3
+#define GL_TEXTURE_HI_SIZE_NV 0x871B
+#define GL_TEXTURE_IMAGE_FORMAT 0x828F
+#define GL_TEXTURE_IMAGE_TYPE 0x8290
+#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
+#define GL_TEXTURE_INTENSITY_TYPE 0x8C15
+#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5
+#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C
+#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167
+#define GL_TEXTURE_LIGHT_EXT 0x8350
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190
+#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F
+#define GL_TEXTURE_LO_SIZE_NV 0x871C
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
+#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES 0x898F
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#define GL_TEXTURE_NORMAL_EXT 0x85AF
+#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9
+#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB
+#define GL_TEXTURE_POST_SPECULAR_HP 0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_PRIORITY_EXT 0x8066
+#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
+#define GL_TEXTURE_RECTANGLE_NV 0x84F5
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_RED_SIZE_EXT 0x805C
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_TEXTURE_RESIDENT_EXT 0x8067
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_SAMPLES_IMG 0x9136
+#define GL_TEXTURE_SHADER_NV 0x86DE
+#define GL_TEXTURE_SHADOW 0x82A1
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F
+#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
+#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC
+#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46
+#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42
+#define GL_TEXTURE_TARGET_QCOM 0x8BDA
+#define GL_TEXTURE_TOO_LARGE_EXT 0x8065
+#define GL_TEXTURE_TYPE_QCOM 0x8BD7
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100
+#define GL_TEXTURE_USAGE_ANGLE 0x93A2
+#define GL_TEXTURE_VIEW 0x82B5
+#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD
+#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE
+#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_WIDTH_QCOM 0x8BD2
+#define GL_TEXTURE_WRAP_Q_SGIS 0x8137
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_TEXTURE_WRAP_R_OES 0x8072
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_TIMEOUT_EXPIRED_APPLE 0x911B
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull
+#define GL_TIMESTAMP 0x8E28
+#define GL_TIME_ELAPSED 0x88BF
+#define GL_TIME_ELAPSED_EXT 0x88BF
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_TRACE_ALL_BITS_MESA 0xFFFF
+#define GL_TRACE_ARRAYS_BIT_MESA 0x0004
+#define GL_TRACE_ERRORS_BIT_MESA 0x0020
+#define GL_TRACE_MASK_MESA 0x8755
+#define GL_TRACE_NAME_MESA 0x8756
+#define GL_TRACE_OPERATIONS_BIT_MESA 0x0001
+#define GL_TRACE_PIXELS_BIT_MESA 0x0010
+#define GL_TRACE_PRIMITIVES_BIT_MESA 0x0002
+#define GL_TRACE_TEXTURES_BIT_MESA 0x0008
+#define GL_TRACK_MATRIX_NV 0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
+#define GL_TRANSFORM_FEEDBACK_NV 0x8E22
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76
+#define GL_TRANSFORM_HINT_APPLE 0x85B1
+#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_NV 0x862C
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_PROJECTIVE_2D_NV 0x9097
+#define GL_TRANSPOSE_PROJECTIVE_3D_NV 0x9099
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLES_ADJACENCY_ARB 0x000C
+#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_TRIANGLE_LIST_SUN 0x81D7
+#define GL_TRIANGLE_MESH_SUN 0x8615
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_TRUE 1
+#define GL_TYPE 0x92FA
+#define GL_TYPE_RGBA_FLOAT_ATI 0x8820
+#define GL_UNDEFINED_APPLE 0x8A1C
+#define GL_UNDEFINED_VERTEX 0x8260
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
+#define GL_UNIFORM_BUFFER_EXT 0x8DEE
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
+#define GL_UNPACK_CMYK_HINT_EXT 0x800F
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127
+#define GL_UNPACK_COMPRESSED_SIZE_SGIX 0x831A
+#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
+#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_RESAMPLE_OML 0x8985
+#define GL_UNPACK_RESAMPLE_SGIX 0x842D
+#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_UNSIGNALED 0x9118
+#define GL_UNSIGNALED_APPLE 0x9118
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_BYTE_2_3_3_REV_EXT 0x8362
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INT 0x1405
+#define GL_UNSIGNED_INT16_NV 0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3
+#define GL_UNSIGNED_INT64_AMD 0x8BC2
+#define GL_UNSIGNED_INT64_NV 0x140F
+#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
+#define GL_UNSIGNED_INT8_NV 0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
+#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
+#define GL_UNSIGNED_INT_24_8_MESA 0x8751
+#define GL_UNSIGNED_INT_24_8_NV 0x84FA
+#define GL_UNSIGNED_INT_24_8_OES 0x84FA
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E
+#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_8_8_8_8_REV_EXT 0x8367
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_UNSIGNED_INT_IMAGE_1D 0x9062
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_UNSIGNED_NEGATE_NV 0x853D
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
+#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753
+#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_EXT 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_5_6_5_REV_EXT 0x8364
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB
+#define GL_UPPER_LEFT 0x8CA2
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_UTF16_NV 0x909B
+#define GL_UTF8_NV 0x909A
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_VARIANT_ARRAY_EXT 0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
+#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
+#define GL_VARIANT_DATATYPE_EXT 0x87E5
+#define GL_VARIANT_EXT 0x87C1
+#define GL_VARIANT_VALUE_EXT 0x87E4
+#define GL_VBO_FREE_MEMORY_ATI 0x87FB
+#define GL_VECTOR_EXT 0x87BF
+#define GL_VENDOR 0x1F00
+#define GL_VERSION 0x1F02
+#define GL_VERSION_1_1 1
+#define GL_VERSION_1_2 1
+#define GL_VERSION_1_3 1
+#define GL_VERSION_1_4 1
+#define GL_VERSION_1_5 1
+#define GL_VERSION_2_0 1
+#define GL_VERSION_2_1 1
+#define GL_VERSION_3_0 1
+#define GL_VERSION_3_1 1
+#define GL_VERSION_3_2 1
+#define GL_VERTEX23_BIT_PGI 0x00000004
+#define GL_VERTEX4_BIT_PGI 0x00000008
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5
+#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B
+#define GL_VERTEX_ARRAY_LIST_IBM 103070
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
+#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154
+#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
+#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
+#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
+#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A
+#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02
+#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_VERTEX_BLEND_ARB 0x86A7
+#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B
+#define GL_VERTEX_DATA_HINT_PGI 0x1A22A
+#define GL_VERTEX_ID_NV 0x8C7B
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
+#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA 0x8BB7
+#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA 0x8BB6
+#define GL_VERTEX_PROGRAM_CALLBACK_MESA 0x8BB4
+#define GL_VERTEX_PROGRAM_NV 0x8620
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
+#define GL_VERTEX_PROGRAM_POSITION_MESA 0x8BB4
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_VERTEX_SHADER_ARB 0x8B31
+#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_VERTEX_SHADER_BIT_EXT 0x00000001
+#define GL_VERTEX_SHADER_EXT 0x8780
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
+#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
+#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
+#define GL_VERTEX_SOURCE_ATI 0x8774
+#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
+#define GL_VERTEX_STREAM0_ATI 0x876C
+#define GL_VERTEX_STREAM1_ATI 0x876D
+#define GL_VERTEX_STREAM2_ATI 0x876E
+#define GL_VERTEX_STREAM3_ATI 0x876F
+#define GL_VERTEX_STREAM4_ATI 0x8770
+#define GL_VERTEX_STREAM5_ATI 0x8771
+#define GL_VERTEX_STREAM6_ATI 0x8772
+#define GL_VERTEX_STREAM7_ATI 0x8773
+#define GL_VERTEX_SUBROUTINE 0x92E8
+#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE
+#define GL_VERTEX_TEXTURE 0x829B
+#define GL_VERTEX_WEIGHTING_EXT 0x8509
+#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_VIDEO_BUFFER_BINDING_NV 0x9021
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D
+#define GL_VIDEO_BUFFER_NV 0x9020
+#define GL_VIDEO_BUFFER_PITCH_NV 0x9028
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C
+#define GL_VIEWPORT 0x0BA2
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_VIEWPORT_BOUNDS_RANGE 0x825D
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C
+#define GL_VIEW_CLASS_128_BITS 0x82C4
+#define GL_VIEW_CLASS_16_BITS 0x82CA
+#define GL_VIEW_CLASS_24_BITS 0x82C9
+#define GL_VIEW_CLASS_32_BITS 0x82C8
+#define GL_VIEW_CLASS_48_BITS 0x82C7
+#define GL_VIEW_CLASS_64_BITS 0x82C6
+#define GL_VIEW_CLASS_8_BITS 0x82CB
+#define GL_VIEW_CLASS_96_BITS 0x82C5
+#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3
+#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2
+#define GL_VIEW_CLASS_RGTC1_RED 0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG 0x82D1
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF
+#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6
+#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197
+#define GL_VOLATILE_APPLE 0x8A1A
+#define GL_WAIT_FAILED 0x911D
+#define GL_WAIT_FAILED_APPLE 0x911D
+#define GL_WEIGHT_ARRAY_ARB 0x86AD
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES 0x889E
+#define GL_WEIGHT_ARRAY_OES 0x86AD
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
+#define GL_WEIGHT_ARRAY_POINTER_OES 0x86AC
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
+#define GL_WEIGHT_ARRAY_SIZE_OES 0x86AB
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
+#define GL_WEIGHT_ARRAY_STRIDE_OES 0x86AA
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
+#define GL_WEIGHT_ARRAY_TYPE_OES 0x86A9
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
+#define GL_WIDE_LINE_HINT_PGI 0x1A222
+#define GL_WRAP_BORDER_SUN 0x81D4
+#define GL_WRITEONLY_RENDERING_QCOM 0x8823
+#define GL_WRITE_DISCARD_NV 0x88BE
+#define GL_WRITE_ONLY 0x88B9
+#define GL_WRITE_ONLY_ARB 0x88B9
+#define GL_WRITE_ONLY_OES 0x88B9
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_W_EXT 0x87D8
+#define GL_XOR 0x1506
+#define GL_X_EXT 0x87D5
+#define GL_YCBAYCR8A_4224_NV 0x9032
+#define GL_YCBCR_422_APPLE 0x85B9
+#define GL_YCBCR_MESA 0x8757
+#define GL_YCBYCR8_422_NV 0x9031
+#define GL_YCRCBA_SGIX 0x8319
+#define GL_YCRCB_422_SGIX 0x81BB
+#define GL_YCRCB_444_SGIX 0x81BC
+#define GL_YCRCB_SGIX 0x8318
+#define GL_Y_EXT 0x87D6
+#define GL_Z400_BINARY_AMD 0x8740
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033
+#define GL_ZERO 0
+#define GL_ZERO_EXT 0x87DD
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+#define GL_Z_EXT 0x87D7
+
+void GLAPIENTRY glAccum(GLenum,GLfloat);
+void GLAPIENTRY glAlphaFunc(GLenum,GLfloat);
+GLboolean GLAPIENTRY glAreTexturesResident(GLsizei,const GLuint*,GLboolean*);
+void GLAPIENTRY glArrayElement(GLint);
+void GLAPIENTRY glBegin(GLenum);
+void GLAPIENTRY glBindTexture(GLenum,GLuint);
+void GLAPIENTRY glBitmap(GLsizei,GLsizei,GLfloat,GLfloat,GLfloat,GLfloat,const GLubyte*);
+void GLAPIENTRY glBlendFunc(GLenum,GLenum);
+void GLAPIENTRY glCallList(GLuint);
+void GLAPIENTRY glCallLists(GLsizei,GLenum,const GLvoid*);
+void GLAPIENTRY glClear(GLbitfield);
+void GLAPIENTRY glClearAccum(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glClearColor(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glClearDepth(GLdouble);
+void GLAPIENTRY glClearIndex(GLfloat);
+void GLAPIENTRY glClearStencil(GLint);
+void GLAPIENTRY glClipPlane(GLenum,const GLdouble*);
+void GLAPIENTRY glColor3b(GLbyte,GLbyte,GLbyte);
+void GLAPIENTRY glColor3bv(const GLbyte*);
+void GLAPIENTRY glColor3d(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glColor3dv(const GLdouble*);
+void GLAPIENTRY glColor3f(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glColor3fv(const GLfloat*);
+void GLAPIENTRY glColor3i(GLint,GLint,GLint);
+void GLAPIENTRY glColor3iv(const GLint*);
+void GLAPIENTRY glColor3s(GLshort,GLshort,GLshort);
+void GLAPIENTRY glColor3sv(const GLshort*);
+void GLAPIENTRY glColor3ub(GLubyte,GLubyte,GLubyte);
+void GLAPIENTRY glColor3ubv(const GLubyte*);
+void GLAPIENTRY glColor3ui(GLuint,GLuint,GLuint);
+void GLAPIENTRY glColor3uiv(const GLuint*);
+void GLAPIENTRY glColor3us(GLushort,GLushort,GLushort);
+void GLAPIENTRY glColor3usv(const GLushort*);
+void GLAPIENTRY glColor4b(GLbyte,GLbyte,GLbyte,GLbyte);
+void GLAPIENTRY glColor4bv(const GLbyte*);
+void GLAPIENTRY glColor4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glColor4dv(const GLdouble*);
+void GLAPIENTRY glColor4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glColor4fv(const GLfloat*);
+void GLAPIENTRY glColor4i(GLint,GLint,GLint,GLint);
+void GLAPIENTRY glColor4iv(const GLint*);
+void GLAPIENTRY glColor4s(GLshort,GLshort,GLshort,GLshort);
+void GLAPIENTRY glColor4sv(const GLshort*);
+void GLAPIENTRY glColor4ub(GLubyte,GLubyte,GLubyte,GLubyte);
+void GLAPIENTRY glColor4ubv(const GLubyte*);
+void GLAPIENTRY glColor4ui(GLuint,GLuint,GLuint,GLuint);
+void GLAPIENTRY glColor4uiv(const GLuint*);
+void GLAPIENTRY glColor4us(GLushort,GLushort,GLushort,GLushort);
+void GLAPIENTRY glColor4usv(const GLushort*);
+void GLAPIENTRY glColorMask(GLboolean,GLboolean,GLboolean,GLboolean);
+void GLAPIENTRY glColorMaterial(GLenum,GLenum);
+void GLAPIENTRY glColorPointer(GLint,GLenum,GLsizei,const GLvoid*);
+void GLAPIENTRY glCopyPixels(GLint,GLint,GLsizei,GLsizei,GLenum);
+void GLAPIENTRY glCopyTexImage1D(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+void GLAPIENTRY glCopyTexImage2D(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+void GLAPIENTRY glCopyTexSubImage1D(GLenum,GLint,GLint,GLint,GLint,GLsizei);
+void GLAPIENTRY glCopyTexSubImage2D(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+void GLAPIENTRY glCullFace(GLenum);
+GLint GLAPIENTRY glDebugEntry(GLint,GLint);
+void GLAPIENTRY glDeleteLists(GLuint,GLsizei);
+void GLAPIENTRY glDeleteTextures(GLsizei,const GLuint*);
+void GLAPIENTRY glDepthFunc(GLenum);
+void GLAPIENTRY glDepthMask(GLboolean);
+void GLAPIENTRY glDepthRange(GLdouble,GLdouble);
+void GLAPIENTRY glDisable(GLenum);
+void GLAPIENTRY glDisableClientState(GLenum);
+void GLAPIENTRY glDrawArrays(GLenum,GLint,GLsizei);
+void GLAPIENTRY glDrawBuffer(GLenum);
+void GLAPIENTRY glDrawElements(GLenum,GLsizei,GLenum,const GLvoid*);
+void GLAPIENTRY glDrawPixels(GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+void GLAPIENTRY glEdgeFlag(GLboolean);
+void GLAPIENTRY glEdgeFlagPointer(GLsizei,const GLvoid*);
+void GLAPIENTRY glEdgeFlagv(const GLboolean*);
+void GLAPIENTRY glEnable(GLenum);
+void GLAPIENTRY glEnableClientState(GLenum);
+void GLAPIENTRY glEnd(void);
+void GLAPIENTRY glEndList(void);
+void GLAPIENTRY glEvalCoord1d(GLdouble);
+void GLAPIENTRY glEvalCoord1dv(const GLdouble*);
+void GLAPIENTRY glEvalCoord1f(GLfloat);
+void GLAPIENTRY glEvalCoord1fv(const GLfloat*);
+void GLAPIENTRY glEvalCoord2d(GLdouble,GLdouble);
+void GLAPIENTRY glEvalCoord2dv(const GLdouble*);
+void GLAPIENTRY glEvalCoord2f(GLfloat,GLfloat);
+void GLAPIENTRY glEvalCoord2fv(const GLfloat*);
+void GLAPIENTRY glEvalMesh1(GLenum,GLint,GLint);
+void GLAPIENTRY glEvalMesh2(GLenum,GLint,GLint,GLint,GLint);
+void GLAPIENTRY glEvalPoint1(GLint);
+void GLAPIENTRY glEvalPoint2(GLint,GLint);
+void GLAPIENTRY glFeedbackBuffer(GLsizei,GLenum,GLfloat*);
+void GLAPIENTRY glFinish(void);
+void GLAPIENTRY glFlush(void);
+void GLAPIENTRY glFogf(GLenum,GLfloat);
+void GLAPIENTRY glFogfv(GLenum,const GLfloat*);
+void GLAPIENTRY glFogi(GLenum,GLint);
+void GLAPIENTRY glFogiv(GLenum,const GLint*);
+void GLAPIENTRY glFrontFace(GLenum);
+void GLAPIENTRY glFrustum(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+GLuint GLAPIENTRY glGenLists(GLsizei);
+void GLAPIENTRY glGenTextures(GLsizei,GLuint*);
+void GLAPIENTRY glGetBooleanv(GLenum,GLboolean*);
+void GLAPIENTRY glGetClipPlane(GLenum,GLdouble*);
+void GLAPIENTRY glGetDoublev(GLenum,GLdouble*);
+GLenum GLAPIENTRY glGetError(void);
+void GLAPIENTRY glGetFloatv(GLenum,GLfloat*);
+void GLAPIENTRY glGetIntegerv(GLenum,GLint*);
+void GLAPIENTRY glGetLightfv(GLenum,GLenum,GLfloat*);
+void GLAPIENTRY glGetLightiv(GLenum,GLenum,GLint*);
+void GLAPIENTRY glGetMapdv(GLenum,GLenum,GLdouble*);
+void GLAPIENTRY glGetMapfv(GLenum,GLenum,GLfloat*);
+void GLAPIENTRY glGetMapiv(GLenum,GLenum,GLint*);
+void GLAPIENTRY glGetMaterialfv(GLenum,GLenum,GLfloat*);
+void GLAPIENTRY glGetMaterialiv(GLenum,GLenum,GLint*);
+void GLAPIENTRY glGetPixelMapfv(GLenum,GLfloat*);
+void GLAPIENTRY glGetPixelMapuiv(GLenum,GLuint*);
+void GLAPIENTRY glGetPixelMapusv(GLenum,GLushort*);
+void GLAPIENTRY glGetPointerv(GLenum,GLvoid**);
+void GLAPIENTRY glGetPolygonStipple(GLubyte*);
+const GLubyte * GLAPIENTRY glGetString(GLenum);
+void GLAPIENTRY glGetTexEnvfv(GLenum,GLenum,GLfloat*);
+void GLAPIENTRY glGetTexEnviv(GLenum,GLenum,GLint*);
+void GLAPIENTRY glGetTexGendv(GLenum,GLenum,GLdouble*);
+void GLAPIENTRY glGetTexGenfv(GLenum,GLenum,GLfloat*);
+void GLAPIENTRY glGetTexGeniv(GLenum,GLenum,GLint*);
+void GLAPIENTRY glGetTexImage(GLenum,GLint,GLenum,GLenum,GLvoid*);
+void GLAPIENTRY glGetTexLevelParameterfv(GLenum,GLint,GLenum,GLfloat*);
+void GLAPIENTRY glGetTexLevelParameteriv(GLenum,GLint,GLenum,GLint*);
+void GLAPIENTRY glGetTexParameterfv(GLenum,GLenum,GLfloat*);
+void GLAPIENTRY glGetTexParameteriv(GLenum,GLenum,GLint*);
+void GLAPIENTRY glHint(GLenum,GLenum);
+void GLAPIENTRY glIndexMask(GLuint);
+void GLAPIENTRY glIndexPointer(GLenum,GLsizei,const GLvoid*);
+void GLAPIENTRY glIndexd(GLdouble);
+void GLAPIENTRY glIndexdv(const GLdouble*);
+void GLAPIENTRY glIndexf(GLfloat);
+void GLAPIENTRY glIndexfv(const GLfloat*);
+void GLAPIENTRY glIndexi(GLint);
+void GLAPIENTRY glIndexiv(const GLint*);
+void GLAPIENTRY glIndexs(GLshort);
+void GLAPIENTRY glIndexsv(const GLshort*);
+void GLAPIENTRY glIndexub(GLubyte);
+void GLAPIENTRY glIndexubv(const GLubyte*);
+void GLAPIENTRY glInitNames(void);
+void GLAPIENTRY glInterleavedArrays(GLenum,GLsizei,const GLvoid*);
+GLboolean GLAPIENTRY glIsEnabled(GLenum);
+GLboolean GLAPIENTRY glIsList(GLuint);
+GLboolean GLAPIENTRY glIsTexture(GLuint);
+void GLAPIENTRY glLightModelf(GLenum,GLfloat);
+void GLAPIENTRY glLightModelfv(GLenum,const GLfloat*);
+void GLAPIENTRY glLightModeli(GLenum,GLint);
+void GLAPIENTRY glLightModeliv(GLenum,const GLint*);
+void GLAPIENTRY glLightf(GLenum,GLenum,GLfloat);
+void GLAPIENTRY glLightfv(GLenum,GLenum,const GLfloat*);
+void GLAPIENTRY glLighti(GLenum,GLenum,GLint);
+void GLAPIENTRY glLightiv(GLenum,GLenum,const GLint*);
+void GLAPIENTRY glLineStipple(GLint,GLushort);
+void GLAPIENTRY glLineWidth(GLfloat);
+void GLAPIENTRY glListBase(GLuint);
+void GLAPIENTRY glLoadIdentity(void);
+void GLAPIENTRY glLoadMatrixd(const GLdouble*);
+void GLAPIENTRY glLoadMatrixf(const GLfloat*);
+void GLAPIENTRY glLoadName(GLuint);
+void GLAPIENTRY glLogicOp(GLenum);
+void GLAPIENTRY glMap1d(GLenum,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+void GLAPIENTRY glMap1f(GLenum,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+void GLAPIENTRY glMap2d(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+void GLAPIENTRY glMap2f(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+void GLAPIENTRY glMapGrid1d(GLint,GLdouble,GLdouble);
+void GLAPIENTRY glMapGrid1f(GLint,GLfloat,GLfloat);
+void GLAPIENTRY glMapGrid2d(GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble);
+void GLAPIENTRY glMapGrid2f(GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat);
+void GLAPIENTRY glMaterialf(GLenum,GLenum,GLfloat);
+void GLAPIENTRY glMaterialfv(GLenum,GLenum,const GLfloat*);
+void GLAPIENTRY glMateriali(GLenum,GLenum,GLint);
+void GLAPIENTRY glMaterialiv(GLenum,GLenum,const GLint*);
+void GLAPIENTRY glMatrixMode(GLenum);
+void GLAPIENTRY glMultMatrixd(const GLdouble*);
+void GLAPIENTRY glMultMatrixf(const GLfloat*);
+void GLAPIENTRY glNewList(GLuint,GLenum);
+void GLAPIENTRY glNormal3b(GLbyte,GLbyte,GLbyte);
+void GLAPIENTRY glNormal3bv(const GLbyte*);
+void GLAPIENTRY glNormal3d(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glNormal3dv(const GLdouble*);
+void GLAPIENTRY glNormal3f(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glNormal3fv(const GLfloat*);
+void GLAPIENTRY glNormal3i(GLint,GLint,GLint);
+void GLAPIENTRY glNormal3iv(const GLint*);
+void GLAPIENTRY glNormal3s(GLshort,GLshort,GLshort);
+void GLAPIENTRY glNormal3sv(const GLshort*);
+void GLAPIENTRY glNormalPointer(GLenum,GLsizei,const GLvoid*);
+void GLAPIENTRY glOrtho(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glPassThrough(GLfloat);
+void GLAPIENTRY glPixelMapfv(GLenum,GLint,const GLfloat*);
+void GLAPIENTRY glPixelMapuiv(GLenum,GLint,const GLuint*);
+void GLAPIENTRY glPixelMapusv(GLenum,GLint,const GLushort*);
+void GLAPIENTRY glPixelStoref(GLenum,GLfloat);
+void GLAPIENTRY glPixelStorei(GLenum,GLint);
+void GLAPIENTRY glPixelTransferf(GLenum,GLfloat);
+void GLAPIENTRY glPixelTransferi(GLenum,GLint);
+void GLAPIENTRY glPixelZoom(GLfloat,GLfloat);
+void GLAPIENTRY glPointSize(GLfloat);
+void GLAPIENTRY glPolygonMode(GLenum,GLenum);
+void GLAPIENTRY glPolygonOffset(GLfloat,GLfloat);
+void GLAPIENTRY glPolygonStipple(const GLubyte*);
+void GLAPIENTRY glPopAttrib(void);
+void GLAPIENTRY glPopClientAttrib(void);
+void GLAPIENTRY glPopMatrix(void);
+void GLAPIENTRY glPopName(void);
+void GLAPIENTRY glPrioritizeTextures(GLsizei,const GLuint*,const GLfloat*);
+void GLAPIENTRY glPushAttrib(GLbitfield);
+void GLAPIENTRY glPushClientAttrib(GLbitfield);
+void GLAPIENTRY glPushMatrix(void);
+void GLAPIENTRY glPushName(GLuint);
+void GLAPIENTRY glRasterPos2d(GLdouble,GLdouble);
+void GLAPIENTRY glRasterPos2dv(const GLdouble*);
+void GLAPIENTRY glRasterPos2f(GLfloat,GLfloat);
+void GLAPIENTRY glRasterPos2fv(const GLfloat*);
+void GLAPIENTRY glRasterPos2i(GLint,GLint);
+void GLAPIENTRY glRasterPos2iv(const GLint*);
+void GLAPIENTRY glRasterPos2s(GLshort,GLshort);
+void GLAPIENTRY glRasterPos2sv(const GLshort*);
+void GLAPIENTRY glRasterPos3d(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glRasterPos3dv(const GLdouble*);
+void GLAPIENTRY glRasterPos3f(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glRasterPos3fv(const GLfloat*);
+void GLAPIENTRY glRasterPos3i(GLint,GLint,GLint);
+void GLAPIENTRY glRasterPos3iv(const GLint*);
+void GLAPIENTRY glRasterPos3s(GLshort,GLshort,GLshort);
+void GLAPIENTRY glRasterPos3sv(const GLshort*);
+void GLAPIENTRY glRasterPos4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glRasterPos4dv(const GLdouble*);
+void GLAPIENTRY glRasterPos4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glRasterPos4fv(const GLfloat*);
+void GLAPIENTRY glRasterPos4i(GLint,GLint,GLint,GLint);
+void GLAPIENTRY glRasterPos4iv(const GLint*);
+void GLAPIENTRY glRasterPos4s(GLshort,GLshort,GLshort,GLshort);
+void GLAPIENTRY glRasterPos4sv(const GLshort*);
+void GLAPIENTRY glReadBuffer(GLenum);
+void GLAPIENTRY glReadPixels(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*);
+void GLAPIENTRY glRectd(GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glRectdv(const GLdouble*,const GLdouble*);
+void GLAPIENTRY glRectf(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glRectfv(const GLfloat*,const GLfloat*);
+void GLAPIENTRY glRecti(GLint,GLint,GLint,GLint);
+void GLAPIENTRY glRectiv(const GLint*,const GLint*);
+void GLAPIENTRY glRects(GLshort,GLshort,GLshort,GLshort);
+void GLAPIENTRY glRectsv(const GLshort*,const GLshort*);
+GLint GLAPIENTRY glRenderMode(GLenum);
+void GLAPIENTRY glRotated(GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glRotatef(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glScaled(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glScalef(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glScissor(GLint,GLint,GLsizei,GLsizei);
+void GLAPIENTRY glSelectBuffer(GLsizei,GLuint*);
+void GLAPIENTRY glShadeModel(GLenum);
+void GLAPIENTRY glStencilFunc(GLenum,GLint,GLuint);
+void GLAPIENTRY glStencilMask(GLuint);
+void GLAPIENTRY glStencilOp(GLenum,GLenum,GLenum);
+void GLAPIENTRY glTexCoord1d(GLdouble);
+void GLAPIENTRY glTexCoord1dv(const GLdouble*);
+void GLAPIENTRY glTexCoord1f(GLfloat);
+void GLAPIENTRY glTexCoord1fv(const GLfloat*);
+void GLAPIENTRY glTexCoord1i(GLint);
+void GLAPIENTRY glTexCoord1iv(const GLint*);
+void GLAPIENTRY glTexCoord1s(GLshort);
+void GLAPIENTRY glTexCoord1sv(const GLshort*);
+void GLAPIENTRY glTexCoord2d(GLdouble,GLdouble);
+void GLAPIENTRY glTexCoord2dv(const GLdouble*);
+void GLAPIENTRY glTexCoord2f(GLfloat,GLfloat);
+void GLAPIENTRY glTexCoord2fv(const GLfloat*);
+void GLAPIENTRY glTexCoord2i(GLint,GLint);
+void GLAPIENTRY glTexCoord2iv(const GLint*);
+void GLAPIENTRY glTexCoord2s(GLshort,GLshort);
+void GLAPIENTRY glTexCoord2sv(const GLshort*);
+void GLAPIENTRY glTexCoord3d(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glTexCoord3dv(const GLdouble*);
+void GLAPIENTRY glTexCoord3f(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glTexCoord3fv(const GLfloat*);
+void GLAPIENTRY glTexCoord3i(GLint,GLint,GLint);
+void GLAPIENTRY glTexCoord3iv(const GLint*);
+void GLAPIENTRY glTexCoord3s(GLshort,GLshort,GLshort);
+void GLAPIENTRY glTexCoord3sv(const GLshort*);
+void GLAPIENTRY glTexCoord4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glTexCoord4dv(const GLdouble*);
+void GLAPIENTRY glTexCoord4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glTexCoord4fv(const GLfloat*);
+void GLAPIENTRY glTexCoord4i(GLint,GLint,GLint,GLint);
+void GLAPIENTRY glTexCoord4iv(const GLint*);
+void GLAPIENTRY glTexCoord4s(GLshort,GLshort,GLshort,GLshort);
+void GLAPIENTRY glTexCoord4sv(const GLshort*);
+void GLAPIENTRY glTexCoordPointer(GLint,GLenum,GLsizei,const GLvoid*);
+void GLAPIENTRY glTexEnvf(GLenum,GLenum,GLfloat);
+void GLAPIENTRY glTexEnvfv(GLenum,GLenum,const GLfloat*);
+void GLAPIENTRY glTexEnvi(GLenum,GLenum,GLint);
+void GLAPIENTRY glTexEnviv(GLenum,GLenum,const GLint*);
+void GLAPIENTRY glTexGend(GLenum,GLenum,GLdouble);
+void GLAPIENTRY glTexGendv(GLenum,GLenum,const GLdouble*);
+void GLAPIENTRY glTexGenf(GLenum,GLenum,GLfloat);
+void GLAPIENTRY glTexGenfv(GLenum,GLenum,const GLfloat*);
+void GLAPIENTRY glTexGeni(GLenum,GLenum,GLint);
+void GLAPIENTRY glTexGeniv(GLenum,GLenum,const GLint*);
+void GLAPIENTRY glTexImage1D(GLenum,GLint,GLint,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+void GLAPIENTRY glTexImage2D(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+void GLAPIENTRY glTexParameterf(GLenum,GLenum,GLfloat);
+void GLAPIENTRY glTexParameterfv(GLenum,GLenum,const GLfloat*);
+void GLAPIENTRY glTexParameteri(GLenum,GLenum,GLint);
+void GLAPIENTRY glTexParameteriv(GLenum,GLenum,const GLint*);
+void GLAPIENTRY glTexSubImage1D(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+void GLAPIENTRY glTexSubImage2D(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+void GLAPIENTRY glTranslated(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glTranslatef(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glVertex2d(GLdouble,GLdouble);
+void GLAPIENTRY glVertex2dv(const GLdouble*);
+void GLAPIENTRY glVertex2f(GLfloat,GLfloat);
+void GLAPIENTRY glVertex2fv(const GLfloat*);
+void GLAPIENTRY glVertex2i(GLint,GLint);
+void GLAPIENTRY glVertex2iv(const GLint*);
+void GLAPIENTRY glVertex2s(GLshort,GLshort);
+void GLAPIENTRY glVertex2sv(const GLshort*);
+void GLAPIENTRY glVertex3d(GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glVertex3dv(const GLdouble*);
+void GLAPIENTRY glVertex3f(GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glVertex3fv(const GLfloat*);
+void GLAPIENTRY glVertex3i(GLint,GLint,GLint);
+void GLAPIENTRY glVertex3iv(const GLint*);
+void GLAPIENTRY glVertex3s(GLshort,GLshort,GLshort);
+void GLAPIENTRY glVertex3sv(const GLshort*);
+void GLAPIENTRY glVertex4d(GLdouble,GLdouble,GLdouble,GLdouble);
+void GLAPIENTRY glVertex4dv(const GLdouble*);
+void GLAPIENTRY glVertex4f(GLfloat,GLfloat,GLfloat,GLfloat);
+void GLAPIENTRY glVertex4fv(const GLfloat*);
+void GLAPIENTRY glVertex4i(GLint,GLint,GLint,GLint);
+void GLAPIENTRY glVertex4iv(const GLint*);
+void GLAPIENTRY glVertex4s(GLshort,GLshort,GLshort,GLshort);
+void GLAPIENTRY glVertex4sv(const GLshort*);
+void GLAPIENTRY glVertexPointer(GLint,GLenum,GLsizei,const GLvoid*);
+void GLAPIENTRY glViewport(GLint,GLint,GLsizei,GLsizei);
+
+#endif /* __WINE_WGL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h
new file mode 100644
index 00000000..8d235017
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wgl_driver.h
@@ -0,0 +1,2862 @@
+/* Automatically generated from http://www.opengl.org/registry/api files; DO NOT EDIT! */
+
+#ifndef __WINE_WGL_DRIVER_H
+#define __WINE_WGL_DRIVER_H
+
+#ifndef WINE_GLAPI
+#define WINE_GLAPI
+#endif
+
+#define WINE_WGL_DRIVER_VERSION 10
+
+struct wgl_context;
+struct wgl_pbuffer;
+
+struct opengl_funcs
+{
+ struct
+ {
+ BOOL (WINE_GLAPI *p_wglCopyContext)(struct wgl_context *,struct wgl_context *,UINT);
+ struct wgl_context * (WINE_GLAPI *p_wglCreateContext)(HDC);
+ void (WINE_GLAPI *p_wglDeleteContext)(struct wgl_context *);
+ INT (WINE_GLAPI *p_wglDescribePixelFormat)(HDC,INT,UINT,PIXELFORMATDESCRIPTOR *);
+ INT (WINE_GLAPI *p_wglGetPixelFormat)(HDC);
+ PROC (WINE_GLAPI *p_wglGetProcAddress)(LPCSTR);
+ BOOL (WINE_GLAPI *p_wglMakeCurrent)(HDC,struct wgl_context *);
+ BOOL (WINE_GLAPI *p_wglSetPixelFormat)(HDC,INT,const PIXELFORMATDESCRIPTOR *);
+ BOOL (WINE_GLAPI *p_wglShareLists)(struct wgl_context *,struct wgl_context *);
+ BOOL (WINE_GLAPI *p_wglSwapBuffers)(HDC);
+ } wgl;
+
+ struct
+ {
+ void (WINE_GLAPI *p_glAccum)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glAlphaFunc)(GLenum,GLfloat);
+ GLboolean (WINE_GLAPI *p_glAreTexturesResident)(GLsizei,const GLuint*,GLboolean*);
+ void (WINE_GLAPI *p_glArrayElement)(GLint);
+ void (WINE_GLAPI *p_glBegin)(GLenum);
+ void (WINE_GLAPI *p_glBindTexture)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBitmap)(GLsizei,GLsizei,GLfloat,GLfloat,GLfloat,GLfloat,const GLubyte*);
+ void (WINE_GLAPI *p_glBlendFunc)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glCallList)(GLuint);
+ void (WINE_GLAPI *p_glCallLists)(GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glClear)(GLbitfield);
+ void (WINE_GLAPI *p_glClearAccum)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glClearColor)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glClearDepth)(GLdouble);
+ void (WINE_GLAPI *p_glClearIndex)(GLfloat);
+ void (WINE_GLAPI *p_glClearStencil)(GLint);
+ void (WINE_GLAPI *p_glClipPlane)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glColor3b)(GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glColor3bv)(const GLbyte*);
+ void (WINE_GLAPI *p_glColor3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glColor3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glColor3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glColor3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glColor3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glColor3iv)(const GLint*);
+ void (WINE_GLAPI *p_glColor3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glColor3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glColor3ub)(GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glColor3ubv)(const GLubyte*);
+ void (WINE_GLAPI *p_glColor3ui)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glColor3uiv)(const GLuint*);
+ void (WINE_GLAPI *p_glColor3us)(GLushort,GLushort,GLushort);
+ void (WINE_GLAPI *p_glColor3usv)(const GLushort*);
+ void (WINE_GLAPI *p_glColor4b)(GLbyte,GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glColor4bv)(const GLbyte*);
+ void (WINE_GLAPI *p_glColor4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glColor4dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glColor4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glColor4fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glColor4i)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glColor4iv)(const GLint*);
+ void (WINE_GLAPI *p_glColor4s)(GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glColor4sv)(const GLshort*);
+ void (WINE_GLAPI *p_glColor4ub)(GLubyte,GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glColor4ubv)(const GLubyte*);
+ void (WINE_GLAPI *p_glColor4ui)(GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glColor4uiv)(const GLuint*);
+ void (WINE_GLAPI *p_glColor4us)(GLushort,GLushort,GLushort,GLushort);
+ void (WINE_GLAPI *p_glColor4usv)(const GLushort*);
+ void (WINE_GLAPI *p_glColorMask)(GLboolean,GLboolean,GLboolean,GLboolean);
+ void (WINE_GLAPI *p_glColorMaterial)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glColorPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCopyPixels)(GLint,GLint,GLsizei,GLsizei,GLenum);
+ void (WINE_GLAPI *p_glCopyTexImage1D)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyTexImage2D)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyTexSubImage1D)(GLenum,GLint,GLint,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyTexSubImage2D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCullFace)(GLenum);
+ void (WINE_GLAPI *p_glDeleteLists)(GLuint,GLsizei);
+ void (WINE_GLAPI *p_glDeleteTextures)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDepthFunc)(GLenum);
+ void (WINE_GLAPI *p_glDepthMask)(GLboolean);
+ void (WINE_GLAPI *p_glDepthRange)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glDisable)(GLenum);
+ void (WINE_GLAPI *p_glDisableClientState)(GLenum);
+ void (WINE_GLAPI *p_glDrawArrays)(GLenum,GLint,GLsizei);
+ void (WINE_GLAPI *p_glDrawBuffer)(GLenum);
+ void (WINE_GLAPI *p_glDrawElements)(GLenum,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glDrawPixels)(GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glEdgeFlag)(GLboolean);
+ void (WINE_GLAPI *p_glEdgeFlagPointer)(GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glEdgeFlagv)(const GLboolean*);
+ void (WINE_GLAPI *p_glEnable)(GLenum);
+ void (WINE_GLAPI *p_glEnableClientState)(GLenum);
+ void (WINE_GLAPI *p_glEnd)(void);
+ void (WINE_GLAPI *p_glEndList)(void);
+ void (WINE_GLAPI *p_glEvalCoord1d)(GLdouble);
+ void (WINE_GLAPI *p_glEvalCoord1dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glEvalCoord1f)(GLfloat);
+ void (WINE_GLAPI *p_glEvalCoord1fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glEvalCoord2d)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glEvalCoord2dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glEvalCoord2f)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glEvalCoord2fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glEvalMesh1)(GLenum,GLint,GLint);
+ void (WINE_GLAPI *p_glEvalMesh2)(GLenum,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glEvalPoint1)(GLint);
+ void (WINE_GLAPI *p_glEvalPoint2)(GLint,GLint);
+ void (WINE_GLAPI *p_glFeedbackBuffer)(GLsizei,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glFinish)(void);
+ void (WINE_GLAPI *p_glFlush)(void);
+ void (WINE_GLAPI *p_glFogf)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glFogfv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glFogi)(GLenum,GLint);
+ void (WINE_GLAPI *p_glFogiv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glFrontFace)(GLenum);
+ void (WINE_GLAPI *p_glFrustum)(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+ GLuint (WINE_GLAPI *p_glGenLists)(GLsizei);
+ void (WINE_GLAPI *p_glGenTextures)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGetBooleanv)(GLenum,GLboolean*);
+ void (WINE_GLAPI *p_glGetClipPlane)(GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetDoublev)(GLenum,GLdouble*);
+ GLenum (WINE_GLAPI *p_glGetError)(void);
+ void (WINE_GLAPI *p_glGetFloatv)(GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetIntegerv)(GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetLightfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetLightiv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMapdv)(GLenum,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetMapfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMapiv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMaterialfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMaterialiv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetPixelMapfv)(GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPixelMapuiv)(GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetPixelMapusv)(GLenum,GLushort*);
+ void (WINE_GLAPI *p_glGetPointerv)(GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetPolygonStipple)(GLubyte*);
+ const GLubyte * (WINE_GLAPI *p_glGetString)(GLenum);
+ void (WINE_GLAPI *p_glGetTexEnvfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTexEnviv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTexGendv)(GLenum,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetTexGenfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTexGeniv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTexImage)(GLenum,GLint,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetTexLevelParameterfv)(GLenum,GLint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTexLevelParameteriv)(GLenum,GLint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTexParameterfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTexParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glHint)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glIndexMask)(GLuint);
+ void (WINE_GLAPI *p_glIndexPointer)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glIndexd)(GLdouble);
+ void (WINE_GLAPI *p_glIndexdv)(const GLdouble*);
+ void (WINE_GLAPI *p_glIndexf)(GLfloat);
+ void (WINE_GLAPI *p_glIndexfv)(const GLfloat*);
+ void (WINE_GLAPI *p_glIndexi)(GLint);
+ void (WINE_GLAPI *p_glIndexiv)(const GLint*);
+ void (WINE_GLAPI *p_glIndexs)(GLshort);
+ void (WINE_GLAPI *p_glIndexsv)(const GLshort*);
+ void (WINE_GLAPI *p_glIndexub)(GLubyte);
+ void (WINE_GLAPI *p_glIndexubv)(const GLubyte*);
+ void (WINE_GLAPI *p_glInitNames)(void);
+ void (WINE_GLAPI *p_glInterleavedArrays)(GLenum,GLsizei,const GLvoid*);
+ GLboolean (WINE_GLAPI *p_glIsEnabled)(GLenum);
+ GLboolean (WINE_GLAPI *p_glIsList)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsTexture)(GLuint);
+ void (WINE_GLAPI *p_glLightModelf)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glLightModelfv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glLightModeli)(GLenum,GLint);
+ void (WINE_GLAPI *p_glLightModeliv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glLightf)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glLightfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glLighti)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glLightiv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glLineStipple)(GLint,GLushort);
+ void (WINE_GLAPI *p_glLineWidth)(GLfloat);
+ void (WINE_GLAPI *p_glListBase)(GLuint);
+ void (WINE_GLAPI *p_glLoadIdentity)(void);
+ void (WINE_GLAPI *p_glLoadMatrixd)(const GLdouble*);
+ void (WINE_GLAPI *p_glLoadMatrixf)(const GLfloat*);
+ void (WINE_GLAPI *p_glLoadName)(GLuint);
+ void (WINE_GLAPI *p_glLogicOp)(GLenum);
+ void (WINE_GLAPI *p_glMap1d)(GLenum,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+ void (WINE_GLAPI *p_glMap1f)(GLenum,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glMap2d)(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+ void (WINE_GLAPI *p_glMap2f)(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glMapGrid1d)(GLint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMapGrid1f)(GLint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMapGrid2d)(GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMapGrid2f)(GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMaterialf)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMaterialfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMateriali)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glMaterialiv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMatrixMode)(GLenum);
+ void (WINE_GLAPI *p_glMultMatrixd)(const GLdouble*);
+ void (WINE_GLAPI *p_glMultMatrixf)(const GLfloat*);
+ void (WINE_GLAPI *p_glNewList)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glNormal3b)(GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glNormal3bv)(const GLbyte*);
+ void (WINE_GLAPI *p_glNormal3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glNormal3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glNormal3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glNormal3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glNormal3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glNormal3iv)(const GLint*);
+ void (WINE_GLAPI *p_glNormal3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glNormal3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glNormalPointer)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glOrtho)(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glPassThrough)(GLfloat);
+ void (WINE_GLAPI *p_glPixelMapfv)(GLenum,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glPixelMapuiv)(GLenum,GLint,const GLuint*);
+ void (WINE_GLAPI *p_glPixelMapusv)(GLenum,GLint,const GLushort*);
+ void (WINE_GLAPI *p_glPixelStoref)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPixelStorei)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPixelTransferf)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPixelTransferi)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPixelZoom)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glPointSize)(GLfloat);
+ void (WINE_GLAPI *p_glPolygonMode)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glPolygonOffset)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glPolygonStipple)(const GLubyte*);
+ void (WINE_GLAPI *p_glPopAttrib)(void);
+ void (WINE_GLAPI *p_glPopClientAttrib)(void);
+ void (WINE_GLAPI *p_glPopMatrix)(void);
+ void (WINE_GLAPI *p_glPopName)(void);
+ void (WINE_GLAPI *p_glPrioritizeTextures)(GLsizei,const GLuint*,const GLfloat*);
+ void (WINE_GLAPI *p_glPushAttrib)(GLbitfield);
+ void (WINE_GLAPI *p_glPushClientAttrib)(GLbitfield);
+ void (WINE_GLAPI *p_glPushMatrix)(void);
+ void (WINE_GLAPI *p_glPushName)(GLuint);
+ void (WINE_GLAPI *p_glRasterPos2d)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glRasterPos2dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glRasterPos2f)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glRasterPos2fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glRasterPos2i)(GLint,GLint);
+ void (WINE_GLAPI *p_glRasterPos2iv)(const GLint*);
+ void (WINE_GLAPI *p_glRasterPos2s)(GLshort,GLshort);
+ void (WINE_GLAPI *p_glRasterPos2sv)(const GLshort*);
+ void (WINE_GLAPI *p_glRasterPos3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glRasterPos3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glRasterPos3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glRasterPos3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glRasterPos3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glRasterPos3iv)(const GLint*);
+ void (WINE_GLAPI *p_glRasterPos3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glRasterPos3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glRasterPos4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glRasterPos4dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glRasterPos4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glRasterPos4fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glRasterPos4i)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glRasterPos4iv)(const GLint*);
+ void (WINE_GLAPI *p_glRasterPos4s)(GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glRasterPos4sv)(const GLshort*);
+ void (WINE_GLAPI *p_glReadBuffer)(GLenum);
+ void (WINE_GLAPI *p_glReadPixels)(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glRectd)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glRectdv)(const GLdouble*,const GLdouble*);
+ void (WINE_GLAPI *p_glRectf)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glRectfv)(const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glRecti)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glRectiv)(const GLint*,const GLint*);
+ void (WINE_GLAPI *p_glRects)(GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glRectsv)(const GLshort*,const GLshort*);
+ GLint (WINE_GLAPI *p_glRenderMode)(GLenum);
+ void (WINE_GLAPI *p_glRotated)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glRotatef)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glScaled)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glScalef)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glScissor)(GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glSelectBuffer)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glShadeModel)(GLenum);
+ void (WINE_GLAPI *p_glStencilFunc)(GLenum,GLint,GLuint);
+ void (WINE_GLAPI *p_glStencilMask)(GLuint);
+ void (WINE_GLAPI *p_glStencilOp)(GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glTexCoord1d)(GLdouble);
+ void (WINE_GLAPI *p_glTexCoord1dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glTexCoord1f)(GLfloat);
+ void (WINE_GLAPI *p_glTexCoord1fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord1i)(GLint);
+ void (WINE_GLAPI *p_glTexCoord1iv)(const GLint*);
+ void (WINE_GLAPI *p_glTexCoord1s)(GLshort);
+ void (WINE_GLAPI *p_glTexCoord1sv)(const GLshort*);
+ void (WINE_GLAPI *p_glTexCoord2d)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glTexCoord2dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glTexCoord2f)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord2fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord2i)(GLint,GLint);
+ void (WINE_GLAPI *p_glTexCoord2iv)(const GLint*);
+ void (WINE_GLAPI *p_glTexCoord2s)(GLshort,GLshort);
+ void (WINE_GLAPI *p_glTexCoord2sv)(const GLshort*);
+ void (WINE_GLAPI *p_glTexCoord3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glTexCoord3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glTexCoord3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glTexCoord3iv)(const GLint*);
+ void (WINE_GLAPI *p_glTexCoord3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glTexCoord3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glTexCoord4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glTexCoord4dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glTexCoord4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord4fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord4i)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glTexCoord4iv)(const GLint*);
+ void (WINE_GLAPI *p_glTexCoord4s)(GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glTexCoord4sv)(const GLshort*);
+ void (WINE_GLAPI *p_glTexCoordPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glTexEnvf)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glTexEnvfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glTexEnvi)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glTexEnviv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTexGend)(GLenum,GLenum,GLdouble);
+ void (WINE_GLAPI *p_glTexGendv)(GLenum,GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glTexGenf)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glTexGenfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glTexGeni)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glTexGeniv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTexImage1D)(GLenum,GLint,GLint,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexImage2D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexParameterf)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glTexParameterfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glTexParameteri)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glTexParameteriv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTexSubImage1D)(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexSubImage2D)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTranslated)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glTranslatef)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertex2d)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertex2dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glVertex2f)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertex2fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glVertex2i)(GLint,GLint);
+ void (WINE_GLAPI *p_glVertex2iv)(const GLint*);
+ void (WINE_GLAPI *p_glVertex2s)(GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertex2sv)(const GLshort*);
+ void (WINE_GLAPI *p_glVertex3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertex3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glVertex3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertex3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glVertex3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertex3iv)(const GLint*);
+ void (WINE_GLAPI *p_glVertex3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertex3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glVertex4d)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertex4dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glVertex4f)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertex4fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glVertex4i)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertex4iv)(const GLint*);
+ void (WINE_GLAPI *p_glVertex4s)(GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertex4sv)(const GLshort*);
+ void (WINE_GLAPI *p_glVertexPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glViewport)(GLint,GLint,GLsizei,GLsizei);
+ } gl;
+
+ struct
+ {
+ void (WINE_GLAPI *p_glActiveProgramEXT)(GLuint);
+ void (WINE_GLAPI *p_glActiveShaderProgram)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glActiveStencilFaceEXT)(GLenum);
+ void (WINE_GLAPI *p_glActiveTexture)(GLenum);
+ void (WINE_GLAPI *p_glActiveTextureARB)(GLenum);
+ void (WINE_GLAPI *p_glActiveVaryingNV)(GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glAlphaFragmentOp1ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glAlphaFragmentOp2ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glAlphaFragmentOp3ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glApplyTextureEXT)(GLenum);
+ GLboolean (WINE_GLAPI *p_glAreProgramsResidentNV)(GLsizei,const GLuint*,GLboolean*);
+ GLboolean (WINE_GLAPI *p_glAreTexturesResidentEXT)(GLsizei,const GLuint*,GLboolean*);
+ void (WINE_GLAPI *p_glArrayElementEXT)(GLint);
+ void (WINE_GLAPI *p_glArrayObjectATI)(GLenum,GLint,GLenum,GLsizei,GLuint,GLuint);
+ void (WINE_GLAPI *p_glAsyncMarkerSGIX)(GLuint);
+ void (WINE_GLAPI *p_glAttachObjectARB)(GLhandleARB,GLhandleARB);
+ void (WINE_GLAPI *p_glAttachShader)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glBeginConditionalRender)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glBeginConditionalRenderNV)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glBeginFragmentShaderATI)(void);
+ void (WINE_GLAPI *p_glBeginOcclusionQueryNV)(GLuint);
+ void (WINE_GLAPI *p_glBeginPerfMonitorAMD)(GLuint);
+ void (WINE_GLAPI *p_glBeginQuery)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBeginQueryARB)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBeginQueryIndexed)(GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glBeginTransformFeedback)(GLenum);
+ void (WINE_GLAPI *p_glBeginTransformFeedbackEXT)(GLenum);
+ void (WINE_GLAPI *p_glBeginTransformFeedbackNV)(GLenum);
+ void (WINE_GLAPI *p_glBeginVertexShaderEXT)(void);
+ void (WINE_GLAPI *p_glBeginVideoCaptureNV)(GLuint);
+ void (WINE_GLAPI *p_glBindAttribLocation)(GLuint,GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glBindAttribLocationARB)(GLhandleARB,GLuint,const GLcharARB*);
+ void (WINE_GLAPI *p_glBindBuffer)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindBufferARB)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindBufferBase)(GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glBindBufferBaseEXT)(GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glBindBufferBaseNV)(GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glBindBufferOffsetEXT)(GLenum,GLuint,GLuint,GLintptr);
+ void (WINE_GLAPI *p_glBindBufferOffsetNV)(GLenum,GLuint,GLuint,GLintptr);
+ void (WINE_GLAPI *p_glBindBufferRange)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glBindBufferRangeEXT)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glBindBufferRangeNV)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glBindFragDataLocation)(GLuint,GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glBindFragDataLocationEXT)(GLuint,GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glBindFragDataLocationIndexed)(GLuint,GLuint,GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glBindFragmentShaderATI)(GLuint);
+ void (WINE_GLAPI *p_glBindFramebuffer)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindFramebufferEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindImageTexture)(GLuint,GLuint,GLint,GLboolean,GLint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBindImageTextureEXT)(GLuint,GLuint,GLint,GLboolean,GLint,GLenum,GLint);
+ GLuint (WINE_GLAPI *p_glBindLightParameterEXT)(GLenum,GLenum);
+ GLuint (WINE_GLAPI *p_glBindMaterialParameterEXT)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glBindMultiTextureEXT)(GLenum,GLenum,GLuint);
+ GLuint (WINE_GLAPI *p_glBindParameterEXT)(GLenum);
+ void (WINE_GLAPI *p_glBindProgramARB)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindProgramNV)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindProgramPipeline)(GLuint);
+ void (WINE_GLAPI *p_glBindRenderbuffer)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindRenderbufferEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindSampler)(GLuint,GLuint);
+ GLuint (WINE_GLAPI *p_glBindTexGenParameterEXT)(GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBindTextureEXT)(GLenum,GLuint);
+ GLuint (WINE_GLAPI *p_glBindTextureUnitParameterEXT)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glBindTransformFeedback)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindTransformFeedbackNV)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glBindVertexArray)(GLuint);
+ void (WINE_GLAPI *p_glBindVertexArrayAPPLE)(GLuint);
+ void (WINE_GLAPI *p_glBindVertexBuffer)(GLuint,GLuint,GLintptr,GLsizei);
+ void (WINE_GLAPI *p_glBindVertexShaderEXT)(GLuint);
+ void (WINE_GLAPI *p_glBindVideoCaptureStreamBufferNV)(GLuint,GLuint,GLenum,GLintptrARB);
+ void (WINE_GLAPI *p_glBindVideoCaptureStreamTextureNV)(GLuint,GLuint,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glBinormal3bEXT)(GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glBinormal3bvEXT)(const GLbyte*);
+ void (WINE_GLAPI *p_glBinormal3dEXT)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glBinormal3dvEXT)(const GLdouble*);
+ void (WINE_GLAPI *p_glBinormal3fEXT)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glBinormal3fvEXT)(const GLfloat*);
+ void (WINE_GLAPI *p_glBinormal3iEXT)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glBinormal3ivEXT)(const GLint*);
+ void (WINE_GLAPI *p_glBinormal3sEXT)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glBinormal3svEXT)(const GLshort*);
+ void (WINE_GLAPI *p_glBinormalPointerEXT)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glBlendColor)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glBlendColorEXT)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glBlendEquation)(GLenum);
+ void (WINE_GLAPI *p_glBlendEquationEXT)(GLenum);
+ void (WINE_GLAPI *p_glBlendEquationIndexedAMD)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationSeparate)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationSeparateEXT)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationSeparateIndexedAMD)(GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationSeparatei)(GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationSeparateiARB)(GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationi)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glBlendEquationiARB)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncIndexedAMD)(GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncSeparate)(GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncSeparateEXT)(GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncSeparateINGR)(GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncSeparateIndexedAMD)(GLuint,GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncSeparatei)(GLuint,GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFuncSeparateiARB)(GLuint,GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFunci)(GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlendFunciARB)(GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glBlitFramebuffer)(GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum);
+ void (WINE_GLAPI *p_glBlitFramebufferEXT)(GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum);
+ void (WINE_GLAPI *p_glBufferAddressRangeNV)(GLenum,GLuint,UINT64,GLsizeiptr);
+ void (WINE_GLAPI *p_glBufferData)(GLenum,GLsizeiptr,const GLvoid*,GLenum);
+ void (WINE_GLAPI *p_glBufferDataARB)(GLenum,GLsizeiptrARB,const GLvoid*,GLenum);
+ void (WINE_GLAPI *p_glBufferParameteriAPPLE)(GLenum,GLenum,GLint);
+ GLuint (WINE_GLAPI *p_glBufferRegionEnabled)(void);
+ void (WINE_GLAPI *p_glBufferSubData)(GLenum,GLintptr,GLsizeiptr,const GLvoid*);
+ void (WINE_GLAPI *p_glBufferSubDataARB)(GLenum,GLintptrARB,GLsizeiptrARB,const GLvoid*);
+ GLenum (WINE_GLAPI *p_glCheckFramebufferStatus)(GLenum);
+ GLenum (WINE_GLAPI *p_glCheckFramebufferStatusEXT)(GLenum);
+ GLenum (WINE_GLAPI *p_glCheckNamedFramebufferStatusEXT)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glClampColor)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glClampColorARB)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glClearBufferData)(GLenum,GLenum,GLenum,GLenum,const void*);
+ void (WINE_GLAPI *p_glClearBufferSubData)(GLenum,GLenum,GLintptr,GLsizeiptr,GLenum,GLenum,const void*);
+ void (WINE_GLAPI *p_glClearBufferfi)(GLenum,GLint,GLfloat,GLint);
+ void (WINE_GLAPI *p_glClearBufferfv)(GLenum,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glClearBufferiv)(GLenum,GLint,const GLint*);
+ void (WINE_GLAPI *p_glClearBufferuiv)(GLenum,GLint,const GLuint*);
+ void (WINE_GLAPI *p_glClearColorIiEXT)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glClearColorIuiEXT)(GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glClearDepthdNV)(GLdouble);
+ void (WINE_GLAPI *p_glClearDepthf)(GLfloat);
+ void (WINE_GLAPI *p_glClearNamedBufferDataEXT)(GLuint,GLenum,GLenum,GLenum,const void*);
+ void (WINE_GLAPI *p_glClearNamedBufferSubDataEXT)(GLuint,GLenum,GLenum,GLenum,GLsizeiptr,GLsizeiptr,const void*);
+ void (WINE_GLAPI *p_glClientActiveTexture)(GLenum);
+ void (WINE_GLAPI *p_glClientActiveTextureARB)(GLenum);
+ void (WINE_GLAPI *p_glClientActiveVertexStreamATI)(GLenum);
+ void (WINE_GLAPI *p_glClientAttribDefaultEXT)(GLbitfield);
+ GLenum (WINE_GLAPI *p_glClientWaitSync)(GLvoid*,GLbitfield,UINT64);
+ void (WINE_GLAPI *p_glColor3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glColor3fVertex3fvSUN)(const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glColor3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glColor3hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glColor4fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glColor4fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glColor4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glColor4hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glColor4ubVertex2fSUN)(GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glColor4ubVertex2fvSUN)(const GLubyte*,const GLfloat*);
+ void (WINE_GLAPI *p_glColor4ubVertex3fSUN)(GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glColor4ubVertex3fvSUN)(const GLubyte*,const GLfloat*);
+ void (WINE_GLAPI *p_glColorFormatNV)(GLint,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glColorFragmentOp1ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glColorFragmentOp2ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glColorFragmentOp3ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glColorMaskIndexedEXT)(GLuint,GLboolean,GLboolean,GLboolean,GLboolean);
+ void (WINE_GLAPI *p_glColorMaski)(GLuint,GLboolean,GLboolean,GLboolean,GLboolean);
+ void (WINE_GLAPI *p_glColorP3ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glColorP3uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glColorP4ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glColorP4uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glColorPointerEXT)(GLint,GLenum,GLsizei,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glColorPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glColorPointervINTEL)(GLint,GLenum,const GLvoid**);
+ void (WINE_GLAPI *p_glColorSubTable)(GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glColorSubTableEXT)(GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glColorTable)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glColorTableEXT)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glColorTableParameterfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glColorTableParameterfvSGI)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glColorTableParameteriv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glColorTableParameterivSGI)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glColorTableSGI)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glCombinerInputNV)(GLenum,GLenum,GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glCombinerOutputNV)(GLenum,GLenum,GLenum,GLenum,GLenum,GLenum,GLenum,GLboolean,GLboolean,GLboolean);
+ void (WINE_GLAPI *p_glCombinerParameterfNV)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glCombinerParameterfvNV)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glCombinerParameteriNV)(GLenum,GLint);
+ void (WINE_GLAPI *p_glCombinerParameterivNV)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glCombinerStageParameterfvNV)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glCompileShader)(GLuint);
+ void (WINE_GLAPI *p_glCompileShaderARB)(GLhandleARB);
+ void (WINE_GLAPI *p_glCompileShaderIncludeARB)(GLuint,GLsizei,const GLchar**,const GLint*);
+ void (WINE_GLAPI *p_glCompressedMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedMultiTexImage3DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexImage1D)(GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexImage1DARB)(GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexImage2D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexImage2DARB)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexImage3D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexImage3DARB)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexSubImage1D)(GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexSubImage1DARB)(GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexSubImage2D)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexSubImage2DARB)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTexSubImage3DARB)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTextureImage3DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glCompressedTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glConvolutionFilter1D)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glConvolutionFilter1DEXT)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glConvolutionFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glConvolutionFilter2DEXT)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glConvolutionParameterf)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glConvolutionParameterfEXT)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glConvolutionParameterfv)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glConvolutionParameterfvEXT)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glConvolutionParameteri)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glConvolutionParameteriEXT)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glConvolutionParameteriv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glConvolutionParameterivEXT)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glCopyBufferSubData)(GLenum,GLenum,GLintptr,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glCopyColorSubTable)(GLenum,GLsizei,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyColorSubTableEXT)(GLenum,GLsizei,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyColorTable)(GLenum,GLenum,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyColorTableSGI)(GLenum,GLenum,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyConvolutionFilter1D)(GLenum,GLenum,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyConvolutionFilter1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyConvolutionFilter2D)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyConvolutionFilter2DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyImageSubData)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyImageSubDataNV)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyPathNV)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glCopyTexImage1DEXT)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyTexImage2DEXT)(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyTexSubImage1DEXT)(GLenum,GLint,GLint,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyTexSubImage2DEXT)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyTexSubImage3DEXT)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint);
+ void (WINE_GLAPI *p_glCopyTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glCopyTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCopyTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glCoverFillPathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glCoverFillPathNV)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glCoverStrokePathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glCoverStrokePathNV)(GLuint,GLenum);
+ GLuint (WINE_GLAPI *p_glCreateProgram)(void);
+ GLhandleARB (WINE_GLAPI *p_glCreateProgramObjectARB)(void);
+ GLuint (WINE_GLAPI *p_glCreateShader)(GLenum);
+ GLhandleARB (WINE_GLAPI *p_glCreateShaderObjectARB)(GLenum);
+ GLuint (WINE_GLAPI *p_glCreateShaderProgramEXT)(GLenum,const GLchar*);
+ GLuint (WINE_GLAPI *p_glCreateShaderProgramv)(GLenum,GLsizei,const GLchar* const*);
+ GLvoid* (WINE_GLAPI *p_glCreateSyncFromCLeventARB)(void *,void *,GLbitfield);
+ void (WINE_GLAPI *p_glCullParameterdvEXT)(GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glCullParameterfvEXT)(GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glCurrentPaletteMatrixARB)(GLint);
+ void (WINE_GLAPI *p_glDebugMessageCallback)(void *,const void*);
+ void (WINE_GLAPI *p_glDebugMessageCallbackAMD)(void *,GLvoid*);
+ void (WINE_GLAPI *p_glDebugMessageCallbackARB)(void *,const GLvoid*);
+ void (WINE_GLAPI *p_glDebugMessageControl)(GLenum,GLenum,GLenum,GLsizei,const GLuint*,GLboolean);
+ void (WINE_GLAPI *p_glDebugMessageControlARB)(GLenum,GLenum,GLenum,GLsizei,const GLuint*,GLboolean);
+ void (WINE_GLAPI *p_glDebugMessageEnableAMD)(GLenum,GLenum,GLsizei,const GLuint*,GLboolean);
+ void (WINE_GLAPI *p_glDebugMessageInsert)(GLenum,GLenum,GLuint,GLenum,GLsizei,const GLchar*);
+ void (WINE_GLAPI *p_glDebugMessageInsertAMD)(GLenum,GLenum,GLuint,GLsizei,const GLchar*);
+ void (WINE_GLAPI *p_glDebugMessageInsertARB)(GLenum,GLenum,GLuint,GLenum,GLsizei,const GLchar*);
+ void (WINE_GLAPI *p_glDeformSGIX)(GLbitfield);
+ void (WINE_GLAPI *p_glDeformationMap3dSGIX)(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+ void (WINE_GLAPI *p_glDeformationMap3fSGIX)(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glDeleteAsyncMarkersSGIX)(GLuint,GLsizei);
+ void (WINE_GLAPI *p_glDeleteBufferRegion)(GLenum);
+ void (WINE_GLAPI *p_glDeleteBuffers)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteBuffersARB)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteFencesAPPLE)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteFencesNV)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteFragmentShaderATI)(GLuint);
+ void (WINE_GLAPI *p_glDeleteFramebuffers)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteFramebuffersEXT)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteNamedStringARB)(GLint,const GLchar*);
+ void (WINE_GLAPI *p_glDeleteNamesAMD)(GLenum,GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteObjectARB)(GLhandleARB);
+ void (WINE_GLAPI *p_glDeleteObjectBufferATI)(GLuint);
+ void (WINE_GLAPI *p_glDeleteOcclusionQueriesNV)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeletePathsNV)(GLuint,GLsizei);
+ void (WINE_GLAPI *p_glDeletePerfMonitorsAMD)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glDeleteProgram)(GLuint);
+ void (WINE_GLAPI *p_glDeleteProgramPipelines)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteProgramsARB)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteProgramsNV)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteQueries)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteQueriesARB)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteRenderbuffers)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteRenderbuffersEXT)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteSamplers)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteShader)(GLuint);
+ void (WINE_GLAPI *p_glDeleteSync)(GLvoid*);
+ void (WINE_GLAPI *p_glDeleteTexturesEXT)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteTransformFeedbacks)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteTransformFeedbacksNV)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteVertexArrays)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteVertexArraysAPPLE)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glDeleteVertexShaderEXT)(GLuint);
+ void (WINE_GLAPI *p_glDepthBoundsEXT)(GLclampd,GLclampd);
+ void (WINE_GLAPI *p_glDepthBoundsdNV)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glDepthRangeArrayv)(GLuint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glDepthRangeIndexed)(GLuint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glDepthRangedNV)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glDepthRangef)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glDetachObjectARB)(GLhandleARB,GLhandleARB);
+ void (WINE_GLAPI *p_glDetachShader)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glDetailTexFuncSGIS)(GLenum,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glDisableClientStateIndexedEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glDisableIndexedEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glDisableVariantClientStateEXT)(GLuint);
+ void (WINE_GLAPI *p_glDisableVertexAttribAPPLE)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glDisableVertexAttribArray)(GLuint);
+ void (WINE_GLAPI *p_glDisableVertexAttribArrayARB)(GLuint);
+ void (WINE_GLAPI *p_glDisablei)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glDispatchCompute)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glDispatchComputeIndirect)(GLintptr);
+ void (WINE_GLAPI *p_glDrawArraysEXT)(GLenum,GLint,GLsizei);
+ void (WINE_GLAPI *p_glDrawArraysIndirect)(GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glDrawArraysInstanced)(GLenum,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glDrawArraysInstancedARB)(GLenum,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glDrawArraysInstancedBaseInstance)(GLenum,GLint,GLsizei,GLsizei,GLuint);
+ void (WINE_GLAPI *p_glDrawArraysInstancedEXT)(GLenum,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glDrawBufferRegion)(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLint);
+ void (WINE_GLAPI *p_glDrawBuffers)(GLsizei,const GLenum*);
+ void (WINE_GLAPI *p_glDrawBuffersARB)(GLsizei,const GLenum*);
+ void (WINE_GLAPI *p_glDrawBuffersATI)(GLsizei,const GLenum*);
+ void (WINE_GLAPI *p_glDrawElementArrayAPPLE)(GLenum,GLint,GLsizei);
+ void (WINE_GLAPI *p_glDrawElementArrayATI)(GLenum,GLsizei);
+ void (WINE_GLAPI *p_glDrawElementsBaseVertex)(GLenum,GLsizei,GLenum,const GLvoid*,GLint);
+ void (WINE_GLAPI *p_glDrawElementsIndirect)(GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glDrawElementsInstanced)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei);
+ void (WINE_GLAPI *p_glDrawElementsInstancedARB)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei);
+ void (WINE_GLAPI *p_glDrawElementsInstancedBaseInstance)(GLenum,GLsizei,GLenum,const void*,GLsizei,GLuint);
+ void (WINE_GLAPI *p_glDrawElementsInstancedBaseVertex)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei,GLint);
+ void (WINE_GLAPI *p_glDrawElementsInstancedBaseVertexBaseInstance)(GLenum,GLsizei,GLenum,const void*,GLsizei,GLint,GLuint);
+ void (WINE_GLAPI *p_glDrawElementsInstancedEXT)(GLenum,GLsizei,GLenum,const GLvoid*,GLsizei);
+ void (WINE_GLAPI *p_glDrawMeshArraysSUN)(GLenum,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glDrawRangeElementArrayAPPLE)(GLenum,GLuint,GLuint,GLint,GLsizei);
+ void (WINE_GLAPI *p_glDrawRangeElementArrayATI)(GLenum,GLuint,GLuint,GLsizei);
+ void (WINE_GLAPI *p_glDrawRangeElements)(GLenum,GLuint,GLuint,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glDrawRangeElementsBaseVertex)(GLenum,GLuint,GLuint,GLsizei,GLenum,const GLvoid*,GLint);
+ void (WINE_GLAPI *p_glDrawRangeElementsEXT)(GLenum,GLuint,GLuint,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glDrawTransformFeedback)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glDrawTransformFeedbackInstanced)(GLenum,GLuint,GLsizei);
+ void (WINE_GLAPI *p_glDrawTransformFeedbackNV)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glDrawTransformFeedbackStream)(GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glDrawTransformFeedbackStreamInstanced)(GLenum,GLuint,GLuint,GLsizei);
+ void (WINE_GLAPI *p_glEdgeFlagFormatNV)(GLsizei);
+ void (WINE_GLAPI *p_glEdgeFlagPointerEXT)(GLsizei,GLsizei,const GLboolean*);
+ void (WINE_GLAPI *p_glEdgeFlagPointerListIBM)(GLint,const GLboolean**,GLint);
+ void (WINE_GLAPI *p_glElementPointerAPPLE)(GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glElementPointerATI)(GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glEnableClientStateIndexedEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glEnableIndexedEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glEnableVariantClientStateEXT)(GLuint);
+ void (WINE_GLAPI *p_glEnableVertexAttribAPPLE)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glEnableVertexAttribArray)(GLuint);
+ void (WINE_GLAPI *p_glEnableVertexAttribArrayARB)(GLuint);
+ void (WINE_GLAPI *p_glEnablei)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glEndConditionalRender)(void);
+ void (WINE_GLAPI *p_glEndConditionalRenderNV)(void);
+ void (WINE_GLAPI *p_glEndFragmentShaderATI)(void);
+ void (WINE_GLAPI *p_glEndOcclusionQueryNV)(void);
+ void (WINE_GLAPI *p_glEndPerfMonitorAMD)(GLuint);
+ void (WINE_GLAPI *p_glEndQuery)(GLenum);
+ void (WINE_GLAPI *p_glEndQueryARB)(GLenum);
+ void (WINE_GLAPI *p_glEndQueryIndexed)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glEndTransformFeedback)(void);
+ void (WINE_GLAPI *p_glEndTransformFeedbackEXT)(void);
+ void (WINE_GLAPI *p_glEndTransformFeedbackNV)(void);
+ void (WINE_GLAPI *p_glEndVertexShaderEXT)(void);
+ void (WINE_GLAPI *p_glEndVideoCaptureNV)(GLuint);
+ void (WINE_GLAPI *p_glEvalMapsNV)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glExecuteProgramNV)(GLenum,GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glExtractComponentEXT)(GLuint,GLuint,GLuint);
+ GLvoid* (WINE_GLAPI *p_glFenceSync)(GLenum,GLbitfield);
+ void (WINE_GLAPI *p_glFinalCombinerInputNV)(GLenum,GLenum,GLenum,GLenum);
+ GLint (WINE_GLAPI *p_glFinishAsyncSGIX)(GLuint*);
+ void (WINE_GLAPI *p_glFinishFenceAPPLE)(GLuint);
+ void (WINE_GLAPI *p_glFinishFenceNV)(GLuint);
+ void (WINE_GLAPI *p_glFinishObjectAPPLE)(GLenum,GLint);
+ void (WINE_GLAPI *p_glFinishTextureSUNX)(void);
+ void (WINE_GLAPI *p_glFlushMappedBufferRange)(GLenum,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glFlushMappedBufferRangeAPPLE)(GLenum,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glFlushMappedNamedBufferRangeEXT)(GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glFlushPixelDataRangeNV)(GLenum);
+ void (WINE_GLAPI *p_glFlushRasterSGIX)(void);
+ void (WINE_GLAPI *p_glFlushVertexArrayRangeAPPLE)(GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glFlushVertexArrayRangeNV)(void);
+ void (WINE_GLAPI *p_glFogCoordFormatNV)(GLenum,GLsizei);
+ void (WINE_GLAPI *p_glFogCoordPointer)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glFogCoordPointerEXT)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glFogCoordPointerListIBM)(GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glFogCoordd)(GLdouble);
+ void (WINE_GLAPI *p_glFogCoorddEXT)(GLdouble);
+ void (WINE_GLAPI *p_glFogCoorddv)(const GLdouble*);
+ void (WINE_GLAPI *p_glFogCoorddvEXT)(const GLdouble*);
+ void (WINE_GLAPI *p_glFogCoordf)(GLfloat);
+ void (WINE_GLAPI *p_glFogCoordfEXT)(GLfloat);
+ void (WINE_GLAPI *p_glFogCoordfv)(const GLfloat*);
+ void (WINE_GLAPI *p_glFogCoordfvEXT)(const GLfloat*);
+ void (WINE_GLAPI *p_glFogCoordhNV)(GLhalfNV);
+ void (WINE_GLAPI *p_glFogCoordhvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glFogFuncSGIS)(GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glFragmentColorMaterialSGIX)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glFragmentLightModelfSGIX)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glFragmentLightModelfvSGIX)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glFragmentLightModeliSGIX)(GLenum,GLint);
+ void (WINE_GLAPI *p_glFragmentLightModelivSGIX)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glFragmentLightfSGIX)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glFragmentLightfvSGIX)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glFragmentLightiSGIX)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glFragmentLightivSGIX)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glFragmentMaterialfSGIX)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glFragmentMaterialfvSGIX)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glFragmentMaterialiSGIX)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glFragmentMaterialivSGIX)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glFrameTerminatorGREMEDY)(void);
+ void (WINE_GLAPI *p_glFrameZoomSGIX)(GLint);
+ void (WINE_GLAPI *p_glFramebufferDrawBufferEXT)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glFramebufferDrawBuffersEXT)(GLuint,GLsizei,const GLenum*);
+ void (WINE_GLAPI *p_glFramebufferParameteri)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glFramebufferReadBufferEXT)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glFramebufferRenderbuffer)(GLenum,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glFramebufferRenderbufferEXT)(GLenum,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glFramebufferTexture)(GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTexture1D)(GLenum,GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTexture1DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTexture2D)(GLenum,GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTexture2DEXT)(GLenum,GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTexture3D)(GLenum,GLenum,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTexture3DEXT)(GLenum,GLenum,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTextureARB)(GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTextureEXT)(GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTextureFaceARB)(GLenum,GLenum,GLuint,GLint,GLenum);
+ void (WINE_GLAPI *p_glFramebufferTextureFaceEXT)(GLenum,GLenum,GLuint,GLint,GLenum);
+ void (WINE_GLAPI *p_glFramebufferTextureLayer)(GLenum,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTextureLayerARB)(GLenum,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glFramebufferTextureLayerEXT)(GLenum,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glFreeObjectBufferATI)(GLuint);
+ GLuint (WINE_GLAPI *p_glGenAsyncMarkersSGIX)(GLsizei);
+ void (WINE_GLAPI *p_glGenBuffers)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenBuffersARB)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenFencesAPPLE)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenFencesNV)(GLsizei,GLuint*);
+ GLuint (WINE_GLAPI *p_glGenFragmentShadersATI)(GLuint);
+ void (WINE_GLAPI *p_glGenFramebuffers)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenFramebuffersEXT)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenNamesAMD)(GLenum,GLuint,GLuint*);
+ void (WINE_GLAPI *p_glGenOcclusionQueriesNV)(GLsizei,GLuint*);
+ GLuint (WINE_GLAPI *p_glGenPathsNV)(GLsizei);
+ void (WINE_GLAPI *p_glGenPerfMonitorsAMD)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenProgramPipelines)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenProgramsARB)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenProgramsNV)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenQueries)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenQueriesARB)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenRenderbuffers)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenRenderbuffersEXT)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenSamplers)(GLsizei,GLuint*);
+ GLuint (WINE_GLAPI *p_glGenSymbolsEXT)(GLenum,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glGenTexturesEXT)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenTransformFeedbacks)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenTransformFeedbacksNV)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenVertexArrays)(GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGenVertexArraysAPPLE)(GLsizei,GLuint*);
+ GLuint (WINE_GLAPI *p_glGenVertexShadersEXT)(GLuint);
+ void (WINE_GLAPI *p_glGenerateMipmap)(GLenum);
+ void (WINE_GLAPI *p_glGenerateMipmapEXT)(GLenum);
+ void (WINE_GLAPI *p_glGenerateMultiTexMipmapEXT)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glGenerateTextureMipmapEXT)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glGetActiveAtomicCounterBufferiv)(GLuint,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetActiveAttrib)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
+ void (WINE_GLAPI *p_glGetActiveAttribARB)(GLhandleARB,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLcharARB*);
+ void (WINE_GLAPI *p_glGetActiveSubroutineName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetActiveSubroutineUniformName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetActiveSubroutineUniformiv)(GLuint,GLenum,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetActiveUniform)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*);
+ void (WINE_GLAPI *p_glGetActiveUniformARB)(GLhandleARB,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLcharARB*);
+ void (WINE_GLAPI *p_glGetActiveUniformBlockName)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetActiveUniformBlockiv)(GLuint,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetActiveUniformName)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetActiveUniformsiv)(GLuint,GLsizei,const GLuint*,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetActiveVaryingNV)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*);
+ void (WINE_GLAPI *p_glGetArrayObjectfvATI)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetArrayObjectivATI)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetAttachedObjectsARB)(GLhandleARB,GLsizei,GLsizei*,GLhandleARB*);
+ void (WINE_GLAPI *p_glGetAttachedShaders)(GLuint,GLsizei,GLsizei*,GLuint*);
+ GLint (WINE_GLAPI *p_glGetAttribLocation)(GLuint,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetAttribLocationARB)(GLhandleARB,const GLcharARB*);
+ void (WINE_GLAPI *p_glGetBooleanIndexedvEXT)(GLenum,GLuint,GLboolean*);
+ void (WINE_GLAPI *p_glGetBooleani_v)(GLenum,GLuint,GLboolean*);
+ void (WINE_GLAPI *p_glGetBufferParameteri64v)(GLenum,GLenum,INT64*);
+ void (WINE_GLAPI *p_glGetBufferParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetBufferParameterivARB)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetBufferParameterui64vNV)(GLenum,GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetBufferPointerv)(GLenum,GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetBufferPointervARB)(GLenum,GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid*);
+ void (WINE_GLAPI *p_glGetBufferSubDataARB)(GLenum,GLintptrARB,GLsizeiptrARB,GLvoid*);
+ void (WINE_GLAPI *p_glGetColorTable)(GLenum,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetColorTableEXT)(GLenum,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetColorTableParameterfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetColorTableParameterfvEXT)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetColorTableParameterfvSGI)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetColorTableParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetColorTableParameterivEXT)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetColorTableParameterivSGI)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetColorTableSGI)(GLenum,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetCombinerInputParameterfvNV)(GLenum,GLenum,GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetCombinerInputParameterivNV)(GLenum,GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetCombinerOutputParameterfvNV)(GLenum,GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetCombinerOutputParameterivNV)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetCombinerStageParameterfvNV)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetCompressedMultiTexImageEXT)(GLenum,GLenum,GLint,GLvoid*);
+ void (WINE_GLAPI *p_glGetCompressedTexImage)(GLenum,GLint,GLvoid*);
+ void (WINE_GLAPI *p_glGetCompressedTexImageARB)(GLenum,GLint,GLvoid*);
+ void (WINE_GLAPI *p_glGetCompressedTextureImageEXT)(GLuint,GLenum,GLint,GLvoid*);
+ void (WINE_GLAPI *p_glGetConvolutionFilter)(GLenum,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetConvolutionFilterEXT)(GLenum,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetConvolutionParameterfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetConvolutionParameterfvEXT)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetConvolutionParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetConvolutionParameterivEXT)(GLenum,GLenum,GLint*);
+ GLuint (WINE_GLAPI *p_glGetDebugMessageLog)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*);
+ GLuint (WINE_GLAPI *p_glGetDebugMessageLogAMD)(GLuint,GLsizei,GLenum*,GLuint*,GLuint*,GLsizei*,GLchar*);
+ GLuint (WINE_GLAPI *p_glGetDebugMessageLogARB)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetDetailTexFuncSGIS)(GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetDoubleIndexedvEXT)(GLenum,GLuint,GLdouble*);
+ void (WINE_GLAPI *p_glGetDoublei_v)(GLenum,GLuint,GLdouble*);
+ void (WINE_GLAPI *p_glGetFenceivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFinalCombinerInputParameterfvNV)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetFinalCombinerInputParameterivNV)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFloatIndexedvEXT)(GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetFloati_v)(GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetFogFuncSGIS)(GLfloat*);
+ GLint (WINE_GLAPI *p_glGetFragDataIndex)(GLuint,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetFragDataLocation)(GLuint,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetFragDataLocationEXT)(GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glGetFragmentLightfvSGIX)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetFragmentLightivSGIX)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFragmentMaterialfvSGIX)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetFragmentMaterialivSGIX)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFramebufferAttachmentParameteriv)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFramebufferAttachmentParameterivEXT)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFramebufferParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetFramebufferParameterivEXT)(GLuint,GLenum,GLint*);
+ GLenum (WINE_GLAPI *p_glGetGraphicsResetStatusARB)(void);
+ GLhandleARB (WINE_GLAPI *p_glGetHandleARB)(GLenum);
+ void (WINE_GLAPI *p_glGetHistogram)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetHistogramEXT)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetHistogramParameterfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetHistogramParameterfvEXT)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetHistogramParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetHistogramParameterivEXT)(GLenum,GLenum,GLint*);
+ UINT64 (WINE_GLAPI *p_glGetImageHandleNV)(GLuint,GLint,GLboolean,GLint,GLenum);
+ void (WINE_GLAPI *p_glGetImageTransformParameterfvHP)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetImageTransformParameterivHP)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetInfoLogARB)(GLhandleARB,GLsizei,GLsizei*,GLcharARB*);
+ GLint (WINE_GLAPI *p_glGetInstrumentsSGIX)(void);
+ void (WINE_GLAPI *p_glGetInteger64i_v)(GLenum,GLuint,INT64*);
+ void (WINE_GLAPI *p_glGetInteger64v)(GLenum,INT64*);
+ void (WINE_GLAPI *p_glGetIntegerIndexedvEXT)(GLenum,GLuint,GLint*);
+ void (WINE_GLAPI *p_glGetIntegeri_v)(GLenum,GLuint,GLint*);
+ void (WINE_GLAPI *p_glGetIntegerui64i_vNV)(GLenum,GLuint,UINT64*);
+ void (WINE_GLAPI *p_glGetIntegerui64vNV)(GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetInternalformati64v)(GLenum,GLenum,GLenum,GLsizei,INT64*);
+ void (WINE_GLAPI *p_glGetInternalformativ)(GLenum,GLenum,GLenum,GLsizei,GLint*);
+ void (WINE_GLAPI *p_glGetInvariantBooleanvEXT)(GLuint,GLenum,GLboolean*);
+ void (WINE_GLAPI *p_glGetInvariantFloatvEXT)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetInvariantIntegervEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetListParameterfvSGIX)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetListParameterivSGIX)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetLocalConstantBooleanvEXT)(GLuint,GLenum,GLboolean*);
+ void (WINE_GLAPI *p_glGetLocalConstantFloatvEXT)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetLocalConstantIntegervEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMapAttribParameterfvNV)(GLenum,GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMapAttribParameterivNV)(GLenum,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMapControlPointsNV)(GLenum,GLuint,GLenum,GLsizei,GLsizei,GLboolean,GLvoid*);
+ void (WINE_GLAPI *p_glGetMapParameterfvNV)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMapParameterivNV)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMinmax)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetMinmaxEXT)(GLenum,GLboolean,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetMinmaxParameterfv)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMinmaxParameterfvEXT)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMinmaxParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMinmaxParameterivEXT)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMultiTexEnvfvEXT)(GLenum,GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMultiTexEnvivEXT)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMultiTexGendvEXT)(GLenum,GLenum,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetMultiTexGenfvEXT)(GLenum,GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMultiTexGenivEXT)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMultiTexImageEXT)(GLenum,GLenum,GLint,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetMultiTexLevelParameterfvEXT)(GLenum,GLenum,GLint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMultiTexLevelParameterivEXT)(GLenum,GLenum,GLint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMultiTexParameterIivEXT)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMultiTexParameterIuivEXT)(GLenum,GLenum,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetMultiTexParameterfvEXT)(GLenum,GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetMultiTexParameterivEXT)(GLenum,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetMultisamplefv)(GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetMultisamplefvNV)(GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetNamedBufferParameterivEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetNamedBufferParameterui64vNV)(GLuint,GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetNamedBufferPointervEXT)(GLuint,GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetNamedBufferSubDataEXT)(GLuint,GLintptr,GLsizeiptr,GLvoid*);
+ void (WINE_GLAPI *p_glGetNamedFramebufferAttachmentParameterivEXT)(GLuint,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetNamedFramebufferParameterivEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetNamedProgramLocalParameterIivEXT)(GLuint,GLenum,GLuint,GLint*);
+ void (WINE_GLAPI *p_glGetNamedProgramLocalParameterIuivEXT)(GLuint,GLenum,GLuint,GLuint*);
+ void (WINE_GLAPI *p_glGetNamedProgramLocalParameterdvEXT)(GLuint,GLenum,GLuint,GLdouble*);
+ void (WINE_GLAPI *p_glGetNamedProgramLocalParameterfvEXT)(GLuint,GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetNamedProgramStringEXT)(GLuint,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetNamedProgramivEXT)(GLuint,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetNamedRenderbufferParameterivEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetNamedStringARB)(GLint,const GLchar*,GLsizei,GLint*,GLchar*);
+ void (WINE_GLAPI *p_glGetNamedStringivARB)(GLint,const GLchar*,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetObjectBufferfvATI)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetObjectBufferivATI)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetObjectLabel)(GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetObjectParameterfvARB)(GLhandleARB,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetObjectParameterivAPPLE)(GLenum,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetObjectParameterivARB)(GLhandleARB,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetObjectPtrLabel)(const void*,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetOcclusionQueryivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetOcclusionQueryuivNV)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetPathColorGenfvNV)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathColorGenivNV)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetPathCommandsNV)(GLuint,GLubyte*);
+ void (WINE_GLAPI *p_glGetPathCoordsNV)(GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathDashArrayNV)(GLuint,GLfloat*);
+ GLfloat (WINE_GLAPI *p_glGetPathLengthNV)(GLuint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glGetPathMetricRangeNV)(GLbitfield,GLuint,GLsizei,GLsizei,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathMetricsNV)(GLbitfield,GLsizei,GLenum,const GLvoid*,GLuint,GLsizei,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathParameterfvNV)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathParameterivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetPathSpacingNV)(GLenum,GLsizei,GLenum,const GLvoid*,GLuint,GLfloat,GLfloat,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathTexGenfvNV)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPathTexGenivNV)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetPerfMonitorCounterDataAMD)(GLuint,GLenum,GLsizei,GLuint*,GLint*);
+ void (WINE_GLAPI *p_glGetPerfMonitorCounterInfoAMD)(GLuint,GLuint,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetPerfMonitorCounterStringAMD)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetPerfMonitorCountersAMD)(GLuint,GLint*,GLint*,GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGetPerfMonitorGroupStringAMD)(GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetPerfMonitorGroupsAMD)(GLint*,GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGetPixelTexGenParameterfvSGIS)(GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPixelTexGenParameterivSGIS)(GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetPixelTransformParameterfvEXT)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetPixelTransformParameterivEXT)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetPointerIndexedvEXT)(GLenum,GLuint,GLvoid**);
+ void (WINE_GLAPI *p_glGetPointervEXT)(GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetProgramBinary)(GLuint,GLsizei,GLsizei*,GLenum*,GLvoid*);
+ void (WINE_GLAPI *p_glGetProgramEnvParameterIivNV)(GLenum,GLuint,GLint*);
+ void (WINE_GLAPI *p_glGetProgramEnvParameterIuivNV)(GLenum,GLuint,GLuint*);
+ void (WINE_GLAPI *p_glGetProgramEnvParameterdvARB)(GLenum,GLuint,GLdouble*);
+ void (WINE_GLAPI *p_glGetProgramEnvParameterfvARB)(GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetProgramInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetProgramInterfaceiv)(GLuint,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetProgramLocalParameterIivNV)(GLenum,GLuint,GLint*);
+ void (WINE_GLAPI *p_glGetProgramLocalParameterIuivNV)(GLenum,GLuint,GLuint*);
+ void (WINE_GLAPI *p_glGetProgramLocalParameterdvARB)(GLenum,GLuint,GLdouble*);
+ void (WINE_GLAPI *p_glGetProgramLocalParameterfvARB)(GLenum,GLuint,GLfloat*);
+ void (WINE_GLAPI *p_glGetProgramNamedParameterdvNV)(GLuint,GLsizei,const GLubyte*,GLdouble*);
+ void (WINE_GLAPI *p_glGetProgramNamedParameterfvNV)(GLuint,GLsizei,const GLubyte*,GLfloat*);
+ void (WINE_GLAPI *p_glGetProgramParameterdvNV)(GLenum,GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetProgramParameterfvNV)(GLenum,GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetProgramPipelineInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetProgramPipelineiv)(GLuint,GLenum,GLint*);
+ GLuint (WINE_GLAPI *p_glGetProgramResourceIndex)(GLuint,GLenum,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetProgramResourceLocation)(GLuint,GLenum,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetProgramResourceLocationIndex)(GLuint,GLenum,const GLchar*);
+ void (WINE_GLAPI *p_glGetProgramResourceName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetProgramResourceiv)(GLuint,GLenum,GLuint,GLsizei,const GLenum*,GLsizei,GLsizei*,GLint*);
+ void (WINE_GLAPI *p_glGetProgramStageiv)(GLuint,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetProgramStringARB)(GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetProgramStringNV)(GLuint,GLenum,GLubyte*);
+ void (WINE_GLAPI *p_glGetProgramSubroutineParameteruivNV)(GLenum,GLuint,GLuint*);
+ void (WINE_GLAPI *p_glGetProgramiv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetProgramivARB)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetProgramivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetQueryIndexediv)(GLenum,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetQueryObjecti64v)(GLuint,GLenum,INT64*);
+ void (WINE_GLAPI *p_glGetQueryObjecti64vEXT)(GLuint,GLenum,INT64*);
+ void (WINE_GLAPI *p_glGetQueryObjectiv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetQueryObjectivARB)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetQueryObjectui64v)(GLuint,GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetQueryObjectui64vEXT)(GLuint,GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetQueryObjectuiv)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetQueryObjectuivARB)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetQueryiv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetQueryivARB)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetRenderbufferParameteriv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetRenderbufferParameterivEXT)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetSamplerParameterIiv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetSamplerParameterIuiv)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetSamplerParameterfv)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetSamplerParameteriv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetSeparableFilter)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*);
+ void (WINE_GLAPI *p_glGetSeparableFilterEXT)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*);
+ void (WINE_GLAPI *p_glGetShaderInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetShaderPrecisionFormat)(GLenum,GLenum,GLint*,GLint*);
+ void (WINE_GLAPI *p_glGetShaderSource)(GLuint,GLsizei,GLsizei*,GLchar*);
+ void (WINE_GLAPI *p_glGetShaderSourceARB)(GLhandleARB,GLsizei,GLsizei*,GLcharARB*);
+ void (WINE_GLAPI *p_glGetShaderiv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetSharpenTexFuncSGIS)(GLenum,GLfloat*);
+ const GLubyte * (WINE_GLAPI *p_glGetStringi)(GLenum,GLuint);
+ GLuint (WINE_GLAPI *p_glGetSubroutineIndex)(GLuint,GLenum,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetSubroutineUniformLocation)(GLuint,GLenum,const GLchar*);
+ void (WINE_GLAPI *p_glGetSynciv)(GLvoid*,GLenum,GLsizei,GLsizei*,GLint*);
+ void (WINE_GLAPI *p_glGetTexBumpParameterfvATI)(GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTexBumpParameterivATI)(GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTexFilterFuncSGIS)(GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTexParameterIiv)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTexParameterIivEXT)(GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTexParameterIuiv)(GLenum,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetTexParameterIuivEXT)(GLenum,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetTexParameterPointervAPPLE)(GLenum,GLenum,GLvoid**);
+ UINT64 (WINE_GLAPI *p_glGetTextureHandleNV)(GLuint);
+ void (WINE_GLAPI *p_glGetTextureImageEXT)(GLuint,GLenum,GLint,GLenum,GLenum,GLvoid*);
+ void (WINE_GLAPI *p_glGetTextureLevelParameterfvEXT)(GLuint,GLenum,GLint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTextureLevelParameterivEXT)(GLuint,GLenum,GLint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTextureParameterIivEXT)(GLuint,GLenum,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTextureParameterIuivEXT)(GLuint,GLenum,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetTextureParameterfvEXT)(GLuint,GLenum,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetTextureParameterivEXT)(GLuint,GLenum,GLenum,GLint*);
+ UINT64 (WINE_GLAPI *p_glGetTextureSamplerHandleNV)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glGetTrackMatrixivNV)(GLenum,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetTransformFeedbackVarying)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*);
+ void (WINE_GLAPI *p_glGetTransformFeedbackVaryingEXT)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*);
+ void (WINE_GLAPI *p_glGetTransformFeedbackVaryingNV)(GLuint,GLuint,GLint*);
+ GLuint (WINE_GLAPI *p_glGetUniformBlockIndex)(GLuint,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetUniformBufferSizeEXT)(GLuint,GLint);
+ void (WINE_GLAPI *p_glGetUniformIndices)(GLuint,GLsizei,const GLchar* const*,GLuint*);
+ GLint (WINE_GLAPI *p_glGetUniformLocation)(GLuint,const GLchar*);
+ GLint (WINE_GLAPI *p_glGetUniformLocationARB)(GLhandleARB,const GLcharARB*);
+ GLintptr (WINE_GLAPI *p_glGetUniformOffsetEXT)(GLuint,GLint);
+ void (WINE_GLAPI *p_glGetUniformSubroutineuiv)(GLenum,GLint,GLuint*);
+ void (WINE_GLAPI *p_glGetUniformdv)(GLuint,GLint,GLdouble*);
+ void (WINE_GLAPI *p_glGetUniformfv)(GLuint,GLint,GLfloat*);
+ void (WINE_GLAPI *p_glGetUniformfvARB)(GLhandleARB,GLint,GLfloat*);
+ void (WINE_GLAPI *p_glGetUniformi64vNV)(GLuint,GLint,INT64*);
+ void (WINE_GLAPI *p_glGetUniformiv)(GLuint,GLint,GLint*);
+ void (WINE_GLAPI *p_glGetUniformivARB)(GLhandleARB,GLint,GLint*);
+ void (WINE_GLAPI *p_glGetUniformui64vNV)(GLuint,GLint,UINT64*);
+ void (WINE_GLAPI *p_glGetUniformuiv)(GLuint,GLint,GLuint*);
+ void (WINE_GLAPI *p_glGetUniformuivEXT)(GLuint,GLint,GLuint*);
+ void (WINE_GLAPI *p_glGetVariantArrayObjectfvATI)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVariantArrayObjectivATI)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVariantBooleanvEXT)(GLuint,GLenum,GLboolean*);
+ void (WINE_GLAPI *p_glGetVariantFloatvEXT)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVariantIntegervEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVariantPointervEXT)(GLuint,GLenum,GLvoid**);
+ GLint (WINE_GLAPI *p_glGetVaryingLocationNV)(GLuint,const GLchar*);
+ void (WINE_GLAPI *p_glGetVertexAttribArrayObjectfvATI)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVertexAttribArrayObjectivATI)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVertexAttribIiv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVertexAttribIivEXT)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVertexAttribIuiv)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetVertexAttribIuivEXT)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetVertexAttribLdv)(GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetVertexAttribLdvEXT)(GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetVertexAttribLi64vNV)(GLuint,GLenum,INT64*);
+ void (WINE_GLAPI *p_glGetVertexAttribLui64vNV)(GLuint,GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetVertexAttribPointerv)(GLuint,GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetVertexAttribPointervARB)(GLuint,GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetVertexAttribPointervNV)(GLuint,GLenum,GLvoid**);
+ void (WINE_GLAPI *p_glGetVertexAttribdv)(GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetVertexAttribdvARB)(GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetVertexAttribdvNV)(GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetVertexAttribfv)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVertexAttribfvARB)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVertexAttribfvNV)(GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVertexAttribiv)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVertexAttribivARB)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVertexAttribivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVideoCaptureStreamdvNV)(GLuint,GLuint,GLenum,GLdouble*);
+ void (WINE_GLAPI *p_glGetVideoCaptureStreamfvNV)(GLuint,GLuint,GLenum,GLfloat*);
+ void (WINE_GLAPI *p_glGetVideoCaptureStreamivNV)(GLuint,GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVideoCaptureivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVideoi64vNV)(GLuint,GLenum,INT64*);
+ void (WINE_GLAPI *p_glGetVideoivNV)(GLuint,GLenum,GLint*);
+ void (WINE_GLAPI *p_glGetVideoui64vNV)(GLuint,GLenum,UINT64*);
+ void (WINE_GLAPI *p_glGetVideouivNV)(GLuint,GLenum,GLuint*);
+ void (WINE_GLAPI *p_glGetnColorTableARB)(GLenum,GLenum,GLenum,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glGetnCompressedTexImageARB)(GLenum,GLint,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glGetnConvolutionFilterARB)(GLenum,GLenum,GLenum,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glGetnHistogramARB)(GLenum,GLboolean,GLenum,GLenum,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glGetnMapdvARB)(GLenum,GLenum,GLsizei,GLdouble*);
+ void (WINE_GLAPI *p_glGetnMapfvARB)(GLenum,GLenum,GLsizei,GLfloat*);
+ void (WINE_GLAPI *p_glGetnMapivARB)(GLenum,GLenum,GLsizei,GLint*);
+ void (WINE_GLAPI *p_glGetnMinmaxARB)(GLenum,GLboolean,GLenum,GLenum,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glGetnPixelMapfvARB)(GLenum,GLsizei,GLfloat*);
+ void (WINE_GLAPI *p_glGetnPixelMapuivARB)(GLenum,GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGetnPixelMapusvARB)(GLenum,GLsizei,GLushort*);
+ void (WINE_GLAPI *p_glGetnPolygonStippleARB)(GLsizei,GLubyte*);
+ void (WINE_GLAPI *p_glGetnSeparableFilterARB)(GLenum,GLenum,GLenum,GLsizei,GLvoid*,GLsizei,GLvoid*,GLvoid*);
+ void (WINE_GLAPI *p_glGetnTexImageARB)(GLenum,GLint,GLenum,GLenum,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glGetnUniformdvARB)(GLuint,GLint,GLsizei,GLdouble*);
+ void (WINE_GLAPI *p_glGetnUniformfvARB)(GLuint,GLint,GLsizei,GLfloat*);
+ void (WINE_GLAPI *p_glGetnUniformivARB)(GLuint,GLint,GLsizei,GLint*);
+ void (WINE_GLAPI *p_glGetnUniformuivARB)(GLuint,GLint,GLsizei,GLuint*);
+ void (WINE_GLAPI *p_glGlobalAlphaFactorbSUN)(GLbyte);
+ void (WINE_GLAPI *p_glGlobalAlphaFactordSUN)(GLdouble);
+ void (WINE_GLAPI *p_glGlobalAlphaFactorfSUN)(GLfloat);
+ void (WINE_GLAPI *p_glGlobalAlphaFactoriSUN)(GLint);
+ void (WINE_GLAPI *p_glGlobalAlphaFactorsSUN)(GLshort);
+ void (WINE_GLAPI *p_glGlobalAlphaFactorubSUN)(GLubyte);
+ void (WINE_GLAPI *p_glGlobalAlphaFactoruiSUN)(GLuint);
+ void (WINE_GLAPI *p_glGlobalAlphaFactorusSUN)(GLushort);
+ void (WINE_GLAPI *p_glHintPGI)(GLenum,GLint);
+ void (WINE_GLAPI *p_glHistogram)(GLenum,GLsizei,GLenum,GLboolean);
+ void (WINE_GLAPI *p_glHistogramEXT)(GLenum,GLsizei,GLenum,GLboolean);
+ void (WINE_GLAPI *p_glIglooInterfaceSGIX)(GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glImageTransformParameterfHP)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glImageTransformParameterfvHP)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glImageTransformParameteriHP)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glImageTransformParameterivHP)(GLenum,GLenum,const GLint*);
+ GLvoid* (WINE_GLAPI *p_glImportSyncEXT)(GLenum,GLintptr,GLbitfield);
+ void (WINE_GLAPI *p_glIndexFormatNV)(GLenum,GLsizei);
+ void (WINE_GLAPI *p_glIndexFuncEXT)(GLenum,GLclampf);
+ void (WINE_GLAPI *p_glIndexMaterialEXT)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glIndexPointerEXT)(GLenum,GLsizei,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glIndexPointerListIBM)(GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glInsertComponentEXT)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glInstrumentsBufferSGIX)(GLsizei,GLint*);
+ void (WINE_GLAPI *p_glInterpolatePathsNV)(GLuint,GLuint,GLuint,GLfloat);
+ void (WINE_GLAPI *p_glInvalidateBufferData)(GLuint);
+ void (WINE_GLAPI *p_glInvalidateBufferSubData)(GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glInvalidateFramebuffer)(GLenum,GLsizei,const GLenum*);
+ void (WINE_GLAPI *p_glInvalidateSubFramebuffer)(GLenum,GLsizei,const GLenum*,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glInvalidateTexImage)(GLuint,GLint);
+ void (WINE_GLAPI *p_glInvalidateTexSubImage)(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei);
+ GLboolean (WINE_GLAPI *p_glIsAsyncMarkerSGIX)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsBuffer)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsBufferARB)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsBufferResidentNV)(GLenum);
+ GLboolean (WINE_GLAPI *p_glIsEnabledIndexedEXT)(GLenum,GLuint);
+ GLboolean (WINE_GLAPI *p_glIsEnabledi)(GLenum,GLuint);
+ GLboolean (WINE_GLAPI *p_glIsFenceAPPLE)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsFenceNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsFramebuffer)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsFramebufferEXT)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsImageHandleResidentNV)(UINT64);
+ GLboolean (WINE_GLAPI *p_glIsNameAMD)(GLenum,GLuint);
+ GLboolean (WINE_GLAPI *p_glIsNamedBufferResidentNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsNamedStringARB)(GLint,const GLchar*);
+ GLboolean (WINE_GLAPI *p_glIsObjectBufferATI)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsOcclusionQueryNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsPathNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsPointInFillPathNV)(GLuint,GLuint,GLfloat,GLfloat);
+ GLboolean (WINE_GLAPI *p_glIsPointInStrokePathNV)(GLuint,GLfloat,GLfloat);
+ GLboolean (WINE_GLAPI *p_glIsProgram)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsProgramARB)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsProgramNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsProgramPipeline)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsQuery)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsQueryARB)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsRenderbuffer)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsRenderbufferEXT)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsSampler)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsShader)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsSync)(GLvoid*);
+ GLboolean (WINE_GLAPI *p_glIsTextureEXT)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsTextureHandleResidentNV)(UINT64);
+ GLboolean (WINE_GLAPI *p_glIsTransformFeedback)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsTransformFeedbackNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsVariantEnabledEXT)(GLuint,GLenum);
+ GLboolean (WINE_GLAPI *p_glIsVertexArray)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsVertexArrayAPPLE)(GLuint);
+ GLboolean (WINE_GLAPI *p_glIsVertexAttribEnabledAPPLE)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glLightEnviSGIX)(GLenum,GLint);
+ void (WINE_GLAPI *p_glLinkProgram)(GLuint);
+ void (WINE_GLAPI *p_glLinkProgramARB)(GLhandleARB);
+ void (WINE_GLAPI *p_glListParameterfSGIX)(GLuint,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glListParameterfvSGIX)(GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glListParameteriSGIX)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glListParameterivSGIX)(GLuint,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glLoadIdentityDeformationMapSGIX)(GLbitfield);
+ void (WINE_GLAPI *p_glLoadProgramNV)(GLenum,GLuint,GLsizei,const GLubyte*);
+ void (WINE_GLAPI *p_glLoadTransposeMatrixd)(const GLdouble*);
+ void (WINE_GLAPI *p_glLoadTransposeMatrixdARB)(const GLdouble*);
+ void (WINE_GLAPI *p_glLoadTransposeMatrixf)(const GLfloat*);
+ void (WINE_GLAPI *p_glLoadTransposeMatrixfARB)(const GLfloat*);
+ void (WINE_GLAPI *p_glLockArraysEXT)(GLint,GLsizei);
+ void (WINE_GLAPI *p_glMTexCoord2fSGIS)(GLenum,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMTexCoord2fvSGIS)(GLenum,GLfloat *);
+ void (WINE_GLAPI *p_glMakeBufferNonResidentNV)(GLenum);
+ void (WINE_GLAPI *p_glMakeBufferResidentNV)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glMakeImageHandleNonResidentNV)(UINT64);
+ void (WINE_GLAPI *p_glMakeImageHandleResidentNV)(UINT64,GLenum);
+ void (WINE_GLAPI *p_glMakeNamedBufferNonResidentNV)(GLuint);
+ void (WINE_GLAPI *p_glMakeNamedBufferResidentNV)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glMakeTextureHandleNonResidentNV)(UINT64);
+ void (WINE_GLAPI *p_glMakeTextureHandleResidentNV)(UINT64);
+ GLvoid* (WINE_GLAPI *p_glMapBuffer)(GLenum,GLenum);
+ GLvoid* (WINE_GLAPI *p_glMapBufferARB)(GLenum,GLenum);
+ GLvoid* (WINE_GLAPI *p_glMapBufferRange)(GLenum,GLintptr,GLsizeiptr,GLbitfield);
+ void (WINE_GLAPI *p_glMapControlPointsNV)(GLenum,GLuint,GLenum,GLsizei,GLsizei,GLint,GLint,GLboolean,const GLvoid*);
+ GLvoid* (WINE_GLAPI *p_glMapNamedBufferEXT)(GLuint,GLenum);
+ GLvoid* (WINE_GLAPI *p_glMapNamedBufferRangeEXT)(GLuint,GLintptr,GLsizeiptr,GLbitfield);
+ GLvoid* (WINE_GLAPI *p_glMapObjectBufferATI)(GLuint);
+ void (WINE_GLAPI *p_glMapParameterfvNV)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMapParameterivNV)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMapVertexAttrib1dAPPLE)(GLuint,GLuint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+ void (WINE_GLAPI *p_glMapVertexAttrib1fAPPLE)(GLuint,GLuint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glMapVertexAttrib2dAPPLE)(GLuint,GLuint,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*);
+ void (WINE_GLAPI *p_glMapVertexAttrib2fAPPLE)(GLuint,GLuint,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glMatrixFrustumEXT)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMatrixIndexPointerARB)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glMatrixIndexubvARB)(GLint,const GLubyte*);
+ void (WINE_GLAPI *p_glMatrixIndexuivARB)(GLint,const GLuint*);
+ void (WINE_GLAPI *p_glMatrixIndexusvARB)(GLint,const GLushort*);
+ void (WINE_GLAPI *p_glMatrixLoadIdentityEXT)(GLenum);
+ void (WINE_GLAPI *p_glMatrixLoadTransposedEXT)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMatrixLoadTransposefEXT)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMatrixLoaddEXT)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMatrixLoadfEXT)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMatrixMultTransposedEXT)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMatrixMultTransposefEXT)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMatrixMultdEXT)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMatrixMultfEXT)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMatrixOrthoEXT)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMatrixPopEXT)(GLenum);
+ void (WINE_GLAPI *p_glMatrixPushEXT)(GLenum);
+ void (WINE_GLAPI *p_glMatrixRotatedEXT)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMatrixRotatefEXT)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMatrixScaledEXT)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMatrixScalefEXT)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMatrixTranslatedEXT)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMatrixTranslatefEXT)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMemoryBarrier)(GLbitfield);
+ void (WINE_GLAPI *p_glMemoryBarrierEXT)(GLbitfield);
+ void (WINE_GLAPI *p_glMinSampleShading)(GLfloat);
+ void (WINE_GLAPI *p_glMinSampleShadingARB)(GLfloat);
+ void (WINE_GLAPI *p_glMinmax)(GLenum,GLenum,GLboolean);
+ void (WINE_GLAPI *p_glMinmaxEXT)(GLenum,GLenum,GLboolean);
+ void (WINE_GLAPI *p_glMultTransposeMatrixd)(const GLdouble*);
+ void (WINE_GLAPI *p_glMultTransposeMatrixdARB)(const GLdouble*);
+ void (WINE_GLAPI *p_glMultTransposeMatrixf)(const GLfloat*);
+ void (WINE_GLAPI *p_glMultTransposeMatrixfARB)(const GLfloat*);
+ void (WINE_GLAPI *p_glMultiDrawArrays)(GLenum,const GLint*,const GLsizei*,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawArraysEXT)(GLenum,const GLint*,const GLsizei*,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawArraysIndirect)(GLenum,const void*,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawArraysIndirectAMD)(GLenum,const GLvoid*,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawElementArrayAPPLE)(GLenum,const GLint*,const GLsizei*,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawElements)(GLenum,const GLsizei*,GLenum,const GLvoid* const*,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawElementsBaseVertex)(GLenum,const GLsizei*,GLenum,const GLvoid* const*,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glMultiDrawElementsEXT)(GLenum,const GLsizei*,GLenum,const GLvoid**,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawElementsIndirect)(GLenum,GLenum,const void*,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawElementsIndirectAMD)(GLenum,GLenum,const GLvoid*,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glMultiDrawRangeElementArrayAPPLE)(GLenum,GLuint,GLuint,const GLint*,const GLsizei*,GLsizei);
+ void (WINE_GLAPI *p_glMultiModeDrawArraysIBM)(const GLenum*,const GLint*,const GLsizei*,GLsizei,GLint);
+ void (WINE_GLAPI *p_glMultiModeDrawElementsIBM)(const GLenum*,const GLsizei*,GLenum,const GLvoid* const*,GLsizei,GLint);
+ void (WINE_GLAPI *p_glMultiTexBufferEXT)(GLenum,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glMultiTexCoord1d)(GLenum,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord1dARB)(GLenum,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord1dSGIS)(GLenum,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord1dv)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord1dvARB)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord1dvSGIS)(GLenum,GLdouble *);
+ void (WINE_GLAPI *p_glMultiTexCoord1f)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord1fARB)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord1fSGIS)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord1fv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord1fvARB)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord1fvSGIS)(GLenum,const GLfloat *);
+ void (WINE_GLAPI *p_glMultiTexCoord1hNV)(GLenum,GLhalfNV);
+ void (WINE_GLAPI *p_glMultiTexCoord1hvNV)(GLenum,const GLhalfNV*);
+ void (WINE_GLAPI *p_glMultiTexCoord1i)(GLenum,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord1iARB)(GLenum,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord1iSGIS)(GLenum,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord1iv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord1ivARB)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord1ivSGIS)(GLenum,GLint *);
+ void (WINE_GLAPI *p_glMultiTexCoord1s)(GLenum,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord1sARB)(GLenum,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord1sSGIS)(GLenum,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord1sv)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord1svARB)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord1svSGIS)(GLenum,GLshort *);
+ void (WINE_GLAPI *p_glMultiTexCoord2d)(GLenum,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord2dARB)(GLenum,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord2dSGIS)(GLenum,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord2dv)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord2dvARB)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord2dvSGIS)(GLenum,GLdouble *);
+ void (WINE_GLAPI *p_glMultiTexCoord2f)(GLenum,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord2fARB)(GLenum,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord2fSGIS)(GLenum,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord2fv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord2fvARB)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord2fvSGIS)(GLenum,GLfloat *);
+ void (WINE_GLAPI *p_glMultiTexCoord2hNV)(GLenum,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glMultiTexCoord2hvNV)(GLenum,const GLhalfNV*);
+ void (WINE_GLAPI *p_glMultiTexCoord2i)(GLenum,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord2iARB)(GLenum,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord2iSGIS)(GLenum,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord2iv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord2ivARB)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord2ivSGIS)(GLenum,GLint *);
+ void (WINE_GLAPI *p_glMultiTexCoord2s)(GLenum,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord2sARB)(GLenum,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord2sSGIS)(GLenum,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord2sv)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord2svARB)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord2svSGIS)(GLenum,GLshort *);
+ void (WINE_GLAPI *p_glMultiTexCoord3d)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord3dARB)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord3dSGIS)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord3dv)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord3dvARB)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord3dvSGIS)(GLenum,GLdouble *);
+ void (WINE_GLAPI *p_glMultiTexCoord3f)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord3fARB)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord3fSGIS)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord3fv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord3fvARB)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord3fvSGIS)(GLenum,GLfloat *);
+ void (WINE_GLAPI *p_glMultiTexCoord3hNV)(GLenum,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glMultiTexCoord3hvNV)(GLenum,const GLhalfNV*);
+ void (WINE_GLAPI *p_glMultiTexCoord3i)(GLenum,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord3iARB)(GLenum,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord3iSGIS)(GLenum,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord3iv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord3ivARB)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord3ivSGIS)(GLenum,GLint *);
+ void (WINE_GLAPI *p_glMultiTexCoord3s)(GLenum,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord3sARB)(GLenum,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord3sSGIS)(GLenum,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord3sv)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord3svARB)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord3svSGIS)(GLenum,GLshort *);
+ void (WINE_GLAPI *p_glMultiTexCoord4d)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord4dARB)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord4dSGIS)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexCoord4dv)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord4dvARB)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexCoord4dvSGIS)(GLenum,GLdouble *);
+ void (WINE_GLAPI *p_glMultiTexCoord4f)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord4fARB)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord4fSGIS)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexCoord4fv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord4fvARB)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexCoord4fvSGIS)(GLenum,GLfloat *);
+ void (WINE_GLAPI *p_glMultiTexCoord4hNV)(GLenum,GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glMultiTexCoord4hvNV)(GLenum,const GLhalfNV*);
+ void (WINE_GLAPI *p_glMultiTexCoord4i)(GLenum,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord4iARB)(GLenum,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord4iSGIS)(GLenum,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glMultiTexCoord4iv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord4ivARB)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexCoord4ivSGIS)(GLenum,GLint *);
+ void (WINE_GLAPI *p_glMultiTexCoord4s)(GLenum,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord4sARB)(GLenum,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord4sSGIS)(GLenum,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glMultiTexCoord4sv)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord4svARB)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glMultiTexCoord4svSGIS)(GLenum,GLshort *);
+ void (WINE_GLAPI *p_glMultiTexCoordP1ui)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glMultiTexCoordP1uiv)(GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glMultiTexCoordP2ui)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glMultiTexCoordP2uiv)(GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glMultiTexCoordP3ui)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glMultiTexCoordP3uiv)(GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glMultiTexCoordP4ui)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glMultiTexCoordP4uiv)(GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glMultiTexCoordPointerEXT)(GLenum,GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glMultiTexCoordPointerSGIS)(GLenum,GLint,GLenum,GLsizei,GLvoid *);
+ void (WINE_GLAPI *p_glMultiTexEnvfEXT)(GLenum,GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexEnvfvEXT)(GLenum,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexEnviEXT)(GLenum,GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glMultiTexEnvivEXT)(GLenum,GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexGendEXT)(GLenum,GLenum,GLenum,GLdouble);
+ void (WINE_GLAPI *p_glMultiTexGendvEXT)(GLenum,GLenum,GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glMultiTexGenfEXT)(GLenum,GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexGenfvEXT)(GLenum,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexGeniEXT)(GLenum,GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glMultiTexGenivEXT)(GLenum,GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glMultiTexImage3DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glMultiTexParameterIivEXT)(GLenum,GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexParameterIuivEXT)(GLenum,GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glMultiTexParameterfEXT)(GLenum,GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glMultiTexParameterfvEXT)(GLenum,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glMultiTexParameteriEXT)(GLenum,GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glMultiTexParameterivEXT)(GLenum,GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glMultiTexRenderbufferEXT)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glNamedBufferDataEXT)(GLuint,GLsizeiptr,const GLvoid*,GLenum);
+ void (WINE_GLAPI *p_glNamedBufferSubDataEXT)(GLuint,GLintptr,GLsizeiptr,const GLvoid*);
+ void (WINE_GLAPI *p_glNamedCopyBufferSubDataEXT)(GLuint,GLuint,GLintptr,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glNamedFramebufferParameteriEXT)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glNamedFramebufferRenderbufferEXT)(GLuint,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glNamedFramebufferTexture1DEXT)(GLuint,GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glNamedFramebufferTexture2DEXT)(GLuint,GLenum,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glNamedFramebufferTexture3DEXT)(GLuint,GLenum,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glNamedFramebufferTextureEXT)(GLuint,GLenum,GLuint,GLint);
+ void (WINE_GLAPI *p_glNamedFramebufferTextureFaceEXT)(GLuint,GLenum,GLuint,GLint,GLenum);
+ void (WINE_GLAPI *p_glNamedFramebufferTextureLayerEXT)(GLuint,GLenum,GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameter4dEXT)(GLuint,GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameter4dvEXT)(GLuint,GLenum,GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameter4fEXT)(GLuint,GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameter4fvEXT)(GLuint,GLenum,GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameterI4iEXT)(GLuint,GLenum,GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameterI4ivEXT)(GLuint,GLenum,GLuint,const GLint*);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameterI4uiEXT)(GLuint,GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameterI4uivEXT)(GLuint,GLenum,GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glNamedProgramLocalParameters4fvEXT)(GLuint,GLenum,GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glNamedProgramLocalParametersI4ivEXT)(GLuint,GLenum,GLuint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glNamedProgramLocalParametersI4uivEXT)(GLuint,GLenum,GLuint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glNamedProgramStringEXT)(GLuint,GLenum,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glNamedRenderbufferStorageEXT)(GLuint,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glNamedRenderbufferStorageMultisampleCoverageEXT)(GLuint,GLsizei,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glNamedRenderbufferStorageMultisampleEXT)(GLuint,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glNamedStringARB)(GLenum,GLint,const GLchar*,GLint,const GLchar*);
+ GLuint (WINE_GLAPI *p_glNewBufferRegion)(GLenum);
+ GLuint (WINE_GLAPI *p_glNewObjectBufferATI)(GLsizei,const GLvoid*,GLenum);
+ void (WINE_GLAPI *p_glNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glNormal3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glNormal3hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glNormalFormatNV)(GLenum,GLsizei);
+ void (WINE_GLAPI *p_glNormalP3ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glNormalP3uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glNormalPointerEXT)(GLenum,GLsizei,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glNormalPointerListIBM)(GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glNormalPointervINTEL)(GLenum,const GLvoid**);
+ void (WINE_GLAPI *p_glNormalStream3bATI)(GLenum,GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glNormalStream3bvATI)(GLenum,const GLbyte*);
+ void (WINE_GLAPI *p_glNormalStream3dATI)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glNormalStream3dvATI)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glNormalStream3fATI)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glNormalStream3fvATI)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glNormalStream3iATI)(GLenum,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glNormalStream3ivATI)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glNormalStream3sATI)(GLenum,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glNormalStream3svATI)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glObjectLabel)(GLenum,GLuint,GLsizei,const GLchar*);
+ void (WINE_GLAPI *p_glObjectPtrLabel)(const void*,GLsizei,const GLchar*);
+ GLenum (WINE_GLAPI *p_glObjectPurgeableAPPLE)(GLenum,GLuint,GLenum);
+ GLenum (WINE_GLAPI *p_glObjectUnpurgeableAPPLE)(GLenum,GLuint,GLenum);
+ void (WINE_GLAPI *p_glPNTrianglesfATI)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPNTrianglesiATI)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPassTexCoordATI)(GLuint,GLuint,GLenum);
+ void (WINE_GLAPI *p_glPatchParameterfv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPatchParameteri)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPathColorGenNV)(GLenum,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPathCommandsNV)(GLuint,GLsizei,const GLubyte*,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glPathCoordsNV)(GLuint,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glPathCoverDepthFuncNV)(GLenum);
+ void (WINE_GLAPI *p_glPathDashArrayNV)(GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glPathFogGenNV)(GLenum);
+ void (WINE_GLAPI *p_glPathGlyphRangeNV)(GLuint,GLenum,const GLvoid*,GLbitfield,GLuint,GLsizei,GLenum,GLuint,GLfloat);
+ void (WINE_GLAPI *p_glPathGlyphsNV)(GLuint,GLenum,const GLvoid*,GLbitfield,GLsizei,GLenum,const GLvoid*,GLenum,GLuint,GLfloat);
+ void (WINE_GLAPI *p_glPathParameterfNV)(GLuint,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPathParameterfvNV)(GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPathParameteriNV)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glPathParameterivNV)(GLuint,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glPathStencilDepthOffsetNV)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glPathStencilFuncNV)(GLenum,GLint,GLuint);
+ void (WINE_GLAPI *p_glPathStringNV)(GLuint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glPathSubCommandsNV)(GLuint,GLsizei,GLsizei,GLsizei,const GLubyte*,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glPathSubCoordsNV)(GLuint,GLsizei,GLsizei,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glPathTexGenNV)(GLenum,GLenum,GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glPauseTransformFeedback)(void);
+ void (WINE_GLAPI *p_glPauseTransformFeedbackNV)(void);
+ void (WINE_GLAPI *p_glPixelDataRangeNV)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glPixelTexGenParameterfSGIS)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPixelTexGenParameterfvSGIS)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPixelTexGenParameteriSGIS)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPixelTexGenParameterivSGIS)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glPixelTexGenSGIX)(GLenum);
+ void (WINE_GLAPI *p_glPixelTransformParameterfEXT)(GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPixelTransformParameterfvEXT)(GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPixelTransformParameteriEXT)(GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glPixelTransformParameterivEXT)(GLenum,GLenum,const GLint*);
+ GLboolean (WINE_GLAPI *p_glPointAlongPathNV)(GLuint,GLsizei,GLsizei,GLfloat,GLfloat*,GLfloat*,GLfloat*,GLfloat*);
+ void (WINE_GLAPI *p_glPointParameterf)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPointParameterfARB)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPointParameterfEXT)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPointParameterfSGIS)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glPointParameterfv)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPointParameterfvARB)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPointParameterfvEXT)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPointParameterfvSGIS)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glPointParameteri)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPointParameteriNV)(GLenum,GLint);
+ void (WINE_GLAPI *p_glPointParameteriv)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glPointParameterivNV)(GLenum,const GLint*);
+ GLint (WINE_GLAPI *p_glPollAsyncSGIX)(GLuint*);
+ GLint (WINE_GLAPI *p_glPollInstrumentsSGIX)(GLint*);
+ void (WINE_GLAPI *p_glPolygonOffsetEXT)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glPopDebugGroup)(void);
+ void (WINE_GLAPI *p_glPresentFrameDualFillNV)(GLuint,UINT64,GLuint,GLuint,GLenum,GLenum,GLuint,GLenum,GLuint,GLenum,GLuint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glPresentFrameKeyedNV)(GLuint,UINT64,GLuint,GLuint,GLenum,GLenum,GLuint,GLuint,GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glPrimitiveRestartIndex)(GLuint);
+ void (WINE_GLAPI *p_glPrimitiveRestartIndexNV)(GLuint);
+ void (WINE_GLAPI *p_glPrimitiveRestartNV)(void);
+ void (WINE_GLAPI *p_glPrioritizeTexturesEXT)(GLsizei,const GLuint*,const GLclampf*);
+ void (WINE_GLAPI *p_glProgramBinary)(GLuint,GLenum,const GLvoid*,GLsizei);
+ void (WINE_GLAPI *p_glProgramBufferParametersIivNV)(GLenum,GLuint,GLuint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramBufferParametersIuivNV)(GLenum,GLuint,GLuint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramBufferParametersfvNV)(GLenum,GLuint,GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramEnvParameter4dARB)(GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramEnvParameter4dvARB)(GLenum,GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramEnvParameter4fARB)(GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramEnvParameter4fvARB)(GLenum,GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramEnvParameterI4iNV)(GLenum,GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramEnvParameterI4ivNV)(GLenum,GLuint,const GLint*);
+ void (WINE_GLAPI *p_glProgramEnvParameterI4uiNV)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramEnvParameterI4uivNV)(GLenum,GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glProgramEnvParameters4fvEXT)(GLenum,GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramEnvParametersI4ivNV)(GLenum,GLuint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramEnvParametersI4uivNV)(GLenum,GLuint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramLocalParameter4dARB)(GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramLocalParameter4dvARB)(GLenum,GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramLocalParameter4fARB)(GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramLocalParameter4fvARB)(GLenum,GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramLocalParameterI4iNV)(GLenum,GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramLocalParameterI4ivNV)(GLenum,GLuint,const GLint*);
+ void (WINE_GLAPI *p_glProgramLocalParameterI4uiNV)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramLocalParameterI4uivNV)(GLenum,GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glProgramLocalParameters4fvEXT)(GLenum,GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramLocalParametersI4ivNV)(GLenum,GLuint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramLocalParametersI4uivNV)(GLenum,GLuint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramNamedParameter4dNV)(GLuint,GLsizei,const GLubyte*,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramNamedParameter4dvNV)(GLuint,GLsizei,const GLubyte*,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramNamedParameter4fNV)(GLuint,GLsizei,const GLubyte*,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramNamedParameter4fvNV)(GLuint,GLsizei,const GLubyte*,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramParameter4dNV)(GLenum,GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramParameter4dvNV)(GLenum,GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramParameter4fNV)(GLenum,GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramParameter4fvNV)(GLenum,GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramParameteri)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glProgramParameteriARB)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glProgramParameteriEXT)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glProgramParameters4dvNV)(GLenum,GLuint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramParameters4fvNV)(GLenum,GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramStringARB)(GLenum,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glProgramSubroutineParametersuivNV)(GLenum,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform1d)(GLuint,GLint,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform1dEXT)(GLuint,GLint,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform1dv)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform1dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform1f)(GLuint,GLint,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform1fEXT)(GLuint,GLint,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform1fv)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform1fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform1i)(GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform1i64NV)(GLuint,GLint,INT64);
+ void (WINE_GLAPI *p_glProgramUniform1i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glProgramUniform1iEXT)(GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform1iv)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform1ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform1ui)(GLuint,GLint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform1ui64NV)(GLuint,GLint,UINT64);
+ void (WINE_GLAPI *p_glProgramUniform1ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glProgramUniform1uiEXT)(GLuint,GLint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform1uiv)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform1uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform2d)(GLuint,GLint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform2dEXT)(GLuint,GLint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform2dv)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform2dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform2f)(GLuint,GLint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform2fEXT)(GLuint,GLint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform2fv)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform2fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform2i)(GLuint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform2i64NV)(GLuint,GLint,INT64,INT64);
+ void (WINE_GLAPI *p_glProgramUniform2i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glProgramUniform2iEXT)(GLuint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform2iv)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform2ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform2ui)(GLuint,GLint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform2ui64NV)(GLuint,GLint,UINT64,UINT64);
+ void (WINE_GLAPI *p_glProgramUniform2ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glProgramUniform2uiEXT)(GLuint,GLint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform2uiv)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform2uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform3d)(GLuint,GLint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform3dEXT)(GLuint,GLint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform3dv)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform3dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform3f)(GLuint,GLint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform3fEXT)(GLuint,GLint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform3fv)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform3fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform3i)(GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform3i64NV)(GLuint,GLint,INT64,INT64,INT64);
+ void (WINE_GLAPI *p_glProgramUniform3i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glProgramUniform3iEXT)(GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform3iv)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform3ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform3ui)(GLuint,GLint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform3ui64NV)(GLuint,GLint,UINT64,UINT64,UINT64);
+ void (WINE_GLAPI *p_glProgramUniform3ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glProgramUniform3uiEXT)(GLuint,GLint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform3uiv)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform3uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform4d)(GLuint,GLint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform4dEXT)(GLuint,GLint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glProgramUniform4dv)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform4dvEXT)(GLuint,GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniform4f)(GLuint,GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform4fEXT)(GLuint,GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glProgramUniform4fv)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform4fvEXT)(GLuint,GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniform4i)(GLuint,GLint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform4i64NV)(GLuint,GLint,INT64,INT64,INT64,INT64);
+ void (WINE_GLAPI *p_glProgramUniform4i64vNV)(GLuint,GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glProgramUniform4iEXT)(GLuint,GLint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glProgramUniform4iv)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform4ivEXT)(GLuint,GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glProgramUniform4ui)(GLuint,GLint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform4ui64NV)(GLuint,GLint,UINT64,UINT64,UINT64,UINT64);
+ void (WINE_GLAPI *p_glProgramUniform4ui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glProgramUniform4uiEXT)(GLuint,GLint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glProgramUniform4uiv)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniform4uivEXT)(GLuint,GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glProgramUniformHandleui64NV)(GLuint,GLint,UINT64);
+ void (WINE_GLAPI *p_glProgramUniformHandleui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x3dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x3dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x3fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x3fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x4dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x4dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x4fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix2x4fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x2dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x2dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x2fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x2fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x4dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x4dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x4fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix3x4fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x2dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x2dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x2fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x2fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x3dv)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x3dvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x3fv)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformMatrix4x3fvEXT)(GLuint,GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glProgramUniformui64NV)(GLuint,GLint,UINT64);
+ void (WINE_GLAPI *p_glProgramUniformui64vNV)(GLuint,GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glProgramVertexLimitNV)(GLenum,GLint);
+ void (WINE_GLAPI *p_glProvokingVertex)(GLenum);
+ void (WINE_GLAPI *p_glProvokingVertexEXT)(GLenum);
+ void (WINE_GLAPI *p_glPushClientAttribDefaultEXT)(GLbitfield);
+ void (WINE_GLAPI *p_glPushDebugGroup)(GLenum,GLuint,GLsizei,const GLchar*);
+ void (WINE_GLAPI *p_glQueryCounter)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glReadBufferRegion)(GLenum,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glReadInstrumentsSGIX)(GLint);
+ void (WINE_GLAPI *p_glReadnPixelsARB)(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glReferencePlaneSGIX)(const GLdouble*);
+ void (WINE_GLAPI *p_glReleaseShaderCompiler)(void);
+ void (WINE_GLAPI *p_glRenderbufferStorage)(GLenum,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glRenderbufferStorageEXT)(GLenum,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glRenderbufferStorageMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glRenderbufferStorageMultisampleCoverageNV)(GLenum,GLsizei,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glRenderbufferStorageMultisampleEXT)(GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glReplacementCodePointerSUN)(GLenum,GLsizei,const GLvoid**);
+ void (WINE_GLAPI *p_glReplacementCodeubSUN)(GLubyte);
+ void (WINE_GLAPI *p_glReplacementCodeubvSUN)(const GLubyte*);
+ void (WINE_GLAPI *p_glReplacementCodeuiColor3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiColor3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiColor4fNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiColor4fNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiColor4ubVertex3fSUN)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiColor4ubVertex3fvSUN)(const GLuint*,const GLubyte*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiSUN)(GLuint);
+ void (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiTexCoord2fVertex3fvSUN)(const GLuint*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuiVertex3fSUN)(GLuint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glReplacementCodeuiVertex3fvSUN)(const GLuint*,const GLfloat*);
+ void (WINE_GLAPI *p_glReplacementCodeuivSUN)(const GLuint*);
+ void (WINE_GLAPI *p_glReplacementCodeusSUN)(GLushort);
+ void (WINE_GLAPI *p_glReplacementCodeusvSUN)(const GLushort*);
+ void (WINE_GLAPI *p_glRequestResidentProgramsNV)(GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glResetHistogram)(GLenum);
+ void (WINE_GLAPI *p_glResetHistogramEXT)(GLenum);
+ void (WINE_GLAPI *p_glResetMinmax)(GLenum);
+ void (WINE_GLAPI *p_glResetMinmaxEXT)(GLenum);
+ void (WINE_GLAPI *p_glResizeBuffersMESA)(void);
+ void (WINE_GLAPI *p_glResumeTransformFeedback)(void);
+ void (WINE_GLAPI *p_glResumeTransformFeedbackNV)(void);
+ void (WINE_GLAPI *p_glSampleCoverage)(GLfloat,GLboolean);
+ void (WINE_GLAPI *p_glSampleCoverageARB)(GLfloat,GLboolean);
+ void (WINE_GLAPI *p_glSampleMapATI)(GLuint,GLuint,GLenum);
+ void (WINE_GLAPI *p_glSampleMaskEXT)(GLclampf,GLboolean);
+ void (WINE_GLAPI *p_glSampleMaskIndexedNV)(GLuint,GLbitfield);
+ void (WINE_GLAPI *p_glSampleMaskSGIS)(GLclampf,GLboolean);
+ void (WINE_GLAPI *p_glSampleMaski)(GLuint,GLbitfield);
+ void (WINE_GLAPI *p_glSamplePatternEXT)(GLenum);
+ void (WINE_GLAPI *p_glSamplePatternSGIS)(GLenum);
+ void (WINE_GLAPI *p_glSamplerParameterIiv)(GLuint,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glSamplerParameterIuiv)(GLuint,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glSamplerParameterf)(GLuint,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glSamplerParameterfv)(GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glSamplerParameteri)(GLuint,GLenum,GLint);
+ void (WINE_GLAPI *p_glSamplerParameteriv)(GLuint,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glScissorArrayv)(GLuint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glScissorIndexed)(GLuint,GLint,GLint,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glScissorIndexedv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glSecondaryColor3b)(GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glSecondaryColor3bEXT)(GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glSecondaryColor3bv)(const GLbyte*);
+ void (WINE_GLAPI *p_glSecondaryColor3bvEXT)(const GLbyte*);
+ void (WINE_GLAPI *p_glSecondaryColor3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glSecondaryColor3dEXT)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glSecondaryColor3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glSecondaryColor3dvEXT)(const GLdouble*);
+ void (WINE_GLAPI *p_glSecondaryColor3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glSecondaryColor3fEXT)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glSecondaryColor3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glSecondaryColor3fvEXT)(const GLfloat*);
+ void (WINE_GLAPI *p_glSecondaryColor3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glSecondaryColor3hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glSecondaryColor3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glSecondaryColor3iEXT)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glSecondaryColor3iv)(const GLint*);
+ void (WINE_GLAPI *p_glSecondaryColor3ivEXT)(const GLint*);
+ void (WINE_GLAPI *p_glSecondaryColor3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glSecondaryColor3sEXT)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glSecondaryColor3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glSecondaryColor3svEXT)(const GLshort*);
+ void (WINE_GLAPI *p_glSecondaryColor3ub)(GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glSecondaryColor3ubEXT)(GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glSecondaryColor3ubv)(const GLubyte*);
+ void (WINE_GLAPI *p_glSecondaryColor3ubvEXT)(const GLubyte*);
+ void (WINE_GLAPI *p_glSecondaryColor3ui)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glSecondaryColor3uiEXT)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glSecondaryColor3uiv)(const GLuint*);
+ void (WINE_GLAPI *p_glSecondaryColor3uivEXT)(const GLuint*);
+ void (WINE_GLAPI *p_glSecondaryColor3us)(GLushort,GLushort,GLushort);
+ void (WINE_GLAPI *p_glSecondaryColor3usEXT)(GLushort,GLushort,GLushort);
+ void (WINE_GLAPI *p_glSecondaryColor3usv)(const GLushort*);
+ void (WINE_GLAPI *p_glSecondaryColor3usvEXT)(const GLushort*);
+ void (WINE_GLAPI *p_glSecondaryColorFormatNV)(GLint,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glSecondaryColorP3ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glSecondaryColorP3uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glSecondaryColorPointer)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glSecondaryColorPointerEXT)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glSecondaryColorPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glSelectPerfMonitorCountersAMD)(GLuint,GLboolean,GLuint,GLint,GLuint*);
+ void (WINE_GLAPI *p_glSelectTextureCoordSetSGIS)(GLenum);
+ void (WINE_GLAPI *p_glSelectTextureSGIS)(GLenum);
+ void (WINE_GLAPI *p_glSeparableFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*,const GLvoid*);
+ void (WINE_GLAPI *p_glSeparableFilter2DEXT)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*,const GLvoid*);
+ void (WINE_GLAPI *p_glSetFenceAPPLE)(GLuint);
+ void (WINE_GLAPI *p_glSetFenceNV)(GLuint,GLenum);
+ void (WINE_GLAPI *p_glSetFragmentShaderConstantATI)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glSetInvariantEXT)(GLuint,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glSetLocalConstantEXT)(GLuint,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glSetMultisamplefvAMD)(GLenum,GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glShaderBinary)(GLsizei,const GLuint*,GLenum,const GLvoid*,GLsizei);
+ void (WINE_GLAPI *p_glShaderOp1EXT)(GLenum,GLuint,GLuint);
+ void (WINE_GLAPI *p_glShaderOp2EXT)(GLenum,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glShaderOp3EXT)(GLenum,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glShaderSource)(GLuint,GLsizei,const GLchar* const*,const GLint*);
+ void (WINE_GLAPI *p_glShaderSourceARB)(GLhandleARB,GLsizei,const GLcharARB**,const GLint*);
+ void (WINE_GLAPI *p_glShaderStorageBlockBinding)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glSharpenTexFuncSGIS)(GLenum,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glSpriteParameterfSGIX)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glSpriteParameterfvSGIX)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glSpriteParameteriSGIX)(GLenum,GLint);
+ void (WINE_GLAPI *p_glSpriteParameterivSGIX)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glStartInstrumentsSGIX)(void);
+ void (WINE_GLAPI *p_glStencilClearTagEXT)(GLsizei,GLuint);
+ void (WINE_GLAPI *p_glStencilFillPathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glStencilFillPathNV)(GLuint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glStencilFuncSeparate)(GLenum,GLenum,GLint,GLuint);
+ void (WINE_GLAPI *p_glStencilFuncSeparateATI)(GLenum,GLenum,GLint,GLuint);
+ void (WINE_GLAPI *p_glStencilMaskSeparate)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glStencilOpSeparate)(GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glStencilOpSeparateATI)(GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glStencilOpValueAMD)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glStencilStrokePathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLint,GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glStencilStrokePathNV)(GLuint,GLint,GLuint);
+ void (WINE_GLAPI *p_glStopInstrumentsSGIX)(GLint);
+ void (WINE_GLAPI *p_glStringMarkerGREMEDY)(GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glSwizzleEXT)(GLuint,GLuint,GLenum,GLenum,GLenum,GLenum);
+ void (WINE_GLAPI *p_glTagSampleBufferSGIX)(void);
+ void (WINE_GLAPI *p_glTangent3bEXT)(GLbyte,GLbyte,GLbyte);
+ void (WINE_GLAPI *p_glTangent3bvEXT)(const GLbyte*);
+ void (WINE_GLAPI *p_glTangent3dEXT)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glTangent3dvEXT)(const GLdouble*);
+ void (WINE_GLAPI *p_glTangent3fEXT)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTangent3fvEXT)(const GLfloat*);
+ void (WINE_GLAPI *p_glTangent3iEXT)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glTangent3ivEXT)(const GLint*);
+ void (WINE_GLAPI *p_glTangent3sEXT)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glTangent3svEXT)(const GLshort*);
+ void (WINE_GLAPI *p_glTangentPointerEXT)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glTbufferMask3DFX)(GLuint);
+ void (WINE_GLAPI *p_glTessellationFactorAMD)(GLfloat);
+ void (WINE_GLAPI *p_glTessellationModeAMD)(GLenum);
+ GLboolean (WINE_GLAPI *p_glTestFenceAPPLE)(GLuint);
+ GLboolean (WINE_GLAPI *p_glTestFenceNV)(GLuint);
+ GLboolean (WINE_GLAPI *p_glTestObjectAPPLE)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexBuffer)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexBufferARB)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexBufferEXT)(GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexBufferRange)(GLenum,GLenum,GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glTexBumpParameterfvATI)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glTexBumpParameterivATI)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTexCoord1hNV)(GLhalfNV);
+ void (WINE_GLAPI *p_glTexCoord1hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glTexCoord2fColor3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord2fColor3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord2fColor4fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord2fColor4ubVertex3fSUN)(GLfloat,GLfloat,GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord2fColor4ubVertex3fvSUN)(const GLfloat*,const GLubyte*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord2fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord2fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord2fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord2fVertex3fvSUN)(const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord2hNV)(GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glTexCoord2hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glTexCoord3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glTexCoord3hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glTexCoord4fColor4fNormal3fVertex4fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord4fColor4fNormal3fVertex4fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord4fVertex4fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glTexCoord4fVertex4fvSUN)(const GLfloat*,const GLfloat*);
+ void (WINE_GLAPI *p_glTexCoord4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glTexCoord4hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glTexCoordFormatNV)(GLint,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glTexCoordP1ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexCoordP1uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTexCoordP2ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexCoordP2uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTexCoordP3ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexCoordP3uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTexCoordP4ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexCoordP4uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTexCoordPointerEXT)(GLint,GLenum,GLsizei,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glTexCoordPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glTexCoordPointervINTEL)(GLint,GLenum,const GLvoid**);
+ void (WINE_GLAPI *p_glTexFilterFuncSGIS)(GLenum,GLenum,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glTexImage2DMultisample)(GLenum,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTexImage2DMultisampleCoverageNV)(GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTexImage3D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexImage3DEXT)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexImage3DMultisample)(GLenum,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTexImage3DMultisampleCoverageNV)(GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTexImage4DSGIS)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexParameterIiv)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTexParameterIivEXT)(GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTexParameterIuiv)(GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTexParameterIuivEXT)(GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTexRenderbufferNV)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glTexStorage1D)(GLenum,GLsizei,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glTexStorage2D)(GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glTexStorage2DMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTexStorage3D)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glTexStorage3DMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTexStorageSparseAMD)(GLenum,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLbitfield);
+ void (WINE_GLAPI *p_glTexSubImage1DEXT)(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexSubImage2DEXT)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexSubImage3DEXT)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTexSubImage4DSGIS)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureBarrierNV)(void);
+ void (WINE_GLAPI *p_glTextureBufferEXT)(GLuint,GLenum,GLenum,GLuint);
+ void (WINE_GLAPI *p_glTextureBufferRangeEXT)(GLuint,GLenum,GLenum,GLuint,GLintptr,GLsizeiptr);
+ void (WINE_GLAPI *p_glTextureColorMaskSGIS)(GLboolean,GLboolean,GLboolean,GLboolean);
+ void (WINE_GLAPI *p_glTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureImage2DMultisampleCoverageNV)(GLuint,GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTextureImage2DMultisampleNV)(GLuint,GLenum,GLsizei,GLint,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTextureImage3DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureImage3DMultisampleCoverageNV)(GLuint,GLenum,GLsizei,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTextureImage3DMultisampleNV)(GLuint,GLenum,GLsizei,GLint,GLsizei,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTextureLightEXT)(GLenum);
+ void (WINE_GLAPI *p_glTextureMaterialEXT)(GLenum,GLenum);
+ void (WINE_GLAPI *p_glTextureNormalEXT)(GLenum);
+ void (WINE_GLAPI *p_glTextureParameterIivEXT)(GLuint,GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTextureParameterIuivEXT)(GLuint,GLenum,GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glTextureParameterfEXT)(GLuint,GLenum,GLenum,GLfloat);
+ void (WINE_GLAPI *p_glTextureParameterfvEXT)(GLuint,GLenum,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glTextureParameteriEXT)(GLuint,GLenum,GLenum,GLint);
+ void (WINE_GLAPI *p_glTextureParameterivEXT)(GLuint,GLenum,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glTextureRangeAPPLE)(GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureRenderbufferEXT)(GLuint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glTextureStorage1DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glTextureStorage2DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glTextureStorage2DMultisampleEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTextureStorage3DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei);
+ void (WINE_GLAPI *p_glTextureStorage3DMultisampleEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean);
+ void (WINE_GLAPI *p_glTextureStorageSparseAMD)(GLuint,GLenum,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLbitfield);
+ void (WINE_GLAPI *p_glTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*);
+ void (WINE_GLAPI *p_glTextureView)(GLuint,GLenum,GLuint,GLenum,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glTrackMatrixNV)(GLenum,GLuint,GLenum,GLenum);
+ void (WINE_GLAPI *p_glTransformFeedbackAttribsNV)(GLuint,const GLint*,GLenum);
+ void (WINE_GLAPI *p_glTransformFeedbackStreamAttribsNV)(GLsizei,const GLint*,GLsizei,const GLint*,GLenum);
+ void (WINE_GLAPI *p_glTransformFeedbackVaryings)(GLuint,GLsizei,const GLchar* const*,GLenum);
+ void (WINE_GLAPI *p_glTransformFeedbackVaryingsEXT)(GLuint,GLsizei,const GLchar**,GLenum);
+ void (WINE_GLAPI *p_glTransformFeedbackVaryingsNV)(GLuint,GLsizei,const GLint*,GLenum);
+ void (WINE_GLAPI *p_glTransformPathNV)(GLuint,GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform1d)(GLint,GLdouble);
+ void (WINE_GLAPI *p_glUniform1dv)(GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glUniform1f)(GLint,GLfloat);
+ void (WINE_GLAPI *p_glUniform1fARB)(GLint,GLfloat);
+ void (WINE_GLAPI *p_glUniform1fv)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform1fvARB)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform1i)(GLint,GLint);
+ void (WINE_GLAPI *p_glUniform1i64NV)(GLint,INT64);
+ void (WINE_GLAPI *p_glUniform1i64vNV)(GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glUniform1iARB)(GLint,GLint);
+ void (WINE_GLAPI *p_glUniform1iv)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform1ivARB)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform1ui)(GLint,GLuint);
+ void (WINE_GLAPI *p_glUniform1ui64NV)(GLint,UINT64);
+ void (WINE_GLAPI *p_glUniform1ui64vNV)(GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glUniform1uiEXT)(GLint,GLuint);
+ void (WINE_GLAPI *p_glUniform1uiv)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform1uivEXT)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform2d)(GLint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glUniform2dv)(GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glUniform2f)(GLint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glUniform2fARB)(GLint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glUniform2fv)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform2fvARB)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform2i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glUniform2i64NV)(GLint,INT64,INT64);
+ void (WINE_GLAPI *p_glUniform2i64vNV)(GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glUniform2iARB)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glUniform2iv)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform2ivARB)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform2ui)(GLint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniform2ui64NV)(GLint,UINT64,UINT64);
+ void (WINE_GLAPI *p_glUniform2ui64vNV)(GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glUniform2uiEXT)(GLint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniform2uiv)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform2uivEXT)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform3d)(GLint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glUniform3dv)(GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glUniform3f)(GLint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glUniform3fARB)(GLint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glUniform3fv)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform3fvARB)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform3i)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glUniform3i64NV)(GLint,INT64,INT64,INT64);
+ void (WINE_GLAPI *p_glUniform3i64vNV)(GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glUniform3iARB)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glUniform3iv)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform3ivARB)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform3ui)(GLint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniform3ui64NV)(GLint,UINT64,UINT64,UINT64);
+ void (WINE_GLAPI *p_glUniform3ui64vNV)(GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glUniform3uiEXT)(GLint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniform3uiv)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform3uivEXT)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform4d)(GLint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glUniform4dv)(GLint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glUniform4f)(GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glUniform4fARB)(GLint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glUniform4fv)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform4fvARB)(GLint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glUniform4i)(GLint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glUniform4i64NV)(GLint,INT64,INT64,INT64,INT64);
+ void (WINE_GLAPI *p_glUniform4i64vNV)(GLint,GLsizei,const INT64*);
+ void (WINE_GLAPI *p_glUniform4iARB)(GLint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glUniform4iv)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform4ivARB)(GLint,GLsizei,const GLint*);
+ void (WINE_GLAPI *p_glUniform4ui)(GLint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniform4ui64NV)(GLint,UINT64,UINT64,UINT64,UINT64);
+ void (WINE_GLAPI *p_glUniform4ui64vNV)(GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glUniform4uiEXT)(GLint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniform4uiv)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniform4uivEXT)(GLint,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniformBlockBinding)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glUniformBufferEXT)(GLuint,GLint,GLuint);
+ void (WINE_GLAPI *p_glUniformHandleui64NV)(GLint,UINT64);
+ void (WINE_GLAPI *p_glUniformHandleui64vNV)(GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glUniformMatrix2dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix2fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix2fvARB)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix2x3dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix2x3fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix2x4dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix2x4fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix3dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix3fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix3fvARB)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix3x2dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix3x2fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix3x4dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix3x4fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix4dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix4fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix4fvARB)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix4x2dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix4x2fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformMatrix4x3dv)(GLint,GLsizei,GLboolean,const GLdouble*);
+ void (WINE_GLAPI *p_glUniformMatrix4x3fv)(GLint,GLsizei,GLboolean,const GLfloat*);
+ void (WINE_GLAPI *p_glUniformSubroutinesuiv)(GLenum,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glUniformui64NV)(GLint,UINT64);
+ void (WINE_GLAPI *p_glUniformui64vNV)(GLint,GLsizei,const UINT64*);
+ void (WINE_GLAPI *p_glUnlockArraysEXT)(void);
+ GLboolean (WINE_GLAPI *p_glUnmapBuffer)(GLenum);
+ GLboolean (WINE_GLAPI *p_glUnmapBufferARB)(GLenum);
+ GLboolean (WINE_GLAPI *p_glUnmapNamedBufferEXT)(GLuint);
+ void (WINE_GLAPI *p_glUnmapObjectBufferATI)(GLuint);
+ void (WINE_GLAPI *p_glUpdateObjectBufferATI)(GLuint,GLuint,GLsizei,const GLvoid*,GLenum);
+ void (WINE_GLAPI *p_glUseProgram)(GLuint);
+ void (WINE_GLAPI *p_glUseProgramObjectARB)(GLhandleARB);
+ void (WINE_GLAPI *p_glUseProgramStages)(GLuint,GLbitfield,GLuint);
+ void (WINE_GLAPI *p_glUseShaderProgramEXT)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glVDPAUFiniNV)(void);
+ void (WINE_GLAPI *p_glVDPAUGetSurfaceivNV)(GLvdpauSurfaceNV,GLenum,GLsizei,GLsizei*,GLint*);
+ void (WINE_GLAPI *p_glVDPAUInitNV)(const GLvoid*,const GLvoid*);
+ void (WINE_GLAPI *p_glVDPAUIsSurfaceNV)(GLvdpauSurfaceNV);
+ void (WINE_GLAPI *p_glVDPAUMapSurfacesNV)(GLsizei,const GLvdpauSurfaceNV*);
+ GLvdpauSurfaceNV (WINE_GLAPI *p_glVDPAURegisterOutputSurfaceNV)(GLvoid*,GLenum,GLsizei,const GLuint*);
+ GLvdpauSurfaceNV (WINE_GLAPI *p_glVDPAURegisterVideoSurfaceNV)(const GLvoid*,GLenum,GLsizei,const GLuint*);
+ void (WINE_GLAPI *p_glVDPAUSurfaceAccessNV)(GLvdpauSurfaceNV,GLenum);
+ void (WINE_GLAPI *p_glVDPAUUnmapSurfacesNV)(GLsizei,const GLvdpauSurfaceNV*);
+ void (WINE_GLAPI *p_glVDPAUUnregisterSurfaceNV)(GLvdpauSurfaceNV);
+ void (WINE_GLAPI *p_glValidateProgram)(GLuint);
+ void (WINE_GLAPI *p_glValidateProgramARB)(GLhandleARB);
+ void (WINE_GLAPI *p_glValidateProgramPipeline)(GLuint);
+ void (WINE_GLAPI *p_glVariantArrayObjectATI)(GLuint,GLenum,GLsizei,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVariantPointerEXT)(GLuint,GLenum,GLuint,const GLvoid*);
+ void (WINE_GLAPI *p_glVariantbvEXT)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVariantdvEXT)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVariantfvEXT)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVariantivEXT)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVariantsvEXT)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVariantubvEXT)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVariantuivEXT)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVariantusvEXT)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertex2hNV)(GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glVertex2hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertex3hNV)(GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glVertex3hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertex4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glVertex4hvNV)(const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexArrayBindVertexBufferEXT)(GLuint,GLuint,GLuint,GLintptr,GLsizei);
+ void (WINE_GLAPI *p_glVertexArrayParameteriAPPLE)(GLenum,GLint);
+ void (WINE_GLAPI *p_glVertexArrayRangeAPPLE)(GLsizei,GLvoid*);
+ void (WINE_GLAPI *p_glVertexArrayRangeNV)(GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexArrayVertexAttribBindingEXT)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexArrayVertexAttribFormatEXT)(GLuint,GLuint,GLint,GLenum,GLboolean,GLuint);
+ void (WINE_GLAPI *p_glVertexArrayVertexAttribIFormatEXT)(GLuint,GLuint,GLint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexArrayVertexAttribLFormatEXT)(GLuint,GLuint,GLint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexArrayVertexAttribLOffsetEXT)(GLuint,GLuint,GLuint,GLint,GLenum,GLsizei,GLintptr);
+ void (WINE_GLAPI *p_glVertexArrayVertexBindingDivisorEXT)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttrib1d)(GLuint,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib1dARB)(GLuint,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib1dNV)(GLuint,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib1dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib1dvARB)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib1dvNV)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib1f)(GLuint,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib1fARB)(GLuint,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib1fNV)(GLuint,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib1fv)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib1fvARB)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib1fvNV)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib1hNV)(GLuint,GLhalfNV);
+ void (WINE_GLAPI *p_glVertexAttrib1hvNV)(GLuint,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttrib1s)(GLuint,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib1sARB)(GLuint,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib1sNV)(GLuint,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib1sv)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib1svARB)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib1svNV)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib2d)(GLuint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib2dARB)(GLuint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib2dNV)(GLuint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib2dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib2dvARB)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib2dvNV)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib2f)(GLuint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib2fARB)(GLuint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib2fNV)(GLuint,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib2fv)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib2fvARB)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib2fvNV)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib2hNV)(GLuint,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glVertexAttrib2hvNV)(GLuint,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttrib2s)(GLuint,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib2sARB)(GLuint,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib2sNV)(GLuint,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib2sv)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib2svARB)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib2svNV)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib3d)(GLuint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib3dARB)(GLuint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib3dNV)(GLuint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib3dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib3dvARB)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib3dvNV)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib3f)(GLuint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib3fARB)(GLuint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib3fNV)(GLuint,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib3fv)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib3fvARB)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib3fvNV)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib3hNV)(GLuint,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glVertexAttrib3hvNV)(GLuint,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttrib3s)(GLuint,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib3sARB)(GLuint,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib3sNV)(GLuint,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib3sv)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib3svARB)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib3svNV)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib4Nbv)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4NbvARB)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4Niv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttrib4NivARB)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttrib4Nsv)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib4NsvARB)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib4Nub)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glVertexAttrib4NubARB)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glVertexAttrib4Nubv)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4NubvARB)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4Nuiv)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttrib4NuivARB)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttrib4Nusv)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertexAttrib4NusvARB)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertexAttrib4bv)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4bvARB)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4d)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib4dARB)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib4dNV)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttrib4dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib4dvARB)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib4dvNV)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttrib4f)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib4fARB)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib4fNV)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexAttrib4fv)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib4fvARB)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib4fvNV)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttrib4hNV)(GLuint,GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV);
+ void (WINE_GLAPI *p_glVertexAttrib4hvNV)(GLuint,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttrib4iv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttrib4ivARB)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttrib4s)(GLuint,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib4sARB)(GLuint,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib4sNV)(GLuint,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexAttrib4sv)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib4svARB)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib4svNV)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttrib4ubNV)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte);
+ void (WINE_GLAPI *p_glVertexAttrib4ubv)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4ubvARB)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4ubvNV)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttrib4uiv)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttrib4uivARB)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttrib4usv)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertexAttrib4usvARB)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertexAttribArrayObjectATI)(GLuint,GLint,GLenum,GLboolean,GLsizei,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribBinding)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribDivisor)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribDivisorARB)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribFormat)(GLuint,GLint,GLenum,GLboolean,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribFormatNV)(GLuint,GLint,GLenum,GLboolean,GLsizei);
+ void (WINE_GLAPI *p_glVertexAttribI1i)(GLuint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI1iEXT)(GLuint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI1iv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI1ivEXT)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI1ui)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI1uiEXT)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI1uiv)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI1uivEXT)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI2i)(GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI2iEXT)(GLuint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI2iv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI2ivEXT)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI2ui)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI2uiEXT)(GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI2uiv)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI2uivEXT)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI3i)(GLuint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI3iEXT)(GLuint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI3iv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI3ivEXT)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI3ui)(GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI3uiEXT)(GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI3uiv)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI3uivEXT)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI4bv)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVertexAttribI4bvEXT)(GLuint,const GLbyte*);
+ void (WINE_GLAPI *p_glVertexAttribI4i)(GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI4iEXT)(GLuint,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexAttribI4iv)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI4ivEXT)(GLuint,const GLint*);
+ void (WINE_GLAPI *p_glVertexAttribI4sv)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttribI4svEXT)(GLuint,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttribI4ubv)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttribI4ubvEXT)(GLuint,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexAttribI4ui)(GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI4uiEXT)(GLuint,GLuint,GLuint,GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribI4uiv)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI4uivEXT)(GLuint,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribI4usv)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertexAttribI4usvEXT)(GLuint,const GLushort*);
+ void (WINE_GLAPI *p_glVertexAttribIFormat)(GLuint,GLint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribIFormatNV)(GLuint,GLint,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glVertexAttribIPointer)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribIPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribL1d)(GLuint,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL1dEXT)(GLuint,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL1dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL1dvEXT)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL1i64NV)(GLuint,INT64);
+ void (WINE_GLAPI *p_glVertexAttribL1i64vNV)(GLuint,const INT64*);
+ void (WINE_GLAPI *p_glVertexAttribL1ui64NV)(GLuint,UINT64);
+ void (WINE_GLAPI *p_glVertexAttribL1ui64vNV)(GLuint,const UINT64*);
+ void (WINE_GLAPI *p_glVertexAttribL2d)(GLuint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL2dEXT)(GLuint,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL2dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL2dvEXT)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL2i64NV)(GLuint,INT64,INT64);
+ void (WINE_GLAPI *p_glVertexAttribL2i64vNV)(GLuint,const INT64*);
+ void (WINE_GLAPI *p_glVertexAttribL2ui64NV)(GLuint,UINT64,UINT64);
+ void (WINE_GLAPI *p_glVertexAttribL2ui64vNV)(GLuint,const UINT64*);
+ void (WINE_GLAPI *p_glVertexAttribL3d)(GLuint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL3dEXT)(GLuint,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL3dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL3dvEXT)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL3i64NV)(GLuint,INT64,INT64,INT64);
+ void (WINE_GLAPI *p_glVertexAttribL3i64vNV)(GLuint,const INT64*);
+ void (WINE_GLAPI *p_glVertexAttribL3ui64NV)(GLuint,UINT64,UINT64,UINT64);
+ void (WINE_GLAPI *p_glVertexAttribL3ui64vNV)(GLuint,const UINT64*);
+ void (WINE_GLAPI *p_glVertexAttribL4d)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL4dEXT)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexAttribL4dv)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL4dvEXT)(GLuint,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribL4i64NV)(GLuint,INT64,INT64,INT64,INT64);
+ void (WINE_GLAPI *p_glVertexAttribL4i64vNV)(GLuint,const INT64*);
+ void (WINE_GLAPI *p_glVertexAttribL4ui64NV)(GLuint,UINT64,UINT64,UINT64,UINT64);
+ void (WINE_GLAPI *p_glVertexAttribL4ui64vNV)(GLuint,const UINT64*);
+ void (WINE_GLAPI *p_glVertexAttribLFormat)(GLuint,GLint,GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribLFormatNV)(GLuint,GLint,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glVertexAttribLPointer)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribLPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribP1ui)(GLuint,GLenum,GLboolean,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribP1uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribP2ui)(GLuint,GLenum,GLboolean,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribP2uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribP3ui)(GLuint,GLenum,GLboolean,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribP3uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribP4ui)(GLuint,GLenum,GLboolean,GLuint);
+ void (WINE_GLAPI *p_glVertexAttribP4uiv)(GLuint,GLenum,GLboolean,const GLuint*);
+ void (WINE_GLAPI *p_glVertexAttribPointer)(GLuint,GLint,GLenum,GLboolean,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribPointerARB)(GLuint,GLint,GLenum,GLboolean,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribPointerNV)(GLuint,GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexAttribs1dvNV)(GLuint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribs1fvNV)(GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttribs1hvNV)(GLuint,GLsizei,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttribs1svNV)(GLuint,GLsizei,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttribs2dvNV)(GLuint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribs2fvNV)(GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttribs2hvNV)(GLuint,GLsizei,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttribs2svNV)(GLuint,GLsizei,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttribs3dvNV)(GLuint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribs3fvNV)(GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttribs3hvNV)(GLuint,GLsizei,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttribs3svNV)(GLuint,GLsizei,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttribs4dvNV)(GLuint,GLsizei,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexAttribs4fvNV)(GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexAttribs4hvNV)(GLuint,GLsizei,const GLhalfNV*);
+ void (WINE_GLAPI *p_glVertexAttribs4svNV)(GLuint,GLsizei,const GLshort*);
+ void (WINE_GLAPI *p_glVertexAttribs4ubvNV)(GLuint,GLsizei,const GLubyte*);
+ void (WINE_GLAPI *p_glVertexBindingDivisor)(GLuint,GLuint);
+ void (WINE_GLAPI *p_glVertexBlendARB)(GLint);
+ void (WINE_GLAPI *p_glVertexBlendEnvfATI)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glVertexBlendEnviATI)(GLenum,GLint);
+ void (WINE_GLAPI *p_glVertexFormatNV)(GLint,GLenum,GLsizei);
+ void (WINE_GLAPI *p_glVertexP2ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexP2uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glVertexP3ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexP3uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glVertexP4ui)(GLenum,GLuint);
+ void (WINE_GLAPI *p_glVertexP4uiv)(GLenum,const GLuint*);
+ void (WINE_GLAPI *p_glVertexPointerEXT)(GLint,GLenum,GLsizei,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexPointerListIBM)(GLint,GLenum,GLint,const GLvoid**,GLint);
+ void (WINE_GLAPI *p_glVertexPointervINTEL)(GLint,GLenum,const GLvoid**);
+ void (WINE_GLAPI *p_glVertexStream1dATI)(GLenum,GLdouble);
+ void (WINE_GLAPI *p_glVertexStream1dvATI)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexStream1fATI)(GLenum,GLfloat);
+ void (WINE_GLAPI *p_glVertexStream1fvATI)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexStream1iATI)(GLenum,GLint);
+ void (WINE_GLAPI *p_glVertexStream1ivATI)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glVertexStream1sATI)(GLenum,GLshort);
+ void (WINE_GLAPI *p_glVertexStream1svATI)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glVertexStream2dATI)(GLenum,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexStream2dvATI)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexStream2fATI)(GLenum,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexStream2fvATI)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexStream2iATI)(GLenum,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexStream2ivATI)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glVertexStream2sATI)(GLenum,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexStream2svATI)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glVertexStream3dATI)(GLenum,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexStream3dvATI)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexStream3fATI)(GLenum,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexStream3fvATI)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexStream3iATI)(GLenum,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexStream3ivATI)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glVertexStream3sATI)(GLenum,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexStream3svATI)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glVertexStream4dATI)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glVertexStream4dvATI)(GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glVertexStream4fATI)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glVertexStream4fvATI)(GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glVertexStream4iATI)(GLenum,GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glVertexStream4ivATI)(GLenum,const GLint*);
+ void (WINE_GLAPI *p_glVertexStream4sATI)(GLenum,GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glVertexStream4svATI)(GLenum,const GLshort*);
+ void (WINE_GLAPI *p_glVertexWeightPointerEXT)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glVertexWeightfEXT)(GLfloat);
+ void (WINE_GLAPI *p_glVertexWeightfvEXT)(const GLfloat*);
+ void (WINE_GLAPI *p_glVertexWeighthNV)(GLhalfNV);
+ void (WINE_GLAPI *p_glVertexWeighthvNV)(const GLhalfNV*);
+ GLenum (WINE_GLAPI *p_glVideoCaptureNV)(GLuint,GLuint*,UINT64*);
+ void (WINE_GLAPI *p_glVideoCaptureStreamParameterdvNV)(GLuint,GLuint,GLenum,const GLdouble*);
+ void (WINE_GLAPI *p_glVideoCaptureStreamParameterfvNV)(GLuint,GLuint,GLenum,const GLfloat*);
+ void (WINE_GLAPI *p_glVideoCaptureStreamParameterivNV)(GLuint,GLuint,GLenum,const GLint*);
+ void (WINE_GLAPI *p_glViewportArrayv)(GLuint,GLsizei,const GLfloat*);
+ void (WINE_GLAPI *p_glViewportIndexedf)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glViewportIndexedfv)(GLuint,const GLfloat*);
+ void (WINE_GLAPI *p_glWaitSync)(GLvoid*,GLbitfield,UINT64);
+ void (WINE_GLAPI *p_glWeightPathsNV)(GLuint,GLsizei,const GLuint*,const GLfloat*);
+ void (WINE_GLAPI *p_glWeightPointerARB)(GLint,GLenum,GLsizei,const GLvoid*);
+ void (WINE_GLAPI *p_glWeightbvARB)(GLint,const GLbyte*);
+ void (WINE_GLAPI *p_glWeightdvARB)(GLint,const GLdouble*);
+ void (WINE_GLAPI *p_glWeightfvARB)(GLint,const GLfloat*);
+ void (WINE_GLAPI *p_glWeightivARB)(GLint,const GLint*);
+ void (WINE_GLAPI *p_glWeightsvARB)(GLint,const GLshort*);
+ void (WINE_GLAPI *p_glWeightubvARB)(GLint,const GLubyte*);
+ void (WINE_GLAPI *p_glWeightuivARB)(GLint,const GLuint*);
+ void (WINE_GLAPI *p_glWeightusvARB)(GLint,const GLushort*);
+ void (WINE_GLAPI *p_glWindowPos2d)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos2dARB)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos2dMESA)(GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos2dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos2dvARB)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos2dvMESA)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos2f)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos2fARB)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos2fMESA)(GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos2fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos2fvARB)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos2fvMESA)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos2i)(GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos2iARB)(GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos2iMESA)(GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos2iv)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos2ivARB)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos2ivMESA)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos2s)(GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos2sARB)(GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos2sMESA)(GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos2sv)(const GLshort*);
+ void (WINE_GLAPI *p_glWindowPos2svARB)(const GLshort*);
+ void (WINE_GLAPI *p_glWindowPos2svMESA)(const GLshort*);
+ void (WINE_GLAPI *p_glWindowPos3d)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos3dARB)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos3dMESA)(GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos3dv)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos3dvARB)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos3dvMESA)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos3f)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos3fARB)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos3fMESA)(GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos3fv)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos3fvARB)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos3fvMESA)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos3i)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos3iARB)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos3iMESA)(GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos3iv)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos3ivARB)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos3ivMESA)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos3s)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos3sARB)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos3sMESA)(GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos3sv)(const GLshort*);
+ void (WINE_GLAPI *p_glWindowPos3svARB)(const GLshort*);
+ void (WINE_GLAPI *p_glWindowPos3svMESA)(const GLshort*);
+ void (WINE_GLAPI *p_glWindowPos4dMESA)(GLdouble,GLdouble,GLdouble,GLdouble);
+ void (WINE_GLAPI *p_glWindowPos4dvMESA)(const GLdouble*);
+ void (WINE_GLAPI *p_glWindowPos4fMESA)(GLfloat,GLfloat,GLfloat,GLfloat);
+ void (WINE_GLAPI *p_glWindowPos4fvMESA)(const GLfloat*);
+ void (WINE_GLAPI *p_glWindowPos4iMESA)(GLint,GLint,GLint,GLint);
+ void (WINE_GLAPI *p_glWindowPos4ivMESA)(const GLint*);
+ void (WINE_GLAPI *p_glWindowPos4sMESA)(GLshort,GLshort,GLshort,GLshort);
+ void (WINE_GLAPI *p_glWindowPos4svMESA)(const GLshort*);
+ void (WINE_GLAPI *p_glWriteMaskEXT)(GLuint,GLuint,GLenum,GLenum,GLenum,GLenum);
+ GLvoid* (WINE_GLAPI *p_wglAllocateMemoryNV)(GLsizei,GLfloat,GLfloat,GLfloat);
+ BOOL (WINE_GLAPI *p_wglBindTexImageARB)(struct wgl_pbuffer *,int);
+ BOOL (WINE_GLAPI *p_wglChoosePixelFormatARB)(HDC,const int*,const FLOAT*,UINT,int*,UINT*);
+ struct wgl_context * (WINE_GLAPI *p_wglCreateContextAttribsARB)(HDC,struct wgl_context *,const int*);
+ struct wgl_pbuffer * (WINE_GLAPI *p_wglCreatePbufferARB)(HDC,int,int,int,const int*);
+ BOOL (WINE_GLAPI *p_wglDestroyPbufferARB)(struct wgl_pbuffer *);
+ void (WINE_GLAPI *p_wglFreeMemoryNV)(void*);
+ HDC (WINE_GLAPI *p_wglGetCurrentReadDCARB)(void);
+ const GLubyte * (WINE_GLAPI *p_wglGetExtensionsStringARB)(HDC);
+ const GLubyte * (WINE_GLAPI *p_wglGetExtensionsStringEXT)(void);
+ HDC (WINE_GLAPI *p_wglGetPbufferDCARB)(struct wgl_pbuffer *);
+ BOOL (WINE_GLAPI *p_wglGetPixelFormatAttribfvARB)(HDC,int,int,UINT,const int*,FLOAT*);
+ BOOL (WINE_GLAPI *p_wglGetPixelFormatAttribivARB)(HDC,int,int,UINT,const int*,int*);
+ int (WINE_GLAPI *p_wglGetSwapIntervalEXT)(void);
+ BOOL (WINE_GLAPI *p_wglMakeContextCurrentARB)(HDC,HDC,struct wgl_context *);
+ BOOL (WINE_GLAPI *p_wglQueryPbufferARB)(struct wgl_pbuffer *,int,int*);
+ int (WINE_GLAPI *p_wglReleasePbufferDCARB)(struct wgl_pbuffer *,HDC);
+ BOOL (WINE_GLAPI *p_wglReleaseTexImageARB)(struct wgl_pbuffer *,int);
+ BOOL (WINE_GLAPI *p_wglSetPbufferAttribARB)(struct wgl_pbuffer *,const int*);
+ BOOL (WINE_GLAPI *p_wglSetPixelFormatWINE)(HDC,int);
+ BOOL (WINE_GLAPI *p_wglSwapIntervalEXT)(int);
+ } ext;
+};
+
+#define ALL_WGL_FUNCS \
+ USE_GL_FUNC(glAccum) \
+ USE_GL_FUNC(glAlphaFunc) \
+ USE_GL_FUNC(glAreTexturesResident) \
+ USE_GL_FUNC(glArrayElement) \
+ USE_GL_FUNC(glBegin) \
+ USE_GL_FUNC(glBindTexture) \
+ USE_GL_FUNC(glBitmap) \
+ USE_GL_FUNC(glBlendFunc) \
+ USE_GL_FUNC(glCallList) \
+ USE_GL_FUNC(glCallLists) \
+ USE_GL_FUNC(glClear) \
+ USE_GL_FUNC(glClearAccum) \
+ USE_GL_FUNC(glClearColor) \
+ USE_GL_FUNC(glClearDepth) \
+ USE_GL_FUNC(glClearIndex) \
+ USE_GL_FUNC(glClearStencil) \
+ USE_GL_FUNC(glClipPlane) \
+ USE_GL_FUNC(glColor3b) \
+ USE_GL_FUNC(glColor3bv) \
+ USE_GL_FUNC(glColor3d) \
+ USE_GL_FUNC(glColor3dv) \
+ USE_GL_FUNC(glColor3f) \
+ USE_GL_FUNC(glColor3fv) \
+ USE_GL_FUNC(glColor3i) \
+ USE_GL_FUNC(glColor3iv) \
+ USE_GL_FUNC(glColor3s) \
+ USE_GL_FUNC(glColor3sv) \
+ USE_GL_FUNC(glColor3ub) \
+ USE_GL_FUNC(glColor3ubv) \
+ USE_GL_FUNC(glColor3ui) \
+ USE_GL_FUNC(glColor3uiv) \
+ USE_GL_FUNC(glColor3us) \
+ USE_GL_FUNC(glColor3usv) \
+ USE_GL_FUNC(glColor4b) \
+ USE_GL_FUNC(glColor4bv) \
+ USE_GL_FUNC(glColor4d) \
+ USE_GL_FUNC(glColor4dv) \
+ USE_GL_FUNC(glColor4f) \
+ USE_GL_FUNC(glColor4fv) \
+ USE_GL_FUNC(glColor4i) \
+ USE_GL_FUNC(glColor4iv) \
+ USE_GL_FUNC(glColor4s) \
+ USE_GL_FUNC(glColor4sv) \
+ USE_GL_FUNC(glColor4ub) \
+ USE_GL_FUNC(glColor4ubv) \
+ USE_GL_FUNC(glColor4ui) \
+ USE_GL_FUNC(glColor4uiv) \
+ USE_GL_FUNC(glColor4us) \
+ USE_GL_FUNC(glColor4usv) \
+ USE_GL_FUNC(glColorMask) \
+ USE_GL_FUNC(glColorMaterial) \
+ USE_GL_FUNC(glColorPointer) \
+ USE_GL_FUNC(glCopyPixels) \
+ USE_GL_FUNC(glCopyTexImage1D) \
+ USE_GL_FUNC(glCopyTexImage2D) \
+ USE_GL_FUNC(glCopyTexSubImage1D) \
+ USE_GL_FUNC(glCopyTexSubImage2D) \
+ USE_GL_FUNC(glCullFace) \
+ USE_GL_FUNC(glDeleteLists) \
+ USE_GL_FUNC(glDeleteTextures) \
+ USE_GL_FUNC(glDepthFunc) \
+ USE_GL_FUNC(glDepthMask) \
+ USE_GL_FUNC(glDepthRange) \
+ USE_GL_FUNC(glDisable) \
+ USE_GL_FUNC(glDisableClientState) \
+ USE_GL_FUNC(glDrawArrays) \
+ USE_GL_FUNC(glDrawBuffer) \
+ USE_GL_FUNC(glDrawElements) \
+ USE_GL_FUNC(glDrawPixels) \
+ USE_GL_FUNC(glEdgeFlag) \
+ USE_GL_FUNC(glEdgeFlagPointer) \
+ USE_GL_FUNC(glEdgeFlagv) \
+ USE_GL_FUNC(glEnable) \
+ USE_GL_FUNC(glEnableClientState) \
+ USE_GL_FUNC(glEnd) \
+ USE_GL_FUNC(glEndList) \
+ USE_GL_FUNC(glEvalCoord1d) \
+ USE_GL_FUNC(glEvalCoord1dv) \
+ USE_GL_FUNC(glEvalCoord1f) \
+ USE_GL_FUNC(glEvalCoord1fv) \
+ USE_GL_FUNC(glEvalCoord2d) \
+ USE_GL_FUNC(glEvalCoord2dv) \
+ USE_GL_FUNC(glEvalCoord2f) \
+ USE_GL_FUNC(glEvalCoord2fv) \
+ USE_GL_FUNC(glEvalMesh1) \
+ USE_GL_FUNC(glEvalMesh2) \
+ USE_GL_FUNC(glEvalPoint1) \
+ USE_GL_FUNC(glEvalPoint2) \
+ USE_GL_FUNC(glFeedbackBuffer) \
+ USE_GL_FUNC(glFinish) \
+ USE_GL_FUNC(glFlush) \
+ USE_GL_FUNC(glFogf) \
+ USE_GL_FUNC(glFogfv) \
+ USE_GL_FUNC(glFogi) \
+ USE_GL_FUNC(glFogiv) \
+ USE_GL_FUNC(glFrontFace) \
+ USE_GL_FUNC(glFrustum) \
+ USE_GL_FUNC(glGenLists) \
+ USE_GL_FUNC(glGenTextures) \
+ USE_GL_FUNC(glGetBooleanv) \
+ USE_GL_FUNC(glGetClipPlane) \
+ USE_GL_FUNC(glGetDoublev) \
+ USE_GL_FUNC(glGetError) \
+ USE_GL_FUNC(glGetFloatv) \
+ USE_GL_FUNC(glGetIntegerv) \
+ USE_GL_FUNC(glGetLightfv) \
+ USE_GL_FUNC(glGetLightiv) \
+ USE_GL_FUNC(glGetMapdv) \
+ USE_GL_FUNC(glGetMapfv) \
+ USE_GL_FUNC(glGetMapiv) \
+ USE_GL_FUNC(glGetMaterialfv) \
+ USE_GL_FUNC(glGetMaterialiv) \
+ USE_GL_FUNC(glGetPixelMapfv) \
+ USE_GL_FUNC(glGetPixelMapuiv) \
+ USE_GL_FUNC(glGetPixelMapusv) \
+ USE_GL_FUNC(glGetPointerv) \
+ USE_GL_FUNC(glGetPolygonStipple) \
+ USE_GL_FUNC(glGetString) \
+ USE_GL_FUNC(glGetTexEnvfv) \
+ USE_GL_FUNC(glGetTexEnviv) \
+ USE_GL_FUNC(glGetTexGendv) \
+ USE_GL_FUNC(glGetTexGenfv) \
+ USE_GL_FUNC(glGetTexGeniv) \
+ USE_GL_FUNC(glGetTexImage) \
+ USE_GL_FUNC(glGetTexLevelParameterfv) \
+ USE_GL_FUNC(glGetTexLevelParameteriv) \
+ USE_GL_FUNC(glGetTexParameterfv) \
+ USE_GL_FUNC(glGetTexParameteriv) \
+ USE_GL_FUNC(glHint) \
+ USE_GL_FUNC(glIndexMask) \
+ USE_GL_FUNC(glIndexPointer) \
+ USE_GL_FUNC(glIndexd) \
+ USE_GL_FUNC(glIndexdv) \
+ USE_GL_FUNC(glIndexf) \
+ USE_GL_FUNC(glIndexfv) \
+ USE_GL_FUNC(glIndexi) \
+ USE_GL_FUNC(glIndexiv) \
+ USE_GL_FUNC(glIndexs) \
+ USE_GL_FUNC(glIndexsv) \
+ USE_GL_FUNC(glIndexub) \
+ USE_GL_FUNC(glIndexubv) \
+ USE_GL_FUNC(glInitNames) \
+ USE_GL_FUNC(glInterleavedArrays) \
+ USE_GL_FUNC(glIsEnabled) \
+ USE_GL_FUNC(glIsList) \
+ USE_GL_FUNC(glIsTexture) \
+ USE_GL_FUNC(glLightModelf) \
+ USE_GL_FUNC(glLightModelfv) \
+ USE_GL_FUNC(glLightModeli) \
+ USE_GL_FUNC(glLightModeliv) \
+ USE_GL_FUNC(glLightf) \
+ USE_GL_FUNC(glLightfv) \
+ USE_GL_FUNC(glLighti) \
+ USE_GL_FUNC(glLightiv) \
+ USE_GL_FUNC(glLineStipple) \
+ USE_GL_FUNC(glLineWidth) \
+ USE_GL_FUNC(glListBase) \
+ USE_GL_FUNC(glLoadIdentity) \
+ USE_GL_FUNC(glLoadMatrixd) \
+ USE_GL_FUNC(glLoadMatrixf) \
+ USE_GL_FUNC(glLoadName) \
+ USE_GL_FUNC(glLogicOp) \
+ USE_GL_FUNC(glMap1d) \
+ USE_GL_FUNC(glMap1f) \
+ USE_GL_FUNC(glMap2d) \
+ USE_GL_FUNC(glMap2f) \
+ USE_GL_FUNC(glMapGrid1d) \
+ USE_GL_FUNC(glMapGrid1f) \
+ USE_GL_FUNC(glMapGrid2d) \
+ USE_GL_FUNC(glMapGrid2f) \
+ USE_GL_FUNC(glMaterialf) \
+ USE_GL_FUNC(glMaterialfv) \
+ USE_GL_FUNC(glMateriali) \
+ USE_GL_FUNC(glMaterialiv) \
+ USE_GL_FUNC(glMatrixMode) \
+ USE_GL_FUNC(glMultMatrixd) \
+ USE_GL_FUNC(glMultMatrixf) \
+ USE_GL_FUNC(glNewList) \
+ USE_GL_FUNC(glNormal3b) \
+ USE_GL_FUNC(glNormal3bv) \
+ USE_GL_FUNC(glNormal3d) \
+ USE_GL_FUNC(glNormal3dv) \
+ USE_GL_FUNC(glNormal3f) \
+ USE_GL_FUNC(glNormal3fv) \
+ USE_GL_FUNC(glNormal3i) \
+ USE_GL_FUNC(glNormal3iv) \
+ USE_GL_FUNC(glNormal3s) \
+ USE_GL_FUNC(glNormal3sv) \
+ USE_GL_FUNC(glNormalPointer) \
+ USE_GL_FUNC(glOrtho) \
+ USE_GL_FUNC(glPassThrough) \
+ USE_GL_FUNC(glPixelMapfv) \
+ USE_GL_FUNC(glPixelMapuiv) \
+ USE_GL_FUNC(glPixelMapusv) \
+ USE_GL_FUNC(glPixelStoref) \
+ USE_GL_FUNC(glPixelStorei) \
+ USE_GL_FUNC(glPixelTransferf) \
+ USE_GL_FUNC(glPixelTransferi) \
+ USE_GL_FUNC(glPixelZoom) \
+ USE_GL_FUNC(glPointSize) \
+ USE_GL_FUNC(glPolygonMode) \
+ USE_GL_FUNC(glPolygonOffset) \
+ USE_GL_FUNC(glPolygonStipple) \
+ USE_GL_FUNC(glPopAttrib) \
+ USE_GL_FUNC(glPopClientAttrib) \
+ USE_GL_FUNC(glPopMatrix) \
+ USE_GL_FUNC(glPopName) \
+ USE_GL_FUNC(glPrioritizeTextures) \
+ USE_GL_FUNC(glPushAttrib) \
+ USE_GL_FUNC(glPushClientAttrib) \
+ USE_GL_FUNC(glPushMatrix) \
+ USE_GL_FUNC(glPushName) \
+ USE_GL_FUNC(glRasterPos2d) \
+ USE_GL_FUNC(glRasterPos2dv) \
+ USE_GL_FUNC(glRasterPos2f) \
+ USE_GL_FUNC(glRasterPos2fv) \
+ USE_GL_FUNC(glRasterPos2i) \
+ USE_GL_FUNC(glRasterPos2iv) \
+ USE_GL_FUNC(glRasterPos2s) \
+ USE_GL_FUNC(glRasterPos2sv) \
+ USE_GL_FUNC(glRasterPos3d) \
+ USE_GL_FUNC(glRasterPos3dv) \
+ USE_GL_FUNC(glRasterPos3f) \
+ USE_GL_FUNC(glRasterPos3fv) \
+ USE_GL_FUNC(glRasterPos3i) \
+ USE_GL_FUNC(glRasterPos3iv) \
+ USE_GL_FUNC(glRasterPos3s) \
+ USE_GL_FUNC(glRasterPos3sv) \
+ USE_GL_FUNC(glRasterPos4d) \
+ USE_GL_FUNC(glRasterPos4dv) \
+ USE_GL_FUNC(glRasterPos4f) \
+ USE_GL_FUNC(glRasterPos4fv) \
+ USE_GL_FUNC(glRasterPos4i) \
+ USE_GL_FUNC(glRasterPos4iv) \
+ USE_GL_FUNC(glRasterPos4s) \
+ USE_GL_FUNC(glRasterPos4sv) \
+ USE_GL_FUNC(glReadBuffer) \
+ USE_GL_FUNC(glReadPixels) \
+ USE_GL_FUNC(glRectd) \
+ USE_GL_FUNC(glRectdv) \
+ USE_GL_FUNC(glRectf) \
+ USE_GL_FUNC(glRectfv) \
+ USE_GL_FUNC(glRecti) \
+ USE_GL_FUNC(glRectiv) \
+ USE_GL_FUNC(glRects) \
+ USE_GL_FUNC(glRectsv) \
+ USE_GL_FUNC(glRenderMode) \
+ USE_GL_FUNC(glRotated) \
+ USE_GL_FUNC(glRotatef) \
+ USE_GL_FUNC(glScaled) \
+ USE_GL_FUNC(glScalef) \
+ USE_GL_FUNC(glScissor) \
+ USE_GL_FUNC(glSelectBuffer) \
+ USE_GL_FUNC(glShadeModel) \
+ USE_GL_FUNC(glStencilFunc) \
+ USE_GL_FUNC(glStencilMask) \
+ USE_GL_FUNC(glStencilOp) \
+ USE_GL_FUNC(glTexCoord1d) \
+ USE_GL_FUNC(glTexCoord1dv) \
+ USE_GL_FUNC(glTexCoord1f) \
+ USE_GL_FUNC(glTexCoord1fv) \
+ USE_GL_FUNC(glTexCoord1i) \
+ USE_GL_FUNC(glTexCoord1iv) \
+ USE_GL_FUNC(glTexCoord1s) \
+ USE_GL_FUNC(glTexCoord1sv) \
+ USE_GL_FUNC(glTexCoord2d) \
+ USE_GL_FUNC(glTexCoord2dv) \
+ USE_GL_FUNC(glTexCoord2f) \
+ USE_GL_FUNC(glTexCoord2fv) \
+ USE_GL_FUNC(glTexCoord2i) \
+ USE_GL_FUNC(glTexCoord2iv) \
+ USE_GL_FUNC(glTexCoord2s) \
+ USE_GL_FUNC(glTexCoord2sv) \
+ USE_GL_FUNC(glTexCoord3d) \
+ USE_GL_FUNC(glTexCoord3dv) \
+ USE_GL_FUNC(glTexCoord3f) \
+ USE_GL_FUNC(glTexCoord3fv) \
+ USE_GL_FUNC(glTexCoord3i) \
+ USE_GL_FUNC(glTexCoord3iv) \
+ USE_GL_FUNC(glTexCoord3s) \
+ USE_GL_FUNC(glTexCoord3sv) \
+ USE_GL_FUNC(glTexCoord4d) \
+ USE_GL_FUNC(glTexCoord4dv) \
+ USE_GL_FUNC(glTexCoord4f) \
+ USE_GL_FUNC(glTexCoord4fv) \
+ USE_GL_FUNC(glTexCoord4i) \
+ USE_GL_FUNC(glTexCoord4iv) \
+ USE_GL_FUNC(glTexCoord4s) \
+ USE_GL_FUNC(glTexCoord4sv) \
+ USE_GL_FUNC(glTexCoordPointer) \
+ USE_GL_FUNC(glTexEnvf) \
+ USE_GL_FUNC(glTexEnvfv) \
+ USE_GL_FUNC(glTexEnvi) \
+ USE_GL_FUNC(glTexEnviv) \
+ USE_GL_FUNC(glTexGend) \
+ USE_GL_FUNC(glTexGendv) \
+ USE_GL_FUNC(glTexGenf) \
+ USE_GL_FUNC(glTexGenfv) \
+ USE_GL_FUNC(glTexGeni) \
+ USE_GL_FUNC(glTexGeniv) \
+ USE_GL_FUNC(glTexImage1D) \
+ USE_GL_FUNC(glTexImage2D) \
+ USE_GL_FUNC(glTexParameterf) \
+ USE_GL_FUNC(glTexParameterfv) \
+ USE_GL_FUNC(glTexParameteri) \
+ USE_GL_FUNC(glTexParameteriv) \
+ USE_GL_FUNC(glTexSubImage1D) \
+ USE_GL_FUNC(glTexSubImage2D) \
+ USE_GL_FUNC(glTranslated) \
+ USE_GL_FUNC(glTranslatef) \
+ USE_GL_FUNC(glVertex2d) \
+ USE_GL_FUNC(glVertex2dv) \
+ USE_GL_FUNC(glVertex2f) \
+ USE_GL_FUNC(glVertex2fv) \
+ USE_GL_FUNC(glVertex2i) \
+ USE_GL_FUNC(glVertex2iv) \
+ USE_GL_FUNC(glVertex2s) \
+ USE_GL_FUNC(glVertex2sv) \
+ USE_GL_FUNC(glVertex3d) \
+ USE_GL_FUNC(glVertex3dv) \
+ USE_GL_FUNC(glVertex3f) \
+ USE_GL_FUNC(glVertex3fv) \
+ USE_GL_FUNC(glVertex3i) \
+ USE_GL_FUNC(glVertex3iv) \
+ USE_GL_FUNC(glVertex3s) \
+ USE_GL_FUNC(glVertex3sv) \
+ USE_GL_FUNC(glVertex4d) \
+ USE_GL_FUNC(glVertex4dv) \
+ USE_GL_FUNC(glVertex4f) \
+ USE_GL_FUNC(glVertex4fv) \
+ USE_GL_FUNC(glVertex4i) \
+ USE_GL_FUNC(glVertex4iv) \
+ USE_GL_FUNC(glVertex4s) \
+ USE_GL_FUNC(glVertex4sv) \
+ USE_GL_FUNC(glVertexPointer) \
+ USE_GL_FUNC(glViewport)
+
+extern struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version );
+extern BOOL CDECL __wine_set_pixel_format( HWND hwnd, int format );
+
+#endif /* __WINE_WGL_DRIVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h
new file mode 100644
index 00000000..76c42c19
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wglext.h
@@ -0,0 +1,943 @@
+#ifndef __wglext_h_
+#define __wglext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2007-2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number */
+/* wglext.h last updated 2012/01/04 */
+/* Current version at http://www.opengl.org/registry/ */
+#define WGL_WGLEXT_VERSION 24
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
+#endif
+
+#ifndef WGL_ARB_multisample
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+#endif
+
+#ifndef WGL_ARB_extensions_string
+#endif
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200A
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+#define WGL_SHARE_DEPTH_ARB 0x200C
+#define WGL_SHARE_STENCIL_ARB 0x200D
+#define WGL_SHARE_ACCUM_ARB 0x200E
+#define WGL_SUPPORT_GDI_ARB 0x200F
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201A
+#define WGL_ALPHA_BITS_ARB 0x201B
+#define WGL_ALPHA_SHIFT_ARB 0x201C
+#define WGL_ACCUM_BITS_ARB 0x201D
+#define WGL_ACCUM_RED_BITS_ARB 0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202A
+#define WGL_TYPE_RGBA_ARB 0x202B
+#define WGL_TYPE_COLORINDEX_ARB 0x202C
+#endif
+
+#ifndef WGL_ARB_make_current_read
+#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
+#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+#endif
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
+#define WGL_PBUFFER_LARGEST_ARB 0x2033
+#define WGL_PBUFFER_WIDTH_ARB 0x2034
+#define WGL_PBUFFER_HEIGHT_ARB 0x2035
+#define WGL_PBUFFER_LOST_ARB 0x2036
+#endif
+
+#ifndef WGL_ARB_render_texture
+#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
+#define WGL_TEXTURE_FORMAT_ARB 0x2072
+#define WGL_TEXTURE_TARGET_ARB 0x2073
+#define WGL_MIPMAP_TEXTURE_ARB 0x2074
+#define WGL_TEXTURE_RGB_ARB 0x2075
+#define WGL_TEXTURE_RGBA_ARB 0x2076
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
+#define WGL_TEXTURE_1D_ARB 0x2079
+#define WGL_TEXTURE_2D_ARB 0x207A
+#define WGL_MIPMAP_LEVEL_ARB 0x207B
+#define WGL_CUBE_MAP_FACE_ARB 0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB 0x2083
+#define WGL_FRONT_RIGHT_ARB 0x2084
+#define WGL_BACK_LEFT_ARB 0x2085
+#define WGL_BACK_RIGHT_ARB 0x2086
+#define WGL_AUX0_ARB 0x2087
+#define WGL_AUX1_ARB 0x2088
+#define WGL_AUX2_ARB 0x2089
+#define WGL_AUX3_ARB 0x208A
+#define WGL_AUX4_ARB 0x208B
+#define WGL_AUX5_ARB 0x208C
+#define WGL_AUX6_ARB 0x208D
+#define WGL_AUX7_ARB 0x208E
+#define WGL_AUX8_ARB 0x208F
+#define WGL_AUX9_ARB 0x2090
+#endif
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+#endif
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
+#endif
+
+#ifndef WGL_ARB_create_context
+#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
+#define WGL_CONTEXT_FLAGS_ARB 0x2094
+#define ERROR_INVALID_VERSION_ARB 0x2095
+#endif
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define ERROR_INVALID_PROFILE_ARB 0x2096
+#endif
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
+#endif
+
+#ifndef WGL_EXT_make_current_read
+#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043
+#endif
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
+#define WGL_DRAW_TO_WINDOW_EXT 0x2001
+#define WGL_DRAW_TO_BITMAP_EXT 0x2002
+#define WGL_ACCELERATION_EXT 0x2003
+#define WGL_NEED_PALETTE_EXT 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
+#define WGL_SWAP_METHOD_EXT 0x2007
+#define WGL_NUMBER_OVERLAYS_EXT 0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
+#define WGL_TRANSPARENT_EXT 0x200A
+#define WGL_TRANSPARENT_VALUE_EXT 0x200B
+#define WGL_SHARE_DEPTH_EXT 0x200C
+#define WGL_SHARE_STENCIL_EXT 0x200D
+#define WGL_SHARE_ACCUM_EXT 0x200E
+#define WGL_SUPPORT_GDI_EXT 0x200F
+#define WGL_SUPPORT_OPENGL_EXT 0x2010
+#define WGL_DOUBLE_BUFFER_EXT 0x2011
+#define WGL_STEREO_EXT 0x2012
+#define WGL_PIXEL_TYPE_EXT 0x2013
+#define WGL_COLOR_BITS_EXT 0x2014
+#define WGL_RED_BITS_EXT 0x2015
+#define WGL_RED_SHIFT_EXT 0x2016
+#define WGL_GREEN_BITS_EXT 0x2017
+#define WGL_GREEN_SHIFT_EXT 0x2018
+#define WGL_BLUE_BITS_EXT 0x2019
+#define WGL_BLUE_SHIFT_EXT 0x201A
+#define WGL_ALPHA_BITS_EXT 0x201B
+#define WGL_ALPHA_SHIFT_EXT 0x201C
+#define WGL_ACCUM_BITS_EXT 0x201D
+#define WGL_ACCUM_RED_BITS_EXT 0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
+#define WGL_DEPTH_BITS_EXT 0x2022
+#define WGL_STENCIL_BITS_EXT 0x2023
+#define WGL_AUX_BUFFERS_EXT 0x2024
+#define WGL_NO_ACCELERATION_EXT 0x2025
+#define WGL_GENERIC_ACCELERATION_EXT 0x2026
+#define WGL_FULL_ACCELERATION_EXT 0x2027
+#define WGL_SWAP_EXCHANGE_EXT 0x2028
+#define WGL_SWAP_COPY_EXT 0x2029
+#define WGL_SWAP_UNDEFINED_EXT 0x202A
+#define WGL_TYPE_RGBA_EXT 0x202B
+#define WGL_TYPE_COLORINDEX_EXT 0x202C
+#endif
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
+#define WGL_PBUFFER_LARGEST_EXT 0x2033
+#define WGL_PBUFFER_WIDTH_EXT 0x2034
+#define WGL_PBUFFER_HEIGHT_EXT 0x2035
+#endif
+
+#ifndef WGL_EXT_depth_float
+#define WGL_DEPTH_FLOAT_EXT 0x2040
+#endif
+
+#ifndef WGL_3DFX_multisample
+#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
+#define WGL_SAMPLES_3DFX 0x2061
+#endif
+
+#ifndef WGL_EXT_multisample
+#define WGL_SAMPLE_BUFFERS_EXT 0x2041
+#define WGL_SAMPLES_EXT 0x2042
+#endif
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+#endif
+
+#ifndef WGL_I3D_gamma
+#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
+#endif
+
+#ifndef WGL_I3D_genlock
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+#endif
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
+#endif
+
+#ifndef WGL_I3D_swap_frame_lock
+#endif
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV 0x20A7
+#endif
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
+#endif
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
+#endif
+
+#ifndef WGL_NV_float_buffer
+#define WGL_FLOAT_COMPONENTS_NV 0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
+#endif
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055
+#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
+#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
+#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
+#endif
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
+#endif
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
+#endif
+
+#ifndef WGL_NV_present_video
+#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0
+#endif
+
+#ifndef WGL_NV_video_out
+#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV 0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define WGL_VIDEO_OUT_FRAME 0x20C8
+#define WGL_VIDEO_OUT_FIELD_1 0x20C9
+#define WGL_VIDEO_OUT_FIELD_2 0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
+#endif
+
+#ifndef WGL_NV_swap_group
+#endif
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
+#endif
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_GPU_VENDOR_AMD 0x1F00
+#define WGL_GPU_RENDERER_STRING_AMD 0x1F01
+#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define WGL_GPU_RAM_AMD 0x21A3
+#define WGL_GPU_CLOCK_AMD 0x21A4
+#define WGL_GPU_NUM_PIPES_AMD 0x21A5
+#define WGL_GPU_NUM_SIMD_AMD 0x21A6
+#define WGL_GPU_NUM_RB_AMD 0x21A7
+#define WGL_GPU_NUM_SPI_AMD 0x21A8
+#endif
+
+#ifndef WGL_NV_video_capture
+#define WGL_UNIQUE_ID_NV 0x20CE
+#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+#endif
+
+#ifndef WGL_NV_copy_image
+#endif
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_COVERAGE_SAMPLES_NV 0x2042
+#define WGL_COLOR_SAMPLES_NV 0x20B9
+#endif
+
+#ifndef WGL_EXT_create_context_es2_profile
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+#endif
+
+#ifndef WGL_NV_DX_interop
+#define WGL_ACCESS_READ_ONLY_NV 0x00000000
+#define WGL_ACCESS_READ_WRITE_NV 0x00000001
+#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002
+#endif
+
+#ifndef WGL_NV_DX_interop2
+#endif
+
+#ifndef WGL_EXT_swap_control_tear
+#endif
+
+
+/*************************************************************/
+
+#ifndef WGL_ARB_pbuffer
+DECLARE_HANDLE(HPBUFFERARB);
+#endif
+#ifndef WGL_EXT_pbuffer
+DECLARE_HANDLE(HPBUFFEREXT);
+#endif
+#ifndef WGL_NV_present_video
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+#endif
+#ifndef WGL_NV_video_output
+DECLARE_HANDLE(HPVIDEODEV);
+#endif
+#ifndef WGL_NV_gpu_affinity
+DECLARE_HANDLE(HPGPUNV);
+DECLARE_HANDLE(HGPUNV);
+
+typedef struct _GPU_DEVICE {
+ DWORD cb;
+ CHAR DeviceName[32];
+ CHAR DeviceString[128];
+ DWORD Flags;
+ RECT rcVirtualScreen;
+} GPU_DEVICE, *PGPU_DEVICE;
+#endif
+#ifndef WGL_NV_video_capture
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+#endif
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);
+extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);
+extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);
+extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#endif
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern const char * WINAPI wglGetExtensionsStringARB (HDC hdc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+#endif
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+extern BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+extern HDC WINAPI wglGetCurrentReadDCARB (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
+#endif
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);
+extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);
+extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);
+extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#endif
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef WGL_ARB_create_context
+#define WGL_ARB_create_context 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_ARB_create_context_profile 1
+#endif
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_ARB_create_context_robustness 1
+#endif
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);
+extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);
+extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);
+extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+#endif
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern const char * WINAPI wglGetExtensionsStringEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+extern HDC WINAPI wglGetCurrentReadDCEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);
+extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);
+extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);
+extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+extern BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglSwapIntervalEXT (int interval);
+extern int WINAPI wglGetSwapIntervalEXT (void);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+#endif
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+#endif
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern void* WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+extern void WINAPI wglFreeMemoryNV (void *pointer);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+#endif
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+#endif
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+#endif
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+extern BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);
+extern INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+extern BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+extern BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);
+extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+#endif
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);
+extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+extern BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+extern BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnableGenlockI3D (HDC hDC);
+extern BOOL WINAPI wglDisableGenlockI3D (HDC hDC);
+extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);
+extern BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);
+extern BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);
+extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);
+extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);
+extern BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);
+extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);
+extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);
+extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);
+extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);
+extern BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);
+extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnableFrameLockI3D (void);
+extern BOOL WINAPI wglDisableFrameLockI3D (void);
+extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);
+extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
+#endif
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetFrameUsageI3D (float *pUsage);
+extern BOOL WINAPI wglBeginFrameTrackingI3D (void);
+extern BOOL WINAPI wglEndFrameTrackingI3D (void);
+extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+#endif
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+#endif
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_3DL_stereo_control 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
+#endif
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_EXT_pixel_format_packed_float 1
+#endif
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef WGL_NV_present_video
+#define WGL_NV_present_video 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+extern BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+extern BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
+#endif
+
+#ifndef WGL_NV_video_output
+#define WGL_NV_video_output 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+extern BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);
+extern BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+extern BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);
+extern BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+extern BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+
+#ifndef WGL_NV_swap_group
+#define WGL_NV_swap_group 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);
+extern BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);
+extern BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);
+extern BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+extern BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);
+extern BOOL WINAPI wglResetFrameCountNV (HDC hDC);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);
+typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+#endif
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_NV_gpu_affinity 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);
+extern BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+extern HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);
+extern BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+extern BOOL WINAPI wglDeleteDCNV (HDC hdc);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
+typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
+#endif
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_AMD_gpu_association 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);
+extern INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data);
+extern UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);
+extern HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);
+extern HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);
+extern BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);
+extern BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);
+extern HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);
+extern VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);
+typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data);
+typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);
+typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
+typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+
+#ifndef WGL_NV_video_capture
+#define WGL_NV_video_capture 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+extern UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+extern BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+extern BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+extern BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif
+
+#ifndef WGL_NV_copy_image
+#define WGL_NV_copy_image 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_NV_multisample_coverage 1
+#endif
+
+#ifndef WGL_NV_DX_interop
+#define WGL_NV_DX_interop 1
+#ifdef WGL_WGLEXT_PROTOTYPES
+extern BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle);
+extern HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice);
+extern BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice);
+extern HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+extern BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject);
+extern BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access);
+extern BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+extern BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif /* WGL_WGLEXT_PROTOTYPES */
+typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle);
+typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice);
+typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);
+typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);
+typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif
+
+#ifndef WGL_NV_DX_interop2
+#define WGL_NV_DX_interop2 1
+#endif
+
+#ifndef WGL_EXT_swap_control_tear
+#define WGL_EXT_swap_control_tear 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h
new file mode 100644
index 00000000..27fb3593
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winaspi.h
@@ -0,0 +1,152 @@
+/*
+ * This file should be source compatible with the Adaptec winaspi.h
+ * All DOS ASPI structures are the same as WINASPI
+ *
+ * Copyright (C) 2000 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINASPI_H__
+#define __WINASPI_H__
+
+/* Include base aspi defs */
+#include <wnaspi32.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* #ifdef __cplusplus */
+
+/* WINE SCSI Stuff */
+#define ASPI_DOS 1
+#define ASPI_WIN16 2
+
+#include <pshpack1.h>
+
+/* SRB HA_INQUIRY */
+
+typedef struct tagSRB16_HaInquiry {
+ BYTE SRB_Cmd;
+ BYTE SRB_Status;
+ BYTE SRB_HaId;
+ BYTE SRB_Flags;
+ WORD SRB_55AASignature;
+ WORD SRB_ExtBufferSize;
+ BYTE HA_Count;
+ BYTE HA_SCSI_ID;
+ BYTE HA_ManagerId[16];
+ BYTE HA_Identifier[16];
+ BYTE HA_Unique[16];
+ BYTE HA_ExtBuffer[4];
+} SRB_HaInquiry16, *PSRB_HaInquiry16, *LPSRB_HaInquiry16;
+
+typedef struct tagSRB16_GDEVBlock {
+ BYTE SRB_Cmd; /* ASPI command code = SC_GET_DEV_TYPE */
+ BYTE SRB_Status; /* ASPI command status byte */
+ BYTE SRB_HaId; /* ASPI host adapter number */
+ BYTE SRB_Flags; /* ASPI request flags */
+ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */
+ BYTE SRB_Target; /* Target's SCSI ID */
+ BYTE SRB_Lun; /* Target's LUN number */
+ BYTE SRB_DeviceType; /* Target's peripheral device type */
+} SRB_GDEVBlock16, *PSRB_GDEVBlock16, *LPSRB_GDEVBlock16;
+
+
+typedef struct tagSRB16_ExecSCSICmd {
+ BYTE SRB_Cmd; /* ASPI command code (W) */
+ BYTE SRB_Status; /* ASPI command status byte (R) */
+ BYTE SRB_HaId; /* ASPI host adapter number (W) */
+ BYTE SRB_Flags; /* ASPI request flags (W) */
+ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 (-) */
+ BYTE SRB_Target; /* Target's SCSI ID (W) */
+ BYTE SRB_Lun; /* Target's LUN number (W) */
+ DWORD SRB_BufLen; /* Data Allocation LengthPG (W/R)*/
+ BYTE SRB_SenseLen; /* Sense Allocation Length (W) */
+ SEGPTR SRB_BufPointer; /* Data Buffer Pointer (W) */
+ DWORD SRB_Rsvd1; /* Reserved, MUST = 0 (-/W)*/
+ BYTE SRB_CDBLen; /* CDB Length = 6 (W) */
+ BYTE SRB_HaStat; /* Host Adapter Status (R) */
+ BYTE SRB_TargStat; /* Target Status (R) */
+ FARPROC16 SRB_PostProc; /* Post routine (W) */
+ BYTE SRB_Rsvd2[34]; /* Reserved, MUST = 0 */
+ BYTE CDBByte[1]; /* SCSI CBD - variable length (W) */
+ /* variable example for 6 byte cbd
+ * BYTE CDBByte[6]; * SCSI CDB (W) *
+ * BYTE SenseArea6[SENSE_LEN]; * Request Sense buffer (R) *
+ */
+} SRB_ExecSCSICmd16, *PSRB_ExecSCSICmd16, *LPSRB_ExecSCSICmd16;
+
+typedef struct tagSRB16_Abort {
+ BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */
+ BYTE SRB_Status; /* ASPI command status byte */
+ BYTE SRB_HaId; /* ASPI host adapter number */
+ BYTE SRB_Flags; /* ASPI request flags */
+ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */
+ SEGPTR SRB_ToAbort; /* Pointer to SRB to abort */
+} SRB_Abort16, *PSRB_Abort16, *LPSRB_Abort16;
+
+
+typedef struct tagSRB16_BusDeviceReset {
+ BYTE SRB_Cmd; /* ASPI command code = SC_RESET_DEV */
+ BYTE SRB_Status; /* ASPI command status byte */
+ BYTE SRB_HaId; /* ASPI host adapter number */
+ BYTE SRB_Flags; /* ASPI request flags */
+ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */
+ BYTE SRB_Target; /* Target's SCSI ID */
+ BYTE SRB_Lun; /* Target's LUN number */
+ BYTE SRB_ResetRsvd1[14]; /* Reserved, MUST = 0 */
+ BYTE SRB_HaStat; /* Host Adapter Status */
+ BYTE SRB_TargStat; /* Target Status */
+ FARPROC16 SRB_PostProc; /* Post routine */
+ BYTE SRB_ResetRsvd2[34]; /* Reserved, MUST = 0 */
+} SRB_BusDeviceReset16, *PSRB_BusDeviceReset16, *LPSRB_BusDeviceReset16;
+
+
+typedef struct tagSRB16_Common {
+ BYTE SRB_Cmd; /* ASPI command code = SC_ABORT_SRB */
+ BYTE SRB_Status; /* ASPI command status byte */
+ BYTE SRB_HaId; /* ASPI host adapter number */
+ BYTE SRB_Flags; /* ASPI request flags */
+ DWORD SRB_Hdr_Rsvd; /* Reserved, MUST = 0 */
+} SRB_Common16, *PSRB_Common16, *LPSRB_Common16;
+
+typedef union tagSRB16 {
+ SRB_Common16 common;
+ SRB_HaInquiry16 inquiry;
+ SRB_ExecSCSICmd16 cmd;
+ SRB_Abort16 abort;
+ SRB_BusDeviceReset16 reset;
+ SRB_GDEVBlock16 devtype;
+} SRB16, *LPSRB16;
+
+#include <poppack.h>
+
+extern WORD WINAPI SendASPICommand16(SEGPTR);
+extern WORD WINAPI GetASPISupportInfo16(void);
+
+#ifdef __cplusplus
+}
+#endif /* #ifdef __cplusplus */
+
+#endif /* __WINE_WINASPI_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h
new file mode 100644
index 00000000..c1e40668
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winbase16.h
@@ -0,0 +1,572 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_WINBASE16_H
+#define __WINE_WINE_WINBASE16_H
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+#include <wine/windef16.h>
+#include <wine/library.h>
+
+#include <pshpack1.h>
+
+/* Process database (i.e. a normal DOS PSP) */
+typedef struct
+{
+ WORD int20; /* 00 int 20h instruction */
+ WORD nextParagraph; /* 02 Segment of next paragraph */
+ BYTE reserved1;
+ BYTE dispatcher[5]; /* 05 Long call to DOS */
+ FARPROC16 savedint22; /* 0a Saved int 22h handler */
+ FARPROC16 savedint23; /* 0e Saved int 23h handler */
+ FARPROC16 savedint24; /* 12 Saved int 24h handler */
+ WORD parentPSP; /* 16 Selector of parent PSP */
+ BYTE fileHandles[20]; /* 18 Open file handles */
+ HANDLE16 environment; /* 2c Selector of environment */
+ DWORD saveStack; /* 2e SS:SP on last int21 call */
+ WORD nbFiles; /* 32 Number of file handles */
+ SEGPTR fileHandlesPtr; /* 34 Pointer to file handle table */
+ HANDLE16 hFileHandles; /* 38 Handle to fileHandlesPtr */
+ WORD reserved3[17];
+ BYTE fcb1[16]; /* 5c First FCB */
+ BYTE fcb2[20]; /* 6c Second FCB */
+ BYTE cmdLine[128]; /* 80 Command-line (first byte is len)*/
+ BYTE padding[16]; /* Some apps access beyond the end of the cmd line */
+} PDB16;
+
+/* Task database. See 'Windows Internals' p. 226.
+ * Note that 16-bit OLE 2 libs like to read it directly
+ * so we have to keep entry offsets as they are.
+ */
+typedef struct _TDB
+{
+ HTASK16 hNext; /* 00 Selector of next TDB */
+ DWORD ss_sp; /* 02 Stack pointer of task */
+ WORD nEvents; /* 06 Events for this task */
+ INT16 priority; /* 08 Task priority, -32..15 */
+ WORD unused1; /* 0a */
+ HTASK16 hSelf; /* 0c Selector of this TDB */
+ HANDLE16 hPrevInstance; /* 0e Previous instance of module */
+ DWORD unused2; /* 10 */
+ WORD ctrlword8087; /* 14 80x87 control word */
+ WORD flags; /* 16 Task flags */
+ UINT16 error_mode; /* 18 Error mode (see SetErrorMode)*/
+ WORD version; /* 1a Expected Windows version */
+ HANDLE16 hInstance; /* 1c Instance handle for task */
+ HMODULE16 hModule; /* 1e Module handle */
+ HQUEUE16 hQueue; /* 20 Selector of task queue */
+ HTASK16 hParent; /* 22 Selector of TDB of parent */
+ WORD signal_flags; /* 24 Flags for signal handler */
+ FARPROC16 sighandler; /* 26 Signal handler */
+ FARPROC16 userhandler; /* 2a USER signal handler */
+ FARPROC16 discardhandler; /* 2e Handler for GlobalNotify() */
+ FARPROC16 int0; /* 32 int 0 (divide by 0) handler */
+ FARPROC16 int2; /* 36 int 2 (NMI) handler */
+ FARPROC16 int4; /* 3a int 4 (INTO) handler */
+ FARPROC16 int6; /* 3e int 6 (invalid opc) handler */
+ FARPROC16 int7; /* 42 int 7 (coprocessor) handler */
+ FARPROC16 int3e; /* 46 int 3e (80x87 emu) handler */
+ FARPROC16 int75; /* 4a int 75 (80x87 error) handler */
+ DWORD compat_flags; /* 4e Compatibility flags */
+ BYTE unused4[2]; /* 52 */
+ struct _TEB *teb; /* 54 Pointer to thread database */
+ BYTE unused5[8]; /* 58 */
+ HANDLE16 hPDB; /* 60 Selector of PDB (i.e. PSP) */
+ SEGPTR dta; /* 62 Current DTA */
+ BYTE curdrive; /* 66 Current drive */
+ CHAR curdir[65]; /* 67 Current directory */
+ WORD nCmdShow; /* a8 cmdShow parameter to WinMain */
+ HTASK16 hYieldTo; /* aa Next task to schedule */
+ DWORD dlls_to_init; /* ac Ptr to DLLs to initialize */
+ HANDLE16 hCSAlias; /* b0 Code segment for this TDB */
+ WORD thunks[8*4]; /* b2 Make proc instance thunks */
+ CHAR module_name[8]; /* f2 Module name for task */
+ WORD magic; /* fa TDB signature */
+ HANDLE hEvent; /* fc scheduler event handle */
+ PDB16 pdb; /* 100 PDB for this task */
+} TDB;
+
+/* TDB flags */
+#define TDBF_WINOLDAP 0x0001
+#define TDBF_OS2APP 0x0008
+#define TDBF_WIN32 0x0010
+
+/* Windows 3.1 USER signals */
+#define USIG16_TERMINATION 0x0020
+#define USIG16_DLL_LOAD 0x0040
+#define USIG16_DLL_UNLOAD 0x0080
+#define USIG16_GPF 0x0666
+
+typedef struct _SEGINFO {
+ UINT16 offSegment;
+ UINT16 cbSegment;
+ UINT16 flags;
+ UINT16 cbAlloc;
+ HGLOBAL16 h;
+ UINT16 alignShift;
+ UINT16 reserved[2];
+} SEGINFO;
+
+/* GetWinFlags */
+
+#define WF_PMODE 0x0001
+#define WF_CPU286 0x0002
+#define WF_CPU386 0x0004
+#define WF_CPU486 0x0008
+#define WF_STANDARD 0x0010
+#define WF_WIN286 0x0010
+#define WF_ENHANCED 0x0020
+#define WF_WIN386 0x0020
+#define WF_CPU086 0x0040
+#define WF_CPU186 0x0080
+#define WF_LARGEFRAME 0x0100
+#define WF_SMALLFRAME 0x0200
+#define WF_80x87 0x0400
+#define WF_PAGING 0x0800
+#define WF_HASCPUID 0x2000
+#define WF_WIN32WOW 0x4000 /* undoc */
+#define WF_WLO 0x8000
+
+/* Parameters for LoadModule() */
+typedef struct
+{
+ HGLOBAL16 hEnvironment; /* Environment segment */
+ SEGPTR cmdLine; /* Command-line */
+ SEGPTR showCmd; /* Code for ShowWindow() */
+ SEGPTR reserved;
+} LOADPARAMS16;
+
+/* Debugging support (DEBUG SYSTEM ONLY) */
+typedef struct
+{
+ WORD flags;
+ DWORD dwOptions;
+ DWORD dwFilter;
+ CHAR achAllocModule[8];
+ DWORD dwAllocBreak;
+ DWORD dwAllocCount;
+} WINDEBUGINFO16, *LPWINDEBUGINFO16;
+
+/* definitions specific to Wine 16-bit relaying support */
+
+/* 32-bit stack layout after __wine_call_to_16() */
+typedef struct _STACK32FRAME
+{
+ DWORD restore_addr; /* 00 return address for restoring code selector */
+ DWORD codeselector; /* 04 code selector to restore */
+ EXCEPTION_REGISTRATION_RECORD frame; /* 08 Exception frame */
+ SEGPTR frame16; /* 10 16-bit frame from last CallFrom16() */
+ DWORD edi; /* 14 saved registers */
+ DWORD esi; /* 18 */
+ DWORD ebx; /* 1c */
+ DWORD ebp; /* 20 saved 32-bit frame pointer */
+ DWORD retaddr; /* 24 return address */
+ DWORD target; /* 28 target address / CONTEXT86 pointer */
+ DWORD nb_args; /* 2c number of 16-bit argument bytes */
+} STACK32FRAME;
+
+/* 16-bit stack layout after __wine_call_from_16() */
+typedef struct _STACK16FRAME
+{
+ STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */
+ DWORD edx; /* 04 saved registers */
+ DWORD ecx; /* 08 */
+ DWORD ebp; /* 0c */
+ WORD ds; /* 10 */
+ WORD es; /* 12 */
+ WORD fs; /* 14 */
+ WORD gs; /* 16 */
+ DWORD callfrom_ip; /* 18 callfrom tail IP */
+ DWORD module_cs; /* 1c module code segment */
+ DWORD relay; /* 20 relay function address */
+ WORD entry_ip; /* 22 entry point IP */
+ DWORD entry_point; /* 26 API entry point to call, reused as mutex count */
+ WORD bp; /* 2a 16-bit stack frame chain */
+ WORD ip; /* 2c return address */
+ WORD cs; /* 2e */
+} STACK16FRAME;
+
+/* argument type flags for relay debugging */
+enum arg_types
+{
+ ARG_NONE = 0, /* indicates end of arg list */
+ ARG_WORD, /* unsigned word */
+ ARG_SWORD, /* signed word */
+ ARG_LONG, /* long or segmented pointer */
+ ARG_PTR, /* linear pointer */
+ ARG_STR, /* linear pointer to null-terminated string */
+ ARG_SEGSTR, /* segmented pointer to null-terminated string */
+ ARG_VARARG /* start of varargs */
+};
+
+#define INVALID_HANDLE_VALUE16 ((HANDLE16) -1)
+#define INFINITE16 0xFFFF
+
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[128];
+} OSVERSIONINFO16;
+
+
+/*
+ * NE Header FORMAT FLAGS
+ */
+#define NE_FFLAGS_SINGLEDATA 0x0001
+#define NE_FFLAGS_MULTIPLEDATA 0x0002
+#define NE_FFLAGS_WIN32 0x0010
+#define NE_FFLAGS_BUILTIN 0x0020 /* Wine built-in module */
+#define NE_FFLAGS_FRAMEBUF 0x0100 /* OS/2 fullscreen app */
+#define NE_FFLAGS_CONSOLE 0x0200 /* OS/2 console app */
+#define NE_FFLAGS_GUI 0x0300 /* right, (NE_FFLAGS_FRAMEBUF | NE_FFLAGS_CONSOLE) */
+#define NE_FFLAGS_SELFLOAD 0x0800
+#define NE_FFLAGS_LINKERROR 0x2000
+#define NE_FFLAGS_CALLWEP 0x4000
+#define NE_FFLAGS_LIBMODULE 0x8000
+
+/*
+ * NE Header OPERATING SYSTEM
+ */
+#define NE_OSFLAGS_UNKNOWN 0x00
+#define NE_OSFLAGS_OS2 0x01
+#define NE_OSFLAGS_WINDOWS 0x02
+
+/*
+ * NE Header ADDITIONAL FLAGS
+ */
+#define NE_AFLAGS_WIN2_PROTMODE 0x02
+#define NE_AFLAGS_WIN2_PROFONTS 0x04
+#define NE_AFLAGS_FASTLOAD 0x08
+
+/*
+ * Segment Flags
+ */
+#define NE_SEGFLAGS_DATA 0x0001
+#define NE_SEGFLAGS_ALLOCATED 0x0002
+#define NE_SEGFLAGS_LOADED 0x0004
+#define NE_SEGFLAGS_ITERATED 0x0008
+#define NE_SEGFLAGS_MOVEABLE 0x0010
+#define NE_SEGFLAGS_SHAREABLE 0x0020
+#define NE_SEGFLAGS_PRELOAD 0x0040
+#define NE_SEGFLAGS_EXECUTEONLY 0x0080
+#define NE_SEGFLAGS_READONLY 0x0080
+#define NE_SEGFLAGS_RELOC_DATA 0x0100
+#define NE_SEGFLAGS_SELFLOAD 0x0800
+#define NE_SEGFLAGS_DISCARDABLE 0x1000
+#define NE_SEGFLAGS_32BIT 0x2000
+
+/*
+ * Resource table structures.
+ */
+typedef struct
+{
+ WORD offset;
+ WORD length;
+ WORD flags;
+ WORD id;
+ HANDLE16 handle;
+ WORD usage;
+} NE_NAMEINFO;
+
+typedef struct
+{
+ WORD type_id; /* Type identifier */
+ WORD count; /* Number of resources of this type */
+ FARPROC16 resloader; /* SetResourceHandler() */
+ /*
+ * Name info array.
+ */
+} NE_TYPEINFO;
+
+#define NE_RSCTYPE_CURSOR 0x8001
+#define NE_RSCTYPE_BITMAP 0x8002
+#define NE_RSCTYPE_ICON 0x8003
+#define NE_RSCTYPE_MENU 0x8004
+#define NE_RSCTYPE_DIALOG 0x8005
+#define NE_RSCTYPE_STRING 0x8006
+#define NE_RSCTYPE_FONTDIR 0x8007
+#define NE_RSCTYPE_FONT 0x8008
+#define NE_RSCTYPE_ACCELERATOR 0x8009
+#define NE_RSCTYPE_RCDATA 0x800a
+#define NE_RSCTYPE_GROUP_CURSOR 0x800c
+#define NE_RSCTYPE_GROUP_ICON 0x800e
+#define NE_RSCTYPE_SCALABLE_FONTPATH 0x80cc /* Resource found in .fot files */
+
+#include <poppack.h>
+
+#define __AHSHIFT 3 /* don't change! */
+#define __AHINCR (1 << __AHSHIFT)
+
+/* undocumented functions */
+
+typedef struct tagSYSLEVEL
+{
+ CRITICAL_SECTION crst;
+ INT level;
+} SYSLEVEL;
+
+/* [GS]etProcessDword offsets */
+#define GPD_APP_COMPAT_FLAGS (-56)
+#define GPD_LOAD_DONE_EVENT (-52)
+#define GPD_HINSTANCE16 (-48)
+#define GPD_WINDOWS_VERSION (-44)
+#define GPD_THDB (-40)
+#define GPD_PDB (-36)
+#define GPD_STARTF_SHELLDATA (-32)
+#define GPD_STARTF_HOTKEY (-28)
+#define GPD_STARTF_SHOWWINDOW (-24)
+#define GPD_STARTF_SIZE (-20)
+#define GPD_STARTF_POSITION (-16)
+#define GPD_STARTF_FLAGS (-12)
+#define GPD_PARENT (- 8)
+#define GPD_FLAGS (- 4)
+#define GPD_USERDATA ( 0)
+
+WORD WINAPI AllocCStoDSAlias16(WORD);
+WORD WINAPI AllocDStoCSAlias16(WORD);
+HGLOBAL16 WINAPI AllocResource16(HINSTANCE16,HRSRC16,DWORD);
+WORD WINAPI AllocSelector16(WORD);
+WORD WINAPI AllocSelectorArray16(WORD);
+VOID WINAPI DirectedYield16(HTASK16);
+HGLOBAL16 WINAPI DirectResAlloc16(HINSTANCE16,WORD,UINT16);
+void WINAPI DisposeLZ32Handle(HANDLE);
+HANDLE WINAPI DosFileHandleToWin32Handle(HFILE);
+HANDLE16 WINAPI FarGetOwner16(HGLOBAL16);
+VOID WINAPI FarSetOwner16(HGLOBAL16,HANDLE16);
+FARPROC16 WINAPI FileCDR16(FARPROC16);
+WORD WINAPI FreeSelector16(WORD);
+HANDLE16 WINAPI GetAtomHandle16(ATOM);
+HANDLE16 WINAPI GetCodeHandle16(FARPROC16);
+BOOL16 WINAPI GetCodeInfo16(FARPROC16,SEGINFO*);
+DWORD WINAPI GetCurrentPDB16(void);
+HTASK16 WINAPI GetCurrentTask(void);
+SEGPTR WINAPI GetDOSEnvironment16(void);
+HMODULE16 WINAPI GetExePtr(HANDLE16);
+WORD WINAPI GetExeVersion16(void);
+WORD WINAPI GetExpWinVer16(HMODULE16);
+HQUEUE16 WINAPI GetFastQueue16(void);
+DWORD WINAPI GetHeapSpaces16(HMODULE16);
+INT16 WINAPI GetInstanceData16(HINSTANCE16,WORD,INT16);
+BOOL16 WINAPI GetModuleName16(HINSTANCE16,LPSTR,INT16);
+INT16 WINAPI GetModuleUsage16(HINSTANCE16);
+UINT16 WINAPI GetNumTasks16(void);
+VOID WINAPI GetpWin16Lock(SYSLEVEL**);
+SEGPTR WINAPI GetpWin16Lock16(void);
+DWORD WINAPI GetProcessDword(DWORD,INT);
+DWORD WINAPI GetSelectorLimit16(WORD);
+FARPROC16 WINAPI GetSetKernelDOSProc16(FARPROC16 DosProc);
+HINSTANCE16 WINAPI GetTaskDS16(void);
+HQUEUE16 WINAPI GetTaskQueue16(HTASK16);
+HQUEUE16 WINAPI GetThreadQueue16(DWORD);
+DWORD WINAPI GetWinFlags16(void);
+DWORD WINAPI GlobalDOSAlloc16(DWORD);
+WORD WINAPI GlobalDOSFree16(WORD);
+void WINAPI GlobalFreeAll16(HGLOBAL16);
+DWORD WINAPI GlobalHandleNoRIP16(WORD);
+WORD WINAPI GlobalHandleToSel16(HGLOBAL16);
+HGLOBAL16 WINAPI GlobalLRUNewest16(HGLOBAL16);
+HGLOBAL16 WINAPI GlobalLRUOldest16(HGLOBAL16);
+VOID WINAPI GlobalNotify16(FARPROC16);
+WORD WINAPI GlobalPageLock16(HGLOBAL16);
+WORD WINAPI GlobalPageUnlock16(HGLOBAL16);
+SEGPTR WINAPI HasGPHandler16(SEGPTR);
+BOOL16 WINAPI IsSharedSelector16(HANDLE16);
+BOOL16 WINAPI IsTask16(HTASK16);
+HTASK16 WINAPI IsTaskLocked16(void);
+VOID WINAPI LogError16(UINT16, LPVOID);
+VOID WINAPI LogParamError16(UINT16,FARPROC16,LPVOID);
+WORD WINAPI LocalCountFree16(void);
+WORD WINAPI LocalHandleDelta16(WORD);
+WORD WINAPI LocalHeapSize16(void);
+BOOL16 WINAPI LocalInit16(HANDLE16,WORD,WORD);
+FARPROC16 WINAPI LocalNotify16(FARPROC16);
+HTASK16 WINAPI LockCurrentTask16(BOOL16);
+DWORD WINAPI MapLS(LPCVOID);
+LPVOID WINAPI MapSL(DWORD);
+VOID WINAPI OldYield16(void);
+VOID WINAPI WIN32_OldYield16(void);
+VOID WINAPI PostEvent16(HTASK16);
+WORD WINAPI PrestoChangoSelector16(WORD,WORD);
+VOID WINAPI ReleaseThunkLock(DWORD*);
+VOID WINAPI RestoreThunkLock(DWORD);
+WORD WINAPI SelectorAccessRights16(WORD,WORD,WORD);
+void WINAPI SetFastQueue16(DWORD,HQUEUE16);
+VOID WINAPI SetPriority16(HTASK16,INT16);
+FARPROC16 WINAPI SetResourceHandler16(HINSTANCE16,LPCSTR,FARPROC16);
+WORD WINAPI SetSelectorLimit16(WORD,DWORD);
+HQUEUE16 WINAPI SetTaskQueue16(HTASK16,HQUEUE16);
+HQUEUE16 WINAPI SetThreadQueue16(DWORD,HQUEUE16);
+VOID WINAPI SwitchStackTo16(WORD,WORD,WORD);
+VOID WINAPI UnMapLS(DWORD);
+BOOL16 WINAPI WaitEvent16(HTASK16);
+HFILE WINAPI Win32HandleToDosFileHandle(HANDLE);
+VOID WINAPI WriteOutProfiles16(void);
+VOID WINAPI hmemcpy16(LPVOID,LPCVOID,LONG);
+VOID WINAPI _CheckNotSysLevel(SYSLEVEL *lock);
+DWORD WINAPI _ConfirmSysLevel(SYSLEVEL*);
+DWORD WINAPI _ConfirmWin16Lock(void);
+VOID WINAPI _CreateSysLevel(SYSLEVEL*,INT);
+VOID WINAPI _EnterSysLevel(SYSLEVEL*);
+VOID WINAPI _EnterWin16Lock(void);
+VOID WINAPI _LeaveSysLevel(SYSLEVEL*);
+VOID WINAPI _LeaveWin16Lock(void);
+
+
+INT16 WINAPI AccessResource16(HINSTANCE16,HRSRC16);
+ATOM WINAPI AddAtom16(LPCSTR);
+UINT16 WINAPI CompareString16(DWORD,DWORD,LPCSTR,DWORD,LPCSTR,DWORD);
+BOOL16 WINAPI CreateDirectory16(LPCSTR,LPVOID);
+BOOL16 WINAPI DefineHandleTable16(WORD);
+ATOM WINAPI DeleteAtom16(ATOM);
+BOOL16 WINAPI DeleteFile16(LPCSTR);
+void WINAPI ExitKernel16(void);
+void WINAPI FatalAppExit16(UINT16,LPCSTR);
+ATOM WINAPI FindAtom16(LPCSTR);
+BOOL16 WINAPI FindClose16(HANDLE16);
+VOID WINAPI FreeLibrary16(HINSTANCE16);
+HANDLE16 WINAPI FindFirstFile16(LPCSTR,LPWIN32_FIND_DATAA);
+BOOL16 WINAPI FindNextFile16(HANDLE16,LPWIN32_FIND_DATAA);
+HRSRC16 WINAPI FindResource16(HINSTANCE16,LPCSTR,LPCSTR);
+BOOL16 WINAPI FreeModule16(HMODULE16);
+void WINAPI FreeProcInstance16(FARPROC16);
+BOOL16 WINAPI FreeResource16(HGLOBAL16);
+UINT16 WINAPI GetAtomName16(ATOM,LPSTR,INT16);
+UINT16 WINAPI GetCurrentDirectory16(UINT16,LPSTR);
+BOOL16 WINAPI GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
+UINT16 WINAPI GetDriveType16(UINT16); /* yes, the arguments differ */
+INT16 WINAPI GetLocaleInfo16(LCID,LCTYPE,LPSTR,INT16);
+DWORD WINAPI GetFileAttributes16(LPCSTR);
+DWORD WINAPI GetFreeSpace16(UINT16);
+INT16 WINAPI GetModuleFileName16(HINSTANCE16,LPSTR,INT16);
+HMODULE16 WINAPI GetModuleHandle16(LPCSTR);
+UINT16 WINAPI GetPrivateProfileInt16(LPCSTR,LPCSTR,INT16,LPCSTR);
+INT16 WINAPI GetPrivateProfileSection16(LPCSTR,LPSTR,UINT16,LPCSTR);
+WORD WINAPI GetPrivateProfileSectionNames16(LPSTR,UINT16,LPCSTR);
+INT16 WINAPI GetPrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16,LPCSTR);
+BOOL16 WINAPI GetPrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);
+FARPROC16 WINAPI GetProcAddress16(HMODULE16,LPCSTR);
+UINT16 WINAPI GetProfileInt16(LPCSTR,LPCSTR,INT16);
+INT16 WINAPI GetProfileSection16(LPCSTR,LPSTR,UINT16);
+WORD WINAPI GetProfileSectionNames16(LPSTR,WORD);
+INT16 WINAPI GetProfileString16(LPCSTR,LPCSTR,LPCSTR,LPSTR,UINT16);
+DWORD WINAPI GetSelectorBase(WORD);
+BOOL16 WINAPI GetStringType16(LCID,DWORD,LPCSTR,INT16,LPWORD);
+UINT16 WINAPI GetSystemDirectory16(LPSTR,UINT16);
+UINT16 WINAPI GetTempFileName16(BYTE,LPCSTR,UINT16,LPSTR);
+DWORD WINAPI GetVersion16(void);
+BOOL16 WINAPI GetVersionEx16(OSVERSIONINFO16*);
+BOOL16 WINAPI GetWinDebugInfo16(LPWINDEBUGINFO16,UINT16);
+UINT16 WINAPI GetWindowsDirectory16(LPSTR,UINT16);
+HGLOBAL16 WINAPI GlobalAlloc16(UINT16,DWORD);
+DWORD WINAPI GlobalCompact16(DWORD);
+LPVOID WINAPI GlobalLock16(HGLOBAL16);
+WORD WINAPI GlobalFix16(HGLOBAL16);
+UINT16 WINAPI GlobalFlags16(HGLOBAL16);
+HGLOBAL16 WINAPI GlobalFree16(HGLOBAL16);
+DWORD WINAPI GlobalHandle16(WORD);
+HGLOBAL16 WINAPI GlobalReAlloc16(HGLOBAL16,DWORD,UINT16);
+DWORD WINAPI GlobalSize16(HGLOBAL16);
+VOID WINAPI GlobalUnfix16(HGLOBAL16);
+BOOL16 WINAPI GlobalUnlock16(HGLOBAL16);
+BOOL16 WINAPI GlobalUnWire16(HGLOBAL16);
+SEGPTR WINAPI GlobalWire16(HGLOBAL16);
+WORD WINAPI InitAtomTable16(WORD);
+void WINAPI InitTask16(CONTEXT*);
+BOOL16 WINAPI IsBadCodePtr16(SEGPTR);
+BOOL16 WINAPI IsBadHugeReadPtr16(SEGPTR,DWORD);
+BOOL16 WINAPI IsBadHugeWritePtr16(SEGPTR,DWORD);
+BOOL16 WINAPI IsBadReadPtr16(SEGPTR,UINT16);
+BOOL16 WINAPI IsBadStringPtr16(SEGPTR,UINT16);
+BOOL16 WINAPI IsBadWritePtr16(SEGPTR,UINT16);
+BOOL16 WINAPI IsDBCSLeadByte16(BYTE);
+HINSTANCE16 WINAPI LoadLibrary16(LPCSTR);
+HINSTANCE16 WINAPI LoadModule16(LPCSTR,LPVOID);
+HGLOBAL16 WINAPI LoadResource16(HINSTANCE16,HRSRC16);
+HLOCAL16 WINAPI LocalAlloc16(UINT16,WORD);
+UINT16 WINAPI LocalCompact16(UINT16);
+UINT16 WINAPI LocalFlags16(HLOCAL16);
+HLOCAL16 WINAPI LocalFree16(HLOCAL16);
+HLOCAL16 WINAPI LocalHandle16(WORD);
+SEGPTR WINAPI LocalLock16(HLOCAL16);
+HLOCAL16 WINAPI LocalReAlloc16(HLOCAL16,WORD,UINT16);
+UINT16 WINAPI LocalShrink16(HGLOBAL16,UINT16);
+UINT16 WINAPI LocalSize16(HLOCAL16);
+BOOL16 WINAPI LocalUnlock16(HLOCAL16);
+LPVOID WINAPI LockResource16(HGLOBAL16);
+HGLOBAL16 WINAPI LockSegment16(HGLOBAL16);
+FARPROC16 WINAPI MakeProcInstance16(FARPROC16,HANDLE16);
+HFILE16 WINAPI OpenFile16(LPCSTR,OFSTRUCT*,UINT16);
+DWORD WINAPI RegCloseKey16(HKEY);
+DWORD WINAPI RegCreateKey16(HKEY,LPCSTR,PHKEY);
+DWORD WINAPI RegDeleteKey16(HKEY,LPCSTR);
+DWORD WINAPI RegDeleteValue16(HKEY,LPSTR);
+DWORD WINAPI RegEnumKey16(HKEY,DWORD,LPSTR,DWORD);
+DWORD WINAPI RegEnumValue16(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD WINAPI RegOpenKey16(HKEY,LPCSTR,PHKEY);
+DWORD WINAPI RegQueryValue16(HKEY,LPCSTR,LPSTR,LPDWORD);
+DWORD WINAPI RegQueryValueEx16(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+DWORD WINAPI RegSetValue16(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
+DWORD WINAPI RegSetValueEx16(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);
+BOOL16 WINAPI RemoveDirectory16(LPCSTR);
+BOOL16 WINAPI SetCurrentDirectory16(LPCSTR);
+UINT16 WINAPI SetErrorMode16(UINT16);
+BOOL16 WINAPI SetFileAttributes16(LPCSTR,DWORD);
+UINT16 WINAPI SetHandleCount16(UINT16);
+WORD WINAPI SetSelectorBase(WORD,DWORD);
+LONG WINAPI SetSwapAreaSize16(WORD);
+BOOL16 WINAPI SetWinDebugInfo16(LPWINDEBUGINFO16);
+DWORD WINAPI SizeofResource16(HMODULE16,HRSRC16);
+void WINAPI UnlockSegment16(HGLOBAL16);
+BOOL16 WINAPI WritePrivateProfileString16(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+BOOL16 WINAPI WriteProfileString16(LPCSTR,LPCSTR,LPCSTR);
+/* Yield16 will only be available from kernel module, use WOWYield instead */
+VOID WINAPI Yield16(void);
+SEGPTR WINAPI lstrcat16(SEGPTR,LPCSTR);
+SEGPTR WINAPI lstrcatn16(SEGPTR,LPCSTR,INT16);
+SEGPTR WINAPI lstrcpy16(SEGPTR,LPCSTR);
+SEGPTR WINAPI lstrcpyn16(SEGPTR,LPCSTR,INT16);
+INT16 WINAPI lstrlen16(LPCSTR);
+HINSTANCE16 WINAPI WinExec16(LPCSTR,UINT16);
+LONG WINAPI _hread16(HFILE16,LPVOID,LONG);
+LONG WINAPI _hwrite16(HFILE16,LPCSTR,LONG);
+HFILE16 WINAPI _lcreat16(LPCSTR,INT16);
+HFILE16 WINAPI _lclose16(HFILE16);
+LONG WINAPI _llseek16(HFILE16,LONG,INT16);
+HFILE16 WINAPI _lopen16(LPCSTR,INT16);
+UINT16 WINAPI _lread16(HFILE16,LPVOID,UINT16);
+UINT16 WINAPI _lwrite16(HFILE16,LPCSTR,UINT16);
+BOOL16 WINAPI WritePrivateProfileSection16(LPCSTR,LPCSTR,LPCSTR);
+BOOL16 WINAPI WritePrivateProfileStruct16(LPCSTR,LPCSTR,LPVOID,UINT16,LPCSTR);
+BOOL16 WINAPI WriteProfileSection16(LPCSTR,LPCSTR);
+
+#endif /* __WINE_WINE_WINBASE16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h
new file mode 100644
index 00000000..60cf2825
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/windef16.h
@@ -0,0 +1,178 @@
+/*
+ * Basic type definitions for 16 bit variations on Windows types.
+ * These types are provided mostly to insure compatibility with
+ * 16 bit windows code.
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINDEF16_H
+#define __WINE_WINDEF16_H
+
+#ifndef RC_INVOKED
+#include <stdarg.h>
+#endif
+#include <windef.h>
+#include <winbase.h>
+
+/* Standard data types */
+
+typedef unsigned short BOOL16;
+typedef DWORD SEGPTR;
+
+typedef UINT16 HANDLE16;
+typedef HANDLE16 *LPHANDLE16;
+
+typedef UINT16 WPARAM16;
+typedef INT16 *LPINT16;
+typedef UINT16 *LPUINT16;
+
+typedef WORD CATCHBUF[9];
+typedef WORD *LPCATCHBUF;
+
+#define MAKESEGPTR(seg,off) ((SEGPTR)MAKELONG(off,seg))
+#define SELECTOROF(ptr) (HIWORD(ptr))
+#define OFFSETOF(ptr) (LOWORD(ptr))
+
+typedef WORD *VA_LIST16;
+
+#define __VA_ROUNDED16(type) \
+ ((sizeof(type) + sizeof(WORD) - 1) / sizeof(WORD) * sizeof(WORD))
+#define VA_ARG16(list,type) \
+ (((list) = (VA_LIST16)((char *)(list) + __VA_ROUNDED16(type))), \
+ *((type *)(void *)((char *)(list) - __VA_ROUNDED16(type))))
+
+#define HFILE_ERROR16 ((HFILE16)-1)
+
+#define DECLARE_HANDLE16(a) \
+ typedef HANDLE16 a##16; \
+ typedef a##16 *P##a##16; \
+ typedef a##16 *NP##a##16; \
+ typedef a##16 *LP##a##16
+
+DECLARE_HANDLE16(HACMDRIVERID);
+DECLARE_HANDLE16(HACMDRIVER);
+DECLARE_HANDLE16(HACMOBJ);
+DECLARE_HANDLE16(HACMSTREAM);
+DECLARE_HANDLE16(HMETAFILEPICT);
+
+DECLARE_HANDLE16(HACCEL);
+DECLARE_HANDLE16(HBITMAP);
+DECLARE_HANDLE16(HBRUSH);
+DECLARE_HANDLE16(HCOLORSPACE);
+DECLARE_HANDLE16(HCURSOR);
+DECLARE_HANDLE16(HDC);
+DECLARE_HANDLE16(HDROP);
+DECLARE_HANDLE16(HDRVR);
+DECLARE_HANDLE16(HDWP);
+DECLARE_HANDLE16(HENHMETAFILE);
+DECLARE_HANDLE16(HFILE);
+DECLARE_HANDLE16(HFONT);
+DECLARE_HANDLE16(HICON);
+DECLARE_HANDLE16(HINSTANCE);
+DECLARE_HANDLE16(HKEY);
+DECLARE_HANDLE16(HMENU);
+DECLARE_HANDLE16(HMETAFILE);
+DECLARE_HANDLE16(HMIDI);
+DECLARE_HANDLE16(HMIDIIN);
+DECLARE_HANDLE16(HMIDIOUT);
+DECLARE_HANDLE16(HMIDISTRM);
+DECLARE_HANDLE16(HMIXER);
+DECLARE_HANDLE16(HMIXEROBJ);
+DECLARE_HANDLE16(HMMIO);
+DECLARE_HANDLE16(HPALETTE);
+DECLARE_HANDLE16(HPEN);
+DECLARE_HANDLE16(HQUEUE);
+DECLARE_HANDLE16(HRGN);
+DECLARE_HANDLE16(HRSRC);
+DECLARE_HANDLE16(HTASK);
+DECLARE_HANDLE16(HWAVE);
+DECLARE_HANDLE16(HWAVEIN);
+DECLARE_HANDLE16(HWAVEOUT);
+DECLARE_HANDLE16(HWINSTA);
+DECLARE_HANDLE16(HDESK);
+DECLARE_HANDLE16(HWND);
+DECLARE_HANDLE16(HKL);
+DECLARE_HANDLE16(HIC);
+DECLARE_HANDLE16(HRASCONN);
+#undef DECLARE_HANDLE16
+
+typedef HINSTANCE16 HMODULE16;
+typedef HANDLE16 HGDIOBJ16;
+typedef HANDLE16 HGLOBAL16;
+typedef HANDLE16 HLOCAL16;
+
+#include <pshpack1.h>
+
+/* The SIZE structure */
+
+typedef struct
+{
+ INT16 cx;
+ INT16 cy;
+} SIZE16, *PSIZE16, *LPSIZE16;
+
+/* The POINT structure */
+
+typedef struct
+{
+ INT16 x;
+ INT16 y;
+} POINT16, *PPOINT16, *LPPOINT16;
+
+/* The RECT structure */
+
+typedef struct
+{
+ INT16 left;
+ INT16 top;
+ INT16 right;
+ INT16 bottom;
+} RECT16, *LPRECT16;
+
+#include <poppack.h>
+
+/* Callback function pointers types */
+
+typedef LRESULT (CALLBACK *DRIVERPROC16)(DWORD,HDRVR16,UINT16,LPARAM,LPARAM);
+typedef BOOL16 (CALLBACK *DLGPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
+typedef INT16 (CALLBACK *EDITWORDBREAKPROC16)(LPSTR,INT16,INT16,INT16);
+typedef BOOL16 (CALLBACK *GRAYSTRINGPROC16)(HDC16,LPARAM,INT16);
+typedef LRESULT (CALLBACK *HOOKPROC16)(INT16,WPARAM16,LPARAM);
+typedef BOOL16 (CALLBACK *PROPENUMPROC16)(HWND16,SEGPTR,HANDLE16);
+typedef VOID (CALLBACK *TIMERPROC16)(HWND16,UINT16,UINT16,DWORD);
+typedef LRESULT (CALLBACK *WNDENUMPROC16)(HWND16,LPARAM);
+typedef LRESULT (CALLBACK *WNDPROC16)(HWND16,UINT16,WPARAM16,LPARAM);
+
+#ifdef WINE_STRICT_PROTOTYPES
+typedef LRESULT (CALLBACK *FARPROC16)(void);
+typedef INT16 (CALLBACK *PROC16)(void);
+#else
+typedef LRESULT (CALLBACK *FARPROC16)();
+typedef INT16 (CALLBACK *PROC16)();
+#endif
+
+#endif /* __WINE_WINDEF16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc
new file mode 100644
index 00000000..1baa8b68
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wine_common_ver.rc
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2001 Dmitry Timoshkov
+ * Copyright 2004 Ivan Leo Puoti
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include "winresrc.h"
+
+/*
+Assign WINE_FILEVERSION and WINE_FILEVERSION_STR high enough number
+to make sure that programs, relying on the version numbers, will
+never complain.
+*/
+
+#ifndef WINE_FILEVERSION_MAJOR
+#define WINE_FILEVERSION_MAJOR 10
+#endif
+
+#ifndef WINE_FILEVERSION_MINOR
+#define WINE_FILEVERSION_MINOR 0
+#endif
+
+#ifndef WINE_FILEVERSION_BUILD
+#define WINE_FILEVERSION_BUILD 0
+#endif
+
+#ifndef WINE_FILEVERSION_PLATFORMID
+#define WINE_FILEVERSION_PLATFORMID 0
+#endif
+
+#ifndef WINE_FILEVERSION
+#define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,\
+ WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID
+#endif
+
+#define WINE_VER_STRINGIZE2(x) #x
+#define WINE_VER_STRINGIZE(x) WINE_VER_STRINGIZE2(x)
+
+#ifndef WINE_FILEVERSION_STR
+#define WINE_FILEVERSION_STR WINE_VER_STRINGIZE(WINE_FILEVERSION_MAJOR.WINE_FILEVERSION_MINOR.WINE_FILEVERSION_BUILD.WINE_FILEVERSION_PLATFORMID)
+#endif
+
+#ifndef WINE_FILEDESCRIPTION_STR
+#define WINE_FILEDESCRIPTION_STR "Wine core dll"
+#endif
+
+#ifndef WINE_FILENAME
+#define WINE_FILENAME ""
+#endif
+
+#ifndef WINE_FILENAME_STR
+#define WINE_FILENAME_STR ""
+#endif
+
+#ifndef WINE_FILETYPE
+#define WINE_FILETYPE VFT_DLL
+#endif
+
+#ifndef WINE_FILESUBTYPE
+#define WINE_FILESUBTYPE VFT2_UNKNOWN
+#endif
+
+#ifndef WINE_PRODUCTVERSION
+#define WINE_PRODUCTVERSION 1,0,0,0
+#endif
+
+#ifndef WINE_PRODUCTVERSION_STR
+#define WINE_PRODUCTVERSION_STR "1.0"
+#endif
+
+#ifndef WINE_PRODUCTNAME_STR
+#define WINE_PRODUCTNAME_STR "Wine"
+#endif
+
+#ifndef WINE_EXTRAVALUES
+#define WINE_EXTRAVALUES
+#endif
+
+VS_VERSION_INFO VERSIONINFO
+FILEVERSION WINE_FILEVERSION
+PRODUCTVERSION WINE_PRODUCTVERSION
+FILEFLAGSMASK 63
+FILEFLAGS 0
+FILEOS VOS_UNKNOWN
+FILETYPE WINE_FILETYPE
+FILESUBTYPE WINE_FILESUBTYPE
+{
+ BLOCK "StringFileInfo"
+ {
+ BLOCK "040904E4" /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
+ {
+ VALUE "CompanyName", "Microsoft Corporation" /* GameGuard depends on this */
+ VALUE "FileDescription", WINE_FILEDESCRIPTION_STR
+ VALUE "FileVersion", WINE_FILEVERSION_STR
+ VALUE "InternalName", WINE_FILENAME
+ VALUE "LegalCopyright", "Copyright (c) 1993-2013 the Wine project authors (see the file AUTHORS for a complete list)"
+ VALUE "OriginalFilename", WINE_FILENAME_STR
+ VALUE "ProductName", WINE_PRODUCTNAME_STR
+ VALUE "ProductVersion", WINE_PRODUCTVERSION_STR
+ WINE_EXTRAVALUES
+ }
+ }
+ BLOCK "VarFileInfo"
+ {
+ VALUE "Translation", 0x0409, 0x04E4 /* LANG_ENGLISH/SUBLANG_DEFAULT, CP 1252 */
+ }
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h
new file mode 100644
index 00000000..3c4681cb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wined3d.h
@@ -0,0 +1,9726 @@
+/*** Autogenerated by WIDL 1.1.43 from ../../include/wine/wined3d.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WINED3D_H
+#define __WIDL_WINED3D_H
+
+#ifdef VBOX_WITH_WDDM
+#include "../../../vbox/VBoxWineEx.h"
+#endif
+
+# undef DECLSPEC_HIDDEN
+# define DECLSPEC_HIDDEN
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <unknwn.h>
+
+/* Forward declarations */
+
+#ifndef __IWineD3DDeviceParent_FWD_DEFINED__
+#define __IWineD3DDeviceParent_FWD_DEFINED__
+typedef interface IWineD3DDeviceParent IWineD3DDeviceParent;
+#endif
+
+#ifndef __IWineD3DBase_FWD_DEFINED__
+#define __IWineD3DBase_FWD_DEFINED__
+typedef interface IWineD3DBase IWineD3DBase;
+#endif
+
+#ifndef __IWineD3D_FWD_DEFINED__
+#define __IWineD3D_FWD_DEFINED__
+typedef interface IWineD3D IWineD3D;
+#endif
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DRendertargetView_FWD_DEFINED__
+#define __IWineD3DRendertargetView_FWD_DEFINED__
+typedef interface IWineD3DRendertargetView IWineD3DRendertargetView;
+#endif
+
+#ifndef __IWineD3DPalette_FWD_DEFINED__
+#define __IWineD3DPalette_FWD_DEFINED__
+typedef interface IWineD3DPalette IWineD3DPalette;
+#endif
+
+#ifndef __IWineD3DClipper_FWD_DEFINED__
+#define __IWineD3DClipper_FWD_DEFINED__
+typedef interface IWineD3DClipper IWineD3DClipper;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DBaseTexture_FWD_DEFINED__
+#define __IWineD3DBaseTexture_FWD_DEFINED__
+typedef interface IWineD3DBaseTexture IWineD3DBaseTexture;
+#endif
+
+#ifndef __IWineD3DTexture_FWD_DEFINED__
+#define __IWineD3DTexture_FWD_DEFINED__
+typedef interface IWineD3DTexture IWineD3DTexture;
+#endif
+
+#ifndef __IWineD3DCubeTexture_FWD_DEFINED__
+#define __IWineD3DCubeTexture_FWD_DEFINED__
+typedef interface IWineD3DCubeTexture IWineD3DCubeTexture;
+#endif
+
+#ifndef __IWineD3DVolumeTexture_FWD_DEFINED__
+#define __IWineD3DVolumeTexture_FWD_DEFINED__
+typedef interface IWineD3DVolumeTexture IWineD3DVolumeTexture;
+#endif
+
+#ifndef __IWineD3DVertexDeclaration_FWD_DEFINED__
+#define __IWineD3DVertexDeclaration_FWD_DEFINED__
+typedef interface IWineD3DVertexDeclaration IWineD3DVertexDeclaration;
+#endif
+
+#ifndef __IWineD3DStateBlock_FWD_DEFINED__
+#define __IWineD3DStateBlock_FWD_DEFINED__
+typedef interface IWineD3DStateBlock IWineD3DStateBlock;
+#endif
+
+#ifndef __IWineD3DQuery_FWD_DEFINED__
+#define __IWineD3DQuery_FWD_DEFINED__
+typedef interface IWineD3DQuery IWineD3DQuery;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DBuffer_FWD_DEFINED__
+#define __IWineD3DBuffer_FWD_DEFINED__
+typedef interface IWineD3DBuffer IWineD3DBuffer;
+#endif
+
+#ifndef __IWineD3DBaseShader_FWD_DEFINED__
+#define __IWineD3DBaseShader_FWD_DEFINED__
+typedef interface IWineD3DBaseShader IWineD3DBaseShader;
+#endif
+
+#ifndef __IWineD3DVertexShader_FWD_DEFINED__
+#define __IWineD3DVertexShader_FWD_DEFINED__
+typedef interface IWineD3DVertexShader IWineD3DVertexShader;
+#endif
+
+#ifndef __IWineD3DGeometryShader_FWD_DEFINED__
+#define __IWineD3DGeometryShader_FWD_DEFINED__
+typedef interface IWineD3DGeometryShader IWineD3DGeometryShader;
+#endif
+
+#ifndef __IWineD3DPixelShader_FWD_DEFINED__
+#define __IWineD3DPixelShader_FWD_DEFINED__
+typedef interface IWineD3DPixelShader IWineD3DPixelShader;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+
+#if 0
+typedef HANDLE HMONITOR;
+typedef struct _RGNDATAHEADER {
+ DWORD dwSize;
+ DWORD iType;
+ DWORD nCount;
+ DWORD nRgnSize;
+ RECT rcBound;
+} RGNDATAHEADER;
+typedef struct _RGNDATA {
+ RGNDATAHEADER rdh;
+ char Buffer[1];
+} RGNDATA;
+typedef struct _LUID {
+ DWORD LowPart;
+ LONG HighPart;
+} LUID;
+typedef struct _LUID *PLUID;
+#endif
+#define WINED3D_OK S_OK
+#define _FACWINED3D (0x876)
+
+#define MAKE_WINED3DSTATUS(code) MAKE_HRESULT(0, _FACWINED3D, code)
+#define WINED3DOK_NOAUTOGEN MAKE_WINED3DSTATUS(2159)
+#define MAKE_WINED3DHRESULT(code) MAKE_HRESULT(1, _FACWINED3D, code)
+#define WINED3DERR_WRONGTEXTUREFORMAT MAKE_WINED3DHRESULT(2072)
+#define WINED3DERR_UNSUPPORTEDCOLOROPERATION MAKE_WINED3DHRESULT(2073)
+#define WINED3DERR_UNSUPPORTEDCOLORARG MAKE_WINED3DHRESULT(2074)
+#define WINED3DERR_UNSUPPORTEDALPHAOPERATION MAKE_WINED3DHRESULT(2075)
+#define WINED3DERR_UNSUPPORTEDALPHAARG MAKE_WINED3DHRESULT(2076)
+#define WINED3DERR_TOOMANYOPERATIONS MAKE_WINED3DHRESULT(2077)
+#define WINED3DERR_CONFLICTINGTEXTUREFILTER MAKE_WINED3DHRESULT(2078)
+#define WINED3DERR_UNSUPPORTEDFACTORVALUE MAKE_WINED3DHRESULT(2079)
+#define WINED3DERR_CONFLICTINGRENDERSTATE MAKE_WINED3DHRESULT(2081)
+#define WINED3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_WINED3DHRESULT(2082)
+#define WINED3DERR_CONFLICTINGTEXTUREPALETTE MAKE_WINED3DHRESULT(2086)
+#define WINED3DERR_DRIVERINTERNALERROR MAKE_WINED3DHRESULT(2087)
+#define WINED3DERR_NOTFOUND MAKE_WINED3DHRESULT(2150)
+#define WINED3DERR_MOREDATA MAKE_WINED3DHRESULT(2151)
+#define WINED3DERR_DEVICELOST MAKE_WINED3DHRESULT(2152)
+#define WINED3DERR_DEVICENOTRESET MAKE_WINED3DHRESULT(2153)
+#define WINED3DERR_NOTAVAILABLE MAKE_WINED3DHRESULT(2154)
+#define WINED3DERR_OUTOFVIDEOMEMORY MAKE_WINED3DHRESULT(380)
+#define WINED3DERR_INVALIDDEVICE MAKE_WINED3DHRESULT(2155)
+#define WINED3DERR_INVALIDCALL MAKE_WINED3DHRESULT(2156)
+#define WINED3DERR_DRIVERINVALIDCALL MAKE_WINED3DHRESULT(2157)
+#define WINED3DERR_WASSTILLDRAWING MAKE_WINED3DHRESULT(540)
+#define WINEDDERR_NOTAOVERLAYSURFACE MAKE_WINED3DHRESULT(580)
+#define WINEDDERR_NOTLOCKED MAKE_WINED3DHRESULT(584)
+#define WINEDDERR_NODC MAKE_WINED3DHRESULT(586)
+#define WINEDDERR_DCALREADYCREATED MAKE_WINED3DHRESULT(620)
+#define WINEDDERR_NOTFLIPPABLE MAKE_WINED3DHRESULT(582)
+#define WINEDDERR_SURFACEBUSY MAKE_WINED3DHRESULT(430)
+#define WINEDDERR_INVALIDRECT MAKE_WINED3DHRESULT(150)
+#define WINEDDERR_NOCLIPLIST MAKE_WINED3DHRESULT(205)
+#define WINEDDERR_OVERLAYNOTVISIBLE MAKE_WINED3DHRESULT(577)
+typedef DWORD WINED3DCOLOR;
+typedef enum _WINED3DLIGHTTYPE {
+ WINED3DLIGHT_POINT = 1,
+ WINED3DLIGHT_SPOT = 2,
+ WINED3DLIGHT_DIRECTIONAL = 3,
+ WINED3DLIGHT_PARALLELPOINT = 4,
+ WINED3DLIGHT_GLSPOT = 5,
+ WINED3DLIGHT_FORCE_DWORD = 0x7fffffff
+} WINED3DLIGHTTYPE;
+typedef enum _WINED3DPRIMITIVETYPE {
+ WINED3DPT_UNDEFINED = 0,
+ WINED3DPT_POINTLIST = 1,
+ WINED3DPT_LINELIST = 2,
+ WINED3DPT_LINESTRIP = 3,
+ WINED3DPT_TRIANGLELIST = 4,
+ WINED3DPT_TRIANGLESTRIP = 5,
+ WINED3DPT_TRIANGLEFAN = 6,
+ WINED3DPT_LINELIST_ADJ = 10,
+ WINED3DPT_LINESTRIP_ADJ = 11,
+ WINED3DPT_TRIANGLELIST_ADJ = 12,
+ WINED3DPT_TRIANGLESTRIP_ADJ = 13,
+ WINED3DPT_FORCE_DWORD = 0x7fffffff
+} WINED3DPRIMITIVETYPE;
+typedef enum _WINED3DDEVTYPE {
+ WINED3DDEVTYPE_HAL = 1,
+ WINED3DDEVTYPE_REF = 2,
+ WINED3DDEVTYPE_SW = 3,
+ WINED3DDEVTYPE_NULLREF = 4,
+ WINED3DDEVTYPE_FORCE_DWORD = 0xffffffff
+} WINED3DDEVTYPE;
+typedef enum _WINED3DDEGREETYPE {
+ WINED3DDEGREE_LINEAR = 1,
+ WINED3DDEGREE_QUADRATIC = 2,
+ WINED3DDEGREE_CUBIC = 3,
+ WINED3DDEGREE_QUINTIC = 5,
+ WINED3DDEGREE_FORCE_DWORD = 0x7fffffff
+} WINED3DDEGREETYPE;
+typedef enum _WINED3DFORMAT {
+ WINED3DFMT_UNKNOWN = 0,
+ WINED3DFMT_B8G8R8_UNORM = 1,
+ WINED3DFMT_B5G5R5X1_UNORM = 2,
+ WINED3DFMT_B4G4R4A4_UNORM = 3,
+ WINED3DFMT_B2G3R3_UNORM = 4,
+ WINED3DFMT_B2G3R3A8_UNORM = 5,
+ WINED3DFMT_B4G4R4X4_UNORM = 6,
+ WINED3DFMT_R8G8B8X8_UNORM = 7,
+ WINED3DFMT_B10G10R10A2_UNORM = 8,
+ WINED3DFMT_P8_UINT_A8_UNORM = 9,
+ WINED3DFMT_P8_UINT = 10,
+ WINED3DFMT_L8_UNORM = 11,
+ WINED3DFMT_L8A8_UNORM = 12,
+ WINED3DFMT_L4A4_UNORM = 13,
+ WINED3DFMT_R5G5_SNORM_L6_UNORM = 14,
+ WINED3DFMT_R8G8_SNORM_L8X8_UNORM = 15,
+ WINED3DFMT_R10G11B11_SNORM = 16,
+ WINED3DFMT_R10G10B10_SNORM_A2_UNORM = 17,
+ WINED3DFMT_D16_LOCKABLE = 18,
+ WINED3DFMT_D32_UNORM = 19,
+ WINED3DFMT_S1_UINT_D15_UNORM = 20,
+ WINED3DFMT_X8D24_UNORM = 21,
+ WINED3DFMT_S4X4_UINT_D24_UNORM = 22,
+ WINED3DFMT_L16_UNORM = 23,
+ WINED3DFMT_S8_UINT_D24_FLOAT = 24,
+ WINED3DFMT_VERTEXDATA = 25,
+ WINED3DFMT_R8G8_SNORM_Cx = 26,
+ WINED3DFMT_R32G32B32A32_TYPELESS = 27,
+ WINED3DFMT_R32G32B32A32_FLOAT = 28,
+ WINED3DFMT_R32G32B32A32_UINT = 29,
+ WINED3DFMT_R32G32B32A32_SINT = 30,
+ WINED3DFMT_R32G32B32_TYPELESS = 31,
+ WINED3DFMT_R32G32B32_FLOAT = 32,
+ WINED3DFMT_R32G32B32_UINT = 33,
+ WINED3DFMT_R32G32B32_SINT = 34,
+ WINED3DFMT_R16G16B16A16_TYPELESS = 35,
+ WINED3DFMT_R16G16B16A16_FLOAT = 36,
+ WINED3DFMT_R16G16B16A16_UNORM = 37,
+ WINED3DFMT_R16G16B16A16_UINT = 38,
+ WINED3DFMT_R16G16B16A16_SNORM = 39,
+ WINED3DFMT_R16G16B16A16_SINT = 40,
+ WINED3DFMT_R32G32_TYPELESS = 41,
+ WINED3DFMT_R32G32_FLOAT = 42,
+ WINED3DFMT_R32G32_UINT = 43,
+ WINED3DFMT_R32G32_SINT = 44,
+ WINED3DFMT_R32G8X24_TYPELESS = 45,
+ WINED3DFMT_D32_FLOAT_S8X24_UINT = 46,
+ WINED3DFMT_R32_FLOAT_X8X24_TYPELESS = 47,
+ WINED3DFMT_X32_TYPELESS_G8X24_UINT = 48,
+ WINED3DFMT_R10G10B10A2_TYPELESS = 49,
+ WINED3DFMT_R10G10B10A2_UNORM = 50,
+ WINED3DFMT_R10G10B10A2_UINT = 51,
+ WINED3DFMT_R10G10B10A2_SNORM = 52,
+ WINED3DFMT_R11G11B10_FLOAT = 53,
+ WINED3DFMT_R8G8B8A8_TYPELESS = 54,
+ WINED3DFMT_R8G8B8A8_UNORM = 55,
+ WINED3DFMT_R8G8B8A8_UNORM_SRGB = 56,
+ WINED3DFMT_R8G8B8A8_UINT = 57,
+ WINED3DFMT_R8G8B8A8_SNORM = 58,
+ WINED3DFMT_R8G8B8A8_SINT = 59,
+ WINED3DFMT_R16G16_TYPELESS = 60,
+ WINED3DFMT_R16G16_FLOAT = 61,
+ WINED3DFMT_R16G16_UNORM = 62,
+ WINED3DFMT_R16G16_UINT = 63,
+ WINED3DFMT_R16G16_SNORM = 64,
+ WINED3DFMT_R16G16_SINT = 65,
+ WINED3DFMT_R32_TYPELESS = 66,
+ WINED3DFMT_D32_FLOAT = 67,
+ WINED3DFMT_R32_FLOAT = 68,
+ WINED3DFMT_R32_UINT = 69,
+ WINED3DFMT_R32_SINT = 70,
+ WINED3DFMT_R24G8_TYPELESS = 71,
+ WINED3DFMT_D24_UNORM_S8_UINT = 72,
+ WINED3DFMT_R24_UNORM_X8_TYPELESS = 73,
+ WINED3DFMT_X24_TYPELESS_G8_UINT = 74,
+ WINED3DFMT_R8G8_TYPELESS = 75,
+ WINED3DFMT_R8G8_UNORM = 76,
+ WINED3DFMT_R8G8_UINT = 77,
+ WINED3DFMT_R8G8_SNORM = 78,
+ WINED3DFMT_R8G8_SINT = 79,
+ WINED3DFMT_R16_TYPELESS = 80,
+ WINED3DFMT_R16_FLOAT = 81,
+ WINED3DFMT_D16_UNORM = 82,
+ WINED3DFMT_R16_UNORM = 83,
+ WINED3DFMT_R16_UINT = 84,
+ WINED3DFMT_R16_SNORM = 85,
+ WINED3DFMT_R16_SINT = 86,
+ WINED3DFMT_R8_TYPELESS = 87,
+ WINED3DFMT_R8_UNORM = 88,
+ WINED3DFMT_R8_UINT = 89,
+ WINED3DFMT_R8_SNORM = 90,
+ WINED3DFMT_R8_SINT = 91,
+ WINED3DFMT_A8_UNORM = 92,
+ WINED3DFMT_R1_UNORM = 93,
+ WINED3DFMT_R9G9B9E5_SHAREDEXP = 94,
+ WINED3DFMT_R8G8_B8G8_UNORM = 95,
+ WINED3DFMT_G8R8_G8B8_UNORM = 96,
+ WINED3DFMT_BC1_TYPELESS = 97,
+ WINED3DFMT_BC1_UNORM = 98,
+ WINED3DFMT_BC1_UNORM_SRGB = 99,
+ WINED3DFMT_BC2_TYPELESS = 100,
+ WINED3DFMT_BC2_UNORM = 101,
+ WINED3DFMT_BC2_UNORM_SRGB = 102,
+ WINED3DFMT_BC3_TYPELESS = 103,
+ WINED3DFMT_BC3_UNORM = 104,
+ WINED3DFMT_BC3_UNORM_SRGB = 105,
+ WINED3DFMT_BC4_TYPELESS = 106,
+ WINED3DFMT_BC4_UNORM = 107,
+ WINED3DFMT_BC4_SNORM = 108,
+ WINED3DFMT_BC5_TYPELESS = 109,
+ WINED3DFMT_BC5_UNORM = 110,
+ WINED3DFMT_BC5_SNORM = 111,
+ WINED3DFMT_B5G6R5_UNORM = 112,
+ WINED3DFMT_B5G5R5A1_UNORM = 113,
+ WINED3DFMT_B8G8R8A8_UNORM = 114,
+ WINED3DFMT_B8G8R8X8_UNORM = 115,
+ WINED3DFMT_UYVY = (((ULONG)(unsigned char)'U' | ((ULONG)(unsigned char)'Y' << 8)) | ((ULONG)(unsigned char)'V' << 16)) | ((ULONG)(unsigned char)'Y' << 24),
+ WINED3DFMT_YUY2 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'U' << 8)) | ((ULONG)(unsigned char)'Y' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_YV12 = (((ULONG)(unsigned char)'Y' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'1' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_DXT1 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+ WINED3DFMT_DXT2 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_DXT3 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'3' << 24),
+ WINED3DFMT_DXT4 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'4' << 24),
+ WINED3DFMT_DXT5 = (((ULONG)(unsigned char)'D' | ((ULONG)(unsigned char)'X' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'5' << 24),
+ WINED3DFMT_MULTI2_ARGB8 = (((ULONG)(unsigned char)'M' | ((ULONG)(unsigned char)'E' << 8)) | ((ULONG)(unsigned char)'T' << 16)) | ((ULONG)(unsigned char)'1' << 24),
+ WINED3DFMT_G8R8_G8B8 = (((ULONG)(unsigned char)'G' | ((ULONG)(unsigned char)'R' << 8)) | ((ULONG)(unsigned char)'G' << 16)) | ((ULONG)(unsigned char)'B' << 24),
+ WINED3DFMT_R8G8_B8G8 = (((ULONG)(unsigned char)'R' | ((ULONG)(unsigned char)'G' << 8)) | ((ULONG)(unsigned char)'B' << 16)) | ((ULONG)(unsigned char)'G' << 24),
+ WINED3DFMT_ATI2N = (((ULONG)(unsigned char)'A' | ((ULONG)(unsigned char)'T' << 8)) | ((ULONG)(unsigned char)'I' << 16)) | ((ULONG)(unsigned char)'2' << 24),
+ WINED3DFMT_INST = (((ULONG)(unsigned char)'I' | ((ULONG)(unsigned char)'N' << 8)) | ((ULONG)(unsigned char)'S' << 16)) | ((ULONG)(unsigned char)'T' << 24),
+ WINED3DFMT_NVHU = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'U' << 24),
+ WINED3DFMT_NVHS = (((ULONG)(unsigned char)'N' | ((ULONG)(unsigned char)'V' << 8)) | ((ULONG)(unsigned char)'H' << 16)) | ((ULONG)(unsigned char)'S' << 24),
+ WINED3DFMT_FORCE_DWORD = 0xffffffff
+} WINED3DFORMAT;
+typedef enum _WINED3DRENDERSTATETYPE {
+ WINED3DRS_ANTIALIAS = 2,
+ WINED3DRS_TEXTUREPERSPECTIVE = 4,
+ WINED3DRS_WRAPU = 5,
+ WINED3DRS_WRAPV = 6,
+ WINED3DRS_ZENABLE = 7,
+ WINED3DRS_FILLMODE = 8,
+ WINED3DRS_SHADEMODE = 9,
+ WINED3DRS_LINEPATTERN = 10,
+ WINED3DRS_MONOENABLE = 11,
+ WINED3DRS_ROP2 = 12,
+ WINED3DRS_PLANEMASK = 13,
+ WINED3DRS_ZWRITEENABLE = 14,
+ WINED3DRS_ALPHATESTENABLE = 15,
+ WINED3DRS_LASTPIXEL = 16,
+ WINED3DRS_SRCBLEND = 19,
+ WINED3DRS_DESTBLEND = 20,
+ WINED3DRS_CULLMODE = 22,
+ WINED3DRS_ZFUNC = 23,
+ WINED3DRS_ALPHAREF = 24,
+ WINED3DRS_ALPHAFUNC = 25,
+ WINED3DRS_DITHERENABLE = 26,
+ WINED3DRS_ALPHABLENDENABLE = 27,
+ WINED3DRS_FOGENABLE = 28,
+ WINED3DRS_SPECULARENABLE = 29,
+ WINED3DRS_ZVISIBLE = 30,
+ WINED3DRS_SUBPIXEL = 31,
+ WINED3DRS_SUBPIXELX = 32,
+ WINED3DRS_STIPPLEDALPHA = 33,
+ WINED3DRS_FOGCOLOR = 34,
+ WINED3DRS_FOGTABLEMODE = 35,
+ WINED3DRS_FOGSTART = 36,
+ WINED3DRS_FOGEND = 37,
+ WINED3DRS_FOGDENSITY = 38,
+ WINED3DRS_STIPPLEENABLE = 39,
+ WINED3DRS_EDGEANTIALIAS = 40,
+ WINED3DRS_COLORKEYENABLE = 41,
+ WINED3DRS_MIPMAPLODBIAS = 46,
+ WINED3DRS_ZBIAS = 47,
+ WINED3DRS_RANGEFOGENABLE = 48,
+ WINED3DRS_ANISOTROPY = 49,
+ WINED3DRS_FLUSHBATCH = 50,
+ WINED3DRS_TRANSLUCENTSORTINDEPENDENT = 51,
+ WINED3DRS_STENCILENABLE = 52,
+ WINED3DRS_STENCILFAIL = 53,
+ WINED3DRS_STENCILZFAIL = 54,
+ WINED3DRS_STENCILPASS = 55,
+ WINED3DRS_STENCILFUNC = 56,
+ WINED3DRS_STENCILREF = 57,
+ WINED3DRS_STENCILMASK = 58,
+ WINED3DRS_STENCILWRITEMASK = 59,
+ WINED3DRS_TEXTUREFACTOR = 60,
+ WINED3DRS_WRAP0 = 128,
+ WINED3DRS_WRAP1 = 129,
+ WINED3DRS_WRAP2 = 130,
+ WINED3DRS_WRAP3 = 131,
+ WINED3DRS_WRAP4 = 132,
+ WINED3DRS_WRAP5 = 133,
+ WINED3DRS_WRAP6 = 134,
+ WINED3DRS_WRAP7 = 135,
+ WINED3DRS_CLIPPING = 136,
+ WINED3DRS_LIGHTING = 137,
+ WINED3DRS_EXTENTS = 138,
+ WINED3DRS_AMBIENT = 139,
+ WINED3DRS_FOGVERTEXMODE = 140,
+ WINED3DRS_COLORVERTEX = 141,
+ WINED3DRS_LOCALVIEWER = 142,
+ WINED3DRS_NORMALIZENORMALS = 143,
+ WINED3DRS_COLORKEYBLENDENABLE = 144,
+ WINED3DRS_DIFFUSEMATERIALSOURCE = 145,
+ WINED3DRS_SPECULARMATERIALSOURCE = 146,
+ WINED3DRS_AMBIENTMATERIALSOURCE = 147,
+ WINED3DRS_EMISSIVEMATERIALSOURCE = 148,
+ WINED3DRS_VERTEXBLEND = 151,
+ WINED3DRS_CLIPPLANEENABLE = 152,
+ WINED3DRS_SOFTWAREVERTEXPROCESSING = 153,
+ WINED3DRS_POINTSIZE = 154,
+ WINED3DRS_POINTSIZE_MIN = 155,
+ WINED3DRS_POINTSPRITEENABLE = 156,
+ WINED3DRS_POINTSCALEENABLE = 157,
+ WINED3DRS_POINTSCALE_A = 158,
+ WINED3DRS_POINTSCALE_B = 159,
+ WINED3DRS_POINTSCALE_C = 160,
+ WINED3DRS_MULTISAMPLEANTIALIAS = 161,
+ WINED3DRS_MULTISAMPLEMASK = 162,
+ WINED3DRS_PATCHEDGESTYLE = 163,
+ WINED3DRS_PATCHSEGMENTS = 164,
+ WINED3DRS_DEBUGMONITORTOKEN = 165,
+ WINED3DRS_POINTSIZE_MAX = 166,
+ WINED3DRS_INDEXEDVERTEXBLENDENABLE = 167,
+ WINED3DRS_COLORWRITEENABLE = 168,
+ WINED3DRS_TWEENFACTOR = 170,
+ WINED3DRS_BLENDOP = 171,
+ WINED3DRS_POSITIONDEGREE = 172,
+ WINED3DRS_NORMALDEGREE = 173,
+ WINED3DRS_SCISSORTESTENABLE = 174,
+ WINED3DRS_SLOPESCALEDEPTHBIAS = 175,
+ WINED3DRS_ANTIALIASEDLINEENABLE = 176,
+ WINED3DRS_MINTESSELLATIONLEVEL = 178,
+ WINED3DRS_MAXTESSELLATIONLEVEL = 179,
+ WINED3DRS_ADAPTIVETESS_X = 180,
+ WINED3DRS_ADAPTIVETESS_Y = 181,
+ WINED3DRS_ADAPTIVETESS_Z = 182,
+ WINED3DRS_ADAPTIVETESS_W = 183,
+ WINED3DRS_ENABLEADAPTIVETESSELLATION = 184,
+ WINED3DRS_TWOSIDEDSTENCILMODE = 185,
+ WINED3DRS_CCW_STENCILFAIL = 186,
+ WINED3DRS_CCW_STENCILZFAIL = 187,
+ WINED3DRS_CCW_STENCILPASS = 188,
+ WINED3DRS_CCW_STENCILFUNC = 189,
+ WINED3DRS_COLORWRITEENABLE1 = 190,
+ WINED3DRS_COLORWRITEENABLE2 = 191,
+ WINED3DRS_COLORWRITEENABLE3 = 192,
+ WINED3DRS_BLENDFACTOR = 193,
+ WINED3DRS_SRGBWRITEENABLE = 194,
+ WINED3DRS_DEPTHBIAS = 195,
+ WINED3DRS_WRAP8 = 198,
+ WINED3DRS_WRAP9 = 199,
+ WINED3DRS_WRAP10 = 200,
+ WINED3DRS_WRAP11 = 201,
+ WINED3DRS_WRAP12 = 202,
+ WINED3DRS_WRAP13 = 203,
+ WINED3DRS_WRAP14 = 204,
+ WINED3DRS_WRAP15 = 205,
+ WINED3DRS_SEPARATEALPHABLENDENABLE = 206,
+ WINED3DRS_SRCBLENDALPHA = 207,
+ WINED3DRS_DESTBLENDALPHA = 208,
+ WINED3DRS_BLENDOPALPHA = 209,
+ WINED3DRS_FORCE_DWORD = 0x7fffffff
+} WINED3DRENDERSTATETYPE;
+#define WINEHIGHEST_RENDER_STATE (WINED3DRS_BLENDOPALPHA)
+
+typedef enum _WINED3DBLEND {
+ WINED3DBLEND_ZERO = 1,
+ WINED3DBLEND_ONE = 2,
+ WINED3DBLEND_SRCCOLOR = 3,
+ WINED3DBLEND_INVSRCCOLOR = 4,
+ WINED3DBLEND_SRCALPHA = 5,
+ WINED3DBLEND_INVSRCALPHA = 6,
+ WINED3DBLEND_DESTALPHA = 7,
+ WINED3DBLEND_INVDESTALPHA = 8,
+ WINED3DBLEND_DESTCOLOR = 9,
+ WINED3DBLEND_INVDESTCOLOR = 10,
+ WINED3DBLEND_SRCALPHASAT = 11,
+ WINED3DBLEND_BOTHSRCALPHA = 12,
+ WINED3DBLEND_BOTHINVSRCALPHA = 13,
+ WINED3DBLEND_BLENDFACTOR = 14,
+ WINED3DBLEND_INVBLENDFACTOR = 15,
+ WINED3DBLEND_FORCE_DWORD = 0x7fffffff
+} WINED3DBLEND;
+typedef enum _WINED3DBLENDOP {
+ WINED3DBLENDOP_ADD = 1,
+ WINED3DBLENDOP_SUBTRACT = 2,
+ WINED3DBLENDOP_REVSUBTRACT = 3,
+ WINED3DBLENDOP_MIN = 4,
+ WINED3DBLENDOP_MAX = 5,
+ WINED3DBLENDOP_FORCE_DWORD = 0x7fffffff
+} WINED3DBLENDOP;
+typedef enum _WINED3DVERTEXBLENDFLAGS {
+ WINED3DVBF_DISABLE = 0,
+ WINED3DVBF_1WEIGHTS = 1,
+ WINED3DVBF_2WEIGHTS = 2,
+ WINED3DVBF_3WEIGHTS = 3,
+ WINED3DVBF_TWEENING = 255,
+ WINED3DVBF_0WEIGHTS = 256
+} WINED3DVERTEXBLENDFLAGS;
+typedef enum _WINED3DCMPFUNC {
+ WINED3DCMP_NEVER = 1,
+ WINED3DCMP_LESS = 2,
+ WINED3DCMP_EQUAL = 3,
+ WINED3DCMP_LESSEQUAL = 4,
+ WINED3DCMP_GREATER = 5,
+ WINED3DCMP_NOTEQUAL = 6,
+ WINED3DCMP_GREATEREQUAL = 7,
+ WINED3DCMP_ALWAYS = 8,
+ WINED3DCMP_FORCE_DWORD = 0x7fffffff
+} WINED3DCMPFUNC;
+typedef enum _WINED3DZBUFFERTYPE {
+ WINED3DZB_FALSE = 0,
+ WINED3DZB_TRUE = 1,
+ WINED3DZB_USEW = 2,
+ WINED3DZB_FORCE_DWORD = 0x7fffffff
+} WINED3DZBUFFERTYPE;
+typedef enum _WINED3DFOGMODE {
+ WINED3DFOG_NONE = 0,
+ WINED3DFOG_EXP = 1,
+ WINED3DFOG_EXP2 = 2,
+ WINED3DFOG_LINEAR = 3,
+ WINED3DFOG_FORCE_DWORD = 0x7fffffff
+} WINED3DFOGMODE;
+typedef enum _WINED3DSHADEMODE {
+ WINED3DSHADE_FLAT = 1,
+ WINED3DSHADE_GOURAUD = 2,
+ WINED3DSHADE_PHONG = 3,
+ WINED3DSHADE_FORCE_DWORD = 0x7fffffff
+} WINED3DSHADEMODE;
+typedef enum _WINED3DFILLMODE {
+ WINED3DFILL_POINT = 1,
+ WINED3DFILL_WIREFRAME = 2,
+ WINED3DFILL_SOLID = 3,
+ WINED3DFILL_FORCE_DWORD = 0x7fffffff
+} WINED3DFILLMODE;
+typedef enum _WINED3DCULL {
+ WINED3DCULL_NONE = 1,
+ WINED3DCULL_CW = 2,
+ WINED3DCULL_CCW = 3,
+ WINED3DCULL_FORCE_DWORD = 0x7fffffff
+} WINED3DCULL;
+typedef enum _WINED3DSTENCILOP {
+ WINED3DSTENCILOP_KEEP = 1,
+ WINED3DSTENCILOP_ZERO = 2,
+ WINED3DSTENCILOP_REPLACE = 3,
+ WINED3DSTENCILOP_INCRSAT = 4,
+ WINED3DSTENCILOP_DECRSAT = 5,
+ WINED3DSTENCILOP_INVERT = 6,
+ WINED3DSTENCILOP_INCR = 7,
+ WINED3DSTENCILOP_DECR = 8,
+ WINED3DSTENCILOP_FORCE_DWORD = 0x7fffffff
+} WINED3DSTENCILOP;
+typedef enum _WINED3DMATERIALCOLORSOURCE {
+ WINED3DMCS_MATERIAL = 0,
+ WINED3DMCS_COLOR1 = 1,
+ WINED3DMCS_COLOR2 = 2,
+ WINED3DMCS_FORCE_DWORD = 0x7fffffff
+} WINED3DMATERIALCOLORSOURCE;
+typedef enum _WINED3DPATCHEDGESTYLE {
+ WINED3DPATCHEDGE_DISCRETE = 0,
+ WINED3DPATCHEDGE_CONTINUOUS = 1,
+ WINED3DPATCHEDGE_FORCE_DWORD = 0x7fffffff
+} WINED3DPATCHEDGESTYLE;
+typedef enum _WINED3DBACKBUFFER_TYPE {
+ WINED3DBACKBUFFER_TYPE_MONO = 0,
+ WINED3DBACKBUFFER_TYPE_LEFT = 1,
+ WINED3DBACKBUFFER_TYPE_RIGHT = 2,
+ WINED3DBACKBUFFER_TYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DBACKBUFFER_TYPE;
+typedef enum _WINED3DSWAPEFFECT {
+ WINED3DSWAPEFFECT_DISCARD = 1,
+ WINED3DSWAPEFFECT_FLIP = 2,
+ WINED3DSWAPEFFECT_COPY = 3,
+ WINED3DSWAPEFFECT_COPY_VSYNC = 4,
+ WINED3DSWAPEFFECT_FORCE_DWORD = 0xffffffff
+} WINED3DSWAPEFFECT;
+typedef enum _WINED3DSAMPLERSTATETYPE {
+ WINED3DSAMP_ADDRESSU = 1,
+ WINED3DSAMP_ADDRESSV = 2,
+ WINED3DSAMP_ADDRESSW = 3,
+ WINED3DSAMP_BORDERCOLOR = 4,
+ WINED3DSAMP_MAGFILTER = 5,
+ WINED3DSAMP_MINFILTER = 6,
+ WINED3DSAMP_MIPFILTER = 7,
+ WINED3DSAMP_MIPMAPLODBIAS = 8,
+ WINED3DSAMP_MAXMIPLEVEL = 9,
+ WINED3DSAMP_MAXANISOTROPY = 10,
+ WINED3DSAMP_SRGBTEXTURE = 11,
+ WINED3DSAMP_ELEMENTINDEX = 12,
+ WINED3DSAMP_DMAPOFFSET = 13,
+ WINED3DSAMP_FORCE_DWORD = 0x7fffffff
+} WINED3DSAMPLERSTATETYPE;
+#define WINED3D_HIGHEST_SAMPLER_STATE (WINED3DSAMP_DMAPOFFSET)
+
+typedef enum _WINED3DMULTISAMPLE_TYPE {
+ WINED3DMULTISAMPLE_NONE = 0,
+ WINED3DMULTISAMPLE_NONMASKABLE = 1,
+ WINED3DMULTISAMPLE_2_SAMPLES = 2,
+ WINED3DMULTISAMPLE_3_SAMPLES = 3,
+ WINED3DMULTISAMPLE_4_SAMPLES = 4,
+ WINED3DMULTISAMPLE_5_SAMPLES = 5,
+ WINED3DMULTISAMPLE_6_SAMPLES = 6,
+ WINED3DMULTISAMPLE_7_SAMPLES = 7,
+ WINED3DMULTISAMPLE_8_SAMPLES = 8,
+ WINED3DMULTISAMPLE_9_SAMPLES = 9,
+ WINED3DMULTISAMPLE_10_SAMPLES = 10,
+ WINED3DMULTISAMPLE_11_SAMPLES = 11,
+ WINED3DMULTISAMPLE_12_SAMPLES = 12,
+ WINED3DMULTISAMPLE_13_SAMPLES = 13,
+ WINED3DMULTISAMPLE_14_SAMPLES = 14,
+ WINED3DMULTISAMPLE_15_SAMPLES = 15,
+ WINED3DMULTISAMPLE_16_SAMPLES = 16,
+ WINED3DMULTISAMPLE_FORCE_DWORD = 0xffffffff
+} WINED3DMULTISAMPLE_TYPE;
+typedef enum _WINED3DTEXTURESTAGESTATETYPE {
+ WINED3DTSS_COLOROP = 0,
+ WINED3DTSS_COLORARG1 = 1,
+ WINED3DTSS_COLORARG2 = 2,
+ WINED3DTSS_ALPHAOP = 3,
+ WINED3DTSS_ALPHAARG1 = 4,
+ WINED3DTSS_ALPHAARG2 = 5,
+ WINED3DTSS_BUMPENVMAT00 = 6,
+ WINED3DTSS_BUMPENVMAT01 = 7,
+ WINED3DTSS_BUMPENVMAT10 = 8,
+ WINED3DTSS_BUMPENVMAT11 = 9,
+ WINED3DTSS_TEXCOORDINDEX = 10,
+ WINED3DTSS_BUMPENVLSCALE = 11,
+ WINED3DTSS_BUMPENVLOFFSET = 12,
+ WINED3DTSS_TEXTURETRANSFORMFLAGS = 13,
+ WINED3DTSS_COLORARG0 = 14,
+ WINED3DTSS_ALPHAARG0 = 15,
+ WINED3DTSS_RESULTARG = 16,
+ WINED3DTSS_CONSTANT = 17,
+ WINED3DTSS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURESTAGESTATETYPE;
+#define WINED3D_HIGHEST_TEXTURE_STATE (WINED3DTSS_CONSTANT)
+
+typedef enum _WINED3DTEXTURETRANSFORMFLAGS {
+ WINED3DTTFF_DISABLE = 0,
+ WINED3DTTFF_COUNT1 = 1,
+ WINED3DTTFF_COUNT2 = 2,
+ WINED3DTTFF_COUNT3 = 3,
+ WINED3DTTFF_COUNT4 = 4,
+ WINED3DTTFF_PROJECTED = 256,
+ WINED3DTTFF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTURETRANSFORMFLAGS;
+typedef enum _WINED3DTEXTUREOP {
+ WINED3DTOP_DISABLE = 1,
+ WINED3DTOP_SELECTARG1 = 2,
+ WINED3DTOP_SELECTARG2 = 3,
+ WINED3DTOP_MODULATE = 4,
+ WINED3DTOP_MODULATE2X = 5,
+ WINED3DTOP_MODULATE4X = 6,
+ WINED3DTOP_ADD = 7,
+ WINED3DTOP_ADDSIGNED = 8,
+ WINED3DTOP_ADDSIGNED2X = 9,
+ WINED3DTOP_SUBTRACT = 10,
+ WINED3DTOP_ADDSMOOTH = 11,
+ WINED3DTOP_BLENDDIFFUSEALPHA = 12,
+ WINED3DTOP_BLENDTEXTUREALPHA = 13,
+ WINED3DTOP_BLENDFACTORALPHA = 14,
+ WINED3DTOP_BLENDTEXTUREALPHAPM = 15,
+ WINED3DTOP_BLENDCURRENTALPHA = 16,
+ WINED3DTOP_PREMODULATE = 17,
+ WINED3DTOP_MODULATEALPHA_ADDCOLOR = 18,
+ WINED3DTOP_MODULATECOLOR_ADDALPHA = 19,
+ WINED3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,
+ WINED3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,
+ WINED3DTOP_BUMPENVMAP = 22,
+ WINED3DTOP_BUMPENVMAPLUMINANCE = 23,
+ WINED3DTOP_DOTPRODUCT3 = 24,
+ WINED3DTOP_MULTIPLYADD = 25,
+ WINED3DTOP_LERP = 26,
+ WINED3DTOP_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREOP;
+typedef enum _WINED3DTEXTUREADDRESS {
+ WINED3DTADDRESS_WRAP = 1,
+ WINED3DTADDRESS_MIRROR = 2,
+ WINED3DTADDRESS_CLAMP = 3,
+ WINED3DTADDRESS_BORDER = 4,
+ WINED3DTADDRESS_MIRRORONCE = 5,
+ WINED3DTADDRESS_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREADDRESS;
+typedef enum _WINED3DTRANSFORMSTATETYPE {
+ WINED3DTS_VIEW = 2,
+ WINED3DTS_PROJECTION = 3,
+ WINED3DTS_TEXTURE0 = 16,
+ WINED3DTS_TEXTURE1 = 17,
+ WINED3DTS_TEXTURE2 = 18,
+ WINED3DTS_TEXTURE3 = 19,
+ WINED3DTS_TEXTURE4 = 20,
+ WINED3DTS_TEXTURE5 = 21,
+ WINED3DTS_TEXTURE6 = 22,
+ WINED3DTS_TEXTURE7 = 23,
+ WINED3DTS_WORLD = 256,
+ WINED3DTS_WORLD1 = 257,
+ WINED3DTS_WORLD2 = 258,
+ WINED3DTS_WORLD3 = 259,
+ WINED3DTS_FORCE_DWORD = 0x7fffffff
+} WINED3DTRANSFORMSTATETYPE;
+#define WINED3DTS_WORLDMATRIX(index) (WINED3DTRANSFORMSTATETYPE)(index + 256)
+typedef enum _WINED3DBASISTYPE {
+ WINED3DBASIS_BEZIER = 0,
+ WINED3DBASIS_BSPLINE = 1,
+ WINED3DBASIS_INTERPOLATE = 2,
+ WINED3DBASIS_FORCE_DWORD = 0x7fffffff
+} WINED3DBASISTYPE;
+typedef enum _WINED3DCUBEMAP_FACES {
+ WINED3DCUBEMAP_FACE_POSITIVE_X = 0,
+ WINED3DCUBEMAP_FACE_NEGATIVE_X = 1,
+ WINED3DCUBEMAP_FACE_POSITIVE_Y = 2,
+ WINED3DCUBEMAP_FACE_NEGATIVE_Y = 3,
+ WINED3DCUBEMAP_FACE_POSITIVE_Z = 4,
+ WINED3DCUBEMAP_FACE_NEGATIVE_Z = 5,
+ WINED3DCUBEMAP_FACE_FORCE_DWORD = 0xffffffff
+} WINED3DCUBEMAP_FACES;
+typedef enum _WINED3DTEXTUREFILTERTYPE {
+ WINED3DTEXF_NONE = 0,
+ WINED3DTEXF_POINT = 1,
+ WINED3DTEXF_LINEAR = 2,
+ WINED3DTEXF_ANISOTROPIC = 3,
+ WINED3DTEXF_FLATCUBIC = 4,
+ WINED3DTEXF_GAUSSIANCUBIC = 5,
+ WINED3DTEXF_PYRAMIDALQUAD = 6,
+ WINED3DTEXF_GAUSSIANQUAD = 7,
+ WINED3DTEXF_FORCE_DWORD = 0x7fffffff
+} WINED3DTEXTUREFILTERTYPE;
+typedef enum _WINED3DRESOURCETYPE {
+ WINED3DRTYPE_SURFACE = 1,
+ WINED3DRTYPE_VOLUME = 2,
+ WINED3DRTYPE_TEXTURE = 3,
+ WINED3DRTYPE_VOLUMETEXTURE = 4,
+ WINED3DRTYPE_CUBETEXTURE = 5,
+ WINED3DRTYPE_BUFFER = 6,
+ WINED3DRTYPE_FORCE_DWORD = 0x7fffffff
+} WINED3DRESOURCETYPE;
+#define WINED3DRTYPECOUNT (WINED3DRTYPE_BUFFER + 1)
+
+typedef enum _WINED3DPOOL {
+ WINED3DPOOL_DEFAULT = 0,
+ WINED3DPOOL_MANAGED = 1,
+ WINED3DPOOL_SYSTEMMEM = 2,
+ WINED3DPOOL_SCRATCH = 3,
+ WINED3DPOOL_FORCE_DWORD = 0x7fffffff
+} WINED3DPOOL;
+typedef enum _WINED3DQUERYTYPE {
+ WINED3DQUERYTYPE_VCACHE = 4,
+ WINED3DQUERYTYPE_RESOURCEMANAGER = 5,
+ WINED3DQUERYTYPE_VERTEXSTATS = 6,
+ WINED3DQUERYTYPE_EVENT = 8,
+ WINED3DQUERYTYPE_OCCLUSION = 9,
+ WINED3DQUERYTYPE_TIMESTAMP = 10,
+ WINED3DQUERYTYPE_TIMESTAMPDISJOINT = 11,
+ WINED3DQUERYTYPE_TIMESTAMPFREQ = 12,
+ WINED3DQUERYTYPE_PIPELINETIMINGS = 13,
+ WINED3DQUERYTYPE_INTERFACETIMINGS = 14,
+ WINED3DQUERYTYPE_VERTEXTIMINGS = 15,
+ WINED3DQUERYTYPE_PIXELTIMINGS = 16,
+ WINED3DQUERYTYPE_BANDWIDTHTIMINGS = 17,
+ WINED3DQUERYTYPE_CACHEUTILIZATION = 18
+} WINED3DQUERYTYPE;
+#define WINED3DISSUE_BEGIN (1 << 1)
+
+#define WINED3DISSUE_END (1 << 0)
+
+#define WINED3DGETDATA_FLUSH (1 << 0)
+
+typedef enum _WINED3DSTATEBLOCKTYPE {
+ WINED3DSBT_INIT = 0,
+ WINED3DSBT_ALL = 1,
+ WINED3DSBT_PIXELSTATE = 2,
+ WINED3DSBT_VERTEXSTATE = 3,
+ WINED3DSBT_RECORDED = 4,
+ WINED3DSBT_FORCE_DWORD = 0xffffffff
+} WINED3DSTATEBLOCKTYPE;
+typedef enum _WINED3DDECLMETHOD {
+ WINED3DDECLMETHOD_DEFAULT = 0,
+ WINED3DDECLMETHOD_PARTIALU = 1,
+ WINED3DDECLMETHOD_PARTIALV = 2,
+ WINED3DDECLMETHOD_CROSSUV = 3,
+ WINED3DDECLMETHOD_UV = 4,
+ WINED3DDECLMETHOD_LOOKUP = 5,
+ WINED3DDECLMETHOD_LOOKUPPRESAMPLED = 6
+} WINED3DDECLMETHOD;
+typedef enum _WINED3DDECLUSAGE {
+ WINED3DDECLUSAGE_POSITION = 0,
+ WINED3DDECLUSAGE_BLENDWEIGHT = 1,
+ WINED3DDECLUSAGE_BLENDINDICES = 2,
+ WINED3DDECLUSAGE_NORMAL = 3,
+ WINED3DDECLUSAGE_PSIZE = 4,
+ WINED3DDECLUSAGE_TEXCOORD = 5,
+ WINED3DDECLUSAGE_TANGENT = 6,
+ WINED3DDECLUSAGE_BINORMAL = 7,
+ WINED3DDECLUSAGE_TESSFACTOR = 8,
+ WINED3DDECLUSAGE_POSITIONT = 9,
+ WINED3DDECLUSAGE_COLOR = 10,
+ WINED3DDECLUSAGE_FOG = 11,
+ WINED3DDECLUSAGE_DEPTH = 12,
+ WINED3DDECLUSAGE_SAMPLE = 13
+} WINED3DDECLUSAGE;
+typedef enum _WINED3DSURFTYPE {
+ SURFACE_UNKNOWN = 0,
+ SURFACE_OPENGL = 1,
+ SURFACE_GDI = 2
+} WINED3DSURFTYPE;
+enum wined3d_sysval_semantic {
+ WINED3D_SV_DEPTH = 0xffffffff,
+ WINED3D_SV_TARGET0 = 0,
+ WINED3D_SV_TARGET1 = 1,
+ WINED3D_SV_TARGET2 = 2,
+ WINED3D_SV_TARGET3 = 3,
+ WINED3D_SV_TARGET4 = 4,
+ WINED3D_SV_TARGET5 = 5,
+ WINED3D_SV_TARGET6 = 6,
+ WINED3D_SV_TARGET7 = 7
+};
+
+#define WINED3DCOLORWRITEENABLE_RED (1 << 0)
+
+#define WINED3DCOLORWRITEENABLE_GREEN (1 << 1)
+
+#define WINED3DCOLORWRITEENABLE_BLUE (1 << 2)
+
+#define WINED3DCOLORWRITEENABLE_ALPHA (1 << 3)
+
+#define WINED3DADAPTER_DEFAULT (0)
+
+#define WINED3DENUM_NO_WHQL_LEVEL (2)
+
+#define WINED3DPRESENT_BACK_BUFFER_MAX (3)
+
+#define WINED3DTSS_TCI_PASSTHRU (0x0)
+
+#define WINED3DTSS_TCI_CAMERASPACENORMAL (0x10000)
+
+#define WINED3DTSS_TCI_CAMERASPACEPOSITION (0x20000)
+
+#define WINED3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR (0x30000)
+
+#define WINED3DTSS_TCI_SPHEREMAP (0x40000)
+
+#define WINED3DTA_SELECTMASK (0xf)
+
+#define WINED3DTA_DIFFUSE (0x0)
+
+#define WINED3DTA_CURRENT (0x1)
+
+#define WINED3DTA_TEXTURE (0x2)
+
+#define WINED3DTA_TFACTOR (0x3)
+
+#define WINED3DTA_SPECULAR (0x4)
+
+#define WINED3DTA_TEMP (0x5)
+
+#define WINED3DTA_CONSTANT (0x6)
+
+#define WINED3DTA_COMPLEMENT (0x10)
+
+#define WINED3DTA_ALPHAREPLICATE (0x20)
+
+#define WINED3DPRESENTFLAG_LOCKABLE_BACKBUFFER (0x1)
+
+#define WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL (0x2)
+
+#define WINED3DPRESENTFLAG_DEVICECLIP (0x4)
+
+#define WINED3DPRESENTFLAG_VIDEO (0x10)
+
+#define WINED3DPRESENTFLAG_NOAUTOROTATE (0x20)
+
+#define WINED3DPRESENTFLAG_UNPRUNEDMODE (0x40)
+
+#define WINED3DDP_MAXTEXCOORD (8)
+
+#define WINED3DUSAGE_RENDERTARGET (0x1)
+
+#define WINED3DUSAGE_DEPTHSTENCIL (0x2)
+
+#define WINED3DUSAGE_WRITEONLY (0x8)
+
+#define WINED3DUSAGE_SOFTWAREPROCESSING (0x10)
+
+#define WINED3DUSAGE_DONOTCLIP (0x20)
+
+#define WINED3DUSAGE_POINTS (0x40)
+
+#define WINED3DUSAGE_RTPATCHES (0x80)
+
+#define WINED3DUSAGE_NPATCHES (0x100)
+
+#define WINED3DUSAGE_DYNAMIC (0x200)
+
+#define WINED3DUSAGE_AUTOGENMIPMAP (0x400)
+
+#define WINED3DUSAGE_DMAP (0x4000)
+
+#define WINED3DUSAGE_MASK (0x4fff)
+
+#define WINED3DUSAGE_STATICDECL (0x40000000)
+
+#define WINED3DUSAGE_OVERLAY (0x80000000)
+
+#define WINED3DUSAGE_QUERY_LEGACYBUMPMAP (0x8000)
+
+#define WINED3DUSAGE_QUERY_FILTER (0x20000)
+
+#define WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x80000)
+
+#define WINED3DUSAGE_QUERY_SRGBREAD (0x10000)
+
+#define WINED3DUSAGE_QUERY_SRGBWRITE (0x40000)
+
+#define WINED3DUSAGE_QUERY_VERTEXTEXTURE (0x100000)
+
+#define WINED3DUSAGE_QUERY_WRAPANDMIP (0x200000)
+
+#define WINED3DUSAGE_QUERY_MASK (0x3f8000)
+
+#define WINED3DLOCK_READONLY (0x10)
+
+#define WINED3DLOCK_NOSYSLOCK (0x800)
+
+#define WINED3DLOCK_NOOVERWRITE (0x1000)
+
+#define WINED3DLOCK_DISCARD (0x2000)
+
+#define WINED3DLOCK_DONOTWAIT (0x4000)
+
+#define WINED3DLOCK_NO_DIRTY_UPDATE (0x8000)
+
+#define WINED3DPRESENT_RATE_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_DEFAULT (0x0)
+
+#define WINED3DPRESENT_INTERVAL_ONE (0x1)
+
+#define WINED3DPRESENT_INTERVAL_TWO (0x2)
+
+#define WINED3DPRESENT_INTERVAL_THREE (0x4)
+
+#define WINED3DPRESENT_INTERVAL_FOUR (0x8)
+
+#define WINED3DPRESENT_INTERVAL_IMMEDIATE (0x80000000)
+
+#define WINED3DMAXUSERCLIPPLANES (32)
+
+#define WINED3DCLIPPLANE0 (1 << 0)
+
+#define WINED3DCLIPPLANE1 (1 << 1)
+
+#define WINED3DCLIPPLANE2 (1 << 2)
+
+#define WINED3DCLIPPLANE3 (1 << 3)
+
+#define WINED3DCLIPPLANE4 (1 << 4)
+
+#define WINED3DCLIPPLANE5 (1 << 5)
+
+#define WINED3DFVF_RESERVED0 (0x1)
+
+#define WINED3DFVF_POSITION_MASK (0x400e)
+
+#define WINED3DFVF_XYZ (0x2)
+
+#define WINED3DFVF_XYZRHW (0x4)
+
+#define WINED3DFVF_XYZB1 (0x6)
+
+#define WINED3DFVF_XYZB2 (0x8)
+
+#define WINED3DFVF_XYZB3 (0xa)
+
+#define WINED3DFVF_XYZB4 (0xc)
+
+#define WINED3DFVF_XYZB5 (0xe)
+
+#define WINED3DFVF_XYZW (0x4002)
+
+#define WINED3DFVF_NORMAL (0x10)
+
+#define WINED3DFVF_PSIZE (0x20)
+
+#define WINED3DFVF_DIFFUSE (0x40)
+
+#define WINED3DFVF_SPECULAR (0x80)
+
+#define WINED3DFVF_TEXCOUNT_MASK (0xf00)
+
+#define WINED3DFVF_TEXCOUNT_SHIFT (8)
+
+#define WINED3DFVF_TEX0 (0x0)
+
+#define WINED3DFVF_TEX1 (0x100)
+
+#define WINED3DFVF_TEX2 (0x200)
+
+#define WINED3DFVF_TEX3 (0x300)
+
+#define WINED3DFVF_TEX4 (0x400)
+
+#define WINED3DFVF_TEX5 (0x500)
+
+#define WINED3DFVF_TEX6 (0x600)
+
+#define WINED3DFVF_TEX7 (0x700)
+
+#define WINED3DFVF_TEX8 (0x800)
+
+#define WINED3DFVF_LASTBETA_UBYTE4 (0x1000)
+
+#define WINED3DFVF_LASTBETA_D3DCOLOR (0x8000)
+
+#define WINED3DFVF_RESERVED2 (0x6000)
+
+#define WINED3DFVF_TEXTUREFORMAT1 (3)
+
+#define WINED3DFVF_TEXTUREFORMAT2 (0)
+
+#define WINED3DFVF_TEXTUREFORMAT3 (1)
+
+#define WINED3DFVF_TEXTUREFORMAT4 (2)
+
+#define WINED3DFVF_TEXCOORDSIZE1(CoordIndex) (WINED3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE2(CoordIndex) (WINED3DFVF_TEXTUREFORMAT2)
+#define WINED3DFVF_TEXCOORDSIZE3(CoordIndex) (WINED3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))
+#define WINED3DFVF_TEXCOORDSIZE4(CoordIndex) (WINED3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))
+#define WINED3DCLEAR_TARGET (0x1)
+
+#define WINED3DCLEAR_ZBUFFER (0x2)
+
+#define WINED3DCLEAR_STENCIL (0x4)
+
+#define WINED3DSTREAMSOURCE_INDEXEDDATA (1 << 30)
+
+#define WINED3DSTREAMSOURCE_INSTANCEDATA (2 << 30)
+
+#define WINED3DSPD_IUNKNOWN (0x1)
+
+#define WINED3DCREATE_FPU_PRESERVE (0x2)
+
+#define WINED3DCREATE_PUREDEVICE (0x10)
+
+#define WINED3DCREATE_SOFTWARE_VERTEXPROCESSING (0x20)
+
+#define WINED3DCREATE_HARDWARE_VERTEXPROCESSING (0x40)
+
+#define WINED3DCREATE_MIXED_VERTEXPROCESSING (0x80)
+
+#define WINED3DCREATE_DISABLE_DRIVER_MANAGEMENT (0x100)
+
+#define WINED3DCREATE_ADAPTERGROUP_DEVICE (0x200)
+
+#define WINED3DDMAPSAMPLER (0x100)
+
+#define WINED3DVERTEXTEXTURESAMPLER0 (WINED3DDMAPSAMPLER + 1)
+
+#define WINED3DVERTEXTEXTURESAMPLER1 (WINED3DDMAPSAMPLER + 2)
+
+#define WINED3DVERTEXTEXTURESAMPLER2 (WINED3DDMAPSAMPLER + 3)
+
+#define WINED3DVERTEXTEXTURESAMPLER3 (WINED3DDMAPSAMPLER + 4)
+
+#define WINED3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD (0x20)
+
+#define WINED3DCAPS3_LINEAR_TO_SRGB_PRESENTATION (0x80)
+
+#define WINED3DCAPS3_COPY_TO_VIDMEM (0x100)
+
+#define WINED3DCAPS3_COPY_TO_SYSTEMMEM (0x200)
+
+#define WINED3DCAPS3_RESERVED (0x8000001f)
+
+#define WINED3DDEVCAPS2_STREAMOFFSET (0x1)
+
+#define WINED3DDEVCAPS2_DMAPNPATCH (0x2)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSRTPATCH (0x4)
+
+#define WINED3DDEVCAPS2_ADAPTIVETESSNPATCH (0x8)
+
+#define WINED3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (0x10)
+
+#define WINED3DDEVCAPS2_PRESAMPLEDDMAPNPATCH (0x20)
+
+#define WINED3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET (0x40)
+
+#define WINED3DDTCAPS_UBYTE4 (0x1)
+
+#define WINED3DDTCAPS_UBYTE4N (0x2)
+
+#define WINED3DDTCAPS_SHORT2N (0x4)
+
+#define WINED3DDTCAPS_SHORT4N (0x8)
+
+#define WINED3DDTCAPS_USHORT2N (0x10)
+
+#define WINED3DDTCAPS_USHORT4N (0x20)
+
+#define WINED3DDTCAPS_UDEC3 (0x40)
+
+#define WINED3DDTCAPS_DEC3N (0x80)
+
+#define WINED3DDTCAPS_FLOAT16_2 (0x100)
+
+#define WINED3DDTCAPS_FLOAT16_4 (0x200)
+
+#define WINED3DFVFCAPS_TEXCOORDCOUNTMASK (0xffff)
+
+#define WINED3DFVFCAPS_DONOTSTRIPELEMENTS (0x80000)
+
+#define WINED3DFVFCAPS_PSIZE (0x100000)
+
+#define WINED3DLINECAPS_TEXTURE (0x1)
+
+#define WINED3DLINECAPS_ZTEST (0x2)
+
+#define WINED3DLINECAPS_BLEND (0x4)
+
+#define WINED3DLINECAPS_ALPHACMP (0x8)
+
+#define WINED3DLINECAPS_FOG (0x10)
+
+#define WINED3DLINECAPS_ANTIALIAS (0x20)
+
+#define WINED3DMAX30SHADERINSTRUCTIONS (32768)
+
+#define WINED3DMIN30SHADERINSTRUCTIONS (512)
+
+#define WINED3DPBLENDCAPS_ZERO (0x1)
+
+#define WINED3DPBLENDCAPS_ONE (0x2)
+
+#define WINED3DPBLENDCAPS_SRCCOLOR (0x4)
+
+#define WINED3DPBLENDCAPS_INVSRCCOLOR (0x8)
+
+#define WINED3DPBLENDCAPS_SRCALPHA (0x10)
+
+#define WINED3DPBLENDCAPS_INVSRCALPHA (0x20)
+
+#define WINED3DPBLENDCAPS_DESTALPHA (0x40)
+
+#define WINED3DPBLENDCAPS_INVDESTALPHA (0x80)
+
+#define WINED3DPBLENDCAPS_DESTCOLOR (0x100)
+
+#define WINED3DPBLENDCAPS_INVDESTCOLOR (0x200)
+
+#define WINED3DPBLENDCAPS_SRCALPHASAT (0x400)
+
+#define WINED3DPBLENDCAPS_BOTHSRCALPHA (0x800)
+
+#define WINED3DPBLENDCAPS_BOTHINVSRCALPHA (0x1000)
+
+#define WINED3DPBLENDCAPS_BLENDFACTOR (0x2000)
+
+#define WINED3DPCMPCAPS_NEVER (0x1)
+
+#define WINED3DPCMPCAPS_LESS (0x2)
+
+#define WINED3DPCMPCAPS_EQUAL (0x4)
+
+#define WINED3DPCMPCAPS_LESSEQUAL (0x8)
+
+#define WINED3DPCMPCAPS_GREATER (0x10)
+
+#define WINED3DPCMPCAPS_NOTEQUAL (0x20)
+
+#define WINED3DPCMPCAPS_GREATEREQUAL (0x40)
+
+#define WINED3DPCMPCAPS_ALWAYS (0x80)
+
+#define WINED3DPMISCCAPS_MASKZ (0x2)
+
+#define WINED3DPMISCCAPS_LINEPATTERNREP (0x4)
+
+#define WINED3DPMISCCAPS_CULLNONE (0x10)
+
+#define WINED3DPMISCCAPS_CULLCW (0x20)
+
+#define WINED3DPMISCCAPS_CULLCCW (0x40)
+
+#define WINED3DPMISCCAPS_COLORWRITEENABLE (0x80)
+
+#define WINED3DPMISCCAPS_CLIPPLANESCALEDPOINTS (0x100)
+
+#define WINED3DPMISCCAPS_CLIPTLVERTS (0x200)
+
+#define WINED3DPMISCCAPS_TSSARGTEMP (0x400)
+
+#define WINED3DPMISCCAPS_BLENDOP (0x800)
+
+#define WINED3DPMISCCAPS_NULLREFERENCE (0x1000)
+
+#define WINED3DPMISCCAPS_INDEPENDENTWRITEMASKS (0x4000)
+
+#define WINED3DPMISCCAPS_PERSTAGECONSTANT (0x8000)
+
+#define WINED3DPMISCCAPS_FOGANDSPECULARALPHA (0x10000)
+
+#define WINED3DPMISCCAPS_SEPARATEALPHABLEND (0x20000)
+
+#define WINED3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS (0x40000)
+
+#define WINED3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING (0x80000)
+
+#define WINED3DPMISCCAPS_FOGVERTEXCLAMPED (0x100000)
+
+#define WINED3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMTEMPS (32)
+
+#define WINED3DPS20_MIN_NUMTEMPS (12)
+
+#define WINED3DPS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DPS20_MIN_STATICFLOWCONTROLDEPTH (0)
+
+#define WINED3DPS20_MAX_NUMINSTRUCTIONSLOTS (512)
+
+#define WINED3DPS20_MIN_NUMINSTRUCTIONSLOTS (96)
+
+#define WINED3DPS20CAPS_ARBITRARYSWIZZLE (0x1)
+
+#define WINED3DPS20CAPS_GRADIENTINSTRUCTIONS (0x2)
+
+#define WINED3DPS20CAPS_PREDICATION (0x4)
+
+#define WINED3DPS20CAPS_NODEPENDENTREADLIMIT (0x8)
+
+#define WINED3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (0x10)
+
+#define WINED3DPTADDRESSCAPS_WRAP (0x1)
+
+#define WINED3DPTADDRESSCAPS_MIRROR (0x2)
+
+#define WINED3DPTADDRESSCAPS_CLAMP (0x4)
+
+#define WINED3DPTADDRESSCAPS_BORDER (0x8)
+
+#define WINED3DPTADDRESSCAPS_INDEPENDENTUV (0x10)
+
+#define WINED3DPTADDRESSCAPS_MIRRORONCE (0x20)
+
+#define WINED3DSTENCILCAPS_KEEP (0x1)
+
+#define WINED3DSTENCILCAPS_ZERO (0x2)
+
+#define WINED3DSTENCILCAPS_REPLACE (0x4)
+
+#define WINED3DSTENCILCAPS_INCRSAT (0x8)
+
+#define WINED3DSTENCILCAPS_DECRSAT (0x10)
+
+#define WINED3DSTENCILCAPS_INVERT (0x20)
+
+#define WINED3DSTENCILCAPS_INCR (0x40)
+
+#define WINED3DSTENCILCAPS_DECR (0x80)
+
+#define WINED3DSTENCILCAPS_TWOSIDED (0x100)
+
+#define WINED3DTEXOPCAPS_DISABLE (0x1)
+
+#define WINED3DTEXOPCAPS_SELECTARG1 (0x2)
+
+#define WINED3DTEXOPCAPS_SELECTARG2 (0x4)
+
+#define WINED3DTEXOPCAPS_MODULATE (0x8)
+
+#define WINED3DTEXOPCAPS_MODULATE2X (0x10)
+
+#define WINED3DTEXOPCAPS_MODULATE4X (0x20)
+
+#define WINED3DTEXOPCAPS_ADD (0x40)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED (0x80)
+
+#define WINED3DTEXOPCAPS_ADDSIGNED2X (0x100)
+
+#define WINED3DTEXOPCAPS_SUBTRACT (0x200)
+
+#define WINED3DTEXOPCAPS_ADDSMOOTH (0x400)
+
+#define WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA (0x800)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHA (0x1000)
+
+#define WINED3DTEXOPCAPS_BLENDFACTORALPHA (0x2000)
+
+#define WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM (0x4000)
+
+#define WINED3DTEXOPCAPS_BLENDCURRENTALPHA (0x8000)
+
+#define WINED3DTEXOPCAPS_PREMODULATE (0x10000)
+
+#define WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR (0x20000)
+
+#define WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA (0x40000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR (0x80000)
+
+#define WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA (0x100000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAP (0x200000)
+
+#define WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE (0x400000)
+
+#define WINED3DTEXOPCAPS_DOTPRODUCT3 (0x800000)
+
+#define WINED3DTEXOPCAPS_MULTIPLYADD (0x1000000)
+
+#define WINED3DTEXOPCAPS_LERP (0x2000000)
+
+#define WINED3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH (24)
+
+#define WINED3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH (0)
+
+#define WINED3DVS20_MAX_NUMTEMPS (32)
+
+#define WINED3DVS20_MIN_NUMTEMPS (12)
+
+#define WINED3DVS20_MAX_STATICFLOWCONTROLDEPTH (4)
+
+#define WINED3DVS20_MIN_STATICFLOWCONTROLDEPTH (1)
+
+#define WINED3DVS20CAPS_PREDICATION (0x1)
+
+#define WINED3DCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINED3DCAPS2_FULLSCREENGAMMA (0x20000)
+
+#define WINED3DCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINED3DCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINED3DCAPS2_RESERVED (0x2000000)
+
+#define WINED3DCAPS2_CANMANAGERESOURCE (0x10000000)
+
+#define WINED3DCAPS2_DYNAMICTEXTURES (0x20000000)
+
+#define WINED3DCAPS2_CANAUTOGENMIPMAP (0x40000000)
+
+#define WINED3DPRASTERCAPS_DITHER (0x1)
+
+#define WINED3DPRASTERCAPS_ROP2 (0x2)
+
+#define WINED3DPRASTERCAPS_XOR (0x4)
+
+#define WINED3DPRASTERCAPS_PAT (0x8)
+
+#define WINED3DPRASTERCAPS_ZTEST (0x10)
+
+#define WINED3DPRASTERCAPS_SUBPIXEL (0x20)
+
+#define WINED3DPRASTERCAPS_SUBPIXELX (0x40)
+
+#define WINED3DPRASTERCAPS_FOGVERTEX (0x80)
+
+#define WINED3DPRASTERCAPS_FOGTABLE (0x100)
+
+#define WINED3DPRASTERCAPS_STIPPLE (0x200)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTDEPENDENT (0x400)
+
+#define WINED3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT (0x800)
+
+#define WINED3DPRASTERCAPS_ANTIALIASEDGES (0x1000)
+
+#define WINED3DPRASTERCAPS_MIPMAPLODBIAS (0x2000)
+
+#define WINED3DPRASTERCAPS_ZBIAS (0x4000)
+
+#define WINED3DPRASTERCAPS_ZBUFFERLESSHSR (0x8000)
+
+#define WINED3DPRASTERCAPS_FOGRANGE (0x10000)
+
+#define WINED3DPRASTERCAPS_ANISOTROPY (0x20000)
+
+#define WINED3DPRASTERCAPS_WBUFFER (0x40000)
+
+#define WINED3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT (0x80000)
+
+#define WINED3DPRASTERCAPS_WFOG (0x100000)
+
+#define WINED3DPRASTERCAPS_ZFOG (0x200000)
+
+#define WINED3DPRASTERCAPS_COLORPERSPECTIVE (0x400000)
+
+#define WINED3DPRASTERCAPS_SCISSORTEST (0x1000000)
+
+#define WINED3DPRASTERCAPS_SLOPESCALEDEPTHBIAS (0x2000000)
+
+#define WINED3DPRASTERCAPS_DEPTHBIAS (0x4000000)
+
+#define WINED3DPRASTERCAPS_MULTISAMPLE_TOGGLE (0x8000000)
+
+#define WINED3DPSHADECAPS_COLORFLATMONO (0x1)
+
+#define WINED3DPSHADECAPS_COLORFLATRGB (0x2)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDMONO (0x4)
+
+#define WINED3DPSHADECAPS_COLORGOURAUDRGB (0x8)
+
+#define WINED3DPSHADECAPS_COLORPHONGMONO (0x10)
+
+#define WINED3DPSHADECAPS_COLORPHONGRGB (0x20)
+
+#define WINED3DPSHADECAPS_SPECULARFLATMONO (0x40)
+
+#define WINED3DPSHADECAPS_SPECULARFLATRGB (0x80)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDMONO (0x100)
+
+#define WINED3DPSHADECAPS_SPECULARGOURAUDRGB (0x200)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGMONO (0x400)
+
+#define WINED3DPSHADECAPS_SPECULARPHONGRGB (0x800)
+
+#define WINED3DPSHADECAPS_ALPHAFLATBLEND (0x1000)
+
+#define WINED3DPSHADECAPS_ALPHAFLATSTIPPLED (0x2000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDBLEND (0x4000)
+
+#define WINED3DPSHADECAPS_ALPHAGOURAUDSTIPPLED (0x8000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGBLEND (0x10000)
+
+#define WINED3DPSHADECAPS_ALPHAPHONGSTIPPLED (0x20000)
+
+#define WINED3DPSHADECAPS_FOGFLAT (0x40000)
+
+#define WINED3DPSHADECAPS_FOGGOURAUD (0x80000)
+
+#define WINED3DPSHADECAPS_FOGPHONG (0x100000)
+
+#define WINED3DPTEXTURECAPS_PERSPECTIVE (0x1)
+
+#define WINED3DPTEXTURECAPS_POW2 (0x2)
+
+#define WINED3DPTEXTURECAPS_ALPHA (0x4)
+
+#define WINED3DPTEXTURECAPS_TRANSPARENCY (0x8)
+
+#define WINED3DPTEXTURECAPS_BORDER (0x10)
+
+#define WINED3DPTEXTURECAPS_SQUAREONLY (0x20)
+
+#define WINED3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE (0x40)
+
+#define WINED3DPTEXTURECAPS_ALPHAPALETTE (0x80)
+
+#define WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL (0x100)
+
+#define WINED3DPTEXTURECAPS_PROJECTED (0x400)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP (0x800)
+
+#define WINED3DPTEXTURECAPS_COLORKEYBLEND (0x1000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP (0x2000)
+
+#define WINED3DPTEXTURECAPS_MIPMAP (0x4000)
+
+#define WINED3DPTEXTURECAPS_MIPVOLUMEMAP (0x8000)
+
+#define WINED3DPTEXTURECAPS_MIPCUBEMAP (0x10000)
+
+#define WINED3DPTEXTURECAPS_CUBEMAP_POW2 (0x20000)
+
+#define WINED3DPTEXTURECAPS_VOLUMEMAP_POW2 (0x40000)
+
+#define WINED3DPTEXTURECAPS_NOPROJECTEDBUMPENV (0x200000)
+
+#define WINED3DPTFILTERCAPS_NEAREST (0x1)
+
+#define WINED3DPTFILTERCAPS_LINEAR (0x2)
+
+#define WINED3DPTFILTERCAPS_MIPNEAREST (0x4)
+
+#define WINED3DPTFILTERCAPS_MIPLINEAR (0x8)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPNEAREST (0x10)
+
+#define WINED3DPTFILTERCAPS_LINEARMIPLINEAR (0x20)
+
+#define WINED3DPTFILTERCAPS_MINFPOINT (0x100)
+
+#define WINED3DPTFILTERCAPS_MINFLINEAR (0x200)
+
+#define WINED3DPTFILTERCAPS_MINFANISOTROPIC (0x400)
+
+#define WINED3DPTFILTERCAPS_MIPFPOINT (0x10000)
+
+#define WINED3DPTFILTERCAPS_MIPFLINEAR (0x20000)
+
+#define WINED3DPTFILTERCAPS_MAGFPOINT (0x1000000)
+
+#define WINED3DPTFILTERCAPS_MAGFLINEAR (0x2000000)
+
+#define WINED3DPTFILTERCAPS_MAGFANISOTROPIC (0x4000000)
+
+#define WINED3DPTFILTERCAPS_MAGFPYRAMIDALQUAD (0x8000000)
+
+#define WINED3DPTFILTERCAPS_MAGFGAUSSIANQUAD (0x10000000)
+
+#define WINED3DVTXPCAPS_TEXGEN (0x1)
+
+#define WINED3DVTXPCAPS_MATERIALSOURCE7 (0x2)
+
+#define WINED3DVTXPCAPS_VERTEXFOG (0x4)
+
+#define WINED3DVTXPCAPS_DIRECTIONALLIGHTS (0x8)
+
+#define WINED3DVTXPCAPS_POSITIONALLIGHTS (0x10)
+
+#define WINED3DVTXPCAPS_LOCALVIEWER (0x20)
+
+#define WINED3DVTXPCAPS_TWEENING (0x40)
+
+#define WINED3DVTXPCAPS_TEXGEN_SPHEREMAP (0x100)
+
+#define WINED3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER (0x200)
+
+#define WINED3DCURSORCAPS_COLOR (0x1)
+
+#define WINED3DCURSORCAPS_LOWRES (0x2)
+
+#define WINED3DDEVCAPS_FLOATTLVERTEX (0x1)
+
+#define WINED3DDEVCAPS_SORTINCREASINGZ (0x2)
+
+#define WINED3DDEVCAPS_SORTDECREASINGZ (0x4)
+
+#define WINED3DDEVCAPS_SORTEXACT (0x8)
+
+#define WINED3DDEVCAPS_EXECUTESYSTEMMEMORY (0x10)
+
+#define WINED3DDEVCAPS_EXECUTEVIDEOMEMORY (0x20)
+
+#define WINED3DDEVCAPS_TLVERTEXSYSTEMMEMORY (0x40)
+
+#define WINED3DDEVCAPS_TLVERTEXVIDEOMEMORY (0x80)
+
+#define WINED3DDEVCAPS_TEXTURESYSTEMMEMORY (0x100)
+
+#define WINED3DDEVCAPS_TEXTUREVIDEOMEMORY (0x200)
+
+#define WINED3DDEVCAPS_DRAWPRIMTLVERTEX (0x400)
+
+#define WINED3DDEVCAPS_CANRENDERAFTERFLIP (0x800)
+
+#define WINED3DDEVCAPS_TEXTURENONLOCALVIDMEM (0x1000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2 (0x2000)
+
+#define WINED3DDEVCAPS_SEPARATETEXTUREMEMORIES (0x4000)
+
+#define WINED3DDEVCAPS_DRAWPRIMITIVES2EX (0x8000)
+
+#define WINED3DDEVCAPS_HWTRANSFORMANDLIGHT (0x10000)
+
+#define WINED3DDEVCAPS_CANBLTSYSTONONLOCAL (0x20000)
+
+#define WINED3DDEVCAPS_HWRASTERIZATION (0x80000)
+
+#define WINED3DDEVCAPS_PUREDEVICE (0x100000)
+
+#define WINED3DDEVCAPS_QUINTICRTPATCHES (0x200000)
+
+#define WINED3DDEVCAPS_RTPATCHES (0x400000)
+
+#define WINED3DDEVCAPS_RTPATCHHANDLEZERO (0x800000)
+
+#define WINED3DDEVCAPS_NPATCHES (0x1000000)
+
+#define WINEDDBLTFX_ARITHSTRETCHY (0x1)
+
+#define WINEDDBLTFX_MIRRORLEFTRIGHT (0x2)
+
+#define WINEDDBLTFX_MIRRORUPDOWN (0x4)
+
+#define WINEDDBLTFX_NOTEARING (0x8)
+
+#define WINEDDBLTFX_ROTATE180 (0x10)
+
+#define WINEDDBLTFX_ROTATE270 (0x20)
+
+#define WINEDDBLTFX_ROTATE90 (0x40)
+
+#define WINEDDBLTFX_ZBUFFERRANGE (0x80)
+
+#define WINEDDBLTFX_ZBUFFERBASEDEST (0x100)
+
+#define WINEDDBLT_ALPHADEST (0x1)
+
+#define WINEDDBLT_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDBLT_ALPHADESTNEG (0x4)
+
+#define WINEDDBLT_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDBLT_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDBLT_ALPHASRC (0x20)
+
+#define WINEDDBLT_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDBLT_ALPHASRCNEG (0x80)
+
+#define WINEDDBLT_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDBLT_ASYNC (0x200)
+
+#define WINEDDBLT_COLORFILL (0x400)
+
+#define WINEDDBLT_DDFX (0x800)
+
+#define WINEDDBLT_DDROPS (0x1000)
+
+#define WINEDDBLT_KEYDEST (0x2000)
+
+#define WINEDDBLT_KEYDESTOVERRIDE (0x4000)
+
+#define WINEDDBLT_KEYSRC (0x8000)
+
+#define WINEDDBLT_KEYSRCOVERRIDE (0x10000)
+
+#define WINEDDBLT_ROP (0x20000)
+
+#define WINEDDBLT_ROTATIONANGLE (0x40000)
+
+#define WINEDDBLT_ZBUFFER (0x80000)
+
+#define WINEDDBLT_ZBUFFERDESTCONSTOVERRIDE (0x100000)
+
+#define WINEDDBLT_ZBUFFERDESTOVERRIDE (0x200000)
+
+#define WINEDDBLT_ZBUFFERSRCCONSTOVERRIDE (0x400000)
+
+#define WINEDDBLT_ZBUFFERSRCOVERRIDE (0x800000)
+
+#define WINEDDBLT_WAIT (0x1000000)
+
+#define WINEDDBLT_DEPTHFILL (0x2000000)
+
+#define WINEDDBLT_DONOTWAIT (0x8000000)
+
+#define WINEDDBLTFAST_NOCOLORKEY (0x0)
+
+#define WINEDDBLTFAST_SRCCOLORKEY (0x1)
+
+#define WINEDDBLTFAST_DESTCOLORKEY (0x2)
+
+#define WINEDDBLTFAST_WAIT (0x10)
+
+#define WINEDDBLTFAST_DONOTWAIT (0x20)
+
+#define WINEDDSD_CAPS (0x1)
+
+#define WINEDDSD_HEIGHT (0x2)
+
+#define WINEDDSD_WIDTH (0x4)
+
+#define WINEDDSD_PITCH (0x8)
+
+#define WINEDDSD_BACKBUFFERCOUNT (0x20)
+
+#define WINEDDSD_ZBUFFERBITDEPTH (0x40)
+
+#define WINEDDSD_ALPHABITDEPTH (0x80)
+
+#define WINEDDSD_LPSURFACE (0x800)
+
+#define WINEDDSD_PIXELFORMAT (0x1000)
+
+#define WINEDDSD_CKDESTOVERLAY (0x2000)
+
+#define WINEDDSD_CKDESTBLT (0x4000)
+
+#define WINEDDSD_CKSRCOVERLAY (0x8000)
+
+#define WINEDDSD_CKSRCBLT (0x10000)
+
+#define WINEDDSD_MIPMAPCOUNT (0x20000)
+
+#define WINEDDSD_REFRESHRATE (0x40000)
+
+#define WINEDDSD_LINEARSIZE (0x80000)
+
+#define WINEDDSD_TEXTURESTAGE (0x100000)
+
+#define WINEDDSD_FVF (0x200000)
+
+#define WINEDDSD_SRCVBHANDLE (0x400000)
+
+#define WINEDDSD_ALL (0x7ff9ee)
+
+#define WINEDDCKEY_COLORSPACE (0x1)
+
+#define WINEDDCKEY_DESTBLT (0x2)
+
+#define WINEDDCKEY_DESTOVERLAY (0x4)
+
+#define WINEDDCKEY_SRCBLT (0x8)
+
+#define WINEDDCKEY_SRCOVERLAY (0x10)
+
+#define WINEDDGBS_CANBLT (0x1)
+
+#define WINEDDGBS_ISBLTDONE (0x2)
+
+#define WINEDDGFS_CANFLIP (0x1)
+
+#define WINEDDGFS_ISFLIPDONE (0x2)
+
+#define WINEDDFLIP_WAIT (0x1)
+
+#define WINEDDFLIP_EVEN (0x2)
+
+#define WINEDDFLIP_ODD (0x4)
+
+#define WINEDDFLIP_NOVSYNC (0x8)
+
+#define WINEDDFLIP_STEREO (0x10)
+
+#define WINEDDFLIP_DONOTWAIT (0x20)
+
+#define WINEDDFLIP_INTERVAL2 (0x2000000)
+
+#define WINEDDFLIP_INTERVAL3 (0x3000000)
+
+#define WINEDDFLIP_INTERVAL4 (0x4000000)
+
+#define WINEDDOVER_ALPHADEST (0x1)
+
+#define WINEDDOVER_ALPHADESTCONSTOVERRIDE (0x2)
+
+#define WINEDDOVER_ALPHADESTNEG (0x4)
+
+#define WINEDDOVER_ALPHADESTSURFACEOVERRIDE (0x8)
+
+#define WINEDDOVER_ALPHAEDGEBLEND (0x10)
+
+#define WINEDDOVER_ALPHASRC (0x20)
+
+#define WINEDDOVER_ALPHASRCCONSTOVERRIDE (0x40)
+
+#define WINEDDOVER_ALPHASRCNEG (0x80)
+
+#define WINEDDOVER_ALPHASRCSURFACEOVERRIDE (0x100)
+
+#define WINEDDOVER_HIDE (0x200)
+
+#define WINEDDOVER_KEYDEST (0x400)
+
+#define WINEDDOVER_KEYDESTOVERRIDE (0x800)
+
+#define WINEDDOVER_KEYSRC (0x1000)
+
+#define WINEDDOVER_KEYSRCOVERRIDE (0x2000)
+
+#define WINEDDOVER_SHOW (0x4000)
+
+#define WINEDDOVER_ADDDIRTYRECT (0x8000)
+
+#define WINEDDOVER_REFRESHDIRTYRECTS (0x10000)
+
+#define WINEDDOVER_REFRESHALL (0x20000)
+
+#define WINEDDOVER_DDFX (0x80000)
+
+#define WINEDDOVER_AUTOFLIP (0x100000)
+
+#define WINEDDOVER_BOB (0x200000)
+
+#define WINEDDOVER_OVERRIDEBOBWEAVE (0x400000)
+
+#define WINEDDOVER_INTERLEAVED (0x800000)
+
+#define WINEDDSCAPS_RESERVED1 (0x1)
+
+#define WINEDDSCAPS_ALPHA (0x2)
+
+#define WINEDDSCAPS_BACKBUFFER (0x4)
+
+#define WINEDDSCAPS_COMPLEX (0x8)
+
+#define WINEDDSCAPS_FLIP (0x10)
+
+#define WINEDDSCAPS_FRONTBUFFER (0x20)
+
+#define WINEDDSCAPS_OFFSCREENPLAIN (0x40)
+
+#define WINEDDSCAPS_OVERLAY (0x80)
+
+#define WINEDDSCAPS_PALETTE (0x100)
+
+#define WINEDDSCAPS_PRIMARYSURFACE (0x200)
+
+#define WINEDDSCAPS_PRIMARYSURFACELEFT (0x400)
+
+#define WINEDDSCAPS_SYSTEMMEMORY (0x800)
+
+#define WINEDDSCAPS_TEXTURE (0x1000)
+
+#define WINEDDSCAPS_3DDEVICE (0x2000)
+
+#define WINEDDSCAPS_VIDEOMEMORY (0x4000)
+
+#define WINEDDSCAPS_VISIBLE (0x8000)
+
+#define WINEDDSCAPS_WRITEONLY (0x10000)
+
+#define WINEDDSCAPS_ZBUFFER (0x20000)
+
+#define WINEDDSCAPS_OWNDC (0x40000)
+
+#define WINEDDSCAPS_LIVEVIDEO (0x80000)
+
+#define WINEDDSCAPS_HWCODEC (0x100000)
+
+#define WINEDDSCAPS_MODEX (0x200000)
+
+#define WINEDDSCAPS_MIPMAP (0x400000)
+
+#define WINEDDSCAPS_RESERVED2 (0x800000)
+
+#define WINEDDSCAPS_ALLOCONLOAD (0x4000000)
+
+#define WINEDDSCAPS_VIDEOPORT (0x8000000)
+
+#define WINEDDSCAPS_LOCALVIDMEM (0x10000000)
+
+#define WINEDDSCAPS_NONLOCALVIDMEM (0x20000000)
+
+#define WINEDDSCAPS_STANDARDVGAMODE (0x40000000)
+
+#define WINEDDSCAPS_OPTIMIZED (0x80000000)
+
+#define WINEDDCKEYCAPS_DESTBLT (0x1)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACE (0x2)
+
+#define WINEDDCKEYCAPS_DESTBLTCLRSPACEYUV (0x4)
+
+#define WINEDDCKEYCAPS_DESTBLTYUV (0x8)
+
+#define WINEDDCKEYCAPS_DESTOVERLAY (0x10)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACE (0x20)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYCLRSPACEYUV (0x40)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYONEACTIVE (0x80)
+
+#define WINEDDCKEYCAPS_DESTOVERLAYYUV (0x100)
+
+#define WINEDDCKEYCAPS_SRCBLT (0x200)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACE (0x400)
+
+#define WINEDDCKEYCAPS_SRCBLTCLRSPACEYUV (0x800)
+
+#define WINEDDCKEYCAPS_SRCBLTYUV (0x1000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAY (0x2000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACE (0x4000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYCLRSPACEYUV (0x8000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYONEACTIVE (0x10000)
+
+#define WINEDDCKEYCAPS_SRCOVERLAYYUV (0x20000)
+
+#define WINEDDCKEYCAPS_NOCOSTOVERLAY (0x40000)
+
+#define WINEDDFXCAPS_BLTALPHA (0x1)
+
+#define WINEDDFXCAPS_OVERLAYALPHA (0x4)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHYN (0x10)
+
+#define WINEDDFXCAPS_BLTARITHSTRETCHY (0x20)
+
+#define WINEDDFXCAPS_BLTMIRRORLEFTRIGHT (0x40)
+
+#define WINEDDFXCAPS_BLTMIRRORUPDOWN (0x80)
+
+#define WINEDDFXCAPS_BLTROTATION (0x100)
+
+#define WINEDDFXCAPS_BLTROTATION90 (0x200)
+
+#define WINEDDFXCAPS_BLTSHRINKX (0x400)
+
+#define WINEDDFXCAPS_BLTSHRINKXN (0x800)
+
+#define WINEDDFXCAPS_BLTSHRINKY (0x1000)
+
+#define WINEDDFXCAPS_BLTSHRINKYN (0x2000)
+
+#define WINEDDFXCAPS_BLTSTRETCHX (0x4000)
+
+#define WINEDDFXCAPS_BLTSTRETCHXN (0x8000)
+
+#define WINEDDFXCAPS_BLTSTRETCHY (0x10000)
+
+#define WINEDDFXCAPS_BLTSTRETCHYN (0x20000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHY (0x40000)
+
+#define WINEDDFXCAPS_OVERLAYARITHSTRETCHYN (0x8)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKX (0x80000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKXN (0x100000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKY (0x200000)
+
+#define WINEDDFXCAPS_OVERLAYSHRINKYN (0x400000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHX (0x800000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHXN (0x1000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHY (0x2000000)
+
+#define WINEDDFXCAPS_OVERLAYSTRETCHYN (0x4000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORLEFTRIGHT (0x8000000)
+
+#define WINEDDFXCAPS_OVERLAYMIRRORUPDOWN (0x10000000)
+
+#define WINEDDCAPS_3D (0x1)
+
+#define WINEDDCAPS_ALIGNBOUNDARYDEST (0x2)
+
+#define WINEDDCAPS_ALIGNSIZEDEST (0x4)
+
+#define WINEDDCAPS_ALIGNBOUNDARYSRC (0x8)
+
+#define WINEDDCAPS_ALIGNSIZESRC (0x10)
+
+#define WINEDDCAPS_ALIGNSTRIDE (0x20)
+
+#define WINEDDCAPS_BLT (0x40)
+
+#define WINEDDCAPS_BLTQUEUE (0x80)
+
+#define WINEDDCAPS_BLTFOURCC (0x100)
+
+#define WINEDDCAPS_BLTSTRETCH (0x200)
+
+#define WINEDDCAPS_GDI (0x400)
+
+#define WINEDDCAPS_OVERLAY (0x800)
+
+#define WINEDDCAPS_OVERLAYCANTCLIP (0x1000)
+
+#define WINEDDCAPS_OVERLAYFOURCC (0x2000)
+
+#define WINEDDCAPS_OVERLAYSTRETCH (0x4000)
+
+#define WINEDDCAPS_PALETTE (0x8000)
+
+#define WINEDDCAPS_PALETTEVSYNC (0x10000)
+
+#define WINEDDCAPS_READSCANLINE (0x20000)
+
+#define WINEDDCAPS_STEREOVIEW (0x40000)
+
+#define WINEDDCAPS_VBI (0x80000)
+
+#define WINEDDCAPS_ZBLTS (0x100000)
+
+#define WINEDDCAPS_ZOVERLAYS (0x200000)
+
+#define WINEDDCAPS_COLORKEY (0x400000)
+
+#define WINEDDCAPS_ALPHA (0x800000)
+
+#define WINEDDCAPS_COLORKEYHWASSIST (0x1000000)
+
+#define WINEDDCAPS_NOHARDWARE (0x2000000)
+
+#define WINEDDCAPS_BLTCOLORFILL (0x4000000)
+
+#define WINEDDCAPS_BANKSWITCHED (0x8000000)
+
+#define WINEDDCAPS_BLTDEPTHFILL (0x10000000)
+
+#define WINEDDCAPS_CANCLIP (0x20000000)
+
+#define WINEDDCAPS_CANCLIPSTRETCHED (0x40000000)
+
+#define WINEDDCAPS_CANBLTSYSMEM (0x80000000)
+
+#define WINEDDCAPS2_CERTIFIED (0x1)
+
+#define WINEDDCAPS2_NO2DDURING3DSCENE (0x2)
+
+#define WINEDDCAPS2_VIDEOPORT (0x4)
+
+#define WINEDDCAPS2_AUTOFLIPOVERLAY (0x8)
+
+#define WINEDDCAPS2_CANBOBINTERLEAVED (0x10)
+
+#define WINEDDCAPS2_CANBOBNONINTERLEAVED (0x20)
+
+#define WINEDDCAPS2_COLORCONTROLOVERLAY (0x40)
+
+#define WINEDDCAPS2_COLORCONTROLPRIMARY (0x80)
+
+#define WINEDDCAPS2_CANDROPZ16BIT (0x100)
+
+#define WINEDDCAPS2_NONLOCALVIDMEM (0x200)
+
+#define WINEDDCAPS2_NONLOCALVIDMEMCAPS (0x400)
+
+#define WINEDDCAPS2_NOPAGELOCKREQUIRED (0x800)
+
+#define WINEDDCAPS2_WIDESURFACES (0x1000)
+
+#define WINEDDCAPS2_CANFLIPODDEVEN (0x2000)
+
+#define WINEDDCAPS2_CANBOBHARDWARE (0x4000)
+
+#define WINEDDCAPS2_COPYFOURCC (0x8000)
+
+#define WINEDDCAPS2_PRIMARYGAMMA (0x20000)
+
+#define WINEDDCAPS2_CANRENDERWINDOWED (0x80000)
+
+#define WINEDDCAPS2_CANCALIBRATEGAMMA (0x100000)
+
+#define WINEDDCAPS2_FLIPINTERVAL (0x200000)
+
+#define WINEDDCAPS2_FLIPNOVSYNC (0x400000)
+
+#define WINEDDCAPS2_CANMANAGETEXTURE (0x800000)
+
+#define WINEDDCAPS2_TEXMANINNONLOCALVIDMEM (0x1000000)
+
+#define WINEDDCAPS2_STEREO (0x2000000)
+
+#define WINEDDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL (0x4000000)
+
+#define WINEDDPCAPS_4BIT (0x1)
+
+#define WINEDDPCAPS_8BITENTRIES (0x2)
+
+#define WINEDDPCAPS_8BIT (0x4)
+
+#define WINEDDPCAPS_INITIALIZE (0x8)
+
+#define WINEDDPCAPS_PRIMARYSURFACE (0x10)
+
+#define WINEDDPCAPS_PRIMARYSURFACELEFT (0x20)
+
+#define WINEDDPCAPS_ALLOW256 (0x40)
+
+#define WINEDDPCAPS_VSYNC (0x80)
+
+#define WINEDDPCAPS_1BIT (0x100)
+
+#define WINEDDPCAPS_2BIT (0x200)
+
+#define WINEDDPCAPS_ALPHA (0x400)
+
+typedef struct _WINED3DDISPLAYMODE {
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ WINED3DFORMAT Format;
+} WINED3DDISPLAYMODE;
+typedef enum _WINED3DSCANLINEORDERING {
+ WINED3DSCANLINEORDERING_UNKNOWN = 0,
+ WINED3DSCANLINEORDERING_PROGRESSIVE = 1,
+ WINED3DSCANLINEORDERING_INTERLACED = 2
+} WINED3DSCANLINEORDERING;
+typedef struct _WINED3DDISPLAYMODEEX {
+ UINT Size;
+ UINT Width;
+ UINT Height;
+ UINT RefreshRate;
+ WINED3DFORMAT Format;
+ WINED3DSCANLINEORDERING ScanLineOrdering;
+} WINED3DDISPLAYMODEEX;
+typedef enum _WINED3DDISPLAYROTATION {
+ WINED3DDISPLAYROTATION_IDENTITY = 1,
+ WINED3DDISPLAYROTATION_90 = 2,
+ WINED3DDISPLAYROTATION_180 = 3,
+ WINED3DDISPLAYROTATION_270 = 4
+} WINED3DDISPLAYROTATION;
+typedef struct _WINED3DCOLORVALUE {
+ float r;
+ float g;
+ float b;
+ float a;
+} WINED3DCOLORVALUE;
+typedef struct _WINED3DVECTOR {
+ float x;
+ float y;
+ float z;
+} WINED3DVECTOR;
+typedef struct _WINED3DMATRIX {
+ union {
+ struct {
+ float _11;
+ float _12;
+ float _13;
+ float _14;
+ float _21;
+ float _22;
+ float _23;
+ float _24;
+ float _31;
+ float _32;
+ float _33;
+ float _34;
+ float _41;
+ float _42;
+ float _43;
+ float _44;
+ } s;
+ float m[4][4];
+ } u;
+} WINED3DMATRIX;
+typedef struct _WINED3DRECT {
+ LONG x1;
+ LONG y1;
+ LONG x2;
+ LONG y2;
+} WINED3DRECT;
+typedef struct _WINED3DLIGHT {
+ WINED3DLIGHTTYPE Type;
+ WINED3DCOLORVALUE Diffuse;
+ WINED3DCOLORVALUE Specular;
+ WINED3DCOLORVALUE Ambient;
+ WINED3DVECTOR Position;
+ WINED3DVECTOR Direction;
+ float Range;
+ float Falloff;
+ float Attenuation0;
+ float Attenuation1;
+ float Attenuation2;
+ float Theta;
+ float Phi;
+} WINED3DLIGHT;
+typedef struct _WINED3DMATERIAL {
+ WINED3DCOLORVALUE Diffuse;
+ WINED3DCOLORVALUE Ambient;
+ WINED3DCOLORVALUE Specular;
+ WINED3DCOLORVALUE Emissive;
+ float Power;
+} WINED3DMATERIAL;
+typedef struct _WINED3DVIEWPORT {
+ DWORD X;
+ DWORD Y;
+ DWORD Width;
+ DWORD Height;
+ float MinZ;
+ float MaxZ;
+} WINED3DVIEWPORT;
+typedef struct _WINED3DGAMMARAMP {
+ WORD red[256];
+ WORD green[256];
+ WORD blue[256];
+} WINED3DGAMMARAMP;
+typedef struct _WINED3DLINEPATTERN {
+ WORD wRepeatFactor;
+ WORD wLinePattern;
+} WINED3DLINEPATTERN;
+typedef struct _WINEDD3DRECTPATCH_INFO {
+ UINT StartVertexOffsetWidth;
+ UINT StartVertexOffsetHeight;
+ UINT Width;
+ UINT Height;
+ UINT Stride;
+ WINED3DBASISTYPE Basis;
+ WINED3DDEGREETYPE Degree;
+} WINED3DRECTPATCH_INFO;
+typedef struct _WINED3DTRIPATCH_INFO {
+ UINT StartVertexOffset;
+ UINT NumVertices;
+ WINED3DBASISTYPE Basis;
+ WINED3DDEGREETYPE Degree;
+} WINED3DTRIPATCH_INFO;
+typedef struct _WINED3DADAPTER_IDENTIFIER {
+ char *driver;
+ UINT driver_size;
+ char *description;
+ UINT description_size;
+ char *device_name;
+ UINT device_name_size;
+ LARGE_INTEGER driver_version;
+ DWORD vendor_id;
+ DWORD device_id;
+ DWORD subsystem_id;
+ DWORD revision;
+ GUID device_identifier;
+ DWORD whql_level;
+ LUID adapter_luid;
+ SIZE_T video_memory;
+} WINED3DADAPTER_IDENTIFIER;
+typedef struct _WINED3DPRESENT_PARAMETERS {
+ UINT BackBufferWidth;
+ UINT BackBufferHeight;
+ WINED3DFORMAT BackBufferFormat;
+ UINT BackBufferCount;
+ WINED3DMULTISAMPLE_TYPE MultiSampleType;
+ DWORD MultiSampleQuality;
+ WINED3DSWAPEFFECT SwapEffect;
+ HWND hDeviceWindow;
+ BOOL Windowed;
+ BOOL EnableAutoDepthStencil;
+ WINED3DFORMAT AutoDepthStencilFormat;
+ DWORD Flags;
+ UINT FullScreen_RefreshRateInHz;
+ UINT PresentationInterval;
+ BOOL AutoRestoreDisplayMode;
+#ifdef VBOX_WITH_WDDM
+ struct VBOXUHGSMI *pHgsmi;
+#endif
+} WINED3DPRESENT_PARAMETERS;
+typedef struct _WINED3DSURFACE_DESC {
+ WINED3DFORMAT format;
+ WINED3DRESOURCETYPE resource_type;
+ DWORD usage;
+ WINED3DPOOL pool;
+ UINT size;
+ WINED3DMULTISAMPLE_TYPE multisample_type;
+ DWORD multisample_quality;
+ UINT width;
+ UINT height;
+} WINED3DSURFACE_DESC;
+typedef struct _WINED3DVOLUME_DESC {
+ WINED3DFORMAT Format;
+ WINED3DRESOURCETYPE Type;
+ DWORD Usage;
+ WINED3DPOOL Pool;
+ UINT Size;
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+} WINED3DVOLUME_DESC;
+typedef struct _WINED3DCLIPSTATUS {
+ DWORD ClipUnion;
+ DWORD ClipIntersection;
+} WINED3DCLIPSTATUS;
+typedef struct _WINED3DVERTEXELEMENT {
+ WINED3DFORMAT format;
+ WORD input_slot;
+ WORD offset;
+ UINT output_slot;
+ BYTE method;
+ BYTE usage;
+ BYTE usage_idx;
+} WINED3DVERTEXELEMENT;
+typedef struct _WINED3DDEVICE_CREATION_PARAMETERS {
+ UINT AdapterOrdinal;
+ WINED3DDEVTYPE DeviceType;
+ HWND hFocusWindow;
+ DWORD BehaviorFlags;
+} WINED3DDEVICE_CREATION_PARAMETERS;
+typedef struct _WINED3DDEVINFO_BANDWIDTHTIMINGS {
+ float MaxBandwidthUtilized;
+ float FrontEndUploadMemoryUtilizedPercent;
+ float VertexRateUtilizedPercent;
+ float TriangleSetupRateUtilizedPercent;
+ float FillRateUtilizedPercent;
+} WINED3DDEVINFO_BANDWIDTHTIMINGS;
+typedef struct _WINED3DDEVINFO_CACHEUTILIZATION {
+ float TextureCacheHitRate;
+ float PostTransformVertexCacheHitRate;
+} WINED3DDEVINFO_CACHEUTILIZATION;
+typedef struct _WINED3DDEVINFO_INTERFACETIMINGS {
+ float WaitingForGPUToUseApplicationResourceTimePercent;
+ float WaitingForGPUToAcceptMoreCommandsTimePercent;
+ float WaitingForGPUToStayWithinLatencyTimePercent;
+ float WaitingForGPUExclusiveResourceTimePercent;
+ float WaitingForGPUOtherTimePercent;
+} WINED3DDEVINFO_INTERFACETIMINGS;
+typedef struct _WINED3DDEVINFO_PIPELINETIMINGS {
+ float VertexProcessingTimePercent;
+ float PixelProcessingTimePercent;
+ float OtherGPUProcessingTimePercent;
+ float GPUIdleTimePercent;
+} WINED3DDEVINFO_PIPELINETIMINGS;
+typedef struct _WINED3DDEVINFO_STAGETIMINGS {
+ float MemoryProcessingPercent;
+ float ComputationProcessingPercent;
+} WINED3DDEVINFO_STAGETIMINGS;
+typedef struct _WINED3DRASTER_STATUS {
+ BOOL InVBlank;
+ UINT ScanLine;
+} WINED3DRASTER_STATUS;
+typedef struct WINED3DRESOURCESTATS {
+ BOOL bThrashing;
+ DWORD ApproxBytesDownloaded;
+ DWORD NumEvicts;
+ DWORD NumVidCreates;
+ DWORD LastPri;
+ DWORD NumUsed;
+ DWORD NumUsedInVidMem;
+ DWORD WorkingSet;
+ DWORD WorkingSetBytes;
+ DWORD TotalManaged;
+ DWORD TotalBytes;
+} WINED3DRESOURCESTATS;
+typedef struct _WINED3DDEVINFO_RESOURCEMANAGER {
+ WINED3DRESOURCESTATS stats[7];
+} WINED3DDEVINFO_RESOURCEMANAGER;
+typedef struct _WINED3DDEVINFO_VERTEXSTATS {
+ DWORD NumRenderedTriangles;
+ DWORD NumExtraClippingTriangles;
+} WINED3DDEVINFO_VERTEXSTATS;
+typedef struct _WINED3DLOCKED_RECT {
+ INT Pitch;
+ void *pBits;
+} WINED3DLOCKED_RECT;
+typedef struct _WINED3DLOCKED_BOX {
+ INT RowPitch;
+ INT SlicePitch;
+ void *pBits;
+} WINED3DLOCKED_BOX;
+typedef struct _WINED3DBOX {
+ UINT Left;
+ UINT Top;
+ UINT Right;
+ UINT Bottom;
+ UINT Front;
+ UINT Back;
+} WINED3DBOX;
+typedef struct WINED3DDEVINFO_VCACHE {
+ DWORD Pattern;
+ DWORD OptMethod;
+ DWORD CacheSize;
+ DWORD MagicNumber;
+} WINED3DDEVINFO_VCACHE;
+typedef struct _WINED3DBUFFER_DESC {
+ WINED3DRESOURCETYPE Type;
+ DWORD Usage;
+ WINED3DPOOL Pool;
+ UINT Size;
+} WINED3DBUFFER_DESC;
+typedef struct WineDirect3DStridedData {
+ WINED3DFORMAT format;
+ const BYTE *lpData;
+ DWORD dwStride;
+} WineDirect3DStridedData;
+typedef struct WineDirect3DVertexStridedData {
+ WineDirect3DStridedData position;
+ WineDirect3DStridedData normal;
+ WineDirect3DStridedData diffuse;
+ WineDirect3DStridedData specular;
+ WineDirect3DStridedData texCoords[8];
+ BOOL position_transformed;
+} WineDirect3DVertexStridedData;
+typedef struct _WINED3DVSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+} WINED3DVSHADERCAPS2_0;
+typedef struct _WINED3DPSHADERCAPS2_0 {
+ DWORD Caps;
+ INT DynamicFlowControlDepth;
+ INT NumTemps;
+ INT StaticFlowControlDepth;
+ INT NumInstructionSlots;
+} WINED3DPSHADERCAPS2_0;
+typedef struct _WINEDDCAPS {
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD CKeyCaps;
+ DWORD FXCaps;
+ DWORD FXAlphaCaps;
+ DWORD PalCaps;
+ DWORD SVCaps;
+ DWORD SVBCaps;
+ DWORD SVBCKeyCaps;
+ DWORD SVBFXCaps;
+ DWORD VSBCaps;
+ DWORD VSBCKeyCaps;
+ DWORD VSBFXCaps;
+ DWORD SSBCaps;
+ DWORD SSBCKeyCaps;
+ DWORD SSBFXCaps;
+ DWORD ddsCaps;
+ DWORD StrideAlign;
+} WINEDDCAPS;
+typedef struct _WINED3DCAPS {
+ WINED3DDEVTYPE DeviceType;
+ UINT AdapterOrdinal;
+ DWORD Caps;
+ DWORD Caps2;
+ DWORD Caps3;
+ DWORD PresentationIntervals;
+ DWORD CursorCaps;
+ DWORD DevCaps;
+ DWORD PrimitiveMiscCaps;
+ DWORD RasterCaps;
+ DWORD ZCmpCaps;
+ DWORD SrcBlendCaps;
+ DWORD DestBlendCaps;
+ DWORD AlphaCmpCaps;
+ DWORD ShadeCaps;
+ DWORD TextureCaps;
+ DWORD TextureFilterCaps;
+ DWORD CubeTextureFilterCaps;
+ DWORD VolumeTextureFilterCaps;
+ DWORD TextureAddressCaps;
+ DWORD VolumeTextureAddressCaps;
+ DWORD LineCaps;
+ DWORD MaxTextureWidth;
+ DWORD MaxTextureHeight;
+ DWORD MaxVolumeExtent;
+ DWORD MaxTextureRepeat;
+ DWORD MaxTextureAspectRatio;
+ DWORD MaxAnisotropy;
+ float MaxVertexW;
+ float GuardBandLeft;
+ float GuardBandTop;
+ float GuardBandRight;
+ float GuardBandBottom;
+ float ExtentsAdjust;
+ DWORD StencilCaps;
+ DWORD FVFCaps;
+ DWORD TextureOpCaps;
+ DWORD MaxTextureBlendStages;
+ DWORD MaxSimultaneousTextures;
+ DWORD VertexProcessingCaps;
+ DWORD MaxActiveLights;
+ DWORD MaxUserClipPlanes;
+ DWORD MaxVertexBlendMatrices;
+ DWORD MaxVertexBlendMatrixIndex;
+ float MaxPointSize;
+ DWORD MaxPrimitiveCount;
+ DWORD MaxVertexIndex;
+ DWORD MaxStreams;
+ DWORD MaxStreamStride;
+ DWORD VertexShaderVersion;
+ DWORD MaxVertexShaderConst;
+ DWORD PixelShaderVersion;
+ float PixelShader1xMaxValue;
+ DWORD DevCaps2;
+ float MaxNpatchTessellationLevel;
+ DWORD Reserved5;
+ UINT MasterAdapterOrdinal;
+ UINT AdapterOrdinalInGroup;
+ UINT NumberOfAdaptersInGroup;
+ DWORD DeclTypes;
+ DWORD NumSimultaneousRTs;
+ DWORD StretchRectFilterCaps;
+ WINED3DVSHADERCAPS2_0 VS20Caps;
+ WINED3DPSHADERCAPS2_0 PS20Caps;
+ DWORD VertexTextureFilterCaps;
+ DWORD MaxVShaderInstructionsExecuted;
+ DWORD MaxPShaderInstructionsExecuted;
+ DWORD MaxVertexShader30InstructionSlots;
+ DWORD MaxPixelShader30InstructionSlots;
+ DWORD Reserved2;
+ DWORD Reserved3;
+ WINEDDCAPS DirectDrawCaps;
+} WINED3DCAPS;
+typedef struct _WINEDDCOLORKEY {
+ DWORD dwColorSpaceLowValue;
+ DWORD dwColorSpaceHighValue;
+} WINEDDCOLORKEY;
+typedef struct _WINEDDCOLORKEY *LPWINEDDCOLORKEY;
+typedef struct _WINEDDBLTFX {
+ DWORD dwSize;
+ DWORD dwDDFX;
+ DWORD dwROP;
+ DWORD dwDDROP;
+ DWORD dwRotationAngle;
+ DWORD dwZBufferOpCode;
+ DWORD dwZBufferLow;
+ DWORD dwZBufferHigh;
+ DWORD dwZBufferBaseDest;
+ DWORD dwZDestConstBitDepth;
+ union {
+ DWORD dwZDestConst;
+ struct IWineD3DSurface *lpDDSZBufferDest;
+ } DUMMYUNIONNAME1;
+ DWORD dwZSrcConstBitDepth;
+ union {
+ DWORD dwZSrcConst;
+ struct IWineD3DSurface *lpDDSZBufferSrc;
+ } DUMMYUNIONNAME2;
+ DWORD dwAlphaEdgeBlendBitDepth;
+ DWORD dwAlphaEdgeBlend;
+ DWORD dwReserved;
+ DWORD dwAlphaDestConstBitDepth;
+ union {
+ DWORD dwAlphaDestConst;
+ struct IWineD3DSurface *lpDDSAlphaDest;
+ } DUMMYUNIONNAME3;
+ DWORD dwAlphaSrcConstBitDepth;
+ union {
+ DWORD dwAlphaSrcConst;
+ struct IWineD3DSurface *lpDDSAlphaSrc;
+ } DUMMYUNIONNAME4;
+ union {
+ DWORD dwFillColor;
+ DWORD dwFillDepth;
+ DWORD dwFillPixel;
+ struct IWineD3DSurface *lpDDSPattern;
+ } DUMMYUNIONNAME5;
+ WINEDDCOLORKEY ddckDestColorkey;
+ WINEDDCOLORKEY ddckSrcColorkey;
+} WINEDDBLTFX;
+typedef struct _WINEDDBLTFX *LPWINEDDBLTFX;
+typedef struct _WINEDDOVERLAYFX {
+ DWORD dwSize;
+ DWORD dwAlphaEdgeBlendBitDepth;
+ DWORD dwAlphaEdgeBlend;
+ DWORD dwReserved;
+ DWORD dwAlphaDestConstBitDepth;
+ union {
+ DWORD dwAlphaDestConst;
+ struct IWineD3DSurface *lpDDSAlphaDest;
+ } DUMMYUNIONNAME1;
+ DWORD dwAlphaSrcConstBitDepth;
+ union {
+ DWORD dwAlphaSrcConst;
+ struct IWineD3DSurface *lpDDSAlphaSrc;
+ } DUMMYUNIONNAME2;
+ WINEDDCOLORKEY dckDestColorkey;
+ WINEDDCOLORKEY dckSrcColorkey;
+ DWORD dwDDFX;
+ DWORD dwFlags;
+} WINEDDOVERLAYFX;
+struct wined3d_buffer_desc {
+ UINT byte_width;
+ DWORD usage;
+ UINT bind_flags;
+ UINT cpu_access_flags;
+ UINT misc_flags;
+};
+
+struct wined3d_shader_signature_element {
+ const char *semantic_name;
+ UINT semantic_idx;
+ enum wined3d_sysval_semantic sysval_semantic;
+ DWORD component_type;
+ UINT register_idx;
+ DWORD mask;
+};
+
+struct wined3d_shader_signature {
+ UINT element_count;
+ struct wined3d_shader_signature_element *elements;
+ char *string_data;
+};
+
+struct wined3d_parent_ops {
+ void (STDMETHODCALLTYPE *wined3d_object_destroyed)(void *parent);
+};
+
+#ifndef __IWineD3DResource_FWD_DEFINED__
+#define __IWineD3DResource_FWD_DEFINED__
+typedef interface IWineD3DResource IWineD3DResource;
+#endif
+
+#ifndef __IWineD3DSurface_FWD_DEFINED__
+#define __IWineD3DSurface_FWD_DEFINED__
+typedef interface IWineD3DSurface IWineD3DSurface;
+#endif
+
+#ifndef __IWineD3DVolume_FWD_DEFINED__
+#define __IWineD3DVolume_FWD_DEFINED__
+typedef interface IWineD3DVolume IWineD3DVolume;
+#endif
+
+#ifndef __IWineD3DSwapChain_FWD_DEFINED__
+#define __IWineD3DSwapChain_FWD_DEFINED__
+typedef interface IWineD3DSwapChain IWineD3DSwapChain;
+#endif
+
+#ifndef __IWineD3DDevice_FWD_DEFINED__
+#define __IWineD3DDevice_FWD_DEFINED__
+typedef interface IWineD3DDevice IWineD3DDevice;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDeviceParent interface
+ */
+#ifndef __IWineD3DDeviceParent_INTERFACE_DEFINED__
+#define __IWineD3DDeviceParent_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDeviceParent, 0xaeb62dfc, 0xbdcb, 0x4f02, 0x95,0x19, 0x1e,0xee,0xa0,0x0c,0x15,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDeviceParent : public IUnknown
+{
+ virtual void STDMETHODCALLTYPE WineD3DDeviceCreated(
+ IWineD3DDevice *device) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ DWORD usage,
+ WINED3DPOOL pool,
+ UINT level,
+ WINED3DCUBEMAP_FACES face,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateRenderTarget(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL lockable,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilSurface(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL discard,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ UINT depth,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ DWORD usage,
+ IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain) = 0;
+
+};
+#else
+typedef struct IWineD3DDeviceParentVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DDeviceParent* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DDeviceParent* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DDeviceParent* This);
+
+ /*** IWineD3DDeviceParent methods ***/
+ void (STDMETHODCALLTYPE *WineD3DDeviceCreated)(
+ IWineD3DDeviceParent* This,
+ IWineD3DDevice *device);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ DWORD usage,
+ WINED3DPOOL pool,
+ UINT level,
+ WINED3DCUBEMAP_FACES face,
+ IWineD3DSurface **surface
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateRenderTarget)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL lockable,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *CreateDepthStencilSurface)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL discard,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ UINT depth,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ DWORD usage,
+ IWineD3DVolume **volume
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+ IWineD3DDeviceParent* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain);
+
+ END_INTERFACE
+} IWineD3DDeviceParentVtbl;
+interface IWineD3DDeviceParent {
+ CONST_VTBL IWineD3DDeviceParentVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDeviceParent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDeviceParent_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDeviceParent_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DDeviceParent methods ***/
+#define IWineD3DDeviceParent_WineD3DDeviceCreated(This,device) (This)->lpVtbl->WineD3DDeviceCreated(This,device)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface) (This)->lpVtbl->CreateSurface(This,superior,width,height,format,usage,pool,level,face,surface)
+#endif
+#define IWineD3DDeviceParent_CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface) (This)->lpVtbl->CreateRenderTarget(This,superior,width,height,format,multisample_type,multisample_quality,lockable,surface)
+#define IWineD3DDeviceParent_CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface) (This)->lpVtbl->CreateDepthStencilSurface(This,superior,width,height,format,multisample_type,multisample_quality,discard,surface)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume,shared_handle,pvClientMem)
+#else
+#define IWineD3DDeviceParent_CreateVolume(This,superior,width,height,depth,format,pool,usage,volume) (This)->lpVtbl->CreateVolume(This,superior,width,height,depth,format,pool,usage,volume)
+#endif
+#define IWineD3DDeviceParent_CreateSwapChain(This,present_parameters,swapchain) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain)
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DDeviceParent_WineD3DDeviceCreated_Proxy(
+ IWineD3DDeviceParent* This,
+ IWineD3DDevice *device);
+void __RPC_STUB IWineD3DDeviceParent_WineD3DDeviceCreated_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSurface_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ DWORD usage,
+ WINED3DPOOL pool,
+ UINT level,
+ WINED3DCUBEMAP_FACES face,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateRenderTarget_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL lockable,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateRenderTarget_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateDepthStencilSurface_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ BOOL discard,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDeviceParent_CreateDepthStencilSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateVolume_Proxy(
+ IWineD3DDeviceParent* This,
+ IUnknown *superior,
+ UINT width,
+ UINT height,
+ UINT depth,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ DWORD usage,
+ IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DDeviceParent_CreateVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDeviceParent_CreateSwapChain_Proxy(
+ IWineD3DDeviceParent* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDeviceParent_CreateSwapChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DDeviceParent_INTERFACE_DEFINED__ */
+
+typedef ULONG (STDMETHODCALLTYPE *D3DCB_DESTROYSWAPCHAINFN)(IWineD3DSwapChain *pSwapChain);
+typedef HRESULT (STDMETHODCALLTYPE *D3DCB_ENUMRESOURCES)(IWineD3DResource *resource,void *pData);
+/*****************************************************************************
+ * IWineD3DBase interface
+ */
+#ifndef __IWineD3DBase_INTERFACE_DEFINED__
+#define __IWineD3DBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBase, 0x46799311, 0x8e0e, 0x40ce, 0xb2,0xec, 0xdd,0xb9,0x9f,0x18,0xfc,0xb4);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBase : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE GetParent(
+ IUnknown **parent) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBase* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBase* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBase* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBase* This,
+ IUnknown **parent);
+
+ END_INTERFACE
+} IWineD3DBaseVtbl;
+interface IWineD3DBase {
+ CONST_VTBL IWineD3DBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBase_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBase_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBase_GetParent_Proxy(
+ IWineD3DBase* This,
+ IUnknown **parent);
+void __RPC_STUB IWineD3DBase_GetParent_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3D interface
+ */
+#ifndef __IWineD3D_INTERFACE_DEFINED__
+#define __IWineD3D_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3D, 0x108f9c44, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3D : public IWineD3DBase
+{
+ virtual UINT STDMETHODCALLTYPE GetAdapterCount(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RegisterSoftwareDevice(
+ void *pInitializeFunction) = 0;
+
+ virtual HMONITOR STDMETHODCALLTYPE GetAdapterMonitor(
+ UINT adapter_idx) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetAdapterModeCount(
+ UINT adapter_idx,
+ WINED3DFORMAT format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumAdapterModes(
+ UINT adapter_idx,
+ WINED3DFORMAT format,
+ UINT mode_idx,
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayMode(
+ UINT adapter_idx,
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdapterDisplayModeEx(
+ UINT adapter_idx,
+ WINED3DDISPLAYMODEEX *mode,
+ WINED3DDISPLAYROTATION *rotation) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetAdapterIdentifier(
+ UINT adapter_idx,
+ DWORD flags,
+ WINED3DADAPTER_IDENTIFIER *identifier) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceMultiSampleType(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT surface_format,
+ BOOL windowed,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD *quality_levels) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDepthStencilMatch(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ WINED3DFORMAT render_target_format,
+ WINED3DFORMAT depth_stencil_format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceType(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT display_format,
+ WINED3DFORMAT backbuffer_format,
+ BOOL windowed) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormat(
+ UINT adaper_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ DWORD usage,
+ WINED3DRESOURCETYPE resource_type,
+ WINED3DFORMAT check_format,
+ WINED3DSURFTYPE surface_type) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CheckDeviceFormatConversion(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT source_format,
+ WINED3DFORMAT target_format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DCAPS *caps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateDevice(
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ HWND focus_window,
+ DWORD behaviour_flags,
+ IUnknown *parent,
+ IWineD3DDeviceParent *device_parent,
+ IWineD3DDevice **device) = 0;
+
+};
+#else
+typedef struct IWineD3DVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3D* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3D* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3D* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3D* This,
+ IUnknown **parent);
+
+ /*** IWineD3D methods ***/
+ UINT (STDMETHODCALLTYPE *GetAdapterCount)(
+ IWineD3D* This);
+
+ HRESULT (STDMETHODCALLTYPE *RegisterSoftwareDevice)(
+ IWineD3D* This,
+ void *pInitializeFunction);
+
+ HMONITOR (STDMETHODCALLTYPE *GetAdapterMonitor)(
+ IWineD3D* This,
+ UINT adapter_idx);
+
+ UINT (STDMETHODCALLTYPE *GetAdapterModeCount)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format);
+
+ HRESULT (STDMETHODCALLTYPE *EnumAdapterModes)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format,
+ UINT mode_idx,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayMode)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdapterDisplayModeEx)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODEEX *mode,
+ WINED3DDISPLAYROTATION *rotation);
+
+ HRESULT (STDMETHODCALLTYPE *GetAdapterIdentifier)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ DWORD flags,
+ WINED3DADAPTER_IDENTIFIER *identifier);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceMultiSampleType)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT surface_format,
+ BOOL windowed,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD *quality_levels);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDepthStencilMatch)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ WINED3DFORMAT render_target_format,
+ WINED3DFORMAT depth_stencil_format);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceType)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT display_format,
+ WINED3DFORMAT backbuffer_format,
+ BOOL windowed);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceFormat)(
+ IWineD3D* This,
+ UINT adaper_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ DWORD usage,
+ WINED3DRESOURCETYPE resource_type,
+ WINED3DFORMAT check_format,
+ WINED3DSURFTYPE surface_type);
+
+ HRESULT (STDMETHODCALLTYPE *CheckDeviceFormatConversion)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT source_format,
+ WINED3DFORMAT target_format);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DCAPS *caps);
+
+ HRESULT (STDMETHODCALLTYPE *CreateDevice)(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ HWND focus_window,
+ DWORD behaviour_flags,
+ IUnknown *parent,
+ IWineD3DDeviceParent *device_parent,
+ IWineD3DDevice **device);
+
+ END_INTERFACE
+} IWineD3DVtbl;
+interface IWineD3D {
+ CONST_VTBL IWineD3DVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3D_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3D_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3D_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3D_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3D methods ***/
+#define IWineD3D_GetAdapterCount(This) (This)->lpVtbl->GetAdapterCount(This)
+#define IWineD3D_RegisterSoftwareDevice(This,pInitializeFunction) (This)->lpVtbl->RegisterSoftwareDevice(This,pInitializeFunction)
+#define IWineD3D_GetAdapterMonitor(This,adapter_idx) (This)->lpVtbl->GetAdapterMonitor(This,adapter_idx)
+#define IWineD3D_GetAdapterModeCount(This,adapter_idx,format) (This)->lpVtbl->GetAdapterModeCount(This,adapter_idx,format)
+#define IWineD3D_EnumAdapterModes(This,adapter_idx,format,mode_idx,mode) (This)->lpVtbl->EnumAdapterModes(This,adapter_idx,format,mode_idx,mode)
+#define IWineD3D_GetAdapterDisplayMode(This,adapter_idx,mode) (This)->lpVtbl->GetAdapterDisplayMode(This,adapter_idx,mode)
+#define IWineD3D_GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation) (This)->lpVtbl->GetAdapterDisplayModeEx(This,adapter_idx,mode,rotation)
+#define IWineD3D_GetAdapterIdentifier(This,adapter_idx,flags,identifier) (This)->lpVtbl->GetAdapterIdentifier(This,adapter_idx,flags,identifier)
+#define IWineD3D_CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels) (This)->lpVtbl->CheckDeviceMultiSampleType(This,adapter_idx,device_type,surface_format,windowed,multisample_type,quality_levels)
+#define IWineD3D_CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format) (This)->lpVtbl->CheckDepthStencilMatch(This,adapter_idx,device_type,adapter_format,render_target_format,depth_stencil_format)
+#define IWineD3D_CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed) (This)->lpVtbl->CheckDeviceType(This,adapter_idx,device_type,display_format,backbuffer_format,windowed)
+#define IWineD3D_CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type) (This)->lpVtbl->CheckDeviceFormat(This,adaper_idx,device_type,adapter_format,usage,resource_type,check_format,surface_type)
+#define IWineD3D_CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format) (This)->lpVtbl->CheckDeviceFormatConversion(This,adapter_idx,device_type,source_format,target_format)
+#define IWineD3D_GetDeviceCaps(This,adapter_idx,device_type,caps) (This)->lpVtbl->GetDeviceCaps(This,adapter_idx,device_type,caps)
+#define IWineD3D_CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device) (This)->lpVtbl->CreateDevice(This,adapter_idx,device_type,focus_window,behaviour_flags,parent,device_parent,device)
+#endif
+
+#endif
+
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterCount_Proxy(
+ IWineD3D* This);
+void __RPC_STUB IWineD3D_GetAdapterCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_RegisterSoftwareDevice_Proxy(
+ IWineD3D* This,
+ void *pInitializeFunction);
+void __RPC_STUB IWineD3D_RegisterSoftwareDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HMONITOR STDMETHODCALLTYPE IWineD3D_GetAdapterMonitor_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx);
+void __RPC_STUB IWineD3D_GetAdapterMonitor_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3D_GetAdapterModeCount_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format);
+void __RPC_STUB IWineD3D_GetAdapterModeCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_EnumAdapterModes_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DFORMAT format,
+ UINT mode_idx,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_EnumAdapterModes_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayMode_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3D_GetAdapterDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterDisplayModeEx_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDISPLAYMODEEX *mode,
+ WINED3DDISPLAYROTATION *rotation);
+void __RPC_STUB IWineD3D_GetAdapterDisplayModeEx_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetAdapterIdentifier_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ DWORD flags,
+ WINED3DADAPTER_IDENTIFIER *identifier);
+void __RPC_STUB IWineD3D_GetAdapterIdentifier_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceMultiSampleType_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT surface_format,
+ BOOL windowed,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD *quality_levels);
+void __RPC_STUB IWineD3D_CheckDeviceMultiSampleType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDepthStencilMatch_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ WINED3DFORMAT render_target_format,
+ WINED3DFORMAT depth_stencil_format);
+void __RPC_STUB IWineD3D_CheckDepthStencilMatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceType_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT display_format,
+ WINED3DFORMAT backbuffer_format,
+ BOOL windowed);
+void __RPC_STUB IWineD3D_CheckDeviceType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormat_Proxy(
+ IWineD3D* This,
+ UINT adaper_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT adapter_format,
+ DWORD usage,
+ WINED3DRESOURCETYPE resource_type,
+ WINED3DFORMAT check_format,
+ WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3D_CheckDeviceFormat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CheckDeviceFormatConversion_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DFORMAT source_format,
+ WINED3DFORMAT target_format);
+void __RPC_STUB IWineD3D_CheckDeviceFormatConversion_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_GetDeviceCaps_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ WINED3DCAPS *caps);
+void __RPC_STUB IWineD3D_GetDeviceCaps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3D_CreateDevice_Proxy(
+ IWineD3D* This,
+ UINT adapter_idx,
+ WINED3DDEVTYPE device_type,
+ HWND focus_window,
+ DWORD behaviour_flags,
+ IUnknown *parent,
+ IWineD3DDeviceParent *device_parent,
+ IWineD3DDevice **device);
+void __RPC_STUB IWineD3D_CreateDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3D_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DResource interface
+ */
+#ifndef __IWineD3DResource_INTERFACE_DEFINED__
+#define __IWineD3DResource_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DResource, 0x1f3bfb34, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DResource : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE SetPrivateData(
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPrivateData(
+ REFGUID guid,
+ void *data,
+ DWORD *data_size) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE FreePrivateData(
+ REFGUID guid) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE SetPriority(
+ DWORD new_priority) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetPriority(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE PreLoad(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE UnLoad(
+ ) = 0;
+
+ virtual WINED3DRESOURCETYPE STDMETHODCALLTYPE GetType(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DResourceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DResource* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DResource* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DResource* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DResource* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DResource* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DResource* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DResource* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DResource* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DResource* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DResource* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DResource* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DResource* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ END_INTERFACE
+} IWineD3DResourceVtbl;
+interface IWineD3DResource {
+ CONST_VTBL IWineD3DResourceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DResource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DResource_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DResource_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DResource_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DResource_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DResource_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DResource_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DResource_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DResource_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DResource_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DResource_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DResource_GetType(This) (This)->lpVtbl->GetType(This)
+# ifdef VBOX_WITH_WDDM
+# define IWineD3DResource_SetShRcState(This, enmState) (This)->lpVtbl->SetShRcState(This, enmState)
+# endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DResource_SetPrivateData_Proxy(
+ IWineD3DResource* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+void __RPC_STUB IWineD3DResource_SetPrivateData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_GetPrivateData_Proxy(
+ IWineD3DResource* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+void __RPC_STUB IWineD3DResource_GetPrivateData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DResource_FreePrivateData_Proxy(
+ IWineD3DResource* This,
+ REFGUID guid);
+void __RPC_STUB IWineD3DResource_FreePrivateData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_SetPriority_Proxy(
+ IWineD3DResource* This,
+ DWORD new_priority);
+void __RPC_STUB IWineD3DResource_SetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DResource_GetPriority_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetPriority_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_PreLoad_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_PreLoad_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DResource_UnLoad_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_UnLoad_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DRESOURCETYPE STDMETHODCALLTYPE IWineD3DResource_GetType_Proxy(
+ IWineD3DResource* This);
+void __RPC_STUB IWineD3DResource_GetType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DResource_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DRendertargetView interface
+ */
+#ifndef __IWineD3DRendertargetView_INTERFACE_DEFINED__
+#define __IWineD3DRendertargetView_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DRendertargetView, 0xf7d8abf4, 0xfb93, 0x43e4, 0x9c,0x96, 0x46,0x18,0xcf,0x9b,0x3c,0xbc);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DRendertargetView : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetResource(
+ IWineD3DResource **resource) = 0;
+
+};
+#else
+typedef struct IWineD3DRendertargetViewVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DRendertargetView* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DRendertargetView* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DRendertargetView* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DRendertargetView* This,
+ IUnknown **parent);
+
+ /*** IWineD3DRendertargetView methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetResource)(
+ IWineD3DRendertargetView* This,
+ IWineD3DResource **resource);
+
+ END_INTERFACE
+} IWineD3DRendertargetViewVtbl;
+interface IWineD3DRendertargetView {
+ CONST_VTBL IWineD3DRendertargetViewVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DRendertargetView_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DRendertargetView_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DRendertargetView_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DRendertargetView_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DRendertargetView methods ***/
+#define IWineD3DRendertargetView_GetResource(This,resource) (This)->lpVtbl->GetResource(This,resource)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DRendertargetView_GetResource_Proxy(
+ IWineD3DRendertargetView* This,
+ IWineD3DResource **resource);
+void __RPC_STUB IWineD3DRendertargetView_GetResource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DRendertargetView_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPalette interface
+ */
+#ifndef __IWineD3DPalette_INTERFACE_DEFINED__
+#define __IWineD3DPalette_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPalette, 0xf756720c, 0x32b9, 0x4439, 0xb5,0xa3, 0x1d,0x6c,0x97,0x03,0x7d,0x9e);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPalette : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetEntries(
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ PALETTEENTRY *entries) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCaps(
+ DWORD *caps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetEntries(
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ const PALETTEENTRY *entries) = 0;
+
+};
+#else
+typedef struct IWineD3DPaletteVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DPalette* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DPalette* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DPalette* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DPalette* This,
+ IUnknown **parent);
+
+ /*** IWineD3DPalette methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetEntries)(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ PALETTEENTRY *entries);
+
+ HRESULT (STDMETHODCALLTYPE *GetCaps)(
+ IWineD3DPalette* This,
+ DWORD *caps);
+
+ HRESULT (STDMETHODCALLTYPE *SetEntries)(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ const PALETTEENTRY *entries);
+
+ END_INTERFACE
+} IWineD3DPaletteVtbl;
+interface IWineD3DPalette {
+ CONST_VTBL IWineD3DPaletteVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPalette_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPalette_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPalette_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPalette_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DPalette methods ***/
+#define IWineD3DPalette_GetEntries(This,flags,start,count,entries) (This)->lpVtbl->GetEntries(This,flags,start,count,entries)
+#define IWineD3DPalette_GetCaps(This,caps) (This)->lpVtbl->GetCaps(This,caps)
+#define IWineD3DPalette_SetEntries(This,flags,start,count,entries) (This)->lpVtbl->SetEntries(This,flags,start,count,entries)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetEntries_Proxy(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_GetEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_GetCaps_Proxy(
+ IWineD3DPalette* This,
+ DWORD *caps);
+void __RPC_STUB IWineD3DPalette_GetCaps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DPalette_SetEntries_Proxy(
+ IWineD3DPalette* This,
+ DWORD flags,
+ DWORD start,
+ DWORD count,
+ const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DPalette_SetEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DPalette_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DClipper interface
+ */
+#ifndef __IWineD3DClipper_INTERFACE_DEFINED__
+#define __IWineD3DClipper_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DClipper, 0x8f2bceb1, 0xd338, 0x488c, 0xab,0x7f, 0x0e,0xc9,0x80,0xbf,0x5d,0x2d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DClipper : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetClipList(
+ const RECT *rect,
+ RGNDATA *clip_list,
+ DWORD *clip_list_size) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetHWnd(
+ HWND *hwnd) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsClipListChanged(
+ BOOL *changed) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipList(
+ const RGNDATA *clip_list,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetHWnd(
+ DWORD flags,
+ HWND hwnd) = 0;
+
+};
+#else
+typedef struct IWineD3DClipperVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DClipper* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DClipper* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DClipper* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DClipper* This,
+ IUnknown **parent);
+
+ /*** IWineD3DClipper methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetClipList)(
+ IWineD3DClipper* This,
+ const RECT *rect,
+ RGNDATA *clip_list,
+ DWORD *clip_list_size);
+
+ HRESULT (STDMETHODCALLTYPE *GetHWnd)(
+ IWineD3DClipper* This,
+ HWND *hwnd);
+
+ HRESULT (STDMETHODCALLTYPE *IsClipListChanged)(
+ IWineD3DClipper* This,
+ BOOL *changed);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipList)(
+ IWineD3DClipper* This,
+ const RGNDATA *clip_list,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *SetHWnd)(
+ IWineD3DClipper* This,
+ DWORD flags,
+ HWND hwnd);
+
+ END_INTERFACE
+} IWineD3DClipperVtbl;
+interface IWineD3DClipper {
+ CONST_VTBL IWineD3DClipperVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DClipper_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DClipper_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DClipper_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DClipper_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DClipper methods ***/
+#define IWineD3DClipper_GetClipList(This,rect,clip_list,clip_list_size) (This)->lpVtbl->GetClipList(This,rect,clip_list,clip_list_size)
+#define IWineD3DClipper_GetHWnd(This,hwnd) (This)->lpVtbl->GetHWnd(This,hwnd)
+#define IWineD3DClipper_IsClipListChanged(This,changed) (This)->lpVtbl->IsClipListChanged(This,changed)
+#define IWineD3DClipper_SetClipList(This,clip_list,flags) (This)->lpVtbl->SetClipList(This,clip_list,flags)
+#define IWineD3DClipper_SetHWnd(This,flags,hwnd) (This)->lpVtbl->SetHWnd(This,flags,hwnd)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetClipList_Proxy(
+ IWineD3DClipper* This,
+ const RECT *rect,
+ RGNDATA *clip_list,
+ DWORD *clip_list_size);
+void __RPC_STUB IWineD3DClipper_GetClipList_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_GetHWnd_Proxy(
+ IWineD3DClipper* This,
+ HWND *hwnd);
+void __RPC_STUB IWineD3DClipper_GetHWnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_IsClipListChanged_Proxy(
+ IWineD3DClipper* This,
+ BOOL *changed);
+void __RPC_STUB IWineD3DClipper_IsClipListChanged_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetClipList_Proxy(
+ IWineD3DClipper* This,
+ const RGNDATA *clip_list,
+ DWORD flags);
+void __RPC_STUB IWineD3DClipper_SetClipList_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DClipper_SetHWnd_Proxy(
+ IWineD3DClipper* This,
+ DWORD flags,
+ HWND hwnd);
+void __RPC_STUB IWineD3DClipper_SetHWnd_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DClipper_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSurface interface
+ */
+#ifndef __IWineD3DSurface_INTERFACE_DEFINED__
+#define __IWineD3DSurface_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSurface, 0x37cd5526, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSurface : public IWineD3DResource
+{
+ virtual HRESULT STDMETHODCALLTYPE GetContainer(
+ REFIID riid,
+ void **container) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDesc(
+ WINED3DSURFACE_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRect(
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDC(
+ HDC *dc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
+ HDC dc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Flip(
+ IWineD3DSurface *override,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Blt(
+ const RECT *dst_rect,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD flags,
+ const WINEDDBLTFX *blt_fx,
+ WINED3DTEXTUREFILTERTYPE filter) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBltStatus(
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFlipStatus(
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE IsLost(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Restore(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BltFast(
+ DWORD dst_x,
+ DWORD dst_y,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD trans) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPalette(
+ IWineD3DPalette **palette) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPalette(
+ IWineD3DPalette *palette) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RealizePalette(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetColorKey(
+ DWORD flags,
+ const WINEDDCOLORKEY *color_key) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetPitch(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMem(
+ void *mem) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetOverlayPosition(
+ LONG x,
+ LONG y) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetOverlayPosition(
+ LONG *x,
+ LONG *y) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateOverlayZOrder(
+ DWORD flags,
+ IWineD3DSurface *ref) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateOverlay(
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const RECT *dst_rect,
+ DWORD flags,
+ const WINEDDOVERLAYFX *fx) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipper(
+ IWineD3DClipper *clipper) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipper(
+ IWineD3DClipper **clipper) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+ BOOL srgb_mode) = 0;
+
+ virtual void STDMETHODCALLTYPE BindTexture(
+ BOOL srgb) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SaveSnapshot(
+ const char *filename) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetContainer(
+ IWineD3DBase *container) = 0;
+
+ virtual const void * STDMETHODCALLTYPE GetData(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFormat(
+ WINED3DFORMAT format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE PrivateSetup(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE ModifyLocation(
+ DWORD location,
+ BOOL persistent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LoadLocation(
+ DWORD location,
+ const RECT *rect) = 0;
+
+ virtual WINED3DSURFTYPE STDMETHODCALLTYPE GetImplType(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawOverlay(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DSurfaceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DSurface* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DSurface* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DSurface* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DSurface* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DSurface* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DSurface* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DSurface* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DSurface* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DSurface* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DSurface* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DSurface* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DSurface* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DSurface methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetContainer)(
+ IWineD3DSurface* This,
+ REFIID riid,
+ void **container);
+
+ HRESULT (STDMETHODCALLTYPE *GetDesc)(
+ IWineD3DSurface* This,
+ WINED3DSURFACE_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *LockRect)(
+ IWineD3DSurface* This,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetDC)(
+ IWineD3DSurface* This,
+ HDC *dc);
+
+ HRESULT (STDMETHODCALLTYPE *ReleaseDC)(
+ IWineD3DSurface* This,
+ HDC dc);
+
+ HRESULT (STDMETHODCALLTYPE *Flip)(
+ IWineD3DSurface* This,
+ IWineD3DSurface *override,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *Blt)(
+ IWineD3DSurface* This,
+ const RECT *dst_rect,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD flags,
+ const WINEDDBLTFX *blt_fx,
+ WINED3DTEXTUREFILTERTYPE filter);
+
+ HRESULT (STDMETHODCALLTYPE *GetBltStatus)(
+ IWineD3DSurface* This,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetFlipStatus)(
+ IWineD3DSurface* This,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *IsLost)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *Restore)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *BltFast)(
+ IWineD3DSurface* This,
+ DWORD dst_x,
+ DWORD dst_y,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD trans);
+
+ HRESULT (STDMETHODCALLTYPE *GetPalette)(
+ IWineD3DSurface* This,
+ IWineD3DPalette **palette);
+
+ HRESULT (STDMETHODCALLTYPE *SetPalette)(
+ IWineD3DSurface* This,
+ IWineD3DPalette *palette);
+
+ HRESULT (STDMETHODCALLTYPE *RealizePalette)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetColorKey)(
+ IWineD3DSurface* This,
+ DWORD flags,
+ const WINEDDCOLORKEY *color_key);
+
+ DWORD (STDMETHODCALLTYPE *GetPitch)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetMem)(
+ IWineD3DSurface* This,
+ void *mem);
+
+ HRESULT (STDMETHODCALLTYPE *SetOverlayPosition)(
+ IWineD3DSurface* This,
+ LONG x,
+ LONG y);
+
+ HRESULT (STDMETHODCALLTYPE *GetOverlayPosition)(
+ IWineD3DSurface* This,
+ LONG *x,
+ LONG *y);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateOverlayZOrder)(
+ IWineD3DSurface* This,
+ DWORD flags,
+ IWineD3DSurface *ref);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateOverlay)(
+ IWineD3DSurface* This,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const RECT *dst_rect,
+ DWORD flags,
+ const WINEDDOVERLAYFX *fx);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipper)(
+ IWineD3DSurface* This,
+ IWineD3DClipper *clipper);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipper)(
+ IWineD3DSurface* This,
+ IWineD3DClipper **clipper);
+
+ HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+ IWineD3DSurface* This,
+ BOOL srgb_mode);
+
+ void (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DSurface* This,
+ BOOL srgb);
+
+ HRESULT (STDMETHODCALLTYPE *SaveSnapshot)(
+ IWineD3DSurface* This,
+ const char *filename);
+
+ HRESULT (STDMETHODCALLTYPE *SetContainer)(
+ IWineD3DSurface* This,
+ IWineD3DBase *container);
+
+ const void * (STDMETHODCALLTYPE *GetData)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetFormat)(
+ IWineD3DSurface* This,
+ WINED3DFORMAT format);
+
+ HRESULT (STDMETHODCALLTYPE *PrivateSetup)(
+ IWineD3DSurface* This);
+
+ void (STDMETHODCALLTYPE *ModifyLocation)(
+ IWineD3DSurface* This,
+ DWORD location,
+ BOOL persistent);
+
+ HRESULT (STDMETHODCALLTYPE *LoadLocation)(
+ IWineD3DSurface* This,
+ DWORD location,
+ const RECT *rect);
+
+ WINED3DSURFTYPE (STDMETHODCALLTYPE *GetImplType)(
+ IWineD3DSurface* This);
+
+ HRESULT (STDMETHODCALLTYPE *DrawOverlay)(
+ IWineD3DSurface* This);
+
+ END_INTERFACE
+} IWineD3DSurfaceVtbl;
+interface IWineD3DSurface {
+ CONST_VTBL IWineD3DSurfaceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSurface_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSurface_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSurface_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSurface_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DSurface_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DSurface_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DSurface_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DSurface_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DSurface_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DSurface_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DSurface_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DSurface_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DSurface methods ***/
+#define IWineD3DSurface_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DSurface_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DSurface_LockRect(This,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,locked_rect,rect,flags)
+#define IWineD3DSurface_UnlockRect(This) (This)->lpVtbl->UnlockRect(This)
+#define IWineD3DSurface_GetDC(This,dc) (This)->lpVtbl->GetDC(This,dc)
+#define IWineD3DSurface_ReleaseDC(This,dc) (This)->lpVtbl->ReleaseDC(This,dc)
+#define IWineD3DSurface_Flip(This,override,flags) (This)->lpVtbl->Flip(This,override,flags)
+#define IWineD3DSurface_Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter) (This)->lpVtbl->Blt(This,dst_rect,src_surface,src_rect,flags,blt_fx,filter)
+#define IWineD3DSurface_GetBltStatus(This,flags) (This)->lpVtbl->GetBltStatus(This,flags)
+#define IWineD3DSurface_GetFlipStatus(This,flags) (This)->lpVtbl->GetFlipStatus(This,flags)
+#define IWineD3DSurface_IsLost(This) (This)->lpVtbl->IsLost(This)
+#define IWineD3DSurface_Restore(This) (This)->lpVtbl->Restore(This)
+#define IWineD3DSurface_BltFast(This,dst_x,dst_y,src_surface,src_rect,trans) (This)->lpVtbl->BltFast(This,dst_x,dst_y,src_surface,src_rect,trans)
+#define IWineD3DSurface_GetPalette(This,palette) (This)->lpVtbl->GetPalette(This,palette)
+#define IWineD3DSurface_SetPalette(This,palette) (This)->lpVtbl->SetPalette(This,palette)
+#define IWineD3DSurface_RealizePalette(This) (This)->lpVtbl->RealizePalette(This)
+#define IWineD3DSurface_SetColorKey(This,flags,color_key) (This)->lpVtbl->SetColorKey(This,flags,color_key)
+#define IWineD3DSurface_GetPitch(This) (This)->lpVtbl->GetPitch(This)
+#define IWineD3DSurface_SetMem(This,mem) (This)->lpVtbl->SetMem(This,mem)
+#define IWineD3DSurface_SetOverlayPosition(This,x,y) (This)->lpVtbl->SetOverlayPosition(This,x,y)
+#define IWineD3DSurface_GetOverlayPosition(This,x,y) (This)->lpVtbl->GetOverlayPosition(This,x,y)
+#define IWineD3DSurface_UpdateOverlayZOrder(This,flags,ref) (This)->lpVtbl->UpdateOverlayZOrder(This,flags,ref)
+#define IWineD3DSurface_UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx) (This)->lpVtbl->UpdateOverlay(This,src_rect,dst_surface,dst_rect,flags,fx)
+#define IWineD3DSurface_SetClipper(This,clipper) (This)->lpVtbl->SetClipper(This,clipper)
+#define IWineD3DSurface_GetClipper(This,clipper) (This)->lpVtbl->GetClipper(This,clipper)
+#define IWineD3DSurface_LoadTexture(This,srgb_mode) (This)->lpVtbl->LoadTexture(This,srgb_mode)
+#define IWineD3DSurface_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DSurface_SaveSnapshot(This,filename) (This)->lpVtbl->SaveSnapshot(This,filename)
+#define IWineD3DSurface_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#define IWineD3DSurface_GetData(This) (This)->lpVtbl->GetData(This)
+#define IWineD3DSurface_SetFormat(This,format) (This)->lpVtbl->SetFormat(This,format)
+#define IWineD3DSurface_PrivateSetup(This) (This)->lpVtbl->PrivateSetup(This)
+#define IWineD3DSurface_ModifyLocation(This,location,persistent) (This)->lpVtbl->ModifyLocation(This,location,persistent)
+#define IWineD3DSurface_LoadLocation(This,location,rect) (This)->lpVtbl->LoadLocation(This,location,rect)
+#define IWineD3DSurface_GetImplType(This) (This)->lpVtbl->GetImplType(This)
+#define IWineD3DSurface_DrawOverlay(This) (This)->lpVtbl->DrawOverlay(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetContainer_Proxy(
+ IWineD3DSurface* This,
+ REFIID riid,
+ void **container);
+void __RPC_STUB IWineD3DSurface_GetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDesc_Proxy(
+ IWineD3DSurface* This,
+ WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DSurface_GetDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LockRect_Proxy(
+ IWineD3DSurface* This,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_LockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UnlockRect_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_UnlockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetDC_Proxy(
+ IWineD3DSurface* This,
+ HDC *dc);
+void __RPC_STUB IWineD3DSurface_GetDC_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_ReleaseDC_Proxy(
+ IWineD3DSurface* This,
+ HDC dc);
+void __RPC_STUB IWineD3DSurface_ReleaseDC_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Flip_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DSurface *override,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_Flip_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Blt_Proxy(
+ IWineD3DSurface* This,
+ const RECT *dst_rect,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD flags,
+ const WINEDDBLTFX *blt_fx,
+ WINED3DTEXTUREFILTERTYPE filter);
+void __RPC_STUB IWineD3DSurface_Blt_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetBltStatus_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetBltStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetFlipStatus_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags);
+void __RPC_STUB IWineD3DSurface_GetFlipStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_IsLost_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_IsLost_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_Restore_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_Restore_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_BltFast_Proxy(
+ IWineD3DSurface* This,
+ DWORD dst_x,
+ DWORD dst_y,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ DWORD trans);
+void __RPC_STUB IWineD3DSurface_BltFast_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetPalette_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DPalette **palette);
+void __RPC_STUB IWineD3DSurface_GetPalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetPalette_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DPalette *palette);
+void __RPC_STUB IWineD3DSurface_SetPalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_RealizePalette_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_RealizePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetColorKey_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags,
+ const WINEDDCOLORKEY *color_key);
+void __RPC_STUB IWineD3DSurface_SetColorKey_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DSurface_GetPitch_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetPitch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetMem_Proxy(
+ IWineD3DSurface* This,
+ void *mem);
+void __RPC_STUB IWineD3DSurface_SetMem_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetOverlayPosition_Proxy(
+ IWineD3DSurface* This,
+ LONG x,
+ LONG y);
+void __RPC_STUB IWineD3DSurface_SetOverlayPosition_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetOverlayPosition_Proxy(
+ IWineD3DSurface* This,
+ LONG *x,
+ LONG *y);
+void __RPC_STUB IWineD3DSurface_GetOverlayPosition_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlayZOrder_Proxy(
+ IWineD3DSurface* This,
+ DWORD flags,
+ IWineD3DSurface *ref);
+void __RPC_STUB IWineD3DSurface_UpdateOverlayZOrder_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_UpdateOverlay_Proxy(
+ IWineD3DSurface* This,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const RECT *dst_rect,
+ DWORD flags,
+ const WINEDDOVERLAYFX *fx);
+void __RPC_STUB IWineD3DSurface_UpdateOverlay_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetClipper_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DClipper *clipper);
+void __RPC_STUB IWineD3DSurface_SetClipper_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_GetClipper_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DClipper **clipper);
+void __RPC_STUB IWineD3DSurface_GetClipper_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadTexture_Proxy(
+ IWineD3DSurface* This,
+ BOOL srgb_mode);
+void __RPC_STUB IWineD3DSurface_LoadTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_BindTexture_Proxy(
+ IWineD3DSurface* This,
+ BOOL srgb);
+void __RPC_STUB IWineD3DSurface_BindTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SaveSnapshot_Proxy(
+ IWineD3DSurface* This,
+ const char *filename);
+void __RPC_STUB IWineD3DSurface_SaveSnapshot_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetContainer_Proxy(
+ IWineD3DSurface* This,
+ IWineD3DBase *container);
+void __RPC_STUB IWineD3DSurface_SetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+const void * STDMETHODCALLTYPE IWineD3DSurface_GetData_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_SetFormat_Proxy(
+ IWineD3DSurface* This,
+ WINED3DFORMAT format);
+void __RPC_STUB IWineD3DSurface_SetFormat_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_PrivateSetup_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_PrivateSetup_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DSurface_ModifyLocation_Proxy(
+ IWineD3DSurface* This,
+ DWORD location,
+ BOOL persistent);
+void __RPC_STUB IWineD3DSurface_ModifyLocation_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_LoadLocation_Proxy(
+ IWineD3DSurface* This,
+ DWORD location,
+ const RECT *rect);
+void __RPC_STUB IWineD3DSurface_LoadLocation_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DSURFTYPE STDMETHODCALLTYPE IWineD3DSurface_GetImplType_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_GetImplType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSurface_DrawOverlay_Proxy(
+ IWineD3DSurface* This);
+void __RPC_STUB IWineD3DSurface_DrawOverlay_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DSurface_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolume interface
+ */
+#ifndef __IWineD3DVolume_INTERFACE_DEFINED__
+#define __IWineD3DVolume_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolume, 0x24769ed8, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolume : public IWineD3DResource
+{
+ virtual HRESULT STDMETHODCALLTYPE GetContainer(
+ REFIID riid,
+ void **container) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDesc(
+ WINED3DVOLUME_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockBox(
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LoadTexture(
+ int gl_level,
+ BOOL srgb_mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetContainer(
+ IWineD3DBase *container) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVolume* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVolume* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVolume* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVolume* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DVolume* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DVolume* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DVolume* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DVolume* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DVolume* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DVolume* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DVolume* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DVolume* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DVolume methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetContainer)(
+ IWineD3DVolume* This,
+ REFIID riid,
+ void **container);
+
+ HRESULT (STDMETHODCALLTYPE *GetDesc)(
+ IWineD3DVolume* This,
+ WINED3DVOLUME_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *LockBox)(
+ IWineD3DVolume* This,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+ IWineD3DVolume* This);
+
+ HRESULT (STDMETHODCALLTYPE *LoadTexture)(
+ IWineD3DVolume* This,
+ int gl_level,
+ BOOL srgb_mode);
+
+ HRESULT (STDMETHODCALLTYPE *SetContainer)(
+ IWineD3DVolume* This,
+ IWineD3DBase *container);
+
+ END_INTERFACE
+} IWineD3DVolumeVtbl;
+interface IWineD3DVolume {
+ CONST_VTBL IWineD3DVolumeVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolume_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolume_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolume_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolume_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolume_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolume_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolume_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolume_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolume_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolume_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolume_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolume_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DVolume methods ***/
+#define IWineD3DVolume_GetContainer(This,riid,container) (This)->lpVtbl->GetContainer(This,riid,container)
+#define IWineD3DVolume_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#define IWineD3DVolume_LockBox(This,locked_box,box,flags) (This)->lpVtbl->LockBox(This,locked_box,box,flags)
+#define IWineD3DVolume_UnlockBox(This) (This)->lpVtbl->UnlockBox(This)
+#define IWineD3DVolume_LoadTexture(This,gl_level,srgb_mode) (This)->lpVtbl->LoadTexture(This,gl_level,srgb_mode)
+#define IWineD3DVolume_SetContainer(This,container) (This)->lpVtbl->SetContainer(This,container)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetContainer_Proxy(
+ IWineD3DVolume* This,
+ REFIID riid,
+ void **container);
+void __RPC_STUB IWineD3DVolume_GetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_GetDesc_Proxy(
+ IWineD3DVolume* This,
+ WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolume_GetDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LockBox_Proxy(
+ IWineD3DVolume* This,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+void __RPC_STUB IWineD3DVolume_LockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_UnlockBox_Proxy(
+ IWineD3DVolume* This);
+void __RPC_STUB IWineD3DVolume_UnlockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_LoadTexture_Proxy(
+ IWineD3DVolume* This,
+ int gl_level,
+ BOOL srgb_mode);
+void __RPC_STUB IWineD3DVolume_LoadTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolume_SetContainer_Proxy(
+ IWineD3DVolume* This,
+ IWineD3DBase *container);
+void __RPC_STUB IWineD3DVolume_SetContainer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DVolume_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseTexture interface
+ */
+#ifndef __IWineD3DBaseTexture_INTERFACE_DEFINED__
+#define __IWineD3DBaseTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseTexture, 0x3c2aebf6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseTexture : public IWineD3DResource
+{
+ virtual DWORD STDMETHODCALLTYPE SetLOD(
+ DWORD new_lod) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetLOD(
+ ) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetLevelCount(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetAutoGenFilterType(
+ WINED3DTEXTUREFILTERTYPE filter_type) = 0;
+
+ virtual WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE GetAutoGenFilterType(
+ ) = 0;
+
+ virtual void STDMETHODCALLTYPE GenerateMipSubLevels(
+ ) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE SetDirty(
+ BOOL dirty) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE GetDirty(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BindTexture(
+ BOOL srgb) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetTextureDimensions(
+ ) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE IsCondNP2(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBaseTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBaseTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBaseTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBaseTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DBaseTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DBaseTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DBaseTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DBaseTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DBaseTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DBaseTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DBaseTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DBaseTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DBaseTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DBaseTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DBaseTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DBaseTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DBaseTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DBaseTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DBaseTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DBaseTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DBaseTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DBaseTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DBaseTexture* This);
+
+ END_INTERFACE
+} IWineD3DBaseTextureVtbl;
+interface IWineD3DBaseTexture {
+ CONST_VTBL IWineD3DBaseTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBaseTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBaseTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBaseTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBaseTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBaseTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBaseTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBaseTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBaseTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DBaseTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DBaseTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DBaseTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DBaseTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DBaseTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DBaseTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DBaseTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DBaseTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DBaseTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DBaseTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DBaseTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+#endif
+
+#endif
+
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_SetLOD_Proxy(
+ IWineD3DBaseTexture* This,
+ DWORD new_lod);
+void __RPC_STUB IWineD3DBaseTexture_SetLOD_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLOD_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLOD_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DBaseTexture_GetLevelCount_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetLevelCount_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_SetAutoGenFilterType_Proxy(
+ IWineD3DBaseTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+void __RPC_STUB IWineD3DBaseTexture_SetAutoGenFilterType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DTEXTUREFILTERTYPE STDMETHODCALLTYPE IWineD3DBaseTexture_GetAutoGenFilterType_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetAutoGenFilterType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DBaseTexture_GenerateMipSubLevels_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GenerateMipSubLevels_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_SetDirty_Proxy(
+ IWineD3DBaseTexture* This,
+ BOOL dirty);
+void __RPC_STUB IWineD3DBaseTexture_SetDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_GetDirty_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetDirty_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBaseTexture_BindTexture_Proxy(
+ IWineD3DBaseTexture* This,
+ BOOL srgb);
+void __RPC_STUB IWineD3DBaseTexture_BindTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DBaseTexture_GetTextureDimensions_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_GetTextureDimensions_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DBaseTexture_IsCondNP2_Proxy(
+ IWineD3DBaseTexture* This);
+void __RPC_STUB IWineD3DBaseTexture_IsCondNP2_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBaseTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DTexture interface
+ */
+#ifndef __IWineD3DTexture_INTERFACE_DEFINED__
+#define __IWineD3DTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DTexture, 0x3e72cc1c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DTexture : public IWineD3DBaseTexture
+{
+ virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+ UINT level,
+ WINED3DSURFACE_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSurfaceLevel(
+ UINT level,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRect(
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+ UINT level) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+ const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DTexture* This);
+
+ /*** IWineD3DTexture methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *GetSurfaceLevel)(
+ IWineD3DTexture* This,
+ UINT level,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *LockRect)(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+ IWineD3DTexture* This,
+ UINT level);
+
+ HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+ IWineD3DTexture* This,
+ const RECT *dirty_rect);
+
+ END_INTERFACE
+} IWineD3DTextureVtbl;
+interface IWineD3DTexture {
+ CONST_VTBL IWineD3DTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DTexture methods ***/
+#define IWineD3DTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DTexture_GetSurfaceLevel(This,level,surface) (This)->lpVtbl->GetSurfaceLevel(This,level,surface)
+#define IWineD3DTexture_LockRect(This,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,level,locked_rect,rect,flags)
+#define IWineD3DTexture_UnlockRect(This,level) (This)->lpVtbl->UnlockRect(This,level)
+#define IWineD3DTexture_AddDirtyRect(This,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetLevelDesc_Proxy(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DTexture_GetLevelDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_GetSurfaceLevel_Proxy(
+ IWineD3DTexture* This,
+ UINT level,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DTexture_GetSurfaceLevel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_LockRect_Proxy(
+ IWineD3DTexture* This,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+void __RPC_STUB IWineD3DTexture_LockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_UnlockRect_Proxy(
+ IWineD3DTexture* This,
+ UINT level);
+void __RPC_STUB IWineD3DTexture_UnlockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DTexture_AddDirtyRect_Proxy(
+ IWineD3DTexture* This,
+ const RECT *dirty_rect);
+void __RPC_STUB IWineD3DTexture_AddDirtyRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DCubeTexture interface
+ */
+#ifndef __IWineD3DCubeTexture_INTERFACE_DEFINED__
+#define __IWineD3DCubeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DCubeTexture, 0x41752900, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DCubeTexture : public IWineD3DBaseTexture
+{
+ virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+ UINT level,
+ WINED3DSURFACE_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCubeMapSurface(
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockRect(
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockRect(
+ WINED3DCUBEMAP_FACES face,
+ UINT level) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddDirtyRect(
+ WINED3DCUBEMAP_FACES face,
+ const RECT *dirty_rect) = 0;
+
+};
+#else
+typedef struct IWineD3DCubeTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DCubeTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DCubeTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DCubeTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DCubeTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DCubeTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DCubeTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DCubeTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DCubeTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DCubeTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DCubeTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DCubeTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DCubeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DCubeTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DCubeTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DCubeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DCubeTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DCubeTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DCubeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DCubeTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DCubeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DCubeTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DCubeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DCubeTexture* This);
+
+ /*** IWineD3DCubeTexture methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+ IWineD3DCubeTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *GetCubeMapSurface)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *LockRect)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockRect)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level);
+
+ HRESULT (STDMETHODCALLTYPE *AddDirtyRect)(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ const RECT *dirty_rect);
+
+ END_INTERFACE
+} IWineD3DCubeTextureVtbl;
+interface IWineD3DCubeTexture {
+ CONST_VTBL IWineD3DCubeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DCubeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DCubeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DCubeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DCubeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DCubeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DCubeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DCubeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DCubeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DCubeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DCubeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DCubeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DCubeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DCubeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DCubeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DCubeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DCubeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DCubeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DCubeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DCubeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DCubeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DCubeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DCubeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DCubeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DCubeTexture methods ***/
+#define IWineD3DCubeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DCubeTexture_GetCubeMapSurface(This,face,level,surface) (This)->lpVtbl->GetCubeMapSurface(This,face,level,surface)
+#define IWineD3DCubeTexture_LockRect(This,face,level,locked_rect,rect,flags) (This)->lpVtbl->LockRect(This,face,level,locked_rect,rect,flags)
+#define IWineD3DCubeTexture_UnlockRect(This,face,level) (This)->lpVtbl->UnlockRect(This,face,level)
+#define IWineD3DCubeTexture_AddDirtyRect(This,face,dirty_rect) (This)->lpVtbl->AddDirtyRect(This,face,dirty_rect)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetLevelDesc_Proxy(
+ IWineD3DCubeTexture* This,
+ UINT level,
+ WINED3DSURFACE_DESC *desc);
+void __RPC_STUB IWineD3DCubeTexture_GetLevelDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_GetCubeMapSurface_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DCubeTexture_GetCubeMapSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_LockRect_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level,
+ WINED3DLOCKED_RECT *locked_rect,
+ const RECT *rect,
+ DWORD flags);
+void __RPC_STUB IWineD3DCubeTexture_LockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_UnlockRect_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ UINT level);
+void __RPC_STUB IWineD3DCubeTexture_UnlockRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DCubeTexture_AddDirtyRect_Proxy(
+ IWineD3DCubeTexture* This,
+ WINED3DCUBEMAP_FACES face,
+ const RECT *dirty_rect);
+void __RPC_STUB IWineD3DCubeTexture_AddDirtyRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DCubeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture interface
+ */
+#ifndef __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+#define __IWineD3DVolumeTexture_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVolumeTexture, 0x7b39470c, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVolumeTexture : public IWineD3DBaseTexture
+{
+ virtual HRESULT STDMETHODCALLTYPE GetLevelDesc(
+ UINT level,
+ WINED3DVOLUME_DESC *desc) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVolumeLevel(
+ UINT level,
+ IWineD3DVolume **volume) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE LockBox(
+ UINT level,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UnlockBox(
+ UINT level) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddDirtyBox(
+ const WINED3DBOX *dirty_box) = 0;
+
+};
+#else
+typedef struct IWineD3DVolumeTextureVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVolumeTexture* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVolumeTexture* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVolumeTexture* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVolumeTexture* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DVolumeTexture* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DVolumeTexture* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DVolumeTexture* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DVolumeTexture* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DVolumeTexture* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DVolumeTexture* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DVolumeTexture* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DVolumeTexture* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBaseTexture methods ***/
+ DWORD (STDMETHODCALLTYPE *SetLOD)(
+ IWineD3DVolumeTexture* This,
+ DWORD new_lod);
+
+ DWORD (STDMETHODCALLTYPE *GetLOD)(
+ IWineD3DVolumeTexture* This);
+
+ DWORD (STDMETHODCALLTYPE *GetLevelCount)(
+ IWineD3DVolumeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetAutoGenFilterType)(
+ IWineD3DVolumeTexture* This,
+ WINED3DTEXTUREFILTERTYPE filter_type);
+
+ WINED3DTEXTUREFILTERTYPE (STDMETHODCALLTYPE *GetAutoGenFilterType)(
+ IWineD3DVolumeTexture* This);
+
+ void (STDMETHODCALLTYPE *GenerateMipSubLevels)(
+ IWineD3DVolumeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *SetDirty)(
+ IWineD3DVolumeTexture* This,
+ BOOL dirty);
+
+ BOOL (STDMETHODCALLTYPE *GetDirty)(
+ IWineD3DVolumeTexture* This);
+
+ HRESULT (STDMETHODCALLTYPE *BindTexture)(
+ IWineD3DVolumeTexture* This,
+ BOOL srgb);
+
+ UINT (STDMETHODCALLTYPE *GetTextureDimensions)(
+ IWineD3DVolumeTexture* This);
+
+ BOOL (STDMETHODCALLTYPE *IsCondNP2)(
+ IWineD3DVolumeTexture* This);
+
+ /*** IWineD3DVolumeTexture methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetLevelDesc)(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DVOLUME_DESC *desc);
+
+ HRESULT (STDMETHODCALLTYPE *GetVolumeLevel)(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ IWineD3DVolume **volume);
+
+ HRESULT (STDMETHODCALLTYPE *LockBox)(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *UnlockBox)(
+ IWineD3DVolumeTexture* This,
+ UINT level);
+
+ HRESULT (STDMETHODCALLTYPE *AddDirtyBox)(
+ IWineD3DVolumeTexture* This,
+ const WINED3DBOX *dirty_box);
+
+ END_INTERFACE
+} IWineD3DVolumeTextureVtbl;
+interface IWineD3DVolumeTexture {
+ CONST_VTBL IWineD3DVolumeTextureVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVolumeTexture_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVolumeTexture_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVolumeTexture_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVolumeTexture_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DVolumeTexture_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DVolumeTexture_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DVolumeTexture_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DVolumeTexture_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DVolumeTexture_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DVolumeTexture_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DVolumeTexture_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DVolumeTexture_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBaseTexture methods ***/
+#define IWineD3DVolumeTexture_SetLOD(This,new_lod) (This)->lpVtbl->SetLOD(This,new_lod)
+#define IWineD3DVolumeTexture_GetLOD(This) (This)->lpVtbl->GetLOD(This)
+#define IWineD3DVolumeTexture_GetLevelCount(This) (This)->lpVtbl->GetLevelCount(This)
+#define IWineD3DVolumeTexture_SetAutoGenFilterType(This,filter_type) (This)->lpVtbl->SetAutoGenFilterType(This,filter_type)
+#define IWineD3DVolumeTexture_GetAutoGenFilterType(This) (This)->lpVtbl->GetAutoGenFilterType(This)
+#define IWineD3DVolumeTexture_GenerateMipSubLevels(This) (This)->lpVtbl->GenerateMipSubLevels(This)
+#define IWineD3DVolumeTexture_SetDirty(This,dirty) (This)->lpVtbl->SetDirty(This,dirty)
+#define IWineD3DVolumeTexture_GetDirty(This) (This)->lpVtbl->GetDirty(This)
+#define IWineD3DVolumeTexture_BindTexture(This,srgb) (This)->lpVtbl->BindTexture(This,srgb)
+#define IWineD3DVolumeTexture_GetTextureDimensions(This) (This)->lpVtbl->GetTextureDimensions(This)
+#define IWineD3DVolumeTexture_IsCondNP2(This) (This)->lpVtbl->IsCondNP2(This)
+/*** IWineD3DVolumeTexture methods ***/
+#define IWineD3DVolumeTexture_GetLevelDesc(This,level,desc) (This)->lpVtbl->GetLevelDesc(This,level,desc)
+#define IWineD3DVolumeTexture_GetVolumeLevel(This,level,volume) (This)->lpVtbl->GetVolumeLevel(This,level,volume)
+#define IWineD3DVolumeTexture_LockBox(This,level,locked_box,box,flags) (This)->lpVtbl->LockBox(This,level,locked_box,box,flags)
+#define IWineD3DVolumeTexture_UnlockBox(This,level) (This)->lpVtbl->UnlockBox(This,level)
+#define IWineD3DVolumeTexture_AddDirtyBox(This,dirty_box) (This)->lpVtbl->AddDirtyBox(This,dirty_box)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetLevelDesc_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DVOLUME_DESC *desc);
+void __RPC_STUB IWineD3DVolumeTexture_GetLevelDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_GetVolumeLevel_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ IWineD3DVolume **volume);
+void __RPC_STUB IWineD3DVolumeTexture_GetVolumeLevel_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_LockBox_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level,
+ WINED3DLOCKED_BOX *locked_box,
+ const WINED3DBOX *box,
+ DWORD flags);
+void __RPC_STUB IWineD3DVolumeTexture_LockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_UnlockBox_Proxy(
+ IWineD3DVolumeTexture* This,
+ UINT level);
+void __RPC_STUB IWineD3DVolumeTexture_UnlockBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DVolumeTexture_AddDirtyBox_Proxy(
+ IWineD3DVolumeTexture* This,
+ const WINED3DBOX *dirty_box);
+void __RPC_STUB IWineD3DVolumeTexture_AddDirtyBox_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DVolumeTexture_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration interface
+ */
+#ifndef __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+#define __IWineD3DVertexDeclaration_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexDeclaration, 0x7cd55be6, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexDeclaration : public IWineD3DBase
+{
+};
+#else
+typedef struct IWineD3DVertexDeclarationVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVertexDeclaration* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVertexDeclaration* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVertexDeclaration* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVertexDeclaration* This,
+ IUnknown **parent);
+
+ END_INTERFACE
+} IWineD3DVertexDeclarationVtbl;
+interface IWineD3DVertexDeclaration {
+ CONST_VTBL IWineD3DVertexDeclarationVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexDeclaration_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexDeclaration_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexDeclaration_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexDeclaration_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+#endif
+
+#endif
+
+
+#endif /* __IWineD3DVertexDeclaration_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DStateBlock interface
+ */
+#ifndef __IWineD3DStateBlock_INTERFACE_DEFINED__
+#define __IWineD3DStateBlock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DStateBlock, 0x83b073ce, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DStateBlock : public IUnknown
+{
+ virtual HRESULT STDMETHODCALLTYPE Capture(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Apply(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitStartupStateBlock(
+ ) = 0;
+
+};
+#else
+typedef struct IWineD3DStateBlockVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DStateBlock* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DStateBlock* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DStateBlock* This);
+
+ /*** IWineD3DStateBlock methods ***/
+ HRESULT (STDMETHODCALLTYPE *Capture)(
+ IWineD3DStateBlock* This);
+
+ HRESULT (STDMETHODCALLTYPE *Apply)(
+ IWineD3DStateBlock* This);
+
+ HRESULT (STDMETHODCALLTYPE *InitStartupStateBlock)(
+ IWineD3DStateBlock* This);
+
+ END_INTERFACE
+} IWineD3DStateBlockVtbl;
+interface IWineD3DStateBlock {
+ CONST_VTBL IWineD3DStateBlockVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DStateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DStateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DStateBlock_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DStateBlock methods ***/
+#define IWineD3DStateBlock_Capture(This) (This)->lpVtbl->Capture(This)
+#define IWineD3DStateBlock_Apply(This) (This)->lpVtbl->Apply(This)
+#define IWineD3DStateBlock_InitStartupStateBlock(This) (This)->lpVtbl->InitStartupStateBlock(This)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Capture_Proxy(
+ IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Capture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_Apply_Proxy(
+ IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_Apply_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DStateBlock_InitStartupStateBlock_Proxy(
+ IWineD3DStateBlock* This);
+void __RPC_STUB IWineD3DStateBlock_InitStartupStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DStateBlock_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DQuery interface
+ */
+#ifndef __IWineD3DQuery_INTERFACE_DEFINED__
+#define __IWineD3DQuery_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DQuery, 0x905ddbac, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DQuery : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetData(
+ void *data,
+ DWORD data_size,
+ DWORD flags) = 0;
+
+ virtual DWORD STDMETHODCALLTYPE GetDataSize(
+ ) = 0;
+
+ virtual WINED3DQUERYTYPE STDMETHODCALLTYPE GetType(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Issue(
+ DWORD flags) = 0;
+
+};
+#else
+typedef struct IWineD3DQueryVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DQuery* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DQuery* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DQuery* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DQuery* This,
+ IUnknown **parent);
+
+ /*** IWineD3DQuery methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetData)(
+ IWineD3DQuery* This,
+ void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ DWORD (STDMETHODCALLTYPE *GetDataSize)(
+ IWineD3DQuery* This);
+
+ WINED3DQUERYTYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DQuery* This);
+
+ HRESULT (STDMETHODCALLTYPE *Issue)(
+ IWineD3DQuery* This,
+ DWORD flags);
+
+ END_INTERFACE
+} IWineD3DQueryVtbl;
+interface IWineD3DQuery {
+ CONST_VTBL IWineD3DQueryVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DQuery_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DQuery_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DQuery_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DQuery_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DQuery methods ***/
+#define IWineD3DQuery_GetData(This,data,data_size,flags) (This)->lpVtbl->GetData(This,data,data_size,flags)
+#define IWineD3DQuery_GetDataSize(This) (This)->lpVtbl->GetDataSize(This)
+#define IWineD3DQuery_GetType(This) (This)->lpVtbl->GetType(This)
+#define IWineD3DQuery_Issue(This,flags) (This)->lpVtbl->Issue(This,flags)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_GetData_Proxy(
+ IWineD3DQuery* This,
+ void *data,
+ DWORD data_size,
+ DWORD flags);
+void __RPC_STUB IWineD3DQuery_GetData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+DWORD STDMETHODCALLTYPE IWineD3DQuery_GetDataSize_Proxy(
+ IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetDataSize_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+WINED3DQUERYTYPE STDMETHODCALLTYPE IWineD3DQuery_GetType_Proxy(
+ IWineD3DQuery* This);
+void __RPC_STUB IWineD3DQuery_GetType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DQuery_Issue_Proxy(
+ IWineD3DQuery* This,
+ DWORD flags);
+void __RPC_STUB IWineD3DQuery_Issue_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DQuery_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DSwapChain interface
+ */
+#ifndef __IWineD3DSwapChain_INTERFACE_DEFINED__
+#define __IWineD3DSwapChain_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DSwapChain, 0x34d01b10, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DSwapChain : public IWineD3DBase
+{
+ virtual void STDMETHODCALLTYPE Destroy(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDevice(
+ IWineD3DDevice **device) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Present(
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDestWindowOverride(
+ HWND window) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+ IWineD3DSurface *dst_surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+ WINED3DRASTER_STATUS *raster_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPresentParameters(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetGammaRamp(
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetGammaRamp(
+ WINED3DGAMMARAMP *ramp) = 0;
+
+};
+#else
+typedef struct IWineD3DSwapChainVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DSwapChain* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DSwapChain* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DSwapChain* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DSwapChain* This,
+ IUnknown **parent);
+
+ /*** IWineD3DSwapChain methods ***/
+ void (STDMETHODCALLTYPE *Destroy)(
+ IWineD3DSwapChain* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetDevice)(
+ IWineD3DSwapChain* This,
+ IWineD3DDevice **device);
+
+ HRESULT (STDMETHODCALLTYPE *Present)(
+ IWineD3DSwapChain* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *SetDestWindowOverride)(
+ IWineD3DSwapChain* This,
+ HWND window);
+
+ HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+ IWineD3DSwapChain* This,
+ IWineD3DSurface *dst_surface);
+
+ HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+ IWineD3DSwapChain* This,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+
+ HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+ IWineD3DSwapChain* This,
+ WINED3DRASTER_STATUS *raster_status);
+
+ HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+ IWineD3DSwapChain* This,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *GetPresentParameters)(
+ IWineD3DSwapChain* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetGammaRamp)(
+ IWineD3DSwapChain* This,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+
+ HRESULT (STDMETHODCALLTYPE *GetGammaRamp)(
+ IWineD3DSwapChain* This,
+ WINED3DGAMMARAMP *ramp);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *Flush)(
+ IWineD3DSwapChain* This);
+
+ HRESULT (STDMETHODCALLTYPE *PresentRt)(
+ IWineD3DSwapChain* This,
+ IWineD3DSurface* surf);
+#endif
+ END_INTERFACE
+} IWineD3DSwapChainVtbl;
+interface IWineD3DSwapChain {
+ CONST_VTBL IWineD3DSwapChainVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DSwapChain_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DSwapChain_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DSwapChain_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DSwapChain_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DSwapChain methods ***/
+#define IWineD3DSwapChain_Destroy(This) (This)->lpVtbl->Destroy(This)
+#define IWineD3DSwapChain_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
+#define IWineD3DSwapChain_Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region,flags)
+#define IWineD3DSwapChain_SetDestWindowOverride(This,window) (This)->lpVtbl->SetDestWindowOverride(This,window)
+#define IWineD3DSwapChain_GetFrontBufferData(This,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,dst_surface)
+#define IWineD3DSwapChain_GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DSwapChain_GetRasterStatus(This,raster_status) (This)->lpVtbl->GetRasterStatus(This,raster_status)
+#define IWineD3DSwapChain_GetDisplayMode(This,mode) (This)->lpVtbl->GetDisplayMode(This,mode)
+#define IWineD3DSwapChain_GetPresentParameters(This,present_parameters) (This)->lpVtbl->GetPresentParameters(This,present_parameters)
+#define IWineD3DSwapChain_SetGammaRamp(This,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,flags,ramp)
+#define IWineD3DSwapChain_GetGammaRamp(This,ramp) (This)->lpVtbl->GetGammaRamp(This,ramp)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DSwapChain_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DSwapChain_PresentRt(This,surf) (This)->lpVtbl->PresentRt(This,surf)
+#endif
+#endif
+
+#endif
+
+void STDMETHODCALLTYPE IWineD3DSwapChain_Destroy_Proxy(
+ IWineD3DSwapChain* This);
+void __RPC_STUB IWineD3DSwapChain_Destroy_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDevice_Proxy(
+ IWineD3DSwapChain* This,
+ IWineD3DDevice **device);
+void __RPC_STUB IWineD3DSwapChain_GetDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_Present_Proxy(
+ IWineD3DSwapChain* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region,
+ DWORD flags);
+void __RPC_STUB IWineD3DSwapChain_Present_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetDestWindowOverride_Proxy(
+ IWineD3DSwapChain* This,
+ HWND window);
+void __RPC_STUB IWineD3DSwapChain_SetDestWindowOverride_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetFrontBufferData_Proxy(
+ IWineD3DSwapChain* This,
+ IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DSwapChain_GetFrontBufferData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetBackBuffer_Proxy(
+ IWineD3DSwapChain* This,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DSwapChain_GetBackBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetRasterStatus_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DSwapChain_GetRasterStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetDisplayMode_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DSwapChain_GetDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetPresentParameters_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DSwapChain_GetPresentParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_SetGammaRamp_Proxy(
+ IWineD3DSwapChain* This,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_SetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DSwapChain_GetGammaRamp_Proxy(
+ IWineD3DSwapChain* This,
+ WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DSwapChain_GetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DSwapChain_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBuffer interface
+ */
+#ifndef __IWineD3DBuffer_INTERFACE_DEFINED__
+#define __IWineD3DBuffer_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBuffer, 0xb3f028e8, 0x1a40, 0x4ab3, 0x92,0x92, 0x5b,0xf6,0xcf,0xd8,0x02,0x09);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBuffer : public IWineD3DResource
+{
+ virtual HRESULT STDMETHODCALLTYPE Map(
+ UINT offset,
+ UINT size,
+ BYTE **data,
+ DWORD flags) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Unmap(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDesc(
+ WINED3DBUFFER_DESC *desc) = 0;
+
+};
+#else
+typedef struct IWineD3DBufferVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBuffer* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBuffer* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBuffer* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBuffer* This,
+ IUnknown **parent);
+
+ /*** IWineD3DResource methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetPrivateData)(
+ IWineD3DBuffer* This,
+ REFGUID guid,
+ const void *data,
+ DWORD data_size,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *GetPrivateData)(
+ IWineD3DBuffer* This,
+ REFGUID guid,
+ void *data,
+ DWORD *data_size);
+
+ HRESULT (STDMETHODCALLTYPE *FreePrivateData)(
+ IWineD3DBuffer* This,
+ REFGUID guid);
+
+ DWORD (STDMETHODCALLTYPE *SetPriority)(
+ IWineD3DBuffer* This,
+ DWORD new_priority);
+
+ DWORD (STDMETHODCALLTYPE *GetPriority)(
+ IWineD3DBuffer* This);
+
+ void (STDMETHODCALLTYPE *PreLoad)(
+ IWineD3DBuffer* This);
+
+ void (STDMETHODCALLTYPE *UnLoad)(
+ IWineD3DBuffer* This);
+
+ WINED3DRESOURCETYPE (STDMETHODCALLTYPE *GetType)(
+ IWineD3DBuffer* This);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *SetShRcState)(
+ IWineD3DResource* This,
+ VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+ /*** IWineD3DBuffer methods ***/
+ HRESULT (STDMETHODCALLTYPE *Map)(
+ IWineD3DBuffer* This,
+ UINT offset,
+ UINT size,
+ BYTE **data,
+ DWORD flags);
+
+ HRESULT (STDMETHODCALLTYPE *Unmap)(
+ IWineD3DBuffer* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetDesc)(
+ IWineD3DBuffer* This,
+ WINED3DBUFFER_DESC *desc);
+
+ END_INTERFACE
+} IWineD3DBufferVtbl;
+interface IWineD3DBuffer {
+ CONST_VTBL IWineD3DBufferVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBuffer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBuffer_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBuffer_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBuffer_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DResource methods ***/
+#define IWineD3DBuffer_SetPrivateData(This,guid,data,data_size,flags) (This)->lpVtbl->SetPrivateData(This,guid,data,data_size,flags)
+#define IWineD3DBuffer_GetPrivateData(This,guid,data,data_size) (This)->lpVtbl->GetPrivateData(This,guid,data,data_size)
+#define IWineD3DBuffer_FreePrivateData(This,guid) (This)->lpVtbl->FreePrivateData(This,guid)
+#define IWineD3DBuffer_SetPriority(This,new_priority) (This)->lpVtbl->SetPriority(This,new_priority)
+#define IWineD3DBuffer_GetPriority(This) (This)->lpVtbl->GetPriority(This)
+#define IWineD3DBuffer_PreLoad(This) (This)->lpVtbl->PreLoad(This)
+#define IWineD3DBuffer_UnLoad(This) (This)->lpVtbl->UnLoad(This)
+#define IWineD3DBuffer_GetType(This) (This)->lpVtbl->GetType(This)
+/*** IWineD3DBuffer methods ***/
+#define IWineD3DBuffer_Map(This,offset,size,data,flags) (This)->lpVtbl->Map(This,offset,size,data,flags)
+#define IWineD3DBuffer_Unmap(This) (This)->lpVtbl->Unmap(This)
+#define IWineD3DBuffer_GetDesc(This,desc) (This)->lpVtbl->GetDesc(This,desc)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Map_Proxy(
+ IWineD3DBuffer* This,
+ UINT offset,
+ UINT size,
+ BYTE **data,
+ DWORD flags);
+void __RPC_STUB IWineD3DBuffer_Map_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_Unmap_Proxy(
+ IWineD3DBuffer* This);
+void __RPC_STUB IWineD3DBuffer_Unmap_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DBuffer_GetDesc_Proxy(
+ IWineD3DBuffer* This,
+ WINED3DBUFFER_DESC *desc);
+void __RPC_STUB IWineD3DBuffer_GetDesc_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBuffer_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DBaseShader interface
+ */
+#ifndef __IWineD3DBaseShader_INTERFACE_DEFINED__
+#define __IWineD3DBaseShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DBaseShader, 0xeac93065, 0xa4df, 0x446f, 0x86,0xa1, 0x9e,0xf2,0xbc,0xa4,0x0a,0x3c);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DBaseShader : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE GetFunction(
+ void *data,
+ UINT *data_size) = 0;
+
+};
+#else
+typedef struct IWineD3DBaseShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DBaseShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DBaseShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DBaseShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DBaseShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DBaseShader* This,
+ void *data,
+ UINT *data_size);
+
+ END_INTERFACE
+} IWineD3DBaseShaderVtbl;
+interface IWineD3DBaseShader {
+ CONST_VTBL IWineD3DBaseShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DBaseShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DBaseShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DBaseShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DBaseShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DBaseShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DBaseShader_GetFunction_Proxy(
+ IWineD3DBaseShader* This,
+ void *data,
+ UINT *data_size);
+void __RPC_STUB IWineD3DBaseShader_GetFunction_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DBaseShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DVertexShader interface
+ */
+#ifndef __IWineD3DVertexShader_INTERFACE_DEFINED__
+#define __IWineD3DVertexShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DVertexShader, 0x7f7a2b60, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DVertexShader : public IWineD3DBaseShader
+{
+ virtual HRESULT STDMETHODCALLTYPE SetLocalConstantsF(
+ UINT start_idx,
+ const float *src_data,
+ UINT vector4f_count) = 0;
+
+};
+#else
+typedef struct IWineD3DVertexShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DVertexShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DVertexShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DVertexShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DVertexShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DVertexShader* This,
+ void *data,
+ UINT *data_size);
+
+ /*** IWineD3DVertexShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *SetLocalConstantsF)(
+ IWineD3DVertexShader* This,
+ UINT start_idx,
+ const float *src_data,
+ UINT vector4f_count);
+
+ END_INTERFACE
+} IWineD3DVertexShaderVtbl;
+interface IWineD3DVertexShader {
+ CONST_VTBL IWineD3DVertexShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DVertexShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DVertexShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DVertexShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DVertexShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DVertexShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+/*** IWineD3DVertexShader methods ***/
+#define IWineD3DVertexShader_SetLocalConstantsF(This,start_idx,src_data,vector4f_count) (This)->lpVtbl->SetLocalConstantsF(This,start_idx,src_data,vector4f_count)
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DVertexShader_SetLocalConstantsF_Proxy(
+ IWineD3DVertexShader* This,
+ UINT start_idx,
+ const float *src_data,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DVertexShader_SetLocalConstantsF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DVertexShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DGeometryShader interface
+ */
+#ifndef __IWineD3DGeometryShader_INTERFACE_DEFINED__
+#define __IWineD3DGeometryShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DGeometryShader, 0x8276c113, 0x388b, 0x49d1, 0xad,0x8b, 0xc9,0xdd,0x8b,0xcb,0xab,0xcd);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DGeometryShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DGeometryShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DGeometryShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DGeometryShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DGeometryShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DGeometryShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DGeometryShader* This,
+ void *data,
+ UINT *data_size);
+
+ END_INTERFACE
+} IWineD3DGeometryShaderVtbl;
+interface IWineD3DGeometryShader {
+ CONST_VTBL IWineD3DGeometryShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DGeometryShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DGeometryShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DGeometryShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DGeometryShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DGeometryShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif /* __IWineD3DGeometryShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DPixelShader interface
+ */
+#ifndef __IWineD3DPixelShader_INTERFACE_DEFINED__
+#define __IWineD3DPixelShader_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DPixelShader, 0x818503da, 0x6f30, 0x11d9, 0xc6,0x87, 0x00,0x04,0x61,0x42,0xc1,0x4f);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DPixelShader : public IWineD3DBaseShader
+{
+};
+#else
+typedef struct IWineD3DPixelShaderVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DPixelShader* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DPixelShader* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DPixelShader* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DPixelShader* This,
+ IUnknown **parent);
+
+ /*** IWineD3DBaseShader methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetFunction)(
+ IWineD3DPixelShader* This,
+ void *data,
+ UINT *data_size);
+
+ END_INTERFACE
+} IWineD3DPixelShaderVtbl;
+interface IWineD3DPixelShader {
+ CONST_VTBL IWineD3DPixelShaderVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DPixelShader_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DPixelShader_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DPixelShader_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DPixelShader_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DBaseShader methods ***/
+#define IWineD3DPixelShader_GetFunction(This,data,data_size) (This)->lpVtbl->GetFunction(This,data,data_size)
+#endif
+
+#endif
+
+
+#endif /* __IWineD3DPixelShader_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * IWineD3DDevice interface
+ */
+#ifndef __IWineD3DDevice_INTERFACE_DEFINED__
+#define __IWineD3DDevice_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IWineD3DDevice, 0x6d10a2ce, 0x09d0, 0x4a53, 0xa4,0x27, 0x11,0x38,0x8f,0x9f,0x8c,0xa5);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+interface IWineD3DDevice : public IWineD3DBase
+{
+ virtual HRESULT STDMETHODCALLTYPE CreateBuffer(
+ struct wined3d_buffer_desc *desc,
+ const void *data,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ IWineD3DBuffer **buffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexBuffer(
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **vertex_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateIndexBuffer(
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **index_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateStateBlock(
+ WINED3DSTATEBLOCKTYPE type,
+ IWineD3DStateBlock **stateblock,
+ IUnknown *parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSurface(
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ BOOL lockable,
+ BOOL discard,
+ UINT level,
+ IWineD3DSurface **surface,
+ DWORD usage,
+ WINED3DPOOL pool,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ WINED3DSURFTYPE surface_type,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateRendertargetView(
+ IWineD3DResource *resource,
+ IUnknown *parent,
+ IWineD3DRendertargetView **rendertarget_view) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateTexture(
+ UINT width,
+ UINT height,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVolumeTexture(
+ UINT width,
+ UINT height,
+ UINT depth,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolumeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pavClientMem
+#endif
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVolume(
+ UINT width,
+ UINT height,
+ UINT depth,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolume **volume,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateCubeTexture(
+ UINT edge_length,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DCubeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateQuery(
+ WINED3DQUERYTYPE type,
+ IWineD3DQuery **query,
+ IUnknown *parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateSwapChain(
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain,
+ IUnknown *parent,
+ WINED3DSURFTYPE surface_type) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclaration(
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ const WINED3DVERTEXELEMENT *elements,
+ UINT element_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexDeclarationFromFVF(
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ DWORD fvf) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateVertexShader(
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DVertexShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader(
+ const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DGeometryShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreatePixelShader(
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DPixelShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE CreatePalette(
+ DWORD flags,
+ const PALETTEENTRY *palette_entry,
+ IWineD3DPalette **palette,
+ IUnknown *parent) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Init3D(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE InitGDI(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Uninit3D(
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UninitGDI(
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain)) = 0;
+
+ virtual void STDMETHODCALLTYPE SetMultithreaded(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EvictManagedResources(
+ ) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetAvailableTextureMem(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBackBuffer(
+ UINT swapchain_idx,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCreationParameters(
+ WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDeviceCaps(
+ WINED3DCAPS *caps) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDirect3D(
+ IWineD3D **d3d) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayMode(
+ UINT swapchain_idx,
+ WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDisplayMode(
+ UINT swapchain_idx,
+ const WINED3DDISPLAYMODE *mode) = 0;
+
+ virtual UINT STDMETHODCALLTYPE GetNumberOfSwapChains(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRasterStatus(
+ UINT swapchain_idx,
+ WINED3DRASTER_STATUS *raster_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSwapChain(
+ UINT swapchain_idx,
+ IWineD3DSwapChain **swapchain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Reset(
+ WINED3DPRESENT_PARAMETERS *present_parameters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDialogBoxMode(
+ BOOL enable_dialogs) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCursorProperties(
+ UINT x_hotspot,
+ UINT y_hotspot,
+ IWineD3DSurface *cursor_surface) = 0;
+
+ virtual void STDMETHODCALLTYPE SetCursorPosition(
+ int x_screen_space,
+ int y_screen_space,
+ DWORD flags) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE ShowCursor(
+ BOOL show) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipPlane(
+ DWORD plane_idx,
+ const float *plane) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipPlane(
+ DWORD plane_idx,
+ float *plane) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetClipStatus(
+ const WINED3DCLIPSTATUS *clip_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetClipStatus(
+ WINED3DCLIPSTATUS *clip_status) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetCurrentTexturePalette(
+ UINT palette_number) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentTexturePalette(
+ UINT *palette_number) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetDepthStencilSurface(
+ IWineD3DSurface *depth_stencil) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetDepthStencilSurface(
+ IWineD3DSurface **depth_stencil) = 0;
+
+ virtual void STDMETHODCALLTYPE SetGammaRamp(
+ UINT swapchain_idx,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp) = 0;
+
+ virtual void STDMETHODCALLTYPE GetGammaRamp(
+ UINT swapchain_idx,
+ WINED3DGAMMARAMP *ramp) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetIndexBuffer(
+ IWineD3DBuffer *index_buffer,
+ WINED3DFORMAT format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetIndexBuffer(
+ IWineD3DBuffer **index_buffer) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetBaseVertexIndex(
+ INT base_index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetBaseVertexIndex(
+ INT *base_index) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetLight(
+ DWORD light_idx,
+ const WINED3DLIGHT *light) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetLight(
+ DWORD light_idx,
+ WINED3DLIGHT *light) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetLightEnable(
+ DWORD light_idx,
+ BOOL enable) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetLightEnable(
+ DWORD light_idx,
+ BOOL *enable) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetMaterial(
+ const WINED3DMATERIAL *material) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetMaterial(
+ WINED3DMATERIAL *material) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetNPatchMode(
+ float segments) = 0;
+
+ virtual float STDMETHODCALLTYPE GetNPatchMode(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPaletteEntries(
+ UINT palette_number,
+ const PALETTEENTRY *entries) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPaletteEntries(
+ UINT palette_number,
+ PALETTEENTRY *entries) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShader(
+ IWineD3DPixelShader *shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShader(
+ IWineD3DPixelShader **shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantB(
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantB(
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantI(
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantI(
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetPixelShaderConstantF(
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetPixelShaderConstantF(
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetRenderState(
+ WINED3DRENDERSTATETYPE state,
+ DWORD value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRenderState(
+ WINED3DRENDERSTATETYPE state,
+ DWORD *value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetRenderTarget(
+ DWORD render_target_idx,
+ IWineD3DSurface *render_target,
+ BOOL set_viewport) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetRenderTarget(
+ DWORD render_target_idx,
+ IWineD3DSurface **render_target) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetFrontBackBuffers(
+ IWineD3DSurface *front,
+ IWineD3DSurface *back) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSamplerState(
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSamplerState(
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD *value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetScissorRect(
+ const RECT *rect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetScissorRect(
+ RECT *rect) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetSoftwareVertexProcessing(
+ BOOL software) = 0;
+
+ virtual BOOL STDMETHODCALLTYPE GetSoftwareVertexProcessing(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetStreamSource(
+ UINT stream_idx,
+ IWineD3DBuffer *buffer,
+ UINT offset,
+ UINT stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetStreamSource(
+ UINT stream_idx,
+ IWineD3DBuffer **buffer,
+ UINT *offset,
+ UINT *stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetStreamSourceFreq(
+ UINT stream_idx,
+ UINT divider) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetStreamSourceFreq(
+ UINT stream_idx,
+ UINT *divider) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTexture(
+ DWORD stage,
+ IWineD3DBaseTexture *texture) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTexture(
+ DWORD stage,
+ IWineD3DBaseTexture **texture) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTextureStageState(
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTextureStageState(
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD *value) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetTransform(
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetTransform(
+ WINED3DTRANSFORMSTATETYPE state,
+ WINED3DMATRIX *matrix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexDeclaration(
+ IWineD3DVertexDeclaration *declaration) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexDeclaration(
+ IWineD3DVertexDeclaration **declaration) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShader(
+ IWineD3DVertexShader *shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShader(
+ IWineD3DVertexShader **shader) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantB(
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantB(
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantI(
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantI(
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetVertexShaderConstantF(
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetVertexShaderConstantF(
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE SetViewport(
+ const WINED3DVIEWPORT *viewport) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetViewport(
+ WINED3DVIEWPORT *viewport) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE MultiplyTransform(
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ValidateDevice(
+ DWORD *num_passes) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ProcessVertices(
+ UINT src_start_idx,
+ UINT dst_idx,
+ UINT vertex_count,
+ IWineD3DBuffer *dest_buffer,
+ IWineD3DVertexDeclaration *declaration,
+ DWORD flags,
+ DWORD DestFVF) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BeginStateBlock(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EndStateBlock(
+ IWineD3DStateBlock **stateblock) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE BeginScene(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EndScene(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Present(
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE Clear(
+ DWORD rect_count,
+ const WINED3DRECT *rects,
+ DWORD flags,
+ WINED3DCOLOR color,
+ float z,
+ DWORD stencil) = 0;
+
+ virtual void STDMETHODCALLTYPE ClearRendertargetView(
+ IWineD3DRendertargetView *rendertarget_view,
+ const float color[4]) = 0;
+
+ virtual void STDMETHODCALLTYPE SetPrimitiveType(
+ WINED3DPRIMITIVETYPE primitive_topology) = 0;
+
+ virtual void STDMETHODCALLTYPE GetPrimitiveType(
+ WINED3DPRIMITIVETYPE *primitive_topology) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawPrimitive(
+ UINT start_vertex,
+ UINT vertex_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitive(
+ UINT start_idx,
+ UINT index_count) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveUP(
+ UINT vertex_count,
+ const void *stream_data,
+ UINT stream_stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveUP(
+ UINT index_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format,
+ const void *stream_data,
+ UINT stream_stride) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawPrimitiveStrided(
+ UINT vertex_count,
+ const WineDirect3DVertexStridedData *strided_data) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawIndexedPrimitiveStrided(
+ UINT index_count,
+ const WineDirect3DVertexStridedData *strided_data,
+ UINT vertex_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawRectPatch(
+ UINT handle,
+ const float *num_segs,
+ const WINED3DRECTPATCH_INFO *rect_patch_info) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DrawTriPatch(
+ UINT handle,
+ const float *num_segs,
+ const WINED3DTRIPATCH_INFO *tri_patch_info) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE DeletePatch(
+ UINT handle) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE ColorFill(
+ IWineD3DSurface *surface,
+ const WINED3DRECT *rect,
+ WINED3DCOLOR color) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateTexture(
+ IWineD3DBaseTexture *src_texture,
+ IWineD3DBaseTexture *dst_texture) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE UpdateSurface(
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const POINT *dst_point) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetFrontBufferData(
+ UINT swapchain_idx,
+ IWineD3DSurface *dst_surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE EnumResources(
+ HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+ void *data) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetSurfaceFromDC(
+ HDC dc,
+ IWineD3DSurface **surface) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AcquireFocusWindow(
+ HWND window) = 0;
+
+ virtual void STDMETHODCALLTYPE ReleaseFocusWindow(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE AddSwapChain(
+ IWineD3DSwapChain *swapchain) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE RemoveSwapChain(
+ IWineD3DSwapChain *swapchain) = 0;
+
+#ifdef VBOX_WITH_WDDM
+ virtual HRESULT STDMETHODCALLTYPE Flush(
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE VolBlt(IWineD3DDevice *iface,
+ IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+ const WINED3DBOX *pSrcBoxArg,
+ const VBOXPOINT3D *pDstPoin3D
+ ) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE VolTexBlt(IWineD3DDevice *iface,
+ IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+ const WINED3DBOX *pSrcBoxArg,
+ const VBOXPOINT3D *pDstPoin3D
+ ) = 0;
+#endif
+};
+#else
+typedef struct IWineD3DDeviceVtbl {
+ BEGIN_INTERFACE
+
+ /*** IUnknown methods ***/
+ HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+ IWineD3DDevice* This,
+ REFIID riid,
+ void **ppvObject);
+
+ ULONG (STDMETHODCALLTYPE *AddRef)(
+ IWineD3DDevice* This);
+
+ ULONG (STDMETHODCALLTYPE *Release)(
+ IWineD3DDevice* This);
+
+ /*** IWineD3DBase methods ***/
+ HRESULT (STDMETHODCALLTYPE *GetParent)(
+ IWineD3DDevice* This,
+ IUnknown **parent);
+
+ /*** IWineD3DDevice methods ***/
+ HRESULT (STDMETHODCALLTYPE *CreateBuffer)(
+ IWineD3DDevice* This,
+ struct wined3d_buffer_desc *desc,
+ const void *data,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ IWineD3DBuffer **buffer);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexBuffer)(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **vertex_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreateIndexBuffer)(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **index_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreateStateBlock)(
+ IWineD3DDevice* This,
+ WINED3DSTATEBLOCKTYPE type,
+ IWineD3DStateBlock **stateblock,
+ IUnknown *parent);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSurface)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ BOOL lockable,
+ BOOL discard,
+ UINT level,
+ IWineD3DSurface **surface,
+ DWORD usage,
+ WINED3DPOOL pool,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ WINED3DSURFTYPE surface_type,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateRendertargetView)(
+ IWineD3DDevice* This,
+ IWineD3DResource *resource,
+ IUnknown *parent,
+ IWineD3DRendertargetView **rendertarget_view);
+
+ HRESULT (STDMETHODCALLTYPE *CreateTexture)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateVolumeTexture)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolumeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateVolume)(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolume **volume,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateCubeTexture)(
+ IWineD3DDevice* This,
+ UINT edge_length,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DCubeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ );
+
+ HRESULT (STDMETHODCALLTYPE *CreateQuery)(
+ IWineD3DDevice* This,
+ WINED3DQUERYTYPE type,
+ IWineD3DQuery **query,
+ IUnknown *parent);
+
+ HRESULT (STDMETHODCALLTYPE *CreateSwapChain)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain,
+ IUnknown *parent,
+ WINED3DSURFTYPE surface_type);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexDeclaration)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ const WINED3DVERTEXELEMENT *elements,
+ UINT element_count);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexDeclarationFromFVF)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ DWORD fvf);
+
+ HRESULT (STDMETHODCALLTYPE *CreateVertexShader)(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DVertexShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreateGeometryShader)(
+ IWineD3DDevice* This,
+ const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DGeometryShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreatePixelShader)(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DPixelShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+
+ HRESULT (STDMETHODCALLTYPE *CreatePalette)(
+ IWineD3DDevice* This,
+ DWORD flags,
+ const PALETTEENTRY *palette_entry,
+ IWineD3DPalette **palette,
+ IUnknown *parent);
+
+ HRESULT (STDMETHODCALLTYPE *Init3D)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *InitGDI)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *Uninit3D)(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+ HRESULT (STDMETHODCALLTYPE *UninitGDI)(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+
+ void (STDMETHODCALLTYPE *SetMultithreaded)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *EvictManagedResources)(
+ IWineD3DDevice* This);
+
+ UINT (STDMETHODCALLTYPE *GetAvailableTextureMem)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetBackBuffer)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+
+ HRESULT (STDMETHODCALLTYPE *GetCreationParameters)(
+ IWineD3DDevice* This,
+ WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *GetDeviceCaps)(
+ IWineD3DDevice* This,
+ WINED3DCAPS *caps);
+
+ HRESULT (STDMETHODCALLTYPE *GetDirect3D)(
+ IWineD3DDevice* This,
+ IWineD3D **d3d);
+
+ HRESULT (STDMETHODCALLTYPE *GetDisplayMode)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DDISPLAYMODE *mode);
+
+ HRESULT (STDMETHODCALLTYPE *SetDisplayMode)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ const WINED3DDISPLAYMODE *mode);
+
+ UINT (STDMETHODCALLTYPE *GetNumberOfSwapChains)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *GetRasterStatus)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DRASTER_STATUS *raster_status);
+
+ HRESULT (STDMETHODCALLTYPE *GetSwapChain)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSwapChain **swapchain);
+
+ HRESULT (STDMETHODCALLTYPE *Reset)(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+
+ HRESULT (STDMETHODCALLTYPE *SetDialogBoxMode)(
+ IWineD3DDevice* This,
+ BOOL enable_dialogs);
+
+ HRESULT (STDMETHODCALLTYPE *SetCursorProperties)(
+ IWineD3DDevice* This,
+ UINT x_hotspot,
+ UINT y_hotspot,
+ IWineD3DSurface *cursor_surface);
+
+ void (STDMETHODCALLTYPE *SetCursorPosition)(
+ IWineD3DDevice* This,
+ int x_screen_space,
+ int y_screen_space,
+ DWORD flags);
+
+ BOOL (STDMETHODCALLTYPE *ShowCursor)(
+ IWineD3DDevice* This,
+ BOOL show);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipPlane)(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ const float *plane);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipPlane)(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ float *plane);
+
+ HRESULT (STDMETHODCALLTYPE *SetClipStatus)(
+ IWineD3DDevice* This,
+ const WINED3DCLIPSTATUS *clip_status);
+
+ HRESULT (STDMETHODCALLTYPE *GetClipStatus)(
+ IWineD3DDevice* This,
+ WINED3DCLIPSTATUS *clip_status);
+
+ HRESULT (STDMETHODCALLTYPE *SetCurrentTexturePalette)(
+ IWineD3DDevice* This,
+ UINT palette_number);
+
+ HRESULT (STDMETHODCALLTYPE *GetCurrentTexturePalette)(
+ IWineD3DDevice* This,
+ UINT *palette_number);
+
+ HRESULT (STDMETHODCALLTYPE *SetDepthStencilSurface)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *depth_stencil);
+
+ HRESULT (STDMETHODCALLTYPE *GetDepthStencilSurface)(
+ IWineD3DDevice* This,
+ IWineD3DSurface **depth_stencil);
+
+ void (STDMETHODCALLTYPE *SetGammaRamp)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+
+ void (STDMETHODCALLTYPE *GetGammaRamp)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DGAMMARAMP *ramp);
+
+ HRESULT (STDMETHODCALLTYPE *SetIndexBuffer)(
+ IWineD3DDevice* This,
+ IWineD3DBuffer *index_buffer,
+ WINED3DFORMAT format);
+
+ HRESULT (STDMETHODCALLTYPE *GetIndexBuffer)(
+ IWineD3DDevice* This,
+ IWineD3DBuffer **index_buffer);
+
+ HRESULT (STDMETHODCALLTYPE *SetBaseVertexIndex)(
+ IWineD3DDevice* This,
+ INT base_index);
+
+ HRESULT (STDMETHODCALLTYPE *GetBaseVertexIndex)(
+ IWineD3DDevice* This,
+ INT *base_index);
+
+ HRESULT (STDMETHODCALLTYPE *SetLight)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ const WINED3DLIGHT *light);
+
+ HRESULT (STDMETHODCALLTYPE *GetLight)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ WINED3DLIGHT *light);
+
+ HRESULT (STDMETHODCALLTYPE *SetLightEnable)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL enable);
+
+ HRESULT (STDMETHODCALLTYPE *GetLightEnable)(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL *enable);
+
+ HRESULT (STDMETHODCALLTYPE *SetMaterial)(
+ IWineD3DDevice* This,
+ const WINED3DMATERIAL *material);
+
+ HRESULT (STDMETHODCALLTYPE *GetMaterial)(
+ IWineD3DDevice* This,
+ WINED3DMATERIAL *material);
+
+ HRESULT (STDMETHODCALLTYPE *SetNPatchMode)(
+ IWineD3DDevice* This,
+ float segments);
+
+ float (STDMETHODCALLTYPE *GetNPatchMode)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetPaletteEntries)(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ const PALETTEENTRY *entries);
+
+ HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ PALETTEENTRY *entries);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShader)(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader *shader);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShader)(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader **shader);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetPixelShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetPixelShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetRenderState)(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD value);
+
+ HRESULT (STDMETHODCALLTYPE *GetRenderState)(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD *value);
+
+ HRESULT (STDMETHODCALLTYPE *SetRenderTarget)(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface *render_target,
+ BOOL set_viewport);
+
+ HRESULT (STDMETHODCALLTYPE *GetRenderTarget)(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface **render_target);
+
+ HRESULT (STDMETHODCALLTYPE *SetFrontBackBuffers)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *front,
+ IWineD3DSurface *back);
+
+ HRESULT (STDMETHODCALLTYPE *SetSamplerState)(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD value);
+
+ HRESULT (STDMETHODCALLTYPE *GetSamplerState)(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD *value);
+
+ HRESULT (STDMETHODCALLTYPE *SetScissorRect)(
+ IWineD3DDevice* This,
+ const RECT *rect);
+
+ HRESULT (STDMETHODCALLTYPE *GetScissorRect)(
+ IWineD3DDevice* This,
+ RECT *rect);
+
+ HRESULT (STDMETHODCALLTYPE *SetSoftwareVertexProcessing)(
+ IWineD3DDevice* This,
+ BOOL software);
+
+ BOOL (STDMETHODCALLTYPE *GetSoftwareVertexProcessing)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *SetStreamSource)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer *buffer,
+ UINT offset,
+ UINT stride);
+
+ HRESULT (STDMETHODCALLTYPE *GetStreamSource)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer **buffer,
+ UINT *offset,
+ UINT *stride);
+
+ HRESULT (STDMETHODCALLTYPE *SetStreamSourceFreq)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT divider);
+
+ HRESULT (STDMETHODCALLTYPE *GetStreamSourceFreq)(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT *divider);
+
+ HRESULT (STDMETHODCALLTYPE *SetTexture)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture *texture);
+
+ HRESULT (STDMETHODCALLTYPE *GetTexture)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture **texture);
+
+ HRESULT (STDMETHODCALLTYPE *SetTextureStageState)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD value);
+
+ HRESULT (STDMETHODCALLTYPE *GetTextureStageState)(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD *value);
+
+ HRESULT (STDMETHODCALLTYPE *SetTransform)(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+
+ HRESULT (STDMETHODCALLTYPE *GetTransform)(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ WINED3DMATRIX *matrix);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexDeclaration)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration *declaration);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexDeclaration)(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShader)(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader *shader);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShader)(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader **shader);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantB)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantI)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetVertexShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *GetVertexShaderConstantF)(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+
+ HRESULT (STDMETHODCALLTYPE *SetViewport)(
+ IWineD3DDevice* This,
+ const WINED3DVIEWPORT *viewport);
+
+ HRESULT (STDMETHODCALLTYPE *GetViewport)(
+ IWineD3DDevice* This,
+ WINED3DVIEWPORT *viewport);
+
+ HRESULT (STDMETHODCALLTYPE *MultiplyTransform)(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+
+ HRESULT (STDMETHODCALLTYPE *ValidateDevice)(
+ IWineD3DDevice* This,
+ DWORD *num_passes);
+
+ HRESULT (STDMETHODCALLTYPE *ProcessVertices)(
+ IWineD3DDevice* This,
+ UINT src_start_idx,
+ UINT dst_idx,
+ UINT vertex_count,
+ IWineD3DBuffer *dest_buffer,
+ IWineD3DVertexDeclaration *declaration,
+ DWORD flags,
+ DWORD DestFVF);
+
+ HRESULT (STDMETHODCALLTYPE *BeginStateBlock)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *EndStateBlock)(
+ IWineD3DDevice* This,
+ IWineD3DStateBlock **stateblock);
+
+ HRESULT (STDMETHODCALLTYPE *BeginScene)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *EndScene)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *Present)(
+ IWineD3DDevice* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region);
+
+ HRESULT (STDMETHODCALLTYPE *Clear)(
+ IWineD3DDevice* This,
+ DWORD rect_count,
+ const WINED3DRECT *rects,
+ DWORD flags,
+ WINED3DCOLOR color,
+ float z,
+ DWORD stencil);
+
+ void (STDMETHODCALLTYPE *ClearRendertargetView)(
+ IWineD3DDevice* This,
+ IWineD3DRendertargetView *rendertarget_view,
+ const float color[4]);
+
+ void (STDMETHODCALLTYPE *SetPrimitiveType)(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE primitive_topology);
+
+ void (STDMETHODCALLTYPE *GetPrimitiveType)(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE *primitive_topology);
+
+ HRESULT (STDMETHODCALLTYPE *DrawPrimitive)(
+ IWineD3DDevice* This,
+ UINT start_vertex,
+ UINT vertex_count);
+
+ HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitive)(
+ IWineD3DDevice* This,
+ UINT start_idx,
+ UINT index_count);
+
+ HRESULT (STDMETHODCALLTYPE *DrawPrimitiveUP)(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const void *stream_data,
+ UINT stream_stride);
+
+ HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveUP)(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format,
+ const void *stream_data,
+ UINT stream_stride);
+
+ HRESULT (STDMETHODCALLTYPE *DrawPrimitiveStrided)(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const WineDirect3DVertexStridedData *strided_data);
+
+ HRESULT (STDMETHODCALLTYPE *DrawIndexedPrimitiveStrided)(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const WineDirect3DVertexStridedData *strided_data,
+ UINT vertex_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format);
+
+ HRESULT (STDMETHODCALLTYPE *DrawRectPatch)(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DRECTPATCH_INFO *rect_patch_info);
+
+ HRESULT (STDMETHODCALLTYPE *DrawTriPatch)(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DTRIPATCH_INFO *tri_patch_info);
+
+ HRESULT (STDMETHODCALLTYPE *DeletePatch)(
+ IWineD3DDevice* This,
+ UINT handle);
+
+ HRESULT (STDMETHODCALLTYPE *ColorFill)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *surface,
+ const WINED3DRECT *rect,
+ WINED3DCOLOR color);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateTexture)(
+ IWineD3DDevice* This,
+ IWineD3DBaseTexture *src_texture,
+ IWineD3DBaseTexture *dst_texture);
+
+ HRESULT (STDMETHODCALLTYPE *UpdateSurface)(
+ IWineD3DDevice* This,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const POINT *dst_point);
+
+ HRESULT (STDMETHODCALLTYPE *GetFrontBufferData)(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSurface *dst_surface);
+
+ HRESULT (STDMETHODCALLTYPE *EnumResources)(
+ IWineD3DDevice* This,
+ HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+ void *data);
+
+ HRESULT (STDMETHODCALLTYPE *GetSurfaceFromDC)(
+ IWineD3DDevice* This,
+ HDC dc,
+ IWineD3DSurface **surface);
+
+ HRESULT (STDMETHODCALLTYPE *AcquireFocusWindow)(
+ IWineD3DDevice* This,
+ HWND window);
+
+ void (STDMETHODCALLTYPE *ReleaseFocusWindow)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *AddSwapChain)(
+ IWineD3DDevice* This,
+ IWineD3DSwapChain *swapchain);
+
+ HRESULT (STDMETHODCALLTYPE *RemoveSwapChain)(
+ IWineD3DDevice* This,
+ IWineD3DSwapChain *swapchain);
+
+#ifdef VBOX_WITH_WDDM
+ HRESULT (STDMETHODCALLTYPE *Flush)(
+ IWineD3DDevice* This);
+
+ HRESULT (STDMETHODCALLTYPE *VolBlt)(IWineD3DDevice *iface,
+ IWineD3DVolume *pSourceVolume, IWineD3DVolume *pDestinationVolume,
+ const WINED3DBOX *pSrcBoxArg,
+ const struct VBOXPOINT3D *pDstPoin3D
+ );
+
+ HRESULT (STDMETHODCALLTYPE *VolTexBlt)(IWineD3DDevice *iface,
+ IWineD3DVolumeTexture *pSourceTexture, IWineD3DVolumeTexture *pDestinationTexture,
+ const WINED3DBOX *pSrcBoxArg,
+ const struct VBOXPOINT3D *pDstPoin3D
+ );
+
+ HRESULT (STDMETHODCALLTYPE *FlushToHost)(
+ IWineD3DDevice *iface);
+
+ HRESULT (STDMETHODCALLTYPE *Finish)(
+ IWineD3DDevice* This);
+#endif
+
+ END_INTERFACE
+} IWineD3DDeviceVtbl;
+interface IWineD3DDevice {
+ CONST_VTBL IWineD3DDeviceVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IWineD3DDevice_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IWineD3DDevice_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IWineD3DDevice_Release(This) (This)->lpVtbl->Release(This)
+/*** IWineD3DBase methods ***/
+#define IWineD3DDevice_GetParent(This,parent) (This)->lpVtbl->GetParent(This,parent)
+/*** IWineD3DDevice methods ***/
+#define IWineD3DDevice_CreateBuffer(This,desc,data,parent,parent_ops,buffer) (This)->lpVtbl->CreateBuffer(This,desc,data,parent,parent_ops,buffer)
+#define IWineD3DDevice_CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops) (This)->lpVtbl->CreateVertexBuffer(This,length,usage,pool,vertex_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops) (This)->lpVtbl->CreateIndexBuffer(This,length,usage,pool,index_buffer,parent,parent_ops)
+#define IWineD3DDevice_CreateStateBlock(This,type,stateblock,parent) (This)->lpVtbl->CreateStateBlock(This,type,stateblock,parent)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops) (This)->lpVtbl->CreateSurface(This,width,height,format,lockable,discard,level,surface,usage,pool,multisample_type,multisample_quality,surface_type,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateRendertargetView(This,resource,parent,rendertarget_view) (This)->lpVtbl->CreateRendertargetView(This,resource,parent,rendertarget_view)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateTexture(This,width,height,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateVolumeTexture(This,width,height,depth,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops,shared_handle,pvClientMem)
+#else
+#define IWineD3DDevice_CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops) (This)->lpVtbl->CreateVolume(This,width,height,depth,usage,format,pool,volume,parent,parent_ops)
+#endif
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops,shared_handle,pavClientMem)
+#else
+#define IWineD3DDevice_CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops) (This)->lpVtbl->CreateCubeTexture(This,edge_length,levels,usage,format,pool,texture,parent,parent_ops)
+#endif
+#define IWineD3DDevice_CreateQuery(This,type,query,parent) (This)->lpVtbl->CreateQuery(This,type,query,parent)
+#define IWineD3DDevice_CreateSwapChain(This,present_parameters,swapchain,parent,surface_type) (This)->lpVtbl->CreateSwapChain(This,present_parameters,swapchain,parent,surface_type)
+#define IWineD3DDevice_CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count) (This)->lpVtbl->CreateVertexDeclaration(This,declaration,parent,parent_ops,elements,element_count)
+#define IWineD3DDevice_CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf) (This)->lpVtbl->CreateVertexDeclarationFromFVF(This,declaration,parent,parent_ops,fvf)
+#define IWineD3DDevice_CreateVertexShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateVertexShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreateGeometryShader(This,byte_code,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePixelShader(This,function,output_signature,shader,parent,parent_ops) (This)->lpVtbl->CreatePixelShader(This,function,output_signature,shader,parent,parent_ops)
+#define IWineD3DDevice_CreatePalette(This,flags,palette_entry,palette,parent) (This)->lpVtbl->CreatePalette(This,flags,palette_entry,palette,parent)
+#define IWineD3DDevice_Init3D(This,present_parameters) (This)->lpVtbl->Init3D(This,present_parameters)
+#define IWineD3DDevice_InitGDI(This,present_parameters) (This)->lpVtbl->InitGDI(This,present_parameters)
+#define IWineD3DDevice_Uninit3D(This,destroy_swapchain_callback) (This)->lpVtbl->Uninit3D(This,destroy_swapchain_callback)
+#define IWineD3DDevice_UninitGDI(This,destroy_swapchain_callback) (This)->lpVtbl->UninitGDI(This,destroy_swapchain_callback)
+#define IWineD3DDevice_SetMultithreaded(This) (This)->lpVtbl->SetMultithreaded(This)
+#define IWineD3DDevice_EvictManagedResources(This) (This)->lpVtbl->EvictManagedResources(This)
+#define IWineD3DDevice_GetAvailableTextureMem(This) (This)->lpVtbl->GetAvailableTextureMem(This)
+#define IWineD3DDevice_GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer) (This)->lpVtbl->GetBackBuffer(This,swapchain_idx,backbuffer_idx,backbuffer_type,backbuffer)
+#define IWineD3DDevice_GetCreationParameters(This,creation_parameters) (This)->lpVtbl->GetCreationParameters(This,creation_parameters)
+#define IWineD3DDevice_GetDeviceCaps(This,caps) (This)->lpVtbl->GetDeviceCaps(This,caps)
+#define IWineD3DDevice_GetDirect3D(This,d3d) (This)->lpVtbl->GetDirect3D(This,d3d)
+#define IWineD3DDevice_GetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->GetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_SetDisplayMode(This,swapchain_idx,mode) (This)->lpVtbl->SetDisplayMode(This,swapchain_idx,mode)
+#define IWineD3DDevice_GetNumberOfSwapChains(This) (This)->lpVtbl->GetNumberOfSwapChains(This)
+#define IWineD3DDevice_GetRasterStatus(This,swapchain_idx,raster_status) (This)->lpVtbl->GetRasterStatus(This,swapchain_idx,raster_status)
+#define IWineD3DDevice_GetSwapChain(This,swapchain_idx,swapchain) (This)->lpVtbl->GetSwapChain(This,swapchain_idx,swapchain)
+#define IWineD3DDevice_Reset(This,present_parameters) (This)->lpVtbl->Reset(This,present_parameters)
+#define IWineD3DDevice_SetDialogBoxMode(This,enable_dialogs) (This)->lpVtbl->SetDialogBoxMode(This,enable_dialogs)
+#define IWineD3DDevice_SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface) (This)->lpVtbl->SetCursorProperties(This,x_hotspot,y_hotspot,cursor_surface)
+#define IWineD3DDevice_SetCursorPosition(This,x_screen_space,y_screen_space,flags) (This)->lpVtbl->SetCursorPosition(This,x_screen_space,y_screen_space,flags)
+#define IWineD3DDevice_ShowCursor(This,show) (This)->lpVtbl->ShowCursor(This,show)
+#define IWineD3DDevice_SetClipPlane(This,plane_idx,plane) (This)->lpVtbl->SetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_GetClipPlane(This,plane_idx,plane) (This)->lpVtbl->GetClipPlane(This,plane_idx,plane)
+#define IWineD3DDevice_SetClipStatus(This,clip_status) (This)->lpVtbl->SetClipStatus(This,clip_status)
+#define IWineD3DDevice_GetClipStatus(This,clip_status) (This)->lpVtbl->GetClipStatus(This,clip_status)
+#define IWineD3DDevice_SetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->SetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_GetCurrentTexturePalette(This,palette_number) (This)->lpVtbl->GetCurrentTexturePalette(This,palette_number)
+#define IWineD3DDevice_SetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->SetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_GetDepthStencilSurface(This,depth_stencil) (This)->lpVtbl->GetDepthStencilSurface(This,depth_stencil)
+#define IWineD3DDevice_SetGammaRamp(This,swapchain_idx,flags,ramp) (This)->lpVtbl->SetGammaRamp(This,swapchain_idx,flags,ramp)
+#define IWineD3DDevice_GetGammaRamp(This,swapchain_idx,ramp) (This)->lpVtbl->GetGammaRamp(This,swapchain_idx,ramp)
+#define IWineD3DDevice_SetIndexBuffer(This,index_buffer,format) (This)->lpVtbl->SetIndexBuffer(This,index_buffer,format)
+#define IWineD3DDevice_GetIndexBuffer(This,index_buffer) (This)->lpVtbl->GetIndexBuffer(This,index_buffer)
+#define IWineD3DDevice_SetBaseVertexIndex(This,base_index) (This)->lpVtbl->SetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_GetBaseVertexIndex(This,base_index) (This)->lpVtbl->GetBaseVertexIndex(This,base_index)
+#define IWineD3DDevice_SetLight(This,light_idx,light) (This)->lpVtbl->SetLight(This,light_idx,light)
+#define IWineD3DDevice_GetLight(This,light_idx,light) (This)->lpVtbl->GetLight(This,light_idx,light)
+#define IWineD3DDevice_SetLightEnable(This,light_idx,enable) (This)->lpVtbl->SetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_GetLightEnable(This,light_idx,enable) (This)->lpVtbl->GetLightEnable(This,light_idx,enable)
+#define IWineD3DDevice_SetMaterial(This,material) (This)->lpVtbl->SetMaterial(This,material)
+#define IWineD3DDevice_GetMaterial(This,material) (This)->lpVtbl->GetMaterial(This,material)
+#define IWineD3DDevice_SetNPatchMode(This,segments) (This)->lpVtbl->SetNPatchMode(This,segments)
+#define IWineD3DDevice_GetNPatchMode(This) (This)->lpVtbl->GetNPatchMode(This)
+#define IWineD3DDevice_SetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->SetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_GetPaletteEntries(This,palette_number,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_number,entries)
+#define IWineD3DDevice_SetPixelShader(This,shader) (This)->lpVtbl->SetPixelShader(This,shader)
+#define IWineD3DDevice_GetPixelShader(This,shader) (This)->lpVtbl->GetPixelShader(This,shader)
+#define IWineD3DDevice_SetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetPixelShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetPixelShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetPixelShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetPixelShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetPixelShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetPixelShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetRenderState(This,state,value) (This)->lpVtbl->SetRenderState(This,state,value)
+#define IWineD3DDevice_GetRenderState(This,state,value) (This)->lpVtbl->GetRenderState(This,state,value)
+#define IWineD3DDevice_SetRenderTarget(This,render_target_idx,render_target,set_viewport) (This)->lpVtbl->SetRenderTarget(This,render_target_idx,render_target,set_viewport)
+#define IWineD3DDevice_GetRenderTarget(This,render_target_idx,render_target) (This)->lpVtbl->GetRenderTarget(This,render_target_idx,render_target)
+#define IWineD3DDevice_SetFrontBackBuffers(This,front,back) (This)->lpVtbl->SetFrontBackBuffers(This,front,back)
+#define IWineD3DDevice_SetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->SetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_GetSamplerState(This,sampler_idx,state,value) (This)->lpVtbl->GetSamplerState(This,sampler_idx,state,value)
+#define IWineD3DDevice_SetScissorRect(This,rect) (This)->lpVtbl->SetScissorRect(This,rect)
+#define IWineD3DDevice_GetScissorRect(This,rect) (This)->lpVtbl->GetScissorRect(This,rect)
+#define IWineD3DDevice_SetSoftwareVertexProcessing(This,software) (This)->lpVtbl->SetSoftwareVertexProcessing(This,software)
+#define IWineD3DDevice_GetSoftwareVertexProcessing(This) (This)->lpVtbl->GetSoftwareVertexProcessing(This)
+#define IWineD3DDevice_SetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->SetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_GetStreamSource(This,stream_idx,buffer,offset,stride) (This)->lpVtbl->GetStreamSource(This,stream_idx,buffer,offset,stride)
+#define IWineD3DDevice_SetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->SetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_GetStreamSourceFreq(This,stream_idx,divider) (This)->lpVtbl->GetStreamSourceFreq(This,stream_idx,divider)
+#define IWineD3DDevice_SetTexture(This,stage,texture) (This)->lpVtbl->SetTexture(This,stage,texture)
+#define IWineD3DDevice_GetTexture(This,stage,texture) (This)->lpVtbl->GetTexture(This,stage,texture)
+#define IWineD3DDevice_SetTextureStageState(This,stage,state,value) (This)->lpVtbl->SetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_GetTextureStageState(This,stage,state,value) (This)->lpVtbl->GetTextureStageState(This,stage,state,value)
+#define IWineD3DDevice_SetTransform(This,state,matrix) (This)->lpVtbl->SetTransform(This,state,matrix)
+#define IWineD3DDevice_GetTransform(This,state,matrix) (This)->lpVtbl->GetTransform(This,state,matrix)
+#define IWineD3DDevice_SetVertexDeclaration(This,declaration) (This)->lpVtbl->SetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_GetVertexDeclaration(This,declaration) (This)->lpVtbl->GetVertexDeclaration(This,declaration)
+#define IWineD3DDevice_SetVertexShader(This,shader) (This)->lpVtbl->SetVertexShader(This,shader)
+#define IWineD3DDevice_GetVertexShader(This,shader) (This)->lpVtbl->GetVertexShader(This,shader)
+#define IWineD3DDevice_SetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->SetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_GetVertexShaderConstantB(This,start_register,constants,bool_count) (This)->lpVtbl->GetVertexShaderConstantB(This,start_register,constants,bool_count)
+#define IWineD3DDevice_SetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->SetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_GetVertexShaderConstantI(This,start_register,constants,vector4i_count) (This)->lpVtbl->GetVertexShaderConstantI(This,start_register,constants,vector4i_count)
+#define IWineD3DDevice_SetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->SetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_GetVertexShaderConstantF(This,start_register,constants,vector4f_count) (This)->lpVtbl->GetVertexShaderConstantF(This,start_register,constants,vector4f_count)
+#define IWineD3DDevice_SetViewport(This,viewport) (This)->lpVtbl->SetViewport(This,viewport)
+#define IWineD3DDevice_GetViewport(This,viewport) (This)->lpVtbl->GetViewport(This,viewport)
+#define IWineD3DDevice_MultiplyTransform(This,state,matrix) (This)->lpVtbl->MultiplyTransform(This,state,matrix)
+#define IWineD3DDevice_ValidateDevice(This,num_passes) (This)->lpVtbl->ValidateDevice(This,num_passes)
+#define IWineD3DDevice_ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF) (This)->lpVtbl->ProcessVertices(This,src_start_idx,dst_idx,vertex_count,dest_buffer,declaration,flags,DestFVF)
+#define IWineD3DDevice_BeginStateBlock(This) (This)->lpVtbl->BeginStateBlock(This)
+#define IWineD3DDevice_EndStateBlock(This,stateblock) (This)->lpVtbl->EndStateBlock(This,stateblock)
+#define IWineD3DDevice_BeginScene(This) (This)->lpVtbl->BeginScene(This)
+#define IWineD3DDevice_EndScene(This) (This)->lpVtbl->EndScene(This)
+#define IWineD3DDevice_Present(This,src_rect,dst_rect,dst_window_override,dirty_region) (This)->lpVtbl->Present(This,src_rect,dst_rect,dst_window_override,dirty_region)
+#define IWineD3DDevice_Clear(This,rect_count,rects,flags,color,z,stencil) (This)->lpVtbl->Clear(This,rect_count,rects,flags,color,z,stencil)
+#define IWineD3DDevice_ClearRendertargetView(This,rendertarget_view,color) (This)->lpVtbl->ClearRendertargetView(This,rendertarget_view,color)
+#define IWineD3DDevice_SetPrimitiveType(This,primitive_topology) (This)->lpVtbl->SetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_GetPrimitiveType(This,primitive_topology) (This)->lpVtbl->GetPrimitiveType(This,primitive_topology)
+#define IWineD3DDevice_DrawPrimitive(This,start_vertex,vertex_count) (This)->lpVtbl->DrawPrimitive(This,start_vertex,vertex_count)
+#define IWineD3DDevice_DrawIndexedPrimitive(This,start_idx,index_count) (This)->lpVtbl->DrawIndexedPrimitive(This,start_idx,index_count)
+#define IWineD3DDevice_DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride) (This)->lpVtbl->DrawPrimitiveUP(This,vertex_count,stream_data,stream_stride)
+#define IWineD3DDevice_DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride) (This)->lpVtbl->DrawIndexedPrimitiveUP(This,index_count,index_data,index_data_format,stream_data,stream_stride)
+#define IWineD3DDevice_DrawPrimitiveStrided(This,vertex_count,strided_data) (This)->lpVtbl->DrawPrimitiveStrided(This,vertex_count,strided_data)
+#define IWineD3DDevice_DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format) (This)->lpVtbl->DrawIndexedPrimitiveStrided(This,index_count,strided_data,vertex_count,index_data,index_data_format)
+#define IWineD3DDevice_DrawRectPatch(This,handle,num_segs,rect_patch_info) (This)->lpVtbl->DrawRectPatch(This,handle,num_segs,rect_patch_info)
+#define IWineD3DDevice_DrawTriPatch(This,handle,num_segs,tri_patch_info) (This)->lpVtbl->DrawTriPatch(This,handle,num_segs,tri_patch_info)
+#define IWineD3DDevice_DeletePatch(This,handle) (This)->lpVtbl->DeletePatch(This,handle)
+#define IWineD3DDevice_ColorFill(This,surface,rect,color) (This)->lpVtbl->ColorFill(This,surface,rect,color)
+#define IWineD3DDevice_UpdateTexture(This,src_texture,dst_texture) (This)->lpVtbl->UpdateTexture(This,src_texture,dst_texture)
+#define IWineD3DDevice_UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point) (This)->lpVtbl->UpdateSurface(This,src_surface,src_rect,dst_surface,dst_point)
+#define IWineD3DDevice_GetFrontBufferData(This,swapchain_idx,dst_surface) (This)->lpVtbl->GetFrontBufferData(This,swapchain_idx,dst_surface)
+#define IWineD3DDevice_EnumResources(This,callback,data) (This)->lpVtbl->EnumResources(This,callback,data)
+#define IWineD3DDevice_GetSurfaceFromDC(This,dc,surface) (This)->lpVtbl->GetSurfaceFromDC(This,dc,surface)
+#define IWineD3DDevice_AcquireFocusWindow(This,window) (This)->lpVtbl->AcquireFocusWindow(This,window)
+#define IWineD3DDevice_ReleaseFocusWindow(This) (This)->lpVtbl->ReleaseFocusWindow(This)
+#define IWineD3DDevice_AddSwapChain(This,swapchain) (This)->lpVtbl->AddSwapChain(This,swapchain)
+#define IWineD3DDevice_RemoveSwapChain(This,swapchain) (This)->lpVtbl->RemoveSwapChain(This,swapchain)
+#ifdef VBOX_WITH_WDDM
+#define IWineD3DDevice_Flush(This) (This)->lpVtbl->Flush(This)
+#define IWineD3DDevice_VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolBlt(This, pSourceVolume, pDestinationVolume, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D) (This)->lpVtbl->VolTexBlt(This, pSourceTexture, pDestinationTexture, pSrcBoxArg, pDstPoin3D)
+#define IWineD3DDevice_FlushToHost(This) (This)->lpVtbl->FlushToHost(This)
+#define IWineD3DDevice_Finish(This) (This)->lpVtbl->Finish(This)
+#endif
+#endif
+
+#endif
+
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateBuffer_Proxy(
+ IWineD3DDevice* This,
+ struct wined3d_buffer_desc *desc,
+ const void *data,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ IWineD3DBuffer **buffer);
+void __RPC_STUB IWineD3DDevice_CreateBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexBuffer_Proxy(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **vertex_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateIndexBuffer_Proxy(
+ IWineD3DDevice* This,
+ UINT length,
+ DWORD usage,
+ WINED3DPOOL pool,
+ IWineD3DBuffer **index_buffer,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateIndexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateStateBlock_Proxy(
+ IWineD3DDevice* This,
+ WINED3DSTATEBLOCKTYPE type,
+ IWineD3DStateBlock **stateblock,
+ IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSurface_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ WINED3DFORMAT format,
+ BOOL lockable,
+ BOOL discard,
+ UINT level,
+ IWineD3DSurface **surface,
+ DWORD usage,
+ WINED3DPOOL pool,
+ WINED3DMULTISAMPLE_TYPE multisample_type,
+ DWORD multisample_quality,
+ WINED3DSURFTYPE surface_type,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateRendertargetView_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DResource *resource,
+ IUnknown *parent,
+ IWineD3DRendertargetView **rendertarget_view);
+void __RPC_STUB IWineD3DDevice_CreateRendertargetView_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateTexture_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolumeTexture_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolumeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolumeTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVolume_Proxy(
+ IWineD3DDevice* This,
+ UINT width,
+ UINT height,
+ UINT depth,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DVolume **volume,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVolume_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateCubeTexture_Proxy(
+ IWineD3DDevice* This,
+ UINT edge_length,
+ UINT levels,
+ DWORD usage,
+ WINED3DFORMAT format,
+ WINED3DPOOL pool,
+ IWineD3DCubeTexture **texture,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateCubeTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateQuery_Proxy(
+ IWineD3DDevice* This,
+ WINED3DQUERYTYPE type,
+ IWineD3DQuery **query,
+ IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreateQuery_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateSwapChain_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters,
+ IWineD3DSwapChain **swapchain,
+ IUnknown *parent,
+ WINED3DSURFTYPE surface_type);
+void __RPC_STUB IWineD3DDevice_CreateSwapChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclaration_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ const WINED3DVERTEXELEMENT *elements,
+ UINT element_count);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclaration_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexDeclarationFromFVF_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops,
+ DWORD fvf);
+void __RPC_STUB IWineD3DDevice_CreateVertexDeclarationFromFVF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateVertexShader_Proxy(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DVertexShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateVertexShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreateGeometryShader_Proxy(
+ IWineD3DDevice* This,
+ const DWORD *byte_code,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DGeometryShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreateGeometryShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePixelShader_Proxy(
+ IWineD3DDevice* This,
+ const DWORD *function,
+ const struct wined3d_shader_signature *output_signature,
+ IWineD3DPixelShader **shader,
+ IUnknown *parent,
+ const struct wined3d_parent_ops *parent_ops);
+void __RPC_STUB IWineD3DDevice_CreatePixelShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_CreatePalette_Proxy(
+ IWineD3DDevice* This,
+ DWORD flags,
+ const PALETTEENTRY *palette_entry,
+ IWineD3DPalette **palette,
+ IUnknown *parent);
+void __RPC_STUB IWineD3DDevice_CreatePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Init3D_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Init3D_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_InitGDI_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_InitGDI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Uninit3D_Proxy(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_Uninit3D_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UninitGDI_Proxy(
+ IWineD3DDevice* This,
+ ULONG (STDMETHODCALLTYPE * destroy_swapchain_callback)(IWineD3DSwapChain *pSwapChain));
+void __RPC_STUB IWineD3DDevice_UninitGDI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetMultithreaded_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_SetMultithreaded_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EvictManagedResources_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EvictManagedResources_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetAvailableTextureMem_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetAvailableTextureMem_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBackBuffer_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ UINT backbuffer_idx,
+ WINED3DBACKBUFFER_TYPE backbuffer_type,
+ IWineD3DSurface **backbuffer);
+void __RPC_STUB IWineD3DDevice_GetBackBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCreationParameters_Proxy(
+ IWineD3DDevice* This,
+ WINED3DDEVICE_CREATION_PARAMETERS *creation_parameters);
+void __RPC_STUB IWineD3DDevice_GetCreationParameters_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDeviceCaps_Proxy(
+ IWineD3DDevice* This,
+ WINED3DCAPS *caps);
+void __RPC_STUB IWineD3DDevice_GetDeviceCaps_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDirect3D_Proxy(
+ IWineD3DDevice* This,
+ IWineD3D **d3d);
+void __RPC_STUB IWineD3DDevice_GetDirect3D_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDisplayMode_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_GetDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDisplayMode_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ const WINED3DDISPLAYMODE *mode);
+void __RPC_STUB IWineD3DDevice_SetDisplayMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+UINT STDMETHODCALLTYPE IWineD3DDevice_GetNumberOfSwapChains_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNumberOfSwapChains_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRasterStatus_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DRASTER_STATUS *raster_status);
+void __RPC_STUB IWineD3DDevice_GetRasterStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSwapChain_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSwapChain **swapchain);
+void __RPC_STUB IWineD3DDevice_GetSwapChain_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Reset_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRESENT_PARAMETERS *present_parameters);
+void __RPC_STUB IWineD3DDevice_Reset_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDialogBoxMode_Proxy(
+ IWineD3DDevice* This,
+ BOOL enable_dialogs);
+void __RPC_STUB IWineD3DDevice_SetDialogBoxMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCursorProperties_Proxy(
+ IWineD3DDevice* This,
+ UINT x_hotspot,
+ UINT y_hotspot,
+ IWineD3DSurface *cursor_surface);
+void __RPC_STUB IWineD3DDevice_SetCursorProperties_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetCursorPosition_Proxy(
+ IWineD3DDevice* This,
+ int x_screen_space,
+ int y_screen_space,
+ DWORD flags);
+void __RPC_STUB IWineD3DDevice_SetCursorPosition_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_ShowCursor_Proxy(
+ IWineD3DDevice* This,
+ BOOL show);
+void __RPC_STUB IWineD3DDevice_ShowCursor_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipPlane_Proxy(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ const float *plane);
+void __RPC_STUB IWineD3DDevice_SetClipPlane_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipPlane_Proxy(
+ IWineD3DDevice* This,
+ DWORD plane_idx,
+ float *plane);
+void __RPC_STUB IWineD3DDevice_GetClipPlane_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetClipStatus_Proxy(
+ IWineD3DDevice* This,
+ const WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_SetClipStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetClipStatus_Proxy(
+ IWineD3DDevice* This,
+ WINED3DCLIPSTATUS *clip_status);
+void __RPC_STUB IWineD3DDevice_GetClipStatus_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetCurrentTexturePalette_Proxy(
+ IWineD3DDevice* This,
+ UINT palette_number);
+void __RPC_STUB IWineD3DDevice_SetCurrentTexturePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetCurrentTexturePalette_Proxy(
+ IWineD3DDevice* This,
+ UINT *palette_number);
+void __RPC_STUB IWineD3DDevice_GetCurrentTexturePalette_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetDepthStencilSurface_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *depth_stencil);
+void __RPC_STUB IWineD3DDevice_SetDepthStencilSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetDepthStencilSurface_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface **depth_stencil);
+void __RPC_STUB IWineD3DDevice_GetDepthStencilSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetGammaRamp_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ DWORD flags,
+ const WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_SetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetGammaRamp_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ WINED3DGAMMARAMP *ramp);
+void __RPC_STUB IWineD3DDevice_GetGammaRamp_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetIndexBuffer_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DBuffer *index_buffer,
+ WINED3DFORMAT format);
+void __RPC_STUB IWineD3DDevice_SetIndexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetIndexBuffer_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DBuffer **index_buffer);
+void __RPC_STUB IWineD3DDevice_GetIndexBuffer_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetBaseVertexIndex_Proxy(
+ IWineD3DDevice* This,
+ INT base_index);
+void __RPC_STUB IWineD3DDevice_SetBaseVertexIndex_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetBaseVertexIndex_Proxy(
+ IWineD3DDevice* This,
+ INT *base_index);
+void __RPC_STUB IWineD3DDevice_GetBaseVertexIndex_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLight_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ const WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_SetLight_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLight_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ WINED3DLIGHT *light);
+void __RPC_STUB IWineD3DDevice_GetLight_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetLightEnable_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL enable);
+void __RPC_STUB IWineD3DDevice_SetLightEnable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetLightEnable_Proxy(
+ IWineD3DDevice* This,
+ DWORD light_idx,
+ BOOL *enable);
+void __RPC_STUB IWineD3DDevice_GetLightEnable_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetMaterial_Proxy(
+ IWineD3DDevice* This,
+ const WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_SetMaterial_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetMaterial_Proxy(
+ IWineD3DDevice* This,
+ WINED3DMATERIAL *material);
+void __RPC_STUB IWineD3DDevice_GetMaterial_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetNPatchMode_Proxy(
+ IWineD3DDevice* This,
+ float segments);
+void __RPC_STUB IWineD3DDevice_SetNPatchMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+float STDMETHODCALLTYPE IWineD3DDevice_GetNPatchMode_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetNPatchMode_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPaletteEntries_Proxy(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ const PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_SetPaletteEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPaletteEntries_Proxy(
+ IWineD3DDevice* This,
+ UINT palette_number,
+ PALETTEENTRY *entries);
+void __RPC_STUB IWineD3DDevice_GetPaletteEntries_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader *shader);
+void __RPC_STUB IWineD3DDevice_SetPixelShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DPixelShader **shader);
+void __RPC_STUB IWineD3DDevice_GetPixelShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetPixelShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetPixelShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetPixelShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetPixelShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderState_Proxy(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD value);
+void __RPC_STUB IWineD3DDevice_SetRenderState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderState_Proxy(
+ IWineD3DDevice* This,
+ WINED3DRENDERSTATETYPE state,
+ DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetRenderState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetRenderTarget_Proxy(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface *render_target,
+ BOOL set_viewport);
+void __RPC_STUB IWineD3DDevice_SetRenderTarget_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetRenderTarget_Proxy(
+ IWineD3DDevice* This,
+ DWORD render_target_idx,
+ IWineD3DSurface **render_target);
+void __RPC_STUB IWineD3DDevice_GetRenderTarget_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetFrontBackBuffers_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *front,
+ IWineD3DSurface *back);
+void __RPC_STUB IWineD3DDevice_SetFrontBackBuffers_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSamplerState_Proxy(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD value);
+void __RPC_STUB IWineD3DDevice_SetSamplerState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSamplerState_Proxy(
+ IWineD3DDevice* This,
+ DWORD sampler_idx,
+ WINED3DSAMPLERSTATETYPE state,
+ DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetSamplerState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetScissorRect_Proxy(
+ IWineD3DDevice* This,
+ const RECT *rect);
+void __RPC_STUB IWineD3DDevice_SetScissorRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetScissorRect_Proxy(
+ IWineD3DDevice* This,
+ RECT *rect);
+void __RPC_STUB IWineD3DDevice_GetScissorRect_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetSoftwareVertexProcessing_Proxy(
+ IWineD3DDevice* This,
+ BOOL software);
+void __RPC_STUB IWineD3DDevice_SetSoftwareVertexProcessing_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+BOOL STDMETHODCALLTYPE IWineD3DDevice_GetSoftwareVertexProcessing_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_GetSoftwareVertexProcessing_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSource_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer *buffer,
+ UINT offset,
+ UINT stride);
+void __RPC_STUB IWineD3DDevice_SetStreamSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSource_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ IWineD3DBuffer **buffer,
+ UINT *offset,
+ UINT *stride);
+void __RPC_STUB IWineD3DDevice_GetStreamSource_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetStreamSourceFreq_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT divider);
+void __RPC_STUB IWineD3DDevice_SetStreamSourceFreq_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetStreamSourceFreq_Proxy(
+ IWineD3DDevice* This,
+ UINT stream_idx,
+ UINT *divider);
+void __RPC_STUB IWineD3DDevice_GetStreamSourceFreq_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTexture_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture *texture);
+void __RPC_STUB IWineD3DDevice_SetTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTexture_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ IWineD3DBaseTexture **texture);
+void __RPC_STUB IWineD3DDevice_GetTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTextureStageState_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD value);
+void __RPC_STUB IWineD3DDevice_SetTextureStageState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTextureStageState_Proxy(
+ IWineD3DDevice* This,
+ DWORD stage,
+ WINED3DTEXTURESTAGESTATETYPE state,
+ DWORD *value);
+void __RPC_STUB IWineD3DDevice_GetTextureStageState_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetTransform_Proxy(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_SetTransform_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetTransform_Proxy(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_GetTransform_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexDeclaration_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration *declaration);
+void __RPC_STUB IWineD3DDevice_SetVertexDeclaration_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexDeclaration_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexDeclaration **declaration);
+void __RPC_STUB IWineD3DDevice_GetVertexDeclaration_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader *shader);
+void __RPC_STUB IWineD3DDevice_SetVertexShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShader_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DVertexShader **shader);
+void __RPC_STUB IWineD3DDevice_GetVertexShader_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantB_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ BOOL *constants,
+ UINT bool_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantB_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantI_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ int *constants,
+ UINT vector4i_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantI_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetVertexShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ const float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_SetVertexShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetVertexShaderConstantF_Proxy(
+ IWineD3DDevice* This,
+ UINT start_register,
+ float *constants,
+ UINT vector4f_count);
+void __RPC_STUB IWineD3DDevice_GetVertexShaderConstantF_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_SetViewport_Proxy(
+ IWineD3DDevice* This,
+ const WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_SetViewport_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetViewport_Proxy(
+ IWineD3DDevice* This,
+ WINED3DVIEWPORT *viewport);
+void __RPC_STUB IWineD3DDevice_GetViewport_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_MultiplyTransform_Proxy(
+ IWineD3DDevice* This,
+ WINED3DTRANSFORMSTATETYPE state,
+ const WINED3DMATRIX *matrix);
+void __RPC_STUB IWineD3DDevice_MultiplyTransform_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ValidateDevice_Proxy(
+ IWineD3DDevice* This,
+ DWORD *num_passes);
+void __RPC_STUB IWineD3DDevice_ValidateDevice_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ProcessVertices_Proxy(
+ IWineD3DDevice* This,
+ UINT src_start_idx,
+ UINT dst_idx,
+ UINT vertex_count,
+ IWineD3DBuffer *dest_buffer,
+ IWineD3DVertexDeclaration *declaration,
+ DWORD flags,
+ DWORD DestFVF);
+void __RPC_STUB IWineD3DDevice_ProcessVertices_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginStateBlock_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndStateBlock_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DStateBlock **stateblock);
+void __RPC_STUB IWineD3DDevice_EndStateBlock_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_BeginScene_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_BeginScene_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EndScene_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_EndScene_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Present_Proxy(
+ IWineD3DDevice* This,
+ const RECT *src_rect,
+ const RECT *dst_rect,
+ HWND dst_window_override,
+ const RGNDATA *dirty_region);
+void __RPC_STUB IWineD3DDevice_Present_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_Clear_Proxy(
+ IWineD3DDevice* This,
+ DWORD rect_count,
+ const WINED3DRECT *rects,
+ DWORD flags,
+ WINED3DCOLOR color,
+ float z,
+ DWORD stencil);
+void __RPC_STUB IWineD3DDevice_Clear_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ClearRendertargetView_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DRendertargetView *rendertarget_view,
+ const float color[4]);
+void __RPC_STUB IWineD3DDevice_ClearRendertargetView_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_SetPrimitiveType_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE primitive_topology);
+void __RPC_STUB IWineD3DDevice_SetPrimitiveType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_GetPrimitiveType_Proxy(
+ IWineD3DDevice* This,
+ WINED3DPRIMITIVETYPE *primitive_topology);
+void __RPC_STUB IWineD3DDevice_GetPrimitiveType_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitive_Proxy(
+ IWineD3DDevice* This,
+ UINT start_vertex,
+ UINT vertex_count);
+void __RPC_STUB IWineD3DDevice_DrawPrimitive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitive_Proxy(
+ IWineD3DDevice* This,
+ UINT start_idx,
+ UINT index_count);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitive_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveUP_Proxy(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const void *stream_data,
+ UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveUP_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveUP_Proxy(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format,
+ const void *stream_data,
+ UINT stream_stride);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveUP_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawPrimitiveStrided_Proxy(
+ IWineD3DDevice* This,
+ UINT vertex_count,
+ const WineDirect3DVertexStridedData *strided_data);
+void __RPC_STUB IWineD3DDevice_DrawPrimitiveStrided_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawIndexedPrimitiveStrided_Proxy(
+ IWineD3DDevice* This,
+ UINT index_count,
+ const WineDirect3DVertexStridedData *strided_data,
+ UINT vertex_count,
+ const void *index_data,
+ WINED3DFORMAT index_data_format);
+void __RPC_STUB IWineD3DDevice_DrawIndexedPrimitiveStrided_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawRectPatch_Proxy(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DRECTPATCH_INFO *rect_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawRectPatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DrawTriPatch_Proxy(
+ IWineD3DDevice* This,
+ UINT handle,
+ const float *num_segs,
+ const WINED3DTRIPATCH_INFO *tri_patch_info);
+void __RPC_STUB IWineD3DDevice_DrawTriPatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_DeletePatch_Proxy(
+ IWineD3DDevice* This,
+ UINT handle);
+void __RPC_STUB IWineD3DDevice_DeletePatch_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_ColorFill_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *surface,
+ const WINED3DRECT *rect,
+ WINED3DCOLOR color);
+void __RPC_STUB IWineD3DDevice_ColorFill_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateTexture_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DBaseTexture *src_texture,
+ IWineD3DBaseTexture *dst_texture);
+void __RPC_STUB IWineD3DDevice_UpdateTexture_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_UpdateSurface_Proxy(
+ IWineD3DDevice* This,
+ IWineD3DSurface *src_surface,
+ const RECT *src_rect,
+ IWineD3DSurface *dst_surface,
+ const POINT *dst_point);
+void __RPC_STUB IWineD3DDevice_UpdateSurface_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetFrontBufferData_Proxy(
+ IWineD3DDevice* This,
+ UINT swapchain_idx,
+ IWineD3DSurface *dst_surface);
+void __RPC_STUB IWineD3DDevice_GetFrontBufferData_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_EnumResources_Proxy(
+ IWineD3DDevice* This,
+ HRESULT (STDMETHODCALLTYPE * callback)(IWineD3DResource *resource,void *pData),
+ void *data);
+void __RPC_STUB IWineD3DDevice_EnumResources_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_GetSurfaceFromDC_Proxy(
+ IWineD3DDevice* This,
+ HDC dc,
+ IWineD3DSurface **surface);
+void __RPC_STUB IWineD3DDevice_GetSurfaceFromDC_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+HRESULT STDMETHODCALLTYPE IWineD3DDevice_AcquireFocusWindow_Proxy(
+ IWineD3DDevice* This,
+ HWND window);
+void __RPC_STUB IWineD3DDevice_AcquireFocusWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+void STDMETHODCALLTYPE IWineD3DDevice_ReleaseFocusWindow_Proxy(
+ IWineD3DDevice* This);
+void __RPC_STUB IWineD3DDevice_ReleaseFocusWindow_Stub(
+ IRpcStubBuffer* This,
+ IRpcChannelBuffer* pRpcChannelBuffer,
+ PRPC_MESSAGE pRpcMessage,
+ DWORD* pdwStubPhase);
+
+#endif /* __IWineD3DDevice_INTERFACE_DEFINED__ */
+
+IWineD3D * STDMETHODCALLTYPE WineDirect3DCreate(UINT dxVersion,IUnknown *parent);
+
+IWineD3DClipper * STDMETHODCALLTYPE WineDirect3DCreateClipper(IUnknown *parent);
+
+#ifdef VBOX_WINE_NO_LOCK
+#define wined3d_mutex_lock() do {} while (0)
+#define wined3d_mutex_unlock() do {} while (0)
+#else
+void STDMETHODCALLTYPE wined3d_mutex_lock(void);
+
+void STDMETHODCALLTYPE wined3d_mutex_unlock(void);
+#endif
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WINED3D_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl
new file mode 100644
index 00000000..19483ac5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winedxgi.idl
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2008-2009 Henri Verbeet for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "dxgi.idl";
+
+[
+ object,
+ local,
+ uuid(a07ad9ab-fb01-4574-8bfb-0a70a7373f04)
+]
+interface IWineDXGIFactory : IDXGIFactory
+{
+ struct wined3d *get_wined3d();
+}
+
+[
+ object,
+ local,
+ uuid(ab1de34c-2963-4ffd-8493-40f580e510e5)
+]
+interface IWineDXGIAdapter : IDXGIAdapter
+{
+ UINT get_ordinal();
+}
+
+[
+ object,
+ local,
+ uuid(3e1ff30b-c951-48c3-b010-0fb49f3dca71)
+]
+interface IWineDXGIDevice : IDXGIDevice
+{
+ struct wined3d_device *get_wined3d_device();
+ HRESULT create_surface(
+ [in] const DXGI_SURFACE_DESC *desc,
+ [in] DXGI_USAGE usage,
+ [in] const DXGI_SHARED_RESOURCE *shared_resource,
+ [in] IUnknown *outer,
+ [out] void **surface
+ );
+ HRESULT create_swapchain(
+ [in] struct wined3d_swapchain_desc *desc,
+ [out] struct wined3d_swapchain **wined3d_swapchain
+ );
+}
+
+[
+ object,
+ local,
+ uuid(f2b918f3-603f-430a-9ccd-55872b6e85df)
+]
+interface IWineDXGIDeviceParent : IUnknown
+{
+ struct wined3d_device_parent *get_wined3d_device_parent();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h
new file mode 100644
index 00000000..3cf666d1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wingdi16.h
@@ -0,0 +1,629 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_WINGDI16_H
+#define __WINE_WINE_WINGDI16_H
+
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <wingdi.h>
+#include <wine/winbase16.h>
+
+#include <pshpack1.h>
+
+typedef HANDLE16 HPQ16;
+typedef HANDLE16 HPJOB16;
+
+typedef struct
+{
+ WORD wFirst;
+ WORD wSecond;
+ INT16 iKernAmount;
+} KERNINGPAIR16, *LPKERNINGPAIR16;
+
+typedef struct
+{
+ INT16 bmType;
+ INT16 bmWidth;
+ INT16 bmHeight;
+ INT16 bmWidthBytes;
+ BYTE bmPlanes;
+ BYTE bmBitsPixel;
+ SEGPTR bmBits;
+} BITMAP16, *LPBITMAP16;
+
+typedef struct
+{
+ UINT16 lbStyle;
+ COLORREF lbColor;
+ INT16 lbHatch;
+} LOGBRUSH16, *LPLOGBRUSH16;
+
+typedef struct
+{
+ INT16 lfHeight;
+ INT16 lfWidth;
+ INT16 lfEscapement;
+ INT16 lfOrientation;
+ INT16 lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ CHAR lfFaceName[LF_FACESIZE];
+} LOGFONT16, *LPLOGFONT16;
+
+typedef struct
+{
+ LOGFONT16 elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+} ENUMLOGFONT16, *LPENUMLOGFONT16;
+
+typedef struct
+{
+ LOGFONT16 elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+ BYTE elfScript[LF_FACESIZE];
+} ENUMLOGFONTEX16, *LPENUMLOGFONTEX16;
+
+typedef struct
+{
+ INT16 txfHeight;
+ INT16 txfWidth;
+ INT16 txfEscapement;
+ INT16 txfOrientation;
+ INT16 txfWeight;
+ CHAR txfItalic;
+ CHAR txfUnderline;
+ CHAR txfStrikeOut;
+ CHAR txfOutPrecision;
+ CHAR txfClipPrecision;
+ INT16 txfAccelerator;
+ INT16 txfOverhang;
+} TEXTXFORM16, *LPTEXTXFORM16;
+
+typedef struct
+{
+ INT16 dfType;
+ INT16 dfPoints;
+ INT16 dfVertRes;
+ INT16 dfHorizRes;
+ INT16 dfAscent;
+ INT16 dfInternalLeading;
+ INT16 dfExternalLeading;
+ CHAR dfItalic;
+ CHAR dfUnderline;
+ CHAR dfStrikeOut;
+ INT16 dfWeight;
+ BYTE dfCharSet;
+ INT16 dfPixWidth;
+ INT16 dfPixHeight;
+ CHAR dfPitchAndFamily;
+ INT16 dfAvgWidth;
+ INT16 dfMaxWidth;
+ CHAR dfFirstChar;
+ CHAR dfLastChar;
+ CHAR dfDefaultChar;
+ CHAR dfBreakChar;
+ INT16 dfWidthBytes;
+ LONG dfDevice;
+ LONG dfFace;
+ LONG dfBitsPointer;
+ LONG dfBitsOffset;
+ CHAR dfReserved;
+ /* Fields, introduced for Windows 3.x fonts */
+ LONG dfFlags;
+ INT16 dfAspace;
+ INT16 dfBspace;
+ INT16 dfCspace;
+ LONG dfColorPointer;
+ LONG dfReserved1[4];
+} FONTINFO16, *LPFONTINFO16;
+
+typedef struct {
+ WORD dfVersion;
+ DWORD dfSize;
+ CHAR dfCopyright[60];
+ WORD dfType;
+ WORD dfPoints;
+ WORD dfVertRes;
+ WORD dfHorizRes;
+ WORD dfAscent;
+ WORD dfInternalLeading;
+ WORD dfExternalLeading;
+ BYTE dfItalic;
+ BYTE dfUnderline;
+ BYTE dfStrikeOut;
+ WORD dfWeight;
+ BYTE dfCharSet;
+ WORD dfPixWidth;
+ WORD dfPixHeight;
+ BYTE dfPitchAndFamily;
+ WORD dfAvgWidth;
+ WORD dfMaxWidth;
+ BYTE dfFirstChar;
+ BYTE dfLastChar;
+ BYTE dfDefaultChar;
+ BYTE dfBreakChar;
+ WORD dfWidthBytes;
+ DWORD dfDevice;
+ DWORD dfFace;
+ DWORD dfReserved;
+ CHAR szDeviceName[60]; /* FIXME: length unknown */
+ CHAR szFaceName[60]; /* ditto */
+} FONTDIR16, *LPFONTDIR16;
+
+typedef struct
+{
+ INT16 tmHeight;
+ INT16 tmAscent;
+ INT16 tmDescent;
+ INT16 tmInternalLeading;
+ INT16 tmExternalLeading;
+ INT16 tmAveCharWidth;
+ INT16 tmMaxCharWidth;
+ INT16 tmWeight;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ INT16 tmOverhang;
+ INT16 tmDigitizedAspectX;
+ INT16 tmDigitizedAspectY;
+} TEXTMETRIC16, *LPTEXTMETRIC16;
+
+typedef struct _OUTLINETEXTMETRIC16
+{
+ UINT16 otmSize;
+ TEXTMETRIC16 otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE otmPanoseNumber;
+ UINT16 otmfsSelection;
+ UINT16 otmfsType;
+ INT16 otmsCharSlopeRise;
+ INT16 otmsCharSlopeRun;
+ INT16 otmItalicAngle;
+ UINT16 otmEMSquare;
+ INT16 otmAscent;
+ INT16 otmDescent;
+ UINT16 otmLineGap;
+ UINT16 otmsCapEmHeight;
+ UINT16 otmsXHeight;
+ RECT16 otmrcFontBox;
+ INT16 otmMacAscent;
+ INT16 otmMacDescent;
+ UINT16 otmMacLineGap;
+ UINT16 otmusMinimumPPEM;
+ POINT16 otmptSubscriptSize;
+ POINT16 otmptSubscriptOffset;
+ POINT16 otmptSuperscriptSize;
+ POINT16 otmptSuperscriptOffset;
+ UINT16 otmsStrikeoutSize;
+ INT16 otmsStrikeoutPosition;
+ INT16 otmsUnderscoreSize;
+ INT otmsUnderscorePosition;
+ LPSTR otmpFamilyName;
+ LPSTR otmpFaceName;
+ LPSTR otmpStyleName;
+ LPSTR otmpFullName;
+} OUTLINETEXTMETRIC16,*LPOUTLINETEXTMETRIC16;
+
+typedef struct
+{
+ INT16 tmHeight;
+ INT16 tmAscent;
+ INT16 tmDescent;
+ INT16 tmInternalLeading;
+ INT16 tmExternalLeading;
+ INT16 tmAveCharWidth;
+ INT16 tmMaxCharWidth;
+ INT16 tmWeight;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ INT16 tmOverhang;
+ INT16 tmDigitizedAspectX;
+ INT16 tmDigitizedAspectY;
+ DWORD ntmFlags;
+ UINT16 ntmSizeEM;
+ UINT16 ntmCellHeight;
+ UINT16 ntmAvgWidth;
+} NEWTEXTMETRIC16,*LPNEWTEXTMETRIC16;
+
+typedef struct
+{
+ NEWTEXTMETRIC16 ntmTm;
+ FONTSIGNATURE ntmFontSig;
+} NEWTEXTMETRICEX16,*LPNEWTEXTMETRICEX16;
+
+typedef INT16 (CALLBACK *FONTENUMPROC16)(SEGPTR,SEGPTR,UINT16,LPARAM);
+typedef VOID (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM);
+typedef INT16 (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM);
+
+
+typedef struct
+{
+ UINT16 gmBlackBoxX;
+ UINT16 gmBlackBoxY;
+ POINT16 gmptGlyphOrigin;
+ INT16 gmCellIncX;
+ INT16 gmCellIncY;
+} GLYPHMETRICS16, *LPGLYPHMETRICS16;
+
+typedef struct
+{
+ INT16 abcA;
+ UINT16 abcB;
+ INT16 abcC;
+} ABC16, *LPABC16;
+
+typedef struct
+{
+ UINT16 lopnStyle;
+ POINT16 lopnWidth;
+ COLORREF lopnColor;
+} LOGPEN16, *LPLOGPEN16;
+
+typedef struct
+{
+ HGDIOBJ16 objectHandle[1];
+} HANDLETABLE16, *LPHANDLETABLE16;
+
+typedef struct
+{
+ INT16 mm;
+ INT16 xExt;
+ INT16 yExt;
+ HMETAFILE16 hMF;
+} METAFILEPICT16, *LPMETAFILEPICT16;
+
+typedef INT16 (CALLBACK *MFENUMPROC16)(HDC16,HANDLETABLE16*,METARECORD*,
+ INT16,LPARAM);
+typedef struct
+{
+ INT16 cbSize;
+ SEGPTR lpszDocName;
+ SEGPTR lpszOutput;
+ SEGPTR lpszDatatype;
+ DWORD fwType;
+} DOCINFO16, *LPDOCINFO16;
+
+typedef BOOL16 (CALLBACK *ABORTPROC16)(HDC16, INT16);
+
+#define INT_PD_DEFAULT_DEVMODE 1
+#define INT_PD_DEFAULT_MODEL 2
+
+/* Escape: CLIP_TO_PATH modes */
+#define CLIP_SAVE 0
+#define CLIP_RESTORE 1
+#define CLIP_INCLUSIVE 2
+#define CLIP_EXCLUSIVE 3
+
+/* Escape: END_PATH info */
+struct PATH_INFO {
+ short RenderMode;
+ BYTE FillMode;
+ BYTE BkMode;
+ LOGPEN16 Pen;
+ LOGBRUSH16 Brush;
+ DWORD BkColor;
+};
+
+/* RenderMode */
+#define RENDERMODE_NO_DISPLAY 0
+#define RENDERMODE_OPEN 1
+#define RENDERMODE_CLOSED 2
+
+/* For DRAWPATTERNRECT Escape, 16bit mode */
+typedef struct _DRAWPATRECT16
+{
+ POINT16 ptPosition;
+ POINT16 ptSize;
+ WORD wStyle;
+ WORD wPattern;
+} DRAWPATRECT16, *PDRAWPATRECT16;
+
+#include <poppack.h>
+
+
+INT16 WINAPI AbortDoc16(HDC16);
+BOOL16 WINAPI AbortPath16(HDC16);
+INT16 WINAPI AddFontResource16(LPCSTR);
+void WINAPI AnimatePalette16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);
+BOOL16 WINAPI Arc16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI BeginPath16(HDC16);
+BOOL16 WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD);
+BOOL16 WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI CloseFigure16(HDC16);
+INT16 WINAPI CloseJob16(HPJOB16);
+HMETAFILE16 WINAPI CloseMetaFile16(HDC16);
+INT16 WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16);
+HMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR);
+HBITMAP16 WINAPI CreateBitmap16(INT16,INT16,UINT16,UINT16,LPCVOID);
+HBITMAP16 WINAPI CreateBitmapIndirect16(const BITMAP16*);
+HBRUSH16 WINAPI CreateBrushIndirect16(const LOGBRUSH16*);
+HBITMAP16 WINAPI CreateCompatibleBitmap16(HDC16,INT16,INT16);
+HDC16 WINAPI CreateCompatibleDC16(HDC16);
+HDC16 WINAPI CreateDC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HBITMAP16 WINAPI CreateDIBitmap16(HDC16,const BITMAPINFOHEADER*,DWORD,
+ LPCVOID,const BITMAPINFO*,UINT16);
+HBRUSH16 WINAPI CreateDIBPatternBrush16(HGLOBAL16,UINT16);
+HBITMAP16 WINAPI CreateDIBSection16 (HDC16, const BITMAPINFO *, UINT16,
+ SEGPTR *, HANDLE, DWORD offset);
+HBITMAP16 WINAPI CreateDiscardableBitmap16(HDC16,INT16,INT16);
+HRGN16 WINAPI CreateEllipticRgn16(INT16,INT16,INT16,INT16);
+HRGN16 WINAPI CreateEllipticRgnIndirect16(const RECT16 *);
+HFONT16 WINAPI CreateFont16(INT16,INT16,INT16,INT16,INT16,BYTE,BYTE,BYTE,
+ BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR);
+HFONT16 WINAPI CreateFontIndirect16(const LOGFONT16*);
+HPALETTE16 WINAPI CreateHalftonePalette16(HDC16);
+HBRUSH16 WINAPI CreateHatchBrush16(INT16,COLORREF);
+HDC16 WINAPI CreateIC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+HDC16 WINAPI CreateMetaFile16(LPCSTR);
+HPALETTE16 WINAPI CreatePalette16(const LOGPALETTE*);
+HBRUSH16 WINAPI CreatePatternBrush16(HBITMAP16);
+HPEN16 WINAPI CreatePen16(INT16,INT16,COLORREF);
+HPEN16 WINAPI CreatePenIndirect16(const LOGPEN16*);
+HRGN16 WINAPI CreatePolyPolygonRgn16(const POINT16*,const INT16*,INT16,INT16);
+HRGN16 WINAPI CreatePolygonRgn16(const POINT16*,INT16,INT16);
+HRGN16 WINAPI CreateRectRgn16(INT16,INT16,INT16,INT16);
+HRGN16 WINAPI CreateRectRgnIndirect16(const RECT16*);
+HRGN16 WINAPI CreateRoundRectRgn16(INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR);
+HBRUSH16 WINAPI CreateSolidBrush16(COLORREF);
+VOID WINAPI Death16(HDC16);
+BOOL16 WINAPI DeleteDC16(HDC16);
+INT16 WINAPI DeleteJob16(HPJOB16,INT16);
+BOOL16 WINAPI DeleteMetaFile16(HMETAFILE16);
+BOOL16 WINAPI DeleteObject16(HGDIOBJ16);
+BOOL16 WINAPI DPtoLP16(HDC16,LPPOINT16,INT16);
+DWORD WINAPI DrvGetPrinterData16(LPSTR,LPSTR,LPDWORD,LPBYTE,int cbData,LPDWORD);
+DWORD WINAPI DrvSetPrinterData16(LPSTR,LPSTR,DWORD,LPBYTE,DWORD);
+BOOL16 WINAPI Ellipse16(HDC16,INT16,INT16,INT16,INT16);
+INT16 WINAPI EndDoc16(HDC16);
+INT16 WINAPI EndPage16(HDC16);
+BOOL16 WINAPI EndPath16(HDC16);
+INT16 WINAPI EndSpoolPage16(HPJOB16);
+INT16 WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
+INT16 WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROC16,LPARAM,DWORD);
+INT16 WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
+BOOL16 WINAPI EnumMetaFile16(HDC16,HMETAFILE16,MFENUMPROC16,LPARAM);
+INT16 WINAPI EnumObjects16(HDC16,INT16,GOBJENUMPROC16,LPARAM);
+BOOL16 WINAPI EqualRgn16(HRGN16,HRGN16);
+INT16 WINAPI Escape16(HDC16,INT16,INT16,SEGPTR,LPVOID);
+INT16 WINAPI ExcludeClipRect16(HDC16,INT16,INT16,INT16,INT16);
+INT16 WINAPI ExcludeVisRect16(HDC16,INT16,INT16,INT16,INT16);
+HPEN16 WINAPI ExtCreatePen16(DWORD,DWORD,const LOGBRUSH16*,DWORD,const DWORD*);
+BOOL16 WINAPI ExtFloodFill16(HDC16,INT16,INT16,COLORREF,UINT16);
+BOOL16 WINAPI ExtTextOut16(HDC16,INT16,INT16,UINT16,const RECT16*,
+ LPCSTR,UINT16,const INT16*);
+BOOL16 WINAPI FastWindowFrame16(HDC16,const RECT16*,INT16,INT16,DWORD);
+BOOL16 WINAPI FillPath16(HDC16);
+BOOL16 WINAPI FillRgn16(HDC16,HRGN16,HBRUSH16);
+BOOL16 WINAPI FlattenPath16(HDC16);
+BOOL16 WINAPI FloodFill16(HDC16,INT16,INT16,COLORREF);
+BOOL16 WINAPI FrameRgn16(HDC16,HRGN16,HBRUSH16,INT16,INT16);
+UINT16 WINAPI GDIRealizePalette16(HDC16);
+DWORD WINAPI GdiSeeGdiDo16(WORD,WORD,WORD,WORD);
+HPALETTE16 WINAPI GDISelectPalette16(HDC16,HPALETTE16,WORD);
+INT16 WINAPI GetArcDirection16(HDC16);
+BOOL16 WINAPI GetAspectRatioFilterEx16(HDC16,LPSIZE16);
+LONG WINAPI GetBitmapBits16(HBITMAP16,LONG,LPVOID);
+DWORD WINAPI GetBitmapDimension16(HBITMAP16);
+BOOL16 WINAPI GetBitmapDimensionEx16(HBITMAP16,LPSIZE16);
+DWORD WINAPI GetBrushOrg16(HDC16);
+BOOL16 WINAPI GetBrushOrgEx16(HDC16,LPPOINT16);
+COLORREF WINAPI GetBkColor16(HDC16);
+INT16 WINAPI GetBkMode16(HDC16);
+UINT16 WINAPI GetBoundsRect16(HDC16,LPRECT16,UINT16);
+BOOL16 WINAPI GetCharABCWidths16(HDC16,UINT16,UINT16,LPABC16);
+BOOL16 WINAPI GetCharWidth16(HDC16,UINT16,UINT16,LPINT16);
+INT16 WINAPI GetClipBox16(HDC16,LPRECT16);
+HRGN16 WINAPI GetClipRgn16(HDC16);
+HFONT16 WINAPI GetCurLogFont16(HDC16);
+DWORD WINAPI GetCurrentPosition16(HDC16);
+BOOL16 WINAPI GetCurrentPositionEx16(HDC16,LPPOINT16);
+DWORD WINAPI GetDCHook16(HDC16,FARPROC16*);
+DWORD WINAPI GetDCOrg16(HDC16);
+HDC16 WINAPI GetDCState16(HDC16);
+INT16 WINAPI GetDeviceCaps16(HDC16,INT16);
+UINT16 WINAPI GetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);
+INT16 WINAPI GetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPVOID,LPBITMAPINFO,UINT16);
+INT16 WINAPI GetEnvironment16(LPCSTR,LPDEVMODEA,UINT16);
+DWORD WINAPI GetFontData16(HDC16,DWORD,DWORD,LPVOID,DWORD);
+DWORD WINAPI GetFontLanguageInfo16(HDC16);
+DWORD WINAPI GetGlyphOutline16(HDC16,UINT16,UINT16,LPGLYPHMETRICS16,DWORD,LPVOID,const MAT2*);
+INT16 WINAPI GetKerningPairs16(HDC16,INT16,LPKERNINGPAIR16);
+INT16 WINAPI GetMapMode16(HDC16);
+HMETAFILE16 WINAPI GetMetaFile16(LPCSTR);
+HGLOBAL16 WINAPI GetMetaFileBits16(HMETAFILE16);
+DWORD WINAPI GetNearestColor16(HDC16,DWORD);
+UINT16 WINAPI GetNearestPaletteIndex16(HPALETTE16,COLORREF);
+INT16 WINAPI GetObject16(HANDLE16,INT16,LPVOID);
+UINT16 WINAPI GetOutlineTextMetrics16(HDC16,UINT16,LPOUTLINETEXTMETRIC16);
+UINT16 WINAPI GetPaletteEntries16(HPALETTE16,UINT16,UINT16,LPPALETTEENTRY);
+INT16 WINAPI GetPath16(HDC16,LPPOINT16,LPBYTE,INT16);
+COLORREF WINAPI GetPixel16(HDC16,INT16,INT16);
+INT16 WINAPI GetPolyFillMode16(HDC16);
+BOOL16 WINAPI GetRasterizerCaps16(LPRASTERIZER_STATUS,UINT16);
+DWORD WINAPI GetRegionData16(HRGN16,DWORD,LPRGNDATA);
+INT16 WINAPI GetRelAbs16(HDC16);
+INT16 WINAPI GetRgnBox16(HRGN16,LPRECT16);
+INT16 WINAPI GetROP216(HDC16);
+DWORD WINAPI GetSpoolJob16(int,LONG);
+HGDIOBJ16 WINAPI GetStockObject16(INT16);
+INT16 WINAPI GetStretchBltMode16(HDC16);
+UINT16 WINAPI GetSystemPaletteEntries16(HDC16,UINT16,UINT16,LPPALETTEENTRY);
+UINT16 WINAPI GetSystemPaletteUse16(HDC16);
+UINT16 WINAPI GetTextAlign16(HDC16);
+INT16 WINAPI GetTextCharacterExtra16(HDC16);
+UINT16 WINAPI GetTextCharset16(HDC16);
+COLORREF WINAPI GetTextColor16(HDC16);
+DWORD WINAPI GetTextExtent16(HDC16,LPCSTR,INT16);
+BOOL16 WINAPI GetTextExtentPoint16(HDC16,LPCSTR,INT16,LPSIZE16);
+INT16 WINAPI GetTextFace16(HDC16,INT16,LPSTR);
+BOOL16 WINAPI GetTextMetrics16(HDC16,LPTEXTMETRIC16);
+DWORD WINAPI GetViewportExt16(HDC16);
+BOOL16 WINAPI GetViewportExtEx16(HDC16,LPSIZE16);
+BOOL16 WINAPI GetViewportOrgEx16(HDC16,LPPOINT16);
+DWORD WINAPI GetViewportOrg16(HDC16);
+DWORD WINAPI GetWindowExt16(HDC16);
+DWORD WINAPI GetWindowOrg16(HDC16);
+BOOL16 WINAPI GetWindowExtEx16(HDC16,LPSIZE16);
+BOOL16 WINAPI GetWindowOrgEx16(HDC16,LPPOINT16);
+HRGN16 WINAPI InquireVisRgn16(HDC16);
+INT16 WINAPI IntersectClipRect16(HDC16,INT16,INT16,INT16,INT16);
+INT16 WINAPI IntersectVisRect16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI InvertRgn16(HDC16,HRGN16);
+BOOL16 WINAPI IsDCCurrentPalette16(HDC16);
+BOOL16 WINAPI IsGDIObject16(HGDIOBJ16);
+BOOL16 WINAPI IsValidMetaFile16(HMETAFILE16);
+VOID WINAPI LineDDA16(INT16,INT16,INT16,INT16,LINEDDAPROC16,LPARAM);
+BOOL16 WINAPI LineTo16(HDC16,INT16,INT16);
+BOOL16 WINAPI LPtoDP16(HDC16,LPPOINT16,INT16);
+DWORD WINAPI MoveTo16(HDC16,INT16,INT16);
+BOOL16 WINAPI MoveToEx16(HDC16,INT16,INT16,LPPOINT16);
+INT16 WINAPI MulDiv16(INT16,INT16,INT16);
+INT16 WINAPI OffsetClipRgn16(HDC16,INT16,INT16);
+INT16 WINAPI OffsetRgn16(HRGN16,INT16,INT16);
+DWORD WINAPI OffsetViewportOrg16(HDC16,INT16,INT16);
+BOOL16 WINAPI OffsetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+INT16 WINAPI OffsetVisRgn16(HDC16,INT16,INT16);
+DWORD WINAPI OffsetWindowOrg16(HDC16,INT16,INT16);
+BOOL16 WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+HANDLE16 WINAPI OpenJob16(LPCSTR,LPCSTR,HDC16);
+BOOL16 WINAPI PaintRgn16(HDC16,HRGN16);
+BOOL16 WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD);
+HRGN16 WINAPI PathToRegion16(HDC16);
+BOOL16 WINAPI Pie16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI PlayMetaFile16(HDC16,HMETAFILE16);
+VOID WINAPI PlayMetaFileRecord16(HDC16,LPHANDLETABLE16,LPMETARECORD,UINT16);
+BOOL16 WINAPI PolyBezier16(HDC16,const POINT16*,INT16);
+BOOL16 WINAPI PolyBezierTo16(HDC16,const POINT16*,INT16);
+BOOL16 WINAPI PolyPolygon16(HDC16,const POINT16*,const INT16*,UINT16);
+BOOL16 WINAPI Polygon16(HDC16,const POINT16*,INT16);
+BOOL16 WINAPI Polyline16(HDC16,const POINT16*,INT16);
+BOOL16 WINAPI PtInRegion16(HRGN16,INT16,INT16);
+BOOL16 WINAPI PtVisible16(HDC16,INT16,INT16);
+BOOL16 WINAPI QueryAbort16(HDC16,INT16);
+UINT16 WINAPI RealizeDefaultPalette16(HDC16);
+BOOL16 WINAPI Rectangle16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI RectInRegion16(HRGN16,const RECT16 *);
+BOOL16 WINAPI RectVisible16(HDC16,const RECT16*);
+BOOL16 WINAPI RemoveFontResource16(LPCSTR);
+HDC16 WINAPI ResetDC16(HDC16,const DEVMODEA *);
+BOOL16 WINAPI ResizePalette16(HPALETTE16,UINT16);
+BOOL16 WINAPI RestoreDC16(HDC16,INT16);
+INT16 WINAPI RestoreVisRgn16(HDC16);
+VOID WINAPI Resurrection16(HDC16,WORD,WORD,WORD,WORD,WORD,WORD);
+BOOL16 WINAPI RoundRect16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16);
+INT16 WINAPI SaveDC16(HDC16);
+HRGN16 WINAPI SaveVisRgn16(HDC16);
+DWORD WINAPI ScaleViewportExt16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI ScaleViewportExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);
+DWORD WINAPI ScaleWindowExt16(HDC16,INT16,INT16,INT16,INT16);
+BOOL16 WINAPI ScaleWindowExtEx16(HDC16,INT16,INT16,INT16,INT16,LPSIZE16);
+BOOL16 WINAPI SelectClipPath16(HDC16,INT16);
+INT16 WINAPI SelectClipRgn16(HDC16,HRGN16);
+HGDIOBJ16 WINAPI SelectObject16(HDC16,HGDIOBJ16);
+INT16 WINAPI SelectVisRgn16(HDC16,HRGN16);
+INT16 WINAPI SetAbortProc16(HDC16,ABORTPROC16);
+INT16 WINAPI SetArcDirection16(HDC16,INT16);
+LONG WINAPI SetBitmapBits16(HBITMAP16,LONG,LPCVOID);
+DWORD WINAPI SetBitmapDimension16(HBITMAP16,INT16,INT16);
+BOOL16 WINAPI SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16);
+COLORREF WINAPI SetBkColor16(HDC16,COLORREF);
+INT16 WINAPI SetBkMode16(HDC16,INT16);
+UINT16 WINAPI SetBoundsRect16(HDC16,const RECT16*,UINT16);
+DWORD WINAPI SetBrushOrg16(HDC16,INT16,INT16);
+BOOL16 WINAPI SetDCHook16(HDC16,FARPROC16,DWORD);
+DWORD WINAPI SetDCOrg16(HDC16,INT16,INT16);
+VOID WINAPI SetDCState16(HDC16,HDC16);
+UINT16 WINAPI SetDIBColorTable16(HDC16,UINT16,UINT16,RGBQUAD*);
+INT16 WINAPI SetDIBits16(HDC16,HBITMAP16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);
+INT16 WINAPI SetDIBitsToDevice16(HDC16,INT16,INT16,INT16,INT16,INT16,
+ INT16,UINT16,UINT16,LPCVOID,const BITMAPINFO*,UINT16);
+INT16 WINAPI SetEnvironment16(LPCSTR,LPDEVMODEA,UINT16);
+WORD WINAPI SetHookFlags16(HDC16,WORD);
+INT16 WINAPI SetMapMode16(HDC16,INT16);
+DWORD WINAPI SetMapperFlags16(HDC16,DWORD);
+HMETAFILE16 WINAPI SetMetaFileBits16(HGLOBAL16);
+UINT16 WINAPI SetPaletteEntries16(HPALETTE16,UINT16,UINT16,const PALETTEENTRY*);
+COLORREF WINAPI SetPixel16(HDC16,INT16,INT16,COLORREF);
+INT16 WINAPI SetPolyFillMode16(HDC16,INT16);
+VOID WINAPI SetRectRgn16(HRGN16,INT16,INT16,INT16,INT16);
+INT16 WINAPI SetRelAbs16(HDC16,INT16);
+INT16 WINAPI SetROP216(HDC16,INT16);
+INT16 WINAPI SetStretchBltMode16(HDC16,INT16);
+UINT16 WINAPI SetSystemPaletteUse16(HDC16,UINT16);
+UINT16 WINAPI SetTextAlign16(HDC16,UINT16);
+INT16 WINAPI SetTextCharacterExtra16(HDC16,INT16);
+COLORREF WINAPI SetTextColor16(HDC16,COLORREF);
+INT16 WINAPI SetTextJustification16(HDC16,INT16,INT16);
+DWORD WINAPI SetViewportExt16(HDC16,INT16,INT16);
+BOOL16 WINAPI SetViewportExtEx16(HDC16,INT16,INT16,LPSIZE16);
+DWORD WINAPI SetViewportOrg16(HDC16,INT16,INT16);
+BOOL16 WINAPI SetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+DWORD WINAPI SetWindowExt16(HDC16,INT16,INT16);
+BOOL16 WINAPI SetWindowExtEx16(HDC16,INT16,INT16,LPSIZE16);
+DWORD WINAPI SetWindowOrg16(HDC16,INT16,INT16);
+BOOL16 WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
+INT16 WINAPI StartDoc16(HDC16,const DOCINFO16*);
+INT16 WINAPI StartPage16(HDC16);
+INT16 WINAPI StartSpoolPage16(HPJOB16);
+BOOL16 WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,
+ INT16,INT16,INT16,DWORD);
+INT16 WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,
+ INT16,INT16,const VOID*,const BITMAPINFO*,UINT16,DWORD);
+BOOL16 WINAPI StrokeAndFillPath16(HDC16);
+BOOL16 WINAPI StrokePath16(HDC16);
+BOOL16 WINAPI TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);
+BOOL16 WINAPI UnrealizeObject16(HGDIOBJ16);
+INT16 WINAPI UpdateColors16(HDC16);
+BOOL16 WINAPI WidenPath16(HDC16);
+INT16 WINAPI WriteDialog16(HPJOB16,LPSTR,INT16);
+INT16 WINAPI WriteSpool16(HPJOB16,LPSTR,INT16);
+
+#endif /* __WINE_WINE_WINGDI16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h
new file mode 100644
index 00000000..55136094
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winnet16.h
@@ -0,0 +1,297 @@
+/*
+ * Definitions for windows network service
+ *
+ * Copyright 1997 Andreas Mohr
+ * Copyright 1999 Ulrich Weigand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINNET16_H
+#define __WINE_WINNET16_H
+
+#include <windef.h>
+#include <wine/windef16.h>
+
+#include <pshpack1.h>
+
+/*
+ * Remote printing
+ */
+
+typedef struct
+{
+ WORD pqName;
+ WORD pqComment;
+ WORD pqStatus;
+ WORD pqJobcount;
+ WORD pqPrinters;
+
+} QUEUESTRUCT16, *LPQUEUESTRUCT16;
+
+#define WNPRQ_ACTIVE 0x0
+#define WNPRQ_PAUSE 0x1
+#define WNPRQ_ERROR 0x2
+#define WNPRQ_PENDING 0x3
+#define WNPRQ_PROBLEM 0x4
+
+typedef struct
+{
+ WORD pjId;
+ WORD pjUsername;
+ WORD pjParms;
+ WORD pjPosition;
+ WORD pjStatus;
+ DWORD pjSubmitted;
+ DWORD pjSize;
+ WORD pjCopies;
+ WORD pjComment;
+
+} JOBSTRUCT16, *LPJOBSTRUCT16;
+
+#include <poppack.h>
+
+#define WNPRJ_QSTATUS 0x0007
+#define WNPRJ_DEVSTATUS 0x0FF8
+
+#define WNPRJ_QS_QUEUED 0x0000
+#define WNPRJ_QS_PAUSED 0x0001
+#define WNPRJ_QS_SPOOLING 0x0002
+#define WNPRJ_QS_PRINTING 0x0003
+
+#define WNPRJ_DS_COMPLETE 0x0008
+#define WNPRJ_DS_INTERV 0x0010
+#define WNPRJ_DS_ERROR 0x0020
+#define WNPRJ_DS_DESTOFFLINE 0x0040
+#define WNPRJ_DS_DESTPAUSED 0x0080
+#define WNPRJ_DS_NOTIFY 0x0100
+#define WNPRJ_DS_DESTNOPAPER 0x0200
+#define WNPRJ_DS_DESTFORMCHG 0x0400
+#define WNPRJ_DS_DESTCRTCHG 0x0800
+#define WNPRJ_DS_DESTPENCHG 0x1000
+
+#define SP_QUEUECHANGED 0x0500
+
+#define WNJ_NULL_JOBID 0
+
+WORD WINAPI WNetOpenJob16(LPSTR,LPSTR,WORD,LPINT16);
+WORD WINAPI WNetCloseJob16(WORD,LPINT16,LPSTR);
+WORD WINAPI WNetWriteJob16(HANDLE16,LPSTR,LPINT16);
+WORD WINAPI WNetAbortJob16(LPSTR,WORD);
+WORD WINAPI WNetHoldJob16(LPSTR,WORD);
+WORD WINAPI WNetReleaseJob16(LPSTR,WORD);
+WORD WINAPI WNetCancelJob16(LPSTR,WORD);
+WORD WINAPI WNetSetJobCopies16(LPSTR,WORD,WORD);
+
+WORD WINAPI WNetWatchQueue16(HWND16,LPSTR,LPSTR,WORD);
+WORD WINAPI WNetUnwatchQueue16(LPSTR);
+WORD WINAPI WNetLockQueueData16(LPSTR,LPSTR,LPQUEUESTRUCT16 *);
+WORD WINAPI WNetUnlockQueueData16(LPSTR);
+
+
+/*
+ * Connections
+ */
+
+WORD WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR);
+WORD WINAPI WNetCancelConnection16(LPSTR,BOOL16);
+WORD WINAPI WNetGetConnection16(LPSTR,LPSTR,UINT16 *);
+WORD WINAPI WNetRestoreConnection16(HWND16,LPSTR);
+
+/*
+ * Capabilities
+ */
+
+WORD WINAPI WNetGetCaps16(WORD);
+
+#define WNNC16_SPEC_VERSION 0x01
+#define WNNC16_NET_TYPE 0x02
+#define WNNC16_DRIVER_VERSION 0x03
+#define WNNC16_USER 0x04
+#define WNNC16_CONNECTION 0x06
+#define WNNC16_PRINTING 0x07
+#define WNNC16_DIALOG 0x08
+#define WNNC16_ADMIN 0x09
+#define WNNC16_ERROR 0x0a
+#define WNNC16_PRINTMGREXT 0x0b
+
+#define WNNC16_NET_NONE 0x0
+#define WNNC16_NET_MSNet 0x1
+#define WNNC16_NET_LanMan 0x2
+#define WNNC16_NET_NetWare 0x3
+#define WNNC16_NET_Vines 0x4
+#define WNNC16_NET_10NET 0x5
+#define WNNC16_NET_Locus 0x6
+#define WNNC16_NET_SUN_PC_NFS 0x7
+#define WNNC16_NET_LANstep 0x8
+#define WNNC16_NET_9TILES 0x9
+#define WNNC16_NET_LANtastic 0xa
+#define WNNC16_NET_AS400 0xb
+#define WNNC16_NET_FTP_NFS 0xc
+#define WNNC16_NET_PATHWORKS 0xd
+#define WNNC16_NET_LifeNet 0xe
+#define WNNC16_NET_POWERLan 0xf
+#define WNNC16_NET_MultiNet 0x8000
+
+#define WNNC16_SUBNET_NONE 0x00
+#define WNNC16_SUBNET_MSNet 0x01
+#define WNNC16_SUBNET_LanMan 0x02
+#define WNNC16_SUBNET_WinWorkgroups 0x04
+#define WNNC16_SUBNET_NetWare 0x08
+#define WNNC16_SUBNET_Vines 0x10
+#define WNNC16_SUBNET_Other 0x80
+
+#define WNNC16_CON_AddConnection 0x0001
+#define WNNC16_CON_CancelConnection 0x0002
+#define WNNC16_CON_GetConnections 0x0004
+#define WNNC16_CON_AutoConnect 0x0008
+#define WNNC16_CON_BrowseDialog 0x0010
+#define WNNC16_CON_RestoreConnection 0x0020
+
+#define WNNC16_PRT_OpenJob 0x0002
+#define WNNC16_PRT_CloseJob 0x0004
+#define WNNC16_PRT_HoldJob 0x0010
+#define WNNC16_PRT_ReleaseJob 0x0020
+#define WNNC16_PRT_CancelJob 0x0040
+#define WNNC16_PRT_SetJobCopies 0x0080
+#define WNNC16_PRT_WatchQueue 0x0100
+#define WNNC16_PRT_UnwatchQueue 0x0200
+#define WNNC16_PRT_LockQueueData 0x0400
+#define WNNC16_PRT_UnlockQueueData 0x0800
+#define WNNC16_PRT_ChangeMsg 0x1000
+#define WNNC16_PRT_AbortJob 0x2000
+#define WNNC16_PRT_NoArbitraryLock 0x4000
+#define WNNC16_PRT_WriteJob 0x8000
+
+#define WNNC16_DLG_DeviceMode 0x0001
+#define WNNC16_DLG_BrowseDialog 0x0002
+#define WNNC16_DLG_ConnectDialog 0x0004
+#define WNNC16_DLG_DisconnectDialog 0x0008
+#define WNNC16_DLG_ViewQueueDialog 0x0010
+#define WNNC16_DLG_PropertyDialog 0x0020
+#define WNNC16_DLG_ConnectionDialog 0x0040
+#define WNNC16_DLG_PrinterConnectDialog 0x0080
+#define WNNC16_DLG_SharesDialog 0x0100
+#define WNNC16_DLG_ShareAsDialog 0x0200
+
+#define WNNC16_ADM_GetDirectoryType 0x0001
+#define WNNC16_ADM_DirectoryNotify 0x0002
+#define WNNC16_ADM_LongNames 0x0004
+#define WNNC16_ADM_SetDefaultDrive 0x0008
+
+#define WNNC16_ERR_GetError 0x0001
+#define WNNC16_ERR_GetErrorText 0x0002
+
+
+/*
+ * Get User
+ */
+
+WORD WINAPI WNetGetUser16(LPSTR,LPINT16);
+
+
+/*
+ * Browsing
+ */
+
+#define WNBD_CONN_UNKNOWN 0x0
+#define WNBD_CONN_DISKTREE 0x1
+#define WNBD_CONN_PRINTQ 0x3
+#define WNBD_MAX_LENGTH 0x80
+
+#define WNTYPE_DRIVE 1
+#define WNTYPE_FILE 2
+#define WNTYPE_PRINTER 3
+#define WNTYPE_COMM 4
+
+#define WNPS_FILE 0
+#define WNPS_DIR 1
+#define WNPS_MULT 2
+
+WORD WINAPI WNetDeviceMode16(HWND16);
+WORD WINAPI WNetBrowseDialog16(HWND16,WORD,LPSTR);
+WORD WINAPI WNetConnectDialog16(HWND16,WORD);
+WORD WINAPI WNetDisconnectDialog16(HWND16,WORD);
+WORD WINAPI WNetConnectionDialog16(HWND16,WORD);
+WORD WINAPI WNetViewQueueDialog16(HWND16,LPSTR);
+WORD WINAPI WNetPropertyDialog16(HWND16,WORD,WORD,LPSTR,WORD);
+WORD WINAPI WNetGetPropertyText16(WORD,WORD,LPSTR,LPSTR,WORD,WORD);
+
+
+/*
+ * Admin
+ */
+
+#define WNDT_NORMAL 0
+#define WNDT_NETWORK 1
+
+#define WNDN_MKDIR 1
+#define WNDN_RMDIR 2
+#define WNDN_MVDIR 3
+
+WORD WINAPI WNetGetDirectoryType16(LPSTR,LPINT16);
+WORD WINAPI WNetDirectoryNotify16(HWND16,LPSTR,WORD);
+
+
+/*
+ * Status codes
+ */
+
+WORD WINAPI WNetGetError16(LPINT16);
+WORD WINAPI WNetGetErrorText16(WORD,LPSTR,LPINT16);
+WORD WINAPI WNetErrorText16(WORD,LPSTR,WORD);
+
+#define WN16_SUCCESS 0x0000
+#define WN16_NOT_SUPPORTED 0x0001
+#define WN16_NET_ERROR 0x0002
+#define WN16_MORE_DATA 0x0003
+#define WN16_BAD_POINTER 0x0004
+#define WN16_BAD_VALUE 0x0005
+#define WN16_BAD_PASSWORD 0x0006
+#define WN16_ACCESS_DENIED 0x0007
+#define WN16_FUNCTION_BUSY 0x0008
+#define WN16_WINDOWS_ERROR 0x0009
+#define WN16_BAD_USER 0x000A
+#define WN16_OUT_OF_MEMORY 0x000B
+#define WN16_CANCEL 0x000C
+#define WN16_CONTINUE 0x000D
+#define WN16_NOT_CONNECTED 0x0030
+#define WN16_OPEN_FILES 0x0031
+#define WN16_BAD_NETNAME 0x0032
+#define WN16_BAD_LOCALNAME 0x0033
+#define WN16_ALREADY_CONNECTED 0x0034
+#define WN16_DEVICE_ERROR 0x0035
+#define WN16_CONNECTION_CLOSED 0x0036
+#define WN16_BAD_JOBID 0x0040
+#define WN16_JOB_NOT_FOUND 0x0041
+#define WN16_JOB_NOT_HELD 0x0042
+#define WN16_BAD_QUEUE 0x0043
+#define WN16_BAD_FILE_HANDLE 0x0044
+#define WN16_CANT_SET_COPIES 0x0045
+#define WN16_ALREADY_LOCKED 0x0046
+#define WN16_NO_ERROR 0x0050
+
+
+
+#endif /* __WINE_WINNET16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h
new file mode 100644
index 00000000..85a94513
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/winuser16.h
@@ -0,0 +1,966 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINE_WINUSER16_H
+#define __WINE_WINE_WINUSER16_H
+
+#include <wine/wingdi16.h> /* wingdi.h needed for COLORREF */
+#include <winuser.h> /* winuser.h needed for MSGBOXCALLBACK */
+
+#include <pshpack1.h>
+
+typedef struct tagCOMSTAT16
+{
+ BYTE status;
+ UINT16 cbInQue;
+ UINT16 cbOutQue;
+} COMSTAT16,*LPCOMSTAT16;
+
+typedef struct tagDCB16
+{
+ BYTE Id;
+ UINT16 BaudRate;
+ BYTE ByteSize;
+ BYTE Parity;
+ BYTE StopBits;
+ UINT16 RlsTimeout;
+ UINT16 CtsTimeout;
+ UINT16 DsrTimeout;
+
+ unsigned fBinary :1;
+ unsigned fRtsDisable :1;
+ unsigned fParity :1;
+ unsigned fOutxCtsFlow :1;
+ unsigned fOutxDsrFlow :1;
+ unsigned fDummy :2;
+ unsigned fDtrDisable :1;
+
+ unsigned fOutX :1;
+ unsigned fInX :1;
+ unsigned fPeChar :1;
+ unsigned fNull :1;
+ unsigned fChEvt :1;
+ unsigned fDtrflow :1;
+ unsigned fRtsflow :1;
+ unsigned fDummy2 :1;
+
+ CHAR XonChar;
+ CHAR XoffChar;
+ UINT16 XonLim;
+ UINT16 XoffLim;
+ CHAR PeChar;
+ CHAR EofChar;
+ CHAR EvtChar;
+ UINT16 TxDelay;
+} DCB16, *LPDCB16;
+
+
+typedef struct
+{
+ LPARAM lParam;
+ WPARAM16 wParam;
+ UINT16 message;
+ HWND16 hwnd;
+} CWPSTRUCT16, *LPCWPSTRUCT16;
+
+typedef struct
+{
+ LRESULT lResult;
+ LPARAM lParam;
+ WPARAM16 wParam;
+ DWORD message;
+ HWND16 hwnd;
+} CWPRETSTRUCT16, *LPCWPRETSTRUCT16;
+
+ /* SetWindowPlacement() struct */
+typedef struct
+{
+ UINT16 length;
+ UINT16 flags;
+ UINT16 showCmd;
+ POINT16 ptMinPosition;
+ POINT16 ptMaxPosition;
+ RECT16 rcNormalPosition;
+} WINDOWPLACEMENT16, *LPWINDOWPLACEMENT16;
+
+/****** Window classes ******/
+
+typedef struct
+{
+ UINT16 style;
+ WNDPROC16 lpfnWndProc;
+ INT16 cbClsExtra;
+ INT16 cbWndExtra;
+ HANDLE16 hInstance;
+ HICON16 hIcon;
+ HCURSOR16 hCursor;
+ HBRUSH16 hbrBackground;
+ SEGPTR lpszMenuName;
+ SEGPTR lpszClassName;
+} WNDCLASS16, *LPWNDCLASS16;
+
+typedef struct
+{
+ UINT cbSize;
+ UINT style;
+ WNDPROC16 lpfnWndProc;
+ INT16 cbClsExtra;
+ INT16 cbWndExtra;
+ HANDLE16 hInstance;
+ HICON16 hIcon;
+ HCURSOR16 hCursor;
+ HBRUSH16 hbrBackground;
+ SEGPTR lpszMenuName;
+ SEGPTR lpszClassName;
+ HICON16 hIconSm;
+} WNDCLASSEX16, *LPWNDCLASSEX16;
+
+typedef struct
+{
+ HWND16 hwnd;
+ UINT16 message;
+ WPARAM16 wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT16 pt;
+} MSG16, *LPMSG16;
+
+typedef struct
+{
+ MSG16 msg;
+ WORD wParamHigh;
+} MSG32_16, *LPMSG16_32;
+
+/* Cursors / Icons */
+
+typedef struct tagCURSORICONINFO
+{
+ POINT16 ptHotSpot;
+ WORD nWidth;
+ WORD nHeight;
+ WORD nWidthBytes;
+ BYTE bPlanes;
+ BYTE bBitsPerPixel;
+} CURSORICONINFO;
+
+typedef struct {
+ BOOL16 fIcon;
+ WORD xHotspot;
+ WORD yHotspot;
+ HBITMAP16 hbmMask;
+ HBITMAP16 hbmColor;
+} ICONINFO16,*LPICONINFO16;
+
+typedef struct
+{
+ BYTE fVirt;
+ WORD key;
+ WORD cmd;
+} ACCEL16, *LPACCEL16;
+
+/* FIXME: not sure this one is correct */
+typedef struct {
+ UINT16 cbSize;
+ UINT16 fMask;
+ UINT16 fType;
+ UINT16 fState;
+ UINT16 wID;
+ HMENU16 hSubMenu;
+ HBITMAP16 hbmpChecked;
+ HBITMAP16 hbmpUnchecked;
+ DWORD dwItemData;
+ SEGPTR dwTypeData;
+ UINT16 cch;
+} MENUITEMINFO16, *LPMENUITEMINFO16;
+
+/* DrawState defines ... */
+typedef BOOL16 (CALLBACK *DRAWSTATEPROC16)(HDC16,LPARAM,WPARAM16,INT16,INT16);
+
+/* Listbox messages */
+#define LB_ADDSTRING16 (WM_USER+1)
+#define LB_INSERTSTRING16 (WM_USER+2)
+#define LB_DELETESTRING16 (WM_USER+3)
+#define LB_SELITEMRANGEEX16 (WM_USER+4)
+#define LB_RESETCONTENT16 (WM_USER+5)
+#define LB_SETSEL16 (WM_USER+6)
+#define LB_SETCURSEL16 (WM_USER+7)
+#define LB_GETSEL16 (WM_USER+8)
+#define LB_GETCURSEL16 (WM_USER+9)
+#define LB_GETTEXT16 (WM_USER+10)
+#define LB_GETTEXTLEN16 (WM_USER+11)
+#define LB_GETCOUNT16 (WM_USER+12)
+#define LB_SELECTSTRING16 (WM_USER+13)
+#define LB_DIR16 (WM_USER+14)
+#define LB_GETTOPINDEX16 (WM_USER+15)
+#define LB_FINDSTRING16 (WM_USER+16)
+#define LB_GETSELCOUNT16 (WM_USER+17)
+#define LB_GETSELITEMS16 (WM_USER+18)
+#define LB_SETTABSTOPS16 (WM_USER+19)
+#define LB_GETHORIZONTALEXTENT16 (WM_USER+20)
+#define LB_SETHORIZONTALEXTENT16 (WM_USER+21)
+#define LB_SETCOLUMNWIDTH16 (WM_USER+22)
+#define LB_ADDFILE16 (WM_USER+23)
+#define LB_SETTOPINDEX16 (WM_USER+24)
+#define LB_GETITEMRECT16 (WM_USER+25)
+#define LB_GETITEMDATA16 (WM_USER+26)
+#define LB_SETITEMDATA16 (WM_USER+27)
+#define LB_SELITEMRANGE16 (WM_USER+28)
+#define LB_SETANCHORINDEX16 (WM_USER+29)
+#define LB_GETANCHORINDEX16 (WM_USER+30)
+#define LB_SETCARETINDEX16 (WM_USER+31)
+#define LB_GETCARETINDEX16 (WM_USER+32)
+#define LB_SETITEMHEIGHT16 (WM_USER+33)
+#define LB_GETITEMHEIGHT16 (WM_USER+34)
+#define LB_FINDSTRINGEXACT16 (WM_USER+35)
+#define LB_CARETON16 (WM_USER+36)
+#define LB_CARETOFF16 (WM_USER+37)
+
+/* Combo box messages */
+#define CB_GETEDITSEL16 (WM_USER+0)
+#define CB_LIMITTEXT16 (WM_USER+1)
+#define CB_SETEDITSEL16 (WM_USER+2)
+#define CB_ADDSTRING16 (WM_USER+3)
+#define CB_DELETESTRING16 (WM_USER+4)
+#define CB_DIR16 (WM_USER+5)
+#define CB_GETCOUNT16 (WM_USER+6)
+#define CB_GETCURSEL16 (WM_USER+7)
+#define CB_GETLBTEXT16 (WM_USER+8)
+#define CB_GETLBTEXTLEN16 (WM_USER+9)
+#define CB_INSERTSTRING16 (WM_USER+10)
+#define CB_RESETCONTENT16 (WM_USER+11)
+#define CB_FINDSTRING16 (WM_USER+12)
+#define CB_SELECTSTRING16 (WM_USER+13)
+#define CB_SETCURSEL16 (WM_USER+14)
+#define CB_SHOWDROPDOWN16 (WM_USER+15)
+#define CB_GETITEMDATA16 (WM_USER+16)
+#define CB_SETITEMDATA16 (WM_USER+17)
+#define CB_GETDROPPEDCONTROLRECT16 (WM_USER+18)
+#define CB_SETITEMHEIGHT16 (WM_USER+19)
+#define CB_GETITEMHEIGHT16 (WM_USER+20)
+#define CB_SETEXTENDEDUI16 (WM_USER+21)
+#define CB_GETEXTENDEDUI16 (WM_USER+22)
+#define CB_GETDROPPEDSTATE16 (WM_USER+23)
+#define CB_FINDSTRINGEXACT16 (WM_USER+24)
+
+typedef struct /* not sure if the 16bit version is correct */
+{
+ UINT cbSize;
+ HWND16 hwndOwner;
+ HINSTANCE16 hInstance;
+ SEGPTR lpszText;
+ SEGPTR lpszCaption;
+ DWORD dwStyle;
+ SEGPTR lpszIcon;
+ DWORD dwContextHelpId;
+ MSGBOXCALLBACK lpfnMsgBoxCallback;
+ DWORD dwLanguageId;
+} MSGBOXPARAMS16,*LPMSGBOXPARAMS16;
+
+ /* Windows */
+
+typedef struct
+{
+ SEGPTR lpCreateParams;
+ HINSTANCE16 hInstance;
+ HMENU16 hMenu;
+ HWND16 hwndParent;
+ INT16 cy;
+ INT16 cx;
+ INT16 y;
+ INT16 x;
+ LONG style;
+ SEGPTR lpszName;
+ SEGPTR lpszClass;
+ DWORD dwExStyle;
+} CREATESTRUCT16, *LPCREATESTRUCT16;
+
+typedef struct
+{
+ HDC16 hdc;
+ BOOL16 fErase;
+ RECT16 rcPaint;
+ BOOL16 fRestore;
+ BOOL16 fIncUpdate;
+ BYTE rgbReserved[16];
+} PAINTSTRUCT16, *LPPAINTSTRUCT16;
+
+typedef struct
+{
+ HMENU16 hWindowMenu;
+ UINT16 idFirstChild;
+} CLIENTCREATESTRUCT16, *LPCLIENTCREATESTRUCT16;
+
+typedef struct
+{
+ SEGPTR szClass;
+ SEGPTR szTitle;
+ HINSTANCE16 hOwner;
+ INT16 x;
+ INT16 y;
+ INT16 cx;
+ INT16 cy;
+ DWORD style;
+ LPARAM lParam;
+} MDICREATESTRUCT16, *LPMDICREATESTRUCT16;
+
+ /* WM_GETMINMAXINFO struct */
+typedef struct
+{
+ POINT16 ptReserved;
+ POINT16 ptMaxSize;
+ POINT16 ptMaxPosition;
+ POINT16 ptMinTrackSize;
+ POINT16 ptMaxTrackSize;
+} MINMAXINFO16;
+
+ /* WM_WINDOWPOSCHANGING/CHANGED struct */
+typedef struct tagWINDOWPOS16
+{
+ HWND16 hwnd;
+ HWND16 hwndInsertAfter;
+ INT16 x;
+ INT16 y;
+ INT16 cx;
+ INT16 cy;
+ UINT16 flags;
+} WINDOWPOS16, *LPWINDOWPOS16;
+
+ /* WM_NCCALCSIZE parameter structure */
+typedef struct
+{
+ RECT16 rgrc[3];
+ SEGPTR lppos;
+} NCCALCSIZE_PARAMS16, *LPNCCALCSIZE_PARAMS16;
+
+typedef struct {
+ UINT16 cbSize;
+ INT16 iBorderWidth;
+ INT16 iScrollWidth;
+ INT16 iScrollHeight;
+ INT16 iCaptionWidth;
+ INT16 iCaptionHeight;
+ LOGFONT16 lfCaptionFont;
+ INT16 iSmCaptionWidth;
+ INT16 iSmCaptionHeight;
+ LOGFONT16 lfSmCaptionFont;
+ INT16 iMenuWidth;
+ INT16 iMenuHeight;
+ LOGFONT16 lfMenuFont;
+ LOGFONT16 lfStatusFont;
+ LOGFONT16 lfMessageFont;
+} NONCLIENTMETRICS16,*LPNONCLIENTMETRICS16;
+
+ /* Journalling hook structure */
+
+typedef struct
+{
+ UINT16 message;
+ UINT16 paramL;
+ UINT16 paramH;
+ DWORD time;
+} EVENTMSG16, *LPEVENTMSG16;
+
+ /* Mouse hook structure */
+
+typedef struct
+{
+ POINT16 pt;
+ HWND16 hwnd;
+ UINT16 wHitTestCode;
+ DWORD dwExtraInfo;
+} MOUSEHOOKSTRUCT16, *LPMOUSEHOOKSTRUCT16;
+
+ /* Hardware hook structure */
+
+typedef struct
+{
+ HWND16 hWnd;
+ UINT16 wMessage;
+ WPARAM16 wParam;
+ LPARAM lParam;
+} HARDWAREHOOKSTRUCT16, *LPHARDWAREHOOKSTRUCT16;
+
+/* Scrollbar messages */
+#define SBM_SETPOS16 (WM_USER+0)
+#define SBM_GETPOS16 (WM_USER+1)
+#define SBM_SETRANGE16 (WM_USER+2)
+#define SBM_GETRANGE16 (WM_USER+3)
+#define SBM_ENABLE_ARROWS16 (WM_USER+4)
+
+ /* CBT hook structures */
+
+typedef struct
+{
+ CREATESTRUCT16 *lpcs;
+ HWND16 hwndInsertAfter;
+} CBT_CREATEWND16, *LPCBT_CREATEWND16;
+
+typedef struct
+{
+ BOOL16 fMouse;
+ HWND16 hWndActive;
+} CBTACTIVATESTRUCT16, *LPCBTACTIVATESTRUCT16;
+
+ /* Debug hook structure */
+
+typedef struct
+{
+ HMODULE16 hModuleHook;
+ LPARAM reserved;
+ LPARAM lParam;
+ WPARAM16 wParam;
+ INT16 code;
+} DEBUGHOOKINFO16, *LPDEBUGHOOKINFO16;
+
+#define GETMAXLPT 8
+#define GETMAXCOM 9
+#define GETBASEIRQ 10
+
+/* GetFreeSystemResources() parameters */
+
+#define GFSR_SYSTEMRESOURCES 0x0000
+#define GFSR_GDIRESOURCES 0x0001
+#define GFSR_USERRESOURCES 0x0002
+
+/* CreateWindow() coordinates */
+#define CW_USEDEFAULT16 ((INT16)0x8000)
+
+/* Win16 button control messages */
+#define BM_GETCHECK16 (WM_USER+0)
+#define BM_SETCHECK16 (WM_USER+1)
+#define BM_GETSTATE16 (WM_USER+2)
+#define BM_SETSTATE16 (WM_USER+3)
+#define BM_SETSTYLE16 (WM_USER+4)
+
+/* Static Control Messages */
+#define STM_SETICON16 (WM_USER+0)
+#define STM_GETICON16 (WM_USER+1)
+
+/* Edit control messages */
+#define EM_GETSEL16 (WM_USER+0)
+#define EM_SETSEL16 (WM_USER+1)
+#define EM_GETRECT16 (WM_USER+2)
+#define EM_SETRECT16 (WM_USER+3)
+#define EM_SETRECTNP16 (WM_USER+4)
+#define EM_SCROLL16 (WM_USER+5)
+#define EM_LINESCROLL16 (WM_USER+6)
+#define EM_SCROLLCARET16 (WM_USER+7)
+#define EM_GETMODIFY16 (WM_USER+8)
+#define EM_SETMODIFY16 (WM_USER+9)
+#define EM_GETLINECOUNT16 (WM_USER+10)
+#define EM_LINEINDEX16 (WM_USER+11)
+#define EM_SETHANDLE16 (WM_USER+12)
+#define EM_GETHANDLE16 (WM_USER+13)
+#define EM_GETTHUMB16 (WM_USER+14)
+#define EM_LINELENGTH16 (WM_USER+17)
+#define EM_REPLACESEL16 (WM_USER+18)
+#define EM_GETLINE16 (WM_USER+20)
+#define EM_LIMITTEXT16 (WM_USER+21)
+#define EM_CANUNDO16 (WM_USER+22)
+#define EM_UNDO16 (WM_USER+23)
+#define EM_FMTLINES16 (WM_USER+24)
+#define EM_LINEFROMCHAR16 (WM_USER+25)
+#define EM_SETTABSTOPS16 (WM_USER+27)
+#define EM_SETPASSWORDCHAR16 (WM_USER+28)
+#define EM_EMPTYUNDOBUFFER16 (WM_USER+29)
+#define EM_GETFIRSTVISIBLELINE16 (WM_USER+30)
+#define EM_SETREADONLY16 (WM_USER+31)
+#define EM_SETWORDBREAKPROC16 (WM_USER+32)
+#define EM_GETWORDBREAKPROC16 (WM_USER+33)
+#define EM_GETPASSWORDCHAR16 (WM_USER+34)
+
+typedef struct
+{
+ UINT16 CtlType;
+ UINT16 CtlID;
+ UINT16 itemID;
+ UINT16 itemAction;
+ UINT16 itemState;
+ HWND16 hwndItem;
+ HDC16 hDC;
+ RECT16 rcItem;
+ DWORD itemData;
+} DRAWITEMSTRUCT16, *PDRAWITEMSTRUCT16, *LPDRAWITEMSTRUCT16;
+
+typedef struct
+{
+ UINT16 CtlType;
+ UINT16 CtlID;
+ UINT16 itemID;
+ UINT16 itemWidth;
+ UINT16 itemHeight;
+ DWORD itemData;
+} MEASUREITEMSTRUCT16, *PMEASUREITEMSTRUCT16, *LPMEASUREITEMSTRUCT16;
+
+typedef struct
+{
+ UINT16 CtlType;
+ UINT16 CtlID;
+ UINT16 itemID;
+ HWND16 hwndItem;
+ DWORD itemData;
+} DELETEITEMSTRUCT16, *LPDELETEITEMSTRUCT16;
+
+typedef struct
+{
+ UINT16 CtlType;
+ UINT16 CtlID;
+ HWND16 hwndItem;
+ UINT16 itemID1;
+ DWORD itemData1;
+ UINT16 itemID2;
+ DWORD itemData2;
+} COMPAREITEMSTRUCT16, *LPCOMPAREITEMSTRUCT16;
+
+/* DragObject stuff */
+
+typedef struct
+{
+ HWND16 hWnd;
+ HANDLE16 hScope;
+ WORD wFlags;
+ HANDLE16 hList;
+ HANDLE16 hOfStruct;
+ POINT16 pt;
+ LONG l;
+} DRAGINFO16, *LPDRAGINFO16;
+
+/* undocumented */
+typedef struct tagCOPYDATASTRUCT16 {
+ DWORD dwData;
+ DWORD cbData;
+ SEGPTR lpData;
+} COPYDATASTRUCT16, *PCOPYDATASTRUCT16;
+
+#define DRAGOBJ_PROGRAM 0x0001
+#define DRAGOBJ_DATA 0x0002
+#define DRAGOBJ_DIRECTORY 0x0004
+#define DRAGOBJ_MULTIPLE 0x0008
+#define DRAGOBJ_EXTERNAL 0x8000
+
+#define DRAG_PRINT 0x544E5250
+#define DRAG_FILE 0x454C4946
+
+#include <poppack.h>
+
+/* WM_COMMNOTIFY flags */
+#define CN_RECEIVE 0x0001
+#define CN_TRANSMIT 0x0002
+#define CN_EVENT 0x0004
+
+BOOL16 WINAPI CheckMenuRadioItem16(HMENU16,UINT16,UINT16,UINT16,UINT16);
+HICON16 WINAPI CopyImage16(HANDLE16,UINT16,INT16,INT16,UINT16);
+HICON16 WINAPI CreateIconFromResource16(LPBYTE,UINT16,BOOL16,DWORD);
+BOOL16 WINAPI EnumChildWindows16(HWND16,WNDENUMPROC16,LPARAM);
+INT16 WINAPI EnumProps16(HWND16,PROPENUMPROC16);
+BOOL16 WINAPI EnumWindows16(WNDENUMPROC16,LPARAM);
+DWORD WINAPI GetAppCompatFlags16(HTASK16);
+INT16 WINAPI GetKBCodePage16(void);
+INT16 WINAPI GetKeyboardType16(INT16);
+INT16 WINAPI GetKeyNameText16(LONG,LPSTR,INT16);
+INT16 WINAPI GetWindowRgn16(HWND16,HRGN16);
+BOOL16 WINAPI IsWindow16(HWND16);
+INT16 WINAPI LookupIconIdFromDirectory16(LPBYTE,BOOL16);
+UINT16 WINAPI MapVirtualKey16(UINT16,UINT16);
+FARPROC16 WINAPI SetWindowsHook16(INT16,HOOKPROC16);
+HHOOK WINAPI SetWindowsHookEx16(INT16,HOOKPROC16,HINSTANCE16,HTASK16);
+BOOL16 WINAPI UnhookWindowsHook16(INT16,HOOKPROC16);
+BOOL16 WINAPI UnhookWindowsHookEx16(HHOOK);
+VOID WINAPI CalcChildScroll16(HWND16,WORD);
+VOID WINAPI CascadeChildWindows16(HWND16,WORD);
+INT16 WINAPI CloseComm16(INT16);
+HGLOBAL16 WINAPI CreateCursorIconIndirect16(HINSTANCE16,CURSORICONINFO*,
+ LPCVOID,LPCVOID);
+BOOL16 WINAPI DCHook16(HDC16,WORD,DWORD,LPARAM);
+BOOL16 WINAPI DlgDirSelect16(HWND16,LPSTR,INT16);
+BOOL16 WINAPI DlgDirSelectComboBox16(HWND16,LPSTR,INT16);
+DWORD WINAPI DumpIcon16(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
+BOOL16 WINAPI EnableCommNotification16(INT16,HWND16,INT16,INT16);
+BOOL16 WINAPI EnableHardwareInput16(BOOL16);
+VOID WINAPI FillWindow16(HWND16,HWND16,HDC16,HBRUSH16);
+INT16 WINAPI FlushComm16(INT16,INT16);
+UINT16 WINAPI GetCommEventMask16(INT16,UINT16);
+HBRUSH16 WINAPI GetControlBrush16(HWND16,HDC16,UINT16);
+HWND16 WINAPI GetDesktopHwnd16(void);
+WORD WINAPI GetIconID16(HGLOBAL16,DWORD);
+FARPROC16 WINAPI GetMouseEventProc16(void);
+INT16 WINAPI InitApp16(HINSTANCE16);
+BOOL16 WINAPI IsUserIdle16(void);
+HGLOBAL16 WINAPI LoadCursorIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16 WINAPI LoadDIBCursorHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HGLOBAL16 WINAPI LoadDIBIconHandler16(HGLOBAL16,HMODULE16,HRSRC16);
+HICON16 WINAPI LoadIconHandler16(HGLOBAL16,BOOL16);
+HMENU16 WINAPI LookupMenuHandle16(HMENU16,INT16);
+INT16 WINAPI OpenComm16(LPCSTR,UINT16,UINT16);
+VOID WINAPI PaintRect16(HWND16,HWND16,HDC16,HBRUSH16,const RECT16*);
+INT16 WINAPI ReadComm16(INT16,LPSTR,INT16);
+SEGPTR WINAPI SetCommEventMask16(INT16,UINT16);
+BOOL16 WINAPI SetDeskPattern(void);
+VOID WINAPI TileChildWindows16(HWND16,WORD);
+INT16 WINAPI UngetCommChar16(INT16,CHAR);
+VOID WINAPI UserYield16(void);
+INT16 WINAPI WriteComm16(INT16,LPSTR,INT16);
+BOOL16 WINAPI AdjustWindowRect16(LPRECT16,DWORD,BOOL16);
+BOOL16 WINAPI AdjustWindowRectEx16(LPRECT16,DWORD,BOOL16,DWORD);
+SEGPTR WINAPI AnsiLower16(SEGPTR);
+UINT16 WINAPI AnsiLowerBuff16(LPSTR,UINT16);
+SEGPTR WINAPI AnsiNext16(SEGPTR);
+SEGPTR WINAPI AnsiPrev16(LPCSTR,SEGPTR);
+SEGPTR WINAPI AnsiUpper16(SEGPTR);
+UINT16 WINAPI AnsiUpperBuff16(LPSTR,UINT16);
+BOOL16 WINAPI AnyPopup16(void);
+BOOL16 WINAPI AppendMenu16(HMENU16,UINT16,UINT16,SEGPTR);
+UINT16 WINAPI ArrangeIconicWindows16(HWND16);
+HDWP16 WINAPI BeginDeferWindowPos16(INT16);
+HDC16 WINAPI BeginPaint16(HWND16,LPPAINTSTRUCT16);
+BOOL16 WINAPI BringWindowToTop16(HWND16);
+BOOL16 WINAPI CallMsgFilter16(MSG16*,INT16);
+BOOL16 WINAPI CallMsgFilter32_16(MSG32_16*,INT16,BOOL16);
+LRESULT WINAPI CallNextHookEx16(HHOOK,INT16,WPARAM16,LPARAM);
+LRESULT WINAPI CallWindowProc16(WNDPROC16,HWND16,UINT16,WPARAM16,LPARAM);
+BOOL16 WINAPI ChangeClipboardChain16(HWND16,HWND16);
+BOOL16 WINAPI ChangeMenu16(HMENU16,UINT16,SEGPTR,UINT16,UINT16);
+BOOL16 WINAPI CheckDlgButton16(HWND16,INT16,UINT16);
+BOOL16 WINAPI CheckMenuItem16(HMENU16,UINT16,UINT16);
+BOOL16 WINAPI CheckRadioButton16(HWND16,UINT16,UINT16,UINT16);
+HWND16 WINAPI ChildWindowFromPoint16(HWND16,POINT16);
+HWND16 WINAPI ChildWindowFromPointEx16(HWND16,POINT16,UINT16);
+INT16 WINAPI ClearCommBreak16(INT16);
+VOID WINAPI ClientToScreen16(HWND16,LPPOINT16);
+BOOL16 WINAPI ClipCursor16(const RECT16*);
+BOOL16 WINAPI CloseClipboard16(void);
+BOOL16 WINAPI CloseWindow16(HWND16);
+void WINAPI ControlPanelInfo16(INT16, WORD, LPSTR);
+HCURSOR16 WINAPI CopyCursor16(HINSTANCE16,HCURSOR16);
+HICON16 WINAPI CopyIcon16(HINSTANCE16,HICON16);
+BOOL16 WINAPI CopyRect16(RECT16*,const RECT16*);
+INT16 WINAPI CountClipboardFormats16(void);
+VOID WINAPI CreateCaret16(HWND16,HBITMAP16,INT16,INT16);
+HCURSOR16 WINAPI CreateCursor16(HINSTANCE16,INT16,INT16,INT16,INT16,LPCVOID,LPCVOID);
+HWND16 WINAPI CreateDialog16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16);
+HWND16 WINAPI CreateDialogIndirect16(HINSTANCE16,LPCVOID,HWND16,DLGPROC16);
+HWND16 WINAPI CreateDialogIndirectParam16(HINSTANCE16,LPCVOID,HWND16,
+ DLGPROC16,LPARAM);
+HWND16 WINAPI CreateDialogParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM);
+HICON16 WINAPI CreateIcon16(HINSTANCE16,INT16,INT16,BYTE,BYTE,LPCVOID,LPCVOID);
+HICON16 WINAPI CreateIconFromResourceEx16(LPBYTE,UINT16,BOOL16,DWORD,INT16,INT16,UINT16);
+HMENU16 WINAPI CreateMenu16(void);
+HMENU16 WINAPI CreatePopupMenu16(void);
+HWND16 WINAPI CreateWindow16(LPCSTR,LPCSTR,DWORD,INT16,INT16,INT16,INT16,
+ HWND16,HMENU16,HINSTANCE16,LPVOID);
+HWND16 WINAPI CreateWindowEx16(DWORD,LPCSTR,LPCSTR,DWORD,INT16,INT16,
+ INT16,INT16,HWND16,HMENU16,HINSTANCE16,LPVOID);
+LRESULT WINAPI DefDlgProc16(HWND16,UINT16,WPARAM16,LPARAM);
+HDWP16 WINAPI DeferWindowPos16(HDWP16,HWND16,HWND16,INT16,INT16,INT16,INT16,UINT16);
+LRESULT WINAPI DefFrameProc16(HWND16,HWND16,UINT16,WPARAM16,LPARAM);
+LRESULT WINAPI DefHookProc16(INT16,WPARAM16,LPARAM,HHOOK*);
+LRESULT WINAPI DefMDIChildProc16(HWND16,UINT16,WPARAM16,LPARAM);
+LRESULT WINAPI DefWindowProc16(HWND16,UINT16,WPARAM16,LPARAM);
+BOOL16 WINAPI DeleteMenu16(HMENU16,UINT16,UINT16);
+VOID WINAPI DestroyCaret16(void);
+BOOL16 WINAPI DestroyCursor16(HCURSOR16);
+BOOL16 WINAPI DestroyIcon16(HICON16);
+BOOL16 WINAPI DestroyMenu16(HMENU16);
+BOOL16 WINAPI DestroyWindow16(HWND16);
+INT16 WINAPI DialogBox16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16);
+INT16 WINAPI DialogBoxIndirect16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16);
+INT16 WINAPI DialogBoxIndirectParam16(HINSTANCE16,HANDLE16,HWND16,DLGPROC16,LPARAM);
+INT16 WINAPI DialogBoxParam16(HINSTANCE16,LPCSTR,HWND16,DLGPROC16,LPARAM);
+LONG WINAPI DispatchMessage16(const MSG16*);
+LONG WINAPI DispatchMessage32_16(const MSG32_16*,BOOL16);
+INT16 WINAPI DlgDirList16(HWND16,LPSTR,INT16,INT16,UINT16);
+INT16 WINAPI DlgDirListComboBox16(HWND16,LPSTR,INT16,INT16,UINT16);
+BOOL16 WINAPI DlgDirSelectComboBoxEx16(HWND16,LPSTR,INT16,INT16);
+BOOL16 WINAPI DlgDirSelectEx16(HWND16,LPSTR,INT16,INT16);
+BOOL16 WINAPI DragDetect16(HWND16,POINT16);
+DWORD WINAPI DragObject16(HWND16,HWND16,UINT16,HANDLE16,WORD,HCURSOR16);
+BOOL16 WINAPI DrawAnimatedRects16(HWND16,INT16,const RECT16*,const RECT16*);
+BOOL16 WINAPI DrawCaption16(HWND16,HDC16,const RECT16*,UINT16);
+BOOL16 WINAPI DrawCaptionTemp16(HWND16,HDC16, const RECT16*,HFONT16,HICON16,LPCSTR,UINT16);
+BOOL16 WINAPI DrawEdge16(HDC16,LPRECT16,UINT16,UINT16);
+void WINAPI DrawFocusRect16(HDC16,const RECT16*);
+BOOL16 WINAPI DrawFrameControl16(HDC16,LPRECT16,UINT16,UINT16);
+BOOL16 WINAPI DrawIcon16(HDC16,INT16,INT16,HICON16);
+BOOL16 WINAPI DrawIconEx16(HDC16,INT16,INT16,HICON16,INT16,INT16,
+ UINT16,HBRUSH16,UINT16);
+VOID WINAPI DrawMenuBar16(HWND16);
+INT16 WINAPI DrawText16(HDC16,LPCSTR,INT16,LPRECT16,UINT16);
+BOOL16 WINAPI EmptyClipboard16(void);
+BOOL16 WINAPI EnableMenuItem16(HMENU16,UINT16,UINT16);
+BOOL16 WINAPI EnableScrollBar16(HWND16,INT16,UINT16);
+BOOL16 WINAPI EnableWindow16(HWND16,BOOL16);
+BOOL16 WINAPI EndDeferWindowPos16(HDWP16);
+BOOL16 WINAPI EndDialog16(HWND16,INT16);
+BOOL16 WINAPI EndPaint16(HWND16,const PAINTSTRUCT16*);
+UINT16 WINAPI EnumClipboardFormats16(UINT16);
+BOOL16 WINAPI EqualRect16(const RECT16*,const RECT16*);
+LONG WINAPI EscapeCommFunction16(UINT16,UINT16);
+INT16 WINAPI ExcludeUpdateRgn16(HDC16,HWND16);
+BOOL16 WINAPI ExitWindows16(DWORD,UINT16);
+INT16 WINAPI FillRect16(HDC16,const RECT16*,HBRUSH16);
+HWND16 WINAPI FindWindow16(LPCSTR,LPCSTR);
+HWND16 WINAPI FindWindowEx16(HWND16,HWND16,LPCSTR,LPCSTR);
+BOOL16 WINAPI FlashWindow16(HWND16,BOOL16);
+DWORD WINAPI FormatMessage16(DWORD,SEGPTR,WORD,WORD,LPSTR,WORD,LPDWORD);
+INT16 WINAPI FrameRect16(HDC16,const RECT16*,HBRUSH16);
+HWND16 WINAPI GetActiveWindow16(void);
+INT16 WINAPI GetAsyncKeyState16(INT16);
+HWND16 WINAPI GetCapture16(void);
+UINT16 WINAPI GetCaretBlinkTime16(void);
+VOID WINAPI GetCaretPos16(LPPOINT16);
+BOOL16 WINAPI GetClassInfo16(HINSTANCE16,SEGPTR,WNDCLASS16 *);
+BOOL16 WINAPI GetClassInfoEx16(HINSTANCE16,SEGPTR,WNDCLASSEX16 *);
+LONG WINAPI GetClassLong16(HWND16,INT16);
+INT16 WINAPI GetClassName16(HWND16,LPSTR,INT16);
+WORD WINAPI GetClassWord16(HWND16,INT16);
+void WINAPI GetClientRect16(HWND16,LPRECT16);
+HANDLE16 WINAPI GetClipboardData16(UINT16);
+INT16 WINAPI GetClipboardFormatName16(UINT16,LPSTR,INT16);
+HWND16 WINAPI GetClipboardOwner16(void);
+HWND16 WINAPI GetClipboardViewer16(void);
+void WINAPI GetClipCursor16(LPRECT16);
+DWORD WINAPI GetCurrentTime16(void);
+HCURSOR16 WINAPI GetCursor16(void);
+BOOL16 WINAPI GetCursorPos16(LPPOINT16);
+HDC16 WINAPI GetDC16(HWND16);
+HDC16 WINAPI GetDCEx16(HWND16,HRGN16,DWORD);
+HWND16 WINAPI GetDesktopWindow16(void);
+INT16 WINAPI GetDlgCtrlID16(HWND16);
+HWND16 WINAPI GetDlgItem16(HWND16,INT16);
+UINT16 WINAPI GetDlgItemInt16(HWND16,INT16,BOOL16*,BOOL16);
+INT16 WINAPI GetDlgItemText16(HWND16,INT16,SEGPTR,UINT16);
+UINT16 WINAPI GetDoubleClickTime16(void);
+HWND16 WINAPI GetFocus16(void);
+HWND16 WINAPI GetForegroundWindow16(void);
+BOOL16 WINAPI GetIconInfo16(HICON16,LPICONINFO16);
+BOOL16 WINAPI GetInputState16(void);
+UINT16 WINAPI GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16);
+INT16 WINAPI GetKeyboardLayoutName16(LPSTR);
+INT16 WINAPI GetKeyState16(INT16);
+HWND16 WINAPI GetLastActivePopup16(HWND16);
+HMENU16 WINAPI GetMenu16(HWND16);
+DWORD WINAPI GetMenuContextHelpId16(HMENU16);
+INT16 WINAPI GetMenuItemCount16(HMENU16);
+UINT16 WINAPI GetMenuItemID16(HMENU16,INT16);
+BOOL16 WINAPI GetMenuItemRect16(HWND16,HMENU16,UINT16,LPRECT16);
+UINT16 WINAPI GetMenuState16(HMENU16,UINT16,UINT16);
+INT16 WINAPI GetMenuString16(HMENU16,UINT16,LPSTR,INT16,UINT16);
+BOOL16 WINAPI GetMessage16(MSG16*,HWND16,UINT16,UINT16);
+BOOL16 WINAPI GetMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,BOOL16);
+HWND16 WINAPI GetNextDlgGroupItem16(HWND16,HWND16,BOOL16);
+HWND16 WINAPI GetNextDlgTabItem16(HWND16,HWND16,BOOL16);
+HWND16 WINAPI GetNextWindow16(HWND16,WORD);
+HWND16 WINAPI GetOpenClipboardWindow16(void);
+HWND16 WINAPI GetParent16(HWND16);
+INT16 WINAPI GetPriorityClipboardFormat16(UINT16*,INT16);
+HANDLE16 WINAPI GetProp16(HWND16,LPCSTR);
+DWORD WINAPI GetQueueStatus16(UINT16);
+BOOL16 WINAPI GetScrollInfo16(HWND16,INT16,LPSCROLLINFO);
+INT16 WINAPI GetScrollPos16(HWND16,INT16);
+BOOL16 WINAPI GetScrollRange16(HWND16,INT16,LPINT16,LPINT16);
+HWND16 WINAPI GetShellWindow16(void);
+HMENU16 WINAPI GetSubMenu16(HMENU16,INT16);
+COLORREF WINAPI GetSysColor16(INT16);
+HBRUSH16 WINAPI GetSysColorBrush16(INT16);
+HWND16 WINAPI GetSysModalWindow16(void);
+HMENU16 WINAPI GetSystemMenu16(HWND16,BOOL16);
+INT16 WINAPI GetSystemMetrics16(INT16);
+DWORD WINAPI GetTabbedTextExtent16(HDC16,LPCSTR,INT16,INT16,const INT16*);
+HWND16 WINAPI GetTopWindow16(HWND16);
+BOOL16 WINAPI GetUpdateRect16(HWND16,LPRECT16,BOOL16);
+INT16 WINAPI GetUpdateRgn16(HWND16,HRGN16,BOOL16);
+HWND16 WINAPI GetWindow16(HWND16,WORD);
+HDC16 WINAPI GetWindowDC16(HWND16);
+LONG WINAPI GetWindowLong16(HWND16,INT16);
+BOOL16 WINAPI GetWindowPlacement16(HWND16,LPWINDOWPLACEMENT16);
+void WINAPI GetWindowRect16(HWND16,LPRECT16);
+HTASK16 WINAPI GetWindowTask16(HWND16);
+INT16 WINAPI GetWindowText16(HWND16,SEGPTR,INT16);
+INT16 WINAPI GetWindowTextLength16(HWND16);
+WORD WINAPI GetWindowWord16(HWND16,INT16);
+ATOM WINAPI GlobalAddAtom16(LPCSTR);
+ATOM WINAPI GlobalDeleteAtom16(ATOM);
+ATOM WINAPI GlobalFindAtom16(LPCSTR);
+UINT16 WINAPI GlobalGetAtomName16(ATOM,LPSTR,INT16);
+VOID WINAPI HideCaret16(HWND16);
+BOOL16 WINAPI HiliteMenuItem16(HWND16,HMENU16,UINT16,UINT16);
+DWORD WINAPI IconSize16(void);
+void WINAPI InflateRect16(LPRECT16,INT16,INT16);
+HQUEUE16 WINAPI InitThreadInput16(WORD,WORD);
+BOOL16 WINAPI InSendMessage16(void);
+BOOL16 WINAPI InsertMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);
+BOOL16 WINAPI InsertMenuItem16(HMENU16,UINT16,BOOL16,const MENUITEMINFO16*);
+BOOL16 WINAPI IntersectRect16(LPRECT16,const RECT16*,const RECT16*);
+void WINAPI InvalidateRect16(HWND16,const RECT16*,BOOL16);
+void WINAPI InvalidateRgn16(HWND16,HRGN16,BOOL16);
+void WINAPI InvertRect16(HDC16,const RECT16*);
+BOOL16 WINAPI IsCharAlpha16(CHAR);
+BOOL16 WINAPI IsCharAlphaNumeric16(CHAR);
+BOOL16 WINAPI IsCharLower16(CHAR);
+BOOL16 WINAPI IsCharUpper16(CHAR);
+BOOL16 WINAPI IsChild16(HWND16,HWND16);
+BOOL16 WINAPI IsClipboardFormatAvailable16(UINT16);
+UINT16 WINAPI IsDlgButtonChecked16(HWND16,UINT16);
+BOOL16 WINAPI IsIconic16(HWND16);
+BOOL16 WINAPI IsMenu16(HMENU16);
+BOOL16 WINAPI IsRectEmpty16(const RECT16*);
+BOOL16 WINAPI IsWindowEnabled16(HWND16);
+BOOL16 WINAPI IsWindowVisible16(HWND16);
+BOOL16 WINAPI IsZoomed16(HWND16);
+BOOL16 WINAPI KillSystemTimer16(HWND16,UINT16);
+BOOL16 WINAPI KillTimer16(HWND16,UINT16);
+HBITMAP16 WINAPI LoadBitmap16(HANDLE16,LPCSTR);
+HCURSOR16 WINAPI LoadCursor16(HINSTANCE16,LPCSTR);
+HICON16 WINAPI LoadIcon16(HINSTANCE16,LPCSTR);
+HANDLE16 WINAPI LoadImage16(HINSTANCE16,LPCSTR,UINT16,INT16,INT16,UINT16);
+HMENU16 WINAPI LoadMenu16(HINSTANCE16,LPCSTR);
+HMENU16 WINAPI LoadMenuIndirect16(LPCVOID);
+INT16 WINAPI LoadString16(HINSTANCE16,UINT16,LPSTR,INT16);
+BOOL16 WINAPI LockWindowUpdate16(HWND16);
+INT16 WINAPI LookupIconIdFromDirectoryEx16(LPBYTE,BOOL16,INT16,INT16,UINT16);
+void WINAPI MapDialogRect16(HWND16,LPRECT16);
+void WINAPI MapWindowPoints16(HWND16,HWND16,LPPOINT16,UINT16);
+VOID WINAPI MessageBeep16(UINT16);
+INT16 WINAPI MessageBox16(HWND16,LPCSTR,LPCSTR,UINT16);
+INT16 WINAPI MessageBoxIndirect16(LPMSGBOXPARAMS16);
+BOOL16 WINAPI ModifyMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);
+BOOL16 WINAPI MoveWindow16(HWND16,INT16,INT16,INT16,INT16,BOOL16);
+void WINAPI OffsetRect16(LPRECT16,INT16,INT16);
+BOOL16 WINAPI OpenClipboard16(HWND16);
+BOOL16 WINAPI OpenIcon16(HWND16);
+BOOL16 WINAPI PeekMessage16(MSG16*,HWND16,UINT16,UINT16,UINT16);
+BOOL16 WINAPI PeekMessage32_16(MSG32_16*,HWND16,UINT16,UINT16,UINT16,BOOL16);
+BOOL16 WINAPI PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM);
+BOOL16 WINAPI PostMessage16(HWND16,UINT16,WPARAM16,LPARAM);
+void WINAPI PostQuitMessage16(INT16);
+BOOL16 WINAPI PtInRect16(const RECT16*,POINT16);
+UINT16 WINAPI RealizePalette16(HDC16);
+BOOL16 WINAPI RedrawWindow16(HWND16,const RECT16*,HRGN16,UINT16);
+ATOM WINAPI RegisterClass16(const WNDCLASS16*);
+ATOM WINAPI RegisterClassEx16(const WNDCLASSEX16*);
+UINT16 WINAPI RegisterClipboardFormat16(LPCSTR);
+BOOL WINAPI RegisterShellHook16(HWND16,UINT16);
+INT16 WINAPI ReleaseDC16(HWND16,HDC16);
+BOOL16 WINAPI RemoveMenu16(HMENU16,UINT16,UINT16);
+HANDLE16 WINAPI RemoveProp16(HWND16,LPCSTR);
+VOID WINAPI ReplyMessage16(LRESULT);
+void WINAPI ScreenToClient16(HWND16,LPPOINT16);
+VOID WINAPI ScrollChildren16(HWND16,UINT16,WPARAM16,LPARAM);
+BOOL16 WINAPI ScrollDC16(HDC16,INT16,INT16,const RECT16*,const RECT16*,
+ HRGN16,LPRECT16);
+void WINAPI ScrollWindow16(HWND16,INT16,INT16,const RECT16*,const RECT16*);
+INT16 WINAPI ScrollWindowEx16(HWND16,INT16,INT16,const RECT16*,
+ const RECT16*,HRGN16,LPRECT16,UINT16);
+HPALETTE16 WINAPI SelectPalette16(HDC16,HPALETTE16,BOOL16);
+LRESULT WINAPI SendDlgItemMessage16(HWND16,INT16,UINT16,WPARAM16,LPARAM);
+LRESULT WINAPI SendMessage16(HWND16,UINT16,WPARAM16,LPARAM);
+HWND16 WINAPI SetActiveWindow16(HWND16);
+HWND16 WINAPI SetCapture16(HWND16);
+VOID WINAPI SetCaretBlinkTime16(UINT16);
+VOID WINAPI SetCaretPos16(INT16,INT16);
+LONG WINAPI SetClassLong16(HWND16,INT16,LONG);
+WORD WINAPI SetClassWord16(HWND16,INT16,WORD);
+HANDLE16 WINAPI SetClipboardData16(UINT16,HANDLE16);
+HWND16 WINAPI SetClipboardViewer16(HWND16);
+INT16 WINAPI SetCommBreak16(INT16);
+HCURSOR16 WINAPI SetCursor16(HCURSOR16);
+void WINAPI SetCursorPos16(INT16,INT16);
+BOOL16 WINAPI SetDeskWallPaper16(LPCSTR);
+void WINAPI SetDlgItemInt16(HWND16,INT16,UINT16,BOOL16);
+void WINAPI SetDlgItemText16(HWND16,INT16,SEGPTR);
+VOID WINAPI SetDoubleClickTime16(UINT16);
+HWND16 WINAPI SetFocus16(HWND16);
+BOOL16 WINAPI SetForegroundWindow16(HWND16);
+void WINAPI SetInternalWindowPos16(HWND16,UINT16,LPRECT16,LPPOINT16);
+BOOL16 WINAPI SetMenu16(HWND16,HMENU16);
+BOOL16 WINAPI SetMenuContextHelpId16(HMENU16,DWORD);
+BOOL16 WINAPI SetMenuItemBitmaps16(HMENU16,UINT16,UINT16,HBITMAP16,HBITMAP16);
+BOOL16 WINAPI SetMessageQueue16(INT16);
+HWND16 WINAPI SetParent16(HWND16,HWND16);
+BOOL16 WINAPI SetProp16(HWND16,LPCSTR,HANDLE16);
+void WINAPI SetRect16(LPRECT16,INT16,INT16,INT16,INT16);
+void WINAPI SetRectEmpty16(LPRECT16);
+INT16 WINAPI SetScrollInfo16(HWND16,INT16,const SCROLLINFO*,BOOL16);
+INT16 WINAPI SetScrollPos16(HWND16,INT16,INT16,BOOL16);
+void WINAPI SetScrollRange16(HWND16,INT16,INT16,INT16,BOOL16);
+VOID WINAPI SetSysColors16(INT16,const INT16*,const COLORREF*);
+HWND16 WINAPI SetSysModalWindow16(HWND16);
+BOOL16 WINAPI SetSystemMenu16(HWND16,HMENU16);
+UINT16 WINAPI SetSystemTimer16(HWND16,UINT16,UINT16,TIMERPROC16);
+UINT16 WINAPI SetTimer16(HWND16,UINT16,UINT16,TIMERPROC16);
+LONG WINAPI SetWindowLong16(HWND16,INT16,LONG);
+BOOL16 WINAPI SetWindowPlacement16(HWND16,const WINDOWPLACEMENT16*);
+BOOL16 WINAPI SetWindowPos16(HWND16,HWND16,INT16,INT16,INT16,INT16,WORD);
+INT16 WINAPI SetWindowRgn16(HWND16,HRGN16,BOOL16);
+BOOL16 WINAPI SetWindowText16(HWND16,SEGPTR);
+WORD WINAPI SetWindowWord16(HWND16,INT16,WORD);
+VOID WINAPI ShowCaret16(HWND16);
+INT16 WINAPI ShowCursor16(BOOL16);
+void WINAPI ShowScrollBar16(HWND16,INT16,BOOL16);
+VOID WINAPI ShowOwnedPopups16(HWND16,BOOL16);
+BOOL16 WINAPI ShowWindow16(HWND16,INT16);
+BOOL16 WINAPI SubtractRect16(LPRECT16,const RECT16*,const RECT16*);
+BOOL16 WINAPI SwapMouseButton16(BOOL16);
+VOID WINAPI SwitchToThisWindow16(HWND16,BOOL16);
+BOOL16 WINAPI SystemParametersInfo16(UINT16,UINT16,LPVOID,UINT16);
+LONG WINAPI TabbedTextOut16(HDC16,INT16,INT16,LPCSTR,INT16,INT16,const INT16*,INT16);
+BOOL16 WINAPI TrackPopupMenu16(HMENU16,UINT16,INT16,INT16,INT16,HWND16,const RECT16*);
+INT16 WINAPI TranslateAccelerator16(HWND16,HACCEL16,LPMSG16);
+BOOL16 WINAPI TranslateMDISysAccel16(HWND16,LPMSG16);
+BOOL16 WINAPI TranslateMessage16(const MSG16*);
+BOOL16 WINAPI TranslateMessage32_16(const MSG32_16*,BOOL16);
+INT16 WINAPI TransmitCommChar16(INT16,CHAR);
+BOOL16 WINAPI UnionRect16(LPRECT16,const RECT16*,const RECT16*);
+BOOL16 WINAPI UnregisterClass16(LPCSTR,HINSTANCE16);
+VOID WINAPI UpdateWindow16(HWND16);
+VOID WINAPI ValidateRect16(HWND16,const RECT16*);
+VOID WINAPI ValidateRgn16(HWND16,HRGN16);
+HWND16 WINAPI WindowFromDC16(HDC16);
+HWND16 WINAPI WindowFromPoint16(POINT16);
+BOOL16 WINAPI WinHelp16(HWND16,LPCSTR,UINT16,DWORD);
+WORD WINAPI WNetAddConnection16(LPCSTR,LPCSTR,LPCSTR);
+INT16 WINAPI wvsprintf16(LPSTR,LPCSTR,VA_LIST16);
+BOOL16 WINAPI DrawState16A(HDC16,HBRUSH16,DRAWSTATEPROC16,LPARAM,WPARAM16,INT16,INT16,INT16,INT16,UINT16);
+BOOL16 WINAPI IsDialogMessage16(HWND16,MSG16*);
+INT16 WINAPI GetCommError16(INT16,LPCOMSTAT16);
+INT16 WINAPI BuildCommDCB16(LPCSTR,LPDCB16);
+INT16 WINAPI GetCommState16(INT16,LPDCB16);
+INT16 WINAPI SetCommState16(LPDCB16);
+INT16 WINAPI lstrcmp16(LPCSTR,LPCSTR);
+INT16 WINAPI lstrcmpi16(LPCSTR,LPCSTR);
+
+/* undocumented functions */
+
+void WINAPI ConvertDialog32To16(LPCVOID,DWORD,LPVOID);
+BOOL16 WINAPI EnumTaskWindows16(HTASK16,WNDENUMPROC16,LPARAM);
+BOOL16 WINAPI GrayString16(HDC16,HBRUSH16,GRAYSTRINGPROC16,LPARAM,
+ INT16,INT16,INT16,INT16,INT16);
+DWORD WINAPI GetFileResourceSize16(LPCSTR,LPCSTR,LPCSTR,LPDWORD);
+DWORD WINAPI GetFileResource16(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD,LPVOID);
+FARPROC16 WINAPI SetTaskSignalProc(HTASK16,FARPROC16);
+
+#endif /* __WINE_WINE_WINUSER16_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h
new file mode 100644
index 00000000..f9cfab97
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wine/wpp.h
@@ -0,0 +1,71 @@
+/*
+ * Exported functions of the Wine preprocessor
+ *
+ * Copyright 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WPP_H
+#define __WINE_WPP_H
+
+#include <stdio.h>
+#include <stdarg.h>
+
+struct wpp_callbacks
+{
+ /* I/O callbacks */
+
+ /* Looks for a file to include, returning the path where it is found */
+ /* The type param is true for local (#include "filename.h") includes */
+ /* parent_name is the directory of the parent source file, includepath
+ * is an array of additional include paths */
+ char *(*lookup)( const char *filename, int type, const char *parent_name,
+ char **include_path, int include_path_count );
+ /* Opens an include file */
+ void *(*open)( const char *filename, int type );
+ /* Closes a previously opened file */
+ void (*close)( void *file );
+ /* Reads buffer from the input */
+ int (*read)( void *file, char *buffer, unsigned int len );
+ /* Writes buffer to the output */
+ void (*write)( const char *buffer, unsigned int len );
+
+ /* Error callbacks */
+ void (*error)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );
+ void (*warning)( const char *file, int line, int col, const char *near, const char *msg, va_list ap );
+};
+
+/* Return value == 0 means successful execution */
+extern int wpp_add_define( const char *name, const char *value );
+extern void wpp_del_define( const char *name );
+extern int wpp_add_cmdline_define( const char *value );
+extern void wpp_set_debug( int lex_debug, int parser_debug, int msg_debug );
+extern void wpp_set_pedantic( int on );
+extern int wpp_add_include_path( const char *path );
+extern char *wpp_find_include( const char *name, const char *parent_name );
+extern int wpp_parse( const char *input, FILE *output );
+extern void wpp_set_callbacks( const struct wpp_callbacks *callbacks );
+
+#endif /* __WINE_WPP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h
new file mode 100644
index 00000000..26cdbd21
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winerror.h
@@ -0,0 +1,2952 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINERROR_H
+#define __WINE_WINERROR_H
+
+#define FACILITY_NULL 0
+#define FACILITY_RPC 1
+#define FACILITY_DISPATCH 2
+#define FACILITY_STORAGE 3
+#define FACILITY_ITF 4
+#define FACILITY_WIN32 7
+#define FACILITY_WINDOWS 8
+#define FACILITY_SSPI 9
+#define FACILITY_SECURITY FACILITY_SSPI
+#define FACILITY_CONTROL 10
+#define FACILITY_CERT 11
+#define FACILITY_INTERNET 12
+#define FACILITY_MEDIASERVER 13
+#define FACILITY_MSMQ 14
+#define FACILITY_SETUPAPI 15
+#define FACILITY_SCARD 16
+#define FACILITY_COMPLUS 17
+#define FACILITY_AAF 18
+#define FACILITY_URT 19
+#define FACILITY_ACS 20
+#define FACILITY_DPLAY 21
+#define FACILITY_UMI 22
+#define FACILITY_SXS 23
+#define FACILITY_WINDOWS_CE 24
+#define FACILITY_HTTP 25
+#define FACILITY_COMMONLOG 26
+#define FACILITY_USERMODE_FILTER_MANAGER 31
+#define FACILITY_BACKGROUNDCOPY 32
+#define FACILITY_CONFIGURATION 33
+#define FACILITY_STATE_MANAGEMENT 34
+#define FACILITY_METADIRECTORY 35
+#define FACILITY_WINDOWSUPDATE 36
+#define FACILITY_DIRECTORYSERVICE 37
+#define FACILITY_GRAPHICS 38
+#define FACILITY_SHELL 39
+#define FACILITY_TPM_SERVICES 40
+#define FACILITY_TPM_SOFTWARE 41
+#define FACILITY_PLA 48
+#define FACILITY_FVE 49
+#define FACILITY_WINDOWS_DEFENDER 80
+
+#define SEVERITY_SUCCESS 0
+#define SEVERITY_ERROR 1
+
+
+#define MAKE_HRESULT(sev,fac,code) \
+ ((HRESULT) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) )
+#define MAKE_SCODE(sev,fac,code) \
+ ((SCODE) (((unsigned int)(sev)<<31) | ((unsigned int)(fac)<<16) | ((unsigned int)(code))) )
+#define SUCCEEDED(stat) ((HRESULT)(stat)>=0)
+#define FAILED(stat) ((HRESULT)(stat)<0)
+#define IS_ERROR(stat) (((unsigned int)(stat)>>31) == SEVERITY_ERROR)
+
+#define HRESULT_CODE(hr) ((hr) & 0xFFFF)
+#define SCODE_CODE(sc) ((sc) & 0xFFFF)
+
+#define HRESULT_FACILITY(hr) (((hr) >> 16) & 0x1FFF)
+#define SCODE_FACILITY(sc) (((sc) >> 16) & 0x1FFF)
+
+#define HRESULT_SEVERITY(hr) (((hr) >> 31) & 0x1)
+#define SCODE_SEVERITY(sc) (((sc) >> 31) & 0x1)
+
+#define __HRESULT_FROM_WIN32(x) ((HRESULT)(x) > 0 ? ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)(x) )
+#ifndef _HRESULT_DEFINED
+#define _HRESULT_DEFINED
+# ifdef _MSC_VER
+typedef long HRESULT;
+# else
+typedef int HRESULT;
+# endif
+#endif
+static inline HRESULT HRESULT_FROM_WIN32(unsigned int x)
+{
+ return (HRESULT)x > 0 ? ((HRESULT) ((x & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)) : (HRESULT)x;
+}
+#define FACILITY_NT_BIT 0x10000000
+#define HRESULT_FROM_NT(x) ((HRESULT) ((x) | FACILITY_NT_BIT))
+
+/* SCODE <-> HRESULT functions */
+/* This macros is obsolete and should not be used in new apps. */
+#define GetScode(hr) ((SCODE)(hr))
+/* This macros is obsolete and should not be used in new apps. */
+#define ResultFromScode(sc) ((HRESULT)(sc))
+
+#define NO_ERROR 0
+#define ERROR_SUCCESS 0
+#define ERROR_INVALID_FUNCTION 1
+#define ERROR_FILE_NOT_FOUND 2
+#define ERROR_PATH_NOT_FOUND 3
+#define ERROR_TOO_MANY_OPEN_FILES 4
+#define ERROR_ACCESS_DENIED 5
+#define ERROR_INVALID_HANDLE 6
+#define ERROR_ARENA_TRASHED 7
+#define ERROR_NOT_ENOUGH_MEMORY 8
+#define ERROR_INVALID_BLOCK 9
+#define ERROR_BAD_ENVIRONMENT 10
+#define ERROR_BAD_FORMAT 11
+#define ERROR_INVALID_ACCESS 12
+#define ERROR_INVALID_DATA 13
+#define ERROR_OUTOFMEMORY 14
+#define ERROR_INVALID_DRIVE 15
+#define ERROR_CURRENT_DIRECTORY 16
+#define ERROR_NOT_SAME_DEVICE 17
+#define ERROR_NO_MORE_FILES 18
+#define ERROR_WRITE_PROTECT 19
+#define ERROR_BAD_UNIT 20
+#define ERROR_NOT_READY 21
+#define ERROR_BAD_COMMAND 22
+#define ERROR_CRC 23
+#define ERROR_BAD_LENGTH 24
+#define ERROR_SEEK 25
+#define ERROR_NOT_DOS_DISK 26
+#define ERROR_SECTOR_NOT_FOUND 27
+#define ERROR_OUT_OF_PAPER 28
+#define ERROR_WRITE_FAULT 29
+#define ERROR_READ_FAULT 30
+#define ERROR_GEN_FAILURE 31
+#define ERROR_SHARING_VIOLATION 32
+#define ERROR_LOCK_VIOLATION 33
+#define ERROR_WRONG_DISK 34
+#define ERROR_FCB_UNAVAILABLE 35
+#define ERROR_SHARING_BUFFER_EXCEEDED 36
+#define ERROR_HANDLE_EOF 38
+#define ERROR_HANDLE_DISK_FULL 39
+#define ERROR_NOT_SUPPORTED 50
+#define ERROR_REM_NOT_LIST 51
+#define ERROR_DUP_NAME 52
+#define ERROR_BAD_NETPATH 53
+#define ERROR_NETWORK_BUSY 54
+#define ERROR_DEV_NOT_EXIST 55
+#define ERROR_TOO_MANY_CMDS 56
+#define ERROR_ADAP_HDW_ERR 57
+#define ERROR_BAD_NET_RESP 58
+#define ERROR_UNEXP_NET_ERR 59
+#define ERROR_BAD_REM_ADAP 60
+#define ERROR_PRINTQ_FULL 61
+#define ERROR_NO_SPOOL_SPACE 62
+#define ERROR_PRINT_CANCELLED 63
+#define ERROR_NETNAME_DELETED 64
+#define ERROR_NETWORK_ACCESS_DENIED 65
+#define ERROR_BAD_DEV_TYPE 66
+#define ERROR_BAD_NET_NAME 67
+#define ERROR_TOO_MANY_NAMES 68
+#define ERROR_TOO_MANY_SESS 69
+#define ERROR_SHARING_PAUSED 70
+#define ERROR_REQ_NOT_ACCEP 71
+#define ERROR_REDIR_PAUSED 72
+#define ERROR_FILE_EXISTS 80
+#define ERROR_CANNOT_MAKE 82
+#define ERROR_FAIL_I24 83
+#define ERROR_OUT_OF_STRUCTURES 84
+#define ERROR_ALREADY_ASSIGNED 85
+#define ERROR_INVALID_PASSWORD 86
+#define ERROR_INVALID_PARAMETER 87
+#define ERROR_NET_WRITE_FAULT 88
+#define ERROR_NO_PROC_SLOTS 89
+#define ERROR_TOO_MANY_SEMAPHORES 100
+#define ERROR_EXCL_SEM_ALREADY_OWNED 101
+#define ERROR_SEM_IS_SET 102
+#define ERROR_TOO_MANY_SEM_REQUESTS 103
+#define ERROR_INVALID_AT_INTERRUPT_TIME 104
+#define ERROR_SEM_OWNER_DIED 105
+#define ERROR_SEM_USER_LIMIT 106
+#define ERROR_DISK_CHANGE 107
+#define ERROR_DRIVE_LOCKED 108
+#define ERROR_BROKEN_PIPE 109
+#define ERROR_OPEN_FAILED 110
+#define ERROR_BUFFER_OVERFLOW 111
+#define ERROR_DISK_FULL 112
+#define ERROR_NO_MORE_SEARCH_HANDLES 113
+#define ERROR_INVALID_TARGET_HANDLE 114
+#define ERROR_INVALID_CATEGORY 117
+#define ERROR_INVALID_VERIFY_SWITCH 118
+#define ERROR_BAD_DRIVER_LEVEL 119
+#define ERROR_CALL_NOT_IMPLEMENTED 120
+#define ERROR_SEM_TIMEOUT 121
+#define ERROR_INSUFFICIENT_BUFFER 122
+#define ERROR_INVALID_NAME 123
+#define ERROR_INVALID_LEVEL 124
+#define ERROR_NO_VOLUME_LABEL 125
+#define ERROR_MOD_NOT_FOUND 126
+#define ERROR_PROC_NOT_FOUND 127
+#define ERROR_WAIT_NO_CHILDREN 128
+#define ERROR_CHILD_NOT_COMPLETE 129
+#define ERROR_DIRECT_ACCESS_HANDLE 130
+#define ERROR_NEGATIVE_SEEK 131
+#define ERROR_SEEK_ON_DEVICE 132
+#define ERROR_IS_JOIN_TARGET 133
+#define ERROR_IS_JOINED 134
+#define ERROR_IS_SUBSTED 135
+#define ERROR_NOT_JOINED 136
+#define ERROR_NOT_SUBSTED 137
+#define ERROR_JOIN_TO_JOIN 138
+#define ERROR_SUBST_TO_SUBST 139
+#define ERROR_JOIN_TO_SUBST 140
+#define ERROR_SUBST_TO_JOIN 141
+#define ERROR_BUSY_DRIVE 142
+#define ERROR_SAME_DRIVE 143
+#define ERROR_DIR_NOT_ROOT 144
+#define ERROR_DIR_NOT_EMPTY 145
+#define ERROR_IS_SUBST_PATH 146
+#define ERROR_IS_JOIN_PATH 147
+#define ERROR_PATH_BUSY 148
+#define ERROR_IS_SUBST_TARGET 149
+#define ERROR_SYSTEM_TRACE 150
+#define ERROR_INVALID_EVENT_COUNT 151
+#define ERROR_TOO_MANY_MUXWAITERS 152
+#define ERROR_INVALID_LIST_FORMAT 153
+#define ERROR_LABEL_TOO_LONG 154
+#define ERROR_TOO_MANY_TCBS 155
+#define ERROR_SIGNAL_REFUSED 156
+#define ERROR_DISCARDED 157
+#define ERROR_NOT_LOCKED 158
+#define ERROR_BAD_THREADID_ADDR 159
+#define ERROR_BAD_ARGUMENTS 160
+#define ERROR_BAD_PATHNAME 161
+#define ERROR_SIGNAL_PENDING 162
+#define ERROR_MAX_THRDS_REACHED 164
+#define ERROR_LOCK_FAILED 167
+#define ERROR_BUSY 170
+#define ERROR_CANCEL_VIOLATION 173
+#define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED 174
+#define ERROR_INVALID_SEGMENT_NUMBER 180
+#define ERROR_INVALID_ORDINAL 182
+#define ERROR_ALREADY_EXISTS 183
+#define ERROR_INVALID_FLAG_NUMBER 186
+#define ERROR_SEM_NOT_FOUND 187
+#define ERROR_INVALID_STARTING_CODESEG 188
+#define ERROR_INVALID_STACKSEG 189
+#define ERROR_INVALID_MODULETYPE 190
+#define ERROR_INVALID_EXE_SIGNATURE 191
+#define ERROR_EXE_MARKED_INVALID 192
+#define ERROR_BAD_EXE_FORMAT 193
+#define ERROR_ITERATED_DATA_EXCEEDS_64k 194
+#define ERROR_INVALID_MINALLOCSIZE 195
+#define ERROR_DYNLINK_FROM_INVALID_RING 196
+#define ERROR_IOPL_NOT_ENABLED 197
+#define ERROR_INVALID_SEGDPL 198
+#define ERROR_AUTODATASEG_EXCEEDS_64k 199
+#define ERROR_RING2SEG_MUST_BE_MOVABLE 200
+#define ERROR_RELOC_CHAIN_XEEDS_SEGLIM 201
+#define ERROR_INFLOOP_IN_RELOC_CHAIN 202
+#define ERROR_ENVVAR_NOT_FOUND 203
+#define ERROR_NO_SIGNAL_SENT 205
+#define ERROR_FILENAME_EXCED_RANGE 206
+#define ERROR_RING2_STACK_IN_USE 207
+#define ERROR_META_EXPANSION_TOO_LONG 208
+#define ERROR_INVALID_SIGNAL_NUMBER 209
+#define ERROR_THREAD_1_INACTIVE 210
+#define ERROR_LOCKED 212
+#define ERROR_TOO_MANY_MODULES 214
+#define ERROR_NESTING_NOT_ALLOWED 215
+#define ERROR_EXE_MACHINE_TYPE_MISMATCH 216
+#define ERROR_BAD_PIPE 230
+#define ERROR_PIPE_BUSY 231
+#define ERROR_NO_DATA 232
+#define ERROR_PIPE_NOT_CONNECTED 233
+#define ERROR_MORE_DATA 234
+#define ERROR_VC_DISCONNECTED 240
+#define ERROR_INVALID_EA_NAME 254
+#define ERROR_EA_LIST_INCONSISTENT 255
+#define ERROR_NO_MORE_ITEMS 259
+#define ERROR_CANNOT_COPY 266
+#define ERROR_DIRECTORY 267
+#define ERROR_EAS_DIDNT_FIT 275
+#define ERROR_EA_FILE_CORRUPT 276
+#define ERROR_EA_TABLE_FULL 277
+#define ERROR_INVALID_EA_HANDLE 278
+#define ERROR_EAS_NOT_SUPPORTED 282
+#define ERROR_NOT_OWNER 288
+#define ERROR_TOO_MANY_POSTS 298
+#define ERROR_PARTIAL_COPY 299
+#define ERROR_OPLOCK_NOT_GRANTED 300
+#define ERROR_INVALID_OPLOCK_PROTOCOL 301
+#define ERROR_DISK_TOO_FRAGMENTED 302
+#define ERROR_MR_MID_NOT_FOUND 317
+#define ERROR_SCOPE_NOT_FOUND 318
+#define ERROR_FAIL_NOACTION_REBOOT 350
+#define ERROR_FAIL_SHUTDOWN 351
+#define ERROR_FAIL_RESTART 352
+#define ERROR_MAX_SESSIONS_REACHED 353
+#define ERROR_INVALID_ADDRESS 487
+#define ERROR_USER_PROFILE_LOAD 500
+#define ERROR_ARITHMETIC_OVERFLOW 534
+#define ERROR_PIPE_CONNECTED 535
+#define ERROR_PIPE_LISTENING 536
+#define ERROR_INVALID_LDT_SIZE 561
+#define ERROR_INVALID_LDT_OFFSET 563
+#define ERROR_INVALID_LDT_DESCRIPTOR 564
+#define ERROR_TOO_MANY_THREADS 565
+#define ERROR_THREAD_NOT_IN_PROCESS 566
+#define ERROR_PAGEFILE_QUOTA_EXCEEDED 567
+#define ERROR_LOGON_SERVER_CONFLICT 568
+#define ERROR_SYNCHRONIZATION_REQUIRED 569
+#define ERROR_NET_OPEN_FAILED 570
+#define ERROR_IO_PRIVILEGE_FAILED 571
+#define ERROR_CONTROL_C_EXIT 572
+#define ERROR_MISSING_SYSTEMFILE 573
+#define ERROR_UNHANDLED_EXCEPTION 574
+#define ERROR_APP_INIT_FAILURE 575
+#define ERROR_PAGEFILE_CREATE_FAILED 576
+#define ERROR_INVALID_IMAGE_HASH 577
+#define ERROR_NO_PAGEFILE 578
+#define ERROR_ILLEGAL_FLOAT_CONTEXT 579
+#define ERROR_NO_EVENT_PAIR 580
+#define ERROR_DOMAIN_CTRLR_CONFIG_ERROR 581
+#define ERROR_ILLEGAL_CHARACTER 582
+#define ERROR_UNDEFINED_CHARACTER 583
+#define ERROR_FLOPPY_VOLUME 584
+#define ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT 585
+#define ERROR_BACKUP_CONTROLLER 586
+#define ERROR_MUTANT_LIMIT_EXCEEDED 587
+#define ERROR_FS_DRIVER_REQUIRED 588
+#define ERROR_CANNOT_LOAD_REGISTRY_FILE 589
+#define ERROR_DEBUG_ATTACH_FAILED 590
+#define ERROR_SYSTEM_PROCESS_TERMINATED 591
+#define ERROR_DATA_NOT_ACCEPTED 592
+#define ERROR_VDM_HARD_ERROR 593
+#define ERROR_DRIVER_CANCEL_TIMEOUT 594
+#define ERROR_REPLY_MESSAGE_MISMATCH 595
+#define ERROR_LOST_WRITEBEHIND_DATA 596
+#define ERROR_CLIENT_SERVER_PARAMETERS_INVALID 597
+#define ERROR_NOT_TINY_STREAM 598
+#define ERROR_STACK_OVERFLOW_READ 599
+#define ERROR_CONVERT_TO_LARGE 600
+#define ERROR_FOUND_OUT_OF_SCOPE 601
+#define ERROR_ALLOCATE_BUCKET 602
+#define ERROR_MARSHALL_OVERFLOW 603
+#define ERROR_INVALID_VARIANT 604
+#define ERROR_BAD_COMPRESSION_BUFFER 605
+#define ERROR_AUDIT_FAILED 606
+#define ERROR_TIMER_RESOLUTION_NOT_SET 607
+#define ERROR_INSUFFICIENT_LOGON_INFO 608
+#define ERROR_BAD_DLL_ENTRYPOINT 609
+#define ERROR_BAD_SERVICE_ENTRYPOINT 610
+#define ERROR_IP_ADDRESS_CONFLICT1 611
+#define ERROR_IP_ADDRESS_CONFLICT2 612
+#define ERROR_REGISTRY_QUOTA_LIMIT 613
+#define ERROR_NO_CALLBACK_ACTIVE 614
+#define ERROR_PWD_TOO_SHORT 615
+#define ERROR_PWD_TOO_RECENT 616
+#define ERROR_PWD_HISTORY_CONFLICT 617
+#define ERROR_UNSUPPORTED_COMPRESSION 618
+#define ERROR_INVALID_HW_PROFILE 619
+#define ERROR_INVALID_PLUGPLAY_DEVICE_PATH 620
+#define ERROR_QUOTA_LIST_INCONSISTENT 621
+#define ERROR_EVALUATION_EXPIRATION 622
+#define ERROR_ILLEGAL_DLL_RELOCATION 623
+#define ERROR_DLL_INIT_FAILED_LOGOFF 624
+#define ERROR_VALIDATE_CONTINUE 625
+#define ERROR_NO_MORE_MATCHES 626
+#define ERROR_RANGE_LIST_CONFLICT 627
+#define ERROR_SERVER_SID_MISMATCH 628
+#define ERROR_CANT_ENABLE_DENY_ONLY 629
+#define ERROR_FLOAT_MULTIPLE_FAULTS 630
+#define ERROR_FLOAT_MULTIPLE_TRAPS 631
+#define ERROR_NOINTERFACE 632
+#define ERROR_DRIVER_FAILED_SLEEP 633
+#define ERROR_CORRUPT_SYSTEM_FILE 634
+#define ERROR_COMMITMENT_MINIMUM 635
+#define ERROR_PNP_RESTART_ENUMERATION 636
+#define ERROR_SYSTEM_IMAGE_BAD_SIGNATURE 637
+#define ERROR_PNP_REBOOT_REQUIRED 638
+#define ERROR_INSUFFICIENT_POWER 639
+#define ERROR_MULTIPLE_FAULT_VIOLATION 640
+#define ERROR_SYSTEM_SHUTDOWN 641
+#define ERROR_PORT_NOT_SET 642
+#define ERROR_DS_VERSION_CHECK_FAILURE 643
+#define ERROR_RANGE_NOT_FOUND 644
+#define ERROR_NOT_SAFE_MODE_DRIVER 646
+#define ERROR_FAILED_DRIVER_ENTRY 647
+#define ERROR_DEVICE_ENUMERATION_ERROR 648
+#define ERROR_MOUNT_POINT_NOT_RESOLVED 649
+#define ERROR_INVALID_DEVICE_OBJECT_PARAMETER 650
+#define ERROR_MCA_OCCURED 651
+#define ERROR_DRIVER_DATABASE_ERROR 652
+#define ERROR_SYSTEM_HIVE_TOO_LARGE 653
+#define ERROR_DRIVER_FAILED_PRIOR_UNLOAD 654
+#define ERROR_VOLSNAP_PREPARE_HIBERNATE 655
+#define ERROR_HIBERNATION_FAILURE 656
+#define ERROR_FILE_SYSTEM_LIMITATION 665
+#define ERROR_ASSERTION_FAILURE 668
+#define ERROR_ACPI_ERROR 669
+#define ERROR_WOW_ASSERTION 670
+#define ERROR_PNP_BAD_MPS_TABLE 671
+#define ERROR_PNP_TRANSLATION_FAILED 672
+#define ERROR_PNP_IRQ_TRANSLATION_FAILED 673
+#define ERROR_PNP_INVALID_ID 674
+#define ERROR_WAKE_SYSTEM_DEBUGGER 675
+#define ERROR_HANDLES_CLOSED 676
+#define ERROR_EXTRANEOUS_INFORMATION 677
+#define ERROR_RXACT_COMMIT_NECESSARY 678
+#define ERROR_MEDIA_CHECK 679
+#define ERROR_GUID_SUBSTITUTION_MADE 680
+#define ERROR_STOPPED_ON_SYMLINK 681
+#define ERROR_LONGJUMP 682
+#define ERROR_PLUGPLAY_QUERY_VETOED 683
+#define ERROR_UNWIND_CONSOLIDATE 684
+#define ERROR_REGISTRY_HIVE_RECOVERED 685
+#define ERROR_DLL_MIGHT_BE_INSECURE 686
+#define ERROR_DLL_MIGHT_BE_INCOMPATIBLE 687
+#define ERROR_DBG_EXCEPTION_NOT_HANDLED 688
+#define ERROR_DBG_REPLY_LATER 689
+#define ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE 690
+#define ERROR_DBG_TERMINATE_THREAD 691
+#define ERROR_DBG_TERMINATE_PROCESS 692
+#define ERROR_DBG_CONTROL_C 693
+#define ERROR_DBG_PRINTEXCEPTION_C 694
+#define ERROR_DBG_RIPEXCEPTION 695
+#define ERROR_DBG_CONTROL_BREAK 696
+#define ERROR_DBG_COMMAND_EXCEPTION 697
+#define ERROR_OBJECT_NAME_EXISTS 698
+#define ERROR_THREAD_WAS_SUSPENDED 699
+#define ERROR_IMAGE_NOT_AT_BASE 700
+#define ERROR_RXACT_STATE_CREATED 701
+#define ERROR_SEGMENT_NOTIFICATION 702
+#define ERROR_BAD_CURRENT_DIRECTORY 703
+#define ERROR_FT_READ_RECOVERY_FROM_BACKUP 704
+#define ERROR_FT_WRITE_RECOVERY 705
+#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH 706
+#define ERROR_RECEIVE_PARTIAL 707
+#define ERROR_RECEIVE_EXPEDITED 708
+#define ERROR_RECEIVE_PARTIAL_EXPEDITED 709
+#define ERROR_EVENT_DONE 710
+#define ERROR_EVENT_PENDING 711
+#define ERROR_CHECKING_FILE_SYSTEM 712
+#define ERROR_FATAL_APP_EXIT 713
+#define ERROR_PREDEFINED_HANDLE 714
+#define ERROR_WAS_UNLOCKED 715
+#define ERROR_SERVICE_NOTIFICATION 716
+#define ERROR_WAS_LOCKED 717
+#define ERROR_LOG_HARD_ERROR 718
+#define ERROR_ALREADY_WIN32 719
+#define ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE 720
+#define ERROR_NO_YIELD_PERFORMED 721
+#define ERROR_TIMER_RESUME_IGNORED 722
+#define ERROR_ARBITRATION_UNHANDLED 723
+#define ERROR_CARDBUS_NOT_SUPPORTED 724
+#define ERROR_MP_PROCESSOR_MISMATCH 725
+#define ERROR_HIBERNATED 726
+#define ERROR_RESUME_HIBERNATION 727
+#define ERROR_FIRMWARE_UPDATED 728
+#define ERROR_DRIVERS_LEAKING_LOCKED_PAGES 729
+#define ERROR_WAKE_SYSTEM 730
+#define ERROR_ABANDONED_WAIT_0 735
+#define ERROR_ELEVATION_REQUIRED 740
+#define ERROR_REPARSE 741
+#define ERROR_OPLOCK_BREAK_IN_PROGRESS 742
+#define ERROR_VOLUME_MOUNTED 743
+#define ERROR_RXACT_COMMITTED 744
+#define ERROR_NOTIFY_CLEANUP 745
+#define ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED 746
+#define ERROR_PAGE_FAULT_TRANSITION 747
+#define ERROR_PAGE_FAULT_DEMAND_ZERO 748
+#define ERROR_PAGE_FAULT_COPY_ON_WRITE 749
+#define ERROR_PAGE_FAULT_GUARD_PAGE 750
+#define ERROR_PAGE_FAULT_PAGING_FILE 751
+#define ERROR_CACHE_PAGE_LOCKED 752
+#define ERROR_CRASH_DUMP 753
+#define ERROR_BUFFER_ALL_ZEROS 754
+#define ERROR_REPARSE_OBJECT 755
+#define ERROR_RESOURCE_REQUIREMENTS_CHANGED 756
+#define ERROR_TRANSLATION_COMPLETE 757
+#define ERROR_NOTHING_TO_TERMINATE 758
+#define ERROR_PROCESS_NOT_IN_JOB 759
+#define ERROR_PROCESS_IN_JOB 760
+#define ERROR_VOLSNAP_HIBERNATE_READY 761
+#define ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY 762
+#define ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED 763
+#define ERROR_INTERRUPT_STILL_CONNECTED 764
+#define ERROR_WAIT_FOR_OPLOCK 765
+#define ERROR_DBG_EXCEPTION_HANDLED 766
+#define ERROR_DBG_CONTINUE 767
+#define ERROR_CALLBACK_POP_STACK 768
+#define ERROR_COMPRESSION_DISABLED 769
+#define ERROR_CANTFETCHBACKWARDS 770
+#define ERROR_CANTSCROLLBACKWARDS 771
+#define ERROR_ROWSNOTRELEASED 772
+#define ERROR_BAD_ACCESSOR_FLAGS 773
+#define ERROR_ERRORS_ENCOUNTERED 774
+#define ERROR_NOT_CAPABLE 775
+#define ERROR_REQUEST_OUT_OF_SEQUENCE 776
+#define ERROR_VERSION_PARSE_ERROR 777
+#define ERROR_BADSTARTPOSITION 778
+#define ERROR_MEMORY_HARDWARE 779
+#define ERROR_DISK_REPAIR_DISABLED 780
+#define ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE 781
+#define ERROR_SYSTEM_POWERSTATE_TRANSITION 782
+#define ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION 783
+#define ERROR_MCA_EXCEPTION 784
+#define ERROR_ACCESS_AUDIT_BY_POLICY 785
+#define ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY 786
+#define ERROR_ABANDON_HIBERFILE 787
+#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED 788
+#define ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR 789
+#define ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR 790
+#define ERROR_EA_ACCESS_DENIED 994
+#define ERROR_OPERATION_ABORTED 995
+#define ERROR_IO_INCOMPLETE 996
+#define ERROR_IO_PENDING 997
+#define ERROR_NOACCESS 998
+#define ERROR_SWAPERROR 999
+#define ERROR_STACK_OVERFLOW 1001
+#define ERROR_INVALID_MESSAGE 1002
+#define ERROR_CAN_NOT_COMPLETE 1003
+#define ERROR_INVALID_FLAGS 1004
+#define ERROR_UNRECOGNIZED_VOLUME 1005
+#define ERROR_FILE_INVALID 1006
+#define ERROR_FULLSCREEN_MODE 1007
+#define ERROR_NO_TOKEN 1008
+#define ERROR_BADDB 1009
+#define ERROR_BADKEY 1010
+#define ERROR_CANTOPEN 1011
+#define ERROR_CANTREAD 1012
+#define ERROR_CANTWRITE 1013
+#define ERROR_REGISTRY_RECOVERED 1014
+#define ERROR_REGISTRY_CORRUPT 1015
+#define ERROR_REGISTRY_IO_FAILED 1016
+#define ERROR_NOT_REGISTRY_FILE 1017
+#define ERROR_KEY_DELETED 1018
+#define ERROR_NO_LOG_SPACE 1019
+#define ERROR_KEY_HAS_CHILDREN 1020
+#define ERROR_CHILD_MUST_BE_VOLATILE 1021
+#define ERROR_NOTIFY_ENUM_DIR 1022
+#define ERROR_DEPENDENT_SERVICES_RUNNING 1051
+#define ERROR_INVALID_SERVICE_CONTROL 1052
+#define ERROR_SERVICE_REQUEST_TIMEOUT 1053
+#define ERROR_SERVICE_NO_THREAD 1054
+#define ERROR_SERVICE_DATABASE_LOCKED 1055
+#define ERROR_SERVICE_ALREADY_RUNNING 1056
+#define ERROR_INVALID_SERVICE_ACCOUNT 1057
+#define ERROR_SERVICE_DISABLED 1058
+#define ERROR_CIRCULAR_DEPENDENCY 1059
+#define ERROR_SERVICE_DOES_NOT_EXIST 1060
+#define ERROR_SERVICE_CANNOT_ACCEPT_CTRL 1061
+#define ERROR_SERVICE_NOT_ACTIVE 1062
+#define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT 1063
+#define ERROR_EXCEPTION_IN_SERVICE 1064
+#define ERROR_DATABASE_DOES_NOT_EXIST 1065
+#define ERROR_SERVICE_SPECIFIC_ERROR 1066
+#define ERROR_PROCESS_ABORTED 1067
+#define ERROR_SERVICE_DEPENDENCY_FAIL 1068
+#define ERROR_SERVICE_LOGON_FAILED 1069
+#define ERROR_SERVICE_START_HANG 1070
+#define ERROR_INVALID_SERVICE_LOCK 1071
+#define ERROR_SERVICE_MARKED_FOR_DELETE 1072
+#define ERROR_SERVICE_EXISTS 1073
+#define ERROR_ALREADY_RUNNING_LKG 1074
+#define ERROR_SERVICE_DEPENDENCY_DELETED 1075
+#define ERROR_BOOT_ALREADY_ACCEPTED 1076
+#define ERROR_SERVICE_NEVER_STARTED 1077
+#define ERROR_DUPLICATE_SERVICE_NAME 1078
+#define ERROR_DIFFERENT_SERVICE_ACCOUNT 1079
+#define ERROR_CANNOT_DETECT_DRIVER_FAILURE 1080
+#define ERROR_CANNOT_DETECT_PROCESS_ABORT 1081
+#define ERROR_NO_RECOVERY_PROGRAM 1082
+#define ERROR_SERVICE_NOT_IN_EXE 1083
+#define ERROR_END_OF_MEDIA 1100
+#define ERROR_FILEMARK_DETECTED 1101
+#define ERROR_BEGINNING_OF_MEDIA 1102
+#define ERROR_SETMARK_DETECTED 1103
+#define ERROR_NO_DATA_DETECTED 1104
+#define ERROR_PARTITION_FAILURE 1105
+#define ERROR_INVALID_BLOCK_LENGTH 1106
+#define ERROR_DEVICE_NOT_PARTITIONED 1107
+#define ERROR_UNABLE_TO_LOCK_MEDIA 1108
+#define ERROR_UNABLE_TO_UNLOAD_MEDIA 1109
+#define ERROR_MEDIA_CHANGED 1110
+#define ERROR_BUS_RESET 1111
+#define ERROR_NO_MEDIA_IN_DRIVE 1112
+#define ERROR_NO_UNICODE_TRANSLATION 1113
+#define ERROR_DLL_INIT_FAILED 1114
+#define ERROR_SHUTDOWN_IN_PROGRESS 1115
+#define ERROR_NO_SHUTDOWN_IN_PROGRESS 1116
+#define ERROR_IO_DEVICE 1117
+#define ERROR_SERIAL_NO_DEVICE 1118
+#define ERROR_IRQ_BUSY 1119
+#define ERROR_MORE_WRITES 1120
+#define ERROR_COUNTER_TIMEOUT 1121
+#define ERROR_FLOPPY_ID_MARK_NOT_FOUND 1122
+#define ERROR_FLOPPY_WRONG_CYLINDER 1123
+#define ERROR_FLOPPY_UNKNOWN_ERROR 1124
+#define ERROR_FLOPPY_BAD_REGISTERS 1125
+#define ERROR_DISK_RECALIBRATE_FAILED 1126
+#define ERROR_DISK_OPERATION_FAILED 1127
+#define ERROR_DISK_RESET_FAILED 1128
+#define ERROR_EOM_OVERFLOW 1129
+#define ERROR_NOT_ENOUGH_SERVER_MEMORY 1130
+#define ERROR_POSSIBLE_DEADLOCK 1131
+#define ERROR_MAPPED_ALIGNMENT 1132
+#define ERROR_SET_POWER_STATE_VETOED 1140
+#define ERROR_SET_POWER_STATE_FAILED 1141
+#define ERROR_TOO_MANY_LINKS 1142
+#define ERROR_OLD_WIN_VERSION 1150
+#define ERROR_APP_WRONG_OS 1151
+#define ERROR_SINGLE_INSTANCE_APP 1152
+#define ERROR_RMODE_APP 1153
+#define ERROR_INVALID_DLL 1154
+#define ERROR_NO_ASSOCIATION 1155
+#define ERROR_DDE_FAIL 1156
+#define ERROR_DLL_NOT_FOUND 1157
+#define ERROR_NO_MORE_USER_HANDLES 1158
+#define ERROR_MESSAGE_SYNC_ONLY 1159
+#define ERROR_SOURCE_ELEMENT_EMPTY 1160
+#define ERROR_DESTINATION_ELEMENT_FULL 1161
+#define ERROR_ILLEGAL_ELEMENT_ADDRESS 1162
+#define ERROR_MAGAZINE_NOT_PRESENT 1163
+#define ERROR_DEVICE_REINITIALIZATION_NEEDED 1164
+#define ERROR_DEVICE_REQUIRES_CLEANING 1165
+#define ERROR_DEVICE_DOOR_OPEN 1166
+#define ERROR_DEVICE_NOT_CONNECTED 1167
+#define ERROR_NOT_FOUND 1168
+#define ERROR_NO_MATCH 1169
+#define ERROR_SET_NOT_FOUND 1170
+#define ERROR_POINT_NOT_FOUND 1171
+#define ERROR_NO_TRACKING_SERVICE 1172
+#define ERROR_NO_VOLUME_ID 1173
+#define ERROR_UNABLE_TO_REMOVE_REPLACED 1175
+#define ERROR_UNABLE_TO_MOVE_REPLACEMENT 1176
+#define ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 1177
+#define ERROR_JOURNAL_DELETE_IN_PROGRESS 1178
+#define ERROR_JOURNAL_NOT_ACTIVE 1179
+#define ERROR_POTENTIAL_FILE_FOUND 1180
+#define ERROR_JOURNAL_ENTRY_DELETED 1181
+#define ERROR_BAD_DEVICE 1200
+#define ERROR_CONNECTION_UNAVAIL 1201
+#define ERROR_DEVICE_ALREADY_REMEMBERED 1202
+#define ERROR_NO_NET_OR_BAD_PATH 1203
+#define ERROR_BAD_PROVIDER 1204
+#define ERROR_CANNOT_OPEN_PROFILE 1205
+#define ERROR_BAD_PROFILE 1206
+#define ERROR_NOT_CONTAINER 1207
+#define ERROR_EXTENDED_ERROR 1208
+#define ERROR_INVALID_GROUPNAME 1209
+#define ERROR_INVALID_COMPUTERNAME 1210
+#define ERROR_INVALID_EVENTNAME 1211
+#define ERROR_INVALID_DOMAINNAME 1212
+#define ERROR_INVALID_SERVICENAME 1213
+#define ERROR_INVALID_NETNAME 1214
+#define ERROR_INVALID_SHARENAME 1215
+#define ERROR_INVALID_PASSWORDNAME 1216
+#define ERROR_INVALID_MESSAGENAME 1217
+#define ERROR_INVALID_MESSAGEDEST 1218
+#define ERROR_SESSION_CREDENTIAL_CONFLICT 1219
+#define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED 1220
+#define ERROR_DUP_DOMAINNAME 1221
+#define ERROR_NO_NETWORK 1222
+#define ERROR_CANCELLED 1223
+#define ERROR_USER_MAPPED_FILE 1224
+#define ERROR_CONNECTION_REFUSED 1225
+#define ERROR_GRACEFUL_DISCONNECT 1226
+#define ERROR_ADDRESS_ALREADY_ASSOCIATED 1227
+#define ERROR_ADDRESS_NOT_ASSOCIATED 1228
+#define ERROR_CONNECTION_INVALID 1229
+#define ERROR_CONNECTION_ACTIVE 1230
+#define ERROR_NETWORK_UNREACHABLE 1231
+#define ERROR_HOST_UNREACHABLE 1232
+#define ERROR_PROTOCOL_UNREACHABLE 1233
+#define ERROR_PORT_UNREACHABLE 1234
+#define ERROR_REQUEST_ABORTED 1235
+#define ERROR_CONNECTION_ABORTED 1236
+#define ERROR_RETRY 1237
+#define ERROR_CONNECTION_COUNT_LIMIT 1238
+#define ERROR_LOGIN_TIME_RESTRICTION 1239
+#define ERROR_LOGIN_WKSTA_RESTRICTION 1240
+#define ERROR_INCORRECT_ADDRESS 1241
+#define ERROR_ALREADY_REGISTERED 1242
+#define ERROR_SERVICE_NOT_FOUND 1243
+#define ERROR_NOT_AUTHENTICATED 1244
+#define ERROR_NOT_LOGGED_ON 1245
+#define ERROR_CONTINUE 1246
+#define ERROR_ALREADY_INITIALIZED 1247
+#define ERROR_NO_MORE_DEVICES 1248
+#define ERROR_NO_SUCH_SITE 1249
+#define ERROR_DOMAIN_CONTROLLER_EXISTS 1250
+#define ERROR_ONLY_IF_CONNECTED 1251
+#define ERROR_OVERRIDE_NOCHANGES 1252
+#define ERROR_BAD_USER_PROFILE 1253
+#define ERROR_NOT_SUPPORTED_ON_SBS 1254
+#define ERROR_SERVER_SHUTDOWN_IN_PROGRESS 1255
+#define ERROR_HOST_DOWN 1256
+#define ERROR_ACCESS_DISABLED_BY_POLICY 1260
+#define ERROR_REG_NAT_CONSUMPTION 1261
+#define ERROR_PKINIT_FAILURE 1263
+#define ERROR_SMARTCARD_SUBSYSTEM_FAILURE 1264
+#define ERROR_DOWNGRADE_DETECTED 1265
+#define ERROR_MACHINE_LOCKED 1271
+#define ERROR_CALLBACK_SUPPLIED_INVALID_DATA 1273
+#define ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED 1274
+#define ERROR_DRIVER_BLOCKED 1275
+#define ERROR_INVALID_IMPORT_OF_NON_DLL 1276
+#define ERROR_NOT_ALL_ASSIGNED 1300
+#define ERROR_SOME_NOT_MAPPED 1301
+#define ERROR_NO_QUOTAS_FOR_ACCOUNT 1302
+#define ERROR_LOCAL_USER_SESSION_KEY 1303
+#define ERROR_NULL_LM_PASSWORD 1304
+#define ERROR_UNKNOWN_REVISION 1305
+#define ERROR_REVISION_MISMATCH 1306
+#define ERROR_INVALID_OWNER 1307
+#define ERROR_INVALID_PRIMARY_GROUP 1308
+#define ERROR_NO_IMPERSONATION_TOKEN 1309
+#define ERROR_CANT_DISABLE_MANDATORY 1310
+#define ERROR_NO_LOGON_SERVERS 1311
+#define ERROR_NO_SUCH_LOGON_SESSION 1312
+#define ERROR_NO_SUCH_PRIVILEGE 1313
+#define ERROR_PRIVILEGE_NOT_HELD 1314
+#define ERROR_INVALID_ACCOUNT_NAME 1315
+#define ERROR_USER_EXISTS 1316
+#define ERROR_NO_SUCH_USER 1317
+#define ERROR_GROUP_EXISTS 1318
+#define ERROR_NO_SUCH_GROUP 1319
+#define ERROR_MEMBER_IN_GROUP 1320
+#define ERROR_MEMBER_NOT_IN_GROUP 1321
+#define ERROR_LAST_ADMIN 1322
+#define ERROR_WRONG_PASSWORD 1323
+#define ERROR_ILL_FORMED_PASSWORD 1324
+#define ERROR_PASSWORD_RESTRICTION 1325
+#define ERROR_LOGON_FAILURE 1326
+#define ERROR_ACCOUNT_RESTRICTION 1327
+#define ERROR_INVALID_LOGON_HOURS 1328
+#define ERROR_INVALID_WORKSTATION 1329
+#define ERROR_PASSWORD_EXPIRED 1330
+#define ERROR_ACCOUNT_DISABLED 1331
+#define ERROR_NONE_MAPPED 1332
+#define ERROR_TOO_MANY_LUIDS_REQUESTED 1333
+#define ERROR_LUIDS_EXHAUSTED 1334
+#define ERROR_INVALID_SUB_AUTHORITY 1335
+#define ERROR_INVALID_ACL 1336
+#define ERROR_INVALID_SID 1337
+#define ERROR_INVALID_SECURITY_DESCR 1338
+#define ERROR_BAD_INHERITANCE_ACL 1340
+#define ERROR_SERVER_DISABLED 1341
+#define ERROR_SERVER_NOT_DISABLED 1342
+#define ERROR_INVALID_ID_AUTHORITY 1343
+#define ERROR_ALLOTTED_SPACE_EXCEEDED 1344
+#define ERROR_INVALID_GROUP_ATTRIBUTES 1345
+#define ERROR_BAD_IMPERSONATION_LEVEL 1346
+#define ERROR_CANT_OPEN_ANONYMOUS 1347
+#define ERROR_BAD_VALIDATION_CLASS 1348
+#define ERROR_BAD_TOKEN_TYPE 1349
+#define ERROR_NO_SECURITY_ON_OBJECT 1350
+#define ERROR_CANT_ACCESS_DOMAIN_INFO 1351
+#define ERROR_INVALID_SERVER_STATE 1352
+#define ERROR_INVALID_DOMAIN_STATE 1353
+#define ERROR_INVALID_DOMAIN_ROLE 1354
+#define ERROR_NO_SUCH_DOMAIN 1355
+#define ERROR_DOMAIN_EXISTS 1356
+#define ERROR_DOMAIN_LIMIT_EXCEEDED 1357
+#define ERROR_INTERNAL_DB_CORRUPTION 1358
+#define ERROR_INTERNAL_ERROR 1359
+#define ERROR_GENERIC_NOT_MAPPED 1360
+#define ERROR_BAD_DESCRIPTOR_FORMAT 1361
+#define ERROR_NOT_LOGON_PROCESS 1362
+#define ERROR_LOGON_SESSION_EXISTS 1363
+#define ERROR_NO_SUCH_PACKAGE 1364
+#define ERROR_BAD_LOGON_SESSION_STATE 1365
+#define ERROR_LOGON_SESSION_COLLISION 1366
+#define ERROR_INVALID_LOGON_TYPE 1367
+#define ERROR_CANNOT_IMPERSONATE 1368
+#define ERROR_RXACT_INVALID_STATE 1369
+#define ERROR_RXACT_COMMIT_FAILURE 1370
+#define ERROR_SPECIAL_ACCOUNT 1371
+#define ERROR_SPECIAL_GROUP 1372
+#define ERROR_SPECIAL_USER 1373
+#define ERROR_MEMBERS_PRIMARY_GROUP 1374
+#define ERROR_TOKEN_ALREADY_IN_USE 1375
+#define ERROR_NO_SUCH_ALIAS 1376
+#define ERROR_MEMBER_NOT_IN_ALIAS 1377
+#define ERROR_MEMBER_IN_ALIAS 1378
+#define ERROR_ALIAS_EXISTS 1379
+#define ERROR_LOGON_NOT_GRANTED 1380
+#define ERROR_TOO_MANY_SECRETS 1381
+#define ERROR_SECRET_TOO_LONG 1382
+#define ERROR_INTERNAL_DB_ERROR 1383
+#define ERROR_TOO_MANY_CONTEXT_IDS 1384
+#define ERROR_LOGON_TYPE_NOT_GRANTED 1385
+#define ERROR_NT_CROSS_ENCRYPTION_REQUIRED 1386
+#define ERROR_NO_SUCH_MEMBER 1387
+#define ERROR_INVALID_MEMBER 1388
+#define ERROR_TOO_MANY_SIDS 1389
+#define ERROR_LM_CROSS_ENCRYPTION_REQUIRED 1390
+#define ERROR_NO_INHERITANCE 1391
+#define ERROR_FILE_CORRUPT 1392
+#define ERROR_DISK_CORRUPT 1393
+#define ERROR_NO_USER_SESSION_KEY 1394
+#define ERROR_LICENSE_QUOTA_EXCEEDED 1395
+#define ERROR_WRONG_TARGET_NAME 1396
+#define ERROR_MUTUAL_AUTH_FAILED 1397
+#define ERROR_TIME_SKEW 1398
+#define ERROR_CURRENT_DOMAIN_NOT_ALLOWED 1399
+#define ERROR_INVALID_WINDOW_HANDLE 1400
+#define ERROR_INVALID_MENU_HANDLE 1401
+#define ERROR_INVALID_CURSOR_HANDLE 1402
+#define ERROR_INVALID_ACCEL_HANDLE 1403
+#define ERROR_INVALID_HOOK_HANDLE 1404
+#define ERROR_INVALID_DWP_HANDLE 1405
+#define ERROR_TLW_WITH_WSCHILD 1406
+#define ERROR_CANNOT_FIND_WND_CLASS 1407
+#define ERROR_WINDOW_OF_OTHER_THREAD 1408
+#define ERROR_HOTKEY_ALREADY_REGISTERED 1409
+#define ERROR_CLASS_ALREADY_EXISTS 1410
+#define ERROR_CLASS_DOES_NOT_EXIST 1411
+#define ERROR_CLASS_HAS_WINDOWS 1412
+#define ERROR_INVALID_INDEX 1413
+#define ERROR_INVALID_ICON_HANDLE 1414
+#define ERROR_PRIVATE_DIALOG_INDEX 1415
+#define ERROR_LISTBOX_ID_NOT_FOUND 1416
+#define ERROR_NO_WILDCARD_CHARACTERS 1417
+#define ERROR_CLIPBOARD_NOT_OPEN 1418
+#define ERROR_HOTKEY_NOT_REGISTERED 1419
+#define ERROR_WINDOW_NOT_DIALOG 1420
+#define ERROR_CONTROL_ID_NOT_FOUND 1421
+#define ERROR_INVALID_COMBOBOX_MESSAGE 1422
+#define ERROR_WINDOW_NOT_COMBOBOX 1423
+#define ERROR_INVALID_EDIT_HEIGHT 1424
+#define ERROR_DC_NOT_FOUND 1425
+#define ERROR_INVALID_HOOK_FILTER 1426
+#define ERROR_INVALID_FILTER_PROC 1427
+#define ERROR_HOOK_NEEDS_HMOD 1428
+#define ERROR_GLOBAL_ONLY_HOOK 1429
+#define ERROR_JOURNAL_HOOK_SET 1430
+#define ERROR_HOOK_NOT_INSTALLED 1431
+#define ERROR_INVALID_LB_MESSAGE 1432
+#define ERROR_SETCOUNT_ON_BAD_LB 1433
+#define ERROR_LB_WITHOUT_TABSTOPS 1434
+#define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD 1435
+#define ERROR_CHILD_WINDOW_MENU 1436
+#define ERROR_NO_SYSTEM_MENU 1437
+#define ERROR_INVALID_MSGBOX_STYLE 1438
+#define ERROR_INVALID_SPI_VALUE 1439
+#define ERROR_SCREEN_ALREADY_LOCKED 1440
+#define ERROR_HWNDS_HAVE_DIFF_PARENT 1441
+#define ERROR_NOT_CHILD_WINDOW 1442
+#define ERROR_INVALID_GW_COMMAND 1443
+#define ERROR_INVALID_THREAD_ID 1444
+#define ERROR_NON_MDICHILD_WINDOW 1445
+#define ERROR_POPUP_ALREADY_ACTIVE 1446
+#define ERROR_NO_SCROLLBARS 1447
+#define ERROR_INVALID_SCROLLBAR_RANGE 1448
+#define ERROR_INVALID_SHOWWIN_COMMAND 1449
+#define ERROR_NO_SYSTEM_RESOURCES 1450
+#define ERROR_NONPAGED_SYSTEM_RESOURCES 1451
+#define ERROR_PAGED_SYSTEM_RESOURCES 1452
+#define ERROR_WORKING_SET_QUOTA 1453
+#define ERROR_PAGEFILE_QUOTA 1454
+#define ERROR_COMMITMENT_LIMIT 1455
+#define ERROR_MENU_ITEM_NOT_FOUND 1456
+#define ERROR_INVALID_KEYBOARD_HANDLE 1457
+#define ERROR_HOOK_TYPE_NOT_ALLOWED 1458
+#define ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION 1459
+#define ERROR_TIMEOUT 1460
+#define ERROR_INVALID_MONITOR_HANDLE 1461
+#define ERROR_INCORRECT_SIZE 1462
+#define ERROR_SYMLINK_CLASS_DISABLED 1463
+#define ERROR_SYMLINK_NOT_SUPPORTED 1464
+#define ERROR_XML_PARSE_ERROR 1465
+#define ERROR_XMLDSIG_ERROR 1466
+#define ERROR_RESTART_APPLICATION 1467
+#define ERROR_WRONG_COMPARTMENT 1468
+#define ERROR_AUTHIP_FAILURE 1469
+#define ERROR_NO_NVRAM_RESOURCES 1470
+#define ERROR_EVENTLOG_FILE_CORRUPT 1500
+#define ERROR_EVENTLOG_CANT_START 1501
+#define ERROR_LOG_FILE_FULL 1502
+#define ERROR_EVENTLOG_FILE_CHANGED 1503
+#define ERROR_INVALID_TASK_NAME 1550
+#define ERROR_INVALID_TASK_INDEX 1551
+#define ERROR_THREAD_ALREADY_IN_TASK 1552
+#define ERROR_INSTALL_SERVICE_FAILURE 1601
+#define ERROR_INSTALL_USEREXIT 1602
+#define ERROR_INSTALL_FAILURE 1603
+#define ERROR_INSTALL_SUSPEND 1604
+#define ERROR_UNKNOWN_PRODUCT 1605
+#define ERROR_UNKNOWN_FEATURE 1606
+#define ERROR_UNKNOWN_COMPONENT 1607
+#define ERROR_UNKNOWN_PROPERTY 1608
+#define ERROR_INVALID_HANDLE_STATE 1609
+#define ERROR_BAD_CONFIGURATION 1610
+#define ERROR_INDEX_ABSENT 1611
+#define ERROR_INSTALL_SOURCE_ABSENT 1612
+#define ERROR_INSTALL_PACKAGE_VERSION 1613
+#define ERROR_PRODUCT_UNINSTALLED 1614
+#define ERROR_BAD_QUERY_SYNTAX 1615
+#define ERROR_INVALID_FIELD 1616
+#define ERROR_DEVICE_REMOVED 1617
+#define ERROR_INSTALL_ALREADY_RUNNING 1618
+#define ERROR_INSTALL_PACKAGE_OPEN_FAILED 1619
+#define ERROR_INSTALL_PACKAGE_INVALID 1620
+#define ERROR_INSTALL_UI_FAILURE 1621
+#define ERROR_INSTALL_LOG_FAILURE 1622
+#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623
+#define ERROR_INSTALL_TRANSFORM_FAILURE 1624
+#define ERROR_INSTALL_PACKAGE_REJECTED 1625
+#define ERROR_FUNCTION_NOT_CALLED 1626
+#define ERROR_FUNCTION_FAILED 1627
+#define ERROR_INVALID_TABLE 1628
+#define ERROR_DATATYPE_MISMATCH 1629
+#define ERROR_UNSUPPORTED_TYPE 1630
+#define ERROR_CREATE_FAILED 1631
+#define ERROR_INSTALL_TEMP_UNWRITABLE 1632
+#define ERROR_INSTALL_PLATFORM_UNSUPPORTED 1633
+#define ERROR_INSTALL_NOTUSED 1634
+#define ERROR_PATCH_PACKAGE_OPEN_FAILED 1635
+#define ERROR_PATCH_PACKAGE_INVALID 1636
+#define ERROR_PATCH_PACKAGE_UNSUPPORTED 1637
+#define ERROR_PRODUCT_VERSION 1638
+#define ERROR_INVALID_COMMAND_LINE 1639
+#define ERROR_INSTALL_REMOTE_DISALLOWED 1640
+#define ERROR_SUCCESS_REBOOT_INITIATED 1641
+#define ERROR_PATCH_TARGET_NOT_FOUND 1642
+#define ERROR_PATCH_PACKAGE_REJECTED 1643
+#define ERROR_INSTALL_TRANSFORM_REJECTED 1644
+#define ERROR_INSTALL_REMOTE_PROHIBITED 1645
+#define ERROR_PATCH_REMOVAL_UNSUPPORTED 1646
+#define ERROR_UNKNOWN_PATCH 1647
+#define ERROR_PATCH_NO_SEQUENCE 1648
+#define ERROR_PATCH_REMOVAL_DISALLOWED 1649
+#define ERROR_INVALID_PATCH_XML 1650
+#define ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT 1651
+#define ERROR_INSTALL_SERVICE_SAFEBOOT 1652
+#define RPC_S_INVALID_STRING_BINDING 1700
+#define RPC_S_WRONG_KIND_OF_BINDING 1701
+#define RPC_S_INVALID_BINDING 1702
+#define RPC_S_PROTSEQ_NOT_SUPPORTED 1703
+#define RPC_S_INVALID_RPC_PROTSEQ 1704
+#define RPC_S_INVALID_STRING_UUID 1705
+#define RPC_S_INVALID_ENDPOINT_FORMAT 1706
+#define RPC_S_INVALID_NET_ADDR 1707
+#define RPC_S_NO_ENDPOINT_FOUND 1708
+#define RPC_S_INVALID_TIMEOUT 1709
+#define RPC_S_OBJECT_NOT_FOUND 1710
+#define RPC_S_ALREADY_REGISTERED 1711
+#define RPC_S_TYPE_ALREADY_REGISTERED 1712
+#define RPC_S_ALREADY_LISTENING 1713
+#define RPC_S_NO_PROTSEQS_REGISTERED 1714
+#define RPC_S_NOT_LISTENING 1715
+#define RPC_S_UNKNOWN_MGR_TYPE 1716
+#define RPC_S_UNKNOWN_IF 1717
+#define RPC_S_NO_BINDINGS 1718
+#define RPC_S_NO_PROTSEQS 1719
+#define RPC_S_CANT_CREATE_ENDPOINT 1720
+#define RPC_S_OUT_OF_RESOURCES 1721
+#define RPC_S_SERVER_UNAVAILABLE 1722
+#define RPC_S_SERVER_TOO_BUSY 1723
+#define RPC_S_INVALID_NETWORK_OPTIONS 1724
+#define RPC_S_NO_CALL_ACTIVE 1725
+#define RPC_S_CALL_FAILED 1726
+#define RPC_S_CALL_FAILED_DNE 1727
+#define RPC_S_PROTOCOL_ERROR 1728
+#define RPC_S_UNSUPPORTED_TRANS_SYN 1730
+#define RPC_S_UNSUPPORTED_TYPE 1732
+#define RPC_S_INVALID_TAG 1733
+#define RPC_S_INVALID_BOUND 1734
+#define RPC_S_NO_ENTRY_NAME 1735
+#define RPC_S_INVALID_NAME_SYNTAX 1736
+#define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737
+#define RPC_S_UUID_NO_ADDRESS 1739
+#define RPC_S_DUPLICATE_ENDPOINT 1740
+#define RPC_S_UNKNOWN_AUTHN_TYPE 1741
+#define RPC_S_MAX_CALLS_TOO_SMALL 1742
+#define RPC_S_STRING_TOO_LONG 1743
+#define RPC_S_PROTSEQ_NOT_FOUND 1744
+#define RPC_S_PROCNUM_OUT_OF_RANGE 1745
+#define RPC_S_BINDING_HAS_NO_AUTH 1746
+#define RPC_S_UNKNOWN_AUTHN_SERVICE 1747
+#define RPC_S_UNKNOWN_AUTHN_LEVEL 1748
+#define RPC_S_INVALID_AUTH_IDENTITY 1749
+#define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750
+#define EPT_S_INVALID_ENTRY 1751
+#define EPT_S_CANT_PERFORM_OP 1752
+#define EPT_S_NOT_REGISTERED 1753
+#define RPC_S_NOTHING_TO_EXPORT 1754
+#define RPC_S_INCOMPLETE_NAME 1755
+#define RPC_S_INVALID_VERS_OPTION 1756
+#define RPC_S_NO_MORE_MEMBERS 1757
+#define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758
+#define RPC_S_INTERFACE_NOT_FOUND 1759
+#define RPC_S_ENTRY_ALREADY_EXISTS 1760
+#define RPC_S_ENTRY_NOT_FOUND 1761
+#define RPC_S_NAME_SERVICE_UNAVAILABLE 1762
+#define RPC_S_INVALID_NAF_ID 1763
+#define RPC_S_CANNOT_SUPPORT 1764
+#define RPC_S_NO_CONTEXT_AVAILABLE 1765
+#define RPC_S_INTERNAL_ERROR 1766
+#define RPC_S_ZERO_DIVIDE 1767
+#define RPC_S_ADDRESS_ERROR 1768
+#define RPC_S_FP_DIV_ZERO 1769
+#define RPC_S_FP_UNDERFLOW 1770
+#define RPC_S_FP_OVERFLOW 1771
+#define RPC_X_NO_MORE_ENTRIES 1772
+#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773
+#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774
+#define RPC_X_SS_IN_NULL_CONTEXT 1775
+#define RPC_X_SS_CONTEXT_DAMAGED 1777
+#define RPC_X_SS_HANDLES_MISMATCH 1778
+#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779
+#define RPC_X_NULL_REF_POINTER 1780
+#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781
+#define RPC_X_BYTE_COUNT_TOO_SMALL 1782
+#define RPC_X_BAD_STUB_DATA 1783
+#define ERROR_INVALID_USER_BUFFER 1784
+#define ERROR_UNRECOGNIZED_MEDIA 1785
+#define ERROR_NO_TRUST_LSA_SECRET 1786
+#define ERROR_NO_TRUST_SAM_ACCOUNT 1787
+#define ERROR_TRUSTED_DOMAIN_FAILURE 1788
+#define ERROR_TRUSTED_RELATIONSHIP_FAILURE 1789
+#define ERROR_TRUST_FAILURE 1790
+#define RPC_S_CALL_IN_PROGRESS 1791
+#define ERROR_NETLOGON_NOT_STARTED 1792
+#define ERROR_ACCOUNT_EXPIRED 1793
+#define ERROR_REDIRECTOR_HAS_OPEN_HANDLES 1794
+#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795
+#define ERROR_UNKNOWN_PORT 1796
+#define ERROR_UNKNOWN_PRINTER_DRIVER 1797
+#define ERROR_UNKNOWN_PRINTPROCESSOR 1798
+#define ERROR_INVALID_SEPARATOR_FILE 1799
+#define ERROR_INVALID_PRIORITY 1800
+#define ERROR_INVALID_PRINTER_NAME 1801
+#define ERROR_PRINTER_ALREADY_EXISTS 1802
+#define ERROR_INVALID_PRINTER_COMMAND 1803
+#define ERROR_INVALID_DATATYPE 1804
+#define ERROR_INVALID_ENVIRONMENT 1805
+#define RPC_S_NO_MORE_BINDINGS 1806
+#define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 1807
+#define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808
+#define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 1809
+#define ERROR_DOMAIN_TRUST_INCONSISTENT 1810
+#define ERROR_SERVER_HAS_OPEN_HANDLES 1811
+#define ERROR_RESOURCE_DATA_NOT_FOUND 1812
+#define ERROR_RESOURCE_TYPE_NOT_FOUND 1813
+#define ERROR_RESOURCE_NAME_NOT_FOUND 1814
+#define ERROR_RESOURCE_LANG_NOT_FOUND 1815
+#define ERROR_NOT_ENOUGH_QUOTA 1816
+#define RPC_S_NO_INTERFACES 1817
+#define RPC_S_CALL_CANCELLED 1818
+#define RPC_S_BINDING_INCOMPLETE 1819
+#define RPC_S_COMM_FAILURE 1820
+#define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821
+#define RPC_S_NO_PRINC_NAME 1822
+#define RPC_S_NOT_RPC_ERROR 1823
+#define RPC_S_UUID_LOCAL_ONLY 1824
+#define RPC_S_SEC_PKG_ERROR 1825
+#define RPC_S_NOT_CANCELLED 1826
+#define RPC_X_INVALID_ES_ACTION 1827
+#define RPC_X_WRONG_ES_VERSION 1828
+#define RPC_X_WRONG_STUB_VERSION 1829
+#define RPC_X_INVALID_PIPE_OBJECT 1830
+#define RPC_X_WRONG_PIPE_ORDER 1831
+#define RPC_X_WRONG_PIPE_VERSION 1832
+#define RPC_S_GROUP_MEMBER_NOT_FOUND 1898
+#define EPT_S_CANT_CREATE 1899
+#define RPC_S_INVALID_OBJECT 1900
+#define ERROR_INVALID_TIME 1901
+#define ERROR_INVALID_FORM_NAME 1902
+#define ERROR_INVALID_FORM_SIZE 1903
+#define ERROR_ALREADY_WAITING 1904
+#define ERROR_PRINTER_DELETED 1905
+#define ERROR_INVALID_PRINTER_STATE 1906
+#define ERROR_PASSWORD_MUST_CHANGE 1907
+#define ERROR_DOMAIN_CONTROLLER_NOT_FOUND 1908
+#define ERROR_ACCOUNT_LOCKED_OUT 1909
+#define OR_INVALID_OXID 1910
+#define OR_INVALID_OID 1911
+#define OR_INVALID_SET 1912
+#define RPC_S_SEND_INCOMPLETE 1913
+#define RPC_S_INVALID_ASYNC_HANDLE 1914
+#define RPC_S_INVALID_ASYNC_CALL 1915
+#define RPC_X_PIPE_CLOSED 1916
+#define RPC_X_PIPE_DISCIPLINE_ERROR 1917
+#define RPC_X_PIPE_EMPTY 1918
+#define ERROR_NO_SITENAME 1919
+#define ERROR_CANT_ACCESS_FILE 1920
+#define ERROR_CANT_RESOLVE_FILENAME 1921
+#define RPC_S_ENTRY_TYPE_MISMATCH 1922
+#define RPC_S_NOT_ALL_OBJS_EXPORTED 1923
+#define RPC_S_INTERFACE_NOT_EXPORTED 1924
+#define RPC_S_PROFILE_NOT_ADDED 1925
+#define RPC_S_PRF_ELT_NOT_ADDED 1926
+#define RPC_S_PRF_ELT_NOT_REMOVED 1927
+#define RPC_S_GRP_ELT_NOT_ADDED 1928
+#define RPC_S_GRP_ELT_NOT_REMOVED 1929
+#define ERROR_KM_DRIVER_BLOCKED 1930
+#define ERROR_CONTEXT_EXPIRED 1931
+#define ERROR_PER_USER_TRUST_QUOTA_EXCEEDED 1932
+#define ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED 1933
+#define ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED 1934
+#define ERROR_AUTHENTICATION_FIREWALL_FAILED 1935
+#define ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED 1936
+#define ERROR_INVALID_PIXEL_FORMAT 2000
+#define ERROR_BAD_DRIVER 2001
+#define ERROR_INVALID_WINDOW_STYLE 2002
+#define ERROR_METAFILE_NOT_SUPPORTED 2003
+#define ERROR_TRANSFORM_NOT_SUPPORTED 2004
+#define ERROR_CLIPPING_NOT_SUPPORTED 2005
+#define ERROR_INVALID_CMM 2010
+#define ERROR_INVALID_PROFILE 2011
+#define ERROR_TAG_NOT_FOUND 2012
+#define ERROR_TAG_NOT_PRESENT 2013
+#define ERROR_DUPLICATE_TAG 2014
+#define ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE 2015
+#define ERROR_PROFILE_NOT_FOUND 2016
+#define ERROR_INVALID_COLORSPACE 2017
+#define ERROR_ICM_NOT_ENABLED 2018
+#define ERROR_DELETING_ICM_XFORM 2019
+#define ERROR_INVALID_TRANSFORM 2020
+#define ERROR_COLORSPACE_MISMATCH 2021
+#define ERROR_INVALID_COLORINDEX 2022
+#define ERROR_CONNECTED_OTHER_PASSWORD 2108
+#define ERROR_BAD_USERNAME 2202
+#define ERROR_NOT_CONNECTED 2250
+#define ERROR_OPEN_FILES 2401
+#define ERROR_ACTIVE_CONNECTIONS 2402
+#define ERROR_DEVICE_IN_USE 2404
+#define ERROR_UNKNOWN_PRINT_MONITOR 3000
+#define ERROR_PRINTER_DRIVER_IN_USE 3001
+#define ERROR_SPOOL_FILE_NOT_FOUND 3002
+#define ERROR_SPL_NO_STARTDOC 3003
+#define ERROR_SPL_NO_ADDJOB 3004
+#define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 3005
+#define ERROR_PRINT_MONITOR_ALREADY_INSTALLED 3006
+#define ERROR_INVALID_PRINT_MONITOR 3007
+#define ERROR_PRINT_MONITOR_IN_USE 3008
+#define ERROR_PRINTER_HAS_JOBS_QUEUED 3009
+#define ERROR_SUCCESS_REBOOT_REQUIRED 3010
+#define ERROR_SUCCESS_RESTART_REQUIRED 3011
+#define ERROR_PRINTER_NOT_FOUND 3012
+#define ERROR_PRINTER_DRIVER_WARNED 3013
+#define ERROR_PRINTER_DRIVER_BLOCKED 3014
+#define ERROR_REQUEST_PAUSED 3050
+#define ERROR_WINS_INTERNAL 4000
+#define ERROR_CAN_NOT_DEL_LOCAL_WINS 4001
+#define ERROR_STATIC_INIT 4002
+#define ERROR_INC_BACKUP 4003
+#define ERROR_FULL_BACKUP 4004
+#define ERROR_REC_NON_EXISTENT 4005
+#define ERROR_RPL_NOT_ALLOWED 4006
+#define ERROR_DHCP_ADDRESS_CONFLICT 4100
+#define ERROR_WMI_GUID_NOT_FOUND 4200
+#define ERROR_WMI_INSTANCE_NOT_FOUND 4201
+#define ERROR_WMI_ITEMID_NOT_FOUND 4202
+#define ERROR_WMI_TRY_AGAIN 4203
+#define ERROR_WMI_DP_NOT_FOUND 4204
+#define ERROR_WMI_UNRESOLVED_INSTANCE_REF 4205
+#define ERROR_WMI_ALREADY_ENABLED 4206
+#define ERROR_WMI_GUID_DISCONNECTED 4207
+#define ERROR_WMI_SERVER_UNAVAILABLE 4208
+#define ERROR_WMI_DP_FAILED 4209
+#define ERROR_WMI_INVALID_MOF 4210
+#define ERROR_WMI_INVALID_REGINFO 4211
+#define ERROR_WMI_ALREADY_DISABLED 4212
+#define ERROR_WMI_READ_ONLY 4213
+#define ERROR_WMI_SET_FAILURE 4214
+#define ERROR_INVALID_MEDIA 4300
+#define ERROR_INVALID_LIBRARY 4301
+#define ERROR_INVALID_MEDIA_POOL 4302
+#define ERROR_DRIVE_MEDIA_MISMATCH 4303
+#define ERROR_MEDIA_OFFLINE 4304
+#define ERROR_LIBRARY_OFFLINE 4305
+#define ERROR_EMPTY 4306
+#define ERROR_NOT_EMPTY 4307
+#define ERROR_MEDIA_UNAVAILABLE 4308
+#define ERROR_RESOURCE_DISABLED 4309
+#define ERROR_INVALID_CLEANER 4310
+#define ERROR_UNABLE_TO_CLEAN 4311
+#define ERROR_OBJECT_NOT_FOUND 4312
+#define ERROR_DATABASE_FAILURE 4313
+#define ERROR_DATABASE_FULL 4314
+#define ERROR_MEDIA_INCOMPATIBLE 4315
+#define ERROR_RESOURCE_NOT_PRESENT 4316
+#define ERROR_INVALID_OPERATION 4317
+#define ERROR_MEDIA_NOT_AVAILABLE 4318
+#define ERROR_DEVICE_NOT_AVAILABLE 4319
+#define ERROR_REQUEST_REFUSED 4320
+#define ERROR_INVALID_DRIVE_OBJECT 4321
+#define ERROR_LIBRARY_FULL 4322
+#define ERROR_MEDIUM_NOT_ACCESSIBLE 4323
+#define ERROR_UNABLE_TO_LOAD_MEDIUM 4324
+#define ERROR_UNABLE_TO_INVENTORY_DRIVE 4325
+#define ERROR_UNABLE_TO_INVENTORY_SLOT 4326
+#define ERROR_UNABLE_TO_INVENTORY_TRANSPORT 4327
+#define ERROR_TRANSPORT_FULL 4328
+#define ERROR_CONTROLLING_IEPORT 4329
+#define ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA 4330
+#define ERROR_CLEANER_SLOT_SET 4331
+#define ERROR_CLEANER_SLOT_NOT_SET 4332
+#define ERROR_CLEANER_CARTRIDGE_SPENT 4333
+#define ERROR_UNEXPECTED_OMID 4334
+#define ERROR_CANT_DELETE_LAST_ITEM 4335
+#define ERROR_MESSAGE_EXCEEDS_MAX_SIZE 4336
+#define ERROR_VOLUME_CONTAINS_SYS_FILES 4337
+#define ERROR_INDIGENOUS_TYPE 4338
+#define ERROR_NO_SUPPORTING_DRIVES 4339
+#define ERROR_CLEANER_CARTRIDGE_INSTALLED 4340
+#define ERROR_FILE_OFFLINE 4350
+#define ERROR_REMOTE_STORAGE_NOT_ACTIVE 4351
+#define ERROR_REMOTE_STORAGE_MEDIA_ERROR 4352
+#define ERROR_NOT_A_REPARSE_POINT 4390
+#define ERROR_REPARSE_ATTRIBUTE_CONFLICT 4391
+#define ERROR_INVALID_REPARSE_DATA 4392
+#define ERROR_REPARSE_TAG_INVALID 4393
+#define ERROR_REPARSE_TAG_MISMATCH 4394
+#define ERROR_VOLUME_NOT_SIS_ENABLED 4500
+#define ERROR_DEPENDENT_RESOURCE_EXISTS 5001
+#define ERROR_DEPENDENCY_NOT_FOUND 5002
+#define ERROR_DEPENDENCY_ALREADY_EXISTS 5003
+#define ERROR_RESOURCE_NOT_ONLINE 5004
+#define ERROR_HOST_NODE_NOT_AVAILABLE 5005
+#define ERROR_RESOURCE_NOT_AVAILABLE 5006
+#define ERROR_RESOURCE_NOT_FOUND 5007
+#define ERROR_SHUTDOWN_CLUSTER 5008
+#define ERROR_CANT_EVICT_ACTIVE_NODE 5009
+#define ERROR_OBJECT_ALREADY_EXISTS 5010
+#define ERROR_OBJECT_IN_LIST 5011
+#define ERROR_GROUP_NOT_AVAILABLE 5012
+#define ERROR_GROUP_NOT_FOUND 5013
+#define ERROR_GROUP_NOT_ONLINE 5014
+#define ERROR_HOST_NODE_NOT_RESOURCE_OWNER 5015
+#define ERROR_HOST_NODE_NOT_GROUP_OWNER 5016
+#define ERROR_RESMON_CREATE_FAILED 5017
+#define ERROR_RESMON_ONLINE_FAILED 5018
+#define ERROR_RESOURCE_ONLINE 5019
+#define ERROR_QUORUM_RESOURCE 5020
+#define ERROR_NOT_QUORUM_CAPABLE 5021
+#define ERROR_CLUSTER_SHUTTING_DOWN 5022
+#define ERROR_INVALID_STATE 5023
+#define ERROR_RESOURCE_PROPERTIES_STORED 5024
+#define ERROR_NOT_QUORUM_CLASS 5025
+#define ERROR_CORE_RESOURCE 5026
+#define ERROR_QUORUM_RESOURCE_ONLINE_FAILED 5027
+#define ERROR_QUORUMLOG_OPEN_FAILED 5028
+#define ERROR_CLUSTERLOG_CORRUPT 5029
+#define ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE 5030
+#define ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE 5031
+#define ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND 5032
+#define ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE 5033
+#define ERROR_QUORUM_OWNER_ALIVE 5034
+#define ERROR_NETWORK_NOT_AVAILABLE 5035
+#define ERROR_NODE_NOT_AVAILABLE 5036
+#define ERROR_ALL_NODES_NOT_AVAILABLE 5037
+#define ERROR_RESOURCE_FAILED 5038
+#define ERROR_CLUSTER_INVALID_NODE 5039
+#define ERROR_CLUSTER_NODE_EXISTS 5040
+#define ERROR_CLUSTER_JOIN_IN_PROGRESS 5041
+#define ERROR_CLUSTER_NODE_NOT_FOUND 5042
+#define ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND 5043
+#define ERROR_CLUSTER_NETWORK_EXISTS 5044
+#define ERROR_CLUSTER_NETWORK_NOT_FOUND 5045
+#define ERROR_CLUSTER_NETINTERFACE_EXISTS 5046
+#define ERROR_CLUSTER_NETINTERFACE_NOT_FOUND 5047
+#define ERROR_CLUSTER_INVALID_REQUEST 5048
+#define ERROR_CLUSTER_INVALID_NETWORK_PROVIDER 5049
+#define ERROR_CLUSTER_NODE_DOWN 5050
+#define ERROR_CLUSTER_NODE_UNREACHABLE 5051
+#define ERROR_CLUSTER_NODE_NOT_MEMBER 5052
+#define ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS 5053
+#define ERROR_CLUSTER_INVALID_NETWORK 5054
+#define ERROR_CLUSTER_NODE_UP 5056
+#define ERROR_CLUSTER_IPADDR_IN_USE 5057
+#define ERROR_CLUSTER_NODE_NOT_PAUSED 5058
+#define ERROR_CLUSTER_NO_SECURITY_CONTEXT 5059
+#define ERROR_CLUSTER_NETWORK_NOT_INTERNAL 5060
+#define ERROR_CLUSTER_NODE_ALREADY_UP 5061
+#define ERROR_CLUSTER_NODE_ALREADY_DOWN 5062
+#define ERROR_CLUSTER_NETWORK_ALREADY_ONLINE 5063
+#define ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE 5064
+#define ERROR_CLUSTER_NODE_ALREADY_MEMBER 5065
+#define ERROR_CLUSTER_LAST_INTERNAL_NETWORK 5066
+#define ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS 5067
+#define ERROR_INVALID_OPERATION_ON_QUORUM 5068
+#define ERROR_DEPENDENCY_NOT_ALLOWED 5069
+#define ERROR_CLUSTER_NODE_PAUSED 5070
+#define ERROR_NODE_CANT_HOST_RESOURCE 5071
+#define ERROR_CLUSTER_NODE_NOT_READY 5072
+#define ERROR_CLUSTER_NODE_SHUTTING_DOWN 5073
+#define ERROR_CLUSTER_JOIN_ABORTED 5074
+#define ERROR_CLUSTER_INCOMPATIBLE_VERSIONS 5075
+#define ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED 5076
+#define ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED 5077
+#define ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND 5078
+#define ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED 5079
+#define ERROR_CLUSTER_RESNAME_NOT_FOUND 5080
+#define ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED 5081
+#define ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST 5082
+#define ERROR_CLUSTER_DATABASE_SEQMISMATCH 5083
+#define ERROR_RESMON_INVALID_STATE 5084
+#define ERROR_CLUSTER_GUM_NOT_LOCKER 5085
+#define ERROR_QUORUM_DISK_NOT_FOUND 5086
+#define ERROR_DATABASE_BACKUP_CORRUPT 5087
+#define ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT 5088
+#define ERROR_RESOURCE_PROPERTY_UNCHANGEABLE 5089
+#define ERROR_ENCRYPTION_FAILED 6000
+#define ERROR_DECRYPTION_FAILED 6001
+#define ERROR_FILE_ENCRYPTED 6002
+#define ERROR_NO_RECOVERY_POLICY 6003
+#define ERROR_NO_EFS 6004
+#define ERROR_WRONG_EFS 6005
+#define ERROR_NO_USER_KEYS 6006
+#define ERROR_FILE_NOT_ENCRYPTED 6007
+#define ERROR_NOT_EXPORT_FORMAT 6008
+#define ERROR_FILE_READ_ONLY 6009
+#define ERROR_DIR_EFS_DISALLOWED 6010
+#define ERROR_EFS_SERVER_NOT_TRUSTED 6011
+#define ERROR_EFS_ALG_BLOB_TOO_BIG 6013
+#define ERROR_NO_BROWSER_SERVERS_FOUND 6118
+#define SCHED_E_SERVICE_NOT_LOCALSYSTEM 6200
+#define ERROR_CTX_WINSTATION_NAME_INVALID 7001
+#define ERROR_CTX_INVALID_PD 7002
+#define ERROR_CTX_PD_NOT_FOUND 7003
+#define ERROR_CTX_WD_NOT_FOUND 7004
+#define ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY 7005
+#define ERROR_CTX_SERVICE_NAME_COLLISION 7006
+#define ERROR_CTX_CLOSE_PENDING 7007
+#define ERROR_CTX_NO_OUTBUF 7008
+#define ERROR_CTX_MODEM_INF_NOT_FOUND 7009
+#define ERROR_CTX_INVALID_MODEMNAME 7010
+#define ERROR_CTX_MODEM_RESPONSE_ERROR 7011
+#define ERROR_CTX_MODEM_RESPONSE_TIMEOUT 7012
+#define ERROR_CTX_MODEM_RESPONSE_NO_CARRIER 7013
+#define ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE 7014
+#define ERROR_CTX_MODEM_RESPONSE_BUSY 7015
+#define ERROR_CTX_MODEM_RESPONSE_VOICE 7016
+#define ERROR_CTX_TD_ERROR 7017
+#define ERROR_CTX_WINSTATION_NOT_FOUND 7022
+#define ERROR_CTX_WINSTATION_ALREADY_EXISTS 7023
+#define ERROR_CTX_WINSTATION_BUSY 7024
+#define ERROR_CTX_BAD_VIDEO_MODE 7025
+#define ERROR_CTX_GRAPHICS_INVALID 7035
+#define ERROR_CTX_LOGON_DISABLED 7037
+#define ERROR_CTX_NOT_CONSOLE 7038
+#define ERROR_CTX_CLIENT_QUERY_TIMEOUT 7040
+#define ERROR_CTX_CONSOLE_DISCONNECT 7041
+#define ERROR_CTX_CONSOLE_CONNECT 7042
+#define ERROR_CTX_SHADOW_DENIED 7044
+#define ERROR_CTX_WINSTATION_ACCESS_DENIED 7045
+#define ERROR_CTX_INVALID_WD 7049
+#define ERROR_CTX_SHADOW_INVALID 7050
+#define ERROR_CTX_SHADOW_DISABLED 7051
+#define ERROR_CTX_CLIENT_LICENSE_IN_USE 7052
+#define ERROR_CTX_CLIENT_LICENSE_NOT_SET 7053
+#define ERROR_CTX_LICENSE_NOT_AVAILABLE 7054
+#define ERROR_CTX_LICENSE_CLIENT_INVALID 7055
+#define ERROR_CTX_LICENSE_EXPIRED 7056
+#define ERROR_CTX_SHADOW_NOT_RUNNING 7057
+#define ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE 7058
+#define FRS_ERR_INVALID_API_SEQUENCE 8001
+#define FRS_ERR_STARTING_SERVICE 8002
+#define FRS_ERR_STOPPING_SERVICE 8003
+#define FRS_ERR_INTERNAL_API 8004
+#define FRS_ERR_INTERNAL 8005
+#define FRS_ERR_SERVICE_COMM 8006
+#define FRS_ERR_INSUFFICIENT_PRIV 8007
+#define FRS_ERR_AUTHENTICATION 8008
+#define FRS_ERR_PARENT_INSUFFICIENT_PRIV 8009
+#define FRS_ERR_PARENT_AUTHENTICATION 8010
+#define FRS_ERR_CHILD_TO_PARENT_COMM 8011
+#define FRS_ERR_PARENT_TO_CHILD_COMM 8012
+#define FRS_ERR_SYSVOL_POPULATE 8013
+#define FRS_ERR_SYSVOL_POPULATE_TIMEOUT 8014
+#define FRS_ERR_SYSVOL_IS_BUSY 8015
+#define FRS_ERR_SYSVOL_DEMOTE 8016
+#define FRS_ERR_INVALID_SERVICE_PARAMETER 8017
+#define ERROR_DS_NOT_INSTALLED 8200
+#define ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY 8201
+#define ERROR_DS_NO_ATTRIBUTE_OR_VALUE 8202
+#define ERROR_DS_INVALID_ATTRIBUTE_SYNTAX 8203
+#define ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED 8204
+#define ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS 8205
+#define ERROR_DS_BUSY 8206
+#define ERROR_DS_UNAVAILABLE 8207
+#define ERROR_DS_NO_RIDS_ALLOCATED 8208
+#define ERROR_DS_NO_MORE_RIDS 8209
+#define ERROR_DS_INCORRECT_ROLE_OWNER 8210
+#define ERROR_DS_RIDMGR_INIT_ERROR 8211
+#define ERROR_DS_OBJ_CLASS_VIOLATION 8212
+#define ERROR_DS_CANT_ON_NON_LEAF 8213
+#define ERROR_DS_CANT_ON_RDN 8214
+#define ERROR_DS_CANT_MOD_OBJ_CLASS 8215
+#define ERROR_DS_CROSS_DOM_MOVE_ERROR 8216
+#define ERROR_DS_GC_NOT_AVAILABLE 8217
+#define ERROR_SHARED_POLICY 8218
+#define ERROR_POLICY_OBJECT_NOT_FOUND 8219
+#define ERROR_POLICY_ONLY_IN_DS 8220
+#define ERROR_PROMOTION_ACTIVE 8221
+#define ERROR_NO_PROMOTION_ACTIVE 8222
+#define ERROR_DS_OPERATIONS_ERROR 8224
+#define ERROR_DS_PROTOCOL_ERROR 8225
+#define ERROR_DS_TIMELIMIT_EXCEEDED 8226
+#define ERROR_DS_SIZELIMIT_EXCEEDED 8227
+#define ERROR_DS_ADMIN_LIMIT_EXCEEDED 8228
+#define ERROR_DS_COMPARE_FALSE 8229
+#define ERROR_DS_COMPARE_TRUE 8230
+#define ERROR_DS_AUTH_METHOD_NOT_SUPPORTED 8231
+#define ERROR_DS_STRONG_AUTH_REQUIRED 8232
+#define ERROR_DS_INAPPROPRIATE_AUTH 8233
+#define ERROR_DS_AUTH_UNKNOWN 8234
+#define ERROR_DS_REFERRAL 8235
+#define ERROR_DS_UNAVAILABLE_CRIT_EXTENSION 8236
+#define ERROR_DS_CONFIDENTIALITY_REQUIRED 8237
+#define ERROR_DS_INAPPROPRIATE_MATCHING 8238
+#define ERROR_DS_CONSTRAINT_VIOLATION 8239
+#define ERROR_DS_NO_SUCH_OBJECT 8240
+#define ERROR_DS_ALIAS_PROBLEM 8241
+#define ERROR_DS_INVALID_DN_SYNTAX 8242
+#define ERROR_DS_IS_LEAF 8243
+#define ERROR_DS_ALIAS_DEREF_PROBLEM 8244
+#define ERROR_DS_UNWILLING_TO_PERFORM 8245
+#define ERROR_DS_LOOP_DETECT 8246
+#define ERROR_DS_NAMING_VIOLATION 8247
+#define ERROR_DS_OBJECT_RESULTS_TOO_LARGE 8248
+#define ERROR_DS_AFFECTS_MULTIPLE_DSAS 8249
+#define ERROR_DS_SERVER_DOWN 8250
+#define ERROR_DS_LOCAL_ERROR 8251
+#define ERROR_DS_ENCODING_ERROR 8252
+#define ERROR_DS_DECODING_ERROR 8253
+#define ERROR_DS_FILTER_UNKNOWN 8254
+#define ERROR_DS_PARAM_ERROR 8255
+#define ERROR_DS_NOT_SUPPORTED 8256
+#define ERROR_DS_NO_RESULTS_RETURNED 8257
+#define ERROR_DS_CONTROL_NOT_FOUND 8258
+#define ERROR_DS_CLIENT_LOOP 8259
+#define ERROR_DS_REFERRAL_LIMIT_EXCEEDED 8260
+#define ERROR_DS_ROOT_MUST_BE_NC 8301
+#define ERROR_DS_ADD_REPLICA_INHIBITED 8302
+#define ERROR_DS_ATT_NOT_DEF_IN_SCHEMA 8303
+#define ERROR_DS_MAX_OBJ_SIZE_EXCEEDED 8304
+#define ERROR_DS_OBJ_STRING_NAME_EXISTS 8305
+#define ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA 8306
+#define ERROR_DS_RDN_DOESNT_MATCH_SCHEMA 8307
+#define ERROR_DS_NO_REQUESTED_ATTS_FOUND 8308
+#define ERROR_DS_USER_BUFFER_TO_SMALL 8309
+#define ERROR_DS_ATT_IS_NOT_ON_OBJ 8310
+#define ERROR_DS_ILLEGAL_MOD_OPERATION 8311
+#define ERROR_DS_OBJ_TOO_LARGE 8312
+#define ERROR_DS_BAD_INSTANCE_TYPE 8313
+#define ERROR_DS_MASTERDSA_REQUIRED 8314
+#define ERROR_DS_OBJECT_CLASS_REQUIRED 8315
+#define ERROR_DS_MISSING_REQUIRED_ATT 8316
+#define ERROR_DS_ATT_NOT_DEF_FOR_CLASS 8317
+#define ERROR_DS_ATT_ALREADY_EXISTS 8318
+#define ERROR_DS_CANT_ADD_ATT_VALUES 8320
+#define ERROR_DS_SINGLE_VALUE_CONSTRAINT 8321
+#define ERROR_DS_RANGE_CONSTRAINT 8322
+#define ERROR_DS_ATT_VAL_ALREADY_EXISTS 8323
+#define ERROR_DS_CANT_REM_MISSING_ATT 8324
+#define ERROR_DS_CANT_REM_MISSING_ATT_VAL 8325
+#define ERROR_DS_ROOT_CANT_BE_SUBREF 8326
+#define ERROR_DS_NO_CHAINING 8327
+#define ERROR_DS_NO_CHAINED_EVAL 8328
+#define ERROR_DS_NO_PARENT_OBJECT 8329
+#define ERROR_DS_PARENT_IS_AN_ALIAS 8330
+#define ERROR_DS_CANT_MIX_MASTER_AND_REPS 8331
+#define ERROR_DS_CHILDREN_EXIST 8332
+#define ERROR_DS_OBJ_NOT_FOUND 8333
+#define ERROR_DS_ALIASED_OBJ_MISSING 8334
+#define ERROR_DS_BAD_NAME_SYNTAX 8335
+#define ERROR_DS_ALIAS_POINTS_TO_ALIAS 8336
+#define ERROR_DS_CANT_DEREF_ALIAS 8337
+#define ERROR_DS_OUT_OF_SCOPE 8338
+#define ERROR_DS_CANT_DELETE_DSA_OBJ 8340
+#define ERROR_DS_GENERIC_ERROR 8341
+#define ERROR_DS_DSA_MUST_BE_INT_MASTER 8342
+#define ERROR_DS_CLASS_NOT_DSA 8343
+#define ERROR_DS_INSUFF_ACCESS_RIGHTS 8344
+#define ERROR_DS_ILLEGAL_SUPERIOR 8345
+#define ERROR_DS_ATTRIBUTE_OWNED_BY_SAM 8346
+#define ERROR_DS_NAME_TOO_MANY_PARTS 8347
+#define ERROR_DS_NAME_TOO_LONG 8348
+#define ERROR_DS_NAME_VALUE_TOO_LONG 8349
+#define ERROR_DS_NAME_UNPARSEABLE 8350
+#define ERROR_DS_NAME_TYPE_UNKNOWN 8351
+#define ERROR_DS_NOT_AN_OBJECT 8352
+#define ERROR_DS_SEC_DESC_TOO_SHORT 8353
+#define ERROR_DS_SEC_DESC_INVALID 8354
+#define ERROR_DS_NO_DELETED_NAME 8355
+#define ERROR_DS_SUBREF_MUST_HAVE_PARENT 8356
+#define ERROR_DS_NCNAME_MUST_BE_NC 8357
+#define ERROR_DS_CANT_ADD_SYSTEM_ONLY 8358
+#define ERROR_DS_CLASS_MUST_BE_CONCRETE 8359
+#define ERROR_DS_INVALID_DMD 8360
+#define ERROR_DS_OBJ_GUID_EXISTS 8361
+#define ERROR_DS_NOT_ON_BACKLINK 8362
+#define ERROR_DS_NO_CROSSREF_FOR_NC 8363
+#define ERROR_DS_SHUTTING_DOWN 8364
+#define ERROR_DS_UNKNOWN_OPERATION 8365
+#define ERROR_DS_INVALID_ROLE_OWNER 8366
+#define ERROR_DS_COULDNT_CONTACT_FSMO 8367
+#define ERROR_DS_CROSS_NC_DN_RENAME 8368
+#define ERROR_DS_CANT_MOD_SYSTEM_ONLY 8369
+#define ERROR_DS_REPLICATOR_ONLY 8370
+#define ERROR_DS_OBJ_CLASS_NOT_DEFINED 8371
+#define ERROR_DS_OBJ_CLASS_NOT_SUBCLASS 8372
+#define ERROR_DS_NAME_REFERENCE_INVALID 8373
+#define ERROR_DS_CROSS_REF_EXISTS 8374
+#define ERROR_DS_CANT_DEL_MASTER_CROSSREF 8375
+#define ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD 8376
+#define ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX 8377
+#define ERROR_DS_DUP_RDN 8378
+#define ERROR_DS_DUP_OID 8379
+#define ERROR_DS_DUP_MAPI_ID 8380
+#define ERROR_DS_DUP_SCHEMA_ID_GUID 8381
+#define ERROR_DS_DUP_LDAP_DISPLAY_NAME 8382
+#define ERROR_DS_SEMANTIC_ATT_TEST 8383
+#define ERROR_DS_SYNTAX_MISMATCH 8384
+#define ERROR_DS_EXISTS_IN_MUST_HAVE 8385
+#define ERROR_DS_EXISTS_IN_MAY_HAVE 8386
+#define ERROR_DS_NONEXISTENT_MAY_HAVE 8387
+#define ERROR_DS_NONEXISTENT_MUST_HAVE 8388
+#define ERROR_DS_AUX_CLS_TEST_FAIL 8389
+#define ERROR_DS_NONEXISTENT_POSS_SUP 8390
+#define ERROR_DS_SUB_CLS_TEST_FAIL 8391
+#define ERROR_DS_BAD_RDN_ATT_ID_SYNTAX 8392
+#define ERROR_DS_EXISTS_IN_AUX_CLS 8393
+#define ERROR_DS_EXISTS_IN_SUB_CLS 8394
+#define ERROR_DS_EXISTS_IN_POSS_SUP 8395
+#define ERROR_DS_RECALCSCHEMA_FAILED 8396
+#define ERROR_DS_TREE_DELETE_NOT_FINISHED 8397
+#define ERROR_DS_CANT_DELETE 8398
+#define ERROR_DS_ATT_SCHEMA_REQ_ID 8399
+#define ERROR_DS_BAD_ATT_SCHEMA_SYNTAX 8400
+#define ERROR_DS_CANT_CACHE_ATT 8401
+#define ERROR_DS_CANT_CACHE_CLASS 8402
+#define ERROR_DS_CANT_REMOVE_ATT_CACHE 8403
+#define ERROR_DS_CANT_REMOVE_CLASS_CACHE 8404
+#define ERROR_DS_CANT_RETRIEVE_DN 8405
+#define ERROR_DS_MISSING_SUPREF 8406
+#define ERROR_DS_CANT_RETRIEVE_INSTANCE 8407
+#define ERROR_DS_CODE_INCONSISTENCY 8408
+#define ERROR_DS_DATABASE_ERROR 8409
+#define ERROR_DS_GOVERNSID_MISSING 8410
+#define ERROR_DS_MISSING_EXPECTED_ATT 8411
+#define ERROR_DS_NCNAME_MISSING_CR_REF 8412
+#define ERROR_DS_SECURITY_CHECKING_ERROR 8413
+#define ERROR_DS_SCHEMA_NOT_LOADED 8414
+#define ERROR_DS_SCHEMA_ALLOC_FAILED 8415
+#define ERROR_DS_ATT_SCHEMA_REQ_SYNTAX 8416
+#define ERROR_DS_GCVERIFY_ERROR 8417
+#define ERROR_DS_DRA_SCHEMA_MISMATCH 8418
+#define ERROR_DS_CANT_FIND_DSA_OBJ 8419
+#define ERROR_DS_CANT_FIND_EXPECTED_NC 8420
+#define ERROR_DS_CANT_FIND_NC_IN_CACHE 8421
+#define ERROR_DS_CANT_RETRIEVE_CHILD 8422
+#define ERROR_DS_SECURITY_ILLEGAL_MODIFY 8423
+#define ERROR_DS_CANT_REPLACE_HIDDEN_REC 8424
+#define ERROR_DS_BAD_HIERARCHY_FILE 8425
+#define ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED 8426
+#define ERROR_DS_CONFIG_PARAM_MISSING 8427
+#define ERROR_DS_COUNTING_AB_INDICES_FAILED 8428
+#define ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED 8429
+#define ERROR_DS_INTERNAL_FAILURE 8430
+#define ERROR_DS_UNKNOWN_ERROR 8431
+#define ERROR_DS_ROOT_REQUIRES_CLASS_TOP 8432
+#define ERROR_DS_REFUSING_FSMO_ROLES 8433
+#define ERROR_DS_MISSING_FSMO_SETTINGS 8434
+#define ERROR_DS_UNABLE_TO_SURRENDER_ROLES 8435
+#define ERROR_DS_DRA_GENERIC 8436
+#define ERROR_DS_DRA_INVALID_PARAMETER 8437
+#define ERROR_DS_DRA_BUSY 8438
+#define ERROR_DS_DRA_BAD_DN 8439
+#define ERROR_DS_DRA_BAD_NC 8440
+#define ERROR_DS_DRA_DN_EXISTS 8441
+#define ERROR_DS_DRA_INTERNAL_ERROR 8442
+#define ERROR_DS_DRA_INCONSISTENT_DIT 8443
+#define ERROR_DS_DRA_CONNECTION_FAILED 8444
+#define ERROR_DS_DRA_BAD_INSTANCE_TYPE 8445
+#define ERROR_DS_DRA_OUT_OF_MEM 8446
+#define ERROR_DS_DRA_MAIL_PROBLEM 8447
+#define ERROR_DS_DRA_REF_ALREADY_EXISTS 8448
+#define ERROR_DS_DRA_REF_NOT_FOUND 8449
+#define ERROR_DS_DRA_OBJ_IS_REP_SOURCE 8450
+#define ERROR_DS_DRA_DB_ERROR 8451
+#define ERROR_DS_DRA_NO_REPLICA 8452
+#define ERROR_DS_DRA_ACCESS_DENIED 8453
+#define ERROR_DS_DRA_NOT_SUPPORTED 8454
+#define ERROR_DS_DRA_RPC_CANCELLED 8455
+#define ERROR_DS_DRA_SOURCE_DISABLED 8456
+#define ERROR_DS_DRA_SINK_DISABLED 8457
+#define ERROR_DS_DRA_NAME_COLLISION 8458
+#define ERROR_DS_DRA_SOURCE_REINSTALLED 8459
+#define ERROR_DS_DRA_MISSING_PARENT 8460
+#define ERROR_DS_DRA_PREEMPTED 8461
+#define ERROR_DS_DRA_ABANDON_SYNC 8462
+#define ERROR_DS_DRA_SHUTDOWN 8463
+#define ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET 8464
+#define ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA 8465
+#define ERROR_DS_DRA_EXTN_CONNECTION_FAILED 8466
+#define ERROR_DS_INSTALL_SCHEMA_MISMATCH 8467
+#define ERROR_DS_DUP_LINK_ID 8468
+#define ERROR_DS_NAME_ERROR_RESOLVING 8469
+#define ERROR_DS_NAME_ERROR_NOT_FOUND 8470
+#define ERROR_DS_NAME_ERROR_NOT_UNIQUE 8471
+#define ERROR_DS_NAME_ERROR_NO_MAPPING 8472
+#define ERROR_DS_NAME_ERROR_DOMAIN_ONLY 8473
+#define ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING 8474
+#define ERROR_DS_CONSTRUCTED_ATT_MOD 8475
+#define ERROR_DS_WRONG_OM_OBJ_CLASS 8476
+#define ERROR_DS_DRA_REPL_PENDING 8477
+#define ERROR_DS_DS_REQUIRED 8478
+#define ERROR_DS_INVALID_LDAP_DISPLAY_NAME 8479
+#define ERROR_DS_NON_BASE_SEARCH 8480
+#define ERROR_DS_CANT_RETRIEVE_ATTS 8481
+#define ERROR_DS_BACKLINK_WITHOUT_LINK 8482
+#define ERROR_DS_EPOCH_MISMATCH 8483
+#define ERROR_DS_SRC_NAME_MISMATCH 8484
+#define ERROR_DS_SRC_AND_DST_NC_IDENTICAL 8485
+#define ERROR_DS_DST_NC_MISMATCH 8486
+#define ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC 8487
+#define ERROR_DS_SRC_GUID_MISMATCH 8488
+#define ERROR_DS_CANT_MOVE_DELETED_OBJECT 8489
+#define ERROR_DS_PDC_OPERATION_IN_PROGRESS 8490
+#define ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD 8491
+#define ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION 8492
+#define ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS 8493
+#define ERROR_DS_NC_MUST_HAVE_NC_PARENT 8494
+#define ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE 8495
+#define ERROR_DS_DST_DOMAIN_NOT_NATIVE 8496
+#define ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER 8497
+#define ERROR_DS_CANT_MOVE_ACCOUNT_GROUP 8498
+#define ERROR_DS_CANT_MOVE_RESOURCE_GROUP 8499
+#define ERROR_DS_INVALID_SEARCH_FLAG 8500
+#define ERROR_DS_NO_TREE_DELETE_ABOVE_NC 8501
+#define ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE 8502
+#define ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE 8503
+#define ERROR_DS_SAM_INIT_FAILURE 8504
+#define ERROR_DS_SENSITIVE_GROUP_VIOLATION 8505
+#define ERROR_DS_CANT_MOD_PRIMARYGROUPID 8506
+#define ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD 8507
+#define ERROR_DS_NONSAFE_SCHEMA_CHANGE 8508
+#define ERROR_DS_SCHEMA_UPDATE_DISALLOWED 8509
+#define ERROR_DS_CANT_CREATE_UNDER_SCHEMA 8510
+#define ERROR_DS_INSTALL_NO_SRC_SCH_VERSION 8511
+#define ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE 8512
+#define ERROR_DS_INVALID_GROUP_TYPE 8513
+#define ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN 8514
+#define ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN 8515
+#define ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER 8516
+#define ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER 8517
+#define ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER 8518
+#define ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER 8519
+#define ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER 8520
+#define ERROR_DS_HAVE_PRIMARY_MEMBERS 8521
+#define ERROR_DS_STRING_SD_CONVERSION_FAILED 8522
+#define ERROR_DS_NAMING_MASTER_GC 8523
+#define ERROR_DS_LOOKUP_FAILURE 8524
+#define ERROR_DS_COULDNT_UPDATE_SPNS 8525
+#define ERROR_DS_CANT_RETRIEVE_SD 8526
+#define ERROR_DS_KEY_NOT_UNIQUE 8527
+#define ERROR_DS_WRONG_LINKED_ATT_SYNTAX 8528
+#define ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD 8529
+#define ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY 8530
+#define ERROR_DS_CANT_START 8531
+#define ERROR_DS_INIT_FAILURE 8532
+#define ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION 8533
+#define ERROR_DS_SOURCE_DOMAIN_IN_FOREST 8534
+#define ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST 8535
+#define ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED 8536
+#define ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN 8537
+#define ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER 8538
+#define ERROR_DS_SRC_SID_EXISTS_IN_FOREST 8539
+#define ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH 8540
+#define ERROR_SAM_INIT_FAILURE 8541
+#define ERROR_DS_DRA_SCHEMA_INFO_SHIP 8542
+#define ERROR_DS_DRA_SCHEMA_CONFLICT 8543
+#define ERROR_DS_DRA_EARLIER_SCHEMA_CONLICT 8544
+#define ERROR_DS_DRA_OBJ_NC_MISMATCH 8545
+#define ERROR_DS_NC_STILL_HAS_DSAS 8546
+#define ERROR_DS_GC_REQUIRED 8547
+#define ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY 8548
+#define ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS 8549
+#define ERROR_DS_CANT_ADD_TO_GC 8550
+#define ERROR_DS_NO_CHECKPOINT_WITH_PDC 8551
+#define ERROR_DS_SOURCE_AUDITING_NOT_ENABLED 8552
+#define ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC 8553
+#define ERROR_DS_INVALID_NAME_FOR_SPN 8554
+#define ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS 8555
+#define ERROR_DS_UNICODEPWD_NOT_IN_QUOTES 8556
+#define ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED 8557
+#define ERROR_DS_MUST_BE_RUN_ON_DST_DC 8558
+#define ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER 8559
+#define ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ 8560
+#define ERROR_DS_INIT_FAILURE_CONSOLE 8561
+#define ERROR_DS_SAM_INIT_FAILURE_CONSOLE 8562
+#define ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 8572
+#define ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER 8578
+#define DNS_ERROR_RCODE_FORMAT_ERROR 9001
+#define DNS_ERROR_RCODE_SERVER_FAILURE 9002
+#define DNS_ERROR_RCODE_NAME_ERROR 9003
+#define DNS_ERROR_RCODE_NOT_IMPLEMENTED 9004
+#define DNS_ERROR_RCODE_REFUSED 9005
+#define DNS_ERROR_RCODE_YXDOMAIN 9006
+#define DNS_ERROR_RCODE_YXRRSET 9007
+#define DNS_ERROR_RCODE_NXRRSET 9008
+#define DNS_ERROR_RCODE_NOTAUTH 9009
+#define DNS_ERROR_RCODE_NOTZONE 9010
+#define DNS_ERROR_RCODE_BADSIG 9016
+#define DNS_ERROR_RCODE_BADKEY 9017
+#define DNS_ERROR_RCODE_BADTIME 9018
+#define DNS_INFO_NO_RECORDS 9501
+#define DNS_ERROR_BAD_PACKET 9502
+#define DNS_ERROR_NO_PACKET 9503
+#define DNS_ERROR_RCODE 9504
+#define DNS_ERROR_UNSECURE_PACKET 9505
+#define DNS_ERROR_INVALID_TYPE 9551
+#define DNS_ERROR_INVALID_IP_ADDRESS 9552
+#define DNS_ERROR_INVALID_PROPERTY 9553
+#define DNS_ERROR_TRY_AGAIN_LATER 9554
+#define DNS_ERROR_NOT_UNIQUE 9555
+#define DNS_ERROR_NON_RFC_NAME 9556
+#define DNS_STATUS_FQDN 9557
+#define DNS_STATUS_DOTTED_NAME 9558
+#define DNS_STATUS_SINGLE_PART_NAME 9559
+#define DNS_ERROR_INVALID_NAME_CHAR 9560
+#define DNS_ERROR_NUMERIC_NAME 9561
+#define DNS_ERROR_ZONE_DOES_NOT_EXIST 9601
+#define DNS_ERROR_NO_ZONE_INFO 9602
+#define DNS_ERROR_INVALID_ZONE_OPERATION 9603
+#define DNS_ERROR_ZONE_CONFIGURATION_ERROR 9604
+#define DNS_ERROR_ZONE_HAS_NO_SOA_RECORD 9605
+#define DNS_ERROR_ZONE_HAS_NO_NS_RECORDS 9606
+#define DNS_ERROR_ZONE_LOCKED 9607
+#define DNS_ERROR_ZONE_CREATION_FAILED 9608
+#define DNS_ERROR_ZONE_ALREADY_EXISTS 9609
+#define DNS_ERROR_AUTOZONE_ALREADY_EXISTS 9610
+#define DNS_ERROR_INVALID_ZONE_TYPE 9611
+#define DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP 9612
+#define DNS_ERROR_ZONE_NOT_SECONDARY 9613
+#define DNS_ERROR_NEED_SECONDARY_ADDRESSES 9614
+#define DNS_ERROR_WINS_INIT_FAILED 9615
+#define DNS_ERROR_NEED_WINS_SERVERS 9616
+#define DNS_ERROR_NBSTAT_INIT_FAILED 9617
+#define DNS_ERROR_SOA_DELETE_INVALID 9618
+#define DNS_ERROR_PRIMARY_REQUIRES_DATAFILE 9651
+#define DNS_ERROR_INVALID_DATAFILE_NAME 9652
+#define DNS_ERROR_DATAFILE_OPEN_FAILURE 9653
+#define DNS_ERROR_FILE_WRITEBACK_FAILED 9654
+#define DNS_ERROR_DATAFILE_PARSING 9655
+#define DNS_ERROR_RECORD_DOES_NOT_EXIST 9701
+#define DNS_ERROR_RECORD_FORMAT 9702
+#define DNS_ERROR_NODE_CREATION_FAILED 9703
+#define DNS_ERROR_UNKNOWN_RECORD_TYPE 9704
+#define DNS_ERROR_RECORD_TIMED_OUT 9705
+#define DNS_ERROR_NAME_NOT_IN_ZONE 9706
+#define DNS_ERROR_CNAME_LOOP 9707
+#define DNS_ERROR_NODE_IS_CNAME 9708
+#define DNS_ERROR_CNAME_COLLISION 9709
+#define DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT 9710
+#define DNS_ERROR_RECORD_ALREADY_EXISTS 9711
+#define DNS_ERROR_SECONDARY_DATA 9712
+#define DNS_ERROR_NO_CREATE_CACHE_DATA 9713
+#define DNS_ERROR_NAME_DOES_NOT_EXIST 9714
+#define DNS_WARNING_PTR_CREATE_FAILED 9715
+#define DNS_WARNING_DOMAIN_UNDELETED 9716
+#define DNS_ERROR_DS_UNAVAILABLE 9717
+#define DNS_ERROR_DS_ZONE_ALREADY_EXISTS 9718
+#define DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE 9719
+#define DNS_INFO_AXFR_COMPLETE 9751
+#define DNS_ERROR_AXFR 9752
+#define DNS_INFO_ADDED_LOCAL_WINS 9753
+#define DNS_STATUS_CONTINUE_NEEDED 9801
+#define DNS_ERROR_NO_TCPIP 9851
+#define DNS_ERROR_NO_DNS_SERVERS 9852
+
+/*
+ * Also defined in winsock.h.
+ *
+ * All Windows Sockets error constants are biased by WSABASEERR from
+ * the "normal"
+ */
+#define WSABASEERR 10000
+/*
+ * Windows Sockets definitions of regular Microsoft C error constants
+ */
+#define WSAEINTR (WSABASEERR+4)
+#define WSAEBADF (WSABASEERR+9)
+#define WSAEACCES (WSABASEERR+13)
+#define WSAEFAULT (WSABASEERR+14)
+#define WSAEINVAL (WSABASEERR+22)
+#define WSAEMFILE (WSABASEERR+24)
+
+/*
+ * Windows Sockets definitions of regular Berkeley error constants
+ */
+#define WSAEWOULDBLOCK (WSABASEERR+35)
+#define WSAEINPROGRESS (WSABASEERR+36)
+#define WSAEALREADY (WSABASEERR+37)
+#define WSAENOTSOCK (WSABASEERR+38)
+#define WSAEDESTADDRREQ (WSABASEERR+39)
+#define WSAEMSGSIZE (WSABASEERR+40)
+#define WSAEPROTOTYPE (WSABASEERR+41)
+#define WSAENOPROTOOPT (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
+#define WSAEOPNOTSUPP (WSABASEERR+45)
+#define WSAEPFNOSUPPORT (WSABASEERR+46)
+#define WSAEAFNOSUPPORT (WSABASEERR+47)
+#define WSAEADDRINUSE (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL (WSABASEERR+49)
+#define WSAENETDOWN (WSABASEERR+50)
+#define WSAENETUNREACH (WSABASEERR+51)
+#define WSAENETRESET (WSABASEERR+52)
+#define WSAECONNABORTED (WSABASEERR+53)
+#define WSAECONNRESET (WSABASEERR+54)
+#define WSAENOBUFS (WSABASEERR+55)
+#define WSAEISCONN (WSABASEERR+56)
+#define WSAENOTCONN (WSABASEERR+57)
+#define WSAESHUTDOWN (WSABASEERR+58)
+#define WSAETOOMANYREFS (WSABASEERR+59)
+#define WSAETIMEDOUT (WSABASEERR+60)
+#define WSAECONNREFUSED (WSABASEERR+61)
+#define WSAELOOP (WSABASEERR+62)
+#define WSAENAMETOOLONG (WSABASEERR+63)
+#define WSAEHOSTDOWN (WSABASEERR+64)
+#define WSAEHOSTUNREACH (WSABASEERR+65)
+#define WSAENOTEMPTY (WSABASEERR+66)
+#define WSAEPROCLIM (WSABASEERR+67)
+#define WSAEUSERS (WSABASEERR+68)
+#define WSAEDQUOT (WSABASEERR+69)
+#define WSAESTALE (WSABASEERR+70)
+#define WSAEREMOTE (WSABASEERR+71)
+
+/*
+ * Extended Windows Sockets error constant definitions
+ */
+#define WSASYSNOTREADY (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED (WSABASEERR+92)
+#define WSANOTINITIALISED (WSABASEERR+93)
+#define WSAEDISCON (WSABASEERR+101)
+#define WSAENOMORE (WSABASEERR+102)
+#define WSAECANCELLED (WSABASEERR+103)
+#define WSAEINVALIDPROCTABLE (WSABASEERR+104)
+#define WSAEINVALIDPROVIDER (WSABASEERR+105)
+#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106)
+#define WSASYSCALLFAILURE (WSABASEERR+107)
+#define WSASERVICE_NOT_FOUND (WSABASEERR+108)
+#define WSATYPE_NOT_FOUND (WSABASEERR+109)
+#define WSA_E_NO_MORE (WSABASEERR+110)
+#define WSA_E_CANCELLED (WSABASEERR+111)
+#define WSAEREFUSED (WSABASEERR+112)
+
+
+#define ERROR_SXS_SECTION_NOT_FOUND 14000
+#define ERROR_SXS_CANT_GEN_ACTCTX 14001
+#define ERROR_SXS_INVALID_ACTCTXDATA_FORMAT 14002
+#define ERROR_SXS_ASSEMBLY_NOT_FOUND 14003
+#define ERROR_SXS_MANIFEST_FORMAT_ERROR 14004
+#define ERROR_SXS_MANIFEST_PARSE_ERROR 14005
+#define ERROR_SXS_ACTIVATION_CONTEXT_DISABLED 14006
+#define ERROR_SXS_KEY_NOT_FOUND 14007
+#define ERROR_SXS_VERSION_CONFLICT 14008
+#define ERROR_SXS_WRONG_SECTION_TYPE 14009
+#define ERROR_SXS_THREAD_QUERIES_DISABLED 14010
+#define ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET 14011
+#define ERROR_SXS_UNKNOWN_ENCODING_GROUP 14012
+#define ERROR_SXS_UNKNOWN_ENCODING 14013
+#define ERROR_SXS_INVALID_XML_NAMESPACE_URI 14014
+#define ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED 14015
+#define ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED 14016
+#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE 14017
+#define ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE 14018
+#define ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE 14019
+#define ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT 14020
+#define ERROR_SXS_DUPLICATE_DLL_NAME 14021
+#define ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME 14022
+#define ERROR_SXS_DUPLICATE_CLSID 14023
+#define ERROR_SXS_DUPLICATE_IID 14024
+#define ERROR_SXS_DUPLICATE_TLBID 14025
+#define ERROR_SXS_DUPLICATE_PROGID 14026
+#define ERROR_SXS_DUPLICATE_ASSEMBLY_NAME 14027
+#define ERROR_SXS_FILE_HASH_MISMATCH 14028
+#define ERROR_SXS_POLICY_PARSE_ERROR 14029
+#define ERROR_SXS_PROTECTION_RECOVERY_FAILED 14074
+#define ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT 14075
+#define ERROR_SXS_PROTECTION_CATALOG_NOT_VALID 14076
+#define ERROR_SXS_UNTRANSLATABLE_HRESULT 14077
+#define ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING 14078
+#define ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE 14079
+#define ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME 14080
+#define ERROR_SXS_ASSEMBLY_MISSING 14081
+#define ERROR_SXS_CORRUPT_ACTIVATION_STACK 14082
+#define ERROR_SXS_CORRUPTION 14083
+#define ERROR_SXS_EARLY_DEACTIVATION 14084
+#define ERROR_SXS_INVALID_DEACTIVATION 14085
+#define ERROR_SXS_MULTIPLE_DEACTIVATION 14086
+#define ERROR_SXS_PROCESS_TERMINATION_REQUESTED 14087
+#define ERROR_SXS_RELEASE_ACTIVATION_CONTEXT 14088
+#define ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY 14089
+#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE 14090
+#define ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME 14091
+#define ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE 14092
+#define ERROR_SXS_IDENTITY_PARSE_ERROR 14093
+#define ERROR_SXS_IDENTITY_PARSE_ERROR 14093
+#define ERROR_MALFORMED_SUBSTITUTION_STRING 14094
+#define ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN 14095
+#define ERROR_UNMAPPED_SUBSTITUTION_STRING 14096
+#define ERROR_SXS_ASSEMBLY_NOT_LOCKED 14097
+#define ERROR_SXS_COMPONENT_STORE_CORRUPT 14098
+#define ERROR_ADVANCED_INSTALLER_FAILED 14099
+#define ERROR_XML_ENCODING_MISMATCH 14100
+#define ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT 14101
+#define ERROR_SXS_IDENTITIES_DIFFERENT 14102
+#define ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT 14103
+#define ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY 14104
+#define ERROR_SXS_MANIFEST_TOO_BIG 14105
+#define ERROR_SXS_SETTING_NOT_REGISTERED 14106
+#define ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE 14107
+#define ERROR_SMI_PRIMITIVE_INSTALLER_FAILED 14108
+#define ERROR_GENERIC_COMMAND_FAILED 14109
+#define ERROR_SXS_FILE_HASH_MISSING 14110
+#define ERROR_MUI_FILE_NOT_FOUND 15100
+#define ERROR_MUI_INVALID_FILE 15101
+#define ERROR_MUI_INVALID_RC_CONFIG 15102
+#define ERROR_MUI_INVALID_LOCALE_NAME 15103
+#define ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME 15104
+#define ERROR_MUI_FILE_NOT_LOADED 15105
+#define ERROR_RESOURCE_ENUM_USER_STOP 15106
+#define ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED 15107
+#define ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME 15108
+#define ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE 15110
+#define ERROR_MRM_INVALID_PRICONFIG 15111
+#define ERROR_MRM_INVALID_FILE_TYPE 15112
+#define ERROR_MRM_UNKNOWN_QUALIFIER 15113
+#define ERROR_MRM_INVALID_QUALIFIER_VALUE 15114
+#define ERROR_MRM_NO_CANDIDATE 15115
+#define ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE 15116
+#define ERROR_MRM_RESOURCE_TYPE_MISMATCH 15117
+#define ERROR_MRM_DUPLICATE_MAP_NAME 15118
+#define ERROR_MRM_DUPLICATE_ENTRY 15119
+#define ERROR_MRM_INVALID_RESOURCE_IDENTIFIER 15120
+#define ERROR_MRM_FILEPATH_TOO_LONG 15121
+#define ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE 15122
+#define ERROR_MRM_INVALID_PRI_FILE 15126
+#define ERROR_MRM_NAMED_RESOURCE_NOT_FOUND 15127
+#define ERROR_MRM_MAP_NOT_FOUND 15135
+#define ERROR_MRM_UNSUPPORTED_PROFILE_TYPE 15136
+#define ERROR_MRM_INVALID_QUALIFIER_OPERATOR 15137
+#define ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE 15138
+#define ERROR_MRM_AUTOMERGE_ENABLED 15139
+#define ERROR_MRM_TOO_MANY_RESOURCES 15140
+#define ERROR_MCA_INVALID_CAPABILITIES_STRING 15200
+#define ERROR_MCA_INVALID_VCP_VERSION 15201
+#define ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION 15202
+#define ERROR_MCA_MCCS_VERSION_MISMATCH 15203
+#define ERROR_MCA_UNSUPPORTED_MCCS_VERSION 15204
+#define ERROR_MCA_INTERNAL_ERROR 15205
+#define ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED 15206
+#define ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE 15207
+#define ERROR_AMBIGUOUS_SYSTEM_DEVICE 15250
+#define ERROR_SYSTEM_DEVICE_NOT_FOUND 15299
+#define ERROR_HASH_NOT_SUPPORTED 15300
+#define ERROR_HASH_NOT_PRESENT 15301
+#define ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED 15321
+#define ERROR_GPIO_CLIENT_INFORMATION_INVALID 15322
+#define ERROR_GPIO_VERSION_NOT_SUPPORTED 15323
+#define ERROR_GPIO_INVALID_REGISTRATION_PACKET 15324
+#define ERROR_GPIO_OPERATION_DENIED 15325
+#define ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE 15326
+#define ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED 15327
+#define ERROR_CANNOT_SWITCH_RUNLEVEL 15400
+#define ERROR_INVALID_RUNLEVEL_SETTING 15401
+#define ERROR_RUNLEVEL_SWITCH_TIMEOUT 15402
+#define ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT 15403
+#define ERROR_RUNLEVEL_SWITCH_IN_PROGRESS 15404
+#define ERROR_SERVICES_FAILED_AUTOSTART 15405
+#define ERROR_COM_TASK_STOP_PENDING 15501
+#define ERROR_INSTALL_OPEN_PACKAGE_FAILED 15600
+#define ERROR_INSTALL_PACKAGE_NOT_FOUND 15601
+#define ERROR_INSTALL_INVALID_PACKAGE 15602
+#define ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED 15603
+#define ERROR_INSTALL_OUT_OF_DISK_SPACE 15604
+#define ERROR_INSTALL_NETWORK_FAILURE 15605
+#define ERROR_INSTALL_REGISTRATION_FAILURE 15606
+#define ERROR_INSTALL_DEREGISTRATION_FAILURE 15607
+#define ERROR_INSTALL_CANCEL 15608
+#define ERROR_INSTALL_FAILED 15609
+#define ERROR_REMOVE_FAILED 15610
+#define ERROR_PACKAGE_ALREADY_EXISTS 15611
+#define ERROR_NEEDS_REMEDIATION 15612
+#define ERROR_INSTALL_PREREQUISITE_FAILED 15613
+#define ERROR_PACKAGE_REPOSITORY_CORRUPTED 15614
+#define ERROR_INSTALL_POLICY_FAILURE 15615
+#define ERROR_PACKAGE_UPDATING 15616
+#define ERROR_DEPLOYMENT_BLOCKED_BY_POLICY 15617
+#define ERROR_PACKAGES_IN_USE 15618
+#define ERROR_RECOVERY_FILE_CORRUPT 15619
+#define ERROR_INVALID_STAGED_SIGNATURE 15620
+#define ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED 15621
+#define ERROR_INSTALL_PACKAGE_DOWNGRADE 15622
+#define ERROR_SYSTEM_NEEDS_REMEDIATION 15623
+#define ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN 15624
+#define ERROR_RESILIENCY_FILE_CORRUPT 15625
+#define ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING 15626
+#define APPMODEL_ERROR_NO_PACKAGE 15700
+#define APPMODEL_ERROR_PACKAGE_RUNTIME_CORRUPT 15701
+#define APPMODEL_ERROR_PACKAGE_IDENTITY_CORRUPT 15702
+#define APPMODEL_ERROR_NO_APPLICATION 15703
+
+/* HRESULT values for OLE, SHELL and other Interface stuff */
+/* the codes 4000-40ff are reserved for OLE */
+#undef NOERROR /* arpa/nameser_compat.h defines this */
+
+#define E_NOT_SUFFICIENT_BUFFER HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
+
+#ifdef RC_INVOKED
+#define _HRESULT_TYPEDEF_(x) (x)
+#else
+#define _HRESULT_TYPEDEF_(x) ((HRESULT)x)
+#endif
+
+#define NOERROR _HRESULT_TYPEDEF_(0)
+#define S_OK _HRESULT_TYPEDEF_(0)
+#define SEC_E_OK _HRESULT_TYPEDEF_(0)
+#define S_FALSE _HRESULT_TYPEDEF_(1)
+
+#define E_PENDING _HRESULT_TYPEDEF_(0x8000000A)
+
+
+#define E_NOTIMPL _HRESULT_TYPEDEF_(0x80004001)
+#define E_NOINTERFACE _HRESULT_TYPEDEF_(0x80004002)
+#define E_POINTER _HRESULT_TYPEDEF_(0x80004003)
+#define E_ABORT _HRESULT_TYPEDEF_(0x80004004)
+#define E_FAIL _HRESULT_TYPEDEF_(0x80004005)
+
+
+#define CO_E_INIT_TLS _HRESULT_TYPEDEF_(0x80004006)
+#define CO_E_INIT_SHARED_ALLOCATOR _HRESULT_TYPEDEF_(0x80004007)
+#define CO_E_INIT_MEMORY_ALLOCATOR _HRESULT_TYPEDEF_(0x80004008)
+#define CO_E_INIT_CLASS_CACHE _HRESULT_TYPEDEF_(0x80004009)
+#define CO_E_INIT_RPC_CHANNEL _HRESULT_TYPEDEF_(0x8000400A)
+#define CO_E_INIT_TLS_SET_CHANNEL_CONTROL _HRESULT_TYPEDEF_(0x8000400B)
+#define CO_E_INIT_TLS_CHANNEL_CONTROL _HRESULT_TYPEDEF_(0x8000400C)
+#define CO_E_INIT_UNACCEPTED_USER_ALLOCATOR _HRESULT_TYPEDEF_(0x8000400D)
+#define CO_E_INIT_SCM_MUTEX_EXISTS _HRESULT_TYPEDEF_(0x8000400E)
+#define CO_E_INIT_SCM_FILE_MAPPING_EXISTS _HRESULT_TYPEDEF_(0x8000400F)
+#define CO_E_INIT_SCM_MAP_VIEW_OF_FILE _HRESULT_TYPEDEF_(0x80004010)
+#define CO_E_INIT_SCM_EXEC_FAILURE _HRESULT_TYPEDEF_(0x80004011)
+#define CO_E_INIT_ONLY_SINGLE_THREADED _HRESULT_TYPEDEF_(0x80004012)
+#define CO_E_CANT_REMOTE _HRESULT_TYPEDEF_(0x80004013)
+#define CO_E_BAD_SERVER_NAME _HRESULT_TYPEDEF_(0x80004014)
+#define CO_E_WRONG_SERVER_IDENTITY _HRESULT_TYPEDEF_(0x80004015)
+#define CO_E_OLE1DDE_DISABLED _HRESULT_TYPEDEF_(0x80004016)
+#define CO_E_RUNAS_SYNTAX _HRESULT_TYPEDEF_(0x80004017)
+#define CO_E_CREATEPROCESS_FAILURE _HRESULT_TYPEDEF_(0x80004018)
+#define CO_E_RUNAS_CREATEPROCESS_FAILURE _HRESULT_TYPEDEF_(0x80004019)
+#define CO_E_RUNAS_LOGON_FAILURE _HRESULT_TYPEDEF_(0x8000401A)
+#define CO_E_LAUNCH_PERMISSION_DENIED _HRESULT_TYPEDEF_(0x8000401B)
+#define CO_E_START_SERVICE_FAILURE _HRESULT_TYPEDEF_(0x8000401C)
+#define CO_E_REMOTE_COMMUNICATION_FAILURE _HRESULT_TYPEDEF_(0x8000401D)
+#define CO_E_SERVER_START_TIMEOUT _HRESULT_TYPEDEF_(0x8000401E)
+#define CO_E_CLSREG_INCONSISTENT _HRESULT_TYPEDEF_(0x8000401F)
+#define CO_E_IIDREG_INCONSISTENT _HRESULT_TYPEDEF_(0x80004020)
+#define CO_E_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x80004021)
+#define CO_E_RELOAD_DLL _HRESULT_TYPEDEF_(0x80004022)
+#define CO_E_MSI_ERROR _HRESULT_TYPEDEF_(0x80004023)
+#define CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT _HRESULT_TYPEDEF_(0x80004024)
+#define CO_E_SERVER_PAUSED _HRESULT_TYPEDEF_(0x80004025)
+#define CO_E_SERVER_NOT_PAUSED _HRESULT_TYPEDEF_(0x80004026)
+#define CO_E_CLASS_DISABLED _HRESULT_TYPEDEF_(0x80004027)
+#define CO_E_CLRNOTAVAILABLE _HRESULT_TYPEDEF_(0x80004028)
+#define CO_E_ASYNC_WORK_REJECTED _HRESULT_TYPEDEF_(0x80004029)
+#define CO_E_SERVER_INIT_TIMEOUT _HRESULT_TYPEDEF_(0x8000402A)
+#define CO_E_NO_SECCTX_IN_ACTIVATE _HRESULT_TYPEDEF_(0x8000402B)
+#define CO_E_TRACKER_CONFIG _HRESULT_TYPEDEF_(0x80004030)
+#define CO_E_THREADPOOL_CONFIG _HRESULT_TYPEDEF_(0x80004031)
+#define CO_E_SXS_CONFIG _HRESULT_TYPEDEF_(0x80004032)
+#define CO_E_MALFORMED_SPN _HRESULT_TYPEDEF_(0x80004033)
+
+#define E_UNEXPECTED _HRESULT_TYPEDEF_(0x8000FFFF)
+
+#define RPC_E_CALL_REJECTED _HRESULT_TYPEDEF_(0x80010001)
+#define RPC_E_CALL_CANCELED _HRESULT_TYPEDEF_(0x80010002)
+#define RPC_E_CANTPOST_INSENDCALL _HRESULT_TYPEDEF_(0x80010003)
+#define RPC_E_CANTCALLOUT_INASYNCCALL _HRESULT_TYPEDEF_(0x80010004)
+#define RPC_E_CANTCALLOUT_INEXTERNALCALL _HRESULT_TYPEDEF_(0x80010005)
+#define RPC_E_CONNECTION_TERMINATED _HRESULT_TYPEDEF_(0x80010006)
+#define RPC_E_SERVER_DIED _HRESULT_TYPEDEF_(0x80010007)
+#define RPC_E_CLIENT_DIED _HRESULT_TYPEDEF_(0x80010008)
+#define RPC_E_INVALID_DATAPACKET _HRESULT_TYPEDEF_(0x80010009)
+#define RPC_E_CANTTRANSMIT_CALL _HRESULT_TYPEDEF_(0x8001000A)
+#define RPC_E_CLIENT_CANTMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000B)
+#define RPC_E_CLIENT_CANTUNMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000C)
+#define RPC_E_SERVER_CANTMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000D)
+#define RPC_E_SERVER_CANTUNMARSHAL_DATA _HRESULT_TYPEDEF_(0x8001000E)
+#define RPC_E_INVALID_DATA _HRESULT_TYPEDEF_(0x8001000F)
+#define RPC_E_INVALID_PARAMETER _HRESULT_TYPEDEF_(0x80010010)
+#define RPC_E_CANTCALLOUT_AGAIN _HRESULT_TYPEDEF_(0x80010011)
+#define RPC_E_SERVER_DIED_DNE _HRESULT_TYPEDEF_(0x80010012)
+#define RPC_E_SYS_CALL_FAILED _HRESULT_TYPEDEF_(0x80010100)
+#define RPC_E_OUT_OF_RESOURCES _HRESULT_TYPEDEF_(0x80010101)
+#define RPC_E_ATTEMPTED_MULTITHREAD _HRESULT_TYPEDEF_(0x80010102)
+#define RPC_E_NOT_REGISTERED _HRESULT_TYPEDEF_(0x80010103)
+#define RPC_E_FAULT _HRESULT_TYPEDEF_(0x80010104)
+#define RPC_E_SERVERFAULT _HRESULT_TYPEDEF_(0x80010105)
+#define RPC_E_CHANGED_MODE _HRESULT_TYPEDEF_(0x80010106)
+#define RPC_E_INVALIDMETHOD _HRESULT_TYPEDEF_(0x80010107)
+#define RPC_E_DISCONNECTED _HRESULT_TYPEDEF_(0x80010108)
+#define RPC_E_RETRY _HRESULT_TYPEDEF_(0x80010109)
+#define RPC_E_SERVERCALL_RETRYLATER _HRESULT_TYPEDEF_(0x8001010A)
+#define RPC_E_SERVERCALL_REJECTED _HRESULT_TYPEDEF_(0x8001010B)
+#define RPC_E_INVALID_CALLDATA _HRESULT_TYPEDEF_(0x8001010C)
+#define RPC_E_CANTCALLOUT_ININPUTSYNCCALL _HRESULT_TYPEDEF_(0x8001010D)
+#define RPC_E_WRONG_THREAD _HRESULT_TYPEDEF_(0x8001010E)
+#define RPC_E_THREAD_NOT_INIT _HRESULT_TYPEDEF_(0x8001010F)
+#define RPC_E_VERSION_MISMATCH _HRESULT_TYPEDEF_(0x80010110)
+#define RPC_E_INVALID_HEADER _HRESULT_TYPEDEF_(0x80010111)
+#define RPC_E_INVALID_EXTENSION _HRESULT_TYPEDEF_(0x80010112)
+#define RPC_E_INVALID_IPID _HRESULT_TYPEDEF_(0x80010113)
+#define RPC_E_INVALID_OBJECT _HRESULT_TYPEDEF_(0x80010114)
+#define RPC_S_CALLPENDING _HRESULT_TYPEDEF_(0x80010115)
+#define RPC_S_WAITONTIMER _HRESULT_TYPEDEF_(0x80010116)
+#define RPC_E_CALL_COMPLETE _HRESULT_TYPEDEF_(0x80010117)
+#define RPC_E_UNSECURE_CALL _HRESULT_TYPEDEF_(0x80010118)
+#define RPC_E_TOO_LATE _HRESULT_TYPEDEF_(0x80010119)
+#define RPC_E_NO_GOOD_SECURITY_PACKAGES _HRESULT_TYPEDEF_(0x8001011A)
+#define RPC_E_ACCESS_DENIED _HRESULT_TYPEDEF_(0x8001011B)
+#define RPC_E_REMOTE_DISABLED _HRESULT_TYPEDEF_(0x8001011C)
+#define RPC_E_INVALID_OBJREF _HRESULT_TYPEDEF_(0x8001011D)
+#define RPC_E_NO_CONTEXT _HRESULT_TYPEDEF_(0x8001011E)
+#define RPC_E_TIMEOUT _HRESULT_TYPEDEF_(0x8001011F)
+#define RPC_E_NO_SYNC _HRESULT_TYPEDEF_(0x80010120)
+#define RPC_E_UNEXPECTED _HRESULT_TYPEDEF_(0x8001FFFF)
+
+#define DISP_E_UNKNOWNINTERFACE _HRESULT_TYPEDEF_(0x80020001)
+#define DISP_E_MEMBERNOTFOUND _HRESULT_TYPEDEF_(0x80020003)
+#define DISP_E_PARAMNOTFOUND _HRESULT_TYPEDEF_(0x80020004)
+#define DISP_E_TYPEMISMATCH _HRESULT_TYPEDEF_(0x80020005)
+#define DISP_E_UNKNOWNNAME _HRESULT_TYPEDEF_(0x80020006)
+#define DISP_E_NONAMEDARGS _HRESULT_TYPEDEF_(0x80020007)
+#define DISP_E_BADVARTYPE _HRESULT_TYPEDEF_(0x80020008)
+#define DISP_E_EXCEPTION _HRESULT_TYPEDEF_(0x80020009)
+#define DISP_E_OVERFLOW _HRESULT_TYPEDEF_(0x8002000A)
+#define DISP_E_BADINDEX _HRESULT_TYPEDEF_(0x8002000B)
+#define DISP_E_UNKNOWNLCID _HRESULT_TYPEDEF_(0x8002000C)
+#define DISP_E_ARRAYISLOCKED _HRESULT_TYPEDEF_(0x8002000D)
+#define DISP_E_BADPARAMCOUNT _HRESULT_TYPEDEF_(0x8002000E)
+#define DISP_E_PARAMNOTOPTIONAL _HRESULT_TYPEDEF_(0x8002000F)
+#define DISP_E_BADCALLEE _HRESULT_TYPEDEF_(0x80020010)
+#define DISP_E_NOTACOLLECTION _HRESULT_TYPEDEF_(0x80020011)
+#define DISP_E_DIVBYZERO _HRESULT_TYPEDEF_(0x80020012)
+
+#define TYPE_E_BUFFERTOOSMALL _HRESULT_TYPEDEF_(0x80028016)
+#define TYPE_E_FIELDNOTFOUND _HRESULT_TYPEDEF_(0x80028017)
+#define TYPE_E_INVDATAREAD _HRESULT_TYPEDEF_(0x80028018)
+#define TYPE_E_UNSUPFORMAT _HRESULT_TYPEDEF_(0x80028019)
+#define TYPE_E_REGISTRYACCESS _HRESULT_TYPEDEF_(0x8002801C)
+#define TYPE_E_LIBNOTREGISTERED _HRESULT_TYPEDEF_(0x8002801D)
+#define TYPE_E_UNDEFINEDTYPE _HRESULT_TYPEDEF_(0x80028027)
+#define TYPE_E_QUALIFIEDNAMEDISALLOWED _HRESULT_TYPEDEF_(0x80028028)
+#define TYPE_E_INVALIDSTATE _HRESULT_TYPEDEF_(0x80028029)
+#define TYPE_E_WRONGTYPEKIND _HRESULT_TYPEDEF_(0x8002802A)
+#define TYPE_E_ELEMENTNOTFOUND _HRESULT_TYPEDEF_(0x8002802B)
+#define TYPE_E_AMBIGUOUSNAME _HRESULT_TYPEDEF_(0x8002802C)
+#define TYPE_E_NAMECONFLICT _HRESULT_TYPEDEF_(0x8002802D)
+#define TYPE_E_UNKNOWNLCID _HRESULT_TYPEDEF_(0x8002802E)
+#define TYPE_E_DLLFUNCTIONNOTFOUND _HRESULT_TYPEDEF_(0x8002802F)
+#define TYPE_E_BADMODULEKIND _HRESULT_TYPEDEF_(0x800288BD)
+#define TYPE_E_SIZETOOBIG _HRESULT_TYPEDEF_(0x800288C5)
+#define TYPE_E_DUPLICATEID _HRESULT_TYPEDEF_(0x800288C6)
+#define TYPE_E_INVALIDID _HRESULT_TYPEDEF_(0x800288CF)
+#define TYPE_E_TYPEMISMATCH _HRESULT_TYPEDEF_(0x80028CA0)
+#define TYPE_E_OUTOFBOUNDS _HRESULT_TYPEDEF_(0x80028CA1)
+#define TYPE_E_IOERROR _HRESULT_TYPEDEF_(0x80028CA2)
+#define TYPE_E_CANTCREATETMPFILE _HRESULT_TYPEDEF_(0x80028CA3)
+#define TYPE_E_CANTLOADLIBRARY _HRESULT_TYPEDEF_(0x80029C4A)
+#define TYPE_E_INCONSISTENTPROPFUNCS _HRESULT_TYPEDEF_(0x80029C83)
+#define TYPE_E_CIRCULARTYPE _HRESULT_TYPEDEF_(0x80029C84)
+
+#define STG_S_CONVERTED _HRESULT_TYPEDEF_(0x00030200)
+#define STG_S_BLOCK _HRESULT_TYPEDEF_(0x00030201)
+#define STG_S_RETRYNOW _HRESULT_TYPEDEF_(0x00030202)
+#define STG_S_MONITORING _HRESULT_TYPEDEF_(0x00030203)
+#define STG_S_MULTIPLEOPENS _HRESULT_TYPEDEF_(0x00030204)
+#define STG_S_CONSOLIDATIONFAILED _HRESULT_TYPEDEF_(0x00030205)
+#define STG_S_CANNOTCONSOLIDATE _HRESULT_TYPEDEF_(0x00030206)
+
+#define STG_E_INVALIDFUNCTION _HRESULT_TYPEDEF_(0x80030001)
+#define STG_E_FILENOTFOUND _HRESULT_TYPEDEF_(0x80030002)
+#define STG_E_PATHNOTFOUND _HRESULT_TYPEDEF_(0x80030003)
+#define STG_E_TOOMANYOPENFILES _HRESULT_TYPEDEF_(0x80030004)
+#define STG_E_ACCESSDENIED _HRESULT_TYPEDEF_(0x80030005)
+#define STG_E_INVALIDHANDLE _HRESULT_TYPEDEF_(0x80030006)
+#define STG_E_INSUFFICIENTMEMORY _HRESULT_TYPEDEF_(0x80030008)
+#define STG_E_INVALIDPOINTER _HRESULT_TYPEDEF_(0x80030009)
+#define STG_E_NOMOREFILES _HRESULT_TYPEDEF_(0x80030012)
+#define STG_E_DISKISWRITEPROTECTED _HRESULT_TYPEDEF_(0x80030013)
+#define STG_E_SEEKERROR _HRESULT_TYPEDEF_(0x80030019)
+#define STG_E_WRITEFAULT _HRESULT_TYPEDEF_(0x8003001D)
+#define STG_E_READFAULT _HRESULT_TYPEDEF_(0x8003001E)
+#define STG_E_SHAREVIOLATION _HRESULT_TYPEDEF_(0x80030020)
+#define STG_E_LOCKVIOLATION _HRESULT_TYPEDEF_(0x80030021)
+#define STG_E_FILEALREADYEXISTS _HRESULT_TYPEDEF_(0x80030050)
+#define STG_E_INVALIDPARAMETER _HRESULT_TYPEDEF_(0x80030057)
+#define STG_E_MEDIUMFULL _HRESULT_TYPEDEF_(0x80030070)
+#define STG_E_ABNORMALAPIEXIT _HRESULT_TYPEDEF_(0x800300FA)
+#define STG_E_INVALIDHEADER _HRESULT_TYPEDEF_(0x800300FB)
+#define STG_E_INVALIDNAME _HRESULT_TYPEDEF_(0x800300FC)
+#define STG_E_UNKNOWN _HRESULT_TYPEDEF_(0x800300FD)
+#define STG_E_UNIMPLEMENTEDFUNCTION _HRESULT_TYPEDEF_(0x800300FE)
+#define STG_E_INVALIDFLAG _HRESULT_TYPEDEF_(0x800300FF)
+#define STG_E_INUSE _HRESULT_TYPEDEF_(0x80030100)
+#define STG_E_NOTCURRENT _HRESULT_TYPEDEF_(0x80030101)
+#define STG_E_REVERTED _HRESULT_TYPEDEF_(0x80030102)
+#define STG_E_CANTSAVE _HRESULT_TYPEDEF_(0x80030103)
+#define STG_E_OLDFORMAT _HRESULT_TYPEDEF_(0x80030104)
+#define STG_E_OLDDLL _HRESULT_TYPEDEF_(0x80030105)
+#define STG_E_SHAREREQUIRED _HRESULT_TYPEDEF_(0x80030106)
+#define STG_E_NOTFILEBASEDSTORAGE _HRESULT_TYPEDEF_(0x80030107)
+#define STG_E_EXTANTMARSHALLINGS _HRESULT_TYPEDEF_(0x80030108)
+#define STG_E_DOCFILECORRUPT _HRESULT_TYPEDEF_(0x80030109)
+
+#define STG_E_STATUS_COPY_PROTECTION_FAILURE _HRESULT_TYPEDEF_(0x80030305)
+#define STG_E_CSS_AUTHENTICATION_FAILURE _HRESULT_TYPEDEF_(0x80030306)
+#define STG_E_CSS_KEY_NOT_PRESENT _HRESULT_TYPEDEF_(0x80030307)
+#define STG_E_CSS_KEY_NOT_ESTABLISHED _HRESULT_TYPEDEF_(0x80030308)
+#define STG_E_CSS_SCRAMBLED_SECTOR _HRESULT_TYPEDEF_(0x80030309)
+#define STG_E_CSS_REGION_MISMATCH _HRESULT_TYPEDEF_(0x8003030A)
+#define STG_E_RESETS_EXHAUSTED _HRESULT_TYPEDEF_(0x8003030B)
+
+#define OLE_S_FIRST _HRESULT_TYPEDEF_(0x00040000)
+#define OLE_S_USEREG _HRESULT_TYPEDEF_(0x00040000)
+#define OLE_S_STATIC _HRESULT_TYPEDEF_(0x00040001)
+#define OLE_S_MAC_CLIPFORMAT _HRESULT_TYPEDEF_(0x00040002)
+#define OLE_S_LAST _HRESULT_TYPEDEF_(0x000400FF)
+
+#define OLE_E_FIRST _HRESULT_TYPEDEF_(0x80040000)
+#define OLE_E_OLEVERB _HRESULT_TYPEDEF_(0x80040000)
+#define OLE_E_ADVF _HRESULT_TYPEDEF_(0x80040001)
+#define OLE_E_ENUM_NOMORE _HRESULT_TYPEDEF_(0x80040002)
+#define OLE_E_ADVISENOTSUPPORTED _HRESULT_TYPEDEF_(0x80040003)
+#define OLE_E_NOCONNECTION _HRESULT_TYPEDEF_(0x80040004)
+#define OLE_E_NOTRUNNING _HRESULT_TYPEDEF_(0x80040005)
+#define OLE_E_NOCACHE _HRESULT_TYPEDEF_(0x80040006)
+#define OLE_E_BLANK _HRESULT_TYPEDEF_(0x80040007)
+#define OLE_E_CLASSDIFF _HRESULT_TYPEDEF_(0x80040008)
+#define OLE_E_CANT_GETMONIKER _HRESULT_TYPEDEF_(0x80040009)
+#define OLE_E_CANT_BINDTOSOURCE _HRESULT_TYPEDEF_(0x8004000A)
+#define OLE_E_STATIC _HRESULT_TYPEDEF_(0x8004000B)
+#define OLE_E_PROMPTSAVECANCELLED _HRESULT_TYPEDEF_(0x8004000C)
+#define OLE_E_INVALIDRECT _HRESULT_TYPEDEF_(0x8004000D)
+#define OLE_E_WRONGCOMPOBJ _HRESULT_TYPEDEF_(0x8004000E)
+#define OLE_E_INVALIDHWND _HRESULT_TYPEDEF_(0x8004000F)
+#define OLE_E_NOT_INPLACEACTIVE _HRESULT_TYPEDEF_(0x80040010)
+#define OLE_E_CANTCONVERT _HRESULT_TYPEDEF_(0x80040011)
+#define OLE_E_NOSTORAGE _HRESULT_TYPEDEF_(0x80040012)
+#define DV_E_FORMATETC _HRESULT_TYPEDEF_(0x80040064)
+#define DV_E_DVTARGETDEVICE _HRESULT_TYPEDEF_(0x80040065)
+#define DV_E_STGMEDIUM _HRESULT_TYPEDEF_(0x80040066)
+#define DV_E_STATDATA _HRESULT_TYPEDEF_(0x80040067)
+#define DV_E_LINDEX _HRESULT_TYPEDEF_(0x80040068)
+#define DV_E_TYMED _HRESULT_TYPEDEF_(0x80040069)
+#define DV_E_CLIPFORMAT _HRESULT_TYPEDEF_(0x8004006A)
+#define DV_E_DVASPECT _HRESULT_TYPEDEF_(0x8004006B)
+#define DV_E_DVTARGETDEVICE_SIZE _HRESULT_TYPEDEF_(0x8004006C)
+#define DV_E_NOIVIEWOBJECT _HRESULT_TYPEDEF_(0x8004006D)
+#define OLE_E_LAST _HRESULT_TYPEDEF_(0x800400FF)
+
+#define DRAGDROP_S_FIRST _HRESULT_TYPEDEF_(0x00040100)
+#define DRAGDROP_S_DROP _HRESULT_TYPEDEF_(0x00040100)
+#define DRAGDROP_S_CANCEL _HRESULT_TYPEDEF_(0x00040101)
+#define DRAGDROP_S_USEDEFAULTCURSORS _HRESULT_TYPEDEF_(0x00040102)
+#define DRAGDROP_S_LAST _HRESULT_TYPEDEF_(0x0004010F)
+
+#define DRAGDROP_E_FIRST _HRESULT_TYPEDEF_(0x80040100)
+#define DRAGDROP_E_NOTREGISTERED _HRESULT_TYPEDEF_(0x80040100)
+#define DRAGDROP_E_ALREADYREGISTERED _HRESULT_TYPEDEF_(0x80040101)
+#define DRAGDROP_E_INVALIDHWND _HRESULT_TYPEDEF_(0x80040102)
+#define DRAGDROP_E_LAST _HRESULT_TYPEDEF_(0x8004010F)
+
+
+#define CLASSFACTORY_S_FIRST _HRESULT_TYPEDEF_(0x00040110)
+#define CLASSFACTORY_S_LAST _HRESULT_TYPEDEF_(0x0004011F)
+
+#define CLASSFACTORY_E_FIRST _HRESULT_TYPEDEF_(0x80040110)
+#define CLASS_E_NOAGGREGATION _HRESULT_TYPEDEF_(0x80040110)
+#define CLASS_E_CLASSNOTAVAILABLE _HRESULT_TYPEDEF_(0x80040111)
+#define CLASS_E_NOTLICENSED _HRESULT_TYPEDEF_(0x80040112)
+#define CLASSFACTORY_E_LAST _HRESULT_TYPEDEF_(0x8004011F)
+
+#define MARSHAL_S_FIRST _HRESULT_TYPEDEF_(0x00040120)
+#define MARSHAL_S_LAST _HRESULT_TYPEDEF_(0x0004012F)
+
+#define MARSHAL_E_FIRST _HRESULT_TYPEDEF_(0x80040120)
+#define MARSHAL_E_LAST _HRESULT_TYPEDEF_(0x8004012F)
+
+#define DATA_S_FIRST _HRESULT_TYPEDEF_(0x00040130)
+#define DATA_S_SAMEFORMATETC _HRESULT_TYPEDEF_(0x00040130)
+#define DATA_S_LAST _HRESULT_TYPEDEF_(0x0004013F)
+
+#define DATA_E_FIRST _HRESULT_TYPEDEF_(0x80040130)
+#define DATA_E_LAST _HRESULT_TYPEDEF_(0x8004013F)
+
+#define VIEW_S_FIRST _HRESULT_TYPEDEF_(0x00040140)
+#define VIEW_S_ALREADY_FROZEN _HRESULT_TYPEDEF_(0x00040140)
+#define VIEW_S_LAST _HRESULT_TYPEDEF_(0x0004014F)
+
+#define VIEW_E_FIRST _HRESULT_TYPEDEF_(0x80040140)
+#define VIEW_E_DRAW _HRESULT_TYPEDEF_(0x80040140)
+#define VIEW_E_LAST _HRESULT_TYPEDEF_(0x8004014F)
+
+#define REGDB_S_FIRST _HRESULT_TYPEDEF_(0x00040150)
+#define REGDB_S_LAST _HRESULT_TYPEDEF_(0x0004015F)
+
+#define REGDB_E_FIRST _HRESULT_TYPEDEF_(0x80040150)
+#define REGDB_E_READREGDB _HRESULT_TYPEDEF_(0x80040150)
+#define REGDB_E_WRITEREGDB _HRESULT_TYPEDEF_(0x80040151)
+#define REGDB_E_KEYMISSING _HRESULT_TYPEDEF_(0x80040152)
+#define REGDB_E_INVALIDVALUE _HRESULT_TYPEDEF_(0x80040153)
+#define REGDB_E_CLASSNOTREG _HRESULT_TYPEDEF_(0x80040154)
+#define REGDB_E_IIDNOTREG _HRESULT_TYPEDEF_(0x80040155)
+#define REGDB_E_LAST _HRESULT_TYPEDEF_(0x8004015F)
+
+#define CAT_E_FIRST _HRESULT_TYPEDEF_(0x80040160)
+#define CAT_E_CATIDNOEXIST _HRESULT_TYPEDEF_(0x80040160)
+#define CAT_E_NODESCRIPTION _HRESULT_TYPEDEF_(0x80040161)
+#define CAT_E_LAST _HRESULT_TYPEDEF_(0x80040161)
+
+#define CACHE_S_FIRST _HRESULT_TYPEDEF_(0x00040170)
+#define CACHE_S_FORMATETC_NOTSUPPORTED _HRESULT_TYPEDEF_(0x00040170)
+#define CACHE_S_SAMECACHE _HRESULT_TYPEDEF_(0x00040171)
+#define CACHE_S_SOMECACHES_NOTUPDATED _HRESULT_TYPEDEF_(0x00040172)
+#define CACHE_S_LAST _HRESULT_TYPEDEF_(0x0004017F)
+
+#define CACHE_E_FIRST _HRESULT_TYPEDEF_(0x80040170)
+#define CACHE_E_NOCACHE_UPDATED _HRESULT_TYPEDEF_(0x80040170)
+#define CACHE_E_LAST _HRESULT_TYPEDEF_(0x8004017F)
+
+#define OLEOBJ_S_FIRST _HRESULT_TYPEDEF_(0x00040180)
+#define OLEOBJ_S_INVALIDVERB _HRESULT_TYPEDEF_(0x00040180)
+#define OLEOBJ_S_CANNOT_DOVERB_NOW _HRESULT_TYPEDEF_(0x00040181)
+#define OLEOBJ_S_INVALIDHWND _HRESULT_TYPEDEF_(0x00040182)
+#define OLEOBJ_S_LAST _HRESULT_TYPEDEF_(0x0004018F)
+
+#define OLEOBJ_E_FIRST _HRESULT_TYPEDEF_(0x80040180)
+#define OLEOBJ_E_NOVERBS _HRESULT_TYPEDEF_(0x80040180)
+#define OLEOBJ_E_INVALIDVERB _HRESULT_TYPEDEF_(0x80040181)
+#define OLEOBJ_E_LAST _HRESULT_TYPEDEF_(0x8004018F)
+
+#define CLIENTSITE_S_FIRST _HRESULT_TYPEDEF_(0x00040190)
+#define CLIENTSITE_S_LAST _HRESULT_TYPEDEF_(0x0004019F)
+
+#define CLIENTSITE_E_FIRST _HRESULT_TYPEDEF_(0x80040190)
+#define CLIENTSITE_E_LAST _HRESULT_TYPEDEF_(0x8004019F)
+
+#define INPLACE_S_FIRST _HRESULT_TYPEDEF_(0x000401A0)
+#define INPLACE_S_TRUNCATED _HRESULT_TYPEDEF_(0x000401A0)
+#define INPLACE_S_LAST _HRESULT_TYPEDEF_(0x000401AF)
+
+#define INPLACE_E_FIRST _HRESULT_TYPEDEF_(0x800401A0)
+#define INPLACE_E_NOTUNDOABLE _HRESULT_TYPEDEF_(0x800401A0)
+#define INPLACE_E_NOTOOLSPACE _HRESULT_TYPEDEF_(0x800401A1)
+#define INPLACE_E_LAST _HRESULT_TYPEDEF_(0x800401AF)
+
+#define ENUM_S_FIRST _HRESULT_TYPEDEF_(0x000401B0)
+#define ENUM_S_LAST _HRESULT_TYPEDEF_(0x000401BF)
+
+#define ENUM_E_FIRST _HRESULT_TYPEDEF_(0x800401B0)
+#define ENUM_E_LAST _HRESULT_TYPEDEF_(0x800401BF)
+
+#define CONVERT10_S_FIRST _HRESULT_TYPEDEF_(0x000401C0)
+#define CONVERT10_S_NO_PRESENTATION _HRESULT_TYPEDEF_(0x000401C0)
+#define CONVERT10_S_LAST _HRESULT_TYPEDEF_(0x000401CF)
+
+#define CONVERT10_E_FIRST _HRESULT_TYPEDEF_(0x800401C0)
+#define CONVERT10_E_OLESTREAM_GET _HRESULT_TYPEDEF_(0x800401C0)
+#define CONVERT10_E_OLESTREAM_PUT _HRESULT_TYPEDEF_(0x800401C1)
+#define CONVERT10_E_OLESTREAM_FMT _HRESULT_TYPEDEF_(0x800401C2)
+#define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB _HRESULT_TYPEDEF_(0x800401C3)
+#define CONVERT10_E_STG_FMT _HRESULT_TYPEDEF_(0x800401C4)
+#define CONVERT10_E_STG_NO_STD_STREAM _HRESULT_TYPEDEF_(0x800401C5)
+#define CONVERT10_E_STG_DIB_TO_BITMAP _HRESULT_TYPEDEF_(0x800401C6)
+#define CONVERT10_E_LAST _HRESULT_TYPEDEF_(0x800401CF)
+
+#define CLIPBRD_S_FIRST _HRESULT_TYPEDEF_(0x000401D0)
+#define CLIPBRD_S_LAST _HRESULT_TYPEDEF_(0x000401DF)
+
+#define CLIPBRD_E_FIRST _HRESULT_TYPEDEF_(0x800401D0)
+#define CLIPBRD_E_LAST _HRESULT_TYPEDEF_(0x800401DF)
+#define CLIPBRD_E_CANT_OPEN _HRESULT_TYPEDEF_(0x800401D0)
+#define CLIPBRD_E_CANT_EMPTY _HRESULT_TYPEDEF_(0x800401D1)
+#define CLIPBRD_E_CANT_SET _HRESULT_TYPEDEF_(0x800401D2)
+#define CLIPBRD_E_BAD_DATA _HRESULT_TYPEDEF_(0x800401D3)
+#define CLIPBRD_E_CANT_CLOSE _HRESULT_TYPEDEF_(0x800401D4)
+
+#define MK_S_FIRST _HRESULT_TYPEDEF_(0x000401E0)
+#define MK_S_REDUCED_TO_SELF _HRESULT_TYPEDEF_(0x000401E2)
+#define MK_S_ME _HRESULT_TYPEDEF_(0x000401E4)
+#define MK_S_HIM _HRESULT_TYPEDEF_(0x000401E5)
+#define MK_S_US _HRESULT_TYPEDEF_(0x000401E6)
+#define MK_S_MONIKERALREADYREGISTERED _HRESULT_TYPEDEF_(0x000401E7)
+#define MK_S_LAST _HRESULT_TYPEDEF_(0x000401EF)
+
+#define MK_E_FIRST _HRESULT_TYPEDEF_(0x800401E0)
+#define MK_E_CONNECTMANUALLY _HRESULT_TYPEDEF_(0x800401E0)
+#define MK_E_EXCEEDEDDEADLINE _HRESULT_TYPEDEF_(0x800401E1)
+#define MK_E_NEEDGENERIC _HRESULT_TYPEDEF_(0x800401E2)
+#define MK_E_UNAVAILABLE _HRESULT_TYPEDEF_(0x800401E3)
+#define MK_E_SYNTAX _HRESULT_TYPEDEF_(0x800401E4)
+#define MK_E_NOOBJECT _HRESULT_TYPEDEF_(0x800401E5)
+#define MK_E_INVALIDEXTENSION _HRESULT_TYPEDEF_(0x800401E6)
+#define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED _HRESULT_TYPEDEF_(0x800401E7)
+#define MK_E_NOTBINDABLE _HRESULT_TYPEDEF_(0x800401E8)
+#define MK_E_NOTBOUND _HRESULT_TYPEDEF_(0x800401E9)
+#define MK_E_CANTOPENFILE _HRESULT_TYPEDEF_(0x800401EA)
+#define MK_E_MUSTBOTHERUSER _HRESULT_TYPEDEF_(0x800401EB)
+#define MK_E_NOINVERSE _HRESULT_TYPEDEF_(0x800401EC)
+#define MK_E_NOSTORAGE _HRESULT_TYPEDEF_(0x800401ED)
+#define MK_E_NOPREFIX _HRESULT_TYPEDEF_(0x800401EE)
+#define MK_E_ENUMERATION_FAILED _HRESULT_TYPEDEF_(0x800401EF)
+#define MK_E_LAST _HRESULT_TYPEDEF_(0x800401EF)
+
+#define CO_S_FIRST _HRESULT_TYPEDEF_(0x000401F0)
+#define CO_S_LAST _HRESULT_TYPEDEF_(0x000401FF)
+
+#define CO_E_FIRST _HRESULT_TYPEDEF_(0x800401F0)
+#define CO_E_NOTINITIALIZED _HRESULT_TYPEDEF_(0x800401F0)
+#define CO_E_ALREADYINITIALIZED _HRESULT_TYPEDEF_(0x800401F1)
+#define CO_E_CANTDETERMINECLASS _HRESULT_TYPEDEF_(0x800401F2)
+#define CO_E_CLASSSTRING _HRESULT_TYPEDEF_(0x800401F3)
+#define CO_E_IIDSTRING _HRESULT_TYPEDEF_(0x800401F4)
+#define CO_E_APPNOTFOUND _HRESULT_TYPEDEF_(0x800401F5)
+#define CO_E_APPSINGLEUSE _HRESULT_TYPEDEF_(0x800401F6)
+#define CO_E_ERRORINAPP _HRESULT_TYPEDEF_(0x800401F7)
+#define CO_E_DLLNOTFOUND _HRESULT_TYPEDEF_(0x800401F8)
+#define CO_E_ERRORINDLL _HRESULT_TYPEDEF_(0x800401F9)
+#define CO_E_WRONGOSFORAPP _HRESULT_TYPEDEF_(0x800401FA)
+#define CO_E_OBJNOTREG _HRESULT_TYPEDEF_(0x800401FB)
+#define CO_E_OBJISREG _HRESULT_TYPEDEF_(0x800401FC)
+#define CO_E_OBJNOTCONNECTED _HRESULT_TYPEDEF_(0x800401FD)
+#define CO_E_APPDIDNTREG _HRESULT_TYPEDEF_(0x800401FE)
+#define CO_E_RELEASED _HRESULT_TYPEDEF_(0x800401FF)
+#define CO_E_LAST _HRESULT_TYPEDEF_(0x800401FF)
+#define CO_E_FAILEDTOIMPERSONATE _HRESULT_TYPEDEF_(0x80040200)
+#define CO_E_FAILEDTOGETSECCTX _HRESULT_TYPEDEF_(0x80040201)
+#define CO_E_FAILEDTOOPENTHREADTOKEN _HRESULT_TYPEDEF_(0x80040202)
+#define CO_E_FAILEDTOGETTOKENINFO _HRESULT_TYPEDEF_(0x80040203)
+#define CO_E_TRUSTEEDOESNTMATCHCLIENT _HRESULT_TYPEDEF_(0x80040204)
+#define CO_E_FAILEDTOQUERYCLIENTBLANKET _HRESULT_TYPEDEF_(0x80040205)
+#define CO_E_FAILEDTOSETDACL _HRESULT_TYPEDEF_(0x80040206)
+#define CO_E_ACCESSCHECKFAILED _HRESULT_TYPEDEF_(0x80040207)
+#define CO_E_NETACCESSAPIFAILED _HRESULT_TYPEDEF_(0x80040208)
+#define CO_E_WRONGTRUSTEENAMESYNTAX _HRESULT_TYPEDEF_(0x80040209)
+#define CO_E_INVALIDSID _HRESULT_TYPEDEF_(0x8004020A)
+#define CO_E_CONVERSIONFAILED _HRESULT_TYPEDEF_(0x8004020B)
+#define CO_E_NOMATCHINGSIDFOUND _HRESULT_TYPEDEF_(0x8004020C)
+#define CO_E_LOOKUPACCSIDFAILED _HRESULT_TYPEDEF_(0x8004020D)
+#define CO_E_NOMATCHINGNAMEFOUND _HRESULT_TYPEDEF_(0x8004020E)
+#define CO_E_LOOKUPACCNAMEFAILED _HRESULT_TYPEDEF_(0x8004020F)
+#define CO_E_SETSERLHNDLFAILED _HRESULT_TYPEDEF_(0x80040210)
+#define CO_E_FAILEDTOGETWINDIR _HRESULT_TYPEDEF_(0x80040211)
+#define CO_E_PATHTOOLONG _HRESULT_TYPEDEF_(0x80040212)
+#define CO_E_FAILEDTOGENUUID _HRESULT_TYPEDEF_(0x80040213)
+#define CO_E_FAILEDTOCREATEFILE _HRESULT_TYPEDEF_(0x80040214)
+#define CO_E_FAILEDTOCLOSEHANDLE _HRESULT_TYPEDEF_(0x80040215)
+#define CO_E_EXCEEDSYSACLLIMIT _HRESULT_TYPEDEF_(0x80040216)
+#define CO_E_ACESINWRONGORDER _HRESULT_TYPEDEF_(0x80040217)
+#define CO_E_INCOMPATIBLESTREAMVERSION _HRESULT_TYPEDEF_(0x80040218)
+#define CO_E_FAILEDTOOPENPROCESSTOKEN _HRESULT_TYPEDEF_(0x80040219)
+#define CO_E_DECODEFAILED _HRESULT_TYPEDEF_(0x8004021A)
+#define CO_E_ACNOTINITIALIZED _HRESULT_TYPEDEF_(0x8004021B)
+
+/* Task Scheduler Service Error Codes */
+#define SCHED_S_TASK_READY _HRESULT_TYPEDEF_(0x00041300)
+#define SCHED_S_TASK_RUNNING _HRESULT_TYPEDEF_(0x00041301)
+#define SCHED_S_TASK_DISABLED _HRESULT_TYPEDEF_(0x00041302)
+#define SCHED_S_TASK_HAS_NOT_RUN _HRESULT_TYPEDEF_(0x00041303)
+#define SCHED_S_TASK_NO_MORE_RUNS _HRESULT_TYPEDEF_(0x00041304)
+#define SCHED_S_TASK_NOT_SCHEDULED _HRESULT_TYPEDEF_(0x00041305)
+#define SCHED_S_TASK_TERMINATED _HRESULT_TYPEDEF_(0x00041306)
+#define SCHED_S_TASK_NO_VALID_TRIGGERS _HRESULT_TYPEDEF_(0x00041307)
+#define SCHED_S_EVENT_TRIGGER _HRESULT_TYPEDEF_(0x00041308)
+#define SCHED_E_TRIGGER_NOT_FOUND _HRESULT_TYPEDEF_(0x80041309)
+#define SCHED_E_TASK_NOT_READY _HRESULT_TYPEDEF_(0x8004130A)
+#define SCHED_E_TASK_NOT_RUNNING _HRESULT_TYPEDEF_(0x8004130B)
+#define SCHED_E_SERVICE_NOT_INSTALLED _HRESULT_TYPEDEF_(0x8004130C)
+#define SCHED_E_CANNOT_OPEN_TASK _HRESULT_TYPEDEF_(0x8004130D)
+#define SCHED_E_INVALID_TASK _HRESULT_TYPEDEF_(0x8004130E)
+#define SCHED_E_ACCOUNT_INFORMATION_NOT_SET _HRESULT_TYPEDEF_(0x8004130F)
+#define SCHED_E_ACCOUNT_NAME_NOT_FOUND _HRESULT_TYPEDEF_(0x80041310)
+#define SCHED_E_ACCOUNT_DBASE_CORRUPT _HRESULT_TYPEDEF_(0x80041311)
+#define SCHED_E_NO_SECURITY_SERVICES _HRESULT_TYPEDEF_(0x80041312)
+#define SCHED_E_UNKNOWN_OBJECT_VERSION _HRESULT_TYPEDEF_(0x80041313)
+#define SCHED_E_UNSUPPORTED_ACCOUNT_OPTION _HRESULT_TYPEDEF_(0x80041314)
+#define SCHED_E_SERVICE_NOT_RUNNING _HRESULT_TYPEDEF_(0x80041315)
+#define SCHED_E_UNEXPECTEDNODE _HRESULT_TYPEDEF_(0x80041316)
+#define SCHED_E_NAMESPACE _HRESULT_TYPEDEF_(0x80041317)
+#define SCHED_E_INVALIDVALUE _HRESULT_TYPEDEF_(0x80041318)
+#define SCHED_E_MISSINGNODE _HRESULT_TYPEDEF_(0x80041319)
+#define SCHED_E_MALFORMEDXML _HRESULT_TYPEDEF_(0x8004131A)
+#define SCHED_S_SOME_TRIGGERS_FAILED _HRESULT_TYPEDEF_(0x0004131B)
+#define SCHED_S_BATCH_LOGON_PROBLEM _HRESULT_TYPEDEF_(0x0004131C)
+#define SCHED_E_TOO_MANY_NODES _HRESULT_TYPEDEF_(0x8004131D)
+#define SCHED_E_PAST_END_BOUNDARY _HRESULT_TYPEDEF_(0x8004131E)
+#define SCHED_E_ALREADY_RUNNING _HRESULT_TYPEDEF_(0x8004131F)
+#define SCHED_E_USER_NOT_LOGGED_ON _HRESULT_TYPEDEF_(0x80041320)
+#define SCHED_E_INVALID_TASK_HASH _HRESULT_TYPEDEF_(0x80041321)
+#define SCHED_E_SERVICE_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x80041322)
+#define SCHED_E_SERVICE_TOO_BUSY _HRESULT_TYPEDEF_(0x80041323)
+#define SCHED_E_TASK_ATTEMPTED _HRESULT_TYPEDEF_(0x80041324)
+#define SCHED_S_TASK_QUEUED _HRESULT_TYPEDEF_(0x00041325)
+#define SCHED_E_TASK_DISABLED _HRESULT_TYPEDEF_(0x80041326)
+#define SCHED_E_TASK_NOT_V1_COMPAT _HRESULT_TYPEDEF_(0x80041327)
+#define SCHED_E_START_ON_DEMAND _HRESULT_TYPEDEF_(0x80041328)
+
+#define E_ACCESSDENIED _HRESULT_TYPEDEF_(0x80070005)
+#define E_HANDLE _HRESULT_TYPEDEF_(0x80070006)
+#define E_OUTOFMEMORY _HRESULT_TYPEDEF_(0x8007000E)
+#define E_INVALIDARG _HRESULT_TYPEDEF_(0x80070057)
+
+#define CO_S_NOTALLINTERFACES _HRESULT_TYPEDEF_(0x00080012)
+
+#define CO_E_CLASS_CREATE_FAILED _HRESULT_TYPEDEF_(0x80080001)
+#define CO_E_SCM_ERROR _HRESULT_TYPEDEF_(0x80080002)
+#define CO_E_SCM_RPC_FAILURE _HRESULT_TYPEDEF_(0x80080003)
+#define CO_E_BAD_PATH _HRESULT_TYPEDEF_(0x80080004)
+#define CO_E_SERVER_EXEC_FAILURE _HRESULT_TYPEDEF_(0x80080005)
+#define CO_E_OBJSRV_RPC_FAILURE _HRESULT_TYPEDEF_(0x80080006)
+#define MK_E_NO_NORMALIZED _HRESULT_TYPEDEF_(0x80080007)
+#define CO_E_SERVER_STOPPING _HRESULT_TYPEDEF_(0x80080008)
+#define MEM_E_INVALID_ROOT _HRESULT_TYPEDEF_(0x80080009)
+#define MEM_E_INVALID_LINK _HRESULT_TYPEDEF_(0x80080010)
+#define MEM_E_INVALID_SIZE _HRESULT_TYPEDEF_(0x80080011)
+
+/*Cryptographic Error Codes */
+#define NTE_BAD_UID _HRESULT_TYPEDEF_(0x80090001)
+#define NTE_BAD_HASH _HRESULT_TYPEDEF_(0x80090002)
+#define NTE_BAD_KEY _HRESULT_TYPEDEF_(0x80090003)
+#define NTE_BAD_LEN _HRESULT_TYPEDEF_(0x80090004)
+#define NTE_BAD_DATA _HRESULT_TYPEDEF_(0x80090005)
+#define NTE_BAD_SIGNATURE _HRESULT_TYPEDEF_(0x80090006)
+#define NTE_BAD_VER _HRESULT_TYPEDEF_(0x80090007)
+#define NTE_BAD_ALGID _HRESULT_TYPEDEF_(0x80090008)
+#define NTE_BAD_FLAGS _HRESULT_TYPEDEF_(0x80090009)
+#define NTE_BAD_TYPE _HRESULT_TYPEDEF_(0x8009000A)
+#define NTE_BAD_KEY_STATE _HRESULT_TYPEDEF_(0x8009000B)
+#define NTE_BAD_HASH_STATE _HRESULT_TYPEDEF_(0x8009000C)
+#define NTE_NO_KEY _HRESULT_TYPEDEF_(0x8009000D)
+#define NTE_NO_MEMORY _HRESULT_TYPEDEF_(0x8009000E)
+#define NTE_EXISTS _HRESULT_TYPEDEF_(0x8009000F)
+#define NTE_PERM _HRESULT_TYPEDEF_(0x80090010)
+#define NTE_NOT_FOUND _HRESULT_TYPEDEF_(0x80090011)
+#define NTE_DOUBLE_ENCRYPT _HRESULT_TYPEDEF_(0x80090012)
+#define NTE_BAD_PROVIDER _HRESULT_TYPEDEF_(0x80090013)
+#define NTE_BAD_PROV_TYPE _HRESULT_TYPEDEF_(0x80090014)
+#define NTE_BAD_PUBLIC_KEY _HRESULT_TYPEDEF_(0x80090015)
+#define NTE_BAD_KEYSET _HRESULT_TYPEDEF_(0x80090016)
+#define NTE_PROV_TYPE_NOT_DEF _HRESULT_TYPEDEF_(0x80090017)
+#define NTE_PROV_TYPE_ENTRY_BAD _HRESULT_TYPEDEF_(0x80090018)
+#define NTE_KEYSET_NOT_DEF _HRESULT_TYPEDEF_(0x80090019)
+#define NTE_KEYSET_ENTRY_BAD _HRESULT_TYPEDEF_(0x8009001A)
+#define NTE_PROV_TYPE_NO_MATCH _HRESULT_TYPEDEF_(0x8009001B)
+#define NTE_SIGNATURE_FILE_BAD _HRESULT_TYPEDEF_(0x8009001C)
+#define NTE_PROVIDER_DLL_FAIL _HRESULT_TYPEDEF_(0x8009001D)
+#define NTE_PROV_DLL_NOT_FOUND _HRESULT_TYPEDEF_(0x8009001E)
+#define NTE_BAD_KEYSET_PARAM _HRESULT_TYPEDEF_(0x8009001F)
+#define NTE_FAIL _HRESULT_TYPEDEF_(0x80090020)
+#define NTE_SYS_ERR _HRESULT_TYPEDEF_(0x80090021)
+#define NTE_SILENT_CONTEXT _HRESULT_TYPEDEF_(0x80090022)
+#define NTE_TOKEN_KEYSET_STORAGE_FULL _HRESULT_TYPEDEF_(0x80090023)
+#define NTE_TEMPORARY_PROFILE _HRESULT_TYPEDEF_(0x80090024)
+#define NTE_FIXEDPARAMETER _HRESULT_TYPEDEF_(0x80090025)
+#define NTE_OP_OK _HRESULT_TYPEDEF_(0)
+
+#define SEC_E_INSUFFICIENT_MEMORY _HRESULT_TYPEDEF_(0x80090300)
+#define SEC_E_INVALID_HANDLE _HRESULT_TYPEDEF_(0x80090301)
+#define SEC_E_UNSUPPORTED_FUNCTION _HRESULT_TYPEDEF_(0x80090302)
+#define SEC_E_TARGET_UNKNOWN _HRESULT_TYPEDEF_(0x80090303)
+#define SEC_E_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x80090304)
+#define SEC_E_SECPKG_NOT_FOUND _HRESULT_TYPEDEF_(0x80090305)
+#define SEC_E_NOT_OWNER _HRESULT_TYPEDEF_(0x80090306)
+#define SEC_E_CANNOT_INSTALL _HRESULT_TYPEDEF_(0x80090307)
+#define SEC_E_INVALID_TOKEN _HRESULT_TYPEDEF_(0x80090308)
+#define SEC_E_CANNOT_PACK _HRESULT_TYPEDEF_(0x80090309)
+#define SEC_E_QOP_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009030A)
+#define SEC_E_NO_IMPERSONATION _HRESULT_TYPEDEF_(0x8009030B)
+#define SEC_E_LOGON_DENIED _HRESULT_TYPEDEF_(0x8009030C)
+#define SEC_E_UNKNOWN_CREDENTIALS _HRESULT_TYPEDEF_(0x8009030D)
+#define SEC_E_NO_CREDENTIALS _HRESULT_TYPEDEF_(0x8009030E)
+#define SEC_E_MESSAGE_ALTERED _HRESULT_TYPEDEF_(0x8009030F)
+#define SEC_E_OUT_OF_SEQUENCE _HRESULT_TYPEDEF_(0x80090310)
+#define SEC_E_NO_AUTHENTICATING_AUTHORITY _HRESULT_TYPEDEF_(0x80090311)
+#define SEC_I_CONTINUE_NEEDED _HRESULT_TYPEDEF_(0x00090312)
+#define SEC_I_COMPLETE_NEEDED _HRESULT_TYPEDEF_(0x00090313)
+#define SEC_I_COMPLETE_AND_CONTINUE _HRESULT_TYPEDEF_(0x00090314)
+#define SEC_I_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x00090317)
+#define SEC_E_BAD_PKGID _HRESULT_TYPEDEF_(0x80090316)
+#define SEC_E_CONTEXT_EXPIRED _HRESULT_TYPEDEF_(0x80090317)
+#define SEC_E_INCOMPLETE_MESSAGE _HRESULT_TYPEDEF_(0x80090318)
+#define SEC_E_INCOMPLETE_CREDENTIALS _HRESULT_TYPEDEF_(0x80090320)
+#define SEC_E_BUFFER_TOO_SMALL _HRESULT_TYPEDEF_(0x80090321)
+#define SEC_E_WRONG_PRINCIPAL _HRESULT_TYPEDEF_(0x80090322)
+#define SEC_E_TIME_SKEW _HRESULT_TYPEDEF_(0x80090324)
+#define SEC_E_UNTRUSTED_ROOT _HRESULT_TYPEDEF_(0x80090325)
+#define SEC_E_ILLEGAL_MESSAGE _HRESULT_TYPEDEF_(0x80090326)
+#define SEC_E_CERT_UNKNOWN _HRESULT_TYPEDEF_(0x80090327)
+#define SEC_E_CERT_EXPIRED _HRESULT_TYPEDEF_(0x80090328)
+#define SEC_E_ENCRYPT_FAILURE _HRESULT_TYPEDEF_(0x80090329)
+#define SEC_E_DECRYPT_FAILURE _HRESULT_TYPEDEF_(0x80090330)
+#define SEC_E_ALGORITHM_MISMATCH _HRESULT_TYPEDEF_(0x80090331)
+#define SEC_E_SECURITY_QOS_FAILED _HRESULT_TYPEDEF_(0x80090332)
+#define SEC_E_UNFINISHED_CONTEXT_DELETED _HRESULT_TYPEDEF_(0x80090333)
+#define SEC_E_NO_TGT_REPLY _HRESULT_TYPEDEF_(0x80090334)
+#define SEC_E_NO_IP_ADDRESSES _HRESULT_TYPEDEF_(0x80090335)
+#define SEC_E_WRONG_CREDENTIAL_HANDLE _HRESULT_TYPEDEF_(0x80090336)
+#define SEC_E_CRYPTO_SYSTEM_INVALID _HRESULT_TYPEDEF_(0x80090337)
+#define SEC_E_MAX_REFERRALS_EXCEEDED _HRESULT_TYPEDEF_(0x80090338)
+#define SEC_E_MUST_BE_KDC _HRESULT_TYPEDEF_(0x80090339)
+#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009033A)
+#define SEC_E_TOO_MANY_PRINCIPALS _HRESULT_TYPEDEF_(0x8009033B)
+#define SEC_E_NO_PA_DATA _HRESULT_TYPEDEF_(0x8009033C)
+#define SEC_E_PKINIT_NAME_MISMATCH _HRESULT_TYPEDEF_(0x8009033D)
+#define SEC_E_SMARTCARD_LOGON_REQUIRED _HRESULT_TYPEDEF_(0x8009033E)
+#define SEC_E_SHUTDOWN_IN_PROGRESS _HRESULT_TYPEDEF_(0x8009033F)
+#define SEC_E_KDC_INVALID_REQUEST _HRESULT_TYPEDEF_(0x80090340)
+#define SEC_E_KDC_UNABLE_TO_REFER _HRESULT_TYPEDEF_(0x80090341)
+#define SEC_E_KDC_UNKNOWN_ETYPE _HRESULT_TYPEDEF_(0x80090342)
+#define SEC_E_UNSUPPORTED_PREAUTH _HRESULT_TYPEDEF_(0x80090343)
+#define SEC_E_DELEGATION_REQUIRED _HRESULT_TYPEDEF_(0x80090345)
+#define SEC_E_BAD_BINDINGS _HRESULT_TYPEDEF_(0x80090346)
+#define SEC_E_MULTIPLE_ACCOUNTS _HRESULT_TYPEDEF_(0x80090347)
+#define SEC_E_NO_KERB_KEY _HRESULT_TYPEDEF_(0x80090348)
+#define SEC_E_CERT_WRONG_USAGE _HRESULT_TYPEDEF_(0x80090349)
+#define SEC_E_DOWNGRADE_DETECTED _HRESULT_TYPEDEF_(0x80090350)
+#define SEC_E_SMARTCARD_CERT_REVOKED _HRESULT_TYPEDEF_(0x80090351)
+#define SEC_E_ISSUING_CA_UNTRUSTED _HRESULT_TYPEDEF_(0x80090352)
+#define SEC_E_REVOCATION_OFFLINE_C _HRESULT_TYPEDEF_(0x80090353)
+#define SEC_E_PKINIT_CLIENT_FAILURE _HRESULT_TYPEDEF_(0x80090354)
+#define SEC_E_SMARTCARD_CERT_EXPIRED _HRESULT_TYPEDEF_(0x80090355)
+#define SEC_E_NO_S4U_PROT_SUPPORT _HRESULT_TYPEDEF_(0x80090356)
+#define SEC_E_CROSSREALM_DELEGATION_FAILURE _HRESULT_TYPEDEF_(0x80090357)
+#define SEC_E_REVOCATION_OFFLINE_KDC _HRESULT_TYPEDEF_(0x80090358)
+#define SEC_E_ISSUING_CA_UNTRUSTED_KDC _HRESULT_TYPEDEF_(0x80090359)
+#define SEC_E_KDC_CERT_EXPIRED _HRESULT_TYPEDEF_(0x8009035A)
+#define SEC_E_KDC_CERT_REVOKED _HRESULT_TYPEDEF_(0x8009035B)
+
+#define CRYPT_E_MSG_ERROR _HRESULT_TYPEDEF_(0x80091001)
+#define CRYPT_E_UNKNOWN_ALGO _HRESULT_TYPEDEF_(0x80091002)
+#define CRYPT_E_OID_FORMAT _HRESULT_TYPEDEF_(0x80091003)
+#define CRYPT_E_INVALID_MSG_TYPE _HRESULT_TYPEDEF_(0x80091004)
+#define CRYPT_E_UNEXPECTED_ENCODING _HRESULT_TYPEDEF_(0x80091005)
+#define CRYPT_E_AUTH_ATTR_MISSING _HRESULT_TYPEDEF_(0x80091006)
+#define CRYPT_E_HASH_VALUE _HRESULT_TYPEDEF_(0x80091007)
+#define CRYPT_E_INVALID_INDEX _HRESULT_TYPEDEF_(0x80091008)
+#define CRYPT_E_ALREADY_DECRYPTED _HRESULT_TYPEDEF_(0x80091009)
+#define CRYPT_E_NOT_DECRYPTED _HRESULT_TYPEDEF_(0x8009100A)
+#define CRYPT_E_RECIPIENT_NOT_FOUND _HRESULT_TYPEDEF_(0x8009100B)
+#define CRYPT_E_CONTROL_TYPE _HRESULT_TYPEDEF_(0x8009100C)
+#define CRYPT_E_ISSUER_SERIALNUMBER _HRESULT_TYPEDEF_(0x8009100D)
+#define CRYPT_E_SIGNER_NOT_FOUND _HRESULT_TYPEDEF_(0x8009100E)
+#define CRYPT_E_ATTRIBUTES_MISSING _HRESULT_TYPEDEF_(0x8009100F)
+#define CRYPT_E_STREAM_MSG_NOT_READY _HRESULT_TYPEDEF_(0x80091010)
+#define CRYPT_E_STREAM_INSUFFICIENT_DATA _HRESULT_TYPEDEF_(0x80091011)
+#define CRYPT_I_NEW_PROTECTION_REQUIRED _HRESULT_TYPEDEF_(0x80091012)
+
+#define CRYPT_E_BAD_LEN _HRESULT_TYPEDEF_(0x80092001)
+#define CRYPT_E_BAD_ENCODE _HRESULT_TYPEDEF_(0x80092002)
+#define CRYPT_E_FILE_ERROR _HRESULT_TYPEDEF_(0x80092003)
+#define CRYPT_E_NOT_FOUND _HRESULT_TYPEDEF_(0x80092004)
+#define CRYPT_E_EXISTS _HRESULT_TYPEDEF_(0x80092005)
+#define CRYPT_E_NO_PROVIDER _HRESULT_TYPEDEF_(0x80092006)
+#define CRYPT_E_SELF_SIGNED _HRESULT_TYPEDEF_(0x80092007)
+#define CRYPT_E_DELETED_PREV _HRESULT_TYPEDEF_(0x80092008)
+#define CRYPT_E_NO_MATCH _HRESULT_TYPEDEF_(0x80092009)
+#define CRYPT_E_UNEXPECTED_MSG_TYPE _HRESULT_TYPEDEF_(0x8009200A)
+#define CRYPT_E_NO_KEY_PROPERTY _HRESULT_TYPEDEF_(0x8009200B)
+#define CRYPT_E_NO_DECRYPT_CERT _HRESULT_TYPEDEF_(0x8009200C)
+#define CRYPT_E_BAD_MSG _HRESULT_TYPEDEF_(0x8009200D)
+#define CRYPT_E_NO_SIGNER _HRESULT_TYPEDEF_(0x8009200E)
+#define CRYPT_E_PENDING_CLOSE _HRESULT_TYPEDEF_(0x8009200F)
+#define CRYPT_E_REVOKED _HRESULT_TYPEDEF_(0x80092010)
+#define CRYPT_E_NO_REVOCATION_DLL _HRESULT_TYPEDEF_(0x80092011)
+#define CRYPT_E_NO_REVOCATION_CHECK _HRESULT_TYPEDEF_(0x80092012)
+#define CRYPT_E_REVOCATION_OFFLINE _HRESULT_TYPEDEF_(0x80092013)
+#define CRYPT_E_NOT_IN_REVOCATION_DATABASE _HRESULT_TYPEDEF_(0x80092014)
+#define CRYPT_E_INVALID_NUMERIC_STRING _HRESULT_TYPEDEF_(0x80092020)
+#define CRYPT_E_INVALID_PRINTABLE_STRING _HRESULT_TYPEDEF_(0x80092021)
+#define CRYPT_E_INVALID_IA5_STRING _HRESULT_TYPEDEF_(0x80092022)
+#define CRYPT_E_INVALID_X500_STRING _HRESULT_TYPEDEF_(0x80092023)
+#define CRYPT_E_NOT_CHAR_STRING _HRESULT_TYPEDEF_(0x80092024)
+#define CRYPT_E_FILERESIZED _HRESULT_TYPEDEF_(0x80092025)
+#define CRYPT_E_SECURITY_SETTINGS _HRESULT_TYPEDEF_(0x80092026)
+#define CRYPT_E_NO_VERIFY_USAGE_DLL _HRESULT_TYPEDEF_(0x80092027)
+#define CRYPT_E_NO_VERIFY_USAGE_CHECK _HRESULT_TYPEDEF_(0x80092028)
+#define CRYPT_E_VERIFY_USAGE_OFFLINE _HRESULT_TYPEDEF_(0x80092029)
+#define CRYPT_E_NOT_IN_CTL _HRESULT_TYPEDEF_(0x8009202A)
+#define CRYPT_E_NO_TRUSTED_SIGNER _HRESULT_TYPEDEF_(0x8009202B)
+#define CRYPT_E_MISSING_PUBKEY_PARA _HRESULT_TYPEDEF_(0x8009202C)
+#define CRYPT_E_OSS_ERROR _HRESULT_TYPEDEF_(0x80093000)
+#define OSS_MORE_BUF _HRESULT_TYPEDEF_(0x80093001)
+#define OSS_NEGATIVE_UINTEGER _HRESULT_TYPEDEF_(0x80093002)
+#define OSS_PDU_RANGE _HRESULT_TYPEDEF_(0x80093003)
+#define OSS_MORE_INPUT _HRESULT_TYPEDEF_(0x80093004)
+#define OSS_DATA_ERROR _HRESULT_TYPEDEF_(0x80093005)
+#define OSS_BAD_ARG _HRESULT_TYPEDEF_(0x80093006)
+#define OSS_BAD_VERSION _HRESULT_TYPEDEF_(0x80093007)
+#define OSS_OUT_MEMORY _HRESULT_TYPEDEF_(0x80093008)
+#define OSS_PDU_MISMATCH _HRESULT_TYPEDEF_(0x80093009)
+#define OSS_LIMITED _HRESULT_TYPEDEF_(0x8009300A)
+#define OSS_BAD_PTR _HRESULT_TYPEDEF_(0x8009300B)
+#define OSS_BAD_TIME _HRESULT_TYPEDEF_(0x8009300C)
+#define OSS_INDEFINITE_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009300D)
+#define OSS_MEM_ERROR _HRESULT_TYPEDEF_(0x8009300E)
+#define OSS_BAD_TABLE _HRESULT_TYPEDEF_(0x8009300F)
+#define OSS_TOO_LONG _HRESULT_TYPEDEF_(0x80093010)
+#define OSS_CONSTRAINT_VIOLATED _HRESULT_TYPEDEF_(0x80093011)
+#define OSS_FATAL_ERROR _HRESULT_TYPEDEF_(0x80093012)
+#define OSS_ACCESS_SERIALIZATION_ERROR _HRESULT_TYPEDEF_(0x80093013)
+#define OSS_NULL_TBL _HRESULT_TYPEDEF_(0x80093014)
+#define OSS_NULL_FCN _HRESULT_TYPEDEF_(0x80093015)
+#define OSS_BAD_ENCRULES _HRESULT_TYPEDEF_(0x80093016)
+#define OSS_UNAVAIL_ENCRULES _HRESULT_TYPEDEF_(0x80093017)
+#define OSS_CANT_OPEN_TRACE_WINDOW _HRESULT_TYPEDEF_(0x80093018)
+#define OSS_UNIMPLEMENTED _HRESULT_TYPEDEF_(0x80093019)
+#define OSS_OID_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009301A)
+#define OSS_CANT_OPEN_TRACE_FILE _HRESULT_TYPEDEF_(0x8009301B)
+#define OSS_TRACE_FILE_ALREADY_OPEN _HRESULT_TYPEDEF_(0x8009301C)
+#define OSS_TABLE_MISMATCH _HRESULT_TYPEDEF_(0x8009301D)
+#define OSS_TYPE_NOT_SUPPORTED _HRESULT_TYPEDEF_(0x8009301E)
+#define OSS_REAL_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009301F)
+#define OSS_REAL_CODE_NOT_LINKED _HRESULT_TYPEDEF_(0x80093020)
+#define OSS_OUT_OF_RANGE _HRESULT_TYPEDEF_(0x80093021)
+#define OSS_COPIER_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093022)
+#define OSS_CONSTRAINT_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093023)
+#define OSS_COMPARATOR_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093024)
+#define OSS_COMPARATOR_CODE_NOT_LINKED _HRESULT_TYPEDEF_(0x80093025)
+#define OSS_MEM_MGR_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093026)
+#define OSS_PDV_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093027)
+#define OSS_PDV_CODE_NOT_LINKED _HRESULT_TYPEDEF_(0x80093028)
+#define OSS_API_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x80093029)
+#define OSS_BERDER_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009302A)
+#define OSS_PER_DLL_NOT_LINKED _HRESULT_TYPEDEF_(0x8009302B)
+#define OSS_OPEN_TYPE_ERROR _HRESULT_TYPEDEF_(0x8009302C)
+#define OSS_MUTEX_NOT_CREATED _HRESULT_TYPEDEF_(0x8009302D)
+#define OSS_CANT_CLOSE_TRACE_FILE _HRESULT_TYPEDEF_(0x8009302E)
+#define CRYPT_E_ASN1_ERROR _HRESULT_TYPEDEF_(0x80093100)
+#define CRYPT_E_ASN1_INTERNAL _HRESULT_TYPEDEF_(0x80093101)
+#define CRYPT_E_ASN1_EOD _HRESULT_TYPEDEF_(0x80093102)
+#define CRYPT_E_ASN1_CORRUPT _HRESULT_TYPEDEF_(0x80093103)
+#define CRYPT_E_ASN1_LARGE _HRESULT_TYPEDEF_(0x80093104)
+#define CRYPT_E_ASN1_CONSTRAINT _HRESULT_TYPEDEF_(0x80093105)
+#define CRYPT_E_ASN1_MEMORY _HRESULT_TYPEDEF_(0x80093106)
+#define CRYPT_E_ASN1_OVERFLOW _HRESULT_TYPEDEF_(0x80093107)
+#define CRYPT_E_ASN1_BADPDU _HRESULT_TYPEDEF_(0x80093108)
+#define CRYPT_E_ASN1_BADARGS _HRESULT_TYPEDEF_(0x80093109)
+#define CRYPT_E_ASN1_BADREAL _HRESULT_TYPEDEF_(0x8009310A)
+#define CRYPT_E_ASN1_BADTAG _HRESULT_TYPEDEF_(0x8009310B)
+#define CRYPT_E_ASN1_CHOICE _HRESULT_TYPEDEF_(0x8009310C)
+#define CRYPT_E_ASN1_RULE _HRESULT_TYPEDEF_(0x8009310D)
+#define CRYPT_E_ASN1_UTF8 _HRESULT_TYPEDEF_(0x8009310E)
+#define CRYPT_E_ASN1_PDU_TYPE _HRESULT_TYPEDEF_(0x80093133)
+#define CRYPT_E_ASN1_NYI _HRESULT_TYPEDEF_(0x80093134)
+#define CRYPT_E_ASN1_EXTENDED _HRESULT_TYPEDEF_(0x80093201)
+#define CRYPT_E_ASN1_NOEOD _HRESULT_TYPEDEF_(0x80093202)
+
+#define TRUST_E_SYSTEM_ERROR _HRESULT_TYPEDEF_(0x80096001)
+#define TRUST_E_NO_SIGNER_CERT _HRESULT_TYPEDEF_(0x80096002)
+#define TRUST_E_COUNTER_SIGNER _HRESULT_TYPEDEF_(0x80096003)
+#define TRUST_E_CERT_SIGNATURE _HRESULT_TYPEDEF_(0x80096004)
+#define TRUST_E_TIME_STAMP _HRESULT_TYPEDEF_(0x80096005)
+#define TRUST_E_BAD_DIGEST _HRESULT_TYPEDEF_(0x80096010)
+#define TRUST_E_BASIC_CONSTRAINTS _HRESULT_TYPEDEF_(0x80096019)
+#define TRUST_E_FINANCIAL_CRITERIA _HRESULT_TYPEDEF_(0x8009601E)
+#define TRUST_E_PROVIDER_UNKNOWN _HRESULT_TYPEDEF_(0x800B0001)
+#define TRUST_E_ACTION_UNKNOWN _HRESULT_TYPEDEF_(0x800B0002)
+#define TRUST_E_SUBJECT_FORM_UNKNOWN _HRESULT_TYPEDEF_(0x800B0003)
+#define TRUST_E_SUBJECT_NOT_TRUSTED _HRESULT_TYPEDEF_(0x800B0004)
+#define TRUST_E_NOSIGNATURE _HRESULT_TYPEDEF_(0x800B0100)
+#define CERT_E_EXPIRED _HRESULT_TYPEDEF_(0x800B0101)
+#define CERT_E_VALIDITYPERIODNESTING _HRESULT_TYPEDEF_(0x800B0102)
+#define CERT_E_ROLE _HRESULT_TYPEDEF_(0x800B0103)
+#define CERT_E_PATHLENCONST _HRESULT_TYPEDEF_(0x800B0104)
+#define CERT_E_CRITICAL _HRESULT_TYPEDEF_(0x800B0105)
+#define CERT_E_PURPOSE _HRESULT_TYPEDEF_(0x800B0106)
+#define CERT_E_ISSUERCHAINING _HRESULT_TYPEDEF_(0x800B0107)
+#define CERT_E_MALFORMED _HRESULT_TYPEDEF_(0x800B0108)
+#define CERT_E_UNTRUSTEDROOT _HRESULT_TYPEDEF_(0x800B0109)
+#define CERT_E_CHAINING _HRESULT_TYPEDEF_(0x800B010A)
+#define TRUST_E_FAIL _HRESULT_TYPEDEF_(0x800B010B)
+#define CERT_E_REVOKED _HRESULT_TYPEDEF_(0x800B010C)
+#define CERT_E_UNTRUSTEDTESTROOT _HRESULT_TYPEDEF_(0x800B010D)
+#define CERT_E_REVOCATION_FAILURE _HRESULT_TYPEDEF_(0x800B010E)
+#define CERT_E_CN_NO_MATCH _HRESULT_TYPEDEF_(0x800B010F)
+#define CERT_E_WRONG_USAGE _HRESULT_TYPEDEF_(0x800B0110)
+#define TRUST_E_EXPLICIT_DISTRUST _HRESULT_TYPEDEF_(0x800B0111)
+#define CERT_E_UNTRUSTEDCA _HRESULT_TYPEDEF_(0x800B0112)
+#define CERT_E_INVALID_POLICY _HRESULT_TYPEDEF_(0x800B0113)
+#define CERT_E_INVALID_NAME _HRESULT_TYPEDEF_(0x800B0114)
+
+#define SPAPI_E_EXPECTED_SECTION_NAME _HRESULT_TYPEDEF_(0x800F0000)
+#define SPAPI_E_BAD_SECTION_NAME_LINE _HRESULT_TYPEDEF_(0x800F0001)
+#define SPAPI_E_SECTION_NAME_TOO_LONG _HRESULT_TYPEDEF_(0x800F0002)
+#define SPAPI_E_GENERAL_SYNTAX _HRESULT_TYPEDEF_(0x800F0003)
+#define SPAPI_E_WRONG_INF_STYLE _HRESULT_TYPEDEF_(0x800F0100)
+#define SPAPI_E_SECTION_NOT_FOUND _HRESULT_TYPEDEF_(0x800F0101)
+#define SPAPI_E_LINE_NOT_FOUND _HRESULT_TYPEDEF_(0x800F0102)
+#define SPAPI_E_NO_BACKUP _HRESULT_TYPEDEF_(0x800F0103)
+#define SPAPI_E_NO_ASSOCIATED_CLASS _HRESULT_TYPEDEF_(0x800F0200)
+#define SPAPI_E_CLASS_MISMATCH _HRESULT_TYPEDEF_(0x800F0201)
+#define SPAPI_E_DUPLICATE_FOUND _HRESULT_TYPEDEF_(0x800F0202)
+#define SPAPI_E_NO_DRIVER_SELECTED _HRESULT_TYPEDEF_(0x800F0203)
+#define SPAPI_E_KEY_DOES_NOT_EXIST _HRESULT_TYPEDEF_(0x800F0204)
+#define SPAPI_E_INVALID_DEVINST_NAME _HRESULT_TYPEDEF_(0x800F0205)
+#define SPAPI_E_INVALID_CLASS _HRESULT_TYPEDEF_(0x800F0206)
+#define SPAPI_E_DEVINST_ALREADY_EXISTS _HRESULT_TYPEDEF_(0x800F0207)
+#define SPAPI_E_DEVINFO_NOT_REGISTERED _HRESULT_TYPEDEF_(0x800F0208)
+#define SPAPI_E_INVALID_REG_PROPERTY _HRESULT_TYPEDEF_(0x800F0209)
+#define SPAPI_E_NO_INF _HRESULT_TYPEDEF_(0x800F020A)
+#define SPAPI_E_NO_SUCH_DEVINST _HRESULT_TYPEDEF_(0x800F020B)
+#define SPAPI_E_CANT_LOAD_CLASS_ICON _HRESULT_TYPEDEF_(0x800F020C)
+#define SPAPI_E_INVALID_CLASS_INSTALLER _HRESULT_TYPEDEF_(0x800F020D)
+#define SPAPI_E_DI_DO_DEFAULT _HRESULT_TYPEDEF_(0x800F020E)
+#define SPAPI_E_DI_NOFILECOPY _HRESULT_TYPEDEF_(0x800F020F)
+#define SPAPI_E_INVALID_HWPROFILE _HRESULT_TYPEDEF_(0x800F0210)
+#define SPAPI_E_NO_DEVICE_SELECTED _HRESULT_TYPEDEF_(0x800F0211)
+#define SPAPI_E_DEVINFO_LIST_LOCKED _HRESULT_TYPEDEF_(0x800F0212)
+#define SPAPI_E_DEVINFO_DATA_LOCKED _HRESULT_TYPEDEF_(0x800F0213)
+#define SPAPI_E_DI_BAD_PATH _HRESULT_TYPEDEF_(0x800F0214)
+#define SPAPI_E_NO_CLASSINSTALL_PARAMS _HRESULT_TYPEDEF_(0x800F0215)
+#define SPAPI_E_FILEQUEUE_LOCKED _HRESULT_TYPEDEF_(0x800F0216)
+#define SPAPI_E_BAD_SERVICE_INSTALLSECT _HRESULT_TYPEDEF_(0x800F0217)
+#define SPAPI_E_NO_CLASS_DRIVER_LIST _HRESULT_TYPEDEF_(0x800F0218)
+#define SPAPI_E_NO_ASSOCIATED_SERVICE _HRESULT_TYPEDEF_(0x800F0219)
+#define SPAPI_E_NO_DEFAULT_DEVICE_INTERFACE _HRESULT_TYPEDEF_(0x800F021A)
+#define SPAPI_E_DEVICE_INTERFACE_ACTIVE _HRESULT_TYPEDEF_(0x800F021B)
+#define SPAPI_E_DEVICE_INTERFACE_REMOVED _HRESULT_TYPEDEF_(0x800F021C)
+#define SPAPI_E_BAD_INTERFACE_INSTALLSECT _HRESULT_TYPEDEF_(0x800F021D)
+#define SPAPI_E_NO_SUCH_INTERFACE_CLASS _HRESULT_TYPEDEF_(0x800F021E)
+#define SPAPI_E_INVALID_REFERENCE_STRING _HRESULT_TYPEDEF_(0x800F021F)
+#define SPAPI_E_INVALID_MACHINENAME _HRESULT_TYPEDEF_(0x800F0220)
+#define SPAPI_E_REMOTE_COMM_FAILURE _HRESULT_TYPEDEF_(0x800F0221)
+#define SPAPI_E_MACHINE_UNAVAILABLE _HRESULT_TYPEDEF_(0x800F0222)
+#define SPAPI_E_NO_CONFIGMGR_SERVICES _HRESULT_TYPEDEF_(0x800F0223)
+#define SPAPI_E_INVALID_PROPPAGE_PROVIDER _HRESULT_TYPEDEF_(0x800F0224)
+#define SPAPI_E_NO_SUCH_DEVICE_INTERFACE _HRESULT_TYPEDEF_(0x800F0225)
+#define SPAPI_E_DI_POSTPROCESSING_REQUIRED _HRESULT_TYPEDEF_(0x800F0226)
+#define SPAPI_E_INVALID_COINSTALLER _HRESULT_TYPEDEF_(0x800F0227)
+#define SPAPI_E_NO_COMPAT_DRIVERS _HRESULT_TYPEDEF_(0x800F0228)
+#define SPAPI_E_NO_DEVICE_ICON _HRESULT_TYPEDEF_(0x800F0229)
+#define SPAPI_E_INVALID_INF_LOGCONFIG _HRESULT_TYPEDEF_(0x800F022A)
+#define SPAPI_E_DI_DONT_INSTALL _HRESULT_TYPEDEF_(0x800F022B)
+#define SPAPI_E_INVALID_FILTER_DRIVER _HRESULT_TYPEDEF_(0x800F022C)
+#define SPAPI_E_NON_WINDOWS_NT_DRIVER _HRESULT_TYPEDEF_(0x800F022D)
+#define SPAPI_E_NON_WINDOWS_DRIVER _HRESULT_TYPEDEF_(0x800F022E)
+#define SPAPI_E_NO_CATALOG_FOR_OEM_INF _HRESULT_TYPEDEF_(0x800F022F)
+#define SPAPI_E_DEVINSTALL_QUEUE_NONNATIVE _HRESULT_TYPEDEF_(0x800F0230)
+#define SPAPI_E_NOT_DISABLEABLE _HRESULT_TYPEDEF_(0x800F0231)
+#define SPAPI_E_CANT_REMOVE_DEVINST _HRESULT_TYPEDEF_(0x800F0232)
+#define SPAPI_E_INVALID_TARGET _HRESULT_TYPEDEF_(0x800F0233)
+#define SPAPI_E_DRIVER_NONNATIVE _HRESULT_TYPEDEF_(0x800F0234)
+#define SPAPI_E_IN_WOW64 _HRESULT_TYPEDEF_(0x800F0235)
+#define SPAPI_E_SET_SYSTEM_RESTORE_POINT _HRESULT_TYPEDEF_(0x800F0236)
+#define SPAPI_E_INCORRECTLY_COPIED_INF _HRESULT_TYPEDEF_(0x800F0237)
+#define SPAPI_E_SCE_DISABLED _HRESULT_TYPEDEF_(0x800F0238)
+#define SPAPI_E_ERROR_NOT_INSTALLED _HRESULT_TYPEDEF_(0x800F1000)
+
+/* Smart card management error codes */
+#define SCARD_S_SUCCESS NO_ERROR
+#define SCARD_F_INTERNAL_ERROR _HRESULT_TYPEDEF_(0x80100001)
+#define SCARD_E_CANCELLED _HRESULT_TYPEDEF_(0x80100002)
+#define SCARD_E_INVALID_HANDLE _HRESULT_TYPEDEF_(0x80100003)
+#define SCARD_E_INVALID_PARAMETER _HRESULT_TYPEDEF_(0x80100004)
+#define SCARD_E_INVALID_TARGET _HRESULT_TYPEDEF_(0x80100005)
+#define SCARD_E_NO_MEMORY _HRESULT_TYPEDEF_(0x80100006)
+#define SCARD_F_WAITED_TOO_LONG _HRESULT_TYPEDEF_(0x80100007)
+#define SCARD_E_INSUFFICIENT_BUFFER _HRESULT_TYPEDEF_(0x80100008)
+#define SCARD_E_UNKNOWN_READER _HRESULT_TYPEDEF_(0x80100009)
+#define SCARD_E_TIMEOUT _HRESULT_TYPEDEF_(0x8010000A)
+#define SCARD_E_SHARING_VIOLATION _HRESULT_TYPEDEF_(0x8010000B)
+#define SCARD_E_NO_SMARTCARD _HRESULT_TYPEDEF_(0x8010000C)
+#define SCARD_E_UNKNOWN_CARD _HRESULT_TYPEDEF_(0x8010000D)
+#define SCARD_E_CANT_DISPOSE _HRESULT_TYPEDEF_(0x8010000E)
+#define SCARD_E_PROTO_MISMATCH _HRESULT_TYPEDEF_(0x8010000F)
+#define SCARD_E_NOT_READY _HRESULT_TYPEDEF_(0x80100010)
+#define SCARD_E_INVALID_VALUE _HRESULT_TYPEDEF_(0x80100011)
+#define SCARD_E_SYSTEM_CANCELLED _HRESULT_TYPEDEF_(0x80100012)
+#define SCARD_F_COMM_ERROR _HRESULT_TYPEDEF_(0x80100013)
+#define SCARD_F_UNKNOWN_ERROR _HRESULT_TYPEDEF_(0x80100014)
+#define SCARD_E_INVALID_ATR _HRESULT_TYPEDEF_(0x80100015)
+#define SCARD_E_NOT_TRANSACTED _HRESULT_TYPEDEF_(0x80100016)
+#define SCARD_E_READER_UNAVAILABLE _HRESULT_TYPEDEF_(0x80100017)
+#define SCARD_P_SHUTDOWN _HRESULT_TYPEDEF_(0x80100018)
+#define SCARD_E_PCI_TOO_SMALL _HRESULT_TYPEDEF_(0x80100019)
+#define SCARD_E_READER_UNSUPPORTED _HRESULT_TYPEDEF_(0x8010001A)
+#define SCARD_E_DUPLICATE_READER _HRESULT_TYPEDEF_(0x8010001B)
+#define SCARD_E_CARD_UNSUPPORTED _HRESULT_TYPEDEF_(0x8010001C)
+#define SCARD_E_NO_SERVICE _HRESULT_TYPEDEF_(0x8010001D)
+#define SCARD_E_SERVICE_STOPPED _HRESULT_TYPEDEF_(0x8010001E)
+#define SCARD_E_UNEXPECTED _HRESULT_TYPEDEF_(0x8010001F)
+#define SCARD_E_ICC_INSTALLATION _HRESULT_TYPEDEF_(0x80100020)
+#define SCARD_E_ICC_CREATEORDER _HRESULT_TYPEDEF_(0x80100021)
+#define SCARD_E_UNSUPPORTED_FEATURE _HRESULT_TYPEDEF_(0x80100022)
+#define SCARD_E_DIR_NOT_FOUND _HRESULT_TYPEDEF_(0x80100023)
+#define SCARD_E_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0x80100024)
+#define SCARD_E_NO_DIR _HRESULT_TYPEDEF_(0x80100025)
+#define SCARD_E_NO_FILE _HRESULT_TYPEDEF_(0x80100026)
+#define SCARD_E_NO_ACCESS _HRESULT_TYPEDEF_(0x80100027)
+#define SCARD_E_WRITE_TOO_MANY _HRESULT_TYPEDEF_(0x80100028)
+#define SCARD_E_BAD_SEEK _HRESULT_TYPEDEF_(0x80100029)
+#define SCARD_E_INVALID_CHV _HRESULT_TYPEDEF_(0x8010002A)
+#define SCARD_E_UNKNOWN_RES_MNG _HRESULT_TYPEDEF_(0x8010002B)
+#define SCARD_E_NO_SUCH_CERTIFICATE _HRESULT_TYPEDEF_(0x8010002C)
+#define SCARD_E_CERTIFICATE_UNAVAILABLE _HRESULT_TYPEDEF_(0x8010002D)
+#define SCARD_E_NO_READERS_AVAILABLE _HRESULT_TYPEDEF_(0x8010002E)
+#define SCARD_E_COMM_DATA_LOST _HRESULT_TYPEDEF_(0x8010002F)
+#define SCARD_E_NO_KEY_CONTAINER _HRESULT_TYPEDEF_(0x80100030)
+#define SCARD_E_SERVER_TOO_BUSY _HRESULT_TYPEDEF_(0x80100031)
+#define SCARD_W_UNSUPPORTED_CARD _HRESULT_TYPEDEF_(0x80100065)
+#define SCARD_W_UNRESPONSIVE_CARD _HRESULT_TYPEDEF_(0x80100066)
+#define SCARD_W_UNPOWERED_CARD _HRESULT_TYPEDEF_(0x80100067)
+#define SCARD_W_RESET_CARD _HRESULT_TYPEDEF_(0x80100068)
+#define SCARD_W_REMOVED_CARD _HRESULT_TYPEDEF_(0x80100069)
+#define SCARD_W_SECURITY_VIOLATION _HRESULT_TYPEDEF_(0x8010006A)
+#define SCARD_W_WRONG_CHV _HRESULT_TYPEDEF_(0x8010006B)
+#define SCARD_W_CHV_BLOCKED _HRESULT_TYPEDEF_(0x8010006C)
+#define SCARD_W_EOF _HRESULT_TYPEDEF_(0x8010006D)
+#define SCARD_W_CANCELLED_BY_USER _HRESULT_TYPEDEF_(0x8010006E)
+#define SCARD_W_CARD_NOT_AUTHENTICATED _HRESULT_TYPEDEF_(0x8010006F)
+#define SCARD_W_CACHE_ITEM_NOT_FOUND _HRESULT_TYPEDEF_(0x80100070)
+#define SCARD_W_CACHE_ITEM_STALE _HRESULT_TYPEDEF_(0x80100071)
+#define SCARD_W_CACHE_ITEM_TOO_BIG _HRESULT_TYPEDEF_(0x80100072)
+
+#define ERROR_AUDITING_DISABLED _HRESULT_TYPEDEF_(0xC0090001)
+#define ERROR_ALL_SIDS_FILTERED _HRESULT_TYPEDEF_(0xC0090002)
+
+#endif /* __WINE_WINERROR_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h
new file mode 100644
index 00000000..a03483d9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winevt.h
@@ -0,0 +1,141 @@
+/* Definitions for the Windows Event Log (wevtapi.dll)
+ *
+ * Copyright 2012 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINEVT_H
+#define __WINE_WINEVT_H
+
+#include <wtypes.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef HANDLE EVT_HANDLE, *PEVT_HANDLE;
+
+typedef enum _EVT_CHANNEL_CONFIG_PROPERTY_ID {
+ EvtChannelConfigEnabled = 0,
+ EvtChannelConfigIsolation,
+ EvtChannelConfigType,
+ EvtChannelConfigOwningPublisher,
+ EvtChannelConfigClassicEventlog,
+ EvtChannelConfigAccess,
+ EvtChannelLoggingConfigRetention,
+ EvtChannelLoggingConfigAutoBackup,
+ EvtChannelLoggingConfigMaxSize,
+ EvtChannelLoggingConfigLogFilePath,
+ EvtChannelPublishingConfigLevel,
+ EvtChannelPublishingConfigKeywords,
+ EvtChannelPublishingConfigControlGuid,
+ EvtChannelPublishingConfigBufferSize,
+ EvtChannelPublishingConfigMinBuffers,
+ EvtChannelPublishingConfigMaxBuffers,
+ EvtChannelPublishingConfigLatency,
+ EvtChannelPublishingConfigClockType,
+ EvtChannelPublishingConfigSidType,
+ EvtChannelPublisherList,
+ EvtChannelPublishingConfigFileMax,
+ EvtChannelConfigPropertyIdEND
+} EVT_CHANNEL_CONFIG_PROPERTY_ID;
+
+typedef enum _EVT_SUBSCRIBE_NOTIFY_ACTION {
+ EvtSubscribeActionError = 0,
+ EvtSubscribeActionDeliver
+} EVT_SUBSCRIBE_NOTIFY_ACTION;
+
+typedef struct _EVT_VARIANT {
+ union {
+ BOOL BooleanVal;
+ INT8 SByteVal;
+ INT16 Int16Val;
+ INT32 Int32Val;
+ INT64 Int64Val;
+ UINT8 ByteVal;
+ UINT16 UInt16Val;
+ UINT32 UInt32Val;
+ UINT64 UInt64Val;
+ FLOAT SingleVal;
+ DOUBLE DoubleVal;
+ ULONGLONG FileTimeVal;
+ SYSTEMTIME* SysTimeVal;
+ GUID* GuidVal;
+ LPCWSTR StringVal;
+ LPCSTR AnsiStringVal;
+ PBYTE BinaryVal;
+ PSID SidVal;
+ SIZE_T SizeTVal;
+
+ BOOL* BooleanArr;
+ INT8* SByteArr;
+ INT16* Int16Arr;
+ INT32* Int32Arr;
+ INT64* Int64Arr;
+ UINT8* ByteArr;
+ UINT16* UInt16Arr;
+ UINT32* UInt32Arr;
+ UINT64* UInt64Arr;
+ FLOAT* SingleArr;
+ DOUBLE* DoubleArr;
+ FILETIME* FileTimeArr;
+ SYSTEMTIME* SysTimeArr;
+ GUID* GuidArr;
+ LPWSTR* StringArr;
+ LPSTR* AnsiStringArr;
+ PSID* SidArr;
+ SIZE_T* SizeTArr;
+
+ EVT_HANDLE EvtHandleVal;
+ LPCWSTR XmlVal;
+ LPCWSTR* XmlValArr;
+ } DUMMYUNIONNAME;
+
+ DWORD Count;
+ DWORD Type;
+} EVT_VARIANT, *PEVT_VARIANT;
+
+typedef DWORD (WINAPI *EVT_SUBSCRIBE_CALLBACK)(EVT_SUBSCRIBE_NOTIFY_ACTION Action,
+ PVOID UserContext, EVT_HANDLE Event);
+
+BOOL WINAPI EvtGetChannelConfigProperty(EVT_HANDLE ChannelConfig,
+ EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,
+ DWORD Flags, DWORD PropertyValueBufferSize,
+ PEVT_VARIANT PropertyValueBuffer,
+ PDWORD PropertyValueBufferUsed);
+BOOL WINAPI EvtSetChannelConfigProperty(EVT_HANDLE ChannelConfig,
+ EVT_CHANNEL_CONFIG_PROPERTY_ID PropertyId,
+ DWORD Flags, PEVT_VARIANT PropertyValue);
+EVT_HANDLE WINAPI EvtSubscribe(EVT_HANDLE Session, HANDLE SignalEvent, LPCWSTR ChannelPath,
+ LPCWSTR Query, EVT_HANDLE Bookmark, PVOID context,
+ EVT_SUBSCRIBE_CALLBACK Callback, DWORD Flags);
+EVT_HANDLE WINAPI EvtOpenChannelConfig(EVT_HANDLE Session, LPCWSTR ChannelPath, DWORD Flags);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINEVT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h
new file mode 100644
index 00000000..b537bf31
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wingdi.h
@@ -0,0 +1,3809 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINGDI_
+#define _WINGDI_
+#ifndef NOGDI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _GDI32_
+#define WINGDIAPI
+#else
+#define WINGDIAPI DECLSPEC_IMPORT
+#endif
+
+typedef struct _ABCFLOAT {
+ FLOAT abcfA;
+ FLOAT abcfB;
+ FLOAT abcfC;
+} ABCFLOAT, *PABCFLOAT, *LPABCFLOAT;
+
+#define FONTMAPPER_MAX 10
+
+typedef struct
+{
+ WORD wFirst;
+ WORD wSecond;
+ INT iKernAmount;
+} KERNINGPAIR, *LPKERNINGPAIR;
+
+typedef struct tagPIXELFORMATDESCRIPTOR {
+ WORD nSize;
+ WORD nVersion;
+ DWORD dwFlags;
+ BYTE iPixelType;
+ BYTE cColorBits;
+ BYTE cRedBits;
+ BYTE cRedShift;
+ BYTE cGreenBits;
+ BYTE cGreenShift;
+ BYTE cBlueBits;
+ BYTE cBlueShift;
+ BYTE cAlphaBits;
+ BYTE cAlphaShift;
+ BYTE cAccumBits;
+ BYTE cAccumRedBits;
+ BYTE cAccumGreenBits;
+ BYTE cAccumBlueBits;
+ BYTE cAccumAlphaBits;
+ BYTE cDepthBits;
+ BYTE cStencilBits;
+ BYTE cAuxBuffers;
+ BYTE iLayerType;
+ BYTE bReserved;
+ DWORD dwLayerMask;
+ DWORD dwVisibleMask;
+ DWORD dwDamageMask;
+} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
+
+#define PFD_TYPE_RGBA 0
+#define PFD_TYPE_COLORINDEX 1
+
+#define PFD_MAIN_PLANE 0
+#define PFD_OVERLAY_PLANE 1
+#define PFD_UNDERLAY_PLANE (-1)
+
+#define PFD_DOUBLEBUFFER 0x00000001
+#define PFD_STEREO 0x00000002
+#define PFD_DRAW_TO_WINDOW 0x00000004
+#define PFD_DRAW_TO_BITMAP 0x00000008
+#define PFD_SUPPORT_GDI 0x00000010
+#define PFD_SUPPORT_OPENGL 0x00000020
+#define PFD_GENERIC_FORMAT 0x00000040
+#define PFD_NEED_PALETTE 0x00000080
+#define PFD_NEED_SYSTEM_PALETTE 0x00000100
+#define PFD_SWAP_EXCHANGE 0x00000200
+#define PFD_SWAP_COPY 0x00000400
+#define PFD_SWAP_LAYER_BUFFERS 0x00000800
+#define PFD_GENERIC_ACCELERATED 0x00001000
+#define PFD_SUPPORT_COMPOSITION 0x00008000 /* Vista stuff */
+
+#define PFD_DEPTH_DONTCARE 0x20000000
+#define PFD_DOUBLEBUFFER_DONTCARE 0x40000000
+#define PFD_STEREO_DONTCARE 0x80000000
+
+typedef struct tagCOLORADJUSTMENT
+{
+ WORD caSize;
+ WORD caFlags;
+ WORD caIlluminantIndex;
+ WORD caRedGamma;
+ WORD caGreenGamma;
+ WORD caBlueGamma;
+ WORD caReferenceBlack;
+ WORD caReferenceWhite;
+ SHORT caContrast;
+ SHORT caBrightness;
+ SHORT caColorfulness;
+ SHORT caRedGreenTint;
+} COLORADJUSTMENT, *PCOLORADJUSTMENT, *LPCOLORADJUSTMENT;
+
+#define CA_NEGATIVE 0x0001
+#define CA_LOG_FILTER 0x0002
+
+#define ILLUMINANT_DEVICE_DEFAULT 0
+#define ILLUMINANT_A 1
+#define ILLUMINANT_B 2
+#define ILLUMINANT_C 3
+#define ILLUMINANT_D50 4
+#define ILLUMINANT_D55 5
+#define ILLUMINANT_D65 6
+#define ILLUMINANT_D75 7
+#define ILLUMINANT_F2 8
+#define ILLUMINANT_MAX_INDEX ILLUMINANT_F2
+
+#define ILLUMINANT_TUNGSTEN ILLUMINANT_A
+#define ILLUMINANT_DAYLIGHT ILLUMINANT_C
+#define ILLUMINANT_FLUORESCENT ILLUMINANT_F2
+#define ILLUMINANT_NTSC ILLUMINANT_C
+
+#define RGB_GAMMA_MIN (WORD)02500
+#define RGB_GAMMA_MAX (WORD)65000
+
+#define REFERENCE_WHITE_MIN (WORD)6000
+#define REFERENCE_WHITE_MAX (WORD)10000
+#define REFERENCE_BLACK_MIN (WORD)0
+#define REFERENCE_BLACK_MAX (WORD)4000
+
+#define COLOR_ADJ_MIN ((SHORT)-100)
+#define COLOR_ADJ_MAX (SHORT) 100
+
+typedef LONG FXPT16DOT16, *LPFXPT16DOT16;
+typedef LONG FXPT2DOT30, *LPFXPT2DOT30;
+typedef LONG LCSCSTYPE;
+typedef LONG LCSGAMUTMATCH;
+
+#define LCS_sRGB 0x73524742 /* 'sRGB' */
+#define LCS_WINDOWS_COLOR_SPACE 0x57696e20 /* 'Win ' */
+
+#define LCS_CALIBRATED_RGB __MSABI_LONG(0x00000000)
+#define LCS_DEVICE_RGB __MSABI_LONG(0x00000001)
+#define LCS_DEVICE_CMYK __MSABI_LONG(0x00000002)
+
+#define LCS_GM_BUSINESS __MSABI_LONG(0x00000001)
+#define LCS_GM_GRAPHICS __MSABI_LONG(0x00000002)
+#define LCS_GM_IMAGES __MSABI_LONG(0x00000004)
+
+#define CM_OUT_OF_GAMUT 255
+#define CM_IN_GAMUT 0
+
+typedef struct tagCIEXYZ
+{
+ FXPT2DOT30 ciexyzX;
+ FXPT2DOT30 ciexyzY;
+ FXPT2DOT30 ciexyzZ;
+} CIEXYZ, *LPCIEXYZ;
+
+typedef struct tagCIEXYZTRIPLE
+{
+ CIEXYZ ciexyzRed;
+ CIEXYZ ciexyzGreen;
+ CIEXYZ ciexyzBlue;
+} CIEXYZTRIPLE, *LPCIEXYZTRIPLE;
+
+typedef struct tagLOGCOLORSPACEA
+{
+ DWORD lcsSignature;
+ DWORD lcsVersion;
+ DWORD lcsSize;
+ LCSCSTYPE lcsCSType;
+ LCSGAMUTMATCH lcsIntent;
+ CIEXYZTRIPLE lcsEndpoints;
+ DWORD lcsGammaRed;
+ DWORD lcsGammaGreen;
+ DWORD lcsGammaBlue;
+ CHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
+
+ typedef struct tagLOGCOLORSPACEW
+{
+ DWORD lcsSignature;
+ DWORD lcsVersion;
+ DWORD lcsSize;
+ LCSCSTYPE lcsCSType;
+ LCSGAMUTMATCH lcsIntent;
+ CIEXYZTRIPLE lcsEndpoints;
+ DWORD lcsGammaRed;
+ DWORD lcsGammaGreen;
+ DWORD lcsGammaBlue;
+ WCHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
+
+DECL_WINELIB_TYPE_AW(LPLOGCOLORSPACE)
+DECL_WINELIB_TYPE_AW(LOGCOLORSPACE)
+
+#define DC_FIELDS 1
+#define DC_PAPERS 2
+#define DC_PAPERSIZE 3
+#define DC_MINEXTENT 4
+#define DC_MAXEXTENT 5
+#define DC_BINS 6
+#define DC_DUPLEX 7
+#define DC_SIZE 8
+#define DC_EXTRA 9
+#define DC_VERSION 10
+#define DC_DRIVER 11
+#define DC_BINNAMES 12
+#define DC_ENUMRESOLUTIONS 13
+#define DC_FILEDEPENDENCIES 14
+#define DC_TRUETYPE 15
+#define DC_PAPERNAMES 16
+#define DC_ORIENTATION 17
+#define DC_COPIES 18
+#define DC_BINADJUST 19
+#define DC_EMF_COMPLIANT 20
+#define DC_DATATYPE_PRODUCED 21
+#define DC_COLLATE 22
+#define DC_MANUFACTURER 23
+#define DC_MODEL 24
+#define DC_PERSONALITY 25
+#define DC_PRINTRATE 26
+#define DC_PRINTRATEUNIT 27
+#define DC_PRINTERMEM 28
+#define DC_MEDIAREADY 29
+#define DC_STAPLE 30
+#define DC_PRINTRATEPPM 31
+#define DC_COLORDEVICE 32
+#define DC_NUP 33
+#define DC_MEDIATYPENAMES 34
+#define DC_MEDIATYPES 35
+
+#define DCTT_BITMAP __MSABI_LONG(0x00000001)
+#define DCTT_DOWNLOAD __MSABI_LONG(0x00000002)
+#define DCTT_SUBDEV __MSABI_LONG(0x00000004)
+#define DCTT_DOWNLOAD_OUTLINE __MSABI_LONG(0x00000008)
+
+#define DCBA_FACEUPNONE 0x0000
+#define DCBA_FACEUPCENTER 0x0001
+#define DCBA_FACEUPLEFT 0x0002
+#define DCBA_FACEUPRIGHT 0x0003
+#define DCBA_FACEDOWNNONE 0x0100
+#define DCBA_FACEDOWNCENTER 0x0101
+#define DCBA_FACEDOWNLEFT 0x0102
+#define DCBA_FACEDOWNRIGHT 0x0103
+
+#define PRINTRATEUNIT_PPM 1
+#define PRINTRATEUNIT_CPS 2
+#define PRINTRATEUNIT_LPM 3
+#define PRINTRATEUNIT_IPM 4
+
+/* Flag returned from Escape QUERYDIBSUPPORT */
+#define QDI_SETDIBITS 1
+#define QDI_GETDIBITS 2
+#define QDI_DIBTOSCREEN 4
+#define QDI_STRETCHDIB 8
+
+
+/* GDI Escape commands */
+#define NEWFRAME 1
+#define ABORTDOC 2
+#define NEXTBAND 3
+#define SETCOLORTABLE 4
+#define GETCOLORTABLE 5
+#define FLUSHOUTPUT 6
+#define DRAFTMODE 7
+#define QUERYESCSUPPORT 8
+#define SETABORTPROC 9
+#define STARTDOC 10
+#define ENDDOC 11
+#define GETPHYSPAGESIZE 12
+#define GETPRINTINGOFFSET 13
+#define GETSCALINGFACTOR 14
+#define MFCOMMENT 15
+#define GETPENWIDTH 16
+#define SETCOPYCOUNT 17
+#define SELECTPAPERSOURCE 18
+#define DEVICEDATA 19
+#define PASSTHROUGH 19
+#define GETTECHNOLGY 20
+#define GETTECHNOLOGY 20 /* yes, both of them */
+#define SETLINECAP 21
+#define SETLINEJOIN 22
+#define SETMITERLIMIT 23
+#define BANDINFO 24
+#define DRAWPATTERNRECT 25
+#define GETVECTORPENSIZE 26
+#define GETVECTORBRUSHSIZE 27
+#define ENABLEDUPLEX 28
+#define GETSETPAPERBINS 29
+#define GETSETPRINTORIENT 30
+#define ENUMPAPERBINS 31
+#define SETDIBSCALING 32
+#define EPSPRINTING 33
+#define ENUMPAPERMETRICS 34
+#define GETSETPAPERMETRICS 35
+#define POSTSCRIPT_DATA 37
+#define POSTSCRIPT_IGNORE 38
+#define MOUSETRAILS 39
+#define GETDEVICEUNITS 42
+
+#define GETEXTENDEDTEXTMETRICS 256
+#define GETEXTENTTABLE 257
+#define GETPAIRKERNTABLE 258
+#define GETTRACKKERNTABLE 259
+#define EXTTEXTOUT 512
+#define GETFACENAME 513
+#define DOWNLOADFACE 514
+#define ENABLERELATIVEWIDTHS 768
+#define ENABLEPAIRKERNING 769
+#define SETKERNTRACK 770
+#define SETALLJUSTVALUES 771
+#define SETCHARSET 772
+
+#define STRETCHBLT 2048
+#define GETSETSCREENPARAMS 3072
+#define QUERYDIBSUPPORT 3073
+#define BEGIN_PATH 4096
+#define CLIP_TO_PATH 4097
+#define END_PATH 4098
+#define EXT_DEVICE_CAPS 4099
+#define RESTORE_CTM 4100
+#define SAVE_CTM 4101
+#define SET_ARC_DIRECTION 4102
+#define SET_BACKGROUND_COLOR 4103
+#define SET_POLY_MODE 4104
+#define SET_SCREEN_ANGLE 4105
+#define SET_SPREAD 4106
+#define TRANSFORM_CTM 4107
+#define SET_CLIP_BOX 4108
+#define SET_BOUNDS 4109
+#define SET_MIRROR_MODE 4110
+#define OPENCHANNEL 4110
+#define DOWNLOADHEADER 4111
+#define CLOSECHANNEL 4112
+#define POSTSCRIPT_PASSTHROUGH 4115
+#define ENCAPSULATED_POSTSCRIPT 4116
+#define POSTSCRIPT_IDENTIFY 4117
+#define POSTSCRIPT_INJECTION 4118
+#define CHECKJPEGFORMAT 4119
+#define CHECKPNGFORMAT 4120
+#define GET_PS_FEATURESETTING 4121
+#define GDIPLUS_TS_QUERYVER 4122
+#define GDIPLUS_TS_RECORD 4123
+
+/* for POSTSCRIPT_IDENTIFY */
+#define PSIDENT_GDICENTRIC 0
+#define PSIDENT_PSCENTRIC 1
+
+
+#define QDI_SETDIBITS 1
+#define QDI_GETDIBITS 2
+#define QDI_DIBTOSCREEN 4
+#define QDI_STRETCHDIB 8
+
+/* Spooler Error Codes */
+#define SP_NOTREPORTED 0x4000
+#define SP_ERROR (-1)
+#define SP_APPABORT (-2)
+#define SP_USERABORT (-3)
+#define SP_OUTOFDISK (-4)
+#define SP_OUTOFMEMORY (-5)
+
+#define PR_JOBSTATUS 0
+
+ /* Raster operations */
+
+#define R2_BLACK 1
+#define R2_NOTMERGEPEN 2
+#define R2_MASKNOTPEN 3
+#define R2_NOTCOPYPEN 4
+#define R2_MASKPENNOT 5
+#define R2_NOT 6
+#define R2_XORPEN 7
+#define R2_NOTMASKPEN 8
+#define R2_MASKPEN 9
+#define R2_NOTXORPEN 10
+#define R2_NOP 11
+#define R2_MERGENOTPEN 12
+#define R2_COPYPEN 13
+#define R2_MERGEPENNOT 14
+#define R2_MERGEPEN 15
+#define R2_WHITE 16
+#define R2_LAST 16
+
+#define MAKEROP4(fore,back) (DWORD)((((back)<<8)&0xFF000000)|(fore))
+
+#define SRCCOPY 0xcc0020
+#define SRCPAINT 0xee0086
+#define SRCAND 0x8800c6
+#define SRCINVERT 0x660046
+#define SRCERASE 0x440328
+#define NOTSRCCOPY 0x330008
+#define NOTSRCERASE 0x1100a6
+#define MERGECOPY 0xc000ca
+#define MERGEPAINT 0xbb0226
+#define PATCOPY 0xf00021
+#define PATPAINT 0xfb0a09
+#define PATINVERT 0x5a0049
+#define DSTINVERT 0x550009
+#define BLACKNESS 0x000042
+#define WHITENESS 0xff0062
+
+ /* StretchBlt() modes */
+#define BLACKONWHITE 1
+#define WHITEONBLACK 2
+#define COLORONCOLOR 3
+#define HALFTONE 4
+#define MAXSTRETCHBLTMODE 4
+
+#define STRETCH_ANDSCANS BLACKONWHITE
+#define STRETCH_ORSCANS WHITEONBLACK
+#define STRETCH_DELETESCANS COLORONCOLOR
+#define STRETCH_HALFTONE HALFTONE
+
+ /* Colors */
+
+#define RGB(r,g,b) ((COLORREF)((BYTE)(r) | ((BYTE)(g) << 8) | ((BYTE)(b) << 16)))
+#define PALETTERGB(r,g,b) (0x02000000 | RGB(r,g,b))
+#define PALETTEINDEX(i) ((COLORREF)(0x01000000 | (WORD)(i)))
+
+#define GetRValue(rgb) ((BYTE) (rgb) )
+#define GetGValue(rgb) ((BYTE) ((rgb) >> 8))
+#define GetBValue(rgb) ((BYTE) ((rgb) >> 16))
+
+#define GetKValue(cmyk) ((BYTE) (cmyk) )
+#define GetYValue(cmyk) ((BYTE) ((cmyk) >> 8))
+#define GetMValue(cmyk) ((BYTE) ((cmyk) >> 16))
+#define GetCValue(cmyk) ((BYTE) ((cmyk) >> 24))
+
+#define CMYK(c,m,y,k) ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24)))
+
+/* ICM stuff */
+typedef INT (CALLBACK *ICMENUMPROCA)(LPSTR lpszFilename,LPARAM lParam);
+typedef INT (CALLBACK *ICMENUMPROCW)(LPWSTR lpszFilename,LPARAM lParam);
+DECL_WINELIB_TYPE_AW(ICMENUMPROC)
+
+
+#define ICM_OFF 1
+#define ICM_ON 2
+#define ICM_QUERY 3
+
+ /* Bounds Accumulation APIs */
+#define DCB_RESET 0x0001
+#define DCB_ACCUMULATE 0x0002
+#define DCB_DIRTY DCB_ACCUMULATE
+#define DCB_SET (DCB_RESET | DCB_ACCUMULATE)
+#define DCB_ENABLE 0x0004
+#define DCB_DISABLE 0x0008
+
+typedef struct
+{
+ LONG paXCount;
+ LONG paYCount;
+ LONG paXExt;
+ LONG paYExt;
+ BYTE paRGBs;
+} PELARRAY, *PPELARRAY, *LPPELARRAY;
+
+ /* Bitmaps */
+
+typedef struct
+{
+ INT bmType;
+ INT bmWidth;
+ INT bmHeight;
+ INT bmWidthBytes;
+ WORD bmPlanes;
+ WORD bmBitsPixel;
+ LPVOID bmBits;
+} BITMAP, *PBITMAP, *LPBITMAP;
+
+
+ /* Brushes */
+
+typedef struct
+{
+ UINT lbStyle;
+ COLORREF lbColor;
+ ULONG_PTR lbHatch;
+} LOGBRUSH, *PLOGBRUSH, *LPLOGBRUSH;
+
+typedef struct
+{
+ UINT lbStyle;
+ COLORREF lbColor;
+ ULONG lbHatch;
+} LOGBRUSH32, *PLOGBRUSH32, *LPLOGBRUSH32;
+
+typedef LOGBRUSH PATTERN, *PPATTERN, *LPPATTERN;
+
+
+ /* Brush styles */
+#define BS_SOLID 0
+#define BS_NULL 1
+#define BS_HOLLOW 1
+#define BS_HATCHED 2
+#define BS_PATTERN 3
+#define BS_INDEXED 4
+#define BS_DIBPATTERN 5
+#define BS_DIBPATTERNPT 6
+#define BS_PATTERN8X8 7
+#define BS_DIBPATTERN8X8 8
+#define BS_MONOPATTERN 9
+
+ /* Hatch styles */
+#define HS_HORIZONTAL 0
+#define HS_VERTICAL 1
+#define HS_FDIAGONAL 2
+#define HS_BDIAGONAL 3
+#define HS_CROSS 4
+#define HS_DIAGCROSS 5
+#define HS_API_MAX 12
+
+ /* Fonts */
+
+#define LF_FACESIZE 32
+#define LF_FULLFACESIZE 64
+
+#define RASTER_FONTTYPE 0x0001
+#define DEVICE_FONTTYPE 0x0002
+#define TRUETYPE_FONTTYPE 0x0004
+
+typedef struct tagLOGFONTA
+{
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ CHAR lfFaceName[LF_FACESIZE];
+} LOGFONTA, *PLOGFONTA, *LPLOGFONTA;
+
+typedef struct tagLOGFONTW
+{
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ WCHAR lfFaceName[LF_FACESIZE];
+} LOGFONTW, *PLOGFONTW, *LPLOGFONTW;
+
+DECL_WINELIB_TYPE_AW(LOGFONT)
+DECL_WINELIB_TYPE_AW(PLOGFONT)
+DECL_WINELIB_TYPE_AW(LPLOGFONT)
+
+typedef struct
+{
+ LOGFONTA elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+} ENUMLOGFONTA, *LPENUMLOGFONTA;
+
+typedef struct
+{
+ LOGFONTW elfLogFont;
+ WCHAR elfFullName[LF_FULLFACESIZE];
+ WCHAR elfStyle[LF_FACESIZE];
+} ENUMLOGFONTW, *LPENUMLOGFONTW;
+
+DECL_WINELIB_TYPE_AW(ENUMLOGFONT)
+DECL_WINELIB_TYPE_AW(LPENUMLOGFONT)
+
+typedef struct
+{
+ LOGFONTA elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+ BYTE elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXA,*LPENUMLOGFONTEXA;
+
+typedef struct
+{
+ LOGFONTW elfLogFont;
+ WCHAR elfFullName[LF_FULLFACESIZE];
+ WCHAR elfStyle[LF_FACESIZE];
+ WCHAR elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXW,*LPENUMLOGFONTEXW;
+
+DECL_WINELIB_TYPE_AW(ENUMLOGFONTEX)
+DECL_WINELIB_TYPE_AW(LPENUMLOGFONTEX)
+
+#define MM_MAX_NUMAXES 16
+
+typedef struct
+{
+ DWORD dvReserved;
+ DWORD dvNumAxes;
+ LONG dvValues[MM_MAX_NUMAXES];
+} DESIGNVECTOR, *PDESIGNVECTOR;
+
+typedef struct
+{
+ ENUMLOGFONTEXA elfEnumLogfontEx;
+ DESIGNVECTOR elfDesignVector;
+} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA;
+
+typedef struct
+{
+ ENUMLOGFONTEXW elfEnumLogfontEx;
+ DESIGNVECTOR elfDesignVector;
+} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW;
+
+DECL_WINELIB_TYPE_AW(ENUMLOGFONTEXDV)
+DECL_WINELIB_TYPE_AW(PENUMLOGFONTEXDV)
+
+/*
+ * The FONTSIGNATURE tells which Unicode ranges and which code pages
+ * have glyphs in a font.
+ *
+ * fsUsb 128-bit bitmap. The most significant bits are 10 (magic number).
+ * The remaining 126 bits map the Unicode ISO 10646 subranges
+ * for which the font provides glyphs.
+ *
+ * fsCsb 64-bit bitmap. The low 32 bits map the Windows codepages for
+ * which the font provides glyphs. The high 32 bits are for
+ * non Windows codepages.
+ */
+typedef struct
+{
+ DWORD fsUsb[4];
+ DWORD fsCsb[2];
+} FONTSIGNATURE, *PFONTSIGNATURE, *LPFONTSIGNATURE;
+
+typedef struct
+{
+ UINT ciCharset; /* character set */
+ UINT ciACP; /* ANSI code page */
+ FONTSIGNATURE fs;
+} CHARSETINFO, *PCHARSETINFO, *LPCHARSETINFO;
+
+/* Flags for TranslateCharsetInfo */
+#define TCI_SRCCHARSET 1
+#define TCI_SRCCODEPAGE 2
+#define TCI_SRCFONTSIG 3
+
+typedef struct
+{
+ DWORD lsUsb[4];
+ DWORD lsCsbDefault[2];
+ DWORD lsCsbSupported[2];
+} LOCALESIGNATURE, *PLOCALESIGNATURE, *LPLOCALESIGNATURE;
+
+
+/* Flags for ModifyWorldTransform */
+#define MWT_IDENTITY 1
+#define MWT_LEFTMULTIPLY 2
+#define MWT_RIGHTMULTIPLY 3
+#define MWT_MIN MWT_IDENTITY
+#define MWT_MAX MWT_RIGHTMULTIPLY
+
+/* Object Definitions for EnumObjects() */
+#define OBJ_PEN 1
+#define OBJ_BRUSH 2
+#define OBJ_DC 3
+#define OBJ_METADC 4
+#define OBJ_PAL 5
+#define OBJ_FONT 6
+#define OBJ_BITMAP 7
+#define OBJ_REGION 8
+#define OBJ_METAFILE 9
+#define OBJ_MEMDC 10
+#define OBJ_EXTPEN 11
+#define OBJ_ENHMETADC 12
+#define OBJ_ENHMETAFILE 13
+#define OBJ_COLORSPACE 14
+
+typedef struct tagXFORM
+{
+ FLOAT eM11;
+ FLOAT eM12;
+ FLOAT eM21;
+ FLOAT eM22;
+ FLOAT eDx;
+ FLOAT eDy;
+} XFORM, *PXFORM, *LPXFORM;
+
+ /* lfWeight values */
+#define FW_DONTCARE 0
+#define FW_THIN 100
+#define FW_EXTRALIGHT 200
+#define FW_ULTRALIGHT 200
+#define FW_LIGHT 300
+#define FW_NORMAL 400
+#define FW_REGULAR 400
+#define FW_MEDIUM 500
+#define FW_SEMIBOLD 600
+#define FW_DEMIBOLD 600
+#define FW_BOLD 700
+#define FW_EXTRABOLD 800
+#define FW_ULTRABOLD 800
+#define FW_HEAVY 900
+#define FW_BLACK 900
+
+ /* lfCharSet values */
+#define ANSI_CHARSET (BYTE)0 /* CP1252, ansi-0, iso8859-{1,15} */
+#define DEFAULT_CHARSET (BYTE)1
+#define SYMBOL_CHARSET (BYTE)2
+#define SHIFTJIS_CHARSET (BYTE)128 /* CP932 */
+#define HANGEUL_CHARSET (BYTE)129 /* CP949, ksc5601.1987-0 */
+#define HANGUL_CHARSET HANGEUL_CHARSET
+#define GB2312_CHARSET (BYTE)134 /* CP936, gb2312.1980-0 */
+#define CHINESEBIG5_CHARSET (BYTE)136 /* CP950, big5.et-0 */
+#define GREEK_CHARSET (BYTE)161 /* CP1253 */
+#define TURKISH_CHARSET (BYTE)162 /* CP1254, -iso8859-9 */
+#define HEBREW_CHARSET (BYTE)177 /* CP1255, -iso8859-8 */
+#define ARABIC_CHARSET (BYTE)178 /* CP1256, -iso8859-6 */
+#define BALTIC_CHARSET (BYTE)186 /* CP1257, -iso8859-13 */
+#define VIETNAMESE_CHARSET (BYTE)163 /* CP1258 */
+#define RUSSIAN_CHARSET (BYTE)204 /* CP1251, -iso8859-5 */
+#define EE_CHARSET (BYTE)238 /* CP1250, -iso8859-2 */
+#define EASTEUROPE_CHARSET EE_CHARSET
+#define THAI_CHARSET (BYTE)222 /* CP874, iso8859-11, tis620 */
+#define JOHAB_CHARSET (BYTE)130 /* korean (johab) CP1361 */
+#define MAC_CHARSET (BYTE)77
+#define OEM_CHARSET (BYTE)255
+/* I don't know if the values of *_CHARSET macros are defined in Windows
+ * or if we can choose them as we want. -- srtxg
+ */
+#define VISCII_CHARSET (BYTE)240 /* viscii1.1-1 */
+#define TCVN_CHARSET (BYTE)241 /* tcvn-0 */
+#define KOI8_CHARSET (BYTE)242 /* koi8-{r,u,ru} */
+#define ISO3_CHARSET (BYTE)243 /* iso8859-3 */
+#define ISO4_CHARSET (BYTE)244 /* iso8859-4 */
+#define ISO10_CHARSET (BYTE)245 /* iso8859-10 */
+#define CELTIC_CHARSET (BYTE)246 /* iso8859-14 */
+
+#define FS_LATIN1 __MSABI_LONG(0x00000001)
+#define FS_LATIN2 __MSABI_LONG(0x00000002)
+#define FS_CYRILLIC __MSABI_LONG(0x00000004)
+#define FS_GREEK __MSABI_LONG(0x00000008)
+#define FS_TURKISH __MSABI_LONG(0x00000010)
+#define FS_HEBREW __MSABI_LONG(0x00000020)
+#define FS_ARABIC __MSABI_LONG(0x00000040)
+#define FS_BALTIC __MSABI_LONG(0x00000080)
+#define FS_VIETNAMESE __MSABI_LONG(0x00000100)
+#define FS_THAI __MSABI_LONG(0x00010000)
+#define FS_JISJAPAN __MSABI_LONG(0x00020000)
+#define FS_CHINESESIMP __MSABI_LONG(0x00040000)
+#define FS_WANSUNG __MSABI_LONG(0x00080000)
+#define FS_CHINESETRAD __MSABI_LONG(0x00100000)
+#define FS_JOHAB __MSABI_LONG(0x00200000)
+#define FS_SYMBOL __MSABI_LONG(0x80000000)
+
+ /* lfOutPrecision values */
+#define OUT_DEFAULT_PRECIS 0
+#define OUT_STRING_PRECIS 1
+#define OUT_CHARACTER_PRECIS 2
+#define OUT_STROKE_PRECIS 3
+#define OUT_TT_PRECIS 4
+#define OUT_DEVICE_PRECIS 5
+#define OUT_RASTER_PRECIS 6
+#define OUT_TT_ONLY_PRECIS 7
+#define OUT_OUTLINE_PRECIS 8
+
+ /* lfClipPrecision values */
+#define CLIP_DEFAULT_PRECIS 0x00
+#define CLIP_CHARACTER_PRECIS 0x01
+#define CLIP_STROKE_PRECIS 0x02
+#define CLIP_MASK 0x0F
+#define CLIP_LH_ANGLES 0x10
+#define CLIP_TT_ALWAYS 0x20
+#define CLIP_EMBEDDED 0x80
+
+ /* lfQuality values */
+#define DEFAULT_QUALITY 0
+#define DRAFT_QUALITY 1
+#define PROOF_QUALITY 2
+#define NONANTIALIASED_QUALITY 3
+#define ANTIALIASED_QUALITY 4
+#define CLEARTYPE_QUALITY 5
+#define CLEARTYPE_NATURAL_QUALITY 6
+
+ /* lfPitchAndFamily pitch values */
+#define DEFAULT_PITCH 0x00
+#define FIXED_PITCH 0x01
+#define VARIABLE_PITCH 0x02
+#define MONO_FONT 0x08
+
+#define FF_DONTCARE 0x00
+#define FF_ROMAN 0x10
+#define FF_SWISS 0x20
+#define FF_MODERN 0x30
+#define FF_SCRIPT 0x40
+#define FF_DECORATIVE 0x50
+
+#ifndef _TEXTMETRIC_DEFINED
+#define _TEXTMETRIC_DEFINED
+
+typedef struct tagTEXTMETRICA
+{
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;
+
+typedef struct tagTEXTMETRICW
+{
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ WCHAR tmFirstChar;
+ WCHAR tmLastChar;
+ WCHAR tmDefaultChar;
+ WCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;
+
+DECL_WINELIB_TYPE_AW(TEXTMETRIC)
+DECL_WINELIB_TYPE_AW(PTEXTMETRIC)
+DECL_WINELIB_TYPE_AW(LPTEXTMETRIC)
+#endif /* _TEXTMETRIC_DEFINED */
+
+
+typedef struct tagPANOSE
+{
+ BYTE bFamilyType;
+ BYTE bSerifStyle;
+ BYTE bWeight;
+ BYTE bProportion;
+ BYTE bContrast;
+ BYTE bStrokeVariation;
+ BYTE bArmStyle;
+ BYTE bLetterform;
+ BYTE bMidline;
+ BYTE bXHeight;
+} PANOSE, *LPPANOSE;
+
+#define PANOSE_COUNT 10
+
+#define PAN_FAMILYTYPE_INDEX 0
+#define PAN_SERIFSTYLE_INDEX 1
+#define PAN_WEIGTH_INDEX 2
+#define PAN_PROPORTION_INDEX 3
+#define PAN_CONTRAST_INDEX 4
+#define PAN_STROKEVARIATION_INDEX 5
+#define PAN_ARMSTYLE_INDEX 6
+#define PAN_LETTERFORM_INDEX 7
+#define PAN_MIDLINE_INDEX 8
+#define PAN_XHEIGHT_INDEX 9
+
+#define PAN_CULTURE_LATIN 0
+
+#define PAN_ANY 0
+#define PAN_NO_FIT 1
+
+#define PAN_FAMILY_TEXT_DISPLAY 2
+#define PAN_FAMILY_SCRIPT 3
+#define PAN_FAMILY_DECORATIVE 4
+#define PAN_FAMILY_PICTORIAL 5
+
+#define PAN_SERIF_COVE 2
+#define PAN_SERIF_OBTUSE_COVE 3
+#define PAN_SERIF_SQUARE_COVE 4
+#define PAN_SERIF_OBTUSE_SQUARE_COVE 5
+#define PAN_SERIF_SQUARE 6
+#define PAN_SERIF_THIN 7
+#define PAN_SERIF_BONE 8
+#define PAN_SERIF_EXAGGERATED 9
+#define PAN_SERIF_TRIANGLE 10
+#define PAN_SERIF_NORMAL_SANS 11
+#define PAN_SERIF_OBTUSE_SANS 12
+#define PAN_SERIF_PERP_SANS 13
+#define PAN_SERIF_FLARED 14
+#define PAN_SERIF_ROUNDED 15
+
+#define PAN_WEIGHT_VERY_LIGHT 2
+#define PAN_WEIGHT_LIGHT 3
+#define PAN_WEIGHT_THIN 4
+#define PAN_WEIGHT_BOOK 5
+#define PAN_WEIGHT_MEDIUM 6
+#define PAN_WEIGHT_DEMI 7
+#define PAN_WEIGHT_BOLD 8
+#define PAN_WEIGHT_HEAVY 9
+#define PAN_WEIGHT_BLACK 10
+#define PAN_WEIGHT_NORD 11
+
+#define PAN_PROP_OLD_STYLE 2
+#define PAN_PROP_MODERN 3
+#define PAN_PROP_EVEN_WIDTH 4
+#define PAN_PROP_EXPANDED 5
+#define PAN_PROP_CONDENSED 6
+#define PAN_PROP_VERY_EXPANDED 7
+#define PAN_PROP_VERY_CONDENSED 8
+#define PAN_PROP_MONOSPACED 9
+
+#define PAN_CONTRAST_NONE 2
+#define PAN_CONTRAST_VERY_LOW 3
+#define PAN_CONTRAST_LOW 4
+#define PAN_CONTRAST_MEDIUM_LOW 5
+#define PAN_CONTRAST_MEDIUM 6
+#define PAN_CONTRAST_MEDIUM_HIGH 7
+#define PAN_CONTRAST_HIGH 8
+#define PAN_CONTRAST_VERY_HIGH 9
+
+#define PAN_STROKE_GRADUAL_DIAG 2
+#define PAN_STROKE_GRADUAL_TRAN 3
+#define PAN_STROKE_GRADUAL_VERT 4
+#define PAN_STROKE_GRADUAL_HORZ 5
+#define PAN_STROKE_RAPID_VERT 6
+#define PAN_STROKE_RAPID_HORZ 7
+#define PAN_STROKE_INSTANT_VERT 8
+
+#define PAN_STRAIGHT_ARMS_HORZ 2
+#define PAN_STRAIGHT_ARMS_WEDGE 3
+#define PAN_STRAIGHT_ARMS_VERT 4
+#define PAN_STRAIGHT_ARMS_SINGLE_SERIF 5
+#define PAN_STRAIGHT_ARMS_DOUBLE_SERIF 6
+#define PAN_BENT_ARMS_HORZ 7
+#define PAN_BENT_ARMS_WEDGE 8
+#define PAN_BENT_ARMS_VERT 9
+#define PAN_BENT_ARMS_SINGLE_SERIF 10
+#define PAN_BENT_ARMS_DOUBLE_SERIF 11
+
+#define PAN_LETT_NORMAL_COMPACT 2
+#define PAN_LETT_NORMAL_WEIGHTED 3
+#define PAN_LETT_NORMAL_BOXED 4
+#define PAN_LETT_NORMAL_FLATTENED 5
+#define PAN_LETT_NORMAL_ROUNDED 6
+#define PAN_LETT_NORMAL_OFF_CENTER 7
+#define PAN_LETT_NORMAL_SQUARE 8
+#define PAN_LETT_OBLIQUE_COMPACT 9
+#define PAN_LETT_OBLIQUE_WEIGHTED 10
+#define PAN_LETT_OBLIQUE_BOXED 11
+#define PAN_LETT_OBLIQUE_FLATTENED 12
+#define PAN_LETT_OBLIQUE_ROUNDED 13
+#define PAN_LETT_OBLIQUE_OFF_CENTER 14
+#define PAN_LETT_OBLIQUE_SQUARE 15
+
+#define PAN_MIDLINE_STANDARD_TRIMMED 2
+#define PAN_MIDLINE_STANDARD_POINTED 3
+#define PAN_MIDLINE_STANDARD_SERIFED 4
+#define PAN_MIDLINE_HIGH_TRIMMED 5
+#define PAN_MIDLINE_HIGH_POINTED 6
+#define PAN_MIDLINE_HIGH_SERIFED 7
+#define PAN_MIDLINE_CONSTANT_TRIMMED 8
+#define PAN_MIDLINE_CONSTANT_POINTED 9
+#define PAN_MIDLINE_CONSTANT_SERIFED 10
+#define PAN_MIDLINE_LOW_TRIMMED 11
+#define PAN_MIDLINE_LOW_POINTED 12
+#define PAN_MIDLINE_LOW_SERIFED 13
+
+#define PAN_XHEIGHT_CONSTANT_SMALL 2
+#define PAN_XHEIGHT_CONSTANT_STANDARD 3
+#define PAN_XHEIGHT_CONSTANT_LARGE 4
+#define PAN_XHEIGHT_DUCKING_SMALL 5
+#define PAN_XHEIGHT_DUCKING_STANDARD 6
+#define PAN_XHEIGHT_DUCKING_LARGE 7
+
+#define ELF_VENDOR_SIZE 4
+typedef struct
+{
+ LOGFONTA elfLogFont;
+ BYTE elfFullName[LF_FULLFACESIZE];
+ BYTE elfStyle[LF_FACESIZE];
+ DWORD elfVersion;
+ DWORD elfStyleSize;
+ DWORD elfMatch;
+ DWORD elfReserved;
+ BYTE elfVendorId[ELF_VENDOR_SIZE];
+ DWORD elfCulture;
+ PANOSE elfPanose;
+} EXTLOGFONTA, *PEXTLOGFONTA, *LPEXTLOGFONTA;
+
+typedef struct
+{
+ LOGFONTW elfLogFont;
+ WCHAR elfFullName[LF_FULLFACESIZE];
+ WCHAR elfStyle[LF_FACESIZE];
+ DWORD elfVersion;
+ DWORD elfStyleSize;
+ DWORD elfMatch;
+ DWORD elfReserved;
+ BYTE elfVendorId[ELF_VENDOR_SIZE];
+ DWORD elfCulture;
+ PANOSE elfPanose;
+} EXTLOGFONTW, *PEXTLOGFONTW, *LPEXTLOGFONTW;
+
+DECL_WINELIB_TYPE_AW(EXTLOGFONT)
+DECL_WINELIB_TYPE_AW(PEXTLOGFONT)
+DECL_WINELIB_TYPE_AW(LPEXTLOGFONT)
+
+#define ELF_VERSION 0
+#define ELF_CULTURE_LATIN 0
+
+typedef struct _OUTLINETEXTMETRICA
+{
+ UINT otmSize;
+ TEXTMETRICA otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE otmPanoseNumber;
+ UINT otmfsSelection;
+ UINT otmfsType;
+ INT otmsCharSlopeRise;
+ INT otmsCharSlopeRun;
+ INT otmItalicAngle;
+ UINT otmEMSquare;
+ INT otmAscent;
+ INT otmDescent;
+ UINT otmLineGap;
+ UINT otmsCapEmHeight;
+ UINT otmsXHeight;
+ RECT otmrcFontBox;
+ INT otmMacAscent;
+ INT otmMacDescent;
+ UINT otmMacLineGap;
+ UINT otmusMinimumPPEM;
+ POINT otmptSubscriptSize;
+ POINT otmptSubscriptOffset;
+ POINT otmptSuperscriptSize;
+ POINT otmptSuperscriptOffset;
+ UINT otmsStrikeoutSize;
+ INT otmsStrikeoutPosition;
+ INT otmsUnderscoreSize;
+ INT otmsUnderscorePosition;
+ LPSTR otmpFamilyName;
+ LPSTR otmpFaceName;
+ LPSTR otmpStyleName;
+ LPSTR otmpFullName;
+} OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA;
+
+typedef struct _OUTLINETEXTMETRICW
+{
+ UINT otmSize;
+ TEXTMETRICW otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE otmPanoseNumber;
+ UINT otmfsSelection;
+ UINT otmfsType;
+ INT otmsCharSlopeRise;
+ INT otmsCharSlopeRun;
+ INT otmItalicAngle;
+ UINT otmEMSquare;
+ INT otmAscent;
+ INT otmDescent;
+ UINT otmLineGap;
+ UINT otmsCapEmHeight;
+ UINT otmsXHeight;
+ RECT otmrcFontBox;
+ INT otmMacAscent;
+ INT otmMacDescent;
+ UINT otmMacLineGap;
+ UINT otmusMinimumPPEM;
+ POINT otmptSubscriptSize;
+ POINT otmptSubscriptOffset;
+ POINT otmptSuperscriptSize;
+ POINT otmptSuperscriptOffset;
+ UINT otmsStrikeoutSize;
+ INT otmsStrikeoutPosition;
+ INT otmsUnderscoreSize;
+ INT otmsUnderscorePosition;
+ LPSTR otmpFamilyName;
+ LPSTR otmpFaceName;
+ LPSTR otmpStyleName;
+ LPSTR otmpFullName;
+} OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW;
+
+DECL_WINELIB_TYPE_AW(OUTLINETEXTMETRIC)
+DECL_WINELIB_TYPE_AW(POUTLINETEXTMETRIC)
+DECL_WINELIB_TYPE_AW(LPOUTLINETEXTMETRIC)
+
+typedef struct
+{
+ INT x;
+ INT y;
+ UINT n;
+ LPCSTR lpstr;
+ UINT uiFlags;
+ RECT rcl;
+ INT *pdx;
+} POLYTEXTA, *PPOLYTEXTA, *LPPOLYTEXTA;
+
+typedef struct
+{
+ INT x;
+ INT y;
+ UINT n;
+ LPCWSTR lpstr;
+ UINT uiFlags;
+ RECT rcl;
+ INT *pdx;
+} POLYTEXTW, *PPOLYTEXTW, *LPPOLYTEXTW;
+
+DECL_WINELIB_TYPE_AW(POLYTEXT)
+DECL_WINELIB_TYPE_AW(PPOLYTEXT)
+DECL_WINELIB_TYPE_AW(LPPOLYTEXT)
+
+
+/* ntmFlags field flags */
+#define NTM_REGULAR __MSABI_LONG(0x00000040)
+#define NTM_BOLD __MSABI_LONG(0x00000020)
+#define NTM_ITALIC __MSABI_LONG(0x00000001)
+
+#define NTM_NONNEGATIVE_AC 0x00010000
+#define NTM_PS_OPENTYPE 0x00020000
+#define NTM_TT_OPENTYPE 0x00040000
+#define NTM_MULTIPLEMASTER 0x00080000
+#define NTM_TYPE1 0x00100000
+#define NTM_DSIG 0x00200000
+
+
+typedef struct
+{
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ DWORD ntmFlags;
+ UINT ntmSizeEM;
+ UINT ntmCellHeight;
+ UINT ntmAvgWidth;
+} NEWTEXTMETRICA, *PNEWTEXTMETRICA, *LPNEWTEXTMETRICA;
+
+typedef struct
+{
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ WCHAR tmFirstChar;
+ WCHAR tmLastChar;
+ WCHAR tmDefaultChar;
+ WCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ DWORD ntmFlags;
+ UINT ntmSizeEM;
+ UINT ntmCellHeight;
+ UINT ntmAvgWidth;
+} NEWTEXTMETRICW, *PNEWTEXTMETRICW, *LPNEWTEXTMETRICW;
+
+DECL_WINELIB_TYPE_AW(NEWTEXTMETRIC)
+DECL_WINELIB_TYPE_AW(PNEWTEXTMETRIC)
+DECL_WINELIB_TYPE_AW(LPNEWTEXTMETRIC)
+
+typedef struct
+{
+ NEWTEXTMETRICA ntmTm;
+ FONTSIGNATURE ntmFontSig;
+} NEWTEXTMETRICEXA;
+
+typedef struct
+{
+ NEWTEXTMETRICW ntmTm;
+ FONTSIGNATURE ntmFontSig;
+} NEWTEXTMETRICEXW;
+
+DECL_WINELIB_TYPE_AW(NEWTEXTMETRICEX)
+
+#if defined(STRICT)
+
+#if !defined(NOTEXTMETRIC)
+typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const TEXTMETRICA *, DWORD, LPARAM);
+typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const TEXTMETRICW *, DWORD, LPARAM);
+#else /* !defined(NOTEXTMETRIC) */
+typedef int (CALLBACK *OLDFONTENUMPROCA)(const LOGFONTA *, const VOID *, DWORD, LPARAM);
+typedef int (CALLBACK *OLDFONTENUMPROCW)(const LOGFONTW *, const VOID *, DWORD, LPARAM);
+#endif /* !defined(NOTEXTMETRIC) */
+DECL_WINELIB_TYPE_AW(OLDFONTENUMPROC)
+
+typedef OLDFONTENUMPROCA FONTENUMPROCA;
+typedef OLDFONTENUMPROCW FONTENUMPROCW;
+DECL_WINELIB_TYPE_AW(FONTENUMPROC)
+
+typedef INT (CALLBACK *GOBJENUMPROC)(LPVOID, LPARAM);
+typedef VOID (CALLBACK *LINEDDAPROC)(INT, INT, LPARAM);
+
+#else /* defined(STRICT) */
+
+typedef FARPROC OLDFONTENUMPROC;
+
+typedef FARPROC FONTENUMPROCA;
+typedef FARPROC FONTENUMPROCW;
+DECL_WINELIB_TYPE_AW(FONTENUMPROC)
+
+typedef FARPROC GOBJENUMPROC;
+typedef FARPROC LINEDDAPROC;
+
+#endif /* defined(STRICT) */
+
+ /* tmPitchAndFamily bits */
+#define TMPF_FIXED_PITCH 1 /* means variable pitch */
+#define TMPF_VECTOR 2
+#define TMPF_TRUETYPE 4
+#define TMPF_DEVICE 8
+
+ /* Text alignment */
+#define TA_NOUPDATECP 0x00
+#define TA_UPDATECP 0x01
+#define TA_LEFT 0x00
+#define TA_RIGHT 0x02
+#define TA_CENTER 0x06
+#define TA_TOP 0x00
+#define TA_BOTTOM 0x08
+#define TA_BASELINE 0x18
+#define TA_RTLREADING 0x100
+#define TA_MASK TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING
+
+#define VTA_BASELINE TA_BASELINE
+#define VTA_LEFT TA_BOTTOM
+#define VTA_RIGHT TA_TOP
+#define VTA_CENTER TA_CENTER
+#define VTA_BOTTOM TA_RIGHT
+#define VTA_TOP TA_LEFT
+
+
+ /* ExtTextOut() parameters */
+#define ETO_GRAYED 0x0001
+#define ETO_OPAQUE 0x0002
+#define ETO_CLIPPED 0x0004
+#define ETO_GLYPH_INDEX 0x0010
+#define ETO_RTLREADING 0x0080
+#define ETO_NUMERICSLOCAL 0x0400
+#define ETO_NUMERICSLATIN 0x0800
+#define ETO_IGNORELANGUAGE 0x1000
+#define ETO_PDY 0x2000
+
+#define ASPECT_FILTERING 0x0001
+
+ /* for GetGlyphIndices() */
+#define GGI_MARK_NONEXISTING_GLYPHS 0x0001
+
+typedef struct
+{
+ UINT gmBlackBoxX;
+ UINT gmBlackBoxY;
+ POINT gmptGlyphOrigin;
+ SHORT gmCellIncX;
+ SHORT gmCellIncY;
+} GLYPHMETRICS, *LPGLYPHMETRICS;
+
+
+#define GGO_METRICS 0
+#define GGO_BITMAP 1
+#define GGO_NATIVE 2
+#define GGO_BEZIER 3
+#define GGO_GRAY2_BITMAP 4
+#define GGO_GRAY4_BITMAP 5
+#define GGO_GRAY8_BITMAP 6
+#define GGO_GLYPH_INDEX 0x80
+#define GGO_UNHINTED 0x100
+
+#ifdef __WINESRC__
+#define WINE_GGO_GRAY16_BITMAP 0x10
+#define WINE_GGO_HRGB_BITMAP 0x11
+#define WINE_GGO_HBGR_BITMAP 0x12
+#define WINE_GGO_VRGB_BITMAP 0x13
+#define WINE_GGO_VBGR_BITMAP 0x14
+#endif
+
+typedef struct
+{
+ WORD fract;
+ SHORT value;
+} FIXED;
+
+typedef struct tagPOINTFX
+{
+ FIXED x;
+ FIXED y;
+} POINTFX, *LPPOINTFX;
+
+typedef struct tagTTPOLYCURVE
+{
+ WORD wType;
+ WORD cpfx;
+ POINTFX apfx[1];
+} TTPOLYCURVE, *LPTTPOLYCURVE;
+
+typedef struct tagTTPOLYGONHEADER
+{
+ DWORD cb;
+ DWORD dwType;
+ POINTFX pfxStart;
+} TTPOLYGONHEADER, *LPTTPOLYGONHEADER;
+
+typedef struct
+{
+ FIXED eM11;
+ FIXED eM12;
+ FIXED eM21;
+ FIXED eM22;
+} MAT2, *LPMAT2;
+
+ /* for GetCharABCWidths() */
+typedef struct
+{
+ INT abcA;
+ UINT abcB;
+ INT abcC;
+} ABC, *PABC, *LPABC;
+
+
+ /* for GetCharacterPlacement () */
+
+#define GCP_DBCS 0x0001
+#define GCP_REORDER 0x0002
+#define GCP_USEKERNING 0x0008
+#define GCP_GLYPHSHAPE 0x0010
+#define GCP_LIGATE 0x0020
+#define GCP_DIACRITIC 0x0100
+#define GCP_KASHIDA 0x0200
+#define GCP_ERROR 0x8000
+#define FLI_MASK 0x103b
+#define GCP_JUSTIFY __MSABI_LONG(0x00010000)
+#define FLI_GLYPHS __MSABI_LONG(0x00040000)
+#define GCP_CLASSIN __MSABI_LONG(0x00080000)
+#define GCP_MAXEXTENT __MSABI_LONG(0x00100000)
+#define GCP_JUSTIFYIN __MSABI_LONG(0x00200000)
+#define GCP_DISPLAYZWG __MSABI_LONG(0x00400000)
+#define GCP_SYMSWAPOFF __MSABI_LONG(0x00800000)
+#define GCP_NUMERICOVERRIDE __MSABI_LONG(0x01000000)
+#define GCP_NEUTRALOVERRIDE __MSABI_LONG(0x02000000)
+#define GCP_NUMERICSLATIN __MSABI_LONG(0x04000000)
+#define GCP_NUMERICSLOCAL __MSABI_LONG(0x08000000)
+
+#define GCPCLASS_LATIN 1
+#define GCPCLASS_HEBREW 2
+#define GCPCLASS_ARABIC 3
+#define GCPCLASS_NEUTRAL 4
+#define GCPCLASS_LOCALNUMBER 5
+#define GCPCLASS_LATINNUMBER 6
+#define GCPCLASS_LATINNUMERICTERMINATOR 7
+#define GCPCLASS_LATINNUMERICSEPARATOR 8
+#define GCPCLASS_NUMERICSEPARATOR 9
+#define GCPCLASS_PREBOUNDLTR 0x80
+#define GCPCLASS_PREBOUNDRLT 0x40
+#define GCPCLASS_POSTBOUNDLTR 0x20
+#define GCPCLASS_POSTBOUNDRTL 0x10
+
+#define GCPGLYPH_LINKBEFORE 0x8000
+#define GCPGLYPH_LINKAFTER 0x4000
+
+
+typedef struct tagGCP_RESULTSA{
+ DWORD lStructSize;
+ LPSTR lpOutString;
+ UINT *lpOrder;
+ INT *lpDx;
+ INT *lpCaretPos;
+ LPSTR lpClass;
+ LPWSTR lpGlyphs;
+ UINT nGlyphs;
+ UINT nMaxFit;
+} GCP_RESULTSA, *LPGCP_RESULTSA;
+
+typedef struct tagGCP_RESULTSW
+{
+ DWORD lStructSize;
+ LPWSTR lpOutString;
+ UINT *lpOrder;
+ INT *lpDx;
+ INT *lpCaretPos;
+ LPSTR lpClass;
+ LPWSTR lpGlyphs;
+ UINT nGlyphs;
+ UINT nMaxFit;
+} GCP_RESULTSW, *LPGCP_RESULTSW;
+
+DECL_WINELIB_TYPE_AW(GCP_RESULTS)
+DECL_WINELIB_TYPE_AW(LPGCP_RESULTS)
+
+ /* Rasterizer status */
+typedef struct
+{
+ SHORT nSize;
+ SHORT wFlags;
+ SHORT nLanguageID;
+} RASTERIZER_STATUS, *LPRASTERIZER_STATUS;
+
+#define TT_AVAILABLE 0x0001
+#define TT_ENABLED 0x0002
+
+#define TT_PRIM_LINE 1
+#define TT_PRIM_QSPLINE 2
+#define TT_PRIM_CSPLINE 3
+#define TT_POLYGON_TYPE 24
+
+ /* OpenGL defines */
+typedef struct {
+ FLOAT x;
+ FLOAT y;
+} POINTFLOAT, *PPOINTFLOAT;
+
+typedef struct {
+ FLOAT gmfBlackBoxX;
+ FLOAT gmfBlackBoxY;
+ POINTFLOAT gmfptGlyphOrigin;
+ FLOAT gmfCellIncX;
+ FLOAT gmfCellIncY;
+} GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
+
+typedef struct {
+ WORD nSize;
+ WORD nVersion;
+ DWORD dwFlags;
+ BYTE iPixelType;
+ BYTE cColorBits;
+ BYTE cRedBits;
+ BYTE cRedShift;
+ BYTE cGreenBits;
+ BYTE cGreenShift;
+ BYTE cBlueBits;
+ BYTE cBlueShift;
+ BYTE cAlphaBits;
+ BYTE cAlphaShift;
+ BYTE cAccumBits;
+ BYTE cAccumRedBits;
+ BYTE cAccumGreenBits;
+ BYTE cAccumBlueBits;
+ BYTE cAccumAlphaBits;
+ BYTE cDepthBits;
+ BYTE cStencilBits;
+ BYTE cAuxBuffers;
+ BYTE iLayerPlane;
+ BYTE bReserved;
+ COLORREF crTransparent;
+} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
+
+/* Get/SetSystemPaletteUse() values */
+#define SYSPAL_ERROR 0
+#define SYSPAL_STATIC 1
+#define SYSPAL_NOSTATIC 2
+#define SYSPAL_NOSTATIC256 3
+
+#ifndef _PALETTEENTRY_DEFINED
+#define _PALETTEENTRY_DEFINED
+typedef struct tagPALETTEENTRY
+{
+ BYTE peRed, peGreen, peBlue, peFlags;
+} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;
+#endif
+
+/* Logical palette entry flags */
+#define PC_RESERVED 0x01
+#define PC_EXPLICIT 0x02
+#define PC_NOCOLLAPSE 0x04
+
+#ifndef _LOGPALETTE_DEFINED
+#define _LOGPALETTE_DEFINED
+typedef struct tagLOGPALETTE
+{
+ WORD palVersion;
+ WORD palNumEntries;
+ PALETTEENTRY palPalEntry[1];
+} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE, *NPLOGPALETTE;
+#endif
+
+ /* Pens */
+
+typedef struct
+{
+ UINT lopnStyle;
+ POINT lopnWidth;
+ COLORREF lopnColor;
+} LOGPEN, *LPLOGPEN;
+
+
+typedef struct tagEXTLOGPEN
+{
+ DWORD elpPenStyle;
+ DWORD elpWidth;
+ UINT elpBrushStyle;
+ COLORREF elpColor;
+ ULONG_PTR elpHatch;
+ DWORD elpNumEntries;
+ DWORD elpStyleEntry[1];
+} EXTLOGPEN, *PEXTLOGPEN, *NPEXTLOGPEN, *LPEXTLOGPEN;
+
+#define PS_SOLID 0x00000000
+#define PS_DASH 0x00000001
+#define PS_DOT 0x00000002
+#define PS_DASHDOT 0x00000003
+#define PS_DASHDOTDOT 0x00000004
+#define PS_NULL 0x00000005
+#define PS_INSIDEFRAME 0x00000006
+#define PS_USERSTYLE 0x00000007
+#define PS_ALTERNATE 0x00000008
+#define PS_STYLE_MASK 0x0000000f
+
+#define PS_ENDCAP_ROUND 0x00000000
+#define PS_ENDCAP_SQUARE 0x00000100
+#define PS_ENDCAP_FLAT 0x00000200
+#define PS_ENDCAP_MASK 0x00000f00
+
+#define PS_JOIN_ROUND 0x00000000
+#define PS_JOIN_BEVEL 0x00001000
+#define PS_JOIN_MITER 0x00002000
+#define PS_JOIN_MASK 0x0000f000
+
+#define PS_COSMETIC 0x00000000
+#define PS_GEOMETRIC 0x00010000
+#define PS_TYPE_MASK 0x000f0000
+
+ /* Regions */
+
+#define ERROR 0
+#define NULLREGION 1
+#define SIMPLEREGION 2
+#define COMPLEXREGION 3
+#define RGN_ERROR ERROR
+
+#define RGN_AND 1
+#define RGN_OR 2
+#define RGN_XOR 3
+#define RGN_DIFF 4
+#define RGN_COPY 5
+#define RGN_MIN RGN_AND
+#define RGN_MAX RGN_COPY
+
+#define SYSRGN 4
+
+ /* Device contexts */
+
+ /* Polygon modes */
+#define ALTERNATE 1
+#define WINDING 2
+#define POLYFILL_LAST 2
+
+/* Background modes */
+/* Apparently some broken svr4 includes define TRANSPARENT */
+#undef TRANSPARENT
+#define TRANSPARENT 1
+#define OPAQUE 2
+#define BKMODE_LAST 2
+
+ /* Graphics Modes */
+#define GM_COMPATIBLE 1
+#define GM_ADVANCED 2
+#define GM_LAST 2
+
+ /* Arc direction modes */
+#define AD_COUNTERCLOCKWISE 1
+#define AD_CLOCKWISE 2
+
+ /* Map modes */
+#define MM_TEXT 1
+#define MM_LOMETRIC 2
+#define MM_HIMETRIC 3
+#define MM_LOENGLISH 4
+#define MM_HIENGLISH 5
+#define MM_TWIPS 6
+#define MM_ISOTROPIC 7
+#define MM_ANISOTROPIC 8
+
+#define MM_MIN MM_TEXT
+#define MM_MAX MM_ANISOTROPIC
+#define MM_MAX_FIXEDSCALE MM_TWIPS
+
+ /* Coordinate modes */
+#define ABSOLUTE 1
+#define RELATIVE 2
+
+ /* Flood fill modes */
+#define FLOODFILLBORDER 0
+#define FLOODFILLSURFACE 1
+
+ /* Device parameters for GetDeviceCaps() */
+#define DRIVERVERSION 0
+#define TECHNOLOGY 2
+#define HORZSIZE 4
+#define VERTSIZE 6
+#define HORZRES 8
+#define VERTRES 10
+#define BITSPIXEL 12
+#define PLANES 14
+#define NUMBRUSHES 16
+#define NUMPENS 18
+#define NUMMARKERS 20
+#define NUMFONTS 22
+#define NUMCOLORS 24
+#define PDEVICESIZE 26
+#define CURVECAPS 28
+#define LINECAPS 30
+#define POLYGONALCAPS 32
+#define TEXTCAPS 34
+#define CLIPCAPS 36
+#define RASTERCAPS 38
+#define ASPECTX 40
+#define ASPECTY 42
+#define ASPECTXY 44
+#define LOGPIXELSX 88
+#define LOGPIXELSY 90
+#define CAPS1 94
+#define SIZEPALETTE 104
+#define NUMRESERVED 106
+#define COLORRES 108
+
+#define PHYSICALWIDTH 110
+#define PHYSICALHEIGHT 111
+#define PHYSICALOFFSETX 112
+#define PHYSICALOFFSETY 113
+#define SCALINGFACTORX 114
+#define SCALINGFACTORY 115
+#define VREFRESH 116
+#define DESKTOPVERTRES 117
+#define DESKTOPHORZRES 118
+#define BLTALIGNMENT 119
+#define SHADEBLENDCAPS 120
+#define COLORMGMTCAPS 121
+
+/* TECHNOLOGY */
+#define DT_PLOTTER 0
+#define DT_RASDISPLAY 1
+#define DT_RASPRINTER 2
+#define DT_RASCAMERA 3
+#define DT_CHARSTREAM 4
+#define DT_METAFILE 5
+#define DT_DISPFILE 6
+
+/* CURVECAPS */
+#define CC_NONE 0x0000
+#define CC_CIRCLES 0x0001
+#define CC_PIE 0x0002
+#define CC_CHORD 0x0004
+#define CC_ELLIPSES 0x0008
+#define CC_WIDE 0x0010
+#define CC_STYLED 0x0020
+#define CC_WIDESTYLED 0x0040
+#define CC_INTERIORS 0x0080
+#define CC_ROUNDRECT 0x0100
+
+/* LINECAPS */
+#define LC_NONE 0x0000
+#define LC_POLYLINE 0x0002
+#define LC_MARKER 0x0004
+#define LC_POLYMARKER 0x0008
+#define LC_WIDE 0x0010
+#define LC_STYLED 0x0020
+#define LC_WIDESTYLED 0x0040
+#define LC_INTERIORS 0x0080
+
+/* POLYGONALCAPS */
+#define PC_NONE 0x0000
+#define PC_POLYGON 0x0001
+#define PC_RECTANGLE 0x0002
+#define PC_WINDPOLYGON 0x0004
+#define PC_TRAPEZOID 0x0004
+#define PC_SCANLINE 0x0008
+#define PC_WIDE 0x0010
+#define PC_STYLED 0x0020
+#define PC_WIDESTYLED 0x0040
+#define PC_INTERIORS 0x0080
+#define PC_POLYPOLYGON 0x0100
+#define PC_PATHS 0x0200
+
+/* TEXTCAPS */
+#define TC_OP_CHARACTER 0x0001
+#define TC_OP_STROKE 0x0002
+#define TC_CP_STROKE 0x0004
+#define TC_CR_90 0x0008
+#define TC_CR_ANY 0x0010
+#define TC_SF_X_YINDEP 0x0020
+#define TC_SA_DOUBLE 0x0040
+#define TC_SA_INTEGER 0x0080
+#define TC_SA_CONTIN 0x0100
+#define TC_EA_DOUBLE 0x0200
+#define TC_IA_ABLE 0x0400
+#define TC_UA_ABLE 0x0800
+#define TC_SO_ABLE 0x1000
+#define TC_RA_ABLE 0x2000
+#define TC_VA_ABLE 0x4000
+#define TC_RESERVED 0x8000
+#define TC_SCROLLBLT 0x00010000
+
+/* CLIPCAPS */
+#define CP_NONE 0x0000
+#define CP_RECTANGLE 0x0001
+#define CP_REGION 0x0002
+
+/* RASTERCAPS */
+#define RC_NONE 0x0000
+#define RC_BITBLT 0x0001
+#define RC_BANDING 0x0002
+#define RC_SCALING 0x0004
+#define RC_BITMAP64 0x0008
+#define RC_GDI20_OUTPUT 0x0010
+#define RC_GDI20_STATE 0x0020
+#define RC_SAVEBITMAP 0x0040
+#define RC_DI_BITMAP 0x0080
+#define RC_PALETTE 0x0100
+#define RC_DIBTODEV 0x0200
+#define RC_BIGFONT 0x0400
+#define RC_STRETCHBLT 0x0800
+#define RC_FLOODFILL 0x1000
+#define RC_STRETCHDIB 0x2000
+#define RC_OP_DX_OUTPUT 0x4000
+#define RC_DEVBITS 0x8000
+
+/* CAPS1 */
+#define C1_TRANSPARENT 0x0001
+#define TC_TT_ABLE 0x0002
+#define C1_TT_CR_ANY 0x0004
+#define C1_EMF_COMPLIANT 0x0008
+#define C1_DIBENGINE 0x0010
+#define C1_GAMMA_RAMP 0x0040
+#define C1_REINIT_ABLE 0x0080
+#define C1_GLYPH_INDEX 0x0100
+#define C1_BIT_PACKED 0x0200
+#define C1_BYTE_PACKED 0x0400
+#define C1_COLORCURSOR 0x0800
+#define C1_CMYK_ABLE 0x1000
+#define C1_SLOW_CARD 0x2000
+
+/* SHADEBLENDCAPS */
+#define SB_NONE 0x0000
+#define SB_CONST_ALPHA 0x0001
+#define SB_PIXEL_ALPHA 0x0002
+#define SB_PREMULT_ALPHA 0x0004
+#define SB_GRAD_RECT 0x0010
+#define SB_GRAD_TRI 0x0020
+
+ /* Device-independent bitmaps */
+
+typedef struct tagRGBQUAD {
+ BYTE rgbBlue;
+ BYTE rgbGreen;
+ BYTE rgbRed;
+ BYTE rgbReserved;
+} RGBQUAD, *LPRGBQUAD;
+
+typedef struct tagRGBTRIPLE {
+ BYTE rgbtBlue;
+ BYTE rgbtGreen;
+ BYTE rgbtRed;
+} RGBTRIPLE;
+
+#include <pshpack2.h>
+typedef struct
+{
+ WORD bfType;
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+} BITMAPFILEHEADER, *PBITMAPFILEHEADER, *LPBITMAPFILEHEADER;
+#include <poppack.h>
+
+#define MAKEPOINTS(l) (*((POINTS *)&(l)))
+
+typedef struct
+{
+ DWORD biSize;
+ LONG biWidth;
+ LONG biHeight;
+ WORD biPlanes;
+ WORD biBitCount;
+ DWORD biCompression;
+ DWORD biSizeImage;
+ LONG biXPelsPerMeter;
+ LONG biYPelsPerMeter;
+ DWORD biClrUsed;
+ DWORD biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;
+
+typedef struct
+{
+ DWORD bV4Size;
+ LONG bV4Width;
+ LONG bV4Height;
+ WORD bV4Planes;
+ WORD bV4BitCount;
+ DWORD bV4V4Compression;
+ DWORD bV4SizeImage;
+ LONG bV4XPelsPerMeter;
+ LONG bV4YPelsPerMeter;
+ DWORD bV4ClrUsed;
+ DWORD bV4ClrImportant;
+ DWORD bV4RedMask;
+ DWORD bV4GreenMask;
+ DWORD bV4BlueMask;
+ DWORD bV4AlphaMask;
+ DWORD bV4CSType;
+ CIEXYZTRIPLE bV4Endpoints;
+ DWORD bV4GammaRed;
+ DWORD bV4GammaGreen;
+ DWORD bV4GammaBlue;
+} BITMAPV4HEADER, *PBITMAPV4HEADER;
+
+typedef struct {
+ DWORD bV5Size;
+ LONG bV5Width;
+ LONG bV5Height;
+ WORD bV5Planes;
+ WORD bV5BitCount;
+ DWORD bV5Compression;
+ DWORD bV5SizeImage;
+ LONG bV5XPelsPerMeter;
+ LONG bV5YPelsPerMeter;
+ DWORD bV5ClrUsed;
+ DWORD bV5ClrImportant;
+ DWORD bV5RedMask;
+ DWORD bV5GreenMask;
+ DWORD bV5BlueMask;
+ DWORD bV5AlphaMask;
+ DWORD bV5CSType;
+ CIEXYZTRIPLE bV5Endpoints;
+ DWORD bV5GammaRed;
+ DWORD bV5GammaGreen;
+ DWORD bV5GammaBlue;
+ DWORD bV5Intent;
+ DWORD bV5ProfileData;
+ DWORD bV5ProfileSize;
+ DWORD bV5Reserved;
+} BITMAPV5HEADER, *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
+
+#define PROFILE_LINKED 0x4c494e4b /* 'LINK' */
+#define PROFILE_EMBEDDED 0x4d424544 /* 'MBED' */
+
+
+ /* biCompression */
+#define BI_RGB 0
+#define BI_RLE8 1
+#define BI_RLE4 2
+#define BI_BITFIELDS 3
+#define BI_JPEG 4
+#define BI_PNG 5
+
+typedef struct tagBITMAPINFO
+{
+ BITMAPINFOHEADER bmiHeader;
+ RGBQUAD bmiColors[1];
+} BITMAPINFO, *PBITMAPINFO, *LPBITMAPINFO;
+
+typedef struct
+{
+ DWORD bcSize;
+ WORD bcWidth;
+ WORD bcHeight;
+ WORD bcPlanes;
+ WORD bcBitCount;
+} BITMAPCOREHEADER, *PBITMAPCOREHEADER, *LPBITMAPCOREHEADER;
+
+typedef struct
+{
+ BITMAPCOREHEADER bmciHeader;
+ RGBTRIPLE bmciColors[1];
+} BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO;
+
+#define DIB_RGB_COLORS 0
+#define DIB_PAL_COLORS 1
+#define CBM_INIT 4
+
+typedef struct
+{
+ BITMAP dsBm;
+ BITMAPINFOHEADER dsBmih;
+ DWORD dsBitfields[3];
+ HANDLE dshSection;
+ DWORD dsOffset;
+} DIBSECTION, *PDIBSECTION, *LPDIBSECTION;
+
+ /* Stock GDI objects for GetStockObject() */
+
+#define WHITE_BRUSH 0
+#define LTGRAY_BRUSH 1
+#define GRAY_BRUSH 2
+#define DKGRAY_BRUSH 3
+#define BLACK_BRUSH 4
+#define NULL_BRUSH 5
+#define HOLLOW_BRUSH 5
+#define WHITE_PEN 6
+#define BLACK_PEN 7
+#define NULL_PEN 8
+#define OEM_FIXED_FONT 10
+#define ANSI_FIXED_FONT 11
+#define ANSI_VAR_FONT 12
+#define SYSTEM_FONT 13
+#define DEVICE_DEFAULT_FONT 14
+#define DEFAULT_PALETTE 15
+#define SYSTEM_FIXED_FONT 16
+#define DEFAULT_GUI_FONT 17
+#define DC_BRUSH 18
+#define DC_PEN 19
+
+#define STOCK_LAST 19
+
+#define CLR_INVALID 0xffffffff
+
+typedef USHORT COLOR16;
+
+typedef struct _TRIVERTEX
+{
+ LONG x;
+ LONG y;
+ COLOR16 Red;
+ COLOR16 Green;
+ COLOR16 Blue;
+ COLOR16 Alpha;
+} TRIVERTEX, *PTRIVERTEX, *LPTRIVERTEX;
+
+typedef struct _GRADIENT_TRIANGLE
+{
+ ULONG Vertex1;
+ ULONG Vertex2;
+ ULONG Vertex3;
+} GRADIENT_TRIANGLE, *PGRADIENT_TRIANGLE, *LPGRADIENT_TRIANGLE;
+
+typedef struct _GRADIENT_RECT
+{
+ ULONG UpperLeft;
+ ULONG LowerRight;
+} GRADIENT_RECT, *PGRADIENT_RECT, *LPGRADIENT_RECT;
+
+#define AC_SRC_OVER 0x00
+#define AC_SRC_ALPHA 0x01
+
+typedef struct _BLENDFUNCTION
+{
+ BYTE BlendOp;
+ BYTE BlendFlags;
+ BYTE SourceConstantAlpha;
+ BYTE AlphaFormat;
+} BLENDFUNCTION, *PBLENDFUNCTION;
+
+#define GRADIENT_FILL_RECT_H 0x00000000
+#define GRADIENT_FILL_RECT_V 0x00000001
+#define GRADIENT_FILL_TRIANGLE 0x00000002
+#define GRADIENT_FILL_OP_FLAG 0x000000ff
+
+
+/* Metafile header structure */
+#include <pshpack2.h>
+typedef struct
+{
+ WORD mtType;
+ WORD mtHeaderSize;
+ WORD mtVersion;
+ DWORD mtSize;
+ WORD mtNoObjects;
+ DWORD mtMaxRecord;
+ WORD mtNoParameters;
+} METAHEADER, *PMETAHEADER, *LPMETAHEADER;
+#include <poppack.h>
+
+/* Metafile typical record structure */
+typedef struct
+{
+ DWORD rdSize;
+ WORD rdFunction;
+ WORD rdParm[1];
+} METARECORD, *PMETARECORD, *LPMETARECORD;
+
+/* Handle table structure */
+
+typedef struct
+{
+ HGDIOBJ objectHandle[1];
+} HANDLETABLE, *PHANDLETABLE, *LPHANDLETABLE;
+
+
+/* Clipboard metafile picture structure */
+typedef struct
+{
+ LONG mm;
+ LONG xExt;
+ LONG yExt;
+ HMETAFILE hMF;
+} METAFILEPICT, *LPMETAFILEPICT;
+
+
+/* Metafile functions */
+#define META_SETBKCOLOR 0x0201
+#define META_SETBKMODE 0x0102
+#define META_SETMAPMODE 0x0103
+#define META_SETROP2 0x0104
+#define META_SETRELABS 0x0105
+#define META_SETPOLYFILLMODE 0x0106
+#define META_SETSTRETCHBLTMODE 0x0107
+#define META_SETTEXTCHAREXTRA 0x0108
+#define META_SETTEXTCOLOR 0x0209
+#define META_SETTEXTJUSTIFICATION 0x020A
+#define META_SETWINDOWORG 0x020B
+#define META_SETWINDOWEXT 0x020C
+#define META_SETVIEWPORTORG 0x020D
+#define META_SETVIEWPORTEXT 0x020E
+#define META_OFFSETWINDOWORG 0x020F
+#define META_SCALEWINDOWEXT 0x0410
+#define META_OFFSETVIEWPORTORG 0x0211
+#define META_SCALEVIEWPORTEXT 0x0412
+#define META_LINETO 0x0213
+#define META_MOVETO 0x0214
+#define META_EXCLUDECLIPRECT 0x0415
+#define META_INTERSECTCLIPRECT 0x0416
+#define META_ARC 0x0817
+#define META_ELLIPSE 0x0418
+#define META_FLOODFILL 0x0419
+#define META_PIE 0x081A
+#define META_RECTANGLE 0x041B
+#define META_ROUNDRECT 0x061C
+#define META_PATBLT 0x061D
+#define META_SAVEDC 0x001E
+#define META_SETPIXEL 0x041F
+#define META_OFFSETCLIPRGN 0x0220
+#define META_TEXTOUT 0x0521
+#define META_BITBLT 0x0922
+#define META_STRETCHBLT 0x0B23
+#define META_POLYGON 0x0324
+#define META_POLYLINE 0x0325
+#define META_ESCAPE 0x0626
+#define META_RESTOREDC 0x0127
+#define META_FILLREGION 0x0228
+#define META_FRAMEREGION 0x0429
+#define META_INVERTREGION 0x012A
+#define META_PAINTREGION 0x012B
+#define META_SELECTCLIPREGION 0x012C
+#define META_SELECTOBJECT 0x012D
+#define META_SETTEXTALIGN 0x012E
+#define META_DRAWTEXT 0x062F
+#define META_CHORD 0x0830
+#define META_SETMAPPERFLAGS 0x0231
+#define META_EXTTEXTOUT 0x0A32
+#define META_SETDIBTODEV 0x0D33
+#define META_SELECTPALETTE 0x0234
+#define META_REALIZEPALETTE 0x0035
+#define META_ANIMATEPALETTE 0x0436
+#define META_SETPALENTRIES 0x0037
+#define META_POLYPOLYGON 0x0538
+#define META_RESIZEPALETTE 0x0139
+#define META_DIBBITBLT 0x0940
+#define META_DIBSTRETCHBLT 0x0B41
+#define META_DIBCREATEPATTERNBRUSH 0x0142
+#define META_STRETCHDIB 0x0F43
+#define META_EXTFLOODFILL 0x0548
+#define META_RESETDC 0x014C
+#define META_STARTDOC 0x014D
+#define META_STARTPAGE 0x004F
+#define META_ENDPAGE 0x0050
+#define META_ABORTDOC 0x0052
+#define META_ENDDOC 0x005E
+#define META_DELETEOBJECT 0x01F0
+#define META_CREATEPALETTE 0x00F7
+#define META_CREATEBRUSH 0x00F8
+#define META_CREATEPATTERNBRUSH 0x01F9
+#define META_CREATEPENINDIRECT 0x02FA
+#define META_CREATEFONTINDIRECT 0x02FB
+#define META_CREATEBRUSHINDIRECT 0x02FC
+#define META_CREATEBITMAPINDIRECT 0x02FD
+#define META_CREATEBITMAP 0x06FE
+#define META_CREATEREGION 0x06FF
+#define META_UNKNOWN 0x0529 /* FIXME: unknown meta magic */
+
+typedef INT (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,
+ INT,LPARAM);
+
+/* enhanced metafile structures and functions */
+
+/* note that ENHMETAHEADER is just a particular kind of ENHMETARECORD,
+ ie. the header is just the first record in the metafile */
+typedef struct {
+ DWORD iType;
+ DWORD nSize;
+ RECTL rclBounds;
+ RECTL rclFrame;
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD nBytes;
+ DWORD nRecords;
+ WORD nHandles;
+ WORD sReserved;
+ DWORD nDescription;
+ DWORD offDescription;
+ DWORD nPalEntries;
+ SIZEL szlDevice;
+ SIZEL szlMillimeters;
+ DWORD cbPixelFormat;
+ DWORD offPixelFormat;
+ DWORD bOpenGL;
+ SIZEL szlMicrometers;
+} ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
+
+typedef struct {
+ DWORD iType;
+ DWORD nSize;
+ DWORD dParm[1];
+} ENHMETARECORD, *LPENHMETARECORD;
+
+typedef struct {
+ DWORD iType;
+ DWORD nSize;
+} EMR, *PEMR;
+
+typedef struct {
+ POINTL ptlReference;
+ DWORD nChars;
+ DWORD offString;
+ DWORD fOptions;
+ RECTL rcl;
+ DWORD offDx;
+} EMRTEXT, *PEMRTEXT;
+
+typedef struct {
+ EMR emr;
+} EMRABORTPATH, *PEMRABORTPATH,
+ EMRBEGINPATH, *PEMRBEGINPATH,
+ EMRENDPATH, *PEMRENDPATH,
+ EMRCLOSEFIGURE, *PEMRCLOSEFIGURE,
+ EMRFLATTENPATH, *PEMRFLATTENPATH,
+ EMRWIDENPATH, *PEMRWIDENPATH,
+ EMRSETMETARGN, *PEMRSETMETARGN,
+ EMRSAVEDC, *PEMRSAVEDC,
+ EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
+
+typedef struct {
+ EMR emr;
+ POINTL ptlCenter;
+ DWORD nRadius;
+ FLOAT eStartAngle;
+ FLOAT eSweepAngle;
+} EMRANGLEARC, *PEMRANGLEARC;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBox;
+ POINTL ptlStart;
+ POINTL ptlEnd;
+} EMRARC, *PEMRARC,
+ EMRARCTO, *PEMRARCTO,
+ EMRCHORD, *PEMRCHORD,
+ EMRPIE, *PEMRPIE;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+} EMRBITBLT, *PEMRBITBLT;
+
+typedef struct {
+ EMR emr;
+ DWORD ihBrush;
+ LOGBRUSH32 lb;
+} EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
+
+typedef struct {
+ EMR emr;
+ DWORD ihCS;
+ LOGCOLORSPACEA lcs;
+} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
+
+typedef struct {
+ EMR emr;
+ DWORD ihCS;
+ LOGCOLORSPACEW lcs;
+ DWORD dwFlags;
+ DWORD cbData;
+ BYTE Data[1];
+} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;
+
+typedef struct {
+ EMR emr;
+ DWORD ihBrush;
+ DWORD iUsage;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+} EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;
+
+typedef struct {
+ EMR emr;
+ DWORD ihBrush;
+ DWORD iUsage;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+} EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
+
+typedef struct {
+ EMR emr;
+ DWORD ihPal;
+ LOGPALETTE lgpl;
+} EMRCREATEPALETTE, *PEMRCREATEPALETTE;
+
+typedef struct {
+ EMR emr;
+ DWORD ihPen;
+ LOGPEN lopn;
+} EMRCREATEPEN, *PEMRCREATEPEN;
+
+typedef struct {
+ EMR emr;
+ DWORD ihCS;
+} EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE,
+ EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
+ EMRSETCOLORSPACE, *PEMRSETCOLORSPACE;
+
+typedef struct {
+ EMR emr;
+ DWORD ihObject;
+} EMRDELETEOBJECT, *PEMRDELETEOBJECT,
+ EMRSELECTOBJECT, *PEMRSELECTOBJECT;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBox;
+} EMRELLIPSE, *PEMRELLIPSE,
+ EMRRECTANGLE, *PEMRRECTANGLE;
+
+typedef struct {
+ EMR emr;
+ DWORD nPalEntries;
+ DWORD offPalEntries;
+ DWORD nSizeLast;
+} EMREOF, *PEMREOF;
+
+typedef struct {
+ EMR emr;
+ RECTL rclClip;
+} EMREXCLUDECLIPRECT, *PEMREXCLUDECLIPRECT,
+ EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
+
+typedef struct {
+ EMR emr;
+ DWORD ihFont;
+ EXTLOGFONTW elfw;
+} EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;
+
+typedef struct {
+ EMR emr;
+ DWORD ihPen;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+ EXTLOGPEN elp;
+} EMREXTCREATEPEN, *PEMREXTCREATEPEN;
+
+typedef struct {
+ EMR emr;
+ POINTL ptlStart;
+ COLORREF crColor;
+ DWORD iMode;
+} EMREXTFLOODFILL, *PEMREXTFLOODFILL;
+
+typedef struct {
+ EMR emr;
+ DWORD cbRgnData;
+ DWORD iMode;
+ BYTE RgnData[1];
+} EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD iGraphicsMode;
+ FLOAT exScale;
+ FLOAT eyScale;
+ EMRTEXT emrtext;
+} EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
+ EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+} EMRFILLPATH, *PEMRFILLPATH,
+ EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
+ EMRSTROKEPATH, *PEMRSTROKEPATH;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ DWORD ihBrush;
+ BYTE RgnData[1];
+} EMRFILLRGN, *PEMRFILLRGN;
+
+typedef struct {
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD cbData;
+ DWORD offData;
+} EMRFORMAT, *PEMRFORMAT;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ DWORD ihBrush;
+ SIZEL szlStroke;
+ BYTE RgnData[1];
+} EMRFRAMERGN, *PEMRFRAMERGN;
+
+typedef struct {
+ EMR emr;
+ DWORD cbData;
+ BYTE Data[1];
+} EMRGDICOMMENT, *PEMRGDICOMMENT;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nVer;
+ DWORD nTri;
+ ULONG ulMode;
+ TRIVERTEX Ver[1];
+} EMRGRADIENTFILL, *PEMRGRADIENTFILL;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ BYTE RgnData[1];
+} EMRINVERTRGN, *PEMRINVERTRGN,
+ EMRPAINTRGN, *PEMRPAINTRGN;
+
+typedef struct {
+ EMR emr;
+ POINTL ptl;
+} EMRLINETO, *PEMRLINETO,
+ EMRMOVETOEX, *PEMRMOVETOEX;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG xMask;
+ LONG yMask;
+ DWORD iUsageMask;
+ DWORD offBmiMask;
+ DWORD cbBmiMask;
+ DWORD offBitsMask;
+ DWORD cbBitsMask;
+} EMRMASKBLT, *PEMRMASKBLT;
+
+typedef struct {
+ EMR emr;
+ XFORM xform;
+ DWORD iMode;
+} EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;
+
+typedef struct {
+ EMR emr;
+ POINTL ptlOffset;
+} EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ POINTL aptlDest[3];
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG xMask;
+ LONG yMask;
+ DWORD iUsageMask;
+ DWORD offBmiMask;
+ DWORD cbBmiMask;
+ DWORD offBitsMask;
+ DWORD cbBitsMask;
+} EMRPLGBLT, *PEMRPLGBLT;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cptl;
+ POINTL aptl[1];
+} EMRPOLYLINE, *PEMRPOLYLINE,
+ EMRPOLYBEZIER, *PEMRPOLYBEZIER,
+ EMRPOLYGON, *PEMRPOLYGON,
+ EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
+ EMRPOLYLINETO, *PEMRPOLYLINETO;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cpts;
+ POINTS apts[1];
+} EMRPOLYLINE16, *PEMRPOLYLINE16,
+ EMRPOLYBEZIER16, *PEMRPOLYBEZIER16,
+ EMRPOLYGON16, *PEMRPOLYGON16,
+ EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
+ EMRPOLYLINETO16, *PEMRPOLYLINETO16;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cpts;
+ POINTS apts[1];
+ BYTE abTypes[1];
+} EMRPOLYDRAW16, *PEMRPOLYDRAW16;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nPolys;
+ DWORD cpts;
+ DWORD aPolyCounts[1];
+ POINTS apts[1];
+} EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
+ EMRPOLYPOLYGON16, *PEMRPOLYPOLYGON16;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cptl;
+ POINTL aptl[1];
+ BYTE abTypes[1];
+} EMRPOLYDRAW, *PEMRPOLYDRAW;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nPolys;
+ DWORD cptl;
+ DWORD aPolyCounts[1];
+ POINTL aptl[1];
+} EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
+ EMRPOLYPOLYGON, *PEMRPOLYPOLYGON;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD iGraphicsMode;
+ FLOAT exScale;
+ FLOAT eyScale;
+ LONG cStrings;
+ EMRTEXT aemrtext[1];
+} EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
+ EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
+
+typedef struct {
+ EMR emr;
+ DWORD ihPal;
+ DWORD cEntries;
+} EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
+
+typedef struct {
+ EMR emr;
+ LONG iRelative;
+} EMRRESTOREDC, *PEMRRESTOREDC;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBox;
+ SIZEL szlCorner;
+} EMRROUNDRECT, *PEMRROUNDRECT;
+
+typedef struct {
+ EMR emr;
+ LONG xNum;
+ LONG xDenom;
+ LONG yNum;
+ LONG yDenom;
+} EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
+ EMRSCALEWINDOWEXTEX, *PEMRSCALEWINDOWEXTEX;
+
+typedef struct {
+ EMR emr;
+ DWORD iMode;
+} EMRSELECTCLIPPATH, *PEMRSELECTCLIPPATH,
+ EMRSETBKMODE, *PEMRSETBKMODE,
+ EMRSETMAPMODE, *PEMRSETMAPMODE,
+ EMRSETPOLYFILLMODE, *PEMRSETPOLYFILLMODE,
+ EMRSETROP2, *PEMRSETROP2,
+ EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
+ EMRSETTEXTALIGN, *PEMRSETTEXTALIGN,
+ EMRSETICMMODE, *PEMRSETICMMODE,
+ EMRSETLAYOUT, *PEMRSETLAYOUT;
+
+typedef struct {
+ EMR emr;
+ DWORD ihPal;
+} EMRSELECTPALETTE, *PEMRSELECTPALETTE;
+
+typedef struct {
+ EMR emr;
+ DWORD iArcDirection;
+} EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
+
+typedef struct {
+ EMR emr;
+ COLORREF crColor;
+} EMRSETBKCOLOR, *PEMRSETBKCOLOR,
+ EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
+
+typedef struct {
+ EMR emr;
+ POINTL ptlOrigin;
+} EMRSETBRUSHORGEX, *PEMRSETBRUSHORGEX,
+ EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
+ EMRSETWINDOWORGEX, *PEMRSETWINDOWORGEX;
+
+typedef struct {
+ EMR emr;
+ COLORADJUSTMENT ColorAdjustment;
+} EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ DWORD iUsageSrc;
+ DWORD iStartScan;
+ DWORD cScans;
+} EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
+
+typedef struct {
+ EMR emr;
+ DWORD dwFlags;
+} EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
+
+typedef struct {
+ EMR emr;
+ FLOAT eMiterLimit;
+} EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
+
+typedef struct {
+ EMR emr;
+ DWORD ihPal;
+ DWORD iStart;
+ DWORD cEntries;
+ PALETTEENTRY aPalEntries[1];
+} EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
+
+typedef struct {
+ EMR emr;
+ POINTL ptlPixel;
+ COLORREF crColor;
+} EMRSETPIXELV, *PEMRSETPIXELV;
+
+typedef struct {
+ EMR emr;
+ SIZEL szlExtent;
+} EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
+ EMRSETWINDOWEXTEX, *PEMRSETWINDOWEXTEX;
+
+typedef struct {
+ EMR emr;
+ XFORM xform;
+} EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG cxSrc;
+ LONG cySrc;
+} EMRSTRETCHBLT, *PEMRSTRETCHBLT;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG cxSrc;
+ LONG cySrc;
+} EMRALPHABLEND, *PEMRALPHABLEND;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ DWORD iUsageSrc;
+ DWORD dwRop;
+ LONG cxDest;
+ LONG cyDest;
+} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
+
+typedef struct {
+ EMR emr;
+ PIXELFORMATDESCRIPTOR pfd;
+} EMRPIXELFORMAT, *PEMRPIXELFORMAT;
+
+typedef struct tagEMRGLSRECORD {
+ EMR emr;
+ DWORD cbData;
+ BYTE Data[1];
+} EMRGLSRECORD, *PEMRGLSRECORD;
+
+typedef struct {
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbData;
+ BYTE Data[1];
+} EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;
+
+typedef INT (CALLBACK *ENHMFENUMPROC)(HDC, HANDLETABLE *,
+ const ENHMETARECORD *, INT, LPARAM);
+
+#define EMR_HEADER 1
+#define EMR_POLYBEZIER 2
+#define EMR_POLYGON 3
+#define EMR_POLYLINE 4
+#define EMR_POLYBEZIERTO 5
+#define EMR_POLYLINETO 6
+#define EMR_POLYPOLYLINE 7
+#define EMR_POLYPOLYGON 8
+#define EMR_SETWINDOWEXTEX 9
+#define EMR_SETWINDOWORGEX 10
+#define EMR_SETVIEWPORTEXTEX 11
+#define EMR_SETVIEWPORTORGEX 12
+#define EMR_SETBRUSHORGEX 13
+#define EMR_EOF 14
+#define EMR_SETPIXELV 15
+#define EMR_SETMAPPERFLAGS 16
+#define EMR_SETMAPMODE 17
+#define EMR_SETBKMODE 18
+#define EMR_SETPOLYFILLMODE 19
+#define EMR_SETROP2 20
+#define EMR_SETSTRETCHBLTMODE 21
+#define EMR_SETTEXTALIGN 22
+#define EMR_SETCOLORADJUSTMENT 23
+#define EMR_SETTEXTCOLOR 24
+#define EMR_SETBKCOLOR 25
+#define EMR_OFFSETCLIPRGN 26
+#define EMR_MOVETOEX 27
+#define EMR_SETMETARGN 28
+#define EMR_EXCLUDECLIPRECT 29
+#define EMR_INTERSECTCLIPRECT 30
+#define EMR_SCALEVIEWPORTEXTEX 31
+#define EMR_SCALEWINDOWEXTEX 32
+#define EMR_SAVEDC 33
+#define EMR_RESTOREDC 34
+#define EMR_SETWORLDTRANSFORM 35
+#define EMR_MODIFYWORLDTRANSFORM 36
+#define EMR_SELECTOBJECT 37
+#define EMR_CREATEPEN 38
+#define EMR_CREATEBRUSHINDIRECT 39
+#define EMR_DELETEOBJECT 40
+#define EMR_ANGLEARC 41
+#define EMR_ELLIPSE 42
+#define EMR_RECTANGLE 43
+#define EMR_ROUNDRECT 44
+#define EMR_ARC 45
+#define EMR_CHORD 46
+#define EMR_PIE 47
+#define EMR_SELECTPALETTE 48
+#define EMR_CREATEPALETTE 49
+#define EMR_SETPALETTEENTRIES 50
+#define EMR_RESIZEPALETTE 51
+#define EMR_REALIZEPALETTE 52
+#define EMR_EXTFLOODFILL 53
+#define EMR_LINETO 54
+#define EMR_ARCTO 55
+#define EMR_POLYDRAW 56
+#define EMR_SETARCDIRECTION 57
+#define EMR_SETMITERLIMIT 58
+#define EMR_BEGINPATH 59
+#define EMR_ENDPATH 60
+#define EMR_CLOSEFIGURE 61
+#define EMR_FILLPATH 62
+#define EMR_STROKEANDFILLPATH 63
+#define EMR_STROKEPATH 64
+#define EMR_FLATTENPATH 65
+#define EMR_WIDENPATH 66
+#define EMR_SELECTCLIPPATH 67
+#define EMR_ABORTPATH 68
+#define EMR_GDICOMMENT 70
+#define EMR_FILLRGN 71
+#define EMR_FRAMERGN 72
+#define EMR_INVERTRGN 73
+#define EMR_PAINTRGN 74
+#define EMR_EXTSELECTCLIPRGN 75
+#define EMR_BITBLT 76
+#define EMR_STRETCHBLT 77
+#define EMR_MASKBLT 78
+#define EMR_PLGBLT 79
+#define EMR_SETDIBITSTODEVICE 80
+#define EMR_STRETCHDIBITS 81
+#define EMR_EXTCREATEFONTINDIRECTW 82
+#define EMR_EXTTEXTOUTA 83
+#define EMR_EXTTEXTOUTW 84
+#define EMR_POLYBEZIER16 85
+#define EMR_POLYGON16 86
+#define EMR_POLYLINE16 87
+#define EMR_POLYBEZIERTO16 88
+#define EMR_POLYLINETO16 89
+#define EMR_POLYPOLYLINE16 90
+#define EMR_POLYPOLYGON16 91
+#define EMR_POLYDRAW16 92
+#define EMR_CREATEMONOBRUSH 93
+#define EMR_CREATEDIBPATTERNBRUSHPT 94
+#define EMR_EXTCREATEPEN 95
+#define EMR_POLYTEXTOUTA 96
+#define EMR_POLYTEXTOUTW 97
+#define EMR_SETICMMODE 98
+#define EMR_CREATECOLORSPACE 99
+#define EMR_SETCOLORSPACE 100
+#define EMR_DELETECOLORSPACE 101
+#define EMR_GLSRECORD 102
+#define EMR_GLSBOUNDEDRECORD 103
+#define EMR_PIXELFORMAT 104
+#define EMR_DRAWESCAPE 105
+#define EMR_EXTESCAPE 106
+#define EMR_STARTDOC 107
+#define EMR_SMALLTEXTOUT 108
+#define EMR_FORCEUFIMAPPING 109
+#define EMR_NAMEDESCAPE 110
+#define EMR_COLORCORRECTPALETTE 111
+#define EMR_SETICMPROFILEA 112
+#define EMR_SETICMPROFILEW 113
+#define EMR_ALPHABLEND 114
+#define EMR_SETLAYOUT 115
+#define EMR_TRANSPARENTBLT 116
+#define EMR_RESERVED_117 117
+#define EMR_GRADIENTFILL 118
+#define EMR_SETLINKEDUFI 119
+#define EMR_SETTEXTJUSTIFICATION 120
+#define EMR_COLORMATCHTOTARGETW 121
+#define EMR_CREATECOLORSPACEW 122
+
+#define EMR_MIN 1
+#define EMR_MAX 122
+
+#define ENHMETA_SIGNATURE 1179469088
+#define ENHMETA_STOCK_OBJECT 0x80000000
+
+#define GDICOMMENT_IDENTIFIER 0x43494447
+#define GDICOMMENT_WINDOWS_METAFILE 0x80000001
+#define GDICOMMENT_BEGINGROUP 0x00000002
+#define GDICOMMENT_ENDGROUP 0x00000003
+#define GDICOMMENT_MULTIFORMATS 0x40000004
+#define GDICOMMENT_UNICODE_STRING 0x00000040
+#define GDICOMMENT_UNICODE_END 0x00000080
+#define EPS_SIGNATURE 0x46535045
+
+#define CCHDEVICENAME 32
+#define CCHFORMNAME 32
+
+typedef struct
+{
+ BYTE dmDeviceName[CCHDEVICENAME];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ union {
+ struct {
+ short dmOrientation;
+ short dmPaperSize;
+ short dmPaperLength;
+ short dmPaperWidth;
+ short dmScale;
+ short dmCopies;
+ short dmDefaultSource;
+ short dmPrintQuality;
+ } DUMMYSTRUCTNAME1;
+ struct {
+ POINTL dmPosition;
+ DWORD dmDisplayOrientation;
+ DWORD dmDisplayFixedOutput;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME1;
+ short dmColor;
+ short dmDuplex;
+ short dmYResolution;
+ short dmTTOption;
+ short dmCollate;
+ BYTE dmFormName[CCHFORMNAME];
+ WORD dmLogPixels;
+ DWORD dmBitsPerPel;
+ DWORD dmPelsWidth;
+ DWORD dmPelsHeight;
+ union {
+ DWORD dmDisplayFlags;
+ DWORD dmNup;
+ } DUMMYUNIONNAME2;
+ DWORD dmDisplayFrequency;
+ DWORD dmICMMethod;
+ DWORD dmICMIntent;
+ DWORD dmMediaType;
+ DWORD dmDitherType;
+ DWORD dmReserved1;
+ DWORD dmReserved2;
+ DWORD dmPanningWidth;
+ DWORD dmPanningHeight;
+} DEVMODEA, *PDEVMODEA, *LPDEVMODEA;
+
+typedef struct
+{
+ WCHAR dmDeviceName[CCHDEVICENAME];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ union {
+ struct {
+ short dmOrientation;
+ short dmPaperSize;
+ short dmPaperLength;
+ short dmPaperWidth;
+ short dmScale;
+ short dmCopies;
+ short dmDefaultSource;
+ short dmPrintQuality;
+ } DUMMYSTRUCTNAME1;
+ struct {
+ POINTL dmPosition;
+ DWORD dmDisplayOrientation;
+ DWORD dmDisplayFixedOutput;
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME1;
+ short dmColor;
+ short dmDuplex;
+ short dmYResolution;
+ short dmTTOption;
+ short dmCollate;
+ WCHAR dmFormName[CCHFORMNAME];
+ WORD dmLogPixels;
+ DWORD dmBitsPerPel;
+ DWORD dmPelsWidth;
+ DWORD dmPelsHeight;
+ union {
+ DWORD dmDisplayFlags;
+ DWORD dmNup;
+ } DUMMYUNIONNAME2;
+ DWORD dmDisplayFrequency;
+ DWORD dmICMMethod;
+ DWORD dmICMIntent;
+ DWORD dmMediaType;
+ DWORD dmDitherType;
+ DWORD dmReserved1;
+ DWORD dmReserved2;
+ DWORD dmPanningWidth;
+ DWORD dmPanningHeight;
+} DEVMODEW, *PDEVMODEW, *LPDEVMODEW;
+
+DECL_WINELIB_TYPE_AW(DEVMODE)
+DECL_WINELIB_TYPE_AW(PDEVMODE)
+DECL_WINELIB_TYPE_AW(LPDEVMODE)
+
+#define DM_SPECVERSION 0x401
+#define DM_UPDATE 1
+#define DM_COPY 2
+#define DM_PROMPT 4
+#define DM_MODIFY 8
+
+#define DM_IN_BUFFER DM_MODIFY
+#define DM_IN_PROMPT DM_PROMPT
+#define DM_OUT_BUFFER DM_COPY
+#define DM_OUT_DEFAULT DM_UPDATE
+
+#define DM_ORIENTATION __MSABI_LONG(0x00000001)
+#define DM_PAPERSIZE __MSABI_LONG(0x00000002)
+#define DM_PAPERLENGTH __MSABI_LONG(0x00000004)
+#define DM_PAPERWIDTH __MSABI_LONG(0x00000008)
+#define DM_SCALE __MSABI_LONG(0x00000010)
+#define DM_POSITION __MSABI_LONG(0x00000020)
+#define DM_NUP __MSABI_LONG(0x00000040)
+#define DM_DISPLAYORIENTATION __MSABI_LONG(0x00000080)
+#define DM_COPIES __MSABI_LONG(0x00000100)
+#define DM_DEFAULTSOURCE __MSABI_LONG(0x00000200)
+#define DM_PRINTQUALITY __MSABI_LONG(0x00000400)
+#define DM_COLOR __MSABI_LONG(0x00000800)
+#define DM_DUPLEX __MSABI_LONG(0x00001000)
+#define DM_YRESOLUTION __MSABI_LONG(0x00002000)
+#define DM_TTOPTION __MSABI_LONG(0x00004000)
+#define DM_COLLATE __MSABI_LONG(0x00008000)
+#define DM_FORMNAME __MSABI_LONG(0x00010000)
+#define DM_LOGPIXELS __MSABI_LONG(0x00020000)
+#define DM_BITSPERPEL __MSABI_LONG(0x00040000)
+#define DM_PELSWIDTH __MSABI_LONG(0x00080000)
+#define DM_PELSHEIGHT __MSABI_LONG(0x00100000)
+#define DM_DISPLAYFLAGS __MSABI_LONG(0x00200000)
+#define DM_DISPLAYFREQUENCY __MSABI_LONG(0x00400000)
+#define DM_ICMMETHOD __MSABI_LONG(0x00800000)
+#define DM_ICMINTENT __MSABI_LONG(0x01000000)
+#define DM_MEDIATYPE __MSABI_LONG(0x02000000)
+#define DM_DITHERTYPE __MSABI_LONG(0x04000000)
+#define DM_PANNINGWIDTH __MSABI_LONG(0x08000000)
+#define DM_PANNINGHEIGHT __MSABI_LONG(0x10000000)
+#define DM_DISPLAYFIXEDOUTPUT __MSABI_LONG(0x20000000)
+
+#define DM_GRAYSCALE 1
+#define DM_INTERLACED 2
+#define DMDISPLAYFLAGS_TEXTMODE 4
+
+#define DMORIENT_PORTRAIT 1
+#define DMORIENT_LANDSCAPE 2
+
+#define DMPAPER_FIRST DMPAPER_LETTER
+#define DMPAPER_LETTER 1
+#define DMPAPER_LETTERSMALL 2
+#define DMPAPER_TABLOID 3
+#define DMPAPER_LEDGER 4
+#define DMPAPER_LEGAL 5
+#define DMPAPER_STATEMENT 6
+#define DMPAPER_EXECUTIVE 7
+#define DMPAPER_A3 8
+#define DMPAPER_A4 9
+#define DMPAPER_A4SMALL 10
+#define DMPAPER_A5 11
+#define DMPAPER_B4 12
+#define DMPAPER_B5 13
+#define DMPAPER_FOLIO 14
+#define DMPAPER_QUARTO 15
+#define DMPAPER_10X14 16
+#define DMPAPER_11X17 17
+#define DMPAPER_NOTE 18
+#define DMPAPER_ENV_9 19
+#define DMPAPER_ENV_10 20
+#define DMPAPER_ENV_11 21
+#define DMPAPER_ENV_12 22
+#define DMPAPER_ENV_14 23
+#define DMPAPER_CSHEET 24
+#define DMPAPER_DSHEET 25
+#define DMPAPER_ESHEET 26
+#define DMPAPER_ENV_DL 27
+#define DMPAPER_ENV_C5 28
+#define DMPAPER_ENV_C3 29
+#define DMPAPER_ENV_C4 30
+#define DMPAPER_ENV_C6 31
+#define DMPAPER_ENV_C65 32
+#define DMPAPER_ENV_B4 33
+#define DMPAPER_ENV_B5 34
+#define DMPAPER_ENV_B6 35
+#define DMPAPER_ENV_ITALY 36
+#define DMPAPER_ENV_MONARCH 37
+#define DMPAPER_ENV_PERSONAL 38
+#define DMPAPER_FANFOLD_US 39
+#define DMPAPER_FANFOLD_STD_GERMAN 40
+#define DMPAPER_FANFOLD_LGL_GERMAN 41
+#define DMPAPER_ISO_B4 42
+#define DMPAPER_JAPANESE_POSTCARD 43
+#define DMPAPER_9X11 44
+#define DMPAPER_10X11 45
+#define DMPAPER_15X11 46
+#define DMPAPER_ENV_INVITE 47
+#define DMPAPER_RESERVED_48 48
+#define DMPAPER_RESERVED_49 49
+#define DMPAPER_LETTER_EXTRA 50
+#define DMPAPER_LEGAL_EXTRA 51
+#define DMPAPER_TABLOID_EXTRA 52
+#define DMPAPER_A4_EXTRA 53
+#define DMPAPER_LETTER_TRANSVERSE 54
+#define DMPAPER_A4_TRANSVERSE 55
+#define DMPAPER_LETTER_EXTRA_TRANSVERSE 56
+#define DMPAPER_A_PLUS 57
+#define DMPAPER_B_PLUS 58
+#define DMPAPER_LETTER_PLUS 59
+#define DMPAPER_A4_PLUS 60
+#define DMPAPER_A5_TRANSVERSE 61
+#define DMPAPER_B5_TRANSVERSE 62
+#define DMPAPER_A3_EXTRA 63
+#define DMPAPER_A5_EXTRA 64
+#define DMPAPER_B5_EXTRA 65
+#define DMPAPER_A2 66
+#define DMPAPER_A3_TRANSVERSE 67
+#define DMPAPER_A3_EXTRA_TRANSVERSE 68
+#define DMPAPER_DBL_JAPANESE_POSTCARD 69
+#define DMPAPER_A6 70
+#define DMPAPER_JENV_KAKU2 71
+#define DMPAPER_JENV_KAKU3 72
+#define DMPAPER_JENV_CHOU3 73
+#define DMPAPER_JENV_CHOU4 74
+#define DMPAPER_LETTER_ROTATED 75
+#define DMPAPER_A3_ROTATED 76
+#define DMPAPER_A4_ROTATED 77
+#define DMPAPER_A5_ROTATED 78
+#define DMPAPER_B4_JIS_ROTATED 79
+#define DMPAPER_B5_JIS_ROTATED 80
+#define DMPAPER_JAPANESE_POSTCARD_ROTATED 81
+#define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82
+#define DMPAPER_A6_ROTATED 83
+#define DMPAPER_JENV_KAKU2_ROTATED 84
+#define DMPAPER_JENV_KAKU3_ROTATED 85
+#define DMPAPER_JENV_CHOU3_ROTATED 86
+#define DMPAPER_JENV_CHOU4_ROTATED 87
+#define DMPAPER_B6_JIS 88
+#define DMPAPER_B6_JIS_ROTATED 89
+#define DMPAPER_12X11 90
+#define DMPAPER_JENV_YOU4 91
+#define DMPAPER_JENV_YOU4_ROTATED 92
+#define DMPAPER_P16K 93
+#define DMPAPER_P32K 94
+#define DMPAPER_P32KBIG 95
+#define DMPAPER_PENV_1 96
+#define DMPAPER_PENV_2 97
+#define DMPAPER_PENV_3 98
+#define DMPAPER_PENV_4 99
+#define DMPAPER_PENV_5 100
+#define DMPAPER_PENV_6 101
+#define DMPAPER_PENV_7 102
+#define DMPAPER_PENV_8 103
+#define DMPAPER_PENV_9 104
+#define DMPAPER_PENV_10 105
+#define DMPAPER_P16K_ROTATED 106
+#define DMPAPER_P32K_ROTATED 107
+#define DMPAPER_P32KBIG_ROTATED 108
+#define DMPAPER_PENV_1_ROTATED 109
+#define DMPAPER_PENV_2_ROTATED 110
+#define DMPAPER_PENV_3_ROTATED 111
+#define DMPAPER_PENV_4_ROTATED 112
+#define DMPAPER_PENV_5_ROTATED 113
+#define DMPAPER_PENV_6_ROTATED 114
+#define DMPAPER_PENV_7_ROTATED 115
+#define DMPAPER_PENV_8_ROTATED 116
+#define DMPAPER_PENV_9_ROTATED 117
+#define DMPAPER_PENV_10_ROTATED 118
+
+#define DMPAPER_LAST DMPAPER_PENV_10_ROTATED
+#define DMPAPER_USER 256
+
+#define DMBIN_FIRST DMBIN_UPPER
+#define DMBIN_UPPER 1
+#define DMBIN_ONLYONE 1
+#define DMBIN_LOWER 2
+#define DMBIN_MIDDLE 3
+#define DMBIN_MANUAL 4
+#define DMBIN_ENVELOPE 5
+#define DMBIN_ENVMANUAL 6
+#define DMBIN_AUTO 7
+#define DMBIN_TRACTOR 8
+#define DMBIN_SMALLFMT 9
+#define DMBIN_LARGEFMT 10
+#define DMBIN_LARGECAPACITY 11
+#define DMBIN_CASSETTE 14
+#define DMBIN_FORMSOURCE 15
+#define DMBIN_LAST DMBIN_FORMSOURCE
+#define DMBIN_USER 256
+
+#define DMRES_DRAFT (-1)
+#define DMRES_LOW (-2)
+#define DMRES_MEDIUM (-3)
+#define DMRES_HIGH (-4)
+
+#define DMCOLOR_MONOCHROME 1
+#define DMCOLOR_COLOR 2
+
+#define DMDUP_SIMPLEX 1
+#define DMDUP_VERTICAL 2
+#define DMDUP_HORIZONTAL 3
+
+#define DMTT_BITMAP 1
+#define DMTT_DOWNLOAD 2
+#define DMTT_SUBDEV 3
+#define DMTT_DOWNLOAD_OUTLINE 4
+
+#define DMCOLLATE_FALSE 0
+#define DMCOLLATE_TRUE 1
+
+#define DMICMMETHOD_NONE 1
+#define DMICMMETHOD_SYSTEM 2
+#define DMICMMETHOD_DRIVER 3
+#define DMICMMETHOD_DEVICE 4
+#define DMICMMETHOD_USER 256
+
+#define DMICM_SATURATE 1
+#define DMICM_CONTRAST 2
+#define DMICM_COLORMETRIC 3
+#define DMICM_USER 256
+
+#define DMMEDIA_STANDARD 1
+#define DMMEDIA_TRANSPARENCY 2
+#define DMMEDIA_GLOSSY 3
+#define DMMEDIA_USER 256
+
+#define DMDITHER_NONE 1
+#define DMDITHER_COARSE 2
+#define DMDITHER_FINE 3
+#define DMDITHER_LINEART 4
+#define DMDITHER_GRAYSCALE 5
+#define DMDITHER_USER 256
+
+#define DMDO_DEFAULT 0
+#define DMDO_90 1
+#define DMDO_180 2
+#define DMDO_270 3
+
+#define DMDFO_DEFAULT 0
+#define DMDFO_STRETCH 1
+#define DMDFO_CENTER 2
+
+typedef struct
+{
+ INT cbSize;
+ LPCSTR lpszDocName;
+ LPCSTR lpszOutput;
+ LPCSTR lpszDatatype;
+ DWORD fwType;
+} DOCINFOA, *LPDOCINFOA;
+
+typedef struct
+{
+ INT cbSize;
+ LPCWSTR lpszDocName;
+ LPCWSTR lpszOutput;
+ LPCWSTR lpszDatatype;
+ DWORD fwType;
+} DOCINFOW, *LPDOCINFOW;
+
+DECL_WINELIB_TYPE_AW(DOCINFO)
+DECL_WINELIB_TYPE_AW(LPDOCINFO)
+
+#define DI_APPBANDING 0x0001
+
+/* Flags for PolyDraw and GetPath */
+#define PT_CLOSEFIGURE 0x0001
+#define PT_LINETO 0x0002
+#define PT_BEZIERTO 0x0004
+#define PT_MOVETO 0x0006
+
+#define RDH_RECTANGLES 1
+
+typedef struct _RGNDATAHEADER {
+ DWORD dwSize;
+ DWORD iType;
+ DWORD nCount;
+ DWORD nRgnSize;
+ RECT rcBound;
+} RGNDATAHEADER,*PRGNDATAHEADER;
+
+typedef struct _RGNDATA {
+ RGNDATAHEADER rdh;
+ char Buffer[1];
+} RGNDATA,*PRGNDATA,*LPRGNDATA;
+
+typedef BOOL (CALLBACK *ABORTPROC)(HDC, INT);
+
+typedef struct {
+ DWORD cb;
+ CHAR DeviceName[32];
+ CHAR DeviceString[128];
+ DWORD StateFlags;
+ CHAR DeviceID[128];
+ CHAR DeviceKey[128];
+} DISPLAY_DEVICEA,*PDISPLAY_DEVICEA,*LPDISPLAY_DEVICEA;
+
+typedef struct {
+ DWORD cb;
+ WCHAR DeviceName[32];
+ WCHAR DeviceString[128];
+ DWORD StateFlags;
+ WCHAR DeviceID[128];
+ WCHAR DeviceKey[128];
+} DISPLAY_DEVICEW,*PDISPLAY_DEVICEW,*LPDISPLAY_DEVICEW;
+DECL_WINELIB_TYPE_AW(DISPLAY_DEVICE)
+DECL_WINELIB_TYPE_AW(PDISPLAY_DEVICE)
+DECL_WINELIB_TYPE_AW(LPDISPLAY_DEVICE)
+
+/* DISPLAY_DEVICE.StateFlags (?)*/
+#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
+#define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002
+#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
+#define DISPLAY_DEVICE_MIRRORING_DRIVER 0x00000008
+#define DISPLAY_DEVICE_VGA_COMPATIBLE 0x00000010
+
+#define GDI_ERROR (~0u)
+#define HGDI_ERROR ((HANDLE)~(ULONG_PTR)0)
+
+/* AddFontResourceEx flags */
+#define FR_PRIVATE 0x10
+#define FR_NOT_ENUM 0x20
+
+/* Mirroring flags */
+#define LAYOUT_LTR 0x00000000
+#define LAYOUT_RTL 0x00000001
+#define LAYOUT_BITMAPORIENTATIONPRESERVED 0x00000008
+#define NOMIRRORBITMAP 0x80000000
+
+/* For DRAWPATTERNRECT Escape */
+typedef struct _DRAWPATRECT
+{
+ POINT ptPosition;
+ POINT ptSize;
+ WORD wStyle;
+ WORD wPattern;
+} DRAWPATRECT, *PDRAWPATRECT;
+
+typedef struct tagWCRANGE {
+ WCHAR wcLow;
+ USHORT cGlyphs;
+} WCRANGE, *PWCRANGE, *LPWCRANGE;
+
+typedef struct tagGLYPHSET {
+ DWORD cbThis;
+ DWORD flAccel;
+ DWORD cGlyphsSupported;
+ DWORD cRanges;
+ WCRANGE ranges[1];
+} GLYPHSET, *PGLYPHSET, *LPGLYPHSET;
+
+#define GS_8BIT_INDICES 0x00000001
+
+WINGDIAPI INT WINAPI AbortDoc(HDC);
+WINGDIAPI BOOL WINAPI AbortPath(HDC);
+WINGDIAPI INT WINAPI AddFontResourceA(LPCSTR);
+WINGDIAPI INT WINAPI AddFontResourceW(LPCWSTR);
+#define AddFontResource WINELIB_NAME_AW(AddFontResource)
+WINGDIAPI INT WINAPI AddFontResourceExA(LPCSTR, DWORD, PVOID);
+WINGDIAPI INT WINAPI AddFontResourceExW(LPCWSTR, DWORD, PVOID);
+#define AddFontResourceEx WINELIB_NAME_AW(AddFontResourceEx)
+WINGDIAPI HANDLE WINAPI AddFontMemResourceEx(PVOID, DWORD, PVOID, DWORD *);
+WINGDIAPI BOOL WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+WINGDIAPI BOOL WINAPI AngleArc(HDC, INT, INT, DWORD, FLOAT, FLOAT);
+WINGDIAPI BOOL WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*);
+WINGDIAPI BOOL WINAPI Arc(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
+WINGDIAPI BOOL WINAPI ArcTo(HDC, INT, INT, INT, INT, INT, INT, INT, INT);
+WINGDIAPI BOOL WINAPI BeginPath(HDC);
+WINGDIAPI BOOL WINAPI BitBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,DWORD);
+WINGDIAPI INT WINAPI ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR*);
+WINGDIAPI BOOL WINAPI Chord(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
+WINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
+WINGDIAPI BOOL WINAPI CloseFigure(HDC);
+WINGDIAPI HMETAFILE WINAPI CloseMetaFile(HDC);
+WINGDIAPI INT WINAPI CombineRgn(HRGN,HRGN,HRGN,INT);
+WINGDIAPI BOOL WINAPI CombineTransform(LPXFORM,const XFORM *,const XFORM *);
+WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR);
+WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR);
+#define CopyEnhMetaFile WINELIB_NAME_AW(CopyEnhMetaFile)
+WINGDIAPI HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR);
+WINGDIAPI HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR);
+#define CopyMetaFile WINELIB_NAME_AW(CopyMetaFile)
+WINGDIAPI HBITMAP WINAPI CreateBitmap(INT,INT,UINT,UINT,LPCVOID);
+WINGDIAPI HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*);
+WINGDIAPI HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*);
+WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
+WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);
+#define CreateColorSpace WINELIB_NAME_AW(CreateColorSpace)
+WINGDIAPI HBITMAP WINAPI CreateCompatibleBitmap(HDC,INT,INT);
+WINGDIAPI HDC WINAPI CreateCompatibleDC(HDC);
+WINGDIAPI HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+WINGDIAPI HDC WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+#define CreateDC WINELIB_NAME_AW(CreateDC)
+WINGDIAPI HBITMAP WINAPI CreateDIBitmap(HDC,const BITMAPINFOHEADER*,DWORD,LPCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI HBRUSH WINAPI CreateDIBPatternBrush(HGLOBAL,UINT);
+WINGDIAPI HBRUSH WINAPI CreateDIBPatternBrushPt(const void*,UINT);
+WINGDIAPI HBITMAP WINAPI CreateDIBSection(HDC, const BITMAPINFO *, UINT, void **, HANDLE, DWORD offset);
+WINGDIAPI HBITMAP WINAPI CreateDiscardableBitmap(HDC,INT,INT);
+WINGDIAPI HRGN WINAPI CreateEllipticRgn(INT,INT,INT,INT);
+WINGDIAPI HRGN WINAPI CreateEllipticRgnIndirect(const RECT *);
+WINGDIAPI HDC WINAPI CreateEnhMetaFileA(HDC,LPCSTR,const RECT*,LPCSTR);
+WINGDIAPI HDC WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,const RECT*,LPCWSTR);
+#define CreateEnhMetaFile WINELIB_NAME_AW(CreateEnhMetaFile)
+WINGDIAPI HFONT WINAPI CreateFontA(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR);
+WINGDIAPI HFONT WINAPI CreateFontW(INT,INT,INT,INT,INT,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR);
+#define CreateFont WINELIB_NAME_AW(CreateFont)
+WINGDIAPI HFONT WINAPI CreateFontIndirectA(const LOGFONTA*);
+WINGDIAPI HFONT WINAPI CreateFontIndirectW(const LOGFONTW*);
+#define CreateFontIndirect WINELIB_NAME_AW(CreateFontIndirect)
+WINGDIAPI HFONT WINAPI CreateFontIndirectExA(const ENUMLOGFONTEXDVA*);
+WINGDIAPI HFONT WINAPI CreateFontIndirectExW(const ENUMLOGFONTEXDVW*);
+#define CreateFontIndirectEx WINELIB_NAME_AW(CreateFontIndirectEx)
+WINGDIAPI HPALETTE WINAPI CreateHalftonePalette(HDC);
+WINGDIAPI HBRUSH WINAPI CreateHatchBrush(INT,COLORREF);
+WINGDIAPI HDC WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*);
+WINGDIAPI HDC WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*);
+#define CreateIC WINELIB_NAME_AW(CreateIC)
+WINGDIAPI HDC WINAPI CreateMetaFileA(LPCSTR);
+WINGDIAPI HDC WINAPI CreateMetaFileW(LPCWSTR);
+#define CreateMetaFile WINELIB_NAME_AW(CreateMetaFile)
+WINGDIAPI HPALETTE WINAPI CreatePalette(const LOGPALETTE*);
+WINGDIAPI HBRUSH WINAPI CreatePatternBrush(HBITMAP);
+WINGDIAPI HPEN WINAPI CreatePen(INT,INT,COLORREF);
+WINGDIAPI HPEN WINAPI CreatePenIndirect(const LOGPEN*);
+WINGDIAPI HRGN WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT);
+WINGDIAPI HRGN WINAPI CreatePolygonRgn(const POINT*,INT,INT);
+WINGDIAPI HRGN WINAPI CreateRectRgn(INT,INT,INT,INT);
+WINGDIAPI HRGN WINAPI CreateRectRgnIndirect(const RECT*);
+WINGDIAPI HRGN WINAPI CreateRoundRectRgn(INT,INT,INT,INT,INT,INT);
+WINGDIAPI BOOL WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR);
+WINGDIAPI BOOL WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+#define CreateScalableFontResource WINELIB_NAME_AW(CreateScalableFontResource)
+WINGDIAPI HBRUSH WINAPI CreateSolidBrush(COLORREF);
+WINGDIAPI BOOL WINAPI DPtoLP(HDC,LPPOINT,INT);
+WINGDIAPI BOOL WINAPI DeleteColorSpace(HCOLORSPACE);
+WINGDIAPI BOOL WINAPI DeleteDC(HDC);
+WINGDIAPI BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE);
+WINGDIAPI BOOL WINAPI DeleteMetaFile(HMETAFILE);
+WINGDIAPI BOOL WINAPI DeleteObject(HGDIOBJ);
+WINGDIAPI INT WINAPI DescribePixelFormat(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR);
+WINGDIAPI INT WINAPI DrawEscape(HDC,INT,INT,LPCSTR);
+WINGDIAPI BOOL WINAPI Ellipse(HDC,INT,INT,INT,INT);
+WINGDIAPI INT WINAPI EndDoc(HDC);
+WINGDIAPI BOOL WINAPI EndPath(HDC);
+WINGDIAPI BOOL WINAPI EnumEnhMetaFile(HDC,HENHMETAFILE,ENHMFENUMPROC,LPVOID,const RECT*);
+WINGDIAPI INT WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+WINGDIAPI INT WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
+#define EnumFontFamilies WINELIB_NAME_AW(EnumFontFamilies)
+WINGDIAPI INT WINAPI EnumFontFamiliesExA(HDC,LPLOGFONTA,FONTENUMPROCA,LPARAM,DWORD);
+WINGDIAPI INT WINAPI EnumFontFamiliesExW(HDC,LPLOGFONTW,FONTENUMPROCW,LPARAM,DWORD);
+#define EnumFontFamiliesEx WINELIB_NAME_AW(EnumFontFamiliesEx)
+WINGDIAPI INT WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM);
+WINGDIAPI INT WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM);
+#define EnumFonts WINELIB_NAME_AW(EnumFonts)
+WINGDIAPI INT WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM);
+WINGDIAPI INT WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM);
+#define EnumICMProfiles WINELIB_NAME_AW(EnumICMProfiles)
+WINGDIAPI BOOL WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);
+WINGDIAPI INT WINAPI EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM);
+WINGDIAPI BOOL WINAPI EqualRgn(HRGN,HRGN);
+WINGDIAPI INT WINAPI Escape(HDC,INT,INT,LPCSTR,LPVOID);
+WINGDIAPI INT WINAPI ExcludeClipRect(HDC,INT,INT,INT,INT);
+WINGDIAPI HPEN WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*);
+WINGDIAPI HRGN WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*);
+WINGDIAPI INT WINAPI ExtEscape(HDC,INT,INT,LPCSTR,INT,LPSTR);
+WINGDIAPI BOOL WINAPI ExtFloodFill(HDC,INT,INT,COLORREF,UINT);
+WINGDIAPI INT WINAPI ExtSelectClipRgn(HDC,HRGN,INT);
+WINGDIAPI BOOL WINAPI ExtTextOutA(HDC,INT,INT,UINT,const RECT*,LPCSTR,UINT,const INT*);
+WINGDIAPI BOOL WINAPI ExtTextOutW(HDC,INT,INT,UINT,const RECT*,LPCWSTR,UINT,const INT*);
+#define ExtTextOut WINELIB_NAME_AW(ExtTextOut)
+WINGDIAPI BOOL WINAPI FillPath(HDC);
+WINGDIAPI BOOL WINAPI FillRgn(HDC,HRGN,HBRUSH);
+WINGDIAPI BOOL WINAPI FixBrushOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL WINAPI FlattenPath(HDC);
+WINGDIAPI BOOL WINAPI FloodFill(HDC,INT,INT,COLORREF);
+WINGDIAPI BOOL WINAPI FrameRgn(HDC,HRGN,HBRUSH,INT,INT);
+WINGDIAPI BOOL WINAPI GdiAlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
+WINGDIAPI BOOL WINAPI GdiComment(HDC,UINT,const BYTE *);
+WINGDIAPI DEVMODEW * WINAPI GdiConvertToDevmodeW(const DEVMODEA *);
+WINGDIAPI BOOL WINAPI GdiFlush(void);
+WINGDIAPI LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *);
+WINGDIAPI DWORD WINAPI GdiGetCodePage(HDC);
+WINGDIAPI BOOL WINAPI GdiGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
+WINGDIAPI BOOL WINAPI GdiIsMetaFileDC(HDC);
+WINGDIAPI BOOL WINAPI GdiIsMetaPrintDC(HDC);
+WINGDIAPI BOOL WINAPI GdiIsPlayMetafileDC(HDC);
+WINGDIAPI BOOL WINAPI GdiTransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
+WINGDIAPI INT WINAPI GetArcDirection(HDC);
+WINGDIAPI BOOL WINAPI GetAspectRatioFilterEx(HDC,LPSIZE);
+WINGDIAPI LONG WINAPI GetBitmapBits(HBITMAP,LONG,LPVOID);
+WINGDIAPI BOOL WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE);
+WINGDIAPI BOOL WINAPI GetBrushOrgEx(HDC,LPPOINT);
+WINGDIAPI COLORREF WINAPI GetBkColor(HDC);
+WINGDIAPI INT WINAPI GetBkMode(HDC);
+WINGDIAPI UINT WINAPI GetBoundsRect(HDC,LPRECT,UINT);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC);
+#define GetCharABCWidths WINELIB_NAME_AW(GetCharABCWidths)
+WINGDIAPI BOOL WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT);
+WINGDIAPI BOOL WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT);
+#define GetCharABCWidthsFloat WINELIB_NAME_AW(GetCharABCWidthsFloat)
+WINGDIAPI BOOL WINAPI GetCharABCWidthsI(HDC,UINT,UINT,LPWORD,LPABC);
+WINGDIAPI DWORD WINAPI GetCharacterPlacementA(HDC,LPCSTR,INT,INT,GCP_RESULTSA*,DWORD);
+WINGDIAPI DWORD WINAPI GetCharacterPlacementW(HDC,LPCWSTR,INT,INT,GCP_RESULTSW*,DWORD);
+#define GetCharacterPlacement WINELIB_NAME_AW(GetCharacterPlacement)
+WINGDIAPI BOOL WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT);
+#define GetCharWidth32 WINELIB_NAME_AW(GetCharWidth32)
+WINGDIAPI BOOL WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT);
+WINGDIAPI BOOL WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT);
+#define GetCharWidth WINELIB_NAME_AW(GetCharWidth)
+WINGDIAPI BOOL WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT);
+WINGDIAPI BOOL WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT);
+#define GetCharWidthFloat WINELIB_NAME_AW(GetCharWidthFloat)
+WINGDIAPI INT WINAPI GetClipBox(HDC,LPRECT);
+WINGDIAPI INT WINAPI GetClipRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);
+WINGDIAPI HCOLORSPACE WINAPI GetColorSpace(HDC);
+WINGDIAPI HGDIOBJ WINAPI GetCurrentObject(HDC,UINT);
+WINGDIAPI BOOL WINAPI GetCurrentPositionEx(HDC,LPPOINT);
+WINGDIAPI INT WINAPI GetDeviceCaps(HDC,INT);
+WINGDIAPI BOOL WINAPI GetDeviceGammaRamp(HDC,LPVOID);
+WINGDIAPI COLORREF WINAPI GetDCBrushColor(HDC);
+WINGDIAPI BOOL WINAPI GetDCOrgEx(HDC,LPPOINT);
+WINGDIAPI COLORREF WINAPI GetDCPenColor(HDC);
+WINGDIAPI UINT WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*);
+WINGDIAPI INT WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,LPVOID,LPBITMAPINFO,UINT);
+WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR);
+WINGDIAPI HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR);
+#define GetEnhMetaFile WINELIB_NAME_AW(GetEnhMetaFile)
+WINGDIAPI UINT WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE);
+WINGDIAPI UINT WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE,UINT,LPSTR);
+WINGDIAPI UINT WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE,UINT,LPWSTR);
+#define GetEnhMetaFileDescription WINELIB_NAME_AW(GetEnhMetaFileDescription)
+WINGDIAPI UINT WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER);
+WINGDIAPI UINT WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY);
+WINGDIAPI DWORD WINAPI GetFontData(HDC,DWORD,DWORD,LPVOID,DWORD);
+WINGDIAPI DWORD WINAPI GetFontLanguageInfo(HDC);
+WINGDIAPI DWORD WINAPI GetFontUnicodeRanges(HDC,LPGLYPHSET);
+WINGDIAPI DWORD WINAPI GetGlyphIndicesA(HDC,LPCSTR,INT,LPWORD,DWORD);
+WINGDIAPI DWORD WINAPI GetGlyphIndicesW(HDC,LPCWSTR,INT,LPWORD,DWORD);
+#define GetGlyphIndices WINELIB_NAME_AW(GetGlyphIndices)
+WINGDIAPI DWORD WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+WINGDIAPI DWORD WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,LPVOID,const MAT2*);
+#define GetGlyphOutline WINELIB_NAME_AW(GetGlyphOutline)
+WINGDIAPI INT WINAPI GetGraphicsMode(HDC);
+WINGDIAPI BOOL WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR);
+WINGDIAPI BOOL WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR);
+#define GetICMProfile WINELIB_NAME_AW(GetICMProfile)
+WINGDIAPI DWORD WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR);
+WINGDIAPI DWORD WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR);
+#define GetKerningPairs WINELIB_NAME_AW(GetKerningPairs)
+WINGDIAPI DWORD WINAPI GetLayout(HDC);
+WINGDIAPI BOOL WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD);
+WINGDIAPI BOOL WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD);
+#define GetLogColorSpace WINELIB_NAME_AW(GetLogColorSpace)
+WINGDIAPI INT WINAPI GetMapMode(HDC);
+WINGDIAPI HMETAFILE WINAPI GetMetaFileA(LPCSTR);
+WINGDIAPI HMETAFILE WINAPI GetMetaFileW(LPCWSTR);
+#define GetMetaFile WINELIB_NAME_AW(GetMetaFile)
+WINGDIAPI UINT WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,LPVOID);
+WINGDIAPI INT WINAPI GetMetaRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI GetMiterLimit(HDC, PFLOAT);
+WINGDIAPI DWORD WINAPI GetNearestColor(HDC,DWORD);
+WINGDIAPI UINT WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF);
+WINGDIAPI INT WINAPI GetObjectA(HGDIOBJ,INT,LPVOID);
+WINGDIAPI INT WINAPI GetObjectW(HGDIOBJ,INT,LPVOID);
+#define GetObject WINELIB_NAME_AW(GetObject)
+WINGDIAPI DWORD WINAPI GetObjectType(HGDIOBJ);
+WINGDIAPI UINT WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA);
+WINGDIAPI UINT WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW);
+#define GetOutlineTextMetrics WINELIB_NAME_AW(GetOutlineTextMetrics)
+WINGDIAPI UINT WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY);
+WINGDIAPI INT WINAPI GetPath(HDC,LPPOINT,LPBYTE,INT);
+WINGDIAPI COLORREF WINAPI GetPixel(HDC,INT,INT);
+WINGDIAPI INT WINAPI GetPixelFormat(HDC);
+WINGDIAPI INT WINAPI GetPolyFillMode(HDC);
+WINGDIAPI INT WINAPI GetRandomRgn(HDC,HRGN,INT);
+WINGDIAPI BOOL WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);
+WINGDIAPI DWORD WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA);
+WINGDIAPI INT WINAPI GetRelAbs(HDC,DWORD);
+WINGDIAPI INT WINAPI GetRgnBox(HRGN,LPRECT);
+WINGDIAPI INT WINAPI GetROP2(HDC);
+WINGDIAPI HGDIOBJ WINAPI GetStockObject(INT);
+WINGDIAPI INT WINAPI GetStretchBltMode(HDC);
+WINGDIAPI UINT WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY);
+WINGDIAPI UINT WINAPI GetSystemPaletteUse(HDC);
+WINGDIAPI UINT WINAPI GetTextAlign(HDC);
+WINGDIAPI INT WINAPI GetTextCharacterExtra(HDC);
+WINGDIAPI UINT WINAPI GetTextCharset(HDC);
+WINGDIAPI UINT WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD);
+WINGDIAPI COLORREF WINAPI GetTextColor(HDC);
+WINGDIAPI BOOL WINAPI GetTextExtentExPointA(HDC,LPCSTR,INT,INT,LPINT,LPINT,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentExPointW(HDC,LPCWSTR,INT,INT,LPINT,LPINT,LPSIZE);
+#define GetTextExtentExPoint WINELIB_NAME_AW(GetTextExtentExPoint)
+WINGDIAPI BOOL WINAPI GetTextExtentPointA(HDC,LPCSTR,INT,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentPointW(HDC,LPCWSTR,INT,LPSIZE);
+#define GetTextExtentPoint WINELIB_NAME_AW(GetTextExtentPoint)
+WINGDIAPI BOOL WINAPI GetTextExtentPoint32A(HDC,LPCSTR,INT,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentPoint32W(HDC,LPCWSTR,INT,LPSIZE);
+#define GetTextExtentPoint32 WINELIB_NAME_AW(GetTextExtentPoint32)
+WINGDIAPI BOOL WINAPI GetTextExtentExPointI(HDC,const WORD*,INT,INT,LPINT,LPINT,LPSIZE);
+WINGDIAPI BOOL WINAPI GetTextExtentPointI(HDC,const WORD*,INT,LPSIZE);
+WINGDIAPI INT WINAPI GetTextFaceA(HDC,INT,LPSTR);
+WINGDIAPI INT WINAPI GetTextFaceW(HDC,INT,LPWSTR);
+#define GetTextFace WINELIB_NAME_AW(GetTextFace)
+WINGDIAPI BOOL WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA);
+WINGDIAPI BOOL WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW);
+#define GetTextMetrics WINELIB_NAME_AW(GetTextMetrics)
+WINGDIAPI BOOL WINAPI GetTransform(HDC,DWORD,XFORM*);
+WINGDIAPI BOOL WINAPI GetViewportExtEx(HDC,LPSIZE);
+WINGDIAPI BOOL WINAPI GetViewportOrgEx(HDC,LPPOINT);
+WINGDIAPI BOOL WINAPI GetWindowExtEx(HDC,LPSIZE);
+WINGDIAPI BOOL WINAPI GetWindowOrgEx(HDC,LPPOINT);
+WINGDIAPI UINT WINAPI GetWinMetaFileBits(HENHMETAFILE,UINT,LPBYTE,INT,HDC);
+WINGDIAPI BOOL WINAPI GetWorldTransform(HDC,LPXFORM);
+WINGDIAPI BOOL WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
+WINGDIAPI INT WINAPI IntersectClipRect(HDC,INT,INT,INT,INT);
+WINGDIAPI BOOL WINAPI InvertRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI LineDDA(INT,INT,INT,INT,LINEDDAPROC,LPARAM);
+WINGDIAPI BOOL WINAPI LineTo(HDC,INT,INT);
+WINGDIAPI BOOL WINAPI LPtoDP(HDC,LPPOINT,INT);
+WINGDIAPI BOOL WINAPI MaskBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,HBITMAP,INT,INT,DWORD);
+WINGDIAPI BOOL WINAPI MirrorRgn(HWND,HRGN);
+WINGDIAPI BOOL WINAPI ModifyWorldTransform(HDC,const XFORM *, DWORD);
+WINGDIAPI BOOL WINAPI MoveToEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI INT WINAPI OffsetClipRgn(HDC,INT,INT);
+WINGDIAPI INT WINAPI OffsetRgn(HRGN,INT,INT);
+WINGDIAPI BOOL WINAPI OffsetViewportOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL WINAPI OffsetWindowOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL WINAPI PaintRgn(HDC,HRGN);
+WINGDIAPI BOOL WINAPI PatBlt(HDC,INT,INT,INT,INT,DWORD);
+WINGDIAPI HRGN WINAPI PathToRegion(HDC);
+WINGDIAPI BOOL WINAPI Pie(HDC,INT,INT,INT,INT,INT,INT,INT,INT);
+WINGDIAPI BOOL WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,const RECT*);
+WINGDIAPI BOOL WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT);
+WINGDIAPI BOOL WINAPI PlayMetaFile(HDC,HMETAFILE);
+WINGDIAPI BOOL WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT);
+WINGDIAPI BOOL WINAPI PlgBlt(HDC,const POINT*,HDC,INT,INT,INT,INT,HBITMAP,INT,INT);
+WINGDIAPI BOOL WINAPI PolyBezier(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL WINAPI PolyBezierTo(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL WINAPI PolyDraw(HDC,const POINT*,const BYTE*,DWORD);
+WINGDIAPI BOOL WINAPI PolyPolygon(HDC,const POINT*,const INT*,UINT);
+WINGDIAPI BOOL WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD);
+WINGDIAPI BOOL WINAPI Polygon(HDC,const POINT*,INT);
+WINGDIAPI BOOL WINAPI Polyline(HDC,const POINT*,INT);
+WINGDIAPI BOOL WINAPI PolylineTo(HDC,const POINT*,DWORD);
+WINGDIAPI BOOL WINAPI PtInRegion(HRGN,INT,INT);
+WINGDIAPI BOOL WINAPI PtVisible(HDC,INT,INT);
+WINGDIAPI UINT WINAPI RealizePalette(HDC);
+WINGDIAPI BOOL WINAPI Rectangle(HDC,INT,INT,INT,INT);
+WINGDIAPI BOOL WINAPI RectInRegion(HRGN,const RECT *);
+WINGDIAPI BOOL WINAPI RectVisible(HDC,const RECT*);
+WINGDIAPI BOOL WINAPI RemoveFontMemResourceEx(HANDLE);
+WINGDIAPI BOOL WINAPI RemoveFontResourceA(LPCSTR);
+WINGDIAPI BOOL WINAPI RemoveFontResourceW(LPCWSTR);
+#define RemoveFontResource WINELIB_NAME_AW(RemoveFontResource)
+WINGDIAPI BOOL WINAPI RemoveFontResourceExA(LPCSTR, DWORD, PVOID);
+WINGDIAPI BOOL WINAPI RemoveFontResourceExW(LPCWSTR, DWORD, PVOID);
+#define RemoveFontResourceEx WINELIB_NAME_AW(RemoveFontResourceEx)
+WINGDIAPI HDC WINAPI ResetDCA(HDC,const DEVMODEA *);
+WINGDIAPI HDC WINAPI ResetDCW(HDC,const DEVMODEW *);
+#define ResetDC WINELIB_NAME_AW(ResetDC)
+WINGDIAPI BOOL WINAPI ResizePalette(HPALETTE,UINT);
+WINGDIAPI BOOL WINAPI RestoreDC(HDC,INT);
+WINGDIAPI BOOL WINAPI RoundRect(HDC,INT,INT,INT,INT,INT,INT);
+WINGDIAPI INT WINAPI SaveDC(HDC);
+WINGDIAPI BOOL WINAPI ScaleViewportExtEx(HDC,INT,INT,INT,INT,LPSIZE);
+WINGDIAPI BOOL WINAPI ScaleWindowExtEx(HDC,INT,INT,INT,INT,LPSIZE);
+WINGDIAPI BOOL WINAPI SelectClipPath(HDC,INT);
+WINGDIAPI INT WINAPI SelectClipRgn(HDC,HRGN);
+WINGDIAPI HGDIOBJ WINAPI SelectObject(HDC,HGDIOBJ);
+WINGDIAPI HPALETTE WINAPI SelectPalette(HDC,HPALETTE,BOOL);
+WINGDIAPI INT WINAPI SetAbortProc(HDC,ABORTPROC);
+WINGDIAPI INT WINAPI SetArcDirection(HDC,INT);
+WINGDIAPI LONG WINAPI SetBitmapBits(HBITMAP,LONG,LPCVOID);
+WINGDIAPI BOOL WINAPI SetBitmapDimensionEx(HBITMAP,INT,INT,LPSIZE);
+WINGDIAPI COLORREF WINAPI SetBkColor(HDC,COLORREF);
+WINGDIAPI INT WINAPI SetBkMode(HDC,INT);
+WINGDIAPI UINT WINAPI SetBoundsRect(HDC,const RECT*,UINT);
+WINGDIAPI BOOL WINAPI SetBrushOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*);
+WINGDIAPI HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE);
+WINGDIAPI BOOL WINAPI SetDeviceGammaRamp(HDC,LPVOID);
+WINGDIAPI COLORREF WINAPI SetDCBrushColor(HDC,COLORREF);
+WINGDIAPI COLORREF WINAPI SetDCPenColor(HDC, COLORREF);
+WINGDIAPI UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*);
+WINGDIAPI INT WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI INT WINAPI SetDIBitsToDevice(HDC,INT,INT,DWORD,DWORD,INT,INT,UINT,UINT,LPCVOID,const BITMAPINFO*,UINT);
+WINGDIAPI HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE *);
+WINGDIAPI INT WINAPI SetGraphicsMode(HDC,INT);
+WINGDIAPI INT WINAPI SetICMMode(HDC,INT);
+WINGDIAPI BOOL WINAPI SetICMProfileA(HDC,LPSTR);
+WINGDIAPI BOOL WINAPI SetICMProfileW(HDC,LPWSTR);
+#define SetICMProfile WINELIB_NAME_AW(SetICMProfile)
+WINGDIAPI DWORD WINAPI SetLayout(HDC,DWORD);
+WINGDIAPI INT WINAPI SetMapMode(HDC,INT);
+WINGDIAPI DWORD WINAPI SetMapperFlags(HDC,DWORD);
+WINGDIAPI HMETAFILE WINAPI SetMetaFileBitsEx(UINT,const BYTE*);
+WINGDIAPI INT WINAPI SetMetaRgn(HDC);
+WINGDIAPI BOOL WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);
+WINGDIAPI UINT WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,const PALETTEENTRY*);
+WINGDIAPI COLORREF WINAPI SetPixel(HDC,INT,INT,COLORREF);
+WINGDIAPI BOOL WINAPI SetPixelV(HDC,INT,INT,COLORREF);
+WINGDIAPI BOOL WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*);
+WINGDIAPI INT WINAPI SetPolyFillMode(HDC,INT);
+WINGDIAPI BOOL WINAPI SetRectRgn(HRGN,INT,INT,INT,INT);
+WINGDIAPI INT WINAPI SetRelAbs(HDC,INT);
+WINGDIAPI INT WINAPI SetROP2(HDC,INT);
+WINGDIAPI INT WINAPI SetStretchBltMode(HDC,INT);
+WINGDIAPI UINT WINAPI SetSystemPaletteUse(HDC,UINT);
+WINGDIAPI UINT WINAPI SetTextAlign(HDC,UINT);
+WINGDIAPI INT WINAPI SetTextCharacterExtra(HDC,INT);
+WINGDIAPI COLORREF WINAPI SetTextColor(HDC,COLORREF);
+WINGDIAPI BOOL WINAPI SetTextJustification(HDC,INT,INT);
+WINGDIAPI BOOL WINAPI SetViewportExtEx(HDC,INT,INT,LPSIZE);
+WINGDIAPI BOOL WINAPI SetViewportOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI BOOL WINAPI SetWindowExtEx(HDC,INT,INT,LPSIZE);
+WINGDIAPI BOOL WINAPI SetWindowOrgEx(HDC,INT,INT,LPPOINT);
+WINGDIAPI HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,const BYTE*,HDC,const METAFILEPICT *);
+WINGDIAPI BOOL WINAPI SetWorldTransform(HDC,const XFORM*);
+WINGDIAPI INT WINAPI StartDocA(HDC,const DOCINFOA*);
+WINGDIAPI INT WINAPI StartDocW(HDC,const DOCINFOW*);
+#define StartDoc WINELIB_NAME_AW(StartDoc)
+WINGDIAPI INT WINAPI StartPage(HDC);
+WINGDIAPI INT WINAPI EndPage(HDC);
+WINGDIAPI BOOL WINAPI StretchBlt(HDC,INT,INT,INT,INT,HDC,INT,INT,INT,INT,DWORD);
+WINGDIAPI INT WINAPI StretchDIBits(HDC,INT,INT,INT,INT,INT,INT,INT,INT,const VOID*,const BITMAPINFO*,UINT,DWORD);
+WINGDIAPI BOOL WINAPI StrokeAndFillPath(HDC);
+WINGDIAPI BOOL WINAPI StrokePath(HDC);
+WINGDIAPI BOOL WINAPI SwapBuffers(HDC);
+WINGDIAPI BOOL WINAPI TextOutA(HDC,INT,INT,LPCSTR,INT);
+WINGDIAPI BOOL WINAPI TextOutW(HDC,INT,INT,LPCWSTR,INT);
+#define TextOut WINELIB_NAME_AW(TextOut)
+WINGDIAPI BOOL WINAPI TranslateCharsetInfo(LPDWORD,LPCHARSETINFO,DWORD);
+WINGDIAPI BOOL WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
+WINGDIAPI BOOL WINAPI UnrealizeObject(HGDIOBJ);
+WINGDIAPI BOOL WINAPI UpdateColors(HDC);
+WINGDIAPI BOOL WINAPI UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT);
+WINGDIAPI BOOL WINAPI UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT);
+#define UpdateICMRegKey WINELIB_NAME_AW(UpdateICMRegKey)
+WINGDIAPI BOOL WINAPI WidenPath(HDC);
+WINGDIAPI BOOL WINAPI PolyTextOutA(HDC,const POLYTEXTA*,INT);
+WINGDIAPI BOOL WINAPI PolyTextOutW(HDC,const POLYTEXTW*,INT);
+#define PolyTextOut WINELIB_NAME_AW(PolyTextOut)
+
+/* These defines are used by wglSwapLayerBuffers */
+#define WGL_SWAP_MAIN_PLANE (1 << 0)
+#define WGL_SWAP_OVERLAY1 (1 << 1)
+#define WGL_SWAP_OVERLAY2 (1 << 2)
+#define WGL_SWAP_OVERLAY3 (1 << 3)
+#define WGL_SWAP_OVERLAY4 (1 << 4)
+#define WGL_SWAP_OVERLAY5 (1 << 5)
+#define WGL_SWAP_OVERLAY6 (1 << 6)
+#define WGL_SWAP_OVERLAY7 (1 << 7)
+#define WGL_SWAP_OVERLAY8 (1 << 8)
+#define WGL_SWAP_OVERLAY9 (1 << 9)
+#define WGL_SWAP_OVERLAY10 (1 << 10)
+#define WGL_SWAP_OVERLAY11 (1 << 11)
+#define WGL_SWAP_OVERLAY12 (1 << 12)
+#define WGL_SWAP_OVERLAY13 (1 << 13)
+#define WGL_SWAP_OVERLAY14 (1 << 14)
+#define WGL_SWAP_OVERLAY15 (1 << 15)
+#define WGL_SWAP_UNDERLAY1 (1 << 16)
+#define WGL_SWAP_UNDERLAY2 (1 << 17)
+#define WGL_SWAP_UNDERLAY3 (1 << 18)
+#define WGL_SWAP_UNDERLAY4 (1 << 19)
+#define WGL_SWAP_UNDERLAY5 (1 << 20)
+#define WGL_SWAP_UNDERLAY6 (1 << 21)
+#define WGL_SWAP_UNDERLAY7 (1 << 22)
+#define WGL_SWAP_UNDERLAY8 (1 << 23)
+#define WGL_SWAP_UNDERLAY9 (1 << 24)
+#define WGL_SWAP_UNDERLAY10 (1 << 25)
+#define WGL_SWAP_UNDERLAY11 (1 << 26)
+#define WGL_SWAP_UNDERLAY12 (1 << 27)
+#define WGL_SWAP_UNDERLAY13 (1 << 28)
+#define WGL_SWAP_UNDERLAY14 (1 << 29)
+#define WGL_SWAP_UNDERLAY15 (1 << 30)
+
+#define WGL_FONT_LINES 0
+#define WGL_FONT_POLYGONS 1
+
+/* WGL prototypes */
+WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
+WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC,INT);
+WINGDIAPI BOOL WINAPI wglCopyContext(HGLRC,HGLRC,UINT);
+WINGDIAPI BOOL WINAPI wglDeleteContext(HGLRC);
+WINGDIAPI BOOL WINAPI wglDescribeLayerPlane(HDC,INT,INT,UINT,LPLAYERPLANEDESCRIPTOR);
+WINGDIAPI HGLRC WINAPI wglGetCurrentContext(void);
+WINGDIAPI HDC WINAPI wglGetCurrentDC(void);
+WINGDIAPI INT WINAPI wglGetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *);
+WINGDIAPI PROC WINAPI wglGetProcAddress(LPCSTR);
+WINGDIAPI BOOL WINAPI wglMakeCurrent(HDC,HGLRC);
+WINGDIAPI BOOL WINAPI wglRealizeLayerPalette(HDC,INT,BOOL);
+WINGDIAPI INT WINAPI wglSetLayerPaletteEntries(HDC,INT,INT,INT,const COLORREF *);
+WINGDIAPI BOOL WINAPI wglShareLists(HGLRC,HGLRC);
+WINGDIAPI BOOL WINAPI wglSwapLayerBuffers(HDC,UINT);
+WINGDIAPI BOOL WINAPI wglUseFontBitmapsA(HDC,DWORD,DWORD,DWORD);
+WINGDIAPI BOOL WINAPI wglUseFontBitmapsW(HDC,DWORD,DWORD,DWORD);
+#define wglUseFontBitmaps WINELIB_NAME_AW(wglUseFontBitmaps)
+WINGDIAPI BOOL WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);
+WINGDIAPI BOOL WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);
+#define wglUseFontOutlines WINELIB_NAME_AW(wglUseFontOutlines)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !NOGDI */
+#endif /* _WINGDI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h
new file mode 100644
index 00000000..b3fbef59
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winhttp.h
@@ -0,0 +1,593 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINHTTP_H
+#define __WINE_WINHTTP_H
+
+#ifdef _WIN64
+#include <pshpack8.h>
+#else
+#include <pshpack4.h>
+#endif
+
+#define WINHTTPAPI
+#define BOOLAPI WINHTTPAPI BOOL WINAPI
+
+
+typedef LPVOID HINTERNET;
+typedef HINTERNET *LPHINTERNET;
+
+#define INTERNET_DEFAULT_PORT 0
+#define INTERNET_DEFAULT_HTTP_PORT 80
+#define INTERNET_DEFAULT_HTTPS_PORT 443
+typedef WORD INTERNET_PORT;
+typedef INTERNET_PORT *LPINTERNET_PORT;
+
+#define INTERNET_SCHEME_HTTP 1
+#define INTERNET_SCHEME_HTTPS 2
+typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME;
+
+#define ICU_ESCAPE 0x80000000
+
+/* flags for WinHttpOpen */
+#define WINHTTP_FLAG_ASYNC 0x10000000
+
+/* flags for WinHttpOpenRequest */
+#define WINHTTP_FLAG_ESCAPE_PERCENT 0x00000004
+#define WINHTTP_FLAG_NULL_CODEPAGE 0x00000008
+#define WINHTTP_FLAG_ESCAPE_DISABLE 0x00000040
+#define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY 0x00000080
+#define WINHTTP_FLAG_BYPASS_PROXY_CACHE 0x00000100
+#define WINHTTP_FLAG_REFRESH WINHTTP_FLAG_BYPASS_PROXY_CACHE
+#define WINHTTP_FLAG_SECURE 0x00800000
+
+#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY 0
+#define WINHTTP_ACCESS_TYPE_NO_PROXY 1
+#define WINHTTP_ACCESS_TYPE_NAMED_PROXY 3
+
+#define WINHTTP_NO_PROXY_NAME NULL
+#define WINHTTP_NO_PROXY_BYPASS NULL
+
+#define WINHTTP_NO_REFERER NULL
+#define WINHTTP_DEFAULT_ACCEPT_TYPES NULL
+
+#define WINHTTP_NO_ADDITIONAL_HEADERS NULL
+#define WINHTTP_NO_REQUEST_DATA NULL
+
+#define WINHTTP_HEADER_NAME_BY_INDEX NULL
+#define WINHTTP_NO_OUTPUT_BUFFER NULL
+#define WINHTTP_NO_HEADER_INDEX NULL
+
+#define WINHTTP_ADDREQ_INDEX_MASK 0x0000FFFF
+#define WINHTTP_ADDREQ_FLAGS_MASK 0xFFFF0000
+#define WINHTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
+#define WINHTTP_ADDREQ_FLAG_ADD 0x20000000
+#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000
+#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000
+#define WINHTTP_ADDREQ_FLAG_COALESCE WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
+#define WINHTTP_ADDREQ_FLAG_REPLACE 0x80000000
+
+#define WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH 0
+
+/* flags for WinHttp{Set/Query}Options */
+#define WINHTTP_FIRST_OPTION WINHTTP_OPTION_CALLBACK
+#define WINHTTP_OPTION_CALLBACK 1
+#define WINHTTP_OPTION_RESOLVE_TIMEOUT 2
+#define WINHTTP_OPTION_CONNECT_TIMEOUT 3
+#define WINHTTP_OPTION_CONNECT_RETRIES 4
+#define WINHTTP_OPTION_SEND_TIMEOUT 5
+#define WINHTTP_OPTION_RECEIVE_TIMEOUT 6
+#define WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT 7
+#define WINHTTP_OPTION_HANDLE_TYPE 9
+#define WINHTTP_OPTION_READ_BUFFER_SIZE 12
+#define WINHTTP_OPTION_WRITE_BUFFER_SIZE 13
+#define WINHTTP_OPTION_PARENT_HANDLE 21
+#define WINHTTP_OPTION_EXTENDED_ERROR 24
+#define WINHTTP_OPTION_SECURITY_FLAGS 31
+#define WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT 32
+#define WINHTTP_OPTION_URL 34
+#define WINHTTP_OPTION_SECURITY_KEY_BITNESS 36
+#define WINHTTP_OPTION_PROXY 38
+#define WINHTTP_OPTION_USER_AGENT 41
+#define WINHTTP_OPTION_CONTEXT_VALUE 45
+#define WINHTTP_OPTION_CLIENT_CERT_CONTEXT 47
+#define WINHTTP_OPTION_REQUEST_PRIORITY 58
+#define WINHTTP_OPTION_HTTP_VERSION 59
+#define WINHTTP_OPTION_DISABLE_FEATURE 63
+#define WINHTTP_OPTION_CODEPAGE 68
+#define WINHTTP_OPTION_MAX_CONNS_PER_SERVER 73
+#define WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER 74
+#define WINHTTP_OPTION_AUTOLOGON_POLICY 77
+#define WINHTTP_OPTION_SERVER_CERT_CONTEXT 78
+#define WINHTTP_OPTION_ENABLE_FEATURE 79
+#define WINHTTP_OPTION_WORKER_THREAD_COUNT 80
+#define WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT 81
+#define WINHTTP_OPTION_PASSPORT_COBRANDING_URL 82
+#define WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH 83
+#define WINHTTP_OPTION_SECURE_PROTOCOLS 84
+#define WINHTTP_OPTION_ENABLETRACING 85
+#define WINHTTP_OPTION_PASSPORT_SIGN_OUT 86
+#define WINHTTP_OPTION_PASSPORT_RETURN_URL 87
+#define WINHTTP_OPTION_REDIRECT_POLICY 88
+#define WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS 89
+#define WINHTTP_OPTION_MAX_HTTP_STATUS_CONTINUE 90
+#define WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE 91
+#define WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE 92
+#define WINHTTP_OPTION_CONNECTION_INFO 93
+#define WINHTTP_OPTION_CLIENT_CERT_ISSUER_LIST 94
+#define WINHTTP_OPTION_SPN 96
+#define WINHTTP_OPTION_GLOBAL_PROXY_CREDS 97
+#define WINHTTP_OPTION_GLOBAL_SERVER_CREDS 98
+#define WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT 99
+#define WINHTTP_OPTION_REJECT_USERPWD_IN_URL 100
+#define WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS 101
+#define WINHTTP_LAST_OPTION WINHTTP_OPTION_USE_GLOBAL_SERVER_CREDENTIALS
+#define WINHTTP_OPTION_USERNAME 0x1000
+#define WINHTTP_OPTION_PASSWORD 0x1001
+#define WINHTTP_OPTION_PROXY_USERNAME 0x1002
+#define WINHTTP_OPTION_PROXY_PASSWORD 0x1003
+
+#define WINHTTP_CONNS_PER_SERVER_UNLIMITED 0xFFFFFFFF
+
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM 0
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW 1
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH 2
+#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_DEFAULT WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM
+
+#define WINHTTP_OPTION_REDIRECT_POLICY_NEVER 0
+#define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP 1
+#define WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS 2
+#define WINHTTP_OPTION_REDIRECT_POLICY_LAST WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS
+#define WINHTTP_OPTION_REDIRECT_POLICY_DEFAULT WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP
+
+#define WINHTTP_DISABLE_PASSPORT_AUTH 0x00000000
+#define WINHTTP_ENABLE_PASSPORT_AUTH 0x10000000
+#define WINHTTP_DISABLE_PASSPORT_KEYRING 0x20000000
+#define WINHTTP_ENABLE_PASSPORT_KEYRING 0x40000000
+
+#define WINHTTP_DISABLE_COOKIES 0x00000001
+#define WINHTTP_DISABLE_REDIRECTS 0x00000002
+#define WINHTTP_DISABLE_AUTHENTICATION 0x00000004
+#define WINHTTP_DISABLE_KEEP_ALIVE 0x00000008
+#define WINHTTP_ENABLE_SSL_REVOCATION 0x00000001
+#define WINHTTP_ENABLE_SSL_REVERT_IMPERSONATION 0x00000002
+#define WINHTTP_DISABLE_SPN_SERVER_PORT 0x00000000
+#define WINHTTP_ENABLE_SPN_SERVER_PORT 0x00000001
+#define WINHTTP_OPTION_SPN_MASK WINHTTP_ENABLE_SPN_SERVER_PORT
+
+/* Options for WinHttpOpenRequest */
+#define WINHTTP_NO_REFERER NULL
+#define WINHTTP_DEFAULT_ACCEPT_TYPES NULL
+
+/* Options for WinHttpSendRequest */
+#define WINHTTP_NO_ADDITIONAL_HEADERS NULL
+#define WINHTTP_NO_REQUEST_DATA NULL
+
+/* WinHTTP error codes */
+#define WINHTTP_ERROR_BASE 12000
+#define ERROR_WINHTTP_OUT_OF_HANDLES (WINHTTP_ERROR_BASE + 1)
+#define ERROR_WINHTTP_TIMEOUT (WINHTTP_ERROR_BASE + 2)
+#define ERROR_WINHTTP_INTERNAL_ERROR (WINHTTP_ERROR_BASE + 4)
+#define ERROR_WINHTTP_INVALID_URL (WINHTTP_ERROR_BASE + 5)
+#define ERROR_WINHTTP_UNRECOGNIZED_SCHEME (WINHTTP_ERROR_BASE + 6)
+#define ERROR_WINHTTP_NAME_NOT_RESOLVED (WINHTTP_ERROR_BASE + 7)
+#define ERROR_WINHTTP_INVALID_OPTION (WINHTTP_ERROR_BASE + 9)
+#define ERROR_WINHTTP_OPTION_NOT_SETTABLE (WINHTTP_ERROR_BASE + 11)
+#define ERROR_WINHTTP_SHUTDOWN (WINHTTP_ERROR_BASE + 12)
+#define ERROR_WINHTTP_LOGIN_FAILURE (WINHTTP_ERROR_BASE + 15)
+#define ERROR_WINHTTP_OPERATION_CANCELLED (WINHTTP_ERROR_BASE + 17)
+#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE (WINHTTP_ERROR_BASE + 18)
+#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE (WINHTTP_ERROR_BASE + 19)
+#define ERROR_WINHTTP_CANNOT_CONNECT (WINHTTP_ERROR_BASE + 29)
+#define ERROR_WINHTTP_CONNECTION_ERROR (WINHTTP_ERROR_BASE + 30)
+#define ERROR_WINHTTP_RESEND_REQUEST (WINHTTP_ERROR_BASE + 32)
+#define ERROR_WINHTTP_SECURE_CERT_DATE_INVALID (WINHTTP_ERROR_BASE + 37)
+#define ERROR_WINHTTP_SECURE_CERT_CN_INVALID (WINHTTP_ERROR_BASE + 38)
+#define ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (WINHTTP_ERROR_BASE + 44)
+#define ERROR_WINHTTP_SECURE_INVALID_CA (WINHTTP_ERROR_BASE + 45)
+#define ERROR_WINHTTP_SECURE_CERT_REV_FAILED (WINHTTP_ERROR_BASE + 57)
+#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN (WINHTTP_ERROR_BASE + 100)
+#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND (WINHTTP_ERROR_BASE + 101)
+#define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND (WINHTTP_ERROR_BASE + 102)
+#define ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN (WINHTTP_ERROR_BASE + 103)
+#define ERROR_WINHTTP_HEADER_NOT_FOUND (WINHTTP_ERROR_BASE + 150)
+#define ERROR_WINHTTP_INVALID_SERVER_RESPONSE (WINHTTP_ERROR_BASE + 152)
+#define ERROR_WINHTTP_INVALID_HEADER (WINHTTP_ERROR_BASE + 153)
+#define ERROR_WINHTTP_INVALID_QUERY_REQUEST (WINHTTP_ERROR_BASE + 154)
+#define ERROR_WINHTTP_HEADER_ALREADY_EXISTS (WINHTTP_ERROR_BASE + 155)
+#define ERROR_WINHTTP_REDIRECT_FAILED (WINHTTP_ERROR_BASE + 156)
+#define ERROR_WINHTTP_SECURE_CHANNEL_ERROR (WINHTTP_ERROR_BASE + 157)
+#define ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT (WINHTTP_ERROR_BASE + 166)
+#define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT (WINHTTP_ERROR_BASE + 167)
+#define ERROR_WINHTTP_SECURE_INVALID_CERT (WINHTTP_ERROR_BASE + 169)
+#define ERROR_WINHTTP_SECURE_CERT_REVOKED (WINHTTP_ERROR_BASE + 170)
+#define ERROR_WINHTTP_NOT_INITIALIZED (WINHTTP_ERROR_BASE + 172)
+#define ERROR_WINHTTP_SECURE_FAILURE (WINHTTP_ERROR_BASE + 175)
+#define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR (WINHTTP_ERROR_BASE + 178)
+#define ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE (WINHTTP_ERROR_BASE + 179)
+#define ERROR_WINHTTP_AUTODETECTION_FAILED (WINHTTP_ERROR_BASE + 180)
+#define ERROR_WINHTTP_HEADER_COUNT_EXCEEDED (WINHTTP_ERROR_BASE + 181)
+#define ERROR_WINHTTP_HEADER_SIZE_OVERFLOW (WINHTTP_ERROR_BASE + 182)
+#define ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW (WINHTTP_ERROR_BASE + 183)
+#define ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW (WINHTTP_ERROR_BASE + 184)
+#define ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY (WINHTTP_ERROR_BASE + 185)
+#define ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY (WINHTTP_ERROR_BASE + 186)
+#define WINHTTP_ERROR_LAST (WINHTTP_ERROR_BASE + 186)
+
+/* WinHttp status codes */
+#define HTTP_STATUS_CONTINUE 100
+#define HTTP_STATUS_SWITCH_PROTOCOLS 101
+#define HTTP_STATUS_OK 200
+#define HTTP_STATUS_CREATED 201
+#define HTTP_STATUS_ACCEPTED 202
+#define HTTP_STATUS_PARTIAL 203
+#define HTTP_STATUS_NO_CONTENT 204
+#define HTTP_STATUS_RESET_CONTENT 205
+#define HTTP_STATUS_PARTIAL_CONTENT 206
+#define HTTP_STATUS_WEBDAV_MULTI_STATUS 207
+#define HTTP_STATUS_AMBIGUOUS 300
+#define HTTP_STATUS_MOVED 301
+#define HTTP_STATUS_REDIRECT 302
+#define HTTP_STATUS_REDIRECT_METHOD 303
+#define HTTP_STATUS_NOT_MODIFIED 304
+#define HTTP_STATUS_USE_PROXY 305
+#define HTTP_STATUS_REDIRECT_KEEP_VERB 307
+#define HTTP_STATUS_BAD_REQUEST 400
+#define HTTP_STATUS_DENIED 401
+#define HTTP_STATUS_PAYMENT_REQ 402
+#define HTTP_STATUS_FORBIDDEN 403
+#define HTTP_STATUS_NOT_FOUND 404
+#define HTTP_STATUS_BAD_METHOD 405
+#define HTTP_STATUS_NONE_ACCEPTABLE 406
+#define HTTP_STATUS_PROXY_AUTH_REQ 407
+#define HTTP_STATUS_REQUEST_TIMEOUT 408
+#define HTTP_STATUS_CONFLICT 409
+#define HTTP_STATUS_GONE 410
+#define HTTP_STATUS_LENGTH_REQUIRED 411
+#define HTTP_STATUS_PRECOND_FAILED 412
+#define HTTP_STATUS_REQUEST_TOO_LARGE 413
+#define HTTP_STATUS_URI_TOO_LONG 414
+#define HTTP_STATUS_UNSUPPORTED_MEDIA 415
+#define HTTP_STATUS_RETRY_WITH 449
+#define HTTP_STATUS_SERVER_ERROR 500
+#define HTTP_STATUS_NOT_SUPPORTED 501
+#define HTTP_STATUS_BAD_GATEWAY 502
+#define HTTP_STATUS_SERVICE_UNAVAIL 503
+#define HTTP_STATUS_GATEWAY_TIMEOUT 504
+#define HTTP_STATUS_VERSION_NOT_SUP 505
+#define HTTP_STATUS_FIRST HTTP_STATUS_CONTINUE
+#define HTTP_STATUS_LAST HTTP_STATUS_VERSION_NOT_SUP
+
+#define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100
+#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000
+#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID 0x00001000
+#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE 0x00000200
+#define SECURITY_FLAG_SECURE 0x00000001
+#define SECURITY_FLAG_STRENGTH_WEAK 0x10000000
+#define SECURITY_FLAG_STRENGTH_MEDIUM 0x40000000
+#define SECURITY_FLAG_STRENGTH_STRONG 0x20000000
+
+#define ICU_NO_ENCODE 0x20000000
+#define ICU_DECODE 0x10000000
+#define ICU_NO_META 0x08000000
+#define ICU_ENCODE_SPACES_ONLY 0x04000000
+#define ICU_BROWSER_MODE 0x02000000
+#define ICU_ENCODE_PERCENT 0x00001000
+
+/* Query flags */
+#define WINHTTP_QUERY_MIME_VERSION 0
+#define WINHTTP_QUERY_CONTENT_TYPE 1
+#define WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING 2
+#define WINHTTP_QUERY_CONTENT_ID 3
+#define WINHTTP_QUERY_CONTENT_DESCRIPTION 4
+#define WINHTTP_QUERY_CONTENT_LENGTH 5
+#define WINHTTP_QUERY_CONTENT_LANGUAGE 6
+#define WINHTTP_QUERY_ALLOW 7
+#define WINHTTP_QUERY_PUBLIC 8
+#define WINHTTP_QUERY_DATE 9
+#define WINHTTP_QUERY_EXPIRES 10
+#define WINHTTP_QUERY_LAST_MODIFIED 11
+#define WINHTTP_QUERY_MESSAGE_ID 12
+#define WINHTTP_QUERY_URI 13
+#define WINHTTP_QUERY_DERIVED_FROM 14
+#define WINHTTP_QUERY_COST 15
+#define WINHTTP_QUERY_LINK 16
+#define WINHTTP_QUERY_PRAGMA 17
+#define WINHTTP_QUERY_VERSION 18
+#define WINHTTP_QUERY_STATUS_CODE 19
+#define WINHTTP_QUERY_STATUS_TEXT 20
+#define WINHTTP_QUERY_RAW_HEADERS 21
+#define WINHTTP_QUERY_RAW_HEADERS_CRLF 22
+#define WINHTTP_QUERY_CONNECTION 23
+#define WINHTTP_QUERY_ACCEPT 24
+#define WINHTTP_QUERY_ACCEPT_CHARSET 25
+#define WINHTTP_QUERY_ACCEPT_ENCODING 26
+#define WINHTTP_QUERY_ACCEPT_LANGUAGE 27
+#define WINHTTP_QUERY_AUTHORIZATION 28
+#define WINHTTP_QUERY_CONTENT_ENCODING 29
+#define WINHTTP_QUERY_FORWARDED 30
+#define WINHTTP_QUERY_FROM 31
+#define WINHTTP_QUERY_IF_MODIFIED_SINCE 32
+#define WINHTTP_QUERY_LOCATION 33
+#define WINHTTP_QUERY_ORIG_URI 34
+#define WINHTTP_QUERY_REFERER 35
+#define WINHTTP_QUERY_RETRY_AFTER 36
+#define WINHTTP_QUERY_SERVER 37
+#define WINHTTP_QUERY_TITLE 38
+#define WINHTTP_QUERY_USER_AGENT 39
+#define WINHTTP_QUERY_WWW_AUTHENTICATE 40
+#define WINHTTP_QUERY_PROXY_AUTHENTICATE 41
+#define WINHTTP_QUERY_ACCEPT_RANGES 42
+#define WINHTTP_QUERY_SET_COOKIE 43
+#define WINHTTP_QUERY_COOKIE 44
+#define WINHTTP_QUERY_REQUEST_METHOD 45
+#define WINHTTP_QUERY_REFRESH 46
+#define WINHTTP_QUERY_CONTENT_DISPOSITION 47
+#define WINHTTP_QUERY_AGE 48
+#define WINHTTP_QUERY_CACHE_CONTROL 49
+#define WINHTTP_QUERY_CONTENT_BASE 50
+#define WINHTTP_QUERY_CONTENT_LOCATION 51
+#define WINHTTP_QUERY_CONTENT_MD5 52
+#define WINHTTP_QUERY_CONTENT_RANGE 53
+#define WINHTTP_QUERY_ETAG 54
+#define WINHTTP_QUERY_HOST 55
+#define WINHTTP_QUERY_IF_MATCH 56
+#define WINHTTP_QUERY_IF_NONE_MATCH 57
+#define WINHTTP_QUERY_IF_RANGE 58
+#define WINHTTP_QUERY_IF_UNMODIFIED_SINCE 59
+#define WINHTTP_QUERY_MAX_FORWARDS 60
+#define WINHTTP_QUERY_PROXY_AUTHORIZATION 61
+#define WINHTTP_QUERY_RANGE 62
+#define WINHTTP_QUERY_TRANSFER_ENCODING 63
+#define WINHTTP_QUERY_UPGRADE 64
+#define WINHTTP_QUERY_VARY 65
+#define WINHTTP_QUERY_VIA 66
+#define WINHTTP_QUERY_WARNING 67
+#define WINHTTP_QUERY_EXPECT 68
+#define WINHTTP_QUERY_PROXY_CONNECTION 69
+#define WINHTTP_QUERY_UNLESS_MODIFIED_SINCE 70
+#define WINHTTP_QUERY_PROXY_SUPPORT 75
+#define WINHTTP_QUERY_AUTHENTICATION_INFO 76
+#define WINHTTP_QUERY_PASSPORT_URLS 77
+#define WINHTTP_QUERY_PASSPORT_CONFIG 78
+#define WINHTTP_QUERY_MAX 78
+#define WINHTTP_QUERY_CUSTOM 65535
+#define WINHTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000
+#define WINHTTP_QUERY_FLAG_SYSTEMTIME 0x40000000
+#define WINHTTP_QUERY_FLAG_NUMBER 0x20000000
+
+/* Callback options */
+#define WINHTTP_CALLBACK_STATUS_RESOLVING_NAME 0x00000001
+#define WINHTTP_CALLBACK_STATUS_NAME_RESOLVED 0x00000002
+#define WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER 0x00000004
+#define WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER 0x00000008
+#define WINHTTP_CALLBACK_STATUS_SENDING_REQUEST 0x00000010
+#define WINHTTP_CALLBACK_STATUS_REQUEST_SENT 0x00000020
+#define WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE 0x00000040
+#define WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED 0x00000080
+#define WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION 0x00000100
+#define WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED 0x00000200
+#define WINHTTP_CALLBACK_STATUS_HANDLE_CREATED 0x00000400
+#define WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING 0x00000800
+#define WINHTTP_CALLBACK_STATUS_DETECTING_PROXY 0x00001000
+#define WINHTTP_CALLBACK_STATUS_REDIRECT 0x00004000
+#define WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE 0x00008000
+#define WINHTTP_CALLBACK_STATUS_SECURE_FAILURE 0x00010000
+#define WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 0x00020000
+#define WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE 0x00040000
+#define WINHTTP_CALLBACK_STATUS_READ_COMPLETE 0x00080000
+#define WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE 0x00100000
+#define WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 0x00200000
+#define WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE 0x00400000
+#define WINHTTP_CALLBACK_FLAG_RESOLVE_NAME (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED)
+#define WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER)
+#define WINHTTP_CALLBACK_FLAG_SEND_REQUEST (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT)
+#define WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE (WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE | WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED)
+#define WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION (WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION | WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED)
+#define WINHTTP_CALLBACK_FLAG_HANDLES (WINHTTP_CALLBACK_STATUS_HANDLE_CREATED | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING)
+#define WINHTTP_CALLBACK_FLAG_DETECTING_PROXY WINHTTP_CALLBACK_STATUS_DETECTING_PROXY
+#define WINHTTP_CALLBACK_FLAG_REDIRECT WINHTTP_CALLBACK_STATUS_REDIRECT
+#define WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
+#define WINHTTP_CALLBACK_FLAG_SECURE_FAILURE WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
+#define WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
+#define WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
+#define WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
+#define WINHTTP_CALLBACK_FLAG_READ_COMPLETE WINHTTP_CALLBACK_STATUS_READ_COMPLETE
+#define WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
+#define WINHTTP_CALLBACK_FLAG_REQUEST_ERROR WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
+#define WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE \
+ | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WINHTTP_CALLBACK_STATUS_READ_COMPLETE \
+ | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR)
+#define WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS 0xffffffff
+#define WINHTTP_INVALID_STATUS_CALLBACK ((WINHTTP_STATUS_CALLBACK)(-1))
+
+#define API_RECEIVE_RESPONSE (1)
+#define API_QUERY_DATA_AVAILABLE (2)
+#define API_READ_DATA (3)
+#define API_WRITE_DATA (4)
+#define API_SEND_REQUEST (5)
+
+#define WINHTTP_HANDLE_TYPE_SESSION 1
+#define WINHTTP_HANDLE_TYPE_CONNECT 2
+#define WINHTTP_HANDLE_TYPE_REQUEST 3
+
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED 0x00000001
+#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT 0x00000002
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED 0x00000004
+#define WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA 0x00000008
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID 0x00000010
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID 0x00000020
+#define WINHTTP_CALLBACK_STATUS_FLAG_CERT_WRONG_USAGE 0x00000040
+#define WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR 0x80000000
+
+#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 0x00000008
+#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 0x00000020
+#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1 0x00000080
+#define WINHTTP_FLAG_SECURE_PROTOCOL_ALL (WINHTTP_FLAG_SECURE_PROTOCOL_SSL2 | WINHTTP_FLAG_SECURE_PROTOCOL_SSL3 | WINHTTP_FLAG_SECURE_PROTOCOL_TLS1)
+
+#define WINHTTP_AUTH_SCHEME_BASIC 0x00000001
+#define WINHTTP_AUTH_SCHEME_NTLM 0x00000002
+#define WINHTTP_AUTH_SCHEME_PASSPORT 0x00000004
+#define WINHTTP_AUTH_SCHEME_DIGEST 0x00000008
+#define WINHTTP_AUTH_SCHEME_NEGOTIATE 0x00000010
+
+#define WINHTTP_AUTH_TARGET_SERVER 0x00000000
+#define WINHTTP_AUTH_TARGET_PROXY 0x00000001
+
+#define WINHTTP_TIME_FORMAT_BUFSIZE 62
+
+typedef struct
+{
+ DWORD dwStructSize;
+ LPWSTR lpszScheme;
+ DWORD dwSchemeLength;
+ INTERNET_SCHEME nScheme;
+ LPWSTR lpszHostName;
+ DWORD dwHostNameLength;
+ INTERNET_PORT nPort;
+ LPWSTR lpszUserName;
+ DWORD dwUserNameLength;
+ LPWSTR lpszPassword;
+ DWORD dwPasswordLength;
+ LPWSTR lpszUrlPath;
+ DWORD dwUrlPathLength;
+ LPWSTR lpszExtraInfo;
+ DWORD dwExtraInfoLength;
+} URL_COMPONENTS, *LPURL_COMPONENTS;
+typedef URL_COMPONENTS URL_COMPONENTSW;
+typedef LPURL_COMPONENTS LPURL_COMPONENTSW;
+
+typedef struct
+{
+ DWORD_PTR dwResult;
+ DWORD dwError;
+} WINHTTP_ASYNC_RESULT, *LPWINHTTP_ASYNC_RESULT;
+
+typedef struct
+{
+ FILETIME ftExpiry;
+ FILETIME ftStart;
+ LPWSTR lpszSubjectInfo;
+ LPWSTR lpszIssuerInfo;
+ LPWSTR lpszProtocolName;
+ LPWSTR lpszSignatureAlgName;
+ LPWSTR lpszEncryptionAlgName;
+ DWORD dwKeySize;
+} WINHTTP_CERTIFICATE_INFO;
+
+typedef struct
+{
+ DWORD dwAccessType;
+ LPWSTR lpszProxy;
+ LPWSTR lpszProxyBypass;
+} WINHTTP_PROXY_INFO, *LPWINHTTP_PROXY_INFO;
+typedef WINHTTP_PROXY_INFO WINHTTP_PROXY_INFOW;
+typedef LPWINHTTP_PROXY_INFO LPWINHTTP_PROXY_INFOW;
+
+typedef struct
+{
+ BOOL fAutoDetect;
+ LPWSTR lpszAutoConfigUrl;
+ LPWSTR lpszProxy;
+ LPWSTR lpszProxyBypass;
+} WINHTTP_CURRENT_USER_IE_PROXY_CONFIG;
+
+typedef VOID (CALLBACK *WINHTTP_STATUS_CALLBACK)(HINTERNET,DWORD_PTR,DWORD,LPVOID,DWORD);
+
+#define WINHTTP_AUTO_DETECT_TYPE_DHCP 0x00000001
+#define WINHTTP_AUTO_DETECT_TYPE_DNS_A 0x00000002
+
+#define WINHTTP_AUTOPROXY_AUTO_DETECT 0x00000001
+#define WINHTTP_AUTOPROXY_CONFIG_URL 0x00000002
+#define WINHTTP_AUTOPROXY_RUN_INPROCESS 0x00010000
+#define WINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY 0x00020000
+
+typedef struct
+{
+ DWORD dwFlags;
+ DWORD dwAutoDetectFlags;
+ LPCWSTR lpszAutoConfigUrl;
+ LPVOID lpvReserved;
+ DWORD dwReserved;
+ BOOL fAutoLogonIfChallenged;
+} WINHTTP_AUTOPROXY_OPTIONS;
+
+typedef struct
+{
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+} HTTP_VERSION_INFO, *LPHTTP_VERSION_INFO;
+
+#ifdef _WS2DEF_
+typedef struct
+{
+ DWORD cbSize;
+ SOCKADDR_STORAGE LocalAddress;
+ SOCKADDR_STORAGE RemoteAddress;
+} WINHTTP_CONNECTION_INFO;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+BOOL WINAPI WinHttpAddRequestHeaders(HINTERNET,LPCWSTR,DWORD,DWORD);
+BOOL WINAPI WinHttpDetectAutoProxyConfigUrl(DWORD,LPWSTR*);
+BOOL WINAPI WinHttpCheckPlatform(void);
+BOOL WINAPI WinHttpCloseHandle(HINTERNET);
+HINTERNET WINAPI WinHttpConnect(HINTERNET,LPCWSTR,INTERNET_PORT,DWORD);
+BOOL WINAPI WinHttpCrackUrl(LPCWSTR,DWORD,DWORD,LPURL_COMPONENTS);
+BOOL WINAPI WinHttpCreateUrl(LPURL_COMPONENTS,DWORD,LPWSTR,LPDWORD);
+BOOL WINAPI WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);
+BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG*);
+BOOL WINAPI WinHttpGetProxyForUrl(HINTERNET,LPCWSTR,WINHTTP_AUTOPROXY_OPTIONS*,WINHTTP_PROXY_INFO*);
+HINTERNET WINAPI WinHttpOpen(LPCWSTR,DWORD,LPCWSTR,LPCWSTR,DWORD);
+HINTERNET WINAPI WinHttpOpenRequest(HINTERNET,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR*,DWORD);
+BOOL WINAPI WinHttpQueryAuthParams(HINTERNET,DWORD,LPVOID*);
+BOOL WINAPI WinHttpQueryAuthSchemes(HINTERNET,LPDWORD,LPDWORD,LPDWORD);
+BOOL WINAPI WinHttpQueryDataAvailable(HINTERNET,LPDWORD);
+BOOL WINAPI WinHttpQueryHeaders(HINTERNET,DWORD,LPCWSTR,LPVOID,LPDWORD,LPDWORD);
+BOOL WINAPI WinHttpQueryOption(HINTERNET,DWORD,LPVOID,LPDWORD);
+BOOL WINAPI WinHttpReadData(HINTERNET,LPVOID,DWORD,LPDWORD);
+BOOL WINAPI WinHttpReceiveResponse(HINTERNET,LPVOID);
+BOOL WINAPI WinHttpSendRequest(HINTERNET,LPCWSTR,DWORD,LPVOID,DWORD,DWORD,DWORD_PTR);
+BOOL WINAPI WinHttpSetDefaultProxyConfiguration(WINHTTP_PROXY_INFO*);
+BOOL WINAPI WinHttpSetCredentials(HINTERNET,DWORD,DWORD,LPCWSTR,LPCWSTR,LPVOID);
+BOOL WINAPI WinHttpSetOption(HINTERNET,DWORD,LPVOID,DWORD);
+WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(HINTERNET,WINHTTP_STATUS_CALLBACK,DWORD,DWORD_PTR);
+BOOL WINAPI WinHttpSetTimeouts(HINTERNET,int,int,int,int);
+BOOL WINAPI WinHttpTimeFromSystemTime(const SYSTEMTIME *,LPWSTR);
+BOOL WINAPI WinHttpTimeToSystemTime(LPCWSTR,SYSTEMTIME*);
+BOOL WINAPI WinHttpWriteData(HINTERNET,LPCVOID,DWORD,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <poppack.h>
+
+#endif /* __WINE_WINHTTP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h
new file mode 100644
index 00000000..7cc4afc6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wininet.h
@@ -0,0 +1,1739 @@
+/*
+ * Copyright (C) 2000 Ulrich Czekalla
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WININET_H_
+#define _WINE_WININET_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INTERNETAPI
+#define BOOLAPI INTERNETAPI BOOL WINAPI
+
+typedef LPVOID HINTERNET;
+typedef HINTERNET * LPHINTERNET;
+
+typedef WORD INTERNET_PORT;
+typedef INTERNET_PORT * LPINTERNET_PORT;
+
+
+#define INTERNET_INVALID_PORT_NUMBER 0
+
+#define INTERNET_DEFAULT_FTP_PORT 21
+#define INTERNET_DEFAULT_GOPHER_PORT 70
+#define INTERNET_DEFAULT_HTTP_PORT 80
+#define INTERNET_DEFAULT_HTTPS_PORT 443
+#define INTERNET_DEFAULT_SOCKS_PORT 1080
+
+#define INTERNET_MAX_HOST_NAME_LENGTH 256
+#define INTERNET_MAX_USER_NAME_LENGTH 128
+#define INTERNET_MAX_PASSWORD_LENGTH 128
+#define INTERNET_MAX_PORT_NUMBER_LENGTH 5
+#define INTERNET_MAX_PORT_NUMBER_VALUE 65535
+#define INTERNET_MAX_PATH_LENGTH 2048
+#define INTERNET_MAX_SCHEME_LENGTH 32
+#define INTERNET_MAX_URL_LENGTH (INTERNET_MAX_SCHEME_LENGTH + sizeof("://")+ INTERNET_MAX_PATH_LENGTH)
+#define INTERNET_KEEP_ALIVE_UNKNOWN ((DWORD)-1)
+#define INTERNET_KEEP_ALIVE_ENABLED 1
+#define INTERNET_KEEP_ALIVE_DISABLED 0
+#define INTERNET_REQFLAG_FROM_CACHE 0x00000001
+#define INTERNET_REQFLAG_ASYNC 0x00000002
+#define INTERNET_REQFLAG_VIA_PROXY 0x00000004
+#define INTERNET_REQFLAG_NO_HEADERS 0x00000008
+#define INTERNET_REQFLAG_PASSIVE 0x00000010
+#define INTERNET_REQFLAG_CACHE_WRITE_DISABLED 0x00000040
+#define INTERNET_FLAG_RELOAD 0x80000000
+#define INTERNET_FLAG_RAW_DATA 0x40000000
+#define INTERNET_FLAG_EXISTING_CONNECT 0x20000000
+#define INTERNET_FLAG_ASYNC 0x10000000
+#define INTERNET_FLAG_PASSIVE 0x08000000
+#define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000
+#define INTERNET_FLAG_DONT_CACHE INTERNET_FLAG_NO_CACHE_WRITE
+#define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000
+#define INTERNET_FLAG_FROM_CACHE 0x01000000
+#define INTERNET_FLAG_OFFLINE INTERNET_FLAG_FROM_CACHE
+#define INTERNET_FLAG_SECURE 0x00800000
+#define INTERNET_FLAG_KEEP_CONNECTION 0x00400000
+#define INTERNET_FLAG_NO_AUTO_REDIRECT 0x00200000
+#define INTERNET_FLAG_READ_PREFETCH 0x00100000
+#define INTERNET_FLAG_NO_COOKIES 0x00080000
+#define INTERNET_FLAG_NO_AUTH 0x00040000
+#define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x00008000
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x00004000
+#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000
+#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x00001000
+#define INTERNET_FLAG_RESYNCHRONIZE 0x00000800
+#define INTERNET_FLAG_HYPERLINK 0x00000400
+#define INTERNET_FLAG_NO_UI 0x00000200
+#define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100
+#define INTERNET_FLAG_CACHE_ASYNC 0x00000080
+#define INTERNET_FLAG_FORMS_SUBMIT 0x00000040
+#define INTERNET_FLAG_NEED_FILE 0x00000010
+#define INTERNET_FLAG_MUST_CACHE_REQUEST INTERNET_FLAG_NEED_FILE
+#define INTERNET_FLAG_TRANSFER_ASCII FTP_TRANSFER_TYPE_ASCII
+#define INTERNET_FLAG_TRANSFER_BINARY FTP_TRANSFER_TYPE_BINARY
+#define SECURITY_INTERNET_MASK (INTERNET_FLAG_IGNORE_CERT_CN_INVALID|\
+INTERNET_FLAG_IGNORE_CERT_DATE_INVALID|\
+INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|\
+INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP)
+
+#define INTERNET_FLAGS_MASK (INTERNET_FLAG_RELOAD \
+ | INTERNET_FLAG_RAW_DATA \
+ | INTERNET_FLAG_EXISTING_CONNECT \
+ | INTERNET_FLAG_ASYNC \
+ | INTERNET_FLAG_PASSIVE \
+ | INTERNET_FLAG_NO_CACHE_WRITE \
+ | INTERNET_FLAG_MAKE_PERSISTENT \
+ | INTERNET_FLAG_FROM_CACHE \
+ | INTERNET_FLAG_SECURE \
+ | INTERNET_FLAG_KEEP_CONNECTION \
+ | INTERNET_FLAG_NO_AUTO_REDIRECT \
+ | INTERNET_FLAG_READ_PREFETCH \
+ | INTERNET_FLAG_NO_COOKIES \
+ | INTERNET_FLAG_NO_AUTH \
+ | INTERNET_FLAG_CACHE_IF_NET_FAIL \
+ | SECURITY_INTERNET_MASK \
+ | INTERNET_FLAG_RESYNCHRONIZE \
+ | INTERNET_FLAG_HYPERLINK \
+ | INTERNET_FLAG_NO_UI \
+ | INTERNET_FLAG_PRAGMA_NOCACHE \
+ | INTERNET_FLAG_CACHE_ASYNC \
+ | INTERNET_FLAG_FORMS_SUBMIT \
+ | INTERNET_FLAG_NEED_FILE \
+ | INTERNET_FLAG_TRANSFER_BINARY \
+ | INTERNET_FLAG_TRANSFER_ASCII \
+ )
+
+#define INTERNET_ERROR_MASK_INSERT_CDROM 0x1
+#define INTERNET_ERROR_MASK_COMBINED_SEC_CERT 0x2
+#define INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG 0x4
+#define INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 0x8
+
+#define INTERNET_OPTIONS_MASK (~INTERNET_FLAGS_MASK)
+#define WININET_API_FLAG_ASYNC 0x00000001
+#define WININET_API_FLAG_SYNC 0x00000004
+#define WININET_API_FLAG_USE_CONTEXT 0x00000008
+#define INTERNET_NO_CALLBACK 0
+
+typedef enum {
+ INTERNET_SCHEME_PARTIAL = -2,
+ INTERNET_SCHEME_UNKNOWN = -1,
+ INTERNET_SCHEME_DEFAULT = 0,
+ INTERNET_SCHEME_FTP,
+ INTERNET_SCHEME_GOPHER,
+ INTERNET_SCHEME_HTTP,
+ INTERNET_SCHEME_HTTPS,
+ INTERNET_SCHEME_FILE,
+ INTERNET_SCHEME_NEWS,
+ INTERNET_SCHEME_MAILTO,
+ INTERNET_SCHEME_SOCKS,
+ INTERNET_SCHEME_JAVASCRIPT,
+ INTERNET_SCHEME_VBSCRIPT,
+ INTERNET_SCHEME_RES,
+ INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
+ INTERNET_SCHEME_LAST = INTERNET_SCHEME_RES
+} INTERNET_SCHEME,* LPINTERNET_SCHEME;
+
+typedef struct {
+ DWORD_PTR dwResult;
+ DWORD dwError;
+} INTERNET_ASYNC_RESULT,* LPINTERNET_ASYNC_RESULT;
+
+typedef struct {
+ DWORD dwAccessType;
+ LPCSTR lpszProxy;
+ LPCSTR lpszProxyBypass;
+} INTERNET_PROXY_INFOA,* LPINTERNET_PROXY_INFOA;
+
+typedef struct {
+ DWORD dwAccessType;
+ LPCWSTR lpszProxy;
+ LPCWSTR lpszProxyBypass;
+} INTERNET_PROXY_INFOW,* LPINTERNET_PROXY_INFOW;
+
+
+DECL_WINELIB_TYPE_AW(INTERNET_PROXY_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_PROXY_INFO)
+
+typedef struct {
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+} INTERNET_VERSION_INFO,* LPINTERNET_VERSION_INFO;
+
+typedef struct {
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+} HTTP_VERSION_INFO,* LPHTTP_VERSION_INFO;
+
+typedef struct {
+ DWORD dwConnectedState;
+ DWORD dwFlags;
+} INTERNET_CONNECTED_INFO,* LPINTERNET_CONNECTED_INFO;
+
+#define ISO_FORCE_DISCONNECTED 0x00000001
+
+typedef struct {
+ DWORD dwStructSize;
+ LPSTR lpszScheme;
+ DWORD dwSchemeLength;
+ INTERNET_SCHEME nScheme;
+ LPSTR lpszHostName;
+ DWORD dwHostNameLength;
+ INTERNET_PORT nPort;
+ LPSTR lpszUserName;
+ DWORD dwUserNameLength;
+ LPSTR lpszPassword;
+ DWORD dwPasswordLength;
+ LPSTR lpszUrlPath;
+ DWORD dwUrlPathLength;
+ LPSTR lpszExtraInfo;
+ DWORD dwExtraInfoLength;
+} URL_COMPONENTSA,* LPURL_COMPONENTSA;
+
+typedef struct {
+ DWORD dwStructSize;
+ LPWSTR lpszScheme;
+ DWORD dwSchemeLength;
+ INTERNET_SCHEME nScheme;
+ LPWSTR lpszHostName;
+ DWORD dwHostNameLength;
+ INTERNET_PORT nPort;
+ LPWSTR lpszUserName;
+ DWORD dwUserNameLength;
+ LPWSTR lpszPassword;
+ DWORD dwPasswordLength;
+ LPWSTR lpszUrlPath;
+ DWORD dwUrlPathLength;
+ LPWSTR lpszExtraInfo;
+ DWORD dwExtraInfoLength;
+} URL_COMPONENTSW,* LPURL_COMPONENTSW;
+
+DECL_WINELIB_TYPE_AW(URL_COMPONENTS)
+DECL_WINELIB_TYPE_AW(LPURL_COMPONENTS)
+
+typedef struct {
+ FILETIME ftExpiry;
+ FILETIME ftStart;
+ LPSTR lpszSubjectInfo;
+ LPSTR lpszIssuerInfo;
+ LPSTR lpszProtocolName;
+ LPSTR lpszSignatureAlgName;
+ LPSTR lpszEncryptionAlgName;
+ DWORD dwKeySize;
+
+} INTERNET_CERTIFICATE_INFOA,* LPINTERNET_CERTIFICATE_INFOA;
+
+typedef struct {
+ FILETIME ftExpiry;
+ FILETIME ftStart;
+ LPWSTR lpszSubjectInfo;
+ LPWSTR lpszIssuerInfo;
+ LPWSTR lpszProtocolName;
+ LPWSTR lpszSignatureAlgName;
+ LPWSTR lpszEncryptionAlgName;
+ DWORD dwKeySize;
+
+} INTERNET_CERTIFICATE_INFOW,* LPINTERNET_CERTIFICATE_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CERTIFICATE_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CERTIFICATE_INFO)
+
+typedef struct _INTERNET_BUFFERSA {
+ DWORD dwStructSize;
+ struct _INTERNET_BUFFERSA * Next;
+ LPCSTR lpcszHeader;
+ DWORD dwHeadersLength;
+ DWORD dwHeadersTotal;
+ LPVOID lpvBuffer;
+ DWORD dwBufferLength;
+ DWORD dwBufferTotal;
+ DWORD dwOffsetLow;
+ DWORD dwOffsetHigh;
+} INTERNET_BUFFERSA,* LPINTERNET_BUFFERSA;
+
+typedef struct _INTERNET_BUFFERSW {
+ DWORD dwStructSize;
+ struct _INTERNET_BUFFERSW * Next;
+ LPCWSTR lpcszHeader;
+ DWORD dwHeadersLength;
+ DWORD dwHeadersTotal;
+ LPVOID lpvBuffer;
+ DWORD dwBufferLength;
+ DWORD dwBufferTotal;
+ DWORD dwOffsetLow;
+ DWORD dwOffsetHigh;
+} INTERNET_BUFFERSW,* LPINTERNET_BUFFERSW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_BUFFERS)
+DECL_WINELIB_TYPE_AW(LPINTERNET_BUFFERS)
+
+#define GROUP_OWNER_STORAGE_SIZE 4
+#define GROUPNAME_MAX_LENGTH 120
+
+typedef struct _INTERNET_CACHE_GROUP_INFOA {
+ DWORD dwGroupSize;
+ DWORD dwGroupFlags;
+ DWORD dwGroupType;
+ DWORD dwDiskUsage;
+ DWORD dwDiskQuota;
+ DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+ CHAR szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOA, * LPINTERNET_CACHE_GROUP_INFOA;
+
+typedef struct _INTERNET_CACHE_GROUP_INFOW {
+ DWORD dwGroupSize;
+ DWORD dwGroupFlags;
+ DWORD dwGroupType;
+ DWORD dwDiskUsage;
+ DWORD dwDiskQuota;
+ DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+ WCHAR szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOW, *LPINTERNET_CACHE_GROUP_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_GROUP_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_GROUP_INFO)
+
+typedef struct _INTERNET_PER_CONN_OPTIONA {
+ DWORD dwOption;
+ union {
+ DWORD dwValue;
+ LPSTR pszValue;
+ FILETIME ftValue;
+ } Value;
+} INTERNET_PER_CONN_OPTIONA, *LPINTERNET_PER_CONN_OPTIONA;
+
+typedef struct _INTERNET_PER_CONN_OPTIONW {
+ DWORD dwOption;
+ union {
+ DWORD dwValue;
+ LPWSTR pszValue;
+ FILETIME ftValue;
+ } Value;
+} INTERNET_PER_CONN_OPTIONW, *LPINTERNET_PER_CONN_OPTIONW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION)
+DECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION)
+
+#define INTERNET_PER_CONN_FLAGS 1
+#define INTERNET_PER_CONN_PROXY_SERVER 2
+#define INTERNET_PER_CONN_PROXY_BYPASS 3
+#define INTERNET_PER_CONN_AUTOCONFIG_URL 4
+#define INTERNET_PER_CONN_AUTODISCOVERY_FLAGS 5
+#define INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL 6
+#define INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS 7
+#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME 8
+#define INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_URL 9
+
+/* Values for INTERNET_PER_CONN_FLAGS */
+#define PROXY_TYPE_DIRECT 0x00000001
+#define PROXY_TYPE_PROXY 0x00000002
+#define PROXY_TYPE_AUTO_PROXY_URL 0x00000004
+#define PROXY_TYPE_AUTO_DETECT 0x00000008
+/* Values for INTERNET_PER_CONN_AUTODISCOVERY_FLAGS */
+#define AUTO_PROXY_FLAG_USER_SET 0x00000001
+#define AUTO_PROXY_FLAG_ALWAYS_DETECT 0x00000002
+#define AUTO_PROXY_FLAG_DETECTION_RUN 0x00000004
+#define AUTO_PROXY_FLAG_MIGRATED 0x00000008
+#define AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT 0x00000010
+#define AUTO_PROXY_FLAG_CACHE_INIT_RUN 0x00000020
+#define AUTO_PROXY_FLAG_DETECTION_SUSPECT 0x00000040
+
+typedef struct _INTERNET_PER_CONN_OPTION_LISTA {
+ DWORD dwSize;
+ LPSTR pszConnection;
+ DWORD dwOptionCount;
+ DWORD dwOptionError;
+ LPINTERNET_PER_CONN_OPTIONA pOptions;
+} INTERNET_PER_CONN_OPTION_LISTA, *LPINTERNET_PER_CONN_OPTION_LISTA;
+
+typedef struct _INTERNET_PER_CONN_OPTION_LISTW {
+ DWORD dwSize;
+ LPWSTR pszConnection;
+ DWORD dwOptionCount;
+ DWORD dwOptionError;
+ LPINTERNET_PER_CONN_OPTIONW pOptions;
+} INTERNET_PER_CONN_OPTION_LISTW, *LPINTERNET_PER_CONN_OPTION_LISTW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_PER_CONN_OPTION_LIST)
+DECL_WINELIB_TYPE_AW(LPINTERNET_PER_CONN_OPTION_LIST)
+
+typedef struct _INTERNET_DIAGNOSTIC_SOCKET_INFO
+{
+ DWORD_PTR Socket;
+ DWORD SourcePort;
+ DWORD DestPort;
+ DWORD Flags;
+} INTERNET_DIAGNOSTIC_SOCKET_INFO, *LPINTERNET_DIAGNOSTIC_SOCKET_INFO;
+
+#define IDSI_FLAG_KEEP_ALIVE 0x00000001
+#define IDSI_FLAG_SECURE 0x00000002
+#define IDSI_FLAG_PROXY 0x00000004
+#define IDSI_FLAG_TUNNEL 0x00000008
+
+BOOLAPI InternetTimeFromSystemTimeA(const SYSTEMTIME *,DWORD ,LPSTR ,DWORD);
+BOOLAPI InternetTimeFromSystemTimeW(const SYSTEMTIME *,DWORD ,LPWSTR ,DWORD);
+#define InternetTimeFromSystemTime WINELIB_NAME_AW(InternetTimeFromSystemTime)
+
+#define INTERNET_RFC1123_FORMAT 0
+#define INTERNET_RFC1123_BUFSIZE 30
+
+BOOLAPI InternetTimeToSystemTimeA(LPCSTR ,SYSTEMTIME *,DWORD);
+BOOLAPI InternetTimeToSystemTimeW(LPCWSTR ,SYSTEMTIME *,DWORD);
+#define InternetTimeToSystemTime WINELIB_NAME_AW(InternetTimeToSystemTime)
+
+BOOLAPI InternetCrackUrlA(LPCSTR ,DWORD ,DWORD ,LPURL_COMPONENTSA);
+BOOLAPI InternetCrackUrlW(LPCWSTR ,DWORD ,DWORD ,LPURL_COMPONENTSW);
+#define InternetCrackUrl WINELIB_NAME_AW(InternetCrackUrl)
+
+BOOLAPI InternetCreateUrlA(LPURL_COMPONENTSA ,DWORD ,LPSTR ,LPDWORD);
+BOOLAPI InternetCreateUrlW(LPURL_COMPONENTSW ,DWORD ,LPWSTR ,LPDWORD);
+#define InternetCreateUrl WINELIB_NAME_AW(InternetCreateUrl)
+
+BOOLAPI InternetCanonicalizeUrlA(LPCSTR ,LPSTR ,LPDWORD ,DWORD);
+BOOLAPI InternetCanonicalizeUrlW(LPCWSTR ,LPWSTR ,LPDWORD ,DWORD);
+#define InternetCanonicalizeUrl WINELIB_NAME_AW(InternetCanonicalizeUrl)
+
+BOOLAPI InternetCombineUrlA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD ,DWORD);
+BOOLAPI InternetCombineUrlW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD ,DWORD);
+#define InternetCombineUrl WINELIB_NAME_AW(InternetCombineUrl)
+
+#define ICU_ESCAPE 0x80000000
+#define ICU_USERNAME 0x40000000
+#define ICU_NO_ENCODE 0x20000000
+#define ICU_DECODE 0x10000000
+#define ICU_NO_META 0x08000000
+#define ICU_ENCODE_SPACES_ONLY 0x04000000
+#define ICU_BROWSER_MODE 0x02000000
+#define ICU_ENCODE_PERCENT 0x00001000
+
+INTERNETAPI HINTERNET WINAPI InternetOpenA(LPCSTR ,DWORD ,LPCSTR ,LPCSTR ,DWORD);
+INTERNETAPI HINTERNET WINAPI InternetOpenW(LPCWSTR ,DWORD ,LPCWSTR ,LPCWSTR ,DWORD);
+#define InternetOpen WINELIB_NAME_AW(InternetOpen)
+
+#define INTERNET_OPEN_TYPE_PRECONFIG 0
+#define INTERNET_OPEN_TYPE_DIRECT 1
+#define INTERNET_OPEN_TYPE_PROXY 3
+#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4
+#define PRE_CONFIG_INTERNET_ACCESS INTERNET_OPEN_TYPE_PRECONFIG
+#define LOCAL_INTERNET_ACCESS INTERNET_OPEN_TYPE_DIRECT
+#define CERN_PROXY_INTERNET_ACCESS INTERNET_OPEN_TYPE_PROXY
+
+BOOLAPI InternetCloseHandle(HINTERNET);
+
+INTERNETAPI HINTERNET WINAPI InternetConnectA(HINTERNET ,LPCSTR ,INTERNET_PORT ,
+ LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR );
+INTERNETAPI HINTERNET WINAPI InternetConnectW(HINTERNET ,LPCWSTR ,INTERNET_PORT ,
+ LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR );
+#define InternetConnect WINELIB_NAME_AW(InternetConnect)
+
+#define INTERNET_SERVICE_URL 0
+#define INTERNET_SERVICE_FTP 1
+#define INTERNET_SERVICE_GOPHER 2
+#define INTERNET_SERVICE_HTTP 3
+
+#define InternetConnectUrl(hInternet,lpszUrl,dwFlags,dwContext) \
+ InternetConnect(hInternet,\
+ lpszUrl,\
+ INTERNET_INVALID_PORT_NUMBER,\
+ NULL,\
+ NULL,\
+ INTERNET_SERVICE_URL,\
+ dwFlags,\
+ dwContext \
+ )
+
+INTERNETAPI HINTERNET WINAPI InternetOpenUrlA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI InternetOpenUrlW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR);
+#define InternetOpenUrl WINELIB_NAME_AW(InternetOpenUrl)
+
+BOOLAPI InternetReadFile( HINTERNET ,LPVOID ,DWORD ,LPDWORD );
+INTERNETAPI BOOL WINAPI InternetReadFileExA( HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR );
+INTERNETAPI BOOL WINAPI InternetReadFileExW( HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR );
+#define InternetReadFileEx WINELIB_NAME_AW(InternetReadFileEx)
+
+#define IRF_ASYNC WININET_API_FLAG_ASYNC
+#define IRF_SYNC WININET_API_FLAG_SYNC
+#define IRF_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
+#define IRF_NO_WAIT 0x00000008
+
+INTERNETAPI DWORD WINAPI InternetSetFilePointer(HINTERNET ,LONG ,PVOID ,DWORD ,DWORD_PTR);
+BOOLAPI InternetWriteFile(HINTERNET ,LPCVOID ,DWORD ,LPDWORD);
+BOOLAPI InternetQueryDataAvailable(HINTERNET ,LPDWORD ,DWORD ,DWORD_PTR);
+BOOLAPI InternetFindNextFileA(HINTERNET ,LPVOID);
+BOOLAPI InternetFindNextFileW(HINTERNET ,LPVOID);
+#define InternetFindNextFile WINELIB_NAME_AW(InternetFindNextFile)
+
+BOOLAPI InternetQueryOptionA(HINTERNET ,DWORD ,LPVOID ,LPDWORD);
+BOOLAPI InternetQueryOptionW(HINTERNET ,DWORD ,LPVOID ,LPDWORD);
+#define InternetQueryOption WINELIB_NAME_AW(InternetQueryOption)
+
+BOOLAPI InternetSetOptionA(HINTERNET ,DWORD ,LPVOID ,DWORD);
+BOOLAPI InternetSetOptionW(HINTERNET ,DWORD ,LPVOID ,DWORD);
+#define InternetSetOption WINELIB_NAME_AW(InternetSetOption)
+
+BOOLAPI InternetSetOptionExA(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD);
+BOOLAPI InternetSetOptionExW(HINTERNET ,DWORD ,LPVOID ,DWORD ,DWORD);
+#define InternetSetOptionEx WINELIB_NAME_AW(InternetSetOptionEx)
+
+BOOLAPI InternetLockRequestFile(HINTERNET ,HANDLE *);
+BOOLAPI InternetUnlockRequestFile(HANDLE);
+
+#define ISO_GLOBAL 0x00000001
+#define ISO_REGISTRY 0x00000002
+
+#define ISO_VALID_FLAGS (ISO_GLOBAL | ISO_REGISTRY)
+#define INTERNET_OPTION_CALLBACK 1
+#define INTERNET_OPTION_CONNECT_TIMEOUT 2
+#define INTERNET_OPTION_CONNECT_RETRIES 3
+#define INTERNET_OPTION_CONNECT_BACKOFF 4
+#define INTERNET_OPTION_SEND_TIMEOUT 5
+#define INTERNET_OPTION_CONTROL_SEND_TIMEOUT INTERNET_OPTION_SEND_TIMEOUT
+#define INTERNET_OPTION_RECEIVE_TIMEOUT 6
+#define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT INTERNET_OPTION_RECEIVE_TIMEOUT
+#define INTERNET_OPTION_DATA_SEND_TIMEOUT 7
+#define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8
+#define INTERNET_OPTION_HANDLE_TYPE 9
+#define INTERNET_OPTION_LISTEN_TIMEOUT 11
+#define INTERNET_OPTION_READ_BUFFER_SIZE 12
+#define INTERNET_OPTION_WRITE_BUFFER_SIZE 13
+#define INTERNET_OPTION_ASYNC_ID 15
+#define INTERNET_OPTION_ASYNC_PRIORITY 16
+#define INTERNET_OPTION_PARENT_HANDLE 21
+#define INTERNET_OPTION_KEEP_CONNECTION 22
+#define INTERNET_OPTION_REQUEST_FLAGS 23
+#define INTERNET_OPTION_EXTENDED_ERROR 24
+#define INTERNET_OPTION_OFFLINE_MODE 26
+#define INTERNET_OPTION_CACHE_STREAM_HANDLE 27
+#define INTERNET_OPTION_USERNAME 28
+#define INTERNET_OPTION_PASSWORD 29
+#define INTERNET_OPTION_ASYNC 30
+#define INTERNET_OPTION_SECURITY_FLAGS 31
+#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32
+#define INTERNET_OPTION_DATAFILE_NAME 33
+#define INTERNET_OPTION_URL 34
+#define INTERNET_OPTION_SECURITY_CERTIFICATE 35
+#define INTERNET_OPTION_SECURITY_KEY_BITNESS 36
+#define INTERNET_OPTION_REFRESH 37
+#define INTERNET_OPTION_PROXY 38
+#define INTERNET_OPTION_SETTINGS_CHANGED 39
+#define INTERNET_OPTION_VERSION 40
+#define INTERNET_OPTION_USER_AGENT 41
+#define INTERNET_OPTION_END_BROWSER_SESSION 42
+#define INTERNET_OPTION_PROXY_USERNAME 43
+#define INTERNET_OPTION_PROXY_PASSWORD 44
+#define INTERNET_OPTION_CONTEXT_VALUE 45
+#define INTERNET_OPTION_CONNECT_LIMIT 46
+#define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47
+#define INTERNET_OPTION_POLICY 48
+#define INTERNET_OPTION_DISCONNECTED_TIMEOUT 49
+#define INTERNET_OPTION_CONNECTED_STATE 50
+#define INTERNET_OPTION_IDLE_STATE 51
+#define INTERNET_OPTION_OFFLINE_SEMANTICS 52
+#define INTERNET_OPTION_SECONDARY_CACHE_KEY 53
+#define INTERNET_OPTION_CALLBACK_FILTER 54
+#define INTERNET_OPTION_CONNECT_TIME 55
+#define INTERNET_OPTION_SEND_THROUGHPUT 56
+#define INTERNET_OPTION_RECEIVE_THROUGHPUT 57
+#define INTERNET_OPTION_REQUEST_PRIORITY 58
+#define INTERNET_OPTION_HTTP_VERSION 59
+#define INTERNET_OPTION_RESET_URLCACHE_SESSION 60
+#define INTERNET_OPTION_ERROR_MASK 62
+#define INTERNET_OPTION_FROM_CACHE_TIMEOUT 63
+#define INTERNET_OPTION_BYPASS_EDITED_ENTRY 64
+#define INTERNET_OPTION_HTTP_DECODING 65
+#define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO 67
+#define INTERNET_OPTION_CODEPAGE 68
+#define INTERNET_OPTION_CACHE_TIMESTAMPS 69
+#define INTERNET_OPTION_DISABLE_AUTODIAL 70
+#define INTERNET_OPTION_MAX_CONNS_PER_SERVER 73
+#define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74
+#define INTERNET_OPTION_PER_CONNECTION_OPTION 75
+#define INTERNET_OPTION_DIGEST_AUTH_UNLOAD 76
+#define INTERNET_OPTION_IGNORE_OFFLINE 77
+#define INTERNET_OPTION_IDENTITY 78
+#define INTERNET_OPTION_REMOVE_IDENTITY 79
+#define INTERNET_OPTION_ALTER_IDENTITY 80
+#define INTERNET_OPTION_SUPPRESS_BEHAVIOR 81
+#define INTERNET_OPTION_AUTODIAL_MODE 82
+#define INTERNET_OPTION_AUTODIAL_CONNECTION 83
+#define INTERNET_OPTION_CLIENT_CERT_CONTEXT 84
+#define INTERNET_OPTION_AUTH_FLAGS 85
+#define INTERNET_OPTION_COOKIES_3RD_PARTY 86
+#define INTERNET_OPTION_DISABLE_PASSPORT_AUTH 87
+#define INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY 88
+#define INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT 89
+#define INTERNET_OPTION_ENABLE_PASSPORT_AUTH 90
+
+#define INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS 91
+#define INTERNET_OPTION_ACTIVATE_WORKER_THREADS 92
+#define INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS 93
+#define INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH 94
+
+#define INTERNET_OPTION_PROXY_SETTINGS_CHANGED 95
+#define INTERNET_OPTION_DATAFILE_EXT 96
+
+#define INTERNET_OPTION_CODEPAGE_PATH 100
+#define INTERNET_OPTION_CODEPAGE_EXTRA 101
+#define INTERNET_OPTION_IDN 102
+#define INTERNET_OPTION_MAX_CONNS_PER_PROXY 103
+#define INTERNET_OPTION_SUPPRESS_SERVER_AUTH 104
+#define INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT 105
+
+
+#define INTERNET_FIRST_OPTION INTERNET_OPTION_CALLBACK
+#define INTERNET_LAST_OPTION INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT
+
+#define INTERNET_PRIORITY_FOREGROUND 1000
+#define INTERNET_HANDLE_TYPE_INTERNET 1
+#define INTERNET_HANDLE_TYPE_CONNECT_FTP 2
+#define INTERNET_HANDLE_TYPE_CONNECT_GOPHER 3
+#define INTERNET_HANDLE_TYPE_CONNECT_HTTP 4
+#define INTERNET_HANDLE_TYPE_FTP_FIND 5
+#define INTERNET_HANDLE_TYPE_FTP_FIND_HTML 6
+#define INTERNET_HANDLE_TYPE_FTP_FILE 7
+#define INTERNET_HANDLE_TYPE_FTP_FILE_HTML 8
+#define INTERNET_HANDLE_TYPE_GOPHER_FIND 9
+#define INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML 10
+#define INTERNET_HANDLE_TYPE_GOPHER_FILE 11
+#define INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML 12
+#define INTERNET_HANDLE_TYPE_HTTP_REQUEST 13
+#define SECURITY_FLAG_SECURE 0x00000001
+#define SECURITY_FLAG_STRENGTH_WEAK 0x10000000
+#define SECURITY_FLAG_STRENGTH_MEDIUM 0x40000000
+#define SECURITY_FLAG_STRENGTH_STRONG 0x20000000
+#define SECURITY_FLAG_UNKNOWNBIT 0x80000000
+#define SECURITY_FLAG_NORMALBITNESS SECURITY_FLAG_STRENGTH_WEAK
+#define SECURITY_FLAG_SSL 0x00000002
+#define SECURITY_FLAG_SSL3 0x00000004
+#define SECURITY_FLAG_PCT 0x00000008
+#define SECURITY_FLAG_PCT4 0x00000010
+#define SECURITY_FLAG_IETFSSL4 0x00000020
+#define SECURITY_FLAG_40BIT SECURITY_FLAG_STRENGTH_WEAK
+#define SECURITY_FLAG_128BIT SECURITY_FLAG_STRENGTH_STRONG
+#define SECURITY_FLAG_56BIT SECURITY_FLAG_STRENGTH_MEDIUM
+#define SECURITY_FLAG_IGNORE_REVOCATION 0x00000080
+#define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x00000100
+#define SECURITY_FLAG_IGNORE_WRONG_USAGE 0x00000200
+#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID INTERNET_FLAG_IGNORE_CERT_CN_INVALID
+#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
+#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
+#define SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP
+#define SECURITY_SET_MASK (SECURITY_FLAG_IGNORE_REVOCATION |\
+ SECURITY_FLAG_IGNORE_UNKNOWN_CA |\
+ SECURITY_FLAG_IGNORE_CERT_CN_INVALID |\
+ SECURITY_FLAG_IGNORE_CERT_DATE_INVALID |\
+ SECURITY_FLAG_IGNORE_WRONG_USAGE)
+
+
+
+BOOLAPI InternetGetLastResponseInfoA(LPDWORD ,LPSTR ,LPDWORD);
+BOOLAPI InternetGetLastResponseInfoW(LPDWORD ,LPWSTR ,LPDWORD);
+#define InternetGetLastResponseInfo WINELIB_NAME_AW(InternetGetLastResponseInfo)
+
+typedef VOID (CALLBACK *INTERNET_STATUS_CALLBACK)(HINTERNET ,DWORD_PTR ,DWORD ,
+ LPVOID ,DWORD);
+
+typedef INTERNET_STATUS_CALLBACK * LPINTERNET_STATUS_CALLBACK;
+
+INTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackA(HINTERNET ,INTERNET_STATUS_CALLBACK);
+INTERNETAPI INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackW(HINTERNET ,INTERNET_STATUS_CALLBACK);
+#define InternetSetStatusCallback WINELIB_NAME_AW(InternetSetStatusCallback)
+
+#define INTERNET_STATUS_RESOLVING_NAME 10
+#define INTERNET_STATUS_NAME_RESOLVED 11
+#define INTERNET_STATUS_CONNECTING_TO_SERVER 20
+#define INTERNET_STATUS_CONNECTED_TO_SERVER 21
+#define INTERNET_STATUS_SENDING_REQUEST 30
+#define INTERNET_STATUS_REQUEST_SENT 31
+#define INTERNET_STATUS_RECEIVING_RESPONSE 40
+#define INTERNET_STATUS_RESPONSE_RECEIVED 41
+#define INTERNET_STATUS_CTL_RESPONSE_RECEIVED 42
+#define INTERNET_STATUS_PREFETCH 43
+#define INTERNET_STATUS_CLOSING_CONNECTION 50
+#define INTERNET_STATUS_CONNECTION_CLOSED 51
+#define INTERNET_STATUS_HANDLE_CREATED 60
+#define INTERNET_STATUS_HANDLE_CLOSING 70
+#define INTERNET_STATUS_DETECTING_PROXY 80
+#define INTERNET_STATUS_REQUEST_COMPLETE 100
+#define INTERNET_STATUS_REDIRECT 110
+#define INTERNET_STATUS_INTERMEDIATE_RESPONSE 120
+#define INTERNET_STATUS_USER_INPUT_REQUIRED 140
+#define INTERNET_STATUS_STATE_CHANGE 200
+#define INTERNET_STATUS_COOKIE_SENT 320
+#define INTERNET_STATUS_COOKIE_RECEIVED 321
+#define INTERNET_STATUS_PRIVACY_IMPACTED 324
+#define INTERNET_STATUS_P3P_HEADER 325
+#define INTERNET_STATUS_P3P_POLICYREF 326
+#define INTERNET_STATUS_COOKIE_HISTORY 327
+#define INTERNET_STATE_CONNECTED 0x00000001
+#define INTERNET_STATE_DISCONNECTED 0x00000002
+#define INTERNET_STATE_DISCONNECTED_BY_USER 0x00000010
+#define INTERNET_STATE_IDLE 0x00000100
+#define INTERNET_STATE_BUSY 0x00000200
+
+#define INTERNET_INVALID_STATUS_CALLBACK ((INTERNET_STATUS_CALLBACK)(-1))
+
+#define FTP_TRANSFER_TYPE_UNKNOWN 0x00000000
+#define FTP_TRANSFER_TYPE_ASCII 0x00000001
+#define FTP_TRANSFER_TYPE_BINARY 0x00000002
+#define FTP_TRANSFER_TYPE_MASK (FTP_TRANSFER_TYPE_ASCII | FTP_TRANSFER_TYPE_BINARY)
+
+BOOLAPI FtpCommandA(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET *);
+BOOLAPI FtpCommandW(HINTERNET, BOOL, DWORD, LPCWSTR, DWORD_PTR, HINTERNET *);
+#define FtpCommand WINELIB_NAME_AW(FtpCommand)
+
+INTERNETAPI HINTERNET WINAPI FtpFindFirstFileA(HINTERNET ,LPCSTR ,
+ LPWIN32_FIND_DATAA ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI FtpFindFirstFileW(HINTERNET ,LPCWSTR ,
+ LPWIN32_FIND_DATAW ,DWORD ,DWORD_PTR);
+#define FtpFindFirstFile WINELIB_NAME_AW(FtpFindFirstFile)
+
+BOOLAPI FtpGetFileA(HINTERNET ,LPCSTR ,LPCSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR);
+BOOLAPI FtpGetFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,BOOL ,DWORD ,DWORD ,DWORD_PTR);
+#define FtpGetFile WINELIB_NAME_AW(FtpGetFile)
+
+DWORD WINAPI FtpGetFileSize(HINTERNET, LPDWORD);
+
+BOOLAPI FtpPutFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR);
+BOOLAPI FtpPutFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR);
+#define FtpPutFile WINELIB_NAME_AW(FtpPutFile)
+
+BOOLAPI FtpDeleteFileA(HINTERNET ,LPCSTR);
+BOOLAPI FtpDeleteFileW(HINTERNET ,LPCWSTR);
+#define FtpDeleteFile WINELIB_NAME_AW(FtpDeleteFile)
+
+BOOLAPI FtpRenameFileA(HINTERNET ,LPCSTR ,LPCSTR);
+BOOLAPI FtpRenameFileW(HINTERNET ,LPCWSTR ,LPCWSTR);
+#define FtpRenameFile WINELIB_NAME_AW(FtpRenameFile)
+
+INTERNETAPI HINTERNET WINAPI FtpOpenFileA(HINTERNET ,LPCSTR ,DWORD ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI FtpOpenFileW(HINTERNET ,LPCWSTR ,DWORD ,DWORD ,DWORD_PTR);
+#define FtpOpenFile WINELIB_NAME_AW(FtpOpenFile)
+
+BOOLAPI FtpCreateDirectoryA(HINTERNET ,LPCSTR);
+BOOLAPI FtpCreateDirectoryW(HINTERNET ,LPCWSTR);
+#define FtpCreateDirectory WINELIB_NAME_AW(FtpCreateDirectory)
+
+BOOLAPI FtpRemoveDirectoryA(HINTERNET ,LPCSTR);
+BOOLAPI FtpRemoveDirectoryW(HINTERNET ,LPCWSTR);
+#define FtpRemoveDirectory WINELIB_NAME_AW(FtpRemoveDirectory)
+
+BOOLAPI FtpSetCurrentDirectoryA(HINTERNET ,LPCSTR);
+BOOLAPI FtpSetCurrentDirectoryW(HINTERNET ,LPCWSTR);
+#define FtpSetCurrentDirectory WINELIB_NAME_AW(FtpSetCurrentDirectory)
+
+BOOLAPI FtpGetCurrentDirectoryA(HINTERNET ,LPSTR ,LPDWORD);
+BOOLAPI FtpGetCurrentDirectoryW(HINTERNET ,LPWSTR ,LPDWORD);
+#define FtpGetCurrentDirectory WINELIB_NAME_AW(FtpGetCurrentDirectory)
+
+#define MAX_GOPHER_DISPLAY_TEXT 128
+#define MAX_GOPHER_SELECTOR_TEXT 256
+#define MAX_GOPHER_HOST_NAME INTERNET_MAX_HOST_NAME_LENGTH
+#define MAX_GOPHER_LOCATOR_LENGTH (1 \
+ + MAX_GOPHER_DISPLAY_TEXT \
+ + 1 \
+ + MAX_GOPHER_SELECTOR_TEXT \
+ + 1 \
+ + MAX_GOPHER_HOST_NAME \
+ + 1 \
+ + INTERNET_MAX_PORT_NUMBER_LENGTH \
+ + 1 \
+ + 1 \
+ + 2 \
+ )
+
+
+typedef struct {
+ CHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
+ DWORD GopherType;
+ DWORD SizeLow;
+ DWORD SizeHigh;
+ FILETIME LastModificationTime;
+ CHAR Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
+} GOPHER_FIND_DATAA,* LPGOPHER_FIND_DATAA;
+
+typedef struct {
+ WCHAR DisplayString[MAX_GOPHER_DISPLAY_TEXT + 1];
+ DWORD GopherType;
+ DWORD SizeLow;
+ DWORD SizeHigh;
+ FILETIME LastModificationTime;
+ WCHAR Locator[MAX_GOPHER_LOCATOR_LENGTH + 1];
+} GOPHER_FIND_DATAW,* LPGOPHER_FIND_DATAW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_FIND_DATA)
+DECL_WINELIB_TYPE_AW(LPGOPHER_FIND_DATA)
+
+#define GOPHER_TYPE_TEXT_FILE 0x00000001
+#define GOPHER_TYPE_DIRECTORY 0x00000002
+#define GOPHER_TYPE_CSO 0x00000004
+#define GOPHER_TYPE_ERROR 0x00000008
+#define GOPHER_TYPE_MAC_BINHEX 0x00000010
+#define GOPHER_TYPE_DOS_ARCHIVE 0x00000020
+#define GOPHER_TYPE_UNIX_UUENCODED 0x00000040
+#define GOPHER_TYPE_INDEX_SERVER 0x00000080
+#define GOPHER_TYPE_TELNET 0x00000100
+#define GOPHER_TYPE_BINARY 0x00000200
+#define GOPHER_TYPE_REDUNDANT 0x00000400
+#define GOPHER_TYPE_TN3270 0x00000800
+#define GOPHER_TYPE_GIF 0x00001000
+#define GOPHER_TYPE_IMAGE 0x00002000
+#define GOPHER_TYPE_BITMAP 0x00004000
+#define GOPHER_TYPE_MOVIE 0x00008000
+#define GOPHER_TYPE_SOUND 0x00010000
+#define GOPHER_TYPE_HTML 0x00020000
+#define GOPHER_TYPE_PDF 0x00040000
+#define GOPHER_TYPE_CALENDAR 0x00080000
+#define GOPHER_TYPE_INLINE 0x00100000
+#define GOPHER_TYPE_UNKNOWN 0x20000000
+#define GOPHER_TYPE_ASK 0x40000000
+#define GOPHER_TYPE_GOPHER_PLUS 0x80000000
+
+#define IS_GOPHER_FILE(type) (BOOL)(((type) & GOPHER_TYPE_FILE_MASK) != 0)
+#define IS_GOPHER_DIRECTORY(type) (BOOL)(((type) & GOPHER_TYPE_DIRECTORY) != 0)
+#define IS_GOPHER_PHONE_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_CSO) != 0)
+#define IS_GOPHER_ERROR(type) (BOOL)(((type) & GOPHER_TYPE_ERROR) != 0)
+#define IS_GOPHER_INDEX_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_INDEX_SERVER) != 0)
+#define IS_GOPHER_TELNET_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TELNET) != 0)
+#define IS_GOPHER_BACKUP_SERVER(type) (BOOL)(((type) & GOPHER_TYPE_REDUNDANT) != 0)
+#define IS_GOPHER_TN3270_SESSION(type) (BOOL)(((type) & GOPHER_TYPE_TN3270) != 0)
+#define IS_GOPHER_ASK(type) (BOOL)(((type) & GOPHER_TYPE_ASK) != 0)
+#define IS_GOPHER_PLUS(type) (BOOL)(((type) & GOPHER_TYPE_GOPHER_PLUS) != 0)
+#define IS_GOPHER_TYPE_KNOWN(type) (BOOL)(!((type) & GOPHER_TYPE_UNKNOWN))
+#define GOPHER_TYPE_FILE_MASK (GOPHER_TYPE_TEXT_FILE \
+ | GOPHER_TYPE_MAC_BINHEX \
+ | GOPHER_TYPE_DOS_ARCHIVE \
+ | GOPHER_TYPE_UNIX_UUENCODED \
+ | GOPHER_TYPE_BINARY \
+ | GOPHER_TYPE_GIF \
+ | GOPHER_TYPE_IMAGE \
+ | GOPHER_TYPE_BITMAP \
+ | GOPHER_TYPE_MOVIE \
+ | GOPHER_TYPE_SOUND \
+ | GOPHER_TYPE_HTML \
+ | GOPHER_TYPE_PDF \
+ | GOPHER_TYPE_CALENDAR \
+ | GOPHER_TYPE_INLINE \
+ )
+
+
+typedef struct {
+ LPCSTR Comment;
+ LPCSTR EmailAddress;
+} GOPHER_ADMIN_ATTRIBUTE_TYPEA,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Comment;
+ LPCWSTR EmailAddress;
+} GOPHER_ADMIN_ATTRIBUTE_TYPEW,* LPGOPHER_ADMIN_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ADMIN_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ADMIN_ATTRIBUTE_TYPE)
+
+typedef struct {
+ FILETIME DateAndTime;
+} GOPHER_MOD_DATE_ATTRIBUTE_TYPE,* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE;
+
+typedef struct {
+ DWORD Ttl;
+} GOPHER_TTL_ATTRIBUTE_TYPE,* LPGOPHER_TTL_ATTRIBUTE_TYPE;
+
+typedef struct {
+ INT Score;
+} GOPHER_SCORE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_ATTRIBUTE_TYPE;
+
+typedef struct {
+ INT LowerBound;
+ INT UpperBound;
+} GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE,* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;
+
+typedef struct {
+ LPCSTR Site;
+} GOPHER_SITE_ATTRIBUTE_TYPEA,* LPGOPHER_SITE_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Site;
+} GOPHER_SITE_ATTRIBUTE_TYPEW,* LPGOPHER_SITE_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_SITE_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_SITE_ATTRIBUTE_TYPE)
+
+typedef struct {
+ LPCSTR Organization;
+} GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Organization;
+} GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW,* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ORGANIZATION_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE)
+
+typedef struct {
+ LPCSTR Location;
+} GOPHER_LOCATION_ATTRIBUTE_TYPEA,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Location;
+} GOPHER_LOCATION_ATTRIBUTE_TYPEW,* LPGOPHER_LOCATION_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_LOCATION_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_LOCATION_ATTRIBUTE_TYPE)
+
+typedef struct {
+ INT DegreesNorth;
+ INT MinutesNorth;
+ INT SecondsNorth;
+ INT DegreesEast;
+ INT MinutesEast;
+ INT SecondsEast;
+} GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE,* LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
+
+typedef struct {
+ INT Zone;
+} GOPHER_TIMEZONE_ATTRIBUTE_TYPE,* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE;
+
+typedef struct {
+ LPCSTR Provider;
+} GOPHER_PROVIDER_ATTRIBUTE_TYPEA,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Provider;
+} GOPHER_PROVIDER_ATTRIBUTE_TYPEW,* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_PROVIDER_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_PROVIDER_ATTRIBUTE_TYPE)
+
+typedef struct {
+ LPCSTR Version;
+} GOPHER_VERSION_ATTRIBUTE_TYPEA,* LPGOPHER_VERSION_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Version;
+} GOPHER_VERSION_ATTRIBUTE_TYPEW,* LPGOPHER_VERSION_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_VERSION_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_VERSION_ATTRIBUTE_TYPE)
+
+typedef struct {
+ LPCSTR ShortAbstract;
+ LPCSTR AbstractFile;
+} GOPHER_ABSTRACT_ATTRIBUTE_TYPEA,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR ShortAbstract;
+ LPCWSTR AbstractFile;
+} GOPHER_ABSTRACT_ATTRIBUTE_TYPEW,* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ABSTRACT_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE)
+
+typedef struct {
+ LPCSTR ContentType;
+ LPCSTR Language;
+ DWORD Size;
+} GOPHER_VIEW_ATTRIBUTE_TYPEA,* LPGOPHER_VIEW_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR ContentType;
+ LPCWSTR Language;
+ DWORD Size;
+} GOPHER_VIEW_ATTRIBUTE_TYPEW,* LPGOPHER_VIEW_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_VIEW_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_VIEW_ATTRIBUTE_TYPE)
+
+typedef struct {
+ BOOL TreeWalk;
+} GOPHER_VERONICA_ATTRIBUTE_TYPE,* LPGOPHER_VERONICA_ATTRIBUTE_TYPE;
+
+typedef struct {
+ LPCSTR QuestionType;
+ LPCSTR QuestionText;
+} GOPHER_ASK_ATTRIBUTE_TYPEA,* LPGOPHER_ASK_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR QuestionType;
+ LPCWSTR QuestionText;
+} GOPHER_ASK_ATTRIBUTE_TYPEW,* LPGOPHER_ASK_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ASK_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ASK_ATTRIBUTE_TYPE)
+
+typedef struct {
+ LPCSTR Text;
+} GOPHER_UNKNOWN_ATTRIBUTE_TYPEA,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ LPCWSTR Text;
+} GOPHER_UNKNOWN_ATTRIBUTE_TYPEW,* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_UNKNOWN_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE)
+
+typedef struct {
+ DWORD CategoryId;
+ DWORD AttributeId;
+ union {
+ GOPHER_ADMIN_ATTRIBUTE_TYPEA Admin;
+ GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
+ GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
+ GOPHER_SCORE_ATTRIBUTE_TYPE Score;
+ GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
+ GOPHER_SITE_ATTRIBUTE_TYPEA Site;
+ GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA Organization;
+ GOPHER_LOCATION_ATTRIBUTE_TYPEA Location;
+ GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
+ GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
+ GOPHER_PROVIDER_ATTRIBUTE_TYPEA Provider;
+ GOPHER_VERSION_ATTRIBUTE_TYPEA Version;
+ GOPHER_ABSTRACT_ATTRIBUTE_TYPEA Abstract;
+ GOPHER_VIEW_ATTRIBUTE_TYPEA View;
+ GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
+ GOPHER_ASK_ATTRIBUTE_TYPEA Ask;
+ GOPHER_UNKNOWN_ATTRIBUTE_TYPEA Unknown;
+ } AttributeType;
+} GOPHER_ATTRIBUTE_TYPEA, *LPGOPHER_ATTRIBUTE_TYPEA;
+
+typedef struct {
+ DWORD CategoryId;
+ DWORD AttributeId;
+ union {
+ GOPHER_ADMIN_ATTRIBUTE_TYPEW Admin;
+ GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate;
+ GOPHER_TTL_ATTRIBUTE_TYPE Ttl;
+ GOPHER_SCORE_ATTRIBUTE_TYPE Score;
+ GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange;
+ GOPHER_SITE_ATTRIBUTE_TYPEW Site;
+ GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW Organization;
+ GOPHER_LOCATION_ATTRIBUTE_TYPEW Location;
+ GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation;
+ GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone;
+ GOPHER_PROVIDER_ATTRIBUTE_TYPEW Provider;
+ GOPHER_VERSION_ATTRIBUTE_TYPEW Version;
+ GOPHER_ABSTRACT_ATTRIBUTE_TYPEW Abstract;
+ GOPHER_VIEW_ATTRIBUTE_TYPEW View;
+ GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica;
+ GOPHER_ASK_ATTRIBUTE_TYPEW Ask;
+ GOPHER_UNKNOWN_ATTRIBUTE_TYPEW Unknown;
+ } AttributeType;
+} GOPHER_ATTRIBUTE_TYPEW, *LPGOPHER_ATTRIBUTE_TYPEW;
+
+DECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_TYPE)
+DECL_WINELIB_TYPE_AW(LPGOPHER_ATTRIBUTE_TYPE)
+
+#define MAX_GOPHER_CATEGORY_NAME 128
+#define MAX_GOPHER_ATTRIBUTE_NAME 128
+#define MIN_GOPHER_ATTRIBUTE_LENGTH 256
+
+#define GOPHER_INFO_CATEGORY TEXT("+INFO")
+#define GOPHER_ADMIN_CATEGORY TEXT("+ADMIN")
+#define GOPHER_VIEWS_CATEGORY TEXT("+VIEWS")
+#define GOPHER_ABSTRACT_CATEGORY TEXT("+ABSTRACT")
+#define GOPHER_VERONICA_CATEGORY TEXT("+VERONICA")
+#define GOPHER_ADMIN_ATTRIBUTE TEXT("Admin")
+#define GOPHER_MOD_DATE_ATTRIBUTE TEXT("Mod-Date")
+#define GOPHER_TTL_ATTRIBUTE TEXT("TTL")
+#define GOPHER_SCORE_ATTRIBUTE TEXT("Score")
+#define GOPHER_RANGE_ATTRIBUTE TEXT("Score-range")
+#define GOPHER_SITE_ATTRIBUTE TEXT("Site")
+#define GOPHER_ORG_ATTRIBUTE TEXT("Org")
+#define GOPHER_LOCATION_ATTRIBUTE TEXT("Loc")
+#define GOPHER_GEOG_ATTRIBUTE TEXT("Geog")
+#define GOPHER_TIMEZONE_ATTRIBUTE TEXT("TZ")
+#define GOPHER_PROVIDER_ATTRIBUTE TEXT("Provider")
+#define GOPHER_VERSION_ATTRIBUTE TEXT("Version")
+#define GOPHER_ABSTRACT_ATTRIBUTE TEXT("Abstract")
+#define GOPHER_VIEW_ATTRIBUTE TEXT("View")
+#define GOPHER_TREEWALK_ATTRIBUTE TEXT("treewalk")
+
+#define GOPHER_ATTRIBUTE_ID_BASE 0xabcccc00
+
+#define GOPHER_CATEGORY_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 1)
+#define GOPHER_CATEGORY_ID_INFO (GOPHER_ATTRIBUTE_ID_BASE + 2)
+#define GOPHER_CATEGORY_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 3)
+#define GOPHER_CATEGORY_ID_VIEWS (GOPHER_ATTRIBUTE_ID_BASE + 4)
+#define GOPHER_CATEGORY_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 5)
+#define GOPHER_CATEGORY_ID_VERONICA (GOPHER_ATTRIBUTE_ID_BASE + 6)
+#define GOPHER_CATEGORY_ID_ASK (GOPHER_ATTRIBUTE_ID_BASE + 7)
+#define GOPHER_CATEGORY_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 8)
+
+#define GOPHER_ATTRIBUTE_ID_ALL (GOPHER_ATTRIBUTE_ID_BASE + 9)
+#define GOPHER_ATTRIBUTE_ID_ADMIN (GOPHER_ATTRIBUTE_ID_BASE + 10)
+#define GOPHER_ATTRIBUTE_ID_MOD_DATE (GOPHER_ATTRIBUTE_ID_BASE + 11)
+#define GOPHER_ATTRIBUTE_ID_TTL (GOPHER_ATTRIBUTE_ID_BASE + 12)
+#define GOPHER_ATTRIBUTE_ID_SCORE (GOPHER_ATTRIBUTE_ID_BASE + 13)
+#define GOPHER_ATTRIBUTE_ID_RANGE (GOPHER_ATTRIBUTE_ID_BASE + 14)
+#define GOPHER_ATTRIBUTE_ID_SITE (GOPHER_ATTRIBUTE_ID_BASE + 15)
+#define GOPHER_ATTRIBUTE_ID_ORG (GOPHER_ATTRIBUTE_ID_BASE + 16)
+#define GOPHER_ATTRIBUTE_ID_LOCATION (GOPHER_ATTRIBUTE_ID_BASE + 17)
+#define GOPHER_ATTRIBUTE_ID_GEOG (GOPHER_ATTRIBUTE_ID_BASE + 18)
+#define GOPHER_ATTRIBUTE_ID_TIMEZONE (GOPHER_ATTRIBUTE_ID_BASE + 19)
+#define GOPHER_ATTRIBUTE_ID_PROVIDER (GOPHER_ATTRIBUTE_ID_BASE + 20)
+#define GOPHER_ATTRIBUTE_ID_VERSION (GOPHER_ATTRIBUTE_ID_BASE + 21)
+#define GOPHER_ATTRIBUTE_ID_ABSTRACT (GOPHER_ATTRIBUTE_ID_BASE + 22)
+#define GOPHER_ATTRIBUTE_ID_VIEW (GOPHER_ATTRIBUTE_ID_BASE + 23)
+#define GOPHER_ATTRIBUTE_ID_TREEWALK (GOPHER_ATTRIBUTE_ID_BASE + 24)
+#define GOPHER_ATTRIBUTE_ID_UNKNOWN (GOPHER_ATTRIBUTE_ID_BASE + 25)
+
+BOOLAPI GopherCreateLocatorA(LPCSTR ,INTERNET_PORT ,LPCSTR ,
+ LPCSTR ,DWORD ,LPSTR ,LPDWORD);
+BOOLAPI GopherCreateLocatorW(LPCWSTR ,INTERNET_PORT ,LPCWSTR ,
+ LPCWSTR ,DWORD ,LPWSTR ,LPDWORD);
+#define GopherCreateLocator WINELIB_NAME_AW(GopherCreateLocator)
+
+BOOLAPI GopherGetLocatorTypeA(LPCSTR ,LPDWORD);
+BOOLAPI GopherGetLocatorTypeW(LPCWSTR ,LPDWORD);
+#define GopherGetLocatorType WINELIB_NAME_AW(GopherGetLocatorType)
+
+INTERNETAPI HINTERNET WINAPI GopherFindFirstFileA(HINTERNET ,LPCSTR ,
+ LPCSTR ,LPGOPHER_FIND_DATAA ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI GopherFindFirstFileW(HINTERNET ,LPCWSTR ,
+ LPCWSTR ,LPGOPHER_FIND_DATAW ,DWORD ,DWORD_PTR);
+#define GopherFindFirstFile WINELIB_NAME_AW(GopherFindFirstFile)
+
+INTERNETAPI HINTERNET WINAPI GopherOpenFileA(HINTERNET ,LPCSTR ,LPCSTR ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI GopherOpenFileW(HINTERNET ,LPCWSTR ,LPCWSTR ,DWORD ,DWORD_PTR);
+#define GopherOpenFile WINELIB_NAME_AW(GopherOpenFile)
+
+typedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORA)(LPGOPHER_ATTRIBUTE_TYPEA ,DWORD);
+typedef BOOL (CALLBACK *GOPHER_ATTRIBUTE_ENUMERATORW)(LPGOPHER_ATTRIBUTE_TYPEW ,DWORD);
+
+DECL_WINELIB_TYPE_AW(GOPHER_ATTRIBUTE_ENUMERATOR)
+
+BOOLAPI GopherGetAttributeA(HINTERNET ,LPCSTR ,LPCSTR ,LPBYTE ,
+ DWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORA ,DWORD_PTR);
+BOOLAPI GopherGetAttributeW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPBYTE ,
+ DWORD ,LPDWORD ,GOPHER_ATTRIBUTE_ENUMERATORW ,DWORD_PTR);
+#define GopherGetAttribute WINELIB_NAME_AW(GopherGetAttribute)
+
+#define HTTP_MAJOR_VERSION 1
+#define HTTP_MINOR_VERSION 0
+#define HTTP_VERSION TEXT("HTTP/1.0")
+#define HTTP_QUERY_MIME_VERSION 0
+#define HTTP_QUERY_CONTENT_TYPE 1
+#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 2
+#define HTTP_QUERY_CONTENT_ID 3
+#define HTTP_QUERY_CONTENT_DESCRIPTION 4
+#define HTTP_QUERY_CONTENT_LENGTH 5
+#define HTTP_QUERY_CONTENT_LANGUAGE 6
+#define HTTP_QUERY_ALLOW 7
+#define HTTP_QUERY_PUBLIC 8
+#define HTTP_QUERY_DATE 9
+#define HTTP_QUERY_EXPIRES 10
+#define HTTP_QUERY_LAST_MODIFIED 11
+#define HTTP_QUERY_MESSAGE_ID 12
+#define HTTP_QUERY_URI 13
+#define HTTP_QUERY_DERIVED_FROM 14
+#define HTTP_QUERY_COST 15
+#define HTTP_QUERY_LINK 16
+#define HTTP_QUERY_PRAGMA 17
+#define HTTP_QUERY_VERSION 18
+#define HTTP_QUERY_STATUS_CODE 19
+#define HTTP_QUERY_STATUS_TEXT 20
+#define HTTP_QUERY_RAW_HEADERS 21
+#define HTTP_QUERY_RAW_HEADERS_CRLF 22
+#define HTTP_QUERY_CONNECTION 23
+#define HTTP_QUERY_ACCEPT 24
+#define HTTP_QUERY_ACCEPT_CHARSET 25
+#define HTTP_QUERY_ACCEPT_ENCODING 26
+#define HTTP_QUERY_ACCEPT_LANGUAGE 27
+#define HTTP_QUERY_AUTHORIZATION 28
+#define HTTP_QUERY_CONTENT_ENCODING 29
+#define HTTP_QUERY_FORWARDED 30
+#define HTTP_QUERY_FROM 31
+#define HTTP_QUERY_IF_MODIFIED_SINCE 32
+#define HTTP_QUERY_LOCATION 33
+#define HTTP_QUERY_ORIG_URI 34
+#define HTTP_QUERY_REFERER 35
+#define HTTP_QUERY_RETRY_AFTER 36
+#define HTTP_QUERY_SERVER 37
+#define HTTP_QUERY_TITLE 38
+#define HTTP_QUERY_USER_AGENT 39
+#define HTTP_QUERY_WWW_AUTHENTICATE 40
+#define HTTP_QUERY_PROXY_AUTHENTICATE 41
+#define HTTP_QUERY_ACCEPT_RANGES 42
+#define HTTP_QUERY_SET_COOKIE 43
+#define HTTP_QUERY_COOKIE 44
+#define HTTP_QUERY_REQUEST_METHOD 45
+#define HTTP_QUERY_REFRESH 46
+#define HTTP_QUERY_CONTENT_DISPOSITION 47
+#define HTTP_QUERY_AGE 48
+#define HTTP_QUERY_CACHE_CONTROL 49
+#define HTTP_QUERY_CONTENT_BASE 50
+#define HTTP_QUERY_CONTENT_LOCATION 51
+#define HTTP_QUERY_CONTENT_MD5 52
+#define HTTP_QUERY_CONTENT_RANGE 53
+#define HTTP_QUERY_ETAG 54
+#define HTTP_QUERY_HOST 55
+#define HTTP_QUERY_IF_MATCH 56
+#define HTTP_QUERY_IF_NONE_MATCH 57
+#define HTTP_QUERY_IF_RANGE 58
+#define HTTP_QUERY_IF_UNMODIFIED_SINCE 59
+#define HTTP_QUERY_MAX_FORWARDS 60
+#define HTTP_QUERY_PROXY_AUTHORIZATION 61
+#define HTTP_QUERY_RANGE 62
+#define HTTP_QUERY_TRANSFER_ENCODING 63
+#define HTTP_QUERY_UPGRADE 64
+#define HTTP_QUERY_VARY 65
+#define HTTP_QUERY_VIA 66
+#define HTTP_QUERY_WARNING 67
+#define HTTP_QUERY_EXPECT 68
+#define HTTP_QUERY_PROXY_CONNECTION 69
+#define HTTP_QUERY_UNLESS_MODIFIED_SINCE 70
+#define HTTP_QUERY_ECHO_REQUEST 71
+#define HTTP_QUERY_ECHO_REPLY 72
+#define HTTP_QUERY_ECHO_HEADERS 73
+#define HTTP_QUERY_ECHO_HEADERS_CRLF 74
+#define HTTP_QUERY_PROXY_SUPPORT 75
+#define HTTP_QUERY_AUTHENTICATION_INFO 76
+#define HTTP_QUERY_PASSPORT_URLS 77
+#define HTTP_QUERY_PASSPORT_CONFIG 78
+#define HTTP_QUERY_MAX 78
+#define HTTP_QUERY_CUSTOM 65535
+#define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000
+#define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000
+#define HTTP_QUERY_FLAG_NUMBER 0x20000000
+#define HTTP_QUERY_FLAG_COALESCE 0x10000000
+#define HTTP_QUERY_MODIFIER_FLAGS_MASK (HTTP_QUERY_FLAG_REQUEST_HEADERS \
+ | HTTP_QUERY_FLAG_SYSTEMTIME \
+ | HTTP_QUERY_FLAG_NUMBER \
+ | HTTP_QUERY_FLAG_COALESCE \
+ )
+#define HTTP_QUERY_HEADER_MASK (~HTTP_QUERY_MODIFIER_FLAGS_MASK)
+
+#define HTTP_STATUS_CONTINUE 100
+#define HTTP_STATUS_SWITCH_PROTOCOLS 101
+#define HTTP_STATUS_OK 200
+#define HTTP_STATUS_CREATED 201
+#define HTTP_STATUS_ACCEPTED 202
+#define HTTP_STATUS_PARTIAL 203
+#define HTTP_STATUS_NO_CONTENT 204
+#define HTTP_STATUS_RESET_CONTENT 205
+#define HTTP_STATUS_PARTIAL_CONTENT 206
+#define HTTP_STATUS_AMBIGUOUS 300
+#define HTTP_STATUS_MOVED 301
+#define HTTP_STATUS_REDIRECT 302
+#define HTTP_STATUS_REDIRECT_METHOD 303
+#define HTTP_STATUS_NOT_MODIFIED 304
+#define HTTP_STATUS_USE_PROXY 305
+#define HTTP_STATUS_REDIRECT_KEEP_VERB 307
+#define HTTP_STATUS_BAD_REQUEST 400
+#define HTTP_STATUS_DENIED 401
+#define HTTP_STATUS_PAYMENT_REQ 402
+#define HTTP_STATUS_FORBIDDEN 403
+#define HTTP_STATUS_NOT_FOUND 404
+#define HTTP_STATUS_BAD_METHOD 405
+#define HTTP_STATUS_NONE_ACCEPTABLE 406
+#define HTTP_STATUS_PROXY_AUTH_REQ 407
+#define HTTP_STATUS_REQUEST_TIMEOUT 408
+#define HTTP_STATUS_CONFLICT 409
+#define HTTP_STATUS_GONE 410
+#define HTTP_STATUS_LENGTH_REQUIRED 411
+#define HTTP_STATUS_PRECOND_FAILED 412
+#define HTTP_STATUS_REQUEST_TOO_LARGE 413
+#define HTTP_STATUS_URI_TOO_LONG 414
+#define HTTP_STATUS_UNSUPPORTED_MEDIA 415
+#define HTTP_STATUS_SERVER_ERROR 500
+#define HTTP_STATUS_NOT_SUPPORTED 501
+#define HTTP_STATUS_BAD_GATEWAY 502
+#define HTTP_STATUS_SERVICE_UNAVAIL 503
+#define HTTP_STATUS_GATEWAY_TIMEOUT 504
+#define HTTP_STATUS_VERSION_NOT_SUP 505
+#define HTTP_STATUS_FIRST HTTP_STATUS_CONTINUE
+#define HTTP_STATUS_LAST HTTP_STATUS_VERSION_NOT_SUP
+
+
+INTERNETAPI HINTERNET WINAPI HttpOpenRequestA(HINTERNET ,LPCSTR ,LPCSTR ,LPCSTR ,
+ LPCSTR ,LPCSTR * ,DWORD ,DWORD_PTR);
+INTERNETAPI HINTERNET WINAPI HttpOpenRequestW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPCWSTR ,
+ LPCWSTR ,LPCWSTR * ,DWORD ,DWORD_PTR);
+#define HttpOpenRequest WINELIB_NAME_AW(HttpOpenRequest)
+
+BOOLAPI HttpAddRequestHeadersA(HINTERNET ,LPCSTR ,DWORD ,DWORD);
+BOOLAPI HttpAddRequestHeadersW(HINTERNET ,LPCWSTR ,DWORD ,DWORD);
+#define HttpAddRequestHeaders WINELIB_NAME_AW(HttpAddRequestHeaders)
+
+#define HTTP_ADDREQ_INDEX_MASK 0x0000FFFF
+#define HTTP_ADDREQ_FLAGS_MASK 0xFFFF0000
+#define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000
+#define HTTP_ADDREQ_FLAG_ADD 0x20000000
+#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000
+#define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x01000000
+#define HTTP_ADDREQ_FLAG_COALESCE HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
+#define HTTP_ADDREQ_FLAG_REPLACE 0x80000000
+
+BOOLAPI HttpSendRequestA(HINTERNET ,LPCSTR ,DWORD ,LPVOID ,DWORD);
+BOOLAPI HttpSendRequestW(HINTERNET ,LPCWSTR ,DWORD ,LPVOID ,DWORD);
+#define HttpSendRequest WINELIB_NAME_AW(HttpSendRequest)
+
+INTERNETAPI BOOL WINAPI HttpSendRequestExA(HINTERNET ,LPINTERNET_BUFFERSA ,
+ LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR);
+INTERNETAPI BOOL WINAPI HttpSendRequestExW(HINTERNET ,LPINTERNET_BUFFERSW ,
+ LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR);
+#define HttpSendRequestEx WINELIB_NAME_AW(HttpSendRequestEx)
+
+#define HSR_ASYNC WININET_API_FLAG_ASYNC
+#define HSR_SYNC WININET_API_FLAG_SYNC
+#define HSR_USE_CONTEXT WININET_API_FLAG_USE_CONTEXT
+#define HSR_INITIATE 0x00000008
+#define HSR_DOWNLOAD 0x00000010
+#define HSR_CHUNKED 0x00000020
+
+INTERNETAPI BOOL WINAPI HttpEndRequestA(HINTERNET ,LPINTERNET_BUFFERSA ,DWORD ,DWORD_PTR);
+INTERNETAPI BOOL WINAPI HttpEndRequestW(HINTERNET ,LPINTERNET_BUFFERSW ,DWORD ,DWORD_PTR);
+#define HttpEndRequest WINELIB_NAME_AW(HttpEndRequest)
+
+BOOLAPI HttpQueryInfoA(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD);
+BOOLAPI HttpQueryInfoW(HINTERNET ,DWORD ,LPVOID ,LPDWORD ,LPDWORD);
+#define HttpQueryInfo WINELIB_NAME_AW(HttpQueryInfo)
+
+BOOLAPI InternetClearAllPerSiteCookieDecisions(VOID);
+
+BOOLAPI InternetEnumPerSiteCookieDecisionA(LPSTR,ULONG *,ULONG *,ULONG);
+BOOLAPI InternetEnumPerSiteCookieDecisionW(LPWSTR,ULONG *,ULONG *,ULONG);
+#define InternetEnumPerSiteCookieDecision WINELIB_NAME_AW(InternetEnumPerSiteCookieDecision)
+
+#define INTERNET_COOKIE_IS_SECURE 0x00000001
+#define INTERNET_COOKIE_IS_SESSION 0x00000002
+#define INTERNET_COOKIE_THIRD_PARTY 0x00000010
+#define INTERNET_COOKIE_PROMPT_REQUIRED 0x00000020
+#define INTERNET_COOKIE_EVALUATE_P3P 0x00000040
+#define INTERNET_COOKIE_APPLY_P3P 0x00000080
+#define INTERNET_COOKIE_P3P_ENABLED 0x00000100
+#define INTERNET_COOKIE_IS_RESTRICTED 0x00000200
+#define INTERNET_COOKIE_IE6 0x00000400
+#define INTERNET_COOKIE_IS_LEGACY 0x00000800
+
+BOOLAPI InternetGetCookieExA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD,LPVOID);
+BOOLAPI InternetGetCookieExW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD,LPVOID);
+#define InternetGetCookieEx WINELIB_NAME_AW(InternetGetCookieEx)
+
+DWORD WINAPI InternetSetCookieExA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD_PTR);
+DWORD WINAPI InternetSetCookieExW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD_PTR);
+#define InternetSetCookieEx WINELIB_NAME_AW(InternetSetCookieEx)
+
+BOOLAPI InternetGetPerSiteCookieDecisionA(LPCSTR,ULONG *);
+BOOLAPI InternetGetPerSiteCookieDecisionW(LPCWSTR,ULONG *);
+#define InternetGetPerSiteCookieDecision WINELIB_NAME_AW(InternetGetPerSiteCookieDecision)
+
+BOOLAPI InternetSetPerSiteCookieDecisionA(LPCSTR,DWORD);
+BOOLAPI InternetSetPerSiteCookieDecisionW(LPCWSTR,DWORD);
+#define InternetSetPerSiteCookieDecision WINELIB_NAME_AW(InternetSetPerSiteCookieDecision)
+
+BOOLAPI InternetSetCookieA(LPCSTR ,LPCSTR ,LPCSTR);
+BOOLAPI InternetSetCookieW(LPCWSTR ,LPCWSTR ,LPCWSTR);
+#define InternetSetCookie WINELIB_NAME_AW(InternetSetCookie)
+
+BOOLAPI InternetGetCookieA(LPCSTR ,LPCSTR ,LPSTR ,LPDWORD);
+BOOLAPI InternetGetCookieW(LPCWSTR ,LPCWSTR ,LPWSTR ,LPDWORD);
+#define InternetGetCookie WINELIB_NAME_AW(InternetGetCookie)
+
+INTERNETAPI DWORD WINAPI InternetAttemptConnect(DWORD);
+BOOLAPI InternetCheckConnectionA(LPCSTR ,DWORD ,DWORD);
+BOOLAPI InternetCheckConnectionW(LPCWSTR ,DWORD ,DWORD);
+#define InternetCheckConnection WINELIB_NAME_AW(InternetCheckConnection)
+
+#define FLAG_ICC_FORCE_CONNECTION 0x00000001
+
+#define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x01
+#define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x02
+#define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x04
+#define FLAGS_ERROR_UI_FLAGS_NO_UI 0x08
+#define FLAGS_ERROR_UI_SERIALIZE_DIALOGS 0x10
+
+DWORD InternetAuthNotifyCallback ( DWORD_PTR ,DWORD ,LPVOID );
+typedef DWORD (CALLBACK *PFN_AUTH_NOTIFY) (DWORD_PTR,DWORD,LPVOID);
+
+typedef struct
+{
+ DWORD cbStruct;
+ DWORD dwOptions;
+ PFN_AUTH_NOTIFY pfnNotify;
+ DWORD_PTR dwContext;
+}
+INTERNET_AUTH_NOTIFY_DATA;
+
+
+INTERNETAPI DWORD WINAPI InternetErrorDlg(HWND ,HINTERNET ,DWORD ,DWORD ,LPVOID *);
+INTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingA(HWND ,LPSTR ,LPSTR ,BOOL);
+INTERNETAPI DWORD WINAPI InternetConfirmZoneCrossingW(HWND ,LPWSTR ,LPWSTR ,BOOL);
+#define InternetConfirmZoneCrossing WINELIB_NAME_AW(InternetConfirmZoneCrossing)
+
+#define PRIVACY_TEMPLATE_NO_COOKIES 0
+#define PRIVACY_TEMPLATE_HIGH 1
+#define PRIVACY_TEMPLATE_MEDIUM_HIGH 2
+#define PRIVACY_TEMPLATE_MEDIUM 3
+#define PRIVACY_TEMPLATE_MEDIUM_LOW 4
+#define PRIVACY_TEMPLATE_LOW 5
+#define PRIVACY_TEMPLATE_CUSTOM 100
+#define PRIVACY_TEMPLATE_ADVANCED 101
+
+#define PRIVACY_TEMPLATE_MAX PRIVACY_TEMPLATE_LOW
+
+#define PRIVACY_TYPE_FIRST_PARTY 0
+#define PRIVACY_TYPE_THIRD_PARTY 1
+
+INTERNETAPI DWORD WINAPI PrivacySetZonePreferenceW(DWORD,DWORD,DWORD,LPCWSTR);
+INTERNETAPI DWORD WINAPI PrivacyGetZonePreferenceW(DWORD,DWORD,LPDWORD,LPWSTR,LPDWORD);
+
+#define INTERNET_ERROR_BASE 12000
+
+#define ERROR_INTERNET_OUT_OF_HANDLES (INTERNET_ERROR_BASE + 1)
+#define ERROR_INTERNET_TIMEOUT (INTERNET_ERROR_BASE + 2)
+#define ERROR_INTERNET_EXTENDED_ERROR (INTERNET_ERROR_BASE + 3)
+#define ERROR_INTERNET_INTERNAL_ERROR (INTERNET_ERROR_BASE + 4)
+#define ERROR_INTERNET_INVALID_URL (INTERNET_ERROR_BASE + 5)
+#define ERROR_INTERNET_UNRECOGNIZED_SCHEME (INTERNET_ERROR_BASE + 6)
+#define ERROR_INTERNET_NAME_NOT_RESOLVED (INTERNET_ERROR_BASE + 7)
+#define ERROR_INTERNET_PROTOCOL_NOT_FOUND (INTERNET_ERROR_BASE + 8)
+#define ERROR_INTERNET_INVALID_OPTION (INTERNET_ERROR_BASE + 9)
+#define ERROR_INTERNET_BAD_OPTION_LENGTH (INTERNET_ERROR_BASE + 10)
+#define ERROR_INTERNET_OPTION_NOT_SETTABLE (INTERNET_ERROR_BASE + 11)
+#define ERROR_INTERNET_SHUTDOWN (INTERNET_ERROR_BASE + 12)
+#define ERROR_INTERNET_INCORRECT_USER_NAME (INTERNET_ERROR_BASE + 13)
+#define ERROR_INTERNET_INCORRECT_PASSWORD (INTERNET_ERROR_BASE + 14)
+#define ERROR_INTERNET_LOGIN_FAILURE (INTERNET_ERROR_BASE + 15)
+#define ERROR_INTERNET_INVALID_OPERATION (INTERNET_ERROR_BASE + 16)
+#define ERROR_INTERNET_OPERATION_CANCELLED (INTERNET_ERROR_BASE + 17)
+#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE (INTERNET_ERROR_BASE + 18)
+#define ERROR_INTERNET_INCORRECT_HANDLE_STATE (INTERNET_ERROR_BASE + 19)
+#define ERROR_INTERNET_NOT_PROXY_REQUEST (INTERNET_ERROR_BASE + 20)
+#define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND (INTERNET_ERROR_BASE + 21)
+#define ERROR_INTERNET_BAD_REGISTRY_PARAMETER (INTERNET_ERROR_BASE + 22)
+#define ERROR_INTERNET_NO_DIRECT_ACCESS (INTERNET_ERROR_BASE + 23)
+#define ERROR_INTERNET_NO_CONTEXT (INTERNET_ERROR_BASE + 24)
+#define ERROR_INTERNET_NO_CALLBACK (INTERNET_ERROR_BASE + 25)
+#define ERROR_INTERNET_REQUEST_PENDING (INTERNET_ERROR_BASE + 26)
+#define ERROR_INTERNET_INCORRECT_FORMAT (INTERNET_ERROR_BASE + 27)
+#define ERROR_INTERNET_ITEM_NOT_FOUND (INTERNET_ERROR_BASE + 28)
+#define ERROR_INTERNET_CANNOT_CONNECT (INTERNET_ERROR_BASE + 29)
+#define ERROR_INTERNET_CONNECTION_ABORTED (INTERNET_ERROR_BASE + 30)
+#define ERROR_INTERNET_CONNECTION_RESET (INTERNET_ERROR_BASE + 31)
+#define ERROR_INTERNET_FORCE_RETRY (INTERNET_ERROR_BASE + 32)
+#define ERROR_INTERNET_INVALID_PROXY_REQUEST (INTERNET_ERROR_BASE + 33)
+#define ERROR_INTERNET_NEED_UI (INTERNET_ERROR_BASE + 34)
+#define ERROR_INTERNET_HANDLE_EXISTS (INTERNET_ERROR_BASE + 36)
+#define ERROR_INTERNET_SEC_CERT_DATE_INVALID (INTERNET_ERROR_BASE + 37)
+#define ERROR_INTERNET_SEC_CERT_CN_INVALID (INTERNET_ERROR_BASE + 38)
+#define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR (INTERNET_ERROR_BASE + 39)
+#define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR (INTERNET_ERROR_BASE + 40)
+#define ERROR_INTERNET_MIXED_SECURITY (INTERNET_ERROR_BASE + 41)
+#define ERROR_INTERNET_CHG_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 42)
+#define ERROR_INTERNET_POST_IS_NON_SECURE (INTERNET_ERROR_BASE + 43)
+#define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED (INTERNET_ERROR_BASE + 44)
+#define ERROR_INTERNET_INVALID_CA (INTERNET_ERROR_BASE + 45)
+#define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP (INTERNET_ERROR_BASE + 46)
+#define ERROR_INTERNET_ASYNC_THREAD_FAILED (INTERNET_ERROR_BASE + 47)
+#define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE (INTERNET_ERROR_BASE + 48)
+#define ERROR_INTERNET_DIALOG_PENDING (INTERNET_ERROR_BASE + 49)
+#define ERROR_INTERNET_RETRY_DIALOG (INTERNET_ERROR_BASE + 50)
+#define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR (INTERNET_ERROR_BASE + 52)
+#define ERROR_INTERNET_INSERT_CDROM (INTERNET_ERROR_BASE + 53)
+#define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED (INTERNET_ERROR_BASE + 54)
+#define ERROR_INTERNET_SEC_CERT_ERRORS (INTERNET_ERROR_BASE + 55)
+#define ERROR_INTERNET_SEC_CERT_NO_REV (INTERNET_ERROR_BASE + 56)
+#define ERROR_INTERNET_SEC_CERT_REV_FAILED (INTERNET_ERROR_BASE + 57)
+#define ERROR_FTP_TRANSFER_IN_PROGRESS (INTERNET_ERROR_BASE + 110)
+#define ERROR_FTP_DROPPED (INTERNET_ERROR_BASE + 111)
+#define ERROR_FTP_NO_PASSIVE_MODE (INTERNET_ERROR_BASE + 112)
+#define ERROR_GOPHER_PROTOCOL_ERROR (INTERNET_ERROR_BASE + 130)
+#define ERROR_GOPHER_NOT_FILE (INTERNET_ERROR_BASE + 131)
+#define ERROR_GOPHER_DATA_ERROR (INTERNET_ERROR_BASE + 132)
+#define ERROR_GOPHER_END_OF_DATA (INTERNET_ERROR_BASE + 133)
+#define ERROR_GOPHER_INVALID_LOCATOR (INTERNET_ERROR_BASE + 134)
+#define ERROR_GOPHER_INCORRECT_LOCATOR_TYPE (INTERNET_ERROR_BASE + 135)
+#define ERROR_GOPHER_NOT_GOPHER_PLUS (INTERNET_ERROR_BASE + 136)
+#define ERROR_GOPHER_ATTRIBUTE_NOT_FOUND (INTERNET_ERROR_BASE + 137)
+#define ERROR_GOPHER_UNKNOWN_LOCATOR (INTERNET_ERROR_BASE + 138)
+#define ERROR_HTTP_HEADER_NOT_FOUND (INTERNET_ERROR_BASE + 150)
+#define ERROR_HTTP_DOWNLEVEL_SERVER (INTERNET_ERROR_BASE + 151)
+#define ERROR_HTTP_INVALID_SERVER_RESPONSE (INTERNET_ERROR_BASE + 152)
+#define ERROR_HTTP_INVALID_HEADER (INTERNET_ERROR_BASE + 153)
+#define ERROR_HTTP_INVALID_QUERY_REQUEST (INTERNET_ERROR_BASE + 154)
+#define ERROR_HTTP_HEADER_ALREADY_EXISTS (INTERNET_ERROR_BASE + 155)
+#define ERROR_HTTP_REDIRECT_FAILED (INTERNET_ERROR_BASE + 156)
+#define ERROR_HTTP_NOT_REDIRECTED (INTERNET_ERROR_BASE + 160)
+#define ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION (INTERNET_ERROR_BASE + 161)
+#define ERROR_HTTP_COOKIE_DECLINED (INTERNET_ERROR_BASE + 162)
+#define ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION (INTERNET_ERROR_BASE + 168)
+#define ERROR_INTERNET_SECURITY_CHANNEL_ERROR (INTERNET_ERROR_BASE + 157)
+#define ERROR_INTERNET_UNABLE_TO_CACHE_FILE (INTERNET_ERROR_BASE + 158)
+#define ERROR_INTERNET_TCPIP_NOT_INSTALLED (INTERNET_ERROR_BASE + 159)
+#define ERROR_INTERNET_DISCONNECTED (INTERNET_ERROR_BASE + 163)
+#define ERROR_INTERNET_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 164)
+#define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE (INTERNET_ERROR_BASE + 165)
+#define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT (INTERNET_ERROR_BASE + 166)
+#define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT (INTERNET_ERROR_BASE + 167)
+#define ERROR_INTERNET_SEC_INVALID_CERT (INTERNET_ERROR_BASE + 169)
+#define ERROR_INTERNET_SEC_CERT_REVOKED (INTERNET_ERROR_BASE + 170)
+#define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK (INTERNET_ERROR_BASE + 171)
+#define ERROR_INTERNET_NOT_INITIALIZED (INTERNET_ERROR_BASE + 172)
+#define ERROR_INTERNET_NEED_MSN_SSPI_PKG (INTERNET_ERROR_BASE + 173)
+#define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY (INTERNET_ERROR_BASE + 174)
+#define ERROR_INTERNET_DECODING_FAILED (INTERNET_ERROR_BASE + 175)
+#define INTERNET_ERROR_LAST ERROR_INTERNET_DECODING_FAILED
+
+
+#define NORMAL_CACHE_ENTRY 0x00000001
+#define STICKY_CACHE_ENTRY 0x00000004
+#define EDITED_CACHE_ENTRY 0x00000008
+#define COOKIE_CACHE_ENTRY 0x00100000
+#define URLHISTORY_CACHE_ENTRY 0x00200000
+#define TRACK_OFFLINE_CACHE_ENTRY 0x00000010
+#define TRACK_ONLINE_CACHE_ENTRY 0x00000020
+#define SPARSE_CACHE_ENTRY 0x00010000
+
+#define URLCACHE_FIND_DEFAULT_FILTER NORMAL_CACHE_ENTRY \
+ | COOKIE_CACHE_ENTRY \
+ | URLHISTORY_CACHE_ENTRY \
+ | TRACK_OFFLINE_CACHE_ENTRY \
+ | TRACK_ONLINE_CACHE_ENTRY \
+ | STICKY_CACHE_ENTRY
+
+
+typedef struct _INTERNET_CACHE_ENTRY_INFOA {
+ DWORD dwStructSize;
+ LPSTR lpszSourceUrlName;
+ LPSTR lpszLocalFileName;
+ DWORD CacheEntryType;
+ DWORD dwUseCount;
+ DWORD dwHitRate;
+ DWORD dwSizeLow;
+ DWORD dwSizeHigh;
+ FILETIME LastModifiedTime;
+ FILETIME ExpireTime;
+ FILETIME LastAccessTime;
+ FILETIME LastSyncTime;
+
+ LPBYTE lpHeaderInfo;
+ DWORD dwHeaderInfoSize;
+ LPSTR lpszFileExtension;
+ union {
+ DWORD dwReserved;
+ DWORD dwExemptDelta;
+ } DUMMYUNIONNAME;
+} INTERNET_CACHE_ENTRY_INFOA,* LPINTERNET_CACHE_ENTRY_INFOA;
+
+typedef struct _INTERNET_CACHE_ENTRY_INFOW {
+ DWORD dwStructSize;
+ LPWSTR lpszSourceUrlName;
+ LPWSTR lpszLocalFileName;
+ DWORD CacheEntryType;
+ DWORD dwUseCount;
+ DWORD dwHitRate;
+ DWORD dwSizeLow;
+ DWORD dwSizeHigh;
+ FILETIME LastModifiedTime;
+ FILETIME ExpireTime;
+ FILETIME LastAccessTime;
+ FILETIME LastSyncTime;
+
+ LPBYTE lpHeaderInfo;
+ DWORD dwHeaderInfoSize;
+ LPWSTR lpszFileExtension;
+ union {
+ DWORD dwReserved;
+ DWORD dwExemptDelta;
+ } DUMMYUNIONNAME;
+} INTERNET_CACHE_ENTRY_INFOW,* LPINTERNET_CACHE_ENTRY_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_ENTRY_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_ENTRY_INFO)
+
+typedef struct _INTERNET_CACHE_TIMESTAMPS
+{
+ FILETIME ftExpires;
+ FILETIME ftLastModified;
+} INTERNET_CACHE_TIMESTAMPS, *LPINTERNET_CACHE_TIMESTAMPS;
+
+BOOLAPI CreateUrlCacheEntryA(LPCSTR ,DWORD ,LPCSTR ,LPSTR ,DWORD);
+BOOLAPI CreateUrlCacheEntryW(LPCWSTR ,DWORD ,LPCWSTR ,LPWSTR ,DWORD);
+#define CreateUrlCacheEntry WINELIB_NAME_AW(CreateUrlCacheEntry)
+
+BOOLAPI CommitUrlCacheEntryA(LPCSTR,LPCSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCSTR,LPCSTR);
+BOOLAPI CommitUrlCacheEntryW(LPCWSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPWSTR,DWORD,LPCWSTR,LPCWSTR);
+#define CommitUrlCacheEntry WINELIB_NAME_AW(CommitUrlCacheEntry)
+
+BOOLAPI ResumeSuspendedDownload(HINTERNET, DWORD);
+
+BOOLAPI RetrieveUrlCacheEntryFileA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,DWORD);
+BOOLAPI RetrieveUrlCacheEntryFileW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,DWORD);
+#define RetrieveUrlCacheEntryFile WINELIB_NAME_AW(RetrieveUrlCacheEntryFile)
+
+BOOLAPI UnlockUrlCacheEntryFileA(LPCSTR ,DWORD);
+BOOLAPI UnlockUrlCacheEntryFileW(LPCWSTR ,DWORD);
+#define UnlockUrlCacheEntryFile WINELIB_NAME_AW(UnlockUrlCacheEntryFile)
+
+INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamA(LPCSTR ,
+ LPINTERNET_CACHE_ENTRY_INFOA , LPDWORD ,BOOL ,DWORD);
+INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,
+ LPDWORD ,BOOL ,DWORD);
+#define RetrieveUrlCacheEntryStream WINELIB_NAME_AW(RetrieveUrlCacheEntryStream)
+
+BOOLAPI ReadUrlCacheEntryStream( HANDLE ,DWORD ,LPVOID ,LPDWORD ,DWORD );
+BOOLAPI UnlockUrlCacheEntryStream( HANDLE ,DWORD );
+BOOLAPI GetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);
+BOOLAPI GetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
+#define GetUrlCacheEntryInfo WINELIB_NAME_AW(GetUrlCacheEntryInfo)
+
+BOOLAPI GetUrlCacheEntryInfoExA(
+ LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPSTR ,LPDWORD ,LPVOID ,DWORD);
+BOOLAPI GetUrlCacheEntryInfoExW(
+ LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPWSTR ,LPDWORD ,LPVOID ,DWORD);
+#define GetUrlCacheEntryInfoEx WINELIB_NAME_AW(GetUrlCacheEntryInfoEx)
+
+#define CACHE_ENTRY_ATTRIBUTE_FC 0x00000004
+#define CACHE_ENTRY_HITRATE_FC 0x00000010
+#define CACHE_ENTRY_MODTIME_FC 0x00000040
+#define CACHE_ENTRY_EXPTIME_FC 0x00000080
+#define CACHE_ENTRY_ACCTIME_FC 0x00000100
+#define CACHE_ENTRY_SYNCTIME_FC 0x00000200
+#define CACHE_ENTRY_HEADERINFO_FC 0x00000400
+#define CACHE_ENTRY_EXEMPT_DELTA_FC 0x00000800
+
+
+BOOLAPI SetUrlCacheEntryInfoA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,DWORD);
+BOOLAPI SetUrlCacheEntryInfoW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,DWORD);
+#define SetUrlCacheEntryInfo WINELIB_NAME_AW(SetUrlCacheEntryInfo)
+
+typedef LONGLONG GROUPID;
+
+INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD,LPVOID);
+BOOLAPI DeleteUrlCacheGroup(GROUPID ,DWORD ,LPVOID);
+
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheGroup(DWORD,DWORD,LPVOID,DWORD,GROUPID*,LPVOID);
+BOOLAPI FindNextUrlCacheGroup(HANDLE,GROUPID*,LPVOID);
+
+BOOLAPI GetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPDWORD,LPVOID);
+BOOLAPI GetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPDWORD,LPVOID);
+#define GetUrlCacheGroupAttribute WINELIB_NAME_AW(GetUrlCacheGroupAttribute)
+
+#define INTERNET_CACHE_GROUP_ADD 0
+#define INTERNET_CACHE_GROUP_REMOVE 1
+
+BOOLAPI SetUrlCacheEntryGroupA(LPCSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);
+BOOLAPI SetUrlCacheEntryGroupW(LPCWSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);
+#define SetUrlCacheEntryGroup WINELIB_NAME_AW(SetUrlCacheEntryGroup)
+
+BOOLAPI SetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPVOID);
+BOOLAPI SetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPVOID);
+#define SetUrlCacheGroupAttribute WINELIB_NAME_AW(SetUrlCacheGroupAttribute)
+
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExA(
+ LPCSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExW(
+ LPCWSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );
+#define FindFirstUrlCacheEntryEx WINELIB_NAME_AW(FindFirstUrlCacheEntryEx)
+
+BOOLAPI FindNextUrlCacheEntryExA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID);
+BOOLAPI FindNextUrlCacheEntryExW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID);
+#define FindNextUrlCacheEntryEx WINELIB_NAME_AW(FindNextUrlCacheEntryEx)
+
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
+#define FindFirstUrlCacheEntry WINELIB_NAME_AW(FindFirstUrlCacheEntry)
+
+BOOLAPI FindNextUrlCacheEntryA(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD);
+BOOLAPI FindNextUrlCacheEntryW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
+#define FindNextUrlCacheEntry WINELIB_NAME_AW(FindNextUrlCacheEntry)
+
+BOOLAPI FindCloseUrlCache(HANDLE);
+
+BOOLAPI DeleteUrlCacheEntryA(LPCSTR);
+BOOLAPI DeleteUrlCacheEntryW(LPCWSTR);
+#define DeleteUrlCacheEntry WINELIB_NAME_AW(DeleteUrlCacheEntry)
+
+/* FCS_ flags and FreeUrlCacheSpace are no longer documented */
+#define FCS_PERCENT_CACHE_SPACE 0 /* guessed value */
+#define FCS_PERCENT_DISK_SPACE 1 /* guessed value */
+#define FCS_ABSOLUTE_SIZE 2 /* guessed value */
+
+BOOLAPI FreeUrlCacheSpaceA(LPCSTR ,DWORD ,DWORD);
+BOOLAPI FreeUrlCacheSpaceW(LPCWSTR ,DWORD ,DWORD);
+#define FreeUrlCacheSpace WINELIB_NAME_AW(FreeUrlCacheSpace)
+
+
+INTERNETAPI DWORD WINAPI InternetDialA(HWND ,LPSTR ,DWORD ,DWORD_PTR* ,DWORD);
+INTERNETAPI DWORD WINAPI InternetDialW(HWND ,LPWSTR ,DWORD ,DWORD_PTR* ,DWORD);
+#define InternetDial WINELIB_NAME_AW(InternetDial)
+
+
+#define INTERNET_DIAL_UNATTENDED 0x8000
+
+INTERNETAPI DWORD WINAPI InternetHangUp(DWORD_PTR ,DWORD);
+BOOLAPI CreateMD5SSOHash(PWSTR,PWSTR,PWSTR,PBYTE);
+
+#define INTERENT_GOONLINE_REFRESH 0x00000001
+#define INTERENT_GOONLINE_MASK 0x00000001
+INTERNETAPI BOOL WINAPI InternetGoOnlineA(LPSTR ,HWND ,DWORD);
+INTERNETAPI BOOL WINAPI InternetGoOnlineW(LPWSTR ,HWND ,DWORD);
+#define InternetGoOnline WINELIB_NAME_AW(InternetGoOnline)
+INTERNETAPI BOOL WINAPI InternetAutodial(DWORD,HWND);
+
+#define INTERNET_AUTODIAL_FORCE_ONLINE 1
+#define INTERNET_AUTODIAL_FORCE_UNATTENDED 2
+#define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4
+
+#define INTERNET_AUTODIAL_FLAGS_MASK (INTERNET_AUTODIAL_FORCE_ONLINE | INTERNET_AUTODIAL_FORCE_UNATTENDED | INTERNET_AUTODIAL_FAILIFSECURITYCHECK)
+INTERNETAPI BOOL WINAPI InternetAutodialHangup(DWORD);
+INTERNETAPI BOOL WINAPI InternetGetConnectedState(LPDWORD ,DWORD);
+
+#define INTERNET_CONNECTION_MODEM 1
+#define INTERNET_CONNECTION_LAN 2
+#define INTERNET_CONNECTION_PROXY 4
+#define INTERNET_CONNECTION_MODEM_BUSY 8
+
+typedef DWORD (CALLBACK *PFN_DIAL_HANDLER) (HWND,LPCSTR,DWORD,LPDWORD);
+
+#define INTERNET_CUSTOMDIAL_CONNECT 0
+#define INTERNET_CUSTOMDIAL_UNATTENDED 1
+#define INTERNET_CUSTOMDIAL_DISCONNECT 2
+#define INTERNET_CUSTOMDIAL_SHOWOFFLINE 4
+#define INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED 1
+#define INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE 2
+#define INTERNET_CUSTOMDIAL_CAN_HANGUP 4
+
+INTERNETAPI BOOL WINAPI InternetSetDialStateA(LPCSTR ,DWORD ,DWORD);
+INTERNETAPI BOOL WINAPI InternetSetDialStateW(LPCWSTR ,DWORD ,DWORD);
+#define InternetSetDialState WINELIB_NAME_AW(InternetSetDialState)
+#define INTERNET_DIALSTATE_DISCONNECTED 1
+
+BOOL WINAPI InternetGetConnectedStateExA(LPDWORD, LPSTR, DWORD, DWORD);
+BOOL WINAPI InternetGetConnectedStateExW(LPDWORD, LPWSTR, DWORD, DWORD);
+#define InternetGetConnectedStateEx WINELIB_NAME_AW(InternetGetConnectedStateEx)
+
+BOOL WINAPI InternetInitializeAutoProxyDll(DWORD);
+BOOL WINAPI DetectAutoProxyUrl(LPSTR, DWORD, DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h
new file mode 100644
index 00000000..1aac46de
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winineti.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2007 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WININETI_H_
+#define _WINE_WININETI_H_
+
+/* FIXME: #include <iedial.h> */
+#include <schannel.h>
+#include <sspi.h>
+
+typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYA
+{
+ CHAR CachePath[MAX_PATH];
+ DWORD dwCacheSize;
+} INTERNET_CACHE_CONFIG_PATH_ENTRYA, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYA;
+
+typedef struct _INTERNET_CACHE_CONFIG_PATH_ENTRYW
+{
+ WCHAR CachePath[MAX_PATH];
+ DWORD dwCacheSize;
+} INTERNET_CACHE_CONFIG_PATH_ENTRYW, *LPINTERNET_CACHE_CONFIG_PATH_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_PATH_ENTRY)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_PATH_ENTRY)
+
+typedef struct _INTERNET_CACHE_CONFIG_INFOA
+{
+ DWORD dwStructSize;
+ DWORD dwContainer;
+ DWORD dwQuota;
+ DWORD dwReserved4;
+ BOOL fPerUser;
+ DWORD dwSyncMode;
+ DWORD dwNumCachePaths;
+ __C89_NAMELESS union
+ {
+ __C89_NAMELESS struct
+ {
+ CHAR CachePath[MAX_PATH];
+ DWORD dwCacheSize;
+ } __C89_NAMELESSSTRUCTNAME;
+ INTERNET_CACHE_CONFIG_PATH_ENTRYA CachePaths[ANYSIZE_ARRAY];
+ } __C89_NAMELESSUNIONNAME;
+ DWORD dwNormalUsage;
+ DWORD dwExemptUsage;
+} INTERNET_CACHE_CONFIG_INFOA, *LPINTERNET_CACHE_CONFIG_INFOA;
+
+typedef struct _INTERNET_CACHE_CONFIG_INFOW
+{
+ DWORD dwStructSize;
+ DWORD dwContainer;
+ DWORD dwQuota;
+ DWORD dwReserved4;
+ BOOL fPerUser;
+ DWORD dwSyncMode;
+ DWORD dwNumCachePaths;
+ __C89_NAMELESS union
+ {
+ __C89_NAMELESS struct
+ {
+ WCHAR CachePath[MAX_PATH];
+ DWORD dwCacheSize;
+ } __C89_NAMELESSSTRUCTNAME;
+ INTERNET_CACHE_CONFIG_PATH_ENTRYW CachePaths[ANYSIZE_ARRAY];
+ } __C89_NAMELESSUNIONNAME;
+ DWORD dwNormalUsage;
+ DWORD dwExemptUsage;
+} INTERNET_CACHE_CONFIG_INFOW, *LPINTERNET_CACHE_CONFIG_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_CONFIG_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_CONFIG_INFO)
+
+typedef enum {
+ WININET_SYNC_MODE_NEVER = 0,
+ WININET_SYNC_MODE_ON_EXPIRY,
+ WININET_SYNC_MODE_ONCE_PER_SESSION,
+ WININET_SYNC_MODE_ALWAYS,
+ WININET_SYNC_MODE_AUTOMATIC,
+ WININET_SYNC_MODE_DEFAULT = WININET_SYNC_MODE_AUTOMATIC
+} WININET_SYNC_MODE;
+
+/* Flags for GetUrlCacheConfigInfoA/W and SetUrlCacheConfigInfoA/W */
+#define CACHE_CONFIG_FORCE_CLEANUP_FC 0x00000020
+#define CACHE_CONFIG_DISK_CACHE_PATHS_FC 0x00000040
+#define CACHE_CONFIG_SYNC_MODE_FC 0x00000080
+#define CACHE_CONFIG_CONTENT_PATHS_FC 0x00000100
+#define CACHE_CONFIG_COOKIES_PATHS_FC 0x00000200
+#define CACHE_CONFIG_HISTORY_PATHS_FC 0x00000400
+#define CACHE_CONFIG_QUOTA_FC 0x00000800
+#define CACHE_CONFIG_USER_MODE_FC 0x00001000
+#define CACHE_CONFIG_CONTENT_USAGE_FC 0x00002000
+#define CACHE_CONFIG_STICKY_CONTENT_USAGE_FC 0x00004000
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DWORD WINAPI DeleteIE3Cache(HWND,HINSTANCE,LPSTR,int);
+BOOL WINAPI GetDiskInfoA(PCSTR,PDWORD,PDWORDLONG,PDWORDLONG);
+BOOL WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,LPDWORD,DWORD);
+BOOL WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,LPDWORD,DWORD);
+#define GetUrlCacheConfigInfo WINELIB_NAME_AW(GetUrlCacheConfigInfo)
+BOOL WINAPI IncrementUrlCacheHeaderData(DWORD,LPDWORD);
+BOOL WINAPI InternetQueryFortezzaStatus(DWORD*,DWORD_PTR);
+BOOL WINAPI IsUrlCacheEntryExpiredA(LPCSTR,DWORD,FILETIME*);
+BOOL WINAPI IsUrlCacheEntryExpiredW(LPCWSTR,DWORD,FILETIME*);
+#define IsUrlCacheEntryExpired WINELIB_NAME_AW(IsUrlCacheEntryExpired)
+BOOL WINAPI SetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,DWORD);
+BOOL WINAPI SetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,DWORD);
+#define SetUrlCacheConfigInfo WINELIB_NAME_AW(SetUrlCacheConfigInfo)
+BOOL WINAPI InternetGetSecurityInfoByURLA(LPSTR,PCCERT_CHAIN_CONTEXT*,DWORD*);
+BOOL WINAPI InternetGetSecurityInfoByURLW(LPCWSTR,PCCERT_CHAIN_CONTEXT*,DWORD*);
+#define InternetGetSecurityInfoByURL WINELIB_NAME_AW(InternetGetSecurityInfoByURL)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINE_WININETI_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h
new file mode 100644
index 00000000..9f3cd765
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winioctl.h
@@ -0,0 +1,480 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINIOCTL_H
+#define __WINE_WINIOCTL_H
+
+#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
+ (DWORD)((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
+)
+
+#define DEVICE_TYPE DWORD
+
+#define FILE_DEVICE_BEEP 0x00000001
+#define FILE_DEVICE_CD_ROM 0x00000002
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
+#define FILE_DEVICE_CONTROLLER 0x00000004
+#define FILE_DEVICE_DATALINK 0x00000005
+#define FILE_DEVICE_DFS 0x00000006
+#define FILE_DEVICE_DISK 0x00000007
+#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
+#define FILE_DEVICE_FILE_SYSTEM 0x00000009
+#define FILE_DEVICE_INPORT_PORT 0x0000000a
+#define FILE_DEVICE_KEYBOARD 0x0000000b
+#define FILE_DEVICE_MAILSLOT 0x0000000c
+#define FILE_DEVICE_MIDI_IN 0x0000000d
+#define FILE_DEVICE_MIDI_OUT 0x0000000e
+#define FILE_DEVICE_MOUSE 0x0000000f
+#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
+#define FILE_DEVICE_NAMED_PIPE 0x00000011
+#define FILE_DEVICE_NETWORK 0x00000012
+#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
+#define FILE_DEVICE_NULL 0x00000015
+#define FILE_DEVICE_PARALLEL_PORT 0x00000016
+#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
+#define FILE_DEVICE_PRINTER 0x00000018
+#define FILE_DEVICE_SCANNER 0x00000019
+#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
+#define FILE_DEVICE_SERIAL_PORT 0x0000001b
+#define FILE_DEVICE_SCREEN 0x0000001c
+#define FILE_DEVICE_SOUND 0x0000001d
+#define FILE_DEVICE_STREAMS 0x0000001e
+#define FILE_DEVICE_TAPE 0x0000001f
+#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
+#define FILE_DEVICE_TRANSPORT 0x00000021
+#define FILE_DEVICE_UNKNOWN 0x00000022
+#define FILE_DEVICE_VIDEO 0x00000023
+#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
+#define FILE_DEVICE_WAVE_IN 0x00000025
+#define FILE_DEVICE_WAVE_OUT 0x00000026
+#define FILE_DEVICE_8042_PORT 0x00000027
+#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
+#define FILE_DEVICE_BATTERY 0x00000029
+#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
+#define FILE_DEVICE_MODEM 0x0000002b
+#define FILE_DEVICE_VDM 0x0000002c
+#define FILE_DEVICE_MASS_STORAGE 0x0000002d
+#define FILE_DEVICE_SMB 0x0000002e
+#define FILE_DEVICE_KS 0x0000002f
+#define FILE_DEVICE_CHANGER 0x00000030
+#define FILE_DEVICE_SMARTCARD 0x00000031
+#define FILE_DEVICE_ACPI 0x00000032
+#define FILE_DEVICE_DVD 0x00000033
+#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
+#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
+#define FILE_DEVICE_DFS_VOLUME 0x00000036
+#define FILE_DEVICE_SERENUM 0x00000037
+#define FILE_DEVICE_TERMSRV 0x00000038
+#define FILE_DEVICE_KSEC 0x00000039
+
+#define METHOD_BUFFERED 0
+#define METHOD_IN_DIRECT 1
+#define METHOD_OUT_DIRECT 2
+#define METHOD_NEITHER 3
+
+#define FILE_ANY_ACCESS 0
+#define FILE_SPECIAL_ACCESS 0
+#define FILE_READ_ACCESS FILE_READ_DATA /* file & pipe */
+#define FILE_WRITE_ACCESS FILE_WRITE_DATA /* file & pipe */
+
+#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
+#define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
+#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT,FILE_READ_DATA)
+#define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
+#define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
+
+#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
+#define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_PERSISTENT_RESERVE_IN CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
+
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_DISK_BASE FILE_DEVICE_DISK
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+
+#define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_VOLUME_BASE ((DWORD)'V')
+#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)
+
+
+/* Return Codes... should these be the same as something somewhere? */
+#define PARTITION_ENTRY_UNUSED 0x00 /* Entry unused */
+#define PARTITION_FAT_12 0x01 /* 12-bit FAT entries */
+#define PARTITION_XENIX_1 0x02 /* Xenix */
+#define PARTITION_XENIX_2 0x03 /* Xenix */
+#define PARTITION_FAT_16 0x04 /* 16-bit FAT entries */
+#define PARTITION_EXTENDED 0x05 /* Extended partition entry */
+#define PARTITION_HUGE 0x06 /* Huge partition MS-DOS V4 */
+#define PARTITION_IFS 0x07 /* IFS Partition */
+#define PARTITION_FAT32 0x0B /* FAT32 */
+#define PARTITION_FAT32_XINT13 0x0C /* FAT32 using extended int13 services */
+#define PARTITION_XINT13 0x0E /* Win95 partition using extended int13 services */
+#define PARTITION_XINT13_EXTENDED 0x0F /* Same as type 5 but uses extended int13 services */
+#define PARTITION_PREP 0x41 /* PowerPC Reference Platform (PReP) Boot Partition */
+#define PARTITION_LDM 0x42 /* Logical Disk Manager partition */
+#define PARTITION_UNIX 0x63 /* Unix */
+
+typedef enum _MEDIA_TYPE {
+ Unknown, F5_1Pt2_512, F3_1Pt44_512, F3_2Pt88_512, F3_20Pt8_512, F3_720_512, F5_360_512,
+ F5_320_512, F5_320_1024, F5_180_512, F5_160_512, RemovableMedia, FixedMedia, F3_120M_512,
+ F3_640_512, F5_640_512, F5_720_512, F3_1Pt2_512, F3_1Pt23_1024, F5_1Pt23_1024, F3_128Mb_512,
+ F3_230Mb_512, F8_256_128
+} MEDIA_TYPE, *PMEDIA_TYPE;
+
+typedef struct _FORMAT_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ DWORD StartCylinderNumber;
+ DWORD EndCylinderNumber;
+ DWORD StartHeadNumber;
+ DWORD EndHeadNumber;
+} FORMAT_PARAMETERS, *PFORMAT_PARAMETERS;
+
+typedef WORD BAD_TRACK_NUMBER;
+typedef WORD *PBAD_TRACK_NUMBER;
+
+typedef struct _FORMAT_EX_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ DWORD StartCylinderNumber;
+ DWORD EndCylinderNumber;
+ DWORD StartHeadNumber;
+ DWORD EndHeadNumber;
+ WORD FormatGapLength;
+ WORD SectorsPerTrack;
+ WORD SectorNumber[1];
+} FORMAT_EX_PARAMETERS, *PFORMAT_EX_PARAMETERS;
+
+typedef struct _DISK_GEOMETRY {
+ LARGE_INTEGER Cylinders;
+ MEDIA_TYPE MediaType;
+ DWORD TracksPerCylinder;
+ DWORD SectorsPerTrack;
+ DWORD BytesPerSector;
+} DISK_GEOMETRY, *PDISK_GEOMETRY;
+
+typedef struct _DISK_GEOMETRY_EX {
+ DISK_GEOMETRY Geometry;
+ LARGE_INTEGER DiskSize;
+ BYTE Data[1];
+} DISK_GEOMETRY_EX, *PDISK_GEOMETRY_EX;
+
+typedef struct _PARTITION_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ DWORD HiddenSectors;
+ DWORD PartitionNumber;
+ BYTE PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ BOOLEAN RewritePartition;
+} PARTITION_INFORMATION, *PPARTITION_INFORMATION;
+
+typedef struct _SET_PARTITION_INFORMATION {
+ BYTE PartitionType;
+} SET_PARTITION_INFORMATION, *PSET_PARTITION_INFORMATION;
+
+typedef struct _DRIVE_LAYOUT_INFORMATION {
+ DWORD PartitionCount;
+ DWORD Signature;
+ PARTITION_INFORMATION PartitionEntry[1];
+} DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION;
+
+typedef struct _VERIFY_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ DWORD Length;
+} VERIFY_INFORMATION, *PVERIFY_INFORMATION;
+
+typedef struct _REASSIGN_BLOCKS {
+ WORD Reserved;
+ WORD Count;
+ DWORD BlockNumber[1];
+} REASSIGN_BLOCKS, *PREASSIGN_BLOCKS;
+
+/* Start: _WIN32_WINNT >= 0x0400 */
+
+typedef struct _DISK_CONTROLLER_NUMBER {
+ DWORD ControllerNumber;
+ DWORD DiskNumber;
+} DISK_CONTROLLER_NUMBER, *PDISK_CONTROLLER_NUMBER;
+
+/* VOLUME_GET_VOLUME_DISK_EXTENTS */
+typedef struct _DISK_EXTENT {
+ DWORD DiskNumber;
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER ExtentLength;
+} DISK_EXTENT;
+
+typedef struct _VOLUME_DISK_EXTENTS {
+ DWORD NumberOfDiskExtents;
+ DISK_EXTENT Extents[1];
+} VOLUME_DISK_EXTENTS;
+
+typedef struct RETRIEVAL_POINTERS_BUFFER {
+ DWORD ExtentCount;
+ LARGE_INTEGER StartingVcn;
+ struct {
+ LARGE_INTEGER NextVcn;
+ LARGE_INTEGER Lcn;
+ } Extents[1];
+} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
+
+/* End: _WIN32_WINNT >= 0x0400 */
+
+/*
+ * NT I/O-Manager
+ */
+
+/*
+ * structures for NtQueryVolumeInformationFile
+ * (wdm.h)
+ */
+
+/* FileFsVolumeInformation = 1 */
+typedef struct _FILE_FS_VOLUME_INFORMATION {
+ LARGE_INTEGER VolumeCreationTime;
+ ULONG VolumeSerialNumber;
+ ULONG VolumeLabelLength;
+ BOOLEAN SupportsObjects;
+ WCHAR VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+/* FileFsLabelInformation = 2 */
+/*
+ unknown
+*/
+
+/* FileFsSizeInformation = 3 */
+typedef struct _FILE_FS_SIZE_INFORMATION {
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER AvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+/* FileFsDeviceInformation = 4 */
+typedef struct _FILE_FS_DEVICE_INFORMATION {
+ DEVICE_TYPE DeviceType;
+ ULONG Characteristics;
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
+
+/* FileFsAttributeInformation = 5 */
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
+ ULONG FileSystemAttribute;
+ LONG MaximumComponentNameLength;
+ ULONG FileSystemNameLength;
+ WCHAR FileSystemName[1];
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
+ LARGE_INTEGER Timeout;
+ ULONG NameLength;
+ BOOLEAN TimeoutSpecified;
+ WCHAR Name[1];
+} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
+
+typedef struct _FILE_PIPE_PEEK_BUFFER {
+ ULONG NamedPipeState;
+ ULONG ReadDataAvailable;
+ ULONG NumberOfMessages;
+ ULONG MessageLength;
+ CHAR Data[1];
+} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
+
+/* Device GUIDs */
+#ifdef DEFINE_GUID
+
+DEFINE_GUID(GUID_DEVINTERFACE_COMPORT, 0x86E0D1E0, 0x8089,
+ 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73);
+DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325,
+ 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);
+
+/* obsolete GUID names */
+#define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT
+#define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
+
+#endif /* DEFINE_GUID */
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h
new file mode 100644
index 00000000..a90bbb82
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winldap.h
@@ -0,0 +1,653 @@
+/*
+ * Copyright 2005 Hans Leidekker
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINLDAP_H
+#define __WINE_WINLDAP_H
+
+#include <windef.h>
+#include <schnlsp.h>
+
+#ifndef LDAPAPI
+#define LDAPAPI __cdecl
+#endif
+
+
+typedef enum {
+ LDAP_SUCCESS = 0x00,
+ LDAP_OPERATIONS_ERROR = 0x01,
+ LDAP_PROTOCOL_ERROR = 0x02,
+ LDAP_TIMELIMIT_EXCEEDED = 0x03,
+ LDAP_SIZELIMIT_EXCEEDED = 0x04,
+ LDAP_COMPARE_FALSE = 0x05,
+ LDAP_COMPARE_TRUE = 0x06,
+ LDAP_AUTH_METHOD_NOT_SUPPORTED = 0x07,
+ LDAP_STRONG_AUTH_REQUIRED = 0x08,
+ LDAP_REFERRAL_V2 = 0x09,
+ LDAP_PARTIAL_RESULTS = 0x09,
+ LDAP_REFERRAL = 0x0a,
+ LDAP_ADMIN_LIMIT_EXCEEDED = 0x0b,
+ LDAP_UNAVAILABLE_CRIT_EXTENSION = 0x0c,
+ LDAP_CONFIDENTIALITY_REQUIRED = 0x0d,
+ LDAP_SASL_BIND_IN_PROGRESS = 0x0e,
+
+ LDAP_NO_SUCH_ATTRIBUTE = 0x10,
+ LDAP_UNDEFINED_TYPE = 0x11,
+ LDAP_INAPPROPRIATE_MATCHING = 0x12,
+ LDAP_CONSTRAINT_VIOLATION = 0x13,
+ LDAP_ATTRIBUTE_OR_VALUE_EXISTS = 0x14,
+ LDAP_INVALID_SYNTAX = 0x15,
+
+ LDAP_NO_SUCH_OBJECT = 0x20,
+ LDAP_ALIAS_PROBLEM = 0x21,
+ LDAP_INVALID_DN_SYNTAX = 0x22,
+ LDAP_IS_LEAF = 0x23,
+ LDAP_ALIAS_DEREF_PROBLEM = 0x24,
+
+ LDAP_INAPPROPRIATE_AUTH = 0x30,
+ LDAP_INVALID_CREDENTIALS = 0x31,
+ LDAP_INSUFFICIENT_RIGHTS = 0x32,
+ LDAP_BUSY = 0x33,
+ LDAP_UNAVAILABLE = 0x34,
+ LDAP_UNWILLING_TO_PERFORM = 0x35,
+ LDAP_LOOP_DETECT = 0x36,
+ LDAP_SORT_CONTROL_MISSING = 0x3C,
+ LDAP_OFFSET_RANGE_ERROR = 0x3D,
+
+ LDAP_NAMING_VIOLATION = 0x40,
+ LDAP_OBJECT_CLASS_VIOLATION = 0x41,
+ LDAP_NOT_ALLOWED_ON_NONLEAF = 0x42,
+ LDAP_NOT_ALLOWED_ON_RDN = 0x43,
+ LDAP_ALREADY_EXISTS = 0x44,
+ LDAP_NO_OBJECT_CLASS_MODS = 0x45,
+ LDAP_RESULTS_TOO_LARGE = 0x46,
+ LDAP_AFFECTS_MULTIPLE_DSAS = 0x47,
+
+ LDAP_VIRTUAL_LIST_VIEW_ERROR = 0x4c,
+
+ LDAP_OTHER = 0x50,
+ LDAP_SERVER_DOWN = 0x51,
+ LDAP_LOCAL_ERROR = 0x52,
+ LDAP_ENCODING_ERROR = 0x53,
+ LDAP_DECODING_ERROR = 0x54,
+ LDAP_TIMEOUT = 0x55,
+ LDAP_AUTH_UNKNOWN = 0x56,
+ LDAP_FILTER_ERROR = 0x57,
+ LDAP_USER_CANCELLED = 0x58,
+ LDAP_PARAM_ERROR = 0x59,
+ LDAP_NO_MEMORY = 0x5a,
+ LDAP_CONNECT_ERROR = 0x5b,
+ LDAP_NOT_SUPPORTED = 0x5c,
+ LDAP_NO_RESULTS_RETURNED = 0x5e,
+ LDAP_CONTROL_NOT_FOUND = 0x5d,
+ LDAP_MORE_RESULTS_TO_RETURN = 0x5f,
+
+ LDAP_CLIENT_LOOP = 0x60,
+ LDAP_REFERRAL_LIMIT_EXCEEDED = 0x61
+} LDAP_RETCODE;
+
+#define LDAP_SCOPE_BASE 0x00
+#define LDAP_SCOPE_ONELEVEL 0x01
+#define LDAP_SCOPE_SUBTREE 0x02
+
+typedef struct berelement
+{
+ PCHAR opaque;
+} BerElement;
+
+#define LDAP_OPT_API_INFO 0x00
+#define LDAP_OPT_DESC 0x01
+#define LDAP_OPT_DEREF 0x02
+#define LDAP_OPT_SIZELIMIT 0x03
+#define LDAP_OPT_TIMELIMIT 0x04
+#define LDAP_OPT_THREAD_FN_PTRS 0x05
+#define LDAP_OPT_REBIND_FN 0x06
+#define LDAP_OPT_REBIND_ARG 0x07
+#define LDAP_OPT_REFERRALS 0x08
+#define LDAP_OPT_RESTART 0x09
+#define LDAP_OPT_SSL 0x0a
+#define LDAP_OPT_IO_FN_PTRS 0x0b
+#define LDAP_OPT_CACHE_FN_PTRS 0x0d
+#define LDAP_OPT_CACHE_STRATEGY 0x0e
+#define LDAP_OPT_CACHE_ENABLE 0x0f
+#define LDAP_OPT_REFERRAL_HOP_LIMIT 0x10
+#define LDAP_OPT_PROTOCOL_VERSION 0x11
+#define LDAP_OPT_VERSION 0x11
+#define LDAP_OPT_API_FEATURE_INFO 0x15
+#define LDAP_OPT_HOST_NAME 0x30
+#define LDAP_OPT_ERROR_NUMBER 0x31
+#define LDAP_OPT_ERROR_STRING 0x32
+#define LDAP_OPT_SERVER_ERROR 0x33
+#define LDAP_OPT_SERVER_EXT_ERROR 0x34
+#define LDAP_OPT_PING_KEEP_ALIVE 0x36
+#define LDAP_OPT_PING_WAIT_TIME 0x37
+#define LDAP_OPT_PING_LIMIT 0x38
+#define LDAP_OPT_DNSDOMAIN_NAME 0x3b
+#define LDAP_OPT_GETDSNAME_FLAGS 0x3d
+#define LDAP_OPT_HOST_REACHABLE 0x3e
+#define LDAP_OPT_PROMPT_CREDENTIALS 0x3f
+#define LDAP_OPT_TCP_KEEPALIVE 0x40
+#define LDAP_OPT_FAST_CONCURRENT_BIND 0x41
+#define LDAP_OPT_SEND_TIMEOUT 0x42
+#define LDAP_OPT_REFERRAL_CALLBACK 0x70
+#define LDAP_OPT_CLIENT_CERTIFICATE 0x80
+#define LDAP_OPT_SERVER_CERTIFICATE 0x81
+#define LDAP_OPT_AUTO_RECONNECT 0x91
+#define LDAP_OPT_SSPI_FLAGS 0x92
+#define LDAP_OPT_SSL_INFO 0x93
+#define LDAP_OPT_REF_DEREF_CONN_PER_MSG 0x94
+#define LDAP_OPT_TLS LDAP_OPT_SSL
+#define LDAP_OPT_TLS_INFO LDAP_OPT_SSL_INFO
+#define LDAP_OPT_SIGN 0x95
+#define LDAP_OPT_ENCRYPT 0x96
+#define LDAP_OPT_SASL_METHOD 0x97
+#define LDAP_OPT_AREC_EXCLUSIVE 0x98
+#define LDAP_OPT_SECURITY_CONTEXT 0x99
+#define LDAP_OPT_ROOTDSE_CACHE 0x9a
+
+#define LDAP_OPT_ON ((void *)1)
+#define LDAP_OPT_OFF ((void *)0)
+
+#define LDAP_VERSION1 1
+#define LDAP_VERSION2 2
+#define LDAP_VERSION3 3
+#define LDAP_VERSION LDAP_VERSION2
+
+#define LDAP_MSG_ONE 0
+#define LDAP_MSG_ALL 1
+#define LDAP_MSG_RECEIVED 2
+
+#define LDAP_RES_BIND 0x61
+#define LDAP_RES_SEARCH_ENTRY 0x64
+#define LDAP_RES_SEARCH_RESULT 0x65
+#define LDAP_RES_MODIFY 0x67
+#define LDAP_RES_ADD 0x69
+#define LDAP_RES_DELETE 0x6b
+#define LDAP_RES_MODRDN 0x6d
+#define LDAP_RES_COMPARE 0x6f
+#define LDAP_RES_SESSION 0x72
+#define LDAP_RES_REFERRAL 0x73
+#define LDAP_RES_EXTENDED 0x78
+#define LDAP_RES_ANY (-1)
+
+typedef struct ldap
+{
+ struct
+ {
+ UINT_PTR sb_sd;
+ UCHAR Reserved1[41];
+ ULONG_PTR sb_naddr;
+ UCHAR Reserved2[24];
+ } ld_sb;
+
+ PCHAR ld_host;
+ ULONG ld_version;
+ UCHAR ld_lberoptions;
+ ULONG ld_deref;
+ ULONG ld_timelimit;
+ ULONG ld_sizelimit;
+ ULONG ld_errno;
+ PCHAR ld_matched;
+ PCHAR ld_error;
+ ULONG ld_msgid;
+ UCHAR Reserved3[25];
+ ULONG ld_cldaptries;
+ ULONG ld_cldaptimeout;
+ ULONG ld_refhoplimit;
+ ULONG ld_options;
+} LDAP, *PLDAP;
+
+#define LDAP_MOD_ADD 0x00
+#define LDAP_MOD_DELETE 0x01
+#define LDAP_MOD_REPLACE 0x02
+#define LDAP_MOD_BVALUES 0x80
+
+typedef struct ldapmodA {
+ ULONG mod_op;
+ PCHAR mod_type;
+ union {
+ PCHAR *modv_strvals;
+ struct berval **modv_bvals;
+ } mod_vals;
+} LDAPModA, *PLDAPModA;
+
+typedef struct ldapmodW {
+ ULONG mod_op;
+ PWCHAR mod_type;
+ union {
+ PWCHAR *modv_strvals;
+ struct berval **modv_bvals;
+ } mod_vals;
+} LDAPModW, *PLDAPModW;
+
+DECL_WINELIB_TYPE_AW(LDAPMod)
+DECL_WINELIB_TYPE_AW(PLDAPMod)
+
+typedef struct l_timeval
+{
+ LONG tv_sec;
+ LONG tv_usec;
+} LDAP_TIMEVAL, *PLDAP_TIMEVAL;
+
+typedef struct ldapmsg
+{
+ ULONG lm_msgid;
+ ULONG lm_msgtype;
+
+ PVOID lm_ber;
+
+ struct ldapmsg *lm_chain;
+ struct ldapmsg *lm_next;
+ ULONG lm_time;
+
+ PLDAP Connection;
+ PVOID Request;
+ ULONG lm_returncode;
+ USHORT lm_referral;
+ BOOLEAN lm_chased;
+ BOOLEAN lm_eom;
+ BOOLEAN ConnectionReferenced;
+} LDAPMessage, *PLDAPMessage;
+
+#define LAPI_MAJOR_VER1 1
+#define LAPI_MINOR_VER1 1
+
+typedef struct ldap_version_info
+{
+ ULONG lv_size;
+ ULONG lv_major;
+ ULONG lv_minor;
+} LDAP_VERSION_INFO, *PLDAP_VERSION_INFO;
+
+typedef struct berval
+{
+ ULONG bv_len;
+ PCHAR bv_val;
+} LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue;
+
+typedef struct ldapcontrolA
+{
+ PCHAR ldctl_oid;
+ struct berval ldctl_value;
+ BOOLEAN ldctl_iscritical;
+} LDAPControlA, *PLDAPControlA;
+
+typedef struct ldapcontrolW
+{
+ PWCHAR ldctl_oid;
+ struct berval ldctl_value;
+ BOOLEAN ldctl_iscritical;
+} LDAPControlW, *PLDAPControlW;
+
+DECL_WINELIB_TYPE_AW(LDAPControl)
+DECL_WINELIB_TYPE_AW(PLDAPControl)
+
+typedef struct ldapvlvinfo
+{
+ int ldvlv_version;
+ ULONG ldvlv_before_count;
+ ULONG ldvlv_after_count;
+ ULONG ldvlv_offset;
+ ULONG ldvlv_count;
+ PBERVAL ldvlv_attrvalue;
+ PBERVAL ldvlv_context;
+ VOID *ldvlv_extradata;
+} LDAPVLVInfo, *PLDAPVLVInfo;
+
+typedef struct ldapsearch LDAPSearch, *PLDAPSearch;
+
+typedef struct ldapsortkeyA
+{
+ PCHAR sk_attrtype;
+ PCHAR sk_matchruleoid;
+ BOOLEAN sk_reverseorder;
+} LDAPSortKeyA, *PLDAPSortKeyA;
+
+typedef struct ldapsortkeyW
+{
+ PWCHAR sk_attrtype;
+ PWCHAR sk_matchruleoid;
+ BOOLEAN sk_reverseorder;
+} LDAPSortKeyW, *PLDAPSortKeyW;
+
+DECL_WINELIB_TYPE_AW(LDAPSortKey)
+DECL_WINELIB_TYPE_AW(PLDAPSortKey)
+
+#define LDAP_API_INFO_VERSION 1
+
+typedef struct ldapapiinfoA
+{
+ int ldapai_info_version;
+ int ldapai_api_version;
+ int ldapai_protocol_version;
+ char **ldapai_extensions;
+ char *ldapai_vendor_name;
+ int ldapai_vendor_version;
+} LDAPAPIInfoA;
+
+typedef struct ldapapiinfoW
+{
+ int ldapai_info_version;
+ int ldapai_api_version;
+ int ldapai_protocol_version;
+ PWCHAR *ldapai_extensions;
+ PWCHAR ldapai_vendor_name;
+ int ldapai_vendor_version;
+} LDAPAPIInfoW;
+
+DECL_WINELIB_TYPE_AW(LDAPAPIInfo)
+
+#define LDAP_FEATURE_INFO_VERSION 1
+
+typedef struct ldap_apifeature_infoA
+{
+ int ldapaif_info_version;
+ char *ldapaif_name;
+ int ldapaif_version;
+} LDAPAPIFeatureInfoA;
+
+typedef struct ldap_apifeature_infoW
+{
+ int ldapaif_info_version;
+ PWCHAR ldapaif_name;
+ int ldapaif_version;
+} LDAPAPIFeatureInfoW;
+
+DECL_WINELIB_TYPE_AW(LDAPAPIFeatureInfo)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+LDAP * CDECL cldap_openA(PCHAR,ULONG);
+LDAP * CDECL cldap_openW(PWCHAR,ULONG);
+#define cldap_open WINELIB_NAME_AW(cldap_open)
+ULONG CDECL ldap_abandon(LDAP*,ULONG);
+ULONG CDECL ldap_addA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_addW(LDAP*,PWCHAR,LDAPModW*[]);
+#define ldap_add WINELIB_NAME_AW(ldap_add)
+ULONG CDECL ldap_add_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_add_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define ldap_add_ext WINELIB_NAME_AW(ldap_add_ext)
+ULONG CDECL ldap_add_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_add_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
+#define ldap_add_ext_s WINELIB_NAME_AW(ldap_add_ext_s)
+ULONG CDECL ldap_add_sA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_add_sW(LDAP*,PWCHAR,LDAPModW*[]);
+#define ldap_add_s WINELIB_NAME_AW(ldap_add_s)
+ULONG CDECL ldap_bindA(LDAP*,PCHAR,PCHAR,ULONG);
+ULONG CDECL ldap_bindW(LDAP*,PWCHAR,PWCHAR,ULONG);
+#define ldap_bind WINELIB_NAME_AW(ldap_bind)
+ULONG CDECL ldap_bind_sA(LDAP*,PCHAR,PCHAR,ULONG);
+ULONG CDECL ldap_bind_sW(LDAP*,PWCHAR,PWCHAR,ULONG);
+#define ldap_bind_s WINELIB_NAME_AW(ldap_bind_s)
+ULONG CDECL ldap_check_filterA(LDAP*,PCHAR);
+ULONG CDECL ldap_check_filterW(LDAP*,PWCHAR);
+#define ldap_check_filter WINELIB_NAME_AW(ldap_check_filter)
+ULONG CDECL ldap_cleanup(HANDLE);
+ULONG CDECL ldap_close_extended_op(LDAP*,ULONG);
+LDAP* CDECL ldap_conn_from_msg(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_compareA(LDAP*,PCHAR,PCHAR,PCHAR);
+ULONG CDECL ldap_compareW(LDAP*,PWCHAR,PWCHAR,PWCHAR);
+#define ldap_compare WINELIB_NAME_AW(ldap_compare)
+ULONG CDECL ldap_compare_extA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_compare_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define ldap_compare_ext WINELIB_NAME_AW(ldap_compare_ext)
+ULONG CDECL ldap_compare_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_compare_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*);
+#define ldap_compare_ext_s WINELIB_NAME_AW(ldap_compare_ext_s)
+ULONG CDECL ldap_compare_sA(LDAP*,PCHAR,PCHAR,PCHAR);
+ULONG CDECL ldap_compare_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR);
+#define ldap_compare_s WINELIB_NAME_AW(ldap_compare_s)
+ULONG CDECL ldap_connect(LDAP*,struct l_timeval*);
+ULONG CDECL ldap_control_freeA(LDAPControlA*);
+ULONG CDECL ldap_control_freeW(LDAPControlW*);
+#define ldap_control_free WINELIB_NAME_AW(ldap_control_free)
+ULONG CDECL ldap_controls_freeA(LDAPControlA**);
+ULONG CDECL ldap_controls_freeW(LDAPControlW**);
+#define ldap_controls_free WINELIB_NAME_AW(ldap_controls_free)
+ULONG CDECL ldap_count_entries(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_count_references(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_count_values_len(struct berval**);
+ULONG CDECL ldap_count_valuesA(PCHAR*);
+ULONG CDECL ldap_count_valuesW(PWCHAR*);
+#define ldap_count_values WINELIB_NAME_AW(ldap_count_values)
+ULONG CDECL ldap_create_page_controlA(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlA*);
+ULONG CDECL ldap_create_page_controlW(PLDAP,ULONG,struct berval*,UCHAR,PLDAPControlW*);
+#define ldap_create_page_control WINELIB_NAME_AW(ldap_create_page_control)
+ULONG CDECL ldap_create_sort_controlA(PLDAP,PLDAPSortKeyA*,UCHAR,PLDAPControlA*);
+ULONG CDECL ldap_create_sort_controlW(PLDAP,PLDAPSortKeyW*,UCHAR,PLDAPControlW*);
+#define ldap_create_sort_control WINELIB_NAME_AW(ldap_create_sort_control)
+INT CDECL ldap_create_vlv_controlA(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlA*);
+INT CDECL ldap_create_vlv_controlW(PLDAP,PLDAPVLVInfo,UCHAR,PLDAPControlW*);
+#define ldap_create_vlv_control WINELIB_NAME_AW(ldap_create_vlv_control)
+ULONG CDECL ldap_deleteA(LDAP*,PCHAR);
+ULONG CDECL ldap_deleteW(LDAP*,PWCHAR);
+#define ldap_delete WINELIB_NAME_AW(ldap_delete)
+ULONG CDECL ldap_delete_extA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_delete_extW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define ldap_delete_ext WINELIB_NAME_AW(ldap_delete_ext)
+ULONG CDECL ldap_delete_ext_sA(LDAP*,PCHAR,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_delete_ext_sW(LDAP*,PWCHAR,PLDAPControlW*,PLDAPControlW*);
+#define ldap_delete_ext_s WINELIB_NAME_AW(ldap_delete_ext_s)
+ULONG CDECL ldap_delete_sA(LDAP*,PCHAR);
+ULONG CDECL ldap_delete_sW(LDAP*,PWCHAR);
+#define ldap_delete_s WINELIB_NAME_AW(ldap_delete_s)
+PCHAR CDECL ldap_dn2ufnA(PCHAR);
+PWCHAR CDECL ldap_dn2ufnW(PWCHAR);
+#define ldap_dn2ufn WINELIB_NAME_AW(ldap_dn2ufn)
+ULONG CDECL ldap_encode_sort_controlA(PLDAP,PLDAPSortKeyA*,PLDAPControlA,BOOLEAN);
+ULONG CDECL ldap_encode_sort_controlW(PLDAP,PLDAPSortKeyW*,PLDAPControlW,BOOLEAN);
+#define ldap_encode_sort_control WINELIB_NAME_AW(ldap_encode_sort_control)
+PCHAR CDECL ldap_err2stringA(ULONG);
+PWCHAR CDECL ldap_err2stringW(ULONG);
+#define ldap_err2string WINELIB_NAME_AW(ldap_err2string)
+ULONG CDECL ldap_escape_filter_elementA(PCHAR,ULONG,PCHAR,ULONG);
+ULONG CDECL ldap_escape_filter_elementW(PCHAR,ULONG,PWCHAR,ULONG);
+#define ldap_escape_filter_element WINELIB_NAME_AW(ldap_escape_filter_element)
+PCHAR* CDECL ldap_explode_dnA(PCHAR,ULONG);
+PWCHAR* CDECL ldap_explode_dnW(PWCHAR,ULONG);
+#define ldap_explode_dn WINELIB_NAME_AW(ldap_explode_dn)
+ULONG CDECL ldap_extended_operationA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_extended_operationW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define ldap_extended_operation WINELIB_NAME_AW(ldap_extended_operation)
+ULONG CDECL ldap_extended_operation_sA(LDAP*,PCHAR,struct berval*,PLDAPControlA*,PLDAPControlA*,PCHAR*,struct berval**);
+ULONG CDECL ldap_extended_operation_sW(LDAP*,PWCHAR,struct berval*,PLDAPControlW*,PLDAPControlW*,PWCHAR*,struct berval**);
+#define ldap_extended_operation_s WINELIB_NAME_AW(ldap_extended_operation_s)
+PCHAR CDECL ldap_first_attributeA(LDAP*,LDAPMessage*,BerElement**);
+PWCHAR CDECL ldap_first_attributeW(LDAP*,LDAPMessage*,BerElement**);
+#define ldap_first_attribute WINELIB_NAME_AW(ldap_first_attribute)
+LDAPMessage* CDECL ldap_first_entry(LDAP*,LDAPMessage*);
+LDAPMessage* CDECL ldap_first_reference(LDAP*,LDAPMessage*);
+ULONG CDECL ldap_free_controlsA(LDAPControlA**);
+ULONG CDECL ldap_free_controlsW(LDAPControlW**);
+#define ldap_free_controls WINELIB_NAME_AW(ldap_free_controls)
+PCHAR CDECL ldap_get_dnA(LDAP*,LDAPMessage*);
+PWCHAR CDECL ldap_get_dnW(LDAP*,LDAPMessage*);
+#define ldap_get_dn WINELIB_NAME_AW(ldap_get_dn)
+ULONG CDECL ldap_get_next_page(PLDAP,PLDAPSearch,ULONG,ULONG*);
+ULONG CDECL ldap_get_next_page_s(PLDAP,PLDAPSearch,struct l_timeval*,ULONG,ULONG*,LDAPMessage**);
+ULONG CDECL ldap_get_optionA(LDAP*,int,void*);
+ULONG CDECL ldap_get_optionW(LDAP*,int,void*);
+#define ldap_get_option WINELIB_NAME_AW(ldap_get_option)
+ULONG CDECL ldap_get_paged_count(LDAP*,PLDAPSearch,ULONG*,LDAPMessage*);
+PCHAR* CDECL ldap_get_valuesA(LDAP*,LDAPMessage*,PCHAR);
+PWCHAR* CDECL ldap_get_valuesW(LDAP*,LDAPMessage*,PWCHAR);
+#define ldap_get_values WINELIB_NAME_AW(ldap_get_values)
+struct berval ** CDECL ldap_get_values_lenA(LDAP*,LDAPMessage*,PCHAR);
+struct berval ** CDECL ldap_get_values_lenW(LDAP*,LDAPMessage*,PWCHAR);
+#define ldap_get_values_len WINELIB_NAME_AW(ldap_get_values_len)
+LDAP* CDECL ldap_initA(const PCHAR,ULONG);
+LDAP* CDECL ldap_initW(const PWCHAR,ULONG);
+#define ldap_init WINELIB_NAME_AW(ldap_init)
+VOID CDECL ldap_memfreeA(PCHAR);
+VOID CDECL ldap_memfreeW(PWCHAR);
+#define ldap_memfree WINELIB_NAME_AW(ldap_memfree)
+ULONG CDECL ldap_modifyA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_modifyW(LDAP*,PWCHAR,LDAPModW*[]);
+#define ldap_modify WINELIB_NAME_AW(ldap_modify)
+ULONG CDECL ldap_modify_extA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_modify_extW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define ldap_modify_ext WINELIB_NAME_AW(ldap_modify_ext)
+ULONG CDECL ldap_modify_ext_sA(LDAP*,PCHAR,LDAPModA*[],PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_modify_ext_sW(LDAP*,PWCHAR,LDAPModW*[],PLDAPControlW*,PLDAPControlW*);
+#define ldap_modify_ext_s WINELIB_NAME_AW(ldap_modify_ext_s)
+ULONG CDECL ldap_modify_sA(LDAP*,PCHAR,LDAPModA*[]);
+ULONG CDECL ldap_modify_sW(LDAP*,PWCHAR,LDAPModW*[]);
+#define ldap_modify_s WINELIB_NAME_AW(ldap_modify_s)
+ULONG CDECL ldap_modrdnA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_modrdnW(LDAP*,PWCHAR,PWCHAR);
+#define ldap_modrdn WINELIB_NAME_AW(ldap_modrdn)
+ULONG CDECL ldap_modrdn2A(LDAP*,PCHAR,PCHAR,INT);
+ULONG CDECL ldap_modrdn2W(LDAP*,PWCHAR,PWCHAR,INT);
+#define ldap_modrdn2 WINELIB_NAME_AW(ldap_modrdn2)
+ULONG CDECL ldap_modrdn2_sA(LDAP*,PCHAR,PCHAR,INT);
+ULONG CDECL ldap_modrdn2_sW(LDAP*,PWCHAR,PWCHAR,INT);
+#define ldap_modrdn2_s WINELIB_NAME_AW(ldap_modrdn2_s)
+ULONG CDECL ldap_modrdn_sA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_modrdn_sW(LDAP*,PWCHAR,PWCHAR);
+#define ldap_modrdn_s WINELIB_NAME_AW(ldap_modrdn_s)
+ULONG CDECL ldap_msgfree(LDAPMessage*);
+PCHAR CDECL ldap_next_attributeA(LDAP*,LDAPMessage*,BerElement*);
+PWCHAR CDECL ldap_next_attributeW(LDAP*,LDAPMessage*,BerElement*);
+#define ldap_next_attribute WINELIB_NAME_AW(ldap_next_attribute)
+LDAPMessage * CDECL ldap_next_entry(LDAP*,LDAPMessage*);
+LDAP * CDECL ldap_openA(PCHAR,ULONG);
+LDAP * CDECL ldap_openW(PWCHAR,ULONG);
+#define ldap_open WINELIB_NAME_AW(ldap_open)
+ULONG CDECL ldap_parse_extended_resultA(LDAP*,LDAPMessage*,PCHAR*,struct berval**,BOOLEAN);
+ULONG CDECL ldap_parse_extended_resultW(LDAP*,LDAPMessage*,PWCHAR*,struct berval**,BOOLEAN);
+#define ldap_parse_extended_result WINELIB_NAME_AW(ldap_parse_extended_result)
+ULONG CDECL ldap_parse_page_controlA(LDAP*,PLDAPControlA*,ULONG*,struct berval**);
+ULONG CDECL ldap_parse_page_controlW(LDAP*,PLDAPControlW*,ULONG*,struct berval**);
+#define ldap_parse_page_control WINELIB_NAME_AW(ldap_parse_page_control)
+ULONG CDECL ldap_parse_referenceA(LDAP*,LDAPMessage*,PCHAR**);
+ULONG CDECL ldap_parse_referenceW(LDAP*,LDAPMessage*,PWCHAR**);
+#define ldap_parse_reference WINELIB_NAME_AW(ldap_parse_reference)
+ULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG);
+ULONG CDECL ldap_parse_resultA(LDAP*,LDAPMessage*,ULONG*,PCHAR*,PCHAR*,PCHAR**,PLDAPControlA**,BOOLEAN);
+ULONG CDECL ldap_parse_resultW(LDAP*,LDAPMessage*,ULONG*,PWCHAR*,PWCHAR*,PWCHAR**,PLDAPControlW**,BOOLEAN);
+#define ldap_parse_result WINELIB_NAME_AW(ldap_parse_result)
+ULONG CDECL ldap_parse_sort_controlA(LDAP*,PLDAPControlA*,ULONG*,PCHAR*);
+ULONG CDECL ldap_parse_sort_controlW(LDAP*,PLDAPControlW*,ULONG*,PWCHAR*);
+#define ldap_parse_sort_control WINELIB_NAME_AW(ldap_parse_sort_control)
+INT CDECL ldap_parse_vlv_controlA(PLDAP,PLDAPControlA*,PULONG,PULONG,PBERVAL*,PINT);
+INT CDECL ldap_parse_vlv_controlW(PLDAP,PLDAPControlW*,PULONG,PULONG,PBERVAL*,PINT);
+#define ldap_parse_vlv_control WINELIB_NAME_AW(ldap_parse_vlv_control)
+void CDECL ldap_perror(LDAP*,const PCHAR);
+ULONG CDECL ldap_rename_extA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*,ULONG*);
+ULONG CDECL ldap_rename_extW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*,ULONG*);
+#define ldap_rename_ext WINELIB_NAME_AW(ldap_rename_ext)
+ULONG CDECL ldap_rename_ext_sA(LDAP*,PCHAR,PCHAR,PCHAR,INT,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_rename_ext_sW(LDAP*,PWCHAR,PWCHAR,PWCHAR,INT,PLDAPControlW*,PLDAPControlW*);
+#define ldap_rename_ext_s WINELIB_NAME_AW(ldap_rename_ext_s)
+ULONG CDECL ldap_result(LDAP*,ULONG,ULONG,struct l_timeval*,LDAPMessage**);
+ULONG CDECL ldap_result2error(LDAP*,LDAPMessage*,ULONG);
+ULONG CDECL ldap_sasl_bindA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*);
+ULONG CDECL ldap_sasl_bindW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,int*);
+#define ldap_sasl_bind WINELIB_NAME_AW(ldap_sasl_bind)
+ULONG CDECL ldap_sasl_bind_sA(LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,PBERVAL*);
+ULONG CDECL ldap_sasl_bind_sW(LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,PBERVAL*);
+#define ldap_sasl_bind_s WINELIB_NAME_AW(ldap_sasl_bind_s)
+ULONG CDECL ldap_simple_bindA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_simple_bindW(LDAP*,PWCHAR,PWCHAR);
+#define ldap_simple_bind WINELIB_NAME_AW(ldap_simple_bind)
+ULONG CDECL ldap_simple_bind_sA(LDAP*,PCHAR,PCHAR);
+ULONG CDECL ldap_simple_bind_sW(LDAP*,PWCHAR,PWCHAR);
+#define ldap_simple_bind_s WINELIB_NAME_AW(ldap_simple_bind_s)
+ULONG CDECL ldap_search_abandon_page(PLDAP,PLDAPSearch);
+ULONG CDECL ldap_searchA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG);
+ULONG CDECL ldap_searchW(LDAP*,PWCHAR,ULONG,PWCHAR,PCHAR[],ULONG);
+#define ldap_search WINELIB_NAME_AW(ldap_search)
+ULONG CDECL ldap_search_extA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,
+ PLDAPControlA*,ULONG,ULONG,ULONG*);
+ULONG CDECL ldap_search_extW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,
+ PLDAPControlW*,ULONG,ULONG,ULONG*);
+#define ldap_search_ext WINELIB_NAME_AW(ldap_search_ext)
+ULONG CDECL ldap_search_ext_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,
+ PLDAPControlA*,struct l_timeval*,ULONG,LDAPMessage**);
+ULONG CDECL ldap_search_ext_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,
+ PLDAPControlW*,struct l_timeval*,ULONG,LDAPMessage**);
+#define ldap_search_ext_s WINELIB_NAME_AW(ldap_search_ext_s)
+PLDAPSearch CDECL ldap_search_init_pageA(PLDAP,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,PLDAPControlA*,
+ PLDAPControlA*,ULONG,ULONG,PLDAPSortKeyA*);
+PLDAPSearch CDECL ldap_search_init_pageW(PLDAP,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,PLDAPControlW*,
+ PLDAPControlW*,ULONG,ULONG, PLDAPSortKeyW*);
+#define ldap_search_init_page WINELIB_NAME_AW(ldap_search_init_page)
+ULONG CDECL ldap_search_sA(LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,LDAPMessage**);
+ULONG CDECL ldap_search_sW(LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG,LDAPMessage**);
+#define ldap_search_s WINELIB_NAME_AW(ldap_search_s)
+ULONG CDECL ldap_search_stA(LDAP*,const PCHAR,ULONG,const PCHAR,PCHAR[],ULONG,
+ struct l_timeval*,LDAPMessage**);
+ULONG CDECL ldap_search_stW(LDAP*,const PWCHAR,ULONG,const PWCHAR,PWCHAR[],ULONG,
+ struct l_timeval*,LDAPMessage**);
+#define ldap_search_st WINELIB_NAME_AW(ldap_search_st)
+ULONG CDECL ldap_set_optionA(LDAP*,int,void*);
+ULONG CDECL ldap_set_optionW(LDAP*,int,void*);
+#define ldap_set_option WINELIB_NAME_AW(ldap_set_option)
+LDAP * CDECL ldap_sslinitA(PCHAR,ULONG,int);
+LDAP * CDECL ldap_sslinitW(PWCHAR,ULONG,int);
+#define ldap_sslinit WINELIB_NAME_AW(ldap_sslinit)
+ULONG CDECL ldap_start_tls_sA(LDAP*,PULONG,LDAPMessage**,PLDAPControlA*,PLDAPControlA*);
+ULONG CDECL ldap_start_tls_sW(LDAP*,PULONG,LDAPMessage**,PLDAPControlW*,PLDAPControlW*);
+#define ldap_start_tls_s WINELIB_NAME_AW(ldap_start_tls_s)
+ULONG CDECL ldap_startup(PLDAP_VERSION_INFO,HANDLE*);
+BOOLEAN CDECL ldap_stop_tls_s(LDAP*);
+ULONG CDECL ldap_ufn2dnA(PCHAR,PCHAR*);
+ULONG CDECL ldap_ufn2dnW(PWCHAR,PWCHAR*);
+#define ldap_ufn2dn WINELIB_NAME_AW(ldap_ufn2dn)
+ULONG CDECL ldap_unbind(LDAP*);
+ULONG CDECL ldap_unbind_s(LDAP*);
+ULONG CDECL ldap_value_freeA(PCHAR*);
+ULONG CDECL ldap_value_freeW(PWCHAR*);
+#define ldap_value_free WINELIB_NAME_AW(ldap_value_free)
+ULONG CDECL ldap_value_free_len(struct berval**);
+
+BerElement* CDECL ber_alloc_t(INT);
+BERVAL* CDECL ber_bvdup(BERVAL*);
+void CDECL ber_bvecfree(PBERVAL*);
+void CDECL ber_bvfree(BERVAL*);
+ULONG CDECL ber_first_element(BerElement*,ULONG*,CHAR**);
+INT CDECL ber_flatten(BerElement*,PBERVAL*);
+void CDECL ber_free(BerElement*,INT);
+BerElement* CDECL ber_init(BERVAL*);
+ULONG CDECL ber_next_element(BerElement*,ULONG*,CHAR*);
+ULONG CDECL ber_peek_tag(BerElement*,ULONG*);
+INT CDECL ber_printf(BerElement*,PCHAR,...);
+ULONG CDECL ber_skip_tag(BerElement*,ULONG*);
+INT CDECL ber_scanf(BerElement*,PCHAR,...);
+
+ULONG CDECL LdapGetLastError(void);
+ULONG CDECL LdapMapErrorToWin32(ULONG);
+int CDECL LdapUnicodeToUTF8(LPCWSTR,int,LPSTR,int);
+int CDECL LdapUTF8ToUnicode(LPCSTR,int,LPWSTR,int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINLDAP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h
new file mode 100644
index 00000000..86ab9173
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnetwk.h
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINNETWK_H_
+#define _WINNETWK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Network types
+ */
+
+#define WNNC_NET_MSNET 0x00010000
+#define WNNC_NET_LANMAN 0x00020000
+#define WNNC_NET_NETWARE 0x00030000
+#define WNNC_NET_VINES 0x00040000
+#define WNNC_NET_10NET 0x00050000
+#define WNNC_NET_LOCUS 0x00060000
+#define WNNC_NET_SUN_PC_NFS 0x00070000
+#define WNNC_NET_LANSTEP 0x00080000
+#define WNNC_NET_9TILES 0x00090000
+#define WNNC_NET_LANTASTIC 0x000A0000
+#define WNNC_NET_AS400 0x000B0000
+#define WNNC_NET_FTP_NFS 0x000C0000
+#define WNNC_NET_PATHWORKS 0x000D0000
+#define WNNC_NET_LIFENET 0x000E0000
+#define WNNC_NET_POWERLAN 0x000F0000
+#define WNNC_NET_BWNFS 0x00100000
+#define WNNC_NET_COGENT 0x00110000
+#define WNNC_NET_FARALLON 0x00120000
+#define WNNC_NET_APPLETALK 0x00130000
+#define WNNC_NET_INTERGRAPH 0x00140000
+
+/*
+ * Network resources
+ */
+
+#define RESOURCE_CONNECTED 0x00000001
+#define RESOURCE_GLOBALNET 0x00000002
+#define RESOURCE_REMEMBERED 0x00000003
+#define RESOURCE_RECENT 0x00000004
+#define RESOURCE_CONTEXT 0x00000005
+
+#define RESOURCETYPE_ANY 0x00000000
+#define RESOURCETYPE_DISK 0x00000001
+#define RESOURCETYPE_PRINT 0x00000002
+#define RESOURCETYPE_RESERVED 0x00000008
+#define RESOURCETYPE_UNKNOWN 0xFFFFFFFF
+
+#define RESOURCEUSAGE_CONNECTABLE 0x00000001
+#define RESOURCEUSAGE_CONTAINER 0x00000002
+#define RESOURCEUSAGE_NOLOCALDEVICE 0x00000004
+#define RESOURCEUSAGE_SIBLING 0x00000008
+#define RESOURCEUSAGE_ATTACHED 0x00000010
+#define RESOURCEUSAGE_ALL (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED)
+#define RESOURCEUSAGE_RESERVED 0x80000000
+
+#define RESOURCEDISPLAYTYPE_GENERIC 0x00000000
+#define RESOURCEDISPLAYTYPE_DOMAIN 0x00000001
+#define RESOURCEDISPLAYTYPE_SERVER 0x00000002
+#define RESOURCEDISPLAYTYPE_SHARE 0x00000003
+#define RESOURCEDISPLAYTYPE_FILE 0x00000004
+#define RESOURCEDISPLAYTYPE_GROUP 0x00000005
+#define RESOURCEDISPLAYTYPE_NETWORK 0x00000006
+#define RESOURCEDISPLAYTYPE_ROOT 0x00000007
+#define RESOURCEDISPLAYTYPE_SHAREADMIN 0x00000008
+#define RESOURCEDISPLAYTYPE_DIRECTORY 0x00000009
+#define RESOURCEDISPLAYTYPE_TREE 0x0000000A
+
+typedef struct {
+ DWORD dwScope;
+ DWORD dwType;
+ DWORD dwDisplayType;
+ DWORD dwUsage;
+ LPSTR lpLocalName;
+ LPSTR lpRemoteName;
+ LPSTR lpComment ;
+ LPSTR lpProvider;
+} NETRESOURCEA,*LPNETRESOURCEA;
+
+typedef struct {
+ DWORD dwScope;
+ DWORD dwType;
+ DWORD dwDisplayType;
+ DWORD dwUsage;
+ LPWSTR lpLocalName;
+ LPWSTR lpRemoteName;
+ LPWSTR lpComment ;
+ LPWSTR lpProvider;
+} NETRESOURCEW,*LPNETRESOURCEW;
+
+DECL_WINELIB_TYPE_AW(NETRESOURCE)
+DECL_WINELIB_TYPE_AW(LPNETRESOURCE)
+
+
+/*
+ * Network connections
+ */
+
+#define NETPROPERTY_PERSISTENT 1
+
+#define CONNECT_UPDATE_PROFILE 0x00000001
+#define CONNECT_UPDATE_RECENT 0x00000002
+#define CONNECT_TEMPORARY 0x00000004
+#define CONNECT_INTERACTIVE 0x00000008
+#define CONNECT_PROMPT 0x00000010
+#define CONNECT_NEED_DRIVE 0x00000020
+#define CONNECT_REFCOUNT 0x00000040
+#define CONNECT_REDIRECT 0x00000080
+#define CONNECT_LOCALDRIVE 0x00000100
+#define CONNECT_CURRENT_MEDIA 0x00000200
+
+DWORD WINAPI WNetAddConnectionA(LPCSTR,LPCSTR,LPCSTR);
+DWORD WINAPI WNetAddConnectionW(LPCWSTR,LPCWSTR,LPCWSTR);
+#define WNetAddConnection WINELIB_NAME_AW(WNetAddConnection)
+DWORD WINAPI WNetAddConnection2A(LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI WNetAddConnection2W(LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
+#define WNetAddConnection2 WINELIB_NAME_AW(WNetAddConnection2)
+DWORD WINAPI WNetAddConnection3A(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD);
+DWORD WINAPI WNetAddConnection3W(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD);
+#define WNetAddConnection3 WINELIB_NAME_AW(WNetAddConnection3)
+DWORD WINAPI WNetCancelConnectionA(LPCSTR,BOOL);
+DWORD WINAPI WNetCancelConnectionW(LPCWSTR,BOOL);
+#define WNetCancelConnection WINELIB_NAME_AW(WNetCancelConnection)
+DWORD WINAPI WNetCancelConnection2A(LPCSTR,DWORD,BOOL);
+DWORD WINAPI WNetCancelConnection2W(LPCWSTR,DWORD,BOOL);
+#define WNetCancelConnection2 WINELIB_NAME_AW(WNetCancelConnection2)
+DWORD WINAPI WNetGetConnectionA(LPCSTR,LPSTR,LPDWORD);
+DWORD WINAPI WNetGetConnectionW(LPCWSTR,LPWSTR,LPDWORD);
+#define WNetGetConnection WINELIB_NAME_AW(WNetGetConnection)
+DWORD WINAPI WNetGetLastErrorA(LPDWORD,LPSTR,DWORD,LPSTR,DWORD);
+DWORD WINAPI WNetGetLastErrorW(LPDWORD,LPWSTR,DWORD,LPWSTR,DWORD);
+#define WNetGetLastError WINELIB_NAME_AW(WNetGetLastError)
+DWORD WINAPI WNetRestoreConnectionA(HWND,LPCSTR);
+DWORD WINAPI WNetRestoreConnectionW(HWND,LPCWSTR);
+#define WNetRestoreConnection WINELIB_NAME_AW(WNetRestoreConnection)
+DWORD WINAPI WNetUseConnectionA(HWND,LPNETRESOURCEA,LPCSTR,LPCSTR,DWORD,LPSTR,LPDWORD,LPDWORD);
+DWORD WINAPI WNetUseConnectionW(HWND,LPNETRESOURCEW,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPDWORD,LPDWORD);
+#define WNetUseConnection WINELIB_NAME_AW(WNetUseConnection)
+DWORD WINAPI WNetSetConnectionA(LPCSTR,DWORD,LPVOID);
+DWORD WINAPI WNetSetConnectionW(LPCWSTR,DWORD,LPVOID);
+#define WNetSetConnection WINELIB_NAME_AW(WNetSetConnection)
+
+/*
+ * Network connection dialogs
+ */
+
+typedef struct {
+ DWORD cbStructure; /* size of this structure in bytes */
+ HWND hwndOwner; /* owner window for the dialog */
+ LPNETRESOURCEA lpConnRes;/* Requested Resource info */
+ DWORD dwFlags; /* flags (see below) */
+ DWORD dwDevNum; /* number of devices connected to */
+} CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA;
+typedef struct {
+ DWORD cbStructure; /* size of this structure in bytes */
+ HWND hwndOwner; /* owner window for the dialog */
+ LPNETRESOURCEW lpConnRes;/* Requested Resource info */
+ DWORD dwFlags; /* flags (see below) */
+ DWORD dwDevNum; /* number of devices connected to */
+} CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW;
+
+DECL_WINELIB_TYPE_AW(CONNECTDLGSTRUCT)
+DECL_WINELIB_TYPE_AW(LPCONNECTDLGSTRUCT)
+
+#define CONNDLG_RO_PATH 0x00000001 /* Resource path should be read-only */
+#define CONNDLG_CONN_POINT 0x00000002 /* Netware -style movable connection point enabled */
+#define CONNDLG_USE_MRU 0x00000004 /* Use MRU combobox */
+#define CONNDLG_HIDE_BOX 0x00000008 /* Hide persistent connect checkbox */
+#define CONNDLG_PERSIST 0x00000010 /* Force persistent connection */
+#define CONNDLG_NOT_PERSIST 0x00000020 /* Force connection NOT persistent */
+
+typedef struct {
+ DWORD cbStructure; /* size of this structure in bytes */
+ HWND hwndOwner; /* owner window for the dialog */
+ LPSTR lpLocalName; /* local device name */
+ LPSTR lpRemoteName; /* network resource name */
+ DWORD dwFlags; /* flags */
+} DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA;
+typedef struct {
+ DWORD cbStructure; /* size of this structure in bytes */
+ HWND hwndOwner; /* owner window for the dialog */
+ LPWSTR lpLocalName; /* local device name */
+ LPWSTR lpRemoteName; /* network resource name */
+ DWORD dwFlags; /* flags */
+} DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW;
+
+DECL_WINELIB_TYPE_AW(DISCDLGSTRUCT)
+DECL_WINELIB_TYPE_AW(LPDISCDLGSTRUCT)
+
+#define DISC_UPDATE_PROFILE 0x00000001
+#define DISC_NO_FORCE 0x00000040
+
+DWORD WINAPI WNetConnectionDialog(HWND,DWORD);
+DWORD WINAPI WNetDisconnectDialog(HWND,DWORD);
+DWORD WINAPI WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA);
+DWORD WINAPI WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW);
+#define WNetConnectionDialog1 WINELIB_NAME_AW(WNetConnectionDialog1)
+DWORD WINAPI WNetDisconnectDialog1A(LPDISCDLGSTRUCTA);
+DWORD WINAPI WNetDisconnectDialog1W(LPDISCDLGSTRUCTW);
+#define WNetDisconnectDialog1 WINELIB_NAME_AW(WNetDisconnectDialog1)
+
+/*
+ * Network browsing
+ */
+
+DWORD WINAPI WNetOpenEnumA(DWORD,DWORD,DWORD,LPNETRESOURCEA,LPHANDLE);
+DWORD WINAPI WNetOpenEnumW(DWORD,DWORD,DWORD,LPNETRESOURCEW,LPHANDLE);
+#define WNetOpenEnum WINELIB_NAME_AW(WNetOpenEnum)
+DWORD WINAPI WNetEnumResourceA(HANDLE,LPDWORD,LPVOID,LPDWORD);
+DWORD WINAPI WNetEnumResourceW(HANDLE,LPDWORD,LPVOID,LPDWORD);
+#define WNetEnumResource WINELIB_NAME_AW(WNetEnumResource)
+DWORD WINAPI WNetGetResourceInformationA(LPNETRESOURCEA,LPVOID,LPDWORD,LPSTR*);
+DWORD WINAPI WNetGetResourceInformationW(LPNETRESOURCEW,LPVOID,LPDWORD,LPWSTR*);
+#define WNetGetResourceInformation WINELIB_NAME_AW(WNetGetResourceInformation)
+DWORD WINAPI WNetGetResourceParentA(LPNETRESOURCEA,LPVOID,LPDWORD);
+DWORD WINAPI WNetGetResourceParentW(LPNETRESOURCEW,LPVOID,LPDWORD);
+#define WNetGetResourceParent WINELIB_NAME_AW(WNetGetResourceParent)
+DWORD WINAPI WNetCloseEnum(HANDLE);
+
+/*
+ * Universal naming
+ */
+
+#define UNIVERSAL_NAME_INFO_LEVEL 0x00000001
+#define REMOTE_NAME_INFO_LEVEL 0x00000002
+
+typedef struct {
+ LPSTR lpUniversalName;
+} UNIVERSAL_NAME_INFOA, *LPUNIVERSAL_NAME_INFOA;
+typedef struct {
+ LPWSTR lpUniversalName;
+} UNIVERSAL_NAME_INFOW, *LPUNIVERSAL_NAME_INFOW;
+
+DECL_WINELIB_TYPE_AW(UNIVERSAL_NAME_INFO)
+DECL_WINELIB_TYPE_AW(LPUNIVERSAL_NAME_INFO)
+
+typedef struct {
+ LPSTR lpUniversalName;
+ LPSTR lpConnectionName;
+ LPSTR lpRemainingPath;
+}REMOTE_NAME_INFOA, *LPREMOTE_NAME_INFOA;
+typedef struct {
+ LPWSTR lpUniversalName;
+ LPWSTR lpConnectionName;
+ LPWSTR lpRemainingPath;
+}REMOTE_NAME_INFOW, *LPREMOTE_NAME_INFOW;
+
+DECL_WINELIB_TYPE_AW(REMOTE_NAME_INFO)
+DECL_WINELIB_TYPE_AW(LPREMOTE_NAME_INFO)
+
+DWORD WINAPI WNetGetUniversalNameA(LPCSTR,DWORD,LPVOID,LPDWORD);
+DWORD WINAPI WNetGetUniversalNameW(LPCWSTR,DWORD,LPVOID,LPDWORD);
+#define WNetGetUniversalName WINELIB_NAME_AW(WNetGetUniversalName)
+
+/*
+ * Other
+ */
+
+DWORD WINAPI WNetGetUserA(LPCSTR,LPSTR,LPDWORD);
+DWORD WINAPI WNetGetUserW(LPCWSTR,LPWSTR,LPDWORD);
+#define WNetGetUser WINELIB_NAME_AW(WNetGetUser)
+
+#define WNFMT_MULTILINE 0x01
+#define WNFMT_ABBREVIATED 0x02
+#define WNFMT_INENUM 0x10
+#define WNFMT_CONNECTION 0x20
+
+DWORD WINAPI WNetGetProviderNameA(DWORD,LPSTR,LPDWORD);
+DWORD WINAPI WNetGetProviderNameW(DWORD,LPWSTR,LPDWORD);
+#define WNetGetProviderName WINELIB_NAME_AW(WNetGetProviderName)
+
+typedef struct {
+ DWORD cbStructure;
+ DWORD dwProviderVersion;
+ DWORD dwStatus;
+ DWORD dwCharacteristics;
+ DWORD dwHandle;
+ WORD wNetType;
+ DWORD dwPrinters;
+ DWORD dwDrives;
+} NETINFOSTRUCT, *LPNETINFOSTRUCT;
+
+#define NETINFO_DLL16 0x00000001
+#define NETINFO_DISKRED 0x00000004
+#define NETINFO_PRINTERRED 0x00000008
+
+DWORD WINAPI WNetGetNetworkInformationA(LPCSTR,LPNETINFOSTRUCT);
+DWORD WINAPI WNetGetNetworkInformationW(LPCWSTR,LPNETINFOSTRUCT);
+#define WNetGetNetworkInformation WINELIB_NAME_AW(WNetGetNetworkInformation)
+
+
+/*
+ * Status codes
+ */
+
+#define WN_SUCCESS NO_ERROR
+#define WN_NO_ERROR NO_ERROR
+#define WN_NOT_SUPPORTED ERROR_NOT_SUPPORTED
+#define WN_CANCEL ERROR_CANCELLED
+#define WN_RETRY ERROR_RETRY
+#define WN_NET_ERROR ERROR_UNEXP_NET_ERR
+#define WN_MORE_DATA ERROR_MORE_DATA
+#define WN_BAD_POINTER ERROR_INVALID_ADDRESS
+#define WN_BAD_VALUE ERROR_INVALID_PARAMETER
+#define WN_BAD_USER ERROR_BAD_USERNAME
+#define WN_BAD_PASSWORD ERROR_INVALID_PASSWORD
+#define WN_ACCESS_DENIED ERROR_ACCESS_DENIED
+#define WN_FUNCTION_BUSY ERROR_BUSY
+#define WN_WINDOWS_ERROR ERROR_UNEXP_NET_ERR
+#define WN_OUT_OF_MEMORY ERROR_NOT_ENOUGH_MEMORY
+#define WN_NO_NETWORK ERROR_NO_NETWORK
+#define WN_EXTENDED_ERROR ERROR_EXTENDED_ERROR
+#define WN_BAD_LEVEL ERROR_INVALID_LEVEL
+#define WN_BAD_HANDLE ERROR_INVALID_HANDLE
+#define WN_NOT_INITIALIZING ERROR_ALREADY_INITIALIZED
+#define WN_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
+
+#define WN_NOT_CONNECTED ERROR_NOT_CONNECTED
+#define WN_OPEN_FILES ERROR_OPEN_FILES
+#define WN_DEVICE_IN_USE ERROR_DEVICE_IN_USE
+#define WN_BAD_NETNAME ERROR_BAD_NET_NAME
+#define WN_BAD_LOCALNAME ERROR_BAD_DEVICE
+#define WN_ALREADY_CONNECTED ERROR_ALREADY_ASSIGNED
+#define WN_DEVICE_ERROR ERROR_GEN_FAILURE
+#define WN_CONNECTION_CLOSED ERROR_CONNECTION_UNAVAIL
+#define WN_NO_NET_OR_BAD_PATH ERROR_NO_NET_OR_BAD_PATH
+#define WN_BAD_PROVIDER ERROR_BAD_PROVIDER
+#define WN_CANNOT_OPEN_PROFILE ERROR_CANNOT_OPEN_PROFILE
+#define WN_BAD_PROFILE ERROR_BAD_PROFILE
+#define WN_BAD_DEV_TYPE ERROR_BAD_DEV_TYPE
+#define WN_DEVICE_ALREADY_REMEMBERED ERROR_DEVICE_ALREADY_REMEMBERED
+
+#define WN_NO_MORE_ENTRIES ERROR_NO_MORE_ITEMS
+#define WN_NOT_CONTAINER ERROR_NOT_CONTAINER
+
+#define WN_NOT_AUTHENTICATED ERROR_NOT_AUTHENTICATED
+#define WN_NOT_LOGGED_ON ERROR_NOT_LOGGED_ON
+#define WN_NOT_VALIDATED ERROR_NO_LOGON_SERVERS
+
+
+/*
+ * Multinet (for Shell)
+ */
+
+typedef struct {
+ DWORD cbStructure;
+ DWORD dwFlags;
+ DWORD dwSpeed;
+ DWORD dwDelay;
+ DWORD dwOptDataSize;
+} NETCONNECTINFOSTRUCT,*LPNETCONNECTINFOSTRUCT;
+
+#define WNCON_FORNETCARD 0x00000001
+#define WNCON_NOTROUTED 0x00000002
+#define WNCON_SLOWLINK 0x00000004
+#define WNCON_DYNAMIC 0x00000008
+
+DWORD WINAPI MultinetGetConnectionPerformanceA(LPNETRESOURCEA,LPNETCONNECTINFOSTRUCT);
+DWORD WINAPI MultinetGetConnectionPerformanceW(LPNETRESOURCEW,LPNETCONNECTINFOSTRUCT);
+#define MultinetGetConnectionPerformance WINELIB_NAME_AW(MultinetGetConnectionPerformance)
+DWORD WINAPI MultinetGetErrorTextA(DWORD,DWORD,DWORD);
+DWORD WINAPI MultinetGetErrorTextW(DWORD,DWORD,DWORD);
+#define MultinetGetErrorText WINELIB_NAME_AW(MultinetGetErrorText)
+
+/*
+ * Password cache
+ */
+
+/* WNetEnumCachedPasswords */
+typedef struct tagPASSWORD_CACHE_ENTRY
+{
+ WORD cbEntry;
+ WORD cbResource;
+ WORD cbPassword;
+ BYTE iEntry;
+ BYTE nType;
+ BYTE abResource[1];
+} PASSWORD_CACHE_ENTRY;
+
+typedef BOOL (CALLBACK *ENUMPASSWORDPROC)(PASSWORD_CACHE_ENTRY *, DWORD);
+UINT WINAPI WNetEnumCachedPasswords( LPSTR, WORD, BYTE, ENUMPASSWORDPROC, DWORD);
+DWORD WINAPI WNetGetCachedPassword( LPSTR, WORD, LPSTR, LPWORD, BYTE );
+DWORD WINAPI WNetCachePassword( LPSTR, WORD, LPSTR, WORD, BYTE, WORD );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINNETWK_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h
new file mode 100644
index 00000000..185a502f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls.h
@@ -0,0 +1,896 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINNLS_H
+#define __WINE_WINNLS_H
+#ifndef NONLS
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _NORMALIZE_
+# define WINNORMALIZEAPI DECLSPEC_IMPORT
+#else
+# define WINNORMALIZEAPI
+#endif
+
+/* Country codes */
+#define CTRY_DEFAULT (0)
+#define CTRY_ALBANIA (355)
+#define CTRY_ALGERIA (213)
+#define CTRY_ARGENTINA (54)
+#define CTRY_ARMENIA (374)
+#define CTRY_AUSTRALIA (61)
+#define CTRY_AUSTRIA (43)
+#define CTRY_AZERBAIJAN (994)
+#define CTRY_BAHRAIN (973)
+#define CTRY_BELARUS (375)
+#define CTRY_BELGIUM (32)
+#define CTRY_BELIZE (501)
+#define CTRY_BOLIVIA (591)
+#define CTRY_BRAZIL (55)
+#define CTRY_BRUNEI_DARUSSALAM (673)
+#define CTRY_BULGARIA (359)
+#define CTRY_CANADA (2)
+#define CTRY_CARIBBEAN (1)
+#define CTRY_CHILE (56)
+#define CTRY_COLOMBIA (57)
+#define CTRY_COSTA_RICA (506)
+#define CTRY_CROATIA (385)
+#define CTRY_CZECH (420)
+#define CTRY_DENMARK (45)
+#define CTRY_DOMINICAN_REPUBLIC (1)
+#define CTRY_ECUADOR (593)
+#define CTRY_EGYPT (20)
+#define CTRY_EL_SALVADOR (503)
+#define CTRY_ESTONIA (372)
+#define CTRY_FAEROE_ISLANDS (298)
+#define CTRY_FINLAND (358)
+#define CTRY_FRANCE (33)
+#define CTRY_GEORGIA (995)
+#define CTRY_GERMANY (49)
+#define CTRY_GREECE (30)
+#define CTRY_GUATEMALA (502)
+#define CTRY_HONDURAS (504)
+#define CTRY_HONG_KONG (852)
+#define CTRY_HUNGARY (36)
+#define CTRY_ICELAND (354)
+#define CTRY_INDIA (91)
+#define CTRY_INDONESIA (62)
+#define CTRY_IRAN (981)
+#define CTRY_IRAQ (964)
+#define CTRY_IRELAND (353)
+#define CTRY_ISRAEL (972)
+#define CTRY_ITALY (39)
+#define CTRY_JAMAICA (1)
+#define CTRY_JAPAN (81)
+#define CTRY_JORDAN (962)
+#define CTRY_KAZAKSTAN (7)
+#define CTRY_KENYA (254)
+#define CTRY_KUWAIT (965)
+#define CTRY_KYRGYZSTAN (996)
+#define CTRY_LATVIA (371)
+#define CTRY_LEBANON (961)
+#define CTRY_LIBYA (218)
+#define CTRY_LIECHTENSTEIN (41)
+#define CTRY_LITHUANIA (370)
+#define CTRY_LUXEMBOURG (352)
+#define CTRY_MACAU (853)
+#define CTRY_MACEDONIA (389)
+#define CTRY_MALAYSIA (60)
+#define CTRY_MALDIVES (960)
+#define CTRY_MEXICO (52)
+#define CTRY_MONACO (33)
+#define CTRY_MONGOLIA (976)
+#define CTRY_MOROCCO (212)
+#define CTRY_NETHERLANDS (31)
+#define CTRY_NEW_ZEALAND (64)
+#define CTRY_NICARAGUA (505)
+#define CTRY_NORWAY (47)
+#define CTRY_OMAN (968)
+#define CTRY_PAKISTAN (92)
+#define CTRY_PANAMA (507)
+#define CTRY_PARAGUAY (595)
+#define CTRY_PERU (51)
+#define CTRY_PHILIPPINES (63)
+#define CTRY_POLAND (48)
+#define CTRY_PORTUGAL (351)
+#define CTRY_PRCHINA (86)
+#define CTRY_PUERTO_RICO (1)
+#define CTRY_QATAR (974)
+#define CTRY_ROMANIA (40)
+#define CTRY_RUSSIA (7)
+#define CTRY_SAUDI_ARABIA (966)
+#define CTRY_SERBIA (381)
+#define CTRY_SINGAPORE (65)
+#define CTRY_SLOVAK (421)
+#define CTRY_SLOVENIA (386)
+#define CTRY_SOUTH_AFRICA (27)
+#define CTRY_SOUTH_KOREA (82)
+#define CTRY_SPAIN (34)
+#define CTRY_SWEDEN (46)
+#define CTRY_SWITZERLAND (41)
+#define CTRY_SYRIA (963)
+#define CTRY_TAIWAN (886)
+#define CTRY_TATARSTAN (7)
+#define CTRY_THAILAND (66)
+#define CTRY_TRINIDAD_Y_TOBAGO (1)
+#define CTRY_TUNISIA (216)
+#define CTRY_TURKEY (90)
+#define CTRY_UAE (971)
+#define CTRY_UKRAINE (380)
+#define CTRY_UNITED_KINGDOM (44)
+#define CTRY_UNITED_STATES (1)
+#define CTRY_URUGUAY (598)
+#define CTRY_UZBEKISTAN (7)
+#define CTRY_VENEZUELA (58)
+#define CTRY_VIET_NAM (84)
+#define CTRY_YEMEN (967)
+#define CTRY_ZIMBABWE (263)
+
+#define MB_PRECOMPOSED 0x01
+#define MB_COMPOSITE 0x02
+#define MB_USEGLYPHCHARS 0x04
+#define MB_ERR_INVALID_CHARS 0x08
+
+#define LGRPID_INSTALLED 0x1
+#define LGRPID_SUPPORTED 0x2
+
+#define LCID_INSTALLED 0x1
+#define LCID_SUPPORTED 0x2
+#define LCID_ALTERNATE_SORTS 0x4
+
+#define LOCALE_ALL 0x00
+#define LOCALE_WINDOWS 0x01
+#define LOCALE_SUPPLEMENTAL 0x02
+#define LOCALE_ALTERNATE_SORTS 0x04
+#define LOCALE_REPLACEMENT 0x08
+#define LOCALE_NEUTRALDATA 0x10
+#define LOCALE_SPECIFICDATA 0x20
+
+/* Locale flags */
+#define LOCALE_NOUSEROVERRIDE 0x80000000
+#define LOCALE_USE_CP_ACP 0x40000000
+#define LOCALE_RETURN_NUMBER 0x20000000
+#define LOCALE_RETURN_GENITIVE_NAMES 0x10000000
+
+/* Locale information types */
+#define LOCALE_ILANGUAGE 0x0001
+#define LOCALE_SLANGUAGE 0x0002
+#define LOCALE_SENGLANGUAGE 0x1001
+#define LOCALE_SENGLISHLANGUAGENAME 0x1001
+#define LOCALE_SABBREVLANGNAME 0x0003
+#define LOCALE_SNATIVELANGNAME 0x0004
+#define LOCALE_SNATIVELANGUAGENAME 0x0004
+#define LOCALE_ICOUNTRY 0x0005
+#define LOCALE_SCOUNTRY 0x0006
+#define LOCALE_SLOCALIZEDCOUNTRYNAME 0x0006
+#define LOCALE_SENGCOUNTRY 0x1002
+#define LOCALE_SENGLISHCOUNTRYNAME 0x1002
+#define LOCALE_SABBREVCTRYNAME 0x0007
+#define LOCALE_SNATIVECTRYNAME 0x0008
+#define LOCALE_SNATIVECOUNTRYNAME 0x0008
+#define LOCALE_IDEFAULTLANGUAGE 0x0009
+#define LOCALE_IDEFAULTCOUNTRY 0x000A
+#define LOCALE_IDEFAULTCODEPAGE 0x000B
+#define LOCALE_IDEFAULTANSICODEPAGE 0x1004
+#define LOCALE_IDEFAULTMACCODEPAGE 0x1011
+#define LOCALE_SLIST 0x000C
+#define LOCALE_IMEASURE 0x000D
+#define LOCALE_SDECIMAL 0x000E
+#define LOCALE_STHOUSAND 0x000F
+#define LOCALE_SGROUPING 0x0010
+#define LOCALE_IDIGITS 0x0011
+#define LOCALE_ILZERO 0x0012
+#define LOCALE_INEGNUMBER 0x1010
+#define LOCALE_SNATIVEDIGITS 0x0013
+#define LOCALE_SCURRENCY 0x0014
+#define LOCALE_SINTLSYMBOL 0x0015
+#define LOCALE_SMONDECIMALSEP 0x0016
+#define LOCALE_SMONTHOUSANDSEP 0x0017
+#define LOCALE_SMONGROUPING 0x0018
+#define LOCALE_ICURRDIGITS 0x0019
+#define LOCALE_IINTLCURRDIGITS 0x001A
+#define LOCALE_ICURRENCY 0x001B
+#define LOCALE_INEGCURR 0x001C
+#define LOCALE_SDATE 0x001D
+#define LOCALE_STIME 0x001E
+#define LOCALE_SSHORTDATE 0x001F
+#define LOCALE_SLONGDATE 0x0020
+#define LOCALE_STIMEFORMAT 0x1003
+#define LOCALE_IDATE 0x0021
+#define LOCALE_ILDATE 0x0022
+#define LOCALE_ITIME 0x0023
+#define LOCALE_ITIMEMARKPOSN 0x1005
+#define LOCALE_ICENTURY 0x0024
+#define LOCALE_ITLZERO 0x0025
+#define LOCALE_IDAYLZERO 0x0026
+#define LOCALE_IMONLZERO 0x0027
+#define LOCALE_S1159 0x0028
+#define LOCALE_S2359 0x0029
+#define LOCALE_ICALENDARTYPE 0x1009
+#define LOCALE_IOPTIONALCALENDAR 0x100B
+#define LOCALE_IFIRSTDAYOFWEEK 0x100C
+#define LOCALE_IFIRSTWEEKOFYEAR 0x100D
+#define LOCALE_SDAYNAME1 0x002A
+#define LOCALE_SDAYNAME2 0x002B
+#define LOCALE_SDAYNAME3 0x002C
+#define LOCALE_SDAYNAME4 0x002D
+#define LOCALE_SDAYNAME5 0x002E
+#define LOCALE_SDAYNAME6 0x002F
+#define LOCALE_SDAYNAME7 0x0030
+#define LOCALE_SABBREVDAYNAME1 0x0031
+#define LOCALE_SABBREVDAYNAME2 0x0032
+#define LOCALE_SABBREVDAYNAME3 0x0033
+#define LOCALE_SABBREVDAYNAME4 0x0034
+#define LOCALE_SABBREVDAYNAME5 0x0035
+#define LOCALE_SABBREVDAYNAME6 0x0036
+#define LOCALE_SABBREVDAYNAME7 0x0037
+#define LOCALE_SMONTHNAME1 0x0038
+#define LOCALE_SMONTHNAME2 0x0039
+#define LOCALE_SMONTHNAME3 0x003A
+#define LOCALE_SMONTHNAME4 0x003B
+#define LOCALE_SMONTHNAME5 0x003C
+#define LOCALE_SMONTHNAME6 0x003D
+#define LOCALE_SMONTHNAME7 0x003E
+#define LOCALE_SMONTHNAME8 0x003F
+#define LOCALE_SMONTHNAME9 0x0040
+#define LOCALE_SMONTHNAME10 0x0041
+#define LOCALE_SMONTHNAME11 0x0042
+#define LOCALE_SMONTHNAME12 0x0043
+#define LOCALE_SMONTHNAME13 0x100E
+#define LOCALE_SABBREVMONTHNAME1 0x0044
+#define LOCALE_SABBREVMONTHNAME2 0x0045
+#define LOCALE_SABBREVMONTHNAME3 0x0046
+#define LOCALE_SABBREVMONTHNAME4 0x0047
+#define LOCALE_SABBREVMONTHNAME5 0x0048
+#define LOCALE_SABBREVMONTHNAME6 0x0049
+#define LOCALE_SABBREVMONTHNAME7 0x004A
+#define LOCALE_SABBREVMONTHNAME8 0x004B
+#define LOCALE_SABBREVMONTHNAME9 0x004C
+#define LOCALE_SABBREVMONTHNAME10 0x004D
+#define LOCALE_SABBREVMONTHNAME11 0x004E
+#define LOCALE_SABBREVMONTHNAME12 0x004F
+#define LOCALE_SABBREVMONTHNAME13 0x100F
+#define LOCALE_SPOSITIVESIGN 0x0050
+#define LOCALE_SNEGATIVESIGN 0x0051
+#define LOCALE_IPOSSIGNPOSN 0x0052
+#define LOCALE_INEGSIGNPOSN 0x0053
+#define LOCALE_IPOSSYMPRECEDES 0x0054
+#define LOCALE_IPOSSEPBYSPACE 0x0055
+#define LOCALE_INEGSYMPRECEDES 0x0056
+#define LOCALE_INEGSEPBYSPACE 0x0057
+#define LOCALE_FONTSIGNATURE 0x0058
+#define LOCALE_SISO639LANGNAME 0x0059
+#define LOCALE_SISO3166CTRYNAME 0x005A
+#define LOCALE_IGEOID 0x005B
+#define LOCALE_SNAME 0x005C
+#define LOCALE_SDURATION 0x005D
+#define LOCALE_SKEYBOARDSTOINSTALL 0x005E
+#define LOCALE_SSHORTESTDAYNAME1 0x0060
+#define LOCALE_SSHORTESTDAYNAME2 0x0061
+#define LOCALE_SSHORTESTDAYNAME3 0x0062
+#define LOCALE_SSHORTESTDAYNAME4 0x0063
+#define LOCALE_SSHORTESTDAYNAME5 0x0064
+#define LOCALE_SSHORTESTDAYNAME6 0x0065
+#define LOCALE_SSHORTESTDAYNAME7 0x0066
+#define LOCALE_SISO639LANGNAME2 0x0067
+#define LOCALE_SISO3166CTRYNAME2 0x0068
+#define LOCALE_SNAN 0x0069
+#define LOCALE_SPOSINFINITY 0x006A
+#define LOCALE_SNEGINFINITY 0x006B
+#define LOCALE_SSCRIPTS 0x006C
+#define LOCALE_SPARENT 0x006D
+#define LOCALE_SCONSOLEFALLBACKNAME 0x006E
+#define LOCALE_SLANGDISPLAYNAME 0x006F
+#define LOCALE_SLOCALIZEDLANGUAGENAME 0x006F
+#define LOCALE_IREADINGLAYOUT 0x0070
+#define LOCALE_INEUTRAL 0x0071
+#define LOCALE_SENGLISHDISPLAYNAME 0x0072
+#define LOCALE_SNATIVEDISPLAYNAME 0x0073
+#define LOCALE_INEGATIVEPERCENT 0x0074
+#define LOCALE_IPOSITIVEPERCENT 0x0075
+#define LOCALE_SPERCENT 0x0076
+#define LOCALE_SPERMILLE 0x0077
+#define LOCALE_SMONTHDAY 0x0078
+#define LOCALE_SSHORTTIME 0x0079
+#define LOCALE_SOPENTYPELANGUAGETAG 0X007A
+#define LOCALE_SSORTLOCALE 0x007B
+
+#define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012
+#define LOCALE_IPAPERSIZE 0x100A
+#define LOCALE_SENGCURRNAME 0x1007
+#define LOCALE_SNATIVECURRNAME 0x1008
+#define LOCALE_SYEARMONTH 0x1006
+#define LOCALE_SSORTNAME 0x1013
+#define LOCALE_IDIGITSUBSTITUTION 0x1014
+
+/* Locale name special values */
+#if defined(__GNUC__)
+# define LOCALE_NAME_INVARIANT (const WCHAR []){ 0 }
+#elif defined(_MSC_VER)
+# define LOCALE_NAME_INVARIANT L""
+#else
+static const WCHAR LOCALE_NAME_INVARIANT[] = { 0 };
+#endif
+
+#if defined(__GNUC__)
+# define LOCALE_NAME_SYSTEM_DEFAULT (const WCHAR []){'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0}
+#elif defined(_MSC_VER)
+# define LOCALE_NAME_SYSTEM_DEFAULT L"!sys-default-locale"
+#else
+static const WCHAR LOCALE_NAME_SYSTEM_DEFAULT[] = {'!','s','y','s','-','d','e','f','a','u','l','t','-','l','o','c','a','l','e',0};
+#endif
+
+#define LOCALE_NAME_USER_DEFAULT NULL
+
+#define LOCALE_IDEFAULTUNIXCODEPAGE 0x1030 /* Wine extension */
+
+#define NORM_IGNORECASE 0x00000001
+#define NORM_IGNORENONSPACE 0x00000002
+#define NORM_IGNORESYMBOLS 0x00000004
+#define SORT_DIGITSASNUMBERS 0x00000008
+#define LINGUISTIC_IGNORECASE 0x00000010
+#define LINGUISTIC_IGNOREDIACRITIC 0x00000020
+#define SORT_STRINGSORT 0x00001000 /* Take punctuation into account */
+#define NORM_IGNOREKANATYPE 0x00010000
+#define NORM_IGNOREWIDTH 0x00020000
+#define NORM_LINGUISTIC_CASING 0x08000000
+
+#define CP_ACP 0
+#define CP_OEMCP 1
+#define CP_MACCP 2
+#define CP_THREAD_ACP 3
+#define CP_SYMBOL 42
+#define CP_UTF7 65000
+#define CP_UTF8 65001
+
+#define CP_UNIXCP 65010 /* Wine extension */
+
+#define CP_INSTALLED 0x1
+#define CP_SUPPORTED 0x2
+
+#define HIGH_SURROGATE_START 0xd800
+#define HIGH_SURROGATE_END 0xdbff
+#define LOW_SURROGATE_START 0xdc00
+#define LOW_SURROGATE_END 0xdfff
+
+#define IS_HIGH_SURROGATE(ch) ((ch) >= HIGH_SURROGATE_START && (ch) <= HIGH_SURROGATE_END)
+#define IS_LOW_SURROGATE(ch) ((ch) >= LOW_SURROGATE_START && (ch) <= LOW_SURROGATE_END)
+#define IS_SURROGATE_PAIR(high,low) (IS_HIGH_SURROGATE(high) && IS_LOW_SURROGATE(low))
+
+#define WC_DISCARDNS 0x0010
+#define WC_SEPCHARS 0x0020
+#define WC_DEFAULTCHAR 0x0040
+#define WC_ERR_INVALID_CHARS 0x0080
+#define WC_COMPOSITECHECK 0x0200
+#define WC_NO_BEST_FIT_CHARS 0x0400
+
+#define MAP_FOLDCZONE 0x0010
+#define MAP_PRECOMPOSED 0x0020
+#define MAP_COMPOSITE 0x0040
+#define MAP_FOLDDIGITS 0x0080
+#define MAP_EXPAND_LIGATURES 0x2000
+
+
+/* String mapping flags */
+#define LCMAP_LOWERCASE 0x00000100 /* Make lower-case */
+#define LCMAP_UPPERCASE 0x00000200 /* Make upper-case */
+#define LCMAP_SORTKEY 0x00000400 /* Create a sort key */
+#define LCMAP_BYTEREV 0x00000800 /* Reverse the result */
+
+#define LCMAP_HIRAGANA 0x00100000 /* Transform Japanese katakana into hiragana */
+#define LCMAP_KATAKANA 0x00200000 /* Transform Japanese hiragana into katakana */
+#define LCMAP_HALFWIDTH 0x00400000 /* Use single byte chars in output */
+#define LCMAP_FULLWIDTH 0x00800000 /* Use double byte chars in output */
+
+#define LCMAP_LINGUISTIC_CASING 0x01000000 /* Change case by using language context */
+#define LCMAP_SIMPLIFIED_CHINESE 0x02000000 /* Transform Chinese traditional into simplified */
+#define LCMAP_TRADITIONAL_CHINESE 0x04000000 /* Transform Chinese simplified into traditional */
+
+/* Date and time formatting flags */
+#define DATE_SHORTDATE 0x01 /* Short date format */
+#define DATE_LONGDATE 0x02 /* Long date format */
+#define DATE_USE_ALT_CALENDAR 0x04 /* Use an Alternate calendar */
+#define DATE_YEARMONTH 0x08 /* Year/month format */
+#define DATE_LTRREADING 0x10 /* Add LTR reading marks */
+#define DATE_RTLREADING 0x20 /* Add RTL reading marks */
+
+#define TIME_FORCE24HOURFORMAT 0x08 /* Always use 24 hour clock */
+#define TIME_NOTIMEMARKER 0x04 /* show no AM/PM */
+#define TIME_NOSECONDS 0x02 /* show no seconds */
+#define TIME_NOMINUTESORSECONDS 0x01 /* show no minutes either */
+
+/* Unicode char type flags */
+#define CT_CTYPE1 0x0001 /* usual ctype */
+#define CT_CTYPE2 0x0002 /* bidirectional layout info */
+#define CT_CTYPE3 0x0004 /* textprocessing info */
+
+/* Type 1 flags */
+#define C1_UPPER 0x0001
+#define C1_LOWER 0x0002
+#define C1_DIGIT 0x0004
+#define C1_SPACE 0x0008
+#define C1_PUNCT 0x0010
+#define C1_CNTRL 0x0020
+#define C1_BLANK 0x0040
+#define C1_XDIGIT 0x0080
+#define C1_ALPHA 0x0100
+#define C1_DEFINED 0x0200
+
+/* Type 2 flags */
+#define C2_LEFTTORIGHT 0x0001
+#define C2_RIGHTTOLEFT 0x0002
+#define C2_EUROPENUMBER 0x0003
+#define C2_EUROPESEPARATOR 0x0004
+#define C2_EUROPETERMINATOR 0x0005
+#define C2_ARABICNUMBER 0x0006
+#define C2_COMMONSEPARATOR 0x0007
+#define C2_BLOCKSEPARATOR 0x0008
+#define C2_SEGMENTSEPARATOR 0x0009
+#define C2_WHITESPACE 0x000A
+#define C2_OTHERNEUTRAL 0x000B
+#define C2_NOTAPPLICABLE 0x0000
+
+/* Type 3 flags */
+#define C3_NONSPACING 0x0001
+#define C3_DIACRITIC 0x0002
+#define C3_VOWELMARK 0x0004
+#define C3_SYMBOL 0x0008
+#define C3_KATAKANA 0x0010
+#define C3_HIRAGANA 0x0020
+#define C3_HALFWIDTH 0x0040
+#define C3_FULLWIDTH 0x0080
+#define C3_IDEOGRAPH 0x0100
+#define C3_KASHIDA 0x0200
+#define C3_LEXICAL 0x0400
+#define C3_ALPHA 0x8000
+#define C3_NOTAPPLICABLE 0x0000
+
+/* Code page information.
+ */
+#define MAX_LEADBYTES 12
+#define MAX_DEFAULTCHAR 2
+
+/* Defines for calendar handling */
+#define CAL_NOUSEROVERRIDE LOCALE_NOUSEROVERRIDE
+#define CAL_USE_CP_ACP LOCALE_USE_CP_ACP
+#define CAL_RETURN_NUMBER LOCALE_RETURN_NUMBER
+
+#define CAL_ICALINTVALUE 0x01
+#define CAL_SCALNAME 0x02
+#define CAL_IYEAROFFSETRANGE 0x03
+#define CAL_SERASTRING 0x04
+#define CAL_SSHORTDATE 0x05
+#define CAL_SLONGDATE 0x06
+#define CAL_SDAYNAME1 0x07
+#define CAL_SDAYNAME2 0x08
+#define CAL_SDAYNAME3 0x09
+#define CAL_SDAYNAME4 0x0a
+#define CAL_SDAYNAME5 0x0b
+#define CAL_SDAYNAME6 0x0c
+#define CAL_SDAYNAME7 0x0d
+#define CAL_SABBREVDAYNAME1 0x0e
+#define CAL_SABBREVDAYNAME2 0x0f
+#define CAL_SABBREVDAYNAME3 0x10
+#define CAL_SABBREVDAYNAME4 0x11
+#define CAL_SABBREVDAYNAME5 0x12
+#define CAL_SABBREVDAYNAME6 0x13
+#define CAL_SABBREVDAYNAME7 0x14
+#define CAL_SMONTHNAME1 0x15
+#define CAL_SMONTHNAME2 0x16
+#define CAL_SMONTHNAME3 0x17
+#define CAL_SMONTHNAME4 0x18
+#define CAL_SMONTHNAME5 0x19
+#define CAL_SMONTHNAME6 0x1a
+#define CAL_SMONTHNAME7 0x1b
+#define CAL_SMONTHNAME8 0x1c
+#define CAL_SMONTHNAME9 0x1d
+#define CAL_SMONTHNAME10 0x1e
+#define CAL_SMONTHNAME11 0x1f
+#define CAL_SMONTHNAME12 0x20
+#define CAL_SMONTHNAME13 0x21
+#define CAL_SABBREVMONTHNAME1 0x22
+#define CAL_SABBREVMONTHNAME2 0x23
+#define CAL_SABBREVMONTHNAME3 0x24
+#define CAL_SABBREVMONTHNAME4 0x25
+#define CAL_SABBREVMONTHNAME5 0x26
+#define CAL_SABBREVMONTHNAME6 0x27
+#define CAL_SABBREVMONTHNAME7 0x28
+#define CAL_SABBREVMONTHNAME8 0x29
+#define CAL_SABBREVMONTHNAME9 0x2a
+#define CAL_SABBREVMONTHNAME10 0x2b
+#define CAL_SABBREVMONTHNAME11 0x2c
+#define CAL_SABBREVMONTHNAME12 0x2d
+#define CAL_SABBREVMONTHNAME13 0x2e
+#define CAL_SYEARMONTH 0x2f
+#define CAL_ITWODIGITYEARMAX 0x30
+
+/* Calendar types */
+#define CAL_GREGORIAN 1
+#define CAL_GREGORIAN_US 2
+#define CAL_JAPAN 3
+#define CAL_TAIWAN 4
+#define CAL_KOREA 5
+#define CAL_HIJRI 6
+#define CAL_THAI 7
+#define CAL_HEBREW 8
+#define CAL_GREGORIAN_ME_FRENCH 9
+#define CAL_GREGORIAN_ARABIC 10
+#define CAL_GREGORIAN_XLIT_ENGLISH 11
+#define CAL_GREGORIAN_XLIT_FRENCH 12
+
+/* EnumCalendarInfo Flags */
+#define ENUM_ALL_CALENDARS 0xffffffff /* Enumerate all calendars within a locale */
+
+/* CompareString results */
+#define CSTR_LESS_THAN 1
+#define CSTR_EQUAL 2
+#define CSTR_GREATER_THAN 3
+
+/*
+ * Language Group IDs.
+ * Resources in kernel32 are LGRPID_xxx+0x2000 because low values were used by LOCALE_xxx
+ * This is done because resources in win2k kernel32 / winxp kernel32 are not even
+ * stored the same way.
+ */
+#define LGRPID_WESTERN_EUROPE 0x01 /* Includes US and Africa */
+#define LGRPID_CENTRAL_EUROPE 0x02
+#define LGRPID_BALTIC 0x03
+#define LGRPID_GREEK 0x04
+#define LGRPID_CYRILLIC 0x05
+#define LGRPID_TURKISH 0x06
+#define LGRPID_JAPANESE 0x07
+#define LGRPID_KOREAN 0x08
+#define LGRPID_TRADITIONAL_CHINESE 0x09
+#define LGRPID_SIMPLIFIED_CHINESE 0x0A
+#define LGRPID_THAI 0x0B
+#define LGRPID_HEBREW 0x0C
+#define LGRPID_ARABIC 0x0D
+#define LGRPID_VIETNAMESE 0x0E
+#define LGRPID_INDIC 0x0F
+#define LGRPID_GEORGIAN 0x10
+#define LGRPID_ARMENIAN 0x11
+
+/* IDN defines. */
+#define IDN_ALLOW_UNASSIGNED 0x1
+#define IDN_USE_STD3_ASCII_RULES 0x2
+
+/* Types
+ */
+
+typedef enum _NORM_FORM {
+ NormalizationOther = 0,
+ NormalizationC = 0x1,
+ NormalizationD = 0x2,
+ NormalizationKC = 0x5,
+ NormalizationKD = 0x6
+} NORM_FORM;
+
+typedef DWORD CALID;
+typedef DWORD CALTYPE;
+typedef LONG GEOID;
+typedef DWORD GEOCLASS;
+typedef DWORD GEOTYPE;
+typedef DWORD LCTYPE;
+typedef DWORD LGRPID;
+
+typedef struct
+{
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+} CPINFO, *LPCPINFO;
+
+typedef struct
+{
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ WCHAR UnicodeDefaultChar;
+ UINT CodePage;
+ CHAR CodePageName[MAX_PATH];
+} CPINFOEXA, *LPCPINFOEXA;
+
+typedef struct
+{
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+ WCHAR UnicodeDefaultChar;
+ UINT CodePage;
+ WCHAR CodePageName[MAX_PATH];
+} CPINFOEXW, *LPCPINFOEXW;
+
+DECL_WINELIB_TYPE_AW(CPINFOEX)
+DECL_WINELIB_TYPE_AW(LPCPINFOEX)
+
+typedef struct _numberfmtA {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPSTR lpDecimalSep;
+ LPSTR lpThousandSep;
+ UINT NegativeOrder;
+} NUMBERFMTA, *LPNUMBERFMTA;
+
+typedef struct _numberfmtW {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPWSTR lpDecimalSep;
+ LPWSTR lpThousandSep;
+ UINT NegativeOrder;
+} NUMBERFMTW, *LPNUMBERFMTW;
+
+DECL_WINELIB_TYPE_AW(NUMBERFMT)
+DECL_WINELIB_TYPE_AW(LPNUMBERFMT)
+
+typedef struct _currencyfmtA
+{
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPSTR lpDecimalSep;
+ LPSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPSTR lpCurrencySymbol;
+} CURRENCYFMTA, *LPCURRENCYFMTA;
+
+typedef struct _currencyfmtW
+{
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPWSTR lpDecimalSep;
+ LPWSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPWSTR lpCurrencySymbol;
+} CURRENCYFMTW, *LPCURRENCYFMTW;
+
+DECL_WINELIB_TYPE_AW(CURRENCYFMT)
+DECL_WINELIB_TYPE_AW(LPCURRENCYFMT)
+
+typedef struct _nlsversioninfo {
+ DWORD dwNLSVersionInfoSize;
+ DWORD dwNLSVersion;
+ DWORD dwDefinedVersion;
+} NLSVERSIONINFO, *LPNLSVERSIONINFO;
+
+typedef struct _nlsversioninfoex {
+ DWORD dwNLSVersionInfoSize;
+ DWORD dwNLSVersion;
+ DWORD dwDefinedVersion;
+ DWORD dwEffectiveId;
+ GUID guidCustomVersion;
+} NLSVERSIONINFOEX, *LPNLSVERSIONINFOEX;
+
+/* Define a bunch of callback types */
+
+#if defined(STRICT)
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXA)(LPSTR,CALID);
+typedef BOOL (CALLBACK *CALINFO_ENUMPROCEXW)(LPWSTR,CALID);
+typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *CODEPAGE_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXA)(LPSTR,CALID);
+typedef BOOL (CALLBACK *DATEFMT_ENUMPROCEXW)(LPWSTR,CALID);
+typedef BOOL (CALLBACK *GEO_ENUMPROC)(GEOID);
+typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCA)(LGRPID,LCID,LPSTR,LONG_PTR);
+typedef BOOL (CALLBACK *LANGGROUPLOCALE_ENUMPROCW)(LGRPID,LCID,LPWSTR,LONG_PTR);
+typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCA)(LGRPID,LPSTR,LPSTR,DWORD,LONG_PTR);
+typedef BOOL (CALLBACK *LANGUAGEGROUP_ENUMPROCW)(LGRPID,LPWSTR,LPWSTR,DWORD,LONG_PTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *LOCALE_ENUMPROCEX)(LPWSTR, DWORD, LPARAM);
+typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCA)(LPSTR);
+typedef BOOL (CALLBACK *TIMEFMT_ENUMPROCW)(LPWSTR);
+typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCA)(LPSTR,LONG_PTR);
+typedef BOOL (CALLBACK *UILANGUAGE_ENUMPROCW)(LPWSTR,LONG_PTR);
+#else
+typedef FARPROC CALINFO_ENUMPROCA;
+typedef FARPROC CALINFO_ENUMPROCW;
+typedef FARPROC CALINFO_ENUMPROCEXA;
+typedef FARPROC CALINFO_ENUMPROCEXW;
+typedef FARPROC CODEPAGE_ENUMPROCA;
+typedef FARPROC CODEPAGE_ENUMPROCW;
+typedef FARPROC DATEFMT_ENUMPROCA;
+typedef FARPROC DATEFMT_ENUMPROCW;
+typedef FARPROC DATEFMT_ENUMPROCEXA;
+typedef FARPROC DATEFMT_ENUMPROCEXW;
+typedef FARPROC GEO_ENUMPROC;
+typedef FARPROC LANGGROUPLOCALE_ENUMPROCA;
+typedef FARPROC LANGGROUPLOCALE_ENUMPROCW;
+typedef FARPROC LANGUAGEGROUP_ENUMPROCA;
+typedef FARPROC LANGUAGEGROUP_ENUMPROCW;
+typedef FARPROC LOCALE_ENUMPROCA;
+typedef FARPROC LOCALE_ENUMPROCW;
+typedef FARPROC TIMEFMT_ENUMPROCA;
+typedef FARPROC TIMEFMT_ENUMPROCW;
+typedef FARPROC UILANGUAGE_ENUMPROCA;
+typedef FARPROC UILANGUAGE_ENUMPROCW;
+#endif /* STRICT */
+
+DECL_WINELIB_TYPE_AW(CALINFO_ENUMPROC)
+DECL_WINELIB_TYPE_AW(CALINFO_ENUMPROCEX)
+DECL_WINELIB_TYPE_AW(CODEPAGE_ENUMPROC)
+DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROC)
+DECL_WINELIB_TYPE_AW(DATEFMT_ENUMPROCEX)
+DECL_WINELIB_TYPE_AW(LANGGROUPLOCALE_ENUMPROC)
+DECL_WINELIB_TYPE_AW(LANGUAGEGROUP_ENUMPROC)
+DECL_WINELIB_TYPE_AW(LOCALE_ENUMPROC)
+DECL_WINELIB_TYPE_AW(TIMEFMT_ENUMPROC)
+DECL_WINELIB_TYPE_AW(UILANGUAGE_ENUMPROC)
+
+/* Geographic Information types */
+enum SYSGEOTYPE
+{
+ GEO_NATION = 1,
+ GEO_LATITUDE,
+ GEO_LONGITUDE,
+ GEO_ISO2,
+ GEO_ISO3,
+ GEO_RFC1766,
+ GEO_LCID,
+ GEO_FRIENDLYNAME,
+ GEO_OFFICIALNAME,
+ GEO_TIMEZONES,
+ GEO_OFFICIALLANGUAGES
+};
+
+enum SYSGEOCLASS
+{
+ GEOCLASS_REGION = 14,
+ GEOCLASS_NATION = 16
+};
+
+#define GEOID_NOT_AVAILABLE (-1)
+
+
+/* NLS Functions.
+ */
+
+WINBASEAPI INT WINAPI CompareStringA(LCID,DWORD,LPCSTR,INT,LPCSTR,INT);
+WINBASEAPI INT WINAPI CompareStringW(LCID,DWORD,LPCWSTR,INT,LPCWSTR,INT);
+#define CompareString WINELIB_NAME_AW(CompareString)
+WINBASEAPI INT WINAPI CompareStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPCWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM);
+WINBASEAPI LCID WINAPI ConvertDefaultLocale(LCID);
+WINBASEAPI BOOL WINAPI EnumCalendarInfoA(CALINFO_ENUMPROCA,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW,LCID,CALID,CALTYPE);
+#define EnumCalendarInfo WINELIB_NAME_AW(EnumCalendarInfo)
+WINBASEAPI BOOL WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE);
+WINBASEAPI BOOL WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE);
+#define EnumCalendarInfoEx WINELIB_NAME_AW(EnumCalendarInfoEx)
+WINBASEAPI BOOL WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);
+#define EnumDateFormats WINELIB_NAME_AW(EnumDateFormats)
+WINBASEAPI BOOL WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD);
+#define EnumDateFormatsEx WINELIB_NAME_AW(EnumDateFormatsEx)
+WINBASEAPI BOOL WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);
+#define EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)
+WINBASEAPI BOOL WINAPI EnumSystemGeoID(GEOCLASS,GEOID,GEO_ENUMPROC);
+WINBASEAPI BOOL WINAPI EnumSystemLocalesA(LOCALE_ENUMPROCA,DWORD);
+WINBASEAPI BOOL WINAPI EnumSystemLocalesW(LOCALE_ENUMPROCW,DWORD);
+#define EnumSystemLocales WINELIB_NAME_AW(EnumSystemLocales)
+WINBASEAPI BOOL WINAPI EnumSystemLocalesEx(LOCALE_ENUMPROCEX,DWORD,LPARAM,LPVOID);
+WINBASEAPI BOOL WINAPI EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW,DWORD,LONG_PTR);
+#define EnumSystemLanguageGroups WINELIB_NAME_AW(EnumSystemLanguageGroups)
+WINBASEAPI BOOL WINAPI EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA,LGRPID,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW,LGRPID,DWORD,LONG_PTR);
+#define EnumLanguageGroupLocales WINELIB_NAME_AW(EnumLanguageGroupLocales)
+WINBASEAPI BOOL WINAPI EnumTimeFormatsA(TIMEFMT_ENUMPROCA,LCID,DWORD);
+WINBASEAPI BOOL WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW,LCID,DWORD);
+#define EnumTimeFormats WINELIB_NAME_AW(EnumTimeFormats)
+WINBASEAPI BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA,DWORD,LONG_PTR);
+WINBASEAPI BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW,DWORD,LONG_PTR);
+#define EnumUILanguages WINELIB_NAME_AW(EnumUILanguages)
+WINBASEAPI INT WINAPI FoldStringA(DWORD,LPCSTR,INT,LPSTR,INT);
+WINBASEAPI INT WINAPI FoldStringW(DWORD,LPCWSTR,INT,LPWSTR,INT);
+#define FoldString WINELIB_NAME_AW(FoldString)
+WINBASEAPI UINT WINAPI GetACP(void);
+WINBASEAPI BOOL WINAPI GetCPInfo(UINT,LPCPINFO);
+WINBASEAPI BOOL WINAPI GetCPInfoExA(UINT,DWORD,LPCPINFOEXA);
+WINBASEAPI BOOL WINAPI GetCPInfoExW(UINT,DWORD,LPCPINFOEXW);
+#define GetCPInfoEx WINELIB_NAME_AW(GetCPInfoEx)
+WINBASEAPI INT WINAPI GetCalendarInfoA(LCID,DWORD,DWORD,LPSTR,INT,LPDWORD);
+WINBASEAPI INT WINAPI GetCalendarInfoW(LCID,DWORD,DWORD,LPWSTR,INT,LPDWORD);
+#define GetCalendarInfo WINELIB_NAME_AW(GetCalendarInfo)
+WINBASEAPI INT WINAPI GetCurrencyFormatA(LCID,DWORD,LPCSTR,const CURRENCYFMTA*,LPSTR,INT);
+WINBASEAPI INT WINAPI GetCurrencyFormatW(LCID,DWORD,LPCWSTR,const CURRENCYFMTW*,LPWSTR,INT);
+#define GetCurrencyFormat WINELIB_NAME_AW(GetCurrencyFormat)
+WINBASEAPI INT WINAPI GetDateFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT);
+WINBASEAPI INT WINAPI GetDateFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);
+#define GetDateFormat WINELIB_NAME_AW(GetDateFormat)
+WINBASEAPI INT WINAPI GetGeoInfoA(GEOID,GEOTYPE,LPSTR,INT,LANGID);
+WINBASEAPI INT WINAPI GetGeoInfoW(GEOID,GEOTYPE,LPWSTR,INT,LANGID);
+#define GetGeoInfo WINELIB_NAME_AW(GetGeoInfo)
+WINBASEAPI INT WINAPI GetLocaleInfoA(LCID,LCTYPE,LPSTR,INT);
+WINBASEAPI INT WINAPI GetLocaleInfoW(LCID,LCTYPE,LPWSTR,INT);
+#define GetLocaleInfo WINELIB_NAME_AW(GetLocaleInfo)
+WINBASEAPI INT WINAPI GetNumberFormatA(LCID,DWORD,LPCSTR,const NUMBERFMTA*,LPSTR,INT);
+WINBASEAPI INT WINAPI GetNumberFormatW(LCID,DWORD,LPCWSTR,const NUMBERFMTW*,LPWSTR,INT);
+#define GetNumberFormat WINELIB_NAME_AW(GetNumberFormat)
+WINBASEAPI UINT WINAPI GetOEMCP(void);
+WINBASEAPI BOOL WINAPI GetStringTypeA(LCID,DWORD,LPCSTR,INT,LPWORD);
+WINBASEAPI BOOL WINAPI GetStringTypeW(DWORD,LPCWSTR,INT,LPWORD);
+WINBASEAPI BOOL WINAPI GetStringTypeExA(LCID,DWORD,LPCSTR,INT,LPWORD);
+WINBASEAPI BOOL WINAPI GetStringTypeExW(LCID,DWORD,LPCWSTR,INT,LPWORD);
+#define GetStringTypeEx WINELIB_NAME_AW(GetStringTypeEx)
+WINBASEAPI LANGID WINAPI GetSystemDefaultLangID(void);
+WINBASEAPI LCID WINAPI GetSystemDefaultLCID(void);
+WINBASEAPI LANGID WINAPI GetSystemDefaultUILanguage(void);
+WINBASEAPI LCID WINAPI GetThreadLocale(void);
+WINBASEAPI INT WINAPI GetTimeFormatA(LCID,DWORD,const SYSTEMTIME*,LPCSTR,LPSTR,INT);
+WINBASEAPI INT WINAPI GetTimeFormatW(LCID,DWORD,const SYSTEMTIME*,LPCWSTR,LPWSTR,INT);
+#define GetTimeFormat WINELIB_NAME_AW(GetTimeFormat)
+WINBASEAPI LANGID WINAPI GetUserDefaultLangID(void);
+WINBASEAPI LCID WINAPI GetUserDefaultLCID(void);
+WINBASEAPI INT WINAPI GetUserDefaultLocaleName(LPWSTR,int);
+WINBASEAPI LANGID WINAPI GetUserDefaultUILanguage(void);
+WINBASEAPI GEOID WINAPI GetUserGeoID(GEOCLASS);
+WINNORMALIZEAPI INT WINAPI IdnToAscii(DWORD,LPCWSTR,INT,LPWSTR,INT);
+WINNORMALIZEAPI INT WINAPI IdnToNameprepUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT);
+WINNORMALIZEAPI INT WINAPI IdnToUnicode(DWORD,LPCWSTR,INT,LPWSTR,INT);
+WINBASEAPI BOOL WINAPI IsDBCSLeadByte(BYTE);
+WINBASEAPI BOOL WINAPI IsDBCSLeadByteEx(UINT,BYTE);
+WINNORMALIZEAPI BOOL WINAPI IsNormalizedString(NORM_FORM,LPCWSTR,INT);
+WINBASEAPI BOOL WINAPI IsValidCodePage(UINT);
+WINBASEAPI BOOL WINAPI IsValidLocale(LCID,DWORD);
+WINBASEAPI BOOL WINAPI IsValidLanguageGroup(LGRPID,DWORD);
+WINBASEAPI INT WINAPI LCIDToLocaleName(LCID,LPWSTR,INT,DWORD);
+WINBASEAPI INT WINAPI LCMapStringA(LCID,DWORD,LPCSTR,INT,LPSTR,INT);
+WINBASEAPI INT WINAPI LCMapStringW(LCID,DWORD,LPCWSTR,INT,LPWSTR,INT);
+#define LCMapString WINELIB_NAME_AW(LCMapString)
+WINBASEAPI INT WINAPI LCMapStringEx(LPCWSTR,DWORD,LPCWSTR,INT,LPWSTR,INT,LPNLSVERSIONINFO,LPVOID,LPARAM);
+WINBASEAPI LCID WINAPI LocaleNameToLCID(LPCWSTR,DWORD);
+WINBASEAPI INT WINAPI MultiByteToWideChar(UINT,DWORD,LPCSTR,INT,LPWSTR,INT);
+WINNORMALIZEAPI INT WINAPI NormalizeString(NORM_FORM,LPCWSTR,INT,LPWSTR,INT);
+WINBASEAPI INT WINAPI SetCalendarInfoA(LCID,CALID,CALTYPE,LPCSTR);
+WINBASEAPI INT WINAPI SetCalendarInfoW(LCID,CALID,CALTYPE,LPCWSTR);
+#define SetCalendarInfo WINELIB_NAME_AW(SetCalendarInfo)
+WINBASEAPI BOOL WINAPI SetLocaleInfoA(LCID,LCTYPE,LPCSTR);
+WINBASEAPI BOOL WINAPI SetLocaleInfoW(LCID,LCTYPE,LPCWSTR);
+#define SetLocaleInfo WINELIB_NAME_AW(SetLocaleInfo)
+WINBASEAPI BOOL WINAPI SetThreadLocale(LCID);
+WINBASEAPI BOOL WINAPI SetUserGeoID(GEOID);
+WINBASEAPI INT WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,INT,LPSTR,INT,LPCSTR,LPBOOL);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !NONLS */
+#endif /* __WINE_WINNLS_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h
new file mode 100644
index 00000000..da65cd8b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnls32.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2005 Diego Petteno
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINNLS32_
+#define _WINNLS32_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UINT WINAPI WINNLSGetIMEHotkey(HWND);
+BOOL WINAPI WINNLSEnableIME(HWND, BOOL);
+BOOL WINAPI WINNLSGetEnableStatus(HWND);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINNLS32_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h
new file mode 100644
index 00000000..67781252
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.h
@@ -0,0 +1,5525 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINNT_
+#define _WINNT_
+
+#include <basetsd.h>
+#include <guiddef.h>
+
+#ifndef RC_INVOKED
+#include <ctype.h>
+#include <stddef.h>
+#include <string.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef _NTSYSTEM_
+#define NTSYSAPI
+#else
+#define NTSYSAPI DECLSPEC_IMPORT
+#endif
+
+#define NTAPI __stdcall
+
+#ifndef MIDL_PASS
+# if defined(_MSC_VER)
+# define DECLSPEC_IMPORT __declspec(dllimport)
+# elif defined(__MINGW32__) || defined(__CYGWIN__)
+# define DECLSPEC_IMPORT __attribute__((dllimport))
+# else
+# define DECLSPEC_IMPORT DECLSPEC_HIDDEN
+# endif
+#else
+# define DECLSPEC_IMPORT
+#endif
+
+#ifndef DECLSPEC_NORETURN
+# if defined(_MSC_VER) && (_MSC_VER >= 1200) && !defined(MIDL_PASS)
+# define DECLSPEC_NORETURN __declspec(noreturn)
+# elif defined(__GNUC__)
+# define DECLSPEC_NORETURN __attribute__((noreturn))
+# else
+# define DECLSPEC_NORETURN
+# endif
+#endif
+
+#ifndef DECLSPEC_ALIGN
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+# define DECLSPEC_ALIGN(x) __declspec(align(x))
+# elif defined(__GNUC__)
+# define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+# else
+# define DECLSPEC_ALIGN(x)
+# endif
+#endif
+
+#ifndef DECLSPEC_CACHEALIGN
+# define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(128)
+#endif
+
+#ifndef DECLSPEC_UUID
+# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined (__cplusplus)
+# define DECLSPEC_UUID(x) __declspec(uuid(x))
+# else
+# define DECLSPEC_UUID(x)
+# endif
+#endif
+
+#ifndef DECLSPEC_NOVTABLE
+# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
+# define DECLSPEC_NOVTABLE __declspec(novtable)
+# else
+# define DECLSPEC_NOVTABLE
+# endif
+#endif
+
+#ifndef DECLSPEC_SELECTANY
+#if defined(_MSC_VER) && (_MSC_VER >= 1100)
+#define DECLSPEC_SELECTANY __declspec(selectany)
+#else
+#define DECLSPEC_SELECTANY
+#endif
+#endif
+
+#ifndef NOP_FUNCTION
+# if defined(_MSC_VER) && (_MSC_VER >= 1210)
+# define NOP_FUNCTION __noop
+# else
+# define NOP_FUNCTION (void)0
+# endif
+#endif
+
+#ifndef DECLSPEC_ADDRSAFE
+# if defined(_MSC_VER) && (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
+# define DECLSPEC_ADDRSAFE __declspec(address_safe)
+# else
+# define DECLSPEC_ADDRSAFE
+# endif
+#endif
+
+#ifndef FORCEINLINE
+# if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# define FORCEINLINE __forceinline
+# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+# define FORCEINLINE inline __attribute__((always_inline))
+# else
+# define FORCEINLINE inline
+# endif
+#endif
+
+#ifndef DECLSPEC_DEPRECATED
+# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
+# define DECLSPEC_DEPRECATED __declspec(deprecated)
+# define DEPRECATE_SUPPORTED
+# elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+# define DECLSPEC_DEPRECATED __attribute__((deprecated))
+# define DEPRECATE_SUPPORTED
+# else
+# define DECLSPEC_DEPRECATED
+# undef DEPRECATE_SUPPORTED
+# endif
+#endif
+
+/* a couple of useful Wine extensions */
+
+#ifdef _MSC_VER
+# define DECLSPEC_EXPORT __declspec(dllexport)
+#elif defined(__MINGW32__)
+# define DECLSPEC_EXPORT __attribute__((dllexport))
+#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define DECLSPEC_EXPORT __attribute__((visibility ("default")))
+#else
+# define DECLSPEC_EXPORT
+#endif
+
+#if defined(__MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define DECLSPEC_HIDDEN
+#elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+# define DECLSPEC_HIDDEN __attribute__((visibility ("hidden")))
+#else
+# define DECLSPEC_HIDDEN
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+#define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
+#else
+#define __WINE_ALLOC_SIZE(x)
+#endif
+
+/* Anonymous union/struct handling */
+
+#ifndef NONAMELESSSTRUCT
+# ifdef __GNUC__
+ /* Anonymous struct support starts with gcc 2.96 or gcc/g++ 3.x */
+# if (__GNUC__ < 2) || ((__GNUC__ == 2) && (defined(__cplusplus) || (__GNUC_MINOR__ < 96)))
+# define NONAMELESSSTRUCT
+# endif
+# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# define NONAMELESSSTRUCT
+# endif
+#endif /* NONAMELESSSTRUCT */
+
+#ifndef NONAMELESSUNION
+# ifdef __GNUC__
+ /* Anonymous unions support starts with gcc 2.96/g++ 2.95 */
+# if (__GNUC__ < 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ < 95) || ((__GNUC_MINOR__ == 95) && !defined(__cplusplus))))
+# define NONAMELESSUNION
+# endif
+# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+# define NONAMELESSUNION
+# endif
+#endif /* NONAMELESSUNION */
+
+#undef DUMMYSTRUCTNAME
+#undef DUMMYSTRUCTNAME1
+#undef DUMMYSTRUCTNAME2
+#undef DUMMYSTRUCTNAME3
+#undef DUMMYSTRUCTNAME4
+#undef DUMMYSTRUCTNAME5
+#ifndef NONAMELESSSTRUCT
+#define DUMMYSTRUCTNAME
+#define DUMMYSTRUCTNAME1
+#define DUMMYSTRUCTNAME2
+#define DUMMYSTRUCTNAME3
+#define DUMMYSTRUCTNAME4
+#define DUMMYSTRUCTNAME5
+#else /* !defined(NONAMELESSSTRUCT) */
+#define DUMMYSTRUCTNAME s
+#define DUMMYSTRUCTNAME1 s1
+#define DUMMYSTRUCTNAME2 s2
+#define DUMMYSTRUCTNAME3 s3
+#define DUMMYSTRUCTNAME4 s4
+#define DUMMYSTRUCTNAME5 s5
+#endif /* !defined(NONAMELESSSTRUCT) */
+
+#undef DUMMYUNIONNAME
+#undef DUMMYUNIONNAME1
+#undef DUMMYUNIONNAME2
+#undef DUMMYUNIONNAME3
+#undef DUMMYUNIONNAME4
+#undef DUMMYUNIONNAME5
+#undef DUMMYUNIONNAME6
+#undef DUMMYUNIONNAME7
+#undef DUMMYUNIONNAME8
+#ifndef NONAMELESSUNION
+#define DUMMYUNIONNAME
+#define DUMMYUNIONNAME1
+#define DUMMYUNIONNAME2
+#define DUMMYUNIONNAME3
+#define DUMMYUNIONNAME4
+#define DUMMYUNIONNAME5
+#define DUMMYUNIONNAME6
+#define DUMMYUNIONNAME7
+#define DUMMYUNIONNAME8
+#else /* !defined(NONAMELESSUNION) */
+#define DUMMYUNIONNAME u
+#define DUMMYUNIONNAME1 u1
+#define DUMMYUNIONNAME2 u2
+#define DUMMYUNIONNAME3 u3
+#define DUMMYUNIONNAME4 u4
+#define DUMMYUNIONNAME5 u5
+#define DUMMYUNIONNAME6 u6
+#define DUMMYUNIONNAME7 u7
+#define DUMMYUNIONNAME8 u8
+#endif /* !defined(NONAMELESSUNION) */
+
+#undef __C89_NAMELESS
+#undef __C89_NAMELESSSTRUCTNAME
+#undef __C89_NAMELESSSTRUCTNAME1
+#undef __C89_NAMELESSSTRUCTNAME2
+#undef __C89_NAMELESSSTRUCTNAME3
+#undef __C89_NAMELESSSTRUCTNAME4
+#undef __C89_NAMELESSSTRUCTNAME5
+#undef __C89_NAMELESSUNIONNAME
+#undef __C89_NAMELESSUNIONNAME1
+#undef __C89_NAMELESSUNIONNAME2
+#undef __C89_NAMELESSUNIONNAME3
+#undef __C89_NAMELESSUNIONNAME4
+#undef __C89_NAMELESSUNIONNAME5
+#undef __C89_NAMELESSUNIONNAME6
+#undef __C89_NAMELESSUNIONNAME7
+#undef __C89_NAMELESSUNIONNAME8
+
+#if !defined(__WINESRC__) && !defined(WINE_NO_NAMELESS_EXTENSION)
+# ifdef __GNUC__
+ /* Anonymous structs support starts with gcc 2.96/g++ 2.95 */
+# if (__GNUC__ > 2) || ((__GNUC__ == 2) && ((__GNUC_MINOR__ > 95) || ((__GNUC_MINOR__ == 95) && defined(__cplusplus))))
+# define __C89_NAMELESS __extension__
+# endif
+# elif defined(_MSC_VER)
+# define __C89_NAMELESS
+# endif
+#endif
+
+#ifdef __C89_NAMELESS
+# define __C89_NAMELESSSTRUCTNAME
+# define __C89_NAMELESSSTRUCTNAME1
+# define __C89_NAMELESSSTRUCTNAME2
+# define __C89_NAMELESSSTRUCTNAME3
+# define __C89_NAMELESSSTRUCTNAME4
+# define __C89_NAMELESSSTRUCTNAME5
+# define __C89_NAMELESSUNIONNAME
+# define __C89_NAMELESSUNIONNAME1
+# define __C89_NAMELESSUNIONNAME2
+# define __C89_NAMELESSUNIONNAME3
+# define __C89_NAMELESSUNIONNAME4
+# define __C89_NAMELESSUNIONNAME5
+# define __C89_NAMELESSUNIONNAME6
+# define __C89_NAMELESSUNIONNAME7
+# define __C89_NAMELESSUNIONNAME8
+#else
+# define __C89_NAMELESS
+# define __C89_NAMELESSSTRUCTNAME DUMMYSTRUCTNAME
+# define __C89_NAMELESSSTRUCTNAME1 DUMMYSTRUCTNAME1
+# define __C89_NAMELESSSTRUCTNAME2 DUMMYSTRUCTNAME2
+# define __C89_NAMELESSSTRUCTNAME3 DUMMYSTRUCTNAME3
+# define __C89_NAMELESSSTRUCTNAME4 DUMMYSTRUCTNAME4
+# define __C89_NAMELESSSTRUCTNAME5 DUMMYSTRUCTNAME5
+# define __C89_NAMELESSUNIONNAME DUMMYUNIONNAME
+# define __C89_NAMELESSUNIONNAME1 DUMMYUNIONNAME1
+# define __C89_NAMELESSUNIONNAME2 DUMMYUNIONNAME2
+# define __C89_NAMELESSUNIONNAME3 DUMMYUNIONNAME3
+# define __C89_NAMELESSUNIONNAME4 DUMMYUNIONNAME4
+# define __C89_NAMELESSUNIONNAME5 DUMMYUNIONNAME5
+# define __C89_NAMELESSUNIONNAME6 DUMMYUNIONNAME6
+# define __C89_NAMELESSUNIONNAME7 DUMMYUNIONNAME7
+# define __C89_NAMELESSUNIONNAME8 DUMMYUNIONNAME8
+#endif
+
+/* C99 restrict support */
+
+#if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
+# if defined(_MSC_VER) && defined(_M_MRX000)
+# define RESTRICTED_POINTER __restrict
+# elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
+# define RESTRICTED_POINTER __restrict
+# else
+# define RESTRICTED_POINTER
+# endif
+#else
+# define RESTRICTED_POINTER
+#endif
+
+/* C99 unaligned support */
+
+#ifndef UNALIGNED
+#if defined(_MSC_VER) && (defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64))
+# define UNALIGNED __unaligned
+# ifdef _WIN64
+# define UNALIGNED64 __unaligned
+# else
+# define UNALIGNED64
+# endif
+#else
+# define UNALIGNED
+# define UNALIGNED64
+#endif
+#endif
+
+/* Alignment macros */
+
+#if defined(_WIN64) || (defined(_MSC_VER) && defined(_M_ALPHA)) || defined(__alpha__)
+#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
+#define MEMORY_ALLOCATION_ALIGNMENT 16
+#else
+#define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
+#define MEMORY_ALLOCATION_ALIGNMENT 8
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
+# define TYPE_ALIGNMENT(t) __alignof(t)
+#elif defined(__GNUC__)
+# define TYPE_ALIGNMENT(t) __alignof__(t)
+#else
+# define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
+#endif
+
+#ifdef _WIN64
+# define PROBE_ALIGNMENT(_s) \
+ (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? \
+ TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
+# define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
+#else
+# define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
+#endif
+
+/* Compile time assertion */
+
+#if defined(_MSC_VER)
+# define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
+#else
+# define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
+#endif
+
+/* Eliminate Microsoft C/C++ compiler warning 4715 */
+#if defined(_MSC_VER) && (_MSC_VER > 1200)
+# define DEFAULT_UNREACHABLE default: __assume(0)
+#elif defined(__clang__) || (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))))
+# define DEFAULT_UNREACHABLE default: __builtin_unreachable()
+#else
+# define DEFAULT_UNREACHABLE default:
+#endif
+
+/* Error Masks */
+#define APPLICATION_ERROR_MASK 0x20000000
+#define ERROR_SEVERITY_SUCCESS 0x00000000
+#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
+#define ERROR_SEVERITY_WARNING 0x80000000
+#define ERROR_SEVERITY_ERROR 0xC0000000
+
+#ifdef __cplusplus
+#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
+extern "C++" { \
+ inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)|((int)b)); } \
+ inline ENUMTYPE operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
+ inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)&((int)b)); } \
+ inline ENUMTYPE operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
+ inline ENUMTYPE operator ~ (ENUMTYPE a) { return (ENUMTYPE)(~((int)a)); } \
+ inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a)^((int)b)); } \
+ inline ENUMTYPE operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
+}
+#else
+#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
+#endif
+
+/* Microsoft's macros for declaring functions */
+
+#ifdef __cplusplus
+# define EXTERN_C extern "C"
+#else
+# define EXTERN_C extern
+#endif
+
+#define STDMETHODCALLTYPE __stdcall
+#define STDMETHODVCALLTYPE __cdecl
+#define STDAPICALLTYPE __stdcall
+#define STDAPIVCALLTYPE __cdecl
+
+#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
+#define STDMETHODIMP HRESULT STDMETHODCALLTYPE
+#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
+#define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
+#define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
+#define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
+#define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
+
+/* Define the basic types */
+#ifndef VOID
+#define VOID void
+#endif
+typedef VOID *PVOID;
+typedef VOID *PVOID64;
+typedef BYTE BOOLEAN, *PBOOLEAN;
+typedef char CHAR, *PCHAR;
+typedef short SHORT, *PSHORT;
+#ifdef _MSC_VER
+typedef long LONG, *PLONG;
+#else
+typedef int LONG, *PLONG;
+#endif
+
+/* Some systems might have wchar_t, but we really need 16 bit characters */
+#ifdef WINE_UNICODE_NATIVE
+typedef wchar_t WCHAR, *PWCHAR;
+#else
+typedef unsigned short WCHAR, *PWCHAR;
+#endif
+
+typedef ULONG UCSCHAR;
+#define MIN_UCSCHAR (0)
+#define MAX_UCSCHAR (0x0010ffff)
+#define UCSCHAR_INVALID_CHARACTER (0xffffffff)
+
+/* 'Extended/Wide' numerical types */
+#ifndef _ULONGLONG_
+# define _ULONGLONG_
+# ifdef _MSC_VER
+typedef signed __int64 LONGLONG, *PLONGLONG;
+typedef unsigned __int64 ULONGLONG, *PULONGLONG;
+# else
+typedef signed __int64 DECLSPEC_ALIGN(8) LONGLONG, *PLONGLONG;
+typedef unsigned __int64 DECLSPEC_ALIGN(8) ULONGLONG, *PULONGLONG;
+# endif
+#endif
+
+#ifndef _DWORDLONG_
+# define _DWORDLONG_
+# ifdef _MSC_VER
+typedef ULONGLONG DWORDLONG, *PDWORDLONG;
+# else
+typedef ULONGLONG DECLSPEC_ALIGN(8) DWORDLONG, *PDWORDLONG;
+# endif
+#endif
+
+/* ANSI string types */
+typedef CHAR *PCH, *LPCH, *PNZCH;
+typedef const CHAR *PCCH, *LPCCH, *PCNZCH;
+typedef CHAR *PSTR, *LPSTR, *NPSTR;
+typedef const CHAR *PCSTR, *LPCSTR;
+typedef CHAR *PZZSTR;
+typedef const CHAR *PCZZSTR;
+
+/* Unicode string types */
+typedef const WCHAR *PCWCHAR, *LPCUWCHAR, *PCUWCHAR;
+typedef WCHAR *PWCH, *LPWCH;
+typedef const WCHAR *PCWCH, *LPCWCH;
+typedef WCHAR *PNZWCH, *PUNZWCH;
+typedef const WCHAR *PCNZWCH, *PCUNZWCH;
+typedef WCHAR *PWSTR, *LPWSTR, *NWPSTR;
+typedef const WCHAR *PCWSTR, *LPCWSTR;
+typedef WCHAR *PZZWSTR, *PUZZWSTR;
+typedef const WCHAR *PCZZWSTR, *PCUZZWSTR;
+typedef PWSTR *PZPWSTR;
+typedef PCWSTR *PZPCWSTR;
+
+/* Neutral character and string types */
+/* These are only defined for Winelib, i.e. _not_ defined for
+ * the emulator. The reason is they depend on the UNICODE
+ * macro which only exists in the user's code.
+ */
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+# ifndef _TCHAR_DEFINED
+typedef WCHAR TCHAR, *PTCHAR;
+# define _TCHAR_DEFINED
+#endif
+typedef LPWCH PTCH, LPTCH;
+typedef LPCWCH PCTCH, LPCTCH;
+typedef LPWSTR PTSTR, LPTSTR;
+typedef LPCWSTR PCTSTR, LPCTSTR;
+typedef LPWSTR PUTSTR, LPUTSTR;
+typedef LPCWSTR PCUTSTR, LPCUTSTR;
+typedef PNZWCH PNZTCH;
+typedef PUNZWCH PUNZTCH;
+typedef PCNZWCH PCNZTCH;
+typedef PCUNZWCH PCUNZTCH;
+typedef PZZWSTR PZZTSTR;
+typedef PCZZWSTR PCZZTSTR;
+typedef PUZZWSTR PUZZTSTR;
+typedef PCUZZWSTR PCUZZTSTR;
+# else /* UNICODE */
+# ifndef _TCHAR_DEFINED
+typedef CHAR TCHAR, *PTCHAR;
+# define _TCHAR_DEFINED
+# endif
+typedef LPCH PTCH, LPTCH;
+typedef LPCCH PCTCH, LPCTCH;
+typedef LPSTR PTSTR, LPTSTR;
+typedef LPCSTR PCTSTR, LPCTSTR;
+typedef PNZCH PNZTCH, PUNZTCH;
+typedef PCNZCH PCNZTCH, PCUNZTCH;
+typedef PZZSTR PZZTSTR, PUZZTSTR;
+typedef PCZZSTR PCZZTSTR, PCUZZTSTR;
+# endif /* UNICODE */
+#endif /* WINE_NO_UNICODE_MACROS */
+
+/* UCS string types */
+typedef UCSCHAR *PUCSCHAR, *PUUCSCHAR;
+typedef const UCSCHAR *PCUCSCHAR, *PCUUCSCHAR;
+typedef UCSCHAR *PUCSSTR, *PUUCSSTR;
+typedef const UCSCHAR *PCUCSSTR, *PCUUCSSTR;
+
+/* Misc common WIN32 types */
+typedef char CCHAR;
+typedef DWORD LCID, *PLCID;
+typedef WORD LANGID;
+typedef DWORD EXECUTION_STATE;
+#ifndef _HRESULT_DEFINED
+#define _HRESULT_DEFINED
+typedef LONG HRESULT;
+#endif
+
+/* Handle type */
+
+typedef void *HANDLE;
+typedef HANDLE *PHANDLE, *LPHANDLE;
+
+#ifdef STRICT
+#define DECLARE_HANDLE(a) typedef struct a##__ { int unused; } *a
+#else /*STRICT*/
+#define DECLARE_HANDLE(a) typedef HANDLE a
+#endif /*STRICT*/
+
+typedef BYTE FCHAR;
+typedef WORD FSHORT;
+typedef DWORD FLONG;
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define __MSABI_LONG(x) x ## l
+# else
+# define __MSABI_LONG(x) x
+# endif
+#endif
+
+/* Defines */
+
+#ifndef WIN32_NO_STATUS
+
+#define STATUS_WAIT_0 ((DWORD) 0x00000000)
+#define STATUS_ABANDONED_WAIT_0 ((DWORD) 0x00000080)
+#define STATUS_USER_APC ((DWORD) 0x000000C0)
+#define STATUS_TIMEOUT ((DWORD) 0x00000102)
+#define STATUS_PENDING ((DWORD) 0x00000103)
+#define STATUS_SEGMENT_NOTIFICATION ((DWORD) 0x40000005)
+#define STATUS_GUARD_PAGE_VIOLATION ((DWORD) 0x80000001)
+#define STATUS_DATATYPE_MISALIGNMENT ((DWORD) 0x80000002)
+#define STATUS_BREAKPOINT ((DWORD) 0x80000003)
+#define STATUS_SINGLE_STEP ((DWORD) 0x80000004)
+#define STATUS_ACCESS_VIOLATION ((DWORD) 0xC0000005)
+#define STATUS_IN_PAGE_ERROR ((DWORD) 0xC0000006)
+#define STATUS_INVALID_HANDLE ((DWORD) 0xC0000008)
+#define STATUS_NO_MEMORY ((DWORD) 0xC0000017)
+#define STATUS_ILLEGAL_INSTRUCTION ((DWORD) 0xC000001D)
+#define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD) 0xC0000025)
+#define STATUS_INVALID_DISPOSITION ((DWORD) 0xC0000026)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD) 0xC000008C)
+#define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD) 0xC000008D)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD) 0xC000008E)
+#define STATUS_FLOAT_INEXACT_RESULT ((DWORD) 0xC000008F)
+#define STATUS_FLOAT_INVALID_OPERATION ((DWORD) 0xC0000090)
+#define STATUS_FLOAT_OVERFLOW ((DWORD) 0xC0000091)
+#define STATUS_FLOAT_STACK_CHECK ((DWORD) 0xC0000092)
+#define STATUS_FLOAT_UNDERFLOW ((DWORD) 0xC0000093)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD) 0xC0000094)
+#define STATUS_INTEGER_OVERFLOW ((DWORD) 0xC0000095)
+#define STATUS_PRIVILEGED_INSTRUCTION ((DWORD) 0xC0000096)
+#define STATUS_STACK_OVERFLOW ((DWORD) 0xC00000FD)
+#define STATUS_CONTROL_C_EXIT ((DWORD) 0xC000013A)
+#define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD) 0xC00002B4)
+#define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD) 0xC00002B5)
+#define STATUS_REG_NAT_CONSUMPTION ((DWORD) 0xC00002C9)
+#define STATUS_SXS_EARLY_DEACTIVATION ((DWORD) 0xC015000F)
+#define STATUS_SXS_INVALID_DEACTIVATION ((DWORD) 0xC0150010)
+
+/* status values for ContinueDebugEvent */
+#define DBG_EXCEPTION_HANDLED ((DWORD) 0x00010001)
+#define DBG_CONTINUE ((DWORD) 0x00010002)
+#define DBG_TERMINATE_THREAD ((DWORD) 0x40010003)
+#define DBG_TERMINATE_PROCESS ((DWORD) 0x40010004)
+#define DBG_CONTROL_C ((DWORD) 0x40010005)
+#define DBG_CONTROL_BREAK ((DWORD) 0x40010008)
+#define DBG_COMMAND_EXCEPTION ((DWORD) 0x40010009)
+#define DBG_EXCEPTION_NOT_HANDLED ((DWORD) 0x80010001)
+
+#endif /* WIN32_NO_STATUS */
+
+/* Argument 1 passed to the DllEntryProc. */
+#define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
+#define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
+#define DLL_THREAD_ATTACH 2 /* attach new thread */
+#define DLL_THREAD_DETACH 3 /* detach thread */
+#ifdef __WINESRC__
+#define DLL_WINE_PREATTACH 8 /* called before process attach for Wine builtins */
+#endif
+
+/* u.x.wProcessorArchitecture (NT) */
+#define PROCESSOR_ARCHITECTURE_INTEL 0
+#define PROCESSOR_ARCHITECTURE_MIPS 1
+#define PROCESSOR_ARCHITECTURE_ALPHA 2
+#define PROCESSOR_ARCHITECTURE_PPC 3
+#define PROCESSOR_ARCHITECTURE_SHX 4
+#define PROCESSOR_ARCHITECTURE_ARM 5
+#define PROCESSOR_ARCHITECTURE_IA64 6
+#define PROCESSOR_ARCHITECTURE_ALPHA64 7
+#define PROCESSOR_ARCHITECTURE_MSIL 8
+#define PROCESSOR_ARCHITECTURE_AMD64 9
+#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
+#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
+
+/* dwProcessorType */
+#define PROCESSOR_INTEL_386 386
+#define PROCESSOR_INTEL_486 486
+#define PROCESSOR_INTEL_PENTIUM 586
+#define PROCESSOR_INTEL_860 860
+#define PROCESSOR_INTEL_IA64 2200
+#define PROCESSOR_AMD_X8664 8664
+#define PROCESSOR_MIPS_R2000 2000
+#define PROCESSOR_MIPS_R3000 3000
+#define PROCESSOR_MIPS_R4000 4000
+#define PROCESSOR_ALPHA_21064 21064
+#define PROCESSOR_PPC_601 601
+#define PROCESSOR_PPC_603 603
+#define PROCESSOR_PPC_604 604
+#define PROCESSOR_PPC_620 620
+#define PROCESSOR_HITACHI_SH3 10003
+#define PROCESSOR_HITACHI_SH3E 10004
+#define PROCESSOR_HITACHI_SH4 10005
+#define PROCESSOR_MOTOROLA_821 821
+#define PROCESSOR_SHx_SH3 103
+#define PROCESSOR_SHx_SH4 104
+#define PROCESSOR_STRONGARM 2577
+#define PROCESSOR_ARM720 1824 /* 0x720 */
+#define PROCESSOR_ARM820 2080 /* 0x820 */
+#define PROCESSOR_ARM920 2336 /* 0x920 */
+#define PROCESSOR_ARM_7TDMI 70001
+#define PROCESSOR_OPTIL 18767
+
+#ifdef _WIN64
+#define MAXIMUM_PROCESSORS 64
+#else
+#define MAXIMUM_PROCESSORS 32
+#endif
+
+typedef struct _MEMORY_BASIC_INFORMATION
+{
+ LPVOID BaseAddress;
+ LPVOID AllocationBase;
+ DWORD AllocationProtect;
+ SIZE_T RegionSize;
+ DWORD State;
+ DWORD Protect;
+ DWORD Type;
+} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
+
+#define PAGE_NOACCESS 0x01
+#define PAGE_READONLY 0x02
+#define PAGE_READWRITE 0x04
+#define PAGE_WRITECOPY 0x08
+#define PAGE_EXECUTE 0x10
+#define PAGE_EXECUTE_READ 0x20
+#define PAGE_EXECUTE_READWRITE 0x40
+#define PAGE_EXECUTE_WRITECOPY 0x80
+#define PAGE_GUARD 0x100
+#define PAGE_NOCACHE 0x200
+#define PAGE_WRITECOMBINE 0x400
+
+#define MEM_COMMIT 0x00001000
+#define MEM_RESERVE 0x00002000
+#define MEM_DECOMMIT 0x00004000
+#define MEM_RELEASE 0x00008000
+#define MEM_FREE 0x00010000
+#define MEM_PRIVATE 0x00020000
+#define MEM_MAPPED 0x00040000
+#define MEM_RESET 0x00080000
+#define MEM_TOP_DOWN 0x00100000
+#define MEM_WRITE_WATCH 0x00200000
+#define MEM_PHYSICAL 0x00400000
+#define MEM_LARGE_PAGES 0x20000000
+#define MEM_4MB_PAGES 0x80000000
+
+#define SEC_FILE 0x00800000
+#define SEC_IMAGE 0x01000000
+#define SEC_RESERVE 0x04000000
+#define SEC_COMMIT 0x08000000
+#define SEC_NOCACHE 0x10000000
+#define SEC_LARGE_PAGES 0x80000000
+#define MEM_IMAGE SEC_IMAGE
+
+#define WRITE_WATCH_FLAG_RESET 0x00000001
+
+
+#define MINCHAR 0x80
+#define MAXCHAR 0x7f
+#define MINSHORT 0x8000
+#define MAXSHORT 0x7fff
+#define MINLONG 0x80000000
+#define MAXLONG 0x7fffffff
+#define MAXBYTE 0xff
+#define MAXWORD 0xffff
+#define MAXDWORD 0xffffffff
+
+#define UNICODE_STRING_MAX_CHARS 32767
+
+#define FIELD_OFFSET(type, field) ((LONG)offsetof(type, field))
+
+#define CONTAINING_RECORD(address, type, field) \
+ ((type *)((PCHAR)(address) - offsetof(type, field)))
+
+/* Types */
+
+typedef struct _LIST_ENTRY {
+ struct _LIST_ENTRY *Flink;
+ struct _LIST_ENTRY *Blink;
+} LIST_ENTRY, *PLIST_ENTRY, * RESTRICTED_POINTER PRLIST_ENTRY;
+
+typedef struct _SINGLE_LIST_ENTRY {
+ struct _SINGLE_LIST_ENTRY *Next;
+} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
+
+#ifdef _WIN64
+
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY;
+typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
+ PSLIST_ENTRY Next;
+} SLIST_ENTRY;
+
+typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
+ struct {
+ ULONGLONG Alignment;
+ ULONGLONG Region;
+ } DUMMYSTRUCTNAME;
+ struct {
+ ULONGLONG Depth:16;
+ ULONGLONG Sequence:9;
+ ULONGLONG NextEntry:39;
+ ULONGLONG HeaderType:1;
+ ULONGLONG Init:1;
+ ULONGLONG Reserved:59;
+ ULONGLONG Region:3;
+ } Header8;
+ struct {
+ ULONGLONG Depth:16;
+ ULONGLONG Sequence:48;
+ ULONGLONG HeaderType:1;
+ ULONGLONG Init:1;
+ ULONGLONG Reserved:2;
+ ULONGLONG NextEntry:60;
+ } Header16;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+#else
+
+#undef SLIST_ENTRY /* for Mac OS */
+#define SLIST_ENTRY SINGLE_LIST_ENTRY
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+
+typedef union _SLIST_HEADER {
+ ULONGLONG Alignment;
+ struct {
+ SLIST_ENTRY Next;
+ WORD Depth;
+ WORD Sequence;
+ } DUMMYSTRUCTNAME;
+} SLIST_HEADER, *PSLIST_HEADER;
+
+#endif
+
+NTSYSAPI PSLIST_ENTRY WINAPI RtlFirstEntrySList(const SLIST_HEADER*);
+NTSYSAPI VOID WINAPI RtlInitializeSListHead(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedFlushSList(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPopEntrySList(PSLIST_HEADER);
+NTSYSAPI PSLIST_ENTRY WINAPI RtlInterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY);
+NTSYSAPI WORD WINAPI RtlQueryDepthSList(PSLIST_HEADER);
+
+
+/* Heap flags */
+
+#define HEAP_NO_SERIALIZE 0x00000001
+#define HEAP_GROWABLE 0x00000002
+#define HEAP_GENERATE_EXCEPTIONS 0x00000004
+#define HEAP_ZERO_MEMORY 0x00000008
+#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
+#define HEAP_TAIL_CHECKING_ENABLED 0x00000020
+#define HEAP_FREE_CHECKING_ENABLED 0x00000040
+#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
+#define HEAP_CREATE_ALIGN_16 0x00010000
+#define HEAP_CREATE_ENABLE_TRACING 0x00020000
+#define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
+
+/* This flag allows it to create heaps shared by all processes under win95,
+ FIXME: correct name */
+#define HEAP_SHARED 0x04000000
+
+typedef enum _HEAP_INFORMATION_CLASS {
+ HeapCompatibilityInformation,
+} HEAP_INFORMATION_CLASS;
+
+/* Processor feature flags. */
+#define PF_FLOATING_POINT_PRECISION_ERRATA 0
+#define PF_FLOATING_POINT_EMULATED 1
+#define PF_COMPARE_EXCHANGE_DOUBLE 2
+#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
+#define PF_PPC_MOVEMEM_64BIT_OK 4
+#define PF_ALPHA_BYTE_INSTRUCTIONS 5
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
+#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
+#define PF_PAE_ENABLED 9
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
+#define PF_SSE_DAZ_MODE_AVAILABLE 11
+#define PF_NX_ENABLED 12
+#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
+#define PF_COMPARE_EXCHANGE128 14
+#define PF_COMPARE64_EXCHANGE128 15
+#define PF_CHANNELS_ENABLED 16
+#define PF_XSAVE_ENABLED 17
+#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
+#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
+#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
+#define PF_VIRT_FIRMWARE_ENABLED 21
+#define PF_RDWRFSGSBASE_AVAILABLE 22
+
+
+/* Execution state flags */
+#define ES_SYSTEM_REQUIRED 0x00000001
+#define ES_DISPLAY_REQUIRED 0x00000002
+#define ES_USER_PRESENT 0x00000004
+#define ES_CONTINUOUS 0x80000000
+
+/* The Win32 register context */
+
+/* i386 context definitions */
+#ifdef __i386__
+
+#define SIZE_OF_80387_REGISTERS 80
+
+typedef struct _FLOATING_SAVE_AREA
+{
+ DWORD ControlWord;
+ DWORD StatusWord;
+ DWORD TagWord;
+ DWORD ErrorOffset;
+ DWORD ErrorSelector;
+ DWORD DataOffset;
+ DWORD DataSelector;
+ BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
+ DWORD Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+
+#define MAXIMUM_SUPPORTED_EXTENSION 512
+
+typedef struct _CONTEXT
+{
+ DWORD ContextFlags;
+
+ /* These are selected by CONTEXT_DEBUG_REGISTERS */
+ DWORD Dr0;
+ DWORD Dr1;
+ DWORD Dr2;
+ DWORD Dr3;
+ DWORD Dr6;
+ DWORD Dr7;
+
+ /* These are selected by CONTEXT_FLOATING_POINT */
+ FLOATING_SAVE_AREA FloatSave;
+
+ /* These are selected by CONTEXT_SEGMENTS */
+ DWORD SegGs;
+ DWORD SegFs;
+ DWORD SegEs;
+ DWORD SegDs;
+
+ /* These are selected by CONTEXT_INTEGER */
+ DWORD Edi;
+ DWORD Esi;
+ DWORD Ebx;
+ DWORD Edx;
+ DWORD Ecx;
+ DWORD Eax;
+
+ /* These are selected by CONTEXT_CONTROL */
+ DWORD Ebp;
+ DWORD Eip;
+ DWORD SegCs;
+ DWORD EFlags;
+ DWORD Esp;
+ DWORD SegSs;
+
+ BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+
+#define CONTEXT_X86 0x00010000
+#define CONTEXT_i386 CONTEXT_X86
+#define CONTEXT_i486 CONTEXT_X86
+
+#define CONTEXT_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
+#define CONTEXT_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
+#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x0008) /* 387 state */
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010) /* DB 0-3,6,7 */
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x0020)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
+ CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+#endif /* __i386__ */
+
+typedef struct _LDT_ENTRY {
+ WORD LimitLow;
+ WORD BaseLow;
+ union {
+ struct {
+ BYTE BaseMid;
+ BYTE Flags1;
+ BYTE Flags2;
+ BYTE BaseHi;
+ } Bytes;
+ struct {
+ unsigned BaseMid: 8;
+ unsigned Type : 5;
+ unsigned Dpl : 2;
+ unsigned Pres : 1;
+ unsigned LimitHi : 4;
+ unsigned Sys : 1;
+ unsigned Reserved_0 : 1;
+ unsigned Default_Big : 1;
+ unsigned Granularity : 1;
+ unsigned BaseHi : 8;
+ } Bits;
+ } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY;
+
+/* x86-64 context definitions */
+#if defined(__x86_64__)
+
+#define CONTEXT_AMD64 0x00100000
+
+#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x0001)
+#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x0002)
+#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x0004)
+#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x0008)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x0010)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct DECLSPEC_ALIGN(16) _M128A {
+ ULONGLONG Low;
+ LONGLONG High;
+} M128A, *PM128A;
+
+typedef struct _XMM_SAVE_AREA32 {
+ WORD ControlWord; /* 000 */
+ WORD StatusWord; /* 002 */
+ BYTE TagWord; /* 004 */
+ BYTE Reserved1; /* 005 */
+ WORD ErrorOpcode; /* 006 */
+ DWORD ErrorOffset; /* 008 */
+ WORD ErrorSelector; /* 00c */
+ WORD Reserved2; /* 00e */
+ DWORD DataOffset; /* 010 */
+ WORD DataSelector; /* 014 */
+ WORD Reserved3; /* 016 */
+ DWORD MxCsr; /* 018 */
+ DWORD MxCsr_Mask; /* 01c */
+ M128A FloatRegisters[8]; /* 020 */
+ M128A XmmRegisters[16]; /* 0a0 */
+ BYTE Reserved4[96]; /* 1a0 */
+} XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
+
+typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
+ DWORD64 P1Home; /* 000 */
+ DWORD64 P2Home; /* 008 */
+ DWORD64 P3Home; /* 010 */
+ DWORD64 P4Home; /* 018 */
+ DWORD64 P5Home; /* 020 */
+ DWORD64 P6Home; /* 028 */
+
+ /* Control flags */
+ DWORD ContextFlags; /* 030 */
+ DWORD MxCsr; /* 034 */
+
+ /* Segment */
+ WORD SegCs; /* 038 */
+ WORD SegDs; /* 03a */
+ WORD SegEs; /* 03c */
+ WORD SegFs; /* 03e */
+ WORD SegGs; /* 040 */
+ WORD SegSs; /* 042 */
+ DWORD EFlags; /* 044 */
+
+ /* Debug */
+ DWORD64 Dr0; /* 048 */
+ DWORD64 Dr1; /* 050 */
+ DWORD64 Dr2; /* 058 */
+ DWORD64 Dr3; /* 060 */
+ DWORD64 Dr6; /* 068 */
+ DWORD64 Dr7; /* 070 */
+
+ /* Integer */
+ DWORD64 Rax; /* 078 */
+ DWORD64 Rcx; /* 080 */
+ DWORD64 Rdx; /* 088 */
+ DWORD64 Rbx; /* 090 */
+ DWORD64 Rsp; /* 098 */
+ DWORD64 Rbp; /* 0a0 */
+ DWORD64 Rsi; /* 0a8 */
+ DWORD64 Rdi; /* 0b0 */
+ DWORD64 R8; /* 0b8 */
+ DWORD64 R9; /* 0c0 */
+ DWORD64 R10; /* 0c8 */
+ DWORD64 R11; /* 0d0 */
+ DWORD64 R12; /* 0d8 */
+ DWORD64 R13; /* 0e0 */
+ DWORD64 R14; /* 0e8 */
+ DWORD64 R15; /* 0f0 */
+
+ /* Counter */
+ DWORD64 Rip; /* 0f8 */
+
+ /* Floating point */
+ union {
+ XMM_SAVE_AREA32 FltSave; /* 100 */
+ struct {
+ M128A Header[2]; /* 100 */
+ M128A Legacy[8]; /* 120 */
+ M128A Xmm0; /* 1a0 */
+ M128A Xmm1; /* 1b0 */
+ M128A Xmm2; /* 1c0 */
+ M128A Xmm3; /* 1d0 */
+ M128A Xmm4; /* 1e0 */
+ M128A Xmm5; /* 1f0 */
+ M128A Xmm6; /* 200 */
+ M128A Xmm7; /* 210 */
+ M128A Xmm8; /* 220 */
+ M128A Xmm9; /* 230 */
+ M128A Xmm10; /* 240 */
+ M128A Xmm11; /* 250 */
+ M128A Xmm12; /* 260 */
+ M128A Xmm13; /* 270 */
+ M128A Xmm14; /* 280 */
+ M128A Xmm15; /* 290 */
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+
+ /* Vector */
+ M128A VectorRegister[26]; /* 300 */
+ DWORD64 VectorControl; /* 4a0 */
+
+ /* Debug control */
+ DWORD64 DebugControl; /* 4a8 */
+ DWORD64 LastBranchToRip; /* 4b0 */
+ DWORD64 LastBranchFromRip; /* 4b8 */
+ DWORD64 LastExceptionToRip; /* 4c0 */
+ DWORD64 LastExceptionFromRip; /* 4c8 */
+} CONTEXT;
+
+typedef struct _RUNTIME_FUNCTION
+{
+ DWORD BeginAddress;
+ DWORD EndAddress;
+ DWORD UnwindData;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY
+{
+ ULONG64 ImageBase;
+ PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+#define UNWIND_HISTORY_TABLE_NONE 0
+#define UNWIND_HISTORY_TABLE_GLOBAL 1
+#define UNWIND_HISTORY_TABLE_LOCAL 2
+
+typedef struct _UNWIND_HISTORY_TABLE
+{
+ ULONG Count;
+ UCHAR Search;
+ ULONG64 LowAddress;
+ ULONG64 HighAddress;
+ UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+
+typedef struct _KNONVOLATILE_CONTEXT_POINTERS
+{
+ union
+ {
+ PM128A FloatingContext[16];
+ struct
+ {
+ PM128A Xmm0;
+ PM128A Xmm1;
+ PM128A Xmm2;
+ PM128A Xmm3;
+ PM128A Xmm4;
+ PM128A Xmm5;
+ PM128A Xmm6;
+ PM128A Xmm7;
+ PM128A Xmm8;
+ PM128A Xmm9;
+ PM128A Xmm10;
+ PM128A Xmm11;
+ PM128A Xmm12;
+ PM128A Xmm13;
+ PM128A Xmm14;
+ PM128A Xmm15;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+
+ union
+ {
+ PULONG64 IntegerContext[16];
+ struct
+ {
+ PULONG64 Rax;
+ PULONG64 Rcx;
+ PULONG64 Rdx;
+ PULONG64 Rbx;
+ PULONG64 Rsp;
+ PULONG64 Rbp;
+ PULONG64 Rsi;
+ PULONG64 Rdi;
+ PULONG64 R8;
+ PULONG64 R9;
+ PULONG64 R10;
+ PULONG64 R11;
+ PULONG64 R12;
+ PULONG64 R13;
+ PULONG64 R14;
+ PULONG64 R15;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME2;
+} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+
+BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD64);
+BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
+PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(DWORD64,DWORD64*,UNWIND_HISTORY_TABLE*);
+PVOID WINAPI RtlVirtualUnwind(ULONG,ULONG64,ULONG64,RUNTIME_FUNCTION*,CONTEXT*,PVOID*,ULONG64*,KNONVOLATILE_CONTEXT_POINTERS*);
+
+#define UNW_FLAG_NHANDLER 0
+#define UNW_FLAG_EHANDLER 1
+#define UNW_FLAG_UHANDLER 2
+#define UNW_FLAG_CHAININFO 4
+
+#endif /* __x86_64__ */
+
+/* IA64 context definitions */
+#ifdef __ia64__
+
+#define CONTEXT_IA64 0x00080000
+#define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001)
+#define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002)
+#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004)
+#define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008)
+#define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010)
+#define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020)
+#define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
+
+#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
+#define CONTEXT_SERVICE_ACTIVE 0x10000000
+#define CONTEXT_EXCEPTION_REQUEST 0x40000000
+#define CONTEXT_EXCEPTION_REPORTING 0x80000000
+
+typedef struct _CONTEXT
+{
+ DWORD ContextFlags;
+ DWORD Fill1[3];
+ ULONGLONG DbI0;
+ ULONGLONG DbI1;
+ ULONGLONG DbI2;
+ ULONGLONG DbI3;
+ ULONGLONG DbI4;
+ ULONGLONG DbI5;
+ ULONGLONG DbI6;
+ ULONGLONG DbI7;
+ ULONGLONG DbD0;
+ ULONGLONG DbD1;
+ ULONGLONG DbD2;
+ ULONGLONG DbD3;
+ ULONGLONG DbD4;
+ ULONGLONG DbD5;
+ ULONGLONG DbD6;
+ ULONGLONG DbD7;
+ FLOAT128 FltS0;
+ FLOAT128 FltS1;
+ FLOAT128 FltS2;
+ FLOAT128 FltS3;
+ FLOAT128 FltT0;
+ FLOAT128 FltT1;
+ FLOAT128 FltT2;
+ FLOAT128 FltT3;
+ FLOAT128 FltT4;
+ FLOAT128 FltT5;
+ FLOAT128 FltT6;
+ FLOAT128 FltT7;
+ FLOAT128 FltT8;
+ FLOAT128 FltT9;
+ FLOAT128 FltS4;
+ FLOAT128 FltS5;
+ FLOAT128 FltS6;
+ FLOAT128 FltS7;
+ FLOAT128 FltS8;
+ FLOAT128 FltS9;
+ FLOAT128 FltS10;
+ FLOAT128 FltS11;
+ FLOAT128 FltS12;
+ FLOAT128 FltS13;
+ FLOAT128 FltS14;
+ FLOAT128 FltS15;
+ FLOAT128 FltS16;
+ FLOAT128 FltS17;
+ FLOAT128 FltS18;
+ FLOAT128 FltS19;
+ FLOAT128 FltF32;
+ FLOAT128 FltF33;
+ FLOAT128 FltF34;
+ FLOAT128 FltF35;
+ FLOAT128 FltF36;
+ FLOAT128 FltF37;
+ FLOAT128 FltF38;
+ FLOAT128 FltF39;
+ FLOAT128 FltF40;
+ FLOAT128 FltF41;
+ FLOAT128 FltF42;
+ FLOAT128 FltF43;
+ FLOAT128 FltF44;
+ FLOAT128 FltF45;
+ FLOAT128 FltF46;
+ FLOAT128 FltF47;
+ FLOAT128 FltF48;
+ FLOAT128 FltF49;
+ FLOAT128 FltF50;
+ FLOAT128 FltF51;
+ FLOAT128 FltF52;
+ FLOAT128 FltF53;
+ FLOAT128 FltF54;
+ FLOAT128 FltF55;
+ FLOAT128 FltF56;
+ FLOAT128 FltF57;
+ FLOAT128 FltF58;
+ FLOAT128 FltF59;
+ FLOAT128 FltF60;
+ FLOAT128 FltF61;
+ FLOAT128 FltF62;
+ FLOAT128 FltF63;
+ FLOAT128 FltF64;
+ FLOAT128 FltF65;
+ FLOAT128 FltF66;
+ FLOAT128 FltF67;
+ FLOAT128 FltF68;
+ FLOAT128 FltF69;
+ FLOAT128 FltF70;
+ FLOAT128 FltF71;
+ FLOAT128 FltF72;
+ FLOAT128 FltF73;
+ FLOAT128 FltF74;
+ FLOAT128 FltF75;
+ FLOAT128 FltF76;
+ FLOAT128 FltF77;
+ FLOAT128 FltF78;
+ FLOAT128 FltF79;
+ FLOAT128 FltF80;
+ FLOAT128 FltF81;
+ FLOAT128 FltF82;
+ FLOAT128 FltF83;
+ FLOAT128 FltF84;
+ FLOAT128 FltF85;
+ FLOAT128 FltF86;
+ FLOAT128 FltF87;
+ FLOAT128 FltF88;
+ FLOAT128 FltF89;
+ FLOAT128 FltF90;
+ FLOAT128 FltF91;
+ FLOAT128 FltF92;
+ FLOAT128 FltF93;
+ FLOAT128 FltF94;
+ FLOAT128 FltF95;
+ FLOAT128 FltF96;
+ FLOAT128 FltF97;
+ FLOAT128 FltF98;
+ FLOAT128 FltF99;
+ FLOAT128 FltF100;
+ FLOAT128 FltF101;
+ FLOAT128 FltF102;
+ FLOAT128 FltF103;
+ FLOAT128 FltF104;
+ FLOAT128 FltF105;
+ FLOAT128 FltF106;
+ FLOAT128 FltF107;
+ FLOAT128 FltF108;
+ FLOAT128 FltF109;
+ FLOAT128 FltF110;
+ FLOAT128 FltF111;
+ FLOAT128 FltF112;
+ FLOAT128 FltF113;
+ FLOAT128 FltF114;
+ FLOAT128 FltF115;
+ FLOAT128 FltF116;
+ FLOAT128 FltF117;
+ FLOAT128 FltF118;
+ FLOAT128 FltF119;
+ FLOAT128 FltF120;
+ FLOAT128 FltF121;
+ FLOAT128 FltF122;
+ FLOAT128 FltF123;
+ FLOAT128 FltF124;
+ FLOAT128 FltF125;
+ FLOAT128 FltF126;
+ FLOAT128 FltF127;
+ ULONGLONG StFPSR;
+ ULONGLONG IntGp;
+ ULONGLONG IntT0;
+ ULONGLONG IntT1;
+ ULONGLONG IntS0;
+ ULONGLONG IntS1;
+ ULONGLONG IntS2;
+ ULONGLONG IntS3;
+ ULONGLONG IntV0;
+ ULONGLONG IntT2;
+ ULONGLONG IntT3;
+ ULONGLONG IntT4;
+ ULONGLONG IntSp;
+ ULONGLONG IntTeb;
+ ULONGLONG IntT5;
+ ULONGLONG IntT6;
+ ULONGLONG IntT7;
+ ULONGLONG IntT8;
+ ULONGLONG IntT9;
+ ULONGLONG IntT10;
+ ULONGLONG IntT11;
+ ULONGLONG IntT12;
+ ULONGLONG IntT13;
+ ULONGLONG IntT14;
+ ULONGLONG IntT15;
+ ULONGLONG IntT16;
+ ULONGLONG IntT17;
+ ULONGLONG IntT18;
+ ULONGLONG IntT19;
+ ULONGLONG IntT20;
+ ULONGLONG IntT21;
+ ULONGLONG IntT22;
+ ULONGLONG IntNats;
+ ULONGLONG Preds;
+ ULONGLONG BrRp;
+ ULONGLONG BrS0;
+ ULONGLONG BrS1;
+ ULONGLONG BrS2;
+ ULONGLONG BrS3;
+ ULONGLONG BrS4;
+ ULONGLONG BrT0;
+ ULONGLONG BrT1;
+ ULONGLONG ApUNAT;
+ ULONGLONG ApLC;
+ ULONGLONG ApEC;
+ ULONGLONG ApCCV;
+ ULONGLONG ApDCR;
+ ULONGLONG RsPFS;
+ ULONGLONG RsBSP;
+ ULONGLONG RsBSPSTORE;
+ ULONGLONG RsRSC;
+ ULONGLONG RsRNAT;
+ ULONGLONG StIPSR;
+ ULONGLONG StIIP;
+ ULONGLONG StIFS;
+ ULONGLONG StFCR;
+ ULONGLONG Eflag;
+ ULONGLONG SegCSD;
+ ULONGLONG SegSSD;
+ ULONGLONG Cflag;
+ ULONGLONG StFSR;
+ ULONGLONG StFIR;
+ ULONGLONG StFDR;
+ ULONGLONG UNUSEDPACK;
+} CONTEXT, *PCONTEXT;
+
+typedef struct _RUNTIME_FUNCTION
+{
+ ULONG BeginAddress;
+ ULONG EndAddress;
+ ULONG UnwindInfoAddress;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+
+typedef struct _FRAME_POINTERS {
+ ULONGLONG MemoryStackFp;
+ ULONGLONG BackingStoreFp;
+} FRAME_POINTERS, *PFRAME_POINTERS;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
+ ULONG64 ImageBase;
+ ULONG64 Gp;
+ PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+typedef struct _UNWIND_HISTORY_TABLE {
+ ULONG Count;
+ UCHAR Search;
+ ULONG64 LowAddress;
+ ULONG64 HighAddress;
+ UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+
+typedef struct _KNONVOLATILE_CONTEXT_POINTERS
+{
+ PFLOAT128 FltS0;
+ PFLOAT128 FltS1;
+ PFLOAT128 FltS2;
+ PFLOAT128 FltS3;
+ PFLOAT128 HighFloatingContext[10];
+ PFLOAT128 FltS4;
+ PFLOAT128 FltS5;
+ PFLOAT128 FltS6;
+ PFLOAT128 FltS7;
+ PFLOAT128 FltS8;
+ PFLOAT128 FltS9;
+ PFLOAT128 FltS10;
+ PFLOAT128 FltS11;
+ PFLOAT128 FltS12;
+ PFLOAT128 FltS13;
+ PFLOAT128 FltS14;
+ PFLOAT128 FltS15;
+ PFLOAT128 FltS16;
+ PFLOAT128 FltS17;
+ PFLOAT128 FltS18;
+ PFLOAT128 FltS19;
+ PULONGLONG IntS0;
+ PULONGLONG IntS1;
+ PULONGLONG IntS2;
+ PULONGLONG IntS3;
+ PULONGLONG IntSp;
+ PULONGLONG IntS0Nat;
+ PULONGLONG IntS1Nat;
+ PULONGLONG IntS2Nat;
+ PULONGLONG IntS3Nat;
+ PULONGLONG IntSpNat;
+ PULONGLONG Preds;
+ PULONGLONG BrRp;
+ PULONGLONG BrS0;
+ PULONGLONG BrS1;
+ PULONGLONG BrS2;
+ PULONGLONG BrS3;
+ PULONGLONG BrS4;
+ PULONGLONG ApUNAT;
+ PULONGLONG ApLC;
+ PULONGLONG ApEC;
+ PULONGLONG RsPFS;
+ PULONGLONG StFSR;
+ PULONGLONG StFIR;
+ PULONGLONG StFDR;
+ PULONGLONG Cflag;
+} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
+
+ULONGLONG WINAPI RtlVirtualUnwind(ULONGLONG,ULONGLONG,RUNTIME_FUNCTION*,CONTEXT*,BOOLEAN*,FRAME_POINTERS*,KNONVOLATILE_CONTEXT_POINTERS*);
+
+#endif /* __ia64__ */
+
+/* Alpha context definitions */
+#if defined(_ALPHA_) || defined(__ALPHA__) || defined(__alpha__)
+
+#define CONTEXT_ALPHA 0x00020000
+
+#define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001)
+#define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002)
+#define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT
+{
+ /* selected by CONTEXT_FLOATING_POINT */
+ ULONGLONG FltF0;
+ ULONGLONG FltF1;
+ ULONGLONG FltF2;
+ ULONGLONG FltF3;
+ ULONGLONG FltF4;
+ ULONGLONG FltF5;
+ ULONGLONG FltF6;
+ ULONGLONG FltF7;
+ ULONGLONG FltF8;
+ ULONGLONG FltF9;
+ ULONGLONG FltF10;
+ ULONGLONG FltF11;
+ ULONGLONG FltF12;
+ ULONGLONG FltF13;
+ ULONGLONG FltF14;
+ ULONGLONG FltF15;
+ ULONGLONG FltF16;
+ ULONGLONG FltF17;
+ ULONGLONG FltF18;
+ ULONGLONG FltF19;
+ ULONGLONG FltF20;
+ ULONGLONG FltF21;
+ ULONGLONG FltF22;
+ ULONGLONG FltF23;
+ ULONGLONG FltF24;
+ ULONGLONG FltF25;
+ ULONGLONG FltF26;
+ ULONGLONG FltF27;
+ ULONGLONG FltF28;
+ ULONGLONG FltF29;
+ ULONGLONG FltF30;
+ ULONGLONG FltF31;
+
+ /* selected by CONTEXT_INTEGER */
+ ULONGLONG IntV0;
+ ULONGLONG IntT0;
+ ULONGLONG IntT1;
+ ULONGLONG IntT2;
+ ULONGLONG IntT3;
+ ULONGLONG IntT4;
+ ULONGLONG IntT5;
+ ULONGLONG IntT6;
+ ULONGLONG IntT7;
+ ULONGLONG IntS0;
+ ULONGLONG IntS1;
+ ULONGLONG IntS2;
+ ULONGLONG IntS3;
+ ULONGLONG IntS4;
+ ULONGLONG IntS5;
+ ULONGLONG IntFp;
+ ULONGLONG IntA0;
+ ULONGLONG IntA1;
+ ULONGLONG IntA2;
+ ULONGLONG IntA3;
+ ULONGLONG IntA4;
+ ULONGLONG IntA5;
+ ULONGLONG IntT8;
+ ULONGLONG IntT9;
+ ULONGLONG IntT10;
+ ULONGLONG IntT11;
+ ULONGLONG IntRa;
+ ULONGLONG IntT12;
+ ULONGLONG IntAt;
+ ULONGLONG IntGp;
+ ULONGLONG IntSp;
+ ULONGLONG IntZero;
+
+ /* selected by CONTEXT_FLOATING_POINT */
+ ULONGLONG Fpcr;
+ ULONGLONG SoftFpcr;
+
+ /* selected by CONTEXT_CONTROL */
+ ULONGLONG Fir;
+ DWORD Psr;
+ DWORD ContextFlags;
+ DWORD Fill[4];
+} CONTEXT;
+
+#define _QUAD_PSR_OFFSET HighSoftFpcr
+#define _QUAD_FLAGS_OFFSET HighFir
+
+#endif /* _ALPHA_ */
+
+#ifdef __arm__
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_ARM 0x0200000
+#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001)
+#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002)
+#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _RUNTIME_FUNCTION
+{
+ DWORD BeginAddress;
+ union {
+ DWORD UnwindData;
+ struct {
+ DWORD Flag : 2;
+ DWORD FunctionLength : 11;
+ DWORD Ret : 2;
+ DWORD H : 1;
+ DWORD Reg : 3;
+ DWORD R : 1;
+ DWORD L : 1;
+ DWORD C : 1;
+ DWORD StackAdjust : 10;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
+
+#define UNWIND_HISTORY_TABLE_SIZE 12
+
+typedef struct _UNWIND_HISTORY_TABLE_ENTRY
+{
+ DWORD ImageBase;
+ PRUNTIME_FUNCTION FunctionEntry;
+} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
+
+typedef struct _UNWIND_HISTORY_TABLE
+{
+ DWORD Count;
+ BYTE LocalHint;
+ BYTE GlobalHint;
+ BYTE Search;
+ BYTE Once;
+ DWORD LowAddress;
+ DWORD HighAddress;
+ UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
+} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
+
+typedef struct _CONTEXT {
+ /* The flags values within this flag control the contents of
+ a CONTEXT record.
+
+ If the context record is used as an input parameter, then
+ for each portion of the context record controlled by a flag
+ whose value is set, it is assumed that that portion of the
+ context record contains valid context. If the context record
+ is being used to modify a thread's context, then only that
+ portion of the threads context will be modified.
+
+ If the context record is used as an IN OUT parameter to capture
+ the context of a thread, then only those portions of the thread's
+ context corresponding to set flags will be returned.
+
+ The context record is never used as an OUT only parameter. */
+
+ ULONG ContextFlags;
+
+ /* This section is specified/returned if the ContextFlags word contains
+ the flag CONTEXT_INTEGER. */
+ ULONG R0;
+ ULONG R1;
+ ULONG R2;
+ ULONG R3;
+ ULONG R4;
+ ULONG R5;
+ ULONG R6;
+ ULONG R7;
+ ULONG R8;
+ ULONG R9;
+ ULONG R10;
+ ULONG Fp;
+ ULONG Ip;
+
+ /* These are selected by CONTEXT_CONTROL */
+ ULONG Sp;
+ ULONG Lr;
+ ULONG Pc;
+ ULONG Cpsr;
+} CONTEXT;
+
+BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD);
+BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*);
+PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*);
+
+#endif /* __arm__ */
+
+#ifdef __aarch64__
+/*
+ * FIXME:
+ *
+ * There is not yet an official CONTEXT structure defined for the AArch64
+ * architecture, so I just made one up.
+ *
+ */
+
+#define CONTEXT_ARM64 0x2000000
+#define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x00000001)
+#define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x00000002)
+#define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT {
+ ULONG ContextFlags;
+
+ /* This section is specified/returned if the ContextFlags word contains
+ the flag CONTEXT_INTEGER. */
+ ULONGLONG X0;
+ ULONGLONG X1;
+ ULONGLONG X2;
+ ULONGLONG X3;
+ ULONGLONG X4;
+ ULONGLONG X5;
+ ULONGLONG X6;
+ ULONGLONG X7;
+ ULONGLONG X8;
+ ULONGLONG X9;
+ ULONGLONG X10;
+ ULONGLONG X11;
+ ULONGLONG X12;
+ ULONGLONG X13;
+ ULONGLONG X14;
+ ULONGLONG X15;
+ ULONGLONG X16;
+ ULONGLONG X17;
+ ULONGLONG X18;
+ ULONGLONG X19;
+ ULONGLONG X20;
+ ULONGLONG X21;
+ ULONGLONG X22;
+ ULONGLONG X23;
+ ULONGLONG X24;
+ ULONGLONG X25;
+ ULONGLONG X26;
+ ULONGLONG X27;
+ ULONGLONG X28;
+ ULONGLONG X29;
+ ULONGLONG X30;
+
+ /* These are selected by CONTEXT_CONTROL */
+ ULONGLONG Sp;
+ ULONGLONG Pc;
+ ULONGLONG PState;
+
+ /* These are selected by CONTEXT_FLOATING_POINT */
+ /* FIXME */
+} CONTEXT;
+
+#endif /* __aarch64__ */
+
+
+/* Mips context definitions */
+#if defined(_MIPS_) || defined(__MIPS__) || defined(__mips__)
+
+#define CONTEXT_R4000 0x00010000
+
+#define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
+#define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
+#define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct _CONTEXT
+{
+ DWORD Argument[4];
+ /* These are selected by CONTEXT_FLOATING_POINT */
+ DWORD FltF0;
+ DWORD FltF1;
+ DWORD FltF2;
+ DWORD FltF3;
+ DWORD FltF4;
+ DWORD FltF5;
+ DWORD FltF6;
+ DWORD FltF7;
+ DWORD FltF8;
+ DWORD FltF9;
+ DWORD FltF10;
+ DWORD FltF11;
+ DWORD FltF12;
+ DWORD FltF13;
+ DWORD FltF14;
+ DWORD FltF15;
+ DWORD FltF16;
+ DWORD FltF17;
+ DWORD FltF18;
+ DWORD FltF19;
+ DWORD FltF20;
+ DWORD FltF21;
+ DWORD FltF22;
+ DWORD FltF23;
+ DWORD FltF24;
+ DWORD FltF25;
+ DWORD FltF26;
+ DWORD FltF27;
+ DWORD FltF28;
+ DWORD FltF29;
+ DWORD FltF30;
+ DWORD FltF31;
+
+ /* These are selected by CONTEXT_INTEGER */
+ DWORD IntZero;
+ DWORD IntAt;
+ DWORD IntV0;
+ DWORD IntV1;
+ DWORD IntA0;
+ DWORD IntA1;
+ DWORD IntA2;
+ DWORD IntA3;
+ DWORD IntT0;
+ DWORD IntT1;
+ DWORD IntT2;
+ DWORD IntT3;
+ DWORD IntT4;
+ DWORD IntT5;
+ DWORD IntT6;
+ DWORD IntT7;
+ DWORD IntS0;
+ DWORD IntS1;
+ DWORD IntS2;
+ DWORD IntS3;
+ DWORD IntS4;
+ DWORD IntS5;
+ DWORD IntS6;
+ DWORD IntS7;
+ DWORD IntT8;
+ DWORD IntT9;
+ DWORD IntK0;
+ DWORD IntK1;
+ DWORD IntGp;
+ DWORD IntSp;
+ DWORD IntS8;
+ DWORD IntRa;
+ DWORD IntLo;
+ DWORD IntHi;
+
+ /* These are selected by CONTEXT_FLOATING_POINT */
+ DWORD Fsr;
+
+ /* These are selected by CONTEXT_CONTROL */
+ DWORD Fir;
+ DWORD Psr;
+
+ DWORD ContextFlags;
+ DWORD Fill[2];
+} CONTEXT;
+
+#endif /* _MIPS_ */
+
+/* PowerPC context definitions */
+#ifdef __powerpc__
+
+#define CONTEXT_CONTROL 0x0001
+#define CONTEXT_FLOATING_POINT 0x0002
+#define CONTEXT_INTEGER 0x0004
+#define CONTEXT_DEBUG_REGISTERS 0x0008
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
+typedef struct
+{
+ /* These are selected by CONTEXT_FLOATING_POINT */
+ double Fpr0;
+ double Fpr1;
+ double Fpr2;
+ double Fpr3;
+ double Fpr4;
+ double Fpr5;
+ double Fpr6;
+ double Fpr7;
+ double Fpr8;
+ double Fpr9;
+ double Fpr10;
+ double Fpr11;
+ double Fpr12;
+ double Fpr13;
+ double Fpr14;
+ double Fpr15;
+ double Fpr16;
+ double Fpr17;
+ double Fpr18;
+ double Fpr19;
+ double Fpr20;
+ double Fpr21;
+ double Fpr22;
+ double Fpr23;
+ double Fpr24;
+ double Fpr25;
+ double Fpr26;
+ double Fpr27;
+ double Fpr28;
+ double Fpr29;
+ double Fpr30;
+ double Fpr31;
+ double Fpscr;
+
+ /* These are selected by CONTEXT_INTEGER */
+ DWORD Gpr0;
+ DWORD Gpr1;
+ DWORD Gpr2;
+ DWORD Gpr3;
+ DWORD Gpr4;
+ DWORD Gpr5;
+ DWORD Gpr6;
+ DWORD Gpr7;
+ DWORD Gpr8;
+ DWORD Gpr9;
+ DWORD Gpr10;
+ DWORD Gpr11;
+ DWORD Gpr12;
+ DWORD Gpr13;
+ DWORD Gpr14;
+ DWORD Gpr15;
+ DWORD Gpr16;
+ DWORD Gpr17;
+ DWORD Gpr18;
+ DWORD Gpr19;
+ DWORD Gpr20;
+ DWORD Gpr21;
+ DWORD Gpr22;
+ DWORD Gpr23;
+ DWORD Gpr24;
+ DWORD Gpr25;
+ DWORD Gpr26;
+ DWORD Gpr27;
+ DWORD Gpr28;
+ DWORD Gpr29;
+ DWORD Gpr30;
+ DWORD Gpr31;
+
+ DWORD Cr;
+ DWORD Xer;
+
+ /* These are selected by CONTEXT_CONTROL */
+ DWORD Msr;
+ DWORD Iar; /* Instruction Address Register , aka PC ... */
+ DWORD Lr;
+ DWORD Ctr;
+
+ DWORD ContextFlags;
+
+ DWORD Dar; /* Fault registers for coredump */
+ DWORD Dsisr;
+ DWORD Trap; /* number of powerpc exception taken */
+
+ /* These are selected by CONTEXT_DEBUG_REGISTERS */
+ DWORD Dr0;
+ DWORD Dr1;
+ DWORD Dr2;
+ DWORD Dr3;
+ DWORD Dr4;
+ DWORD Dr5;
+ DWORD Dr6;
+ DWORD Dr7;
+} CONTEXT;
+
+typedef struct _STACK_FRAME_HEADER
+{
+ DWORD BackChain;
+ DWORD GlueSaved1;
+ DWORD GlueSaved2;
+ DWORD Reserved1;
+ DWORD Spare1;
+ DWORD Spare2;
+
+ DWORD Parameter0;
+ DWORD Parameter1;
+ DWORD Parameter2;
+ DWORD Parameter3;
+ DWORD Parameter4;
+ DWORD Parameter5;
+ DWORD Parameter6;
+ DWORD Parameter7;
+} STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER;
+
+#endif /* __powerpc__ */
+
+#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
+#error You need to define a CONTEXT for your CPU
+#endif
+
+typedef CONTEXT *PCONTEXT;
+
+NTSYSAPI void WINAPI RtlCaptureContext(CONTEXT*);
+
+/*
+ * Product types
+ */
+#define PRODUCT_UNDEFINED 0x00000000
+#define PRODUCT_ULTIMATE 0x00000001
+#define PRODUCT_HOME_BASIC 0x00000002
+#define PRODUCT_HOME_PREMIUM 0x00000003
+#define PRODUCT_ENTERPRISE 0x00000004
+#define PRODUCT_HOME_BASIC_N 0x00000005
+#define PRODUCT_BUSINESS 0x00000006
+#define PRODUCT_STANDARD_SERVER 0x00000007
+#define PRODUCT_DATACENTER_SERVER 0x00000008
+#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
+#define PRODUCT_ENTERPRISE_SERVER 0x0000000A
+#define PRODUCT_STARTER 0x0000000B
+#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
+#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
+#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
+#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
+#define PRODUCT_BUSINESS_N 0x00000010
+#define PRODUCT_WEB_SERVER 0x00000011
+#define PRODUCT_CLUSTER_SERVER 0x00000012
+#define PRODUCT_HOME_SERVER 0x00000013
+#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
+#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
+#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
+#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
+#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
+#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
+#define PRODUCT_HOME_PREMIUM_N 0x0000001A
+#define PRODUCT_ENTERPRISE_N 0x0000001B
+#define PRODUCT_ULTIMATE_N 0x0000001C
+#define PRODUCT_WEB_SERVER_CORE 0x0000001D
+#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
+#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
+#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
+#define PRODUCT_SERVER_FOUNDATION 0x00000021
+#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
+#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
+#define PRODUCT_STANDARD_SERVER_V 0x00000024
+#define PRODUCT_DATACENTER_SERVER_V 0x00000025
+#define PRODUCT_SERVER_V 0x00000025
+#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
+#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
+#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
+#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
+#define PRODUCT_HYPERV 0x0000002A
+#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
+#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
+#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
+#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
+#define PRODUCT_STARTER_N 0x0000002F
+#define PRODUCT_PROFESSIONAL 0x00000030
+#define PRODUCT_PROFESSIONAL_N 0x00000031
+#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
+#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
+#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
+#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
+#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
+#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
+#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
+#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
+#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
+#define PRODUCT_CLUSTER_SERVER_V 0x00000040
+#define PRODUCT_EMBEDDED 0x00000041
+#define PRODUCT_STARTER_E 0x00000042
+#define PRODUCT_HOME_BASIC_E 0x00000043
+#define PRODUCT_HOME_PREMIUM_E 0x00000044
+#define PRODUCT_PROFESSIONAL_E 0x00000045
+#define PRODUCT_ENTERPRISE_E 0x00000046
+#define PRODUCT_ULTIMATE_E 0x00000047
+#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
+#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
+#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
+#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
+#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
+#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
+#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
+#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
+#define PRODUCT_CORE_ARM 0x00000061
+#define PRODUCT_CORE_N 0x00000062
+#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
+#define PRODUCT_CORE_LANGUAGESPECIFIC 0x00000064
+#define PRODUCT_CORE 0x00000065
+#define PRODUCT_PROFESSIONAL_WMC 0x00000067
+#define PRODUCT_UNLICENSED 0xABCDABCD
+
+
+/*
+ * Language IDs
+ */
+
+#define MAKELCID(l, s) (MAKELONG(l, s))
+
+#define MAKELANGID(p, s) ((((WORD)(s))<<10) | (WORD)(p))
+#define PRIMARYLANGID(l) ((WORD)(l) & 0x3ff)
+#define SUBLANGID(l) ((WORD)(l) >> 10)
+
+#define LANGIDFROMLCID(lcid) ((WORD)(lcid))
+#define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0x0f))
+
+#define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
+#define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
+#define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
+#define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
+#define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
+#define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
+#define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_DEFAULT),SORT_DEFAULT))
+#define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_CUSTOM_UNSPECIFIED),SORT_DEFAULT))
+#define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_UI_CUSTOM_DEFAULT),SORT_DEFAULT))
+#define LOCALE_NAME_MAX_LENGTH 85
+
+
+#define UNREFERENCED_PARAMETER(u) (void)(u)
+#define DBG_UNREFERENCED_PARAMETER(u) (void)(u)
+#define DBG_UNREFERENCED_LOCAL_VARIABLE(u) (void)(u)
+
+#include <winnt.rh>
+
+
+/*
+ * Definitions for IsTextUnicode()
+ */
+
+#define IS_TEXT_UNICODE_ASCII16 0x0001
+#define IS_TEXT_UNICODE_STATISTICS 0x0002
+#define IS_TEXT_UNICODE_CONTROLS 0x0004
+#define IS_TEXT_UNICODE_SIGNATURE 0x0008
+#define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
+#define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
+#define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
+#define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
+#define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
+#define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
+#define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
+#define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
+#define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
+#define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
+#define IS_TEXT_UNICODE_NULL_BYTES 0x1000
+#define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
+
+#define MAXIMUM_WAIT_OBJECTS 64
+#define MAXIMUM_SUSPEND_COUNT 127
+
+#define WT_EXECUTEDEFAULT 0x00
+#define WT_EXECUTEINIOTHREAD 0x01
+#define WT_EXECUTEINUITHREAD 0x02
+#define WT_EXECUTEINWAITTHREAD 0x04
+#define WT_EXECUTEONLYONCE 0x08
+#define WT_EXECUTELONGFUNCTION 0x10
+#define WT_EXECUTEINTIMERTHREAD 0x20
+#define WT_EXECUTEINPERSISTENTIOTHREAD 0x40
+#define WT_EXECUTEINPERSISTENTTHREAD 0x80
+#define WT_EXECUTEINLONGTHREAD 0x10
+#define WT_EXECUTEDELETEWAIT 0x08
+#define WT_TRANSFER_IMPERSONATION 0x0100
+
+
+#define EXCEPTION_CONTINUABLE 0
+#define EXCEPTION_NONCONTINUABLE 0x01
+
+/*
+ * The exception record used by Win32 to give additional information
+ * about exception to exception handlers.
+ */
+
+#define EXCEPTION_MAXIMUM_PARAMETERS 15
+
+typedef struct _EXCEPTION_RECORD
+{
+ DWORD ExceptionCode;
+ DWORD ExceptionFlags;
+ struct _EXCEPTION_RECORD *ExceptionRecord;
+
+ PVOID ExceptionAddress;
+ DWORD NumberParameters;
+ ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
+
+/*
+ * The exception pointers structure passed to exception filters
+ * in except() and the UnhandledExceptionFilter().
+ */
+
+typedef struct _EXCEPTION_POINTERS
+{
+ PEXCEPTION_RECORD ExceptionRecord;
+ PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
+
+
+/*
+ * The exception frame, used for registering exception handlers
+ * Win32 cares only about this, but compilers generally emit
+ * larger exception frames for their own use.
+ */
+
+struct _EXCEPTION_REGISTRATION_RECORD;
+
+typedef DWORD (*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct _EXCEPTION_REGISTRATION_RECORD*,
+ PCONTEXT,struct _EXCEPTION_REGISTRATION_RECORD **);
+
+typedef struct _EXCEPTION_REGISTRATION_RECORD
+{
+ struct _EXCEPTION_REGISTRATION_RECORD *Prev;
+ PEXCEPTION_HANDLER Handler;
+} EXCEPTION_REGISTRATION_RECORD;
+
+/*
+ * function pointer to an exception filter
+ */
+
+typedef LONG (CALLBACK *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS ExceptionInfo);
+
+typedef struct _NT_TIB
+{
+ struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+ PVOID StackBase;
+ PVOID StackLimit;
+ PVOID SubSystemTib;
+ union {
+ PVOID FiberData;
+ DWORD Version;
+ } DUMMYUNIONNAME;
+ PVOID ArbitraryUserPointer;
+ struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
+struct _TEB;
+
+#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+{
+ struct _TEB *teb;
+ __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
+ return teb;
+}
+#elif defined(__i386__) && defined(_MSC_VER)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+{
+ struct _TEB *teb;
+ __asm mov eax, fs:[0x18];
+ __asm mov teb, eax;
+ return teb;
+}
+#elif defined(__x86_64__) && defined(__GNUC__)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
+{
+ struct _TEB *teb;
+ __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb));
+ return teb;
+}
+#else
+extern struct _TEB * WINAPI NtCurrentTeb(void);
+#endif
+
+#ifdef NONAMELESSUNION
+#define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->u.FiberData)
+#else
+#define GetCurrentFiber() (((NT_TIB *)NtCurrentTeb())->FiberData)
+#endif
+#define GetFiberData() (*(void **)GetCurrentFiber())
+
+#define TLS_MINIMUM_AVAILABLE 64
+
+/*
+ * File formats definitions
+ */
+
+#include <pshpack2.h>
+typedef struct _IMAGE_DOS_HEADER {
+ WORD e_magic; /* 00: MZ Header signature */
+ WORD e_cblp; /* 02: Bytes on last page of file */
+ WORD e_cp; /* 04: Pages in file */
+ WORD e_crlc; /* 06: Relocations */
+ WORD e_cparhdr; /* 08: Size of header in paragraphs */
+ WORD e_minalloc; /* 0a: Minimum extra paragraphs needed */
+ WORD e_maxalloc; /* 0c: Maximum extra paragraphs needed */
+ WORD e_ss; /* 0e: Initial (relative) SS value */
+ WORD e_sp; /* 10: Initial SP value */
+ WORD e_csum; /* 12: Checksum */
+ WORD e_ip; /* 14: Initial IP value */
+ WORD e_cs; /* 16: Initial (relative) CS value */
+ WORD e_lfarlc; /* 18: File address of relocation table */
+ WORD e_ovno; /* 1a: Overlay number */
+ WORD e_res[4]; /* 1c: Reserved words */
+ WORD e_oemid; /* 24: OEM identifier (for e_oeminfo) */
+ WORD e_oeminfo; /* 26: OEM information; e_oemid specific */
+ WORD e_res2[10]; /* 28: Reserved words */
+ DWORD e_lfanew; /* 3c: Offset to extended header */
+} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
+#include <poppack.h>
+
+#define IMAGE_DOS_SIGNATURE 0x5A4D /* MZ */
+#define IMAGE_OS2_SIGNATURE 0x454E /* NE */
+#define IMAGE_OS2_SIGNATURE_LE 0x454C /* LE */
+#define IMAGE_OS2_SIGNATURE_LX 0x584C /* LX */
+#define IMAGE_VXD_SIGNATURE 0x454C /* LE */
+#define IMAGE_NT_SIGNATURE 0x00004550 /* PE00 */
+
+/*
+ * This is the Windows executable (NE) header.
+ * the name IMAGE_OS2_HEADER is misleading, but in the SDK this way.
+ */
+#include <pshpack2.h>
+typedef struct
+{
+ WORD ne_magic; /* 00 NE signature 'NE' */
+ BYTE ne_ver; /* 02 Linker version number */
+ BYTE ne_rev; /* 03 Linker revision number */
+ WORD ne_enttab; /* 04 Offset to entry table relative to NE */
+ WORD ne_cbenttab; /* 06 Length of entry table in bytes */
+ LONG ne_crc; /* 08 Checksum */
+ WORD ne_flags; /* 0c Flags about segments in this file */
+ WORD ne_autodata; /* 0e Automatic data segment number */
+ WORD ne_heap; /* 10 Initial size of local heap */
+ WORD ne_stack; /* 12 Initial size of stack */
+ DWORD ne_csip; /* 14 Initial CS:IP */
+ DWORD ne_sssp; /* 18 Initial SS:SP */
+ WORD ne_cseg; /* 1c # of entries in segment table */
+ WORD ne_cmod; /* 1e # of entries in module reference tab. */
+ WORD ne_cbnrestab; /* 20 Length of nonresident-name table */
+ WORD ne_segtab; /* 22 Offset to segment table */
+ WORD ne_rsrctab; /* 24 Offset to resource table */
+ WORD ne_restab; /* 26 Offset to resident-name table */
+ WORD ne_modtab; /* 28 Offset to module reference table */
+ WORD ne_imptab; /* 2a Offset to imported name table */
+ DWORD ne_nrestab; /* 2c Offset to nonresident-name table */
+ WORD ne_cmovent; /* 30 # of movable entry points */
+ WORD ne_align; /* 32 Logical sector alignment shift count */
+ WORD ne_cres; /* 34 # of resource segments */
+ BYTE ne_exetyp; /* 36 Flags indicating target OS */
+ BYTE ne_flagsothers; /* 37 Additional information flags */
+ WORD ne_pretthunks; /* 38 Offset to return thunks */
+ WORD ne_psegrefbytes; /* 3a Offset to segment ref. bytes */
+ WORD ne_swaparea; /* 3c Reserved by Microsoft */
+ WORD ne_expver; /* 3e Expected Windows version number */
+} IMAGE_OS2_HEADER, *PIMAGE_OS2_HEADER;
+#include <poppack.h>
+
+#include <pshpack2.h>
+typedef struct _IMAGE_VXD_HEADER {
+ WORD e32_magic;
+ BYTE e32_border;
+ BYTE e32_worder;
+ DWORD e32_level;
+ WORD e32_cpu;
+ WORD e32_os;
+ DWORD e32_ver;
+ DWORD e32_mflags;
+ DWORD e32_mpages;
+ DWORD e32_startobj;
+ DWORD e32_eip;
+ DWORD e32_stackobj;
+ DWORD e32_esp;
+ DWORD e32_pagesize;
+ DWORD e32_lastpagesize;
+ DWORD e32_fixupsize;
+ DWORD e32_fixupsum;
+ DWORD e32_ldrsize;
+ DWORD e32_ldrsum;
+ DWORD e32_objtab;
+ DWORD e32_objcnt;
+ DWORD e32_objmap;
+ DWORD e32_itermap;
+ DWORD e32_rsrctab;
+ DWORD e32_rsrccnt;
+ DWORD e32_restab;
+ DWORD e32_enttab;
+ DWORD e32_dirtab;
+ DWORD e32_dircnt;
+ DWORD e32_fpagetab;
+ DWORD e32_frectab;
+ DWORD e32_impmod;
+ DWORD e32_impmodcnt;
+ DWORD e32_impproc;
+ DWORD e32_pagesum;
+ DWORD e32_datapage;
+ DWORD e32_preload;
+ DWORD e32_nrestab;
+ DWORD e32_cbnrestab;
+ DWORD e32_nressum;
+ DWORD e32_autodata;
+ DWORD e32_debuginfo;
+ DWORD e32_debuglen;
+ DWORD e32_instpreload;
+ DWORD e32_instdemand;
+ DWORD e32_heapsize;
+ BYTE e32_res3[12];
+ DWORD e32_winresoff;
+ DWORD e32_winreslen;
+ WORD e32_devid;
+ WORD e32_ddkver;
+} IMAGE_VXD_HEADER, *PIMAGE_VXD_HEADER;
+#include <poppack.h>
+
+/* These defines describe the meanings of the bits in the Characteristics
+ field */
+
+#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* No relocation info */
+#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
+#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
+#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
+#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
+#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
+#define IMAGE_FILE_16BIT_MACHINE 0x0040
+#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
+#define IMAGE_FILE_32BIT_MACHINE 0x0100
+#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
+#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
+#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
+#define IMAGE_FILE_SYSTEM 0x1000
+#define IMAGE_FILE_DLL 0x2000
+#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
+#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
+
+/* These are the settings of the Machine field. */
+#define IMAGE_FILE_MACHINE_UNKNOWN 0
+#define IMAGE_FILE_MACHINE_I860 0x014d
+#define IMAGE_FILE_MACHINE_I386 0x014c
+#define IMAGE_FILE_MACHINE_R3000 0x0162
+#define IMAGE_FILE_MACHINE_R4000 0x0166
+#define IMAGE_FILE_MACHINE_R10000 0x0168
+#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
+#define IMAGE_FILE_MACHINE_ALPHA 0x0184
+#define IMAGE_FILE_MACHINE_SH3 0x01a2
+#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
+#define IMAGE_FILE_MACHINE_SH3E 0x01a4
+#define IMAGE_FILE_MACHINE_SH4 0x01a6
+#define IMAGE_FILE_MACHINE_SH5 0x01a8
+#define IMAGE_FILE_MACHINE_ARM 0x01c0
+#define IMAGE_FILE_MACHINE_THUMB 0x01c2
+#define IMAGE_FILE_MACHINE_ARMNT 0x01c4
+#define IMAGE_FILE_MACHINE_ARM64 0xaa64
+#define IMAGE_FILE_MACHINE_AM33 0x01d3
+#define IMAGE_FILE_MACHINE_POWERPC 0x01f0
+#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
+#define IMAGE_FILE_MACHINE_IA64 0x0200
+#define IMAGE_FILE_MACHINE_MIPS16 0x0266
+#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
+#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
+#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
+#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
+#define IMAGE_FILE_MACHINE_TRICORE 0x0520
+#define IMAGE_FILE_MACHINE_CEF 0x0cef
+#define IMAGE_FILE_MACHINE_EBC 0x0ebc
+#define IMAGE_FILE_MACHINE_AMD64 0x8664
+#define IMAGE_FILE_MACHINE_M32R 0x9041
+#define IMAGE_FILE_MACHINE_CEE 0xc0ee
+
+#define IMAGE_SIZEOF_FILE_HEADER 20
+#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
+#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
+#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
+#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
+#define IMAGE_SIZEOF_SHORT_NAME 8
+#define IMAGE_SIZEOF_SECTION_HEADER 40
+#define IMAGE_SIZEOF_SYMBOL 18
+#define IMAGE_SIZEOF_AUX_SYMBOL 18
+#define IMAGE_SIZEOF_RELOCATION 10
+#define IMAGE_SIZEOF_BASE_RELOCATION 8
+#define IMAGE_SIZEOF_LINENUMBER 6
+#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
+
+/* Possible Magic values */
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
+
+#ifdef _WIN64
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
+#else
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
+#endif
+
+/* These are indexes into the DataDirectory array */
+#define IMAGE_FILE_EXPORT_DIRECTORY 0
+#define IMAGE_FILE_IMPORT_DIRECTORY 1
+#define IMAGE_FILE_RESOURCE_DIRECTORY 2
+#define IMAGE_FILE_EXCEPTION_DIRECTORY 3
+#define IMAGE_FILE_SECURITY_DIRECTORY 4
+#define IMAGE_FILE_BASE_RELOCATION_TABLE 5
+#define IMAGE_FILE_DEBUG_DIRECTORY 6
+#define IMAGE_FILE_DESCRIPTION_STRING 7
+#define IMAGE_FILE_MACHINE_VALUE 8 /* Mips */
+#define IMAGE_FILE_THREAD_LOCAL_STORAGE 9
+#define IMAGE_FILE_CALLBACK_DIRECTORY 10
+
+/* Directory Entries, indices into the DataDirectory array */
+
+#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
+#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
+#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
+#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
+#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
+#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
+#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
+#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
+#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
+#define IMAGE_DIRECTORY_ENTRY_TLS 9
+#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
+#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
+#define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
+#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
+#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
+
+/* Subsystem Values */
+
+#define IMAGE_SUBSYSTEM_UNKNOWN 0
+#define IMAGE_SUBSYSTEM_NATIVE 1
+#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI subsystem */
+#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows character subsystem */
+#define IMAGE_SUBSYSTEM_OS2_CUI 5
+#define IMAGE_SUBSYSTEM_POSIX_CUI 7
+#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 /* native Win9x driver */
+#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE subsystem */
+#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
+#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
+#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
+#define IMAGE_SUBSYSTEM_EFI_ROM 13
+#define IMAGE_SUBSYSTEM_XBOX 14
+#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
+
+/* DLL Characteristics */
+#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
+#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
+#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
+#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
+#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
+#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
+#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
+#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
+
+typedef struct _IMAGE_FILE_HEADER {
+ WORD Machine;
+ WORD NumberOfSections;
+ DWORD TimeDateStamp;
+ DWORD PointerToSymbolTable;
+ DWORD NumberOfSymbols;
+ WORD SizeOfOptionalHeader;
+ WORD Characteristics;
+} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
+
+typedef struct _IMAGE_DATA_DIRECTORY {
+ DWORD VirtualAddress;
+ DWORD Size;
+} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
+
+#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
+
+typedef struct _IMAGE_OPTIONAL_HEADER64 {
+ WORD Magic; /* 0x20b */
+ BYTE MajorLinkerVersion;
+ BYTE MinorLinkerVersion;
+ DWORD SizeOfCode;
+ DWORD SizeOfInitializedData;
+ DWORD SizeOfUninitializedData;
+ DWORD AddressOfEntryPoint;
+ DWORD BaseOfCode;
+ ULONGLONG ImageBase;
+ DWORD SectionAlignment;
+ DWORD FileAlignment;
+ WORD MajorOperatingSystemVersion;
+ WORD MinorOperatingSystemVersion;
+ WORD MajorImageVersion;
+ WORD MinorImageVersion;
+ WORD MajorSubsystemVersion;
+ WORD MinorSubsystemVersion;
+ DWORD Win32VersionValue;
+ DWORD SizeOfImage;
+ DWORD SizeOfHeaders;
+ DWORD CheckSum;
+ WORD Subsystem;
+ WORD DllCharacteristics;
+ ULONGLONG SizeOfStackReserve;
+ ULONGLONG SizeOfStackCommit;
+ ULONGLONG SizeOfHeapReserve;
+ ULONGLONG SizeOfHeapCommit;
+ DWORD LoaderFlags;
+ DWORD NumberOfRvaAndSizes;
+ IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;
+
+typedef struct _IMAGE_NT_HEADERS64 {
+ DWORD Signature;
+ IMAGE_FILE_HEADER FileHeader;
+ IMAGE_OPTIONAL_HEADER64 OptionalHeader;
+} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;
+
+typedef struct _IMAGE_OPTIONAL_HEADER {
+
+ /* Standard fields */
+
+ WORD Magic; /* 0x10b or 0x107 */ /* 0x00 */
+ BYTE MajorLinkerVersion;
+ BYTE MinorLinkerVersion;
+ DWORD SizeOfCode;
+ DWORD SizeOfInitializedData;
+ DWORD SizeOfUninitializedData;
+ DWORD AddressOfEntryPoint; /* 0x10 */
+ DWORD BaseOfCode;
+ DWORD BaseOfData;
+
+ /* NT additional fields */
+
+ DWORD ImageBase;
+ DWORD SectionAlignment; /* 0x20 */
+ DWORD FileAlignment;
+ WORD MajorOperatingSystemVersion;
+ WORD MinorOperatingSystemVersion;
+ WORD MajorImageVersion;
+ WORD MinorImageVersion;
+ WORD MajorSubsystemVersion; /* 0x30 */
+ WORD MinorSubsystemVersion;
+ DWORD Win32VersionValue;
+ DWORD SizeOfImage;
+ DWORD SizeOfHeaders;
+ DWORD CheckSum; /* 0x40 */
+ WORD Subsystem;
+ WORD DllCharacteristics;
+ DWORD SizeOfStackReserve;
+ DWORD SizeOfStackCommit;
+ DWORD SizeOfHeapReserve; /* 0x50 */
+ DWORD SizeOfHeapCommit;
+ DWORD LoaderFlags;
+ DWORD NumberOfRvaAndSizes;
+ IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; /* 0x60 */
+ /* 0xE0 */
+} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
+
+typedef struct _IMAGE_NT_HEADERS {
+ DWORD Signature; /* "PE"\0\0 */ /* 0x00 */
+ IMAGE_FILE_HEADER FileHeader; /* 0x04 */
+ IMAGE_OPTIONAL_HEADER32 OptionalHeader; /* 0x18 */
+} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
+
+#ifdef _WIN64
+typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
+typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
+#else
+typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
+typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
+#endif
+
+#define IMAGE_SIZEOF_SHORT_NAME 8
+
+typedef struct _IMAGE_SECTION_HEADER {
+ BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
+ union {
+ DWORD PhysicalAddress;
+ DWORD VirtualSize;
+ } Misc;
+ DWORD VirtualAddress;
+ DWORD SizeOfRawData;
+ DWORD PointerToRawData;
+ DWORD PointerToRelocations;
+ DWORD PointerToLinenumbers;
+ WORD NumberOfRelocations;
+ WORD NumberOfLinenumbers;
+ DWORD Characteristics;
+} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
+
+#define IMAGE_SIZEOF_SECTION_HEADER 40
+
+#define IMAGE_FIRST_SECTION(ntheader) \
+ ((PIMAGE_SECTION_HEADER)(ULONG_PTR)((const BYTE *)&((const IMAGE_NT_HEADERS *)(ntheader))->OptionalHeader + \
+ ((const IMAGE_NT_HEADERS *)(ntheader))->FileHeader.SizeOfOptionalHeader))
+
+/* These defines are for the Characteristics bitfield. */
+/* #define IMAGE_SCN_TYPE_REG 0x00000000 - Reserved */
+/* #define IMAGE_SCN_TYPE_DSECT 0x00000001 - Reserved */
+/* #define IMAGE_SCN_TYPE_NOLOAD 0x00000002 - Reserved */
+/* #define IMAGE_SCN_TYPE_GROUP 0x00000004 - Reserved */
+#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved */
+/* #define IMAGE_SCN_TYPE_COPY 0x00000010 - Reserved */
+
+#define IMAGE_SCN_CNT_CODE 0x00000020
+#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
+#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
+
+#define IMAGE_SCN_LNK_OTHER 0x00000100
+#define IMAGE_SCN_LNK_INFO 0x00000200
+/* #define IMAGE_SCN_TYPE_OVER 0x00000400 - Reserved */
+#define IMAGE_SCN_LNK_REMOVE 0x00000800
+#define IMAGE_SCN_LNK_COMDAT 0x00001000
+
+/* 0x00002000 - Reserved */
+/* #define IMAGE_SCN_MEM_PROTECTED 0x00004000 - Obsolete */
+#define IMAGE_SCN_MEM_FARDATA 0x00008000
+
+/* #define IMAGE_SCN_MEM_SYSHEAP 0x00010000 - Obsolete */
+#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
+#define IMAGE_SCN_MEM_16BIT 0x00020000
+#define IMAGE_SCN_MEM_LOCKED 0x00040000
+#define IMAGE_SCN_MEM_PRELOAD 0x00080000
+
+#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
+#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
+#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
+#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
+#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default */
+#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
+#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
+#define IMAGE_SCN_ALIGN_128BYTES 0x00800000
+#define IMAGE_SCN_ALIGN_256BYTES 0x00900000
+#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
+#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
+#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
+#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
+#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
+/* 0x00F00000 - Unused */
+#define IMAGE_SCN_ALIGN_MASK 0x00F00000
+
+#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
+
+
+#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
+#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
+#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
+#define IMAGE_SCN_MEM_SHARED 0x10000000
+#define IMAGE_SCN_MEM_EXECUTE 0x20000000
+#define IMAGE_SCN_MEM_READ 0x40000000
+#define IMAGE_SCN_MEM_WRITE 0x80000000
+
+#include <pshpack2.h>
+
+typedef struct _IMAGE_SYMBOL {
+ union {
+ BYTE ShortName[8];
+ struct {
+ DWORD Short;
+ DWORD Long;
+ } Name;
+ DWORD LongName[2];
+ } N;
+ DWORD Value;
+ SHORT SectionNumber;
+ WORD Type;
+ BYTE StorageClass;
+ BYTE NumberOfAuxSymbols;
+} IMAGE_SYMBOL;
+typedef IMAGE_SYMBOL *PIMAGE_SYMBOL;
+
+#define IMAGE_SIZEOF_SYMBOL 18
+
+typedef struct _IMAGE_LINENUMBER {
+ union {
+ DWORD SymbolTableIndex;
+ DWORD VirtualAddress;
+ } Type;
+ WORD Linenumber;
+} IMAGE_LINENUMBER;
+typedef IMAGE_LINENUMBER *PIMAGE_LINENUMBER;
+
+#define IMAGE_SIZEOF_LINENUMBER 6
+
+typedef union _IMAGE_AUX_SYMBOL {
+ struct {
+ DWORD TagIndex;
+ union {
+ struct {
+ WORD Linenumber;
+ WORD Size;
+ } LnSz;
+ DWORD TotalSize;
+ } Misc;
+ union {
+ struct {
+ DWORD PointerToLinenumber;
+ DWORD PointerToNextFunction;
+ } Function;
+ struct {
+ WORD Dimension[4];
+ } Array;
+ } FcnAry;
+ WORD TvIndex;
+ } Sym;
+ struct {
+ BYTE Name[IMAGE_SIZEOF_SYMBOL];
+ } File;
+ struct {
+ DWORD Length;
+ WORD NumberOfRelocations;
+ WORD NumberOfLinenumbers;
+ DWORD CheckSum;
+ SHORT Number;
+ BYTE Selection;
+ } Section;
+} IMAGE_AUX_SYMBOL;
+typedef IMAGE_AUX_SYMBOL *PIMAGE_AUX_SYMBOL;
+
+#define IMAGE_SIZEOF_AUX_SYMBOL 18
+
+#include <poppack.h>
+
+#define IMAGE_SYM_UNDEFINED (SHORT)0
+#define IMAGE_SYM_ABSOLUTE (SHORT)-1
+#define IMAGE_SYM_DEBUG (SHORT)-2
+
+#define IMAGE_SYM_TYPE_NULL 0x0000
+#define IMAGE_SYM_TYPE_VOID 0x0001
+#define IMAGE_SYM_TYPE_CHAR 0x0002
+#define IMAGE_SYM_TYPE_SHORT 0x0003
+#define IMAGE_SYM_TYPE_INT 0x0004
+#define IMAGE_SYM_TYPE_LONG 0x0005
+#define IMAGE_SYM_TYPE_FLOAT 0x0006
+#define IMAGE_SYM_TYPE_DOUBLE 0x0007
+#define IMAGE_SYM_TYPE_STRUCT 0x0008
+#define IMAGE_SYM_TYPE_UNION 0x0009
+#define IMAGE_SYM_TYPE_ENUM 0x000A
+#define IMAGE_SYM_TYPE_MOE 0x000B
+#define IMAGE_SYM_TYPE_BYTE 0x000C
+#define IMAGE_SYM_TYPE_WORD 0x000D
+#define IMAGE_SYM_TYPE_UINT 0x000E
+#define IMAGE_SYM_TYPE_DWORD 0x000F
+#define IMAGE_SYM_TYPE_PCODE 0x8000
+
+#define IMAGE_SYM_DTYPE_NULL 0
+#define IMAGE_SYM_DTYPE_POINTER 1
+#define IMAGE_SYM_DTYPE_FUNCTION 2
+#define IMAGE_SYM_DTYPE_ARRAY 3
+
+#define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
+#define IMAGE_SYM_CLASS_NULL 0x0000
+#define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
+#define IMAGE_SYM_CLASS_EXTERNAL 0x0002
+#define IMAGE_SYM_CLASS_STATIC 0x0003
+#define IMAGE_SYM_CLASS_REGISTER 0x0004
+#define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
+#define IMAGE_SYM_CLASS_LABEL 0x0006
+#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
+#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
+#define IMAGE_SYM_CLASS_ARGUMENT 0x0009
+#define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
+#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
+#define IMAGE_SYM_CLASS_UNION_TAG 0x000C
+#define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
+#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
+#define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
+#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
+#define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
+#define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
+
+#define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
+#define IMAGE_SYM_CLASS_BLOCK 0x0064
+#define IMAGE_SYM_CLASS_FUNCTION 0x0065
+#define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
+#define IMAGE_SYM_CLASS_FILE 0x0067
+#define IMAGE_SYM_CLASS_SECTION 0x0068
+#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
+
+#define N_BTMASK 0x000F
+#define N_TMASK 0x0030
+#define N_TMASK1 0x00C0
+#define N_TMASK2 0x00F0
+#define N_BTSHFT 4
+#define N_TSHIFT 2
+
+#define BTYPE(x) ((x) & N_BTMASK)
+
+#ifndef ISPTR
+#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
+#endif
+
+#ifndef ISFCN
+#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
+#endif
+
+#ifndef ISARY
+#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
+#endif
+
+#ifndef ISTAG
+#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
+#endif
+
+#ifndef INCREF
+#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
+#endif
+#ifndef DECREF
+#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
+#endif
+
+#define IMAGE_COMDAT_SELECT_NODUPLICATES 1
+#define IMAGE_COMDAT_SELECT_ANY 2
+#define IMAGE_COMDAT_SELECT_SAME_SIZE 3
+#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
+#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
+#define IMAGE_COMDAT_SELECT_LARGEST 6
+#define IMAGE_COMDAT_SELECT_NEWEST 7
+
+#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
+#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
+#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
+
+/* Export module directory */
+
+typedef struct _IMAGE_EXPORT_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD Name;
+ DWORD Base;
+ DWORD NumberOfFunctions;
+ DWORD NumberOfNames;
+ DWORD AddressOfFunctions;
+ DWORD AddressOfNames;
+ DWORD AddressOfNameOrdinals;
+} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
+
+/* Import name entry */
+typedef struct _IMAGE_IMPORT_BY_NAME {
+ WORD Hint;
+ BYTE Name[1];
+} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
+
+#include <pshpack8.h>
+/* Import thunk */
+typedef struct _IMAGE_THUNK_DATA64 {
+ union {
+ ULONGLONG ForwarderString;
+ ULONGLONG Function;
+ ULONGLONG Ordinal;
+ ULONGLONG AddressOfData;
+ } u1;
+} IMAGE_THUNK_DATA64,*PIMAGE_THUNK_DATA64;
+#include <poppack.h>
+
+typedef struct _IMAGE_THUNK_DATA32 {
+ union {
+ DWORD ForwarderString;
+ DWORD Function;
+ DWORD Ordinal;
+ DWORD AddressOfData;
+ } u1;
+} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
+
+/* Import module directory */
+
+typedef struct _IMAGE_IMPORT_DESCRIPTOR {
+ union {
+ DWORD Characteristics; /* 0 for terminating null import descriptor */
+ DWORD OriginalFirstThunk; /* RVA to original unbound IAT */
+ } DUMMYUNIONNAME;
+ DWORD TimeDateStamp; /* 0 if not bound,
+ * -1 if bound, and real date\time stamp
+ * in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
+ * (new BIND)
+ * otherwise date/time stamp of DLL bound to
+ * (Old BIND)
+ */
+ DWORD ForwarderChain; /* -1 if no forwarders */
+ DWORD Name;
+ /* RVA to IAT (if bound this IAT has actual addresses) */
+ DWORD FirstThunk;
+} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
+
+#define IMAGE_ORDINAL_FLAG64 (((ULONGLONG)0x80000000 << 32) | 0x00000000)
+#define IMAGE_ORDINAL_FLAG32 0x80000000
+#define IMAGE_SNAP_BY_ORDINAL64(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG64) != 0)
+#define IMAGE_SNAP_BY_ORDINAL32(ordinal) (((ordinal) & IMAGE_ORDINAL_FLAG32) != 0)
+#define IMAGE_ORDINAL64(ordinal) ((ordinal) & 0xffff)
+#define IMAGE_ORDINAL32(ordinal) ((ordinal) & 0xffff)
+
+#ifdef _WIN64
+#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
+#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
+#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
+typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
+#else
+#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
+#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
+#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
+typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
+#endif
+
+typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
+{
+ DWORD TimeDateStamp;
+ WORD OffsetModuleName;
+ WORD NumberOfModuleForwarderRefs;
+/* Array of zero or more IMAGE_BOUND_FORWARDER_REF follows */
+} IMAGE_BOUND_IMPORT_DESCRIPTOR, *PIMAGE_BOUND_IMPORT_DESCRIPTOR;
+
+typedef struct _IMAGE_BOUND_FORWARDER_REF
+{
+ DWORD TimeDateStamp;
+ WORD OffsetModuleName;
+ WORD Reserved;
+} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
+
+typedef struct _IMAGE_BASE_RELOCATION
+{
+ DWORD VirtualAddress;
+ DWORD SizeOfBlock;
+ /* WORD TypeOffset[1]; */
+} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
+
+#include <pshpack2.h>
+
+typedef struct _IMAGE_RELOCATION
+{
+ union {
+ DWORD VirtualAddress;
+ DWORD RelocCount;
+ } DUMMYUNIONNAME;
+ DWORD SymbolTableIndex;
+ WORD Type;
+} IMAGE_RELOCATION, *PIMAGE_RELOCATION;
+
+#include <poppack.h>
+
+#define IMAGE_SIZEOF_RELOCATION 10
+
+typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
+{
+ union
+ {
+ DWORD AllAttributes;
+ struct
+ {
+ DWORD RvaBased:1;
+ DWORD ReservedAttributes:31;
+ } DUMMYSTRUCTNAME;
+ } Attributes;
+
+ DWORD DllNameRVA;
+ DWORD ModuleHandleRVA;
+ DWORD ImportAddressTableRVA;
+ DWORD ImportNameTableRVA;
+ DWORD BoundImportAddressTableRVA;
+ DWORD UnloadInformationTableRVA;
+ DWORD TimeDateStamp;
+} IMAGE_DELAYLOAD_DESCRIPTOR, *PIMAGE_DELAYLOAD_DESCRIPTOR;
+typedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR;
+
+/* generic relocation types */
+#define IMAGE_REL_BASED_ABSOLUTE 0
+#define IMAGE_REL_BASED_HIGH 1
+#define IMAGE_REL_BASED_LOW 2
+#define IMAGE_REL_BASED_HIGHLOW 3
+#define IMAGE_REL_BASED_HIGHADJ 4
+#define IMAGE_REL_BASED_MIPS_JMPADDR 5
+#define IMAGE_REL_BASED_ARM_MOV32A 5 /* yes, 5 too */
+#define IMAGE_REL_BASED_ARM_MOV32 5 /* yes, 5 too */
+#define IMAGE_REL_BASED_SECTION 6
+#define IMAGE_REL_BASED_REL 7
+#define IMAGE_REL_BASED_ARM_MOV32T 7 /* yes, 7 too */
+#define IMAGE_REL_BASED_THUMB_MOV32 7 /* yes, 7 too */
+#define IMAGE_REL_BASED_MIPS_JMPADDR16 9
+#define IMAGE_REL_BASED_IA64_IMM64 9 /* yes, 9 too */
+#define IMAGE_REL_BASED_DIR64 10
+#define IMAGE_REL_BASED_HIGH3ADJ 11
+
+/* I386 relocation types */
+#define IMAGE_REL_I386_ABSOLUTE 0
+#define IMAGE_REL_I386_DIR16 1
+#define IMAGE_REL_I386_REL16 2
+#define IMAGE_REL_I386_DIR32 6
+#define IMAGE_REL_I386_DIR32NB 7
+#define IMAGE_REL_I386_SEG12 9
+#define IMAGE_REL_I386_SECTION 10
+#define IMAGE_REL_I386_SECREL 11
+#define IMAGE_REL_I386_TOKEN 12
+#define IMAGE_REL_I386_SECREL7 13
+#define IMAGE_REL_I386_REL32 20
+
+/* MIPS relocation types */
+#define IMAGE_REL_MIPS_ABSOLUTE 0x0000
+#define IMAGE_REL_MIPS_REFHALF 0x0001
+#define IMAGE_REL_MIPS_REFWORD 0x0002
+#define IMAGE_REL_MIPS_JMPADDR 0x0003
+#define IMAGE_REL_MIPS_REFHI 0x0004
+#define IMAGE_REL_MIPS_REFLO 0x0005
+#define IMAGE_REL_MIPS_GPREL 0x0006
+#define IMAGE_REL_MIPS_LITERAL 0x0007
+#define IMAGE_REL_MIPS_SECTION 0x000A
+#define IMAGE_REL_MIPS_SECREL 0x000B
+#define IMAGE_REL_MIPS_SECRELLO 0x000C
+#define IMAGE_REL_MIPS_SECRELHI 0x000D
+#define IMAGE_REL_MIPS_TOKEN 0x000E
+#define IMAGE_REL_MIPS_JMPADDR16 0x0010
+#define IMAGE_REL_MIPS_REFWORDNB 0x0022
+#define IMAGE_REL_MIPS_PAIR 0x0025
+
+/* ALPHA relocation types */
+#define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
+#define IMAGE_REL_ALPHA_REFLONG 0x0001
+#define IMAGE_REL_ALPHA_REFQUAD 0x0002
+#define IMAGE_REL_ALPHA_GPREL 0x0003
+#define IMAGE_REL_ALPHA_LITERAL 0x0004
+#define IMAGE_REL_ALPHA_LITUSE 0x0005
+#define IMAGE_REL_ALPHA_GPDISP 0x0006
+#define IMAGE_REL_ALPHA_BRADDR 0x0007
+#define IMAGE_REL_ALPHA_HINT 0x0008
+#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
+#define IMAGE_REL_ALPHA_REFHI 0x000A
+#define IMAGE_REL_ALPHA_REFLO 0x000B
+#define IMAGE_REL_ALPHA_PAIR 0x000C
+#define IMAGE_REL_ALPHA_MATCH 0x000D
+#define IMAGE_REL_ALPHA_SECTION 0x000E
+#define IMAGE_REL_ALPHA_SECREL 0x000F
+#define IMAGE_REL_ALPHA_REFLONGNB 0x0010
+#define IMAGE_REL_ALPHA_SECRELLO 0x0011
+#define IMAGE_REL_ALPHA_SECRELHI 0x0012
+#define IMAGE_REL_ALPHA_REFQ3 0x0013
+#define IMAGE_REL_ALPHA_REFQ2 0x0014
+#define IMAGE_REL_ALPHA_REFQ1 0x0015
+#define IMAGE_REL_ALPHA_GPRELLO 0x0016
+#define IMAGE_REL_ALPHA_GPRELHI 0x0017
+
+/* PowerPC relocation types */
+#define IMAGE_REL_PPC_ABSOLUTE 0x0000
+#define IMAGE_REL_PPC_ADDR64 0x0001
+#define IMAGE_REL_PPC_ADDR 0x0002
+#define IMAGE_REL_PPC_ADDR24 0x0003
+#define IMAGE_REL_PPC_ADDR16 0x0004
+#define IMAGE_REL_PPC_ADDR14 0x0005
+#define IMAGE_REL_PPC_REL24 0x0006
+#define IMAGE_REL_PPC_REL14 0x0007
+#define IMAGE_REL_PPC_TOCREL16 0x0008
+#define IMAGE_REL_PPC_TOCREL14 0x0009
+#define IMAGE_REL_PPC_ADDR32NB 0x000A
+#define IMAGE_REL_PPC_SECREL 0x000B
+#define IMAGE_REL_PPC_SECTION 0x000C
+#define IMAGE_REL_PPC_IFGLUE 0x000D
+#define IMAGE_REL_PPC_IMGLUE 0x000E
+#define IMAGE_REL_PPC_SECREL16 0x000F
+#define IMAGE_REL_PPC_REFHI 0x0010
+#define IMAGE_REL_PPC_REFLO 0x0011
+#define IMAGE_REL_PPC_PAIR 0x0012
+#define IMAGE_REL_PPC_SECRELLO 0x0013
+#define IMAGE_REL_PPC_SECRELHI 0x0014
+#define IMAGE_REL_PPC_GPREL 0x0015
+#define IMAGE_REL_PPC_TOKEN 0x0016
+#define IMAGE_REL_PPC_TYPEMASK 0x00FF
+/* modifier bits */
+#define IMAGE_REL_PPC_NEG 0x0100
+#define IMAGE_REL_PPC_BRTAKEN 0x0200
+#define IMAGE_REL_PPC_BRNTAKEN 0x0400
+#define IMAGE_REL_PPC_TOCDEFN 0x0800
+
+/* SH3 relocation types */
+#define IMAGE_REL_SH3_ABSOLUTE 0x0000
+#define IMAGE_REL_SH3_DIRECT16 0x0001
+#define IMAGE_REL_SH3_DIRECT 0x0002
+#define IMAGE_REL_SH3_DIRECT8 0x0003
+#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
+#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
+#define IMAGE_REL_SH3_DIRECT4 0x0006
+#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
+#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
+#define IMAGE_REL_SH3_PCREL8_WORD 0x0009
+#define IMAGE_REL_SH3_PCREL8_LONG 0x000A
+#define IMAGE_REL_SH3_PCREL12_WORD 0x000B
+#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
+#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
+#define IMAGE_REL_SH3_SECTION 0x000E
+#define IMAGE_REL_SH3_SECREL 0x000F
+#define IMAGE_REL_SH3_DIRECT32_NB 0x0010
+#define IMAGE_REL_SH3_GPREL4_LONG 0x0011
+#define IMAGE_REL_SH3_TOKEN 0x0012
+
+/* ARM relocation types */
+#define IMAGE_REL_ARM_ABSOLUTE 0x0000
+#define IMAGE_REL_ARM_ADDR 0x0001
+#define IMAGE_REL_ARM_ADDR32NB 0x0002
+#define IMAGE_REL_ARM_BRANCH24 0x0003
+#define IMAGE_REL_ARM_BRANCH11 0x0004
+#define IMAGE_REL_ARM_TOKEN 0x0005
+#define IMAGE_REL_ARM_GPREL12 0x0006
+#define IMAGE_REL_ARM_GPREL7 0x0007
+#define IMAGE_REL_ARM_BLX24 0x0008
+#define IMAGE_REL_ARM_BLX11 0x0009
+#define IMAGE_REL_ARM_SECTION 0x000E
+#define IMAGE_REL_ARM_SECREL 0x000F
+#define IMAGE_REL_ARM_MOV32A 0x0010
+#define IMAGE_REL_ARM_MOV32T 0x0011
+#define IMAGE_REL_ARM_BRANCH20T 0x0012
+#define IMAGE_REL_ARM_BRANCH24T 0x0014
+#define IMAGE_REL_ARM_BLX23T 0x0015
+
+/* IA64 relocation types */
+#define IMAGE_REL_IA64_ABSOLUTE 0x0000
+#define IMAGE_REL_IA64_IMM14 0x0001
+#define IMAGE_REL_IA64_IMM22 0x0002
+#define IMAGE_REL_IA64_IMM64 0x0003
+#define IMAGE_REL_IA64_DIR 0x0004
+#define IMAGE_REL_IA64_DIR64 0x0005
+#define IMAGE_REL_IA64_PCREL21B 0x0006
+#define IMAGE_REL_IA64_PCREL21M 0x0007
+#define IMAGE_REL_IA64_PCREL21F 0x0008
+#define IMAGE_REL_IA64_GPREL22 0x0009
+#define IMAGE_REL_IA64_LTOFF22 0x000A
+#define IMAGE_REL_IA64_SECTION 0x000B
+#define IMAGE_REL_IA64_SECREL22 0x000C
+#define IMAGE_REL_IA64_SECREL64I 0x000D
+#define IMAGE_REL_IA64_SECREL 0x000E
+#define IMAGE_REL_IA64_LTOFF64 0x000F
+#define IMAGE_REL_IA64_DIR32NB 0x0010
+#define IMAGE_REL_IA64_SREL14 0x0011
+#define IMAGE_REL_IA64_SREL22 0x0012
+#define IMAGE_REL_IA64_SREL32 0x0013
+#define IMAGE_REL_IA64_UREL32 0x0014
+#define IMAGE_REL_IA64_PCREL60X 0x0015
+#define IMAGE_REL_IA64_PCREL60B 0x0016
+#define IMAGE_REL_IA64_PCREL60F 0x0017
+#define IMAGE_REL_IA64_PCREL60I 0x0018
+#define IMAGE_REL_IA64_PCREL60M 0x0019
+#define IMAGE_REL_IA64_IMMGPREL64 0x001A
+#define IMAGE_REL_IA64_TOKEN 0x001B
+#define IMAGE_REL_IA64_GPREL32 0x001C
+#define IMAGE_REL_IA64_ADDEND 0x001F
+
+/* AMD64 relocation types */
+#define IMAGE_REL_AMD64_ABSOLUTE 0x0000
+#define IMAGE_REL_AMD64_ADDR64 0x0001
+#define IMAGE_REL_AMD64_ADDR32 0x0002
+#define IMAGE_REL_AMD64_ADDR32NB 0x0003
+#define IMAGE_REL_AMD64_REL32 0x0004
+#define IMAGE_REL_AMD64_REL32_1 0x0005
+#define IMAGE_REL_AMD64_REL32_2 0x0006
+#define IMAGE_REL_AMD64_REL32_3 0x0007
+#define IMAGE_REL_AMD64_REL32_4 0x0008
+#define IMAGE_REL_AMD64_REL32_5 0x0009
+#define IMAGE_REL_AMD64_SECTION 0x000A
+#define IMAGE_REL_AMD64_SECREL 0x000B
+#define IMAGE_REL_AMD64_SECREL7 0x000C
+#define IMAGE_REL_AMD64_TOKEN 0x000D
+#define IMAGE_REL_AMD64_SREL32 0x000E
+#define IMAGE_REL_AMD64_PAIR 0x000F
+#define IMAGE_REL_AMD64_SSPAN32 0x0010
+
+/* archive format */
+
+#define IMAGE_ARCHIVE_START_SIZE 8
+#define IMAGE_ARCHIVE_START "!<arch>\n"
+#define IMAGE_ARCHIVE_END "`\n"
+#define IMAGE_ARCHIVE_PAD "\n"
+#define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
+#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
+
+typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
+{
+ BYTE Name[16];
+ BYTE Date[12];
+ BYTE UserID[6];
+ BYTE GroupID[6];
+ BYTE Mode[8];
+ BYTE Size[10];
+ BYTE EndHeader[2];
+} IMAGE_ARCHIVE_MEMBER_HEADER, *PIMAGE_ARCHIVE_MEMBER_HEADER;
+
+#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
+
+typedef struct _IMPORT_OBJECT_HEADER
+{
+ WORD Sig1;
+ WORD Sig2;
+ WORD Version;
+ WORD Machine;
+ DWORD TimeDateStamp;
+ DWORD SizeOfData;
+ union
+ {
+ WORD Ordinal;
+ WORD Hint;
+ } DUMMYUNIONNAME;
+ WORD Type : 2;
+ WORD NameType : 3;
+ WORD Reserved : 11;
+} IMPORT_OBJECT_HEADER;
+
+#define IMPORT_OBJECT_HDR_SIG2 0xffff
+
+typedef enum IMPORT_OBJECT_TYPE
+{
+ IMPORT_OBJECT_CODE = 0,
+ IMPORT_OBJECT_DATA = 1,
+ IMPORT_OBJECT_CONST = 2
+} IMPORT_OBJECT_TYPE;
+
+typedef enum IMPORT_OBJECT_NAME_TYPE
+{
+ IMPORT_OBJECT_ORDINAL = 0,
+ IMPORT_OBJECT_NAME = 1,
+ IMPORT_OBJECT_NAME_NO_PREFIX = 2,
+ IMPORT_OBJECT_NAME_UNDECORATE = 3
+} IMPORT_OBJECT_NAME_TYPE;
+
+typedef struct _ANON_OBJECT_HEADER
+{
+ WORD Sig1;
+ WORD Sig2;
+ WORD Version;
+ WORD Machine;
+ DWORD TimeDateStamp;
+ CLSID ClassID;
+ DWORD SizeOfData;
+} ANON_OBJECT_HEADER;
+
+/*
+ * Resource directory stuff
+ */
+typedef struct _IMAGE_RESOURCE_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ WORD NumberOfNamedEntries;
+ WORD NumberOfIdEntries;
+ /* IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[]; */
+} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
+
+#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
+#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
+
+typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
+ union {
+ struct {
+#ifdef BITFIELDS_BIGENDIAN
+ unsigned NameIsString:1;
+ unsigned NameOffset:31;
+#else
+ unsigned NameOffset:31;
+ unsigned NameIsString:1;
+#endif
+ } DUMMYSTRUCTNAME;
+ DWORD Name;
+#ifdef WORDS_BIGENDIAN
+ WORD __pad;
+ WORD Id;
+#else
+ WORD Id;
+ WORD __pad;
+#endif
+ } DUMMYUNIONNAME;
+ union {
+ DWORD OffsetToData;
+ struct {
+#ifdef BITFIELDS_BIGENDIAN
+ unsigned DataIsDirectory:1;
+ unsigned OffsetToDirectory:31;
+#else
+ unsigned OffsetToDirectory:31;
+ unsigned DataIsDirectory:1;
+#endif
+ } DUMMYSTRUCTNAME2;
+ } DUMMYUNIONNAME2;
+} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
+
+
+typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
+ WORD Length;
+ CHAR NameString[ 1 ];
+} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
+
+typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
+ WORD Length;
+ WCHAR NameString[ 1 ];
+} IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
+
+typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
+ DWORD OffsetToData;
+ DWORD Size;
+ DWORD CodePage;
+ DWORD Reserved;
+} IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
+
+
+typedef VOID (CALLBACK *PIMAGE_TLS_CALLBACK)(
+ LPVOID DllHandle,DWORD Reason,LPVOID Reserved
+);
+
+typedef struct _IMAGE_TLS_DIRECTORY64 {
+ ULONGLONG StartAddressOfRawData;
+ ULONGLONG EndAddressOfRawData;
+ ULONGLONG AddressOfIndex;
+ ULONGLONG AddressOfCallBacks;
+ DWORD SizeOfZeroFill;
+ DWORD Characteristics;
+} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
+
+typedef struct _IMAGE_TLS_DIRECTORY32 {
+ DWORD StartAddressOfRawData;
+ DWORD EndAddressOfRawData;
+ DWORD AddressOfIndex;
+ DWORD AddressOfCallBacks;
+ DWORD SizeOfZeroFill;
+ DWORD Characteristics;
+} IMAGE_TLS_DIRECTORY32, *PIMAGE_TLS_DIRECTORY32;
+
+#ifdef _WIN64
+typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
+#else
+typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
+#endif
+
+typedef struct _IMAGE_DEBUG_DIRECTORY {
+ DWORD Characteristics;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD Type;
+ DWORD SizeOfData;
+ DWORD AddressOfRawData;
+ DWORD PointerToRawData;
+} IMAGE_DEBUG_DIRECTORY, *PIMAGE_DEBUG_DIRECTORY;
+
+#define IMAGE_DEBUG_TYPE_UNKNOWN 0
+#define IMAGE_DEBUG_TYPE_COFF 1
+#define IMAGE_DEBUG_TYPE_CODEVIEW 2
+#define IMAGE_DEBUG_TYPE_FPO 3
+#define IMAGE_DEBUG_TYPE_MISC 4
+#define IMAGE_DEBUG_TYPE_EXCEPTION 5
+#define IMAGE_DEBUG_TYPE_FIXUP 6
+#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
+#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
+#define IMAGE_DEBUG_TYPE_BORLAND 9
+#define IMAGE_DEBUG_TYPE_RESERVED10 10
+#define IMAGE_DEBUG_TYPE_CLSID 11
+
+typedef enum ReplacesCorHdrNumericDefines
+{
+ COMIMAGE_FLAGS_ILONLY = 0x00000001,
+ COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,
+ COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
+ COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
+ COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,
+
+ COR_VERSION_MAJOR_V2 = 2,
+ COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,
+ COR_VERSION_MINOR = 0,
+ COR_DELETED_NAME_LENGTH = 8,
+ COR_VTABLEGAP_NAME_LENGTH = 8,
+
+ NATIVE_TYPE_MAX_CB = 1,
+ COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xff,
+
+ IMAGE_COR_MIH_METHODRVA = 0x01,
+ IMAGE_COR_MIH_EHRVA = 0x02,
+ IMAGE_COR_MIH_BASICBLOCK = 0x08,
+
+ COR_VTABLE_32BIT = 0x01,
+ COR_VTABLE_64BIT = 0x02,
+ COR_VTABLE_FROM_UNMANAGED = 0x04,
+ COR_VTABLE_CALL_MOST_DERIVED = 0x10,
+
+ IMAGE_COR_EATJ_THUNK_SIZE = 32,
+
+ MAX_CLASS_NAME = 1024,
+ MAX_PACKAGE_NAME = 1024,
+} ReplacesCorHdrNumericDefines;
+
+typedef struct IMAGE_COR20_HEADER
+{
+ DWORD cb;
+ WORD MajorRuntimeVersion;
+ WORD MinorRuntimeVersion;
+
+ IMAGE_DATA_DIRECTORY MetaData;
+ DWORD Flags;
+ union {
+ DWORD EntryPointToken;
+ DWORD EntryPointRVA;
+ } DUMMYUNIONNAME;
+
+ IMAGE_DATA_DIRECTORY Resources;
+ IMAGE_DATA_DIRECTORY StrongNameSignature;
+ IMAGE_DATA_DIRECTORY CodeManagerTable;
+ IMAGE_DATA_DIRECTORY VTableFixups;
+ IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
+ IMAGE_DATA_DIRECTORY ManagedNativeHeader;
+
+} IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
+
+typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
+ DWORD NumberOfSymbols;
+ DWORD LvaToFirstSymbol;
+ DWORD NumberOfLinenumbers;
+ DWORD LvaToFirstLinenumber;
+ DWORD RvaToFirstByteOfCode;
+ DWORD RvaToLastByteOfCode;
+ DWORD RvaToFirstByteOfData;
+ DWORD RvaToLastByteOfData;
+} IMAGE_COFF_SYMBOLS_HEADER, *PIMAGE_COFF_SYMBOLS_HEADER;
+
+#define FRAME_FPO 0
+#define FRAME_TRAP 1
+#define FRAME_TSS 2
+#define FRAME_NONFPO 3
+
+typedef struct _FPO_DATA {
+ DWORD ulOffStart;
+ DWORD cbProcSize;
+ DWORD cdwLocals;
+ WORD cdwParams;
+ WORD cbProlog : 8;
+ WORD cbRegs : 3;
+ WORD fHasSEH : 1;
+ WORD fUseBP : 1;
+ WORD reserved : 1;
+ WORD cbFrame : 2;
+} FPO_DATA, *PFPO_DATA;
+
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
+ DWORD Size;
+ DWORD TimeDateStamp;
+ WORD MajorVersion;
+ WORD MinorVersion;
+ DWORD GlobalFlagsClear;
+ DWORD GlobalFlagsSet;
+ DWORD CriticalSectionDefaultTimeout;
+ DWORD DeCommitFreeBlockThreshold;
+ DWORD DeCommitTotalFreeThreshold;
+ PVOID LockPrefixTable;
+ DWORD MaximumAllocationSize;
+ DWORD VirtualMemoryThreshold;
+ DWORD ProcessHeapFlags;
+ DWORD ProcessAffinityMask;
+ WORD CSDVersion;
+ WORD Reserved1;
+ PVOID EditList;
+ DWORD SecurityCookie;
+ DWORD SEHandlerTable;
+ DWORD SEHandlerCount;
+} IMAGE_LOAD_CONFIG_DIRECTORY, *PIMAGE_LOAD_CONFIG_DIRECTORY;
+
+typedef struct _IMAGE_FUNCTION_ENTRY {
+ DWORD StartingAddress;
+ DWORD EndingAddress;
+ DWORD EndOfPrologue;
+} IMAGE_FUNCTION_ENTRY, *PIMAGE_FUNCTION_ENTRY;
+
+#define IMAGE_DEBUG_MISC_EXENAME 1
+
+typedef struct _IMAGE_DEBUG_MISC {
+ DWORD DataType;
+ DWORD Length;
+ BYTE Unicode;
+ BYTE Reserved[ 3 ];
+ BYTE Data[ 1 ];
+} IMAGE_DEBUG_MISC, *PIMAGE_DEBUG_MISC;
+
+/* This is the structure that appears at the very start of a .DBG file. */
+
+typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
+ WORD Signature;
+ WORD Flags;
+ WORD Machine;
+ WORD Characteristics;
+ DWORD TimeDateStamp;
+ DWORD CheckSum;
+ DWORD ImageBase;
+ DWORD SizeOfImage;
+ DWORD NumberOfSections;
+ DWORD ExportedNamesSize;
+ DWORD DebugDirectorySize;
+ DWORD SectionAlignment;
+ DWORD Reserved[ 2 ];
+} IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
+
+#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
+
+
+typedef struct tagMESSAGE_RESOURCE_ENTRY {
+ WORD Length;
+ WORD Flags;
+ BYTE Text[1];
+} MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
+#define MESSAGE_RESOURCE_UNICODE 0x0001
+
+typedef struct tagMESSAGE_RESOURCE_BLOCK {
+ DWORD LowId;
+ DWORD HighId;
+ DWORD OffsetToEntries;
+} MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
+
+typedef struct tagMESSAGE_RESOURCE_DATA {
+ DWORD NumberOfBlocks;
+ MESSAGE_RESOURCE_BLOCK Blocks[ 1 ];
+} MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
+
+/*
+ * Here follows typedefs for security and tokens.
+ */
+
+/*
+ * First a constant for the following typedefs.
+ */
+
+#define ANYSIZE_ARRAY 1
+
+/* FIXME: Orphan. What does it point to? */
+typedef PVOID PACCESS_TOKEN;
+typedef PVOID PSECURITY_DESCRIPTOR;
+typedef PVOID PSID;
+
+typedef enum _TOKEN_ELEVATION_TYPE {
+ TokenElevationTypeDefault = 1,
+ TokenElevationTypeFull,
+ TokenElevationTypeLimited
+} TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
+
+/*
+ * TOKEN_INFORMATION_CLASS
+ */
+
+typedef enum _TOKEN_INFORMATION_CLASS {
+ TokenUser = 1,
+ TokenGroups,
+ TokenPrivileges,
+ TokenOwner,
+ TokenPrimaryGroup,
+ TokenDefaultDacl,
+ TokenSource,
+ TokenType,
+ TokenImpersonationLevel,
+ TokenStatistics,
+ TokenRestrictedSids,
+ TokenSessionId,
+ TokenGroupsAndPrivileges,
+ TokenSessionReference,
+ TokenSandBoxInert,
+ TokenAuditPolicy,
+ TokenOrigin,
+ TokenElevationType,
+ TokenLinkedToken,
+ TokenElevation,
+ TokenHasRestrictions,
+ TokenAccessInformation,
+ TokenVirtualizationAllowed,
+ TokenVirtualizationEnabled,
+ TokenIntegrityLevel,
+ TokenUIAccess,
+ TokenMandatoryPolicy,
+ TokenLogonSid,
+ MaxTokenInfoClass
+} TOKEN_INFORMATION_CLASS;
+
+#define TOKEN_TOKEN_ADJUST_DEFAULT 0x0080
+#define TOKEN_ADJUST_GROUPS 0x0040
+#define TOKEN_ADJUST_PRIVILEGES 0x0020
+#define TOKEN_ADJUST_SESSIONID 0x0100
+#define TOKEN_ASSIGN_PRIMARY 0x0001
+#define TOKEN_DUPLICATE 0x0002
+#define TOKEN_EXECUTE STANDARD_RIGHTS_EXECUTE
+#define TOKEN_IMPERSONATE 0x0004
+#define TOKEN_QUERY 0x0008
+#define TOKEN_QUERY_SOURCE 0x0010
+#define TOKEN_ADJUST_DEFAULT 0x0080
+#define TOKEN_READ (STANDARD_RIGHTS_READ|TOKEN_QUERY)
+#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | \
+ TOKEN_ADJUST_PRIVILEGES | \
+ TOKEN_ADJUST_GROUPS | \
+ TOKEN_ADJUST_DEFAULT )
+#define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ TOKEN_ASSIGN_PRIMARY | \
+ TOKEN_DUPLICATE | \
+ TOKEN_IMPERSONATE | \
+ TOKEN_QUERY | \
+ TOKEN_QUERY_SOURCE | \
+ TOKEN_ADJUST_PRIVILEGES | \
+ TOKEN_ADJUST_GROUPS | \
+ TOKEN_ADJUST_SESSIONID | \
+ TOKEN_ADJUST_DEFAULT )
+
+#ifndef _SECURITY_DEFINED
+#define _SECURITY_DEFINED
+
+
+typedef DWORD ACCESS_MASK, *PACCESS_MASK;
+
+typedef struct _GENERIC_MAPPING {
+ ACCESS_MASK GenericRead;
+ ACCESS_MASK GenericWrite;
+ ACCESS_MASK GenericExecute;
+ ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+
+#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
+#define SID_IDENTIFIER_AUTHORITY_DEFINED
+typedef struct {
+ BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
+#endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
+
+#ifndef SID_DEFINED
+#define SID_DEFINED
+typedef struct _SID {
+ BYTE Revision;
+ BYTE SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ DWORD SubAuthority[1];
+} SID,*PISID;
+#endif /* !defined(SID_DEFINED) */
+
+#define SID_REVISION (1) /* Current revision */
+#define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
+#define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
+
+#define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
+
+/*
+ * ACL
+ */
+
+#define ACL_REVISION1 1
+#define ACL_REVISION2 2
+#define ACL_REVISION3 3
+#define ACL_REVISION4 4
+
+#define MIN_ACL_REVISION ACL_REVISION2
+#define MAX_ACL_REVISION ACL_REVISION4
+
+#define ACL_REVISION 2
+
+typedef struct _ACL {
+ BYTE AclRevision;
+ BYTE Sbz1;
+ WORD AclSize;
+ WORD AceCount;
+ WORD Sbz2;
+} ACL, *PACL;
+
+typedef enum _ACL_INFORMATION_CLASS
+{
+ AclRevisionInformation = 1,
+ AclSizeInformation
+} ACL_INFORMATION_CLASS;
+
+typedef struct _ACL_REVISION_INFORMATION
+{
+ DWORD AclRevision;
+} ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
+
+typedef struct _ACL_SIZE_INFORMATION
+{
+ DWORD AceCount;
+ DWORD AclBytesInUse;
+ DWORD AclBytesFree;
+} ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
+
+/* SECURITY_DESCRIPTOR */
+#define SECURITY_DESCRIPTOR_REVISION 1
+#define SECURITY_DESCRIPTOR_REVISION1 1
+
+
+/*
+ * Privilege Names
+ */
+#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
+#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
+#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
+#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
+#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
+#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
+#define SE_TCB_NAME TEXT("SeTcbPrivilege")
+#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
+#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
+#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
+#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
+#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
+#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
+#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
+#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
+#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
+#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
+#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
+#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
+#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
+#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
+#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
+#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
+#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
+#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
+#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
+#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
+#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
+#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
+
+#define SE_GROUP_MANDATORY 0x00000001
+#define SE_GROUP_ENABLED_BY_DEFAULT 0x00000002
+#define SE_GROUP_ENABLED 0x00000004
+#define SE_GROUP_OWNER 0x00000008
+#define SE_GROUP_USE_FOR_DENY_ONLY 0x00000010
+#define SE_GROUP_INTEGRITY 0x00000020
+#define SE_GROUP_INTEGRITY_ENABLED 0x00000040
+#define SE_GROUP_LOGON_ID 0xC0000000
+#define SE_GROUP_RESOURCE 0x20000000
+#define SE_GROUP_VALID_ATTRIBUTES 0xE000007F
+
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001
+#define SE_PRIVILEGE_ENABLED 0x00000002
+#define SE_PRIVILEGE_REMOVED 0x00000004
+#define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
+
+#define PRIVILEGE_SET_ALL_NECESSARY 1
+
+#define SE_OWNER_DEFAULTED 0x00000001
+#define SE_GROUP_DEFAULTED 0x00000002
+#define SE_DACL_PRESENT 0x00000004
+#define SE_DACL_DEFAULTED 0x00000008
+#define SE_SACL_PRESENT 0x00000010
+#define SE_SACL_DEFAULTED 0x00000020
+#define SE_DACL_AUTO_INHERIT_REQ 0x00000100
+#define SE_SACL_AUTO_INHERIT_REQ 0x00000200
+#define SE_DACL_AUTO_INHERITED 0x00000400
+#define SE_SACL_AUTO_INHERITED 0x00000800
+#define SE_DACL_PROTECTED 0x00001000
+#define SE_SACL_PROTECTED 0x00002000
+#define SE_RM_CONTROL_VALID 0x00004000
+#define SE_SELF_RELATIVE 0x00008000
+
+typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+
+/* The security descriptor structure */
+typedef struct {
+ BYTE Revision;
+ BYTE Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ DWORD Owner;
+ DWORD Group;
+ DWORD Sacl;
+ DWORD Dacl;
+} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
+
+typedef struct {
+ BYTE Revision;
+ BYTE Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ PSID Owner;
+ PSID Group;
+ PACL Sacl;
+ PACL Dacl;
+} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+
+#define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
+
+#endif /* _SECURITY_DEFINED */
+
+/*
+ * SID_AND_ATTRIBUTES
+ */
+
+typedef struct _SID_AND_ATTRIBUTES {
+ PSID Sid;
+ DWORD Attributes;
+} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
+
+/* security entities */
+#define SECURITY_NULL_RID __MSABI_LONG(0x00000000)
+#define SECURITY_WORLD_RID __MSABI_LONG(0x00000000)
+#define SECURITY_LOCAL_RID __MSABI_LONG(0X00000000)
+
+#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
+
+/* S-1-1 */
+#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
+
+/* S-1-2 */
+#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
+
+/* S-1-3 */
+#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
+#define SECURITY_CREATOR_OWNER_RID __MSABI_LONG(0x00000000)
+#define SECURITY_CREATOR_GROUP_RID __MSABI_LONG(0x00000001)
+#define SECURITY_CREATOR_OWNER_SERVER_RID __MSABI_LONG(0x00000002)
+#define SECURITY_CREATOR_GROUP_SERVER_RID __MSABI_LONG(0x00000003)
+
+/* S-1-4 */
+#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
+
+/* S-1-5 */
+#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
+#define SECURITY_DIALUP_RID __MSABI_LONG(0x00000001)
+#define SECURITY_NETWORK_RID __MSABI_LONG(0x00000002)
+#define SECURITY_BATCH_RID __MSABI_LONG(0x00000003)
+#define SECURITY_INTERACTIVE_RID __MSABI_LONG(0x00000004)
+#define SECURITY_LOGON_IDS_RID __MSABI_LONG(0x00000005)
+#define SECURITY_SERVICE_RID __MSABI_LONG(0x00000006)
+#define SECURITY_ANONYMOUS_LOGON_RID __MSABI_LONG(0x00000007)
+#define SECURITY_PROXY_RID __MSABI_LONG(0x00000008)
+#define SECURITY_ENTERPRISE_CONTROLLERS_RID __MSABI_LONG(0x00000009)
+#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
+#define SECURITY_PRINCIPAL_SELF_RID __MSABI_LONG(0x0000000A)
+#define SECURITY_AUTHENTICATED_USER_RID __MSABI_LONG(0x0000000B)
+#define SECURITY_RESTRICTED_CODE_RID __MSABI_LONG(0x0000000C)
+#define SECURITY_TERMINAL_SERVER_RID __MSABI_LONG(0x0000000D)
+#define SECURITY_REMOTE_LOGON_RID __MSABI_LONG(0x0000000E)
+#define SECURITY_THIS_ORGANIZATION_RID __MSABI_LONG(0x0000000F)
+#define SECURITY_LOCAL_SYSTEM_RID __MSABI_LONG(0x00000012)
+#define SECURITY_LOCAL_SERVICE_RID __MSABI_LONG(0x00000013)
+#define SECURITY_NETWORK_SERVICE_RID __MSABI_LONG(0x00000014)
+#define SECURITY_NT_NON_UNIQUE __MSABI_LONG(0x00000015)
+#define SECURITY_BUILTIN_DOMAIN_RID __MSABI_LONG(0x00000020)
+
+#define SECURITY_PACKAGE_BASE_RID __MSABI_LONG(0x00000040)
+#define SECURITY_PACKAGE_NTLM_RID __MSABI_LONG(0x0000000A)
+#define SECURITY_PACKAGE_SCHANNEL_RID __MSABI_LONG(0x0000000E)
+#define SECURITY_PACKAGE_DIGEST_RID __MSABI_LONG(0x00000015)
+#define SECURITY_MAX_ALWAYS_FILTERED __MSABI_LONG(0x000003E7)
+#define SECURITY_MIN_NEVER_FILTERED __MSABI_LONG(0x000003E8)
+#define SECURITY_OTHER_ORGANIZATION_RID __MSABI_LONG(0x000003E8)
+
+#define FOREST_USER_RID_MAX __MSABI_LONG(0x000001F3)
+#define DOMAIN_USER_RID_ADMIN __MSABI_LONG(0x000001F4)
+#define DOMAIN_USER_RID_GUEST __MSABI_LONG(0x000001F5)
+#define DOMAIN_USER_RID_KRBTGT __MSABI_LONG(0x000001F6)
+#define DOMAIN_USER_RID_MAX __MSABI_LONG(0x000003E7)
+
+#define DOMAIN_GROUP_RID_ADMINS __MSABI_LONG(0x00000200)
+#define DOMAIN_GROUP_RID_USERS __MSABI_LONG(0x00000201)
+#define DOMAIN_GROUP_RID_GUESTS __MSABI_LONG(0x00000202)
+#define DOMAIN_GROUP_RID_COMPUTERS __MSABI_LONG(0x00000203)
+#define DOMAIN_GROUP_RID_CONTROLLERS __MSABI_LONG(0x00000204)
+#define DOMAIN_GROUP_RID_CERT_ADMINS __MSABI_LONG(0x00000205)
+#define DOMAIN_GROUP_RID_SCHEMA_ADMINS __MSABI_LONG(0x00000206)
+#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS __MSABI_LONG(0x00000207)
+#define DOMAIN_GROUP_RID_POLICY_ADMINS __MSABI_LONG(0x00000208)
+
+#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
+#define SECURITY_MANDATORY_UNTRUSTED_RID __MSABI_LONG(0x00000000)
+#define SECURITY_MANDATORY_LOW_RID __MSABI_LONG(0x00001000)
+#define SECURITY_MANDATORY_MEDIUM_RID __MSABI_LONG(0x00002000)
+#define SECURITY_MANDATORY_HIGH_RID __MSABI_LONG(0x00003000)
+#define SECURITY_MANDATORY_SYSTEM_RID __MSABI_LONG(0x00004000)
+#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID __MSABI_LONG(0x00005000)
+
+#define DOMAIN_ALIAS_RID_ADMINS __MSABI_LONG(0x00000220)
+#define DOMAIN_ALIAS_RID_USERS __MSABI_LONG(0x00000221)
+#define DOMAIN_ALIAS_RID_GUESTS __MSABI_LONG(0x00000222)
+#define DOMAIN_ALIAS_RID_POWER_USERS __MSABI_LONG(0x00000223)
+
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS __MSABI_LONG(0x00000224)
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS __MSABI_LONG(0x00000225)
+#define DOMAIN_ALIAS_RID_PRINT_OPS __MSABI_LONG(0x00000226)
+#define DOMAIN_ALIAS_RID_BACKUP_OPS __MSABI_LONG(0x00000227)
+
+#define DOMAIN_ALIAS_RID_REPLICATOR __MSABI_LONG(0x00000228)
+#define DOMAIN_ALIAS_RID_RAS_SERVERS __MSABI_LONG(0x00000229)
+#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS __MSABI_LONG(0x0000022A)
+#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS __MSABI_LONG(0x0000022B)
+#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS __MSABI_LONG(0x0000022C)
+#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS __MSABI_LONG(0x0000022D)
+
+#define DOMAIN_ALIAS_RID_MONITORING_USERS __MSABI_LONG(0x0000022E)
+#define DOMAIN_ALIAS_RID_LOGGING_USERS __MSABI_LONG(0x0000022F)
+#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS __MSABI_LONG(0x00000230)
+#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS __MSABI_LONG(0x00000231)
+#define DOMAIN_ALIAS_RID_DCOM_USERS __MSABI_LONG(0x00000232)
+
+#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
+
+#define SECURITY_PACKAGE_RID_COUNT __MSABI_LONG(2)
+#define SECURITY_LOGON_IDS_RID_COUNT __MSABI_LONG(3)
+
+typedef enum {
+ WinNullSid = 0,
+ WinWorldSid = 1,
+ WinLocalSid = 2,
+ WinCreatorOwnerSid = 3,
+ WinCreatorGroupSid = 4,
+ WinCreatorOwnerServerSid = 5,
+ WinCreatorGroupServerSid = 6,
+ WinNtAuthoritySid = 7,
+ WinDialupSid = 8,
+ WinNetworkSid = 9,
+ WinBatchSid = 10,
+ WinInteractiveSid = 11,
+ WinServiceSid = 12,
+ WinAnonymousSid = 13,
+ WinProxySid = 14,
+ WinEnterpriseControllersSid = 15,
+ WinSelfSid = 16,
+ WinAuthenticatedUserSid = 17,
+ WinRestrictedCodeSid = 18,
+ WinTerminalServerSid = 19,
+ WinRemoteLogonIdSid = 20,
+ WinLogonIdsSid = 21,
+ WinLocalSystemSid = 22,
+ WinLocalServiceSid = 23,
+ WinNetworkServiceSid = 24,
+ WinBuiltinDomainSid = 25,
+ WinBuiltinAdministratorsSid = 26,
+ WinBuiltinUsersSid = 27,
+ WinBuiltinGuestsSid = 28,
+ WinBuiltinPowerUsersSid = 29,
+ WinBuiltinAccountOperatorsSid = 30,
+ WinBuiltinSystemOperatorsSid = 31,
+ WinBuiltinPrintOperatorsSid = 32,
+ WinBuiltinBackupOperatorsSid = 33,
+ WinBuiltinReplicatorSid = 34,
+ WinBuiltinPreWindows2000CompatibleAccessSid = 35,
+ WinBuiltinRemoteDesktopUsersSid = 36,
+ WinBuiltinNetworkConfigurationOperatorsSid = 37,
+ WinAccountAdministratorSid = 38,
+ WinAccountGuestSid = 39,
+ WinAccountKrbtgtSid = 40,
+ WinAccountDomainAdminsSid = 41,
+ WinAccountDomainUsersSid = 42,
+ WinAccountDomainGuestsSid = 43,
+ WinAccountComputersSid = 44,
+ WinAccountControllersSid = 45,
+ WinAccountCertAdminsSid = 46,
+ WinAccountSchemaAdminsSid = 47,
+ WinAccountEnterpriseAdminsSid = 48,
+ WinAccountPolicyAdminsSid = 49,
+ WinAccountRasAndIasServersSid = 50,
+ WinNTLMAuthenticationSid = 51,
+ WinDigestAuthenticationSid = 52,
+ WinSChannelAuthenticationSid = 53,
+ WinThisOrganizationSid = 54,
+ WinOtherOrganizationSid = 55,
+ WinBuiltinIncomingForestTrustBuildersSid = 56,
+ WinBuiltinPerfMonitoringUsersSid = 57,
+ WinBuiltinPerfLoggingUsersSid = 58,
+ WinBuiltinAuthorizationAccessSid = 59,
+ WinBuiltinTerminalServerLicenseServersSid = 60,
+ WinBuiltinDCOMUsersSid = 61,
+ WinBuiltinIUsersSid = 62,
+ WinIUserSid = 63,
+ WinBuiltinCryptoOperatorsSid = 64,
+ WinUntrustedLabelSid = 65,
+ WinLowLabelSid = 66,
+ WinMediumLabelSid = 67,
+ WinHighLabelSid = 68,
+ WinSystemLabelSid = 69,
+ WinWriteRestrictedCodeSid = 70,
+ WinCreatorOwnerRightsSid = 71,
+ WinCacheablePrincipalsGroupSid = 72,
+ WinNonCacheablePrincipalsGroupSid = 73,
+ WinEnterpriseReadonlyControllersSid = 74,
+ WinAccountReadonlyControllersSid = 75,
+ WinBuiltinEventLogReadersGroup = 76,
+ WinNewEnterpriseReadonlyControllersSid = 77,
+ WinBuiltinCertSvcDComAccessGroup = 78,
+ WinMediumPlusLabelSid = 79,
+ WinLocalLogonSid = 80,
+ WinConsoleLogonSid = 81,
+ WinThisOrganizationCertificateSid = 82,
+} WELL_KNOWN_SID_TYPE;
+
+/*
+ * TOKEN_USER
+ */
+
+typedef struct _TOKEN_USER {
+ SID_AND_ATTRIBUTES User;
+} TOKEN_USER, *PTOKEN_USER;
+
+/*
+ * TOKEN_GROUPS
+ */
+
+typedef struct _TOKEN_GROUPS {
+ DWORD GroupCount;
+ SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
+} TOKEN_GROUPS, *PTOKEN_GROUPS;
+
+/*
+ * LUID_AND_ATTRIBUTES
+ */
+
+typedef union _LARGE_INTEGER {
+ struct {
+#ifdef WORDS_BIGENDIAN
+ LONG HighPart;
+ DWORD LowPart;
+#else
+ DWORD LowPart;
+ LONG HighPart;
+#endif
+ } u;
+#ifndef NONAMELESSSTRUCT
+ struct {
+#ifdef WORDS_BIGENDIAN
+ LONG HighPart;
+ DWORD LowPart;
+#else
+ DWORD LowPart;
+ LONG HighPart;
+#endif
+ };
+#endif
+ LONGLONG QuadPart;
+} LARGE_INTEGER, *PLARGE_INTEGER;
+
+typedef union _ULARGE_INTEGER {
+ struct {
+#ifdef WORDS_BIGENDIAN
+ DWORD HighPart;
+ DWORD LowPart;
+#else
+ DWORD LowPart;
+ DWORD HighPart;
+#endif
+ } u;
+#ifndef NONAMELESSSTRUCT
+ struct {
+#ifdef WORDS_BIGENDIAN
+ DWORD HighPart;
+ DWORD LowPart;
+#else
+ DWORD LowPart;
+ DWORD HighPart;
+#endif
+ };
+#endif
+ ULONGLONG QuadPart;
+} ULARGE_INTEGER, *PULARGE_INTEGER;
+
+/*
+ * Locally Unique Identifier
+ */
+
+typedef struct _LUID {
+ DWORD LowPart;
+ LONG HighPart;
+} LUID, *PLUID;
+
+#include <pshpack4.h>
+typedef struct _LUID_AND_ATTRIBUTES {
+ LUID Luid;
+ DWORD Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#include <poppack.h>
+
+/*
+ * PRIVILEGE_SET
+ */
+
+typedef struct _PRIVILEGE_SET {
+ DWORD PrivilegeCount;
+ DWORD Control;
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET, *PPRIVILEGE_SET;
+
+/*
+ * TOKEN_PRIVILEGES
+ */
+
+typedef struct _TOKEN_PRIVILEGES {
+ DWORD PrivilegeCount;
+ LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
+} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
+
+/*
+ * TOKEN_OWNER
+ */
+
+typedef struct _TOKEN_OWNER {
+ PSID Owner;
+} TOKEN_OWNER, *PTOKEN_OWNER;
+
+/*
+ * TOKEN_PRIMARY_GROUP
+ */
+
+typedef struct _TOKEN_PRIMARY_GROUP {
+ PSID PrimaryGroup;
+} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
+
+
+/*
+ * TOKEN_DEFAULT_DACL
+ */
+
+typedef struct _TOKEN_DEFAULT_DACL {
+ PACL DefaultDacl;
+} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
+
+/*
+ * TOKEN_SOURCE
+ */
+
+#define TOKEN_SOURCE_LENGTH 8
+
+typedef struct _TOKEN_SOURCE {
+ char SourceName[TOKEN_SOURCE_LENGTH];
+ LUID SourceIdentifier;
+} TOKEN_SOURCE, *PTOKEN_SOURCE;
+
+/*
+ * TOKEN_TYPE
+ */
+
+typedef enum tagTOKEN_TYPE {
+ TokenPrimary = 1,
+ TokenImpersonation
+} TOKEN_TYPE;
+
+/*
+ * SECURITY_IMPERSONATION_LEVEL
+ */
+
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
+
+#define SECURITY_DYNAMIC_TRACKING (TRUE)
+#define SECURITY_STATIC_TRACKING (FALSE)
+
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
+ * PSECURITY_CONTEXT_TRACKING_MODE;
+/*
+ * Quality of Service
+ */
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+ DWORD Length;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+ BOOLEAN EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
+
+/*
+ * TOKEN_STATISTICS
+ */
+
+#include <pshpack4.h>
+typedef struct _TOKEN_STATISTICS {
+ LUID TokenId;
+ LUID AuthenticationId;
+ LARGE_INTEGER ExpirationTime;
+ TOKEN_TYPE TokenType;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ DWORD DynamicCharged;
+ DWORD DynamicAvailable;
+ DWORD GroupCount;
+ DWORD PrivilegeCount;
+ LUID ModifiedId;
+} TOKEN_STATISTICS;
+#include <poppack.h>
+
+typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
+ DWORD SidCount;
+ DWORD SidLength;
+ PSID_AND_ATTRIBUTES Sids;
+ DWORD RestrictedSidCount;
+ DWORD RestrictedSidLength;
+ PSID_AND_ATTRIBUTES RestrictedSids;
+ DWORD PrivilegeCount;
+ DWORD PrivilegeLength;
+ PLUID_AND_ATTRIBUTES Privileges;
+ LUID AuthenticationId;
+} TOKEN_GROUPS_AND_PRIVILEGES, * PTOKEN_GROUPS_AND_PRIVILEGES;
+
+typedef struct _TOKEN_ORIGIN {
+ LUID OriginatingLogonSession;
+} TOKEN_ORIGIN, * PTOKEN_ORIGIN;
+
+typedef struct _TOKEN_LINKED_TOKEN {
+ HANDLE LinkedToken;
+} TOKEN_LINKED_TOKEN, * PTOKEN_LINKED_TOKEN;
+
+typedef struct _TOKEN_ELEVATION {
+ DWORD TokenIsElevated;
+} TOKEN_ELEVATION, * PTOKEN_ELEVATION;
+
+typedef struct _TOKEN_MANDATORY_LABEL {
+ SID_AND_ATTRIBUTES Label;
+} TOKEN_MANDATORY_LABEL, * PTOKEN_MANDATORY_LABEL;
+
+/*
+ * ACLs of NT
+ */
+
+/* ACEs, directly starting after an ACL */
+typedef struct _ACE_HEADER {
+ BYTE AceType;
+ BYTE AceFlags;
+ WORD AceSize;
+} ACE_HEADER,*PACE_HEADER;
+
+/* AceType */
+#define ACCESS_ALLOWED_ACE_TYPE 0
+#define ACCESS_DENIED_ACE_TYPE 1
+#define SYSTEM_AUDIT_ACE_TYPE 2
+#define SYSTEM_ALARM_ACE_TYPE 3
+
+/* inherit AceFlags */
+#define OBJECT_INHERIT_ACE 0x01
+#define CONTAINER_INHERIT_ACE 0x02
+#define NO_PROPAGATE_INHERIT_ACE 0x04
+#define INHERIT_ONLY_ACE 0x08
+#define INHERITED_ACE 0x10
+#define VALID_INHERIT_FLAGS 0x1F
+
+/* AceFlags mask for what events we (should) audit */
+#define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
+#define FAILED_ACCESS_ACE_FLAG 0x80
+
+/* different ACEs depending on AceType
+ * SidStart marks the begin of a SID
+ * so the thing finally looks like this:
+ * 0: ACE_HEADER
+ * 4: ACCESS_MASK
+ * 8... : SID
+ */
+typedef struct _ACCESS_ALLOWED_ACE {
+ ACE_HEADER Header;
+ DWORD Mask;
+ DWORD SidStart;
+} ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;
+
+typedef struct _ACCESS_DENIED_ACE {
+ ACE_HEADER Header;
+ DWORD Mask;
+ DWORD SidStart;
+} ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;
+
+typedef struct _SYSTEM_AUDIT_ACE {
+ ACE_HEADER Header;
+ DWORD Mask;
+ DWORD SidStart;
+} SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;
+
+typedef struct _SYSTEM_ALARM_ACE {
+ ACE_HEADER Header;
+ DWORD Mask;
+ DWORD SidStart;
+} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
+
+typedef enum tagSID_NAME_USE {
+ SidTypeUser = 1,
+ SidTypeGroup,
+ SidTypeDomain,
+ SidTypeAlias,
+ SidTypeWellKnownGroup,
+ SidTypeDeletedAccount,
+ SidTypeInvalid,
+ SidTypeUnknown
+} SID_NAME_USE,*PSID_NAME_USE;
+
+#define ACE_OBJECT_TYPE_PRESENT 0x1
+#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
+
+/* Access rights */
+
+/* DELETE may be already defined via /usr/include/arpa/nameser_compat.h */
+#undef DELETE
+#define DELETE 0x00010000
+#define READ_CONTROL 0x00020000
+#define WRITE_DAC 0x00040000
+#define WRITE_OWNER 0x00080000
+#define SYNCHRONIZE 0x00100000
+#define STANDARD_RIGHTS_REQUIRED 0x000f0000
+
+#define STANDARD_RIGHTS_READ READ_CONTROL
+#define STANDARD_RIGHTS_WRITE READ_CONTROL
+#define STANDARD_RIGHTS_EXECUTE READ_CONTROL
+
+#define STANDARD_RIGHTS_ALL 0x001f0000
+
+#define SPECIFIC_RIGHTS_ALL 0x0000ffff
+
+#define GENERIC_READ 0x80000000
+#define GENERIC_WRITE 0x40000000
+#define GENERIC_EXECUTE 0x20000000
+#define GENERIC_ALL 0x10000000
+
+#define MAXIMUM_ALLOWED 0x02000000
+#define ACCESS_SYSTEM_SECURITY 0x01000000
+
+#define EVENT_QUERY_STATE 0x0001
+#define EVENT_MODIFY_STATE 0x0002
+#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+#define SEMAPHORE_MODIFY_STATE 0x0002
+#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+#define MUTANT_QUERY_STATE 0x0001
+#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
+
+#define JOB_OBJECT_ASSIGN_PROCESS 0x0001
+#define JOB_OBJECT_SET_ATTRIBUTES 0x0002
+#define JOB_OBJECT_QUERY 0x0004
+#define JOB_OBJECT_TERMINATE 0x0008
+#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x0010
+#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1f)
+
+#define TIMER_QUERY_STATE 0x0001
+#define TIMER_MODIFY_STATE 0x0002
+#define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+#define PROCESS_TERMINATE 0x0001
+#define PROCESS_CREATE_THREAD 0x0002
+#define PROCESS_VM_OPERATION 0x0008
+#define PROCESS_VM_READ 0x0010
+#define PROCESS_VM_WRITE 0x0020
+#define PROCESS_DUP_HANDLE 0x0040
+#define PROCESS_CREATE_PROCESS 0x0080
+#define PROCESS_SET_QUOTA 0x0100
+#define PROCESS_SET_INFORMATION 0x0200
+#define PROCESS_QUERY_INFORMATION 0x0400
+#define PROCESS_SUSPEND_RESUME 0x0800
+#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
+
+#define THREAD_TERMINATE 0x0001
+#define THREAD_SUSPEND_RESUME 0x0002
+#define THREAD_GET_CONTEXT 0x0008
+#define THREAD_SET_CONTEXT 0x0010
+#define THREAD_SET_INFORMATION 0x0020
+#define THREAD_QUERY_INFORMATION 0x0040
+#define THREAD_SET_THREAD_TOKEN 0x0080
+#define THREAD_IMPERSONATE 0x0100
+#define THREAD_DIRECT_IMPERSONATION 0x0200
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
+
+#define THREAD_BASE_PRIORITY_LOWRT 15
+#define THREAD_BASE_PRIORITY_MAX 2
+#define THREAD_BASE_PRIORITY_MIN -2
+#define THREAD_BASE_PRIORITY_IDLE -15
+
+typedef struct _QUOTA_LIMITS {
+ SIZE_T PagedPoolLimit;
+ SIZE_T NonPagedPoolLimit;
+ SIZE_T MinimumWorkingSetSize;
+ SIZE_T MaximumWorkingSetSize;
+ SIZE_T PagefileLimit;
+ LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS, *PQUOTA_LIMITS;
+
+#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
+#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
+#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
+#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
+
+typedef struct _QUOTA_LIMITS_EX {
+ SIZE_T PagedPoolLimit;
+ SIZE_T NonPagedPoolLimit;
+ SIZE_T MinimumWorkingSetSize;
+ SIZE_T MaximumWorkingSetSize;
+ SIZE_T PagefileLimit;
+ LARGE_INTEGER TimeLimit;
+ SIZE_T Reserved1;
+ SIZE_T Reserved2;
+ SIZE_T Reserved3;
+ SIZE_T Reserved4;
+ DWORD Flags;
+ DWORD Reserved5;
+} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
+
+#define SECTION_QUERY 0x0001
+#define SECTION_MAP_WRITE 0x0002
+#define SECTION_MAP_READ 0x0004
+#define SECTION_MAP_EXECUTE 0x0008
+#define SECTION_EXTEND_SIZE 0x0010
+#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
+#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|0x01f)
+
+#define FILE_READ_DATA 0x0001 /* file & pipe */
+#define FILE_LIST_DIRECTORY 0x0001 /* directory */
+#define FILE_WRITE_DATA 0x0002 /* file & pipe */
+#define FILE_ADD_FILE 0x0002 /* directory */
+#define FILE_APPEND_DATA 0x0004 /* file */
+#define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
+#define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
+#define FILE_READ_EA 0x0008 /* file & directory */
+#define FILE_READ_PROPERTIES FILE_READ_EA
+#define FILE_WRITE_EA 0x0010 /* file & directory */
+#define FILE_WRITE_PROPERTIES FILE_WRITE_EA
+#define FILE_EXECUTE 0x0020 /* file */
+#define FILE_TRAVERSE 0x0020 /* directory */
+#define FILE_DELETE_CHILD 0x0040 /* directory */
+#define FILE_READ_ATTRIBUTES 0x0080 /* all */
+#define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
+#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
+
+#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
+ FILE_READ_ATTRIBUTES | FILE_READ_EA | \
+ SYNCHRONIZE)
+#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
+ FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
+ FILE_APPEND_DATA | SYNCHRONIZE)
+#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
+ FILE_READ_ATTRIBUTES | SYNCHRONIZE)
+
+#define DUPLICATE_CLOSE_SOURCE 0x00000001
+#define DUPLICATE_SAME_ACCESS 0x00000002
+
+/* File attribute flags */
+#define FILE_SHARE_READ 0x00000001
+#define FILE_SHARE_WRITE 0x00000002
+#define FILE_SHARE_DELETE 0x00000004
+
+#define FILE_ATTRIBUTE_READONLY 0x00000001
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
+#define FILE_ATTRIBUTE_DEVICE 0x00000040
+#define FILE_ATTRIBUTE_NORMAL 0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
+#define FILE_ATTRIBUTE_OFFLINE 0x00001000
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
+#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
+
+/* File notification flags */
+#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
+#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
+#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
+#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
+#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
+#define FILE_NOTIFY_CHANGE_EA 0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
+
+#define FILE_ACTION_ADDED 0x00000001
+#define FILE_ACTION_REMOVED 0x00000002
+#define FILE_ACTION_MODIFIED 0x00000003
+#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
+#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
+#define FILE_ACTION_ADDED_STREAM 0x00000006
+#define FILE_ACTION_REMOVED_STREAM 0x00000007
+#define FILE_ACTION_MODIFIED_STREAM 0x00000008
+
+#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
+#define FILE_CASE_PRESERVED_NAMES 0x00000002
+#define FILE_UNICODE_ON_DISK 0x00000004
+#define FILE_PERSISTENT_ACLS 0x00000008
+#define FILE_FILE_COMPRESSION 0x00000010
+#define FILE_VOLUME_QUOTAS 0x00000020
+#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
+#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
+#define FILE_VOLUME_IS_COMPRESSED 0x00008000
+#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
+#define FILE_SUPPORTS_ENCRYPTION 0x00020000
+#define FILE_NAMED_STREAMS 0x00040000
+#define FILE_READ_ONLY_VOLUME 0x00080000
+
+/* File alignments (NT) */
+#define FILE_BYTE_ALIGNMENT 0x00000000
+#define FILE_WORD_ALIGNMENT 0x00000001
+#define FILE_LONG_ALIGNMENT 0x00000003
+#define FILE_QUAD_ALIGNMENT 0x00000007
+#define FILE_OCTA_ALIGNMENT 0x0000000f
+#define FILE_32_BYTE_ALIGNMENT 0x0000001f
+#define FILE_64_BYTE_ALIGNMENT 0x0000003f
+#define FILE_128_BYTE_ALIGNMENT 0x0000007f
+#define FILE_256_BYTE_ALIGNMENT 0x000000ff
+#define FILE_512_BYTE_ALIGNMENT 0x000001ff
+
+#define MAILSLOT_NO_MESSAGE ((DWORD)-1)
+#define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
+
+#define REG_NONE 0 /* no type */
+#define REG_SZ 1 /* string type (ASCII) */
+#define REG_EXPAND_SZ 2 /* string, includes %ENVVAR% (expanded by caller) (ASCII) */
+#define REG_BINARY 3 /* binary format, callerspecific */
+/* YES, REG_DWORD == REG_DWORD_LITTLE_ENDIAN */
+#define REG_DWORD 4 /* DWORD in little endian format */
+#define REG_DWORD_LITTLE_ENDIAN 4 /* DWORD in little endian format */
+#define REG_DWORD_BIG_ENDIAN 5 /* DWORD in big endian format */
+#define REG_LINK 6 /* symbolic link (UNICODE) */
+#define REG_MULTI_SZ 7 /* multiple strings, delimited by \0, terminated by \0\0 (ASCII) */
+#define REG_RESOURCE_LIST 8 /* resource list? huh? */
+#define REG_FULL_RESOURCE_DESCRIPTOR 9 /* full resource descriptor? huh? */
+#define REG_RESOURCE_REQUIREMENTS_LIST 10
+#define REG_QWORD 11 /* QWORD in little endian format */
+#define REG_QWORD_LITTLE_ENDIAN 11 /* QWORD in little endian format */
+
+/* ----------------------------- begin power management --------------------- */
+
+typedef enum _LATENCY_TIME {
+ LT_DONT_CARE,
+ LT_LOWEST_LATENCY
+} LATENCY_TIME, *PLATENCY_TIME;
+
+#define DISCHARGE_POLICY_CRITICAL 0
+#define DISCHARGE_POLICY_LOW 1
+#define NUM_DISCHARGE_POLICIES 4
+
+#define PO_THROTTLE_NONE 0
+#define PO_THROTTLE_CONSTANT 1
+#define PO_THROTTLE_DEGRADE 2
+#define PO_THROTTLE_ADAPTIVE 3
+
+typedef enum _POWER_ACTION {
+ PowerActionNone = 0,
+ PowerActionReserved,
+ PowerActionSleep,
+ PowerActionHibernate,
+ PowerActionShutdown,
+ PowerActionShutdownReset,
+ PowerActionShutdownOff,
+ PowerActionWarmEject
+} POWER_ACTION,
+*PPOWER_ACTION;
+
+typedef enum _SYSTEM_POWER_STATE {
+ PowerSystemUnspecified = 0,
+ PowerSystemWorking = 1,
+ PowerSystemSleeping1 = 2,
+ PowerSystemSleeping2 = 3,
+ PowerSystemSleeping3 = 4,
+ PowerSystemHibernate = 5,
+ PowerSystemShutdown = 6,
+ PowerSystemMaximum = 7
+} SYSTEM_POWER_STATE,
+*PSYSTEM_POWER_STATE;
+
+typedef enum _DEVICE_POWER_STATE {
+ PowerDeviceUnspecified,
+ PowerDeviceD0,
+ PowerDeviceD1,
+ PowerDeviceD2,
+ PowerDeviceD3,
+ PowerDeviceMaximum
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+
+typedef enum _POWER_INFORMATION_LEVEL {
+ SystemPowerPolicyAc,
+ SystemPowerPolicyDc,
+ VerifySystemPolicyAc,
+ VerifySystemPolicyDc,
+ SystemPowerCapabilities,
+ SystemBatteryState,
+ SystemPowerStateHandler,
+ ProcessorStateHandler,
+ SystemPowerPolicyCurrent,
+ AdministratorPowerPolicy,
+ SystemReserveHiberFile,
+ ProcessorInformation,
+ SystemPowerInformation,
+ ProcessorStateHandler2,
+ LastWakeTime,
+ LastSleepTime,
+ SystemExecutionState,
+ SystemPowerStateNotifyHandler,
+ ProcessorPowerPolicyAc,
+ ProcessorPowerPolicyDc,
+ VerifyProcessorPowerPolicyAc,
+ VerifyProcessorPowerPolicyDc,
+ ProcessorPowerPolicyCurrent
+} POWER_INFORMATION_LEVEL;
+
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+ SYSTEM_POWER_STATE MinSleep;
+ SYSTEM_POWER_STATE MaxSleep;
+ ULONG MinVideoTimeout;
+ ULONG MaxVideoTimeout;
+ ULONG MinSpindownTimeout;
+ ULONG MaxSpindownTimeout;
+} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
+
+typedef struct {
+ ULONG Granularity;
+ ULONG Capacity;
+} BATTERY_REPORTING_SCALE,
+*PBATTERY_REPORTING_SCALE;
+
+typedef struct {
+ POWER_ACTION Action;
+ ULONG Flags;
+ ULONG EventCode;
+} POWER_ACTION_POLICY,
+*PPOWER_ACTION_POLICY;
+
+typedef struct _PROCESSOR_POWER_INFORMATION {
+ ULONG Number;
+ ULONG MaxMhz;
+ ULONG CurrentMhz;
+ ULONG MhzLimit;
+ ULONG MaxIdleState;
+ ULONG CurrentIdleState;
+} PROCESSOR_POWER_INFORMATION,
+*PPROCESSOR_POWER_INFORMATION;
+
+typedef struct _PROCESSOR_POWER_POLICY_INFO {
+ ULONG TimeCheck;
+ ULONG DemoteLimit;
+ ULONG PromoteLimit;
+ UCHAR DemotePercent;
+ UCHAR PromotePercent;
+ UCHAR Spare[2];
+ ULONG AllowDemotion:1;
+ ULONG AllowPromotion:1;
+ ULONG Reserved:30;
+} PROCESSOR_POWER_POLICY_INFO,
+*PPROCESSOR_POWER_POLICY_INFO;
+
+typedef struct _PROCESSOR_POWER_POLICY {
+ DWORD Revision;
+ BYTE DynamicThrottle;
+ BYTE Spare[3];
+ DWORD DisableCStates:1;
+ DWORD Reserved:31;
+ DWORD PolicyCount;
+ PROCESSOR_POWER_POLICY_INFO Policy[3];
+} PROCESSOR_POWER_POLICY,
+*PPROCESSOR_POWER_POLICY;
+
+typedef struct {
+ BOOLEAN AcOnLine;
+ BOOLEAN BatteryPresent;
+ BOOLEAN Charging;
+ BOOLEAN Discharging;
+ BOOLEAN Spare1[4];
+ ULONG MaxCapacity;
+ ULONG RemainingCapacity;
+ ULONG Rate;
+ ULONG EstimatedTime;
+ ULONG DefaultAlert1;
+ ULONG DefaultAlert2;
+} SYSTEM_BATTERY_STATE,
+*PSYSTEM_BATTERY_STATE;
+
+typedef struct {
+ BOOLEAN PowerButtonPresent;
+ BOOLEAN SleepButtonPresent;
+ BOOLEAN LidPresent;
+ BOOLEAN SystemS1;
+ BOOLEAN SystemS2;
+ BOOLEAN SystemS3;
+ BOOLEAN SystemS4;
+ BOOLEAN SystemS5;
+ BOOLEAN HiberFilePresent;
+ BOOLEAN FullWake;
+ BOOLEAN VideoDimPresent;
+ BOOLEAN ApmPresent;
+ BOOLEAN UpsPresent;
+ BOOLEAN ThermalControl;
+ BOOLEAN ProcessorThrottle;
+ UCHAR ProcessorMinThrottle;
+ UCHAR ProcessorMaxThrottle;
+ UCHAR spare2[4];
+ BOOLEAN DiskSpinDown;
+ UCHAR spare3[8];
+ BOOLEAN SystemBatteriesPresent;
+ BOOLEAN BatteriesAreShortTerm;
+ BATTERY_REPORTING_SCALE BatteryScale[3];
+ SYSTEM_POWER_STATE AcOnLineWake;
+ SYSTEM_POWER_STATE SoftLidWake;
+ SYSTEM_POWER_STATE RtcWake;
+ SYSTEM_POWER_STATE MinDeviceWakeState;
+ SYSTEM_POWER_STATE DefaultLowLatencyWake;
+} SYSTEM_POWER_CAPABILITIES,
+*PSYSTEM_POWER_CAPABILITIES;
+
+typedef struct _SYSTEM_POWER_INFORMATION {
+ ULONG MaxIdlenessAllowed;
+ ULONG Idleness;
+ ULONG TimeRemaining;
+ UCHAR CoolingMode;
+} SYSTEM_POWER_INFORMATION,
+*PSYSTEM_POWER_INFORMATION;
+
+typedef struct _SYSTEM_POWER_LEVEL {
+ BOOLEAN Enable;
+ UCHAR Spare[3];
+ ULONG BatteryLevel;
+ POWER_ACTION_POLICY PowerPolicy;
+ SYSTEM_POWER_STATE MinSystemState;
+} SYSTEM_POWER_LEVEL,
+*PSYSTEM_POWER_LEVEL;
+
+typedef struct _SYSTEM_POWER_POLICY {
+ ULONG Revision;
+ POWER_ACTION_POLICY PowerButton;
+ POWER_ACTION_POLICY SleepButton;
+ POWER_ACTION_POLICY LidClose;
+ SYSTEM_POWER_STATE LidOpenWake;
+ ULONG Reserved;
+ POWER_ACTION_POLICY Idle;
+ ULONG IdleTimeout;
+ UCHAR IdleSensitivity;
+ UCHAR DynamicThrottle;
+ UCHAR Spare2[2];
+ SYSTEM_POWER_STATE MinSleep;
+ SYSTEM_POWER_STATE MaxSleep;
+ SYSTEM_POWER_STATE ReducedLatencySleep;
+ ULONG WinLogonFlags;
+ ULONG Spare3;
+ ULONG DozeS4Timeout;
+ ULONG BroadcastCapacityResolution;
+ SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
+ ULONG VideoTimeout;
+ BOOLEAN VideoDimDisplay;
+ ULONG VideoReserved[3];
+ ULONG SpindownTimeout;
+ BOOLEAN OptimizeForPower;
+ UCHAR FanThrottleTolerance;
+ UCHAR ForcedThrottle;
+ UCHAR MinThrottle;
+ POWER_ACTION_POLICY OverThrottled;
+} SYSTEM_POWER_POLICY,
+*PSYSTEM_POWER_POLICY;
+
+typedef union _FILE_SEGMENT_ELEMENT {
+ PVOID64 Buffer;
+ ULONGLONG Alignment;
+} FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+typedef struct _FILE_NOTIFY_INFORMATION {
+ DWORD NextEntryOffset;
+ DWORD Action;
+ DWORD FileNameLength;
+ WCHAR FileName[1];
+} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
+
+/* ----------------------------- begin tape storage --------------------- */
+
+#define TAPE_FIXED_PARTITIONS 0
+#define TAPE_SELECT_PARTITIONS 1
+#define TAPE_INITIATOR_PARTITIONS 2
+#define TAPE_ERASE_SHORT 0
+#define TAPE_ERASE_LONG 1
+#define TAPE_LOAD 0
+#define TAPE_UNLOAD 1
+#define TAPE_TENSION 2
+#define TAPE_LOCK 3
+#define TAPE_UNLOCK 4
+#define TAPE_FORMAT 5
+#define TAPE_SETMARKS 0
+#define TAPE_FILEMARKS 1
+#define TAPE_SHORT_FILEMARKS 2
+#define TAPE_LONG_FILEMARKS 3
+#define TAPE_REWIND 0
+#define TAPE_ABSOLUTE_BLOCK 1
+#define TAPE_LOGICAL_BLOCK 2
+#define TAPE_PSEUDO_LOGICAL_BLOCK 3
+#define TAPE_SPACE_END_OF_DATA 4
+#define TAPE_SPACE_RELATIVE_BLOCKS 5
+#define TAPE_SPACE_FILEMARKS 6
+#define TAPE_SPACE_SEQUENTIAL_FMKS 7
+#define TAPE_SPACE_SETMARKS 8
+#define TAPE_SPACE_SEQUENTIAL_SMKS 9
+
+typedef struct _TAPE_CREATE_PARTITION {
+ DWORD Method;
+ DWORD Count;
+ DWORD Size;
+} TAPE_CREATE_PARTITION, *PTAPE_CREATE_PARTITION;
+
+typedef struct _TAPE_ERASE {
+ DWORD Type;
+ BOOLEAN Immediate;
+} TAPE_ERASE, *PTAPE_ERASE;
+
+typedef struct _TAPE_PREPARE {
+ DWORD Operation;
+ BOOLEAN Immediate;
+} TAPE_PREPARE, *PTAPE_PREPARE;
+
+typedef struct _TAPE_SET_DRIVE_PARAMETERS {
+ BOOLEAN ECC;
+ BOOLEAN Compression;
+ BOOLEAN DataPadding;
+ BOOLEAN ReportSetmarks;
+ ULONG EOTWarningZoneSize;
+} TAPE_SET_DRIVE_PARAMETERS, *PTAPE_SET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_SET_MEDIA_PARAMETERS {
+ ULONG BlockSize;
+} TAPE_SET_MEDIA_PARAMETERS, *PTAPE_SET_MEDIA_PARAMETERS;
+
+typedef struct _TAPE_WRITE_MARKS {
+ DWORD Type;
+ DWORD Count;
+ BOOLEAN Immediate;
+} TAPE_WRITE_MARKS, *PTAPE_WRITE_MARKS;
+
+typedef struct _TAPE_GET_POSITION {
+ ULONG Type;
+ ULONG Partition;
+ ULONG OffsetLow;
+ ULONG OffsetHigh;
+} TAPE_GET_POSITION, *PTAPE_GET_POSITION;
+
+typedef struct _TAPE_SET_POSITION {
+ ULONG Method;
+ ULONG Partition;
+ LARGE_INTEGER Offset;
+ BOOLEAN Immediate;
+} TAPE_SET_POSITION, *PTAPE_SET_POSITION;
+
+typedef struct _TAPE_GET_DRIVE_PARAMETERS {
+ BOOLEAN ECC;
+ BOOLEAN Compression;
+ BOOLEAN DataPadding;
+ BOOLEAN ReportSetmarks;
+ DWORD DefaultBlockSize;
+ DWORD MaximumBlockSize;
+ DWORD MinimumBlockSize;
+ DWORD MaximumPartitionCount;
+ DWORD FeaturesLow;
+ DWORD FeaturesHigh;
+ DWORD EOTWarningZoneSize;
+} TAPE_GET_DRIVE_PARAMETERS, *PTAPE_GET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_GET_MEDIA_PARAMETERS {
+ LARGE_INTEGER Capacity;
+ LARGE_INTEGER Remaining;
+ DWORD BlockSize;
+ DWORD PartitionCount;
+ BOOLEAN WriteProtected;
+} TAPE_GET_MEDIA_PARAMETERS, *PTAPE_GET_MEDIA_PARAMETERS;
+
+/* ----------------------------- begin registry ----------------------------- */
+
+/* Registry security values */
+#define OWNER_SECURITY_INFORMATION 0x00000001
+#define GROUP_SECURITY_INFORMATION 0x00000002
+#define DACL_SECURITY_INFORMATION 0x00000004
+#define SACL_SECURITY_INFORMATION 0x00000008
+
+#define REG_OPTION_RESERVED 0x00000000
+#define REG_OPTION_NON_VOLATILE 0x00000000
+#define REG_OPTION_VOLATILE 0x00000001
+#define REG_OPTION_CREATE_LINK 0x00000002
+#define REG_OPTION_BACKUP_RESTORE 0x00000004 /* FIXME */
+#define REG_OPTION_OPEN_LINK 0x00000008
+#define REG_LEGAL_OPTION (REG_OPTION_RESERVED| \
+ REG_OPTION_NON_VOLATILE| \
+ REG_OPTION_VOLATILE| \
+ REG_OPTION_CREATE_LINK| \
+ REG_OPTION_BACKUP_RESTORE| \
+ REG_OPTION_OPEN_LINK)
+
+
+#define REG_CREATED_NEW_KEY 0x00000001
+#define REG_OPENED_EXISTING_KEY 0x00000002
+
+/* For RegNotifyChangeKeyValue */
+#define REG_NOTIFY_CHANGE_NAME 0x01
+#define REG_NOTIFY_CHANGE_ATTRIBUTES 0x02
+#define REG_NOTIFY_CHANGE_LAST_SET 0x04
+#define REG_NOTIFY_CHANGE_SECURITY 0x08
+
+#define KEY_QUERY_VALUE 0x00000001
+#define KEY_SET_VALUE 0x00000002
+#define KEY_CREATE_SUB_KEY 0x00000004
+#define KEY_ENUMERATE_SUB_KEYS 0x00000008
+#define KEY_NOTIFY 0x00000010
+#define KEY_CREATE_LINK 0x00000020
+#define KEY_WOW64_64KEY 0x00000100
+#define KEY_WOW64_32KEY 0x00000200
+#define KEY_WOW64_RES 0x00000300
+
+/* for RegKeyRestore flags */
+#define REG_WHOLE_HIVE_VOLATILE 0x00000001
+#define REG_REFRESH_HIVE 0x00000002
+#define REG_NO_LAZY_FLUSH 0x00000004
+#define REG_FORCE_RESTORE 0x00000008
+
+#define KEY_READ ((STANDARD_RIGHTS_READ| \
+ KEY_QUERY_VALUE| \
+ KEY_ENUMERATE_SUB_KEYS| \
+ KEY_NOTIFY) \
+ & (~SYNCHRONIZE) \
+ )
+#define KEY_WRITE ((STANDARD_RIGHTS_WRITE| \
+ KEY_SET_VALUE| \
+ KEY_CREATE_SUB_KEY) \
+ & (~SYNCHRONIZE) \
+ )
+#define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
+#define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL| \
+ KEY_QUERY_VALUE| \
+ KEY_SET_VALUE| \
+ KEY_CREATE_SUB_KEY| \
+ KEY_ENUMERATE_SUB_KEYS| \
+ KEY_NOTIFY| \
+ KEY_CREATE_LINK) \
+ & (~SYNCHRONIZE) \
+ )
+/* ------------------------------ end registry ------------------------------ */
+
+
+#define EVENTLOG_SUCCESS 0x0000
+#define EVENTLOG_ERROR_TYPE 0x0001
+#define EVENTLOG_WARNING_TYPE 0x0002
+#define EVENTLOG_INFORMATION_TYPE 0x0004
+#define EVENTLOG_AUDIT_SUCCESS 0x0008
+#define EVENTLOG_AUDIT_FAILURE 0x0010
+
+#define EVENTLOG_SEQUENTIAL_READ 0x0001
+#define EVENTLOG_SEEK_READ 0x0002
+#define EVENTLOG_FORWARDS_READ 0x0004
+#define EVENTLOG_BACKWARDS_READ 0x0008
+
+typedef struct _EVENTLOGRECORD {
+ DWORD Length;
+ DWORD Reserved;
+ DWORD RecordNumber;
+ DWORD TimeGenerated;
+ DWORD TimeWritten;
+ DWORD EventID;
+ WORD EventType;
+ WORD NumStrings;
+ WORD EventCategory;
+ WORD ReservedFlags;
+ DWORD ClosingRecordNumber;
+ DWORD StringOffset;
+ DWORD UserSidLength;
+ DWORD UserSidOffset;
+ DWORD DataLength;
+ DWORD DataOffset;
+} EVENTLOGRECORD, *PEVENTLOGRECORD;
+
+#define SERVICE_BOOT_START 0x00000000
+#define SERVICE_SYSTEM_START 0x00000001
+#define SERVICE_AUTO_START 0x00000002
+#define SERVICE_DEMAND_START 0x00000003
+#define SERVICE_DISABLED 0x00000004
+
+#define SERVICE_ERROR_IGNORE 0x00000000
+#define SERVICE_ERROR_NORMAL 0x00000001
+#define SERVICE_ERROR_SEVERE 0x00000002
+#define SERVICE_ERROR_CRITICAL 0x00000003
+
+/* Service types */
+#define SERVICE_KERNEL_DRIVER 0x00000001
+#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
+#define SERVICE_ADAPTER 0x00000004
+#define SERVICE_RECOGNIZER_DRIVER 0x00000008
+
+#define SERVICE_DRIVER ( SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | \
+ SERVICE_RECOGNIZER_DRIVER )
+
+#define SERVICE_WIN32_OWN_PROCESS 0x00000010
+#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
+#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
+
+#define SERVICE_INTERACTIVE_PROCESS 0x00000100
+
+#define SERVICE_TYPE_ALL ( SERVICE_WIN32 | SERVICE_ADAPTER | \
+ SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS )
+
+
+typedef enum _CM_SERVICE_NODE_TYPE
+{
+ DriverType = SERVICE_KERNEL_DRIVER,
+ FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
+ Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
+ Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
+ AdapterType = SERVICE_ADAPTER,
+ RecognizerType = SERVICE_RECOGNIZER_DRIVER
+} SERVICE_NODE_TYPE;
+
+typedef enum _CM_SERVICE_LOAD_TYPE
+{
+ BootLoad = SERVICE_BOOT_START,
+ SystemLoad = SERVICE_SYSTEM_START,
+ AutoLoad = SERVICE_AUTO_START,
+ DemandLoad = SERVICE_DEMAND_START,
+ DisableLoad = SERVICE_DISABLED
+} SERVICE_LOAD_TYPE;
+
+typedef enum _CM_ERROR_CONTROL_TYPE
+{
+ IgnoreError = SERVICE_ERROR_IGNORE,
+ NormalError = SERVICE_ERROR_NORMAL,
+ SevereError = SERVICE_ERROR_SEVERE,
+ CriticalError = SERVICE_ERROR_CRITICAL
+} SERVICE_ERROR_TYPE;
+
+
+
+#define RtlEqualMemory(Destination, Source, Length) (!memcmp((Destination),(Source),(Length)))
+#define RtlMoveMemory(Destination, Source, Length) memmove((Destination),(Source),(Length))
+#define RtlCopyMemory(Destination, Source, Length) memcpy((Destination),(Source),(Length))
+#define RtlFillMemory(Destination, Length, Fill) memset((Destination),(Fill),(Length))
+#define RtlZeroMemory(Destination, Length) memset((Destination),0,(Length))
+
+#include <guiddef.h>
+
+typedef struct _OBJECT_TYPE_LIST {
+ WORD Level;
+ WORD Sbz;
+ GUID *ObjectType;
+} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
+
+typedef struct _RTL_CRITICAL_SECTION_DEBUG
+{
+ WORD Type;
+ WORD CreatorBackTraceIndex;
+ struct _RTL_CRITICAL_SECTION *CriticalSection;
+ LIST_ENTRY ProcessLocksList;
+ DWORD EntryCount;
+ DWORD ContentionCount;
+#ifdef __WINESRC__ /* in Wine we store the name here */
+ DWORD_PTR Spare[8/sizeof(DWORD_PTR)];
+#else
+ DWORD Spare[ 2 ];
+#endif
+} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
+
+typedef struct _RTL_CRITICAL_SECTION {
+ PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
+ LONG LockCount;
+ LONG RecursionCount;
+ HANDLE OwningThread;
+ HANDLE LockSemaphore;
+ ULONG_PTR SpinCount;
+} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
+
+#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x1000000
+#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x2000000
+#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x4000000
+#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000
+#define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & ~0x7000000)
+
+typedef struct _RTL_SRWLOCK {
+ PVOID Ptr;
+} RTL_SRWLOCK, *PRTL_SRWLOCK;
+
+#define RTL_SRWLOCK_INIT {0}
+
+typedef struct _RTL_CONDITION_VARIABLE {
+ PVOID Ptr;
+} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
+#define RTL_CONDITION_VARIABLE_INIT {0}
+#define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
+
+typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
+typedef VOID (NTAPI * PFLS_CALLBACK_FUNCTION) ( PVOID );
+
+#define RTL_RUN_ONCE_INIT {0}
+typedef union _RTL_RUN_ONCE {
+ PVOID Ptr;
+} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
+
+#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001
+#define RTL_RUN_ONCE_ASYNC 0x00000002
+#define RTL_RUN_ONCE_INIT_FAILED 0x00000004
+
+typedef DWORD WINAPI RTL_RUN_ONCE_INIT_FN(PRTL_RUN_ONCE, PVOID, PVOID*);
+typedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN;
+NTSYSAPI VOID WINAPI RtlRunOnceInitialize(PRTL_RUN_ONCE);
+NTSYSAPI DWORD WINAPI RtlRunOnceExecuteOnce(PRTL_RUN_ONCE,PRTL_RUN_ONCE_INIT_FN,PVOID,PVOID*);
+NTSYSAPI DWORD WINAPI RtlRunOnceBeginInitialize(PRTL_RUN_ONCE, DWORD, PVOID*);
+NTSYSAPI DWORD WINAPI RtlRunOnceComplete(PRTL_RUN_ONCE, DWORD, PVOID);
+
+#include <pshpack8.h>
+typedef struct _IO_COUNTERS {
+ ULONGLONG DECLSPEC_ALIGN(8) ReadOperationCount;
+ ULONGLONG DECLSPEC_ALIGN(8) WriteOperationCount;
+ ULONGLONG DECLSPEC_ALIGN(8) OtherOperationCount;
+ ULONGLONG DECLSPEC_ALIGN(8) ReadTransferCount;
+ ULONGLONG DECLSPEC_ALIGN(8) WriteTransferCount;
+ ULONGLONG DECLSPEC_ALIGN(8) OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+#include <poppack.h>
+
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[128];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
+
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[128];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+DECL_WINELIB_TYPE_AW(OSVERSIONINFO)
+DECL_WINELIB_TYPE_AW(POSVERSIONINFO)
+DECL_WINELIB_TYPE_AW(LPOSVERSIONINFO)
+
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX)
+DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX)
+DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX)
+
+NTSYSAPI ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
+
+#define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
+
+#define VER_PLATFORM_WIN32s 0
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#define VER_PLATFORM_WIN32_NT 2
+
+#define VER_MINORVERSION 0x00000001
+#define VER_MAJORVERSION 0x00000002
+#define VER_BUILDNUMBER 0x00000004
+#define VER_PLATFORMID 0x00000008
+#define VER_SERVICEPACKMINOR 0x00000010
+#define VER_SERVICEPACKMAJOR 0x00000020
+#define VER_SUITENAME 0x00000040
+#define VER_PRODUCT_TYPE 0x00000080
+
+#define VER_NT_WORKSTATION 1
+#define VER_NT_DOMAIN_CONTROLLER 2
+#define VER_NT_SERVER 3
+
+#define VER_SUITE_SMALLBUSINESS 0x00000001
+#define VER_SUITE_ENTERPRISE 0x00000002
+#define VER_SUITE_BACKOFFICE 0x00000004
+#define VER_SUITE_COMMUNICATIONS 0x00000008
+#define VER_SUITE_TERMINAL 0x00000010
+#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
+#define VER_SUITE_EMBEDDEDNT 0x00000040
+#define VER_SUITE_DATACENTER 0x00000080
+#define VER_SUITE_SINGLEUSERTS 0x00000100
+#define VER_SUITE_PERSONAL 0x00000200
+#define VER_SUITE_BLADE 0x00000400
+#define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
+#define VER_SUITE_SECURITY_APPLIANCE 0x00001000
+#define VER_SUITE_STORAGE_SERVER 0x00002000
+#define VER_SUITE_COMPUTE_SERVER 0x00004000
+#define VER_SUITE_WH_SERVER 0x00008000
+
+#define VER_EQUAL 1
+#define VER_GREATER 2
+#define VER_GREATER_EQUAL 3
+#define VER_LESS 4
+#define VER_LESS_EQUAL 5
+#define VER_AND 6
+#define VER_OR 7
+
+typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
+ DWORD dwFlags;
+ DWORD ulFormatVersion;
+ DWORD ulAssemblyCount;
+ DWORD ulRootManifestPathType;
+ DWORD ulRootManifestPathChars;
+ DWORD ulRootConfigurationPathType;
+ DWORD ulRootConfigurationPathChars;
+ DWORD ulAppDirPathType;
+ DWORD ulAppDirPathChars;
+ PCWSTR lpRootManifestPath;
+ PCWSTR lpRootConfigurationPath;
+ PCWSTR lpAppDirPath;
+} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;
+
+typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
+ DWORD ulFlags;
+ DWORD ulEncodedAssemblyIdentityLength;
+ DWORD ulManifestPathType;
+ DWORD ulManifestPathLength;
+ LARGE_INTEGER liManifestLastWriteTime;
+ DWORD ulPolicyPathType;
+ DWORD ulPolicyPathLength;
+ LARGE_INTEGER liPolicyLastWriteTime;
+ DWORD ulMetadataSatelliteRosterIndex;
+ DWORD ulManifestVersionMajor;
+ DWORD ulManifestVersionMinor;
+ DWORD ulPolicyVersionMajor;
+ DWORD ulPolicyVersionMinor;
+ DWORD ulAssemblyDirectoryNameLength;
+ PCWSTR lpAssemblyEncodedAssemblyIdentity;
+ PCWSTR lpAssemblyManifestPath;
+ PCWSTR lpAssemblyPolicyPath;
+ PCWSTR lpAssemblyDirectoryName;
+ DWORD ulFileCount;
+} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+
+typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
+ DWORD ulAssemblyIndex;
+ DWORD ulFileIndexInAssembly;
+} ACTIVATION_CONTEXT_QUERY_INDEX, *PACTIVATION_CONTEXT_QUERY_INDEX;
+
+typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
+
+typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
+ DWORD ulFlags;
+ DWORD ulFilenameLength;
+ DWORD ulPathLength;
+ PCWSTR lpFileName;
+ PCWSTR lpFilePath;
+} ASSEMBLY_FILE_DETAILED_INFORMATION, *PASSEMBLY_FILE_DETAILED_INFORMATION;
+
+typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
+
+typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
+ ActivationContextBasicInformation = 1,
+ ActivationContextDetailedInformation = 2,
+ AssemblyDetailedInformationInActivationContext = 3,
+ FileInformationInAssemblyOfAssemblyInActivationContext = 4,
+ MaxActivationContextInfoClass,
+
+ AssemblyDetailedInformationInActivationContxt = 3,
+ FileInformationInAssemblyOfAssemblyInActivationContxt = 4
+} ACTIVATION_CONTEXT_INFO_CLASS;
+
+#define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1
+#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2
+#define ACTIVATION_CONTEXT_PATH_TYPE_URL 3
+#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4
+
+#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
+#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
+#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
+#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
+#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
+#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
+#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
+#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
+#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
+
+typedef enum _JOBOBJECTINFOCLASS
+{
+ JobObjectBasicAccountingInformation = 1,
+ JobObjectBasicLimitInformation,
+ JobObjectBasicProcessIdList,
+ JobObjectBasicUIRestrictions,
+ JobObjectSecurityLimitInformation,
+ JobObjectEndOfJobTimeInformation,
+ JobObjectAssociateCompletionPortInformation,
+ JobObjectBasicAndIoAccountingInformation,
+ JobObjectExtendedLimitInformation,
+ JobObjectJobSetInformation,
+ MaxJobObjectInfoClass
+} JOBOBJECTINFOCLASS;
+
+typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
+{
+ RelationProcessorCore = 0,
+ RelationNumaNode = 1,
+ RelationCache = 2,
+ RelationProcessorPackage = 3,
+ RelationGroup = 4,
+ RelationAll = 0xffff
+} LOGICAL_PROCESSOR_RELATIONSHIP;
+
+typedef enum _PROCESSOR_CACHE_TYPE
+{
+ CacheUnified,
+ CacheInstruction,
+ CacheData,
+ CacheTrace
+} PROCESSOR_CACHE_TYPE;
+
+typedef struct _PROCESSOR_GROUP_INFO
+{
+ BYTE MaximumProcessorCount;
+ BYTE ActiveProcessorCount;
+ BYTE Reserved[38];
+ KAFFINITY ActiveProcessorMask;
+} PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
+
+typedef struct _CACHE_DESCRIPTOR
+{
+ BYTE Level;
+ BYTE Associativity;
+ WORD LineSize;
+ DWORD Size;
+ PROCESSOR_CACHE_TYPE Type;
+} CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
+
+typedef struct _GROUP_AFFINITY
+{
+ KAFFINITY Mask;
+ WORD Group;
+ WORD Reserved[3];
+} GROUP_AFFINITY, *PGROUP_AFFINITY;
+
+typedef struct _PROCESSOR_NUMBER
+{
+ WORD Group;
+ BYTE Number;
+ BYTE Reserved;
+} PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
+
+typedef struct _PROCESSOR_RELATIONSHIP
+{
+ BYTE Flags;
+ BYTE Reserved[21];
+ WORD GroupCount;
+ GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
+} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
+
+
+typedef struct _NUMA_NODE_RELATIONSHIP
+{
+ DWORD NodeNumber;
+ BYTE Reserved[20];
+ GROUP_AFFINITY GroupMask;
+} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
+
+typedef struct _CACHE_RELATIONSHIP
+{
+ BYTE Level;
+ BYTE Associativity;
+ WORD LineSize;
+ PROCESSOR_CACHE_TYPE Type;
+ BYTE Reserved[20];
+ GROUP_AFFINITY GroupMask;
+} CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
+
+typedef struct _GROUP_RELATIONSHIP
+{
+ WORD MaximumGroupCount;
+ WORD ActiveGroupCount;
+ BYTE Reserved[20];
+ PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
+} GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
+{
+ ULONG_PTR ProcessorMask;
+ LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+ union
+ {
+ struct
+ {
+ BYTE Flags;
+ } ProcessorCore;
+ struct
+ {
+ DWORD NodeNumber;
+ } NumaNode;
+ CACHE_DESCRIPTOR Cache;
+ ULONGLONG Reserved[2];
+ } DUMMYUNIONNAME;
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
+
+typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
+{
+ LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
+ DWORD Size;
+ union
+ {
+ PROCESSOR_RELATIONSHIP Processor;
+ NUMA_NODE_RELATIONSHIP NumaNode;
+ CACHE_RELATIONSHIP Cache;
+ GROUP_RELATIONSHIP Group;
+ } DUMMYUNIONNAME;
+} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
+
+NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo(DWORD,DWORD,DWORD,DWORD,PDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINNT_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
new file mode 100644
index 00000000..4e3f8d35
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winnt.rh
@@ -0,0 +1,459 @@
+/*
+ * Win32 definitions for Windows NT
+ *
+ * Copyright 1996 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+
+/* These are only defined for Winelib, i.e. _not_ defined for
+ * the emulator. The reason is they depend on the UNICODE
+ * macro which only exists in the user's code.
+ */
+#ifndef WINE_NO_UNICODE_MACROS
+# ifdef UNICODE
+# define __TEXT(string) L##string
+# else
+# define __TEXT(string) string
+# endif
+# define TEXT(string) __TEXT(string)
+#endif
+
+
+/* Language definitions */
+#define LANG_NEUTRAL 0x00
+#define LANG_INVARIANT 0x7f
+
+#define LANG_AFRIKAANS 0x36
+#define LANG_ALBANIAN 0x1c
+#define LANG_ALSATIAN 0x84
+#define LANG_AMHARIC 0x5e
+#define LANG_ARABIC 0x01
+#define LANG_ARMENIAN 0x2b
+#define LANG_ASSAMESE 0x4d
+#define LANG_AZERI 0x2c
+#define LANG_BASHKIR 0x6d
+#define LANG_BASQUE 0x2d
+#define LANG_BELARUSIAN 0x23
+#define LANG_BENGALI 0x45
+#define LANG_BOSNIAN 0x1a
+#define LANG_BOSNIAN_NEUTRAL 0x781a
+#define LANG_BRETON 0x7e
+#define LANG_BULGARIAN 0x02
+#define LANG_CATALAN 0x03
+#define LANG_CHINESE 0x04
+#define LANG_CHINESE_SIMPLIFIED 0x0004
+#define LANG_CHINESE_TRADITIONAL 0x7c04
+#define LANG_CORSICAN 0x83
+#define LANG_CROATIAN 0x1a
+#define LANG_CZECH 0x05
+#define LANG_DANISH 0x06
+#define LANG_DARI 0x8c
+#define LANG_DIVEHI 0x65
+#define LANG_DUTCH 0x13
+#define LANG_ENGLISH 0x09
+#define LANG_ESTONIAN 0x25
+#define LANG_FAEROESE 0x38
+#define LANG_FARSI LANG_PERSIAN
+#define LANG_FILIPINO 0x64
+#define LANG_FINNISH 0x0b
+#define LANG_FRENCH 0x0c
+#define LANG_FRISIAN 0x62
+#define LANG_GALICIAN 0x56
+#define LANG_GEORGIAN 0x37
+#define LANG_GERMAN 0x07
+#define LANG_GREEK 0x08
+#define LANG_GREENLANDIC 0x6f
+#define LANG_GUJARATI 0x47
+#define LANG_HAUSA 0x68
+#define LANG_HEBREW 0x0d
+#define LANG_HINDI 0x39
+#define LANG_HUNGARIAN 0x0e
+#define LANG_ICELANDIC 0x0f
+#define LANG_IGBO 0x70
+#define LANG_INDONESIAN 0x21
+#define LANG_INUKTITUT 0x5d
+#define LANG_IRISH 0x3c
+#define LANG_ITALIAN 0x10
+#define LANG_JAPANESE 0x11
+#define LANG_KANNADA 0x4b
+#define LANG_KASHMIRI 0x60
+#define LANG_KAZAK 0x3f
+#define LANG_KHMER 0x53
+#define LANG_KICHE 0x86
+#define LANG_KINYARWANDA 0x87
+#define LANG_KONKANI 0x57
+#define LANG_KOREAN 0x12
+#define LANG_KYRGYZ 0x40
+#define LANG_LAO 0x54
+#define LANG_LATVIAN 0x26
+#define LANG_LITHUANIAN 0x27
+#define LANG_LOWER_SORBIAN 0x2e
+#define LANG_LUXEMBOURGISH 0x6e
+#define LANG_MACEDONIAN 0x2f
+#define LANG_MALAY 0x3e
+#define LANG_MALAYALAM 0x4c
+#define LANG_MALTESE 0x3a
+#define LANG_MANIPURI 0x58
+#define LANG_MAORI 0x81
+#define LANG_MAPUDUNGUN 0x7a
+#define LANG_MARATHI 0x4e
+#define LANG_MOHAWK 0x7c
+#define LANG_MONGOLIAN 0x50
+#define LANG_NEPALI 0x61
+#define LANG_NORWEGIAN 0x14
+#define LANG_OCCITAN 0x82
+#define LANG_ORIYA 0x48
+#define LANG_PASHTO 0x63
+#define LANG_PERSIAN 0x29
+#define LANG_POLISH 0x15
+#define LANG_PORTUGUESE 0x16
+#define LANG_PUNJABI 0x46
+#define LANG_QUECHUA 0x6b
+#define LANG_ROMANIAN 0x18
+#define LANG_ROMANSH 0x17
+#define LANG_RUSSIAN 0x19
+#define LANG_SAMI 0x3b
+#define LANG_SANSKRIT 0x4f
+#define LANG_SCOTTISH_GAELIC 0x91
+#define LANG_SERBIAN 0x1a
+#define LANG_SERBIAN_NEUTRAL 0x7c1a
+#define LANG_SINDHI 0x59
+#define LANG_SINHALESE 0x5b
+#define LANG_SLOVAK 0x1b
+#define LANG_SLOVENIAN 0x24
+#define LANG_SOTHO 0x6c
+#define LANG_SPANISH 0x0a
+#define LANG_SWAHILI 0x41
+#define LANG_SWEDISH 0x1d
+#define LANG_SYRIAC 0x5a
+#define LANG_TAJIK 0x28
+#define LANG_TAMAZIGHT 0x5f
+#define LANG_TAMIL 0x49
+#define LANG_TATAR 0x44
+#define LANG_TELUGU 0x4a
+#define LANG_THAI 0x1e
+#define LANG_TIBETAN 0x51
+#define LANG_TIGRIGNA 0x73
+#define LANG_TSWANA 0x32
+#define LANG_TURKISH 0x1f
+#define LANG_TURKMEN 0x42
+#define LANG_UIGHUR 0x80
+#define LANG_UKRAINIAN 0x22
+#define LANG_UPPER_SORBIAN 0x2e
+#define LANG_URDU 0x20
+#define LANG_UZBEK 0x43
+#define LANG_VIETNAMESE 0x2a
+#define LANG_WELSH 0x52
+#define LANG_WOLOF 0x88
+#define LANG_XHOSA 0x34
+#define LANG_YAKUT 0x85
+#define LANG_YI 0x78
+#define LANG_YORUBA 0x6a
+#define LANG_ZULU 0x35
+
+/* These are documented by the MSDN but are missing from the Windows header */
+#define LANG_MALAGASY 0x8d
+
+/* FIXME: these are not defined anywhere */
+#define LANG_SUTU 0x30
+#define LANG_TSONGA 0x31
+#define LANG_VENDA 0x33
+
+/* non standard; keep the number high enough (but < 0xff) */
+#define LANG_ESPERANTO 0x8f
+#define LANG_WALON 0x90
+#define LANG_CORNISH 0x92
+#define LANG_MANX_GAELIC 0x94
+
+/* Sublanguage definitions */
+#define SUBLANG_NEUTRAL 0x00 /* language neutral */
+#define SUBLANG_DEFAULT 0x01 /* user default */
+#define SUBLANG_SYS_DEFAULT 0x02 /* system default */
+#define SUBLANG_CUSTOM_DEFAULT 0x03
+#define SUBLANG_CUSTOM_UNSPECIFIED 0x04
+#define SUBLANG_UI_CUSTOM_DEFAULT 0x05
+
+#define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01
+#define SUBLANG_ALBANIAN_ALBANIA 0x01
+#define SUBLANG_ALSATIAN_FRANCE 0x01
+#define SUBLANG_AMHARIC_ETHIOPIA 0x01
+#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+#define SUBLANG_ARABIC_IRAQ 0x02
+#define SUBLANG_ARABIC_EGYPT 0x03
+#define SUBLANG_ARABIC_LIBYA 0x04
+#define SUBLANG_ARABIC_ALGERIA 0x05
+#define SUBLANG_ARABIC_MOROCCO 0x06
+#define SUBLANG_ARABIC_TUNISIA 0x07
+#define SUBLANG_ARABIC_OMAN 0x08
+#define SUBLANG_ARABIC_YEMEN 0x09
+#define SUBLANG_ARABIC_SYRIA 0x0a
+#define SUBLANG_ARABIC_JORDAN 0x0b
+#define SUBLANG_ARABIC_LEBANON 0x0c
+#define SUBLANG_ARABIC_KUWAIT 0x0d
+#define SUBLANG_ARABIC_UAE 0x0e
+#define SUBLANG_ARABIC_BAHRAIN 0x0f
+#define SUBLANG_ARABIC_QATAR 0x10
+#define SUBLANG_ARMENIAN_ARMENIA 0x01
+#define SUBLANG_ASSAMESE_INDIA 0x01
+#define SUBLANG_AZERI_LATIN 0x01
+#define SUBLANG_AZERI_CYRILLIC 0x02
+#define SUBLANG_BASHKIR_RUSSIA 0x01
+#define SUBLANG_BASQUE_BASQUE 0x01
+#define SUBLANG_BELARUSIAN_BELARUS 0x01
+#define SUBLANG_BENGALI_INDIA 0x01
+#define SUBLANG_BENGALI_BANGLADESH 0x02
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
+#define SUBLANG_BRETON_FRANCE 0x01
+#define SUBLANG_BULGARIAN_BULGARIA 0x01
+#define SUBLANG_CATALAN_CATALAN 0x01
+#define SUBLANG_CHINESE_TRADITIONAL 0x01
+#define SUBLANG_CHINESE_SIMPLIFIED 0x02
+#define SUBLANG_CHINESE_HONGKONG 0x03
+#define SUBLANG_CHINESE_SINGAPORE 0x04
+#define SUBLANG_CHINESE_MACAU 0x05
+#define SUBLANG_CORSICAN_FRANCE 0x01
+#define SUBLANG_CROATIAN_CROATIA 0x01
+#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
+#define SUBLANG_CZECH_CZECH_REPUBLIC 0x01
+#define SUBLANG_DANISH_DENMARK 0x01
+#define SUBLANG_DARI_AFGHANISTAN 0x01
+#define SUBLANG_DIVEHI_MALDIVES 0x01
+#define SUBLANG_DUTCH 0x01
+#define SUBLANG_DUTCH_BELGIAN 0x02
+#define SUBLANG_ENGLISH_US 0x01
+#define SUBLANG_ENGLISH_UK 0x02
+#define SUBLANG_ENGLISH_AUS 0x03
+#define SUBLANG_ENGLISH_CAN 0x04
+#define SUBLANG_ENGLISH_NZ 0x05
+#define SUBLANG_ENGLISH_EIRE 0x06
+#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+#define SUBLANG_ENGLISH_JAMAICA 0x08
+#define SUBLANG_ENGLISH_CARIBBEAN 0x09
+#define SUBLANG_ENGLISH_BELIZE 0x0a
+#define SUBLANG_ENGLISH_TRINIDAD 0x0b
+#define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+#define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+#define SUBLANG_ENGLISH_INDIA 0x10
+#define SUBLANG_ENGLISH_MALAYSIA 0x11
+#define SUBLANG_ENGLISH_SINGAPORE 0x12
+#define SUBLANG_ESTONIAN_ESTONIA 0x01
+#define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01
+#define SUBLANG_FILIPINO_PHILIPPINES 0x01
+#define SUBLANG_FINNISH_FINLAND 0x01
+#define SUBLANG_FRENCH 0x01
+#define SUBLANG_FRENCH_BELGIAN 0x02
+#define SUBLANG_FRENCH_CANADIAN 0x03
+#define SUBLANG_FRENCH_SWISS 0x04
+#define SUBLANG_FRENCH_LUXEMBOURG 0x05
+#define SUBLANG_FRENCH_MONACO 0x06
+#define SUBLANG_FRISIAN_NETHERLANDS 0x01
+#define SUBLANG_GALICIAN_GALICIAN 0x01
+#define SUBLANG_GEORGIAN_GEORGIA 0x01
+#define SUBLANG_GERMAN 0x01
+#define SUBLANG_GERMAN_SWISS 0x02
+#define SUBLANG_GERMAN_AUSTRIAN 0x03
+#define SUBLANG_GERMAN_LUXEMBOURG 0x04
+#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+#define SUBLANG_GREEK_GREECE 0x01
+#define SUBLANG_GREENLANDIC_GREENLAND 0x01
+#define SUBLANG_GUJARATI_INDIA 0x01
+#define SUBLANG_HAUSA_NIGERIA_LATIN 0x01
+#define SUBLANG_HEBREW_ISRAEL 0x01
+#define SUBLANG_HINDI_INDIA 0x01
+#define SUBLANG_HUNGARIAN_HUNGARY 0x01
+#define SUBLANG_ICELANDIC_ICELAND 0x01
+#define SUBLANG_IGBO_NIGERIA 0x01
+#define SUBLANG_INDONESIAN_INDONESIA 0x01
+#define SUBLANG_INUKTITUT_CANADA 0x01
+#define SUBLANG_INUKTITUT_CANADA_LATIN 0x02
+#define SUBLANG_IRISH_IRELAND 0x02
+#define SUBLANG_ITALIAN 0x01
+#define SUBLANG_ITALIAN_SWISS 0x02
+#define SUBLANG_JAPANESE_JAPAN 0x01
+#define SUBLANG_KANNADA_INDIA 0x01
+#define SUBLANG_KASHMIRI_SASIA 0x02
+#define SUBLANG_KASHMIRI_INDIA 0x02
+#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
+#define SUBLANG_KHMER_CAMBODIA 0x01
+#define SUBLANG_KICHE_GUATEMALA 0x01
+#define SUBLANG_KINYARWANDA_RWANDA 0X01
+#define SUBLANG_KONKANI_INDIA 0x01
+#define SUBLANG_KOREAN 0x01
+#define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01
+#define SUBLANG_LAO_LAO 0x01
+#define SUBLANG_LATVIAN_LATVIA 0x01
+#define SUBLANG_LITHUANIAN 0x01
+#define SUBLANG_LOWER_SORBIAN_GERMANY 0x02
+#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01
+#define SUBLANG_MACEDONIAN_MACEDONIA 0x01
+#define SUBLANG_MALAY_MALAYSIA 0x01
+#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+#define SUBLANG_MALAYALAM_INDIA 0x01
+#define SUBLANG_MALTESE_MALTA 0x01
+#define SUBLANG_MAORI_NEW_ZEALAND 0x01
+#define SUBLANG_MAPUDUNGUN_CHILE 0x01
+#define SUBLANG_MARATHI_INDIA 0x01
+#define SUBLANG_MOHAWK_MOHAWK 0x01
+#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
+#define SUBLANG_MONGOLIAN_PRC 0x02
+#define SUBLANG_NEPALI_INDIA 0x02
+#define SUBLANG_NEPALI_NEPAL 0x01
+#define SUBLANG_NORWEGIAN_BOKMAL 0x01
+#define SUBLANG_NORWEGIAN_NYNORSK 0x02
+#define SUBLANG_OCCITAN_FRANCE 0x01
+#define SUBLANG_ORIYA_INDIA 0x01
+#define SUBLANG_PASHTO_AFGHANISTAN 0x01
+#define SUBLANG_PERSIAN_IRAN 0x01
+#define SUBLANG_POLISH_POLAND 0x01
+#define SUBLANG_PORTUGUESE 0x02
+#define SUBLANG_PORTUGUESE_BRAZILIAN 0x01
+#define SUBLANG_PUNJABI_INDIA 0x01
+#define SUBLANG_QUECHUA_BOLIVIA 0x01
+#define SUBLANG_QUECHUA_ECUADOR 0x02
+#define SUBLANG_QUECHUA_PERU 0x03
+#define SUBLANG_ROMANIAN_ROMANIA 0x01
+#define SUBLANG_ROMANSH_SWITZERLAND 0x01
+#define SUBLANG_RUSSIAN_RUSSIA 0x01
+#define SUBLANG_SAMI_NORTHERN_NORWAY 0x01
+#define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02
+#define SUBLANG_SAMI_NORTHERN_FINLAND 0x03
+#define SUBLANG_SAMI_LULE_NORWAY 0x04
+#define SUBLANG_SAMI_LULE_SWEDEN 0x05
+#define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06
+#define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07
+#define SUBLANG_SAMI_SKOLT_FINLAND 0x08
+#define SUBLANG_SAMI_INARI_FINLAND 0x09
+#define SUBLANG_SANSKRIT_INDIA 0x01
+#define SUBLANG_SCOTTISH_GAELIC 0x01
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
+#define SUBLANG_SERBIAN_CROATIA 0x01
+#define SUBLANG_SERBIAN_LATIN 0x02
+#define SUBLANG_SERBIAN_CYRILLIC 0x03
+#define SUBLANG_SERBIAN_SERBIA_LATIN 0x09
+#define SUBLANG_SERBIAN_SERBIA_CYRILLIC 0x0a
+#define SUBLANG_SERBIAN_MONTENEGRO_LATIN 0x0b
+#define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0x0c
+#define SUBLANG_SINDHI_INDIA 0x01
+#define SUBLANG_SINDHI_AFGHANISTAN 0x02
+#define SUBLANG_SINDHI_PAKISTAN SUBLANG_SINDHI_AFGHANISTAN
+#define SUBLANG_SINHALESE_SRI_LANKA 0x01
+#define SUBLANG_SLOVAK_SLOVAKIA 0x01
+#define SUBLANG_SLOVENIAN_SLOVENIA 0x01
+#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
+#define SUBLANG_SPANISH 0x01
+#define SUBLANG_SPANISH_MEXICAN 0x02
+#define SUBLANG_SPANISH_MODERN 0x03
+#define SUBLANG_SPANISH_GUATEMALA 0x04
+#define SUBLANG_SPANISH_COSTA_RICA 0x05
+#define SUBLANG_SPANISH_PANAMA 0x06
+#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+#define SUBLANG_SPANISH_VENEZUELA 0x08
+#define SUBLANG_SPANISH_COLOMBIA 0x09
+#define SUBLANG_SPANISH_PERU 0x0a
+#define SUBLANG_SPANISH_ARGENTINA 0x0b
+#define SUBLANG_SPANISH_ECUADOR 0x0c
+#define SUBLANG_SPANISH_CHILE 0x0d
+#define SUBLANG_SPANISH_URUGUAY 0x0e
+#define SUBLANG_SPANISH_PARAGUAY 0x0f
+#define SUBLANG_SPANISH_BOLIVIA 0x10
+#define SUBLANG_SPANISH_EL_SALVADOR 0x11
+#define SUBLANG_SPANISH_HONDURAS 0x12
+#define SUBLANG_SPANISH_NICARAGUA 0x13
+#define SUBLANG_SPANISH_PUERTO_RICO 0x14
+#define SUBLANG_SPANISH_US 0x15
+#define SUBLANG_SWAHILI_KENYA 0x01
+#define SUBLANG_SWEDISH 0x01
+#define SUBLANG_SWEDISH_FINLAND 0x02
+#define SUBLANG_SYRIAC_SYRIA 0x01
+#define SUBLANG_TAJIK_TAJIKISTAN 0x01
+#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
+#define SUBLANG_TAMIL_INDIA 0x01
+#define SUBLANG_TATAR_RUSSIA 0x01
+#define SUBLANG_TELUGU_INDIA 0x01
+#define SUBLANG_THAI_THAILAND 0x01
+#define SUBLANG_TIBETAN_PRC 0x01
+#define SUBLANG_TIBETAN_BHUTAN 0x02
+#define SUBLANG_TIGRIGNA_ERITREA 0x02
+#define SUBLANG_TSWANA_SOUTH_AFRICA 0x01
+#define SUBLANG_TURKISH_TURKEY 0x01
+#define SUBLANG_TURKMEN_TURKMENISTAN 0x01
+#define SUBLANG_UIGHUR_PRC 0x01
+#define SUBLANG_UKRAINIAN_UKRAINE 0x01
+#define SUBLANG_UPPER_SORBIAN_GERMANY 0x01
+#define SUBLANG_URDU_PAKISTAN 0x01
+#define SUBLANG_URDU_INDIA 0x02
+#define SUBLANG_UZBEK_LATIN 0x01
+#define SUBLANG_UZBEK_CYRILLIC 0x02
+#define SUBLANG_VIETNAMESE_VIETNAM 0x01
+#define SUBLANG_WELSH_UNITED_KINGDOM 0x01
+#define SUBLANG_WOLOF_SENEGAL 0x01
+#define SUBLANG_XHOSA_SOUTH_AFRICA 0x01
+#define SUBLANG_YAKUT_RUSSIA 0x01
+#define SUBLANG_YI_PRC 0x01
+#define SUBLANG_YORUBA_NIGERIA 0x01
+#define SUBLANG_ZULU_SOUTH_AFRICA 0x01
+
+/* These are documented by the MSDN but are missing from the Windows header */
+#define SUBLANG_ENGLISH_IRELAND SUBLANG_ENGLISH_EIRE
+#define SUBLANG_HAUSA_NIGERIA SUBLANG_HAUSA_NIGERIA_LATIN
+#define SUBLANG_LAO_LAO_PDR SUBLANG_LAO_LAO
+#define SUBLANG_PORTUGUESE_PORTUGAL SUBLANG_PORTUGUESE
+#define SUBLANG_SWAHILI SUBLANG_SWAHILI_KENYA
+#define SUBLANG_SWEDISH_SWEDEN SUBLANG_SWEDISH
+#define SUBLANG_SYRIAC SUBLANG_SYRIAC_SYRIA
+
+/* FIXME: these are not defined anywhere */
+#define SUBLANG_DUTCH_SURINAM 0x03
+#define SUBLANG_ROMANIAN_MOLDAVIA 0x02
+#define SUBLANG_RUSSIAN_MOLDAVIA 0x02
+#define SUBLANG_LITHUANIAN_CLASSIC 0x02
+#define SUBLANG_MANX_GAELIC 0x01
+
+
+/*
+ * Sort definitions
+ */
+
+#define SORT_DEFAULT 0x0
+#define SORT_INVARIANT_MATH 0x1
+#define SORT_JAPANESE_XJIS 0x0
+#define SORT_JAPANESE_UNICODE 0x1
+#define SORT_JAPANESE_RADICALSTROKE 0x4
+#define SORT_CHINESE_BIG5 0x0
+#define SORT_CHINESE_PRCP 0x0
+#define SORT_CHINESE_UNICODE 0x1
+#define SORT_CHINESE_PRC 0x2
+#define SORT_CHINESE_BOPOMOFO 0x3
+#define SORT_CHINESE_RADICALSTROKE 0x4
+#define SORT_KOREAN_KSC 0x0
+#define SORT_KOREAN_UNICODE 0x1
+#define SORT_GERMAN_PHONE_BOOK 0x1
+#define SORT_HUNGARIAN_DEFAULT 0x0
+#define SORT_HUNGARIAN_TECHNICAL 0x1
+#define SORT_GEORGIAN_TRADITIONAL 0x0
+#define SORT_GEORGIAN_MODERN 0x1
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h
new file mode 100644
index 00000000..e09f97b4
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winperf.h
@@ -0,0 +1,79 @@
+/*
+ * Performance Monitor
+ *
+ * Copyright 2007 Hans Leidekker
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINPERF_
+#define _WINPERF_
+
+#define PERF_SIZE_DWORD 0x00000000
+#define PERF_SIZE_LARGE 0x00000100
+#define PERF_SIZE_ZERO 0x00000200
+#define PERF_SIZE_VARIABLE_LEN 0x00000300
+
+#define PERF_TYPE_NUMBER 0x00000000
+#define PERF_TYPE_COUNTER 0x00000400
+#define PERF_TYPE_TEXT 0x00000800
+#define PERF_TYPE_ZERO 0x00000C00
+
+#define PERF_NUMBER_HEX 0x00000000
+#define PERF_NUMBER_DECIMAL 0x00010000
+#define PERF_NUMBER_DEC_1000 0x00020000
+
+#define PERF_COUNTER_VALUE 0x00000000
+#define PERF_COUNTER_RATE 0x00010000
+#define PERF_COUNTER_FRACTION 0x00020000
+#define PERF_COUNTER_BASE 0x00030000
+#define PERF_COUNTER_ELAPSED 0x00040000
+#define PERF_COUNTER_QUEUELEN 0x00050000
+#define PERF_COUNTER_HISTOGRAM 0x00060000
+#define PERF_COUNTER_PRECISION 0x00070000
+
+#define PERF_TEXT_UNICODE 0x00000000
+#define PERF_TEXT_ASCII 0x00010000
+
+#define PERF_TIMER_TICK 0x00000000
+#define PERF_TIMER_100NS 0x00100000
+#define PERF_OBJECT_TIMER 0x00200000
+
+#define PERF_DELTA_COUNTER 0x00400000
+#define PERF_DELTA_BASE 0x00800000
+#define PERF_INVERSE_COUNTER 0x01000000
+#define PERF_MULTI_COUNTER 0x02000000
+
+#define PERF_DISPLAY_NO_SUFFIX 0x00000000
+#define PERF_DISPLAY_PER_SEC 0x10000000
+#define PERF_DISPLAY_PERCENT 0x20000000
+#define PERF_DISPLAY_SECONDS 0x30000000
+#define PERF_DISPLAY_NOSHOW 0x40000000
+
+#define PERF_DETAIL_NOVICE 100
+#define PERF_DETAIL_ADVANCED 200
+#define PERF_DETAIL_EXPERT 300
+#define PERF_DETAIL_WIZARD 400
+
+#endif /* _WINPERF_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h
new file mode 100644
index 00000000..f4ed39a2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winreg.h
@@ -0,0 +1,195 @@
+/*
+ * Win32 registry defines (see also winnt.h)
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINREG_H
+#define __WINE_WINREG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#define HKEY_CLASSES_ROOT ((HKEY)(LONG_PTR)(LONG)0x80000000)
+#define HKEY_CURRENT_USER ((HKEY)(LONG_PTR)(LONG)0x80000001)
+#define HKEY_LOCAL_MACHINE ((HKEY)(LONG_PTR)(LONG)0x80000002)
+#define HKEY_USERS ((HKEY)(LONG_PTR)(LONG)0x80000003)
+#define HKEY_PERFORMANCE_DATA ((HKEY)(LONG_PTR)(LONG)0x80000004)
+#define HKEY_CURRENT_CONFIG ((HKEY)(LONG_PTR)(LONG)0x80000005)
+#define HKEY_DYN_DATA ((HKEY)(LONG_PTR)(LONG)0x80000006)
+
+/*
+ * registry provider structs
+ */
+typedef struct value_entA
+{ LPSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD_PTR ve_valueptr;
+ DWORD ve_type;
+} VALENTA, *PVALENTA;
+
+typedef struct value_entW {
+ LPWSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD_PTR ve_valueptr;
+ DWORD ve_type;
+} VALENTW, *PVALENTW;
+
+typedef ACCESS_MASK REGSAM;
+typedef LONG LSTATUS;
+
+/*
+ * InitiateSystemShutdown() reasons
+ */
+#include <reason.h>
+
+#define REASON_OTHER (SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER)
+#define REASON_UNKNOWN SHTDN_REASON_UNKNOWN
+#define REASON_LEGACY_API SHTDN_REASON_LEGACY_API
+#define REASON_PLANNED_FLAG SHTDN_REASON_FLAG_PLANNED
+
+#define MAX_SHUTDOWN_TIMEOUT (10*365*24*60*60)
+
+/*
+ * RegGetValue() restrictions
+ */
+
+#define RRF_RT_REG_NONE (1 << 0)
+#define RRF_RT_REG_SZ (1 << 1)
+#define RRF_RT_REG_EXPAND_SZ (1 << 2)
+#define RRF_RT_REG_BINARY (1 << 3)
+#define RRF_RT_REG_DWORD (1 << 4)
+#define RRF_RT_REG_MULTI_SZ (1 << 5)
+#define RRF_RT_REG_QWORD (1 << 6)
+#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
+#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
+#define RRF_RT_ANY 0xffff
+#define RRF_NOEXPAND (1 << 28)
+#define RRF_ZEROONFAILURE (1 << 29)
+
+WINADVAPI BOOL WINAPI AbortSystemShutdownA(LPSTR);
+WINADVAPI BOOL WINAPI AbortSystemShutdownW(LPWSTR);
+#define AbortSystemShutdown WINELIB_NAME_AW(AbortSystemShutdown)
+WINADVAPI BOOL WINAPI InitiateSystemShutdownA(LPSTR,LPSTR,DWORD,BOOL,BOOL);
+WINADVAPI BOOL WINAPI InitiateSystemShutdownW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL);
+#define InitiateSystemShutdown WINELIB_NAME_AW(InitiateSystemShutdown);
+WINADVAPI BOOL WINAPI InitiateSystemShutdownExA(LPSTR,LPSTR,DWORD,BOOL,BOOL,DWORD);
+WINADVAPI BOOL WINAPI InitiateSystemShutdownExW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL,DWORD);
+#define InitiateSystemShutdownEx WINELIB_NAME_AW(InitiateSystemShutdownEx);
+WINADVAPI LSTATUS WINAPI RegCloseKey(HKEY);
+WINADVAPI LSTATUS WINAPI RegConnectRegistryA(LPCSTR,HKEY,PHKEY);
+WINADVAPI LSTATUS WINAPI RegConnectRegistryW(LPCWSTR,HKEY,PHKEY);
+#define RegConnectRegistry WINELIB_NAME_AW(RegConnectRegistry)
+WINADVAPI LSTATUS WINAPI RegCreateKeyA(HKEY,LPCSTR,PHKEY);
+WINADVAPI LSTATUS WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY);
+#define RegCreateKey WINELIB_NAME_AW(RegCreateKey)
+WINADVAPI LSTATUS WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD);
+WINADVAPI LSTATUS WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,LPDWORD);
+#define RegCreateKeyEx WINELIB_NAME_AW(RegCreateKeyEx)
+WINADVAPI LSTATUS WINAPI RegDeleteKeyA(HKEY,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegDeleteKeyW(HKEY,LPCWSTR);
+#define RegDeleteKey WINELIB_NAME_AW(RegDeleteKey)
+WINADVAPI LSTATUS WINAPI RegDeleteKeyExA(HKEY,LPCSTR,REGSAM,DWORD);
+WINADVAPI LSTATUS WINAPI RegDeleteKeyExW(HKEY,LPCWSTR,REGSAM,DWORD);
+#define RegDeleteKeyEx WINELIB_NAME_AW(RegDeleteKeyEx)
+WINADVAPI LSTATUS WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR);
+#define RegDeleteKeyValue WINELIB_NAME_AW(RegDeleteKeyValue)
+WINADVAPI LSTATUS WINAPI RegDeleteTreeA(HKEY,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegDeleteTreeW(HKEY,LPCWSTR);
+#define RegDeleteTree WINELIB_NAME_AW(RegDeleteTree)
+WINADVAPI LSTATUS WINAPI RegDeleteValueA(HKEY,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegDeleteValueW(HKEY,LPCWSTR);
+#define RegDeleteValue WINELIB_NAME_AW(RegDeleteValue)
+WINADVAPI LSTATUS WINAPI RegDisablePredefinedCache(void);
+WINADVAPI LSTATUS WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD);
+WINADVAPI LSTATUS WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD);
+#define RegEnumKey WINELIB_NAME_AW(RegEnumKey)
+WINADVAPI LSTATUS WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPSTR,LPDWORD,LPFILETIME);
+WINADVAPI LSTATUS WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPWSTR,LPDWORD,LPFILETIME);
+#define RegEnumKeyEx WINELIB_NAME_AW(RegEnumKeyEx)
+WINADVAPI LSTATUS WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+WINADVAPI LSTATUS WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+#define RegEnumValue WINELIB_NAME_AW(RegEnumValue)
+WINADVAPI LSTATUS WINAPI RegFlushKey(HKEY);
+WINADVAPI LSTATUS WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,LPDWORD);
+WINADVAPI LSTATUS WINAPI RegGetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD);
+WINADVAPI LSTATUS WINAPI RegGetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPDWORD,PVOID,LPDWORD);
+#define RegGetValue WINELIB_NAME_AW(RegGetValue)
+WINADVAPI LSTATUS WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR);
+#define RegLoadKey WINELIB_NAME_AW(RegLoadKey)
+WINADVAPI LSTATUS WINAPI RegLoadMUIStringA(HKEY,LPCSTR,LPSTR,DWORD,LPDWORD,DWORD,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegLoadMUIStringW(HKEY,LPCWSTR,LPWSTR,DWORD,LPDWORD,DWORD,LPCWSTR);
+#define RegLoadMUIString WINELIB_NAME_AW(RegLoadMUIString)
+WINADVAPI LSTATUS WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL);
+WINADVAPI LSTATUS WINAPI RegOpenCurrentUser(REGSAM,PHKEY);
+WINADVAPI LSTATUS WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY);
+WINADVAPI LSTATUS WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY);
+#define RegOpenKey WINELIB_NAME_AW(RegOpenKey)
+WINADVAPI LSTATUS WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY);
+WINADVAPI LSTATUS WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY);
+#define RegOpenKeyEx WINELIB_NAME_AW(RegOpenKeyEx)
+WINADVAPI LSTATUS WINAPI RegOpenUserClassesRoot(HANDLE,DWORD,REGSAM,PHKEY);
+WINADVAPI LSTATUS WINAPI RegOverridePredefKey(HKEY,HKEY);
+WINADVAPI LSTATUS WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);
+WINADVAPI LSTATUS WINAPI RegQueryInfoKeyA(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);
+#define RegQueryInfoKey WINELIB_NAME_AW(RegQueryInfoKey)
+WINADVAPI LSTATUS WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD);
+WINADVAPI LSTATUS WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD);
+#define RegQueryMultipleValues WINELIB_NAME_AW(RegQueryMultipleValues)
+WINADVAPI LSTATUS WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,LPLONG);
+WINADVAPI LSTATUS WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,LPLONG);
+#define RegQueryValue WINELIB_NAME_AW(RegQueryValue)
+WINADVAPI LSTATUS WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+WINADVAPI LSTATUS WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+#define RegQueryValueEx WINELIB_NAME_AW(RegQueryValueEx)
+WINADVAPI LSTATUS WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR);
+#define RegReplaceKey WINELIB_NAME_AW(RegReplaceKey)
+WINADVAPI LSTATUS WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD);
+WINADVAPI LSTATUS WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD);
+#define RegRestoreKey WINELIB_NAME_AW(RegRestoreKey)
+WINADVAPI LSTATUS WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES);
+WINADVAPI LSTATUS WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES);
+#define RegSaveKey WINELIB_NAME_AW(RegSaveKey)
+WINADVAPI LSTATUS WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI LSTATUS WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD);
+WINADVAPI LSTATUS WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD);
+#define RegSetValue WINELIB_NAME_AW(RegSetValue)
+WINADVAPI LSTATUS WINAPI RegSetValueExA(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD);
+WINADVAPI LSTATUS WINAPI RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE*,DWORD);
+#define RegSetValueEx WINELIB_NAME_AW(RegSetValueEx)
+WINADVAPI LSTATUS WINAPI RegUnLoadKeyA(HKEY,LPCSTR);
+WINADVAPI LSTATUS WINAPI RegUnLoadKeyW(HKEY,LPCWSTR);
+#define RegUnLoadKey WINELIB_NAME_AW(RegUnLoadKey)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINREG_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h
new file mode 100644
index 00000000..a702f4eb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winresrc.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2002 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINRESRC_
+#define _WINRESRC_
+
+#ifndef WINVER
+#define WINVER 0x0500
+#endif
+
+#ifndef _WIN32_IE
+#define _WIN32_IE 0x0501
+#endif
+
+#ifndef _WIN32_WINDOWS
+#define _WIN32_WINDOWS 0x0410
+#endif
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
+#include <winuser.rh>
+#include <commctrl.rh>
+#include <dde.rh>
+#include <winnt.rh>
+#include <dlgs.h>
+#include <winver.h>
+
+#endif /* _WINRESRC_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h
new file mode 100644
index 00000000..9d8d53d3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsafer.h
@@ -0,0 +1,89 @@
+/*
+ * Winsafer definitions
+ *
+ * Copyright (C) 2009 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSAFER_H
+#define __WINE_WINSAFER_H
+
+#include <guiddef.h>
+#include <wincrypt.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DECLARE_HANDLE(SAFER_LEVEL_HANDLE);
+
+#define SAFER_SCOPEID_MACHINE 1
+#define SAFER_SCOPEID_USER 2
+
+#define SAFER_LEVELID_DISALLOWED 0x00000
+#define SAFER_LEVELID_UNTRUSTED 0x01000
+#define SAFER_LEVELID_CONSTRAINED 0x10000
+#define SAFER_LEVELID_NORMALUSER 0x20000
+#define SAFER_LEVELID_FULLYTRUSTED 0x40000
+
+#define SAFER_LEVEL_OPEN 1
+
+WINADVAPI BOOL WINAPI SaferCreateLevel(DWORD,DWORD,DWORD,SAFER_LEVEL_HANDLE*,LPVOID);
+
+typedef enum _SAFER_POLICY_INFO_CLASS {
+ SaferPolicyLevelList = 1,
+ SaferPolicyEnableTransparentEnforcement,
+ SaferPolicyDefaultLevel,
+ SaferPolicyEvaluateUserScope,
+ SaferPolicyScopeFlags
+} SAFER_POLICY_INFO_CLASS;
+
+typedef enum _SAFER_OBJECT_INFO_CLASS {
+ SaferObjectLevelId = 1,
+ SaferObjectScopeId,
+ SaferObjectFriendlyName,
+ SaferObjectDescription,
+ SaferObjectBuiltin,
+ SaferObjectDisallowed,
+ SaferObjectDisableMaxPrivilege,
+ SaferObjectInvertDeletedPrivileges,
+ SaferObjectDeletedPrivileges,
+ SaferObjectDefaultOwner,
+ SaferObjectSidsToDisable,
+ SaferObjectRestrictedSidsInverted,
+ SaferObjectRestrictedSidsAdded,
+ SaferObjectAllIdentificationGuids,
+ SaferObjectSingleIdentification,
+ SaferObjectExtendedError
+} SAFER_OBJECT_INFO_CLASS;
+
+WINADVAPI BOOL WINAPI SaferGetPolicyInformation(DWORD,SAFER_POLICY_INFO_CLASS,DWORD,PVOID,PDWORD,LPVOID);
+WINADVAPI BOOL WINAPI SaferSetLevelInformation(SAFER_LEVEL_HANDLE,SAFER_OBJECT_INFO_CLASS,LPVOID,DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINSAFER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h
new file mode 100644
index 00000000..49a9ca59
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winscard.h
@@ -0,0 +1,164 @@
+/*
+ * Winscard definitions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSCARD_H
+#define __WINE_WINSCARD_H
+
+#include <wtypes.h>
+#include <winioctl.h>
+#include <winsmcrd.h>
+#include <scarderr.h>
+
+/* Valid scopes for contexts */
+#define SCARD_SCOPE_USER 0
+#define SCARD_SCOPE_TERMINAL 1
+#define SCARD_SCOPE_SYSTEM 2
+
+#ifndef _LPCBYTE_DEFINED
+#define _LPCBYTE_DEFINED
+typedef const BYTE *LPCBYTE;
+#endif
+
+typedef ULONG_PTR SCARDCONTEXT, *PSCARDCONTEXT, *LPSCARDCONTEXT;
+typedef ULONG_PTR SCARDHANDLE, *PSCARDHANDLE, *LPSCARDHANDLE;
+
+typedef struct _SCARD_ATRMASK
+{
+ DWORD cbAtr;
+ BYTE rgbAtr[36];
+ BYTE rgbMask[36];
+} SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
+
+typedef struct
+{
+ LPCSTR szReader;
+ LPVOID pvUserData;
+ DWORD dwCurrentState;
+ DWORD dwEventState;
+ DWORD cbAtr;
+ BYTE rgbAtr[36];
+} SCARD_READERSTATEA, *PSCARD_READERSTATEA, *LPSCARD_READERSTATEA;
+typedef struct
+{
+ LPCWSTR szReader;
+ LPVOID pvUserData;
+ DWORD dwCurrentState;
+ DWORD dwEventState;
+ DWORD cbAtr;
+ BYTE rgbAtr[36];
+} SCARD_READERSTATEW, *PSCARD_READERSTATEW, *LPSCARD_READERSTATEW;
+DECL_WINELIB_TYPE_AW(SCARD_READERSTATE)
+DECL_WINELIB_TYPE_AW(PSCARD_READERSTATE)
+DECL_WINELIB_TYPE_AW(LPSCARD_READERSTATE)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE WINAPI SCardAccessStartedEvent(void);
+LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT,LPCSTR,LPCSTR);
+LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR);
+#define SCardAddReaderToGroup WINELIB_NAME_AW(SCardAddReaderToGroup)
+LONG WINAPI SCardBeginTransaction(SCARDHANDLE);
+LONG WINAPI SCardCancel(SCARDCONTEXT);
+LONG WINAPI SCardConnectA(SCARDCONTEXT,LPCSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD);
+LONG WINAPI SCardConnectW(SCARDCONTEXT,LPCWSTR,DWORD,DWORD,LPSCARDHANDLE,LPDWORD);
+#define SCardConnect WINELIB_NAME_AW(SCardConnect)
+LONG WINAPI SCardControl(SCARDHANDLE,DWORD,LPCVOID,DWORD,LPVOID,DWORD,LPDWORD);
+LONG WINAPI SCardDisconnect(SCARDHANDLE,DWORD);
+LONG WINAPI SCardEndTransaction(SCARDHANDLE,DWORD);
+LONG WINAPI SCardEstablishContext(DWORD,LPCVOID,LPCVOID,LPSCARDCONTEXT);
+LONG WINAPI SCardForgetCardTypeA(SCARDCONTEXT,LPCSTR);
+LONG WINAPI SCardForgetCardTypeW(SCARDCONTEXT,LPCWSTR);
+#define SCardForgetCardType WINELIB_NAME_AW(SCardForgetCardType)
+LONG WINAPI SCardForgetReaderA(SCARDCONTEXT,LPCSTR);
+LONG WINAPI SCardForgetReaderW(SCARDCONTEXT,LPCWSTR);
+#define SCardForgetReader WINELIB_NAME_AW(SCardForgetReader)
+LONG WINAPI SCardForgetReaderGroupA(SCARDCONTEXT,LPCSTR);
+LONG WINAPI SCardForgetReaderGroupW(SCARDCONTEXT,LPCWSTR);
+#define SCardForgetReaderGroup WINELIB_NAME_AW(SCardForgetReaderGroup)
+LONG WINAPI SCardFreeMemory(SCARDCONTEXT,LPCVOID);
+LONG WINAPI SCardGetAttrib(SCARDHANDLE,DWORD,LPBYTE,LPDWORD);
+LONG WINAPI SCardGetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPSTR,LPDWORD);
+LONG WINAPI SCardGetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPWSTR,LPDWORD);
+#define SCardGetCardTypeProviderName WINELIB_NAME_AW(SCardGetCardTypeProviderName)
+LONG WINAPI SCardGetProviderIdA(SCARDCONTEXT,LPCSTR,LPGUID);
+LONG WINAPI SCardGetProviderIdW(SCARDCONTEXT,LPCWSTR,LPGUID);
+#define SCardGetProviderId WINELIB_NAME_AW(SCardGetProviderId)
+LONG WINAPI SCardGetStatusChangeA(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEA,DWORD);
+LONG WINAPI SCardGetStatusChangeW(SCARDCONTEXT,DWORD,LPSCARD_READERSTATEW,DWORD);
+#define SCardGetStatusChange WINELIB_NAME_AW(SCardGetStatusChange)
+LONG WINAPI SCardIntroduceCardTypeA(SCARDCONTEXT,LPCSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD);
+LONG WINAPI SCardIntroduceCardTypeW(SCARDCONTEXT,LPCWSTR,LPCGUID,LPCGUID,DWORD,LPCBYTE,LPCBYTE,DWORD);
+#define SCardIntroduceCardType WINELIB_NAME_AW(SCardIntroduceCardType)
+LONG WINAPI SCardIntroduceReaderA(SCARDCONTEXT,LPCSTR,LPCSTR);
+LONG WINAPI SCardIntroduceReaderW(SCARDCONTEXT,LPCWSTR,LPCWSTR);
+#define SCardIntroduceReader WINELIB_NAME_AW(SCardIntroduceReader)
+LONG WINAPI SCardIntroduceReaderGroupA(SCARDCONTEXT,LPCSTR);
+LONG WINAPI SCardIntroduceReaderGroupW(SCARDCONTEXT,LPCWSTR);
+#define SCardIntroduceReaderGroup WINELIB_NAME_AW(SCardIntroduceReaderGroup)
+LONG WINAPI SCardIsValidContext(SCARDCONTEXT);
+LONG WINAPI SCardListCardsA(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPSTR,LPDWORD);
+LONG WINAPI SCardListCardsW(SCARDCONTEXT,LPCBYTE,LPCGUID,DWORD,LPWSTR,LPDWORD);
+#define SCardListCards WINELIB_NAME_AW(SCardListCards)
+LONG WINAPI SCardListInterfacesA(SCARDCONTEXT,LPCSTR,LPGUID,LPDWORD);
+LONG WINAPI SCardListInterfacesW(SCARDCONTEXT,LPCWSTR,LPGUID,LPDWORD);
+#define SCardListInterfaces WINELIB_NAME_AW(SCardListInterfaces)
+LONG WINAPI SCardListReadersA(SCARDCONTEXT,LPCSTR,LPSTR,LPDWORD);
+LONG WINAPI SCardListReadersW(SCARDCONTEXT,LPCWSTR,LPWSTR,LPDWORD);
+#define SCardListReaders WINELIB_NAME_AW(SCardListReaders)
+LONG WINAPI SCardListReaderGroupsA(SCARDCONTEXT,LPSTR,LPDWORD);
+LONG WINAPI SCardListReaderGroupsW(SCARDCONTEXT,LPWSTR,LPDWORD);
+#define SCardListReaderGroups WINELIB_NAME_AW(SCardListReaderGroups)
+LONG WINAPI SCardLocateCardsA(SCARDCONTEXT,LPCSTR,LPSCARD_READERSTATEA,DWORD);
+LONG WINAPI SCardLocateCardsW(SCARDCONTEXT,LPCWSTR,LPSCARD_READERSTATEW,DWORD);
+#define SCardLocateCards WINELIB_NAME_AW(SCardLocateCards)
+LONG WINAPI SCardLocateCardsByATRA(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEA,DWORD);
+LONG WINAPI SCardLocateCardsByATRW(SCARDCONTEXT,LPSCARD_ATRMASK,DWORD,LPSCARD_READERSTATEW,DWORD);
+#define SCardLocateCardsByATR WINELIB_NAME_AW(SCardLocateCardsByATR)
+LONG WINAPI SCardReconnect(SCARDHANDLE,DWORD,DWORD,DWORD,LPDWORD);
+LONG WINAPI SCardReleaseContext(SCARDCONTEXT);
+void WINAPI SCardReleaseStartedEvent(void);
+LONG WINAPI SCardRemoveReaderFromGroupA(SCARDCONTEXT,LPCSTR,LPCSTR);
+LONG WINAPI SCardRemoveReaderFromGroupW(SCARDCONTEXT,LPCWSTR,LPCWSTR);
+#define SCardRemoveReaderFromGroup WINELIB_NAME_AW(SCardRemoveReaderFromGroup)
+LONG WINAPI SCardSetAttrib(SCARDHANDLE,DWORD,LPCBYTE,DWORD);
+LONG WINAPI SCardSetCardTypeProviderNameA(SCARDCONTEXT,LPCSTR,DWORD,LPCSTR);
+LONG WINAPI SCardSetCardTypeProviderNameW(SCARDCONTEXT,LPCWSTR,DWORD,LPCWSTR);
+#define SCardSetCardTypeProviderName WINELIB_NAME_AW(SCardSetCardTypeProviderName)
+LONG WINAPI SCardState(SCARDHANDLE,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+LONG WINAPI SCardStatusA(SCARDHANDLE,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+LONG WINAPI SCardStatusW(SCARDHANDLE,LPWSTR,LPDWORD,LPDWORD,LPDWORD,LPBYTE,LPDWORD);
+#define SCardStatus WINELIB_NAME_AW(SCardStatus)
+LONG WINAPI SCardTransmit(SCARDHANDLE,LPCSCARD_IO_REQUEST,LPCBYTE,DWORD,LPSCARD_IO_REQUEST,LPBYTE,LPDWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINSCARD_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h
new file mode 100644
index 00000000..3a880c16
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsmcrd.h
@@ -0,0 +1,46 @@
+/*
+ * Winscard definitions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSMCRD_H
+#define __WINE_WINSMCRD_H
+
+#define SCARD_PROTOCOL_UNDEFINED 0x00000000
+#define SCARD_PROTOCOL_OPTIMAL 0x00000000
+#define SCARD_PROTOCOL_T0 0x00000001
+#define SCARD_PROTOCOL_T1 0x00000002
+#define SCARD_PROTOCOL_RAW 0x00010000
+#define SCARD_PROTOCOL_DEFAULT 0x80000000
+#define SCARD_PROTOCOL_Tx (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)
+
+typedef struct _SCARD_IO_REQUEST
+{
+ DWORD dwProtocol;
+ DWORD cbPciLength;
+} SCARD_IO_REQUEST, *PSCARD_IO_REQUEST, *LPSCARD_IO_REQUEST;
+typedef const SCARD_IO_REQUEST *LPCSCARD_IO_REQUEST;
+
+#endif /* __WINE_WINSMCRD_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h
new file mode 100644
index 00000000..39874e0b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsnmp.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2013 Hans Leidekker for CodeWeavers.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSNMP_H
+#define __WINE_WINSNMP_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int smiINT, *smiLPINT;
+typedef smiINT smiINT32, *smiLPINT32;
+typedef unsigned int smiUINT32, *smiLPUINT32;
+typedef smiUINT32 SNMPAPI_STATUS;
+
+#define SNMPAPI_NO_SUPPORT 0
+#define SNMPAPI_V1_SUPPORT 1
+#define SNMPAPI_V2_SUPPORT 2
+#define SNMPAPI_M2M_SUPPORT 3
+
+#define SNMPAPI_TRANSLATED 0
+#define SNMPAPI_UNTRANSLATED_V1 1
+#define SNMPAPI_UNTRANSLATED_V2 2
+
+#define SNMPAPI_OFF 0
+#define SNMPAPI_ON 1
+
+#define SNMPAPI_FAILURE 0
+#define SNMPAPI_SUCCESS 1
+
+SNMPAPI_STATUS WINAPI SnmpCleanup(void);
+SNMPAPI_STATUS WINAPI SnmpSetRetransmitMode(smiUINT32);
+SNMPAPI_STATUS WINAPI SnmpSetTranslateMode(smiUINT32);
+SNMPAPI_STATUS WINAPI SnmpStartup(smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32,smiLPUINT32);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_WINSNMP_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h
new file mode 100644
index 00000000..9e90684d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock.h
@@ -0,0 +1,1057 @@
+/* WINSOCK.H--definitions to be used with the WINSOCK.DLL
+ *
+ * This header file corresponds to version 1.1 of the Windows Sockets
+ * specification.
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifdef __WINESRC__
+# ifndef __WINE_WINSOCK2__
+# error Please use Winsock2 in Wine
+# endif
+#endif
+
+#ifndef __WINE_WINSOCKAPI_STDLIB_H
+#define __WINE_WINSOCKAPI_STDLIB_H
+
+/*
+ * This section defines the items that conflict with the Unix headers.
+ */
+#ifndef USE_WS_PREFIX
+/* We are not using the WS_ prefix we risk getting conflicts for
+ * everything related to select.
+ */
+# ifdef FD_CLR
+/* Too late, the Unix version of stdlib.h was included before winsock.h.
+ * This means select and all the related stuff is already defined and we
+ * cannot override types and function prototypes.
+ * All we can do is disable all these symbols so that they are not used
+ * inadvertently.
+ */
+# include <sys/types.h>
+# undef FD_SETSIZE
+# undef FD_CLR
+# undef FD_SET
+# undef FD_ZERO
+# undef FD_ISSET
+
+# define FD_SETSIZE Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define FD_CLR Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define FD_SET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define FD_ZERO Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define FD_ISSET Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define fd_set Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# define select Include_winsock_h_before_stdlib_h_or_use_the_MSVCRT_library
+# elif defined(RLIM_INFINITY)
+/* On Darwin stdlib.h includes sys/resource.h which defines timeval but not the fd_set macros */
+# define fd_set unix_fd_set
+# include <sys/types.h>
+# include <time.h>
+# include <stdlib.h>
+# undef fd_set
+# undef FD_SETSIZE
+# undef FD_CLR
+# undef FD_SET
+# undef FD_ZERO
+# undef FD_ISSET
+# define select Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
+# define timeval Include_winsock_h_before_sys_types_h_or_use_the_MSVCRT_library
+# else /* FD_CLR */
+/* stdlib.h has not been included yet so it's not too late. Include it now
+ * making sure that none of the select symbols is affected. Then we can
+ * define them with our own values.
+ */
+# define fd_set unix_fd_set
+# define timeval unix_timeval
+# define select unix_select
+# define socklen_t unix_socklen_t
+# define u_long unix_u_long
+# include <sys/types.h>
+# include <time.h>
+# include <stdlib.h>
+# undef fd_set
+# undef timeval
+# undef select
+# undef socklen_t
+# undef u_long
+# undef FD_SETSIZE
+# undef FD_CLR
+# undef FD_SET
+# undef FD_ZERO
+# undef FD_ISSET
+# undef _TIMEVAL_DEFINED
+
+# define WS_DEFINE_SELECT
+# endif /* FD_CLR */
+
+#else
+# define WS_DEFINE_SELECT
+# include <sys/types.h>
+# include <stdlib.h>
+#endif /* !USE_WS_PREFIX */
+
+#endif /* __WINE_WINSOCKAPI_STDLIB_H */
+
+#include <windows.h>
+
+#ifndef _WINSOCKAPI_
+#define _WINSOCKAPI_
+
+#include <inaddr.h>
+
+#ifdef USE_WS_PREFIX
+typedef unsigned char WS_u_char;
+typedef unsigned short WS_u_short;
+typedef unsigned int WS_u_int;
+typedef ULONG WS_u_long;
+#elif (defined(_MSC_VER) || defined(__MINGW32__) || defined(__WATCOMC__)) && !defined(_BSDTYPES_DEFINED)
+/* MinGW doesn't define the u_xxx types */
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef ULONG u_long;
+#define _BSDTYPES_DEFINED
+#else
+#define u_long ULONG /* make sure we don't use the system u_long */
+#endif
+
+#ifdef USE_WS_PREFIX
+# define WS(x) WS_##x
+#else
+# define WS(x) x
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*
+ * Address families
+ */
+#ifndef USE_WS_PREFIX
+#define AF_UNSPEC 0
+#define AF_UNIX 1
+#define AF_INET 2
+#define AF_IMPLINK 3
+#define AF_PUP 4
+#define AF_CHAOS 5
+#define AF_NS 6
+#define AF_IPX AF_NS
+#define AF_ISO 7
+#define AF_OSI AF_ISO
+#define AF_ECMA 8
+#define AF_DATAKIT 9
+#define AF_CCITT 10
+#define AF_SNA 11
+#define AF_DECnet 12
+#define AF_DLI 13
+#define AF_LAT 14
+#define AF_HYLINK 15
+#define AF_APPLETALK 16
+#define AF_NETBIOS 17
+#define AF_VOICEVIEW 18
+#define AF_FIREFOX 19
+#define AF_UNKNOWN1 20
+#define AF_BAN 21
+#define AF_ATM 22
+#define AF_INET6 23
+#define AF_CLUSTER 24
+#define AF_12844 25
+#define AF_IRDA 26
+#define AF_MAX 27
+#define PF_UNSPEC AF_UNSPEC
+#define PF_UNIX AF_UNIX
+#define PF_INET AF_INET
+#define PF_IMPLINK AF_IMPLINK
+#define PF_PUP AF_PUP
+#define PF_CHAOS AF_CHAOS
+#define PF_NS AF_NS
+#define PF_IPX AF_IPX
+#define PF_ISO AF_ISO
+#define PF_OSI AF_OSI
+#define PF_ECMA AF_ECMA
+#define PF_DATAKIT AF_DATAKIT
+#define PF_CCITT AF_CCITT
+#define PF_SNA AF_SNA
+#define PF_DECnet AF_DECnet
+#define PF_DLI AF_DLI
+#define PF_LAT AF_LAT
+#define PF_HYLINK AF_HYLINK
+#define PF_APPLETALK AF_APPLETALK
+#define PF_VOICEVIEW AF_VOICEVIEW
+#define PF_FIREFOX AF_FIREFOX
+#define PF_UNKNOWN1 AF_UNKNOWN1
+#define PF_BAN AF_BAN
+#define PF_MAX AF_MAX
+#else /* USE_WS_PREFIX */
+#define WS_AF_UNSPEC 0
+#define WS_AF_UNIX 1
+#define WS_AF_INET 2
+#define WS_AF_IMPLINK 3
+#define WS_AF_PUP 4
+#define WS_AF_CHAOS 5
+#define WS_AF_NS 6
+#define WS_AF_IPX WS_AF_NS
+#define WS_AF_ISO 7
+#define WS_AF_OSI AF_ISO
+#define WS_AF_ECMA 8
+#define WS_AF_DATAKIT 9
+#define WS_AF_CCITT 10
+#define WS_AF_SNA 11
+#define WS_AF_DECnet 12
+#define WS_AF_DLI 13
+#define WS_AF_LAT 14
+#define WS_AF_HYLINK 15
+#define WS_AF_APPLETALK 16
+#define WS_AF_NETBIOS 17
+#define WS_AF_VOICEVIEW 18
+#define WS_AF_FIREFOX 19
+#define WS_AF_UNKNOWN1 20
+#define WS_AF_BAN 21
+#define WS_AF_ATM 22
+#define WS_AF_INET6 23
+#define WS_AF_CLUSTER 24
+#define WS_AF_12844 25
+#define WS_AF_IRDA 26
+#define WS_AF_MAX 27
+#endif /* USE_WS_PREFIX */
+
+/*
+ * Types
+ */
+#ifndef USE_WS_PREFIX
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+#else /* USE_WS_PREFIX */
+#define WS_SOCK_STREAM 1
+#define WS_SOCK_DGRAM 2
+#define WS_SOCK_RAW 3
+#define WS_SOCK_RDM 4
+#define WS_SOCK_SEQPACKET 5
+#endif /* USE_WS_PREFIX */
+
+
+/*
+ * Protocols
+ */
+#ifndef USE_WS_PREFIX
+#define IPPROTO_IP 0
+#define IPPROTO_ICMP 1
+#define IPPROTO_IGMP 2
+#define IPPROTO_GGP 3
+#define IPPROTO_TCP 6
+#define IPPROTO_UDP 17
+#define IPPROTO_IDP 22
+#define IPPROTO_IPV6 41
+#define IPPROTO_ND 77
+#define IPPROTO_RAW 255
+#define IPPROTO_MAX 256
+#else /* USE_WS_PREFIX */
+#define WS_IPPROTO_IP 0
+#define WS_IPPROTO_ICMP 1
+#define WS_IPPROTO_IGMP 2
+#define WS_IPPROTO_GGP 3
+#define WS_IPPROTO_TCP 6
+#define WS_IPPROTO_UDP 17
+#define WS_IPPROTO_IDP 22
+#define WS_IPPROTO_IPV6 41
+#define WS_IPPROTO_ND 77
+#define WS_IPPROTO_RAW 255
+#define WS_IPPROTO_MAX 256
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(protoent)
+{
+ char* p_name;
+ char** p_aliases;
+ short p_proto;
+} PROTOENT, *PPROTOENT, *LPPROTOENT;
+
+
+
+/*
+ * Networks
+ */
+struct WS(netent)
+{
+ char* n_name; /* official name of net */
+ char** n_aliases; /* alias list */
+ short n_addrtype; /* net address type */
+ ULONG n_net; /* network # */
+};
+
+
+/*
+ * Services
+ */
+#ifndef USE_WS_PREFIX
+#define IPPORT_ECHO 7
+#define IPPORT_DISCARD 9
+#define IPPORT_SYSTAT 11
+#define IPPORT_DAYTIME 13
+#define IPPORT_NETSTAT 15
+#define IPPORT_FTP 21
+#define IPPORT_TELNET 23
+#define IPPORT_SMTP 25
+#define IPPORT_TIMESERVER 37
+#define IPPORT_NAMESERVER 42
+#define IPPORT_WHOIS 43
+#define IPPORT_MTP 57
+#define IPPORT_TFTP 69
+#define IPPORT_RJE 77
+#define IPPORT_FINGER 79
+#define IPPORT_TTYLINK 87
+#define IPPORT_SUPDUP 95
+#define IPPORT_EXECSERVER 512
+#define IPPORT_LOGINSERVER 513
+#define IPPORT_CMDSERVER 514
+#define IPPORT_EFSSERVER 520
+#define IPPORT_BIFFUDP 512
+#define IPPORT_WHOSERVER 513
+#define IPPORT_ROUTESERVER 520
+#define IPPORT_RESERVED 1024
+#else /* USE_WS_PREFIX */
+#define WS_IPPORT_ECHO 7
+#define WS_IPPORT_DISCARD 9
+#define WS_IPPORT_SYSTAT 11
+#define WS_IPPORT_DAYTIME 13
+#define WS_IPPORT_NETSTAT 15
+#define WS_IPPORT_FTP 21
+#define WS_IPPORT_TELNET 23
+#define WS_IPPORT_SMTP 25
+#define WS_IPPORT_TIMESERVER 37
+#define WS_IPPORT_NAMESERVER 42
+#define WS_IPPORT_WHOIS 43
+#define WS_IPPORT_MTP 57
+#define WS_IPPORT_TFTP 69
+#define WS_IPPORT_RJE 77
+#define WS_IPPORT_FINGER 79
+#define WS_IPPORT_TTYLINK 87
+#define WS_IPPORT_SUPDUP 95
+#define WS_IPPORT_EXECSERVER 512
+#define WS_IPPORT_LOGINSERVER 513
+#define WS_IPPORT_CMDSERVER 514
+#define WS_IPPORT_EFSSERVER 520
+#define WS_IPPORT_BIFFUDP 512
+#define WS_IPPORT_WHOSERVER 513
+#define WS_IPPORT_ROUTESERVER 520
+#define WS_IPPORT_RESERVED 1024
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(servent)
+{
+ char* s_name; /* official service name */
+ char** s_aliases; /* alias list */
+#ifdef _WIN64
+ char* s_proto; /* protocol to use */
+ short s_port; /* port # */
+#else
+ short s_port; /* port # */
+ char* s_proto; /* protocol to use */
+#endif
+} SERVENT, *PSERVENT, *LPSERVENT;
+
+
+
+/*
+ * Hosts
+ */
+
+typedef struct WS(hostent)
+{
+ char* h_name; /* official name of host */
+ char** h_aliases; /* alias list */
+ short h_addrtype; /* host address type */
+ short h_length; /* length of address */
+ char** h_addr_list; /* list of addresses from name server */
+#define h_addr h_addr_list[0] /* address, for backward compat */
+} HOSTENT, *PHOSTENT, *LPHOSTENT;
+
+
+/*
+ * Sockets
+ */
+
+typedef UINT_PTR SOCKET;
+
+/*
+ * This is used instead of -1, since the
+ * SOCKET type is unsigned.
+ */
+#define INVALID_SOCKET (SOCKET)(~0)
+#define SOCKET_ERROR (-1)
+
+typedef struct WS(sockaddr)
+{
+ WS(u_short) sa_family;
+ char sa_data[14];
+} SOCKADDR, *PSOCKADDR, *LPSOCKADDR;
+
+typedef struct WS(linger)
+{
+ WS(u_short) l_onoff; /* option on/off */
+ WS(u_short) l_linger; /* linger time */
+} LINGER, *PLINGER, *LPLINGER;
+
+/*
+ * Select
+ */
+
+#ifdef WS_DEFINE_SELECT
+/* Define our own version of select and the associated types and macros */
+
+# ifndef USE_WS_PREFIX
+# ifndef FD_SETSIZE
+# define FD_SETSIZE 64
+# endif
+# else
+# ifndef WS_FD_SETSIZE
+# define WS_FD_SETSIZE 64
+# endif
+# endif
+
+typedef struct WS(fd_set)
+{
+ WS(u_int) fd_count; /* how many are SET? */
+# ifndef USE_WS_PREFIX
+ SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
+# else
+ SOCKET fd_array[WS_FD_SETSIZE];/* an array of SOCKETs */
+# endif
+} WS(fd_set), FD_SET, *PFD_SET, *LPFD_SET;
+
+#ifndef _TIMEVAL_DEFINED
+#define _TIMEVAL_DEFINED
+typedef struct WS(timeval)
+{
+ LONG tv_sec; /* seconds */
+ LONG tv_usec; /* and microseconds */
+} TIMEVAL, *PTIMEVAL, *LPTIMEVAL;
+#endif
+
+#define __WS_FD_CLR(fd, set, cast) do { \
+ unsigned int __i; \
+ for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
+ { \
+ if (((cast*)(set))->fd_array[__i] == fd) \
+ { \
+ while (__i < ((cast*)(set))->fd_count-1) \
+ { \
+ ((cast*)(set))->fd_array[__i] = \
+ ((cast*)(set))->fd_array[__i+1]; \
+ __i++; \
+ } \
+ ((cast*)(set))->fd_count--; \
+ break; \
+ } \
+ } \
+} while(0)
+#define __WS_FD_SET1(fd, set, cast) do { \
+ if (((cast*)(set))->fd_count < FD_SETSIZE) \
+ ((cast*)(set))->fd_array[((cast*)(set))->fd_count++]=(fd); \
+} while(0)
+/* This version checks if the filedesc is already in the list, and appends it
+ * only if it's not the case
+ */
+#define __WS_FD_SET2(fd, set, cast) do { \
+ unsigned int __i; \
+ for (__i = 0; __i < ((cast*)(set))->fd_count ; __i++) \
+ { \
+ if (((cast*)(set))->fd_array[__i]==(fd)) \
+ break; \
+ } \
+ if (__i == ((cast*)(set))->fd_count && ((cast*)(set))->fd_count < FD_SETSIZE) \
+ { \
+ ((cast*)(set))->fd_count++; \
+ ((cast*)(set))->fd_array[__i]=(fd);\
+ } \
+} while(0)
+
+#ifndef __WINE_WINSOCK2__
+#define __WS_FD_SET(fd, set, cast) __WS_FD_SET1((fd),(set), cast)
+#else
+#define __WS_FD_SET(fd, set, cast) __WS_FD_SET2((fd),(set), cast)
+#endif
+
+#ifndef USE_WS_PREFIX
+#define FD_CLR(fd, set) __WS_FD_CLR((fd),(set), fd_set)
+#define FD_SET(fd, set) __WS_FD_SET((fd),(set), fd_set)
+#define FD_ZERO(set) (((fd_set*)(set))->fd_count=0)
+#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set))
+#else
+#define WS_FD_CLR(fd, set) __WS_FD_CLR((fd),(set), WS_fd_set)
+#define WS_FD_SET(fd, set) __WS_FD_SET((fd),(set), WS_fd_set)
+#define WS_FD_ZERO(set) (((WS_fd_set*)(set))->fd_count=0)
+#define WS_FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (WS_fd_set*)(set))
+#endif
+
+int WINAPI __WSAFDIsSet(SOCKET,WS(fd_set)*);
+
+#endif /* WS_DEFINE_SELECT */
+
+/* we have to define hton/ntoh as macros to avoid conflicts with Unix headers */
+#ifndef USE_WS_PREFIX
+
+#undef htonl
+#undef htons
+#undef ntohl
+#undef ntohs
+
+#ifdef WORDS_BIGENDIAN
+
+#define htonl(l) ((ULONG)(l))
+#define htons(s) ((u_short)(s))
+#define ntohl(l) ((ULONG)(l))
+#define ntohs(s) ((u_short)(s))
+
+#else /* WORDS_BIGENDIAN */
+
+static inline u_short __wine_ushort_swap(u_short s)
+{
+ return (s >> 8) | (s << 8);
+}
+static inline ULONG __wine_ulong_swap(ULONG l)
+{
+ return ((ULONG)__wine_ushort_swap((u_short)l) << 16) | __wine_ushort_swap((u_short)(l >> 16));
+}
+#define htonl(l) __wine_ulong_swap(l)
+#define htons(s) __wine_ushort_swap(s)
+#define ntohl(l) __wine_ulong_swap(l)
+#define ntohs(s) __wine_ushort_swap(s)
+
+#endif /* WORDS_BIGENDIAN */
+
+#endif /* USE_WS_PREFIX */
+
+/*
+ * Internet address (old style... should be updated)
+ */
+
+#ifndef USE_WS_PREFIX
+#define IN_CLASSA_NSHIFT 24
+#define IN_CLASSA_MAX 128
+#define IN_CLASSA_NET 0xff000000
+#define IN_CLASSA_HOST 0x00ffffff
+#define IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
+#define IN_CLASSB_NSHIFT 16
+#define IN_CLASSB_MAX 65536
+#define IN_CLASSB_NET 0xffff0000
+#define IN_CLASSB_HOST 0x0000ffff
+#define IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000)
+#define IN_CLASSC_NSHIFT 8
+#define IN_CLASSC_NET 0xffffff00
+#define IN_CLASSC_HOST 0x000000ff
+#define IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000)
+#else
+#define WS_IN_CLASSA_NSHIFT 24
+#define WS_IN_CLASSA_MAX 128
+#define WS_IN_CLASSA_NET 0xff000000
+#define WS_IN_CLASSA_HOST 0x00ffffff
+#define WS_IN_CLASSA(i) (((LONG)(i) & 0x80000000) == 0)
+#define WS_IN_CLASSB_NSHIFT 16
+#define WS_IN_CLASSB_MAX 65536
+#define WS_IN_CLASSB_NET 0xffff0000
+#define WS_IN_CLASSB_HOST 0x0000ffff
+#define WS_IN_CLASSB(i) (((LONG)(i) & 0xc0000000) == 0x80000000)
+#define WS_IN_CLASSC_NSHIFT 8
+#define WS_IN_CLASSC_NET 0xffffff00
+#define WS_IN_CLASSC_HOST 0x000000ff
+#define WS_IN_CLASSC(i) (((LONG)(i) & 0xe0000000) == 0xc0000000)
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define INADDR_ANY ((ULONG)0x00000000)
+#define INADDR_LOOPBACK 0x7f000001
+#define INADDR_BROADCAST ((ULONG)0xffffffff)
+#define INADDR_NONE 0xffffffff
+#else
+#define WS_INADDR_ANY ((ULONG)0x00000000)
+#define WS_INADDR_LOOPBACK 0x7f000001
+#define WS_INADDR_BROADCAST ((ULONG)0xffffffff)
+#define WS_INADDR_NONE 0xffffffff
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(sockaddr_in)
+{
+ short sin_family;
+ WS(u_short) sin_port;
+ struct WS(in_addr) sin_addr;
+ char sin_zero[8];
+} SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;
+
+/*
+ * Multicast group information
+ */
+
+#if !defined(__WINE_WINSOCK2__)
+struct WS(ip_mreq)
+{
+ struct WS(in_addr) imr_multiaddr;
+ struct WS(in_addr) imr_interface;
+};
+#endif
+
+/*
+ * WSAStartup
+ */
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+
+typedef struct WS(WSAData)
+{
+ WORD wVersion;
+ WORD wHighVersion;
+#ifdef _WIN64
+ WORD iMaxSockets;
+ WORD iMaxUdpDg;
+ char *lpVendorInfo;
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+#else
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+ WORD iMaxSockets;
+ WORD iMaxUdpDg;
+ char *lpVendorInfo;
+#endif
+} WSADATA, *LPWSADATA;
+
+
+
+/*
+ * {get,set}sockopt
+ */
+#ifndef USE_WS_PREFIX
+#define SOL_SOCKET 0xffff
+#define SO_DEBUG 0x0001
+#define SO_ACCEPTCONN 0x0002
+#define SO_REUSEADDR 0x0004
+#define SO_EXCLUSIVEADDRUSE ((u_int)(~SO_REUSEADDR))
+#define SO_KEEPALIVE 0x0008
+#define SO_DONTROUTE 0x0010
+#define SO_BROADCAST 0x0020
+#define SO_USELOOPBACK 0x0040
+#define SO_LINGER 0x0080
+#define SO_OOBINLINE 0x0100
+#define SO_DONTLINGER ((u_int)(~SO_LINGER))
+#define SO_SNDBUF 0x1001
+#define SO_RCVBUF 0x1002
+#define SO_SNDLOWAT 0x1003
+#define SO_RCVLOWAT 0x1004
+#define SO_SNDTIMEO 0x1005
+#define SO_RCVTIMEO 0x1006
+#define SO_ERROR 0x1007
+#define SO_TYPE 0x1008
+
+
+#define IOCPARM_MASK 0x7f
+#define IOC_VOID 0x20000000
+#define IOC_OUT 0x40000000
+#define IOC_IN 0x80000000
+#define IOC_INOUT (IOC_IN|IOC_OUT)
+
+#define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
+#define _IOR(x,y,t) (IOC_OUT|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define _IOW(x,y,t) (IOC_IN|(((UINT)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
+
+#else
+
+#define WS_SOL_SOCKET 0xffff
+#define WS_SO_DEBUG 0x0001
+#define WS_SO_ACCEPTCONN 0x0002
+#define WS_SO_REUSEADDR 0x0004
+#define WS_SO_EXCLUSIVEADDRUSE ((WS_u_int)(~WS_SO_REUSEADDR))
+#define WS_SO_KEEPALIVE 0x0008
+#define WS_SO_DONTROUTE 0x0010
+#define WS_SO_BROADCAST 0x0020
+#define WS_SO_USELOOPBACK 0x0040
+#define WS_SO_LINGER 0x0080
+#define WS_SO_OOBINLINE 0x0100
+#define WS_SO_DONTLINGER ((WS_u_int)(~WS_SO_LINGER))
+#define WS_SO_SNDBUF 0x1001
+#define WS_SO_RCVBUF 0x1002
+#define WS_SO_SNDLOWAT 0x1003
+#define WS_SO_RCVLOWAT 0x1004
+#define WS_SO_SNDTIMEO 0x1005
+#define WS_SO_RCVTIMEO 0x1006
+#define WS_SO_ERROR 0x1007
+#define WS_SO_TYPE 0x1008
+
+#define WS_IOCPARM_MASK 0x7f
+#define WS_IOC_VOID 0x20000000
+#define WS_IOC_OUT 0x40000000
+#define WS_IOC_IN 0x80000000
+#define WS_IOC_INOUT (WS_IOC_IN|WS_IOC_OUT)
+
+#define WS__IO(x,y) (WS_IOC_VOID|((x)<<8)|(y))
+#define WS__IOR(x,y,t) (WS_IOC_OUT|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
+#define WS__IOW(x,y,t) (WS_IOC_IN|(((LONG)sizeof(t)&WS_IOCPARM_MASK)<<16)|((x)<<8)|(y))
+
+#endif
+
+/* IPPROTO_TCP options */
+#ifndef USE_WS_PREFIX
+#define TCP_NODELAY 1
+#else
+#define WS_TCP_NODELAY 1
+#endif
+
+/* IPPROTO_IP options */
+#ifndef __WINE_WINSOCK2__ /* WinSock2 has different values for the IP_ constants */
+# ifndef USE_WS_PREFIX
+# define IP_OPTIONS 1
+# define IP_MULTICAST_IF 2
+# define IP_MULTICAST_TTL 3
+# define IP_MULTICAST_LOOP 4
+# define IP_ADD_MEMBERSHIP 5
+# define IP_DROP_MEMBERSHIP 6
+# define IP_TTL 7
+# define IP_TOS 8
+# define IP_DONTFRAGMENT 9
+# else
+# define WS_IP_OPTIONS 1
+# define WS_IP_MULTICAST_IF 2
+# define WS_IP_MULTICAST_TTL 3
+# define WS_IP_MULTICAST_LOOP 4
+# define WS_IP_ADD_MEMBERSHIP 5
+# define WS_IP_DROP_MEMBERSHIP 6
+# define WS_IP_TTL 7
+# define WS_IP_TOS 8
+# define WS_IP_DONTFRAGMENT 9
+# endif
+#endif
+
+
+/*
+ * Socket I/O flags (supported by spec 1.1)
+ */
+#ifndef USE_WS_PREFIX
+#define FIONREAD _IOR('f', 127, ULONG)
+#define FIONBIO _IOW('f', 126, ULONG)
+#define FIOASYNC _IOW('f', 125, ULONG)
+#define SIOCSHIWAT _IOW('s', 0, ULONG)
+#define SIOCGHIWAT _IOR('s', 1, ULONG)
+#define SIOCSLOWAT _IOW('s', 2, ULONG)
+#define SIOCGLOWAT _IOR('s', 3, ULONG)
+#define SIOCATMARK _IOR('s', 7, ULONG)
+#else
+#define WS_FIONREAD WS__IOR('f', 127, ULONG)
+#define WS_FIONBIO WS__IOW('f', 126, ULONG)
+#define WS_FIOASYNC WS__IOW('f', 125, ULONG)
+#define WS_SIOCSHIWAT WS__IOW('s', 0, ULONG)
+#define WS_SIOCGHIWAT WS__IOR('s', 1, ULONG)
+#define WS_SIOCSLOWAT WS__IOW('s', 2, ULONG)
+#define WS_SIOCGLOWAT WS__IOR('s', 3, ULONG)
+#define WS_SIOCATMARK WS__IOR('s', 7, ULONG)
+#endif
+
+/*
+ * Maximum queue length specifiable by listen.
+ */
+#ifndef USE_WS_PREFIX
+#define SOMAXCONN 5
+
+#define MSG_OOB 0x0001
+#define MSG_PEEK 0x0002
+#define MSG_DONTROUTE 0x0004
+#define MSG_WAITALL 0x0008
+#define MSG_INTERRUPT 0x0010
+#define MSG_PARTIAL 0x8000
+#define MSG_MAXIOVLEN 16
+#else /* USE_WS_PREFIX */
+#define WS_SOMAXCONN 5
+
+#define WS_MSG_OOB 0x0001
+#define WS_MSG_PEEK 0x0002
+#define WS_MSG_DONTROUTE 0x0004
+#define WS_MSG_WAITALL 0x0008
+#define WS_MSG_INTERRUPT 0x0010
+#define WS_MSG_PARTIAL 0x8000
+#define WS_MSG_MAXIOVLEN 16
+#endif /* USE_WS_PREFIX */
+
+/*
+ * Define constant based on rfc883, used by gethostbyxxxx() calls.
+ */
+#ifndef USE_WS_PREFIX
+#define MAXGETHOSTSTRUCT 1024
+#else
+#define MAXGETHOSTSTRUCT 1024
+#endif
+
+
+/*
+ * Define flags to be used with the WSAAsyncSelect() call.
+ */
+#define FD_READ 0x00000001
+#define FD_WRITE 0x00000002
+#define FD_OOB 0x00000004
+#define FD_ACCEPT 0x00000008
+#define FD_CONNECT 0x00000010
+#define FD_CLOSE 0x00000020
+
+/* internal per-socket flags */
+#ifdef __WINESRC__
+#define FD_WINE_LISTENING 0x10000000
+#define FD_WINE_NONBLOCKING 0x20000000
+#define FD_WINE_CONNECTED 0x40000000
+#define FD_WINE_RAW 0x80000000
+#define FD_WINE_INTERNAL 0xFFFF0000
+#endif
+
+/*
+ * All Windows Sockets error constants are biased by WSABASEERR from
+ * the "normal". They are also defined in winerror.h.
+ */
+#define WSABASEERR 10000
+/*
+ * Windows Sockets definitions of regular Microsoft C error constants
+ */
+#define WSAEINTR (WSABASEERR+4)
+#define WSAEBADF (WSABASEERR+9)
+#define WSAEACCES (WSABASEERR+13)
+#define WSAEFAULT (WSABASEERR+14)
+#define WSAEINVAL (WSABASEERR+22)
+#define WSAEMFILE (WSABASEERR+24)
+
+/*
+ * Windows Sockets definitions of regular Berkeley error constants
+ */
+#define WSAEWOULDBLOCK (WSABASEERR+35)
+#define WSAEINPROGRESS (WSABASEERR+36)
+#define WSAEALREADY (WSABASEERR+37)
+#define WSAENOTSOCK (WSABASEERR+38)
+#define WSAEDESTADDRREQ (WSABASEERR+39)
+#define WSAEMSGSIZE (WSABASEERR+40)
+#define WSAEPROTOTYPE (WSABASEERR+41)
+#define WSAENOPROTOOPT (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
+#define WSAEOPNOTSUPP (WSABASEERR+45)
+#define WSAEPFNOSUPPORT (WSABASEERR+46)
+#define WSAEAFNOSUPPORT (WSABASEERR+47)
+#define WSAEADDRINUSE (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL (WSABASEERR+49)
+#define WSAENETDOWN (WSABASEERR+50)
+#define WSAENETUNREACH (WSABASEERR+51)
+#define WSAENETRESET (WSABASEERR+52)
+#define WSAECONNABORTED (WSABASEERR+53)
+#define WSAECONNRESET (WSABASEERR+54)
+#define WSAENOBUFS (WSABASEERR+55)
+#define WSAEISCONN (WSABASEERR+56)
+#define WSAENOTCONN (WSABASEERR+57)
+#define WSAESHUTDOWN (WSABASEERR+58)
+#define WSAETOOMANYREFS (WSABASEERR+59)
+#define WSAETIMEDOUT (WSABASEERR+60)
+#define WSAECONNREFUSED (WSABASEERR+61)
+#define WSAELOOP (WSABASEERR+62)
+#define WSAENAMETOOLONG (WSABASEERR+63)
+#define WSAEHOSTDOWN (WSABASEERR+64)
+#define WSAEHOSTUNREACH (WSABASEERR+65)
+#define WSAENOTEMPTY (WSABASEERR+66)
+#define WSAEPROCLIM (WSABASEERR+67)
+#define WSAEUSERS (WSABASEERR+68)
+#define WSAEDQUOT (WSABASEERR+69)
+#define WSAESTALE (WSABASEERR+70)
+#define WSAEREMOTE (WSABASEERR+71)
+
+/*
+ * Extended Windows Sockets error constant definitions
+ */
+#define WSASYSNOTREADY (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED (WSABASEERR+92)
+#define WSANOTINITIALISED (WSABASEERR+93)
+#define WSAEDISCON (WSABASEERR+101)
+#define WSAENOMORE (WSABASEERR+102)
+#define WSAECANCELLED (WSABASEERR+103)
+#define WSAEINVALIDPROCTABLE (WSABASEERR+104)
+#define WSAEINVALIDPROVIDER (WSABASEERR+105)
+#define WSAEPROVIDERFAILEDINIT (WSABASEERR+106)
+#define WSASYSCALLFAILURE (WSABASEERR+107)
+#define WSASERVICE_NOT_FOUND (WSABASEERR+108)
+#define WSATYPE_NOT_FOUND (WSABASEERR+109)
+#define WSA_E_NO_MORE (WSABASEERR+110)
+#define WSA_E_CANCELLED (WSABASEERR+111)
+#define WSAEREFUSED (WSABASEERR+112)
+
+/*
+ * Error return codes from gethostbyname() and gethostbyaddr()
+ * (when using the resolver). Note that these errors are
+ * retrieved via WSAGetLastError() and must therefore follow
+ * the rules for avoiding clashes with error numbers from
+ * specific implementations or language run-time systems.
+ * For this reason the codes are based at WSABASEERR+1001.
+ * Note also that [WSA]NO_ADDRESS is defined only for
+ * compatibility purposes.
+ */
+
+#ifndef USE_WS_PREFIX
+#define h_errno WSAGetLastError()
+#else
+#define WS_h_errno WSAGetLastError()
+#endif
+
+/* Authoritative Answer: Host not found */
+#define WSAHOST_NOT_FOUND (WSABASEERR+1001)
+
+/* Non-Authoritative: Host not found, or SERVERFAIL */
+#define WSATRY_AGAIN (WSABASEERR+1002)
+
+/* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
+#define WSANO_RECOVERY (WSABASEERR+1003)
+
+/* Valid name, no data record of requested type */
+#define WSANO_DATA (WSABASEERR+1004)
+
+/* no address, look for MX record */
+#define WSANO_ADDRESS WSANO_DATA
+
+#ifndef USE_WS_PREFIX
+#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
+#define TRY_AGAIN WSATRY_AGAIN
+#define NO_RECOVERY WSANO_RECOVERY
+#define NO_DATA WSANO_DATA
+#define NO_ADDRESS WSANO_ADDRESS
+#endif /* USE_WS_PREFIX */
+
+
+
+/*
+ * Windows message parameter composition and decomposition
+ * macros.
+ */
+
+/*
+ * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
+ * when constructing the response to a WSAAsyncGetXByY() routine.
+ */
+#define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
+/*
+ * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
+ * when constructing the response to WSAAsyncSelect().
+ */
+#define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
+/*
+ * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
+ * to extract the buffer length from the lParam in the response
+ * to a WSAGetXByY().
+ */
+#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
+/*
+ * WSAGETASYNCERROR is intended for use by the Windows Sockets application
+ * to extract the error code from the lParam in the response
+ * to a WSAGetXByY().
+ */
+#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
+/*
+ * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
+ * to extract the event code from the lParam in the response
+ * to a WSAAsyncSelect().
+ */
+#define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
+/*
+ * WSAGETSELECTERROR is intended for use by the Windows Sockets application
+ * to extract the error code from the lParam in the response
+ * to a WSAAsyncSelect().
+ */
+#define WSAGETSELECTERROR(lParam) HIWORD(lParam)
+
+
+
+/*
+ * Prototypes
+ *
+ * Remember to keep this section in sync with the
+ * "Winsock Function Typedefs" section in winsock2.h.
+ */
+#if !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES
+HANDLE WINAPI WSAAsyncGetHostByAddr(HWND,WS(u_int),const char*,int,int,char*,int);
+HANDLE WINAPI WSAAsyncGetHostByName(HWND,WS(u_int),const char*,char*,int);
+HANDLE WINAPI WSAAsyncGetProtoByName(HWND,WS(u_int),const char*,char*,int);
+HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND,WS(u_int),int,char*,int);
+HANDLE WINAPI WSAAsyncGetServByName(HWND,WS(u_int),const char*,const char*,char*,int);
+HANDLE WINAPI WSAAsyncGetServByPort(HWND,WS(u_int),int,const char*,char*,int);
+int WINAPI WSAAsyncSelect(SOCKET,HWND,WS(u_int),LONG);
+int WINAPI WSACancelAsyncRequest(HANDLE);
+int WINAPI WSACancelBlockingCall(void);
+int WINAPI WSACleanup(void);
+int WINAPI WSAGetLastError(void);
+BOOL WINAPI WSAIsBlocking(void);
+FARPROC WINAPI WSASetBlockingHook(FARPROC);
+void WINAPI WSASetLastError(int);
+int WINAPI WSAStartup(WORD,LPWSADATA);
+int WINAPI WSAUnhookBlockingHook(void);
+
+SOCKET WINAPI WS(accept)(SOCKET,struct WS(sockaddr)*,int*);
+int WINAPI WS(bind)(SOCKET,const struct WS(sockaddr)*,int);
+int WINAPI WS(closesocket)(SOCKET);
+int WINAPI WS(connect)(SOCKET,const struct WS(sockaddr)*,int);
+struct WS(hostent)* WINAPI WS(gethostbyaddr)(const char*,int,int);
+struct WS(hostent)* WINAPI WS(gethostbyname)(const char*);
+int WINAPI WS(getpeername)(SOCKET,struct WS(sockaddr)*,int*);
+struct WS(protoent)* WINAPI WS(getprotobyname)(const char*);
+struct WS(protoent)* WINAPI WS(getprotobynumber)(int);
+#ifdef WS_DEFINE_SELECT
+int WINAPI WS(select)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);
+#endif
+struct WS(servent)* WINAPI WS(getservbyname)(const char*,const char*);
+struct WS(servent)* WINAPI WS(getservbyport)(int,const char*);
+int WINAPI WS(getsockname)(SOCKET,struct WS(sockaddr)*,int*);
+int WINAPI WS(getsockopt)(SOCKET,int,int,char*,int*);
+ULONG WINAPI WS(inet_addr)(const char*);
+char* WINAPI WS(inet_ntoa)(struct WS(in_addr));
+int WINAPI WS(ioctlsocket)(SOCKET,LONG,ULONG*);
+int WINAPI WS(listen)(SOCKET,int);
+int WINAPI WS(recv)(SOCKET,char*,int,int);
+int WINAPI WS(recvfrom)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);
+int WINAPI WS(send)(SOCKET,const char*,int,int);
+int WINAPI WS(sendto)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);
+int WINAPI WS(setsockopt)(SOCKET,int,int,const char*,int);
+int WINAPI WS(shutdown)(SOCKET,int);
+SOCKET WINAPI WS(socket)(int,int,int);
+
+#if defined(__MINGW32__) || defined (_MSC_VER)
+/* gethostname is not defined on Unix because of conflicts with unistd.h */
+int WINAPI WS(gethostname)(char*,int);
+#endif
+
+#endif /* !defined(__WINE_WINSOCK2__) || WS_API_PROTOTYPES */
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef __WINE_WINSOCK2__
+#undef WS
+#undef WS_API_PROTOTYPES
+#undef WS_API_TYPEDEFS
+#endif
+
+#endif /* _WINSOCKAPI_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h
new file mode 100644
index 00000000..aec1ccbf
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsock2.h
@@ -0,0 +1,768 @@
+/*
+ * Winsock 2 definitions - used for ws2_32.dll
+ *
+ * Copyright (C) 1999 Ove Kaaven
+ * Copyright (C) 2001 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * FIXME: Still missing required Winsock 2 definitions.
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINSOCK2API_
+#define _WINSOCK2API_
+
+/*
+ * Setup phase
+ */
+
+/* Everything common between winsock.h and winsock2.h */
+#ifndef INCL_WINSOCK_API_PROTOTYPES
+#define INCL_WINSOCK_API_PROTOTYPES 1
+#define WS_API_PROTOTYPES 1
+#else
+#define WS_API_PROTOTYPES INCL_WINSOCK_API_PROTOTYPES
+#endif
+
+#ifndef INCL_WINSOCK_API_TYPEDEFS
+#define INCL_WINSOCK_API_TYPEDEFS 0
+#define WS_API_TYPEDEFS 0
+#else
+#define WS_API_TYPEDEFS INCL_WINSOCK_API_TYPEDEFS
+#endif
+
+#define __WINE_WINSOCK2__
+#include <winsock.h>
+#undef __WINE_WINSOCK2__
+
+#include <ws2def.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+
+#ifndef USE_WS_PREFIX
+#define SO_GROUP_ID 0x2001
+#define SO_GROUP_PRIORITY 0x2002
+#define SO_MAX_MSG_SIZE 0x2003
+#define SO_PROTOCOL_INFOA 0x2004
+#define SO_PROTOCOL_INFOW 0x2005
+#define SO_PROTOCOL_INFO WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO)
+#define PVD_CONFIG 0x3001
+#define SO_CONDITIONAL_ACCEPT 0x3002
+#else
+#define WS_SO_GROUP_ID 0x2001
+#define WS_SO_GROUP_PRIORITY 0x2002
+#define WS_SO_MAX_MSG_SIZE 0x2003
+#define WS_SO_PROTOCOL_INFOA 0x2004
+#define WS_SO_PROTOCOL_INFOW 0x2005
+#define WS_SO_PROTOCOL_INFO WINELIB_NAME_AW(WS_SO_PROTOCOL_INFO)
+#define WS_PVD_CONFIG 0x3001
+#define WS_SO_CONDITIONAL_ACCEPT 0x3002
+#endif
+
+/* protocol types */
+
+#define FROM_PROTOCOL_INFO (-1)
+
+#ifndef USE_WS_PREFIX
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+#else /* USE_WS_PREFIX */
+#define WS_SOCK_STREAM 1
+#define WS_SOCK_DGRAM 2
+#define WS_SOCK_RAW 3
+#define WS_SOCK_RDM 4
+#define WS_SOCK_SEQPACKET 5
+#endif /* USE_WS_PREFIX */
+
+/* option flags per socket */
+
+#define FD_MAX_EVENTS 10
+#define FD_READ_BIT 0
+#define FD_WRITE_BIT 1
+#define FD_OOB_BIT 2
+#define FD_ACCEPT_BIT 3
+#define FD_CONNECT_BIT 4
+#define FD_CLOSE_BIT 5
+
+/* Constants for LPCONDITIONPROC */
+#define CF_ACCEPT 0x0000
+#define CF_REJECT 0x0001
+#define CF_DEFER 0x0002
+
+/* Constants for shutdown() */
+#define SD_RECEIVE 0x00
+#define SD_SEND 0x01
+#define SD_BOTH 0x02
+
+/* Constants for WSAIoctl() */
+#ifdef USE_WS_PREFIX
+#define WS_IOC_UNIX 0x00000000
+#define WS_IOC_WS2 0x08000000
+#define WS_IOC_PROTOCOL 0x10000000
+#define WS_IOC_VENDOR 0x18000000
+#define WS_IOC_VOID 0x20000000
+#define WS_IOC_OUT 0x40000000
+#define WS_IOC_IN 0x80000000
+#define WS_IOC_INOUT (WS_IOC_IN|WS_IOC_OUT)
+#define _WSAIO(x,y) (WS_IOC_VOID|(x)|(y))
+#define _WSAIOR(x,y) (WS_IOC_OUT|(x)|(y))
+#define _WSAIOW(x,y) (WS_IOC_IN|(x)|(y))
+#define _WSAIORW(x,y) (WS_IOC_INOUT|(x)|(y))
+#define WS_SIO_ASSOCIATE_HANDLE _WSAIOW(WS_IOC_WS2,1)
+#define WS_SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(WS_IOC_WS2,2)
+#define WS_SIO_FIND_ROUTE _WSAIOR(WS_IOC_WS2,3)
+#define WS_SIO_FLUSH _WSAIO(WS_IOC_WS2,4)
+#define WS_SIO_GET_BROADCAST_ADDRESS _WSAIOR(WS_IOC_WS2,5)
+#define WS_SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(WS_IOC_WS2,6)
+#define WS_SIO_GET_QOS _WSAIORW(WS_IOC_WS2,7)
+#define WS_SIO_GET_GROUP_QOS _WSAIORW(WS_IOC_WS2,8)
+#define WS_SIO_MULTIPOINT_LOOPBACK _WSAIOW(WS_IOC_WS2,9)
+#define WS_SIO_MULTICAST_SCOPE _WSAIOW(WS_IOC_WS2,10)
+#define WS_SIO_SET_QOS _WSAIOW(WS_IOC_WS2,11)
+#define WS_SIO_SET_GROUP_QOS _WSAIOW(WS_IOC_WS2,12)
+#define WS_SIO_TRANSLATE_HANDLE _WSAIORW(WS_IOC_WS2,13)
+#define WS_SIO_ROUTING_INTERFACE_QUERY _WSAIORW(WS_IOC_WS2,20)
+#define WS_SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(WS_IOC_WS2,21)
+#define WS_SIO_ADDRESS_LIST_QUERY _WSAIOR(WS_IOC_WS2,22)
+#define WS_SIO_ADDRESS_LIST_CHANGE _WSAIO(WS_IOC_WS2,23)
+#define WS_SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(WS_IOC_WS2,24)
+#define WS_SIO_GET_INTERFACE_LIST WS__IOR('t', 127, ULONG)
+#else /* USE_WS_PREFIX */
+#undef IOC_VOID
+#undef IOC_IN
+#undef IOC_OUT
+#undef IOC_INOUT
+#define IOC_UNIX 0x00000000
+#define IOC_WS2 0x08000000
+#define IOC_PROTOCOL 0x10000000
+#define IOC_VENDOR 0x18000000
+#define IOC_VOID 0x20000000
+#define IOC_OUT 0x40000000
+#define IOC_IN 0x80000000
+#define IOC_INOUT (IOC_IN|IOC_OUT)
+#define _WSAIO(x,y) (IOC_VOID|(x)|(y))
+#define _WSAIOR(x,y) (IOC_OUT|(x)|(y))
+#define _WSAIOW(x,y) (IOC_IN|(x)|(y))
+#define _WSAIORW(x,y) (IOC_INOUT|(x)|(y))
+#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)
+#define SIO_ENABLE_CIRCULAR_QUEUEING _WSAIO(IOC_WS2,2)
+#define SIO_FIND_ROUTE _WSAIOR(IOC_WS2,3)
+#define SIO_FLUSH _WSAIO(IOC_WS2,4)
+#define SIO_GET_BROADCAST_ADDRESS _WSAIOR(IOC_WS2,5)
+#define SIO_GET_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2,6)
+#define SIO_GET_QOS _WSAIORW(IOC_WS2,7)
+#define SIO_GET_GROUP_QOS _WSAIORW(IOC_WS2,8)
+#define SIO_MULTIPOINT_LOOPBACK _WSAIOW(IOC_WS2,9)
+#define SIO_MULTICAST_SCOPE _WSAIOW(IOC_WS2,10)
+#define SIO_SET_QOS _WSAIOW(IOC_WS2,11)
+#define SIO_SET_GROUP_QOS _WSAIOW(IOC_WS2,12)
+#define SIO_TRANSLATE_HANDLE _WSAIORW(IOC_WS2,13)
+#define SIO_ROUTING_INTERFACE_QUERY _WSAIORW(IOC_WS2,20)
+#define SIO_ROUTING_INTERFACE_CHANGE _WSAIOW(IOC_WS2,21)
+#define SIO_ADDRESS_LIST_QUERY _WSAIOR(IOC_WS2,22)
+#define SIO_ADDRESS_LIST_CHANGE _WSAIO(IOC_WS2,23)
+#define SIO_QUERY_TARGET_PNP_HANDLE _WSAIOR(IOC_WS2,24)
+#define SIO_GET_INTERFACE_LIST _IOR ('t', 127, ULONG)
+#endif /* USE_WS_PREFIX */
+
+/* Constants for WSAIoctl() */
+#define WSA_FLAG_OVERLAPPED 0x01
+#define WSA_FLAG_MULTIPOINT_C_ROOT 0x02
+#define WSA_FLAG_MULTIPOINT_C_LEAF 0x04
+#define WSA_FLAG_MULTIPOINT_D_ROOT 0x08
+#define WSA_FLAG_MULTIPOINT_D_LEAF 0x10
+
+/* Constants for WSAJoinLeaf() */
+#define JL_SENDER_ONLY 0x01
+#define JL_RECEIVER_ONLY 0x02
+#define JL_BOTH 0x04
+
+
+#ifndef GUID_DEFINED
+#include <guiddef.h>
+#endif
+
+#define MAX_PROTOCOL_CHAIN 7
+#define BASE_PROTOCOL 1
+#define LAYERED_PROTOCOL 0
+
+typedef struct _WSAPROTOCOLCHAIN
+{
+ int ChainLen; /* the length of the chain, */
+ /* length = 0 means layered protocol, */
+ /* length = 1 means base protocol, */
+ /* length > 1 means protocol chain */
+ DWORD ChainEntries[MAX_PROTOCOL_CHAIN]; /* a list of dwCatalogEntryIds */
+} WSAPROTOCOLCHAIN, * LPWSAPROTOCOLCHAIN;
+
+/* constants used in dwProviderFlags from struct WSAPROTOCOL_INFO */
+#define PFL_MULTIPLE_PROTO_ENTRIES 0x00000001
+#define PFL_RECOMMENDED_PROTO_ENTRY 0x00000002
+#define PFL_HIDDEN 0x00000004
+#define PFL_MATCHES_PROTOCOL_ZERO 0x00000008
+
+#define XP1_CONNECTIONLESS 0x00000001
+#define XP1_GUARANTEED_DELIVERY 0x00000002
+#define XP1_GUARANTEED_ORDER 0x00000004
+#define XP1_MESSAGE_ORIENTED 0x00000008
+#define XP1_PSEUDO_STREAM 0x00000010
+#define XP1_GRACEFUL_CLOSE 0x00000020
+#define XP1_EXPEDITED_DATA 0x00000040
+#define XP1_CONNECT_DATA 0x00000080
+#define XP1_DISCONNECT_DATA 0x00000100
+#define XP1_SUPPORT_BROADCAST 0x00000200
+#define XP1_SUPPORT_MULTIPOINT 0x00000400
+#define XP1_MULTIPOINT_CONTROL_PLANE 0x00000800
+#define XP1_MULTIPOINT_DATA_PLANE 0x00001000
+#define XP1_QOS_SUPPORTED 0x00002000
+#define XP1_INTERRUPT 0x00004000
+#define XP1_UNI_SEND 0x00008000
+#define XP1_UNI_RECV 0x00010000
+#define XP1_IFS_HANDLES 0x00020000
+#define XP1_PARTIAL_MESSAGE 0x00040000
+
+#define BIGENDIAN 0x0000
+#define LITTLEENDIAN 0x0001
+
+#define SECURITY_PROTOCOL_NONE 0x0000
+
+#define WSAPROTOCOL_LEN 255
+typedef struct _WSAPROTOCOL_INFOA
+{
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ CHAR szProtocol[WSAPROTOCOL_LEN+1];
+} WSAPROTOCOL_INFOA, * LPWSAPROTOCOL_INFOA;
+
+typedef struct _WSAPROTOCOL_INFOW
+{
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ WCHAR szProtocol[WSAPROTOCOL_LEN+1];
+} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;
+
+DECL_WINELIB_TYPE_AW(WSAPROTOCOL_INFO)
+DECL_WINELIB_TYPE_AW(LPWSAPROTOCOL_INFO)
+
+typedef struct _WSANETWORKEVENTS
+{
+ LONG lNetworkEvents;
+ int iErrorCode[FD_MAX_EVENTS];
+} WSANETWORKEVENTS, *LPWSANETWORKEVENTS;
+
+typedef struct _WSANSClassInfoA
+{
+ LPSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+} WSANSCLASSINFOA, *PWSANSCLASSINFOA, *LPWSANSCLASSINFOA;
+
+typedef struct _WSANSClassInfoW
+{
+ LPSTR lpszName;
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPVOID lpValue;
+} WSANSCLASSINFOW, *PWSANSCLASSINFOW, *LPWSANSCLASSINFOW;
+
+DECL_WINELIB_TYPE_AW(WSANSCLASSINFO)
+DECL_WINELIB_TYPE_AW(PWSANSCLASSINFO)
+DECL_WINELIB_TYPE_AW(LPWSANSCLASSINFO)
+
+typedef struct _WSAServiceClassInfoA
+{
+ LPGUID lpServiceClassId;
+ LPSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOA lpClassInfos;
+} WSASERVICECLASSINFOA, *PWSASERVICECLASSINFOA, *LPWSASERVICECLASSINFOA;
+
+typedef struct _WSAServiceClassInfoW
+{
+ LPGUID lpServiceClassId;
+ LPWSTR lpszServiceClassName;
+ DWORD dwCount;
+ LPWSANSCLASSINFOW lpClassInfos;
+} WSASERVICECLASSINFOW, *PWSASERVICECLASSINFOW, *LPWSASERVICECLASSINFOW;
+
+
+DECL_WINELIB_TYPE_AW(WSASERVICECLASSINFO)
+DECL_WINELIB_TYPE_AW(PWSASERVICECLASSINFO)
+DECL_WINELIB_TYPE_AW(LPWSASERVICECLASSINFO)
+
+#define WSAEVENT HANDLE
+#define LPWSAEVENT LPHANDLE
+#define WSAOVERLAPPED OVERLAPPED
+typedef struct _OVERLAPPED* LPWSAOVERLAPPED;
+
+#define WSA_IO_PENDING (ERROR_IO_PENDING)
+#define WSA_IO_INCOMPLETE (ERROR_IO_INCOMPLETE)
+#define WSA_INVALID_HANDLE (ERROR_INVALID_HANDLE)
+#define WSA_INVALID_PARAMETER (ERROR_INVALID_PARAMETER)
+#define WSA_NOT_ENOUGH_MEMORY (ERROR_NOT_ENOUGH_MEMORY)
+#define WSA_OPERATION_ABORTED (ERROR_OPERATION_ABORTED)
+
+#define WSA_INVALID_EVENT ((WSAEVENT)NULL)
+#define WSA_MAXIMUM_WAIT_EVENTS (MAXIMUM_WAIT_OBJECTS)
+#define WSA_WAIT_FAILED ((DWORD)-1)
+#define WSA_WAIT_EVENT_0 (WAIT_OBJECT_0)
+#define WSA_WAIT_IO_COMPLETION (WAIT_IO_COMPLETION)
+#define WSA_WAIT_TIMEOUT (WAIT_TIMEOUT)
+#define WSA_INFINITE (INFINITE)
+
+typedef unsigned int GROUP;
+#define SG_UNCONSTRAINED_GROUP 0x01
+#define SG_CONSTRAINED_GROUP 0x02
+
+/*
+ * FLOWSPEC and SERVICETYPE should eventually move to qos.h
+ */
+
+typedef ULONG SERVICETYPE;
+
+typedef struct _FLOWSPEC {
+ unsigned int TokenRate;
+ unsigned int TokenBucketSize;
+ unsigned int PeakBandwidth;
+ unsigned int Latency;
+ unsigned int DelayVariation;
+ SERVICETYPE ServiceType;
+ unsigned int MaxSduSize;
+ unsigned int MinimumPolicedSize;
+ } FLOWSPEC, *PFLOWSPEC, *LPFLOWSPEC;
+
+typedef struct _QUALITYOFSERVICE {
+ FLOWSPEC SendingFlowspec;
+ FLOWSPEC ReceivingFlowspec;
+ WSABUF ProviderSpecific;
+ } QOS, *LPQOS;
+
+typedef int (CALLBACK *LPCONDITIONPROC)
+(
+ LPWSABUF lpCallerId,
+ LPWSABUF lpCallerData,
+ LPQOS lpSQOS,
+ LPQOS lpGQOS,
+ LPWSABUF lpCalleeId,
+ LPWSABUF lpCalleeData,
+ GROUP *g,
+ DWORD_PTR dwCallbackData
+);
+
+typedef void (CALLBACK *LPWSAOVERLAPPED_COMPLETION_ROUTINE)
+(
+ DWORD dwError,
+ DWORD cbTransferred,
+ LPWSAOVERLAPPED lpOverlapped,
+ DWORD dwFlags
+);
+
+#ifndef _tagBLOB_DEFINED
+#define _tagBLOB_DEFINED
+#define _BLOB_DEFINED
+#define _LPBLOB_DEFINED
+typedef struct _BLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+} BLOB, *LPBLOB;
+#endif
+
+/* addressfamily protocol pairs */
+typedef struct _AFPROTOCOLS {
+ INT iAddressFamily;
+ INT iProtocol;
+} AFPROTOCOLS, *PAFPROTOCOLS, *LPAFPROTOCOLS;
+
+/* client query definitions */
+typedef enum _WSAEcomparator {
+ COMP_EQUAL = 0,
+ COMP_NOTLESS
+} WSAECOMPARATOR, *PWSAECOMPARATOR, *LPWSAECOMPARATOR;
+
+typedef struct _WSAVersion {
+ DWORD dwVersion;
+ WSAECOMPARATOR ecHow;
+} WSAVERSION, *PWSAVERSION, *LPWSAVERSION;
+
+
+typedef struct _WSAQuerySetA {
+ DWORD dwSize;
+ LPSTR lpszServiceInstanceName;
+ LPGUID lpServiceClassId;
+ LPWSAVERSION lpVersion;
+ LPSTR lpszComment;
+ DWORD dwNameSpace;
+ LPGUID lpNSProviderId;
+ LPSTR lpszContext;
+ DWORD dwNumberOfProtocols;
+ LPAFPROTOCOLS lpafpProtocols;
+ LPSTR lpszQueryString;
+ DWORD dwNumberOfCsAddrs;
+ LPCSADDR_INFO lpcsaBuffer;
+ DWORD dwOutputFlags;
+ LPBLOB lpBlob;
+} WSAQUERYSETA, *PWSAQUERYSETA, *LPWSAQUERYSETA;
+
+typedef struct _WSAQuerySetW {
+ DWORD dwSize;
+ LPWSTR lpszServiceInstanceName;
+ LPGUID lpServiceClassId;
+ LPWSAVERSION lpVersion;
+ LPWSTR lpszComment;
+ DWORD dwNameSpace;
+ LPGUID lpNSProviderId;
+ LPWSTR lpszContext;
+ DWORD dwNumberOfProtocols;
+ LPAFPROTOCOLS lpafpProtocols;
+ LPWSTR lpszQueryString;
+ DWORD dwNumberOfCsAddrs;
+ LPCSADDR_INFO lpcsaBuffer;
+ DWORD dwOutputFlags;
+ LPBLOB lpBlob;
+} WSAQUERYSETW, *PWSAQUERYSETW, *LPWSAQUERYSETW;
+
+DECL_WINELIB_TYPE_AW(WSAQUERYSET)
+DECL_WINELIB_TYPE_AW(PWSAQUERYSET)
+DECL_WINELIB_TYPE_AW(LPWSAQUERYSET)
+
+typedef enum _WSAESETSERVICEOP {
+ RNRSERVICE_REGISTER = 0,
+ RNRSERVICE_DEREGISTER,
+ RNRSERVICE_DELETE
+} WSAESETSERVICEOP, *PWSAESETSERVICEOP, *LPWSAESETSERVICEOP;
+
+typedef struct _WSANAMESPACE_INFOA {
+ GUID NSProviderId;
+ DWORD dwNameSpace;
+ BOOL fActive;
+ DWORD dwVersion;
+ LPSTR lpszIdentifier;
+} WSANAMESPACE_INFOA, *PWSANAMESPACE_INFOA, *LPWSANAMESPACE_INFOA;
+
+typedef struct _WSANAMESPACE_INFOW {
+ GUID NSProviderId;
+ DWORD dwNameSpace;
+ BOOL fActive;
+ DWORD dwVersion;
+ LPWSTR lpszIdentifier;
+} WSANAMESPACE_INFOW, *PWSANAMESPACE_INFOW, *LPWSANAMESPACE_INFOW;
+
+DECL_WINELIB_TYPE_AW(WSANAMESPACE_INFO)
+DECL_WINELIB_TYPE_AW(PWSANAMESPACE_INFO)
+DECL_WINELIB_TYPE_AW(LPWSANAMESPACE_INFO)
+
+typedef enum _WSACOMPLETIONTYPE {
+ NSP_NOTIFY_IMMEDIATELY = 0,
+ NSP_NOTIFY_HWND = 1,
+ NSP_NOTIFY_EVENT = 2,
+ NSP_NOTIFY_PORT = 3,
+ NSP_NOTIFY_APC = 4
+} WSACOMPLETIONTYPE, * PWSACOMPLETIONTYPE, * LPWSACOMPLETIONTYPE;
+
+typedef struct _WSACOMPLETION {
+ WSACOMPLETIONTYPE Type;
+ union {
+ struct {
+ HWND hWnd;
+ UINT uMsg;
+ WPARAM context;
+ } WindowMessage;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ } Event;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
+ } Apc;
+ struct {
+ LPWSAOVERLAPPED lpOverlapped;
+ HANDLE hPort;
+ ULONG_PTR Key;
+ } Port;
+ } Parameters;
+} WSACOMPLETION, *PWSACOMPLETION, *LPWSACOMPLETION;
+
+/*
+ * Winsock Function Typedefs
+ *
+ * Remember to keep this section in sync with the
+ * "Prototypes" section in winsock.h.
+ */
+#if WS_API_TYPEDEFS
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYADDR)(HWND,WS(u_int),const char*,int,int,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETHOSTBYNAME)(HWND,WS(u_int),const char*,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNAME)(HWND,WS(u_int),const char*,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETPROTOBYNUMBER)(HWND,WS(u_int),int,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYNAME)(HWND,WS(u_int),const char*,const char*,char*,int);
+typedef HANDLE (WINAPI *LPFN_WSAASYNCGETSERVBYPORT)(HWND,WS(u_int),int,const char*,char*,int);
+typedef int (WINAPI *LPFN_WSAASYNCSELECT)(SOCKET,HWND,WS(u_int),LONG);
+typedef int (WINAPI *LPFN_WSACANCELASYNCREQUEST)(HANDLE);
+typedef int (WINAPI *LPFN_WSACANCELBLOCKINGCALL)(void);
+typedef int (WINAPI *LPFN_WSACLEANUP)(void);
+typedef int (WINAPI *LPFN_WSAGETLASTERROR)(void);
+typedef BOOL (WINAPI *LPFN_WSAISBLOCKING)(void);
+typedef FARPROC (WINAPI *LPFN_WSASETBLOCKINGHOOK)(FARPROC);
+typedef void (WINAPI *LPFN_WSASETLASTERROR)(int);
+typedef int (WINAPI *LPFN_WSASTARTUP)(WORD,LPWSADATA);
+typedef int (WINAPI *LPFN_WSAUNHOOKBLOCKINGHOOK)(void);
+
+typedef SOCKET (WINAPI *LPFN_ACCEPT)(SOCKET,struct WS(sockaddr)*,int*);
+typedef int (WINAPI *LPFN_BIND)(SOCKET,const struct WS(sockaddr)*,int);
+typedef int (WINAPI *LPFN_CLOSESOCKET)(SOCKET);
+typedef int (WINAPI *LPFN_CONNECT)(SOCKET,const struct WS(sockaddr)*,int);
+typedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYADDR)(const char*,int,int);
+typedef struct WS(hostent)* (WINAPI *LPFN_GETHOSTBYNAME)(const char*);
+typedef int (WINAPI *LPFN_GETHOSTNAME)(char*,int);
+typedef int (WINAPI *LPFN_GETPEERNAME)(SOCKET,struct WS(sockaddr)*,int*);
+typedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNAME)(const char*);
+typedef struct WS(protoent)* (WINAPI *LPFN_GETPROTOBYNUMBER)(int);
+#ifdef WS_DEFINE_SELECT
+typedef int (WINAPI* LPFN_SELECT)(int,WS(fd_set)*,WS(fd_set)*,WS(fd_set)*,const struct WS(timeval)*);
+#endif
+typedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYNAME)(const char*,const char*);
+typedef struct WS(servent)* (WINAPI *LPFN_GETSERVBYPORT)(int,const char*);
+typedef int (WINAPI *LPFN_GETSOCKNAME)(SOCKET,struct WS(sockaddr)*,int*);
+typedef int (WINAPI *LPFN_GETSOCKOPT)(SOCKET,int,int,char*,int*);
+typedef ULONG (WINAPI *LPFN_HTONL)(ULONG);
+typedef WS(u_short) (WINAPI *LPFN_HTONS)(WS(u_short));
+typedef ULONG (WINAPI *LPFN_INET_ADDR)(const char*);
+typedef char* (WINAPI *LPFN_INET_NTOA)(struct WS(in_addr));
+typedef int (WINAPI *LPFN_IOCTLSOCKET)(SOCKET,LONG,ULONG*);
+typedef int (WINAPI *LPFN_LISTEN)(SOCKET,int);
+typedef ULONG (WINAPI *LPFN_NTOHL)(ULONG);
+typedef WS(u_short) (WINAPI *LPFN_NTOHS)(WS(u_short));
+typedef int (WINAPI *LPFN_RECV)(SOCKET,char*,int,int);
+typedef int (WINAPI *LPFN_RECVFROM)(SOCKET,char*,int,int,struct WS(sockaddr)*,int*);
+typedef int (WINAPI *LPFN_SEND)(SOCKET,const char*,int,int);
+typedef int (WINAPI *LPFN_SENDTO)(SOCKET,const char*,int,int,const struct WS(sockaddr)*,int);
+typedef int (WINAPI *LPFN_SETSOCKOPT)(SOCKET,int,int,const char*,int);
+typedef int (WINAPI *LPFN_SHUTDOWN)(SOCKET,int);
+typedef SOCKET (WINAPI *LPFN_SOCKET)(int,int,int);
+#endif /* WS_API_TYPEDEFS */
+
+
+
+/*
+ * Winsock2 Prototypes
+ *
+ * Remember to keep this section in sync with the
+ * "Winsock2 Function Typedefs" section below.
+ */
+#if WS_API_PROTOTYPES
+SOCKET WINAPI WSAAccept(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR);
+INT WINAPI WSAAddressToStringA(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD);
+INT WINAPI WSAAddressToStringW(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);
+#define WSAAddressToString WINELIB_NAME_AW(WSAAddressToString)
+BOOL WINAPI WSACloseEvent(WSAEVENT);
+int WINAPI WSAConnect(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS);
+WSAEVENT WINAPI WSACreateEvent(void);
+INT WINAPI WSADuplicateSocketA(SOCKET,DWORD,LPWSAPROTOCOL_INFOA);
+INT WINAPI WSADuplicateSocketW(SOCKET,DWORD,LPWSAPROTOCOL_INFOW);
+#define WSADuplicateSocket WINELIB_NAME_AW(WSADuplicateSocket)
+INT WINAPI WSAEnumNameSpaceProvidersA(LPDWORD,LPWSANAMESPACE_INFOA);
+INT WINAPI WSAEnumNameSpaceProvidersW(LPDWORD,LPWSANAMESPACE_INFOW);
+#define WSAEnumNameSpaceProviders WINELIB_NAME_AW(WSAEnumNameSpaceProviders)
+int WINAPI WSAEnumNetworkEvents(SOCKET,WSAEVENT,LPWSANETWORKEVENTS);
+int WINAPI WSAEnumProtocolsA(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD);
+int WINAPI WSAEnumProtocolsW(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD);
+#define WSAEnumProtocols WINELIB_NAME_AW(WSAEnumProtocols)
+int WINAPI WSAEventSelect(SOCKET,WSAEVENT,LONG);
+BOOL WINAPI WSAGetOverlappedResult(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD);
+BOOL WINAPI WSAGetQOSByName(SOCKET,LPWSABUF,LPQOS);
+INT WINAPI WSAGetServiceClassInfoA(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA);
+INT WINAPI WSAGetServiceClassInfoW(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
+#define WSAGetServiceClassInfo WINELIB_NAME_AW(WSAGetServiceClassInfo)
+INT WINAPI WSAGetServiceClassNameByClassIdA(LPGUID,LPSTR,LPDWORD);
+INT WINAPI WSAGetServiceClassNameByClassIdW(LPGUID,LPWSTR,LPDWORD);
+#define WSAGetServiceClassNameByClassId WINELIB_NAME_AW(WSAGetServiceClassNameByClassId)
+int WINAPI WSAHtonl(SOCKET,ULONG,ULONG*);
+int WINAPI WSAHtons(SOCKET,WS(u_short),WS(u_short)*);
+int WINAPI WSAInstallServiceClassA(LPWSASERVICECLASSINFOA);
+int WINAPI WSAInstallServiceClassW(LPWSASERVICECLASSINFOW);
+#define WSAInstallServiceClass WINELIB_NAME_AW(WSAInstallServiceClass)
+int WINAPI WSAIoctl(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+SOCKET WINAPI WSAJoinLeaf(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);
+INT WINAPI WSALookupServiceBeginA(LPWSAQUERYSETA,DWORD,LPHANDLE);
+INT WINAPI WSALookupServiceBeginW(LPWSAQUERYSETW,DWORD,LPHANDLE);
+#define WSALookupServiceBegin WINELIB_NAME_AW(WSALookupServiceBegin)
+INT WINAPI WSALookupServiceEnd(HANDLE);
+INT WINAPI WSALookupServiceNextA(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA);
+INT WINAPI WSALookupServiceNextW(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW);
+#define WSALookupServiceNext WINELIB_NAME_AW(WSALookupServiceNext)
+int WINAPI WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);
+int WINAPI WSANtohl(SOCKET,ULONG,ULONG*);
+int WINAPI WSANtohs(SOCKET,WS(u_short),WS(u_short)*);
+INT WINAPI WSAProviderConfigChange(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+int WINAPI WSARecv(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+int WINAPI WSARecvDisconnect(SOCKET,LPWSABUF);
+int WINAPI WSARecvFrom(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+INT WINAPI WSARemoveServiceClass(LPGUID);
+BOOL WINAPI WSAResetEvent(WSAEVENT);
+int WINAPI WSASend(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+int WINAPI WSASendDisconnect(SOCKET,LPWSABUF);
+int WINAPI WSASendTo(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+BOOL WINAPI WSASetEvent(WSAEVENT);
+INT WINAPI WSASetServiceA(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD);
+INT WINAPI WSASetServiceW(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
+#define WSASetService WINELIB_NAME_AW(WSASetService)
+SOCKET WINAPI WSASocketA(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD);
+SOCKET WINAPI WSASocketW(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD);
+#define WSASocket WINELIB_NAME_AW(WSASocket)
+INT WINAPI WSAStringToAddressA(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);
+INT WINAPI WSAStringToAddressW(LPWSTR,INT,LPWSAPROTOCOL_INFOW,LPSOCKADDR,LPINT);
+#define WSAStringToAddress WINELIB_NAME_AW(WSAStringToAddress)
+DWORD WINAPI WSAWaitForMultipleEvents(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL);
+#endif /* WS_API_PROTOTYPES */
+
+
+
+/*
+ * Winsock2 Function Typedefs
+ *
+ * Remember to keep this section in sync with the
+ * "Winsock2 Prototypes" section above.
+ */
+#if WS_API_TYPEDEFS
+typedef SOCKET (WINAPI *LPFN_WSAACCEPT)(SOCKET,struct WS(sockaddr)*,LPINT,LPCONDITIONPROC,DWORD_PTR);
+typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGA)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOA,LPSTR,LPDWORD);
+typedef INT (WINAPI *LPFN_WSAADDRESSTOSTRINGW)(LPSOCKADDR,DWORD,LPWSAPROTOCOL_INFOW,LPWSTR,LPDWORD);
+#define LPFN_WSAADDRESSTOSTRING WINELIB_NAME_AW(LPFN_WSAADDRESSTOSTRING)
+typedef BOOL (WINAPI *LPFN_WSACLOSEEVENT)(WSAEVENT);
+typedef int (WINAPI *LPFN_WSACONNECT)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS);
+typedef WSAEVENT (WINAPI *LPFN_WSACREATEEVENT)(void);
+typedef INT (WINAPI *LPFN_WSADUPLICATESOCKETA)(SOCKET,DWORD,LPWSAPROTOCOL_INFOA);
+typedef INT (WINAPI *LPFN_WSADUPLICATESOCKETW)(SOCKET,DWORD,LPWSAPROTOCOL_INFOW);
+#define LPFN_WSADUPLICATESOCKET WINELIB_NAME_AW(LPFN_WSADUPLICATESOCKET)
+typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSA)(LPDWORD,LPWSANAMESPACE_INFOA);
+typedef INT (WINAPI *LPFN_WSAENUMNAMESPACEPROVIDERSW)(LPDWORD,LPWSANAMESPACE_INFOW);
+#define LPFN_WSAENUMNAMESPACEPROVIDERS WINELIB_NAME_AW(LPFN_WSAENUMNAMESPACEPROVIDERS)
+typedef int (WINAPI *LPFN_WSAENUMNETWORKEVENTS)(SOCKET,WSAEVENT,LPWSANETWORKEVENTS);
+typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSA)(LPINT,LPWSAPROTOCOL_INFOA,LPDWORD);
+typedef int (WINAPI *LPFN_WSAENUMPROTOCOLSW)(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD);
+#define LPFN_WSAENUMPROTOCOLS WINELIB_NAME_AW(LPFN_WSAENUMPROTOCOLS)
+typedef int (WINAPI *LPFN_WSAEVENTSELECT)(SOCKET,WSAEVENT,LONG);
+typedef BOOL (WINAPI *LPFN_WSAGETOVERLAPPEDRESULT)(SOCKET,LPWSAOVERLAPPED,LPDWORD,BOOL,LPDWORD);
+typedef BOOL (WINAPI *LPFN_WSAGETQOSBYNAME)(SOCKET,LPWSABUF,LPQOS);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOA)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOA);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSINFOW)(LPGUID,LPGUID,LPDWORD,LPWSASERVICECLASSINFOW);
+#define LPFN_LPFNWSAGETSERVICECLASSINFO WINELIB_NAME_AW(LPFN_LPFNWSAGETSERVICECLASSINFO)
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA)(LPGUID,LPSTR,LPDWORD);
+typedef INT (WINAPI *LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW)(LPGUID,LPWSTR,LPDWORD);
+#define LPFN_WSAGETSERVICECLASSNAMEBYCLASSID WINELIB_NAME_AW(LPFN_WSAGETSERVICECLASSNAMEBYCLASSID)
+typedef int (WINAPI *LPFN_WSAHTONL)(SOCKET,ULONG,ULONG*);
+typedef int (WINAPI *LPFN_WSAHTONS)(SOCKET,WS(u_short),WS(u_short)*);
+typedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSA)(LPWSASERVICECLASSINFOA);
+typedef int (WINAPI *LPFN_WSAINSTALLSERVICECLASSW)(LPWSASERVICECLASSINFOW);
+typedef int (WINAPI *LPFN_WSAIOCTL)(SOCKET,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSAJOINLEAF)(SOCKET,const struct WS(sockaddr)*,int,LPWSABUF,LPWSABUF,LPQOS,LPQOS,DWORD);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINA)(LPWSAQUERYSETA,DWORD,LPHANDLE);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEBEGINW)(LPWSAQUERYSETW,DWORD,LPHANDLE);
+#define LPFN_WSALOOKUPSERVICEBEGIN WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICEBEGIN);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICEEND)(HANDLE);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTA)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETA);
+typedef INT (WINAPI *LPFN_WSALOOKUPSERVICENEXTW)(HANDLE,DWORD,LPDWORD,LPWSAQUERYSETW);
+#define LPFN_WSALOOKUPSERVICENEXT WINELIB_NAME_AW(LPFN_WSALOOKUPSERVICENEXT)
+typedef int (WINAPI *LPFN_WSANSPIOCTL)(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION);
+typedef int (WINAPI *LPFN_WSANTOHL)(SOCKET,ULONG,ULONG*);
+typedef int (WINAPI *LPFN_WSANTOHS)(SOCKET,WS(u_short),WS(u_short)*);
+typedef INT (WINAPI *LPFN_WSAPROVIDERCONFIGCHANGE)(LPHANDLE,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSARECV)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSARECVDISCONNECT)(SOCKET,LPWSABUF);
+typedef int (WINAPI *LPFN_WSARECVFROM)(SOCKET,LPWSABUF,DWORD,LPDWORD,LPDWORD,struct WS(sockaddr)*,LPINT,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef INT (WINAPI *LPFN_WSAREMOVESERVICECLASS)(LPGUID);
+typedef BOOL (WINAPI *LPFN_WSARESETEVENT)(WSAEVENT);
+typedef int (WINAPI *LPFN_WSASEND)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef int (WINAPI *LPFN_WSASENDDISCONNECT)(SOCKET,LPWSABUF);
+typedef int (WINAPI *LPFN_WSASENDTO)(SOCKET,LPWSABUF,DWORD,LPDWORD,DWORD,const struct WS(sockaddr)*,int,LPWSAOVERLAPPED,LPWSAOVERLAPPED_COMPLETION_ROUTINE);
+typedef BOOL (WINAPI *LPFN_WSASETEVENT)(WSAEVENT);
+typedef INT (WINAPI *LPFN_WSASETSERVICEA)(LPWSAQUERYSETA,WSAESETSERVICEOP,DWORD);
+typedef INT (WINAPI *LPFN_WSASETSERVICEW)(LPWSAQUERYSETW,WSAESETSERVICEOP,DWORD);
+#define LPFN_WSASETSERVICE WINELIB_NAME_AW(LPFN_WSASETSERVICE)
+typedef SOCKET (WINAPI *LPFN_WSASOCKETA)(int,int,int,LPWSAPROTOCOL_INFOA,GROUP,DWORD);
+typedef SOCKET (WINAPI *LPFN_WSASOCKETW)(int,int,int,LPWSAPROTOCOL_INFOW,GROUP,DWORD);
+typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSA)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);
+typedef INT (WINAPI *LPFN_WSASTRINGTOADDRESSW)(LPSTR,INT,LPWSAPROTOCOL_INFOA,LPSOCKADDR,LPINT);
+#define LPFN_WSASOCKET WINELIB_NAME_AW(LPFN_WSASOCKET)
+#define LPFN_WSASTRINGTOADDRESS WINELIB_NAME_AW(LPFN_WSASTRINGTOADDRESS)
+typedef DWORD (WINAPI *LPFN_WSAWAITFORMULTIPLEEVENTS)(DWORD,const WSAEVENT*,BOOL,DWORD,BOOL);
+#endif /* WS_API_TYPEDEFS */
+
+
+/* Condition function return values */
+#define CF_ACCEPT 0x0000
+#define CF_REJECT 0x0001
+#define CF_DEFER 0x0002
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef WS
+#undef WS_API_PROTOTYPES
+#undef WS_API_TYPEDEFS
+
+#endif /* __WINSOCK2API__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h
new file mode 100644
index 00000000..fae9a3f2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winspool.h
@@ -0,0 +1,1822 @@
+/* Definitions for printing
+ *
+ * Copyright 1998 Huw Davies, Andreas Mohr
+ *
+ * Portions Copyright (c) 1999 Corel Corporation
+ * (Paul Quinn, Albert Den Haan)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSPOOL_H
+#define __WINE_WINSPOOL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DEFINES */
+
+#define PRINTER_ATTRIBUTE_QUEUED 0x00000001
+#define PRINTER_ATTRIBUTE_DIRECT 0x00000002
+#define PRINTER_ATTRIBUTE_DEFAULT 0x00000004
+#define PRINTER_ATTRIBUTE_SHARED 0x00000008
+#define PRINTER_ATTRIBUTE_NETWORK 0x00000010
+#define PRINTER_ATTRIBUTE_HIDDEN 0x00000020
+#define PRINTER_ATTRIBUTE_LOCAL 0x00000040
+#define PRINTER_ATTRIBUTE_ENABLE_DEVQ 0x00000080
+#define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS 0x00000100
+#define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
+#define PRINTER_ATTRIBUTE_WORK_OFFLINE 0x00000400
+#define PRINTER_ATTRIBUTE_ENABLE_BIDI 0x00000800
+#define PRINTER_ATTRIBUTE_RAW_ONLY 0x00001000
+#define PRINTER_ATTRIBUTE_PUBLISHED 0x00002000
+
+#define PRINTER_CONTROL_PAUSE 1
+#define PRINTER_CONTROL_RESUME 2
+#define PRINTER_CONTROL_PURGE 3
+#define PRINTER_CONTROL_SET_STATUS 4
+
+#define PRINTER_ENUM_DEFAULT 0x00000001
+#define PRINTER_ENUM_LOCAL 0x00000002
+#define PRINTER_ENUM_CONNECTIONS 0x00000004
+#define PRINTER_ENUM_FAVORITE 0x00000004
+#define PRINTER_ENUM_NAME 0x00000008
+#define PRINTER_ENUM_REMOTE 0x00000010
+#define PRINTER_ENUM_SHARED 0x00000020
+#define PRINTER_ENUM_NETWORK 0x00000040
+
+#define PRINTER_ENUM_EXPAND 0x00004000
+#define PRINTER_ENUM_CONTAINER 0x00008000
+
+#define PRINTER_ENUM_ICONMASK 0x00ff0000
+#define PRINTER_ENUM_ICON1 0x00010000
+#define PRINTER_ENUM_ICON2 0x00020000
+#define PRINTER_ENUM_ICON3 0x00040000
+#define PRINTER_ENUM_ICON4 0x00080000
+#define PRINTER_ENUM_ICON5 0x00100000
+#define PRINTER_ENUM_ICON6 0x00200000
+#define PRINTER_ENUM_ICON7 0x00400000
+#define PRINTER_ENUM_ICON8 0x00800000
+#define PRINTER_ENUM_HIDE 0x01000000
+
+
+/* various printer statuses */
+#define PRINTER_STATUS_PAUSED 0x00000001
+#define PRINTER_STATUS_ERROR 0x00000002
+#define PRINTER_STATUS_PENDING_DELETION 0x00000004
+#define PRINTER_STATUS_PAPER_JAM 0x00000008
+#define PRINTER_STATUS_PAPER_OUT 0x00000010
+#define PRINTER_STATUS_MANUAL_FEED 0x00000020
+#define PRINTER_STATUS_PAPER_PROBLEM 0x00000040
+#define PRINTER_STATUS_OFFLINE 0x00000080
+#define PRINTER_STATUS_IO_ACTIVE 0x00000100
+#define PRINTER_STATUS_BUSY 0x00000200
+#define PRINTER_STATUS_PRINTING 0x00000400
+#define PRINTER_STATUS_OUTPUT_BIN_FULL 0x00000800
+#define PRINTER_STATUS_NOT_AVAILABLE 0x00001000
+#define PRINTER_STATUS_WAITING 0x00002000
+#define PRINTER_STATUS_PROCESSING 0x00004000
+#define PRINTER_STATUS_INITIALIZING 0x00008000
+#define PRINTER_STATUS_WARMING_UP 0x00010000
+#define PRINTER_STATUS_TONER_LOW 0x00020000
+#define PRINTER_STATUS_NO_TONER 0x00040000
+#define PRINTER_STATUS_PAGE_PUNT 0x00080000
+#define PRINTER_STATUS_USER_INTERVENTION 0x00100000
+#define PRINTER_STATUS_OUT_OF_MEMORY 0x00200000
+#define PRINTER_STATUS_DOOR_OPEN 0x00400000
+#define PRINTER_STATUS_SERVER_UNKNOWN 0x00800000
+#define PRINTER_STATUS_POWER_SAVE 0x01000000
+#define PRINTER_STATUS_SERVER_OFFLINE 0x02000000
+#define PRINTER_STATUS_DRIVER_UPDATE_NEEDED 0x04000000
+
+#define NO_PRIORITY 0
+#define MAX_PRIORITY 99
+#define MIN_PRIORITY 1
+#define DEF_PRIORITY 1
+
+#define JOB_CONTROL_PAUSE 1
+#define JOB_CONTROL_RESUME 2
+#define JOB_CONTROL_CANCEL 3
+#define JOB_CONTROL_RESTART 4
+#define JOB_CONTROL_DELETE 5
+#define JOB_CONTROL_SENT_TO_PRINTER 6
+#define JOB_CONTROL_LAST_PAGE_EJECTED 7
+
+#define JOB_STATUS_PAUSED 0x0001
+#define JOB_STATUS_ERROR 0x0002
+#define JOB_STATUS_DELETING 0x0004
+#define JOB_STATUS_SPOOLING 0x0008
+#define JOB_STATUS_PRINTING 0x0010
+#define JOB_STATUS_OFFLINE 0x0020
+#define JOB_STATUS_PAPEROUT 0x0040
+#define JOB_STATUS_PRINTED 0x0080
+#define JOB_STATUS_DELETED 0x0100
+#define JOB_STATUS_BLOCKED_DEVQ 0x0200
+#define JOB_STATUS_USER_INTERVENTION 0x0400
+
+#define JOB_POSITION_UNSPECIFIED 1
+
+#define DI_CHANNEL 1
+#define DI_READ_SPOOL_JOB 3
+
+#define FORM_USER 0
+#define FORM_BUILTIN 1
+#define FORM_PRINTER 2
+
+#define PORT_TYPE_WRITE 1
+#define PORT_TYPE_READ 2
+#define PORT_TYPE_REDIRECTED 4
+#define PORT_TYPE_NET_ATTACHED 8
+
+#define PORT_STATUS_TYPE_ERROR 1
+#define PORT_STATUS_TYPE_WARNING 2
+#define PORT_STATUS_TYPE_INFO 3
+
+#define PORT_STATUS_OFFLINE 1
+#define PORT_STATUS_PAPER_JAM 2
+#define PORT_STATUS_PAPER_OUT 3
+#define PORT_STATUS_OUTPUT_BIN_FULL 4
+#define PORT_STATUS_PAPER_PROBLEM 5
+#define PORT_STATUS_NO_TONER 6
+#define PORT_STATUS_DOOR_OPEN 7
+#define PORT_STATUS_USER_INTERVENTION 8
+#define PORT_STATUS_OUT_OF_MEMORY 9
+#define PORT_STATUS_TONER_LOW 10
+#define PORT_STATUS_WARMING_UP 11
+#define PORT_STATUS_POWER_SAVE 12
+
+#define PRINTER_NOTIFY_TYPE 0
+#define JOB_NOTIFY_TYPE 1
+
+#define PRINTER_NOTIFY_FIELD_SERVER_NAME 0x00
+#define PRINTER_NOTIFY_FIELD_PRINTER_NAME 0x01
+#define PRINTER_NOTIFY_FIELD_SHARE_NAME 0x02
+#define PRINTER_NOTIFY_FIELD_PORT_NAME 0x03
+#define PRINTER_NOTIFY_FIELD_DRIVER_NAME 0x04
+#define PRINTER_NOTIFY_FIELD_COMMENT 0x05
+#define PRINTER_NOTIFY_FIELD_LOCATION 0x06
+#define PRINTER_NOTIFY_FIELD_DEVMODE 0x07
+#define PRINTER_NOTIFY_FIELD_SEPFILE 0x08
+#define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR 0x09
+#define PRINTER_NOTIFY_FIELD_PARAMETERS 0x0a
+#define PRINTER_NOTIFY_FIELD_DATATYPE 0x0b
+#define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c
+#define PRINTER_NOTIFY_FIELD_ATTRIBUTES 0x0d
+#define PRINTER_NOTIFY_FIELD_PRIORITY 0x0e
+#define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY 0x0f
+#define PRINTER_NOTIFY_FIELD_START_TIME 0x10
+#define PRINTER_NOTIFY_FIELD_UNTIL_TIME 0x11
+#define PRINTER_NOTIFY_FIELD_STATUS 0x12
+#define PRINTER_NOTIFY_FIELD_STATUS_STRING 0x13
+#define PRINTER_NOTIFY_FIELD_CJOBS 0x14
+#define PRINTER_NOTIFY_FIELD_AVERAGE_PPM 0x15
+#define PRINTER_NOTIFY_FIELD_TOTAL_PAGES 0x16
+#define PRINTER_NOTIFY_FIELD_PAGES_PRINTED 0x17
+#define PRINTER_NOTIFY_FIELD_TOTAL_BYTES 0x18
+#define PRINTER_NOTIFY_FIELD_BYTES_PRINTED 0x19
+
+#define JOB_NOTIFY_FIELD_PRINTER_NAME 0x00
+#define JOB_NOTIFY_FIELD_MACHINE_NAME 0x01
+#define JOB_NOTIFY_FIELD_PORT_NAME 0x02
+#define JOB_NOTIFY_FIELD_USER_NAME 0x03
+#define JOB_NOTIFY_FIELD_NOTIFY_NAME 0x04
+#define JOB_NOTIFY_FIELD_DATATYPE 0x05
+#define JOB_NOTIFY_FIELD_PRINT_PROCESSOR 0x06
+#define JOB_NOTIFY_FIELD_PARAMETERS 0x07
+#define JOB_NOTIFY_FIELD_DRIVER_NAME 0x08
+#define JOB_NOTIFY_FIELD_DEVMODE 0x09
+#define JOB_NOTIFY_FIELD_STATUS 0x0a
+#define JOB_NOTIFY_FIELD_STATUS_STRING 0x0b
+#define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR 0x0c
+#define JOB_NOTIFY_FIELD_DOCUMENT 0x0d
+#define JOB_NOTIFY_FIELD_PRIORITY 0x0e
+#define JOB_NOTIFY_FIELD_POSITION 0x0f
+#define JOB_NOTIFY_FIELD_SUBMITTED 0x10
+#define JOB_NOTIFY_FIELD_START_TIME 0x11
+#define JOB_NOTIFY_FIELD_UNTIL_TIME 0x12
+#define JOB_NOTIFY_FIELD_TIME 0x13
+#define JOB_NOTIFY_FIELD_TOTAL_PAGES 0x14
+#define JOB_NOTIFY_FIELD_PAGES_PRINTED 0x15
+#define JOB_NOTIFY_FIELD_TOTAL_BYTES 0x16
+#define JOB_NOTIFY_FIELD_BYTES_PRINTED 0x17
+
+#define PRINTER_NOTIFY_OPTIONS_REFRESH 1
+#define PRINTER_NOTIFY_INFO_DISCARDED 1
+
+#define PRINTER_CHANGE_ADD_PRINTER 0x00000001
+#define PRINTER_CHANGE_SET_PRINTER 0x00000002
+#define PRINTER_CHANGE_DELETE_PRINTER 0x00000004
+#define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 0x00000008
+#define PRINTER_CHANGE_PRINTER 0x000000ff
+#define PRINTER_CHANGE_ADD_JOB 0x00000100
+#define PRINTER_CHANGE_SET_JOB 0x00000200
+#define PRINTER_CHANGE_DELETE_JOB 0x00000400
+#define PRINTER_CHANGE_WRITE_JOB 0x00000800
+#define PRINTER_CHANGE_JOB 0x0000ff00
+#define PRINTER_CHANGE_ADD_FORM 0x00010000
+#define PRINTER_CHANGE_SET_FORM 0x00020000
+#define PRINTER_CHANGE_DELETE_FORM 0x00040000
+#define PRINTER_CHANGE_FORM 0x00070000
+#define PRINTER_CHANGE_ADD_PORT 0x00100000
+#define PRINTER_CHANGE_CONFIGURE_PORT 0x00200000
+#define PRINTER_CHANGE_DELETE_PORT 0x00400000
+#define PRINTER_CHANGE_PORT 0x00700000
+#define PRINTER_CHANGE_ADD_PRINT_PROCESSOR 0x01000000
+#define PRINTER_CHANGE_DELETE_PRINTER_PROCESSOR 0x04000000
+#define PRINTER_CHANGE_PRINT_PROCESSOR 0x07000000
+#define PRINTER_CHANGE_ADD_PRINTER_DRIVER 0x10000000
+#define PRINTER_CHANGE_SET_PRINTER_DRIVER 0x20000000
+#define PRINTER_CHANGE_DELETE_PRINTER_DRIVER 0x40000000
+#define PRINTER_CHANGE_PRINTER_DRIVER 0x70000000
+#define PRINTER_CHANGE_TIMEOUT 0x80000000
+#define PRINTER_CHANGE_ALL 0x7777ffff
+
+#define PRINTER_ERROR_INFORMATION 0x80000000
+#define PRINTER_ERROR_WARNING 0x40000000
+#define PRINTER_ERROR_SEVERE 0x20000000
+
+#define PRINTER_ERROR_OUTODPAPER 0x00000001
+#define PRINTER_ERROR_JAM 0x00000002
+#define PRINTER_ERROR_OUTOFTONER 0x00000004
+
+/* Access Rights for Printserver, Printers and Printjobs */
+#define SERVER_ACCESS_ADMINISTER 0x00000001
+#define SERVER_ACCESS_ENUMERATE 0x00000002
+#define SERVER_READ (STANDARD_RIGHTS_READ | SERVER_ACCESS_ENUMERATE)
+#define SERVER_WRITE (STANDARD_RIGHTS_WRITE | \
+ SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
+#define SERVER_EXECUTE (STANDARD_RIGHTS_EXECUTE | SERVER_ACCESS_ENUMERATE)
+#define SERVER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ SERVER_ACCESS_ADMINISTER | SERVER_ACCESS_ENUMERATE)
+
+#define PRINTER_ACCESS_ADMINISTER 0x00000004
+#define PRINTER_ACCESS_USE 0x00000008
+#define PRINTER_READ (STANDARD_RIGHTS_READ | PRINTER_ACCESS_USE)
+#define PRINTER_WRITE (STANDARD_RIGHTS_WRITE | PRINTER_ACCESS_USE)
+#define PRINTER_EXECUTE (STANDARD_RIGHTS_EXECUTE | PRINTER_ACCESS_USE)
+#define PRINTER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
+ PRINTER_ACCESS_ADMINISTER | PRINTER_ACCESS_USE)
+
+#define JOB_ACCESS_ADMINISTER 0x00000010
+#define JOB_READ (STANDARD_RIGHTS_READ | JOB_ACCESS_ADMINISTER)
+#define JOB_WRITE (STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER)
+#define JOB_EXECUTE (STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER)
+#define JOB_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER)
+
+
+/* Flags for printer drivers */
+#define DRIVER_KERNELMODE 0x00000001
+#define DRIVER_USERMODE 0x00000002
+
+#define APD_STRICT_UPGRADE 0x00000001
+#define APD_STRICT_DOWNGRADE 0x00000002
+#define APD_COPY_ALL_FILES 0x00000004
+#define APD_COPY_NEW_FILES 0x00000008
+#define APD_COPY_FROM_DIRECTORY 0x00000010
+
+#define DPD_DELETE_UNUSED_FILES 0x00000001
+#define DPD_DELETE_SPECIFIC_VERSION 0x00000002
+#define DPD_DELETE_ALL_FILES 0x00000004
+
+/* dwAction for PRINTER_INFO_7 */
+#define DSPRINT_PUBLISH 0x00000001
+#define DSPRINT_UPDATE 0x00000002
+#define DSPRINT_UNPUBLISH 0x00000004
+#define DSPRINT_REPUBLISH 0x00000008
+#define DSPRINT_PENDING 0x80000000
+
+/* ##################################### */
+
+/* TYPES */
+typedef struct _PRINTER_DEFAULTSA {
+ LPSTR pDatatype;
+ LPDEVMODEA pDevMode;
+ ACCESS_MASK DesiredAccess;
+} PRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
+
+typedef struct _PRINTER_DEFAULTSW {
+ LPWSTR pDatatype;
+ LPDEVMODEW pDevMode;
+ ACCESS_MASK DesiredAccess;
+} PRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
+
+DECL_WINELIB_TYPE_AW(PRINTER_DEFAULTS)
+DECL_WINELIB_TYPE_AW(LPPRINTER_DEFAULTS)
+
+typedef struct _DRIVER_INFO_1A {
+ LPSTR pName;
+} DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
+
+typedef struct _DRIVER_INFO_1W {
+ LPWSTR pName;
+} DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_1)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_1)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_1)
+
+typedef struct _DRIVER_INFO_2A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+} DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
+
+typedef struct _DRIVER_INFO_2W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+} DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_2)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_2)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_2)
+
+typedef struct _DRIVER_INFO_3A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
+
+typedef struct _DRIVER_INFO_3W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_3)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_3)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_3)
+
+typedef struct _DRIVER_INFO_4A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+ LPSTR pszzPreviousNames;
+} DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A;
+
+typedef struct _DRIVER_INFO_4W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+ LPWSTR pszzPreviousNames;
+} DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_4)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_4)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_4)
+
+
+typedef struct _DRIVER_INFO_5A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ DWORD dwDriverAttributes;
+ DWORD dwConfigVersion;
+ DWORD dwDriverVersion;
+} DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A;
+
+typedef struct _DRIVER_INFO_5W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ DWORD dwDriverAttributes;
+ DWORD dwConfigVersion;
+ DWORD dwDriverVersion;
+} DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_5)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_5)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_5)
+
+typedef struct _DRIVER_INFO_6A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+ LPSTR pszzPreviousNames;
+ FILETIME ftDriverDate;
+ DWORDLONG dwlDriverVersion;
+ LPSTR pszMfgName;
+ LPSTR pszOEMUrl;
+ LPSTR pszHardwareID;
+ LPSTR pszProvider;
+} DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A;
+
+typedef struct _DRIVER_INFO_6W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+ LPWSTR pszzPreviousNames;
+ FILETIME ftDriverDate;
+ DWORDLONG dwlDriverVersion;
+ LPWSTR pszMfgName;
+ LPWSTR pszOEMUrl;
+ LPWSTR pszHardwareID;
+ LPWSTR pszProvider;
+} DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_6)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_6)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_6)
+
+/* DRIVER_INFO_7 is not defined in native winspool.h and not found in the www */
+
+typedef struct _DRIVER_INFO_8A {
+ DWORD cVersion;
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDriverPath;
+ LPSTR pDataFile;
+ LPSTR pConfigFile;
+ LPSTR pHelpFile;
+ LPSTR pDependentFiles;
+ LPSTR pMonitorName;
+ LPSTR pDefaultDataType;
+ LPSTR pszzPreviousNames;
+ FILETIME ftDriverDate;
+ DWORDLONG dwlDriverVersion;
+ LPSTR pszMfgName;
+ LPSTR pszOEMUrl;
+ LPSTR pszHardwareID;
+ LPSTR pszProvider;
+ LPSTR pszPrintProcessor;
+ LPSTR pszVendorSetup;
+ LPSTR pszzColorProfiles;
+ LPSTR pszInfPath;
+ DWORD dwPrinterDriverAttributes;
+ LPSTR pszzCoreDriverDependencies;
+ FILETIME ftMinInboxDriverVerDate;
+ DWORDLONG dwlMinInboxDriverVerVersion;
+} DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A;
+
+typedef struct _DRIVER_INFO_8W {
+ DWORD cVersion;
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDriverPath;
+ LPWSTR pDataFile;
+ LPWSTR pConfigFile;
+ LPWSTR pHelpFile;
+ LPWSTR pDependentFiles;
+ LPWSTR pMonitorName;
+ LPWSTR pDefaultDataType;
+ LPWSTR pszzPreviousNames;
+ FILETIME ftDriverDate;
+ DWORDLONG dwlDriverVersion;
+ LPWSTR pszMfgName;
+ LPWSTR pszOEMUrl;
+ LPWSTR pszHardwareID;
+ LPWSTR pszProvider;
+ LPWSTR pszPrintProcessor;
+ LPWSTR pszVendorSetup;
+ LPWSTR pszzColorProfiles;
+ LPWSTR pszInfPath;
+ DWORD dwPrinterDriverAttributes;
+ LPWSTR pszzCoreDriverDependencies;
+ FILETIME ftMinInboxDriverVerDate;
+ DWORDLONG dwlMinInboxDriverVerVersion;
+} DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W;
+
+DECL_WINELIB_TYPE_AW(DRIVER_INFO_8)
+DECL_WINELIB_TYPE_AW(PDRIVER_INFO_8)
+DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_8)
+
+
+typedef struct _PRINTER_INFO_1A {
+ DWORD Flags;
+ LPSTR pDescription;
+ LPSTR pName;
+ LPSTR pComment;
+} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
+
+typedef struct _PRINTER_INFO_1W {
+ DWORD Flags;
+ LPWSTR pDescription;
+ LPWSTR pName;
+ LPWSTR pComment;
+} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_1)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_1)
+
+/* FIXME: winspool.h declares some structure members with the name Status.
+ * unfortunately <X11/ICE/ICElib.h> #defines Status to the type 'int'
+ * therefore the following hack */
+#ifndef Status
+
+typedef struct _PRINTER_INFO_2A {
+ LPSTR pServerName;
+ LPSTR pPrinterName;
+ LPSTR pShareName;
+ LPSTR pPortName;
+ LPSTR pDriverName;
+ LPSTR pComment;
+ LPSTR pLocation;
+ LPDEVMODEA pDevMode;
+ LPSTR pSepFile;
+ LPSTR pPrintProcessor;
+ LPSTR pDatatype;
+ LPSTR pParameters;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Attributes;
+ DWORD Priority;
+ DWORD DefaultPriority;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD Status;
+ DWORD cJobs;
+ DWORD AveragePPM;
+} PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
+
+typedef struct _PRINTER_INFO_2W {
+ LPWSTR pServerName;
+ LPWSTR pPrinterName;
+ LPWSTR pShareName;
+ LPWSTR pPortName;
+ LPWSTR pDriverName;
+ LPWSTR pComment;
+ LPWSTR pLocation;
+ LPDEVMODEW pDevMode;
+ LPWSTR pSepFile;
+ LPWSTR pPrintProcessor;
+ LPWSTR pDatatype;
+ LPWSTR pParameters;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Attributes;
+ DWORD Priority;
+ DWORD DefaultPriority;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD Status;
+ DWORD cJobs;
+ DWORD AveragePPM;
+} PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_2)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_2)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_2)
+
+typedef struct _PRINTER_INFO_3 {
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+} PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;
+
+typedef struct _PRINTER_INFO_4A {
+ LPSTR pPrinterName;
+ LPSTR pServerName;
+ DWORD Attributes;
+} PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;
+
+typedef struct _PRINTER_INFO_4W {
+ LPWSTR pPrinterName;
+ LPWSTR pServerName;
+ DWORD Attributes;
+} PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_4)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_4)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_4)
+
+typedef struct _PRINTER_INFO_5A {
+ LPSTR pPrinterName;
+ LPSTR pPortName;
+ DWORD Attributes;
+ DWORD DeviceNotSelectedTimeout;
+ DWORD TransmissionRetryTimeout;
+} PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;
+
+typedef struct _PRINTER_INFO_5W {
+ LPWSTR pPrinterName;
+ LPWSTR pPortName;
+ DWORD Attributes;
+ DWORD DeviceNotSelectedTimeout;
+ DWORD TransmissionRetryTimeout;
+} PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_5)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_5)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_5)
+
+typedef struct _PRINTER_INFO_6 {
+ DWORD dwStatus;
+} PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;
+
+typedef struct _PRINTER_INFO_7A {
+ LPSTR pszObjectGUID;
+ DWORD dwAction;
+} PRINTER_INFO_7A, *PPRINTER_INFO_7A, *LPPRINTER_INFO_7A;
+
+typedef struct _PRINTER_INFO_7W {
+ LPWSTR pszObjectGUID;
+ DWORD dwAction;
+} PRINTER_INFO_7W, *PPRINTER_INFO_7W, *LPPRINTER_INFO_7W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_7)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_7)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_7)
+
+typedef struct _PRINTER_INFO_8A {
+ LPDEVMODEA pDevMode;
+} PRINTER_INFO_8A, *PPRINTER_INFO_8A, *LPPRINTER_INFO_8A;
+
+typedef struct _PRINTER_INFO_8W {
+ LPDEVMODEW pDevMode;
+} PRINTER_INFO_8W, *PPRINTER_INFO_8W, *LPPRINTER_INFO_8W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_8)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_8)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_8)
+
+typedef struct _PRINTER_INFO_9A {
+ LPDEVMODEA pDevMode;
+} PRINTER_INFO_9A, *PPRINTER_INFO_9A, *LPPRINTER_INFO_9A;
+
+typedef struct _PRINTER_INFO_9W {
+ LPDEVMODEW pDevMode;
+} PRINTER_INFO_9W, *PPRINTER_INFO_9W, *LPPRINTER_INFO_9W;
+
+DECL_WINELIB_TYPE_AW(PRINTER_INFO_9)
+DECL_WINELIB_TYPE_AW(PPRINTER_INFO_9)
+DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_9)
+
+
+typedef struct _JOB_INFO_1A {
+ DWORD JobId;
+ LPSTR pPrinterName;
+ LPSTR pMachineName;
+ LPSTR pUserName;
+ LPSTR pDocument;
+ LPSTR pDatatype;
+ LPSTR pStatus;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD TotalPages;
+ DWORD PagesPrinted;
+ SYSTEMTIME Submitted;
+} JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
+
+typedef struct _JOB_INFO_1W {
+ DWORD JobId;
+ LPWSTR pPrinterName;
+ LPWSTR pMachineName;
+ LPWSTR pUserName;
+ LPWSTR pDocument;
+ LPWSTR pDatatype;
+ LPWSTR pStatus;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD TotalPages;
+ DWORD PagesPrinted;
+ SYSTEMTIME Submitted;
+} JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(JOB_INFO_1)
+DECL_WINELIB_TYPE_AW(PJOB_INFO_1)
+DECL_WINELIB_TYPE_AW(LPJOB_INFO_1)
+
+typedef struct _JOB_INFO_2A {
+ DWORD JobId;
+ LPSTR pPrinterName;
+ LPSTR pMachineName;
+ LPSTR pUserName;
+ LPSTR pDocument;
+ LPSTR pNotifyName;
+ LPSTR pDatatype;
+ LPSTR pPrintProcessor;
+ LPSTR pParameters;
+ LPSTR pDriverName;
+ LPDEVMODEA pDevMode;
+ LPSTR pStatus;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD TotalPages;
+ DWORD Size;
+ SYSTEMTIME Submitted;
+ DWORD Time;
+ DWORD PagesPrinted;
+} JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
+
+typedef struct _JOB_INFO_2W {
+ DWORD JobId;
+ LPWSTR pPrinterName;
+ LPWSTR pMachineName;
+ LPWSTR pUserName;
+ LPWSTR pDocument;
+ LPWSTR pNotifyName;
+ LPWSTR pDatatype;
+ LPWSTR pPrintProcessor;
+ LPWSTR pParameters;
+ LPWSTR pDriverName;
+ LPDEVMODEW pDevMode;
+ LPWSTR pStatus;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD TotalPages;
+ DWORD Size;
+ SYSTEMTIME Submitted;
+ DWORD Time;
+ DWORD PagesPrinted;
+} JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(JOB_INFO_2)
+DECL_WINELIB_TYPE_AW(PJOB_INFO_2)
+DECL_WINELIB_TYPE_AW(LPJOB_INFO_2)
+
+typedef struct _JOB_INFO_3 {
+ DWORD JobId;
+ DWORD NextJobId;
+ DWORD Reserved;
+} JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;
+
+typedef struct _ADDJOB_INFO_1A {
+ LPSTR Path;
+ DWORD JobId;
+} ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
+
+typedef struct _ADDJOB_INFO_1W {
+ LPWSTR Path;
+ DWORD JobId;
+} ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(ADDJOB_INFO_1)
+DECL_WINELIB_TYPE_AW(PADDJOB_INFO_1)
+DECL_WINELIB_TYPE_AW(LPADDJOB_INFO_1)
+
+typedef struct _DOC_INFO_1A {
+ LPSTR pDocName;
+ LPSTR pOutputFile;
+ LPSTR pDatatype;
+} DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
+
+typedef struct _DOC_INFO_1W {
+ LPWSTR pDocName;
+ LPWSTR pOutputFile;
+ LPWSTR pDatatype;
+} DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(DOC_INFO_1)
+DECL_WINELIB_TYPE_AW(PDOC_INFO_1)
+DECL_WINELIB_TYPE_AW(LPDOC_INFO_1)
+
+typedef struct _DOC_INFO_2A {
+ LPSTR pDocName;
+ LPSTR pOutputFile;
+ LPSTR pDatatype;
+ DWORD dwMode;
+ DWORD JobId;
+} DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;
+
+typedef struct _DOC_INFO_2W {
+ LPWSTR pDocName;
+ LPWSTR pOutputFile;
+ LPWSTR pDatatype;
+ DWORD dwMode;
+ DWORD JobId;
+} DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(DOC_INFO_2)
+DECL_WINELIB_TYPE_AW(PDOC_INFO_2)
+DECL_WINELIB_TYPE_AW(LPDOC_INFO_2)
+
+typedef struct _FORM_INFO_1A {
+ DWORD Flags;
+ LPSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+} FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
+
+typedef struct _FORM_INFO_1W {
+ DWORD Flags;
+ LPWSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+} FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(FORM_INFO_1)
+DECL_WINELIB_TYPE_AW(PFORM_INFO_1)
+DECL_WINELIB_TYPE_AW(LPFORM_INFO_1)
+
+typedef struct _FORM_INFO_2A {
+ DWORD Flags;
+ LPSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+ LPCSTR pKeyword;
+ DWORD StringType;
+ LPSTR pMuiDll;
+ DWORD dwResourceId;
+ LPSTR pDisplayName;
+ LANGID wLangId;
+} FORM_INFO_2A, *PFORM_INFO_2A, *LPFORM_INFO_2A;
+
+typedef struct _FORM_INFO_2W {
+ DWORD Flags;
+ LPWSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+ LPCSTR pKeyword;
+ DWORD StringType;
+ LPWSTR pMuiDll;
+ DWORD dwResourceId;
+ LPWSTR pDisplayName;
+ LANGID wLangId;
+} FORM_INFO_2W, *PFORM_INFO_2W, *LPFORM_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(FORM_INFO_2)
+DECL_WINELIB_TYPE_AW(PFORM_INFO_2)
+DECL_WINELIB_TYPE_AW(LPFORM_INFO_2)
+
+typedef struct _PRINTPROCESSOR_INFO_1A {
+ LPSTR pName;
+} PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A,
+ *LPPRINTPROCESSOR_INFO_1A;
+
+typedef struct _PRINTPROCESSOR_INFO_1W {
+ LPWSTR pName;
+} PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W,
+ *LPPRINTPROCESSOR_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PRINTPROCESSOR_INFO_1)
+DECL_WINELIB_TYPE_AW(PPRINTPROCESSOR_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPRINTPROCESSOR_INFO_1)
+
+typedef struct _PORT_INFO_1A {
+ LPSTR pName;
+} PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
+
+typedef struct _PORT_INFO_1W {
+ LPWSTR pName;
+} PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PORT_INFO_1)
+DECL_WINELIB_TYPE_AW(PPORT_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPORT_INFO_1)
+
+typedef struct _PORT_INFO_2A {
+ LPSTR pPortName;
+ LPSTR pMonitorName;
+ LPSTR pDescription;
+ DWORD fPortType;
+ DWORD Reserved;
+} PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;
+
+typedef struct _PORT_INFO_2W {
+ LPWSTR pPortName;
+ LPWSTR pMonitorName;
+ LPWSTR pDescription;
+ DWORD fPortType;
+ DWORD Reserved;
+} PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(PORT_INFO_2)
+DECL_WINELIB_TYPE_AW(PPORT_INFO_2)
+DECL_WINELIB_TYPE_AW(LPPORT_INFO_2)
+
+typedef struct _PORT_INFO_3A {
+ DWORD dwStatus;
+ LPSTR pszStatus;
+ DWORD dwSeverity;
+} PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;
+
+typedef struct _PORT_INFO_3W {
+ DWORD dwStatus;
+ LPWSTR pszStatus;
+ DWORD dwSeverity;
+} PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;
+
+DECL_WINELIB_TYPE_AW(PORT_INFO_3)
+DECL_WINELIB_TYPE_AW(PPORT_INFO_3)
+DECL_WINELIB_TYPE_AW(LPPORT_INFO_3)
+
+typedef struct _MONITOR_INFO_1A {
+ LPSTR pName;
+} MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
+
+typedef struct _MONITOR_INFO_1W {
+ LPWSTR pName;
+} MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(MONITOR_INFO_1)
+DECL_WINELIB_TYPE_AW(PMONITOR_INFO_1)
+DECL_WINELIB_TYPE_AW(LPMONITOR_INFO_1)
+
+#endif /* Status */
+
+
+typedef struct _MONITOR_INFO_2A {
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDLLName;
+} MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
+
+typedef struct _MONITOR_INFO_2W {
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDLLName;
+} MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
+
+DECL_WINELIB_TYPE_AW(MONITOR_INFO_2)
+DECL_WINELIB_TYPE_AW(PMONITOR_INFO_2)
+DECL_WINELIB_TYPE_AW(LPMONITOR_INFO_2)
+
+typedef struct _DATATYPES_INFO_1A {
+ LPSTR pName;
+} DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
+
+typedef struct _DATATYPES_INFO_1W {
+ LPWSTR pName;
+} DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(DATATYPES_INFO_1)
+DECL_WINELIB_TYPE_AW(PDATATYPES_INFO_1)
+DECL_WINELIB_TYPE_AW(LPDATATYPES_INFO_1)
+
+typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
+ WORD Type;
+ WORD Reserved0;
+ DWORD Reserved1;
+ DWORD Reserved2;
+ DWORD Count;
+ PWORD pFields;
+} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE,
+*LPPRINTER_NOTIFY_OPTIONS_TYPE;
+
+typedef struct _PRINTER_NOTIFY_OPTIONS {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
+} PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;
+
+typedef struct _PRINTER_NOTIFY_INFO_DATA {
+ WORD Type;
+ WORD Field;
+ DWORD Reserved;
+ DWORD Id;
+ union {
+ DWORD adwData[2];
+ struct {
+ DWORD cbBuf;
+ LPVOID pBuf;
+ } Data;
+ } NotifyData;
+} PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA,
+*LPPRINTER_NOTIFY_INFO_DATA;
+
+typedef struct _PRINTER_NOTIFY_INFO {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ PRINTER_NOTIFY_INFO_DATA aData[1];
+} PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;
+
+typedef struct _PROVIDOR_INFO_1A {
+ LPSTR pName;
+ LPSTR pEnvironment;
+ LPSTR pDLLName;
+} PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
+
+typedef struct _PROVIDOR_INFO_1W {
+ LPWSTR pName;
+ LPWSTR pEnvironment;
+ LPWSTR pDLLName;
+} PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
+
+DECL_WINELIB_TYPE_AW(PROVIDOR_INFO_1)
+DECL_WINELIB_TYPE_AW(PPROVIDOR_INFO_1)
+DECL_WINELIB_TYPE_AW(LPPROVIDOR_INFO_1)
+
+typedef struct _PRINTER_ENUM_VALUESA {
+ LPSTR pValueName;
+ DWORD cbValueName;
+ DWORD dwType;
+ LPBYTE pData;
+ DWORD cbData;
+} PRINTER_ENUM_VALUESA, *PPRINTER_ENUM_VALUESA;
+
+typedef struct _PRINTER_ENUM_VALUESW {
+ LPWSTR pValueName;
+ DWORD cbValueName;
+ DWORD dwType;
+ LPBYTE pData;
+ DWORD cbData;
+} PRINTER_ENUM_VALUESW, *PPRINTER_ENUM_VALUESW;
+
+DECL_WINELIB_TYPE_AW(PRINTER_ENUM_VALUES)
+DECL_WINELIB_TYPE_AW(PPRINTER_ENUM_VALUES)
+
+typedef enum {
+ BIDI_NULL = 0,
+ BIDI_INT,
+ BIDI_FLOAT,
+ BIDI_BOOL,
+ BIDI_STRING,
+ BIDI_TEXT,
+ BIDI_ENUM,
+ BIDI_BLOB
+} BIDI_TYPE;
+
+typedef struct _BINARY_CONTAINER {
+ DWORD cbBuf;
+ LPBYTE pData;
+} BINARY_CONTAINER, *PBINARY_CONTAINER;
+
+typedef struct _BIDI_DATA {
+ DWORD dwBidiType;
+ union
+ {
+ BOOL bData;
+ INT iData;
+ LPWSTR sData;
+ FLOAT fData;
+ BINARY_CONTAINER biData;
+ } u;
+} BIDI_DATA, *LPBIDI_DATA, *PBIDI_DATA;
+
+typedef struct _BIDI_REQUEST_DATA {
+ DWORD dwReqNumber;
+ LPWSTR pSchema;
+ BIDI_DATA data;
+} BIDI_REQUEST_DATA, *LPBIDI_REQUEST_DATA, *PBIDI_REQUEST_DATA;
+
+typedef struct _BIDI_REQUEST_CONTAINER {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ BIDI_REQUEST_DATA aData[1];
+} BIDI_REQUEST_CONTAINER, *LPBIDI_REQUEST_CONTAINER, *PBIDI_REQUEST_CONTAINER;
+
+typedef struct _BIDI_RESPONSE_DATA {
+ DWORD dwResult;
+ DWORD dwReqNumber;
+ LPWSTR pSchema;
+ BIDI_DATA data;
+} BIDI_RESPONSE_DATA, *LPBIDI_RESPONSE_DATA, *PBIDI_RESPONSE_DATA;
+
+typedef struct _BIDI_RESPONSE_CONTAINER {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ BIDI_RESPONSE_DATA aData[1];
+} BIDI_RESPONSE_CONTAINER, *LPBIDI_RESPONSE_CONTAINER, *PBIDI_RESPONSE_CONTAINER;
+
+/* string constants */
+
+#define SPLREG_DEFAULT_SPOOL_DIRECTORYA "DefaultSpoolDirectory"
+#ifdef _MSC_VER
+#define SPLREG_DEFAULT_SPOOL_DIRECTORYW L"DefaultSpoolDirectory"
+#elif defined(__GNUC__)
+#define SPLREG_DEFAULT_SPOOL_DIRECTORYW (const WCHAR[]){'D','e','f','a','u','l','t','S','p','o','o','l','D','i','r','e','c','t','o','r','y',0}
+#else
+static const WCHAR SPLREG_DEFAULT_SPOOL_DIRECTORYW[] = {'D','e','f','a','u','l','t','S','p','o','o','l','D','i','r','e','c','t','o','r','y',0};
+#endif
+#define SPLREG_DEFAULT_SPOOL_DIRECTORY WINELIB_NAME_AW(SPLREG_DEFAULT_SPOOL_DIRECTORY)
+
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTA "PortThreadPriorityDefault"
+#ifdef _MSC_VER
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW L"PortThreadPriorityDefault"
+#elif defined(__GNUC__)
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULTW (const WCHAR[]){'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0}
+#else
+static const WCHAR SPLREG_PORT_THREAD_PRIORITY_DEFAULTW[] = {'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0};
+#endif
+#define SPLREG_PORT_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY_DEFAULT)
+
+#define SPLREG_PORT_THREAD_PRIORITYA "PortThreadPriority"
+#ifdef _MSC_VER
+#define SPLREG_PORT_THREAD_PRIORITYW L"PortThreadPriority"
+#elif defined(__GNUC__)
+#define SPLREG_PORT_THREAD_PRIORITYW (const WCHAR[]){'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0}
+#else
+static const WCHAR SPLREG_PORT_THREAD_PRIORITYW[] = {'P','o','r','t','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0};
+#endif
+#define SPLREG_PORT_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_PORT_THREAD_PRIORITY)
+
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTA "SchedulerThreadPriorityDefault"
+#ifdef _MSC_VER
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW L"SchedulerThreadPriorityDefault"
+#elif defined(__GNUC__)
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW (const WCHAR[]){'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0}
+#else
+static const WCHAR SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULTW[] = {'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y','D','e','f','a','u','l','t',0};
+#endif
+#define SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT)
+
+#define SPLREG_SCHEDULER_THREAD_PRIORITYA "SchedulerThreadPriority"
+#ifdef _MSC_VER
+#define SPLREG_SCHEDULER_THREAD_PRIORITYW L"SchedulerThreadPriority"
+#elif defined(__GNUC__)
+#define SPLREG_SCHEDULER_THREAD_PRIORITYW (const WCHAR[]){'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0}
+#else
+static const WCHAR SPLREG_SCHEDULER_THREAD_PRIORITYW[] = {'S','c','h','e','d','u','l','e','r','T','h','r','e','a','d','P','r','i','o','r','i','t','y',0};
+#endif
+#define SPLREG_SCHEDULER_THREAD_PRIORITY WINELIB_NAME_AW(SPLREG_SCHEDULER_THREAD_PRIORITY)
+
+#define SPLREG_BEEP_ENABLEDA "BeepEnabled"
+#ifdef _MSC_VER
+#define SPLREG_BEEP_ENABLEDW L"BeepEnabled"
+#elif defined(__GNUC__)
+#define SPLREG_BEEP_ENABLEDW (const WCHAR[]){'B','e','e','p','E','n','a','b','l','e','d',0}
+#else
+static const WCHAR SPLREG_BEEP_ENABLEDW[] = {'B','e','e','p','E','n','a','b','l','e','d',0};
+#endif
+#define SPLREG_BEEP_ENABLED WINELIB_NAME_AW(SPLREG_BEEP_ENABLED)
+
+#define SPLREG_NET_POPUPA "NetPopup"
+#ifdef _MSC_VER
+#define SPLREG_NET_POPUPW L"NetPopup"
+#elif defined(__GNUC__)
+#define SPLREG_NET_POPUPW (const WCHAR[]){'N','e','t','P','o','p','u','p',0}
+#else
+static const WCHAR SPLREG_NET_POPUPW[] = {'N','e','t','P','o','p','u','p',0};
+#endif
+#define SPLREG_NET_POPUP WINELIB_NAME_AW(SPLREG_NET_POPUP)
+
+#define SPLREG_RETRY_POPUPA "RetryPopup"
+#ifdef _MSC_VER
+#define SPLREG_RETRY_POPUPW L"RetryPopup"
+#elif defined(__GNUC__)
+#define SPLREG_RETRY_POPUPW (const WCHAR[]){'R','e','t','r','y','P','o','p','u','p',0}
+#else
+static const WCHAR SPLREG_RETRY_POPUPW[] = {'R','e','t','r','y','P','o','p','u','p',0};
+#endif
+#define SPLREG_RETRY_POPUP WINELIB_NAME_AW(SPLREG_RETRY_POPUP)
+
+#define SPLREG_NET_POPUP_TO_COMPUTERA "NetPopupToComputer"
+#ifdef _MSC_VER
+#define SPLREG_NET_POPUP_TO_COMPUTERW L"NetPopupToComputer"
+#elif defined(__GNUC__)
+#define SPLREG_NET_POPUP_TO_COMPUTERW (const WCHAR[]){'N','e','t','P','o','p','u','p','T','o','C','o','m','p','u','t','e','r',0}
+#else
+static const WCHAR SPLREG_NET_POPUP_TO_COMPUTERW[] = {'N','e','t','P','o','p','u','p','T','o','C','o','m','p','u','t','e','r',0};
+#endif
+#define SPLREG_NET_POPUP_TO_COMPUTER WINELIB_NAME_AW(SPLREG_NET_POPUP_TO_COMPUTER)
+
+#define SPLREG_EVENT_LOGA "EventLog"
+#ifdef _MSC_VER
+#define SPLREG_EVENT_LOGW L"EventLog"
+#elif defined(__GNUC__)
+#define SPLREG_EVENT_LOGW (const WCHAR[]){'E','v','e','n','t','L','o','g',0}
+#else
+static const WCHAR SPLREG_EVENT_LOGW[] = {'E','v','e','n','t','L','o','g',0};
+#endif
+#define SPLREG_EVENT_LOG WINELIB_NAME_AW(SPLREG_EVENT_LOG)
+
+#define SPLREG_MAJOR_VERSIONA "MajorVersion"
+#ifdef _MSC_VER
+#define SPLREG_MAJOR_VERSIONW L"MajorVersion"
+#elif defined(__GNUC__)
+#define SPLREG_MAJOR_VERSIONW (const WCHAR[]){'M','a','j','o','r','V','e','r','s','i','o','n',0}
+#else
+static const WCHAR SPLREG_MAJOR_VERSIONW[] = {'M','a','j','o','r','V','e','r','s','i','o','n',0};
+#endif
+#define SPLREG_MAJOR_VERSION WINELIB_NAME_AW(SPLREG_MAJOR_VERSION)
+
+#define SPLREG_MINOR_VERSIONA "MinorVersion"
+#ifdef _MSC_VER
+#define SPLREG_MINOR_VERSIONW L"MinorVersion"
+#elif defined(__GNUC__)
+#define SPLREG_MINOR_VERSIONW (const WCHAR[]){'M','i','n','o','r','V','e','r','s','i','o','n',0}
+#else
+static const WCHAR SPLREG_MINOR_VERSIONW[] = {'M','i','n','o','r','V','e','r','s','i','o','n',0};
+#endif
+#define SPLREG_MINOR_VERSION WINELIB_NAME_AW(SPLREG_MINOR_VERSION)
+
+#define SPLREG_ARCHITECTUREA "Architecture"
+#ifdef _MSC_VER
+#define SPLREG_ARCHITECTUREW L"Architecture"
+#elif defined(__GNUC__)
+#define SPLREG_ARCHITECTUREW (const WCHAR[]){'A','r','c','h','i','t','e','c','t','u','r','e',0}
+#else
+static const WCHAR SPLREG_ARCHITECTUREW[] = {'A','r','c','h','i','t','e','c','t','u','r','e',0};
+#endif
+#define SPLREG_ARCHITECTURE WINELIB_NAME_AW(SPLREG_ARCHITECTURE)
+
+#define SPLREG_OS_VERSIONA "OSVersion"
+#ifdef _MSC_VER
+#define SPLREG_OS_VERSIONW L"OSVersion"
+#elif defined(__GNUC__)
+#define SPLREG_OS_VERSIONW (const WCHAR[]){'O','S','V','e','r','s','i','o','n',0}
+#else
+static const WCHAR SPLREG_OS_VERSIONW[] = {'O','S','V','e','r','s','i','o','n',0};
+#endif
+#define SPLREG_OS_VERSION WINELIB_NAME_AW(SPLREG_OS_VERSION)
+
+#define SPLREG_OS_VERSIONEXA "OSVersionEx"
+#ifdef _MSC_VER
+#define SPLREG_OS_VERSIONEXW L"OSVersionEx"
+#elif defined(__GNUC__)
+#define SPLREG_OS_VERSIONEXW (const WCHAR[]){'O','S','V','e','r','s','i','o','n','E','x',0}
+#else
+static const WCHAR SPLREG_OS_VERSIONEXW[] = {'O','S','V','e','r','s','i','o','n','E','x',0};
+#endif
+#define SPLREG_OS_VERSIONEX WINELIB_NAME_AW(SPLREG_OS_VERSIONEX)
+
+#define SPLREG_DS_PRESENTA "DsPresent"
+#ifdef _MSC_VER
+#define SPLREG_DS_PRESENTW L"DsPresent"
+#elif defined(__GNUC__)
+#define SPLREG_DS_PRESENTW (const WCHAR[]){'D','s','P','r','e','s','e','n','t',0}
+#else
+static const WCHAR SPLREG_DS_PRESENTW[] = {'D','s','P','r','e','s','e','n','t',0};
+#endif
+#define SPLREG_DS_PRESENT WINELIB_NAME_AW(SPLREG_DS_PRESENT)
+
+#define SPLREG_DS_PRESENT_FOR_USERA "DsPresentForUser"
+#ifdef _MSC_VER
+#define SPLREG_DS_PRESENT_FOR_USERW L"DsPresentForUser"
+#elif defined(__GNUC__)
+#define SPLREG_DS_PRESENT_FOR_USERW (const WCHAR[]){'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0}
+#else
+static const WCHAR SPLREG_DS_PRESENT_FOR_USERW[] = {'D','s','P','r','e','s','e','n','t','F','o','r','U','s','e','r',0};
+#endif
+#define SPLREG_DS_PRESENT_FOR_USER WINELIB_NAME_AW(SPLREG_DS_PRESENT_FOR_USER)
+
+#define SPLREG_REMOTE_FAXA "RemoteFax"
+#ifdef _MSC_VER
+#define SPLREG_REMOTE_FAXW L"RemoteFax"
+#elif defined(__GNUC__)
+#define SPLREG_REMOTE_FAXW (const WCHAR[]){'R','e','m','o','t','e','F','a','x',0}
+#else
+static const WCHAR SPLREG_REMOTE_FAXW[] = {'R','e','m','o','t','e','F','a','x',0};
+#endif
+#define SPLREG_REMOTE_FAX WINELIB_NAME_AW(SPLREG_REMOTE_FAX)
+
+#define SPLREG_RESTART_JOB_ON_POOL_ERRORA "RestartJobOnPoolError"
+#ifdef _MSC_VER
+#define SPLREG_RESTART_JOB_ON_POOL_ERRORW L"RestartJobOnPoolError"
+#elif defined(__GNUC__)
+#define SPLREG_RESTART_JOB_ON_POOL_ERRORW (const WCHAR[]){'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','r','r','o','r',0}
+#else
+static const WCHAR SPLREG_RESTART_JOB_ON_POOL_ERRORW[] = {'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','r','r','o','r',0};
+#endif
+#define SPLREG_RESTART_JOB_ON_POOL_ERROR WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ERROR)
+
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDA "RestartJobOnPoolEnabled"
+#ifdef _MSC_VER
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW L"RestartJobOnPoolEnabled"
+#elif defined(__GNUC__)
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLEDW (const WCHAR[]){'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','n','a','b','l','e','d',0}
+#else
+static const WCHAR SPLREG_RESTART_JOB_ON_POOL_ENABLEDW[] = {'R','e','s','t','a','r','t','J','o','b','O','n','P','o','o','l','E','n','a','b','l','e','d',0};
+#endif
+#define SPLREG_RESTART_JOB_ON_POOL_ENABLED WINELIB_NAME_AW(SPLREG_RESTART_JOB_ON_POOL_ENABLED)
+
+#define SPLREG_DNS_MACHINE_NAMEA "DNSMachineName"
+#ifdef _MSC_VER
+#define SPLREG_DNS_MACHINE_NAMEW L"DNSMachineName"
+#elif defined(__GNUC__)
+#define SPLREG_DNS_MACHINE_NAMEW (const WCHAR[]){'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0}
+#else
+static const WCHAR SPLREG_DNS_MACHINE_NAMEW[] = {'D','N','S','M','a','c','h','i','n','e','N','a','m','e',0};
+#endif
+#define SPLREG_DNS_MACHINE_NAME WINELIB_NAME_AW(SPLREG_DNS_MACHINE_NAME)
+
+#define SPLREG_ALLOW_USER_MANAGEFORMSA "AllowUserManageForms"
+#ifdef _MSC_VER
+#define SPLREG_ALLOW_USER_MANAGEFORMSW L"AllowUserManageForms"
+#elif defined(__GNUC__)
+#define SPLREG_ALLOW_USER_MANAGEFORMSW (const WCHAR[]){'A','l','l','o','w','U','s','e','r','M','a','n','a','g','e','F','o','r','m','s',0}
+#else
+static const WCHAR SPLREG_ALLOW_USER_MANAGEFORMSW[] = {'A','l','l','o','w','U','s','e','r','M','a','n','a','g','e','F','o','r','m','s',0};
+#endif
+#define SPLREG_ALLOW_USER_MANAGEFORMS WINELIB_NAME_AW(SPLREG_ALLOW_USER_MANAGEFORMS)
+
+#define SPLREG_WEBSHAREMGMTA "WebShareMgmt"
+#ifdef _MSC_VER
+#define SPLREG_WEBSHAREMGMTW L"WebShareMgmt"
+#elif defined(__GNUC__)
+#define SPLREG_WEBSHAREMGMTW (const WCHAR[]){'W','e','b','S','h','a','r','e','M','g','m','t',0}
+#else
+static const WCHAR SPLREG_WEBSHAREMGMTW[] = {'W','e','b','S','h','a','r','e','M','g','m','t',0};
+#endif
+#define SPLREG_WEBSHAREMGMT WINELIB_NAME_AW(SPLREG_WEBSHAREMGMT)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSA "PrintDriverIsolationGroups"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW L"PrintDriverIsolationGroups"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','G','r','o','u','p','s',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_GROUPSW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','G','r','o','u','p','s',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_GROUPS WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_GROUPS)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEA "PrintDriverIsolationTimeBeforeRecycle"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW L"PrintDriverIsolationTimeBeforeRecycle"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','T','i','m','e','B','e','f','o','r','e','R','e','c','y','c','l','e',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLEW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','T','i','m','e','B','e','f','o','r','e','R','e','c','y','c','l','e',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEA "PrintDriverIsolationMaxobjsBeforeRecycle"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW L"PrintDriverIsolationMaxobjsBeforeRecycle"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','M','a','x','o','b','j','s','B','e','f','o','r','e','R','e','c','y','c','l','e',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLEW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','M','a','x','o','b','j','s','B','e','f','o','r','e','R','e','c','y','c','l','e',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTA "PrintDriverIsolationIdleTimeout"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW L"PrintDriverIsolationIdleTimeout"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','I','d','l','e','T','i','m','e','o','u','t',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUTW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','I','d','l','e','T','i','m','e','o','u','t',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYA "PrintDriverIsolationExecutionPolicy"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW L"PrintDriverIsolationExecutionPolicy"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','E','x','e','c','u','t','i','o','n','P','o','l','i','c','y',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICYW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','E','x','e','c','u','t','i','o','n','P','o','l','i','c','y',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY)
+
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYA "PrintDriverIsolationOverrideCompat"
+#ifdef _MSC_VER
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW L"PrintDriverIsolationOverrideCompat"
+#elif defined(__GNUC__)
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW (const WCHAR[]){'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','O','v','e','r','r','i','d','e','C','o','m','p','a','t',0}
+#else
+static const WCHAR SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICYW[] = {'P','r','i','n','t','D','r','i','v','e','r','I','s','o','l','a','t','i','o','n','O','v','e','r','r','i','d','e','C','o','m','p','a','t',0};
+#endif
+#define SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY WINELIB_NAME_AW(SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY)
+
+/* DECLARATIONS */
+INT WINAPI DeviceCapabilitiesA(LPCSTR pDevice,LPCSTR pPort,WORD fwCapability,
+ LPSTR pOutput, LPDEVMODEA pDevMode);
+INT WINAPI DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort,
+ WORD fwCapability, LPWSTR pOutput,
+ const DEVMODEW *pDevMode);
+
+#define DeviceCapabilities WINELIB_NAME_AW(DeviceCapabilities)
+
+LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,
+ LPSTR pDeviceName, LPDEVMODEA pDevModeOutput,
+ LPDEVMODEA pDevModeInput,DWORD fMode );
+LONG WINAPI DocumentPropertiesW(HWND hWnd, HANDLE hPrinter,
+ LPWSTR pDeviceName,
+ LPDEVMODEW pDevModeOutput,
+ LPDEVMODEW pDevModeInput, DWORD fMode);
+
+#define DocumentProperties WINELIB_NAME_AW(DocumentProperties)
+
+BOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter,
+ LPPRINTER_DEFAULTSA pDefault);
+BOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter,
+ LPPRINTER_DEFAULTSW pDefault);
+
+#define OpenPrinter WINELIB_NAME_AW(OpenPrinter)
+
+BOOL WINAPI ResetPrinterA(HANDLE hPrinter, LPPRINTER_DEFAULTSA pDefault);
+BOOL WINAPI ResetPrinterW(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
+#define ResetPrinter WINELIB_NAME_AW(ResetPrinter)
+
+BOOL WINAPI ClosePrinter (HANDLE phPrinter);
+
+BOOL WINAPI EnumJobsA(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
+ DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcReturned);
+BOOL WINAPI EnumJobsW(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs,
+ DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcReturned);
+#define EnumJobs WINELIB_NAME_AW(EnumJobs)
+
+BOOL WINAPI EnumPrintersA(DWORD dwType, LPSTR lpszName,
+ DWORD dwLevel, LPBYTE lpbPrinters,
+ DWORD cbBuf, LPDWORD lpdwNeeded,
+ LPDWORD lpdwReturned);
+BOOL WINAPI EnumPrintersW(DWORD dwType, LPWSTR lpszName,
+ DWORD dwLevel, LPBYTE lpbPrinters,
+ DWORD cbBuf, LPDWORD lpdwNeeded,
+ LPDWORD lpdwReturned);
+#define EnumPrinters WINELIB_NAME_AW(EnumPrinters)
+
+BOOL WINAPI PrinterProperties(HWND hWnd, HANDLE hPrinter);
+
+BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
+BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
+#define GetPrinterDriverDirectory WINELIB_NAME_AW(GetPrinterDriverDirectory)
+
+BOOL WINAPI GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment,
+ DWORD Level, LPBYTE pDriverInfo,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pDriverInfo,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetPrinterDriver WINELIB_NAME_AW(GetPrinterDriver)
+
+BOOL WINAPI SetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+ DWORD Command);
+BOOL WINAPI SetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+ DWORD Command);
+#define SetJob WINELIB_NAME_AW(SetJob)
+
+BOOL WINAPI GetJobA(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetJobW(HANDLE hPrinter, DWORD JobID, DWORD Level, LPBYTE pJob,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetJob WINELIB_NAME_AW(GetJob)
+
+HANDLE WINAPI AddPrinterA(LPSTR pName, DWORD Level, LPBYTE pPrinter);
+HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter);
+#define AddPrinter WINELIB_NAME_AW(AddPrinter)
+
+BOOL WINAPI DeletePrinter(HANDLE hPrinter);
+
+BOOL WINAPI SetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+ DWORD Command);
+BOOL WINAPI SetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+ DWORD Command);
+#define SetPrinter WINELIB_NAME_AW(SetPrinter)
+
+BOOL WINAPI GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetPrinter WINELIB_NAME_AW(GetPrinter)
+
+BOOL WINAPI AddPrinterDriverA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo);
+BOOL WINAPI AddPrinterDriverW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo);
+#define AddPrinterDriver WINELIB_NAME_AW(AddPrinterDriver)
+
+BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo,
+ DWORD dwFileCopyFlags);
+BOOL WINAPI AddPrinterDriverExW(LPWSTR pName, DWORD Level, LPBYTE pDriverInfo,
+ DWORD dwFileCopyFlags);
+#define AddPrinterDriverEx WINELIB_NAME_AW(AddPrinterDriverEx)
+
+BOOL WINAPI EnumPrinterDriversA(LPSTR pName, LPSTR pEnvironment, DWORD Level,
+ LPBYTE pDriverInfo, DWORD cbBuf,
+ LPDWORD pcbNeeded, LPDWORD pcbReturned);
+BOOL WINAPI EnumPrinterDriversW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level,
+ LPBYTE pDriverInfo, DWORD cbBuf,
+ LPDWORD pcbNeeded, LPDWORD pcbReturned);
+#define EnumPrinterDrivers WINELIB_NAME_AW(EnumPrinterDrivers)
+
+BOOL WINAPI GetDefaultPrinterA(LPSTR pName, LPDWORD pcbNameSize);
+BOOL WINAPI GetDefaultPrinterW(LPWSTR pName, LPDWORD pcbNameSize);
+#define GetDefaultPrinter WINELIB_NAME_AW(GetDefaultPrinter)
+
+BOOL WINAPI SetDefaultPrinterA(LPCSTR);
+BOOL WINAPI SetDefaultPrinterW(LPCWSTR);
+#define SetDefaultPrinter WINELIB_NAME_AW(SetDefaultPrinter)
+
+BOOL WINAPI DeletePrinterDriverA(LPSTR pName, LPSTR pEnvironment,
+ LPSTR pDriverName);
+BOOL WINAPI DeletePrinterDriverW(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pDriverName);
+#define DeletePrinterDriver WINELIB_NAME_AW(DeletePrinterDriver)
+
+BOOL WINAPI DeletePrinterDriverExA(LPSTR pName, LPSTR pEnvironment,
+ LPSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag);
+BOOL WINAPI DeletePrinterDriverExW(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pDriverName, DWORD dwDeleteFlag, DWORD dwVersionFlag);
+#define DeletePrinterDriverEx WINELIB_NAME_AW(DeletePrinterDriverEx)
+
+BOOL WINAPI AddPrintProcessorA(LPSTR pName, LPSTR pEnvironment,
+ LPSTR pPathName, LPSTR pPrintProcessorName);
+BOOL WINAPI AddPrintProcessorW(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pPathName, LPWSTR pPrintProcessorName);
+#define AddPrintProcessor WINELIB_NAME_AW(AddPrintProcessor)
+
+BOOL WINAPI EnumPrintProcessorsA(LPSTR pName, LPSTR pEnvironment,
+ DWORD Level, LPBYTE pPrintProcessorInfo,
+ DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcbReturned);
+BOOL WINAPI EnumPrintProcessorsW(LPWSTR pName, LPWSTR pEnvironment,
+ DWORD Level, LPBYTE pPrintProcessorInfo,
+ DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcbReturned);
+#define EnumPrintProcessors WINELIB_NAME_AW(EnumPrintProcessors)
+
+BOOL WINAPI GetPrintProcessorDirectoryA(LPSTR pName, LPSTR pEnvironment,
+ DWORD Level,
+ LPBYTE pPrintProcessorInfo,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+
+BOOL WINAPI GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment,
+ DWORD Level,
+ LPBYTE pPrintProcessorInfo,
+ DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetPrintProcessorDirectory WINELIB_NAME_AW(GetPrintProcessorDirectory)
+
+BOOL WINAPI EnumPrintProcessorDatatypesA(LPSTR pName,
+ LPSTR pPrintProcessorName,
+ DWORD Level, LPBYTE pDatatypes,
+ DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcbReturned);
+BOOL WINAPI EnumPrintProcessorDatatypesW(LPWSTR pName,
+ LPWSTR pPrintProcessorName,
+ DWORD Level, LPBYTE pDatatypes,
+ DWORD cbBuf, LPDWORD pcbNeeded,
+ LPDWORD pcbReturned);
+#define EnumPrintProcessorDatatypes WINELIB_NAME_AW(EnumPrintProcessorDatatypes)
+
+BOOL WINAPI DeletePrintProcessorA(LPSTR pName, LPSTR pEnvironment,
+ LPSTR pPrintProcessorName);
+BOOL WINAPI DeletePrintProcessorW(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pPrintProcessorName);
+#define DeletePrintProcessor WINELIB_NAME_AW(DeletePrintProcessor)
+
+DWORD WINAPI StartDocPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
+DWORD WINAPI StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo);
+#define StartDocPrinter WINELIB_NAME_AW(StartDocPrinter)
+
+BOOL WINAPI StartPagePrinter(HANDLE hPrinter);
+BOOL WINAPI WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+ LPDWORD pcWritten);
+BOOL WINAPI EndPagePrinter(HANDLE hPrinter);
+BOOL WINAPI AbortPrinter(HANDLE hPrinter);
+BOOL WINAPI ReadPrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf,
+ LPDWORD pNoBytesRead);
+BOOL WINAPI EndDocPrinter(HANDLE hPrinter);
+
+BOOL WINAPI AddJobA(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
+ LPDWORD pcbNeeded);
+BOOL WINAPI AddJobW(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
+ LPDWORD pcbNeeded);
+#define AddJob WINELIB_NAME_AW(AddJob)
+
+BOOL WINAPI ScheduleJob(HANDLE hPrinter, DWORD JobID);
+
+LONG WINAPI AdvancedDocumentPropertiesA(HWND hWnd, HANDLE hPrinter,
+ LPSTR pDeviceName,
+ PDEVMODEA pDevModeOutput,
+ PDEVMODEA pDevModeInput);
+LONG WINAPI AdvancedDocumentPropertiesW(HWND hWnd, HANDLE hPrinter,
+ LPWSTR pDeviceName,
+ PDEVMODEW pDevModeOutput,
+ PDEVMODEW pDevModeInput);
+#define AdvancedDocumentProperties WINELIB_NAME_AW(AdvancedDocumentProperties)
+
+DWORD WINAPI GetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, LPDWORD pType,
+ LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+DWORD WINAPI GetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, LPDWORD pType,
+ LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+#define GetPrinterData WINELIB_NAME_AW(GetPrinterData)
+
+DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+ LPCSTR pValueName, LPDWORD pType,
+ LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPCWSTR pValueName, LPDWORD pType,
+ LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded);
+#define GetPrinterDataEx WINELIB_NAME_AW(GetPrinterDataEx)
+
+DWORD WINAPI DeletePrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+ LPCSTR pValueName);
+DWORD WINAPI DeletePrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPCWSTR pValueName);
+#define DeletePrinterDataEx WINELIB_NAME_AW(DeletePrinterDataEx)
+
+DWORD WINAPI SetPrinterDataA(HANDLE hPrinter, LPSTR pValueName, DWORD Type,
+ LPBYTE pData, DWORD cbData);
+DWORD WINAPI SetPrinterDataW(HANDLE hPrinter, LPWSTR pValueName, DWORD Type,
+ LPBYTE pData, DWORD cbData);
+#define SetPrinterData WINELIB_NAME_AW(SetPrinterData)
+
+DWORD WINAPI SetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+ LPCSTR pValueName, DWORD Type,
+ LPBYTE pData, DWORD cbData);
+DWORD WINAPI SetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPCWSTR pValueName, DWORD Type,
+ LPBYTE pData, DWORD cbData);
+#define SetPrinterDataEx WINELIB_NAME_AW(SetPrinterDataEx)
+
+DWORD WINAPI WaitForPrinterChange(HANDLE hPrinter, DWORD Flags);
+HANDLE WINAPI FindFirstPrinterChangeNotification(HANDLE hPrinter,
+ DWORD fdwFlags,
+ DWORD fdwOptions,
+ LPVOID pPrinterNotifyOptions);
+BOOL WINAPI FindNextPrinterChangeNotification(HANDLE hChange,
+ PDWORD pdwChange,
+ LPVOID pvReserved,
+ LPVOID *ppPrinterNotifyInfo);
+BOOL WINAPI FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO pPrinterNotifyInfo);
+BOOL WINAPI FindClosePrinterChangeNotification(HANDLE hChange);
+
+DWORD WINAPI PrinterMessageBoxA(HANDLE hPrinter, DWORD Error, HWND hWnd,
+ LPSTR pText, LPSTR pCaption, DWORD dwType);
+DWORD WINAPI PrinterMessageBoxW(HANDLE hPrinter, DWORD Error, HWND hWnd,
+ LPWSTR pText, LPWSTR pCaption, DWORD dwType);
+#define PrinterMessageBox WINELIB_NAME_AW(PrinterMessageBox)
+
+BOOL WINAPI AddFormA(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
+BOOL WINAPI AddFormW(HANDLE hPrinter, DWORD Level, LPBYTE pForm);
+#define AddForm WINELIB_NAME_AW(AddForm)
+
+BOOL WINAPI DeleteFormA(HANDLE hPrinter, LPSTR pFormName);
+BOOL WINAPI DeleteFormW(HANDLE hPrinter, LPWSTR pFormName);
+#define DeleteForm WINELIB_NAME_AW(DeleteForm)
+
+BOOL WINAPI GetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level,
+ LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
+BOOL WINAPI GetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+ LPBYTE pForm, DWORD cbBuf, LPDWORD pcbNeeded);
+#define GetForm WINELIB_NAME_AW(GetForm)
+
+BOOL WINAPI SetFormA(HANDLE hPrinter, LPSTR pFormName, DWORD Level,
+ LPBYTE pForm);
+BOOL WINAPI SetFormW(HANDLE hPrinter, LPWSTR pFormName, DWORD Level,
+ LPBYTE pForm);
+#define SetForm WINELIB_NAME_AW(SetForm)
+
+BOOL WINAPI EnumFormsA(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf,
+ LPDWORD pcbNeeded, LPDWORD pcReturned);
+BOOL WINAPI EnumFormsW(HANDLE hPrinter, DWORD Level, LPBYTE pForm, DWORD cbBuf,
+ LPDWORD pcbNeeded, LPDWORD pcReturned);
+#define EnumForms WINELIB_NAME_AW(EnumForms)
+
+BOOL WINAPI EnumMonitorsA(LPSTR pName, DWORD Level, LPBYTE pMonitors,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+BOOL WINAPI EnumMonitorsW(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+#define EnumMonitors WINELIB_NAME_AW(EnumMonitors)
+
+DWORD WINAPI EnumPrinterDataA( HANDLE hPrinter, DWORD dwIndex, LPSTR pValueName,
+ DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData,
+ DWORD cbData, LPDWORD pcbData );
+DWORD WINAPI EnumPrinterDataW( HANDLE hPrinter, DWORD dwIndex, LPWSTR pValueName,
+ DWORD cbValueName, LPDWORD pcbValueName, LPDWORD pType, LPBYTE pData,
+ DWORD cbData, LPDWORD pcbData );
+#define EnumPrinterData WINELIB_NAME_AW(EnumPrinterData)
+
+BOOL WINAPI AddMonitorA(LPSTR pName, DWORD Level, LPBYTE pMonitors);
+BOOL WINAPI AddMonitorW(LPWSTR pName, DWORD Level, LPBYTE pMonitors);
+#define AddMonitor WINELIB_NAME_AW(AddMonitor)
+
+BOOL WINAPI DeleteMonitorA(LPSTR pName, LPSTR pEnvironment,
+ LPSTR pMonitorName);
+BOOL WINAPI DeleteMonitorW(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pMonitorName);
+#define DeleteMonitor WINELIB_NAME_AW(DeleteMonitor)
+
+BOOL WINAPI EnumPortsA(LPSTR pName, DWORD Level, LPBYTE pPorts,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+BOOL WINAPI EnumPortsW(LPWSTR pName, DWORD Level, LPBYTE pPorts,
+ DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned);
+#define EnumPorts WINELIB_NAME_AW(EnumPorts)
+
+BOOL WINAPI AddPortA(LPSTR pName, HWND hWnd, LPSTR pMonitorName);
+BOOL WINAPI AddPortW(LPWSTR pName, HWND hWnd, LPWSTR pMonitorName);
+#define AddPort WINELIB_NAME_AW(AddPort)
+
+BOOL WINAPI AddPortExA(LPSTR, DWORD, LPBYTE, LPSTR);
+BOOL WINAPI AddPortExW(LPWSTR, DWORD, LPBYTE, LPWSTR);
+#define AddPortEx WINELIB_NAME_AW(AddPortEx)
+
+BOOL WINAPI ConfigurePortA(LPSTR pName, HWND hWnd, LPSTR pPortName);
+BOOL WINAPI ConfigurePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+#define ConfigurePort WINELIB_NAME_AW(ConfigurePort)
+
+BOOL WINAPI DeletePortA(LPSTR pName, HWND hWnd, LPSTR pPortName);
+BOOL WINAPI DeletePortW(LPWSTR pName, HWND hWnd, LPWSTR pPortName);
+#define DeletePort WINELIB_NAME_AW(DeletePort)
+
+BOOL WINAPI SetPortA(LPSTR pName, LPSTR pPortName, DWORD dwLevel,
+ LPBYTE pPortInfo);
+BOOL WINAPI SetPortW(LPWSTR pName, LPWSTR pPortName, DWORD dwLevel,
+ LPBYTE pPortInfo);
+#define SetPort WINELIB_NAME_AW(SetPort)
+
+BOOL WINAPI AddPrinterConnectionA(LPSTR pName);
+BOOL WINAPI AddPrinterConnectionW(LPWSTR pName);
+#define AddPrinterConnection WINELIB_NAME_AW(AddPrinterConnection)
+
+BOOL WINAPI DeletePrinterConnectionA(LPSTR pName);
+BOOL WINAPI DeletePrinterConnectionW(LPWSTR pName);
+#define DeletePrinterConnection WINELIB_NAME_AW(DeletePrinterConnection)
+
+HANDLE WINAPI ConnectToPrinterDlg(HWND hwnd, DWORD Flags);
+
+BOOL WINAPI AddPrintProvidorA(LPSTR pName, DWORD Level, LPBYTE pProvidorInfo);
+BOOL WINAPI AddPrintProvidorW(LPWSTR pName, DWORD Level, LPBYTE pProvidorInfo);
+#define AddPrintProvidor WINELIB_NAME_AW(AddPrintProvidor)
+
+BOOL WINAPI DeletePrintProvidorA(LPSTR pName, LPSTR pEnvironment,
+ LPSTR pPrintProvidorName);
+BOOL WINAPI DeletePrintProvidorW(LPWSTR pName, LPWSTR pEnvironment,
+ LPWSTR pPrintProvidorName);
+#define DeletePrintProvidor WINELIB_NAME_AW(DeletePrintProvidor)
+
+DWORD WINAPI EnumPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName,
+ LPBYTE pEnumValues, DWORD cbEnumValues,
+ LPDWORD pcbEnumValues, LPDWORD pnEnumValues);
+DWORD WINAPI EnumPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName,
+ LPBYTE pEnumValues, DWORD cbEnumValues,
+ LPDWORD pcbEnumValues, LPDWORD pnEnumValues);
+#define EnumPrinterDataEx WINELIB_NAME_AW(EnumPrinterDataEx)
+
+LONG WINAPI ExtDeviceMode( HWND hWnd, HANDLE hInst, LPDEVMODEA pDevModeOutput,
+ LPSTR pDeviceName, LPSTR pPort, LPDEVMODEA pDevModeInput, LPSTR pProfile,
+ DWORD fMode);
+
+LPSTR WINAPI StartDocDlgA(HANDLE hPrinter, DOCINFOA *doc);
+LPWSTR WINAPI StartDocDlgW(HANDLE hPrinter, DOCINFOW *doc);
+#define StartDocDlg WINELIB_NAME_AW(StartDocDlg)
+
+BOOL WINAPI XcvDataW(HANDLE hXcv, LPCWSTR pszDataName, PBYTE pInputData,
+ DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData,
+ PDWORD pcbOutputNeeded, PDWORD pdwStatus);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* __WINE_WINSPOOL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h
new file mode 100644
index 00000000..acb3a148
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsvc.h
@@ -0,0 +1,425 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINSVC_H
+#define __WINE_WINSVC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifdef _ADVAPI32_
+#define WINADVAPI
+#else
+#define WINADVAPI DECLSPEC_IMPORT
+#endif
+
+/* Service database names */
+#define SERVICES_ACTIVE_DATABASEA "ServicesActive"
+#define SERVICES_FAILED_DATABASEA "ServicesFailed"
+
+#if defined(__GNUC__)
+# define SERVICES_ACTIVE_DATABASEW (const WCHAR []){ 'S','e','r','v','i','c','e','s','A','c','t','i','v','e',0 }
+# define SERVICES_FAILED_DATABASEW (const WCHAR []){ 'S','e','r','v','i','c','e','s','F','a','i','l','e','d',0 }
+#elif defined(_MSC_VER)
+# define SERVICES_ACTIVE_DATABASEW L"ServicesActive"
+# define SERVICES_FAILED_DATABASEW L"ServicesFailed"
+#endif
+
+#define SERVICES_ACTIVE_DATABASE WINELIB_NAME_AW( SERVICES_ACTIVE_DATABASE )
+#define SERVICES_FAILED_DATABASE WINELIB_NAME_AW( SERVICES_FAILED_DATABASE )
+
+/* Service State requests */
+#define SERVICE_ACTIVE 0x00000001
+#define SERVICE_INACTIVE 0x00000002
+#define SERVICE_STATE_ALL (SERVICE_ACTIVE | SERVICE_INACTIVE)
+
+/* Controls */
+#define SERVICE_CONTROL_STOP 0x00000001
+#define SERVICE_CONTROL_PAUSE 0x00000002
+#define SERVICE_CONTROL_CONTINUE 0x00000003
+#define SERVICE_CONTROL_INTERROGATE 0x00000004
+#define SERVICE_CONTROL_SHUTDOWN 0x00000005
+#define SERVICE_CONTROL_PARAMCHANGE 0x00000006
+#define SERVICE_CONTROL_NETBINDADD 0x00000007
+#define SERVICE_CONTROL_NETBINDREMOVE 0x00000008
+#define SERVICE_CONTROL_NETBINDENABLE 0x00000009
+#define SERVICE_CONTROL_NETBINDDISABLE 0x0000000A
+#define SERVICE_CONTROL_DEVICEEVENT 0x0000000B
+#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C
+#define SERVICE_CONTROL_POWEREVENT 0x0000000D
+#define SERVICE_CONTROL_SESSIONCHANGE 0x0000000E
+#define SERVICE_CONTROL_PRESHUTDOWN 0x0000000F
+
+/* Service State */
+#define SERVICE_STOPPED 0x00000001
+#define SERVICE_START_PENDING 0x00000002
+#define SERVICE_STOP_PENDING 0x00000003
+#define SERVICE_RUNNING 0x00000004
+#define SERVICE_CONTINUE_PENDING 0x00000005
+#define SERVICE_PAUSE_PENDING 0x00000006
+#define SERVICE_PAUSED 0x00000007
+
+/* Controls Accepted */
+#define SERVICE_ACCEPT_STOP 0x00000001
+#define SERVICE_ACCEPT_PAUSE_CONTINUE 0x00000002
+#define SERVICE_ACCEPT_SHUTDOWN 0x00000004
+#define SERVICE_ACCEPT_PARAMCHANGE 0x00000008
+#define SERVICE_ACCEPT_NETBINDCHANGE 0x00000010
+#define SERVICE_ACCEPT_HARDWAREPROFILECHANGE 0x00000020
+#define SERVICE_ACCEPT_POWEREVENT 0x00000040
+#define SERVICE_ACCEPT_SESSIONCHANGE 0x00000080
+#define SERVICE_ACCEPT_PRESHUTDOWN 0x00000100
+
+/* Service Control Manager Object access types */
+#define SC_MANAGER_CONNECT 0x0001
+#define SC_MANAGER_CREATE_SERVICE 0x0002
+#define SC_MANAGER_ENUMERATE_SERVICE 0x0004
+#define SC_MANAGER_LOCK 0x0008
+#define SC_MANAGER_QUERY_LOCK_STATUS 0x0010
+#define SC_MANAGER_MODIFY_BOOT_CONFIG 0x0020
+#define SC_MANAGER_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED | \
+ SC_MANAGER_CONNECT | \
+ SC_MANAGER_CREATE_SERVICE | \
+ SC_MANAGER_ENUMERATE_SERVICE | \
+ SC_MANAGER_LOCK | \
+ SC_MANAGER_QUERY_LOCK_STATUS | \
+ SC_MANAGER_MODIFY_BOOT_CONFIG )
+
+#define SERVICE_QUERY_CONFIG 0x0001
+#define SERVICE_CHANGE_CONFIG 0x0002
+#define SERVICE_QUERY_STATUS 0x0004
+#define SERVICE_ENUMERATE_DEPENDENTS 0x0008
+#define SERVICE_START 0x0010
+#define SERVICE_STOP 0x0020
+#define SERVICE_PAUSE_CONTINUE 0x0040
+#define SERVICE_INTERROGATE 0x0080
+#define SERVICE_USER_DEFINED_CONTROL 0x0100
+
+#define SERVICE_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED | \
+ SERVICE_QUERY_CONFIG | \
+ SERVICE_CHANGE_CONFIG | \
+ SERVICE_QUERY_STATUS | \
+ SERVICE_ENUMERATE_DEPENDENTS | \
+ SERVICE_START | \
+ SERVICE_STOP | \
+ SERVICE_PAUSE_CONTINUE | \
+ SERVICE_INTERROGATE | \
+ SERVICE_USER_DEFINED_CONTROL )
+
+#define SERVICE_NO_CHANGE 0xffffffff
+
+
+/* Handle types */
+
+DECLARE_HANDLE(SC_HANDLE);
+typedef SC_HANDLE *LPSC_HANDLE;
+DECLARE_HANDLE(SERVICE_STATUS_HANDLE);
+typedef LPVOID SC_LOCK;
+
+/* Service status structure */
+
+typedef struct _SERVICE_STATUS {
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+} SERVICE_STATUS, *LPSERVICE_STATUS;
+
+/* Service status process structure */
+
+typedef struct _SERVICE_STATUS_PROCESS
+{
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+ DWORD dwProcessId;
+ DWORD dwServiceFlags;
+} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
+
+typedef enum _SC_STATUS_TYPE {
+ SC_STATUS_PROCESS_INFO = 0
+} SC_STATUS_TYPE;
+
+/* Service main function prototype */
+
+typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONA)(DWORD,LPSTR*);
+typedef VOID (CALLBACK *LPSERVICE_MAIN_FUNCTIONW)(DWORD,LPWSTR*);
+DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION)
+
+/* Service start table */
+
+typedef struct _SERVICE_TABLE_ENTRYA {
+ LPSTR lpServiceName;
+ LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
+} SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
+
+typedef struct _SERVICE_TABLE_ENTRYW {
+ LPWSTR lpServiceName;
+ LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
+} SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY)
+DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY)
+
+/* Service status enumeration structure */
+
+typedef struct _ENUM_SERVICE_STATUSA {
+ LPSTR lpServiceName;
+ LPSTR lpDisplayName;
+ SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
+
+typedef struct _ENUM_SERVICE_STATUSW {
+ LPWSTR lpServiceName;
+ LPWSTR lpDisplayName;
+ SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
+
+DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS)
+DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS)
+
+typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
+ LPSTR lpServiceName;
+ LPSTR lpDisplayName;
+ SERVICE_STATUS_PROCESS ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA;
+
+typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
+ LPWSTR lpServiceName;
+ LPWSTR lpDisplayName;
+ SERVICE_STATUS_PROCESS ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
+
+DECL_WINELIB_TYPE_AW(ENUM_SERVICE_STATUS_PROCESS)
+DECL_WINELIB_TYPE_AW(LPENUM_SERVICE_STATUS_PROCESS)
+
+typedef enum _SC_ENUM_TYPE {
+ SC_ENUM_PROCESS_INFO = 0
+} SC_ENUM_TYPE;
+
+typedef struct _QUERY_SERVICE_CONFIGA {
+ DWORD dwServiceType;
+ DWORD dwStartType;
+ DWORD dwErrorControl;
+ LPSTR lpBinaryPathName;
+ LPSTR lpLoadOrderGroup;
+ DWORD dwTagId;
+ LPSTR lpDependencies;
+ LPSTR lpServiceStartName;
+ LPSTR lpDisplayName;
+} QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
+
+typedef struct _QUERY_SERVICE_CONFIGW {
+ DWORD dwServiceType;
+ DWORD dwStartType;
+ DWORD dwErrorControl;
+ LPWSTR lpBinaryPathName;
+ LPWSTR lpLoadOrderGroup;
+ DWORD dwTagId;
+ LPWSTR lpDependencies;
+ LPWSTR lpServiceStartName;
+ LPWSTR lpDisplayName;
+} QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
+
+/* defines and structures for ChangeServiceConfig2 */
+#define SERVICE_CONFIG_DESCRIPTION 1
+#define SERVICE_CONFIG_FAILURE_ACTIONS 2
+#define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3
+#define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4
+#define SERVICE_CONFIG_SERVICE_SID_INFO 5
+#define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6
+#define SERVICE_CONFIG_PRESHUTDOWN_INFO 7
+
+
+typedef struct _SERVICE_DESCRIPTIONA {
+ LPSTR lpDescription;
+} SERVICE_DESCRIPTIONA,*LPSERVICE_DESCRIPTIONA;
+
+typedef struct _SERVICE_DESCRIPTIONW {
+ LPWSTR lpDescription;
+} SERVICE_DESCRIPTIONW,*LPSERVICE_DESCRIPTIONW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_DESCRIPTION)
+DECL_WINELIB_TYPE_AW(LPSERVICE_DESCRIPTION)
+
+typedef enum _SC_ACTION_TYPE {
+ SC_ACTION_NONE = 0,
+ SC_ACTION_RESTART = 1,
+ SC_ACTION_REBOOT = 2,
+ SC_ACTION_RUN_COMMAND = 3
+} SC_ACTION_TYPE;
+
+typedef struct _SC_ACTION {
+ SC_ACTION_TYPE Type;
+ DWORD Delay;
+} SC_ACTION,*LPSC_ACTION;
+
+typedef struct _SERVICE_FAILURE_ACTIONSA {
+ DWORD dwResetPeriod;
+ LPSTR lpRebootMsg;
+ LPSTR lpCommand;
+ DWORD cActions;
+ SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSA,*LPSERVICE_FAILURE_ACTIONSA;
+
+typedef struct _SERVICE_FAILURE_ACTIONSW {
+ DWORD dwResetPeriod;
+ LPWSTR lpRebootMsg;
+ LPWSTR lpCommand;
+ DWORD cActions;
+ SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_FAILURE_ACTIONS)
+DECL_WINELIB_TYPE_AW(LPSERVICE_FAILURE_ACTIONS)
+
+typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
+ BOOL fDelayedAutostart;
+} SERVICE_DELAYED_AUTO_START_INFO,*LPSERVICE_DELAYED_AUTO_START_INFO;
+
+typedef struct _SERVICE_FAILURE_ACTIONS_FLAG {
+ BOOL fFailureActionsOnNonCrashFailures;
+} SERVICE_FAILURE_ACTIONS_FLAG,*LPSERVICE_FAILURE_ACTIONS_FLAG;
+
+typedef struct _SERVICE_SID_INFO {
+ DWORD dwServiceSidType;
+} SERVICE_SID_INFO,*LPSERVICE_SID_INFO;
+
+typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA {
+ LPSTR pmszRequiredPrivileges;
+} SERVICE_REQUIRED_PRIVILEGES_INFOA,*LPSERVICE_REQUIRED_PRIVILEGES_INFOA;
+
+typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW {
+ LPWSTR pmszRequiredPrivileges;
+} SERVICE_REQUIRED_PRIVILEGES_INFOW,*LPSERVICE_REQUIRED_PRIVILEGES_INFOW;
+
+DECL_WINELIB_TYPE_AW(SERVICE_REQUIRED_PRIVILEGES_INFO)
+DECL_WINELIB_TYPE_AW(LPSERVICE_REQUIRED_PRIVILEGES_INFO)
+
+typedef struct _SERVICE_PRESHUTDOWN_INFO {
+ DWORD dwPreshutdownTimeout;
+} SERVICE_PRESHUTDOWN_INFO,*LPSERVICE_PRESHUTDOWN_INFO;
+
+typedef struct _QUERY_SERVICE_LOCK_STATUSA
+{
+ DWORD fIsLocked;
+ LPSTR lpLockOwner;
+ DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
+
+typedef struct _QUERY_SERVICE_LOCK_STATUSW
+{
+ DWORD fIsLocked;
+ LPWSTR lpLockOwner;
+ DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
+
+DECL_WINELIB_TYPE_AW(QUERY_SERVICE_LOCK_STATUS)
+
+/* Service control handler function prototype */
+
+typedef VOID (WINAPI *LPHANDLER_FUNCTION)(DWORD);
+typedef DWORD (WINAPI *LPHANDLER_FUNCTION_EX)(DWORD,DWORD,LPVOID,LPVOID);
+
+/* API function prototypes */
+
+WINADVAPI BOOL WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI BOOL WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
+#define ChangeServiceConfig WINELIB_NAME_AW(ChangeServiceConfig)
+WINADVAPI BOOL WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID);
+WINADVAPI BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID);
+#define ChangeServiceConfig2 WINELIB_NAME_AW(ChangeServiceConfig2)
+WINADVAPI BOOL WINAPI CloseServiceHandle(SC_HANDLE);
+WINADVAPI BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);
+WINADVAPI SC_HANDLE WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR);
+WINADVAPI SC_HANDLE WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR);
+#define CreateService WINELIB_NAME_AW(CreateService)
+WINADVAPI BOOL WINAPI DeleteService(SC_HANDLE);
+WINADVAPI BOOL WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD);
+WINADVAPI BOOL WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD);
+#define EnumDependentServices WINELIB_NAME_AW(EnumDependentServices)
+WINADVAPI BOOL WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,LPDWORD,LPDWORD,LPDWORD);
+WINADVAPI BOOL WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,LPDWORD,LPDWORD,LPDWORD);
+#define EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)
+WINADVAPI BOOL WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR);
+WINADVAPI BOOL WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR);
+#define EnumServicesStatus WINELIB_NAME_AW(EnumServicesStatus)
+WINADVAPI BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);
+WINADVAPI BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define GetServiceDisplayName WINELIB_NAME_AW(GetServiceDisplayName)
+WINADVAPI BOOL WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,LPDWORD);
+WINADVAPI BOOL WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,LPDWORD);
+#define GetServiceKeyName WINELIB_NAME_AW(GetServiceKeyName)
+WINADVAPI SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE);
+WINADVAPI BOOL WINAPI NotifyBootConfigStatus(BOOL);
+WINADVAPI SC_HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
+WINADVAPI SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
+#define OpenSCManager WINELIB_NAME_AW(OpenSCManager)
+WINADVAPI SC_HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);
+WINADVAPI SC_HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);
+#define OpenService WINELIB_NAME_AW(OpenService)
+WINADVAPI BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS);
+WINADVAPI BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,LPDWORD);
+#define QueryServiceConfig WINELIB_NAME_AW(QueryServiceConfig)
+WINADVAPI BOOL WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
+#define QueryServiceConfig2 WINELIB_NAME_AW(QueryServiceConfig2)
+WINADVAPI BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,LPDWORD);
+WINADVAPI BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,LPDWORD);
+#define QueryServiceLockStatus WINELIB_NAME_AW(QueryServiceLockStatus)
+WINADVAPI BOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION);
+#define RegisterServiceCtrlHandler WINELIB_NAME_AW(RegisterServiceCtrlHandler)
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID);
+WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID);
+#define RegisterServiceCtrlHandlerEx WINELIB_NAME_AW(RegisterServiceCtrlHandlerEx)
+WINADVAPI BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINADVAPI BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS);
+WINADVAPI BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);
+WINADVAPI BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);
+#define StartService WINELIB_NAME_AW(StartService)
+WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA*);
+WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW*);
+#define StartServiceCtrlDispatcher WINELIB_NAME_AW(StartServiceCtrlDispatcher)
+WINADVAPI BOOL WINAPI UnlockServiceDatabase(SC_LOCK);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* !defined(__WINE_WINSVC_H) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl
new file mode 100644
index 00000000..48edb9f1
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winsxs.idl
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2010 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+import "oleidl.idl";
+
+interface IAssemblyCache;
+interface IAssemblyCacheItem;
+interface IAssemblyName;
+
+typedef struct _FUSION_INSTALL_REFERENCE_
+{
+ DWORD cbSize;
+ DWORD dwFlags;
+ GUID guidScheme;
+ LPCWSTR szIdentifier;
+ LPCWSTR szNonCannonicalData;
+} FUSION_INSTALL_REFERENCE, *LPFUSION_INSTALL_REFERENCE;
+
+typedef struct _ASSEMBLY_INFO
+{
+ ULONG cbAssemblyInfo;
+ DWORD dwAssemblyFlags;
+ ULARGE_INTEGER uliAssemblySizeInKB;
+ LPWSTR pszCurrentAssemblyPathBuf;
+ ULONG cchBuf;
+} ASSEMBLY_INFO;
+
+typedef const struct _FUSION_INSTALL_REFERENCE_ *LPCFUSION_INSTALL_REFERENCE;
+
+[
+ object,
+ uuid(e707dcde-d1cd-11d2-bab9-00c04f8eceae),
+ pointer_default(unique),
+ local
+]
+interface IAssemblyCache : IUnknown
+{
+ HRESULT UninstallAssembly(
+ [in] DWORD flags,
+ [in] LPCWSTR name,
+ [in] LPCFUSION_INSTALL_REFERENCE ref,
+ [out, optional] ULONG *disp);
+
+ HRESULT QueryAssemblyInfo(
+ [in] DWORD flags,
+ [in] LPCWSTR name,
+ [in, out] ASSEMBLY_INFO *info);
+
+ HRESULT CreateAssemblyCacheItem(
+ [in] DWORD flags,
+ [in] PVOID reserved,
+ [out] IAssemblyCacheItem **item,
+ [in, optional] LPCWSTR name);
+
+ HRESULT Reserved(
+ [out] IUnknown **reserved);
+
+ HRESULT InstallAssembly(
+ [in] DWORD flags,
+ [in] LPCWSTR path,
+ [in] LPCFUSION_INSTALL_REFERENCE ref);
+}
+
+[
+ object,
+ uuid(9e3aaeb4-d1cd-11d2-bab9-00c04f8eceae),
+ pointer_default(unique),
+ local
+]
+interface IAssemblyCacheItem : IUnknown
+{
+ HRESULT CreateStream(
+ [in] DWORD flags,
+ [in] LPCWSTR name,
+ [in] DWORD format,
+ [in] DWORD format_flags,
+ [out] IStream **stream,
+ [in, optional] ULARGE_INTEGER *max_size);
+
+ HRESULT Commit(
+ [in] DWORD flags,
+ [out, optional] ULONG *disp);
+
+ HRESULT AbortItem();
+}
+
+[
+ object,
+ uuid(cd193bc0-b4bc-11D2-9833-00c04fc31d2e),
+ pointer_default(unique),
+ local
+]
+interface IAssemblyName : IUnknown
+{
+ typedef [public] enum
+ {
+ ASM_NAME_PUBLIC_KEY,
+ ASM_NAME_PUBLIC_KEY_TOKEN,
+ ASM_NAME_HASH_VALUE,
+ ASM_NAME_NAME,
+ ASM_NAME_MAJOR_VERSION,
+ ASM_NAME_MINOR_VERSION,
+ ASM_NAME_BUILD_NUMBER,
+ ASM_NAME_REVISION_NUMBER,
+ ASM_NAME_CULTURE,
+ ASM_NAME_PROCESSOR_ID_ARRAY,
+ ASM_NAME_OSINFO_ARRAY,
+ ASM_NAME_HASH_ALGID,
+ ASM_NAME_ALIAS,
+ ASM_NAME_CODEBASE_URL,
+ ASM_NAME_CODEBASE_LASTMOD,
+ ASM_NAME_NULL_PUBLIC_KEY,
+ ASM_NAME_NULL_PUBLIC_KEY_TOKEN,
+ ASM_NAME_CUSTOM,
+ ASM_NAME_NULL_CUSTOM,
+ ASM_NAME_MVID,
+ ASM_NAME_MAX_PARAMS
+ } ASM_NAME;
+
+ typedef [public] enum
+ {
+ ASM_DISPLAYF_VERSION = 0x1,
+ ASM_DISPLAYF_CULTURE = 0x2,
+ ASM_DISPLAYF_PUBLIC_KEY_TOKEN = 0x4,
+ ASM_DISPLAYF_PUBLIC_KEY = 0x8,
+ ASM_DISPLAYF_CUSTOM = 0x10,
+ ASM_DISPLAYF_PROCESSORARCHITECTURE = 0x20,
+ ASM_DISPLAYF_LANGUAGEID = 0x40
+ } ASM_DISPLAY_FLAGS;
+
+ HRESULT SetProperty(
+ [in] DWORD id,
+ [in] LPVOID property,
+ [in] DWORD size);
+
+ HRESULT GetProperty(
+ [in] DWORD id,
+ [out] LPVOID buffer,
+ [in][out] LPDWORD buflen);
+
+ HRESULT Finalize();
+
+ HRESULT GetDisplayName(
+ [out] LPWSTR buffer,
+ [in][out] LPDWORD buflen,
+ [in] DWORD flags);
+
+ HRESULT Reserved(
+ [in] REFIID riid,
+ [in] IUnknown *pUnkReserved1,
+ [in] IUnknown *pUnkReserved2,
+ [in] LPCOLESTR szReserved,
+ [in] LONGLONG llReserved,
+ [in] LPVOID pvReserved,
+ [in] DWORD cbReserved,
+ [out] LPVOID *ppReserved);
+
+ HRESULT GetName(
+ [in][out] LPDWORD buflen,
+ [out] LPWSTR buffer);
+
+ HRESULT GetVersion(
+ [out] LPDWORD hi,
+ [out] LPDWORD low);
+
+ HRESULT IsEqual(
+ [in] IAssemblyName *name,
+ [in] DWORD flags);
+
+ HRESULT Clone(
+ [out] IAssemblyName **name);
+}
+
+typedef [unique] IAssemblyName *LPASSEMBLYNAME;
+typedef [public] enum
+{
+ CANOF_PARSE_DISPLAY_NAME = 0x1,
+ CANOF_SET_DEFAULT_VALUES = 0x2
+} CREATE_ASM_NAME_OBJ_FLAGS;
+
+cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);")
+cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME *,LPCWSTR,DWORD,LPVOID);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h
new file mode 100644
index 00000000..1cafea10
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintab.h
@@ -0,0 +1,797 @@
+/*
+ * Copyright (C) 1991-1998 by LCS/Telegraphics
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTAB_H
+#define __WINE_WINTAB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/***********************************************************************
+ * Messages
+ */
+#ifndef NOWTMESSAGES
+
+#define WT_DEFBASE 0x7FF0
+#define WT_MAXOFFSET 0xF
+
+#define _WT_PACKET(b) ((b)+0)
+#define _WT_CTXOPEN(b) ((b)+1)
+#define _WT_CTXCLOSE(b) ((b)+2)
+#define _WT_CTXUPDATE(b) ((b)+3)
+#define _WT_CTXOVERLAP(b) ((b)+4)
+#define _WT_PROXIMITY(b) ((b)+5)
+#define _WT_INFOCHANGE(b) ((b)+6)
+#define _WT_CSRCHANGE(b) ((b)+7) /* 1.1 */
+#define _WT_MAX(b) ((b)+WT_MAXOFFSET)
+
+#define WT_PACKET _WT_PACKET(WT_DEFBASE)
+#define WT_CTXOPEN _WT_CTXOPEN(WT_DEFBASE)
+#define WT_CTXCLOSE _WT_CTXCLOSE(WT_DEFBASE)
+#define WT_CTXUPDATE _WT_CTXUPDATE(WT_DEFBASE)
+#define WT_CTXOVERLAP _WT_CTXOVERLAP(WT_DEFBASE)
+#define WT_PROXIMITY _WT_PROXIMITY(WT_DEFBASE)
+#define WT_INFOCHANGE _WT_INFOCHANGE(WT_DEFBASE)
+#define WT_CSRCHANGE _WT_CSRCHANGE(WT_DEFBASE) /* 1.1 */
+#define WT_MAX _WT_MAX(WT_DEFBASE)
+
+#endif
+
+/***********************************************************************
+ * COMMON DATA DEFS
+ */
+
+DECLARE_HANDLE(HMGR); /* manager handle */
+DECLARE_HANDLE(HCTX); /* context handle */
+DECLARE_HANDLE(HWTHOOK); /* hook handle */
+
+typedef DWORD WTPKT; /* packet mask */
+
+#ifndef NOWTPKT
+
+/* WTPKT bits */
+#define PK_CONTEXT 0x0001 /* reporting context */
+#define PK_STATUS 0x0002 /* status bits */
+#define PK_TIME 0x0004 /* time stamp */
+#define PK_CHANGED 0x0008 /* change bit vector */
+#define PK_SERIAL_NUMBER 0x0010 /* packet serial number */
+#define PK_CURSOR 0x0020 /* reporting cursor */
+#define PK_BUTTONS 0x0040 /* button information */
+#define PK_X 0x0080 /* x axis */
+#define PK_Y 0x0100 /* y axis */
+#define PK_Z 0x0200 /* z axis */
+#define PK_NORMAL_PRESSURE 0x0400 /* normal or tip pressure */
+#define PK_TANGENT_PRESSURE 0x0800 /* tangential or barrel pressure */
+#define PK_ORIENTATION 0x1000 /* orientation info: tilts */
+#define PK_ROTATION 0x2000 /* rotation info; 1.1 */
+
+#endif
+
+typedef DWORD FIX32; /* fixed-point arithmetic type */
+
+#ifndef NOFIX32
+
+#define INT(x) HIWORD(x)
+#define FRAC(x) LOWORD(x)
+
+#define CASTFIX32(x) ((FIX32)((x)*65536L))
+
+#define ROUND(x) (INT(x) + (FRAC(x) > (WORD)0x8000))
+
+#define FIX_MUL(c, a, b) \
+ (c = (((DWORD)FRAC(a) * FRAC(b)) >> 16) + \
+ (DWORD)INT(a) * FRAC(b) + \
+ (DWORD)INT(b) * FRAC(a) + \
+ ((DWORD)INT(a) * INT(b) << 16))
+
+#ifdef _WINDLL
+# define FIX_DIV_SC static
+#else
+# define FIX_DIV_SC
+# endif
+
+#define FIX_DIV(c, a, b) \
+ { \
+ FIX_DIV_SC DWORD temp, rem, btemp; \
+ \
+ /* fraction done bytewise */ \
+ temp = ((a / b) << 16); \
+ rem = a % b; \
+ btemp = b; \
+ if (INT(btemp) < 256) { \
+ rem <<= 8; \
+ } else { \
+ btemp >>= 8; \
+ } \
+ temp += ((rem / btemp) << 8); \
+ rem %= btemp; \
+ rem <<= 8; \
+ temp += rem / btemp; \
+ c = temp; \
+ }
+
+#endif
+
+/***********************************************************************
+ * INFO DATA DEFS
+ */
+
+#ifndef NOWTINFO
+
+#ifndef NOWTAXIS
+
+typedef struct tagAXIS {
+ LONG axMin;
+ LONG axMax;
+ UINT axUnits;
+ FIX32 axResolution;
+} AXIS, *PAXIS, *NPAXIS, *LPAXIS;
+
+/* unit specifiers */
+#define TU_NONE 0
+#define TU_INCHES 1
+#define TU_CENTIMETERS 2
+#define TU_CIRCLE 3
+
+#endif
+
+#ifndef NOWTSYSBUTTONS
+
+/* system button assignment values */
+#define SBN_NONE 0x00
+#define SBN_LCLICK 0x01
+#define SBN_LDBLCLICK 0x02
+#define SBN_LDRAG 0x03
+#define SBN_RCLICK 0x04
+#define SBN_RDBLCLICK 0x05
+#define SBN_RDRAG 0x06
+#define SBN_MCLICK 0x07
+#define SBN_MDBLCLICK 0x08
+#define SBN_MDRAG 0x09
+
+/* for Pen Windows */
+#define SBN_PTCLICK 0x10
+#define SBN_PTDBLCLICK 0x20
+#define SBN_PTDRAG 0x30
+#define SBN_PNCLICK 0x40
+#define SBN_PNDBLCLICK 0x50
+#define SBN_PNDRAG 0x60
+#define SBN_P1CLICK 0x70
+#define SBN_P1DBLCLICK 0x80
+#define SBN_P1DRAG 0x90
+#define SBN_P2CLICK 0xA0
+#define SBN_P2DBLCLICK 0xB0
+#define SBN_P2DRAG 0xC0
+#define SBN_P3CLICK 0xD0
+#define SBN_P3DBLCLICK 0xE0
+#define SBN_P3DRAG 0xF0
+
+#endif
+
+#ifndef NOWTCAPABILITIES
+
+/* hardware capabilities */
+#define HWC_INTEGRATED 0x0001
+#define HWC_TOUCH 0x0002
+#define HWC_HARDPROX 0x0004
+#define HWC_PHYSID_CURSORS 0x0008 /* 1.1 */
+#endif
+
+#ifndef NOWTIFC
+
+#ifndef NOWTCURSORS
+
+/* cursor capabilities */
+#define CRC_MULTIMODE 0x0001 /* 1.1 */
+#define CRC_AGGREGATE 0x0002 /* 1.1 */
+#define CRC_INVERT 0x0004 /* 1.1 */
+
+#endif
+
+/* info categories */
+#define WTI_INTERFACE 1
+#define IFC_WINTABID 1
+#define IFC_SPECVERSION 2
+#define IFC_IMPLVERSION 3
+#define IFC_NDEVICES 4
+#define IFC_NCURSORS 5
+#define IFC_NCONTEXTS 6
+#define IFC_CTXOPTIONS 7
+#define IFC_CTXSAVESIZE 8
+#define IFC_NEXTENSIONS 9
+#define IFC_NMANAGERS 10
+#define IFC_MAX 10
+
+#endif
+
+#ifndef NOWTSTATUS
+
+#define WTI_STATUS 2
+#define STA_CONTEXTS 1
+#define STA_SYSCTXS 2
+#define STA_PKTRATE 3
+#define STA_PKTDATA 4
+#define STA_MANAGERS 5
+#define STA_SYSTEM 6
+#define STA_BUTTONUSE 7
+#define STA_SYSBTNUSE 8
+#define STA_MAX 8
+
+#endif
+
+#ifndef NOWTDEFCONTEXT
+
+#define WTI_DEFCONTEXT 3
+#define WTI_DEFSYSCTX 4
+#define WTI_DDCTXS 400 /* 1.1 */
+#define WTI_DSCTXS 500 /* 1.1 */
+#define CTX_NAME 1
+#define CTX_OPTIONS 2
+#define CTX_STATUS 3
+#define CTX_LOCKS 4
+#define CTX_MSGBASE 5
+#define CTX_DEVICE 6
+#define CTX_PKTRATE 7
+#define CTX_PKTDATA 8
+#define CTX_PKTMODE 9
+#define CTX_MOVEMASK 10
+#define CTX_BTNDNMASK 11
+#define CTX_BTNUPMASK 12
+#define CTX_INORGX 13
+#define CTX_INORGY 14
+#define CTX_INORGZ 15
+#define CTX_INEXTX 16
+#define CTX_INEXTY 17
+#define CTX_INEXTZ 18
+#define CTX_OUTORGX 19
+#define CTX_OUTORGY 20
+#define CTX_OUTORGZ 21
+#define CTX_OUTEXTX 22
+#define CTX_OUTEXTY 23
+#define CTX_OUTEXTZ 24
+#define CTX_SENSX 25
+#define CTX_SENSY 26
+#define CTX_SENSZ 27
+#define CTX_SYSMODE 28
+#define CTX_SYSORGX 29
+#define CTX_SYSORGY 30
+#define CTX_SYSEXTX 31
+#define CTX_SYSEXTY 32
+#define CTX_SYSSENSX 33
+#define CTX_SYSSENSY 34
+#define CTX_MAX 34
+
+#endif
+
+#ifndef NOWTDEVICES
+
+#define WTI_DEVICES 100
+#define DVC_NAME 1
+#define DVC_HARDWARE 2
+#define DVC_NCSRTYPES 3
+#define DVC_FIRSTCSR 4
+#define DVC_PKTRATE 5
+#define DVC_PKTDATA 6
+#define DVC_PKTMODE 7
+#define DVC_CSRDATA 8
+#define DVC_XMARGIN 9
+#define DVC_YMARGIN 10
+#define DVC_ZMARGIN 11
+#define DVC_X 12
+#define DVC_Y 13
+#define DVC_Z 14
+#define DVC_NPRESSURE 15
+#define DVC_TPRESSURE 16
+#define DVC_ORIENTATION 17
+#define DVC_ROTATION 18 /* 1.1 */
+#define DVC_PNPID 19 /* 1.1 */
+#define DVC_MAX 19
+
+#endif
+
+#ifndef NOWTCURSORS
+
+#define WTI_CURSORS 200
+#define CSR_NAME 1
+#define CSR_ACTIVE 2
+#define CSR_PKTDATA 3
+#define CSR_BUTTONS 4
+#define CSR_BUTTONBITS 5
+#define CSR_BTNNAMES 6
+#define CSR_BUTTONMAP 7
+#define CSR_SYSBTNMAP 8
+#define CSR_NPBUTTON 9
+#define CSR_NPBTNMARKS 10
+#define CSR_NPRESPONSE 11
+#define CSR_TPBUTTON 12
+#define CSR_TPBTNMARKS 13
+#define CSR_TPRESPONSE 14
+#define CSR_PHYSID 15 /* 1.1 */
+#define CSR_MODE 16 /* 1.1 */
+#define CSR_MINPKTDATA 17 /* 1.1 */
+#define CSR_MINBUTTONS 18 /* 1.1 */
+#define CSR_CAPABILITIES 19 /* 1.1 */
+/* from http://www.wacomeng.com/devsupport/ibmpc/wacomwindevfaq.html */
+#define CSR_TYPE 20
+#define CSR_MAX 20
+
+#endif
+
+#ifndef NOWTEXTENSIONS
+
+#define WTI_EXTENSIONS 300
+#define EXT_NAME 1
+#define EXT_TAG 2
+#define EXT_MASK 3
+#define EXT_SIZE 4
+#define EXT_AXES 5
+#define EXT_DEFAULT 6
+#define EXT_DEFCONTEXT 7
+#define EXT_DEFSYSCTX 8
+#define EXT_CURSORS 9
+#define EXT_MAX 109 /* Allow 100 cursors */
+
+#endif
+
+#endif
+
+/***********************************************************************
+ * CONTEXT DATA DEFS
+ */
+
+#define LCNAMELEN 40
+#define LC_NAMELEN 40
+
+typedef struct tagLOGCONTEXTA {
+ char lcName[LCNAMELEN];
+ UINT lcOptions;
+ UINT lcStatus;
+ UINT lcLocks;
+ UINT lcMsgBase;
+ UINT lcDevice;
+ UINT lcPktRate;
+ WTPKT lcPktData;
+ WTPKT lcPktMode;
+ WTPKT lcMoveMask;
+ DWORD lcBtnDnMask;
+ DWORD lcBtnUpMask;
+ LONG lcInOrgX;
+ LONG lcInOrgY;
+ LONG lcInOrgZ;
+ LONG lcInExtX;
+ LONG lcInExtY;
+ LONG lcInExtZ;
+ LONG lcOutOrgX;
+ LONG lcOutOrgY;
+ LONG lcOutOrgZ;
+ LONG lcOutExtX;
+ LONG lcOutExtY;
+ LONG lcOutExtZ;
+ FIX32 lcSensX;
+ FIX32 lcSensY;
+ FIX32 lcSensZ;
+ BOOL lcSysMode;
+ int lcSysOrgX;
+ int lcSysOrgY;
+ int lcSysExtX;
+ int lcSysExtY;
+ FIX32 lcSysSensX;
+ FIX32 lcSysSensY;
+} LOGCONTEXTA, *PLOGCONTEXTA, *NPLOGCONTEXTA, *LPLOGCONTEXTA;
+
+typedef struct tagLOGCONTEXTW {
+ WCHAR lcName[LCNAMELEN];
+ UINT lcOptions;
+ UINT lcStatus;
+ UINT lcLocks;
+ UINT lcMsgBase;
+ UINT lcDevice;
+ UINT lcPktRate;
+ WTPKT lcPktData;
+ WTPKT lcPktMode;
+ WTPKT lcMoveMask;
+ DWORD lcBtnDnMask;
+ DWORD lcBtnUpMask;
+ LONG lcInOrgX;
+ LONG lcInOrgY;
+ LONG lcInOrgZ;
+ LONG lcInExtX;
+ LONG lcInExtY;
+ LONG lcInExtZ;
+ LONG lcOutOrgX;
+ LONG lcOutOrgY;
+ LONG lcOutOrgZ;
+ LONG lcOutExtX;
+ LONG lcOutExtY;
+ LONG lcOutExtZ;
+ FIX32 lcSensX;
+ FIX32 lcSensY;
+ FIX32 lcSensZ;
+ BOOL lcSysMode;
+ int lcSysOrgX;
+ int lcSysOrgY;
+ int lcSysExtX;
+ int lcSysExtY;
+ FIX32 lcSysSensX;
+ FIX32 lcSysSensY;
+} LOGCONTEXTW, *PLOGCONTEXTW, *NPLOGCONTEXTW, *LPLOGCONTEXTW;
+
+DECL_WINELIB_TYPE_AW(LOGCONTEXT)
+DECL_WINELIB_TYPE_AW(PLOGCONTEXT)
+DECL_WINELIB_TYPE_AW(NPLOGCONTEXT)
+DECL_WINELIB_TYPE_AW(LPLOGCONTEXT)
+
+/* context option values */
+#define CXO_SYSTEM 0x0001
+#define CXO_PEN 0x0002
+#define CXO_MESSAGES 0x0004
+#define CXO_MARGIN 0x8000
+#define CXO_MGNINSIDE 0x4000
+#define CXO_CSRMESSAGES 0x0008 /* 1.1 */
+
+/* context status values */
+#define CXS_DISABLED 0x0001
+#define CXS_OBSCURED 0x0002
+#define CXS_ONTOP 0x0004
+
+/* context lock values */
+#define CXL_INSIZE 0x0001
+#define CXL_INASPECT 0x0002
+#define CXL_SENSITIVITY 0x0004
+#define CXL_MARGIN 0x0008
+#define CXL_SYSOUT 0x0010
+
+/***********************************************************************
+ * EVENT DATA DEFS
+ */
+
+/* For packet structure definition, see pktdef.h */
+
+/* packet status values */
+#define TPS_PROXIMITY 0x0001
+#define TPS_QUEUE_ERR 0x0002
+#define TPS_MARGIN 0x0004
+#define TPS_GRAB 0x0008
+#define TPS_INVERT 0x0010 /* 1.1 */
+
+typedef struct tagORIENTATION {
+ int orAzimuth;
+ int orAltitude;
+ int orTwist;
+} ORIENTATION, *PORIENTATION, *NPORIENTATION, *LPORIENTATION;
+
+typedef struct tagROTATION { /* 1.1 */
+ int roPitch;
+ int roRoll;
+ int roYaw;
+} ROTATION, *PROTATION, *NPROTATION, *LPROTATION;
+
+/* grandfather in obsolete member names. */
+#define rotPitch roPitch
+#define rotRoll roRoll
+#define rotYaw roYaw
+
+/* relative buttons */
+#define TBN_NONE 0
+#define TBN_UP 1
+#define TBN_DOWN 2
+
+/***********************************************************************
+ * DEVICE CONFIG CONSTANTS
+ */
+
+#ifndef NOWTDEVCFG
+
+#define WTDC_NONE 0
+#define WTDC_CANCEL 1
+#define WTDC_OK 2
+#define WTDC_RESTART 3
+
+#endif
+
+/***********************************************************************
+ * HOOK CONSTANTS
+ */
+
+#ifndef NOWTHOOKS
+
+#define WTH_PLAYBACK 1
+#define WTH_RECORD 2
+
+#define WTHC_GETLPLPFN (-3)
+#define WTHC_LPLPFNNEXT (-2)
+#define WTHC_LPFNNEXT (-1)
+#define WTHC_ACTION 0
+#define WTHC_GETNEXT 1
+#define WTHC_SKIP 2
+
+#endif
+
+/***********************************************************************
+ * PREFERENCE FUNCTION CONSTANTS
+ */
+
+#ifndef NOWTPREF
+
+#define WTP_LPDEFAULT ((LPVOID)-1L)
+#define WTP_DWDEFAULT ((DWORD)-1L)
+
+#endif
+
+/***********************************************************************
+ * EXTENSION TAGS AND CONSTANTS
+ */
+
+#ifndef NOWTEXTENSIONS
+
+/* constants for use with pktdef.h */
+#define PKEXT_ABSOLUTE 1
+#define PKEXT_RELATIVE 2
+
+/* Extension tags. */
+#define WTX_OBT 0 /* Out of bounds tracking */
+#define WTX_FKEYS 1 /* Function keys */
+#define WTX_TILT 2 /* Raw Cartesian tilt; 1.1 */
+#define WTX_CSRMASK 3 /* select input by cursor type; 1.1 */
+#define WTX_XBTNMASK 4 /* Extended button mask; 1.1 */
+
+typedef struct tagXBTNMASK {
+ BYTE xBtnDnMask[32];
+ BYTE xBtnUpMask[32];
+} XBTNMASK;
+
+typedef struct tagTILT { /* 1.1 */
+ int tiltX;
+ int tiltY;
+} TILT;
+
+#endif
+
+/***********************************************************************
+ * Functions
+ */
+
+#ifndef NOWTCALLBACKS
+
+#ifndef NOWTMANAGERFXNS
+
+/* callback function types */
+typedef BOOL (WINAPI * WTENUMPROC)(HCTX, LPARAM); /* changed CALLBACK->WINAPI, 1.1 */
+typedef BOOL (WINAPI * WTCONFIGPROC)(HCTX, HWND);
+typedef LRESULT (WINAPI * WTHOOKPROC)(int, WPARAM, LPARAM);
+typedef WTHOOKPROC *LPWTHOOKPROC;
+
+#endif
+
+#endif
+
+#ifndef NOWTFUNCTIONS
+
+#ifndef NOWTBASICFXNS
+/* BASIC FUNCTIONS */
+
+#define ORD_WTInfoA 20
+#define ORD_WTInfoW 1020
+#define ORD_WTInfo WINELIB_NAME_AW(ORD_WTInfo)
+#define ORD_WTOpenA 21
+#define ORD_WTOpenW 1021
+#define ORD_WTOpen WINELIB_NAME_AW(ORD_WTOpen)
+#define ORD_WTClose 22
+#define ORD_WTPacketsGet 23
+#define ORD_WTPacket 24
+
+UINT WINAPI WTInfoA(UINT, UINT, LPVOID);
+UINT WINAPI WTInfoW(UINT, UINT, LPVOID);
+#define WTInfo WINELIB_NAME_AW(WTInfo)
+HCTX WINAPI WTOpenA(HWND, LPLOGCONTEXTA, BOOL);
+HCTX WINAPI WTOpenW(HWND, LPLOGCONTEXTW, BOOL);
+#define WTOpen WINELIB_NAME_AW(WTOpen)
+BOOL WINAPI WTClose(HCTX);
+int WINAPI WTPacketsGet(HCTX, int, LPVOID);
+BOOL WINAPI WTPacket(HCTX, UINT, LPVOID);
+
+#endif
+
+#ifndef NOWTVISIBILITYFXNS
+/* VISIBILITY FUNCTIONS */
+
+#define ORD_WTEnable 40
+#define ORD_WTOverlap 41
+
+BOOL WINAPI WTEnable(HCTX, BOOL);
+BOOL WINAPI WTOverlap(HCTX, BOOL);
+
+#endif
+
+#ifndef NOWTCTXEDITFXNS
+/* CONTEXT EDITING FUNCTIONS */
+
+#define ORD_WTConfig 60
+#define ORD_WTGetA 61
+#define ORD_WTGetW 1061
+#define ORD_WTGet WINELIB_NAME_AW(ORD_WTGet)
+#define ORD_WTSetA 62
+#define ORD_WTSetW 1062
+#define ORD_WTSet WINELIB_NAME_AW(ORD_WTSet)
+#define ORD_WTExtGet 63
+#define ORD_WTExtSet 64
+#define ORD_WTSave 65
+#define ORD_WTRestore 66
+
+BOOL WINAPI WTConfig(HCTX, HWND);
+BOOL WINAPI WTGetA(HCTX, LPLOGCONTEXTA);
+BOOL WINAPI WTGetW(HCTX, LPLOGCONTEXTW);
+#define WTGet WINELIB_NAME_AW(WTGet)
+BOOL WINAPI WTSetA(HCTX, LPLOGCONTEXTA);
+BOOL WINAPI WTSetW(HCTX, LPLOGCONTEXTW);
+#define WTSet WINELIB_NAME_AW(WTSet)
+BOOL WINAPI WTExtGet(HCTX, UINT, LPVOID);
+BOOL WINAPI WTExtSet(HCTX, UINT, LPVOID);
+BOOL WINAPI WTSave(HCTX, LPVOID);
+HCTX WINAPI WTRestore(HWND, LPVOID, BOOL);
+
+#endif
+
+#ifndef NOWTQUEUEFXNS
+/* ADVANCED PACKET AND QUEUE FUNCTIONS */
+
+#define ORD_WTPacketsPeek 80
+#define ORD_WTDataGet 81
+#define ORD_WTDataPeek 82
+#define ORD_WTQueueSizeGet 84
+#define ORD_WTQueueSizeSet 85
+
+int WINAPI WTPacketsPeek(HCTX, int, LPVOID);
+int WINAPI WTDataGet(HCTX, UINT, UINT, int, LPVOID, LPINT);
+int WINAPI WTDataPeek(HCTX, UINT, UINT, int, LPVOID, LPINT);
+int WINAPI WTQueueSizeGet(HCTX);
+BOOL WINAPI WTQueueSizeSet(HCTX, int);
+
+#endif
+
+#ifndef NOWTHMGRFXNS
+/* MANAGER HANDLE FUNCTIONS */
+
+#define ORD_WTMgrOpen 100
+#define ORD_WTMgrClose 101
+
+HMGR WINAPI WTMgrOpen(HWND, UINT);
+BOOL WINAPI WTMgrClose(HMGR);
+
+#endif
+
+#ifndef NOWTMGRCTXFXNS
+/* MANAGER CONTEXT FUNCTIONS */
+
+#define ORD_WTMgrContextEnum 120
+#define ORD_WTMgrContextOwner 121
+#define ORD_WTMgrDefContext 122
+#define ORD_WTMgrDefContextEx 206
+
+BOOL WINAPI WTMgrContextEnum(HMGR, WTENUMPROC, LPARAM);
+HWND WINAPI WTMgrContextOwner(HMGR, HCTX);
+HCTX WINAPI WTMgrDefContext(HMGR, BOOL);
+HCTX WINAPI WTMgrDefContextEx(HMGR, UINT, BOOL); /* 1.1 */
+
+#endif
+
+#ifndef NOWTMGRCONFIGFXNS
+/* MANAGER CONFIG BOX FUNCTIONS */
+
+#define ORD_WTMgrDeviceConfig 140
+
+UINT WINAPI WTMgrDeviceConfig(HMGR, UINT, HWND);
+
+#endif
+
+#ifndef NOWTMGRHOOKFXNS
+/* MANAGER PACKET HOOK FUNCTIONS */
+
+/* OBSOLETE IN WIN32! */
+
+#endif
+
+#ifndef NOWTMGRPREFFXNS
+/* MANAGER PREFERENCE DATA FUNCTIONS */
+
+#define ORD_WTMgrExt 180
+#define ORD_WTMgrCsrEnable 181
+#define ORD_WTMgrCsrButtonMap 182
+#define ORD_WTMgrCsrPressureBtnMarks 183
+#define ORD_WTMgrCsrPressureResponse 184
+#define ORD_WTMgrCsrExt 185
+
+BOOL WINAPI WTMgrExt(HMGR, UINT, LPVOID);
+BOOL WINAPI WTMgrCsrEnable(HMGR, UINT, BOOL);
+BOOL WINAPI WTMgrCsrButtonMap(HMGR, UINT, LPBYTE, LPBYTE);
+BOOL WINAPI WTMgrCsrPressureBtnMarks(HMGR, UINT, DWORD, DWORD);
+BOOL WINAPI WTMgrCsrPressureResponse(HMGR, UINT, UINT *, UINT *);
+BOOL WINAPI WTMgrCsrExt(HMGR, UINT, UINT, LPVOID);
+
+#endif
+
+/***********************************************************************
+ * Win32 replacements for non-portable functions.
+ */
+
+#ifndef NOWTQUEUEFXNS
+/* ADVANCED PACKET AND QUEUE FUNCTIONS */
+
+#define ORD_WTQueuePacketsEx 200
+
+BOOL WINAPI WTQueuePacketsEx(HCTX, UINT *, UINT *);
+
+#endif
+
+#ifndef NOWTMGRCONFIGFXNS
+/* MANAGER CONFIG BOX FUNCTIONS */
+
+#define ORD_WTMgrConfigReplaceExA 202
+#define ORD_WTMgrConfigReplaceExW 1202
+#define ORD_WTMgrConfigReplaceEx WINELIB_NAME_AW(ORD_WTMgrConfigReplaceEx)
+
+BOOL WINAPI WTMgrConfigReplaceExA(HMGR, BOOL, LPSTR, LPSTR);
+BOOL WINAPI WTMgrConfigReplaceExW(HMGR, BOOL, LPWSTR, LPSTR);
+#define WTMgrConfigReplaceEx WINELIB_NAME_AW(WTMgrConfigReplaceEx)
+
+#endif
+
+#ifndef NOWTMGRHOOKFXNS
+/* MANAGER PACKET HOOK FUNCTIONS */
+
+#define ORD_WTMgrPacketHookExA 203
+#define ORD_WTMgrPacketHookExW 1203
+#define ORD_WTMgrPacketHookEx WINELIB_NAME_AW(ORD_WTMgrPacketHookEx)
+#define ORD_WTMgrPacketUnhook 204
+#define ORD_WTMgrPacketHookNext 205
+
+HWTHOOK WINAPI WTMgrPacketHookExA(HMGR, int, LPSTR, LPSTR);
+HWTHOOK WINAPI WTMgrPacketHookExW(HMGR, int, LPWSTR, LPSTR);
+#define WTMgrPacketHookEx WINELIB_NAME_AW(WTMgrPacketHookEx)
+BOOL WINAPI WTMgrPacketUnhook(HWTHOOK);
+LRESULT WINAPI WTMgrPacketHookNext(HWTHOOK, int, WPARAM, LPARAM);
+
+#endif
+
+#ifndef NOWTMGRPREFFXNS
+/* MANAGER PREFERENCE DATA FUNCTIONS */
+
+#define ORD_WTMgrCsrPressureBtnMarksEx 201
+
+BOOL WINAPI WTMgrCsrPressureBtnMarksEx(HMGR, UINT, UINT *, UINT *);
+
+#endif
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* defined(__WINE_WINTAB_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h
new file mode 100644
index 00000000..d660033a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintabx.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1991-1998 by LCS/Telegraphics
+ * Copyright (C) 2002 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTABX_H
+#define __WINE_WINTABX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/***********************************************************************
+ * Wintab message crackers
+ */
+
+#ifndef HANDLE_MSG
+# define HANDLE_MSG(hwnd, message, fn) \
+ case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
+#endif
+
+/* void Cls_OnWintabPacket(HWND hwnd, HCTX hCtx, UINT sn) */
+#define HANDLE_WT_PACKET(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HCTX)(lParam), (UINT)(wParam)), 0L)
+#define FORWARD__WT_PACKET(hwnd, bs, hCtx, sn, fn) \
+ (void)(fn)((hwnd), _WT_PACKET(bs), (WPARAM)(UINT)(sn), (LPARAM)(HCTX)(hCtx))
+#define FORWARD_WT_PACKET(hwnd, hCtx, sn, fn) \
+ FORWARD__WT_PACKET(hwnd, WT_DEFBASE, hCtx, sn, fn)
+
+/* void Cls_OnWintabCtxOpen(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXOPEN(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXOPEN(hwnd, bs, hCtx, sf, fn) \
+ (void)(fn)((hwnd), _WT_CTXOPEN(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXOPEN(hwnd, hCtx, sf, fn) \
+ FORWARD__WT_CTXOPEN(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxClose(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXCLOSE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXCLOSE(hwnd, bs, hCtx, sf, fn) \
+ (void)(fn)((hwnd), _WT_CTXCLOSE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXCLOSE(hwnd, hCtx, sf, fn) \
+ FORWARD__WT_CTXCLOSE(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxUpdate(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXUPDATE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXUPDATE(hwnd, bs, hCtx, sf, fn) \
+ (void)(fn)((hwnd), _WT_CTXUPDATE(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXUPDATE(hwnd, hCtx, sf, fn) \
+ FORWARD__WT_CTXUPDATE(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabCtxOverlap(HWND hwnd, HCTX hCtx, UINT sf) */
+#define HANDLE_WT_CTXOVERLAP(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HCTX)(wParam), (UINT)(lParam)), 0L)
+#define FORWARD__WT_CTXOVERLAP(hwnd, bs, hCtx, sf, fn) \
+ (void)(fn)((hwnd), _WT_CTXOVERLAP(bs), (WPARAM)(HCTX)(hCtx), (LPARAM)(UINT)(sf))
+#define FORWARD_WT_CTXOVERLAP(hwnd, hCtx, sf, fn) \
+ FORWARD__WT_CTXOVERLAP(hwnd, WT_DEFBASE, hCtx, sf, fn)
+
+/* void Cls_OnWintabProximity(HWND hwnd, HCTX hCtx, BOOL cp, BOOL hp) */
+#define HANDLE_WT_PROXIMITY(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HCTX)(wParam), (BOOL)LOWORD(lParam), (BOOL)HIWORD(lParam)), 0L)
+#define FORWARD__WT_PROXIMITY(hwnd, bs, hCtx, cp, hp, fn) \
+ (void)(fn)((hwnd), _WT_PROXIMITY(bs), (WPARAM)(HCTX)(hCtx), MAKELPARAM((cp), (hp))
+#define FORWARD_WT_PROXIMITY(hwnd, hCtx, sf, fn) \
+ FORWARD__WT_PROXIMITY(hwnd, WT_DEFBASE, hCtx, cp, hp, fn)
+
+/* void Cls_OnWintabInfoChange(HWND hwnd, HMGR hMgr, UINT c, UINT i) */
+#define HANDLE_WT_INFOCHANGE(hwnd, wParam, lParam, fn) \
+ ((fn)((hwnd), (HMGR)(wParam), (UINT)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
+#define FORWARD__WT_INFOCHANGE(hwnd, bs, hMgr, cp, hp, fn) \
+ (void)(fn)((hwnd), _WT_INFOCHANGE(bs), (WPARAM)(HMGR)(hMgr), MAKELPARAM((c), (i))
+#define FORWARD_WT_INFOCHANGE(hwnd, hMgr, sf, fn) \
+ FORWARD__WT_INFOCHANGE(hwnd, WT_DEFBASE, hMgr, cp, hp, fn)
+
+/***********************************************************************
+ * Alternate porting layer macros
+ */
+
+#define GET_WT_PACKET_HCTX(wp, lp) ((HCTX)lp)
+#define GET_WT_PACKET_SERIAL(wp, lp) (wp)
+#define GET_WT_PACKET_MPS(h, s) (s), (LPARAM)(h)
+
+#define GET_WT_CTXOPEN_HCTX(wp, lp) ((HCTX)wp)
+#define GET_WT_CTXOPEN_STATUS(wp, lp) ((UINT)lp)
+#define GET_WT_CTXOPEN_MPS(h, s) (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXCLOSE_HCTX(wp, lp) ((HCTX)wp)
+#define GET_WT_CTXCLOSE_STATUS(wp, lp) ((UINT)lp)
+#define GET_WT_CTXCLOSE_MPS(h, s) (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXUPDATE_HCTX(wp, lp) ((HCTX)wp)
+#define GET_WT_CTXUPDATE_STATUS(wp, lp) ((UINT)lp)
+#define GET_WT_CTXUPDATE_MPS(h, s) (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_CTXOVERLAP_HCTX(wp, lp) ((HCTX)wp)
+#define GET_WT_CTXOVERLAP_STATUS(wp, lp) ((UINT)lp)
+#define GET_WT_CTXOVERLAP_MPS(h, s) (WPARAM)(h), (LPARAM)(s)
+
+#define GET_WT_PROXIMITY_HCTX(wp, lp) ((HCTX)wp)
+#define GET_WT_PROXIMITY_CTXPROX(wp, lp) LOWORD(lp)
+#define GET_WT_PROXIMITY_HARDPROX(wp, lp) HIWORD(lp)
+#define GET_WT_PROXIMITY_MPS(h, fc, fh) (WPARAM)(h), MAKELONG(fc, fh)
+
+#define GET_WT_INFOCHANGE_HMGR(wp, lp) ((HMGR)wp)
+#define GET_WT_INFOCHANGE_CATEGORY(wp, lp) LOWORD(lp)
+#define GET_WT_INFOCHANGE_INDEX(wp, lp) HIWORD(lp)
+#define GET_WT_INFOCHANGE_MPS(h, c, i) (WPARAM)(h), MAKELONG(c, i)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* defined(__WINE_WINTABX_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h
new file mode 100644
index 00000000..6b59d243
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winternl.h
@@ -0,0 +1,2708 @@
+/*
+ * Internal NT APIs and data structures
+ *
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTERNL_H
+#define __WINE_WINTERNL_H
+
+#include <windef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+
+/**********************************************************************
+ * Fundamental types and data structures
+ */
+
+#ifndef WINE_NTSTATUS_DECLARED
+#define WINE_NTSTATUS_DECLARED
+typedef LONG NTSTATUS;
+#endif
+
+typedef const char *PCSZ;
+
+typedef short CSHORT;
+typedef CSHORT *PCSHORT;
+
+#ifndef __STRING_DEFINED__
+#define __STRING_DEFINED__
+typedef struct _STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PCHAR Buffer;
+} STRING, *PSTRING;
+#endif
+
+typedef STRING ANSI_STRING;
+typedef PSTRING PANSI_STRING;
+typedef const STRING *PCANSI_STRING;
+
+typedef STRING OEM_STRING;
+typedef PSTRING POEM_STRING;
+typedef const STRING *PCOEM_STRING;
+
+#ifndef __UNICODE_STRING_DEFINED__
+#define __UNICODE_STRING_DEFINED__
+typedef struct _UNICODE_STRING {
+ USHORT Length; /* bytes */
+ USHORT MaximumLength; /* bytes */
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+typedef const UNICODE_STRING *PCUNICODE_STRING;
+
+#ifndef _FILETIME_
+#define _FILETIME_
+/* 64 bit number of 100 nanoseconds intervals since January 1, 1601 */
+typedef struct _FILETIME
+{
+#ifdef WORDS_BIGENDIAN
+ DWORD dwHighDateTime;
+ DWORD dwLowDateTime;
+#else
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+#endif
+} FILETIME, *PFILETIME, *LPFILETIME;
+#endif /* _FILETIME_ */
+
+/*
+ * RTL_SYSTEM_TIME and RTL_TIME_ZONE_INFORMATION are the same as
+ * the SYSTEMTIME and TIME_ZONE_INFORMATION structures defined
+ * in winbase.h, however we need to define them separately so
+ * winternl.h doesn't depend on winbase.h. They are used by
+ * RtlQueryTimeZoneInformation and RtlSetTimeZoneInformation.
+ * The names are guessed; if anybody knows the real names, let me know.
+ */
+typedef struct _RTL_SYSTEM_TIME {
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+} RTL_SYSTEM_TIME, *PRTL_SYSTEM_TIME;
+
+typedef struct _RTL_TIME_ZONE_INFORMATION {
+ LONG Bias;
+ WCHAR StandardName[32];
+ RTL_SYSTEM_TIME StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[32];
+ RTL_SYSTEM_TIME DaylightDate;
+ LONG DaylightBias;
+} RTL_TIME_ZONE_INFORMATION, *PRTL_TIME_ZONE_INFORMATION;
+
+typedef struct _CLIENT_ID
+{
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+typedef struct _CURDIR
+{
+ UNICODE_STRING DosPath;
+ PVOID Handle;
+} CURDIR, *PCURDIR;
+
+typedef struct RTL_DRIVE_LETTER_CURDIR
+{
+ USHORT Flags;
+ USHORT Length;
+ ULONG TimeStamp;
+ UNICODE_STRING DosPath;
+} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
+
+typedef struct tagRTL_BITMAP {
+ ULONG SizeOfBitMap; /* Number of bits in the bitmap */
+ PULONG Buffer; /* Bitmap data, assumed sized to a DWORD boundary */
+} RTL_BITMAP, *PRTL_BITMAP;
+
+typedef const RTL_BITMAP *PCRTL_BITMAP;
+
+typedef struct tagRTL_BITMAP_RUN {
+ ULONG StartingIndex; /* Bit position at which run starts */
+ ULONG NumberOfBits; /* Size of the run in bits */
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef const RTL_BITMAP_RUN *PCRTL_BITMAP_RUN;
+
+typedef struct _RTL_USER_PROCESS_PARAMETERS
+{
+ ULONG AllocationSize;
+ ULONG Size;
+ ULONG Flags;
+ ULONG DebugFlags;
+ HANDLE ConsoleHandle;
+ ULONG ConsoleFlags;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+ CURDIR CurrentDirectory;
+ UNICODE_STRING DllPath;
+ UNICODE_STRING ImagePathName;
+ UNICODE_STRING CommandLine;
+ PWSTR Environment;
+ ULONG dwX;
+ ULONG dwY;
+ ULONG dwXSize;
+ ULONG dwYSize;
+ ULONG dwXCountChars;
+ ULONG dwYCountChars;
+ ULONG dwFillAttribute;
+ ULONG dwFlags;
+ ULONG wShowWindow;
+ UNICODE_STRING WindowTitle;
+ UNICODE_STRING Desktop;
+ UNICODE_STRING ShellInfo;
+ UNICODE_STRING RuntimeInfo;
+ RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20];
+} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
+
+/* value for Flags field (FIXME: not the correct name) */
+#define PROCESS_PARAMS_FLAG_NORMALIZED 1
+
+typedef struct _PEB_LDR_DATA
+{
+ ULONG Length;
+ BOOLEAN Initialized;
+ PVOID SsHandle;
+ LIST_ENTRY InLoadOrderModuleList;
+ LIST_ENTRY InMemoryOrderModuleList;
+ LIST_ENTRY InInitializationOrderModuleList;
+} PEB_LDR_DATA, *PPEB_LDR_DATA;
+
+typedef struct _GDI_TEB_BATCH
+{
+ ULONG Offset;
+ HANDLE HDC;
+ ULONG Buffer[0x136];
+} GDI_TEB_BATCH;
+
+typedef struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME
+{
+ struct _RTL_ACTIVATION_CONTEXT_STACK_FRAME *Previous;
+ struct _ACTIVATION_CONTEXT *ActivationContext;
+ ULONG Flags;
+} RTL_ACTIVATION_CONTEXT_STACK_FRAME, *PRTL_ACTIVATION_CONTEXT_STACK_FRAME;
+
+typedef struct _ACTIVATION_CONTEXT_STACK
+{
+ ULONG Flags;
+ ULONG NextCookieSequenceNumber;
+ RTL_ACTIVATION_CONTEXT_STACK_FRAME *ActiveFrame;
+ LIST_ENTRY FrameListCache;
+} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK;
+
+/***********************************************************************
+ * PEB data structure
+ */
+typedef struct _PEB
+{ /* win32/win64 */
+ BOOLEAN InheritedAddressSpace; /* 000/000 */
+ BOOLEAN ReadImageFileExecOptions; /* 001/001 */
+ BOOLEAN BeingDebugged; /* 002/002 */
+ BOOLEAN SpareBool; /* 003/003 */
+ HANDLE Mutant; /* 004/008 */
+ HMODULE ImageBaseAddress; /* 008/010 */
+ PPEB_LDR_DATA LdrData; /* 00c/018 */
+ RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 010/020 */
+ PVOID SubSystemData; /* 014/028 */
+ HANDLE ProcessHeap; /* 018/030 */
+ PRTL_CRITICAL_SECTION FastPebLock; /* 01c/038 */
+ PVOID /*PPEBLOCKROUTINE*/ FastPebLockRoutine; /* 020/040 */
+ PVOID /*PPEBLOCKROUTINE*/ FastPebUnlockRoutine; /* 024/048 */
+ ULONG EnvironmentUpdateCount; /* 028/050 */
+ PVOID KernelCallbackTable; /* 02c/058 */
+ ULONG Reserved[2]; /* 030/060 */
+ PVOID /*PPEB_FREE_BLOCK*/ FreeList; /* 038/068 */
+ ULONG TlsExpansionCounter; /* 03c/070 */
+ PRTL_BITMAP TlsBitmap; /* 040/078 */
+ ULONG TlsBitmapBits[2]; /* 044/080 */
+ PVOID ReadOnlySharedMemoryBase; /* 04c/088 */
+ PVOID ReadOnlySharedMemoryHeap; /* 050/090 */
+ PVOID *ReadOnlyStaticServerData; /* 054/098 */
+ PVOID AnsiCodePageData; /* 058/0a0 */
+ PVOID OemCodePageData; /* 05c/0a8 */
+ PVOID UnicodeCaseTableData; /* 060/0b0 */
+ ULONG NumberOfProcessors; /* 064/0b8 */
+ ULONG NtGlobalFlag; /* 068/0bc */
+ LARGE_INTEGER CriticalSectionTimeout; /* 070/0c0 */
+ SIZE_T HeapSegmentReserve; /* 078/0c8 */
+ SIZE_T HeapSegmentCommit; /* 07c/0d0 */
+ SIZE_T HeapDeCommitTotalFreeThreshold; /* 080/0d8 */
+ SIZE_T HeapDeCommitFreeBlockThreshold; /* 084/0e0 */
+ ULONG NumberOfHeaps; /* 088/0e8 */
+ ULONG MaximumNumberOfHeaps; /* 08c/0ec */
+ PVOID *ProcessHeaps; /* 090/0f0 */
+ PVOID GdiSharedHandleTable; /* 094/0f8 */
+ PVOID ProcessStarterHelper; /* 098/100 */
+ PVOID GdiDCAttributeList; /* 09c/108 */
+ PVOID LoaderLock; /* 0a0/110 */
+ ULONG OSMajorVersion; /* 0a4/118 */
+ ULONG OSMinorVersion; /* 0a8/11c */
+ ULONG OSBuildNumber; /* 0ac/120 */
+ ULONG OSPlatformId; /* 0b0/124 */
+ ULONG ImageSubSystem; /* 0b4/128 */
+ ULONG ImageSubSystemMajorVersion; /* 0b8/12c */
+ ULONG ImageSubSystemMinorVersion; /* 0bc/130 */
+ ULONG ImageProcessAffinityMask; /* 0c0/134 */
+ HANDLE GdiHandleBuffer[28]; /* 0c4/138 */
+ ULONG unknown[6]; /* 134/218 */
+ PVOID PostProcessInitRoutine; /* 14c/230 */
+ PRTL_BITMAP TlsExpansionBitmap; /* 150/238 */
+ ULONG TlsExpansionBitmapBits[32]; /* 154/240 */
+ ULONG SessionId; /* 1d4/2c0 */
+ ULARGE_INTEGER AppCompatFlags; /* 1d8/2c8 */
+ ULARGE_INTEGER AppCompatFlagsUser; /* 1e0/2d0 */
+ PVOID ShimData; /* 1e8/2d8 */
+ PVOID AppCompatInfo; /* 1ec/2e0 */
+ UNICODE_STRING CSDVersion; /* 1f0/2e8 */
+ PVOID ActivationContextData; /* 1f8/2f8 */
+ PVOID ProcessAssemblyStorageMap; /* 1fc/300 */
+ PVOID SystemDefaultActivationData; /* 200/308 */
+ PVOID SystemAssemblyStorageMap; /* 204/310 */
+ SIZE_T MinimumStackCommit; /* 208/318 */
+ PVOID *FlsCallback; /* 20c/320 */
+ LIST_ENTRY FlsListHead; /* 210/328 */
+ PRTL_BITMAP FlsBitmap; /* 218/338 */
+ ULONG FlsBitmapBits[4]; /* 21c/340 */
+} PEB, *PPEB;
+
+
+/***********************************************************************
+ * TEB data structure
+ */
+typedef struct _TEB
+{ /* win32/win64 */
+ NT_TIB Tib; /* 000/0000 */
+ PVOID EnvironmentPointer; /* 01c/0038 */
+ CLIENT_ID ClientId; /* 020/0040 */
+ PVOID ActiveRpcHandle; /* 028/0050 */
+ PVOID ThreadLocalStoragePointer; /* 02c/0058 */
+ PPEB Peb; /* 030/0060 */
+ ULONG LastErrorValue; /* 034/0068 */
+ ULONG CountOfOwnedCriticalSections; /* 038/006c */
+ PVOID CsrClientThread; /* 03c/0070 */
+ PVOID Win32ThreadInfo; /* 040/0078 */
+ ULONG Win32ClientInfo[31]; /* 044/0080 used for user32 private data in Wine */
+ PVOID WOW32Reserved; /* 0c0/0100 */
+ ULONG CurrentLocale; /* 0c4/0108 */
+ ULONG FpSoftwareStatusRegister; /* 0c8/010c */
+ PVOID SystemReserved1[54]; /* 0cc/0110 used for kernel32 private data in Wine */
+ LONG ExceptionCode; /* 1a4/02c0 */
+ ACTIVATION_CONTEXT_STACK ActivationContextStack; /* 1a8/02c8 */
+ BYTE SpareBytes1[24]; /* 1bc/02e8 used for ntdll private data in Wine */
+ PVOID SystemReserved2[10]; /* 1d4/0300 used for ntdll private data in Wine */
+ GDI_TEB_BATCH GdiTebBatch; /* 1fc/0350 used for vm86 private data in Wine */
+ HANDLE gdiRgn; /* 6dc/0838 */
+ HANDLE gdiPen; /* 6e0/0840 */
+ HANDLE gdiBrush; /* 6e4/0848 */
+ CLIENT_ID RealClientId; /* 6e8/0850 */
+ HANDLE GdiCachedProcessHandle; /* 6f0/0860 */
+ ULONG GdiClientPID; /* 6f4/0868 */
+ ULONG GdiClientTID; /* 6f8/086c */
+ PVOID GdiThreadLocaleInfo; /* 6fc/0870 */
+ ULONG UserReserved[5]; /* 700/0878 */
+ PVOID glDispachTable[280]; /* 714/0890 */
+ PVOID glReserved1[26]; /* b74/1150 */
+ PVOID glReserved2; /* bdc/1220 */
+ PVOID glSectionInfo; /* be0/1228 */
+ PVOID glSection; /* be4/1230 */
+ PVOID glTable; /* be8/1238 */
+ PVOID glCurrentRC; /* bec/1240 */
+ PVOID glContext; /* bf0/1248 */
+ ULONG LastStatusValue; /* bf4/1250 */
+ UNICODE_STRING StaticUnicodeString; /* bf8/1258 used by advapi32 */
+ WCHAR StaticUnicodeBuffer[261]; /* c00/1268 used by advapi32 */
+ PVOID DeallocationStack; /* e0c/1478 */
+ PVOID TlsSlots[64]; /* e10/1480 */
+ LIST_ENTRY TlsLinks; /* f10/1680 */
+ PVOID Vdm; /* f18/1690 */
+ PVOID ReservedForNtRpc; /* f1c/1698 */
+ PVOID DbgSsReserved[2]; /* f20/16a0 */
+ ULONG HardErrorDisabled; /* f28/16b0 */
+ PVOID Instrumentation[16]; /* f2c/16b8 */
+ PVOID WinSockData; /* f6c/1738 */
+ ULONG GdiBatchCount; /* f70/1740 */
+ ULONG Spare2; /* f74/1744 */
+ PVOID Spare3; /* f78/1748 */
+ PVOID Spare4; /* f7c/1750 */
+ PVOID ReservedForOle; /* f80/1758 */
+ ULONG WaitingOnLoaderLock; /* f84/1760 */
+ PVOID Reserved5[3]; /* f88/1768 */
+ PVOID *TlsExpansionSlots; /* f94/1780 */
+ ULONG ImpersonationLocale; /* f98/1788 */
+ ULONG IsImpersonating; /* f9c/178c */
+ PVOID NlsCache; /* fa0/1790 */
+ PVOID ShimData; /* fa4/1798 */
+ ULONG HeapVirtualAffinity; /* fa8/17a0 */
+ PVOID CurrentTransactionHandle; /* fac/17a8 */
+ PVOID ActiveFrame; /* fb0/17b0 */
+#ifdef _WIN64
+ PVOID unknown[2]; /* 17b8 */
+#endif
+ PVOID *FlsSlots; /* fb4/17c8 */
+} TEB, *PTEB;
+
+/***********************************************************************
+ * Enums
+ */
+
+typedef enum _FILE_INFORMATION_CLASS {
+ FileDirectoryInformation = 1,
+ FileFullDirectoryInformation,
+ FileBothDirectoryInformation,
+ FileBasicInformation,
+ FileStandardInformation,
+ FileInternalInformation,
+ FileEaInformation,
+ FileAccessInformation,
+ FileNameInformation,
+ FileRenameInformation,
+ FileLinkInformation,
+ FileNamesInformation,
+ FileDispositionInformation,
+ FilePositionInformation,
+ FileFullEaInformation,
+ FileModeInformation,
+ FileAlignmentInformation,
+ FileAllInformation,
+ FileAllocationInformation,
+ FileEndOfFileInformation,
+ FileAlternateNameInformation,
+ FileStreamInformation,
+ FilePipeInformation,
+ FilePipeLocalInformation,
+ FilePipeRemoteInformation,
+ FileMailslotQueryInformation,
+ FileMailslotSetInformation,
+ FileCompressionInformation,
+ FileObjectIdInformation,
+ FileCompletionInformation,
+ FileMoveClusterInformation,
+ FileQuotaInformation,
+ FileReparsePointInformation,
+ FileNetworkOpenInformation,
+ FileAttributeTagInformation,
+ FileTrackingInformation,
+ FileIdBothDirectoryInformation,
+ FileIdFullDirectoryInformation,
+ FileValidDataLengthInformation,
+ FileShortNameInformation = 40,
+ /* 41, 42, 43 undocumented */
+ FileSfioReserveInformation = 44,
+ FileSfioVolumeInformation = 45,
+ FileHardLinkInformation = 46,
+ /* 47 undocumented */
+ FileNormalizedNameInformation = 48,
+ /* 49 undocumented */
+ FileIdGlobalTxDirectoryInformation = 50,
+ /* 51, 52, 53 undocumented */
+ FileStandardLinkInformation = 54,
+ FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+typedef struct _FILE_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ WCHAR FileName[ANYSIZE_ARRAY];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ WCHAR FileName[ANYSIZE_ARRAY];
+} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION,
+ FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
+
+typedef struct _FILE_ID_FULL_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ LARGE_INTEGER FileId;
+ WCHAR FileName[ANYSIZE_ARRAY];
+} FILE_ID_FULL_DIRECTORY_INFORMATION, *PFILE_ID_FULL_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ CHAR ShortNameLength;
+ WCHAR ShortName[12];
+ WCHAR FileName[ANYSIZE_ARRAY];
+} FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION,
+ FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+
+typedef struct _FILE_ID_BOTH_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ CHAR ShortNameLength;
+ WCHAR ShortName[12];
+ LARGE_INTEGER FileId;
+ WCHAR FileName[ANYSIZE_ARRAY];
+} FILE_ID_BOTH_DIRECTORY_INFORMATION, *PFILE_ID_BOTH_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_BASIC_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ ULONG FileAttributes;
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
+
+typedef struct _FILE_STANDARD_INFORMATION {
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG NumberOfLinks;
+ BOOLEAN DeletePending;
+ BOOLEAN Directory;
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
+
+typedef struct _FILE_INTERNAL_INFORMATION {
+ LARGE_INTEGER IndexNumber;
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+
+typedef struct _FILE_EA_INFORMATION {
+ ULONG EaSize;
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
+
+typedef struct _FILE_ACCESS_INFORMATION {
+ ACCESS_MASK AccessFlags;
+} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
+
+typedef struct _FILE_NAME_INFORMATION {
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION {
+ BOOLEAN Replace;
+ HANDLE RootDir;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
+typedef struct _FILE_NAMES_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION {
+ BOOLEAN DoDeleteFile;
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+
+typedef struct _FILE_POSITION_INFORMATION {
+ LARGE_INTEGER CurrentByteOffset;
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
+
+typedef struct _FILE_ALIGNMENT_INFORMATION {
+ ULONG AlignmentRequirement;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
+
+typedef struct _FILE_ALLOCATION_INFORMATION {
+ LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
+
+typedef struct _FILE_END_OF_FILE_INFORMATION {
+ LARGE_INTEGER EndOfFile;
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION {
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER EndOfFile;
+ ULONG FileAttributes;
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
+
+typedef struct _FILE_FULL_EA_INFORMATION {
+ ULONG NextEntryOffset;
+ UCHAR Flags;
+ UCHAR EaNameLength;
+ USHORT EaValueLength;
+ CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+typedef struct _FILE_MODE_INFORMATION {
+ ULONG Mode;
+} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
+
+typedef struct _FILE_STREAM_INFORMATION
+{
+ ULONG NextEntryOffset;
+ ULONG StreamNameLength;
+ LARGE_INTEGER StreamSize;
+ LARGE_INTEGER StreamAllocationSize;
+ WCHAR StreamName[1];
+} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
+
+typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
+{
+ ULONG FileAttributes;
+ ULONG ReparseTag;
+} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
+ ULONG MaximumMessageSize;
+ ULONG MailslotQuota;
+ ULONG NextMessageSize;
+ ULONG MessagesAvailable;
+ LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_SET_INFORMATION {
+ LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
+
+typedef struct _FILE_PIPE_LOCAL_INFORMATION {
+ ULONG NamedPipeType;
+ ULONG NamedPipeConfiguration;
+ ULONG MaximumInstances;
+ ULONG CurrentInstances;
+ ULONG InboundQuota;
+ ULONG ReadDataAvailable;
+ ULONG OutboundQuota;
+ ULONG WriteQuotaAvailable;
+ ULONG NamedPipeState;
+ ULONG NamedPipeEnd;
+} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
+
+typedef struct _FILE_ALL_INFORMATION {
+ FILE_BASIC_INFORMATION BasicInformation;
+ FILE_STANDARD_INFORMATION StandardInformation;
+ FILE_INTERNAL_INFORMATION InternalInformation;
+ FILE_EA_INFORMATION EaInformation;
+ FILE_ACCESS_INFORMATION AccessInformation;
+ FILE_POSITION_INFORMATION PositionInformation;
+ FILE_MODE_INFORMATION ModeInformation;
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+ FILE_NAME_INFORMATION NameInformation;
+} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
+
+typedef enum _FSINFOCLASS {
+ FileFsVolumeInformation = 1,
+ FileFsLabelInformation,
+ FileFsSizeInformation,
+ FileFsDeviceInformation,
+ FileFsAttributeInformation,
+ FileFsControlInformation,
+ FileFsFullSizeInformation,
+ FileFsObjectIdInformation,
+ FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+typedef enum _KEY_INFORMATION_CLASS {
+ KeyBasicInformation,
+ KeyNodeInformation,
+ KeyFullInformation,
+ KeyNameInformation
+} KEY_INFORMATION_CLASS;
+
+typedef enum _KEY_VALUE_INFORMATION_CLASS {
+ KeyValueBasicInformation,
+ KeyValueFullInformation,
+ KeyValuePartialInformation,
+ KeyValueFullInformationAlign64,
+ KeyValuePartialInformationAlign64
+} KEY_VALUE_INFORMATION_CLASS;
+
+typedef enum _OBJECT_INFORMATION_CLASS {
+ ObjectBasicInformation,
+ ObjectNameInformation,
+ ObjectTypeInformation,
+ ObjectAllInformation,
+ ObjectDataInformation
+} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
+
+typedef enum _PROCESSINFOCLASS {
+ ProcessBasicInformation = 0,
+ ProcessQuotaLimits = 1,
+ ProcessIoCounters = 2,
+ ProcessVmCounters = 3,
+ ProcessTimes = 4,
+ ProcessBasePriority = 5,
+ ProcessRaisePriority = 6,
+ ProcessDebugPort = 7,
+ ProcessExceptionPort = 8,
+ ProcessAccessToken = 9,
+ ProcessLdtInformation = 10,
+ ProcessLdtSize = 11,
+ ProcessDefaultHardErrorMode = 12,
+ ProcessIoPortHandlers = 13,
+ ProcessPooledUsageAndLimits = 14,
+ ProcessWorkingSetWatch = 15,
+ ProcessUserModeIOPL = 16,
+ ProcessEnableAlignmentFaultFixup = 17,
+ ProcessPriorityClass = 18,
+ ProcessWx86Information = 19,
+ ProcessHandleCount = 20,
+ ProcessAffinityMask = 21,
+ ProcessPriorityBoost = 22,
+ ProcessDeviceMap = 23,
+ ProcessSessionInformation = 24,
+ ProcessForegroundInformation = 25,
+ ProcessWow64Information = 26,
+ ProcessImageFileName = 27,
+ ProcessLUIDDeviceMapsEnabled = 28,
+ ProcessBreakOnTermination = 29,
+ ProcessDebugObjectHandle = 30,
+ ProcessDebugFlags = 31,
+ ProcessHandleTracing = 32,
+ ProcessExecuteFlags = 34,
+ MaxProcessInfoClass
+} PROCESSINFOCLASS, PROCESS_INFORMATION_CLASS;
+
+#define MEM_EXECUTE_OPTION_DISABLE 0x01
+#define MEM_EXECUTE_OPTION_ENABLE 0x02
+#define MEM_EXECUTE_OPTION_PERMANENT 0x08
+
+typedef enum _SECTION_INHERIT {
+ ViewShare = 1,
+ ViewUnmap = 2
+} SECTION_INHERIT;
+
+typedef enum _SYSTEM_INFORMATION_CLASS {
+ SystemBasicInformation = 0,
+ SystemCpuInformation = 1,
+ SystemPerformanceInformation = 2,
+ SystemTimeOfDayInformation = 3, /* was SystemTimeInformation */
+ Unknown4,
+ SystemProcessInformation = 5,
+ Unknown6,
+ Unknown7,
+ SystemProcessorPerformanceInformation = 8,
+ Unknown9,
+ Unknown10,
+ SystemModuleInformation = 11,
+ Unknown12,
+ Unknown13,
+ Unknown14,
+ Unknown15,
+ SystemHandleInformation = 16,
+ Unknown17,
+ SystemPageFileInformation = 18,
+ Unknown19,
+ Unknown20,
+ SystemCacheInformation = 21,
+ Unknown22,
+ SystemInterruptInformation = 23,
+ SystemDpcBehaviourInformation = 24,
+ SystemFullMemoryInformation = 25,
+ SystemNotImplemented6 = 25,
+ SystemLoadImage = 26,
+ SystemUnloadImage = 27,
+ SystemTimeAdjustmentInformation = 28,
+ SystemTimeAdjustment = 28,
+ SystemSummaryMemoryInformation = 29,
+ SystemNotImplemented7 = 29,
+ SystemNextEventIdInformation = 30,
+ SystemNotImplemented8 = 30,
+ SystemEventIdsInformation = 31,
+ SystemCrashDumpInformation = 32,
+ SystemExceptionInformation = 33,
+ SystemCrashDumpStateInformation = 34,
+ SystemKernelDebuggerInformation = 35,
+ SystemContextSwitchInformation = 36,
+ SystemRegistryQuotaInformation = 37,
+ SystemCurrentTimeZoneInformation = 44,
+ SystemTimeZoneInformation = 44,
+ SystemLookasideInformation = 45,
+ SystemSetTimeSlipEvent = 46,
+ SystemCreateSession = 47,
+ SystemDeleteSession = 48,
+ SystemInvalidInfoClass4 = 49,
+ SystemRangeStartInformation = 50,
+ SystemVerifierInformation = 51,
+ SystemAddVerifier = 52,
+ SystemSessionProcessesInformation = 53,
+ Unknown54,
+ Unknown55,
+ Unknown56,
+ Unknown57,
+ Unknown58,
+ Unknown59,
+ Unknown60,
+ Unknown61,
+ Unknown62,
+ Unknown63,
+ Unknown64,
+ Unknown65,
+ Unknown66,
+ Unknown67,
+ Unknown68,
+ Unknown69,
+ Unknown70,
+ Unknown71,
+ Unknown72,
+ SystemLogicalProcessorInformation = 73,
+ SystemInformationClassMax
+} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
+
+typedef enum _TIMER_TYPE {
+ NotificationTimer,
+ SynchronizationTimer
+} TIMER_TYPE;
+
+typedef enum _THREADINFOCLASS {
+ ThreadBasicInformation,
+ ThreadTimes,
+ ThreadPriority,
+ ThreadBasePriority,
+ ThreadAffinityMask,
+ ThreadImpersonationToken,
+ ThreadDescriptorTableEntry,
+ ThreadEnableAlignmentFaultFixup,
+ ThreadEventPair_Reusable,
+ ThreadQuerySetWin32StartAddress,
+ ThreadZeroTlsCell,
+ ThreadPerformanceCount,
+ ThreadAmILastThread,
+ ThreadIdealProcessor,
+ ThreadPriorityBoost,
+ ThreadSetTlsArrayAddress,
+ ThreadIsIoPending,
+ ThreadHideFromDebugger,
+ MaxThreadInfoClass
+} THREADINFOCLASS;
+
+typedef struct _THREAD_BASIC_INFORMATION
+{
+ NTSTATUS ExitStatus;
+ PVOID TebBaseAddress;
+ CLIENT_ID ClientId;
+ ULONG_PTR AffinityMask;
+ LONG Priority;
+ LONG BasePriority;
+} THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
+
+typedef struct _THREAD_DESCRIPTOR_INFORMATION
+{
+ DWORD Selector;
+ LDT_ENTRY Entry;
+} THREAD_DESCRIPTOR_INFORMATION, *PTHREAD_DESCRIPTOR_INFORMATION;
+
+typedef struct _KERNEL_USER_TIMES {
+ LARGE_INTEGER CreateTime;
+ LARGE_INTEGER ExitTime;
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
+
+typedef enum _WINSTATIONINFOCLASS {
+ WinStationInformation = 8
+} WINSTATIONINFOCLASS;
+
+typedef enum _MEMORY_INFORMATION_CLASS {
+ MemoryBasicInformation,
+ MemoryWorkingSetList,
+ MemorySectionName,
+ MemoryBasicVlmInformation
+} MEMORY_INFORMATION_CLASS;
+
+typedef struct _MEMORY_SECTION_NAME
+{
+ UNICODE_STRING SectionFileName;
+} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
+
+typedef enum _MUTANT_INFORMATION_CLASS
+{
+ MutantBasicInformation
+} MUTANT_INFORMATION_CLASS, *PMUTANT_INFORMATION_CLASS;
+
+typedef struct _MUTANT_BASIC_INFORMATION {
+ LONG CurrentCount;
+ BOOLEAN OwnedByCaller;
+ BOOLEAN AbandonedState;
+} MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
+
+typedef enum _TIMER_INFORMATION_CLASS
+{
+ TimerBasicInformation = 0
+} TIMER_INFORMATION_CLASS;
+
+typedef struct _TIMER_BASIC_INFORMATION
+{
+ LARGE_INTEGER RemainingTime;
+ BOOLEAN TimerState;
+} TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
+
+
+/* return type of RtlDetermineDosPathNameType_U (FIXME: not the correct names) */
+typedef enum
+{
+ INVALID_PATH = 0,
+ UNC_PATH, /* "//foo" */
+ ABSOLUTE_DRIVE_PATH, /* "c:/foo" */
+ RELATIVE_DRIVE_PATH, /* "c:foo" */
+ ABSOLUTE_PATH, /* "/foo" */
+ RELATIVE_PATH, /* "foo" */
+ DEVICE_PATH, /* "//./foo" */
+ UNC_DOT_PATH /* "//." */
+} DOS_PATHNAME_TYPE;
+
+
+/***********************************************************************
+ * Types and data structures
+ */
+
+/* This is used by NtQuerySystemInformation */
+typedef struct _SYSTEM_THREAD_INFORMATION
+{ /* win32/win64 */
+ LARGE_INTEGER KernelTime; /* 00/00 */
+ LARGE_INTEGER UserTime; /* 08/08 */
+ LARGE_INTEGER CreateTime; /* 10/10 */
+ DWORD dwTickCount; /* 18/18 */
+ LPVOID StartAddress; /* 1c/20 */
+ CLIENT_ID ClientId; /* 20/28 */
+ DWORD dwCurrentPriority; /* 28/38 */
+ DWORD dwBasePriority; /* 2c/3c */
+ DWORD dwContextSwitches; /* 30/40 */
+ DWORD dwThreadState; /* 34/44 */
+ DWORD dwWaitReason; /* 38/48 */
+ DWORD dwUnknown; /* 3c/4c */
+} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
+
+typedef struct _IO_STATUS_BLOCK {
+ union {
+ NTSTATUS Status;
+ PVOID Pointer;
+ } DUMMYUNIONNAME;
+
+ ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID,PIO_STATUS_BLOCK,ULONG);
+
+typedef struct _KEY_BASIC_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+typedef struct _KEY_NODE_INFORMATION
+{
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG NameLength;
+ WCHAR Name[1];
+ /* Class[1]; */
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+
+typedef struct _KEY_FULL_INFORMATION
+{
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG SubKeys;
+ ULONG MaxNameLen;
+ ULONG MaxClassLen;
+ ULONG Values;
+ ULONG MaxValueNameLen;
+ ULONG MaxValueDataLen;
+ WCHAR Class[1];
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+
+typedef struct _KEY_NAME_INFORMATION {
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
+
+typedef struct _KEY_VALUE_ENTRY
+{
+ PUNICODE_STRING ValueName;
+ ULONG DataLength;
+ ULONG DataOffset;
+ ULONG Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+typedef struct _KEY_VALUE_FULL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataOffset;
+ ULONG DataLength;
+ ULONG NameLength;
+ WCHAR Name[1];
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataLength;
+ UCHAR Data[1];
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+#ifndef __OBJECT_ATTRIBUTES_DEFINED__
+#define __OBJECT_ATTRIBUTES_DEFINED__
+typedef struct _OBJECT_ATTRIBUTES {
+ ULONG Length;
+ HANDLE RootDirectory;
+ PUNICODE_STRING ObjectName;
+ ULONG Attributes;
+ PVOID SecurityDescriptor; /* type SECURITY_DESCRIPTOR */
+ PVOID SecurityQualityOfService; /* type SECURITY_QUALITY_OF_SERVICE */
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+#endif
+
+typedef struct _OBJECT_DATA_INFORMATION {
+ BOOLEAN InheritHandle;
+ BOOLEAN ProtectFromClose;
+} OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
+
+typedef struct _OBJECT_BASIC_INFORMATION {
+ ULONG Attributes;
+ ACCESS_MASK GrantedAccess;
+ ULONG HandleCount;
+ ULONG PointerCount;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG Reserved[3];
+ ULONG NameInformationLength;
+ ULONG TypeInformationLength;
+ ULONG SecurityDescriptorLength;
+ LARGE_INTEGER CreateTime;
+} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
+
+typedef struct _OBJECT_NAME_INFORMATION {
+ UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+typedef struct __OBJECT_TYPE_INFORMATION {
+ UNICODE_STRING TypeName;
+ ULONG Reserved [22];
+} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
+
+typedef struct _PROCESS_BASIC_INFORMATION {
+#ifdef __WINESRC__
+ DWORD_PTR ExitStatus;
+ PPEB PebBaseAddress;
+ DWORD_PTR AffinityMask;
+ DWORD_PTR BasePriority;
+ ULONG_PTR UniqueProcessId;
+ ULONG_PTR InheritedFromUniqueProcessId;
+#else
+ PVOID Reserved1;
+ PPEB PebBaseAddress;
+ PVOID Reserved2[2];
+ ULONG_PTR UniqueProcessId;
+ PVOID Reserved3;
+#endif
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
+
+#define PROCESS_PRIOCLASS_IDLE 1
+#define PROCESS_PRIOCLASS_NORMAL 2
+#define PROCESS_PRIOCLASS_HIGH 3
+#define PROCESS_PRIOCLASS_REALTIME 4
+#define PROCESS_PRIOCLASS_BELOW_NORMAL 5
+#define PROCESS_PRIOCLASS_ABOVE_NORMAL 6
+
+typedef struct _PROCESS_PRIORITY_CLASS {
+ BOOLEAN Foreground;
+ UCHAR PriorityClass;
+} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
+
+typedef struct _RTL_HEAP_DEFINITION {
+ ULONG Length; /* = sizeof(RTL_HEAP_DEFINITION) */
+
+ ULONG Unknown[11];
+} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
+
+typedef struct _RTL_RWLOCK {
+ RTL_CRITICAL_SECTION rtlCS;
+
+ HANDLE hSharedReleaseSemaphore;
+ UINT uSharedWaiters;
+
+ HANDLE hExclusiveReleaseSemaphore;
+ UINT uExclusiveWaiters;
+
+ INT iNumberActive;
+ HANDLE hOwningThreadId;
+ DWORD dwTimeoutBoost;
+ PVOID pDebugInfo;
+} RTL_RWLOCK, *LPRTL_RWLOCK;
+
+/* System Information Class 0x00 */
+
+typedef struct _SYSTEM_BASIC_INFORMATION {
+#ifdef __WINESRC__
+ DWORD unknown;
+ ULONG KeMaximumIncrement;
+ ULONG PageSize;
+ ULONG MmNumberOfPhysicalPages;
+ ULONG MmLowestPhysicalPage;
+ ULONG MmHighestPhysicalPage;
+ ULONG_PTR AllocationGranularity;
+ PVOID LowestUserAddress;
+ PVOID HighestUserAddress;
+ ULONG_PTR ActiveProcessorsAffinityMask;
+ BYTE NumberOfProcessors;
+#else
+ BYTE Reserved1[24];
+ PVOID Reserved2[4];
+ CCHAR NumberOfProcessors;
+#endif
+} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
+
+/* System Information Class 0x01 */
+
+typedef struct _SYSTEM_CPU_INFORMATION {
+ WORD Architecture;
+ WORD Level;
+ WORD Revision; /* combination of CPU model and stepping */
+ WORD Reserved; /* always zero */
+ DWORD FeatureSet; /* see bit flags below */
+} SYSTEM_CPU_INFORMATION, *PSYSTEM_CPU_INFORMATION;
+
+/* definitions of bits in the Feature set for the x86 processors */
+#define CPU_FEATURE_VME 0x00000005 /* Virtual 86 Mode Extensions */
+#define CPU_FEATURE_TSC 0x00000002 /* Time Stamp Counter available */
+#define CPU_FEATURE_CMOV 0x00000008 /* Conditional Move instruction*/
+#define CPU_FEATURE_PGE 0x00000014 /* Page table Entry Global bit */
+#define CPU_FEATURE_PSE 0x00000024 /* Page Size Extension */
+#define CPU_FEATURE_MTRR 0x00000040 /* Memory Type Range Registers */
+#define CPU_FEATURE_CX8 0x00000080 /* Compare and eXchange 8 byte instr. */
+#define CPU_FEATURE_MMX 0x00000100 /* Multi Media eXtensions */
+#define CPU_FEATURE_X86 0x00000200 /* seems to be always ON, on the '86 */
+#define CPU_FEATURE_PAT 0x00000400 /* Page Attribute Table */
+#define CPU_FEATURE_FXSR 0x00000800 /* FXSAVE and FXSTORE instructions */
+#define CPU_FEATURE_SEP 0x00001000 /* SYSENTER and SYSEXIT instructions */
+#define CPU_FEATURE_SSE 0x00002000 /* SSE extensions (ext. MMX) */
+#define CPU_FEATURE_3DNOW 0x00004000 /* 3DNOW instructions available */
+#define CPU_FEATURE_SSE2 0x00010000 /* SSE2 extensions (XMMI64) */
+#define CPU_FEATURE_DS 0x00020000 /* Debug Store */
+#define CPU_FEATURE_HTT 0x00040000 /* Hyper Threading Technology */
+
+/* System Information Class 0x02 */
+
+/* Documented in "Windows NT/2000 Native API Reference" by Gary Nebbett. */
+typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
+ LARGE_INTEGER IdleTime;
+ LARGE_INTEGER ReadTransferCount;
+ LARGE_INTEGER WriteTransferCount;
+ LARGE_INTEGER OtherTransferCount;
+ ULONG ReadOperationCount;
+ ULONG WriteOperationCount;
+ ULONG OtherOperationCount;
+ ULONG AvailablePages;
+ ULONG TotalCommittedPages;
+ ULONG TotalCommitLimit;
+ ULONG PeakCommitment;
+ ULONG PageFaults;
+ ULONG WriteCopyFaults;
+ ULONG TransitionFaults;
+ ULONG Reserved1;
+ ULONG DemandZeroFaults;
+ ULONG PagesRead;
+ ULONG PageReadIos;
+ ULONG Reserved2[2];
+ ULONG PagefilePagesWritten;
+ ULONG PagefilePageWriteIos;
+ ULONG MappedFilePagesWritten;
+ ULONG MappedFilePageWriteIos;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+ ULONG PagedPoolAllocs;
+ ULONG PagedPoolFrees;
+ ULONG NonPagedPoolAllocs;
+ ULONG NonPagedPoolFrees;
+ ULONG TotalFreeSystemPtes;
+ ULONG SystemCodePage;
+ ULONG TotalSystemDriverPages;
+ ULONG TotalSystemCodePages;
+ ULONG SmallNonPagedLookasideListAllocateHits;
+ ULONG SmallPagedLookasideListAllocateHits;
+ ULONG Reserved3;
+ ULONG MmSystemCachePage;
+ ULONG PagedPoolPage;
+ ULONG SystemDriverPage;
+ ULONG FastReadNoWait;
+ ULONG FastReadWait;
+ ULONG FastReadResourceMiss;
+ ULONG FastReadNotPossible;
+ ULONG FastMdlReadNoWait;
+ ULONG FastMdlReadWait;
+ ULONG FastMdlReadResourceMiss;
+ ULONG FastMdlReadNotPossible;
+ ULONG MapDataNoWait;
+ ULONG MapDataWait;
+ ULONG MapDataNoWaitMiss;
+ ULONG MapDataWaitMiss;
+ ULONG PinMappedDataCount;
+ ULONG PinReadNoWait;
+ ULONG PinReadWait;
+ ULONG PinReadNoWaitMiss;
+ ULONG PinReadWaitMiss;
+ ULONG CopyReadNoWait;
+ ULONG CopyReadWait;
+ ULONG CopyReadNoWaitMiss;
+ ULONG CopyReadWaitMiss;
+ ULONG MdlReadNoWait;
+ ULONG MdlReadWait;
+ ULONG MdlReadNoWaitMiss;
+ ULONG MdlReadWaitMiss;
+ ULONG ReadAheadIos;
+ ULONG LazyWriteIos;
+ ULONG LazyWritePages;
+ ULONG DataFlushes;
+ ULONG DataPages;
+ ULONG ContextSwitches;
+ ULONG FirstLevelTbFills;
+ ULONG SecondLevelTbFills;
+ ULONG SystemCalls;
+} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
+
+/* System Information Class 0x03 */
+
+typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
+#ifdef __WINESRC__
+ LARGE_INTEGER liKeBootTime;
+ LARGE_INTEGER liKeSystemTime;
+ LARGE_INTEGER liExpTimeZoneBias;
+ ULONG uCurrentTimeZoneId;
+ DWORD dwUnknown1[5];
+#else
+ BYTE Reserved1[48];
+#endif
+} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; /* was SYSTEM_TIME_INFORMATION */
+
+/* System Information Class 0x08 */
+
+typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
+ LARGE_INTEGER IdleTime;
+ LARGE_INTEGER KernelTime;
+ LARGE_INTEGER UserTime;
+ LARGE_INTEGER Reserved1[2];
+ ULONG Reserved2;
+} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
+
+/* System Information Class 0x0b */
+
+typedef struct _SYSTEM_DRIVER_INFORMATION {
+ PVOID pvAddress;
+ DWORD dwUnknown1;
+ DWORD dwUnknown2;
+ DWORD dwEntryIndex;
+ DWORD dwUnknown3;
+ char szName[MAX_PATH + 1];
+} SYSTEM_DRIVER_INFORMATION, *PSYSTEM_DRIVER_INFORMATION;
+
+/* System Information Class 0x10 */
+
+typedef struct _SYSTEM_HANDLE_ENTRY {
+ ULONG OwnerPid;
+ BYTE ObjectType;
+ BYTE HandleFlags;
+ USHORT HandleValue;
+ PVOID ObjectPointer;
+ ULONG AccessMask;
+} SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
+
+typedef struct _SYSTEM_HANDLE_INFORMATION {
+ ULONG Count;
+ SYSTEM_HANDLE_ENTRY Handle[1];
+} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
+
+/* System Information Class 0x15 */
+
+typedef struct _SYSTEM_CACHE_INFORMATION {
+ ULONG CurrentSize;
+ ULONG PeakSize;
+ ULONG PageFaultCount;
+ ULONG MinimumWorkingSet;
+ ULONG MaximumWorkingSet;
+ ULONG unused[4];
+#ifdef _WIN64
+ ULONG unknown64[7];
+#endif
+} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
+
+/* System Information Class 0x17 */
+
+typedef struct _SYSTEM_INTERRUPT_INFORMATION {
+ BYTE Reserved1[24];
+} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
+
+typedef struct _SYSTEM_CONFIGURATION_INFO {
+ union {
+ ULONG OemId;
+ struct {
+ WORD ProcessorArchitecture;
+ WORD Reserved;
+ } tag1;
+ } tag2;
+ ULONG PageSize;
+ PVOID MinimumApplicationAddress;
+ PVOID MaximumApplicationAddress;
+ ULONG ActiveProcessorMask;
+ ULONG NumberOfProcessors;
+ ULONG ProcessorType;
+ ULONG AllocationGranularity;
+ WORD ProcessorLevel;
+ WORD ProcessorRevision;
+} SYSTEM_CONFIGURATION_INFO, *PSYSTEM_CONFIGURATION_INFO;
+
+typedef struct _SYSTEM_EXCEPTION_INFORMATION {
+ BYTE Reserved1[16];
+} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
+
+typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
+ BYTE Reserved1[32];
+} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
+
+typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
+ BOOLEAN DebuggerEnabled;
+ BOOLEAN DebuggerNotPresent;
+} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
+
+/* System Information Class 0x05 */
+
+typedef struct _VM_COUNTERS_ {
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PrivatePageCount;
+} VM_COUNTERS, *PVM_COUNTERS;
+
+typedef struct _SYSTEM_PROCESS_INFORMATION {
+#ifdef __WINESRC__ /* win32/win64 */
+ ULONG NextEntryOffset; /* 00/00 */
+ DWORD dwThreadCount; /* 04/04 */
+ DWORD dwUnknown1[6]; /* 08/08 */
+ LARGE_INTEGER CreationTime; /* 20/20 */
+ LARGE_INTEGER UserTime; /* 28/28 */
+ LARGE_INTEGER KernelTime; /* 30/30 */
+ UNICODE_STRING ProcessName; /* 38/38 */
+ DWORD dwBasePriority; /* 40/48 */
+ HANDLE UniqueProcessId; /* 44/50 */
+ HANDLE ParentProcessId; /* 48/58 */
+ ULONG HandleCount; /* 4c/60 */
+ ULONG SessionId; /* 50/64 */
+ DWORD dwUnknown4; /* 54/68 */
+ VM_COUNTERS vmCounters; /* 58/70 */
+ IO_COUNTERS ioCounters; /* 88/d0 */
+ SYSTEM_THREAD_INFORMATION ti[1]; /* b8/100 */
+#else
+ ULONG NextEntryOffset; /* 00/00 */
+ BYTE Reserved1[52]; /* 04/04 */
+ PVOID Reserved2[3]; /* 38/38 */
+ HANDLE UniqueProcessId; /* 44/50 */
+ PVOID Reserved3; /* 48/58 */
+ ULONG HandleCount; /* 4c/60 */
+ BYTE Reserved4[4]; /* 50/64 */
+ PVOID Reserved5[11]; /* 54/68 */
+ SIZE_T PeakPagefileUsage; /* 80/c0 */
+ SIZE_T PrivatePageCount; /* 84/c8 */
+ LARGE_INTEGER Reserved6[6]; /* 88/d0 */
+#endif
+} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
+
+typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
+ ULONG RegistryQuotaAllowed;
+ ULONG RegistryQuotaUsed;
+ PVOID Reserved1;
+} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
+
+typedef struct _SYSTEM_TIME_ADJUSTMENT {
+ ULONG TimeAdjustment;
+ BOOLEAN TimeAdjustmentDisabled;
+} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;
+
+typedef struct _TIME_FIELDS
+{ CSHORT Year;
+ CSHORT Month;
+ CSHORT Day;
+ CSHORT Hour;
+ CSHORT Minute;
+ CSHORT Second;
+ CSHORT Milliseconds;
+ CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+typedef struct _WINSTATIONINFORMATIONW {
+ BYTE Reserved2[70];
+ ULONG LogonId;
+ BYTE Reserved3[1140];
+} WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW;
+
+typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG);
+
+typedef struct _LDR_RESOURCE_INFO
+{
+ ULONG_PTR Type;
+ ULONG_PTR Name;
+ ULONG Language;
+} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
+
+
+/* debug buffer definitions */
+
+typedef struct _DEBUG_BUFFER {
+ HANDLE SectionHandle;
+ PVOID SectionBase;
+ PVOID RemoteSectionBase;
+ ULONG SectionBaseDelta;
+ HANDLE EventPairHandle;
+ ULONG Unknown[2];
+ HANDLE RemoteThreadHandle;
+ ULONG InfoClassMask;
+ ULONG SizeOfInfo;
+ ULONG AllocatedSize;
+ ULONG SectionSize;
+ PVOID ModuleInformation;
+ PVOID BackTraceInformation;
+ PVOID HeapInformation;
+ PVOID LockInformation;
+ PVOID Reserved[8];
+} DEBUG_BUFFER, *PDEBUG_BUFFER;
+
+#define PDI_MODULES 0x01
+#define PDI_BACKTRACE 0x02
+#define PDI_HEAPS 0x04
+#define PDI_HEAP_TAGS 0x08
+#define PDI_HEAP_BLOCKS 0x10
+#define PDI_LOCKS 0x20
+
+typedef struct _DEBUG_MODULE_INFORMATION {
+ ULONG Reserved[2];
+ ULONG Base;
+ ULONG Size;
+ ULONG Flags;
+ USHORT Index;
+ USHORT Unknown;
+ USHORT LoadCount;
+ USHORT ModuleNameOffset;
+ CHAR ImageName[256];
+} DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
+
+typedef struct _DEBUG_HEAP_INFORMATION {
+ ULONG Base;
+ ULONG Flags;
+ USHORT Granularity;
+ USHORT Unknown;
+ ULONG Allocated;
+ ULONG Committed;
+ ULONG TagCount;
+ ULONG BlockCount;
+ ULONG Reserved[7];
+ PVOID Tags;
+ PVOID Blocks;
+} DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
+
+typedef struct _DEBUG_LOCK_INFORMATION {
+ PVOID Address;
+ USHORT Type;
+ USHORT CreatorBackTraceIndex;
+ ULONG OwnerThreadId;
+ ULONG ActiveCount;
+ ULONG ContentionCount;
+ ULONG EntryCount;
+ ULONG RecursionCount;
+ ULONG NumberOfSharedWaiters;
+ ULONG NumberOfExclusiveWaiters;
+} DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
+
+typedef struct _PORT_MESSAGE_HEADER {
+ USHORT DataSize;
+ USHORT MessageSize;
+ USHORT MessageType;
+ USHORT VirtualRangesOffset;
+ CLIENT_ID ClientId;
+ ULONG MessageId;
+ ULONG SectionSize;
+} PORT_MESSAGE_HEADER, *PPORT_MESSAGE_HEADER, PORT_MESSAGE, *PPORT_MESSAGE;
+
+typedef unsigned short RTL_ATOM, *PRTL_ATOM;
+
+/* Wine doesn't implement atom table as NT does:
+ * - in NT, atom tables are user space tables, which ntdll directly accesses
+ * - on Wine, (even local) atom tables are wineserver objects, hence a HANDLE
+ */
+typedef struct atom_table *RTL_ATOM_TABLE, **PRTL_ATOM_TABLE;
+
+typedef enum _ATOM_INFORMATION_CLASS {
+ AtomBasicInformation = 0,
+ AtomTableInformation = 1,
+} ATOM_INFORMATION_CLASS;
+
+typedef struct _ATOM_BASIC_INFORMATION {
+ USHORT ReferenceCount;
+ USHORT Pinned;
+ USHORT NameLength;
+ WCHAR Name[1];
+} ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
+
+/* FIXME: names probably not correct */
+typedef struct _RTL_HANDLE
+{
+ struct _RTL_HANDLE * Next;
+} RTL_HANDLE;
+
+/* FIXME: names probably not correct */
+typedef struct _RTL_HANDLE_TABLE
+{
+ ULONG MaxHandleCount; /* 0x00 */
+ ULONG HandleSize; /* 0x04 */
+ ULONG Unused[2]; /* 0x08-0x0c */
+ PVOID NextFree; /* 0x10 */
+ PVOID FirstHandle; /* 0x14 */
+ PVOID ReservedMemory; /* 0x18 */
+ PVOID MaxHandle; /* 0x1c */
+} RTL_HANDLE_TABLE;
+
+/***********************************************************************
+ * Defines
+ */
+
+/* flags for NtCreateFile and NtOpenFile */
+#define FILE_DIRECTORY_FILE 0x00000001
+#define FILE_WRITE_THROUGH 0x00000002
+#define FILE_SEQUENTIAL_ONLY 0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+#define FILE_NON_DIRECTORY_FILE 0x00000040
+#define FILE_CREATE_TREE_CONNECTION 0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
+#define FILE_NO_EA_KNOWLEDGE 0x00000200
+#define FILE_OPEN_FOR_RECOVERY 0x00000400
+#define FILE_RANDOM_ACCESS 0x00000800
+#define FILE_DELETE_ON_CLOSE 0x00001000
+#define FILE_OPEN_BY_FILE_ID 0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
+#define FILE_NO_COMPRESSION 0x00008000
+#define FILE_RESERVE_OPFILTER 0x00100000
+#define FILE_TRANSACTED_MODE 0x00200000
+#define FILE_OPEN_OFFLINE_FILE 0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
+
+#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
+
+/* status for NtCreateFile or NtOpenFile */
+#define FILE_SUPERSEDED 0
+#define FILE_OPENED 1
+#define FILE_CREATED 2
+#define FILE_OVERWRITTEN 3
+#define FILE_EXISTS 4
+#define FILE_DOES_NOT_EXIST 5
+
+/* disposition for NtCreateFile */
+#define FILE_SUPERSEDE 0
+#define FILE_OPEN 1
+#define FILE_CREATE 2
+#define FILE_OPEN_IF 3
+#define FILE_OVERWRITE 4
+#define FILE_OVERWRITE_IF 5
+#define FILE_MAXIMUM_DISPOSITION 5
+
+/* Characteristics of a File System */
+#define FILE_REMOVABLE_MEDIA 0x00000001
+#define FILE_READ_ONLY_DEVICE 0x00000002
+#define FILE_FLOPPY_DISKETTE 0x00000004
+#define FILE_WRITE_ONE_MEDIA 0x00000008
+#define FILE_REMOTE_DEVICE 0x00000010
+#define FILE_DEVICE_IS_MOUNTED 0x00000020
+#define FILE_VIRTUAL_VOLUME 0x00000040
+#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
+#define FILE_DEVICE_SECURE_OPEN 0x00000100
+
+/* options for NtCreateNamedPipeFile */
+#define FILE_PIPE_INBOUND 0x00000000
+#define FILE_PIPE_OUTBOUND 0x00000001
+#define FILE_PIPE_FULL_DUPLEX 0x00000002
+
+/* options for pipe's type */
+#define FILE_PIPE_TYPE_MESSAGE 0x00000001
+#define FILE_PIPE_TYPE_BYTE 0x00000000
+/* and client / server end */
+#define FILE_PIPE_SERVER_END 0x00000001
+#define FILE_PIPE_CLIENT_END 0x00000000
+
+#define INTERNAL_TS_ACTIVE_CONSOLE_ID ( *((volatile ULONG*)(0x7ffe02d8)) )
+
+#define LOGONID_CURRENT ((ULONG)-1)
+
+#define OBJ_INHERIT 0x00000002
+#define OBJ_PERMANENT 0x00000010
+#define OBJ_EXCLUSIVE 0x00000020
+#define OBJ_CASE_INSENSITIVE 0x00000040
+#define OBJ_OPENIF 0x00000080
+#define OBJ_OPENLINK 0x00000100
+#define OBJ_KERNEL_HANDLE 0x00000200
+#define OBJ_VALID_ATTRIBUTES 0x000003F2
+
+#define SERVERNAME_CURRENT ((HANDLE)NULL)
+
+typedef void (CALLBACK *PNTAPCFUNC)(ULONG_PTR,ULONG_PTR,ULONG_PTR); /* FIXME: not the right name */
+typedef void (CALLBACK *PRTL_THREAD_START_ROUTINE)(LPVOID); /* FIXME: not the right name */
+typedef DWORD (CALLBACK *PRTL_WORK_ITEM_ROUTINE)(LPVOID); /* FIXME: not the right name */
+typedef void (NTAPI *RTL_WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN); /* FIXME: not the right name */
+
+
+/* DbgPrintEx default levels */
+#define DPFLTR_ERROR_LEVEL 0
+#define DPFLTR_WARNING_LEVEL 1
+#define DPFLTR_TRACE_LEVEL 2
+#define DPFLTR_INFO_LEVEL 3
+#define DPFLTR_MASK 0x8000000
+
+/* Well-known LUID values */
+#define SE_MIN_WELL_KNOWN_PRIVILEGE 2
+#define SE_CREATE_TOKEN_PRIVILEGE 2
+#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
+#define SE_LOCK_MEMORY_PRIVILEGE 4
+#define SE_INCREASE_QUOTA_PRIVILEGE 5
+#define SE_UNSOLICITED_INPUT_PRIVILEGE 6 /* obsolete */
+#define SE_MACHINE_ACCOUNT_PRIVILEGE 6
+#define SE_TCB_PRIVILEGE 7
+#define SE_SECURITY_PRIVILEGE 8
+#define SE_TAKE_OWNERSHIP_PRIVILEGE 9
+#define SE_LOAD_DRIVER_PRIVILEGE 10
+#define SE_SYSTEM_PROFILE_PRIVILEGE 11
+#define SE_SYSTEMTIME_PRIVILEGE 12
+#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
+#define SE_INC_BASE_PRIORITY_PRIVILEGE 14
+#define SE_CREATE_PAGEFILE_PRIVILEGE 15
+#define SE_CREATE_PERMANENT_PRIVILEGE 16
+#define SE_BACKUP_PRIVILEGE 17
+#define SE_RESTORE_PRIVILEGE 18
+#define SE_SHUTDOWN_PRIVILEGE 19
+#define SE_DEBUG_PRIVILEGE 20
+#define SE_AUDIT_PRIVILEGE 21
+#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
+#define SE_CHANGE_NOTIFY_PRIVILEGE 23
+#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
+#define SE_UNDOCK_PRIVILEGE 25
+#define SE_SYNC_AGENT_PRIVILEGE 26
+#define SE_ENABLE_DELEGATION_PRIVILEGE 27
+#define SE_MANAGE_VOLUME_PRIVILEGE 28
+#define SE_IMPERSONATE_PRIVILEGE 29
+#define SE_CREATE_GLOBAL_PRIVILEGE 30
+#define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
+
+/* NtGlobalFlag bits */
+#define FLG_STOP_ON_EXCEPTION 0x00000001
+#define FLG_SHOW_LDR_SNAPS 0x00000002
+#define FLG_DEBUG_INITIAL_COMMAND 0x00000004
+#define FLG_STOP_ON_HUNG_GUI 0x00000008
+#define FLG_HEAP_ENABLE_TAIL_CHECK 0x00000010
+#define FLG_HEAP_ENABLE_FREE_CHECK 0x00000020
+#define FLG_HEAP_VALIDATE_PARAMETERS 0x00000040
+#define FLG_HEAP_VALIDATE_ALL 0x00000080
+#define FLG_APPLICATION_VERIFIER 0x00000100
+#define FLG_POOL_ENABLE_TAGGING 0x00000400
+#define FLG_HEAP_ENABLE_TAGGING 0x00000800
+#define FLG_USER_STACK_TRACE_DB 0x00001000
+#define FLG_KERNEL_STACK_TRACE_DB 0x00002000
+#define FLG_MAINTAIN_OBJECT_TYPELIST 0x00004000
+#define FLG_HEAP_ENABLE_TAG_BY_DLL 0x00008000
+#define FLG_DISABLE_STACK_EXTENSION 0x00010000
+#define FLG_ENABLE_CSRDEBUG 0x00020000
+#define FLG_ENABLE_KDEBUG_SYMBOL_LOAD 0x00040000
+#define FLG_DISABLE_PAGE_KERNEL_STACKS 0x00080000
+#define FLG_ENABLE_SYSTEM_CRIT_BREAKS 0x00100000
+#define FLG_HEAP_DISABLE_COALESCING 0x00200000
+#define FLG_ENABLE_CLOSE_EXCEPTIONS 0x00400000
+#define FLG_ENABLE_EXCEPTION_LOGGING 0x00800000
+#define FLG_ENABLE_HANDLE_TYPE_TAGGING 0x01000000
+#define FLG_HEAP_PAGE_ALLOCS 0x02000000
+#define FLG_DEBUG_INITIAL_COMMAND_EX 0x04000000
+#define FLG_DISABLE_DBGPRINT 0x08000000
+#define FLG_CRITSEC_EVENT_CREATION 0x10000000
+#define FLG_LDR_TOP_DOWN 0x20000000
+#define FLG_ENABLE_HANDLE_EXCEPTIONS 0x40000000
+#define FLG_DISABLE_PROTDLLS 0x80000000
+
+/* Rtl*Registry* functions structs and defines */
+#define RTL_REGISTRY_ABSOLUTE 0
+#define RTL_REGISTRY_SERVICES 1
+#define RTL_REGISTRY_CONTROL 2
+#define RTL_REGISTRY_WINDOWS_NT 3
+#define RTL_REGISTRY_DEVICEMAP 4
+#define RTL_REGISTRY_USER 5
+
+#define RTL_REGISTRY_HANDLE 0x40000000
+#define RTL_REGISTRY_OPTIONAL 0x80000000
+
+#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
+#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
+#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
+#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
+#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
+#define RTL_QUERY_REGISTRY_DIRECT 0x00000020
+#define RTL_QUERY_REGISTRY_DELETE 0x00000040
+
+typedef NTSTATUS (WINAPI *PRTL_QUERY_REGISTRY_ROUTINE)( PCWSTR ValueName,
+ ULONG ValueType,
+ PVOID ValueData,
+ ULONG ValueLength,
+ PVOID Context,
+ PVOID EntryContext);
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE
+{
+ PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
+ ULONG Flags;
+ PWSTR Name;
+ PVOID EntryContext;
+ ULONG DefaultType;
+ PVOID DefaultData;
+ ULONG DefaultLength;
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
+
+typedef struct _KEY_MULTIPLE_VALUE_INFORMATION
+{
+ PUNICODE_STRING ValueName;
+ ULONG DataLength;
+ ULONG DataOffset;
+ ULONG Type;
+} KEY_MULTIPLE_VALUE_INFORMATION, *PKEY_MULTIPLE_VALUE_INFORMATION;
+
+typedef VOID (CALLBACK *PRTL_OVERLAPPED_COMPLETION_ROUTINE)(DWORD,DWORD,LPVOID);
+
+typedef VOID (CALLBACK *PTIMER_APC_ROUTINE) ( PVOID, ULONG, LONG );
+
+typedef enum _EVENT_TYPE {
+ NotificationEvent,
+ SynchronizationEvent
+} EVENT_TYPE, *PEVENT_TYPE;
+
+typedef enum _EVENT_INFORMATION_CLASS {
+ EventBasicInformation
+} EVENT_INFORMATION_CLASS, *PEVENT_INFORMATION_CLASS;
+
+typedef struct _EVENT_BASIC_INFORMATION {
+ EVENT_TYPE EventType;
+ LONG EventState;
+} EVENT_BASIC_INFORMATION, *PEVENT_BASIC_INFORMATION;
+
+typedef enum _SEMAPHORE_INFORMATION_CLASS {
+ SemaphoreBasicInformation
+} SEMAPHORE_INFORMATION_CLASS, *PSEMAPHORE_INFORMATION_CLASS;
+
+typedef struct _SEMAPHORE_BASIC_INFORMATION {
+ ULONG CurrentCount;
+ ULONG MaximumCount;
+} SEMAPHORE_BASIC_INFORMATION, *PSEMAPHORE_BASIC_INFORMATION;
+
+typedef enum _SECTION_INFORMATION_CLASS
+{
+ SectionBasicInformation,
+ SectionImageInformation,
+} SECTION_INFORMATION_CLASS;
+
+typedef struct _SECTION_BASIC_INFORMATION {
+ ULONG BaseAddress;
+ ULONG Attributes;
+ LARGE_INTEGER Size;
+} SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
+
+typedef struct _SECTION_IMAGE_INFORMATION {
+ PVOID EntryPoint;
+ ULONG StackZeroBits;
+ ULONG StackReserved;
+ ULONG StackCommit;
+ ULONG ImageSubsystem;
+ WORD SubsystemVersionLow;
+ WORD SubsystemVersionHigh;
+ ULONG Unknown1;
+ ULONG ImageCharacteristics;
+ ULONG ImageMachineType;
+ ULONG Unknown2[3];
+} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
+
+typedef struct _LPC_SECTION_WRITE {
+ ULONG Length;
+ HANDLE SectionHandle;
+ ULONG SectionOffset;
+ ULONG ViewSize;
+ PVOID ViewBase;
+ PVOID TargetViewBase;
+} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
+
+typedef struct _LPC_SECTION_READ {
+ ULONG Length;
+ ULONG ViewSize;
+ PVOID ViewBase;
+} LPC_SECTION_READ, *PLPC_SECTION_READ;
+
+typedef struct _LPC_MESSAGE {
+ USHORT DataSize;
+ USHORT MessageSize;
+ USHORT MessageType;
+ USHORT VirtualRangesOffset;
+ CLIENT_ID ClientId;
+ ULONG_PTR MessageId;
+ ULONG_PTR SectionSize;
+ UCHAR Data[ANYSIZE_ARRAY];
+} LPC_MESSAGE, *PLPC_MESSAGE;
+
+typedef enum _SHUTDOWN_ACTION {
+ ShutdownNoReboot,
+ ShutdownReboot,
+ ShutdownPowerOff
+} SHUTDOWN_ACTION, *PSHUTDOWN_ACTION;
+
+typedef enum _KPROFILE_SOURCE {
+ ProfileTime,
+ ProfileAlignmentFixup,
+ ProfileTotalIssues,
+ ProfilePipelineDry,
+ ProfileLoadInstructions,
+ ProfilePipelineFrozen,
+ ProfileBranchInstructions,
+ ProfileTotalNonissues,
+ ProfileDcacheMisses,
+ ProfileIcacheMisses,
+ ProfileCacheMisses,
+ ProfileBranchMispredictions,
+ ProfileStoreInstructions,
+ ProfileFpInstructions,
+ ProfileIntegerInstructions,
+ Profile2Issue,
+ Profile3Issue,
+ Profile4Issue,
+ ProfileSpecialInstructions,
+ ProfileTotalCycles,
+ ProfileIcacheIssues,
+ ProfileDcacheAccesses,
+ ProfileMemoryBarrierCycles,
+ ProfileLoadLinkedIssues,
+ ProfileMaximum
+} KPROFILE_SOURCE, *PKPROFILE_SOURCE;
+
+typedef struct _DIRECTORY_BASIC_INFORMATION {
+ UNICODE_STRING ObjectName;
+ UNICODE_STRING ObjectTypeName;
+} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
+
+typedef struct _INITIAL_TEB {
+ PVOID StackBase;
+ PVOID StackLimit;
+ PVOID StackCommit;
+ PVOID StackCommitMax;
+ PVOID StackReserved;
+} INITIAL_TEB, *PINITIAL_TEB;
+
+typedef enum _PORT_INFORMATION_CLASS {
+ PortNoInformation
+} PORT_INFORMATION_CLASS, *PPORT_INFORMATION_CLASS;
+
+typedef enum _IO_COMPLETION_INFORMATION_CLASS {
+ IoCompletionBasicInformation
+} IO_COMPLETION_INFORMATION_CLASS, *PIO_COMPLETION_INFORMATION_CLASS;
+
+typedef struct _FILE_COMPLETION_INFORMATION {
+ HANDLE CompletionPort;
+ ULONG_PTR CompletionKey;
+} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
+
+#define IO_COMPLETION_QUERY_STATE 0x0001
+#define IO_COMPLETION_MODIFY_STATE 0x0002
+#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+
+typedef enum _HARDERROR_RESPONSE_OPTION {
+ OptionAbortRetryIgnore,
+ OptionOk,
+ OptionOkCancel,
+ OptionRetryCancel,
+ OptionYesNo,
+ OptionYesNoCancel,
+ OptionShutdownSystem
+} HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
+
+typedef enum _HARDERROR_RESPONSE {
+ ResponseReturnToCaller,
+ ResponseNotHandled,
+ ResponseAbort,
+ ResponseCancel,
+ ResponseIgnore,
+ ResponseNo,
+ ResponseOk,
+ ResponseRetry,
+ ResponseYes
+} HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
+
+typedef enum _SYSDBG_COMMAND {
+ SysDbgQueryModuleInformation,
+ SysDbgQueryTraceInformation,
+ SysDbgSetTracepoint,
+ SysDbgSetSpecialCall,
+ SysDbgClearSpecialCalls,
+ SysDbgQuerySpecialCalls,
+ SysDbgBreakPoint,
+ SysDbgQueryVersion,
+ SysDbgReadVirtual,
+ SysDbgWriteVirtual,
+ SysDbgReadPhysical,
+ SysDbgWritePhysical,
+ SysDbgReadControlSpace,
+ SysDbgWriteControlSpace,
+ SysDbgReadIoSpace,
+ SysDbgWriteIoSpace,
+ SysDbgReadMsr,
+ SysDbgWriteMsr,
+ SysDbgReadBusData,
+ SysDbgWriteBusData
+} SYSDBG_COMMAND, *PSYSDBG_COMMAND;
+
+
+/*************************************************************************
+ * Loader structures
+ *
+ * Those are not part of standard Winternl.h
+ */
+typedef struct _LDR_MODULE
+{
+ LIST_ENTRY InLoadOrderModuleList;
+ LIST_ENTRY InMemoryOrderModuleList;
+ LIST_ENTRY InInitializationOrderModuleList;
+ void* BaseAddress;
+ void* EntryPoint;
+ ULONG SizeOfImage;
+ UNICODE_STRING FullDllName;
+ UNICODE_STRING BaseDllName;
+ ULONG Flags;
+ SHORT LoadCount;
+ SHORT TlsIndex;
+ HANDLE SectionHandle;
+ ULONG CheckSum;
+ ULONG TimeDateStamp;
+ HANDLE ActivationContext;
+} LDR_MODULE, *PLDR_MODULE;
+
+/* those defines are (some of the) regular LDR_MODULE.Flags values */
+#define LDR_IMAGE_IS_DLL 0x00000004
+#define LDR_LOAD_IN_PROGRESS 0x00001000
+#define LDR_UNLOAD_IN_PROGRESS 0x00002000
+#define LDR_NO_DLL_CALLS 0x00040000
+#define LDR_PROCESS_ATTACHED 0x00080000
+#define LDR_MODULE_REBASED 0x00200000
+
+/* these ones is Wine specific */
+#define LDR_DONT_RESOLVE_REFS 0x40000000
+#define LDR_WINE_INTERNAL 0x80000000
+
+/* FIXME: to be checked */
+#define MAXIMUM_FILENAME_LENGTH 256
+
+typedef struct _SYSTEM_MODULE
+{
+ PVOID Reserved1; /* 00/00 */
+ PVOID Reserved2; /* 04/08 */
+ PVOID ImageBaseAddress; /* 08/10 */
+ ULONG ImageSize; /* 0c/18 */
+ ULONG Flags; /* 10/1c */
+ WORD Id; /* 14/20 */
+ WORD Rank; /* 16/22 */
+ WORD Unknown; /* 18/24 */
+ WORD NameOffset; /* 1a/26 */
+ BYTE Name[MAXIMUM_FILENAME_LENGTH]; /* 1c/28 */
+} SYSTEM_MODULE, *PSYSTEM_MODULE;
+
+typedef struct _SYSTEM_MODULE_INFORMATION
+{
+ ULONG ModulesCount;
+ SYSTEM_MODULE Modules[1]; /* FIXME: should be Modules[0] */
+} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
+
+/***********************************************************************
+ * Function declarations
+ */
+
+#if defined(__i386__) && defined(__GNUC__)
+static inline void WINAPI DbgBreakPoint(void) { __asm__ __volatile__("int3"); }
+static inline void WINAPI DbgUserBreakPoint(void) { __asm__ __volatile__("int3"); }
+#else /* __i386__ && __GNUC__ */
+NTSYSAPI void WINAPI DbgBreakPoint(void);
+NTSYSAPI void WINAPI DbgUserBreakPoint(void);
+#endif /* __i386__ && __GNUC__ */
+NTSYSAPI NTSTATUS WINAPIV DbgPrint(LPCSTR fmt, ...);
+NTSYSAPI NTSTATUS WINAPIV DbgPrintEx(ULONG iComponentId, ULONG Level, LPCSTR fmt, ...);
+NTSYSAPI NTSTATUS WINAPI LdrAccessResource(HMODULE,const IMAGE_RESOURCE_DATA_ENTRY*,void**,PULONG);
+NTSYSAPI NTSTATUS WINAPI LdrAddRefDll(ULONG,HMODULE);
+NTSYSAPI NTSTATUS WINAPI LdrFindResourceDirectory_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DIRECTORY**);
+NTSYSAPI NTSTATUS WINAPI LdrFindResource_U(HMODULE,const LDR_RESOURCE_INFO*,ULONG,const IMAGE_RESOURCE_DATA_ENTRY**);
+NTSYSAPI NTSTATUS WINAPI LdrDisableThreadCalloutsForDll(HMODULE);
+NTSYSAPI NTSTATUS WINAPI LdrFindEntryForAddress(const void*, PLDR_MODULE*);
+NTSYSAPI NTSTATUS WINAPI LdrGetDllHandle(LPCWSTR, ULONG, const UNICODE_STRING*, HMODULE*);
+NTSYSAPI NTSTATUS WINAPI LdrGetProcedureAddress(HMODULE, const ANSI_STRING*, ULONG, void**);
+NTSYSAPI void WINAPI LdrInitializeThunk(void*,ULONG_PTR,ULONG_PTR,ULONG_PTR);
+NTSYSAPI NTSTATUS WINAPI LdrLoadDll(LPCWSTR, DWORD, const UNICODE_STRING*, HMODULE*);
+NTSYSAPI NTSTATUS WINAPI LdrLockLoaderLock(ULONG,ULONG*,ULONG*);
+IMAGE_BASE_RELOCATION * WINAPI LdrProcessRelocationBlock(void*,UINT,USHORT*,INT_PTR);
+NTSYSAPI NTSTATUS WINAPI LdrQueryImageFileExecutionOptions(const UNICODE_STRING*,LPCWSTR,ULONG,void*,ULONG,ULONG*);
+NTSYSAPI NTSTATUS WINAPI LdrQueryProcessModuleInformation(SYSTEM_MODULE_INFORMATION*, ULONG, ULONG*);
+NTSYSAPI void WINAPI LdrShutdownProcess(void);
+NTSYSAPI void WINAPI LdrShutdownThread(void);
+NTSYSAPI NTSTATUS WINAPI LdrUnloadDll(HMODULE);
+NTSYSAPI NTSTATUS WINAPI LdrUnlockLoaderLock(ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtAcceptConnectPort(PHANDLE,ULONG,PLPC_MESSAGE,BOOLEAN,PLPC_SECTION_WRITE,PLPC_SECTION_READ);
+NTSYSAPI NTSTATUS WINAPI NtAccessCheck(PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,PGENERIC_MAPPING,PPRIVILEGE_SET,PULONG,PULONG,NTSTATUS*);
+NTSYSAPI NTSTATUS WINAPI NtAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtAddAtom(const WCHAR*,ULONG,RTL_ATOM*);
+NTSYSAPI NTSTATUS WINAPI NtAdjustGroupsToken(HANDLE,BOOLEAN,PTOKEN_GROUPS,ULONG,PTOKEN_GROUPS,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
+NTSYSAPI NTSTATUS WINAPI NtAlertResumeThread(HANDLE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtAlertThread(HANDLE ThreadHandle);
+NTSYSAPI NTSTATUS WINAPI NtAllocateLocallyUniqueId(PLUID lpLuid);
+NTSYSAPI NTSTATUS WINAPI NtAllocateUuids(PULARGE_INTEGER,PULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtAreMappedFilesTheSame(PVOID,PVOID);
+NTSYSAPI NTSTATUS WINAPI NtAssignProcessToJobObject(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtCallbackReturn(PVOID,ULONG,NTSTATUS);
+NTSYSAPI NTSTATUS WINAPI NtCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
+NTSYSAPI NTSTATUS WINAPI NtCancelIoFileEx(HANDLE,PIO_STATUS_BLOCK,PIO_STATUS_BLOCK);
+NTSYSAPI NTSTATUS WINAPI NtCancelTimer(HANDLE, BOOLEAN*);
+NTSYSAPI NTSTATUS WINAPI NtClearEvent(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtClose(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtCompleteConnectPort(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtContinue(PCONTEXT,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,EVENT_TYPE,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtCreateEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtCreateIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtCreateJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtCreateKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtCreatePagingFile(PUNICODE_STRING,PLARGE_INTEGER,PLARGE_INTEGER,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtCreatePort(PHANDLE,POBJECT_ATTRIBUTES,ULONG,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtCreateProcess(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,BOOLEAN,HANDLE,HANDLE,HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtCreateProfile(PHANDLE,HANDLE,PVOID,ULONG,ULONG,PVOID,ULONG,KPROFILE_SOURCE,KAFFINITY);
+NTSYSAPI NTSTATUS WINAPI NtCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtCreateSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,LONG,LONG);
+NTSYSAPI NTSTATUS WINAPI NtCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI NtCreateThread(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PCONTEXT,PINITIAL_TEB,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
+NTSYSAPI NTSTATUS WINAPI NtCreateToken(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,TOKEN_TYPE,PLUID,PLARGE_INTEGER,PTOKEN_USER,PTOKEN_GROUPS,PTOKEN_PRIVILEGES,PTOKEN_OWNER,PTOKEN_PRIMARY_GROUP,PTOKEN_DEFAULT_DACL,PTOKEN_SOURCE);
+NTSYSAPI NTSTATUS WINAPI NtDelayExecution(BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtDeleteAtom(RTL_ATOM);
+NTSYSAPI NTSTATUS WINAPI NtDeleteFile(POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtDeleteKey(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtDeleteValueKey(HANDLE,const UNICODE_STRING *);
+NTSYSAPI NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtDisplayString(PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI NtDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
+NTSYSAPI NTSTATUS WINAPI NtEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSYSAPI NTSTATUS WINAPI NtEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtExtendSection(HANDLE,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtFindAtom(const WCHAR*,ULONG,RTL_ATOM*);
+NTSYSAPI NTSTATUS WINAPI NtFlushBuffersFile(HANDLE,IO_STATUS_BLOCK*);
+NTSYSAPI NTSTATUS WINAPI NtFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
+NTSYSAPI NTSTATUS WINAPI NtFlushKey(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtFlushWriteBuffer(VOID);
+NTSYSAPI NTSTATUS WINAPI NtFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtGetContextThread(HANDLE,CONTEXT*);
+NTSYSAPI NTSTATUS WINAPI NtGetPlugPlayEvent(ULONG,ULONG,PVOID,ULONG);
+NTSYSAPI ULONG WINAPI NtGetTickCount(VOID);
+NTSYSAPI NTSTATUS WINAPI NtGetWriteWatch(HANDLE,ULONG,PVOID,SIZE_T,PVOID*,ULONG_PTR*,ULONG*);
+NTSYSAPI NTSTATUS WINAPI NtImpersonateAnonymousToken(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtImpersonateClientOfPort(HANDLE,PPORT_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtImpersonateThread(HANDLE,HANDLE,PSECURITY_QUALITY_OF_SERVICE);
+NTSYSAPI NTSTATUS WINAPI NtInitializeRegistry(BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtIsProcessInJob(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtListenPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtLoadDriver(const UNICODE_STRING *);
+NTSYSAPI NTSTATUS WINAPI NtLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
+NTSYSAPI NTSTATUS WINAPI NtLockFile(HANDLE,HANDLE,PIO_APC_ROUTINE,void*,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,ULONG*,BOOLEAN,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtMakeTemporaryObject(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtNotifyChangeDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,ULONG,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSYSAPI NTSTATUS WINAPI NtOpenEventPair(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtOpenIoCompletion(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtOpenJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
+NTSYSAPI NTSTATUS WINAPI NtOpenKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtOpenMutant(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtOpenObjectAuditAlarm(PUNICODE_STRING,PHANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,HANDLE,ACCESS_MASK,ACCESS_MASK,PPRIVILEGE_SET,BOOLEAN,BOOLEAN,PBOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSYSAPI NTSTATUS WINAPI NtOpenProcessToken(HANDLE,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS WINAPI NtOpenProcessTokenEx(HANDLE,DWORD,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS WINAPI NtOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtOpenSemaphore(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
+NTSYSAPI NTSTATUS WINAPI NtOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
+NTSYSAPI NTSTATUS WINAPI NtOpenThreadTokenEx(HANDLE,DWORD,BOOLEAN,DWORD,HANDLE *);
+NTSYSAPI NTSTATUS WINAPI NtOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
+NTSYSAPI NTSTATUS WINAPI NtPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtPrivilegeCheck(HANDLE,PPRIVILEGE_SET,PBOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtPrivilegeObjectAuditAlarm(PUNICODE_STRING,HANDLE,HANDLE,ULONG,PPRIVILEGE_SET,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtPrivilegedServiceAuditAlarm(PUNICODE_STRING,PUNICODE_STRING,HANDLE,PPRIVILEGE_SET,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtProtectVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG,ULONG*);
+NTSYSAPI NTSTATUS WINAPI NtPulseEvent(HANDLE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueueApcThread(HANDLE,PNTAPCFUNC,ULONG_PTR,ULONG_PTR,ULONG_PTR);
+NTSYSAPI NTSTATUS WINAPI NtQueryAttributesFile(const OBJECT_ATTRIBUTES*,FILE_BASIC_INFORMATION*);
+NTSYSAPI NTSTATUS WINAPI NtQueryDefaultLocale(BOOLEAN,LCID*);
+NTSYSAPI NTSTATUS WINAPI NtQueryDefaultUILanguage(LANGID*);
+NTSYSAPI NTSTATUS WINAPI NtQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PULONG,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI NtQueryEvent(HANDLE,EVENT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationAtom(RTL_ATOM,ATOM_INFORMATION_CLASS,PVOID,ULONG,ULONG*);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationPort(HANDLE,PORT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationProcess(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryInstallUILanguage(LANGID*);
+NTSYSAPI NTSTATUS WINAPI NtQueryIntervalProfile(KPROFILE_SOURCE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryIoCompletion(HANDLE,IO_COMPLETION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSYSAPI NTSTATUS WINAPI NtQueryMultipleValueKey(HANDLE,PKEY_MULTIPLE_VALUE_INFORMATION,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryMutant(HANDLE,MUTANT_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryOpenSubKeys(POBJECT_ATTRIBUTES,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryPerformanceCounter(PLARGE_INTEGER, PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQuerySemaphore(HANDLE,SEMAPHORE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQuerySystemEnvironmentValue(PUNICODE_STRING,PWCHAR,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQuerySystemTime(PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtQueryTimer(HANDLE,TIMER_INFORMATION_CLASS,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryTimerResolution(PULONG,PULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
+NTSYSAPI NTSTATUS WINAPI NtQueryVirtualMemory(HANDLE,LPCVOID,MEMORY_INFORMATION_CLASS,PVOID,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS WINAPI NtQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS WINAPI NtRaiseException(PEXCEPTION_RECORD,PCONTEXT,BOOL);
+NTSYSAPI NTSTATUS WINAPI NtRaiseHardError(NTSTATUS,ULONG,PUNICODE_STRING,PVOID*,HARDERROR_RESPONSE_OPTION,PHARDERROR_RESPONSE);
+NTSYSAPI NTSTATUS WINAPI NtReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtReadFileScatter(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtReadRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtReadVirtualMemory(HANDLE,const void*,void*,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS WINAPI NtRegisterThreadTerminatePort(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtReleaseKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtReleaseMutant(HANDLE,PLONG);
+NTSYSAPI NTSTATUS WINAPI NtReleaseSemaphore(HANDLE,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtRemoveIoCompletion(HANDLE,PULONG_PTR,PULONG_PTR,PIO_STATUS_BLOCK,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtReplyPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtReplyWaitReceivePort(HANDLE,PULONG,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtReplyWaitReceivePortEx(HANDLE,PVOID*,PPORT_MESSAGE,PPORT_MESSAGE,PLARGE_INTEGER);
+NTSYSAPI NTSTATUS WINAPI NtReplyWaitReplyPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtRequestPort(HANDLE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
+NTSYSAPI NTSTATUS WINAPI NtResetEvent(HANDLE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtResetWriteWatch(HANDLE,PVOID,SIZE_T);
+NTSYSAPI NTSTATUS WINAPI NtRestoreKey(HANDLE,HANDLE,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtResumeThread(HANDLE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtSaveKey(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetContextThread(HANDLE,const CONTEXT*);
+NTSYSAPI NTSTATUS WINAPI NtSetDefaultHardErrorPort(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSetDefaultLocale(BOOLEAN,LCID);
+NTSYSAPI NTSTATUS WINAPI NtSetDefaultUILanguage(LANGID);
+NTSYSAPI NTSTATUS WINAPI NtSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetEvent(HANDLE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetHighEventPair(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSetHighWaitLowEventPair(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSetHighWaitLowThread(VOID);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetInformationToken(HANDLE,TOKEN_INFORMATION_CLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetIntervalProfile(ULONG,KPROFILE_SOURCE);
+NTSYSAPI NTSTATUS WINAPI NtSetIoCompletion(HANDLE,ULONG_PTR,ULONG_PTR,NTSTATUS,SIZE_T);
+NTSYSAPI NTSTATUS WINAPI NtSetLdtEntries(ULONG,LDT_ENTRY,ULONG,LDT_ENTRY);
+NTSYSAPI NTSTATUS WINAPI NtSetLowEventPair(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighEventPair(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSetLowWaitHighThread(VOID);
+NTSYSAPI NTSTATUS WINAPI NtSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+NTSYSAPI NTSTATUS WINAPI NtSetSystemEnvironmentValue(PUNICODE_STRING,PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI NtSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetSystemPowerState(POWER_ACTION,SYSTEM_POWER_STATE,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
+NTSYSAPI NTSTATUS WINAPI NtSetTimerResolution(ULONG,BOOLEAN,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS WINAPI NtSignalAndWaitForSingleObject(HANDLE,HANDLE,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtShutdownSystem(SHUTDOWN_ACTION);
+NTSYSAPI NTSTATUS WINAPI NtStartProfile(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtStopProfile(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtSuspendThread(HANDLE,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtSystemDebugControl(SYSDBG_COMMAND,PVOID,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtTerminateJobObject(HANDLE,NTSTATUS);
+NTSYSAPI NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG);
+NTSYSAPI NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG);
+NTSYSAPI NTSTATUS WINAPI NtTestAlert(VOID);
+NTSYSAPI NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *);
+NTSYSAPI NTSTATUS WINAPI NtUnloadKey(POBJECT_ATTRIBUTES);
+NTSYSAPI NTSTATUS WINAPI NtUnloadKeyEx(POBJECT_ATTRIBUTES,HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtUnlockFile(HANDLE,PIO_STATUS_BLOCK,PLARGE_INTEGER,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtUnlockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
+NTSYSAPI NTSTATUS WINAPI NtUnmapViewOfSection(HANDLE,PVOID);
+NTSYSAPI NTSTATUS WINAPI NtVdmControl(ULONG,PVOID);
+NTSYSAPI NTSTATUS WINAPI NtWaitForKeyedEvent(HANDLE,const void*,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
+NTSYSAPI NTSTATUS WINAPI NtWaitHighEventPair(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtWaitLowEventPair(HANDLE);
+NTSYSAPI NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtWriteFileGather(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,FILE_SEGMENT_ELEMENT*,ULONG,PLARGE_INTEGER,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtWriteRequestData(HANDLE,PLPC_MESSAGE,ULONG,PVOID,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS WINAPI NtYieldExecution(void);
+
+NTSYSAPI void WINAPI RtlAcquirePebLock(void);
+NTSYSAPI BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
+NTSYSAPI BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK,BYTE);
+NTSYSAPI void WINAPI RtlAcquireSRWLockExclusive(RTL_SRWLOCK*);
+NTSYSAPI void WINAPI RtlAcquireSRWLockShared(RTL_SRWLOCK*);
+NTSYSAPI NTSTATUS WINAPI RtlActivateActivationContext(DWORD,HANDLE,ULONG_PTR*);
+NTSYSAPI NTSTATUS WINAPI RtlAddAce(PACL,DWORD,DWORD,PACE_HEADER,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS WINAPI RtlAddAccessDeniedAce(PACL,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS WINAPI RtlAddAccessDeniedAceEx(PACL,DWORD,DWORD,DWORD,PSID);
+NTSYSAPI NTSTATUS WINAPI RtlAddAtomToAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
+NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessAce(PACL,DWORD,DWORD,PSID,BOOL,BOOL);
+NTSYSAPI NTSTATUS WINAPI RtlAddAuditAccessAceEx(PACL,DWORD,DWORD,DWORD,PSID,BOOL,BOOL);
+NTSYSAPI void WINAPI RtlAddRefActivationContext(HANDLE);
+NTSYSAPI PVOID WINAPI RtlAddVectoredExceptionHandler(ULONG,PVECTORED_EXCEPTION_HANDLER);
+NTSYSAPI NTSTATUS WINAPI RtlAdjustPrivilege(ULONG,BOOLEAN,BOOLEAN,PBOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PSID *);
+NTSYSAPI RTL_HANDLE * WINAPI RtlAllocateHandle(RTL_HANDLE_TABLE *,ULONG *);
+NTSYSAPI PVOID WINAPI RtlAllocateHeap(HANDLE,ULONG,SIZE_T) __WINE_ALLOC_SIZE(3);
+NTSYSAPI WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *);
+NTSYSAPI DWORD WINAPI RtlAnsiStringToUnicodeSize(const STRING *);
+NTSYSAPI NTSTATUS WINAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING,PCANSI_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlAppendAsciizToString(STRING *,LPCSTR);
+NTSYSAPI NTSTATUS WINAPI RtlAppendStringToString(STRING *,const STRING *);
+NTSYSAPI NTSTATUS WINAPI RtlAppendUnicodeStringToString(UNICODE_STRING *,const UNICODE_STRING *);
+NTSYSAPI NTSTATUS WINAPI RtlAppendUnicodeToString(UNICODE_STRING *,LPCWSTR);
+NTSYSAPI BOOLEAN WINAPI RtlAreAllAccessesGranted(ACCESS_MASK,ACCESS_MASK);
+NTSYSAPI BOOLEAN WINAPI RtlAreAnyAccessesGranted(ACCESS_MASK,ACCESS_MASK);
+NTSYSAPI BOOLEAN WINAPI RtlAreBitsSet(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI BOOLEAN WINAPI RtlAreBitsClear(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlCharToInteger(PCSZ,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI RtlCheckRegistryKey(ULONG, PWSTR);
+NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP);
+NTSYSAPI void WINAPI RtlClearBits(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlCreateActivationContext(HANDLE*,const void*);
+NTSYSAPI PDEBUG_BUFFER WINAPI RtlCreateQueryDebugBuffer(ULONG,BOOLEAN);
+NTSYSAPI ULONG WINAPI RtlCompactHeap(HANDLE,ULONG);
+NTSYSAPI LONG WINAPI RtlCompareString(const STRING*,const STRING*,BOOLEAN);
+NTSYSAPI LONG WINAPI RtlCompareUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlCompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,ULONG,PULONG,PVOID);
+NTSYSAPI DWORD WINAPI RtlComputeCrc32(DWORD,const BYTE*,INT);
+NTSYSAPI NTSTATUS WINAPI RtlConvertSidToUnicodeString(PUNICODE_STRING,PSID,BOOLEAN);
+NTSYSAPI void WINAPI RtlCopyLuid(PLUID,const LUID*);
+NTSYSAPI void WINAPI RtlCopyLuidAndAttributesArray(ULONG,const LUID_AND_ATTRIBUTES*,PLUID_AND_ATTRIBUTES);
+NTSYSAPI BOOLEAN WINAPI RtlCopySid(DWORD,PSID,PSID);
+NTSYSAPI NTSTATUS WINAPI RtlCopySecurityDescriptor(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR);
+NTSYSAPI void WINAPI RtlCopyString(STRING*,const STRING*);
+NTSYSAPI void WINAPI RtlCopyUnicodeString(UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlCreateAcl(PACL,DWORD,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlCreateAtomTable(ULONG,RTL_ATOM_TABLE*);
+NTSYSAPI NTSTATUS WINAPI RtlCreateEnvironment(BOOLEAN, PWSTR*);
+NTSYSAPI HANDLE WINAPI RtlCreateHeap(ULONG,PVOID,SIZE_T,SIZE_T,PVOID,PRTL_HEAP_DEFINITION);
+NTSYSAPI NTSTATUS WINAPI RtlCreateProcessParameters(RTL_USER_PROCESS_PARAMETERS**,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,PWSTR,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlCreateTimerQueue(PHANDLE);
+NTSYSAPI NTSTATUS WINAPI RtlCreateTimer(PHANDLE, HANDLE, RTL_WAITORTIMERCALLBACKFUNC, PVOID, DWORD, DWORD, ULONG);
+NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeString(PUNICODE_STRING,LPCWSTR);
+NTSYSAPI BOOLEAN WINAPI RtlCreateUnicodeStringFromAsciiz(PUNICODE_STRING,LPCSTR);
+NTSYSAPI NTSTATUS WINAPI RtlCreateUserThread(HANDLE,const SECURITY_DESCRIPTOR*,BOOLEAN,PVOID,SIZE_T,SIZE_T,PRTL_THREAD_START_ROUTINE,void*,HANDLE*,CLIENT_ID*);
+NTSYSAPI void WINAPI RtlDeactivateActivationContext(DWORD,ULONG_PTR);
+NTSYSAPI PVOID WINAPI RtlDecodePointer(PVOID);
+NTSYSAPI NTSTATUS WINAPI RtlDecompressBuffer(USHORT,PUCHAR,ULONG,PUCHAR,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteAce(PACL,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteAtomFromAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR);
+NTSYSAPI void WINAPI RtlDeleteResource(LPRTL_RWLOCK);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteSecurityObject(PSECURITY_DESCRIPTOR*);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteTimer(HANDLE, HANDLE, HANDLE);
+NTSYSAPI NTSTATUS WINAPI RtlDeleteTimerQueueEx(HANDLE, HANDLE);
+NTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlDeNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
+NTSYSAPI NTSTATUS WINAPI RtlDeregisterWait(HANDLE);
+NTSYSAPI NTSTATUS WINAPI RtlDeregisterWaitEx(HANDLE,HANDLE);
+NTSYSAPI NTSTATUS WINAPI RtlDestroyAtomTable(RTL_ATOM_TABLE);
+NTSYSAPI NTSTATUS WINAPI RtlDestroyEnvironment(PWSTR);
+NTSYSAPI NTSTATUS WINAPI RtlDestroyHandleTable(RTL_HANDLE_TABLE *);
+NTSYSAPI HANDLE WINAPI RtlDestroyHeap(HANDLE);
+NTSYSAPI void WINAPI RtlDestroyProcessParameters(RTL_USER_PROCESS_PARAMETERS*);
+NTSYSAPI NTSTATUS WINAPI RtlDestroyQueryDebugBuffer(PDEBUG_BUFFER);
+NTSYSAPI DOS_PATHNAME_TYPE WINAPI RtlDetermineDosPathNameType_U(PCWSTR);
+NTSYSAPI BOOLEAN WINAPI RtlDllShutdownInProgress(void);
+NTSYSAPI BOOLEAN WINAPI RtlDoesFileExists_U(LPCWSTR);
+NTSYSAPI BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(PCWSTR,PUNICODE_STRING,PWSTR*,CURDIR*);
+NTSYSAPI ULONG WINAPI RtlDosSearchPath_U(LPCWSTR, LPCWSTR, LPCWSTR, ULONG, LPWSTR, LPWSTR*);
+NTSYSAPI WCHAR WINAPI RtlDowncaseUnicodeChar(WCHAR);
+NTSYSAPI NTSTATUS WINAPI RtlDowncaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI void WINAPI RtlDumpResource(LPRTL_RWLOCK);
+NTSYSAPI NTSTATUS WINAPI RtlDuplicateUnicodeString(int,const UNICODE_STRING*,UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlEmptyAtomTable(RTL_ATOM_TABLE,BOOLEAN);
+NTSYSAPI PVOID WINAPI RtlEncodePointer(PVOID);
+NTSYSAPI NTSTATUS WINAPI RtlEnterCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI void WINAPI RtlEraseUnicodeString(UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlEqualComputerName(const UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlEqualDomainName(const UNICODE_STRING*,const UNICODE_STRING*);
+NTSYSAPI BOOLEAN WINAPI RtlEqualLuid(const LUID*,const LUID*);
+NTSYSAPI BOOL WINAPI RtlEqualPrefixSid(PSID,PSID);
+NTSYSAPI BOOL WINAPI RtlEqualSid(PSID,PSID);
+NTSYSAPI BOOLEAN WINAPI RtlEqualString(const STRING*,const STRING*,BOOLEAN);
+NTSYSAPI BOOLEAN WINAPI RtlEqualUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI void DECLSPEC_NORETURN WINAPI RtlExitUserProcess(ULONG);
+NTSYSAPI void DECLSPEC_NORETURN WINAPI RtlExitUserThread(ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlExpandEnvironmentStrings_U(PCWSTR, const UNICODE_STRING*, UNICODE_STRING*, ULONG*);
+NTSYSAPI NTSTATUS WINAPI RtlFindActivationContextSectionString(ULONG,const GUID*,ULONG,const UNICODE_STRING*,PVOID);
+NTSYSAPI NTSTATUS WINAPI RtlFindActivationContextSectionGuid(ULONG,const GUID*,ULONG,const GUID*,PVOID);
+NTSYSAPI NTSTATUS WINAPI RtlFindCharInUnicodeString(int,const UNICODE_STRING*,const UNICODE_STRING*,USHORT*);
+NTSYSAPI ULONG WINAPI RtlFindClearBits(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG WINAPI RtlFindClearRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
+NTSYSAPI ULONG WINAPI RtlFindLastBackwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI ULONG WINAPI RtlFindLastBackwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI CCHAR WINAPI RtlFindLeastSignificantBit(ULONGLONG);
+NTSYSAPI ULONG WINAPI RtlFindLongestRunSet(PCRTL_BITMAP,PULONG);
+NTSYSAPI ULONG WINAPI RtlFindLongestRunClear(PCRTL_BITMAP,PULONG);
+NTSYSAPI NTSTATUS WINAPI RtlFindMessage(HMODULE,ULONG,ULONG,ULONG,const MESSAGE_RESOURCE_ENTRY**);
+NTSYSAPI CCHAR WINAPI RtlFindMostSignificantBit(ULONGLONG);
+NTSYSAPI ULONG WINAPI RtlFindNextForwardRunSet(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP,ULONG,PULONG);
+NTSYSAPI ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG WINAPI RtlFindSetBitsAndClear(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG WINAPI RtlFindSetRuns(PCRTL_BITMAP,PRTL_BITMAP_RUN,ULONG,BOOLEAN);
+NTSYSAPI BOOLEAN WINAPI RtlFirstFreeAce(PACL,PACE_HEADER *);
+NTSYSAPI NTSTATUS WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI RtlFormatMessage(LPWSTR,UCHAR,BOOLEAN,BOOLEAN,BOOLEAN,__ms_va_list *,LPWSTR,ULONG);
+NTSYSAPI void WINAPI RtlFreeAnsiString(PANSI_STRING);
+NTSYSAPI BOOLEAN WINAPI RtlFreeHandle(RTL_HANDLE_TABLE *,RTL_HANDLE *);
+NTSYSAPI BOOLEAN WINAPI RtlFreeHeap(HANDLE,ULONG,PVOID);
+NTSYSAPI void WINAPI RtlFreeOemString(POEM_STRING);
+NTSYSAPI DWORD WINAPI RtlFreeSid(PSID);
+NTSYSAPI void WINAPI RtlFreeThreadActivationContextStack(void);
+NTSYSAPI void WINAPI RtlFreeUnicodeString(PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI RtlGetAce(PACL,DWORD,LPVOID *);
+NTSYSAPI NTSTATUS WINAPI RtlGetActiveActivationContext(HANDLE*);
+NTSYSAPI NTSTATUS WINAPI RtlGetCompressionWorkSpaceSize(USHORT,PULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI RtlGetControlSecurityDescriptor(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL,LPDWORD);
+NTSYSAPI NTSTATUS WINAPI RtlGetCurrentDirectory_U(ULONG, LPWSTR);
+NTSYSAPI PEB * WINAPI RtlGetCurrentPeb(void);
+NTSYSAPI NTSTATUS WINAPI RtlGetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
+NTSYSAPI ULONG WINAPI RtlGetFullPathName_U(PCWSTR,ULONG,PWSTR,PWSTR*);
+NTSYSAPI NTSTATUS WINAPI RtlGetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlGetLastNtStatus(void);
+NTSYSAPI DWORD WINAPI RtlGetLastWin32Error(void);
+NTSYSAPI DWORD WINAPI RtlGetLongestNtPathLength(void);
+NTSYSAPI ULONG WINAPI RtlGetNtGlobalFlags(void);
+NTSYSAPI BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
+NTSYSAPI NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
+NTSYSAPI ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
+NTSYSAPI DWORD WINAPI RtlGetThreadErrorMode(void);
+NTSYSAPI NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
+NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING,GUID*);
+NTSYSAPI PSID_IDENTIFIER_AUTHORITY WINAPI RtlIdentifierAuthoritySid(PSID);
+NTSYSAPI PVOID WINAPI RtlImageDirectoryEntryToData(HMODULE,BOOL,WORD,ULONG *);
+NTSYSAPI PIMAGE_NT_HEADERS WINAPI RtlImageNtHeader(HMODULE);
+NTSYSAPI PIMAGE_SECTION_HEADER WINAPI RtlImageRvaToSection(const IMAGE_NT_HEADERS *,HMODULE,DWORD);
+NTSYSAPI PVOID WINAPI RtlImageRvaToVa(const IMAGE_NT_HEADERS *,HMODULE,DWORD,IMAGE_SECTION_HEADER **);
+NTSYSAPI NTSTATUS WINAPI RtlImpersonateSelf(SECURITY_IMPERSONATION_LEVEL);
+NTSYSAPI void WINAPI RtlInitString(PSTRING,PCSZ);
+NTSYSAPI void WINAPI RtlInitAnsiString(PANSI_STRING,PCSZ);
+NTSYSAPI NTSTATUS WINAPI RtlInitAnsiStringEx(PANSI_STRING,PCSZ);
+NTSYSAPI void WINAPI RtlInitUnicodeString(PUNICODE_STRING,PCWSTR);
+NTSYSAPI NTSTATUS WINAPI RtlInitUnicodeStringEx(PUNICODE_STRING,PCWSTR);
+NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSectionAndSpinCount(RTL_CRITICAL_SECTION *,ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlInitializeCriticalSectionEx(RTL_CRITICAL_SECTION *,ULONG,ULONG);
+NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP,PULONG,ULONG);
+NTSYSAPI void WINAPI RtlInitializeHandleTable(ULONG,ULONG,RTL_HANDLE_TABLE *);
+NTSYSAPI void WINAPI RtlInitializeResource(LPRTL_RWLOCK);
+NTSYSAPI void WINAPI RtlInitializeSRWLock(RTL_SRWLOCK*);
+NTSYSAPI BOOL WINAPI RtlInitializeSid(PSID,PSID_IDENTIFIER_AUTHORITY,BYTE);
+NTSYSAPI NTSTATUS WINAPI RtlInt64ToUnicodeString(ULONGLONG,ULONG,UNICODE_STRING *);
+NTSYSAPI NTSTATUS WINAPI RtlIntegerToChar(ULONG,ULONG,ULONG,PCHAR);
+NTSYSAPI NTSTATUS WINAPI RtlIntegerToUnicodeString(ULONG,ULONG,UNICODE_STRING *);
+NTSYSAPI BOOLEAN WINAPI RtlIsActivationContextActive(HANDLE);
+NTSYSAPI ULONG WINAPI RtlIsDosDeviceName_U(PCWSTR);
+NTSYSAPI BOOLEAN WINAPI RtlIsNameLegalDOS8Dot3(const UNICODE_STRING*,POEM_STRING,PBOOLEAN);
+NTSYSAPI BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *);
+NTSYSAPI BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *);
+NTSYSAPI BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **);
+NTSYSAPI NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI DWORD WINAPI RtlLengthRequiredSid(DWORD);
+NTSYSAPI ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR);
+NTSYSAPI DWORD WINAPI RtlLengthSid(PSID);
+NTSYSAPI NTSTATUS WINAPI RtlLocalTimeToSystemTime(const LARGE_INTEGER*,PLARGE_INTEGER);
+NTSYSAPI BOOLEAN WINAPI RtlLockHeap(HANDLE);
+NTSYSAPI NTSTATUS WINAPI RtlLookupAtomInAtomTable(RTL_ATOM_TABLE,const WCHAR*,RTL_ATOM*);
+NTSYSAPI NTSTATUS WINAPI RtlMakeSelfRelativeSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,LPDWORD);
+NTSYSAPI void WINAPI RtlMapGenericMask(PACCESS_MASK,const GENERIC_MAPPING*);
+NTSYSAPI NTSTATUS WINAPI RtlMultiByteToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlMultiByteToUnicodeSize(DWORD*,LPCSTR,UINT);
+NTSYSAPI NTSTATUS WINAPI RtlNewSecurityObject(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR*,BOOLEAN,HANDLE,PGENERIC_MAPPING);
+NTSYSAPI PRTL_USER_PROCESS_PARAMETERS WINAPI RtlNormalizeProcessParams(RTL_USER_PROCESS_PARAMETERS*);
+NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS);
+NTSYSAPI ULONG WINAPI RtlNtStatusToDosErrorNoTeb(NTSTATUS);
+NTSYSAPI ULONG WINAPI RtlNumberOfSetBits(PCRTL_BITMAP);
+NTSYSAPI ULONG WINAPI RtlNumberOfClearBits(PCRTL_BITMAP);
+NTSYSAPI UINT WINAPI RtlOemStringToUnicodeSize(const STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlOemStringToUnicodeString(UNICODE_STRING*,const STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlOemToUnicodeN(LPWSTR,DWORD,LPDWORD,LPCSTR,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlOpenCurrentUser(ACCESS_MASK,PHANDLE);
+NTSYSAPI PVOID WINAPI RtlPcToFileHeader(PVOID,PVOID*);
+NTSYSAPI NTSTATUS WINAPI RtlPinAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM);
+NTSYSAPI BOOLEAN WINAPI RtlPrefixString(const STRING*,const STRING*,BOOLEAN);
+NTSYSAPI BOOLEAN WINAPI RtlPrefixUnicodeString(const UNICODE_STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlQueryAtomInAtomTable(RTL_ATOM_TABLE,RTL_ATOM,ULONG*,ULONG*,WCHAR*,ULONG*);
+NTSYSAPI NTSTATUS WINAPI RtlQueryEnvironmentVariable_U(PWSTR,PUNICODE_STRING,PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI RtlQueryHeapInformation(HANDLE,HEAP_INFORMATION_CLASS,PVOID,SIZE_T,PSIZE_T);
+NTSYSAPI NTSTATUS WINAPI RtlQueryInformationAcl(PACL,LPVOID,DWORD,ACL_INFORMATION_CLASS);
+NTSYSAPI NTSTATUS WINAPI RtlQueryInformationActivationContext(ULONG,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE_T*);
+NTSYSAPI NTSTATUS WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER);
+NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID);
+NTSYSAPI NTSTATUS WINAPI RtlQueryTimeZoneInformation(RTL_TIME_ZONE_INFORMATION*);
+NTSYSAPI NTSTATUS WINAPI RtlQueueWorkItem(PRTL_WORK_ITEM_ROUTINE,PVOID,ULONG);
+NTSYSAPI void WINAPI RtlRaiseException(PEXCEPTION_RECORD);
+NTSYSAPI void WINAPI RtlRaiseStatus(NTSTATUS);
+NTSYSAPI ULONG WINAPI RtlRandom(PULONG);
+NTSYSAPI PVOID WINAPI RtlReAllocateHeap(HANDLE,ULONG,PVOID,SIZE_T);
+NTSYSAPI NTSTATUS WINAPI RtlRegisterWait(PHANDLE,HANDLE,RTL_WAITORTIMERCALLBACKFUNC,PVOID,ULONG,ULONG);
+NTSYSAPI void WINAPI RtlReleaseActivationContext(HANDLE);
+NTSYSAPI void WINAPI RtlReleasePebLock(void);
+NTSYSAPI void WINAPI RtlReleaseResource(LPRTL_RWLOCK);
+NTSYSAPI void WINAPI RtlReleaseSRWLockExclusive(RTL_SRWLOCK*);
+NTSYSAPI void WINAPI RtlReleaseSRWLockShared(RTL_SRWLOCK*);
+NTSYSAPI ULONG WINAPI RtlRemoveVectoredExceptionHandler(PVOID);
+NTSYSAPI void WINAPI RtlRestoreLastWin32Error(DWORD);
+NTSYSAPI void WINAPI RtlSecondsSince1970ToTime(DWORD,LARGE_INTEGER *);
+NTSYSAPI void WINAPI RtlSecondsSince1980ToTime(DWORD,LARGE_INTEGER *);
+NTSYSAPI NTSTATUS WINAPI RtlSelfRelativeToAbsoluteSD(PSECURITY_DESCRIPTOR,PSECURITY_DESCRIPTOR,PDWORD,PACL,PDWORD,PACL,PDWORD,PSID,PDWORD,PSID,PDWORD);
+NTSYSAPI void WINAPI RtlSetAllBits(PRTL_BITMAP);
+NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP,ULONG,ULONG);
+NTSYSAPI ULONG WINAPI RtlSetCriticalSectionSpinCount(RTL_CRITICAL_SECTION*,ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlSetControlSecurityDescriptor(PSECURITY_DESCRIPTOR,SECURITY_DESCRIPTOR_CONTROL,SECURITY_DESCRIPTOR_CONTROL);
+NTSYSAPI NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING*);
+NTSYSAPI void WINAPI RtlSetCurrentEnvironment(PWSTR, PWSTR*);
+NTSYSAPI NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlSetEnvironmentVariable(PWSTR*,PUNICODE_STRING,PUNICODE_STRING);
+NTSYSAPI NTSTATUS WINAPI RtlSetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlSetGroupSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlSetIoCompletionCallback(HANDLE,PRTL_OVERLAPPED_COMPLETION_ROUTINE,ULONG);
+NTSYSAPI void WINAPI RtlSetLastWin32Error(DWORD);
+NTSYSAPI void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
+NTSYSAPI NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlSetThreadErrorMode(DWORD,LPDWORD);
+NTSYSAPI NTSTATUS WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*);
+NTSYSAPI SIZE_T WINAPI RtlSizeHeap(HANDLE,ULONG,const void*);
+NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID,PUNICODE_STRING);
+NTSYSAPI LPDWORD WINAPI RtlSubAuthoritySid(PSID,DWORD);
+NTSYSAPI LPBYTE WINAPI RtlSubAuthorityCountSid(PSID);
+NTSYSAPI NTSTATUS WINAPI RtlSystemTimeToLocalTime(const LARGE_INTEGER*,PLARGE_INTEGER);
+NTSYSAPI void WINAPI RtlTimeToTimeFields(const LARGE_INTEGER*,PTIME_FIELDS);
+NTSYSAPI BOOLEAN WINAPI RtlTimeFieldsToTime(PTIME_FIELDS,PLARGE_INTEGER);
+NTSYSAPI void WINAPI RtlTimeToElapsedTimeFields(const LARGE_INTEGER *,PTIME_FIELDS);
+NTSYSAPI BOOLEAN WINAPI RtlTimeToSecondsSince1970(const LARGE_INTEGER *,LPDWORD);
+NTSYSAPI BOOLEAN WINAPI RtlTimeToSecondsSince1980(const LARGE_INTEGER *,LPDWORD);
+NTSYSAPI BOOL WINAPI RtlTryEnterCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI ULONGLONG __cdecl RtlUlonglongByteSwap(ULONGLONG);
+NTSYSAPI DWORD WINAPI RtlUnicodeStringToAnsiSize(const UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlUnicodeStringToAnsiString(PANSI_STRING,PCUNICODE_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlUnicodeStringToInteger(const UNICODE_STRING *,ULONG,ULONG *);
+NTSYSAPI DWORD WINAPI RtlUnicodeStringToOemSize(const UNICODE_STRING*);
+NTSYSAPI NTSTATUS WINAPI RtlUnicodeStringToOemString(POEM_STRING,PCUNICODE_STRING,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlUnicodeToMultiByteSize(PULONG,PCWSTR,ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI ULONG WINAPI RtlUniform(PULONG);
+NTSYSAPI BOOLEAN WINAPI RtlUnlockHeap(HANDLE);
+NTSYSAPI void WINAPI RtlUnwind(PVOID,PVOID,PEXCEPTION_RECORD,PVOID);
+#ifdef __x86_64__
+NTSYSAPI void WINAPI RtlUnwindEx(PVOID,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
+#elif defined(__ia64__)
+NTSYSAPI void WINAPI RtlUnwind2(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT);
+NTSYSAPI void WINAPI RtlUnwindEx(FRAME_POINTERS,PVOID,PEXCEPTION_RECORD,PVOID,PCONTEXT,PUNWIND_HISTORY_TABLE);
+#endif
+NTSYSAPI WCHAR WINAPI RtlUpcaseUnicodeChar(WCHAR);
+NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeString(UNICODE_STRING*,const UNICODE_STRING *,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToAnsiString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToCountedOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeStringToOemString(STRING*,const UNICODE_STRING*,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeToMultiByteN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlUpcaseUnicodeToOemN(LPSTR,DWORD,LPDWORD,LPCWSTR,DWORD);
+NTSYSAPI NTSTATUS WINAPI RtlUpdateTimer(HANDLE, HANDLE, DWORD, DWORD);
+NTSYSAPI CHAR WINAPI RtlUpperChar(CHAR);
+NTSYSAPI void WINAPI RtlUpperString(STRING *,const STRING *);
+NTSYSAPI NTSTATUS WINAPI RtlValidSecurityDescriptor(PSECURITY_DESCRIPTOR);
+NTSYSAPI BOOLEAN WINAPI RtlValidAcl(PACL);
+NTSYSAPI BOOLEAN WINAPI RtlValidSid(PSID);
+NTSYSAPI BOOLEAN WINAPI RtlValidateHeap(HANDLE,ULONG,LPCVOID);
+NTSYSAPI NTSTATUS WINAPI RtlVerifyVersionInfo(const RTL_OSVERSIONINFOEXW*,DWORD,DWORDLONG);
+NTSYSAPI NTSTATUS WINAPI RtlWalkHeap(HANDLE,PVOID);
+NTSYSAPI NTSTATUS WINAPI RtlWow64EnableFsRedirection(BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlWow64EnableFsRedirectionEx(ULONG,ULONG*);
+NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG,PCWSTR,PCWSTR,ULONG,PVOID,ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlZombifyActivationContext(HANDLE);
+NTSYSAPI NTSTATUS WINAPI RtlpNtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
+NTSYSAPI NTSTATUS WINAPI RtlpNtEnumerateSubKey(HANDLE,UNICODE_STRING *, ULONG);
+NTSYSAPI NTSTATUS WINAPI RtlpWaitForCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS WINAPI RtlpUnWaitCriticalSection(RTL_CRITICAL_SECTION *);
+NTSYSAPI NTSTATUS WINAPI vDbgPrintEx(ULONG,ULONG,LPCSTR,__ms_va_list);
+NTSYSAPI NTSTATUS WINAPI vDbgPrintExWithPrefix(LPCSTR,ULONG,ULONG,LPCSTR,__ms_va_list);
+
+/* 32-bit only functions */
+
+#ifndef _WIN64
+NTSYSAPI LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG);
+NTSYSAPI ULONGLONG WINAPI RtlConvertUlongToLargeInteger(ULONG);
+NTSYSAPI LONGLONG WINAPI RtlEnlargedIntegerMultiply(INT,INT);
+NTSYSAPI ULONGLONG WINAPI RtlEnlargedUnsignedMultiply(UINT,UINT);
+NTSYSAPI UINT WINAPI RtlEnlargedUnsignedDivide(ULONGLONG,UINT,UINT *);
+NTSYSAPI LONGLONG WINAPI RtlExtendedMagicDivide(LONGLONG,LONGLONG,INT);
+NTSYSAPI LONGLONG WINAPI RtlExtendedIntegerMultiply(LONGLONG,INT);
+NTSYSAPI LONGLONG WINAPI RtlExtendedLargeIntegerDivide(LONGLONG,INT,INT *);
+NTSYSAPI LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG);
+NTSYSAPI LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT);
+NTSYSAPI ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *);
+NTSYSAPI LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG);
+NTSYSAPI LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT);
+NTSYSAPI LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT);
+NTSYSAPI LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG);
+NTSYSAPI NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR);
+#endif
+
+/* Wine internal functions */
+
+NTSYSAPI NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRING *unix_name_ret,
+ UINT disposition, BOOLEAN check_case );
+NTSYSAPI NTSTATUS CDECL wine_unix_to_nt_file_name( const ANSI_STRING *name, UNICODE_STRING *nt );
+
+
+/***********************************************************************
+ * Inline functions
+ */
+
+#define InitializeObjectAttributes(p,n,a,r,s) \
+ do { \
+ (p)->Length = sizeof(OBJECT_ATTRIBUTES); \
+ (p)->RootDirectory = r; \
+ (p)->Attributes = a; \
+ (p)->ObjectName = n; \
+ (p)->SecurityDescriptor = s; \
+ (p)->SecurityQualityOfService = NULL; \
+ } while (0)
+
+#define NtCurrentProcess() ((HANDLE)-1)
+
+#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
+#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
+#define RtlStoreUlong(p,v) do { ULONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
+#define RtlStoreUlonglong(p,v) do { ULONGLONG _v = (v); memcpy((p), &_v, sizeof(_v)); } while (0)
+#define RtlRetrieveUlong(p,s) memcpy((p), (s), sizeof(ULONG))
+#define RtlRetrieveUlonglong(p,s) memcpy((p), (s), sizeof(ULONGLONG))
+#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
+
+static inline BOOLEAN RtlCheckBit(PCRTL_BITMAP lpBits, ULONG ulBit)
+{
+ if (lpBits && ulBit < lpBits->SizeOfBitMap &&
+ lpBits->Buffer[ulBit >> 5] & (1 << (ulBit & 31)))
+ return TRUE;
+ return FALSE;
+}
+
+/* These are implemented as __fastcall, so we can't let Winelib apps link with them */
+static inline USHORT RtlUshortByteSwap(USHORT s)
+{
+ return (s >> 8) | (s << 8);
+}
+static inline ULONG RtlUlongByteSwap(ULONG i)
+{
+#if defined(__i386__) && defined(__GNUC__)
+ ULONG ret;
+ __asm__("bswap %0" : "=r" (ret) : "0" (i) );
+ return ret;
+#else
+ return ((ULONG)RtlUshortByteSwap((USHORT)i) << 16) | RtlUshortByteSwap((USHORT)(i >> 16));
+#endif
+}
+
+/* list manipulation macros */
+#define InitializeListHead(le) (void)((le)->Flink = (le)->Blink = (le))
+#define InsertHeadList(le,e) do { PLIST_ENTRY f = (le)->Flink; (e)->Flink = f; (e)->Blink = (le); f->Blink = (e); (le)->Flink = (e); } while (0)
+#define InsertTailList(le,e) do { PLIST_ENTRY b = (le)->Blink; (e)->Flink = (le); (e)->Blink = b; b->Flink = (e); (le)->Blink = (e); } while (0)
+#define IsListEmpty(le) ((le)->Flink == (le))
+#define RemoveEntryList(e) do { PLIST_ENTRY f = (e)->Flink, b = (e)->Blink; f->Blink = b; b->Flink = f; (e)->Flink = (e)->Blink = NULL; } while (0)
+static inline PLIST_ENTRY RemoveHeadList(PLIST_ENTRY le)
+{
+ PLIST_ENTRY f, b, e;
+
+ e = le->Flink;
+ f = le->Flink->Flink;
+ b = le->Flink->Blink;
+ f->Blink = b;
+ b->Flink = f;
+
+ if (e != le) e->Flink = e->Blink = NULL;
+ return e;
+}
+static inline PLIST_ENTRY RemoveTailList(PLIST_ENTRY le)
+{
+ PLIST_ENTRY f, b, e;
+
+ e = le->Blink;
+ f = le->Blink->Flink;
+ b = le->Blink->Blink;
+ f->Blink = b;
+ b->Flink = f;
+
+ if (e != le) e->Flink = e->Blink = NULL;
+ return e;
+}
+
+
+#ifdef __WINESRC__
+
+/* FIXME: private structure for vm86 mode, stored in teb->GdiTebBatch */
+typedef struct
+{
+ DWORD dpmi_vif;
+ DWORD vm86_pending;
+} WINE_VM86_TEB_INFO;
+
+static inline WINE_VM86_TEB_INFO *get_vm86_teb_info(void)
+{
+ return (WINE_VM86_TEB_INFO *)&NtCurrentTeb()->GdiTebBatch;
+}
+
+/* The thread information for 16-bit threads */
+/* NtCurrentTeb()->SubSystemTib points to this */
+typedef struct
+{
+ void *unknown; /* 00 unknown */
+ UNICODE_STRING *exe_name; /* 04 exe module name */
+
+ /* the following fields do not exist under Windows */
+ UNICODE_STRING exe_str; /* exe name string pointed to by exe_name */
+ CURDIR curdir; /* current directory */
+ WCHAR curdir_buffer[MAX_PATH];
+} WIN16_SUBSYSTEM_TIB;
+
+#endif /* __WINESRC__ */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINTERNL_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h
new file mode 100644
index 00000000..88660ece
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wintrust.h
@@ -0,0 +1,633 @@
+/*
+ * Copyright (C) 2004 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINTRUST_H
+#define __WINE_WINTRUST_H
+
+#include <wincrypt.h>
+
+
+#include <pshpack8.h>
+
+typedef struct WINTRUST_FILE_INFO_
+{
+ DWORD cbStruct;
+ LPCWSTR pcwszFilePath;
+ HANDLE hFile;
+ GUID* pgKnownSubject;
+} WINTRUST_FILE_INFO, *PWINTRUST_FILE_INFO;
+
+typedef struct WINTRUST_CATALOG_INFO_
+{
+ DWORD cbStruct;
+ DWORD dwCatalogVersion;
+ LPCWSTR pcwszCatalogFilePath;
+ LPCWSTR pcwszMemberTag;
+ LPCWSTR pcwszMemberFilePath;
+ HANDLE hMemberFile;
+ BYTE* pbCalculatedFileHash;
+ DWORD cbCalculatedFileHash;
+ PCCTL_CONTEXT pcCatalogContext;
+} WINTRUST_CATALOG_INFO, *PWINTRUST_CATALOG_INFO;
+
+typedef struct WINTRUST_BLOB_INFO_
+{
+ DWORD cbStruct;
+ GUID gSubject;
+ LPCWSTR pcwszDisplayName;
+ DWORD cbMemObject;
+ BYTE* pbMemObject;
+ DWORD cbMemSignedMsg;
+ BYTE* pbMemSignedMsg;
+} WINTRUST_BLOB_INFO, *PWINTRUST_BLOB_INFO;
+
+typedef struct WINTRUST_SGNR_INFO_
+{
+ DWORD cbStruct;
+ LPCWSTR pcwszDisplayName;
+ CMSG_SIGNER_INFO* psSignerInfo;
+ DWORD chStores;
+ HCERTSTORE* pahStores;
+} WINTRUST_SGNR_INFO, *PWINTRUST_SGNR_INFO;
+
+typedef struct WINTRUST_CERT_INFO_
+{
+ DWORD cbStruct;
+ LPCWSTR pcwszDisplayName;
+ CERT_CONTEXT* psCertContext;
+ DWORD chStores;
+ HCERTSTORE* pahStores;
+ DWORD dwFlags;
+ FILETIME* psftVerifyAsOf;
+} WINTRUST_CERT_INFO, *PWINTRUST_CERT_INFO;
+
+#define WTCI_DONT_OPEN_STORES 0x00000001
+#define WTCI_OPEN_ONLY_ROOT 0x00000002
+
+/* dwUIChoice */
+#define WTD_UI_ALL 1
+#define WTD_UI_NONE 2
+#define WTD_UI_NOBAD 3
+#define WTD_UI_NOGOOD 4
+/* fdwRevocationChecks */
+#define WTD_REVOKE_NONE 0
+#define WTD_REVOKE_WHOLECHAIN 1
+/* dwUnionChoice */
+#define WTD_CHOICE_FILE 1
+#define WTD_CHOICE_CATALOG 2
+#define WTD_CHOICE_BLOB 3
+#define WTD_CHOICE_SIGNER 4
+#define WTD_CHOICE_CERT 5
+
+typedef struct _WINTRUST_DATA
+{
+ DWORD cbStruct;
+ LPVOID pPolicyCallbackData;
+ LPVOID pSIPClientData;
+ DWORD dwUIChoice;
+ DWORD fdwRevocationChecks;
+ DWORD dwUnionChoice;
+ union
+ {
+ struct WINTRUST_FILE_INFO_* pFile;
+ struct WINTRUST_CATALOG_INFO_* pCatalog;
+ struct WINTRUST_BLOB_INFO_* pBlob;
+ struct WINTRUST_SGNR_INFO_* pSgnr;
+ struct WINTRUST_CERT_INFO_* pCert;
+ } DUMMYUNIONNAME;
+
+ DWORD dwStateAction;
+ HANDLE hWVTStateData;
+ WCHAR* pwszURLReference;
+ DWORD dwProvFlags;
+ DWORD dwUIContext;
+} WINTRUST_DATA, *PWINTRUST_DATA;
+
+#define WTD_STATEACTION_IGNORE 0
+#define WTD_STATEACTION_VERIFY 1
+#define WTD_STATEACTION_CLOSE 2
+#define WTD_STATEACTION_AUTO_CACHE 3
+#define WTD_STATEACTION_AUTO_CACHE_FLUSH 4
+
+#define WTD_PROV_FLAGS_MASK 0x0000ffff
+#define WTD_USE_IE4_TRUST_FLAG 0x00000001
+#define WTD_NO_IE4_CHAIN_FLAG 0x00000002
+#define WTD_NO_POLICY_USAGE_FLAG 0x00000004
+#define WTD_REVOCATION_CHECK_NONE 0x00000010
+#define WTD_REVOCATION_CHECK_END_CERT 0x00000020
+#define WTD_REVOCATION_CHECK_CHAIN 0x00000040
+#define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000080
+#define WTD_SAFER_FLAG 0x00000100
+#define WTD_HASH_ONLY_FLAG 0x00000200
+#define WTD_USE_DEFAULT_OSVER_CHECK 0x00000400
+#define WTD_LIFETIME_SIGNING_FLAG 0x00000800
+#define WTD_CACHE_ONLY_URL_RETRIEVAL 0x00001000
+
+#define WTD_UICONTEXT_EXECUTE 0
+#define WTD_UICONTEXT_INSTALL 1
+
+typedef struct _CRYPT_TRUST_REG_ENTRY
+{
+ DWORD cbStruct;
+ WCHAR *pwszDLLName;
+ WCHAR *pwszFunctionName;
+} CRYPT_TRUST_REG_ENTRY, *PCRYPT_TRUST_REG_ENTRY;
+
+typedef struct _CRYPT_REGISTER_ACTIONID
+{
+ DWORD cbStruct;
+ CRYPT_TRUST_REG_ENTRY sInitProvider;
+ CRYPT_TRUST_REG_ENTRY sObjectProvider;
+ CRYPT_TRUST_REG_ENTRY sSignatureProvider;
+ CRYPT_TRUST_REG_ENTRY sCertificateProvider;
+ CRYPT_TRUST_REG_ENTRY sCertificatePolicyProvider;
+ CRYPT_TRUST_REG_ENTRY sFinalPolicyProvider;
+ CRYPT_TRUST_REG_ENTRY sTestPolicyProvider;
+ CRYPT_TRUST_REG_ENTRY sCleanupProvider;
+} CRYPT_REGISTER_ACTIONID, *PCRYPT_REGISTER_ACTIONID;
+
+typedef struct _CRYPT_PROVIDER_REGDEFUSAGE
+{
+ DWORD cbStruct;
+ GUID *pgActionID;
+ WCHAR *pwszDllName;
+ char *pwszLoadCallbackDataFunctionName;
+ char *pwszFreeCallbackDataFunctionName;
+} CRYPT_PROVIDER_REGDEFUSAGE, *PCRYPT_PROVIDER_REGDEFUSAGE;
+
+typedef struct _CRYPT_PROVUI_DATA {
+ DWORD cbStruct;
+ DWORD dwFinalError;
+ WCHAR *pYesButtonText;
+ WCHAR *pNoButtonText;
+ WCHAR *pMoreInfoButtonText;
+ WCHAR *pAdvancedLinkText;
+ WCHAR *pCopyActionText;
+ WCHAR *pCopyActionTextNoTS;
+ WCHAR *pCopyActionTextNotSigned;
+} CRYPT_PROVUI_DATA, *PCRYPT_PROVUI_DATA;
+
+typedef struct _CRYPT_PROVIDER_CERT {
+ DWORD cbStruct;
+ PCCERT_CONTEXT pCert;
+ BOOL fCommercial;
+ BOOL fTrustedRoot;
+ BOOL fSelfSigned;
+ BOOL fTestCert;
+ DWORD dwRevokedReason;
+ DWORD dwConfidence;
+ DWORD dwError;
+ CTL_CONTEXT *pTrustListContext;
+ BOOL fTrustListSignerCert;
+ PCCTL_CONTEXT pCtlContext;
+ DWORD dwCtlError;
+ BOOL fIsCyclic;
+ PCERT_CHAIN_ELEMENT pChainElement;
+} CRYPT_PROVIDER_CERT, *PCRYPT_PROVIDER_CERT;
+
+#define CERT_CONFIDENCE_SIG 0x10000000
+#define CERT_CONFIDENCE_TIME 0x01000000
+#define CERT_CONFIDENCE_TIMENEST 0x00100000
+#define CERT_CONFIDENCE_AUTHIDEXT 0x00010000
+#define CERT_CONFIDENCE_HYGIENE 0x00001000
+#define CERT_CONFIDENCE_HIGHEST 0x11111000
+
+typedef struct _CRYPT_PROVIDER_SGNR {
+ DWORD cbStruct;
+ FILETIME sftVerifyAsOf;
+ DWORD csCertChain;
+ CRYPT_PROVIDER_CERT *pasCertChain;
+ DWORD dwSignerType;
+ CMSG_SIGNER_INFO *psSigner;
+ DWORD dwError;
+ DWORD csCounterSigners;
+ struct _CRYPT_PROVIDER_SGNR *pasCounterSigners;
+ PCCERT_CHAIN_CONTEXT pChainContext;
+} CRYPT_PROVIDER_SGNR, *PCRYPT_PROVIDER_SGNR;
+
+#define SGNR_TYPE_TIMESTAMP 0x00000010
+
+typedef struct _CRYPT_PROVIDER_PRIVDATA {
+ DWORD cbStruct;
+ GUID gProviderID;
+ DWORD cbProvData;
+ void *pvProvData;
+} CRYPT_PROVIDER_PRIVDATA, *PCRYPT_PROVIDER_PRIVDATA;
+
+struct _CRYPT_PROVIDER_DATA;
+
+#define TRUSTERROR_STEP_WVTPARAMS 0
+#define TRUSTERROR_STEP_FILEIO 2
+#define TRUSTERROR_STEP_SIP 3
+#define TRUSTERROR_STEP_SIPSUBJINFO 5
+#define TRUSTERROR_STEP_CATALOGFILE 6
+#define TRUSTERROR_STEP_CERTSTORE 7
+#define TRUSTERROR_STEP_MESSAGE 8
+#define TRUSTERROR_STEP_MSG_SIGNERCOUNT 9
+#define TRUSTERROR_STEP_MSG_INNERCNTTYPE 10
+#define TRUSTERROR_STEP_MSG_INNERCNT 11
+#define TRUSTERROR_STEP_MSG_STORE 12
+#define TRUSTERROR_STEP_MSG_SIGNERINFO 13
+#define TRUSTERROR_STEP_MSG_SIGNERCERT 14
+#define TRUSTERROR_STEP_MSG_CERTCHAIN 15
+#define TRUSTERROR_STEP_MSG_COUNTERSIGINFO 16
+#define TRUSTERROR_STEP_MSG_COUNTERSIGCERT 17
+#define TRUSTERROR_STEP_VERIFY_MSGHASH 18
+#define TRUSTERROR_STEP_VERIFY_MSGINDIRECTDATA 19
+#define TRUSTERROR_STEP_FINAL_WVTINIT 30
+#define TRUSTERROR_STEP_FINAL_INITPROV 31
+#define TRUSTERROR_STEP_FINAL_OBJPROV 32
+#define TRUSTERROR_STEP_FINAL_SIGPROV 33
+#define TRUSTERROR_STEP_FINAL_CERTPROV 34
+#define TRUSTERROR_STEP_FINAL_CERTCHKPROV 35
+#define TRUSTERROR_STEP_FINAL_POLICYPROV 36
+#define TRUSTERROR_STEP_FINAL_UIPROV 37
+
+#define TRUSTERROR_MAX_STEPS 38
+
+typedef void * (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CPD_MEM_ALLOC)(DWORD cbSize);
+typedef void (WINAPI *PFN_CPD_MEM_FREE)(void *pvMem2Free);
+typedef BOOL (WINAPI *PFN_CPD_ADD_STORE)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ HCERTSTORE hStore2Add);
+typedef BOOL (WINAPI *PFN_CPD_ADD_SGNR)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ BOOL fCounterSigner, DWORD idxSigner, struct _CRYPT_PROVIDER_SGNR *pSgnr2Add);
+typedef BOOL (WINAPI *PFN_CPD_ADD_CERT)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner,
+ PCCERT_CONTEXT pCert2Add);
+typedef BOOL (WINAPI *PFN_CPD_ADD_PRIVDATA)(struct _CRYPT_PROVIDER_DATA *pProvData,
+ struct _CRYPT_PROVIDER_PRIVDATA *pPrivData2Add);
+typedef HRESULT (WINAPI *PFN_PROVIDER_INIT_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_OBJTRUST_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_SIGTRUST_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_CERTTRUST_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_FINALPOLICY_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_TESTFINALPOLICY_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef HRESULT (WINAPI *PFN_PROVIDER_CLEANUP_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+typedef BOOL (WINAPI *PFN_PROVIDER_CERTCHKPOLICY_CALL)(
+ struct _CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner,
+ BOOL fCounterSignerChain, DWORD idxCounterSigner);
+
+typedef struct _CRYPT_PROVIDER_FUNCTIONS {
+ DWORD cbStruct;
+ PFN_CPD_MEM_ALLOC pfnAlloc;
+ PFN_CPD_MEM_FREE pfnFree;
+ PFN_CPD_ADD_STORE pfnAddStore2Chain;
+ PFN_CPD_ADD_SGNR pfnAddSgnr2Chain;
+ PFN_CPD_ADD_CERT pfnAddCert2Chain;
+ PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain;
+ PFN_PROVIDER_INIT_CALL pfnInitialize;
+ PFN_PROVIDER_OBJTRUST_CALL pfnObjectTrust;
+ PFN_PROVIDER_SIGTRUST_CALL pfnSignatureTrust;
+ PFN_PROVIDER_CERTTRUST_CALL pfnCertificateTrust;
+ PFN_PROVIDER_FINALPOLICY_CALL pfnFinalPolicy;
+ PFN_PROVIDER_CERTCHKPOLICY_CALL pfnCertCheckPolicy;
+ PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy;
+ struct _CRYPT_PROVUI_FUNCS *psUIpfns;
+ PFN_PROVIDER_CLEANUP_CALL pfnCleanupPolicy;
+} CRYPT_PROVIDER_FUNCTIONS, *PCRYPT_PROVIDER_FUNCTIONS;
+
+struct SIP_DISPATCH_INFO_;
+struct SIP_SUBJECTINFO_;
+struct SIP_INDIRECT_DATA_;
+
+typedef struct _PROVDATA_SIP {
+ DWORD cbStruct;
+ GUID gSubject;
+ struct SIP_DISPATCH_INFO_ *pSip;
+ struct SIP_DISPATCH_INFO_ *pCATSip;
+ struct SIP_SUBJECTINFO_ *psSipSubjectInfo;
+ struct SIP_SUBJECTINFO_ *psSipCATSubjectInfo;
+ struct SIP_INDIRECT_DATA_ *psIndirectData;
+} PROVDATA_SIP, *PPROVDATA_SIP;
+
+typedef struct _CRYPT_PROVIDER_DATA {
+ DWORD cbStruct;
+ WINTRUST_DATA *pWintrustData;
+ BOOL fOpenedFile;
+ HWND hWndParent;
+ GUID *pgActionID;
+ HCRYPTPROV hProv;
+ DWORD dwError;
+ DWORD dwRegSecuritySettings;
+ DWORD dwRegPolicySettings;
+ CRYPT_PROVIDER_FUNCTIONS *psPfns;
+ DWORD cdwTrustStepErrors;
+ DWORD *padwTrustStepErrors;
+ DWORD chStores;
+ HCERTSTORE *pahStores;
+ DWORD dwEncoding;
+ HCRYPTMSG hMsg;
+ DWORD csSigners;
+ CRYPT_PROVIDER_SGNR *pasSigners;
+ DWORD csProvPrivData;
+ CRYPT_PROVIDER_PRIVDATA *pasProvPrivData;
+ DWORD dwSubjectChoice;
+ union {
+ struct _PROVDATA_SIP *pPDSip;
+ } DUMMYUNIONNAME;
+ char *pszUsageOID;
+ BOOL fRecallWithState;
+ FILETIME sftSystemTime;
+ char *pszCTLSignerUsageOID;
+ DWORD dwProvFlags;
+ DWORD dwFinalError;
+ PCERT_USAGE_MATCH pRequestUsage;
+ DWORD dwTrustPubSettings;
+ DWORD dwUIStateFlags;
+} CRYPT_PROVIDER_DATA, *PCRYPT_PROVIDER_DATA;
+
+#define CPD_CHOICE_SIP 1
+
+#define CPD_USE_NT5_CHAIN_FLAG 0x80000000
+#define CPD_REVOCATION_CHECK_NONE 0x00010000
+#define CPD_REVOCATION_CHECK_END_CERT 0x00020000
+#define CPD_REVOCATION_CHECK_CHAIN 0x00040000
+#define CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00080000
+
+#define CPD_UISTATE_MODE_PROMPT 0x00000000
+#define CPD_UISTATE_MODE_BLOCK 0x00000001
+#define CPD_UISTATE_MODE_ALLOW 0x00000002
+#define CPD_UISTATE_MODE_MASK 0x00000003
+
+typedef BOOL (*PFN_PROVUI_CALL)(HWND hWndSecurityDialog,
+ struct _CRYPT_PROVIDER_DATA *pProvData);
+
+typedef struct _CRYPT_PROVUI_FUNCS {
+ DWORD cbStruct;
+ CRYPT_PROVUI_DATA psUIData;
+ PFN_PROVUI_CALL pfnOnMoreInfoClick;
+ PFN_PROVUI_CALL pfnOnMoreInfoClickDefault;
+ PFN_PROVUI_CALL pfnOnAdvancedClick;
+ PFN_PROVUI_CALL pfnOnAdvancedClickDefault;
+} CRYPT_PROVUI_FUNCS, *PCRYPT_PROVUI_FUNCS;
+
+#include <poppack.h>
+
+#define WVT_OFFSETOF(t,f) ((ULONG)((ULONG_PTR)(&((t*)0)->f)))
+#define WVT_ISINSTRUCT(t,s,f) (WVT_OFFSETOF(t,f) + sizeof(((t*)0)->f) <= (s))
+#define WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(t,s,f) WVT_ISINSTRUCT(t,s,f)
+
+#define WTPF_TRUSTTEST 0x00000020
+#define WTPF_TESTCANBEVALID 0x00000080
+#define WTPF_IGNOREEXPIRATION 0x00000100
+#define WTPF_IGNOREREVOKATION 0x00000200
+#define WTPF_OFFLINEOK_IND 0x00000400
+#define WTPF_OFFLINEOK_COM 0x00000800
+#define WTPF_OFFLINEOKNBU_IND 0x00001000
+#define WTPF_OFFLINEOKNBU_COM 0x00002000
+#define WTPF_VERIFY_V1_OFF 0x00010000
+#define WTPF_IGNOREREVOCATIONONTS 0x00020000
+#define WTPF_ALLOWONLYPERTRUST 0x00040000
+
+#define WT_ADD_ACTION_ID_RET_RESULT_FLAG 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__GNUC__)
+#define WT_PROVIDER_CERTTRUST_FUNCTION (const WCHAR []) \
+ {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
+#elif defined(_MSC_VER)
+#define WT_PROVIDER_CERTTRUST_FUNCTION L"WintrustCertificateTrust"
+#else
+static const WCHAR WT_PROVIDER_CERTTRUST_FUNCTION[] =
+ {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
+#endif
+
+BOOL WINAPI WintrustAddActionID(GUID*,DWORD,CRYPT_REGISTER_ACTIONID*);
+BOOL WINAPI WintrustRemoveActionID(GUID*);
+BOOL WINAPI WintrustLoadFunctionPointers(GUID*,CRYPT_PROVIDER_FUNCTIONS*);
+BOOL WINAPI WintrustAddDefaultForUsage(const char*,CRYPT_PROVIDER_REGDEFUSAGE*);
+void WINAPI WintrustGetRegPolicyFlags(DWORD*);
+BOOL WINAPI WintrustSetRegPolicyFlags(DWORD);
+LONG WINAPI WinVerifyTrust(HWND,GUID*,LPVOID);
+HRESULT WINAPI WinVerifyTrustEx(HWND,GUID*,WINTRUST_DATA*);
+
+CRYPT_PROVIDER_CERT * WINAPI WTHelperGetProvCertFromChain(
+ CRYPT_PROVIDER_SGNR *pSgnr, DWORD idxCert);
+CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain(
+ CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,
+ DWORD idxCounterSigner);
+CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData);
+CRYPT_PROVIDER_PRIVDATA * WINAPI WTHelperGetProvPrivateDataFromChain(CRYPT_PROVIDER_DATA *,GUID *);
+
+#define SPC_INDIRECT_DATA_OBJID "1.3.6.1.4.1.311.2.1.4"
+#define SPC_SP_AGENCY_INFO_OBJID "1.3.6.1.4.1.311.2.1.10"
+#define SPC_STATEMENT_TYPE_OBJID "1.3.6.1.4.1.311.2.1.11"
+#define SPC_SP_OPUS_INFO_OBJID "1.3.6.1.4.1.311.2.1.12"
+#define SPC_CERT_EXTENSIONS_OBJID "1.3.6.1.4.1.311.2.1.14"
+#define SPC_PE_IMAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.15"
+#define SPC_RAW_FILE_DATA_OBJID "1.3.6.1.4.1.311.2.1.18"
+#define SPC_STRUCTURED_STORAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.19"
+#define SPC_JAVA_CLASS_DATA_OBJID "1.3.6.1.4.1.311.2.1.20"
+#define SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.21"
+#define SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.22"
+#define SPC_CAB_DATA_OBJID "1.3.6.1.4.1.311.2.1.25"
+#define SPC_GLUE_RDN_OBJID "1.3.6.1.4.1.311.2.1.25"
+#define SPC_MINIMAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.26"
+#define SPC_FINANCIAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.27"
+#define SPC_LINK_OBJID "1.3.6.1.4.1.311.2.1.28"
+#define SPC_SIGINFO_OBJID "1.3.6.1.4.1.311.2.1.30"
+#define CAT_NAMEVALUE_OBJID "1.3.6.1.4.1.311.12.2.1"
+#define CAT_MEMBERINFO_OBJID "1.3.6.1.4.1.311.12.2.2"
+
+#define SPC_SP_AGENCY_INFO_STRUCT ((LPCSTR) 2000)
+#define SPC_MINIMAL_CRITERIA_STRUCT ((LPCSTR) 2001)
+#define SPC_FINANCIAL_CRITERIA_STRUCT ((LPCSTR) 2002)
+#define SPC_INDIRECT_DATA_CONTENT_STRUCT ((LPCSTR) 2003)
+#define SPC_PE_IMAGE_DATA_STRUCT ((LPCSTR) 2004)
+#define SPC_LINK_STRUCT ((LPCSTR) 2005)
+#define SPC_STATEMENT_TYPE_STRUCT ((LPCSTR) 2006)
+#define SPC_SP_OPUS_INFO_STRUCT ((LPCSTR) 2007)
+#define SPC_CAB_DATA_STRUCT ((LPCSTR) 2008)
+#define SPC_JAVA_CLASS_DATA_STRUCT ((LPCSTR) 2009)
+#define SPC_SIGINFO_STRUCT ((LPCSTR) 2130)
+#define CAT_NAMEVALUE_STRUCT ((LPCSTR) 2221)
+#define CAT_MEMBERINFO_STRUCT ((LPCSTR) 2222)
+
+#define SPC_UUID_LENGTH 16
+typedef BYTE SPC_UUID[SPC_UUID_LENGTH];
+
+typedef struct _SPC_SERIALIZED_OBJECT
+{
+ SPC_UUID ClassId;
+ CRYPT_DATA_BLOB SerializedData;
+} SPC_SERIALIZED_OBJECT, *PSPC_SERIALIZED_OBJECT;
+
+typedef struct SPC_SIGINFO_
+{
+ DWORD dwSipVersion;
+ GUID gSIPGuid;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ DWORD dwReserved3;
+ DWORD dwReserved4;
+ DWORD dwReserved5;
+} SPC_SIGINFO, *PSPC_SIGINFO;
+
+#define SPC_URL_LINK_CHOICE 1
+#define SPC_MONIKER_LINK_CHOICE 2
+#define SPC_FILE_LINK_CHOICE 3
+
+typedef struct SPC_LINK_
+{
+ DWORD dwLinkChoice;
+ union
+ {
+ LPWSTR pwszUrl;
+ SPC_SERIALIZED_OBJECT Moniker;
+ LPWSTR pwszFile;
+ } DUMMYUNIONNAME;
+} SPC_LINK, *PSPC_LINK;
+
+typedef struct _SPC_PE_IMAGE_DATA
+{
+ CRYPT_BIT_BLOB Flags;
+ PSPC_LINK pFile;
+} SPC_PE_IMAGE_DATA, *PSPC_PE_IMAGE_DATA;
+
+typedef struct _SPC_INDIRECT_DATA_CONTENT
+{
+ CRYPT_ATTRIBUTE_TYPE_VALUE Data;
+ CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
+ CRYPT_HASH_BLOB Digest;
+} SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT;
+
+typedef struct _SPC_FINANCIAL_CRITERIA
+{
+ BOOL fFinancialInfoAvailable;
+ BOOL fMeetsCriteria;
+} SPC_FINANCIAL_CRITERIA, *PSPC_FINANCIAL_CRITERIA;
+
+typedef struct _SPC_IMAGE
+{
+ struct SPC_LINK_ *pImageLink;
+ CRYPT_DATA_BLOB Bitmap;
+ CRYPT_DATA_BLOB Metafile;
+ CRYPT_DATA_BLOB EnhancedMetafile;
+ CRYPT_DATA_BLOB GifFile;
+} SPC_IMAGE, *PSPC_IMAGE;
+
+typedef struct _SPC_SP_AGENCY_INFO
+{
+ struct SPC_LINK_ *pPolicyInformation;
+ LPWSTR pwszPolicyDisplayText;
+ PSPC_IMAGE pLogoImage;
+ struct SPC_LINK_ *pLogoLink;
+} SPC_SP_AGENCY_INFO, *PSPC_SP_AGENCY_INFO;
+
+typedef struct _SPC_STATEMENT_TYPE
+{
+ DWORD cKeyPurposeId;
+ LPSTR *rgpszKeyPurposeId;
+} SPC_STATEMENT_TYPE, *PSPC_STATEMENT_TYPE;
+
+typedef struct _SPC_SP_OPUS_INFO
+{
+ LPCWSTR pwszProgramName;
+ struct SPC_LINK_ *pMoreInfo;
+ struct SPC_LINK_ *pPublisherInfo;
+} SPC_SP_OPUS_INFO, *PSPC_SP_OPUS_INFO;
+
+typedef struct _CAT_NAMEVALUE
+{
+ LPWSTR pwszTag;
+ DWORD fdwFlags;
+ CRYPT_DATA_BLOB Value;
+} CAT_NAMEVALUE, *PCAT_NAMEVALUE;
+
+typedef struct _CAT_MEMBERINFO
+{
+ LPWSTR pwszSubjGuid;
+ DWORD dwCertVersion;
+} CAT_MEMBERINFO, *PCAT_MEMBERINFO;
+
+/* PSDK protects the remaining defines with WT_DEFINE_ALL_APIS, but it's
+ * defined by default. No need to protect against bad headers from old PSDKs.
+ */
+
+typedef struct _WIN_CERTIFICATE {
+ DWORD dwLength;
+ WORD wRevision; /* WIN_CERT_REVISION_xxx */
+ WORD wCertificateType; /* WIN_CERT_TYPE_xxx */
+ BYTE bCertificate[ANYSIZE_ARRAY];
+} WIN_CERTIFICATE, *LPWIN_CERTIFICATE;
+
+#define WIN_CERT_REVISION_1_0 0x0100
+#define WIN_CERT_REVISION_2_0 0x0200
+
+#define WIN_CERT_TYPE_X509 0x0001 /* X.509 Certificate */
+#define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */
+#define WIN_CERT_TYPE_RESERVED_1 0x0003 /* Reserved */
+#define WIN_CERT_TYPE_TS_STACK_SIGNED 0x0004
+
+typedef LPVOID WIN_TRUST_SUBJECT;
+
+typedef struct _WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT
+{
+ HANDLE hClientToken;
+ GUID *SubjectType;
+ WIN_TRUST_SUBJECT Subject;
+} WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT,
+ *LPWIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT;
+
+typedef struct _WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY
+{
+ GUID *SubjectType;
+ WIN_TRUST_SUBJECT Subject;
+} WIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY,
+ *LPWIN_TRUST_ACTDATA_CONTEXT_SUBJECT_ONLY;
+
+typedef struct _WIN_TRUST_SUBJECT_FILE
+{
+ HANDLE hFile;
+ LPCWSTR lpPath;
+} WIN_TRUST_SUBJECT_FILE, *LPWIN_TRUST_SUBJECT_FILE;
+
+typedef struct _WIN_TRUST_SUBJECT_FILE_AND_DISPLAY
+{
+ HANDLE hFile;
+ LPCWSTR lpPath;
+ LPCWSTR lpDisplayName;
+} WIN_TRUST_SUBJECT_FILE_AND_DISPLAY, *LPWIN_TRUST_SUBJECT_FILE_AND_DISPLAY;
+
+#define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE \
+ { 0x64b9d180, 0x8da2, 0x11cf, { 0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb }}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h
new file mode 100644
index 00000000..a3f6f342
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.h
@@ -0,0 +1,4043 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINUSER_
+#define _WINUSER_
+
+#if !defined(_USER32_)
+#define WINUSERAPI DECLSPEC_IMPORT
+#else
+#define WINUSERAPI
+#endif
+
+#ifndef RC_INVOKED
+#include <stdarg.h>
+#endif
+#include <winuser.rh>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define a bunch of callback types */
+
+#if defined(STRICT)
+typedef INT_PTR (CALLBACK *DLGPROC)(HWND,UINT,WPARAM,LPARAM);
+typedef BOOL (CALLBACK *DRAWSTATEPROC)(HDC,LPARAM,WPARAM,int,int);
+typedef INT (CALLBACK *EDITWORDBREAKPROCA)(LPSTR,INT,INT,INT);
+typedef INT (CALLBACK *EDITWORDBREAKPROCW)(LPWSTR,INT,INT,INT);
+typedef BOOL (CALLBACK *GRAYSTRINGPROC)(HDC,LPARAM,INT);
+typedef LRESULT (CALLBACK *HOOKPROC)(INT,WPARAM,LPARAM);
+typedef BOOL (CALLBACK *NAMEENUMPROCA)(LPSTR,LPARAM);
+typedef BOOL (CALLBACK *NAMEENUMPROCW)(LPWSTR,LPARAM);
+typedef BOOL (CALLBACK *PROPENUMPROCA)(HWND,LPCSTR,HANDLE);
+typedef BOOL (CALLBACK *PROPENUMPROCW)(HWND,LPCWSTR,HANDLE);
+typedef BOOL (CALLBACK *PROPENUMPROCEXA)(HWND,LPSTR,HANDLE,ULONG_PTR);
+typedef BOOL (CALLBACK *PROPENUMPROCEXW)(HWND,LPWSTR,HANDLE,ULONG_PTR);
+typedef VOID (CALLBACK *SENDASYNCPROC)(HWND,UINT,ULONG_PTR,LRESULT);
+typedef VOID (CALLBACK *TIMERPROC)(HWND,UINT,UINT_PTR,DWORD);
+typedef VOID (CALLBACK *WINEVENTPROC)(HWINEVENTHOOK,DWORD,HWND,LONG,LONG,
+ DWORD,DWORD);
+typedef BOOL (CALLBACK *WNDENUMPROC)(HWND,LPARAM);
+
+#else
+typedef FARPROC DLGPROC;
+typedef FARPROC DRAWSTATEPROC;
+typedef FARPROC EDITWORDBREAKPROCA;
+typedef FARPROC EDITWORDBREAKPROCW;
+typedef FARPROC GRAYSTRINGPROC;
+typedef FARPROC HOOKPROC;
+typedef FARPROC NAMEENUMPROCA;
+typedef FARPROC NAMEENUMPROCW;
+typedef FARPROC PROPENUMPROCA;
+typedef FARPROC PROPENUMPROCW;
+typedef FARPROC PROPENUMPROCEXA;
+typedef FARPROC PROPENUMPROCEXW;
+typedef FARPROC SENDASYNCPROC;
+typedef FARPROC TIMERPROC;
+typedef FARPROC WINEVENTPROC;
+typedef FARPROC WNDENUMPROC;
+#endif /* STRICT */
+
+typedef NAMEENUMPROCA WINSTAENUMPROCA;
+typedef NAMEENUMPROCA DESKTOPENUMPROCA;
+typedef NAMEENUMPROCW WINSTAENUMPROCW;
+typedef NAMEENUMPROCW DESKTOPENUMPROCW;
+
+typedef LRESULT (CALLBACK *WNDPROC)(HWND,UINT,WPARAM,LPARAM);
+
+DECL_WINELIB_TYPE_AW(DESKTOPENUMPROC)
+DECL_WINELIB_TYPE_AW(EDITWORDBREAKPROC)
+DECL_WINELIB_TYPE_AW(NAMEENUMPROC)
+DECL_WINELIB_TYPE_AW(PROPENUMPROC)
+DECL_WINELIB_TYPE_AW(PROPENUMPROCEX)
+DECL_WINELIB_TYPE_AW(WINSTAENUMPROC)
+
+
+typedef HANDLE HDWP;
+
+#define UOI_FLAGS 1
+#define UOI_NAME 2
+#define UOI_TYPE 3
+#define UOI_USER_SID 4
+
+#define WSF_VISIBLE 1
+#define DF_ALLOWOTHERACCOUNTHOOK 1
+
+typedef struct tagUSEROBJECTFLAGS {
+ BOOL fInherit;
+ BOOL fReserved;
+ DWORD dwFlags;
+} USEROBJECTFLAGS, *PUSEROBJECTFLAGS;
+
+typedef struct tagBSMINFO {
+ UINT cbSize;
+ HDESK hdesk;
+ HWND hwnd;
+ LUID luid;
+} BSMINFO, *PBSMINFO;
+
+/* Window stations */
+#define WINSTA_ENUMDESKTOPS 0x0001
+#define WINSTA_READATTRIBUTES 0x0002
+#define WINSTA_ACCESSCLIPBOARD 0x0004
+#define WINSTA_CREATEDESKTOP 0x0008
+#define WINSTA_WRITEATTRIBUTES 0x0010
+#define WINSTA_ACCESSGLOBALATOMS 0x0020
+#define WINSTA_EXITWINDOWS 0x0040
+#define WINSTA_ENUMERATE 0x0100
+#define WINSTA_READSCREEN 0x0200
+#define WINSTA_ALL_ACCESS 0x037f
+
+/* Desktops */
+#define DESKTOP_READOBJECTS 0x0001
+#define DESKTOP_CREATEWINDOW 0x0002
+#define DESKTOP_CREATEMENU 0x0004
+#define DESKTOP_HOOKCONTROL 0x0008
+#define DESKTOP_JOURNALRECORD 0x0010
+#define DESKTOP_JOURNALPLAYBACK 0x0020
+#define DESKTOP_ENUMERATE 0x0040
+#define DESKTOP_WRITEOBJECTS 0x0080
+#define DESKTOP_SWITCHDESKTOP 0x0100
+
+
+/* flags for FILTERKEYS dwFlags field */
+#define FKF_AVAILABLE 0x00000002
+#define FKF_CLICKON 0x00000040
+#define FKF_FILTERKEYSON 0x00000001
+#define FKF_HOTKEYACTIVE 0x00000004
+#define FKF_HOTKEYSOUND 0x00000010
+#define FKF_CONFIRMHOTKEY 0x00000008
+#define FKF_INDICATOR 0x00000020
+
+typedef struct tagFILTERKEYS
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iWaitMSec;
+ DWORD iDelayMSec;
+ DWORD iRepeatMSec;
+ DWORD iBounceMSec;
+} FILTERKEYS, *LPFILTERKEYS;
+
+/* flags for TOGGLEKEYS dwFlags field */
+#define TKF_AVAILABLE 0x00000002
+#define TKF_CONFIRMHOTKEY 0x00000008
+#define TKF_HOTKEYACTIVE 0x00000004
+#define TKF_HOTKEYSOUND 0x00000010
+#define TKF_TOGGLEKEYSON 0x00000001
+
+typedef struct tagTOGGLEKEYS
+{
+ DWORD cbSize;
+ DWORD dwFlags;
+} TOGGLEKEYS, *LPTOGGLEKEYS;
+
+/* flags for MOUSEKEYS dwFlags field */
+#define MKF_AVAILABLE 0x00000002
+#define MKF_CONFIRMHOTKEY 0x00000008
+#define MKF_HOTKEYACTIVE 0x00000004
+#define MKF_HOTKEYSOUND 0x00000010
+#define MKF_INDICATOR 0x00000020
+#define MKF_MOUSEKEYSON 0x00000001
+#define MKF_MODIFIERS 0x00000040
+#define MKF_REPLACENUMBERS 0x00000080
+
+typedef struct tagMOUSEKEYS
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iMaxSpeed;
+ DWORD iTimeToMaxSpeed;
+ DWORD iCtrlSpeed;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} MOUSEKEYS, *LPMOUSEKEYS;
+
+/* struct and defines for GetMouseMovePointsEx */
+#define GMMP_USE_DISPLAY_POINTS 1
+#define GMMP_USE_HIGH_RESOLUTION_POINTS 2
+
+typedef struct tagMOUSEMOVEPOINT {
+ int x;
+ int y;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MOUSEMOVEPOINT,*PMOUSEMOVEPOINT,*LPMOUSEMOVEPOINT;
+
+/* flags for STICKYKEYS dwFlags field */
+#define SKF_AUDIBLEFEEDBACK 0x00000040
+#define SKF_AVAILABLE 0x00000002
+#define SKF_CONFIRMHOTKEY 0x00000008
+#define SKF_HOTKEYACTIVE 0x00000004
+#define SKF_HOTKEYSOUND 0x00000010
+#define SKF_INDICATOR 0x00000020
+#define SKF_STICKYKEYSON 0x00000001
+#define SKF_TRISTATE 0x00000080
+#define SKF_TWOKEYSOFF 0x00000100
+
+typedef struct tagSTICKYKEYS
+{
+ DWORD cbSize;
+ DWORD dwFlags;
+} STICKYKEYS, *LPSTICKYKEYS;
+
+/* flags for ACCESSTIMEOUT dwFlags field */
+#define ATF_ONOFFFEEDBACK 0x00000002
+#define ATF_AVAILABLE 0x00000004
+#define ATF_TIMEOUTON 0x00000001
+
+typedef struct tagACCESSTIMEOUT
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iTimeOutMSec;
+} ACCESSTIMEOUT, *LPACCESSTIMEOUT;
+
+/* flags for SERIALKEYS dwFlags field */
+#define SERKF_ACTIVE 0x00000008
+#define SERKF_AVAILABLE 0x00000002
+#define SERKF_INDICATOR 0x00000004
+#define SERKF_SERIALKEYSON 0x00000001
+
+typedef struct tagSERIALKEYSA
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ LPSTR lpszActivePort;
+ LPSTR lpszPort;
+ UINT iBaudRate;
+ UINT iPortState;
+ UINT iActive;
+} SERIALKEYSA, *LPSERIALKEYSA;
+
+typedef struct tagSERIALKEYSW {
+ UINT cbSize;
+ DWORD dwFlags;
+ LPWSTR lpszActivePort;
+ LPWSTR lpszPort;
+ UINT iBaudRate;
+ UINT iPortState;
+ UINT iActive;
+} SERIALKEYSW,*LPSERIALKEYSW;
+
+DECL_WINELIB_TYPE_AW(SERIALKEYS)
+DECL_WINELIB_TYPE_AW(LPSERIALKEYS)
+
+/* flags for SOUNDSENTRY dwFlags field */
+#define SSF_AVAILABLE 0x00000002
+#define SSF_SOUNDSENTRYON 0x00000001
+
+#define SSTF_BORDER 0x00000002
+#define SSTF_CHARS 0x00000001
+#define SSTF_DISPLAY 0x00000003
+#define SSTF_NONE 0x00000000
+
+#define SSGF_DISPLAY 0x00000003
+#define SSGF_NONE 0x00000000
+
+#define SSWF_DISPLAY 0x00000003
+#define SSWF_NONE 0x00000000
+#define SSWF_TITLE 0x00000001
+#define SSWF_WINDOW 0x00000002
+
+typedef struct tagSOUNDSENTRYA
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iFSTextEffect;
+ DWORD iFSTextEffectMSec;
+ DWORD iFSTextEffectColorBits;
+ DWORD iFSGrafEffect;
+ DWORD iFSGrafEffectMSec;
+ DWORD iFSGrafEffectColor;
+ DWORD iWindowsEffect;
+ DWORD iWindowsEffectMSec;
+ LPSTR lpszWindowsEffectDLL;
+ DWORD iWindowsEffectOrdinal;
+} SOUNDSENTRYA, *LPSOUNDSENTRYA;
+
+typedef struct tagSOUNDSENTRYW
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iFSTextEffect;
+ DWORD iFSTextEffectMSec;
+ DWORD iFSTextEffectColorBits;
+ DWORD iFSGrafEffect;
+ DWORD iFSGrafEffectMSec;
+ DWORD iFSGrafEffectColor;
+ DWORD iWindowsEffect;
+ DWORD iWindowsEffectMSec;
+ LPWSTR lpszWindowsEffectDLL;
+ DWORD iWindowsEffectOrdinal;
+} SOUNDSENTRYW, *LPSOUNDSENTRYW;
+
+DECL_WINELIB_TYPE_AW(SOUNDSENTRY)
+DECL_WINELIB_TYPE_AW(LPSOUNDSENTRY)
+
+/* flags for HIGHCONTRAST dwFlags field */
+#define HCF_HIGHCONTRASTON 0x00000001
+#define HCF_AVAILABLE 0x00000002
+#define HCF_HOTKEYACTIVE 0x00000004
+#define HCF_CONFIRMHOTKEY 0x00000008
+#define HCF_HOTKEYSOUND 0x00000010
+#define HCF_INDICATOR 0x00000020
+#define HCF_HOTKEYAVAILABLE 0x00000040
+
+typedef struct tagHIGHCONTRASTA
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ LPSTR lpszDefaultScheme;
+} HIGHCONTRASTA, *LPHIGHCONTRASTA;
+
+typedef struct tagHIGHCONTRASTW
+{
+ UINT cbSize;
+ DWORD dwFlags;
+ LPWSTR lpszDefaultScheme;
+} HIGHCONTRASTW, *LPHIGHCONTRASTW;
+
+DECL_WINELIB_TYPE_AW(HIGHCONTRAST)
+DECL_WINELIB_TYPE_AW(LPHIGHCONTRAST)
+
+typedef struct tagEVENTMSG
+{
+ UINT message;
+ UINT paramL;
+ UINT paramH;
+ DWORD time;
+ HWND hwnd;
+} EVENTMSG, *PEVENTMSG, *LPEVENTMSG;
+
+/* WH_KEYBOARD_LL structure */
+typedef struct tagKBDLLHOOKSTRUCT
+{
+ DWORD vkCode;
+ DWORD scanCode;
+ DWORD flags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} KBDLLHOOKSTRUCT, *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
+
+#define LLKHF_EXTENDED (KF_EXTENDED >> 8)
+#define LLKHF_INJECTED 0x00000010
+#define LLKHF_ALTDOWN (KF_ALTDOWN >> 8)
+#define LLKHF_UP (KF_UP >> 8)
+
+/* WH_MOUSE_LL structure */
+typedef struct tagMSLLHOOKSTRUCT
+{
+ POINT pt;
+ DWORD mouseData;
+ DWORD flags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MSLLHOOKSTRUCT, *LPMSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;
+
+#define LLMHF_INJECTED 0x00000001
+
+ /* Mouse hook structure */
+
+typedef struct
+{
+ POINT pt;
+ HWND hwnd;
+ UINT wHitTestCode;
+ ULONG_PTR dwExtraInfo;
+} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;
+
+
+ /* Hardware hook structure */
+
+typedef struct
+{
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+} HARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT;
+
+
+ /* Debug hook structure */
+
+typedef struct tagDEBUGHOOKINFO
+{
+ DWORD idThread;
+ DWORD idThreadInstaller;
+ LPARAM lParam;
+ WPARAM wParam;
+ INT code;
+} DEBUGHOOKINFO, *PDEBUGHOOKINFO, *LPDEBUGHOOKINFO;
+
+#define HKL_PREV 0
+#define HKL_NEXT 1
+
+#define KLF_ACTIVATE 0x00000001
+#define KLF_SUBSTITUTE_OK 0x00000002
+#define KLF_UNLOADPREVIOUS 0x00000004
+#define KLF_REORDER 0x00000008
+#define KLF_REPLACELANG 0x00000010
+#define KLF_NOTELLSHELL 0x00000080
+#define KLF_SETFORPROCESS 0x00000100
+#define KLF_SHIFTLOCK 0x00010000
+#define KLF_RESET 0x40000000
+
+#define KL_NAMELENGTH 9
+
+typedef struct tagMOUSEINPUT
+{
+ LONG dx;
+ LONG dy;
+ DWORD mouseData;
+ DWORD dwFlags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} MOUSEINPUT, *PMOUSEINPUT, *LPMOUSEINPUT;
+
+typedef struct tagKEYBDINPUT
+{
+ WORD wVk;
+ WORD wScan;
+ DWORD dwFlags;
+ DWORD time;
+ ULONG_PTR dwExtraInfo;
+} KEYBDINPUT, *PKEYBDINPUT, *LPKEYBDINPUT;
+
+typedef struct tagHARDWAREINPUT
+{
+ DWORD uMsg;
+ WORD wParamL;
+ WORD wParamH;
+} HARDWAREINPUT, *PHARDWAREINPUT, *LPHARDWAREINPUT;
+
+#define INPUT_MOUSE 0
+#define INPUT_KEYBOARD 1
+#define INPUT_HARDWARE 2
+
+typedef struct tagINPUT
+{
+ DWORD type;
+ union
+ {
+ MOUSEINPUT mi;
+ KEYBDINPUT ki;
+ HARDWAREINPUT hi;
+ } DUMMYUNIONNAME;
+} INPUT, *PINPUT, *LPINPUT;
+
+DECLARE_HANDLE(HRAWINPUT);
+
+typedef struct tagRAWINPUTDEVICELIST
+{
+ HANDLE hDevice;
+ DWORD dwType;
+} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;
+
+typedef struct tagRAWHID {
+ DWORD dwSizeHid;
+ DWORD dwCount;
+ BYTE bRawData;
+} RAWHID, *LPRAWHID;
+
+typedef struct tagRAWKEYBOARD {
+ USHORT MakeCode;
+ USHORT Flags;
+ USHORT Reserved;
+ USHORT VKey;
+ UINT Message;
+ ULONG ExtraInformation;
+} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
+
+typedef struct tagRAWMOUSE {
+ USHORT usFlags;
+ union {
+ ULONG ulButtons;
+ struct {
+ USHORT usButtonFlags;
+ USHORT usButtonData;
+ } DUMMYSTRUCTNAME;
+ } DUMMYUNIONNAME;
+ ULONG ulRawButtons;
+ LONG lLastX;
+ LONG lLastY;
+ ULONG ulExtraInformation;
+} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
+
+typedef struct tagRAWINPUTHEADER {
+ DWORD dwType;
+ DWORD dwSize;
+ HANDLE hDevice;
+ WPARAM wParam;
+} RAWINPUTHEADER, *PRAWINPUTHEADER;
+
+typedef struct tagRAWINPUT {
+ RAWINPUTHEADER header;
+ union {
+ RAWMOUSE mouse;
+ RAWKEYBOARD keyboard;
+ RAWHID hid;
+ } data;
+} RAWINPUT, *PRAWINPUT, *LPRAWINPUT;
+
+typedef struct tagRAWINPUTDEVICE {
+ USHORT usUsagePage;
+ USHORT usUsage;
+ DWORD dwFlags;
+ HWND hwndTarget;
+} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE;
+
+typedef struct tagRID_DEVICE_INFO_MOUSE {
+ DWORD dwId;
+ DWORD dwNumberOfButtons;
+ DWORD dwSampleRate;
+ BOOL fHasHorizontalWheel;
+} RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE;
+
+typedef struct tagRID_DEVICE_INFO_KEYBOARD {
+ DWORD dwType;
+ DWORD dwSubType;
+ DWORD dwKeyboardMode;
+ DWORD dwNumberOfFunctionKeys;
+ DWORD dwNumberOfIndicators;
+ DWORD dwNumberOfKeysTotal;
+} RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD;
+
+typedef struct tagRID_DEVICE_INFO_HID {
+ DWORD dwVendorId;
+ DWORD dwProductId;
+ DWORD dwVersionNumber;
+ USHORT usUsagePage;
+ USHORT usUsage;
+} RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID;
+
+typedef struct tagRID_DEVICE_INFO {
+ DWORD cbSize;
+ DWORD dwType;
+ union {
+ RID_DEVICE_INFO_MOUSE mouse;
+ RID_DEVICE_INFO_KEYBOARD keyboard;
+ RID_DEVICE_INFO_HID hid;
+ } DUMMYUNIONNAME;
+} RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO;
+
+#define GET_RAWINPUT_CODE_WPARAM(wParam) ((wParam) & 0xff)
+
+#define RIM_INPUT 0
+#define RIM_INPUTSINK 1
+
+#define RIM_TYPEMOUSE 0
+#define RIM_TYPEKEYBOARD 1
+#define RIM_TYPEHID 2
+
+#define RI_MOUSE_LEFT_BUTTON_DOWN 0x0001
+#define RI_MOUSE_LEFT_BUTTON_UP 0x0002
+#define RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004
+#define RI_MOUSE_RIGHT_BUTTON_UP 0x0008
+#define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010
+#define RI_MOUSE_MIDDLE_BUTTON_UP 0x0020
+
+#define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP
+#define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP
+#define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN
+#define RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP
+
+#define RI_MOUSE_BUTTON_4_DOWN 0x0040
+#define RI_MOUSE_BUTTON_4_UP 0x0080
+#define RI_MOUSE_BUTTON_5_DOWN 0x0100
+#define RI_MOUSE_BUTTON_5_UP 0x0200
+#define RI_MOUSE_WHEEL 0x0400
+#define RI_MOUSE_HORIZONTAL_WHEEL 0x0800
+
+#define MOUSE_MOVE_RELATIVE 0x00
+#define MOUSE_MOVE_ABSOLUTE 0x01
+#define MOUSE_VIRTUAL_DESKTOP 0x02
+#define MOUSE_ATTRIBUTES_CHANGED 0x04
+#define MOUSE_MOVE_NOCOALESCE 0x08
+
+#define KEYBOARD_OVERRUN_MAKE_CODE 0xFF
+
+#define RI_KEY_MAKE 0x00
+#define RI_KEY_BREAK 0x01
+#define RI_KEY_E0 0x02
+#define RI_KEY_E1 0x04
+#define RI_KEY_TERMSRV_SET_LED 0x08
+#define RI_KEY_TERMSRV_SHADOW 0x10
+
+#define RAWINPUT_ALIGN(x) (((x) + sizeof(DWORD_PTR) - 1) & ~(sizeof(DWORD_PTR) - 1))
+#define NEXTRAWINPUTBLOCK(ptr) ((PRAWINPUT)RAWINPUT_ALIGN((ULONG_PTR)((PBYTE)(ptr) + (ptr)->header.dwSize)))
+
+#define RID_INPUT 0x10000003
+#define RID_HEADER 0x10000005
+
+#define RIDI_PREPARSEDDATA 0x20000005
+#define RIDI_DEVICENAME 0x20000007
+#define RIDI_DEVICEINFO 0x2000000b
+
+#define RIDEV_REMOVE 0x00000001
+#define RIDEV_EXCLUDE 0x00000010
+#define RIDEV_PAGEONLY 0x00000020
+#define RIDEV_NOLEGACY 0x00000030
+#define RIDEV_INPUTSINK 0x00000100
+#define RIDEV_CAPTUREMOUSE 0x00000200
+#define RIDEV_NOHOTKEYS 0x00000200
+#define RIDEV_APPKEYS 0x00000400
+#define RIDEV_EXINPUTSINK 0x00001000
+#define RIDEV_DEVNOTIFY 0x00002000
+#define RIDEV_EXMODEMASK 0x000000F0
+
+#define RIDEV_EXMODE(mode) ((mode) & RIDEV_EXMODEMASK)
+
+#define GIDC_ARRIVAL 1
+#define GIDC_REMOVAL 2
+
+#if (_WIN32_WINNT >= 0x0601)
+#define GET_DEVICE_CHANGE_WPARAM(wParam) (LOWORD(wParam))
+#elif (_WIN32_WINNT >= 0x0501)
+#define GET_DEVICE_CHANGE_LPARAM(lParam) (LOWORD(lParam))
+#endif
+
+typedef struct tagGUITHREADINFO
+{
+ DWORD cbSize;
+ DWORD flags;
+ HWND hwndActive;
+ HWND hwndFocus;
+ HWND hwndCapture;
+ HWND hwndMenuOwner;
+ HWND hwndMoveSize;
+ HWND hwndCaret;
+ RECT rcCaret;
+} GUITHREADINFO, *PGUITHREADINFO, *LPGUITHREADINFO;
+
+#define GUI_CARETBLINKING 0x00000001
+#define GUI_INMOVESIZE 0x00000002
+#define GUI_INMENUMODE 0x00000004
+#define GUI_SYSTEMMENUMODE 0x00000008
+#define GUI_POPUPMENUMODE 0x00000010
+#define GUI_16BITTASK 0x00000020
+
+
+/***** Dialogs *****/
+
+/* Gcc on Solaris has a version of this that we don't care about */
+#undef FSHIFT
+
+#define FVIRTKEY TRUE /* Assumed to be == TRUE */
+#define FNOINVERT 0x02
+#define FSHIFT 0x04
+#define FCONTROL 0x08
+#define FALT 0x10
+
+
+typedef struct tagANIMATIONINFO
+{
+ UINT cbSize;
+ INT iMinAnimate;
+} ANIMATIONINFO, *LPANIMATIONINFO;
+
+typedef struct tagNMHDR
+{
+ HWND hwndFrom;
+ UINT_PTR idFrom;
+ UINT code;
+} NMHDR, *LPNMHDR;
+
+typedef struct tagDRAWTEXTPARAMS
+{
+ UINT cbSize;
+ INT iTabLength;
+ INT iLeftMargin;
+ INT iRightMargin;
+ UINT uiLengthDrawn;
+} DRAWTEXTPARAMS,*LPDRAWTEXTPARAMS;
+
+typedef struct
+{
+ LPARAM lParam;
+ WPARAM wParam;
+ UINT message;
+ HWND hwnd;
+} CWPSTRUCT, *PCWPSTRUCT, *LPCWPSTRUCT;
+
+typedef struct
+{
+ LRESULT lResult;
+ LPARAM lParam;
+ WPARAM wParam;
+ DWORD message;
+ HWND hwnd;
+} CWPRETSTRUCT, *PCWPRETSTRUCT, *LPCWPRETSTRUCT;
+
+typedef struct tagWINDOWPLACEMENT
+{
+ UINT length;
+ UINT flags;
+ UINT showCmd;
+ POINT ptMinPosition;
+ POINT ptMaxPosition;
+ RECT rcNormalPosition;
+} WINDOWPLACEMENT, *PWINDOWPLACEMENT, *LPWINDOWPLACEMENT;
+
+
+ /* WINDOWPLACEMENT flags */
+#define WPF_SETMINPOSITION 0x0001
+#define WPF_RESTORETOMAXIMIZED 0x0002
+
+/***** Dialogs *****/
+
+#define IS_INTRESOURCE(x) (((ULONG_PTR)(x) >> 16) == 0)
+#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
+#define MAKEINTRESOURCEW(i) (LPWSTR)((ULONG_PTR)((WORD)(i)))
+
+#ifndef RC_INVOKED
+# ifdef WINE_NO_UNICODE_MACROS /* force using a cast */
+# define MAKEINTRESOURCE(i) ((ULONG_PTR)((WORD)(i)))
+# else
+# define MAKEINTRESOURCE WINELIB_NAME_AW(MAKEINTRESOURCE)
+# endif
+#endif
+
+/* Predefined resource types */
+#define RT_CURSOR MAKEINTRESOURCE(1)
+#define RT_BITMAP MAKEINTRESOURCE(2)
+#define RT_ICON MAKEINTRESOURCE(3)
+#define RT_MENU MAKEINTRESOURCE(4)
+#define RT_DIALOG MAKEINTRESOURCE(5)
+#define RT_STRING MAKEINTRESOURCE(6)
+#define RT_FONTDIR MAKEINTRESOURCE(7)
+#define RT_FONT MAKEINTRESOURCE(8)
+#define RT_ACCELERATOR MAKEINTRESOURCE(9)
+#define RT_RCDATA MAKEINTRESOURCE(10)
+#define RT_MESSAGETABLE MAKEINTRESOURCE(11)
+#define RT_GROUP_CURSOR MAKEINTRESOURCE(12)
+#define RT_GROUP_ICON MAKEINTRESOURCE(14)
+#define RT_VERSION MAKEINTRESOURCE(16)
+#define RT_DLGINCLUDE MAKEINTRESOURCE(17)
+#define RT_PLUGPLAY MAKEINTRESOURCE(19)
+#define RT_VXD MAKEINTRESOURCE(20)
+#define RT_ANICURSOR MAKEINTRESOURCE(21)
+#define RT_ANIICON MAKEINTRESOURCE(22)
+#define RT_HTML MAKEINTRESOURCE(23)
+
+
+ /* cbWndExtra bytes for dialog class */
+#define DLGWINDOWEXTRA 30
+
+
+ /* Dialog messages */
+#define DM_GETDEFID (WM_USER+0)
+#define DM_SETDEFID (WM_USER+1)
+#define DM_REPOSITION (WM_USER+2)
+
+#define DC_HASDEFID 0x534b
+
+/* Bit flags for DRAWITEMSTRUCT.CtlType */
+#define ODT_MENU 1
+#define ODT_LISTBOX 2
+#define ODT_COMBOBOX 3
+#define ODT_BUTTON 4
+#define ODT_STATIC 5
+
+/* Bit flags for DRAWITEMSTRUCT.itemAction */
+#define ODA_DRAWENTIRE 0x1
+#define ODA_SELECT 0x2
+#define ODA_FOCUS 0x4
+
+/* Bit flags for DRAWITEMSTRUCT.itemState */
+#define ODS_SELECTED 0x0001 /* Selected */
+#define ODS_GRAYED 0x0002 /* Grayed (Menus only) */
+#define ODS_DISABLED 0x0004 /* Disabled */
+#define ODS_CHECKED 0x0008 /* Checked (Menus only) */
+#define ODS_FOCUS 0x0010 /* Has focus */
+#define ODS_DEFAULT 0x0020 /* Default */
+#define ODS_HOTLIGHT 0x0040 /* Highlighted when under mouse */
+#define ODS_INACTIVE 0x0080 /* Inactive */
+#define ODS_NOACCEL 0x0100 /* No keyboard accelerator */
+#define ODS_NOFOCUSRECT 0x0200 /* No focus rectangle */
+#define ODS_COMBOBOXEDIT 0x1000 /* Edit of a combo box */
+
+#ifndef NOCOLOR
+
+#define COLOR_SCROLLBAR 0
+#define COLOR_BACKGROUND 1
+#define COLOR_ACTIVECAPTION 2
+#define COLOR_INACTIVECAPTION 3
+#define COLOR_MENU 4
+#define COLOR_WINDOW 5
+#define COLOR_WINDOWFRAME 6
+#define COLOR_MENUTEXT 7
+#define COLOR_WINDOWTEXT 8
+#define COLOR_CAPTIONTEXT 9
+#define COLOR_ACTIVEBORDER 10
+#define COLOR_INACTIVEBORDER 11
+#define COLOR_APPWORKSPACE 12
+#define COLOR_HIGHLIGHT 13
+#define COLOR_HIGHLIGHTTEXT 14
+#define COLOR_BTNFACE 15
+#define COLOR_BTNSHADOW 16
+#define COLOR_GRAYTEXT 17
+#define COLOR_BTNTEXT 18
+#define COLOR_INACTIVECAPTIONTEXT 19
+#define COLOR_BTNHIGHLIGHT 20
+/* win95 colors */
+#define COLOR_3DDKSHADOW 21
+#define COLOR_3DLIGHT 22
+#define COLOR_INFOTEXT 23
+#define COLOR_INFOBK 24
+#define COLOR_DESKTOP COLOR_BACKGROUND
+#define COLOR_3DFACE COLOR_BTNFACE
+#define COLOR_3DSHADOW COLOR_BTNSHADOW
+#define COLOR_3DHIGHLIGHT COLOR_BTNHIGHLIGHT
+#define COLOR_3DHILIGHT COLOR_BTNHIGHLIGHT
+#define COLOR_BTNHILIGHT COLOR_BTNHIGHLIGHT
+/* win98 colors */
+#define COLOR_ALTERNATEBTNFACE 25 /* undocumented, constant name unknown */
+#define COLOR_HOTLIGHT 26
+#define COLOR_GRADIENTACTIVECAPTION 27
+#define COLOR_GRADIENTINACTIVECAPTION 28
+/* win2k/xp colors */
+#define COLOR_MENUHILIGHT 29
+#define COLOR_MENUBAR 30
+
+ /* WM_CTLCOLOR values */
+#define CTLCOLOR_MSGBOX 0
+#define CTLCOLOR_EDIT 1
+#define CTLCOLOR_LISTBOX 2
+#define CTLCOLOR_BTN 3
+#define CTLCOLOR_DLG 4
+#define CTLCOLOR_SCROLLBAR 5
+#define CTLCOLOR_STATIC 6
+
+WINUSERAPI COLORREF WINAPI GetSysColor(INT);
+WINUSERAPI BOOL WINAPI SetSysColors(INT,const INT*,const COLORREF*);
+
+#endif /* NOCOLOR */
+
+/* IMESTATUS type */
+#define EMSIS_COMPOSITIONSTRING 1
+
+/* IMESTATUS type specific data */
+#define EIMES_GETCOMPSTRATONCE 0x0001
+#define EIMES_CANCELCOMPSTRINFOCUS 0x0002
+#define EIMES_COMPLETECOMPSTRKILLFOCUS 0x0004
+
+/* EDITWORDBREAKPROC code values */
+#define WB_LEFT 0
+#define WB_RIGHT 1
+#define WB_ISDELIMITER 2
+
+/* Edit control notification codes */
+#define EN_SETFOCUS 0x0100
+#define EN_KILLFOCUS 0x0200
+#define EN_CHANGE 0x0300
+#define EN_UPDATE 0x0400
+#define EN_ERRSPACE 0x0500
+#define EN_MAXTEXT 0x0501
+#define EN_HSCROLL 0x0601
+#define EN_VSCROLL 0x0602
+
+/* New since win95 : EM_SETMARGIN parameters */
+#define EC_LEFTMARGIN 0x0001
+#define EC_RIGHTMARGIN 0x0002
+#define EC_USEFONTINFO 0xffff
+
+
+ /* GetSystemMetrics() codes */
+#define SM_CXSCREEN 0
+#define SM_CYSCREEN 1
+#define SM_CXVSCROLL 2
+#define SM_CYHSCROLL 3
+#define SM_CYCAPTION 4
+#define SM_CXBORDER 5
+#define SM_CYBORDER 6
+#define SM_CXDLGFRAME 7
+#define SM_CYDLGFRAME 8
+#define SM_CYVTHUMB 9
+#define SM_CXHTHUMB 10
+#define SM_CXICON 11
+#define SM_CYICON 12
+#define SM_CXCURSOR 13
+#define SM_CYCURSOR 14
+#define SM_CYMENU 15
+#define SM_CXFULLSCREEN 16
+#define SM_CYFULLSCREEN 17
+#define SM_CYKANJIWINDOW 18
+#define SM_MOUSEPRESENT 19
+#define SM_CYVSCROLL 20
+#define SM_CXHSCROLL 21
+#define SM_DEBUG 22
+#define SM_SWAPBUTTON 23
+#define SM_RESERVED1 24
+#define SM_RESERVED2 25
+#define SM_RESERVED3 26
+#define SM_RESERVED4 27
+#define SM_CXMIN 28
+#define SM_CYMIN 29
+#define SM_CXSIZE 30
+#define SM_CYSIZE 31
+#define SM_CXFRAME 32
+#define SM_CYFRAME 33
+#define SM_CXMINTRACK 34
+#define SM_CYMINTRACK 35
+#define SM_CXDOUBLECLK 36
+#define SM_CYDOUBLECLK 37
+#define SM_CXICONSPACING 38
+#define SM_CYICONSPACING 39
+#define SM_MENUDROPALIGNMENT 40
+#define SM_PENWINDOWS 41
+#define SM_DBCSENABLED 42
+#define SM_CMOUSEBUTTONS 43
+#define SM_CXFIXEDFRAME SM_CXDLGFRAME
+#define SM_CYFIXEDFRAME SM_CYDLGFRAME
+#define SM_CXSIZEFRAME SM_CXFRAME
+#define SM_CYSIZEFRAME SM_CYFRAME
+#define SM_SECURE 44
+#define SM_CXEDGE 45
+#define SM_CYEDGE 46
+#define SM_CXMINSPACING 47
+#define SM_CYMINSPACING 48
+#define SM_CXSMICON 49
+#define SM_CYSMICON 50
+#define SM_CYSMCAPTION 51
+#define SM_CXSMSIZE 52
+#define SM_CYSMSIZE 53
+#define SM_CXMENUSIZE 54
+#define SM_CYMENUSIZE 55
+#define SM_ARRANGE 56
+#define SM_CXMINIMIZED 57
+#define SM_CYMINIMIZED 58
+#define SM_CXMAXTRACK 59
+#define SM_CYMAXTRACK 60
+#define SM_CXMAXIMIZED 61
+#define SM_CYMAXIMIZED 62
+#define SM_NETWORK 63
+#define SM_CLEANBOOT 67
+#define SM_CXDRAG 68
+#define SM_CYDRAG 69
+#define SM_SHOWSOUNDS 70
+#define SM_CXMENUCHECK 71
+#define SM_CYMENUCHECK 72
+#define SM_SLOWMACHINE 73
+#define SM_MIDEASTENABLED 74
+#define SM_MOUSEWHEELPRESENT 75
+#define SM_XVIRTUALSCREEN 76
+#define SM_YVIRTUALSCREEN 77
+#define SM_CXVIRTUALSCREEN 78
+#define SM_CYVIRTUALSCREEN 79
+#define SM_CMONITORS 80
+#define SM_SAMEDISPLAYFORMAT 81
+#define SM_IMMENABLED 82
+#define SM_CXFOCUSBORDER 83
+#define SM_CYFOCUSBORDER 84
+#define SM_TABLETPC 86
+#define SM_MEDIACENTER 87
+#define SM_STARTER 88
+#define SM_SERVERR2 89
+#define SM_CMETRICS 90
+#define SM_MOUSEHORIZONTALWHEELPRESENT 91
+
+#define SM_REMOTESESSION 0x1000
+#define SM_SHUTTINGDOWN 0x2000
+#define SM_REMOTECONTROL 0x2001
+#define SM_CARETBLINKINGENABLED 0x2002
+
+#define PMB_ACTIVE 0x00000001
+
+
+/* wParam for WM_POWERBROADCAST */
+#define PBT_APMQUERYSUSPEND 0x0000
+#define PBT_APMQUERYSTANDBY 0x0001
+#define PBT_APMQUERYSUSPENDFAILED 0x0002
+#define PBT_APMQUERYSTANDBYFAILED 0x0003
+#define PBT_APMSUSPEND 0x0004
+#define PBT_APMSTANDBY 0x0005
+#define PBT_APMRESUMECRITICAL 0x0006
+#define PBT_APMRESUMESUSPEND 0x0007
+#define PBT_APMRESUMESTANDBY 0x0008
+#define PBT_APMBATTERYLOW 0x0009
+#define PBT_APMPOWERSTATUSCHANGE 0x000A
+#define PBT_APMOEMEVENT 0x000B
+#define PBT_APMRESUMEAUTOMATIC 0x0012
+
+#define PBTF_APMRESUMEFROMFAILURE 0x00000001
+
+
+/* MsgWaitForMultipleObjectsEx flags */
+#define MWMO_WAITALL 0x0001
+#define MWMO_ALERTABLE 0x0002
+#define MWMO_INPUTAVAILABLE 0x0004
+
+/* WM_GETDLGCODE values */
+#define DLGC_WANTARROWS 0x0001
+#define DLGC_WANTTAB 0x0002
+#define DLGC_WANTALLKEYS 0x0004
+#define DLGC_WANTMESSAGE 0x0004
+#define DLGC_HASSETSEL 0x0008
+#define DLGC_DEFPUSHBUTTON 0x0010
+#define DLGC_UNDEFPUSHBUTTON 0x0020
+#define DLGC_RADIOBUTTON 0x0040
+#define DLGC_WANTCHARS 0x0080
+#define DLGC_STATIC 0x0100
+#define DLGC_BUTTON 0x2000
+
+/* Used for EnumDisplaySettingsEx */
+#define ENUM_CURRENT_SETTINGS ((DWORD) -1)
+#define ENUM_REGISTRY_SETTINGS ((DWORD) -2)
+
+#define EDS_RAWMODE 0x00000002
+#define EDS_ROTATEDMODE 0x00000004
+
+/* Used for PrintWindow */
+#define PW_CLIENTONLY 0x00000001
+
+/****** Window classes ******/
+
+typedef struct tagCREATESTRUCTA
+{
+ LPVOID lpCreateParams;
+ HINSTANCE hInstance;
+ HMENU hMenu;
+ HWND hwndParent;
+ INT cy;
+ INT cx;
+ INT y;
+ INT x;
+ LONG style;
+ LPCSTR lpszName;
+ LPCSTR lpszClass;
+ DWORD dwExStyle;
+} CREATESTRUCTA, *LPCREATESTRUCTA;
+
+typedef struct tagCREATESTRUCTW
+{
+ LPVOID lpCreateParams;
+ HINSTANCE hInstance;
+ HMENU hMenu;
+ HWND hwndParent;
+ INT cy;
+ INT cx;
+ INT y;
+ INT x;
+ LONG style;
+ LPCWSTR lpszName;
+ LPCWSTR lpszClass;
+ DWORD dwExStyle;
+} CREATESTRUCTW, *LPCREATESTRUCTW;
+
+DECL_WINELIB_TYPE_AW(CREATESTRUCT)
+DECL_WINELIB_TYPE_AW(LPCREATESTRUCT)
+
+typedef struct tagPAINTSTRUCT
+{
+ HDC hdc;
+ BOOL fErase;
+ RECT rcPaint;
+ BOOL fRestore;
+ BOOL fIncUpdate;
+ BYTE rgbReserved[32];
+} PAINTSTRUCT, *PPAINTSTRUCT, *LPPAINTSTRUCT;
+
+typedef struct tagCLIENTCREATESTRUCT
+{
+ HMENU hWindowMenu;
+ UINT idFirstChild;
+} CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT;
+
+
+typedef struct tagMDICREATESTRUCTA
+{
+ LPCSTR szClass;
+ LPCSTR szTitle;
+ HINSTANCE hOwner;
+ INT x;
+ INT y;
+ INT cx;
+ INT cy;
+ DWORD style;
+ LPARAM lParam;
+} MDICREATESTRUCTA, *LPMDICREATESTRUCTA;
+
+typedef struct tagMDICREATESTRUCTW
+{
+ LPCWSTR szClass;
+ LPCWSTR szTitle;
+ HINSTANCE hOwner;
+ INT x;
+ INT y;
+ INT cx;
+ INT cy;
+ DWORD style;
+ LPARAM lParam;
+} MDICREATESTRUCTW, *LPMDICREATESTRUCTW;
+
+DECL_WINELIB_TYPE_AW(MDICREATESTRUCT)
+DECL_WINELIB_TYPE_AW(LPMDICREATESTRUCT)
+
+#define MDITILE_VERTICAL 0x0000
+#define MDITILE_HORIZONTAL 0x0001
+#define MDITILE_SKIPDISABLED 0x0002
+#define MDITILE_ZORDER 0x0004
+
+#define MDIS_ALLCHILDSTYLES 0x0001
+
+typedef struct tagSTYLESTRUCT {
+ DWORD styleOld;
+ DWORD styleNew;
+} STYLESTRUCT, *LPSTYLESTRUCT;
+
+#define WC_DIALOG MAKEINTATOM(0x8002)
+
+ /* Offsets for GetWindowLong() and GetWindowWord() */
+#define GWL_EXSTYLE (-20)
+#define GWL_STYLE (-16)
+#if !defined _WIN64 && !defined __WINESRC__
+# define GWL_USERDATA (-21)
+# define GWL_ID (-12)
+# define GWL_HWNDPARENT (-8)
+# define GWL_HINSTANCE (-6)
+# define GWL_WNDPROC (-4)
+# define DWL_MSGRESULT 0
+# define DWL_DLGPROC 4
+# define DWL_USER 8
+#endif /* _WIN64 && __WINESRC__ */
+
+ /* Offsets for GetWindowLongPtr() and SetWindowLongPtr() */
+#define GWLP_USERDATA (-21)
+#define GWLP_ID (-12)
+#define GWLP_HWNDPARENT (-8)
+#define GWLP_HINSTANCE (-6)
+#define GWLP_WNDPROC (-4)
+#define DWLP_MSGRESULT 0
+#define DWLP_DLGPROC DWLP_MSGRESULT + sizeof(LRESULT)
+#define DWLP_USER DWLP_DLGPROC + sizeof(DLGPROC)
+
+ /* GetWindow() constants */
+#define GW_HWNDFIRST 0
+#define GW_HWNDLAST 1
+#define GW_HWNDNEXT 2
+#define GW_HWNDPREV 3
+#define GW_OWNER 4
+#define GW_CHILD 5
+
+/* GetAncestor() constants */
+#define GA_PARENT 1
+#define GA_ROOT 2
+#define GA_ROOTOWNER 3
+
+ /* WM_GETMINMAXINFO struct */
+typedef struct tagMINMAXINFO
+{
+ POINT ptReserved;
+ POINT ptMaxSize;
+ POINT ptMaxPosition;
+ POINT ptMinTrackSize;
+ POINT ptMaxTrackSize;
+} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO;
+
+
+ /* RedrawWindow() flags */
+#define RDW_INVALIDATE 0x0001
+#define RDW_INTERNALPAINT 0x0002
+#define RDW_ERASE 0x0004
+#define RDW_VALIDATE 0x0008
+#define RDW_NOINTERNALPAINT 0x0010
+#define RDW_NOERASE 0x0020
+#define RDW_NOCHILDREN 0x0040
+#define RDW_ALLCHILDREN 0x0080
+#define RDW_UPDATENOW 0x0100
+#define RDW_ERASENOW 0x0200
+#define RDW_FRAME 0x0400
+#define RDW_NOFRAME 0x0800
+
+/* debug flags */
+#define DBGFILL_ALLOC 0xfd
+#define DBGFILL_FREE 0xfb
+#define DBGFILL_BUFFER 0xf9
+#define DBGFILL_STACK 0xf7
+
+ /* WM_WINDOWPOSCHANGING/CHANGED struct */
+typedef struct tagWINDOWPOS
+{
+ HWND hwnd;
+ HWND hwndInsertAfter;
+ INT x;
+ INT y;
+ INT cx;
+ INT cy;
+ UINT flags;
+} WINDOWPOS, *PWINDOWPOS, *LPWINDOWPOS;
+
+
+ /* WM_NCCALCSIZE parameter structure */
+typedef struct
+{
+ RECT rgrc[3];
+ WINDOWPOS *lppos;
+} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS;
+
+
+#define PRF_CHECKVISIBLE __MSABI_LONG(0x00000001)
+#define PRF_NONCLIENT __MSABI_LONG(0x00000002)
+#define PRF_CLIENT __MSABI_LONG(0x00000004)
+#define PRF_ERASEBKGND __MSABI_LONG(0x00000008)
+#define PRF_CHILDREN __MSABI_LONG(0x00000010)
+#define PRF_OWNED __MSABI_LONG(0x00000020)
+
+ /* Offsets for GetClassLong() and GetClassWord() */
+#if !defined _WIN64 && !defined __WINESRC__
+# define GCL_MENUNAME (-8)
+# define GCL_HBRBACKGROUND (-10)
+# define GCL_HCURSOR (-12)
+# define GCL_HICON (-14)
+# define GCL_HMODULE (-16)
+# define GCL_WNDPROC (-24)
+# define GCL_HICONSM (-34)
+#endif /* _WIN64 && __WINESRC__ */
+
+#define GCL_CBWNDEXTRA (-18)
+#define GCL_CBCLSEXTRA (-20)
+#define GCL_STYLE (-26)
+#define GCW_ATOM (-32)
+
+#define GCLP_MENUNAME (-8)
+#define GCLP_HBRBACKGROUND (-10)
+#define GCLP_HCURSOR (-12)
+#define GCLP_HICON (-14)
+#define GCLP_HMODULE (-16)
+#define GCLP_WNDPROC (-24)
+#define GCLP_HICONSM (-34)
+
+/* BroadcastSystemMessage flags */
+#define BSM_ALLCOMPONENTS 0x00000000
+#define BSM_VXDS 0x00000001
+#define BSM_NETDRIVER 0x00000002
+#define BSM_INSTALLABLEDRIVERS 0x00000004
+#define BSM_APPLICATIONS 0x00000008
+#define BSM_ALLDESKTOPS 0x00000010
+
+#define BSF_QUERY 0x00000001
+#define BSF_IGNORECURRENTTASK 0x00000002
+#define BSF_FLUSHDISK 0x00000004
+#define BSF_NOHANG 0x00000008
+#define BSF_POSTMESSAGE 0x00000010
+#define BSF_FORCEIFHUNG 0x00000020
+#define BSF_NOTIMEOUTIFNOTHUNG 0x00000040
+#define BSF_ALLOWSFW 0x00000080
+#define BSF_SENDNOTIFYMESSAGE 0x00000100
+#define BSF_RETURNHDESK 0x00000200
+#define BSF_LUID 0x00000400
+
+#define BROADCAST_QUERY_DENY 0x424D5144
+
+/***** Window hooks *****/
+
+ /* Hook values */
+#define WH_MIN (-1)
+#define WH_MSGFILTER (-1)
+#define WH_JOURNALRECORD 0
+#define WH_JOURNALPLAYBACK 1
+#define WH_KEYBOARD 2
+#define WH_GETMESSAGE 3
+#define WH_CALLWNDPROC 4
+#define WH_CBT 5
+#define WH_SYSMSGFILTER 6
+#define WH_MOUSE 7
+#define WH_HARDWARE 8
+#define WH_DEBUG 9
+#define WH_SHELL 10
+#define WH_FOREGROUNDIDLE 11
+#define WH_CALLWNDPROCRET 12
+#define WH_KEYBOARD_LL 13
+#define WH_MOUSE_LL 14
+#define WH_MAX 14
+
+#define WH_MINHOOK WH_MIN
+#define WH_MAXHOOK WH_MAX
+
+ /* Hook action codes */
+#define HC_ACTION 0
+#define HC_GETNEXT 1
+#define HC_SKIP 2
+#define HC_NOREMOVE 3
+#define HC_NOREM HC_NOREMOVE
+#define HC_SYSMODALON 4
+#define HC_SYSMODALOFF 5
+
+ /* CallMsgFilter() values */
+#define MSGF_DIALOGBOX 0
+#define MSGF_MESSAGEBOX 1
+#define MSGF_MENU 2
+#define MSGF_MOVE 3
+#define MSGF_SIZE 4
+#define MSGF_SCROLLBAR 5
+#define MSGF_NEXTWINDOW 6
+#define MSGF_MAX 8
+#define MSGF_USER 0x1000
+#define MSGF_DDEMGR 0x8001
+
+typedef struct tagWNDCLASSA
+{
+ UINT style;
+ WNDPROC lpfnWndProc;
+ INT cbClsExtra;
+ INT cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCSTR lpszMenuName;
+ LPCSTR lpszClassName;
+} WNDCLASSA, *PWNDCLASSA, *LPWNDCLASSA;
+
+typedef struct tagWNDCLASSW
+{
+ UINT style;
+ WNDPROC lpfnWndProc;
+ INT cbClsExtra;
+ INT cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCWSTR lpszMenuName;
+ LPCWSTR lpszClassName;
+} WNDCLASSW, *PWNDCLASSW, *LPWNDCLASSW;
+
+DECL_WINELIB_TYPE_AW(WNDCLASS)
+DECL_WINELIB_TYPE_AW(PWNDCLASS)
+DECL_WINELIB_TYPE_AW(LPWNDCLASS)
+
+typedef struct tagCOPYDATASTRUCT {
+ ULONG_PTR dwData;
+ DWORD cbData;
+ PVOID lpData;
+} COPYDATASTRUCT, *PCOPYDATASTRUCT;
+
+typedef struct tagMDINEXTMENU {
+ HMENU hmenuIn;
+ HMENU hmenuNext;
+ HWND hwndNext;
+} MDINEXTMENU, *PMDINEXTMENU, *LPMDINEXTMENU;
+
+typedef struct tagMULTIKEYHELPA
+{
+ DWORD mkSize;
+ CHAR mkKeylist;
+ CHAR szKeyphrase[1];
+} MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;
+
+typedef struct tagMULTIKEYHELPW
+{
+ DWORD mkSize;
+ WCHAR mkKeylist;
+ WCHAR szKeyphrase[1];
+} MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;
+
+DECL_WINELIB_TYPE_AW(MULTIKEYHELP)
+DECL_WINELIB_TYPE_AW(PMULTIKEYHELP)
+DECL_WINELIB_TYPE_AW(LPMULTIKEYHELP)
+
+typedef struct tagHELPWININFOA {
+ int wStructSize;
+ int x;
+ int y;
+ int dx;
+ int dy;
+ int wMax;
+ CHAR rgchMember[2];
+} HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA;
+
+typedef struct tagHELPWININFOW {
+ int wStructSize;
+ int x;
+ int y;
+ int dx;
+ int dy;
+ int wMax;
+ WCHAR rgchMember[2];
+} HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;
+
+DECL_WINELIB_TYPE_AW(HELPWININFO)
+DECL_WINELIB_TYPE_AW(PHELPWININFO)
+DECL_WINELIB_TYPE_AW(LPHELPWININFO)
+
+
+ /* ChangeDisplaySettings return codes */
+
+#define DISP_CHANGE_SUCCESSFUL 0
+#define DISP_CHANGE_RESTART 1
+#define DISP_CHANGE_FAILED (-1)
+#define DISP_CHANGE_BADMODE (-2)
+#define DISP_CHANGE_NOTUPDATED (-3)
+#define DISP_CHANGE_BADFLAGS (-4)
+#define DISP_CHANGE_BADPARAM (-5)
+#define DISP_CHANGE_BADDUALVIEW (-6)
+
+/* ChangeDisplaySettings.dwFlags */
+#define CDS_UPDATEREGISTRY 0x00000001
+#define CDS_TEST 0x00000002
+#define CDS_FULLSCREEN 0x00000004
+#define CDS_GLOBAL 0x00000008
+#define CDS_SET_PRIMARY 0x00000010
+#define CDS_VIDEOPARAMETERS 0x00000020
+#define CDS_NORESET 0x10000000
+#define CDS_SETRECT 0x20000000
+#define CDS_RESET 0x40000000
+
+typedef struct tagWNDCLASSEXA
+{
+ UINT cbSize;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ INT cbClsExtra;
+ INT cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCSTR lpszMenuName;
+ LPCSTR lpszClassName;
+ HICON hIconSm;
+} WNDCLASSEXA, *PWNDCLASSEXA, *LPWNDCLASSEXA;
+
+typedef struct tagWNDCLASSEXW
+{
+ UINT cbSize;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ INT cbClsExtra;
+ INT cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCWSTR lpszMenuName;
+ LPCWSTR lpszClassName;
+ HICON hIconSm;
+} WNDCLASSEXW, *PWNDCLASSEXW, *LPWNDCLASSEXW;
+
+DECL_WINELIB_TYPE_AW(WNDCLASSEX)
+DECL_WINELIB_TYPE_AW(PWNDCLASSEX)
+DECL_WINELIB_TYPE_AW(LPWNDCLASSEX)
+
+typedef struct tagMSG
+{
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT pt;
+} MSG, *PMSG, *LPMSG;
+
+#define POINTSTOPOINT(pt, pts) { (pt).x = (pts).x; (pt).y = (pts).y; }
+#define POINTTOPOINTS(pt) (MAKELONG((short)((pt).x), (short)((pt).y)))
+
+#define MAKELPARAM(low,high) ((LPARAM)(DWORD)MAKELONG(low,high))
+#define MAKEWPARAM(low,high) ((WPARAM)(DWORD)MAKELONG(low,high))
+#define MAKELRESULT(low,high) ((LRESULT)(DWORD)MAKELONG(low,high))
+
+/* Cursors / Icons */
+
+typedef struct _ICONINFO {
+ BOOL fIcon;
+ DWORD xHotspot;
+ DWORD yHotspot;
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+} ICONINFO, *PICONINFO;
+
+typedef struct _ICONINFOEXA
+{
+ DWORD cbSize;
+ BOOL fIcon;
+ DWORD xHotspot;
+ DWORD yHotspot;
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+ WORD wResID;
+ CHAR szModName[MAX_PATH];
+ CHAR szResName[MAX_PATH];
+} ICONINFOEXA, *PICONINFOEXA;
+
+typedef struct _ICONINFOEXW
+{
+ DWORD cbSize;
+ BOOL fIcon;
+ DWORD xHotspot;
+ DWORD yHotspot;
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+ WORD wResID;
+ WCHAR szModName[MAX_PATH];
+ WCHAR szResName[MAX_PATH];
+} ICONINFOEXW, *PICONINFOEXW;
+
+DECL_WINELIB_TYPE_AW(ICONINFOEX)
+DECL_WINELIB_TYPE_AW(PICONINFOEX)
+
+typedef struct tagCURSORINFO
+{
+ DWORD cbSize;
+ DWORD flags;
+ HCURSOR hCursor;
+ POINT ptScreenPos;
+} CURSORINFO, *PCURSORINFO, *LPCURSORINFO;
+
+#define CURSOR_SHOWING 0x00000001
+
+/* this is the 6 byte accel struct used in Win32 when presented to the user */
+typedef struct tagACCEL
+{
+#ifdef WORDS_BIGENDIAN
+ WORD fVirt;
+ WORD key;
+ DWORD cmd;
+#else
+ BYTE fVirt;
+ WORD key;
+ WORD cmd;
+#endif
+} ACCEL, *LPACCEL;
+
+
+/* Flags for TrackPopupMenu */
+#define TPM_LEFTBUTTON 0x0000
+#define TPM_RECURSE 0x0001
+#define TPM_RIGHTBUTTON 0x0002
+#define TPM_LEFTALIGN 0x0000
+#define TPM_CENTERALIGN 0x0004
+#define TPM_RIGHTALIGN 0x0008
+#define TPM_TOPALIGN 0x0000
+#define TPM_VCENTERALIGN 0x0010
+#define TPM_BOTTOMALIGN 0x0020
+#define TPM_HORIZONTAL 0x0000
+#define TPM_VERTICAL 0x0040
+#define TPM_NONOTIFY 0x0080
+#define TPM_RETURNCMD 0x0100
+#define TPM_HORPOSANIMATION 0x0400
+#define TPM_HORNEGANIMATION 0x0800
+#define TPM_VERPOSANIMATION 0x1000
+#define TPM_VERNEGANIMATION 0x2000
+#define TPM_NOANIMATION 0x4000
+#define TPM_LAYOUTRTL 0x8000
+
+typedef struct tagTPMPARAMS
+{
+ UINT cbSize;
+ RECT rcExclude;
+} TPMPARAMS, *LPTPMPARAMS;
+
+
+/*
+ * Combobox information
+ */
+typedef struct tagCOMBOBOXINFO
+{
+ DWORD cbSize;
+ RECT rcItem;
+ RECT rcButton;
+ DWORD stateButton;
+ HWND hwndCombo;
+ HWND hwndItem;
+ HWND hwndList;
+} COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;
+
+typedef struct tagMENUITEMINFOA {
+ UINT cbSize;
+ UINT fMask;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HMENU hSubMenu;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ ULONG_PTR dwItemData;
+ LPSTR dwTypeData;
+ UINT cch;
+ HBITMAP hbmpItem;
+} MENUITEMINFOA, *LPMENUITEMINFOA;
+
+typedef struct tagMENUITEMINFOW {
+ UINT cbSize;
+ UINT fMask;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HMENU hSubMenu;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ ULONG_PTR dwItemData;
+ LPWSTR dwTypeData;
+ UINT cch;
+ HBITMAP hbmpItem;
+} MENUITEMINFOW, *LPMENUITEMINFOW;
+
+DECL_WINELIB_TYPE_AW(MENUITEMINFO)
+DECL_WINELIB_TYPE_AW(LPMENUITEMINFO)
+typedef const MENUITEMINFOA *LPCMENUITEMINFOA;
+typedef const MENUITEMINFOW *LPCMENUITEMINFOW;
+DECL_WINELIB_TYPE_AW(LPCMENUITEMINFO)
+
+typedef struct tagMENUBARINFO {
+ DWORD cbSize;
+ RECT rcBar;
+ HMENU hMenu;
+ HWND hwndMenu;
+ BOOL fBarFocused:1;
+ BOOL fFocused:1;
+} MENUBARINFO, *PMENUBARINFO, *LPMENUBARINFO;
+
+typedef struct tagMENUINFO {
+ DWORD cbSize;
+ DWORD fMask;
+ DWORD dwStyle;
+ UINT cyMax;
+ HBRUSH hbrBack;
+ DWORD dwContextHelpID;
+ ULONG_PTR dwMenuData;
+} MENUINFO, *LPMENUINFO;
+
+typedef const MENUINFO *LPCMENUINFO;
+
+#define MIM_MAXHEIGHT 0x00000001
+#define MIM_BACKGROUND 0x00000002
+#define MIM_HELPID 0x00000004
+#define MIM_MENUDATA 0x00000008
+#define MIM_STYLE 0x00000010
+#define MIM_APPLYTOSUBMENUS 0x80000000
+
+#define MNS_NOCHECK 0x80000000
+#define MNS_MODELESS 0x40000000
+#define MNS_DRAGDROP 0x20000000
+#define MNS_AUTODISMISS 0x10000000
+#define MNS_NOTIFYBYPOS 0x08000000
+#define MNS_CHECKORBMP 0x04000000
+
+typedef struct {
+ WORD versionNumber;
+ WORD offset;
+} MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER;
+
+
+typedef struct {
+ WORD mtOption;
+ WORD mtID;
+ WCHAR mtString[1];
+} MENUITEMTEMPLATE, *PMENUITEMTEMPLATE;
+
+
+typedef VOID MENUTEMPLATE;
+typedef PVOID *LPMENUTEMPLATE;
+
+/* Field specifiers for MENUITEMINFO[AW] type. */
+#define MIIM_STATE 0x00000001
+#define MIIM_ID 0x00000002
+#define MIIM_SUBMENU 0x00000004
+#define MIIM_CHECKMARKS 0x00000008
+#define MIIM_TYPE 0x00000010
+#define MIIM_DATA 0x00000020
+#define MIIM_STRING 0x00000040
+#define MIIM_BITMAP 0x00000080
+#define MIIM_FTYPE 0x00000100
+
+#define HBMMENU_CALLBACK ((HBITMAP) -1)
+#define HBMMENU_SYSTEM ((HBITMAP) 1)
+#define HBMMENU_MBAR_RESTORE ((HBITMAP) 2)
+#define HBMMENU_MBAR_MINIMIZE ((HBITMAP) 3)
+#define HBMMENU_MBAR_CLOSE ((HBITMAP) 5)
+#define HBMMENU_MBAR_CLOSE_D ((HBITMAP) 6)
+#define HBMMENU_MBAR_MINIMIZE_D ((HBITMAP) 7)
+#define HBMMENU_POPUP_CLOSE ((HBITMAP) 8)
+#define HBMMENU_POPUP_RESTORE ((HBITMAP) 9)
+#define HBMMENU_POPUP_MAXIMIZE ((HBITMAP) 10)
+#define HBMMENU_POPUP_MINIMIZE ((HBITMAP) 11)
+
+/* WM_H/VSCROLL commands */
+#define SB_LINEUP 0
+#define SB_LINELEFT 0
+#define SB_LINEDOWN 1
+#define SB_LINERIGHT 1
+#define SB_PAGEUP 2
+#define SB_PAGELEFT 2
+#define SB_PAGEDOWN 3
+#define SB_PAGERIGHT 3
+#define SB_THUMBPOSITION 4
+#define SB_THUMBTRACK 5
+#define SB_TOP 6
+#define SB_LEFT 6
+#define SB_BOTTOM 7
+#define SB_RIGHT 7
+#define SB_ENDSCROLL 8
+
+/* Scroll bar selection constants */
+#define SB_HORZ 0
+#define SB_VERT 1
+#define SB_CTL 2
+#define SB_BOTH 3
+
+/* EnableScrollBar() flags */
+#define ESB_ENABLE_BOTH 0x0000
+#define ESB_DISABLE_BOTH 0x0003
+
+#define ESB_DISABLE_LEFT 0x0001
+#define ESB_DISABLE_RIGHT 0x0002
+
+#define ESB_DISABLE_UP 0x0001
+#define ESB_DISABLE_DOWN 0x0002
+
+#define ESB_DISABLE_LTUP ESB_DISABLE_LEFT
+#define ESB_DISABLE_RTDN ESB_DISABLE_RIGHT
+
+/* Static Control Messages */
+#define STM_SETICON 0x0170
+#define STM_GETICON 0x0171
+#define STM_SETIMAGE 0x0172
+#define STM_GETIMAGE 0x0173
+#define STM_MSGMAX 0x0174
+
+#define STN_CLICKED 0
+#define STN_DBLCLK 1
+#define STN_ENABLE 2
+#define STN_DISABLE 3
+
+/* Scrollbar messages */
+#define SBM_SETPOS 0x00e0
+#define SBM_GETPOS 0x00e1
+#define SBM_SETRANGE 0x00e2
+#define SBM_GETRANGE 0x00e3
+#define SBM_ENABLE_ARROWS 0x00e4
+#define SBM_SETRANGEREDRAW 0x00e6
+#define SBM_SETSCROLLINFO 0x00e9
+#define SBM_GETSCROLLINFO 0x00ea
+#define SBM_GETSCROLLBARINFO 0x00eb
+
+/* Scrollbar info */
+typedef struct tagSCROLLINFO
+{
+ UINT cbSize;
+ UINT fMask;
+ INT nMin;
+ INT nMax;
+ UINT nPage;
+ INT nPos;
+ INT nTrackPos;
+} SCROLLINFO, *LPSCROLLINFO;
+
+typedef const SCROLLINFO *LPCSCROLLINFO;
+
+#define CCHILDREN_SCROLLBAR 5
+
+typedef struct tagSCROLLBARINFO
+{
+ DWORD cbSize; /* Size of SCROLLBARINFO struct */
+ RECT rcScrollBar; /* Coordinates of the scroll bar */
+ INT dxyLineButton; /* Height or width */
+ INT xyThumbTop; /* Position of the top or the left */
+ INT xyThumbBottom; /* Position of the bottom or the right */
+ INT reserved;
+ DWORD rgstate[CCHILDREN_SCROLLBAR+1];
+} SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO;
+
+/* GetScrollInfo() flags */
+#define SIF_RANGE 0x0001
+#define SIF_PAGE 0x0002
+#define SIF_POS 0x0004
+#define SIF_DISABLENOSCROLL 0x0008
+#define SIF_TRACKPOS 0x0010
+#define SIF_ALL (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)
+
+/* Listbox messages */
+#define LB_ADDSTRING 0x0180
+#define LB_INSERTSTRING 0x0181
+#define LB_DELETESTRING 0x0182
+#define LB_SELITEMRANGEEX 0x0183
+#define LB_RESETCONTENT 0x0184
+#define LB_SETSEL 0x0185
+#define LB_SETCURSEL 0x0186
+#define LB_GETSEL 0x0187
+#define LB_GETCURSEL 0x0188
+#define LB_GETTEXT 0x0189
+#define LB_GETTEXTLEN 0x018a
+#define LB_GETCOUNT 0x018b
+#define LB_SELECTSTRING 0x018c
+#define LB_DIR 0x018d
+#define LB_GETTOPINDEX 0x018e
+#define LB_FINDSTRING 0x018f
+#define LB_GETSELCOUNT 0x0190
+#define LB_GETSELITEMS 0x0191
+#define LB_SETTABSTOPS 0x0192
+#define LB_GETHORIZONTALEXTENT 0x0193
+#define LB_SETHORIZONTALEXTENT 0x0194
+#define LB_SETCOLUMNWIDTH 0x0195
+#define LB_ADDFILE 0x0196
+#define LB_SETTOPINDEX 0x0197
+#define LB_GETITEMRECT 0x0198
+#define LB_GETITEMDATA 0x0199
+#define LB_SETITEMDATA 0x019a
+#define LB_SELITEMRANGE 0x019b
+#define LB_SETANCHORINDEX 0x019c
+#define LB_GETANCHORINDEX 0x019d
+#define LB_SETCARETINDEX 0x019e
+#define LB_GETCARETINDEX 0x019f
+#define LB_SETITEMHEIGHT 0x01a0
+#define LB_GETITEMHEIGHT 0x01a1
+#define LB_FINDSTRINGEXACT 0x01a2
+#define LB_CARETON 0x01a3
+#define LB_CARETOFF 0x01a4
+#define LB_SETLOCALE 0x01a5
+#define LB_GETLOCALE 0x01a6
+#define LB_SETCOUNT 0x01a7
+#define LB_INITSTORAGE 0x01a8
+#define LB_ITEMFROMPOINT 0x01a9
+#define LB_GETLISTBOXINFO 0x01b2
+#define LB_MSGMAX 0x01b3
+
+/* Listbox notification codes */
+#define LBN_ERRSPACE (-2)
+#define LBN_SELCHANGE 1
+#define LBN_DBLCLK 2
+#define LBN_SELCANCEL 3
+#define LBN_SETFOCUS 4
+#define LBN_KILLFOCUS 5
+
+/* Listbox message return values */
+#define LB_OKAY 0
+#define LB_ERR (-1)
+#define LB_ERRSPACE (-2)
+
+#define LB_CTLCODE __MSABI_LONG(0)
+
+/* Combo box messages */
+#define CB_GETEDITSEL 0x0140
+#define CB_LIMITTEXT 0x0141
+#define CB_SETEDITSEL 0x0142
+#define CB_ADDSTRING 0x0143
+#define CB_DELETESTRING 0x0144
+#define CB_DIR 0x0145
+#define CB_GETCOUNT 0x0146
+#define CB_GETCURSEL 0x0147
+#define CB_GETLBTEXT 0x0148
+#define CB_GETLBTEXTLEN 0x0149
+#define CB_INSERTSTRING 0x014a
+#define CB_RESETCONTENT 0x014b
+#define CB_FINDSTRING 0x014c
+#define CB_SELECTSTRING 0x014d
+#define CB_SETCURSEL 0x014e
+#define CB_SHOWDROPDOWN 0x014f
+#define CB_GETITEMDATA 0x0150
+#define CB_SETITEMDATA 0x0151
+#define CB_GETDROPPEDCONTROLRECT 0x0152
+#define CB_SETITEMHEIGHT 0x0153
+#define CB_GETITEMHEIGHT 0x0154
+#define CB_SETEXTENDEDUI 0x0155
+#define CB_GETEXTENDEDUI 0x0156
+#define CB_GETDROPPEDSTATE 0x0157
+#define CB_FINDSTRINGEXACT 0x0158
+#define CB_SETLOCALE 0x0159
+#define CB_GETLOCALE 0x015a
+#define CB_GETTOPINDEX 0x015b
+#define CB_SETTOPINDEX 0x015c
+#define CB_GETHORIZONTALEXTENT 0x015d
+#define CB_SETHORIZONTALEXTENT 0x015e
+#define CB_GETDROPPEDWIDTH 0x015f
+#define CB_SETDROPPEDWIDTH 0x0160
+#define CB_INITSTORAGE 0x0161
+#define CB_MULTIPLEADDSTRING 0x0163
+#define CB_GETCOMBOBOXINFO 0x0164
+#define CB_MSGMAX 0x0165
+
+/* Combo box notification codes */
+#define CBN_ERRSPACE (-1)
+#define CBN_SELCHANGE 1
+#define CBN_DBLCLK 2
+#define CBN_SETFOCUS 3
+#define CBN_KILLFOCUS 4
+#define CBN_EDITCHANGE 5
+#define CBN_EDITUPDATE 6
+#define CBN_DROPDOWN 7
+#define CBN_CLOSEUP 8
+#define CBN_SELENDOK 9
+#define CBN_SELENDCANCEL 10
+
+/* Combo box message return values */
+#define CB_OKAY 0
+#define CB_ERR (-1)
+#define CB_ERRSPACE (-2)
+
+#define MB_OK 0x00000000
+#define MB_OKCANCEL 0x00000001
+#define MB_ABORTRETRYIGNORE 0x00000002
+#define MB_YESNOCANCEL 0x00000003
+#define MB_YESNO 0x00000004
+#define MB_RETRYCANCEL 0x00000005
+#define MB_CANCELTRYCONTINUE 0x00000006
+#define MB_TYPEMASK 0x0000000F
+
+#define MB_ICONHAND 0x00000010
+#define MB_ICONQUESTION 0x00000020
+#define MB_ICONEXCLAMATION 0x00000030
+#define MB_ICONASTERISK 0x00000040
+#define MB_USERICON 0x00000080
+#define MB_ICONMASK 0x000000F0
+
+#define MB_ICONINFORMATION MB_ICONASTERISK
+#define MB_ICONSTOP MB_ICONHAND
+#define MB_ICONWARNING MB_ICONEXCLAMATION
+#define MB_ICONERROR MB_ICONHAND
+
+#define MB_DEFBUTTON1 0x00000000
+#define MB_DEFBUTTON2 0x00000100
+#define MB_DEFBUTTON3 0x00000200
+#define MB_DEFBUTTON4 0x00000300
+#define MB_DEFMASK 0x00000F00
+
+#define MB_APPLMODAL 0x00000000
+#define MB_SYSTEMMODAL 0x00001000
+#define MB_TASKMODAL 0x00002000
+#define MB_MODEMASK 0x00003000
+
+#define MB_HELP 0x00004000
+#define MB_NOFOCUS 0x00008000
+#define MB_MISCMASK 0x0000C000
+
+#define MB_SETFOREGROUND 0x00010000
+#define MB_DEFAULT_DESKTOP_ONLY 0x00020000
+#define MB_SERVICE_NOTIFICATION 0x00040000
+#define MB_TOPMOST 0x00040000
+#define MB_RIGHT 0x00080000
+#define MB_RTLREADING 0x00100000
+
+#define HELPINFO_WINDOW 0x0001
+#define HELPINFO_MENUITEM 0x0002
+
+/* Structure pointed to by lParam of WM_HELP */
+typedef struct tagHELPINFO
+{
+ UINT cbSize; /* Size in bytes of this struct */
+ INT iContextType; /* Either HELPINFO_WINDOW or HELPINFO_MENUITEM */
+ INT iCtrlId; /* Control Id or a Menu item Id. */
+ HANDLE hItemHandle; /* hWnd of control or hMenu. */
+ DWORD_PTR dwContextId; /* Context Id associated with this item */
+ POINT MousePos; /* Mouse Position in screen co-ordinates */
+} HELPINFO,*LPHELPINFO;
+
+typedef void (CALLBACK *MSGBOXCALLBACK)(LPHELPINFO lpHelpInfo);
+
+typedef struct tagMSGBOXPARAMSA
+{
+ UINT cbSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCSTR lpszText;
+ LPCSTR lpszCaption;
+ DWORD dwStyle;
+ LPCSTR lpszIcon;
+ DWORD_PTR dwContextHelpId;
+ MSGBOXCALLBACK lpfnMsgBoxCallback;
+ DWORD dwLanguageId;
+} MSGBOXPARAMSA, *PMSGBOXPARAMSA, *LPMSGBOXPARAMSA;
+
+typedef struct tagMSGBOXPARAMSW
+{
+ UINT cbSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCWSTR lpszText;
+ LPCWSTR lpszCaption;
+ DWORD dwStyle;
+ LPCWSTR lpszIcon;
+ DWORD_PTR dwContextHelpId;
+ MSGBOXCALLBACK lpfnMsgBoxCallback;
+ DWORD dwLanguageId;
+} MSGBOXPARAMSW, *PMSGBOXPARAMSW, *LPMSGBOXPARAMSW;
+
+DECL_WINELIB_TYPE_AW(MSGBOXPARAMS)
+DECL_WINELIB_TYPE_AW(PMSGBOXPARAMS)
+DECL_WINELIB_TYPE_AW(LPMSGBOXPARAMS)
+
+#define MONITOR_DEFAULTTONULL 0x00000000
+#define MONITOR_DEFAULTTOPRIMARY 0x00000001
+#define MONITOR_DEFAULTTONEAREST 0x00000002
+
+#define MONITORINFOF_PRIMARY 0x00000001
+
+#ifndef CCHDEVICENAME
+#define CCHDEVICENAME 32
+#endif
+
+typedef struct tagMONITORINFO
+{
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+} MONITORINFO, *LPMONITORINFO;
+
+typedef struct tagMONITORINFOEXA
+{ /* the 4 first entries are the same as MONITORINFO */
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+ CHAR szDevice[CCHDEVICENAME];
+} MONITORINFOEXA, *LPMONITORINFOEXA;
+
+typedef struct tagMONITORINFOEXW
+{ /* the 4 first entries are the same as MONITORINFO */
+ DWORD cbSize;
+ RECT rcMonitor;
+ RECT rcWork;
+ DWORD dwFlags;
+ WCHAR szDevice[CCHDEVICENAME];
+} MONITORINFOEXW, *LPMONITORINFOEXW;
+
+DECL_WINELIB_TYPE_AW(MONITORINFOEX)
+DECL_WINELIB_TYPE_AW(LPMONITORINFOEX)
+
+typedef BOOL (CALLBACK *MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM);
+
+#include <pshpack2.h>
+
+typedef struct tagDLGTEMPLATE
+{
+ DWORD style;
+ DWORD dwExtendedStyle;
+ WORD cdit;
+ short x;
+ short y;
+ short cx;
+ short cy;
+} DLGTEMPLATE;
+
+typedef DLGTEMPLATE *LPDLGTEMPLATEA;
+typedef DLGTEMPLATE *LPDLGTEMPLATEW;
+DECL_WINELIB_TYPE_AW(LPDLGTEMPLATE)
+typedef const DLGTEMPLATE *LPCDLGTEMPLATEA;
+typedef const DLGTEMPLATE *LPCDLGTEMPLATEW;
+DECL_WINELIB_TYPE_AW(LPCDLGTEMPLATE)
+
+typedef struct tagDLGITEMTEMPLATE
+{
+ DWORD style;
+ DWORD dwExtendedStyle;
+ short x;
+ short y;
+ short cx;
+ short cy;
+ WORD id;
+} DLGITEMTEMPLATE;
+
+typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA;
+typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW;
+DECL_WINELIB_TYPE_AW(PDLGITEMTEMPLATE)
+typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA;
+typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW;
+DECL_WINELIB_TYPE_AW(LPDLGITEMTEMPLATE)
+
+#include <poppack.h>
+
+ /* CBT hook values */
+#define HCBT_MOVESIZE 0
+#define HCBT_MINMAX 1
+#define HCBT_QS 2
+#define HCBT_CREATEWND 3
+#define HCBT_DESTROYWND 4
+#define HCBT_ACTIVATE 5
+#define HCBT_CLICKSKIPPED 6
+#define HCBT_KEYSKIPPED 7
+#define HCBT_SYSCOMMAND 8
+#define HCBT_SETFOCUS 9
+
+ /* CBT hook structures */
+
+typedef struct tagCBT_CREATEWNDA
+{
+ CREATESTRUCTA *lpcs;
+ HWND hwndInsertAfter;
+} CBT_CREATEWNDA, *LPCBT_CREATEWNDA;
+
+typedef struct tagCBT_CREATEWNDW
+{
+ CREATESTRUCTW *lpcs;
+ HWND hwndInsertAfter;
+} CBT_CREATEWNDW, *LPCBT_CREATEWNDW;
+
+DECL_WINELIB_TYPE_AW(CBT_CREATEWND)
+DECL_WINELIB_TYPE_AW(LPCBT_CREATEWND)
+
+typedef struct tagCBTACTIVATESTRUCT
+{
+ BOOL fMouse;
+ HWND hWndActive;
+} CBTACTIVATESTRUCT, *LPCBTACTIVATESTRUCT;
+
+
+/* modifiers for RegisterHotKey */
+#define MOD_ALT 0x0001
+#define MOD_CONTROL 0x0002
+#define MOD_SHIFT 0x0004
+#define MOD_WIN 0x0008
+
+/* ids for RegisterHotKey */
+#define IDHOT_SNAPWINDOW (-1) /* SHIFT-PRINTSCRN */
+#define IDHOT_SNAPDESKTOP (-2) /* PRINTSCRN */
+
+ /* keybd_event flags */
+#define KEYEVENTF_EXTENDEDKEY 0x0001
+#define KEYEVENTF_KEYUP 0x0002
+#define KEYEVENTF_UNICODE 0x0004
+#define KEYEVENTF_SCANCODE 0x0008
+
+ /* mouse_event flags */
+#define MOUSEEVENTF_MOVE 0x0001
+#define MOUSEEVENTF_LEFTDOWN 0x0002
+#define MOUSEEVENTF_LEFTUP 0x0004
+#define MOUSEEVENTF_RIGHTDOWN 0x0008
+#define MOUSEEVENTF_RIGHTUP 0x0010
+#define MOUSEEVENTF_MIDDLEDOWN 0x0020
+#define MOUSEEVENTF_MIDDLEUP 0x0040
+#define MOUSEEVENTF_XDOWN 0x0080
+#define MOUSEEVENTF_XUP 0x0100
+#define MOUSEEVENTF_WHEEL 0x0800
+#define MOUSEEVENTF_HWHEEL 0x1000
+#define MOUSEEVENTF_MOVE_NOCOALESCE 0x2000
+#define MOUSEEVENTF_VIRTUALDESK 0x4000
+#define MOUSEEVENTF_ABSOLUTE 0x8000
+
+/* ExitWindows() flags */
+#define EW_RESTARTWINDOWS 0x0042
+#define EW_REBOOTSYSTEM 0x0043
+#define EW_EXITANDEXECAPP 0x0044
+
+/* ExitWindowsEx() flags */
+#define EWX_LOGOFF 0
+#define EWX_SHUTDOWN 1
+#define EWX_REBOOT 2
+#define EWX_FORCE 4
+#define EWX_POWEROFF 8
+#define EWX_FORCEIFHUNG 16
+
+/* SetLastErrorEx types */
+#define SLE_ERROR 0x00000001
+#define SLE_MINORERROR 0x00000002
+#define SLE_WARNING 0x00000003
+
+/* Predefined resources */
+#define IDI_APPLICATION MAKEINTRESOURCE(32512)
+#define IDI_HAND MAKEINTRESOURCE(32513)
+#define IDI_QUESTION MAKEINTRESOURCE(32514)
+#define IDI_EXCLAMATION MAKEINTRESOURCE(32515)
+#define IDI_ASTERISK MAKEINTRESOURCE(32516)
+#define IDI_WINLOGO MAKEINTRESOURCE(32517)
+
+#define IDI_WARNING IDI_EXCLAMATION
+#define IDI_ERROR IDI_HAND
+#define IDI_INFORMATION IDI_ASTERISK
+
+#define IDC_ARROW MAKEINTRESOURCE(32512)
+#define IDC_IBEAM MAKEINTRESOURCE(32513)
+#define IDC_WAIT MAKEINTRESOURCE(32514)
+#define IDC_CROSS MAKEINTRESOURCE(32515)
+#define IDC_UPARROW MAKEINTRESOURCE(32516)
+#define IDC_SIZE MAKEINTRESOURCE(32640)
+#define IDC_ICON MAKEINTRESOURCE(32641)
+#define IDC_SIZENWSE MAKEINTRESOURCE(32642)
+#define IDC_SIZENESW MAKEINTRESOURCE(32643)
+#define IDC_SIZEWE MAKEINTRESOURCE(32644)
+#define IDC_SIZENS MAKEINTRESOURCE(32645)
+#define IDC_SIZEALL MAKEINTRESOURCE(32646)
+#define IDC_NO MAKEINTRESOURCE(32648)
+#define IDC_HAND MAKEINTRESOURCE(32649)
+#define IDC_APPSTARTING MAKEINTRESOURCE(32650)
+#define IDC_HELP MAKEINTRESOURCE(32651)
+
+#define MNC_IGNORE 0
+#define MNC_CLOSE 1
+#define MNC_EXECUTE 2
+#define MNC_SELECT 3
+
+/* SystemParametersInfo */
+#define SPI_GETBEEP 1
+#define SPI_SETBEEP 2
+#define SPI_GETMOUSE 3
+#define SPI_SETMOUSE 4
+#define SPI_GETBORDER 5
+#define SPI_SETBORDER 6
+#define SPI_GETKEYBOARDSPEED 10
+#define SPI_SETKEYBOARDSPEED 11
+#define SPI_LANGDRIVER 12
+#define SPI_ICONHORIZONTALSPACING 13
+#define SPI_GETSCREENSAVETIMEOUT 14
+#define SPI_SETSCREENSAVETIMEOUT 15
+#define SPI_GETSCREENSAVEACTIVE 16
+#define SPI_SETSCREENSAVEACTIVE 17
+#define SPI_GETGRIDGRANULARITY 18
+#define SPI_SETGRIDGRANULARITY 19
+#define SPI_SETDESKWALLPAPER 20
+#define SPI_SETDESKPATTERN 21
+#define SPI_GETKEYBOARDDELAY 22
+#define SPI_SETKEYBOARDDELAY 23
+#define SPI_ICONVERTICALSPACING 24
+#define SPI_GETICONTITLEWRAP 25
+#define SPI_SETICONTITLEWRAP 26
+#define SPI_GETMENUDROPALIGNMENT 27
+#define SPI_SETMENUDROPALIGNMENT 28
+#define SPI_SETDOUBLECLKWIDTH 29
+#define SPI_SETDOUBLECLKHEIGHT 30
+#define SPI_GETICONTITLELOGFONT 31
+#define SPI_SETDOUBLECLICKTIME 32
+#define SPI_SETMOUSEBUTTONSWAP 33
+#define SPI_SETICONTITLELOGFONT 34
+#define SPI_GETFASTTASKSWITCH 35
+#define SPI_SETFASTTASKSWITCH 36
+#define SPI_SETDRAGFULLWINDOWS 37
+#define SPI_GETDRAGFULLWINDOWS 38
+#define SPI_GETNONCLIENTMETRICS 41
+#define SPI_SETNONCLIENTMETRICS 42
+#define SPI_GETMINIMIZEDMETRICS 43
+#define SPI_SETMINIMIZEDMETRICS 44
+#define SPI_GETICONMETRICS 45
+#define SPI_SETICONMETRICS 46
+#define SPI_SETWORKAREA 47
+#define SPI_GETWORKAREA 48
+#define SPI_SETPENWINDOWS 49
+#define SPI_GETFILTERKEYS 50
+#define SPI_SETFILTERKEYS 51
+#define SPI_GETTOGGLEKEYS 52
+#define SPI_SETTOGGLEKEYS 53
+#define SPI_GETMOUSEKEYS 54
+#define SPI_SETMOUSEKEYS 55
+#define SPI_GETSHOWSOUNDS 56
+#define SPI_SETSHOWSOUNDS 57
+#define SPI_GETSTICKYKEYS 58
+#define SPI_SETSTICKYKEYS 59
+#define SPI_GETACCESSTIMEOUT 60
+#define SPI_SETACCESSTIMEOUT 61
+#define SPI_GETSERIALKEYS 62
+#define SPI_SETSERIALKEYS 63
+#define SPI_GETSOUNDSENTRY 64
+#define SPI_SETSOUNDSENTRY 65
+#define SPI_GETHIGHCONTRAST 66
+#define SPI_SETHIGHCONTRAST 67
+#define SPI_GETKEYBOARDPREF 68
+#define SPI_SETKEYBOARDPREF 69
+#define SPI_GETSCREENREADER 70
+#define SPI_SETSCREENREADER 71
+#define SPI_GETANIMATION 72
+#define SPI_SETANIMATION 73
+#define SPI_GETFONTSMOOTHING 74
+#define SPI_SETFONTSMOOTHING 75
+#define SPI_SETDRAGWIDTH 76
+#define SPI_SETDRAGHEIGHT 77
+#define SPI_SETHANDHELD 78
+#define SPI_GETLOWPOWERTIMEOUT 79
+#define SPI_GETPOWEROFFTIMEOUT 80
+#define SPI_SETLOWPOWERTIMEOUT 81
+#define SPI_SETPOWEROFFTIMEOUT 82
+#define SPI_GETLOWPOWERACTIVE 83
+#define SPI_GETPOWEROFFACTIVE 84
+#define SPI_SETLOWPOWERACTIVE 85
+#define SPI_SETPOWEROFFACTIVE 86
+#define SPI_SETCURSORS 87
+#define SPI_SETICONS 88
+#define SPI_GETDEFAULTINPUTLANG 89
+#define SPI_SETDEFAULTINPUTLANG 90
+#define SPI_SETLANGTOGGLE 91
+#define SPI_GETWINDOWSEXTENSION 92
+#define SPI_SETMOUSETRAILS 93
+#define SPI_GETMOUSETRAILS 94
+#define SPI_GETSNAPTODEFBUTTON 95
+#define SPI_SETSNAPTODEFBUTTON 96
+#define SPI_SETSCREENSAVERRUNNING 97
+#define SPI_SCREENSAVERRUNNING SPI_SETSCREENSAVERRUNNING
+#define SPI_GETMOUSEHOVERWIDTH 98
+#define SPI_SETMOUSEHOVERWIDTH 99
+#define SPI_GETMOUSEHOVERHEIGHT 100
+#define SPI_SETMOUSEHOVERHEIGHT 101
+#define SPI_GETMOUSEHOVERTIME 102
+#define SPI_SETMOUSEHOVERTIME 103
+#define SPI_GETWHEELSCROLLLINES 104
+#define SPI_SETWHEELSCROLLLINES 105
+#define SPI_GETMENUSHOWDELAY 106
+#define SPI_SETMENUSHOWDELAY 107
+#define SPI_GETWHEELSCROLLCHARS 108
+#define SPI_SETWHEELSCROLLCHARS 109
+#define SPI_GETSHOWIMEUI 110
+#define SPI_SETSHOWIMEUI 111
+#define SPI_GETMOUSESPEED 112
+#define SPI_SETMOUSESPEED 113
+#define SPI_GETSCREENSAVERRUNNING 114
+#define SPI_GETDESKWALLPAPER 115
+
+#define SPI_GETACTIVEWINDOWTRACKING 0x1000
+#define SPI_SETACTIVEWINDOWTRACKING 0x1001
+#define SPI_GETMENUANIMATION 0x1002
+#define SPI_SETMENUANIMATION 0x1003
+#define SPI_GETCOMBOBOXANIMATION 0x1004
+#define SPI_SETCOMBOBOXANIMATION 0x1005
+#define SPI_GETLISTBOXSMOOTHSCROLLING 0x1006
+#define SPI_SETLISTBOXSMOOTHSCROLLING 0x1007
+#define SPI_GETGRADIENTCAPTIONS 0x1008
+#define SPI_SETGRADIENTCAPTIONS 0x1009
+#define SPI_GETKEYBOARDCUES 0x100A
+#define SPI_SETKEYBOARDCUES 0x100B
+#define SPI_GETMENUUNDERLINES SPI_GETKEYBOARDCUES
+#define SPI_SETMENUUNDERLINES SPI_SETKEYBOARDCUES
+#define SPI_GETACTIVEWNDTRKZORDER 0x100C
+#define SPI_SETACTIVEWNDTRKZORDER 0x100D
+#define SPI_GETHOTTRACKING 0x100E
+#define SPI_SETHOTTRACKING 0x100F
+#define SPI_GETMENUFADE 0x1012
+#define SPI_SETMENUFADE 0x1013
+#define SPI_GETSELECTIONFADE 0x1014
+#define SPI_SETSELECTIONFADE 0x1015
+#define SPI_GETTOOLTIPANIMATION 0x1016
+#define SPI_SETTOOLTIPANIMATION 0x1017
+#define SPI_GETTOOLTIPFADE 0x1018
+#define SPI_SETTOOLTIPFADE 0x1019
+#define SPI_GETCURSORSHADOW 0x101A
+#define SPI_SETCURSORSHADOW 0x101B
+#define SPI_GETMOUSESONAR 0x101C
+#define SPI_SETMOUSESONAR 0x101D
+#define SPI_GETMOUSECLICKLOCK 0x101E
+#define SPI_SETMOUSECLICKLOCK 0x101F
+#define SPI_GETMOUSEVANISH 0x1020
+#define SPI_SETMOUSEVANISH 0x1021
+#define SPI_GETFLATMENU 0x1022
+#define SPI_SETFLATMENU 0x1023
+#define SPI_GETDROPSHADOW 0x1024
+#define SPI_SETDROPSHADOW 0x1025
+#define SPI_GETBLOCKSENDINPUTRESETS 0x1026
+#define SPI_SETBLOCKSENDINPUTRESETS 0x1027
+#define SPI_GETUIEFFECTS 0x103E
+#define SPI_SETUIEFFECTS 0x103F
+#define SPI_GETDISABLEOVERLAPPEDCONTENT 0x1040
+#define SPI_SETDISABLEOVERLAPPEDCONTENT 0x1041
+#define SPI_GETCLIENTAREAANIMATION 0x1042
+#define SPI_SETCLIENTAREAANIMATION 0x1043
+#define SPI_GETCLEARTYPE 0x1048
+#define SPI_SETCLEARTYPE 0x1049
+#define SPI_GETSPEECHRECOGNITION 0x104A
+#define SPI_SETSPEECHRECOGNITION 0x104B
+#define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000
+#define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001
+#define SPI_GETACTIVEWNDTRKTIMEOUT 0x2002
+#define SPI_SETACTIVEWNDTRKTIMEOUT 0x2003
+#define SPI_GETFOREGROUNDFLASHCOUNT 0x2004
+#define SPI_SETFOREGROUNDFLASHCOUNT 0x2005
+#define SPI_GETCARETWIDTH 0x2006
+#define SPI_SETCARETWIDTH 0x2007
+#define SPI_GETMOUSECLICKLOCKTIME 0x2008
+#define SPI_SETMOUSECLICKLOCKTIME 0x2009
+#define SPI_GETFONTSMOOTHINGTYPE 0x200A
+#define SPI_SETFONTSMOOTHINGTYPE 0x200B
+#define SPI_GETFONTSMOOTHINGCONTRAST 0x200C
+#define SPI_SETFONTSMOOTHINGCONTRAST 0x200D
+#define SPI_GETFOCUSBORDERWIDTH 0x200E
+#define SPI_SETFOCUSBORDERWIDTH 0x200F
+#define SPI_GETFOCUSBORDERHEIGHT 0x2010
+#define SPI_SETFOCUSBORDERHEIGHT 0x2011
+#define SPI_GETFONTSMOOTHINGORIENTATION 0x2012
+#define SPI_SETFONTSMOOTHINGORIENTATION 0x2013
+
+#define FE_FONTSMOOTHINGSTANDARD 0x0001
+#define FE_FONTSMOOTHINGCLEARTYPE 0x0002
+#define FE_FONTSMOOTHINGDOCKING 0x8000
+
+#define FE_FONTSMOOTHINGORIENTATIONBGR 0x0000
+#define FE_FONTSMOOTHINGORIENTATIONRGB 0x0001
+
+#define SETWALLPAPER_DEFAULT ((LPWSTR)-1)
+
+/* SystemParametersInfo flags */
+
+#define SPIF_UPDATEINIFILE 1
+#define SPIF_SENDWININICHANGE 2
+#define SPIF_SENDCHANGE SPIF_SENDWININICHANGE
+
+#if defined(_WINGDI_) && !defined(NOGDI)
+typedef struct tagNONCLIENTMETRICSA {
+ UINT cbSize;
+ INT iBorderWidth;
+ INT iScrollWidth;
+ INT iScrollHeight;
+ INT iCaptionWidth;
+ INT iCaptionHeight;
+ LOGFONTA lfCaptionFont;
+ INT iSmCaptionWidth;
+ INT iSmCaptionHeight;
+ LOGFONTA lfSmCaptionFont;
+ INT iMenuWidth;
+ INT iMenuHeight;
+ LOGFONTA lfMenuFont;
+ LOGFONTA lfStatusFont;
+ LOGFONTA lfMessageFont;
+ INT iPaddedBorderWidth;
+} NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, *LPNONCLIENTMETRICSA;
+
+typedef struct tagNONCLIENTMETRICSW {
+ UINT cbSize;
+ INT iBorderWidth;
+ INT iScrollWidth;
+ INT iScrollHeight;
+ INT iCaptionWidth;
+ INT iCaptionHeight;
+ LOGFONTW lfCaptionFont;
+ INT iSmCaptionWidth;
+ INT iSmCaptionHeight;
+ LOGFONTW lfSmCaptionFont;
+ INT iMenuWidth;
+ INT iMenuHeight;
+ LOGFONTW lfMenuFont;
+ LOGFONTW lfStatusFont;
+ LOGFONTW lfMessageFont;
+ INT iPaddedBorderWidth;
+} NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, *LPNONCLIENTMETRICSW;
+
+DECL_WINELIB_TYPE_AW(NONCLIENTMETRICS)
+DECL_WINELIB_TYPE_AW(PNONCLIENTMETRICS)
+DECL_WINELIB_TYPE_AW(LPNONCLIENTMETRICS)
+
+typedef struct tagICONMETRICSA {
+ UINT cbSize;
+ int iHorzSpacing;
+ int iVertSpacing;
+ int iTitleWrap;
+ LOGFONTA lfFont;
+} ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA;
+
+typedef struct tagICONMETRICSW {
+ UINT cbSize;
+ int iHorzSpacing;
+ int iVertSpacing;
+ int iTitleWrap;
+ LOGFONTW lfFont;
+} ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW;
+
+DECL_WINELIB_TYPE_AW(ICONMETRICS)
+DECL_WINELIB_TYPE_AW(PICONMETRICS)
+DECL_WINELIB_TYPE_AW(LPICONMETRICS)
+
+typedef struct tagUPDATELAYEREDWINDOWINFO
+{
+ DWORD cbSize;
+ HDC hdcDst;
+ POINT const* pptDst;
+ SIZE const* psize;
+ HDC hdcSrc;
+ POINT const* pptSrc;
+ COLORREF crKey;
+ BLENDFUNCTION const* pblend;
+ DWORD dwFlags;
+ RECT const* prcDirty;
+} UPDATELAYEREDWINDOWINFO, *PUPDATELAYEREDWINDOWINFO;
+
+#endif /* defined(_WINGDI_) && !defined(NOGDI) */
+
+#define ARW_BOTTOMLEFT __MSABI_LONG(0x0000)
+#define ARW_BOTTOMRIGHT __MSABI_LONG(0x0001)
+#define ARW_TOPLEFT __MSABI_LONG(0x0002)
+#define ARW_TOPRIGHT __MSABI_LONG(0x0003)
+#define ARW_STARTMASK __MSABI_LONG(0x0003)
+#define ARW_STARTRIGHT __MSABI_LONG(0x0001)
+#define ARW_STARTTOP __MSABI_LONG(0x0002)
+
+#define ARW_LEFT __MSABI_LONG(0x0000)
+#define ARW_RIGHT __MSABI_LONG(0x0000)
+#define ARW_UP __MSABI_LONG(0x0004)
+#define ARW_DOWN __MSABI_LONG(0x0004)
+#define ARW_HIDE __MSABI_LONG(0x0008)
+
+typedef struct tagMINIMIZEDMETRICS {
+ UINT cbSize;
+ int iWidth;
+ int iHorzGap;
+ int iVertGap;
+ int iArrange;
+} MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;
+
+
+/* Window scrolling */
+#define SW_SCROLLCHILDREN 0x0001
+#define SW_INVALIDATE 0x0002
+#define SW_ERASE 0x0004
+
+/* CreateWindow() coordinates */
+#define CW_USEDEFAULT ((INT)0x80000000)
+
+/* ChildWindowFromPointEx Flags */
+#define CWP_ALL 0x0000
+#define CWP_SKIPINVISIBLE 0x0001
+#define CWP_SKIPDISABLED 0x0002
+#define CWP_SKIPTRANSPARENT 0x0004
+
+ /* PeekMessage() options */
+#define PM_NOREMOVE 0x0000
+#define PM_REMOVE 0x0001
+#define PM_NOYIELD 0x0002
+#define PM_QS_INPUT (QS_INPUT << 16)
+#define PM_QS_POSTMESSAGE ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
+#define PM_QS_PAINT (QS_PAINT << 16)
+#define PM_QS_SENDMESSAGE (QS_SENDMESSAGE << 16)
+
+/* SetTimer() limits */
+#define USER_TIMER_MINIMUM 0x0000000A
+#define USER_TIMER_MAXIMUM 0x7FFFFFFF
+
+/* AnimateWindow() flags */
+#define AW_SLIDE 0x00040000
+#define AW_ACTIVATE 0x00020000
+#define AW_BLEND 0x00080000
+#define AW_HIDE 0x00010000
+#define AW_CENTER 0x00000010
+#define AW_HOR_POSITIVE 0x00000001
+#define AW_HOR_NEGATIVE 0x00000002
+#define AW_VER_POSITIVE 0x00000004
+#define AW_VER_NEGATIVE 0x00000008
+
+/* FlashWindowEx() flags */
+#define FLASHW_STOP 0x00000000
+#define FLASHW_CAPTION 0x00000001
+#define FLASHW_TRAY 0x00000002
+#define FLASHW_ALL (FLASHW_CAPTION|FLASHW_TRAY)
+#define FLASHW_TIMER 0x00000004
+#define FLASHW_TIMERNOFG 0x0000000C
+
+typedef struct {
+ UINT cbSize;
+ HWND hwnd;
+ DWORD dwFlags;
+ UINT uCount;
+ DWORD dwTimeout;
+} FLASHWINFO, *PFLASHWINFO;
+
+/* SetLayeredWindowAttributes() flags */
+#define LWA_COLORKEY 0x00000001
+#define LWA_ALPHA 0x00000002
+
+/* UpdateLayeredWindow() flags */
+#define ULW_COLORKEY 0x00000001
+#define ULW_ALPHA 0x00000002
+#define ULW_OPAQUE 0x00000004
+#define ULW_EX_NORESIZE 0x00000008
+
+/* SetWindowPos() and WINDOWPOS flags */
+#define SWP_NOSIZE 0x0001
+#define SWP_NOMOVE 0x0002
+#define SWP_NOZORDER 0x0004
+#define SWP_NOREDRAW 0x0008
+#define SWP_NOACTIVATE 0x0010
+#define SWP_FRAMECHANGED 0x0020 /* The frame changed: send WM_NCCALCSIZE */
+#define SWP_SHOWWINDOW 0x0040
+#define SWP_HIDEWINDOW 0x0080
+#define SWP_NOCOPYBITS 0x0100
+#define SWP_NOOWNERZORDER 0x0200 /* Don't do owner Z ordering */
+
+#define SWP_DRAWFRAME SWP_FRAMECHANGED
+#define SWP_NOREPOSITION SWP_NOOWNERZORDER
+
+#define SWP_NOSENDCHANGING 0x0400
+#define SWP_DEFERERASE 0x2000
+#define SWP_ASYNCWINDOWPOS 0x4000
+
+/* undocumented SWP flags - from SDK 3.1 */
+#define SWP_NOCLIENTSIZE 0x0800
+#define SWP_NOCLIENTMOVE 0x1000
+#define SWP_STATECHANGED 0x8000
+
+#define HWND_DESKTOP ((HWND)0)
+#define HWND_BROADCAST ((HWND)0xffff)
+
+/* SetWindowPos() hwndInsertAfter field values */
+#define HWND_TOP ((HWND)0)
+#define HWND_BOTTOM ((HWND)1)
+#define HWND_TOPMOST ((HWND)-1)
+#define HWND_NOTOPMOST ((HWND)-2)
+#define HWND_MESSAGE ((HWND)-3)
+
+/* GetDCEx flags */
+#define DCX_WINDOW 0x00000001
+#define DCX_CACHE 0x00000002
+#define DCX_NORESETATTRS 0x00000004
+#define DCX_CLIPCHILDREN 0x00000008
+#define DCX_CLIPSIBLINGS 0x00000010
+#define DCX_PARENTCLIP 0x00000020
+#define DCX_EXCLUDERGN 0x00000040
+#define DCX_INTERSECTRGN 0x00000080
+#define DCX_EXCLUDEUPDATE 0x00000100
+#define DCX_INTERSECTUPDATE 0x00000200
+#define DCX_LOCKWINDOWUPDATE 0x00000400
+#define DCX_USESTYLE 0x00010000
+#define DCX_NORECOMPUTE 0x00100000
+#define DCX_VALIDATE 0x00200000
+
+
+
+/* for GetMenuDefaultItem */
+#define GMDI_USEDISABLED __MSABI_LONG(0x0001)
+#define GMDI_GOINTOPOPUPS __MSABI_LONG(0x0002)
+
+/* DrawText() flags */
+#define DT_TOP 0x00000000
+#define DT_LEFT 0x00000000
+#define DT_CENTER 0x00000001
+#define DT_RIGHT 0x00000002
+#define DT_VCENTER 0x00000004
+#define DT_BOTTOM 0x00000008
+#define DT_WORDBREAK 0x00000010
+#define DT_SINGLELINE 0x00000020
+#define DT_EXPANDTABS 0x00000040
+#define DT_TABSTOP 0x00000080
+#define DT_NOCLIP 0x00000100
+#define DT_EXTERNALLEADING 0x00000200
+#define DT_CALCRECT 0x00000400
+#define DT_NOPREFIX 0x00000800
+#define DT_INTERNAL 0x00001000
+#define DT_EDITCONTROL 0x00002000
+#define DT_PATH_ELLIPSIS 0x00004000
+#define DT_END_ELLIPSIS 0x00008000
+#define DT_MODIFYSTRING 0x00010000
+#define DT_RTLREADING 0x00020000
+#define DT_WORD_ELLIPSIS 0x00040000
+#define DT_NOFULLWIDTHCHARBREAK 0x00080000
+#define DT_HIDEPREFIX 0x00100000
+#define DT_PREFIXONLY 0x00200000
+
+/* DrawCaption()/DrawCaptionTemp() flags */
+#define DC_ACTIVE 0x0001
+#define DC_SMALLCAP 0x0002
+#define DC_ICON 0x0004
+#define DC_TEXT 0x0008
+#define DC_INBUTTON 0x0010
+#define DC_GRADIENT 0x0020
+#define DC_BUTTONS 0x1000
+
+/* DrawEdge() flags */
+#define BDR_RAISEDOUTER 0x0001
+#define BDR_SUNKENOUTER 0x0002
+#define BDR_RAISEDINNER 0x0004
+#define BDR_SUNKENINNER 0x0008
+
+#define BDR_OUTER 0x0003
+#define BDR_INNER 0x000c
+#define BDR_RAISED 0x0005
+#define BDR_SUNKEN 0x000a
+
+#define EDGE_RAISED (BDR_RAISEDOUTER | BDR_RAISEDINNER)
+#define EDGE_SUNKEN (BDR_SUNKENOUTER | BDR_SUNKENINNER)
+#define EDGE_ETCHED (BDR_SUNKENOUTER | BDR_RAISEDINNER)
+#define EDGE_BUMP (BDR_RAISEDOUTER | BDR_SUNKENINNER)
+
+/* border flags */
+#define BF_LEFT 0x0001
+#define BF_TOP 0x0002
+#define BF_RIGHT 0x0004
+#define BF_BOTTOM 0x0008
+#define BF_DIAGONAL 0x0010
+#define BF_MIDDLE 0x0800 /* Fill in the middle */
+#define BF_SOFT 0x1000 /* For softer buttons */
+#define BF_ADJUST 0x2000 /* Calculate the space left over */
+#define BF_FLAT 0x4000 /* For flat rather than 3D borders */
+#define BF_MONO 0x8000 /* For monochrome borders */
+#define BF_TOPLEFT (BF_TOP | BF_LEFT)
+#define BF_TOPRIGHT (BF_TOP | BF_RIGHT)
+#define BF_BOTTOMLEFT (BF_BOTTOM | BF_LEFT)
+#define BF_BOTTOMRIGHT (BF_BOTTOM | BF_RIGHT)
+#define BF_RECT (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM)
+#define BF_DIAGONAL_ENDTOPRIGHT (BF_DIAGONAL | BF_TOP | BF_RIGHT)
+#define BF_DIAGONAL_ENDTOPLEFT (BF_DIAGONAL | BF_TOP | BF_LEFT)
+#define BF_DIAGONAL_ENDBOTTOMLEFT (BF_DIAGONAL | BF_BOTTOM | BF_LEFT)
+#define BF_DIAGONAL_ENDBOTTOMRIGHT (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT)
+
+/* DrawFrameControl() uType's */
+
+#define DFC_CAPTION 1
+#define DFC_MENU 2
+#define DFC_SCROLL 3
+#define DFC_BUTTON 4
+#define DFC_POPUPMENU 5
+
+/* uState's */
+
+#define DFCS_CAPTIONCLOSE 0x0000
+#define DFCS_CAPTIONMIN 0x0001
+#define DFCS_CAPTIONMAX 0x0002
+#define DFCS_CAPTIONRESTORE 0x0003
+#define DFCS_CAPTIONHELP 0x0004 /* Windows 95 only */
+
+#define DFCS_MENUARROW 0x0000
+#define DFCS_MENUCHECK 0x0001
+#define DFCS_MENUBULLET 0x0002
+#define DFCS_MENUARROWRIGHT 0x0004
+
+#define DFCS_SCROLLUP 0x0000
+#define DFCS_SCROLLDOWN 0x0001
+#define DFCS_SCROLLLEFT 0x0002
+#define DFCS_SCROLLRIGHT 0x0003
+#define DFCS_SCROLLCOMBOBOX 0x0005
+#define DFCS_SCROLLSIZEGRIP 0x0008
+#define DFCS_SCROLLSIZEGRIPRIGHT 0x0010
+
+#define DFCS_BUTTONCHECK 0x0000
+#define DFCS_BUTTONRADIOIMAGE 0x0001
+#define DFCS_BUTTONRADIOMASK 0x0002 /* to draw nonsquare button */
+#define DFCS_BUTTONRADIO 0x0004
+#define DFCS_BUTTON3STATE 0x0008
+#define DFCS_BUTTONPUSH 0x0010
+
+/* additional state of the control */
+
+#define DFCS_INACTIVE 0x0100
+#define DFCS_PUSHED 0x0200
+#define DFCS_CHECKED 0x0400
+#define DFCS_TRANSPARENT 0x0800
+#define DFCS_HOT 0x1000
+#define DFCS_ADJUSTRECT 0x2000 /* exclude surrounding edge */
+#define DFCS_FLAT 0x4000
+#define DFCS_MONO 0x8000
+
+
+/* Image type */
+#define DST_COMPLEX 0x0000
+#define DST_TEXT 0x0001
+#define DST_PREFIXTEXT 0x0002
+#define DST_ICON 0x0003
+#define DST_BITMAP 0x0004
+
+/* State type */
+#define DSS_NORMAL 0x0000
+#define DSS_UNION 0x0010 /* Gray string appearance */
+#define DSS_DISABLED 0x0020
+#define DSS_DEFAULT 0x0040 /* Make it bold */
+#define DSS_MONO 0x0080
+#define DSS_HIDEPREFIX 0x0200
+#define DSS_PREFIXONLY 0x0400
+#define DSS_RIGHT 0x8000
+
+/* UserObjectInformation classes */
+#define UOI_FLAGS 1
+#define UOI_NAME 2
+#define UOI_TYPE 3
+#define UOI_USER_SID 4
+
+
+/* Sent as the lParam of a WM_DRAWITEM message to instruct how an
+ * owner drawn control is to be drawn */
+typedef struct tagDRAWITEMSTRUCT
+{
+ UINT CtlType; /* Type of control (ODT_* flags from "winuser.h") */
+ UINT CtlID; /* Control ID */
+ UINT itemID; /* Menu item ID */
+ UINT itemAction; /* Action to perform (ODA_* flags from "winuser.h") */
+ UINT itemState; /* Item state (ODS_* flags from "winuser.h") */
+ HWND hwndItem; /* Control window */
+ HDC hDC; /* Device context to draw to */
+ RECT rcItem; /* Position of the control in hDC */
+ ULONG_PTR itemData; /* Extra data added by the application, if any */
+} DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;
+
+
+typedef struct tagMEASUREITEMSTRUCT
+{
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ UINT itemWidth;
+ UINT itemHeight;
+ ULONG_PTR itemData;
+} MEASUREITEMSTRUCT, *PMEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;
+
+
+typedef struct tagDELETEITEMSTRUCT
+{
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ HWND hwndItem;
+ ULONG_PTR itemData;
+} DELETEITEMSTRUCT, *PDELETEITEMSTRUCT, *LPDELETEITEMSTRUCT;
+
+
+typedef struct tagCOMPAREITEMSTRUCT
+{
+ UINT CtlType;
+ UINT CtlID;
+ HWND hwndItem;
+ UINT itemID1;
+ ULONG_PTR itemData1;
+ UINT itemID2;
+ ULONG_PTR itemData2;
+ DWORD dwLocaleId;
+} COMPAREITEMSTRUCT, *PCOMPAREITEMSTRUCT, *LPCOMPAREITEMSTRUCT;
+
+
+/* WM_KEYUP/DOWN/CHAR HIWORD(lParam) flags */
+#define KF_EXTENDED 0x0100
+#define KF_DLGMODE 0x0800
+#define KF_MENUMODE 0x1000
+#define KF_ALTDOWN 0x2000
+#define KF_REPEAT 0x4000
+#define KF_UP 0x8000
+
+
+/* MapVirtualKey translation types */
+#define MAPVK_VK_TO_VSC 0
+#define MAPVK_VSC_TO_VK 1
+#define MAPVK_VK_TO_CHAR 2
+#define MAPVK_VSC_TO_VK_EX 3
+#define MAPVK_VK_TO_VSC_EX 4
+
+
+
+typedef struct tagTRACKMOUSEEVENT {
+ DWORD cbSize;
+ DWORD dwFlags;
+ HWND hwndTrack;
+ DWORD dwHoverTime;
+} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
+
+ /* Queue status flags */
+#define QS_KEY 0x0001
+#define QS_MOUSEMOVE 0x0002
+#define QS_MOUSEBUTTON 0x0004
+#define QS_MOUSE (QS_MOUSEMOVE | QS_MOUSEBUTTON)
+#define QS_POSTMESSAGE 0x0008
+#define QS_TIMER 0x0010
+#define QS_PAINT 0x0020
+#define QS_SENDMESSAGE 0x0040
+#define QS_HOTKEY 0x0080
+#define QS_ALLPOSTMESSAGE 0x0100
+#define QS_RAWINPUT 0x0400
+#define QS_INPUT (QS_MOUSE | QS_KEY | QS_RAWINPUT)
+#define QS_ALLEVENTS (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY)
+#define QS_ALLINPUT (QS_ALLEVENTS | QS_SENDMESSAGE)
+
+/* Extra (undocumented) queue wake bits - see "Undoc. Windows" */
+#define QS_SMRESULT 0x8000
+
+/* InSendMessageEx flags */
+#define ISMEX_NOSEND 0x00000000
+#define ISMEX_SEND 0x00000001
+#define ISMEX_NOTIFY 0x00000002
+#define ISMEX_CALLBACK 0x00000004
+#define ISMEX_REPLIED 0x00000008
+
+#define DDL_READWRITE 0x0000
+#define DDL_READONLY 0x0001
+#define DDL_HIDDEN 0x0002
+#define DDL_SYSTEM 0x0004
+#define DDL_DIRECTORY 0x0010
+#define DDL_ARCHIVE 0x0020
+
+#define DDL_POSTMSGS 0x2000
+#define DDL_DRIVES 0x4000
+#define DDL_EXCLUSIVE 0x8000
+
+ /* Shell hook values */
+#define HSHELL_WINDOWCREATED 1
+#define HSHELL_WINDOWDESTROYED 2
+#define HSHELL_ACTIVATESHELLWINDOW 3
+#define HSHELL_WINDOWACTIVATED 4
+#define HSHELL_GETMINRECT 5
+#define HSHELL_REDRAW 6
+#define HSHELL_TASKMAN 7
+#define HSHELL_LANGUAGE 8
+#define HSHELL_SYSMENU 9
+#define HSHELL_ENDTASK 10
+#define HSHELL_ACCESSIBILITYSTATE 11
+#define HSHELL_APPCOMMAND 12
+#define HSHELL_WINDOWREPLACED 13
+#define HSHELL_WINDOWREPLACING 14
+
+#define HSHELL_HIGHBIT 0x8000
+#define HSHELL_FLASH (HSHELL_REDRAW|HSHELL_HIGHBIT)
+#define HSHELL_RUDEAPPACTIVATED (HSHELL_WINDOWACTIVATED|HSHELL_HIGHBIT)
+
+/* App commands */
+#define APPCOMMAND_BROWSER_BACKWARD 1
+#define APPCOMMAND_BROWSER_FORWARD 2
+#define APPCOMMAND_BROWSER_REFRESH 3
+#define APPCOMMAND_BROWSER_STOP 4
+#define APPCOMMAND_BROWSER_SEARCH 5
+#define APPCOMMAND_BROWSER_FAVORITES 6
+#define APPCOMMAND_BROWSER_HOME 7
+#define APPCOMMAND_VOLUME_MUTE 8
+#define APPCOMMAND_VOLUME_DOWN 9
+#define APPCOMMAND_VOLUME_UP 10
+#define APPCOMMAND_MEDIA_NEXTTRACK 11
+#define APPCOMMAND_MEDIA_PREVIOUSTRACK 12
+#define APPCOMMAND_MEDIA_STOP 13
+#define APPCOMMAND_MEDIA_PLAY_PAUSE 14
+#define APPCOMMAND_LAUNCH_MAIL 15
+#define APPCOMMAND_LAUNCH_MEDIA_SELECT 16
+#define APPCOMMAND_LAUNCH_APP1 17
+#define APPCOMMAND_LAUNCH_APP2 18
+#define APPCOMMAND_BASS_DOWN 19
+#define APPCOMMAND_BASS_BOOST 20
+#define APPCOMMAND_BASS_UP 21
+#define APPCOMMAND_TREBLE_DOWN 22
+#define APPCOMMAND_TREBLE_UP 23
+#define APPCOMMAND_MICROPHONE_VOLUME_MUTE 24
+#define APPCOMMAND_MICROPHONE_VOLUME_DOWN 25
+#define APPCOMMAND_MICROPHONE_VOLUME_UP 26
+#define APPCOMMAND_HELP 27
+#define APPCOMMAND_FIND 28
+#define APPCOMMAND_NEW 29
+#define APPCOMMAND_OPEN 30
+#define APPCOMMAND_CLOSE 31
+#define APPCOMMAND_SAVE 32
+#define APPCOMMAND_PRINT 33
+#define APPCOMMAND_UNDO 34
+#define APPCOMMAND_REDO 35
+#define APPCOMMAND_COPY 36
+#define APPCOMMAND_CUT 37
+#define APPCOMMAND_PASTE 38
+#define APPCOMMAND_REPLY_TO_MAIL 39
+#define APPCOMMAND_FORWARD_MAIL 40
+#define APPCOMMAND_SEND_MAIL 41
+#define APPCOMMAND_SPELL_CHECK 42
+#define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 43
+#define APPCOMMAND_MIC_ON_OFF_TOGGLE 44
+#define APPCOMMAND_CORRECTION_LIST 45
+#define APPCOMMAND_MEDIA_PLAY 46
+#define APPCOMMAND_MEDIA_PAUSE 47
+#define APPCOMMAND_MEDIA_RECORD 48
+#define APPCOMMAND_MEDIA_FAST_FORWARD 49
+#define APPCOMMAND_MEDIA_REWIND 50
+#define APPCOMMAND_MEDIA_CHANNEL_UP 51
+#define APPCOMMAND_MEDIA_CHANNEL_DOWN 52
+#define APPCOMMAND_DELETE 53
+#define APPCOMMAND_DWM_FLIP3D 54
+
+#define FAPPCOMMAND_MOUSE 0x8000
+#define FAPPCOMMAND_KEY 0
+#define FAPPCOMMAND_OEM 0x1000
+#define FAPPCOMMAND_MASK 0xF000
+
+#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))
+#define GET_DEVICE_LPARAM(lParam) ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))
+#define GET_MOUSEORKEY_LPARAM GET_DEVICE_LPARAM
+#define GET_FLAGS_LPARAM(lParam) (LOWORD(lParam))
+#define GET_KEYSTATE_LPARAM(lParam) GET_FLAGS_LPARAM(lParam)
+
+
+/* types of LoadImage */
+#define IMAGE_BITMAP 0
+#define IMAGE_ICON 1
+#define IMAGE_CURSOR 2
+#define IMAGE_ENHMETAFILE 3
+
+/* loadflags to LoadImage */
+#define LR_DEFAULTCOLOR 0x0000
+#define LR_MONOCHROME 0x0001
+#define LR_COLOR 0x0002
+#define LR_COPYRETURNORG 0x0004
+#define LR_COPYDELETEORG 0x0008
+#define LR_LOADFROMFILE 0x0010
+#define LR_LOADTRANSPARENT 0x0020
+#define LR_DEFAULTSIZE 0x0040
+#define LR_VGA_COLOR 0x0080
+#define LR_LOADMAP3DCOLORS 0x1000
+#define LR_CREATEDIBSECTION 0x2000
+#define LR_COPYFROMRESOURCE 0x4000
+#define LR_SHARED 0x8000
+
+/* Flags for DrawIconEx. */
+#define DI_MASK 0x0001
+#define DI_IMAGE 0x0002
+#define DI_NORMAL (DI_MASK | DI_IMAGE)
+#define DI_COMPAT 0x0004
+#define DI_DEFAULTSIZE 0x0008
+#define DI_NOMIRROR 0x0010
+
+/* RegisterDeviceNotification stuff */
+typedef PVOID HDEVNOTIFY;
+typedef HDEVNOTIFY *PHDEVNOTIFY;
+
+#define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000
+
+/* used for GetWindowInfo() */
+
+#define WS_ACTIVECAPTION 0x0001
+
+typedef struct tagWINDOWINFO {
+ DWORD cbSize;
+ RECT rcWindow;
+ RECT rcClient;
+ DWORD dwStyle;
+ DWORD dwExStyle;
+ DWORD dwWindowStatus;
+ UINT cxWindowBorders;
+ UINT cyWindowBorders;
+ ATOM atomWindowType;
+ WORD wCreatorVersion;
+} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
+
+/* used for GetTitleBarInfo() */
+
+#define CCHILDREN_TITLEBAR 5
+
+typedef struct tagTITLEBARINFO {
+ DWORD cbSize;
+ RECT rcTitleBar;
+ DWORD rgstate[CCHILDREN_TITLEBAR+1];
+} TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;
+
+/* used by GetLastInputInfo */
+typedef struct tagLASTINPUTINFO {
+ UINT cbSize;
+ DWORD dwTime;
+} LASTINPUTINFO, *PLASTINPUTINFO;
+
+/* used by GetAltTabInfo */
+typedef struct
+{
+ DWORD cbSize;
+ INT cItems;
+ INT cColumns;
+ INT cRows;
+ INT iColFocus;
+ INT iRowFocus;
+ INT cxItem;
+ INT cyItem;
+ POINT ptStart;
+} ALTTABINFO, *PALTTABINFO, *LPALTTABINFO;
+
+/* SetWinEventHook() flags */
+#define WINEVENT_OUTOFCONTEXT 0x0
+#define WINEVENT_SKIPOWNTHREAD 0x1
+#define WINEVENT_SKIPOWNPROCESS 0x2
+#define WINEVENT_INCONTEXT 0x4
+
+#define ENDSESSION_LOGOFF 0x80000000
+
+/* Object Id's */
+#define CHILDID_SELF 0
+#define INDEXID_OBJECT 0
+#define INDEXID_CONTAINER 0
+
+/* System object Id's */
+#define OBJID_WINDOW 0
+#define OBJID_SYSMENU -1
+#define OBJID_TITLEBAR -2
+#define OBJID_MENU -3
+#define OBJID_CLIENT -4
+#define OBJID_VSCROLL -5
+#define OBJID_HSCROLL -6
+#define OBJID_SIZEGRIP -7
+#define OBJID_CARET -8
+#define OBJID_CURSOR -9
+#define OBJID_ALERT -10
+#define OBJID_SOUND -11
+#define OBJID_QUERYCLASSNAMEIDX -12
+#define OBJID_NATIVEOM -16
+
+/* User event Id limits */
+#define EVENT_MIN 0x00000001
+#define EVENT_MAX 0x7FFFFFFF
+
+/* System events */
+#define EVENT_SYSTEM_SOUND 0x01
+#define EVENT_SYSTEM_ALERT 0x02
+#define EVENT_SYSTEM_FOREGROUND 0x03
+#define EVENT_SYSTEM_MENUSTART 0x04
+#define EVENT_SYSTEM_MENUEND 0x05
+#define EVENT_SYSTEM_MENUPOPUPSTART 0x06
+#define EVENT_SYSTEM_MENUPOPUPEND 0x07
+#define EVENT_SYSTEM_CAPTURESTART 0x08
+#define EVENT_SYSTEM_CAPTUREEND 0x09
+#define EVENT_SYSTEM_MOVESIZESTART 0x0A
+#define EVENT_SYSTEM_MOVESIZEEND 0x0B
+#define EVENT_SYSTEM_CONTEXTHELPSTART 0x0C
+#define EVENT_SYSTEM_CONTEXTHELPEND 0x0D
+#define EVENT_SYSTEM_DRAGDROPSTART 0x0E
+#define EVENT_SYSTEM_DRAGDROPEND 0x0F
+#define EVENT_SYSTEM_DIALOGSTART 0x10
+#define EVENT_SYSTEM_DIALOGEND 0x11
+#define EVENT_SYSTEM_SCROLLINGSTART 0x12
+#define EVENT_SYSTEM_SCROLLINGEND 0x13
+#define EVENT_SYSTEM_SWITCHSTART 0x14
+#define EVENT_SYSTEM_SWITCHEND 0x15
+#define EVENT_SYSTEM_MINIMIZESTART 0x16
+#define EVENT_SYSTEM_MINIMIZEEND 0x17
+
+/* Console events */
+#define EVENT_CONSOLE_CARET 0x4001
+#define EVENT_CONSOLE_UPDATE_REGION 0x4002
+#define EVENT_CONSOLE_UPDATE_SIMPLE 0x4003
+#define EVENT_CONSOLE_UPDATE_SCROLL 0x4004
+#define EVENT_CONSOLE_LAYOUT 0x4005
+#define EVENT_CONSOLE_START_APPLICATION 0x4006
+#define EVENT_CONSOLE_END_APPLICATION 0x4007
+
+#define CONSOLE_APPLICATION_16BIT 0x1
+#define CONSOLE_CARET_SELECTION 0x1
+#define CONSOLE_CARET_VISIBLE 0x2
+
+/* Object events */
+#define EVENT_OBJECT_CREATE 0x8000
+#define EVENT_OBJECT_DESTROY 0x8001
+#define EVENT_OBJECT_SHOW 0x8002
+#define EVENT_OBJECT_HIDE 0x8003
+#define EVENT_OBJECT_REORDER 0x8004
+#define EVENT_OBJECT_FOCUS 0x8005
+#define EVENT_OBJECT_SELECTION 0x8006
+#define EVENT_OBJECT_SELECTIONADD 0x8007
+#define EVENT_OBJECT_SELECTIONREMOVE 0x8008
+#define EVENT_OBJECT_SELECTIONWITHIN 0x8009
+#define EVENT_OBJECT_STATECHANGE 0x800A
+#define EVENT_OBJECT_LOCATIONCHANGE 0x800B
+#define EVENT_OBJECT_NAMECHANGE 0x800C
+#define EVENT_OBJECT_DESCRIPTIONCHANGE 0x800D
+#define EVENT_OBJECT_VALUECHANGE 0x800E
+#define EVENT_OBJECT_PARENTCHANGE 0x800F
+#define EVENT_OBJECT_HELPCHANGE 0x8010
+#define EVENT_OBJECT_DEFACTIONCHANGE 0x8011
+#define EVENT_OBJECT_ACCELERATORCHANGE 0x8012
+
+/* Sound events */
+#define SOUND_SYSTEM_STARTUP 1
+#define SOUND_SYSTEM_SHUTDOWN 2
+#define SOUND_SYSTEM_BEEP 3
+#define SOUND_SYSTEM_ERROR 4
+#define SOUND_SYSTEM_QUESTION 5
+#define SOUND_SYSTEM_WARNING 6
+#define SOUND_SYSTEM_INFORMATION 7
+#define SOUND_SYSTEM_MAXIMIZE 8
+#define SOUND_SYSTEM_MINIMIZE 9
+#define SOUND_SYSTEM_RESTOREUP 10
+#define SOUND_SYSTEM_RESTOREDOWN 11
+#define SOUND_SYSTEM_APPSTART 12
+#define SOUND_SYSTEM_FAULT 13
+#define SOUND_SYSTEM_APPEND 14
+#define SOUND_SYSTEM_MENUCOMMAND 15
+#define SOUND_SYSTEM_MENUPOPUP 16
+#define CSOUND_SYSTEM 16
+
+/* Alert events */
+#define ALERT_SYSTEM_INFORMATIONAL 1
+#define ALERT_SYSTEM_WARNING 2
+#define ALERT_SYSTEM_ERROR 3
+#define ALERT_SYSTEM_QUERY 4
+#define ALERT_SYSTEM_CRITICAL 5
+#define CALERT_SYSTEM 6
+
+/* System state flags */
+#define STATE_SYSTEM_UNAVAILABLE 0x00000001
+#define STATE_SYSTEM_SELECTED 0x00000002
+#define STATE_SYSTEM_FOCUSED 0x00000004
+#define STATE_SYSTEM_PRESSED 0x00000008
+#define STATE_SYSTEM_CHECKED 0x00000010
+#define STATE_SYSTEM_MIXED 0x00000020
+#define STATE_SYSTEM_INDETERMINATE STATE_SYSTEM_MIXED
+#define STATE_SYSTEM_READONLY 0x00000040
+#define STATE_SYSTEM_HOTTRACKED 0x00000080
+#define STATE_SYSTEM_DEFAULT 0x00000100
+#define STATE_SYSTEM_EXPANDED 0x00000200
+#define STATE_SYSTEM_COLLAPSED 0x00000400
+#define STATE_SYSTEM_BUSY 0x00000800
+#define STATE_SYSTEM_FLOATING 0x00001000
+#define STATE_SYSTEM_MARQUEED 0x00002000
+#define STATE_SYSTEM_ANIMATED 0x00004000
+#define STATE_SYSTEM_INVISIBLE 0x00008000
+#define STATE_SYSTEM_OFFSCREEN 0x00010000
+#define STATE_SYSTEM_SIZEABLE 0x00020000
+#define STATE_SYSTEM_MOVEABLE 0x00040000
+#define STATE_SYSTEM_SELFVOICING 0x00080000
+#define STATE_SYSTEM_FOCUSABLE 0x00100000
+#define STATE_SYSTEM_SELECTABLE 0x00200000
+#define STATE_SYSTEM_LINKED 0x00400000
+#define STATE_SYSTEM_TRAVERSED 0x00800000
+#define STATE_SYSTEM_MULTISELECTABLE 0x01000000
+#define STATE_SYSTEM_EXTSELECTABLE 0x02000000
+#define STATE_SYSTEM_ALERT_LOW 0x04000000
+#define STATE_SYSTEM_ALERT_MEDIUM 0x08000000
+#define STATE_SYSTEM_ALERT_HIGH 0x10000000
+#define STATE_SYSTEM_PROTECTED 0x20000000
+#define STATE_SYSTEM_VALID 0x3FFFFFFF
+
+/* Lock codes for LockSetForegroundWindow */
+#define LSFW_LOCK 1
+#define LSFW_UNLOCK 2
+
+/* Values for AllowSetForegroundWindow */
+#define ASFW_ANY ((DWORD)-1)
+
+#define EnumTaskWindows(handle,proc,lparam) \
+ EnumThreadWindows(handle,proc,lparam)
+#define OemToAnsiA OemToCharA
+#define OemToAnsiW OemToCharW
+#define OemToAnsi WINELIB_NAME_AW(OemToAnsi)
+#define OemToAnsiBuffA OemToCharBuffA
+#define OemToAnsiBuffW OemToCharBuffW
+#define OemToAnsiBuff WINELIB_NAME_AW(OemToAnsiBuff)
+#define AnsiToOemA CharToOemA
+#define AnsiToOemW CharToOemW
+#define AnsiToOem WINELIB_NAME_AW(AnsiToOem)
+#define AnsiToOemBuffA CharToOemBuffA
+#define AnsiToOemBuffW CharToOemBuffW
+#define AnsiToOemBuff WINELIB_NAME_AW(AnsiToOemBuff)
+
+#if defined(_WINGDI_) && !defined(NOGDI)
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsA(LPDEVMODEA,DWORD);
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsW(LPDEVMODEW,DWORD);
+#define ChangeDisplaySettings WINELIB_NAME_AW(ChangeDisplaySettings)
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsExA(LPCSTR,LPDEVMODEA,HWND,DWORD,LPVOID);
+WINUSERAPI LONG WINAPI ChangeDisplaySettingsExW(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
+#define ChangeDisplaySettingsEx WINELIB_NAME_AW(ChangeDisplaySettingsEx)
+WINUSERAPI HDESK WINAPI CreateDesktopA(LPCSTR,LPCSTR,LPDEVMODEA,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+WINUSERAPI HDESK WINAPI CreateDesktopW(LPCWSTR,LPCWSTR,LPDEVMODEW,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+#define CreateDesktop WINELIB_NAME_AW(CreateDesktop)
+WINUSERAPI BOOL WINAPI EnumDisplayDevicesA(LPCSTR,DWORD,LPDISPLAY_DEVICEA,DWORD);
+WINUSERAPI BOOL WINAPI EnumDisplayDevicesW(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD);
+#define EnumDisplayDevices WINELIB_NAME_AW(EnumDisplayDevices)
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsA(LPCSTR,DWORD,LPDEVMODEA);
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsW(LPCWSTR,DWORD,LPDEVMODEW);
+#define EnumDisplaySettings WINELIB_NAME_AW(EnumDisplaySettings)
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsExA(LPCSTR,DWORD,LPDEVMODEA,DWORD);
+WINUSERAPI BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR,DWORD,LPDEVMODEW,DWORD);
+#define EnumDisplaySettingsEx WINELIB_NAME_AW(EnumDisplaySettingsEx)
+WINUSERAPI BOOL WINAPI UpdateLayeredWindow(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);
+WINUSERAPI BOOL WINAPI UpdateLayeredWindowIndirect(HWND,UPDATELAYEREDWINDOWINFO const*);
+#endif /* defined(_WINGDI_) && !defined(NOGDI) */
+
+WINUSERAPI HKL WINAPI ActivateKeyboardLayout(HKL,UINT);
+WINUSERAPI BOOL WINAPI AdjustWindowRect(LPRECT,DWORD,BOOL);
+WINUSERAPI BOOL WINAPI AdjustWindowRectEx(LPRECT,DWORD,BOOL,DWORD);
+WINUSERAPI BOOL WINAPI AllowSetForegroundWindow(DWORD);
+WINUSERAPI BOOL WINAPI AnimateWindow(HWND,DWORD,DWORD);
+#define AnsiLowerA CharLowerA
+#define AnsiLowerW CharLowerW
+#define AnsiLower WINELIB_NAME_AW(AnsiLower)
+#define AnsiLowerBuffA CharLowerBuffA
+#define AnsiLowerBuffW CharLowerBuffW
+#define AnsiLowerBuff WINELIB_NAME_AW(AnsiLowerBuff)
+#define AnsiNextA CharNextA
+#define AnsiNextW CharNextW
+#define AnsiNext WINELIB_NAME_AW(AnsiNext)
+#define AnsiPrevA CharPrevA
+#define AnsiPrevW CharPrevW
+#define AnsiPrev WINELIB_NAME_AW(AnsiPrev)
+#define AnsiUpperA CharUpperA
+#define AnsiUpperW CharUpperW
+#define AnsiUpper WINELIB_NAME_AW(AnsiUpper)
+#define AnsiUpperBuffA CharUpperBuffA
+#define AnsiUpperBuffW CharUpperBuffW
+#define AnsiUpperBuff WINELIB_NAME_AW(AnsiUpperBuff)
+WINUSERAPI BOOL WINAPI AnyPopup(void);
+WINUSERAPI BOOL WINAPI AppendMenuA(HMENU,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL WINAPI AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR);
+#define AppendMenu WINELIB_NAME_AW(AppendMenu)
+WINUSERAPI UINT WINAPI ArrangeIconicWindows(HWND);
+WINUSERAPI BOOL WINAPI AttachThreadInput(DWORD,DWORD,BOOL);
+WINUSERAPI HDWP WINAPI BeginDeferWindowPos(INT);
+WINUSERAPI HDC WINAPI BeginPaint(HWND,LPPAINTSTRUCT);
+WINUSERAPI BOOL WINAPI BringWindowToTop(HWND);
+WINUSERAPI LONG WINAPI BroadcastSystemMessageA(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+WINUSERAPI LONG WINAPI BroadcastSystemMessageW(DWORD,LPDWORD,UINT,WPARAM,LPARAM);
+#define BroadcastSystemMessage WINELIB_NAME_AW(BroadcastSystemMessage)
+WINUSERAPI LONG WINAPI BroadcastSystemMessageExA(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);
+WINUSERAPI LONG WINAPI BroadcastSystemMessageExW(DWORD,LPDWORD,UINT,WPARAM,LPARAM,PBSMINFO);
+#define BroadcastSystemMessageEx WINELIB_NAME_AW(BroadcastSystemMessageEx)
+WINUSERAPI void WINAPI CalcChildScroll(HWND, INT);
+WINUSERAPI BOOL WINAPI CallMsgFilterA(LPMSG,INT);
+WINUSERAPI BOOL WINAPI CallMsgFilterW(LPMSG,INT);
+#define CallMsgFilter WINELIB_NAME_AW(CallMsgFilter)
+WINUSERAPI LRESULT WINAPI CallNextHookEx(HHOOK,INT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI CallWindowProcA(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI CallWindowProcW(WNDPROC,HWND,UINT,WPARAM,LPARAM);
+#define CallWindowProc WINELIB_NAME_AW(CallWindowProc)
+WINUSERAPI WORD WINAPI CascadeWindows(HWND, UINT, const RECT *, UINT, const HWND *);
+WINUSERAPI BOOL WINAPI ChangeClipboardChain(HWND,HWND);
+WINUSERAPI BOOL WINAPI ChangeMenuA(HMENU,UINT,LPCSTR,UINT,UINT);
+WINUSERAPI BOOL WINAPI ChangeMenuW(HMENU,UINT,LPCWSTR,UINT,UINT);
+#define ChangeMenu WINELIB_NAME_AW(ChangeMenu)
+WINUSERAPI LPSTR WINAPI CharLowerA(LPSTR);
+WINUSERAPI LPWSTR WINAPI CharLowerW(LPWSTR);
+#define CharLower WINELIB_NAME_AW(CharLower)
+WINUSERAPI DWORD WINAPI CharLowerBuffA(LPSTR,DWORD);
+WINUSERAPI DWORD WINAPI CharLowerBuffW(LPWSTR,DWORD);
+#define CharLowerBuff WINELIB_NAME_AW(CharLowerBuff)
+WINUSERAPI LPSTR WINAPI CharNextA(LPCSTR);
+WINUSERAPI LPWSTR WINAPI CharNextW(LPCWSTR);
+#define CharNext WINELIB_NAME_AW(CharNext)
+WINUSERAPI LPSTR WINAPI CharNextExA(WORD,LPCSTR,DWORD);
+/* no CharNextExW (doesn't make sense) */
+WINUSERAPI LPSTR WINAPI CharPrevA(LPCSTR,LPCSTR);
+WINUSERAPI LPWSTR WINAPI CharPrevW(LPCWSTR,LPCWSTR);
+#define CharPrev WINELIB_NAME_AW(CharPrev)
+WINUSERAPI LPSTR WINAPI CharPrevExA(WORD,LPCSTR,LPCSTR,DWORD);
+/* no CharPrevExW (doesn't make sense) */
+WINUSERAPI LPSTR WINAPI CharUpperA(LPSTR);
+WINUSERAPI LPWSTR WINAPI CharUpperW(LPWSTR);
+#define CharUpper WINELIB_NAME_AW(CharUpper)
+WINUSERAPI DWORD WINAPI CharUpperBuffA(LPSTR,DWORD);
+WINUSERAPI DWORD WINAPI CharUpperBuffW(LPWSTR,DWORD);
+#define CharUpperBuff WINELIB_NAME_AW(CharUpperBuff)
+WINUSERAPI BOOL WINAPI CharToOemA(LPCSTR,LPSTR);
+WINUSERAPI BOOL WINAPI CharToOemW(LPCWSTR,LPSTR);
+#define CharToOem WINELIB_NAME_AW(CharToOem)
+WINUSERAPI BOOL WINAPI CharToOemBuffA(LPCSTR,LPSTR,DWORD);
+WINUSERAPI BOOL WINAPI CharToOemBuffW(LPCWSTR,LPSTR,DWORD);
+#define CharToOemBuff WINELIB_NAME_AW(CharToOemBuff)
+WINUSERAPI BOOL WINAPI CheckDlgButton(HWND,INT,UINT);
+WINUSERAPI DWORD WINAPI CheckMenuItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI CheckMenuRadioItem(HMENU,UINT,UINT,UINT,UINT);
+WINUSERAPI BOOL WINAPI CheckRadioButton(HWND,int,int,int);
+WINUSERAPI HWND WINAPI ChildWindowFromPoint(HWND,POINT);
+WINUSERAPI HWND WINAPI ChildWindowFromPointEx(HWND,POINT,UINT);
+WINUSERAPI BOOL WINAPI ClientToScreen(HWND,LPPOINT);
+WINUSERAPI BOOL WINAPI ClipCursor(const RECT*);
+WINUSERAPI BOOL WINAPI CloseClipboard(void);
+WINUSERAPI BOOL WINAPI CloseDesktop(HDESK);
+WINUSERAPI BOOL WINAPI CloseWindow(HWND);
+WINUSERAPI BOOL WINAPI CloseWindowStation(HWINSTA);
+WINUSERAPI INT WINAPI CopyAcceleratorTableA(HACCEL,LPACCEL,INT);
+WINUSERAPI INT WINAPI CopyAcceleratorTableW(HACCEL,LPACCEL,INT);
+#define CopyAcceleratorTable WINELIB_NAME_AW(CopyAcceleratorTable)
+#define CopyCursor(cur) ((HCURSOR)CopyIcon((HICON)(cur)))
+WINUSERAPI HICON WINAPI CopyIcon(HICON);
+WINUSERAPI HANDLE WINAPI CopyImage(HANDLE,UINT,INT,INT,UINT);
+WINUSERAPI BOOL WINAPI CopyRect(RECT*,const RECT*);
+WINUSERAPI INT WINAPI CountClipboardFormats(void);
+WINUSERAPI HACCEL WINAPI CreateAcceleratorTableA(LPACCEL,INT);
+WINUSERAPI HACCEL WINAPI CreateAcceleratorTableW(LPACCEL,INT);
+#define CreateAcceleratorTable WINELIB_NAME_AW(CreateAcceleratorTable)
+WINUSERAPI HICON WINAPI CreateIconIndirect(PICONINFO);
+WINUSERAPI BOOL WINAPI CreateCaret(HWND,HBITMAP,INT,INT);
+WINUSERAPI HCURSOR WINAPI CreateCursor(HINSTANCE,INT,INT,INT,INT,LPCVOID,LPCVOID);
+#define CreateDialogA(inst,ptr,hwnd,dlg) CreateDialogParamA(inst,ptr,hwnd,dlg,0)
+#define CreateDialogW(inst,ptr,hwnd,dlg) CreateDialogParamW(inst,ptr,hwnd,dlg,0)
+#define CreateDialog WINELIB_NAME_AW(CreateDialog)
+#define CreateDialogIndirectA(inst,ptr,hwnd,dlg) CreateDialogIndirectParamA(inst,ptr,hwnd,dlg,0)
+#define CreateDialogIndirectW(inst,ptr,hwnd,dlg) CreateDialogIndirectParamW(inst,ptr,hwnd,dlg,0)
+#define CreateDialogIndirect WINELIB_NAME_AW(CreateDialogIndirect)
+WINUSERAPI HWND WINAPI CreateDialogIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND WINAPI CreateDialogIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM);
+#define CreateDialogIndirectParam WINELIB_NAME_AW(CreateDialogIndirectParam)
+WINUSERAPI HWND WINAPI CreateDialogParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI HWND WINAPI CreateDialogParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+#define CreateDialogParam WINELIB_NAME_AW(CreateDialogParam)
+WINUSERAPI HICON WINAPI CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,LPCVOID,LPCVOID);
+WINUSERAPI HICON WINAPI CreateIconFromResource(LPBYTE,UINT,BOOL,DWORD);
+WINUSERAPI HICON WINAPI CreateIconFromResourceEx(LPBYTE,UINT,BOOL,DWORD,INT,INT,UINT);
+WINUSERAPI HMENU WINAPI CreateMenu(void);
+WINUSERAPI HMENU WINAPI CreatePopupMenu(void);
+#define CreateWindowA(className,titleName,style,x,y,width,height,parent,menu,instance,param) CreateWindowExA(0,className,titleName,style,x,y,width,height,parent,menu,instance,param)
+#define CreateWindowW(className,titleName,style,x,y,width,height,parent,menu,instance,param) CreateWindowExW(0,className,titleName,style,x,y,width,height,parent,menu,instance,param)
+#define CreateWindow WINELIB_NAME_AW(CreateWindow)
+WINUSERAPI HWND WINAPI CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID);
+WINUSERAPI HWND WINAPI CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,LPVOID);
+#define CreateWindowEx WINELIB_NAME_AW(CreateWindowEx)
+WINUSERAPI HWINSTA WINAPI CreateWindowStationA(LPCSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+WINUSERAPI HWINSTA WINAPI CreateWindowStationW(LPCWSTR,DWORD,ACCESS_MASK,LPSECURITY_ATTRIBUTES);
+#define CreateWindowStation WINELIB_NAME_AW(CreateWindowStation)
+WINUSERAPI HWND WINAPI CreateMDIWindowA(LPCSTR,LPCSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM);
+WINUSERAPI HWND WINAPI CreateMDIWindowW(LPCWSTR,LPCWSTR,DWORD,INT,INT,INT,INT,HWND,HINSTANCE,LPARAM);
+#define CreateMDIWindow WINELIB_NAME_AW(CreateMDIWindow)
+WINUSERAPI LRESULT WINAPI DefDlgProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefDlgProcW(HWND,UINT,WPARAM,LPARAM);
+#define DefDlgProc WINELIB_NAME_AW(DefDlgProc)
+WINUSERAPI HDWP WINAPI DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT);
+WINUSERAPI LRESULT WINAPI DefFrameProcA(HWND,HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefFrameProcW(HWND,HWND,UINT,WPARAM,LPARAM);
+#define DefFrameProc WINELIB_NAME_AW(DefFrameProc)
+#define DefHookProc(code,wparam,lparam,phhook) CallNextHookEx(*(phhook),code,wparam,lparam)
+WINUSERAPI LRESULT WINAPI DefMDIChildProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefMDIChildProcW(HWND,UINT,WPARAM,LPARAM);
+#define DefMDIChildProc WINELIB_NAME_AW(DefMDIChildProc)
+WINUSERAPI LRESULT WINAPI DefRawInputProc(PRAWINPUT*,INT,UINT);
+WINUSERAPI LRESULT WINAPI DefWindowProcA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI DefWindowProcW(HWND,UINT,WPARAM,LPARAM);
+#define DefWindowProc WINELIB_NAME_AW(DefWindowProc)
+WINUSERAPI BOOL WINAPI DeleteMenu(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI DestroyAcceleratorTable(HACCEL);
+WINUSERAPI BOOL WINAPI DestroyCaret(void);
+WINUSERAPI BOOL WINAPI DestroyCursor(HCURSOR);
+WINUSERAPI BOOL WINAPI DestroyIcon(HICON);
+WINUSERAPI BOOL WINAPI DestroyMenu(HMENU);
+WINUSERAPI BOOL WINAPI DestroyWindow(HWND);
+#define DialogBoxA(inst,template,owner,func) DialogBoxParamA(inst,template,owner,func,0)
+#define DialogBoxW(inst,template,owner,func) DialogBoxParamW(inst,template,owner,func,0)
+#define DialogBox WINELIB_NAME_AW(DialogBox)
+#define DialogBoxIndirectA(inst,template,owner,func) DialogBoxIndirectParamA(inst,template,owner,func,0)
+#define DialogBoxIndirectW(inst,template,owner,func) DialogBoxIndirectParamW(inst,template,owner,func,0)
+#define DialogBoxIndirect WINELIB_NAME_AW(DialogBoxIndirect)
+WINUSERAPI INT_PTR WINAPI DialogBoxIndirectParamA(HINSTANCE,LPCDLGTEMPLATEA,HWND,DLGPROC,LPARAM);
+WINUSERAPI INT_PTR WINAPI DialogBoxIndirectParamW(HINSTANCE,LPCDLGTEMPLATEW,HWND,DLGPROC,LPARAM);
+#define DialogBoxIndirectParam WINELIB_NAME_AW(DialogBoxIndirectParam)
+WINUSERAPI INT_PTR WINAPI DialogBoxParamA(HINSTANCE,LPCSTR,HWND,DLGPROC,LPARAM);
+WINUSERAPI INT_PTR WINAPI DialogBoxParamW(HINSTANCE,LPCWSTR,HWND,DLGPROC,LPARAM);
+#define DialogBoxParam WINELIB_NAME_AW(DialogBoxParam)
+WINUSERAPI LRESULT WINAPI DispatchMessageA(const MSG*);
+WINUSERAPI LRESULT WINAPI DispatchMessageW(const MSG*);
+#define DispatchMessage WINELIB_NAME_AW(DispatchMessage)
+WINUSERAPI INT WINAPI DlgDirListA(HWND,LPSTR,INT,INT,UINT);
+WINUSERAPI INT WINAPI DlgDirListW(HWND,LPWSTR,INT,INT,UINT);
+#define DlgDirList WINELIB_NAME_AW(DlgDirList)
+WINUSERAPI INT WINAPI DlgDirListComboBoxA(HWND,LPSTR,INT,INT,UINT);
+WINUSERAPI INT WINAPI DlgDirListComboBoxW(HWND,LPWSTR,INT,INT,UINT);
+#define DlgDirListComboBox WINELIB_NAME_AW(DlgDirListComboBox)
+WINUSERAPI BOOL WINAPI DlgDirSelectComboBoxExA(HWND,LPSTR,INT,INT);
+WINUSERAPI BOOL WINAPI DlgDirSelectComboBoxExW(HWND,LPWSTR,INT,INT);
+#define DlgDirSelectComboBoxEx WINELIB_NAME_AW(DlgDirSelectComboBoxEx)
+WINUSERAPI BOOL WINAPI DlgDirSelectExA(HWND,LPSTR,INT,INT);
+WINUSERAPI BOOL WINAPI DlgDirSelectExW(HWND,LPWSTR,INT,INT);
+#define DlgDirSelectEx WINELIB_NAME_AW(DlgDirSelectEx)
+WINUSERAPI BOOL WINAPI DragDetect(HWND,POINT);
+WINUSERAPI DWORD WINAPI DragObject(HWND,HWND,UINT,ULONG_PTR,HCURSOR);
+WINUSERAPI BOOL WINAPI DrawAnimatedRects(HWND,int,const RECT*,const RECT*);
+WINUSERAPI BOOL WINAPI DrawCaption(HWND,HDC,const RECT*,UINT);
+WINUSERAPI BOOL WINAPI DrawCaptionTempA(HWND,HDC,const RECT*,HFONT,HICON,LPCSTR,UINT);
+WINUSERAPI BOOL WINAPI DrawCaptionTempW(HWND,HDC,const RECT*,HFONT,HICON,LPCWSTR,UINT);
+#define DrawCaptionTemp WINELIB_NAME_AW(DrawCaptionTemp)
+WINUSERAPI BOOL WINAPI DrawEdge(HDC,LPRECT,UINT,UINT);
+WINUSERAPI BOOL WINAPI DrawFocusRect(HDC,const RECT*);
+WINUSERAPI BOOL WINAPI DrawFrameControl(HDC,LPRECT,UINT,UINT);
+WINUSERAPI BOOL WINAPI DrawIcon(HDC,INT,INT,HICON);
+WINUSERAPI BOOL WINAPI DrawIconEx(HDC,INT,INT,HICON,INT,INT,UINT,HBRUSH,UINT);
+WINUSERAPI BOOL WINAPI DrawMenuBar(HWND);
+WINUSERAPI BOOL WINAPI DrawStateA(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);
+WINUSERAPI BOOL WINAPI DrawStateW(HDC,HBRUSH,DRAWSTATEPROC,LPARAM,WPARAM,INT,INT,INT,INT,UINT);
+#define DrawState WINELIB_NAME_AW(DrawState)
+WINUSERAPI INT WINAPI DrawTextA(HDC,LPCSTR,INT,LPRECT,UINT);
+WINUSERAPI INT WINAPI DrawTextW(HDC,LPCWSTR,INT,LPRECT,UINT);
+#define DrawText WINELIB_NAME_AW(DrawText)
+WINUSERAPI INT WINAPI DrawTextExA(HDC,LPSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS);
+WINUSERAPI INT WINAPI DrawTextExW(HDC,LPWSTR,INT,LPRECT,UINT,LPDRAWTEXTPARAMS);
+#define DrawTextEx WINELIB_NAME_AW(DrawTextEx)
+WINUSERAPI BOOL WINAPI EmptyClipboard(void);
+WINUSERAPI BOOL WINAPI EnableMenuItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI EnableScrollBar(HWND,UINT,UINT);
+WINUSERAPI BOOL WINAPI EnableWindow(HWND,BOOL);
+WINUSERAPI BOOL WINAPI EndDeferWindowPos(HDWP);
+WINUSERAPI BOOL WINAPI EndDialog(HWND,INT_PTR);
+WINUSERAPI BOOL WINAPI EndMenu(void);
+WINUSERAPI BOOL WINAPI EndPaint(HWND,const PAINTSTRUCT*);
+WINUSERAPI BOOL WINAPI EnumChildWindows(HWND,WNDENUMPROC,LPARAM);
+WINUSERAPI UINT WINAPI EnumClipboardFormats(UINT);
+WINUSERAPI BOOL WINAPI EnumDesktopsA(HWINSTA,DESKTOPENUMPROCA,LPARAM);
+WINUSERAPI BOOL WINAPI EnumDesktopsW(HWINSTA,DESKTOPENUMPROCW,LPARAM);
+#define EnumDesktops WINELIB_NAME_AW(EnumDesktops)
+WINUSERAPI BOOL WINAPI EnumDesktopWindows(HDESK,WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL WINAPI EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM);
+WINUSERAPI INT WINAPI EnumPropsA(HWND,PROPENUMPROCA);
+WINUSERAPI INT WINAPI EnumPropsW(HWND,PROPENUMPROCW);
+#define EnumProps WINELIB_NAME_AW(EnumProps)
+WINUSERAPI INT WINAPI EnumPropsExA(HWND,PROPENUMPROCEXA,LPARAM);
+WINUSERAPI INT WINAPI EnumPropsExW(HWND,PROPENUMPROCEXW,LPARAM);
+#define EnumPropsEx WINELIB_NAME_AW(EnumPropsEx)
+WINUSERAPI BOOL WINAPI EnumThreadWindows(DWORD,WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL WINAPI EnumWindows(WNDENUMPROC,LPARAM);
+WINUSERAPI BOOL WINAPI EnumWindowStationsA(WINSTAENUMPROCA,LPARAM);
+WINUSERAPI BOOL WINAPI EnumWindowStationsW(WINSTAENUMPROCW,LPARAM);
+#define EnumWindowStations WINELIB_NAME_AW(EnumWindowStations)
+WINUSERAPI BOOL WINAPI EqualRect(const RECT*,const RECT*);
+WINUSERAPI INT WINAPI ExcludeUpdateRgn(HDC,HWND);
+#define ExitWindows(a,b) ExitWindowsEx(EWX_LOGOFF,0xffffffff)
+WINUSERAPI BOOL WINAPI ExitWindowsEx(UINT,DWORD);
+WINUSERAPI INT WINAPI FillRect(HDC,const RECT*,HBRUSH);
+WINUSERAPI HWND WINAPI FindWindowA(LPCSTR,LPCSTR);
+WINUSERAPI HWND WINAPI FindWindowW(LPCWSTR,LPCWSTR);
+#define FindWindow WINELIB_NAME_AW(FindWindow)
+WINUSERAPI HWND WINAPI FindWindowExA(HWND,HWND,LPCSTR,LPCSTR);
+WINUSERAPI HWND WINAPI FindWindowExW(HWND,HWND,LPCWSTR,LPCWSTR);
+#define FindWindowEx WINELIB_NAME_AW(FindWindowEx)
+WINUSERAPI BOOL WINAPI FlashWindow(HWND,BOOL);
+WINUSERAPI BOOL WINAPI FlashWindowEx(PFLASHWINFO);
+WINUSERAPI INT WINAPI FrameRect(HDC,const RECT*,HBRUSH);
+WINUSERAPI HWND WINAPI GetActiveWindow(void);
+WINUSERAPI BOOL WINAPI GetAltTabInfoA(HWND,INT,PALTTABINFO,LPSTR,UINT);
+WINUSERAPI BOOL WINAPI GetAltTabInfoW(HWND,INT,PALTTABINFO,LPWSTR,UINT);
+#define GetAltTabInfo WINELIB_NAME_AW(GetAltTabInfo)
+WINUSERAPI HWND WINAPI GetAncestor(HWND,UINT);
+WINUSERAPI DWORD WINAPI GetAppCompatFlags(HTASK);
+WINUSERAPI SHORT WINAPI GetAsyncKeyState(INT);
+WINUSERAPI HWND WINAPI GetCapture(void);
+WINUSERAPI UINT WINAPI GetCaretBlinkTime(void);
+WINUSERAPI BOOL WINAPI GetCaretPos(LPPOINT);
+WINUSERAPI BOOL WINAPI GetClassInfoA(HINSTANCE,LPCSTR,WNDCLASSA *);
+WINUSERAPI BOOL WINAPI GetClassInfoW(HINSTANCE,LPCWSTR,WNDCLASSW *);
+#define GetClassInfo WINELIB_NAME_AW(GetClassInfo)
+WINUSERAPI BOOL WINAPI GetClassInfoExA(HINSTANCE,LPCSTR,WNDCLASSEXA *);
+WINUSERAPI BOOL WINAPI GetClassInfoExW(HINSTANCE,LPCWSTR,WNDCLASSEXW *);
+#define GetClassInfoEx WINELIB_NAME_AW(GetClassInfoEx)
+WINUSERAPI DWORD WINAPI GetClassLongA(HWND,INT);
+WINUSERAPI DWORD WINAPI GetClassLongW(HWND,INT);
+#define GetClassLong WINELIB_NAME_AW(GetClassLong)
+#ifdef _WIN64
+WINUSERAPI ULONG_PTR WINAPI GetClassLongPtrA(HWND,INT);
+WINUSERAPI ULONG_PTR WINAPI GetClassLongPtrW(HWND,INT);
+#else
+#define GetClassLongPtrA GetClassLongA
+#define GetClassLongPtrW GetClassLongW
+#endif
+#define GetClassLongPtr WINELIB_NAME_AW(GetClassLongPtr)
+WINUSERAPI INT WINAPI GetClassNameA(HWND,LPSTR,INT);
+WINUSERAPI INT WINAPI GetClassNameW(HWND,LPWSTR,INT);
+#define GetClassName WINELIB_NAME_AW(GetClassName)
+WINUSERAPI WORD WINAPI GetClassWord(HWND,INT);
+WINUSERAPI BOOL WINAPI GetClientRect(HWND,LPRECT);
+WINUSERAPI HANDLE WINAPI GetClipboardData(UINT);
+WINUSERAPI INT WINAPI GetClipboardFormatNameA(UINT,LPSTR,INT);
+WINUSERAPI INT WINAPI GetClipboardFormatNameW(UINT,LPWSTR,INT);
+#define GetClipboardFormatName WINELIB_NAME_AW(GetClipboardFormatName)
+WINUSERAPI HWND WINAPI GetClipboardOwner(void);
+WINUSERAPI DWORD WINAPI GetClipboardSequenceNumber(VOID);
+WINUSERAPI HWND WINAPI GetClipboardViewer(void);
+WINUSERAPI BOOL WINAPI GetClipCursor(LPRECT);
+WINUSERAPI BOOL WINAPI GetComboBoxInfo(HWND,PCOMBOBOXINFO);
+WINUSERAPI HCURSOR WINAPI GetCursor(void);
+WINUSERAPI BOOL WINAPI GetCursorInfo(PCURSORINFO);
+WINUSERAPI HCURSOR WINAPI GetCursorFrameInfo(HCURSOR,DWORD,DWORD,DWORD*,DWORD*);
+WINUSERAPI BOOL WINAPI GetCursorPos(LPPOINT);
+WINUSERAPI HDC WINAPI GetDC(HWND);
+WINUSERAPI HDC WINAPI GetDCEx(HWND,HRGN,DWORD);
+WINUSERAPI HWND WINAPI GetDesktopWindow(void);
+WINUSERAPI DWORD WINAPI GetDialogBaseUnits(void);
+WINUSERAPI INT WINAPI GetDlgCtrlID(HWND);
+WINUSERAPI HWND WINAPI GetDlgItem(HWND,INT);
+WINUSERAPI UINT WINAPI GetDlgItemInt(HWND,INT,BOOL*,BOOL);
+WINUSERAPI UINT WINAPI GetDlgItemTextA(HWND,INT,LPSTR,INT);
+WINUSERAPI UINT WINAPI GetDlgItemTextW(HWND,INT,LPWSTR,INT);
+#define GetDlgItemText WINELIB_NAME_AW(GetDlgItemText)
+WINUSERAPI UINT WINAPI GetDoubleClickTime(void);
+WINUSERAPI HWND WINAPI GetFocus(void);
+WINUSERAPI HWND WINAPI GetForegroundWindow(void);
+WINUSERAPI BOOL WINAPI GetGUIThreadInfo(DWORD,GUITHREADINFO*);
+WINUSERAPI BOOL WINAPI GetIconInfo(HICON,PICONINFO);
+WINUSERAPI BOOL WINAPI GetIconInfoExA(HICON,ICONINFOEXA*);
+WINUSERAPI BOOL WINAPI GetIconInfoExW(HICON,ICONINFOEXW*);
+#define GetIconInfoEx WINELIB_NAME_AW(GetIconInfoEx)
+WINUSERAPI BOOL WINAPI GetInputState(void);
+WINUSERAPI UINT WINAPI GetInternalWindowPos(HWND,LPRECT,LPPOINT);
+WINUSERAPI UINT WINAPI GetKBCodePage(void);
+WINUSERAPI HKL WINAPI GetKeyboardLayout(DWORD);
+WINUSERAPI UINT WINAPI GetKeyboardLayoutList(INT,HKL *);
+WINUSERAPI BOOL WINAPI GetKeyboardState(LPBYTE);
+WINUSERAPI INT WINAPI GetKeyboardType(INT);
+WINUSERAPI INT WINAPI GetKeyNameTextA(LONG,LPSTR,INT);
+WINUSERAPI INT WINAPI GetKeyNameTextW(LONG,LPWSTR,INT);
+#define GetKeyNameText WINELIB_NAME_AW(GetKeyNameText)
+WINUSERAPI BOOL WINAPI GetKeyboardLayoutNameA(LPSTR);
+WINUSERAPI BOOL WINAPI GetKeyboardLayoutNameW(LPWSTR);
+#define GetKeyboardLayoutName WINELIB_NAME_AW(GetKeyboardLayoutName)
+WINUSERAPI SHORT WINAPI GetKeyState(INT);
+WINUSERAPI HWND WINAPI GetLastActivePopup(HWND);
+WINUSERAPI BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO);
+WINUSERAPI UINT WINAPI GetRawInputBuffer(PRAWINPUT,PUINT,UINT);
+WINUSERAPI UINT WINAPI GetRawInputData(HRAWINPUT,UINT,LPVOID,PUINT,UINT);
+WINUSERAPI UINT WINAPI GetRawInputDeviceInfoA(HANDLE,UINT,LPVOID,PUINT);
+WINUSERAPI UINT WINAPI GetRawInputDeviceInfoW(HANDLE,UINT,LPVOID,PUINT);
+#define GetRawInputDeviceInfo WINELIB_NAME_AW(GetRawInputDeviceInfo)
+WINUSERAPI UINT WINAPI GetRawInputDeviceList(PRAWINPUTDEVICELIST,PUINT,UINT);
+WINUSERAPI UINT WINAPI GetRegisteredRawInputDevices(PRAWINPUTDEVICE,PUINT,UINT);
+WINUSERAPI BOOL WINAPI GetLayeredWindowAttributes(HWND,COLORREF*,BYTE*,DWORD*);
+WINUSERAPI HMENU WINAPI GetMenu(HWND);
+WINUSERAPI BOOL WINAPI GetMenuBarInfo(HWND,LONG,LONG,PMENUBARINFO);
+WINUSERAPI DWORD WINAPI GetMenuCheckMarkDimensions(void);
+WINUSERAPI DWORD WINAPI GetMenuContextHelpId(HMENU);
+WINUSERAPI UINT WINAPI GetMenuDefaultItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI GetMenuInfo(HMENU,LPMENUINFO);
+WINUSERAPI INT WINAPI GetMenuItemCount(HMENU);
+WINUSERAPI UINT WINAPI GetMenuItemID(HMENU,INT);
+WINUSERAPI BOOL WINAPI GetMenuItemInfoA(HMENU,UINT,BOOL,MENUITEMINFOA*);
+WINUSERAPI BOOL WINAPI GetMenuItemInfoW(HMENU,UINT,BOOL,MENUITEMINFOW*);
+#define GetMenuItemInfo WINELIB_NAME_AW(GetMenuItemInfo)
+WINUSERAPI BOOL WINAPI GetMenuItemRect(HWND,HMENU,UINT,LPRECT);
+WINUSERAPI UINT WINAPI GetMenuState(HMENU,UINT,UINT);
+WINUSERAPI INT WINAPI GetMenuStringA(HMENU,UINT,LPSTR,INT,UINT);
+WINUSERAPI INT WINAPI GetMenuStringW(HMENU,UINT,LPWSTR,INT,UINT);
+#define GetMenuString WINELIB_NAME_AW(GetMenuString)
+WINUSERAPI BOOL WINAPI GetMessageA(LPMSG,HWND,UINT,UINT);
+WINUSERAPI BOOL WINAPI GetMessageW(LPMSG,HWND,UINT,UINT);
+#define GetMessage WINELIB_NAME_AW(GetMessage)
+WINUSERAPI LPARAM WINAPI GetMessageExtraInfo(void);
+WINUSERAPI DWORD WINAPI GetMessagePos(void);
+WINUSERAPI LONG WINAPI GetMessageTime(void);
+WINUSERAPI BOOL WINAPI GetMonitorInfoA(HMONITOR,LPMONITORINFO);
+WINUSERAPI BOOL WINAPI GetMonitorInfoW(HMONITOR,LPMONITORINFO);
+#define GetMonitorInfo WINELIB_NAME_AW(GetMonitorInfo)
+WINUSERAPI HWND WINAPI GetNextDlgGroupItem(HWND,HWND,BOOL);
+WINUSERAPI HWND WINAPI GetNextDlgTabItem(HWND,HWND,BOOL);
+#define GetNextWindow GetWindow
+WINUSERAPI HWND WINAPI GetOpenClipboardWindow(void);
+WINUSERAPI HWND WINAPI GetParent(HWND);
+WINUSERAPI INT WINAPI GetPriorityClipboardFormat(UINT*,INT);
+WINUSERAPI BOOL WINAPI GetProcessDefaultLayout(DWORD*);
+WINUSERAPI HANDLE WINAPI GetPropA(HWND,LPCSTR);
+WINUSERAPI HANDLE WINAPI GetPropW(HWND,LPCWSTR);
+#define GetProp WINELIB_NAME_AW(GetProp)
+WINUSERAPI DWORD WINAPI GetQueueStatus(UINT);
+WINUSERAPI BOOL WINAPI GetScrollInfo(HWND,INT,LPSCROLLINFO);
+WINUSERAPI BOOL WINAPI GetScrollBarInfo(HWND,LONG,LPSCROLLBARINFO);
+WINUSERAPI INT WINAPI GetScrollPos(HWND,INT);
+WINUSERAPI BOOL WINAPI GetScrollRange(HWND,INT,LPINT,LPINT);
+WINUSERAPI HWND WINAPI GetShellWindow(void);
+WINUSERAPI HMENU WINAPI GetSubMenu(HMENU,INT);
+WINUSERAPI HBRUSH WINAPI GetSysColorBrush(INT);
+#define GetSysModalWindow() ((HWND)0)
+WINUSERAPI HMENU WINAPI GetSystemMenu(HWND,BOOL);
+WINUSERAPI INT WINAPI GetSystemMetrics(INT);
+WINUSERAPI DWORD WINAPI GetTabbedTextExtentA(HDC,LPCSTR,INT,INT,const INT*);
+WINUSERAPI DWORD WINAPI GetTabbedTextExtentW(HDC,LPCWSTR,INT,INT,const INT*);
+#define GetTabbedTextExtent WINELIB_NAME_AW(GetTabbedTextExtent)
+WINUSERAPI BOOL WINAPI GetTitleBarInfo(HWND,PTITLEBARINFO);
+WINUSERAPI HDESK WINAPI GetThreadDesktop(DWORD);
+WINUSERAPI HWND WINAPI GetTopWindow(HWND);
+WINUSERAPI BOOL WINAPI GetUpdateRect(HWND,LPRECT,BOOL);
+WINUSERAPI INT WINAPI GetUpdateRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL WINAPI GetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD,LPDWORD);
+WINUSERAPI BOOL WINAPI GetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD,LPDWORD);
+#define GetUserObjectInformation WINELIB_NAME_AW(GetUserObjectInformation)
+WINUSERAPI BOOL WINAPI GetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
+WINUSERAPI HWND WINAPI GetWindow(HWND,UINT);
+WINUSERAPI DWORD WINAPI GetWindowContextHelpId(HWND);
+WINUSERAPI HDC WINAPI GetWindowDC(HWND);
+WINUSERAPI BOOL WINAPI GetWindowInfo(HWND, PWINDOWINFO);
+WINUSERAPI LONG WINAPI GetWindowLongA(HWND,INT);
+WINUSERAPI LONG WINAPI GetWindowLongW(HWND,INT);
+#define GetWindowLong WINELIB_NAME_AW(GetWindowLong)
+#ifdef _WIN64
+WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrA(HWND,INT);
+WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrW(HWND,INT);
+#else
+#define GetWindowLongPtrA GetWindowLongA
+#define GetWindowLongPtrW GetWindowLongW
+#endif
+#define GetWindowLongPtr WINELIB_NAME_AW(GetWindowLongPtr)
+WINUSERAPI UINT WINAPI GetWindowModuleFileNameA(HWND,LPSTR,UINT);
+WINUSERAPI UINT WINAPI GetWindowModuleFileNameW(HWND,LPWSTR,UINT);
+#define GetWindowModuleFileName WINELIB_NAME_AW(GetWindowModuleFileName)
+WINUSERAPI BOOL WINAPI GetWindowPlacement(HWND,LPWINDOWPLACEMENT);
+WINUSERAPI BOOL WINAPI GetWindowRect(HWND,LPRECT);
+WINUSERAPI INT WINAPI GetWindowRgn(HWND,HRGN);
+WINUSERAPI HWINSTA WINAPI GetProcessWindowStation(void);
+#define GetWindowTask(hwnd) ((HTASK)GetWindowThreadProcessId(hwnd,NULL))
+WINUSERAPI INT WINAPI GetWindowTextA(HWND,LPSTR,INT);
+WINUSERAPI INT WINAPI GetWindowTextW(HWND,LPWSTR,INT);
+#define GetWindowText WINELIB_NAME_AW(GetWindowText)
+WINUSERAPI INT WINAPI GetWindowTextLengthA(HWND);
+WINUSERAPI INT WINAPI GetWindowTextLengthW(HWND);
+#define GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength)
+WINUSERAPI DWORD WINAPI GetWindowThreadProcessId(HWND,LPDWORD);
+WINUSERAPI WORD WINAPI GetWindowWord(HWND,INT);
+WINUSERAPI BOOL WINAPI GrayStringA(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT);
+WINUSERAPI BOOL WINAPI GrayStringW(HDC,HBRUSH,GRAYSTRINGPROC,LPARAM,INT,INT,INT,INT,INT);
+#define GrayString WINELIB_NAME_AW(GrayString)
+WINUSERAPI BOOL WINAPI HideCaret(HWND);
+WINUSERAPI BOOL WINAPI HiliteMenuItem(HWND,HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI InflateRect(LPRECT,INT,INT);
+WINUSERAPI BOOL WINAPI InSendMessage(void);
+WINUSERAPI DWORD WINAPI InSendMessageEx(LPVOID);
+WINUSERAPI BOOL WINAPI InsertMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL WINAPI InsertMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR);
+#define InsertMenu WINELIB_NAME_AW(InsertMenu)
+WINUSERAPI BOOL WINAPI InsertMenuItemA(HMENU,UINT,BOOL,const MENUITEMINFOA*);
+WINUSERAPI BOOL WINAPI InsertMenuItemW(HMENU,UINT,BOOL,const MENUITEMINFOW*);
+#define InsertMenuItem WINELIB_NAME_AW(InsertMenuItem)
+WINUSERAPI INT WINAPI InternalGetWindowText(HWND,LPWSTR,INT);
+WINUSERAPI BOOL WINAPI IntersectRect(LPRECT,const RECT*,const RECT*);
+WINUSERAPI BOOL WINAPI InvalidateRect(HWND,const RECT*,BOOL);
+WINUSERAPI BOOL WINAPI InvalidateRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL WINAPI InvertRect(HDC,const RECT*);
+WINUSERAPI BOOL WINAPI IsCharAlphaA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharAlphaW(WCHAR);
+#define IsCharAlpha WINELIB_NAME_AW(IsCharAlpha)
+WINUSERAPI BOOL WINAPI IsCharAlphaNumericA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharAlphaNumericW(WCHAR);
+#define IsCharAlphaNumeric WINELIB_NAME_AW(IsCharAlphaNumeric)
+WINUSERAPI BOOL WINAPI IsCharLowerA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharLowerW(WCHAR);
+#define IsCharLower WINELIB_NAME_AW(IsCharLower)
+WINUSERAPI BOOL WINAPI IsCharUpperA(CHAR);
+WINUSERAPI BOOL WINAPI IsCharUpperW(WCHAR);
+#define IsCharUpper WINELIB_NAME_AW(IsCharUpper)
+WINUSERAPI BOOL WINAPI IsChild(HWND,HWND);
+WINUSERAPI BOOL WINAPI IsClipboardFormatAvailable(UINT);
+WINUSERAPI BOOL WINAPI IsDialogMessageA(HWND,LPMSG);
+WINUSERAPI BOOL WINAPI IsDialogMessageW(HWND,LPMSG);
+#define IsDialogMessage WINELIB_NAME_AW(IsDialogMessage)
+WINUSERAPI UINT WINAPI IsDlgButtonChecked(HWND,int);
+WINUSERAPI BOOL WINAPI IsGUIThread(BOOL);
+WINUSERAPI BOOL WINAPI IsHungAppWindow(HWND);
+WINUSERAPI BOOL WINAPI IsIconic(HWND);
+WINUSERAPI BOOL WINAPI IsMenu(HMENU);
+WINUSERAPI BOOL WINAPI IsRectEmpty(const RECT*);
+WINUSERAPI BOOL WINAPI IsWinEventHookInstalled(DWORD);
+WINUSERAPI BOOL WINAPI IsWindow(HWND);
+WINUSERAPI BOOL WINAPI IsWindowEnabled(HWND);
+WINUSERAPI BOOL WINAPI IsWindowUnicode(HWND);
+WINUSERAPI BOOL WINAPI IsWindowVisible(HWND);
+WINUSERAPI BOOL WINAPI IsZoomed(HWND);
+WINUSERAPI BOOL WINAPI KillSystemTimer(HWND,UINT_PTR);
+WINUSERAPI BOOL WINAPI KillTimer(HWND,UINT_PTR);
+WINUSERAPI HACCEL WINAPI LoadAcceleratorsA(HINSTANCE,LPCSTR);
+WINUSERAPI HACCEL WINAPI LoadAcceleratorsW(HINSTANCE,LPCWSTR);
+#define LoadAccelerators WINELIB_NAME_AW(LoadAccelerators)
+WINUSERAPI HBITMAP WINAPI LoadBitmapA(HINSTANCE,LPCSTR);
+WINUSERAPI HBITMAP WINAPI LoadBitmapW(HINSTANCE,LPCWSTR);
+#define LoadBitmap WINELIB_NAME_AW(LoadBitmap)
+WINUSERAPI HCURSOR WINAPI LoadCursorA(HINSTANCE,LPCSTR);
+WINUSERAPI HCURSOR WINAPI LoadCursorW(HINSTANCE,LPCWSTR);
+#define LoadCursor WINELIB_NAME_AW(LoadCursor)
+WINUSERAPI HCURSOR WINAPI LoadCursorFromFileA(LPCSTR);
+WINUSERAPI HCURSOR WINAPI LoadCursorFromFileW(LPCWSTR);
+#define LoadCursorFromFile WINELIB_NAME_AW(LoadCursorFromFile)
+WINUSERAPI HICON WINAPI LoadIconA(HINSTANCE,LPCSTR);
+WINUSERAPI HICON WINAPI LoadIconW(HINSTANCE,LPCWSTR);
+#define LoadIcon WINELIB_NAME_AW(LoadIcon)
+WINUSERAPI HANDLE WINAPI LoadImageA(HINSTANCE,LPCSTR,UINT,INT,INT,UINT);
+WINUSERAPI HANDLE WINAPI LoadImageW(HINSTANCE,LPCWSTR,UINT,INT,INT,UINT);
+#define LoadImage WINELIB_NAME_AW(LoadImage)
+WINUSERAPI HKL WINAPI LoadKeyboardLayoutA(LPCSTR,UINT);
+WINUSERAPI HKL WINAPI LoadKeyboardLayoutW(LPCWSTR,UINT);
+#define LoadKeyboardLayout WINELIB_NAME_AW(LoadKeyboardLayout)
+WINUSERAPI HMENU WINAPI LoadMenuA(HINSTANCE,LPCSTR);
+WINUSERAPI HMENU WINAPI LoadMenuW(HINSTANCE,LPCWSTR);
+#define LoadMenu WINELIB_NAME_AW(LoadMenu)
+WINUSERAPI HMENU WINAPI LoadMenuIndirectA(LPCVOID);
+WINUSERAPI HMENU WINAPI LoadMenuIndirectW(LPCVOID);
+#define LoadMenuIndirect WINELIB_NAME_AW(LoadMenuIndirect)
+WINUSERAPI INT WINAPI LoadStringA(HINSTANCE,UINT,LPSTR,INT);
+WINUSERAPI INT WINAPI LoadStringW(HINSTANCE,UINT,LPWSTR,INT);
+#define LoadString WINELIB_NAME_AW(LoadString)
+WINUSERAPI BOOL WINAPI LockSetForegroundWindow(UINT);
+WINUSERAPI BOOL WINAPI LockWindowUpdate(HWND);
+WINUSERAPI INT WINAPI LookupIconIdFromDirectory(LPBYTE,BOOL);
+WINUSERAPI INT WINAPI LookupIconIdFromDirectoryEx(LPBYTE,BOOL,INT,INT,UINT);
+WINUSERAPI UINT WINAPI MapVirtualKeyA(UINT,UINT);
+WINUSERAPI UINT WINAPI MapVirtualKeyW(UINT,UINT);
+#define MapVirtualKey WINELIB_NAME_AW(MapVirtualKey)
+WINUSERAPI UINT WINAPI MapVirtualKeyExA(UINT,UINT,HKL);
+WINUSERAPI UINT WINAPI MapVirtualKeyExW(UINT,UINT,HKL);
+#define MapVirtualKeyEx WINELIB_NAME_AW(MapVirtualKeyEx)
+WINUSERAPI BOOL WINAPI MapDialogRect(HWND,LPRECT);
+WINUSERAPI INT WINAPI MapWindowPoints(HWND,HWND,LPPOINT,UINT);
+WINUSERAPI INT WINAPI MenuItemFromPoint(HWND,HMENU,POINT);
+WINUSERAPI BOOL WINAPI MessageBeep(UINT);
+WINUSERAPI INT WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);
+WINUSERAPI INT WINAPI MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT);
+#define MessageBox WINELIB_NAME_AW(MessageBox)
+WINUSERAPI INT WINAPI MessageBoxExA(HWND,LPCSTR,LPCSTR,UINT,WORD);
+WINUSERAPI INT WINAPI MessageBoxExW(HWND,LPCWSTR,LPCWSTR,UINT,WORD);
+#define MessageBoxEx WINELIB_NAME_AW(MessageBoxEx)
+WINUSERAPI INT WINAPI MessageBoxIndirectA(LPMSGBOXPARAMSA);
+WINUSERAPI INT WINAPI MessageBoxIndirectW(LPMSGBOXPARAMSW);
+#define MessageBoxIndirect WINELIB_NAME_AW(MessageBoxIndirect)
+WINUSERAPI BOOL WINAPI ModifyMenuA(HMENU,UINT,UINT,UINT_PTR,LPCSTR);
+WINUSERAPI BOOL WINAPI ModifyMenuW(HMENU,UINT,UINT,UINT_PTR,LPCWSTR);
+#define ModifyMenu WINELIB_NAME_AW(ModifyMenu)
+WINUSERAPI HMONITOR WINAPI MonitorFromPoint(POINT,DWORD);
+WINUSERAPI HMONITOR WINAPI MonitorFromRect(LPRECT,DWORD);
+WINUSERAPI HMONITOR WINAPI MonitorFromWindow(HWND,DWORD);
+WINUSERAPI BOOL WINAPI MoveWindow(HWND,INT,INT,INT,INT,BOOL);
+WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjects(DWORD,const HANDLE*,BOOL,DWORD,DWORD);
+WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjectsEx(DWORD,const HANDLE*,DWORD,DWORD,DWORD);
+WINUSERAPI VOID WINAPI NotifyWinEvent(DWORD,HWND,LONG,LONG);
+WINUSERAPI DWORD WINAPI OemKeyScan(WORD);
+WINUSERAPI BOOL WINAPI OemToCharA(LPCSTR,LPSTR);
+WINUSERAPI BOOL WINAPI OemToCharW(LPCSTR,LPWSTR);
+#define OemToChar WINELIB_NAME_AW(OemToChar)
+WINUSERAPI BOOL WINAPI OemToCharBuffA(LPCSTR,LPSTR,DWORD);
+WINUSERAPI BOOL WINAPI OemToCharBuffW(LPCSTR,LPWSTR,DWORD);
+#define OemToCharBuff WINELIB_NAME_AW(OemToCharBuff)
+WINUSERAPI BOOL WINAPI OffsetRect(LPRECT,INT,INT);
+WINUSERAPI BOOL WINAPI OpenClipboard(HWND);
+WINUSERAPI HDESK WINAPI OpenDesktopA(LPCSTR,DWORD,BOOL,ACCESS_MASK);
+WINUSERAPI HDESK WINAPI OpenDesktopW(LPCWSTR,DWORD,BOOL,ACCESS_MASK);
+#define OpenDesktop WINELIB_NAME_AW(OpenDesktop)
+WINUSERAPI BOOL WINAPI OpenIcon(HWND);
+WINUSERAPI HDESK WINAPI OpenInputDesktop(DWORD,BOOL,ACCESS_MASK);
+WINUSERAPI HWINSTA WINAPI OpenWindowStationA(LPCSTR,BOOL,ACCESS_MASK);
+WINUSERAPI HWINSTA WINAPI OpenWindowStationW(LPCWSTR,BOOL,ACCESS_MASK);
+#define OpenWindowStation WINELIB_NAME_AW(OpenWindowStation)
+WINUSERAPI BOOL WINAPI PaintDesktop(HDC);
+WINUSERAPI BOOL WINAPI PeekMessageA(LPMSG,HWND,UINT,UINT,UINT);
+WINUSERAPI BOOL WINAPI PeekMessageW(LPMSG,HWND,UINT,UINT,UINT);
+#define PeekMessage WINELIB_NAME_AW(PeekMessage)
+#define PostAppMessageA(thread,msg,wparam,lparam) PostThreadMessageA((DWORD)(thread),msg,wparam,lparam)
+#define PostAppMessageW(thread,msg,wparam,lparam) PostThreadMessageW((DWORD)(thread),msg,wparam,lparam)
+#define PostAppMessage WINELIB_NAME_AW(PostAppMessage)
+WINUSERAPI BOOL WINAPI PostMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI PostMessageW(HWND,UINT,WPARAM,LPARAM);
+#define PostMessage WINELIB_NAME_AW(PostMessage)
+WINUSERAPI void WINAPI PostQuitMessage(INT);
+WINUSERAPI BOOL WINAPI PostThreadMessageA(DWORD,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI PostThreadMessageW(DWORD,UINT,WPARAM,LPARAM);
+#define PostThreadMessage WINELIB_NAME_AW(PostThreadMessage)
+WINUSERAPI UINT WINAPI PrivateExtractIconExA(LPCSTR,int,HICON*,HICON*,UINT);
+WINUSERAPI UINT WINAPI PrivateExtractIconExW(LPCWSTR,int,HICON*,HICON*,UINT);
+WINUSERAPI UINT WINAPI PrivateExtractIconsA(LPCSTR,int,int,int,HICON*,UINT*,UINT,UINT);
+WINUSERAPI UINT WINAPI PrivateExtractIconsW(LPCWSTR,int,int,int,HICON*,UINT*,UINT,UINT);
+WINUSERAPI BOOL WINAPI PtInRect(const RECT*,POINT);
+WINUSERAPI HWND WINAPI RealChildWindowFromPoint(HWND,POINT);
+WINUSERAPI UINT WINAPI RealGetWindowClassA(HWND,LPSTR,UINT);
+WINUSERAPI UINT WINAPI RealGetWindowClassW(HWND,LPWSTR,UINT);
+#define RealGetWindowClass WINELIB_NAME_AW(RealGetWindowClass)
+WINUSERAPI BOOL WINAPI RedrawWindow(HWND,const RECT*,HRGN,UINT);
+WINUSERAPI ATOM WINAPI RegisterClassA(const WNDCLASSA *);
+WINUSERAPI ATOM WINAPI RegisterClassW(const WNDCLASSW *);
+#define RegisterClass WINELIB_NAME_AW(RegisterClass)
+WINUSERAPI ATOM WINAPI RegisterClassExA(const WNDCLASSEXA *);
+WINUSERAPI ATOM WINAPI RegisterClassExW(const WNDCLASSEXW *);
+#define RegisterClassEx WINELIB_NAME_AW(RegisterClassEx)
+WINUSERAPI UINT WINAPI RegisterClipboardFormatA(LPCSTR);
+WINUSERAPI UINT WINAPI RegisterClipboardFormatW(LPCWSTR);
+#define RegisterClipboardFormat WINELIB_NAME_AW(RegisterClipboardFormat)
+WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationA(HANDLE,LPVOID,DWORD);
+WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationW(HANDLE,LPVOID,DWORD);
+#define RegisterDeviceNotification WINELIB_NAME_AW(RegisterDeviceNotification)
+WINUSERAPI BOOL WINAPI RegisterHotKey(HWND,INT,UINT,UINT);
+WINUSERAPI BOOL WINAPI RegisterRawInputDevices(PRAWINPUTDEVICE,UINT,UINT);
+WINUSERAPI UINT WINAPI RegisterWindowMessageA(LPCSTR);
+WINUSERAPI UINT WINAPI RegisterWindowMessageW(LPCWSTR);
+#define RegisterWindowMessage WINELIB_NAME_AW(RegisterWindowMessage)
+WINUSERAPI BOOL WINAPI ReleaseCapture(void);
+WINUSERAPI INT WINAPI ReleaseDC(HWND,HDC);
+WINUSERAPI BOOL WINAPI RemoveMenu(HMENU,UINT,UINT);
+WINUSERAPI HANDLE WINAPI RemovePropA(HWND,LPCSTR);
+WINUSERAPI HANDLE WINAPI RemovePropW(HWND,LPCWSTR);
+#define RemoveProp WINELIB_NAME_AW(RemoveProp)
+WINUSERAPI BOOL WINAPI ReplyMessage(LRESULT);
+WINUSERAPI BOOL WINAPI ScreenToClient(HWND,LPPOINT);
+WINUSERAPI VOID WINAPI ScrollChildren(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI ScrollDC(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT);
+WINUSERAPI BOOL WINAPI ScrollWindow(HWND,INT,INT,const RECT*,const RECT*);
+WINUSERAPI INT WINAPI ScrollWindowEx(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);
+WINUSERAPI LRESULT WINAPI SendDlgItemMessageA(HWND,INT,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI SendDlgItemMessageW(HWND,INT,UINT,WPARAM,LPARAM);
+#define SendDlgItemMessage WINELIB_NAME_AW(SendDlgItemMessage)
+WINUSERAPI UINT WINAPI SendInput(UINT,LPINPUT,int);
+WINUSERAPI LRESULT WINAPI SendMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI LRESULT WINAPI SendMessageW(HWND,UINT,WPARAM,LPARAM);
+#define SendMessage WINELIB_NAME_AW(SendMessage)
+WINUSERAPI BOOL WINAPI SendMessageCallbackA(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR);
+WINUSERAPI BOOL WINAPI SendMessageCallbackW(HWND,UINT,WPARAM,LPARAM,SENDASYNCPROC,ULONG_PTR);
+#define SendMessageCallback WINELIB_NAME_AW(SendMessageCallback)
+WINUSERAPI LRESULT WINAPI SendMessageTimeoutA(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);
+WINUSERAPI LRESULT WINAPI SendMessageTimeoutW(HWND,UINT,WPARAM,LPARAM,UINT,UINT,PDWORD_PTR);
+#define SendMessageTimeout WINELIB_NAME_AW(SendMessageTimeout)
+WINUSERAPI BOOL WINAPI SendNotifyMessageA(HWND,UINT,WPARAM,LPARAM);
+WINUSERAPI BOOL WINAPI SendNotifyMessageW(HWND,UINT,WPARAM,LPARAM);
+#define SendNotifyMessage WINELIB_NAME_AW(SendNotifyMessage)
+WINUSERAPI HWND WINAPI SetActiveWindow(HWND);
+WINUSERAPI HWND WINAPI SetCapture(HWND);
+WINUSERAPI BOOL WINAPI SetCaretBlinkTime(UINT);
+WINUSERAPI BOOL WINAPI SetCaretPos(INT,INT);
+WINUSERAPI DWORD WINAPI SetClassLongA(HWND,INT,LONG);
+WINUSERAPI DWORD WINAPI SetClassLongW(HWND,INT,LONG);
+#define SetClassLong WINELIB_NAME_AW(SetClassLong)
+#ifdef _WIN64
+WINUSERAPI ULONG_PTR WINAPI SetClassLongPtrA(HWND,INT,LONG_PTR);
+WINUSERAPI ULONG_PTR WINAPI SetClassLongPtrW(HWND,INT,LONG_PTR);
+#else
+#define SetClassLongPtrA SetClassLongA
+#define SetClassLongPtrW SetClassLongW
+#endif
+#define SetClassLongPtr WINELIB_NAME_AW(SetClassLongPtr)
+WINUSERAPI WORD WINAPI SetClassWord(HWND,INT,WORD);
+WINUSERAPI HANDLE WINAPI SetClipboardData(UINT,HANDLE);
+WINUSERAPI HWND WINAPI SetClipboardViewer(HWND);
+WINUSERAPI HCURSOR WINAPI SetCursor(HCURSOR);
+WINUSERAPI BOOL WINAPI SetCursorPos(INT,INT);
+WINUSERAPI VOID WINAPI SetDebugErrorLevel(DWORD);
+WINUSERAPI BOOL WINAPI SetDeskWallPaper(LPCSTR);
+WINUSERAPI BOOL WINAPI SetDlgItemInt(HWND,INT,UINT,BOOL);
+WINUSERAPI BOOL WINAPI SetDlgItemTextA(HWND,INT,LPCSTR);
+WINUSERAPI BOOL WINAPI SetDlgItemTextW(HWND,INT,LPCWSTR);
+#define SetDlgItemText WINELIB_NAME_AW(SetDlgItemText)
+WINUSERAPI BOOL WINAPI SetDoubleClickTime(UINT);
+WINUSERAPI HWND WINAPI SetFocus(HWND);
+WINUSERAPI BOOL WINAPI SetForegroundWindow(HWND);
+WINUSERAPI void WINAPI SetInternalWindowPos(HWND,UINT,LPRECT,LPPOINT);
+WINUSERAPI BOOL WINAPI SetKeyboardState(LPBYTE);
+WINUSERAPI VOID WINAPI SetLastErrorEx(DWORD,DWORD);
+WINUSERAPI BOOL WINAPI SetLayeredWindowAttributes(HWND,COLORREF,BYTE,DWORD);
+WINUSERAPI BOOL WINAPI SetMenu(HWND,HMENU);
+WINUSERAPI BOOL WINAPI SetMenuContextHelpId(HMENU,DWORD);
+WINUSERAPI BOOL WINAPI SetMenuDefaultItem(HMENU,UINT,UINT);
+WINUSERAPI BOOL WINAPI SetMenuInfo(HMENU,LPCMENUINFO);
+WINUSERAPI BOOL WINAPI SetMenuItemBitmaps(HMENU,UINT,UINT,HBITMAP,HBITMAP);
+WINUSERAPI BOOL WINAPI SetMenuItemInfoA(HMENU,UINT,BOOL,const MENUITEMINFOA*);
+WINUSERAPI BOOL WINAPI SetMenuItemInfoW(HMENU,UINT,BOOL,const MENUITEMINFOW*);
+#define SetMenuItemInfo WINELIB_NAME_AW(SetMenuItemInfo)
+WINUSERAPI LPARAM WINAPI SetMessageExtraInfo(LPARAM);
+WINUSERAPI BOOL WINAPI SetMessageQueue(INT);
+WINUSERAPI BOOL WINAPI SetProcessDefaultLayout(DWORD);
+WINUSERAPI BOOL WINAPI SetProcessWindowStation(HWINSTA);
+WINUSERAPI HWND WINAPI SetParent(HWND,HWND);
+WINUSERAPI BOOL WINAPI SetPropA(HWND,LPCSTR,HANDLE);
+WINUSERAPI BOOL WINAPI SetPropW(HWND,LPCWSTR,HANDLE);
+#define SetProp WINELIB_NAME_AW(SetProp)
+WINUSERAPI BOOL WINAPI SetRect(LPRECT,INT,INT,INT,INT);
+WINUSERAPI BOOL WINAPI SetRectEmpty(LPRECT);
+WINUSERAPI INT WINAPI SetScrollInfo(HWND,INT,const SCROLLINFO*,BOOL);
+WINUSERAPI INT WINAPI SetScrollPos(HWND,INT,INT,BOOL);
+WINUSERAPI BOOL WINAPI SetScrollRange(HWND,INT,INT,INT,BOOL);
+#define SetSysModalWindow(hwnd) ((HWND)0)
+WINUSERAPI BOOL WINAPI SetSystemCursor(HCURSOR,DWORD);
+WINUSERAPI BOOL WINAPI SetSystemMenu(HWND,HMENU);
+WINUSERAPI UINT_PTR WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC);
+WINUSERAPI BOOL WINAPI SetThreadDesktop(HDESK);
+WINUSERAPI UINT_PTR WINAPI SetTimer(HWND,UINT_PTR,UINT,TIMERPROC);
+WINUSERAPI BOOL WINAPI SetUserObjectInformationA(HANDLE,INT,LPVOID,DWORD);
+WINUSERAPI BOOL WINAPI SetUserObjectInformationW(HANDLE,INT,LPVOID,DWORD);
+#define SetUserObjectInformation WINELIB_NAME_AW(SetUserObjectInformation)
+WINUSERAPI BOOL WINAPI SetUserObjectSecurity(HANDLE,PSECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
+WINUSERAPI BOOL WINAPI SetWindowContextHelpId(HWND,DWORD);
+WINUSERAPI LONG WINAPI SetWindowLongA(HWND,INT,LONG);
+WINUSERAPI LONG WINAPI SetWindowLongW(HWND,INT,LONG);
+#define SetWindowLong WINELIB_NAME_AW(SetWindowLong)
+#ifdef _WIN64
+WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrA(HWND,INT,LONG_PTR);
+WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrW(HWND,INT,LONG_PTR);
+#else
+#define SetWindowLongPtrA SetWindowLongA
+#define SetWindowLongPtrW SetWindowLongW
+#endif
+#define SetWindowLongPtr WINELIB_NAME_AW(SetWindowLongPtr)
+WINUSERAPI BOOL WINAPI SetWindowPlacement(HWND,const WINDOWPLACEMENT*);
+WINUSERAPI HHOOK WINAPI SetWindowsHookA(INT,HOOKPROC);
+WINUSERAPI HHOOK WINAPI SetWindowsHookW(INT,HOOKPROC);
+#define SetWindowsHook WINELIB_NAME_AW(SetWindowsHook)
+WINUSERAPI HHOOK WINAPI SetWindowsHookExA(INT,HOOKPROC,HINSTANCE,DWORD);
+WINUSERAPI HHOOK WINAPI SetWindowsHookExW(INT,HOOKPROC,HINSTANCE,DWORD);
+#define SetWindowsHookEx WINELIB_NAME_AW(SetWindowsHookEx)
+WINUSERAPI BOOL WINAPI SetWindowPos(HWND,HWND,INT,INT,INT,INT,UINT);
+WINUSERAPI INT WINAPI SetWindowRgn(HWND,HRGN,BOOL);
+WINUSERAPI BOOL WINAPI SetWindowTextA(HWND,LPCSTR);
+WINUSERAPI BOOL WINAPI SetWindowTextW(HWND,LPCWSTR);
+#define SetWindowText WINELIB_NAME_AW(SetWindowText)
+WINUSERAPI WORD WINAPI SetWindowWord(HWND,INT,WORD);
+WINUSERAPI HWINEVENTHOOK WINAPI SetWinEventHook(DWORD,DWORD,HMODULE,WINEVENTPROC,DWORD,DWORD,DWORD);
+WINUSERAPI BOOL WINAPI ShowCaret(HWND);
+WINUSERAPI INT WINAPI ShowCursor(BOOL);
+WINUSERAPI BOOL WINAPI ShowScrollBar(HWND,INT,BOOL);
+WINUSERAPI BOOL WINAPI ShowOwnedPopups(HWND,BOOL);
+WINUSERAPI BOOL WINAPI ShowWindow(HWND,INT);
+WINUSERAPI BOOL WINAPI ShowWindowAsync(HWND,INT);
+WINUSERAPI BOOL WINAPI SubtractRect(LPRECT,const RECT*,const RECT*);
+WINUSERAPI BOOL WINAPI SwapMouseButton(BOOL);
+WINUSERAPI BOOL WINAPI SwitchDesktop(HDESK);
+WINUSERAPI VOID WINAPI SwitchToThisWindow(HWND,BOOL);
+WINUSERAPI BOOL WINAPI SystemParametersInfoA(UINT,UINT,LPVOID,UINT);
+WINUSERAPI BOOL WINAPI SystemParametersInfoW(UINT,UINT,LPVOID,UINT);
+#define SystemParametersInfo WINELIB_NAME_AW(SystemParametersInfo)
+WINUSERAPI LONG WINAPI TabbedTextOutA(HDC,INT,INT,LPCSTR,INT,INT,const INT*,INT);
+WINUSERAPI LONG WINAPI TabbedTextOutW(HDC,INT,INT,LPCWSTR,INT,INT,const INT*,INT);
+#define TabbedTextOut WINELIB_NAME_AW(TabbedTextOut)
+WINUSERAPI WORD WINAPI TileWindows (HWND,UINT,const RECT *,UINT,const HWND *);
+WINUSERAPI INT WINAPI ToAscii(UINT,UINT,const BYTE *,LPWORD,UINT);
+WINUSERAPI INT WINAPI ToAsciiEx(UINT,UINT,const BYTE *,LPWORD,UINT,HKL);
+WINUSERAPI INT WINAPI ToUnicode(UINT,UINT,const BYTE *,LPWSTR,int,UINT);
+WINUSERAPI INT WINAPI ToUnicodeEx(UINT,UINT,const BYTE *,LPWSTR,int,UINT,HKL);
+WINUSERAPI BOOL WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT);
+WINUSERAPI BOOL WINAPI TrackPopupMenu(HMENU,UINT,INT,INT,INT,HWND,const RECT*);
+WINUSERAPI BOOL WINAPI TrackPopupMenuEx(HMENU,UINT,INT,INT,HWND,LPTPMPARAMS);
+WINUSERAPI INT WINAPI TranslateAcceleratorA(HWND,HACCEL,LPMSG);
+WINUSERAPI INT WINAPI TranslateAcceleratorW(HWND,HACCEL,LPMSG);
+#define TranslateAccelerator WINELIB_NAME_AW(TranslateAccelerator)
+WINUSERAPI BOOL WINAPI TranslateMDISysAccel(HWND,LPMSG);
+WINUSERAPI BOOL WINAPI TranslateMessage(const MSG*);
+WINUSERAPI BOOL WINAPI UnhookWinEvent(HWINEVENTHOOK);
+WINUSERAPI BOOL WINAPI UnhookWindowsHook(INT,HOOKPROC);
+WINUSERAPI BOOL WINAPI UnhookWindowsHookEx(HHOOK);
+WINUSERAPI BOOL WINAPI UnloadKeyboardLayout(HKL);
+WINUSERAPI BOOL WINAPI UnionRect(LPRECT,const RECT*,const RECT*);
+WINUSERAPI BOOL WINAPI UnregisterClassA(LPCSTR,HINSTANCE);
+WINUSERAPI BOOL WINAPI UnregisterClassW(LPCWSTR,HINSTANCE);
+#define UnregisterClass WINELIB_NAME_AW(UnregisterClass)
+WINUSERAPI BOOL WINAPI UnregisterDeviceNotification(HDEVNOTIFY);
+WINUSERAPI BOOL WINAPI UnregisterHotKey(HWND,INT);
+WINUSERAPI BOOL WINAPI UpdateWindow(HWND);
+WINUSERAPI BOOL WINAPI UserHandleGrantAccess(HANDLE,HANDLE,BOOL);
+WINUSERAPI UINT WINAPI UserRealizePalette(HDC);
+WINUSERAPI BOOL WINAPI ValidateRect(HWND,const RECT*);
+WINUSERAPI BOOL WINAPI ValidateRgn(HWND,HRGN);
+WINUSERAPI SHORT WINAPI VkKeyScanA(CHAR);
+WINUSERAPI SHORT WINAPI VkKeyScanW(WCHAR);
+#define VkKeyScan WINELIB_NAME_AW(VkKeyScan)
+WINUSERAPI WORD WINAPI VkKeyScanExA(CHAR, HKL);
+WINUSERAPI WORD WINAPI VkKeyScanExW(WCHAR, HKL);
+#define VkKeyScanEx WINELIB_NAME_AW(VkKeyScanEx)
+WINUSERAPI DWORD WINAPI WaitForInputIdle(HANDLE,DWORD);
+WINUSERAPI BOOL WINAPI WaitMessage(void);
+WINUSERAPI HWND WINAPI WindowFromDC(HDC);
+WINUSERAPI HWND WINAPI WindowFromPoint(POINT);
+WINUSERAPI BOOL WINAPI WinHelpA(HWND,LPCSTR,UINT,ULONG_PTR);
+WINUSERAPI BOOL WINAPI WinHelpW(HWND,LPCWSTR,UINT,ULONG_PTR);
+#define WinHelp WINELIB_NAME_AW(WinHelp)
+WINUSERAPI VOID WINAPI keybd_event(BYTE,BYTE,DWORD,ULONG_PTR);
+WINUSERAPI VOID WINAPI mouse_event(DWORD,DWORD,DWORD,DWORD,ULONG_PTR);
+WINUSERAPI INT WINAPIV wsprintfA(LPSTR,LPCSTR,...);
+WINUSERAPI INT WINAPIV wsprintfW(LPWSTR,LPCWSTR,...);
+#define wsprintf WINELIB_NAME_AW(wsprintf)
+WINUSERAPI INT WINAPI wvsprintfA(LPSTR,LPCSTR,__ms_va_list);
+WINUSERAPI INT WINAPI wvsprintfW(LPWSTR,LPCWSTR,__ms_va_list);
+#define wvsprintf WINELIB_NAME_AW(wvsprintf)
+
+/* Undocumented functions */
+
+/* NOTE: This is SYSTEM.3, not USER.182, which is also named KillSystemTimer */
+WORD WINAPI SYSTEM_KillSystemTimer( WORD );
+
+#ifdef __WINESRC__
+WINUSERAPI BOOL CDECL __wine_send_input( HWND hwnd, const INPUT *input );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINUSER_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
new file mode 100644
index 00000000..63777431
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winuser.rh
@@ -0,0 +1,1351 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* Macro to deal with LP64 <=> LLP64 differences in numeric constants with 'l' modifier */
+#ifndef __MSABI_LONG
+# if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN__)
+# define __MSABI_LONG(x) x ## l
+# else
+# define __MSABI_LONG(x) x
+# endif
+#endif
+
+#ifdef RC_INVOKED
+# define MAKEINTRESOURCE(i) i
+#endif
+
+
+#define RT_MANIFEST MAKEINTRESOURCE(24)
+#define CREATEPROCESS_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1)
+#define ISOLATIONAWARE_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(2)
+#define ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(3)
+#define MINIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(1)
+#define MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID MAKEINTRESOURCE(16)
+
+
+/*** ShowWindow() codes ***/
+#define SW_HIDE 0
+#define SW_SHOWNORMAL 1
+#define SW_NORMAL SW_SHOWNORMAL
+#define SW_SHOWMINIMIZED 2
+#define SW_SHOWMAXIMIZED 3
+#define SW_MAXIMIZE SW_SHOWMAXIMIZED
+#define SW_SHOWNOACTIVATE 4
+#define SW_SHOW 5
+#define SW_MINIMIZE 6
+#define SW_SHOWMINNOACTIVE 7
+#define SW_SHOWNA 8
+#define SW_RESTORE 9
+#define SW_SHOWDEFAULT 10
+#define SW_FORCEMINIMIZE 11
+#define SW_MAX 11
+#define SW_NORMALNA 0xCC /* Undocumented. Flag in MinMaximize */
+
+/* Obsolete ShowWindow() codes for compatibility */
+#define HIDE_WINDOW SW_HIDE
+#define SHOW_OPENWINDOW SW_SHOWNORMAL
+#define SHOW_ICONWINDOW SW_SHOWMINIMIZED
+#define SHOW_FULLSCREEN SW_SHOWMAXIMIZED
+#define SHOW_OPENNOACTIVATE SW_SHOWNOACTIVATE
+
+/* WM_SHOWWINDOW lParam codes */
+#define SW_PARENTCLOSING 1
+#define SW_OTHERZOOM 2
+#define SW_PARENTOPENING 3
+#define SW_OTHERUNZOOM 4
+
+
+/*** Virtual key codes ***/
+#define VK_LBUTTON 0x01
+#define VK_RBUTTON 0x02
+#define VK_CANCEL 0x03
+#define VK_MBUTTON 0x04
+#define VK_XBUTTON1 0x05
+#define VK_XBUTTON2 0x06
+/* 0x07 Undefined */
+#define VK_BACK 0x08
+#define VK_TAB 0x09
+/* 0x0A-0x0B Undefined */
+#define VK_CLEAR 0x0C
+#define VK_RETURN 0x0D
+/* 0x0E-0x0F Undefined */
+#define VK_SHIFT 0x10
+#define VK_CONTROL 0x11
+#define VK_MENU 0x12
+#define VK_PAUSE 0x13
+#define VK_CAPITAL 0x14
+
+#define VK_KANA 0x15
+#define VK_HANGEUL VK_KANA
+#define VK_HANGUL VK_KANA
+#define VK_JUNJA 0x17
+#define VK_FINAL 0x18
+#define VK_HANJA 0x19
+#define VK_KANJI VK_HANJA
+
+/* 0x1A Undefined */
+#define VK_ESCAPE 0x1B
+
+#define VK_CONVERT 0x1C
+#define VK_NONCONVERT 0x1D
+#define VK_ACCEPT 0x1E
+#define VK_MODECHANGE 0x1F
+
+#define VK_SPACE 0x20
+#define VK_PRIOR 0x21
+#define VK_NEXT 0x22
+#define VK_END 0x23
+#define VK_HOME 0x24
+#define VK_LEFT 0x25
+#define VK_UP 0x26
+#define VK_RIGHT 0x27
+#define VK_DOWN 0x28
+#define VK_SELECT 0x29
+#define VK_PRINT 0x2A /* OEM specific in Windows 3.1 SDK */
+#define VK_EXECUTE 0x2B
+#define VK_SNAPSHOT 0x2C
+#define VK_INSERT 0x2D
+#define VK_DELETE 0x2E
+#define VK_HELP 0x2F
+/* VK_0 - VK-9 0x30-0x39 Use ASCII instead */
+/* 0x3A-0x40 Undefined */
+/* VK_A - VK_Z 0x41-0x5A Use ASCII instead */
+#define VK_LWIN 0x5B
+#define VK_RWIN 0x5C
+#define VK_APPS 0x5D
+/* 0x5E Unassigned */
+#define VK_SLEEP 0x5F
+#define VK_NUMPAD0 0x60
+#define VK_NUMPAD1 0x61
+#define VK_NUMPAD2 0x62
+#define VK_NUMPAD3 0x63
+#define VK_NUMPAD4 0x64
+#define VK_NUMPAD5 0x65
+#define VK_NUMPAD6 0x66
+#define VK_NUMPAD7 0x67
+#define VK_NUMPAD8 0x68
+#define VK_NUMPAD9 0x69
+#define VK_MULTIPLY 0x6A
+#define VK_ADD 0x6B
+#define VK_SEPARATOR 0x6C
+#define VK_SUBTRACT 0x6D
+#define VK_DECIMAL 0x6E
+#define VK_DIVIDE 0x6F
+#define VK_F1 0x70
+#define VK_F2 0x71
+#define VK_F3 0x72
+#define VK_F4 0x73
+#define VK_F5 0x74
+#define VK_F6 0x75
+#define VK_F7 0x76
+#define VK_F8 0x77
+#define VK_F9 0x78
+#define VK_F10 0x79
+#define VK_F11 0x7A
+#define VK_F12 0x7B
+#define VK_F13 0x7C
+#define VK_F14 0x7D
+#define VK_F15 0x7E
+#define VK_F16 0x7F
+#define VK_F17 0x80
+#define VK_F18 0x81
+#define VK_F19 0x82
+#define VK_F20 0x83
+#define VK_F21 0x84
+#define VK_F22 0x85
+#define VK_F23 0x86
+#define VK_F24 0x87
+/* 0x88-0x8F Unassigned */
+#define VK_NUMLOCK 0x90
+#define VK_SCROLL 0x91
+#define VK_OEM_NEC_EQUAL 0x92
+#define VK_OEM_FJ_JISHO 0x92
+#define VK_OEM_FJ_MASSHOU 0x93
+#define VK_OEM_FJ_TOUROKU 0x94
+#define VK_OEM_FJ_LOYA 0x95
+#define VK_OEM_FJ_ROYA 0x96
+/* 0x97-0x9F Unassigned */
+/*
+ * differencing between right and left shift/control/alt key.
+ * Used only by GetAsyncKeyState() and GetKeyState().
+ */
+#define VK_LSHIFT 0xA0
+#define VK_RSHIFT 0xA1
+#define VK_LCONTROL 0xA2
+#define VK_RCONTROL 0xA3
+#define VK_LMENU 0xA4
+#define VK_RMENU 0xA5
+
+#define VK_BROWSER_BACK 0xA6
+#define VK_BROWSER_FORWARD 0xA7
+#define VK_BROWSER_REFRESH 0xA8
+#define VK_BROWSER_STOP 0xA9
+#define VK_BROWSER_SEARCH 0xAA
+#define VK_BROWSER_FAVORITES 0xAB
+#define VK_BROWSER_HOME 0xAC
+#define VK_VOLUME_MUTE 0xAD
+#define VK_VOLUME_DOWN 0xAE
+#define VK_VOLUME_UP 0xAF
+#define VK_MEDIA_NEXT_TRACK 0xB0
+#define VK_MEDIA_PREV_TRACK 0xB1
+#define VK_MEDIA_STOP 0xB2
+#define VK_MEDIA_PLAY_PAUSE 0xB3
+#define VK_LAUNCH_MAIL 0xB4
+#define VK_LAUNCH_MEDIA_SELECT 0xB5
+#define VK_LAUNCH_APP1 0xB6
+#define VK_LAUNCH_APP2 0xB7
+
+/* 0xB8-0xB9 Unassigned */
+#define VK_OEM_1 0xBA
+#define VK_OEM_PLUS 0xBB
+#define VK_OEM_COMMA 0xBC
+#define VK_OEM_MINUS 0xBD
+#define VK_OEM_PERIOD 0xBE
+#define VK_OEM_2 0xBF
+#define VK_OEM_3 0xC0
+/* 0xC1-0xDA Unassigned */
+#define VK_OEM_4 0xDB
+#define VK_OEM_5 0xDC
+#define VK_OEM_6 0xDD
+#define VK_OEM_7 0xDE
+#define VK_OEM_8 0xDF
+/* 0xE0 OEM specific */
+#define VK_OEM_AX 0xE1 /* "AX" key on Japanese AX keyboard */
+#define VK_OEM_102 0xE2 /* "<>" or "\|" on RT 102-key keyboard */
+#define VK_ICO_HELP 0xE3 /* Help key on ICO */
+#define VK_ICO_00 0xE4 /* 00 key on ICO */
+#define VK_PROCESSKEY 0xE5
+#define VK_ICO_CLEAR 0xE6
+
+#define VK_PACKET 0xE7
+/* 0xE8 Unassigned */
+
+#define VK_OEM_RESET 0xE9
+#define VK_OEM_JUMP 0xEA
+#define VK_OEM_PA1 0xEB
+#define VK_OEM_PA2 0xEC
+#define VK_OEM_PA3 0xED
+#define VK_OEM_WSCTRL 0xEE
+#define VK_OEM_CUSEL 0xEF
+#define VK_OEM_ATTN 0xF0
+#define VK_OEM_FINISH 0xF1
+#define VK_OEM_COPY 0xF2
+#define VK_OEM_AUTO 0xF3
+#define VK_OEM_ENLW 0xF4
+#define VK_OEM_BACKTAB 0xF5
+#define VK_ATTN 0xF6
+#define VK_CRSEL 0xF7
+#define VK_EXSEL 0xF8
+#define VK_EREOF 0xF9
+#define VK_PLAY 0xFA
+#define VK_ZOOM 0xFB
+#define VK_NONAME 0xFC
+#define VK_PA1 0xFD
+#define VK_OEM_CLEAR 0xFE
+/* 0xFF Unassigned */
+
+
+/*** Messages ***/
+#ifndef NOWINMESSAGES
+#define WM_NULL 0x0000
+#define WM_CREATE 0x0001
+#define WM_DESTROY 0x0002
+#define WM_MOVE 0x0003
+#define WM_SIZEWAIT 0x0004 /* DDK / Win16 */
+#define WM_SIZE 0x0005
+#define WM_ACTIVATE 0x0006
+
+/* WM_ACTIVATE wParam values */
+#define WA_INACTIVE 0
+#define WA_ACTIVE 1
+#define WA_CLICKACTIVE 2
+
+#define WM_SETFOCUS 0x0007
+#define WM_KILLFOCUS 0x0008
+#define WM_SETVISIBLE 0x0009 /* DDK / Win16 */
+#define WM_ENABLE 0x000a
+#define WM_SETREDRAW 0x000b
+#define WM_SETTEXT 0x000c
+#define WM_GETTEXT 0x000d
+#define WM_GETTEXTLENGTH 0x000e
+#define WM_PAINT 0x000f
+#define WM_CLOSE 0x0010
+#define WM_QUERYENDSESSION 0x0011
+#define WM_QUIT 0x0012
+#define WM_QUERYOPEN 0x0013
+#define WM_ERASEBKGND 0x0014
+#define WM_SYSCOLORCHANGE 0x0015
+#define WM_ENDSESSION 0x0016
+#define WM_SYSTEMERROR 0x0017 /* DDK / Win16 */
+#define WM_SHOWWINDOW 0x0018
+#define WM_CTLCOLOR 0x0019 /* Added from windowsx.h */
+#define WM_WININICHANGE 0x001a
+#define WM_SETTINGCHANGE WM_WININICHANGE
+#define WM_DEVMODECHANGE 0x001b
+#define WM_ACTIVATEAPP 0x001c
+#define WM_FONTCHANGE 0x001d
+#define WM_TIMECHANGE 0x001e
+#define WM_CANCELMODE 0x001f
+#define WM_SETCURSOR 0x0020
+#define WM_MOUSEACTIVATE 0x0021
+#define WM_CHILDACTIVATE 0x0022
+#define WM_QUEUESYNC 0x0023
+#define WM_GETMINMAXINFO 0x0024
+
+#define WM_PAINTICON 0x0026
+#define WM_ICONERASEBKGND 0x0027
+#define WM_NEXTDLGCTL 0x0028
+#define WM_ALTTABACTIVE 0x0029 /* DDK / Win16 */
+#define WM_SPOOLERSTATUS 0x002a
+#define WM_DRAWITEM 0x002b
+#define WM_MEASUREITEM 0x002c
+#define WM_DELETEITEM 0x002d
+#define WM_VKEYTOITEM 0x002e
+#define WM_CHARTOITEM 0x002f
+#define WM_SETFONT 0x0030
+#define WM_GETFONT 0x0031
+#define WM_SETHOTKEY 0x0032
+#define WM_GETHOTKEY 0x0033
+#define WM_FILESYSCHANGE 0x0034 /* DDK / Win16 */
+#define WM_ISACTIVEICON 0x0035 /* DDK / Win16 */
+#define WM_QUERYPARKICON 0x0036 /* Undocumented */
+#define WM_QUERYDRAGICON 0x0037
+#define WM_QUERYSAVESTATE 0x0038 /* Undocumented */
+#define WM_COMPAREITEM 0x0039
+#define WM_TESTING 0x003a /* DDK / Win16 */
+
+#define WM_GETOBJECT 0x003d
+
+#define WM_ACTIVATESHELLWINDOW 0x003e /* FIXME: Wine-only */
+
+#define WM_COMPACTING 0x0041
+
+#define WM_COMMNOTIFY 0x0044
+#define WM_WINDOWPOSCHANGING 0x0046
+#define WM_WINDOWPOSCHANGED 0x0047
+
+#define WM_POWER 0x0048
+
+/* For WM_POWER */
+#define PWR_OK 1
+#define PWR_FAIL (-1)
+#define PWR_SUSPENDREQUEST 1
+#define PWR_SUSPENDRESUME 2
+#define PWR_CRITICALRESUME 3
+
+/* Win32 4.0 messages */
+#define WM_COPYDATA 0x004a
+#define WM_CANCELJOURNAL 0x004b
+#define WM_KEYF1 0x004d /* DDK / Win16 */
+#define WM_NOTIFY 0x004e
+#define WM_INPUTLANGCHANGEREQUEST 0x0050
+#define WM_INPUTLANGCHANGE 0x0051
+#define WM_TCARD 0x0052
+#define WM_HELP 0x0053
+#define WM_USERCHANGED 0x0054
+#define WM_NOTIFYFORMAT 0x0055
+
+/* WM_NOTIFYFORMAT commands and return values */
+#define NFR_ANSI 1
+#define NFR_UNICODE 2
+#define NF_QUERY 3
+#define NF_REQUERY 4
+
+#define WM_CONTEXTMENU 0x007b
+#define WM_STYLECHANGING 0x007c
+#define WM_STYLECHANGED 0x007d
+#define WM_DISPLAYCHANGE 0x007e
+#define WM_GETICON 0x007f
+#define WM_SETICON 0x0080
+
+/* Non-client system messages */
+#define WM_NCCREATE 0x0081
+#define WM_NCDESTROY 0x0082
+#define WM_NCCALCSIZE 0x0083
+#define WM_NCHITTEST 0x0084
+#define WM_NCPAINT 0x0085
+#define WM_NCACTIVATE 0x0086
+
+#define WM_GETDLGCODE 0x0087
+#define WM_SYNCPAINT 0x0088
+#define WM_SYNCTASK 0x0089 /* DDK / Win16 */
+
+/* Non-client mouse messages */
+#define WM_NCMOUSEMOVE 0x00a0
+#define WM_NCLBUTTONDOWN 0x00a1
+#define WM_NCLBUTTONUP 0x00a2
+#define WM_NCLBUTTONDBLCLK 0x00a3
+#define WM_NCRBUTTONDOWN 0x00a4
+#define WM_NCRBUTTONUP 0x00a5
+#define WM_NCRBUTTONDBLCLK 0x00a6
+#define WM_NCMBUTTONDOWN 0x00a7
+#define WM_NCMBUTTONUP 0x00a8
+#define WM_NCMBUTTONDBLCLK 0x00a9
+
+#define WM_NCXBUTTONDOWN 0x00ab
+#define WM_NCXBUTTONUP 0x00ac
+#define WM_NCXBUTTONDBLCLK 0x00ad
+
+/* Raw input */
+#define WM_INPUT_DEVICE_CHANGE 0x00fe
+#define WM_INPUT 0x00ff
+
+/* Keyboard messages */
+#define WM_KEYFIRST 0x0100
+#define WM_KEYDOWN WM_KEYFIRST
+#define WM_KEYUP 0x0101
+#define WM_CHAR 0x0102
+#define WM_DEADCHAR 0x0103
+#define WM_SYSKEYDOWN 0x0104
+#define WM_SYSKEYUP 0x0105
+#define WM_SYSCHAR 0x0106
+#define WM_SYSDEADCHAR 0x0107
+#define WM_UNICHAR 0x0109
+#define WM_KEYLAST WM_UNICHAR
+
+#define UNICODE_NOCHAR 0xffff
+
+/* Win32 4.0 messages for IME */
+#define WM_IME_STARTCOMPOSITION 0x010d
+#define WM_IME_ENDCOMPOSITION 0x010e
+#define WM_IME_COMPOSITION 0x010f
+#define WM_IME_KEYLAST 0x010f
+
+#define WM_INITDIALOG 0x0110
+#define WM_COMMAND 0x0111
+#define WM_SYSCOMMAND 0x0112
+#define WM_TIMER 0x0113
+
+/* Scroll messages */
+#define WM_HSCROLL 0x0114
+#define WM_VSCROLL 0x0115
+
+/* Menu messages */
+#define WM_INITMENU 0x0116
+#define WM_INITMENUPOPUP 0x0117
+#define WM_GESTURE 0x0119
+#define WM_GESTURENOTIFY 0x011A
+
+#define WM_MENUSELECT 0x011F
+#define WM_MENUCHAR 0x0120
+#define WM_ENTERIDLE 0x0121
+
+#define WM_MENURBUTTONUP 0x0122
+#define WM_MENUDRAG 0x0123
+#define WM_MENUGETOBJECT 0x0124
+#define WM_UNINITMENUPOPUP 0x0125
+#define WM_MENUCOMMAND 0x0126
+
+#define WM_CHANGEUISTATE 0x0127
+#define WM_UPDATEUISTATE 0x0128
+#define WM_QUERYUISTATE 0x0129
+
+/* UI flags for WM_*UISTATE */
+/* for low-order word of wparam */
+#define UIS_SET 1
+#define UIS_CLEAR 2
+#define UIS_INITIALIZE 3
+/* for hi-order word of wparam */
+#define UISF_HIDEFOCUS 0x1
+#define UISF_HIDEACCEL 0x2
+#define UISF_ACTIVE 0x4
+
+#define WM_LBTRACKPOINT 0x0131 /* DDK / Win16 */
+
+/* Win32 CTLCOLOR messages */
+#define WM_CTLCOLORMSGBOX 0x0132
+#define WM_CTLCOLOREDIT 0x0133
+#define WM_CTLCOLORLISTBOX 0x0134
+#define WM_CTLCOLORBTN 0x0135
+#define WM_CTLCOLORDLG 0x0136
+#define WM_CTLCOLORSCROLLBAR 0x0137
+#define WM_CTLCOLORSTATIC 0x0138
+
+#define MN_GETHMENU 0x01E1
+
+/* Mouse messages */
+#define WM_MOUSEFIRST 0x0200
+#define WM_MOUSEMOVE WM_MOUSEFIRST
+#define WM_LBUTTONDOWN 0x0201
+#define WM_LBUTTONUP 0x0202
+#define WM_LBUTTONDBLCLK 0x0203
+#define WM_RBUTTONDOWN 0x0204
+#define WM_RBUTTONUP 0x0205
+#define WM_RBUTTONDBLCLK 0x0206
+#define WM_MBUTTONDOWN 0x0207
+#define WM_MBUTTONUP 0x0208
+#define WM_MBUTTONDBLCLK 0x0209
+#define WM_MOUSEWHEEL 0x020A
+#define WM_XBUTTONDOWN 0x020B
+#define WM_XBUTTONUP 0x020C
+#define WM_XBUTTONDBLCLK 0x020D
+#define WM_MOUSEHWHEEL 0x020E
+#define WM_MOUSELAST WM_MOUSEHWHEEL
+
+/* Macros for the mouse messages */
+#define WHEEL_DELTA 120
+#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
+#define WHEEL_PAGESCROLL (UINT_MAX)
+
+#define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam))
+#define GET_NCHITTEST_WPARAM(wParam) ((short)LOWORD(wParam))
+#define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam))
+#define XBUTTON1 0x0001
+#define XBUTTON2 0x0002
+
+#define WM_PARENTNOTIFY 0x0210
+#define WM_ENTERMENULOOP 0x0211
+#define WM_EXITMENULOOP 0x0212
+#define WM_NEXTMENU 0x0213
+
+/* Win32 4.0 messages */
+#define WM_SIZING 0x0214
+#define WM_CAPTURECHANGED 0x0215
+#define WM_MOVING 0x0216
+#define WM_POWERBROADCAST 0x0218
+#define WM_DEVICECHANGE 0x0219
+/* MDI messages */
+#define WM_MDICREATE 0x0220
+#define WM_MDIDESTROY 0x0221
+#define WM_MDIACTIVATE 0x0222
+#define WM_MDIRESTORE 0x0223
+#define WM_MDINEXT 0x0224
+#define WM_MDIMAXIMIZE 0x0225
+#define WM_MDITILE 0x0226
+#define WM_MDICASCADE 0x0227
+#define WM_MDIICONARRANGE 0x0228
+#define WM_MDIGETACTIVE 0x0229
+#define WM_MDISETMENU 0x0230
+#define WM_MDIREFRESHMENU 0x0234
+
+/* D&D messages */
+#define WM_DROPOBJECT 0x022A /* DDK / Win16 */
+#define WM_QUERYDROPOBJECT 0x022B /* DDK / Win16 */
+#define WM_BEGINDRAG 0x022C /* DDK / Win16 */
+#define WM_DRAGLOOP 0x022D /* DDK / Win16 */
+#define WM_DRAGSELECT 0x022E /* DDK / Win16 */
+#define WM_DRAGMOVE 0x022F /* DDK / Win16 */
+
+#define WM_ENTERSIZEMOVE 0x0231
+#define WM_EXITSIZEMOVE 0x0232
+#define WM_DROPFILES 0x0233
+
+#define WM_TOUCH 0x0240
+
+/* Win32 4.0 messages for IME */
+#define WM_IME_SETCONTEXT 0x0281
+#define WM_IME_NOTIFY 0x0282
+#define WM_IME_CONTROL 0x0283
+#define WM_IME_COMPOSITIONFULL 0x0284
+#define WM_IME_SELECT 0x0285
+#define WM_IME_CHAR 0x0286
+/* Win32 5.0 messages for IME */
+#define WM_IME_REQUEST 0x0288
+
+/* Win32 4.0 messages for IME */
+#define WM_IME_KEYDOWN 0x0290
+#define WM_IME_KEYUP 0x0291
+
+#define WM_NCMOUSEHOVER 0x02A0
+#define WM_MOUSEHOVER 0x02A1
+#define WM_MOUSELEAVE 0x02A3
+#define WM_NCMOUSELEAVE 0x02A2
+
+#define WM_WTSSESSION_CHANGE 0x02B1
+
+#define WM_TABLET_FIRST 0x02c0
+#define WM_TABLET_LAST 0x02df
+
+/* Clipboard command messages */
+#define WM_CUT 0x0300
+#define WM_COPY 0x0301
+#define WM_PASTE 0x0302
+#define WM_CLEAR 0x0303
+#define WM_UNDO 0x0304
+
+/* Clipboard owner messages */
+#define WM_RENDERFORMAT 0x0305
+#define WM_RENDERALLFORMATS 0x0306
+#define WM_DESTROYCLIPBOARD 0x0307
+
+/* Clipboard viewer messages */
+#define WM_DRAWCLIPBOARD 0x0308
+#define WM_PAINTCLIPBOARD 0x0309
+#define WM_VSCROLLCLIPBOARD 0x030A
+#define WM_SIZECLIPBOARD 0x030B
+#define WM_ASKCBFORMATNAME 0x030C
+#define WM_CHANGECBCHAIN 0x030D
+#define WM_HSCROLLCLIPBOARD 0x030E
+
+#define WM_QUERYNEWPALETTE 0x030F
+#define WM_PALETTEISCHANGING 0x0310
+#define WM_PALETTECHANGED 0x0311
+#define WM_HOTKEY 0x0312
+
+#define WM_PRINT 0x0317
+#define WM_PRINTCLIENT 0x0318
+#define WM_APPCOMMAND 0x0319
+#define WM_THEMECHANGED 0x031A
+#define WM_CLIPBOARDUPDATE 0x031D
+
+#define WM_DWMCOMPOSITIONCHANGED 0x031E
+#define WM_DWMNCRENDERINGCHANGED 0x031F
+#define WM_DWMCOLORIZATIONCOLORCHANGED 0x0320
+#define WM_DWMWINDOWMAXIMIZEDCHANGE 0x0321
+#define WM_DWMSENDICONICTHUMBNAIL 0x0323
+#define WM_DWMSENDICONICLIVEPREVIEWBITMAP 0x0326
+
+#define WM_GETTITLEBARINFOEX 0x033F
+
+#define WM_HANDHELDFIRST 0x0358
+#define WM_HANDHELDLAST 0x035F
+
+#define WM_AFXFIRST 0x0360
+#define WM_AFXLAST 0x037F
+
+#define WM_PENWINFIRST 0x0380
+#define WM_PENWINLAST 0x038F
+
+#define WM_USER 0x0400
+
+#define WM_APP 0x8000
+
+
+/* wParam for WM_SIZING message */
+#define WMSZ_LEFT 1
+#define WMSZ_RIGHT 2
+#define WMSZ_TOP 3
+#define WMSZ_TOPLEFT 4
+#define WMSZ_TOPRIGHT 5
+#define WMSZ_BOTTOM 6
+#define WMSZ_BOTTOMLEFT 7
+#define WMSZ_BOTTOMRIGHT 8
+
+/* WM_NCHITTEST return codes */
+#define HTERROR (-2)
+#define HTTRANSPARENT (-1)
+#define HTNOWHERE 0
+#define HTCLIENT 1
+#define HTCAPTION 2
+#define HTSYSMENU 3
+#define HTSIZE 4
+#define HTGROWBOX HTSIZE
+#define HTMENU 5
+#define HTHSCROLL 6
+#define HTVSCROLL 7
+#define HTMINBUTTON 8
+#define HTREDUCE HTMINBUTTON
+#define HTMAXBUTTON 9
+#define HTZOOM HTMAXBUTTON
+#define HTLEFT 10
+#define HTSIZEFIRST HTLEFT
+#define HTRIGHT 11
+#define HTTOP 12
+#define HTTOPLEFT 13
+#define HTTOPRIGHT 14
+#define HTBOTTOM 15
+#define HTBOTTOMLEFT 16
+#define HTBOTTOMRIGHT 17
+#define HTSIZELAST HTBOTTOMRIGHT
+#define HTBORDER 18
+#define HTOBJECT 19
+#define HTCLOSE 20
+#define HTHELP 21
+
+/* SendMessageTimeout flags */
+#define SMTO_NORMAL 0x0000
+#define SMTO_BLOCK 0x0001
+#define SMTO_ABORTIFHUNG 0x0002
+#define SMTO_NOTIMEOUTIFNOTHUNG 0x0008
+#define SMTO_ERRORONEXIT 0x0020
+
+/* WM_MOUSEACTIVATE return values */
+#define MA_ACTIVATE 1
+#define MA_ACTIVATEANDEAT 2
+#define MA_NOACTIVATE 3
+#define MA_NOACTIVATEANDEAT 4
+
+/* WM_GETICON/WM_SETICON params values */
+#define ICON_SMALL 0
+#define ICON_BIG 1
+#define ICON_SMALL2 2
+
+/* WM_SIZE message wParam values */
+#define SIZE_RESTORED 0
+#define SIZE_MINIMIZED 1
+#define SIZE_MAXIMIZED 2
+#define SIZE_MAXSHOW 3
+#define SIZE_MAXHIDE 4
+#define SIZENORMAL SIZE_RESTORED
+#define SIZEICONIC SIZE_MINIMIZED
+#define SIZEFULLSCREEN SIZE_MAXIMIZED
+#define SIZEZOOMSHOW SIZE_MAXSHOW
+#define SIZEZOOMHIDE SIZE_MAXHIDE
+
+/* WM_NCCALCSIZE return flags */
+#define WVR_ALIGNTOP 0x0010
+#define WVR_ALIGNLEFT 0x0020
+#define WVR_ALIGNBOTTOM 0x0040
+#define WVR_ALIGNRIGHT 0x0080
+#define WVR_HREDRAW 0x0100
+#define WVR_VREDRAW 0x0200
+#define WVR_REDRAW (WVR_HREDRAW | WVR_VREDRAW)
+#define WVR_VALIDRECTS 0x0400
+
+/* Key status flags for mouse events */
+#ifndef NOKEYSTATES
+#define MK_LBUTTON 0x0001
+#define MK_RBUTTON 0x0002
+#define MK_SHIFT 0x0004
+#define MK_CONTROL 0x0008
+#define MK_MBUTTON 0x0010
+#define MK_XBUTTON1 0x0020
+#define MK_XBUTTON2 0x0040
+#endif /* NOKEYSTATES */
+
+#ifndef NOTRACKMOUSEEVENT
+#define TME_HOVER 0x00000001
+#define TME_LEAVE 0x00000002
+#define TME_NONCLIENT 0x00000010
+#define TME_QUERY 0x40000000
+#define TME_CANCEL 0x80000000
+#define HOVER_DEFAULT 0xFFFFFFFF
+#endif /* NOTRACKMOUSEEVENT */
+
+#endif /* NOWINMESSAGES */
+
+
+/*** Window Styles ***/
+#ifndef NOWINSTYLES
+#define WS_OVERLAPPED __MSABI_LONG(0x00000000)
+#define WS_POPUP __MSABI_LONG(0x80000000)
+#define WS_CHILD __MSABI_LONG(0x40000000)
+#define WS_MINIMIZE __MSABI_LONG(0x20000000)
+#define WS_VISIBLE __MSABI_LONG(0x10000000)
+#define WS_DISABLED __MSABI_LONG(0x08000000)
+#define WS_CLIPSIBLINGS __MSABI_LONG(0x04000000)
+#define WS_CLIPCHILDREN __MSABI_LONG(0x02000000)
+#define WS_MAXIMIZE __MSABI_LONG(0x01000000)
+#define WS_BORDER __MSABI_LONG(0x00800000)
+#define WS_DLGFRAME __MSABI_LONG(0x00400000)
+#define WS_VSCROLL __MSABI_LONG(0x00200000)
+#define WS_HSCROLL __MSABI_LONG(0x00100000)
+#define WS_SYSMENU __MSABI_LONG(0x00080000)
+#define WS_THICKFRAME __MSABI_LONG(0x00040000)
+#define WS_GROUP __MSABI_LONG(0x00020000)
+#define WS_TABSTOP __MSABI_LONG(0x00010000)
+#define WS_MINIMIZEBOX __MSABI_LONG(0x00020000)
+#define WS_MAXIMIZEBOX __MSABI_LONG(0x00010000)
+#define WS_CAPTION (WS_BORDER | WS_DLGFRAME)
+#define WS_TILED WS_OVERLAPPED
+#define WS_ICONIC WS_MINIMIZE
+#define WS_SIZEBOX WS_THICKFRAME
+#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME| WS_MINIMIZEBOX | WS_MAXIMIZEBOX)
+#define WS_POPUPWINDOW (WS_POPUP | WS_BORDER | WS_SYSMENU)
+#define WS_CHILDWINDOW WS_CHILD
+#define WS_TILEDWINDOW WS_OVERLAPPEDWINDOW
+#endif /* NOWINSTYLES */
+
+
+/*** Window extended styles ***/
+#ifndef NOWINSTYLES
+#define WS_EX_DLGMODALFRAME __MSABI_LONG(0x00000001)
+#define WS_EX_DRAGDETECT __MSABI_LONG(0x00000002) /* Undocumented */
+#define WS_EX_NOPARENTNOTIFY __MSABI_LONG(0x00000004)
+#define WS_EX_TOPMOST __MSABI_LONG(0x00000008)
+#define WS_EX_ACCEPTFILES __MSABI_LONG(0x00000010)
+#define WS_EX_TRANSPARENT __MSABI_LONG(0x00000020)
+#define WS_EX_MDICHILD __MSABI_LONG(0x00000040)
+#define WS_EX_TOOLWINDOW __MSABI_LONG(0x00000080)
+#define WS_EX_WINDOWEDGE __MSABI_LONG(0x00000100)
+#define WS_EX_CLIENTEDGE __MSABI_LONG(0x00000200)
+#define WS_EX_CONTEXTHELP __MSABI_LONG(0x00000400)
+#define WS_EX_RIGHT __MSABI_LONG(0x00001000)
+#define WS_EX_LEFT __MSABI_LONG(0x00000000)
+#define WS_EX_RTLREADING __MSABI_LONG(0x00002000)
+#define WS_EX_LTRREADING __MSABI_LONG(0x00000000)
+#define WS_EX_LEFTSCROLLBAR __MSABI_LONG(0x00004000)
+#define WS_EX_RIGHTSCROLLBAR __MSABI_LONG(0x00000000)
+#define WS_EX_CONTROLPARENT __MSABI_LONG(0x00010000)
+#define WS_EX_STATICEDGE __MSABI_LONG(0x00020000)
+#define WS_EX_APPWINDOW __MSABI_LONG(0x00040000)
+#define WS_EX_LAYERED __MSABI_LONG(0x00080000)
+#define WS_EX_NOINHERITLAYOUT __MSABI_LONG(0x00100000)
+#define WS_EX_LAYOUTRTL __MSABI_LONG(0x00400000)
+#define WS_EX_COMPOSITED __MSABI_LONG(0x02000000)
+#define WS_EX_NOACTIVATE __MSABI_LONG(0x08000000)
+
+#define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
+#define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
+#endif /* NOWINSTYLES */
+
+
+/*** Class styles ***/
+#ifndef NOWINSTYLES
+#define CS_VREDRAW 0x00000001
+#define CS_HREDRAW 0x00000002
+#define CS_KEYCVTWINDOW 0x00000004 /* DDK / Win16 */
+#define CS_DBLCLKS 0x00000008
+#define CS_OWNDC 0x00000020
+#define CS_CLASSDC 0x00000040
+#define CS_PARENTDC 0x00000080
+#define CS_NOKEYCVT 0x00000100 /* DDK / Win16 */
+#define CS_NOCLOSE 0x00000200
+#define CS_SAVEBITS 0x00000800
+#define CS_BYTEALIGNCLIENT 0x00001000
+#define CS_BYTEALIGNWINDOW 0x00002000
+#define CS_GLOBALCLASS 0x00004000
+#define CS_IME 0x00010000
+#define CS_DROPSHADOW 0x00020000
+#endif /* NOWINSTYLES */
+
+
+/*** Predefined Clipboard Formats ***/
+#ifndef NOCLIPBOARD
+#define CF_TEXT 1
+#define CF_BITMAP 2
+#define CF_METAFILEPICT 3
+#define CF_SYLK 4
+#define CF_DIF 5
+#define CF_TIFF 6
+#define CF_OEMTEXT 7
+#define CF_DIB 8
+#define CF_PALETTE 9
+#define CF_PENDATA 10
+#define CF_RIFF 11
+#define CF_WAVE 12
+#define CF_UNICODETEXT 13
+#define CF_ENHMETAFILE 14
+#define CF_HDROP 15
+#define CF_LOCALE 16
+#define CF_DIBV5 17
+#define CF_MAX 18
+
+#define CF_OWNERDISPLAY 0x0080
+#define CF_DSPTEXT 0x0081
+#define CF_DSPBITMAP 0x0082
+#define CF_DSPMETAFILEPICT 0x0083
+#define CF_DSPENHMETAFILE 0x008E
+
+/* "Private" formats don't get GlobalFree()'d */
+#define CF_PRIVATEFIRST 0x0200
+#define CF_PRIVATELAST 0x02FF
+
+/* "GDIOBJ" formats do get DeleteObject()'d */
+#define CF_GDIOBJFIRST 0x0300
+#define CF_GDIOBJLAST 0x03FF
+#endif /* NOCLIPBOARD */
+
+
+/*** Menu flags ***/
+#ifndef NOMENUS
+#define MF_INSERT __MSABI_LONG(0x00000000)
+#define MF_CHANGE __MSABI_LONG(0x00000080)
+#define MF_APPEND __MSABI_LONG(0x00000100)
+#define MF_DELETE __MSABI_LONG(0x00000200)
+#define MF_REMOVE __MSABI_LONG(0x00001000)
+#define MF_END __MSABI_LONG(0x00000080)
+
+#define MF_ENABLED __MSABI_LONG(0x00000000)
+#define MF_GRAYED __MSABI_LONG(0x00000001)
+#define MF_DISABLED __MSABI_LONG(0x00000002)
+#define MF_STRING __MSABI_LONG(0x00000000)
+#define MF_BITMAP __MSABI_LONG(0x00000004)
+#define MF_UNCHECKED __MSABI_LONG(0x00000000)
+#define MF_CHECKED __MSABI_LONG(0x00000008)
+#define MF_POPUP __MSABI_LONG(0x00000010)
+#define MF_MENUBARBREAK __MSABI_LONG(0x00000020)
+#define MF_MENUBREAK __MSABI_LONG(0x00000040)
+#define MF_UNHILITE __MSABI_LONG(0x00000000)
+#define MF_HILITE __MSABI_LONG(0x00000080)
+#define MF_OWNERDRAW __MSABI_LONG(0x00000100)
+#define MF_USECHECKBITMAPS __MSABI_LONG(0x00000200)
+#define MF_BYCOMMAND __MSABI_LONG(0x00000000)
+#define MF_BYPOSITION __MSABI_LONG(0x00000400)
+#define MF_SEPARATOR __MSABI_LONG(0x00000800)
+#define MF_DEFAULT __MSABI_LONG(0x00001000)
+#define MF_SYSMENU __MSABI_LONG(0x00002000)
+#define MF_HELP __MSABI_LONG(0x00004000)
+#define MF_RIGHTJUSTIFY __MSABI_LONG(0x00004000)
+#define MF_MOUSESELECT __MSABI_LONG(0x00008000)
+
+/* Flags for extended menu item types */
+#define MFT_STRING MF_STRING
+#define MFT_BITMAP MF_BITMAP
+#define MFT_MENUBARBREAK MF_MENUBARBREAK
+#define MFT_MENUBREAK MF_MENUBREAK
+#define MFT_OWNERDRAW MF_OWNERDRAW
+#define MFT_RADIOCHECK __MSABI_LONG(0x00000200)
+#define MFT_SEPARATOR MF_SEPARATOR
+#define MFT_RIGHTORDER __MSABI_LONG(0x00002000)
+#define MFT_RIGHTJUSTIFY MF_RIGHTJUSTIFY
+
+/* Flags for extended menu item states */
+#define MFS_GRAYED __MSABI_LONG(0x00000003)
+#define MFS_DISABLED MFS_GRAYED
+#define MFS_CHECKED MF_CHECKED
+#define MFS_HILITE MF_HILITE
+#define MFS_ENABLED MF_ENABLED
+#define MFS_UNCHECKED MF_UNCHECKED
+#define MFS_UNHILITE MF_UNHILITE
+#define MFS_DEFAULT MF_DEFAULT
+
+/* DDK / Win16 defines */
+#define MFS_MASK __MSABI_LONG(0x0000108B)
+#define MFS_HOTTRACKDRAWN __MSABI_LONG(0x10000000)
+#define MFS_CACHEDBMP __MSABI_LONG(0x20000000)
+#define MFS_BOTTOMGAPDROP __MSABI_LONG(0x40000000)
+#define MFS_TOPGAPDROP __MSABI_LONG(0x80000000)
+#define MFS_GAPDROP (MFS_BOTTOMGAPDROP | MFS_TOPGAPDROP)
+#endif /* NOMENUS */
+
+
+/*** WM_SYSCOMMAND parameters ***/
+#ifndef NOSYSCOMMANDS
+/* At least HP-UX defines it in /usr/include/sys/signal.h */
+# ifdef SC_SIZE
+# undef SC_SIZE
+# endif
+#define SC_SIZE 0xf000
+#define SC_MOVE 0xf010
+#define SC_MINIMIZE 0xf020
+#define SC_MAXIMIZE 0xf030
+#define SC_NEXTWINDOW 0xf040
+#define SC_PREVWINDOW 0xf050
+#define SC_CLOSE 0xf060
+#define SC_VSCROLL 0xf070
+#define SC_HSCROLL 0xf080
+#define SC_MOUSEMENU 0xf090
+#define SC_KEYMENU 0xf100
+#define SC_ARRANGE 0xf110
+#define SC_RESTORE 0xf120
+#define SC_TASKLIST 0xf130
+#define SC_SCREENSAVE 0xf140
+#define SC_HOTKEY 0xf150
+
+/* Win32 4.0 */
+#define SC_DEFAULT 0xf160
+#define SC_MONITORPOWER 0xf170
+#define SC_CONTEXTHELP 0xf180
+#define SC_SEPARATOR 0xf00f
+
+#define GET_SC_WPARAM(wParam) ((int)wParam & 0xfff0)
+#define SCF_ISSECURE 0x0001
+
+/* Obsolete names */
+#define SC_ICON SC_MINIMIZE
+#define SC_ZOOM SC_MAXIMIZE
+#endif /* NOSYSCOMMANDS */
+
+
+/*** OEM Resource Ordinal Numbers ***/
+#ifdef OEMRESOURCE
+#define OBM_RDRVERT 32559
+#define OBM_RDRHORZ 32660
+#define OBM_RDR2DIM 32661
+#define OBM_TRTYPE 32732 /* FIXME: Wine-only */
+#define OBM_LFARROWI 32734
+#define OBM_RGARROWI 32735
+#define OBM_DNARROWI 32736
+#define OBM_UPARROWI 32737
+#define OBM_COMBO 32738
+#define OBM_MNARROW 32739
+#define OBM_LFARROWD 32740
+#define OBM_RGARROWD 32741
+#define OBM_DNARROWD 32742
+#define OBM_UPARROWD 32743
+#define OBM_RESTORED 32744
+#define OBM_ZOOMD 32745
+#define OBM_REDUCED 32746
+#define OBM_RESTORE 32747
+#define OBM_ZOOM 32748
+#define OBM_REDUCE 32749
+#define OBM_LFARROW 32750
+#define OBM_RGARROW 32751
+#define OBM_DNARROW 32752
+#define OBM_UPARROW 32753
+#define OBM_CLOSE 32754
+#define OBM_OLD_RESTORE 32755
+#define OBM_OLD_ZOOM 32756
+#define OBM_OLD_REDUCE 32757
+#define OBM_BTNCORNERS 32758
+#define OBM_CHECKBOXES 32759
+#define OBM_CHECK 32760
+#define OBM_BTSIZE 32761
+#define OBM_OLD_LFARROW 32762
+#define OBM_OLD_RGARROW 32763
+#define OBM_OLD_DNARROW 32764
+#define OBM_OLD_UPARROW 32765
+#define OBM_SIZE 32766
+#define OBM_OLD_CLOSE 32767
+
+#define OCR_NORMAL 32512
+#define OCR_IBEAM 32513
+#define OCR_WAIT 32514
+#define OCR_CROSS 32515
+#define OCR_UP 32516
+#define OCR_SIZE 32640
+#define OCR_ICON 32641
+#define OCR_SIZENWSE 32642
+#define OCR_SIZENESW 32643
+#define OCR_SIZEWE 32644
+#define OCR_SIZENS 32645
+#define OCR_SIZEALL 32646
+#define OCR_ICOCUR 32647
+#define OCR_NO 32648
+#define OCR_HAND 32649
+#define OCR_APPSTARTING 32650
+#define OCR_HELP 32651 /* DDK / Win16 */
+#define OCR_RDRVERT 32652 /* DDK / Win16 */
+#define OCR_RDRHORZ 32653 /* DDK / Win16 */
+#define OCR_DRAGOBJECT OCR_RDRHORZ /* FIXME: Wine-only */
+#define OCR_RDR2DIM 32654 /* DDK / Win16 */
+#define OCR_RDRNORTH 32655 /* DDK / Win16 */
+#define OCR_RDRSOUTH 32656 /* DDK / Win16 */
+#define OCR_RDRWEST 32657 /* DDK / Win16 */
+#define OCR_RDREAST 32658 /* DDK / Win16 */
+#define OCR_RDRNORTHWEST 32659 /* DDK / Win16 */
+#define OCR_RDRNORTHEAST 32660 /* DDK / Win16 */
+#define OCR_RDRSOUTHWEST 32661 /* DDK / Win16 */
+#define OCR_RDRSOUTHEAST 32662 /* DDK / Win16 */
+
+#define OIC_SAMPLE 32512
+#define OIC_HAND 32513
+#define OIC_ERROR OIC_HAND
+#define OIC_QUES 32514
+#define OIC_BANG 32515
+#define OIC_WARNING OIC_BANG
+#define OIC_NOTE 32516
+#define OIC_INFORMATION OIC_NOTE
+#define OIC_WINLOGO 32517
+#define OIC_SHIELD 32518
+#endif /* OEMRESOURCE */
+
+
+/*** Predefined resources ***/
+#ifndef NOICONS
+#define IDI_APPLICATION MAKEINTRESOURCE(32512)
+#define IDI_HAND MAKEINTRESOURCE(32513)
+#define IDI_QUESTION MAKEINTRESOURCE(32514)
+#define IDI_EXCLAMATION MAKEINTRESOURCE(32515)
+#define IDI_ASTERISK MAKEINTRESOURCE(32516)
+#define IDI_WINLOGO MAKEINTRESOURCE(32517)
+#define IDI_SHIELD MAKEINTRESOURCE(32518)
+
+#define IDI_WARNING IDI_EXCLAMATION
+#define IDI_ERROR IDI_HAND
+#define IDI_INFORMATION IDI_ASTERISK
+#endif /* NOICONS */
+
+
+/*** Standard dialog button IDs ***/
+#define IDOK 1
+#define IDCANCEL 2
+#define IDABORT 3
+#define IDRETRY 4
+#define IDIGNORE 5
+#define IDYES 6
+#define IDNO 7
+#define IDCLOSE 8
+#define IDHELP 9
+#define IDTRYAGAIN 10
+#define IDCONTINUE 11
+#ifndef IDTIMEOUT
+#define IDTIMEOUT 32000
+#endif
+
+
+/*** Edit control styles ***/
+#ifndef NOWINSTYLES
+#define ES_LEFT __MSABI_LONG(0x00000000)
+#define ES_CENTER __MSABI_LONG(0x00000001)
+#define ES_RIGHT __MSABI_LONG(0x00000002)
+#define ES_MULTILINE __MSABI_LONG(0x00000004)
+#define ES_UPPERCASE __MSABI_LONG(0x00000008)
+#define ES_LOWERCASE __MSABI_LONG(0x00000010)
+#define ES_PASSWORD __MSABI_LONG(0x00000020)
+#define ES_AUTOVSCROLL __MSABI_LONG(0x00000040)
+#define ES_AUTOHSCROLL __MSABI_LONG(0x00000080)
+#define ES_NOHIDESEL __MSABI_LONG(0x00000100)
+#define ES_COMBO __MSABI_LONG(0x00000200) /* Undocumented. Parent is a combobox */
+#define ES_OEMCONVERT __MSABI_LONG(0x00000400)
+#define ES_READONLY __MSABI_LONG(0x00000800)
+#define ES_WANTRETURN __MSABI_LONG(0x00001000)
+#define ES_NUMBER __MSABI_LONG(0x00002000)
+#endif /* NOWINSTYLES */
+
+
+/*** Edit control messages ***/
+#ifndef NOWINMESSAGES
+#define EM_GETSEL 0x00b0
+#define EM_SETSEL 0x00b1
+#define EM_GETRECT 0x00b2
+#define EM_SETRECT 0x00b3
+#define EM_SETRECTNP 0x00b4
+#define EM_SCROLL 0x00b5
+#define EM_LINESCROLL 0x00b6
+#define EM_SCROLLCARET 0x00b7
+#define EM_GETMODIFY 0x00b8
+#define EM_SETMODIFY 0x00b9
+#define EM_GETLINECOUNT 0x00ba
+#define EM_LINEINDEX 0x00bb
+#define EM_SETHANDLE 0x00bc
+#define EM_GETHANDLE 0x00bd
+#define EM_GETTHUMB 0x00be
+/* Unassigned 0x00bf and 0x00c0 */
+#define EM_LINELENGTH 0x00c1
+#define EM_REPLACESEL 0x00c2
+#define EM_SETFONT 0x00c3 /* DDK / Win16 */
+#define EM_GETLINE 0x00c4
+#define EM_LIMITTEXT 0x00c5
+#define EM_SETLIMITTEXT EM_LIMITTEXT
+#define EM_CANUNDO 0x00c6
+#define EM_UNDO 0x00c7
+#define EM_FMTLINES 0x00c8
+#define EM_LINEFROMCHAR 0x00c9
+#define EM_SETWORDBREAK 0x00ca /* DDK / Win16 */
+#define EM_SETTABSTOPS 0x00cb
+#define EM_SETPASSWORDCHAR 0x00cc
+#define EM_EMPTYUNDOBUFFER 0x00cd
+#define EM_GETFIRSTVISIBLELINE 0x00ce
+#define EM_SETREADONLY 0x00cf
+#define EM_SETWORDBREAKPROC 0x00d0
+#define EM_GETWORDBREAKPROC 0x00d1
+#define EM_GETPASSWORDCHAR 0x00d2
+#define EM_SETMARGINS 0x00d3
+#define EM_GETMARGINS 0x00d4
+#define EM_GETLIMITTEXT 0x00d5
+#define EM_POSFROMCHAR 0x00d6
+#define EM_CHARFROMPOS 0x00d7
+#define EM_SETIMESTATUS 0x00d8
+#define EM_GETIMESTATUS 0x00d9
+#endif /* NOWINMESSAGES */
+
+
+/*** Button control styles ***/
+#define BS_PUSHBUTTON __MSABI_LONG(0x00000000)
+#define BS_DEFPUSHBUTTON __MSABI_LONG(0x00000001)
+#define BS_CHECKBOX __MSABI_LONG(0x00000002)
+#define BS_AUTOCHECKBOX __MSABI_LONG(0x00000003)
+#define BS_RADIOBUTTON __MSABI_LONG(0x00000004)
+#define BS_3STATE __MSABI_LONG(0x00000005)
+#define BS_AUTO3STATE __MSABI_LONG(0x00000006)
+#define BS_GROUPBOX __MSABI_LONG(0x00000007)
+#define BS_USERBUTTON __MSABI_LONG(0x00000008)
+#define BS_AUTORADIOBUTTON __MSABI_LONG(0x00000009)
+#define BS_PUSHBOX __MSABI_LONG(0x0000000A)
+#define BS_OWNERDRAW __MSABI_LONG(0x0000000B)
+#define BS_TYPEMASK __MSABI_LONG(0x0000000F)
+#define BS_LEFTTEXT __MSABI_LONG(0x00000020)
+#define BS_RIGHTBUTTON BS_LEFTTEXT
+
+#define BS_TEXT __MSABI_LONG(0x00000000)
+#define BS_ICON __MSABI_LONG(0x00000040)
+#define BS_BITMAP __MSABI_LONG(0x00000080)
+#define BS_LEFT __MSABI_LONG(0x00000100)
+#define BS_RIGHT __MSABI_LONG(0x00000200)
+#define BS_CENTER __MSABI_LONG(0x00000300)
+#define BS_TOP __MSABI_LONG(0x00000400)
+#define BS_BOTTOM __MSABI_LONG(0x00000800)
+#define BS_VCENTER __MSABI_LONG(0x00000C00)
+#define BS_PUSHLIKE __MSABI_LONG(0x00001000)
+#define BS_MULTILINE __MSABI_LONG(0x00002000)
+#define BS_NOTIFY __MSABI_LONG(0x00004000)
+#define BS_FLAT __MSABI_LONG(0x00008000)
+
+
+/*** Button notification codes ***/
+#define BN_CLICKED 0
+#define BN_PAINT 1
+#define BN_HILITE 2
+#define BN_PUSHED BN_HILITE
+#define BN_UNHILITE 3
+#define BN_UNPUSHED BN_UNHILITE
+#define BN_DISABLE 4
+#define BN_DOUBLECLICKED 5
+#define BN_DBLCLK BN_DOUBLECLICKED
+#define BN_SETFOCUS 6
+#define BN_KILLFOCUS 7
+
+
+/*** Win32 button control messages ***/
+#define BM_GETCHECK 0x00f0
+#define BM_SETCHECK 0x00f1
+#define BM_GETSTATE 0x00f2
+#define BM_SETSTATE 0x00f3
+#define BM_SETSTYLE 0x00f4
+#define BM_CLICK 0x00f5
+#define BM_GETIMAGE 0x00f6
+#define BM_SETIMAGE 0x00f7
+#define BM_SETDONTCLICK 0x00f8
+
+/* Button states */
+#define BST_UNCHECKED 0x0000
+#define BST_CHECKED 0x0001
+#define BST_INDETERMINATE 0x0002
+#define BST_PUSHED 0x0004
+#define BST_FOCUS 0x0008
+
+/*** Static Control Styles ***/
+#define SS_LEFT __MSABI_LONG(0x00000000)
+#define SS_CENTER __MSABI_LONG(0x00000001)
+#define SS_RIGHT __MSABI_LONG(0x00000002)
+#define SS_ICON __MSABI_LONG(0x00000003)
+#define SS_BLACKRECT __MSABI_LONG(0x00000004)
+#define SS_GRAYRECT __MSABI_LONG(0x00000005)
+#define SS_WHITERECT __MSABI_LONG(0x00000006)
+#define SS_BLACKFRAME __MSABI_LONG(0x00000007)
+#define SS_GRAYFRAME __MSABI_LONG(0x00000008)
+#define SS_WHITEFRAME __MSABI_LONG(0x00000009)
+#define SS_USERITEM __MSABI_LONG(0x0000000A)
+#define SS_SIMPLE __MSABI_LONG(0x0000000B)
+#define SS_LEFTNOWORDWRAP __MSABI_LONG(0x0000000C)
+#define SS_OWNERDRAW __MSABI_LONG(0x0000000D)
+#define SS_BITMAP __MSABI_LONG(0x0000000E)
+#define SS_ENHMETAFILE __MSABI_LONG(0x0000000F)
+#define SS_ETCHEDHORZ __MSABI_LONG(0x00000010)
+#define SS_ETCHEDVERT __MSABI_LONG(0x00000011)
+#define SS_ETCHEDFRAME __MSABI_LONG(0x00000012)
+#define SS_TYPEMASK __MSABI_LONG(0x0000001F)
+
+#define SS_REALSIZECONTROL __MSABI_LONG(0x00000040)
+#define SS_NOPREFIX __MSABI_LONG(0x00000080)
+#define SS_NOTIFY __MSABI_LONG(0x00000100)
+#define SS_CENTERIMAGE __MSABI_LONG(0x00000200)
+#define SS_RIGHTJUST __MSABI_LONG(0x00000400)
+#define SS_REALSIZEIMAGE __MSABI_LONG(0x00000800)
+#define SS_SUNKEN __MSABI_LONG(0x00001000)
+#define SS_EDITCONTROL __MSABI_LONG(0x00002000)
+#define SS_ENDELLIPSIS __MSABI_LONG(0x00004000)
+#define SS_PATHELLIPSIS __MSABI_LONG(0x00008000)
+#define SS_WORDELLIPSIS __MSABI_LONG(0x0000C000)
+#define SS_ELLIPSISMASK SS_WORDELLIPSIS
+
+
+/*** Dialog styles ***/
+#define DS_ABSALIGN __MSABI_LONG(0x00000001)
+#define DS_SYSMODAL __MSABI_LONG(0x00000002)
+#define DS_3DLOOK __MSABI_LONG(0x00000004) /* win95 */
+#define DS_FIXEDSYS __MSABI_LONG(0x00000008) /* win95 */
+#define DS_NOFAILCREATE __MSABI_LONG(0x00000010) /* win95 */
+#define DS_LOCALEDIT __MSABI_LONG(0x00000020)
+#define DS_SETFONT __MSABI_LONG(0x00000040)
+#define DS_MODALFRAME __MSABI_LONG(0x00000080)
+#define DS_NOIDLEMSG __MSABI_LONG(0x00000100)
+#define DS_SETFOREGROUND __MSABI_LONG(0x00000200) /* win95 */
+#define DS_CONTROL __MSABI_LONG(0x00000400) /* win95 */
+#define DS_CENTER __MSABI_LONG(0x00000800) /* win95 */
+#define DS_CENTERMOUSE __MSABI_LONG(0x00001000) /* win95 */
+#define DS_CONTEXTHELP __MSABI_LONG(0x00002000) /* win95 */
+#define DS_USEPIXELS __MSABI_LONG(0x00008000)
+#define DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS)
+
+
+/*** Listbox styles ***/
+#ifndef NOWINSTYLES
+#define LBS_NOTIFY __MSABI_LONG(0x00000001)
+#define LBS_SORT __MSABI_LONG(0x00000002)
+#define LBS_NOREDRAW __MSABI_LONG(0x00000004)
+#define LBS_MULTIPLESEL __MSABI_LONG(0x00000008)
+#define LBS_OWNERDRAWFIXED __MSABI_LONG(0x00000010)
+#define LBS_OWNERDRAWVARIABLE __MSABI_LONG(0x00000020)
+#define LBS_HASSTRINGS __MSABI_LONG(0x00000040)
+#define LBS_USETABSTOPS __MSABI_LONG(0x00000080)
+#define LBS_NOINTEGRALHEIGHT __MSABI_LONG(0x00000100)
+#define LBS_MULTICOLUMN __MSABI_LONG(0x00000200)
+#define LBS_WANTKEYBOARDINPUT __MSABI_LONG(0x00000400)
+#define LBS_EXTENDEDSEL __MSABI_LONG(0x00000800)
+#define LBS_DISABLENOSCROLL __MSABI_LONG(0x00001000)
+#define LBS_NODATA __MSABI_LONG(0x00002000)
+#define LBS_NOSEL __MSABI_LONG(0x00004000)
+#define LBS_COMBOBOX __MSABI_LONG(0x00008000)
+#define LBS_STANDARD (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
+#endif /* NOWINSTYLES */
+
+/*** Combo box styles ***/
+#ifndef NOWINSTYLES
+#define CBS_SIMPLE __MSABI_LONG(0x00000001)
+#define CBS_DROPDOWN __MSABI_LONG(0x00000002)
+#define CBS_DROPDOWNLIST __MSABI_LONG(0x00000003)
+#define CBS_OWNERDRAWFIXED __MSABI_LONG(0x00000010)
+#define CBS_OWNERDRAWVARIABLE __MSABI_LONG(0x00000020)
+#define CBS_AUTOHSCROLL __MSABI_LONG(0x00000040)
+#define CBS_OEMCONVERT __MSABI_LONG(0x00000080)
+#define CBS_SORT __MSABI_LONG(0x00000100)
+#define CBS_HASSTRINGS __MSABI_LONG(0x00000200)
+#define CBS_NOINTEGRALHEIGHT __MSABI_LONG(0x00000400)
+#define CBS_DISABLENOSCROLL __MSABI_LONG(0x00000800)
+
+#define CBS_UPPERCASE __MSABI_LONG(0x00002000)
+#define CBS_LOWERCASE __MSABI_LONG(0x00004000)
+#endif /* NOWINSTYLES */
+
+
+/*** Scrollbar styles ***/
+#ifndef NOWINSTYLES
+#define SBS_HORZ __MSABI_LONG(0x00000000)
+#define SBS_VERT __MSABI_LONG(0x00000001)
+#define SBS_TOPALIGN __MSABI_LONG(0x00000002)
+#define SBS_LEFTALIGN __MSABI_LONG(0x00000002)
+#define SBS_BOTTOMALIGN __MSABI_LONG(0x00000004)
+#define SBS_RIGHTALIGN __MSABI_LONG(0x00000004)
+#define SBS_SIZEBOXTOPLEFTALIGN __MSABI_LONG(0x00000002)
+#define SBS_SIZEBOXBOTTOMRIGHTALIGN __MSABI_LONG(0x00000004)
+#define SBS_SIZEBOX __MSABI_LONG(0x00000008)
+#define SBS_SIZEGRIP __MSABI_LONG(0x00000010)
+#endif /* NOWINSTYLES */
+
+/*** WinHelp commands ***/
+#define HELP_CONTEXT __MSABI_LONG(0x00000001)
+#define HELP_QUIT __MSABI_LONG(0x00000002)
+#define HELP_INDEX __MSABI_LONG(0x00000003)
+#define HELP_CONTENTS HELP_INDEX
+#define HELP_HELPONHELP __MSABI_LONG(0x00000004)
+#define HELP_SETINDEX __MSABI_LONG(0x00000005)
+#define HELP_SETCONTENTS HELP_SETINDEX
+#define HELP_CONTEXTPOPUP __MSABI_LONG(0x00000008)
+#define HELP_FORCEFILE __MSABI_LONG(0x00000009)
+#define HELP_KEY __MSABI_LONG(0x00000101)
+#define HELP_COMMAND __MSABI_LONG(0x00000102)
+#define HELP_PARTIALKEY __MSABI_LONG(0x00000105)
+#define HELP_MULTIKEY __MSABI_LONG(0x00000201)
+#define HELP_SETWINPOS __MSABI_LONG(0x00000203)
+
+#define HELP_CONTEXTMENU 0x000a
+#define HELP_FINDER 0x000b
+#define HELP_WM_HELP 0x000c
+#define HELP_SETPOPUP_POS 0x000d
+#define HELP_TCARD_DATA 0x0010
+#define HELP_TCARD_OTHER_CALLER 0x0011
+#define HELP_TCARD 0x8000
+
+#define IDH_NO_HELP 28440
+#define IDH_MISSING_CONTEXT 28441
+#define IDH_GENERIC_HELP_BUTTON 28442
+#define IDH_OK 28443
+#define IDH_CANCEL 28444
+#define IDH_HELP 28445
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h
new file mode 100644
index 00000000..471be1f3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/winver.h
@@ -0,0 +1,74 @@
+/* Definitions for the VERsion info library (VER.DLL)
+ *
+ * Copyright 1996 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WINVER_H
+#define __WINE_WINVER_H
+
+/* FIXME: #include <specstrings.h> */
+#include <verrsrc.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+#ifndef RC_INVOKED
+
+/* function prototypes */
+
+DWORD WINAPI VerFindFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT,LPSTR,PUINT);
+DWORD WINAPI VerFindFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT,LPWSTR,PUINT);
+#define VerFindFile WINELIB_NAME_AW(VerFindFile)
+DWORD WINAPI VerInstallFileA(DWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPCSTR,LPSTR,PUINT);
+DWORD WINAPI VerInstallFileW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,PUINT);
+#define VerInstallFile WINELIB_NAME_AW(VerInstallFile)
+DWORD WINAPI VerLanguageNameA(DWORD,LPSTR,DWORD);
+DWORD WINAPI VerLanguageNameW(DWORD,LPWSTR,DWORD);
+#define VerLanguageName WINELIB_NAME_AW(VerLanguageName)
+BOOL WINAPI VerQueryValueA(LPCVOID,LPCSTR,LPVOID*,PUINT);
+BOOL WINAPI VerQueryValueW(LPCVOID,LPCWSTR,LPVOID*,PUINT);
+#define VerQueryValue WINELIB_NAME_AW(VerQueryValue)
+DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR,LPDWORD);
+DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR,LPDWORD);
+#define GetFileVersionInfoSize WINELIB_NAME_AW(GetFileVersionInfoSize)
+BOOL WINAPI GetFileVersionInfoA(LPCSTR,DWORD,DWORD,LPVOID);
+BOOL WINAPI GetFileVersionInfoW(LPCWSTR,DWORD,DWORD,LPVOID);
+#define GetFileVersionInfo WINELIB_NAME_AW(GetFileVersionInfo)
+DWORD WINAPI GetFileVersionInfoSizeExA(DWORD,LPCSTR,LPDWORD);
+DWORD WINAPI GetFileVersionInfoSizeExW(DWORD,LPCWSTR,LPDWORD);
+#define GetFileVersionInfoSizeEx WINELIB_NAME_AW(GetFileVersionInfoSizeEx)
+BOOL WINAPI GetFileVersionInfoExA(DWORD,LPCSTR,DWORD,DWORD,LPVOID);
+BOOL WINAPI GetFileVersionInfoExW(DWORD,LPCWSTR,DWORD,DWORD,LPVOID);
+#define GetFileVersionInfoEx WINELIB_NAME_AW(GetFileVersionInfoEx)
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINVER_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h
new file mode 100644
index 00000000..da86060b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmistr.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WMISTR_
+#define _WMISTR_
+
+typedef enum
+{
+ WMI_GET_ALL_DATA = 0,
+ WMI_GET_SINGLE_INSTANCE = 1,
+ WMI_SET_SINGLE_INSTANCE = 2,
+ WMI_SET_SINGLE_ITEM = 3,
+ WMI_ENABLE_EVENTS = 4,
+ WMI_DISABLE_EVENTS = 5,
+ WMI_ENABLE_CONNECTION = 6,
+ WMI_DISABLE_CONNECTION = 7,
+ WMI_REGINFO = 8,
+ WMI_EXECUTE_METHOD = 9,
+} WMIDPREQUESTCODE;
+
+typedef struct _WNODE_HEADER
+{
+ ULONG BufferSize;
+ ULONG ProvicerId;
+ union
+ {
+ ULONG64 HistoricalContext;
+ struct
+ {
+ ULONG Version;
+ ULONG Linkage;
+ } DUMMYSTRUCTNAME;
+
+ } DUMMYUNIONNAME;
+ union
+ {
+ HANDLE KernelHandle;
+ LARGE_INTEGER TimeStamp;
+ } DUMMYUNIONNAME2;
+ GUID Guid;
+ ULONG ClientContext;
+ ULONG Flags;
+} WNODE_HEADER, *PWNODE_HEADER;
+
+#endif /* _WMISTR_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl
new file mode 100644
index 00000000..0aaae0c3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmiutils.idl
@@ -0,0 +1,245 @@
+/*
+ * Copyright 2012 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+interface IWbemPath;
+interface IWbemPathKeyList;
+
+typedef [v1_enum] enum tag_WBEM_PATH_STATUS_FLAG
+{
+ WBEMPATH_INFO_ANON_LOCAL_MACHINE = 0x1,
+ WBEMPATH_INFO_HAS_MACHINE_NAME = 0x2,
+ WBEMPATH_INFO_IS_CLASS_REF = 0x4,
+ WBEMPATH_INFO_IS_INST_REF = 0x8,
+ WBEMPATH_INFO_HAS_SUBSCOPES = 0x10,
+ WBEMPATH_INFO_IS_COMPOUND = 0x20,
+ WBEMPATH_INFO_HAS_V2_REF_PATHS = 0x40,
+ WBEMPATH_INFO_HAS_IMPLIED_KEY = 0x80,
+ WBEMPATH_INFO_CONTAINS_SINGLETON = 0x100,
+ WBEMPATH_INFO_V1_COMPLIANT = 0x200,
+ WBEMPATH_INFO_V2_COMPLIANT = 0x400,
+ WBEMPATH_INFO_CIM_COMPLIANT = 0x800,
+ WBEMPATH_INFO_IS_SINGLETON = 0x1000,
+ WBEMPATH_INFO_IS_PARENT = 0x2000,
+ WBEMPATH_INFO_SERVER_NAMESPACE_ONLY = 0x4000,
+ WBEMPATH_INFO_NATIVE_PATH = 0x8000,
+ WBEMPATH_INFO_WMI_PATH = 0x10000,
+ WBEMPATH_INFO_PATH_HAD_SERVER = 0x20000
+} tag_WBEM_PATH_STATUS_FLAG;
+
+typedef [v1_enum] enum tag_WBEM_PATH_CREATE_FLAG
+{
+ WBEMPATH_CREATE_ACCEPT_RELATIVE = 0x1,
+ WBEMPATH_CREATE_ACCEPT_ABSOLUTE = 0x2,
+ WBEMPATH_CREATE_ACCEPT_ALL = 0x4,
+ WBEMPATH_TREAT_SINGLE_IDENT_AS_NS = 0x8
+} tag_WBEM_PATH_CREATE_FLAG;
+
+typedef [v1_enum] enum tag_WBEM_GET_TEXT_FLAGS
+{
+ WBEMPATH_COMPRESSED = 0x1,
+ WBEMPATH_GET_RELATIVE_ONLY = 0x2,
+ WBEMPATH_GET_SERVER_TOO = 0x4,
+ WBEMPATH_GET_SERVER_AND_NAMESPACE_ONLY = 0x8,
+ WBEMPATH_GET_NAMESPACE_ONLY = 0x10,
+ WBEMPATH_GET_ORIGINAL = 0x20
+} tag_WBEM_GET_TEXT_FLAGS;
+
+[
+ local,
+ object,
+ uuid(9ae62877-7544-4bb0-aa26-a13824659ed6)
+]
+interface IWbemPathKeyList : IUnknown
+{
+ HRESULT GetCount(
+ [out] ULONG *puKeyCount);
+
+ HRESULT SetKey(
+ [in,string] LPCWSTR wszName,
+ [in] ULONG uFlags,
+ [in] ULONG uCimType,
+ [in] LPVOID pKeyVal);
+
+ HRESULT SetKey2(
+ [in,string] LPCWSTR wszName,
+ [in] ULONG uFlags,
+ [in] ULONG uCimType,
+ [in] VARIANT *pKeyVal);
+
+ HRESULT GetKey(
+ [in] ULONG uKeyIx,
+ [in] ULONG uFlags,
+ [in,out] ULONG *puNameBufSize,
+ [in,out] LPWSTR pszKeyName,
+ [in,out] ULONG *puKeyValBufSize,
+ [in,out] LPVOID pKeyVal,
+ [out] ULONG *puApparentCimType);
+
+ HRESULT GetKey2(
+ [in] ULONG uKeyIx,
+ [in] ULONG uFlags,
+ [in,out] ULONG *puNameBufSize,
+ [in,out] LPWSTR pszKeyName,
+ [in,out] VARIANT *pKeyValue,
+ [out] ULONG *puApparentCimType);
+
+ HRESULT RemoveKey(
+ [in,string] LPCWSTR wszName,
+ [in] ULONG uFlags);
+
+ HRESULT RemoveAllKeys(
+ [in] ULONG uFlags);
+
+ HRESULT MakeSingleton([in] boolean bSet);
+
+ HRESULT GetInfo(
+ [in] ULONG uRequestedInfo,
+ [out] ULONGLONG *puResponse);
+
+ HRESULT GetText(
+ [in] long lFlags,
+ [in,out] ULONG *puBuffLength,
+ [in,out,string] LPWSTR pszText);
+};
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetClassName")
+cpp_quote("#endif")
+
+[
+ local,
+ object,
+ uuid(3bc15af2-736c-477e-9e51-238af8667dcc)
+]
+interface IWbemPath : IUnknown
+{
+ HRESULT SetText(
+ [in] ULONG uMode,
+ [in] LPCWSTR pszPath);
+
+ HRESULT GetText(
+ [in] long lFlags,
+ [in,out] ULONG *puBuffLength,
+ [in,out,string] LPWSTR pszText);
+
+ HRESULT GetInfo(
+ [in] ULONG uRequestedInfo,
+ [out] ULONGLONG *puResponse);
+
+ HRESULT SetServer(
+ [in,string] LPCWSTR Name);
+
+ HRESULT GetServer(
+ [in,out] ULONG *puNameBufLength,
+ [in,out,string] LPWSTR pName);
+
+ HRESULT GetNamespaceCount(
+ [out] ULONG *puCount);
+
+ HRESULT SetNamespaceAt(
+ [in] ULONG uIndex,
+ [in,string] LPCWSTR pszName);
+
+ HRESULT GetNamespaceAt(
+ [in] ULONG uIndex,
+ [in,out] ULONG *puNameBufLength,
+ [in,out,string] LPWSTR pName);
+
+ HRESULT RemoveNamespaceAt(
+ [in] ULONG uIndex);
+
+ HRESULT RemoveAllNamespaces();
+
+ HRESULT GetScopeCount(
+ [out] ULONG *puCount);
+
+ HRESULT SetScope(
+ [in] ULONG uIndex,
+ [in] LPWSTR pszClass);
+
+ HRESULT SetScopeFromText(
+ [in] ULONG uIndex,
+ [in] LPWSTR pszText);
+
+ HRESULT GetScope(
+ [in] ULONG uIndex,
+ [in,out] ULONG *puClassNameBufSize,
+ [in,out] LPWSTR pszClass,
+ [out] IWbemPathKeyList **pKeyList);
+
+ HRESULT GetScopeAsText(
+ [in] ULONG uIndex,
+ [in,out] ULONG *puTextBufSize,
+ [in,out] LPWSTR pszText);
+
+ HRESULT RemoveScope(
+ [in] ULONG uIndex);
+
+ HRESULT RemoveAllScopes();
+
+ HRESULT SetClassName(
+ [in,string] LPCWSTR Name);
+
+ HRESULT GetClassName(
+ [in,out] ULONG *puBuffLength,
+ [in,out,string] LPWSTR pszName);
+
+ HRESULT GetKeyList(
+ [out] IWbemPathKeyList **pOut);
+
+ HRESULT CreateClassPart(
+ [in] long lFlags,
+ [in,string] LPCWSTR Name);
+
+ HRESULT DeleteClassPart(
+ [in] long lFlags);
+
+ BOOL IsRelative(
+ [in,string] LPWSTR wszMachine,
+ [in,string] LPWSTR wszNamespace);
+
+ BOOL IsRelativeOrChild(
+ [in,string] LPWSTR wszMachine,
+ [in,string] LPWSTR wszNamespace,
+ [in] long lFlags);
+
+ BOOL IsLocal(
+ [in,string] LPCWSTR wszMachine);
+
+ BOOL IsSameClassName(
+ [in,string] LPCWSTR wszClass);
+};
+
+[
+ uuid(cf4cc405-e2c5-4ddd-b3ce-5e7582d8c9fa)
+]
+coclass WbemDefPath
+{
+ interface IWbemPath;
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl
new file mode 100644
index 00000000..92ef97e6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsbuffer.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2012 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "objidl.idl";
+
+[
+ object,
+ uuid(e1cd3524-03d7-11d2-9eed-006097d2d7cf),
+ pointer_default(unique),
+ local
+]
+interface INSSBuffer : IUnknown
+{
+ HRESULT GetLength(
+ [out] DWORD *pdwLength);
+ HRESULT SetLength(
+ [in] DWORD dwLength);
+
+ HRESULT GetMaxLength(
+ [out] DWORD *pdwLength);
+
+ HRESULT GetBuffer(
+ [out] BYTE **ppdwBuffer);
+
+ HRESULT GetBufferAndLength(
+ [out] BYTE **ppdwBuffer,
+ [out] DWORD *pdwLength);
+};
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl
new file mode 100644
index 00000000..59abe14b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wmsdkidl.idl
@@ -0,0 +1,395 @@
+/*
+ * Copyright 2012 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "wmsbuffer.idl";
+/* import "drmexternals.idl"; */
+
+typedef unsigned __int64 QWORD;
+
+typedef struct _WMMediaType
+{
+ GUID majortype;
+ GUID subtype;
+ BOOL bFixedSizeSamples;
+ BOOL bTemporalCompression;
+ ULONG lSampleSize;
+ GUID formattype;
+ IUnknown *pUnk;
+ ULONG cbFormat;
+ [size_is(cbFormat)] BYTE *pbFormat;
+} WM_MEDIA_TYPE;
+
+typedef enum WMT_ATTR_DATATYPE
+{
+ WMT_TYPE_DWORD = 0,
+ WMT_TYPE_STRING = 1,
+ WMT_TYPE_BINARY = 2,
+ WMT_TYPE_BOOL = 3,
+ WMT_TYPE_QWORD = 4,
+ WMT_TYPE_WORD = 5,
+ WMT_TYPE_GUID = 6,
+} WMT_ATTR_DATATYPE;
+
+typedef enum WMT_STATUS
+{
+ WMT_ERROR = 0,
+ WMT_OPENED = 1,
+ WMT_BUFFERING_START = 2,
+ WMT_BUFFERING_STOP = 3,
+ WMT_EOF = 4,
+ WMT_END_OF_FILE = 4,
+ WMT_END_OF_SEGMENT = 5,
+ WMT_END_OF_STREAMING = 6,
+ WMT_LOCATING = 7,
+ WMT_CONNECTING = 8,
+ WMT_NO_RIGHTS = 9,
+ WMT_MISSING_CODEC = 10,
+ WMT_STARTED = 11,
+ WMT_STOPPED = 12,
+ WMT_CLOSED = 13,
+ WMT_STRIDING = 14,
+ WMT_TIMER = 15,
+ WMT_INDEX_PROGRESS = 16,
+ WMT_SAVEAS_START = 17,
+ WMT_SAVEAS_STOP = 18,
+ WMT_NEW_SOURCEFLAGS = 19,
+ WMT_NEW_METADATA = 20,
+ WMT_BACKUPRESTORE_BEGIN = 21,
+ WMT_SOURCE_SWITCH = 22,
+ WMT_ACQUIRE_LICENSE = 23,
+ WMT_INDIVIDUALIZE = 24,
+ WMT_NEEDS_INDIVIDUALIZATION = 25,
+ WMT_NO_RIGHTS_EX = 26,
+ WMT_BACKUPRESTORE_END = 27,
+ WMT_BACKUPRESTORE_CONNECTING = 28,
+ WMT_BACKUPRESTORE_DISCONNECTING = 29,
+ WMT_ERROR_WITHURL = 30,
+ WMT_RESTRICTED_LICENSE = 31,
+ WMT_CLIENT_CONNECT = 32,
+ WMT_CLIENT_DISCONNECT = 33,
+ WMT_NATIVE_OUTPUT_PROPS_CHANGED = 34,
+ WMT_RECONNECT_START = 35,
+ WMT_RECONNECT_END = 36,
+ WMT_CLIENT_CONNECT_EX = 37,
+ WMT_CLIENT_DISCONNECT_EX = 38,
+ WMT_SET_FEC_SPAN = 39,
+ WMT_PREROLL_READY = 40,
+ WMT_PREROLL_COMPLETE = 41,
+ WMT_CLIENT_PROPERTIES = 42,
+ WMT_LICENSEURL_SIGNATURE_STATE = 43,
+ WMT_INIT_PLAYLIST_BURN = 44,
+ WMT_TRANSCRYPTOR_INIT = 45,
+ WMT_TRANSCRYPTOR_SEEKED = 46,
+ WMT_TRANSCRYPTOR_READ = 47,
+ WMT_TRANSCRYPTOR_CLOSED = 48,
+ WMT_PROXIMITY_RESULT = 49,
+ WMT_PROXIMITY_COMPLETED = 50,
+ WMT_CONTENT_ENABLER = 51
+} WMT_STATUS;
+
+typedef enum WMT_STREAM_SELECTION
+{
+ WMT_OFF = 0,
+ WMT_CLEANPOINT_ONLY = 1,
+ WMT_ON = 2,
+} WMT_STREAM_SELECTION;
+
+
+[
+ object,
+ uuid(6d7cdc70-9888-11d3-8edc-00c04f6109cf),
+ pointer_default(unique),
+ local
+]
+interface IWMStatusCallback : IUnknown
+{
+ HRESULT OnStatus(
+ [in] WMT_STATUS Status,
+ [in] HRESULT hr,
+ [in] WMT_ATTR_DATATYPE dwType,
+ [in] BYTE *pValue,
+ [in] void *pvContext);
+};
+
+[
+ object,
+ uuid(96406bd8-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMReaderCallback : IWMStatusCallback
+{
+ HRESULT OnSample(
+ [in] DWORD dwOutputNum,
+ [in] QWORD cnsSampleTime,
+ [in] QWORD cnsSampleDuration,
+ [in] DWORD dwFlags,
+ [in] INSSBuffer *pSample,
+ [in] void *pvContext);
+};
+
+[
+ object,
+ uuid(96406bce-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMMediaProps : IUnknown
+{
+ HRESULT GetType(
+ [out] GUID *pguidType);
+
+ HRESULT GetMediaType(
+ [out] WM_MEDIA_TYPE *pType,
+ [in, out] DWORD *pcbType);
+
+ HRESULT SetMediaType(
+ [in] WM_MEDIA_TYPE *pType);
+};
+
+[
+ object,
+ uuid(96406bd7-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMOutputMediaProps : IWMMediaProps
+{
+ HRESULT GetStreamGroupName(
+ [out, size_is(*pcchName)] WCHAR *pwszName,
+ [in, out] WORD *pcchName);
+
+ HRESULT GetConnectionName(
+ [out, size_is(*pcchName)] WCHAR *pwszName,
+ [in, out] WORD *pcchName);
+};
+
+[
+ object,
+ uuid(96406bd9-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMMetadataEditor : IUnknown
+{
+ HRESULT Open(
+ [in] const WCHAR *pwszFilename);
+
+ HRESULT Close();
+
+ HRESULT Flush();
+};
+
+[
+ object,
+ uuid(96406bd6-2b2b-11d3-b36b-00c04f6108ff),
+ pointer_default(unique),
+ local
+]
+interface IWMReader : IUnknown
+{
+ HRESULT Open(
+ [in] const WCHAR *pwszURL,
+ [in] IWMReaderCallback *pCallback,
+ [in] void *pvContext);
+
+ HRESULT Close();
+
+ HRESULT GetOutputCount(
+ [out] DWORD *pcOutputs);
+
+ HRESULT GetOutputProps(
+ [in] DWORD dwOutputNum,
+ [out] IWMOutputMediaProps **ppOutput);
+
+ HRESULT SetOutputProps(
+ [in] DWORD dwOutputNum,
+ [in] IWMOutputMediaProps *pOutput);
+
+ HRESULT GetOutputFormatCount(
+ [in] DWORD dwOutputNumber,
+ [out] DWORD *pcFormats);
+
+ HRESULT GetOutputFormat(
+ [in] DWORD dwOutputNumber,
+ [in] DWORD dwFormatNumber,
+ [out] IWMOutputMediaProps** ppProps);
+
+ HRESULT Start(
+ [in] QWORD cnsStart,
+ [in] QWORD cnsDuration,
+ [in] float fRate,
+ [in] void *pvContext);
+
+ HRESULT Stop();
+
+ HRESULT Pause();
+
+ HRESULT Resume();
+};
+
+[
+ object,
+ uuid(9397f121-7705-4dc9-b049-98b698188414),
+ pointer_default( unique ),
+ local
+]
+interface IWMSyncReader : IUnknown
+{
+ HRESULT Open(
+ [in] const WCHAR *pwszFilename);
+
+ HRESULT Close();
+
+ HRESULT SetRange(
+ [in] QWORD cnsStartTime,
+ [in] LONGLONG cnsDuration);
+
+ HRESULT SetRangeByFrame(
+ [in] WORD wStreamNum,
+ [in] QWORD qwFrameNumber,
+ [in] LONGLONG cFramesToRead);
+
+ HRESULT GetNextSample(
+ [in] WORD wStreamNum,
+ [out] INSSBuffer **ppSample,
+ [out] QWORD *pcnsSampleTime,
+ [out] QWORD *pcnsDuration,
+ [out] DWORD *pdwFlags,
+ [out] DWORD *pdwOutputNum,
+ [out] WORD *pwStreamNum);
+
+ HRESULT SetStreamsSelected(
+ [in] WORD cStreamCount,
+ [in] WORD *pwStreamNumbers,
+ [in] WMT_STREAM_SELECTION *pSelections);
+
+ HRESULT GetStreamSelected(
+ [in] WORD wStreamNum,
+ [out] WMT_STREAM_SELECTION *pSelection);
+
+ HRESULT SetReadStreamSamples(
+ [in] WORD wStreamNum,
+ [in] BOOL fCompressed);
+
+ HRESULT GetReadStreamSamples(
+ [in] WORD wStreamNum,
+ [out] BOOL *pfCompressed);
+
+ HRESULT GetOutputSetting(
+ [in] DWORD dwOutputNum,
+ [in] LPCWSTR pszName,
+ [out] WMT_ATTR_DATATYPE *pType,
+ [out, size_is(*pcbLength)] BYTE *pValue,
+ [in, out] WORD *pcbLength);
+
+ HRESULT SetOutputSetting(
+ [in] DWORD dwOutputNum,
+ [in] LPCWSTR pszName,
+ [in] WMT_ATTR_DATATYPE Type,
+ [in, size_is(cbLength)] const BYTE *pValue,
+ [in] WORD cbLength);
+
+ HRESULT GetOutputCount(
+ [out] DWORD *pcOutputs);
+
+ HRESULT GetOutputProps(
+ [in] DWORD dwOutputNum,
+ [out] IWMOutputMediaProps **ppOutput);
+
+ HRESULT SetOutputProps(
+ [in] DWORD dwOutputNum,
+ [in] IWMOutputMediaProps *pOutput);
+
+ HRESULT GetOutputFormatCount(
+ [in] DWORD dwOutputNum,
+ [out] DWORD *pcFormats);
+
+ HRESULT GetOutputFormat(
+ [in] DWORD dwOutputNum,
+ [in] DWORD dwFormatNum,
+ [out] IWMOutputMediaProps **ppProps);
+
+ HRESULT GetOutputNumberForStream(
+ [in] WORD wStreamNum,
+ [out] DWORD *pdwOutputNum);
+
+ HRESULT GetStreamNumberForOutput(
+ [in] DWORD dwOutputNum,
+ [out] WORD *pwStreamNum);
+
+ HRESULT GetMaxOutputSampleSize(
+ [in] DWORD dwOutput,
+ [out] DWORD *pcbMax);
+
+ HRESULT GetMaxStreamSampleSize(
+ [in] WORD wStream,
+ [out] DWORD *pcbMax);
+
+ HRESULT OpenStream(
+ [in] IStream *pStream);
+};
+
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_Base, 0x00000000,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIATYPE_Video, 0x73646976,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB1, 0xe436eb78,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB4, 0xe436eb79,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB8, 0xe436eb7a,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB565, 0xe436eb7b,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB555, 0xe436eb7c,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB24, 0xe436eb7d,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_RGB32, 0xe436eb7e,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_I420, 0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_IYUV, 0x56555949,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YV12, 0x32315659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YUY2, 0x32595559,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_P422, 0x32323450,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_UYVY, 0x59565955,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVYU, 0x55595659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_YVU9, 0x39555659,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_VIDEOIMAGE, 0x1d4a45f2,0xe5f6,0x4b44,0x83,0x88,0xf0,0xae,0x5c,0x0e,0x0c,0x37);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP43, 0x3334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MP4S, 0x5334504d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_M4S2, 0x3253344d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV1, 0x31564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV2, 0x32564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS1, 0x3153534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MPEG2_VIDEO, 0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea);")
+cpp_quote("EXTERN_GUID(WMMEDIATYPE_Audio, 0x73647561,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_PCM, 0x00000001,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_DRM, 0x00000009,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudioV9, 0x00000162,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMAudio_Lossless, 0x00000163,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_MSS2, 0x3253534d,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP1, 0x0000000a,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMSP2, 0x0000000b,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMV3, 0x33564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVP, 0x50564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVP2, 0x32505657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WMVA, 0x41564d57,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
+cpp_quote("EXTERN_GUID(WMMEDIASUBTYPE_WVC1, 0x31435657,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71);")
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h
new file mode 100644
index 00000000..7b2e1ff2
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wnaspi32.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) the Wine project
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WNASPI32_H__
+#define __WNASPI32_H__
+
+/* This file should be 100% source compatible according to MS docs and
+ * Adaptec docs */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* #ifdef __cplusplus */
+
+/* SCSI Miscellaneous Stuff */
+#define SENSE_LEN 14
+#define SRB_DIR_SCSI 0x00
+#define SRB_POSTING 0x01
+#define SRB_ENABLE_RESIDUAL_COUNT 0x04
+#define SRB_DIR_IN 0x08
+#define SRB_DIR_OUT 0x10
+
+/* ASPI Command Definitions */
+#define SC_HA_INQUIRY 0x00
+#define SC_GET_DEV_TYPE 0x01
+#define SC_EXEC_SCSI_CMD 0x02
+#define SC_ABORT_SRB 0x03
+#define SC_RESET_DEV 0x04
+#define SC_SET_HA_PARMS 0x05
+#define SC_GET_DISK_INFO 0x06
+
+/* SRB status codes */
+#define SS_PENDING 0x00
+#define SS_COMP 0x01
+#define SS_ABORTED 0x02
+#define SS_ABORT_FAIL 0x03
+#define SS_ERR 0x04
+
+#define SS_INVALID_CMD 0x80
+#define SS_INVALID_HA 0x81
+#define SS_NO_DEVICE 0x82
+
+#define SS_INVALID_SRB 0xE0
+#define SS_OLD_MANAGER 0xE1
+#define SS_BUFFER_ALIGN 0xE1 /* Win32 */
+#define SS_ILLEGAL_MODE 0xE2
+#define SS_NO_ASPI 0xE3
+#define SS_FAILED_INIT 0xE4
+#define SS_ASPI_IS_BUSY 0xE5
+#define SS_BUFFER_TO_BIG 0xE6
+#define SS_MISMATCHED_COMPONENTS 0xE7 /* DLLs/EXE version mismatch */
+#define SS_NO_ADAPTERS 0xE8
+#define SS_INSUFFICIENT_RESOURCES 0xE9
+#define SS_ASPI_IS_SHUTDOWN 0xEA
+#define SS_BAD_INSTALL 0xEB
+
+
+/* Host status codes */
+#define HASTAT_OK 0x00
+#define HASTAT_SEL_TO 0x11
+#define HASTAT_DO_DU 0x12
+#define HASTAT_BUS_FREE 0x13
+#define HASTAT_PHASE_ERR 0x14
+
+#define HASTAT_TIMEOUT 0x09
+#define HASTAT_COMMAND_TIMEOUT 0x0B
+#define HASTAT_MESSAGE_REJECT 0x0D
+#define HASTAT_BUS_RESET 0x0E
+#define HASTAT_PARITY_ERROR 0x0F
+#define HASTAT_REQUEST_SENSE_FAILED 0x10
+
+
+/* Additional definitions */
+/* SCSI Miscellaneous Stuff */
+#define SRB_EVENT_NOTIFY 0x40
+#define RESIDUAL_COUNT_SUPPORTED 0x02
+#define MAX_SRB_TIMEOUT 1080001u
+#define DEFAULT_SRB_TIMEOUT 1080001u
+
+/* These are defined by MS but not adaptec */
+#define SRB_DATA_SG_LIST 0x02
+#define WM_ASPIPOST 0x4D42
+
+
+/* ASPI Command Definitions */
+#define SC_RESCAN_SCSI_BUS 0x07
+#define SC_GETSET_TIMEOUTS 0x08
+
+/* SRB Status.. MS defined */
+#define SS_SECURITY_VIOLATION 0xE2 /* Replaces SS_INVALID_MODE */
+/*** END DEFS */
+
+#include <pshpack1.h>
+
+/* SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY */
+typedef struct tagSRB32_HaInquiry {
+ BYTE SRB_Cmd; /* 00 ASPI command code = SC_HA_INQUIRY */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 ASPI request flags */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */
+ BYTE HA_Count; /* 08 Number of host adapters present */
+ BYTE HA_SCSI_ID; /* 09 SCSI ID of host adapter */
+ BYTE HA_ManagerId[16]; /* 0A String describing the manager */
+ BYTE HA_Identifier[16]; /* 1A String describing the host adapter */
+ BYTE HA_Unique[16]; /* 2A Host Adapter Unique parameters */
+ WORD HA_Rsvd1;
+} SRB_HaInquiry, *PSRB_HaInquiry;
+
+/* SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE */
+typedef struct tagSRB32_GDEVBlock {
+ BYTE SRB_Cmd; /* 00 ASPI command code = SC_GET_DEV_TYPE */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 Reserved */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
+ BYTE SRB_Target; /* 08 Target's SCSI ID */
+ BYTE SRB_Lun; /* 09 Target's LUN number */
+ BYTE SRB_DeviceType; /* 0A Target's peripheral device type */
+ BYTE SRB_Rsvd1;
+} SRB_GDEVBlock, *PSRB_GDEVBlock;
+
+/* SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD */
+typedef struct tagSRB32_ExecSCSICmd {
+ BYTE SRB_Cmd; /* 00 ASPI command code = SC_EXEC_SCSI_CMD */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 ASPI request flags */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
+ BYTE SRB_Target; /* 08 Target's SCSI ID */
+ BYTE SRB_Lun; /* 09 Target's LUN number */
+ WORD SRB_Rsvd1; /* 0A Reserved for Alignment */
+ DWORD SRB_BufLen; /* 0C Data Allocation Length */
+ BYTE *SRB_BufPointer; /* 10 Data Buffer Point */
+ BYTE SRB_SenseLen; /* 14 Sense Allocation Length */
+ BYTE SRB_CDBLen; /* 15 CDB Length */
+ BYTE SRB_HaStat; /* 16 Host Adapter Status */
+ BYTE SRB_TargStat; /* 17 Target Status */
+ void (*SRB_PostProc)( struct tagSRB32_ExecSCSICmd * ); /* 18 Post routine */
+ void *SRB_Rsvd2; /* 1C Reserved */
+ BYTE SRB_Rsvd3[16]; /* 20 Reserved for expansion */
+ BYTE CDBByte[16]; /* 30 SCSI CDB */
+ BYTE SenseArea[SENSE_LEN+2]; /* 40 Request sense buffer - var length */
+} SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
+
+/* SRB - ABORT AN ARB - SC_ABORT_SRB */
+typedef struct tagSRB32_Abort {
+ BYTE SRB_Cmd; /* 00 ASPI command code = SC_ABORT_SRB */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 Reserved */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved, MUST = 0 */
+ VOID *SRB_ToAbort; /* 08 Pointer to SRB to abort */
+} SRB_Abort, *PSRB_Abort;
+
+/* SRB - BUS DEVICE RESET - SC_RESET_DEV */
+typedef struct tagSRB32_BusDeviceReset {
+ BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 Reserved */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
+ BYTE SRB_Target; /* 08 Target's SCSI ID */
+ BYTE SRB_Lun; /* 09 Target's LUN number */
+ BYTE SRB_Rsvd1[12]; /* 0A Reserved for Alignment */
+ BYTE SRB_HaStat; /* 16 Host Adapter Status */
+ BYTE SRB_TargStat; /* 17 Target Status */
+ void (*SRB_PostProc)( struct tagSRB32_BusDeviceReset * ); /* 18 Post routine */
+ void *SRB_Rsvd2; /* 1c Reserved */
+ BYTE SRB_Rsvd3[32]; /* 20 Reserved */
+} SRB_BusDeviceReset, *PSRB_BusDeviceReset;
+
+/* SRB - GET DISK INFORMATION - SC_GET_DISK_INFO */
+typedef struct tagSRB32_GetDiskInfo {
+ BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 Reserved */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
+ BYTE SRB_Target; /* 08 Target's SCSI ID */
+ BYTE SRB_Lun; /* 09 Target's LUN number */
+ BYTE SRB_DriveFlags; /* 0A Driver flags */
+ BYTE SRB_Int13HDriveInfo; /* 0B Host Adapter Status */
+ BYTE SRB_Heads; /* 0C Preferred number of heads trans */
+ BYTE SRB_Sectors; /* 0D Preferred number of sectors trans */
+ BYTE SRB_Rsvd1[10]; /* 0E Reserved */
+} SRB_GetDiskInfo, *PSRB_GetDiskInfo;
+
+/* SRB header */
+typedef struct tagSRB32_Header {
+ BYTE SRB_Cmd; /* 00 ASPI cmd code = SC_RESET_DEV */
+ BYTE SRB_Status; /* 01 ASPI command status byte */
+ BYTE SRB_HaId; /* 02 ASPI host adapter number */
+ BYTE SRB_Flags; /* 03 Reserved */
+ DWORD SRB_Hdr_Rsvd; /* 04 Reserved */
+} SRB_Header, *PSRB_Header;
+
+typedef union tagSRB32 {
+ SRB_Header common;
+ SRB_HaInquiry inquiry;
+ SRB_ExecSCSICmd cmd;
+ SRB_Abort abort;
+ SRB_BusDeviceReset reset;
+ SRB_GDEVBlock devtype;
+ SRB_GetDiskInfo diskinfo;
+} SRB, *PSRB, *LPSRB;
+
+typedef struct tagASPI32BUFF {
+ LPBYTE AB_BufPointer; /* pointer to buffer */
+ DWORD AB_BufLen; /* length of buffer */
+ DWORD AB_ZeroFill; /* set to 1 if zeroing */
+ DWORD AB_Reserved; /* 0 */
+} ASPI32BUFF, *PASPI32BUFF;
+
+#include <poppack.h>
+
+/* Prototypes */
+extern DWORD __cdecl SendASPI32Command (PSRB);
+extern DWORD __cdecl GetASPI32SupportInfo (void);
+extern DWORD __cdecl GetASPI32DLLVersion(void);
+extern BOOL __cdecl GetASPI32Buffer(PASPI32BUFF pab);
+
+#ifdef __cplusplus
+}
+#endif /* #ifdef __cplusplus */
+
+#endif /* __WNASPI32_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h
new file mode 100644
index 00000000..00227373
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wownt32.h
@@ -0,0 +1,167 @@
+/*
+ * WOW Generic Thunk API
+ *
+ * Copyright (C) 1999 Ulrich Weigand
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WOWNT32_H_
+#define _WOWNT32_H_
+
+#ifdef __WINESRC__
+/* under Wine use the kernel functions directly so we don't have to import wow32 */
+#define WOWCallback16 K32WOWCallback16
+#define WOWCallback16Ex K32WOWCallback16Ex
+#define WOWDirectedYield16 K32WOWDirectedYield16
+#define WOWGetVDMPointer K32WOWGetVDMPointer
+#define WOWGetVDMPointerFix K32WOWGetVDMPointerFix
+#define WOWGetVDMPointerUnfix K32WOWGetVDMPointerUnfix
+#define WOWGlobalAlloc16 K32WOWGlobalAlloc16
+#define WOWGlobalAllocLock16 K32WOWGlobalAllocLock16
+#define WOWGlobalFree16 K32WOWGlobalFree16
+#define WOWGlobalLock16 K32WOWGlobalLock16
+#define WOWGlobalLockSize16 K32WOWGlobalLockSize16
+#define WOWGlobalUnlock16 K32WOWGlobalUnlock16
+#define WOWGlobalUnlockFree16 K32WOWGlobalUnlockFree16
+#define WOWHandle16 K32WOWHandle16
+#define WOWHandle32 K32WOWHandle32
+#define WOWYield16 K32WOWYield16
+#endif
+
+LPVOID WINAPI WOWGetVDMPointer(DWORD,DWORD,BOOL);
+LPVOID WINAPI WOWGetVDMPointerFix(DWORD,DWORD,BOOL);
+VOID WINAPI WOWGetVDMPointerUnfix(DWORD);
+
+WORD WINAPI WOWGlobalAlloc16(WORD,DWORD);
+WORD WINAPI WOWGlobalFree16(WORD);
+DWORD WINAPI WOWGlobalLock16(WORD);
+BOOL WINAPI WOWGlobalUnlock16(WORD);
+DWORD WINAPI WOWGlobalAllocLock16(WORD,DWORD,WORD *);
+WORD WINAPI WOWGlobalUnlockFree16(DWORD);
+DWORD WINAPI WOWGlobalLockSize16(WORD,PDWORD);
+
+VOID WINAPI WOWYield16(VOID);
+VOID WINAPI WOWDirectedYield16(WORD);
+
+typedef enum
+{
+ WOW_TYPE_HWND,
+ WOW_TYPE_HMENU,
+ WOW_TYPE_HDWP,
+ WOW_TYPE_HDROP,
+ WOW_TYPE_HDC,
+ WOW_TYPE_HFONT,
+ WOW_TYPE_HMETAFILE,
+ WOW_TYPE_HRGN,
+ WOW_TYPE_HBITMAP,
+ WOW_TYPE_HBRUSH,
+ WOW_TYPE_HPALETTE,
+ WOW_TYPE_HPEN,
+ WOW_TYPE_HACCEL,
+ WOW_TYPE_HTASK,
+ WOW_TYPE_FULLHWND
+
+} WOW_HANDLE_TYPE;
+
+HANDLE WINAPI WOWHandle32(WORD,WOW_HANDLE_TYPE);
+WORD WINAPI WOWHandle16(HANDLE,WOW_HANDLE_TYPE);
+
+#ifdef __WINESRC__
+/* under Wine we use optimized versions where we can */
+#define HWND_32(h16) ((HWND) (ULONG_PTR)(h16))
+#define HMENU_32(h16) ((HMENU) (ULONG_PTR)(h16))
+#define HDWP_32(h16) ((HDWP) (ULONG_PTR)(h16))
+#define HDROP_32(h16) ((HDROP) (ULONG_PTR)(h16))
+#define HDC_32(h16) ((HDC) (ULONG_PTR)(h16))
+#define HFONT_32(h16) ((HFONT) (ULONG_PTR)(h16))
+#define HRGN_32(h16) ((HRGN) (ULONG_PTR)(h16))
+#define HBITMAP_32(h16) ((HBITMAP) (ULONG_PTR)(h16))
+#define HBRUSH_32(h16) ((HBRUSH) (ULONG_PTR)(h16))
+#define HPALETTE_32(h16) ((HPALETTE) (ULONG_PTR)(h16))
+#define HPEN_32(h16) ((HPEN) (ULONG_PTR)(h16))
+#define HACCEL_32(h16) ((HACCEL) (ULONG_PTR)(h16))
+
+#define HWND_16(h32) (LOWORD(h32))
+#define HMENU_16(h32) (LOWORD(h32))
+#define HDWP_16(h32) (LOWORD(h32))
+#define HDROP_16(h32) (LOWORD(h32))
+#define HDC_16(h32) (LOWORD(h32))
+#define HFONT_16(h32) (LOWORD(h32))
+#define HRGN_16(h32) (LOWORD(h32))
+#define HBITMAP_16(h32) (LOWORD(h32))
+#define HBRUSH_16(h32) (LOWORD(h32))
+#define HPALETTE_16(h32) (LOWORD(h32))
+#define HPEN_16(h32) (LOWORD(h32))
+#define HACCEL_16(h32) (LOWORD(h32))
+
+#else /* __WINESRC__ */
+
+#define HWND_32(h16) ((HWND) (WOWHandle32(h16, WOW_TYPE_HWND)))
+#define HMENU_32(h16) ((HMENU) (WOWHandle32(h16, WOW_TYPE_HMENU)))
+#define HDWP_32(h16) ((HDWP) (WOWHandle32(h16, WOW_TYPE_HDWP)))
+#define HDROP_32(h16) ((HDROP) (WOWHandle32(h16, WOW_TYPE_HDROP)))
+#define HDC_32(h16) ((HDC) (WOWHandle32(h16, WOW_TYPE_HDC)))
+#define HFONT_32(h16) ((HFONT) (WOWHandle32(h16, WOW_TYPE_HFONT)))
+#define HRGN_32(h16) ((HRGN) (WOWHandle32(h16, WOW_TYPE_HRGN)))
+#define HBITMAP_32(h16) ((HBITMAP) (WOWHandle32(h16, WOW_TYPE_HBITMAP)))
+#define HBRUSH_32(h16) ((HBRUSH) (WOWHandle32(h16, WOW_TYPE_HBRUSH)))
+#define HPALETTE_32(h16) ((HPALETTE) (WOWHandle32(h16, WOW_TYPE_HPALETTE)))
+#define HPEN_32(h16) ((HPEN) (WOWHandle32(h16, WOW_TYPE_HPEN)))
+#define HACCEL_32(h16) ((HACCEL) (WOWHandle32(h16, WOW_TYPE_HACCEL)))
+
+#define HWND_16(h32) (WOWHandle16(h32, WOW_TYPE_HWND))
+#define HMENU_16(h32) (WOWHandle16(h32, WOW_TYPE_HMENU))
+#define HDWP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDWP))
+#define HDROP_16(h32) (WOWHandle16(h32, WOW_TYPE_HDROP))
+#define HDC_16(h32) (WOWHandle16(h32, WOW_TYPE_HDC))
+#define HFONT_16(h32) (WOWHandle16(h32, WOW_TYPE_HFONT))
+#define HRGN_16(h32) (WOWHandle16(h32, WOW_TYPE_HRGN))
+#define HBITMAP_16(h32) (WOWHandle16(h32, WOW_TYPE_HBITMAP))
+#define HBRUSH_16(h32) (WOWHandle16(h32, WOW_TYPE_HBRUSH))
+#define HPALETTE_16(h32) (WOWHandle16(h32, WOW_TYPE_HPALETTE))
+#define HPEN_16(h32) (WOWHandle16(h32, WOW_TYPE_HPEN))
+#define HACCEL_16(h32) (WOWHandle16(h32, WOW_TYPE_HACCEL))
+
+#endif /* __WINESRC__ */
+
+#define HMETAFILE_32(h16) ((HMETAFILE)(WOWHandle32(h16, WOW_TYPE_HMETAFILE)))
+#define HTASK_32(h16) ((DWORD)(WOWHandle32(h16, WOW_TYPE_HTASK)))
+#define FULLHWND_32(h16) ((HWND)(WOWHandle32(h16, WOW_TYPE_FULLHWND)))
+
+#define HMETAFILE_16(h32) (WOWHandle16(h32, WOW_TYPE_HMETAFILE))
+#define HTASK_16(h32) (WOWHandle16((HANDLE)(h32), WOW_TYPE_HTASK))
+
+#define WCB16_PASCAL 0
+#define WCB16_CDECL 1
+#define WCB16_MAX_CBARGS 16
+
+/* Wine extensions: call register function, context ptr is passed in the return value LPDWORD */
+#define WCB16_REGS 2
+#define WCB16_REGS_LONG 4 /* function uses 32-bit lret */
+
+DWORD WINAPI WOWCallback16(DWORD,DWORD);
+BOOL WINAPI WOWCallback16Ex(DWORD,DWORD,DWORD,LPVOID,LPDWORD);
+
+#endif /* _WOWNT32_H_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl
new file mode 100644
index 00000000..99d5fef8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wpcapi.idl
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+[
+ uuid(8fdf6ca1-0189-47e4-b670-1a8a4636e340),
+ object
+]
+interface IWPCSettings : IUnknown
+{
+ HRESULT IsLoggingRequired(
+ [out] BOOL *pfRequired);
+
+ HRESULT GetLastSettingsChangeTime(
+ [out] SYSTEMTIME *pTime) ;
+
+ HRESULT GetRestrictions(
+ [out] DWORD *pdwRestrictions);
+}
+
+[
+ uuid(95e87780-e158-489e-b452-bbb850790715),
+ object
+]
+interface IWPCGamesSettings : IWPCSettings
+{
+ HRESULT IsBlocked(
+ [in] GUID guidAppID,
+ [out] DWORD *pdwReasons);
+}
+
+[
+ uuid(ffccbdb8-0992-4c30-b0f1-1cbb09c240aa),
+ object
+]
+interface IWPCWebSettings : IWPCSettings
+{
+ typedef enum tagWPCFLAG_WEB_SETTING {
+ WPCFLAG_WEB_SETTING_NOTBLOCKED = 0,
+ WPCFLAG_WEB_SETTING_DOWNLOADSBLOCKED = 1
+ } WPCFLAG_WEB_SETTING;
+
+ HRESULT GetSettings(
+ [out] DWORD *pdwSettings);
+
+ HRESULT RequestURLOverride(
+ [in] HWND hWnd,
+ [in] LPCWSTR pcszURL,
+ [in] DWORD cURLs,
+ [in] LPCWSTR *ppcszSubURLs,
+ [out] BOOL *pfChanged);
+}
+
+typedef enum tagWPCFLAG_VISIBILITY {
+ WPCFLAG_WPC_VISIBLE = 0,
+ WPCFLAG_WPC_HIDDEN = 1
+} WPCFLAG_VISIBILITY;
+
+[
+ uuid(4FF40A0F-3F3B-4d7c-A41B-4F39D7B44D05),
+ object
+]
+interface IWindowsParentalControlsCore : IUnknown
+{
+ HRESULT GetVisibility(
+ [out] WPCFLAG_VISIBILITY *peVisibility) ;
+
+ HRESULT GetUserSettings(
+ [in] LPCWSTR pcszSID,
+ [out] IWPCSettings **ppSettings);
+
+ HRESULT GetWebSettings(
+ [in] LPCWSTR pcszSID,
+ [out] IWPCWebSettings **ppSettings);
+
+ HRESULT GetWebFilterInfo(
+ [out] GUID *pguidID,
+ [in] LPWSTR *ppszName);
+}
+
+[
+ uuid(4ff40a0f-3f3b-4d7c-a41b-4f39d7b44d05),
+ object
+]
+interface IWindowsParentalControls : IWindowsParentalControlsCore
+{
+ HRESULT GetGamesSettings(
+ [in] LPCWSTR pcszSID,
+ [out] IWPCGamesSettings **ppSettings) ;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h
new file mode 100644
index 00000000..21c11a28
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2def.h
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2009 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WS2DEF_
+#define _WS2DEF_
+
+#include <inaddr.h>
+
+#ifdef USE_WS_PREFIX
+#define WS(x) WS_##x
+#else
+#define WS(x) x
+#endif
+
+#ifndef __CSADDR_DEFINED__
+#define __CSADDR_DEFINED__
+
+typedef struct _SOCKET_ADDRESS {
+ LPSOCKADDR lpSockaddr;
+ INT iSockaddrLength;
+} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
+
+typedef struct _CSADDR_INFO {
+ SOCKET_ADDRESS LocalAddr;
+ SOCKET_ADDRESS RemoteAddr;
+ INT iSocketType;
+ INT iProtocol;
+} CSADDR_INFO, *PCSADDR_INFO, *LPCSADDR_INFO;
+#endif
+
+#ifdef USE_WS_PREFIX
+#define WS__SS_MAXSIZE 128
+#define WS__SS_ALIGNSIZE (sizeof(__int64))
+#define WS__SS_PAD1SIZE (WS__SS_ALIGNSIZE - sizeof(short))
+#define WS__SS_PAD2SIZE (WS__SS_MAXSIZE - 2 * WS__SS_ALIGNSIZE)
+#else
+#define _SS_MAXSIZE 128
+#define _SS_ALIGNSIZE (sizeof(__int64))
+#define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(short))
+#define _SS_PAD2SIZE (_SS_MAXSIZE - 2 * _SS_ALIGNSIZE)
+#endif
+
+typedef struct WS(sockaddr_storage) {
+ short ss_family;
+ char __ss_pad1[WS(_SS_PAD1SIZE)];
+ __int64 DECLSPEC_ALIGN(8) __ss_align;
+ char __ss_pad2[WS(_SS_PAD2SIZE)];
+} SOCKADDR_STORAGE, *PSOCKADDR_STORAGE, *LPSOCKADDR_STORAGE;
+
+/*socket address list */
+typedef struct _SOCKET_ADDRESS_LIST {
+ INT iAddressCount;
+ SOCKET_ADDRESS Address[1];
+} SOCKET_ADDRESS_LIST, *LPSOCKET_ADDRESS_LIST;
+
+typedef enum {
+ ScopeLevelInterface = 1,
+ ScopeLevelLink = 2,
+ ScopeLevelSubnet = 3,
+ ScopeLevelAdmin = 4,
+ ScopeLevelSite = 5,
+ ScopeLevelOrganization = 8,
+ ScopeLevelGlobal = 14
+} SCOPE_LEVEL;
+
+typedef struct _WSABUF
+{
+ ULONG len;
+ CHAR* buf;
+} WSABUF, *LPWSABUF;
+
+typedef struct _WSAMSG {
+ LPSOCKADDR name;
+ INT namelen;
+ LPWSABUF lpBuffers;
+ DWORD dwBufferCount;
+ WSABUF Control;
+ DWORD dwFlags;
+} WSAMSG, *PWSAMSG, *LPWSAMSG;
+
+/*
+ * Macros for retrieving control message data returned by WSARecvMsg()
+ */
+#define WSA_CMSG_DATA(cmsg) ((UCHAR*)((WSACMSGHDR*)(cmsg)+1))
+#define WSA_CMSG_FIRSTHDR(mhdr) ((mhdr)->Control.len >= sizeof(WSACMSGHDR) ? (WSACMSGHDR *) (mhdr)->Control.buf : (WSACMSGHDR *) 0)
+#define WSA_CMSG_ALIGN(len) (((len) + sizeof(SIZE_T) - 1) & ~(sizeof(SIZE_T) - 1))
+/*
+ * Next Header: If the response is too short (or the next message in the response
+ * is too short) then return NULL, otherwise return the next control message.
+ */
+#define WSA_CMSG_NXTHDR(mhdr,cmsg) \
+ (!(cmsg) ? WSA_CMSG_FIRSTHDR(mhdr) : \
+ ((mhdr)->Control.len < sizeof(WSACMSGHDR) ? NULL : \
+ (((unsigned char*)(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))+1) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \
+ (((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)+WSA_CMSG_ALIGN(((WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len)))->cmsg_len) > ((unsigned char*)(mhdr)->Control.buf + (mhdr)->Control.len)) ? NULL : \
+ (WSACMSGHDR*)((unsigned char*)cmsg + WSA_CMSG_ALIGN(cmsg->cmsg_len))))))
+
+#endif /* _WS2DEF_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h
new file mode 100644
index 00000000..dbb832d7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2ipdef.h
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2009 Robert Shearman
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WS2IPDEF__
+#define __WS2IPDEF__
+
+#include <in6addr.h>
+
+#ifdef USE_WS_PREFIX
+#define WS(x) WS_##x
+#else
+#define WS(x) x
+#endif
+
+typedef struct WS(sockaddr_in6_old)
+{
+ SHORT sin6_family;
+ USHORT sin6_port;
+ ULONG sin6_flowinfo;
+ IN6_ADDR sin6_addr;
+} SOCKADDR_IN6_OLD,*PSOCKADDR_IN6_OLD, *LPSOCKADDR_IN6_OLD;
+
+typedef union sockaddr_gen
+{
+ struct WS(sockaddr) Address;
+ struct WS(sockaddr_in) AddressIn;
+ struct WS(sockaddr_in6_old) AddressIn6;
+} WS(sockaddr_gen);
+
+/* Structure to keep interface specific information */
+typedef struct _INTERFACE_INFO
+{
+ ULONG iiFlags; /* Interface flags */
+ WS(sockaddr_gen) iiAddress; /* Interface address */
+ WS(sockaddr_gen) iiBroadcastAddress; /* Broadcast address */
+ WS(sockaddr_gen) iiNetmask; /* Network mask */
+} INTERFACE_INFO, * LPINTERFACE_INFO;
+
+/* Possible flags for the iiFlags - bitmask */
+#ifndef USE_WS_PREFIX
+#define IFF_UP 0x00000001 /* Interface is up */
+#define IFF_BROADCAST 0x00000002 /* Broadcast is supported */
+#define IFF_LOOPBACK 0x00000004 /* this is loopback interface */
+#define IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */
+#define IFF_MULTICAST 0x00000010 /* multicast is supported */
+#else
+#define WS_IFF_UP 0x00000001 /* Interface is up */
+#define WS_IFF_BROADCAST 0x00000002 /* Broadcast is supported */
+#define WS_IFF_LOOPBACK 0x00000004 /* this is loopback interface */
+#define WS_IFF_POINTTOPOINT 0x00000008 /* this is point-to-point interface */
+#define WS_IFF_MULTICAST 0x00000010 /* multicast is supported */
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define IP_OPTIONS 1
+#define IP_HDRINCL 2
+#define IP_TOS 3
+#define IP_TTL 4
+#define IP_MULTICAST_IF 9
+#define IP_MULTICAST_TTL 10
+#define IP_MULTICAST_LOOP 11
+#define IP_ADD_MEMBERSHIP 12
+#define IP_DROP_MEMBERSHIP 13
+#define IP_DONTFRAGMENT 14
+#define IP_ADD_SOURCE_MEMBERSHIP 15
+#define IP_DROP_SOURCE_MEMBERSHIP 16
+#define IP_BLOCK_SOURCE 17
+#define IP_UNBLOCK_SOURCE 18
+#define IP_PKTINFO 19
+#define IP_HOPLIMIT 21
+#define IP_RECEIVE_BROADCAST 22
+#define IP_RECVIF 24
+#define IP_RECVDSTADDR 25
+#define IP_IFLIST 28
+#define IP_ADD_IFLIST 29
+#define IP_DEL_IFLIST 30
+#define IP_UNICAST_IF 31
+#define IP_RTHDR 32
+#define IP_RECVRTHDR 38
+#else
+#define WS_IP_OPTIONS 1
+#define WS_IP_HDRINCL 2
+#define WS_IP_TOS 3
+#define WS_IP_TTL 4
+#define WS_IP_MULTICAST_IF 9
+#define WS_IP_MULTICAST_TTL 10
+#define WS_IP_MULTICAST_LOOP 11
+#define WS_IP_ADD_MEMBERSHIP 12
+#define WS_IP_DROP_MEMBERSHIP 13
+#define WS_IP_DONTFRAGMENT 14
+#define WS_IP_ADD_SOURCE_MEMBERSHIP 15
+#define WS_IP_DROP_SOURCE_MEMBERSHIP 16
+#define WS_IP_BLOCK_SOURCE 17
+#define WS_IP_UNBLOCK_SOURCE 18
+#define WS_IP_PKTINFO 19
+#define WS_IP_HOPLIMIT 21
+#define WS_IP_RECEIVE_BROADCAST 22
+#define WS_IP_RECVIF 24
+#define WS_IP_RECVDSTADDR 25
+#define WS_IP_IFLIST 28
+#define WS_IP_ADD_IFLIST 29
+#define WS_IP_DEL_IFLIST 30
+#define WS_IP_UNICAST_IF 31
+#define WS_IP_RTHDR 32
+#define WS_IP_RECVRTHDR 38
+#endif /* USE_WS_PREFIX */
+
+typedef struct WS(sockaddr_in6)
+{
+ SHORT sin6_family;
+ USHORT sin6_port;
+ ULONG sin6_flowinfo;
+ IN6_ADDR sin6_addr;
+ ULONG sin6_scope_id;
+} SOCKADDR_IN6,*PSOCKADDR_IN6, *LPSOCKADDR_IN6;
+
+/*
+ * Multicast group information
+ */
+
+typedef struct WS(ip_mreq)
+{
+ struct WS(in_addr) imr_multiaddr;
+ struct WS(in_addr) imr_interface;
+} WS(IP_MREQ), *WS(PIP_MREQ);
+
+typedef struct WS(ip_mreq_source) {
+ struct WS(in_addr) imr_multiaddr;
+ struct WS(in_addr) imr_sourceaddr;
+ struct WS(in_addr) imr_interface;
+} WS(IP_MREQ_SOURCE), *WS(PIP_MREQ_SOURCE);
+
+typedef struct WS(ip_msfilter) {
+ struct WS(in_addr) imsf_multiaddr;
+ struct WS(in_addr) imsf_interface;
+ ULONG imsf_fmode;
+ ULONG imsf_numsrc;
+ struct WS(in_addr) imsf_slist[1];
+} WS(IP_MSFILTER), *WS(PIP_MSFILTER);
+
+typedef struct WS(in_pktinfo) {
+ IN_ADDR ipi_addr;
+ UINT ipi_ifindex;
+} IN_PKTINFO, *PIN_PKTINFO;
+
+#ifndef USE_WS_PREFIX
+#define IPV6_OPTIONS 1
+#define IPV6_HDRINCL 2
+#define IPV6_UNICAST_HOPS 4
+#define IPV6_MULTICAST_IF 9
+#define IPV6_MULTICAST_HOPS 10
+#define IPV6_MULTICAST_LOOP 11
+#define IPV6_ADD_MEMBERSHIP 12
+#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
+#define IPV6_DROP_MEMBERSHIP 13
+#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
+#define IPV6_DONTFRAG 14
+#define IPV6_PKTINFO 19
+#define IPV6_HOPLIMIT 21
+#define IPV6_PROTECTION_LEVEL 23
+#define IPV6_RECVIF 24
+#define IPV6_RECVDSTADDR 25
+#define IPV6_CHECKSUM 26
+#define IPV6_V6ONLY 27
+#define IPV6_IFLIST 28
+#define IPV6_ADD_IFLIST 29
+#define IPV6_DEL_IFLIST 30
+#define IPV6_UNICAST_IF 31
+#define IPV6_RTHDR 32
+#define IPV6_RECVRTHDR 38
+#else
+#define WS_IPV6_OPTIONS 1
+#define WS_IPV6_HDRINCL 2
+#define WS_IPV6_UNICAST_HOPS 4
+#define WS_IPV6_MULTICAST_IF 9
+#define WS_IPV6_MULTICAST_HOPS 10
+#define WS_IPV6_MULTICAST_LOOP 11
+#define WS_IPV6_ADD_MEMBERSHIP 12
+#define WS_IPV6_DROP_MEMBERSHIP 13
+#define WS_IPV6_LEAVE_GROUP WS_IPV6_DROP_MEMBERSHIP
+#define WS_IPV6_DONTFRAG 14
+#define WS_IPV6_PKTINFO 19
+#define WS_IPV6_HOPLIMIT 21
+#define WS_IPV6_PROTECTION_LEVEL 23
+#define WS_IPV6_RECVIF 24
+#define WS_IPV6_RECVDSTADDR 25
+#define WS_IPV6_CHECKSUM 26
+#define WS_IPV6_V6ONLY 27
+#define WS_IPV6_IFLIST 28
+#define WS_IPV6_ADD_IFLIST 29
+#define WS_IPV6_DEL_IFLIST 30
+#define WS_IPV6_UNICAST_IF 31
+#define WS_IPV6_RTHDR 32
+#define WS_IPV6_RECVRTHDR 38
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define TCP_OFFLOAD_NO_PREFERENCE 0
+#define TCP_OFFLOAD_NOT_PREFERRED 1
+#define TCP_OFFLOAD_PREFERRED 2
+#else
+#define WS_TCP_OFFLOAD_NO_PREFERENCE 0
+#define WS_TCP_OFFLOAD_NOT_PREFERRED 1
+#define WS_TCP_OFFLOAD_PREFERRED 2
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+/* TCP_NODELAY is defined elsewhere */
+#define TCP_EXPEDITED_1122 2
+#define TCP_KEEPALIVE 3
+#define TCP_MAXSEG 4
+#define TCP_MAXRT 5
+#define TCP_STDURG 6
+#define TCP_NOURG 7
+#define TCP_ATMARK 8
+#define TCP_NOSYNRETRIES 9
+#define TCP_TIMESTAMPS 10
+#define TCP_OFFLOAD_PREFERENCE 11
+#define TCP_CONGESTION_ALGORITHM 12
+#define TCP_DELAY_FIN_ACK 13
+#else
+/* WS_TCP_NODELAY is defined elsewhere */
+#define WS_TCP_EXPEDITED_1122 2
+#define WS_TCP_KEEPALIVE 3
+#define WS_TCP_MAXSEG 4
+#define WS_TCP_MAXRT 5
+#define WS_TCP_STDURG 6
+#define WS_TCP_NOURG 7
+#define WS_TCP_ATMARK 8
+#define WS_TCP_NOSYNRETRIES 9
+#define WS_TCP_TIMESTAMPS 10
+#define WS_TCP_OFFLOAD_PREFERENCE 11
+#define WS_TCP_CONGESTION_ALGORITHM 12
+#define WS_TCP_DELAY_FIN_ACK 13
+#endif /* USE_WS_PREFIX */
+
+#ifndef USE_WS_PREFIX
+#define INET_ADDRSTRLEN 22
+#define INET6_ADDRSTRLEN 65
+#define IN6ADDR_ANY_INIT { 0 }
+#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
+#else
+#define WS_INET_ADDRSTRLEN 22
+#define WS_INET6_ADDRSTRLEN 65
+#define WS_IN6ADDR_ANY_INIT { 0 }
+#define WS_IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
+#endif /* USE_WS_PREFIX */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static inline BOOL WS(IN6_IS_ADDR_LOOPBACK) ( const IN6_ADDR *a )
+{
+ return (BOOL)((a->s6_words[0] == 0) &&
+ (a->s6_words[1] == 0) &&
+ (a->s6_words[2] == 0) &&
+ (a->s6_words[3] == 0) &&
+ (a->s6_words[4] == 0) &&
+ (a->s6_words[5] == 0) &&
+ (a->s6_words[6] == 0) &&
+ (a->s6_words[7] == 0x0100));
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WS2IPDEF__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h
new file mode 100644
index 00000000..1e510fb5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2spi.h
@@ -0,0 +1,63 @@
+/*
+ * WS2SPI.H -- definitions to be used with the WinSock service provider.
+ *
+ * Copyright (C) 2001 Patrik Stridvall
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINSOCK2SPI_
+#define _WINSOCK2SPI_
+
+#ifndef _WINSOCK2API_
+#include <winsock2.h>
+#endif /* !defined(_WINSOCK2API_) */
+
+#include <pshpack4.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+typedef BOOL (WINAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM);
+
+WSAEVENT WINAPI WPUCompleteOverlappedRequest(SOCKET,LPWSAOVERLAPPED,DWORD,DWORD,LPINT);
+INT WINAPI WSCInstallProvider(const LPGUID,LPCWSTR,const LPWSAPROTOCOL_INFOW,
+ DWORD,LPINT);
+INT WINAPI WSCDeinstallProvider(LPGUID,LPINT);
+INT WINAPI WSCEnableNSProvider(LPGUID,BOOL);
+INT WINAPI WSCEnumProtocols(LPINT,LPWSAPROTOCOL_INFOW,LPDWORD,LPINT);
+INT WINAPI WSCGetProviderPath(LPGUID,LPWSTR,LPINT,LPINT);
+INT WINAPI WSCInstallNameSpace(LPWSTR,LPWSTR,DWORD,DWORD,LPGUID);
+INT WINAPI WSCUnInstallNameSpace(LPGUID);
+INT WINAPI WSCUpdateProvider(LPGUID, const WCHAR *, const LPWSAPROTOCOL_INFOW, DWORD, LPINT);
+INT WINAPI WSCWriteProviderOrder(LPDWORD,DWORD);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#include <poppack.h>
+
+#endif /* !defined(_WINSOCK2SPI_) */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h
new file mode 100644
index 00000000..572142da
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/ws2tcpip.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2001 Francois Gouget
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WS2TCPIP__
+#define __WS2TCPIP__
+
+#include <winsock2.h>
+#include <ws2ipdef.h>
+#include <limits.h>
+
+#ifdef USE_WS_PREFIX
+#define WS(x) WS_##x
+#else
+#define WS(x) x
+#endif
+
+/* for addrinfo calls */
+typedef struct WS(addrinfo)
+{
+ int ai_flags;
+ int ai_family;
+ int ai_socktype;
+ int ai_protocol;
+ size_t ai_addrlen;
+ char * ai_canonname;
+ struct WS(sockaddr)* ai_addr;
+ struct WS(addrinfo)* ai_next;
+} ADDRINFOA, *PADDRINFOA;
+
+typedef struct WS(addrinfoW)
+{
+ int ai_flags;
+ int ai_family;
+ int ai_socktype;
+ int ai_protocol;
+ size_t ai_addrlen;
+ PWSTR ai_canonname;
+ struct WS(sockaddr)* ai_addr;
+ struct WS(addrinfoW)* ai_next;
+} ADDRINFOW, *PADDRINFOW;
+
+typedef int WS(socklen_t);
+
+typedef ADDRINFOA ADDRINFO, *LPADDRINFO;
+
+/* Possible Windows flags for getaddrinfo() */
+#ifndef USE_WS_PREFIX
+# define AI_PASSIVE 0x00000001
+# define AI_CANONNAME 0x00000002
+# define AI_NUMERICHOST 0x00000004
+# define AI_ADDRCONFIG 0x00000400
+# define AI_NON_AUTHORITATIVE 0x00004000
+# define AI_SECURE 0x00008000
+# define AI_RETURN_PREFERRED_NAMES 0x00010000
+/* getaddrinfo error codes */
+# define EAI_AGAIN WSATRY_AGAIN
+# define EAI_BADFLAGS WSAEINVAL
+# define EAI_FAIL WSANO_RECOVERY
+# define EAI_FAMILY WSAEAFNOSUPPORT
+# define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
+# define EAI_NODATA EAI_NONAME
+# define EAI_NONAME WSAHOST_NOT_FOUND
+# define EAI_SERVICE WSATYPE_NOT_FOUND
+# define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
+#else
+# define WS_AI_PASSIVE 0x00000001
+# define WS_AI_CANONNAME 0x00000002
+# define WS_AI_NUMERICHOST 0x00000004
+# define WS_AI_ADDRCONFIG 0x00000400
+# define WS_AI_NON_AUTHORITATIVE 0x00004000
+# define WS_AI_SECURE 0x00008000
+# define WS_AI_RETURN_PREFERRED_NAMES 0x00010000
+/* getaddrinfo error codes */
+# define WS_EAI_AGAIN WSATRY_AGAIN
+# define WS_EAI_BADFLAGS WSAEINVAL
+# define WS_EAI_FAIL WSANO_RECOVERY
+# define WS_EAI_FAMILY WSAEAFNOSUPPORT
+# define WS_EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
+# define WS_EAI_NODATA WS_EAI_NONAME
+# define WS_EAI_NONAME WSAHOST_NOT_FOUND
+# define WS_EAI_SERVICE WSATYPE_NOT_FOUND
+# define WS_EAI_SOCKTYPE WSAESOCKTNOSUPPORT
+#endif
+
+#ifndef USE_WS_PREFIX
+# define NI_MAXHOST 1025
+# define NI_MAXSERV 32
+#else
+# define WS_NI_MAXHOST 1025
+# define WS_NI_MAXSERV 32
+#endif
+
+/* Possible Windows flags for getnameinfo() */
+#ifndef USE_WS_PREFIX
+# define NI_NOFQDN 0x01
+# define NI_NUMERICHOST 0x02
+# define NI_NAMEREQD 0x04
+# define NI_NUMERICSERV 0x08
+# define NI_DGRAM 0x10
+#else
+# define WS_NI_NOFQDN 0x01
+# define WS_NI_NUMERICHOST 0x02
+# define WS_NI_NAMEREQD 0x04
+# define WS_NI_NUMERICSERV 0x08
+# define WS_NI_DGRAM 0x10
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define GAI_STRERROR_BUFFER_SIZE 1024
+
+static inline char *gai_strerrorA(int errcode)
+{
+ static char buffer[GAI_STRERROR_BUFFER_SIZE + 1];
+
+ /* FIXME: should format message from system, ignoring inserts in neutral
+ * language */
+ buffer[0] = '\0';
+
+ return buffer;
+}
+
+static inline WCHAR *gai_strerrorW(int errcode)
+{
+ static WCHAR buffer[GAI_STRERROR_BUFFER_SIZE + 1];
+
+ /* FIXME: should format message from system, ignoring inserts in neutral
+ * language */
+ buffer[0] = '\0';
+
+ return buffer;
+}
+
+#ifdef USE_WS_PREFIX
+# define WS_gai_strerror WINELIB_NAME_AW(gai_strerror)
+#elif defined(WINE_NO_UNICODE_MACROS)
+# define gai_strerror gai_strerrorA
+#else
+# define gai_strerror WINELIB_NAME_AW(gai_strerror)
+#endif
+
+void WINAPI WS(freeaddrinfo)(LPADDRINFO);
+#define FreeAddrInfoA WS(freeaddrinfo)
+void WINAPI FreeAddrInfoW(PADDRINFOW);
+#define FreeAddrInfo WINELIB_NAME_AW(FreeAddrInfo)
+int WINAPI WS(getaddrinfo)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**);
+#define GetAddrInfoA WS(getaddrinfo)
+int WINAPI GetAddrInfoW(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*);
+#define GetAddrInfo WINELIB_NAME_AW(GetAddrInfo)
+int WINAPI WS(getnameinfo)(const SOCKADDR*,WS(socklen_t),PCHAR,DWORD,PCHAR,DWORD,INT);
+#define GetNameInfoA WS(getnameinfo)
+INT WINAPI GetNameInfoW(const SOCKADDR*,WS(socklen_t),PWCHAR,DWORD,PWCHAR,DWORD,INT);
+#define GetNameInfo WINELIB_NAME_AW(GetNameInfo)
+PCSTR WINAPI WS(inet_ntop)(INT,PVOID,PSTR,SIZE_T);
+#define InetNtopA WS(inet_ntop)
+PCWSTR WINAPI InetNtopW(INT,PVOID,PWSTR,SIZE_T);
+#define InetNtop WINELIB_NAME_AW(InetNtop)
+int WINAPI WS(inet_pton)(INT,PCSTR,PVOID);
+#define InetPtonA WS(inet_pton)
+int WINAPI InetPtonW(INT,PCWSTR,PVOID);
+#define InetPton WINELIB_NAME_AW(InetPton)
+
+/*
+ * Ws2tcpip Function Typedefs
+ *
+ * Remember to keep this section in sync with the
+ * prototypes above.
+ */
+#if INCL_WINSOCK_API_TYPEDEFS
+
+typedef void (WINAPI *LPFN_FREEADDRINFO)(LPADDRINFO);
+#define LPFN_FREEADDRINFOA LPFN_FREEADDRINFO
+typedef void (WINAPI *LPFN_FREEADDRINFOW)(PADDRINFOW);
+#define LPFN_FREEADDRINFOT WINELIB_NAME_AW(LPFN_FREEADDRINFO)
+typedef int (WINAPI *LPFN_GETADDRINFO)(const char*,const char*,const struct WS(addrinfo)*,struct WS(addrinfo)**);
+#define LPFN_GETADDRINFOA LPFN_GETADDRINFO
+typedef int (WINAPI *LPFN_GETADDRINFOW)(PCWSTR,PCWSTR,const ADDRINFOW*,PADDRINFOW*);
+#define LPFN_GETADDRINFOT WINELIB_NAME_AW(LPFN_GETADDRINFO)
+typedef int (WINAPI *LPFN_GETNAMEINFO)(const struct sockaddr*,socklen_t,char*,DWORD,char*,DWORD,int);
+#define LPFN_GETNAMEINFOA LPFN_GETNAMEINFO
+typedef int (WINAPI *LPFN_GETNAMEINFOW)(const SOCKADDR*,socklen_t,PWCHAR,DWORD,PWCHAR,DWORD,INT);
+#define LPFN_GETNAMEINFOT WINELIB_NAME_AW(LPFN_GETNAMEINFO)
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WS2TCPIP__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h
new file mode 100644
index 00000000..c069e946
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wshisotp.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2001 Stefan Leichter
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WSHISOTP_
+#define _WINE_WSHISOTP_
+
+
+/*
+ * constants
+ */
+#define ISOPROTO_TP4 29
+#define ISOPROTO_TP ISOPROTO_TP4
+
+
+#endif /* _WINE_WSHISOTP_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h
new file mode 100644
index 00000000..7c089882
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsipx.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2001 Stefan Leichter
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WINE_WSIPX_
+#define _WINE_WSIPX_
+
+#ifdef USE_WS_PREFIX
+# define WS(x) WS_##x
+#else
+# define WS(x) x
+#endif
+
+typedef struct WS_sockaddr_ipx
+{
+ short sa_family;
+ char sa_netnum[4];
+ char sa_nodenum[6];
+ unsigned short sa_socket;
+} SOCKADDR_IPX, *PSOCKADDR_IPX, *LPSOCKADDR_IPX;
+
+/*
+ * constants
+ */
+#define NSPROTO_IPX 1000
+#define NSPROTO_SPX 1256
+#define NSPROTO_SPXII 1257
+
+#undef WS
+#endif /* _WINE_WSIPX_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h
new file mode 100644
index 00000000..6517d1fb
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wsnwlink.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2003,2004 Roderick Colenbrander
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _WSNWLINK_
+#define _WSNWLINK_
+
+#define IPX_PTYPE 0x4000
+#define IPX_FILTERPTYPE 0x4001
+#define IPX_DSTYPE 0x4002
+#define IPX_STOPFILTERPTYPE 0x4003
+#define IPX_EXTENDED_ADDRESS 0x4004
+#define IPX_RECVHDR 0x4005
+#define IPX_MAXSIZE 0x4006
+#define IPX_ADDRESS 0x4007
+#define IPX_GETNETINFO 0x4008
+#define IPX_GETNETINFO_NORIP 0x4009
+#define IPX_SPXGETCONNECTIONSTATUS 0x400b
+#define IPX_ADDRESS_NOTIFY 0x400c
+#define IPX_MAX_ADAPTER_NUM 0x400d
+#define IPX_RERIPNETNUMBER 0x400e
+#define IPX_RECEIVE_BROADCAST 0x400f
+#define IPX_IMMEDIATESPXACK 0x4010
+
+typedef struct _IPX_ADDRESS_DATA {
+ INT adapternum;
+ UCHAR netnum[4];
+ UCHAR nodenum[6];
+ BOOLEAN wan;
+ BOOLEAN status;
+ INT maxpkt;
+ ULONG linkspeed;
+} IPX_ADDRESS_DATA, *PIPX_ADDRESS_DATA;
+
+#endif /* _WSNWLINK_ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h
new file mode 100644
index 00000000..5904cac8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtsapi32.h
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2005 Ulrich Czekalla (For CodeWeavers)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_WTSAPI32_H
+#define __WINE_WTSAPI32_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef enum _WTS_VIRTUAL_CLASS
+{
+ WTSVirtualClientData,
+ WTSVirtualFileHandle
+} WTS_VIRTUAL_CLASS;
+
+typedef enum tagWTS_INFO_CLASS
+{
+ WTSInitialProgram,
+ WTSApplicationName,
+ WTSWorkingDirectory,
+ WTSOEMId,
+ WTSSessionId,
+ WTSUserName,
+ WTSWinStationName,
+ WTSDomainName,
+ WTSConnectState,
+ WTSClientBuildNumber,
+ WTSClientName,
+ WTSClientDirectory,
+ WTSClientProductId,
+ WTSClientHardwareId,
+ WTSClientAddress,
+ WTSClientDisplay,
+ WTSClientProtocolType,
+} WTS_INFO_CLASS;
+
+typedef enum _WTS_CONNECTSTATE_CLASS
+{
+ WTSActive,
+ WTSConnected,
+ WTSConnectQuery,
+ WTSShadow,
+ WTSDisconnected,
+ WTSIdle,
+ WTSListen,
+ WTSReset,
+ WTSDown,
+ WTSInit
+} WTS_CONNECTSTATE_CLASS;
+
+typedef enum _WTS_CONFIG_CLASS
+{
+ WTSUserConfigInitialProgram,
+ WTSUserConfigWorkingDirectory,
+ WTSUserConfigInheritInitialProgram,
+ WTSUserConfigAllowLogonTerminalServer,
+ WTSUserConfigTimeoutSettingsConnections,
+ WTSUserConfigTimeoutSettingsDisconnections,
+ WTSUserConfigTimeoutSettingsIdle,
+ WTSUserConfigDeviceClientDrives,
+ WTSUserConfigDeviceClientPrinters,
+ WTSUserConfigDeviceClientDefaultPrinter,
+ WTSUserConfigBrokenTimeoutSettings,
+ WTSUserConfigModemCallbackSettings,
+ WTSUserConfigModemCallbackPhoneNumber,
+ WTSUserConfigShadowSettings,
+ WTSUserConfigTerminalServerProfilePath,
+ WTSUserConfigTerminalServerHomeDirectory,
+ WTSUserConfigfTerminalServerRemoteHomeDir
+} WTS_CONFIG_CLASS;
+
+typedef struct _WTS_PROCESS_INFOA
+{
+ DWORD SessionId;
+ DWORD ProcessId;
+ LPSTR pProcessName;
+ PSID pUserSid;
+} WTS_PROCESS_INFOA, *PWTS_PROCESS_INFOA;
+
+typedef struct _WTS_PROCESS_INFOW
+{
+ DWORD SessionId;
+ DWORD ProcessId;
+ LPWSTR pProcessName;
+ PSID pUserSid;
+} WTS_PROCESS_INFOW, *PWTS_PROCESS_INFOW;
+
+DECL_WINELIB_TYPE_AW(WTS_PROCESS_INFO)
+DECL_WINELIB_TYPE_AW(PWTS_PROCESS_INFO)
+
+typedef struct _WTS_SESSION_INFOA
+{
+ DWORD SessionId;
+ LPSTR pWinStationName;
+ WTS_CONNECTSTATE_CLASS State;
+} WTS_SESSION_INFOA, *PWTS_SESSION_INFOA;
+
+typedef struct _WTS_SESSION_INFOW
+{
+ DWORD SessionId;
+ LPWSTR pWinStationName;
+ WTS_CONNECTSTATE_CLASS State;
+} WTS_SESSION_INFOW, *PWTS_SESSION_INFOW;
+
+DECL_WINELIB_TYPE_AW(WTS_SESSION_INFO)
+DECL_WINELIB_TYPE_AW(PWTS_SESSION_INFO)
+
+typedef struct _WTS_SERVER_INFOA
+{
+ LPSTR pServerName;
+} WTS_SERVER_INFOA, *PWTS_SERVER_INFOA;
+
+typedef struct _WTS_SERVER_INFOW
+{
+ LPWSTR pServerName;
+} WTS_SERVER_INFOW, *PWTS_SERVER_INFOW;
+
+DECL_WINELIB_TYPE_AW(WTS_SERVER_INFO)
+DECL_WINELIB_TYPE_AW(PWTS_SERVER_INFO)
+
+void WINAPI WTSCloseServer(HANDLE);
+BOOL WINAPI WTSConnectSessionA(ULONG, ULONG, PSTR, BOOL);
+BOOL WINAPI WTSConnectSessionW(ULONG, ULONG, PWSTR, BOOL);
+#define WTSConnectSession WINELIB_NAME_AW(WTSConnectSession)
+BOOL WINAPI WTSDisconnectSession(HANDLE, DWORD, BOOL);
+BOOL WINAPI WTSEnumerateProcessesA(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOA *, DWORD *);
+BOOL WINAPI WTSEnumerateProcessesW(HANDLE, DWORD, DWORD, PWTS_PROCESS_INFOW *, DWORD *);
+#define WTSEnumerateProcesses WINELIB_NAME_AW(WTSEnumerateProcesses)
+BOOL WINAPI WTSEnumerateServersA( LPSTR, DWORD, DWORD, PWTS_SERVER_INFOA*, DWORD*);
+BOOL WINAPI WTSEnumerateServersW( LPWSTR, DWORD, DWORD, PWTS_SERVER_INFOW*, DWORD*);
+#define WTSEnumerateServers WINELIB_NAME_AW(WTSEnumerateServers)
+BOOL WINAPI WTSEnumerateSessionsA(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOA *, DWORD *);
+BOOL WINAPI WTSEnumerateSessionsW(HANDLE, DWORD, DWORD, PWTS_SESSION_INFOW *, DWORD *);
+#define WTSEnumerateSessions WINELIB_NAME_AW(WTSEnumerateSessions)
+void WINAPI WTSFreeMemory(PVOID);
+HANDLE WINAPI WTSOpenServerA(LPSTR);
+HANDLE WINAPI WTSOpenServerW(LPWSTR);
+#define WTSOpenServer WINELIB_NAME_AW(WTSOpenServer)
+BOOL WINAPI WTSQuerySessionInformationA(HANDLE, DWORD, WTS_INFO_CLASS, LPSTR *, DWORD *);
+BOOL WINAPI WTSQuerySessionInformationW(HANDLE, DWORD, WTS_INFO_CLASS, LPWSTR *, DWORD *);
+#define WTSQuerySessionInformation WINELIB_NAME_AW(WTSQuerySessionInformation)
+BOOL WINAPI WTSQueryUserConfigA(LPSTR,LPSTR,WTS_CONFIG_CLASS,LPSTR*,DWORD*);
+BOOL WINAPI WTSQueryUserConfigW(LPWSTR,LPWSTR,WTS_CONFIG_CLASS,LPWSTR*,DWORD*);
+#define WTSQueryUserConfig WINELIB_NAME_AW(WTSQueryUserConfig)
+BOOL WINAPI WTSQueryUserToken(ULONG, PHANDLE);
+BOOL WINAPI WTSRegisterSessionNotification(HWND, DWORD);
+BOOL WINAPI WTSRegisterSessionNotificationEx(HANDLE, HWND, DWORD);
+BOOL WINAPI WTSStartRemoteControlSessionA(LPSTR, ULONG, BYTE, USHORT);
+BOOL WINAPI WTSStartRemoteControlSessionW(LPWSTR, ULONG, BYTE, USHORT);
+#define WTSStartRemoteControlSession WINELIB_NAME_AW(WTSStartRemoteControlSession)
+BOOL WINAPI WTSStopRemoteControlSession(ULONG);
+BOOL WINAPI WTSTerminateProcess(HANDLE, DWORD, DWORD);
+BOOL WINAPI WTSUnRegisterSessionNotification(HWND);
+BOOL WINAPI WTSUnRegisterSessionNotificationEx(HANDLE, HWND);
+BOOL WINAPI WTSWaitSystemEvent(HANDLE, DWORD, DWORD*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h
new file mode 100644
index 00000000..39c3ac5e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.h
@@ -0,0 +1,767 @@
+/*** Autogenerated by WIDL 1.1.36 from wtypes.idl - Do not edit ***/
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifndef __WIDL_WTYPES_H
+#define __WIDL_WTYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Headers for imported files */
+
+#include <basetsd.h>
+#include <guiddef.h>
+
+/* Forward declarations */
+
+
+void * __RPC_USER MIDL_user_allocate(SIZE_T);
+void __RPC_USER MIDL_user_free(void *);
+
+/*****************************************************************************
+ * IWinTypes interface (v0.1)
+ */
+#ifndef __IWinTypes_INTERFACE_DEFINED__
+#define __IWinTypes_INTERFACE_DEFINED__
+
+extern RPC_IF_HANDLE IWinTypes_v0_1_c_ifspec;
+extern RPC_IF_HANDLE IWinTypes_v0_1_s_ifspec;
+#if 0 /* winnt.h */
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef ULONG DWORD;
+typedef LONG BOOL;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef short SHORT;
+typedef unsigned short USHORT;
+typedef LONG LONG;
+typedef ULONG ULONG;
+typedef float FLOAT;
+typedef void *PVOID;
+typedef void *LPVOID;
+typedef DWORD *LPDWORD;
+typedef char CHAR;
+typedef CHAR *LPSTR;
+typedef const CHAR *LPCSTR;
+typedef wchar_t WCHAR;
+typedef WCHAR *LPWSTR;
+typedef const WCHAR *LPCWSTR;
+typedef boolean BOOLEAN;
+typedef DWORD COLORREF;
+typedef void *HANDLE;
+typedef void *HMODULE;
+typedef void *HINSTANCE;
+typedef void *HRGN;
+typedef void *HTASK;
+typedef void *HKEY;
+typedef void *HDESK;
+typedef void *HMF;
+typedef void *HEMF;
+typedef void *HPEN;
+typedef void *HRSRC;
+typedef void *HSTR;
+typedef void *HWINSTA;
+typedef void *HKL;
+typedef void *HGDIOBJ;
+typedef HANDLE HDWP;
+typedef LONG_PTR LRESULT;
+typedef LONG HRESULT;
+typedef DWORD LCID;
+typedef USHORT LANGID;
+typedef UINT64 DWORDLONG;
+typedef INT64 LONGLONG;
+typedef UINT64 ULONGLONG;
+typedef struct _LARGE_INTEGER {
+ LONGLONG QuadPart;
+} LARGE_INTEGER;
+typedef struct _ULARGE_INTEGER {
+ ULONGLONG QuadPart;
+} ULARGE_INTEGER;
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+ UCHAR Value[6];
+} SID_IDENTIFIER_AUTHORITY;
+typedef struct _SID_IDENTIFIER_AUTHORITY *PSID_IDENTIFIER_AUTHORITY;
+typedef struct _SID {
+ UCHAR Revision;
+ UCHAR SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ ULONG SubAuthority[1];
+} SID;
+typedef struct _SID *PSID;
+typedef USHORT SECURITY_DESCRIPTOR_CONTROL;
+typedef USHORT *PSECURITY_DESCRIPTOR_CONTROL;
+typedef struct _ACL {
+ UCHAR AclRevision;
+ UCHAR Sbz1;
+ USHORT AclSize;
+ USHORT AceCount;
+ USHORT Sbz2;
+} ACL;
+typedef ACL *PACL;
+typedef struct _SECURITY_DESCRIPTOR {
+ UCHAR Revision;
+ UCHAR Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ PSID Owner;
+ PSID Group;
+ PACL Sacl;
+ PACL Dacl;
+} SECURITY_DESCRIPTOR;
+typedef struct _SECURITY_DESCRIPTOR *PSECURITY_DESCRIPTOR;
+typedef struct _SECURITY_ATTRIBUTES {
+ DWORD nLength;
+ LPVOID lpSecurityDescriptor;
+ BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES;
+typedef struct _SECURITY_ATTRIBUTES *PSECURITY_ATTRIBUTES;
+typedef struct _SECURITY_ATTRIBUTES *LPSECURITY_ATTRIBUTES;
+typedef struct tagSIZE {
+ LONG cx;
+ LONG cy;
+} SIZE;
+typedef struct tagSIZE *PSIZE;
+typedef struct tagSIZE *LPSIZE;
+typedef SIZE SIZEL;
+typedef SIZE *PSIZEL;
+typedef SIZE *LPSIZEL;
+typedef struct tagPOINT {
+ LONG x;
+ LONG y;
+} POINT;
+typedef struct tagPOINT *PPOINT;
+typedef struct tagPOINT *LPPOINT;
+typedef struct _POINTL {
+ LONG x;
+ LONG y;
+} POINTL;
+typedef struct _POINTL *PPOINTL;
+typedef struct tagRECT {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECT;
+typedef struct tagRECT *PRECT;
+typedef struct tagRECT *LPRECT;
+typedef const RECT *LPCRECT;
+typedef struct _RECTL {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECTL;
+typedef struct _RECTL *PRECTL;
+typedef struct _RECTL *LPRECTL;
+typedef const RECTL *LPCRECTL;
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+#endif /* winnt.h */
+#ifdef _MSC_VER
+typedef double DOUBLE;
+#else
+typedef double DECLSPEC_ALIGN(8) DOUBLE;
+#endif
+#ifndef _PALETTEENTRY_DEFINED
+#define _PALETTEENTRY_DEFINED
+typedef struct tagPALETTEENTRY {
+ BYTE peRed;
+ BYTE peGreen;
+ BYTE peBlue;
+ BYTE peFlags;
+} PALETTEENTRY;
+typedef struct tagPALETTEENTRY *PPALETTEENTRY;
+typedef struct tagPALETTEENTRY *LPPALETTEENTRY;
+#endif
+#ifndef _LOGPALETTE_DEFINED
+#define _LOGPALETTE_DEFINED
+typedef struct tagLOGPALETTE {
+ WORD palVersion;
+ WORD palNumEntries;
+ PALETTEENTRY palPalEntry[1];
+} LOGPALETTE;
+typedef struct tagLOGPALETTE *PLOGPALETTE;
+typedef struct tagLOGPALETTE *LPLOGPALETTE;
+#endif
+#ifndef _SYSTEMTIME_
+#define _SYSTEMTIME_
+typedef struct _SYSTEMTIME {
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+} SYSTEMTIME;
+typedef struct _SYSTEMTIME *PSYSTEMTIME;
+typedef struct _SYSTEMTIME *LPSYSTEMTIME;
+#endif
+#ifndef _FILETIME_
+#define _FILETIME_
+typedef struct _FILETIME {
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME;
+typedef struct _FILETIME *PFILETIME;
+typedef struct _FILETIME *LPFILETIME;
+#endif
+#ifndef _TEXTMETRIC_DEFINED
+#define _TEXTMETRIC_DEFINED
+typedef struct tagTEXTMETRICA {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICA;
+typedef struct tagTEXTMETRICA *LPTEXTMETRICA;
+typedef struct tagTEXTMETRICA *PTEXTMETRICA;
+typedef struct tagTEXTMETRICW {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ WCHAR tmFirstChar;
+ WCHAR tmLastChar;
+ WCHAR tmDefaultChar;
+ WCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICW;
+typedef struct tagTEXTMETRICW *LPTEXTMETRICW;
+typedef struct tagTEXTMETRICW *PTEXTMETRICW;
+#endif
+typedef WCHAR OLECHAR;
+typedef OLECHAR *LPOLESTR;
+typedef const OLECHAR *LPCOLESTR;
+#ifndef __WINESRC__
+#define OLESTR(str) L##str
+#endif
+typedef LONG SCODE;
+typedef struct _COAUTHIDENTITY {
+ USHORT *User;
+ ULONG UserLength;
+ USHORT *Domain;
+ ULONG DomainLength;
+ USHORT *Password;
+ ULONG PasswordLength;
+ ULONG Flags;
+} COAUTHIDENTITY;
+typedef struct _COAUTHINFO {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ LPWSTR pwszServerPrincName;
+ DWORD dwAuthnLevel;
+ DWORD dwImpersonationLevel;
+ COAUTHIDENTITY *pAuthIdentityData;
+ DWORD dwCapabilities;
+} COAUTHINFO;
+typedef enum tagMEMCTX {
+ MEMCTX_TASK = 1,
+ MEMCTX_SHARED = 2,
+ MEMCTX_MACSYSTEM = 3,
+ MEMCTX_UNKNOWN = -1,
+ MEMCTX_SAME = -2
+} MEMCTX;
+#ifndef _ROT_COMPARE_MAX_DEFINED
+#define _ROT_COMPARE_MAX_DEFINED
+#define ROT_COMPARE_MAX 2048
+#endif
+#ifndef _ROTFLAGS_DEFINED
+#define _ROTFLAGS_DEFINED
+#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1
+#define ROTFLAGS_ALLOWANYCLIENT 0x2
+#endif
+typedef enum tagCLSCTX {
+ CLSCTX_INPROC_SERVER = 0x1,
+ CLSCTX_INPROC_HANDLER = 0x2,
+ CLSCTX_LOCAL_SERVER = 0x4,
+ CLSCTX_INPROC_SERVER16 = 0x8,
+ CLSCTX_REMOTE_SERVER = 0x10,
+ CLSCTX_INPROC_HANDLER16 = 0x20,
+ CLSCTX_INPROC_SERVERX86 = 0x40,
+ CLSCTX_INPROC_HANDLERX86 = 0x80,
+ CLSCTX_ESERVER_HANDLER = 0x100,
+ CLSCTX_NO_CODE_DOWNLOAD = 0x400,
+ CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
+ CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
+ CLSCTX_NO_FAILURE_LOG = 0x4000,
+ CLSCTX_DISABLE_AAA = 0x8000,
+ CLSCTX_ENABLE_AAA = 0x10000,
+ CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
+} CLSCTX;
+#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)
+#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)
+typedef enum tagMSHLFLAGS {
+ MSHLFLAGS_NORMAL = 0,
+ MSHLFLAGS_TABLESTRONG = 1,
+ MSHLFLAGS_TABLEWEAK = 2,
+ MSHLFLAGS_NOPING = 4
+} MSHLFLAGS;
+typedef enum tagMSHCTX {
+ MSHCTX_LOCAL = 0,
+ MSHCTX_NOSHAREDMEM = 1,
+ MSHCTX_DIFFERENTMACHINE = 2,
+ MSHCTX_INPROC = 3,
+ MSHCTX_CROSSCTX = 4
+} MSHCTX;
+typedef struct _BYTE_BLOB {
+ ULONG clSize;
+ byte abData[1];
+} BYTE_BLOB;
+typedef BYTE_BLOB *UP_BYTE_BLOB;
+typedef struct _FLAGGED_BYTE_BLOB {
+ ULONG fFlags;
+ ULONG clSize;
+ byte abData[1];
+} FLAGGED_BYTE_BLOB;
+typedef FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
+typedef struct _FLAGGED_WORD_BLOB {
+ ULONG fFlags;
+ ULONG clSize;
+ unsigned short asData[1];
+} FLAGGED_WORD_BLOB;
+typedef FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
+typedef struct _BYTE_SIZEDARR {
+ ULONG clSize;
+ byte *pData;
+} BYTE_SIZEDARR;
+typedef struct _SHORT_SIZEDARR {
+ ULONG clSize;
+ unsigned short *pData;
+} WORD_SIZEDARR;
+typedef struct _LONG_SIZEDARR {
+ ULONG clSize;
+ ULONG *pData;
+} DWORD_SIZEDARR;
+typedef struct _HYPER_SIZEDARR {
+ ULONG clSize;
+ hyper *pData;
+} HYPER_SIZEDARR;
+#define WDT_INPROC_CALL (0x48746457)
+
+#define WDT_REMOTE_CALL (0x52746457)
+
+#define WDT_INPROC64_CALL (0x50746457)
+
+typedef struct _userCLIPFORMAT {
+ LONG fContext;
+ union {
+ DWORD dwValue;
+ LPWSTR pwszName;
+ } u;
+} userCLIPFORMAT;
+typedef userCLIPFORMAT *wireCLIPFORMAT;
+typedef WORD CLIPFORMAT;
+typedef struct tagRemHGLOBAL {
+ LONG fNullHGlobal;
+ ULONG cbData;
+ byte data[1];
+} RemHGLOBAL;
+typedef struct _userHGLOBAL {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ FLAGGED_BYTE_BLOB *hRemote;
+ INT64 hInproc64;
+ } u;
+} userHGLOBAL;
+typedef userHGLOBAL *wireHGLOBAL;
+typedef struct tagRemHMETAFILEPICT {
+ LONG mm;
+ LONG xExt;
+ LONG yExt;
+ ULONG cbData;
+ byte data[1];
+} RemHMETAFILEPICT;
+typedef struct _userHMETAFILE {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ BYTE_BLOB *hRemote;
+ INT64 hInproc64;
+ } u;
+} userHMETAFILE;
+typedef userHMETAFILE *wireHMETAFILE;
+typedef struct _remoteMETAFILEPICT {
+ LONG mm;
+ LONG xExt;
+ LONG yExt;
+ userHMETAFILE *hMF;
+} remoteMETAFILEPICT;
+typedef struct _userHMETAFILEPICT {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ remoteMETAFILEPICT *hRemote;
+ INT64 hInproc64;
+ } u;
+} userHMETAFILEPICT;
+typedef userHMETAFILEPICT *wireHMETAFILEPICT;
+typedef struct tagRemHENHMETAFILE {
+ ULONG cbData;
+ byte data[1];
+} RemHENHMETAFILE;
+typedef struct _userHENHMETAFILE {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ BYTE_BLOB *hRemote;
+ INT64 hInproc64;
+ } u;
+} userHENHMETAFILE;
+typedef userHENHMETAFILE *wireHENHMETAFILE;
+typedef struct tagRemHBITMAP {
+ ULONG cbData;
+ byte data[1];
+} RemHBITMAP;
+typedef struct _userBITMAP {
+ LONG bmType;
+ LONG bmWidth;
+ LONG bmHeight;
+ LONG bmWidthBytes;
+ WORD bmPlanes;
+ WORD bmBitsPixel;
+ ULONG cbSize;
+ byte pBuffer[1];
+} userBITMAP;
+typedef struct _userHBITMAP {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ userBITMAP *hRemote;
+ INT64 hInproc64;
+ } u;
+} userHBITMAP;
+typedef userHBITMAP *wireHBITMAP;
+typedef struct tagRemHPALETTE {
+ ULONG cbData;
+ byte data[1];
+} RemHPALETTE;
+typedef struct tagrpcLOGPALETTE {
+ WORD palVersion;
+ WORD palNumEntries;
+ PALETTEENTRY palPalEntry[1];
+} rpcLOGPALETTE;
+typedef struct _userHPALETTE {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ rpcLOGPALETTE *hRemote;
+ INT64 hInproc64;
+ } u;
+} userHPALETTE;
+typedef userHPALETTE *wireHPALETTE;
+#if 0
+typedef void *HGLOBAL;
+typedef HGLOBAL HLOCAL;
+typedef void *HBITMAP;
+typedef void *HPALETTE;
+typedef void *HENHMETAFILE;
+typedef void *HMETAFILE;
+#endif
+typedef void *HMETAFILEPICT;
+typedef struct _RemotableHandle {
+ LONG fContext;
+ union {
+ LONG hInproc;
+ LONG hRemote;
+ } u;
+} RemotableHandle;
+typedef RemotableHandle *wireHACCEL;
+typedef RemotableHandle *wireHBRUSH;
+typedef RemotableHandle *wireHDC;
+typedef RemotableHandle *wireHFONT;
+typedef RemotableHandle *wireHICON;
+typedef RemotableHandle *wireHMENU;
+typedef RemotableHandle *wireHWND;
+#if 0
+typedef void *HACCEL;
+typedef void *HBRUSH;
+typedef void *HDC;
+typedef void *HFONT;
+typedef void *HICON;
+typedef void *HMENU;
+typedef void *HWND;
+typedef HICON HCURSOR;
+typedef struct tagMSG {
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT pt;
+} MSG;
+typedef struct tagMSG *PMSG;
+typedef struct tagMSG *NPMSG;
+typedef struct tagMSG *LPMSG;
+#endif
+#if 0
+typedef GUID *REFGUID;
+typedef IID *REFIID;
+typedef CLSID *REFCLSID;
+typedef FMTID *REFFMTID;
+#endif
+typedef enum tagDVASPECT {
+ DVASPECT_CONTENT = 1,
+ DVASPECT_THUMBNAIL = 2,
+ DVASPECT_ICON = 4,
+ DVASPECT_DOCPRINT = 8
+} DVASPECT;
+typedef enum tagSTGC {
+ STGC_DEFAULT = 0,
+ STGC_OVERWRITE = 1,
+ STGC_ONLYIFCURRENT = 2,
+ STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
+ STGC_CONSOLIDATE = 8
+} STGC;
+typedef enum tagSTGMOVE {
+ STGMOVE_MOVE = 0,
+ STGMOVE_COPY = 1,
+ STGMOVE_SHALLOWCOPY = 2
+} STGMOVE;
+typedef enum tagSTATFLAG {
+ STATFLAG_DEFAULT = 0,
+ STATFLAG_NONAME = 1,
+ STATFLAG_NOOPEN = 2
+} STATFLAG;
+#ifdef _MSC_VER
+typedef double DATE;
+#else
+typedef double DECLSPEC_ALIGN(8) DATE;
+#endif
+#if 0
+typedef struct tagCY {
+ LONGLONG int64;
+} CY;
+#else
+#ifndef _tagCY_DEFINED
+#define _tagCY_DEFINED
+typedef union tagCY {
+ struct {
+#ifdef WORDS_BIGENDIAN
+ LONG Hi;
+ ULONG Lo;
+#else
+ ULONG Lo;
+ LONG Hi;
+#endif
+ } DUMMYSTRUCTNAME;
+ LONGLONG int64;
+} CY;
+#endif
+#endif
+typedef CY *LPCY;
+#if 0
+typedef struct tagDEC {
+ USHORT wReserved;
+ BYTE scale;
+ BYTE sign;
+ ULONG Hi32;
+ ULONGLONG Lo64;
+} DECIMAL;
+#else
+typedef struct tagDEC {
+ USHORT wReserved;
+ union {
+ struct {
+ BYTE scale;
+ BYTE sign;
+ } DUMMYSTRUCTNAME;
+ USHORT signscale;
+ } DUMMYUNIONNAME;
+ ULONG Hi32;
+ union {
+ struct {
+#ifdef WORDS_BIGENDIAN
+ ULONG Mid32;
+ ULONG Lo32;
+#else
+ ULONG Lo32;
+ ULONG Mid32;
+#endif
+ } DUMMYSTRUCTNAME1;
+ ULONGLONG Lo64;
+ } DUMMYUNIONNAME1;
+} DECIMAL;
+#endif
+#define DECIMAL_NEG ((BYTE)0x80)
+#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)
+typedef DECIMAL *LPDECIMAL;
+typedef FLAGGED_WORD_BLOB *wireBSTR;
+typedef OLECHAR *BSTR;
+typedef BSTR *LPBSTR;
+typedef short VARIANT_BOOL;
+typedef VARIANT_BOOL _VARIANT_BOOL;
+#define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF)
+#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)
+typedef struct tagBSTRBLOB {
+ ULONG cbSize;
+ BYTE *pData;
+} BSTRBLOB;
+typedef struct tagBSTRBLOB *LPBSTRBLOB;
+#ifndef _tagBLOB_DEFINED
+#define _tagBLOB_DEFINED
+#define _BLOB_DEFINED
+#define _LPBLOB_DEFINED
+typedef struct tagBLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+} BLOB;
+typedef struct tagBLOB *LPBLOB;
+#endif
+typedef struct tagCLIPDATA {
+ ULONG cbSize;
+ LONG ulClipFmt;
+ BYTE *pClipData;
+} CLIPDATA;
+#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))
+typedef ULONG PROPID;
+typedef unsigned short VARTYPE;
+enum VARENUM {
+ VT_EMPTY = 0,
+ VT_NULL = 1,
+ VT_I2 = 2,
+ VT_I4 = 3,
+ VT_R4 = 4,
+ VT_R8 = 5,
+ VT_CY = 6,
+ VT_DATE = 7,
+ VT_BSTR = 8,
+ VT_DISPATCH = 9,
+ VT_ERROR = 10,
+ VT_BOOL = 11,
+ VT_VARIANT = 12,
+ VT_UNKNOWN = 13,
+ VT_DECIMAL = 14,
+ VT_I1 = 16,
+ VT_UI1 = 17,
+ VT_UI2 = 18,
+ VT_UI4 = 19,
+ VT_I8 = 20,
+ VT_UI8 = 21,
+ VT_INT = 22,
+ VT_UINT = 23,
+ VT_VOID = 24,
+ VT_HRESULT = 25,
+ VT_PTR = 26,
+ VT_SAFEARRAY = 27,
+ VT_CARRAY = 28,
+ VT_USERDEFINED = 29,
+ VT_LPSTR = 30,
+ VT_LPWSTR = 31,
+ VT_RECORD = 36,
+ VT_INT_PTR = 37,
+ VT_UINT_PTR = 38,
+ VT_FILETIME = 64,
+ VT_BLOB = 65,
+ VT_STREAM = 66,
+ VT_STORAGE = 67,
+ VT_STREAMED_OBJECT = 68,
+ VT_STORED_OBJECT = 69,
+ VT_BLOB_OBJECT = 70,
+ VT_CF = 71,
+ VT_CLSID = 72,
+ VT_VERSIONED_STREAM = 73,
+ VT_BSTR_BLOB = 0xfff,
+ VT_VECTOR = 0x1000,
+ VT_ARRAY = 0x2000,
+ VT_BYREF = 0x4000,
+ VT_RESERVED = 0x8000,
+ VT_ILLEGAL = 0xffff,
+ VT_ILLEGALMASKED = 0xfff,
+ VT_TYPEMASK = 0xfff
+};
+
+typedef struct tagCSPLATFORM {
+ DWORD dwPlatformId;
+ DWORD dwVersionHi;
+ DWORD dwVersionLo;
+ DWORD dwProcessorArch;
+} CSPLATFORM;
+typedef struct tagQUERYCONTEXT {
+ DWORD dwContext;
+ CSPLATFORM Platform;
+ LCID Locale;
+ DWORD dwVersionHi;
+ DWORD dwVersionLo;
+} QUERYCONTEXT;
+typedef enum tagTYSPEC {
+ TYSPEC_CLSID = 0,
+ TYSPEC_FILEEXT = 1,
+ TYSPEC_MIMETYPE = 2,
+ TYSPEC_PROGID = 3,
+ TYSPEC_FILENAME = 4,
+ TYSPEC_PACKAGENAME = 5,
+ TYSPEC_OBJECTID = 6
+} TYSPEC;
+typedef struct __WIDL_wtypes_generated_name_00000000 {
+ DWORD tyspec;
+ union {
+ CLSID clsid;
+ LPOLESTR pFileExt;
+ LPOLESTR pMimeType;
+ LPOLESTR pProgId;
+ LPOLESTR pFileName;
+ struct {
+ LPOLESTR pPackageName;
+ GUID PolicyId;
+ } ByName;
+ struct {
+ GUID ObjectId;
+ GUID PolicyId;
+ } ByObjectId;
+ } tagged_union;
+} uCLSSPEC;
+#ifndef PROPERTYKEY_DEFINED
+#define PROPERTYKEY_DEFINED
+typedef struct _tagpropertykey {
+ GUID fmtid;
+ DWORD pid;
+} PROPERTYKEY;
+#endif /*PROPERTYKEY_DEFINED*/
+
+#endif /* __IWinTypes_INTERFACE_DEFINED__ */
+
+/* Begin additional prototypes for all interfaces */
+
+
+/* End additional prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WIDL_WTYPES_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl
new file mode 100644
index 00000000..bb76dc36
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wtypes.idl
@@ -0,0 +1,848 @@
+/*
+ * Basic types used by COM interfaces
+ *
+ * Copyright 2002 Ove Kaaven
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "basetsd.h";
+import "guiddef.h";
+
+[
+ uuid(D3980A60-910C-1068-9341-00DD010F2F1C),
+ version(0.1),
+ pointer_default(unique)
+]
+
+interface IWinTypes
+{
+
+/******************** BASIC WIN32 TYPES ********************/
+cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */
+
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef long BOOL;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef short SHORT;
+typedef unsigned short USHORT;
+typedef long LONG;
+typedef unsigned long ULONG;
+typedef float FLOAT;
+
+typedef void *PVOID, *LPVOID;
+
+typedef DWORD *LPDWORD;
+
+typedef char CHAR;
+typedef [string] CHAR *LPSTR;
+typedef [string] const CHAR *LPCSTR;
+
+typedef wchar_t WCHAR;
+typedef [string] WCHAR *LPWSTR;
+typedef [string] const WCHAR *LPCWSTR;
+
+typedef boolean BOOLEAN;
+
+typedef DWORD COLORREF;
+
+typedef void *HANDLE;
+#define DECLARE_HANDLE(name) typedef void *name
+#define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name
+
+DECLARE_HANDLE(HMODULE);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HTASK);
+DECLARE_HANDLE(HKEY);
+DECLARE_HANDLE(HDESK);
+DECLARE_HANDLE(HMF);
+DECLARE_HANDLE(HEMF);
+DECLARE_HANDLE(HPEN);
+DECLARE_HANDLE(HRSRC);
+DECLARE_HANDLE(HSTR);
+DECLARE_HANDLE(HWINSTA);
+DECLARE_HANDLE(HKL);
+DECLARE_HANDLE(HGDIOBJ);
+
+typedef HANDLE HDWP;
+
+typedef LONG_PTR LRESULT;
+
+typedef LONG HRESULT;
+typedef DWORD LCID;
+typedef USHORT LANGID;
+
+typedef unsigned __int64 DWORDLONG;
+typedef __int64 LONGLONG;
+typedef unsigned __int64 ULONGLONG;
+
+typedef struct _LARGE_INTEGER {
+ LONGLONG QuadPart;
+} LARGE_INTEGER;
+
+typedef struct _ULARGE_INTEGER {
+ ULONGLONG QuadPart;
+} ULARGE_INTEGER;
+
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+ UCHAR Value[6];
+} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
+
+typedef struct _SID {
+ UCHAR Revision;
+ UCHAR SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ [size_is(SubAuthorityCount)] ULONG SubAuthority[*];
+} SID, *PSID;
+
+typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+
+typedef struct _ACL {
+ UCHAR AclRevision;
+ UCHAR Sbz1;
+ USHORT AclSize;
+ USHORT AceCount;
+ USHORT Sbz2;
+} ACL;
+typedef ACL *PACL;
+
+typedef struct _SECURITY_DESCRIPTOR {
+ UCHAR Revision;
+ UCHAR Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ PSID Owner;
+ PSID Group;
+ PACL Sacl;
+ PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
+
+typedef struct _SECURITY_ATTRIBUTES
+{
+ DWORD nLength;
+ [size_is(nLength)] LPVOID lpSecurityDescriptor;
+ BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+
+typedef struct tagSIZE
+{
+ LONG cx;
+ LONG cy;
+} SIZE, *PSIZE, *LPSIZE;
+typedef SIZE SIZEL, *PSIZEL, *LPSIZEL;
+
+typedef struct tagPOINT
+{
+ LONG x;
+ LONG y;
+} POINT, *PPOINT, *LPPOINT;
+
+typedef struct _POINTL
+{
+ LONG x;
+ LONG y;
+} POINTL, *PPOINTL;
+
+typedef struct tagRECT
+{
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECT, *PRECT, *LPRECT;
+typedef const RECT *LPCRECT;
+
+typedef struct _RECTL
+{
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECTL, *PRECTL, *LPRECTL;
+typedef const RECTL *LPCRECTL;
+
+typedef UINT_PTR WPARAM;
+typedef LONG_PTR LPARAM;
+
+cpp_quote("#endif /* winnt.h */")
+
+cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */
+typedef double DOUBLE;
+cpp_quote("#else")
+cpp_quote("typedef double DECLSPEC_ALIGN(8) DOUBLE;")
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _PALETTEENTRY_DEFINED")
+cpp_quote("#define _PALETTEENTRY_DEFINED")
+typedef struct tagPALETTEENTRY {
+ BYTE peRed;
+ BYTE peGreen;
+ BYTE peBlue;
+ BYTE peFlags;
+} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _LOGPALETTE_DEFINED")
+cpp_quote("#define _LOGPALETTE_DEFINED")
+typedef struct tagLOGPALETTE
+{
+ WORD palVersion;
+ WORD palNumEntries;
+ [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*];
+} LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _SYSTEMTIME_")
+cpp_quote("#define _SYSTEMTIME_")
+typedef struct _SYSTEMTIME{
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _FILETIME_")
+cpp_quote("#define _FILETIME_")
+typedef struct _FILETIME {
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME, *PFILETIME, *LPFILETIME;
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _TEXTMETRIC_DEFINED")
+cpp_quote("#define _TEXTMETRIC_DEFINED")
+typedef struct tagTEXTMETRICA
+{
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BYTE tmFirstChar;
+ BYTE tmLastChar;
+ BYTE tmDefaultChar;
+ BYTE tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA;
+
+typedef struct tagTEXTMETRICW
+{
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ WCHAR tmFirstChar;
+ WCHAR tmLastChar;
+ WCHAR tmDefaultChar;
+ WCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW;
+cpp_quote("#endif")
+
+/******************** BASIC COM/OLE TYPES ********************/
+
+typedef WCHAR OLECHAR;
+typedef [string] OLECHAR *LPOLESTR;
+typedef [string] const OLECHAR *LPCOLESTR;
+cpp_quote("#ifndef __WINESRC__")
+cpp_quote("#define OLESTR(str) L##str")
+cpp_quote("#endif")
+
+typedef LONG SCODE;
+
+typedef struct _COAUTHIDENTITY {
+ [size_is(UserLength+1)] USHORT *User;
+ ULONG UserLength;
+ [size_is(DomainLength+1)] USHORT *Domain;
+ ULONG DomainLength;
+ [size_is(PasswordLength+1)] USHORT *Password;
+ ULONG PasswordLength;
+ ULONG Flags;
+} COAUTHIDENTITY;
+
+typedef struct _COAUTHINFO {
+ DWORD dwAuthnSvc;
+ DWORD dwAuthzSvc;
+ LPWSTR pwszServerPrincName;
+ DWORD dwAuthnLevel;
+ DWORD dwImpersonationLevel;
+ COAUTHIDENTITY *pAuthIdentityData;
+ DWORD dwCapabilities;
+} COAUTHINFO;
+
+typedef enum tagMEMCTX {
+ MEMCTX_TASK = 1,
+ MEMCTX_SHARED = 2,
+ MEMCTX_MACSYSTEM = 3,
+ MEMCTX_UNKNOWN = -1,
+ MEMCTX_SAME = -2
+} MEMCTX;
+
+cpp_quote("#ifndef _ROT_COMPARE_MAX_DEFINED")
+cpp_quote("#define _ROT_COMPARE_MAX_DEFINED")
+cpp_quote("#define ROT_COMPARE_MAX 2048")
+cpp_quote("#endif")
+
+cpp_quote("#ifndef _ROTFLAGS_DEFINED")
+cpp_quote("#define _ROTFLAGS_DEFINED")
+cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1")
+cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2")
+cpp_quote("#endif")
+
+typedef enum tagCLSCTX {
+ CLSCTX_INPROC_SERVER = 0x1,
+ CLSCTX_INPROC_HANDLER = 0x2,
+ CLSCTX_LOCAL_SERVER = 0x4,
+ CLSCTX_INPROC_SERVER16 = 0x8,
+ CLSCTX_REMOTE_SERVER = 0x10,
+ CLSCTX_INPROC_HANDLER16 = 0x20,
+ CLSCTX_INPROC_SERVERX86 = 0x40,
+ CLSCTX_INPROC_HANDLERX86 = 0x80,
+ CLSCTX_ESERVER_HANDLER = 0x100,
+ CLSCTX_NO_CODE_DOWNLOAD = 0x400,
+ CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
+ CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
+ CLSCTX_NO_FAILURE_LOG = 0x4000,
+ CLSCTX_DISABLE_AAA = 0x8000,
+ CLSCTX_ENABLE_AAA = 0x10000,
+ CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
+} CLSCTX;
+
+cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)")
+cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
+cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)")
+
+typedef enum tagMSHLFLAGS {
+ MSHLFLAGS_NORMAL = 0,
+ MSHLFLAGS_TABLESTRONG = 1,
+ MSHLFLAGS_TABLEWEAK = 2,
+ MSHLFLAGS_NOPING = 4
+} MSHLFLAGS;
+
+typedef enum tagMSHCTX {
+ MSHCTX_LOCAL = 0,
+ MSHCTX_NOSHAREDMEM = 1,
+ MSHCTX_DIFFERENTMACHINE = 2,
+ MSHCTX_INPROC = 3,
+ MSHCTX_CROSSCTX = 4
+} MSHCTX;
+
+/******************** BLOB TYPES ********************/
+
+typedef struct _BYTE_BLOB {
+ unsigned long clSize;
+ [size_is(clSize)] byte abData[];
+} BYTE_BLOB;
+typedef [unique] BYTE_BLOB *UP_BYTE_BLOB;
+
+typedef struct _FLAGGED_BYTE_BLOB {
+ unsigned long fFlags;
+ unsigned long clSize;
+ [size_is(clSize)] byte abData[];
+} FLAGGED_BYTE_BLOB;
+typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB;
+
+typedef struct _FLAGGED_WORD_BLOB {
+ unsigned long fFlags;
+ unsigned long clSize;
+ [size_is(clSize)] unsigned short asData[];
+} FLAGGED_WORD_BLOB;
+typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB;
+
+typedef struct _BYTE_SIZEDARR {
+ unsigned long clSize;
+ [size_is(clSize)] byte *pData;
+} BYTE_SIZEDARR;
+
+typedef struct _SHORT_SIZEDARR {
+ unsigned long clSize;
+ [size_is(clSize)] unsigned short *pData;
+} WORD_SIZEDARR;
+
+typedef struct _LONG_SIZEDARR {
+ unsigned long clSize;
+ [size_is(clSize)] unsigned long *pData;
+} DWORD_SIZEDARR;
+
+typedef struct _HYPER_SIZEDARR {
+ unsigned long clSize;
+ [size_is(clSize)] hyper *pData;
+} HYPER_SIZEDARR;
+
+/******************** GDI TYPES ********************/
+
+const unsigned long WDT_INPROC_CALL = 0x48746457;
+const unsigned long WDT_REMOTE_CALL = 0x52746457;
+const unsigned long WDT_INPROC64_CALL = 0x50746457;
+
+typedef union _userCLIPFORMAT switch(long fContext) u {
+ case WDT_INPROC_CALL: DWORD dwValue;
+ case WDT_REMOTE_CALL: LPWSTR pwszName;
+} userCLIPFORMAT;
+
+typedef [unique] userCLIPFORMAT *wireCLIPFORMAT;
+typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT;
+
+typedef struct tagRemHGLOBAL {
+ long fNullHGlobal;
+ unsigned long cbData;
+ [size_is(cbData)] byte data[];
+} RemHGLOBAL;
+
+typedef union _userHGLOBAL switch(long fContext) u {
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote;
+ case WDT_INPROC64_CALL: __int64 hInproc64;
+} userHGLOBAL;
+
+typedef [unique] userHGLOBAL *wireHGLOBAL;
+
+typedef struct tagRemHMETAFILEPICT {
+ long mm;
+ long xExt;
+ long yExt;
+ unsigned long cbData;
+ [size_is(cbData)] byte data[];
+} RemHMETAFILEPICT;
+
+typedef union _userHMETAFILE switch(long fContext) u {
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
+ case WDT_INPROC64_CALL: __int64 hInproc64;
+} userHMETAFILE;
+
+typedef [unique] userHMETAFILE *wireHMETAFILE;
+
+typedef struct _remoteMETAFILEPICT {
+ long mm;
+ long xExt;
+ long yExt;
+ userHMETAFILE *hMF;
+} remoteMETAFILEPICT;
+
+typedef union _userHMETAFILEPICT switch(long fContext) u {
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote;
+ case WDT_INPROC64_CALL: __int64 hInproc64;
+} userHMETAFILEPICT;
+
+typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT;
+
+typedef struct tagRemHENHMETAFILE {
+ unsigned long cbData;
+ [size_is(cbData)] byte data[];
+} RemHENHMETAFILE;
+
+typedef union _userHENHMETAFILE switch(long fContext) u {
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: BYTE_BLOB *hRemote;
+ case WDT_INPROC64_CALL: __int64 hInproc64;
+} userHENHMETAFILE;
+
+typedef [unique] userHENHMETAFILE *wireHENHMETAFILE;
+
+typedef struct tagRemHBITMAP
+{
+ unsigned long cbData;
+ [size_is(cbData)] byte data[];
+} RemHBITMAP;
+
+typedef struct _userBITMAP {
+ LONG bmType;
+ LONG bmWidth;
+ LONG bmHeight;
+ LONG bmWidthBytes;
+ WORD bmPlanes;
+ WORD bmBitsPixel;
+ ULONG cbSize;
+ [size_is(cbSize)] byte pBuffer[];
+} userBITMAP;
+
+typedef union _userHBITMAP switch(long fContext) u {
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: userBITMAP *hRemote;
+ case WDT_INPROC64_CALL: __int64 hInproc64;
+} userHBITMAP;
+
+typedef [unique] userHBITMAP *wireHBITMAP;
+
+typedef struct tagRemHPALETTE {
+ unsigned long cbData;
+ [size_is(cbData)] byte data[];
+} RemHPALETTE;
+
+typedef struct tagrpcLOGPALETTE {
+ WORD palVersion;
+ WORD palNumEntries;
+ [size_is(palNumEntries)] PALETTEENTRY palPalEntry[];
+} rpcLOGPALETTE;
+
+typedef union _userHPALETTE switch(long fContext) u {
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote;
+ case WDT_INPROC64_CALL: __int64 hInproc64;
+} userHPALETTE;
+
+typedef [unique] userHPALETTE *wireHPALETTE;
+
+cpp_quote("#if 0")
+DECLARE_WIREM_HANDLE(HGLOBAL);
+typedef HGLOBAL HLOCAL;
+DECLARE_WIREM_HANDLE(HBITMAP);
+DECLARE_WIREM_HANDLE(HPALETTE);
+DECLARE_WIREM_HANDLE(HENHMETAFILE);
+DECLARE_WIREM_HANDLE(HMETAFILE);
+cpp_quote("#endif")
+DECLARE_WIREM_HANDLE(HMETAFILEPICT);
+
+typedef union _RemotableHandle switch (long fContext) u
+{
+ case WDT_INPROC_CALL: long hInproc;
+ case WDT_REMOTE_CALL: long hRemote;
+} RemotableHandle;
+
+typedef [unique] RemotableHandle *wireHACCEL;
+typedef [unique] RemotableHandle *wireHBRUSH;
+typedef [unique] RemotableHandle *wireHDC;
+typedef [unique] RemotableHandle *wireHFONT;
+typedef [unique] RemotableHandle *wireHICON;
+typedef [unique] RemotableHandle *wireHMENU;
+typedef [unique] RemotableHandle *wireHWND;
+
+cpp_quote("#if 0") /* for IDL only (C/C++ defs are in windef.h) */
+DECLARE_WIREM_HANDLE(HACCEL);
+DECLARE_WIREM_HANDLE(HBRUSH);
+DECLARE_WIREM_HANDLE(HDC);
+DECLARE_WIREM_HANDLE(HFONT);
+DECLARE_WIREM_HANDLE(HICON);
+DECLARE_WIREM_HANDLE(HMENU);
+DECLARE_WIREM_HANDLE(HWND);
+
+typedef HICON HCURSOR;
+
+typedef struct tagMSG
+{
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT pt;
+} MSG, *PMSG, *NPMSG, *LPMSG;
+
+cpp_quote("#endif")
+
+/******************** GUID TYPES ********************/
+
+cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */
+typedef GUID *REFGUID;
+typedef IID *REFIID;
+typedef CLSID *REFCLSID;
+typedef FMTID *REFFMTID;
+cpp_quote("#endif")
+
+/******************** MISC TYPES ********************/
+
+typedef enum tagDVASPECT {
+ DVASPECT_CONTENT = 1,
+ DVASPECT_THUMBNAIL = 2,
+ DVASPECT_ICON = 4,
+ DVASPECT_DOCPRINT = 8
+} DVASPECT;
+
+typedef enum tagSTGC {
+ STGC_DEFAULT = 0,
+ STGC_OVERWRITE = 1,
+ STGC_ONLYIFCURRENT = 2,
+ STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4,
+ STGC_CONSOLIDATE = 8
+} STGC;
+
+typedef enum tagSTGMOVE {
+ STGMOVE_MOVE = 0,
+ STGMOVE_COPY = 1,
+ STGMOVE_SHALLOWCOPY = 2
+} STGMOVE;
+
+typedef enum tagSTATFLAG {
+ STATFLAG_DEFAULT = 0,
+ STATFLAG_NONAME = 1,
+ STATFLAG_NOOPEN = 2
+} STATFLAG;
+
+/******************** OLE Automation ********************/
+
+cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */
+typedef double DATE;
+cpp_quote("#else")
+cpp_quote("typedef double DECLSPEC_ALIGN(8) DATE;")
+cpp_quote("#endif")
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagCY {
+ LONGLONG int64;
+} CY;
+cpp_quote("#else") /* C/C++ defs */
+cpp_quote("#ifndef _tagCY_DEFINED")
+cpp_quote("#define _tagCY_DEFINED")
+cpp_quote("typedef union tagCY {")
+cpp_quote(" struct {")
+cpp_quote("#ifdef WORDS_BIGENDIAN")
+cpp_quote(" LONG Hi;")
+cpp_quote(" ULONG Lo;")
+cpp_quote("#else")
+cpp_quote(" ULONG Lo;")
+cpp_quote(" LONG Hi;")
+cpp_quote("#endif")
+cpp_quote(" } DUMMYSTRUCTNAME;")
+cpp_quote(" LONGLONG int64;")
+cpp_quote("} CY;")
+cpp_quote("#endif")
+cpp_quote("#endif")
+
+typedef CY *LPCY;
+
+cpp_quote("#if 0") /* for IDL only */
+typedef struct tagDEC {
+ USHORT wReserved;
+ BYTE scale;
+ BYTE sign;
+ ULONG Hi32;
+ ULONGLONG Lo64;
+} DECIMAL;
+cpp_quote("#else") /* C/C++ defs */
+cpp_quote("typedef struct tagDEC {")
+cpp_quote(" USHORT wReserved;")
+cpp_quote(" union {")
+cpp_quote(" struct {")
+cpp_quote(" BYTE scale;")
+cpp_quote(" BYTE sign;")
+cpp_quote(" } DUMMYSTRUCTNAME;")
+cpp_quote(" USHORT signscale;")
+cpp_quote(" } DUMMYUNIONNAME;")
+cpp_quote(" ULONG Hi32;")
+cpp_quote(" union {")
+cpp_quote(" struct {")
+cpp_quote("#ifdef WORDS_BIGENDIAN")
+cpp_quote(" ULONG Mid32;")
+cpp_quote(" ULONG Lo32;")
+cpp_quote("#else")
+cpp_quote(" ULONG Lo32;")
+cpp_quote(" ULONG Mid32;")
+cpp_quote("#endif")
+cpp_quote(" } DUMMYSTRUCTNAME1;")
+cpp_quote(" ULONGLONG Lo64;")
+cpp_quote(" } DUMMYUNIONNAME1;")
+cpp_quote("} DECIMAL;")
+cpp_quote("#endif")
+cpp_quote("#define DECIMAL_NEG ((BYTE)0x80)")
+cpp_quote("#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)")
+
+typedef DECIMAL *LPDECIMAL;
+
+typedef [unique] FLAGGED_WORD_BLOB *wireBSTR;
+typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR;
+typedef BSTR *LPBSTR;
+
+typedef short VARIANT_BOOL;
+typedef VARIANT_BOOL _VARIANT_BOOL;
+cpp_quote("#define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF)")
+cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)")
+
+typedef struct tagBSTRBLOB {
+ ULONG cbSize;
+ [size_is(cbSize)] BYTE *pData;
+} BSTRBLOB, *LPBSTRBLOB;
+
+cpp_quote("#ifndef _tagBLOB_DEFINED")
+cpp_quote("#define _tagBLOB_DEFINED")
+cpp_quote("#define _BLOB_DEFINED")
+cpp_quote("#define _LPBLOB_DEFINED")
+typedef struct tagBLOB {
+ ULONG cbSize;
+ [size_is(cbSize)] BYTE *pBlobData;
+} BLOB, *LPBLOB;
+cpp_quote("#endif")
+
+typedef struct tagCLIPDATA {
+ ULONG cbSize;
+ long ulClipFmt;
+ [size_is(cbSize-sizeof(long))] BYTE *pClipData;
+} CLIPDATA;
+cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))")
+
+typedef ULONG PROPID;
+
+/******************** VARTYPE ********************/
+
+typedef unsigned short VARTYPE;
+enum VARENUM {
+ VT_EMPTY = 0,
+ VT_NULL = 1,
+ VT_I2 = 2,
+ VT_I4 = 3,
+ VT_R4 = 4,
+ VT_R8 = 5,
+ VT_CY = 6,
+ VT_DATE = 7,
+ VT_BSTR = 8,
+ VT_DISPATCH = 9,
+ VT_ERROR = 10,
+ VT_BOOL = 11,
+ VT_VARIANT = 12,
+ VT_UNKNOWN = 13,
+ VT_DECIMAL = 14,
+ VT_I1 = 16,
+ VT_UI1 = 17,
+ VT_UI2 = 18,
+ VT_UI4 = 19,
+ VT_I8 = 20,
+ VT_UI8 = 21,
+ VT_INT = 22,
+ VT_UINT = 23,
+ VT_VOID = 24,
+ VT_HRESULT = 25,
+ VT_PTR = 26,
+ VT_SAFEARRAY = 27,
+ VT_CARRAY = 28,
+ VT_USERDEFINED = 29,
+ VT_LPSTR = 30,
+ VT_LPWSTR = 31,
+ VT_RECORD = 36,
+ VT_INT_PTR = 37,
+ VT_UINT_PTR = 38,
+ VT_FILETIME = 64,
+ VT_BLOB = 65,
+ VT_STREAM = 66,
+ VT_STORAGE = 67,
+ VT_STREAMED_OBJECT = 68,
+ VT_STORED_OBJECT = 69,
+ VT_BLOB_OBJECT = 70,
+ VT_CF = 71,
+ VT_CLSID = 72,
+ VT_VERSIONED_STREAM= 73,
+ VT_BSTR_BLOB = 0x0fff,
+ VT_VECTOR = 0x1000,
+ VT_ARRAY = 0x2000,
+ VT_BYREF = 0x4000,
+ VT_RESERVED = 0x8000,
+ VT_ILLEGAL = 0xffff,
+ VT_ILLEGALMASKED = 0x0fff,
+ VT_TYPEMASK = 0x0fff
+};
+
+typedef struct tagCSPLATFORM
+{
+ DWORD dwPlatformId;
+ DWORD dwVersionHi;
+ DWORD dwVersionLo;
+ DWORD dwProcessorArch;
+} CSPLATFORM;
+
+typedef struct tagQUERYCONTEXT
+{
+ DWORD dwContext;
+ CSPLATFORM Platform;
+ LCID Locale;
+ DWORD dwVersionHi;
+ DWORD dwVersionLo;
+} QUERYCONTEXT;
+
+typedef [v1_enum] enum tagTYSPEC
+{
+ TYSPEC_CLSID,
+ TYSPEC_FILEEXT,
+ TYSPEC_MIMETYPE,
+ TYSPEC_PROGID,
+ TYSPEC_FILENAME,
+ TYSPEC_PACKAGENAME,
+ TYSPEC_OBJECTID
+} TYSPEC;
+
+typedef union switch(DWORD tyspec)
+{
+ case TYSPEC_CLSID:
+ CLSID clsid;
+ case TYSPEC_FILEEXT:
+ LPOLESTR pFileExt;
+ case TYSPEC_MIMETYPE:
+ LPOLESTR pMimeType;
+ case TYSPEC_PROGID:
+ LPOLESTR pProgId;
+ case TYSPEC_FILENAME:
+ LPOLESTR pFileName;
+ case TYSPEC_PACKAGENAME:
+ struct
+ {
+ LPOLESTR pPackageName;
+ GUID PolicyId;
+ } ByName;
+ case TYSPEC_OBJECTID:
+ struct
+ {
+ GUID ObjectId;
+ GUID PolicyId;
+ } ByObjectId;
+} uCLSSPEC;
+
+cpp_quote("#ifndef PROPERTYKEY_DEFINED")
+cpp_quote("#define PROPERTYKEY_DEFINED")
+typedef struct _tagpropertykey
+{
+ GUID fmtid;
+ DWORD pid;
+} PROPERTYKEY;
+cpp_quote("#endif /*PROPERTYKEY_DEFINED*/")
+
+} /* interface IWinTypes */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl
new file mode 100644
index 00000000..b023085b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/wuapi.idl
@@ -0,0 +1,1359 @@
+/*
+ * Copyright 2008 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "oaidl.idl";
+
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+[
+ helpstring("WUAPI 2.0 Type Library"),
+ uuid(b596cc9f-56e5-419e-a622-e01bb457431e),
+ version(2.0)
+]
+library WUApiLib {
+
+importlib("stdole2.tlb");
+
+interface ICategoryCollection;
+interface IStringCollection;
+interface IUpdateCollection;
+interface IUpdateDownloader;
+interface IUpdateInstaller;
+interface IUpdateSearcher;
+
+typedef [public] enum tagDownloadPriority
+{
+ dpLow = 1,
+ dpNormal = 2,
+ dpHigh = 3,
+} DownloadPriority;
+
+typedef [public] enum tagServerSelection
+{
+ ssDefault = 0,
+ ssManagedServer = 1,
+ ssWindowsUpdate = 2,
+ ssOthers = 3,
+} ServerSelection;
+
+typedef [public] enum tagAutomaticUpdatesNotificationLevel
+{
+ aunlNotConfigured,
+ aunlDisabled,
+ aunlNotifyBeforeDownload,
+ aunlNotifyBeforeInstallation,
+ aunlScheduledInstallation,
+} AutomaticUpdatesNotificationLevel;
+
+typedef [public] enum tagAutomaticUpdatesScheduledInstallationDay
+{
+ ausidEveryDay,
+ ausidEverySunday,
+ ausidEveryMonday,
+ ausidEveryTuesday,
+ ausidEveryWednesday,
+ ausidEveryThursday,
+ ausidEveryFriday,
+ ausidEverySaturday,
+} AutomaticUpdatesScheduledInstallationDay;
+
+typedef [public] enum tagDownloadPhase
+{
+ dphInitializing,
+ dphDownloading,
+ dphVerifying,
+} DownloadPhase;
+
+typedef [public] enum tagOperationResultCode
+{
+ orcNotStarted,
+ orcInProgress,
+ orcSucceeded,
+ orcSucceededWithErrors,
+ orcFailed,
+ orcAborted,
+} OperationResultCode;
+
+typedef [public] enum tagUpdateExceptionContext
+{
+ uecGeneral = 1,
+ uecWindowsDriver,
+ uecWindowsInstaller
+} UpdateExceptionContext;
+
+typedef [public] enum tagInstallationImpact
+{
+ iiNormal,
+ iiMinor,
+ iiRequiresExclusiveHandling
+} InstallationImpact;
+
+typedef [public] enum tagInstallationRebootBehavior
+{
+ irbNeverReboots,
+ irbAlwaysRequiresReboot,
+ irbCanRequestReboot
+} InstallationRebootBehavior;
+
+typedef [public] enum tagUpdateType
+{
+ utSoftware = 1,
+ utDriver
+} UpdateType;
+
+typedef [public] enum tagUpdateOperation
+{
+ uoInstallation = 1,
+ uoUninstallation
+} UpdateOperation;
+
+typedef [public] enum tagDeploymentAction
+{
+ daNone,
+ daInstallation,
+ daUninstallation,
+ daDetection
+} DeploymentAction;
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(2ee48f22-af3c-405f-8970-f71be12ee9a2),
+ pointer_default(unique)
+]
+interface IAutomaticUpdatesSettings : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT NotificationLevel( [out, retval] AutomaticUpdatesNotificationLevel *retval );
+
+ [propput, id(0x60020001)]
+ HRESULT NotificationLevel( [in] AutomaticUpdatesNotificationLevel value );
+
+ [propget, id(0x60020002)]
+ HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT Required( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT ScheduledInstallationDay( [out, retval] AutomaticUpdatesScheduledInstallationDay *retval );
+
+ [propput, id(0x60020004)]
+ HRESULT ScheduledInstallationDay( [in] AutomaticUpdatesScheduledInstallationDay value );
+
+ [propget, id(0x60020005)]
+ HRESULT ScheduledInstallationTime( [out, retval] LONG *retval );
+
+ [propput, id(0x60020005)]
+ HRESULT ScheduledInstallationTime( [in] LONG value );
+
+ [id(0x60020006)]
+ HRESULT Refresh();
+
+ [id(0x60020007)]
+ HRESULT Save();
+}
+
+[
+ object,
+ uuid(673425bf-c082-4c7c-bdfd-569464b8e0ce),
+ oleautomation,
+ dual,
+ nonextensible,
+ pointer_default(unique),
+ hidden
+]
+interface IAutomaticUpdates : IDispatch
+{
+ HRESULT DetectNow();
+ HRESULT Pause();
+ HRESULT Resume();
+ HRESULT ShowSettingsDialog();
+
+ [propget]
+ HRESULT Settings(
+ [out, retval] IAutomaticUpdatesSettings **retval);
+
+ [propget]
+ HRESULT ServiceEnabled(
+ [out, retval] VARIANT_BOOL *retval);
+
+ HRESULT EnableService();
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(174c81fe-aecd-4dae-b8a0-2c6318dd86a8),
+ pointer_default(unique),
+]
+interface IWebProxy : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT Address( [out, retval] BSTR *retval );
+
+ [propput, id(0x60020001)]
+ HRESULT Address( [in] BSTR value );
+
+ [propget, id(0x60020002)]
+ HRESULT BypassList( [out, retval] IStringCollection **retval );
+
+ [propput, id(0x60020002)]
+ HRESULT BypassList( [in] IStringCollection *value );
+
+ [propget, id(0x60020003)]
+ HRESULT BypassProxyOnLocal( [out, retval] VARIANT_BOOL *retval );
+
+ [propput, id(0x60020003)]
+ HRESULT BypassProxyOnLocal( [in] VARIANT_BOOL value );
+
+ [propget, id(0x60020004)]
+ HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020005)]
+ HRESULT UserName( [out, retval] BSTR *retval );
+
+ [propput, id(0x60020005)]
+ HRESULT UserName( [in] BSTR value );
+
+ [id(0x60020006)]
+ HRESULT SetPassword( [in] BSTR value );
+
+ [id(0x60020007)]
+ HRESULT PromptForCredentials( [in, unique] IUnknown *parentWindow,
+ [in] BSTR title );
+
+ [restricted, id(0x60020008)]
+ HRESULT PromptForCredentialsFromHwnd( [in, unique] HWND parentWindow,
+ [in] BSTR title );
+
+ [propget, id(0x60020009)]
+ HRESULT AutoDetect( [out, retval] VARIANT_BOOL *retval );
+
+ [propput, id(0x60020009)]
+ HRESULT AutoDetect( [in] VARIANT_BOOL value );
+}
+
+[
+ object,
+ uuid(816858a4-260d-4260-933a-2585f1abc76b),
+ oleautomation,
+ dual,
+ nonextensible,
+ pointer_default(unique),
+]
+interface IUpdateSession : IDispatch
+{
+ [propget]
+ HRESULT ClientApplicationID(
+ [out, retval] BSTR *retval);
+
+ [propput]
+ HRESULT ClientApplicationID(
+ [in] BSTR value);
+
+ [propget]
+ HRESULT ReadOnly(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propget]
+ HRESULT WebProxy(
+ [out, retval] IWebProxy **retval);
+
+ [propput]
+ HRESULT WebProxy(
+ [in, unique] IWebProxy *value);
+
+ HRESULT CreateUpdateSearcher(
+ [out, retval] IUpdateSearcher **retval);
+
+ HRESULT CreateUpdateDownloader(
+ [out, retval] IUpdateDownloader **retval);
+
+ HRESULT CreateUpdateInstaller(
+ [out, retval] IUpdateInstaller **retval);
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(7c907864-346c-4aeb-8f3f-57da289f969f),
+ pointer_default(unique),
+]
+interface IImageInformation : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT AltText( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT Height( [out, retval] LONG *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT Source( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT Width( [out, retval] LONG *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(81ddc1b8-9d35-47a6-b471-5b80f519223b),
+ pointer_default(unique),
+]
+interface ICategory : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Name( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020001)]
+ HRESULT CategoryID( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT Children( [out, retval] ICategoryCollection **retval );
+
+ [propget, id(0x60020003)]
+ HRESULT Description( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT Image( [out, retval] IImageInformation **retval );
+
+ [propget, id(0x60020005)]
+ HRESULT Order( [out, retval] LONG *retval );
+
+ [propget, id(0x60020006)]
+ HRESULT Parent( [out, retval] ICategory **retval );
+
+ [propget, id(0x60020007)]
+ HRESULT Type( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020008)]
+ HRESULT Updates( [out, retval] IUpdateCollection **retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(3a56bfb8-576c-43f7-9335-fe4838fd7e37),
+ pointer_default(unique),
+]
+interface ICategoryCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [out, retval] ICategory **retval );
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+ [propget, id(0x60020001)]
+ HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(eff90582-2ddc-480f-a06d-60f3fbc362c3),
+ pointer_default(unique),
+ hidden
+]
+interface IStringCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [out, retval] BSTR *retval );
+
+ [propput, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [in] BSTR value );
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+ [propget, id(0x60020001)]
+ HRESULT Count( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+ [id(0x60020003)]
+ HRESULT Add( [in] BSTR value,
+ [out, retval] LONG *retval );
+
+ [id(0x60020004)]
+ HRESULT Clear();
+
+ [id(0x60020005)]
+ HRESULT Copy( [out, retval] IStringCollection **retval );
+
+ [id(0x60020006)]
+ HRESULT Insert( [in] LONG index,
+ [in] BSTR value );
+
+ [id(0x60020007)]
+ HRESULT RemoveAt( [in] LONG index );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(a376dd5e-09d4-427f-af7c-fed5b6e1c1d6),
+ pointer_default(unique),
+]
+interface IUpdateException : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Message( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020001)]
+ HRESULT HResult( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT Context( [out, retval] UpdateExceptionContext *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(503626a3-8e14-4729-9355-0fe664bd2321),
+ pointer_default(unique),
+]
+interface IUpdateExceptionCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [out, retval] IUpdateException **retval );
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+ [propget, id(0x60020001)]
+ HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(46297823-9940-4c09-aed9-cd3ea6d05968),
+ pointer_default(unique)
+]
+interface IUpdateIdentity : IDispatch
+{
+ [propget, id(0x60020002)]
+ HRESULT RevisionNumber( [out, retval] LONG *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT UpdateID( [out, retval] BSTR *retval );
+}
+
+[
+ ,
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(d9a59339-e245-4dbd-9686-4d5763e39624),
+ pointer_default(unique),
+]
+interface IInstallationBehavior : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT CanRequestUserInput( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT Impact( [out, retval] InstallationImpact *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT RebootBehavior( [out, retval] InstallationRebootBehavior *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT RequiresNetworkConnectivity( [out, retval] VARIANT_BOOL *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(54a2cb2d-9a0c-48b6-8a50-9abb69ee2d02),
+ pointer_default(unique),
+]
+interface IUpdateDownloadContent : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT DownloadUrl( [out, retval] BSTR *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(bc5513c8-b3b8-4bf7-a4d4-361c0d8c88ba),
+ pointer_default(unique),
+]
+interface IUpdateDownloadContentCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [out, retval] IUpdateDownloadContent **retval );
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+ [propget, id(0x60020001)]
+ HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(6a92b07a-d821-4682-b423-5c805022cc4d),
+ pointer_default(unique),
+]
+interface IUpdate : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Title( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020001)]
+ HRESULT AutoSelectOnWebSites( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT BundledUpdates( [out, retval] IUpdateCollection **retval );
+
+ [propget, id(0x60020003)]
+ HRESULT CanRequireSource( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT Categories( [out, retval] ICategoryCollection **retval );
+
+ [propget, id(0x60020005)]
+ HRESULT Deadline( [out, retval] VARIANT *retval );
+
+ [propget, id(0x60020006)]
+ HRESULT DeltaCompressedContentAvailable( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020007)]
+ HRESULT DeltaCompressedContentPreferred( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020008)]
+ HRESULT Description( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020009)]
+ HRESULT EulaAccepted( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x6002000a)]
+ HRESULT EulaText( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002000b)]
+ HRESULT HandlerID( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002000c)]
+ HRESULT Identity( [out, retval] IUpdateIdentity **retval );
+
+ [propget, id(0x6002000d)]
+ HRESULT Image( [out, retval] IImageInformation **retval );
+
+ [propget, id(0x6002000e)]
+ HRESULT InstallationBehavior( [out, retval] IInstallationBehavior **retval );
+
+ [propget, id(0x6002000f)]
+ HRESULT IsBeta( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020010)]
+ HRESULT IsDownloaded( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020011)]
+ HRESULT IsHidden( [out, retval] VARIANT_BOOL *retval );
+
+ [propput, id(0x60020011)]
+ HRESULT IsHidden( [in] VARIANT_BOOL value );
+
+ [propget, id(0x60020012)]
+ HRESULT IsInstalled( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020013)]
+ HRESULT IsMandatory( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020014)]
+ HRESULT IsUninstallable( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020015)]
+ HRESULT Languages( [out, retval] IStringCollection **retval );
+
+ [propget, id(0x60020016)]
+ HRESULT LastDeploymentChangeTime( [out, retval] DATE *retval );
+
+ [propget, id(0x60020017)]
+ HRESULT MaxDownloadSize( [out, retval] DECIMAL *retval );
+
+ [propget, id(0x60020018)]
+ HRESULT MinDownloadSize( [out, retval] DECIMAL *retval );
+
+ [propget, id(0x60020019)]
+ HRESULT MoreInfoUrls( [out, retval] IStringCollection **retval );
+
+ [propget, id(0x6002001a)]
+ HRESULT MsrcSeverity( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002001b)]
+ HRESULT RecommendedCpuSpeed( [out, retval] LONG *retval );
+
+ [propget, id(0x6002001c)]
+ HRESULT RecommendedHardDiskSpace( [out, retval] LONG *retval );
+
+ [propget, id(0x6002001d)]
+ HRESULT RecommendedMemory( [out, retval] LONG *retval );
+
+ [propget, id(0x6002001e)]
+ HRESULT ReleaseNotes( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002001f)]
+ HRESULT SecurityBulletinIDs( [out, retval] IStringCollection **retval );
+
+ [propget, id(0x60020021)]
+ HRESULT SupersededUpdateIDs( [out, retval] IStringCollection **retval );
+
+ [propget, id(0x60020022)]
+ HRESULT SupportUrl( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020023)]
+ HRESULT Type( [out, retval] UpdateType *retval );
+
+ [propget, id(0x60020024)]
+ HRESULT UninstallationNotes( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020025)]
+ HRESULT UninstallationBehavior( [out, retval] IInstallationBehavior **retval );
+
+ [propget, id(0x60020026)]
+ HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );
+
+ [propget, id(0x60020028)]
+ HRESULT KBArticleIDs( [out, retval] IStringCollection **retval );
+
+ [id(0x60020027)]
+ HRESULT AcceptEula();
+
+ [propget, id(0x60020029)]
+ HRESULT DeploymentAction( [out, retval] DeploymentAction *retval );
+
+ [id(0x6002002a)]
+ HRESULT CopyFromCache( [in, ref] BSTR path,
+ [in] VARIANT_BOOL toExtractCabFiles );
+
+ [propget, id(0x6002002b)]
+ HRESULT DownloadPriority( [out, retval] DownloadPriority *retval );
+
+ [propget, id(0x6002002c)]
+ HRESULT DownloadContents( [out, retval] IUpdateDownloadContentCollection **retval );
+}
+
+[
+
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(07f7438c-7709-4ca5-b518-91279288134e),
+ pointer_default(unique),
+ hidden
+]
+interface IUpdateCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [out, retval] IUpdate **retval );
+
+ [propput, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [in] IUpdate *value );
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+ [propget, id(0x60020001)]
+ HRESULT Count( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT ReadOnly( [out, retval] VARIANT_BOOL *retval );
+
+ [id(0x60020003)]
+ HRESULT Add( [in] IUpdate *value,
+ [out, retval] LONG *retval );
+
+ [id(0x60020004)]
+ HRESULT Clear();
+
+ [id(0x60020005)]
+ HRESULT Copy( [out, retval] IUpdateCollection **retval );
+
+ [id(0x60020006)]
+ HRESULT Insert( [in] LONG index,
+ [in] IUpdate *value );
+
+ [id(0x60020007)]
+ HRESULT RemoveAt( [in] LONG index );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(7366ea16-7a1a-4ea2-b042-973d3e9cd99b),
+ pointer_default(unique),
+]
+interface ISearchJob : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+ [id(0x60020003)]
+ HRESULT CleanUp();
+
+ [id(0x60020004)]
+ HRESULT RequestAbort();
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(d40cff62-e08c-4498-941a-01e25f0fd33c),
+ pointer_default(unique),
+]
+interface ISearchResult : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT RootCategories( [out, retval] ICategoryCollection **retval );
+
+ [propget, id(0x60020003)]
+ HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+ [propget, id(0x60020004)]
+ HRESULT Warnings( [out, retval] IUpdateExceptionCollection **retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(be56a644-af0e-4e0e-a311-c1d8e695cbff),
+ pointer_default(unique),
+]
+interface IUpdateHistoryEntry : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT Operation( [out, retval] UpdateOperation *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT HResult( [out, retval] LONG *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT Date( [out, retval] DATE *retval );
+
+ [propget, id(0x60020005)]
+ HRESULT UpdateIdentity( [out, retval] IUpdateIdentity **retval );
+
+ [propget, id(0x60020006)]
+ HRESULT Title( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020007)]
+ HRESULT Description( [out, retval] BSTR *retval );
+
+ [propget, id(0x60020008)]
+ HRESULT UnmappedResultCode( [out, retval] LONG *retval );
+
+ [propget, id(0x60020009)]
+ HRESULT ClientApplicationID( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002000a)]
+ HRESULT ServerSelection( [out, retval] ServerSelection *retval );
+
+ [propget, id(0x6002000b)]
+ HRESULT ServiceID( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002000c)]
+ HRESULT UninstallationSteps( [out, retval] IStringCollection **retval );
+
+ [propget, id(0x6002000d)]
+ HRESULT UninstallationNotes( [out, retval] BSTR *retval );
+
+ [propget, id(0x6002000e)]
+ HRESULT SupportUrl( [out, retval] BSTR *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(a7f04f3c-a290-435b-aadf-a116c3357a5c),
+ pointer_default(unique),
+]
+interface IUpdateHistoryEntryCollection : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT Item( [in] LONG index,
+ [out, retval] IUpdateHistoryEntry **retval );
+
+ [propget, id(DISPID_NEWENUM)]
+ HRESULT _NewEnum( [out, retval] IUnknown **retval );
+
+ [propget, id(0x60020001)]
+ HRESULT Count( [out, retval] LONG *retval );
+}
+
+[
+ object,
+ uuid(8f45abf1-f9ae-4b95-a933-f0f66e5056ea),
+ oleautomation,
+ dual,
+ nonextensible,
+ pointer_default(unique),
+]
+interface IUpdateSearcher : IDispatch
+{
+ [propget]
+ HRESULT CanAutomaticallyUpgradeService(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propput]
+ HRESULT CanAutomaticallyUpgradeService(
+ [in] VARIANT_BOOL value);
+
+ [propget]
+ HRESULT ClientApplicationID(
+ [out, retval] BSTR *retval);
+
+ [propput]
+ HRESULT ClientApplicationID(
+ [in] BSTR value);
+
+ [propget]
+ HRESULT IncludePotentiallySupersededUpdates(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propput]
+ HRESULT IncludePotentiallySupersededUpdates(
+ [in] VARIANT_BOOL value);
+
+ [propget]
+ HRESULT ServerSelection(
+ [out, retval] ServerSelection *retval);
+
+ [propput]
+ HRESULT ServerSelection(
+ [in] ServerSelection value);
+
+ HRESULT BeginSearch(
+ [in] BSTR criteria,
+ [in] IUnknown *onCompleted,
+ [in] VARIANT state,
+ [out, retval] ISearchJob **retval);
+
+ HRESULT EndSearch(
+ [in] ISearchJob *searchJob,
+ [out, retval] ISearchResult **retval);
+
+ HRESULT EscapeString(
+ [in] BSTR unescaped,
+ [out, retval] BSTR *retval);
+
+ HRESULT QueryHistory(
+ [in] LONG startIndex,
+ [in] LONG count,
+ [out, retval] IUpdateHistoryEntryCollection **retval);
+
+ HRESULT Search(
+ [in] BSTR criteria,
+ [out, retval] ISearchResult **retval);
+
+ [propget]
+ HRESULT Online(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propput]
+ HRESULT Online(
+ [in] VARIANT_BOOL value);
+
+ HRESULT GetTotalHistoryCount(
+ [out, retval] LONG *retval);
+
+ [propget]
+ HRESULT ServiceID(
+ [out, retval] BSTR *retval);
+
+ [propput]
+ HRESULT ServiceID(
+ [in] BSTR value);
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(bf99af76-b575-42ad-8aa4-33cbb5477af1),
+ pointer_default(unique),
+]
+interface IUpdateDownloadResult : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT HResult( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(d31a5bac-f719-4178-9dbb-5e2cb47fd18a),
+ pointer_default(unique),
+]
+interface IDownloadProgress : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT CurrentUpdateBytesDownloaded( [out, retval] DECIMAL *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT CurrentUpdateBytesToDownload( [out, retval] DECIMAL *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );
+
+ [propget, id(0x60020004)]
+ HRESULT PercentComplete( [out, retval] LONG *retval );
+
+ [propget, id(0x60020005)]
+ HRESULT TotalBytesDownloaded( [out, retval] DECIMAL *retval );
+
+ [propget, id(0x60020006)]
+ HRESULT TotalBytesToDownload( [out, retval] DECIMAL *retval );
+
+ [id(0x60020007)]
+ HRESULT GetUpdateResult( [in] LONG updateIndex,
+ [out, retval] IUpdateDownloadResult **retval );
+
+
+ [propget, id(0x60020008)]
+ HRESULT CurrentUpdateDownloadPhase( [out, retval] DownloadPhase *retval );
+
+ [propget, id(0x60020009)]
+ HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(c574de85-7358-43f6-aae8-8697e62d8ba7),
+ pointer_default(unique),
+]
+interface IDownloadJob : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+ [id(0x60020004)]
+ HRESULT CleanUp();
+
+ [id(0x60020005)]
+ HRESULT GetProgress( [out, retval] IDownloadProgress **retval );
+
+ [id(0x60020006)]
+ HRESULT RequestAbort();
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(daa4fdd0-4727-4dbe-a1e7-745dca317144),
+ pointer_default(unique),
+]
+interface IDownloadResult : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT HResult( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+ [id(0x60020003)]
+ HRESULT GetUpdateResult( [in] LONG updateIndex,
+ [out, retval] IUpdateDownloadResult **retval );
+}
+
+[
+ object,
+ uuid(68f1c6f9-7ecc-4666-a464-247fe12496c3),
+ oleautomation,
+ dual,
+ nonextensible,
+ pointer_default(unique),
+ hidden
+]
+interface IUpdateDownloader : IDispatch
+{
+ [propget]
+ HRESULT ClientApplicationID(
+ [out, retval] BSTR *retval);
+
+ [propput]
+ HRESULT ClientApplicationID(
+ [in] BSTR value);
+
+ [propget]
+ HRESULT IsForced(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propput]
+ HRESULT IsForced(
+ [in] VARIANT_BOOL value);
+
+ [propget]
+ HRESULT Priority(
+ [out, retval] DownloadPriority *retval);
+
+ [propput]
+ HRESULT Priority(
+ [in] DownloadPriority value);
+
+ [propget]
+ HRESULT Updates(
+ [out, retval] IUpdateCollection **retval);
+
+ [propput]
+ HRESULT Updates(
+ [in] IUpdateCollection *value);
+
+ HRESULT BeginDownload(
+ [in] IUnknown *onProgressChanged,
+ [in] IUnknown *onCompleted,
+ [in] VARIANT state,
+ [out, retval] IDownloadJob **retval);
+
+ HRESULT Download(
+ [out, retval] IDownloadResult **retval);
+
+ HRESULT EndDownload(
+ [in] IDownloadJob *value,
+ [out, retval] IDownloadResult **retval);
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(d940f0f8-3cbb-4fd0-993f-471e7f2328ad),
+ pointer_default(unique),
+]
+interface IUpdateInstallationResult : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT HResult( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(345c8244-43a3-4e32-a368-65f073b76f36),
+ pointer_default(unique),
+]
+interface IInstallationProgress : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT CurrentUpdateIndex( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT CurrentUpdatePercentComplete( [out, retval] LONG *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT PercentComplete( [out, retval] LONG *retval );
+
+ [id(0x60020004)]
+ HRESULT GetUpdateResult( [in] LONG updateIndex,
+ [out, retval] IUpdateInstallationResult **retval );
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(5c209f0b-bad5-432a-9556-4699bed2638a),
+ pointer_default(unique),
+]
+interface IInstallationJob : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT AsyncState( [out, retval] VARIANT *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT IsCompleted( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT Updates( [out, retval] IUpdateCollection **retval );
+
+ [id(0x60020004)]
+ HRESULT CleanUp();
+
+ [id(0x60020005)]
+ HRESULT GetProgress( [out, retval] IInstallationProgress **retval );
+
+ [id(0x60020006)]
+ HRESULT RequestAbort();
+}
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(a43c56d6-7451-48d4-af96-b6cd2d0d9b7a),
+ pointer_default(unique),
+]
+interface IInstallationResult : IDispatch
+{
+ [propget, id(0x60020001)]
+ HRESULT HResult( [out, retval] LONG *retval );
+
+ [propget, id(0x60020002)]
+ HRESULT RebootRequired( [out, retval] VARIANT_BOOL *retval );
+
+ [propget, id(0x60020003)]
+ HRESULT ResultCode( [out, retval] OperationResultCode *retval );
+
+ [id(0x60020004)]
+ HRESULT GetUpdateResult( [in] LONG updateIndex,
+ [out, retval] IUpdateInstallationResult **retval );
+}
+
+[
+ object,
+ uuid(7b929c68-ccdc-4226-96b1-8724600b54c2),
+ oleautomation,
+ dual,
+ nonextensible,
+ pointer_default(unique),
+]
+interface IUpdateInstaller : IDispatch
+{
+ [propget]
+ HRESULT ClientApplicationID(
+ [out, retval] BSTR *retval);
+
+ [propput]
+ HRESULT ClientApplicationID(
+ [in] BSTR value);
+
+ [propget]
+ HRESULT IsForced(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propput]
+ HRESULT IsForced(
+ [in] VARIANT_BOOL value);
+
+ [propget, restricted]
+ HRESULT ParentHwnd(
+ [out, retval] HWND *retval);
+
+ [propput, restricted]
+ HRESULT ParentHwnd(
+ [in, unique] HWND value);
+
+ [propput]
+ HRESULT ParentWindow(
+ [in, unique] IUnknown *value);
+
+ [propget]
+ HRESULT ParentWindow(
+ [out, retval] IUnknown **retval);
+
+ [propget]
+ HRESULT Updates(
+ [out, retval] IUpdateCollection **retval);
+
+ [propput]
+ HRESULT Updates(
+ [in] IUpdateCollection *value);
+
+ HRESULT BeginInstall(
+ [in] IUnknown *onProgressChanged,
+ [in] IUnknown *onCompleted,
+ [in] VARIANT state,
+ [out, retval] IInstallationJob **retval);
+
+ HRESULT BeginUninstall(
+ [in] IUnknown *onProgressChanged,
+ [in] IUnknown *onCompleted,
+ [in] VARIANT state,
+ [out, retval] IInstallationJob **retval);
+
+ HRESULT EndInstall(
+ [in] IInstallationJob *value,
+ [out, retval] IInstallationResult **retval);
+
+ HRESULT EndUninstall(
+ [in] IInstallationJob *value,
+ [out, retval] IInstallationResult **retval);
+
+ HRESULT Install(
+ [out, retval] IInstallationResult **retval);
+
+ HRESULT RunWizard(
+ [in, defaultvalue("")] BSTR dialogTitle,
+ [out, retval] IInstallationResult **retval);
+
+ [propget]
+ HRESULT IsBusy(
+ [out, retval] VARIANT_BOOL *retval);
+
+ HRESULT Uninstall(
+ [out, retval] IInstallationResult **retval);
+
+ [propget]
+ HRESULT AllowSourcePrompts(
+ [out, retval] VARIANT_BOOL *retval);
+
+ [propput]
+ HRESULT AllowSourcePrompts(
+ [in] VARIANT_BOOL value);
+
+ [propget]
+ HRESULT RebootRequiredBeforeInstallation(
+ [out, retval] VARIANT_BOOL *retval);
+}
+
+[
+ object,
+ uuid(ADE87BF7-7B56-4275-8FAB-B9B0E591844B),
+ oleautomation,
+ hidden,
+ dual,
+ nonextensible,
+ pointer_default(unique),
+]
+interface ISystemInformation : IDispatch
+{
+ [propget]
+ HRESULT OemHardwareSupportLink(
+ [out, retval] BSTR *retval);
+
+ [propget]
+ HRESULT RebootRequired(
+ [out, retval] VARIANT_BOOL *retval);
+}
+
+[
+ helpstring("AutomaticUpdates Class"),
+ threading(both),
+ progid("Microsoft.Update.AutoUpdate.1"),
+ vi_progid("Microsoft.Update.AutoUpdate"),
+ uuid(bfe18e9c-6d87-4450-b37c-e02f0b373803)
+]
+coclass AutomaticUpdates { interface IAutomaticUpdates; }
+
+[
+ helpstring("UpdateSession Class"),
+ threading(both),
+ progid("Microsoft.Update.Session.1"),
+ vi_progid("Microsoft.Update.Session"),
+ uuid(4cb43d7f-7eee-4906-8698-60da1c38f2fe)
+]
+coclass UpdateSession { interface IUpdateSession; }
+
+[
+ helpstring("SystemInformation Class"),
+ threading(both),
+ progid("Microsoft.Update.SystemInfo.1"),
+ vi_progid("Microsoft.Update.SystemInfo"),
+ uuid(C01B9BA0-BEA7-41BA-B604-D0A36F469133)
+]
+coclass SystemInformation { interface ISystemInformation; }
+
+} /* WUApiLib */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h
new file mode 100644
index 00000000..4a363afe
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xcmc.h
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2004 Chris Morgan
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef _XCMC_H
+#define _XCMC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef char CMC_sint8;
+typedef short CMC_sint16;
+typedef LONG CMC_sint32;
+typedef unsigned short int CMC_uint16;
+typedef ULONG CMC_uint32;
+typedef void* CMC_buffer;
+typedef char* CMC_string;
+
+typedef CMC_uint16 CMC_boolean;
+typedef CMC_sint32 CMC_enum;
+typedef CMC_uint32 CMC_return_code;
+typedef CMC_uint32 CMC_flags;
+typedef CMC_string CMC_object_identifier;
+typedef CMC_uint32 CMC_session_id;
+typedef CMC_uint32 CMC_ui_id;
+
+#define CMC_FALSE ((CMC_boolean)0)
+#define CMC_TRUE ((CMC_boolean)1)
+
+#define CMC_SUCCESS ((CMC_return_code) 0)
+
+#define CMC_E_AMBIGUOUS_RECIPIENT ((CMC_return_code) 1)
+#define CMC_E_ATTACHMENT_NOT_FOUND ((CMC_return_code) 2)
+#define CMC_E_ATTACHMENT_OPEN_FAILURE ((CMC_return_code) 3)
+#define CMC_E_ATTACHMENT_READ_FAILURE ((CMC_return_code) 4)
+#define CMC_E_ATTACHMENT_WRITE_FAILURE ((CMC_return_code) 5)
+#define CMC_E_COUNTED_STRING_UNSUPPORTED ((CMC_return_code) 6)
+#define CMC_E_DISK_FULL ((CMC_return_code) 7)
+#define CMC_E_FAILURE ((CMC_return_code) 8)
+#define CMC_E_INSUFFICIENT_MEMORY ((CMC_return_code) 9)
+#define CMC_E_INVALID_CONFIGURATION ((CMC_return_code) 10)
+#define CMC_E_INVALID_ENUM ((CMC_return_code) 11)
+#define CMC_E_INVALID_FLAG ((CMC_return_code) 12)
+#define CMC_E_INVALID_MEMORY ((CMC_return_code) 13)
+#define CMC_E_INVALID_MESSAGE_PARAMETER ((CMC_return_code) 14)
+#define CMC_E_INVALID_MESSAGE_REFERENCE ((CMC_return_code) 15)
+#define CMC_E_INVALID_PARAMETER ((CMC_return_code) 16)
+#define CMC_E_INVALID_SESSION_ID ((CMC_return_code) 17)
+#define CMC_E_INVALID_UI_ID ((CMC_return_code) 18)
+#define CMC_E_LOGON_FAILURE ((CMC_return_code) 19)
+#define CMC_E_MESSAGE_IN_USE ((CMC_return_code) 20)
+#define CMC_E_NOT_SUPPORTED ((CMC_return_code) 21)
+#define CMC_E_PASSWORD_REQUIRED ((CMC_return_code) 22)
+#define CMC_E_RECIPIENT_NOT_FOUND ((CMC_return_code) 23)
+#define CMC_E_SERVICE_UNAVAILABLE ((CMC_return_code) 24)
+#define CMC_E_TEXT_TOO_LARGE ((CMC_return_code) 25)
+#define CMC_E_TOO_MANY_FILES ((CMC_return_code) 26)
+#define CMC_E_TOO_MANY_RECIPIENTS ((CMC_return_code) 27)
+#define CMC_E_UNABLE_TO_NOT_MARK_AS_READ ((CMC_return_code) 28)
+#define CMC_E_UNRECOGNIZED_MESSAGE_TYPE ((CMC_return_code) 29)
+#define CMC_E_UNSUPPORTED_ACTION ((CMC_return_code) 30)
+#define CMC_E_UNSUPPORTED_CHARACTER_SET ((CMC_return_code) 31)
+#define CMC_E_UNSUPPORTED_DATA_EXT ((CMC_return_code) 32)
+#define CMC_E_UNSUPPORTED_FLAG ((CMC_return_code) 33)
+#define CMC_E_UNSUPPORTED_FUNCTION_EXT ((CMC_return_code) 34)
+#define CMC_E_UNSUPPORTED_VERSION ((CMC_return_code) 35)
+#define CMC_E_USER_CANCEL ((CMC_return_code) 36)
+#define CMC_E_USER_NOT_LOGGED_ON ((CMC_return_code) 37)
+
+#define CMC_ERROR_DISPLAYED ((CMC_return_code) 0x00008000)
+#define CMC_ERROR_RSV_MASK ((CMC_return_code) 0x0000FFFF)
+#define CMC_ERROR_IMPL_MASK ((CMC_return_code) 0xFFFF0000)
+
+typedef struct {
+ CMC_uint32 length;
+ char string[1];
+} CMC_counted_string;
+
+typedef CMC_counted_string CMC_message_reference;
+
+typedef struct {
+ CMC_sint8 second;
+ CMC_sint8 minute;
+ CMC_sint8 hour;
+ CMC_sint8 day;
+ CMC_sint8 month;
+ CMC_sint8 year;
+ CMC_sint8 isdst;
+ CMC_sint8 unused1;
+ CMC_sint16 tmzone;
+ CMC_sint16 unused2;
+} CMC_time;
+
+#define CMC_NO_TIMEZONE ((CMC_sint16) 0x8000)
+
+
+typedef struct {
+ CMC_uint32 item_code;
+ CMC_uint32 item_data;
+ CMC_buffer item_reference;
+ CMC_flags extension_flags;
+} CMC_extension;
+
+#define CMC_EXT_REQUIRED ((CMC_flags) 0x00010000)
+#define CMC_EXT_OUTPUT ((CMC_flags) 0x00020000)
+#define CMC_EXT_LAST_ELEMENT ((CMC_flags) 0x80000000)
+#define CMC_EXT_RSV_FLAG_MASK ((CMC_flags) 0xFFFF0000)
+#define CMC_EXT_ITEM_FLAG_MASK ((CMC_flags) 0x0000FFFF)
+
+
+typedef struct CMC_attachment_s {
+ CMC_string attach_title;
+ CMC_object_identifier attach_type;
+ CMC_string attach_filename;
+ CMC_flags attach_flags;
+ CMC_extension *attach_extensions;
+} CMC_attachment;
+
+#define CMC_ATT_APP_OWNS_FILE ((CMC_flags) 1)
+#define CMC_ATT_LAST_ELEMENT ((CMC_flags) 0x80000000)
+
+#define CMC_ATT_OID_BINARY "? ? ? ? ? ?"
+#define CMC_ATT_OID_TEXT "? ? ? ? ? ?"
+
+
+typedef struct {
+ CMC_string name;
+ CMC_enum name_type;
+ CMC_string address;
+ CMC_enum role;
+ CMC_flags recip_flags;
+ CMC_extension *recip_extensions;
+} CMC_recipient;
+
+#define CMC_TYPE_UNKNOWN ((CMC_enum) 0)
+#define CMC_TYPE_INDIVIDUAL ((CMC_enum) 1)
+#define CMC_TYPE_GROUP ((CMC_enum) 2)
+
+#define CMC_ROLE_TO ((CMC_enum) 0)
+#define CMC_ROLE_CC ((CMC_enum) 1)
+#define CMC_ROLE_BCC ((CMC_enum) 2)
+#define CMC_ROLE_ORIGINATOR ((CMC_enum) 3)
+#define CMC_ROLE_AUTHORIZING_USER ((CMC_enum) 4)
+
+#define CMC_RECIP_IGNORE ((CMC_flags) 1)
+#define CMC_RECIP_LIST_TRUNCATED ((CMC_flags) 2)
+#define CMC_RECIP_LAST_ELEMENT ((CMC_flags) 0x80000000)
+
+
+typedef struct {
+ CMC_message_reference *message_reference;
+ CMC_string message_type;
+ CMC_string subject;
+ CMC_time time_sent;
+ CMC_string text_note;
+ CMC_recipient *recipients;
+ CMC_attachment *attachments;
+ CMC_flags message_flags;
+ CMC_extension *message_extensions;
+} CMC_message;
+
+#define CMC_MSG_READ ((CMC_flags) 1)
+#define CMC_MSG_TEXT_NOTE_AS_FILE ((CMC_flags) 2)
+#define CMC_MSG_UNSENT ((CMC_flags) 4)
+#define CMC_MSG_LAST_ELEMENT ((CMC_flags) 0x80000000)
+
+
+typedef struct {
+ CMC_message_reference *message_reference;
+ CMC_string message_type;
+ CMC_string subject;
+ CMC_time time_sent;
+ CMC_uint32 byte_length;
+ CMC_recipient *originator;
+ CMC_flags summary_flags;
+ CMC_extension *message_summary_extensions;
+} CMC_message_summary;
+
+#define CMC_SUM_READ ((CMC_flags) 1)
+#define CMC_SUM_UNSENT ((CMC_flags) 2)
+#define CMC_SUM_LAST_ELEMENT ((CMC_flags) 0x80000000)
+
+#define CMC_ERROR_UI_ALLOWED ((CMC_flags) 0x01000000)
+#define CMC_LOGON_UI_ALLOWED ((CMC_flags) 0x02000000)
+#define CMC_COUNTED_STRING_TYPE ((CMC_flags) 0x04000000)
+
+CMC_return_code WINAPI cmc_send(
+ CMC_session_id session,
+ CMC_message *message,
+ CMC_flags send_flags,
+ CMC_ui_id ui_id,
+ CMC_extension *send_extensions
+);
+
+#define CMC_SEND_UI_REQUESTED ((CMC_flags) 1)
+
+
+CMC_return_code WINAPI cmc_send_documents(
+ CMC_string recipient_addresses,
+ CMC_string subject,
+ CMC_string text_note,
+ CMC_flags send_doc_flags,
+ CMC_string file_paths,
+ CMC_string file_names,
+ CMC_string delimiter,
+ CMC_ui_id ui_id
+);
+
+#define CMC_FIRST_ATTACH_AS_TEXT_NOTE ((CMC_flags) 2)
+
+
+CMC_return_code WINAPI cmc_act_on(
+ CMC_session_id session,
+ CMC_message_reference *message_reference,
+ CMC_enum operation,
+ CMC_flags act_on_flags,
+ CMC_ui_id ui_id,
+ CMC_extension *act_on_extensions
+);
+
+#define CMC_ACT_ON_EXTENDED ((CMC_enum) 0)
+#define CMC_ACT_ON_DELETE ((CMC_enum) 1)
+
+
+CMC_return_code WINAPI cmc_list(
+ CMC_session_id session,
+ CMC_string message_type,
+ CMC_flags list_flags,
+ CMC_message_reference *seed,
+ CMC_uint32 *count,
+ CMC_ui_id ui_id,
+ CMC_message_summary **result,
+ CMC_extension *list_extensions
+);
+
+#define CMC_LIST_UNREAD_ONLY ((CMC_flags) 1)
+#define CMC_LIST_MSG_REFS_ONLY ((CMC_flags) 2)
+#define CMC_LIST_COUNT_ONLY ((CMC_flags) 4)
+
+#define CMC_LENGTH_UNKNOWN 0xFFFFFFFF
+
+
+CMC_return_code WINAPI cmc_read(
+ CMC_session_id session,
+ CMC_message_reference *message_reference,
+ CMC_flags read_flags,
+ CMC_message **message,
+ CMC_ui_id ui_id,
+ CMC_extension *read_extensions
+);
+
+#define CMC_DO_NOT_MARK_AS_READ ((CMC_flags) 1)
+#define CMC_MSG_AND_ATT_HDRS_ONLY ((CMC_flags) 2)
+#define CMC_READ_FIRST_UNREAD_MESSAGE ((CMC_flags) 4)
+
+
+CMC_return_code WINAPI cmc_look_up(
+ CMC_session_id session,
+ CMC_recipient *recipient_in,
+ CMC_flags look_up_flags,
+ CMC_ui_id ui_id,
+ CMC_uint32 *count,
+ CMC_recipient **recipient_out,
+ CMC_extension *look_up_extensions
+);
+
+#define CMC_LOOKUP_RESOLVE_PREFIX_SEARCH ((CMC_flags) 1)
+#define CMC_LOOKUP_RESOLVE_IDENTITY ((CMC_flags) 2)
+#define CMC_LOOKUP_RESOLVE_UI ((CMC_flags) 4)
+#define CMC_LOOKUP_DETAILS_UI ((CMC_flags) 8)
+#define CMC_LOOKUP_ADDRESSING_UI ((CMC_flags) 16)
+
+
+CMC_return_code WINAPI cmc_free( CMC_buffer memory );
+
+CMC_return_code WINAPI cmc_logoff(
+ CMC_session_id session,
+ CMC_ui_id ui_id,
+ CMC_flags logoff_flags,
+ CMC_extension *logoff_extensions
+);
+
+CMC_return_code WINAPI cmc_logon(
+ CMC_string service,
+ CMC_string user,
+ CMC_string password,
+ CMC_object_identifier character_set,
+ CMC_ui_id ui_id,
+ CMC_uint16 caller_cmc_version,
+ CMC_flags logon_flags,
+ CMC_session_id *session,
+ CMC_extension *logon_extensions
+);
+
+#define CMC_VERSION ((CMC_uint16) 100)
+
+CMC_return_code WINAPI cmc_query_configuration(
+ CMC_session_id session,
+ CMC_enum item,
+ CMC_buffer reference,
+ CMC_extension *config_extensions
+);
+
+#define CMC_CONFIG_CHARACTER_SET ((CMC_enum) 1)
+#define CMC_CONFIG_LINE_TERM ((CMC_enum) 2)
+#define CMC_CONFIG_DEFAULT_SERVICE ((CMC_enum) 3)
+#define CMC_CONFIG_DEFAULT_USER ((CMC_enum) 4)
+#define CMC_CONFIG_REQ_PASSWORD ((CMC_enum) 5)
+#define CMC_CONFIG_REQ_SERVICE ((CMC_enum) 6)
+#define CMC_CONFIG_REQ_USER ((CMC_enum) 7)
+#define CMC_CONFIG_UI_AVAIL ((CMC_enum) 8)
+#define CMC_CONFIG_SUP_NOMKMSGREAD ((CMC_enum) 9)
+#define CMC_CONFIG_SUP_COUNTED_STR ((CMC_enum) 10)
+#define CMC_CONFIG_VER_IMPLEM ((CMC_enum) 11)
+#define CMC_CONFIG_VER_SPEC ((CMC_enum) 12)
+
+#define CMC_LINE_TERM_CRLF ((CMC_enum) 0)
+#define CMC_LINE_TERM_CR ((CMC_enum) 1)
+#define CMC_LINE_TERM_LF ((CMC_enum) 2)
+
+#define CMC_REQUIRED_NO ((CMC_enum) 0)
+#define CMC_REQUIRED_YES ((CMC_enum) 1)
+#define CMC_REQUIRED_OPT ((CMC_enum) 2)
+
+#define CMC_CHAR_CP437 "1 2 840 113556 3 2 437"
+#define CMC_CHAR_CP850 "1 2 840 113556 3 2 85"
+#define CMC_CHAR_CP1252 "1 2 840 113556 3 2 1252"
+#define CMC_CHAR_ISTRING "1 2 840 113556 3 2 0"
+#define CMC_CHAR_UNICODE "1 2 840 113556 3 2 1"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _XCMC_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h
new file mode 100644
index 00000000..f2b064ba
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xinput.h
@@ -0,0 +1,248 @@
+/*
+ * The Wine project - Xinput Joystick Library
+ * Copyright 2008 Andrew Fenn
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_XINPUT_H
+#define __WINE_XINPUT_H
+
+#include <windef.h>
+
+/*
+ * Bitmasks for the joysticks buttons, determines what has
+ * been pressed on the joystick, these need to be mapped
+ * to whatever device you're using instead of an xbox 360
+ * joystick
+ */
+
+#define XINPUT_GAMEPAD_DPAD_UP 0x0001
+#define XINPUT_GAMEPAD_DPAD_DOWN 0x0002
+#define XINPUT_GAMEPAD_DPAD_LEFT 0x0004
+#define XINPUT_GAMEPAD_DPAD_RIGHT 0x0008
+#define XINPUT_GAMEPAD_START 0x0010
+#define XINPUT_GAMEPAD_BACK 0x0020
+#define XINPUT_GAMEPAD_LEFT_THUMB 0x0040
+#define XINPUT_GAMEPAD_RIGHT_THUMB 0x0080
+#define XINPUT_GAMEPAD_LEFT_SHOULDER 0x0100
+#define XINPUT_GAMEPAD_RIGHT_SHOULDER 0x0200
+#define XINPUT_GAMEPAD_A 0x1000
+#define XINPUT_GAMEPAD_B 0x2000
+#define XINPUT_GAMEPAD_X 0x4000
+#define XINPUT_GAMEPAD_Y 0x8000
+
+/*
+ * Defines the flags used to determine if the user is pushing
+ * down on a button, not holding a button, etc
+ */
+
+#define XINPUT_KEYSTROKE_KEYDOWN 0x0001
+#define XINPUT_KEYSTROKE_KEYUP 0x0002
+#define XINPUT_KEYSTROKE_REPEAT 0x0004
+
+/*
+ * Defines the codes which are returned by XInputGetKeystroke
+ */
+
+#define VK_PAD_A 0x5800
+#define VK_PAD_B 0x5801
+#define VK_PAD_X 0x5802
+#define VK_PAD_Y 0x5803
+#define VK_PAD_RSHOULDER 0x5804
+#define VK_PAD_LSHOULDER 0x5805
+#define VK_PAD_LTRIGGER 0x5806
+#define VK_PAD_RTRIGGER 0x5807
+#define VK_PAD_DPAD_UP 0x5810
+#define VK_PAD_DPAD_DOWN 0x5811
+#define VK_PAD_DPAD_LEFT 0x5812
+#define VK_PAD_DPAD_RIGHT 0x5813
+#define VK_PAD_START 0x5814
+#define VK_PAD_BACK 0x5815
+#define VK_PAD_LTHUMB_PRESS 0x5816
+#define VK_PAD_RTHUMB_PRESS 0x5817
+#define VK_PAD_LTHUMB_UP 0x5820
+#define VK_PAD_LTHUMB_DOWN 0x5821
+#define VK_PAD_LTHUMB_RIGHT 0x5822
+#define VK_PAD_LTHUMB_LEFT 0x5823
+#define VK_PAD_LTHUMB_UPLEFT 0x5824
+#define VK_PAD_LTHUMB_UPRIGHT 0x5825
+#define VK_PAD_LTHUMB_DOWNRIGHT 0x5826
+#define VK_PAD_LTHUMB_DOWNLEFT 0x5827
+#define VK_PAD_RTHUMB_UP 0x5830
+#define VK_PAD_RTHUMB_DOWN 0x5831
+#define VK_PAD_RTHUMB_RIGHT 0x5832
+#define VK_PAD_RTHUMB_LEFT 0x5833
+#define VK_PAD_RTHUMB_UPLEFT 0x5834
+#define VK_PAD_RTHUMB_UPRIGHT 0x5835
+#define VK_PAD_RTHUMB_DOWNRIGHT 0x5836
+#define VK_PAD_RTHUMB_DOWNLEFT 0x5837
+
+/*
+ * Deadzones are for analogue joystick controls on the joypad
+ * which determine when input should be assumed to be in the
+ * middle of the pad. This is a threshold to stop a joypad
+ * controlling the game when the player isn't touching the
+ * controls.
+ */
+
+#define XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE 7849
+#define XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE 8689
+#define XINPUT_GAMEPAD_TRIGGER_THRESHOLD 30
+
+
+/*
+ * Defines what type of abilities the type of joystick has
+ * DEVTYPE_GAMEPAD is available for all joysticks, however
+ * there may be more specific identifiers for other joysticks
+ * which are being used.
+ */
+
+#define XINPUT_DEVTYPE_GAMEPAD 0x01
+#define XINPUT_DEVSUBTYPE_GAMEPAD 0x01
+#define XINPUT_DEVSUBTYPE_WHEEL 0x02
+#define XINPUT_DEVSUBTYPE_ARCADE_STICK 0x03
+#define XINPUT_DEVSUBTYPE_FLIGHT_SICK 0x04
+#define XINPUT_DEVSUBTYPE_DANCE_PAD 0x05
+#define XINPUT_DEVSUBTYPE_GUITAR 0x06
+#define XINPUT_DEVSUBTYPE_DRUM_KIT 0x08
+
+/*
+ * These are used with the XInputGetCapabilities function to
+ * determine the abilities to the joystick which has been
+ * plugged in.
+ */
+
+#define XINPUT_CAPS_VOICE_SUPPORTED 0x0004
+#define XINPUT_FLAG_GAMEPAD 0x00000001
+
+/*
+ * Defines the status of the battery if one is used in the
+ * attached joystick. The first two define if the joystick
+ * supports a battery. Disconnected means that the joystick
+ * isn't connected. Wired shows that the joystick is a wired
+ * joystick.
+ */
+
+#define BATTERY_DEVTYPE_GAMEPAD 0x00
+#define BATTERY_DEVTYPE_HEADSET 0x01
+#define BATTERY_TYPE_DISCONNECTED 0x00
+#define BATTERY_TYPE_WIRED 0x01
+#define BATTERY_TYPE_ALKALINE 0x02
+#define BATTERY_TYPE_NIMH 0x03
+#define BATTERY_TYPE_UNKNOWN 0xFF
+#define BATTERY_LEVEL_EMPTY 0x00
+#define BATTERY_LEVEL_LOW 0x01
+#define BATTERY_LEVEL_MEDIUM 0x02
+#define BATTERY_LEVEL_FULL 0x03
+
+/*
+ * How many joysticks can be used with this library. Games that
+ * use the xinput library will not go over this number.
+ */
+
+#define XUSER_MAX_COUNT 4
+#define XUSER_INDEX_ANY 0x000000FF
+
+/*
+ * Defines the structure of an xbox 360 joystick.
+ */
+
+typedef struct _XINPUT_GAMEPAD {
+ WORD wButtons;
+ BYTE bLeftTrigger;
+ BYTE bRightTrigger;
+ SHORT sThumbLX;
+ SHORT sThumbLY;
+ SHORT sThumbRX;
+ SHORT sThumbRY;
+} XINPUT_GAMEPAD, *PXINPUT_GAMEPAD;
+
+typedef struct _XINPUT_STATE {
+ DWORD dwPacketNumber;
+ XINPUT_GAMEPAD Gamepad;
+} XINPUT_STATE, *PXINPUT_STATE;
+
+/*
+ * Defines the structure of how much vibration is set on both the
+ * right and left motors in a joystick. If you're not using a 360
+ * joystick you will have to map these to your device.
+ */
+
+typedef struct _XINPUT_VIBRATION {
+ WORD wLeftMotorSpeed;
+ WORD wRightMotorSpeed;
+} XINPUT_VIBRATION, *PXINPUT_VIBRATION;
+
+/*
+ * Defines the structure for what kind of abilities the joystick has
+ * such abilities are things such as if the joystick has the ability
+ * to send and receive audio, if the joystick is in fact a driving
+ * wheel or perhaps if the joystick is some kind of dance pad or
+ * guitar.
+ */
+
+typedef struct _XINPUT_CAPABILITIES {
+ BYTE Type;
+ BYTE SubType;
+ WORD Flags;
+ XINPUT_GAMEPAD Gamepad;
+ XINPUT_VIBRATION Vibration;
+} XINPUT_CAPABILITIES, *PXINPUT_CAPABILITIES;
+
+/*
+ * Defines the structure for a joystick input event which is
+ * retrieved using the function XInputGetKeystroke
+ */
+typedef struct _XINPUT_KEYSTROKE {
+ WORD VirtualKey;
+ WCHAR Unicode;
+ WORD Flags;
+ BYTE UserIndex;
+ BYTE HidCode;
+} XINPUT_KEYSTROKE, *PXINPUT_KEYSTROKE;
+
+typedef struct _XINPUT_BATTERY_INFORMATION
+{
+ BYTE BatteryType;
+ BYTE BatteryLevel;
+} XINPUT_BATTERY_INFORMATION, *PXINPUT_BATTERY_INFORMATION;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void WINAPI XInputEnable(BOOL);
+DWORD WINAPI XInputSetState(DWORD, XINPUT_VIBRATION*);
+DWORD WINAPI XInputGetState(DWORD, XINPUT_STATE*);
+DWORD WINAPI XInputGetKeystroke(DWORD, DWORD, PXINPUT_KEYSTROKE);
+DWORD WINAPI XInputGetCapabilities(DWORD, DWORD, XINPUT_CAPABILITIES*);
+DWORD WINAPI XInputGetDSoundAudioDeviceGuids(DWORD, GUID*, GUID*);
+DWORD WINAPI XInputGetBatteryInformation(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __WINE_XINPUT_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h
new file mode 100644
index 00000000..7db0769f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2010 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+/* xmldom.idl is included by msxml.idl so it doesn't need a stand-alone header */
+#include <msxml.h>
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl
new file mode 100644
index 00000000..90ad91c9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldom.idl
@@ -0,0 +1,847 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <xmldomdid.h>
+#include <idispids.h>
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+interface IXMLDOMImplementation;
+interface IXMLDOMNode;
+interface IXMLDOMDocumentFragment;
+interface IXMLDOMDocument;
+interface IXMLDOMNodeList;
+interface IXMLDOMNamedNodeMap;
+interface IXMLDOMCharacterData;
+interface IXMLDOMAttribute;
+interface IXMLDOMElement;
+interface IXMLDOMText;
+interface IXMLDOMComment;
+interface IXMLDOMProcessingInstruction;
+interface IXMLDOMCDATASection;
+interface IXMLDOMDocumentType;
+interface IXMLDOMNotation;
+interface IXMLDOMEntity;
+interface IXMLDOMEntityReference;
+interface IXMLDOMParseError;
+
+cpp_quote("#ifndef __MSXML_DOMNODETYPE_DEFINED")
+cpp_quote("#define __MSXML_DOMNODETYPE_DEFINED")
+typedef enum tagDOMNodeType {
+ NODE_INVALID,
+ NODE_ELEMENT,
+ NODE_ATTRIBUTE,
+ NODE_TEXT,
+ NODE_CDATA_SECTION,
+ NODE_ENTITY_REFERENCE,
+ NODE_ENTITY,
+ NODE_PROCESSING_INSTRUCTION,
+ NODE_COMMENT,
+ NODE_DOCUMENT,
+ NODE_DOCUMENT_TYPE,
+ NODE_DOCUMENT_FRAGMENT,
+ NODE_NOTATION
+} DOMNodeType;
+cpp_quote("#endif")
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+/*nonextensible,*/
+uuid(2933bf80-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNode : IDispatch
+{
+ [propget, id(DISPID_DOM_NODE_NODENAME)]
+ HRESULT nodeName( [out,retval] BSTR *name );
+
+ [propget, id(DISPID_DOM_NODE_NODEVALUE)]
+ HRESULT nodeValue( [out,retval] VARIANT *value );
+
+ [propput, id(DISPID_DOM_NODE_NODEVALUE)]
+ HRESULT nodeValue( [in] VARIANT value );
+
+ [propget, id(DISPID_DOM_NODE_NODETYPE)]
+ HRESULT nodeType( [out,retval] DOMNodeType *type );
+
+ [propget, id(DISPID_DOM_NODE_PARENTNODE)]
+ HRESULT parentNode( [out,retval] IXMLDOMNode **parent );
+
+ [propget, id(DISPID_DOM_NODE_CHILDNODES)]
+ HRESULT childNodes( [out,retval] IXMLDOMNodeList **childList );
+
+ [propget, id(DISPID_DOM_NODE_FIRSTCHILD)]
+ HRESULT firstChild( [out,retval] IXMLDOMNode **firstChild );
+
+ [propget, id(DISPID_DOM_NODE_LASTCHILD)]
+ HRESULT lastChild( [out,retval] IXMLDOMNode **lastChild );
+
+ [propget, id(DISPID_DOM_NODE_PREVIOUSSIBLING)]
+ HRESULT previousSibling( [out,retval] IXMLDOMNode **previousSibling );
+
+ [propget, id(DISPID_DOM_NODE_NEXTSIBLING)]
+ HRESULT nextSibling( [out,retval] IXMLDOMNode **nextSibling );
+
+ [propget, id(DISPID_DOM_NODE_ATTRIBUTES)]
+ HRESULT attributes( [out,retval] IXMLDOMNamedNodeMap **attributeMap );
+
+ [id(DISPID_DOM_NODE_INSERTBEFORE)]
+ HRESULT insertBefore( [in] IXMLDOMNode * newChild,
+ [in] VARIANT refChild,
+ [out,retval] IXMLDOMNode **outNewChild );
+
+ [id(DISPID_DOM_NODE_REPLACECHILD)]
+ HRESULT replaceChild( [in] IXMLDOMNode *newChild,
+ [in] IXMLDOMNode *oldChild,
+ [out,retval] IXMLDOMNode **outOldChild );
+
+ [id(DISPID_DOM_NODE_REMOVECHILD)]
+ HRESULT removeChild( [in] IXMLDOMNode *childNode,
+ [out,retval] IXMLDOMNode **oldChild );
+
+ [id(DISPID_DOM_NODE_APPENDCHILD)]
+ HRESULT appendChild( [in] IXMLDOMNode *newChild,
+ [out,retval] IXMLDOMNode **outNewChild );
+
+ [id(DISPID_DOM_NODE_HASCHILDNODES)]
+ HRESULT hasChildNodes( [out,retval] VARIANT_BOOL *hasChild );
+
+ [propget, id(DISPID_DOM_NODE_OWNERDOC)]
+ HRESULT ownerDocument( [out,retval] IXMLDOMDocument **DOMDocument );
+
+ [id(DISPID_DOM_NODE_CLONENODE)]
+ HRESULT cloneNode( [in] VARIANT_BOOL deep,
+ [out,retval] IXMLDOMNode **cloneRoot );
+
+ [propget, id(DISPID_XMLDOM_NODE_STRINGTYPE)]
+ HRESULT nodeTypeString( [out,retval] BSTR *nodeType );
+
+ [propget, id(DISPID_XMLDOM_NODE_TEXT)]
+ HRESULT text( [out,retval] BSTR *text );
+
+ [propput, id(DISPID_XMLDOM_NODE_TEXT)]
+ HRESULT text( [in] BSTR text );
+
+ [propget, id(DISPID_XMLDOM_NODE_SPECIFIED)]
+ HRESULT specified( [out,retval] VARIANT_BOOL *isSpecified );
+
+ [propget, id(DISPID_XMLDOM_NODE_DEFINITION)]
+ HRESULT definition( [out,retval] IXMLDOMNode **definitionNode );
+
+ [propget, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+ HRESULT nodeTypedValue( [out,retval] VARIANT *typedValue );
+
+ [propput, id(DISPID_XMLDOM_NODE_NODETYPEDVALUE)]
+ HRESULT nodeTypedValue( [in] VARIANT typedValue );
+
+ [propget, id(DISPID_XMLDOM_NODE_DATATYPE)]
+ HRESULT dataType( [out,retval] VARIANT *dataTypeName );
+
+ [propput, id(DISPID_XMLDOM_NODE_DATATYPE)]
+ HRESULT dataType( [in] BSTR dataTypeName );
+
+ [propget, id(DISPID_XMLDOM_NODE_XML)]
+ HRESULT xml( [out,retval] BSTR *xmlString );
+
+ [id(DISPID_XMLDOM_NODE_TRANSFORMNODE)]
+ HRESULT transformNode( [in] IXMLDOMNode *styleSheet,
+ [out,retval] BSTR *xmlString );
+
+ [id(DISPID_XMLDOM_NODE_SELECTNODES)]
+ HRESULT selectNodes( [in] BSTR queryString,
+ [out,retval] IXMLDOMNodeList **resultList );
+
+ [id(DISPID_XMLDOM_NODE_SELECTSINGLENODE)]
+ HRESULT selectSingleNode( [in] BSTR queryString,
+ [out,retval] IXMLDOMNode **resultNode );
+
+ [propget, id(DISPID_XMLDOM_NODE_PARSED)]
+ HRESULT parsed( [out,retval] VARIANT_BOOL *isParsed );
+
+ [propget, id(DISPID_XMLDOM_NODE_NAMESPACE)]
+ HRESULT namespaceURI( [out,retval] BSTR *namespaceURI );
+
+ [propget, id(DISPID_XMLDOM_NODE_PREFIX)]
+ HRESULT prefix( [out,retval] BSTR *prefixString );
+
+ [propget, id(DISPID_XMLDOM_NODE_BASENAME)]
+ HRESULT baseName( [out,retval] BSTR *nameString );
+
+ [id(DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT)]
+ HRESULT transformNodeToObject( [in] IXMLDOMNode *stylesheet,
+ [in] VARIANT outputObject );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf81-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMDocument : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DOCUMENT_DOCTYPE)]
+ HRESULT doctype( [out,retval] IXMLDOMDocumentType **documentType );
+
+ [propget, id(DISPID_DOM_DOCUMENT_IMPLEMENTATION)]
+ HRESULT implementation( [out,retval] IXMLDOMImplementation **impl );
+
+ [propget, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+ HRESULT documentElement( [out,retval] IXMLDOMElement **DOMElement );
+
+ [propputref, id(DISPID_DOM_DOCUMENT_DOCUMENTELEMENT)]
+ HRESULT documentElement( [in] IXMLDOMElement *DOMElement );
+
+ [id(DISPID_DOM_DOCUMENT_CREATEELEMENT)]
+ HRESULT createElement( [in] BSTR tagname,
+ [out,retval] IXMLDOMElement **element );
+
+ [id(DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT)]
+ HRESULT createDocumentFragment( [out,retval] IXMLDOMDocumentFragment **docFrag );
+
+ [id(DISPID_DOM_DOCUMENT_CREATETEXTNODE)]
+ HRESULT createTextNode( [in] BSTR data,
+ [out,retval] IXMLDOMText **text );
+
+ [id(DISPID_DOM_DOCUMENT_CREATECOMMENT)]
+ HRESULT createComment( [in] BSTR data,
+ [out,retval] IXMLDOMComment **comment );
+
+ [id(DISPID_DOM_DOCUMENT_CREATECDATASECTION)]
+ HRESULT createCDATASection( [in] BSTR data,
+ [out,retval] IXMLDOMCDATASection **cdata );
+
+ [id(DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION)]
+ HRESULT createProcessingInstruction( [in] BSTR target,
+ [in] BSTR data,
+ [out,retval] IXMLDOMProcessingInstruction **pi );
+
+ [id(DISPID_DOM_DOCUMENT_CREATEATTRIBUTE)]
+ HRESULT createAttribute( [in] BSTR name,
+ [out,retval] IXMLDOMAttribute **attribute );
+
+ [id(DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE)]
+ HRESULT createEntityReference( [in] BSTR name,
+ [out,retval] IXMLDOMEntityReference **entityRef );
+
+ [id(DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName( [in] BSTR tagName,
+ [out,retval] IXMLDOMNodeList **resultList );
+
+ [id(DISPID_XMLDOM_DOCUMENT_CREATENODE)]
+ HRESULT createNode( [in] VARIANT Type,
+ [in] BSTR name,
+ [in] BSTR namespaceURI,
+ [out,retval] IXMLDOMNode **node );
+
+ [id(DISPID_XMLDOM_DOCUMENT_NODEFROMID)]
+ HRESULT nodeFromID( [in] BSTR idString,
+ [out,retval] IXMLDOMNode **node );
+
+ [id(DISPID_XMLDOM_DOCUMENT_LOAD)]
+ HRESULT load( [in] VARIANT xmlSource,
+ [out,retval] VARIANT_BOOL *isSuccessful );
+
+ [propget, id(DISPID_READYSTATE)]
+ HRESULT readyState( [out,retval] LONG *value );
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_PARSEERROR)]
+ HRESULT parseError( [out,retval] IXMLDOMParseError **errorObj );
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_URL)]
+ HRESULT url( [out,retval] BSTR *urlString );
+
+ /* FIXME: these is meant to be async, but widl parses that as a keyword */
+ [propget, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+ HRESULT async( [out,retval] VARIANT_BOOL *isAsync );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ASYNC)]
+ HRESULT async( [in] VARIANT_BOOL isAsync );
+
+ [id(DISPID_XMLDOM_DOCUMENT_ABORT)]
+ HRESULT abort();
+
+ [id(DISPID_XMLDOM_DOCUMENT_LOADXML)]
+ HRESULT loadXML( [in] BSTR bstrXML,
+ [out,retval] VARIANT_BOOL *isSuccessful );
+
+ [id(DISPID_XMLDOM_DOCUMENT_SAVE)]
+ HRESULT save( [in] VARIANT destination );
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+ HRESULT validateOnParse( [out,retval] VARIANT_BOOL *isValidating );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_VALIDATE)]
+ HRESULT validateOnParse( [in] VARIANT_BOOL isValidating );
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+ HRESULT resolveExternals( [out,retval] VARIANT_BOOL *isResolving );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE)]
+ HRESULT resolveExternals( [in] VARIANT_BOOL isValidating );
+
+ [propget, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+ HRESULT preserveWhiteSpace( [out,retval] VARIANT_BOOL *isPreserving );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE)]
+ HRESULT preserveWhiteSpace( [in] VARIANT_BOOL isPreserving );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange( [in] VARIANT readystatechangeSink );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable( [in] VARIANT ondataavailableSink );
+
+ [propput, id(DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE)]
+ HRESULT ontransformnode( [in] VARIANT ontransformnodeSink );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf82-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNodeList : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT item( [in] LONG index,
+ [out,retval] IXMLDOMNode **listItem );
+
+ [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+ HRESULT length( [out,retval] LONG *listLength );
+
+ [id(DISPID_XMLDOM_NODELIST_NEXTNODE)]
+ HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem );
+
+ [id(DISPID_XMLDOM_NODELIST_RESET)]
+ HRESULT reset();
+
+ [id(DISPID_NEWENUM)]
+ HRESULT _newEnum( [out,retval] IUnknown **ppUnk );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf83-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNamedNodeMap : IDispatch
+{
+ [id(DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM)]
+ HRESULT getNamedItem( [in] BSTR name,
+ [out,retval] IXMLDOMNode **namedItem );
+
+ [id(DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM)]
+ HRESULT setNamedItem( [in] IXMLDOMNode *newItem,
+ [out,retval] IXMLDOMNode **namedItem );
+
+ [id(DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM)]
+ HRESULT removeNamedItem( [in] BSTR name,
+ [out,retval] IXMLDOMNode **namedItem );
+
+ [propget, id(DISPID_VALUE)]
+ HRESULT item( [in] LONG index,
+ [out,retval] IXMLDOMNode **listItem );
+
+ [propget, id(DISPID_DOM_NODELIST_LENGTH)]
+ HRESULT length( [out,retval] LONG *listLength );
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM)]
+ HRESULT getQualifiedItem( [in] BSTR baseName,
+ [in] BSTR namespaceURI,
+ [out,retval] IXMLDOMNode **qualifiedItem );
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM)]
+ HRESULT removeQualifiedItem( [in] BSTR baseName,
+ [in] BSTR namespaceURI,
+ [out,retval] IXMLDOMNode **qualifiedItem );
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE)]
+ HRESULT nextNode( [out,retval] IXMLDOMNode **nextItem );
+
+ [id(DISPID_XMLDOM_NAMEDNODEMAP_RESET)]
+ HRESULT reset();
+
+ [id(DISPID_NEWENUM)]
+ HRESULT _newEnum( [out,retval] IUnknown **ppUnk );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(3efaa413-272f-11d2-836f-0000f87a7782),
+pointer_default(unique)
+]
+interface IXMLDOMDocumentFragment : IXMLDOMNode
+{
+ /* empty */
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf84-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMCharacterData : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DATA_DATA)]
+ HRESULT data( [out,retval] BSTR *data );
+
+ [propput, id(DISPID_DOM_DATA_DATA)]
+ HRESULT data( [in] BSTR data );
+
+ [propget, id(DISPID_DOM_DATA_LENGTH)]
+ HRESULT length( [out,retval] LONG *dataLength );
+
+ [id(DISPID_DOM_DATA_SUBSTRING)]
+ HRESULT substringData( [in] LONG offset,
+ [in] LONG count,
+ [out,retval] BSTR *data );
+
+ [id(DISPID_DOM_DATA_APPEND)]
+ HRESULT appendData( [in] BSTR data );
+
+ [id(DISPID_DOM_DATA_INSERT)]
+ HRESULT insertData( [in] LONG offset,
+ [in] BSTR data );
+
+ [id(DISPID_DOM_DATA_DELETE)]
+ HRESULT deleteData( [in] LONG offset,
+ [in] LONG count );
+
+ [id(DISPID_DOM_DATA_REPLACE)]
+ HRESULT replaceData( [in] LONG offset,
+ [in] LONG count,
+ [in] BSTR data );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf85-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMAttribute : IXMLDOMNode
+{
+ [propget,id(DISPID_DOM_ATTRIBUTE_GETNAME)]
+ HRESULT name( [out,retval] BSTR *attributeName );
+
+ [propget,id(DISPID_DOM_ATTRIBUTE_VALUE)]
+ HRESULT value( [out,retval] VARIANT *attributeValue );
+
+ [propput,id(DISPID_DOM_ATTRIBUTE_VALUE)]
+ HRESULT value( [in] VARIANT attributeValue );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf86-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMElement : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ELEMENT_GETTAGNAME)]
+ HRESULT tagName( [out,retval] BSTR *tagName );
+
+ [id(DISPID_DOM_ELEMENT_GETATTRIBUTE)]
+ HRESULT getAttribute( [in] BSTR name,
+ [out,retval] VARIANT * value );
+
+ [id(DISPID_DOM_ELEMENT_SETATTRIBUTE)]
+ HRESULT setAttribute( [in] BSTR name,
+ [in] VARIANT value );
+
+ [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTE)]
+ HRESULT removeAttribute( [in] BSTR name );
+
+ [id(DISPID_DOM_ELEMENT_GETATTRIBUTENODE)]
+ HRESULT getAttributeNode( [in] BSTR name,
+ [out, retval] IXMLDOMAttribute ** attributeNode );
+
+ [id(DISPID_DOM_ELEMENT_SETATTRIBUTENODE)]
+ HRESULT setAttributeNode( [in] IXMLDOMAttribute *DOMAttribute,
+ [out, retval] IXMLDOMAttribute ** attributeNode );
+
+ [id(DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE)]
+ HRESULT removeAttributeNode( [in] IXMLDOMAttribute *DOMAttribute,
+ [out, retval] IXMLDOMAttribute ** attributeNode );
+
+ [id(DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME)]
+ HRESULT getElementsByTagName( [in] BSTR tagName,
+ [out, retval] IXMLDOMNodeList ** resultList );
+
+ [id(DISPID_DOM_ELEMENT_NORMALIZE)]
+ HRESULT normalize();
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf87-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMText : IXMLDOMCharacterData
+{
+ [id(DISPID_DOM_TEXT_SPLITTEXT)]
+ HRESULT splitText( [in] LONG offset,
+ [out,retval] IXMLDOMText **rightHandTextNode );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf88-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMComment : IXMLDOMCharacterData
+{
+ /* empty */
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf89-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMProcessingInstruction : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_PI_TARGET)]
+ HRESULT target( [out, retval] BSTR *name );
+
+ [propget, id(DISPID_DOM_PI_DATA)]
+ HRESULT data( [out, retval] BSTR *value );
+
+ [propput, id(DISPID_DOM_PI_DATA)]
+ HRESULT data( [in] BSTR value );
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf8a-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMCDATASection : IXMLDOMText
+{
+ /* empty */
+}
+
+[
+local,
+object,
+odl,
+dual,
+/*nonextensible,*/
+oleautomation,
+uuid(2933bf8b-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMDocumentType : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_NAME)]
+ HRESULT name( [out,retval] BSTR *rootName );
+
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_ENTITIES)]
+ HRESULT entities( [out,retval] IXMLDOMNamedNodeMap **entityMap );
+
+ [propget, id(DISPID_DOM_DOCUMENTTYPE_NOTATIONS)]
+ HRESULT notations( [out,retval] IXMLDOMNamedNodeMap **notationMap );
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8c-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMNotation : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_NOTATION_PUBLICID)]
+ HRESULT publicId([out, retval] VARIANT *publicId);
+
+ [propget, id(DISPID_DOM_NOTATION_SYSTEMID)]
+ HRESULT systemId([out, retval] VARIANT *systemId);
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8d-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMEntity : IXMLDOMNode
+{
+ [propget, id(DISPID_DOM_ENTITY_PUBLICID)]
+ HRESULT publicId([out, retval] VARIANT *publicId);
+
+ [propget, id(DISPID_DOM_ENTITY_SYSTEMID)]
+ HRESULT systemId([out, retval] VARIANT *systemId);
+
+ [propget, id(DISPID_DOM_ENTITY_NOTATIONNAME)]
+ HRESULT notationName([out, retval] BSTR *name);
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8e-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMEntityReference : IXMLDOMNode
+{
+}
+
+[
+local,
+object,
+odl,
+dual,
+nonextensible,
+oleautomation,
+uuid(2933bf8f-7b36-11d2-b20e-00c04f983e60),
+pointer_default(unique)
+]
+interface IXMLDOMImplementation : IDispatch
+{
+ [id(DISPID_DOM_IMPLEMENTATION_HASFEATURE)]
+ HRESULT hasFeature([in] BSTR feature, [in] BSTR version, [out, retval] VARIANT_BOOL *pbool);
+}
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+/*nonextensible,*/
+helpstring("structure for reporting parse errors"),
+pointer_default(unique),
+uuid (3efaa426-272f-11d2-836f-0000f87a7782)
+]
+interface IXMLDOMParseError : IDispatch
+{
+ [propget, id(DISPID_VALUE)]
+ HRESULT errorCode([retval, out] LONG *errCode);
+
+ [propget, id(DISPID_DOM_ERROR_URL)]
+ HRESULT url([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_REASON)]
+ HRESULT reason([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_SRCTEXT)]
+ HRESULT srcText([retval, out] BSTR *p);
+
+ [propget, id(DISPID_DOM_ERROR_LINE)]
+ HRESULT line([retval, out] LONG *lineNo);
+
+ [propget, id(DISPID_DOM_ERROR_LINEPOS)]
+ HRESULT linepos([retval, out] LONG * linePos);
+
+ [propget, id(DISPID_DOM_ERROR_FILEPOS)]
+ HRESULT filepos([retval, out] LONG * filePos);
+}
+
+[
+ hidden,
+ uuid(3efaa427-272f-11d2-836f-0000f87a7782)
+]
+dispinterface XMLDOMDocumentEvents
+{
+ properties:
+ methods:
+ [id(DISPID_XMLDOMEVENT_ONDATAAVAILABLE)]
+ HRESULT ondataavailable();
+
+ [id(DISPID_XMLDOMEVENT_ONREADYSTATECHANGE)]
+ HRESULT onreadystatechange();
+}
+
+[
+ helpstring("XML DOM Document"),
+ progid("Microsoft.XMLDOM.1.0"),
+ vi_progid("Microsoft.XMLDOM"),
+ threading(both),
+ version(1.0),
+ uuid(2933bf90-7b36-11d2-b20e-00c04f983e60)
+]
+coclass DOMDocument
+{
+ [default] interface IXMLDOMDocument;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+ helpstring("Free Threaded XML DOM Document"),
+ progid("Microsoft.FreeThreadedXMLDOM.1.0"),
+ vi_progid("Microsoft.FreeThreadedXMLDOM"),
+ threading(both),
+ version(1.0),
+ uuid(2933bf91-7b36-11d2-b20e-00c04f983e60)
+]
+coclass DOMFreeThreadedDocument
+{
+ [default] interface IXMLDOMDocument;
+ [default, source] dispinterface XMLDOMDocumentEvents;
+}
+
+[
+object,
+uuid(ed8c108d-4349-11d2-91a4-00c04f7969e8),
+odl,
+dual,
+oleautomation,
+pointer_default(unique)
+]
+interface IXMLHttpRequest : IDispatch
+{
+ [id(1)]
+ HRESULT open([in] BSTR bstrMethod, [in] BSTR bstrUrl,
+ [in, optional] VARIANT varAsync,
+ [in, optional] VARIANT varUser,
+ [in, optional] VARIANT varPassword);
+ [id(2)]
+ HRESULT setRequestHeader([in] BSTR bstrHeader, [in] BSTR bstrValue);
+
+ [id(3)]
+ HRESULT getResponseHeader([in] BSTR bstrHeader, [out, retval] BSTR *pbstrValue);
+
+ [id(4)]
+ HRESULT getAllResponseHeaders([out, retval] BSTR *pbstrHeaders);
+
+ [id(5)]
+ HRESULT send([in, optional] VARIANT varBody);
+
+ [id(6)]
+ HRESULT abort();
+
+ [propget, id(7)]
+ HRESULT status([out, retval] LONG *plStatus);
+
+ [propget, id(8)]
+ HRESULT statusText([out, retval] BSTR *bstrStatus);
+
+ [propget, id(9)]
+ HRESULT responseXML([out, retval] IDispatch **ppBody);
+
+ [propget, id(10)]
+ HRESULT responseText([out, retval] BSTR *pbstrBody);
+
+ [propget, id(11)]
+ HRESULT responseBody([out, retval] VARIANT *pvarBody);
+
+ [propget, id(12)]
+ HRESULT responseStream([out, retval] VARIANT *pvarBody);
+
+ [propget, id(13)]
+ HRESULT readyState([out, retval] LONG *plState);
+
+ [propput, id(14)]
+ HRESULT onreadystatechange([in] IDispatch *pReadyStateSink);
+}
+
+[
+ helpstring("XML HTTP Request"),
+ progid("Microsoft.XMLHTTP.1.0"),
+ vi_progid("Microsoft.XMLHTTP"),
+ threading(apartment),
+ version(1.0),
+ uuid(ed8c108e-4349-11d2-91a4-00c04f7969e8)
+]
+coclass XMLHTTPRequest
+{
+ [default] interface IXMLHttpRequest;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h
new file mode 100644
index 00000000..7219dc10
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldomdid.h
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2005 Mike McCormack
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __XMLDOMDID_H__
+#define __XMLDOMDID_H__
+
+#define DISPID_DOM_BASE 1
+#define DISPID_DOM_COLLECTION_BASE 1000000
+#define DISPID_DOM_COLLECTION_MAX 2999999
+
+#define DISPID_DOM_NODE 1
+#define DISPID_DOM_NODE_NODENAME 2
+#define DISPID_DOM_NODE_NODEVALUE 3
+#define DISPID_DOM_NODE_NODETYPE 4
+#define DISPID_DOM_NODE_NODETYPEENUM 5
+#define DISPID_DOM_NODE_PARENTNODE 6
+#define DISPID_DOM_NODE_CHILDNODES 7
+#define DISPID_DOM_NODE_FIRSTCHILD 8
+#define DISPID_DOM_NODE_LASTCHILD 9
+#define DISPID_DOM_NODE_PREVIOUSSIBLING 10
+#define DISPID_DOM_NODE_NEXTSIBLING 11
+#define DISPID_DOM_NODE_ATTRIBUTES 12
+#define DISPID_DOM_NODE_INSERTBEFORE 13
+#define DISPID_DOM_NODE_REPLACECHILD 14
+#define DISPID_DOM_NODE_REMOVECHILD 15
+#define DISPID_DOM_NODE_APPENDCHILD 16
+#define DISPID_DOM_NODE_HASCHILDNODES 17
+#define DISPID_DOM_NODE_OWNERDOC 18
+#define DISPID_DOM_NODE_CLONENODE 19
+
+#define DISPID_XMLDOM_NODE 20
+#define DISPID_XMLDOM_NODE_STRINGTYPE 21
+#define DISPID_XMLDOM_NODE_SPECIFIED 22
+#define DISPID_XMLDOM_NODE_DEFINITION 23
+#define DISPID_XMLDOM_NODE_TEXT 24
+#define DISPID_XMLDOM_NODE_NODETYPEDVALUE 25
+#define DISPID_XMLDOM_NODE_DATATYPE 26
+#define DISPID_XMLDOM_NODE_XML 27
+#define DISPID_XMLDOM_NODE_TRANSFORMNODE 28
+#define DISPID_XMLDOM_NODE_SELECTNODES 29
+#define DISPID_XMLDOM_NODE_SELECTSINGLENODE 30
+#define DISPID_XMLDOM_NODE_PARSED 31
+#define DISPID_XMLDOM_NODE_NAMESPACE 32
+#define DISPID_XMLDOM_NODE_PREFIX 33
+#define DISPID_XMLDOM_NODE_BASENAME 34
+#define DISPID_XMLDOM_NODE_TRANSFORMNODETOOBJECT 35
+#define DISPID_XMLDOM_NODE__TOP 36
+
+#define DISPID_DOM_DOCUMENT 37
+#define DISPID_DOM_DOCUMENT_DOCTYPE 38
+#define DISPID_DOM_DOCUMENT_IMPLEMENTATION 39
+#define DISPID_DOM_DOCUMENT_DOCUMENTELEMENT 40
+#define DISPID_DOM_DOCUMENT_CREATEELEMENT 41
+#define DISPID_DOM_DOCUMENT_CREATEDOCUMENTFRAGMENT 42
+#define DISPID_DOM_DOCUMENT_CREATETEXTNODE 43
+#define DISPID_DOM_DOCUMENT_CREATECOMMENT 44
+#define DISPID_DOM_DOCUMENT_CREATECDATASECTION 45
+#define DISPID_DOM_DOCUMENT_CREATEPROCESSINGINSTRUCTION 46
+#define DISPID_DOM_DOCUMENT_CREATEATTRIBUTE 47
+#define DISPID_DOM_DOCUMENT_CREATEENTITY 48
+#define DISPID_DOM_DOCUMENT_CREATEENTITYREFERENCE 49
+#define DISPID_DOM_DOCUMENT_GETELEMENTSBYTAGNAME 50
+#define DISPID_DOM_DOCUMENT_TOP 51
+
+#define DISPID_XMLDOM_DOCUMENT 52
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNODE 53
+#define DISPID_XMLDOM_DOCUMENT_CREATENODE 54
+#define DISPID_XMLDOM_DOCUMENT_CREATENODEEX 55
+#define DISPID_XMLDOM_DOCUMENT_NODEFROMID 56
+#define DISPID_XMLDOM_DOCUMENT_DOCUMENTNAMESPACES 57
+#define DISPID_XMLDOM_DOCUMENT_LOAD 58
+#define DISPID_XMLDOM_DOCUMENT_PARSEERROR 59
+#define DISPID_XMLDOM_DOCUMENT_URL 60
+#define DISPID_XMLDOM_DOCUMENT_ASYNC 61
+#define DISPID_XMLDOM_DOCUMENT_ABORT 62
+#define DISPID_XMLDOM_DOCUMENT_LOADXML 63
+#define DISPID_XMLDOM_DOCUMENT_SAVE 64
+#define DISPID_XMLDOM_DOCUMENT_VALIDATE 65
+#define DISPID_XMLDOM_DOCUMENT_RESOLVENAMESPACE 66
+#define DISPID_XMLDOM_DOCUMENT_PRESERVEWHITESPACE 67
+#define DISPID_XMLDOM_DOCUMENT_ONREADYSTATECHANGE 68
+#define DISPID_XMLDOM_DOCUMENT_ONDATAAVAILABLE 69
+#define DISPID_XMLDOM_DOCUMENT_ONTRANSFORMNODE 70
+#define DISPID_XMLDOM_DOCUMENT__TOP 71
+
+#define DISPID_DOM_NODELIST 72
+#define DISPID_DOM_NODELIST_ITEM 73
+#define DISPID_DOM_NODELIST_LENGTH 74
+
+#define DISPID_XMLDOM_NODELIST 75
+#define DISPID_XMLDOM_NODELIST_NEXTNODE 76
+#define DISPID_XMLDOM_NODELIST_RESET 77
+#define DISPID_XMLDOM_NODELIST_NEWENUM 78
+#define DISPID_XMLDOM_NODELIST__TOP 79
+
+#define DISPID_DOM_NAMEDNODEMAP 80
+#define DISPID_DOM_NAMEDNODEMAP_GETNAMEDITEM 81
+#define DISPID_DOM_NAMEDNODEMAP_SETNAMEDITEM 82
+#define DISPID_DOM_NAMEDNODEMAP_REMOVENAMEDITEM 83
+
+#define DISPID_XMLDOM_NAMEDNODEMAP 84
+#define DISPID_XMLDOM_NAMEDNODEMAP_GETQUALIFIEDITEM 85
+#define DISPID_XMLDOM_NAMEDNODEMAP_REMOVEQUALIFIEDITEM 86
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEXTNODE 87
+#define DISPID_XMLDOM_NAMEDNODEMAP_RESET 88
+#define DISPID_XMLDOM_NAMEDNODEMAP_NEWENUM 89
+#define DISPID_XMLDOM_NAMEDNODEMAP__TOP 90
+
+#define DISPID_DOM_W3CWRAPPERS 91
+
+#define DISPID_DOM_DOCUMENTFRAGMENT 92
+#define DISPID_DOM_DOCUMENTFRAGMENT__TOP 93
+
+#define DISPID_DOM_ELEMENT 94
+#define DISPID_DOM_ELEMENT_GETTAGNAME 95
+#define DISPID_DOM_ELEMENT_GETATTRIBUTES 96
+#define DISPID_DOM_ELEMENT_GETATTRIBUTE 97
+#define DISPID_DOM_ELEMENT_SETATTRIBUTE 98
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTE 99
+#define DISPID_DOM_ELEMENT_GETATTRIBUTENODE 100
+#define DISPID_DOM_ELEMENT_SETATTRIBUTENODE 101
+#define DISPID_DOM_ELEMENT_REMOVEATTRIBUTENODE 102
+#define DISPID_DOM_ELEMENT_GETELEMENTSBYTAGNAME 103
+#define DISPID_DOM_ELEMENT_NORMALIZE 104
+#define DISPID_DOM_ELEMENT__TOP 105
+
+#define DISPID_DOM_DATA 106
+#define DISPID_DOM_DATA_DATA 107
+#define DISPID_DOM_DATA_LENGTH 108
+#define DISPID_DOM_DATA_SUBSTRING 109
+#define DISPID_DOM_DATA_APPEND 110
+#define DISPID_DOM_DATA_INSERT 111
+#define DISPID_DOM_DATA_DELETE 112
+#define DISPID_DOM_DATA_REPLACE 113
+#define DISPID_DOM_DATA__TOP 114
+
+#define DISPID_DOM_ATTRIBUTE 115
+#define DISPID_DOM_ATTRIBUTE_GETNAME 116
+#define DISPID_DOM_ATTRIBUTE_SPECIFIED 117
+#define DISPID_DOM_ATTRIBUTE_VALUE 118
+#define DISPID_DOM_ATTRIBUTE__TOP 119
+
+#define DISPID_DOM_TEXT 120
+#define DISPID_DOM_TEXT_SPLITTEXT 121
+#define DISPID_DOM_TEXT_JOINTEXT 122
+#define DISPID_DOM_TEXT__TOP 123
+
+#define DISPID_DOM_PI 124
+#define DISPID_DOM_PI_TARGET 125
+#define DISPID_DOM_PI_DATA 126
+#define DISPID_DOM_PI__TOP 127
+
+#define DISPID_DOM_DOCUMENTTYPE 128
+#define DISPID_DOM_DOCUMENTTYPE_NAME 129
+#define DISPID_DOM_DOCUMENTTYPE_ENTITIES 130
+#define DISPID_DOM_DOCUMENTTYPE_NOTATIONS 131
+#define DISPID_DOM_DOCUMENTTYPE__TOP 132
+
+#define DISPID_DOM_NOTATION 133
+#define DISPID_DOM_NOTATION_PUBLICID 134
+#define DISPID_DOM_NOTATION_SYSTEMID 135
+#define DISPID_DOM_NOTATION__TOP 136
+
+#define DISPID_DOM_ENTITY 137
+#define DISPID_DOM_ENTITY_PUBLICID 138
+#define DISPID_DOM_ENTITY_SYSTEMID 139
+#define DISPID_DOM_ENTITY_NOTATIONNAME 140
+#define DISPID_DOM_ENTITY__TOP 141
+
+#define DISPID_DOM_IMPLEMENTATION 142
+#define DISPID_DOM_IMPLEMENTATION_HASFEATURE 143
+#define DISPID_DOM_IMPLEMENTATION__TOP 144
+
+
+#define DISPID_DOM_ERROR 0x000000b0
+#define DISPID_DOM_ERROR_ERRORCODE 0x000000b1
+#define DISPID_DOM_ERROR_URL 0x000000b2
+#define DISPID_DOM_ERROR_REASON 0x000000b3
+#define DISPID_DOM_ERROR_SRCTEXT 0x000000b4
+#define DISPID_DOM_ERROR_LINE 0x000000b5
+#define DISPID_DOM_ERROR_LINEPOS 0x000000b6
+#define DISPID_DOM_ERROR_FILEPOS 0x000000b7
+#define DISPID_DOM_ERROR__TOP 0x000000b8
+
+#define DISPID_XMLDOMEVENT 197
+#define DISPID_XMLDOMEVENT_ONREADYSTATECHANGE DISPID_READYSTATECHANGE
+#define DISPID_XMLDOMEVENT_ONDATAAVAILABLE 198
+#define DISPID_XMLDOMEVENT__TOP 199
+
+#endif /* __XMLDOMDID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl
new file mode 100644
index 00000000..3fcbc0ec
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldso.idl
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#include <idispids.h>
+#include <xmldsodid.h>
+
+#if !defined(progid) && !defined(__WIDL__)
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
+interface IXMLDOMDocument;
+
+[
+local,
+object,
+odl,
+dual,
+oleautomation,
+uuid(310afa62-0575-11d2-9ca9-0060b0ec3d39),
+pointer_default(unique)
+]
+interface IXMLDSOControl : IDispatch
+{
+ [propget,id(DISPID_XMLDSO_DOCUMENT)]
+ HRESULT XMLDocument([out, retval] IXMLDOMDocument** ppDoc);
+
+ [propput,id(DISPID_XMLDSO_DOCUMENT)]
+ HRESULT XMLDocument([in] IXMLDOMDocument* ppDoc);
+
+ [propget,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]
+ HRESULT JavaDSOCompatible([out, retval] BOOL* fJavaDSOCompatible);
+
+ [propput,id(DISPID_XMLDSO_JAVADSOCOMPATIBLE)]
+ HRESULT JavaDSOCompatible([in] BOOL fJavaDSOCompatible);
+
+ [propget, id(DISPID_READYSTATE)]
+ HRESULT readyState([out, retval] long *state);
+}
+
+[
+ helpstring("XML Data Source Object"),
+ progid("Microsoft.XMLDSO.1.0"),
+ vi_progid("Microsoft.XMLDSO"),
+ threading(apartment),
+ version(1.0),
+ uuid(550dda30-0541-11d2-9ca9-0060b0ec3d39)
+]
+coclass XMLDSOControl
+{
+ [default] interface IXMLDSOControl;
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h
new file mode 100644
index 00000000..550d46f9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmldsodid.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2005 Vijay Kiran Kamuju
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __XMLDSODID_H__
+#define __XMLDSODID_H__
+
+#define DISPID_XOBJ_MIN 0x00010000
+#define DISPID_XOBJ_MAX 0x0001FFFF
+#define DISPID_XOBJ_BASE 0x00010000
+
+#define DISPID_XMLDSO 0x00010000
+#define DISPID_XMLDSO_DOCUMENT 0x00010001
+#define DISPID_XMLDSO_JAVADSOCOMPATIBLE 0x00010002
+
+#endif /* __XMLDSODID_H__ */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl
new file mode 100644
index 00000000..7b2a6a9e
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/xmllite.idl
@@ -0,0 +1,304 @@
+/*
+ * Copyright (C) 2010 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+import "unknwn.idl";
+import "objidl.idl";
+import "oaidl.idl";
+
+typedef enum XmlNodeType {
+ XmlNodeType_None = 0,
+ XmlNodeType_Element = 1,
+ XmlNodeType_Attribute = 2,
+ XmlNodeType_Text = 3,
+ XmlNodeType_CDATA = 4,
+ XmlNodeType_ProcessingInstruction = 7,
+ XmlNodeType_Comment = 8,
+ XmlNodeType_DocumentType = 10,
+ XmlNodeType_Whitespace = 13,
+ XmlNodeType_EndElement = 15,
+ XmlNodeType_XmlDeclaration = 17,
+ _XmlNodeType_Last = 17
+} XmlNodeType;
+
+/* IXmlReader */
+[
+ local,
+ object,
+ uuid(7279fc81-709d-4095-b63d-69fe4b0d9030),
+ pointer_default(unique)
+]
+interface IXmlReader : IUnknown
+{
+ HRESULT SetInput( [in] IUnknown *input);
+ HRESULT GetProperty( [in] UINT property, [out] LONG_PTR *value);
+ HRESULT SetProperty( [in] UINT property, [in] LONG_PTR value);
+ HRESULT Read( [out] XmlNodeType *node_type);
+ HRESULT GetNodeType( [out] XmlNodeType *node_type);
+ HRESULT MoveToFirstAttribute(void);
+ HRESULT MoveToNextAttribute(void);
+ HRESULT MoveToAttributeByName( [in] LPCWSTR local_name,
+ [in] LPCWSTR namespaceUri);
+ HRESULT MoveToElement(void);
+ HRESULT GetQualifiedName( [out] LPCWSTR *qualifiedName,
+ [out] UINT *qualifiedName_length);
+ HRESULT GetNamespaceUri( [out] LPCWSTR *namespaceUri,
+ [out] UINT *nnamespaceUri_length);
+ HRESULT GetLocalName( [out] LPCWSTR *local_name,
+ [out] UINT *locale_name_length);
+ HRESULT GetPrefix( [out] LPCWSTR *prefix,
+ [out] UINT *prefix_length);
+ HRESULT GetValue( [out] LPCWSTR *value,
+ [out] UINT *value_length);
+ HRESULT ReadValueChunk( [out] WCHAR *buffer,
+ [in] UINT chunk_size,
+ [in,out] UINT *read);
+ HRESULT GetBaseUri( [out] LPCWSTR *baseUri,
+ [out] UINT *baseUri_length);
+ BOOL IsDefault(void);
+ BOOL IsEmptyElement(void);
+ HRESULT GetLineNumber( [out] UINT *lineNumber);
+ HRESULT GetLinePosition( [out] UINT *linePosition);
+ HRESULT GetAttributeCount( [out] UINT *attributeCount);
+ HRESULT GetDepth( [out] UINT *depth);
+ BOOL IsEOF(void);
+}
+
+/* IXmlResolver */
+[
+ local,
+ object,
+ uuid(7279fc82-709d-4095-b63d-69fe4b0d9030),
+ pointer_default(unique)
+]
+interface IXmlResolver : IUnknown
+{
+ HRESULT ResolveUri([in] LPCWSTR base_uri,
+ [in] LPCWSTR public_id,
+ [in] LPCWSTR system_id,
+ [out] IUnknown **input);
+}
+
+/* IXmlReader state */
+typedef enum XmlReadState
+{
+ XmlReadState_Initial,
+ XmlReadState_Interactive,
+ XmlReadState_Error,
+ XmlReadState_EndOfFile,
+ XmlReadState_Closed
+} XmlReadState;
+
+/* conformance levels */
+typedef enum XmlConformanceLevel
+{
+ XmlConformanceLevel_Auto,
+ XmlConformanceLevel_Fragment,
+ XmlConformanceLevel_Document,
+ _XmlConformanceLevel_Last = XmlConformanceLevel_Document
+} XmlConformanceLevel;
+
+/* DTD processing mode */
+typedef enum DtdProcessing
+{
+ DtdProcessing_Prohibit,
+ DtdProcessing_Parse,
+ _DtdProcessing_Last = DtdProcessing_Parse
+} DtdProcessing;
+
+/* IXmlReader properties */
+typedef enum XmlReaderProperty
+{
+ XmlReaderProperty_MultiLanguage,
+ XmlReaderProperty_ConformanceLevel,
+ XmlReaderProperty_RandomAccess,
+ XmlReaderProperty_XmlResolver,
+ XmlReaderProperty_DtdProcessing,
+ XmlReaderProperty_ReadState,
+ XmlReaderProperty_MaxElementDepth,
+ XmlReaderProperty_MaxEntityExpansion,
+ _XmlReaderProperty_Last = XmlReaderProperty_MaxEntityExpansion
+} XmlReaderProperty;
+
+/* reader error codes */
+typedef enum XmlError
+{
+ MX_E_MX = 0xc00cee00,
+ MX_E_INPUTEND,
+ MX_E_ENCODING,
+ MX_E_ENCODINGSWITCH,
+ MX_E_ENCODINGSIGNATURE,
+ WC_E_WC = 0xc00cee20,
+ WC_E_WHITESPACE,
+ WC_E_SEMICOLON,
+ WC_E_GREATERTHAN,
+ WC_E_QUOTE,
+ WC_E_EQUAL,
+ WC_E_LESSTHAN,
+ WC_E_HEXDIGIT,
+ WC_E_DIGIT,
+ WC_E_LEFTBRACKET,
+ WC_E_LEFTPAREN,
+ WC_E_XMLCHARACTER,
+ WC_E_NAMECHARACTER,
+ WC_E_SYNTAX,
+ WC_E_CDSECT,
+ WC_E_COMMENT,
+ WC_E_CONDSECT,
+ WC_E_DECLATTLIST,
+ WC_E_DECLDOCTYPE,
+ WC_E_DECLELEMENT,
+ WC_E_DECLENTITY,
+ WC_E_DECLNOTATION,
+ WC_E_NDATA,
+ WC_E_PUBLIC,
+ WC_E_SYSTEM,
+ WC_E_NAME,
+ WC_E_ROOTELEMENT,
+ WC_E_ELEMENTMATCH,
+ WC_E_UNIQUEATTRIBUTE,
+ WC_E_TEXTXMLDECL,
+ WC_E_LEADINGXML,
+ WC_E_TEXTDECL,
+ WC_E_XMLDECL,
+ WC_E_ENCNAME,
+ WC_E_PUBLICID,
+ WC_E_PESINTERNALSUBSET,
+ WC_E_PESBETWEENDECLS,
+ WC_E_NORECURSION,
+ WC_E_ENTITYCONTENT,
+ WC_E_UNDECLAREDENTITY,
+ WC_E_PARSEDENTITY,
+ WC_E_NOEXTERNALENTITYREF,
+ WC_E_PI,
+ WC_E_SYSTEMID,
+ WC_E_QUESTIONMARK,
+ WC_E_CDSECTEND,
+ WC_E_MOREDATA,
+ WC_E_DTDPROHIBITED,
+ WC_E_INVALIDXMLSPACE,
+ NC_E_NC = 0xc00cee60,
+ NC_E_QNAMECHARACTER,
+ NC_E_QNAMECOLON,
+ NC_E_NAMECOLON,
+ NC_E_DECLAREDPREFIX,
+ NC_E_UNDECLAREDPREFIX,
+ NC_E_EMPTYURI,
+ NC_E_XMLPREFIXRESERVED,
+ NC_E_XMLNSPREFIXRESERVED,
+ NC_E_XMLURIRESERVED,
+ NC_E_XMLNSURIRESERVED,
+ SC_E_SC = 0xc00cee80,
+ SC_E_MAXELEMENTDEPTH,
+ SC_E_MAXENTITYEXPANSION,
+ WR_E_WR = 0xc00cef00,
+ WR_E_NONWHITESPACE,
+ WR_E_NSPREFIXDECLARED,
+ WR_E_NSPREFIXWITHEMPTYNSURI,
+ WR_E_DUPLICATEATTRIBUTE,
+ WR_E_XMLNSPREFIXDECLARATION,
+ WR_E_XMLPREFIXDECLARATION,
+ WR_E_XMLURIDECLARATION,
+ WR_E_XMLNSURIDECLARATION,
+ WR_E_NAMESPACEUNDECLARED,
+ WR_E_INVALIDXMLSPACE,
+ WR_E_INVALIDACTION,
+ WR_E_INVALIDSURROGATEPAIR,
+ XML_E_INVALID_DECIMAL = 0xc00ce01d,
+ XML_E_INVALID_HEXIDECIMAL,
+ XML_E_INVALID_UNICODE,
+ XML_E_INVALIDENCODING = 0xc00ce06e
+} XmlError;
+
+/* IXmlReader construction */
+cpp_quote("STDAPI CreateXmlReader(REFIID riid, void **ppvObject, IMalloc *pMalloc);")
+
+cpp_quote("typedef IUnknown IXmlReaderInput;")
+cpp_quote("STDAPI CreateXmlReaderInputWithEncodingName(IUnknown *stream, IMalloc *pMalloc,")
+cpp_quote(" LPCWSTR encoding, BOOL hint,")
+cpp_quote(" LPCWSTR base_uri, IXmlReaderInput **ppInput);")
+
+typedef enum XmlStandalone
+{
+ XmlStandalone_Omit,
+ XmlStandalone_Yes,
+ XmlStandalone_No,
+ _XmlStandalone_Last = XmlStandalone_No
+} XmlStandalone;
+
+typedef enum XmlWriterProperty
+{
+ XmlWriterProperty_MultiLanguage,
+ XmlWriterProperty_Indent,
+ XmlWriterProperty_ByteOrderMark,
+ XmlWriterProperty_OmitXmlDeclaration,
+ XmlWriterProperty_ConformanceLevel,
+ _XmlWriterProperty_Last = XmlWriterProperty_OmitXmlDeclaration
+} XmlWriterProperty;
+
+/* IXmlWriter */
+[
+ local,
+ object,
+ uuid(7279FC88-709D-4095-B63D-69FE4B0D9030),
+ pointer_default(unique)
+]
+interface IXmlWriter : IUnknown
+{
+ HRESULT SetOutput([in] IUnknown *pOutput);
+ HRESULT GetProperty([in] UINT nProperty, [out] LONG_PTR *ppValue);
+ HRESULT SetProperty([in] UINT nProperty, [in] LONG_PTR pValue);
+ HRESULT WriteAttributes([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);
+ HRESULT WriteAttributeString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,
+ [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue);
+ HRESULT WriteCData([in] LPCWSTR pwszText);
+ HRESULT WriteCharEntity([in] WCHAR wch);
+ HRESULT WriteChars([in] const WCHAR *pwch, [in] UINT cwch);
+ HRESULT WriteComment([in] LPCWSTR pwszComment);
+ HRESULT WriteDocType([in] LPCWSTR pwszName, [in] LPCWSTR pwszPublicId,
+ [in] LPCWSTR pwszSystemId, [in] LPCWSTR pwszSubset);
+ HRESULT WriteElementString([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,
+ [in] LPCWSTR pwszNamespaceUri, [in] LPCWSTR pwszValue);
+ HRESULT WriteEndDocument();
+ HRESULT WriteEndElement();
+ HRESULT WriteEntityRef([in] LPCWSTR pwszName);
+ HRESULT WriteFullEndElement();
+ HRESULT WriteName([in] LPCWSTR pwszName);
+ HRESULT WriteNmToken([in] LPCWSTR pwszNmToken);
+ HRESULT WriteNode([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);
+ HRESULT WriteNodeShallow([in] IXmlReader *pReader, [in] BOOL fWriteDefaultAttributes);
+ HRESULT WriteProcessingInstruction([in] LPCWSTR pwszName, [in] LPCWSTR pwszText);
+ HRESULT WriteQualifiedName([in] LPCWSTR pwszLocalName, [in] LPCWSTR pwszNamespaceUri);
+ HRESULT WriteRaw([in] LPCWSTR pwszData);
+ HRESULT WriteRawChars([in] const WCHAR *pwch, [in] UINT cwch);
+ HRESULT WriteStartDocument([in] XmlStandalone standalone);
+ HRESULT WriteStartElement([in] LPCWSTR pwszPrefix, [in] LPCWSTR pwszLocalName,
+ [in] LPCWSTR pwszNamespaceUri);
+ HRESULT WriteString([in] LPCWSTR pwszText);
+ HRESULT WriteSurrogateCharEntity([in] WCHAR wchLow, [in] WCHAR wchHigh);
+ HRESULT WriteWhitespace([in] LPCWSTR pwszWhitespace);
+ HRESULT Flush();
+}
diff --git a/src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h b/src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h
new file mode 100644
index 00000000..6e17674a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wine/include/zmouse.h
@@ -0,0 +1,55 @@
+/*
+ * Scroll wheel mouse definitions
+ *
+ * Copyright (C) 2000 CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef __WINE_ZMOUSE_H
+#define __WINE_ZMOUSE_H
+
+#define MSH_MOUSEWHEEL "MSWHEEL_ROLLMSG"
+
+#define MOUSEZ_CLASSNAME "MouseZ"
+#define MOUSEZ_TITLE "Magellan MSWHEEL"
+
+#define MSH_WHEELMODULE_CLASS (MOUSEZ_CLASSNAME)
+#define MSH_WHEELMODULE_TITLE (MOUSEZ_TITLE)
+
+#define MSH_WHEELSUPPORT "MSH_WHEELSUPPORT_MSG"
+
+#define MSH_SCROLL_LINES "MSH_SCROLL_LINES_MSG"
+
+#define WHEEL_DELTA 120
+
+#ifndef WHEEL_PAGESCROLL
+#define WHEEL_PAGESCROLL (UINT_MAX)
+#endif
+
+#ifndef SPI_SETWHEELSCROLLLINES
+#define SPI_SETWHEELSCROLLLINES 105
+#endif
+
+#endif /* __WINE_ZMOUSE_H */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h b/src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h
new file mode 100644
index 00000000..2fa9b12b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wined3d_gl.h
@@ -0,0 +1,4576 @@
+/*
+ * Direct3D wine OpenGL include file
+ *
+ * Copyright 2002-2003 The wine-d3d team
+ * Copyright 2002-2004 Jason Edmeades
+ * Raphael Junqueira
+ * Copyright 2007 Roderick Colenbrander
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ *
+ * Most OpenGL 1.0/1.1/1.2/1.3 constants/types come from the Mesa-project:
+ * Copyright (C) 1999-2006 Brian Paul
+ *
+ * From the Mesa-license:
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_shaderlib_wined3d_gl_h
+#define VBOX_INCLUDED_SRC_Graphics_shaderlib_wined3d_gl_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifdef USE_WIN32_OPENGL
+#define WINE_GLAPI __stdcall
+#else
+#define WINE_GLAPI
+#endif
+
+/****************************************************
+ * OpenGL 1.0/1.1/1.2/1.3
+ * types, #defines and function pointers
+ ****************************************************/
+
+/* Types */
+typedef unsigned int GLbitfield;
+typedef unsigned char GLboolean;
+typedef signed char GLbyte;
+typedef unsigned char GLubyte;
+typedef short GLshort;
+typedef unsigned short GLushort;
+typedef int GLint;
+typedef unsigned int GLuint;
+typedef unsigned int GLenum;
+typedef float GLfloat;
+typedef int GLsizei;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void GLvoid;
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+typedef INT64 GLint64;
+typedef UINT64 GLuint64;
+typedef struct __GLsync *GLsync;
+
+/* Booleans */
+#define GL_FALSE 0x0
+#define GL_TRUE 0x1
+
+/* Data types */
+#define GL_BYTE 0x1400
+#define GL_UNSIGNED_BYTE 0x1401
+#define GL_SHORT 0x1402
+#define GL_UNSIGNED_SHORT 0x1403
+#define GL_INT 0x1404
+#define GL_UNSIGNED_INT 0x1405
+#define GL_FLOAT 0x1406
+#define GL_DOUBLE 0x140A
+#define GL_2_BYTES 0x1407
+#define GL_3_BYTES 0x1408
+#define GL_4_BYTES 0x1409
+
+/* Errors */
+#define GL_NO_ERROR 0x0
+#define GL_INVALID_VALUE 0x0501
+#define GL_INVALID_ENUM 0x0500
+#define GL_INVALID_OPERATION 0x0502
+#define GL_STACK_OVERFLOW 0x0503
+#define GL_STACK_UNDERFLOW 0x0504
+#define GL_OUT_OF_MEMORY 0x0505
+
+/* Utility */
+#define GL_VENDOR 0x1F00
+#define GL_RENDERER 0x1F01
+#define GL_VERSION 0x1F02
+#define GL_EXTENSIONS 0x1F03
+
+/* Accumulation buffer */
+#define GL_ACCUM_RED_BITS 0x0D58
+#define GL_ACCUM_GREEN_BITS 0x0D59
+#define GL_ACCUM_BLUE_BITS 0x0D5A
+#define GL_ACCUM_ALPHA_BITS 0x0D5B
+#define GL_ACCUM_CLEAR_VALUE 0x0B80
+#define GL_ACCUM 0x0100
+#define GL_ADD 0x0104
+#define GL_LOAD 0x0101
+#define GL_MULT 0x0103
+#define GL_RETURN 0x0102
+
+/* Alpha testing */
+#define GL_ALPHA_TEST 0x0BC0
+#define GL_ALPHA_TEST_REF 0x0BC2
+#define GL_ALPHA_TEST_FUNC 0x0BC1
+
+/* Blending */
+#define GL_BLEND 0x0BE2
+#define GL_BLEND_SRC 0x0BE1
+#define GL_BLEND_DST 0x0BE0
+#define GL_ZERO 0x0
+#define GL_ONE 0x1
+#define GL_SRC_COLOR 0x0300
+#define GL_ONE_MINUS_SRC_COLOR 0x0301
+#define GL_SRC_ALPHA 0x0302
+#define GL_ONE_MINUS_SRC_ALPHA 0x0303
+#define GL_DST_ALPHA 0x0304
+#define GL_ONE_MINUS_DST_ALPHA 0x0305
+#define GL_DST_COLOR 0x0306
+#define GL_ONE_MINUS_DST_COLOR 0x0307
+#define GL_SRC_ALPHA_SATURATE 0x0308
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+
+/* Buffers, Pixel Drawing/Reading */
+#define GL_NONE 0x0
+#define GL_FRONT_LEFT 0x0400
+#define GL_FRONT_RIGHT 0x0401
+#define GL_BACK_LEFT 0x0402
+#define GL_BACK_RIGHT 0x0403
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_LEFT 0x0406
+#define GL_RIGHT 0x0407
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_AUX0 0x0409
+#define GL_AUX1 0x040A
+#define GL_AUX2 0x040B
+#define GL_AUX3 0x040C
+#define GL_COLOR_INDEX 0x1900
+#define GL_RED 0x1903
+#define GL_GREEN 0x1904
+#define GL_BLUE 0x1905
+#define GL_ALPHA 0x1906
+#define GL_LUMINANCE 0x1909
+#define GL_LUMINANCE_ALPHA 0x190A
+#define GL_ALPHA_BITS 0x0D55
+#define GL_RED_BITS 0x0D52
+#define GL_GREEN_BITS 0x0D53
+#define GL_BLUE_BITS 0x0D54
+#define GL_INDEX_BITS 0x0D51
+#define GL_SUBPIXEL_BITS 0x0D50
+#define GL_AUX_BUFFERS 0x0C00
+#define GL_READ_BUFFER 0x0C02
+#define GL_DRAW_BUFFER 0x0C01
+#define GL_DOUBLEBUFFER 0x0C32
+#define GL_STEREO 0x0C33
+#define GL_BITMAP 0x1A00
+#define GL_COLOR 0x1800
+#define GL_DEPTH 0x1801
+#define GL_STENCIL 0x1802
+#define GL_DITHER 0x0BD0
+#define GL_RGB 0x1907
+#define GL_RGBA 0x1908
+
+/* Clipping */
+#define GL_CLIP_PLANE0 0x3000
+#define GL_CLIP_PLANE1 0x3001
+#define GL_CLIP_PLANE2 0x3002
+#define GL_CLIP_PLANE3 0x3003
+#define GL_CLIP_PLANE4 0x3004
+#define GL_CLIP_PLANE5 0x3005
+
+/* Depth buffer */
+#define GL_NEVER 0x0200
+#define GL_LESS 0x0201
+#define GL_EQUAL 0x0202
+#define GL_LEQUAL 0x0203
+#define GL_GREATER 0x0204
+#define GL_NOTEQUAL 0x0205
+#define GL_GEQUAL 0x0206
+#define GL_ALWAYS 0x0207
+#define GL_DEPTH_TEST 0x0B71
+#define GL_DEPTH_BITS 0x0D56
+#define GL_DEPTH_CLEAR_VALUE 0x0B73
+#define GL_DEPTH_FUNC 0x0B74
+#define GL_DEPTH_RANGE 0x0B70
+#define GL_DEPTH_WRITEMASK 0x0B72
+#define GL_DEPTH_COMPONENT 0x1902
+
+/* Evaluators */
+#define GL_AUTO_NORMAL 0x0D80
+#define GL_MAP1_COLOR_4 0x0D90
+#define GL_MAP1_GRID_DOMAIN 0x0DD0
+#define GL_MAP1_GRID_SEGMENTS 0x0DD1
+#define GL_MAP1_INDEX 0x0D91
+#define GL_MAP1_NORMAL 0x0D92
+#define GL_MAP1_TEXTURE_COORD_1 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4 0x0D96
+#define GL_MAP1_VERTEX_3 0x0D97
+#define GL_MAP1_VERTEX_4 0x0D98
+#define GL_MAP2_COLOR_4 0x0DB0
+#define GL_MAP2_GRID_DOMAIN 0x0DD2
+#define GL_MAP2_GRID_SEGMENTS 0x0DD3
+#define GL_MAP2_INDEX 0x0DB1
+#define GL_MAP2_NORMAL 0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4 0x0DB6
+#define GL_MAP2_VERTEX_3 0x0DB7
+#define GL_MAP2_VERTEX_4 0x0DB8
+#define GL_COEFF 0x0A00
+#define GL_DOMAIN 0x0A02
+#define GL_ORDER 0x0A01
+
+/* Feedback */
+#define GL_2D 0x0600
+#define GL_3D 0x0601
+#define GL_3D_COLOR 0x0602
+#define GL_3D_COLOR_TEXTURE 0x0603
+#define GL_4D_COLOR_TEXTURE 0x0604
+#define GL_POINT_TOKEN 0x0701
+#define GL_LINE_TOKEN 0x0702
+#define GL_LINE_RESET_TOKEN 0x0707
+#define GL_POLYGON_TOKEN 0x0703
+#define GL_BITMAP_TOKEN 0x0704
+#define GL_DRAW_PIXEL_TOKEN 0x0705
+#define GL_COPY_PIXEL_TOKEN 0x0706
+#define GL_PASS_THROUGH_TOKEN 0x0700
+#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2
+
+/* Fog */
+#define GL_FOG 0x0B60
+#define GL_FOG_MODE 0x0B65
+#define GL_FOG_DENSITY 0x0B62
+#define GL_FOG_COLOR 0x0B66
+#define GL_FOG_INDEX 0x0B61
+#define GL_FOG_START 0x0B63
+#define GL_FOG_END 0x0B64
+#define GL_LINEAR 0x2601
+#define GL_EXP 0x0800
+#define GL_EXP2 0x0801
+
+/* Gets */
+#define GL_ATTRIB_STACK_DEPTH 0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1
+#define GL_COLOR_CLEAR_VALUE 0x0C22
+#define GL_COLOR_WRITEMASK 0x0C23
+#define GL_CURRENT_INDEX 0x0B01
+#define GL_CURRENT_COLOR 0x0B00
+#define GL_CURRENT_NORMAL 0x0B02
+#define GL_CURRENT_RASTER_COLOR 0x0B04
+#define GL_CURRENT_RASTER_DISTANCE 0x0B09
+#define GL_CURRENT_RASTER_INDEX 0x0B05
+#define GL_CURRENT_RASTER_POSITION 0x0B07
+#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06
+#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08
+#define GL_CURRENT_TEXTURE_COORDS 0x0B03
+#define GL_INDEX_CLEAR_VALUE 0x0C20
+#define GL_INDEX_MODE 0x0C30
+#define GL_INDEX_WRITEMASK 0x0C21
+#define GL_MODELVIEW_MATRIX 0x0BA6
+#define GL_MODELVIEW_STACK_DEPTH 0x0BA3
+#define GL_NAME_STACK_DEPTH 0x0D70
+#define GL_PROJECTION_MATRIX 0x0BA7
+#define GL_PROJECTION_STACK_DEPTH 0x0BA4
+#define GL_RENDER_MODE 0x0C40
+#define GL_RGBA_MODE 0x0C31
+#define GL_TEXTURE_MATRIX 0x0BA8
+#define GL_TEXTURE_STACK_DEPTH 0x0BA5
+#define GL_VIEWPORT 0x0BA2
+
+/* Hints */
+#define GL_FOG_HINT 0x0C54
+#define GL_LINE_SMOOTH_HINT 0x0C52
+#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
+#define GL_POINT_SMOOTH_HINT 0x0C51
+#define GL_POLYGON_SMOOTH_HINT 0x0C53
+#define GL_DONT_CARE 0x1100
+#define GL_FASTEST 0x1101
+#define GL_NICEST 0x1102
+
+/* Implementation limits */
+#define GL_MAX_LIST_NESTING 0x0B31
+#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36
+#define GL_MAX_NAME_STACK_DEPTH 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39
+#define GL_MAX_EVAL_ORDER 0x0D30
+#define GL_MAX_LIGHTS 0x0D31
+#define GL_MAX_CLIP_PLANES 0x0D32
+#define GL_MAX_TEXTURE_SIZE 0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE 0x0D34
+#define GL_MAX_VIEWPORT_DIMS 0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B
+
+/* Lighting */
+#define GL_LIGHTING 0x0B50
+#define GL_LIGHT0 0x4000
+#define GL_LIGHT1 0x4001
+#define GL_LIGHT2 0x4002
+#define GL_LIGHT3 0x4003
+#define GL_LIGHT4 0x4004
+#define GL_LIGHT5 0x4005
+#define GL_LIGHT6 0x4006
+#define GL_LIGHT7 0x4007
+#define GL_SPOT_EXPONENT 0x1205
+#define GL_SPOT_CUTOFF 0x1206
+#define GL_CONSTANT_ATTENUATION 0x1207
+#define GL_LINEAR_ATTENUATION 0x1208
+#define GL_QUADRATIC_ATTENUATION 0x1209
+#define GL_AMBIENT 0x1200
+#define GL_DIFFUSE 0x1201
+#define GL_SPECULAR 0x1202
+#define GL_SHININESS 0x1601
+#define GL_EMISSION 0x1600
+#define GL_POSITION 0x1203
+#define GL_SPOT_DIRECTION 0x1204
+#define GL_AMBIENT_AND_DIFFUSE 0x1602
+#define GL_COLOR_INDEXES 0x1603
+#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52
+#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51
+#define GL_LIGHT_MODEL_AMBIENT 0x0B53
+#define GL_FRONT_AND_BACK 0x0408
+#define GL_SHADE_MODEL 0x0B54
+#define GL_FLAT 0x1D00
+#define GL_SMOOTH 0x1D01
+#define GL_COLOR_MATERIAL 0x0B57
+#define GL_COLOR_MATERIAL_FACE 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER 0x0B56
+#define GL_NORMALIZE 0x0BA1
+
+/* Lines */
+#define GL_LINE_SMOOTH 0x0B20
+#define GL_LINE_STIPPLE 0x0B24
+#define GL_LINE_STIPPLE_PATTERN 0x0B25
+#define GL_LINE_STIPPLE_REPEAT 0x0B26
+#define GL_LINE_WIDTH 0x0B21
+#define GL_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_LINE_WIDTH_RANGE 0x0B22
+
+/* Logic Ops */
+#define GL_LOGIC_OP 0x0BF1
+#define GL_INDEX_LOGIC_OP 0x0BF1
+#define GL_COLOR_LOGIC_OP 0x0BF2
+#define GL_LOGIC_OP_MODE 0x0BF0
+#define GL_CLEAR 0x1500
+#define GL_SET 0x150F
+#define GL_COPY 0x1503
+#define GL_COPY_INVERTED 0x150C
+#define GL_NOOP 0x1505
+#define GL_INVERT 0x150A
+#define GL_AND 0x1501
+#define GL_NAND 0x150E
+#define GL_OR 0x1507
+#define GL_NOR 0x1508
+#define GL_XOR 0x1506
+#define GL_EQUIV 0x1509
+#define GL_AND_REVERSE 0x1502
+#define GL_AND_INVERTED 0x1504
+#define GL_OR_REVERSE 0x150B
+#define GL_OR_INVERTED 0x150D
+
+/* Matrix Mode */
+#define GL_MATRIX_MODE 0x0BA0
+#define GL_MODELVIEW 0x1700
+#define GL_PROJECTION 0x1701
+#define GL_TEXTURE 0x1702
+
+/* Pixel Mode / Transfer */
+#define GL_MAP_COLOR 0x0D10
+#define GL_MAP_STENCIL 0x0D11
+#define GL_INDEX_SHIFT 0x0D12
+#define GL_INDEX_OFFSET 0x0D13
+#define GL_RED_SCALE 0x0D14
+#define GL_RED_BIAS 0x0D15
+#define GL_GREEN_SCALE 0x0D18
+#define GL_GREEN_BIAS 0x0D19
+#define GL_BLUE_SCALE 0x0D1A
+#define GL_BLUE_BIAS 0x0D1B
+#define GL_ALPHA_SCALE 0x0D1C
+#define GL_ALPHA_BIAS 0x0D1D
+#define GL_DEPTH_SCALE 0x0D1E
+#define GL_DEPTH_BIAS 0x0D1F
+#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1
+#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0
+#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9
+#define GL_PIXEL_MAP_S_TO_S 0x0C71
+#define GL_PIXEL_MAP_I_TO_I 0x0C70
+#define GL_PIXEL_MAP_I_TO_R 0x0C72
+#define GL_PIXEL_MAP_I_TO_G 0x0C73
+#define GL_PIXEL_MAP_I_TO_B 0x0C74
+#define GL_PIXEL_MAP_I_TO_A 0x0C75
+#define GL_PIXEL_MAP_R_TO_R 0x0C76
+#define GL_PIXEL_MAP_G_TO_G 0x0C77
+#define GL_PIXEL_MAP_B_TO_B 0x0C78
+#define GL_PIXEL_MAP_A_TO_A 0x0C79
+#define GL_PACK_ALIGNMENT 0x0D05
+#define GL_PACK_LSB_FIRST 0x0D01
+#define GL_PACK_ROW_LENGTH 0x0D02
+#define GL_PACK_SKIP_PIXELS 0x0D04
+#define GL_PACK_SKIP_ROWS 0x0D03
+#define GL_PACK_SWAP_BYTES 0x0D00
+#define GL_UNPACK_ALIGNMENT 0x0CF5
+#define GL_UNPACK_LSB_FIRST 0x0CF1
+#define GL_UNPACK_ROW_LENGTH 0x0CF2
+#define GL_UNPACK_SKIP_PIXELS 0x0CF4
+#define GL_UNPACK_SKIP_ROWS 0x0CF3
+#define GL_UNPACK_SWAP_BYTES 0x0CF0
+#define GL_ZOOM_X 0x0D16
+#define GL_ZOOM_Y 0x0D17
+
+/* Points */
+#define GL_POINT_SMOOTH 0x0B10
+#define GL_POINT_SIZE 0x0B11
+#define GL_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_POINT_SIZE_RANGE 0x0B12
+
+/* Polygons */
+#define GL_POINT 0x1B00
+#define GL_LINE 0x1B01
+#define GL_FILL 0x1B02
+#define GL_CW 0x0900
+#define GL_CCW 0x0901
+#define GL_FRONT 0x0404
+#define GL_BACK 0x0405
+#define GL_POLYGON_MODE 0x0B40
+#define GL_POLYGON_SMOOTH 0x0B41
+#define GL_POLYGON_STIPPLE 0x0B42
+#define GL_EDGE_FLAG 0x0B43
+#define GL_CULL_FACE 0x0B44
+#define GL_CULL_FACE_MODE 0x0B45
+#define GL_FRONT_FACE 0x0B46
+#define GL_POLYGON_OFFSET_FACTOR 0x8038
+#define GL_POLYGON_OFFSET_UNITS 0x2A00
+#define GL_POLYGON_OFFSET_POINT 0x2A01
+#define GL_POLYGON_OFFSET_LINE 0x2A02
+#define GL_POLYGON_OFFSET_FILL 0x8037
+
+/* Primitives */
+#define GL_POINTS 0x0000
+#define GL_LINES 0x0001
+#define GL_LINE_LOOP 0x0002
+#define GL_LINE_STRIP 0x0003
+#define GL_TRIANGLES 0x0004
+#define GL_TRIANGLE_STRIP 0x0005
+#define GL_TRIANGLE_FAN 0x0006
+#define GL_QUADS 0x0007
+#define GL_QUAD_STRIP 0x0008
+#define GL_POLYGON 0x0009
+
+/* Push/Pop bits */
+#define GL_CURRENT_BIT 0x00000001
+#define GL_POINT_BIT 0x00000002
+#define GL_LINE_BIT 0x00000004
+#define GL_POLYGON_BIT 0x00000008
+#define GL_POLYGON_STIPPLE_BIT 0x00000010
+#define GL_PIXEL_MODE_BIT 0x00000020
+#define GL_LIGHTING_BIT 0x00000040
+#define GL_FOG_BIT 0x00000080
+#define GL_DEPTH_BUFFER_BIT 0x00000100
+#define GL_ACCUM_BUFFER_BIT 0x00000200
+#define GL_STENCIL_BUFFER_BIT 0x00000400
+#define GL_VIEWPORT_BIT 0x00000800
+#define GL_TRANSFORM_BIT 0x00001000
+#define GL_ENABLE_BIT 0x00002000
+#define GL_COLOR_BUFFER_BIT 0x00004000
+#define GL_HINT_BIT 0x00008000
+#define GL_EVAL_BIT 0x00010000
+#define GL_LIST_BIT 0x00020000
+#define GL_TEXTURE_BIT 0x00040000
+#define GL_SCISSOR_BIT 0x00080000
+#define GL_ALL_ATTRIB_BITS 0x000FFFFF
+
+/* Render Mode */
+#define GL_FEEDBACK 0x1C01
+#define GL_RENDER 0x1C00
+#define GL_SELECT 0x1C02
+
+/* Scissor box */
+#define GL_SCISSOR_TEST 0x0C11
+#define GL_SCISSOR_BOX 0x0C10
+
+/* Stencil */
+#define GL_STENCIL_TEST 0x0B90
+#define GL_STENCIL_WRITEMASK 0x0B98
+#define GL_STENCIL_BITS 0x0D57
+#define GL_STENCIL_FUNC 0x0B92
+#define GL_STENCIL_VALUE_MASK 0x0B93
+#define GL_STENCIL_REF 0x0B97
+#define GL_STENCIL_FAIL 0x0B94
+#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
+#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
+#define GL_STENCIL_CLEAR_VALUE 0x0B91
+#define GL_STENCIL_INDEX 0x1901
+#define GL_KEEP 0x1E00
+#define GL_REPLACE 0x1E01
+#define GL_INCR 0x1E02
+#define GL_DECR 0x1E03
+
+/* Texture mapping */
+#define GL_TEXTURE_ENV 0x2300
+#define GL_TEXTURE_ENV_MODE 0x2200
+#define GL_TEXTURE_1D 0x0DE0
+#define GL_TEXTURE_2D 0x0DE1
+#define GL_TEXTURE_WRAP_S 0x2802
+#define GL_TEXTURE_WRAP_T 0x2803
+#define GL_TEXTURE_MAG_FILTER 0x2800
+#define GL_TEXTURE_MIN_FILTER 0x2801
+#define GL_TEXTURE_ENV_COLOR 0x2201
+#define GL_TEXTURE_GEN_S 0x0C60
+#define GL_TEXTURE_GEN_T 0x0C61
+#define GL_TEXTURE_GEN_MODE 0x2500
+#define GL_TEXTURE_BORDER_COLOR 0x1004
+#define GL_TEXTURE_WIDTH 0x1000
+#define GL_TEXTURE_HEIGHT 0x1001
+#define GL_TEXTURE_BORDER 0x1005
+#define GL_TEXTURE_COMPONENTS 0x1003
+#define GL_TEXTURE_RED_SIZE 0x805C
+#define GL_TEXTURE_GREEN_SIZE 0x805D
+#define GL_TEXTURE_BLUE_SIZE 0x805E
+#define GL_TEXTURE_ALPHA_SIZE 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE 0x8061
+#define GL_NEAREST_MIPMAP_NEAREST 0x2700
+#define GL_NEAREST_MIPMAP_LINEAR 0x2702
+#define GL_LINEAR_MIPMAP_NEAREST 0x2701
+#define GL_LINEAR_MIPMAP_LINEAR 0x2703
+#define GL_OBJECT_LINEAR 0x2401
+#define GL_OBJECT_PLANE 0x2501
+#define GL_EYE_LINEAR 0x2400
+#define GL_EYE_PLANE 0x2502
+#define GL_SPHERE_MAP 0x2402
+#define GL_DECAL 0x2101
+#define GL_MODULATE 0x2100
+#define GL_NEAREST 0x2600
+#define GL_REPEAT 0x2901
+#define GL_CLAMP 0x2900
+#define GL_S 0x2000
+#define GL_T 0x2001
+#define GL_R 0x2002
+#define GL_Q 0x2003
+#define GL_TEXTURE_GEN_R 0x0C62
+#define GL_TEXTURE_GEN_Q 0x0C63
+
+/* Vertex Arrays */
+#define GL_VERTEX_ARRAY 0x8074
+#define GL_NORMAL_ARRAY 0x8075
+#define GL_COLOR_ARRAY 0x8076
+#define GL_INDEX_ARRAY 0x8077
+#define GL_TEXTURE_COORD_ARRAY 0x8078
+#define GL_EDGE_FLAG_ARRAY 0x8079
+#define GL_VERTEX_ARRAY_SIZE 0x807A
+#define GL_VERTEX_ARRAY_TYPE 0x807B
+#define GL_VERTEX_ARRAY_STRIDE 0x807C
+#define GL_NORMAL_ARRAY_TYPE 0x807E
+#define GL_NORMAL_ARRAY_STRIDE 0x807F
+#define GL_COLOR_ARRAY_SIZE 0x8081
+#define GL_COLOR_ARRAY_TYPE 0x8082
+#define GL_COLOR_ARRAY_STRIDE 0x8083
+#define GL_INDEX_ARRAY_TYPE 0x8085
+#define GL_INDEX_ARRAY_STRIDE 0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C
+#define GL_VERTEX_ARRAY_POINTER 0x808E
+#define GL_NORMAL_ARRAY_POINTER 0x808F
+#define GL_COLOR_ARRAY_POINTER 0x8090
+#define GL_INDEX_ARRAY_POINTER 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093
+#define GL_V2F 0x2A20
+#define GL_V3F 0x2A21
+#define GL_C4UB_V2F 0x2A22
+#define GL_C4UB_V3F 0x2A23
+#define GL_C3F_V3F 0x2A24
+#define GL_N3F_V3F 0x2A25
+#define GL_C4F_N3F_V3F 0x2A26
+#define GL_T2F_V3F 0x2A27
+#define GL_T4F_V4F 0x2A28
+#define GL_T2F_C4UB_V3F 0x2A29
+#define GL_T2F_C3F_V3F 0x2A2A
+#define GL_T2F_N3F_V3F 0x2A2B
+#define GL_T2F_C4F_N3F_V3F 0x2A2C
+#define GL_T4F_C4F_N3F_V4F 0x2A2D
+
+/* OpenGL 1.1 */
+#define GL_PROXY_TEXTURE_1D 0x8063
+#define GL_PROXY_TEXTURE_2D 0x8064
+#define GL_TEXTURE_PRIORITY 0x8066
+#define GL_TEXTURE_RESIDENT 0x8067
+#define GL_TEXTURE_BINDING_1D 0x8068
+#define GL_TEXTURE_BINDING_2D 0x8069
+#define GL_TEXTURE_INTERNAL_FORMAT 0x1003
+#define GL_ALPHA4 0x803B
+#define GL_ALPHA8 0x803C
+#define GL_ALPHA12 0x803D
+#define GL_ALPHA16 0x803E
+#define GL_LUMINANCE4 0x803F
+#define GL_LUMINANCE8 0x8040
+#define GL_LUMINANCE12 0x8041
+#define GL_LUMINANCE16 0x8042
+#define GL_LUMINANCE4_ALPHA4 0x8043
+#define GL_LUMINANCE6_ALPHA2 0x8044
+#define GL_LUMINANCE8_ALPHA8 0x8045
+#define GL_LUMINANCE12_ALPHA4 0x8046
+#define GL_LUMINANCE12_ALPHA12 0x8047
+#define GL_LUMINANCE16_ALPHA16 0x8048
+#define GL_INTENSITY 0x8049
+#define GL_INTENSITY4 0x804A
+#define GL_INTENSITY8 0x804B
+#define GL_INTENSITY12 0x804C
+#define GL_INTENSITY16 0x804D
+#define GL_R3_G3_B2 0x2A10
+#define GL_RGB4 0x804F
+#define GL_RGB5 0x8050
+#define GL_RGB8 0x8051
+#define GL_RGB10 0x8052
+#define GL_RGB12 0x8053
+#define GL_RGB16 0x8054
+#define GL_RGBA2 0x8055
+#define GL_RGBA4 0x8056
+#define GL_RGB5_A1 0x8057
+#define GL_RGBA8 0x8058
+#define GL_RGB10_A2 0x8059
+#define GL_RGBA12 0x805A
+#define GL_RGBA16 0x805B
+#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
+#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF
+#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF
+
+/* OpenGL 1.2 constants */
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+
+/* OpenGL 1.3 constants */
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_SUBTRACT 0x84E7
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_MULTISAMPLE_BIT 0x20000000
+
+/* GL_VERSION_2_0 */
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882a
+#define GL_DRAW_BUFFER6 0x882b
+#define GL_DRAW_BUFFER7 0x882c
+#define GL_DRAW_BUFFER8 0x882d
+#define GL_DRAW_BUFFER9 0x882e
+#define GL_DRAW_BUFFER10 0x882f
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883d
+#define GL_POINT_SPRITE 0x8861
+#define GL_COORD_REPLACE 0x8862
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886a
+#define GL_MAX_TEXTURE_COORDS 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8b30
+#define GL_VERTEX_SHADER 0x8b31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8b49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8b4a
+#define GL_MAX_VARYING_FLOATS 0x8b4b
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8b4c
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8b4d
+#define GL_SHADER_TYPE 0x8b4f
+#define GL_FLOAT_VEC2 0x8b50
+#define GL_FLOAT_VEC3 0x8b51
+#define GL_FLOAT_VEC4 0x8b52
+#define GL_INT_VEC2 0x8b53
+#define GL_INT_VEC3 0x8b54
+#define GL_INT_VEC4 0x8b55
+#define GL_BOOL 0x8b56
+#define GL_BOOL_VEC2 0x8b57
+#define GL_BOOL_VEC3 0x8b58
+#define GL_BOOL_VEC4 0x8b59
+#define GL_FLOAT_MAT2 0x8b5a
+#define GL_FLOAT_MAT3 0x8b5b
+#define GL_FLOAT_MAT4 0x8b5c
+#define GL_SAMPLER_1D 0x8b5d
+#define GL_SAMPLER_2D 0x8b5e
+#define GL_SAMPLER_3D 0x8b5f
+#define GL_SAMPLER_CUBE 0x8b60
+#define GL_SAMPLER_1D_SHADOW 0x8b61
+#define GL_SAMPLER_2D_SHADOW 0x8b62
+#define GL_DELETE_STATUS 0x8b80
+#define GL_COMPILE_STATUS 0x8b81
+#define GL_LINK_STATUS 0x8b82
+#define GL_VALIDATE_STATUS 0x8b83
+#define GL_INFO_LOG_LENGTH 0x8b84
+#define GL_ATTACHED_SHADERS 0x8b85
+#define GL_ACTIVE_UNIFORMS 0x8b86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8b87
+#define GL_SHADER_SOURCE_LENGTH 0x8b88
+#define GL_ACTIVE_ATTRIBUTES 0x8b89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8b8a
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8b8b
+#define GL_SHADING_LANGUAGE_VERSION 0x8b8c
+#define GL_CURRENT_PROGRAM 0x8b8d
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8ca0
+#define GL_LOWER_LEFT 0x8ca1
+#define GL_UPPER_LEFT 0x8ca2
+#define GL_STENCIL_BACK_REF 0x8ca3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8ca4
+#define GL_STENCIL_BACK_WRITEMASK 0x8ca5
+typedef char GLchar;
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha);
+typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs);
+typedef void (WINE_GLAPI *PGLFNSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (WINE_GLAPI *PGLFNSTENCILFUNCSEPARATEPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (WINE_GLAPI *PGLFNSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask);
+typedef void (WINE_GLAPI *PGLFNATTACHSHADERPROC)(GLuint program, GLuint shader);
+typedef void (WINE_GLAPI *PGLFNBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNCOMPILESHADERPROC)(GLuint shader);
+typedef GLuint (WINE_GLAPI *PGLFNCREATEPROGRAMPROC)(void);
+typedef GLuint (WINE_GLAPI *PGLFNCREATESHADERPROC)(GLenum type);
+typedef void (WINE_GLAPI *PGLFNDELETEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNDELETESHADERPROC)(GLuint shader);
+typedef void (WINE_GLAPI *PGLFNDETACHSHADERPROC)(GLuint program, GLuint shader);
+typedef void (WINE_GLAPI *PGLFNDISABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNENABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNGETACTIVEATTRIBPROC)(GLuint program,
+ GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETACTIVEUNIFORMPROC)(GLuint program,
+ GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+typedef GLint (WINE_GLAPI *PGLFNGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMINFOLOGPROC)(GLuint program,
+ GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (WINE_GLAPI *PGLFNGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (WINE_GLAPI *PGLFNGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (WINE_GLAPI *PGLFNGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (WINE_GLAPI *PGLFNISPROGRAMPROC)(GLuint program);
+typedef GLboolean (WINE_GLAPI *PGLFNISSHADERPROC)(GLuint shader);
+typedef void (WINE_GLAPI *PGLFNLINKPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNSHADERSOURCEPROC)(GLuint shader,
+ GLsizei count, const GLchar* *string, const GLint *length);
+typedef void (WINE_GLAPI *PGLFNUSEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1FPROC)(GLint location, GLfloat v0);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1IPROC)(GLint location, GLint v0);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2IPROC)(GLint location, GLint v0, GLint v1);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX2FVPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX3FVPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX4FVPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNVALIDATEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DPROC)(GLuint index, GLdouble x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FPROC)(GLuint index, GLfloat x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SPROC)(GLuint index, GLshort x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBPOINTERPROC)(GLuint index,
+ GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+
+#ifndef WINED3D_EXTERN
+# define WINED3D_EXTERN extern
+#endif
+
+WINED3D_EXTERN void (WINE_GLAPI *glAccum)(GLenum op, GLfloat value) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glAlphaFunc)(GLenum func, GLclampf ref) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLboolean (WINE_GLAPI *glAreTexturesResident)(GLsizei n, const GLuint *textures, GLboolean *residences) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glArrayElement)(GLint i) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glBegin)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glBindTexture)(GLenum target, GLuint texture) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glBitmap)(GLsizei width, GLsizei height, GLfloat xorig,
+ GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glBlendFunc)(GLenum sfactor, GLenum dfactor) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCallList)(GLuint list) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCallLists)(GLsizei n, GLenum type, const GLvoid *lists) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClear)(GLbitfield mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClearDepth)(GLclampd depth) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClearIndex)(GLfloat c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClearStencil)(GLint s) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glClipPlane)(GLenum plane, const GLdouble *equation) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3b)(GLbyte red, GLbyte green, GLbyte blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3bv)(const GLbyte *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3d)(GLdouble red, GLdouble green, GLdouble blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3f)(GLfloat red, GLfloat green, GLfloat blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3i)(GLint red, GLint green, GLint blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3s)(GLshort red, GLshort green, GLshort blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3ub)(GLubyte red, GLubyte green, GLubyte blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3ubv)(const GLubyte *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3ui)(GLuint red, GLuint green, GLuint blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3uiv)(const GLuint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3us)(GLushort red, GLushort green, GLushort blue) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor3usv)(const GLushort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4b)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4bv)(const GLbyte *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4d)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4i)(GLint red, GLint green, GLint blue, GLint alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4s)(GLshort red, GLshort green, GLshort blue, GLshort alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4ubv)(const GLubyte *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4uiv)(const GLuint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColor4usv)(const GLushort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColorMaterial)(GLenum face, GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCopyPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCopyTexImage1D)(GLenum target, GLint level,
+ GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCopyTexImage2D)(GLenum target, GLint level,
+ GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCopyTexSubImage1D)(GLenum target, GLint level,
+ GLint xoffset, GLint x, GLint y, GLsizei width) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCopyTexSubImage2D)(GLenum target, GLint level,
+ GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glCullFace)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDeleteLists)(GLuint list, GLsizei range) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDeleteTextures)(GLsizei n, const GLuint *textures) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDepthFunc)(GLenum func) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDepthMask)(GLboolean flag) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDepthRange)(GLclampd nearParam, GLclampd farParam) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDisable)(GLenum cap) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDisableWINE)(GLenum cap) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDisableClientState)(GLenum array) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDrawArrays)(GLenum mode, GLint first, GLsizei count) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDrawBuffer)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glDrawPixels)(GLsizei width, GLsizei height, GLenum format,
+ GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEdgeFlag)(GLboolean flag) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEdgeFlagPointer)(GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEdgeFlagv)(const GLboolean *flag) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEnable)(GLenum cap) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEnableWINE)(GLenum cap) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEnableClientState)(GLenum array) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEnd)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEndList)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord1d)(GLdouble u) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord1dv)(const GLdouble *u) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord1f)(GLfloat u) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord1fv)(const GLfloat *u) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord2d)(GLdouble u, GLdouble v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord2dv)(const GLdouble *u) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord2f)(GLfloat u, GLfloat v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalCoord2fv)(const GLfloat *u) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalMesh1)(GLenum mode, GLint i1, GLint i2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalPoint1)(GLint i) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glEvalPoint2)(GLint i, GLint j) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFeedbackBuffer)(GLsizei size, GLenum type, GLfloat *buffer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFogf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFogfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFogi)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFogiv)(GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFrontFace)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glFrustum)(GLdouble left, GLdouble right, GLdouble bottom,
+ GLdouble top, GLdouble zNear, GLdouble zFar) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLuint (WINE_GLAPI *glGenLists)(GLsizei range) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGenTextures)(GLsizei n, GLuint *textures) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetBooleanv)(GLenum pname, GLboolean *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetClipPlane)(GLenum plane, GLdouble *equation) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetDoublev)(GLenum pname, GLdouble *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLenum (WINE_GLAPI *glGetError)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetFloatv)(GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetIntegerv)(GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetLightfv)(GLenum light, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetLightiv)(GLenum light, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetMapdv)(GLenum target, GLenum query, GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetMapfv)(GLenum target, GLenum query, GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetMapiv)(GLenum target, GLenum query, GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetMaterialfv)(GLenum face, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetMaterialiv)(GLenum face, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetPixelMapfv)(GLenum map, GLfloat *values) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetPixelMapuiv)(GLenum map, GLuint *values) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetPixelMapusv)(GLenum map, GLushort *values) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetPointerv)(GLenum pname, GLvoid **params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetPolygonStipple)(GLubyte *mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN const GLubyte * (WINE_GLAPI *glGetString)(GLenum name) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexEnvfv)(GLenum target, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexEnviv)(GLenum target, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexGendv)(GLenum coord, GLenum pname, GLdouble *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexGenfv)(GLenum coord, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexGeniv)(GLenum coord, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexImage)(GLenum target, GLint level, GLenum format,
+ GLenum type, GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glGetTexParameteriv)(GLenum target, GLenum pname, GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glHint)(GLenum target, GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexMask)(GLuint mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexPointer)(GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexd)(GLdouble c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexdv)(const GLdouble *c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexf)(GLfloat c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexfv)(const GLfloat *c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexi)(GLint c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexiv)(const GLint *c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexs)(GLshort c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexsv)(const GLshort *c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexub)(GLubyte c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glIndexubv)(const GLubyte *c) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glInitNames)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glInterleavedArrays)(GLenum format, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLboolean (WINE_GLAPI *glIsEnabled)(GLenum cap) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLboolean (WINE_GLAPI *glIsList)(GLuint list) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLboolean (WINE_GLAPI *glIsTexture)(GLuint texture) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightModelf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightModelfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightModeli)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightModeliv)(GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightf)(GLenum light, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightfv)(GLenum light, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLighti)(GLenum light, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLightiv)(GLenum light, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLineStipple)(GLint factor, GLushort pattern) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLineWidth)(GLfloat width) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glListBase)(GLuint base) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLoadIdentity)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLoadMatrixd)(const GLdouble *m) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLoadMatrixf)(const GLfloat *m) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLoadName)(GLuint name) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glLogicOp)(GLenum opcode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMap1d)(GLenum target, GLdouble u1, GLdouble u2,
+ GLint stride, GLint order, const GLdouble *points) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMap1f)(GLenum target, GLfloat u1, GLfloat u2, GLint stride,
+ GLint order, const GLfloat *points) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMap2d)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
+ GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMap2f)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
+ GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMapGrid1d)(GLint un, GLdouble u1, GLdouble u2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMapGrid1f)(GLint un, GLfloat u1, GLfloat u2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMapGrid2d)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMapGrid2f)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMaterialf)(GLenum face, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMaterialfv)(GLenum face, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMateriali)(GLenum face, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMaterialiv)(GLenum face, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMatrixMode)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMultMatrixd)(const GLdouble *m) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glMultMatrixf)(const GLfloat *m) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNewList)(GLuint list, GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3b)(GLbyte nx, GLbyte ny, GLbyte nz) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3bv)(const GLbyte *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3d)(GLdouble nx, GLdouble ny, GLdouble nz) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3i)(GLint nx, GLint ny, GLint nz) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3s)(GLshort nx, GLshort ny, GLshort nz) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormal3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glNormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glOrtho)(GLdouble left, GLdouble right, GLdouble bottom,
+ GLdouble top, GLdouble zNear, GLdouble zFar) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPassThrough)(GLfloat token) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelMapfv)(GLenum map, GLint mapsize, const GLfloat *values) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelMapuiv)(GLenum map, GLint mapsize, const GLuint *values) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelMapusv)(GLenum map, GLint mapsize, const GLushort *values) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelStoref)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelStorei)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelTransferf)(GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelTransferi)(GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPixelZoom)(GLfloat xfactor, GLfloat yfactor) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPointSize)(GLfloat size) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPolygonMode)(GLenum face, GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPolygonOffset)(GLfloat factor, GLfloat units) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPolygonStipple)(const GLubyte *mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPopAttrib)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPopClientAttrib)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPopMatrix)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPopName)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPrioritizeTextures)(GLsizei n, const GLuint *textures, const GLclampf *priorities) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPushAttrib)(GLbitfield mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPushClientAttrib)(GLbitfield mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPushMatrix)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPushName)(GLuint name) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2d)(GLdouble x, GLdouble y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2f)(GLfloat x, GLfloat y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2i)(GLint x, GLint y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2s)(GLshort x, GLshort y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos2sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3d)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3f)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3i)(GLint x, GLint y, GLint z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3s)(GLshort x, GLshort y, GLshort z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4i)(GLint x, GLint y, GLint z, GLint w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4s)(GLshort x, GLshort y, GLshort z, GLshort w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRasterPos4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glReadBuffer)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height,
+ GLenum format, GLenum type, GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRectd)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRectdv)(const GLdouble *v1, const GLdouble *v2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRectf)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRectfv)(const GLfloat *v1, const GLfloat *v2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRecti)(GLint x1, GLint y1, GLint x2, GLint y2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRectiv)(const GLint *v1, const GLint *v2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRects)(GLshort x1, GLshort y1, GLshort x2, GLshort y2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRectsv)(const GLshort *v1, const GLshort *v2) DECLSPEC_HIDDEN;
+WINED3D_EXTERN GLint (WINE_GLAPI *glRenderMode)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRotated)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glScaled)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glScalef)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glScissor)(GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glSelectBuffer)(GLsizei size, GLuint *buffer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glShadeModel)(GLenum mode) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glStencilFunc)(GLenum func, GLint ref, GLuint mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glStencilMask)(GLuint mask) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1d)(GLdouble s) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1f)(GLfloat s) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1i)(GLint s) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1s)(GLshort s) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord1sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2d)(GLdouble s, GLdouble t) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2f)(GLfloat s, GLfloat t) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2i)(GLint s, GLint t) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2s)(GLshort s, GLshort t) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord2sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3d)(GLdouble s, GLdouble t, GLdouble r) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3f)(GLfloat s, GLfloat t, GLfloat r) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3i)(GLint s, GLint t, GLint r) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3s)(GLshort s, GLshort t, GLshort r) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4i)(GLint s, GLint t, GLint r, GLint q) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoord4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexEnvf)(GLenum target, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexEnvfv)(GLenum target, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexEnvi)(GLenum target, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexEnviv)(GLenum target, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexGend)(GLenum coord, GLenum pname, GLdouble param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexGendv)(GLenum coord, GLenum pname, const GLdouble *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexGenf)(GLenum coord, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexGenfv)(GLenum coord, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexGeni)(GLenum coord, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexGeniv)(GLenum coord, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width,
+ GLint border, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width,
+ GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexParameterf)(GLenum target, GLenum pname, GLfloat param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexParameterfv)(GLenum target, GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexParameteri)(GLenum target, GLenum pname, GLint param) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexParameteriv)(GLenum target, GLenum pname, const GLint *params) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexSubImage1D)(GLenum target, GLint level, GLint xoffset,
+ GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+ GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTranslated)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glTranslatef)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2d)(GLdouble x, GLdouble y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2f)(GLfloat x, GLfloat y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2i)(GLint x, GLint y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2s)(GLshort x, GLshort y) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex2sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3d)(GLdouble x, GLdouble y, GLdouble z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3f)(GLfloat x, GLfloat y, GLfloat z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3i)(GLint x, GLint y, GLint z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3s)(GLshort x, GLshort y, GLshort z) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex3sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4dv)(const GLdouble *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4fv)(const GLfloat *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4i)(GLint x, GLint y, GLint z, GLint w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4iv)(const GLint *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4s)(GLshort x, GLshort y, GLshort z, GLshort w) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertex4sv)(const GLshort *v) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glViewport)(GLint x, GLint y, GLsizei width, GLsizei height) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINE_GLAPI *glPointParameterfv)(GLenum pname, const GLfloat *params) DECLSPEC_HIDDEN;
+
+/* glFinish and glFlush are always loaded from opengl32.dll, thus they always have
+ * __stdcall calling convention.
+ *
+ * They are wgl functions and must not be called inside the gl lock, give them a
+ * name that makes this clear
+ */
+WINED3D_EXTERN void (__stdcall *wglFinish)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (__stdcall *wglFlush)(void) DECLSPEC_HIDDEN;
+
+/* WGL functions */
+WINED3D_EXTERN BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN;
+WINED3D_EXTERN HGLRC (WINAPI *pwglGetCurrentContext)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN HDC (WINAPI *pwglGetCurrentDC)(void) DECLSPEC_HIDDEN;
+WINED3D_EXTERN PROC (WINAPI *pwglGetProcAddress)(LPCSTR) DECLSPEC_HIDDEN;
+WINED3D_EXTERN BOOL (WINAPI *pwglMakeCurrent)(HDC, HGLRC) DECLSPEC_HIDDEN;
+WINED3D_EXTERN BOOL (WINAPI *pwglSwapLayerBuffers)(HDC, UINT) DECLSPEC_HIDDEN;
+WINED3D_EXTERN BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN;
+WINED3D_EXTERN BOOL (WINAPI *pwglChoosePixelFormat)(HDC, const PIXELFORMATDESCRIPTOR *) DECLSPEC_HIDDEN;
+WINED3D_EXTERN int (WINAPI *pwglDescribePixelFormat)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR) DECLSPEC_HIDDEN;
+WINED3D_EXTERN int (WINAPI *pwglGetPixelFormat)(HDC) DECLSPEC_HIDDEN;
+WINED3D_EXTERN BOOL (WINAPI *pwglSetPixelFormat)(HDC, int, const PIXELFORMATDESCRIPTOR *) DECLSPEC_HIDDEN;
+
+struct VBOXUHGSMI;
+WINED3D_EXTERN HGLRC (WINAPI *pVBoxCreateContext)(HDC, struct VBOXUHGSMI*) DECLSPEC_HIDDEN;
+WINED3D_EXTERN void (WINAPI *pVBoxFlushToHost)(HGLRC) DECLSPEC_HIDDEN;
+
+#if defined(VBOX_WITH_WDDM) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+# define VBOX_WINE_WITH_DIRECT_VBOXOGL
+#endif
+
+#ifdef VBOX_WINE_WITH_DIRECT_VBOXOGL
+/* make sure we used stuff from VBoxOGL
+ * we do it this way to avoid extra modifications to Wine code */
+
+/* We're directly using wglMakeCurrent calls skipping GDI layer, which causes GDI SwapBuffers to fail trying to
+ * call glFinish, which doesn't have any context set. So we use wglSwapLayerBuffers directly as well.
+ */
+# define SwapBuffers(_hdc) pwglSwapLayerBuffers((_hdc), WGL_SWAP_MAIN_PLANE)
+
+/* we avoid using GDI32!*PixelFormat API and use VBoxOGL stuff directly
+ * because SetPixelFormat may eventually lead to opengl32 setting its own window proc via SetWindowLongPtr
+ * thus wined3d_[un]register_window stuff will become screwed up leading to infinite recursion or other misbehave */
+# define ChoosePixelFormat pwglChoosePixelFormat
+# define DescribePixelFormat pwglDescribePixelFormat
+# define GetPixelFormat pwglGetPixelFormat
+# define SetPixelFormat pwglSetPixelFormat
+#endif
+
+#define GL_FUNCS_GEN \
+ USE_GL_FUNC(glAccum) \
+ USE_GL_FUNC(glAlphaFunc) \
+ USE_GL_FUNC(glAreTexturesResident) \
+ USE_GL_FUNC(glArrayElement) \
+ USE_GL_FUNC(glBegin) \
+ USE_GL_FUNC(glBindTexture) \
+ USE_GL_FUNC(glBitmap) \
+ USE_GL_FUNC(glBlendFunc) \
+ USE_GL_FUNC(glCallList) \
+ USE_GL_FUNC(glCallLists) \
+ USE_GL_FUNC(glClear) \
+ USE_GL_FUNC(glClearAccum) \
+ USE_GL_FUNC(glClearColor) \
+ USE_GL_FUNC(glClearDepth) \
+ USE_GL_FUNC(glClearIndex) \
+ USE_GL_FUNC(glClearStencil) \
+ USE_GL_FUNC(glClipPlane) \
+ USE_GL_FUNC(glColor3b) \
+ USE_GL_FUNC(glColor3bv) \
+ USE_GL_FUNC(glColor3d) \
+ USE_GL_FUNC(glColor3dv) \
+ USE_GL_FUNC(glColor3f) \
+ USE_GL_FUNC(glColor3fv) \
+ USE_GL_FUNC(glColor3i) \
+ USE_GL_FUNC(glColor3iv) \
+ USE_GL_FUNC(glColor3s) \
+ USE_GL_FUNC(glColor3sv) \
+ USE_GL_FUNC(glColor3ub) \
+ USE_GL_FUNC(glColor3ubv) \
+ USE_GL_FUNC(glColor3ui) \
+ USE_GL_FUNC(glColor3uiv) \
+ USE_GL_FUNC(glColor3us) \
+ USE_GL_FUNC(glColor3usv) \
+ USE_GL_FUNC(glColor4b) \
+ USE_GL_FUNC(glColor4bv) \
+ USE_GL_FUNC(glColor4d) \
+ USE_GL_FUNC(glColor4dv) \
+ USE_GL_FUNC(glColor4f) \
+ USE_GL_FUNC(glColor4fv) \
+ USE_GL_FUNC(glColor4i) \
+ USE_GL_FUNC(glColor4iv) \
+ USE_GL_FUNC(glColor4s) \
+ USE_GL_FUNC(glColor4sv) \
+ USE_GL_FUNC(glColor4ub) \
+ USE_GL_FUNC(glColor4ubv) \
+ USE_GL_FUNC(glColor4ui) \
+ USE_GL_FUNC(glColor4uiv) \
+ USE_GL_FUNC(glColor4us) \
+ USE_GL_FUNC(glColor4usv) \
+ USE_GL_FUNC(glColorMask) \
+ USE_GL_FUNC(glColorMaterial) \
+ USE_GL_FUNC(glColorPointer) \
+ USE_GL_FUNC(glCopyPixels) \
+ USE_GL_FUNC(glCopyTexImage1D) \
+ USE_GL_FUNC(glCopyTexImage2D) \
+ USE_GL_FUNC(glCopyTexSubImage1D) \
+ USE_GL_FUNC(glCopyTexSubImage2D) \
+ USE_GL_FUNC(glCullFace) \
+ USE_GL_FUNC(glDeleteLists) \
+ USE_GL_FUNC(glDeleteTextures) \
+ USE_GL_FUNC(glDepthFunc) \
+ USE_GL_FUNC(glDepthMask) \
+ USE_GL_FUNC(glDepthRange) \
+ USE_GL_FUNC(glDisable) \
+ USE_GL_FUNC(glDisableClientState) \
+ USE_GL_FUNC(glDrawArrays) \
+ USE_GL_FUNC(glDrawBuffer) \
+ USE_GL_FUNC(glDrawElements) \
+ USE_GL_FUNC(glDrawPixels) \
+ USE_GL_FUNC(glEdgeFlag) \
+ USE_GL_FUNC(glEdgeFlagPointer) \
+ USE_GL_FUNC(glEdgeFlagv) \
+ USE_GL_FUNC(glEnable) \
+ USE_GL_FUNC(glEnableClientState) \
+ USE_GL_FUNC(glEnd) \
+ USE_GL_FUNC(glEndList) \
+ USE_GL_FUNC(glEvalCoord1d) \
+ USE_GL_FUNC(glEvalCoord1dv) \
+ USE_GL_FUNC(glEvalCoord1f) \
+ USE_GL_FUNC(glEvalCoord1fv) \
+ USE_GL_FUNC(glEvalCoord2d) \
+ USE_GL_FUNC(glEvalCoord2dv) \
+ USE_GL_FUNC(glEvalCoord2f) \
+ USE_GL_FUNC(glEvalCoord2fv) \
+ USE_GL_FUNC(glEvalMesh1) \
+ USE_GL_FUNC(glEvalMesh2) \
+ USE_GL_FUNC(glEvalPoint1) \
+ USE_GL_FUNC(glEvalPoint2) \
+ USE_GL_FUNC(glFeedbackBuffer) \
+ USE_GL_FUNC(glFogf) \
+ USE_GL_FUNC(glFogfv) \
+ USE_GL_FUNC(glFogi) \
+ USE_GL_FUNC(glFogiv) \
+ USE_GL_FUNC(glFrontFace) \
+ USE_GL_FUNC(glFrustum) \
+ USE_GL_FUNC(glGenLists) \
+ USE_GL_FUNC(glGenTextures) \
+ USE_GL_FUNC(glGetBooleanv) \
+ USE_GL_FUNC(glGetClipPlane) \
+ USE_GL_FUNC(glGetDoublev) \
+ USE_GL_FUNC(glGetError) \
+ USE_GL_FUNC(glGetFloatv) \
+ USE_GL_FUNC(glGetIntegerv) \
+ USE_GL_FUNC(glGetLightfv) \
+ USE_GL_FUNC(glGetLightiv) \
+ USE_GL_FUNC(glGetMapdv) \
+ USE_GL_FUNC(glGetMapfv) \
+ USE_GL_FUNC(glGetMapiv) \
+ USE_GL_FUNC(glGetMaterialfv) \
+ USE_GL_FUNC(glGetMaterialiv) \
+ USE_GL_FUNC(glGetPixelMapfv) \
+ USE_GL_FUNC(glGetPixelMapuiv) \
+ USE_GL_FUNC(glGetPixelMapusv) \
+ USE_GL_FUNC(glGetPointerv) \
+ USE_GL_FUNC(glGetPolygonStipple) \
+ USE_GL_FUNC(glGetString) \
+ USE_GL_FUNC(glGetTexEnvfv) \
+ USE_GL_FUNC(glGetTexEnviv) \
+ USE_GL_FUNC(glGetTexGendv) \
+ USE_GL_FUNC(glGetTexGenfv) \
+ USE_GL_FUNC(glGetTexGeniv) \
+ USE_GL_FUNC(glGetTexImage) \
+ USE_GL_FUNC(glGetTexLevelParameterfv) \
+ USE_GL_FUNC(glGetTexLevelParameteriv) \
+ USE_GL_FUNC(glGetTexParameterfv) \
+ USE_GL_FUNC(glGetTexParameteriv) \
+ USE_GL_FUNC(glHint) \
+ USE_GL_FUNC(glIndexMask) \
+ USE_GL_FUNC(glIndexPointer) \
+ USE_GL_FUNC(glIndexd) \
+ USE_GL_FUNC(glIndexdv) \
+ USE_GL_FUNC(glIndexf) \
+ USE_GL_FUNC(glIndexfv) \
+ USE_GL_FUNC(glIndexi) \
+ USE_GL_FUNC(glIndexiv) \
+ USE_GL_FUNC(glIndexs) \
+ USE_GL_FUNC(glIndexsv) \
+ USE_GL_FUNC(glIndexub) \
+ USE_GL_FUNC(glIndexubv) \
+ USE_GL_FUNC(glInitNames) \
+ USE_GL_FUNC(glInterleavedArrays) \
+ USE_GL_FUNC(glIsEnabled) \
+ USE_GL_FUNC(glIsList) \
+ USE_GL_FUNC(glIsTexture) \
+ USE_GL_FUNC(glLightModelf) \
+ USE_GL_FUNC(glLightModelfv) \
+ USE_GL_FUNC(glLightModeli) \
+ USE_GL_FUNC(glLightModeliv) \
+ USE_GL_FUNC(glLightf) \
+ USE_GL_FUNC(glLightfv) \
+ USE_GL_FUNC(glLighti) \
+ USE_GL_FUNC(glLightiv) \
+ USE_GL_FUNC(glLineStipple) \
+ USE_GL_FUNC(glLineWidth) \
+ USE_GL_FUNC(glListBase) \
+ USE_GL_FUNC(glLoadIdentity) \
+ USE_GL_FUNC(glLoadMatrixd) \
+ USE_GL_FUNC(glLoadMatrixf) \
+ USE_GL_FUNC(glLoadName) \
+ USE_GL_FUNC(glLogicOp) \
+ USE_GL_FUNC(glMap1d) \
+ USE_GL_FUNC(glMap1f) \
+ USE_GL_FUNC(glMap2d) \
+ USE_GL_FUNC(glMap2f) \
+ USE_GL_FUNC(glMapGrid1d) \
+ USE_GL_FUNC(glMapGrid1f) \
+ USE_GL_FUNC(glMapGrid2d) \
+ USE_GL_FUNC(glMapGrid2f) \
+ USE_GL_FUNC(glMaterialf) \
+ USE_GL_FUNC(glMaterialfv) \
+ USE_GL_FUNC(glMateriali) \
+ USE_GL_FUNC(glMaterialiv) \
+ USE_GL_FUNC(glMatrixMode) \
+ USE_GL_FUNC(glMultMatrixd) \
+ USE_GL_FUNC(glMultMatrixf) \
+ USE_GL_FUNC(glNewList) \
+ USE_GL_FUNC(glNormal3b) \
+ USE_GL_FUNC(glNormal3bv) \
+ USE_GL_FUNC(glNormal3d) \
+ USE_GL_FUNC(glNormal3dv) \
+ USE_GL_FUNC(glNormal3f) \
+ USE_GL_FUNC(glNormal3fv) \
+ USE_GL_FUNC(glNormal3i) \
+ USE_GL_FUNC(glNormal3iv) \
+ USE_GL_FUNC(glNormal3s) \
+ USE_GL_FUNC(glNormal3sv) \
+ USE_GL_FUNC(glNormalPointer) \
+ USE_GL_FUNC(glOrtho) \
+ USE_GL_FUNC(glPassThrough) \
+ USE_GL_FUNC(glPixelMapfv) \
+ USE_GL_FUNC(glPixelMapuiv) \
+ USE_GL_FUNC(glPixelMapusv) \
+ USE_GL_FUNC(glPixelStoref) \
+ USE_GL_FUNC(glPixelStorei) \
+ USE_GL_FUNC(glPixelTransferf) \
+ USE_GL_FUNC(glPixelTransferi) \
+ USE_GL_FUNC(glPixelZoom) \
+ USE_GL_FUNC(glPointSize) \
+ USE_GL_FUNC(glPolygonMode) \
+ USE_GL_FUNC(glPolygonOffset) \
+ USE_GL_FUNC(glPolygonStipple) \
+ USE_GL_FUNC(glPopAttrib) \
+ USE_GL_FUNC(glPopClientAttrib) \
+ USE_GL_FUNC(glPopMatrix) \
+ USE_GL_FUNC(glPopName) \
+ USE_GL_FUNC(glPrioritizeTextures) \
+ USE_GL_FUNC(glPushAttrib) \
+ USE_GL_FUNC(glPushClientAttrib) \
+ USE_GL_FUNC(glPushMatrix) \
+ USE_GL_FUNC(glPushName) \
+ USE_GL_FUNC(glRasterPos2d) \
+ USE_GL_FUNC(glRasterPos2dv) \
+ USE_GL_FUNC(glRasterPos2f) \
+ USE_GL_FUNC(glRasterPos2fv) \
+ USE_GL_FUNC(glRasterPos2i) \
+ USE_GL_FUNC(glRasterPos2iv) \
+ USE_GL_FUNC(glRasterPos2s) \
+ USE_GL_FUNC(glRasterPos2sv) \
+ USE_GL_FUNC(glRasterPos3d) \
+ USE_GL_FUNC(glRasterPos3dv) \
+ USE_GL_FUNC(glRasterPos3f) \
+ USE_GL_FUNC(glRasterPos3fv) \
+ USE_GL_FUNC(glRasterPos3i) \
+ USE_GL_FUNC(glRasterPos3iv) \
+ USE_GL_FUNC(glRasterPos3s) \
+ USE_GL_FUNC(glRasterPos3sv) \
+ USE_GL_FUNC(glRasterPos4d) \
+ USE_GL_FUNC(glRasterPos4dv) \
+ USE_GL_FUNC(glRasterPos4f) \
+ USE_GL_FUNC(glRasterPos4fv) \
+ USE_GL_FUNC(glRasterPos4i) \
+ USE_GL_FUNC(glRasterPos4iv) \
+ USE_GL_FUNC(glRasterPos4s) \
+ USE_GL_FUNC(glRasterPos4sv) \
+ USE_GL_FUNC(glReadBuffer) \
+ USE_GL_FUNC(glReadPixels) \
+ USE_GL_FUNC(glRectd) \
+ USE_GL_FUNC(glRectdv) \
+ USE_GL_FUNC(glRectf) \
+ USE_GL_FUNC(glRectfv) \
+ USE_GL_FUNC(glRecti) \
+ USE_GL_FUNC(glRectiv) \
+ USE_GL_FUNC(glRects) \
+ USE_GL_FUNC(glRectsv) \
+ USE_GL_FUNC(glRenderMode) \
+ USE_GL_FUNC(glRotated) \
+ USE_GL_FUNC(glRotatef) \
+ USE_GL_FUNC(glScaled) \
+ USE_GL_FUNC(glScalef) \
+ USE_GL_FUNC(glScissor) \
+ USE_GL_FUNC(glSelectBuffer) \
+ USE_GL_FUNC(glShadeModel) \
+ USE_GL_FUNC(glStencilFunc) \
+ USE_GL_FUNC(glStencilMask) \
+ USE_GL_FUNC(glStencilOp) \
+ USE_GL_FUNC(glTexCoord1d) \
+ USE_GL_FUNC(glTexCoord1dv) \
+ USE_GL_FUNC(glTexCoord1f) \
+ USE_GL_FUNC(glTexCoord1fv) \
+ USE_GL_FUNC(glTexCoord1i) \
+ USE_GL_FUNC(glTexCoord1iv) \
+ USE_GL_FUNC(glTexCoord1s) \
+ USE_GL_FUNC(glTexCoord1sv) \
+ USE_GL_FUNC(glTexCoord2d) \
+ USE_GL_FUNC(glTexCoord2dv) \
+ USE_GL_FUNC(glTexCoord2f) \
+ USE_GL_FUNC(glTexCoord2fv) \
+ USE_GL_FUNC(glTexCoord2i) \
+ USE_GL_FUNC(glTexCoord2iv) \
+ USE_GL_FUNC(glTexCoord2s) \
+ USE_GL_FUNC(glTexCoord2sv) \
+ USE_GL_FUNC(glTexCoord3d) \
+ USE_GL_FUNC(glTexCoord3dv) \
+ USE_GL_FUNC(glTexCoord3f) \
+ USE_GL_FUNC(glTexCoord3fv) \
+ USE_GL_FUNC(glTexCoord3i) \
+ USE_GL_FUNC(glTexCoord3iv) \
+ USE_GL_FUNC(glTexCoord3s) \
+ USE_GL_FUNC(glTexCoord3sv) \
+ USE_GL_FUNC(glTexCoord4d) \
+ USE_GL_FUNC(glTexCoord4dv) \
+ USE_GL_FUNC(glTexCoord4f) \
+ USE_GL_FUNC(glTexCoord4fv) \
+ USE_GL_FUNC(glTexCoord4i) \
+ USE_GL_FUNC(glTexCoord4iv) \
+ USE_GL_FUNC(glTexCoord4s) \
+ USE_GL_FUNC(glTexCoord4sv) \
+ USE_GL_FUNC(glTexCoordPointer) \
+ USE_GL_FUNC(glTexEnvf) \
+ USE_GL_FUNC(glTexEnvfv) \
+ USE_GL_FUNC(glTexEnvi) \
+ USE_GL_FUNC(glTexEnviv) \
+ USE_GL_FUNC(glTexGend) \
+ USE_GL_FUNC(glTexGendv) \
+ USE_GL_FUNC(glTexGenf) \
+ USE_GL_FUNC(glTexGenfv) \
+ USE_GL_FUNC(glTexGeni) \
+ USE_GL_FUNC(glTexGeniv) \
+ USE_GL_FUNC(glTexImage1D) \
+ USE_GL_FUNC(glTexImage2D) \
+ USE_GL_FUNC(glTexParameterf) \
+ USE_GL_FUNC(glTexParameterfv) \
+ USE_GL_FUNC(glTexParameteri) \
+ USE_GL_FUNC(glTexParameteriv) \
+ USE_GL_FUNC(glTexSubImage1D) \
+ USE_GL_FUNC(glTexSubImage2D) \
+ USE_GL_FUNC(glTranslated) \
+ USE_GL_FUNC(glTranslatef) \
+ USE_GL_FUNC(glVertex2d) \
+ USE_GL_FUNC(glVertex2dv) \
+ USE_GL_FUNC(glVertex2f) \
+ USE_GL_FUNC(glVertex2fv) \
+ USE_GL_FUNC(glVertex2i) \
+ USE_GL_FUNC(glVertex2iv) \
+ USE_GL_FUNC(glVertex2s) \
+ USE_GL_FUNC(glVertex2sv) \
+ USE_GL_FUNC(glVertex3d) \
+ USE_GL_FUNC(glVertex3dv) \
+ USE_GL_FUNC(glVertex3f) \
+ USE_GL_FUNC(glVertex3fv) \
+ USE_GL_FUNC(glVertex3i) \
+ USE_GL_FUNC(glVertex3iv) \
+ USE_GL_FUNC(glVertex3s) \
+ USE_GL_FUNC(glVertex3sv) \
+ USE_GL_FUNC(glVertex4d) \
+ USE_GL_FUNC(glVertex4dv) \
+ USE_GL_FUNC(glVertex4f) \
+ USE_GL_FUNC(glVertex4fv) \
+ USE_GL_FUNC(glVertex4i) \
+ USE_GL_FUNC(glVertex4iv) \
+ USE_GL_FUNC(glVertex4s) \
+ USE_GL_FUNC(glVertex4sv) \
+ USE_GL_FUNC(glVertexPointer) \
+ USE_GL_FUNC(glViewport) \
+ USE_GL_FUNC(glPointParameterfv) \
+
+#define WGL_FUNCS_GEN \
+ USE_WGL_FUNC(wglDeleteContext) \
+ USE_WGL_FUNC(wglGetCurrentContext) \
+ USE_WGL_FUNC(wglGetCurrentDC) \
+ USE_WGL_FUNC(wglGetProcAddress) \
+ USE_WGL_FUNC(wglMakeCurrent) \
+ USE_WGL_FUNC(wglShareLists) \
+ USE_WGL_FUNC(wglSwapLayerBuffers) \
+ USE_WGL_FUNC(wglChoosePixelFormat) \
+ USE_WGL_FUNC(wglDescribePixelFormat) \
+ USE_WGL_FUNC(wglGetPixelFormat) \
+ USE_WGL_FUNC(wglSetPixelFormat)
+
+#define VBOX_FUNCS_GEN \
+ USE_WGL_FUNC(VBoxCreateContext) \
+ USE_WGL_FUNC(VBoxFlushToHost)
+
+/* OpenGL extensions. */
+typedef enum wined3d_gl_extension
+{
+ WINED3D_GL_EXT_NONE,
+
+ /* APPLE */
+ APPLE_CLIENT_STORAGE,
+ APPLE_FENCE,
+ APPLE_FLOAT_PIXELS,
+ APPLE_FLUSH_BUFFER_RANGE,
+ APPLE_FLUSH_RENDER,
+ APPLE_YCBCR_422,
+ /* ARB */
+ ARB_COLOR_BUFFER_FLOAT,
+ ARB_DEPTH_BUFFER_FLOAT,
+ ARB_DEPTH_CLAMP,
+ ARB_DEPTH_TEXTURE,
+ ARB_DRAW_BUFFERS,
+ ARB_FRAGMENT_PROGRAM,
+ ARB_FRAGMENT_SHADER,
+ ARB_FRAMEBUFFER_OBJECT,
+ ARB_GEOMETRY_SHADER4,
+ ARB_HALF_FLOAT_PIXEL,
+ ARB_HALF_FLOAT_VERTEX,
+ ARB_IMAGING,
+ ARB_MAP_BUFFER_RANGE,
+ ARB_MULTISAMPLE,
+ ARB_MULTITEXTURE,
+ ARB_OCCLUSION_QUERY,
+ ARB_PIXEL_BUFFER_OBJECT,
+ ARB_POINT_PARAMETERS,
+ ARB_POINT_SPRITE,
+ ARB_PROVOKING_VERTEX,
+ ARB_SHADER_OBJECTS,
+ ARB_SHADER_TEXTURE_LOD,
+ ARB_SHADING_LANGUAGE_100,
+ ARB_SYNC,
+ ARB_TEXTURE_BORDER_CLAMP,
+ ARB_TEXTURE_COMPRESSION,
+ ARB_TEXTURE_CUBE_MAP,
+ ARB_TEXTURE_ENV_ADD,
+ ARB_TEXTURE_ENV_COMBINE,
+ ARB_TEXTURE_ENV_DOT3,
+ ARB_TEXTURE_FLOAT,
+ ARB_TEXTURE_MIRRORED_REPEAT,
+ ARB_TEXTURE_NON_POWER_OF_TWO,
+ ARB_TEXTURE_RECTANGLE,
+ ARB_TEXTURE_RG,
+ ARB_VERTEX_ARRAY_BGRA,
+ ARB_VERTEX_BLEND,
+ ARB_VERTEX_BUFFER_OBJECT,
+ ARB_VERTEX_PROGRAM,
+ ARB_VERTEX_SHADER,
+ /* ATI */
+ ATI_FRAGMENT_SHADER,
+ ATI_SEPARATE_STENCIL,
+ ATI_TEXTURE_COMPRESSION_3DC,
+ ATI_TEXTURE_ENV_COMBINE3,
+ ATI_TEXTURE_MIRROR_ONCE,
+ /* EXT */
+ EXT_BLEND_COLOR,
+ EXT_BLEND_EQUATION_SEPARATE,
+ EXT_BLEND_FUNC_SEPARATE,
+ EXT_BLEND_MINMAX,
+ EXT_DRAW_BUFFERS2,
+ EXT_FOG_COORD,
+ EXT_FRAMEBUFFER_BLIT,
+ EXT_FRAMEBUFFER_MULTISAMPLE,
+ EXT_FRAMEBUFFER_OBJECT,
+ EXT_GPU_PROGRAM_PARAMETERS,
+ EXT_GPU_SHADER4,
+ EXT_PACKED_DEPTH_STENCIL,
+ EXT_PALETTED_TEXTURE,
+ EXT_POINT_PARAMETERS,
+ EXT_PROVOKING_VERTEX,
+ EXT_SECONDARY_COLOR,
+ EXT_STENCIL_TWO_SIDE,
+ EXT_STENCIL_WRAP,
+ EXT_TEXTURE3D,
+ EXT_TEXTURE_COMPRESSION_RGTC,
+ EXT_TEXTURE_COMPRESSION_S3TC,
+ EXT_TEXTURE_ENV_ADD,
+ EXT_TEXTURE_ENV_COMBINE,
+ EXT_TEXTURE_ENV_DOT3,
+ EXT_TEXTURE_FILTER_ANISOTROPIC,
+ EXT_TEXTURE_LOD_BIAS,
+ EXT_TEXTURE_SRGB,
+ EXT_VERTEX_ARRAY_BGRA,
+ /* NVIDIA */
+ NV_DEPTH_CLAMP,
+ NV_FENCE,
+ NV_FOG_DISTANCE,
+ NV_FRAGMENT_PROGRAM,
+ NV_FRAGMENT_PROGRAM2,
+ NV_FRAGMENT_PROGRAM_OPTION,
+ NV_HALF_FLOAT,
+ NV_LIGHT_MAX_EXPONENT,
+ NV_REGISTER_COMBINERS,
+ NV_REGISTER_COMBINERS2,
+ NV_TEXGEN_REFLECTION,
+ NV_TEXTURE_ENV_COMBINE4,
+ NV_TEXTURE_SHADER,
+ NV_TEXTURE_SHADER2,
+ NV_VERTEX_PROGRAM,
+ NV_VERTEX_PROGRAM1_1,
+ NV_VERTEX_PROGRAM2,
+ NV_VERTEX_PROGRAM2_OPTION,
+ NV_VERTEX_PROGRAM3,
+ /* SGI */
+ SGIS_GENERATE_MIPMAP,
+ SGI_VIDEO_SYNC,
+ /* WGL extensions */
+ WGL_ARB_PIXEL_FORMAT,
+ WGL_WINE_PIXEL_FORMAT_PASSTHROUGH,
+
+ VBOX_SHARED_CONTEXTS,
+
+ /* Internally used */
+ WINE_NORMALIZED_TEXRECT,
+
+ WINED3D_GL_EXT_COUNT,
+} GL_SupportedExt;
+
+/* GL_APPLE_client_storage */
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85b2
+#endif
+
+/* GL_APPLE_fence */
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#define GL_DRAW_PIXELS_APPLE 0x8a0a
+#define GL_FENCE_APPLE 0x8a0b
+#endif
+typedef void (WINE_GLAPI *PGLFNGENFENCESAPPLEPROC)(GLsizei, GLuint *);
+typedef void (WINE_GLAPI *PGLFNDELETEFENCESAPPLEPROC)(GLuint, const GLuint *);
+typedef void (WINE_GLAPI *PGLFNSETFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTFENCEAPPLEPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNISFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTOBJECTAPPLEPROC)(GLenum, GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHOBJECTAPPLEPROC)(GLenum, GLuint);
+
+/* GL_APPLE_float_pixels */
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#define GL_HALF_APPLE 0x140b
+#define GL_COLOR_FLOAT_APPLE 0x8a0f
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_RGBA_FLOAT16_APPLE 0x881a
+#define GL_RGB_FLOAT16_APPLE 0x881b
+#define GL_ALPHA_FLOAT16_APPLE 0x881c
+#define GL_INTENSITY_FLOAT16_APPLE 0x881d
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881e
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881f
+#endif
+
+/* GL_APPLE_flush_buffer_range */
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8a12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8a13
+typedef void (WINE_GLAPI *PGLFNBUFFERPARAMETERIAPPLE)(GLenum target, GLenum pname, GLint param);
+typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+
+/* GL_APPLE_flush_render */
+typedef void (WINE_GLAPI *PGLFNFLUSHRENDERAPPLEPROC)(void);
+typedef void (WINE_GLAPI *PGLFNFINISHRENDERAPPLEPROC)(void);
+
+/* GL_APPLE_ycbcr_422 */
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#define GL_YCBCR_422_APPLE 0x85b9
+#define UNSIGNED_SHORT_8_8_APPLE 0x85ba
+#define UNSIGNED_SHORT_8_8_REV_APPLE 0x85bb
+#endif
+
+/* GL_ARB_color_buffer_float */
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891a
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891b
+#define GL_CLAMP_READ_COLOR_ARB 0x891c
+#define GL_FIXED_ONLY_ARB 0x891d
+#endif
+typedef void (WINE_GLAPI *PGLFNCLAMPCOLORARBPROC)(GLenum target, GLenum clamp);
+
+/* GL_ARB_depth_buffer_float */
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#define GL_DEPTH_COMPONENT32F 0x8cac
+#define GL_DEPTH32F_STENCIL8 0x8cad
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8dad
+#endif
+
+/* GL_ARB_depth_clamp */
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#define GL_DEPTH_CLAMP 0x864f
+#endif
+
+/* GL_ARB_depth_texture */
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#define GL_DEPTH_COMPONENT16_ARB 0x81a5
+#define GL_DEPTH_COMPONENT24_ARB 0x81a6
+#define GL_DEPTH_COMPONENT32_ARB 0x81a7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884a
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884b
+#endif
+
+/* GL_ARB_draw_buffers */
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882a
+#define GL_DRAW_BUFFER6_ARB 0x882b
+#define GL_DRAW_BUFFER7_ARB 0x882c
+#define GL_DRAW_BUFFER8_ARB 0x882d
+#define GL_DRAW_BUFFER9_ARB 0x882e
+#define GL_DRAW_BUFFER10_ARB 0x882f
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+#endif
+typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSARBPROC)(GLsizei n, const GLenum *bufs);
+
+/* GL_ARB_fragment_program */
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880a
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880b
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880c
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880d
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880e
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880f
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
+#endif
+
+/* GL_ARB_fragment_shader */
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ARB 0x8b30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8b49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8b8b
+#endif
+
+/* GL_ARB_framebuffer_object */
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#define GL_FRAMEBUFFER 0x8d40
+#define GL_READ_FRAMEBUFFER 0x8ca8
+#define GL_DRAW_FRAMEBUFFER 0x8ca9
+#define GL_RENDERBUFFER 0x8d41
+#define GL_STENCIL_INDEX1 0x8d46
+#define GL_STENCIL_INDEX4 0x8d47
+#define GL_STENCIL_INDEX8 0x8d48
+#define GL_STENCIL_INDEX16 0x8d49
+#define GL_RENDERBUFFER_WIDTH 0x8d42
+#define GL_RENDERBUFFER_HEIGHT 0x8d43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8d44
+#define GL_RENDERBUFFER_RED_SIZE 0x8d50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8d51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8d52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8d53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8d54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8d55
+#define GL_RENDERBUFFER_SAMPLES 0x8cab
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8cd0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8cd1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8cd2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8cd3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8cd4
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_SRGB 0x8c40
+#define GL_UNSIGNED_NORMALIZED 0x8c17
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_INDEX 0x8222
+#define GL_COLOR_ATTACHMENT0 0x8ce0
+#define GL_COLOR_ATTACHMENT1 0x8ce1
+#define GL_COLOR_ATTACHMENT2 0x8ce2
+#define GL_COLOR_ATTACHMENT3 0x8ce3
+#define GL_COLOR_ATTACHMENT4 0x8ce4
+#define GL_COLOR_ATTACHMENT5 0x8ce5
+#define GL_COLOR_ATTACHMENT6 0x8ce6
+#define GL_COLOR_ATTACHMENT7 0x8ce7
+#define GL_COLOR_ATTACHMENT8 0x8ce8
+#define GL_COLOR_ATTACHMENT9 0x8ce9
+#define GL_COLOR_ATTACHMENT10 0x8cea
+#define GL_COLOR_ATTACHMENT11 0x8ceb
+#define GL_COLOR_ATTACHMENT12 0x8cec
+#define GL_COLOR_ATTACHMENT13 0x8ced
+#define GL_COLOR_ATTACHMENT14 0x8cee
+#define GL_COLOR_ATTACHMENT15 0x8cef
+#define GL_DEPTH_ATTACHMENT 0x8d00
+#define GL_STENCIL_ATTACHMENT 0x8d20
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821a
+#define GL_MAX_SAMPLES 0x8d57
+#define GL_FRAMEBUFFER_COMPLETE 0x8cd5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8cd6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8cd7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8cdb
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8cdc
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8cdd
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8d56
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_FRAMEBUFFER_BINDING 0x8ca6
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8ca6
+#define GL_READ_FRAMEBUFFER_BINDING 0x8caa
+#define GL_RENDERBUFFER_BINDING 0x8ca7
+#define GL_MAX_COLOR_ATTACHMENTS 0x8cdf
+#define GL_MAX_RENDERBUFFER_SIZE 0x84e8
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_DEPTH_STENCIL 0x84f9
+#define GL_UNSIGNED_INT_24_8 0x84fa
+#define GL_DEPTH24_STENCIL8 0x88f0
+#define GL_TEXTURE_STENCIL_SIZE 0x88f1
+#endif
+typedef GLboolean (WINE_GLAPI *PGLFNGLISRENDERBUFFERPROC)(GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat,
+ GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples,
+ GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (WINE_GLAPI *PGLFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);
+typedef GLenum (WINE_GLAPI *PGLFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level, GLint layer);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment,
+ GLuint texture, GLint level, GLint layer);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment,
+ GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment,
+ GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (WINE_GLAPI *PGLFNGLGENERATEMIPMAPPROC)(GLenum target);
+
+/* GL_ARB_geometry_shader4 */
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#define GL_GEOMETRY_SHADER_ARB 0x8dd9
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8dda
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8ddb
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8ddc
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8c29
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8ddd
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8dde
+#define GL_MAX_VARYING_COMPONENTS_ARB 0x8b4b
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8ddf
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8de0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8de1
+#define GL_LINES_ADJACENCY_ARB 0x000a
+#define GL_LINE_STRIP_ADJACENCY_ARB 0x000b
+#define GL_TRIANGLES_ADJACENCY_ARB 0x000c
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000d
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8da8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8da9
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8da7
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8cd4
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#endif
+typedef void (WINE_GLAPI *PGLFNPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value);
+typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment,
+ GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment,
+ GLuint texture, GLint level, GLint layer);
+typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment,
+ GLuint texture, GLint level, GLenum face);
+
+/* GL_ARB_half_float_pixel */
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+#define GL_HALF_FLOAT_ARB 0x140b
+#endif
+
+/* GL_ARB_half_float_vertex */
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+/* No _ARB, see extension spec */
+#define GL_HALF_FLOAT 0x140b
+#endif
+
+/* GL_ARB_imaging */
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_FUNC_ADD 0x8006
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BLEND_EQUATION 0x8009
+#define GL_FUNC_SUBTRACT 0x800a
+#define GL_FUNC_REVERSE_SUBTRACT 0x800b
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801a
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801b
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801d
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801f
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801e
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801f
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802a
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802b
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802c
+#define GL_HISTOGRAM_SINK 0x802d
+#define GL_MINMAX 0x802e
+#define GL_MINMAX_FORMAT 0x802f
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_COLOR_MATRIX 0x80b1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80b2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80b3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80b4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80b5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80b6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80b7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80b8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80b9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80ba
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80bb
+#define GL_COLOR_TABLE 0x80d0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80d1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80d2
+#define GL_PROXY_COLOR_TABLE 0x80d3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80d4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80d5
+#define GL_COLOR_TABLE_SCALE 0x80d6
+#define GL_COLOR_TABLE_BIAS 0x80d7
+#define GL_COLOR_TABLE_FORMAT 0x80d8
+#define GL_COLOR_TABLE_WIDTH 0x80d9
+#define GL_COLOR_TABLE_RED_SIZE 0x80da
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80db
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80dc
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80dd
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80de
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80df
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDCOLORPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONPROC)(GLenum mode);
+
+/* GL_ARB_map_buffer_range */
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#endif
+typedef GLvoid *(WINE_GLAPI *PGLFNMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length);
+
+/* GL_ARB_multisample */
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#define GL_MULTISAMPLE_ARB 0x809d
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809e
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809f
+#define GL_SAMPLE_COVERAGE_ARB 0x80a0
+#define GL_SAMPLE_BUFFERS_ARB 0x80a8
+#define GL_SAMPLES_ARB 0x80a9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80aa
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80ab
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLSAMPLECOVERAGEARBPROC)(GLclampf value, GLboolean invert);
+
+/* GL_ARB_multitexture */
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#define GL_TEXTURE0_ARB 0x84c0
+#define GL_TEXTURE1_ARB 0x84c1
+#define GL_TEXTURE2_ARB 0x84c2
+#define GL_TEXTURE3_ARB 0x84c3
+#define GL_TEXTURE4_ARB 0x84c4
+#define GL_TEXTURE5_ARB 0x84c5
+#define GL_TEXTURE6_ARB 0x84c6
+#define GL_TEXTURE7_ARB 0x84c7
+#define GL_TEXTURE8_ARB 0x84c8
+#define GL_TEXTURE9_ARB 0x84c9
+#define GL_TEXTURE10_ARB 0x84ca
+#define GL_TEXTURE11_ARB 0x84cb
+#define GL_TEXTURE12_ARB 0x84cc
+#define GL_TEXTURE13_ARB 0x84cd
+#define GL_TEXTURE14_ARB 0x84ce
+#define GL_TEXTURE15_ARB 0x84cf
+#define GL_TEXTURE16_ARB 0x84d0
+#define GL_TEXTURE17_ARB 0x84d1
+#define GL_TEXTURE18_ARB 0x84d2
+#define GL_TEXTURE19_ARB 0x84d3
+#define GL_TEXTURE20_ARB 0x84d4
+#define GL_TEXTURE21_ARB 0x84d5
+#define GL_TEXTURE22_ARB 0x84d6
+#define GL_TEXTURE23_ARB 0x84d7
+#define GL_TEXTURE24_ARB 0x84d8
+#define GL_TEXTURE25_ARB 0x84d9
+#define GL_TEXTURE26_ARB 0x84da
+#define GL_TEXTURE27_ARB 0x84db
+#define GL_TEXTURE28_ARB 0x84dc
+#define GL_TEXTURE29_ARB 0x84dd
+#define GL_TEXTURE30_ARB 0x84de
+#define GL_TEXTURE31_ARB 0x84df
+#define GL_ACTIVE_TEXTURE_ARB 0x84e0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84e1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84e2
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLACTIVETEXTUREARBPROC)(GLenum texture);
+typedef void (WINE_GLAPI *WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FARBPROC)(GLenum target,
+ GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort *v);
+
+/* GL_ARB_occlusion_query */
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#define GL_SAMPLES_PASSED_ARB 0x8914
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#endif
+typedef void (WINE_GLAPI *PGLFNGENQUERIESARBPROC)(GLsizei n, GLuint *queries);
+typedef void (WINE_GLAPI *PGLFNDELETEQUERIESARBPROC)(GLsizei n, const GLuint *queries);
+typedef GLboolean (WINE_GLAPI *PGLFNISQUERYARBPROC)(GLuint query);
+typedef void (WINE_GLAPI *PGLFNBEGINQUERYARBPROC)(GLenum target, GLuint query);
+typedef void (WINE_GLAPI *PGLFNENDQUERYARBPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETQUERYOBJECTIVARBPROC)(GLuint query, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETQUERYOBJECTUIVARBPROC)(GLuint query, GLenum pname, GLuint *params);
+
+/* GL_ARB_pixel_buffer_object */
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88eb
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88ec
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ed
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88ef
+#endif
+
+/* GL_ARB_point_parameters */
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat *params);
+
+/* GL_ARB_point_sprite */
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_COORD_REPLACE_ARB 0x8862
+#endif
+
+/* GL_ARB_provoking_vertex */
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#define GL_FIRST_VERTEX_CONVENTION 0x8e4d
+#define GL_LAST_VERTEX_CONVENTION 0x8e4e
+#define GL_PROVOKING_VERTEX 0x8e4f
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8e4c
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPROVOKINGVERTEXPROC)(GLenum mode);
+
+/* GL_ARB_shader_objects */
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+typedef char GLcharARB;
+#ifdef RT_OS_DARWIN
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+#define GL_PROGRAM_OBJECT_ARB 0x8b40
+#define GL_OBJECT_TYPE_ARB 0x8b4e
+#define GL_OBJECT_SUBTYPE_ARB 0x8b4f
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8b80
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8b81
+#define GL_OBJECT_LINK_STATUS_ARB 0x8b82
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8b83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8b84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8b85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8b86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8b87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8b88
+#define GL_SHADER_OBJECT_ARB 0x8b48
+#define GL_FLOAT_VEC2_ARB 0x8b50
+#define GL_FLOAT_VEC3_ARB 0x8b51
+#define GL_FLOAT_VEC4_ARB 0x8b52
+#define GL_INT_VEC2_ARB 0x8b53
+#define GL_INT_VEC3_ARB 0x8b54
+#define GL_INT_VEC4_ARB 0x8b55
+#define GL_BOOL_ARB 0x8b56
+#define GL_BOOL_VEC2_ARB 0x8b57
+#define GL_BOOL_VEC3_ARB 0x8b58
+#define GL_BOOL_VEC4_ARB 0x8b59
+#define GL_FLOAT_MAT2_ARB 0x8b5a
+#define GL_FLOAT_MAT3_ARB 0x8b5b
+#define GL_FLOAT_MAT4_ARB 0x8b5c
+#define GL_SAMPLER_1D_ARB 0x8b5d
+#define GL_SAMPLER_2D_ARB 0x8b5e
+#define GL_SAMPLER_3D_ARB 0x8b5f
+#define GL_SAMPLER_CUBE_ARB 0x8b60
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8b61
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8b62
+#define GL_SAMPLER_2D_RECT_ARB 0x8b63
+#define GL_SAMPELR_2D_RECT_SHADOW_ARB 0x8b64
+#endif
+
+/* GL_ARB_shading_language_100 */
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8b8c
+#endif
+
+/* GL_ARB_sync */
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xffffffffffffffffULL
+#define GL_ALREADY_SIGNALED 0x911a
+#define GL_TIMEOUT_EXPIRED 0x911b
+#define GL_CONDITION_SATISFIED 0x911c
+#define GL_WAIT_FAILED 0x911d
+#endif
+typedef GLsync (WINE_GLAPI *PGLFNFENCESYNCPROC)(GLenum condition, GLbitfield flags);
+typedef GLboolean (WINE_GLAPI *PGLFNISSYNCPROC)(GLsync sync);
+typedef GLvoid (WINE_GLAPI *PGLFNDELETESYNCPROC)(GLsync sync);
+typedef GLenum (WINE_GLAPI *PGLFNCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef GLvoid (WINE_GLAPI *PGLFNWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef GLvoid (WINE_GLAPI *PGLFNGETINTEGER64VPROC)(GLenum pname, GLint64 *params);
+typedef GLvoid (WINE_GLAPI *PGLFNGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufsize,
+ GLsizei *length, GLint *values);
+
+/* GL_ARB_texture_border_clamp */
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB 0x812d
+#endif
+
+/* GL_ARB_texture_cube_map */
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851a
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851b
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851c
+#endif
+
+/* GL_ARB_texture_env_dot3 */
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#define GL_DOT3_RGB_ARB 0x86ae
+#define GL_DOT3_RGBA_ARB 0x86af
+#endif
+
+/* GL_ARB_texture_float */
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_RGBA16F_ARB 0x881a
+#define GL_RGB16F_ARB 0x881b
+#endif
+
+/* GL_ARB_texture_mirrored_repeat */
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#endif
+
+/* GL_ARB_texture_rectangle */
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_ARB 0x84f5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84f6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84f7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84f8
+#define GL_SAMPLER_2D_RECT_ARB 0x8b63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8b64
+#endif
+
+/* GL_ARB_texture_rg */
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822a
+#define GL_RG8 0x822b
+#define GL_RG16 0x822c
+#define GL_R16F 0x822d
+#define GL_R32F 0x822e
+#define GL_RG16F 0x822f
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823a
+#define GL_RG32I 0x823b
+#define GL_RG32UI 0x823c
+#endif
+
+/* GL_ARB_vertex_blend */
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#define GL_MAX_VERTEX_UNITS_ARB 0x86a4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86a5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86a6
+#define GL_VERTEX_BLEND_ARB 0x86a7
+#define GL_CURRENT_WEIGHT_ARB 0x86a8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86a9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86aa
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86ab
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86ac
+#define GL_WEIGHT_ARRAY_ARB 0x86ad
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850a
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872a
+#define GL_MODELVIEW11_ARB 0x872b
+#define GL_MODELVIEW12_ARB 0x872c
+#define GL_MODELVIEW13_ARB 0x872d
+#define GL_MODELVIEW14_ARB 0x872e
+#define GL_MODELVIEW15_ARB 0x872f
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873a
+#define GL_MODELVIEW27_ARB 0x873b
+#define GL_MODELVIEW28_ARB 0x873c
+#define GL_MODELVIEW29_ARB 0x873d
+#define GL_MODELVIEW30_ARB 0x873e
+#define GL_MODELVIEW31_ARB 0x873f
+#endif
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTPOINTERARB)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTBV)(GLint size, const GLbyte *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTSV)(GLint size, const GLshort *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTIV)(GLint size, const GLint *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTFV)(GLint size, const GLfloat *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTDV)(GLint size, const GLdouble *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUBV)(GLint size, const GLubyte *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUSV)(GLint size, const GLushort *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUIV)(GLint size, const GLuint *weights);
+typedef void (WINE_GLAPI *PGLFNGLVERTEXBLENDARB)(GLint count);
+
+/* GL_ARB_vertex_buffer_object */
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889a
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889b
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889c
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889d
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889e
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889f
+#define GL_READ_ONLY_ARB 0x88b8
+#define GL_WRITE_ONLY_ARB 0x88b9
+#define GL_READ_WRITE_ARB 0x88ba
+#define GL_BUFFER_ACCESS_ARB 0x88bb
+#define GL_BUFFER_MAPPED_ARB 0x88bc
+#define GL_BUFFER_MAP_POINTER_ARB 0x88bd
+#define GL_STREAM_DRAW_ARB 0x88e0
+#define GL_STREAM_READ_ARB 0x88e1
+#define GL_STREAM_COPY_ARB 0x88e2
+#define GL_STATIC_DRAW_ARB 0x88e4
+#define GL_STATIC_READ_ARB 0x88e5
+#define GL_STATIC_COPY_ARB 0x88e6
+#define GL_DYNAMIC_DRAW_ARB 0x88e8
+#define GL_DYNAMIC_READ_ARB 0x88e9
+#define GL_DYNAMIC_COPY_ARB 0x88ea
+#endif
+typedef void (WINE_GLAPI *PGLFNBINDBUFFERARBPROC)(GLenum target, GLuint buffer);
+typedef void (WINE_GLAPI *PGLFNDELETEBUFFERSARBPROC)(GLsizei n, const GLuint *buffers);
+typedef void (WINE_GLAPI *PGLFNGENBUFFERSARBPROC)(GLsizei n, GLuint *buffers);
+typedef GLboolean (WINE_GLAPI *PGLFNISBUFFERARBPROC)(GLuint buffer);
+typedef void (WINE_GLAPI *PGLFNBUFFERDATAARBPROC)(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (WINE_GLAPI *PGLFNBUFFERSUBDATAARBPROC)(GLenum target,
+ GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef GLvoid* (WINE_GLAPI *PGLFNMAPBUFFERARBPROC)(GLenum target, GLenum access);
+typedef GLboolean (WINE_GLAPI *PGLFNUNMAPBUFFERARBPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, GLvoid* *params);
+
+/* GL_ARB_vertex_program */
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886a
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88a0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88a1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88a2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88a3
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88a4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88a5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88a6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88a7
+#define GL_PROGRAM_PARAMETERS_ARB 0x88a8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88a9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88aa
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88ab
+#define GL_PROGRAM_ATTRIBS_ARB 0x88ac
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88ad
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88ae
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88af
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88b0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88b1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88b2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88b3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88b4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88b5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88b6
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864b
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88b7
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862f
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862e
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_MATRIX0_ARB 0x88c0
+#define GL_MATRIX1_ARB 0x88c1
+#define GL_MATRIX2_ARB 0x88c2
+#define GL_MATRIX3_ARB 0x88c3
+#define GL_MATRIX4_ARB 0x88c4
+#define GL_MATRIX5_ARB 0x88c5
+#define GL_MATRIX6_ARB 0x88c6
+#define GL_MATRIX7_ARB 0x88c7
+#define GL_MATRIX8_ARB 0x88c8
+#define GL_MATRIX9_ARB 0x88c9
+#define GL_MATRIX10_ARB 0x88ca
+#define GL_MATRIX11_ARB 0x88cb
+#define GL_MATRIX12_ARB 0x88cc
+#define GL_MATRIX13_ARB 0x88cd
+#define GL_MATRIX14_ARB 0x88ce
+#define GL_MATRIX15_ARB 0x88cf
+#define GL_MATRIX16_ARB 0x88d0
+#define GL_MATRIX17_ARB 0x88d1
+#define GL_MATRIX18_ARB 0x88d2
+#define GL_MATRIX19_ARB 0x88d3
+#define GL_MATRIX20_ARB 0x88d4
+#define GL_MATRIX21_ARB 0x88d5
+#define GL_MATRIX22_ARB 0x88d6
+#define GL_MATRIX23_ARB 0x88d7
+#define GL_MATRIX24_ARB 0x88d8
+#define GL_MATRIX25_ARB 0x88d9
+#define GL_MATRIX26_ARB 0x88da
+#define GL_MATRIX27_ARB 0x88db
+#define GL_MATRIX28_ARB 0x88dc
+#define GL_MATRIX29_ARB 0x88dd
+#define GL_MATRIX30_ARB 0x88de
+#define GL_MATRIX31_ARB 0x88df
+#endif
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size,
+ GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+typedef void (WINE_GLAPI *PGLFNENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+typedef void (WINE_GLAPI *PGLFNBINDPROGRAMARBPROC)(GLenum target, GLuint program);
+typedef void (WINE_GLAPI *PGLFNDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint *programs);
+typedef void (WINE_GLAPI *PGLFNGENPROGRAMSARBPROC)(GLsizei n, GLuint *programs);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4DARBPROC)(GLenum target,
+ GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4FARBPROC)(GLenum target,
+ GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target,
+ GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target,
+ GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, GLvoid *string);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (WINE_GLAPI *PGLFNISPROGRAMARBPROC)(GLuint program);
+
+/* GL_ARB_vertex_shader */
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#define GL_VERTEX_SHADER_ARB 0x8b31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8b4a
+#define GL_MAX_VARYING_FLOATS_ARB 0x8b4b
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8b4c
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8b4d
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8b89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8b8a
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef GLint (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index,
+ GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4FARBPROC)(GLint location,
+ GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETINFOLOGARBPROC)(GLhandleARB obj,
+ GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType);
+typedef void (WINE_GLAPI *WINED3D_PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj,
+ GLsizei count, const GLcharARB* *string, const GLint *length);
+typedef void (WINE_GLAPI *WINED3D_PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC)(void);
+typedef void (WINE_GLAPI *WINED3D_PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj,
+ GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLGETHANDLEARBPROC)(GLenum pname);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj,
+ GLsizei maxLength, GLsizei *length, GLcharARB *source);
+typedef void (WINE_GLAPI *WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj,
+ GLuint index, const GLcharARB *name);
+typedef GLint (WINE_GLAPI *WINED3D_PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name);
+
+/* GL_ATI_fragment_shader */
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896a
+#define GL_CND0_ATI 0x896b
+#define GL_DOT2_ADD_ATI 0x896c
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896d
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+#endif
+typedef GLuint (WINE_GLAPI *PGLFNGENFRAGMENTSHADERSATI)(GLuint range);
+typedef void (WINE_GLAPI *PGLFNBINDFRAGMENTSHADERATI)(GLuint id);
+typedef void (WINE_GLAPI *PGLFNDELETEFRAGMENTSHADERATI)(GLuint id);
+typedef void (WINE_GLAPI *PGLFNBEGINFRAGMENTSHADERATI)(void);
+typedef void (WINE_GLAPI *PGLFNENDFRAGMENTSHADERATI)(void);
+typedef void (WINE_GLAPI *PGLFNPASSTEXCOORDATI)(GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (WINE_GLAPI *PGLFNSAMPLEMAPATI)(GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP1ATI)(GLenum op, GLuint dst, GLuint dstMask,
+ GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP2ATI)(GLenum op, GLuint dst, GLuint dstMask,
+ GLuint dstMod, GLuint arg1, GLuint arg1Rep,
+ GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
+ GLuint arg2Mod);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP3ATI)(GLenum op, GLuint dst, GLuint dstMask,
+ GLuint dstMod, GLuint arg1, GLuint arg1Rep,
+ GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
+ GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
+ GLuint arg3Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP1ATI)(GLenum op, GLuint dst, GLuint dstMod,
+ GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP2ATI)(GLenum op, GLuint dst, GLuint dstMod,
+ GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
+ GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP3ATI)(GLenum op, GLuint dst, GLuint dstMod,
+ GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
+ GLuint arg2, GLuint arg2Rep, GLuint arg2Mod,
+ GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (WINE_GLAPI *PGLFNSETFRAGMENTSHADERCONSTANTATI)(GLuint dst, const GLfloat *value);
+
+/* GL_ATI_separate_stencil */
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+#endif
+typedef void (WINE_GLAPI *PGLFNSTENCILOPSEPARATEATIPROC)(GLenum, GLenum, GLenum, GLenum);
+typedef void (WINE_GLAPI *PGLFNSTENCILFUNCSEPARATEATIPROC)(GLenum, GLenum, GLint, GLuint);
+
+/* GL_ATI_texture_compression_3dc */
+#ifndef GL_ATI_texture_compression_3dc
+#define GL_ATI_texture_compression_3dc 1
+#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837
+#endif
+
+/* GL_ATI_texture_env_combine3 */
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+/* #define ONE */
+/* #define ZERO */
+#endif
+
+/* GL_ATI_texture_mirror_once */
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+#endif
+
+/* GL_EXT_blend_equation_separate */
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha);
+
+/* GL_EXT_blend_func_separate */
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#define GL_BLEND_DST_RGB_EXT 0x80c8
+#define GL_BLEND_SRC_RGB_EXT 0x80c9
+#define GL_BLEND_DST_ALPHA_EXT 0x80ca
+#define GL_BLEND_SRC_ALPHA_EXT 0x80cb
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB,
+ GLenum sfactorAlpha, GLenum dfactorAlpha);
+
+/* GL_EXT_draw_buffers2 */
+typedef GLvoid (WINE_GLAPI *PGLFNCOLORMASKINDEXEDEXTPROC)(GLuint buffer_idx, GLboolean r, GLboolean g,
+ GLboolean b, GLboolean a);
+typedef GLvoid (WINE_GLAPI *PGLFNGETBOOLEANINDEXEDVEXTPROC)(GLenum param, GLuint index, GLboolean *value);
+typedef GLvoid (WINE_GLAPI *PGLFNGETINTEGERINDEXEDVEXTPROC)(GLenum param, GLuint index, GLint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNENABLEINDEXEDEXTPROC)(GLenum target, GLuint index);
+typedef GLvoid (WINE_GLAPI *PGLFNDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index);
+typedef GLboolean (WINE_GLAPI *PGLFNISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index);
+
+/* GL_EXT_fog_coord */
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+#endif
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDFEXTPROC)(GLfloat coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDFVEXTPROC)(const GLfloat *coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDDEXTPROC)(GLdouble coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDDVEXTPROC)(const GLdouble *coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, GLvoid *data);
+
+/* GL_EXT_framebuffer_blit */
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#define GL_READ_FRAMEBUFFER_EXT 0x8ca8
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8ca9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8ca6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8caa
+#endif
+typedef void (WINE_GLAPI *PGLFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+
+/* GL_EXT_framebuffer_multisample */
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8cab
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8d56
+#define GL_MAX_SAMPLES_EXT 0x8d57
+#endif
+typedef void (WINE_GLAPI *PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples,
+ GLenum internalformat, GLsizei width, GLsizei height);
+
+/* GL_EXT_framebuffer_object */
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#define GL_FRAMEBUFFER_EXT 0x8d40
+#define GL_RENDERBUFFER_EXT 0x8d41
+#define GL_STENCIL_INDEX1_EXT 0x8d46
+#define GL_STENCIL_INDEX4_EXT 0x8d47
+#define GL_STENCIL_INDEX8_EXT 0x8d48
+#define GL_STENCIL_INDEX16_EXT 0x8d49
+#define GL_RENDERBUFFER_WIDTH_EXT 0x8d42
+#define GL_RENDERBUFFER_HEIGHT_EXT 0x8d43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8d44
+#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8d50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8d51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8d52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8d53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8d54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8d55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8cd0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8cd1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8cd2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8cd3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8cd4
+#define GL_COLOR_ATTACHMENT0_EXT 0x8ce0
+#define GL_COLOR_ATTACHMENT1_EXT 0x8ce1
+#define GL_COLOR_ATTACHMENT2_EXT 0x8ce2
+#define GL_COLOR_ATTACHMENT3_EXT 0x8ce3
+#define GL_COLOR_ATTACHMENT4_EXT 0x8ce4
+#define GL_COLOR_ATTACHMENT5_EXT 0x8ce5
+#define GL_COLOR_ATTACHMENT6_EXT 0x8ce6
+#define GL_COLOR_ATTACHMENT7_EXT 0x8ce7
+#define GL_COLOR_ATTACHMENT8_EXT 0x8ce8
+#define GL_COLOR_ATTACHMENT9_EXT 0x8ce9
+#define GL_COLOR_ATTACHMENT10_EXT 0x8cea
+#define GL_COLOR_ATTACHMENT11_EXT 0x8ceb
+#define GL_COLOR_ATTACHMENT12_EXT 0x8cec
+#define GL_COLOR_ATTACHMENT13_EXT 0x8ced
+#define GL_COLOR_ATTACHMENT14_EXT 0x8cee
+#define GL_COLOR_ATTACHMENT15_EXT 0x8cef
+#define GL_DEPTH_ATTACHMENT_EXT 0x8d00
+#define GL_STENCIL_ATTACHMENT_EXT 0x8d20
+#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8cd5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8cd6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8cd7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8cd9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8cda
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8cdb
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8cdc
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8cdd
+#define GL_FRAMEBUFFER_BINDING_EXT 0x8ca6
+#define GL_RENDERBUFFER_BINDING_EXT 0x8ca7
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8cdF
+#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84e8
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#endif
+typedef GLboolean (WINE_GLAPI *PGLFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target,
+ GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (WINE_GLAPI *PGLFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint *framebuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint *framebuffers);
+typedef GLenum (WINE_GLAPI *PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment,
+ GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target,
+ GLenum attachment, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGLGENERATEMIPMAPEXTPROC)(GLenum target);
+
+/* GL_EXT_gpu_program_parameters */
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target,
+ GLuint index, GLsizei count, const float *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target,
+ GLuint index, GLsizei count, const float *params);
+#endif
+
+/* GL_EXT_gpu_shader4 */
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88fd
+#define GL_SAMPLER_1D_ARRAY_EXT 0x8dc0
+#define GL_SAMPLER_2D_ARRAY_EXT 0x8dc1
+#define GL_SAMPLER_BUFFER_EXT 0x8dc2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8dc3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8dc4
+#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8dc5
+#define GL_UNSIGNED_INT_VEC2_EXT 0x8dc6
+#define GL_UNSIGNED_INT_VEC3_EXT 0x8dc7
+#define GL_UNSIGNED_INT_VEC4_EXT 0x8dc8
+#define GL_INT_SAMPLER_1D_EXT 0x8dc9
+#define GL_INT_SAMPLER_2D_EXT 0x8dca
+#define GL_INT_SAMPLER_3D_EXT 0x8dcb
+#define GL_INT_SAMPLER_CUBE_EXT 0x8dcc
+#define GL_INT_SAMPLER_2D_RECT_EXT 0x8dcd
+#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8dce
+#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8dcf
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8dd0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8dd1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8dd2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8dd3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8dd4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8dd5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8dd6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8dd7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8dd8
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905
+#endif
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer);
+typedef GLvoid (WINE_GLAPI *PGLFNGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM1UIEXTPROC)(GLint location, GLuint v0);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, const GLuint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color_number, const GLchar *name);
+typedef GLint (WINE_GLAPI *PGLFNGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar *name);
+
+/* GL_EXT_packed_depth_stencil */
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_EXT 0x84f9
+#define GL_UNSIGNED_INT_24_8_EXT 0x84fa
+#define GL_DEPTH24_STENCIL8_EXT 0x88f0
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88f1
+#endif
+
+/* GL_EXT_paletted_texture */
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#define GL_COLOR_INDEX1_EXT 0x80e2
+#define GL_COLOR_INDEX2_EXT 0x80e3
+#define GL_COLOR_INDEX4_EXT 0x80e4
+#define GL_COLOR_INDEX8_EXT 0x80e5
+#define GL_COLOR_INDEX12_EXT 0x80e6
+#define GL_COLOR_INDEX16_EXT 0x80e7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ed
+#endif
+typedef void (WINE_GLAPI *PGLFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat,
+ GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+
+/* GL_EXT_point_parameters */
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat *params);
+
+/* GL_EXT_provoking_vertex */
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8e4d
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8e4e
+#define GL_PROVOKING_VERTEX_EXT 0x8e4f
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8e4c
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode);
+
+/* GL_EXT_secondary_color */
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845a
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845b
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845c
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845d
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845e
+#endif
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer);
+
+/* GL_EXT_stencil_two_side */
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+#endif
+typedef void (WINE_GLAPI *PGLFNACTIVESTENCILFACEEXTPROC)(GLenum face);
+
+/* GL_EXT_stencil_wrap */
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+#endif
+
+/* GL_EXT_texture3D */
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#define GL_PACK_SKIP_IMAGES_EXT 0x806b
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806c
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806d
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806e
+#define GL_TEXTURE_3D_EXT 0x806f
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+#endif
+typedef void (WINE_GLAPI *PGLFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (WINE_GLAPI *PGLFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+ GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+
+/* GL_EXT_texture_compression_rgtc */
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8dbb
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8dbc
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8dbd
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8dbe
+#endif
+
+/* GL_EXT_texture_compression_s3tc */
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83f0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83f1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83f2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83f3
+#endif
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level,
+ GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
+ GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+ GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset,
+ GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img);
+
+/* GL_EXT_texture_env_combine */
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_SUBTRACT_EXT 0x84e7
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE3_RGB_EXT 0x8583
+#define GL_SOURCE4_RGB_EXT 0x8584
+#define GL_SOURCE5_RGB_EXT 0x8585
+#define GL_SOURCE6_RGB_EXT 0x8586
+#define GL_SOURCE7_RGB_EXT 0x8587
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858a
+#define GL_SOURCE3_ALPHA_EXT 0x858b
+#define GL_SOURCE4_ALPHA_EXT 0x858c
+#define GL_SOURCE5_ALPHA_EXT 0x858d
+#define GL_SOURCE6_ALPHA_EXT 0x858e
+#define GL_SOURCE7_ALPHA_EXT 0x858f
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND3_RGB_EXT 0x8593
+#define GL_OPERAND4_RGB_EXT 0x8594
+#define GL_OPERAND5_RGB_EXT 0x8595
+#define GL_OPERAND6_RGB_EXT 0x8596
+#define GL_OPERAND7_RGB_EXT 0x8597
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859a
+#define GL_OPERAND3_ALPHA_EXT 0x859b
+#define GL_OPERAND4_ALPHA_EXT 0x859c
+#define GL_OPERAND5_ALPHA_EXT 0x859d
+#define GL_OPERAND6_ALPHA_EXT 0x859e
+#define GL_OPERAND7_ALPHA_EXT 0x859f
+#endif
+
+/* GL_EXT_texture_env_dot3 */
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT3_RGBA_EXT 0x8741
+#endif
+
+/* GL_EXT_texture_filter_anisotropic */
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84fe
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84ff
+#endif
+
+/* GL_EXT_texture_lod_bias */
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84fd
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+#endif
+
+/* GL_EXT_texture_sRGB */
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#define GL_SRGB_EXT 0x8c40
+#define GL_SRGB8_EXT 0x8c41
+#define GL_SRGB_ALPHA_EXT 0x8c42
+#define GL_SRGB8_ALPHA8_EXT 0x8c43
+#define GL_SLUMINANCE_ALPHA_EXT 0x8c44
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8c45
+#define GL_SLUMINANCE_EXT 0x8c46
+#define GL_SLUMINANCE8_EXT 0x8c47
+#define GL_COMPRESSED_SRGB_EXT 0x8c48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8c49
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8c4a
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8c4b
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8c4c
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8c4d
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8c4e
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8c4f
+#endif
+
+/* GL_NV_depth_clamp */
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#define GL_DEPTH_CLAMP_NV 0x864f
+#endif
+
+/* GL_NV_fence */
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV 0x84f2
+#define GL_FENCE_STATUS_NV 0x84f3
+#define GL_FENCE_CONDITION_NV 0x84f4
+#endif
+typedef void (WINE_GLAPI *PGLFNGENFENCESNVPROC)(GLsizei, GLuint *);
+typedef void (WINE_GLAPI *PGLFNDELETEFENCESNVPROC)(GLuint, const GLuint *);
+typedef void (WINE_GLAPI *PGLFNSETFENCENVPROC)(GLuint, GLenum);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTFENCENVPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHFENCENVPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNISFENCENVPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNGETFENCEIVNVPROC)(GLuint, GLenum, GLint *);
+
+/* GL_NV_fog_distance */
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#define GL_FOG_DISTANCE_MODE_NV 0x855a
+#define GL_EYE_RADIAL_NV 0x855b
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855c
+/* reuse GL_EYE_PLANE */
+#endif
+
+/* GL_NV_half_float */
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+typedef unsigned short GLhalfNV;
+#define GL_HALF_FLOAT_NV 0x140b
+#endif
+typedef void (WINE_GLAPI *PGLFNVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y);
+typedef void (WINE_GLAPI *PGLFNVERTEX2HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (WINE_GLAPI *PGLFNVERTEX3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (WINE_GLAPI *PGLFNVERTEX4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (WINE_GLAPI *PGLFNNORMAL3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (WINE_GLAPI *PGLFNCOLOR3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (WINE_GLAPI *PGLFNCOLOR4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD1HNVPROC)(GLhalfNV s);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD1HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD2HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNFOGCOORDHNVPROC)(GLhalfNV fog);
+typedef void (WINE_GLAPI *PGLFNFOGCOORDHVNVPROC)(const GLhalfNV *fog);
+typedef void (WINE_GLAPI *PGLFNSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (WINE_GLAPI *PGLFNSECONDARYCOLOR3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXWEIGHTHNVPROC)(GLhalfNV weight);
+typedef void (WINE_GLAPI *PGLFNVERTEXWEIGHTHVNVPROC)(const GLhalfNV *weight);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+
+/* GL_NV_light_max_exponent */
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+#endif
+
+/* GL_NV_register_combiners */
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852a
+#define GL_CONSTANT_COLOR1_NV 0x852b
+#define GL_PRIMARY_COLOR_NV 0x852c
+#define GL_SECONDARY_COLOR_NV 0x852d
+#define GL_SPARE0_NV 0x852e
+#define GL_SPARE1_NV 0x852f
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853a
+#define GL_HALF_BIAS_NEGATE_NV 0x853b
+#define GL_SIGNED_IDENTITY_NV 0x853c
+#define GL_SIGNED_NEGATE_NV 0x853d
+#define GL_SCALE_BY_TWO_NV 0x853e
+#define GL_SCALE_BY_FOUR_NV 0x853f
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854a
+#define GL_COMBINER_CD_OUTPUT_NV 0x854b
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854c
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854d
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854e
+#define GL_COLOR_SUM_CLAMP_NV 0x854f
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+/* reuse GL_TEXTURE0_ARB */
+/* reuse GL_TEXTURE1_ARB */
+/* reuse GL_ZERO */
+/* reuse GL_NONE */
+/* reuse GL_FOG */
+#endif
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param);
+typedef void (WINE_GLAPI *PGLFNCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion,
+ GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (WINE_GLAPI *PGLFNCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion,
+ GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias,
+ GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (WINE_GLAPI *PGLFNFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input,
+ GLenum mapping, GLenum componentUsage);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion,
+ GLenum variable, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion,
+ GLenum variable, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion,
+ GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion,
+ GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint *params);
+
+/* GL_NV_register_combiners2 */
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+#endif
+typedef void (WINE_GLAPI *PGLFNCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat *params);
+
+/* GL_NV_texgen_reflection */
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+#endif
+
+/* GL_NV_texture_env_combine4 */
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858b
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859b
+#endif
+
+/* GL_NV_texture_shader */
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864c
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864d
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864e
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86d9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86da
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86db
+#define GL_DSDT_MAG_INTENSITY_NV 0x86dc
+#define GL_SHADER_CONSISTENT_NV 0x86dd
+#define GL_TEXTURE_SHADER_NV 0x86de
+#define GL_SHADER_OPERATION_NV 0x86df
+#define GL_CULL_MODES_NV 0x86e0
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86e1
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86e2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86e3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86e4
+#define GL_CONST_EYE_NV 0x86e5
+#define GL_PASS_THROUGH_NV 0x86e6
+#define GL_CULL_FRAGMENT_NV 0x86e7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86e8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86e9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86ea
+#define GL_DOT_PRODUCT_NV 0x86ec
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ed
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86ee
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86f0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86f1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86f2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86f3
+#define GL_HILO_NV 0x86f4
+#define GL_DSDT_NV 0x86f5
+#define GL_DSDT_MAG_NV 0x86f6
+#define GL_DSDT_MAG_VIB_NV 0x86f7
+#define GL_HILO16_NV 0x86f8
+#define GL_SIGNED_HILO_NV 0x86f9
+#define GL_SIGNED_HILO16_NV 0x86fa
+#define GL_SIGNED_RGBA_NV 0x86fb
+#define GL_SIGNED_RGBA8_NV 0x86fc
+#define GL_SIGNED_RGB_NV 0x86fe
+#define GL_SIGNED_RGB8_NV 0x86ff
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870a
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870b
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870c
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870d
+#define GL_HI_SCALE_NV 0x870e
+#define GL_LO_SCALE_NV 0x870f
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871a
+#define GL_TEXTURE_HI_SIZE_NV 0x871b
+#define GL_TEXTURE_LO_SIZE_NV 0x871c
+#define GL_TEXTURE_DS_SIZE_NV 0x871d
+#define GL_TEXTURE_DT_SIZE_NV 0x871e
+#define GL_TEXTURE_MAG_SIZE_NV 0x871f
+#endif
+
+/* GL_NV_texture_shader2 */
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86ef
+#endif
+
+/* GL_NV_vertex_program2_option */
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88f4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88f5
+#endif
+
+/* GL_SGIS_generate_mipmap */
+#ifndef GLX_SGIS_generate_mipmap
+#define GLX_SGIS_generate_mipmap 1
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+#endif
+
+/* GLX_SGI_video_sync */
+typedef int (WINE_GLAPI *PGLXFNGETVIDEOSYNCSGIPROC)(unsigned int *);
+typedef int (WINE_GLAPI *PGLXFNWAITVIDEOSYNCSGIPROC)(int, int, unsigned int *);
+
+/* WGL_ARB_extensions_string */
+typedef const char *(WINAPI *WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
+
+/* WGL_ARB_multisample */
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+#endif
+
+/* WGL_ARB_pixel_format */
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200a
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203a
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203b
+#define WGL_SHARE_DEPTH_ARB 0x200c
+#define WGL_SHARE_STENCIL_ARB 0x200d
+#define WGL_SHARE_ACCUM_ARB 0x200e
+#define WGL_SUPPORT_GDI_ARB 0x200f
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201a
+#define WGL_ALPHA_BITS_ARB 0x201b
+#define WGL_ALPHA_SHIFT_ARB 0x201c
+#define WGL_ACCUM_BITS_ARB 0x201d
+#define WGL_ACCUM_RED_BITS_ARB 0x201e
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201f
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202a
+#define WGL_TYPE_RGBA_ARB 0x202b
+#define WGL_TYPE_COLORINDEX_ARB 0x202c
+#endif
+typedef BOOL (WINAPI *WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat,
+ int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI *WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat,
+ int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI *WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int *piAttribIList,
+ const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+
+/* WGL_ARB_pixel_format_float */
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21a0
+#endif
+
+/* WGL_WINE_pixel_format_passthrough */
+typedef BOOL (WINAPI *WINED3D_PFNWGLSETPIXELFORMATWINE)(HDC hdc, int iPixelFormat,
+ const PIXELFORMATDESCRIPTOR *ppfd);
+
+/*Global resource ids sharing*/
+#define GL_SHARE_CONTEXT_RESOURCES_CR 0x8B27
+/*do flush for the command buffer of a thread the context was previusly current for*/
+#define GL_FLUSH_ON_THREAD_SWITCH_CR 0x8B28
+/*report that the shared resource is used by this context, the parameter value is a texture name*/
+#define GL_RCUSAGE_TEXTURE_SET_CR 0x8B29
+/*report that the shared resource is no longer used by this context, the parameter value is a texture name*/
+#define GL_RCUSAGE_TEXTURE_CLEAR_CR 0x8B2A
+/*configures host to create windows initially hidden*/
+#define GL_HOST_WND_CREATED_HIDDEN 0x8B2B
+
+typedef void (WINE_GLAPI *PGLFNCHROMIUMPARAMETERUCR)(GLenum param, GLint value);
+
+# define VBOXWDDM_GL_EXT_FUNCS_GEN \
+ USE_GL_FUNC(PGLFNCHROMIUMPARAMETERUCR, \
+ glChromiumParameteriCR, VBOX_SHARED_CONTEXTS, NULL) \
+
+
+#define GL_EXT_FUNCS_GEN \
+ /* GL_APPLE_fence */ \
+ USE_GL_FUNC(PGLFNGENFENCESAPPLEPROC, \
+ glGenFencesAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNDELETEFENCESAPPLEPROC, \
+ glDeleteFencesAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNSETFENCEAPPLEPROC, \
+ glSetFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNTESTFENCEAPPLEPROC, \
+ glTestFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNFINISHFENCEAPPLEPROC, \
+ glFinishFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNISFENCEAPPLEPROC, \
+ glIsFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNTESTOBJECTAPPLEPROC, \
+ glTestObjectAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNFINISHOBJECTAPPLEPROC, \
+ glFinishObjectAPPLE, APPLE_FENCE, NULL) \
+ /* GL_APPLE_flush_buffer_range */ \
+ USE_GL_FUNC(PGLFNBUFFERPARAMETERIAPPLE, \
+ glBufferParameteriAPPLE, APPLE_FLUSH_BUFFER_RANGE, NULL) \
+ USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE, \
+ glFlushMappedBufferRangeAPPLE, APPLE_FLUSH_BUFFER_RANGE, NULL) \
+ /* GL_APPLE_flush_render */ \
+ USE_GL_FUNC(PGLFNFLUSHRENDERAPPLEPROC, \
+ glFlushRenderAPPLE, APPLE_FLUSH_RENDER, NULL) \
+ USE_GL_FUNC(PGLFNFINISHRENDERAPPLEPROC, \
+ glFinishRenderAPPLE, APPLE_FLUSH_RENDER, NULL) \
+ /* GL_ARB_color_buffer_float */ \
+ USE_GL_FUNC(PGLFNCLAMPCOLORARBPROC, \
+ glClampColorARB, ARB_COLOR_BUFFER_FLOAT, NULL) \
+ /* GL_ARB_draw_buffers */ \
+ USE_GL_FUNC(PGLFNDRAWBUFFERSARBPROC, \
+ glDrawBuffersARB, ARB_DRAW_BUFFERS, NULL) \
+ /* GL_ARB_framebuffer_object */ \
+ USE_GL_FUNC(PGLFNGLISRENDERBUFFERPROC, \
+ glIsRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDRENDERBUFFERPROC, \
+ glBindRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSPROC, \
+ glDeleteRenderbuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSPROC, \
+ glGenRenderbuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEPROC, \
+ glRenderbufferStorage, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC, \
+ glRenderbufferStorageMultisample, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVPROC, \
+ glGetRenderbufferParameteriv, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLISFRAMEBUFFERPROC, \
+ glIsFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFERPROC, \
+ glBindFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSPROC, \
+ glDeleteFramebuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSPROC, \
+ glGenFramebuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSPROC, \
+ glCheckFramebufferStatus, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DPROC, \
+ glFramebufferTexture1D, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DPROC, \
+ glFramebufferTexture2D, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DPROC, \
+ glFramebufferTexture3D, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURELAYERPROC, \
+ glFramebufferTextureLayer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFERPROC, \
+ glFramebufferRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC, \
+ glGetFramebufferAttachmentParameteriv, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFERPROC, \
+ glBlitFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENERATEMIPMAPPROC, \
+ glGenerateMipmap, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ /* GL_ARB_geometry_shader4 */ \
+ USE_GL_FUNC(PGLFNPROGRAMPARAMETERIARBPROC, \
+ glProgramParameteriARB, ARB_GEOMETRY_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREARBPROC, \
+ glFramebufferTextureARB, ARB_GEOMETRY_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTURELAYERARBPROC, \
+ glFramebufferTextureLayerARB, ARB_GEOMETRY_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREFACEARBPROC, \
+ glFramebufferTextureFaceARB, ARB_GEOMETRY_SHADER4, NULL) \
+ /* GL_ARB_imaging, GL_EXT_blend_minmax */ \
+ USE_GL_FUNC(PGLFNBLENDCOLORPROC, \
+ glBlendColorEXT, EXT_BLEND_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNBLENDEQUATIONPROC, \
+ glBlendEquationEXT, EXT_BLEND_MINMAX, NULL) \
+ /* GL_ARB_map_buffer_range */ \
+ USE_GL_FUNC(PGLFNMAPBUFFERRANGEPROC, \
+ glMapBufferRange, ARB_MAP_BUFFER_RANGE, NULL) \
+ USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEPROC, \
+ glFlushMappedBufferRange, ARB_MAP_BUFFER_RANGE, NULL) \
+ /* GL_ARB_multisample */ \
+ USE_GL_FUNC(WINED3D_PFNGLSAMPLECOVERAGEARBPROC, \
+ glSampleCoverageARB, ARB_MULTISAMPLE, NULL) \
+ /* GL_ARB_multitexture */ \
+ USE_GL_FUNC(WINED3D_PFNGLACTIVETEXTUREARBPROC, \
+ glActiveTextureARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC, \
+ glClientActiveTextureARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FARBPROC, \
+ glMultiTexCoord1fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FVARBPROC, \
+ glMultiTexCoord1fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FARBPROC, \
+ glMultiTexCoord2fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FVARBPROC, \
+ glMultiTexCoord2fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FARBPROC, \
+ glMultiTexCoord3fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FVARBPROC, \
+ glMultiTexCoord3fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FARBPROC, \
+ glMultiTexCoord4fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FVARBPROC, \
+ glMultiTexCoord4fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2SVARBPROC, \
+ glMultiTexCoord2svARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4SVARBPROC, \
+ glMultiTexCoord4svARB, ARB_MULTITEXTURE, NULL) \
+ /* GL_ARB_occlusion_query */ \
+ USE_GL_FUNC(PGLFNGENQUERIESARBPROC, \
+ glGenQueriesARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNDELETEQUERIESARBPROC, \
+ glDeleteQueriesARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNBEGINQUERYARBPROC, \
+ glBeginQueryARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNENDQUERYARBPROC, \
+ glEndQueryARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNGETQUERYOBJECTIVARBPROC, \
+ glGetQueryObjectivARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNGETQUERYOBJECTUIVARBPROC, \
+ glGetQueryObjectuivARB, ARB_OCCLUSION_QUERY, NULL) \
+ /* GL_ARB_point_parameters */ \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFARBPROC, \
+ glPointParameterfARB, ARB_POINT_PARAMETERS, NULL) \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVARBPROC, \
+ glPointParameterfvARB, ARB_POINT_PARAMETERS, NULL) \
+ /* GL_ARB_provoking_vertex */ \
+ USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXPROC, \
+ glProvokingVertex, ARB_PROVOKING_VERTEX, NULL) \
+ /* GL_ARB_shader_objects */ \
+ USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, \
+ glGetObjectParameterivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC, \
+ glGetObjectParameterfvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC, \
+ glGetUniformLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETACTIVEUNIFORMARBPROC, \
+ glGetActiveUniformARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, \
+ glUniform1iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IARBPROC, \
+ glUniform2iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IARBPROC, \
+ glUniform3iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IARBPROC, \
+ glUniform4iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FARBPROC, \
+ glUniform1fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FARBPROC, \
+ glUniform2fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FARBPROC, \
+ glUniform3fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FARBPROC, \
+ glUniform4fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FVARBPROC, \
+ glUniform1fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FVARBPROC, \
+ glUniform2fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FVARBPROC, \
+ glUniform3fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FVARBPROC, \
+ glUniform4fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IVARBPROC, \
+ glUniform1ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IVARBPROC, \
+ glUniform2ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IVARBPROC, \
+ glUniform3ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IVARBPROC, \
+ glUniform4ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC, \
+ glUniformMatrix2fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC, \
+ glUniformMatrix3fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC, \
+ glUniformMatrix4fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMFVARBPROC, \
+ glGetUniformfvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMIVARBPROC, \
+ glGetUniformivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETINFOLOGARBPROC, \
+ glGetInfoLogARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC, \
+ glUseProgramObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCREATESHADEROBJECTARBPROC, \
+ glCreateShaderObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLSHADERSOURCEARBPROC, \
+ glShaderSourceARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCOMPILESHADERARBPROC, \
+ glCompileShaderARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC, \
+ glCreateProgramObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLATTACHOBJECTARBPROC, \
+ glAttachObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLLINKPROGRAMARBPROC, \
+ glLinkProgramARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLDETACHOBJECTARBPROC, \
+ glDetachObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLDELETEOBJECTARBPROC, \
+ glDeleteObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLVALIDATEPROGRAMARBPROC, \
+ glValidateProgramARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC, \
+ glGetAttachedObjectsARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETHANDLEARBPROC, \
+ glGetHandleARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETSHADERSOURCEARBPROC, \
+ glGetShaderSourceARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC, \
+ glBindAttribLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETATTRIBLOCATIONARBPROC, \
+ glGetAttribLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ /* GL_ARB_sync */ \
+ USE_GL_FUNC(PGLFNFENCESYNCPROC, \
+ glFenceSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNISSYNCPROC, \
+ glIsSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNDELETESYNCPROC, \
+ glDeleteSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNCLIENTWAITSYNCPROC, \
+ glClientWaitSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNWAITSYNCPROC, \
+ glWaitSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNGETINTEGER64VPROC, \
+ glGetInteger64v, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNGETSYNCIVPROC, \
+ glGetSynciv, ARB_SYNC, NULL) \
+ /* GL_ARB_texture_compression */ \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE2DPROC, \
+ glCompressedTexImage2DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE3DPROC, \
+ glCompressedTexImage3DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC, \
+ glCompressedTexSubImage2DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC, \
+ glCompressedTexSubImage3DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNGETCOMPRESSEDTEXIMAGEPROC, \
+ glGetCompressedTexImageARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ /* GL_ARB_vertex_blend */ \
+ USE_GL_FUNC(PGLFNGLWEIGHTPOINTERARB, \
+ glWeightPointerARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTBV, \
+ glWeightbvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTSV, \
+ glWeightsvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTIV, \
+ glWeightivARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTFV, \
+ glWeightfvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTDV, \
+ glWeightdvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTUBV, \
+ glWeightubvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTUSV, \
+ glWeightusvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTUIV, \
+ glWeightuivARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLVERTEXBLENDARB, \
+ glVertexBlendARB, ARB_VERTEX_BLEND, NULL) \
+ /* GL_ARB_vertex_buffer_object */ \
+ USE_GL_FUNC(PGLFNBINDBUFFERARBPROC, \
+ glBindBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNDELETEBUFFERSARBPROC, \
+ glDeleteBuffersARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGENBUFFERSARBPROC, \
+ glGenBuffersARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNISBUFFERARBPROC, \
+ glIsBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNBUFFERDATAARBPROC, \
+ glBufferDataARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNBUFFERSUBDATAARBPROC, \
+ glBufferSubDataARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGETBUFFERSUBDATAARBPROC, \
+ glGetBufferSubDataARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNMAPBUFFERARBPROC, \
+ glMapBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNUNMAPBUFFERARBPROC, \
+ glUnmapBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGETBUFFERPARAMETERIVARBPROC, \
+ glGetBufferParameterivARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGETBUFFERPOINTERVARBPROC, \
+ glGetBufferPointervARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ /* GL_ARB_vertex_program */ \
+ USE_GL_FUNC(PGLFNGENPROGRAMSARBPROC, \
+ glGenProgramsARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNBINDPROGRAMARBPROC, \
+ glBindProgramARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMSTRINGARBPROC, \
+ glProgramStringARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNDELETEPROGRAMSARBPROC, \
+ glDeleteProgramsARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMENVPARAMETER4FVARBPROC, \
+ glProgramEnvParameter4fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETER4FVARBPROC, \
+ glProgramLocalParameter4fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBPOINTERARBPROC, \
+ glVertexAttribPointerARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNENABLEVERTEXATTRIBARRAYARBPROC, \
+ glEnableVertexAttribArrayARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNDISABLEVERTEXATTRIBARRAYARBPROC, \
+ glDisableVertexAttribArrayARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1DARBPROC, \
+ glVertexAttrib1dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1DVARBPROC, \
+ glVertexAttrib1dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1FARBPROC, \
+ glVertexAttrib1fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1FVARBPROC, \
+ glVertexAttrib1fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1SARBPROC, \
+ glVertexAttrib1sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1SVARBPROC, \
+ glVertexAttrib1svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2DARBPROC, \
+ glVertexAttrib2dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2DVARBPROC, \
+ glVertexAttrib2dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2FARBPROC, \
+ glVertexAttrib2fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2FVARBPROC, \
+ glVertexAttrib2fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2SARBPROC, \
+ glVertexAttrib2sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2SVARBPROC, \
+ glVertexAttrib2svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3DARBPROC, \
+ glVertexAttrib3dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3DVARBPROC, \
+ glVertexAttrib3dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3FARBPROC, \
+ glVertexAttrib3fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3FVARBPROC, \
+ glVertexAttrib3fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3SARBPROC, \
+ glVertexAttrib3sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3SVARBPROC, \
+ glVertexAttrib3svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NBVARBPROC, \
+ glVertexAttrib4NbvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NIVARBPROC, \
+ glVertexAttrib4NivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NSVARBPROC, \
+ glVertexAttrib4NsvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBARBPROC, \
+ glVertexAttrib4NubARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBVARBPROC, \
+ glVertexAttrib4NubvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUIVARBPROC, \
+ glVertexAttrib4NuivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUSVARBPROC, \
+ glVertexAttrib4NusvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4BVARBPROC, \
+ glVertexAttrib4bvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4DARBPROC, \
+ glVertexAttrib4dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4DVARBPROC, \
+ glVertexAttrib4dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4FARBPROC, \
+ glVertexAttrib4fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4FVARBPROC, \
+ glVertexAttrib4fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4IVARBPROC, \
+ glVertexAttrib4ivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4SARBPROC, \
+ glVertexAttrib4sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4SVARBPROC, \
+ glVertexAttrib4svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4UBVARBPROC, \
+ glVertexAttrib4ubvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4UIVARBPROC, \
+ glVertexAttrib4uivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4USVARBPROC, \
+ glVertexAttrib4usvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNGETPROGRAMIVARBPROC, \
+ glGetProgramivARB, ARB_VERTEX_PROGRAM, NULL) \
+ /* GL_ATI_fragment_shader */ \
+ USE_GL_FUNC(PGLFNGENFRAGMENTSHADERSATI, \
+ glGenFragmentShadersATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNBINDFRAGMENTSHADERATI, \
+ glBindFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNDELETEFRAGMENTSHADERATI, \
+ glDeleteFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNBEGINFRAGMENTSHADERATI, \
+ glBeginFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNENDFRAGMENTSHADERATI, \
+ glEndFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNPASSTEXCOORDATI, \
+ glPassTexCoordATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNSAMPLEMAPATI, \
+ glSampleMapATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNCOLORFRAGMENTOP1ATI, \
+ glColorFragmentOp1ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNCOLORFRAGMENTOP2ATI, \
+ glColorFragmentOp2ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNCOLORFRAGMENTOP3ATI, \
+ glColorFragmentOp3ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNALPHAFRAGMENTOP1ATI, \
+ glAlphaFragmentOp1ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNALPHAFRAGMENTOP2ATI, \
+ glAlphaFragmentOp2ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNALPHAFRAGMENTOP3ATI, \
+ glAlphaFragmentOp3ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNSETFRAGMENTSHADERCONSTANTATI, \
+ glSetFragmentShaderConstantATI, ATI_FRAGMENT_SHADER, NULL) \
+ /* GL_ATI_separate_stencil */ \
+ USE_GL_FUNC(PGLFNSTENCILOPSEPARATEATIPROC, \
+ glStencilOpSeparateATI, ATI_SEPARATE_STENCIL, NULL) \
+ USE_GL_FUNC(PGLFNSTENCILFUNCSEPARATEATIPROC, \
+ glStencilFuncSeparateATI, ATI_SEPARATE_STENCIL, NULL) \
+ /* GL_EXT_blend_equation_separate */ \
+ USE_GL_FUNC(PGLFNBLENDFUNCSEPARATEEXTPROC, \
+ glBlendFuncSeparateEXT, EXT_BLEND_FUNC_SEPARATE, NULL) \
+ /* GL_EXT_blend_func_separate */ \
+ USE_GL_FUNC(PGLFNBLENDEQUATIONSEPARATEEXTPROC, \
+ glBlendEquationSeparateEXT, EXT_BLEND_EQUATION_SEPARATE, NULL) \
+ /* GL_EXT_draw_buffers2 */ \
+ USE_GL_FUNC(PGLFNCOLORMASKINDEXEDEXTPROC, \
+ glColorMaskIndexedEXT, EXT_DRAW_BUFFERS2, NULL) \
+ USE_GL_FUNC(PGLFNGETBOOLEANINDEXEDVEXTPROC, \
+ glGetBooleanIndexedvEXT, EXT_DRAW_BUFFERS2, NULL) \
+ USE_GL_FUNC(PGLFNGETINTEGERINDEXEDVEXTPROC, \
+ glGetIntegerIndexedvEXT, EXT_DRAW_BUFFERS2, NULL) \
+ USE_GL_FUNC(PGLFNENABLEINDEXEDEXTPROC, \
+ glEnableIndexedEXT, EXT_DRAW_BUFFERS2, NULL) \
+ USE_GL_FUNC(PGLFNDISABLEINDEXEDEXTPROC, \
+ glDisableIndexedEXT, EXT_DRAW_BUFFERS2, NULL) \
+ USE_GL_FUNC(PGLFNISENABLEDINDEXEDEXTPROC, \
+ glIsEnabledIndexedEXT, EXT_DRAW_BUFFERS2, NULL) \
+ /* GL_EXT_fog_coord */ \
+ USE_GL_FUNC(PGLFNGLFOGCOORDFEXTPROC, \
+ glFogCoordfEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDFVEXTPROC, \
+ glFogCoordfvEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDDEXTPROC, \
+ glFogCoorddEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDDVEXTPROC, \
+ glFogCoorddvEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDPOINTEREXTPROC, \
+ glFogCoordPointerEXT, EXT_FOG_COORD, NULL) \
+ /* GL_EXT_framebuffer_blit */ \
+ USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFEREXTPROC, \
+ glBlitFramebufferEXT, EXT_FRAMEBUFFER_BLIT, NULL) \
+ /* GL_EXT_framebuffer_multisample */ \
+ USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, \
+ glRenderbufferStorageMultisampleEXT, EXT_FRAMEBUFFER_MULTISAMPLE, NULL) \
+ /* GL_EXT_framebuffer_object */ \
+ USE_GL_FUNC(PGLFNGLISRENDERBUFFEREXTPROC, \
+ glIsRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDRENDERBUFFEREXTPROC, \
+ glBindRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSEXTPROC, \
+ glDeleteRenderbuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSEXTPROC, \
+ glGenRenderbuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEEXTPROC, \
+ glRenderbufferStorageEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLISFRAMEBUFFEREXTPROC, \
+ glIsFramebufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFEREXTPROC, \
+ glBindFramebufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSEXTPROC, \
+ glDeleteFramebuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSEXTPROC, \
+ glGenFramebuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, \
+ glCheckFramebufferStatusEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC, \
+ glFramebufferTexture1DEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC, \
+ glFramebufferTexture2DEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC, \
+ glFramebufferTexture3DEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, \
+ glFramebufferRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENERATEMIPMAPEXTPROC, \
+ glGenerateMipmapEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, \
+ glGetRenderbufferParameterivEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, \
+ glGetFramebufferAttachmentParameterivEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ /* GL_EXT_gpu_program_parameters */ \
+ USE_GL_FUNC(PGLFNPROGRAMENVPARAMETERS4FVEXTPROC, \
+ glProgramEnvParameters4fvEXT, EXT_GPU_PROGRAM_PARAMETERS, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC, \
+ glProgramLocalParameters4fvEXT, EXT_GPU_PROGRAM_PARAMETERS, NULL) \
+ /* GL_EXT_gpu_shader4 */\
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1IEXTPROC, \
+ glVertexAttribI1iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2IEXTPROC, \
+ glVertexAttribI2iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3IEXTPROC, \
+ glVertexAttribI3iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4IEXTPROC, \
+ glVertexAttribI4iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1UIEXTPROC, \
+ glVertexAttribI1uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2UIEXTPROC, \
+ glVertexAttribI2uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3UIEXTPROC, \
+ glVertexAttribI3uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4UIEXTPROC, \
+ glVertexAttribI4uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1IVEXTPROC, \
+ glVertexAttribI1ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2IVEXTPROC, \
+ glVertexAttribI2ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3IVEXTPROC, \
+ glVertexAttribI3ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4IVEXTPROC, \
+ glVertexAttribI4ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1UIVEXTPROC, \
+ glVertexAttribI1uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2UIVEXTPROC, \
+ glVertexAttribI2uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3UIVEXTPROC, \
+ glVertexAttribI3uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4UIVEXTPROC, \
+ glVertexAttribI4uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4BVEXTPROC, \
+ glVertexAttribI4bvEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4SVEXTPROC, \
+ glVertexAttribI4svEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4UBVEXTPROC, \
+ glVertexAttribI4ubvEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4USVEXTPROC, \
+ glVertexAttribI4usvEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBIPOINTEREXTPROC, \
+ glVertexAttribIPointerEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETVERTEXATTRIBIIVEXTPROC, \
+ glVertexAttribIivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETVERTEXATTRIBIUIVEXTPROC, \
+ glVertexAttribIuivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM1UIEXTPROC, \
+ glUniform1uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM2UIEXTPROC, \
+ glUniform2uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM3UIEXTPROC, \
+ glUniform3uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM4UIEXTPROC, \
+ glUniform4uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM1UIVEXTPROC, \
+ glUniform1uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM2UIVEXTPROC, \
+ glUniform2uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM3UIVEXTPROC, \
+ glUniform3uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM4UIVEXTPROC, \
+ glUniform4uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETUNIFORMUIVEXTPROC, \
+ glGetUniformuivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNBINDFRAGDATALOCATIONEXTPROC, \
+ glBindFragDataLocationEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETFRAGDATALOCATIONEXTPROC, \
+ glGetFragDataLocationEXT, EXT_GPU_SHADER4, NULL) \
+ /* GL_EXT_paletted_texture */ \
+ USE_GL_FUNC(PGLFNGLCOLORTABLEEXTPROC, \
+ glColorTableEXT, EXT_PALETTED_TEXTURE, NULL) \
+ /* GL_EXT_point_parameters */ \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFEXTPROC, \
+ glPointParameterfEXT, EXT_POINT_PARAMETERS, NULL) \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVEXTPROC, \
+ glPointParameterfvEXT, EXT_POINT_PARAMETERS, NULL) \
+ /* GL_EXT_provoking_vertex */ \
+ USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXEXTPROC, \
+ glProvokingVertexEXT, EXT_PROVOKING_VERTEX, NULL) \
+ /* GL_EXT_secondary_color */ \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBEXTPROC, \
+ glSecondaryColor3ubEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBVEXTPROC, \
+ glSecondaryColor3ubvEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FEXTPROC, \
+ glSecondaryColor3fEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FVEXTPROC, \
+ glSecondaryColor3fvEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLORPOINTEREXTPROC, \
+ glSecondaryColorPointerEXT, EXT_SECONDARY_COLOR, NULL) \
+ /* GL_EXT_stencil_two_side */ \
+ USE_GL_FUNC(PGLFNACTIVESTENCILFACEEXTPROC, \
+ glActiveStencilFaceEXT, EXT_STENCIL_TWO_SIDE, NULL) \
+ /* GL_EXT_texture3D */ \
+ USE_GL_FUNC(PGLFNGLTEXIMAGE3DEXTPROC, \
+ glTexImage3DEXT, EXT_TEXTURE3D, glTexImage3D) \
+ USE_GL_FUNC(PGLFNGLTEXSUBIMAGE3DEXTPROC, \
+ glTexSubImage3DEXT, EXT_TEXTURE3D, glTexSubImage3D) \
+ /* GL_NV_fence */ \
+ USE_GL_FUNC(PGLFNGENFENCESNVPROC, \
+ glGenFencesNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNDELETEFENCESNVPROC, \
+ glDeleteFencesNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNSETFENCENVPROC, \
+ glSetFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNTESTFENCENVPROC, \
+ glTestFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNFINISHFENCENVPROC, \
+ glFinishFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNISFENCENVPROC, \
+ glIsFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNGETFENCEIVNVPROC, \
+ glGetFenceivNV, NV_FENCE, NULL) \
+ /* GL_NV_half_float */ \
+ USE_GL_FUNC(PGLFNVERTEX2HNVPROC, \
+ glVertex2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX2HVNVPROC, \
+ glVertex2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX3HNVPROC, \
+ glVertex3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX3HVNVPROC, \
+ glVertex3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX4HNVPROC, \
+ glVertex4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX4HVNVPROC, \
+ glVertex4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNNORMAL3HNVPROC, \
+ glNormal3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNNORMAL3HVNVPROC, \
+ glNormal3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR3HNVPROC, \
+ glColor3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR3HVNVPROC, \
+ glColor3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR4HNVPROC, \
+ glColor4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR4HVNVPROC, \
+ glColor4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD1HNVPROC, \
+ glTexCoord1hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD1HVNVPROC, \
+ glTexCoord1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD2HNVPROC, \
+ glTexCoord2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD2HVNVPROC, \
+ glTexCoord2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD3HNVPROC, \
+ glTexCoord3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD3HVNVPROC, \
+ glTexCoord3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD4HNVPROC, \
+ glTexCoord4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD4HVNVPROC, \
+ glTexCoord4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD1HNVPROC, \
+ glMultiTexCoord1hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD1HVNVPROC, \
+ glMultiTexCoord1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD2HNVPROC, \
+ glMultiTexCoord2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD2HVNVPROC, \
+ glMultiTexCoord2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD3HNVPROC, \
+ glMultiTexCoord3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD3HVNVPROC, \
+ glMultiTexCoord3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD4HNVPROC, \
+ glMultiTexCoord4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD4HVNVPROC, \
+ glMultiTexCoord4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNFOGCOORDHNVPROC, \
+ glFogCoordhNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNFOGCOORDHVNVPROC, \
+ glFogCoordhvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNSECONDARYCOLOR3HNVPROC, \
+ glSecondaryColor3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNSECONDARYCOLOR3HVNVPROC, \
+ glSecondaryColor3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXWEIGHTHNVPROC, \
+ glVertexWeighthNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXWEIGHTHVNVPROC, \
+ glVertexWeighthvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1HNVPROC, \
+ glVertexAttrib1hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1HVNVPROC, \
+ glVertexAttrib1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2HNVPROC, \
+ glVertexAttrib2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2HVNVPROC, \
+ glVertexAttrib2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3HNVPROC, \
+ glVertexAttrib3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3HVNVPROC, \
+ glVertexAttrib3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4HNVPROC, \
+ glVertexAttrib4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4HVNVPROC, \
+ glVertexAttrib4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS1HVNVPROC, \
+ glVertexAttribs1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS2HVNVPROC, \
+ glVertexAttribs2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS3HVNVPROC, \
+ glVertexAttribs3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS4HVNVPROC, \
+ glVertexAttribs4hvNV, NV_HALF_FLOAT, NULL) \
+ /* GL_NV_register_combiners */ \
+ USE_GL_FUNC(PGLFNCOMBINERINPUTNVPROC, \
+ glCombinerInputNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINEROUTPUTNVPROC, \
+ glCombinerOutputNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERFNVPROC, \
+ glCombinerParameterfNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERFVNVPROC, \
+ glCombinerParameterfvNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERINVPROC, \
+ glCombinerParameteriNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERIVNVPROC, \
+ glCombinerParameterivNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNFINALCOMBINERINPUTNVPROC, \
+ glFinalCombinerInputNV, NV_REGISTER_COMBINERS, NULL) \
+ /* GLX_SGI_video_sync */ \
+ USE_GL_FUNC(PGLXFNGETVIDEOSYNCSGIPROC, \
+ glXGetVideoSyncSGI, SGI_VIDEO_SYNC, NULL) \
+ USE_GL_FUNC(PGLXFNWAITVIDEOSYNCSGIPROC, \
+ glXWaitVideoSyncSGI, SGI_VIDEO_SYNC, NULL) \
+ VBOXWDDM_GL_EXT_FUNCS_GEN
+
+#define WGL_EXT_FUNCS_GEN \
+ USE_GL_FUNC(WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC, wglGetExtensionsStringARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC, wglGetPixelFormatAttribivARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC, wglGetPixelFormatAttribfvARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC, wglChoosePixelFormatARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLSETPIXELFORMATWINE, wglSetPixelFormatWINE, 0, NULL)
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_shaderlib_wined3d_gl_h */
diff --git a/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h b/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h
new file mode 100644
index 00000000..3c7e750b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/wined3d_private.h
@@ -0,0 +1,3479 @@
+/*
+ * Direct3D wine internal private include file
+ *
+ * Copyright 2002-2003 The wine-d3d team
+ * Copyright 2002-2003 Raphael Junqueira
+ * Copyright 2002-2003, 2004 Jason Edmeades
+ * Copyright 2005 Oliver Stieber
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
+ * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
+ * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
+ * a choice of LGPL license versions is made available with the language indicating
+ * that LGPLv2 or any later version may be used, or where a choice of which version
+ * of the LGPL is applied is otherwise unspecified.
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_shaderlib_wined3d_private_h
+#define VBOX_INCLUDED_SRC_Graphics_shaderlib_wined3d_private_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <stdarg.h>
+#include <math.h>
+#include <limits.h>
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+#define COBJMACROS
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include "windef.h"
+#include "winbase.h"
+#include "winreg.h"
+#include "wingdi.h"
+#include "winuser.h"
+#else
+# ifdef _MSC_VER
+# include <iprt/win/windows.h>
+# else
+# include <windows.h>
+# undef cdecl /* see windef.h */
+# endif
+#endif
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+#ifndef VBOX_WINE_WITHOUT_LIBWINE
+#include "objbase.h"
+#endif
+#include "wine/wined3d.h"
+#include "wined3d_gl.h"
+#include "wine/list.h"
+#include "wine/rbtree.h"
+
+#include "vboxext.h"
+
+#ifdef VBOX_WITH_VMSVGA
+# ifndef LOG_GROUP
+# define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+# endif
+# include <iprt/assert.h>
+# include <VBox/log.h>
+# include "winoverride.h"
+# include "shaderlib.h"
+#endif
+
+#ifdef VBOX_WITH_WDDM
+# include "vboxsharedrc.h"
+#endif
+
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+# define VBoxTlsRefGetImpl(_tls) (TlsGetValue((DWORD)(_tls)))
+# define VBoxTlsRefSetImpl(_tls, _val) (TlsSetValue((DWORD)(_tls), (_val)))
+# define VBoxTlsRefAssertImpl Assert
+# include <VBoxVideo3D.h>
+#endif
+
+/* Driver quirks */
+#define WINED3D_QUIRK_ARB_VS_OFFSET_LIMIT 0x00000001
+#define WINED3D_QUIRK_SET_TEXCOORD_W 0x00000002
+#define WINED3D_QUIRK_GLSL_CLIP_VARYING 0x00000004
+#define WINED3D_QUIRK_ALLOWS_SPECULAR_ALPHA 0x00000008
+#define WINED3D_QUIRK_NV_CLIP_BROKEN 0x00000010
+#define WINED3D_QUIRK_FBO_TEX_UPDATE 0x00000020
+#define WINED3D_QUIRK_FULLSIZE_BLIT 0x00000040
+#define WINED3D_QUIRK_FORCE_BLIT 0x00000080
+
+/* Texture format fixups */
+
+enum fixup_channel_source
+{
+ CHANNEL_SOURCE_ZERO = 0,
+ CHANNEL_SOURCE_ONE = 1,
+ CHANNEL_SOURCE_X = 2,
+ CHANNEL_SOURCE_Y = 3,
+ CHANNEL_SOURCE_Z = 4,
+ CHANNEL_SOURCE_W = 5,
+ CHANNEL_SOURCE_COMPLEX0 = 6,
+ CHANNEL_SOURCE_COMPLEX1 = 7,
+};
+
+enum complex_fixup
+{
+ COMPLEX_FIXUP_NONE = 0,
+ COMPLEX_FIXUP_YUY2 = 1,
+ COMPLEX_FIXUP_UYVY = 2,
+ COMPLEX_FIXUP_YV12 = 3,
+ COMPLEX_FIXUP_P8 = 4,
+};
+
+#include <pshpack2.h>
+struct color_fixup_desc
+{
+ unsigned x_sign_fixup : 1;
+ unsigned x_source : 3;
+ unsigned y_sign_fixup : 1;
+ unsigned y_source : 3;
+ unsigned z_sign_fixup : 1;
+ unsigned z_source : 3;
+ unsigned w_sign_fixup : 1;
+ unsigned w_source : 3;
+};
+#include <poppack.h>
+
+static const struct color_fixup_desc COLOR_FIXUP_IDENTITY =
+ {0, CHANNEL_SOURCE_X, 0, CHANNEL_SOURCE_Y, 0, CHANNEL_SOURCE_Z, 0, CHANNEL_SOURCE_W};
+
+static inline struct color_fixup_desc create_color_fixup_desc(
+ int sign0, enum fixup_channel_source src0, int sign1, enum fixup_channel_source src1,
+ int sign2, enum fixup_channel_source src2, int sign3, enum fixup_channel_source src3)
+{
+ struct color_fixup_desc fixup =
+ {
+ sign0, src0,
+ sign1, src1,
+ sign2, src2,
+ sign3, src3,
+ };
+ return fixup;
+}
+
+static inline struct color_fixup_desc create_complex_fixup_desc(enum complex_fixup complex_fixup)
+{
+ struct color_fixup_desc fixup =
+ {
+ 0, complex_fixup & (1 << 0) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ 0, complex_fixup & (1 << 1) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ 0, complex_fixup & (1 << 2) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ 0, complex_fixup & (1 << 3) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ };
+ return fixup;
+}
+
+static inline BOOL is_identity_fixup(struct color_fixup_desc fixup)
+{
+ return !memcmp(&fixup, &COLOR_FIXUP_IDENTITY, sizeof(fixup));
+}
+
+static inline BOOL is_complex_fixup(struct color_fixup_desc fixup)
+{
+ return fixup.x_source == CHANNEL_SOURCE_COMPLEX0 || fixup.x_source == CHANNEL_SOURCE_COMPLEX1;
+}
+
+static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup)
+{
+ enum complex_fixup complex_fixup = 0;
+ if (fixup.x_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 0);
+ if (fixup.y_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 1);
+ if (fixup.z_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 2);
+ if (fixup.w_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 3);
+ return complex_fixup;
+}
+
+void *wined3d_rb_alloc(size_t size) DECLSPEC_HIDDEN;
+void *wined3d_rb_realloc(void *ptr, size_t size) DECLSPEC_HIDDEN;
+void wined3d_rb_free(void *ptr) DECLSPEC_HIDDEN;
+
+/* Device caps */
+#define MAX_PALETTES 65536
+#define MAX_STREAMS 16
+#define MAX_TEXTURES 8
+#define MAX_FRAGMENT_SAMPLERS 16
+#define MAX_VERTEX_SAMPLERS 4
+#define MAX_COMBINED_SAMPLERS (MAX_FRAGMENT_SAMPLERS + MAX_VERTEX_SAMPLERS)
+#define MAX_ACTIVE_LIGHTS 8
+#define MAX_CLIPPLANES WINED3DMAXUSERCLIPPLANES
+
+struct min_lookup
+{
+ GLenum mip[WINED3DTEXF_LINEAR + 1];
+};
+
+extern const struct min_lookup minMipLookup[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+extern const struct min_lookup minMipLookup_noFilter[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+extern const struct min_lookup minMipLookup_noMip[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+extern const GLenum magLookup[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+extern const GLenum magLookup_noFilter[WINED3DTEXF_LINEAR + 1] DECLSPEC_HIDDEN;
+
+static inline GLenum wined3d_gl_mag_filter(const GLenum mag_lookup[], WINED3DTEXTUREFILTERTYPE mag_filter)
+{
+ return mag_lookup[mag_filter];
+}
+
+static inline GLenum wined3d_gl_min_mip_filter(const struct min_lookup min_mip_lookup[],
+ WINED3DTEXTUREFILTERTYPE min_filter, WINED3DTEXTUREFILTERTYPE mip_filter)
+{
+ return min_mip_lookup[min_filter].mip[mip_filter];
+}
+
+/* float_16_to_32() and float_32_to_16() (see implementation in
+ * surface_base.c) convert 16 bit floats in the FLOAT16 data type
+ * to standard C floats and vice versa. They do not depend on the encoding
+ * of the C float, so they are platform independent, but slow. On x86 and
+ * other IEEE 754 compliant platforms the conversion can be accelerated by
+ * bit shifting the exponent and mantissa. There are also some SSE-based
+ * assembly routines out there.
+ *
+ * See GL_NV_half_float for a reference of the FLOAT16 / GL_HALF format
+ */
+static inline float float_16_to_32(const unsigned short *in) {
+ unsigned long fNaN = 0x7fc00000;
+ unsigned long fNegInf = 0xff800000;
+ unsigned long fInf = 0x7f800000;
+
+ const unsigned short s = ((*in) & 0x8000);
+ const unsigned short e = ((*in) & 0x7C00) >> 10;
+ const unsigned short m = (*in) & 0x3FF;
+ const float sgn = (s ? -1.0f : 1.0f);
+
+ if(e == 0) {
+ if(m == 0) return sgn * 0.0f; /* +0.0 or -0.0 */
+ else return sgn * pow(2, -14.0f) * ((float)m / 1024.0f);
+ } else if(e < 31) {
+ return sgn * pow(2, (float)e - 15.0f) * (1.0f + ((float)m / 1024.0f));
+ } else {
+ if(m == 0) return sgn>0? *(float*)(&fInf) : *(float*)(&fNegInf); //sgn / 0.0f; /* +INF / -INF */
+ else return *(float*)(&fNaN); //0.0f / 0.0f; /* NAN */
+ }
+}
+
+static inline float float_24_to_32(DWORD in)
+{
+ const float sgn = in & 0x800000 ? -1.0f : 1.0f;
+ const unsigned short e = (in & 0x780000) >> 19;
+ const unsigned short m = in & 0x7ffff;
+ unsigned long fNaN = 0x7fc00000;
+ unsigned long fNegInf = 0xff800000;
+ unsigned long fInf = 0x7f800000;
+
+ if (e == 0)
+ {
+ if (m == 0) return sgn * 0.0f; /* +0.0 or -0.0 */
+ else return sgn * pow(2, -6.0f) * ((float)m / 524288.0f);
+ }
+ else if (e < 15)
+ {
+ return sgn * pow(2, (float)e - 7.0f) * (1.0f + ((float)m / 524288.0f));
+ }
+ else
+ {
+ if (m == 0) return sgn>0? *(float*)(&fInf) : *(float*)(&fNegInf); //sgn / 0.0f; /* +INF / -INF */
+ else return *(float*)(&fNaN); //0.0f / 0.0f; /* NAN */
+ }
+}
+
+/**
+ * Settings
+ */
+#define VS_NONE 0
+#define VS_HW 1
+
+#define PS_NONE 0
+#define PS_HW 1
+
+#define VBO_NONE 0
+#define VBO_HW 1
+
+#define ORM_BACKBUFFER 0
+#define ORM_FBO 1
+
+#define SHADER_ARB 1
+#define SHADER_GLSL 2
+#define SHADER_ATI 3
+#define SHADER_NONE 4
+
+#define RTL_DISABLE -1
+#define RTL_READDRAW 1
+#define RTL_READTEX 2
+
+#define PCI_VENDOR_NONE 0xffff /* e.g. 0x8086 for Intel and 0x10de for Nvidia */
+#define PCI_DEVICE_NONE 0xffff /* e.g. 0x14f for a Geforce6200 */
+
+/* NOTE: When adding fields to this structure, make sure to update the default
+ * values in wined3d_main.c as well. */
+typedef struct wined3d_settings_s {
+/* vertex and pixel shader modes */
+ int vs_mode;
+ int ps_mode;
+/* Ideally, we don't want the user to have to request GLSL. If the hardware supports GLSL,
+ we should use it. However, until it's fully implemented, we'll leave it as a registry
+ setting for developers. */
+ BOOL glslRequested;
+ int offscreen_rendering_mode;
+ int rendertargetlock_mode;
+ unsigned short pci_vendor_id;
+ unsigned short pci_device_id;
+/* Memory tracking and object counting */
+ unsigned int emulated_textureram;
+ char *logo;
+ int allow_multisampling;
+ BOOL strict_draw_ordering;
+} wined3d_settings_t;
+
+extern wined3d_settings_t wined3d_settings DECLSPEC_HIDDEN;
+
+typedef enum _WINED3DSAMPLER_TEXTURE_TYPE
+{
+ WINED3DSTT_UNKNOWN = 0,
+ WINED3DSTT_1D = 1,
+ WINED3DSTT_2D = 2,
+ WINED3DSTT_CUBE = 3,
+ WINED3DSTT_VOLUME = 4,
+} WINED3DSAMPLER_TEXTURE_TYPE;
+
+typedef enum _WINED3DSHADER_PARAM_REGISTER_TYPE
+{
+ WINED3DSPR_TEMP = 0,
+ WINED3DSPR_INPUT = 1,
+ WINED3DSPR_CONST = 2,
+ WINED3DSPR_ADDR = 3,
+ WINED3DSPR_TEXTURE = 3,
+ WINED3DSPR_RASTOUT = 4,
+ WINED3DSPR_ATTROUT = 5,
+ WINED3DSPR_TEXCRDOUT = 6,
+ WINED3DSPR_OUTPUT = 6,
+ WINED3DSPR_CONSTINT = 7,
+ WINED3DSPR_COLOROUT = 8,
+ WINED3DSPR_DEPTHOUT = 9,
+ WINED3DSPR_SAMPLER = 10,
+ WINED3DSPR_CONST2 = 11,
+ WINED3DSPR_CONST3 = 12,
+ WINED3DSPR_CONST4 = 13,
+ WINED3DSPR_CONSTBOOL = 14,
+ WINED3DSPR_LOOP = 15,
+ WINED3DSPR_TEMPFLOAT16 = 16,
+ WINED3DSPR_MISCTYPE = 17,
+ WINED3DSPR_LABEL = 18,
+ WINED3DSPR_PREDICATE = 19,
+ WINED3DSPR_IMMCONST,
+ WINED3DSPR_CONSTBUFFER,
+} WINED3DSHADER_PARAM_REGISTER_TYPE;
+
+enum wined3d_immconst_type
+{
+ WINED3D_IMMCONST_FLOAT,
+ WINED3D_IMMCONST_FLOAT4,
+};
+
+#define WINED3DSP_NOSWIZZLE (0 | (1 << 2) | (2 << 4) | (3 << 6))
+
+typedef enum _WINED3DSHADER_PARAM_SRCMOD_TYPE
+{
+ WINED3DSPSM_NONE = 0,
+ WINED3DSPSM_NEG = 1,
+ WINED3DSPSM_BIAS = 2,
+ WINED3DSPSM_BIASNEG = 3,
+ WINED3DSPSM_SIGN = 4,
+ WINED3DSPSM_SIGNNEG = 5,
+ WINED3DSPSM_COMP = 6,
+ WINED3DSPSM_X2 = 7,
+ WINED3DSPSM_X2NEG = 8,
+ WINED3DSPSM_DZ = 9,
+ WINED3DSPSM_DW = 10,
+ WINED3DSPSM_ABS = 11,
+ WINED3DSPSM_ABSNEG = 12,
+ WINED3DSPSM_NOT = 13,
+} WINED3DSHADER_PARAM_SRCMOD_TYPE;
+
+#define WINED3DSP_WRITEMASK_0 0x1 /* .x r */
+#define WINED3DSP_WRITEMASK_1 0x2 /* .y g */
+#define WINED3DSP_WRITEMASK_2 0x4 /* .z b */
+#define WINED3DSP_WRITEMASK_3 0x8 /* .w a */
+#define WINED3DSP_WRITEMASK_ALL 0xf /* all */
+
+typedef enum _WINED3DSHADER_PARAM_DSTMOD_TYPE
+{
+ WINED3DSPDM_NONE = 0,
+ WINED3DSPDM_SATURATE = 1,
+ WINED3DSPDM_PARTIALPRECISION = 2,
+ WINED3DSPDM_MSAMPCENTROID = 4,
+} WINED3DSHADER_PARAM_DSTMOD_TYPE;
+
+/* Undocumented opcode control to identify projective texture lookups in ps 2.0 and later */
+#define WINED3DSI_TEXLD_PROJECT 1
+#define WINED3DSI_TEXLD_BIAS 2
+
+typedef enum COMPARISON_TYPE
+{
+ COMPARISON_GT = 1,
+ COMPARISON_EQ = 2,
+ COMPARISON_GE = 3,
+ COMPARISON_LT = 4,
+ COMPARISON_NE = 5,
+ COMPARISON_LE = 6,
+} COMPARISON_TYPE;
+
+#define WINED3D_SM1_VS 0xfffe
+#define WINED3D_SM1_PS 0xffff
+#define WINED3D_SM4_PS 0x0000
+#define WINED3D_SM4_VS 0x0001
+#define WINED3D_SM4_GS 0x0002
+
+/* Shader version tokens, and shader end tokens */
+#define WINED3DPS_VERSION(major, minor) ((WINED3D_SM1_PS << 16) | ((major) << 8) | (minor))
+#define WINED3DVS_VERSION(major, minor) ((WINED3D_SM1_VS << 16) | ((major) << 8) | (minor))
+
+/* Shader backends */
+
+/* TODO: Make this dynamic, based on shader limits ? */
+#define MAX_ATTRIBS 16
+#define MAX_REG_ADDR 1
+#define MAX_REG_TEMP 32
+#define MAX_REG_TEXCRD 8
+#define MAX_REG_INPUT 12
+#define MAX_REG_OUTPUT 12
+#define MAX_CONST_I 16
+#define MAX_CONST_B 16
+
+/* FIXME: This needs to go up to 2048 for
+ * Shader model 3 according to msdn (and for software shaders) */
+#define MAX_LABELS 16
+
+#define SHADER_PGMSIZE 65535
+
+struct wined3d_shader_buffer
+{
+ char *buffer;
+ unsigned int bsize;
+ unsigned int lineNo;
+ BOOL newline;
+};
+
+enum WINED3D_SHADER_INSTRUCTION_HANDLER
+{
+ WINED3DSIH_ABS,
+ WINED3DSIH_ADD,
+ WINED3DSIH_BEM,
+ WINED3DSIH_BREAK,
+ WINED3DSIH_BREAKC,
+ WINED3DSIH_BREAKP,
+ WINED3DSIH_CALL,
+ WINED3DSIH_CALLNZ,
+ WINED3DSIH_CMP,
+ WINED3DSIH_CND,
+ WINED3DSIH_CRS,
+ WINED3DSIH_CUT,
+ WINED3DSIH_DCL,
+ WINED3DSIH_DEF,
+ WINED3DSIH_DEFB,
+ WINED3DSIH_DEFI,
+ WINED3DSIH_DP2ADD,
+ WINED3DSIH_DP3,
+ WINED3DSIH_DP4,
+ WINED3DSIH_DST,
+ WINED3DSIH_DSX,
+ WINED3DSIH_DSY,
+ WINED3DSIH_ELSE,
+ WINED3DSIH_EMIT,
+ WINED3DSIH_ENDIF,
+ WINED3DSIH_ENDLOOP,
+ WINED3DSIH_ENDREP,
+ WINED3DSIH_EXP,
+ WINED3DSIH_EXPP,
+ WINED3DSIH_FRC,
+ WINED3DSIH_IADD,
+ WINED3DSIH_IF,
+ WINED3DSIH_IFC,
+ WINED3DSIH_IGE,
+ WINED3DSIH_LABEL,
+ WINED3DSIH_LIT,
+ WINED3DSIH_LOG,
+ WINED3DSIH_LOGP,
+ WINED3DSIH_LOOP,
+ WINED3DSIH_LRP,
+ WINED3DSIH_LT,
+ WINED3DSIH_M3x2,
+ WINED3DSIH_M3x3,
+ WINED3DSIH_M3x4,
+ WINED3DSIH_M4x3,
+ WINED3DSIH_M4x4,
+ WINED3DSIH_MAD,
+ WINED3DSIH_MAX,
+ WINED3DSIH_MIN,
+ WINED3DSIH_MOV,
+ WINED3DSIH_MOVA,
+ WINED3DSIH_MUL,
+ WINED3DSIH_NOP,
+ WINED3DSIH_NRM,
+ WINED3DSIH_PHASE,
+ WINED3DSIH_POW,
+ WINED3DSIH_RCP,
+ WINED3DSIH_REP,
+ WINED3DSIH_RET,
+ WINED3DSIH_RSQ,
+ WINED3DSIH_SETP,
+ WINED3DSIH_SGE,
+ WINED3DSIH_SGN,
+ WINED3DSIH_SINCOS,
+ WINED3DSIH_SLT,
+ WINED3DSIH_SUB,
+ WINED3DSIH_TEX,
+ WINED3DSIH_TEXBEM,
+ WINED3DSIH_TEXBEML,
+ WINED3DSIH_TEXCOORD,
+ WINED3DSIH_TEXDEPTH,
+ WINED3DSIH_TEXDP3,
+ WINED3DSIH_TEXDP3TEX,
+ WINED3DSIH_TEXKILL,
+ WINED3DSIH_TEXLDD,
+ WINED3DSIH_TEXLDL,
+ WINED3DSIH_TEXM3x2DEPTH,
+ WINED3DSIH_TEXM3x2PAD,
+ WINED3DSIH_TEXM3x2TEX,
+ WINED3DSIH_TEXM3x3,
+ WINED3DSIH_TEXM3x3DIFF,
+ WINED3DSIH_TEXM3x3PAD,
+ WINED3DSIH_TEXM3x3SPEC,
+ WINED3DSIH_TEXM3x3TEX,
+ WINED3DSIH_TEXM3x3VSPEC,
+ WINED3DSIH_TEXREG2AR,
+ WINED3DSIH_TEXREG2GB,
+ WINED3DSIH_TEXREG2RGB,
+ WINED3DSIH_TABLE_SIZE
+};
+
+enum wined3d_shader_type
+{
+ WINED3D_SHADER_TYPE_PIXEL,
+ WINED3D_SHADER_TYPE_VERTEX,
+ WINED3D_SHADER_TYPE_GEOMETRY,
+};
+
+struct wined3d_shader_version
+{
+ enum wined3d_shader_type type;
+ BYTE major;
+ BYTE minor;
+};
+
+#define WINED3D_SHADER_VERSION(major, minor) (((major) << 8) | (minor))
+
+typedef struct shader_reg_maps
+{
+ struct wined3d_shader_version shader_version;
+ BYTE texcoord; /* MAX_REG_TEXCRD, 8 */
+ BYTE address; /* MAX_REG_ADDR, 1 */
+ WORD labels; /* MAX_LABELS, 16 */
+ DWORD temporary; /* MAX_REG_TEMP, 32 */
+ DWORD *constf; /* pixel, vertex */
+ DWORD constf_size;
+ DWORD texcoord_mask[MAX_REG_TEXCRD]; /* vertex < 3.0 */
+ WORD input_registers; /* max(MAX_REG_INPUT, MAX_ATTRIBS), 16 */
+ WORD output_registers; /* MAX_REG_OUTPUT, 12 */
+ WORD integer_constants; /* MAX_CONST_I, 16 */
+ WORD boolean_constants; /* MAX_CONST_B, 16 */
+ WORD local_int_consts; /* MAX_CONST_I, 16 */
+ WORD local_bool_consts; /* MAX_CONST_B, 16 */
+
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)];
+ BYTE bumpmat; /* MAX_TEXTURES, 8 */
+ BYTE luminanceparams; /* MAX_TEXTURES, 8 */
+
+ WORD usesnrm : 1;
+ WORD vpos : 1;
+ WORD usesdsx : 1;
+ WORD usesdsy : 1;
+ WORD usestexldd : 1;
+ WORD usesmova : 1;
+ WORD usesfacing : 1;
+ WORD usesrelconstF : 1;
+ WORD fog : 1;
+ WORD usestexldl : 1;
+ WORD usesifc : 1;
+ WORD usescall : 1;
+ WORD padding : 4;
+
+ /* Whether or not loops are used in this shader, and nesting depth */
+ unsigned loop_depth;
+ unsigned highest_render_target;
+
+} shader_reg_maps;
+
+struct wined3d_shader_context
+{
+ IWineD3DBaseShader *shader;
+ const struct wined3d_gl_info *gl_info;
+ const struct shader_reg_maps *reg_maps;
+ struct wined3d_shader_buffer *buffer;
+ void *backend_data;
+};
+
+struct wined3d_shader_register
+{
+ WINED3DSHADER_PARAM_REGISTER_TYPE type;
+ UINT idx;
+ UINT array_idx;
+ const struct wined3d_shader_src_param *rel_addr;
+ enum wined3d_immconst_type immconst_type;
+ DWORD immconst_data[4];
+};
+
+struct wined3d_shader_dst_param
+{
+ struct wined3d_shader_register reg;
+ DWORD write_mask;
+ DWORD modifiers;
+ DWORD shift;
+};
+
+struct wined3d_shader_src_param
+{
+ struct wined3d_shader_register reg;
+ DWORD swizzle;
+ DWORD modifiers;
+};
+
+struct wined3d_shader_instruction
+{
+ const struct wined3d_shader_context *ctx;
+ enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx;
+ DWORD flags;
+ BOOL coissue;
+ DWORD predicate;
+ UINT dst_count;
+ const struct wined3d_shader_dst_param *dst;
+ UINT src_count;
+ const struct wined3d_shader_src_param *src;
+};
+
+struct wined3d_shader_semantic
+{
+ WINED3DDECLUSAGE usage;
+ UINT usage_idx;
+ WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
+ struct wined3d_shader_dst_param reg;
+};
+
+struct wined3d_shader_attribute
+{
+ WINED3DDECLUSAGE usage;
+ UINT usage_idx;
+};
+
+struct wined3d_shader_loop_control
+{
+ unsigned int count;
+ unsigned int start;
+ int step;
+};
+
+struct wined3d_shader_frontend
+{
+ void *(*shader_init)(const DWORD *ptr, DWORD tokens_num, const struct wined3d_shader_signature *output_signature);
+ void (*shader_free)(void *data);
+ void (*shader_read_header)(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version);
+ void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, UINT *param_size);
+ void (*shader_read_src_param)(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param,
+ struct wined3d_shader_src_param *src_rel_addr);
+ void (*shader_read_dst_param)(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
+ struct wined3d_shader_src_param *dst_rel_addr);
+ void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic);
+ void (*shader_read_comment)(const DWORD **ptr, const char **comment, UINT *comment_size);
+ BOOL (*shader_is_end)(void *data, const DWORD **ptr);
+};
+
+extern const struct wined3d_shader_frontend sm1_shader_frontend DECLSPEC_HIDDEN;
+extern const struct wined3d_shader_frontend sm4_shader_frontend DECLSPEC_HIDDEN;
+
+typedef void (*SHADER_HANDLER)(const struct wined3d_shader_instruction *);
+
+struct shader_caps {
+ DWORD VertexShaderVersion;
+ DWORD MaxVertexShaderConst;
+
+ DWORD PixelShaderVersion;
+ float PixelShader1xMaxValue;
+ DWORD MaxPixelShaderConst;
+
+ WINED3DVSHADERCAPS2_0 VS20Caps;
+ WINED3DPSHADERCAPS2_0 PS20Caps;
+
+ DWORD MaxVShaderInstructionsExecuted;
+ DWORD MaxPShaderInstructionsExecuted;
+ DWORD MaxVertexShader30InstructionSlots;
+ DWORD MaxPixelShader30InstructionSlots;
+
+ BOOL VSClipping;
+};
+
+enum tex_types
+{
+ tex_1d = 0,
+ tex_2d = 1,
+ tex_3d = 2,
+ tex_cube = 3,
+ tex_rect = 4,
+ tex_type_count = 5,
+};
+
+enum vertexprocessing_mode {
+ fixedfunction,
+ vertexshader,
+ pretransformed
+};
+
+#define WINED3D_CONST_NUM_UNUSED ~0U
+
+enum fogmode {
+ FOG_OFF,
+ FOG_LINEAR,
+ FOG_EXP,
+ FOG_EXP2
+};
+
+struct wined3d_context;
+
+#define WINED3D_PSARGS_PROJECTED (1<<3)
+#define WINED3D_PSARGS_TEXTRANSFORM_SHIFT 4
+#define WINED3D_PSARGS_TEXTRANSFORM_MASK 0xF
+
+/* Stateblock dependent parameters which have to be hardcoded
+ * into the shader code
+ */
+struct ps_compile_args {
+ struct color_fixup_desc color_fixup[MAX_FRAGMENT_SAMPLERS];
+ enum vertexprocessing_mode vp_mode;
+ enum fogmode fog;
+ /* Projected textures(ps 1.0-1.3) */
+ WORD tex_transform;
+ /* Texture types(2D, Cube, 3D) in ps 1.x */
+ WORD srgb_correction;
+ WORD np2_fixup;
+ /* Bitmap for NP2 texcoord fixups (16 samplers max currently).
+ D3D9 has a limit of 16 samplers and the fixup is superfluous
+ in D3D10 (unconditional NP2 support mandatory). */
+ WORD t_mirror;
+};
+
+enum fog_src_type {
+ VS_FOG_Z = 0,
+ VS_FOG_COORD = 1
+};
+
+struct vs_compile_args {
+ BYTE fog_src;
+ BYTE clip_enabled;
+ WORD swizzle_map; /* MAX_ATTRIBS, 16 */
+};
+
+typedef struct {
+ void (*shader_handle_instruction)(const struct wined3d_shader_instruction *);
+ void (*shader_select)(const struct wined3d_context *context, BOOL usePS, BOOL useVS);
+ void (*shader_select_depth_blt)(IWineD3DDevice *iface, enum tex_types tex_type);
+ void (*shader_deselect_depth_blt)(IWineD3DDevice *iface);
+ void (*shader_update_float_vertex_constants)(IWineD3DDevice *iface, UINT start, UINT count);
+ void (*shader_update_float_pixel_constants)(IWineD3DDevice *iface, UINT start, UINT count);
+ void (*shader_load_constants)(const struct wined3d_context *context, char usePS, char useVS);
+ void (*shader_load_np2fixup_constants)(IWineD3DDevice *iface, char usePS, char useVS);
+ void (*shader_destroy)(IWineD3DBaseShader *iface);
+ HRESULT (*shader_alloc_private)(IWineD3DDevice *iface);
+ void (*shader_free_private)(IWineD3DDevice *iface);
+ BOOL (*shader_dirtifyable_constants)(IWineD3DDevice *iface);
+ void (*shader_get_caps)(const struct wined3d_gl_info *gl_info, struct shader_caps *caps);
+ BOOL (*shader_color_fixup_supported)(struct color_fixup_desc fixup);
+ void (*shader_add_instruction_modifiers)(const struct wined3d_shader_instruction *ins);
+} shader_backend_t;
+
+extern const shader_backend_t glsl_shader_backend DECLSPEC_HIDDEN;
+extern const shader_backend_t arb_program_shader_backend DECLSPEC_HIDDEN;
+extern const shader_backend_t none_shader_backend DECLSPEC_HIDDEN;
+
+/* X11 locking */
+
+extern void (* CDECL wine_tsx11_lock_ptr)(void) DECLSPEC_HIDDEN;
+extern void (* CDECL wine_tsx11_unlock_ptr)(void) DECLSPEC_HIDDEN;
+
+/* As GLX relies on X, this is needed */
+extern int num_lock DECLSPEC_HIDDEN;
+
+#if 0
+#define ENTER_GL() ++num_lock; if (num_lock > 1) FIXME("Recursive use of GL lock to: %d\n", num_lock); wine_tsx11_lock_ptr()
+#define LEAVE_GL() if (num_lock != 1) FIXME("Recursive use of GL lock: %d\n", num_lock); --num_lock; wine_tsx11_unlock_ptr()
+#else
+#define ENTER_GL() wine_tsx11_lock_ptr()
+#define LEAVE_GL() wine_tsx11_unlock_ptr()
+#endif
+
+/*****************************************************************************
+ * Defines
+ */
+
+/* GL related defines */
+/* ------------------ */
+#define GL_EXTCALL(FuncName) (GLINFO_LOCATION.FuncName)
+
+#define D3DCOLOR_B_R(dw) (((dw) >> 16) & 0xFF)
+#define D3DCOLOR_B_G(dw) (((dw) >> 8) & 0xFF)
+#define D3DCOLOR_B_B(dw) (((dw) >> 0) & 0xFF)
+#define D3DCOLOR_B_A(dw) (((dw) >> 24) & 0xFF)
+
+#define D3DCOLOR_R(dw) (((float) (((dw) >> 16) & 0xFF)) / 255.0f)
+#define D3DCOLOR_G(dw) (((float) (((dw) >> 8) & 0xFF)) / 255.0f)
+#define D3DCOLOR_B(dw) (((float) (((dw) >> 0) & 0xFF)) / 255.0f)
+#define D3DCOLOR_A(dw) (((float) (((dw) >> 24) & 0xFF)) / 255.0f)
+
+#define D3DCOLORTOGLFLOAT4(dw, vec) do { \
+ (vec)[0] = D3DCOLOR_R(dw); \
+ (vec)[1] = D3DCOLOR_G(dw); \
+ (vec)[2] = D3DCOLOR_B(dw); \
+ (vec)[3] = D3DCOLOR_A(dw); \
+} while(0)
+
+/* DirectX Device Limits */
+/* --------------------- */
+#define MAX_MIP_LEVELS 32 /* Maximum number of mipmap levels. */
+#define HIGHEST_TRANSFORMSTATE WINED3DTS_WORLDMATRIX(255) /* Highest value in WINED3DTRANSFORMSTATETYPE */
+
+/* Checking of API calls */
+/* --------------------- */
+#ifndef WINE_NO_DEBUG_MSGS
+# ifdef VBOX_WITH_VMSVGA
+# define checkGLcall(A) \
+do { \
+ GLint err; \
+ if(!__WINE_IS_DEBUG_ON(_FIXME, __wine_dbch___default)) break; \
+ err = glGetError(); \
+ if (err == GL_NO_ERROR) { \
+ TRACE("%s call ok %s / %d\n", A, __FILE__, __LINE__); \
+ \
+ } else { \
+ ERR(">>>>>>>>>>>>>>>>> %s (%#x) from %s @ %s / %d\n", \
+ debug_glerror(err), err, A, __FILE__, __LINE__); \
+ } \
+} while(0)
+# else
+# define checkGLcall(A) \
+do { \
+ GLint err; \
+ if(!__WINE_IS_DEBUG_ON(_FIXME, __wine_dbch___default)) break; \
+ err = glGetError(); \
+ if (err == GL_NO_ERROR) { \
+ TRACE("%s call ok %s / %d\n", A, __FILE__, __LINE__); \
+ \
+ } else do { \
+ ERR(">>>>>>>>>>>>>>>>> %s (%#x) from %s @ %s / %d\n", \
+ debug_glerror(err), err, A, __FILE__, __LINE__); \
+ err = glGetError(); \
+ } while (err != GL_NO_ERROR); \
+} while(0)
+# endif
+#else
+#define checkGLcall(A) do {} while(0)
+#endif
+
+/* Trace routines / diagnostics */
+/* ---------------------------- */
+
+/* Dump out a matrix and copy it */
+#define conv_mat(mat,gl_mat) \
+do { \
+ TRACE("%f %f %f %f\n", (mat)->u.s._11, (mat)->u.s._12, (mat)->u.s._13, (mat)->u.s._14); \
+ TRACE("%f %f %f %f\n", (mat)->u.s._21, (mat)->u.s._22, (mat)->u.s._23, (mat)->u.s._24); \
+ TRACE("%f %f %f %f\n", (mat)->u.s._31, (mat)->u.s._32, (mat)->u.s._33, (mat)->u.s._34); \
+ TRACE("%f %f %f %f\n", (mat)->u.s._41, (mat)->u.s._42, (mat)->u.s._43, (mat)->u.s._44); \
+ memcpy(gl_mat, (mat), 16 * sizeof(float)); \
+} while (0)
+
+/* Trace vector and strided data information */
+#define TRACE_STRIDED(si, name) do { if (si->use_map & (1 << name)) \
+ TRACE( #name "=(data:%p, stride:%d, format:%#x, vbo %d, stream %u)\n", \
+ si->elements[name].data, si->elements[name].stride, si->elements[name].format_desc->format, \
+ si->elements[name].buffer_object, si->elements[name].stream_idx); } while(0)
+
+/* Advance declaration of structures to satisfy compiler */
+typedef struct IWineD3DStateBlockImpl IWineD3DStateBlockImpl;
+typedef struct IWineD3DSurfaceImpl IWineD3DSurfaceImpl;
+typedef struct IWineD3DPaletteImpl IWineD3DPaletteImpl;
+typedef struct IWineD3DDeviceImpl IWineD3DDeviceImpl;
+typedef struct IWineD3DSwapChainImpl IWineD3DSwapChainImpl;
+
+/* Global variables */
+extern const float identity[16] DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * Compilable extra diagnostics
+ */
+
+/* TODO: Confirm each of these works when wined3d move completed */
+#if 0 /* NOTE: Must be 0 in cvs */
+ /* To avoid having to get gigabytes of trace, the following can be compiled in, and at the start
+ of each frame, a check is made for the existence of C:\D3DTRACE, and if it exists d3d trace
+ is enabled, and if it doesn't exist it is disabled. */
+# define FRAME_DEBUGGING
+ /* Adding in the SINGLE_FRAME_DEBUGGING gives a trace of just what makes up a single frame, before
+ the file is deleted */
+# if 1 /* NOTE: Must be 1 in cvs, as this is mostly more useful than a trace from program start */
+# define SINGLE_FRAME_DEBUGGING
+# endif
+ /* The following, when enabled, lets you see the makeup of the frame, by drawprimitive calls.
+ It can only be enabled when FRAME_DEBUGGING is also enabled
+ The contents of the back buffer are written into /tmp/backbuffer_* after each primitive
+ array is drawn. */
+# if 0 /* NOTE: Must be 0 in cvs, as this give a lot of ppm files when compiled in */
+# define SHOW_FRAME_MAKEUP 1
+# endif
+ /* The following, when enabled, lets you see the makeup of the all the textures used during each
+ of the drawprimitive calls. It can only be enabled when SHOW_FRAME_MAKEUP is also enabled.
+ The contents of the textures assigned to each stage are written into
+ /tmp/texture_*_<Stage>.ppm after each primitive array is drawn. */
+# if 0 /* NOTE: Must be 0 in cvs, as this give a lot of ppm files when compiled in */
+# define SHOW_TEXTURE_MAKEUP 0
+# endif
+extern BOOL isOn;
+extern BOOL isDumpingFrames;
+extern LONG primCounter;
+#endif
+
+enum wined3d_ffp_idx
+{
+ WINED3D_FFP_POSITION = 0,
+ WINED3D_FFP_BLENDWEIGHT = 1,
+ WINED3D_FFP_BLENDINDICES = 2,
+ WINED3D_FFP_NORMAL = 3,
+ WINED3D_FFP_PSIZE = 4,
+ WINED3D_FFP_DIFFUSE = 5,
+ WINED3D_FFP_SPECULAR = 6,
+ WINED3D_FFP_TEXCOORD0 = 7,
+ WINED3D_FFP_TEXCOORD1 = 8,
+ WINED3D_FFP_TEXCOORD2 = 9,
+ WINED3D_FFP_TEXCOORD3 = 10,
+ WINED3D_FFP_TEXCOORD4 = 11,
+ WINED3D_FFP_TEXCOORD5 = 12,
+ WINED3D_FFP_TEXCOORD6 = 13,
+ WINED3D_FFP_TEXCOORD7 = 14,
+};
+
+enum wined3d_ffp_emit_idx
+{
+ WINED3D_FFP_EMIT_FLOAT1 = 0,
+ WINED3D_FFP_EMIT_FLOAT2 = 1,
+ WINED3D_FFP_EMIT_FLOAT3 = 2,
+ WINED3D_FFP_EMIT_FLOAT4 = 3,
+ WINED3D_FFP_EMIT_D3DCOLOR = 4,
+ WINED3D_FFP_EMIT_UBYTE4 = 5,
+ WINED3D_FFP_EMIT_SHORT2 = 6,
+ WINED3D_FFP_EMIT_SHORT4 = 7,
+ WINED3D_FFP_EMIT_UBYTE4N = 8,
+ WINED3D_FFP_EMIT_SHORT2N = 9,
+ WINED3D_FFP_EMIT_SHORT4N = 10,
+ WINED3D_FFP_EMIT_USHORT2N = 11,
+ WINED3D_FFP_EMIT_USHORT4N = 12,
+ WINED3D_FFP_EMIT_UDEC3 = 13,
+ WINED3D_FFP_EMIT_DEC3N = 14,
+ WINED3D_FFP_EMIT_FLOAT16_2 = 15,
+ WINED3D_FFP_EMIT_FLOAT16_4 = 16,
+ WINED3D_FFP_EMIT_COUNT = 17
+};
+
+struct wined3d_stream_info_element
+{
+ const struct wined3d_format_desc *format_desc;
+ GLsizei stride;
+ const BYTE *data;
+ UINT stream_idx;
+ GLuint buffer_object;
+};
+
+struct wined3d_stream_info
+{
+ struct wined3d_stream_info_element elements[MAX_ATTRIBS];
+ BOOL position_transformed;
+ WORD swizzle_map; /* MAX_ATTRIBS, 16 */
+ WORD use_map; /* MAX_ATTRIBS, 16 */
+};
+
+/*****************************************************************************
+ * Prototypes
+ */
+
+/* Routine common to the draw primitive and draw indexed primitive routines */
+void drawPrimitive(IWineD3DDevice *iface, UINT index_count,
+ UINT start_idx, UINT idxBytes, const void *idxData) DECLSPEC_HIDDEN;
+DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) DECLSPEC_HIDDEN;
+
+typedef void (WINE_GLAPI *glAttribFunc)(const void *data);
+typedef void (WINE_GLAPI *glMultiTexCoordFunc)(GLenum unit, const void *data);
+extern glAttribFunc position_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glAttribFunc diffuse_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glAttribFunc specular_func_3ubv DECLSPEC_HIDDEN;
+extern glAttribFunc specular_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glAttribFunc normal_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+extern glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC_HIDDEN;
+
+#define eps 1e-8
+
+#define GET_TEXCOORD_SIZE_FROM_FVF(d3dvtVertexType, tex_num) \
+ (((((d3dvtVertexType) >> (16 + (2 * (tex_num)))) + 1) & 0x03) + 1)
+
+/* Routines and structures related to state management */
+
+#define STATE_RENDER(a) (a)
+#define STATE_IS_RENDER(a) ((a) >= STATE_RENDER(1) && (a) <= STATE_RENDER(WINEHIGHEST_RENDER_STATE))
+
+#define STATE_TEXTURESTAGE(stage, num) (STATE_RENDER(WINEHIGHEST_RENDER_STATE) + 1 + (stage) * (WINED3D_HIGHEST_TEXTURE_STATE + 1) + (num))
+#define STATE_IS_TEXTURESTAGE(a) ((a) >= STATE_TEXTURESTAGE(0, 1) && (a) <= STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE))
+
+/* + 1 because samplers start with 0 */
+#define STATE_SAMPLER(num) (STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE) + 1 + (num))
+#define STATE_IS_SAMPLER(num) ((num) >= STATE_SAMPLER(0) && (num) <= STATE_SAMPLER(MAX_COMBINED_SAMPLERS - 1))
+
+#define STATE_PIXELSHADER (STATE_SAMPLER(MAX_COMBINED_SAMPLERS - 1) + 1)
+#define STATE_IS_PIXELSHADER(a) ((a) == STATE_PIXELSHADER)
+
+#define STATE_TRANSFORM(a) (STATE_PIXELSHADER + (a))
+#define STATE_IS_TRANSFORM(a) ((a) >= STATE_TRANSFORM(1) && (a) <= STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(255)))
+
+#define STATE_STREAMSRC (STATE_TRANSFORM(WINED3DTS_WORLDMATRIX(255)) + 1)
+#define STATE_IS_STREAMSRC(a) ((a) == STATE_STREAMSRC)
+#define STATE_INDEXBUFFER (STATE_STREAMSRC + 1)
+#define STATE_IS_INDEXBUFFER(a) ((a) == STATE_INDEXBUFFER)
+
+#define STATE_VDECL (STATE_INDEXBUFFER + 1)
+#define STATE_IS_VDECL(a) ((a) == STATE_VDECL)
+
+#define STATE_VSHADER (STATE_VDECL + 1)
+#define STATE_IS_VSHADER(a) ((a) == STATE_VSHADER)
+
+#define STATE_VIEWPORT (STATE_VSHADER + 1)
+#define STATE_IS_VIEWPORT(a) ((a) == STATE_VIEWPORT)
+
+#define STATE_VERTEXSHADERCONSTANT (STATE_VIEWPORT + 1)
+#define STATE_PIXELSHADERCONSTANT (STATE_VERTEXSHADERCONSTANT + 1)
+#define STATE_IS_VERTEXSHADERCONSTANT(a) ((a) == STATE_VERTEXSHADERCONSTANT)
+#define STATE_IS_PIXELSHADERCONSTANT(a) ((a) == STATE_PIXELSHADERCONSTANT)
+
+#define STATE_ACTIVELIGHT(a) (STATE_PIXELSHADERCONSTANT + (a) + 1)
+#define STATE_IS_ACTIVELIGHT(a) ((a) >= STATE_ACTIVELIGHT(0) && (a) < STATE_ACTIVELIGHT(MAX_ACTIVE_LIGHTS))
+
+#define STATE_SCISSORRECT (STATE_ACTIVELIGHT(MAX_ACTIVE_LIGHTS - 1) + 1)
+#define STATE_IS_SCISSORRECT(a) ((a) == STATE_SCISSORRECT)
+
+#define STATE_CLIPPLANE(a) (STATE_SCISSORRECT + 1 + (a))
+#define STATE_IS_CLIPPLANE(a) ((a) >= STATE_CLIPPLANE(0) && (a) <= STATE_CLIPPLANE(MAX_CLIPPLANES - 1))
+
+#define STATE_MATERIAL (STATE_CLIPPLANE(MAX_CLIPPLANES))
+#define STATE_IS_MATERIAL(a) ((a) == STATE_MATERIAL)
+
+#define STATE_FRONTFACE (STATE_MATERIAL + 1)
+#define STATE_IS_FRONTFACE(a) ((a) == STATE_FRONTFACE)
+
+#define STATE_HIGHEST (STATE_FRONTFACE)
+
+enum fogsource {
+ FOGSOURCE_FFP,
+ FOGSOURCE_VS,
+ FOGSOURCE_COORD,
+};
+
+#define WINED3D_MAX_FBO_ENTRIES 64
+
+struct wined3d_occlusion_query
+{
+ struct list entry;
+ GLuint id;
+ struct wined3d_context *context;
+};
+
+union wined3d_gl_query_object
+{
+ GLuint id;
+ GLsync sync;
+};
+
+struct wined3d_event_query
+{
+ struct list entry;
+ union wined3d_gl_query_object object;
+ struct wined3d_context *context;
+};
+
+enum wined3d_event_query_result
+{
+ WINED3D_EVENT_QUERY_OK,
+ WINED3D_EVENT_QUERY_WAITING,
+ WINED3D_EVENT_QUERY_NOT_STARTED,
+ WINED3D_EVENT_QUERY_WRONG_THREAD,
+ WINED3D_EVENT_QUERY_ERROR
+};
+
+void wined3d_event_query_destroy(struct wined3d_event_query *query) DECLSPEC_HIDDEN;
+enum wined3d_event_query_result wined3d_event_query_test(struct wined3d_event_query *query, IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+enum wined3d_event_query_result wined3d_event_query_finish(struct wined3d_event_query *query, IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+void wined3d_event_query_issue(struct wined3d_event_query *query, IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+HRESULT wined3d_event_query_supported(const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+
+struct wined3d_context
+{
+ const struct wined3d_gl_info *gl_info;
+ /* State dirtification
+ * dirtyArray is an array that contains markers for dirty states. numDirtyEntries states are dirty, their numbers are in indices
+ * 0...numDirtyEntries - 1. isStateDirty is a redundant copy of the dirtyArray. Technically only one of them would be needed,
+ * but with the help of both it is easy to find out if a state is dirty(just check the array index), and for applying dirty states
+ * only numDirtyEntries array elements have to be checked, not STATE_HIGHEST states.
+ */
+ DWORD dirtyArray[STATE_HIGHEST + 1]; /* Won't get bigger than that, a state is never marked dirty 2 times */
+ DWORD numDirtyEntries;
+ DWORD isStateDirty[STATE_HIGHEST / (sizeof(DWORD) * CHAR_BIT) + 1]; /* Bitmap to find out quickly if a state is dirty */
+
+#ifdef VBOX_WITH_WDDM
+ IWineD3DDeviceImpl *device;
+ IWineD3DSwapChainImpl *currentSwapchain;
+#else
+ IWineD3DSwapChainImpl *swapchain;
+#endif
+
+ IWineD3DSurface *current_rt;
+ DWORD tid; /* Thread ID which owns this context at the moment */
+
+ /* Stores some information about the context state for optimization */
+ WORD render_offscreen : 1;
+ WORD draw_buffer_dirty : 1;
+ WORD last_was_rhw : 1; /* true iff last draw_primitive was in xyzrhw mode */
+ WORD last_was_pshader : 1;
+ WORD last_was_vshader : 1;
+ WORD namedArraysLoaded : 1;
+ WORD numberedArraysLoaded : 1;
+ WORD last_was_blit : 1;
+ WORD last_was_ckey : 1;
+ WORD fog_coord : 1;
+ WORD fog_enabled : 1;
+ WORD num_untracked_materials : 2; /* Max value 2 */
+ WORD current : 1;
+#if !defined(VBOX_WINE_WITH_SINGLE_CONTEXT) && !defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+ WORD destroyed : 1;
+#endif
+ WORD valid : 1;
+ BYTE texShaderBumpMap; /* MAX_TEXTURES, 8 */
+ BYTE lastWasPow2Texture; /* MAX_TEXTURES, 8 */
+ DWORD numbered_array_mask;
+ GLenum tracking_parm; /* Which source is tracking current colour */
+ GLenum untracked_materials[2];
+ UINT blit_w, blit_h;
+ enum fogsource fog_source;
+
+ char *vshader_const_dirty, *pshader_const_dirty;
+
+ /* The actual opengl context */
+ UINT level;
+ HGLRC restore_ctx;
+ HDC restore_dc;
+ HGLRC glCtx;
+#ifndef VBOX_WITH_WDDM
+ HWND win_handle;
+ HDC hdc;
+#endif
+
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+ VBOXTLSREFDATA
+#endif
+
+#ifdef VBOX_WITH_VMSVGA
+ IWineD3DDeviceImpl *pDeviceContext;
+ BOOL fChangedVertexShaderConstant;
+ BOOL fChangedPixelShaderConstant;
+ BOOL fChangedVertexShader;
+ BOOL fChangedPixelShader;
+#endif
+ int pixel_format;
+ GLint aux_buffers;
+
+ /* FBOs */
+ UINT fbo_entry_count;
+ struct list fbo_list;
+ struct list fbo_destroy_list;
+ struct fbo_entry *current_fbo;
+ GLuint src_fbo;
+ GLuint dst_fbo;
+ GLuint fbo_read_binding;
+ GLuint fbo_draw_binding;
+ BOOL rebind_fbo;
+
+ /* Queries */
+ GLuint *free_occlusion_queries;
+ UINT free_occlusion_query_size;
+ UINT free_occlusion_query_count;
+ struct list occlusion_queries;
+
+ union wined3d_gl_query_object *free_event_queries;
+ UINT free_event_query_size;
+ UINT free_event_query_count;
+ struct list event_queries;
+
+ /* Extension emulation */
+ GLint gl_fog_source;
+ GLfloat fog_coord_value;
+ GLfloat color[4], fogstart, fogend, fogcolor[4];
+ GLuint dummy_arbfp_prog;
+};
+
+typedef void (*APPLYSTATEFUNC)(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3d_context *ctx);
+
+struct StateEntry
+{
+ DWORD representative;
+ APPLYSTATEFUNC apply;
+};
+
+struct StateEntryTemplate
+{
+ DWORD state;
+ struct StateEntry content;
+ GL_SupportedExt extension;
+};
+
+struct fragment_caps
+{
+ DWORD PrimitiveMiscCaps;
+ DWORD TextureOpCaps;
+ DWORD MaxTextureBlendStages;
+ DWORD MaxSimultaneousTextures;
+};
+
+struct fragment_pipeline
+{
+ void (*enable_extension)(IWineD3DDevice *iface, BOOL enable);
+ void (*get_caps)(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps);
+ HRESULT (*alloc_private)(IWineD3DDevice *iface);
+ void (*free_private)(IWineD3DDevice *iface);
+ BOOL (*color_fixup_supported)(struct color_fixup_desc fixup);
+ const struct StateEntryTemplate *states;
+ BOOL ffp_proj_control;
+};
+
+extern const struct StateEntryTemplate misc_state_template[] DECLSPEC_HIDDEN;
+extern const struct StateEntryTemplate ffp_vertexstate_template[] DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline ffp_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline atifs_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline arbfp_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline nvts_fragment_pipeline DECLSPEC_HIDDEN;
+extern const struct fragment_pipeline nvrc_fragment_pipeline DECLSPEC_HIDDEN;
+
+/* "Base" state table */
+HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_multistate_funcs,
+ const struct wined3d_gl_info *gl_info, const struct StateEntryTemplate *vertex,
+ const struct fragment_pipeline *fragment, const struct StateEntryTemplate *misc) DECLSPEC_HIDDEN;
+
+enum blit_operation
+{
+ BLIT_OP_BLIT,
+ BLIT_OP_COLOR_FILL
+};
+
+/* Shaders for color conversions in blits */
+struct blit_shader
+{
+ HRESULT (*alloc_private)(IWineD3DDevice *iface);
+ void (*free_private)(IWineD3DDevice *iface);
+ HRESULT (*set_shader)(IWineD3DDevice *iface, IWineD3DSurfaceImpl *surface);
+ void (*unset_shader)(IWineD3DDevice *iface);
+ BOOL (*blit_supported)(const struct wined3d_gl_info *gl_info, enum blit_operation blit_op,
+ const RECT *src_rect, DWORD src_usage, WINED3DPOOL src_pool, const struct wined3d_format_desc *src_format_desc,
+ const RECT *dst_rect, DWORD dst_usage, WINED3DPOOL dst_pool, const struct wined3d_format_desc *dst_format_desc);
+ HRESULT (*color_fill)(IWineD3DDeviceImpl *device, IWineD3DSurfaceImpl *dst_surface, const RECT *dst_rect, DWORD fill_color);
+};
+
+extern const struct blit_shader ffp_blit DECLSPEC_HIDDEN;
+extern const struct blit_shader arbfp_blit DECLSPEC_HIDDEN;
+extern const struct blit_shader cpu_blit DECLSPEC_HIDDEN;
+
+/* Temporary blit_shader helper functions */
+HRESULT arbfp_blit_surface(IWineD3DDeviceImpl *device, IWineD3DSurfaceImpl *src_surface, const RECT *src_rect,
+ IWineD3DSurfaceImpl *dst_surface, const RECT *dst_rect_in, enum blit_operation blit_op,
+ DWORD Filter) DECLSPEC_HIDDEN;
+
+typedef enum ContextUsage {
+ CTXUSAGE_RESOURCELOAD = 1, /* Only loads textures: No State is applied */
+ CTXUSAGE_DRAWPRIM = 2, /* OpenGL states are set up for blitting DirectDraw surfaces */
+ CTXUSAGE_BLIT = 3, /* OpenGL states are set up 3D drawing */
+ CTXUSAGE_CLEAR = 4, /* Drawable and states are set up for clearing */
+} ContextUsage;
+
+struct wined3d_context *context_acquire(IWineD3DDeviceImpl *This,
+ IWineD3DSurface *target, enum ContextUsage usage) DECLSPEC_HIDDEN;
+void context_alloc_event_query(struct wined3d_context *context,
+ struct wined3d_event_query *query) DECLSPEC_HIDDEN;
+void context_alloc_occlusion_query(struct wined3d_context *context,
+ struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
+void context_resource_released(IWineD3DDevice *iface,
+ IWineD3DResource *resource, WINED3DRESOURCETYPE type) DECLSPEC_HIDDEN;
+void context_bind_fbo(struct wined3d_context *context, GLenum target, GLuint *fbo) DECLSPEC_HIDDEN;
+void context_attach_depth_stencil_fbo(struct wined3d_context *context,
+ GLenum fbo_target, IWineD3DSurfaceImpl *depth_stencil, BOOL use_render_buffer) DECLSPEC_HIDDEN;
+void context_attach_surface_fbo(const struct wined3d_context *context,
+ GLenum fbo_target, DWORD idx, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN;
+struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,
+ const struct wined3d_format_desc *ds_format_desc
+#ifdef VBOX_WITH_WDDM
+ , struct VBOXUHGSMI *pHgsmi
+#endif
+ ) DECLSPEC_HIDDEN;
+struct IWineD3DDeviceImpl *context_get_device(const struct wined3d_context *context); DECLSPEC_HIDDEN;
+#ifdef VBOX_WITH_WDDM
+struct wined3d_context *context_find_create(IWineD3DDeviceImpl *device, IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,
+ const struct wined3d_format_desc *ds_format_desc) DECLSPEC_HIDDEN;
+BOOL context_acquire_context(struct wined3d_context * context, IWineD3DSurface *target, enum ContextUsage usage, BOOL bReValidate) DECLSPEC_HIDDEN;
+#endif
+void context_destroy(IWineD3DDeviceImpl *This, struct wined3d_context *context) DECLSPEC_HIDDEN;
+void context_free_event_query(struct wined3d_event_query *query) DECLSPEC_HIDDEN;
+void context_free_occlusion_query(struct wined3d_occlusion_query *query) DECLSPEC_HIDDEN;
+struct wined3d_context *context_get_current(void) DECLSPEC_HIDDEN;
+DWORD context_get_tls_idx(void) DECLSPEC_HIDDEN;
+void context_release(struct wined3d_context *context) DECLSPEC_HIDDEN;
+BOOL context_set_current(struct wined3d_context *ctx) DECLSPEC_HIDDEN;
+void context_set_draw_buffer(struct wined3d_context *context, GLenum buffer) DECLSPEC_HIDDEN;
+void context_set_tls_idx(DWORD idx) DECLSPEC_HIDDEN;
+void context_surface_update(struct wined3d_context *context, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN;
+#if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
+void context_clear_on_thread_detach(void);
+#endif
+/* Macros for doing basic GPU detection based on opengl capabilities */
+#define WINE_D3D6_CAPABLE(gl_info) (gl_info->supported[ARB_MULTITEXTURE])
+#define WINE_D3D7_CAPABLE(gl_info) (gl_info->supported[ARB_TEXTURE_COMPRESSION] && gl_info->supported[ARB_TEXTURE_CUBE_MAP] && gl_info->supported[ARB_TEXTURE_ENV_DOT3])
+#define WINE_D3D8_CAPABLE(gl_info) WINE_D3D7_CAPABLE(gl_info) && (gl_info->supported[ARB_MULTISAMPLE] && gl_info->supported[ARB_TEXTURE_BORDER_CLAMP])
+#define WINE_D3D9_CAPABLE(gl_info) WINE_D3D8_CAPABLE(gl_info) && (gl_info->supported[ARB_FRAGMENT_PROGRAM] && gl_info->supported[ARB_VERTEX_SHADER])
+#define WINE_D3D10_CAPABLE(gl_info) WINE_D3D9_CAPABLE(gl_info) && (gl_info->supported[EXT_GPU_SHADER4])
+
+/*****************************************************************************
+ * Internal representation of a light
+ */
+struct wined3d_light_info
+{
+ WINED3DLIGHT OriginalParms; /* Note D3D8LIGHT == D3D9LIGHT */
+ DWORD OriginalIndex;
+ LONG glIndex;
+ BOOL enabled;
+
+ /* Converted parms to speed up swapping lights */
+ float lightPosn[4];
+ float lightDirn[4];
+ float exponent;
+ float cutoff;
+
+ struct list entry;
+};
+
+/* The default light parameters */
+extern const WINED3DLIGHT WINED3D_default_light DECLSPEC_HIDDEN;
+
+typedef struct WineD3D_PixelFormat
+{
+ int iPixelFormat; /* WGL pixel format */
+ int iPixelType; /* WGL pixel type e.g. WGL_TYPE_RGBA_ARB, WGL_TYPE_RGBA_FLOAT_ARB or WGL_TYPE_COLORINDEX_ARB */
+ int redSize, greenSize, blueSize, alphaSize, colorSize;
+ int depthSize, stencilSize;
+ BOOL windowDrawable;
+ BOOL doubleBuffer;
+ int auxBuffers;
+ int numSamples;
+} WineD3D_PixelFormat;
+
+enum wined3d_gl_vendor
+{
+ GL_VENDOR_UNKNOWN,
+ GL_VENDOR_APPLE,
+ GL_VENDOR_FGLRX,
+ GL_VENDOR_INTEL,
+ GL_VENDOR_MESA,
+ GL_VENDOR_NVIDIA,
+};
+
+
+enum wined3d_pci_vendor
+{
+ HW_VENDOR_SOFTWARE = 0x0000,
+ HW_VENDOR_ATI = 0x1002,
+ HW_VENDOR_NVIDIA = 0x10de,
+ HW_VENDOR_INTEL = 0x8086,
+};
+
+enum wined3d_pci_device
+{
+ CARD_WINE = 0x0000,
+
+ CARD_ATI_RAGE_128PRO = 0x5246,
+ CARD_ATI_RADEON_7200 = 0x5144,
+ CARD_ATI_RADEON_8500 = 0x514c,
+ CARD_ATI_RADEON_9500 = 0x4144,
+ CARD_ATI_RADEON_XPRESS_200M = 0x5955,
+ CARD_ATI_RADEON_X700 = 0x5e4c,
+ CARD_ATI_RADEON_X1600 = 0x71c2,
+ CARD_ATI_RADEON_HD2350 = 0x94c7,
+ CARD_ATI_RADEON_HD2600 = 0x9581,
+ CARD_ATI_RADEON_HD2900 = 0x9400,
+ CARD_ATI_RADEON_HD3200 = 0x9620,
+ CARD_ATI_RADEON_HD4350 = 0x954f,
+ CARD_ATI_RADEON_HD4550 = 0x9540,
+ CARD_ATI_RADEON_HD4600 = 0x9495,
+ CARD_ATI_RADEON_HD4650 = 0x9498,
+ CARD_ATI_RADEON_HD4670 = 0x9490,
+ CARD_ATI_RADEON_HD4700 = 0x944e,
+ CARD_ATI_RADEON_HD4770 = 0x94b3,
+ CARD_ATI_RADEON_HD4800 = 0x944c, /* Picked one value between 9440, 944c, 9442, 9460 */
+ CARD_ATI_RADEON_HD4830 = 0x944c,
+ CARD_ATI_RADEON_HD4850 = 0x9442,
+ CARD_ATI_RADEON_HD4870 = 0x9440,
+ CARD_ATI_RADEON_HD4890 = 0x9460,
+ CARD_ATI_RADEON_HD5700 = 0x68BE, /* Picked HD5750 */
+ CARD_ATI_RADEON_HD5750 = 0x68BE,
+ CARD_ATI_RADEON_HD5770 = 0x68B8,
+ CARD_ATI_RADEON_HD5800 = 0x6898, /* Picked HD5850 */
+ CARD_ATI_RADEON_HD5850 = 0x6898,
+ CARD_ATI_RADEON_HD5870 = 0x6899,
+
+ CARD_NVIDIA_RIVA_128 = 0x0018,
+ CARD_NVIDIA_RIVA_TNT = 0x0020,
+ CARD_NVIDIA_RIVA_TNT2 = 0x0028,
+ CARD_NVIDIA_GEFORCE = 0x0100,
+ CARD_NVIDIA_GEFORCE2_MX = 0x0110,
+ CARD_NVIDIA_GEFORCE2 = 0x0150,
+ CARD_NVIDIA_GEFORCE3 = 0x0200,
+ CARD_NVIDIA_GEFORCE4_MX = 0x0170,
+ CARD_NVIDIA_GEFORCE4_TI4200 = 0x0253,
+ CARD_NVIDIA_GEFORCEFX_5200 = 0x0320,
+ CARD_NVIDIA_GEFORCEFX_5600 = 0x0312,
+ CARD_NVIDIA_GEFORCEFX_5800 = 0x0302,
+ CARD_NVIDIA_GEFORCE_6200 = 0x014f,
+ CARD_NVIDIA_GEFORCE_6600GT = 0x0140,
+ CARD_NVIDIA_GEFORCE_6800 = 0x0041,
+ CARD_NVIDIA_GEFORCE_7400 = 0x01d8,
+ CARD_NVIDIA_GEFORCE_7300 = 0x01d7, /* GeForce Go 7300 */
+ CARD_NVIDIA_GEFORCE_7600 = 0x0391,
+ CARD_NVIDIA_GEFORCE_7800GT = 0x0092,
+ CARD_NVIDIA_GEFORCE_8100 = 0x084F,
+ CARD_NVIDIA_GEFORCE_8200 = 0x0849, /* Other PCI ID 0x084B */
+ CARD_NVIDIA_GEFORCE_8300GS = 0x0423,
+ CARD_NVIDIA_GEFORCE_8400GS = 0x0404,
+ CARD_NVIDIA_GEFORCE_8500GT = 0x0421,
+ CARD_NVIDIA_GEFORCE_8600GT = 0x0402,
+ CARD_NVIDIA_GEFORCE_8600MGT = 0x0407,
+ CARD_NVIDIA_GEFORCE_8800GTS = 0x0193,
+ CARD_NVIDIA_GEFORCE_9200 = 0x086d,
+ CARD_NVIDIA_GEFORCE_9400GT = 0x042c,
+ CARD_NVIDIA_GEFORCE_9500GT = 0x0640,
+ CARD_NVIDIA_GEFORCE_9600GT = 0x0622,
+ CARD_NVIDIA_GEFORCE_9800GT = 0x0614,
+ CARD_NVIDIA_GEFORCE_GTX260 = 0x05e2,
+ CARD_NVIDIA_GEFORCE_GTX275 = 0x05e6,
+ CARD_NVIDIA_GEFORCE_GTX280 = 0x05e1,
+ CARD_NVIDIA_GEFORCE_GT240 = 0x0ca3,
+
+ CARD_INTEL_845G = 0x2562,
+ CARD_INTEL_I830G = 0x3577,
+ CARD_INTEL_I855G = 0x3582,
+ CARD_INTEL_I865G = 0x2572,
+ CARD_INTEL_I915G = 0x2582,
+ CARD_INTEL_I915GM = 0x2592,
+ CARD_INTEL_I945GM = 0x27a2, /* Same as GMA 950? */
+ CARD_INTEL_X3100 = 0x2a02, /* Found in Macs. Same as GMA 965? */
+ CARD_INTEL_SBHD = 0x0126, /* SundyBridge HD */
+};
+
+struct wined3d_fbo_ops
+{
+ PGLFNGLISRENDERBUFFERPROC glIsRenderbuffer;
+ PGLFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
+ PGLFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
+ PGLFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
+ PGLFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
+ PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
+ PGLFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
+ PGLFNGLISFRAMEBUFFERPROC glIsFramebuffer;
+ PGLFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
+ PGLFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
+ PGLFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
+ PGLFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
+ PGLFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
+ PGLFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
+ PGLFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
+ PGLFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
+ PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
+ PGLFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
+ PGLFNGLGENERATEMIPMAPPROC glGenerateMipmap;
+};
+
+struct wined3d_gl_limits
+{
+ UINT buffers;
+ UINT lights;
+ UINT textures;
+ UINT texture_stages;
+ UINT fragment_samplers;
+ UINT vertex_samplers;
+ UINT combined_samplers;
+ UINT general_combiners;
+ UINT sampler_stages;
+ UINT clipplanes;
+ UINT texture_size;
+ UINT texture3d_size;
+ float pointsize_max;
+ float pointsize_min;
+ UINT point_sprite_units;
+ UINT blends;
+ UINT anisotropy;
+ float shininess;
+
+ UINT glsl_varyings;
+ UINT glsl_vs_float_constants;
+ UINT glsl_ps_float_constants;
+
+ UINT arb_vs_float_constants;
+ UINT arb_vs_native_constants;
+ UINT arb_vs_instructions;
+ UINT arb_vs_temps;
+ UINT arb_ps_float_constants;
+ UINT arb_ps_local_constants;
+ UINT arb_ps_native_constants;
+ UINT arb_ps_instructions;
+ UINT arb_ps_temps;
+};
+
+struct wined3d_gl_info
+{
+ DWORD glsl_version;
+ UINT vidmem;
+ struct wined3d_gl_limits limits;
+ DWORD reserved_glsl_constants;
+ DWORD quirks;
+ BOOL supported[WINED3D_GL_EXT_COUNT];
+ GLint wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP + 1];
+
+ struct wined3d_fbo_ops fbo_ops;
+#define USE_GL_FUNC(type, pfn, ext, replace) type pfn;
+ /* GL function pointers */
+ GL_EXT_FUNCS_GEN
+ /* WGL function pointers */
+ WGL_EXT_FUNCS_GEN
+#undef USE_GL_FUNC
+
+ struct wined3d_format_desc *gl_formats;
+};
+
+struct wined3d_driver_info
+{
+ enum wined3d_pci_vendor vendor;
+ enum wined3d_pci_device device;
+ const char *name;
+ const char *description;
+ DWORD version_high;
+ DWORD version_low;
+};
+
+/* The adapter structure */
+struct wined3d_adapter
+{
+ UINT ordinal;
+ BOOL opengl;
+ POINT monitorPoint;
+ struct wined3d_gl_info gl_info;
+ struct wined3d_driver_info driver_info;
+ WCHAR DeviceName[CCHDEVICENAME]; /* DeviceName for use with e.g. ChangeDisplaySettings */
+ int nCfgs;
+ WineD3D_PixelFormat *cfgs;
+ BOOL brokenStencil; /* Set on cards which only offer mixed depth+stencil */
+#ifndef VBOX_WITH_WDDM
+ unsigned int TextureRam; /* Amount of texture memory both video ram + AGP/TurboCache/HyperMemory/.. */
+ unsigned int UsedTextureRam;
+#endif
+ LUID luid;
+
+ const struct fragment_pipeline *fragment_pipe;
+ const shader_backend_t *shader_backend;
+ const struct blit_shader *blitter;
+};
+
+BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) DECLSPEC_HIDDEN;
+BOOL initPixelFormatsNoGL(struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+#ifndef VBOX_WITH_WDDM
+extern long WineD3DAdapterChangeGLRam(IWineD3DDeviceImpl *D3DDevice, long glram) DECLSPEC_HIDDEN;
+#endif
+extern void add_gl_compat_wrappers(struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+
+struct VBOXVMSVGASHADERIF;
+extern BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter, struct VBOXVMSVGASHADERIF *pVBoxShaderIf);
+
+
+/*****************************************************************************
+ * High order patch management
+ */
+struct WineD3DRectPatch
+{
+ UINT Handle;
+ float *mem;
+ WineDirect3DVertexStridedData strided;
+ WINED3DRECTPATCH_INFO RectPatchInfo;
+ float numSegs[4];
+ char has_normals, has_texcoords;
+ struct list entry;
+};
+
+HRESULT tesselate_rectpatch(IWineD3DDeviceImpl *This, struct WineD3DRectPatch *patch) DECLSPEC_HIDDEN;
+
+enum projection_types
+{
+ proj_none = 0,
+ proj_count3 = 1,
+ proj_count4 = 2
+};
+
+enum dst_arg
+{
+ resultreg = 0,
+ tempreg = 1
+};
+
+/*****************************************************************************
+ * Fixed function pipeline replacements
+ */
+#define ARG_UNUSED 0xff
+
+struct texture_stage_op
+{
+ unsigned cop : 8;
+ unsigned carg1 : 8;
+ unsigned carg2 : 8;
+ unsigned carg0 : 8;
+
+ unsigned aop : 8;
+ unsigned aarg1 : 8;
+ unsigned aarg2 : 8;
+ unsigned aarg0 : 8;
+
+ struct color_fixup_desc color_fixup;
+ unsigned tex_type : 3;
+ unsigned dst : 1;
+ unsigned projected : 2;
+ unsigned padding : 10;
+};
+
+struct ffp_frag_settings {
+ struct texture_stage_op op[MAX_TEXTURES];
+ enum fogmode fog;
+ /* Use shorts instead of chars to get dword alignment */
+ unsigned short sRGB_write;
+ unsigned short emul_clipplanes;
+};
+
+struct ffp_frag_desc
+{
+ struct wine_rb_entry entry;
+ struct ffp_frag_settings settings;
+};
+
+extern const struct wine_rb_functions wined3d_ffp_frag_program_rb_functions DECLSPEC_HIDDEN;
+extern const struct wined3d_parent_ops wined3d_null_parent_ops DECLSPEC_HIDDEN;
+
+void gen_ffp_frag_op(IWineD3DStateBlockImpl *stateblock, struct ffp_frag_settings *settings,
+ BOOL ignore_textype) DECLSPEC_HIDDEN;
+const struct ffp_frag_desc *find_ffp_frag_shader(const struct wine_rb_tree *fragment_shaders,
+ const struct ffp_frag_settings *settings) DECLSPEC_HIDDEN;
+void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *desc) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3D implementation structure
+ */
+typedef struct IWineD3DImpl
+{
+ /* IUnknown fields */
+ const IWineD3DVtbl *lpVtbl;
+ LONG ref; /* Note: Ref counting not required */
+
+ /* WineD3D Information */
+ IUnknown *parent;
+ UINT dxVersion;
+
+ UINT adapter_count;
+ struct wined3d_adapter adapters[1];
+} IWineD3DImpl;
+
+HRESULT wined3d_init(IWineD3DImpl *wined3d, UINT version, IUnknown *parent) DECLSPEC_HIDDEN;
+#ifndef VBOX_WITH_WDDM
+BOOL wined3d_register_window(HWND window, struct IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+void wined3d_unregister_window(HWND window, struct IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+#endif
+
+/*****************************************************************************
+ * IWineD3DDevice implementation structure
+ */
+#define WINED3D_UNMAPPED_STAGE ~0U
+
+/* Multithreaded flag. Removed from the public header to signal that IWineD3D::CreateDevice ignores it */
+#define WINED3DCREATE_MULTITHREADED 0x00000004
+
+#ifdef VBOX_WINE_WITH_PROFILE
+
+#include <iprt/time.h>
+
+#define VBOXWINEPROFILE_GET_TIME_NANO() RTTimeNanoTS()
+#define VBOXWINEPROFILE_GET_TIME_MILLI() RTTimeMilliTS()
+
+# define PRLOG(_m) do {\
+ vboxWDbgPrintF _m ; \
+ } while (0)
+
+typedef struct VBOXWINEPROFILE_ELEMENT
+{
+ uint64_t u64Time;
+ uint32_t cu32Calls;
+} VBOXWINEPROFILE_ELEMENT, *PVBOXWINEPROFILE_ELEMENT;
+
+typedef struct VBOXWINEPROFILE_HASHMAP_ELEMENT
+{
+ VBOXEXT_HASHMAP_ENTRY MapEntry;
+ VBOXWINEPROFILE_ELEMENT Data;
+} VBOXWINEPROFILE_HASHMAP_ELEMENT, *PVBOXWINEPROFILE_HASHMAP_ELEMENT;
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(_p) ((PVBOXWINEPROFILE_HASHMAP_ELEMENT)(((uint8_t*)(_p)) - RT_UOFFSETOF(VBOXWINEPROFILE_HASHMAP_ELEMENT, MapEntry)))
+
+#define VBOXWINEPROFILE_ELEMENT_DUMP(_p, _pn) do { \
+ PRLOG(("%s: t(%u);c(%u)\n", \
+ (_pn), \
+ (uint32_t)((_p)->u64Time / 1000000), \
+ (_p)->cu32Calls \
+ )); \
+ } while (0)
+
+#define VBOXWINEPROFILE_ELEMENT_RESET(_p) do { \
+ memset(_p, 0, sizeof (*(_p))); \
+ } while (0)
+
+#define VBOXWINEPROFILE_ELEMENT_STEP(_p, _t) do { \
+ (_p)->u64Time += (_t); \
+ ++(_p)->cu32Calls; \
+ } while (0)
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_CREATE() ( (PVBOXWINEPROFILE_HASHMAP_ELEMENT)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof (VBOXWINEPROFILE_HASHMAP_ELEMENT)) )
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_TERM(_pe) do { \
+ HeapFree(GetProcessHeap(), 0, (_pe)); \
+ } while (0)
+
+DECLINLINE(PVBOXWINEPROFILE_HASHMAP_ELEMENT) vboxWineProfileHashMapElementGet(PVBOXEXT_HASHMAP pMap, void *pvKey)
+{
+ PVBOXEXT_HASHMAP_ENTRY pEntry = VBoxExtHashGet(pMap, pvKey);
+ if (pEntry)
+ {
+ return VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pEntry);
+ }
+ else
+ {
+ PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_CREATE();
+ Assert(pElement);
+ if (pElement)
+ VBoxExtHashPut(pMap, pvKey, &pElement->MapEntry);
+ return pElement;
+ }
+}
+
+#define VBOXWINEPROFILE_HASHMAP_ELEMENT_STEP(_pm, _pk, _t) do { \
+ PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = vboxWineProfileHashMapElementGet(_pm, _pk); \
+ VBOXWINEPROFILE_ELEMENT_STEP(&pElement->Data, _t); \
+ } while (0)
+
+static DECLCALLBACK(bool) vboxWineProfileElementResetCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
+{
+ PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pValue);
+ VBOXWINEPROFILE_ELEMENT_RESET(&pElement->Data);
+ return true;
+}
+
+static DECLCALLBACK(bool) vboxWineProfileElementDumpCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
+{
+ PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pValue);
+ char *pName = (char*)pvVisitor;
+ PRLOG(("%s[%d]:", pName, (uint32_t)pvKey));
+ VBOXWINEPROFILE_ELEMENT_DUMP(&pElement->Data, "");
+ return true;
+}
+
+#define VBOXWINEPROFILE_HASHMAP_RESET(_pm) do { \
+ VBoxExtHashVisit((_pm), vboxWineProfileElementResetCb, NULL); \
+ } while (0)
+
+#define VBOXWINEPROFILE_HASHMAP_DUMP(_pm, _pn) do { \
+ VBoxExtHashVisit((_pm), vboxWineProfileElementDumpCb, (_pn)); \
+ } while (0)
+
+static DECLCALLBACK(bool) vboxWineProfileElementCleanupCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
+{
+ PVBOXWINEPROFILE_HASHMAP_ELEMENT pElement = VBOXWINEPROFILE_HASHMAP_ELEMENT_FROMENTRY(pValue);
+ VBOXWINEPROFILE_HASHMAP_ELEMENT_TERM(pElement);
+ return true;
+}
+
+#define VBOXWINEPROFILE_HASHMAP_TERM(_pm) do { \
+ VBoxExtHashCleanup((_pm), vboxWineProfileElementCleanupCb, NULL); \
+ VBoxExtHashVisit((_pm), vboxWineProfileElementResetCb, NULL); \
+ } while (0)
+
+typedef struct VBOXWINEPROFILE_DRAWPRIM
+{
+ uint64_t u64LoadLocationTime;
+ uint64_t u64CtxAcquireTime;
+ uint64_t u64PostProcess;
+ VBOXEXT_HASHMAP MapDrawPrimSlowVs;
+ VBOXEXT_HASHMAP MapDrawPrimSlow;
+ VBOXEXT_HASHMAP MapDrawPrimStrided;
+ VBOXEXT_HASHMAP MapDrawPrimFast;
+ uint32_t cu32Calls;
+} VBOXWINEPROFILE_DRAWPRIM, *PVBOXWINEPROFILE_DRAWPRIM;
+
+#define VBOXWINEPROFILE_DRAWPRIM_RESET_NEXT(_p) do { \
+ (_p)->u64LoadLocationTime = 0; \
+ (_p)->u64CtxAcquireTime = 0; \
+ (_p)->u64PostProcess = 0; \
+ VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimSlowVs); \
+ VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimSlow); \
+ VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimStrided); \
+ VBOXWINEPROFILE_HASHMAP_RESET(&(_p)->MapDrawPrimFast); \
+ } while (0)
+
+static DECLCALLBACK(uint32_t) vboxWineProfileDrawPrimHashMapHash(void *pvKey)
+{
+ return (uint32_t)pvKey;
+}
+
+static DECLCALLBACK(bool) vboxWineProfileDrawPrimHashMapEqual(void *pvKey1, void *pvKey2)
+{
+ return ((uint32_t)pvKey1) == ((uint32_t)pvKey2);
+}
+
+#define VBOXWINEPROFILE_DRAWPRIM_INIT(_p) do { \
+ memset((_p), 0, sizeof (*(_p))); \
+ VBoxExtHashInit(&(_p)->MapDrawPrimSlowVs, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+ VBoxExtHashInit(&(_p)->MapDrawPrimSlow, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+ VBoxExtHashInit(&(_p)->MapDrawPrimStrided, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+ VBoxExtHashInit(&(_p)->MapDrawPrimFast, vboxWineProfileDrawPrimHashMapHash, vboxWineProfileDrawPrimHashMapEqual); \
+ } while (0)
+
+#define VBOXWINEPROFILE_DRAWPRIM_TERM(_p) do { \
+ memset((_p), 0, sizeof (*(_p))); \
+ VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimSlowVs); \
+ VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimSlow); \
+ VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimStrided); \
+ VBOXWINEPROFILE_HASHMAP_TERM(&(_p)->MapDrawPrimFast); \
+ } while (0)
+#else
+# define PRLOG(_m) do {} while (0)
+#endif
+struct IWineD3DDeviceImpl
+{
+ /* IUnknown fields */
+ const IWineD3DDeviceVtbl *lpVtbl;
+ LONG ref; /* Note: Ref counting not required */
+
+ /* WineD3D Information */
+ IUnknown *parent;
+ IWineD3DDeviceParent *device_parent;
+ IWineD3D *wined3d;
+ struct wined3d_adapter *adapter;
+
+ /* Window styles to restore when switching fullscreen mode */
+ LONG style;
+ LONG exStyle;
+
+ /* X and GL Information */
+ GLint maxConcurrentLights;
+ GLenum offscreenBuffer;
+
+ /* Selected capabilities */
+ int vs_selected_mode;
+ int ps_selected_mode;
+ const shader_backend_t *shader_backend;
+ void *shader_priv;
+ void *fragment_priv;
+ void *blit_priv;
+ struct StateEntry StateTable[STATE_HIGHEST + 1];
+ /* Array of functions for states which are handled by more than one pipeline part */
+ APPLYSTATEFUNC *multistate_funcs[STATE_HIGHEST + 1];
+ const struct fragment_pipeline *frag_pipe;
+ const struct blit_shader *blitter;
+
+ unsigned int max_ffp_textures;
+ DWORD d3d_vshader_constantF, d3d_pshader_constantF; /* Advertised d3d caps, not GL ones */
+ DWORD vs_clipping;
+
+ WORD view_ident : 1; /* true iff view matrix is identity */
+ WORD untransformed : 1;
+ WORD vertexBlendUsed : 1; /* To avoid needless setting of the blend matrices */
+ WORD isRecordingState : 1;
+ WORD isInDraw : 1;
+ WORD bCursorVisible : 1;
+ WORD haveHardwareCursor : 1;
+ WORD d3d_initialized : 1;
+ WORD inScene : 1; /* A flag to check for proper BeginScene / EndScene call pairs */
+ WORD softwareVertexProcessing : 1; /* process vertex shaders using software or hardware */
+ WORD useDrawStridedSlow : 1;
+ WORD instancedDraw : 1;
+ WORD filter_messages : 1;
+ WORD padding : 3;
+
+ BYTE fixed_function_usage_map; /* MAX_TEXTURES, 8 */
+
+#define DDRAW_PITCH_ALIGNMENT 8
+#define D3D8_PITCH_ALIGNMENT 4
+ unsigned char surface_alignment; /* Line Alignment of surfaces */
+
+ /* State block related */
+ IWineD3DStateBlockImpl *stateBlock;
+ IWineD3DStateBlockImpl *updateStateBlock;
+
+ /* Internal use fields */
+ WINED3DDEVICE_CREATION_PARAMETERS createParms;
+ WINED3DDEVTYPE devType;
+#ifndef VBOX_WITH_WDDM
+ HWND focus_window;
+#endif
+
+ IWineD3DSwapChain **swapchains;
+ UINT NumberOfSwapChains;
+
+ struct list resources; /* a linked list to track resources created by the device */
+ struct list shaders; /* a linked list to track shaders (pixel and vertex) */
+ unsigned int highest_dirty_ps_const, highest_dirty_vs_const;
+
+ /* Render Target Support */
+ IWineD3DSurface **render_targets;
+ IWineD3DSurface *auto_depth_stencil_buffer;
+ IWineD3DSurface *stencilBufferTarget;
+
+ /* palettes texture management */
+ UINT NumberOfPalettes;
+ PALETTEENTRY **palettes;
+ UINT currentPalette;
+
+ /* For rendering to a texture using glCopyTexImage */
+ GLenum *draw_buffers;
+ GLuint depth_blt_texture;
+ GLuint depth_blt_rb;
+ UINT depth_blt_rb_w;
+ UINT depth_blt_rb_h;
+
+ /* Cursor management */
+ UINT xHotSpot;
+ UINT yHotSpot;
+ UINT xScreenSpace;
+ UINT yScreenSpace;
+ UINT cursorWidth, cursorHeight;
+ GLuint cursorTexture;
+ HCURSOR hardwareCursor;
+
+ /* The Wine logo surface */
+ IWineD3DSurface *logo_surface;
+
+ /* Textures for when no other textures are mapped */
+ UINT dummyTextureName[MAX_TEXTURES];
+
+ /* DirectDraw stuff */
+ DWORD ddraw_width, ddraw_height;
+ WINED3DFORMAT ddraw_format;
+
+ /* Final position fixup constant */
+ float posFixup[4];
+#ifdef VBOX_WITH_VMSVGA
+ UINT rtHeight;
+#endif
+
+ /* With register combiners we can skip junk texture stages */
+ DWORD texUnitMap[MAX_COMBINED_SAMPLERS];
+ DWORD rev_tex_unit_map[MAX_COMBINED_SAMPLERS];
+
+ /* Stream source management */
+ struct wined3d_stream_info strided_streams;
+ const WineDirect3DVertexStridedData *up_strided;
+ struct wined3d_event_query *buffer_queries[MAX_ATTRIBS];
+ unsigned int num_buffer_queries;
+
+ /* Context management */
+ struct wined3d_context **contexts;
+ UINT numContexts;
+
+#ifdef VBOX_WITH_WDDM
+ struct VBOXUHGSMI *pHgsmi;
+#endif
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+ VBOXEXT_HASHCACHE vshaderCache;
+ VBOXEXT_HASHCACHE pshaderCache;
+#endif
+
+#ifdef VBOX_WINE_WITH_PROFILE
+ VBOXWINEPROFILE_DRAWPRIM DrawPrimProfile;
+#endif
+
+ /* High level patch management */
+#define PATCHMAP_SIZE 43
+#define PATCHMAP_HASHFUNC(x) ((x) % PATCHMAP_SIZE) /* Primitive and simple function */
+ struct list patches[PATCHMAP_SIZE];
+ struct WineD3DRectPatch *currentPatch;
+};
+
+BOOL device_context_add(IWineD3DDeviceImpl *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
+void device_context_remove(IWineD3DDeviceImpl *device, struct wined3d_context *context) DECLSPEC_HIDDEN;
+HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
+ UINT adapter_idx, WINED3DDEVTYPE device_type, HWND focus_window, DWORD flags,
+ IUnknown *parent, IWineD3DDeviceParent *device_parent) DECLSPEC_HIDDEN;
+void device_preload_textures(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+#ifndef VBOX_WITH_WDDM
+LRESULT device_process_message(IWineD3DDeviceImpl *device, HWND window,
+ UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN;
+#else
+void device_cleanup_durtify_texture_target(IWineD3DDeviceImpl *This, GLuint texture_target);
+#endif
+void device_resource_add(IWineD3DDeviceImpl *This, IWineD3DResource *resource) DECLSPEC_HIDDEN;
+void device_resource_released(IWineD3DDeviceImpl *This, IWineD3DResource *resource) DECLSPEC_HIDDEN;
+void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
+ BOOL use_vshader, struct wined3d_stream_info *stream_info, BOOL *fixup) DECLSPEC_HIDDEN;
+void device_update_stream_info(IWineD3DDeviceImpl *device, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *target, DWORD Count,
+ const WINED3DRECT *pRects, DWORD Flags, WINED3DCOLOR Color, float Z, DWORD Stencil) DECLSPEC_HIDDEN;
+void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) DECLSPEC_HIDDEN;
+void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state) DECLSPEC_HIDDEN;
+
+static inline BOOL isStateDirty(struct wined3d_context *context, DWORD state)
+{
+ DWORD idx = state / (sizeof(*context->isStateDirty) * CHAR_BIT);
+ BYTE shift = state & ((sizeof(*context->isStateDirty) * CHAR_BIT) - 1);
+ return context->isStateDirty[idx] & (1 << shift);
+}
+
+/* Support for IWineD3DResource ::Set/Get/FreePrivateData. */
+typedef struct PrivateData
+{
+ struct list entry;
+
+ GUID tag;
+ DWORD flags; /* DDSPD_* */
+
+ union
+ {
+ LPVOID data;
+ LPUNKNOWN object;
+ } ptr;
+
+ DWORD size;
+} PrivateData;
+
+/*****************************************************************************
+ * IWineD3DResource implementation structure
+ */
+typedef struct IWineD3DResourceClass
+{
+ /* IUnknown fields */
+ LONG ref; /* Note: Ref counting not required */
+
+ /* WineD3DResource Information */
+ IUnknown *parent;
+ WINED3DRESOURCETYPE resourceType;
+ IWineD3DDeviceImpl *device;
+ WINED3DPOOL pool;
+ UINT size;
+ DWORD usage;
+ const struct wined3d_format_desc *format_desc;
+ DWORD priority;
+ BYTE *allocatedMemory; /* Pointer to the real data location */
+ BYTE *heapMemory; /* Pointer to the HeapAlloced block of memory */
+#ifdef VBOX_WITH_WDDM
+ DWORD sharerc_flags; /* shared resource flags */
+ DWORD sharerc_handle; /* shared resource handle */
+ DWORD sharerc_locks; /* lock count */
+#endif
+ struct list privateData;
+ struct list resource_list_entry;
+ const struct wined3d_parent_ops *parent_ops;
+} IWineD3DResourceClass;
+
+typedef struct IWineD3DResourceImpl
+{
+ /* IUnknown & WineD3DResource Information */
+ const IWineD3DResourceVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+} IWineD3DResourceImpl;
+
+void resource_cleanup(IWineD3DResource *iface) DECLSPEC_HIDDEN;
+HRESULT resource_free_private_data(IWineD3DResource *iface, REFGUID guid) DECLSPEC_HIDDEN;
+HRESULT resource_get_parent(IWineD3DResource *iface, IUnknown **parent) DECLSPEC_HIDDEN;
+DWORD resource_get_priority(IWineD3DResource *iface) DECLSPEC_HIDDEN;
+HRESULT resource_get_private_data(IWineD3DResource *iface, REFGUID guid,
+ void *data, DWORD *data_size) DECLSPEC_HIDDEN;
+HRESULT resource_init(IWineD3DResource *iface, WINED3DRESOURCETYPE resource_type,
+ IWineD3DDeviceImpl *device, UINT size, DWORD usage, const struct wined3d_format_desc *format_desc,
+ WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+WINED3DRESOURCETYPE resource_get_type(IWineD3DResource *iface) DECLSPEC_HIDDEN;
+DWORD resource_set_priority(IWineD3DResource *iface, DWORD new_priority) DECLSPEC_HIDDEN;
+HRESULT resource_set_private_data(IWineD3DResource *iface, REFGUID guid,
+ const void *data, DWORD data_size, DWORD flags) DECLSPEC_HIDDEN;
+
+#ifdef VBOX_WITH_WDDM
+HRESULT WINAPI IWineD3DResourceImpl_SetShRcState(IWineD3DResource *iface, VBOXWINEEX_SHRC_STATE enmState);
+#endif
+
+/* Tests show that the start address of resources is 32 byte aligned */
+#define RESOURCE_ALIGNMENT 16
+
+/*****************************************************************************
+ * IWineD3DBaseTexture D3D- > openGL state map lookups
+ */
+
+typedef enum winetexturestates {
+ WINED3DTEXSTA_ADDRESSU = 0,
+ WINED3DTEXSTA_ADDRESSV = 1,
+ WINED3DTEXSTA_ADDRESSW = 2,
+ WINED3DTEXSTA_BORDERCOLOR = 3,
+ WINED3DTEXSTA_MAGFILTER = 4,
+ WINED3DTEXSTA_MINFILTER = 5,
+ WINED3DTEXSTA_MIPFILTER = 6,
+ WINED3DTEXSTA_MAXMIPLEVEL = 7,
+ WINED3DTEXSTA_MAXANISOTROPY = 8,
+ WINED3DTEXSTA_SRGBTEXTURE = 9,
+ WINED3DTEXSTA_ELEMENTINDEX = 10,
+ WINED3DTEXSTA_DMAPOFFSET = 11,
+ WINED3DTEXSTA_TSSADDRESSW = 12,
+ MAX_WINETEXTURESTATES = 13,
+} winetexturestates;
+
+enum WINED3DSRGB
+{
+ SRGB_ANY = 0, /* Uses the cached value(e.g. external calls) */
+ SRGB_RGB = 1, /* Loads the rgb texture */
+ SRGB_SRGB = 2, /* Loads the srgb texture */
+ SRGB_BOTH = 3, /* Loads both textures */
+};
+
+struct gl_texture
+{
+ DWORD states[MAX_WINETEXTURESTATES];
+ BOOL dirty;
+ GLuint name;
+};
+
+/*****************************************************************************
+ * IWineD3DBaseTexture implementation structure (extends IWineD3DResourceImpl)
+ */
+typedef struct IWineD3DBaseTextureClass
+{
+ struct gl_texture texture_rgb, texture_srgb;
+ UINT levels;
+ float pow2Matrix[16];
+ UINT LOD;
+ WINED3DTEXTUREFILTERTYPE filterType;
+ LONG bindCount;
+ DWORD sampler;
+ BOOL is_srgb;
+ BOOL pow2Matrix_identity;
+ BOOL t_mirror;
+ const struct min_lookup *minMipLookup;
+ const GLenum *magLookup;
+ void (*internal_preload)(IWineD3DBaseTexture *iface, enum WINED3DSRGB srgb);
+} IWineD3DBaseTextureClass;
+
+void surface_internal_preload(IWineD3DSurface *iface, enum WINED3DSRGB srgb) DECLSPEC_HIDDEN;
+BOOL surface_init_sysmem(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+BOOL surface_is_offscreen(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+void surface_prepare_texture(IWineD3DSurfaceImpl *surface,
+ const struct wined3d_gl_info *gl_info, BOOL srgb) DECLSPEC_HIDDEN;
+#ifdef VBOX_WITH_WDDM
+void surface_setup_location_onopen(IWineD3DSurfaceImpl *This) DECLSPEC_HIDDEN;
+#endif
+
+typedef struct IWineD3DBaseTextureImpl
+{
+ /* IUnknown & WineD3DResource Information */
+ const IWineD3DBaseTextureVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+ IWineD3DBaseTextureClass baseTexture;
+
+} IWineD3DBaseTextureImpl;
+
+void basetexture_apply_state_changes(IWineD3DBaseTexture *iface,
+ const DWORD textureStates[WINED3D_HIGHEST_TEXTURE_STATE + 1],
+ const DWORD samplerStates[WINED3D_HIGHEST_SAMPLER_STATE + 1],
+ const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+void basetexture_state_init(IWineD3DBaseTexture *iface, struct gl_texture *gl_tex);
+HRESULT basetexture_bind(IWineD3DBaseTexture *iface, BOOL srgb, BOOL *set_surface_desc) DECLSPEC_HIDDEN;
+void basetexture_cleanup(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+void basetexture_generate_mipmaps(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+WINED3DTEXTUREFILTERTYPE basetexture_get_autogen_filter_type(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+BOOL basetexture_get_dirty(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+DWORD basetexture_get_level_count(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+DWORD basetexture_get_lod(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT levels, WINED3DRESOURCETYPE resource_type,
+ IWineD3DDeviceImpl *device, UINT size, DWORD usage, const struct wined3d_format_desc *format_desc,
+ WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+HRESULT basetexture_set_autogen_filter_type(IWineD3DBaseTexture *iface,
+ WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;
+BOOL basetexture_set_dirty(IWineD3DBaseTexture *iface, BOOL dirty) DECLSPEC_HIDDEN;
+DWORD basetexture_set_lod(IWineD3DBaseTexture *iface, DWORD new_lod) DECLSPEC_HIDDEN;
+void basetexture_unload(IWineD3DBaseTexture *iface) DECLSPEC_HIDDEN;
+
+#ifdef VBOX_WITH_WDDM
+#define texture_gl_delete(_o, _t) do { \
+ if (VBOXSHRC_IS_SHARED(_o)) GL_EXTCALL(glChromiumParameteriCR(GL_RCUSAGE_TEXTURE_CLEAR_CR, _t)); \
+ else glDeleteTextures(1, &_t); \
+ } while (0)
+#else
+#define texture_gl_delete(_o, _t) do { \
+ glDeleteTextures(1, &_t); \
+ } while (0)
+
+#endif
+/*****************************************************************************
+ * IWineD3DTexture implementation structure (extends IWineD3DBaseTextureImpl)
+ */
+typedef struct IWineD3DTextureImpl
+{
+ /* IUnknown & WineD3DResource/WineD3DBaseTexture Information */
+ const IWineD3DTextureVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+ IWineD3DBaseTextureClass baseTexture;
+
+ /* IWineD3DTexture */
+ IWineD3DSurface *surfaces[MAX_MIP_LEVELS];
+ UINT target;
+ BOOL cond_np2;
+
+} IWineD3DTextureImpl;
+
+void texture_state_init(IWineD3DTexture *iface, struct gl_texture *gl_tex);
+HRESULT texture_init(IWineD3DTextureImpl *texture, UINT width, UINT height, UINT levels,
+ IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DCubeTexture implementation structure (extends IWineD3DBaseTextureImpl)
+ */
+typedef struct IWineD3DCubeTextureImpl
+{
+ /* IUnknown & WineD3DResource/WineD3DBaseTexture Information */
+ const IWineD3DCubeTextureVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+ IWineD3DBaseTextureClass baseTexture;
+
+ /* IWineD3DCubeTexture */
+ IWineD3DSurface *surfaces[6][MAX_MIP_LEVELS];
+} IWineD3DCubeTextureImpl;
+
+HRESULT cubetexture_init(IWineD3DCubeTextureImpl *texture, UINT edge_length, UINT levels,
+ IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+
+typedef struct _WINED3DVOLUMET_DESC
+{
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+} WINED3DVOLUMET_DESC;
+
+/*****************************************************************************
+ * IWineD3DVolume implementation structure (extends IUnknown)
+ */
+typedef struct IWineD3DVolumeImpl
+{
+ /* IUnknown & WineD3DResource fields */
+ const IWineD3DVolumeVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+
+ /* WineD3DVolume Information */
+ WINED3DVOLUMET_DESC currentDesc;
+ IWineD3DBase *container;
+ BOOL lockable;
+ BOOL locked;
+ WINED3DBOX lockedBox;
+ WINED3DBOX dirtyBox;
+ BOOL dirty;
+} IWineD3DVolumeImpl;
+
+void volume_add_dirty_box(IWineD3DVolume *iface, const WINED3DBOX *dirty_box) DECLSPEC_HIDDEN;
+HRESULT volume_init(IWineD3DVolumeImpl *volume, IWineD3DDeviceImpl *device, UINT width,
+ UINT height, UINT depth, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DVolumeTexture implementation structure (extends IWineD3DBaseTextureImpl)
+ */
+typedef struct IWineD3DVolumeTextureImpl
+{
+ /* IUnknown & WineD3DResource/WineD3DBaseTexture Information */
+ const IWineD3DVolumeTextureVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+ IWineD3DBaseTextureClass baseTexture;
+
+ /* IWineD3DVolumeTexture */
+ IWineD3DVolume *volumes[MAX_MIP_LEVELS];
+} IWineD3DVolumeTextureImpl;
+
+HRESULT volumetexture_init(IWineD3DVolumeTextureImpl *texture, UINT width, UINT height,
+ UINT depth, UINT levels, IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format,
+ WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void **pavClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+
+typedef struct _WINED3DSURFACET_DESC
+{
+ WINED3DMULTISAMPLE_TYPE MultiSampleType;
+ DWORD MultiSampleQuality;
+ UINT Width;
+ UINT Height;
+} WINED3DSURFACET_DESC;
+
+/*****************************************************************************
+ * Structure for DIB Surfaces (GetDC and GDI surfaces)
+ */
+typedef struct wineD3DSurface_DIB {
+ HBITMAP DIBsection;
+ void* bitmap_data;
+ UINT bitmap_size;
+ HGDIOBJ holdbitmap;
+ BOOL client_memory;
+} wineD3DSurface_DIB;
+
+typedef struct {
+ struct list entry;
+ GLuint id;
+ UINT width;
+ UINT height;
+} renderbuffer_entry_t;
+
+struct fbo_entry
+{
+ struct list entry;
+ IWineD3DSurfaceImpl **render_targets;
+ IWineD3DSurfaceImpl *depth_stencil;
+ BOOL attached;
+ GLuint id;
+};
+
+/*****************************************************************************
+ * IWineD3DClipp implementation structure
+ */
+typedef struct IWineD3DClipperImpl
+{
+ const IWineD3DClipperVtbl *lpVtbl;
+ LONG ref;
+
+ IUnknown *Parent;
+ HWND hWnd;
+} IWineD3DClipperImpl;
+
+
+/*****************************************************************************
+ * IWineD3DSurface implementation structure
+ */
+struct IWineD3DSurfaceImpl
+{
+ /* IUnknown & IWineD3DResource Information */
+ const IWineD3DSurfaceVtbl *lpVtbl;
+ IWineD3DResourceClass resource;
+
+ /* IWineD3DSurface fields */
+ IWineD3DBase *container;
+ WINED3DSURFACET_DESC currentDesc;
+ IWineD3DPaletteImpl *palette; /* D3D7 style palette handling */
+ PALETTEENTRY *palette9; /* D3D8/9 style palette handling */
+
+ /* TODO: move this off into a management class(maybe!) */
+ DWORD Flags;
+
+ UINT pow2Width;
+ UINT pow2Height;
+
+ /* A method to retrieve the drawable size. Not in the Vtable to make it changeable */
+ void (*get_drawable_size)(struct wined3d_context *context, UINT *width, UINT *height);
+
+ /* PBO */
+ GLuint pbo;
+ GLuint texture_name;
+ GLuint texture_name_srgb;
+ GLint texture_level;
+ GLenum texture_target;
+
+ RECT lockedRect;
+ RECT dirtyRect;
+ int lockCount;
+#define MAXLOCKCOUNT 50 /* After this amount of locks do not free the sysmem copy */
+
+ /* For GetDC */
+ wineD3DSurface_DIB dib;
+ HDC hDC;
+
+ /* Color keys for DDraw */
+ WINEDDCOLORKEY DestBltCKey;
+ WINEDDCOLORKEY DestOverlayCKey;
+ WINEDDCOLORKEY SrcOverlayCKey;
+ WINEDDCOLORKEY SrcBltCKey;
+ DWORD CKeyFlags;
+
+ WINEDDCOLORKEY glCKey;
+
+ struct list renderbuffers;
+ renderbuffer_entry_t *current_renderbuffer;
+
+ /* DirectDraw clippers */
+ IWineD3DClipper *clipper;
+
+ /* DirectDraw Overlay handling */
+ RECT overlay_srcrect;
+ RECT overlay_destrect;
+ IWineD3DSurfaceImpl *overlay_dest;
+ struct list overlays;
+ struct list overlay_entry;
+
+#ifdef VBOX_WITH_WDDM
+ struct IWineD3DSwapChain *presentSwapchain;
+#endif
+};
+
+extern const IWineD3DSurfaceVtbl IWineD3DSurface_Vtbl DECLSPEC_HIDDEN;
+extern const IWineD3DSurfaceVtbl IWineGDISurface_Vtbl DECLSPEC_HIDDEN;
+
+UINT surface_calculate_size(const struct wined3d_format_desc *format_desc,
+ UINT alignment, UINT width, UINT height) DECLSPEC_HIDDEN;
+void surface_gdi_cleanup(IWineD3DSurfaceImpl *This) DECLSPEC_HIDDEN;
+HRESULT surface_init(IWineD3DSurfaceImpl *surface, WINED3DSURFTYPE surface_type, UINT alignment,
+ UINT width, UINT height, UINT level, BOOL lockable, BOOL discard, WINED3DMULTISAMPLE_TYPE multisample_type,
+ UINT multisample_quality, IWineD3DDeviceImpl *device, DWORD usage, WINED3DFORMAT format,
+ WINED3DPOOL pool, IUnknown *parent, const struct wined3d_parent_ops *parent_ops
+#ifdef VBOX_WITH_WDDM
+ , HANDLE *shared_handle
+ , void *pvClientMem
+#endif
+ ) DECLSPEC_HIDDEN;
+
+/* Predeclare the shared Surface functions */
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_QueryInterface(IWineD3DSurface *iface,
+ REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN;
+ULONG WINAPI IWineD3DBaseSurfaceImpl_AddRef(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetParent(IWineD3DSurface *iface, IUnknown **pParent) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetPrivateData(IWineD3DSurface *iface,
+ REFGUID refguid, const void *pData, DWORD SizeOfData, DWORD Flags) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetPrivateData(IWineD3DSurface *iface,
+ REFGUID refguid, void *pData, DWORD *pSizeOfData) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_FreePrivateData(IWineD3DSurface *iface, REFGUID refguid) DECLSPEC_HIDDEN;
+DWORD WINAPI IWineD3DBaseSurfaceImpl_SetPriority(IWineD3DSurface *iface, DWORD PriorityNew) DECLSPEC_HIDDEN;
+DWORD WINAPI IWineD3DBaseSurfaceImpl_GetPriority(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+WINED3DRESOURCETYPE WINAPI IWineD3DBaseSurfaceImpl_GetType(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetContainer(IWineD3DSurface* iface,
+ REFIID riid, void **ppContainer) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetDesc(IWineD3DSurface *iface, WINED3DSURFACE_DESC *pDesc) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetBltStatus(IWineD3DSurface *iface, DWORD Flags) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetFlipStatus(IWineD3DSurface *iface, DWORD Flags) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_IsLost(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_Restore(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetPalette(IWineD3DSurface *iface, IWineD3DPalette **Pal) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetPalette(IWineD3DSurface *iface, IWineD3DPalette *Pal) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetColorKey(IWineD3DSurface *iface,
+ DWORD Flags, const WINEDDCOLORKEY *CKey) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetContainer(IWineD3DSurface *iface, IWineD3DBase *container) DECLSPEC_HIDDEN;
+DWORD WINAPI IWineD3DBaseSurfaceImpl_GetPitch(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_RealizePalette(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetOverlayPosition(IWineD3DSurface *iface, LONG X, LONG Y) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetOverlayPosition(IWineD3DSurface *iface, LONG *X, LONG *Y) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_UpdateOverlayZOrder(IWineD3DSurface *iface,
+ DWORD Flags, IWineD3DSurface *Ref) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_UpdateOverlay(IWineD3DSurface *iface, const RECT *SrcRect,
+ IWineD3DSurface *DstSurface, const RECT *DstRect, DWORD Flags, const WINEDDOVERLAYFX *FX) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetClipper(IWineD3DSurface *iface, IWineD3DClipper *clipper) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetClipper(IWineD3DSurface *iface, IWineD3DClipper **clipper) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_SetFormat(IWineD3DSurface *iface, WINED3DFORMAT format) DECLSPEC_HIDDEN;
+HRESULT IWineD3DBaseSurfaceImpl_CreateDIBSection(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_Blt(IWineD3DSurface *iface, const RECT *DestRect, IWineD3DSurface *SrcSurface,
+ const RECT *SrcRect, DWORD Flags, const WINEDDBLTFX *DDBltFx, WINED3DTEXTUREFILTERTYPE Filter) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_BltFast(IWineD3DSurface *iface, DWORD dstx, DWORD dsty,
+ IWineD3DSurface *Source, const RECT *rsrc, DWORD trans) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSurfaceImpl_LockRect(IWineD3DSurface *iface, WINED3DLOCKED_RECT *pLockedRect,
+ const RECT *pRect, DWORD Flags) DECLSPEC_HIDDEN;
+void WINAPI IWineD3DBaseSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL srgb) DECLSPEC_HIDDEN;
+const void *WINAPI IWineD3DBaseSurfaceImpl_GetData(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+
+void get_drawable_size_swapchain(struct wined3d_context *context, UINT *width, UINT *height) DECLSPEC_HIDDEN;
+void get_drawable_size_backbuffer(struct wined3d_context *context, UINT *width, UINT *height) DECLSPEC_HIDDEN;
+void get_drawable_size_fbo(struct wined3d_context *context, UINT *width, UINT *height) DECLSPEC_HIDDEN;
+
+void draw_textured_quad(IWineD3DSurfaceImpl *src_surface, const RECT *src_rect,
+ const RECT *dst_rect, WINED3DTEXTUREFILTERTYPE Filter) DECLSPEC_HIDDEN;
+void flip_surface(IWineD3DSurfaceImpl *front, IWineD3DSurfaceImpl *back) DECLSPEC_HIDDEN;
+
+/* Surface flags: */
+#define SFLAG_CONVERTED 0x00000002 /* Converted for color keying or Palettized */
+#define SFLAG_DIBSECTION 0x00000004 /* Has a DIB section attached for GetDC */
+#define SFLAG_LOCKABLE 0x00000008 /* Surface can be locked */
+#define SFLAG_DISCARD 0x00000010 /* ??? */
+#define SFLAG_LOCKED 0x00000020 /* Surface is locked atm */
+#define SFLAG_INTEXTURE 0x00000040 /* The GL texture contains the newest surface content */
+#define SFLAG_INSRGBTEX 0x00000080 /* The GL srgb texture contains the newest surface content */
+#define SFLAG_INDRAWABLE 0x00000100 /* The gl drawable contains the most up to date data */
+#define SFLAG_INSYSMEM 0x00000200 /* The system memory copy is most up to date */
+#define SFLAG_NONPOW2 0x00000400 /* Surface sizes are not a power of 2 */
+#define SFLAG_DYNLOCK 0x00000800 /* Surface is often locked by the app */
+#define SFLAG_DCINUSE 0x00001000 /* Set between GetDC and ReleaseDC calls */
+#define SFLAG_LOST 0x00002000 /* Surface lost flag for DDraw */
+#define SFLAG_USERPTR 0x00004000 /* The application allocated the memory for this surface */
+#define SFLAG_GLCKEY 0x00008000 /* The gl texture was created with a color key */
+#define SFLAG_CLIENT 0x00010000 /* GL_APPLE_client_storage is used on that texture */
+#define SFLAG_ALLOCATED 0x00020000 /* A gl texture is allocated for this surface */
+#define SFLAG_SRGBALLOCATED 0x00040000 /* A srgb gl texture is allocated for this surface */
+#define SFLAG_PBO 0x00080000 /* Has a PBO attached for speeding up data transfers for dynamically locked surfaces */
+#define SFLAG_NORMCOORD 0x00100000 /* Set if the GL texture coords are normalized(non-texture rectangle) */
+#define SFLAG_DS_ONSCREEN 0x00200000 /* Is a depth stencil, last modified onscreen */
+#define SFLAG_DS_OFFSCREEN 0x00400000 /* Is a depth stencil, last modified offscreen */
+#define SFLAG_INOVERLAYDRAW 0x00800000 /* Overlay drawing is in progress. Recursion prevention */
+#define SFLAG_SWAPCHAIN 0x01000000 /* The surface is part of a swapchain */
+
+#ifdef VBOX_WITH_WDDM
+# define SFLAG_CLIENTMEM 0x10000000 /* SYSMEM surface using client-supplied memory buffer */
+# define SFLAG_DONOTFREE_VBOXWDDM SFLAG_CLIENTMEM
+#else
+# define SFLAG_DONOTFREE_VBOXWDDM 0
+#endif
+
+/* In some conditions the surface memory must not be freed:
+ * SFLAG_CONVERTED: Converting the data back would take too long
+ * SFLAG_DIBSECTION: The dib code manages the memory
+ * SFLAG_LOCKED: The app requires access to the surface data
+ * SFLAG_DYNLOCK: Avoid freeing the data for performance
+ * SFLAG_PBO: PBOs don't use 'normal' memory. It is either allocated by the driver or must be NULL.
+ * SFLAG_CLIENT: OpenGL uses our memory as backup
+ */
+#define SFLAG_DONOTFREE (SFLAG_CONVERTED | \
+ SFLAG_DIBSECTION | \
+ SFLAG_LOCKED | \
+ SFLAG_DYNLOCK | \
+ SFLAG_USERPTR | \
+ SFLAG_PBO | \
+ SFLAG_CLIENT | \
+ SFLAG_DONOTFREE_VBOXWDDM \
+ )
+
+#define SFLAG_LOCATIONS (SFLAG_INSYSMEM | \
+ SFLAG_INTEXTURE | \
+ SFLAG_INDRAWABLE | \
+ SFLAG_INSRGBTEX)
+
+#define SFLAG_DS_LOCATIONS (SFLAG_DS_ONSCREEN | \
+ SFLAG_DS_OFFSCREEN)
+#define SFLAG_DS_DISCARDED SFLAG_DS_LOCATIONS
+
+typedef enum {
+ NO_CONVERSION,
+ CONVERT_PALETTED,
+ CONVERT_PALETTED_CK,
+ CONVERT_CK_565,
+ CONVERT_CK_5551,
+ CONVERT_CK_4444,
+ CONVERT_CK_4444_ARGB,
+ CONVERT_CK_1555,
+ CONVERT_555,
+ CONVERT_CK_RGB24,
+ CONVERT_CK_8888,
+ CONVERT_CK_8888_ARGB,
+ CONVERT_RGB32_888,
+ CONVERT_V8U8,
+ CONVERT_L6V5U5,
+ CONVERT_X8L8V8U8,
+ CONVERT_Q8W8V8U8,
+ CONVERT_V16U16,
+ CONVERT_A4L4,
+ CONVERT_G16R16,
+ CONVERT_R16G16F,
+ CONVERT_R32G32F,
+ CONVERT_D15S1,
+ CONVERT_D24X4S4,
+ CONVERT_D24FS8,
+} CONVERT_TYPES;
+
+HRESULT d3dfmt_get_conv(IWineD3DSurfaceImpl *This, BOOL need_alpha_ck, BOOL use_texturing,
+ struct wined3d_format_desc *desc, CONVERT_TYPES *convert) DECLSPEC_HIDDEN;
+void d3dfmt_p8_init_palette(IWineD3DSurfaceImpl *This, BYTE table[256][4], BOOL colorkey) DECLSPEC_HIDDEN;
+
+BOOL palette9_changed(IWineD3DSurfaceImpl *This) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DVertexDeclaration implementation structure
+ */
+
+struct wined3d_vertex_declaration_element
+{
+ const struct wined3d_format_desc *format_desc;
+ BOOL ffp_valid;
+ WORD input_slot;
+ WORD offset;
+ UINT output_slot;
+ BYTE method;
+ BYTE usage;
+ BYTE usage_idx;
+};
+
+typedef struct IWineD3DVertexDeclarationImpl {
+ /* IUnknown Information */
+ const IWineD3DVertexDeclarationVtbl *lpVtbl;
+ LONG ref;
+
+ IUnknown *parent;
+ const struct wined3d_parent_ops *parent_ops;
+ IWineD3DDeviceImpl *device;
+
+ struct wined3d_vertex_declaration_element *elements;
+ UINT element_count;
+
+ DWORD streams[MAX_STREAMS];
+ UINT num_streams;
+ BOOL position_transformed;
+ BOOL half_float_conv_needed;
+} IWineD3DVertexDeclarationImpl;
+
+HRESULT vertexdeclaration_init(IWineD3DVertexDeclarationImpl *declaration, IWineD3DDeviceImpl *device,
+ const WINED3DVERTEXELEMENT *elements, UINT element_count,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DStateBlock implementation structure
+ */
+
+/* Internal state Block for Begin/End/Capture/Create/Apply info */
+/* Note: Very long winded but gl Lists are not flexible enough */
+/* to resolve everything we need, so doing it manually for now */
+typedef struct SAVEDSTATES {
+ DWORD transform[(HIGHEST_TRANSFORMSTATE >> 5) + 1];
+ WORD streamSource; /* MAX_STREAMS, 16 */
+ WORD streamFreq; /* MAX_STREAMS, 16 */
+ DWORD renderState[(WINEHIGHEST_RENDER_STATE >> 5) + 1];
+ DWORD textureState[MAX_TEXTURES]; /* WINED3D_HIGHEST_TEXTURE_STATE + 1, 18 */
+ WORD samplerState[MAX_COMBINED_SAMPLERS]; /* WINED3D_HIGHEST_SAMPLER_STATE + 1, 14 */
+ DWORD clipplane; /* WINED3DMAXUSERCLIPPLANES, 32 */
+ WORD pixelShaderConstantsB; /* MAX_CONST_B, 16 */
+ WORD pixelShaderConstantsI; /* MAX_CONST_I, 16 */
+ BOOL *pixelShaderConstantsF;
+ WORD vertexShaderConstantsB; /* MAX_CONST_B, 16 */
+ WORD vertexShaderConstantsI; /* MAX_CONST_I, 16 */
+ BOOL *vertexShaderConstantsF;
+ DWORD textures : 20; /* MAX_COMBINED_SAMPLERS, 20 */
+ DWORD primitive_type : 1;
+ DWORD indices : 1;
+ DWORD material : 1;
+ DWORD viewport : 1;
+ DWORD vertexDecl : 1;
+ DWORD pixelShader : 1;
+ DWORD vertexShader : 1;
+ DWORD scissorRect : 1;
+ DWORD padding : 4;
+} SAVEDSTATES;
+
+struct StageState {
+ DWORD stage;
+ DWORD state;
+};
+
+struct IWineD3DStateBlockImpl
+{
+ /* IUnknown fields */
+ const IWineD3DStateBlockVtbl *lpVtbl;
+ LONG ref; /* Note: Ref counting not required */
+
+ /* IWineD3DStateBlock information */
+ IWineD3DDeviceImpl *device;
+ WINED3DSTATEBLOCKTYPE blockType;
+
+ /* Array indicating whether things have been set or changed */
+ SAVEDSTATES changed;
+
+ /* Vertex Shader Declaration */
+ IWineD3DVertexDeclaration *vertexDecl;
+
+ IWineD3DVertexShader *vertexShader;
+
+ /* Vertex Shader Constants */
+ BOOL vertexShaderConstantB[MAX_CONST_B];
+ INT vertexShaderConstantI[MAX_CONST_I * 4];
+ float *vertexShaderConstantF;
+
+ /* primitive type */
+ GLenum gl_primitive_type;
+
+ /* Stream Source */
+ BOOL streamIsUP;
+ UINT streamStride[MAX_STREAMS];
+ UINT streamOffset[MAX_STREAMS + 1 /* tesselated pseudo-stream */ ];
+ IWineD3DBuffer *streamSource[MAX_STREAMS];
+ UINT streamFreq[MAX_STREAMS + 1];
+ UINT streamFlags[MAX_STREAMS + 1]; /*0 | WINED3DSTREAMSOURCE_INSTANCEDATA | WINED3DSTREAMSOURCE_INDEXEDDATA */
+
+ /* Indices */
+ IWineD3DBuffer* pIndexData;
+ WINED3DFORMAT IndexFmt;
+ INT baseVertexIndex;
+ INT loadBaseVertexIndex; /* non-indexed drawing needs 0 here, indexed baseVertexIndex */
+
+ /* Transform */
+ WINED3DMATRIX transforms[HIGHEST_TRANSFORMSTATE + 1];
+
+ /* Light hashmap . Collisions are handled using standard wine double linked lists */
+#define LIGHTMAP_SIZE 43 /* Use of a prime number recommended. Set to 1 for a linked list! */
+#define LIGHTMAP_HASHFUNC(x) ((x) % LIGHTMAP_SIZE) /* Primitive and simple function */
+ struct list lightMap[LIGHTMAP_SIZE]; /* Hash map containing the lights */
+ const struct wined3d_light_info *activeLights[MAX_ACTIVE_LIGHTS]; /* Map of opengl lights to d3d lights */
+
+ /* Clipping */
+ double clipplane[MAX_CLIPPLANES][4];
+ WINED3DCLIPSTATUS clip_status;
+
+ /* ViewPort */
+ WINED3DVIEWPORT viewport;
+
+ /* Material */
+ WINED3DMATERIAL material;
+
+ /* Pixel Shader */
+ IWineD3DPixelShader *pixelShader;
+
+ /* Pixel Shader Constants */
+ BOOL pixelShaderConstantB[MAX_CONST_B];
+ INT pixelShaderConstantI[MAX_CONST_I * 4];
+ float *pixelShaderConstantF;
+
+ /* RenderState */
+ DWORD renderState[WINEHIGHEST_RENDER_STATE + 1];
+
+ /* Texture */
+ IWineD3DBaseTexture *textures[MAX_COMBINED_SAMPLERS];
+
+ /* Texture State Stage */
+ DWORD textureState[MAX_TEXTURES][WINED3D_HIGHEST_TEXTURE_STATE + 1];
+ DWORD lowest_disabled_stage;
+ /* Sampler States */
+ DWORD samplerState[MAX_COMBINED_SAMPLERS][WINED3D_HIGHEST_SAMPLER_STATE + 1];
+
+ /* Scissor test rectangle */
+ RECT scissorRect;
+
+ /* Contained state management */
+ DWORD contained_render_states[WINEHIGHEST_RENDER_STATE + 1];
+ unsigned int num_contained_render_states;
+ DWORD contained_transform_states[HIGHEST_TRANSFORMSTATE + 1];
+ unsigned int num_contained_transform_states;
+ DWORD contained_vs_consts_i[MAX_CONST_I];
+ unsigned int num_contained_vs_consts_i;
+ DWORD contained_vs_consts_b[MAX_CONST_B];
+ unsigned int num_contained_vs_consts_b;
+ DWORD *contained_vs_consts_f;
+ unsigned int num_contained_vs_consts_f;
+ DWORD contained_ps_consts_i[MAX_CONST_I];
+ unsigned int num_contained_ps_consts_i;
+ DWORD contained_ps_consts_b[MAX_CONST_B];
+ unsigned int num_contained_ps_consts_b;
+ DWORD *contained_ps_consts_f;
+ unsigned int num_contained_ps_consts_f;
+ struct StageState contained_tss_states[MAX_TEXTURES * (WINED3D_HIGHEST_TEXTURE_STATE + 1)];
+ unsigned int num_contained_tss_states;
+ struct StageState contained_sampler_states[MAX_COMBINED_SAMPLERS * WINED3D_HIGHEST_SAMPLER_STATE];
+ unsigned int num_contained_sampler_states;
+};
+
+HRESULT stateblock_init(IWineD3DStateBlockImpl *stateblock,
+ IWineD3DDeviceImpl *device, WINED3DSTATEBLOCKTYPE type) DECLSPEC_HIDDEN;
+void stateblock_init_contained_states(IWineD3DStateBlockImpl *object) DECLSPEC_HIDDEN;
+
+static inline void stateblock_apply_state(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context)
+{
+ const struct StateEntry *statetable = stateblock->device->StateTable;
+ DWORD rep = statetable[state].representative;
+ statetable[rep].apply(rep, stateblock, context);
+}
+
+/* Direct3D terminology with little modifications. We do not have an issued state
+ * because only the driver knows about it, but we have a created state because d3d
+ * allows GetData on a created issue, but opengl doesn't
+ */
+enum query_state {
+ QUERY_CREATED,
+ QUERY_SIGNALLED,
+ QUERY_BUILDING
+};
+/*****************************************************************************
+ * IWineD3DQueryImpl implementation structure (extends IUnknown)
+ */
+typedef struct IWineD3DQueryImpl
+{
+ const IWineD3DQueryVtbl *lpVtbl;
+ LONG ref; /* Note: Ref counting not required */
+
+ IUnknown *parent;
+ IWineD3DDeviceImpl *device;
+
+ /* IWineD3DQuery fields */
+ enum query_state state;
+ WINED3DQUERYTYPE type;
+ /* TODO: Think about using a IUnknown instead of a void* */
+ void *extendedData;
+} IWineD3DQueryImpl;
+
+HRESULT query_init(IWineD3DQueryImpl *query, IWineD3DDeviceImpl *device,
+ WINED3DQUERYTYPE type, IUnknown *parent) DECLSPEC_HIDDEN;
+
+/* IWineD3DBuffer */
+
+/* TODO: Add tests and support for FLOAT16_4 POSITIONT, D3DCOLOR position, other
+ * fixed function semantics as D3DCOLOR or FLOAT16 */
+enum wined3d_buffer_conversion_type
+{
+ CONV_NONE,
+ CONV_D3DCOLOR,
+ CONV_POSITIONT,
+ CONV_FLOAT16_2, /* Also handles FLOAT16_4 */
+};
+
+struct wined3d_map_range
+{
+ UINT offset;
+ UINT size;
+};
+
+#define WINED3D_BUFFER_OPTIMIZED 0x01 /* Optimize has been called for the buffer */
+#define WINED3D_BUFFER_HASDESC 0x02 /* A vertex description has been found */
+#define WINED3D_BUFFER_CREATEBO 0x04 /* Attempt to create a buffer object next PreLoad */
+#define WINED3D_BUFFER_DOUBLEBUFFER 0x08 /* Use a vbo and local allocated memory */
+#define WINED3D_BUFFER_FLUSH 0x10 /* Manual unmap flushing */
+#define WINED3D_BUFFER_DISCARD 0x20 /* A DISCARD lock has occurred since the last PreLoad */
+#define WINED3D_BUFFER_NOSYNC 0x40 /* All locks since the last PreLoad had NOOVERWRITE set */
+#define WINED3D_BUFFER_APPLESYNC 0x80 /* Using sync as in GL_APPLE_flush_buffer_range */
+
+struct wined3d_buffer
+{
+ const struct IWineD3DBufferVtbl *vtbl;
+ IWineD3DResourceClass resource;
+
+ struct wined3d_buffer_desc desc;
+
+ GLuint buffer_object;
+ GLenum buffer_object_usage;
+ GLenum buffer_type_hint;
+ UINT buffer_object_size;
+ LONG bind_count;
+ DWORD flags;
+
+ LONG lock_count;
+ struct wined3d_map_range *maps;
+ ULONG maps_size, modified_areas;
+ struct wined3d_event_query *query;
+
+ /* conversion stuff */
+ UINT decl_change_count, full_conversion_count;
+ UINT draw_count;
+ UINT stride; /* 0 if no conversion */
+ UINT conversion_stride; /* 0 if no shifted conversion */
+ enum wined3d_buffer_conversion_type *conversion_map; /* NULL if no conversion */
+ /* Extra load offsets, for FLOAT16 conversion */
+ UINT *conversion_shift; /* NULL if no shifted conversion */
+};
+
+const BYTE *buffer_get_memory(IWineD3DBuffer *iface, GLuint *buffer_object) DECLSPEC_HIDDEN;
+BYTE *buffer_get_sysmem(struct wined3d_buffer *This) DECLSPEC_HIDDEN;
+HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
+ UINT size, DWORD usage, WINED3DFORMAT format, WINED3DPOOL pool, GLenum bind_hint,
+ const char *data, IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+/* IWineD3DRendertargetView */
+struct wined3d_rendertarget_view
+{
+ const struct IWineD3DRendertargetViewVtbl *vtbl;
+ LONG refcount;
+
+ IWineD3DResource *resource;
+ IUnknown *parent;
+};
+
+void wined3d_rendertarget_view_init(struct wined3d_rendertarget_view *view,
+ IWineD3DResource *resource, IUnknown *parent) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IWineD3DSwapChainImpl implementation structure (extends IUnknown)
+ */
+
+struct IWineD3DSwapChainImpl
+{
+ /*IUnknown part*/
+ const IWineD3DSwapChainVtbl *lpVtbl;
+ LONG ref; /* Note: Ref counting not required */
+
+ IUnknown *parent;
+ IWineD3DDeviceImpl *device;
+
+ /* IWineD3DSwapChain fields */
+ IWineD3DSurface **backBuffer;
+ IWineD3DSurface *frontBuffer;
+ WINED3DPRESENT_PARAMETERS presentParms;
+ DWORD orig_width, orig_height;
+ WINED3DFORMAT orig_fmt;
+ WINED3DGAMMARAMP orig_gamma;
+ BOOL render_to_fbo;
+ const struct wined3d_format_desc *ds_format;
+
+ long prev_time, frames; /* Performance tracking */
+ unsigned int vSyncCounter;
+
+#ifndef VBOX_WITH_WDDM
+ struct wined3d_context **context;
+ unsigned int num_contexts;
+ HWND win_handle;
+ HWND device_window;
+ HDC hDC;
+#else
+ HWND win_handle;
+ HDC hDC;
+ IWineD3DSurface *presentRt;
+#endif
+};
+
+extern const IWineD3DSwapChainVtbl IWineGDISwapChain_Vtbl DECLSPEC_HIDDEN;
+void x11_copy_to_screen(IWineD3DSwapChainImpl *This, const RECT *rc) DECLSPEC_HIDDEN;
+
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_QueryInterface(IWineD3DSwapChain *iface,
+ REFIID riid, LPVOID *ppobj) DECLSPEC_HIDDEN;
+ULONG WINAPI IWineD3DBaseSwapChainImpl_AddRef(IWineD3DSwapChain *iface) DECLSPEC_HIDDEN;
+ULONG WINAPI IWineD3DBaseSwapChainImpl_Release(IWineD3DSwapChain *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetParent(IWineD3DSwapChain *iface, IUnknown **ppParent) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetFrontBufferData(IWineD3DSwapChain *iface,
+ IWineD3DSurface *pDestSurface) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, UINT iBackBuffer,
+ WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface **ppBackBuffer) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *iface,
+ WINED3DRASTER_STATUS *pRasterStatus) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface,
+ WINED3DDISPLAYMODE *pMode) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetDevice(IWineD3DSwapChain *iface,
+ IWineD3DDevice **ppDevice) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetPresentParameters(IWineD3DSwapChain *iface,
+ WINED3DPRESENT_PARAMETERS *pPresentationParameters) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_SetGammaRamp(IWineD3DSwapChain *iface,
+ DWORD Flags, const WINED3DGAMMARAMP *pRamp) DECLSPEC_HIDDEN;
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetGammaRamp(IWineD3DSwapChain *iface,
+ WINED3DGAMMARAMP *pRamp) DECLSPEC_HIDDEN;
+
+struct wined3d_context *swapchain_create_context_for_thread(IWineD3DSwapChain *iface) DECLSPEC_HIDDEN;
+HRESULT swapchain_init(IWineD3DSwapChainImpl *swapchain, WINED3DSURFTYPE surface_type,
+ IWineD3DDeviceImpl *device, WINED3DPRESENT_PARAMETERS *present_parameters, IUnknown *parent) DECLSPEC_HIDDEN;
+void swapchain_restore_fullscreen_window(IWineD3DSwapChainImpl *swapchain) DECLSPEC_HIDDEN;
+void swapchain_setup_fullscreen_window(IWineD3DSwapChainImpl *swapchain, UINT w, UINT h) DECLSPEC_HIDDEN;
+
+#define DEFAULT_REFRESH_RATE 0
+
+/*****************************************************************************
+ * Utility function prototypes
+ */
+
+/* Trace routines */
+const char *debug_d3dformat(WINED3DFORMAT fmt) DECLSPEC_HIDDEN;
+const char *debug_d3ddevicetype(WINED3DDEVTYPE devtype) DECLSPEC_HIDDEN;
+const char *debug_d3dresourcetype(WINED3DRESOURCETYPE res) DECLSPEC_HIDDEN;
+const char *debug_d3dusage(DWORD usage) DECLSPEC_HIDDEN;
+const char *debug_d3dusagequery(DWORD usagequery) DECLSPEC_HIDDEN;
+const char *debug_d3ddeclmethod(WINED3DDECLMETHOD method) DECLSPEC_HIDDEN;
+const char *debug_d3ddeclusage(BYTE usage) DECLSPEC_HIDDEN;
+const char *debug_d3dprimitivetype(WINED3DPRIMITIVETYPE PrimitiveType) DECLSPEC_HIDDEN;
+const char *debug_d3drenderstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dsamplerstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dtexturefiltertype(WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;
+const char *debug_d3dtexturestate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dtstype(WINED3DTRANSFORMSTATETYPE tstype) DECLSPEC_HIDDEN;
+const char *debug_d3dpool(WINED3DPOOL pool) DECLSPEC_HIDDEN;
+const char *debug_fbostatus(GLenum status) DECLSPEC_HIDDEN;
+const char *debug_glerror(GLenum error) DECLSPEC_HIDDEN;
+const char *debug_d3dbasis(WINED3DBASISTYPE basis) DECLSPEC_HIDDEN;
+const char *debug_d3ddegree(WINED3DDEGREETYPE order) DECLSPEC_HIDDEN;
+const char *debug_d3dtop(WINED3DTEXTUREOP d3dtop) DECLSPEC_HIDDEN;
+void dump_color_fixup_desc(struct color_fixup_desc fixup) DECLSPEC_HIDDEN;
+const char *debug_surflocation(DWORD flag) DECLSPEC_HIDDEN;
+
+/* Color conversion routines */
+DWORD color_convert_argb_to_fmt(DWORD color, WINED3DFORMAT destfmt) DECLSPEC_HIDDEN;
+
+/* Routines for GL <-> D3D values */
+GLenum StencilOp(DWORD op) DECLSPEC_HIDDEN;
+GLenum CompareFunc(DWORD func) DECLSPEC_HIDDEN;
+BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, WINED3DTEXTUREOP op,
+ DWORD arg1, DWORD arg2, DWORD arg3) DECLSPEC_HIDDEN;
+void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEXTUREOP op,
+ DWORD arg1, DWORD arg2, DWORD arg3, INT texture_idx, DWORD dst) DECLSPEC_HIDDEN;
+void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords,
+ BOOL transformed, WINED3DFORMAT coordtype, BOOL ffp_can_disable_proj) DECLSPEC_HIDDEN;
+void texture_activate_dimensions(DWORD stage, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void sampler_texdim(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void tex_alphaop(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void apply_pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fogcolor(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fogdensity(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fogstartend(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+void state_fog_fragpart(DWORD state, IWineD3DStateBlockImpl *stateblock,
+ struct wined3d_context *context) DECLSPEC_HIDDEN;
+
+void surface_add_dirty_rect(IWineD3DSurface *iface, const RECT *dirty_rect) DECLSPEC_HIDDEN;
+GLenum surface_get_gl_buffer(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
+void surface_modify_ds_location(IWineD3DSurface *iface, DWORD location) DECLSPEC_HIDDEN;
+void surface_set_compatible_renderbuffer(IWineD3DSurface *iface,
+ unsigned int width, unsigned int height) DECLSPEC_HIDDEN;
+void surface_set_texture_name(IWineD3DSurface *iface, GLuint name, BOOL srgb_name) DECLSPEC_HIDDEN;
+void surface_set_texture_target(IWineD3DSurface *iface, GLenum target) DECLSPEC_HIDDEN;
+
+BOOL getColorBits(const struct wined3d_format_desc *format_desc,
+ short *redSize, short *greenSize, short *blueSize, short *alphaSize, short *totalSize) DECLSPEC_HIDDEN;
+BOOL getDepthStencilBits(const struct wined3d_format_desc *format_desc,
+ short *depthSize, short *stencilSize) DECLSPEC_HIDDEN;
+
+/* Math utils */
+void multiply_matrix(WINED3DMATRIX *dest, const WINED3DMATRIX *src1, const WINED3DMATRIX *src2) DECLSPEC_HIDDEN;
+UINT wined3d_log2i(UINT32 x) DECLSPEC_HIDDEN;
+unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN;
+
+void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN;
+
+typedef struct local_constant {
+ struct list entry;
+ unsigned int idx;
+ DWORD value[4];
+} local_constant;
+
+typedef struct SHADER_LIMITS {
+ unsigned int temporary;
+ unsigned int texcoord;
+ unsigned int sampler;
+ unsigned int constant_int;
+ unsigned int constant_float;
+ unsigned int constant_bool;
+ unsigned int address;
+ unsigned int packed_output;
+ unsigned int packed_input;
+ unsigned int attributes;
+ unsigned int label;
+} SHADER_LIMITS;
+
+/* Keeps track of details for TEX_M#x# shader opcodes which need to
+ * maintain state information between multiple codes */
+typedef struct SHADER_PARSE_STATE {
+ unsigned int current_row;
+ DWORD texcoord_w[2];
+} SHADER_PARSE_STATE;
+
+#ifdef __GNUC__
+#define PRINTF_ATTR(fmt,args) __attribute__((format (printf,fmt,args)))
+#else
+#define PRINTF_ATTR(fmt,args)
+#endif
+
+/* Base Shader utility functions. */
+int shader_addline(struct wined3d_shader_buffer *buffer, const char *fmt, ...) PRINTF_ATTR(2,3) DECLSPEC_HIDDEN;
+int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *fmt, va_list args) DECLSPEC_HIDDEN;
+
+/* Vertex shader utility functions */
+extern BOOL vshader_get_input(IWineD3DVertexShader *iface,
+ BYTE usage_req, BYTE usage_idx_req, unsigned int *regnum) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IDirect3DBaseShader implementation structure
+ */
+typedef struct IWineD3DBaseShaderClass
+{
+ LONG ref;
+ SHADER_LIMITS limits;
+ SHADER_PARSE_STATE parse_state;
+ DWORD *function;
+ UINT functionLength;
+ UINT cur_loop_depth, cur_loop_regno;
+ BOOL load_local_constsF;
+ const struct wined3d_shader_frontend *frontend;
+ void *frontend_data;
+ void *backend_data;
+
+ IUnknown *parent;
+ const struct wined3d_parent_ops *parent_ops;
+
+ /* Programs this shader is linked with */
+ struct list linked_programs;
+
+ /* Immediate constants (override global ones) */
+ struct list constantsB;
+ struct list constantsF;
+ struct list constantsI;
+ shader_reg_maps reg_maps;
+
+ struct wined3d_shader_signature_element input_signature[max(MAX_ATTRIBS, MAX_REG_INPUT)];
+ struct wined3d_shader_signature_element output_signature[MAX_REG_OUTPUT];
+
+ /* Pointer to the parent device */
+ IWineD3DDevice *device;
+ struct list shader_list_entry;
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+ VBOXEXT_HASHCACHE_ENTRY CacheEntry;
+ uint32_t u32CacheDataInited;
+ uint32_t u32Hash;
+#endif
+} IWineD3DBaseShaderClass;
+
+typedef struct IWineD3DBaseShaderImpl {
+ /* IUnknown */
+ const IWineD3DBaseShaderVtbl *lpVtbl;
+
+ /* IWineD3DBaseShader */
+ IWineD3DBaseShaderClass baseShader;
+} IWineD3DBaseShaderImpl;
+
+void shader_buffer_clear(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
+BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
+void shader_buffer_free(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
+void shader_dump_src_param(const struct wined3d_shader_src_param *param,
+ const struct wined3d_shader_version *shader_version) DECLSPEC_HIDDEN;
+void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
+ const struct wined3d_shader_version *shader_version) DECLSPEC_HIDDEN;
+unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max) DECLSPEC_HIDDEN;
+void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
+ const shader_reg_maps *reg_maps, const DWORD *pFunction, void *backend_ctx) DECLSPEC_HIDDEN;
+BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage) DECLSPEC_HIDDEN;
+
+static inline BOOL shader_is_pshader_version(enum wined3d_shader_type type)
+{
+ return type == WINED3D_SHADER_TYPE_PIXEL;
+}
+
+static inline BOOL shader_is_vshader_version(enum wined3d_shader_type type)
+{
+ return type == WINED3D_SHADER_TYPE_VERTEX;
+}
+
+static inline BOOL shader_is_scalar(const struct wined3d_shader_register *reg)
+{
+ switch (reg->type)
+ {
+ case WINED3DSPR_RASTOUT:
+ /* oFog & oPts */
+ if (reg->idx != 0) return TRUE;
+ /* oPos */
+ return FALSE;
+
+ case WINED3DSPR_DEPTHOUT: /* oDepth */
+ case WINED3DSPR_CONSTBOOL: /* b# */
+ case WINED3DSPR_LOOP: /* aL */
+#ifndef VBOX_WITH_VMSVGA
+ case WINED3DSPR_PREDICATE: /* p0 */
+ return TRUE;
+#else
+ return TRUE;
+ case WINED3DSPR_PREDICATE: /* p0 */
+ return FALSE;
+#endif
+
+ case WINED3DSPR_MISCTYPE:
+ switch(reg->idx)
+ {
+ case 0: /* vPos */
+ return FALSE;
+ case 1: /* vFace */
+ return TRUE;
+ default:
+ return FALSE;
+ }
+
+ case WINED3DSPR_IMMCONST:
+ switch(reg->immconst_type)
+ {
+ case WINED3D_IMMCONST_FLOAT:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+
+ default:
+ return FALSE;
+ }
+}
+
+static inline BOOL shader_constant_is_local(IWineD3DBaseShaderImpl* This, DWORD reg) {
+ local_constant* lconst;
+
+ if(This->baseShader.load_local_constsF) return FALSE;
+ LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry) {
+ if(lconst->idx == reg) return TRUE;
+ }
+ return FALSE;
+
+}
+
+/*****************************************************************************
+ * IDirect3DVertexShader implementation structures
+ */
+typedef struct IWineD3DVertexShaderImpl {
+ /* IUnknown parts */
+ const IWineD3DVertexShaderVtbl *lpVtbl;
+
+ /* IWineD3DBaseShader */
+ IWineD3DBaseShaderClass baseShader;
+
+ /* Vertex shader attributes. */
+ struct wined3d_shader_attribute attributes[MAX_ATTRIBS];
+
+ UINT min_rel_offset, max_rel_offset;
+ UINT rel_offset;
+} IWineD3DVertexShaderImpl;
+
+void find_vs_compile_args(IWineD3DVertexShaderImpl *shader, IWineD3DStateBlockImpl *stateblock,
+ struct vs_compile_args *args) DECLSPEC_HIDDEN;
+HRESULT vertexshader_init(IWineD3DVertexShaderImpl *shader, IWineD3DDeviceImpl *device,
+ const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+struct wined3d_geometryshader
+{
+ const struct IWineD3DGeometryShaderVtbl *vtbl;
+ IWineD3DBaseShaderClass base_shader;
+};
+
+HRESULT geometryshader_init(struct wined3d_geometryshader *shader, IWineD3DDeviceImpl *device,
+ const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * IDirect3DPixelShader implementation structure
+ */
+
+/* Using additional shader constants (uniforms in GLSL / program environment
+ * or local parameters in ARB) is costly:
+ * ARB only knows float4 parameters and GLSL compiler are not really smart
+ * when it comes to efficiently pack float2 uniforms, so no space is wasted
+ * (in fact most compilers map a float2 to a full float4 uniform).
+ *
+ * For NP2 texcoord fixup we only need 2 floats (width and height) for each
+ * 2D texture used in the shader. We therefore pack fixup info for 2 textures
+ * into a single shader constant (uniform / program parameter).
+ *
+ * This structure is shared between the GLSL and the ARB backend.*/
+struct ps_np2fixup_info {
+ unsigned char idx[MAX_FRAGMENT_SAMPLERS]; /* indices to the real constant */
+ WORD active; /* bitfield indicating if we can apply the fixup */
+ WORD num_consts;
+};
+
+typedef struct IWineD3DPixelShaderImpl {
+ /* IUnknown parts */
+ const IWineD3DPixelShaderVtbl *lpVtbl;
+
+ /* IWineD3DBaseShader */
+ IWineD3DBaseShaderClass baseShader;
+
+ /* Pixel shader input semantics */
+ DWORD input_reg_map[MAX_REG_INPUT];
+ BOOL input_reg_used[MAX_REG_INPUT];
+ unsigned int declared_in_count;
+
+ /* Some information about the shader behavior */
+ char vpos_uniform;
+
+ BOOL color0_mov;
+ DWORD color0_reg;
+
+} IWineD3DPixelShaderImpl;
+
+HRESULT pixelshader_init(IWineD3DPixelShaderImpl *shader, IWineD3DDeviceImpl *device,
+ const DWORD *byte_code, const struct wined3d_shader_signature *output_signature,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
+void pixelshader_update_samplers(struct shader_reg_maps *reg_maps,
+ IWineD3DBaseTexture * const *textures) DECLSPEC_HIDDEN;
+void find_ps_compile_args(IWineD3DPixelShaderImpl *shader, IWineD3DStateBlockImpl *stateblock,
+ struct ps_compile_args *args) DECLSPEC_HIDDEN;
+
+#ifdef VBOX_WINE_WITH_SHADER_CACHE
+IWineD3DVertexShaderImpl * vertexshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DVertexShaderImpl *object) DECLSPEC_HIDDEN;
+IWineD3DPixelShaderImpl * pixelshader_check_cached(IWineD3DDeviceImpl *device, IWineD3DPixelShaderImpl *object) DECLSPEC_HIDDEN;
+void shader_chaches_init(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+void shader_chaches_term(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
+#endif
+
+/* sRGB correction constants */
+static const float srgb_cmp = 0.0031308f;
+static const float srgb_mul_low = 12.92f;
+static const float srgb_pow = 0.41666f;
+static const float srgb_mul_high = 1.055f;
+static const float srgb_sub_high = 0.055f;
+
+/*****************************************************************************
+ * IWineD3DPalette implementation structure
+ */
+struct IWineD3DPaletteImpl {
+ /* IUnknown parts */
+ const IWineD3DPaletteVtbl *lpVtbl;
+ LONG ref;
+
+ IUnknown *parent;
+ IWineD3DDeviceImpl *device;
+
+ /* IWineD3DPalette */
+ HPALETTE hpal;
+ WORD palVersion; /*| */
+ WORD palNumEntries; /*| LOGPALETTE */
+ PALETTEENTRY palents[256]; /*| */
+ /* This is to store the palette in 'screen format' */
+ int screen_palents[256];
+ DWORD Flags;
+};
+
+HRESULT wined3d_palette_init(IWineD3DPaletteImpl *palette, IWineD3DDeviceImpl *device,
+ DWORD flags, const PALETTEENTRY *entries, IUnknown *parent) DECLSPEC_HIDDEN;
+
+/* DirectDraw utility functions */
+extern WINED3DFORMAT pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN;
+
+/*****************************************************************************
+ * Pixel format management
+ */
+
+/* WineD3D pixel format flags */
+#define WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING 0x1
+#define WINED3DFMT_FLAG_FILTERING 0x2
+#define WINED3DFMT_FLAG_DEPTH 0x4
+#define WINED3DFMT_FLAG_STENCIL 0x8
+#define WINED3DFMT_FLAG_RENDERTARGET 0x10
+#define WINED3DFMT_FLAG_FOURCC 0x20
+#define WINED3DFMT_FLAG_FBO_ATTACHABLE 0x40
+#define WINED3DFMT_FLAG_COMPRESSED 0x80
+#define WINED3DFMT_FLAG_GETDC 0x100
+#define WINED3DFMT_FLAG_FLOAT 0x200
+
+struct wined3d_format_desc
+{
+ WINED3DFORMAT format;
+ DWORD red_mask;
+ DWORD green_mask;
+ DWORD blue_mask;
+ DWORD alpha_mask;
+ UINT byte_count;
+ WORD depth_size;
+ WORD stencil_size;
+
+ UINT block_width;
+ UINT block_height;
+ UINT block_byte_count;
+
+ enum wined3d_ffp_emit_idx emit_idx;
+ GLint component_count;
+ GLenum gl_vtx_type;
+ GLint gl_vtx_format;
+ GLboolean gl_normalized;
+ unsigned int component_size;
+
+ GLint glInternal;
+ GLint glGammaInternal;
+ GLint rtInternal;
+ GLint glFormat;
+ GLint glType;
+ UINT conv_byte_count;
+ unsigned int Flags;
+ float heightscale;
+ struct color_fixup_desc color_fixup;
+ void (*convert)(const BYTE *src, BYTE *dst, UINT pitch, UINT width, UINT height);
+};
+
+const struct wined3d_format_desc *getFormatDescEntry(WINED3DFORMAT fmt,
+ const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+
+static inline BOOL use_vs(IWineD3DStateBlockImpl *stateblock)
+{
+ /* Check stateblock->vertexDecl to allow this to be used from
+ * IWineD3DDeviceImpl_FindTexUnitMap(). This is safe because
+ * stateblock->vertexShader implies a vertex declaration instead of ddraw
+ * style strided data. */
+ return (stateblock->vertexShader
+ && !((IWineD3DVertexDeclarationImpl *)stateblock->vertexDecl)->position_transformed
+ && stateblock->device->vs_selected_mode != SHADER_NONE);
+}
+
+static inline BOOL use_ps(IWineD3DStateBlockImpl *stateblock)
+{
+ return (stateblock->pixelShader && stateblock->device->ps_selected_mode != SHADER_NONE);
+}
+
+void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface,
+ const RECT *src_rect, IWineD3DSurface *dst_surface, const RECT *dst_rect,
+ const WINED3DTEXTUREFILTERTYPE filter) DECLSPEC_HIDDEN;
+
+/* The WNDCLASS-Name for the fake window which we use to retrieve the GL capabilities */
+#define WINED3D_OPENGL_WINDOW_CLASS_NAME "WineD3D_OpenGL"
+
+#define WINEMAKEFOURCC(ch0, ch1, ch2, ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+
+#define MAKEDWORD_VERSION(maj, min) (((maj & 0xffff) << 16) | (min & 0xffff))
+
+#ifdef RT_OS_DARWIN
+void *MyNSGLGetProcAddress(const char *name);
+#endif
+
+/** @def VBOX_CHECK_GL_CALL
+ * Performs OpenGL call @a a_Expr and check glGetError.
+ * Errors will be asserted in strict builds and hit the release log in
+ * non-strict builds.
+ * @param a_Expr The OpenGL call expression. Always executed!
+ */
+#ifdef VBOX_WITH_VMSVGA
+# define VBOX_CHECK_GL_CALL(a_Expr) \
+ do { \
+ GLint rcCheckCall; \
+ a_Expr; \
+ rcCheckCall = glGetError(); \
+ AssertLogRelMsg(rcCheckCall == GL_NO_ERROR, ("%s -> %#x\n", #a_Expr, rcCheckCall)); \
+ } while (0)
+#else
+# define VBOX_CHECK_GL_CALL(a_Expr) do { a_Expr; } while (0)
+#endif
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_shaderlib_wined3d_private_h */
diff --git a/src/VBox/Devices/Graphics/shaderlib/winoverride.h b/src/VBox/Devices/Graphics/shaderlib/winoverride.h
new file mode 100644
index 00000000..b0e2e9b5
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaderlib/winoverride.h
@@ -0,0 +1,46 @@
+/* $Id: winoverride.h $ */
+/** @file
+ * DevVMWare/Shaderlib - Wine Function Portability Overrides
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Graphics_shaderlib_winoverride_h
+#define VBOX_INCLUDED_SRC_Graphics_shaderlib_winoverride_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#define GetProcessHeap() ((HANDLE)0)
+#define HeapAlloc VBoxHeapAlloc
+#define HeapFree VBoxHeapFree
+#define HeapReAlloc VBoxHeapReAlloc
+#define DebugBreak VBoxDebugBreak
+
+LPVOID WINAPI VBoxHeapAlloc(HANDLE hHeap, DWORD heaptype, SIZE_T size);
+BOOL WINAPI VBoxHeapFree(HANDLE hHeap, DWORD heaptype, LPVOID ptr);
+LPVOID WINAPI VBoxHeapReAlloc(HANDLE hHeap,DWORD heaptype, LPVOID ptr, SIZE_T size);
+void VBoxDebugBreak(void);
+
+#endif /* !VBOX_INCLUDED_SRC_Graphics_shaderlib_winoverride_h */
+
diff --git a/src/VBox/Devices/Graphics/shaders/Makefile.kmk b/src/VBox/Devices/Graphics/shaders/Makefile.kmk
new file mode 100644
index 00000000..98c44de3
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaders/Makefile.kmk
@@ -0,0 +1,50 @@
+# $Id: Makefile.kmk $
+## @file
+# Makefile for D3D11 shader compilation.
+#
+
+#
+# Copyright (C) 2022 Oracle and/or its affiliates.
+#
+# This file is part of VirtualBox base platform packages, as
+# available from https://www.virtualbox.org.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation, in version 3 of the
+# License.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses>.
+#
+# SPDX-License-Identifier: GPL-3.0-only
+#
+
+SUB_DEPTH = ../../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+OTHERS += \
+ $(PATH_SUB_CURRENT)/d3d11blitter.hlsl.vs.h \
+ $(PATH_SUB_CURRENT)/d3d11blitter.hlsl.ps.h
+OTHERS_CLEAN += \
+ $(PATH_SUB_CURRENT)/d3d11blitter.hlsl.vs.h \
+ $(PATH_SUB_CURRENT)/d3d11blitter.hlsl.ps.h
+
+VBOX_FXC ?= $(PATH_SDK_$(VBOX_WINPSDK)_BIN)/fxc.exe
+
+$(PATH_SUB_CURRENT)/d3d11blitter.hlsl.vs.h: \
+ $(PATH_SUB_CURRENT)/Makefile.kmk \
+ $(PATH_SUB_CURRENT)/d3d11blitter.hlsl
+ $(VBOX_FXC) /nologo /Fhd3d11blitter.hlsl.vs.h /Evs_blitter /Tvs_5_0 d3d11blitter.hlsl
+
+$(PATH_SUB_CURRENT)/d3d11blitter.hlsl.ps.h: \
+ $(PATH_SUB_CURRENT)/Makefile.kmk \
+ $(PATH_SUB_CURRENT)/d3d11blitter.hlsl
+ $(VBOX_FXC) /nologo /Fhd3d11blitter.hlsl.ps.h /Eps_blitter /Tps_5_0 d3d11blitter.hlsl
+
+include $(FILE_KBUILD_SUB_FOOTER)
diff --git a/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl b/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl
new file mode 100644
index 00000000..df06c9f7
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl
@@ -0,0 +1,75 @@
+/* $Id: d3d11blitter.hlsl $ */
+/*
+ * Blitter for dxgiBlt/SVGA_3D_CMD_DX_PRESENTBLT.
+ *
+ * fxc /nologo /Fhd3d11blitter.hlsl.vs.h /Evs_blitter /Tvs_5_0 d3d11blitter.hlsl
+ * fxc /nologo /Fhd3d11blitter.hlsl.ps.h /Eps_blitter /Tps_5_0 d3d11blitter.hlsl
+ */
+
+/*
+ * Copyright (C) 2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+Texture2D t;
+sampler s;
+
+cbuffer VSParameters
+{
+ float scaleX;
+ float scaleY;
+ float shiftX;
+ float shiftY;
+};
+
+struct VSInput
+{
+ uint VertexID : SV_VertexID;
+};
+
+struct VSOutput
+{
+ float4 position : SV_POSITION;
+ float2 texcoord : TEXCOORD0;
+ float2 alpha : TEXCOORD1;
+};
+
+VSOutput vs_blitter(VSInput input)
+{
+ VSOutput output;
+
+ float x = (input.VertexID & 1) ? 1.0f : -1.0f;
+ float y = (input.VertexID & 2) ? -1.0f : 1.0f;
+ x = x * scaleX + shiftX;
+ y = y * scaleY + shiftY;
+ output.position = float4(x, y, 0.0f, 1.0f);
+
+ output.texcoord.x = (input.VertexID & 1) ? 1.0f : 0.0f;
+ output.texcoord.y = (input.VertexID & 2) ? 1.0f : 0.0f;
+
+ output.alpha = float2(1.0f, 0.0f);
+
+ return output;
+}
+
+float4 ps_blitter(VSOutput input) : SV_TARGET
+{
+ return float4(t.Sample(s, input.texcoord).rgb, input.alpha.x);
+}
diff --git a/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.ps.h b/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.ps.h
new file mode 100644
index 00000000..dba5f159
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.ps.h
@@ -0,0 +1,169 @@
+#if 0
+//
+// Generated by Microsoft (R) HLSL Shader Compiler 10.1
+//
+//
+// Resource Bindings:
+//
+// Name Type Format Dim HLSL Bind Count
+// ------------------------------ ---------- ------- ----------- -------------- ------
+// s sampler NA NA s0 1
+// t texture float4 2d t0 1
+//
+//
+//
+// Input signature:
+//
+// Name Index Mask Register SysValue Format Used
+// -------------------- ----- ------ -------- -------- ------- ------
+// SV_POSITION 0 xyzw 0 POS float
+// TEXCOORD 0 xy 1 NONE float xy
+// TEXCOORD 1 zw 1 NONE float z
+//
+//
+// Output signature:
+//
+// Name Index Mask Register SysValue Format Used
+// -------------------- ----- ------ -------- -------- ------- ------
+// SV_TARGET 0 xyzw 0 TARGET float xyzw
+//
+ps_5_0
+dcl_globalFlags refactoringAllowed
+dcl_sampler s0, mode_default
+dcl_resource_texture2d (float,float,float,float) t0
+dcl_input_ps linear v1.xy
+dcl_input_ps linear v1.z
+dcl_output o0.xyzw
+dcl_temps 1
+sample_indexable(texture2d)(float,float,float,float) r0.xyz, v1.xyxx, t0.xyzw, s0
+mov o0.xyz, r0.xyzx
+mov o0.w, v1.z
+ret
+// Approximately 4 instruction slots used
+#endif
+
+const BYTE g_ps_blitter[] =
+{
+ 68, 88, 66, 67, 63, 252,
+ 141, 106, 55, 56, 211, 92,
+ 55, 135, 46, 227, 111, 177,
+ 216, 163, 1, 0, 0, 0,
+ 216, 2, 0, 0, 5, 0,
+ 0, 0, 52, 0, 0, 0,
+ 228, 0, 0, 0, 84, 1,
+ 0, 0, 136, 1, 0, 0,
+ 60, 2, 0, 0, 82, 68,
+ 69, 70, 168, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0,
+ 60, 0, 0, 0, 0, 5,
+ 255, 255, 0, 1, 0, 0,
+ 128, 0, 0, 0, 82, 68,
+ 49, 49, 60, 0, 0, 0,
+ 24, 0, 0, 0, 32, 0,
+ 0, 0, 40, 0, 0, 0,
+ 36, 0, 0, 0, 12, 0,
+ 0, 0, 0, 0, 0, 0,
+ 124, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0,
+ 0, 0, 126, 0, 0, 0,
+ 2, 0, 0, 0, 5, 0,
+ 0, 0, 4, 0, 0, 0,
+ 255, 255, 255, 255, 0, 0,
+ 0, 0, 1, 0, 0, 0,
+ 12, 0, 0, 0, 115, 0,
+ 116, 0, 77, 105, 99, 114,
+ 111, 115, 111, 102, 116, 32,
+ 40, 82, 41, 32, 72, 76,
+ 83, 76, 32, 83, 104, 97,
+ 100, 101, 114, 32, 67, 111,
+ 109, 112, 105, 108, 101, 114,
+ 32, 49, 48, 46, 49, 0,
+ 73, 83, 71, 78, 104, 0,
+ 0, 0, 3, 0, 0, 0,
+ 8, 0, 0, 0, 80, 0,
+ 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0,
+ 15, 0, 0, 0, 92, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0,
+ 0, 0, 1, 0, 0, 0,
+ 3, 3, 0, 0, 92, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0,
+ 0, 0, 1, 0, 0, 0,
+ 12, 4, 0, 0, 83, 86,
+ 95, 80, 79, 83, 73, 84,
+ 73, 79, 78, 0, 84, 69,
+ 88, 67, 79, 79, 82, 68,
+ 0, 171, 171, 171, 79, 83,
+ 71, 78, 44, 0, 0, 0,
+ 1, 0, 0, 0, 8, 0,
+ 0, 0, 32, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 15, 0,
+ 0, 0, 83, 86, 95, 84,
+ 65, 82, 71, 69, 84, 0,
+ 171, 171, 83, 72, 69, 88,
+ 172, 0, 0, 0, 80, 0,
+ 0, 0, 43, 0, 0, 0,
+ 106, 8, 0, 1, 90, 0,
+ 0, 3, 0, 96, 16, 0,
+ 0, 0, 0, 0, 88, 24,
+ 0, 4, 0, 112, 16, 0,
+ 0, 0, 0, 0, 85, 85,
+ 0, 0, 98, 16, 0, 3,
+ 50, 16, 16, 0, 1, 0,
+ 0, 0, 98, 16, 0, 3,
+ 66, 16, 16, 0, 1, 0,
+ 0, 0, 101, 0, 0, 3,
+ 242, 32, 16, 0, 0, 0,
+ 0, 0, 104, 0, 0, 2,
+ 1, 0, 0, 0, 69, 0,
+ 0, 139, 194, 0, 0, 128,
+ 67, 85, 21, 0, 114, 0,
+ 16, 0, 0, 0, 0, 0,
+ 70, 16, 16, 0, 1, 0,
+ 0, 0, 70, 126, 16, 0,
+ 0, 0, 0, 0, 0, 96,
+ 16, 0, 0, 0, 0, 0,
+ 54, 0, 0, 5, 114, 32,
+ 16, 0, 0, 0, 0, 0,
+ 70, 2, 16, 0, 0, 0,
+ 0, 0, 54, 0, 0, 5,
+ 130, 32, 16, 0, 0, 0,
+ 0, 0, 42, 16, 16, 0,
+ 1, 0, 0, 0, 62, 0,
+ 0, 1, 83, 84, 65, 84,
+ 148, 0, 0, 0, 4, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0
+};
diff --git a/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.vs.h b/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.vs.h
new file mode 100644
index 00000000..a6592b1f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/shaders/d3d11blitter.hlsl.vs.h
@@ -0,0 +1,249 @@
+#if 0
+//
+// Generated by Microsoft (R) HLSL Shader Compiler 10.1
+//
+//
+// Buffer Definitions:
+//
+// cbuffer VSParameters
+// {
+//
+// float scaleX; // Offset: 0 Size: 4
+// float scaleY; // Offset: 4 Size: 4
+// float shiftX; // Offset: 8 Size: 4
+// float shiftY; // Offset: 12 Size: 4
+//
+// }
+//
+//
+// Resource Bindings:
+//
+// Name Type Format Dim HLSL Bind Count
+// ------------------------------ ---------- ------- ----------- -------------- ------
+// VSParameters cbuffer NA NA cb0 1
+//
+//
+//
+// Input signature:
+//
+// Name Index Mask Register SysValue Format Used
+// -------------------- ----- ------ -------- -------- ------- ------
+// SV_VertexID 0 x 0 VERTID uint x
+//
+//
+// Output signature:
+//
+// Name Index Mask Register SysValue Format Used
+// -------------------- ----- ------ -------- -------- ------- ------
+// SV_POSITION 0 xyzw 0 POS float xyzw
+// TEXCOORD 0 xy 1 NONE float xy
+// TEXCOORD 1 zw 1 NONE float zw
+//
+vs_5_0
+dcl_globalFlags refactoringAllowed
+dcl_constantbuffer CB0[1], immediateIndexed
+dcl_input_sgv v0.x, vertex_id
+dcl_output_siv o0.xyzw, position
+dcl_output o1.xy
+dcl_output o1.zw
+dcl_temps 1
+and r0.xyzw, v0.xxxx, l(1, 2, 1, 2)
+movc r0.xyzw, r0.xyzw, l(1.000000,-1.000000,1.000000,1.000000), l(-1.000000,1.000000,0,0)
+mad o0.xy, r0.xyxx, cb0[0].xyxx, cb0[0].zwzz
+mov o1.xy, r0.zwzz
+mov o0.zw, l(0,0,0,1.000000)
+mov o1.zw, l(0,0,1.000000,0)
+ret
+// Approximately 7 instruction slots used
+#endif
+
+const BYTE g_vs_blitter[] =
+{
+ 68, 88, 66, 67, 225, 37,
+ 228, 7, 29, 113, 112, 121,
+ 16, 192, 133, 165, 100, 74,
+ 183, 80, 1, 0, 0, 0,
+ 96, 4, 0, 0, 5, 0,
+ 0, 0, 52, 0, 0, 0,
+ 212, 1, 0, 0, 8, 2,
+ 0, 0, 120, 2, 0, 0,
+ 196, 3, 0, 0, 82, 68,
+ 69, 70, 152, 1, 0, 0,
+ 1, 0, 0, 0, 108, 0,
+ 0, 0, 1, 0, 0, 0,
+ 60, 0, 0, 0, 0, 5,
+ 254, 255, 0, 1, 0, 0,
+ 109, 1, 0, 0, 82, 68,
+ 49, 49, 60, 0, 0, 0,
+ 24, 0, 0, 0, 32, 0,
+ 0, 0, 40, 0, 0, 0,
+ 36, 0, 0, 0, 12, 0,
+ 0, 0, 0, 0, 0, 0,
+ 92, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0,
+ 0, 0, 86, 83, 80, 97,
+ 114, 97, 109, 101, 116, 101,
+ 114, 115, 0, 171, 171, 171,
+ 92, 0, 0, 0, 4, 0,
+ 0, 0, 132, 0, 0, 0,
+ 16, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 36, 1, 0, 0, 0, 0,
+ 0, 0, 4, 0, 0, 0,
+ 2, 0, 0, 0, 52, 1,
+ 0, 0, 0, 0, 0, 0,
+ 255, 255, 255, 255, 0, 0,
+ 0, 0, 255, 255, 255, 255,
+ 0, 0, 0, 0, 88, 1,
+ 0, 0, 4, 0, 0, 0,
+ 4, 0, 0, 0, 2, 0,
+ 0, 0, 52, 1, 0, 0,
+ 0, 0, 0, 0, 255, 255,
+ 255, 255, 0, 0, 0, 0,
+ 255, 255, 255, 255, 0, 0,
+ 0, 0, 95, 1, 0, 0,
+ 8, 0, 0, 0, 4, 0,
+ 0, 0, 2, 0, 0, 0,
+ 52, 1, 0, 0, 0, 0,
+ 0, 0, 255, 255, 255, 255,
+ 0, 0, 0, 0, 255, 255,
+ 255, 255, 0, 0, 0, 0,
+ 102, 1, 0, 0, 12, 0,
+ 0, 0, 4, 0, 0, 0,
+ 2, 0, 0, 0, 52, 1,
+ 0, 0, 0, 0, 0, 0,
+ 255, 255, 255, 255, 0, 0,
+ 0, 0, 255, 255, 255, 255,
+ 0, 0, 0, 0, 115, 99,
+ 97, 108, 101, 88, 0, 102,
+ 108, 111, 97, 116, 0, 171,
+ 171, 171, 0, 0, 3, 0,
+ 1, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 43, 1,
+ 0, 0, 115, 99, 97, 108,
+ 101, 89, 0, 115, 104, 105,
+ 102, 116, 88, 0, 115, 104,
+ 105, 102, 116, 89, 0, 77,
+ 105, 99, 114, 111, 115, 111,
+ 102, 116, 32, 40, 82, 41,
+ 32, 72, 76, 83, 76, 32,
+ 83, 104, 97, 100, 101, 114,
+ 32, 67, 111, 109, 112, 105,
+ 108, 101, 114, 32, 49, 48,
+ 46, 49, 0, 171, 171, 171,
+ 73, 83, 71, 78, 44, 0,
+ 0, 0, 1, 0, 0, 0,
+ 8, 0, 0, 0, 32, 0,
+ 0, 0, 0, 0, 0, 0,
+ 6, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 83, 86,
+ 95, 86, 101, 114, 116, 101,
+ 120, 73, 68, 0, 79, 83,
+ 71, 78, 104, 0, 0, 0,
+ 3, 0, 0, 0, 8, 0,
+ 0, 0, 80, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0,
+ 0, 0, 3, 0, 0, 0,
+ 0, 0, 0, 0, 15, 0,
+ 0, 0, 92, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0,
+ 1, 0, 0, 0, 3, 12,
+ 0, 0, 92, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0,
+ 1, 0, 0, 0, 12, 3,
+ 0, 0, 83, 86, 95, 80,
+ 79, 83, 73, 84, 73, 79,
+ 78, 0, 84, 69, 88, 67,
+ 79, 79, 82, 68, 0, 171,
+ 171, 171, 83, 72, 69, 88,
+ 68, 1, 0, 0, 80, 0,
+ 1, 0, 81, 0, 0, 0,
+ 106, 8, 0, 1, 89, 0,
+ 0, 4, 70, 142, 32, 0,
+ 0, 0, 0, 0, 1, 0,
+ 0, 0, 96, 0, 0, 4,
+ 18, 16, 16, 0, 0, 0,
+ 0, 0, 6, 0, 0, 0,
+ 103, 0, 0, 4, 242, 32,
+ 16, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 101, 0,
+ 0, 3, 50, 32, 16, 0,
+ 1, 0, 0, 0, 101, 0,
+ 0, 3, 194, 32, 16, 0,
+ 1, 0, 0, 0, 104, 0,
+ 0, 2, 1, 0, 0, 0,
+ 1, 0, 0, 10, 242, 0,
+ 16, 0, 0, 0, 0, 0,
+ 6, 16, 16, 0, 0, 0,
+ 0, 0, 2, 64, 0, 0,
+ 1, 0, 0, 0, 2, 0,
+ 0, 0, 1, 0, 0, 0,
+ 2, 0, 0, 0, 55, 0,
+ 0, 15, 242, 0, 16, 0,
+ 0, 0, 0, 0, 70, 14,
+ 16, 0, 0, 0, 0, 0,
+ 2, 64, 0, 0, 0, 0,
+ 128, 63, 0, 0, 128, 191,
+ 0, 0, 128, 63, 0, 0,
+ 128, 63, 2, 64, 0, 0,
+ 0, 0, 128, 191, 0, 0,
+ 128, 63, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 0,
+ 0, 11, 50, 32, 16, 0,
+ 0, 0, 0, 0, 70, 0,
+ 16, 0, 0, 0, 0, 0,
+ 70, 128, 32, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 230, 138, 32, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 54, 0, 0, 5, 50, 32,
+ 16, 0, 1, 0, 0, 0,
+ 230, 10, 16, 0, 0, 0,
+ 0, 0, 54, 0, 0, 8,
+ 194, 32, 16, 0, 0, 0,
+ 0, 0, 2, 64, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 128, 63, 54, 0,
+ 0, 8, 194, 32, 16, 0,
+ 1, 0, 0, 0, 2, 64,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 128, 63, 0, 0, 0, 0,
+ 62, 0, 0, 1, 83, 84,
+ 65, 84, 148, 0, 0, 0,
+ 7, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0,
+ 4, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0,
+ 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0
+};
diff --git a/src/VBox/Devices/Graphics/svgadump/Makefile.kup b/src/VBox/Devices/Graphics/svgadump/Makefile.kup
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/svgadump/Makefile.kup
diff --git a/src/VBox/Devices/Graphics/svgadump/svga_dump.c b/src/VBox/Devices/Graphics/svgadump/svga_dump.c
new file mode 100644
index 00000000..6985ce75
--- /dev/null
+++ b/src/VBox/Devices/Graphics/svgadump/svga_dump.c
@@ -0,0 +1,2815 @@
+/**********************************************************
+ * Copyright 2009 VMware, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/**
+ * @file
+ * Dump SVGA commands.
+ *
+ * Generated automatically from svga3d_reg.h by svga_dump.py.
+ *
+ * Modified for VirtualBox.
+ */
+
+#include "svga_types.h"
+#include "vmsvga_headers_begin.h"
+#pragma pack(1) /* VMSVGA structures are '__packed'. */
+#include "svga3d_reg.h"
+#pragma pack()
+#include "vmsvga_headers_end.h"
+
+#include "svga_dump.h"
+
+#define LOG_GROUP LOG_GROUP_DEV_VMSVGA
+#include <VBox/log.h>
+
+#define _debug_printf(...) Log7((__VA_ARGS__));
+
+#ifdef LOG_ENABLED
+struct SVGAFormatName
+{
+ SVGA3dSurfaceFormat f;
+ const char *pszName;
+};
+
+static struct SVGAFormatName g_formats[] =
+{
+ { SVGA3D_FORMAT_INVALID , "INVALID" },
+ { SVGA3D_X8R8G8B8 , "X8R8G8B8" },
+ { SVGA3D_A8R8G8B8 , "A8R8G8B8" },
+ { SVGA3D_R5G6B5 , "R5G6B5" },
+ { SVGA3D_X1R5G5B5 , "X1R5G5B5" },
+ { SVGA3D_A1R5G5B5 , "A1R5G5B5" },
+ { SVGA3D_A4R4G4B4 , "A4R4G4B4" },
+ { SVGA3D_Z_D32 , "Z_D32" },
+ { SVGA3D_Z_D16 , "Z_D16" },
+ { SVGA3D_Z_D24S8 , "Z_D24S8" },
+ { SVGA3D_Z_D15S1 , "Z_D15S1" },
+ { SVGA3D_LUMINANCE8 , "LUMINANCE8" },
+ { SVGA3D_LUMINANCE4_ALPHA4 , "LUMINANCE4_ALPHA4" },
+ { SVGA3D_LUMINANCE16 , "LUMINANCE16" },
+ { SVGA3D_LUMINANCE8_ALPHA8 , "LUMINANCE8_ALPHA8" },
+ { SVGA3D_DXT1 , "DXT1" },
+ { SVGA3D_DXT2 , "DXT2" },
+ { SVGA3D_DXT3 , "DXT3" },
+ { SVGA3D_DXT4 , "DXT4" },
+ { SVGA3D_DXT5 , "DXT5" },
+ { SVGA3D_BUMPU8V8 , "BUMPU8V8" },
+ { SVGA3D_BUMPL6V5U5 , "BUMPL6V5U5" },
+ { SVGA3D_BUMPX8L8V8U8 , "BUMPX8L8V8U8" },
+ { SVGA3D_FORMAT_DEAD1 , "FORMAT_DEAD1" },
+ { SVGA3D_ARGB_S10E5 , "ARGB_S10E5" },
+ { SVGA3D_ARGB_S23E8 , "ARGB_S23E8" },
+ { SVGA3D_A2R10G10B10 , "A2R10G10B10" },
+ { SVGA3D_V8U8 , "V8U8" },
+ { SVGA3D_Q8W8V8U8 , "Q8W8V8U8" },
+ { SVGA3D_CxV8U8 , "CxV8U8" },
+ { SVGA3D_X8L8V8U8 , "X8L8V8U8" },
+ { SVGA3D_A2W10V10U10 , "A2W10V10U10" },
+ { SVGA3D_ALPHA8 , "ALPHA8" },
+ { SVGA3D_R_S10E5 , "R_S10E5" },
+ { SVGA3D_R_S23E8 , "R_S23E8" },
+ { SVGA3D_RG_S10E5 , "RG_S10E5" },
+ { SVGA3D_RG_S23E8 , "RG_S23E8" },
+ { SVGA3D_BUFFER , "BUFFER" },
+ { SVGA3D_Z_D24X8 , "Z_D24X8" },
+ { SVGA3D_V16U16 , "V16U16" },
+ { SVGA3D_G16R16 , "G16R16" },
+ { SVGA3D_A16B16G16R16 , "A16B16G16R16" },
+ { SVGA3D_UYVY , "UYVY" },
+ { SVGA3D_YUY2 , "YUY2" },
+ { SVGA3D_NV12 , "NV12" },
+ { SVGA3D_FORMAT_DEAD2 , "FORMAT_DEAD2" },
+ { SVGA3D_R32G32B32A32_TYPELESS , "R32G32B32A32_TYPELESS" },
+ { SVGA3D_R32G32B32A32_UINT , "R32G32B32A32_UINT" },
+ { SVGA3D_R32G32B32A32_SINT , "R32G32B32A32_SINT" },
+ { SVGA3D_R32G32B32_TYPELESS , "R32G32B32_TYPELESS" },
+ { SVGA3D_R32G32B32_FLOAT , "R32G32B32_FLOAT" },
+ { SVGA3D_R32G32B32_UINT , "R32G32B32_UINT" },
+ { SVGA3D_R32G32B32_SINT , "R32G32B32_SINT" },
+ { SVGA3D_R16G16B16A16_TYPELESS , "R16G16B16A16_TYPELESS" },
+ { SVGA3D_R16G16B16A16_UINT , "R16G16B16A16_UINT" },
+ { SVGA3D_R16G16B16A16_SNORM , "R16G16B16A16_SNORM" },
+ { SVGA3D_R16G16B16A16_SINT , "R16G16B16A16_SINT" },
+ { SVGA3D_R32G32_TYPELESS , "R32G32_TYPELESS" },
+ { SVGA3D_R32G32_UINT , "R32G32_UINT" },
+ { SVGA3D_R32G32_SINT , "R32G32_SINT" },
+ { SVGA3D_R32G8X24_TYPELESS , "R32G8X24_TYPELESS" },
+ { SVGA3D_D32_FLOAT_S8X24_UINT , "D32_FLOAT_S8X24_UINT" },
+ { SVGA3D_R32_FLOAT_X8X24 , "R32_FLOAT_X8X24" },
+ { SVGA3D_X32_G8X24_UINT , "X32_G8X24_UINT" },
+ { SVGA3D_R10G10B10A2_TYPELESS , "R10G10B10A2_TYPELESS" },
+ { SVGA3D_R10G10B10A2_UINT , "R10G10B10A2_UINT" },
+ { SVGA3D_R11G11B10_FLOAT , "R11G11B10_FLOAT" },
+ { SVGA3D_R8G8B8A8_TYPELESS , "R8G8B8A8_TYPELESS" },
+ { SVGA3D_R8G8B8A8_UNORM , "R8G8B8A8_UNORM" },
+ { SVGA3D_R8G8B8A8_UNORM_SRGB , "R8G8B8A8_UNORM_SRGB" },
+ { SVGA3D_R8G8B8A8_UINT , "R8G8B8A8_UINT" },
+ { SVGA3D_R8G8B8A8_SINT , "R8G8B8A8_SINT" },
+ { SVGA3D_R16G16_TYPELESS , "R16G16_TYPELESS" },
+ { SVGA3D_R16G16_UINT , "R16G16_UINT" },
+ { SVGA3D_R16G16_SINT , "R16G16_SINT" },
+ { SVGA3D_R32_TYPELESS , "R32_TYPELESS" },
+ { SVGA3D_D32_FLOAT , "D32_FLOAT" },
+ { SVGA3D_R32_UINT , "R32_UINT" },
+ { SVGA3D_R32_SINT , "R32_SINT" },
+ { SVGA3D_R24G8_TYPELESS , "R24G8_TYPELESS" },
+ { SVGA3D_D24_UNORM_S8_UINT , "D24_UNORM_S8_UINT" },
+ { SVGA3D_R24_UNORM_X8 , "R24_UNORM_X8" },
+ { SVGA3D_X24_G8_UINT , "X24_G8_UINT" },
+ { SVGA3D_R8G8_TYPELESS , "R8G8_TYPELESS" },
+ { SVGA3D_R8G8_UNORM , "R8G8_UNORM" },
+ { SVGA3D_R8G8_UINT , "R8G8_UINT" },
+ { SVGA3D_R8G8_SINT , "R8G8_SINT" },
+ { SVGA3D_R16_TYPELESS , "R16_TYPELESS" },
+ { SVGA3D_R16_UNORM , "R16_UNORM" },
+ { SVGA3D_R16_UINT , "R16_UINT" },
+ { SVGA3D_R16_SNORM , "R16_SNORM" },
+ { SVGA3D_R16_SINT , "R16_SINT" },
+ { SVGA3D_R8_TYPELESS , "R8_TYPELESS" },
+ { SVGA3D_R8_UNORM , "R8_UNORM" },
+ { SVGA3D_R8_UINT , "R8_UINT" },
+ { SVGA3D_R8_SNORM , "R8_SNORM" },
+ { SVGA3D_R8_SINT , "R8_SINT" },
+ { SVGA3D_P8 , "P8" },
+ { SVGA3D_R9G9B9E5_SHAREDEXP , "R9G9B9E5_SHAREDEXP" },
+ { SVGA3D_R8G8_B8G8_UNORM , "R8G8_B8G8_UNORM" },
+ { SVGA3D_G8R8_G8B8_UNORM , "G8R8_G8B8_UNORM" },
+ { SVGA3D_BC1_TYPELESS , "BC1_TYPELESS" },
+ { SVGA3D_BC1_UNORM_SRGB , "BC1_UNORM_SRGB" },
+ { SVGA3D_BC2_TYPELESS , "BC2_TYPELESS" },
+ { SVGA3D_BC2_UNORM_SRGB , "BC2_UNORM_SRGB" },
+ { SVGA3D_BC3_TYPELESS , "BC3_TYPELESS" },
+ { SVGA3D_BC3_UNORM_SRGB , "BC3_UNORM_SRGB" },
+ { SVGA3D_BC4_TYPELESS , "BC4_TYPELESS" },
+ { SVGA3D_ATI1 , "ATI1" },
+ { SVGA3D_BC4_SNORM , "BC4_SNORM" },
+ { SVGA3D_BC5_TYPELESS , "BC5_TYPELESS" },
+ { SVGA3D_ATI2 , "ATI2" },
+ { SVGA3D_BC5_SNORM , "BC5_SNORM" },
+ { SVGA3D_R10G10B10_XR_BIAS_A2_UNORM , "R10G10B10_XR_BIAS_A2_UNORM" },
+ { SVGA3D_B8G8R8A8_TYPELESS , "B8G8R8A8_TYPELESS" },
+ { SVGA3D_B8G8R8A8_UNORM_SRGB , "B8G8R8A8_UNORM_SRGB" },
+ { SVGA3D_B8G8R8X8_TYPELESS , "B8G8R8X8_TYPELESS" },
+ { SVGA3D_B8G8R8X8_UNORM_SRGB , "B8G8R8X8_UNORM_SRGB" },
+ { SVGA3D_Z_DF16 , "Z_DF16" },
+ { SVGA3D_Z_DF24 , "Z_DF24" },
+ { SVGA3D_Z_D24S8_INT , "Z_D24S8_INT" },
+ { SVGA3D_YV12 , "YV12" },
+ { SVGA3D_R32G32B32A32_FLOAT , "R32G32B32A32_FLOAT" },
+ { SVGA3D_R16G16B16A16_FLOAT , "R16G16B16A16_FLOAT" },
+ { SVGA3D_R16G16B16A16_UNORM , "R16G16B16A16_UNORM" },
+ { SVGA3D_R32G32_FLOAT , "R32G32_FLOAT" },
+ { SVGA3D_R10G10B10A2_UNORM , "R10G10B10A2_UNORM" },
+ { SVGA3D_R8G8B8A8_SNORM , "R8G8B8A8_SNORM" },
+ { SVGA3D_R16G16_FLOAT , "R16G16_FLOAT" },
+ { SVGA3D_R16G16_UNORM , "R16G16_UNORM" },
+ { SVGA3D_R16G16_SNORM , "R16G16_SNORM" },
+ { SVGA3D_R32_FLOAT , "R32_FLOAT" },
+ { SVGA3D_R8G8_SNORM , "R8G8_SNORM" },
+ { SVGA3D_R16_FLOAT , "R16_FLOAT" },
+ { SVGA3D_D16_UNORM , "D16_UNORM" },
+ { SVGA3D_A8_UNORM , "A8_UNORM" },
+ { SVGA3D_BC1_UNORM , "BC1_UNORM" },
+ { SVGA3D_BC2_UNORM , "BC2_UNORM" },
+ { SVGA3D_BC3_UNORM , "BC3_UNORM" },
+ { SVGA3D_B5G6R5_UNORM , "B5G6R5_UNORM" },
+ { SVGA3D_B5G5R5A1_UNORM , "B5G5R5A1_UNORM" },
+ { SVGA3D_B8G8R8A8_UNORM , "B8G8R8A8_UNORM" },
+ { SVGA3D_B8G8R8X8_UNORM , "B8G8R8X8_UNORM" },
+ { SVGA3D_BC4_UNORM , "BC4_UNORM" },
+ { SVGA3D_BC5_UNORM , "BC5_UNORM" },
+ { SVGA3D_B4G4R4A4_UNORM , "B4G4R4A4_UNORM" },
+ { SVGA3D_BC6H_TYPELESS , "BC6H_TYPELESS" },
+ { SVGA3D_BC6H_UF16 , "BC6H_UF16" },
+ { SVGA3D_BC6H_SF16 , "BC6H_SF16" },
+ { SVGA3D_BC7_TYPELESS , "BC7_TYPELESS" },
+ { SVGA3D_BC7_UNORM , "BC7_UNORM" },
+ { SVGA3D_BC7_UNORM_SRGB , "BC7_UNORM_SRGB" },
+ { SVGA3D_AYUV , "AYUV" },
+};
+
+
+static const char *
+svga_format_name(SVGA3dSurfaceFormat format)
+{
+ if (format < RT_ELEMENTS(g_formats))
+ return g_formats[format].pszName;
+ return "???";
+}
+
+
+static const char *
+shader_name(unsigned type)
+{
+ switch (type) {
+ case SVGA3D_SHADERTYPE_VS:
+ return "SVGA3D_SHADERTYPE_VS";
+ case SVGA3D_SHADERTYPE_PS:
+ return "SVGA3D_SHADERTYPE_PS";
+ case SVGA3D_SHADERTYPE_GS:
+ return "SVGA3D_SHADERTYPE_GS";
+ case SVGA3D_SHADERTYPE_HS:
+ return "SVGA3D_SHADERTYPE_HS";
+ case SVGA3D_SHADERTYPE_DS:
+ return "SVGA3D_SHADERTYPE_DS";
+ case SVGA3D_SHADERTYPE_CS:
+ return "SVGA3D_SHADERTYPE_CS";
+ default:
+ return "unknown shader type!";
+ }
+}
+
+
+static void
+dump_SVGA3dVertexDecl(const SVGA3dVertexDecl *cmd)
+{
+ switch((*cmd).identity.type) {
+ case SVGA3D_DECLTYPE_FLOAT1:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_FLOAT1\n");
+ break;
+ case SVGA3D_DECLTYPE_FLOAT2:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_FLOAT2\n");
+ break;
+ case SVGA3D_DECLTYPE_FLOAT3:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_FLOAT3\n");
+ break;
+ case SVGA3D_DECLTYPE_FLOAT4:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_FLOAT4\n");
+ break;
+ case SVGA3D_DECLTYPE_D3DCOLOR:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_D3DCOLOR\n");
+ break;
+ case SVGA3D_DECLTYPE_UBYTE4:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_UBYTE4\n");
+ break;
+ case SVGA3D_DECLTYPE_SHORT2:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_SHORT2\n");
+ break;
+ case SVGA3D_DECLTYPE_SHORT4:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_SHORT4\n");
+ break;
+ case SVGA3D_DECLTYPE_UBYTE4N:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_UBYTE4N\n");
+ break;
+ case SVGA3D_DECLTYPE_SHORT2N:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_SHORT2N\n");
+ break;
+ case SVGA3D_DECLTYPE_SHORT4N:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_SHORT4N\n");
+ break;
+ case SVGA3D_DECLTYPE_USHORT2N:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_USHORT2N\n");
+ break;
+ case SVGA3D_DECLTYPE_USHORT4N:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_USHORT4N\n");
+ break;
+ case SVGA3D_DECLTYPE_UDEC3:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_UDEC3\n");
+ break;
+ case SVGA3D_DECLTYPE_DEC3N:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_DEC3N\n");
+ break;
+ case SVGA3D_DECLTYPE_FLOAT16_2:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_FLOAT16_2\n");
+ break;
+ case SVGA3D_DECLTYPE_FLOAT16_4:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_FLOAT16_4\n");
+ break;
+ case SVGA3D_DECLTYPE_MAX:
+ _debug_printf("\t\t.identity.type = SVGA3D_DECLTYPE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.identity.type = %i\n", (*cmd).identity.type);
+ break;
+ }
+ switch((*cmd).identity.method) {
+ case SVGA3D_DECLMETHOD_DEFAULT:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_DEFAULT\n");
+ break;
+ case SVGA3D_DECLMETHOD_PARTIALU:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_PARTIALU\n");
+ break;
+ case SVGA3D_DECLMETHOD_PARTIALV:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_PARTIALV\n");
+ break;
+ case SVGA3D_DECLMETHOD_CROSSUV:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_CROSSUV\n");
+ break;
+ case SVGA3D_DECLMETHOD_UV:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_UV\n");
+ break;
+ case SVGA3D_DECLMETHOD_LOOKUP:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_LOOKUP\n");
+ break;
+ case SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED:
+ _debug_printf("\t\t.identity.method = SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED\n");
+ break;
+ default:
+ _debug_printf("\t\t.identity.method = %i\n", (*cmd).identity.method);
+ break;
+ }
+ switch((*cmd).identity.usage) {
+ case SVGA3D_DECLUSAGE_POSITION:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_POSITION\n");
+ break;
+ case SVGA3D_DECLUSAGE_BLENDWEIGHT:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_BLENDWEIGHT\n");
+ break;
+ case SVGA3D_DECLUSAGE_BLENDINDICES:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_BLENDINDICES\n");
+ break;
+ case SVGA3D_DECLUSAGE_NORMAL:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_NORMAL\n");
+ break;
+ case SVGA3D_DECLUSAGE_PSIZE:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_PSIZE\n");
+ break;
+ case SVGA3D_DECLUSAGE_TEXCOORD:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_TEXCOORD\n");
+ break;
+ case SVGA3D_DECLUSAGE_TANGENT:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_TANGENT\n");
+ break;
+ case SVGA3D_DECLUSAGE_BINORMAL:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_BINORMAL\n");
+ break;
+ case SVGA3D_DECLUSAGE_TESSFACTOR:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_TESSFACTOR\n");
+ break;
+ case SVGA3D_DECLUSAGE_POSITIONT:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_POSITIONT\n");
+ break;
+ case SVGA3D_DECLUSAGE_COLOR:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_COLOR\n");
+ break;
+ case SVGA3D_DECLUSAGE_FOG:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_FOG\n");
+ break;
+ case SVGA3D_DECLUSAGE_DEPTH:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_DEPTH\n");
+ break;
+ case SVGA3D_DECLUSAGE_SAMPLE:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_SAMPLE\n");
+ break;
+ case SVGA3D_DECLUSAGE_MAX:
+ _debug_printf("\t\t.identity.usage = SVGA3D_DECLUSAGE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.identity.usage = %i\n", (*cmd).identity.usage);
+ break;
+ }
+ _debug_printf("\t\t.identity.usageIndex = %u\n", (*cmd).identity.usageIndex);
+ _debug_printf("\t\t.array.surfaceId = %u\n", (*cmd).array.surfaceId);
+ _debug_printf("\t\t.array.offset = %u\n", (*cmd).array.offset);
+ _debug_printf("\t\t.array.stride = %u\n", (*cmd).array.stride);
+ _debug_printf("\t\t.rangeHint.first = %u\n", (*cmd).rangeHint.first);
+ _debug_printf("\t\t.rangeHint.last = %u\n", (*cmd).rangeHint.last);
+}
+
+static void
+dump_SVGA3dTextureState(const SVGA3dTextureState *cmd)
+{
+ _debug_printf("\t\t.stage = %u\n", (*cmd).stage);
+ switch((*cmd).name) {
+ case SVGA3D_TS_INVALID:
+ _debug_printf("\t\t.name = SVGA3D_TS_INVALID\n");
+ break;
+ case SVGA3D_TS_BIND_TEXTURE:
+ _debug_printf("\t\t.name = SVGA3D_TS_BIND_TEXTURE\n");
+ break;
+ case SVGA3D_TS_COLOROP:
+ _debug_printf("\t\t.name = SVGA3D_TS_COLOROP\n");
+ break;
+ case SVGA3D_TS_COLORARG1:
+ _debug_printf("\t\t.name = SVGA3D_TS_COLORARG1\n");
+ break;
+ case SVGA3D_TS_COLORARG2:
+ _debug_printf("\t\t.name = SVGA3D_TS_COLORARG2\n");
+ break;
+ case SVGA3D_TS_ALPHAOP:
+ _debug_printf("\t\t.name = SVGA3D_TS_ALPHAOP\n");
+ break;
+ case SVGA3D_TS_ALPHAARG1:
+ _debug_printf("\t\t.name = SVGA3D_TS_ALPHAARG1\n");
+ break;
+ case SVGA3D_TS_ALPHAARG2:
+ _debug_printf("\t\t.name = SVGA3D_TS_ALPHAARG2\n");
+ break;
+ case SVGA3D_TS_ADDRESSU:
+ _debug_printf("\t\t.name = SVGA3D_TS_ADDRESSU\n");
+ break;
+ case SVGA3D_TS_ADDRESSV:
+ _debug_printf("\t\t.name = SVGA3D_TS_ADDRESSV\n");
+ break;
+ case SVGA3D_TS_MIPFILTER:
+ _debug_printf("\t\t.name = SVGA3D_TS_MIPFILTER\n");
+ break;
+ case SVGA3D_TS_MAGFILTER:
+ _debug_printf("\t\t.name = SVGA3D_TS_MAGFILTER\n");
+ break;
+ case SVGA3D_TS_MINFILTER:
+ _debug_printf("\t\t.name = SVGA3D_TS_MINFILTER\n");
+ break;
+ case SVGA3D_TS_BORDERCOLOR:
+ _debug_printf("\t\t.name = SVGA3D_TS_BORDERCOLOR\n");
+ break;
+ case SVGA3D_TS_TEXCOORDINDEX:
+ _debug_printf("\t\t.name = SVGA3D_TS_TEXCOORDINDEX\n");
+ break;
+ case SVGA3D_TS_TEXTURETRANSFORMFLAGS:
+ _debug_printf("\t\t.name = SVGA3D_TS_TEXTURETRANSFORMFLAGS\n");
+ break;
+ case SVGA3D_TS_TEXCOORDGEN:
+ _debug_printf("\t\t.name = SVGA3D_TS_TEXCOORDGEN\n");
+ break;
+ case SVGA3D_TS_BUMPENVMAT00:
+ _debug_printf("\t\t.name = SVGA3D_TS_BUMPENVMAT00\n");
+ break;
+ case SVGA3D_TS_BUMPENVMAT01:
+ _debug_printf("\t\t.name = SVGA3D_TS_BUMPENVMAT01\n");
+ break;
+ case SVGA3D_TS_BUMPENVMAT10:
+ _debug_printf("\t\t.name = SVGA3D_TS_BUMPENVMAT10\n");
+ break;
+ case SVGA3D_TS_BUMPENVMAT11:
+ _debug_printf("\t\t.name = SVGA3D_TS_BUMPENVMAT11\n");
+ break;
+ case SVGA3D_TS_TEXTURE_MIPMAP_LEVEL:
+ _debug_printf("\t\t.name = SVGA3D_TS_TEXTURE_MIPMAP_LEVEL\n");
+ break;
+ case SVGA3D_TS_TEXTURE_LOD_BIAS:
+ _debug_printf("\t\t.name = SVGA3D_TS_TEXTURE_LOD_BIAS\n");
+ break;
+ case SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL:
+ _debug_printf("\t\t.name = SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL\n");
+ break;
+ case SVGA3D_TS_ADDRESSW:
+ _debug_printf("\t\t.name = SVGA3D_TS_ADDRESSW\n");
+ break;
+ case SVGA3D_TS_GAMMA:
+ _debug_printf("\t\t.name = SVGA3D_TS_GAMMA\n");
+ break;
+ case SVGA3D_TS_BUMPENVLSCALE:
+ _debug_printf("\t\t.name = SVGA3D_TS_BUMPENVLSCALE\n");
+ break;
+ case SVGA3D_TS_BUMPENVLOFFSET:
+ _debug_printf("\t\t.name = SVGA3D_TS_BUMPENVLOFFSET\n");
+ break;
+ case SVGA3D_TS_COLORARG0:
+ _debug_printf("\t\t.name = SVGA3D_TS_COLORARG0\n");
+ break;
+ case SVGA3D_TS_ALPHAARG0:
+ _debug_printf("\t\t.name = SVGA3D_TS_ALPHAARG0\n");
+ break;
+ case SVGA3D_TS_MAX:
+ _debug_printf("\t\t.name = SVGA3D_TS_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.name = %i\n", (*cmd).name);
+ break;
+ }
+ _debug_printf("\t\t.value = %u\n", (*cmd).value);
+ _debug_printf("\t\t.floatValue = %R[float]\n", (*cmd).floatValue);
+}
+
+static void
+dump_SVGA3dViewport(const SVGA3dViewport *cmd)
+{
+ _debug_printf("\t\t.x = %R[float]\n", (*cmd).x);
+ _debug_printf("\t\t.y = %R[float]\n", (*cmd).y);
+ _debug_printf("\t\t.width = %R[float]\n", (*cmd).width);
+ _debug_printf("\t\t.height = %R[float]\n", (*cmd).height);
+ _debug_printf("\t\t.minDepth = %R[float]\n", (*cmd).minDepth);
+ _debug_printf("\t\t.maxDepth = %R[float]\n", (*cmd).maxDepth);
+}
+
+static void
+dump_SVGA3dSamplerId(const SVGA3dSamplerId *cmd)
+{
+ _debug_printf("\t\t.id = %u\n", *cmd);
+}
+
+static void
+dump_SVGA3dSoTarget(const SVGA3dSoTarget *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", (*cmd).sid);
+ _debug_printf("\t\t.offset = %u\n", (*cmd).offset);
+}
+
+static void
+dump_SVGA3dInputElementDesc(const SVGA3dInputElementDesc *cmd)
+{
+ _debug_printf("\t\t.inputSlot = %u\n", (*cmd).inputSlot);
+ _debug_printf("\t\t.alignedByteOffset = %u\n", (*cmd).alignedByteOffset);
+ _debug_printf("\t\t.format = %s\n", svga_format_name((*cmd).format));
+ _debug_printf("\t\t.inputSlotClass = %u\n", (*cmd).inputSlotClass);
+ _debug_printf("\t\t.instanceDataStepRate = %u\n", (*cmd).instanceDataStepRate);
+ _debug_printf("\t\t.inputRegister = %u\n", (*cmd).inputRegister);
+}
+
+static void
+dump_SVGA3dVertexBuffer(const SVGA3dVertexBuffer *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", (*cmd).sid);
+ _debug_printf("\t\t.stride = %u\n", (*cmd).stride);
+ _debug_printf("\t\t.offset = %u\n", (*cmd).offset);
+}
+
+static void
+dump_SVGA3dCopyBox(const SVGA3dCopyBox *cmd)
+{
+ _debug_printf("\t\t.x = %u\n", (*cmd).x);
+ _debug_printf("\t\t.y = %u\n", (*cmd).y);
+ _debug_printf("\t\t.z = %u\n", (*cmd).z);
+ _debug_printf("\t\t.w = %u\n", (*cmd).w);
+ _debug_printf("\t\t.h = %u\n", (*cmd).h);
+ _debug_printf("\t\t.d = %u\n", (*cmd).d);
+ _debug_printf("\t\t.srcx = %u\n", (*cmd).srcx);
+ _debug_printf("\t\t.srcy = %u\n", (*cmd).srcy);
+ _debug_printf("\t\t.srcz = %u\n", (*cmd).srcz);
+}
+
+static void
+dump_SVGA3dShaderResourceViewId(const SVGA3dShaderResourceViewId *id)
+{
+ _debug_printf("\t\t.id = %u\n", *id);
+}
+
+static void
+dump_SVGA3dCmdSetClipPlane(const SVGA3dCmdSetClipPlane *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.index = %u\n", (*cmd).index);
+ _debug_printf("\t\t.plane[0] = %R[float]\n", (*cmd).plane[0]);
+ _debug_printf("\t\t.plane[1] = %R[float]\n", (*cmd).plane[1]);
+ _debug_printf("\t\t.plane[2] = %R[float]\n", (*cmd).plane[2]);
+ _debug_printf("\t\t.plane[3] = %R[float]\n", (*cmd).plane[3]);
+}
+
+static void
+dump_SVGA3dCmdWaitForQuery(const SVGA3dCmdWaitForQuery *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).type) {
+ case SVGA3D_QUERYTYPE_OCCLUSION:
+ _debug_printf("\t\t.type = SVGA3D_QUERYTYPE_OCCLUSION\n");
+ break;
+ case SVGA3D_QUERYTYPE_MAX:
+ _debug_printf("\t\t.type = SVGA3D_QUERYTYPE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = %i\n", (*cmd).type);
+ break;
+ }
+ _debug_printf("\t\t.guestResult.gmrId = %u\n", (*cmd).guestResult.gmrId);
+ _debug_printf("\t\t.guestResult.offset = %u\n", (*cmd).guestResult.offset);
+}
+
+static void
+dump_SVGA3dCmdSetRenderTarget(const SVGA3dCmdSetRenderTarget *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).type) {
+ case SVGA3D_RT_DEPTH:
+ _debug_printf("\t\t.type = SVGA3D_RT_DEPTH\n");
+ break;
+ case SVGA3D_RT_STENCIL:
+ _debug_printf("\t\t.type = SVGA3D_RT_STENCIL\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = SVGA3D_RT_COLOR%u\n", (*cmd).type - SVGA3D_RT_COLOR0);
+ break;
+ }
+ _debug_printf("\t\t.target.sid = %u\n", (*cmd).target.sid);
+ _debug_printf("\t\t.target.face = %u\n", (*cmd).target.face);
+ _debug_printf("\t\t.target.mipmap = %u\n", (*cmd).target.mipmap);
+}
+
+static void
+dump_SVGA3dCmdSetTextureState(const SVGA3dCmdSetTextureState *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+}
+
+static void
+dump_SVGA3dCmdSurfaceCopy(const SVGA3dCmdSurfaceCopy *cmd)
+{
+ _debug_printf("\t\t.src.sid = %u\n", (*cmd).src.sid);
+ _debug_printf("\t\t.src.face = %u\n", (*cmd).src.face);
+ _debug_printf("\t\t.src.mipmap = %u\n", (*cmd).src.mipmap);
+ _debug_printf("\t\t.dest.sid = %u\n", (*cmd).dest.sid);
+ _debug_printf("\t\t.dest.face = %u\n", (*cmd).dest.face);
+ _debug_printf("\t\t.dest.mipmap = %u\n", (*cmd).dest.mipmap);
+}
+
+static void
+dump_SVGA3dCmdSetMaterial(const SVGA3dCmdSetMaterial *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).face) {
+ case SVGA3D_FACE_INVALID:
+ _debug_printf("\t\t.face = SVGA3D_FACE_INVALID\n");
+ break;
+ case SVGA3D_FACE_NONE:
+ _debug_printf("\t\t.face = SVGA3D_FACE_NONE\n");
+ break;
+ case SVGA3D_FACE_FRONT:
+ _debug_printf("\t\t.face = SVGA3D_FACE_FRONT\n");
+ break;
+ case SVGA3D_FACE_BACK:
+ _debug_printf("\t\t.face = SVGA3D_FACE_BACK\n");
+ break;
+ case SVGA3D_FACE_FRONT_BACK:
+ _debug_printf("\t\t.face = SVGA3D_FACE_FRONT_BACK\n");
+ break;
+ case SVGA3D_FACE_MAX:
+ _debug_printf("\t\t.face = SVGA3D_FACE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.face = %i\n", (*cmd).face);
+ break;
+ }
+ _debug_printf("\t\t.material.diffuse[0] = %R[float]\n", (*cmd).material.diffuse[0]);
+ _debug_printf("\t\t.material.diffuse[1] = %R[float]\n", (*cmd).material.diffuse[1]);
+ _debug_printf("\t\t.material.diffuse[2] = %R[float]\n", (*cmd).material.diffuse[2]);
+ _debug_printf("\t\t.material.diffuse[3] = %R[float]\n", (*cmd).material.diffuse[3]);
+ _debug_printf("\t\t.material.ambient[0] = %R[float]\n", (*cmd).material.ambient[0]);
+ _debug_printf("\t\t.material.ambient[1] = %R[float]\n", (*cmd).material.ambient[1]);
+ _debug_printf("\t\t.material.ambient[2] = %R[float]\n", (*cmd).material.ambient[2]);
+ _debug_printf("\t\t.material.ambient[3] = %R[float]\n", (*cmd).material.ambient[3]);
+ _debug_printf("\t\t.material.specular[0] = %R[float]\n", (*cmd).material.specular[0]);
+ _debug_printf("\t\t.material.specular[1] = %R[float]\n", (*cmd).material.specular[1]);
+ _debug_printf("\t\t.material.specular[2] = %R[float]\n", (*cmd).material.specular[2]);
+ _debug_printf("\t\t.material.specular[3] = %R[float]\n", (*cmd).material.specular[3]);
+ _debug_printf("\t\t.material.emissive[0] = %R[float]\n", (*cmd).material.emissive[0]);
+ _debug_printf("\t\t.material.emissive[1] = %R[float]\n", (*cmd).material.emissive[1]);
+ _debug_printf("\t\t.material.emissive[2] = %R[float]\n", (*cmd).material.emissive[2]);
+ _debug_printf("\t\t.material.emissive[3] = %R[float]\n", (*cmd).material.emissive[3]);
+ _debug_printf("\t\t.material.shininess = %R[float]\n", (*cmd).material.shininess);
+}
+
+static void
+dump_SVGA3dCmdSetLightData(const SVGA3dCmdSetLightData *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.index = %u\n", (*cmd).index);
+ switch((*cmd).data.type) {
+ case SVGA3D_LIGHTTYPE_INVALID:
+ _debug_printf("\t\t.data.type = SVGA3D_LIGHTTYPE_INVALID\n");
+ break;
+ case SVGA3D_LIGHTTYPE_POINT:
+ _debug_printf("\t\t.data.type = SVGA3D_LIGHTTYPE_POINT\n");
+ break;
+ case SVGA3D_LIGHTTYPE_SPOT1:
+ _debug_printf("\t\t.data.type = SVGA3D_LIGHTTYPE_SPOT1\n");
+ break;
+ case SVGA3D_LIGHTTYPE_SPOT2:
+ _debug_printf("\t\t.data.type = SVGA3D_LIGHTTYPE_SPOT2\n");
+ break;
+ case SVGA3D_LIGHTTYPE_DIRECTIONAL:
+ _debug_printf("\t\t.data.type = SVGA3D_LIGHTTYPE_DIRECTIONAL\n");
+ break;
+ case SVGA3D_LIGHTTYPE_MAX:
+ _debug_printf("\t\t.data.type = SVGA3D_LIGHTTYPE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.data.type = %i\n", (*cmd).data.type);
+ break;
+ }
+ _debug_printf("\t\t.data.inWorldSpace = %u\n", (*cmd).data.inWorldSpace);
+ _debug_printf("\t\t.data.diffuse[0] = %R[float]\n", (*cmd).data.diffuse[0]);
+ _debug_printf("\t\t.data.diffuse[1] = %R[float]\n", (*cmd).data.diffuse[1]);
+ _debug_printf("\t\t.data.diffuse[2] = %R[float]\n", (*cmd).data.diffuse[2]);
+ _debug_printf("\t\t.data.diffuse[3] = %R[float]\n", (*cmd).data.diffuse[3]);
+ _debug_printf("\t\t.data.specular[0] = %R[float]\n", (*cmd).data.specular[0]);
+ _debug_printf("\t\t.data.specular[1] = %R[float]\n", (*cmd).data.specular[1]);
+ _debug_printf("\t\t.data.specular[2] = %R[float]\n", (*cmd).data.specular[2]);
+ _debug_printf("\t\t.data.specular[3] = %R[float]\n", (*cmd).data.specular[3]);
+ _debug_printf("\t\t.data.ambient[0] = %R[float]\n", (*cmd).data.ambient[0]);
+ _debug_printf("\t\t.data.ambient[1] = %R[float]\n", (*cmd).data.ambient[1]);
+ _debug_printf("\t\t.data.ambient[2] = %R[float]\n", (*cmd).data.ambient[2]);
+ _debug_printf("\t\t.data.ambient[3] = %R[float]\n", (*cmd).data.ambient[3]);
+ _debug_printf("\t\t.data.position[0] = %R[float]\n", (*cmd).data.position[0]);
+ _debug_printf("\t\t.data.position[1] = %R[float]\n", (*cmd).data.position[1]);
+ _debug_printf("\t\t.data.position[2] = %R[float]\n", (*cmd).data.position[2]);
+ _debug_printf("\t\t.data.position[3] = %R[float]\n", (*cmd).data.position[3]);
+ _debug_printf("\t\t.data.direction[0] = %R[float]\n", (*cmd).data.direction[0]);
+ _debug_printf("\t\t.data.direction[1] = %R[float]\n", (*cmd).data.direction[1]);
+ _debug_printf("\t\t.data.direction[2] = %R[float]\n", (*cmd).data.direction[2]);
+ _debug_printf("\t\t.data.direction[3] = %R[float]\n", (*cmd).data.direction[3]);
+ _debug_printf("\t\t.data.range = %R[float]\n", (*cmd).data.range);
+ _debug_printf("\t\t.data.falloff = %R[float]\n", (*cmd).data.falloff);
+ _debug_printf("\t\t.data.attenuation0 = %R[float]\n", (*cmd).data.attenuation0);
+ _debug_printf("\t\t.data.attenuation1 = %R[float]\n", (*cmd).data.attenuation1);
+ _debug_printf("\t\t.data.attenuation2 = %R[float]\n", (*cmd).data.attenuation2);
+ _debug_printf("\t\t.data.theta = %R[float]\n", (*cmd).data.theta);
+ _debug_printf("\t\t.data.phi = %R[float]\n", (*cmd).data.phi);
+}
+
+static void
+dump_SVGA3dCmdSetViewport(const SVGA3dCmdSetViewport *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.rect.x = %u\n", (*cmd).rect.x);
+ _debug_printf("\t\t.rect.y = %u\n", (*cmd).rect.y);
+ _debug_printf("\t\t.rect.w = %u\n", (*cmd).rect.w);
+ _debug_printf("\t\t.rect.h = %u\n", (*cmd).rect.h);
+}
+
+static void
+dump_SVGA3dCmdSetScissorRect(const SVGA3dCmdSetScissorRect *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.rect.x = %u\n", (*cmd).rect.x);
+ _debug_printf("\t\t.rect.y = %u\n", (*cmd).rect.y);
+ _debug_printf("\t\t.rect.w = %u\n", (*cmd).rect.w);
+ _debug_printf("\t\t.rect.h = %u\n", (*cmd).rect.h);
+}
+
+static void
+dump_SVGA3dCopyRect(const SVGA3dCopyRect *cmd)
+{
+ _debug_printf("\t\t.x = %u\n", (*cmd).x);
+ _debug_printf("\t\t.y = %u\n", (*cmd).y);
+ _debug_printf("\t\t.w = %u\n", (*cmd).w);
+ _debug_printf("\t\t.h = %u\n", (*cmd).h);
+ _debug_printf("\t\t.srcx = %u\n", (*cmd).srcx);
+ _debug_printf("\t\t.srcy = %u\n", (*cmd).srcy);
+}
+
+static void
+dump_SVGA3dCmdSetShader(const SVGA3dCmdSetShader *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+ _debug_printf("\t\t.shid = %u\n", (*cmd).shid);
+}
+
+static void
+dump_SVGA3dCmdEndQuery(const SVGA3dCmdEndQuery *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).type) {
+ case SVGA3D_QUERYTYPE_OCCLUSION:
+ _debug_printf("\t\t.type = SVGA3D_QUERYTYPE_OCCLUSION\n");
+ break;
+ case SVGA3D_QUERYTYPE_MAX:
+ _debug_printf("\t\t.type = SVGA3D_QUERYTYPE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = %i\n", (*cmd).type);
+ break;
+ }
+ _debug_printf("\t\t.guestResult.gmrId = %u\n", (*cmd).guestResult.gmrId);
+ _debug_printf("\t\t.guestResult.offset = %u\n", (*cmd).guestResult.offset);
+}
+
+static void
+dump_SVGA3dSize(const SVGA3dSize *cmd)
+{
+ _debug_printf("\t\t.width = %u\n", (*cmd).width);
+ _debug_printf("\t\t.height = %u\n", (*cmd).height);
+ _debug_printf("\t\t.depth = %u\n", (*cmd).depth);
+}
+
+static void
+dump_SVGA3dCmdDestroySurface(const SVGA3dCmdDestroySurface *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", (*cmd).sid);
+}
+
+static void
+dump_SVGA3dCmdDefineContext(const SVGA3dCmdDefineContext *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+}
+
+static void
+dump_SVGA3dRect(const SVGA3dRect *cmd)
+{
+ _debug_printf("\t\t.x = %u\n", (*cmd).x);
+ _debug_printf("\t\t.y = %u\n", (*cmd).y);
+ _debug_printf("\t\t.w = %u\n", (*cmd).w);
+ _debug_printf("\t\t.h = %u\n", (*cmd).h);
+}
+
+static void
+dump_SVGA3dCmdBeginQuery(const SVGA3dCmdBeginQuery *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).type) {
+ case SVGA3D_QUERYTYPE_OCCLUSION:
+ _debug_printf("\t\t.type = SVGA3D_QUERYTYPE_OCCLUSION\n");
+ break;
+ case SVGA3D_QUERYTYPE_MAX:
+ _debug_printf("\t\t.type = SVGA3D_QUERYTYPE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = %i\n", (*cmd).type);
+ break;
+ }
+}
+
+static void
+dump_SVGA3dRenderState(const SVGA3dRenderState *cmd)
+{
+ switch((*cmd).state) {
+ case SVGA3D_RS_INVALID:
+ _debug_printf("\t\t.state = SVGA3D_RS_INVALID\n");
+ break;
+ case SVGA3D_RS_ZENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_ZENABLE\n");
+ break;
+ case SVGA3D_RS_ZWRITEENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_ZWRITEENABLE\n");
+ break;
+ case SVGA3D_RS_ALPHATESTENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_ALPHATESTENABLE\n");
+ break;
+ case SVGA3D_RS_DITHERENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_DITHERENABLE\n");
+ break;
+ case SVGA3D_RS_BLENDENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_BLENDENABLE\n");
+ break;
+ case SVGA3D_RS_FOGENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_FOGENABLE\n");
+ break;
+ case SVGA3D_RS_SPECULARENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_SPECULARENABLE\n");
+ break;
+ case SVGA3D_RS_STENCILENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILENABLE\n");
+ break;
+ case SVGA3D_RS_LIGHTINGENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_LIGHTINGENABLE\n");
+ break;
+ case SVGA3D_RS_NORMALIZENORMALS:
+ _debug_printf("\t\t.state = SVGA3D_RS_NORMALIZENORMALS\n");
+ break;
+ case SVGA3D_RS_POINTSPRITEENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSPRITEENABLE\n");
+ break;
+ case SVGA3D_RS_POINTSCALEENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSCALEENABLE\n");
+ break;
+ case SVGA3D_RS_STENCILREF:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILREF\n");
+ break;
+ case SVGA3D_RS_STENCILMASK:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILMASK\n");
+ break;
+ case SVGA3D_RS_STENCILWRITEMASK:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILWRITEMASK\n");
+ break;
+ case SVGA3D_RS_FOGSTART:
+ _debug_printf("\t\t.state = SVGA3D_RS_FOGSTART\n");
+ break;
+ case SVGA3D_RS_FOGEND:
+ _debug_printf("\t\t.state = SVGA3D_RS_FOGEND\n");
+ break;
+ case SVGA3D_RS_FOGDENSITY:
+ _debug_printf("\t\t.state = SVGA3D_RS_FOGDENSITY\n");
+ break;
+ case SVGA3D_RS_POINTSIZE:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSIZE\n");
+ break;
+ case SVGA3D_RS_POINTSIZEMIN:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSIZEMIN\n");
+ break;
+ case SVGA3D_RS_POINTSIZEMAX:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSIZEMAX\n");
+ break;
+ case SVGA3D_RS_POINTSCALE_A:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSCALE_A\n");
+ break;
+ case SVGA3D_RS_POINTSCALE_B:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSCALE_B\n");
+ break;
+ case SVGA3D_RS_POINTSCALE_C:
+ _debug_printf("\t\t.state = SVGA3D_RS_POINTSCALE_C\n");
+ break;
+ case SVGA3D_RS_FOGCOLOR:
+ _debug_printf("\t\t.state = SVGA3D_RS_FOGCOLOR\n");
+ break;
+ case SVGA3D_RS_AMBIENT:
+ _debug_printf("\t\t.state = SVGA3D_RS_AMBIENT\n");
+ break;
+ case SVGA3D_RS_CLIPPLANEENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_CLIPPLANEENABLE\n");
+ break;
+ case SVGA3D_RS_FOGMODE:
+ _debug_printf("\t\t.state = SVGA3D_RS_FOGMODE\n");
+ break;
+ case SVGA3D_RS_FILLMODE:
+ _debug_printf("\t\t.state = SVGA3D_RS_FILLMODE\n");
+ break;
+ case SVGA3D_RS_SHADEMODE:
+ _debug_printf("\t\t.state = SVGA3D_RS_SHADEMODE\n");
+ break;
+ case SVGA3D_RS_LINEPATTERN:
+ _debug_printf("\t\t.state = SVGA3D_RS_LINEPATTERN\n");
+ break;
+ case SVGA3D_RS_SRCBLEND:
+ _debug_printf("\t\t.state = SVGA3D_RS_SRCBLEND\n");
+ break;
+ case SVGA3D_RS_DSTBLEND:
+ _debug_printf("\t\t.state = SVGA3D_RS_DSTBLEND\n");
+ break;
+ case SVGA3D_RS_BLENDEQUATION:
+ _debug_printf("\t\t.state = SVGA3D_RS_BLENDEQUATION\n");
+ break;
+ case SVGA3D_RS_CULLMODE:
+ _debug_printf("\t\t.state = SVGA3D_RS_CULLMODE\n");
+ break;
+ case SVGA3D_RS_ZFUNC:
+ _debug_printf("\t\t.state = SVGA3D_RS_ZFUNC\n");
+ break;
+ case SVGA3D_RS_ALPHAFUNC:
+ _debug_printf("\t\t.state = SVGA3D_RS_ALPHAFUNC\n");
+ break;
+ case SVGA3D_RS_STENCILFUNC:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILFUNC\n");
+ break;
+ case SVGA3D_RS_STENCILFAIL:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILFAIL\n");
+ break;
+ case SVGA3D_RS_STENCILZFAIL:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILZFAIL\n");
+ break;
+ case SVGA3D_RS_STENCILPASS:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILPASS\n");
+ break;
+ case SVGA3D_RS_ALPHAREF:
+ _debug_printf("\t\t.state = SVGA3D_RS_ALPHAREF\n");
+ break;
+ case SVGA3D_RS_FRONTWINDING:
+ _debug_printf("\t\t.state = SVGA3D_RS_FRONTWINDING\n");
+ break;
+ case SVGA3D_RS_COORDINATETYPE:
+ _debug_printf("\t\t.state = SVGA3D_RS_COORDINATETYPE\n");
+ break;
+ case SVGA3D_RS_ZBIAS:
+ _debug_printf("\t\t.state = SVGA3D_RS_ZBIAS\n");
+ break;
+ case SVGA3D_RS_RANGEFOGENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_RANGEFOGENABLE\n");
+ break;
+ case SVGA3D_RS_COLORWRITEENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_COLORWRITEENABLE\n");
+ break;
+ case SVGA3D_RS_VERTEXMATERIALENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_VERTEXMATERIALENABLE\n");
+ break;
+ case SVGA3D_RS_DIFFUSEMATERIALSOURCE:
+ _debug_printf("\t\t.state = SVGA3D_RS_DIFFUSEMATERIALSOURCE\n");
+ break;
+ case SVGA3D_RS_SPECULARMATERIALSOURCE:
+ _debug_printf("\t\t.state = SVGA3D_RS_SPECULARMATERIALSOURCE\n");
+ break;
+ case SVGA3D_RS_AMBIENTMATERIALSOURCE:
+ _debug_printf("\t\t.state = SVGA3D_RS_AMBIENTMATERIALSOURCE\n");
+ break;
+ case SVGA3D_RS_EMISSIVEMATERIALSOURCE:
+ _debug_printf("\t\t.state = SVGA3D_RS_EMISSIVEMATERIALSOURCE\n");
+ break;
+ case SVGA3D_RS_TEXTUREFACTOR:
+ _debug_printf("\t\t.state = SVGA3D_RS_TEXTUREFACTOR\n");
+ break;
+ case SVGA3D_RS_LOCALVIEWER:
+ _debug_printf("\t\t.state = SVGA3D_RS_LOCALVIEWER\n");
+ break;
+ case SVGA3D_RS_SCISSORTESTENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_SCISSORTESTENABLE\n");
+ break;
+ case SVGA3D_RS_BLENDCOLOR:
+ _debug_printf("\t\t.state = SVGA3D_RS_BLENDCOLOR\n");
+ break;
+ case SVGA3D_RS_STENCILENABLE2SIDED:
+ _debug_printf("\t\t.state = SVGA3D_RS_STENCILENABLE2SIDED\n");
+ break;
+ case SVGA3D_RS_CCWSTENCILFUNC:
+ _debug_printf("\t\t.state = SVGA3D_RS_CCWSTENCILFUNC\n");
+ break;
+ case SVGA3D_RS_CCWSTENCILFAIL:
+ _debug_printf("\t\t.state = SVGA3D_RS_CCWSTENCILFAIL\n");
+ break;
+ case SVGA3D_RS_CCWSTENCILZFAIL:
+ _debug_printf("\t\t.state = SVGA3D_RS_CCWSTENCILZFAIL\n");
+ break;
+ case SVGA3D_RS_CCWSTENCILPASS:
+ _debug_printf("\t\t.state = SVGA3D_RS_CCWSTENCILPASS\n");
+ break;
+ case SVGA3D_RS_VERTEXBLEND:
+ _debug_printf("\t\t.state = SVGA3D_RS_VERTEXBLEND\n");
+ break;
+ case SVGA3D_RS_SLOPESCALEDEPTHBIAS:
+ _debug_printf("\t\t.state = SVGA3D_RS_SLOPESCALEDEPTHBIAS\n");
+ break;
+ case SVGA3D_RS_DEPTHBIAS:
+ _debug_printf("\t\t.state = SVGA3D_RS_DEPTHBIAS\n");
+ break;
+ case SVGA3D_RS_OUTPUTGAMMA:
+ _debug_printf("\t\t.state = SVGA3D_RS_OUTPUTGAMMA\n");
+ break;
+ case SVGA3D_RS_ZVISIBLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_ZVISIBLE\n");
+ break;
+ case SVGA3D_RS_LASTPIXEL:
+ _debug_printf("\t\t.state = SVGA3D_RS_LASTPIXEL\n");
+ break;
+ case SVGA3D_RS_CLIPPING:
+ _debug_printf("\t\t.state = SVGA3D_RS_CLIPPING\n");
+ break;
+ case SVGA3D_RS_WRAP0:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP0\n");
+ break;
+ case SVGA3D_RS_WRAP1:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP1\n");
+ break;
+ case SVGA3D_RS_WRAP2:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP2\n");
+ break;
+ case SVGA3D_RS_WRAP3:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP3\n");
+ break;
+ case SVGA3D_RS_WRAP4:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP4\n");
+ break;
+ case SVGA3D_RS_WRAP5:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP5\n");
+ break;
+ case SVGA3D_RS_WRAP6:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP6\n");
+ break;
+ case SVGA3D_RS_WRAP7:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP7\n");
+ break;
+ case SVGA3D_RS_WRAP8:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP8\n");
+ break;
+ case SVGA3D_RS_WRAP9:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP9\n");
+ break;
+ case SVGA3D_RS_WRAP10:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP10\n");
+ break;
+ case SVGA3D_RS_WRAP11:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP11\n");
+ break;
+ case SVGA3D_RS_WRAP12:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP12\n");
+ break;
+ case SVGA3D_RS_WRAP13:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP13\n");
+ break;
+ case SVGA3D_RS_WRAP14:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP14\n");
+ break;
+ case SVGA3D_RS_WRAP15:
+ _debug_printf("\t\t.state = SVGA3D_RS_WRAP15\n");
+ break;
+ case SVGA3D_RS_MULTISAMPLEANTIALIAS:
+ _debug_printf("\t\t.state = SVGA3D_RS_MULTISAMPLEANTIALIAS\n");
+ break;
+ case SVGA3D_RS_MULTISAMPLEMASK:
+ _debug_printf("\t\t.state = SVGA3D_RS_MULTISAMPLEMASK\n");
+ break;
+ case SVGA3D_RS_INDEXEDVERTEXBLENDENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_INDEXEDVERTEXBLENDENABLE\n");
+ break;
+ case SVGA3D_RS_TWEENFACTOR:
+ _debug_printf("\t\t.state = SVGA3D_RS_TWEENFACTOR\n");
+ break;
+ case SVGA3D_RS_ANTIALIASEDLINEENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_ANTIALIASEDLINEENABLE\n");
+ break;
+ case SVGA3D_RS_COLORWRITEENABLE1:
+ _debug_printf("\t\t.state = SVGA3D_RS_COLORWRITEENABLE1\n");
+ break;
+ case SVGA3D_RS_COLORWRITEENABLE2:
+ _debug_printf("\t\t.state = SVGA3D_RS_COLORWRITEENABLE2\n");
+ break;
+ case SVGA3D_RS_COLORWRITEENABLE3:
+ _debug_printf("\t\t.state = SVGA3D_RS_COLORWRITEENABLE3\n");
+ break;
+ case SVGA3D_RS_SEPARATEALPHABLENDENABLE:
+ _debug_printf("\t\t.state = SVGA3D_RS_SEPARATEALPHABLENDENABLE\n");
+ break;
+ case SVGA3D_RS_SRCBLENDALPHA:
+ _debug_printf("\t\t.state = SVGA3D_RS_SRCBLENDALPHA\n");
+ break;
+ case SVGA3D_RS_DSTBLENDALPHA:
+ _debug_printf("\t\t.state = SVGA3D_RS_DSTBLENDALPHA\n");
+ break;
+ case SVGA3D_RS_BLENDEQUATIONALPHA:
+ _debug_printf("\t\t.state = SVGA3D_RS_BLENDEQUATIONALPHA\n");
+ break;
+ case SVGA3D_RS_MAX:
+ _debug_printf("\t\t.state = SVGA3D_RS_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.state = %i\n", (*cmd).state);
+ break;
+ }
+ _debug_printf("\t\t.uintValue = %u\n", (*cmd).uintValue);
+ _debug_printf("\t\t.floatValue = %R[float]\n", (*cmd).floatValue);
+}
+
+static void
+dump_SVGA3dVertexDivisor(const SVGA3dVertexDivisor *cmd)
+{
+ _debug_printf("\t\t.value = %u\n", (*cmd).value);
+ _debug_printf("\t\t.count = %u\n", (*cmd).count);
+ _debug_printf("\t\t.indexedData = %u\n", (*cmd).indexedData);
+ _debug_printf("\t\t.instanceData = %u\n", (*cmd).instanceData);
+}
+
+static void
+dump_SVGA3dCmdDefineShader(const SVGA3dCmdDefineShader *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.shid = %u\n", (*cmd).shid);
+ switch((*cmd).type) {
+ case SVGA3D_SHADERTYPE_VS:
+ _debug_printf("\t\t.type = SVGA3D_SHADERTYPE_VS\n");
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ _debug_printf("\t\t.type = SVGA3D_SHADERTYPE_PS\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = %i\n", (*cmd).type);
+ break;
+ }
+}
+
+static void
+dump_constants(SVGA3dShaderConstType type, unsigned start,
+ unsigned numConsts, const void *buf)
+{
+ unsigned i;
+ const float (*fvalues)[4];
+ const int32 (*ivalues)[4];
+
+ switch (type) {
+ case SVGA3D_CONST_TYPE_FLOAT:
+ _debug_printf("\t\t.ctype = SVGA3D_CONST_TYPE_FLOAT\n");
+ fvalues = (const float (*)[4]) buf;
+ for (i = 0; i < numConsts; ++i) {
+ _debug_printf("\t\t.values[%u] = {%R[float], %R[float], %R[float], %R[float]}\n",
+ start + i,
+ fvalues[i][0],
+ fvalues[i][1],
+ fvalues[i][2],
+ fvalues[i][3]);
+ }
+ break;
+ case SVGA3D_CONST_TYPE_INT:
+ _debug_printf("\t\t.ctype = SVGA3D_CONST_TYPE_INT\n");
+ ivalues = (const int32 (*)[4]) buf;
+ for (i = 0; i < numConsts; ++i) {
+ _debug_printf("\t\t.values[%u] = {%i, %i, %i, %i}\n",
+ start + i,
+ ivalues[i][0],
+ ivalues[i][1],
+ ivalues[i][2],
+ ivalues[i][3]);
+ }
+ break;
+ case SVGA3D_CONST_TYPE_BOOL:
+ _debug_printf("\t\t.ctype = SVGA3D_CONST_TYPE_BOOL\n");
+ ivalues = (const int32 (*)[4]) buf;
+ for (i = 0; i < numConsts; ++i) {
+ _debug_printf("\t\t.values[%u] = {%i, %i, %i, %i}\n",
+ start + i,
+ ivalues[i][0],
+ ivalues[i][1],
+ ivalues[i][2],
+ ivalues[i][3]);
+ }
+ break;
+ default:
+ _debug_printf("\t\t.ctype = %i\n", type);
+ ivalues = (const int32 (*)[4]) buf;
+ for (i = 0; i < numConsts; ++i) {
+ _debug_printf("\t\t.values[%u] = {%i, %i, %i, %i}\n",
+ start + i,
+ ivalues[i][0],
+ ivalues[i][1],
+ ivalues[i][2],
+ ivalues[i][3]);
+ }
+ break;
+ }
+}
+
+static void
+dump_SVGA3dCmdSetShaderConst(const SVGA3dCmdSetShaderConst *cmd, uint32 numConsts)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.reg = %u\n", (*cmd).reg);
+ _debug_printf("\t\t.type = %s\n", shader_name((*cmd).type));
+ dump_constants((*cmd).ctype, cmd->reg, numConsts, cmd->values);
+}
+
+static void
+dump_SVGA3dCmdSetGBShaderConstInline(const SVGA3dCmdSetGBShaderConstInline *cmd, uint32 numConsts)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.reg = %u\n", (*cmd).regStart);
+ _debug_printf("\t\t.type = %s\n", shader_name((*cmd).shaderType));
+ dump_constants((*cmd).constType, cmd->regStart, numConsts, &cmd[1]);
+}
+
+
+static void
+dump_SVGA3dCmdSetZRange(const SVGA3dCmdSetZRange *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.zRange.min = %R[float]\n", (*cmd).zRange.min);
+ _debug_printf("\t\t.zRange.max = %R[float]\n", (*cmd).zRange.max);
+}
+
+static void
+dump_SVGA3dCmdDrawPrimitives(const SVGA3dCmdDrawPrimitives *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.numVertexDecls = %u\n", (*cmd).numVertexDecls);
+ _debug_printf("\t\t.numRanges = %u\n", (*cmd).numRanges);
+}
+
+static void
+dump_SVGA3dCmdSetLightEnabled(const SVGA3dCmdSetLightEnabled *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.index = %u\n", (*cmd).index);
+ _debug_printf("\t\t.enabled = %u\n", (*cmd).enabled);
+}
+
+static void
+dump_SVGA3dPrimitiveRange(const SVGA3dPrimitiveRange *cmd)
+{
+ switch((*cmd).primType) {
+ case SVGA3D_PRIMITIVE_INVALID:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_INVALID\n");
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLELIST:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_TRIANGLELIST\n");
+ break;
+ case SVGA3D_PRIMITIVE_POINTLIST:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_POINTLIST\n");
+ break;
+ case SVGA3D_PRIMITIVE_LINELIST:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_LINELIST\n");
+ break;
+ case SVGA3D_PRIMITIVE_LINESTRIP:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_LINESTRIP\n");
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLESTRIP:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_TRIANGLESTRIP\n");
+ break;
+ case SVGA3D_PRIMITIVE_TRIANGLEFAN:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_TRIANGLEFAN\n");
+ break;
+ case SVGA3D_PRIMITIVE_MAX:
+ _debug_printf("\t\t.primType = SVGA3D_PRIMITIVE_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.primType = %i\n", (*cmd).primType);
+ break;
+ }
+ _debug_printf("\t\t.primitiveCount = %u\n", (*cmd).primitiveCount);
+ _debug_printf("\t\t.indexArray.surfaceId = %u\n", (*cmd).indexArray.surfaceId);
+ _debug_printf("\t\t.indexArray.offset = %u\n", (*cmd).indexArray.offset);
+ _debug_printf("\t\t.indexArray.stride = %u\n", (*cmd).indexArray.stride);
+ _debug_printf("\t\t.indexWidth = %u\n", (*cmd).indexWidth);
+ _debug_printf("\t\t.indexBias = %i\n", (*cmd).indexBias);
+}
+
+static void
+dump_SVGA3dCmdPresent(const SVGA3dCmdPresent *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", (*cmd).sid);
+}
+
+static void
+dump_SVGA3dCmdSetRenderState(const SVGA3dCmdSetRenderState *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+}
+
+static void
+dump_SVGA3dCmdSurfaceStretchBlt(const SVGA3dCmdSurfaceStretchBlt *cmd)
+{
+ _debug_printf("\t\t.src.sid = %u\n", (*cmd).src.sid);
+ _debug_printf("\t\t.src.face = %u\n", (*cmd).src.face);
+ _debug_printf("\t\t.src.mipmap = %u\n", (*cmd).src.mipmap);
+ _debug_printf("\t\t.dest.sid = %u\n", (*cmd).dest.sid);
+ _debug_printf("\t\t.dest.face = %u\n", (*cmd).dest.face);
+ _debug_printf("\t\t.dest.mipmap = %u\n", (*cmd).dest.mipmap);
+ _debug_printf("\t\t.boxSrc.x = %u\n", (*cmd).boxSrc.x);
+ _debug_printf("\t\t.boxSrc.y = %u\n", (*cmd).boxSrc.y);
+ _debug_printf("\t\t.boxSrc.z = %u\n", (*cmd).boxSrc.z);
+ _debug_printf("\t\t.boxSrc.w = %u\n", (*cmd).boxSrc.w);
+ _debug_printf("\t\t.boxSrc.h = %u\n", (*cmd).boxSrc.h);
+ _debug_printf("\t\t.boxSrc.d = %u\n", (*cmd).boxSrc.d);
+ _debug_printf("\t\t.boxDest.x = %u\n", (*cmd).boxDest.x);
+ _debug_printf("\t\t.boxDest.y = %u\n", (*cmd).boxDest.y);
+ _debug_printf("\t\t.boxDest.z = %u\n", (*cmd).boxDest.z);
+ _debug_printf("\t\t.boxDest.w = %u\n", (*cmd).boxDest.w);
+ _debug_printf("\t\t.boxDest.h = %u\n", (*cmd).boxDest.h);
+ _debug_printf("\t\t.boxDest.d = %u\n", (*cmd).boxDest.d);
+ switch((*cmd).mode) {
+ case SVGA3D_STRETCH_BLT_POINT:
+ _debug_printf("\t\t.mode = SVGA3D_STRETCH_BLT_POINT\n");
+ break;
+ case SVGA3D_STRETCH_BLT_LINEAR:
+ _debug_printf("\t\t.mode = SVGA3D_STRETCH_BLT_LINEAR\n");
+ break;
+ case SVGA3D_STRETCH_BLT_MAX:
+ _debug_printf("\t\t.mode = SVGA3D_STRETCH_BLT_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.mode = %i\n", (*cmd).mode);
+ break;
+ }
+}
+
+static void
+dump_SVGA3dCmdSurfaceDMA(const SVGA3dCmdSurfaceDMA *cmd)
+{
+ _debug_printf("\t\t.guest.ptr.gmrId = %u\n", (*cmd).guest.ptr.gmrId);
+ _debug_printf("\t\t.guest.ptr.offset = %u\n", (*cmd).guest.ptr.offset);
+ _debug_printf("\t\t.guest.pitch = %u\n", (*cmd).guest.pitch);
+ _debug_printf("\t\t.host.sid = %u\n", (*cmd).host.sid);
+ _debug_printf("\t\t.host.face = %u\n", (*cmd).host.face);
+ _debug_printf("\t\t.host.mipmap = %u\n", (*cmd).host.mipmap);
+ switch((*cmd).transfer) {
+ case SVGA3D_WRITE_HOST_VRAM:
+ _debug_printf("\t\t.transfer = SVGA3D_WRITE_HOST_VRAM\n");
+ break;
+ case SVGA3D_READ_HOST_VRAM:
+ _debug_printf("\t\t.transfer = SVGA3D_READ_HOST_VRAM\n");
+ break;
+ default:
+ _debug_printf("\t\t.transfer = %i\n", (*cmd).transfer);
+ break;
+ }
+}
+
+static void
+dump_SVGA3dCmdSurfaceDMASuffix(const SVGA3dCmdSurfaceDMASuffix *cmd)
+{
+ _debug_printf("\t\t.suffixSize = %u\n", (*cmd).suffixSize);
+ _debug_printf("\t\t.maximumOffset = %u\n", (*cmd).maximumOffset);
+ _debug_printf("\t\t.flags.discard = %u\n", (*cmd).flags.discard);
+ _debug_printf("\t\t.flags.unsynchronized = %u\n", (*cmd).flags.unsynchronized);
+}
+
+static void
+dump_SVGA3dCmdSetTransform(const SVGA3dCmdSetTransform *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).type) {
+ case SVGA3D_TRANSFORM_INVALID:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_INVALID\n");
+ break;
+ case SVGA3D_TRANSFORM_WORLD:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_WORLD\n");
+ break;
+ case SVGA3D_TRANSFORM_VIEW:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_VIEW\n");
+ break;
+ case SVGA3D_TRANSFORM_PROJECTION:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_PROJECTION\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE0:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE0\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE1:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE1\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE2:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE2\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE3:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE3\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE4:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE4\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE5:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE5\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE6:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE6\n");
+ break;
+ case SVGA3D_TRANSFORM_TEXTURE7:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_TEXTURE7\n");
+ break;
+ case SVGA3D_TRANSFORM_WORLD1:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_WORLD1\n");
+ break;
+ case SVGA3D_TRANSFORM_WORLD2:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_WORLD2\n");
+ break;
+ case SVGA3D_TRANSFORM_WORLD3:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_WORLD3\n");
+ break;
+ case SVGA3D_TRANSFORM_MAX:
+ _debug_printf("\t\t.type = SVGA3D_TRANSFORM_MAX\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = %i\n", (*cmd).type);
+ break;
+ }
+ _debug_printf("\t\t.matrix[0] = %R[float]\n", (*cmd).matrix[0]);
+ _debug_printf("\t\t.matrix[1] = %R[float]\n", (*cmd).matrix[1]);
+ _debug_printf("\t\t.matrix[2] = %R[float]\n", (*cmd).matrix[2]);
+ _debug_printf("\t\t.matrix[3] = %R[float]\n", (*cmd).matrix[3]);
+ _debug_printf("\t\t.matrix[4] = %R[float]\n", (*cmd).matrix[4]);
+ _debug_printf("\t\t.matrix[5] = %R[float]\n", (*cmd).matrix[5]);
+ _debug_printf("\t\t.matrix[6] = %R[float]\n", (*cmd).matrix[6]);
+ _debug_printf("\t\t.matrix[7] = %R[float]\n", (*cmd).matrix[7]);
+ _debug_printf("\t\t.matrix[8] = %R[float]\n", (*cmd).matrix[8]);
+ _debug_printf("\t\t.matrix[9] = %R[float]\n", (*cmd).matrix[9]);
+ _debug_printf("\t\t.matrix[10] = %R[float]\n", (*cmd).matrix[10]);
+ _debug_printf("\t\t.matrix[11] = %R[float]\n", (*cmd).matrix[11]);
+ _debug_printf("\t\t.matrix[12] = %R[float]\n", (*cmd).matrix[12]);
+ _debug_printf("\t\t.matrix[13] = %R[float]\n", (*cmd).matrix[13]);
+ _debug_printf("\t\t.matrix[14] = %R[float]\n", (*cmd).matrix[14]);
+ _debug_printf("\t\t.matrix[15] = %R[float]\n", (*cmd).matrix[15]);
+}
+
+static void
+dump_SVGA3dCmdDestroyShader(const SVGA3dCmdDestroyShader *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ _debug_printf("\t\t.shid = %u\n", (*cmd).shid);
+ switch((*cmd).type) {
+ case SVGA3D_SHADERTYPE_VS:
+ _debug_printf("\t\t.type = SVGA3D_SHADERTYPE_VS\n");
+ break;
+ case SVGA3D_SHADERTYPE_PS:
+ _debug_printf("\t\t.type = SVGA3D_SHADERTYPE_PS\n");
+ break;
+ default:
+ _debug_printf("\t\t.type = %i\n", (*cmd).type);
+ break;
+ }
+}
+
+static void
+dump_SVGA3dCmdDestroyContext(const SVGA3dCmdDestroyContext *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+}
+
+static void
+dump_SVGA3dCmdClear(const SVGA3dCmdClear *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", (*cmd).cid);
+ switch((*cmd).clearFlag) {
+ case SVGA3D_CLEAR_COLOR:
+ _debug_printf("\t\t.clearFlag = SVGA3D_CLEAR_COLOR\n");
+ break;
+ case SVGA3D_CLEAR_DEPTH:
+ _debug_printf("\t\t.clearFlag = SVGA3D_CLEAR_DEPTH\n");
+ break;
+ case SVGA3D_CLEAR_STENCIL:
+ _debug_printf("\t\t.clearFlag = SVGA3D_CLEAR_STENCIL\n");
+ break;
+ default:
+ _debug_printf("\t\t.clearFlag = %i\n", (*cmd).clearFlag);
+ break;
+ }
+ _debug_printf("\t\t.color = %u\n", (*cmd).color);
+ _debug_printf("\t\t.depth = %R[float]\n", (*cmd).depth);
+ _debug_printf("\t\t.stencil = %u\n", (*cmd).stencil);
+}
+
+static void
+dump_SVGA3dCmdDefineSurface(const SVGA3dCmdDefineSurface *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", (*cmd).sid);
+ switch((*cmd).surfaceFlags) {
+ case SVGA3D_SURFACE_CUBEMAP:
+ _debug_printf("\t\t.surfaceFlags = SVGA3D_SURFACE_CUBEMAP\n");
+ break;
+ case SVGA3D_SURFACE_HINT_STATIC:
+ _debug_printf("\t\t.surfaceFlags = SVGA3D_SURFACE_HINT_STATIC\n");
+ break;
+ case SVGA3D_SURFACE_HINT_DYNAMIC:
+ _debug_printf("\t\t.surfaceFlags = SVGA3D_SURFACE_HINT_DYNAMIC\n");
+ break;
+ case SVGA3D_SURFACE_HINT_INDEXBUFFER:
+ _debug_printf("\t\t.surfaceFlags = SVGA3D_SURFACE_HINT_INDEXBUFFER\n");
+ break;
+ case SVGA3D_SURFACE_HINT_VERTEXBUFFER:
+ _debug_printf("\t\t.surfaceFlags = SVGA3D_SURFACE_HINT_VERTEXBUFFER\n");
+ break;
+ default:
+ _debug_printf("\t\t.surfaceFlags = %i\n", (*cmd).surfaceFlags);
+ break;
+ }
+ _debug_printf("\t\t.format = %s\n", svga_format_name((*cmd).format));
+ _debug_printf("\t\t.face[0].numMipLevels = %u\n", (*cmd).face[0].numMipLevels);
+ _debug_printf("\t\t.face[1].numMipLevels = %u\n", (*cmd).face[1].numMipLevels);
+ _debug_printf("\t\t.face[2].numMipLevels = %u\n", (*cmd).face[2].numMipLevels);
+ _debug_printf("\t\t.face[3].numMipLevels = %u\n", (*cmd).face[3].numMipLevels);
+ _debug_printf("\t\t.face[4].numMipLevels = %u\n", (*cmd).face[4].numMipLevels);
+ _debug_printf("\t\t.face[5].numMipLevels = %u\n", (*cmd).face[5].numMipLevels);
+}
+
+static void
+dump_SVGASignedRect(const SVGASignedRect *cmd)
+{
+ _debug_printf("\t\t.left = %i\n", (*cmd).left);
+ _debug_printf("\t\t.top = %i\n", (*cmd).top);
+ _debug_printf("\t\t.right = %i\n", (*cmd).right);
+ _debug_printf("\t\t.bottom = %i\n", (*cmd).bottom);
+}
+
+static void
+dump_SVGA3dBox(const SVGA3dBox *box)
+{
+ _debug_printf("\t\t.box = %u, %u, %u %u x %u x %u\n",
+ box->x, box->y, box->z,
+ box->w, box->h, box->d);
+}
+
+static void
+dump_SVGA3dCmdBlitSurfaceToScreen(const SVGA3dCmdBlitSurfaceToScreen *cmd)
+{
+ _debug_printf("\t\t.srcImage.sid = %u\n", (*cmd).srcImage.sid);
+ _debug_printf("\t\t.srcImage.face = %u\n", (*cmd).srcImage.face);
+ _debug_printf("\t\t.srcImage.mipmap = %u\n", (*cmd).srcImage.mipmap);
+ _debug_printf("\t\t.srcRect.left = %i\n", (*cmd).srcRect.left);
+ _debug_printf("\t\t.srcRect.top = %i\n", (*cmd).srcRect.top);
+ _debug_printf("\t\t.srcRect.right = %i\n", (*cmd).srcRect.right);
+ _debug_printf("\t\t.srcRect.bottom = %i\n", (*cmd).srcRect.bottom);
+ _debug_printf("\t\t.destScreenId = %u\n", (*cmd).destScreenId);
+ _debug_printf("\t\t.destRect.left = %i\n", (*cmd).destRect.left);
+ _debug_printf("\t\t.destRect.top = %i\n", (*cmd).destRect.top);
+ _debug_printf("\t\t.destRect.right = %i\n", (*cmd).destRect.right);
+ _debug_printf("\t\t.destRect.bottom = %i\n", (*cmd).destRect.bottom);
+}
+
+static void
+dump_SVGA3dCmdDefineGBContext(const SVGA3dCmdDefineGBContext *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", cmd->cid);
+}
+
+static void
+dump_SVGA3dCmdBindGBContext(const SVGA3dCmdBindGBContext *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", cmd->cid);
+ _debug_printf("\t\t.mobid = %u\n", cmd->mobid);
+ _debug_printf("\t\t.validContents = %u\n", cmd->validContents);
+}
+
+static void
+dump_SVGA3dCmdDestroyGBContext(const SVGA3dCmdDestroyGBContext *cmd)
+{
+ _debug_printf("\t\t.cid = %u\n", cmd->cid);
+}
+
+static void
+dump_SVGA3dCmdDefineGBShader(const SVGA3dCmdDefineGBShader *cmd)
+{
+ _debug_printf("\t\t.shid = %u\n", cmd->shid);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+ _debug_printf("\t\t.sizeInBytes = %u\n", cmd->sizeInBytes);
+}
+
+static void
+dump_SVGA3dCmdBindGBShader(const SVGA3dCmdBindGBShader *cmd)
+{
+ _debug_printf("\t\t.shid = %u\n", cmd->shid);
+ _debug_printf("\t\t.mobid = %u\n", cmd->mobid);
+ _debug_printf("\t\t.offsetInBytes = %u\n", cmd->offsetInBytes);
+}
+
+static void
+dump_SVGA3dCmdDestroyGBShader(const SVGA3dCmdDestroyGBShader *cmd)
+{
+ _debug_printf("\t\t.shid = %u\n", cmd->shid);
+}
+
+static void
+dump_SVGA3dCmdBindGBSurface(const SVGA3dCmdBindGBSurface *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", cmd->sid);
+ _debug_printf("\t\t.mobid = %u\n", cmd->mobid);
+}
+
+static void
+dump_SVGA3dCmdUpdateGBSurface(const SVGA3dCmdUpdateGBSurface *cmd)
+{
+ _debug_printf("\t\t.sid = %u\n", cmd->sid);
+}
+
+static void
+dump_SVGA3dCmdUpdateGBImage(const SVGA3dCmdUpdateGBImage *cmd)
+{
+ _debug_printf("\t\t.image.sid = %u\n", cmd->image.sid);
+ _debug_printf("\t\t.image.face = %u\n", cmd->image.face);
+ _debug_printf("\t\t.image.mipmap = %u\n", cmd->image.mipmap);
+ dump_SVGA3dBox(&cmd->box);
+}
+
+static void
+dump_SVGA3dCmdReadbackGBImage(const SVGA3dCmdReadbackGBImage *cmd)
+{
+ _debug_printf("\t\t.image.sid = %u\n", cmd->image.sid);
+ _debug_printf("\t\t.image.face = %u\n", cmd->image.face);
+ _debug_printf("\t\t.image.mipmap = %u\n", cmd->image.mipmap);
+}
+
+static void
+dump_SVGA3dCmdInvalidateGBImage(const SVGA3dCmdInvalidateGBImage *cmd)
+{
+ _debug_printf("\t\t.image.sid = %u\n", cmd->image.sid);
+ _debug_printf("\t\t.image.face = %u\n", cmd->image.face);
+ _debug_printf("\t\t.image.mipmap = %u\n", cmd->image.mipmap);
+}
+
+static void
+dump_SVGA3dCmdInvalidateGBImagePartial(const SVGA3dCmdInvalidateGBImagePartial *cmd)
+{
+ _debug_printf("\t\t.image.sid = %u\n", cmd->image.sid);
+ _debug_printf("\t\t.image.face = %u\n", cmd->image.face);
+ _debug_printf("\t\t.image.mipmap = %u\n", cmd->image.mipmap);
+ dump_SVGA3dBox(&cmd->box);
+ _debug_printf("\t\t.invertBox = %u\n", cmd->invertBox);
+}
+
+/// SVGA_3D_CMD_DX
+
+#define __SVGA3D_DUMP_STRINGIFY(a) #a
+#define SVGA3D_DUMP_STRINGIFY(a) __SVGA3D_DUMP_STRINGIFY(a)
+
+#define SVGA3D_DUMP_HEADER(CommandName) \
+static void \
+dump_SVGA3dCmdDX##CommandName(const SVGA3dCmdDX##CommandName *cmd)
+
+#define SVGA3D_DUMP_PARAMETER(ParameterName, ParameterType) \
+_debug_printf(SVGA3D_DUMP_STRINGIFY(\t\t.ParameterName = %ParameterType\n), cmd->ParameterName)
+
+#define SVGA3D_DUMP_TYPE_CASE(TypeVariableName, CaseName) \
+case CaseName: \
+ _debug_printf(SVGA3D_DUMP_STRINGIFY(\t\t.TypeVariableName = CaseName) "\n"); \
+ break;
+
+#define SVGA3D_DUMP_TYPE_DEFAULT(TypeVariableName) \
+default: \
+ _debug_printf(SVGA3D_DUMP_STRINGIFY(\t\t.TypeVariableName = %i\n), (*cmd).TypeVariableName); \
+ break;
+
+SVGA3D_DUMP_HEADER(SetShader)
+{
+ SVGA3D_DUMP_PARAMETER(shaderId, u);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+}
+
+SVGA3D_DUMP_HEADER(SetSamplers)
+{
+ SVGA3D_DUMP_PARAMETER(startSampler, u);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+ /* XXX: note we're not printing the sampler IDs at this time */
+}
+
+SVGA3D_DUMP_HEADER(Draw)
+{
+ SVGA3D_DUMP_PARAMETER(vertexCount, u);
+ SVGA3D_DUMP_PARAMETER(startVertexLocation, u);
+}
+
+SVGA3D_DUMP_HEADER(DrawIndexed)
+{
+ SVGA3D_DUMP_PARAMETER(indexCount, u);
+ SVGA3D_DUMP_PARAMETER(startIndexLocation, u);
+ SVGA3D_DUMP_PARAMETER(baseVertexLocation, i);
+}
+
+SVGA3D_DUMP_HEADER(DrawInstanced)
+{
+ SVGA3D_DUMP_PARAMETER(vertexCountPerInstance, u);
+ SVGA3D_DUMP_PARAMETER(instanceCount, u);
+ SVGA3D_DUMP_PARAMETER(startVertexLocation, u);
+ SVGA3D_DUMP_PARAMETER(startInstanceLocation, u);
+}
+
+SVGA3D_DUMP_HEADER(DrawIndexedInstanced)
+{
+ SVGA3D_DUMP_PARAMETER(indexCountPerInstance, u);
+ SVGA3D_DUMP_PARAMETER(instanceCount, u);
+ SVGA3D_DUMP_PARAMETER(startIndexLocation, u);
+ SVGA3D_DUMP_PARAMETER(baseVertexLocation, i);
+ SVGA3D_DUMP_PARAMETER(startInstanceLocation, u);
+}
+
+SVGA3D_DUMP_HEADER(DrawAuto)
+{
+ (void)cmd;
+}
+
+SVGA3D_DUMP_HEADER(SetBlendState)
+{
+ SVGA3D_DUMP_PARAMETER(blendId, u);
+ _debug_printf("\t\t.blendFactor[4] = %R[float] %R[float] %R[float] %R[float]\n", cmd->blendFactor[0],
+ cmd->blendFactor[1],
+ cmd->blendFactor[2],
+ cmd->blendFactor[3]);
+ SVGA3D_DUMP_PARAMETER(sampleMask, u);
+}
+
+SVGA3D_DUMP_HEADER(SetDepthStencilState)
+{
+ SVGA3D_DUMP_PARAMETER(depthStencilId, u);
+ SVGA3D_DUMP_PARAMETER(stencilRef, u);
+}
+
+SVGA3D_DUMP_HEADER(SetRasterizerState)
+{
+ SVGA3D_DUMP_PARAMETER(rasterizerId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineQuery)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+ switch (cmd->type)
+ {
+ SVGA3D_DUMP_TYPE_CASE(type, SVGA3D_QUERYTYPE_OCCLUSION);
+ SVGA3D_DUMP_TYPE_CASE(type, SVGA3D_QUERYTYPE_MAX);
+ SVGA3D_DUMP_TYPE_DEFAULT(type);
+ }
+ switch (cmd->flags)
+ {
+ SVGA3D_DUMP_TYPE_CASE(flags, SVGA3D_DXQUERY_FLAG_PREDICATEHINT);
+ SVGA3D_DUMP_TYPE_DEFAULT(flags);
+ }
+}
+
+SVGA3D_DUMP_HEADER(DestroyQuery)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+}
+
+SVGA3D_DUMP_HEADER(BindAllQuery)
+{
+ SVGA3D_DUMP_PARAMETER(cid, u);
+ SVGA3D_DUMP_PARAMETER(mobid, u);
+}
+
+SVGA3D_DUMP_HEADER(BindQuery)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+ SVGA3D_DUMP_PARAMETER(mobid, u);
+}
+
+SVGA3D_DUMP_HEADER(MoveQuery)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+ SVGA3D_DUMP_PARAMETER(mobid, u);
+ SVGA3D_DUMP_PARAMETER(mobOffset, u);
+}
+
+SVGA3D_DUMP_HEADER(ReadbackAllQuery)
+{
+ SVGA3D_DUMP_PARAMETER(cid, u);
+}
+
+SVGA3D_DUMP_HEADER(SetQueryOffset)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+ SVGA3D_DUMP_PARAMETER(mobOffset, u);
+}
+
+SVGA3D_DUMP_HEADER(BeginQuery)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+}
+
+SVGA3D_DUMP_HEADER(EndQuery)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+}
+
+SVGA3D_DUMP_HEADER(SetPredication)
+{
+ SVGA3D_DUMP_PARAMETER(queryId, u);
+ SVGA3D_DUMP_PARAMETER(predicateValue, u);
+}
+
+SVGA3D_DUMP_HEADER(SetSOTargets)
+{
+ (void)cmd;
+}
+
+
+SVGA3D_DUMP_HEADER(BindContext)
+{
+ SVGA3D_DUMP_PARAMETER(mobid, u);
+ SVGA3D_DUMP_PARAMETER(validContents, u);
+}
+
+SVGA3D_DUMP_HEADER(SetViewports)
+{
+ (void)cmd;
+ /* XXX: note we're not printing the SVGA3dViewport list at this time */
+}
+
+SVGA3D_DUMP_HEADER(SetScissorRects)
+{
+ (void)cmd;
+ /* XXX: note we're not printing the SVGASignedRect list at this time */
+}
+
+SVGA3D_DUMP_HEADER(ClearRenderTargetView)
+{
+ SVGA3D_DUMP_PARAMETER(renderTargetViewId, u);
+ SVGA3D_DUMP_PARAMETER(rgba.r, R[float]);
+ SVGA3D_DUMP_PARAMETER(rgba.g, R[float]);
+ SVGA3D_DUMP_PARAMETER(rgba.b, R[float]);
+ SVGA3D_DUMP_PARAMETER(rgba.a, R[float]);
+}
+
+SVGA3D_DUMP_HEADER(ClearDepthStencilView)
+{
+ SVGA3D_DUMP_PARAMETER(flags, u);
+ SVGA3D_DUMP_PARAMETER(stencil, u);
+ SVGA3D_DUMP_PARAMETER(depthStencilViewId, u);
+ SVGA3D_DUMP_PARAMETER(depth, R[float]);
+}
+
+SVGA3D_DUMP_HEADER(DefineShaderResourceView)
+{
+ SVGA3D_DUMP_PARAMETER(shaderResourceViewId, u);
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ _debug_printf("\t\t.format = %s\n", svga_format_name(cmd->format));
+ switch (cmd->resourceDimension)
+ {
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_BUFFER);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE1D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE2D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE3D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURECUBE);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TYPE_MAX);
+ SVGA3D_DUMP_TYPE_DEFAULT(resourceDimension);
+ }
+ if (cmd->resourceDimension == SVGA3D_RESOURCE_BUFFER) {
+ SVGA3D_DUMP_PARAMETER(desc.buffer.firstElement, u);
+ SVGA3D_DUMP_PARAMETER(desc.buffer.numElements, u);
+ }
+ else {
+ SVGA3D_DUMP_PARAMETER(desc.tex.mostDetailedMip, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex.firstArraySlice, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex.mipLevels, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex.arraySize, u);
+ }
+}
+
+SVGA3D_DUMP_HEADER(SetShaderResources)
+{
+ SVGA3D_DUMP_PARAMETER(startView, u);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+}
+
+
+SVGA3D_DUMP_HEADER(DestroyShaderResourceView)
+{
+ SVGA3D_DUMP_PARAMETER(shaderResourceViewId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineRenderTargetView)
+{
+ SVGA3D_DUMP_PARAMETER(renderTargetViewId, u);
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ _debug_printf("\t\t.format = %s\n", svga_format_name(cmd->format));
+ switch (cmd->resourceDimension)
+ {
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_BUFFER);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE1D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE2D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE3D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURECUBE);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TYPE_MAX);
+ SVGA3D_DUMP_TYPE_DEFAULT(resourceDimension);
+ }
+ SVGA3D_DUMP_PARAMETER(desc.buffer.firstElement, u);
+ SVGA3D_DUMP_PARAMETER(desc.buffer.numElements, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex.mipSlice, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex.firstArraySlice, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex.arraySize, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex3D.mipSlice, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex3D.firstW, u);
+ SVGA3D_DUMP_PARAMETER(desc.tex3D.wSize, u);
+}
+
+SVGA3D_DUMP_HEADER(DestroyRenderTargetView)
+{
+ SVGA3D_DUMP_PARAMETER(renderTargetViewId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineDepthStencilView)
+{
+ SVGA3D_DUMP_PARAMETER(depthStencilViewId, u);
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ _debug_printf("\t\t.format = %s\n", svga_format_name(cmd->format));
+ switch (cmd->resourceDimension)
+ {
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_BUFFER);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE1D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE2D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURE3D);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TEXTURECUBE);
+ SVGA3D_DUMP_TYPE_CASE(resourceDimension, SVGA3D_RESOURCE_TYPE_MAX);
+ SVGA3D_DUMP_TYPE_DEFAULT(resourceDimension);
+ }
+ SVGA3D_DUMP_PARAMETER(mipSlice, u);
+ SVGA3D_DUMP_PARAMETER(firstArraySlice, u);
+ SVGA3D_DUMP_PARAMETER(arraySize, u);
+}
+
+SVGA3D_DUMP_HEADER(DestroyDepthStencilView)
+{
+ SVGA3D_DUMP_PARAMETER(depthStencilViewId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineElementLayout)
+{
+ SVGA3D_DUMP_PARAMETER(elementLayoutId, u);
+}
+
+SVGA3D_DUMP_HEADER(DestroyElementLayout)
+{
+ SVGA3D_DUMP_PARAMETER(elementLayoutId, u);
+}
+
+static void
+dump_SVGA3dCmdDXDefineBlendState(const SVGA3dCmdDXDefineBlendState *cmd)
+{
+ unsigned i;
+
+ SVGA3D_DUMP_PARAMETER(blendId, u);
+ SVGA3D_DUMP_PARAMETER(alphaToCoverageEnable, u);
+ SVGA3D_DUMP_PARAMETER(independentBlendEnable, u);
+ for (i = 0; i < SVGA3D_DX_MAX_RENDER_TARGETS; i++) {
+ const SVGA3dDXBlendStatePerRT *rt = cmd->perRT + i;
+ _debug_printf("\t\t.perRT[%u].blendEnable = %u\n", i, rt->blendEnable);
+ if (rt->blendEnable) {
+ _debug_printf("\t\t.perRT[%u].srcBlend = %u\n", i, rt->srcBlend);
+ _debug_printf("\t\t.perRT[%u].destBlend = %u\n", i, rt->destBlend);
+ _debug_printf("\t\t.perRT[%u].blendOp = %u\n", i, rt->blendOp);
+ _debug_printf("\t\t.perRT[%u].srcBlendAlpha = %u\n", i, rt->srcBlendAlpha);
+ _debug_printf("\t\t.perRT[%u].destBlendAlpha = %u\n", i, rt->destBlendAlpha);
+ _debug_printf("\t\t.perRT[%u].blendOpAlpha = %u\n", i, rt->blendOpAlpha);
+ }
+ _debug_printf("\t\t.perRT[%u].renderTargetWriteMask = %u\n", i, rt->renderTargetWriteMask);
+ _debug_printf("\t\t.perRT[%u].logicOpEnable = %u\n", i, rt->logicOpEnable);
+ if (rt->logicOpEnable) {
+ _debug_printf("\t\t.perRT[%u].logicOp = %u\n", i, rt->logicOp);
+ }
+ }
+}
+
+SVGA3D_DUMP_HEADER(DestroyBlendState)
+{
+ SVGA3D_DUMP_PARAMETER(blendId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineDepthStencilState)
+{
+ SVGA3D_DUMP_PARAMETER(depthStencilId, u);
+ SVGA3D_DUMP_PARAMETER(depthEnable, u);
+ SVGA3D_DUMP_PARAMETER(depthWriteMask, u);
+ SVGA3D_DUMP_PARAMETER(depthFunc, u);
+ SVGA3D_DUMP_PARAMETER(stencilEnable, u);
+ SVGA3D_DUMP_PARAMETER(frontEnable, u);
+ SVGA3D_DUMP_PARAMETER(backEnable, u);
+ SVGA3D_DUMP_PARAMETER(stencilReadMask, u);
+ SVGA3D_DUMP_PARAMETER(stencilWriteMask, u);
+ SVGA3D_DUMP_PARAMETER(frontStencilFailOp, u);
+ SVGA3D_DUMP_PARAMETER(frontStencilDepthFailOp, u);
+ SVGA3D_DUMP_PARAMETER(frontStencilPassOp, u);
+ SVGA3D_DUMP_PARAMETER(frontStencilFunc, u);
+ SVGA3D_DUMP_PARAMETER(backStencilFailOp, u);
+ SVGA3D_DUMP_PARAMETER(backStencilDepthFailOp, u);
+ SVGA3D_DUMP_PARAMETER(backStencilPassOp, u);
+ SVGA3D_DUMP_PARAMETER(backStencilFunc, u);
+}
+
+SVGA3D_DUMP_HEADER(DestroyDepthStencilState)
+{
+ SVGA3D_DUMP_PARAMETER(depthStencilId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineRasterizerState)
+{
+ SVGA3D_DUMP_PARAMETER(rasterizerId, u);
+ SVGA3D_DUMP_PARAMETER(fillMode, u);
+ SVGA3D_DUMP_PARAMETER(cullMode, u);
+ SVGA3D_DUMP_PARAMETER(frontCounterClockwise, u);
+ SVGA3D_DUMP_PARAMETER(depthBias, u);
+ SVGA3D_DUMP_PARAMETER(depthBiasClamp, R[float]);
+ SVGA3D_DUMP_PARAMETER(slopeScaledDepthBias, R[float]);
+ SVGA3D_DUMP_PARAMETER(depthClipEnable, u);
+ SVGA3D_DUMP_PARAMETER(scissorEnable, u);
+ SVGA3D_DUMP_PARAMETER(multisampleEnable, u);
+ SVGA3D_DUMP_PARAMETER(antialiasedLineEnable, u);
+ SVGA3D_DUMP_PARAMETER(lineWidth, R[float]);
+ SVGA3D_DUMP_PARAMETER(lineStippleEnable, u);
+ SVGA3D_DUMP_PARAMETER(lineStippleFactor, u);
+ SVGA3D_DUMP_PARAMETER(lineStipplePattern, u);
+ SVGA3D_DUMP_PARAMETER(provokingVertexLast, u);
+}
+
+SVGA3D_DUMP_HEADER(DestroyRasterizerState)
+{
+ SVGA3D_DUMP_PARAMETER(rasterizerId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineSamplerState)
+{
+ SVGA3D_DUMP_PARAMETER(samplerId, u);
+ SVGA3D_DUMP_PARAMETER(filter, u);
+ SVGA3D_DUMP_PARAMETER(addressU, u);
+ SVGA3D_DUMP_PARAMETER(addressV, u);
+ SVGA3D_DUMP_PARAMETER(addressW, u);
+ SVGA3D_DUMP_PARAMETER(mipLODBias, R[float]);
+ SVGA3D_DUMP_PARAMETER(maxAnisotropy, u);
+ SVGA3D_DUMP_PARAMETER(comparisonFunc, u);
+ SVGA3D_DUMP_PARAMETER(borderColor.r, R[float]);
+ SVGA3D_DUMP_PARAMETER(borderColor.g, R[float]);
+ SVGA3D_DUMP_PARAMETER(borderColor.b, R[float]);
+ SVGA3D_DUMP_PARAMETER(borderColor.a, R[float]);
+ SVGA3D_DUMP_PARAMETER(minLOD, R[float]);
+ SVGA3D_DUMP_PARAMETER(maxLOD, R[float]);
+}
+
+SVGA3D_DUMP_HEADER(DestroySamplerState)
+{
+ SVGA3D_DUMP_PARAMETER(samplerId, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineShader)
+{
+ SVGA3D_DUMP_PARAMETER(shaderId, u);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+ SVGA3D_DUMP_PARAMETER(sizeInBytes, u);
+}
+
+SVGA3D_DUMP_HEADER(DestroyShader)
+{
+ SVGA3D_DUMP_PARAMETER(shaderId, u);
+}
+
+SVGA3D_DUMP_HEADER(BindShader)
+{
+ SVGA3D_DUMP_PARAMETER(cid, u);
+ SVGA3D_DUMP_PARAMETER(shid, u);
+ SVGA3D_DUMP_PARAMETER(mobid, u);
+ SVGA3D_DUMP_PARAMETER(offsetInBytes, u);
+}
+
+SVGA3D_DUMP_HEADER(DefineStreamOutput)
+{
+ int i;
+ SVGA3D_DUMP_PARAMETER(soid, u);
+ SVGA3D_DUMP_PARAMETER(numOutputStreamEntries, u);
+ for (i = 0; i < SVGA3D_DX_MAX_SOTARGETS; i++) {
+ _debug_printf("\t\t.streamOutputStrideInBytes[%d] = %u\n",
+ i, cmd->streamOutputStrideInBytes[i]);
+ }
+ for (i = 0; i < 16; i++)
+ {
+ _debug_printf("\t\t.decl[%d].outputSlot = %u\n", i, cmd->decl[i].outputSlot);
+ _debug_printf("\t\t.decl[%d].registerIndex = %u\n", i, cmd->decl[i].registerIndex);
+ _debug_printf("\t\t.decl[%d].registerMask = %u\n", i, cmd->decl[i].registerMask);
+ }
+}
+
+SVGA3D_DUMP_HEADER(DestroyStreamOutput)
+{
+ SVGA3D_DUMP_PARAMETER(soid, u);
+}
+
+SVGA3D_DUMP_HEADER(SetStreamOutput)
+{
+ SVGA3D_DUMP_PARAMETER(soid, u);
+}
+
+SVGA3D_DUMP_HEADER(SetSingleConstantBuffer)
+{
+ SVGA3D_DUMP_PARAMETER(slot, u);
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ _debug_printf("\t\t.type = %s\n", shader_name(cmd->type));
+ SVGA3D_DUMP_PARAMETER(offsetInBytes, u);
+ SVGA3D_DUMP_PARAMETER(sizeInBytes, u);
+}
+
+SVGA3D_DUMP_HEADER(SetInputLayout)
+{
+ SVGA3D_DUMP_PARAMETER(elementLayoutId, u);
+}
+
+SVGA3D_DUMP_HEADER(SetVertexBuffers)
+{
+ SVGA3D_DUMP_PARAMETER(startBuffer, u);
+
+ /* XXX: note we're not printing the SVGA3dVertexBuffer list at this time */
+}
+
+SVGA3D_DUMP_HEADER(SetTopology)
+{
+ switch (cmd->topology)
+ {
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_INVALID);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_TRIANGLELIST);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_POINTLIST);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_LINELIST);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_LINESTRIP);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_TRIANGLESTRIP);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_TRIANGLEFAN);
+ SVGA3D_DUMP_TYPE_CASE(topology, SVGA3D_PRIMITIVE_MAX);
+ SVGA3D_DUMP_TYPE_DEFAULT(topology);
+ }
+}
+
+SVGA3D_DUMP_HEADER(SetIndexBuffer)
+{
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ _debug_printf("\t\t.format = %s\n", svga_format_name(cmd->format));
+ SVGA3D_DUMP_PARAMETER(offset, u);
+}
+
+SVGA3D_DUMP_HEADER(PredCopyRegion)
+{
+ SVGA3D_DUMP_PARAMETER(dstSid, u);
+ SVGA3D_DUMP_PARAMETER(dstSubResource, u);
+ SVGA3D_DUMP_PARAMETER(srcSid, u);
+ SVGA3D_DUMP_PARAMETER(srcSubResource, u);
+ dump_SVGA3dCopyBox(&cmd->box);
+}
+
+SVGA3D_DUMP_HEADER(PredCopy)
+{
+ SVGA3D_DUMP_PARAMETER(dstSid, u);
+ SVGA3D_DUMP_PARAMETER(srcSid, u);
+}
+
+static void
+dump_SVGA3dCmdDXUpdateSubResource(const SVGA3dCmdDXUpdateSubResource *cmd)
+{
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ SVGA3D_DUMP_PARAMETER(subResource, u);
+ dump_SVGA3dBox(&cmd->box);
+}
+
+static void
+dump_SVGA3dCmdDXReadbackSubResource(const SVGA3dCmdDXReadbackSubResource *cmd)
+{
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ SVGA3D_DUMP_PARAMETER(subResource, u);
+}
+
+SVGA3D_DUMP_HEADER(BufferCopy)
+{
+ SVGA3D_DUMP_PARAMETER(dest, u);
+ SVGA3D_DUMP_PARAMETER(src, u);
+ SVGA3D_DUMP_PARAMETER(destX, u);
+ SVGA3D_DUMP_PARAMETER(srcX, u);
+ SVGA3D_DUMP_PARAMETER(width, u);
+
+}
+
+SVGA3D_DUMP_HEADER(BufferUpdate)
+{
+ SVGA3D_DUMP_PARAMETER(sid, u);
+ SVGA3D_DUMP_PARAMETER(x, u);
+ SVGA3D_DUMP_PARAMETER(width, u);
+
+}
+
+SVGA3D_DUMP_HEADER(GenMips)
+{
+ SVGA3D_DUMP_PARAMETER(shaderResourceViewId, u);
+}
+
+SVGA3D_DUMP_HEADER(TransferFromBuffer)
+{
+ SVGA3D_DUMP_PARAMETER(srcSid, u);
+ SVGA3D_DUMP_PARAMETER(srcOffset, u);
+ SVGA3D_DUMP_PARAMETER(srcPitch, u);
+ SVGA3D_DUMP_PARAMETER(srcSlicePitch, u);
+ SVGA3D_DUMP_PARAMETER(destSid, u);
+ SVGA3D_DUMP_PARAMETER(destSubResource, u);
+ dump_SVGA3dBox(&cmd->destBox);
+}
+
+static void
+dump_SVGA3dCmdIntraSurfaceCopy(const SVGA3dCmdIntraSurfaceCopy *cmd)
+{
+ SVGA3D_DUMP_PARAMETER(surface.sid, u);
+ SVGA3D_DUMP_PARAMETER(surface.face, u);
+ SVGA3D_DUMP_PARAMETER(surface.mipmap, u);
+ dump_SVGA3dCopyBox(&cmd->box);
+}
+
+static void
+dump_SVGA3dCmdInvalidateGBSurface(const SVGA3dCmdInvalidateGBSurface *cmd)
+{
+ SVGA3D_DUMP_PARAMETER(sid, u);
+}
+
+#define SVGA3D_DUMP_CASE_BASIC(CommandName, CommandCode) \
+case SVGA_3D_CMD_DX_##CommandCode: \
+ _debug_printf(SVGA3D_DUMP_STRINGIFY(\tSVGA_3D_CMD_DX_##CommandCode) "\n"); \
+ { \
+ const SVGA3dCmdDX##CommandName *cmd = (const SVGA3dCmdDX##CommandName *)body; \
+ dump_SVGA3dCmdDX##CommandName(cmd); \
+ body = (const uint8_t *)&cmd[1]; \
+ } \
+ break
+
+#define SVGA3D_DUMP_CASE_LIST(CommandName, CommandCode, ElementType) \
+case SVGA_3D_CMD_DX_##CommandCode: \
+ _debug_printf(SVGA3D_DUMP_STRINGIFY(\tSVGA_3D_CMD_DX_##CommandCode) "\n"); \
+ { \
+ const SVGA3dCmdDX##CommandName *cmd = (const SVGA3dCmdDX##CommandName *)body; \
+ dump_SVGA3dCmdDX##CommandName(cmd); \
+ body = (const uint8_t *)&cmd[1]; \
+ while (body + sizeof(ElementType) <= next) \
+ { \
+ dump_##ElementType((const ElementType *)body); \
+ body += sizeof(ElementType); \
+ } \
+ } \
+ break
+
+void
+svga_dump_command(uint32_t cmd_id, const void *data, uint32_t size)
+{
+ const uint8_t *body = (const uint8_t *)data;
+ const uint8_t *next = body + size;
+
+ switch(cmd_id) {
+ SVGA3D_DUMP_CASE_BASIC(BindContext, BIND_CONTEXT);
+ SVGA3D_DUMP_CASE_LIST(SetViewports, SET_VIEWPORTS, SVGA3dViewport);
+ SVGA3D_DUMP_CASE_BASIC(SetShader, SET_SHADER);
+ SVGA3D_DUMP_CASE_LIST(SetSamplers, SET_SAMPLERS, SVGA3dSamplerId);
+ SVGA3D_DUMP_CASE_BASIC(SetBlendState, SET_BLEND_STATE);
+ SVGA3D_DUMP_CASE_BASIC(SetDepthStencilState, SET_DEPTHSTENCIL_STATE);
+ SVGA3D_DUMP_CASE_BASIC(SetRasterizerState, SET_RASTERIZER_STATE);
+ SVGA3D_DUMP_CASE_BASIC(SetPredication, SET_PREDICATION);
+ SVGA3D_DUMP_CASE_LIST(SetSOTargets, SET_SOTARGETS, SVGA3dSoTarget);
+ SVGA3D_DUMP_CASE_LIST(SetScissorRects, SET_SCISSORRECTS, SVGASignedRect);
+ SVGA3D_DUMP_CASE_BASIC(SetStreamOutput, SET_STREAMOUTPUT);
+ SVGA3D_DUMP_CASE_BASIC(SetSingleConstantBuffer, SET_SINGLE_CONSTANT_BUFFER);
+ SVGA3D_DUMP_CASE_BASIC(Draw, DRAW);
+ SVGA3D_DUMP_CASE_BASIC(DrawIndexed, DRAW_INDEXED);
+ SVGA3D_DUMP_CASE_BASIC(DrawInstanced, DRAW_INSTANCED);
+ SVGA3D_DUMP_CASE_BASIC(DrawIndexedInstanced, DRAW_INDEXED_INSTANCED);
+ SVGA3D_DUMP_CASE_BASIC(DrawAuto, DRAW_AUTO);
+ SVGA3D_DUMP_CASE_BASIC(DefineQuery, DEFINE_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(DestroyQuery, DESTROY_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(BindAllQuery, BIND_ALL_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(BindQuery, BIND_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(MoveQuery, MOVE_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(ReadbackAllQuery, READBACK_ALL_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(SetQueryOffset, SET_QUERY_OFFSET);
+ SVGA3D_DUMP_CASE_BASIC(BeginQuery, BEGIN_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(EndQuery, END_QUERY);
+ SVGA3D_DUMP_CASE_BASIC(ClearRenderTargetView, CLEAR_RENDERTARGET_VIEW);
+ SVGA3D_DUMP_CASE_BASIC(ClearDepthStencilView, CLEAR_DEPTHSTENCIL_VIEW);
+ SVGA3D_DUMP_CASE_BASIC(DefineShaderResourceView, DEFINE_SHADERRESOURCE_VIEW);
+ SVGA3D_DUMP_CASE_LIST(SetShaderResources, SET_SHADER_RESOURCES, SVGA3dShaderResourceViewId);
+ SVGA3D_DUMP_CASE_BASIC(DestroyShaderResourceView, DESTROY_SHADERRESOURCE_VIEW);
+ SVGA3D_DUMP_CASE_BASIC(DefineRenderTargetView, DEFINE_RENDERTARGET_VIEW);
+ SVGA3D_DUMP_CASE_BASIC(DestroyRenderTargetView, DESTROY_RENDERTARGET_VIEW);
+ SVGA3D_DUMP_CASE_BASIC(DefineDepthStencilView, DEFINE_DEPTHSTENCIL_VIEW);
+ SVGA3D_DUMP_CASE_BASIC(DestroyDepthStencilView, DESTROY_DEPTHSTENCIL_VIEW);
+ SVGA3D_DUMP_CASE_LIST(DefineElementLayout, DEFINE_ELEMENTLAYOUT, SVGA3dInputElementDesc);
+ SVGA3D_DUMP_CASE_BASIC(DestroyElementLayout, DESTROY_ELEMENTLAYOUT);
+ SVGA3D_DUMP_CASE_BASIC(DefineBlendState, DEFINE_BLEND_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DestroyBlendState, DESTROY_BLEND_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DefineDepthStencilState, DEFINE_DEPTHSTENCIL_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DestroyDepthStencilState, DESTROY_DEPTHSTENCIL_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DefineRasterizerState, DEFINE_RASTERIZER_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DestroyRasterizerState, DESTROY_RASTERIZER_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DefineSamplerState, DEFINE_SAMPLER_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DestroySamplerState, DESTROY_SAMPLER_STATE);
+ SVGA3D_DUMP_CASE_BASIC(DefineShader, DEFINE_SHADER);
+ SVGA3D_DUMP_CASE_BASIC(DestroyShader, DESTROY_SHADER);
+ SVGA3D_DUMP_CASE_BASIC(BindShader, BIND_SHADER);
+ SVGA3D_DUMP_CASE_BASIC(DefineStreamOutput, DEFINE_STREAMOUTPUT);
+ SVGA3D_DUMP_CASE_BASIC(DestroyStreamOutput, DESTROY_STREAMOUTPUT);
+ SVGA3D_DUMP_CASE_BASIC(SetInputLayout, SET_INPUT_LAYOUT);
+ SVGA3D_DUMP_CASE_LIST(SetVertexBuffers, SET_VERTEX_BUFFERS, SVGA3dVertexBuffer);
+ SVGA3D_DUMP_CASE_BASIC(SetTopology, SET_TOPOLOGY);
+ SVGA3D_DUMP_CASE_BASIC(SetIndexBuffer, SET_INDEX_BUFFER);
+
+ SVGA3D_DUMP_CASE_BASIC(PredCopy, PRED_COPY);
+ SVGA3D_DUMP_CASE_BASIC(UpdateSubResource, UPDATE_SUBRESOURCE);
+ SVGA3D_DUMP_CASE_BASIC(ReadbackSubResource, READBACK_SUBRESOURCE);
+ SVGA3D_DUMP_CASE_BASIC(PredCopyRegion, PRED_COPY_REGION);
+ SVGA3D_DUMP_CASE_BASIC(BufferCopy, BUFFER_COPY);
+ SVGA3D_DUMP_CASE_BASIC(BufferUpdate, BUFFER_UPDATE);
+ SVGA3D_DUMP_CASE_BASIC(GenMips, GENMIPS);
+ SVGA3D_DUMP_CASE_BASIC(TransferFromBuffer, TRANSFER_FROM_BUFFER);
+
+ case SVGA_3D_CMD_DX_SET_RENDERTARGETS:
+ _debug_printf("\tSVGA_3D_CMD_DX_SET_RENDERTARGETS\n");
+ {
+ const SVGA3dCmdDXSetRenderTargets *cmd =
+ (const SVGA3dCmdDXSetRenderTargets *) body;
+ _debug_printf("\t\t.depthStencilViewId = %u\n",
+ cmd->depthStencilViewId);
+ body = (const uint8_t *) &cmd[1];
+ while (body + sizeof(SVGA3dRenderTargetViewId) <= next) {
+ _debug_printf("\t\t.renderTargetViewId = %u\n",
+ *((SVGA3dRenderTargetViewId *) body));
+ body += sizeof(SVGA3dRenderTargetViewId);
+ }
+ }
+ break;
+
+ case SVGA_3D_CMD_SURFACE_DEFINE:
+ _debug_printf("\tSVGA_3D_CMD_SURFACE_DEFINE\n");
+ {
+ const SVGA3dCmdDefineSurface *cmd = (const SVGA3dCmdDefineSurface *)body;
+ dump_SVGA3dCmdDefineSurface(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dSize) <= next) {
+ dump_SVGA3dSize((const SVGA3dSize *)body);
+ body += sizeof(SVGA3dSize);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_SURFACE_DESTROY:
+ _debug_printf("\tSVGA_3D_CMD_SURFACE_DESTROY\n");
+ {
+ const SVGA3dCmdDestroySurface *cmd = (const SVGA3dCmdDestroySurface *)body;
+ dump_SVGA3dCmdDestroySurface(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SURFACE_COPY:
+ _debug_printf("\tSVGA_3D_CMD_SURFACE_COPY\n");
+ {
+ const SVGA3dCmdSurfaceCopy *cmd = (const SVGA3dCmdSurfaceCopy *)body;
+ dump_SVGA3dCmdSurfaceCopy(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dCopyBox) <= next) {
+ dump_SVGA3dCopyBox((const SVGA3dCopyBox *)body);
+ body += sizeof(SVGA3dCopyBox);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_SURFACE_STRETCHBLT:
+ _debug_printf("\tSVGA_3D_CMD_SURFACE_STRETCHBLT\n");
+ {
+ const SVGA3dCmdSurfaceStretchBlt *cmd = (const SVGA3dCmdSurfaceStretchBlt *)body;
+ dump_SVGA3dCmdSurfaceStretchBlt(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SURFACE_DMA:
+ _debug_printf("\tSVGA_3D_CMD_SURFACE_DMA\n");
+ {
+ const SVGA3dCmdSurfaceDMA *cmd = (const SVGA3dCmdSurfaceDMA *)body;
+ dump_SVGA3dCmdSurfaceDMA(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dCopyBox) <= next) {
+ dump_SVGA3dCopyBox((const SVGA3dCopyBox *)body);
+ body += sizeof(SVGA3dCopyBox);
+ }
+ while(body + sizeof(SVGA3dCmdSurfaceDMASuffix) <= next) {
+ dump_SVGA3dCmdSurfaceDMASuffix((const SVGA3dCmdSurfaceDMASuffix *)body);
+ body += sizeof(SVGA3dCmdSurfaceDMASuffix);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_CONTEXT_DEFINE:
+ _debug_printf("\tSVGA_3D_CMD_CONTEXT_DEFINE\n");
+ {
+ const SVGA3dCmdDefineContext *cmd = (const SVGA3dCmdDefineContext *)body;
+ dump_SVGA3dCmdDefineContext(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_CONTEXT_DESTROY:
+ _debug_printf("\tSVGA_3D_CMD_CONTEXT_DESTROY\n");
+ {
+ const SVGA3dCmdDestroyContext *cmd = (const SVGA3dCmdDestroyContext *)body;
+ dump_SVGA3dCmdDestroyContext(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETTRANSFORM:
+ _debug_printf("\tSVGA_3D_CMD_SETTRANSFORM\n");
+ {
+ const SVGA3dCmdSetTransform *cmd = (const SVGA3dCmdSetTransform *)body;
+ dump_SVGA3dCmdSetTransform(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETZRANGE:
+ _debug_printf("\tSVGA_3D_CMD_SETZRANGE\n");
+ {
+ const SVGA3dCmdSetZRange *cmd = (const SVGA3dCmdSetZRange *)body;
+ dump_SVGA3dCmdSetZRange(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETRENDERSTATE:
+ _debug_printf("\tSVGA_3D_CMD_SETRENDERSTATE\n");
+ {
+ const SVGA3dCmdSetRenderState *cmd = (const SVGA3dCmdSetRenderState *)body;
+ dump_SVGA3dCmdSetRenderState(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dRenderState) <= next) {
+ dump_SVGA3dRenderState((const SVGA3dRenderState *)body);
+ body += sizeof(SVGA3dRenderState);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_SETRENDERTARGET:
+ _debug_printf("\tSVGA_3D_CMD_SETRENDERTARGET\n");
+ {
+ const SVGA3dCmdSetRenderTarget *cmd = (const SVGA3dCmdSetRenderTarget *)body;
+ dump_SVGA3dCmdSetRenderTarget(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETTEXTURESTATE:
+ _debug_printf("\tSVGA_3D_CMD_SETTEXTURESTATE\n");
+ {
+ const SVGA3dCmdSetTextureState *cmd = (const SVGA3dCmdSetTextureState *)body;
+ dump_SVGA3dCmdSetTextureState(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dTextureState) <= next) {
+ dump_SVGA3dTextureState((const SVGA3dTextureState *)body);
+ body += sizeof(SVGA3dTextureState);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_SETMATERIAL:
+ _debug_printf("\tSVGA_3D_CMD_SETMATERIAL\n");
+ {
+ const SVGA3dCmdSetMaterial *cmd = (const SVGA3dCmdSetMaterial *)body;
+ dump_SVGA3dCmdSetMaterial(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETLIGHTDATA:
+ _debug_printf("\tSVGA_3D_CMD_SETLIGHTDATA\n");
+ {
+ const SVGA3dCmdSetLightData *cmd = (const SVGA3dCmdSetLightData *)body;
+ dump_SVGA3dCmdSetLightData(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETLIGHTENABLED:
+ _debug_printf("\tSVGA_3D_CMD_SETLIGHTENABLED\n");
+ {
+ const SVGA3dCmdSetLightEnabled *cmd = (const SVGA3dCmdSetLightEnabled *)body;
+ dump_SVGA3dCmdSetLightEnabled(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETVIEWPORT:
+ _debug_printf("\tSVGA_3D_CMD_SETVIEWPORT\n");
+ {
+ const SVGA3dCmdSetViewport *cmd = (const SVGA3dCmdSetViewport *)body;
+ dump_SVGA3dCmdSetViewport(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SETCLIPPLANE:
+ _debug_printf("\tSVGA_3D_CMD_SETCLIPPLANE\n");
+ {
+ const SVGA3dCmdSetClipPlane *cmd = (const SVGA3dCmdSetClipPlane *)body;
+ dump_SVGA3dCmdSetClipPlane(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_CLEAR:
+ _debug_printf("\tSVGA_3D_CMD_CLEAR\n");
+ {
+ const SVGA3dCmdClear *cmd = (const SVGA3dCmdClear *)body;
+ dump_SVGA3dCmdClear(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dRect) <= next) {
+ dump_SVGA3dRect((const SVGA3dRect *)body);
+ body += sizeof(SVGA3dRect);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_PRESENT:
+ _debug_printf("\tSVGA_3D_CMD_PRESENT\n");
+ {
+ const SVGA3dCmdPresent *cmd = (const SVGA3dCmdPresent *)body;
+ dump_SVGA3dCmdPresent(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGA3dCopyRect) <= next) {
+ dump_SVGA3dCopyRect((const SVGA3dCopyRect *)body);
+ body += sizeof(SVGA3dCopyRect);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_SHADER_DEFINE:
+ _debug_printf("\tSVGA_3D_CMD_SHADER_DEFINE\n");
+ {
+ const SVGA3dCmdDefineShader *cmd = (const SVGA3dCmdDefineShader *)body;
+ dump_SVGA3dCmdDefineShader(cmd);
+ body = (const uint8_t *)&cmd[1];
+ //svga_shader_dump((const uint32_t *)body,
+ // (unsigned)(next - body)/sizeof(uint32_t),
+ // FALSE );
+ body = next;
+ }
+ break;
+ case SVGA_3D_CMD_SHADER_DESTROY:
+ _debug_printf("\tSVGA_3D_CMD_SHADER_DESTROY\n");
+ {
+ const SVGA3dCmdDestroyShader *cmd = (const SVGA3dCmdDestroyShader *)body;
+ dump_SVGA3dCmdDestroyShader(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SET_SHADER:
+ _debug_printf("\tSVGA_3D_CMD_SET_SHADER\n");
+ {
+ const SVGA3dCmdSetShader *cmd = (const SVGA3dCmdSetShader *)body;
+ dump_SVGA3dCmdSetShader(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SET_SHADER_CONST:
+ _debug_printf("\tSVGA_3D_CMD_SET_SHADER_CONST\n");
+ {
+ const SVGA3dCmdSetShaderConst *cmd = (const SVGA3dCmdSetShaderConst *)body;
+ uint32 numConsts = 1 + (size - sizeof *cmd) / (4 * sizeof(uint32));
+ dump_SVGA3dCmdSetShaderConst(cmd, numConsts);
+ body = next;
+ }
+ break;
+ case SVGA_3D_CMD_DRAW_PRIMITIVES:
+ _debug_printf("\tSVGA_3D_CMD_DRAW_PRIMITIVES\n");
+ {
+ const SVGA3dCmdDrawPrimitives *cmd = (const SVGA3dCmdDrawPrimitives *)body;
+ unsigned i, j;
+ dump_SVGA3dCmdDrawPrimitives(cmd);
+ body = (const uint8_t *)&cmd[1];
+ for(i = 0; i < cmd->numVertexDecls; ++i) {
+ dump_SVGA3dVertexDecl((const SVGA3dVertexDecl *)body);
+ body += sizeof(SVGA3dVertexDecl);
+ }
+ for(j = 0; j < cmd->numRanges; ++j) {
+ dump_SVGA3dPrimitiveRange((const SVGA3dPrimitiveRange *)body);
+ body += sizeof(SVGA3dPrimitiveRange);
+ }
+ while(body + sizeof(SVGA3dVertexDivisor) <= next) {
+ dump_SVGA3dVertexDivisor((const SVGA3dVertexDivisor *)body);
+ body += sizeof(SVGA3dVertexDivisor);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_SETSCISSORRECT:
+ _debug_printf("\tSVGA_3D_CMD_SETSCISSORRECT\n");
+ {
+ const SVGA3dCmdSetScissorRect *cmd = (const SVGA3dCmdSetScissorRect *)body;
+ dump_SVGA3dCmdSetScissorRect(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_BEGIN_QUERY:
+ _debug_printf("\tSVGA_3D_CMD_BEGIN_QUERY\n");
+ {
+ const SVGA3dCmdBeginQuery *cmd = (const SVGA3dCmdBeginQuery *)body;
+ dump_SVGA3dCmdBeginQuery(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_END_QUERY:
+ _debug_printf("\tSVGA_3D_CMD_END_QUERY\n");
+ {
+ const SVGA3dCmdEndQuery *cmd = (const SVGA3dCmdEndQuery *)body;
+ dump_SVGA3dCmdEndQuery(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_WAIT_FOR_QUERY:
+ _debug_printf("\tSVGA_3D_CMD_WAIT_FOR_QUERY\n");
+ {
+ const SVGA3dCmdWaitForQuery *cmd = (const SVGA3dCmdWaitForQuery *)body;
+ dump_SVGA3dCmdWaitForQuery(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN:
+ _debug_printf("\tSVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN\n");
+ {
+ const SVGA3dCmdBlitSurfaceToScreen *cmd = (const SVGA3dCmdBlitSurfaceToScreen *)body;
+ dump_SVGA3dCmdBlitSurfaceToScreen(cmd);
+ body = (const uint8_t *)&cmd[1];
+ while(body + sizeof(SVGASignedRect) <= next) {
+ dump_SVGASignedRect((const SVGASignedRect *)body);
+ body += sizeof(SVGASignedRect);
+ }
+ }
+ break;
+ case SVGA_3D_CMD_DEFINE_GB_CONTEXT:
+ _debug_printf("\tSVGA_3D_CMD_DEFINE_GB_CONTEXT\n");
+ {
+ const SVGA3dCmdDefineGBContext *cmd = (const SVGA3dCmdDefineGBContext *) body;
+ dump_SVGA3dCmdDefineGBContext(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_BIND_GB_CONTEXT:
+ _debug_printf("\tSVGA_3D_CMD_BIND_GB_CONTEXT\n");
+ {
+ const SVGA3dCmdBindGBContext *cmd = (const SVGA3dCmdBindGBContext *) body;
+ dump_SVGA3dCmdBindGBContext(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_DESTROY_GB_CONTEXT:
+ _debug_printf("\tSVGA_3D_CMD_DESTROY_GB_CONTEXT\n");
+ {
+ const SVGA3dCmdDestroyGBContext *cmd = (const SVGA3dCmdDestroyGBContext *) body;
+ dump_SVGA3dCmdDestroyGBContext(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_DEFINE_GB_SHADER:
+ _debug_printf("\tSVGA_3D_CMD_DEFINE_GB_SHADER\n");
+ {
+ const SVGA3dCmdDefineGBShader *cmd = (const SVGA3dCmdDefineGBShader *) body;
+ dump_SVGA3dCmdDefineGBShader(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_BIND_GB_SHADER:
+ _debug_printf("\tSVGA_3D_CMD_BIND_GB_SHADER\n");
+ {
+ const SVGA3dCmdBindGBShader *cmd = (const SVGA3dCmdBindGBShader *) body;
+ dump_SVGA3dCmdBindGBShader(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_DESTROY_GB_SHADER:
+ _debug_printf("\tSVGA_3D_CMD_DESTROY_GB_SHADER\n");
+ {
+ const SVGA3dCmdDestroyGBShader *cmd = (const SVGA3dCmdDestroyGBShader *) body;
+ dump_SVGA3dCmdDestroyGBShader(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_BIND_GB_SURFACE:
+ _debug_printf("\tSVGA_3D_CMD_BIND_GB_SURFACE\n");
+ {
+ const SVGA3dCmdBindGBSurface *cmd = (const SVGA3dCmdBindGBSurface *) body;
+ dump_SVGA3dCmdBindGBSurface(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_UPDATE_GB_SURFACE:
+ _debug_printf("\tSVGA_3D_CMD_UPDATE_GB_SURFACE\n");
+ {
+ const SVGA3dCmdUpdateGBSurface *cmd = (const SVGA3dCmdUpdateGBSurface *) body;
+ dump_SVGA3dCmdUpdateGBSurface(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_READBACK_GB_IMAGE:
+ _debug_printf("\tSVGA_3D_CMD_READBACK_GB_IMAGE:\n");
+ {
+ const SVGA3dCmdReadbackGBImage *cmd = (SVGA3dCmdReadbackGBImage *) body;
+ dump_SVGA3dCmdReadbackGBImage(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_UPDATE_GB_IMAGE:
+ _debug_printf("\tSVGA_3D_CMD_UPDATE_GB_IMAGE\n");
+ {
+ const SVGA3dCmdUpdateGBImage *cmd = (const SVGA3dCmdUpdateGBImage *) body;
+ dump_SVGA3dCmdUpdateGBImage(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_INVALIDATE_GB_IMAGE:
+ _debug_printf("\tSVGA_3D_CMD_INVALIDATE_GB_IMAGE\n");
+ {
+ const SVGA3dCmdInvalidateGBImage *cmd = (const SVGA3dCmdInvalidateGBImage *) body;
+ dump_SVGA3dCmdInvalidateGBImage(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL:
+ _debug_printf("\tSVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL\n");
+ {
+ const SVGA3dCmdInvalidateGBImagePartial *cmd = (const SVGA3dCmdInvalidateGBImagePartial *) body;
+ dump_SVGA3dCmdInvalidateGBImagePartial(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE:
+ _debug_printf("\tSVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE\n");
+ {
+ /* XXX Note: re-using the SVGA3dCmdSetShaderConst code here */
+ const SVGA3dCmdSetGBShaderConstInline *cmd = (const SVGA3dCmdSetGBShaderConstInline *)body;
+ uint32 numConsts = (size - sizeof *cmd) / (4 * sizeof(uint32));
+ dump_SVGA3dCmdSetGBShaderConstInline(cmd, numConsts);
+ body = next;
+ }
+ break;
+ case SVGA_3D_CMD_INVALIDATE_GB_SURFACE:
+ _debug_printf("\tSVGA_3D_CMD_INVALIDATE_GB_SURFACE\n");
+ {
+ const SVGA3dCmdInvalidateGBSurface *cmd = (const SVGA3dCmdInvalidateGBSurface *)body;
+ dump_SVGA3dCmdInvalidateGBSurface(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ case SVGA_3D_CMD_INTRA_SURFACE_COPY:
+ _debug_printf("\tSVGA_3D_CMD_INTRA_SURFACE_COPY\n");
+ {
+ const SVGA3dCmdIntraSurfaceCopy *cmd = (const SVGA3dCmdIntraSurfaceCopy *)body;
+ dump_SVGA3dCmdIntraSurfaceCopy(cmd);
+ body = (const uint8_t *)&cmd[1];
+ }
+ break;
+ default:
+ _debug_printf("\t0x%08x\n", cmd_id);
+ break;
+ }
+
+ while(body + sizeof(uint32_t) <= next) {
+ _debug_printf("\t\t0x%08x\n", *(const uint32_t *)body);
+ body += sizeof(uint32_t);
+ }
+ while(body + sizeof(uint32_t) <= next)
+ _debug_printf("\t\t0x%02x\n", *body++);
+}
+
+
+void
+svga_dump_commands(const void *commands, uint32_t size)
+{
+ const uint8_t *next = commands;
+ const uint8_t *last = next + size;
+
+ //assert(size % sizeof(uint32_t) == 0);
+
+ while(next < last) {
+ const uint32_t cmd_id = *(const uint32_t *)next;
+
+ if(SVGA_3D_CMD_BASE <= cmd_id && cmd_id < SVGA_3D_CMD_MAX) {
+ const SVGA3dCmdHeader *header = (const SVGA3dCmdHeader *)next;
+ const uint8_t *body = (const uint8_t *)&header[1];
+
+ next = body + header->size;
+ if(next > last)
+ break;
+
+ svga_dump_command(cmd_id, body, header->size);
+ }
+ else if(cmd_id == SVGA_CMD_FENCE) {
+ _debug_printf("\tSVGA_CMD_FENCE\n");
+ _debug_printf("\t\t0x%08x\n", ((const uint32_t *)next)[1]);
+ next += 2*sizeof(uint32_t);
+ }
+ else {
+ _debug_printf("\t0x%08x\n", cmd_id);
+ next += sizeof(uint32_t);
+ }
+ }
+}
+#endif /* LOG_ENABLED */
diff --git a/src/VBox/Devices/Graphics/svgadump/svga_dump.h b/src/VBox/Devices/Graphics/svgadump/svga_dump.h
new file mode 100644
index 00000000..c252ac74
--- /dev/null
+++ b/src/VBox/Devices/Graphics/svgadump/svga_dump.h
@@ -0,0 +1,39 @@
+/**********************************************************
+ * Copyright 2009 VMware, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+#ifndef SVGA_DUMP_H_
+#define SVGA_DUMP_H_
+
+#include <iprt/types.h>
+
+RT_C_DECLS_BEGIN
+void
+svga_dump_command(uint32_t cmd_id, const void *data, uint32_t size);
+
+void
+svga_dump_commands(const void *commands, uint32_t size);
+RT_C_DECLS_END
+
+#endif /* SVGA_DUMP_H_ */
diff --git a/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c b/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c
new file mode 100644
index 00000000..cc7011c8
--- /dev/null
+++ b/src/VBox/Devices/Graphics/testcase/dump-vmwgfx.c
@@ -0,0 +1,639 @@
+/* $Id: dump-vmwgfx.c $ */
+/** @file
+ * dump-vmwgfx.c - Dumps parameters and capabilities of vmwgfx.ko.
+ */
+
+/*
+ * Copyright (C) 2013-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+
+/*********************************************************************************************************************************
+* Header Files *
+*********************************************************************************************************************************/
+#include <assert.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+
+/*********************************************************************************************************************************
+* Defined Constants And Macros *
+*********************************************************************************************************************************/
+#define DRM_IOCTL_BASE 'd'
+#define DRM_COMMAND_BASE 0x40
+#define DRM_VMW_GET_PARAM 0
+#define DRM_VMW_GET_3D_CAP 13
+#define DRM_IOCTL_VMW_GET_PARAM _IOWR(DRM_IOCTL_BASE, DRM_COMMAND_BASE + DRM_VMW_GET_PARAM, struct drm_vmw_getparam_arg)
+#define DRM_IOCTL_VMW_GET_3D_CAP _IOW(DRM_IOCTL_BASE, DRM_COMMAND_BASE + DRM_VMW_GET_3D_CAP, struct drm_vmw_get_3d_cap_arg)
+
+#define SVGA3DCAPS_RECORD_DEVCAPS 0x100
+
+#define DRM_VMW_PARAM_NUM_STREAMS 0
+#define DRM_VMW_PARAM_FREE_STREAMS 1
+#define DRM_VMW_PARAM_3D 2
+#define DRM_VMW_PARAM_HW_CAPS 3
+#define DRM_VMW_PARAM_FIFO_CAPS 4
+#define DRM_VMW_PARAM_MAX_FB_SIZE 5
+#define DRM_VMW_PARAM_FIFO_HW_VERSION 6
+#define DRM_VMW_PARAM_MAX_SURF_MEMORY 7
+#define DRM_VMW_PARAM_3D_CAP_SIZE 8
+#define DRM_VMW_PARAM_MAX_MOB_MEMORY 9
+#define DRM_VMW_PARAM_MAX_MOB_SIZE 10
+
+
+/*********************************************************************************************************************************
+* Structures and Typedefs *
+*********************************************************************************************************************************/
+struct drm_vmw_get_3d_cap_arg
+{
+ uint64_t buffer;
+ uint32_t max_size;
+ uint32_t pad64;
+};
+
+
+struct SVGA3dCapsRecordHeader
+{
+ uint32_t length;
+ uint32_t type;
+};
+
+struct SVGA3dCapsRecord
+{
+ /* Skipped if DRM_VMW_PARAM_MAX_MOB_MEMORY is read. */
+ struct SVGA3dCapsRecordHeader header;
+ uint32_t data[1];
+};
+
+struct drm_vmw_getparam_arg
+{
+ uint64_t value;
+ uint32_t param;
+ uint32_t pad64;
+};
+
+
+typedef struct FLAGDESC
+{
+ uint32_t fMask;
+ const char *pszName;
+} FLAGDESC;
+typedef FLAGDESC const *PCFLAGDESC;
+
+
+/*********************************************************************************************************************************
+* Global Variables *
+*********************************************************************************************************************************/
+/** The size of the 3D capabilities. */
+static uint32_t g_cb3dCaps;
+/** Set if the driver will return the new 3D capability format. */
+static int g_fNew3dCapFormat = 0;
+/** The SVGA_CAP_XXX mask for the card. */
+static uint64_t g_fHwCaps = 0;
+
+/** Names for the vmsvga 3d capabilities, prefixed with format type hint char. (Copied from DevSVGA.cpp.) */
+static const char * const g_apszVmSvgaDevCapNames[] =
+{
+ "x3D", /* = 0 */
+ "xMAX_LIGHTS",
+ "xMAX_TEXTURES",
+ "xMAX_CLIP_PLANES",
+ "xVERTEX_SHADER_VERSION",
+ "xVERTEX_SHADER",
+ "xFRAGMENT_SHADER_VERSION",
+ "xFRAGMENT_SHADER",
+ "xMAX_RENDER_TARGETS",
+ "xS23E8_TEXTURES",
+ "xS10E5_TEXTURES",
+ "xMAX_FIXED_VERTEXBLEND",
+ "xD16_BUFFER_FORMAT",
+ "xD24S8_BUFFER_FORMAT",
+ "xD24X8_BUFFER_FORMAT",
+ "xQUERY_TYPES",
+ "xTEXTURE_GRADIENT_SAMPLING",
+ "rMAX_POINT_SIZE",
+ "xMAX_SHADER_TEXTURES",
+ "xMAX_TEXTURE_WIDTH",
+ "xMAX_TEXTURE_HEIGHT",
+ "xMAX_VOLUME_EXTENT",
+ "xMAX_TEXTURE_REPEAT",
+ "xMAX_TEXTURE_ASPECT_RATIO",
+ "xMAX_TEXTURE_ANISOTROPY",
+ "xMAX_PRIMITIVE_COUNT",
+ "xMAX_VERTEX_INDEX",
+ "xMAX_VERTEX_SHADER_INSTRUCTIONS",
+ "xMAX_FRAGMENT_SHADER_INSTRUCTIONS",
+ "xMAX_VERTEX_SHADER_TEMPS",
+ "xMAX_FRAGMENT_SHADER_TEMPS",
+ "xTEXTURE_OPS",
+ "xSURFACEFMT_X8R8G8B8",
+ "xSURFACEFMT_A8R8G8B8",
+ "xSURFACEFMT_A2R10G10B10",
+ "xSURFACEFMT_X1R5G5B5",
+ "xSURFACEFMT_A1R5G5B5",
+ "xSURFACEFMT_A4R4G4B4",
+ "xSURFACEFMT_R5G6B5",
+ "xSURFACEFMT_LUMINANCE16",
+ "xSURFACEFMT_LUMINANCE8_ALPHA8",
+ "xSURFACEFMT_ALPHA8",
+ "xSURFACEFMT_LUMINANCE8",
+ "xSURFACEFMT_Z_D16",
+ "xSURFACEFMT_Z_D24S8",
+ "xSURFACEFMT_Z_D24X8",
+ "xSURFACEFMT_DXT1",
+ "xSURFACEFMT_DXT2",
+ "xSURFACEFMT_DXT3",
+ "xSURFACEFMT_DXT4",
+ "xSURFACEFMT_DXT5",
+ "xSURFACEFMT_BUMPX8L8V8U8",
+ "xSURFACEFMT_A2W10V10U10",
+ "xSURFACEFMT_BUMPU8V8",
+ "xSURFACEFMT_Q8W8V8U8",
+ "xSURFACEFMT_CxV8U8",
+ "xSURFACEFMT_R_S10E5",
+ "xSURFACEFMT_R_S23E8",
+ "xSURFACEFMT_RG_S10E5",
+ "xSURFACEFMT_RG_S23E8",
+ "xSURFACEFMT_ARGB_S10E5",
+ "xSURFACEFMT_ARGB_S23E8",
+ "xMISSING62",
+ "xMAX_VERTEX_SHADER_TEXTURES",
+ "xMAX_SIMULTANEOUS_RENDER_TARGETS",
+ "xSURFACEFMT_V16U16",
+ "xSURFACEFMT_G16R16",
+ "xSURFACEFMT_A16B16G16R16",
+ "xSURFACEFMT_UYVY",
+ "xSURFACEFMT_YUY2",
+ "xMULTISAMPLE_NONMASKABLESAMPLES",
+ "xMULTISAMPLE_MASKABLESAMPLES",
+ "xALPHATOCOVERAGE",
+ "xSUPERSAMPLE",
+ "xAUTOGENMIPMAPS",
+ "xSURFACEFMT_NV12",
+ "xSURFACEFMT_AYUV",
+ "xMAX_CONTEXT_IDS",
+ "xMAX_SURFACE_IDS",
+ "xSURFACEFMT_Z_DF16",
+ "xSURFACEFMT_Z_DF24",
+ "xSURFACEFMT_Z_D24S8_INT",
+ "xSURFACEFMT_BC4_UNORM",
+ "xSURFACEFMT_BC5_UNORM", /* 83 */
+ "xVGPU10",
+ "xVIDEO_DECODE",
+ "xVIDEO_PROCESS",
+ "xLINE_AA",
+ "xLINE_STRIPPLE",
+ "fMAX_LINE_WIDTH",
+ "fMAX_AA_LINE_WIDTH", /* 90 */
+ "xSURFACEFMT_YV12",
+ "xLOGICOPS",
+ "xSCREENTARGETS",
+ "xTS_COLOR_KEY",
+ "xDX", /* 95 */
+};
+
+/** SVGA_CAP flag descriptors. */
+static FLAGDESC const g_aVmSvgaCapFlags[] =
+{
+ { UINT32_C(0x00000001), "unknown-bit-0" },
+ { UINT32_C(0x00000002), "SVGA_CAP_RECT_COPY" },
+ { UINT32_C(0x00000004), "unknown-bit-2" },
+ { UINT32_C(0x00000008), "unknown-bit-3" },
+ { UINT32_C(0x00000010), "unknown-bit-4" },
+ { UINT32_C(0x00000020), "SVGA_CAP_CURSOR" },
+ { UINT32_C(0x00000040), "SVGA_CAP_CURSOR_BYPASS" },
+ { UINT32_C(0x00000080), "SVGA_CAP_CURSOR_BYPASS_2" },
+ { UINT32_C(0x00000100), "SVGA_CAP_8BIT_EMULATION" },
+ { UINT32_C(0x00000200), "SVGA_CAP_ALPHA_CURSOR" },
+ { UINT32_C(0x00000400), "unknown-bit-10" },
+ { UINT32_C(0x00000800), "unknown-bit-11" },
+ { UINT32_C(0x00001000), "unknown-bit-12" },
+ { UINT32_C(0x00002000), "unknown-bit-13" },
+ { UINT32_C(0x00004000), "SVGA_CAP_3D" },
+ { UINT32_C(0x00008000), "SVGA_CAP_EXTENDED_FIFO" },
+ { UINT32_C(0x00010000), "SVGA_CAP_MULTIMON" },
+ { UINT32_C(0x00020000), "SVGA_CAP_PITCHLOCK" },
+ { UINT32_C(0x00040000), "SVGA_CAP_IRQMASK" },
+ { UINT32_C(0x00080000), "SVGA_CAP_DISPLAY_TOPOLOGY" },
+ { UINT32_C(0x00100000), "SVGA_CAP_GMR" },
+ { UINT32_C(0x00200000), "SVGA_CAP_TRACES" },
+ { UINT32_C(0x00400000), "SVGA_CAP_GMR2" },
+ { UINT32_C(0x00800000), "SVGA_CAP_SCREEN_OBJECT_2" },
+ { UINT32_C(0x01000000), "SVGA_CAP_COMMAND_BUFFERS" },
+ { UINT32_C(0x02000000), "SVGA_CAP_DEAD1" },
+ { UINT32_C(0x04000000), "SVGA_CAP_CMD_BUFFERS_2" },
+ { UINT32_C(0x08000000), "SVGA_CAP_GBOBJECTS" },
+ { UINT32_C(0x10000000), "unknown-bit-28" },
+ { UINT32_C(0x20000000), "unknown-bit-29" },
+ { UINT32_C(0x40000000), "unknown-bit-30" },
+ { UINT32_C(0x80000000), "unknown-bit-31" },
+};
+
+/** SVGA_FIFO_CAP flag descriptors. */
+static FLAGDESC const g_aVmSvgaFifoCapFlags[] =
+{
+ { UINT32_C(0x00000001), "SVGA_FIFO_CAP_FENCE" },
+ { UINT32_C(0x00000002), "SVGA_FIFO_CAP_ACCELFRONT" },
+ { UINT32_C(0x00000004), "SVGA_FIFO_CAP_PITCHLOCK" },
+ { UINT32_C(0x00000008), "SVGA_FIFO_CAP_VIDEO" },
+ { UINT32_C(0x00000010), "SVGA_FIFO_CAP_CURSOR_BYPASS_3" },
+ { UINT32_C(0x00000020), "SVGA_FIFO_CAP_ESCAPE" },
+ { UINT32_C(0x00000040), "SVGA_FIFO_CAP_RESERVE" },
+ { UINT32_C(0x00000080), "SVGA_FIFO_CAP_SCREEN_OBJECT" },
+ { UINT32_C(0x00000100), "SVGA_FIFO_CAP_GMR2/SVGA_FIFO_CAP_3D_HWVERSION_REVISED" },
+ { UINT32_C(0x00000200), "SVGA_FIFO_CAP_SCREEN_OBJECT_2" },
+ { UINT32_C(0x00000400), "SVGA_FIFO_CAP_DEAD" },
+ { UINT32_C(0x00000800), "unknown-bit-11" },
+ { UINT32_C(0x00001000), "unknown-bit-12" },
+ { UINT32_C(0x00002000), "unknown-bit-13" },
+ { UINT32_C(0x00004000), "unknown-bit-14" },
+ { UINT32_C(0x00008000), "unknown-bit-15" },
+ { UINT32_C(0x00010000), "unknown-bit-16" },
+ { UINT32_C(0x00020000), "unknown-bit-17" },
+ { UINT32_C(0x00040000), "unknown-bit-18" },
+ { UINT32_C(0x00080000), "unknown-bit-19" },
+ { UINT32_C(0x00100000), "unknown-bit-20" },
+ { UINT32_C(0x00200000), "unknown-bit-21" },
+ { UINT32_C(0x00400000), "unknown-bit-22" },
+ { UINT32_C(0x00800000), "unknown-bit-23" },
+ { UINT32_C(0x01000000), "unknown-bit-24" },
+ { UINT32_C(0x02000000), "unknown-bit-25" },
+ { UINT32_C(0x04000000), "unknown-bit-26" },
+ { UINT32_C(0x08000000), "unknown-bit-27" },
+ { UINT32_C(0x10000000), "unknown-bit-28" },
+ { UINT32_C(0x20000000), "unknown-bit-29" },
+ { UINT32_C(0x40000000), "unknown-bit-30" },
+ { UINT32_C(0x80000000), "unknown-bit-31" },
+};
+
+
+static void DisplayFlags(PCFLAGDESC paFlagDescs, uint32_t fFlags, unsigned cchIndent)
+{
+ uint32_t i;
+ for (i = 0; i < 32; i++)
+ {
+ assert(paFlagDescs[i].fMask == (UINT32_C(1) << i));
+ if (paFlagDescs[i].fMask & fFlags)
+ printf("%*s%s\n", cchIndent, "", paFlagDescs[i].pszName);
+ }
+}
+
+
+static int QueryParam(int fd, uint32_t uParam, const char *pszParam)
+{
+ struct drm_vmw_getparam_arg Arg;
+ int rc;
+
+ Arg.value = 0;
+ Arg.param = uParam;
+ Arg.pad64 = 0;
+ rc = ioctl(fd, DRM_IOCTL_VMW_GET_PARAM, &Arg);
+ if (rc >= 0)
+ {
+ switch (uParam)
+ {
+ case DRM_VMW_PARAM_3D:
+ printf("%30s: %#llx -- enabled: %s\n", pszParam, Arg.value,
+ Arg.value == 0 ? "no" : Arg.value == 1 ? "yes" : "huh?");
+ break;
+
+ case DRM_VMW_PARAM_FIFO_HW_VERSION:
+ printf("%30s: %#llx -- major=%llu minor=%llu\n", pszParam, Arg.value, Arg.value >> 16, Arg.value & 0xffff);
+ break;
+
+ case DRM_VMW_PARAM_HW_CAPS:
+ printf("%30s: %#llx\n", pszParam, Arg.value);
+ DisplayFlags(g_aVmSvgaCapFlags, (uint32_t)Arg.value, 32);
+ g_fHwCaps = Arg.value;
+ break;
+
+ case DRM_VMW_PARAM_FIFO_CAPS:
+ printf("%30s: %#llx\n", pszParam, Arg.value);
+ DisplayFlags(g_aVmSvgaFifoCapFlags, (uint32_t)Arg.value, 32);
+ break;
+
+ case DRM_VMW_PARAM_3D_CAP_SIZE:
+ printf("%30s: %#llx (%lld) [bytes]\n", pszParam, Arg.value, Arg.value);
+ g_cb3dCaps = (uint32_t)Arg.value;
+ break;
+
+ default:
+ printf("%30s: %#llx (%lld)\n", pszParam, Arg.value, Arg.value);
+ break;
+ }
+ }
+ else
+ printf("%32s: failed: rc=%d errno=%d (%s)\n", pszParam, rc, errno, strerror(errno));
+ return rc;
+}
+
+
+static int Dump3DParameters(int fd, int rcExit)
+{
+ int rc;
+ printf("\n**** vmwgfx parameters *****\n");
+#define QUERY_PARAM(nm) QueryParam(fd, nm, #nm)
+ rc = QUERY_PARAM(DRM_VMW_PARAM_HW_CAPS);
+ if (rc < 0)
+ rcExit = 1;
+ QUERY_PARAM(DRM_VMW_PARAM_FIFO_CAPS);
+ QUERY_PARAM(DRM_VMW_PARAM_FIFO_HW_VERSION);
+ QUERY_PARAM(DRM_VMW_PARAM_3D);
+ QUERY_PARAM(DRM_VMW_PARAM_NUM_STREAMS);
+ QUERY_PARAM(DRM_VMW_PARAM_FREE_STREAMS);
+ QUERY_PARAM(DRM_VMW_PARAM_MAX_FB_SIZE);
+ QUERY_PARAM(DRM_VMW_PARAM_MAX_SURF_MEMORY);
+ QUERY_PARAM(DRM_VMW_PARAM_3D_CAP_SIZE);
+ rc = QUERY_PARAM(DRM_VMW_PARAM_MAX_MOB_MEMORY);
+ if (rc >= 0)
+ g_fNew3dCapFormat = g_fHwCaps & UINT32_C(0x08000000) /*SVGA_CAP_GBOBJECTS */;
+ QUERY_PARAM(DRM_VMW_PARAM_MAX_MOB_SIZE);
+ return rcExit;
+}
+
+
+static void PrintOne3DCapability(uint32_t iCap, uint32_t uValue)
+{
+ union
+ {
+ float rValue;
+ uint32_t u32Value;
+ } u;
+ u.u32Value = uValue;
+ if (iCap < sizeof(g_apszVmSvgaDevCapNames) / sizeof(g_apszVmSvgaDevCapNames[0]))
+ {
+ const char *pszName = g_apszVmSvgaDevCapNames[iCap];
+ if (pszName[0] == 'x')
+ printf(" cap[%u]=%#010x {%s}\n", iCap, u.u32Value, pszName + 1);
+ else
+ printf(" cap[%u]=%d.%04u {%s}\n", iCap, (int)u.rValue, (unsigned)(u.rValue * 1000) % 10000, pszName + 1);
+ }
+ else
+ printf(" cap[%u]=%#010x\n", iCap, u.u32Value);
+}
+
+
+static void DumpOld3dCapabilityRecords(struct SVGA3dCapsRecord *pCur)
+{
+ for (;;)
+ {
+ printf(" SVGA3dCapsRecordHeader: length=%#x (%d) type=%d\n",
+ pCur->header.length, pCur->header.length, pCur->header.type);
+ if (pCur->header.length == 0)
+ break;
+
+ uint32_t i;
+ for (i = 0; i < pCur->header.length - 2; i += 2)
+ PrintOne3DCapability(pCur->data[i], pCur->data[i + 1]);
+ pCur = (struct SVGA3dCapsRecord *)((uint32_t *)pCur + pCur->header.length);
+ }
+}
+
+
+static int Dump3DCapabilities(int fd, int rcExit)
+{
+ struct SVGA3dCapsRecord *pBuf;
+ struct drm_vmw_get_3d_cap_arg Caps3D;
+ int rc;
+
+
+ printf("\n**** 3D capabilities *****\n");
+ Caps3D.pad64 = 0;
+ Caps3D.max_size = 1024 * sizeof(uint32_t);
+ pBuf = (struct SVGA3dCapsRecord *)calloc(Caps3D.max_size, 1);
+ Caps3D.buffer = (uintptr_t)pBuf;
+
+ errno = 0;
+ rc = ioctl(fd, DRM_IOCTL_VMW_GET_3D_CAP, &Caps3D);
+ if (rc >= 0)
+ {
+ printf("DRM_IOCTL_VMW_GET_3D_CAP: rc=%d\n", rc);
+ if (!g_fNew3dCapFormat)
+ DumpOld3dCapabilityRecords(pBuf);
+ else
+ {
+ uint32_t const *pau32Data = (uint32_t const *)pBuf;
+ uint32_t cCaps = g_cb3dCaps / sizeof(uint32_t);
+ uint32_t iCap;
+ for (iCap = 0; iCap < cCaps; iCap++)
+ PrintOne3DCapability(iCap, pau32Data[iCap]);
+ }
+ }
+ else
+ {
+ fprintf(stderr, "DRM_IOCTL_VMW_GET_3D_CAP failed: %d - %s\n", errno, strerror(errno));
+ rcExit = 1;
+ }
+
+ free(pBuf);
+ return rcExit;
+}
+
+
+static int FindAndMapFifo(uint32_t const **ppau32Fifo, uint32_t *pcbFifo, int rcExit)
+{
+ const char g_szDir[] = "/sys/bus/pci/devices";
+ DIR *pDir = opendir(g_szDir);
+ if (pDir)
+ {
+ struct dirent *pEntry;
+ char szPath[4096];
+ size_t offPath = sizeof(g_szDir);
+ memcpy(szPath, g_szDir, sizeof(g_szDir));
+ szPath[offPath - 1] = '/';
+
+ while ((pEntry = readdir(pDir)) != NULL)
+ {
+ struct stat st;
+ size_t cchName = strlen(pEntry->d_name);
+ memcpy(&szPath[offPath], pEntry->d_name, cchName);
+ strcpy(&szPath[offPath + cchName], "/boot_vga");
+ if (stat(szPath, &st) >= 0)
+ {
+ /* Found something that looks like the VGA device. Try map resource2. */
+ strcpy(&szPath[offPath + cchName], "/resource2");
+ if (stat(szPath, &st) >= 0)
+ {
+ int fdFifo = open(szPath, O_RDONLY);
+ if (fdFifo >= 0)
+ {
+ *pcbFifo = (uint32_t)st.st_size;
+ *ppau32Fifo = (uint32_t *)mmap(NULL, *pcbFifo, PROT_READ, MAP_SHARED | MAP_FILE, fdFifo, 0);
+ if (*ppau32Fifo != MAP_FAILED)
+ {
+ printf("info: Mapped %s at %p LB %#x\n", szPath, *ppau32Fifo, *pcbFifo);
+ close(fdFifo);
+ closedir(pDir);
+ return rcExit;
+ }
+
+ fprintf(stderr, "error: failed to mmap '%s': %d (%s)\n", szPath, errno, strerror(errno));
+ close(fdFifo);
+ }
+ else
+ fprintf(stderr, "error: failed to open '%s': %d (%s)\n", g_szDir, errno, strerror(errno));
+ }
+ else
+ fprintf(stderr, "error: boot_vga devices doesn't have '%s'. (%d [%s])\n", szPath, errno, strerror(errno));
+ }
+ } /* for each directory entry */
+
+ closedir(pDir);
+ }
+ else
+ fprintf(stderr, "error: failed to open '%s': %d (%s)\n", g_szDir, errno, strerror(errno));
+ return 1;
+}
+
+
+static int DumpFifoStuff(uint32_t const *pau32Fifo, uint32_t cbFifo, int rcExit)
+{
+ uint32_t cMax = cbFifo / sizeof(uint32_t);
+ uint32_t i, iMin, iMax;
+
+ printf("\n***** FIFO - %u bytes (%#x) *****\n", cbFifo, cbFifo);
+ if (cMax >= 4)
+ {
+ iMin = pau32Fifo[0] / sizeof(uint32_t);
+ printf(" FIFO_MIN: %#09x -- iMin=%#08x\n", pau32Fifo[0], iMin);
+ iMax = pau32Fifo[1] / sizeof(uint32_t);
+ printf(" FIFO_MAX: %#09x -- iMax=%#08x\n", pau32Fifo[1], iMax);
+ printf(" FIFO_NEXT_CMD: %#09x -- iNextCmd=%#08x\n", pau32Fifo[2], (uint32_t)(pau32Fifo[2] / sizeof(uint32_t)));
+ printf(" FIFO_STOP: %#09x -- iStop=%#08x\n", pau32Fifo[3], (uint32_t)(pau32Fifo[3] / sizeof(uint32_t)));
+ }
+ else
+ {
+ fprintf(stderr, "error: cbFifo=%#x is too small\n", cbFifo);
+ return 1;
+ }
+ if (iMin > 4)
+ {
+ printf(" FIFO_CAPABILITIES: %#x (%d)\n", pau32Fifo[4], pau32Fifo[4]);
+ DisplayFlags(g_aVmSvgaFifoCapFlags, pau32Fifo[4], 28);
+ }
+ if (iMin > 5)
+ printf(" FIFO_FLAGS: %#x (%d)\n", pau32Fifo[5], pau32Fifo[5]);
+ if (iMin > 6)
+ printf(" FIFO_FENCE: %#x (%d)\n", pau32Fifo[6], pau32Fifo[6]);
+ if (iMin > 7)
+ printf(" FIFO_3D_VERSION: %#x -- %u.%u\n", pau32Fifo[7], pau32Fifo[7] >> 16, pau32Fifo[7] & 0xffff);
+ if (iMin > 8)
+ printf(" FIFO_PITCH_LOCK: %#x (%d)\n", pau32Fifo[8], pau32Fifo[8]);
+ if (iMin > 9)
+ printf(" FIFO_CURSOR_ON: %#x (%d)\n", pau32Fifo[9], pau32Fifo[9]);
+ if (iMin > 10)
+ printf(" FIFO_CURSOR_X: %#x (%d)\n", pau32Fifo[10], pau32Fifo[10]);
+ if (iMin > 11)
+ printf(" FIFO_CURSOR_Y: %#x (%d)\n", pau32Fifo[11], pau32Fifo[11]);
+ if (iMin > 12)
+ printf(" FIFO_CURSOR_COUNT: %#x (%d)\n", pau32Fifo[12], pau32Fifo[12]);
+ if (iMin > 13)
+ printf(" FIFO_CURSOR_LAST_UPDATED: %#x (%d)\n", pau32Fifo[13], pau32Fifo[13]);
+ if (iMin > 14)
+ printf(" FIFO_RESERVED: %#x (%d)\n", pau32Fifo[14], pau32Fifo[14]);
+ if (iMin > 15)
+ printf(" FIFO_CURSOR_SCREEN_ID: %#x (%d)\n", pau32Fifo[15], pau32Fifo[15]);
+ if (iMin > 16)
+ printf(" FIFO_DEAD: %#x (%d)\n", pau32Fifo[16], pau32Fifo[16]);
+ if (iMin > 17)
+ printf("FIFO_3D_HWVERSION_REVISED: %#x -- %u.%u\n", pau32Fifo[17], pau32Fifo[17] >> 16, pau32Fifo[7] & 0xffff);
+
+ for (i = 18; i < 32 && i < iMin; i++)
+ if (pau32Fifo[i] != 0)
+ printf("FIFO_UNKNOWN_%u: %#x (%d)\n", i, pau32Fifo[i], pau32Fifo[i]);
+
+ if (iMin >= 32+64)
+ {
+ if (pau32Fifo[32])
+ {
+ printf(" FIFO_3D_CAPS:\n");
+ DumpOld3dCapabilityRecords((struct SVGA3dCapsRecord *)&pau32Fifo[32]);
+ }
+ else
+ printf("warning: 3D capabilities not present?\n");
+ }
+
+
+ if (iMin > 288)
+ printf(" FIFO_GUEST_3D_HWVERSION: %#x -- %u.%u\n", pau32Fifo[288], pau32Fifo[288] >> 16, pau32Fifo[288] & 0xffff);
+ if (iMin > 289)
+ printf(" FIFO_FENCE_GOAL: %#x (%d)\n", pau32Fifo[289], pau32Fifo[289]);
+ if (iMin > 290)
+ printf(" FIFO_BUSY: %#x (%d)\n", pau32Fifo[290], pau32Fifo[290]);
+
+ for (i = 291; i < iMin; i++)
+ if (pau32Fifo[i] != 0)
+ printf("FIFO_UNKNOWN_%u: %#x (%d)\n", i, pau32Fifo[i], pau32Fifo[i]);
+
+ return rcExit;
+}
+
+
+
+
+
+int main(int argc, char **argv)
+{
+ int rcExit = 0;
+ const char *pszDev = "/dev/dri/card0";
+ if (argc == 2)
+ pszDev = argv[1];
+
+ int fd = open(pszDev, O_RDWR);
+ if (fd != -1)
+ {
+ uint32_t const *pau32Fifo = NULL;
+ uint32_t cbFifo = 0;
+
+ /*
+ * Parameters.
+ */
+ rcExit = Dump3DParameters(fd, rcExit);
+
+ /*
+ * 3D capabilities.
+ */
+ rcExit = Dump3DCapabilities(fd, rcExit);
+
+ /*
+ * Map and dump the FIFO registers.
+ */
+ rcExit = FindAndMapFifo(&pau32Fifo, &cbFifo, rcExit);
+ if (pau32Fifo && cbFifo)
+ rcExit = DumpFifoStuff(pau32Fifo, cbFifo, rcExit);
+ }
+ else
+ {
+ fprintf(stderr, "error opening '%s': %d\n", pszDev, errno);
+ rcExit = 1;
+ }
+
+ return rcExit;
+}
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/glext.h b/src/VBox/Devices/Graphics/vmsvga_glext/glext.h
new file mode 100644
index 00000000..5e33e0bd
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/glext.h
@@ -0,0 +1,12905 @@
+#ifndef __gl_glext_h_
+#define __gl_glext_h_
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright 2013-2020 The Khronos Group Inc.
+** SPDX-License-Identifier: MIT
+**
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** https://github.com/KhronosGroup/OpenGL-Registry
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+#define GL_GLEXT_VERSION 20220530
+
+#ifndef VBOX
+#include <KHR/khrplatform.h>
+#else
+# include "khrplatform.h"
+#endif
+
+/* Generated C header for:
+ * API: gl
+ * Profile: compatibility
+ * Versions considered: .*
+ * Versions emitted: 1\.[2-9]|[234]\.[0-9]
+ * Default extensions included: gl
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#define GL_UNSIGNED_BYTE_3_3_2 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2 0x8036
+#define GL_TEXTURE_BINDING_3D 0x806A
+#define GL_PACK_SKIP_IMAGES 0x806B
+#define GL_PACK_IMAGE_HEIGHT 0x806C
+#define GL_UNPACK_SKIP_IMAGES 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT 0x806E
+#define GL_TEXTURE_3D 0x806F
+#define GL_PROXY_TEXTURE_3D 0x8070
+#define GL_TEXTURE_DEPTH 0x8071
+#define GL_TEXTURE_WRAP_R 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE 0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362
+#define GL_UNSIGNED_SHORT_5_6_5 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
+#define GL_BGR 0x80E0
+#define GL_BGRA 0x80E1
+#define GL_MAX_ELEMENTS_VERTICES 0x80E8
+#define GL_MAX_ELEMENTS_INDICES 0x80E9
+#define GL_CLAMP_TO_EDGE 0x812F
+#define GL_TEXTURE_MIN_LOD 0x813A
+#define GL_TEXTURE_MAX_LOD 0x813B
+#define GL_TEXTURE_BASE_LEVEL 0x813C
+#define GL_TEXTURE_MAX_LEVEL 0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23
+#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
+#define GL_RESCALE_NORMAL 0x803A
+#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8
+#define GL_SINGLE_COLOR 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR 0x81FA
+#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_VERSION_1_2 */
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#define GL_TEXTURE0 0x84C0
+#define GL_TEXTURE1 0x84C1
+#define GL_TEXTURE2 0x84C2
+#define GL_TEXTURE3 0x84C3
+#define GL_TEXTURE4 0x84C4
+#define GL_TEXTURE5 0x84C5
+#define GL_TEXTURE6 0x84C6
+#define GL_TEXTURE7 0x84C7
+#define GL_TEXTURE8 0x84C8
+#define GL_TEXTURE9 0x84C9
+#define GL_TEXTURE10 0x84CA
+#define GL_TEXTURE11 0x84CB
+#define GL_TEXTURE12 0x84CC
+#define GL_TEXTURE13 0x84CD
+#define GL_TEXTURE14 0x84CE
+#define GL_TEXTURE15 0x84CF
+#define GL_TEXTURE16 0x84D0
+#define GL_TEXTURE17 0x84D1
+#define GL_TEXTURE18 0x84D2
+#define GL_TEXTURE19 0x84D3
+#define GL_TEXTURE20 0x84D4
+#define GL_TEXTURE21 0x84D5
+#define GL_TEXTURE22 0x84D6
+#define GL_TEXTURE23 0x84D7
+#define GL_TEXTURE24 0x84D8
+#define GL_TEXTURE25 0x84D9
+#define GL_TEXTURE26 0x84DA
+#define GL_TEXTURE27 0x84DB
+#define GL_TEXTURE28 0x84DC
+#define GL_TEXTURE29 0x84DD
+#define GL_TEXTURE30 0x84DE
+#define GL_TEXTURE31 0x84DF
+#define GL_ACTIVE_TEXTURE 0x84E0
+#define GL_MULTISAMPLE 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE 0x809F
+#define GL_SAMPLE_COVERAGE 0x80A0
+#define GL_SAMPLE_BUFFERS 0x80A8
+#define GL_SAMPLES 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
+#define GL_TEXTURE_CUBE_MAP 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
+#define GL_COMPRESSED_RGB 0x84ED
+#define GL_COMPRESSED_RGBA 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0
+#define GL_TEXTURE_COMPRESSED 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
+#define GL_CLAMP_TO_BORDER 0x812D
+#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1
+#define GL_MAX_TEXTURE_UNITS 0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6
+#define GL_MULTISAMPLE_BIT 0x20000000
+#define GL_NORMAL_MAP 0x8511
+#define GL_REFLECTION_MAP 0x8512
+#define GL_COMPRESSED_ALPHA 0x84E9
+#define GL_COMPRESSED_LUMINANCE 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB
+#define GL_COMPRESSED_INTENSITY 0x84EC
+#define GL_COMBINE 0x8570
+#define GL_COMBINE_RGB 0x8571
+#define GL_COMBINE_ALPHA 0x8572
+#define GL_SOURCE0_RGB 0x8580
+#define GL_SOURCE1_RGB 0x8581
+#define GL_SOURCE2_RGB 0x8582
+#define GL_SOURCE0_ALPHA 0x8588
+#define GL_SOURCE1_ALPHA 0x8589
+#define GL_SOURCE2_ALPHA 0x858A
+#define GL_OPERAND0_RGB 0x8590
+#define GL_OPERAND1_RGB 0x8591
+#define GL_OPERAND2_RGB 0x8592
+#define GL_OPERAND0_ALPHA 0x8598
+#define GL_OPERAND1_ALPHA 0x8599
+#define GL_OPERAND2_ALPHA 0x859A
+#define GL_RGB_SCALE 0x8573
+#define GL_ADD_SIGNED 0x8574
+#define GL_INTERPOLATE 0x8575
+#define GL_SUBTRACT 0x84E7
+#define GL_CONSTANT 0x8576
+#define GL_PRIMARY_COLOR 0x8577
+#define GL_PREVIOUS 0x8578
+#define GL_DOT3_RGB 0x86AE
+#define GL_DOT3_RGBA 0x86AF
+typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum texture);
+GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img);
+GLAPI void APIENTRY glClientActiveTexture (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);
+#endif
+#endif /* GL_VERSION_1_3 */
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+#define GL_BLEND_DST_RGB 0x80C8
+#define GL_BLEND_SRC_RGB 0x80C9
+#define GL_BLEND_DST_ALPHA 0x80CA
+#define GL_BLEND_SRC_ALPHA 0x80CB
+#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128
+#define GL_DEPTH_COMPONENT16 0x81A5
+#define GL_DEPTH_COMPONENT24 0x81A6
+#define GL_DEPTH_COMPONENT32 0x81A7
+#define GL_MIRRORED_REPEAT 0x8370
+#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
+#define GL_TEXTURE_LOD_BIAS 0x8501
+#define GL_INCR_WRAP 0x8507
+#define GL_DECR_WRAP 0x8508
+#define GL_TEXTURE_DEPTH_SIZE 0x884A
+#define GL_TEXTURE_COMPARE_MODE 0x884C
+#define GL_TEXTURE_COMPARE_FUNC 0x884D
+#define GL_POINT_SIZE_MIN 0x8126
+#define GL_POINT_SIZE_MAX 0x8127
+#define GL_POINT_DISTANCE_ATTENUATION 0x8129
+#define GL_GENERATE_MIPMAP 0x8191
+#define GL_GENERATE_MIPMAP_HINT 0x8192
+#define GL_FOG_COORDINATE_SOURCE 0x8450
+#define GL_FOG_COORDINATE 0x8451
+#define GL_FRAGMENT_DEPTH 0x8452
+#define GL_CURRENT_FOG_COORDINATE 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456
+#define GL_FOG_COORDINATE_ARRAY 0x8457
+#define GL_COLOR_SUM 0x8458
+#define GL_CURRENT_SECONDARY_COLOR 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D
+#define GL_SECONDARY_COLOR_ARRAY 0x845E
+#define GL_TEXTURE_FILTER_CONTROL 0x8500
+#define GL_DEPTH_TEXTURE_MODE 0x884B
+#define GL_COMPARE_R_TO_TEXTURE 0x884E
+#define GL_BLEND_COLOR 0x8005
+#define GL_BLEND_EQUATION 0x8009
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_FUNC_ADD 0x8006
+#define GL_FUNC_REVERSE_SUBTRACT 0x800B
+#define GL_FUNC_SUBTRACT 0x800A
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFogCoordf (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoordd (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2sv (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3sv (const GLshort *v);
+GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glBlendEquation (GLenum mode);
+#endif
+#endif /* GL_VERSION_1_4 */
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+typedef khronos_ssize_t GLsizeiptr;
+typedef khronos_intptr_t GLintptr;
+#define GL_BUFFER_SIZE 0x8764
+#define GL_BUFFER_USAGE 0x8765
+#define GL_QUERY_COUNTER_BITS 0x8864
+#define GL_CURRENT_QUERY 0x8865
+#define GL_QUERY_RESULT 0x8866
+#define GL_QUERY_RESULT_AVAILABLE 0x8867
+#define GL_ARRAY_BUFFER 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER 0x8893
+#define GL_ARRAY_BUFFER_BINDING 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
+#define GL_READ_ONLY 0x88B8
+#define GL_WRITE_ONLY 0x88B9
+#define GL_READ_WRITE 0x88BA
+#define GL_BUFFER_ACCESS 0x88BB
+#define GL_BUFFER_MAPPED 0x88BC
+#define GL_BUFFER_MAP_POINTER 0x88BD
+#define GL_STREAM_DRAW 0x88E0
+#define GL_STREAM_READ 0x88E1
+#define GL_STREAM_COPY 0x88E2
+#define GL_STATIC_DRAW 0x88E4
+#define GL_STATIC_READ 0x88E5
+#define GL_STATIC_COPY 0x88E6
+#define GL_DYNAMIC_DRAW 0x88E8
+#define GL_DYNAMIC_READ 0x88E9
+#define GL_DYNAMIC_COPY 0x88EA
+#define GL_SAMPLES_PASSED 0x8914
+#define GL_SRC1_ALPHA 0x8589
+#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E
+#define GL_FOG_COORD_SRC 0x8450
+#define GL_FOG_COORD 0x8451
+#define GL_CURRENT_FOG_COORD 0x8453
+#define GL_FOG_COORD_ARRAY_TYPE 0x8454
+#define GL_FOG_COORD_ARRAY_STRIDE 0x8455
+#define GL_FOG_COORD_ARRAY_POINTER 0x8456
+#define GL_FOG_COORD_ARRAY 0x8457
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D
+#define GL_SRC0_RGB 0x8580
+#define GL_SRC1_RGB 0x8581
+#define GL_SRC2_RGB 0x8582
+#define GL_SRC0_ALPHA 0x8588
+#define GL_SRC2_ALPHA 0x858A
+typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQuery (GLuint id);
+GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQuery (GLenum target);
+GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer);
+GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target);
+GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_VERSION_1_5 */
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+typedef char GLchar;
+#define GL_BLEND_EQUATION_RGB 0x8009
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882A
+#define GL_DRAW_BUFFER6 0x882B
+#define GL_DRAW_BUFFER7 0x882C
+#define GL_DRAW_BUFFER8 0x882D
+#define GL_DRAW_BUFFER9 0x882E
+#define GL_DRAW_BUFFER10 0x882F
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883D
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8B30
+#define GL_VERTEX_SHADER 0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
+#define GL_MAX_VARYING_FLOATS 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
+#define GL_SHADER_TYPE 0x8B4F
+#define GL_FLOAT_VEC2 0x8B50
+#define GL_FLOAT_VEC3 0x8B51
+#define GL_FLOAT_VEC4 0x8B52
+#define GL_INT_VEC2 0x8B53
+#define GL_INT_VEC3 0x8B54
+#define GL_INT_VEC4 0x8B55
+#define GL_BOOL 0x8B56
+#define GL_BOOL_VEC2 0x8B57
+#define GL_BOOL_VEC3 0x8B58
+#define GL_BOOL_VEC4 0x8B59
+#define GL_FLOAT_MAT2 0x8B5A
+#define GL_FLOAT_MAT3 0x8B5B
+#define GL_FLOAT_MAT4 0x8B5C
+#define GL_SAMPLER_1D 0x8B5D
+#define GL_SAMPLER_2D 0x8B5E
+#define GL_SAMPLER_3D 0x8B5F
+#define GL_SAMPLER_CUBE 0x8B60
+#define GL_SAMPLER_1D_SHADOW 0x8B61
+#define GL_SAMPLER_2D_SHADOW 0x8B62
+#define GL_DELETE_STATUS 0x8B80
+#define GL_COMPILE_STATUS 0x8B81
+#define GL_LINK_STATUS 0x8B82
+#define GL_VALIDATE_STATUS 0x8B83
+#define GL_INFO_LOG_LENGTH 0x8B84
+#define GL_ATTACHED_SHADERS 0x8B85
+#define GL_ACTIVE_UNIFORMS 0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
+#define GL_SHADER_SOURCE_LENGTH 0x8B88
+#define GL_ACTIVE_ATTRIBUTES 0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
+#define GL_CURRENT_PROGRAM 0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
+#define GL_LOWER_LEFT 0x8CA1
+#define GL_UPPER_LEFT 0x8CA2
+#define GL_STENCIL_BACK_REF 0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_POINT_SPRITE 0x8861
+#define GL_COORD_REPLACE 0x8862
+#define GL_MAX_TEXTURE_COORDS 0x8871
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GLAPI void APIENTRY glCompileShader (GLuint shader);
+GLAPI GLuint APIENTRY glCreateProgram (void);
+GLAPI GLuint APIENTRY glCreateShader (GLenum type);
+GLAPI void APIENTRY glDeleteProgram (GLuint program);
+GLAPI void APIENTRY glDeleteShader (GLuint shader);
+GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
+GLAPI GLboolean APIENTRY glIsShader (GLuint shader);
+GLAPI void APIENTRY glLinkProgram (GLuint program);
+GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GLAPI void APIENTRY glUseProgram (GLuint program);
+GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1i (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glValidateProgram (GLuint program);
+GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_VERSION_2_0 */
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 1
+#define GL_PIXEL_PACK_BUFFER 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
+#define GL_FLOAT_MAT2x3 0x8B65
+#define GL_FLOAT_MAT2x4 0x8B66
+#define GL_FLOAT_MAT3x2 0x8B67
+#define GL_FLOAT_MAT3x4 0x8B68
+#define GL_FLOAT_MAT4x2 0x8B69
+#define GL_FLOAT_MAT4x3 0x8B6A
+#define GL_SRGB 0x8C40
+#define GL_SRGB8 0x8C41
+#define GL_SRGB_ALPHA 0x8C42
+#define GL_SRGB8_ALPHA8 0x8C43
+#define GL_COMPRESSED_SRGB 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA 0x8C49
+#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F
+#define GL_SLUMINANCE_ALPHA 0x8C44
+#define GL_SLUMINANCE8_ALPHA8 0x8C45
+#define GL_SLUMINANCE 0x8C46
+#define GL_SLUMINANCE8 0x8C47
+#define GL_COMPRESSED_SLUMINANCE 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+#endif /* GL_VERSION_2_1 */
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+typedef khronos_uint16_t GLhalf;
+#define GL_COMPARE_REF_TO_TEXTURE 0x884E
+#define GL_CLIP_DISTANCE0 0x3000
+#define GL_CLIP_DISTANCE1 0x3001
+#define GL_CLIP_DISTANCE2 0x3002
+#define GL_CLIP_DISTANCE3 0x3003
+#define GL_CLIP_DISTANCE4 0x3004
+#define GL_CLIP_DISTANCE5 0x3005
+#define GL_CLIP_DISTANCE6 0x3006
+#define GL_CLIP_DISTANCE7 0x3007
+#define GL_MAX_CLIP_DISTANCES 0x0D32
+#define GL_MAJOR_VERSION 0x821B
+#define GL_MINOR_VERSION 0x821C
+#define GL_NUM_EXTENSIONS 0x821D
+#define GL_CONTEXT_FLAGS 0x821E
+#define GL_COMPRESSED_RED 0x8225
+#define GL_COMPRESSED_RG 0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001
+#define GL_RGBA32F 0x8814
+#define GL_RGB32F 0x8815
+#define GL_RGBA16F 0x881A
+#define GL_RGB16F 0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
+#define GL_CLAMP_READ_COLOR 0x891C
+#define GL_FIXED_ONLY 0x891D
+#define GL_MAX_VARYING_COMPONENTS 0x8B4B
+#define GL_TEXTURE_1D_ARRAY 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19
+#define GL_TEXTURE_2D_ARRAY 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
+#define GL_R11F_G11F_B10F 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
+#define GL_RGB9_E5 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE 0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
+#define GL_PRIMITIVES_GENERATED 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
+#define GL_RASTERIZER_DISCARD 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS 0x8C8C
+#define GL_SEPARATE_ATTRIBS 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
+#define GL_RGBA32UI 0x8D70
+#define GL_RGB32UI 0x8D71
+#define GL_RGBA16UI 0x8D76
+#define GL_RGB16UI 0x8D77
+#define GL_RGBA8UI 0x8D7C
+#define GL_RGB8UI 0x8D7D
+#define GL_RGBA32I 0x8D82
+#define GL_RGB32I 0x8D83
+#define GL_RGBA16I 0x8D88
+#define GL_RGB16I 0x8D89
+#define GL_RGBA8I 0x8D8E
+#define GL_RGB8I 0x8D8F
+#define GL_RED_INTEGER 0x8D94
+#define GL_GREEN_INTEGER 0x8D95
+#define GL_BLUE_INTEGER 0x8D96
+#define GL_RGB_INTEGER 0x8D98
+#define GL_RGBA_INTEGER 0x8D99
+#define GL_BGR_INTEGER 0x8D9A
+#define GL_BGRA_INTEGER 0x8D9B
+#define GL_SAMPLER_1D_ARRAY 0x8DC0
+#define GL_SAMPLER_2D_ARRAY 0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
+#define GL_UNSIGNED_INT_VEC2 0x8DC6
+#define GL_UNSIGNED_INT_VEC3 0x8DC7
+#define GL_UNSIGNED_INT_VEC4 0x8DC8
+#define GL_INT_SAMPLER_1D 0x8DC9
+#define GL_INT_SAMPLER_2D 0x8DCA
+#define GL_INT_SAMPLER_3D 0x8DCB
+#define GL_INT_SAMPLER_CUBE 0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
+#define GL_QUERY_WAIT 0x8E13
+#define GL_QUERY_NO_WAIT 0x8E14
+#define GL_QUERY_BY_REGION_WAIT 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16
+#define GL_BUFFER_ACCESS_FLAGS 0x911F
+#define GL_BUFFER_MAP_LENGTH 0x9120
+#define GL_BUFFER_MAP_OFFSET 0x9121
+#define GL_DEPTH_COMPONENT32F 0x8CAC
+#define GL_DEPTH32F_STENCIL8 0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
+#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
+#define GL_FRAMEBUFFER_DEFAULT 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED 0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
+#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
+#define GL_DEPTH_STENCIL 0x84F9
+#define GL_UNSIGNED_INT_24_8 0x84FA
+#define GL_DEPTH24_STENCIL8 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE 0x88F1
+#define GL_TEXTURE_RED_TYPE 0x8C10
+#define GL_TEXTURE_GREEN_TYPE 0x8C11
+#define GL_TEXTURE_BLUE_TYPE 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE 0x8C13
+#define GL_TEXTURE_DEPTH_TYPE 0x8C16
+#define GL_UNSIGNED_NORMALIZED 0x8C17
+#define GL_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
+#define GL_RENDERBUFFER_BINDING 0x8CA7
+#define GL_READ_FRAMEBUFFER 0x8CA8
+#define GL_DRAW_FRAMEBUFFER 0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
+#define GL_RENDERBUFFER_SAMPLES 0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
+#define GL_COLOR_ATTACHMENT0 0x8CE0
+#define GL_COLOR_ATTACHMENT1 0x8CE1
+#define GL_COLOR_ATTACHMENT2 0x8CE2
+#define GL_COLOR_ATTACHMENT3 0x8CE3
+#define GL_COLOR_ATTACHMENT4 0x8CE4
+#define GL_COLOR_ATTACHMENT5 0x8CE5
+#define GL_COLOR_ATTACHMENT6 0x8CE6
+#define GL_COLOR_ATTACHMENT7 0x8CE7
+#define GL_COLOR_ATTACHMENT8 0x8CE8
+#define GL_COLOR_ATTACHMENT9 0x8CE9
+#define GL_COLOR_ATTACHMENT10 0x8CEA
+#define GL_COLOR_ATTACHMENT11 0x8CEB
+#define GL_COLOR_ATTACHMENT12 0x8CEC
+#define GL_COLOR_ATTACHMENT13 0x8CED
+#define GL_COLOR_ATTACHMENT14 0x8CEE
+#define GL_COLOR_ATTACHMENT15 0x8CEF
+#define GL_COLOR_ATTACHMENT16 0x8CF0
+#define GL_COLOR_ATTACHMENT17 0x8CF1
+#define GL_COLOR_ATTACHMENT18 0x8CF2
+#define GL_COLOR_ATTACHMENT19 0x8CF3
+#define GL_COLOR_ATTACHMENT20 0x8CF4
+#define GL_COLOR_ATTACHMENT21 0x8CF5
+#define GL_COLOR_ATTACHMENT22 0x8CF6
+#define GL_COLOR_ATTACHMENT23 0x8CF7
+#define GL_COLOR_ATTACHMENT24 0x8CF8
+#define GL_COLOR_ATTACHMENT25 0x8CF9
+#define GL_COLOR_ATTACHMENT26 0x8CFA
+#define GL_COLOR_ATTACHMENT27 0x8CFB
+#define GL_COLOR_ATTACHMENT28 0x8CFC
+#define GL_COLOR_ATTACHMENT29 0x8CFD
+#define GL_COLOR_ATTACHMENT30 0x8CFE
+#define GL_COLOR_ATTACHMENT31 0x8CFF
+#define GL_DEPTH_ATTACHMENT 0x8D00
+#define GL_STENCIL_ATTACHMENT 0x8D20
+#define GL_FRAMEBUFFER 0x8D40
+#define GL_RENDERBUFFER 0x8D41
+#define GL_RENDERBUFFER_WIDTH 0x8D42
+#define GL_RENDERBUFFER_HEIGHT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
+#define GL_STENCIL_INDEX1 0x8D46
+#define GL_STENCIL_INDEX4 0x8D47
+#define GL_STENCIL_INDEX8 0x8D48
+#define GL_STENCIL_INDEX16 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
+#define GL_MAX_SAMPLES 0x8D57
+#define GL_INDEX 0x8222
+#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE 0x8C15
+#define GL_FRAMEBUFFER_SRGB 0x8DB9
+#define GL_HALF_FLOAT 0x140B
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#define GL_COMPRESSED_RED_RGTC1 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC
+#define GL_COMPRESSED_RG_RGTC2 0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822A
+#define GL_RG8 0x822B
+#define GL_RG16 0x822C
+#define GL_R16F 0x822D
+#define GL_R32F 0x822E
+#define GL_RG16F 0x822F
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823A
+#define GL_RG32I 0x823B
+#define GL_RG32UI 0x823C
+#define GL_VERTEX_ARRAY_BINDING 0x85B5
+#define GL_CLAMP_VERTEX_COLOR 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR 0x891B
+#define GL_ALPHA_INTEGER 0x8D97
+typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp);
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glEnablei (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisablei (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedback (void);
+GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp);
+GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRender (void);
+GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index);
+GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmap (GLenum target);
+GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glBindVertexArray (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array);
+#endif
+#endif /* GL_VERSION_3_0 */
+
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 1
+#define GL_SAMPLER_2D_RECT 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64
+#define GL_SAMPLER_BUFFER 0x8DC2
+#define GL_INT_SAMPLER_2D_RECT 0x8DCD
+#define GL_INT_SAMPLER_BUFFER 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8
+#define GL_TEXTURE_BUFFER 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D
+#define GL_TEXTURE_RECTANGLE 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
+#define GL_R8_SNORM 0x8F94
+#define GL_RG8_SNORM 0x8F95
+#define GL_RGB8_SNORM 0x8F96
+#define GL_RGBA8_SNORM 0x8F97
+#define GL_R16_SNORM 0x8F98
+#define GL_RG16_SNORM 0x8F99
+#define GL_RGB16_SNORM 0x8F9A
+#define GL_RGBA16_SNORM 0x8F9B
+#define GL_SIGNED_NORMALIZED 0x8F9C
+#define GL_PRIMITIVE_RESTART 0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
+#define GL_COPY_READ_BUFFER 0x8F36
+#define GL_COPY_WRITE_BUFFER 0x8F37
+#define GL_UNIFORM_BUFFER 0x8A11
+#define GL_UNIFORM_BUFFER_BINDING 0x8A28
+#define GL_UNIFORM_BUFFER_START 0x8A29
+#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
+#define GL_UNIFORM_TYPE 0x8A37
+#define GL_UNIFORM_SIZE 0x8A38
+#define GL_UNIFORM_NAME_LENGTH 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
+#define GL_UNIFORM_OFFSET 0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
+#define GL_INVALID_INDEX 0xFFFFFFFFu
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index);
+GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif
+#endif /* GL_VERSION_3_1 */
+
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+typedef struct __GLsync *GLsync;
+typedef khronos_uint64_t GLuint64;
+typedef khronos_int64_t GLint64;
+#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002
+#define GL_LINES_ADJACENCY 0x000A
+#define GL_LINE_STRIP_ADJACENCY 0x000B
+#define GL_TRIANGLES_ADJACENCY 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D
+#define GL_PROGRAM_POINT_SIZE 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
+#define GL_GEOMETRY_SHADER 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT 0x8916
+#define GL_GEOMETRY_INPUT_TYPE 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE 0x8918
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
+#define GL_CONTEXT_PROFILE_MASK 0x9126
+#define GL_DEPTH_CLAMP 0x864F
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION 0x8E4E
+#define GL_PROVOKING_VERTEX 0x8E4F
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_ALREADY_SIGNALED 0x911A
+#define GL_TIMEOUT_EXPIRED 0x911B
+#define GL_CONDITION_SATISFIED 0x911C
+#define GL_WAIT_FAILED 0x911D
+#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_SAMPLE_POSITION 0x8E50
+#define GL_SAMPLE_MASK 0x8E51
+#define GL_SAMPLE_MASK_VALUE 0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
+#define GL_TEXTURE_SAMPLES 0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
+#define GL_MAX_INTEGER_SAMPLES 0x9110
+typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode);
+typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+GLAPI void APIENTRY glProvokingVertex (GLenum mode);
+GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GLAPI GLboolean APIENTRY glIsSync (GLsync sync);
+GLAPI void APIENTRY glDeleteSync (GLsync sync);
+GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask);
+#endif
+#endif /* GL_VERSION_3_2 */
+
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
+#define GL_SRC1_COLOR 0x88F9
+#define GL_ONE_MINUS_SRC1_COLOR 0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC
+#define GL_ANY_SAMPLES_PASSED 0x8C2F
+#define GL_SAMPLER_BINDING 0x8919
+#define GL_RGB10_A2UI 0x906F
+#define GL_TEXTURE_SWIZZLE_R 0x8E42
+#define GL_TEXTURE_SWIZZLE_G 0x8E43
+#define GL_TEXTURE_SWIZZLE_B 0x8E44
+#define GL_TEXTURE_SWIZZLE_A 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
+#define GL_TIME_ELAPSED 0x88BF
+#define GL_TIMESTAMP 0x8E28
+#define GL_INT_2_10_10_10_REV 0x8D9F
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler);
+GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target);
+GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);
+GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color);
+#endif
+#endif /* GL_VERSION_3_3 */
+
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+#define GL_SAMPLE_SHADING 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F
+#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F
+#define GL_DRAW_INDIRECT_BUFFER 0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43
+#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D
+#define GL_MAX_VERTEX_STREAMS 0x8E71
+#define GL_DOUBLE_VEC2 0x8FFC
+#define GL_DOUBLE_VEC3 0x8FFD
+#define GL_DOUBLE_VEC4 0x8FFE
+#define GL_DOUBLE_MAT2 0x8F46
+#define GL_DOUBLE_MAT3 0x8F47
+#define GL_DOUBLE_MAT4 0x8F48
+#define GL_DOUBLE_MAT2x3 0x8F49
+#define GL_DOUBLE_MAT2x4 0x8F4A
+#define GL_DOUBLE_MAT3x2 0x8F4B
+#define GL_DOUBLE_MAT3x4 0x8F4C
+#define GL_DOUBLE_MAT4x2 0x8F4D
+#define GL_DOUBLE_MAT4x3 0x8F4E
+#define GL_ACTIVE_SUBROUTINES 0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49
+#define GL_MAX_SUBROUTINES 0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8
+#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES 0x8E4B
+#define GL_PATCHES 0x000E
+#define GL_PATCH_VERTICES 0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75
+#define GL_TESS_GEN_MODE 0x8E76
+#define GL_TESS_GEN_SPACING 0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER 0x8E78
+#define GL_TESS_GEN_POINT_MODE 0x8E79
+#define GL_ISOLINES 0x8E7A
+#define GL_FRACTIONAL_ODD 0x8E7B
+#define GL_FRACTIONAL_EVEN 0x8E7C
+#define GL_MAX_PATCH_VERTICES 0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL 0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1
+#define GL_TESS_EVALUATION_SHADER 0x8E87
+#define GL_TESS_CONTROL_SHADER 0x8E88
+#define GL_TRANSFORM_FEEDBACK 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params);
+typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices);
+typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values);
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);
+typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShading (GLfloat value);
+GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x);
+GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params);
+GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices);
+GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params);
+GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values);
+GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedback (void);
+GLAPI void APIENTRY glResumeTransformFeedback (void);
+GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id);
+GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream);
+GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id);
+GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif
+#endif /* GL_VERSION_4_0 */
+
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 1
+#define GL_FIXED 0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
+#define GL_LOW_FLOAT 0x8DF0
+#define GL_MEDIUM_FLOAT 0x8DF1
+#define GL_HIGH_FLOAT 0x8DF2
+#define GL_LOW_INT 0x8DF3
+#define GL_MEDIUM_INT 0x8DF4
+#define GL_HIGH_INT 0x8DF5
+#define GL_SHADER_COMPILER 0x8DFA
+#define GL_SHADER_BINARY_FORMATS 0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
+#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
+#define GL_MAX_VARYING_VECTORS 0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
+#define GL_RGB565 0x8D62
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
+#define GL_PROGRAM_BINARY_LENGTH 0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
+#define GL_PROGRAM_BINARY_FORMATS 0x87FF
+#define GL_VERTEX_SHADER_BIT 0x00000001
+#define GL_FRAGMENT_SHADER_BIT 0x00000002
+#define GL_GEOMETRY_SHADER_BIT 0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT 0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010
+#define GL_ALL_SHADER_BITS 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE 0x8258
+#define GL_ACTIVE_PROGRAM 0x8259
+#define GL_PROGRAM_PIPELINE_BINDING 0x825A
+#define GL_MAX_VIEWPORTS 0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE 0x825D
+#define GL_LAYER_PROVOKING_VERTEX 0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F
+#define GL_UNDEFINED_VERTEX 0x8260
+typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f);
+typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReleaseShaderCompiler (void);
+GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GLAPI void APIENTRY glClearDepthf (GLfloat d);
+GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0);
+GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v);
+GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f);
+GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data);
+#endif
+#endif /* GL_VERSION_4_1 */
+
+#ifndef GL_VERSION_4_2
+#define GL_VERSION_4_2 1
+#define GL_COPY_READ_BUFFER_BINDING 0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
+#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
+#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D
+#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E
+#define GL_NUM_SAMPLE_COUNTS 0x9380
+#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC
+#define GL_ATOMIC_COUNTER_BUFFER 0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#define GL_COMMAND_BARRIER_BIT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000
+#define GL_ALL_BARRIER_BITS 0xFFFFFFFF
+#define GL_MAX_IMAGE_UNITS 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39
+#define GL_IMAGE_BINDING_NAME 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED 0x8F3C
+#define GL_IMAGE_BINDING_LAYER 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS 0x8F3E
+#define GL_IMAGE_1D 0x904C
+#define GL_IMAGE_2D 0x904D
+#define GL_IMAGE_3D 0x904E
+#define GL_IMAGE_2D_RECT 0x904F
+#define GL_IMAGE_CUBE 0x9050
+#define GL_IMAGE_BUFFER 0x9051
+#define GL_IMAGE_1D_ARRAY 0x9052
+#define GL_IMAGE_2D_ARRAY 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056
+#define GL_INT_IMAGE_1D 0x9057
+#define GL_INT_IMAGE_2D 0x9058
+#define GL_INT_IMAGE_3D 0x9059
+#define GL_INT_IMAGE_2D_RECT 0x905A
+#define GL_INT_IMAGE_CUBE 0x905B
+#define GL_INT_IMAGE_BUFFER 0x905C
+#define GL_INT_IMAGE_1D_ARRAY 0x905D
+#define GL_INT_IMAGE_2D_ARRAY 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C
+#define GL_MAX_IMAGE_SAMPLES 0x906D
+#define GL_IMAGE_BINDING_FORMAT 0x906E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF
+#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F
+#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params);
+GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers);
+GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount);
+GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif
+#endif /* GL_VERSION_4_2 */
+
+#ifndef GL_VERSION_4_3
+#define GL_VERSION_4_3 1
+typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9
+#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E
+#define GL_COMPRESSED_RGB8_ETC2 0x9274
+#define GL_COMPRESSED_SRGB8_ETC2 0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
+#define GL_COMPRESSED_R11_EAC 0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
+#define GL_COMPRESSED_RG11_EAC 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
+#define GL_MAX_ELEMENT_INDEX 0x8D6B
+#define GL_COMPUTE_SHADER 0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266
+#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF
+#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED
+#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF
+#define GL_COMPUTE_SHADER_BIT 0x00000020
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
+#define GL_DEBUG_SOURCE_API 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION 0x824A
+#define GL_DEBUG_SOURCE_OTHER 0x824B
+#define GL_DEBUG_TYPE_ERROR 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
+#define GL_DEBUG_TYPE_OTHER 0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES 0x9145
+#define GL_DEBUG_SEVERITY_HIGH 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
+#define GL_DEBUG_SEVERITY_LOW 0x9148
+#define GL_DEBUG_TYPE_MARKER 0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
+#define GL_DEBUG_TYPE_POP_GROUP 0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
+#define GL_BUFFER 0x82E0
+#define GL_SHADER 0x82E1
+#define GL_PROGRAM 0x82E2
+#define GL_QUERY 0x82E3
+#define GL_PROGRAM_PIPELINE 0x82E4
+#define GL_SAMPLER 0x82E6
+#define GL_MAX_LABEL_LENGTH 0x82E8
+#define GL_DEBUG_OUTPUT 0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
+#define GL_MAX_UNIFORM_LOCATIONS 0x826E
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318
+#define GL_INTERNALFORMAT_SUPPORTED 0x826F
+#define GL_INTERNALFORMAT_PREFERRED 0x8270
+#define GL_INTERNALFORMAT_RED_SIZE 0x8271
+#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272
+#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273
+#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274
+#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275
+#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276
+#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277
+#define GL_INTERNALFORMAT_RED_TYPE 0x8278
+#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279
+#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A
+#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B
+#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C
+#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D
+#define GL_MAX_WIDTH 0x827E
+#define GL_MAX_HEIGHT 0x827F
+#define GL_MAX_DEPTH 0x8280
+#define GL_MAX_LAYERS 0x8281
+#define GL_MAX_COMBINED_DIMENSIONS 0x8282
+#define GL_COLOR_COMPONENTS 0x8283
+#define GL_DEPTH_COMPONENTS 0x8284
+#define GL_STENCIL_COMPONENTS 0x8285
+#define GL_COLOR_RENDERABLE 0x8286
+#define GL_DEPTH_RENDERABLE 0x8287
+#define GL_STENCIL_RENDERABLE 0x8288
+#define GL_FRAMEBUFFER_RENDERABLE 0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A
+#define GL_FRAMEBUFFER_BLEND 0x828B
+#define GL_READ_PIXELS 0x828C
+#define GL_READ_PIXELS_FORMAT 0x828D
+#define GL_READ_PIXELS_TYPE 0x828E
+#define GL_TEXTURE_IMAGE_FORMAT 0x828F
+#define GL_TEXTURE_IMAGE_TYPE 0x8290
+#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292
+#define GL_MIPMAP 0x8293
+#define GL_MANUAL_GENERATE_MIPMAP 0x8294
+#define GL_AUTO_GENERATE_MIPMAP 0x8295
+#define GL_COLOR_ENCODING 0x8296
+#define GL_SRGB_READ 0x8297
+#define GL_SRGB_WRITE 0x8298
+#define GL_FILTER 0x829A
+#define GL_VERTEX_TEXTURE 0x829B
+#define GL_TESS_CONTROL_TEXTURE 0x829C
+#define GL_TESS_EVALUATION_TEXTURE 0x829D
+#define GL_GEOMETRY_TEXTURE 0x829E
+#define GL_FRAGMENT_TEXTURE 0x829F
+#define GL_COMPUTE_TEXTURE 0x82A0
+#define GL_TEXTURE_SHADOW 0x82A1
+#define GL_TEXTURE_GATHER 0x82A2
+#define GL_TEXTURE_GATHER_SHADOW 0x82A3
+#define GL_SHADER_IMAGE_LOAD 0x82A4
+#define GL_SHADER_IMAGE_STORE 0x82A5
+#define GL_SHADER_IMAGE_ATOMIC 0x82A6
+#define GL_IMAGE_TEXEL_SIZE 0x82A7
+#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8
+#define GL_IMAGE_PIXEL_FORMAT 0x82A9
+#define GL_IMAGE_PIXEL_TYPE 0x82AA
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3
+#define GL_CLEAR_BUFFER 0x82B4
+#define GL_TEXTURE_VIEW 0x82B5
+#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6
+#define GL_FULL_SUPPORT 0x82B7
+#define GL_CAVEAT_SUPPORT 0x82B8
+#define GL_IMAGE_CLASS_4_X_32 0x82B9
+#define GL_IMAGE_CLASS_2_X_32 0x82BA
+#define GL_IMAGE_CLASS_1_X_32 0x82BB
+#define GL_IMAGE_CLASS_4_X_16 0x82BC
+#define GL_IMAGE_CLASS_2_X_16 0x82BD
+#define GL_IMAGE_CLASS_1_X_16 0x82BE
+#define GL_IMAGE_CLASS_4_X_8 0x82BF
+#define GL_IMAGE_CLASS_2_X_8 0x82C0
+#define GL_IMAGE_CLASS_1_X_8 0x82C1
+#define GL_IMAGE_CLASS_11_11_10 0x82C2
+#define GL_IMAGE_CLASS_10_10_10_2 0x82C3
+#define GL_VIEW_CLASS_128_BITS 0x82C4
+#define GL_VIEW_CLASS_96_BITS 0x82C5
+#define GL_VIEW_CLASS_64_BITS 0x82C6
+#define GL_VIEW_CLASS_48_BITS 0x82C7
+#define GL_VIEW_CLASS_32_BITS 0x82C8
+#define GL_VIEW_CLASS_24_BITS 0x82C9
+#define GL_VIEW_CLASS_16_BITS 0x82CA
+#define GL_VIEW_CLASS_8_BITS 0x82CB
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF
+#define GL_VIEW_CLASS_RGTC1_RED 0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG 0x82D1
+#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2
+#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3
+#define GL_UNIFORM 0x92E1
+#define GL_UNIFORM_BLOCK 0x92E2
+#define GL_PROGRAM_INPUT 0x92E3
+#define GL_PROGRAM_OUTPUT 0x92E4
+#define GL_BUFFER_VARIABLE 0x92E5
+#define GL_SHADER_STORAGE_BLOCK 0x92E6
+#define GL_VERTEX_SUBROUTINE 0x92E8
+#define GL_TESS_CONTROL_SUBROUTINE 0x92E9
+#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA
+#define GL_GEOMETRY_SUBROUTINE 0x92EB
+#define GL_FRAGMENT_SUBROUTINE 0x92EC
+#define GL_COMPUTE_SUBROUTINE 0x92ED
+#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2
+#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3
+#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4
+#define GL_ACTIVE_RESOURCES 0x92F5
+#define GL_MAX_NAME_LENGTH 0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8
+#define GL_NAME_LENGTH 0x92F9
+#define GL_TYPE 0x92FA
+#define GL_ARRAY_SIZE 0x92FB
+#define GL_OFFSET 0x92FC
+#define GL_BLOCK_INDEX 0x92FD
+#define GL_ARRAY_STRIDE 0x92FE
+#define GL_MATRIX_STRIDE 0x92FF
+#define GL_IS_ROW_MAJOR 0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301
+#define GL_BUFFER_BINDING 0x9302
+#define GL_BUFFER_DATA_SIZE 0x9303
+#define GL_NUM_ACTIVE_VARIABLES 0x9304
+#define GL_ACTIVE_VARIABLES 0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308
+#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309
+#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D
+#define GL_LOCATION 0x930E
+#define GL_LOCATION_INDEX 0x930F
+#define GL_IS_PER_PATCH 0x92E7
+#define GL_SHADER_STORAGE_BUFFER 0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START 0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39
+#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA
+#define GL_TEXTURE_BUFFER_OFFSET 0x919D
+#define GL_TEXTURE_BUFFER_SIZE 0x919E
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F
+#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
+#define GL_VERTEX_ATTRIB_BINDING 0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5
+#define GL_VERTEX_BINDING_DIVISOR 0x82D6
+#define GL_VERTEX_BINDING_OFFSET 0x82D7
+#define GL_VERTEX_BINDING_STRIDE 0x82D8
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
+#define GL_VERTEX_BINDING_BUFFER 0x8F4F
+#define GL_DISPLAY_LIST 0x82E7
+typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params);
+typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params);
+GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level);
+GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer);
+GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params);
+GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GLAPI void APIENTRY glPopDebugGroup (void);
+GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_VERSION_4_3 */
+
+#ifndef GL_VERSION_4_4
+#define GL_VERSION_4_4 1
+#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221
+#define GL_TEXTURE_BUFFER_BINDING 0x8C2A
+#define GL_MAP_PERSISTENT_BIT 0x0040
+#define GL_MAP_COHERENT_BIT 0x0080
+#define GL_DYNAMIC_STORAGE_BIT 0x0100
+#define GL_CLIENT_STORAGE_BIT 0x0200
+#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000
+#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F
+#define GL_BUFFER_STORAGE_FLAGS 0x8220
+#define GL_CLEAR_TEXTURE 0x9365
+#define GL_LOCATION_COMPONENT 0x934A
+#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B
+#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C
+#define GL_QUERY_BUFFER 0x9192
+#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000
+#define GL_QUERY_BUFFER_BINDING 0x9193
+#define GL_QUERY_RESULT_NO_WAIT 0x9194
+#define GL_MIRROR_CLAMP_TO_EDGE 0x8743
+typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);
+typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures);
+typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers);
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures);
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers);
+GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);
+GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures);
+GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers);
+GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures);
+GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+#endif
+#endif /* GL_VERSION_4_4 */
+
+#ifndef GL_VERSION_4_5
+#define GL_VERSION_4_5 1
+#define GL_CONTEXT_LOST 0x0507
+#define GL_NEGATIVE_ONE_TO_ONE 0x935E
+#define GL_ZERO_TO_ONE 0x935F
+#define GL_CLIP_ORIGIN 0x935C
+#define GL_CLIP_DEPTH_MODE 0x935D
+#define GL_QUERY_WAIT_INVERTED 0x8E17
+#define GL_QUERY_NO_WAIT_INVERTED 0x8E18
+#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19
+#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A
+#define GL_MAX_CULL_DISTANCES 0x82F9
+#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA
+#define GL_TEXTURE_TARGET 0x1006
+#define GL_QUERY_TARGET 0x82EA
+#define GL_GUILTY_CONTEXT_RESET 0x8253
+#define GL_INNOCENT_CONTEXT_RESET 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY 0x8256
+#define GL_LOSE_CONTEXT_ON_RESET 0x8252
+#define GL_NO_RESET_NOTIFICATION 0x8261
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004
+#define GL_COLOR_TABLE 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
+#define GL_PROXY_COLOR_TABLE 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_MINMAX 0x802E
+#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC
+typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth);
+typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
+typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src);
+typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);
+typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers);
+typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth);
+GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param);
+GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
+GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers);
+GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access);
+GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer);
+GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params);
+GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf);
+GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src);
+GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures);
+GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture);
+GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture);
+GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer);
+GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);
+GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers);
+GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers);
+GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);
+GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void);
+GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glTextureBarrier (void);
+#endif
+#endif /* GL_VERSION_4_5 */
+
+#ifndef GL_VERSION_4_6
+#define GL_VERSION_4_6 1
+#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551
+#define GL_SPIR_V_BINARY 0x9552
+#define GL_PARAMETER_BUFFER 0x80EE
+#define GL_PARAMETER_BUFFER_BINDING 0x80EF
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008
+#define GL_VERTICES_SUBMITTED 0x82EE
+#define GL_PRIMITIVES_SUBMITTED 0x82EF
+#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0
+#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1
+#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2
+#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3
+#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4
+#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5
+#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6
+#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7
+#define GL_POLYGON_OFFSET_CLAMP 0x8E1B
+#define GL_SPIR_V_EXTENSIONS 0x9553
+#define GL_NUM_SPIR_V_EXTENSIONS 0x9554
+#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED
+typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_VERSION_4_6 */
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_ARB_ES2_compatibility 1
+#endif /* GL_ARB_ES2_compatibility */
+
+#ifndef GL_ARB_ES3_1_compatibility
+#define GL_ARB_ES3_1_compatibility 1
+#endif /* GL_ARB_ES3_1_compatibility */
+
+#ifndef GL_ARB_ES3_2_compatibility
+#define GL_ARB_ES3_2_compatibility 1
+#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE
+#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381
+#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382
+typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW);
+#endif
+#endif /* GL_ARB_ES3_2_compatibility */
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_ARB_ES3_compatibility 1
+#endif /* GL_ARB_ES3_compatibility */
+
+#ifndef GL_ARB_arrays_of_arrays
+#define GL_ARB_arrays_of_arrays 1
+#endif /* GL_ARB_arrays_of_arrays */
+
+#ifndef GL_ARB_base_instance
+#define GL_ARB_base_instance 1
+#endif /* GL_ARB_base_instance */
+
+#ifndef GL_ARB_bindless_texture
+#define GL_ARB_bindless_texture 1
+typedef khronos_uint64_t GLuint64EXT;
+#define GL_UNSIGNED_INT64_ARB 0x140F
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params);
+#endif
+#endif /* GL_ARB_bindless_texture */
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_ARB_blend_func_extended 1
+#endif /* GL_ARB_blend_func_extended */
+
+#ifndef GL_ARB_buffer_storage
+#define GL_ARB_buffer_storage 1
+#endif /* GL_ARB_buffer_storage */
+
+#ifndef GL_ARB_cl_event
+#define GL_ARB_cl_event 1
+struct _cl_context;
+struct _cl_event;
+#define GL_SYNC_CL_EVENT_ARB 0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241
+typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags);
+#endif
+#endif /* GL_ARB_cl_event */
+
+#ifndef GL_ARB_clear_buffer_object
+#define GL_ARB_clear_buffer_object 1
+#endif /* GL_ARB_clear_buffer_object */
+
+#ifndef GL_ARB_clear_texture
+#define GL_ARB_clear_texture 1
+#endif /* GL_ARB_clear_texture */
+
+#ifndef GL_ARB_clip_control
+#define GL_ARB_clip_control 1
+#endif /* GL_ARB_clip_control */
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
+#define GL_CLAMP_READ_COLOR_ARB 0x891C
+#define GL_FIXED_ONLY_ARB 0x891D
+typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp);
+#endif
+#endif /* GL_ARB_color_buffer_float */
+
+#ifndef GL_ARB_compatibility
+#define GL_ARB_compatibility 1
+#endif /* GL_ARB_compatibility */
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_ARB_compressed_texture_pixel_storage 1
+#endif /* GL_ARB_compressed_texture_pixel_storage */
+
+#ifndef GL_ARB_compute_shader
+#define GL_ARB_compute_shader 1
+#endif /* GL_ARB_compute_shader */
+
+#ifndef GL_ARB_compute_variable_group_size
+#define GL_ARB_compute_variable_group_size 1
+#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344
+#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB
+#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345
+#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z);
+#endif
+#endif /* GL_ARB_compute_variable_group_size */
+
+#ifndef GL_ARB_conditional_render_inverted
+#define GL_ARB_conditional_render_inverted 1
+#endif /* GL_ARB_conditional_render_inverted */
+
+#ifndef GL_ARB_conservative_depth
+#define GL_ARB_conservative_depth 1
+#endif /* GL_ARB_conservative_depth */
+
+#ifndef GL_ARB_copy_buffer
+#define GL_ARB_copy_buffer 1
+#endif /* GL_ARB_copy_buffer */
+
+#ifndef GL_ARB_copy_image
+#define GL_ARB_copy_image 1
+#endif /* GL_ARB_copy_image */
+
+#ifndef GL_ARB_cull_distance
+#define GL_ARB_cull_distance 1
+#endif /* GL_ARB_cull_distance */
+
+#ifndef GL_ARB_debug_output
+#define GL_ARB_debug_output 1
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
+#define GL_DEBUG_SOURCE_API_ARB 0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
+#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
+#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
+#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
+#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif
+#endif /* GL_ARB_debug_output */
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#endif /* GL_ARB_depth_buffer_float */
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#endif /* GL_ARB_depth_clamp */
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#define GL_DEPTH_COMPONENT16_ARB 0x81A5
+#define GL_DEPTH_COMPONENT24_ARB 0x81A6
+#define GL_DEPTH_COMPONENT32_ARB 0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+#endif /* GL_ARB_depth_texture */
+
+#ifndef GL_ARB_derivative_control
+#define GL_ARB_derivative_control 1
+#endif /* GL_ARB_derivative_control */
+
+#ifndef GL_ARB_direct_state_access
+#define GL_ARB_direct_state_access 1
+#endif /* GL_ARB_direct_state_access */
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882A
+#define GL_DRAW_BUFFER6_ARB 0x882B
+#define GL_DRAW_BUFFER7_ARB 0x882C
+#define GL_DRAW_BUFFER8_ARB 0x882D
+#define GL_DRAW_BUFFER9_ARB 0x882E
+#define GL_DRAW_BUFFER10_ARB 0x882F
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_ARB_draw_buffers */
+
+#ifndef GL_ARB_draw_buffers_blend
+#define GL_ARB_draw_buffers_blend 1
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+#endif /* GL_ARB_draw_buffers_blend */
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#define GL_ARB_draw_elements_base_vertex 1
+#endif /* GL_ARB_draw_elements_base_vertex */
+
+#ifndef GL_ARB_draw_indirect
+#define GL_ARB_draw_indirect 1
+#endif /* GL_ARB_draw_indirect */
+
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_ARB_draw_instanced */
+
+#ifndef GL_ARB_enhanced_layouts
+#define GL_ARB_enhanced_layouts 1
+#endif /* GL_ARB_enhanced_layouts */
+
+#ifndef GL_ARB_explicit_attrib_location
+#define GL_ARB_explicit_attrib_location 1
+#endif /* GL_ARB_explicit_attrib_location */
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_ARB_explicit_uniform_location 1
+#endif /* GL_ARB_explicit_uniform_location */
+
+#ifndef GL_ARB_fragment_coord_conventions
+#define GL_ARB_fragment_coord_conventions 1
+#endif /* GL_ARB_fragment_coord_conventions */
+
+#ifndef GL_ARB_fragment_layer_viewport
+#define GL_ARB_fragment_layer_viewport 1
+#endif /* GL_ARB_fragment_layer_viewport */
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_MATRIX0_ARB 0x88C0
+#define GL_MATRIX1_ARB 0x88C1
+#define GL_MATRIX2_ARB 0x88C2
+#define GL_MATRIX3_ARB 0x88C3
+#define GL_MATRIX4_ARB 0x88C4
+#define GL_MATRIX5_ARB 0x88C5
+#define GL_MATRIX6_ARB 0x88C6
+#define GL_MATRIX7_ARB 0x88C7
+#define GL_MATRIX8_ARB 0x88C8
+#define GL_MATRIX9_ARB 0x88C9
+#define GL_MATRIX10_ARB 0x88CA
+#define GL_MATRIX11_ARB 0x88CB
+#define GL_MATRIX12_ARB 0x88CC
+#define GL_MATRIX13_ARB 0x88CD
+#define GL_MATRIX14_ARB 0x88CE
+#define GL_MATRIX15_ARB 0x88CF
+#define GL_MATRIX16_ARB 0x88D0
+#define GL_MATRIX17_ARB 0x88D1
+#define GL_MATRIX18_ARB 0x88D2
+#define GL_MATRIX19_ARB 0x88D3
+#define GL_MATRIX20_ARB 0x88D4
+#define GL_MATRIX21_ARB 0x88D5
+#define GL_MATRIX22_ARB 0x88D6
+#define GL_MATRIX23_ARB 0x88D7
+#define GL_MATRIX24_ARB 0x88D8
+#define GL_MATRIX25_ARB 0x88D9
+#define GL_MATRIX26_ARB 0x88DA
+#define GL_MATRIX27_ARB 0x88DB
+#define GL_MATRIX28_ARB 0x88DC
+#define GL_MATRIX29_ARB 0x88DD
+#define GL_MATRIX30_ARB 0x88DE
+#define GL_MATRIX31_ARB 0x88DF
+typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string);
+typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string);
+GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program);
+GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string);
+GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program);
+#endif
+#endif /* GL_ARB_fragment_program */
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+#endif /* GL_ARB_fragment_program_shadow */
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ARB 0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+#endif /* GL_ARB_fragment_shader */
+
+#ifndef GL_ARB_fragment_shader_interlock
+#define GL_ARB_fragment_shader_interlock 1
+#endif /* GL_ARB_fragment_shader_interlock */
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_ARB_framebuffer_no_attachments 1
+#endif /* GL_ARB_framebuffer_no_attachments */
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#endif /* GL_ARB_framebuffer_object */
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+#endif /* GL_ARB_framebuffer_sRGB */
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#define GL_LINES_ADJACENCY_ARB 0x000A
+#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B
+#define GL_TRIANGLES_ADJACENCY_ARB 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9
+#define GL_GEOMETRY_SHADER_ARB 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_ARB_geometry_shader4 */
+
+#ifndef GL_ARB_get_program_binary
+#define GL_ARB_get_program_binary 1
+#endif /* GL_ARB_get_program_binary */
+
+#ifndef GL_ARB_get_texture_sub_image
+#define GL_ARB_get_texture_sub_image 1
+#endif /* GL_ARB_get_texture_sub_image */
+
+#ifndef GL_ARB_gl_spirv
+#define GL_ARB_gl_spirv 1
+#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551
+#define GL_SPIR_V_BINARY_ARB 0x9552
+typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue);
+#endif
+#endif /* GL_ARB_gl_spirv */
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_ARB_gpu_shader5 1
+#endif /* GL_ARB_gpu_shader5 */
+
+#ifndef GL_ARB_gpu_shader_fp64
+#define GL_ARB_gpu_shader_fp64 1
+#endif /* GL_ARB_gpu_shader_fp64 */
+
+#ifndef GL_ARB_gpu_shader_int64
+#define GL_ARB_gpu_shader_int64 1
+#define GL_INT64_ARB 0x140E
+#define GL_INT64_VEC2_ARB 0x8FE9
+#define GL_INT64_VEC3_ARB 0x8FEA
+#define GL_INT64_VEC4_ARB 0x8FEB
+#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7
+typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x);
+GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y);
+GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z);
+GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x);
+GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y);
+GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params);
+GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params);
+GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params);
+GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params);
+GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x);
+GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y);
+GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z);
+GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w);
+GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value);
+GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x);
+GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y);
+GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z);
+GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w);
+GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value);
+#endif
+#endif /* GL_ARB_gpu_shader_int64 */
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+typedef khronos_uint16_t GLhalfARB;
+#define GL_HALF_FLOAT_ARB 0x140B
+#endif /* GL_ARB_half_float_pixel */
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+#endif /* GL_ARB_half_float_vertex */
+
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
+#define GL_HISTOGRAM_SINK 0x802D
+#define GL_MINMAX_FORMAT 0x802F
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_COLOR_MATRIX 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
+#define GL_COLOR_TABLE_SCALE 0x80D6
+#define GL_COLOR_TABLE_BIAS 0x80D7
+#define GL_COLOR_TABLE_FORMAT 0x80D8
+#define GL_COLOR_TABLE_WIDTH 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogram (GLenum target);
+GLAPI void APIENTRY glResetMinmax (GLenum target);
+#endif
+#endif /* GL_ARB_imaging */
+
+#ifndef GL_ARB_indirect_parameters
+#define GL_ARB_indirect_parameters 1
+#define GL_PARAMETER_BUFFER_ARB 0x80EE
+#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_ARB_indirect_parameters */
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_ARB_instanced_arrays */
+
+#ifndef GL_ARB_internalformat_query
+#define GL_ARB_internalformat_query 1
+#endif /* GL_ARB_internalformat_query */
+
+#ifndef GL_ARB_internalformat_query2
+#define GL_ARB_internalformat_query2 1
+#define GL_SRGB_DECODE_ARB 0x8299
+#define GL_VIEW_CLASS_EAC_R11 0x9383
+#define GL_VIEW_CLASS_EAC_RG11 0x9384
+#define GL_VIEW_CLASS_ETC2_RGB 0x9385
+#define GL_VIEW_CLASS_ETC2_RGBA 0x9386
+#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387
+#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388
+#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389
+#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A
+#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B
+#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C
+#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D
+#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E
+#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F
+#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390
+#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391
+#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392
+#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393
+#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394
+#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395
+#endif /* GL_ARB_internalformat_query2 */
+
+#ifndef GL_ARB_invalidate_subdata
+#define GL_ARB_invalidate_subdata 1
+#endif /* GL_ARB_invalidate_subdata */
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_ARB_map_buffer_alignment 1
+#endif /* GL_ARB_map_buffer_alignment */
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#endif /* GL_ARB_map_buffer_range */
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#define GL_MATRIX_PALETTE_ARB 0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB 0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_ARB_matrix_palette */
+
+#ifndef GL_ARB_multi_bind
+#define GL_ARB_multi_bind 1
+#endif /* GL_ARB_multi_bind */
+
+#ifndef GL_ARB_multi_draw_indirect
+#define GL_ARB_multi_draw_indirect 1
+#endif /* GL_ARB_multi_draw_indirect */
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#define GL_MULTISAMPLE_ARB 0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
+#define GL_SAMPLE_COVERAGE_ARB 0x80A0
+#define GL_SAMPLE_BUFFERS_ARB 0x80A8
+#define GL_SAMPLES_ARB 0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert);
+#endif
+#endif /* GL_ARB_multisample */
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#define GL_TEXTURE0_ARB 0x84C0
+#define GL_TEXTURE1_ARB 0x84C1
+#define GL_TEXTURE2_ARB 0x84C2
+#define GL_TEXTURE3_ARB 0x84C3
+#define GL_TEXTURE4_ARB 0x84C4
+#define GL_TEXTURE5_ARB 0x84C5
+#define GL_TEXTURE6_ARB 0x84C6
+#define GL_TEXTURE7_ARB 0x84C7
+#define GL_TEXTURE8_ARB 0x84C8
+#define GL_TEXTURE9_ARB 0x84C9
+#define GL_TEXTURE10_ARB 0x84CA
+#define GL_TEXTURE11_ARB 0x84CB
+#define GL_TEXTURE12_ARB 0x84CC
+#define GL_TEXTURE13_ARB 0x84CD
+#define GL_TEXTURE14_ARB 0x84CE
+#define GL_TEXTURE15_ARB 0x84CF
+#define GL_TEXTURE16_ARB 0x84D0
+#define GL_TEXTURE17_ARB 0x84D1
+#define GL_TEXTURE18_ARB 0x84D2
+#define GL_TEXTURE19_ARB 0x84D3
+#define GL_TEXTURE20_ARB 0x84D4
+#define GL_TEXTURE21_ARB 0x84D5
+#define GL_TEXTURE22_ARB 0x84D6
+#define GL_TEXTURE23_ARB 0x84D7
+#define GL_TEXTURE24_ARB 0x84D8
+#define GL_TEXTURE25_ARB 0x84D9
+#define GL_TEXTURE26_ARB 0x84DA
+#define GL_TEXTURE27_ARB 0x84DB
+#define GL_TEXTURE28_ARB 0x84DC
+#define GL_TEXTURE29_ARB 0x84DD
+#define GL_TEXTURE30_ARB 0x84DE
+#define GL_TEXTURE31_ARB 0x84DF
+#define GL_ACTIVE_TEXTURE_ARB 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v);
+#endif
+#endif /* GL_ARB_multitexture */
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#define GL_SAMPLES_PASSED_ARB 0x8914
+typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id);
+GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQueryARB (GLenum target);
+GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_ARB_occlusion_query */
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ARB_occlusion_query2 1
+#endif /* GL_ARB_occlusion_query2 */
+
+#ifndef GL_ARB_parallel_shader_compile
+#define GL_ARB_parallel_shader_compile 1
+#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0
+#define GL_COMPLETION_STATUS_ARB 0x91B1
+typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count);
+#endif
+#endif /* GL_ARB_parallel_shader_compile */
+
+#ifndef GL_ARB_pipeline_statistics_query
+#define GL_ARB_pipeline_statistics_query 1
+#define GL_VERTICES_SUBMITTED_ARB 0x82EE
+#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF
+#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0
+#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1
+#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2
+#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3
+#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4
+#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5
+#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6
+#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7
+#endif /* GL_ARB_pipeline_statistics_query */
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
+#endif /* GL_ARB_pixel_buffer_object */
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_ARB_point_parameters */
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_COORD_REPLACE_ARB 0x8862
+#endif /* GL_ARB_point_sprite */
+
+#ifndef GL_ARB_polygon_offset_clamp
+#define GL_ARB_polygon_offset_clamp 1
+#endif /* GL_ARB_polygon_offset_clamp */
+
+#ifndef GL_ARB_post_depth_coverage
+#define GL_ARB_post_depth_coverage 1
+#endif /* GL_ARB_post_depth_coverage */
+
+#ifndef GL_ARB_program_interface_query
+#define GL_ARB_program_interface_query 1
+#endif /* GL_ARB_program_interface_query */
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#endif /* GL_ARB_provoking_vertex */
+
+#ifndef GL_ARB_query_buffer_object
+#define GL_ARB_query_buffer_object 1
+#endif /* GL_ARB_query_buffer_object */
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#define GL_ARB_robust_buffer_access_behavior 1
+#endif /* GL_ARB_robust_buffer_access_behavior */
+
+#ifndef GL_ARB_robustness
+#define GL_ARB_robustness 1
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253
+#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GL_NO_RESET_NOTIFICATION_ARB 0x8261
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img);
+typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void);
+GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img);
+GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img);
+GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+#endif
+#endif /* GL_ARB_robustness */
+
+#ifndef GL_ARB_robustness_isolation
+#define GL_ARB_robustness_isolation 1
+#endif /* GL_ARB_robustness_isolation */
+
+#ifndef GL_ARB_sample_locations
+#define GL_ARB_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340
+#define GL_SAMPLE_LOCATION_ARB 0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glEvaluateDepthValuesARB (void);
+#endif
+#endif /* GL_ARB_sample_locations */
+
+#ifndef GL_ARB_sample_shading
+#define GL_ARB_sample_shading 1
+#define GL_SAMPLE_SHADING_ARB 0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
+#endif
+#endif /* GL_ARB_sample_shading */
+
+#ifndef GL_ARB_sampler_objects
+#define GL_ARB_sampler_objects 1
+#endif /* GL_ARB_sampler_objects */
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map 1
+#endif /* GL_ARB_seamless_cube_map */
+
+#ifndef GL_ARB_seamless_cubemap_per_texture
+#define GL_ARB_seamless_cubemap_per_texture 1
+#endif /* GL_ARB_seamless_cubemap_per_texture */
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_ARB_separate_shader_objects 1
+#endif /* GL_ARB_separate_shader_objects */
+
+#ifndef GL_ARB_shader_atomic_counter_ops
+#define GL_ARB_shader_atomic_counter_ops 1
+#endif /* GL_ARB_shader_atomic_counter_ops */
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ARB_shader_atomic_counters 1
+#endif /* GL_ARB_shader_atomic_counters */
+
+#ifndef GL_ARB_shader_ballot
+#define GL_ARB_shader_ballot 1
+#endif /* GL_ARB_shader_ballot */
+
+#ifndef GL_ARB_shader_bit_encoding
+#define GL_ARB_shader_bit_encoding 1
+#endif /* GL_ARB_shader_bit_encoding */
+
+#ifndef GL_ARB_shader_clock
+#define GL_ARB_shader_clock 1
+#endif /* GL_ARB_shader_clock */
+
+#ifndef GL_ARB_shader_draw_parameters
+#define GL_ARB_shader_draw_parameters 1
+#endif /* GL_ARB_shader_draw_parameters */
+
+#ifndef GL_ARB_shader_group_vote
+#define GL_ARB_shader_group_vote 1
+#endif /* GL_ARB_shader_group_vote */
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_ARB_shader_image_load_store 1
+#endif /* GL_ARB_shader_image_load_store */
+
+#ifndef GL_ARB_shader_image_size
+#define GL_ARB_shader_image_size 1
+#endif /* GL_ARB_shader_image_size */
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+#ifdef __APPLE__
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+typedef char GLcharARB;
+#define GL_PROGRAM_OBJECT_ARB 0x8B40
+#define GL_SHADER_OBJECT_ARB 0x8B48
+#define GL_OBJECT_TYPE_ARB 0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
+#define GL_FLOAT_VEC2_ARB 0x8B50
+#define GL_FLOAT_VEC3_ARB 0x8B51
+#define GL_FLOAT_VEC4_ARB 0x8B52
+#define GL_INT_VEC2_ARB 0x8B53
+#define GL_INT_VEC3_ARB 0x8B54
+#define GL_INT_VEC4_ARB 0x8B55
+#define GL_BOOL_ARB 0x8B56
+#define GL_BOOL_VEC2_ARB 0x8B57
+#define GL_BOOL_VEC3_ARB 0x8B58
+#define GL_BOOL_VEC4_ARB 0x8B59
+#define GL_FLOAT_MAT2_ARB 0x8B5A
+#define GL_FLOAT_MAT3_ARB 0x8B5B
+#define GL_FLOAT_MAT4_ARB 0x8B5C
+#define GL_SAMPLER_1D_ARB 0x8B5D
+#define GL_SAMPLER_2D_ARB 0x8B5E
+#define GL_SAMPLER_3D_ARB 0x8B5F
+#define GL_SAMPLER_CUBE_ARB 0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
+#define GL_SAMPLER_2D_RECT_ARB 0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
+typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
+typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
+typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj);
+GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname);
+GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj);
+GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType);
+GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
+GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj);
+GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);
+GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj);
+GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj);
+GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params);
+GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#endif
+#endif /* GL_ARB_shader_objects */
+
+#ifndef GL_ARB_shader_precision
+#define GL_ARB_shader_precision 1
+#endif /* GL_ARB_shader_precision */
+
+#ifndef GL_ARB_shader_stencil_export
+#define GL_ARB_shader_stencil_export 1
+#endif /* GL_ARB_shader_stencil_export */
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_ARB_shader_storage_buffer_object 1
+#endif /* GL_ARB_shader_storage_buffer_object */
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ARB_shader_subroutine 1
+#endif /* GL_ARB_shader_subroutine */
+
+#ifndef GL_ARB_shader_texture_image_samples
+#define GL_ARB_shader_texture_image_samples 1
+#endif /* GL_ARB_shader_texture_image_samples */
+
+#ifndef GL_ARB_shader_texture_lod
+#define GL_ARB_shader_texture_lod 1
+#endif /* GL_ARB_shader_texture_lod */
+
+#ifndef GL_ARB_shader_viewport_layer_array
+#define GL_ARB_shader_viewport_layer_array 1
+#endif /* GL_ARB_shader_viewport_layer_array */
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
+#endif /* GL_ARB_shading_language_100 */
+
+#ifndef GL_ARB_shading_language_420pack
+#define GL_ARB_shading_language_420pack 1
+#endif /* GL_ARB_shading_language_420pack */
+
+#ifndef GL_ARB_shading_language_include
+#define GL_ARB_shading_language_include 1
+#define GL_SHADER_INCLUDE_ARB 0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB 0x8DEA
+typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length);
+GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ARB_shading_language_include */
+
+#ifndef GL_ARB_shading_language_packing
+#define GL_ARB_shading_language_packing 1
+#endif /* GL_ARB_shading_language_packing */
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E
+#endif /* GL_ARB_shadow */
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif /* GL_ARB_shadow_ambient */
+
+#ifndef GL_ARB_sparse_buffer
+#define GL_ARB_sparse_buffer 1
+#define GL_SPARSE_STORAGE_BIT_ARB 0x0400
+#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8
+typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+#endif
+#endif /* GL_ARB_sparse_buffer */
+
+#ifndef GL_ARB_sparse_texture
+#define GL_ARB_sparse_texture 1
+#define GL_TEXTURE_SPARSE_ARB 0x91A6
+#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7
+#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA
+#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8
+#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A
+#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9
+typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+#endif
+#endif /* GL_ARB_sparse_texture */
+
+#ifndef GL_ARB_sparse_texture2
+#define GL_ARB_sparse_texture2 1
+#endif /* GL_ARB_sparse_texture2 */
+
+#ifndef GL_ARB_sparse_texture_clamp
+#define GL_ARB_sparse_texture_clamp 1
+#endif /* GL_ARB_sparse_texture_clamp */
+
+#ifndef GL_ARB_spirv_extensions
+#define GL_ARB_spirv_extensions 1
+#endif /* GL_ARB_spirv_extensions */
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_ARB_stencil_texturing 1
+#endif /* GL_ARB_stencil_texturing */
+
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#endif /* GL_ARB_sync */
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_ARB_tessellation_shader 1
+#endif /* GL_ARB_tessellation_shader */
+
+#ifndef GL_ARB_texture_barrier
+#define GL_ARB_texture_barrier 1
+#endif /* GL_ARB_texture_barrier */
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+#endif /* GL_ARB_texture_border_clamp */
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+#define GL_TEXTURE_BUFFER_ARB 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E
+typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_ARB_texture_buffer_object */
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+#define GL_ARB_texture_buffer_object_rgb32 1
+#endif /* GL_ARB_texture_buffer_object_rgb32 */
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_ARB_texture_buffer_range 1
+#endif /* GL_ARB_texture_buffer_range */
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#define GL_COMPRESSED_ALPHA_ARB 0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB 0x84EC
+#define GL_COMPRESSED_RGB_ARB 0x84ED
+#define GL_COMPRESSED_RGBA_ARB 0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB 0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img);
+#endif
+#endif /* GL_ARB_texture_compression */
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc 1
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
+#endif /* GL_ARB_texture_compression_bptc */
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+#endif /* GL_ARB_texture_compression_rgtc */
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+#endif /* GL_ARB_texture_cube_map */
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_ARB_texture_cube_map_array 1
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F
+#endif /* GL_ARB_texture_cube_map_array */
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif /* GL_ARB_texture_env_add */
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#define GL_COMBINE_ARB 0x8570
+#define GL_COMBINE_RGB_ARB 0x8571
+#define GL_COMBINE_ALPHA_ARB 0x8572
+#define GL_SOURCE0_RGB_ARB 0x8580
+#define GL_SOURCE1_RGB_ARB 0x8581
+#define GL_SOURCE2_RGB_ARB 0x8582
+#define GL_SOURCE0_ALPHA_ARB 0x8588
+#define GL_SOURCE1_ALPHA_ARB 0x8589
+#define GL_SOURCE2_ALPHA_ARB 0x858A
+#define GL_OPERAND0_RGB_ARB 0x8590
+#define GL_OPERAND1_RGB_ARB 0x8591
+#define GL_OPERAND2_RGB_ARB 0x8592
+#define GL_OPERAND0_ALPHA_ARB 0x8598
+#define GL_OPERAND1_ALPHA_ARB 0x8599
+#define GL_OPERAND2_ALPHA_ARB 0x859A
+#define GL_RGB_SCALE_ARB 0x8573
+#define GL_ADD_SIGNED_ARB 0x8574
+#define GL_INTERPOLATE_ARB 0x8575
+#define GL_SUBTRACT_ARB 0x84E7
+#define GL_CONSTANT_ARB 0x8576
+#define GL_PRIMARY_COLOR_ARB 0x8577
+#define GL_PREVIOUS_ARB 0x8578
+#endif /* GL_ARB_texture_env_combine */
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif /* GL_ARB_texture_env_crossbar */
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#define GL_DOT3_RGB_ARB 0x86AE
+#define GL_DOT3_RGBA_ARB 0x86AF
+#endif /* GL_ARB_texture_env_dot3 */
+
+#ifndef GL_ARB_texture_filter_anisotropic
+#define GL_ARB_texture_filter_anisotropic 1
+#endif /* GL_ARB_texture_filter_anisotropic */
+
+#ifndef GL_ARB_texture_filter_minmax
+#define GL_ARB_texture_filter_minmax 1
+#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366
+#define GL_WEIGHTED_AVERAGE_ARB 0x9367
+#endif /* GL_ARB_texture_filter_minmax */
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#define GL_TEXTURE_RED_TYPE_ARB 0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_ALPHA32F_ARB 0x8816
+#define GL_INTENSITY32F_ARB 0x8817
+#define GL_LUMINANCE32F_ARB 0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB 0x8819
+#define GL_RGBA16F_ARB 0x881A
+#define GL_RGB16F_ARB 0x881B
+#define GL_ALPHA16F_ARB 0x881C
+#define GL_INTENSITY16F_ARB 0x881D
+#define GL_LUMINANCE16F_ARB 0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB 0x881F
+#endif /* GL_ARB_texture_float */
+
+#ifndef GL_ARB_texture_gather
+#define GL_ARB_texture_gather 1
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F
+#endif /* GL_ARB_texture_gather */
+
+#ifndef GL_ARB_texture_mirror_clamp_to_edge
+#define GL_ARB_texture_mirror_clamp_to_edge 1
+#endif /* GL_ARB_texture_mirror_clamp_to_edge */
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#endif /* GL_ARB_texture_mirrored_repeat */
+
+#ifndef GL_ARB_texture_multisample
+#define GL_ARB_texture_multisample 1
+#endif /* GL_ARB_texture_multisample */
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+#endif /* GL_ARB_texture_non_power_of_two */
+
+#ifndef GL_ARB_texture_query_levels
+#define GL_ARB_texture_query_levels 1
+#endif /* GL_ARB_texture_query_levels */
+
+#ifndef GL_ARB_texture_query_lod
+#define GL_ARB_texture_query_lod 1
+#endif /* GL_ARB_texture_query_lod */
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
+#endif /* GL_ARB_texture_rectangle */
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#endif /* GL_ARB_texture_rg */
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_ARB_texture_rgb10_a2ui 1
+#endif /* GL_ARB_texture_rgb10_a2ui */
+
+#ifndef GL_ARB_texture_stencil8
+#define GL_ARB_texture_stencil8 1
+#endif /* GL_ARB_texture_stencil8 */
+
+#ifndef GL_ARB_texture_storage
+#define GL_ARB_texture_storage 1
+#endif /* GL_ARB_texture_storage */
+
+#ifndef GL_ARB_texture_storage_multisample
+#define GL_ARB_texture_storage_multisample 1
+#endif /* GL_ARB_texture_storage_multisample */
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_ARB_texture_swizzle 1
+#endif /* GL_ARB_texture_swizzle */
+
+#ifndef GL_ARB_texture_view
+#define GL_ARB_texture_view 1
+#endif /* GL_ARB_texture_view */
+
+#ifndef GL_ARB_timer_query
+#define GL_ARB_timer_query 1
+#endif /* GL_ARB_timer_query */
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_ARB_transform_feedback2 1
+#endif /* GL_ARB_transform_feedback2 */
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_ARB_transform_feedback3 1
+#endif /* GL_ARB_transform_feedback3 */
+
+#ifndef GL_ARB_transform_feedback_instanced
+#define GL_ARB_transform_feedback_instanced 1
+#endif /* GL_ARB_transform_feedback_instanced */
+
+#ifndef GL_ARB_transform_feedback_overflow_query
+#define GL_ARB_transform_feedback_overflow_query 1
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED
+#endif /* GL_ARB_transform_feedback_overflow_query */
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m);
+#endif
+#endif /* GL_ARB_transpose_matrix */
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_ARB_uniform_buffer_object 1
+#endif /* GL_ARB_uniform_buffer_object */
+
+#ifndef GL_ARB_vertex_array_bgra
+#define GL_ARB_vertex_array_bgra 1
+#endif /* GL_ARB_vertex_array_bgra */
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+#endif /* GL_ARB_vertex_array_object */
+
+#ifndef GL_ARB_vertex_attrib_64bit
+#define GL_ARB_vertex_attrib_64bit 1
+#endif /* GL_ARB_vertex_attrib_64bit */
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_ARB_vertex_attrib_binding 1
+#endif /* GL_ARB_vertex_attrib_binding */
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
+#define GL_VERTEX_BLEND_ARB 0x86A7
+#define GL_CURRENT_WEIGHT_ARB 0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
+#define GL_WEIGHT_ARRAY_ARB 0x86AD
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850A
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872A
+#define GL_MODELVIEW11_ARB 0x872B
+#define GL_MODELVIEW12_ARB 0x872C
+#define GL_MODELVIEW13_ARB 0x872D
+#define GL_MODELVIEW14_ARB 0x872E
+#define GL_MODELVIEW15_ARB 0x872F
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873A
+#define GL_MODELVIEW27_ARB 0x873B
+#define GL_MODELVIEW28_ARB 0x873C
+#define GL_MODELVIEW29_ARB 0x873D
+#define GL_MODELVIEW30_ARB 0x873E
+#define GL_MODELVIEW31_ARB 0x873F
+typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights);
+GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights);
+GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights);
+GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights);
+GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights);
+GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights);
+GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights);
+GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights);
+GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glVertexBlendARB (GLint count);
+#endif
+#endif /* GL_ARB_vertex_blend */
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+typedef khronos_ssize_t GLsizeiptrARB;
+typedef khronos_intptr_t GLintptrARB;
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB 0x88B8
+#define GL_WRITE_ONLY_ARB 0x88B9
+#define GL_READ_WRITE_ARB 0x88BA
+#define GL_BUFFER_ACCESS_ARB 0x88BB
+#define GL_BUFFER_MAPPED_ARB 0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
+#define GL_STREAM_DRAW_ARB 0x88E0
+#define GL_STREAM_READ_ARB 0x88E1
+#define GL_STREAM_COPY_ARB 0x88E2
+#define GL_STATIC_DRAW_ARB 0x88E4
+#define GL_STATIC_READ_ARB 0x88E5
+#define GL_STATIC_COPY_ARB 0x88E6
+#define GL_DYNAMIC_DRAW_ARB 0x88E8
+#define GL_DYNAMIC_READ_ARB 0x88E9
+#define GL_DYNAMIC_COPY_ARB 0x88EA
+typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data);
+typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer);
+GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data);
+GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data);
+GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target);
+GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_ARB_vertex_buffer_object */
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer);
+#endif
+#endif /* GL_ARB_vertex_program */
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#define GL_VERTEX_SHADER_ARB 0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name);
+#endif
+#endif /* GL_ARB_vertex_shader */
+
+#ifndef GL_ARB_vertex_type_10f_11f_11f_rev
+#define GL_ARB_vertex_type_10f_11f_11f_rev 1
+#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+#define GL_ARB_vertex_type_2_10_10_10_rev 1
+#endif /* GL_ARB_vertex_type_2_10_10_10_rev */
+
+#ifndef GL_ARB_viewport_array
+#define GL_ARB_viewport_array 1
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYDVNVPROC) (GLuint first, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDDNVPROC) (GLuint index, GLdouble n, GLdouble f);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangeArraydvNV (GLuint first, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glDepthRangeIndexeddNV (GLuint index, GLdouble n, GLdouble f);
+#endif
+#endif /* GL_ARB_viewport_array */
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v);
+#endif
+#endif /* GL_ARB_window_pos */
+
+#ifndef GL_KHR_blend_equation_advanced
+#define GL_KHR_blend_equation_advanced 1
+#define GL_MULTIPLY_KHR 0x9294
+#define GL_SCREEN_KHR 0x9295
+#define GL_OVERLAY_KHR 0x9296
+#define GL_DARKEN_KHR 0x9297
+#define GL_LIGHTEN_KHR 0x9298
+#define GL_COLORDODGE_KHR 0x9299
+#define GL_COLORBURN_KHR 0x929A
+#define GL_HARDLIGHT_KHR 0x929B
+#define GL_SOFTLIGHT_KHR 0x929C
+#define GL_DIFFERENCE_KHR 0x929E
+#define GL_EXCLUSION_KHR 0x92A0
+#define GL_HSL_HUE_KHR 0x92AD
+#define GL_HSL_SATURATION_KHR 0x92AE
+#define GL_HSL_COLOR_KHR 0x92AF
+#define GL_HSL_LUMINOSITY_KHR 0x92B0
+typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendBarrierKHR (void);
+#endif
+#endif /* GL_KHR_blend_equation_advanced */
+
+#ifndef GL_KHR_blend_equation_advanced_coherent
+#define GL_KHR_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285
+#endif /* GL_KHR_blend_equation_advanced_coherent */
+
+#ifndef GL_KHR_context_flush_control
+#define GL_KHR_context_flush_control 1
+#endif /* GL_KHR_context_flush_control */
+
+#ifndef GL_KHR_debug
+#define GL_KHR_debug 1
+#endif /* GL_KHR_debug */
+
+#ifndef GL_KHR_no_error
+#define GL_KHR_no_error 1
+#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
+#endif /* GL_KHR_no_error */
+
+#ifndef GL_KHR_parallel_shader_compile
+#define GL_KHR_parallel_shader_compile 1
+#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0
+#define GL_COMPLETION_STATUS_KHR 0x91B1
+typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count);
+#endif
+#endif /* GL_KHR_parallel_shader_compile */
+
+#ifndef GL_KHR_robust_buffer_access_behavior
+#define GL_KHR_robust_buffer_access_behavior 1
+#endif /* GL_KHR_robust_buffer_access_behavior */
+
+#ifndef GL_KHR_robustness
+#define GL_KHR_robustness 1
+#define GL_CONTEXT_ROBUST_ACCESS 0x90F3
+#endif /* GL_KHR_robustness */
+
+#ifndef GL_KHR_shader_subgroup
+#define GL_KHR_shader_subgroup 1
+#define GL_SUBGROUP_SIZE_KHR 0x9532
+#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533
+#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534
+#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535
+#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001
+#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002
+#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004
+#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008
+#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010
+#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020
+#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040
+#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080
+#endif /* GL_KHR_shader_subgroup */
+
+#ifndef GL_KHR_texture_compression_astc_hdr
+#define GL_KHR_texture_compression_astc_hdr 1
+#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD
+#endif /* GL_KHR_texture_compression_astc_hdr */
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_KHR_texture_compression_astc_ldr 1
+#endif /* GL_KHR_texture_compression_astc_ldr */
+
+#ifndef GL_KHR_texture_compression_astc_sliced_3d
+#define GL_KHR_texture_compression_astc_sliced_3d 1
+#endif /* GL_KHR_texture_compression_astc_sliced_3d */
+
+#ifndef GL_OES_byte_coordinates
+#define GL_OES_byte_coordinates 1
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s);
+typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y);
+typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z);
+typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w);
+typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s);
+GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t);
+GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord1bOES (GLbyte s);
+GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t);
+GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y);
+GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z);
+GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w);
+GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords);
+#endif
+#endif /* GL_OES_byte_coordinates */
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_OES_compressed_paletted_texture 1
+#define GL_PALETTE4_RGB8_OES 0x8B90
+#define GL_PALETTE4_RGBA8_OES 0x8B91
+#define GL_PALETTE4_R5_G6_B5_OES 0x8B92
+#define GL_PALETTE4_RGBA4_OES 0x8B93
+#define GL_PALETTE4_RGB5_A1_OES 0x8B94
+#define GL_PALETTE8_RGB8_OES 0x8B95
+#define GL_PALETTE8_RGBA8_OES 0x8B96
+#define GL_PALETTE8_R5_G6_B5_OES 0x8B97
+#define GL_PALETTE8_RGBA4_OES 0x8B98
+#define GL_PALETTE8_RGB5_A1_OES 0x8B99
+#endif /* GL_OES_compressed_paletted_texture */
+
+#ifndef GL_OES_fixed_point
+#define GL_OES_fixed_point 1
+typedef khronos_int32_t GLfixed;
+#define GL_FIXED_OES 0x140C
+typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref);
+typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);
+typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation);
+typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);
+typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);
+typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);
+typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value);
+typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue);
+typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u);
+typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v);
+typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v);
+typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values);
+typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component);
+typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2);
+typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token);
+typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values);
+typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2);
+typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s);
+typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x);
+typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref);
+GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearDepthxOES (GLfixed depth);
+GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);
+GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f);
+GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation);
+GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glLineWidthxOES (GLfixed width);
+GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);
+GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glPointSizexOES (GLfixed size);
+GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);
+GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value);
+GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue);
+GLAPI void APIENTRY glColor3xvOES (const GLfixed *components);
+GLAPI void APIENTRY glColor4xvOES (const GLfixed *components);
+GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u);
+GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v);
+GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer);
+GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v);
+GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values);
+GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glIndexxOES (GLfixed component);
+GLAPI void APIENTRY glIndexxvOES (const GLfixed *component);
+GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2);
+GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s);
+GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t);
+GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glPassThroughxOES (GLfixed token);
+GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values);
+GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor);
+GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2);
+GLAPI void APIENTRY glTexCoord1xOES (GLfixed s);
+GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t);
+GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glVertex2xOES (GLfixed x);
+GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords);
+#endif
+#endif /* GL_OES_fixed_point */
+
+#ifndef GL_OES_query_matrix
+#define GL_OES_query_matrix 1
+typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent);
+#endif
+#endif /* GL_OES_query_matrix */
+
+#ifndef GL_OES_read_format
+#define GL_OES_read_format 1
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+#endif /* GL_OES_read_format */
+
+#ifndef GL_OES_single_precision
+#define GL_OES_single_precision 1
+typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f);
+typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation);
+typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearDepthfOES (GLclampf depth);
+GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);
+GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f);
+GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation);
+GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+#endif
+#endif /* GL_OES_single_precision */
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#define GL_MULTISAMPLE_3DFX 0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX 0x86B3
+#define GL_SAMPLES_3DFX 0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX 0x20000000
+#endif /* GL_3DFX_multisample */
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask);
+#endif
+#endif /* GL_3DFX_tbuffer */
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1
+#endif /* GL_3DFX_texture_compression_FXT1 */
+
+#ifndef GL_AMD_blend_minmax_factor
+#define GL_AMD_blend_minmax_factor 1
+#define GL_FACTOR_MIN_AMD 0x901C
+#define GL_FACTOR_MAX_AMD 0x901D
+#endif /* GL_AMD_blend_minmax_factor */
+
+#ifndef GL_AMD_conservative_depth
+#define GL_AMD_conservative_depth 1
+#endif /* GL_AMD_conservative_depth */
+
+#ifndef GL_AMD_debug_output
+#define GL_AMD_debug_output 1
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145
+#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147
+#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F
+#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#endif
+#endif /* GL_AMD_debug_output */
+
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_AMD_depth_clamp_separate 1
+#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD 0x901F
+#endif /* GL_AMD_depth_clamp_separate */
+
+#ifndef GL_AMD_draw_buffers_blend
+#define GL_AMD_draw_buffers_blend 1
+typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#endif
+#endif /* GL_AMD_draw_buffers_blend */
+
+#ifndef GL_AMD_framebuffer_multisample_advanced
+#define GL_AMD_framebuffer_multisample_advanced 1
+#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2
+#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3
+#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4
+#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5
+#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6
+#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_AMD_framebuffer_multisample_advanced */
+
+#ifndef GL_AMD_framebuffer_sample_positions
+#define GL_AMD_framebuffer_sample_positions 1
+#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F
+#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE
+#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF
+#define GL_ALL_PIXELS_AMD 0xFFFFFFFF
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values);
+GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values);
+#endif
+#endif /* GL_AMD_framebuffer_sample_positions */
+
+#ifndef GL_AMD_gcn_shader
+#define GL_AMD_gcn_shader 1
+#endif /* GL_AMD_gcn_shader */
+
+#ifndef GL_AMD_gpu_shader_half_float
+#define GL_AMD_gpu_shader_half_float 1
+#define GL_FLOAT16_NV 0x8FF8
+#define GL_FLOAT16_VEC2_NV 0x8FF9
+#define GL_FLOAT16_VEC3_NV 0x8FFA
+#define GL_FLOAT16_VEC4_NV 0x8FFB
+#define GL_FLOAT16_MAT2_AMD 0x91C5
+#define GL_FLOAT16_MAT3_AMD 0x91C6
+#define GL_FLOAT16_MAT4_AMD 0x91C7
+#define GL_FLOAT16_MAT2x3_AMD 0x91C8
+#define GL_FLOAT16_MAT2x4_AMD 0x91C9
+#define GL_FLOAT16_MAT3x2_AMD 0x91CA
+#define GL_FLOAT16_MAT3x4_AMD 0x91CB
+#define GL_FLOAT16_MAT4x2_AMD 0x91CC
+#define GL_FLOAT16_MAT4x3_AMD 0x91CD
+#endif /* GL_AMD_gpu_shader_half_float */
+
+#ifndef GL_AMD_gpu_shader_int16
+#define GL_AMD_gpu_shader_int16 1
+#endif /* GL_AMD_gpu_shader_int16 */
+
+#ifndef GL_AMD_gpu_shader_int64
+#define GL_AMD_gpu_shader_int64 1
+typedef khronos_int64_t GLint64EXT;
+#define GL_INT64_NV 0x140E
+#define GL_UNSIGNED_INT64_NV 0x140F
+#define GL_INT8_NV 0x8FE0
+#define GL_INT8_VEC2_NV 0x8FE1
+#define GL_INT8_VEC3_NV 0x8FE2
+#define GL_INT8_VEC4_NV 0x8FE3
+#define GL_INT16_NV 0x8FE4
+#define GL_INT16_VEC2_NV 0x8FE5
+#define GL_INT16_VEC3_NV 0x8FE6
+#define GL_INT16_VEC4_NV 0x8FE7
+#define GL_INT64_VEC2_NV 0x8FE9
+#define GL_INT64_VEC3_NV 0x8FEA
+#define GL_INT64_VEC4_NV 0x8FEB
+#define GL_UNSIGNED_INT8_NV 0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF
+#define GL_UNSIGNED_INT16_NV 0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7
+typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);
+GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);
+GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params);
+GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);
+GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_AMD_gpu_shader_int64 */
+
+#ifndef GL_AMD_interleaved_elements
+#define GL_AMD_interleaved_elements 1
+#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4
+#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param);
+#endif
+#endif /* GL_AMD_interleaved_elements */
+
+#ifndef GL_AMD_multi_draw_indirect
+#define GL_AMD_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride);
+#endif
+#endif /* GL_AMD_multi_draw_indirect */
+
+#ifndef GL_AMD_name_gen_delete
+#define GL_AMD_name_gen_delete 1
+#define GL_DATA_BUFFER_AMD 0x9151
+#define GL_PERFORMANCE_MONITOR_AMD 0x9152
+#define GL_QUERY_OBJECT_AMD 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154
+#define GL_SAMPLER_OBJECT_AMD 0x9155
+typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names);
+typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names);
+typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names);
+GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names);
+GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name);
+#endif
+#endif /* GL_AMD_name_gen_delete */
+
+#ifndef GL_AMD_occlusion_query_event
+#define GL_AMD_occlusion_query_event 1
+#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F
+#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001
+#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002
+#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004
+#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008
+#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF
+typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param);
+#endif
+#endif /* GL_AMD_occlusion_query_event */
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+#define GL_COUNTER_TYPE_AMD 0x8BC0
+#define GL_COUNTER_RANGE_AMD 0x8BC1
+#define GL_UNSIGNED_INT64_AMD 0x8BC2
+#define GL_PERCENTAGE_AMD 0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5
+#define GL_PERFMON_RESULT_AMD 0x8BC6
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data);
+typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data);
+GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif
+#endif /* GL_AMD_performance_monitor */
+
+#ifndef GL_AMD_pinned_memory
+#define GL_AMD_pinned_memory 1
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160
+#endif /* GL_AMD_pinned_memory */
+
+#ifndef GL_AMD_query_buffer_object
+#define GL_AMD_query_buffer_object 1
+#define GL_QUERY_BUFFER_AMD 0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD 0x9193
+#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194
+#endif /* GL_AMD_query_buffer_object */
+
+#ifndef GL_AMD_sample_positions
+#define GL_AMD_sample_positions 1
+typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val);
+#endif
+#endif /* GL_AMD_sample_positions */
+
+#ifndef GL_AMD_seamless_cubemap_per_texture
+#define GL_AMD_seamless_cubemap_per_texture 1
+#endif /* GL_AMD_seamless_cubemap_per_texture */
+
+#ifndef GL_AMD_shader_atomic_counter_ops
+#define GL_AMD_shader_atomic_counter_ops 1
+#endif /* GL_AMD_shader_atomic_counter_ops */
+
+#ifndef GL_AMD_shader_ballot
+#define GL_AMD_shader_ballot 1
+#endif /* GL_AMD_shader_ballot */
+
+#ifndef GL_AMD_shader_explicit_vertex_parameter
+#define GL_AMD_shader_explicit_vertex_parameter 1
+#endif /* GL_AMD_shader_explicit_vertex_parameter */
+
+#ifndef GL_AMD_shader_gpu_shader_half_float_fetch
+#define GL_AMD_shader_gpu_shader_half_float_fetch 1
+#endif /* GL_AMD_shader_gpu_shader_half_float_fetch */
+
+#ifndef GL_AMD_shader_image_load_store_lod
+#define GL_AMD_shader_image_load_store_lod 1
+#endif /* GL_AMD_shader_image_load_store_lod */
+
+#ifndef GL_AMD_shader_stencil_export
+#define GL_AMD_shader_stencil_export 1
+#endif /* GL_AMD_shader_stencil_export */
+
+#ifndef GL_AMD_shader_trinary_minmax
+#define GL_AMD_shader_trinary_minmax 1
+#endif /* GL_AMD_shader_trinary_minmax */
+
+#ifndef GL_AMD_sparse_texture
+#define GL_AMD_sparse_texture 1
+#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A
+#define GL_MIN_SPARSE_LEVEL_AMD 0x919B
+#define GL_MIN_LOD_WARNING_AMD 0x919C
+#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001
+typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#endif
+#endif /* GL_AMD_sparse_texture */
+
+#ifndef GL_AMD_stencil_operation_extended
+#define GL_AMD_stencil_operation_extended 1
+#define GL_SET_AMD 0x874A
+#define GL_REPLACE_VALUE_AMD 0x874B
+#define GL_STENCIL_OP_VALUE_AMD 0x874C
+#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D
+typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value);
+#endif
+#endif /* GL_AMD_stencil_operation_extended */
+
+#ifndef GL_AMD_texture_gather_bias_lod
+#define GL_AMD_texture_gather_bias_lod 1
+#endif /* GL_AMD_texture_gather_bias_lod */
+
+#ifndef GL_AMD_texture_texture4
+#define GL_AMD_texture_texture4 1
+#endif /* GL_AMD_texture_texture4 */
+
+#ifndef GL_AMD_transform_feedback3_lines_triangles
+#define GL_AMD_transform_feedback3_lines_triangles 1
+#endif /* GL_AMD_transform_feedback3_lines_triangles */
+
+#ifndef GL_AMD_transform_feedback4
+#define GL_AMD_transform_feedback4 1
+#define GL_STREAM_RASTERIZATION_AMD 0x91A0
+#endif /* GL_AMD_transform_feedback4 */
+
+#ifndef GL_AMD_vertex_shader_layer
+#define GL_AMD_vertex_shader_layer 1
+#endif /* GL_AMD_vertex_shader_layer */
+
+#ifndef GL_AMD_vertex_shader_tessellator
+#define GL_AMD_vertex_shader_tessellator 1
+#define GL_SAMPLER_BUFFER_AMD 0x9001
+#define GL_INT_SAMPLER_BUFFER_AMD 0x9002
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003
+#define GL_TESSELLATION_MODE_AMD 0x9004
+#define GL_TESSELLATION_FACTOR_AMD 0x9005
+#define GL_DISCRETE_AMD 0x9006
+#define GL_CONTINUOUS_AMD 0x9007
+typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor);
+GLAPI void APIENTRY glTessellationModeAMD (GLenum mode);
+#endif
+#endif /* GL_AMD_vertex_shader_tessellator */
+
+#ifndef GL_AMD_vertex_shader_viewport_index
+#define GL_AMD_vertex_shader_viewport_index 1
+#endif /* GL_AMD_vertex_shader_viewport_index */
+
+#ifndef GL_APPLE_aux_depth_stencil
+#define GL_APPLE_aux_depth_stencil 1
+#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14
+#endif /* GL_APPLE_aux_depth_stencil */
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
+#endif /* GL_APPLE_client_storage */
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+#define GL_ELEMENT_ARRAY_APPLE 0x8A0C
+#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D
+#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E
+typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer);
+GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#endif
+#endif /* GL_APPLE_element_array */
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#define GL_DRAW_PIXELS_APPLE 0x8A0A
+#define GL_FENCE_APPLE 0x8A0B
+typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);
+typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences);
+GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence);
+GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name);
+GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name);
+#endif
+#endif /* GL_APPLE_fence */
+
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#define GL_HALF_APPLE 0x140B
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_RGBA_FLOAT16_APPLE 0x881A
+#define GL_RGB_FLOAT16_APPLE 0x881B
+#define GL_ALPHA_FLOAT16_APPLE 0x881C
+#define GL_INTENSITY_FLOAT16_APPLE 0x881D
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F
+#define GL_COLOR_FLOAT_APPLE 0x8A0F
+#endif /* GL_APPLE_float_pixels */
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13
+typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_APPLE_flush_buffer_range */
+
+#ifndef GL_APPLE_object_purgeable
+#define GL_APPLE_object_purgeable 1
+#define GL_BUFFER_OBJECT_APPLE 0x85B3
+#define GL_RELEASED_APPLE 0x8A19
+#define GL_VOLATILE_APPLE 0x8A1A
+#define GL_RETAINED_APPLE 0x8A1B
+#define GL_UNDEFINED_APPLE 0x8A1C
+#define GL_PURGEABLE_APPLE 0x8A1D
+typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#endif
+#endif /* GL_APPLE_object_purgeable */
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+#define GL_RGB_422_APPLE 0x8A1F
+#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
+#define GL_RGB_RAW_422_APPLE 0x8A51
+#endif /* GL_APPLE_rgb_422 */
+
+#ifndef GL_APPLE_row_bytes
+#define GL_APPLE_row_bytes 1
+#define GL_PACK_ROW_BYTES_APPLE 0x8A15
+#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16
+#endif /* GL_APPLE_row_bytes */
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif /* GL_APPLE_specular_vector */
+
+#ifndef GL_APPLE_texture_range
+#define GL_APPLE_texture_range 1
+#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8
+#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC
+#define GL_STORAGE_PRIVATE_APPLE 0x85BD
+#define GL_STORAGE_CACHED_APPLE 0x85BE
+#define GL_STORAGE_SHARED_APPLE 0x85BF
+typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer);
+GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_APPLE_texture_range */
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#define GL_TRANSFORM_HINT_APPLE 0x85B1
+#endif /* GL_APPLE_transform_hint */
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array);
+#endif
+#endif /* GL_APPLE_vertex_array_object */
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521
+#define GL_STORAGE_CLIENT_APPLE 0x85B4
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer);
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer);
+GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer);
+GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param);
+#endif
+#endif /* GL_APPLE_vertex_array_range */
+
+#ifndef GL_APPLE_vertex_program_evaluators
+#define GL_APPLE_vertex_program_evaluators 1
+#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00
+#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#endif
+#endif /* GL_APPLE_vertex_program_evaluators */
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#define GL_YCBCR_422_APPLE 0x85B9
+#endif /* GL_APPLE_ycbcr_422 */
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ATI 0x8824
+#define GL_DRAW_BUFFER0_ATI 0x8825
+#define GL_DRAW_BUFFER1_ATI 0x8826
+#define GL_DRAW_BUFFER2_ATI 0x8827
+#define GL_DRAW_BUFFER3_ATI 0x8828
+#define GL_DRAW_BUFFER4_ATI 0x8829
+#define GL_DRAW_BUFFER5_ATI 0x882A
+#define GL_DRAW_BUFFER6_ATI 0x882B
+#define GL_DRAW_BUFFER7_ATI 0x882C
+#define GL_DRAW_BUFFER8_ATI 0x882D
+#define GL_DRAW_BUFFER9_ATI 0x882E
+#define GL_DRAW_BUFFER10_ATI 0x882F
+#define GL_DRAW_BUFFER11_ATI 0x8830
+#define GL_DRAW_BUFFER12_ATI 0x8831
+#define GL_DRAW_BUFFER13_ATI 0x8832
+#define GL_DRAW_BUFFER14_ATI 0x8833
+#define GL_DRAW_BUFFER15_ATI 0x8834
+typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_ATI_draw_buffers */
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#define GL_ELEMENT_ARRAY_ATI 0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A
+typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+#endif /* GL_ATI_element_array */
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#define GL_BUMP_ROT_MATRIX_ATI 0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777
+#define GL_BUMP_TEX_UNITS_ATI 0x8778
+#define GL_DUDV_ATI 0x8779
+#define GL_DU8DV8_ATI 0x877A
+#define GL_BUMP_ENVMAP_ATI 0x877B
+#define GL_BUMP_TARGET_ATI 0x877C
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param);
+#endif
+#endif /* GL_ATI_envmap_bumpmap */
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_REG_6_ATI 0x8927
+#define GL_REG_7_ATI 0x8928
+#define GL_REG_8_ATI 0x8929
+#define GL_REG_9_ATI 0x892A
+#define GL_REG_10_ATI 0x892B
+#define GL_REG_11_ATI 0x892C
+#define GL_REG_12_ATI 0x892D
+#define GL_REG_13_ATI 0x892E
+#define GL_REG_14_ATI 0x892F
+#define GL_REG_15_ATI 0x8930
+#define GL_REG_16_ATI 0x8931
+#define GL_REG_17_ATI 0x8932
+#define GL_REG_18_ATI 0x8933
+#define GL_REG_19_ATI 0x8934
+#define GL_REG_20_ATI 0x8935
+#define GL_REG_21_ATI 0x8936
+#define GL_REG_22_ATI 0x8937
+#define GL_REG_23_ATI 0x8938
+#define GL_REG_24_ATI 0x8939
+#define GL_REG_25_ATI 0x893A
+#define GL_REG_26_ATI 0x893B
+#define GL_REG_27_ATI 0x893C
+#define GL_REG_28_ATI 0x893D
+#define GL_REG_29_ATI 0x893E
+#define GL_REG_30_ATI 0x893F
+#define GL_REG_31_ATI 0x8940
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_CON_8_ATI 0x8949
+#define GL_CON_9_ATI 0x894A
+#define GL_CON_10_ATI 0x894B
+#define GL_CON_11_ATI 0x894C
+#define GL_CON_12_ATI 0x894D
+#define GL_CON_13_ATI 0x894E
+#define GL_CON_14_ATI 0x894F
+#define GL_CON_15_ATI 0x8950
+#define GL_CON_16_ATI 0x8951
+#define GL_CON_17_ATI 0x8952
+#define GL_CON_18_ATI 0x8953
+#define GL_CON_19_ATI 0x8954
+#define GL_CON_20_ATI 0x8955
+#define GL_CON_21_ATI 0x8956
+#define GL_CON_22_ATI 0x8957
+#define GL_CON_23_ATI 0x8958
+#define GL_CON_24_ATI 0x8959
+#define GL_CON_25_ATI 0x895A
+#define GL_CON_26_ATI 0x895B
+#define GL_CON_27_ATI 0x895C
+#define GL_CON_28_ATI 0x895D
+#define GL_CON_29_ATI 0x895E
+#define GL_CON_30_ATI 0x895F
+#define GL_CON_31_ATI 0x8960
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896A
+#define GL_CND0_ATI 0x896B
+#define GL_DOT2_ADD_ATI 0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F
+#define GL_NUM_PASSES_ATI 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_SWIZZLE_STRQ_ATI 0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle);
+GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value);
+#endif
+#endif /* GL_ATI_fragment_shader */
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer);
+#endif
+#endif /* GL_ATI_map_object_buffer */
+
+#ifndef GL_ATI_meminfo
+#define GL_ATI_meminfo 1
+#define GL_VBO_FREE_MEMORY_ATI 0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
+#endif /* GL_ATI_meminfo */
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_ATI_pixel_format_float 1
+#define GL_RGBA_FLOAT_MODE_ATI 0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+#endif /* GL_ATI_pixel_format_float */
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#define GL_PN_TRIANGLES_ATI 0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param);
+#endif
+#endif /* GL_ATI_pn_triangles */
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#endif
+#endif /* GL_ATI_separate_stencil */
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200
+#endif /* GL_ATI_text_fragment_shader */
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+#endif /* GL_ATI_texture_env_combine3 */
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+#define GL_RGBA_FLOAT32_ATI 0x8814
+#define GL_RGB_FLOAT32_ATI 0x8815
+#define GL_ALPHA_FLOAT32_ATI 0x8816
+#define GL_INTENSITY_FLOAT32_ATI 0x8817
+#define GL_LUMINANCE_FLOAT32_ATI 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819
+#define GL_RGBA_FLOAT16_ATI 0x881A
+#define GL_RGB_FLOAT16_ATI 0x881B
+#define GL_ALPHA_FLOAT16_ATI 0x881C
+#define GL_INTENSITY_FLOAT16_ATI 0x881D
+#define GL_LUMINANCE_FLOAT16_ATI 0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F
+#endif /* GL_ATI_texture_float */
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+#endif /* GL_ATI_texture_mirror_once */
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#define GL_STATIC_ATI 0x8760
+#define GL_DYNAMIC_ATI 0x8761
+#define GL_PRESERVE_ATI 0x8762
+#define GL_DISCARD_ATI 0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767
+typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage);
+typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ATI_vertex_array_object */
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ATI_vertex_attrib_array_object */
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#define GL_MAX_VERTEX_STREAMS_ATI 0x876B
+#define GL_VERTEX_STREAM0_ATI 0x876C
+#define GL_VERTEX_STREAM1_ATI 0x876D
+#define GL_VERTEX_STREAM2_ATI 0x876E
+#define GL_VERTEX_STREAM3_ATI 0x876F
+#define GL_VERTEX_STREAM4_ATI 0x8770
+#define GL_VERTEX_STREAM5_ATI 0x8771
+#define GL_VERTEX_STREAM6_ATI 0x8772
+#define GL_VERTEX_STREAM7_ATI 0x8773
+#define GL_VERTEX_SOURCE_ATI 0x8774
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param);
+#endif
+#endif /* GL_ATI_vertex_streams */
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#define GL_422_EXT 0x80CC
+#define GL_422_REV_EXT 0x80CD
+#define GL_422_AVERAGE_EXT 0x80CE
+#define GL_422_REV_AVERAGE_EXT 0x80CF
+#endif /* GL_EXT_422_pixels */
+
+#ifndef GL_EXT_EGL_image_storage
+#define GL_EXT_EGL_image_storage 1
+typedef void *GLeglImageOES;
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list);
+GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list);
+#endif
+#endif /* GL_EXT_EGL_image_storage */
+
+#ifndef GL_EXT_EGL_sync
+#define GL_EXT_EGL_sync 1
+#endif /* GL_EXT_EGL_sync */
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#define GL_ABGR_EXT 0x8000
+#endif /* GL_EXT_abgr */
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#define GL_BGR_EXT 0x80E0
+#define GL_BGRA_EXT 0x80E1
+#endif /* GL_EXT_bgra */
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_EXT_bindable_uniform 1
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
+#define GL_UNIFORM_BUFFER_EXT 0x8DEE
+#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
+typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
+typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer);
+GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location);
+GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location);
+#endif
+#endif /* GL_EXT_bindable_uniform */
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#define GL_CONSTANT_COLOR_EXT 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002
+#define GL_CONSTANT_ALPHA_EXT 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004
+#define GL_BLEND_COLOR_EXT 0x8005
+typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#endif
+#endif /* GL_EXT_blend_color */
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+#define GL_BLEND_EQUATION_RGB_EXT 0x8009
+#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha);
+#endif
+#endif /* GL_EXT_blend_equation_separate */
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#define GL_BLEND_DST_RGB_EXT 0x80C8
+#define GL_BLEND_SRC_RGB_EXT 0x80C9
+#define GL_BLEND_DST_ALPHA_EXT 0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+#endif /* GL_EXT_blend_func_separate */
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif /* GL_EXT_blend_logic_op */
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#define GL_MIN_EXT 0x8007
+#define GL_MAX_EXT 0x8008
+#define GL_FUNC_ADD_EXT 0x8006
+#define GL_BLEND_EQUATION_EXT 0x8009
+typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_blend_minmax */
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#define GL_FUNC_SUBTRACT_EXT 0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B
+#endif /* GL_EXT_blend_subtract */
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0
+#endif /* GL_EXT_clip_volume_hint */
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#define GL_CMYK_EXT 0x800C
+#define GL_CMYKA_EXT 0x800D
+#define GL_PACK_CMYK_HINT_EXT 0x800E
+#define GL_UNPACK_CMYK_HINT_EXT 0x800F
+#endif /* GL_EXT_cmyka */
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+#endif /* GL_EXT_color_subtable */
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9
+typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif
+#endif /* GL_EXT_compiled_vertex_array */
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#define GL_CONVOLUTION_1D_EXT 0x8010
+#define GL_CONVOLUTION_2D_EXT 0x8011
+#define GL_SEPARABLE_2D_EXT 0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015
+#define GL_REDUCE_EXT 0x8016
+#define GL_CONVOLUTION_FORMAT_EXT 0x8017
+#define GL_CONVOLUTION_WIDTH_EXT 0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+#endif
+#endif /* GL_EXT_convolution */
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#define GL_TANGENT_ARRAY_EXT 0x8439
+#define GL_BINORMAL_ARRAY_EXT 0x843A
+#define GL_CURRENT_TANGENT_EXT 0x843B
+#define GL_CURRENT_BINORMAL_EXT 0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443
+#define GL_MAP1_TANGENT_EXT 0x8444
+#define GL_MAP2_TANGENT_EXT 0x8445
+#define GL_MAP1_BINORMAL_EXT 0x8446
+#define GL_MAP2_BINORMAL_EXT 0x8447
+typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *v);
+GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *v);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_coordinate_frame */
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_EXT_copy_texture */
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#define GL_CULL_VERTEX_EXT 0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_cull_vertex */
+
+#ifndef GL_EXT_debug_label
+#define GL_EXT_debug_label 1
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F
+#define GL_PROGRAM_OBJECT_EXT 0x8B40
+#define GL_SHADER_OBJECT_EXT 0x8B48
+#define GL_BUFFER_OBJECT_EXT 0x9151
+#define GL_QUERY_OBJECT_EXT 0x9153
+#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154
+typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_EXT_debug_label */
+
+#ifndef GL_EXT_debug_marker
+#define GL_EXT_debug_marker 1
+typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPopGroupMarkerEXT (void);
+#endif
+#endif /* GL_EXT_debug_marker */
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890
+#define GL_DEPTH_BOUNDS_EXT 0x8891
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax);
+#endif
+#endif /* GL_EXT_depth_bounds_test */
+
+#ifndef GL_EXT_direct_state_access
+#define GL_EXT_direct_state_access 1
+#define GL_PROGRAM_MATRIX_EXT 0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F
+typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data);
+typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data);
+typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target);
+typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixPopEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixPushEXT (GLenum mode);
+GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture);
+GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data);
+GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data);
+GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img);
+GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img);
+GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer);
+GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params);
+GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params);
+GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string);
+GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target);
+GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target);
+GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array);
+GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array);
+GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param);
+GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param);
+GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x);
+GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit);
+GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor);
+#endif
+#endif /* GL_EXT_direct_state_access */
+
+#ifndef GL_EXT_draw_buffers2
+#define GL_EXT_draw_buffers2 1
+typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+#endif
+#endif /* GL_EXT_draw_buffers2 */
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_draw_instanced */
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+#endif
+#endif /* GL_EXT_draw_range_elements */
+
+#ifndef GL_EXT_external_buffer
+#define GL_EXT_external_buffer 1
+typedef void *GLeglClientBufferEXT;
+typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags);
+#endif
+#endif /* GL_EXT_external_buffer */
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_fog_coord */
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* GL_EXT_framebuffer_blit */
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT 0x8D57
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_EXT_framebuffer_multisample */
+
+#ifndef GL_EXT_framebuffer_multisample_blit_scaled
+#define GL_EXT_framebuffer_multisample_blit_scaled 1
+#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB
+#endif /* GL_EXT_framebuffer_multisample_blit_scaled */
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
+#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
+#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
+#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
+#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
+#define GL_STENCIL_ATTACHMENT_EXT 0x8D20
+#define GL_FRAMEBUFFER_EXT 0x8D40
+#define GL_RENDERBUFFER_EXT 0x8D41
+#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
+#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
+#define GL_STENCIL_INDEX1_EXT 0x8D46
+#define GL_STENCIL_INDEX4_EXT 0x8D47
+#define GL_STENCIL_INDEX8_EXT 0x8D48
+#define GL_STENCIL_INDEX16_EXT 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target);
+#endif
+#endif /* GL_EXT_framebuffer_object */
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB 1
+#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA
+#endif /* GL_EXT_framebuffer_sRGB */
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_EXT_geometry_shader4 1
+#define GL_GEOMETRY_SHADER_EXT 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE
+#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+#define GL_LINES_ADJACENCY_EXT 0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_PROGRAM_POINT_SIZE_EXT 0x8642
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
+#endif
+#endif /* GL_EXT_geometry_shader4 */
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#endif
+#endif /* GL_EXT_gpu_program_parameters */
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0
+#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1
+#define GL_SAMPLER_BUFFER_EXT 0x8DC2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5
+#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6
+#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7
+#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8
+#define GL_INT_SAMPLER_1D_EXT 0x8DC9
+#define GL_INT_SAMPLER_2D_EXT 0x8DCA
+#define GL_INT_SAMPLER_3D_EXT 0x8DCB
+#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC
+#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD
+#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_EXT_gpu_shader4 */
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#define GL_HISTOGRAM_EXT 0x8024
+#define GL_PROXY_HISTOGRAM_EXT 0x8025
+#define GL_HISTOGRAM_WIDTH_EXT 0x8026
+#define GL_HISTOGRAM_FORMAT_EXT 0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C
+#define GL_HISTOGRAM_SINK_EXT 0x802D
+#define GL_MINMAX_EXT 0x802E
+#define GL_MINMAX_FORMAT_EXT 0x802F
+#define GL_MINMAX_SINK_EXT 0x8030
+#define GL_TABLE_TOO_LARGE_EXT 0x8031
+typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum target);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum target);
+#endif
+#endif /* GL_EXT_histogram */
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#define GL_IUI_V2F_EXT 0x81AD
+#define GL_IUI_V3F_EXT 0x81AE
+#define GL_IUI_N3F_V2F_EXT 0x81AF
+#define GL_IUI_N3F_V3F_EXT 0x81B0
+#define GL_T2F_IUI_V2F_EXT 0x81B1
+#define GL_T2F_IUI_V3F_EXT 0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4
+#endif /* GL_EXT_index_array_formats */
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#define GL_INDEX_TEST_EXT 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT 0x81B6
+#define GL_INDEX_TEST_REF_EXT 0x81B7
+typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref);
+#endif
+#endif /* GL_EXT_index_func */
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#define GL_INDEX_MATERIAL_EXT 0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA
+typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode);
+#endif
+#endif /* GL_EXT_index_material */
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif /* GL_EXT_index_texture */
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#define GL_FRAGMENT_MATERIAL_EXT 0x8349
+#define GL_FRAGMENT_NORMAL_EXT 0x834A
+#define GL_FRAGMENT_COLOR_EXT 0x834C
+#define GL_ATTENUATION_EXT 0x834D
+#define GL_SHADOW_ATTENUATION_EXT 0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F
+#define GL_TEXTURE_LIGHT_EXT 0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum mode);
+GLAPI void APIENTRY glTextureLightEXT (GLenum pname);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode);
+#endif
+#endif /* GL_EXT_light_texture */
+
+#ifndef GL_EXT_memory_object
+#define GL_EXT_memory_object 1
+#define GL_TEXTURE_TILING_EXT 0x9580
+#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581
+#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B
+#define GL_NUM_TILING_TYPES_EXT 0x9582
+#define GL_TILING_TYPES_EXT 0x9583
+#define GL_OPTIMAL_TILING_EXT 0x9584
+#define GL_LINEAR_TILING_EXT 0x9585
+#define GL_NUM_DEVICE_UUIDS_EXT 0x9596
+#define GL_DEVICE_UUID_EXT 0x9597
+#define GL_DRIVER_UUID_EXT 0x9598
+#define GL_UUID_SIZE_EXT 16
+typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data);
+typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data);
+typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects);
+typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject);
+typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects);
+typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data);
+GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data);
+GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects);
+GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject);
+GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects);
+GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params);
+GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_EXT_memory_object */
+
+#ifndef GL_EXT_memory_object_fd
+#define GL_EXT_memory_object_fd 1
+#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586
+typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd);
+#endif
+#endif /* GL_EXT_memory_object_fd */
+
+#ifndef GL_EXT_memory_object_win32
+#define GL_EXT_memory_object_win32 1
+#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587
+#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588
+#define GL_DEVICE_LUID_EXT 0x9599
+#define GL_DEVICE_NODE_MASK_EXT 0x959A
+#define GL_LUID_SIZE_EXT 8
+#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589
+#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A
+#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B
+#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C
+typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle);
+typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle);
+GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name);
+#endif
+#endif /* GL_EXT_memory_object_win32 */
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif /* GL_EXT_misc_attribute */
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_multi_draw_arrays */
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#define GL_MULTISAMPLE_EXT 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F
+#define GL_SAMPLE_MASK_EXT 0x80A0
+#define GL_1PASS_EXT 0x80A1
+#define GL_2PASS_0_EXT 0x80A2
+#define GL_2PASS_1_EXT 0x80A3
+#define GL_4PASS_0_EXT 0x80A4
+#define GL_4PASS_1_EXT 0x80A5
+#define GL_4PASS_2_EXT 0x80A6
+#define GL_4PASS_3_EXT 0x80A7
+#define GL_SAMPLE_BUFFERS_EXT 0x80A8
+#define GL_SAMPLES_EXT 0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB
+#define GL_SAMPLE_PATTERN_EXT 0x80AC
+#define GL_MULTISAMPLE_BIT_EXT 0x20000000
+typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern);
+#endif
+#endif /* GL_EXT_multisample */
+
+#ifndef GL_EXT_multiview_tessellation_geometry_shader
+#define GL_EXT_multiview_tessellation_geometry_shader 1
+#endif /* GL_EXT_multiview_tessellation_geometry_shader */
+
+#ifndef GL_EXT_multiview_texture_multisample
+#define GL_EXT_multiview_texture_multisample 1
+#endif /* GL_EXT_multiview_texture_multisample */
+
+#ifndef GL_EXT_multiview_timer_query
+#define GL_EXT_multiview_timer_query 1
+#endif /* GL_EXT_multiview_timer_query */
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_EXT 0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
+#define GL_DEPTH24_STENCIL8_EXT 0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1
+#endif /* GL_EXT_packed_depth_stencil */
+
+#ifndef GL_EXT_packed_float
+#define GL_EXT_packed_float 1
+#define GL_R11F_G11F_B10F_EXT 0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C
+#endif /* GL_EXT_packed_float */
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036
+#endif /* GL_EXT_packed_pixels */
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#define GL_COLOR_INDEX1_EXT 0x80E2
+#define GL_COLOR_INDEX2_EXT 0x80E3
+#define GL_COLOR_INDEX4_EXT 0x80E4
+#define GL_COLOR_INDEX8_EXT 0x80E5
+#define GL_COLOR_INDEX12_EXT 0x80E6
+#define GL_COLOR_INDEX16_EXT 0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_paletted_texture */
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF
+#endif /* GL_EXT_pixel_buffer_object */
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330
+#define GL_PIXEL_MAG_FILTER_EXT 0x8331
+#define GL_PIXEL_MIN_FILTER_EXT 0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333
+#define GL_CUBIC_EXT 0x8334
+#define GL_AVERAGE_EXT 0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_pixel_transform */
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif /* GL_EXT_pixel_transform_color_table */
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_EXT_point_parameters */
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#define GL_POLYGON_OFFSET_EXT 0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias);
+#endif
+#endif /* GL_EXT_polygon_offset */
+
+#ifndef GL_EXT_polygon_offset_clamp
+#define GL_EXT_polygon_offset_clamp 1
+#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_EXT_polygon_offset_clamp */
+
+#ifndef GL_EXT_post_depth_coverage
+#define GL_EXT_post_depth_coverage 1
+#endif /* GL_EXT_post_depth_coverage */
+
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
+#define GL_PROVOKING_VERTEX_EXT 0x8E4F
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_provoking_vertex */
+
+#ifndef GL_EXT_raster_multisample
+#define GL_EXT_raster_multisample 1
+#define GL_RASTER_MULTISAMPLE_EXT 0x9327
+#define GL_RASTER_SAMPLES_EXT 0x9328
+#define GL_MAX_RASTER_SAMPLES_EXT 0x9329
+#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A
+#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B
+#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C
+typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_EXT_raster_multisample */
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#define GL_RESCALE_NORMAL_EXT 0x803A
+#endif /* GL_EXT_rescale_normal */
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_secondary_color */
+
+#ifndef GL_EXT_semaphore
+#define GL_EXT_semaphore 1
+#define GL_LAYOUT_GENERAL_EXT 0x958D
+#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E
+#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F
+#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590
+#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591
+#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592
+#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593
+#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530
+#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531
+typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores);
+typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores);
+typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore);
+typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params);
+typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params);
+typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
+typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores);
+GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores);
+GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore);
+GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params);
+GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params);
+GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts);
+GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts);
+#endif
+#endif /* GL_EXT_semaphore */
+
+#ifndef GL_EXT_semaphore_fd
+#define GL_EXT_semaphore_fd 1
+typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd);
+#endif
+#endif /* GL_EXT_semaphore_fd */
+
+#ifndef GL_EXT_semaphore_win32
+#define GL_EXT_semaphore_win32 1
+#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594
+#define GL_D3D12_FENCE_VALUE_EXT 0x9595
+typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle);
+typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle);
+GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name);
+#endif
+#endif /* GL_EXT_semaphore_win32 */
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+#define GL_ACTIVE_PROGRAM_EXT 0x8B8D
+typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program);
+GLAPI void APIENTRY glActiveProgramEXT (GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string);
+#endif
+#endif /* GL_EXT_separate_shader_objects */
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8
+#define GL_SINGLE_COLOR_EXT 0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA
+#endif /* GL_EXT_separate_specular_color */
+
+#ifndef GL_EXT_shader_framebuffer_fetch
+#define GL_EXT_shader_framebuffer_fetch 1
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52
+#endif /* GL_EXT_shader_framebuffer_fetch */
+
+#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent
+#define GL_EXT_shader_framebuffer_fetch_non_coherent 1
+typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void);
+#endif
+#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */
+
+#ifndef GL_EXT_shader_image_load_formatted
+#define GL_EXT_shader_image_load_formatted 1
+#endif /* GL_EXT_shader_image_load_formatted */
+
+#ifndef GL_EXT_shader_image_load_store
+#define GL_EXT_shader_image_load_store 1
+#define GL_MAX_IMAGE_UNITS_EXT 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39
+#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A
+#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E
+#define GL_IMAGE_1D_EXT 0x904C
+#define GL_IMAGE_2D_EXT 0x904D
+#define GL_IMAGE_3D_EXT 0x904E
+#define GL_IMAGE_2D_RECT_EXT 0x904F
+#define GL_IMAGE_CUBE_EXT 0x9050
+#define GL_IMAGE_BUFFER_EXT 0x9051
+#define GL_IMAGE_1D_ARRAY_EXT 0x9052
+#define GL_IMAGE_2D_ARRAY_EXT 0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054
+#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056
+#define GL_INT_IMAGE_1D_EXT 0x9057
+#define GL_INT_IMAGE_2D_EXT 0x9058
+#define GL_INT_IMAGE_3D_EXT 0x9059
+#define GL_INT_IMAGE_2D_RECT_EXT 0x905A
+#define GL_INT_IMAGE_CUBE_EXT 0x905B
+#define GL_INT_IMAGE_BUFFER_EXT 0x905C
+#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D
+#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C
+#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D
+#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002
+#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020
+#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000
+#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers);
+#endif
+#endif /* GL_EXT_shader_image_load_store */
+
+#ifndef GL_EXT_shader_integer_mix
+#define GL_EXT_shader_integer_mix 1
+#endif /* GL_EXT_shader_integer_mix */
+
+#ifndef GL_EXT_shader_samples_identical
+#define GL_EXT_shader_samples_identical 1
+#endif /* GL_EXT_shader_samples_identical */
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+#endif /* GL_EXT_shadow_funcs */
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB
+#endif /* GL_EXT_shared_texture_palette */
+
+#ifndef GL_EXT_sparse_texture2
+#define GL_EXT_sparse_texture2 1
+#endif /* GL_EXT_sparse_texture2 */
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_EXT_stencil_clear_tag 1
+#define GL_STENCIL_TAG_BITS_EXT 0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3
+typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag);
+#endif
+#endif /* GL_EXT_stencil_clear_tag */
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face);
+#endif
+#endif /* GL_EXT_stencil_two_side */
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+#endif /* GL_EXT_stencil_wrap */
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_EXT_subtexture */
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#define GL_ALPHA4_EXT 0x803B
+#define GL_ALPHA8_EXT 0x803C
+#define GL_ALPHA12_EXT 0x803D
+#define GL_ALPHA16_EXT 0x803E
+#define GL_LUMINANCE4_EXT 0x803F
+#define GL_LUMINANCE8_EXT 0x8040
+#define GL_LUMINANCE12_EXT 0x8041
+#define GL_LUMINANCE16_EXT 0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
+#define GL_INTENSITY_EXT 0x8049
+#define GL_INTENSITY4_EXT 0x804A
+#define GL_INTENSITY8_EXT 0x804B
+#define GL_INTENSITY12_EXT 0x804C
+#define GL_INTENSITY16_EXT 0x804D
+#define GL_RGB2_EXT 0x804E
+#define GL_RGB4_EXT 0x804F
+#define GL_RGB5_EXT 0x8050
+#define GL_RGB8_EXT 0x8051
+#define GL_RGB10_EXT 0x8052
+#define GL_RGB12_EXT 0x8053
+#define GL_RGB16_EXT 0x8054
+#define GL_RGBA2_EXT 0x8055
+#define GL_RGBA4_EXT 0x8056
+#define GL_RGB5_A1_EXT 0x8057
+#define GL_RGBA8_EXT 0x8058
+#define GL_RGB10_A2_EXT 0x8059
+#define GL_RGBA12_EXT 0x805A
+#define GL_RGBA16_EXT 0x805B
+#define GL_TEXTURE_RED_SIZE_EXT 0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
+#define GL_REPLACE_EXT 0x8062
+#define GL_PROXY_TEXTURE_1D_EXT 0x8063
+#define GL_PROXY_TEXTURE_2D_EXT 0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT 0x8065
+#endif /* GL_EXT_texture */
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#define GL_PACK_SKIP_IMAGES_EXT 0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
+#define GL_TEXTURE_3D_EXT 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_EXT_texture3D */
+
+#ifndef GL_EXT_texture_array
+#define GL_EXT_texture_array 1
+#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19
+#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif
+#endif /* GL_EXT_texture_array */
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_EXT_texture_buffer_object 1
+#define GL_TEXTURE_BUFFER_EXT 0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E
+typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_EXT_texture_buffer_object */
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc 1
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73
+#endif /* GL_EXT_texture_compression_latc */
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#endif /* GL_EXT_texture_compression_rgtc */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#endif /* GL_EXT_texture_compression_s3tc */
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_EXT_texture_cube_map 1
+#define GL_NORMAL_MAP_EXT 0x8511
+#define GL_REFLECTION_MAP_EXT 0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C
+#endif /* GL_EXT_texture_cube_map */
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif /* GL_EXT_texture_env_add */
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858A
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859A
+#endif /* GL_EXT_texture_env_combine */
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT3_RGBA_EXT 0x8741
+#endif /* GL_EXT_texture_env_dot3 */
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif /* GL_EXT_texture_filter_anisotropic */
+
+#ifndef GL_EXT_texture_filter_minmax
+#define GL_EXT_texture_filter_minmax 1
+#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366
+#define GL_WEIGHTED_AVERAGE_EXT 0x9367
+#endif /* GL_EXT_texture_filter_minmax */
+
+#ifndef GL_EXT_texture_integer
+#define GL_EXT_texture_integer 1
+#define GL_RGBA32UI_EXT 0x8D70
+#define GL_RGB32UI_EXT 0x8D71
+#define GL_ALPHA32UI_EXT 0x8D72
+#define GL_INTENSITY32UI_EXT 0x8D73
+#define GL_LUMINANCE32UI_EXT 0x8D74
+#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75
+#define GL_RGBA16UI_EXT 0x8D76
+#define GL_RGB16UI_EXT 0x8D77
+#define GL_ALPHA16UI_EXT 0x8D78
+#define GL_INTENSITY16UI_EXT 0x8D79
+#define GL_LUMINANCE16UI_EXT 0x8D7A
+#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B
+#define GL_RGBA8UI_EXT 0x8D7C
+#define GL_RGB8UI_EXT 0x8D7D
+#define GL_ALPHA8UI_EXT 0x8D7E
+#define GL_INTENSITY8UI_EXT 0x8D7F
+#define GL_LUMINANCE8UI_EXT 0x8D80
+#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81
+#define GL_RGBA32I_EXT 0x8D82
+#define GL_RGB32I_EXT 0x8D83
+#define GL_ALPHA32I_EXT 0x8D84
+#define GL_INTENSITY32I_EXT 0x8D85
+#define GL_LUMINANCE32I_EXT 0x8D86
+#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87
+#define GL_RGBA16I_EXT 0x8D88
+#define GL_RGB16I_EXT 0x8D89
+#define GL_ALPHA16I_EXT 0x8D8A
+#define GL_INTENSITY16I_EXT 0x8D8B
+#define GL_LUMINANCE16I_EXT 0x8D8C
+#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D
+#define GL_RGBA8I_EXT 0x8D8E
+#define GL_RGB8I_EXT 0x8D8F
+#define GL_ALPHA8I_EXT 0x8D90
+#define GL_INTENSITY8I_EXT 0x8D91
+#define GL_LUMINANCE8I_EXT 0x8D92
+#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93
+#define GL_RED_INTEGER_EXT 0x8D94
+#define GL_GREEN_INTEGER_EXT 0x8D95
+#define GL_BLUE_INTEGER_EXT 0x8D96
+#define GL_ALPHA_INTEGER_EXT 0x8D97
+#define GL_RGB_INTEGER_EXT 0x8D98
+#define GL_RGBA_INTEGER_EXT 0x8D99
+#define GL_BGR_INTEGER_EXT 0x8D9A
+#define GL_BGRA_INTEGER_EXT 0x8D9B
+#define GL_LUMINANCE_INTEGER_EXT 0x8D9C
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D
+#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
+typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#endif
+#endif /* GL_EXT_texture_integer */
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+#endif /* GL_EXT_texture_lod_bias */
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+#define GL_MIRROR_CLAMP_EXT 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912
+#endif /* GL_EXT_texture_mirror_clamp */
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#define GL_TEXTURE_PRIORITY_EXT 0x8066
+#define GL_TEXTURE_RESIDENT_EXT 0x8067
+#define GL_TEXTURE_1D_BINDING_EXT 0x8068
+#define GL_TEXTURE_2D_BINDING_EXT 0x8069
+#define GL_TEXTURE_3D_BINDING_EXT 0x806A
+typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+#endif /* GL_EXT_texture_object */
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#define GL_PERTURB_EXT 0x85AE
+#define GL_TEXTURE_NORMAL_EXT 0x85AF
+typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_texture_perturb_normal */
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#define GL_SRGB_EXT 0x8C40
+#define GL_SRGB8_EXT 0x8C41
+#define GL_SRGB_ALPHA_EXT 0x8C42
+#define GL_SRGB8_ALPHA8_EXT 0x8C43
+#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
+#define GL_SLUMINANCE_EXT 0x8C46
+#define GL_SLUMINANCE8_EXT 0x8C47
+#define GL_COMPRESSED_SRGB_EXT 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
+#endif /* GL_EXT_texture_sRGB */
+
+#ifndef GL_EXT_texture_sRGB_R8
+#define GL_EXT_texture_sRGB_R8 1
+#define GL_SR8_EXT 0x8FBD
+#endif /* GL_EXT_texture_sRGB_R8 */
+
+#ifndef GL_EXT_texture_sRGB_RG8
+#define GL_EXT_texture_sRGB_RG8 1
+#define GL_SRG8_EXT 0x8FBE
+#endif /* GL_EXT_texture_sRGB_RG8 */
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48
+#define GL_DECODE_EXT 0x8A49
+#define GL_SKIP_DECODE_EXT 0x8A4A
+#endif /* GL_EXT_texture_sRGB_decode */
+
+#ifndef GL_EXT_texture_shadow_lod
+#define GL_EXT_texture_shadow_lod 1
+#endif /* GL_EXT_texture_shadow_lod */
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_EXT_texture_shared_exponent 1
+#define GL_RGB9_E5_EXT 0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F
+#endif /* GL_EXT_texture_shared_exponent */
+
+#ifndef GL_EXT_texture_snorm
+#define GL_EXT_texture_snorm 1
+#define GL_ALPHA_SNORM 0x9010
+#define GL_LUMINANCE_SNORM 0x9011
+#define GL_LUMINANCE_ALPHA_SNORM 0x9012
+#define GL_INTENSITY_SNORM 0x9013
+#define GL_ALPHA8_SNORM 0x9014
+#define GL_LUMINANCE8_SNORM 0x9015
+#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016
+#define GL_INTENSITY8_SNORM 0x9017
+#define GL_ALPHA16_SNORM 0x9018
+#define GL_LUMINANCE16_SNORM 0x9019
+#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A
+#define GL_INTENSITY16_SNORM 0x901B
+#define GL_RED_SNORM 0x8F90
+#define GL_RG_SNORM 0x8F91
+#define GL_RGB_SNORM 0x8F92
+#define GL_RGBA_SNORM 0x8F93
+#endif /* GL_EXT_texture_snorm */
+
+#ifndef GL_EXT_texture_storage
+#define GL_EXT_texture_storage 1
+#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F
+#define GL_RGBA32F_EXT 0x8814
+#define GL_RGB32F_EXT 0x8815
+#define GL_ALPHA32F_EXT 0x8816
+#define GL_LUMINANCE32F_EXT 0x8818
+#define GL_LUMINANCE_ALPHA32F_EXT 0x8819
+#define GL_RGBA16F_EXT 0x881A
+#define GL_RGB16F_EXT 0x881B
+#define GL_ALPHA16F_EXT 0x881C
+#define GL_LUMINANCE16F_EXT 0x881E
+#define GL_LUMINANCE_ALPHA16F_EXT 0x881F
+#define GL_BGRA8_EXT 0x93A1
+#define GL_R8_EXT 0x8229
+#define GL_RG8_EXT 0x822B
+#define GL_R32F_EXT 0x822E
+#define GL_RG32F_EXT 0x8230
+#define GL_R16F_EXT 0x822D
+#define GL_RG16F_EXT 0x822F
+typedef void (APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* GL_EXT_texture_storage */
+
+#ifndef GL_EXT_texture_swizzle
+#define GL_EXT_texture_swizzle 1
+#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42
+#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43
+#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44
+#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46
+#endif /* GL_EXT_texture_swizzle */
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 1
+#define GL_TIME_ELAPSED_EXT 0x88BF
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params);
+#endif
+#endif /* GL_EXT_timer_query */
+
+#ifndef GL_EXT_transform_feedback
+#define GL_EXT_transform_feedback 1
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F
+#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C
+#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D
+#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88
+#define GL_RASTERIZER_DISCARD_EXT 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackEXT (void);
+GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#endif
+#endif /* GL_EXT_transform_feedback */
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#define GL_VERTEX_ARRAY_EXT 0x8074
+#define GL_NORMAL_ARRAY_EXT 0x8075
+#define GL_COLOR_ARRAY_EXT 0x8076
+#define GL_INDEX_ARRAY_EXT 0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT 0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT 0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT 0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT 0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT 0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT 0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT 0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093
+typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint i);
+GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer);
+GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+#endif
+#endif /* GL_EXT_vertex_array */
+
+#ifndef GL_EXT_vertex_array_bgra
+#define GL_EXT_vertex_array_bgra 1
+#endif /* GL_EXT_vertex_array_bgra */
+
+#ifndef GL_EXT_vertex_attrib_64bit
+#define GL_EXT_vertex_attrib_64bit 1
+#define GL_DOUBLE_VEC2_EXT 0x8FFC
+#define GL_DOUBLE_VEC3_EXT 0x8FFD
+#define GL_DOUBLE_VEC4_EXT 0x8FFE
+#define GL_DOUBLE_MAT2_EXT 0x8F46
+#define GL_DOUBLE_MAT3_EXT 0x8F47
+#define GL_DOUBLE_MAT4_EXT 0x8F48
+#define GL_DOUBLE_MAT2x3_EXT 0x8F49
+#define GL_DOUBLE_MAT2x4_EXT 0x8F4A
+#define GL_DOUBLE_MAT3x2_EXT 0x8F4B
+#define GL_DOUBLE_MAT3x4_EXT 0x8F4C
+#define GL_DOUBLE_MAT4x2_EXT 0x8F4D
+#define GL_DOUBLE_MAT4x3_EXT 0x8F4E
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params);
+#endif
+#endif /* GL_EXT_vertex_attrib_64bit */
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#define GL_VERTEX_SHADER_EXT 0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT 0x8781
+#define GL_OP_INDEX_EXT 0x8782
+#define GL_OP_NEGATE_EXT 0x8783
+#define GL_OP_DOT3_EXT 0x8784
+#define GL_OP_DOT4_EXT 0x8785
+#define GL_OP_MUL_EXT 0x8786
+#define GL_OP_ADD_EXT 0x8787
+#define GL_OP_MADD_EXT 0x8788
+#define GL_OP_FRAC_EXT 0x8789
+#define GL_OP_MAX_EXT 0x878A
+#define GL_OP_MIN_EXT 0x878B
+#define GL_OP_SET_GE_EXT 0x878C
+#define GL_OP_SET_LT_EXT 0x878D
+#define GL_OP_CLAMP_EXT 0x878E
+#define GL_OP_FLOOR_EXT 0x878F
+#define GL_OP_ROUND_EXT 0x8790
+#define GL_OP_EXP_BASE_2_EXT 0x8791
+#define GL_OP_LOG_BASE_2_EXT 0x8792
+#define GL_OP_POWER_EXT 0x8793
+#define GL_OP_RECIP_EXT 0x8794
+#define GL_OP_RECIP_SQRT_EXT 0x8795
+#define GL_OP_SUB_EXT 0x8796
+#define GL_OP_CROSS_PRODUCT_EXT 0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798
+#define GL_OP_MOV_EXT 0x8799
+#define GL_OUTPUT_VERTEX_EXT 0x879A
+#define GL_OUTPUT_COLOR0_EXT 0x879B
+#define GL_OUTPUT_COLOR1_EXT 0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC
+#define GL_OUTPUT_FOG_EXT 0x87BD
+#define GL_SCALAR_EXT 0x87BE
+#define GL_VECTOR_EXT 0x87BF
+#define GL_MATRIX_EXT 0x87C0
+#define GL_VARIANT_EXT 0x87C1
+#define GL_INVARIANT_EXT 0x87C2
+#define GL_LOCAL_CONSTANT_EXT 0x87C3
+#define GL_LOCAL_EXT 0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4
+#define GL_X_EXT 0x87D5
+#define GL_Y_EXT 0x87D6
+#define GL_Z_EXT 0x87D7
+#define GL_W_EXT 0x87D8
+#define GL_NEGATIVE_X_EXT 0x87D9
+#define GL_NEGATIVE_Y_EXT 0x87DA
+#define GL_NEGATIVE_Z_EXT 0x87DB
+#define GL_NEGATIVE_W_EXT 0x87DC
+#define GL_ZERO_EXT 0x87DD
+#define GL_ONE_EXT 0x87DE
+#define GL_NEGATIVE_ONE_EXT 0x87DF
+#define GL_NORMALIZED_RANGE_EXT 0x87E0
+#define GL_FULL_RANGE_EXT 0x87E1
+#define GL_CURRENT_VERTEX_EXT 0x87E2
+#define GL_MVP_MATRIX_EXT 0x87E3
+#define GL_VARIANT_VALUE_EXT 0x87E4
+#define GL_VARIANT_DATATYPE_EXT 0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7
+#define GL_VARIANT_ARRAY_EXT 0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9
+#define GL_INVARIANT_VALUE_EXT 0x87EA
+#define GL_INVARIANT_DATATYPE_EXT 0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED
+typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr);
+typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data);
+typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr);
+GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr);
+GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr);
+GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr);
+GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr);
+GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr);
+GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr);
+GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr);
+GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+#endif
+#endif /* GL_EXT_vertex_shader */
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3
+#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502
+#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6
+#define GL_MODELVIEW1_MATRIX_EXT 0x8506
+#define GL_VERTEX_WEIGHTING_EXT 0x8509
+#define GL_MODELVIEW0_EXT 0x1700
+#define GL_MODELVIEW1_EXT 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_vertex_weighting */
+
+#ifndef GL_EXT_win32_keyed_mutex
+#define GL_EXT_win32_keyed_mutex 1
+typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout);
+typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout);
+GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key);
+#endif
+#endif /* GL_EXT_win32_keyed_mutex */
+
+#ifndef GL_EXT_window_rectangles
+#define GL_EXT_window_rectangles 1
+#define GL_INCLUSIVE_EXT 0x8F10
+#define GL_EXCLUSIVE_EXT 0x8F11
+#define GL_WINDOW_RECTANGLE_EXT 0x8F12
+#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13
+#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14
+#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15
+typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box);
+#endif
+#endif /* GL_EXT_window_rectangles */
+
+#ifndef GL_EXT_x11_sync_object
+#define GL_EXT_x11_sync_object 1
+#define GL_SYNC_X11_FENCE_EXT 0x90E1
+typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#endif
+#endif /* GL_EXT_x11_sync_object */
+
+#ifndef GL_GREMEDY_frame_terminator
+#define GL_GREMEDY_frame_terminator 1
+typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameTerminatorGREMEDY (void);
+#endif
+#endif /* GL_GREMEDY_frame_terminator */
+
+#ifndef GL_GREMEDY_string_marker
+#define GL_GREMEDY_string_marker 1
+typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string);
+#endif
+#endif /* GL_GREMEDY_string_marker */
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#define GL_IGNORE_BORDER_HP 0x8150
+#define GL_CONSTANT_BORDER_HP 0x8151
+#define GL_REPLICATE_BORDER_HP 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154
+#endif /* GL_HP_convolution_border_modes */
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#define GL_IMAGE_SCALE_X_HP 0x8155
+#define GL_IMAGE_SCALE_Y_HP 0x8156
+#define GL_IMAGE_TRANSLATE_X_HP 0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP 0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B
+#define GL_IMAGE_MAG_FILTER_HP 0x815C
+#define GL_IMAGE_MIN_FILTER_HP 0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E
+#define GL_CUBIC_HP 0x815F
+#define GL_AVERAGE_HP 0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP 0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_HP_image_transform */
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#define GL_OCCLUSION_TEST_HP 0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP 0x8166
+#endif /* GL_HP_occlusion_test */
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP 0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169
+#endif /* GL_HP_texture_lighting */
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#define GL_CULL_VERTEX_IBM 103050
+#endif /* GL_IBM_cull_vertex */
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride);
+#endif
+#endif /* GL_IBM_multimode_draw_arrays */
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262
+#endif /* GL_IBM_rasterpos_clip */
+
+#ifndef GL_IBM_static_data
+#define GL_IBM_static_data 1
+#define GL_ALL_STATIC_DATA_IBM 103060
+#define GL_STATIC_VERTEX_ARRAY_IBM 103061
+typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target);
+#endif
+#endif /* GL_IBM_static_data */
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_IBM_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_IBM 0x8370
+#endif /* GL_IBM_texture_mirrored_repeat */
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#define GL_VERTEX_ARRAY_LIST_IBM 103070
+#define GL_NORMAL_ARRAY_LIST_IBM 103071
+#define GL_COLOR_ARRAY_LIST_IBM 103072
+#define GL_INDEX_ARRAY_LIST_IBM 103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+#endif
+#endif /* GL_IBM_vertex_array_lists */
+
+#ifndef GL_INGR_blend_func_separate
+#define GL_INGR_blend_func_separate 1
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+#endif /* GL_INGR_blend_func_separate */
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#define GL_RED_MIN_CLAMP_INGR 0x8560
+#define GL_GREEN_MIN_CLAMP_INGR 0x8561
+#define GL_BLUE_MIN_CLAMP_INGR 0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR 0x8563
+#define GL_RED_MAX_CLAMP_INGR 0x8564
+#define GL_GREEN_MAX_CLAMP_INGR 0x8565
+#define GL_BLUE_MAX_CLAMP_INGR 0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR 0x8567
+#endif /* GL_INGR_color_clamp */
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#define GL_INTERLACE_READ_INGR 0x8568
+#endif /* GL_INGR_interlace_read */
+
+#ifndef GL_INTEL_blackhole_render
+#define GL_INTEL_blackhole_render 1
+#define GL_BLACKHOLE_RENDER_INTEL 0x83FC
+#endif /* GL_INTEL_blackhole_render */
+
+#ifndef GL_INTEL_conservative_rasterization
+#define GL_INTEL_conservative_rasterization 1
+#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE
+#endif /* GL_INTEL_conservative_rasterization */
+
+#ifndef GL_INTEL_fragment_shader_ordering
+#define GL_INTEL_fragment_shader_ordering 1
+#endif /* GL_INTEL_fragment_shader_ordering */
+
+#ifndef GL_INTEL_framebuffer_CMAA
+#define GL_INTEL_framebuffer_CMAA 1
+typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void);
+#endif
+#endif /* GL_INTEL_framebuffer_CMAA */
+
+#ifndef GL_INTEL_map_texture
+#define GL_INTEL_map_texture 1
+#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF
+#define GL_LAYOUT_DEFAULT_INTEL 0
+#define GL_LAYOUT_LINEAR_INTEL 1
+#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2
+typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level);
+typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture);
+GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level);
+GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout);
+#endif
+#endif /* GL_INTEL_map_texture */
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#define GL_PARALLEL_ARRAYS_INTEL 0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer);
+GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer);
+#endif
+#endif /* GL_INTEL_parallel_arrays */
+
+#ifndef GL_INTEL_performance_query
+#define GL_INTEL_performance_query 1
+#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000
+#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001
+#define GL_PERFQUERY_WAIT_INTEL 0x83FB
+#define GL_PERFQUERY_FLUSH_INTEL 0x83FA
+#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9
+#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0
+#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1
+#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2
+#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3
+#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4
+#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5
+#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8
+#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9
+#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA
+#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB
+#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC
+#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD
+#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE
+#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF
+#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500
+typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle);
+typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
+typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
+typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle);
+GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
+GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
+GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten);
+GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
+GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#endif
+#endif /* GL_INTEL_performance_query */
+
+#ifndef GL_MESAX_texture_stack
+#define GL_MESAX_texture_stack 1
+#define GL_TEXTURE_1D_STACK_MESAX 0x8759
+#define GL_TEXTURE_2D_STACK_MESAX 0x875A
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E
+#endif /* GL_MESAX_texture_stack */
+
+#ifndef GL_MESA_framebuffer_flip_x
+#define GL_MESA_framebuffer_flip_x 1
+#define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC
+#endif /* GL_MESA_framebuffer_flip_x */
+
+#ifndef GL_MESA_framebuffer_flip_y
+#define GL_MESA_framebuffer_flip_y 1
+#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB
+typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params);
+#endif
+#endif /* GL_MESA_framebuffer_flip_y */
+
+#ifndef GL_MESA_framebuffer_swap_xy
+#define GL_MESA_framebuffer_swap_xy 1
+#define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD
+#endif /* GL_MESA_framebuffer_swap_xy */
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+#define GL_PACK_INVERT_MESA 0x8758
+#endif /* GL_MESA_pack_invert */
+
+#ifndef GL_MESA_program_binary_formats
+#define GL_MESA_program_binary_formats 1
+#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F
+#endif /* GL_MESA_program_binary_formats */
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif
+#endif /* GL_MESA_resize_buffers */
+
+#ifndef GL_MESA_shader_integer_functions
+#define GL_MESA_shader_integer_functions 1
+#endif /* GL_MESA_shader_integer_functions */
+
+#ifndef GL_MESA_tile_raster_order
+#define GL_MESA_tile_raster_order 1
+#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8
+#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9
+#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA
+#endif /* GL_MESA_tile_raster_order */
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v);
+#endif
+#endif /* GL_MESA_window_pos */
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB
+#define GL_YCBCR_MESA 0x8757
+#endif /* GL_MESA_ycbcr_texture */
+
+#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers
+#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1
+#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */
+
+#ifndef GL_NVX_conditional_render
+#define GL_NVX_conditional_render 1
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id);
+GLAPI void APIENTRY glEndConditionalRenderNVX (void);
+#endif
+#endif /* GL_NVX_conditional_render */
+
+#ifndef GL_NVX_gpu_memory_info
+#define GL_NVX_gpu_memory_info 1
+#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
+#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
+#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
+#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
+#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
+#endif /* GL_NVX_gpu_memory_info */
+
+#ifndef GL_NVX_gpu_multicast2
+#define GL_NVX_gpu_multicast2 1
+#define GL_UPLOAD_GPU_MASK_NVX 0x954A
+typedef void (APIENTRYP PFNGLUPLOADGPUMASKNVXPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+typedef void (APIENTRYP PFNGLMULTICASTSCISSORARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLint *v);
+typedef GLuint (APIENTRYP PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray);
+typedef GLuint (APIENTRYP PFNGLASYNCCOPYIMAGESUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUploadGpuMaskNVX (GLbitfield mask);
+GLAPI void APIENTRY glMulticastViewportArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glMulticastViewportPositionWScaleNVX (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+GLAPI void APIENTRY glMulticastScissorArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLint *v);
+GLAPI GLuint APIENTRY glAsyncCopyBufferSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray);
+GLAPI GLuint APIENTRY glAsyncCopyImageSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray);
+#endif
+#endif /* GL_NVX_gpu_multicast2 */
+
+#ifndef GL_NVX_linked_gpu_multicast
+#define GL_NVX_linked_gpu_multicast 1
+#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800
+#define GL_MAX_LGPU_GPUS_NVX 0x92BA
+typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glLGPUInterlockNVX (void);
+#endif
+#endif /* GL_NVX_linked_gpu_multicast */
+
+#ifndef GL_NVX_progress_fence
+#define GL_NVX_progress_fence 1
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRESSFENCENVXPROC) (void);
+typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREUI64NVXPROC) (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray);
+typedef void (APIENTRYP PFNGLWAITSEMAPHOREUI64NVXPROC) (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray);
+typedef void (APIENTRYP PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glCreateProgressFenceNVX (void);
+GLAPI void APIENTRY glSignalSemaphoreui64NVX (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray);
+GLAPI void APIENTRY glWaitSemaphoreui64NVX (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray);
+GLAPI void APIENTRY glClientWaitSemaphoreui64NVX (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray);
+#endif
+#endif /* GL_NVX_progress_fence */
+
+#ifndef GL_NV_alpha_to_coverage_dither_control
+#define GL_NV_alpha_to_coverage_dither_control 1
+#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D
+#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E
+#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F
+#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF
+typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode);
+#endif
+#endif /* GL_NV_alpha_to_coverage_dither_control */
+
+#ifndef GL_NV_bindless_multi_draw_indirect
+#define GL_NV_bindless_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect */
+
+#ifndef GL_NV_bindless_multi_draw_indirect_count
+#define GL_NV_bindless_multi_draw_indirect_count 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect_count */
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif
+#endif /* GL_NV_bindless_texture */
+
+#ifndef GL_NV_blend_equation_advanced
+#define GL_NV_blend_equation_advanced 1
+#define GL_BLEND_OVERLAP_NV 0x9281
+#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280
+#define GL_BLUE_NV 0x1905
+#define GL_COLORBURN_NV 0x929A
+#define GL_COLORDODGE_NV 0x9299
+#define GL_CONJOINT_NV 0x9284
+#define GL_CONTRAST_NV 0x92A1
+#define GL_DARKEN_NV 0x9297
+#define GL_DIFFERENCE_NV 0x929E
+#define GL_DISJOINT_NV 0x9283
+#define GL_DST_ATOP_NV 0x928F
+#define GL_DST_IN_NV 0x928B
+#define GL_DST_NV 0x9287
+#define GL_DST_OUT_NV 0x928D
+#define GL_DST_OVER_NV 0x9289
+#define GL_EXCLUSION_NV 0x92A0
+#define GL_GREEN_NV 0x1904
+#define GL_HARDLIGHT_NV 0x929B
+#define GL_HARDMIX_NV 0x92A9
+#define GL_HSL_COLOR_NV 0x92AF
+#define GL_HSL_HUE_NV 0x92AD
+#define GL_HSL_LUMINOSITY_NV 0x92B0
+#define GL_HSL_SATURATION_NV 0x92AE
+#define GL_INVERT_OVG_NV 0x92B4
+#define GL_INVERT_RGB_NV 0x92A3
+#define GL_LIGHTEN_NV 0x9298
+#define GL_LINEARBURN_NV 0x92A5
+#define GL_LINEARDODGE_NV 0x92A4
+#define GL_LINEARLIGHT_NV 0x92A7
+#define GL_MINUS_CLAMPED_NV 0x92B3
+#define GL_MINUS_NV 0x929F
+#define GL_MULTIPLY_NV 0x9294
+#define GL_OVERLAY_NV 0x9296
+#define GL_PINLIGHT_NV 0x92A8
+#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2
+#define GL_PLUS_CLAMPED_NV 0x92B1
+#define GL_PLUS_DARKER_NV 0x9292
+#define GL_PLUS_NV 0x9291
+#define GL_RED_NV 0x1903
+#define GL_SCREEN_NV 0x9295
+#define GL_SOFTLIGHT_NV 0x929C
+#define GL_SRC_ATOP_NV 0x928E
+#define GL_SRC_IN_NV 0x928A
+#define GL_SRC_NV 0x9286
+#define GL_SRC_OUT_NV 0x928C
+#define GL_SRC_OVER_NV 0x9288
+#define GL_UNCORRELATED_NV 0x9282
+#define GL_VIVIDLIGHT_NV 0x92A6
+#define GL_XOR_NV 0x1506
+typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value);
+GLAPI void APIENTRY glBlendBarrierNV (void);
+#endif
+#endif /* GL_NV_blend_equation_advanced */
+
+#ifndef GL_NV_blend_equation_advanced_coherent
+#define GL_NV_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285
+#endif /* GL_NV_blend_equation_advanced_coherent */
+
+#ifndef GL_NV_blend_minmax_factor
+#define GL_NV_blend_minmax_factor 1
+#endif /* GL_NV_blend_minmax_factor */
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif /* GL_NV_blend_square */
+
+#ifndef GL_NV_clip_space_w_scaling
+#define GL_NV_clip_space_w_scaling 1
+#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C
+#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D
+#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E
+typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff);
+#endif
+#endif /* GL_NV_clip_space_w_scaling */
+
+#ifndef GL_NV_command_list
+#define GL_NV_command_list 1
+#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000
+#define GL_NOP_COMMAND_NV 0x0001
+#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002
+#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003
+#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004
+#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005
+#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006
+#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007
+#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008
+#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009
+#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A
+#define GL_BLEND_COLOR_COMMAND_NV 0x000B
+#define GL_STENCIL_REF_COMMAND_NV 0x000C
+#define GL_LINE_WIDTH_COMMAND_NV 0x000D
+#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E
+#define GL_ALPHA_REF_COMMAND_NV 0x000F
+#define GL_VIEWPORT_COMMAND_NV 0x0010
+#define GL_SCISSOR_COMMAND_NV 0x0011
+#define GL_FRONT_FACE_COMMAND_NV 0x0012
+typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states);
+typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states);
+typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state);
+typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode);
+typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size);
+typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists);
+typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists);
+typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list);
+typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments);
+typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list);
+typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states);
+GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states);
+GLAPI GLboolean APIENTRY glIsStateNV (GLuint state);
+GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode);
+GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size);
+GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype);
+GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count);
+GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count);
+GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists);
+GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists);
+GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list);
+GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count);
+GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments);
+GLAPI void APIENTRY glCompileCommandListNV (GLuint list);
+GLAPI void APIENTRY glCallCommandListNV (GLuint list);
+#endif
+#endif /* GL_NV_command_list */
+
+#ifndef GL_NV_compute_program5
+#define GL_NV_compute_program5 1
+#define GL_COMPUTE_PROGRAM_NV 0x90FB
+#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC
+#endif /* GL_NV_compute_program5 */
+
+#ifndef GL_NV_compute_shader_derivatives
+#define GL_NV_compute_shader_derivatives 1
+#endif /* GL_NV_compute_shader_derivatives */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#define GL_QUERY_WAIT_NV 0x8E13
+#define GL_QUERY_NO_WAIT_NV 0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRenderNV (void);
+#endif
+#endif /* GL_NV_conditional_render */
+
+#ifndef GL_NV_conservative_raster
+#define GL_NV_conservative_raster 1
+#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346
+#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347
+#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348
+#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349
+typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits);
+#endif
+#endif /* GL_NV_conservative_raster */
+
+#ifndef GL_NV_conservative_raster_dilate
+#define GL_NV_conservative_raster_dilate 1
+#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379
+#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A
+#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B
+typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value);
+#endif
+#endif /* GL_NV_conservative_raster_dilate */
+
+#ifndef GL_NV_conservative_raster_pre_snap
+#define GL_NV_conservative_raster_pre_snap 1
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550
+#endif /* GL_NV_conservative_raster_pre_snap */
+
+#ifndef GL_NV_conservative_raster_pre_snap_triangles
+#define GL_NV_conservative_raster_pre_snap_triangles 1
+#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D
+#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E
+#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F
+typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param);
+#endif
+#endif /* GL_NV_conservative_raster_pre_snap_triangles */
+
+#ifndef GL_NV_conservative_raster_underestimation
+#define GL_NV_conservative_raster_underestimation 1
+#endif /* GL_NV_conservative_raster_underestimation */
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F
+#endif /* GL_NV_copy_depth_to_color */
+
+#ifndef GL_NV_copy_image
+#define GL_NV_copy_image 1
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* GL_NV_copy_image */
+
+#ifndef GL_NV_deep_texture3D
+#define GL_NV_deep_texture3D 1
+#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0
+#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1
+#endif /* GL_NV_deep_texture3D */
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_NV_depth_buffer_float 1
+#define GL_DEPTH_COMPONENT32F_NV 0x8DAB
+#define GL_DEPTH32F_STENCIL8_NV 0x8DAC
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF
+typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glClearDepthdNV (GLdouble depth);
+GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax);
+#endif
+#endif /* GL_NV_depth_buffer_float */
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#define GL_DEPTH_CLAMP_NV 0x864F
+#endif /* GL_NV_depth_clamp */
+
+#ifndef GL_NV_draw_texture
+#define GL_NV_draw_texture 1
+typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#endif
+#endif /* GL_NV_draw_texture */
+
+#ifndef GL_NV_draw_vulkan_image
+#define GL_NV_draw_vulkan_image 1
+typedef void (APIENTRY *GLVULKANPROCNV)(void);
+typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name);
+typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore);
+typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name);
+GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore);
+GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore);
+GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence);
+#endif
+#endif /* GL_NV_draw_vulkan_image */
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#define GL_EVAL_2D_NV 0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1
+#define GL_MAP_TESSELLATION_NV 0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV 0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7
+typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points);
+typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points);
+GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode);
+#endif
+#endif /* GL_NV_evaluators */
+
+#ifndef GL_NV_explicit_multisample
+#define GL_NV_explicit_multisample 1
+#define GL_SAMPLE_POSITION_NV 0x8E50
+#define GL_SAMPLE_MASK_NV 0x8E51
+#define GL_SAMPLE_MASK_VALUE_NV 0x8E52
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55
+#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56
+#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58
+#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask);
+GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer);
+#endif
+#endif /* GL_NV_explicit_multisample */
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV 0x84F2
+#define GL_FENCE_STATUS_NV 0x84F3
+#define GL_FENCE_CONDITION_NV 0x84F4
+typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence);
+GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFinishFenceNV (GLuint fence);
+GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
+#endif
+#endif /* GL_NV_fence */
+
+#ifndef GL_NV_fill_rectangle
+#define GL_NV_fill_rectangle 1
+#define GL_FILL_RECTANGLE_NV 0x933C
+#endif /* GL_NV_fill_rectangle */
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+#define GL_FLOAT_R_NV 0x8880
+#define GL_FLOAT_RG_NV 0x8881
+#define GL_FLOAT_RGB_NV 0x8882
+#define GL_FLOAT_RGBA_NV 0x8883
+#define GL_FLOAT_R16_NV 0x8884
+#define GL_FLOAT_R32_NV 0x8885
+#define GL_FLOAT_RG16_NV 0x8886
+#define GL_FLOAT_RG32_NV 0x8887
+#define GL_FLOAT_RGB16_NV 0x8888
+#define GL_FLOAT_RGB32_NV 0x8889
+#define GL_FLOAT_RGBA16_NV 0x888A
+#define GL_FLOAT_RGBA32_NV 0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D
+#define GL_FLOAT_RGBA_MODE_NV 0x888E
+#endif /* GL_NV_float_buffer */
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#define GL_FOG_DISTANCE_MODE_NV 0x855A
+#define GL_EYE_RADIAL_NV 0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+#endif /* GL_NV_fog_distance */
+
+#ifndef GL_NV_fragment_coverage_to_color
+#define GL_NV_fragment_coverage_to_color 1
+#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD
+#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE
+typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color);
+#endif
+#endif /* GL_NV_fragment_coverage_to_color */
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV 0x8870
+#define GL_MAX_TEXTURE_COORDS_NV 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873
+#define GL_PROGRAM_ERROR_STRING_NV 0x8874
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#endif
+#endif /* GL_NV_fragment_program */
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8
+#endif /* GL_NV_fragment_program2 */
+
+#ifndef GL_NV_fragment_program4
+#define GL_NV_fragment_program4 1
+#endif /* GL_NV_fragment_program4 */
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+#endif /* GL_NV_fragment_program_option */
+
+#ifndef GL_NV_fragment_shader_barycentric
+#define GL_NV_fragment_shader_barycentric 1
+#endif /* GL_NV_fragment_shader_barycentric */
+
+#ifndef GL_NV_fragment_shader_interlock
+#define GL_NV_fragment_shader_interlock 1
+#endif /* GL_NV_fragment_shader_interlock */
+
+#ifndef GL_NV_framebuffer_mixed_samples
+#define GL_NV_framebuffer_mixed_samples 1
+#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331
+#define GL_COLOR_SAMPLES_NV 0x8E20
+#define GL_DEPTH_SAMPLES_NV 0x932D
+#define GL_STENCIL_SAMPLES_NV 0x932E
+#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F
+#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330
+#define GL_COVERAGE_MODULATION_NV 0x9332
+#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333
+typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v);
+GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glCoverageModulationNV (GLenum components);
+#endif
+#endif /* GL_NV_framebuffer_mixed_samples */
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_NV_framebuffer_multisample_coverage */
+
+#ifndef GL_NV_geometry_program4
+#define GL_NV_geometry_program4 1
+#define GL_GEOMETRY_PROGRAM_NV 0x8C26
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28
+typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit);
+GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_NV_geometry_program4 */
+
+#ifndef GL_NV_geometry_shader4
+#define GL_NV_geometry_shader4 1
+#endif /* GL_NV_geometry_shader4 */
+
+#ifndef GL_NV_geometry_shader_passthrough
+#define GL_NV_geometry_shader_passthrough 1
+#endif /* GL_NV_geometry_shader_passthrough */
+
+#ifndef GL_NV_gpu_multicast
+#define GL_NV_gpu_multicast 1
+#define GL_PER_GPU_STORAGE_BIT_NV 0x0800
+#define GL_MULTICAST_GPUS_NV 0x92BA
+#define GL_RENDER_GPU_MASK_NV 0x9558
+#define GL_PER_GPU_STORAGE_NV 0x9548
+#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549
+typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void);
+typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask);
+GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
+GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glMulticastBarrierNV (void);
+GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask);
+GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params);
+#endif
+#endif /* GL_NV_gpu_multicast */
+
+#ifndef GL_NV_gpu_program4
+#define GL_NV_gpu_program4 1
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906
+#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+#endif
+#endif /* GL_NV_gpu_program4 */
+
+#ifndef GL_NV_gpu_program5
+#define GL_NV_gpu_program5 1
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F
+#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44
+#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45
+typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param);
+#endif
+#endif /* GL_NV_gpu_program5 */
+
+#ifndef GL_NV_gpu_program5_mem_extended
+#define GL_NV_gpu_program5_mem_extended 1
+#endif /* GL_NV_gpu_program5_mem_extended */
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+#endif /* GL_NV_gpu_shader5 */
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+typedef unsigned short GLhalfNV;
+#define GL_HALF_FLOAT_NV 0x140B
+typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);
+typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
+typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s);
+GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s);
+GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);
+GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);
+GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);
+GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);
+GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);
+GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+#endif
+#endif /* GL_NV_half_float */
+
+#ifndef GL_NV_internalformat_sample_query
+#define GL_NV_internalformat_sample_query 1
+#define GL_MULTISAMPLES_NV 0x9371
+#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372
+#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373
+#define GL_CONFORMANT_NV 0x9374
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params);
+#endif
+#endif /* GL_NV_internalformat_sample_query */
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
+#endif /* GL_NV_light_max_exponent */
+
+#ifndef GL_NV_memory_attachment
+#define GL_NV_memory_attachment 1
+#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4
+#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5
+#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6
+#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7
+#define GL_MEMORY_ATTACHABLE_NV 0x95A8
+#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9
+#define GL_DETACHED_TEXTURES_NV 0x95AA
+#define GL_DETACHED_BUFFERS_NV 0x95AB
+#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC
+#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD
+typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname);
+typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params);
+GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname);
+GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset);
+GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset);
+#endif
+#endif /* GL_NV_memory_attachment */
+
+#ifndef GL_NV_memory_object_sparse
+#define GL_NV_memory_object_sparse 1
+typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit);
+typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit);
+typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit);
+GLAPI void APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit);
+GLAPI void APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit);
+#endif
+#endif /* GL_NV_memory_object_sparse */
+
+#ifndef GL_NV_mesh_shader
+#define GL_NV_mesh_shader 1
+#define GL_MESH_SHADER_NV 0x9559
+#define GL_TASK_SHADER_NV 0x955A
+#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60
+#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61
+#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62
+#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63
+#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64
+#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65
+#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66
+#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67
+#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68
+#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69
+#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A
+#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B
+#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C
+#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D
+#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E
+#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F
+#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2
+#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3
+#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536
+#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537
+#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538
+#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539
+#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A
+#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D
+#define GL_MAX_MESH_VIEWS_NV 0x9557
+#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF
+#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543
+#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B
+#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C
+#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E
+#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F
+#define GL_MESH_VERTICES_OUT_NV 0x9579
+#define GL_MESH_PRIMITIVES_OUT_NV 0x957A
+#define GL_MESH_OUTPUT_TYPE_NV 0x957B
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D
+#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0
+#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1
+#define GL_MESH_SHADER_BIT_NV 0x00000040
+#define GL_TASK_SHADER_BIT_NV 0x00000080
+#define GL_MESH_SUBROUTINE_NV 0x957C
+#define GL_TASK_SUBROUTINE_NV 0x957D
+#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E
+#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count);
+typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count);
+GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_NV_mesh_shader */
+
+#ifndef GL_NV_multisample_coverage
+#define GL_NV_multisample_coverage 1
+#endif /* GL_NV_multisample_coverage */
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534
+#endif /* GL_NV_multisample_filter_hint */
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#define GL_PIXEL_COUNTER_BITS_NV 0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
+#define GL_PIXEL_COUNT_NV 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
+typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_NV_occlusion_query */
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_NV 0x84F9
+#define GL_UNSIGNED_INT_24_8_NV 0x84FA
+#endif /* GL_NV_packed_depth_stencil */
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_NV_parameter_buffer_object 1
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#endif
+#endif /* GL_NV_parameter_buffer_object */
+
+#ifndef GL_NV_parameter_buffer_object2
+#define GL_NV_parameter_buffer_object2 1
+#endif /* GL_NV_parameter_buffer_object2 */
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+#define GL_PATH_FORMAT_SVG_NV 0x9070
+#define GL_PATH_FORMAT_PS_NV 0x9071
+#define GL_STANDARD_FONT_NAME_NV 0x9072
+#define GL_SYSTEM_FONT_NAME_NV 0x9073
+#define GL_FILE_NAME_NV 0x9074
+#define GL_PATH_STROKE_WIDTH_NV 0x9075
+#define GL_PATH_END_CAPS_NV 0x9076
+#define GL_PATH_INITIAL_END_CAP_NV 0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV 0x9078
+#define GL_PATH_JOIN_STYLE_NV 0x9079
+#define GL_PATH_MITER_LIMIT_NV 0x907A
+#define GL_PATH_DASH_CAPS_NV 0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D
+#define GL_PATH_DASH_OFFSET_NV 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV 0x907F
+#define GL_PATH_FILL_MODE_NV 0x9080
+#define GL_PATH_FILL_MASK_NV 0x9081
+#define GL_PATH_FILL_COVER_MODE_NV 0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV 0x9083
+#define GL_PATH_STROKE_MASK_NV 0x9084
+#define GL_COUNT_UP_NV 0x9088
+#define GL_COUNT_DOWN_NV 0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A
+#define GL_CONVEX_HULL_NV 0x908B
+#define GL_BOUNDING_BOX_NV 0x908D
+#define GL_TRANSLATE_X_NV 0x908E
+#define GL_TRANSLATE_Y_NV 0x908F
+#define GL_TRANSLATE_2D_NV 0x9090
+#define GL_TRANSLATE_3D_NV 0x9091
+#define GL_AFFINE_2D_NV 0x9092
+#define GL_AFFINE_3D_NV 0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098
+#define GL_UTF8_NV 0x909A
+#define GL_UTF16_NV 0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C
+#define GL_PATH_COMMAND_COUNT_NV 0x909D
+#define GL_PATH_COORD_COUNT_NV 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2
+#define GL_SQUARE_NV 0x90A3
+#define GL_ROUND_NV 0x90A4
+#define GL_TRIANGULAR_NV 0x90A5
+#define GL_BEVEL_NV 0x90A6
+#define GL_MITER_REVERT_NV 0x90A7
+#define GL_MITER_TRUNCATE_NV 0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV 0x90A9
+#define GL_USE_MISSING_GLYPH_NV 0x90AA
+#define GL_PATH_ERROR_POSITION_NV 0x90AB
+#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD
+#define GL_ADJACENT_PAIRS_NV 0x90AE
+#define GL_FIRST_TO_REST_NV 0x90AF
+#define GL_PATH_GEN_MODE_NV 0x90B0
+#define GL_PATH_GEN_COEFF_NV 0x90B1
+#define GL_PATH_GEN_COMPONENTS_NV 0x90B3
+#define GL_PATH_STENCIL_FUNC_NV 0x90B7
+#define GL_PATH_STENCIL_REF_NV 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4
+#define GL_MOVE_TO_RESETS_NV 0x90B5
+#define GL_MOVE_TO_CONTINUES_NV 0x90B6
+#define GL_CLOSE_PATH_NV 0x00
+#define GL_MOVE_TO_NV 0x02
+#define GL_RELATIVE_MOVE_TO_NV 0x03
+#define GL_LINE_TO_NV 0x04
+#define GL_RELATIVE_LINE_TO_NV 0x05
+#define GL_HORIZONTAL_LINE_TO_NV 0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
+#define GL_VERTICAL_LINE_TO_NV 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
+#define GL_QUADRATIC_CURVE_TO_NV 0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
+#define GL_CUBIC_CURVE_TO_NV 0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11
+#define GL_SMALL_CCW_ARC_TO_NV 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13
+#define GL_SMALL_CW_ARC_TO_NV 0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15
+#define GL_LARGE_CCW_ARC_TO_NV 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17
+#define GL_LARGE_CW_ARC_TO_NV 0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19
+#define GL_RESTART_PATH_NV 0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4
+#define GL_RECT_NV 0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC
+#define GL_ARC_TO_NV 0xFE
+#define GL_RELATIVE_ARC_TO_NV 0xFF
+#define GL_BOLD_BIT_NV 0x01
+#define GL_ITALIC_BIT_NV 0x02
+#define GL_GLYPH_WIDTH_BIT_NV 0x01
+#define GL_GLYPH_HEIGHT_BIT_NV 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000
+#define GL_FONT_ASCENDER_BIT_NV 0x00200000
+#define GL_FONT_DESCENDER_BIT_NV 0x00400000
+#define GL_FONT_HEIGHT_BIT_NV 0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000
+#define GL_ROUNDED_RECT_NV 0xE8
+#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9
+#define GL_ROUNDED_RECT2_NV 0xEA
+#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB
+#define GL_ROUNDED_RECT4_NV 0xEC
+#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED
+#define GL_ROUNDED_RECT8_NV 0xEE
+#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF
+#define GL_RELATIVE_RECT_NV 0xF7
+#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368
+#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369
+#define GL_FONT_UNAVAILABLE_NV 0x936A
+#define GL_FONT_UNINTELLIGIBLE_NV 0x936B
+#define GL_CONIC_CURVE_TO_NV 0x1A
+#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B
+#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000
+#define GL_STANDARD_FONT_FORMAT_NV 0x936C
+#define GL_2_BYTES_NV 0x1407
+#define GL_3_BYTES_NV 0x1408
+#define GL_4_BYTES_NV 0x1409
+#define GL_EYE_LINEAR_NV 0x2400
+#define GL_OBJECT_LINEAR_NV 0x2401
+#define GL_CONSTANT_NV 0x8576
+#define GL_PATH_FOG_GEN_MODE_NV 0x90AC
+#define GL_PRIMARY_COLOR_NV 0x852C
+#define GL_SECONDARY_COLOR_NV 0x852D
+#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2
+#define GL_PATH_PROJECTION_NV 0x1701
+#define GL_PATH_MODELVIEW_NV 0x1700
+#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3
+#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6
+#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36
+#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3
+#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4
+#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7
+#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38
+#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4
+#define GL_FRAGMENT_INPUT_NV 0x936D
+typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString);
+typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params);
+typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range);
+GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GLAPI GLboolean APIENTRY glIsPathNV (GLuint path);
+GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount);
+GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params);
+GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathFogGenNV (GLenum genMode);
+GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value);
+#endif
+#endif /* GL_NV_path_rendering */
+
+#ifndef GL_NV_path_rendering_shared_edge
+#define GL_NV_path_rendering_shared_edge 1
+#define GL_SHARED_EDGE_NV 0xC0
+#endif /* GL_NV_path_rendering_shared_edge */
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer);
+typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer);
+GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target);
+#endif
+#endif /* GL_NV_pixel_data_range */
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#define GL_POINT_SPRITE_NV 0x8861
+#define GL_COORD_REPLACE_NV 0x8862
+#define GL_POINT_SPRITE_R_MODE_NV 0x8863
+typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params);
+#endif
+#endif /* GL_NV_point_sprite */
+
+#ifndef GL_NV_present_video
+#define GL_NV_present_video 1
+#define GL_FRAME_NV 0x8E26
+#define GL_FIELDS_NV 0x8E27
+#define GL_CURRENT_TIME_NV 0x8E28
+#define GL_NUM_FILL_STREAMS_NV 0x8E29
+#define GL_PRESENT_TIME_NV 0x8E2A
+#define GL_PRESENT_DURATION_NV 0x8E2B
+typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);
+GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#endif
+#endif /* GL_NV_present_video */
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+#define GL_PRIMITIVE_RESTART_NV 0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveRestartNV (void);
+GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index);
+#endif
+#endif /* GL_NV_primitive_restart */
+
+#ifndef GL_NV_primitive_shading_rate
+#define GL_NV_primitive_shading_rate 1
+#define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1
+#define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2
+#endif /* GL_NV_primitive_shading_rate */
+
+#ifndef GL_NV_query_resource
+#define GL_NV_query_resource 1
+#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540
+#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542
+#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544
+#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545
+#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546
+#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547
+typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint count, GLint *buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint count, GLint *buffer);
+#endif
+#endif /* GL_NV_query_resource */
+
+#ifndef GL_NV_query_resource_tag
+#define GL_NV_query_resource_tag 1
+typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds);
+typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds);
+typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds);
+GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds);
+GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString);
+#endif
+#endif /* GL_NV_query_resource_tag */
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852A
+#define GL_CONSTANT_COLOR1_NV 0x852B
+#define GL_SPARE0_NV 0x852E
+#define GL_SPARE1_NV 0x852F
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853A
+#define GL_HALF_BIAS_NEGATE_NV 0x853B
+#define GL_SIGNED_IDENTITY_NV 0x853C
+#define GL_SIGNED_NEGATE_NV 0x853D
+#define GL_SCALE_BY_TWO_NV 0x853E
+#define GL_SCALE_BY_FOUR_NV 0x853F
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854A
+#define GL_COMBINER_CD_OUTPUT_NV 0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
+#define GL_COLOR_SUM_CLAMP_NV 0x854F
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params);
+#endif
+#endif /* GL_NV_register_combiners */
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_NV_register_combiners2 */
+
+#ifndef GL_NV_representative_fragment_test
+#define GL_NV_representative_fragment_test 1
+#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F
+#endif /* GL_NV_representative_fragment_test */
+
+#ifndef GL_NV_robustness_video_memory_purge
+#define GL_NV_robustness_video_memory_purge 1
+#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
+#endif /* GL_NV_robustness_video_memory_purge */
+
+#ifndef GL_NV_sample_locations
+#define GL_NV_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340
+#define GL_SAMPLE_LOCATION_NV 0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glResolveDepthValuesNV (void);
+#endif
+#endif /* GL_NV_sample_locations */
+
+#ifndef GL_NV_sample_mask_override_coverage
+#define GL_NV_sample_mask_override_coverage 1
+#endif /* GL_NV_sample_mask_override_coverage */
+
+#ifndef GL_NV_scissor_exclusive
+#define GL_NV_scissor_exclusive 1
+#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555
+#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v);
+#endif
+#endif /* GL_NV_scissor_exclusive */
+
+#ifndef GL_NV_shader_atomic_counters
+#define GL_NV_shader_atomic_counters 1
+#endif /* GL_NV_shader_atomic_counters */
+
+#ifndef GL_NV_shader_atomic_float
+#define GL_NV_shader_atomic_float 1
+#endif /* GL_NV_shader_atomic_float */
+
+#ifndef GL_NV_shader_atomic_float64
+#define GL_NV_shader_atomic_float64 1
+#endif /* GL_NV_shader_atomic_float64 */
+
+#ifndef GL_NV_shader_atomic_fp16_vector
+#define GL_NV_shader_atomic_fp16_vector 1
+#endif /* GL_NV_shader_atomic_fp16_vector */
+
+#ifndef GL_NV_shader_atomic_int64
+#define GL_NV_shader_atomic_int64 1
+#endif /* GL_NV_shader_atomic_int64 */
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_NV_shader_buffer_load 1
+#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D
+#define GL_GPU_ADDRESS_NV 0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35
+typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);
+typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access);
+GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target);
+GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target);
+GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access);
+GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer);
+GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer);
+GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result);
+GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_NV_shader_buffer_load */
+
+#ifndef GL_NV_shader_buffer_store
+#define GL_NV_shader_buffer_store 1
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
+#endif /* GL_NV_shader_buffer_store */
+
+#ifndef GL_NV_shader_storage_buffer_object
+#define GL_NV_shader_storage_buffer_object 1
+#endif /* GL_NV_shader_storage_buffer_object */
+
+#ifndef GL_NV_shader_subgroup_partitioned
+#define GL_NV_shader_subgroup_partitioned 1
+#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100
+#endif /* GL_NV_shader_subgroup_partitioned */
+
+#ifndef GL_NV_shader_texture_footprint
+#define GL_NV_shader_texture_footprint 1
+#endif /* GL_NV_shader_texture_footprint */
+
+#ifndef GL_NV_shader_thread_group
+#define GL_NV_shader_thread_group 1
+#define GL_WARP_SIZE_NV 0x9339
+#define GL_WARPS_PER_SM_NV 0x933A
+#define GL_SM_COUNT_NV 0x933B
+#endif /* GL_NV_shader_thread_group */
+
+#ifndef GL_NV_shader_thread_shuffle
+#define GL_NV_shader_thread_shuffle 1
+#endif /* GL_NV_shader_thread_shuffle */
+
+#ifndef GL_NV_shading_rate_image
+#define GL_NV_shading_rate_image 1
+#define GL_SHADING_RATE_IMAGE_NV 0x9563
+#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564
+#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565
+#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568
+#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A
+#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B
+#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C
+#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D
+#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E
+#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F
+#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B
+#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C
+#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D
+#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E
+#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F
+#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE
+#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF
+#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0
+typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate);
+typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize);
+typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order);
+typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture);
+GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate);
+GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location);
+GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize);
+GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates);
+GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order);
+GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations);
+#endif
+#endif /* GL_NV_shading_rate_image */
+
+#ifndef GL_NV_stereo_view_rendering
+#define GL_NV_stereo_view_rendering 1
+#endif /* GL_NV_stereo_view_rendering */
+
+#ifndef GL_NV_tessellation_program5
+#define GL_NV_tessellation_program5 1
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8
+#define GL_TESS_CONTROL_PROGRAM_NV 0x891E
+#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75
+#endif /* GL_NV_tessellation_program5 */
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#define GL_EMBOSS_LIGHT_NV 0x855D
+#define GL_EMBOSS_CONSTANT_NV 0x855E
+#define GL_EMBOSS_MAP_NV 0x855F
+#endif /* GL_NV_texgen_emboss */
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+#endif /* GL_NV_texgen_reflection */
+
+#ifndef GL_NV_texture_barrier
+#define GL_NV_texture_barrier 1
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureBarrierNV (void);
+#endif
+#endif /* GL_NV_texture_barrier */
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif /* GL_NV_texture_compression_vtc */
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858B
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859B
+#endif /* GL_NV_texture_env_combine4 */
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+#endif /* GL_NV_texture_expand_normal */
+
+#ifndef GL_NV_texture_multisample
+#define GL_NV_texture_multisample 1
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045
+#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#endif
+#endif /* GL_NV_texture_multisample */
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_NV 0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8
+#endif /* GL_NV_texture_rectangle */
+
+#ifndef GL_NV_texture_rectangle_compressed
+#define GL_NV_texture_rectangle_compressed 1
+#endif /* GL_NV_texture_rectangle_compressed */
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
+#define GL_SHADER_CONSISTENT_NV 0x86DD
+#define GL_TEXTURE_SHADER_NV 0x86DE
+#define GL_SHADER_OPERATION_NV 0x86DF
+#define GL_CULL_MODES_NV 0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
+#define GL_CONST_EYE_NV 0x86E5
+#define GL_PASS_THROUGH_NV 0x86E6
+#define GL_CULL_FRAGMENT_NV 0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
+#define GL_DOT_PRODUCT_NV 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV 0x86F4
+#define GL_DSDT_NV 0x86F5
+#define GL_DSDT_MAG_NV 0x86F6
+#define GL_DSDT_MAG_VIB_NV 0x86F7
+#define GL_HILO16_NV 0x86F8
+#define GL_SIGNED_HILO_NV 0x86F9
+#define GL_SIGNED_HILO16_NV 0x86FA
+#define GL_SIGNED_RGBA_NV 0x86FB
+#define GL_SIGNED_RGBA8_NV 0x86FC
+#define GL_SIGNED_RGB_NV 0x86FE
+#define GL_SIGNED_RGB8_NV 0x86FF
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV 0x870E
+#define GL_LO_SCALE_NV 0x870F
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
+#define GL_TEXTURE_HI_SIZE_NV 0x871B
+#define GL_TEXTURE_LO_SIZE_NV 0x871C
+#define GL_TEXTURE_DS_SIZE_NV 0x871D
+#define GL_TEXTURE_DT_SIZE_NV 0x871E
+#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+#endif /* GL_NV_texture_shader */
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
+#endif /* GL_NV_texture_shader2 */
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV 0x885E
+#define GL_SIGNED_HILO8_NV 0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
+#endif /* GL_NV_texture_shader3 */
+
+#ifndef GL_NV_timeline_semaphore
+#define GL_NV_timeline_semaphore 1
+#define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595
+#define GL_SEMAPHORE_TYPE_NV 0x95B3
+#define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4
+#define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5
+#define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6
+typedef void (APIENTRYP PFNGLCREATESEMAPHORESNVPROC) (GLsizei n, GLuint *semaphores);
+typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCreateSemaphoresNV (GLsizei n, GLuint *semaphores);
+GLAPI void APIENTRY glSemaphoreParameterivNV (GLuint semaphore, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetSemaphoreParameterivNV (GLuint semaphore, GLenum pname, GLint *params);
+#endif
+#endif /* GL_NV_timeline_semaphore */
+
+#ifndef GL_NV_transform_feedback
+#define GL_NV_transform_feedback 1
+#define GL_BACK_PRIMARY_COLOR_NV 0x8C77
+#define GL_BACK_SECONDARY_COLOR_NV 0x8C78
+#define GL_TEXTURE_COORD_NV 0x8C79
+#define GL_CLIP_DISTANCE_NV 0x8C7A
+#define GL_VERTEX_ID_NV 0x8C7B
+#define GL_PRIMITIVE_ID_NV 0x8C7C
+#define GL_GENERIC_ATTRIB_NV 0x8C7D
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80
+#define GL_ACTIVE_VARYINGS_NV 0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86
+#define GL_PRIMITIVES_GENERATED_NV 0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88
+#define GL_RASTERIZER_DISCARD_NV 0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C
+#define GL_SEPARATE_ATTRIBS_NV 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F
+#define GL_LAYER_NV 0x8DAA
+#define GL_NEXT_BUFFER_NV -2
+#define GL_SKIP_COMPONENTS4_NV -3
+#define GL_SKIP_COMPONENTS3_NV -4
+#define GL_SKIP_COMPONENTS2_NV -5
+#define GL_SKIP_COMPONENTS1_NV -6
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackNV (void);
+GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode);
+GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name);
+GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location);
+GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#endif
+#endif /* GL_NV_transform_feedback */
+
+#ifndef GL_NV_transform_feedback2
+#define GL_NV_transform_feedback2 1
+#define GL_TRANSFORM_FEEDBACK_NV 0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedbackNV (void);
+GLAPI void APIENTRY glResumeTransformFeedbackNV (void);
+GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id);
+#endif
+#endif /* GL_NV_transform_feedback2 */
+
+#ifndef GL_NV_uniform_buffer_unified_memory
+#define GL_NV_uniform_buffer_unified_memory 1
+#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E
+#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F
+#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370
+#endif /* GL_NV_uniform_buffer_unified_memory */
+
+#ifndef GL_NV_vdpau_interop
+#define GL_NV_vdpau_interop 1
+typedef GLintptr GLvdpauSurfaceNV;
+#define GL_SURFACE_STATE_NV 0x86EB
+#define GL_SURFACE_REGISTERED_NV 0x86FD
+#define GL_SURFACE_MAPPED_NV 0x8700
+#define GL_WRITE_DISCARD_NV 0x88BE
+typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress);
+typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access);
+typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress);
+GLAPI void APIENTRY glVDPAUFiniNV (void);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access);
+GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#endif
+#endif /* GL_NV_vdpau_interop */
+
+#ifndef GL_NV_vdpau_interop2
+#define GL_NV_vdpau_interop2 1
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure);
+#endif
+#endif /* GL_NV_vdpau_interop2 */
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#define GL_VERTEX_ARRAY_RANGE_NV 0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer);
+#endif
+#endif /* GL_NV_vertex_array_range */
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif /* GL_NV_vertex_array_range2 */
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+#define GL_NV_vertex_attrib_integer_64bit 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+#endif
+#endif /* GL_NV_vertex_attrib_integer_64bit */
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_NV_vertex_buffer_unified_memory 1
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E
+#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20
+#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21
+#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22
+#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23
+#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28
+#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A
+#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B
+#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C
+#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D
+#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31
+#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32
+#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33
+#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40
+#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41
+#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42
+typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride);
+GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result);
+#endif
+#endif /* GL_NV_vertex_buffer_unified_memory */
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#define GL_VERTEX_PROGRAM_NV 0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV 0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625
+#define GL_CURRENT_ATTRIB_NV 0x8626
+#define GL_PROGRAM_LENGTH_NV 0x8627
+#define GL_PROGRAM_STRING_NV 0x8628
+#define GL_MODELVIEW_PROJECTION_NV 0x8629
+#define GL_IDENTITY_NV 0x862A
+#define GL_INVERSE_NV 0x862B
+#define GL_TRANSPOSE_NV 0x862C
+#define GL_INVERSE_TRANSPOSE_NV 0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV 0x862F
+#define GL_MATRIX0_NV 0x8630
+#define GL_MATRIX1_NV 0x8631
+#define GL_MATRIX2_NV 0x8632
+#define GL_MATRIX3_NV 0x8633
+#define GL_MATRIX4_NV 0x8634
+#define GL_MATRIX5_NV 0x8635
+#define GL_MATRIX6_NV 0x8636
+#define GL_MATRIX7_NV 0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640
+#define GL_CURRENT_MATRIX_NV 0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643
+#define GL_PROGRAM_PARAMETER_NV 0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645
+#define GL_PROGRAM_TARGET_NV 0x8646
+#define GL_PROGRAM_RESIDENT_NV 0x8647
+#define GL_TRACK_MATRIX_NV 0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV 0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F
+typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences);
+GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id);
+GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+#endif /* GL_NV_vertex_program */
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif /* GL_NV_vertex_program1_1 */
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+#endif /* GL_NV_vertex_program2 */
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#endif /* GL_NV_vertex_program2_option */
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+#endif /* GL_NV_vertex_program3 */
+
+#ifndef GL_NV_vertex_program4
+#define GL_NV_vertex_program4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+#endif /* GL_NV_vertex_program4 */
+
+#ifndef GL_NV_video_capture
+#define GL_NV_video_capture 1
+#define GL_VIDEO_BUFFER_NV 0x9020
+#define GL_VIDEO_BUFFER_BINDING_NV 0x9021
+#define GL_FIELD_UPPER_NV 0x9022
+#define GL_FIELD_LOWER_NV 0x9023
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027
+#define GL_VIDEO_BUFFER_PITCH_NV 0x9028
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D
+#define GL_PARTIAL_SUCCESS_NV 0x902E
+#define GL_SUCCESS_NV 0x902F
+#define GL_FAILURE_NV 0x9030
+#define GL_YCBYCR8_422_NV 0x9031
+#define GL_YCBAYCR8A_4224_NV 0x9032
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C
+typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#endif
+#endif /* GL_NV_video_capture */
+
+#ifndef GL_NV_viewport_array2
+#define GL_NV_viewport_array2 1
+#endif /* GL_NV_viewport_array2 */
+
+#ifndef GL_NV_viewport_swizzle
+#define GL_NV_viewport_swizzle 1
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355
+#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356
+#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357
+#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358
+#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359
+#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A
+#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B
+typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew);
+#endif
+#endif /* GL_NV_viewport_swizzle */
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#define GL_INTERLACE_OML 0x8980
+#define GL_INTERLACE_READ_OML 0x8981
+#endif /* GL_OML_interlace */
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#define GL_PACK_RESAMPLE_OML 0x8984
+#define GL_UNPACK_RESAMPLE_OML 0x8985
+#define GL_RESAMPLE_REPLICATE_OML 0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML 0x8987
+#define GL_RESAMPLE_AVERAGE_OML 0x8988
+#define GL_RESAMPLE_DECIMATE_OML 0x8989
+#endif /* GL_OML_resample */
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983
+#endif /* GL_OML_subsample */
+
+#ifndef GL_OVR_multiview
+#define GL_OVR_multiview 1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632
+#define GL_MAX_VIEWS_OVR 0x9631
+#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews);
+#endif
+#endif /* GL_OVR_multiview */
+
+#ifndef GL_OVR_multiview2
+#define GL_OVR_multiview2 1
+#endif /* GL_OVR_multiview2 */
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI 0x1A219
+#define GL_CLIP_NEAR_HINT_PGI 0x1A220
+#define GL_CLIP_FAR_HINT_PGI 0x1A221
+#define GL_WIDE_LINE_HINT_PGI 0x1A222
+#define GL_BACK_NORMALS_HINT_PGI 0x1A223
+typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode);
+#endif
+#endif /* GL_PGI_misc_hints */
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#define GL_VERTEX_DATA_HINT_PGI 0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI 0x1A22D
+#define GL_COLOR3_BIT_PGI 0x00010000
+#define GL_COLOR4_BIT_PGI 0x00020000
+#define GL_EDGEFLAG_BIT_PGI 0x00040000
+#define GL_INDEX_BIT_PGI 0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI 0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000
+#define GL_MAT_EMISSION_BIT_PGI 0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000
+#define GL_MAT_SHININESS_BIT_PGI 0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI 0x04000000
+#define GL_NORMAL_BIT_PGI 0x08000000
+#define GL_TEXCOORD1_BIT_PGI 0x10000000
+#define GL_TEXCOORD2_BIT_PGI 0x20000000
+#define GL_TEXCOORD3_BIT_PGI 0x40000000
+#define GL_TEXCOORD4_BIT_PGI 0x80000000
+#define GL_VERTEX23_BIT_PGI 0x00000004
+#define GL_VERTEX4_BIT_PGI 0x00000008
+#endif /* GL_PGI_vertex_hints */
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#define GL_SCREEN_COORDINATES_REND 0x8490
+#define GL_INVERTED_SCREEN_W_REND 0x8491
+#endif /* GL_REND_screen_coordinates */
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+#define GL_RGB_S3TC 0x83A0
+#define GL_RGB4_S3TC 0x83A1
+#define GL_RGBA_S3TC 0x83A2
+#define GL_RGBA4_S3TC 0x83A3
+#define GL_RGBA_DXT5_S3TC 0x83A4
+#define GL_RGBA4_DXT5_S3TC 0x83A5
+#endif /* GL_S3_s3tc */
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS 0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points);
+#endif
+#endif /* GL_SGIS_detail_texture */
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#define GL_FOG_FUNC_SGIS 0x812A
+#define GL_FOG_FUNC_POINTS_SGIS 0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C
+typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points);
+#endif
+#endif /* GL_SGIS_fog_function */
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
+#endif /* GL_SGIS_generate_mipmap */
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#define GL_MULTISAMPLE_SGIS 0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F
+#define GL_SAMPLE_MASK_SGIS 0x80A0
+#define GL_1PASS_SGIS 0x80A1
+#define GL_2PASS_0_SGIS 0x80A2
+#define GL_2PASS_1_SGIS 0x80A3
+#define GL_4PASS_0_SGIS 0x80A4
+#define GL_4PASS_1_SGIS 0x80A5
+#define GL_4PASS_2_SGIS 0x80A6
+#define GL_4PASS_3_SGIS 0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS 0x80A8
+#define GL_SAMPLES_SGIS 0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB
+#define GL_SAMPLE_PATTERN_SGIS 0x80AC
+typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern);
+#endif
+#endif /* GL_SGIS_multisample */
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#define GL_PIXEL_TEXTURE_SGIS 0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_SGIS_pixel_texture */
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3
+#define GL_EYE_POINT_SGIS 0x81F4
+#define GL_OBJECT_POINT_SGIS 0x81F5
+#define GL_EYE_LINE_SGIS 0x81F6
+#define GL_OBJECT_LINE_SGIS 0x81F7
+#endif /* GL_SGIS_point_line_texgen */
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#define GL_POINT_SIZE_MIN_SGIS 0x8126
+#define GL_POINT_SIZE_MAX_SGIS 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_DISTANCE_ATTENUATION_SGIS 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_SGIS_point_parameters */
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#define GL_LINEAR_SHARPEN_SGIS 0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points);
+#endif
+#endif /* GL_SGIS_sharpen_texture */
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133
+#define GL_TEXTURE_4D_SGIS 0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS 0x8135
+#define GL_TEXTURE_4DSIZE_SGIS 0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS 0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS 0x814F
+typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_SGIS_texture4D */
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_SGIS 0x812D
+#endif /* GL_SGIS_texture_border_clamp */
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF
+typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+#endif /* GL_SGIS_texture_color_mask */
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#define GL_CLAMP_TO_EDGE_SGIS 0x812F
+#endif /* GL_SGIS_texture_edge_clamp */
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#define GL_FILTER4_SGIS 0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147
+typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+#endif /* GL_SGIS_texture_filter4 */
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#define GL_TEXTURE_MIN_LOD_SGIS 0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS 0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D
+#endif /* GL_SGIS_texture_lod */
+
+#ifndef GL_SGIS_texture_select
+#define GL_SGIS_texture_select 1
+#define GL_DUAL_ALPHA4_SGIS 0x8110
+#define GL_DUAL_ALPHA8_SGIS 0x8111
+#define GL_DUAL_ALPHA12_SGIS 0x8112
+#define GL_DUAL_ALPHA16_SGIS 0x8113
+#define GL_DUAL_LUMINANCE4_SGIS 0x8114
+#define GL_DUAL_LUMINANCE8_SGIS 0x8115
+#define GL_DUAL_LUMINANCE12_SGIS 0x8116
+#define GL_DUAL_LUMINANCE16_SGIS 0x8117
+#define GL_DUAL_INTENSITY4_SGIS 0x8118
+#define GL_DUAL_INTENSITY8_SGIS 0x8119
+#define GL_DUAL_INTENSITY12_SGIS 0x811A
+#define GL_DUAL_INTENSITY16_SGIS 0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D
+#define GL_QUAD_ALPHA4_SGIS 0x811E
+#define GL_QUAD_ALPHA8_SGIS 0x811F
+#define GL_QUAD_LUMINANCE4_SGIS 0x8120
+#define GL_QUAD_LUMINANCE8_SGIS 0x8121
+#define GL_QUAD_INTENSITY4_SGIS 0x8122
+#define GL_QUAD_INTENSITY8_SGIS 0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125
+#endif /* GL_SGIS_texture_select */
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#define GL_ASYNC_MARKER_SGIX 0x8329
+typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker);
+#endif
+#endif /* GL_SGIX_async */
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#define GL_ASYNC_HISTOGRAM_SGIX 0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D
+#endif /* GL_SGIX_async_histogram */
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX 0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361
+#endif /* GL_SGIX_async_pixel */
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#define GL_ALPHA_MIN_SGIX 0x8320
+#define GL_ALPHA_MAX_SGIX 0x8321
+#endif /* GL_SGIX_blend_alpha_minmax */
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183
+#endif /* GL_SGIX_calligraphic_fragment */
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F
+#endif /* GL_SGIX_clipmap */
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#define GL_CONVOLUTION_HINT_SGIX 0x8316
+#endif /* GL_SGIX_convolution_accuracy */
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif /* GL_SGIX_depth_pass_instrument */
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#define GL_DEPTH_COMPONENT16_SGIX 0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX 0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX 0x81A7
+#endif /* GL_SGIX_depth_texture */
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif
+#endif /* GL_SGIX_flush_raster */
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#define GL_FOG_OFFSET_SGIX 0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX 0x8199
+#endif /* GL_SGIX_fog_offset */
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#define GL_FRAGMENT_LIGHTING_SGIX 0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406
+#define GL_LIGHT_ENV_MODE_SGIX 0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX 0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX 0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX 0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX 0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX 0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX 0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX 0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX 0x8413
+typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param);
+#endif
+#endif /* GL_SGIX_fragment_lighting */
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#define GL_FRAMEZOOM_SGIX 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D
+typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint factor);
+#endif
+#endif /* GL_SGIX_framezoom */
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params);
+#endif
+#endif /* GL_SGIX_igloo_interface */
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181
+typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker);
+#endif
+#endif /* GL_SGIX_instruments */
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#define GL_INTERLACE_SGIX 0x8094
+#endif /* GL_SGIX_interlace */
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#define GL_IR_INSTRUMENT1_SGIX 0x817F
+#endif /* GL_SGIX_ir_instrument1 */
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#define GL_LIST_PRIORITY_SGIX 0x8182
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params);
+#endif
+#endif /* GL_SGIX_list_priority */
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#define GL_PIXEL_TEX_GEN_SGIX 0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B
+typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode);
+#endif
+#endif /* GL_SGIX_pixel_texture */
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145
+#endif /* GL_SGIX_pixel_tiles */
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002
+#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX 0x8195
+#define GL_DEFORMATIONS_MASK_SGIX 0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield mask);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask);
+#endif
+#endif /* GL_SGIX_polynomial_ffd */
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#define GL_REFERENCE_PLANE_SGIX 0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E
+typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation);
+#endif
+#endif /* GL_SGIX_reference_plane */
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#define GL_PACK_RESAMPLE_SGIX 0x842E
+#define GL_UNPACK_RESAMPLE_SGIX 0x842F
+#define GL_RESAMPLE_REPLICATE_SGIX 0x8433
+#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434
+#define GL_RESAMPLE_DECIMATE_SGIX 0x8430
+#endif /* GL_SGIX_resample */
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#define GL_SCALEBIAS_HINT_SGIX 0x8322
+#endif /* GL_SGIX_scalebias_hint */
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#define GL_TEXTURE_COMPARE_SGIX 0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D
+#endif /* GL_SGIX_shadow */
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#define GL_SHADOW_AMBIENT_SGIX 0x80BF
+#endif /* GL_SGIX_shadow_ambient */
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#define GL_SPRITE_SGIX 0x8148
+#define GL_SPRITE_MODE_SGIX 0x8149
+#define GL_SPRITE_AXIS_SGIX 0x814A
+#define GL_SPRITE_TRANSLATION_SGIX 0x814B
+#define GL_SPRITE_AXIAL_SGIX 0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params);
+#endif
+#endif /* GL_SGIX_sprite */
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4
+#endif /* GL_SGIX_subsample */
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif
+#endif /* GL_SGIX_tag_sample_buffer */
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE
+#endif /* GL_SGIX_texture_add_env */
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B
+#endif /* GL_SGIX_texture_coordinate_clamp */
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190
+#endif /* GL_SGIX_texture_lod_bias */
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif /* GL_SGIX_texture_multi_buffer */
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif /* GL_SGIX_texture_scale_bias */
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#define GL_VERTEX_PRECLIP_SGIX 0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF
+#endif /* GL_SGIX_vertex_preclip */
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#define GL_YCRCB_422_SGIX 0x81BB
+#define GL_YCRCB_444_SGIX 0x81BC
+#endif /* GL_SGIX_ycrcb */
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif /* GL_SGIX_ycrcb_subsample */
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#define GL_YCRCB_SGIX 0x8318
+#define GL_YCRCBA_SGIX 0x8319
+#endif /* GL_SGIX_ycrcba */
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+#define GL_COLOR_MATRIX_SGI 0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif /* GL_SGI_color_matrix */
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#define GL_COLOR_TABLE_SGI 0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI 0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI 0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI 0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params);
+#endif
+#endif /* GL_SGI_color_table */
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD
+#endif /* GL_SGI_texture_color_table */
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6
+typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif
+#endif /* GL_SUNX_constant_data */
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#define GL_WRAP_BORDER_SUN 0x81D4
+#endif /* GL_SUN_convolution_border_modes */
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#define GL_GLOBAL_ALPHA_SUN 0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor);
+#endif
+#endif /* GL_SUN_global_alpha */
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#define GL_QUAD_MESH_SUN 0x8614
+#define GL_TRIANGLE_MESH_SUN 0x8615
+typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+#endif /* GL_SUN_mesh_array */
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#define GL_SLICE_ACCUM_SUN 0x85CC
+#endif /* GL_SUN_slice_accum */
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#define GL_RESTART_SUN 0x0001
+#define GL_REPLACE_MIDDLE_SUN 0x0002
+#define GL_REPLACE_OLDEST_SUN 0x0003
+#define GL_TRIANGLE_LIST_SUN 0x81D7
+#define GL_REPLACEMENT_CODE_SUN 0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN 0x85C4
+#define GL_R1UI_C4UB_V3F_SUN 0x85C5
+#define GL_R1UI_C3F_V3F_SUN 0x85C6
+#define GL_R1UI_N3F_V3F_SUN 0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8
+#define GL_R1UI_T2F_V3F_SUN 0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer);
+#endif
+#endif /* GL_SUN_triangle_list */
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+#endif /* GL_SUN_vertex */
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#define GL_PHONG_WIN 0x80EA
+#define GL_PHONG_HINT_WIN 0x80EB
+#endif /* GL_WIN_phong_shading */
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC
+#endif /* GL_WIN_specular_fog */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__gl_glext_h_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/glxext.h b/src/VBox/Devices/Graphics/vmsvga_glext/glxext.h
new file mode 100644
index 00000000..77c72a6a
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/glxext.h
@@ -0,0 +1,957 @@
+#ifndef __glx_glxext_h_
+#define __glx_glxext_h_
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright 2013-2020 The Khronos Group Inc.
+** SPDX-License-Identifier: MIT
+**
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** https://github.com/KhronosGroup/OpenGL-Registry
+*/
+
+#define GLX_GLXEXT_VERSION 20220530
+
+/* Generated C header for:
+ * API: glx
+ * Versions considered: .*
+ * Versions emitted: 1\.[3-9]
+ * Default extensions included: glx
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GLX_VERSION_1_3
+#define GLX_VERSION_1_3 1
+typedef XID GLXContextID;
+typedef struct __GLXFBConfigRec *GLXFBConfig;
+typedef XID GLXWindow;
+typedef XID GLXPbuffer;
+#define GLX_WINDOW_BIT 0x00000001
+#define GLX_PIXMAP_BIT 0x00000002
+#define GLX_PBUFFER_BIT 0x00000004
+#define GLX_RGBA_BIT 0x00000001
+#define GLX_COLOR_INDEX_BIT 0x00000002
+#define GLX_PBUFFER_CLOBBER_MASK 0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
+#define GLX_AUX_BUFFERS_BIT 0x00000010
+#define GLX_DEPTH_BUFFER_BIT 0x00000020
+#define GLX_STENCIL_BUFFER_BIT 0x00000040
+#define GLX_ACCUM_BUFFER_BIT 0x00000080
+#define GLX_CONFIG_CAVEAT 0x20
+#define GLX_X_VISUAL_TYPE 0x22
+#define GLX_TRANSPARENT_TYPE 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE 0x24
+#define GLX_TRANSPARENT_RED_VALUE 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE 0x28
+#define GLX_DONT_CARE 0xFFFFFFFF
+#define GLX_NONE 0x8000
+#define GLX_SLOW_CONFIG 0x8001
+#define GLX_TRUE_COLOR 0x8002
+#define GLX_DIRECT_COLOR 0x8003
+#define GLX_PSEUDO_COLOR 0x8004
+#define GLX_STATIC_COLOR 0x8005
+#define GLX_GRAY_SCALE 0x8006
+#define GLX_STATIC_GRAY 0x8007
+#define GLX_TRANSPARENT_RGB 0x8008
+#define GLX_TRANSPARENT_INDEX 0x8009
+#define GLX_VISUAL_ID 0x800B
+#define GLX_SCREEN 0x800C
+#define GLX_NON_CONFORMANT_CONFIG 0x800D
+#define GLX_DRAWABLE_TYPE 0x8010
+#define GLX_RENDER_TYPE 0x8011
+#define GLX_X_RENDERABLE 0x8012
+#define GLX_FBCONFIG_ID 0x8013
+#define GLX_RGBA_TYPE 0x8014
+#define GLX_COLOR_INDEX_TYPE 0x8015
+#define GLX_MAX_PBUFFER_WIDTH 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT 0x8017
+#define GLX_MAX_PBUFFER_PIXELS 0x8018
+#define GLX_PRESERVED_CONTENTS 0x801B
+#define GLX_LARGEST_PBUFFER 0x801C
+#define GLX_WIDTH 0x801D
+#define GLX_HEIGHT 0x801E
+#define GLX_EVENT_MASK 0x801F
+#define GLX_DAMAGED 0x8020
+#define GLX_SAVED 0x8021
+#define GLX_WINDOW 0x8022
+#define GLX_PBUFFER 0x8023
+#define GLX_PBUFFER_HEIGHT 0x8040
+#define GLX_PBUFFER_WIDTH 0x8041
+typedef GLXFBConfig *( *PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef GLXFBConfig *( *PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef int ( *PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef GLXWindow ( *PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void ( *PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXPixmap ( *PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef void ( *PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef GLXPbuffer ( *PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef void ( *PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void ( *PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef GLXContext ( *PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef Bool ( *PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef int ( *PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void ( *PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+typedef void ( *PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLXFBConfig *glXGetFBConfigs (Display *dpy, int screen, int *nelements);
+GLXFBConfig *glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements);
+int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value);
+XVisualInfo *glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config);
+GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+void glXDestroyWindow (Display *dpy, GLXWindow win);
+GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap);
+GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list);
+void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf);
+void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+GLXDrawable glXGetCurrentReadDrawable (void);
+int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value);
+void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#endif
+#endif /* GLX_VERSION_1_3 */
+
+#ifndef GLX_VERSION_1_4
+#define GLX_VERSION_1_4 1
+typedef void ( *__GLXextFuncPtr)(void);
+#define GLX_SAMPLE_BUFFERS 100000
+#define GLX_SAMPLES 100001
+typedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
+#ifdef GLX_GLXEXT_PROTOTYPES
+__GLXextFuncPtr glXGetProcAddress (const GLubyte *procName);
+#endif
+#endif /* GLX_VERSION_1_4 */
+
+#ifndef GLX_ARB_context_flush_control
+#define GLX_ARB_context_flush_control 1
+#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097
+#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0
+#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098
+#endif /* GLX_ARB_context_flush_control */
+
+#ifndef GLX_ARB_create_context
+#define GLX_ARB_create_context 1
+#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define GLX_CONTEXT_FLAGS_ARB 0x2094
+typedef GLXContext ( *PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#endif
+#endif /* GLX_ARB_create_context */
+
+#ifndef GLX_ARB_create_context_no_error
+#define GLX_ARB_create_context_no_error 1
+#define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3
+#endif /* GLX_ARB_create_context_no_error */
+
+#ifndef GLX_ARB_create_context_profile
+#define GLX_ARB_create_context_profile 1
+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
+#endif /* GLX_ARB_create_context_profile */
+
+#ifndef GLX_ARB_create_context_robustness
+#define GLX_ARB_create_context_robustness 1
+#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261
+#endif /* GLX_ARB_create_context_robustness */
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_ARB_fbconfig_float 1
+#define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9
+#define GLX_RGBA_FLOAT_BIT_ARB 0x00000004
+#endif /* GLX_ARB_fbconfig_float */
+
+#ifndef GLX_ARB_framebuffer_sRGB
+#define GLX_ARB_framebuffer_sRGB 1
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2
+#endif /* GLX_ARB_framebuffer_sRGB */
+
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+typedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
+#ifdef GLX_GLXEXT_PROTOTYPES
+__GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName);
+#endif
+#endif /* GLX_ARB_get_proc_address */
+
+#ifndef GLX_ARB_multisample
+#define GLX_ARB_multisample 1
+#define GLX_SAMPLE_BUFFERS_ARB 100000
+#define GLX_SAMPLES_ARB 100001
+#endif /* GLX_ARB_multisample */
+
+#ifndef GLX_ARB_robustness_application_isolation
+#define GLX_ARB_robustness_application_isolation 1
+#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008
+#endif /* GLX_ARB_robustness_application_isolation */
+
+#ifndef GLX_ARB_robustness_share_group_isolation
+#define GLX_ARB_robustness_share_group_isolation 1
+#endif /* GLX_ARB_robustness_share_group_isolation */
+
+#ifndef GLX_ARB_vertex_buffer_object
+#define GLX_ARB_vertex_buffer_object 1
+#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095
+#endif /* GLX_ARB_vertex_buffer_object */
+
+#ifndef GLX_3DFX_multisample
+#define GLX_3DFX_multisample 1
+#define GLX_SAMPLE_BUFFERS_3DFX 0x8050
+#define GLX_SAMPLES_3DFX 0x8051
+#endif /* GLX_3DFX_multisample */
+
+#ifndef GLX_AMD_gpu_association
+#define GLX_AMD_gpu_association 1
+#define GLX_GPU_VENDOR_AMD 0x1F00
+#define GLX_GPU_RENDERER_STRING_AMD 0x1F01
+#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define GLX_GPU_RAM_AMD 0x21A3
+#define GLX_GPU_CLOCK_AMD 0x21A4
+#define GLX_GPU_NUM_PIPES_AMD 0x21A5
+#define GLX_GPU_NUM_SIMD_AMD 0x21A6
+#define GLX_GPU_NUM_RB_AMD 0x21A7
+#define GLX_GPU_NUM_SPI_AMD 0x21A8
+typedef unsigned int ( *PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int *ids);
+typedef int ( *PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void *data);
+typedef unsigned int ( *PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx);
+typedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list);
+typedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int *attribList);
+typedef Bool ( *PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx);
+typedef Bool ( *PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx);
+typedef GLXContext ( *PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef void ( *PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef GLX_GLXEXT_PROTOTYPES
+unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int *ids);
+int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void *data);
+unsigned int glXGetContextGPUIDAMD (GLXContext ctx);
+GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list);
+GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int *attribList);
+Bool glXDeleteAssociatedContextAMD (GLXContext ctx);
+Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx);
+GLXContext glXGetCurrentAssociatedContextAMD (void);
+void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* GLX_AMD_gpu_association */
+
+#ifndef GLX_EXT_buffer_age
+#define GLX_EXT_buffer_age 1
+#define GLX_BACK_BUFFER_AGE_EXT 0x20F4
+#endif /* GLX_EXT_buffer_age */
+
+#ifndef GLX_EXT_context_priority
+#define GLX_EXT_context_priority 1
+#define GLX_CONTEXT_PRIORITY_LEVEL_EXT 0x3100
+#define GLX_CONTEXT_PRIORITY_HIGH_EXT 0x3101
+#define GLX_CONTEXT_PRIORITY_MEDIUM_EXT 0x3102
+#define GLX_CONTEXT_PRIORITY_LOW_EXT 0x3103
+#endif /* GLX_EXT_context_priority */
+
+#ifndef GLX_EXT_create_context_es2_profile
+#define GLX_EXT_create_context_es2_profile 1
+#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+#endif /* GLX_EXT_create_context_es2_profile */
+
+#ifndef GLX_EXT_create_context_es_profile
+#define GLX_EXT_create_context_es_profile 1
+#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004
+#endif /* GLX_EXT_create_context_es_profile */
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_EXT_fbconfig_packed_float 1
+#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1
+#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008
+#endif /* GLX_EXT_fbconfig_packed_float */
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_EXT_framebuffer_sRGB 1
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2
+#endif /* GLX_EXT_framebuffer_sRGB */
+
+#ifndef GLX_EXT_get_drawable_type
+#define GLX_EXT_get_drawable_type 1
+#endif /* GLX_EXT_get_drawable_type */
+
+#ifndef GLX_EXT_import_context
+#define GLX_EXT_import_context 1
+#define GLX_SHARE_CONTEXT_EXT 0x800A
+#define GLX_VISUAL_ID_EXT 0x800B
+#define GLX_SCREEN_EXT 0x800C
+typedef Display *( *PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
+typedef int ( *PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
+typedef GLXContextID ( *PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
+typedef GLXContext ( *PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
+typedef void ( *PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Display *glXGetCurrentDisplayEXT (void);
+int glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value);
+GLXContextID glXGetContextIDEXT (const GLXContext context);
+GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID);
+void glXFreeContextEXT (Display *dpy, GLXContext context);
+#endif
+#endif /* GLX_EXT_import_context */
+
+#ifndef GLX_EXT_libglvnd
+#define GLX_EXT_libglvnd 1
+#define GLX_VENDOR_NAMES_EXT 0x20F6
+#endif /* GLX_EXT_libglvnd */
+
+#ifndef GLX_EXT_no_config_context
+#define GLX_EXT_no_config_context 1
+#endif /* GLX_EXT_no_config_context */
+
+#ifndef GLX_EXT_stereo_tree
+#define GLX_EXT_stereo_tree 1
+typedef struct {
+ int type;
+ unsigned long serial;
+ Bool send_event;
+ Display *display;
+ int extension;
+ int evtype;
+ GLXDrawable window;
+ Bool stereo_tree;
+} GLXStereoNotifyEventEXT;
+#define GLX_STEREO_TREE_EXT 0x20F5
+#define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001
+#define GLX_STEREO_NOTIFY_EXT 0x00000000
+#endif /* GLX_EXT_stereo_tree */
+
+#ifndef GLX_EXT_swap_control
+#define GLX_EXT_swap_control 1
+#define GLX_SWAP_INTERVAL_EXT 0x20F1
+#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2
+typedef void ( *PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval);
+#endif
+#endif /* GLX_EXT_swap_control */
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_EXT_swap_control_tear 1
+#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3
+#endif /* GLX_EXT_swap_control_tear */
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_EXT_texture_from_pixmap 1
+#define GLX_TEXTURE_1D_BIT_EXT 0x00000001
+#define GLX_TEXTURE_2D_BIT_EXT 0x00000002
+#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004
+#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0
+#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1
+#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2
+#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3
+#define GLX_Y_INVERTED_EXT 0x20D4
+#define GLX_TEXTURE_FORMAT_EXT 0x20D5
+#define GLX_TEXTURE_TARGET_EXT 0x20D6
+#define GLX_MIPMAP_TEXTURE_EXT 0x20D7
+#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8
+#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9
+#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA
+#define GLX_TEXTURE_1D_EXT 0x20DB
+#define GLX_TEXTURE_2D_EXT 0x20DC
+#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD
+#define GLX_FRONT_LEFT_EXT 0x20DE
+#define GLX_FRONT_RIGHT_EXT 0x20DF
+#define GLX_BACK_LEFT_EXT 0x20E0
+#define GLX_BACK_RIGHT_EXT 0x20E1
+#define GLX_FRONT_EXT 0x20DE
+#define GLX_BACK_EXT 0x20E0
+#define GLX_AUX0_EXT 0x20E2
+#define GLX_AUX1_EXT 0x20E3
+#define GLX_AUX2_EXT 0x20E4
+#define GLX_AUX3_EXT 0x20E5
+#define GLX_AUX4_EXT 0x20E6
+#define GLX_AUX5_EXT 0x20E7
+#define GLX_AUX6_EXT 0x20E8
+#define GLX_AUX7_EXT 0x20E9
+#define GLX_AUX8_EXT 0x20EA
+#define GLX_AUX9_EXT 0x20EB
+typedef void ( *PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+typedef void ( *PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+void glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer);
+#endif
+#endif /* GLX_EXT_texture_from_pixmap */
+
+#ifndef GLX_EXT_visual_info
+#define GLX_EXT_visual_info 1
+#define GLX_X_VISUAL_TYPE_EXT 0x22
+#define GLX_TRANSPARENT_TYPE_EXT 0x23
+#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
+#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25
+#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
+#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
+#define GLX_NONE_EXT 0x8000
+#define GLX_TRUE_COLOR_EXT 0x8002
+#define GLX_DIRECT_COLOR_EXT 0x8003
+#define GLX_PSEUDO_COLOR_EXT 0x8004
+#define GLX_STATIC_COLOR_EXT 0x8005
+#define GLX_GRAY_SCALE_EXT 0x8006
+#define GLX_STATIC_GRAY_EXT 0x8007
+#define GLX_TRANSPARENT_RGB_EXT 0x8008
+#define GLX_TRANSPARENT_INDEX_EXT 0x8009
+#endif /* GLX_EXT_visual_info */
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_EXT_visual_rating 1
+#define GLX_VISUAL_CAVEAT_EXT 0x20
+#define GLX_SLOW_VISUAL_EXT 0x8001
+#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
+#endif /* GLX_EXT_visual_rating */
+
+#ifndef GLX_INTEL_swap_event
+#define GLX_INTEL_swap_event 1
+#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000
+#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180
+#define GLX_COPY_COMPLETE_INTEL 0x8181
+#define GLX_FLIP_COMPLETE_INTEL 0x8182
+#endif /* GLX_INTEL_swap_event */
+
+#ifndef GLX_MESA_agp_offset
+#define GLX_MESA_agp_offset 1
+typedef unsigned int ( *PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);
+#ifdef GLX_GLXEXT_PROTOTYPES
+unsigned int glXGetAGPOffsetMESA (const void *pointer);
+#endif
+#endif /* GLX_MESA_agp_offset */
+
+#ifndef GLX_MESA_copy_sub_buffer
+#define GLX_MESA_copy_sub_buffer 1
+typedef void ( *PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#endif
+#endif /* GLX_MESA_copy_sub_buffer */
+
+#ifndef GLX_MESA_pixmap_colormap
+#define GLX_MESA_pixmap_colormap 1
+typedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#endif
+#endif /* GLX_MESA_pixmap_colormap */
+
+#ifndef GLX_MESA_query_renderer
+#define GLX_MESA_query_renderer 1
+#define GLX_RENDERER_VENDOR_ID_MESA 0x8183
+#define GLX_RENDERER_DEVICE_ID_MESA 0x8184
+#define GLX_RENDERER_VERSION_MESA 0x8185
+#define GLX_RENDERER_ACCELERATED_MESA 0x8186
+#define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187
+#define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188
+#define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189
+#define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A
+#define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B
+#define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C
+#define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D
+typedef Bool ( *PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC) (int attribute, unsigned int *value);
+typedef const char *( *PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC) (int attribute);
+typedef Bool ( *PFNGLXQUERYRENDERERINTEGERMESAPROC) (Display *dpy, int screen, int renderer, int attribute, unsigned int *value);
+typedef const char *( *PFNGLXQUERYRENDERERSTRINGMESAPROC) (Display *dpy, int screen, int renderer, int attribute);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXQueryCurrentRendererIntegerMESA (int attribute, unsigned int *value);
+const char *glXQueryCurrentRendererStringMESA (int attribute);
+Bool glXQueryRendererIntegerMESA (Display *dpy, int screen, int renderer, int attribute, unsigned int *value);
+const char *glXQueryRendererStringMESA (Display *dpy, int screen, int renderer, int attribute);
+#endif
+#endif /* GLX_MESA_query_renderer */
+
+#ifndef GLX_MESA_release_buffers
+#define GLX_MESA_release_buffers 1
+typedef Bool ( *PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable);
+#endif
+#endif /* GLX_MESA_release_buffers */
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_MESA_set_3dfx_mode 1
+#define GLX_3DFX_WINDOW_MODE_MESA 0x1
+#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
+typedef GLboolean ( *PFNGLXSET3DFXMODEMESAPROC) (GLint mode);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLboolean glXSet3DfxModeMESA (GLint mode);
+#endif
+#endif /* GLX_MESA_set_3dfx_mode */
+
+#ifndef GLX_MESA_swap_control
+#define GLX_MESA_swap_control 1
+typedef int ( *PFNGLXGETSWAPINTERVALMESAPROC) (void);
+typedef int ( *PFNGLXSWAPINTERVALMESAPROC) (unsigned int interval);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXGetSwapIntervalMESA (void);
+int glXSwapIntervalMESA (unsigned int interval);
+#endif
+#endif /* GLX_MESA_swap_control */
+
+#ifndef GLX_NV_copy_buffer
+#define GLX_NV_copy_buffer 1
+typedef void ( *PFNGLXCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void ( *PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glXNamedCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+#endif
+#endif /* GLX_NV_copy_buffer */
+
+#ifndef GLX_NV_copy_image
+#define GLX_NV_copy_image 1
+typedef void ( *PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* GLX_NV_copy_image */
+
+#ifndef GLX_NV_delay_before_swap
+#define GLX_NV_delay_before_swap 1
+typedef Bool ( *PFNGLXDELAYBEFORESWAPNVPROC) (Display *dpy, GLXDrawable drawable, GLfloat seconds);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXDelayBeforeSwapNV (Display *dpy, GLXDrawable drawable, GLfloat seconds);
+#endif
+#endif /* GLX_NV_delay_before_swap */
+
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
+#define GLX_FLOAT_COMPONENTS_NV 0x20B0
+#endif /* GLX_NV_float_buffer */
+
+#ifndef GLX_NV_multigpu_context
+#define GLX_NV_multigpu_context 1
+#define GLX_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA
+#define GLX_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB
+#define GLX_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC
+#define GLX_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD
+#define GLX_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE
+#endif /* GLX_NV_multigpu_context */
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_NV_multisample_coverage 1
+#define GLX_COVERAGE_SAMPLES_NV 100001
+#define GLX_COLOR_SAMPLES_NV 0x20B3
+#endif /* GLX_NV_multisample_coverage */
+
+#ifndef GLX_NV_present_video
+#define GLX_NV_present_video 1
+#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0
+typedef unsigned int *( *PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+typedef int ( *PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+#ifdef GLX_GLXEXT_PROTOTYPES
+unsigned int *glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements);
+int glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+#endif
+#endif /* GLX_NV_present_video */
+
+#ifndef GLX_NV_robustness_video_memory_purge
+#define GLX_NV_robustness_video_memory_purge 1
+#define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7
+#endif /* GLX_NV_robustness_video_memory_purge */
+
+#ifndef GLX_NV_swap_group
+#define GLX_NV_swap_group 1
+typedef Bool ( *PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group);
+typedef Bool ( *PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier);
+typedef Bool ( *PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+typedef Bool ( *PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+typedef Bool ( *PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count);
+typedef Bool ( *PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group);
+Bool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier);
+Bool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+Bool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+Bool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count);
+Bool glXResetFrameCountNV (Display *dpy, int screen);
+#endif
+#endif /* GLX_NV_swap_group */
+
+#ifndef GLX_NV_video_capture
+#define GLX_NV_video_capture 1
+typedef XID GLXVideoCaptureDeviceNV;
+#define GLX_DEVICE_ID_NV 0x20CD
+#define GLX_UNIQUE_ID_NV 0x20CE
+#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+typedef int ( *PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+typedef GLXVideoCaptureDeviceNV *( *PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+typedef void ( *PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
+typedef int ( *PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+typedef void ( *PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+GLXVideoCaptureDeviceNV *glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements);
+void glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
+int glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+void glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
+#endif
+#endif /* GLX_NV_video_capture */
+
+#ifndef GLX_NV_video_out
+#define GLX_NV_video_out 1
+typedef unsigned int GLXVideoDeviceNV;
+#define GLX_VIDEO_OUT_COLOR_NV 0x20C3
+#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4
+#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5
+#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define GLX_VIDEO_OUT_FRAME_NV 0x20C8
+#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9
+#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA
+#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB
+#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC
+typedef int ( *PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+typedef int ( *PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
+typedef int ( *PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+typedef int ( *PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef int ( *PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+typedef int ( *PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+int glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
+int glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+int glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf);
+int glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+int glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+#endif /* GLX_NV_video_out */
+
+#ifndef GLX_OML_swap_method
+#define GLX_OML_swap_method 1
+#define GLX_SWAP_METHOD_OML 0x8060
+#define GLX_SWAP_EXCHANGE_OML 0x8061
+#define GLX_SWAP_COPY_OML 0x8062
+#define GLX_SWAP_UNDEFINED_OML 0x8063
+#endif /* GLX_OML_swap_method */
+
+#ifndef GLX_OML_sync_control
+#define GLX_OML_sync_control 1
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GLX_OML_sync_control extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+/* Fallback if nothing above works */
+#include <inttypes.h>
+#endif
+#endif
+typedef Bool ( *PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( *PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+typedef int64_t ( *PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+typedef Bool ( *PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( *PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+Bool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+int64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+Bool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+Bool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#endif
+#endif /* GLX_OML_sync_control */
+
+#ifndef GLX_SGIS_blended_overlay
+#define GLX_SGIS_blended_overlay 1
+#define GLX_BLENDED_RGBA_SGIS 0x8025
+#endif /* GLX_SGIS_blended_overlay */
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SGIS_multisample 1
+#define GLX_SAMPLE_BUFFERS_SGIS 100000
+#define GLX_SAMPLES_SGIS 100001
+#endif /* GLX_SGIS_multisample */
+
+#ifndef GLX_SGIS_shared_multisample
+#define GLX_SGIS_shared_multisample 1
+#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
+#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
+#endif /* GLX_SGIS_shared_multisample */
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_SGIX_dmbuffer 1
+typedef XID GLXPbufferSGIX;
+#ifdef _DM_BUFFER_H_
+#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024
+typedef Bool ( *PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#endif
+#endif /* _DM_BUFFER_H_ */
+#endif /* GLX_SGIX_dmbuffer */
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_SGIX_fbconfig 1
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+#define GLX_WINDOW_BIT_SGIX 0x00000001
+#define GLX_PIXMAP_BIT_SGIX 0x00000002
+#define GLX_RGBA_BIT_SGIX 0x00000001
+#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
+#define GLX_DRAWABLE_TYPE_SGIX 0x8010
+#define GLX_RENDER_TYPE_SGIX 0x8011
+#define GLX_X_RENDERABLE_SGIX 0x8012
+#define GLX_FBCONFIG_ID_SGIX 0x8013
+#define GLX_RGBA_TYPE_SGIX 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015
+typedef int ( *PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX *( *PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
+typedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+typedef GLXContext ( *PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+typedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
+typedef GLXFBConfigSGIX ( *PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+GLXFBConfigSGIX *glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements);
+GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+GLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+XVisualInfo *glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config);
+GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis);
+#endif
+#endif /* GLX_SGIX_fbconfig */
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_SGIX_hyperpipe 1
+typedef struct {
+ char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */
+ int networkId;
+} GLXHyperpipeNetworkSGIX;
+typedef struct {
+ char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */
+ int channel;
+ unsigned int participationType;
+ int timeSlice;
+} GLXHyperpipeConfigSGIX;
+typedef struct {
+ char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */
+ int srcXOrigin, srcYOrigin, srcWidth, srcHeight;
+ int destXOrigin, destYOrigin, destWidth, destHeight;
+} GLXPipeRect;
+typedef struct {
+ char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */
+ int XOrigin, YOrigin, maxHeight, maxWidth;
+} GLXPipeRectLimits;
+#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
+#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91
+#define GLX_BAD_HYPERPIPE_SGIX 92
+#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001
+#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002
+#define GLX_PIPE_RECT_SGIX 0x00000001
+#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
+#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003
+#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004
+#define GLX_HYPERPIPE_ID_SGIX 0x8030
+typedef GLXHyperpipeNetworkSGIX *( *PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
+typedef int ( *PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+typedef GLXHyperpipeConfigSGIX *( *PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
+typedef int ( *PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
+typedef int ( *PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
+typedef int ( *PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+typedef int ( *PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+typedef int ( *PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLXHyperpipeNetworkSGIX *glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes);
+int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+GLXHyperpipeConfigSGIX *glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes);
+int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId);
+int glXBindHyperpipeSGIX (Display *dpy, int hpId);
+int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#endif
+#endif /* GLX_SGIX_hyperpipe */
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_SGIX_pbuffer 1
+#define GLX_PBUFFER_BIT_SGIX 0x00000004
+#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
+#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
+#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
+#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040
+#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080
+#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100
+#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016
+#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017
+#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018
+#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019
+#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
+#define GLX_PRESERVED_CONTENTS_SGIX 0x801B
+#define GLX_LARGEST_PBUFFER_SGIX 0x801C
+#define GLX_WIDTH_SGIX 0x801D
+#define GLX_HEIGHT_SGIX 0x801E
+#define GLX_EVENT_MASK_SGIX 0x801F
+#define GLX_DAMAGED_SGIX 0x8020
+#define GLX_SAVED_SGIX 0x8021
+#define GLX_WINDOW_SGIX 0x8022
+#define GLX_PBUFFER_SGIX 0x8023
+typedef GLXPbufferSGIX ( *PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+typedef void ( *PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
+typedef void ( *PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+typedef void ( *PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
+typedef void ( *PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+void glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf);
+void glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+void glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask);
+void glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#endif
+#endif /* GLX_SGIX_pbuffer */
+
+#ifndef GLX_SGIX_swap_barrier
+#define GLX_SGIX_swap_barrier 1
+typedef void ( *PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
+typedef Bool ( *PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier);
+Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max);
+#endif
+#endif /* GLX_SGIX_swap_barrier */
+
+#ifndef GLX_SGIX_swap_group
+#define GLX_SGIX_swap_group 1
+typedef void ( *PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#endif
+#endif /* GLX_SGIX_swap_group */
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SGIX_video_resize 1
+#define GLX_SYNC_FRAME_SGIX 0x00000000
+#define GLX_SYNC_SWAP_SGIX 0x00000001
+typedef int ( *PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
+typedef int ( *PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
+typedef int ( *PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+typedef int ( *PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+typedef int ( *PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window);
+int glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h);
+int glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+int glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+int glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype);
+#endif
+#endif /* GLX_SGIX_video_resize */
+
+#ifndef GLX_SGIX_video_source
+#define GLX_SGIX_video_source 1
+typedef XID GLXVideoSourceSGIX;
+#ifdef _VL_H
+typedef GLXVideoSourceSGIX ( *PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+typedef void ( *PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#ifdef GLX_GLXEXT_PROTOTYPES
+GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+void glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#endif
+#endif /* _VL_H */
+#endif /* GLX_SGIX_video_source */
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_SGIX_visual_select_group 1
+#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028
+#endif /* GLX_SGIX_visual_select_group */
+
+#ifndef GLX_SGI_cushion
+#define GLX_SGI_cushion 1
+typedef void ( *PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
+#ifdef GLX_GLXEXT_PROTOTYPES
+void glXCushionSGI (Display *dpy, Window window, float cushion);
+#endif
+#endif /* GLX_SGI_cushion */
+
+#ifndef GLX_SGI_make_current_read
+#define GLX_SGI_make_current_read 1
+typedef Bool ( *PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Bool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+GLXDrawable glXGetCurrentReadDrawableSGI (void);
+#endif
+#endif /* GLX_SGI_make_current_read */
+
+#ifndef GLX_SGI_swap_control
+#define GLX_SGI_swap_control 1
+typedef int ( *PFNGLXSWAPINTERVALSGIPROC) (int interval);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXSwapIntervalSGI (int interval);
+#endif
+#endif /* GLX_SGI_swap_control */
+
+#ifndef GLX_SGI_video_sync
+#define GLX_SGI_video_sync 1
+typedef int ( *PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
+typedef int ( *PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
+#ifdef GLX_GLXEXT_PROTOTYPES
+int glXGetVideoSyncSGI (unsigned int *count);
+int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count);
+#endif
+#endif /* GLX_SGI_video_sync */
+
+#ifndef GLX_SUN_get_transparent_index
+#define GLX_SUN_get_transparent_index 1
+typedef Status ( *PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex);
+#ifdef GLX_GLXEXT_PROTOTYPES
+Status glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex);
+#endif
+#endif /* GLX_SUN_get_transparent_index */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__glx_glxext_h_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/khrplatform.h b/src/VBox/Devices/Graphics/vmsvga_glext/khrplatform.h
new file mode 100644
index 00000000..65878d8c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/khrplatform.h
@@ -0,0 +1,314 @@
+#ifndef __khrplatform_h_
+#define __khrplatform_h_
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/*
+** Copyright (c) 2008-2018 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Khronos platform-specific types and definitions.
+ *
+ * The master copy of khrplatform.h is maintained in the Khronos EGL
+ * Registry repository at https://github.com/KhronosGroup/EGL-Registry
+ * The last semantic modification to khrplatform.h was at commit ID:
+ * 67a3e0864c2d75ea5287b9f3d2eb74a745936692
+ *
+ * Adopters may modify this file to suit their platform. Adopters are
+ * encouraged to submit platform specific modifications to the Khronos
+ * group so that they can be included in future versions of this file.
+ * Please submit changes by filing pull requests or issues on
+ * the EGL Registry repository linked above.
+ *
+ *
+ * See the Implementer's Guidelines for information about where this file
+ * should be located on your system and for more details of its use:
+ * http://www.khronos.org/registry/implementers_guide.pdf
+ *
+ * This file should be included as
+ * #include <KHR/khrplatform.h>
+ * by Khronos client API header files that use its types and defines.
+ *
+ * The types in khrplatform.h should only be used to define API-specific types.
+ *
+ * Types defined in khrplatform.h:
+ * khronos_int8_t signed 8 bit
+ * khronos_uint8_t unsigned 8 bit
+ * khronos_int16_t signed 16 bit
+ * khronos_uint16_t unsigned 16 bit
+ * khronos_int32_t signed 32 bit
+ * khronos_uint32_t unsigned 32 bit
+ * khronos_int64_t signed 64 bit
+ * khronos_uint64_t unsigned 64 bit
+ * khronos_intptr_t signed same number of bits as a pointer
+ * khronos_uintptr_t unsigned same number of bits as a pointer
+ * khronos_ssize_t signed size
+ * khronos_usize_t unsigned size
+ * khronos_float_t signed 32 bit floating point
+ * khronos_time_ns_t unsigned 64 bit time in nanoseconds
+ * khronos_utime_nanoseconds_t unsigned time interval or absolute time in
+ * nanoseconds
+ * khronos_stime_nanoseconds_t signed time interval in nanoseconds
+ * khronos_boolean_enum_t enumerated boolean type. This should
+ * only be used as a base type when a client API's boolean type is
+ * an enum. Client APIs which use an integer or other type for
+ * booleans cannot use this as the base type for their boolean.
+ *
+ * Tokens defined in khrplatform.h:
+ *
+ * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
+ *
+ * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
+ * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
+ *
+ * Calling convention macros defined in this file:
+ * KHRONOS_APICALL
+ * KHRONOS_APIENTRY
+ * KHRONOS_APIATTRIBUTES
+ *
+ * These may be used in function prototypes as:
+ *
+ * KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
+ * int arg1,
+ * int arg2) KHRONOS_APIATTRIBUTES;
+ */
+
+#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC)
+# define KHRONOS_STATIC 1
+#endif
+
+/*-------------------------------------------------------------------------
+ * Definition of KHRONOS_APICALL
+ *-------------------------------------------------------------------------
+ * This precedes the return type of the function in the function prototype.
+ */
+#if defined(KHRONOS_STATIC)
+ /* If the preprocessor constant KHRONOS_STATIC is defined, make the
+ * header compatible with static linking. */
+# define KHRONOS_APICALL
+#elif defined(_WIN32)
+# define KHRONOS_APICALL __declspec(dllimport)
+#elif defined (__SYMBIAN32__)
+# define KHRONOS_APICALL IMPORT_C
+#elif defined(__ANDROID__)
+# define KHRONOS_APICALL __attribute__((visibility("default")))
+#else
+# define KHRONOS_APICALL
+#endif
+
+/*-------------------------------------------------------------------------
+ * Definition of KHRONOS_APIENTRY
+ *-------------------------------------------------------------------------
+ * This follows the return type of the function and precedes the function
+ * name in the function prototype.
+ */
+#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
+ /* Win32 but not WinCE */
+# define KHRONOS_APIENTRY __stdcall
+#else
+# define KHRONOS_APIENTRY
+#endif
+
+/*-------------------------------------------------------------------------
+ * Definition of KHRONOS_APIATTRIBUTES
+ *-------------------------------------------------------------------------
+ * This follows the closing parenthesis of the function prototype arguments.
+ */
+#if defined (__ARMCC_2__)
+#define KHRONOS_APIATTRIBUTES __softfp
+#else
+#define KHRONOS_APIATTRIBUTES
+#endif
+
+/*-------------------------------------------------------------------------
+ * basic type definitions
+ *-----------------------------------------------------------------------*/
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
+
+
+/*
+ * Using <stdint.h>
+ */
+#include <stdint.h>
+typedef int32_t khronos_int32_t;
+typedef uint32_t khronos_uint32_t;
+typedef int64_t khronos_int64_t;
+typedef uint64_t khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+/*
+ * To support platform where unsigned long cannot be used interchangeably with
+ * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t.
+ * Ideally, we could just use (u)intptr_t everywhere, but this could result in
+ * ABI breakage if khronos_uintptr_t is changed from unsigned long to
+ * unsigned long long or similar (this results in different C++ name mangling).
+ * To avoid changes for existing platforms, we restrict usage of intptr_t to
+ * platforms where the size of a pointer is larger than the size of long.
+ */
+#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__)
+#if __SIZEOF_POINTER__ > __SIZEOF_LONG__
+#define KHRONOS_USE_INTPTR_T
+#endif
+#endif
+
+#elif defined(__VMS ) || defined(__sgi)
+
+/*
+ * Using <inttypes.h>
+ */
+#include <inttypes.h>
+typedef int32_t khronos_int32_t;
+typedef uint32_t khronos_uint32_t;
+typedef int64_t khronos_int64_t;
+typedef uint64_t khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
+
+/*
+ * Win32
+ */
+typedef __int32 khronos_int32_t;
+typedef unsigned __int32 khronos_uint32_t;
+typedef __int64 khronos_int64_t;
+typedef unsigned __int64 khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#elif defined(__sun__) || defined(__digital__)
+
+/*
+ * Sun or Digital
+ */
+typedef int khronos_int32_t;
+typedef unsigned int khronos_uint32_t;
+#if defined(__arch64__) || defined(_LP64)
+typedef long int khronos_int64_t;
+typedef unsigned long int khronos_uint64_t;
+#else
+typedef long long int khronos_int64_t;
+typedef unsigned long long int khronos_uint64_t;
+#endif /* __arch64__ */
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#elif 0
+
+/*
+ * Hypothetical platform with no float or int64 support
+ */
+typedef int khronos_int32_t;
+typedef unsigned int khronos_uint32_t;
+#define KHRONOS_SUPPORT_INT64 0
+#define KHRONOS_SUPPORT_FLOAT 0
+
+#else
+
+/*
+ * Generic fallback
+ */
+#include <stdint.h>
+typedef int32_t khronos_int32_t;
+typedef uint32_t khronos_uint32_t;
+typedef int64_t khronos_int64_t;
+typedef uint64_t khronos_uint64_t;
+#define KHRONOS_SUPPORT_INT64 1
+#define KHRONOS_SUPPORT_FLOAT 1
+
+#endif
+
+
+/*
+ * Types that are (so far) the same on all platforms
+ */
+typedef signed char khronos_int8_t;
+typedef unsigned char khronos_uint8_t;
+typedef signed short int khronos_int16_t;
+typedef unsigned short int khronos_uint16_t;
+
+/*
+ * Types that differ between LLP64 and LP64 architectures - in LLP64,
+ * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
+ * to be the only LLP64 architecture in current use.
+ */
+#ifdef KHRONOS_USE_INTPTR_T
+typedef intptr_t khronos_intptr_t;
+typedef uintptr_t khronos_uintptr_t;
+#elif defined(_WIN64)
+typedef signed long long int khronos_intptr_t;
+typedef unsigned long long int khronos_uintptr_t;
+#else
+typedef signed long int khronos_intptr_t;
+typedef unsigned long int khronos_uintptr_t;
+#endif
+
+#if defined(_WIN64)
+typedef signed long long int khronos_ssize_t;
+typedef unsigned long long int khronos_usize_t;
+#else
+typedef signed long int khronos_ssize_t;
+typedef unsigned long int khronos_usize_t;
+#endif
+
+#if KHRONOS_SUPPORT_FLOAT
+/*
+ * Float type
+ */
+typedef float khronos_float_t;
+#endif
+
+#if KHRONOS_SUPPORT_INT64
+/* Time types
+ *
+ * These types can be used to represent a time interval in nanoseconds or
+ * an absolute Unadjusted System Time. Unadjusted System Time is the number
+ * of nanoseconds since some arbitrary system event (e.g. since the last
+ * time the system booted). The Unadjusted System Time is an unsigned
+ * 64 bit value that wraps back to 0 every 584 years. Time intervals
+ * may be either signed or unsigned.
+ */
+typedef khronos_uint64_t khronos_utime_nanoseconds_t;
+typedef khronos_int64_t khronos_stime_nanoseconds_t;
+#endif
+
+/*
+ * Dummy value used to pad enum types to 32 bits.
+ */
+#ifndef KHRONOS_MAX_ENUM
+#define KHRONOS_MAX_ENUM 0x7FFFFFFF
+#endif
+
+/*
+ * Enumerated boolean type
+ *
+ * Values other than zero should be considered to be true. Therefore
+ * comparisons should not be made against KHRONOS_TRUE.
+ */
+typedef enum {
+ KHRONOS_FALSE = 0,
+ KHRONOS_TRUE = 1,
+ KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
+} khronos_boolean_enum_t;
+
+#endif /* !__khrplatform_h_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_glext/wglext.h b/src/VBox/Devices/Graphics/vmsvga_glext/wglext.h
new file mode 100644
index 00000000..d4c2de86
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_glext/wglext.h
@@ -0,0 +1,848 @@
+#ifndef __wgl_wglext_h_
+#define __wgl_wglext_h_
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright 2013-2020 The Khronos Group Inc.
+** SPDX-License-Identifier: MIT
+**
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+** https://github.com/KhronosGroup/OpenGL-Registry
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#define WGL_WGLEXT_VERSION 20220530
+
+/* Generated C header for:
+ * API: wgl
+ * Versions considered: .*
+ * Versions emitted: _nomatch_^
+ * Default extensions included: wgl
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);
+VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);
+BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);
+BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif
+#endif /* WGL_ARB_buffer_region */
+
+#ifndef WGL_ARB_context_flush_control
+#define WGL_ARB_context_flush_control 1
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098
+#endif /* WGL_ARB_context_flush_control */
+
+#ifndef WGL_ARB_create_context
+#define WGL_ARB_create_context 1
+#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093
+#define WGL_CONTEXT_FLAGS_ARB 0x2094
+#define ERROR_INVALID_VERSION_ARB 0x2095
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif
+#endif /* WGL_ARB_create_context */
+
+#ifndef WGL_ARB_create_context_no_error
+#define WGL_ARB_create_context_no_error 1
+#define WGL_CONTEXT_OPENGL_NO_ERROR_ARB 0x31B3
+#endif /* WGL_ARB_create_context_no_error */
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_ARB_create_context_profile 1
+#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define ERROR_INVALID_PROFILE_ARB 0x2096
+#endif /* WGL_ARB_create_context_profile */
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_ARB_create_context_robustness 1
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261
+#endif /* WGL_ARB_create_context_robustness */
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+const char *WINAPI wglGetExtensionsStringARB (HDC hdc);
+#endif
+#endif /* WGL_ARB_extensions_string */
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_ARB_framebuffer_sRGB 1
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9
+#endif /* WGL_ARB_framebuffer_sRGB */
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
+#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+HDC WINAPI wglGetCurrentReadDCARB (void);
+#endif
+#endif /* WGL_ARB_make_current_read */
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
+#endif /* WGL_ARB_multisample */
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+DECLARE_HANDLE(HPBUFFERARB);
+#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
+#define WGL_PBUFFER_LARGEST_ARB 0x2033
+#define WGL_PBUFFER_WIDTH_ARB 0x2034
+#define WGL_PBUFFER_HEIGHT_ARB 0x2035
+#define WGL_PBUFFER_LOST_ARB 0x2036
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);
+int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);
+BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);
+BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif
+#endif /* WGL_ARB_pbuffer */
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200A
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
+#define WGL_SHARE_DEPTH_ARB 0x200C
+#define WGL_SHARE_STENCIL_ARB 0x200D
+#define WGL_SHARE_ACCUM_ARB 0x200E
+#define WGL_SUPPORT_GDI_ARB 0x200F
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201A
+#define WGL_ALPHA_BITS_ARB 0x201B
+#define WGL_ALPHA_SHIFT_ARB 0x201C
+#define WGL_ACCUM_BITS_ARB 0x201D
+#define WGL_ACCUM_RED_BITS_ARB 0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202A
+#define WGL_TYPE_RGBA_ARB 0x202B
+#define WGL_TYPE_COLORINDEX_ARB 0x202C
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+#endif /* WGL_ARB_pixel_format */
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+#endif /* WGL_ARB_pixel_format_float */
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
+#define WGL_TEXTURE_FORMAT_ARB 0x2072
+#define WGL_TEXTURE_TARGET_ARB 0x2073
+#define WGL_MIPMAP_TEXTURE_ARB 0x2074
+#define WGL_TEXTURE_RGB_ARB 0x2075
+#define WGL_TEXTURE_RGBA_ARB 0x2076
+#define WGL_NO_TEXTURE_ARB 0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
+#define WGL_TEXTURE_1D_ARB 0x2079
+#define WGL_TEXTURE_2D_ARB 0x207A
+#define WGL_MIPMAP_LEVEL_ARB 0x207B
+#define WGL_CUBE_MAP_FACE_ARB 0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB 0x2083
+#define WGL_FRONT_RIGHT_ARB 0x2084
+#define WGL_BACK_LEFT_ARB 0x2085
+#define WGL_BACK_RIGHT_ARB 0x2086
+#define WGL_AUX0_ARB 0x2087
+#define WGL_AUX1_ARB 0x2088
+#define WGL_AUX2_ARB 0x2089
+#define WGL_AUX3_ARB 0x208A
+#define WGL_AUX4_ARB 0x208B
+#define WGL_AUX5_ARB 0x208C
+#define WGL_AUX6_ARB 0x208D
+#define WGL_AUX7_ARB 0x208E
+#define WGL_AUX8_ARB 0x208F
+#define WGL_AUX9_ARB 0x2090
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif
+#endif /* WGL_ARB_render_texture */
+
+#ifndef WGL_ARB_robustness_application_isolation
+#define WGL_ARB_robustness_application_isolation 1
+#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008
+#endif /* WGL_ARB_robustness_application_isolation */
+
+#ifndef WGL_ARB_robustness_share_group_isolation
+#define WGL_ARB_robustness_share_group_isolation 1
+#endif /* WGL_ARB_robustness_share_group_isolation */
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
+#define WGL_SAMPLES_3DFX 0x2061
+#endif /* WGL_3DFX_multisample */
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_3DL_stereo_control 1
+#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055
+#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
+#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
+#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
+typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);
+#endif
+#endif /* WGL_3DL_stereo_control */
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_AMD_gpu_association 1
+#define WGL_GPU_VENDOR_AMD 0x1F00
+#define WGL_GPU_RENDERER_STRING_AMD 0x1F01
+#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2
+#define WGL_GPU_RAM_AMD 0x21A3
+#define WGL_GPU_CLOCK_AMD 0x21A4
+#define WGL_GPU_NUM_PIPES_AMD 0x21A5
+#define WGL_GPU_NUM_SIMD_AMD 0x21A6
+#define WGL_GPU_NUM_RB_AMD 0x21A7
+#define WGL_GPU_NUM_SPI_AMD 0x21A8
+typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);
+typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, INT property, GLenum dataType, UINT size, void *data);
+typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);
+typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
+typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef WGL_WGLEXT_PROTOTYPES
+UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);
+INT WINAPI wglGetGPUInfoAMD (UINT id, INT property, GLenum dataType, UINT size, void *data);
+UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);
+HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);
+HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);
+BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);
+BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);
+HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);
+VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* WGL_AMD_gpu_association */
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
+#endif /* WGL_ATI_pixel_format_float */
+
+#ifndef WGL_ATI_render_texture_rectangle
+#define WGL_ATI_render_texture_rectangle 1
+#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5
+#endif /* WGL_ATI_render_texture_rectangle */
+
+#ifndef WGL_EXT_colorspace
+#define WGL_EXT_colorspace 1
+#define WGL_COLORSPACE_EXT 0x309D
+#define WGL_COLORSPACE_SRGB_EXT 0x3089
+#define WGL_COLORSPACE_LINEAR_EXT 0x308A
+#endif /* WGL_EXT_colorspace */
+
+#ifndef WGL_EXT_create_context_es2_profile
+#define WGL_EXT_create_context_es2_profile 1
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
+#endif /* WGL_EXT_create_context_es2_profile */
+
+#ifndef WGL_EXT_create_context_es_profile
+#define WGL_EXT_create_context_es_profile 1
+#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004
+#endif /* WGL_EXT_create_context_es_profile */
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+#define WGL_DEPTH_FLOAT_EXT 0x2040
+#endif /* WGL_EXT_depth_float */
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+#ifdef WGL_WGLEXT_PROTOTYPES
+GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);
+GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);
+GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);
+VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);
+#endif
+#endif /* WGL_EXT_display_color_table */
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+const char *WINAPI wglGetExtensionsStringEXT (void);
+#endif
+#endif /* WGL_EXT_extensions_string */
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_EXT_framebuffer_sRGB 1
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
+#endif /* WGL_EXT_framebuffer_sRGB */
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+HDC WINAPI wglGetCurrentReadDCEXT (void);
+#endif
+#endif /* WGL_EXT_make_current_read */
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+#define WGL_SAMPLE_BUFFERS_EXT 0x2041
+#define WGL_SAMPLES_EXT 0x2042
+#endif /* WGL_EXT_multisample */
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+DECLARE_HANDLE(HPBUFFEREXT);
+#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
+#define WGL_PBUFFER_LARGEST_EXT 0x2033
+#define WGL_PBUFFER_WIDTH_EXT 0x2034
+#define WGL_PBUFFER_HEIGHT_EXT 0x2035
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);
+int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);
+BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);
+BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif
+#endif /* WGL_EXT_pbuffer */
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
+#define WGL_DRAW_TO_WINDOW_EXT 0x2001
+#define WGL_DRAW_TO_BITMAP_EXT 0x2002
+#define WGL_ACCELERATION_EXT 0x2003
+#define WGL_NEED_PALETTE_EXT 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
+#define WGL_SWAP_METHOD_EXT 0x2007
+#define WGL_NUMBER_OVERLAYS_EXT 0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
+#define WGL_TRANSPARENT_EXT 0x200A
+#define WGL_TRANSPARENT_VALUE_EXT 0x200B
+#define WGL_SHARE_DEPTH_EXT 0x200C
+#define WGL_SHARE_STENCIL_EXT 0x200D
+#define WGL_SHARE_ACCUM_EXT 0x200E
+#define WGL_SUPPORT_GDI_EXT 0x200F
+#define WGL_SUPPORT_OPENGL_EXT 0x2010
+#define WGL_DOUBLE_BUFFER_EXT 0x2011
+#define WGL_STEREO_EXT 0x2012
+#define WGL_PIXEL_TYPE_EXT 0x2013
+#define WGL_COLOR_BITS_EXT 0x2014
+#define WGL_RED_BITS_EXT 0x2015
+#define WGL_RED_SHIFT_EXT 0x2016
+#define WGL_GREEN_BITS_EXT 0x2017
+#define WGL_GREEN_SHIFT_EXT 0x2018
+#define WGL_BLUE_BITS_EXT 0x2019
+#define WGL_BLUE_SHIFT_EXT 0x201A
+#define WGL_ALPHA_BITS_EXT 0x201B
+#define WGL_ALPHA_SHIFT_EXT 0x201C
+#define WGL_ACCUM_BITS_EXT 0x201D
+#define WGL_ACCUM_RED_BITS_EXT 0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
+#define WGL_DEPTH_BITS_EXT 0x2022
+#define WGL_STENCIL_BITS_EXT 0x2023
+#define WGL_AUX_BUFFERS_EXT 0x2024
+#define WGL_NO_ACCELERATION_EXT 0x2025
+#define WGL_GENERIC_ACCELERATION_EXT 0x2026
+#define WGL_FULL_ACCELERATION_EXT 0x2027
+#define WGL_SWAP_EXCHANGE_EXT 0x2028
+#define WGL_SWAP_COPY_EXT 0x2029
+#define WGL_SWAP_UNDEFINED_EXT 0x202A
+#define WGL_TYPE_RGBA_EXT 0x202B
+#define WGL_TYPE_COLORINDEX_EXT 0x202C
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+#endif /* WGL_EXT_pixel_format */
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_EXT_pixel_format_packed_float 1
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
+#endif /* WGL_EXT_pixel_format_packed_float */
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglSwapIntervalEXT (int interval);
+int WINAPI wglGetSwapIntervalEXT (void);
+#endif
+#endif /* WGL_EXT_swap_control */
+
+#ifndef WGL_EXT_swap_control_tear
+#define WGL_EXT_swap_control_tear 1
+#endif /* WGL_EXT_swap_control_tear */
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);
+BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+#endif
+#endif /* WGL_I3D_digital_video_control */
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);
+BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif
+#endif /* WGL_I3D_gamma */
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
+#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglEnableGenlockI3D (HDC hDC);
+BOOL WINAPI wglDisableGenlockI3D (HDC hDC);
+BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);
+BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);
+BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);
+BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);
+BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);
+BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);
+BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);
+BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);
+BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);
+BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif
+#endif /* WGL_I3D_genlock */
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
+#ifdef WGL_WGLEXT_PROTOTYPES
+LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);
+BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);
+BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif
+#endif /* WGL_I3D_image_buffer */
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglEnableFrameLockI3D (void);
+BOOL WINAPI wglDisableFrameLockI3D (void);
+BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);
+BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);
+#endif
+#endif /* WGL_I3D_swap_frame_lock */
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetFrameUsageI3D (float *pUsage);
+BOOL WINAPI wglBeginFrameTrackingI3D (void);
+BOOL WINAPI wglEndFrameTrackingI3D (void);
+BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif
+#endif /* WGL_I3D_swap_frame_usage */
+
+#ifndef WGL_NV_DX_interop
+#define WGL_NV_DX_interop 1
+#define WGL_ACCESS_READ_ONLY_NV 0x00000000
+#define WGL_ACCESS_READ_WRITE_NV 0x00000001
+#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002
+typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle);
+typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice);
+typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);
+typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);
+typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle);
+HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice);
+BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice);
+HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject);
+BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access);
+BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif
+#endif /* WGL_NV_DX_interop */
+
+#ifndef WGL_NV_DX_interop2
+#define WGL_NV_DX_interop2 1
+#endif /* WGL_NV_DX_interop2 */
+
+#ifndef WGL_NV_copy_image
+#define WGL_NV_copy_image 1
+typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* WGL_NV_copy_image */
+
+#ifndef WGL_NV_delay_before_swap
+#define WGL_NV_delay_before_swap 1
+typedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds);
+#endif
+#endif /* WGL_NV_delay_before_swap */
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+#define WGL_FLOAT_COMPONENTS_NV 0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
+#endif /* WGL_NV_float_buffer */
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_NV_gpu_affinity 1
+DECLARE_HANDLE(HGPUNV);
+struct _GPU_DEVICE {
+ DWORD cb;
+ CHAR DeviceName[32];
+ CHAR DeviceString[128];
+ DWORD Flags;
+ RECT rcVirtualScreen;
+};
+typedef struct _GPU_DEVICE *PGPU_DEVICE;
+#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1
+typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
+typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);
+BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);
+BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+BOOL WINAPI wglDeleteDCNV (HDC hdc);
+#endif
+#endif /* WGL_NV_gpu_affinity */
+
+#ifndef WGL_NV_multigpu_context
+#define WGL_NV_multigpu_context 1
+#define WGL_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA
+#define WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB
+#define WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC
+#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD
+#define WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE
+#endif /* WGL_NV_multigpu_context */
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_NV_multisample_coverage 1
+#define WGL_COVERAGE_SAMPLES_NV 0x2042
+#define WGL_COLOR_SAMPLES_NV 0x20B9
+#endif /* WGL_NV_multisample_coverage */
+
+#ifndef WGL_NV_present_video
+#define WGL_NV_present_video 1
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0
+typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDc, HVIDEOOUTPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+int WINAPI wglEnumerateVideoDevicesNV (HDC hDc, HVIDEOOUTPUTDEVICENV *phDeviceList);
+BOOL WINAPI wglBindVideoDeviceNV (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);
+#endif
+#endif /* WGL_NV_present_video */
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_NV_render_depth_texture 1
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
+#define WGL_DEPTH_COMPONENT_NV 0x20A7
+#endif /* WGL_NV_render_depth_texture */
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_NV_render_texture_rectangle 1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
+#endif /* WGL_NV_render_texture_rectangle */
+
+#ifndef WGL_NV_swap_group
+#define WGL_NV_swap_group 1
+typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);
+typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);
+BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);
+BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);
+BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);
+BOOL WINAPI wglResetFrameCountNV (HDC hDC);
+#endif
+#endif /* WGL_NV_swap_group */
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+#ifdef WGL_WGLEXT_PROTOTYPES
+void *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+void WINAPI wglFreeMemoryNV (void *pointer);
+#endif
+#endif /* WGL_NV_vertex_array_range */
+
+#ifndef WGL_NV_video_capture
+#define WGL_NV_video_capture 1
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+#define WGL_UNIQUE_ID_NV 0x20CE
+#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif
+#endif /* WGL_NV_video_capture */
+
+#ifndef WGL_NV_video_output
+#define WGL_NV_video_output 1
+DECLARE_HANDLE(HPVIDEODEV);
+#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV 0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7
+#define WGL_VIDEO_OUT_FRAME 0x20C8
+#define WGL_VIDEO_OUT_FIELD_1 0x20C9
+#define WGL_VIDEO_OUT_FIELD_2 0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC
+typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);
+BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);
+BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+#endif /* WGL_NV_video_output */
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);
+INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif
+#endif /* WGL_OML_sync_control */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !__wgl_wglext_h_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/VGPU10ShaderTokens.h b/src/VBox/Devices/Graphics/vmsvga_include/VGPU10ShaderTokens.h
new file mode 100644
index 00000000..e23ee53f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/VGPU10ShaderTokens.h
@@ -0,0 +1,819 @@
+/**********************************************************
+ * Copyright 2007-2015 VMware, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * VGPU10ShaderTokens.h --
+ *
+ * VGPU10 shader token definitions.
+ *
+ */
+
+#ifndef VGPU10SHADERTOKENS_H
+#define VGPU10SHADERTOKENS_H
+
+/* Shader limits */
+#define VGPU10_MAX_VS_INPUTS 16
+#define VGPU10_MAX_VS_OUTPUTS 16
+#define VGPU10_MAX_GS_INPUTS 16
+#define VGPU10_MAX_GS_OUTPUTS 32
+#define VGPU10_MAX_FS_INPUTS 32
+#define VGPU10_MAX_FS_OUTPUTS 8
+#define VGPU10_MAX_TEMPS 4096
+#define VGPU10_MAX_CONSTANT_BUFFERS (14 + 1)
+#define VGPU10_MAX_CONSTANT_BUFFER_ELEMENT_COUNT 4096
+#define VGPU10_MAX_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT 4096
+#define VGPU10_MAX_SAMPLERS 16
+#define VGPU10_MAX_RESOURCES 128
+#define VGPU10_MIN_TEXEL_FETCH_OFFSET -8
+#define VGPU10_MAX_TEXEL_FETCH_OFFSET 7
+
+/* Shader Model 4.1 limits */
+#define VGPU10_1_MAX_VS_INPUTS 32
+#define VGPU10_1_MAX_VS_OUTPUTS 32
+#define VGPU10_1_MAX_GS_INPUTS 32
+
+/* Shader Model 5.0 limits */
+#define VGPU11_MAX_HS_INPUTS 32
+#define VGPU11_MAX_HS_INPUT_CONTROL_POINTS 32
+#define VGPU11_MAX_HS_INPUT_PATCH_CONSTANTS 32
+#define VGPU11_MAX_HS_OUTPUTS 32
+#define VGPU11_MAX_DS_INPUT_CONTROL_POINTS 32
+#define VGPU11_MAX_DS_INPUT_PATCH_CONSTANTS 32
+#define VGPU11_MAX_DS_OUTPUTS 32
+#define VGPU11_MAX_GS_STREAMS 4
+
+/* Maximums of limits for all stages */
+#define VGPU10_MAX_INPUTS 32
+#define VGPU10_MAX_OUTPUTS 32
+#define VGPU10_MAX_INPUT_PATCH_CONSTANTS 32
+
+typedef enum {
+ VGPU10_PIXEL_SHADER = 0,
+ VGPU10_VERTEX_SHADER = 1,
+ VGPU10_GEOMETRY_SHADER = 2,
+
+ /* DX11 */
+ VGPU10_HULL_SHADER = 3,
+ VGPU10_DOMAIN_SHADER = 4,
+ VGPU10_COMPUTE_SHADER = 5
+} VGPU10_PROGRAM_TYPE;
+
+typedef union {
+ struct {
+ unsigned int minorVersion : 4;
+ unsigned int majorVersion : 4;
+ unsigned int : 8;
+ unsigned int programType : 16; /* VGPU10_PROGRAM_TYPE */
+ };
+ uint32 value;
+} VGPU10ProgramToken;
+
+
+typedef enum {
+ VGPU10_OPCODE_ADD = 0,
+ VGPU10_OPCODE_AND = 1,
+ VGPU10_OPCODE_BREAK = 2,
+ VGPU10_OPCODE_BREAKC = 3,
+ VGPU10_OPCODE_CALL = 4,
+ VGPU10_OPCODE_CALLC = 5,
+ VGPU10_OPCODE_CASE = 6,
+ VGPU10_OPCODE_CONTINUE = 7,
+ VGPU10_OPCODE_CONTINUEC = 8,
+ VGPU10_OPCODE_CUT = 9,
+ VGPU10_OPCODE_DEFAULT = 10,
+ VGPU10_OPCODE_DERIV_RTX = 11,
+ VGPU10_OPCODE_DERIV_RTY = 12,
+ VGPU10_OPCODE_DISCARD = 13,
+ VGPU10_OPCODE_DIV = 14,
+ VGPU10_OPCODE_DP2 = 15,
+ VGPU10_OPCODE_DP3 = 16,
+ VGPU10_OPCODE_DP4 = 17,
+ VGPU10_OPCODE_ELSE = 18,
+ VGPU10_OPCODE_EMIT = 19,
+ VGPU10_OPCODE_EMITTHENCUT = 20,
+ VGPU10_OPCODE_ENDIF = 21,
+ VGPU10_OPCODE_ENDLOOP = 22,
+ VGPU10_OPCODE_ENDSWITCH = 23,
+ VGPU10_OPCODE_EQ = 24,
+ VGPU10_OPCODE_EXP = 25,
+ VGPU10_OPCODE_FRC = 26,
+ VGPU10_OPCODE_FTOI = 27,
+ VGPU10_OPCODE_FTOU = 28,
+ VGPU10_OPCODE_GE = 29,
+ VGPU10_OPCODE_IADD = 30,
+ VGPU10_OPCODE_IF = 31,
+ VGPU10_OPCODE_IEQ = 32,
+ VGPU10_OPCODE_IGE = 33,
+ VGPU10_OPCODE_ILT = 34,
+ VGPU10_OPCODE_IMAD = 35,
+ VGPU10_OPCODE_IMAX = 36,
+ VGPU10_OPCODE_IMIN = 37,
+ VGPU10_OPCODE_IMUL = 38,
+ VGPU10_OPCODE_INE = 39,
+ VGPU10_OPCODE_INEG = 40,
+ VGPU10_OPCODE_ISHL = 41,
+ VGPU10_OPCODE_ISHR = 42,
+ VGPU10_OPCODE_ITOF = 43,
+ VGPU10_OPCODE_LABEL = 44,
+ VGPU10_OPCODE_LD = 45,
+ VGPU10_OPCODE_LD_MS = 46,
+ VGPU10_OPCODE_LOG = 47,
+ VGPU10_OPCODE_LOOP = 48,
+ VGPU10_OPCODE_LT = 49,
+ VGPU10_OPCODE_MAD = 50,
+ VGPU10_OPCODE_MIN = 51,
+ VGPU10_OPCODE_MAX = 52,
+ VGPU10_OPCODE_CUSTOMDATA = 53,
+ VGPU10_OPCODE_MOV = 54,
+ VGPU10_OPCODE_MOVC = 55,
+ VGPU10_OPCODE_MUL = 56,
+ VGPU10_OPCODE_NE = 57,
+ VGPU10_OPCODE_NOP = 58,
+ VGPU10_OPCODE_NOT = 59,
+ VGPU10_OPCODE_OR = 60,
+ VGPU10_OPCODE_RESINFO = 61,
+ VGPU10_OPCODE_RET = 62,
+ VGPU10_OPCODE_RETC = 63,
+ VGPU10_OPCODE_ROUND_NE = 64,
+ VGPU10_OPCODE_ROUND_NI = 65,
+ VGPU10_OPCODE_ROUND_PI = 66,
+ VGPU10_OPCODE_ROUND_Z = 67,
+ VGPU10_OPCODE_RSQ = 68,
+ VGPU10_OPCODE_SAMPLE = 69,
+ VGPU10_OPCODE_SAMPLE_C = 70,
+ VGPU10_OPCODE_SAMPLE_C_LZ = 71,
+ VGPU10_OPCODE_SAMPLE_L = 72,
+ VGPU10_OPCODE_SAMPLE_D = 73,
+ VGPU10_OPCODE_SAMPLE_B = 74,
+ VGPU10_OPCODE_SQRT = 75,
+ VGPU10_OPCODE_SWITCH = 76,
+ VGPU10_OPCODE_SINCOS = 77,
+ VGPU10_OPCODE_UDIV = 78,
+ VGPU10_OPCODE_ULT = 79,
+ VGPU10_OPCODE_UGE = 80,
+ VGPU10_OPCODE_UMUL = 81,
+ VGPU10_OPCODE_UMAD = 82,
+ VGPU10_OPCODE_UMAX = 83,
+ VGPU10_OPCODE_UMIN = 84,
+ VGPU10_OPCODE_USHR = 85,
+ VGPU10_OPCODE_UTOF = 86,
+ VGPU10_OPCODE_XOR = 87,
+ VGPU10_OPCODE_DCL_RESOURCE = 88,
+ VGPU10_OPCODE_DCL_CONSTANT_BUFFER = 89,
+ VGPU10_OPCODE_DCL_SAMPLER = 90,
+ VGPU10_OPCODE_DCL_INDEX_RANGE = 91,
+ VGPU10_OPCODE_DCL_GS_OUTPUT_PRIMITIVE_TOPOLOGY = 92,
+ VGPU10_OPCODE_DCL_GS_INPUT_PRIMITIVE = 93,
+ VGPU10_OPCODE_DCL_MAX_OUTPUT_VERTEX_COUNT = 94,
+ VGPU10_OPCODE_DCL_INPUT = 95,
+ VGPU10_OPCODE_DCL_INPUT_SGV = 96,
+ VGPU10_OPCODE_DCL_INPUT_SIV = 97,
+ VGPU10_OPCODE_DCL_INPUT_PS = 98,
+ VGPU10_OPCODE_DCL_INPUT_PS_SGV = 99,
+ VGPU10_OPCODE_DCL_INPUT_PS_SIV = 100,
+ VGPU10_OPCODE_DCL_OUTPUT = 101,
+ VGPU10_OPCODE_DCL_OUTPUT_SGV = 102,
+ VGPU10_OPCODE_DCL_OUTPUT_SIV = 103,
+ VGPU10_OPCODE_DCL_TEMPS = 104,
+ VGPU10_OPCODE_DCL_INDEXABLE_TEMP = 105,
+ VGPU10_OPCODE_DCL_GLOBAL_FLAGS = 106,
+
+ /* GL guest */
+ VGPU10_OPCODE_VMWARE = 107,
+
+ /* DX10.1 */
+ VGPU10_OPCODE_LOD = 108,
+ VGPU10_OPCODE_GATHER4 = 109,
+ VGPU10_OPCODE_SAMPLE_POS = 110,
+ VGPU10_OPCODE_SAMPLE_INFO = 111,
+
+ /* DX11 */
+ VGPU10_OPCODE_RESERVED1 = 112,
+ VGPU10_OPCODE_HS_DECLS = 113,
+ VGPU10_OPCODE_HS_CONTROL_POINT_PHASE = 114,
+ VGPU10_OPCODE_HS_FORK_PHASE = 115,
+ VGPU10_OPCODE_HS_JOIN_PHASE = 116,
+ VGPU10_OPCODE_EMIT_STREAM = 117,
+ VGPU10_OPCODE_CUT_STREAM = 118,
+ VGPU10_OPCODE_EMITTHENCUT_STREAM = 119,
+ VGPU10_OPCODE_INTERFACE_CALL = 120,
+ VGPU10_OPCODE_BUFINFO = 121,
+ VGPU10_OPCODE_DERIV_RTX_COARSE = 122,
+ VGPU10_OPCODE_DERIV_RTX_FINE = 123,
+ VGPU10_OPCODE_DERIV_RTY_COARSE = 124,
+ VGPU10_OPCODE_DERIV_RTY_FINE = 125,
+ VGPU10_OPCODE_GATHER4_C = 126,
+ VGPU10_OPCODE_GATHER4_PO = 127,
+ VGPU10_OPCODE_GATHER4_PO_C = 128,
+ VGPU10_OPCODE_RCP = 129,
+ VGPU10_OPCODE_F32TOF16 = 130,
+ VGPU10_OPCODE_F16TOF32 = 131,
+ VGPU10_OPCODE_UADDC = 132,
+ VGPU10_OPCODE_USUBB = 133,
+ VGPU10_OPCODE_COUNTBITS = 134,
+ VGPU10_OPCODE_FIRSTBIT_HI = 135,
+ VGPU10_OPCODE_FIRSTBIT_LO = 136,
+ VGPU10_OPCODE_FIRSTBIT_SHI = 137,
+ VGPU10_OPCODE_UBFE = 138,
+ VGPU10_OPCODE_IBFE = 139,
+ VGPU10_OPCODE_BFI = 140,
+ VGPU10_OPCODE_BFREV = 141,
+ VGPU10_OPCODE_SWAPC = 142,
+ VGPU10_OPCODE_DCL_STREAM = 143,
+ VGPU10_OPCODE_DCL_FUNCTION_BODY = 144,
+ VGPU10_OPCODE_DCL_FUNCTION_TABLE = 145,
+ VGPU10_OPCODE_DCL_INTERFACE = 146,
+ VGPU10_OPCODE_DCL_INPUT_CONTROL_POINT_COUNT = 147,
+ VGPU10_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT = 148,
+ VGPU10_OPCODE_DCL_TESS_DOMAIN = 149,
+ VGPU10_OPCODE_DCL_TESS_PARTITIONING = 150,
+ VGPU10_OPCODE_DCL_TESS_OUTPUT_PRIMITIVE = 151,
+ VGPU10_OPCODE_DCL_HS_MAX_TESSFACTOR = 152,
+ VGPU10_OPCODE_DCL_HS_FORK_PHASE_INSTANCE_COUNT = 153,
+ VGPU10_OPCODE_DCL_HS_JOIN_PHASE_INSTANCE_COUNT = 154,
+ VGPU10_OPCODE_DCL_THREAD_GROUP = 155,
+ VGPU10_OPCODE_DCL_UAV_TYPED = 156,
+ VGPU10_OPCODE_DCL_UAV_RAW = 157,
+ VGPU10_OPCODE_DCL_UAV_STRUCTURED = 158,
+ VGPU10_OPCODE_DCL_TGSM_RAW = 159,
+ VGPU10_OPCODE_DCL_TGSM_STRUCTURED = 160,
+ VGPU10_OPCODE_DCL_RESOURCE_RAW = 161,
+ VGPU10_OPCODE_DCL_RESOURCE_STRUCTURED = 162,
+ VGPU10_OPCODE_LD_UAV_TYPED = 163,
+ VGPU10_OPCODE_STORE_UAV_TYPED = 164,
+ VGPU10_OPCODE_LD_RAW = 165,
+ VGPU10_OPCODE_STORE_RAW = 166,
+ VGPU10_OPCODE_LD_STRUCTURED = 167,
+ VGPU10_OPCODE_STORE_STRUCTURED = 168,
+ VGPU10_OPCODE_ATOMIC_AND = 169,
+ VGPU10_OPCODE_ATOMIC_OR = 170,
+ VGPU10_OPCODE_ATOMIC_XOR = 171,
+ VGPU10_OPCODE_ATOMIC_CMP_STORE = 172,
+ VGPU10_OPCODE_ATOMIC_IADD = 173,
+ VGPU10_OPCODE_ATOMIC_IMAX = 174,
+ VGPU10_OPCODE_ATOMIC_IMIN = 175,
+ VGPU10_OPCODE_ATOMIC_UMAX = 176,
+ VGPU10_OPCODE_ATOMIC_UMIN = 177,
+ VGPU10_OPCODE_IMM_ATOMIC_ALLOC = 178,
+ VGPU10_OPCODE_IMM_ATOMIC_CONSUME = 179,
+ VGPU10_OPCODE_IMM_ATOMIC_IADD = 180,
+ VGPU10_OPCODE_IMM_ATOMIC_AND = 181,
+ VGPU10_OPCODE_IMM_ATOMIC_OR = 182,
+ VGPU10_OPCODE_IMM_ATOMIC_XOR = 183,
+ VGPU10_OPCODE_IMM_ATOMIC_EXCH = 184,
+ VGPU10_OPCODE_IMM_ATOMIC_CMP_EXCH = 185,
+ VGPU10_OPCODE_IMM_ATOMIC_IMAX = 186,
+ VGPU10_OPCODE_IMM_ATOMIC_IMIN = 187,
+ VGPU10_OPCODE_IMM_ATOMIC_UMAX = 188,
+ VGPU10_OPCODE_IMM_ATOMIC_UMIN = 189,
+ VGPU10_OPCODE_SYNC = 190,
+ VGPU10_OPCODE_DADD = 191,
+ VGPU10_OPCODE_DMAX = 192,
+ VGPU10_OPCODE_DMIN = 193,
+ VGPU10_OPCODE_DMUL = 194,
+ VGPU10_OPCODE_DEQ = 195,
+ VGPU10_OPCODE_DGE = 196,
+ VGPU10_OPCODE_DLT = 197,
+ VGPU10_OPCODE_DNE = 198,
+ VGPU10_OPCODE_DMOV = 199,
+ VGPU10_OPCODE_DMOVC = 200,
+ VGPU10_OPCODE_DTOF = 201,
+ VGPU10_OPCODE_FTOD = 202,
+ VGPU10_OPCODE_EVAL_SNAPPED = 203,
+ VGPU10_OPCODE_EVAL_SAMPLE_INDEX = 204,
+ VGPU10_OPCODE_EVAL_CENTROID = 205,
+ VGPU10_OPCODE_DCL_GS_INSTANCE_COUNT = 206,
+ VGPU10_OPCODE_ABORT = 207,
+ VGPU10_OPCODE_DEBUG_BREAK = 208,
+
+ /* DX11.1 */
+ VGPU10_OPCODE_RESERVED0 = 209,
+ VGPU10_OPCODE_DDIV = 210,
+ VGPU10_OPCODE_DFMA = 211,
+ VGPU10_OPCODE_DRCP = 212,
+ VGPU10_OPCODE_MSAD = 213,
+ VGPU10_OPCODE_DTOI = 214,
+ VGPU10_OPCODE_DTOU = 215,
+ VGPU10_OPCODE_ITOD = 216,
+ VGPU10_OPCODE_UTOD = 217,
+
+ VGPU10_NUM_OPCODES /* Should be the last entry. */
+} VGPU10_OPCODE_TYPE;
+
+/* Sub-opcode of VGPU10_OPCODE_VMWARE. */
+typedef enum {
+ VGPU10_VMWARE_OPCODE_IDIV = 0,
+ VGPU10_VMWARE_OPCODE_DFRC = 1,
+ VGPU10_VMWARE_OPCODE_DRSQ = 2,
+ VGPU10_VMWARE_NUM_OPCODES /* Should be the last entry. */
+} VGPU10_VMWARE_OPCODE_TYPE;
+
+typedef enum {
+ VGPU10_INTERPOLATION_UNDEFINED = 0,
+ VGPU10_INTERPOLATION_CONSTANT = 1,
+ VGPU10_INTERPOLATION_LINEAR = 2,
+ VGPU10_INTERPOLATION_LINEAR_CENTROID = 3,
+ VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE = 4,
+ VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID = 5,
+ VGPU10_INTERPOLATION_LINEAR_SAMPLE = 6, /* DX10.1 */
+ VGPU10_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE = 7 /* DX10.1 */
+} VGPU10_INTERPOLATION_MODE;
+
+typedef enum {
+ VGPU10_RESOURCE_DIMENSION_UNKNOWN = 0,
+ VGPU10_RESOURCE_DIMENSION_BUFFER = 1,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE1D = 2,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE2D = 3,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE2DMS = 4,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE3D = 5,
+ VGPU10_RESOURCE_DIMENSION_TEXTURECUBE = 6,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY = 7,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY = 8,
+ VGPU10_RESOURCE_DIMENSION_TEXTURE2DMSARRAY = 9,
+ VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY = 10
+} VGPU10_RESOURCE_DIMENSION;
+
+typedef enum {
+ VGPU10_SAMPLER_MODE_DEFAULT = 0,
+ VGPU10_SAMPLER_MODE_COMPARISON = 1,
+ VGPU10_SAMPLER_MODE_MONO = 2
+} VGPU10_SAMPLER_MODE;
+
+typedef enum {
+ VGPU10_INSTRUCTION_TEST_ZERO = 0,
+ VGPU10_INSTRUCTION_TEST_NONZERO = 1
+} VGPU10_INSTRUCTION_TEST_BOOLEAN;
+
+typedef enum {
+ VGPU10_CB_IMMEDIATE_INDEXED = 0,
+ VGPU10_CB_DYNAMIC_INDEXED = 1
+} VGPU10_CB_ACCESS_PATTERN;
+
+typedef enum {
+ VGPU10_PRIMITIVE_UNDEFINED = 0,
+ VGPU10_PRIMITIVE_POINT = 1,
+ VGPU10_PRIMITIVE_LINE = 2,
+ VGPU10_PRIMITIVE_TRIANGLE = 3,
+ VGPU10_PRIMITIVE_LINE_ADJ = 6,
+ VGPU10_PRIMITIVE_TRIANGLE_ADJ = 7,
+ VGPU10_PRIMITIVE_SM40_MAX = 7,
+
+ /* DX11 */
+ VGPU10_PRIMITIVE_1_CONTROL_POINT_PATCH = 8,
+ VGPU10_PRIMITIVE_2_CONTROL_POINT_PATCH = 9,
+ VGPU10_PRIMITIVE_3_CONTROL_POINT_PATCH = 10,
+ VGPU10_PRIMITIVE_4_CONTROL_POINT_PATCH = 11,
+ VGPU10_PRIMITIVE_5_CONTROL_POINT_PATCH = 12,
+ VGPU10_PRIMITIVE_6_CONTROL_POINT_PATCH = 13,
+ VGPU10_PRIMITIVE_7_CONTROL_POINT_PATCH = 14,
+ VGPU10_PRIMITIVE_8_CONTROL_POINT_PATCH = 15,
+ VGPU10_PRIMITIVE_9_CONTROL_POINT_PATCH = 16,
+ VGPU10_PRIMITIVE_10_CONTROL_POINT_PATCH = 17,
+ VGPU10_PRIMITIVE_11_CONTROL_POINT_PATCH = 18,
+ VGPU10_PRIMITIVE_12_CONTROL_POINT_PATCH = 19,
+ VGPU10_PRIMITIVE_13_CONTROL_POINT_PATCH = 20,
+ VGPU10_PRIMITIVE_14_CONTROL_POINT_PATCH = 21,
+ VGPU10_PRIMITIVE_15_CONTROL_POINT_PATCH = 22,
+ VGPU10_PRIMITIVE_16_CONTROL_POINT_PATCH = 23,
+ VGPU10_PRIMITIVE_17_CONTROL_POINT_PATCH = 24,
+ VGPU10_PRIMITIVE_18_CONTROL_POINT_PATCH = 25,
+ VGPU10_PRIMITIVE_19_CONTROL_POINT_PATCH = 26,
+ VGPU10_PRIMITIVE_20_CONTROL_POINT_PATCH = 27,
+ VGPU10_PRIMITIVE_21_CONTROL_POINT_PATCH = 28,
+ VGPU10_PRIMITIVE_22_CONTROL_POINT_PATCH = 29,
+ VGPU10_PRIMITIVE_23_CONTROL_POINT_PATCH = 30,
+ VGPU10_PRIMITIVE_24_CONTROL_POINT_PATCH = 31,
+ VGPU10_PRIMITIVE_25_CONTROL_POINT_PATCH = 32,
+ VGPU10_PRIMITIVE_26_CONTROL_POINT_PATCH = 33,
+ VGPU10_PRIMITIVE_27_CONTROL_POINT_PATCH = 34,
+ VGPU10_PRIMITIVE_28_CONTROL_POINT_PATCH = 35,
+ VGPU10_PRIMITIVE_29_CONTROL_POINT_PATCH = 36,
+ VGPU10_PRIMITIVE_30_CONTROL_POINT_PATCH = 37,
+ VGPU10_PRIMITIVE_31_CONTROL_POINT_PATCH = 38,
+ VGPU10_PRIMITIVE_32_CONTROL_POINT_PATCH = 39,
+ VGPU10_PRIMITIVE_MAX = 39
+} VGPU10_PRIMITIVE;
+
+typedef enum {
+ VGPU10_PRIMITIVE_TOPOLOGY_UNDEFINED = 0,
+ VGPU10_PRIMITIVE_TOPOLOGY_POINTLIST = 1,
+ VGPU10_PRIMITIVE_TOPOLOGY_LINELIST = 2,
+ VGPU10_PRIMITIVE_TOPOLOGY_LINESTRIP = 3,
+ VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4,
+ VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5,
+ VGPU10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10,
+ VGPU10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11,
+ VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12,
+ VGPU10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13
+} VGPU10_PRIMITIVE_TOPOLOGY;
+
+typedef enum {
+ VGPU10_CUSTOMDATA_COMMENT = 0,
+ VGPU10_CUSTOMDATA_DEBUGINFO = 1,
+ VGPU10_CUSTOMDATA_OPAQUE = 2,
+ VGPU10_CUSTOMDATA_DCL_IMMEDIATE_CONSTANT_BUFFER = 3
+} VGPU10_CUSTOMDATA_CLASS;
+
+typedef enum {
+ VGPU10_RESINFO_RETURN_FLOAT = 0,
+ VGPU10_RESINFO_RETURN_RCPFLOAT = 1,
+ VGPU10_RESINFO_RETURN_UINT = 2
+} VGPU10_RESINFO_RETURN_TYPE;
+
+
+typedef enum {
+ VGPU10_INSTRUCTION_RETURN_FLOAT = 0,
+ VGPU10_INSTRUCTION_RETURN_UINT = 1
+} VGPU10_INSTRUCTION_RETURN_TYPE;
+
+/* DX11 */
+typedef enum {
+ VGPU10_TESSELLATOR_DOMAIN_UNDEFINED = 0,
+ VGPU10_TESSELLATOR_DOMAIN_ISOLINE = 1,
+ VGPU10_TESSELLATOR_DOMAIN_TRI = 2,
+ VGPU10_TESSELLATOR_DOMAIN_QUAD = 3,
+ VGPU10_TESSELLATOR_DOMAIN_MAX = 3
+} VGPU10_TESSELLATOR_DOMAIN;
+
+/* DX11 */
+typedef enum {
+ VGPU10_TESSELLATOR_PARTITIONING_UNDEFINED = 0,
+ VGPU10_TESSELLATOR_PARTITIONING_INTEGER = 1,
+ VGPU10_TESSELLATOR_PARTITIONING_POW2 = 2,
+ VGPU10_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD = 3,
+ VGPU10_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4,
+ VGPU10_TESSELLATOR_PARTITIONING_MAX = 4
+} VGPU10_TESSELLATOR_PARTITIONING;
+
+/* DX11 */
+typedef enum {
+ VGPU10_TESSELLATOR_OUTPUT_UNDEFINED = 0,
+ VGPU10_TESSELLATOR_OUTPUT_POINT = 1,
+ VGPU10_TESSELLATOR_OUTPUT_LINE = 2,
+ VGPU10_TESSELLATOR_OUTPUT_TRIANGLE_CW = 3,
+ VGPU10_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4,
+ VGPU10_TESSELLATOR_OUTPUT_MAX = 4
+} VGPU10_TESSELLATOR_OUTPUT_PRIMITIVE;
+
+typedef union {
+ struct {
+ unsigned int opcodeType : 11; /* VGPU10_OPCODE_TYPE */
+ unsigned int interpolationMode : 4; /* VGPU10_INTERPOLATION_MODE */
+ unsigned int : 3;
+ unsigned int testBoolean : 1; /* VGPU10_INSTRUCTION_TEST_BOOLEAN */
+ unsigned int preciseValues : 4; /* DX11 VGPU10_OPERAND_4_COMPONENT_MASK_* */
+ unsigned int : 1;
+ unsigned int instructionLength : 7;
+ unsigned int extended : 1;
+ };
+ /* VGPU10_OPCODE_VMWARE */
+ struct {
+ unsigned int : 11;
+ unsigned int vmwareOpcodeType : 4; /* VGPU10_VMWARE_OPCODE_TYPE */
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int resourceDimension : 5; /* VGPU10_RESOURCE_DIMENSION */
+ unsigned int sampleCount : 7;
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int samplerMode : 4; /* VGPU10_SAMPLER_MODE */
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int accessPattern : 1; /* VGPU10_CB_ACCESS_PATTERN */
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int primitive : 6; /* VGPU10_PRIMITIVE */
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int primitiveTopology : 6; /* VGPU10_PRIMITIVE_TOPOLOGY */
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int customDataClass : 21; /* VGPU10_CUSTOMDATA_CLASS */
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int resinfoReturnType : 2; /* VGPU10_RESINFO_RETURN_TYPE */
+ unsigned int saturate : 1;
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int refactoringAllowed : 1;
+
+ /* DX11 */
+ unsigned int enableDoublePrecisionFloatOps : 1;
+ unsigned int forceEarlyDepthStencil : 1;
+ unsigned int enableRawAndStructuredBuffers : 1;
+ };
+ struct {
+ unsigned int : 11;
+ unsigned int instReturnType : 2; /* VGPU10_INSTRUCTION_RETURN_TYPE */
+ };
+
+ /* DX11 */
+ struct {
+ unsigned int : 11;
+ unsigned int syncThreadsInGroup : 1;
+ unsigned int syncThreadGroupShared : 1;
+ unsigned int syncUAVMemoryGroup : 1;
+ unsigned int syncUAVMemoryGlobal : 1;
+ };
+ struct {
+ unsigned int : 11; /* VGPU10_OPCODE_DCL_INPUT_CONTROL_POINT_COUNT
+ * VGPU10_OPCODE_DCL_OUTPUT_CONTROL_POINT_COUNT */
+ unsigned int controlPointCount : 6;
+ };
+ struct {
+ unsigned int : 11; /* VGPU10_OPCODE_DCL_TESS_DOMAIN */
+ unsigned int tessDomain : 2; /* VGPU10_TESSELLATOR_DOMAIN */
+ };
+ struct {
+ unsigned int : 11; /* VGPU10_OPCODE_DCL_TESS_PARTITIONING */
+ unsigned int tessPartitioning : 3; /* VGPU10_TESSELLATOR_PARTITIONING */
+ };
+ struct {
+ unsigned int : 11; /* VGPU10_OPCODE_DCL_TESS_OUTPUT_PRIMITIVE */
+ unsigned int tessOutputPrimitive : 3; /* VGPU10_TESSELLATOR_OUTPUT_PRIMITIVE */
+ };
+ struct {
+ unsigned int : 11; /* VGPU10_OPCODE_DCL_INTERFACE */
+ unsigned int interfaceIndexedDynamically : 1;
+ };
+ struct {
+ unsigned int : 11; /* VGPU10_OPCODE_DCL_UAV_* */
+ unsigned int uavResourceDimension : 5; /* VGPU10_RESOURCE_DIMENSION */
+ unsigned int globallyCoherent : 1;
+ unsigned int : 6;
+ unsigned int uavHasCounter : 1;
+ };
+ uint32 value;
+} VGPU10OpcodeToken0;
+
+
+typedef enum {
+ VGPU10_EXTENDED_OPCODE_EMPTY = 0,
+ VGPU10_EXTENDED_OPCODE_SAMPLE_CONTROLS
+} VGPU10_EXTENDED_OPCODE_TYPE;
+
+typedef union {
+ struct {
+ unsigned int opcodeType : 6; /* VGPU10_EXTENDED_OPCODE_TYPE */
+ unsigned int : 3;
+ unsigned int offsetU : 4; /* Two's complement. */
+ unsigned int offsetV : 4; /* Two's complement. */
+ unsigned int offsetW : 4; /* Two's complement. */
+ unsigned int : 10;
+ unsigned int extended : 1;
+ };
+ uint32 value;
+} VGPU10OpcodeToken1;
+
+
+typedef enum {
+ VGPU10_OPERAND_0_COMPONENT = 0,
+ VGPU10_OPERAND_1_COMPONENT = 1,
+ VGPU10_OPERAND_4_COMPONENT = 2,
+ VGPU10_OPERAND_N_COMPONENT = 3 /* Unused for now. */
+} VGPU10_OPERAND_NUM_COMPONENTS;
+
+typedef enum {
+ VGPU10_OPERAND_4_COMPONENT_MASK_MODE = 0,
+ VGPU10_OPERAND_4_COMPONENT_SWIZZLE_MODE = 1,
+ VGPU10_OPERAND_4_COMPONENT_SELECT_1_MODE = 2
+} VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE;
+
+#define VGPU10_OPERAND_4_COMPONENT_MASK_X 0x1
+#define VGPU10_OPERAND_4_COMPONENT_MASK_Y 0x2
+#define VGPU10_OPERAND_4_COMPONENT_MASK_Z 0x4
+#define VGPU10_OPERAND_4_COMPONENT_MASK_W 0x8
+
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XY (VGPU10_OPERAND_4_COMPONENT_MASK_X | VGPU10_OPERAND_4_COMPONENT_MASK_Y)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XZ (VGPU10_OPERAND_4_COMPONENT_MASK_X | VGPU10_OPERAND_4_COMPONENT_MASK_Z)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XW (VGPU10_OPERAND_4_COMPONENT_MASK_X | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_YZ (VGPU10_OPERAND_4_COMPONENT_MASK_Y | VGPU10_OPERAND_4_COMPONENT_MASK_Z)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_YW (VGPU10_OPERAND_4_COMPONENT_MASK_Y | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_ZW (VGPU10_OPERAND_4_COMPONENT_MASK_Z | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XYZ (VGPU10_OPERAND_4_COMPONENT_MASK_XY | VGPU10_OPERAND_4_COMPONENT_MASK_Z)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XYW (VGPU10_OPERAND_4_COMPONENT_MASK_XY | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XZW (VGPU10_OPERAND_4_COMPONENT_MASK_XZ | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_YZW (VGPU10_OPERAND_4_COMPONENT_MASK_YZ | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_XYZW (VGPU10_OPERAND_4_COMPONENT_MASK_XYZ | VGPU10_OPERAND_4_COMPONENT_MASK_W)
+#define VGPU10_OPERAND_4_COMPONENT_MASK_ALL VGPU10_OPERAND_4_COMPONENT_MASK_XYZW
+
+#define VGPU10_REGISTER_INDEX_FROM_SEMANTIC 0xffffffff
+
+typedef enum {
+ VGPU10_COMPONENT_X = 0,
+ VGPU10_COMPONENT_Y = 1,
+ VGPU10_COMPONENT_Z = 2,
+ VGPU10_COMPONENT_W = 3
+} VGPU10_COMPONENT_NAME;
+
+typedef enum {
+ VGPU10_OPERAND_TYPE_TEMP = 0,
+ VGPU10_OPERAND_TYPE_INPUT = 1,
+ VGPU10_OPERAND_TYPE_OUTPUT = 2,
+ VGPU10_OPERAND_TYPE_INDEXABLE_TEMP = 3,
+ VGPU10_OPERAND_TYPE_IMMEDIATE32 = 4,
+ VGPU10_OPERAND_TYPE_IMMEDIATE64 = 5,
+ VGPU10_OPERAND_TYPE_SAMPLER = 6,
+ VGPU10_OPERAND_TYPE_RESOURCE = 7,
+ VGPU10_OPERAND_TYPE_CONSTANT_BUFFER = 8,
+ VGPU10_OPERAND_TYPE_IMMEDIATE_CONSTANT_BUFFER = 9,
+ VGPU10_OPERAND_TYPE_LABEL = 10,
+ VGPU10_OPERAND_TYPE_INPUT_PRIMITIVEID = 11,
+ VGPU10_OPERAND_TYPE_OUTPUT_DEPTH = 12,
+ VGPU10_OPERAND_TYPE_NULL = 13,
+ VGPU10_OPERAND_TYPE_SM40_MAX = 13,
+
+ /* DX10.1 */
+ VGPU10_OPERAND_TYPE_RASTERIZER = 14,
+ VGPU10_OPERAND_TYPE_OUTPUT_COVERAGE_MASK = 15,
+ VGPU10_OPERAND_TYPE_SM41_MAX = 15,
+
+ /* DX11 */
+ VGPU10_OPERAND_TYPE_STREAM = 16,
+ VGPU10_OPERAND_TYPE_FUNCTION_BODY = 17,
+ VGPU10_OPERAND_TYPE_FUNCTION_TABLE = 18,
+ VGPU10_OPERAND_TYPE_INTERFACE = 19,
+ VGPU10_OPERAND_TYPE_FUNCTION_INPUT = 20,
+ VGPU10_OPERAND_TYPE_FUNCTION_OUTPUT = 21,
+ VGPU10_OPERAND_TYPE_OUTPUT_CONTROL_POINT_ID = 22,
+ VGPU10_OPERAND_TYPE_INPUT_FORK_INSTANCE_ID = 23,
+ VGPU10_OPERAND_TYPE_INPUT_JOIN_INSTANCE_ID = 24,
+ VGPU10_OPERAND_TYPE_INPUT_CONTROL_POINT = 25,
+ VGPU10_OPERAND_TYPE_OUTPUT_CONTROL_POINT = 26,
+ VGPU10_OPERAND_TYPE_INPUT_PATCH_CONSTANT = 27,
+ VGPU10_OPERAND_TYPE_INPUT_DOMAIN_POINT = 28,
+ VGPU10_OPERAND_TYPE_THIS_POINTER = 29,
+ VGPU10_OPERAND_TYPE_UAV = 30,
+ VGPU10_OPERAND_TYPE_THREAD_GROUP_SHARED_MEMORY = 31,
+ VGPU10_OPERAND_TYPE_INPUT_THREAD_ID = 32,
+ VGPU10_OPERAND_TYPE_INPUT_THREAD_GROUP_ID = 33,
+ VGPU10_OPERAND_TYPE_INPUT_THREAD_ID_IN_GROUP = 34,
+ VGPU10_OPERAND_TYPE_INPUT_COVERAGE_MASK = 35,
+ VGPU10_OPERAND_TYPE_INPUT_THREAD_ID_IN_GROUP_FLATTENED = 36,
+ VGPU10_OPERAND_TYPE_INPUT_GS_INSTANCE_ID = 37,
+ VGPU10_OPERAND_TYPE_OUTPUT_DEPTH_GREATER_EQUAL = 38,
+ VGPU10_OPERAND_TYPE_OUTPUT_DEPTH_LESS_EQUAL = 39,
+ VGPU10_OPERAND_TYPE_CYCLE_COUNTER = 40,
+ VGPU10_OPERAND_TYPE_SM50_MAX = 40,
+
+ VGPU10_NUM_OPERANDS
+} VGPU10_OPERAND_TYPE;
+
+typedef enum {
+ VGPU10_OPERAND_INDEX_0D = 0,
+ VGPU10_OPERAND_INDEX_1D = 1,
+ VGPU10_OPERAND_INDEX_2D = 2,
+ VGPU10_OPERAND_INDEX_3D = 3
+} VGPU10_OPERAND_INDEX_DIMENSION;
+
+typedef enum {
+ VGPU10_OPERAND_INDEX_IMMEDIATE32 = 0,
+ VGPU10_OPERAND_INDEX_IMMEDIATE64 = 1,
+ VGPU10_OPERAND_INDEX_RELATIVE = 2,
+ VGPU10_OPERAND_INDEX_IMMEDIATE32_PLUS_RELATIVE = 3,
+ VGPU10_OPERAND_INDEX_IMMEDIATE64_PLUS_RELATIVE = 4
+} VGPU10_OPERAND_INDEX_REPRESENTATION;
+
+typedef union {
+ struct {
+ unsigned int numComponents : 2; /* VGPU10_OPERAND_NUM_COMPONENTS */
+ unsigned int selectionMode : 2; /* VGPU10_OPERAND_4_COMPONENT_SELECTION_MODE */
+ unsigned int mask : 4; /* D3D10_SB_OPERAND_4_COMPONENT_MASK_* */
+ unsigned int : 4;
+ unsigned int operandType : 8; /* VGPU10_OPERAND_TYPE */
+ unsigned int indexDimension : 2; /* VGPU10_OPERAND_INDEX_DIMENSION */
+ unsigned int index0Representation : 3; /* VGPU10_OPERAND_INDEX_REPRESENTATION */
+ unsigned int index1Representation : 3; /* VGPU10_OPERAND_INDEX_REPRESENTATION */
+ unsigned int : 3;
+ unsigned int extended : 1;
+ };
+ struct {
+ unsigned int : 4;
+ unsigned int swizzleX : 2; /* VGPU10_COMPONENT_NAME */
+ unsigned int swizzleY : 2; /* VGPU10_COMPONENT_NAME */
+ unsigned int swizzleZ : 2; /* VGPU10_COMPONENT_NAME */
+ unsigned int swizzleW : 2; /* VGPU10_COMPONENT_NAME */
+ };
+ struct {
+ unsigned int : 4;
+ unsigned int selectMask : 2; /* VGPU10_COMPONENT_NAME */
+ };
+ uint32 value;
+} VGPU10OperandToken0;
+
+
+typedef enum {
+ VGPU10_EXTENDED_OPERAND_EMPTY = 0,
+ VGPU10_EXTENDED_OPERAND_MODIFIER = 1
+} VGPU10_EXTENDED_OPERAND_TYPE;
+
+typedef enum {
+ VGPU10_OPERAND_MODIFIER_NONE = 0,
+ VGPU10_OPERAND_MODIFIER_NEG = 1,
+ VGPU10_OPERAND_MODIFIER_ABS = 2,
+ VGPU10_OPERAND_MODIFIER_ABSNEG = 3
+} VGPU10_OPERAND_MODIFIER;
+
+typedef union {
+ struct {
+ unsigned int extendedOperandType : 6; /* VGPU10_EXTENDED_OPERAND_TYPE */
+ unsigned int operandModifier : 8; /* VGPU10_OPERAND_MODIFIER */
+ unsigned int : 17;
+ unsigned int extended : 1;
+ };
+ uint32 value;
+} VGPU10OperandToken1;
+
+
+typedef enum {
+ VGPU10_RETURN_TYPE_MIN = 1,
+ VGPU10_RETURN_TYPE_UNORM = 1,
+ VGPU10_RETURN_TYPE_SNORM = 2,
+ VGPU10_RETURN_TYPE_SINT = 3,
+ VGPU10_RETURN_TYPE_UINT = 4,
+ VGPU10_RETURN_TYPE_FLOAT = 5,
+ VGPU10_RETURN_TYPE_MIXED = 6,
+ VGPU10_RETURN_TYPE_MAX = 6
+} VGPU10_RESOURCE_RETURN_TYPE;
+
+typedef union {
+ struct {
+ unsigned int component0 : 4; /* VGPU10_RESOURCE_RETURN_TYPE */
+ unsigned int component1 : 4; /* VGPU10_RESOURCE_RETURN_TYPE */
+ unsigned int component2 : 4; /* VGPU10_RESOURCE_RETURN_TYPE */
+ unsigned int component3 : 4; /* VGPU10_RESOURCE_RETURN_TYPE */
+ };
+ uint32 value;
+} VGPU10ResourceReturnTypeToken;
+
+
+typedef enum {
+ VGPU10_NAME_MIN = 0,
+ VGPU10_NAME_UNDEFINED = 0,
+ VGPU10_NAME_POSITION = 1,
+ VGPU10_NAME_CLIP_DISTANCE = 2,
+ VGPU10_NAME_CULL_DISTANCE = 3,
+ VGPU10_NAME_RENDER_TARGET_ARRAY_INDEX = 4,
+ VGPU10_NAME_VIEWPORT_ARRAY_INDEX = 5,
+ VGPU10_NAME_VERTEX_ID = 6,
+ VGPU10_NAME_PRIMITIVE_ID = 7,
+ VGPU10_NAME_INSTANCE_ID = 8,
+ VGPU10_NAME_IS_FRONT_FACE = 9,
+ VGPU10_NAME_SAMPLE_INDEX = 10,
+ VGPU10_NAME_SM40_MAX = 10,
+
+ /* DX11 */
+ VGPU10_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR = 11,
+ VGPU10_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR = 12,
+ VGPU10_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR = 13,
+ VGPU10_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR = 14,
+ VGPU10_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR = 15,
+ VGPU10_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR = 16,
+ VGPU10_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR = 17,
+ VGPU10_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR = 18,
+ VGPU10_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR = 19,
+ VGPU10_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 20,
+ VGPU10_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 21,
+ VGPU10_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 22,
+
+ VGPU10_NAME_MAX = 22
+} VGPU10_SYSTEM_NAME;
+
+typedef union {
+ struct {
+ unsigned int name : 16; /* VGPU10_SYSTEM_NAME */
+ };
+ uint32 value;
+} VGPU10NameToken;
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/includeCheck.h b/src/VBox/Devices/Graphics/vmsvga_include/includeCheck.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/includeCheck.h
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_caps.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_caps.h
new file mode 100644
index 00000000..69c4253f
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_caps.h
@@ -0,0 +1,111 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2007-2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_caps.h --
+ *
+ * Definitions for SVGA3D hardware capabilities. Capabilities
+ * are used to query for optional rendering features during
+ * driver initialization. The capability data is stored as very
+ * basic key/value dictionary within the "FIFO register" memory
+ * area at the beginning of BAR2.
+ *
+ * Note that these definitions are only for 3D capabilities.
+ * The SVGA device also has "device capabilities" and "FIFO
+ * capabilities", which are non-3D-specific and are stored as
+ * bitfields rather than key/value pairs.
+ */
+
+#ifndef _SVGA3D_CAPS_H_
+#define _SVGA3D_CAPS_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+
+#include "includeCheck.h"
+
+#include "svga_reg.h"
+
+#define SVGA_FIFO_3D_CAPS_SIZE (SVGA_FIFO_3D_CAPS_LAST - \
+ SVGA_FIFO_3D_CAPS + 1)
+
+
+/*
+ * SVGA3dCapsRecordType
+ *
+ * Record types that can be found in the caps block.
+ * Related record types are grouped together numerically so that
+ * SVGA3dCaps_FindRecord() can be applied on a range of record
+ * types.
+ */
+
+typedef enum {
+ SVGA3DCAPS_RECORD_UNKNOWN = 0,
+ SVGA3DCAPS_RECORD_DEVCAPS_MIN = 0x100,
+ SVGA3DCAPS_RECORD_DEVCAPS = 0x100,
+ SVGA3DCAPS_RECORD_DEVCAPS_MAX = 0x1ff,
+} SVGA3dCapsRecordType;
+
+
+/*
+ * SVGA3dCapsRecordHeader
+ *
+ * Header field leading each caps block record. Contains the offset (in
+ * register words, NOT bytes) to the next caps block record (or the end
+ * of caps block records which will be a zero word) and the record type
+ * as defined above.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCapsRecordHeader {
+ uint32 length;
+ SVGA3dCapsRecordType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCapsRecordHeader;
+
+
+/*
+ * SVGA3dCapsRecord
+ *
+ * Caps block record; "data" is a placeholder for the actual data structure
+ * contained within the record;
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCapsRecord {
+ SVGA3dCapsRecordHeader header;
+ uint32 data[1];
+}
+#include "vmware_pack_end.h"
+SVGA3dCapsRecord;
+
+
+typedef uint32 SVGA3dCapPair[2];
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_cmd.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_cmd.h
new file mode 100644
index 00000000..b9d71fd6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_cmd.h
@@ -0,0 +1,2279 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 1998-2020 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_cmd.h --
+ *
+ * SVGA 3d hardware cmd definitions
+ */
+
+#ifndef _SVGA3D_CMD_H_
+#define _SVGA3D_CMD_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_VMCORE
+
+#include "includeCheck.h"
+#include "svga3d_types.h"
+
+/*
+ * Identifiers for commands in the command FIFO.
+ *
+ * IDs between 1000 and 1039 (inclusive) were used by obsolete versions of
+ * the SVGA3D protocol and remain reserved; they should not be used in the
+ * future.
+ *
+ * IDs between 1040 and 2999 (inclusive) are available for use by the
+ * current SVGA3D protocol.
+ *
+ * FIFO clients other than SVGA3D should stay below 1000, or at 3000
+ * and up.
+ */
+
+typedef enum {
+ SVGA_3D_CMD_LEGACY_BASE = 1000,
+ SVGA_3D_CMD_BASE = 1040,
+
+ SVGA_3D_CMD_SURFACE_DEFINE = 1040,
+ SVGA_3D_CMD_SURFACE_DESTROY = 1041,
+ SVGA_3D_CMD_SURFACE_COPY = 1042,
+ SVGA_3D_CMD_SURFACE_STRETCHBLT = 1043,
+ SVGA_3D_CMD_SURFACE_DMA = 1044,
+ SVGA_3D_CMD_CONTEXT_DEFINE = 1045,
+ SVGA_3D_CMD_CONTEXT_DESTROY = 1046,
+ SVGA_3D_CMD_SETTRANSFORM = 1047,
+ SVGA_3D_CMD_SETZRANGE = 1048,
+ SVGA_3D_CMD_SETRENDERSTATE = 1049,
+ SVGA_3D_CMD_SETRENDERTARGET = 1050,
+ SVGA_3D_CMD_SETTEXTURESTATE = 1051,
+ SVGA_3D_CMD_SETMATERIAL = 1052,
+ SVGA_3D_CMD_SETLIGHTDATA = 1053,
+ SVGA_3D_CMD_SETLIGHTENABLED = 1054,
+ SVGA_3D_CMD_SETVIEWPORT = 1055,
+ SVGA_3D_CMD_SETCLIPPLANE = 1056,
+ SVGA_3D_CMD_CLEAR = 1057,
+ SVGA_3D_CMD_PRESENT = 1058,
+ SVGA_3D_CMD_SHADER_DEFINE = 1059,
+ SVGA_3D_CMD_SHADER_DESTROY = 1060,
+ SVGA_3D_CMD_SET_SHADER = 1061,
+ SVGA_3D_CMD_SET_SHADER_CONST = 1062,
+ SVGA_3D_CMD_DRAW_PRIMITIVES = 1063,
+ SVGA_3D_CMD_SETSCISSORRECT = 1064,
+ SVGA_3D_CMD_BEGIN_QUERY = 1065,
+ SVGA_3D_CMD_END_QUERY = 1066,
+ SVGA_3D_CMD_WAIT_FOR_QUERY = 1067,
+ SVGA_3D_CMD_PRESENT_READBACK = 1068,
+ SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN = 1069,
+ SVGA_3D_CMD_SURFACE_DEFINE_V2 = 1070,
+ SVGA_3D_CMD_GENERATE_MIPMAPS = 1071,
+ SVGA_3D_CMD_DEAD4 = 1072,
+ SVGA_3D_CMD_DEAD5 = 1073,
+ SVGA_3D_CMD_DEAD6 = 1074,
+ SVGA_3D_CMD_DEAD7 = 1075,
+ SVGA_3D_CMD_DEAD8 = 1076,
+ SVGA_3D_CMD_DEAD9 = 1077,
+ SVGA_3D_CMD_DEAD10 = 1078,
+ SVGA_3D_CMD_DEAD11 = 1079,
+ SVGA_3D_CMD_ACTIVATE_SURFACE = 1080,
+ SVGA_3D_CMD_DEACTIVATE_SURFACE = 1081,
+ SVGA_3D_CMD_SCREEN_DMA = 1082,
+#ifndef VBOX
+ SVGA_3D_CMD_DEAD1 = 1083,
+#else
+ SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION = 1083,
+#endif
+ SVGA_3D_CMD_DEAD2 = 1084,
+
+ SVGA_3D_CMD_DEAD12 = 1085,
+ SVGA_3D_CMD_DEAD13 = 1086,
+ SVGA_3D_CMD_DEAD14 = 1087,
+ SVGA_3D_CMD_DEAD15 = 1088,
+ SVGA_3D_CMD_DEAD16 = 1089,
+ SVGA_3D_CMD_DEAD17 = 1090,
+
+ SVGA_3D_CMD_SET_OTABLE_BASE = 1091,
+ SVGA_3D_CMD_READBACK_OTABLE = 1092,
+
+ SVGA_3D_CMD_DEFINE_GB_MOB = 1093,
+ SVGA_3D_CMD_DESTROY_GB_MOB = 1094,
+ SVGA_3D_CMD_DEAD3 = 1095,
+ SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING = 1096,
+
+ SVGA_3D_CMD_DEFINE_GB_SURFACE = 1097,
+ SVGA_3D_CMD_DESTROY_GB_SURFACE = 1098,
+ SVGA_3D_CMD_BIND_GB_SURFACE = 1099,
+ SVGA_3D_CMD_COND_BIND_GB_SURFACE = 1100,
+ SVGA_3D_CMD_UPDATE_GB_IMAGE = 1101,
+ SVGA_3D_CMD_UPDATE_GB_SURFACE = 1102,
+ SVGA_3D_CMD_READBACK_GB_IMAGE = 1103,
+ SVGA_3D_CMD_READBACK_GB_SURFACE = 1104,
+ SVGA_3D_CMD_INVALIDATE_GB_IMAGE = 1105,
+ SVGA_3D_CMD_INVALIDATE_GB_SURFACE = 1106,
+
+ SVGA_3D_CMD_DEFINE_GB_CONTEXT = 1107,
+ SVGA_3D_CMD_DESTROY_GB_CONTEXT = 1108,
+ SVGA_3D_CMD_BIND_GB_CONTEXT = 1109,
+ SVGA_3D_CMD_READBACK_GB_CONTEXT = 1110,
+ SVGA_3D_CMD_INVALIDATE_GB_CONTEXT = 1111,
+
+ SVGA_3D_CMD_DEFINE_GB_SHADER = 1112,
+ SVGA_3D_CMD_DESTROY_GB_SHADER = 1113,
+ SVGA_3D_CMD_BIND_GB_SHADER = 1114,
+
+ SVGA_3D_CMD_SET_OTABLE_BASE64 = 1115,
+
+ SVGA_3D_CMD_BEGIN_GB_QUERY = 1116,
+ SVGA_3D_CMD_END_GB_QUERY = 1117,
+ SVGA_3D_CMD_WAIT_FOR_GB_QUERY = 1118,
+
+ SVGA_3D_CMD_NOP = 1119,
+
+ SVGA_3D_CMD_ENABLE_GART = 1120,
+ SVGA_3D_CMD_DISABLE_GART = 1121,
+ SVGA_3D_CMD_MAP_MOB_INTO_GART = 1122,
+ SVGA_3D_CMD_UNMAP_GART_RANGE = 1123,
+
+ SVGA_3D_CMD_DEFINE_GB_SCREENTARGET = 1124,
+ SVGA_3D_CMD_DESTROY_GB_SCREENTARGET = 1125,
+ SVGA_3D_CMD_BIND_GB_SCREENTARGET = 1126,
+ SVGA_3D_CMD_UPDATE_GB_SCREENTARGET = 1127,
+
+ SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL = 1128,
+ SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL = 1129,
+
+ SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE = 1130,
+
+ SVGA_3D_CMD_GB_SCREEN_DMA = 1131,
+ SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH = 1132,
+ SVGA_3D_CMD_GB_MOB_FENCE = 1133,
+ SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 = 1134,
+ SVGA_3D_CMD_DEFINE_GB_MOB64 = 1135,
+ SVGA_3D_CMD_REDEFINE_GB_MOB64 = 1136,
+ SVGA_3D_CMD_NOP_ERROR = 1137,
+
+ SVGA_3D_CMD_SET_VERTEX_STREAMS = 1138,
+ SVGA_3D_CMD_SET_VERTEX_DECLS = 1139,
+ SVGA_3D_CMD_SET_VERTEX_DIVISORS = 1140,
+ SVGA_3D_CMD_DRAW = 1141,
+ SVGA_3D_CMD_DRAW_INDEXED = 1142,
+
+ /*
+ * DX10 Commands
+ */
+ SVGA_3D_CMD_DX_MIN = 1143,
+ SVGA_3D_CMD_DX_DEFINE_CONTEXT = 1143,
+ SVGA_3D_CMD_DX_DESTROY_CONTEXT = 1144,
+ SVGA_3D_CMD_DX_BIND_CONTEXT = 1145,
+ SVGA_3D_CMD_DX_READBACK_CONTEXT = 1146,
+ SVGA_3D_CMD_DX_INVALIDATE_CONTEXT = 1147,
+ SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER = 1148,
+ SVGA_3D_CMD_DX_SET_SHADER_RESOURCES = 1149,
+ SVGA_3D_CMD_DX_SET_SHADER = 1150,
+ SVGA_3D_CMD_DX_SET_SAMPLERS = 1151,
+ SVGA_3D_CMD_DX_DRAW = 1152,
+ SVGA_3D_CMD_DX_DRAW_INDEXED = 1153,
+ SVGA_3D_CMD_DX_DRAW_INSTANCED = 1154,
+ SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED = 1155,
+ SVGA_3D_CMD_DX_DRAW_AUTO = 1156,
+ SVGA_3D_CMD_DX_SET_INPUT_LAYOUT = 1157,
+ SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS = 1158,
+ SVGA_3D_CMD_DX_SET_INDEX_BUFFER = 1159,
+ SVGA_3D_CMD_DX_SET_TOPOLOGY = 1160,
+ SVGA_3D_CMD_DX_SET_RENDERTARGETS = 1161,
+ SVGA_3D_CMD_DX_SET_BLEND_STATE = 1162,
+ SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE = 1163,
+ SVGA_3D_CMD_DX_SET_RASTERIZER_STATE = 1164,
+ SVGA_3D_CMD_DX_DEFINE_QUERY = 1165,
+ SVGA_3D_CMD_DX_DESTROY_QUERY = 1166,
+ SVGA_3D_CMD_DX_BIND_QUERY = 1167,
+ SVGA_3D_CMD_DX_SET_QUERY_OFFSET = 1168,
+ SVGA_3D_CMD_DX_BEGIN_QUERY = 1169,
+ SVGA_3D_CMD_DX_END_QUERY = 1170,
+ SVGA_3D_CMD_DX_READBACK_QUERY = 1171,
+ SVGA_3D_CMD_DX_SET_PREDICATION = 1172,
+ SVGA_3D_CMD_DX_SET_SOTARGETS = 1173,
+ SVGA_3D_CMD_DX_SET_VIEWPORTS = 1174,
+ SVGA_3D_CMD_DX_SET_SCISSORRECTS = 1175,
+ SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW = 1176,
+ SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW = 1177,
+ SVGA_3D_CMD_DX_PRED_COPY_REGION = 1178,
+ SVGA_3D_CMD_DX_PRED_COPY = 1179,
+ SVGA_3D_CMD_DX_PRESENTBLT = 1180,
+ SVGA_3D_CMD_DX_GENMIPS = 1181,
+ SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE = 1182,
+ SVGA_3D_CMD_DX_READBACK_SUBRESOURCE = 1183,
+ SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE = 1184,
+ SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW = 1185,
+ SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW = 1186,
+ SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW = 1187,
+ SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW = 1188,
+ SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW = 1189,
+ SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW = 1190,
+ SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT = 1191,
+ SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT = 1192,
+ SVGA_3D_CMD_DX_DEFINE_BLEND_STATE = 1193,
+ SVGA_3D_CMD_DX_DESTROY_BLEND_STATE = 1194,
+ SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE = 1195,
+ SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE = 1196,
+ SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE = 1197,
+ SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE = 1198,
+ SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE = 1199,
+ SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE = 1200,
+ SVGA_3D_CMD_DX_DEFINE_SHADER = 1201,
+ SVGA_3D_CMD_DX_DESTROY_SHADER = 1202,
+ SVGA_3D_CMD_DX_BIND_SHADER = 1203,
+ SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT = 1204,
+ SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT = 1205,
+ SVGA_3D_CMD_DX_SET_STREAMOUTPUT = 1206,
+ SVGA_3D_CMD_DX_SET_COTABLE = 1207,
+ SVGA_3D_CMD_DX_READBACK_COTABLE = 1208,
+ SVGA_3D_CMD_DX_BUFFER_COPY = 1209,
+ SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER = 1210,
+ SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK = 1211,
+ SVGA_3D_CMD_DX_MOVE_QUERY = 1212,
+ SVGA_3D_CMD_DX_BIND_ALL_QUERY = 1213,
+ SVGA_3D_CMD_DX_READBACK_ALL_QUERY = 1214,
+ SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER = 1215,
+ SVGA_3D_CMD_DX_MOB_FENCE_64 = 1216,
+ SVGA_3D_CMD_DX_BIND_ALL_SHADER = 1217,
+ SVGA_3D_CMD_DX_HINT = 1218,
+ SVGA_3D_CMD_DX_BUFFER_UPDATE = 1219,
+ SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET = 1220,
+ SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET = 1221,
+ SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET = 1222,
+ SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET = 1223,
+ SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET = 1224,
+ SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET = 1225,
+
+ SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER = 1226,
+ SVGA_3D_CMD_DX_MAX = 1227,
+
+ SVGA_3D_CMD_SCREEN_COPY = 1227,
+
+ SVGA_3D_CMD_RESERVED1 = 1228,
+ SVGA_3D_CMD_RESERVED2 = 1229,
+ SVGA_3D_CMD_RESERVED3 = 1230,
+ SVGA_3D_CMD_RESERVED4 = 1231,
+ SVGA_3D_CMD_RESERVED5 = 1232,
+ SVGA_3D_CMD_RESERVED6 = 1233,
+ SVGA_3D_CMD_RESERVED7 = 1234,
+ SVGA_3D_CMD_RESERVED8 = 1235,
+
+ SVGA_3D_CMD_GROW_OTABLE = 1236,
+ SVGA_3D_CMD_DX_GROW_COTABLE = 1237,
+ SVGA_3D_CMD_INTRA_SURFACE_COPY = 1238,
+
+ SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 = 1239,
+
+ SVGA_3D_CMD_DX_RESOLVE_COPY = 1240,
+ SVGA_3D_CMD_DX_PRED_RESOLVE_COPY = 1241,
+ SVGA_3D_CMD_DX_PRED_CONVERT_REGION = 1242,
+ SVGA_3D_CMD_DX_PRED_CONVERT = 1243,
+ SVGA_3D_CMD_WHOLE_SURFACE_COPY = 1244,
+
+ SVGA_3D_CMD_DX_DEFINE_UA_VIEW = 1245,
+ SVGA_3D_CMD_DX_DESTROY_UA_VIEW = 1246,
+ SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT = 1247,
+ SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT = 1248,
+ SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT = 1249,
+ SVGA_3D_CMD_DX_SET_UA_VIEWS = 1250,
+
+ SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT = 1251,
+ SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT = 1252,
+ SVGA_3D_CMD_DX_DISPATCH = 1253,
+ SVGA_3D_CMD_DX_DISPATCH_INDIRECT = 1254,
+
+ SVGA_3D_CMD_WRITE_ZERO_SURFACE = 1255,
+ SVGA_3D_CMD_HINT_ZERO_SURFACE = 1256,
+ SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER = 1257,
+ SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT = 1258,
+
+ SVGA_3D_CMD_LOGICOPS_BITBLT = 1259,
+ SVGA_3D_CMD_LOGICOPS_TRANSBLT = 1260,
+ SVGA_3D_CMD_LOGICOPS_STRETCHBLT = 1261,
+ SVGA_3D_CMD_LOGICOPS_COLORFILL = 1262,
+ SVGA_3D_CMD_LOGICOPS_ALPHABLEND = 1263,
+ SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND = 1264,
+
+ SVGA_3D_CMD_RESERVED2_1 = 1265,
+
+ SVGA_3D_CMD_RESERVED2_2 = 1266,
+ SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 = 1267,
+ SVGA_3D_CMD_DX_SET_CS_UA_VIEWS = 1268,
+ SVGA_3D_CMD_DX_SET_MIN_LOD = 1269,
+ SVGA_3D_CMD_RESERVED2_3 = 1270,
+ SVGA_3D_CMD_RESERVED2_4 = 1271,
+ SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2 = 1272,
+ SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB = 1273,
+ SVGA_3D_CMD_DX_SET_SHADER_IFACE = 1274,
+ SVGA_3D_CMD_DX_BIND_STREAMOUTPUT = 1275,
+ SVGA_3D_CMD_SURFACE_STRETCHBLT_NON_MS_TO_MS = 1276,
+ SVGA_3D_CMD_DX_BIND_SHADER_IFACE = 1277,
+
+ SVGA_3D_CMD_MAX = 1278,
+ SVGA_3D_CMD_FUTURE_MAX = 3000
+} SVGAFifo3dCmdId;
+
+#define SVGA_NUM_3D_CMD (SVGA_3D_CMD_MAX - SVGA_3D_CMD_BASE)
+
+/*
+ * FIFO command format definitions:
+ */
+
+/*
+ * The data size header following cmdNum for every 3d command
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 id;
+ uint32 size;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdHeader;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 numMipLevels;
+}
+#include "vmware_pack_end.h"
+SVGA3dSurfaceFace;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+ SVGA3dSurface1Flags surfaceFlags;
+ SVGA3dSurfaceFormat format;
+
+ /*
+ * If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
+ * structures must have the same value of numMipLevels field.
+ * Otherwise, all but the first SVGA3dSurfaceFace structures must have the
+ * numMipLevels set to 0.
+ */
+ SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES];
+
+ /*
+ * Followed by an SVGA3dSize structure for each mip level in each face.
+ *
+ * A note on surface sizes: Sizes are always specified in pixels,
+ * even if the true surface size is not a multiple of the minimum
+ * block size of the surface's format. For example, a 3x3x1 DXT1
+ * compressed texture would actually be stored as a 4x4x1 image in
+ * memory.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineSurface; /* SVGA_3D_CMD_SURFACE_DEFINE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+ SVGA3dSurface1Flags surfaceFlags;
+ SVGA3dSurfaceFormat format;
+
+ /*
+ * If surfaceFlags has SVGA3D_SURFACE_CUBEMAP bit set, all SVGA3dSurfaceFace
+ * structures must have the same value of numMipLevels field.
+ * Otherwise, all but the first SVGA3dSurfaceFace structures must have the
+ * numMipLevels set to 0.
+ */
+ SVGA3dSurfaceFace face[SVGA3D_MAX_SURFACE_FACES];
+ uint32 multisampleCount;
+ SVGA3dTextureFilter autogenFilter;
+
+ /*
+ * Followed by an SVGA3dSize structure for each mip level in each face.
+ *
+ * A note on surface sizes: Sizes are always specified in pixels,
+ * even if the true surface size is not a multiple of the minimum
+ * block size of the surface's format. For example, a 3x3x1 DXT1
+ * compressed texture would actually be stored as a 4x4x1 image in
+ * memory.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineSurface_v2; /* SVGA_3D_CMD_SURFACE_DEFINE_V2 */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroySurface; /* SVGA_3D_CMD_SURFACE_DESTROY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineContext; /* SVGA_3D_CMD_CONTEXT_DEFINE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyContext; /* SVGA_3D_CMD_CONTEXT_DESTROY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dClearFlag clearFlag;
+ uint32 color;
+ float depth;
+ uint32 stencil;
+ /* Followed by variable number of SVGA3dRect structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdClear; /* SVGA_3D_CMD_CLEAR */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dLightType type;
+ SVGA3dBool inWorldSpace;
+ float diffuse[4];
+ float specular[4];
+ float ambient[4];
+ float position[4];
+ float direction[4];
+ float range;
+ float falloff;
+ float attenuation0;
+ float attenuation1;
+ float attenuation2;
+ float theta;
+ float phi;
+}
+#include "vmware_pack_end.h"
+SVGA3dLightData;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+ /* Followed by variable number of SVGA3dCopyRect structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdPresent; /* SVGA_3D_CMD_PRESENT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dRenderStateName state;
+ union {
+ uint32 uintValue;
+ float floatValue;
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dRenderState;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ /* Followed by variable number of SVGA3dRenderState structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetRenderState; /* SVGA_3D_CMD_SETRENDERSTATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dRenderTargetType type;
+ SVGA3dSurfaceImageId target;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetRenderTarget; /* SVGA_3D_CMD_SETRENDERTARGET */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dest;
+ /* Followed by variable number of SVGA3dCopyBox structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSurfaceCopy; /* SVGA_3D_CMD_SURFACE_COPY */
+
+/*
+ * Perform a surface copy within the same image.
+ * The src/dest boxes are allowed to overlap.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceImageId surface;
+ SVGA3dCopyBox box;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdIntraSurfaceCopy; /* SVGA_3D_CMD_INTRA_SURFACE_COPY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 srcSid;
+ uint32 destSid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdWholeSurfaceCopy; /* SVGA_3D_CMD_WHOLE_SURFACE_COPY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dest;
+ SVGA3dBox boxSrc;
+ SVGA3dBox boxDest;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSurfaceStretchBltNonMSToMS;
+/* SVGA_3D_CMD_SURFACE_STRETCHBLT_NON_MS_TO_MS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dest;
+ SVGA3dBox boxSrc;
+ SVGA3dBox boxDest;
+ SVGA3dStretchBltMode mode;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSurfaceStretchBlt; /* SVGA_3D_CMD_SURFACE_STRETCHBLT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ /*
+ * If the discard flag is present in a surface DMA operation, the host may
+ * discard the contents of the current mipmap level and face of the target
+ * surface before applying the surface DMA contents.
+ */
+ uint32 discard : 1;
+
+ /*
+ * If the unsynchronized flag is present, the host may perform this upload
+ * without syncing to pending reads on this surface.
+ */
+ uint32 unsynchronized : 1;
+
+ /*
+ * Guests *MUST* set the reserved bits to 0 before submitting the command
+ * suffix as future flags may occupy these bits.
+ */
+ uint32 reserved : 30;
+}
+#include "vmware_pack_end.h"
+SVGA3dSurfaceDMAFlags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAGuestImage guest;
+ SVGA3dSurfaceImageId host;
+ SVGA3dTransferType transfer;
+
+ /*
+ * Followed by variable number of SVGA3dCopyBox structures. For consistency
+ * in all clipping logic and coordinate translation, we define the
+ * "source" in each copyBox as the guest image and the
+ * "destination" as the host image, regardless of transfer
+ * direction.
+ *
+ * For efficiency, the SVGA3D device is free to copy more data than
+ * specified. For example, it may round copy boxes outwards such
+ * that they lie on particular alignment boundaries.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSurfaceDMA; /* SVGA_3D_CMD_SURFACE_DMA */
+
+/*
+ * SVGA3dCmdSurfaceDMASuffix --
+ *
+ * This is a command suffix that will appear after a SurfaceDMA command in
+ * the FIFO. It contains some extra information that hosts may use to
+ * optimize performance or protect the guest. This suffix exists to preserve
+ * backwards compatibility while also allowing for new functionality to be
+ * implemented.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 suffixSize;
+
+ /*
+ * The maximum offset is used to determine the maximum offset from the
+ * guestPtr base address that will be accessed or written to during this
+ * surfaceDMA. If the suffix is supported, the host will respect this
+ * boundary while performing surface DMAs.
+ *
+ * Defaults to MAX_UINT32
+ */
+ uint32 maximumOffset;
+
+ /*
+ * A set of flags that describes optimizations that the host may perform
+ * while performing this surface DMA operation. The guest should never rely
+ * on behaviour that is different when these flags are set for correctness.
+ *
+ * Defaults to 0
+ */
+ SVGA3dSurfaceDMAFlags flags;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSurfaceDMASuffix;
+
+/*
+ * SVGA_3D_CMD_DRAW_PRIMITIVES --
+ *
+ * This command is the SVGA3D device's generic drawing entry point.
+ * It can draw multiple ranges of primitives, optionally using an
+ * index buffer, using an arbitrary collection of vertex buffers.
+ *
+ * Each SVGA3dVertexDecl defines a distinct vertex array to bind
+ * during this draw call. The declarations specify which surface
+ * the vertex data lives in, what that vertex data is used for,
+ * and how to interpret it.
+ *
+ * Each SVGA3dPrimitiveRange defines a collection of primitives
+ * to render using the same vertex arrays. An index buffer is
+ * optional.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ /*
+ * A range hint is an optional specification for the range of indices
+ * in an SVGA3dArray that will be used. If 'last' is zero, it is assumed
+ * that the entire array will be used.
+ *
+ * These are only hints. The SVGA3D device may use them for
+ * performance optimization if possible, but it's also allowed to
+ * ignore these values.
+ */
+ uint32 first;
+ uint32 last;
+}
+#include "vmware_pack_end.h"
+SVGA3dArrayRangeHint;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ /*
+ * Define the origin and shape of a vertex or index array. Both
+ * 'offset' and 'stride' are in bytes. The provided surface will be
+ * reinterpreted as a flat array of bytes in the same format used
+ * by surface DMA operations. To avoid unnecessary conversions, the
+ * surface should be created with the SVGA3D_BUFFER format.
+ *
+ * Index 0 in the array starts 'offset' bytes into the surface.
+ * Index 1 begins at byte 'offset + stride', etc. Array indices may
+ * not be negative.
+ */
+ uint32 surfaceId;
+ uint32 offset;
+ uint32 stride;
+}
+#include "vmware_pack_end.h"
+SVGA3dArray;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ /*
+ * Describe a vertex array's data type, and define how it is to be
+ * used by the fixed function pipeline or the vertex shader. It
+ * isn't useful to have two VertexDecls with the same
+ * VertexArrayIdentity in one draw call.
+ */
+ SVGA3dDeclType type;
+ SVGA3dDeclMethod method;
+ SVGA3dDeclUsage usage;
+ uint32 usageIndex;
+}
+#include "vmware_pack_end.h"
+SVGA3dVertexArrayIdentity;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dVertexDecl {
+ SVGA3dVertexArrayIdentity identity;
+ SVGA3dArray array;
+ SVGA3dArrayRangeHint rangeHint;
+}
+#include "vmware_pack_end.h"
+SVGA3dVertexDecl;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dPrimitiveRange {
+ /*
+ * Define a group of primitives to render, from sequential indices.
+ *
+ * The value of 'primitiveType' and 'primitiveCount' imply the
+ * total number of vertices that will be rendered.
+ */
+ SVGA3dPrimitiveType primType;
+ uint32 primitiveCount;
+
+ /*
+ * Optional index buffer. If indexArray.surfaceId is
+ * SVGA3D_INVALID_ID, we render without an index buffer. Rendering
+ * without an index buffer is identical to rendering with an index
+ * buffer containing the sequence [0, 1, 2, 3, ...].
+ *
+ * If an index buffer is in use, indexWidth specifies the width in
+ * bytes of each index value. It must be less than or equal to
+ * indexArray.stride.
+ *
+ * (Currently, the SVGA3D device requires index buffers to be tightly
+ * packed. In other words, indexWidth == indexArray.stride)
+ */
+ SVGA3dArray indexArray;
+ uint32 indexWidth;
+
+ /*
+ * Optional index bias. This number is added to all indices from
+ * indexArray before they are used as vertex array indices. This
+ * can be used in multiple ways:
+ *
+ * - When not using an indexArray, this bias can be used to
+ * specify where in the vertex arrays to begin rendering.
+ *
+ * - A positive number here is equivalent to increasing the
+ * offset in each vertex array.
+ *
+ * - A negative number can be used to render using a small
+ * vertex array and an index buffer that contains large
+ * values. This may be used by some applications that
+ * crop a vertex buffer without modifying their index
+ * buffer.
+ *
+ * Note that rendering with a negative bias value may be slower and
+ * use more memory than rendering with a positive or zero bias.
+ */
+ int32 indexBias;
+}
+#include "vmware_pack_end.h"
+SVGA3dPrimitiveRange;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 numVertexDecls;
+ uint32 numRanges;
+
+ /*
+ * There are two variable size arrays after the
+ * SVGA3dCmdDrawPrimitives structure. In order,
+ * they are:
+ *
+ * 1. SVGA3dVertexDecl, quantity 'numVertexDecls', but no more than
+ * SVGA3D_MAX_VERTEX_ARRAYS;
+ * 2. SVGA3dPrimitiveRange, quantity 'numRanges', but no more than
+ * SVGA3D_MAX_DRAW_PRIMITIVE_RANGES;
+ * 3. Optionally, SVGA3dVertexDivisor, quantity 'numVertexDecls' (contains
+ * the frequency divisor for the corresponding vertex decl).
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDrawPrimitives; /* SVGA_3D_CMD_DRAWPRIMITIVES */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+
+ uint32 primitiveCount; /* How many primitives to render */
+ uint32 startVertexLocation; /* Which vertex do we start rendering at. */
+
+ uint8 primitiveType; /* SVGA3dPrimitiveType */
+ uint8 padding[3];
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDraw;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+
+ uint8 primitiveType; /* SVGA3dPrimitiveType */
+
+ uint32 indexBufferSid; /* Valid index buffer sid. */
+ uint32 indexBufferOffset; /* Byte offset into the vertex buffer, almost */
+ /* always 0 for pre SM guests, non-zero for OpenGL */
+ /* guests. We can't represent non-multiple of */
+ /* stride offsets in D3D9Renderer... */
+ uint8 indexBufferStride; /* Allowable values = 1, 2, or 4 */
+
+ int32 baseVertexLocation; /* Bias applied to the index when selecting a */
+ /* vertex from the streams, may be negative */
+
+ uint32 primitiveCount; /* How many primitives to render */
+ uint32 pad0;
+ uint16 pad1;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDrawIndexed;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ /*
+ * Describe a vertex array's data type, and define how it is to be
+ * used by the fixed function pipeline or the vertex shader. It
+ * isn't useful to have two VertexDecls with the same
+ * VertexArrayIdentity in one draw call.
+ */
+ uint16 streamOffset;
+ uint8 stream;
+ uint8 type; /* SVGA3dDeclType */
+ uint8 method; /* SVGA3dDeclMethod */
+ uint8 usage; /* SVGA3dDeclUsage */
+ uint8 usageIndex;
+ uint8 padding;
+
+}
+#include "vmware_pack_end.h"
+SVGA3dVertexElement;
+
+/*
+ * Should the vertex element respect the stream value? The high bit of the
+ * stream should be set to indicate that the stream should be respected. If
+ * the high bit is not set, the stream will be ignored and replaced by the index
+ * of the position of the currently considered vertex element.
+ *
+ * All guests should set this bit and correctly specify the stream going
+ * forward.
+ */
+#define SVGA3D_VERTEX_ELEMENT_RESPECT_STREAM (1 << 7)
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+
+ uint32 numElements;
+
+ /*
+ * Followed by numElements SVGA3dVertexElement structures.
+ *
+ * If numElements < SVGA3D_MAX_VERTEX_ARRAYS, the remaining elements
+ * are cleared and will not be used by following draws.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetVertexDecls;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+ uint32 stride;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGA3dVertexStream;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+
+ uint32 numStreams;
+ /*
+ * Followed by numStream SVGA3dVertexStream structures.
+ *
+ * If numStreams < SVGA3D_MAX_VERTEX_ARRAYS, the remaining streams
+ * are cleared and will not be used by following draws.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetVertexStreams;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 numDivisors;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetVertexDivisors;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 stage;
+ SVGA3dTextureStateName name;
+ union {
+ uint32 value;
+ float floatValue;
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dTextureState;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ /* Followed by variable number of SVGA3dTextureState structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetTextureState; /* SVGA_3D_CMD_SETTEXTURESTATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dTransformType type;
+ float matrix[16];
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetTransform; /* SVGA_3D_CMD_SETTRANSFORM */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ float min;
+ float max;
+}
+#include "vmware_pack_end.h"
+SVGA3dZRange;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dZRange zRange;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetZRange; /* SVGA_3D_CMD_SETZRANGE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ float diffuse[4];
+ float ambient[4];
+ float specular[4];
+ float emissive[4];
+ float shininess;
+}
+#include "vmware_pack_end.h"
+SVGA3dMaterial;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dFace face;
+ SVGA3dMaterial material;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetMaterial; /* SVGA_3D_CMD_SETMATERIAL */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 index;
+ SVGA3dLightData data;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetLightData; /* SVGA_3D_CMD_SETLIGHTDATA */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 index;
+ uint32 enabled;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetLightEnabled; /* SVGA_3D_CMD_SETLIGHTENABLED */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dRect rect;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetViewport; /* SVGA_3D_CMD_SETVIEWPORT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dRect rect;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetScissorRect; /* SVGA_3D_CMD_SETSCISSORRECT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 index;
+ float plane[4];
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetClipPlane; /* SVGA_3D_CMD_SETCLIPPLANE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 shid;
+ SVGA3dShaderType type;
+ /* Followed by variable number of DWORDs for shader bycode */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineShader; /* SVGA_3D_CMD_SHADER_DEFINE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 shid;
+ SVGA3dShaderType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyShader; /* SVGA_3D_CMD_SHADER_DESTROY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 reg; /* register number */
+ SVGA3dShaderType type;
+ SVGA3dShaderConstType ctype;
+ uint32 values[4];
+
+ /*
+ * Followed by a variable number of additional values.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetShaderConst; /* SVGA_3D_CMD_SET_SHADER_CONST */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dShaderType type;
+ uint32 shid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetShader; /* SVGA_3D_CMD_SET_SHADER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dQueryType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBeginQuery; /* SVGA_3D_CMD_BEGIN_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dQueryType type;
+ SVGAGuestPtr guestResult; /* Points to an SVGA3dQueryResult structure */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdEndQuery; /* SVGA_3D_CMD_END_QUERY */
+
+
+/*
+ * SVGA3D_CMD_WAIT_FOR_QUERY --
+ *
+ * Will read the SVGA3dQueryResult structure pointed to by guestResult,
+ * and if the state member is set to anything else than
+ * SVGA3D_QUERYSTATE_PENDING, this command will always be a no-op.
+ *
+ * Otherwise, in addition to the query explicitly waited for,
+ * All queries with the same type and issued with the same cid, for which
+ * an SVGA_3D_CMD_END_QUERY command has previously been sent, will
+ * be finished after execution of this command.
+ *
+ * A query will be identified by the gmrId and offset of the guestResult
+ * member. If the device can't find an SVGA_3D_CMD_END_QUERY that has
+ * been sent previously with an indentical gmrId and offset, it will
+ * effectively end all queries with an identical type issued with the
+ * same cid, and the SVGA3dQueryResult structure pointed to by
+ * guestResult will not be written to. This property can be used to
+ * implement a query barrier for a given cid and query type.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid; /* Same parameters passed to END_QUERY */
+ SVGA3dQueryType type;
+ SVGAGuestPtr guestResult;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdWaitForQuery; /* SVGA_3D_CMD_WAIT_FOR_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 totalSize; /* Set by guest before query is ended. */
+ SVGA3dQueryState state; /* Set by host or guest. See SVGA3dQueryState. */
+ union { /* Set by host on exit from PENDING state */
+ uint32 result32;
+ uint32 queryCookie; /* May be used to identify which QueryGetData this
+ result corresponds to. */
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dQueryResult;
+
+
+/*
+ * SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN --
+ *
+ * This is a blit from an SVGA3D surface to a Screen Object.
+ * This blit must be directed at a specific screen.
+ *
+ * The blit copies from a rectangular region of an SVGA3D surface
+ * image to a rectangular region of a screen.
+ *
+ * This command takes an optional variable-length list of clipping
+ * rectangles after the body of the command. If no rectangles are
+ * specified, there is no clipping region. The entire destRect is
+ * drawn to. If one or more rectangles are included, they describe
+ * a clipping region. The clip rectangle coordinates are measured
+ * relative to the top-left corner of destRect.
+ *
+ * The srcImage must be from mip=0 face=0.
+ *
+ * This supports scaling if the src and dest are of different sizes.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceImageId srcImage;
+ SVGASignedRect srcRect;
+ uint32 destScreenId; /* Screen Object ID */
+ SVGASignedRect destRect;
+ /* Clipping: zero or more SVGASignedRects follow */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBlitSurfaceToScreen; /* SVGA_3D_CMD_BLIT_SURFACE_TO_SCREEN */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+ SVGA3dTextureFilter filter;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdGenerateMipmaps; /* SVGA_3D_CMD_GENERATE_MIPMAPS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdActivateSurface; /* SVGA_3D_CMD_ACTIVATE_SURFACE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDeactivateSurface; /* SVGA_3D_CMD_DEACTIVATE_SURFACE */
+
+/*
+ * Screen DMA command
+ *
+ * Available with SVGA_FIFO_CAP_SCREEN_OBJECT_2. The SVGA_CAP_3D device
+ * cap bit is not required.
+ *
+ * - refBuffer and destBuffer are 32bit BGRX; refBuffer and destBuffer could
+ * be different, but it is required that guest makes sure refBuffer has
+ * exactly the same contents that were written to when last time screen DMA
+ * command is received by host.
+ *
+ * - changemap is generated by lib/blit, and it has the changes from last
+ * received screen DMA or more.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdScreenDMA {
+ uint32 screenId;
+ SVGAGuestImage refBuffer;
+ SVGAGuestImage destBuffer;
+ SVGAGuestImage changeMap;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdScreenDMA; /* SVGA_3D_CMD_SCREEN_DMA */
+
+/*
+ * Logic ops
+ */
+
+#define SVGA3D_LOTRANSBLT_HONORALPHA (0x01)
+#define SVGA3D_LOSTRETCHBLT_MIRRORX (0x01)
+#define SVGA3D_LOSTRETCHBLT_MIRRORY (0x02)
+#define SVGA3D_LOALPHABLEND_SRCHASALPHA (0x01)
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdLogicOpsBitBlt {
+ /*
+ * All LogicOps surfaces are one-level
+ * surfaces so mipmap & face should always
+ * be zero.
+ */
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dst;
+ SVGA3dLogicOp logicOp;
+ SVGA3dLogicOpRop3 logicOpRop3;
+ /* Followed by variable number of SVGA3dCopyBox structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdLogicOpsBitBlt; /* SVGA_3D_CMD_LOGICOPS_BITBLT */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdLogicOpsTransBlt {
+ /*
+ * All LogicOps surfaces are one-level
+ * surfaces so mipmap & face should always
+ * be zero.
+ */
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dst;
+ uint32 color;
+ uint32 flags;
+ SVGA3dBox srcBox;
+ SVGA3dSignedBox dstBox;
+ SVGA3dBox clipBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdLogicOpsTransBlt; /* SVGA_3D_CMD_LOGICOPS_TRANSBLT */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdLogicOpsStretchBlt {
+ /*
+ * All LogicOps surfaces are one-level
+ * surfaces so mipmap & face should always
+ * be zero.
+ */
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dst;
+ uint16 mode;
+ uint16 flags;
+ SVGA3dBox srcBox;
+ SVGA3dSignedBox dstBox;
+ SVGA3dBox clipBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdLogicOpsStretchBlt; /* SVGA_3D_CMD_LOGICOPS_STRETCHBLT */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdLogicOpsColorFill {
+ /*
+ * All LogicOps surfaces are one-level
+ * surfaces so mipmap & face should always
+ * be zero.
+ */
+ SVGA3dSurfaceImageId dst;
+ uint32 color;
+ SVGA3dLogicOp logicOp;
+ SVGA3dLogicOpRop3 logicOpRop3;
+ /* Followed by variable number of SVGA3dRect structures. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdLogicOpsColorFill; /* SVGA_3D_CMD_LOGICOPS_COLORFILL */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdLogicOpsAlphaBlend {
+ /*
+ * All LogicOps surfaces are one-level
+ * surfaces so mipmap & face should always
+ * be zero.
+ */
+ SVGA3dSurfaceImageId src;
+ SVGA3dSurfaceImageId dst;
+ uint32 alphaVal;
+ uint32 flags;
+ SVGA3dBox srcBox;
+ SVGA3dSignedBox dstBox;
+ SVGA3dBox clipBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdLogicOpsAlphaBlend; /* SVGA_3D_CMD_LOGICOPS_ALPHABLEND */
+
+#define SVGA3D_CLEARTYPE_INVALID_GAMMA_INDEX 0xFFFFFFFF
+
+#define SVGA3D_CLEARTYPE_GAMMA_WIDTH 512
+#define SVGA3D_CLEARTYPE_GAMMA_HEIGHT 16
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdLogicOpsClearTypeBlend {
+ /*
+ * All LogicOps surfaces are one-level
+ * surfaces so mipmap & face should always
+ * be zero.
+ */
+ SVGA3dSurfaceImageId tmp;
+ SVGA3dSurfaceImageId dst;
+ SVGA3dSurfaceImageId gammaSurf;
+ SVGA3dSurfaceImageId alphaSurf;
+ uint32 gamma;
+ uint32 color;
+ uint32 color2;
+ int32 alphaOffsetX;
+ int32 alphaOffsetY;
+ /* Followed by variable number of SVGA3dBox structures */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdLogicOpsClearTypeBlend; /* SVGA_3D_CMD_LOGICOPS_CLEARTYPEBLEND */
+
+
+/*
+ * Guest-backed objects definitions.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAMobFormat ptDepth;
+ uint32 sizeInBytes;
+ PPN64 base;
+}
+#include "vmware_pack_end.h"
+SVGAOTableMobEntry;
+#define SVGA3D_OTABLE_MOB_ENTRY_SIZE (sizeof(SVGAOTableMobEntry))
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceFormat format;
+ SVGA3dSurface1Flags surface1Flags;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+ SVGAMobId mobid;
+ uint32 arraySize;
+ uint32 mobPitch;
+ SVGA3dSurface2Flags surface2Flags;
+ uint8 multisamplePattern;
+ uint8 qualityLevel;
+ uint16 bufferByteStride;
+ float minLOD;
+ uint32 pad0[2];
+}
+#include "vmware_pack_end.h"
+SVGAOTableSurfaceEntry;
+#define SVGA3D_OTABLE_SURFACE_ENTRY_SIZE (sizeof(SVGAOTableSurfaceEntry))
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGAOTableContextEntry;
+#define SVGA3D_OTABLE_CONTEXT_ENTRY_SIZE (sizeof(SVGAOTableContextEntry))
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dShaderType type;
+ uint32 sizeInBytes;
+ uint32 offsetInBytes;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGAOTableShaderEntry;
+#define SVGA3D_OTABLE_SHADER_ENTRY_SIZE (sizeof(SVGAOTableShaderEntry))
+
+#define SVGA_STFLAG_PRIMARY (1 << 0)
+#define SVGA_STFLAG_RESERVED (1 << 1) /* Added with cap SVGA_CAP_HP_CMD_QUEUE */
+typedef uint32 SVGAScreenTargetFlags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceImageId image;
+ uint32 width;
+ uint32 height;
+ int32 xRoot;
+ int32 yRoot;
+ SVGAScreenTargetFlags flags;
+ uint32 dpi;
+ uint32 pad[7];
+}
+#include "vmware_pack_end.h"
+SVGAOTableScreenTargetEntry;
+#define SVGA3D_OTABLE_SCREEN_TARGET_ENTRY_SIZE \
+ (sizeof(SVGAOTableScreenTargetEntry))
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ float value[4];
+}
+#include "vmware_pack_end.h"
+SVGA3dShaderConstFloat;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ int32 value[4];
+}
+#include "vmware_pack_end.h"
+SVGA3dShaderConstInt;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 value;
+}
+#include "vmware_pack_end.h"
+SVGA3dShaderConstBool;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint16 streamOffset;
+ uint8 stream;
+ uint8 type;
+ uint8 methodUsage;
+ uint8 usageIndex;
+}
+#include "vmware_pack_end.h"
+SVGAGBVertexElement;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+ uint16 stride;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGAGBVertexStream;
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dRect viewport;
+ SVGA3dRect scissorRect;
+ SVGA3dZRange zRange;
+
+ SVGA3dSurfaceImageId renderTargets[SVGA3D_RT_MAX];
+ SVGAGBVertexElement decl1[4];
+
+ uint32 renderStates[SVGA3D_RS_MAX];
+ SVGAGBVertexElement decl2[18];
+ uint32 pad0[2];
+
+ struct {
+ SVGA3dFace face;
+ SVGA3dMaterial material;
+ } material;
+
+ float clipPlanes[SVGA3D_NUM_CLIPPLANES][4];
+ float matrices[SVGA3D_TRANSFORM_MAX][16];
+
+ SVGA3dBool lightEnabled[SVGA3D_NUM_LIGHTS];
+ SVGA3dLightData lightData[SVGA3D_NUM_LIGHTS];
+
+ /*
+ * Shaders currently bound
+ */
+ uint32 shaders[SVGA3D_NUM_SHADERTYPE_PREDX];
+ SVGAGBVertexElement decl3[10];
+ uint32 pad1[3];
+
+ uint32 occQueryActive;
+ uint32 occQueryValue;
+
+ /*
+ * Int/Bool Shader constants
+ */
+ SVGA3dShaderConstInt pShaderIValues[SVGA3D_CONSTINTREG_MAX];
+ SVGA3dShaderConstInt vShaderIValues[SVGA3D_CONSTINTREG_MAX];
+ uint16 pShaderBValues;
+ uint16 vShaderBValues;
+
+
+ SVGAGBVertexStream streams[SVGA3D_MAX_VERTEX_ARRAYS];
+ SVGA3dVertexDivisor divisors[SVGA3D_MAX_VERTEX_ARRAYS];
+ uint32 numVertexDecls;
+ uint32 numVertexStreams;
+ uint32 numVertexDivisors;
+ uint32 pad2[30];
+
+ /*
+ * Texture Stages
+ *
+ * SVGA3D_TS_INVALID through SVGA3D_TS_CONSTANT are in the
+ * textureStages array.
+ * SVGA3D_TS_COLOR_KEY is in tsColorKey.
+ */
+ uint32 tsColorKey[SVGA3D_NUM_TEXTURE_UNITS];
+ uint32 textureStages[SVGA3D_NUM_TEXTURE_UNITS][SVGA3D_TS_CONSTANT + 1];
+ uint32 tsColorKeyEnable[SVGA3D_NUM_TEXTURE_UNITS];
+
+ /*
+ * Float Shader constants.
+ */
+ SVGA3dShaderConstFloat pShaderFValues[SVGA3D_CONSTREG_MAX];
+ SVGA3dShaderConstFloat vShaderFValues[SVGA3D_CONSTREG_MAX];
+}
+#include "vmware_pack_end.h"
+SVGAGBContextData;
+#define SVGA3D_CONTEXT_DATA_SIZE (sizeof(SVGAGBContextData))
+
+/*
+ * SVGA3dCmdSetOTableBase --
+ *
+ * This command allows the guest to specify the base PPN of the
+ * specified object table.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAOTableType type;
+ PPN32 baseAddress;
+ uint32 sizeInBytes;
+ uint32 validSizeInBytes;
+ SVGAMobFormat ptDepth;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetOTableBase; /* SVGA_3D_CMD_SET_OTABLE_BASE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAOTableType type;
+ PPN64 baseAddress;
+ uint32 sizeInBytes;
+ uint32 validSizeInBytes;
+ SVGAMobFormat ptDepth;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetOTableBase64; /* SVGA_3D_CMD_SET_OTABLE_BASE64 */
+
+/*
+ * Guests using SVGA_3D_CMD_GROW_OTABLE are promising that
+ * the new OTable contains the same contents as the old one, except possibly
+ * for some new invalid entries at the end.
+ *
+ * (Otherwise, guests should use one of the SetOTableBase commands.)
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAOTableType type;
+ PPN64 baseAddress;
+ uint32 sizeInBytes;
+ uint32 validSizeInBytes;
+ SVGAMobFormat ptDepth;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdGrowOTable; /* SVGA_3D_CMD_GROW_OTABLE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAOTableType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdReadbackOTable; /* SVGA_3D_CMD_READBACK_OTABLE */
+
+/*
+ * Define a memory object (Mob) in the OTable.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBMob {
+ SVGAMobId mobid;
+ SVGAMobFormat ptDepth;
+ PPN32 base;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBMob; /* SVGA_3D_CMD_DEFINE_GB_MOB */
+
+
+/*
+ * Destroys an object in the OTable.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDestroyGBMob {
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyGBMob; /* SVGA_3D_CMD_DESTROY_GB_MOB */
+
+/*
+ * Define a memory object (Mob) in the OTable with a PPN64 base.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBMob64 {
+ SVGAMobId mobid;
+ SVGAMobFormat ptDepth;
+ PPN64 base;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBMob64; /* SVGA_3D_CMD_DEFINE_GB_MOB64 */
+
+/*
+ * Redefine an object in the OTable with PPN64 base.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdRedefineGBMob64 {
+ SVGAMobId mobid;
+ SVGAMobFormat ptDepth;
+ PPN64 base;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdRedefineGBMob64; /* SVGA_3D_CMD_REDEFINE_GB_MOB64 */
+
+/*
+ * Notification that the page tables have been modified.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdUpdateGBMobMapping {
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdUpdateGBMobMapping; /* SVGA_3D_CMD_UPDATE_GB_MOB_MAPPING */
+
+/*
+ * Define a guest-backed surface.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBSurface {
+ uint32 sid;
+ SVGA3dSurface1Flags surfaceFlags;
+ SVGA3dSurfaceFormat format;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBSurface; /* SVGA_3D_CMD_DEFINE_GB_SURFACE */
+
+/*
+ * Defines a guest-backed surface, adding the arraySize field.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBSurface_v2 {
+ uint32 sid;
+ SVGA3dSurface1Flags surfaceFlags;
+ SVGA3dSurfaceFormat format;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+ uint32 arraySize;
+ uint32 pad;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBSurface_v2; /* SVGA_3D_CMD_DEFINE_GB_SURFACE_V2 */
+
+/*
+ * Defines a guest-backed surface, adding the larger flags.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBSurface_v3 {
+ uint32 sid;
+ SVGA3dSurfaceAllFlags surfaceFlags;
+ SVGA3dSurfaceFormat format;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dMSPattern multisamplePattern;
+ SVGA3dMSQualityLevel qualityLevel;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+ uint32 arraySize;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBSurface_v3; /* SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 */
+
+/*
+ * Defines a guest-backed surface, adding buffer byte stride.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBSurface_v4 {
+ uint32 sid;
+ SVGA3dSurfaceAllFlags surfaceFlags;
+ SVGA3dSurfaceFormat format;
+ uint32 numMipLevels;
+ uint32 multisampleCount;
+ SVGA3dMSPattern multisamplePattern;
+ SVGA3dMSQualityLevel qualityLevel;
+ SVGA3dTextureFilter autogenFilter;
+ SVGA3dSize size;
+ uint32 arraySize;
+ uint32 bufferByteStride;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBSurface_v4; /* SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 */
+
+/*
+ * Destroy a guest-backed surface.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDestroyGBSurface {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyGBSurface; /* SVGA_3D_CMD_DESTROY_GB_SURFACE */
+
+/*
+ * Bind a guest-backed surface to a mob.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdBindGBSurface {
+ uint32 sid;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBindGBSurface; /* SVGA_3D_CMD_BIND_GB_SURFACE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdBindGBSurfaceWithPitch {
+ uint32 sid;
+ SVGAMobId mobid;
+ uint32 baseLevelPitch;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBindGBSurfaceWithPitch; /* SVGA_3D_CMD_BIND_GB_SURFACE_WITH_PITCH */
+
+/*
+ * Conditionally bind a mob to a guest-backed surface if testMobid
+ * matches the currently bound mob. Optionally issue a
+ * readback/update on the surface while it is still bound to the old
+ * mobid if the mobid is changed by this command.
+ */
+
+#define SVGA3D_COND_BIND_GB_SURFACE_FLAG_READBACK (1 << 0)
+#define SVGA3D_COND_BIND_GB_SURFACE_FLAG_UPDATE (1 << 1)
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdCondBindGBSurface {
+ uint32 sid;
+ SVGAMobId testMobid;
+ SVGAMobId mobid;
+ uint32 flags;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdCondBindGBSurface; /* SVGA_3D_CMD_COND_BIND_GB_SURFACE */
+
+/*
+ * Update an image in a guest-backed surface.
+ * (Inform the device that the guest-contents have been updated.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdUpdateGBImage {
+ SVGA3dSurfaceImageId image;
+ SVGA3dBox box;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdUpdateGBImage; /* SVGA_3D_CMD_UPDATE_GB_IMAGE */
+
+/*
+ * Update an entire guest-backed surface.
+ * (Inform the device that the guest-contents have been updated.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdUpdateGBSurface {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdUpdateGBSurface; /* SVGA_3D_CMD_UPDATE_GB_SURFACE */
+
+/*
+ * Readback an image in a guest-backed surface.
+ * (Request the device to flush the dirty contents into the guest.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdReadbackGBImage {
+ SVGA3dSurfaceImageId image;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdReadbackGBImage; /* SVGA_3D_CMD_READBACK_GB_IMAGE */
+
+/*
+ * Readback an entire guest-backed surface.
+ * (Request the device to flush the dirty contents into the guest.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdReadbackGBSurface {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdReadbackGBSurface; /* SVGA_3D_CMD_READBACK_GB_SURFACE */
+
+/*
+ * Readback a sub rect of an image in a guest-backed surface. After
+ * issuing this command the driver is required to issue an update call
+ * of the same region before issuing any other commands that reference
+ * this surface or rendering is not guaranteed.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdReadbackGBImagePartial {
+ SVGA3dSurfaceImageId image;
+ SVGA3dBox box;
+ uint32 invertBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdReadbackGBImagePartial; /* SVGA_3D_CMD_READBACK_GB_IMAGE_PARTIAL */
+
+
+/*
+ * Invalidate an image in a guest-backed surface.
+ * (Notify the device that the contents can be lost.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdInvalidateGBImage {
+ SVGA3dSurfaceImageId image;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdInvalidateGBImage; /* SVGA_3D_CMD_INVALIDATE_GB_IMAGE */
+
+/*
+ * Invalidate an entire guest-backed surface.
+ * (Notify the device that the contents if all images can be lost.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdInvalidateGBSurface {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdInvalidateGBSurface; /* SVGA_3D_CMD_INVALIDATE_GB_SURFACE */
+
+/*
+ * Invalidate a sub rect of an image in a guest-backed surface. After
+ * issuing this command the driver is required to issue an update call
+ * of the same region before issuing any other commands that reference
+ * this surface or rendering is not guaranteed.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdInvalidateGBImagePartial {
+ SVGA3dSurfaceImageId image;
+ SVGA3dBox box;
+ uint32 invertBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdInvalidateGBImagePartial; /* SVGA_3D_CMD_INVALIDATE_GB_IMAGE_PARTIAL */
+
+
+/*
+ * Define a guest-backed context.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBContext; /* SVGA_3D_CMD_DEFINE_GB_CONTEXT */
+
+/*
+ * Destroy a guest-backed context.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDestroyGBContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyGBContext; /* SVGA_3D_CMD_DESTROY_GB_CONTEXT */
+
+/*
+ * Bind a guest-backed context.
+ *
+ * validContents should be set to 0 for new contexts,
+ * and 1 if this is an old context which is getting paged
+ * back on to the device.
+ *
+ * For new contexts, it is recommended that the driver
+ * issue commands to initialize all interesting state
+ * prior to rendering.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdBindGBContext {
+ uint32 cid;
+ SVGAMobId mobid;
+ uint32 validContents;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBindGBContext; /* SVGA_3D_CMD_BIND_GB_CONTEXT */
+
+/*
+ * Readback a guest-backed context.
+ * (Request that the device flush the contents back into guest memory.)
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdReadbackGBContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdReadbackGBContext; /* SVGA_3D_CMD_READBACK_GB_CONTEXT */
+
+/*
+ * Invalidate a guest-backed context.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdInvalidateGBContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdInvalidateGBContext; /* SVGA_3D_CMD_INVALIDATE_GB_CONTEXT */
+
+/*
+ * Define a guest-backed shader.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDefineGBShader {
+ uint32 shid;
+ SVGA3dShaderType type;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBShader; /* SVGA_3D_CMD_DEFINE_GB_SHADER */
+
+/*
+ * Bind a guest-backed shader.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdBindGBShader {
+ uint32 shid;
+ SVGAMobId mobid;
+ uint32 offsetInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBindGBShader; /* SVGA_3D_CMD_BIND_GB_SHADER */
+
+/*
+ * Destroy a guest-backed shader.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDestroyGBShader {
+ uint32 shid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyGBShader; /* SVGA_3D_CMD_DESTROY_GB_SHADER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ uint32 regStart;
+ SVGA3dShaderType shaderType;
+ SVGA3dShaderConstType constType;
+
+ /*
+ * Followed by a variable number of shader constants.
+ *
+ * Note that FLOAT and INT constants are 4-dwords in length, while
+ * BOOL constants are 1-dword in length.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdSetGBShaderConstInline; /* SVGA_3D_CMD_SET_GB_SHADERCONSTS_INLINE */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dQueryType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBeginGBQuery; /* SVGA_3D_CMD_BEGIN_GB_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dQueryType type;
+ SVGAMobId mobid;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdEndGBQuery; /* SVGA_3D_CMD_END_GB_QUERY */
+
+
+/*
+ * SVGA_3D_CMD_WAIT_FOR_GB_QUERY --
+ *
+ * The semantics of this command are identical to the
+ * SVGA_3D_CMD_WAIT_FOR_QUERY except that the results are written
+ * to a Mob instead of a GMR.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGA3dQueryType type;
+ SVGAMobId mobid;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdWaitForGBQuery; /* SVGA_3D_CMD_WAIT_FOR_GB_QUERY */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAMobId mobid;
+ uint32 mustBeZero;
+ uint32 initialized;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdEnableGart; /* SVGA_3D_CMD_ENABLE_GART */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAMobId mobid;
+ uint32 gartOffset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdMapMobIntoGart; /* SVGA_3D_CMD_MAP_MOB_INTO_GART */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 gartOffset;
+ uint32 numPages;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdUnmapGartRange; /* SVGA_3D_CMD_UNMAP_GART_RANGE */
+
+
+/*
+ * Screen Targets
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 stid;
+ uint32 width;
+ uint32 height;
+ int32 xRoot;
+ int32 yRoot;
+ SVGAScreenTargetFlags flags;
+
+ /*
+ * The physical DPI that the guest expects this screen displayed at.
+ *
+ * Guests which are not DPI-aware should set this to zero.
+ */
+ uint32 dpi;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDefineGBScreenTarget; /* SVGA_3D_CMD_DEFINE_GB_SCREENTARGET */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 stid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDestroyGBScreenTarget; /* SVGA_3D_CMD_DESTROY_GB_SCREENTARGET */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 stid;
+ SVGA3dSurfaceImageId image;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdBindGBScreenTarget; /* SVGA_3D_CMD_BIND_GB_SCREENTARGET */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 stid;
+ SVGA3dRect rect;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdUpdateGBScreenTarget; /* SVGA_3D_CMD_UPDATE_GB_SCREENTARGET */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdGBScreenDMA {
+ uint32 screenId;
+ uint32 dead;
+ SVGAMobId destMobID;
+ uint32 destPitch;
+ SVGAMobId changeMapMobID;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdGBScreenDMA; /* SVGA_3D_CMD_GB_SCREEN_DMA */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 value;
+ uint32 mobId;
+ uint32 mobOffset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdGBMobFence; /* SVGA_3D_CMD_GB_MOB_FENCE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 stid;
+ SVGA3dSurfaceImageId dest;
+
+ uint32 statusMobId;
+ uint32 statusMobOffset;
+
+ /* Reserved fields */
+ uint32 mustBeInvalidId;
+ uint32 mustBeZero;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdScreenCopy; /* SVGA_3D_CMD_SCREEN_COPY */
+
+#define SVGA_SCREEN_COPY_STATUS_FAILURE 0x00
+#define SVGA_SCREEN_COPY_STATUS_SUCCESS 0x01
+#define SVGA_SCREEN_COPY_STATUS_INVALID 0xFFFFFFFF
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdWriteZeroSurface; /* SVGA_3D_CMD_WRITE_ZERO_SURFACE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 sid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdHintZeroSurface; /* SVGA_3D_CMD_HINT_ZERO_SURFACE */
+
+#endif /* _SVGA3D_CMD_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_devcaps.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_devcaps.h
new file mode 100644
index 00000000..617b468c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_devcaps.h
@@ -0,0 +1,510 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 1998-2019 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_devcaps.h --
+ *
+ * SVGA 3d caps definitions
+ */
+
+#ifndef _SVGA3D_DEVCAPS_H_
+#define _SVGA3D_DEVCAPS_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_VMCORE
+
+#include "includeCheck.h"
+
+#include "svga3d_types.h"
+
+/*
+ * 3D Hardware Version
+ *
+ * The hardware version is stored in the SVGA_FIFO_3D_HWVERSION fifo
+ * register. Is set by the host and read by the guest. This lets
+ * us make new guest drivers which are backwards-compatible with old
+ * SVGA hardware revisions. It does not let us support old guest
+ * drivers. Good enough for now.
+ *
+ */
+
+#define SVGA3D_MAKE_HWVERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
+#define SVGA3D_MAJOR_HWVERSION(version) ((version) >> 16)
+#define SVGA3D_MINOR_HWVERSION(version) ((version) & 0xFF)
+
+typedef enum {
+ SVGA3D_HWVERSION_WS5_RC1 = SVGA3D_MAKE_HWVERSION(0, 1),
+ SVGA3D_HWVERSION_WS5_RC2 = SVGA3D_MAKE_HWVERSION(0, 2),
+ SVGA3D_HWVERSION_WS51_RC1 = SVGA3D_MAKE_HWVERSION(0, 3),
+ SVGA3D_HWVERSION_WS6_B1 = SVGA3D_MAKE_HWVERSION(1, 1),
+ SVGA3D_HWVERSION_FUSION_11 = SVGA3D_MAKE_HWVERSION(1, 4),
+ SVGA3D_HWVERSION_WS65_B1 = SVGA3D_MAKE_HWVERSION(2, 0),
+ SVGA3D_HWVERSION_WS8_B1 = SVGA3D_MAKE_HWVERSION(2, 1),
+ SVGA3D_HWVERSION_CURRENT = SVGA3D_HWVERSION_WS8_B1,
+} SVGA3dHardwareVersion;
+
+/*
+ * DevCap indexes.
+ */
+
+typedef uint32 SVGA3dDevCapIndex;
+
+#define SVGA3D_DEVCAP_INVALID ((uint32)-1)
+#define SVGA3D_DEVCAP_3D 0
+#define SVGA3D_DEVCAP_MAX_LIGHTS 1
+
+/*
+ * SVGA3D_DEVCAP_MAX_TEXTURES reflects the maximum number of
+ * fixed-function texture units available. Each of these units
+ * work in both FFP and Shader modes, and they support texture
+ * transforms and texture coordinates. The host may have additional
+ * texture image units that are only usable with shaders.
+ */
+#define SVGA3D_DEVCAP_MAX_TEXTURES 2
+#define SVGA3D_DEVCAP_MAX_CLIP_PLANES 3
+#define SVGA3D_DEVCAP_VERTEX_SHADER_VERSION 4
+#define SVGA3D_DEVCAP_VERTEX_SHADER 5
+#define SVGA3D_DEVCAP_FRAGMENT_SHADER_VERSION 6
+#define SVGA3D_DEVCAP_FRAGMENT_SHADER 7
+#define SVGA3D_DEVCAP_MAX_RENDER_TARGETS 8
+#define SVGA3D_DEVCAP_S23E8_TEXTURES 9
+#define SVGA3D_DEVCAP_S10E5_TEXTURES 10
+#define SVGA3D_DEVCAP_MAX_FIXED_VERTEXBLEND 11
+#define SVGA3D_DEVCAP_D16_BUFFER_FORMAT 12
+#define SVGA3D_DEVCAP_D24S8_BUFFER_FORMAT 13
+#define SVGA3D_DEVCAP_D24X8_BUFFER_FORMAT 14
+#define SVGA3D_DEVCAP_QUERY_TYPES 15
+#define SVGA3D_DEVCAP_TEXTURE_GRADIENT_SAMPLING 16
+#define SVGA3D_DEVCAP_MAX_POINT_SIZE 17
+#define SVGA3D_DEVCAP_MAX_SHADER_TEXTURES 18
+#define SVGA3D_DEVCAP_MAX_TEXTURE_WIDTH 19
+#define SVGA3D_DEVCAP_MAX_TEXTURE_HEIGHT 20
+#define SVGA3D_DEVCAP_MAX_VOLUME_EXTENT 21
+#define SVGA3D_DEVCAP_MAX_TEXTURE_REPEAT 22
+#define SVGA3D_DEVCAP_MAX_TEXTURE_ASPECT_RATIO 23
+#define SVGA3D_DEVCAP_MAX_TEXTURE_ANISOTROPY 24
+#define SVGA3D_DEVCAP_MAX_PRIMITIVE_COUNT 25
+#define SVGA3D_DEVCAP_MAX_VERTEX_INDEX 26
+#define SVGA3D_DEVCAP_MAX_VERTEX_SHADER_INSTRUCTIONS 27
+#define SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_INSTRUCTIONS 28
+#define SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS 29
+#define SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS 30
+#define SVGA3D_DEVCAP_TEXTURE_OPS 31
+#define SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 32
+#define SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 33
+#define SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 34
+#define SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 35
+#define SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 36
+#define SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 37
+#define SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 38
+#define SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16 39
+#define SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8 40
+#define SVGA3D_DEVCAP_SURFACEFMT_ALPHA8 41
+#define SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8 42
+#define SVGA3D_DEVCAP_SURFACEFMT_Z_D16 43
+#define SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8 44
+#define SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8 45
+#define SVGA3D_DEVCAP_SURFACEFMT_DXT1 46
+#define SVGA3D_DEVCAP_SURFACEFMT_DXT2 47
+#define SVGA3D_DEVCAP_SURFACEFMT_DXT3 48
+#define SVGA3D_DEVCAP_SURFACEFMT_DXT4 49
+#define SVGA3D_DEVCAP_SURFACEFMT_DXT5 50
+#define SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8 51
+#define SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10 52
+#define SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8 53
+#define SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8 54
+#define SVGA3D_DEVCAP_SURFACEFMT_CxV8U8 55
+#define SVGA3D_DEVCAP_SURFACEFMT_R_S10E5 56
+#define SVGA3D_DEVCAP_SURFACEFMT_R_S23E8 57
+#define SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5 58
+#define SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8 59
+#define SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5 60
+#define SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8 61
+
+/*
+ * There is a hole in our devcap definitions for
+ * historical reasons.
+ *
+ * Define a constant just for completeness.
+ */
+#define SVGA3D_DEVCAP_MISSING62 62
+
+#define SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEXTURES 63
+
+/*
+ * Note that MAX_SIMULTANEOUS_RENDER_TARGETS is a maximum count of color
+ * render targets. This does not include the depth or stencil targets.
+ */
+#define SVGA3D_DEVCAP_MAX_SIMULTANEOUS_RENDER_TARGETS 64
+
+#define SVGA3D_DEVCAP_SURFACEFMT_V16U16 65
+#define SVGA3D_DEVCAP_SURFACEFMT_G16R16 66
+#define SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16 67
+#define SVGA3D_DEVCAP_SURFACEFMT_UYVY 68
+#define SVGA3D_DEVCAP_SURFACEFMT_YUY2 69
+
+/*
+ * Deprecated.
+ */
+#define SVGA3D_DEVCAP_DEAD4 70
+#define SVGA3D_DEVCAP_DEAD5 71
+#define SVGA3D_DEVCAP_DEAD7 72
+#define SVGA3D_DEVCAP_DEAD6 73
+
+#define SVGA3D_DEVCAP_AUTOGENMIPMAPS 74
+#define SVGA3D_DEVCAP_SURFACEFMT_NV12 75
+#define SVGA3D_DEVCAP_DEAD10 76
+
+/*
+ * This is the maximum number of SVGA context IDs that the guest
+ * can define using SVGA_3D_CMD_CONTEXT_DEFINE.
+ */
+#define SVGA3D_DEVCAP_MAX_CONTEXT_IDS 77
+
+/*
+ * This is the maximum number of SVGA surface IDs that the guest
+ * can define using SVGA_3D_CMD_SURFACE_DEFINE*.
+ */
+#define SVGA3D_DEVCAP_MAX_SURFACE_IDS 78
+
+#define SVGA3D_DEVCAP_SURFACEFMT_Z_DF16 79
+#define SVGA3D_DEVCAP_SURFACEFMT_Z_DF24 80
+#define SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT 81
+
+#define SVGA3D_DEVCAP_SURFACEFMT_ATI1 82
+#define SVGA3D_DEVCAP_SURFACEFMT_ATI2 83
+
+/*
+ * Deprecated.
+ */
+#define SVGA3D_DEVCAP_DEAD1 84
+#define SVGA3D_DEVCAP_DEAD8 85
+#define SVGA3D_DEVCAP_DEAD9 86
+
+#define SVGA3D_DEVCAP_LINE_AA 87 /* boolean */
+#define SVGA3D_DEVCAP_LINE_STIPPLE 88 /* boolean */
+#define SVGA3D_DEVCAP_MAX_LINE_WIDTH 89 /* float */
+#define SVGA3D_DEVCAP_MAX_AA_LINE_WIDTH 90 /* float */
+
+#define SVGA3D_DEVCAP_SURFACEFMT_YV12 91
+
+/*
+ * Deprecated.
+ */
+#define SVGA3D_DEVCAP_DEAD3 92
+
+/*
+ * Are TS_CONSTANT, TS_COLOR_KEY, and TS_COLOR_KEY_ENABLE supported?
+ */
+#define SVGA3D_DEVCAP_TS_COLOR_KEY 93 /* boolean */
+
+/*
+ * Deprecated.
+ */
+#define SVGA3D_DEVCAP_DEAD2 94
+
+/*
+ * Does the device support DXContexts?
+ */
+#define SVGA3D_DEVCAP_DXCONTEXT 95
+
+/*
+ * Deprecated.
+ */
+#define SVGA3D_DEVCAP_DEAD11 96
+
+/*
+ * What is the maximum number of vertex buffers or vertex input registers
+ * that can be expected to work correctly with a DXContext?
+ *
+ * The guest is allowed to set up to SVGA3D_DX_MAX_VERTEXBUFFERS, but
+ * anything in excess of this cap is not guaranteed to render correctly.
+ *
+ * Similarly, the guest can set up to SVGA3D_DX_MAX_VERTEXINPUTREGISTERS
+ * input registers without the SVGA3D_DEVCAP_SM4_1 cap, or
+ * SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS with the SVGA3D_DEVCAP_SM4_1,
+ * but only the registers up to this cap value are guaranteed to render
+ * correctly.
+ *
+ * If guest-drivers are able to expose a lower-limit, it's recommended
+ * that they clamp to this value. Otherwise, the host will make a
+ * best-effort on case-by-case basis if guests exceed this.
+ */
+#define SVGA3D_DEVCAP_DX_MAX_VERTEXBUFFERS 97
+
+/*
+ * What is the maximum number of constant buffers that can be expected to
+ * work correctly with a DX context?
+ *
+ * The guest is allowed to set up to SVGA3D_DX_MAX_CONSTBUFFERS, but
+ * anything in excess of this cap is not guaranteed to render correctly.
+ *
+ * If guest-drivers are able to expose a lower-limit, it's recommended
+ * that they clamp to this value. Otherwise, the host will make a
+ * best-effort on case-by-case basis if guests exceed this.
+ */
+#define SVGA3D_DEVCAP_DX_MAX_CONSTANT_BUFFERS 98
+
+/*
+ * Does the device support provoking vertex control?
+ *
+ * If this cap is present, the provokingVertexLast field in the
+ * rasterizer state is enabled. (Guests can then set it to FALSE,
+ * meaning that the first vertex is the provoking vertex, or TRUE,
+ * meaning that the last verteix is the provoking vertex.)
+ *
+ * If this cap is FALSE, then guests should set the provokingVertexLast
+ * to FALSE, otherwise rendering behavior is undefined.
+ */
+#define SVGA3D_DEVCAP_DX_PROVOKING_VERTEX 99
+
+#define SVGA3D_DEVCAP_DXFMT_X8R8G8B8 100
+#define SVGA3D_DEVCAP_DXFMT_A8R8G8B8 101
+#define SVGA3D_DEVCAP_DXFMT_R5G6B5 102
+#define SVGA3D_DEVCAP_DXFMT_X1R5G5B5 103
+#define SVGA3D_DEVCAP_DXFMT_A1R5G5B5 104
+#define SVGA3D_DEVCAP_DXFMT_A4R4G4B4 105
+#define SVGA3D_DEVCAP_DXFMT_Z_D32 106
+#define SVGA3D_DEVCAP_DXFMT_Z_D16 107
+#define SVGA3D_DEVCAP_DXFMT_Z_D24S8 108
+#define SVGA3D_DEVCAP_DXFMT_Z_D15S1 109
+#define SVGA3D_DEVCAP_DXFMT_LUMINANCE8 110
+#define SVGA3D_DEVCAP_DXFMT_LUMINANCE4_ALPHA4 111
+#define SVGA3D_DEVCAP_DXFMT_LUMINANCE16 112
+#define SVGA3D_DEVCAP_DXFMT_LUMINANCE8_ALPHA8 113
+#define SVGA3D_DEVCAP_DXFMT_DXT1 114
+#define SVGA3D_DEVCAP_DXFMT_DXT2 115
+#define SVGA3D_DEVCAP_DXFMT_DXT3 116
+#define SVGA3D_DEVCAP_DXFMT_DXT4 117
+#define SVGA3D_DEVCAP_DXFMT_DXT5 118
+#define SVGA3D_DEVCAP_DXFMT_BUMPU8V8 119
+#define SVGA3D_DEVCAP_DXFMT_BUMPL6V5U5 120
+#define SVGA3D_DEVCAP_DXFMT_BUMPX8L8V8U8 121
+#define SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD1 122
+#define SVGA3D_DEVCAP_DXFMT_ARGB_S10E5 123
+#define SVGA3D_DEVCAP_DXFMT_ARGB_S23E8 124
+#define SVGA3D_DEVCAP_DXFMT_A2R10G10B10 125
+#define SVGA3D_DEVCAP_DXFMT_V8U8 126
+#define SVGA3D_DEVCAP_DXFMT_Q8W8V8U8 127
+#define SVGA3D_DEVCAP_DXFMT_CxV8U8 128
+#define SVGA3D_DEVCAP_DXFMT_X8L8V8U8 129
+#define SVGA3D_DEVCAP_DXFMT_A2W10V10U10 130
+#define SVGA3D_DEVCAP_DXFMT_ALPHA8 131
+#define SVGA3D_DEVCAP_DXFMT_R_S10E5 132
+#define SVGA3D_DEVCAP_DXFMT_R_S23E8 133
+#define SVGA3D_DEVCAP_DXFMT_RG_S10E5 134
+#define SVGA3D_DEVCAP_DXFMT_RG_S23E8 135
+#define SVGA3D_DEVCAP_DXFMT_BUFFER 136
+#define SVGA3D_DEVCAP_DXFMT_Z_D24X8 137
+#define SVGA3D_DEVCAP_DXFMT_V16U16 138
+#define SVGA3D_DEVCAP_DXFMT_G16R16 139
+#define SVGA3D_DEVCAP_DXFMT_A16B16G16R16 140
+#define SVGA3D_DEVCAP_DXFMT_UYVY 141
+#define SVGA3D_DEVCAP_DXFMT_YUY2 142
+#define SVGA3D_DEVCAP_DXFMT_NV12 143
+#define SVGA3D_DEVCAP_DXFMT_FORMAT_DEAD2 144
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS 145
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT 146
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT 147
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS 148
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT 149
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT 150
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT 151
+#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS 152
+#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT 153
+#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM 154
+#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT 155
+#define SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS 156
+#define SVGA3D_DEVCAP_DXFMT_R32G32_UINT 157
+#define SVGA3D_DEVCAP_DXFMT_R32G32_SINT 158
+#define SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS 159
+#define SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT 160
+#define SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24 161
+#define SVGA3D_DEVCAP_DXFMT_X32_G8X24_UINT 162
+#define SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS 163
+#define SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT 164
+#define SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT 165
+#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS 166
+#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM 167
+#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB 168
+#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT 169
+#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT 170
+#define SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS 171
+#define SVGA3D_DEVCAP_DXFMT_R16G16_UINT 172
+#define SVGA3D_DEVCAP_DXFMT_R16G16_SINT 173
+#define SVGA3D_DEVCAP_DXFMT_R32_TYPELESS 174
+#define SVGA3D_DEVCAP_DXFMT_D32_FLOAT 175
+#define SVGA3D_DEVCAP_DXFMT_R32_UINT 176
+#define SVGA3D_DEVCAP_DXFMT_R32_SINT 177
+#define SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS 178
+#define SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT 179
+#define SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8 180
+#define SVGA3D_DEVCAP_DXFMT_X24_G8_UINT 181
+#define SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS 182
+#define SVGA3D_DEVCAP_DXFMT_R8G8_UNORM 183
+#define SVGA3D_DEVCAP_DXFMT_R8G8_UINT 184
+#define SVGA3D_DEVCAP_DXFMT_R8G8_SINT 185
+#define SVGA3D_DEVCAP_DXFMT_R16_TYPELESS 186
+#define SVGA3D_DEVCAP_DXFMT_R16_UNORM 187
+#define SVGA3D_DEVCAP_DXFMT_R16_UINT 188
+#define SVGA3D_DEVCAP_DXFMT_R16_SNORM 189
+#define SVGA3D_DEVCAP_DXFMT_R16_SINT 190
+#define SVGA3D_DEVCAP_DXFMT_R8_TYPELESS 191
+#define SVGA3D_DEVCAP_DXFMT_R8_UNORM 192
+#define SVGA3D_DEVCAP_DXFMT_R8_UINT 193
+#define SVGA3D_DEVCAP_DXFMT_R8_SNORM 194
+#define SVGA3D_DEVCAP_DXFMT_R8_SINT 195
+#define SVGA3D_DEVCAP_DXFMT_P8 196
+#define SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP 197
+#define SVGA3D_DEVCAP_DXFMT_R8G8_B8G8_UNORM 198
+#define SVGA3D_DEVCAP_DXFMT_G8R8_G8B8_UNORM 199
+#define SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS 200
+#define SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB 201
+#define SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS 202
+#define SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB 203
+#define SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS 204
+#define SVGA3D_DEVCAP_DXFMT_BC3_UNORM_SRGB 205
+#define SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS 206
+#define SVGA3D_DEVCAP_DXFMT_ATI1 207
+#define SVGA3D_DEVCAP_DXFMT_BC4_SNORM 208
+#define SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS 209
+#define SVGA3D_DEVCAP_DXFMT_ATI2 210
+#define SVGA3D_DEVCAP_DXFMT_BC5_SNORM 211
+#define SVGA3D_DEVCAP_DXFMT_R10G10B10_XR_BIAS_A2_UNORM 212
+#define SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS 213
+#define SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB 214
+#define SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS 215
+#define SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB 216
+#define SVGA3D_DEVCAP_DXFMT_Z_DF16 217
+#define SVGA3D_DEVCAP_DXFMT_Z_DF24 218
+#define SVGA3D_DEVCAP_DXFMT_Z_D24S8_INT 219
+#define SVGA3D_DEVCAP_DXFMT_YV12 220
+#define SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT 221
+#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT 222
+#define SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM 223
+#define SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT 224
+#define SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM 225
+#define SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM 226
+#define SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT 227
+#define SVGA3D_DEVCAP_DXFMT_R16G16_UNORM 228
+#define SVGA3D_DEVCAP_DXFMT_R16G16_SNORM 229
+#define SVGA3D_DEVCAP_DXFMT_R32_FLOAT 230
+#define SVGA3D_DEVCAP_DXFMT_R8G8_SNORM 231
+#define SVGA3D_DEVCAP_DXFMT_R16_FLOAT 232
+#define SVGA3D_DEVCAP_DXFMT_D16_UNORM 233
+#define SVGA3D_DEVCAP_DXFMT_A8_UNORM 234
+#define SVGA3D_DEVCAP_DXFMT_BC1_UNORM 235
+#define SVGA3D_DEVCAP_DXFMT_BC2_UNORM 236
+#define SVGA3D_DEVCAP_DXFMT_BC3_UNORM 237
+#define SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM 238
+#define SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM 239
+#define SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM 240
+#define SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM 241
+#define SVGA3D_DEVCAP_DXFMT_BC4_UNORM 242
+#define SVGA3D_DEVCAP_DXFMT_BC5_UNORM 243
+
+/*
+ * Advertises shaderModel 4.1 support, independent blend-states,
+ * cube-map arrays, and a higher vertex input registers limit.
+ *
+ * (See documentation on SVGA3D_DEVCAP_DX_MAX_VERTEXBUFFERS.)
+ */
+#define SVGA3D_DEVCAP_SM41 244
+#define SVGA3D_DEVCAP_MULTISAMPLE_2X 245
+#define SVGA3D_DEVCAP_MULTISAMPLE_4X 246
+
+/*
+ * Indicates that the device has rendering support for
+ * the full multisample quality. If this cap is not present,
+ * the host may or may not support full quality rendering.
+ *
+ * See also SVGA_REG_MS_HINT_RESOLVED.
+ */
+#define SVGA3D_DEVCAP_MS_FULL_QUALITY 247
+
+/*
+ * Advertises support for the SVGA3D LogicOps commands.
+ */
+#define SVGA3D_DEVCAP_LOGICOPS 248
+
+/*
+ * Advertises support for using logicOps in the DXBlendStates.
+ */
+#define SVGA3D_DEVCAP_LOGIC_BLENDOPS 249
+
+/*
+* Note DXFMT range is now non-contiguous.
+*/
+#define SVGA3D_DEVCAP_RESERVED_1 250
+#define SVGA3D_DEVCAP_DXFMT_BC6H_TYPELESS 251
+#define SVGA3D_DEVCAP_DXFMT_BC6H_UF16 252
+#define SVGA3D_DEVCAP_DXFMT_BC6H_SF16 253
+#define SVGA3D_DEVCAP_DXFMT_BC7_TYPELESS 254
+#define SVGA3D_DEVCAP_DXFMT_BC7_UNORM 255
+#define SVGA3D_DEVCAP_DXFMT_BC7_UNORM_SRGB 256
+#define SVGA3D_DEVCAP_RESERVED_2 257
+
+#define SVGA3D_DEVCAP_SM5 258
+#define SVGA3D_DEVCAP_MULTISAMPLE_8X 259
+
+/* This must be the last index. */
+#define SVGA3D_DEVCAP_MAX 260
+
+/*
+ * Bit definitions for DXFMT devcaps
+ *
+ *
+ * SUPPORTED: Can the format be defined?
+ * SHADER_SAMPLE: Can the format be sampled from a shader?
+ * COLOR_RENDERTARGET: Can the format be a color render target?
+ * DEPTH_RENDERTARGET: Can the format be a depth render target?
+ * BLENDABLE: Is the format blendable?
+ * MIPS: Does the format support mip levels?
+ * ARRAY: Does the format support texture arrays?
+ * VOLUME: Does the format support having volume?
+ * MULTISAMPLE: Does the format support multisample?
+ */
+#define SVGA3D_DXFMT_SUPPORTED (1 << 0)
+#define SVGA3D_DXFMT_SHADER_SAMPLE (1 << 1)
+#define SVGA3D_DXFMT_COLOR_RENDERTARGET (1 << 2)
+#define SVGA3D_DXFMT_DEPTH_RENDERTARGET (1 << 3)
+#define SVGA3D_DXFMT_BLENDABLE (1 << 4)
+#define SVGA3D_DXFMT_MIPS (1 << 5)
+#define SVGA3D_DXFMT_ARRAY (1 << 6)
+#define SVGA3D_DXFMT_VOLUME (1 << 7)
+#define SVGA3D_DXFMT_DX_VERTEX_BUFFER (1 << 8)
+#define SVGA3D_DXFMT_MULTISAMPLE (1 << 9)
+#define SVGA3D_DXFMT_MAX (1 << 10)
+
+typedef union {
+ SVGA3dBool b;
+ uint32 u;
+ int32 i;
+ float f;
+} SVGA3dDevCapResult;
+
+#endif /* _SVGA3D_DEVCAPS_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_dx.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_dx.h
new file mode 100644
index 00000000..33e63d5d
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_dx.h
@@ -0,0 +1,2077 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2012-2019 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_dx.h --
+ *
+ * SVGA 3d hardware definitions for DX10 support.
+ */
+
+#ifndef _SVGA3D_DX_H_
+#define _SVGA3D_DX_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_VMCORE
+#include "includeCheck.h"
+
+#include "svga3d_limits.h"
+
+#define SVGA3D_INPUT_MIN 0
+#define SVGA3D_INPUT_PER_VERTEX_DATA 0
+#define SVGA3D_INPUT_PER_INSTANCE_DATA 1
+#define SVGA3D_INPUT_MAX 2
+typedef uint32 SVGA3dInputClassification;
+
+#define SVGA3D_RESOURCE_TYPE_MIN 1
+#define SVGA3D_RESOURCE_BUFFER 1
+#define SVGA3D_RESOURCE_TEXTURE1D 2
+#define SVGA3D_RESOURCE_TEXTURE2D 3
+#define SVGA3D_RESOURCE_TEXTURE3D 4
+#define SVGA3D_RESOURCE_TEXTURECUBE 5
+#define SVGA3D_RESOURCE_TYPE_DX10_MAX 6
+#define SVGA3D_RESOURCE_BUFFEREX 6
+#define SVGA3D_RESOURCE_TYPE_MAX 7
+typedef uint32 SVGA3dResourceType;
+
+#define SVGA3D_COLOR_WRITE_ENABLE_RED (1 << 0)
+#define SVGA3D_COLOR_WRITE_ENABLE_GREEN (1 << 1)
+#define SVGA3D_COLOR_WRITE_ENABLE_BLUE (1 << 2)
+#define SVGA3D_COLOR_WRITE_ENABLE_ALPHA (1 << 3)
+#define SVGA3D_COLOR_WRITE_ENABLE_ALL (SVGA3D_COLOR_WRITE_ENABLE_RED | \
+ SVGA3D_COLOR_WRITE_ENABLE_GREEN | \
+ SVGA3D_COLOR_WRITE_ENABLE_BLUE | \
+ SVGA3D_COLOR_WRITE_ENABLE_ALPHA)
+typedef uint8 SVGA3dColorWriteEnable;
+
+#define SVGA3D_DEPTH_WRITE_MASK_ZERO 0
+#define SVGA3D_DEPTH_WRITE_MASK_ALL 1
+typedef uint8 SVGA3dDepthWriteMask;
+
+#define SVGA3D_FILTER_MIP_LINEAR (1 << 0)
+#define SVGA3D_FILTER_MAG_LINEAR (1 << 2)
+#define SVGA3D_FILTER_MIN_LINEAR (1 << 4)
+#define SVGA3D_FILTER_ANISOTROPIC (1 << 6)
+#define SVGA3D_FILTER_COMPARE (1 << 7)
+typedef uint32 SVGA3dFilter;
+
+#define SVGA3D_CULL_INVALID 0
+#define SVGA3D_CULL_MIN 1
+#define SVGA3D_CULL_NONE 1
+#define SVGA3D_CULL_FRONT 2
+#define SVGA3D_CULL_BACK 3
+#define SVGA3D_CULL_MAX 4
+typedef uint8 SVGA3dCullMode;
+
+#define SVGA3D_COMPARISON_INVALID 0
+#define SVGA3D_COMPARISON_MIN 1
+#define SVGA3D_COMPARISON_NEVER 1
+#define SVGA3D_COMPARISON_LESS 2
+#define SVGA3D_COMPARISON_EQUAL 3
+#define SVGA3D_COMPARISON_LESS_EQUAL 4
+#define SVGA3D_COMPARISON_GREATER 5
+#define SVGA3D_COMPARISON_NOT_EQUAL 6
+#define SVGA3D_COMPARISON_GREATER_EQUAL 7
+#define SVGA3D_COMPARISON_ALWAYS 8
+#define SVGA3D_COMPARISON_MAX 9
+typedef uint8 SVGA3dComparisonFunc;
+
+/*
+ * SVGA3D_MULTISAMPLE_RAST_DISABLE disables MSAA for all primitives.
+ * SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE, which is supported in SM41,
+ * disables MSAA for lines only.
+ */
+#define SVGA3D_MULTISAMPLE_RAST_DISABLE 0
+#define SVGA3D_MULTISAMPLE_RAST_ENABLE 1
+#define SVGA3D_MULTISAMPLE_RAST_DX_MAX 1
+#define SVGA3D_MULTISAMPLE_RAST_DISABLE_LINE 2
+#define SVGA3D_MULTISAMPLE_RAST_MAX 2
+typedef uint8 SVGA3dMultisampleRastEnable;
+
+#define SVGA3D_DX_MAX_VERTEXBUFFERS 32
+#define SVGA3D_DX_MAX_VERTEXINPUTREGISTERS 16
+#define SVGA3D_DX_SM41_MAX_VERTEXINPUTREGISTERS 32
+#define SVGA3D_DX_MAX_SOTARGETS 4
+#define SVGA3D_DX_MAX_SRVIEWS 128
+#define SVGA3D_DX_MAX_CONSTBUFFERS 16
+#define SVGA3D_DX_MAX_SAMPLERS 16
+#define SVGA3D_DX_MAX_CLASS_INSTANCES 253
+
+#define SVGA3D_DX_MAX_CONSTBUF_BINDING_SIZE (4096 * 4 * (uint32)sizeof(uint32))
+
+typedef uint32 SVGA3dShaderResourceViewId;
+typedef uint32 SVGA3dRenderTargetViewId;
+typedef uint32 SVGA3dDepthStencilViewId;
+typedef uint32 SVGA3dUAViewId;
+
+typedef uint32 SVGA3dShaderId;
+typedef uint32 SVGA3dElementLayoutId;
+typedef uint32 SVGA3dSamplerId;
+typedef uint32 SVGA3dBlendStateId;
+typedef uint32 SVGA3dDepthStencilStateId;
+typedef uint32 SVGA3dRasterizerStateId;
+typedef uint32 SVGA3dQueryId;
+typedef uint32 SVGA3dStreamOutputId;
+
+typedef union {
+ struct {
+ float r;
+ float g;
+ float b;
+ float a;
+ };
+
+ float value[4];
+} SVGA3dRGBAFloat;
+
+typedef union {
+ struct {
+ uint32 r;
+ uint32 g;
+ uint32 b;
+ uint32 a;
+ };
+
+ uint32 value[4];
+} SVGA3dRGBAUint32;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 cid;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGAOTableDXContextEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineContext; /* SVGA_3D_CMD_DX_DEFINE_CONTEXT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyContext; /* SVGA_3D_CMD_DX_DESTROY_CONTEXT */
+
+/*
+ * Bind a DX context.
+ *
+ * validContents should be set to 0 for new contexts,
+ * and 1 if this is an old context which is getting paged
+ * back on to the device.
+ *
+ * For new contexts, it is recommended that the driver
+ * issue commands to initialize all interesting state
+ * prior to rendering.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindContext {
+ uint32 cid;
+ SVGAMobId mobid;
+ uint32 validContents;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindContext; /* SVGA_3D_CMD_DX_BIND_CONTEXT */
+
+/*
+ * Readback a DX context.
+ * (Request that the device flush the contents back into guest memory.)
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXReadbackContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXReadbackContext; /* SVGA_3D_CMD_DX_READBACK_CONTEXT */
+
+/*
+ * Invalidate a guest-backed context.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXInvalidateContext {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXInvalidateContext; /* SVGA_3D_CMD_DX_INVALIDATE_CONTEXT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetSingleConstantBuffer {
+ uint32 slot;
+ SVGA3dShaderType type;
+ SVGA3dSurfaceId sid;
+ uint32 offsetInBytes;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetSingleConstantBuffer;
+/* SVGA_3D_CMD_DX_SET_SINGLE_CONSTANT_BUFFER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetShaderResources {
+ uint32 startView;
+ SVGA3dShaderType type;
+
+ /*
+ * Followed by a variable number of SVGA3dShaderResourceViewId's.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetShaderResources; /* SVGA_3D_CMD_DX_SET_SHADER_RESOURCES */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetShader {
+ SVGA3dShaderId shaderId;
+ SVGA3dShaderType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetShader; /* SVGA_3D_CMD_DX_SET_SHADER */
+
+typedef union {
+ struct {
+ uint32 cbOffset : 12;
+ uint32 cbId : 4;
+ uint32 baseSamp : 4;
+ uint32 baseTex : 7;
+ uint32 reserved : 5;
+ };
+ uint32 value;
+} SVGA3dIfaceData;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetShaderIface {
+ SVGA3dShaderType type;
+ uint32 numClassInstances;
+ uint32 index;
+ uint32 iface;
+ SVGA3dIfaceData data;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetShaderIface; /* SVGA_3D_CMD_DX_SET_SHADER_IFACE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindShaderIface {
+ uint32 cid;
+ SVGAMobId mobid;
+ uint32 offsetInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindShaderIface; /* SVGA_3D_CMD_DX_BIND_SHADER_IFACE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetSamplers {
+ uint32 startSampler;
+ SVGA3dShaderType type;
+
+ /*
+ * Followed by a variable number of SVGA3dSamplerId's.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetSamplers; /* SVGA_3D_CMD_DX_SET_SAMPLERS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDraw {
+ uint32 vertexCount;
+ uint32 startVertexLocation;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDraw; /* SVGA_3D_CMD_DX_DRAW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDrawIndexed {
+ uint32 indexCount;
+ uint32 startIndexLocation;
+ int32 baseVertexLocation;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDrawIndexed; /* SVGA_3D_CMD_DX_DRAW_INDEXED */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDrawInstanced {
+ uint32 vertexCountPerInstance;
+ uint32 instanceCount;
+ uint32 startVertexLocation;
+ uint32 startInstanceLocation;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDrawInstanced; /* SVGA_3D_CMD_DX_DRAW_INSTANCED */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDrawIndexedInstanced {
+ uint32 indexCountPerInstance;
+ uint32 instanceCount;
+ uint32 startIndexLocation;
+ int32 baseVertexLocation;
+ uint32 startInstanceLocation;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDrawIndexedInstanced; /* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDrawIndexedInstancedIndirect {
+ SVGA3dSurfaceId argsBufferSid;
+ uint32 byteOffsetForArgs;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDrawIndexedInstancedIndirect;
+/* SVGA_3D_CMD_DX_DRAW_INDEXED_INSTANCED_INDIRECT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDrawInstancedIndirect {
+ SVGA3dSurfaceId argsBufferSid;
+ uint32 byteOffsetForArgs;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDrawInstancedIndirect;
+/* SVGA_3D_CMD_DX_DRAW_INSTANCED_INDIRECT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDrawAuto {
+ uint32 pad0;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDrawAuto; /* SVGA_3D_CMD_DX_DRAW_AUTO */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDispatch {
+ uint32 threadGroupCountX;
+ uint32 threadGroupCountY;
+ uint32 threadGroupCountZ;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDispatch;
+/* SVGA_3D_CMD_DX_DISPATCH */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDispatchIndirect {
+ SVGA3dSurfaceId argsBufferSid;
+ uint32 byteOffsetForArgs;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDispatchIndirect;
+/* SVGA_3D_CMD_DX_DISPATCH_INDIRECT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetInputLayout {
+ SVGA3dElementLayoutId elementLayoutId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetInputLayout; /* SVGA_3D_CMD_DX_SET_INPUT_LAYOUT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dVertexBuffer {
+ SVGA3dSurfaceId sid;
+ uint32 stride;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGA3dVertexBuffer;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetVertexBuffers {
+ uint32 startBuffer;
+ /* Followed by a variable number of SVGA3dVertexBuffer's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetVertexBuffers; /* SVGA_3D_CMD_DX_SET_VERTEX_BUFFERS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetIndexBuffer {
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetIndexBuffer; /* SVGA_3D_CMD_DX_SET_INDEX_BUFFER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetTopology {
+ SVGA3dPrimitiveType topology;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetTopology; /* SVGA_3D_CMD_DX_SET_TOPOLOGY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetRenderTargets {
+ SVGA3dDepthStencilViewId depthStencilViewId;
+ /* Followed by a variable number of SVGA3dRenderTargetViewId's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetRenderTargets; /* SVGA_3D_CMD_DX_SET_RENDERTARGETS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetBlendState {
+ SVGA3dBlendStateId blendId;
+ float blendFactor[4];
+ uint32 sampleMask;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetBlendState; /* SVGA_3D_CMD_DX_SET_BLEND_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetDepthStencilState {
+ SVGA3dDepthStencilStateId depthStencilId;
+ uint32 stencilRef;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetDepthStencilState; /* SVGA_3D_CMD_DX_SET_DEPTHSTENCIL_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetRasterizerState {
+ SVGA3dRasterizerStateId rasterizerId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetRasterizerState; /* SVGA_3D_CMD_DX_SET_RASTERIZER_STATE */
+
+#define SVGA3D_DXQUERY_FLAG_PREDICATEHINT (1 << 0)
+typedef uint32 SVGA3dDXQueryFlags;
+
+/*
+ * The SVGADXQueryDeviceState and SVGADXQueryDeviceBits are used by the device
+ * to track query state transitions, but are not intended to be used by the
+ * driver.
+ */
+#define SVGADX_QDSTATE_INVALID ((uint8)-1) /* Query has no state */
+#define SVGADX_QDSTATE_MIN 0
+#define SVGADX_QDSTATE_IDLE 0 /* Query hasn't started yet */
+#define SVGADX_QDSTATE_ACTIVE 1 /* Query is actively gathering data */
+#define SVGADX_QDSTATE_PENDING 2 /* Query is waiting for results */
+#define SVGADX_QDSTATE_FINISHED 3 /* Query has completed */
+#define SVGADX_QDSTATE_MAX 4
+typedef uint8 SVGADXQueryDeviceState;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dQueryTypeUint8 type;
+ uint16 pad0;
+ SVGADXQueryDeviceState state;
+ SVGA3dDXQueryFlags flags;
+ SVGAMobId mobid;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXQueryEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineQuery {
+ SVGA3dQueryId queryId;
+ SVGA3dQueryType type;
+ SVGA3dDXQueryFlags flags;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineQuery; /* SVGA_3D_CMD_DX_DEFINE_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyQuery {
+ SVGA3dQueryId queryId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyQuery; /* SVGA_3D_CMD_DX_DESTROY_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindQuery {
+ SVGA3dQueryId queryId;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindQuery; /* SVGA_3D_CMD_DX_BIND_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetQueryOffset {
+ SVGA3dQueryId queryId;
+ uint32 mobOffset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetQueryOffset; /* SVGA_3D_CMD_DX_SET_QUERY_OFFSET */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBeginQuery {
+ SVGA3dQueryId queryId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBeginQuery; /* SVGA_3D_CMD_DX_QUERY_BEGIN */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXEndQuery {
+ SVGA3dQueryId queryId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXEndQuery; /* SVGA_3D_CMD_DX_QUERY_END */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXReadbackQuery {
+ SVGA3dQueryId queryId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXReadbackQuery; /* SVGA_3D_CMD_DX_READBACK_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXMoveQuery {
+ SVGA3dQueryId queryId;
+ SVGAMobId mobid;
+ uint32 mobOffset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXMoveQuery; /* SVGA_3D_CMD_DX_MOVE_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindAllQuery {
+ uint32 cid;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindAllQuery; /* SVGA_3D_CMD_DX_BIND_ALL_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXReadbackAllQuery {
+ uint32 cid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXReadbackAllQuery; /* SVGA_3D_CMD_DX_READBACK_ALL_QUERY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetPredication {
+ SVGA3dQueryId queryId;
+ uint32 predicateValue;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetPredication; /* SVGA_3D_CMD_DX_SET_PREDICATION */
+
+typedef
+#include "vmware_pack_begin.h"
+struct MKS3dDXSOState {
+ uint32 offset; /* Starting offset */
+ uint32 intOffset; /* Internal offset */
+ uint32 vertexCount; /* vertices written */
+ uint32 dead;
+}
+#include "vmware_pack_end.h"
+SVGA3dDXSOState;
+
+/* Set the offset field to this value to append SO values to the buffer */
+#define SVGA3D_DX_SO_OFFSET_APPEND ((uint32) ~0u)
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dSoTarget {
+ SVGA3dSurfaceId sid;
+ uint32 offset;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dSoTarget;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetSOTargets {
+ uint32 pad0;
+ /* Followed by a variable number of SVGA3dSOTarget's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetSOTargets; /* SVGA_3D_CMD_DX_SET_SOTARGETS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dViewport
+{
+ float x;
+ float y;
+ float width;
+ float height;
+ float minDepth;
+ float maxDepth;
+}
+#include "vmware_pack_end.h"
+SVGA3dViewport;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetViewports {
+ uint32 pad0;
+ /* Followed by a variable number of SVGA3dViewport's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetViewports; /* SVGA_3D_CMD_DX_SET_VIEWPORTS */
+
+#define SVGA3D_DX_MAX_VIEWPORTS 16
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetScissorRects {
+ uint32 pad0;
+ /* Followed by a variable number of SVGASignedRect's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetScissorRects; /* SVGA_3D_CMD_DX_SET_SCISSORRECTS */
+
+#define SVGA3D_DX_MAX_SCISSORRECTS 16
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXClearRenderTargetView {
+ SVGA3dRenderTargetViewId renderTargetViewId;
+ SVGA3dRGBAFloat rgba;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXClearRenderTargetView; /* SVGA_3D_CMD_DX_CLEAR_RENDERTARGET_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXClearDepthStencilView {
+ uint16 flags;
+ uint16 stencil;
+ SVGA3dDepthStencilViewId depthStencilViewId;
+ float depth;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXClearDepthStencilView; /* SVGA_3D_CMD_DX_CLEAR_DEPTHSTENCIL_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXPredCopyRegion {
+ SVGA3dSurfaceId dstSid;
+ uint32 dstSubResource;
+ SVGA3dSurfaceId srcSid;
+ uint32 srcSubResource;
+ SVGA3dCopyBox box;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPredCopyRegion;
+/* SVGA_3D_CMD_DX_PRED_COPY_REGION */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXPredCopy {
+ SVGA3dSurfaceId dstSid;
+ SVGA3dSurfaceId srcSid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPredCopy; /* SVGA_3D_CMD_DX_PRED_COPY */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXPredConvertRegion {
+ SVGA3dSurfaceId dstSid;
+ uint32 dstSubResource;
+ SVGA3dBox destBox;
+ SVGA3dSurfaceId srcSid;
+ uint32 srcSubResource;
+ SVGA3dBox srcBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPredConvertRegion; /* SVGA_3D_CMD_DX_PRED_CONVERT_REGION */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXPredConvert {
+ SVGA3dSurfaceId dstSid;
+ SVGA3dSurfaceId srcSid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPredConvert; /* SVGA_3D_CMD_DX_PRED_CONVERT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBufferCopy {
+ SVGA3dSurfaceId dest;
+ SVGA3dSurfaceId src;
+ uint32 destX;
+ uint32 srcX;
+ uint32 width;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBufferCopy;
+/* SVGA_3D_CMD_DX_BUFFER_COPY */
+
+/*
+ * Perform a surface copy between a multisample, and a non-multisampled
+ * surface.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceId dstSid;
+ uint32 dstSubResource;
+ SVGA3dSurfaceId srcSid;
+ uint32 srcSubResource;
+ SVGA3dSurfaceFormat copyFormat;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXResolveCopy; /* SVGA_3D_CMD_DX_RESOLVE_COPY */
+
+/*
+ * Perform a predicated surface copy between a multisample, and a
+ * non-multisampled surface.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceId dstSid;
+ uint32 dstSubResource;
+ SVGA3dSurfaceId srcSid;
+ uint32 srcSubResource;
+ SVGA3dSurfaceFormat copyFormat;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPredResolveCopy; /* SVGA_3D_CMD_DX_PRED_RESOLVE_COPY */
+
+typedef uint32 SVGA3dDXPresentBltMode;
+#define SVGADX_PRESENTBLT_LINEAR (1 << 0)
+#define SVGADX_PRESENTBLT_FORCE_SRC_SRGB (1 << 1)
+#define SVGADX_PRESENTBLT_FORCE_SRC_XRBIAS (1 << 2)
+#define SVGADX_PRESENTBLT_MODE_MAX (1 << 3)
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXPresentBlt {
+ SVGA3dSurfaceId srcSid;
+ uint32 srcSubResource;
+ SVGA3dSurfaceId dstSid;
+ uint32 destSubResource;
+ SVGA3dBox boxSrc;
+ SVGA3dBox boxDest;
+ SVGA3dDXPresentBltMode mode;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPresentBlt; /* SVGA_3D_CMD_DX_PRESENTBLT*/
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXGenMips {
+ SVGA3dShaderResourceViewId shaderResourceViewId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXGenMips; /* SVGA_3D_CMD_DX_GENMIPS */
+
+/*
+ * Update a sub-resource in a guest-backed resource.
+ * (Inform the device that the guest-contents have been updated.)
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXUpdateSubResource {
+ SVGA3dSurfaceId sid;
+ uint32 subResource;
+ SVGA3dBox box;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXUpdateSubResource; /* SVGA_3D_CMD_DX_UPDATE_SUBRESOURCE */
+
+/*
+ * Readback a subresource in a guest-backed resource.
+ * (Request the device to flush the dirty contents into the guest.)
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXReadbackSubResource {
+ SVGA3dSurfaceId sid;
+ uint32 subResource;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXReadbackSubResource; /* SVGA_3D_CMD_DX_READBACK_SUBRESOURCE */
+
+/*
+ * Invalidate an image in a guest-backed surface.
+ * (Notify the device that the contents can be lost.)
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXInvalidateSubResource {
+ SVGA3dSurfaceId sid;
+ uint32 subResource;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXInvalidateSubResource; /* SVGA_3D_CMD_DX_INVALIDATE_SUBRESOURCE */
+
+
+/*
+ * Raw byte wise transfer from a buffer surface into another surface
+ * of the requested box. Supported if 3d is enabled and SVGA_CAP_DX
+ * is set. This command does not take a context.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXTransferFromBuffer {
+ SVGA3dSurfaceId srcSid;
+ uint32 srcOffset;
+ uint32 srcPitch;
+ uint32 srcSlicePitch;
+ SVGA3dSurfaceId destSid;
+ uint32 destSubResource;
+ SVGA3dBox destBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXTransferFromBuffer; /* SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER */
+
+
+#define SVGA3D_TRANSFER_TO_BUFFER_READBACK (1 << 0)
+#define SVGA3D_TRANSFER_TO_BUFFER_FLAGS_MASK (1 << 0)
+typedef uint32 SVGA3dTransferToBufferFlags;
+
+/*
+ * Raw byte wise transfer to a buffer surface from another surface
+ * of the requested box. Supported if SVGA_CAP_DX2 is set. This
+ * command does not take a context.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXTransferToBuffer {
+ SVGA3dSurfaceId srcSid;
+ uint32 srcSubResource;
+ SVGA3dBox srcBox;
+ SVGA3dSurfaceId destSid;
+ uint32 destOffset;
+ uint32 destPitch;
+ uint32 destSlicePitch;
+ SVGA3dTransferToBufferFlags flags;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXTransferToBuffer; /* SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER */
+
+
+/*
+ * Raw byte wise transfer from a buffer surface into another surface
+ * of the requested box. Supported if SVGA3D_DEVCAP_DXCONTEXT is set.
+ * The context is implied from the command buffer header.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXPredTransferFromBuffer {
+ SVGA3dSurfaceId srcSid;
+ uint32 srcOffset;
+ uint32 srcPitch;
+ uint32 srcSlicePitch;
+ SVGA3dSurfaceId destSid;
+ uint32 destSubResource;
+ SVGA3dBox destBox;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXPredTransferFromBuffer;
+/* SVGA_3D_CMD_DX_PRED_TRANSFER_FROM_BUFFER */
+
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSurfaceCopyAndReadback {
+ SVGA3dSurfaceId srcSid;
+ SVGA3dSurfaceId destSid;
+ SVGA3dCopyBox box;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSurfaceCopyAndReadback;
+/* SVGA_3D_CMD_DX_SURFACE_COPY_AND_READBACK */
+
+/*
+ * SVGA_DX_HINT_NONE: Does nothing.
+ *
+ * SVGA_DX_HINT_PREFETCH_OBJECT:
+ * SVGA_DX_HINT_PREEVICT_OBJECT:
+ * Consumes a SVGAObjectRef, and hints that the host should consider
+ * fetching/evicting the specified object.
+ *
+ * An id of SVGA3D_INVALID_ID can be used if the guest isn't sure
+ * what object was affected. (For instance, if the guest knows that
+ * it is about to evict a DXShader, but doesn't know precisely which one,
+ * the device can still use this to help limit it's search, or track
+ * how many page-outs have happened.)
+ *
+ * SVGA_DX_HINT_PREFETCH_COBJECT:
+ * SVGA_DX_HINT_PREEVICT_COBJECT:
+ * Same as the above, except they consume an SVGACObjectRef.
+ */
+typedef uint32 SVGADXHintId;
+#define SVGA_DX_HINT_NONE 0
+#define SVGA_DX_HINT_PREFETCH_OBJECT 1
+#define SVGA_DX_HINT_PREEVICT_OBJECT 2
+#define SVGA_DX_HINT_PREFETCH_COBJECT 3
+#define SVGA_DX_HINT_PREEVICT_COBJECT 4
+#define SVGA_DX_HINT_MAX 5
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGAObjectRef {
+ SVGAOTableType type;
+ uint32 id;
+}
+#include "vmware_pack_end.h"
+SVGAObjectRef;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGACObjectRef {
+ SVGACOTableType type;
+ uint32 cid;
+ uint32 id;
+}
+#include "vmware_pack_end.h"
+SVGACObjectRef;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXHint {
+ SVGADXHintId hintId;
+
+ /*
+ * Followed by variable sized data depending on the hintId.
+ */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXHint;
+/* SVGA_3D_CMD_DX_HINT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBufferUpdate {
+ SVGA3dSurfaceId sid;
+ uint32 x;
+ uint32 width;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBufferUpdate;
+/* SVGA_3D_CMD_DX_BUFFER_UPDATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetConstantBufferOffset {
+ uint32 slot;
+ uint32 offsetInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetConstantBufferOffset;
+
+typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetVSConstantBufferOffset;
+/* SVGA_3D_CMD_DX_SET_VS_CONSTANT_BUFFER_OFFSET */
+
+typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetPSConstantBufferOffset;
+/* SVGA_3D_CMD_DX_SET_PS_CONSTANT_BUFFER_OFFSET */
+
+typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetGSConstantBufferOffset;
+/* SVGA_3D_CMD_DX_SET_GS_CONSTANT_BUFFER_OFFSET */
+
+typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetHSConstantBufferOffset;
+/* SVGA_3D_CMD_DX_SET_HS_CONSTANT_BUFFER_OFFSET */
+
+typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetDSConstantBufferOffset;
+/* SVGA_3D_CMD_DX_SET_DS_CONSTANT_BUFFER_OFFSET */
+
+typedef SVGA3dCmdDXSetConstantBufferOffset SVGA3dCmdDXSetCSConstantBufferOffset;
+/* SVGA_3D_CMD_DX_SET_CS_CONSTANT_BUFFER_OFFSET */
+
+
+#define SVGA3D_BUFFEREX_SRV_RAW (1 << 0)
+#define SVGA3D_BUFFEREX_SRV_FLAGS_MAX (1 << 1)
+#define SVGA3D_BUFFEREX_SRV_FLAGS_MASK (SVGA3D_BUFFEREX_SRV_FLAGS_MAX - 1)
+typedef uint32 SVGA3dBufferExFlags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ union {
+ struct {
+ uint32 firstElement;
+ uint32 numElements;
+ uint32 pad0;
+ uint32 pad1;
+ } buffer;
+ struct {
+ uint32 mostDetailedMip;
+ uint32 firstArraySlice;
+ uint32 mipLevels;
+ uint32 arraySize;
+ } tex; /* 1d, 2d, 3d, cube */
+ struct {
+ uint32 firstElement;
+ uint32 numElements;
+ SVGA3dBufferExFlags flags;
+ uint32 pad0;
+ } bufferex;
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dShaderResourceViewDesc;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+ SVGA3dShaderResourceViewDesc desc;
+ uint32 pad;
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXSRViewEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineShaderResourceView {
+ SVGA3dShaderResourceViewId shaderResourceViewId;
+
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+
+ SVGA3dShaderResourceViewDesc desc;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineShaderResourceView;
+/* SVGA_3D_CMD_DX_DEFINE_SHADERRESOURCE_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyShaderResourceView {
+ SVGA3dShaderResourceViewId shaderResourceViewId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyShaderResourceView;
+/* SVGA_3D_CMD_DX_DESTROY_SHADERRESOURCE_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dRenderTargetViewDesc {
+ union {
+ struct {
+ uint32 firstElement;
+ uint32 numElements;
+ uint32 padding0;
+ } buffer;
+ struct {
+ uint32 mipSlice;
+ uint32 firstArraySlice;
+ uint32 arraySize;
+ } tex; /* 1d, 2d, cube */
+ struct {
+ uint32 mipSlice;
+ uint32 firstW;
+ uint32 wSize;
+ } tex3D;
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dRenderTargetViewDesc;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+ SVGA3dRenderTargetViewDesc desc;
+ uint32 pad[2];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXRTViewEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineRenderTargetView {
+ SVGA3dRenderTargetViewId renderTargetViewId;
+
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+
+ SVGA3dRenderTargetViewDesc desc;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineRenderTargetView;
+/* SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyRenderTargetView {
+ SVGA3dRenderTargetViewId renderTargetViewId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyRenderTargetView;
+/* SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW */
+
+/*
+ */
+#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_DEPTH 0x01
+#define SVGA3D_DXDSVIEW_CREATE_READ_ONLY_STENCIL 0x02
+#define SVGA3D_DXDSVIEW_CREATE_FLAG_MASK 0x03
+typedef uint8 SVGA3DCreateDSViewFlags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+ uint32 mipSlice;
+ uint32 firstArraySlice;
+ uint32 arraySize;
+ SVGA3DCreateDSViewFlags flags;
+ uint8 pad0;
+ uint16 pad1;
+ uint32 pad2;
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXDSViewEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineDepthStencilView {
+ SVGA3dDepthStencilViewId depthStencilViewId;
+
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+ uint32 mipSlice;
+ uint32 firstArraySlice;
+ uint32 arraySize;
+ SVGA3DCreateDSViewFlags flags;
+ uint8 pad0;
+ uint16 pad1;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineDepthStencilView;
+/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW */
+
+/*
+ * Version 2 needed in order to start validating and using the flags
+ * field. Unfortunately the device wasn't validating or using the
+ * flags field and the driver wasn't initializing it in shipped code,
+ * so a new version of the command is needed to allow that code to
+ * continue to work.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineDepthStencilView_v2 {
+ SVGA3dDepthStencilViewId depthStencilViewId;
+
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+ uint32 mipSlice;
+ uint32 firstArraySlice;
+ uint32 arraySize;
+ SVGA3DCreateDSViewFlags flags;
+ uint8 pad0;
+ uint16 pad1;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineDepthStencilView_v2;
+/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2 */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyDepthStencilView {
+ SVGA3dDepthStencilViewId depthStencilViewId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyDepthStencilView;
+/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW */
+
+
+#define SVGA3D_UABUFFER_RAW (1 << 0)
+#define SVGA3D_UABUFFER_APPEND (1 << 1)
+#define SVGA3D_UABUFFER_COUNTER (1 << 2)
+typedef uint32 SVGA3dUABufferFlags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ union {
+ struct {
+ uint32 firstElement;
+ uint32 numElements;
+ SVGA3dUABufferFlags flags;
+ uint32 padding0;
+ uint32 padding1;
+ } buffer;
+ struct {
+ uint32 mipSlice;
+ uint32 firstArraySlice;
+ uint32 arraySize;
+ uint32 padding0;
+ uint32 padding1;
+ } tex; /* 1d, 2d */
+ struct {
+ uint32 mipSlice;
+ uint32 firstW;
+ uint32 wSize;
+ uint32 padding0;
+ uint32 padding1;
+ } tex3D;
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dUAViewDesc;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+ SVGA3dUAViewDesc desc;
+ uint32 structureCount;
+ uint32 pad[7];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXUAViewEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineUAView {
+ SVGA3dUAViewId uaViewId;
+
+ SVGA3dSurfaceId sid;
+ SVGA3dSurfaceFormat format;
+ SVGA3dResourceType resourceDimension;
+
+ SVGA3dUAViewDesc desc;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineUAView;
+/* SVGA_3D_CMD_DX_DEFINE_UA_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyUAView {
+ SVGA3dUAViewId uaViewId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyUAView;
+/* SVGA_3D_CMD_DX_DESTROY_UA_VIEW */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXClearUAViewUint {
+ SVGA3dUAViewId uaViewId;
+ SVGA3dRGBAUint32 value;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXClearUAViewUint;
+/* SVGA_3D_CMD_DX_CLEAR_UA_VIEW_UINT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXClearUAViewFloat {
+ SVGA3dUAViewId uaViewId;
+ SVGA3dRGBAFloat value;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXClearUAViewFloat;
+/* SVGA_3D_CMD_DX_CLEAR_UA_VIEW_FLOAT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXCopyStructureCount {
+ SVGA3dUAViewId srcUAViewId;
+ SVGA3dSurfaceId destSid;
+ uint32 destByteOffset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXCopyStructureCount;
+/* SVGA_3D_CMD_DX_COPY_STRUCTURE_COUNT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetStructureCount {
+ SVGA3dUAViewId uaViewId;
+ uint32 structureCount;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetStructureCount;
+/* SVGA_3D_CMD_DX_SET_STRUCTURE_COUNT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetUAViews {
+ uint32 uavSpliceIndex;
+ /* Followed by a variable number of SVGA3dUAViewId's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetUAViews; /* SVGA_3D_CMD_DX_SET_UA_VIEWS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetCSUAViews {
+ uint32 startIndex;
+ /* Followed by a variable number of SVGA3dUAViewId's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetCSUAViews; /* SVGA_3D_CMD_DX_SET_CS_UA_VIEWS */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dInputElementDesc {
+ uint32 inputSlot;
+ uint32 alignedByteOffset;
+ SVGA3dSurfaceFormat format;
+ SVGA3dInputClassification inputSlotClass;
+ uint32 instanceDataStepRate;
+ uint32 inputRegister;
+}
+#include "vmware_pack_end.h"
+SVGA3dInputElementDesc;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 elid;
+ uint32 numDescs;
+ SVGA3dInputElementDesc descs[32];
+ uint32 pad[62];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXElementLayoutEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineElementLayout {
+ SVGA3dElementLayoutId elementLayoutId;
+ /* Followed by a variable number of SVGA3dInputElementDesc's. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineElementLayout;
+/* SVGA_3D_CMD_DX_DEFINE_ELEMENTLAYOUT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyElementLayout {
+ SVGA3dElementLayoutId elementLayoutId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyElementLayout;
+/* SVGA_3D_CMD_DX_DESTROY_ELEMENTLAYOUT */
+
+
+#define SVGA3D_DX_MAX_RENDER_TARGETS 8
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dDXBlendStatePerRT {
+ uint8 blendEnable;
+ uint8 srcBlend;
+ uint8 destBlend;
+ uint8 blendOp;
+ uint8 srcBlendAlpha;
+ uint8 destBlendAlpha;
+ uint8 blendOpAlpha;
+ SVGA3dColorWriteEnable renderTargetWriteMask;
+ uint8 logicOpEnable;
+ uint8 logicOp;
+ uint16 pad0;
+}
+#include "vmware_pack_end.h"
+SVGA3dDXBlendStatePerRT;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint8 alphaToCoverageEnable;
+ uint8 independentBlendEnable;
+ uint16 pad0;
+ SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
+ uint32 pad1[7];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXBlendStateEntry;
+
+/*
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineBlendState {
+ SVGA3dBlendStateId blendId;
+ uint8 alphaToCoverageEnable;
+ uint8 independentBlendEnable;
+ uint16 pad0;
+ SVGA3dDXBlendStatePerRT perRT[SVGA3D_MAX_RENDER_TARGETS];
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineBlendState; /* SVGA_3D_CMD_DX_DEFINE_BLEND_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyBlendState {
+ SVGA3dBlendStateId blendId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyBlendState; /* SVGA_3D_CMD_DX_DESTROY_BLEND_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint8 depthEnable;
+ SVGA3dDepthWriteMask depthWriteMask;
+ SVGA3dComparisonFunc depthFunc;
+ uint8 stencilEnable;
+ uint8 frontEnable;
+ uint8 backEnable;
+ uint8 stencilReadMask;
+ uint8 stencilWriteMask;
+
+ uint8 frontStencilFailOp;
+ uint8 frontStencilDepthFailOp;
+ uint8 frontStencilPassOp;
+ SVGA3dComparisonFunc frontStencilFunc;
+
+ uint8 backStencilFailOp;
+ uint8 backStencilDepthFailOp;
+ uint8 backStencilPassOp;
+ SVGA3dComparisonFunc backStencilFunc;
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXDepthStencilEntry;
+
+/*
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineDepthStencilState {
+ SVGA3dDepthStencilStateId depthStencilId;
+
+ uint8 depthEnable;
+ SVGA3dDepthWriteMask depthWriteMask;
+ SVGA3dComparisonFunc depthFunc;
+ uint8 stencilEnable;
+ uint8 frontEnable;
+ uint8 backEnable;
+ uint8 stencilReadMask;
+ uint8 stencilWriteMask;
+
+ uint8 frontStencilFailOp;
+ uint8 frontStencilDepthFailOp;
+ uint8 frontStencilPassOp;
+ SVGA3dComparisonFunc frontStencilFunc;
+
+ uint8 backStencilFailOp;
+ uint8 backStencilDepthFailOp;
+ uint8 backStencilPassOp;
+ SVGA3dComparisonFunc backStencilFunc;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineDepthStencilState;
+/* SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyDepthStencilState {
+ SVGA3dDepthStencilStateId depthStencilId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyDepthStencilState;
+/* SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint8 fillMode;
+ SVGA3dCullMode cullMode;
+ uint8 frontCounterClockwise;
+ uint8 provokingVertexLast;
+ int32 depthBias;
+ float depthBiasClamp;
+ float slopeScaledDepthBias;
+ uint8 depthClipEnable;
+ uint8 scissorEnable;
+ SVGA3dMultisampleRastEnable multisampleEnable;
+ uint8 antialiasedLineEnable;
+ float lineWidth;
+ uint8 lineStippleEnable;
+ uint8 lineStippleFactor;
+ uint16 lineStipplePattern;
+ uint8 forcedSampleCount;
+ uint8 mustBeZero[3];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXRasterizerStateEntry;
+
+/*
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineRasterizerState {
+ SVGA3dRasterizerStateId rasterizerId;
+
+ uint8 fillMode;
+ SVGA3dCullMode cullMode;
+ uint8 frontCounterClockwise;
+ uint8 provokingVertexLast;
+ int32 depthBias;
+ float depthBiasClamp;
+ float slopeScaledDepthBias;
+ uint8 depthClipEnable;
+ uint8 scissorEnable;
+ SVGA3dMultisampleRastEnable multisampleEnable;
+ uint8 antialiasedLineEnable;
+ float lineWidth;
+ uint8 lineStippleEnable;
+ uint8 lineStippleFactor;
+ uint16 lineStipplePattern;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineRasterizerState;
+/* SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyRasterizerState {
+ SVGA3dRasterizerStateId rasterizerId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyRasterizerState;
+/* SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGA3dFilter filter;
+ uint8 addressU;
+ uint8 addressV;
+ uint8 addressW;
+ uint8 pad0;
+ float mipLODBias;
+ uint8 maxAnisotropy;
+ SVGA3dComparisonFunc comparisonFunc;
+ uint16 pad1;
+ SVGA3dRGBAFloat borderColor;
+ float minLOD;
+ float maxLOD;
+ uint32 pad2[6];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXSamplerEntry;
+
+/*
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineSamplerState {
+ SVGA3dSamplerId samplerId;
+ SVGA3dFilter filter;
+ uint8 addressU;
+ uint8 addressV;
+ uint8 addressW;
+ uint8 pad0;
+ float mipLODBias;
+ uint8 maxAnisotropy;
+ SVGA3dComparisonFunc comparisonFunc;
+ uint16 pad1;
+ SVGA3dRGBAFloat borderColor;
+ float minLOD;
+ float maxLOD;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineSamplerState; /* SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroySamplerState {
+ SVGA3dSamplerId samplerId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroySamplerState; /* SVGA_3D_CMD_DX_DESTROY_SAMPLER_STATE */
+
+
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED 0
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_POSITION 1
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_CLIP_DISTANCE 2
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_CULL_DISTANCE 3
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_RENDER_TARGET_ARRAY_INDEX 4
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_VIEWPORT_ARRAY_INDEX 5
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_VERTEX_ID 6
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_PRIMITIVE_ID 7
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_INSTANCE_ID 8
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_IS_FRONT_FACE 9
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_SAMPLE_INDEX 10
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_0_EDGE_TESSFACTOR 11
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_0_EDGE_TESSFACTOR 12
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_EQ_1_EDGE_TESSFACTOR 13
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_EQ_1_EDGE_TESSFACTOR 14
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_U_INSIDE_TESSFACTOR 15
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_QUAD_V_INSIDE_TESSFACTOR 16
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_U_EQ_0_EDGE_TESSFACTOR 17
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_V_EQ_0_EDGE_TESSFACTOR 18
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_W_EQ_0_EDGE_TESSFACTOR 19
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_TRI_INSIDE_TESSFACTOR 20
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DETAIL_TESSFACTOR 21
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_FINAL_LINE_DENSITY_TESSFACTOR 22
+#define SVGADX_SIGNATURE_SEMANTIC_NAME_MAX 23
+typedef uint32 SVGA3dDXSignatureSemanticName;
+
+#define SVGADX_SIGNATURE_REGISTER_COMPONENT_UNKNOWN 0
+typedef uint32 SVGA3dDXSignatureRegisterComponentType;
+
+#define SVGADX_SIGNATURE_MIN_PRECISION_DEFAULT 0
+typedef uint32 SVGA3dDXSignatureMinPrecision;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dDXSignatureEntry {
+ uint32 registerIndex;
+ SVGA3dDXSignatureSemanticName semanticName;
+ uint32 mask; /* Lower 4 bits represent X, Y, Z, W channels */
+ SVGA3dDXSignatureRegisterComponentType componentType;
+ SVGA3dDXSignatureMinPrecision minPrecision;
+}
+#include "vmware_pack_end.h"
+SVGA3dDXShaderSignatureEntry;
+
+#define SVGADX_SIGNATURE_HEADER_VERSION_0 0x08a92d12
+
+/*
+ * The SVGA3dDXSignatureHeader structure is added after the shader
+ * body in the mob that is bound to the shader. It is followed by the
+ * specified number of SVGA3dDXSignatureEntry structures for each of
+ * the three types of signatures in the order (input, output, patch
+ * constants).
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dDXSignatureHeader {
+ uint32 headerVersion;
+ uint32 numInputSignatures;
+ uint32 numOutputSignatures;
+ uint32 numPatchConstantSignatures;
+}
+#include "vmware_pack_end.h"
+SVGA3dDXShaderSignatureHeader;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineShader {
+ SVGA3dShaderId shaderId;
+ SVGA3dShaderType type;
+ uint32 sizeInBytes; /* Number of bytes of shader text. */
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineShader; /* SVGA_3D_CMD_DX_DEFINE_SHADER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGACOTableDXShaderEntry {
+ SVGA3dShaderType type;
+ uint32 sizeInBytes;
+ uint32 offsetInBytes;
+ SVGAMobId mobid;
+ uint32 pad[4];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXShaderEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyShader {
+ SVGA3dShaderId shaderId;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyShader; /* SVGA_3D_CMD_DX_DESTROY_SHADER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindShader {
+ uint32 cid;
+ uint32 shid;
+ SVGAMobId mobid;
+ uint32 offsetInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindShader; /* SVGA_3D_CMD_DX_BIND_SHADER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindAllShader {
+ uint32 cid;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindAllShader; /* SVGA_3D_CMD_DX_BIND_ALL_SHADER */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXCondBindAllShader {
+ uint32 cid;
+ SVGAMobId testMobid;
+ SVGAMobId mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXCondBindAllShader; /* SVGA_3D_CMD_DX_COND_BIND_ALL_SHADER */
+
+/*
+ * The maximum number of streamout decl's in each streamout entry.
+ */
+#define SVGA3D_MAX_DX10_STREAMOUT_DECLS 64
+#define SVGA3D_MAX_STREAMOUT_DECLS 512
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dStreamOutputDeclarationEntry {
+ uint32 outputSlot;
+ uint32 registerIndex;
+ uint8 registerMask;
+ uint8 pad0;
+ uint16 pad1;
+ uint32 stream;
+}
+#include "vmware_pack_end.h"
+SVGA3dStreamOutputDeclarationEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGAOTableStreamOutputEntry {
+ uint32 numOutputStreamEntries;
+ SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
+ uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
+ uint32 rasterizedStream;
+ uint32 numOutputStreamStrides;
+ uint32 mobid;
+ uint32 offsetInBytes;
+ uint8 usesMob;
+ uint8 pad0;
+ uint16 pad1;
+ uint32 pad2[246];
+}
+#include "vmware_pack_end.h"
+SVGACOTableDXStreamOutputEntry;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineStreamOutput {
+ SVGA3dStreamOutputId soid;
+ uint32 numOutputStreamEntries;
+ SVGA3dStreamOutputDeclarationEntry decl[SVGA3D_MAX_DX10_STREAMOUT_DECLS];
+ uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
+ uint32 rasterizedStream;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineStreamOutput; /* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT */
+
+/*
+ * Version 2 needed in order to start validating and using the
+ * rasterizedStream field. Unfortunately the device wasn't validating
+ * or using this field and the driver wasn't initializing it in shipped
+ * code, so a new version of the command is needed to allow that code
+ * to continue to work. Also added new numOutputStreamStrides field.
+ */
+
+#define SVGA3D_DX_SO_NO_RASTERIZED_STREAM 0xFFFFFFFF
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDefineStreamOutputWithMob {
+ SVGA3dStreamOutputId soid;
+ uint32 numOutputStreamEntries;
+ uint32 numOutputStreamStrides;
+ uint32 streamOutputStrideInBytes[SVGA3D_DX_MAX_SOTARGETS];
+ uint32 rasterizedStream;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDefineStreamOutputWithMob;
+/* SVGA_3D_CMD_DX_DEFINE_STREAMOUTPUT_WITH_MOB */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXBindStreamOutput {
+ SVGA3dStreamOutputId soid;
+ uint32 mobid;
+ uint32 offsetInBytes;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXBindStreamOutput; /* SVGA_3D_CMD_DX_BIND_STREAMOUTPUT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXDestroyStreamOutput {
+ SVGA3dStreamOutputId soid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXDestroyStreamOutput; /* SVGA_3D_CMD_DX_DESTROY_STREAMOUTPUT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetStreamOutput {
+ SVGA3dStreamOutputId soid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetStreamOutput; /* SVGA_3D_CMD_DX_SET_STREAMOUTPUT */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetMinLOD {
+ SVGA3dSurfaceId sid;
+ float minLOD;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetMinLOD; /* SVGA_3D_CMD_DX_SET_MIN_LOD */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint64 value;
+ uint32 mobId;
+ uint32 mobOffset;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXMobFence64; /* SVGA_3D_CMD_DX_MOB_FENCE_64 */
+
+/*
+ * SVGA3dCmdSetCOTable --
+ *
+ * This command allows the guest to bind a mob to a context-object table.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXSetCOTable {
+ uint32 cid;
+ uint32 mobid;
+ SVGACOTableType type;
+ uint32 validSizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXSetCOTable; /* SVGA_3D_CMD_DX_SET_COTABLE */
+
+/*
+ * Guests using SVGA_3D_CMD_DX_GROW_COTABLE are promising that
+ * the new COTable contains the same contents as the old one, except possibly
+ * for some new invalid entries at the end.
+ *
+ * If there is an old cotable mob bound, it also has to still be valid.
+ *
+ * (Otherwise, guests should use the DXSetCOTableBase command.)
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXGrowCOTable {
+ uint32 cid;
+ uint32 mobid;
+ SVGACOTableType type;
+ uint32 validSizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXGrowCOTable; /* SVGA_3D_CMD_DX_GROW_COTABLE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXReadbackCOTable {
+ uint32 cid;
+ SVGACOTableType type;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXReadbackCOTable; /* SVGA_3D_CMD_DX_READBACK_COTABLE */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCOTableData {
+ uint32 mobid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCOTableData;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dBufferBinding {
+ uint32 bufferId;
+ uint32 stride;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGA3dBufferBinding;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dConstantBufferBinding {
+ uint32 sid;
+ uint32 offsetInBytes;
+ uint32 sizeInBytes;
+}
+#include "vmware_pack_end.h"
+SVGA3dConstantBufferBinding;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGADXInputAssemblyMobFormat {
+ uint32 layoutId;
+ SVGA3dBufferBinding vertexBuffers[SVGA3D_DX_MAX_VERTEXBUFFERS];
+ uint32 indexBufferSid;
+ uint32 pad;
+ uint32 indexBufferOffset;
+ uint32 indexBufferFormat;
+ uint32 topology;
+}
+#include "vmware_pack_end.h"
+SVGADXInputAssemblyMobFormat;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGADXContextMobFormat {
+ SVGADXInputAssemblyMobFormat inputAssembly;
+
+ struct {
+ uint32 blendStateId;
+ uint32 blendFactor[4];
+ uint32 sampleMask;
+ uint32 depthStencilStateId;
+ uint32 stencilRef;
+ uint32 rasterizerStateId;
+ uint32 depthStencilViewId;
+ uint32 renderTargetViewIds[SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS];
+ } renderState;
+
+ uint32 pad0[8];
+
+ struct {
+ uint32 targets[SVGA3D_DX_MAX_SOTARGETS];
+ uint32 soid;
+ } streamOut;
+
+ uint32 pad1[10];
+
+ uint32 uavSpliceIndex;
+
+ uint8 numViewports;
+ uint8 numScissorRects;
+ uint16 pad2[1];
+
+ uint32 pad3[3];
+
+ SVGA3dViewport viewports[SVGA3D_DX_MAX_VIEWPORTS];
+ uint32 pad4[32];
+
+ SVGASignedRect scissorRects[SVGA3D_DX_MAX_SCISSORRECTS];
+ uint32 pad5[64];
+
+ struct {
+ uint32 queryID;
+ uint32 value;
+ } predication;
+
+ SVGAMobId shaderIfaceMobid;
+ uint32 shaderIfaceOffset;
+ struct {
+ uint32 shaderId;
+ SVGA3dConstantBufferBinding constantBuffers[SVGA3D_DX_MAX_CONSTBUFFERS];
+ uint32 shaderResources[SVGA3D_DX_MAX_SRVIEWS];
+ uint32 samplers[SVGA3D_DX_MAX_SAMPLERS];
+ } shaderState[SVGA3D_NUM_SHADERTYPE];
+ uint32 pad6[26];
+
+ SVGA3dQueryId queryID[SVGA3D_MAX_QUERY];
+
+ SVGA3dCOTableData cotables[SVGA_COTABLE_MAX];
+
+ uint32 pad7[64];
+
+ uint32 uaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
+ uint32 csuaViewIds[SVGA3D_DX11_1_MAX_UAVIEWS];
+
+ uint32 pad8[188];
+}
+#include "vmware_pack_end.h"
+SVGADXContextMobFormat;
+
+/*
+ * There is conflicting documentation on max class instances (253 vs 256). The
+ * lower value is the one used throughout the device, but since mob format is
+ * more involved to increase if needed, conservatively use the higher one here.
+ */
+#define SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED 256
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGADXShaderIfaceMobFormat {
+ struct {
+ uint32 numClassInstances;
+ uint32 iface[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
+ SVGA3dIfaceData data[SVGA3D_DX_MAX_CLASS_INSTANCES_PADDED];
+ } shaderIfaceState[SVGA3D_NUM_SHADERTYPE];
+
+ uint32 pad0[1018];
+}
+#include "vmware_pack_end.h"
+SVGADXShaderIfaceMobFormat;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCmdDXTempSetContext {
+ uint32 dxcid;
+}
+#include "vmware_pack_end.h"
+SVGA3dCmdDXTempSetContext; /* SVGA_3D_CMD_DX_TEMP_SET_CONTEXT */
+
+#ifdef VBOX
+typedef struct SVGA3dCmdVBDXClearRenderTargetViewRegion
+{
+ uint32 viewId;
+ uint32 reserved;
+ SVGA3dRGBAFloat color;
+ /* followed by SVGASignedRect array */
+} SVGA3dCmdVBDXClearRenderTargetViewRegion; /* SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION */
+#endif /* VBOX */
+
+#endif /* _SVGA3D_DX_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_limits.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_limits.h
new file mode 100644
index 00000000..f4375a41
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_limits.h
@@ -0,0 +1,130 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2007-2019 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_limits.h --
+ *
+ * SVGA 3d hardware limits
+ */
+
+#ifndef _SVGA3D_LIMITS_H_
+#define _SVGA3D_LIMITS_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_VMCORE
+
+#include "includeCheck.h"
+
+#define SVGA3D_NUM_CLIPPLANES 6
+#define SVGA3D_MAX_CONTEXT_IDS 256
+#define SVGA3D_MAX_SURFACE_IDS (32 * 1024)
+
+/*
+ * While there are separate bind-points for RenderTargetViews and
+ * UnorderedAccessViews in a DXContext, there is in fact one shared
+ * semantic space that the guest-driver can use on any given draw call.
+ * So there are really only 8 slots that can be spilt up between them, with the
+ * spliceIndex controlling where the UAV's sit in the collapsed array.
+ */
+#define SVGA3D_MAX_RENDER_TARGETS 8
+#define SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS (SVGA3D_MAX_RENDER_TARGETS)
+#define SVGA3D_MAX_UAVIEWS 8
+#define SVGA3D_DX11_1_MAX_UAVIEWS 64
+
+/*
+ * Maximum canonical size of a surface in host-backed mode (pre-GBObjects).
+ */
+#define SVGA3D_HB_MAX_SURFACE_SIZE MBYTES_2_BYTES(128)
+
+/*
+ * Maximum ID a shader can be assigned on a given context.
+ */
+#define SVGA3D_MAX_SHADERIDS 5000
+/*
+ * Maximum number of shaders of a given type that can be defined
+ * (including all contexts).
+ */
+#define SVGA3D_MAX_SIMULTANEOUS_SHADERS 20000
+
+#define SVGA3D_NUM_TEXTURE_UNITS 32
+#define SVGA3D_NUM_LIGHTS 8
+
+#define SVGA3D_MAX_VIDEOPROCESSOR_SAMPLERS 32
+
+/*
+ * Maximum size in dwords of shader text the SVGA device will allow.
+ * Currently 8 MB.
+ */
+#define SVGA3D_MAX_SHADER_MEMORY_BYTES (8 * 1024 * 1024)
+#define SVGA3D_MAX_SHADER_MEMORY (SVGA3D_MAX_SHADER_MEMORY_BYTES / \
+ sizeof(uint32))
+
+/*
+ * The maximum value of threadGroupCount in each dimension
+ */
+#define SVGA3D_MAX_SHADER_THREAD_GROUPS 65535
+
+#define SVGA3D_MAX_CLIP_PLANES 6
+
+/*
+ * This is the limit to the number of fixed-function texture
+ * transforms and texture coordinates we can support. It does *not*
+ * correspond to the number of texture image units (samplers) we
+ * support!
+ */
+#define SVGA3D_MAX_TEXTURE_COORDS 8
+
+/*
+ * Number of faces in a cubemap.
+ */
+#define SVGA3D_MAX_SURFACE_FACES 6
+
+/*
+ * Maximum number of array indexes in a GB surface (with DX enabled).
+ */
+#define SVGA3D_SM4_MAX_SURFACE_ARRAYSIZE 512
+#define SVGA3D_SM5_MAX_SURFACE_ARRAYSIZE 2048
+#define SVGA3D_MAX_SURFACE_ARRAYSIZE SVGA3D_SM5_MAX_SURFACE_ARRAYSIZE
+
+/*
+ * The maximum number of vertex arrays we're guaranteed to support in
+ * SVGA_3D_CMD_DRAWPRIMITIVES.
+ */
+#define SVGA3D_MAX_VERTEX_ARRAYS 32
+
+/*
+ * The maximum number of primitive ranges we're guaranteed to support
+ * in SVGA_3D_CMD_DRAWPRIMITIVES.
+ */
+#define SVGA3D_MAX_DRAW_PRIMITIVE_RANGES 32
+
+/*
+ * The maximum number of samples that can be contained in a surface.
+ */
+#define SVGA3D_MAX_SAMPLES 8
+
+#endif /* _SVGA3D_LIMITS_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_reg.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_reg.h
new file mode 100644
index 00000000..bdfc404c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_reg.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 1998-2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_reg.h --
+ *
+ * SVGA 3d hardware definitions
+ */
+
+#ifndef _SVGA3D_REG_H_
+#define _SVGA3D_REG_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_VMCORE
+
+#include "includeCheck.h"
+
+#include "svga_reg.h"
+
+#include "svga3d_types.h"
+#include "svga3d_limits.h"
+#include "svga3d_cmd.h"
+#include "svga3d_dx.h"
+#include "svga3d_devcaps.h"
+
+
+#endif /* _SVGA3D_REG_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_shaderdefs.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_shaderdefs.h
new file mode 100644
index 00000000..5e00906c
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_shaderdefs.h
@@ -0,0 +1,518 @@
+/**********************************************************
+ * Copyright 2007-2014 VMware, Inc. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_shaderdefs.h --
+ *
+ * SVGA3D byte code format and limit definitions.
+ *
+ * The format of the byte code directly corresponds to that defined
+ * by Microsoft DirectX SDK 9.0c (file d3d9types.h). The format can
+ * also be extended so that different shader formats can be supported
+ * for example GLSL, ARB vp/fp, NV/ATI shader formats, etc.
+ *
+ */
+
+#ifndef __SVGA3D_SHADER_DEFS__
+#define __SVGA3D_SHADER_DEFS__
+
+/* SVGA3D shader hardware limits. */
+
+#define SVGA3D_INPUTREG_MAX 16
+#define SVGA3D_OUTPUTREG_MAX 12
+#define SVGA3D_VERTEX_SAMPLERREG_MAX 4
+#define SVGA3D_PIXEL_SAMPLERREG_MAX 16
+#define SVGA3D_SAMPLERREG_MAX (SVGA3D_PIXEL_SAMPLERREG_MAX+\
+ SVGA3D_VERTEX_SAMPLERREG_MAX)
+#define SVGA3D_TEMPREG_MAX 32
+#define SVGA3D_CONSTREG_MAX 256
+#define SVGA3D_CONSTINTREG_MAX 16
+#define SVGA3D_CONSTBOOLREG_MAX 16
+#define SVGA3D_ADDRREG_MAX 1
+#define SVGA3D_PREDREG_MAX 1
+
+/* SVGA3D byte code specific limits */
+
+#define SVGA3D_MAX_SRC_REGS 4
+#define SVGA3D_MAX_NESTING_LEVEL 32
+
+/* SVGA3D version information. */
+
+#define SVGA3D_VS_TYPE 0xFFFE
+#define SVGA3D_PS_TYPE 0xFFFF
+
+typedef struct {
+ union {
+ struct {
+ uint32 minor : 8;
+ uint32 major : 8;
+ uint32 type : 16;
+ };
+
+ uint32 value;
+ };
+} SVGA3dShaderVersion;
+
+#define SVGA3D_VS_10 ((SVGA3D_VS_TYPE << 16) | 1 << 8)
+#define SVGA3D_VS_11 (SVGA3D_VS_10 | 1)
+#define SVGA3D_VS_20 ((SVGA3D_VS_TYPE << 16) | 2 << 8)
+#define SVGA3D_VS_21 (SVGA3D_VS_20 | 1)
+#define SVGA3D_VS_30 ((SVGA3D_VS_TYPE << 16) | 3 << 8)
+
+#define SVGA3D_PS_10 ((SVGA3D_PS_TYPE << 16) | 1 << 8)
+#define SVGA3D_PS_11 (SVGA3D_PS_10 | 1)
+#define SVGA3D_PS_12 (SVGA3D_PS_10 | 2)
+#define SVGA3D_PS_13 (SVGA3D_PS_10 | 3)
+#define SVGA3D_PS_14 (SVGA3D_PS_10 | 4)
+#define SVGA3D_PS_20 ((SVGA3D_PS_TYPE << 16) | 2 << 8)
+#define SVGA3D_PS_21 (SVGA3D_PS_20 | 1)
+#define SVGA3D_PS_30 ((SVGA3D_PS_TYPE << 16) | 3 << 8)
+
+/* The *_ENABLED are for backwards compatibility with old drivers */
+typedef enum {
+ SVGA3DPSVERSION_NONE = 0,
+ SVGA3DPSVERSION_ENABLED = 1,
+ SVGA3DPSVERSION_11 = 3,
+ SVGA3DPSVERSION_12 = 5,
+ SVGA3DPSVERSION_13 = 7,
+ SVGA3DPSVERSION_14 = 9,
+ SVGA3DPSVERSION_20 = 11,
+ SVGA3DPSVERSION_30 = 13,
+ SVGA3DPSVERSION_40 = 15,
+ SVGA3DPSVERSION_MAX
+} SVGA3dPixelShaderVersion;
+
+typedef enum {
+ SVGA3DVSVERSION_NONE = 0,
+ SVGA3DVSVERSION_ENABLED = 1,
+ SVGA3DVSVERSION_11 = 3,
+ SVGA3DVSVERSION_20 = 5,
+ SVGA3DVSVERSION_30 = 7,
+ SVGA3DVSVERSION_40 = 9,
+ SVGA3DVSVERSION_MAX
+} SVGA3dVertexShaderVersion;
+
+/* SVGA3D instruction op codes. */
+
+typedef enum {
+ SVGA3DOP_NOP = 0,
+ SVGA3DOP_MOV,
+ SVGA3DOP_ADD,
+ SVGA3DOP_SUB,
+ SVGA3DOP_MAD,
+ SVGA3DOP_MUL,
+ SVGA3DOP_RCP,
+ SVGA3DOP_RSQ,
+ SVGA3DOP_DP3,
+ SVGA3DOP_DP4,
+ SVGA3DOP_MIN,
+ SVGA3DOP_MAX,
+ SVGA3DOP_SLT,
+ SVGA3DOP_SGE,
+ SVGA3DOP_EXP,
+ SVGA3DOP_LOG,
+ SVGA3DOP_LIT,
+ SVGA3DOP_DST,
+ SVGA3DOP_LRP,
+ SVGA3DOP_FRC,
+ SVGA3DOP_M4x4,
+ SVGA3DOP_M4x3,
+ SVGA3DOP_M3x4,
+ SVGA3DOP_M3x3,
+ SVGA3DOP_M3x2,
+ SVGA3DOP_CALL,
+ SVGA3DOP_CALLNZ,
+ SVGA3DOP_LOOP,
+ SVGA3DOP_RET,
+ SVGA3DOP_ENDLOOP,
+ SVGA3DOP_LABEL,
+ SVGA3DOP_DCL,
+ SVGA3DOP_POW,
+ SVGA3DOP_CRS,
+ SVGA3DOP_SGN,
+ SVGA3DOP_ABS,
+ SVGA3DOP_NRM,
+ SVGA3DOP_SINCOS,
+ SVGA3DOP_REP,
+ SVGA3DOP_ENDREP,
+ SVGA3DOP_IF,
+ SVGA3DOP_IFC,
+ SVGA3DOP_ELSE,
+ SVGA3DOP_ENDIF,
+ SVGA3DOP_BREAK,
+ SVGA3DOP_BREAKC,
+ SVGA3DOP_MOVA,
+ SVGA3DOP_DEFB,
+ SVGA3DOP_DEFI,
+ SVGA3DOP_TEXCOORD = 64,
+ SVGA3DOP_TEXKILL,
+ SVGA3DOP_TEX,
+ SVGA3DOP_TEXBEM,
+ SVGA3DOP_TEXBEML,
+ SVGA3DOP_TEXREG2AR,
+ SVGA3DOP_TEXREG2GB = 70,
+ SVGA3DOP_TEXM3x2PAD,
+ SVGA3DOP_TEXM3x2TEX,
+ SVGA3DOP_TEXM3x3PAD,
+ SVGA3DOP_TEXM3x3TEX,
+ SVGA3DOP_RESERVED0,
+ SVGA3DOP_TEXM3x3SPEC,
+ SVGA3DOP_TEXM3x3VSPEC,
+ SVGA3DOP_EXPP,
+ SVGA3DOP_LOGP,
+ SVGA3DOP_CND = 80,
+ SVGA3DOP_DEF,
+ SVGA3DOP_TEXREG2RGB,
+ SVGA3DOP_TEXDP3TEX,
+ SVGA3DOP_TEXM3x2DEPTH,
+ SVGA3DOP_TEXDP3,
+ SVGA3DOP_TEXM3x3,
+ SVGA3DOP_TEXDEPTH,
+ SVGA3DOP_CMP,
+ SVGA3DOP_BEM,
+ SVGA3DOP_DP2ADD = 90,
+ SVGA3DOP_DSX,
+ SVGA3DOP_DSY,
+ SVGA3DOP_TEXLDD,
+ SVGA3DOP_SETP,
+ SVGA3DOP_TEXLDL,
+ SVGA3DOP_BREAKP = 96,
+ SVGA3DOP_LAST_INST,
+ SVGA3DOP_PHASE = 0xFFFD,
+ SVGA3DOP_COMMENT = 0xFFFE,
+ SVGA3DOP_END = 0xFFFF,
+} SVGA3dShaderOpCodeType;
+
+/* SVGA3D operation control/comparison function types */
+
+typedef enum {
+ SVGA3DOPCONT_NONE,
+ SVGA3DOPCONT_PROJECT, /* Projective texturing */
+ SVGA3DOPCONT_BIAS, /* Texturing with a LOD bias */
+} SVGA3dShaderOpCodeControlFnType;
+
+typedef enum {
+ SVGA3DOPCOMP_RESERVED0 = 0,
+ SVGA3DOPCOMP_GT,
+ SVGA3DOPCOMP_EQ,
+ SVGA3DOPCOMP_GE,
+ SVGA3DOPCOMP_LT,
+ SVGA3DOPCOMPC_NE,
+ SVGA3DOPCOMP_LE,
+ SVGA3DOPCOMP_RESERVED1
+} SVGA3dShaderOpCodeCompFnType;
+
+/* SVGA3D register types */
+
+typedef enum {
+ SVGA3DREG_TEMP = 0, /* Temporary register file */
+ SVGA3DREG_INPUT, /* Input register file */
+ SVGA3DREG_CONST, /* Constant register file */
+ SVGA3DREG_ADDR, /* Address register for VS */
+ SVGA3DREG_TEXTURE = 3, /* Texture register file for PS */
+ SVGA3DREG_RASTOUT, /* Rasterizer register file */
+ SVGA3DREG_ATTROUT, /* Attribute output register file */
+ SVGA3DREG_TEXCRDOUT, /* Texture coordinate output register file */
+ SVGA3DREG_OUTPUT = 6, /* Output register file for VS 3.0+ */
+ SVGA3DREG_CONSTINT, /* Constant integer vector register file */
+ SVGA3DREG_COLOROUT, /* Color output register file */
+ SVGA3DREG_DEPTHOUT, /* Depth output register file */
+ SVGA3DREG_SAMPLER, /* Sampler state register file */
+ SVGA3DREG_CONST2, /* Constant register file 2048 - 4095 */
+ SVGA3DREG_CONST3, /* Constant register file 4096 - 6143 */
+ SVGA3DREG_CONST4, /* Constant register file 6144 - 8191 */
+ SVGA3DREG_CONSTBOOL, /* Constant boolean register file */
+ SVGA3DREG_LOOP, /* Loop counter register file */
+ SVGA3DREG_TEMPFLOAT16, /* 16-bit float temp register file */
+ SVGA3DREG_MISCTYPE, /* Miscellaneous (single) registers */
+ SVGA3DREG_LABEL, /* Label */
+ SVGA3DREG_PREDICATE, /* Predicate register */
+} SVGA3dShaderRegType;
+
+/* SVGA3D rasterizer output register types */
+
+typedef enum {
+ SVGA3DRASTOUT_POSITION = 0,
+ SVGA3DRASTOUT_FOG,
+ SVGA3DRASTOUT_PSIZE
+} SVGA3dShaderRastOutRegType;
+
+/* SVGA3D miscellaneous register types */
+
+typedef enum {
+ SVGA3DMISCREG_POSITION = 0, /* Input position x,y,z,rhw (PS) */
+ SVGA3DMISCREG_FACE /* Floating point primitive area (PS) */
+} SVGA3DShaderMiscRegType;
+
+/* SVGA3D sampler types */
+
+typedef enum {
+ SVGA3DSAMP_UNKNOWN = 0, /* Uninitialized value */
+ SVGA3DSAMP_2D = 2, /* dcl_2d s# (for declaring a 2D texture) */
+ SVGA3DSAMP_CUBE, /* dcl_cube s# (for declaring a cube texture) */
+ SVGA3DSAMP_VOLUME, /* dcl_volume s# (for declaring a volume texture) */
+ SVGA3DSAMP_2D_SHADOW, /* dcl_2d s# (for declaring a 2D shadow texture) */
+ SVGA3DSAMP_MAX,
+} SVGA3dShaderSamplerType;
+
+/* SVGA3D write mask */
+
+#define SVGA3DWRITEMASK_0 1 /* Component 0 (X;Red) */
+#define SVGA3DWRITEMASK_1 2 /* Component 1 (Y;Green) */
+#define SVGA3DWRITEMASK_2 4 /* Component 2 (Z;Blue) */
+#define SVGA3DWRITEMASK_3 8 /* Component 3 (W;Alpha) */
+#define SVGA3DWRITEMASK_ALL 15 /* All components */
+
+/* SVGA3D destination modifiers */
+
+#define SVGA3DDSTMOD_NONE 0 /* nop */
+#define SVGA3DDSTMOD_SATURATE 1 /* clamp to [0, 1] */
+#define SVGA3DDSTMOD_PARTIALPRECISION 2 /* Partial precision hint */
+
+/*
+ * Relevant to multisampling only:
+ * When the pixel center is not covered, sample
+ * attribute or compute gradients/LOD
+ * using multisample "centroid" location.
+ * "Centroid" is some location within the covered
+ * region of the pixel.
+ */
+
+#define SVGA3DDSTMOD_MSAMPCENTROID 4
+
+/* SVGA3D destination shift scale */
+
+typedef enum {
+ SVGA3DDSTSHFSCALE_X1 = 0, /* 1.0 */
+ SVGA3DDSTSHFSCALE_X2 = 1, /* 2.0 */
+ SVGA3DDSTSHFSCALE_X4 = 2, /* 4.0 */
+ SVGA3DDSTSHFSCALE_X8 = 3, /* 8.0 */
+ SVGA3DDSTSHFSCALE_D8 = 13, /* 0.125 */
+ SVGA3DDSTSHFSCALE_D4 = 14, /* 0.25 */
+ SVGA3DDSTSHFSCALE_D2 = 15 /* 0.5 */
+} SVGA3dShaderDstShfScaleType;
+
+/* SVGA3D source swizzle */
+
+#define SVGA3DSWIZZLE_REPLICATEX 0x00
+#define SVGA3DSWIZZLE_REPLICATEY 0x55
+#define SVGA3DSWIZZLE_REPLICATEZ 0xAA
+#define SVGA3DSWIZZLE_REPLICATEW 0xFF
+#define SVGA3DSWIZZLE_NONE 0xE4
+#define SVGA3DSWIZZLE_YZXW 0xC9
+#define SVGA3DSWIZZLE_ZXYW 0xD2
+#define SVGA3DSWIZZLE_WXYZ 0x1B
+
+/* SVGA3D source modifiers */
+
+typedef enum {
+ SVGA3DSRCMOD_NONE = 0, /* nop */
+ SVGA3DSRCMOD_NEG, /* negate */
+ SVGA3DSRCMOD_BIAS, /* bias */
+ SVGA3DSRCMOD_BIASNEG, /* bias and negate */
+ SVGA3DSRCMOD_SIGN, /* sign */
+ SVGA3DSRCMOD_SIGNNEG, /* sign and negate */
+ SVGA3DSRCMOD_COMP, /* complement */
+ SVGA3DSRCMOD_X2, /* x2 */
+ SVGA3DSRCMOD_X2NEG, /* x2 and negate */
+ SVGA3DSRCMOD_DZ, /* divide through by z component */
+ SVGA3DSRCMOD_DW, /* divide through by w component */
+ SVGA3DSRCMOD_ABS, /* abs() */
+ SVGA3DSRCMOD_ABSNEG, /* -abs() */
+ SVGA3DSRCMOD_NOT, /* ! (for predicate register) */
+} SVGA3dShaderSrcModType;
+
+/* SVGA3D instruction token */
+
+typedef struct {
+ union {
+ struct {
+ uint32 comment_op : 16;
+ uint32 comment_size : 16;
+ };
+
+ struct {
+ uint32 op : 16;
+ uint32 control : 3;
+ uint32 reserved2 : 5;
+ uint32 size : 4;
+ uint32 predicated : 1;
+ uint32 reserved1 : 1;
+ uint32 coissue : 1;
+ uint32 reserved0 : 1;
+ };
+
+ uint32 value;
+ };
+} SVGA3dShaderInstToken;
+
+/* SVGA3D destination parameter token */
+
+typedef struct {
+ union {
+ struct {
+ uint32 num : 11;
+ uint32 type_upper : 2;
+ uint32 relAddr : 1;
+ uint32 reserved1 : 2;
+ uint32 mask : 4;
+ uint32 dstMod : 4;
+ uint32 shfScale : 4;
+ uint32 type_lower : 3;
+ uint32 reserved0 : 1;
+ };
+
+ uint32 value;
+ };
+} SVGA3dShaderDestToken;
+
+/* SVGA3D source parameter token */
+
+typedef struct {
+ union {
+ struct {
+ uint32 num : 11;
+ uint32 type_upper : 2;
+ uint32 relAddr : 1;
+ uint32 reserved1 : 2;
+ uint32 swizzle : 8;
+ uint32 srcMod : 4;
+ uint32 type_lower : 3;
+ uint32 reserved0 : 1;
+ };
+
+ uint32 value;
+ };
+} SVGA3dShaderSrcToken;
+
+/* SVGA3DOP_DCL parameter tokens */
+
+typedef struct {
+ union {
+ struct {
+ union {
+ struct {
+ uint32 usage : 5;
+ uint32 reserved1 : 11;
+ uint32 index : 4;
+ uint32 reserved0 : 12;
+ }; /* input / output declaration */
+
+ struct {
+ uint32 reserved3 : 27;
+ uint32 type : 4;
+ uint32 reserved2 : 1;
+ }; /* sampler declaration */
+ };
+
+ SVGA3dShaderDestToken dst;
+ };
+
+ uint32 values[2];
+ };
+} SVGA3DOpDclArgs;
+
+/* SVGA3DOP_DEF parameter tokens */
+
+typedef struct {
+ union {
+ struct {
+ SVGA3dShaderDestToken dst;
+
+ union {
+ float constValues[4];
+ int constIValues[4];
+ Bool constBValue;
+ };
+ };
+
+ uint32 values[5];
+ };
+} SVGA3DOpDefArgs;
+
+/* SVGA3D shader token */
+
+typedef union {
+ uint32 value;
+ SVGA3dShaderInstToken inst;
+ SVGA3dShaderDestToken dest;
+ SVGA3dShaderSrcToken src;
+} SVGA3dShaderToken;
+
+/* SVGA3D shader program */
+
+typedef struct {
+ SVGA3dShaderVersion version;
+ /* SVGA3dShaderToken stream */
+} SVGA3dShaderProgram;
+
+/* SVGA3D version specific register assignments */
+
+static const uint32 SVGA3D_INPUT_REG_POSITION_VS11 = 0;
+static const uint32 SVGA3D_INPUT_REG_PSIZE_VS11 = 1;
+static const uint32 SVGA3D_INPUT_REG_FOG_VS11 = 3;
+static const uint32 SVGA3D_INPUT_REG_FOG_MASK_VS11 = SVGA3DWRITEMASK_3;
+static const uint32 SVGA3D_INPUT_REG_COLOR_BASE_VS11 = 2;
+static const uint32 SVGA3D_INPUT_REG_TEXCOORD_BASE_VS11 = 4;
+
+static const uint32 SVGA3D_INPUT_REG_COLOR_BASE_PS11 = 0;
+static const uint32 SVGA3D_INPUT_REG_TEXCOORD_BASE_PS11 = 2;
+static const uint32 SVGA3D_OUTPUT_REG_DEPTH_PS11 = 0;
+static const uint32 SVGA3D_OUTPUT_REG_COLOR_PS11 = 1;
+
+static const uint32 SVGA3D_INPUT_REG_COLOR_BASE_PS20 = 0;
+static const uint32 SVGA3D_INPUT_REG_COLOR_NUM_PS20 = 2;
+static const uint32 SVGA3D_INPUT_REG_TEXCOORD_BASE_PS20 = 2;
+static const uint32 SVGA3D_INPUT_REG_TEXCOORD_NUM_PS20 = 8;
+static const uint32 SVGA3D_OUTPUT_REG_COLOR_BASE_PS20 = 1;
+static const uint32 SVGA3D_OUTPUT_REG_COLOR_NUM_PS20 = 4;
+static const uint32 SVGA3D_OUTPUT_REG_DEPTH_BASE_PS20 = 0;
+static const uint32 SVGA3D_OUTPUT_REG_DEPTH_NUM_PS20 = 1;
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * SVGA3dShaderGetRegType --
+ *
+ * As the register type is split into two non sequential fields,
+ * this function provides an useful way of accessing the actual
+ * register type without having to manually concatenate the
+ * type_upper and type_lower fields.
+ *
+ * Results:
+ * Returns the register type.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static inline SVGA3dShaderRegType
+SVGA3dShaderGetRegType(uint32 token)
+{
+ SVGA3dShaderSrcToken src;
+ src.value = token;
+ return (SVGA3dShaderRegType)(src.type_upper << 3 | src.type_lower);
+}
+
+#endif /* __SVGA3D_SHADER_DEFS__ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_surfacedefs.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_surfacedefs.h
new file mode 100644
index 00000000..a909b932
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_surfacedefs.h
@@ -0,0 +1,1687 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**************************************************************************
+ *
+ * Copyright 2008-2015 VMware, Inc., Palo Alto, CA., USA
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+/*
+ * svga3d_surfacedefs.h --
+ *
+ * Surface definitions and inlineable utilities for SVGA3d.
+ */
+
+#ifndef _SVGA3D_SURFACEDEFS_H_
+#define _SVGA3D_SURFACEDEFS_H_
+
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_MODULE
+#include "includeCheck.h"
+
+#ifndef VBOX
+#include <linux/kernel.h>
+#include <drm/vmwgfx_drm.h>
+#else
+#include "svga_types.h"
+typedef uint8_t u8;
+typedef uint32_t u32;
+struct drm_vmw_size
+{
+ uint32_t width;
+ uint32_t height;
+ uint32_t depth;
+ uint32_t pad64;
+};
+#define U32_MAX UINT32_MAX
+#define ARRAY_SIZE RT_ELEMENTS
+#define __KERNEL_DIV_ROUND_UP(aDividend, aDivisor) (((aDividend) + (aDivisor) - 1) / (aDivisor))
+#define max_t(aType, aValue1, aValue2) ( (aType)(aValue1) >= (aType)(aValue2) ? (aType)(aValue1) : (aType)(aValue2) )
+#define min_t(aType, aValue1, aValue2) ( (aType)(aValue1) <= (aType)(aValue2) ? (aType)(aValue1) : (aType)(aValue2) )
+#endif
+
+#include "svga3d_reg.h"
+
+#define surf_size_struct struct drm_vmw_size
+
+/*
+ * enum svga3d_block_desc - describes generic properties about formats.
+ */
+enum svga3d_block_desc {
+ /* Nothing special can be said about this format. */
+ SVGA3DBLOCKDESC_NONE = 0,
+
+ /* Format contains Blue/U data */
+ SVGA3DBLOCKDESC_BLUE = 1 << 0,
+ SVGA3DBLOCKDESC_W = 1 << 0,
+ SVGA3DBLOCKDESC_BUMP_L = 1 << 0,
+
+ /* Format contains Green/V data */
+ SVGA3DBLOCKDESC_GREEN = 1 << 1,
+ SVGA3DBLOCKDESC_V = 1 << 1,
+
+ /* Format contains Red/W/Luminance data */
+ SVGA3DBLOCKDESC_RED = 1 << 2,
+ SVGA3DBLOCKDESC_U = 1 << 2,
+ SVGA3DBLOCKDESC_LUMINANCE = 1 << 2,
+
+ /* Format contains Alpha/Q data */
+ SVGA3DBLOCKDESC_ALPHA = 1 << 3,
+ SVGA3DBLOCKDESC_Q = 1 << 3,
+
+ /* Format is a buffer */
+ SVGA3DBLOCKDESC_BUFFER = 1 << 4,
+
+ /* Format is compressed */
+ SVGA3DBLOCKDESC_COMPRESSED = 1 << 5,
+
+ /* Format uses IEEE floating point */
+ SVGA3DBLOCKDESC_FP = 1 << 6,
+
+ /* Three separate blocks store data. */
+ SVGA3DBLOCKDESC_PLANAR_YUV = 1 << 7,
+
+ /* 2 planes of Y, UV, e.g., NV12. */
+ SVGA3DBLOCKDESC_2PLANAR_YUV = 1 << 8,
+
+ /* 3 planes of separate Y, U, V, e.g., YV12. */
+ SVGA3DBLOCKDESC_3PLANAR_YUV = 1 << 9,
+
+ /* Block with a stencil channel */
+ SVGA3DBLOCKDESC_STENCIL = 1 << 11,
+
+ /* Typeless format */
+ SVGA3DBLOCKDESC_TYPELESS = 1 << 12,
+
+ /* Channels are signed integers */
+ SVGA3DBLOCKDESC_SINT = 1 << 13,
+
+ /* Channels are unsigned integers */
+ SVGA3DBLOCKDESC_UINT = 1 << 14,
+
+ /* Channels are normalized (when sampling) */
+ SVGA3DBLOCKDESC_NORM = 1 << 15,
+
+ /* Channels are in SRGB */
+ SVGA3DBLOCKDESC_SRGB = 1 << 16,
+
+ /* Shared exponent */
+ SVGA3DBLOCKDESC_EXP = 1 << 17,
+
+ /* Format contains color data. */
+ SVGA3DBLOCKDESC_COLOR = 1 << 18,
+ /* Format contains depth data. */
+ SVGA3DBLOCKDESC_DEPTH = 1 << 19,
+ /* Format contains bump data. */
+ SVGA3DBLOCKDESC_BUMP = 1 << 20,
+
+ /* Format contains YUV video data. */
+ SVGA3DBLOCKDESC_YUV_VIDEO = 1 << 21,
+
+ /* For mixed unsigned/signed formats. */
+ SVGA3DBLOCKDESC_MIXED = 1 << 22,
+
+ /* For distingushing CxV8U8. */
+ SVGA3DBLOCKDESC_CX = 1 << 23,
+
+ /* Different compressed format groups. */
+ SVGA3DBLOCKDESC_BC1 = 1 << 24,
+ SVGA3DBLOCKDESC_BC2 = 1 << 25,
+ SVGA3DBLOCKDESC_BC3 = 1 << 26,
+ SVGA3DBLOCKDESC_BC4 = 1 << 27,
+ SVGA3DBLOCKDESC_BC5 = 1 << 28,
+ SVGA3DBLOCKDESC_BC6H = 1 << 29,
+ SVGA3DBLOCKDESC_BC7 = 1 << 30,
+
+ SVGA3DBLOCKDESC_A_UINT = SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_A_UNORM = SVGA3DBLOCKDESC_A_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_R_UINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_R_UNORM = SVGA3DBLOCKDESC_R_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_R_SINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_R_SNORM = SVGA3DBLOCKDESC_R_SINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_G_UINT = SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RG_UINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RG_UNORM = SVGA3DBLOCKDESC_RG_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_RG_SINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RG_SNORM = SVGA3DBLOCKDESC_RG_SINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_RGB_UINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RGB_SINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RGB_UNORM = SVGA3DBLOCKDESC_RGB_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_RGB_UNORM_SRGB = SVGA3DBLOCKDESC_RGB_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+ SVGA3DBLOCKDESC_RGBA_UINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RGBA_UNORM = SVGA3DBLOCKDESC_RGBA_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_RGBA_UNORM_SRGB = SVGA3DBLOCKDESC_RGBA_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+ SVGA3DBLOCKDESC_RGBA_SINT = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RGBA_SNORM = SVGA3DBLOCKDESC_RGBA_SINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_RGBA_FP = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_FP |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_UV = SVGA3DBLOCKDESC_U |
+ SVGA3DBLOCKDESC_V |
+ SVGA3DBLOCKDESC_BUMP,
+ SVGA3DBLOCKDESC_UVL = SVGA3DBLOCKDESC_UV |
+ SVGA3DBLOCKDESC_BUMP_L |
+ SVGA3DBLOCKDESC_MIXED |
+ SVGA3DBLOCKDESC_BUMP,
+ SVGA3DBLOCKDESC_UVW = SVGA3DBLOCKDESC_UV |
+ SVGA3DBLOCKDESC_W |
+ SVGA3DBLOCKDESC_BUMP,
+ SVGA3DBLOCKDESC_UVWA = SVGA3DBLOCKDESC_UVW |
+ SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_MIXED |
+ SVGA3DBLOCKDESC_BUMP,
+ SVGA3DBLOCKDESC_UVWQ = SVGA3DBLOCKDESC_U |
+ SVGA3DBLOCKDESC_V |
+ SVGA3DBLOCKDESC_W |
+ SVGA3DBLOCKDESC_Q |
+ SVGA3DBLOCKDESC_BUMP,
+ SVGA3DBLOCKDESC_L_UNORM = SVGA3DBLOCKDESC_LUMINANCE |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_NORM |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_LA_UNORM = SVGA3DBLOCKDESC_LUMINANCE |
+ SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_NORM |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_R_FP = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_FP |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RG_FP = SVGA3DBLOCKDESC_R_FP |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RGB_FP = SVGA3DBLOCKDESC_RG_FP |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_YUV = SVGA3DBLOCKDESC_YUV_VIDEO |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_AYUV = SVGA3DBLOCKDESC_ALPHA |
+ SVGA3DBLOCKDESC_YUV_VIDEO |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_RGB_EXP = SVGA3DBLOCKDESC_RED |
+ SVGA3DBLOCKDESC_GREEN |
+ SVGA3DBLOCKDESC_BLUE |
+ SVGA3DBLOCKDESC_EXP |
+ SVGA3DBLOCKDESC_COLOR,
+
+ SVGA3DBLOCKDESC_COMP_TYPELESS = SVGA3DBLOCKDESC_COMPRESSED |
+ SVGA3DBLOCKDESC_TYPELESS,
+ SVGA3DBLOCKDESC_COMP_UNORM = SVGA3DBLOCKDESC_COMPRESSED |
+ SVGA3DBLOCKDESC_UINT |
+ SVGA3DBLOCKDESC_NORM |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_COMP_SNORM = SVGA3DBLOCKDESC_COMPRESSED |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_NORM |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_COMP_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+ SVGA3DBLOCKDESC_BC1_COMP_TYPELESS = SVGA3DBLOCKDESC_BC1 |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC1_COMP_UNORM = SVGA3DBLOCKDESC_BC1 |
+ SVGA3DBLOCKDESC_COMP_UNORM,
+ SVGA3DBLOCKDESC_BC1_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC1_COMP_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+ SVGA3DBLOCKDESC_BC2_COMP_TYPELESS = SVGA3DBLOCKDESC_BC2 |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC2_COMP_UNORM = SVGA3DBLOCKDESC_BC2 |
+ SVGA3DBLOCKDESC_COMP_UNORM,
+ SVGA3DBLOCKDESC_BC2_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC2_COMP_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+ SVGA3DBLOCKDESC_BC3_COMP_TYPELESS = SVGA3DBLOCKDESC_BC3 |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC3_COMP_UNORM = SVGA3DBLOCKDESC_BC3 |
+ SVGA3DBLOCKDESC_COMP_UNORM,
+ SVGA3DBLOCKDESC_BC3_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC3_COMP_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+ SVGA3DBLOCKDESC_BC4_COMP_TYPELESS = SVGA3DBLOCKDESC_BC4 |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC4_COMP_UNORM = SVGA3DBLOCKDESC_BC4 |
+ SVGA3DBLOCKDESC_COMP_UNORM,
+ SVGA3DBLOCKDESC_BC4_COMP_SNORM = SVGA3DBLOCKDESC_BC4 |
+ SVGA3DBLOCKDESC_COMP_SNORM,
+ SVGA3DBLOCKDESC_BC5_COMP_TYPELESS = SVGA3DBLOCKDESC_BC5 |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC5_COMP_UNORM = SVGA3DBLOCKDESC_BC5 |
+ SVGA3DBLOCKDESC_COMP_UNORM,
+ SVGA3DBLOCKDESC_BC5_COMP_SNORM = SVGA3DBLOCKDESC_BC5 |
+ SVGA3DBLOCKDESC_COMP_SNORM,
+ SVGA3DBLOCKDESC_BC6H_COMP_TYPELESS = SVGA3DBLOCKDESC_BC6H |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC6H_COMP_UF16 = SVGA3DBLOCKDESC_BC6H |
+ SVGA3DBLOCKDESC_COMPRESSED,
+ SVGA3DBLOCKDESC_BC6H_COMP_SF16 = SVGA3DBLOCKDESC_BC6H |
+ SVGA3DBLOCKDESC_COMPRESSED,
+ SVGA3DBLOCKDESC_BC7_COMP_TYPELESS = SVGA3DBLOCKDESC_BC7 |
+ SVGA3DBLOCKDESC_COMP_TYPELESS,
+ SVGA3DBLOCKDESC_BC7_COMP_UNORM = SVGA3DBLOCKDESC_BC7 |
+ SVGA3DBLOCKDESC_COMP_UNORM,
+ SVGA3DBLOCKDESC_BC7_COMP_UNORM_SRGB = SVGA3DBLOCKDESC_BC7_COMP_UNORM |
+ SVGA3DBLOCKDESC_SRGB,
+
+ SVGA3DBLOCKDESC_NV12 = SVGA3DBLOCKDESC_YUV_VIDEO |
+ SVGA3DBLOCKDESC_PLANAR_YUV |
+ SVGA3DBLOCKDESC_2PLANAR_YUV |
+ SVGA3DBLOCKDESC_COLOR,
+ SVGA3DBLOCKDESC_YV12 = SVGA3DBLOCKDESC_YUV_VIDEO |
+ SVGA3DBLOCKDESC_PLANAR_YUV |
+ SVGA3DBLOCKDESC_3PLANAR_YUV |
+ SVGA3DBLOCKDESC_COLOR,
+
+ SVGA3DBLOCKDESC_DEPTH_UINT = SVGA3DBLOCKDESC_DEPTH |
+ SVGA3DBLOCKDESC_UINT,
+ SVGA3DBLOCKDESC_DEPTH_UNORM = SVGA3DBLOCKDESC_DEPTH_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_DS = SVGA3DBLOCKDESC_DEPTH |
+ SVGA3DBLOCKDESC_STENCIL,
+ SVGA3DBLOCKDESC_DS_UINT = SVGA3DBLOCKDESC_DEPTH |
+ SVGA3DBLOCKDESC_STENCIL |
+ SVGA3DBLOCKDESC_UINT,
+ SVGA3DBLOCKDESC_DS_UNORM = SVGA3DBLOCKDESC_DS_UINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_DEPTH_FP = SVGA3DBLOCKDESC_DEPTH |
+ SVGA3DBLOCKDESC_FP,
+
+ SVGA3DBLOCKDESC_UV_UINT = SVGA3DBLOCKDESC_UV |
+ SVGA3DBLOCKDESC_UINT,
+ SVGA3DBLOCKDESC_UV_SNORM = SVGA3DBLOCKDESC_UV |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_NORM,
+ SVGA3DBLOCKDESC_UVCX_SNORM = SVGA3DBLOCKDESC_UV_SNORM |
+ SVGA3DBLOCKDESC_CX,
+ SVGA3DBLOCKDESC_UVWQ_SNORM = SVGA3DBLOCKDESC_UVWQ |
+ SVGA3DBLOCKDESC_SINT |
+ SVGA3DBLOCKDESC_NORM,
+};
+
+struct svga3d_channel_def {
+ union {
+ u8 blue;
+ u8 w_bump;
+ u8 l_bump;
+ u8 uv_video;
+ u8 u_video;
+ };
+ union {
+ u8 green;
+ u8 stencil;
+ u8 v_bump;
+ u8 v_video;
+ };
+ union {
+ u8 red;
+ u8 u_bump;
+ u8 luminance;
+ u8 y_video;
+ u8 depth;
+ u8 data;
+ };
+ union {
+ u8 alpha;
+ u8 q_bump;
+ u8 exp;
+ };
+};
+
+/*
+ * struct svga3d_surface_desc - describes the actual pixel data.
+ *
+ * @format: Format
+ * @block_desc: Block description
+ * @block_size: Dimensions in pixels of a block
+ * @bytes_per_block: Size of block in bytes
+ * @pitch_bytes_per_block: Size of a block in bytes for purposes of pitch
+ * @bit_depth: Channel bit depths
+ * @bit_offset: Channel bit masks (in bits offset from the start of the pointer)
+ */
+struct svga3d_surface_desc {
+ SVGA3dSurfaceFormat format;
+ enum svga3d_block_desc block_desc;
+
+ surf_size_struct block_size;
+ u32 bytes_per_block;
+ u32 pitch_bytes_per_block;
+
+ struct svga3d_channel_def bit_depth;
+ struct svga3d_channel_def bit_offset;
+};
+
+static const struct svga3d_surface_desc svga3d_surface_descs[] = {
+ {SVGA3D_FORMAT_INVALID, SVGA3DBLOCKDESC_NONE,
+ {1, 1, 1}, 0, 0,
+ {{0}, {0}, {0}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_X8R8G8B8, SVGA3DBLOCKDESC_RGB_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {0}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_A8R8G8B8, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_R5G6B5, SVGA3DBLOCKDESC_RGB_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{5}, {6}, {5}, {0}},
+ {{0}, {5}, {11}, {0}}},
+
+ {SVGA3D_X1R5G5B5, SVGA3DBLOCKDESC_RGB_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{5}, {5}, {5}, {0}},
+ {{0}, {5}, {10}, {0}}},
+
+ {SVGA3D_A1R5G5B5, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{5}, {5}, {5}, {1}},
+ {{0}, {5}, {10}, {15}}},
+
+ {SVGA3D_A4R4G4B4, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{4}, {4}, {4}, {4}},
+ {{0}, {4}, {8}, {12}}},
+
+ {SVGA3D_Z_D32, SVGA3DBLOCKDESC_DEPTH_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_Z_D16, SVGA3DBLOCKDESC_DEPTH_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_Z_D24S8, SVGA3DBLOCKDESC_DS_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {8}, {24}, {0}},
+ {{0}, {0}, {8}, {0}}},
+
+ {SVGA3D_Z_D15S1, SVGA3DBLOCKDESC_DS_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {1}, {15}, {0}},
+ {{0}, {0}, {1}, {0}}},
+
+ {SVGA3D_LUMINANCE8, SVGA3DBLOCKDESC_L_UNORM,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_LUMINANCE4_ALPHA4, SVGA3DBLOCKDESC_LA_UNORM,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {4}, {4}},
+ {{0}, {0}, {0}, {4}}},
+
+ {SVGA3D_LUMINANCE16, SVGA3DBLOCKDESC_L_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_LUMINANCE8_ALPHA8, SVGA3DBLOCKDESC_LA_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {8}, {8}},
+ {{0}, {0}, {0}, {8}}},
+
+ {SVGA3D_DXT1, SVGA3DBLOCKDESC_BC1_COMP_UNORM,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_DXT2, SVGA3DBLOCKDESC_BC2_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_DXT3, SVGA3DBLOCKDESC_BC2_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_DXT4, SVGA3DBLOCKDESC_BC3_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_DXT5, SVGA3DBLOCKDESC_BC3_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BUMPU8V8, SVGA3DBLOCKDESC_UV_SNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_BUMPL6V5U5, SVGA3DBLOCKDESC_UVL,
+ {1, 1, 1}, 2, 2,
+ {{6}, {5}, {5}, {0}},
+ {{10}, {5}, {0}, {0}}},
+
+ {SVGA3D_BUMPX8L8V8U8, SVGA3DBLOCKDESC_UVL,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {0}},
+ {{16}, {8}, {0}, {0}}},
+
+ {SVGA3D_FORMAT_DEAD1, SVGA3DBLOCKDESC_NONE,
+ {1, 1, 1}, 3, 3,
+ {{8}, {8}, {8}, {0}},
+ {{16}, {8}, {0}, {0}}},
+
+ {SVGA3D_ARGB_S10E5, SVGA3DBLOCKDESC_RGBA_FP,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_ARGB_S23E8, SVGA3DBLOCKDESC_RGBA_FP,
+ {1, 1, 1}, 16, 16,
+ {{32}, {32}, {32}, {32}},
+ {{64}, {32}, {0}, {96}}},
+
+ {SVGA3D_A2R10G10B10, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{10}, {10}, {10}, {2}},
+ {{0}, {10}, {20}, {30}}},
+
+ {SVGA3D_V8U8, SVGA3DBLOCKDESC_UV_SNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_Q8W8V8U8, SVGA3DBLOCKDESC_UVWQ_SNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_CxV8U8, SVGA3DBLOCKDESC_UVCX_SNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_X8L8V8U8, SVGA3DBLOCKDESC_UVL,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {0}},
+ {{16}, {8}, {0}, {0}}},
+
+ {SVGA3D_A2W10V10U10, SVGA3DBLOCKDESC_UVWA,
+ {1, 1, 1}, 4, 4,
+ {{10}, {10}, {10}, {2}},
+ {{20}, {10}, {0}, {30}}},
+
+ {SVGA3D_ALPHA8, SVGA3DBLOCKDESC_A_UNORM,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {0}, {8}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R_S10E5, SVGA3DBLOCKDESC_R_FP,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R_S23E8, SVGA3DBLOCKDESC_R_FP,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_RG_S10E5, SVGA3DBLOCKDESC_RG_FP,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_RG_S23E8, SVGA3DBLOCKDESC_RG_FP,
+ {1, 1, 1}, 8, 8,
+ {{0}, {32}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_BUFFER, SVGA3DBLOCKDESC_BUFFER,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_Z_D24X8, SVGA3DBLOCKDESC_DEPTH_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {24}, {0}},
+ {{0}, {0}, {8}, {0}}},
+
+ {SVGA3D_V16U16, SVGA3DBLOCKDESC_UV_SNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_G16R16, SVGA3DBLOCKDESC_RG_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_A16B16G16R16, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_UYVY, SVGA3DBLOCKDESC_YUV,
+ {2, 1, 1}, 4, 4,
+ {{8}, {0}, {8}, {0}},
+ {{0}, {0}, {8}, {0}}},
+
+ {SVGA3D_YUY2, SVGA3DBLOCKDESC_YUV,
+ {2, 1, 1}, 4, 4,
+ {{8}, {0}, {8}, {0}},
+ {{8}, {0}, {0}, {0}}},
+
+ {SVGA3D_NV12, SVGA3DBLOCKDESC_NV12,
+ {2, 2, 1}, 6, 2,
+ {{0}, {0}, {48}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_FORMAT_DEAD2, SVGA3DBLOCKDESC_NONE,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_R32G32B32A32_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 16, 16,
+ {{32}, {32}, {32}, {32}},
+ {{64}, {32}, {0}, {96}}},
+
+ {SVGA3D_R32G32B32A32_UINT, SVGA3DBLOCKDESC_RGBA_UINT,
+ {1, 1, 1}, 16, 16,
+ {{32}, {32}, {32}, {32}},
+ {{64}, {32}, {0}, {96}}},
+
+ {SVGA3D_R32G32B32A32_SINT, SVGA3DBLOCKDESC_RGBA_SINT,
+ {1, 1, 1}, 16, 16,
+ {{32}, {32}, {32}, {32}},
+ {{64}, {32}, {0}, {96}}},
+
+ {SVGA3D_R32G32B32_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 12, 12,
+ {{32}, {32}, {32}, {0}},
+ {{64}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32G32B32_FLOAT, SVGA3DBLOCKDESC_RGB_FP,
+ {1, 1, 1}, 12, 12,
+ {{32}, {32}, {32}, {0}},
+ {{64}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32G32B32_UINT, SVGA3DBLOCKDESC_RGB_UINT,
+ {1, 1, 1}, 12, 12,
+ {{32}, {32}, {32}, {0}},
+ {{64}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32G32B32_SINT, SVGA3DBLOCKDESC_RGB_SINT,
+ {1, 1, 1}, 12, 12,
+ {{32}, {32}, {32}, {0}},
+ {{64}, {32}, {0}, {0}}},
+
+ {SVGA3D_R16G16B16A16_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_R16G16B16A16_UINT, SVGA3DBLOCKDESC_RGBA_UINT,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_R16G16B16A16_SNORM, SVGA3DBLOCKDESC_RGBA_SNORM,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_R16G16B16A16_SINT, SVGA3DBLOCKDESC_RGBA_SINT,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_R32G32_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 8, 8,
+ {{0}, {32}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32G32_UINT, SVGA3DBLOCKDESC_RG_UINT,
+ {1, 1, 1}, 8, 8,
+ {{0}, {32}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32G32_SINT, SVGA3DBLOCKDESC_RG_SINT,
+ {1, 1, 1}, 8, 8,
+ {{0}, {32}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32G8X24_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 8, 8,
+ {{0}, {8}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_D32_FLOAT_S8X24_UINT, SVGA3DBLOCKDESC_DS,
+ {1, 1, 1}, 8, 8,
+ {{0}, {8}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_R32_FLOAT_X8X24, SVGA3DBLOCKDESC_R_FP,
+ {1, 1, 1}, 8, 8,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_X32_G8X24_UINT, SVGA3DBLOCKDESC_G_UINT,
+ {1, 1, 1}, 8, 8,
+ {{0}, {8}, {0}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_R10G10B10A2_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{10}, {10}, {10}, {2}},
+ {{20}, {10}, {0}, {30}}},
+
+ {SVGA3D_R10G10B10A2_UINT, SVGA3DBLOCKDESC_RGBA_UINT,
+ {1, 1, 1}, 4, 4,
+ {{10}, {10}, {10}, {2}},
+ {{20}, {10}, {0}, {30}}},
+
+ {SVGA3D_R11G11B10_FLOAT, SVGA3DBLOCKDESC_RGB_FP,
+ {1, 1, 1}, 4, 4,
+ {{10}, {11}, {11}, {0}},
+ {{22}, {11}, {0}, {0}}},
+
+ {SVGA3D_R8G8B8A8_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_R8G8B8A8_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_R8G8B8A8_UNORM_SRGB, SVGA3DBLOCKDESC_RGBA_UNORM_SRGB,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_R8G8B8A8_UINT, SVGA3DBLOCKDESC_RGBA_UINT,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_R8G8B8A8_SINT, SVGA3DBLOCKDESC_RGBA_SINT,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_R16G16_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_R16G16_UINT, SVGA3DBLOCKDESC_RG_UINT,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_R16G16_SINT, SVGA3DBLOCKDESC_RG_SINT,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_R32_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_D32_FLOAT, SVGA3DBLOCKDESC_DEPTH_FP,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R32_UINT, SVGA3DBLOCKDESC_R_UINT,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R32_SINT, SVGA3DBLOCKDESC_R_SINT,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R24G8_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{0}, {8}, {24}, {0}},
+ {{0}, {24}, {0}, {0}}},
+
+ {SVGA3D_D24_UNORM_S8_UINT, SVGA3DBLOCKDESC_DS_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {8}, {24}, {0}},
+ {{0}, {24}, {0}, {0}}},
+
+ {SVGA3D_R24_UNORM_X8, SVGA3DBLOCKDESC_R_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {24}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_X24_G8_UINT, SVGA3DBLOCKDESC_G_UINT,
+ {1, 1, 1}, 4, 4,
+ {{0}, {8}, {0}, {0}},
+ {{0}, {24}, {0}, {0}}},
+
+ {SVGA3D_R8G8_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_R8G8_UNORM, SVGA3DBLOCKDESC_RG_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_R8G8_UINT, SVGA3DBLOCKDESC_RG_UINT,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_R8G8_SINT, SVGA3DBLOCKDESC_RG_SINT,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_R16_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R16_UNORM, SVGA3DBLOCKDESC_R_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R16_UINT, SVGA3DBLOCKDESC_R_UINT,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R16_SNORM, SVGA3DBLOCKDESC_R_SNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R16_SINT, SVGA3DBLOCKDESC_R_SINT,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R8_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R8_UNORM, SVGA3DBLOCKDESC_R_UNORM,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R8_UINT, SVGA3DBLOCKDESC_R_UINT,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R8_SNORM, SVGA3DBLOCKDESC_R_SNORM,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R8_SINT, SVGA3DBLOCKDESC_R_SINT,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_P8, SVGA3DBLOCKDESC_NONE,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {8}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R9G9B9E5_SHAREDEXP, SVGA3DBLOCKDESC_RGB_EXP,
+ {1, 1, 1}, 4, 4,
+ {{9}, {9}, {9}, {5}},
+ {{18}, {9}, {0}, {27}}},
+
+ {SVGA3D_R8G8_B8G8_UNORM, SVGA3DBLOCKDESC_NONE,
+ {2, 1, 1}, 4, 4,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {0}, {8}, {0}}},
+
+ {SVGA3D_G8R8_G8B8_UNORM, SVGA3DBLOCKDESC_NONE,
+ {2, 1, 1}, 4, 4,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_BC1_TYPELESS, SVGA3DBLOCKDESC_BC1_COMP_TYPELESS,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC1_UNORM_SRGB, SVGA3DBLOCKDESC_BC1_COMP_UNORM_SRGB,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC2_TYPELESS, SVGA3DBLOCKDESC_BC2_COMP_TYPELESS,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC2_UNORM_SRGB, SVGA3DBLOCKDESC_BC2_COMP_UNORM_SRGB,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC3_TYPELESS, SVGA3DBLOCKDESC_BC3_COMP_TYPELESS,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC3_UNORM_SRGB, SVGA3DBLOCKDESC_BC3_COMP_UNORM_SRGB,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC4_TYPELESS, SVGA3DBLOCKDESC_BC4_COMP_TYPELESS,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_ATI1, SVGA3DBLOCKDESC_BC4_COMP_UNORM,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC4_SNORM, SVGA3DBLOCKDESC_BC4_COMP_SNORM,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC5_TYPELESS, SVGA3DBLOCKDESC_BC5_COMP_TYPELESS,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_ATI2, SVGA3DBLOCKDESC_BC5_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC5_SNORM, SVGA3DBLOCKDESC_BC5_COMP_SNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{10}, {10}, {10}, {2}},
+ {{20}, {10}, {0}, {30}}},
+
+ {SVGA3D_B8G8R8A8_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_B8G8R8A8_UNORM_SRGB, SVGA3DBLOCKDESC_RGBA_UNORM_SRGB,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_B8G8R8X8_TYPELESS, SVGA3DBLOCKDESC_TYPELESS,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {0}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_B8G8R8X8_UNORM_SRGB, SVGA3DBLOCKDESC_RGB_UNORM_SRGB,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {0}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_Z_DF16, SVGA3DBLOCKDESC_DEPTH_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_Z_DF24, SVGA3DBLOCKDESC_DEPTH_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {24}, {0}},
+ {{0}, {0}, {8}, {0}}},
+
+ {SVGA3D_Z_D24S8_INT, SVGA3DBLOCKDESC_DS_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {8}, {24}, {0}},
+ {{0}, {0}, {8}, {0}}},
+
+ {SVGA3D_YV12, SVGA3DBLOCKDESC_YV12,
+ {2, 2, 1}, 6, 2,
+ {{0}, {0}, {48}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R32G32B32A32_FLOAT, SVGA3DBLOCKDESC_RGBA_FP,
+ {1, 1, 1}, 16, 16,
+ {{32}, {32}, {32}, {32}},
+ {{64}, {32}, {0}, {96}}},
+
+ {SVGA3D_R16G16B16A16_FLOAT, SVGA3DBLOCKDESC_RGBA_FP,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_R16G16B16A16_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 8, 8,
+ {{16}, {16}, {16}, {16}},
+ {{32}, {16}, {0}, {48}}},
+
+ {SVGA3D_R32G32_FLOAT, SVGA3DBLOCKDESC_RG_FP,
+ {1, 1, 1}, 8, 8,
+ {{0}, {32}, {32}, {0}},
+ {{0}, {32}, {0}, {0}}},
+
+ {SVGA3D_R10G10B10A2_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{10}, {10}, {10}, {2}},
+ {{20}, {10}, {0}, {30}}},
+
+ {SVGA3D_R8G8B8A8_SNORM, SVGA3DBLOCKDESC_RGBA_SNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{16}, {8}, {0}, {24}}},
+
+ {SVGA3D_R16G16_FLOAT, SVGA3DBLOCKDESC_RG_FP,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_R16G16_UNORM, SVGA3DBLOCKDESC_RG_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_R16G16_SNORM, SVGA3DBLOCKDESC_RG_SNORM,
+ {1, 1, 1}, 4, 4,
+ {{0}, {16}, {16}, {0}},
+ {{0}, {16}, {0}, {0}}},
+
+ {SVGA3D_R32_FLOAT, SVGA3DBLOCKDESC_R_FP,
+ {1, 1, 1}, 4, 4,
+ {{0}, {0}, {32}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_R8G8_SNORM, SVGA3DBLOCKDESC_RG_SNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {8}, {8}, {0}},
+ {{0}, {8}, {0}, {0}}},
+
+ {SVGA3D_R16_FLOAT, SVGA3DBLOCKDESC_R_FP,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_D16_UNORM, SVGA3DBLOCKDESC_DEPTH_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{0}, {0}, {16}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_A8_UNORM, SVGA3DBLOCKDESC_A_UNORM,
+ {1, 1, 1}, 1, 1,
+ {{0}, {0}, {0}, {8}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC1_UNORM, SVGA3DBLOCKDESC_BC1_COMP_UNORM,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC2_UNORM, SVGA3DBLOCKDESC_BC2_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC3_UNORM, SVGA3DBLOCKDESC_BC3_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_B5G6R5_UNORM, SVGA3DBLOCKDESC_RGB_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{5}, {6}, {5}, {0}},
+ {{0}, {5}, {11}, {0}}},
+
+ {SVGA3D_B5G5R5A1_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{5}, {5}, {5}, {1}},
+ {{0}, {5}, {10}, {15}}},
+
+ {SVGA3D_B8G8R8A8_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_B8G8R8X8_UNORM, SVGA3DBLOCKDESC_RGB_UNORM,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {0}},
+ {{0}, {8}, {16}, {24}}},
+
+ {SVGA3D_BC4_UNORM, SVGA3DBLOCKDESC_BC4_COMP_UNORM,
+ {4, 4, 1}, 8, 8,
+ {{0}, {0}, {64}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC5_UNORM, SVGA3DBLOCKDESC_BC5_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_B4G4R4A4_UNORM, SVGA3DBLOCKDESC_RGBA_UNORM,
+ {1, 1, 1}, 2, 2,
+ {{4}, {4}, {4}, {4}},
+ {{0}, {4}, {8}, {12}}},
+
+ {SVGA3D_BC6H_TYPELESS, SVGA3DBLOCKDESC_BC6H_COMP_TYPELESS,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC6H_UF16, SVGA3DBLOCKDESC_BC6H_COMP_UF16,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC6H_SF16, SVGA3DBLOCKDESC_BC6H_COMP_SF16,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC7_TYPELESS, SVGA3DBLOCKDESC_BC7_COMP_TYPELESS,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC7_UNORM, SVGA3DBLOCKDESC_BC7_COMP_UNORM,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_BC7_UNORM_SRGB, SVGA3DBLOCKDESC_BC7_COMP_UNORM_SRGB,
+ {4, 4, 1}, 16, 16,
+ {{0}, {0}, {128}, {0}},
+ {{0}, {0}, {0}, {0}}},
+
+ {SVGA3D_AYUV, SVGA3DBLOCKDESC_AYUV,
+ {1, 1, 1}, 4, 4,
+ {{8}, {8}, {8}, {8}},
+ {{0}, {8}, {16}, {24}}},
+};
+
+static inline u32 clamped_umul32(u32 a, u32 b)
+{
+ uint64_t tmp = (uint64_t) a*b;
+ return (tmp > (uint64_t) ((u32) -1)) ? (u32) -1 : tmp;
+}
+
+/**
+ * svga3dsurface_get_desc - Look up the appropriate SVGA3dSurfaceDesc for the
+ * given format.
+ */
+static inline const struct svga3d_surface_desc *
+svga3dsurface_get_desc(SVGA3dSurfaceFormat format)
+{
+ if (format < ARRAY_SIZE(svga3d_surface_descs))
+ return &svga3d_surface_descs[format];
+
+ return &svga3d_surface_descs[SVGA3D_FORMAT_INVALID];
+}
+
+/**
+ * svga3dsurface_get_mip_size - Given a base level size and the mip level,
+ * compute the size of the mip level.
+ */
+static inline surf_size_struct
+svga3dsurface_get_mip_size(surf_size_struct base_level, u32 mip_level)
+{
+ surf_size_struct size;
+
+ size.width = max_t(u32, base_level.width >> mip_level, 1);
+ size.height = max_t(u32, base_level.height >> mip_level, 1);
+ size.depth = max_t(u32, base_level.depth >> mip_level, 1);
+ size.pad64 = 0;
+
+ return size;
+}
+
+static inline void
+svga3dsurface_get_size_in_blocks(const struct svga3d_surface_desc *desc,
+ const surf_size_struct *pixel_size,
+ surf_size_struct *block_size)
+{
+ block_size->width = __KERNEL_DIV_ROUND_UP(pixel_size->width,
+ desc->block_size.width);
+ block_size->height = __KERNEL_DIV_ROUND_UP(pixel_size->height,
+ desc->block_size.height);
+ block_size->depth = __KERNEL_DIV_ROUND_UP(pixel_size->depth,
+ desc->block_size.depth);
+}
+
+static inline bool
+svga3dsurface_is_planar_surface(const struct svga3d_surface_desc *desc)
+{
+ return (desc->block_desc & SVGA3DBLOCKDESC_PLANAR_YUV) != 0;
+}
+
+static inline u32
+svga3dsurface_calculate_pitch(const struct svga3d_surface_desc *desc,
+ const surf_size_struct *size)
+{
+ u32 pitch;
+ surf_size_struct blocks;
+
+ svga3dsurface_get_size_in_blocks(desc, size, &blocks);
+
+ pitch = blocks.width * desc->pitch_bytes_per_block;
+
+ return pitch;
+}
+
+/**
+ * svga3dsurface_get_image_buffer_size - Calculates image buffer size.
+ *
+ * Return the number of bytes of buffer space required to store one image of a
+ * surface, optionally using the specified pitch.
+ *
+ * If pitch is zero, it is assumed that rows are tightly packed.
+ *
+ * This function is overflow-safe. If the result would have overflowed, instead
+ * we return MAX_UINT32.
+ */
+static inline u32
+svga3dsurface_get_image_buffer_size(const struct svga3d_surface_desc *desc,
+ const surf_size_struct *size,
+ u32 pitch)
+{
+ surf_size_struct image_blocks;
+ u32 slice_size, total_size;
+
+ svga3dsurface_get_size_in_blocks(desc, size, &image_blocks);
+
+ if (svga3dsurface_is_planar_surface(desc)) {
+ total_size = clamped_umul32(image_blocks.width,
+ image_blocks.height);
+ total_size = clamped_umul32(total_size, image_blocks.depth);
+ total_size = clamped_umul32(total_size, desc->bytes_per_block);
+ return total_size;
+ }
+
+ if (pitch == 0)
+ pitch = svga3dsurface_calculate_pitch(desc, size);
+
+ slice_size = clamped_umul32(image_blocks.height, pitch);
+ total_size = clamped_umul32(slice_size, image_blocks.depth);
+
+ return total_size;
+}
+
+/**
+ * svga3dsurface_get_serialized_size - Get the serialized size for the image.
+ */
+static inline u32
+svga3dsurface_get_serialized_size(SVGA3dSurfaceFormat format,
+ surf_size_struct base_level_size,
+ u32 num_mip_levels,
+ u32 num_layers)
+{
+ const struct svga3d_surface_desc *desc = svga3dsurface_get_desc(format);
+ u32 total_size = 0;
+ u32 mip;
+
+ for (mip = 0; mip < num_mip_levels; mip++) {
+ surf_size_struct size =
+ svga3dsurface_get_mip_size(base_level_size, mip);
+ total_size += svga3dsurface_get_image_buffer_size(desc,
+ &size, 0);
+ }
+
+ return total_size * num_layers;
+}
+
+/**
+ * svga3dsurface_get_serialized_size_extended - Returns the number of bytes
+ * required for a surface with given parameters. Support for sample count.
+ */
+static inline u32
+svga3dsurface_get_serialized_size_extended(SVGA3dSurfaceFormat format,
+ surf_size_struct base_level_size,
+ u32 num_mip_levels,
+ u32 num_layers,
+ u32 num_samples)
+{
+ uint64_t total_size =
+ svga3dsurface_get_serialized_size(format,
+ base_level_size,
+ num_mip_levels,
+ num_layers);
+ total_size *= max_t(u32, 1, num_samples);
+
+ return min_t(uint64_t, total_size, (uint64_t)U32_MAX);
+}
+
+/**
+ * svga3dsurface_get_pixel_offset - Compute the offset (in bytes) to a pixel
+ * in an image (or volume).
+ *
+ * @width: The image width in pixels.
+ * @height: The image height in pixels
+ */
+static inline u32
+svga3dsurface_get_pixel_offset(SVGA3dSurfaceFormat format,
+ u32 width, u32 height,
+ u32 x, u32 y, u32 z)
+{
+ const struct svga3d_surface_desc *desc = svga3dsurface_get_desc(format);
+ const u32 bw = desc->block_size.width, bh = desc->block_size.height;
+ const u32 bd = desc->block_size.depth;
+ const u32 rowstride = __KERNEL_DIV_ROUND_UP(width, bw) *
+ desc->bytes_per_block;
+ const u32 imgstride = __KERNEL_DIV_ROUND_UP(height, bh) * rowstride;
+ const u32 offset = (z / bd * imgstride +
+ y / bh * rowstride +
+ x / bw * desc->bytes_per_block);
+ return offset;
+}
+
+static inline u32
+svga3dsurface_get_image_offset(SVGA3dSurfaceFormat format,
+ surf_size_struct baseLevelSize,
+ u32 numMipLevels,
+ u32 face,
+ u32 mip)
+
+{
+ u32 offset;
+ u32 mipChainBytes;
+ u32 mipChainBytesToLevel;
+ u32 i;
+ const struct svga3d_surface_desc *desc;
+ surf_size_struct mipSize;
+ u32 bytes;
+
+ desc = svga3dsurface_get_desc(format);
+
+ mipChainBytes = 0;
+ mipChainBytesToLevel = 0;
+ for (i = 0; i < numMipLevels; i++) {
+ mipSize = svga3dsurface_get_mip_size(baseLevelSize, i);
+ bytes = svga3dsurface_get_image_buffer_size(desc, &mipSize, 0);
+ mipChainBytes += bytes;
+ if (i < mip)
+ mipChainBytesToLevel += bytes;
+ }
+
+ offset = mipChainBytes * face + mipChainBytesToLevel;
+
+ return offset;
+}
+
+
+/**
+ * svga3dsurface_is_gb_screen_target_format - Is the specified format usable as
+ * a ScreenTarget?
+ * (with just the GBObjects cap-bit
+ * set)
+ * @format: format to queried
+ *
+ * RETURNS:
+ * true if queried format is valid for screen targets
+ */
+static inline bool
+svga3dsurface_is_gb_screen_target_format(SVGA3dSurfaceFormat format)
+{
+ return (format == SVGA3D_X8R8G8B8 ||
+ format == SVGA3D_A8R8G8B8 ||
+ format == SVGA3D_R5G6B5 ||
+ format == SVGA3D_X1R5G5B5 ||
+ format == SVGA3D_A1R5G5B5 ||
+ format == SVGA3D_P8);
+}
+
+
+/**
+ * svga3dsurface_is_dx_screen_target_format - Is the specified format usable as
+ * a ScreenTarget?
+ * (with DX10 enabled)
+ *
+ * @format: format to queried
+ *
+ * Results:
+ * true if queried format is valid for screen targets
+ */
+static inline bool
+svga3dsurface_is_dx_screen_target_format(SVGA3dSurfaceFormat format)
+{
+ return (format == SVGA3D_R8G8B8A8_UNORM ||
+ format == SVGA3D_B8G8R8A8_UNORM ||
+ format == SVGA3D_B8G8R8X8_UNORM);
+}
+
+
+/**
+ * svga3dsurface_is_screen_target_format - Is the specified format usable as a
+ * ScreenTarget?
+ * (for some combination of caps)
+ *
+ * @format: format to queried
+ *
+ * Results:
+ * true if queried format is valid for screen targets
+ */
+static inline bool
+svga3dsurface_is_screen_target_format(SVGA3dSurfaceFormat format)
+{
+ if (svga3dsurface_is_gb_screen_target_format(format)) {
+ return true;
+ }
+ return svga3dsurface_is_dx_screen_target_format(format);
+}
+
+#ifndef VBOX
+/**
+ * struct svga3dsurface_mip - Mimpmap level information
+ * @bytes: Bytes required in the backing store of this mipmap level.
+ * @img_stride: Byte stride per image.
+ * @row_stride: Byte stride per block row.
+ * @size: The size of the mipmap.
+ */
+struct svga3dsurface_mip {
+ size_t bytes;
+ size_t img_stride;
+ size_t row_stride;
+ struct drm_vmw_size size;
+
+};
+
+/**
+ * struct svga3dsurface_cache - Cached surface information
+ * @desc: Pointer to the surface descriptor
+ * @mip: Array of mipmap level information. Valid size is @num_mip_levels.
+ * @mip_chain_bytes: Bytes required in the backing store for the whole chain
+ * of mip levels.
+ * @sheet_bytes: Bytes required in the backing store for a sheet
+ * representing a single sample.
+ * @num_mip_levels: Valid size of the @mip array. Number of mipmap levels in
+ * a chain.
+ * @num_layers: Number of slices in an array texture or number of faces in
+ * a cubemap texture.
+ */
+struct svga3dsurface_cache {
+ const struct svga3d_surface_desc *desc;
+ struct svga3dsurface_mip mip[DRM_VMW_MAX_MIP_LEVELS];
+ size_t mip_chain_bytes;
+ size_t sheet_bytes;
+ u32 num_mip_levels;
+ u32 num_layers;
+};
+
+/**
+ * struct svga3dsurface_loc - Surface location
+ * @sheet: The multisample sheet.
+ * @sub_resource: Surface subresource. Defined as layer * num_mip_levels +
+ * mip_level.
+ * @x: X coordinate.
+ * @y: Y coordinate.
+ * @z: Z coordinate.
+ */
+struct svga3dsurface_loc {
+ u32 sheet;
+ u32 sub_resource;
+ u32 x, y, z;
+};
+
+/**
+ * svga3dsurface_subres - Compute the subresource from layer and mipmap.
+ * @cache: Surface layout data.
+ * @mip_level: The mipmap level.
+ * @layer: The surface layer (face or array slice).
+ *
+ * Return: The subresource.
+ */
+static inline u32 svga3dsurface_subres(const struct svga3dsurface_cache *cache,
+ u32 mip_level, u32 layer)
+{
+ return cache->num_mip_levels * layer + mip_level;
+}
+
+/**
+ * svga3dsurface_setup_cache - Build a surface cache entry
+ * @size: The surface base level dimensions.
+ * @format: The surface format.
+ * @num_mip_levels: Number of mipmap levels.
+ * @num_layers: Number of layers.
+ * @cache: Pointer to a struct svga3dsurface_cach object to be filled in.
+ *
+ * Return: Zero on success, -EINVAL on invalid surface layout.
+ */
+static inline int svga3dsurface_setup_cache(const struct drm_vmw_size *size,
+ SVGA3dSurfaceFormat format,
+ u32 num_mip_levels,
+ u32 num_layers,
+ u32 num_samples,
+ struct svga3dsurface_cache *cache)
+{
+ const struct svga3d_surface_desc *desc;
+ u32 i;
+
+ memset(cache, 0, sizeof(*cache));
+ cache->desc = desc = svga3dsurface_get_desc(format);
+ cache->num_mip_levels = num_mip_levels;
+ cache->num_layers = num_layers;
+ for (i = 0; i < cache->num_mip_levels; i++) {
+ struct svga3dsurface_mip *mip = &cache->mip[i];
+
+ mip->size = svga3dsurface_get_mip_size(*size, i);
+ mip->bytes = svga3dsurface_get_image_buffer_size
+ (desc, &mip->size, 0);
+ mip->row_stride =
+ __KERNEL_DIV_ROUND_UP(mip->size.width,
+ desc->block_size.width) *
+ desc->bytes_per_block * num_samples;
+ if (!mip->row_stride)
+ goto invalid_dim;
+
+ mip->img_stride =
+ __KERNEL_DIV_ROUND_UP(mip->size.height,
+ desc->block_size.height) *
+ mip->row_stride;
+ if (!mip->img_stride)
+ goto invalid_dim;
+
+ cache->mip_chain_bytes += mip->bytes;
+ }
+ cache->sheet_bytes = cache->mip_chain_bytes * num_layers;
+ if (!cache->sheet_bytes)
+ goto invalid_dim;
+
+ return 0;
+
+invalid_dim:
+ VMW_DEBUG_USER("Invalid surface layout for dirty tracking.\n");
+ return -EINVAL;
+}
+
+/**
+ * svga3dsurface_get_loc - Get a surface location from an offset into the
+ * backing store
+ * @cache: Surface layout data.
+ * @loc: Pointer to a struct svga3dsurface_loc to be filled in.
+ * @offset: Offset into the surface backing store.
+ */
+static inline void
+svga3dsurface_get_loc(const struct svga3dsurface_cache *cache,
+ struct svga3dsurface_loc *loc,
+ size_t offset)
+{
+ const struct svga3dsurface_mip *mip = &cache->mip[0];
+ const struct svga3d_surface_desc *desc = cache->desc;
+ u32 layer;
+ int i;
+
+ loc->sheet = offset / cache->sheet_bytes;
+ offset -= loc->sheet * cache->sheet_bytes;
+
+ layer = offset / cache->mip_chain_bytes;
+ offset -= layer * cache->mip_chain_bytes;
+ for (i = 0; i < cache->num_mip_levels; ++i, ++mip) {
+ if (mip->bytes > offset)
+ break;
+ offset -= mip->bytes;
+ }
+
+ loc->sub_resource = svga3dsurface_subres(cache, i, layer);
+ loc->z = offset / mip->img_stride;
+ offset -= loc->z * mip->img_stride;
+ loc->z *= desc->block_size.depth;
+ loc->y = offset / mip->row_stride;
+ offset -= loc->y * mip->row_stride;
+ loc->y *= desc->block_size.height;
+ loc->x = offset / desc->bytes_per_block;
+ loc->x *= desc->block_size.width;
+}
+
+/**
+ * svga3dsurface_inc_loc - Clamp increment a surface location with one block
+ * size
+ * in each dimension.
+ * @loc: Pointer to a struct svga3dsurface_loc to be incremented.
+ *
+ * When computing the size of a range as size = end - start, the range does not
+ * include the end element. However a location representing the last byte
+ * of a touched region in the backing store *is* included in the range.
+ * This function modifies such a location to match the end definition
+ * given as start + size which is the one used in a SVGA3dBox.
+ */
+static inline void
+svga3dsurface_inc_loc(const struct svga3dsurface_cache *cache,
+ struct svga3dsurface_loc *loc)
+{
+ const struct svga3d_surface_desc *desc = cache->desc;
+ u32 mip = loc->sub_resource % cache->num_mip_levels;
+ const struct drm_vmw_size *size = &cache->mip[mip].size;
+
+ loc->sub_resource++;
+ loc->x += desc->block_size.width;
+ if (loc->x > size->width)
+ loc->x = size->width;
+ loc->y += desc->block_size.height;
+ if (loc->y > size->height)
+ loc->y = size->height;
+ loc->z += desc->block_size.depth;
+ if (loc->z > size->depth)
+ loc->z = size->depth;
+}
+
+/**
+ * svga3dsurface_min_loc - The start location in a subresource
+ * @cache: Surface layout data.
+ * @sub_resource: The subresource.
+ * @loc: Pointer to a struct svga3dsurface_loc to be filled in.
+ */
+static inline void
+svga3dsurface_min_loc(const struct svga3dsurface_cache *cache,
+ u32 sub_resource,
+ struct svga3dsurface_loc *loc)
+{
+ loc->sheet = 0;
+ loc->sub_resource = sub_resource;
+ loc->x = loc->y = loc->z = 0;
+}
+
+/**
+ * svga3dsurface_min_loc - The end location in a subresource
+ * @cache: Surface layout data.
+ * @sub_resource: The subresource.
+ * @loc: Pointer to a struct svga3dsurface_loc to be filled in.
+ *
+ * Following the end definition given in svga3dsurface_inc_loc(),
+ * Compute the end location of a surface subresource.
+ */
+static inline void
+svga3dsurface_max_loc(const struct svga3dsurface_cache *cache,
+ u32 sub_resource,
+ struct svga3dsurface_loc *loc)
+{
+ const struct drm_vmw_size *size;
+ u32 mip;
+
+ loc->sheet = 0;
+ loc->sub_resource = sub_resource + 1;
+ mip = sub_resource % cache->num_mip_levels;
+ size = &cache->mip[mip].size;
+ loc->x = size->width;
+ loc->y = size->height;
+ loc->z = size->depth;
+}
+#endif /* !VBOX */
+
+#endif /* _SVGA3D_SURFACEDEFS_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga3d_types.h b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_types.h
new file mode 100644
index 00000000..77e338a6
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga3d_types.h
@@ -0,0 +1,2000 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2012-2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga3d_types.h --
+ *
+ * SVGA 3d hardware definitions for basic types
+ */
+
+#ifndef _SVGA3D_TYPES_H_
+#define _SVGA3D_TYPES_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+#define INCLUDE_ALLOW_VMCORE
+
+#include "includeCheck.h"
+
+/*
+ * Generic Types
+ */
+
+#define SVGA3D_INVALID_ID ((uint32)-1)
+
+typedef uint8 SVGABool8; /* 8-bit Bool definition */
+typedef uint32 SVGA3dBool; /* 32-bit Bool definition */
+typedef uint32 SVGA3dColor; /* a, r, g, b */
+
+typedef uint32 SVGA3dSurfaceId;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 numerator;
+ uint32 denominator;
+}
+#include "vmware_pack_end.h"
+SVGA3dFraction64;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCopyRect {
+ uint32 x;
+ uint32 y;
+ uint32 w;
+ uint32 h;
+ uint32 srcx;
+ uint32 srcy;
+}
+#include "vmware_pack_end.h"
+SVGA3dCopyRect;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dCopyBox {
+ uint32 x;
+ uint32 y;
+ uint32 z;
+ uint32 w;
+ uint32 h;
+ uint32 d;
+ uint32 srcx;
+ uint32 srcy;
+ uint32 srcz;
+}
+#include "vmware_pack_end.h"
+SVGA3dCopyBox;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dRect {
+ uint32 x;
+ uint32 y;
+ uint32 w;
+ uint32 h;
+}
+#include "vmware_pack_end.h"
+SVGA3dRect;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 x;
+ uint32 y;
+ uint32 z;
+ uint32 w;
+ uint32 h;
+ uint32 d;
+}
+#include "vmware_pack_end.h"
+SVGA3dBox;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ int32 x;
+ int32 y;
+ int32 z;
+ int32 w;
+ int32 h;
+ int32 d;
+}
+#include "vmware_pack_end.h"
+SVGA3dSignedBox;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 x;
+ uint32 y;
+ uint32 z;
+}
+#include "vmware_pack_end.h"
+SVGA3dPoint;
+
+/*
+ * Surface formats.
+ */
+typedef enum SVGA3dSurfaceFormat {
+ SVGA3D_FORMAT_INVALID = 0,
+
+ SVGA3D_X8R8G8B8 = 1,
+ SVGA3D_FORMAT_MIN = 1,
+
+ SVGA3D_A8R8G8B8 = 2,
+
+ SVGA3D_R5G6B5 = 3,
+ SVGA3D_X1R5G5B5 = 4,
+ SVGA3D_A1R5G5B5 = 5,
+ SVGA3D_A4R4G4B4 = 6,
+
+ SVGA3D_Z_D32 = 7,
+ SVGA3D_Z_D16 = 8,
+ SVGA3D_Z_D24S8 = 9,
+ SVGA3D_Z_D15S1 = 10,
+
+ SVGA3D_LUMINANCE8 = 11,
+ SVGA3D_LUMINANCE4_ALPHA4 = 12,
+ SVGA3D_LUMINANCE16 = 13,
+ SVGA3D_LUMINANCE8_ALPHA8 = 14,
+
+ SVGA3D_DXT1 = 15,
+ SVGA3D_DXT2 = 16,
+ SVGA3D_DXT3 = 17,
+ SVGA3D_DXT4 = 18,
+ SVGA3D_DXT5 = 19,
+
+ SVGA3D_BUMPU8V8 = 20,
+ SVGA3D_BUMPL6V5U5 = 21,
+ SVGA3D_BUMPX8L8V8U8 = 22,
+ SVGA3D_FORMAT_DEAD1 = 23,
+
+ SVGA3D_ARGB_S10E5 = 24, /* 16-bit floating-point ARGB */
+ SVGA3D_ARGB_S23E8 = 25, /* 32-bit floating-point ARGB */
+
+ SVGA3D_A2R10G10B10 = 26,
+
+ /* signed formats */
+ SVGA3D_V8U8 = 27,
+ SVGA3D_Q8W8V8U8 = 28,
+ SVGA3D_CxV8U8 = 29,
+
+ /* mixed formats */
+ SVGA3D_X8L8V8U8 = 30,
+ SVGA3D_A2W10V10U10 = 31,
+
+ SVGA3D_ALPHA8 = 32,
+
+ /* Single- and dual-component floating point formats */
+ SVGA3D_R_S10E5 = 33,
+ SVGA3D_R_S23E8 = 34,
+ SVGA3D_RG_S10E5 = 35,
+ SVGA3D_RG_S23E8 = 36,
+
+ SVGA3D_BUFFER = 37,
+
+ SVGA3D_Z_D24X8 = 38,
+
+ SVGA3D_V16U16 = 39,
+
+ SVGA3D_G16R16 = 40,
+ SVGA3D_A16B16G16R16 = 41,
+
+ /* Packed Video formats */
+ SVGA3D_UYVY = 42,
+ SVGA3D_YUY2 = 43,
+
+ /* Planar video formats */
+ SVGA3D_NV12 = 44,
+
+ SVGA3D_FORMAT_DEAD2 = 45,
+
+ SVGA3D_R32G32B32A32_TYPELESS = 46,
+ SVGA3D_R32G32B32A32_UINT = 47,
+ SVGA3D_R32G32B32A32_SINT = 48,
+ SVGA3D_R32G32B32_TYPELESS = 49,
+ SVGA3D_R32G32B32_FLOAT = 50,
+ SVGA3D_R32G32B32_UINT = 51,
+ SVGA3D_R32G32B32_SINT = 52,
+ SVGA3D_R16G16B16A16_TYPELESS = 53,
+ SVGA3D_R16G16B16A16_UINT = 54,
+ SVGA3D_R16G16B16A16_SNORM = 55,
+ SVGA3D_R16G16B16A16_SINT = 56,
+ SVGA3D_R32G32_TYPELESS = 57,
+ SVGA3D_R32G32_UINT = 58,
+ SVGA3D_R32G32_SINT = 59,
+ SVGA3D_R32G8X24_TYPELESS = 60,
+ SVGA3D_D32_FLOAT_S8X24_UINT = 61,
+ SVGA3D_R32_FLOAT_X8X24 = 62,
+ SVGA3D_X32_G8X24_UINT = 63,
+ SVGA3D_R10G10B10A2_TYPELESS = 64,
+ SVGA3D_R10G10B10A2_UINT = 65,
+ SVGA3D_R11G11B10_FLOAT = 66,
+ SVGA3D_R8G8B8A8_TYPELESS = 67,
+ SVGA3D_R8G8B8A8_UNORM = 68,
+ SVGA3D_R8G8B8A8_UNORM_SRGB = 69,
+ SVGA3D_R8G8B8A8_UINT = 70,
+ SVGA3D_R8G8B8A8_SINT = 71,
+ SVGA3D_R16G16_TYPELESS = 72,
+ SVGA3D_R16G16_UINT = 73,
+ SVGA3D_R16G16_SINT = 74,
+ SVGA3D_R32_TYPELESS = 75,
+ SVGA3D_D32_FLOAT = 76,
+ SVGA3D_R32_UINT = 77,
+ SVGA3D_R32_SINT = 78,
+ SVGA3D_R24G8_TYPELESS = 79,
+ SVGA3D_D24_UNORM_S8_UINT = 80,
+ SVGA3D_R24_UNORM_X8 = 81,
+ SVGA3D_X24_G8_UINT = 82,
+ SVGA3D_R8G8_TYPELESS = 83,
+ SVGA3D_R8G8_UNORM = 84,
+ SVGA3D_R8G8_UINT = 85,
+ SVGA3D_R8G8_SINT = 86,
+ SVGA3D_R16_TYPELESS = 87,
+ SVGA3D_R16_UNORM = 88,
+ SVGA3D_R16_UINT = 89,
+ SVGA3D_R16_SNORM = 90,
+ SVGA3D_R16_SINT = 91,
+ SVGA3D_R8_TYPELESS = 92,
+ SVGA3D_R8_UNORM = 93,
+ SVGA3D_R8_UINT = 94,
+ SVGA3D_R8_SNORM = 95,
+ SVGA3D_R8_SINT = 96,
+ SVGA3D_P8 = 97,
+ SVGA3D_R9G9B9E5_SHAREDEXP = 98,
+ SVGA3D_R8G8_B8G8_UNORM = 99,
+ SVGA3D_G8R8_G8B8_UNORM = 100,
+ SVGA3D_BC1_TYPELESS = 101,
+ SVGA3D_BC1_UNORM_SRGB = 102,
+ SVGA3D_BC2_TYPELESS = 103,
+ SVGA3D_BC2_UNORM_SRGB = 104,
+ SVGA3D_BC3_TYPELESS = 105,
+ SVGA3D_BC3_UNORM_SRGB = 106,
+ SVGA3D_BC4_TYPELESS = 107,
+ SVGA3D_ATI1 = 108, /* DX9-specific BC4_UNORM */
+ SVGA3D_BC4_SNORM = 109,
+ SVGA3D_BC5_TYPELESS = 110,
+ SVGA3D_ATI2 = 111, /* DX9-specific BC5_UNORM */
+ SVGA3D_BC5_SNORM = 112,
+ SVGA3D_R10G10B10_XR_BIAS_A2_UNORM = 113,
+ SVGA3D_B8G8R8A8_TYPELESS = 114,
+ SVGA3D_B8G8R8A8_UNORM_SRGB = 115,
+ SVGA3D_B8G8R8X8_TYPELESS = 116,
+ SVGA3D_B8G8R8X8_UNORM_SRGB = 117,
+
+ /* Advanced depth formats. */
+ SVGA3D_Z_DF16 = 118,
+ SVGA3D_Z_DF24 = 119,
+ SVGA3D_Z_D24S8_INT = 120,
+
+ /* Planar video formats. */
+ SVGA3D_YV12 = 121,
+
+ SVGA3D_R32G32B32A32_FLOAT = 122,
+ SVGA3D_R16G16B16A16_FLOAT = 123,
+ SVGA3D_R16G16B16A16_UNORM = 124,
+ SVGA3D_R32G32_FLOAT = 125,
+ SVGA3D_R10G10B10A2_UNORM = 126,
+ SVGA3D_R8G8B8A8_SNORM = 127,
+ SVGA3D_R16G16_FLOAT = 128,
+ SVGA3D_R16G16_UNORM = 129,
+ SVGA3D_R16G16_SNORM = 130,
+ SVGA3D_R32_FLOAT = 131,
+ SVGA3D_R8G8_SNORM = 132,
+ SVGA3D_R16_FLOAT = 133,
+ SVGA3D_D16_UNORM = 134,
+ SVGA3D_A8_UNORM = 135,
+ SVGA3D_BC1_UNORM = 136,
+ SVGA3D_BC2_UNORM = 137,
+ SVGA3D_BC3_UNORM = 138,
+ SVGA3D_B5G6R5_UNORM = 139,
+ SVGA3D_B5G5R5A1_UNORM = 140,
+ SVGA3D_B8G8R8A8_UNORM = 141,
+ SVGA3D_B8G8R8X8_UNORM = 142,
+ SVGA3D_BC4_UNORM = 143,
+ SVGA3D_BC5_UNORM = 144,
+ SVGA3D_B4G4R4A4_UNORM = 145,
+
+ /* DX11 compressed formats */
+ SVGA3D_BC6H_TYPELESS = 146,
+ SVGA3D_BC6H_UF16 = 147,
+ SVGA3D_BC6H_SF16 = 148,
+ SVGA3D_BC7_TYPELESS = 149,
+ SVGA3D_BC7_UNORM = 150,
+ SVGA3D_BC7_UNORM_SRGB = 151,
+
+ /* Video format with alpha */
+ SVGA3D_AYUV = 152,
+
+ SVGA3D_FORMAT_MAX
+} SVGA3dSurfaceFormat;
+
+/*
+ * SVGA3d Surface Flags --
+ */
+#define SVGA3D_SURFACE_CUBEMAP (1 << 0)
+
+/*
+ * HINT flags are not enforced by the device but are useful for
+ * performance.
+ */
+#define SVGA3D_SURFACE_HINT_STATIC (CONST64U(1) << 1)
+#define SVGA3D_SURFACE_HINT_DYNAMIC (CONST64U(1) << 2)
+#define SVGA3D_SURFACE_HINT_INDEXBUFFER (CONST64U(1) << 3)
+#define SVGA3D_SURFACE_HINT_VERTEXBUFFER (CONST64U(1) << 4)
+#define SVGA3D_SURFACE_HINT_TEXTURE (CONST64U(1) << 5)
+#define SVGA3D_SURFACE_HINT_RENDERTARGET (CONST64U(1) << 6)
+#define SVGA3D_SURFACE_HINT_DEPTHSTENCIL (CONST64U(1) << 7)
+#define SVGA3D_SURFACE_HINT_WRITEONLY (CONST64U(1) << 8)
+#define SVGA3D_SURFACE_DEAD2 (CONST64U(1) << 9)
+#define SVGA3D_SURFACE_AUTOGENMIPMAPS (CONST64U(1) << 10)
+
+#define SVGA3D_SURFACE_DEAD1 (CONST64U(1) << 11)
+
+/*
+ * Is this surface using a base-level pitch for it's mob backing?
+ *
+ * This flag is not intended to be set by guest-drivers, but is instead
+ * set by the device when the surface is bound to a mob with a specified
+ * pitch.
+ */
+#define SVGA3D_SURFACE_MOB_PITCH (CONST64U(1) << 12)
+
+#define SVGA3D_SURFACE_INACTIVE (CONST64U(1) << 13)
+#define SVGA3D_SURFACE_HINT_RT_LOCKABLE (CONST64U(1) << 14)
+#define SVGA3D_SURFACE_VOLUME (CONST64U(1) << 15)
+
+/*
+ * Required to be set on a surface to bind it to a screen target.
+ */
+#define SVGA3D_SURFACE_SCREENTARGET (CONST64U(1) << 16)
+
+/*
+ * Align images in the guest-backing mob to 16-bytes.
+ */
+#define SVGA3D_SURFACE_ALIGN16 (CONST64U(1) << 17)
+
+#define SVGA3D_SURFACE_1D (CONST64U(1) << 18)
+#define SVGA3D_SURFACE_ARRAY (CONST64U(1) << 19)
+
+/*
+ * Bind flags.
+ * These are enforced for any surface defined with DefineGBSurface_v2.
+ */
+#define SVGA3D_SURFACE_BIND_VERTEX_BUFFER (CONST64U(1) << 20)
+#define SVGA3D_SURFACE_BIND_INDEX_BUFFER (CONST64U(1) << 21)
+#define SVGA3D_SURFACE_BIND_CONSTANT_BUFFER (CONST64U(1) << 22)
+#define SVGA3D_SURFACE_BIND_SHADER_RESOURCE (CONST64U(1) << 23)
+#define SVGA3D_SURFACE_BIND_RENDER_TARGET (CONST64U(1) << 24)
+#define SVGA3D_SURFACE_BIND_DEPTH_STENCIL (CONST64U(1) << 25)
+#define SVGA3D_SURFACE_BIND_STREAM_OUTPUT (CONST64U(1) << 26)
+
+/*
+ * The STAGING flags notes that the surface will not be used directly by the
+ * drawing pipeline, i.e. that it will not be bound to any bind point.
+ * Staging surfaces may be used by copy operations to move data in and out
+ * of other surfaces. No bind flags may be set on surfaces with this flag.
+ *
+ * The HINT_INDIRECT_UPDATE flag suggests that the surface will receive
+ * updates indirectly, i.e. the surface will not be updated directly, but
+ * will receive copies from staging surfaces.
+ */
+#define SVGA3D_SURFACE_STAGING_UPLOAD (CONST64U(1) << 27)
+#define SVGA3D_SURFACE_STAGING_DOWNLOAD (CONST64U(1) << 28)
+#define SVGA3D_SURFACE_HINT_INDIRECT_UPDATE (CONST64U(1) << 29)
+
+/*
+ * Setting this flag allow this surface to be used with the
+ * SVGA_3D_CMD_DX_TRANSFER_FROM_BUFFER command. It is only valid for
+ * buffer surfaces, and no bind flags are allowed to be set on surfaces
+ * with this flag except SVGA3D_SURFACE_TRANSFER_TO_BUFFER.
+ */
+#define SVGA3D_SURFACE_TRANSFER_FROM_BUFFER (CONST64U(1) << 30)
+
+/*
+ * Reserved for video operations.
+ */
+#define SVGA3D_SURFACE_RESERVED1 (CONST64U(1) << 31)
+
+/*
+ * Specifies that a surface is multisample, and therefore requires the full
+ * mob-backing to store all the samples.
+ */
+#define SVGA3D_SURFACE_MULTISAMPLE (CONST64U(1) << 32)
+
+/*
+ * Specified that the surface is allowed to be bound to a UAView.
+ */
+#define SVGA3D_SURFACE_BIND_UAVIEW (CONST64U(1) << 33)
+
+/*
+ * Setting this flag allow this surface to be used with the
+ * SVGA_3D_CMD_DX_TRANSFER_TO_BUFFER command. It is only valid for
+ * buffer surfaces, and no bind flags are allowed to be set on surfaces
+ * with this flag except SVGA3D_SURFACE_TRANSFER_FROM_BUFFER.
+ */
+#define SVGA3D_SURFACE_TRANSFER_TO_BUFFER (CONST64U(1) << 34)
+
+#define SVGA3D_SURFACE_BIND_LOGICOPS (CONST64U(1) << 35)
+
+/*
+ * Optional flags for use with SVGA3D_SURFACE_BIND_UAVIEW
+ */
+#define SVGA3D_SURFACE_BIND_RAW_VIEWS (CONST64U(1) << 36)
+#define SVGA3D_SURFACE_BUFFER_STRUCTURED (CONST64U(1) << 37)
+
+#define SVGA3D_SURFACE_DRAWINDIRECT_ARGS (CONST64U(1) << 38)
+#define SVGA3D_SURFACE_RESOURCE_CLAMP (CONST64U(1) << 39)
+
+#define SVGA3D_SURFACE_FLAG_MAX (CONST64U(1) << 40)
+
+/*
+ * Surface flags types:
+ *
+ * SVGA3dSurface1Flags: Lower 32-bits of flags.
+ * SVGA3dSurface2Flags: Upper 32-bits of flags.
+ * SVGA3dSurfaceAllFlags: Full 64-bits of flags.
+ */
+typedef uint32 SVGA3dSurface1Flags;
+typedef uint32 SVGA3dSurface2Flags;
+typedef uint64 SVGA3dSurfaceAllFlags;
+
+#define SVGA3D_SURFACE_FLAGS1_MASK ((uint64_t)MAX_UINT32)
+#define SVGA3D_SURFACE_FLAGS2_MASK (MAX_UINT64 & ~SVGA3D_SURFACE_FLAGS1_MASK)
+
+#define SVGA3D_SURFACE_HB_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_MOB_PITCH | \
+ SVGA3D_SURFACE_SCREENTARGET | \
+ SVGA3D_SURFACE_ALIGN16 | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD | \
+ SVGA3D_SURFACE_HINT_INDIRECT_UPDATE | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_RESERVED1 | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_LOGICOPS | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_HB_PRESENT_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_RESERVED1 | \
+ SVGA3D_SURFACE_MULTISAMPLE \
+ )
+
+#define SVGA3D_SURFACE_2D_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_RESERVED1 | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_BASICOPS_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_RESERVED1 | \
+ SVGA3D_SURFACE_MULTISAMPLE \
+ )
+
+#define SVGA3D_SURFACE_SCREENTARGET_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_INACTIVE | \
+ SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD | \
+ SVGA3D_SURFACE_HINT_INDIRECT_UPDATE | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_RESERVED1 | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_BUFFER_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_DEAD2 | \
+ SVGA3D_SURFACE_ARRAY | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_MOB_PITCH | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_MULTISAMPLE_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_SCREENTARGET | \
+ SVGA3D_SURFACE_MOB_PITCH | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_RESERVED1 | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_LOGICOPS | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS \
+ )
+
+#define SVGA3D_SURFACE_DX_ONLY_MASK \
+ ( SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER \
+ )
+
+#define SVGA3D_SURFACE_STAGING_MASK \
+ ( SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD \
+ )
+
+#define SVGA3D_SURFACE_BIND_MASK \
+ ( SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_SHADER_RESOURCE | \
+ SVGA3D_SURFACE_BIND_RENDER_TARGET | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_BIND_LOGICOPS | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS \
+ )
+
+#define SVGA3D_SURFACE_VADECODE_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_HINT_STATIC | \
+ SVGA3D_SURFACE_HINT_DYNAMIC | \
+ SVGA3D_SURFACE_HINT_INDEXBUFFER | \
+ SVGA3D_SURFACE_HINT_VERTEXBUFFER | \
+ SVGA3D_SURFACE_HINT_TEXTURE | \
+ SVGA3D_SURFACE_HINT_RENDERTARGET | \
+ SVGA3D_SURFACE_HINT_DEPTHSTENCIL | \
+ SVGA3D_SURFACE_HINT_WRITEONLY | \
+ SVGA3D_SURFACE_DEAD2 | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_HINT_RT_LOCKABLE | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_SCREENTARGET | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_RENDER_TARGET | \
+ SVGA3D_SURFACE_BIND_SHADER_RESOURCE | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_INACTIVE | \
+ SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD | \
+ SVGA3D_SURFACE_HINT_INDIRECT_UPDATE | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_LOGICOPS | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_VAPROCESSFRAME_OUTPUT_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_HINT_INDEXBUFFER | \
+ SVGA3D_SURFACE_HINT_VERTEXBUFFER | \
+ SVGA3D_SURFACE_HINT_DEPTHSTENCIL | \
+ SVGA3D_SURFACE_DEAD2 | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_INACTIVE | \
+ SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_VADECODE | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_LOGICOPS | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_VAPROCESSFRAME_INPUT_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_HINT_INDEXBUFFER | \
+ SVGA3D_SURFACE_HINT_VERTEXBUFFER | \
+ SVGA3D_SURFACE_HINT_DEPTHSTENCIL | \
+ SVGA3D_SURFACE_DEAD2 | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_SCREENTARGET | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_STAGING_UPLOAD | \
+ SVGA3D_SURFACE_STAGING_DOWNLOAD | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_LOGICOPS | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_SURFACE_LOGICOPS_DISALLOWED_MASK \
+ ( SVGA3D_SURFACE_CUBEMAP | \
+ SVGA3D_SURFACE_DEAD2 | \
+ SVGA3D_SURFACE_AUTOGENMIPMAPS | \
+ SVGA3D_SURFACE_VOLUME | \
+ SVGA3D_SURFACE_1D | \
+ SVGA3D_SURFACE_BIND_VERTEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_INDEX_BUFFER | \
+ SVGA3D_SURFACE_BIND_CONSTANT_BUFFER | \
+ SVGA3D_SURFACE_BIND_DEPTH_STENCIL | \
+ SVGA3D_SURFACE_BIND_STREAM_OUTPUT | \
+ SVGA3D_SURFACE_TRANSFER_FROM_BUFFER | \
+ SVGA3D_SURFACE_VADECODE | \
+ SVGA3D_SURFACE_MULTISAMPLE | \
+ SVGA3D_SURFACE_BIND_UAVIEW | \
+ SVGA3D_SURFACE_TRANSFER_TO_BUFFER | \
+ SVGA3D_SURFACE_BIND_RAW_VIEWS | \
+ SVGA3D_SURFACE_BUFFER_STRUCTURED | \
+ SVGA3D_SURFACE_DRAWINDIRECT_ARGS | \
+ SVGA3D_SURFACE_RESOURCE_CLAMP \
+ )
+
+#define SVGA3D_BUFFER_STRUCTURED_STRIDE_MAX 2048
+
+
+/*
+ * These are really the D3DFORMAT_OP defines from the wdk. We need
+ * them so that we can query the host for what the supported surface
+ * operations are (when we're using the D3D backend, in particular),
+ * and so we can send those operations to the guest.
+ */
+typedef enum {
+ SVGA3DFORMAT_OP_TEXTURE = 0x00000001,
+ SVGA3DFORMAT_OP_VOLUMETEXTURE = 0x00000002,
+ SVGA3DFORMAT_OP_CUBETEXTURE = 0x00000004,
+ SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET = 0x00000008,
+ SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET = 0x00000010,
+ SVGA3DFORMAT_OP_ZSTENCIL = 0x00000040,
+ SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH = 0x00000080,
+
+/*
+ * This format can be used as a render target if the current display mode
+ * is the same depth if the alpha channel is ignored. e.g. if the device
+ * can render to A8R8G8B8 when the display mode is X8R8G8B8, then the
+ * format op list entry for A8R8G8B8 should have this cap.
+ */
+ SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET = 0x00000100,
+
+/*
+ * This format contains DirectDraw support (including Flip). This flag
+ * should not to be set on alpha formats.
+ */
+ SVGA3DFORMAT_OP_DISPLAYMODE = 0x00000400,
+
+/*
+ * The rasterizer can support some level of Direct3D support in this format
+ * and implies that the driver can create a Context in this mode (for some
+ * render target format). When this flag is set, the SVGA3DFORMAT_OP_DISPLAYMODE
+ * flag must also be set.
+ */
+ SVGA3DFORMAT_OP_3DACCELERATION = 0x00000800,
+
+/*
+ * This is set for a private format when the driver has put the bpp in
+ * the structure.
+ */
+ SVGA3DFORMAT_OP_PIXELSIZE = 0x00001000,
+
+/*
+ * Indicates that this format can be converted to any RGB format for which
+ * SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB is specified.
+ */
+ SVGA3DFORMAT_OP_CONVERT_TO_ARGB = 0x00002000,
+
+/*
+ * Indicates that this format can be used to create offscreen plain surfaces.
+ */
+ SVGA3DFORMAT_OP_OFFSCREENPLAIN = 0x00004000,
+
+/*
+ * Indicated that this format can be read as an SRGB texture (meaning that the
+ * sampler will linearize the looked up data).
+ */
+ SVGA3DFORMAT_OP_SRGBREAD = 0x00008000,
+
+/*
+ * Indicates that this format can be used in the bumpmap instructions.
+ */
+ SVGA3DFORMAT_OP_BUMPMAP = 0x00010000,
+
+/*
+ * Indicates that this format can be sampled by the displacement map sampler.
+ */
+ SVGA3DFORMAT_OP_DMAP = 0x00020000,
+
+/*
+ * Indicates that this format cannot be used with texture filtering.
+ */
+ SVGA3DFORMAT_OP_NOFILTER = 0x00040000,
+
+/*
+ * Indicates that format conversions are supported to this RGB format if
+ * SVGA3DFORMAT_OP_CONVERT_TO_ARGB is specified in the source format.
+ */
+ SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB = 0x00080000,
+
+/*
+ * Indicated that this format can be written as an SRGB target
+ * (meaning that the pixel pipe will DE-linearize data on output to format)
+ */
+ SVGA3DFORMAT_OP_SRGBWRITE = 0x00100000,
+
+/*
+ * Indicates that this format cannot be used with alpha blending.
+ */
+ SVGA3DFORMAT_OP_NOALPHABLEND = 0x00200000,
+
+/*
+ * Indicates that the device can auto-generated sublevels for resources
+ * of this format.
+ */
+ SVGA3DFORMAT_OP_AUTOGENMIPMAP = 0x00400000,
+
+/*
+ * Indicates that this format can be used by vertex texture sampler.
+ */
+ SVGA3DFORMAT_OP_VERTEXTEXTURE = 0x00800000,
+
+/*
+ * Indicates that this format supports neither texture coordinate
+ * wrap modes, nor mipmapping.
+ */
+ SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP = 0x01000000
+} SVGA3dFormatOp;
+
+#define SVGA3D_FORMAT_POSITIVE \
+ (SVGA3DFORMAT_OP_TEXTURE | \
+ SVGA3DFORMAT_OP_VOLUMETEXTURE | \
+ SVGA3DFORMAT_OP_CUBETEXTURE | \
+ SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET | \
+ SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET | \
+ SVGA3DFORMAT_OP_ZSTENCIL | \
+ SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH | \
+ SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET | \
+ SVGA3DFORMAT_OP_DISPLAYMODE | \
+ SVGA3DFORMAT_OP_3DACCELERATION | \
+ SVGA3DFORMAT_OP_PIXELSIZE | \
+ SVGA3DFORMAT_OP_CONVERT_TO_ARGB | \
+ SVGA3DFORMAT_OP_OFFSCREENPLAIN | \
+ SVGA3DFORMAT_OP_SRGBREAD | \
+ SVGA3DFORMAT_OP_BUMPMAP | \
+ SVGA3DFORMAT_OP_DMAP | \
+ SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB | \
+ SVGA3DFORMAT_OP_SRGBWRITE | \
+ SVGA3DFORMAT_OP_AUTOGENMIPMAP | \
+ SVGA3DFORMAT_OP_VERTEXTEXTURE)
+
+#define SVGA3D_FORMAT_NEGATIVE \
+ (SVGA3DFORMAT_OP_NOFILTER | \
+ SVGA3DFORMAT_OP_NOALPHABLEND | \
+ SVGA3DFORMAT_OP_NOTEXCOORDWRAPNORMIP)
+
+/*
+ * This structure is a conversion of SVGA3DFORMAT_OP_*
+ * Entries must be located at the same position.
+ */
+typedef union {
+ uint32 value;
+ struct {
+ uint32 texture : 1;
+ uint32 volumeTexture : 1;
+ uint32 cubeTexture : 1;
+ uint32 offscreenRenderTarget : 1;
+ uint32 sameFormatRenderTarget : 1;
+ uint32 unknown1 : 1;
+ uint32 zStencil : 1;
+ uint32 zStencilArbitraryDepth : 1;
+ uint32 sameFormatUpToAlpha : 1;
+ uint32 unknown2 : 1;
+ uint32 displayMode : 1;
+ uint32 acceleration3d : 1;
+ uint32 pixelSize : 1;
+ uint32 convertToARGB : 1;
+ uint32 offscreenPlain : 1;
+ uint32 sRGBRead : 1;
+ uint32 bumpMap : 1;
+ uint32 dmap : 1;
+ uint32 noFilter : 1;
+ uint32 memberOfGroupARGB : 1;
+ uint32 sRGBWrite : 1;
+ uint32 noAlphaBlend : 1;
+ uint32 autoGenMipMap : 1;
+ uint32 vertexTexture : 1;
+ uint32 noTexCoordWrapNorMip : 1;
+ };
+} SVGA3dSurfaceFormatCaps;
+
+/*
+ * SVGA_3D_CMD_SETRENDERSTATE Types. All value types
+ * must fit in a uint32.
+ */
+
+typedef enum {
+ SVGA3D_RS_INVALID = 0,
+ SVGA3D_RS_MIN = 1,
+ SVGA3D_RS_ZENABLE = 1, /* SVGA3dBool */
+ SVGA3D_RS_ZWRITEENABLE = 2, /* SVGA3dBool */
+ SVGA3D_RS_ALPHATESTENABLE = 3, /* SVGA3dBool */
+ SVGA3D_RS_DITHERENABLE = 4, /* SVGA3dBool */
+ SVGA3D_RS_BLENDENABLE = 5, /* SVGA3dBool */
+ SVGA3D_RS_FOGENABLE = 6, /* SVGA3dBool */
+ SVGA3D_RS_SPECULARENABLE = 7, /* SVGA3dBool */
+ SVGA3D_RS_STENCILENABLE = 8, /* SVGA3dBool */
+ SVGA3D_RS_LIGHTINGENABLE = 9, /* SVGA3dBool */
+ SVGA3D_RS_NORMALIZENORMALS = 10, /* SVGA3dBool */
+ SVGA3D_RS_POINTSPRITEENABLE = 11, /* SVGA3dBool */
+ SVGA3D_RS_POINTSCALEENABLE = 12, /* SVGA3dBool */
+ SVGA3D_RS_STENCILREF = 13, /* uint32 */
+ SVGA3D_RS_STENCILMASK = 14, /* uint32 */
+ SVGA3D_RS_STENCILWRITEMASK = 15, /* uint32 */
+ SVGA3D_RS_FOGSTART = 16, /* float */
+ SVGA3D_RS_FOGEND = 17, /* float */
+ SVGA3D_RS_FOGDENSITY = 18, /* float */
+ SVGA3D_RS_POINTSIZE = 19, /* float */
+ SVGA3D_RS_POINTSIZEMIN = 20, /* float */
+ SVGA3D_RS_POINTSIZEMAX = 21, /* float */
+ SVGA3D_RS_POINTSCALE_A = 22, /* float */
+ SVGA3D_RS_POINTSCALE_B = 23, /* float */
+ SVGA3D_RS_POINTSCALE_C = 24, /* float */
+ SVGA3D_RS_FOGCOLOR = 25, /* SVGA3dColor */
+ SVGA3D_RS_AMBIENT = 26, /* SVGA3dColor */
+ SVGA3D_RS_CLIPPLANEENABLE = 27, /* SVGA3dClipPlanes */
+ SVGA3D_RS_FOGMODE = 28, /* SVGA3dFogMode */
+ SVGA3D_RS_FILLMODE = 29, /* SVGA3dFillMode */
+ SVGA3D_RS_SHADEMODE = 30, /* SVGA3dShadeMode */
+ SVGA3D_RS_LINEPATTERN = 31, /* SVGA3dLinePattern */
+ SVGA3D_RS_SRCBLEND = 32, /* SVGA3dBlendOp */
+ SVGA3D_RS_DSTBLEND = 33, /* SVGA3dBlendOp */
+ SVGA3D_RS_BLENDEQUATION = 34, /* SVGA3dBlendEquation */
+ SVGA3D_RS_CULLMODE = 35, /* SVGA3dFace */
+ SVGA3D_RS_ZFUNC = 36, /* SVGA3dCmpFunc */
+ SVGA3D_RS_ALPHAFUNC = 37, /* SVGA3dCmpFunc */
+ SVGA3D_RS_STENCILFUNC = 38, /* SVGA3dCmpFunc */
+ SVGA3D_RS_STENCILFAIL = 39, /* SVGA3dStencilOp */
+ SVGA3D_RS_STENCILZFAIL = 40, /* SVGA3dStencilOp */
+ SVGA3D_RS_STENCILPASS = 41, /* SVGA3dStencilOp */
+ SVGA3D_RS_ALPHAREF = 42, /* float (0.0 .. 1.0) */
+ SVGA3D_RS_FRONTWINDING = 43, /* SVGA3dFrontWinding */
+ SVGA3D_RS_COORDINATETYPE = 44, /* SVGA3dCoordinateType */
+ SVGA3D_RS_ZBIAS = 45, /* float */
+ SVGA3D_RS_RANGEFOGENABLE = 46, /* SVGA3dBool */
+ SVGA3D_RS_COLORWRITEENABLE = 47, /* SVGA3dColorMask */
+ SVGA3D_RS_VERTEXMATERIALENABLE = 48, /* SVGA3dBool */
+ SVGA3D_RS_DIFFUSEMATERIALSOURCE = 49, /* SVGA3dVertexMaterial */
+ SVGA3D_RS_SPECULARMATERIALSOURCE = 50, /* SVGA3dVertexMaterial */
+ SVGA3D_RS_AMBIENTMATERIALSOURCE = 51, /* SVGA3dVertexMaterial */
+ SVGA3D_RS_EMISSIVEMATERIALSOURCE = 52, /* SVGA3dVertexMaterial */
+ SVGA3D_RS_TEXTUREFACTOR = 53, /* SVGA3dColor */
+ SVGA3D_RS_LOCALVIEWER = 54, /* SVGA3dBool */
+ SVGA3D_RS_SCISSORTESTENABLE = 55, /* SVGA3dBool */
+ SVGA3D_RS_BLENDCOLOR = 56, /* SVGA3dColor */
+ SVGA3D_RS_STENCILENABLE2SIDED = 57, /* SVGA3dBool */
+ SVGA3D_RS_CCWSTENCILFUNC = 58, /* SVGA3dCmpFunc */
+ SVGA3D_RS_CCWSTENCILFAIL = 59, /* SVGA3dStencilOp */
+ SVGA3D_RS_CCWSTENCILZFAIL = 60, /* SVGA3dStencilOp */
+ SVGA3D_RS_CCWSTENCILPASS = 61, /* SVGA3dStencilOp */
+ SVGA3D_RS_VERTEXBLEND = 62, /* SVGA3dVertexBlendFlags */
+ SVGA3D_RS_SLOPESCALEDEPTHBIAS = 63, /* float */
+ SVGA3D_RS_DEPTHBIAS = 64, /* float */
+
+
+ /*
+ * Output Gamma Level
+ *
+ * Output gamma effects the gamma curve of colors that are output from the
+ * rendering pipeline. A value of 1.0 specifies a linear color space. If the
+ * value is <= 0.0, gamma correction is ignored and linear color space is
+ * used.
+ */
+
+ SVGA3D_RS_OUTPUTGAMMA = 65, /* float */
+ SVGA3D_RS_ZVISIBLE = 66, /* SVGA3dBool */
+ SVGA3D_RS_LASTPIXEL = 67, /* SVGA3dBool */
+ SVGA3D_RS_CLIPPING = 68, /* SVGA3dBool */
+ SVGA3D_RS_WRAP0 = 69, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP1 = 70, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP2 = 71, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP3 = 72, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP4 = 73, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP5 = 74, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP6 = 75, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP7 = 76, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP8 = 77, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP9 = 78, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP10 = 79, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP11 = 80, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP12 = 81, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP13 = 82, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP14 = 83, /* SVGA3dWrapFlags */
+ SVGA3D_RS_WRAP15 = 84, /* SVGA3dWrapFlags */
+ SVGA3D_RS_MULTISAMPLEANTIALIAS = 85, /* SVGA3dBool */
+ SVGA3D_RS_MULTISAMPLEMASK = 86, /* uint32 */
+ SVGA3D_RS_INDEXEDVERTEXBLENDENABLE = 87, /* SVGA3dBool */
+ SVGA3D_RS_TWEENFACTOR = 88, /* float */
+ SVGA3D_RS_ANTIALIASEDLINEENABLE = 89, /* SVGA3dBool */
+ SVGA3D_RS_COLORWRITEENABLE1 = 90, /* SVGA3dColorMask */
+ SVGA3D_RS_COLORWRITEENABLE2 = 91, /* SVGA3dColorMask */
+ SVGA3D_RS_COLORWRITEENABLE3 = 92, /* SVGA3dColorMask */
+ SVGA3D_RS_SEPARATEALPHABLENDENABLE = 93, /* SVGA3dBool */
+ SVGA3D_RS_SRCBLENDALPHA = 94, /* SVGA3dBlendOp */
+ SVGA3D_RS_DSTBLENDALPHA = 95, /* SVGA3dBlendOp */
+ SVGA3D_RS_BLENDEQUATIONALPHA = 96, /* SVGA3dBlendEquation */
+ SVGA3D_RS_TRANSPARENCYANTIALIAS = 97, /* SVGA3dTransparencyAntialiasType */
+ SVGA3D_RS_LINEWIDTH = 98, /* float */
+ SVGA3D_RS_MAX
+} SVGA3dRenderStateName;
+
+typedef enum {
+ SVGA3D_TRANSPARENCYANTIALIAS_NORMAL = 0,
+ SVGA3D_TRANSPARENCYANTIALIAS_ALPHATOCOVERAGE = 1,
+ SVGA3D_TRANSPARENCYANTIALIAS_SUPERSAMPLE = 2,
+ SVGA3D_TRANSPARENCYANTIALIAS_MAX
+} SVGA3dTransparencyAntialiasType;
+
+typedef enum {
+ SVGA3D_VERTEXMATERIAL_NONE = 0, /* Use the value in the current material */
+ SVGA3D_VERTEXMATERIAL_DIFFUSE = 1, /* Use the value in the diffuse component */
+ SVGA3D_VERTEXMATERIAL_SPECULAR = 2, /* Use the value in the specular component */
+ SVGA3D_VERTEXMATERIAL_MAX = 3,
+} SVGA3dVertexMaterial;
+
+typedef enum {
+ SVGA3D_FILLMODE_INVALID = 0,
+ SVGA3D_FILLMODE_MIN = 1,
+ SVGA3D_FILLMODE_POINT = 1,
+ SVGA3D_FILLMODE_LINE = 2,
+ SVGA3D_FILLMODE_FILL = 3,
+ SVGA3D_FILLMODE_MAX
+} SVGA3dFillModeType;
+
+
+typedef
+#include "vmware_pack_begin.h"
+union {
+ struct {
+ uint16 mode; /* SVGA3dFillModeType */
+ uint16 face; /* SVGA3dFace */
+ };
+ uint32 uintValue;
+}
+#include "vmware_pack_end.h"
+SVGA3dFillMode;
+
+typedef enum {
+ SVGA3D_SHADEMODE_INVALID = 0,
+ SVGA3D_SHADEMODE_FLAT = 1,
+ SVGA3D_SHADEMODE_SMOOTH = 2,
+ SVGA3D_SHADEMODE_PHONG = 3, /* Not supported */
+ SVGA3D_SHADEMODE_MAX
+} SVGA3dShadeMode;
+
+typedef
+#include "vmware_pack_begin.h"
+union {
+ struct {
+ uint16 repeat;
+ uint16 pattern;
+ };
+ uint32 uintValue;
+}
+#include "vmware_pack_end.h"
+SVGA3dLinePattern;
+
+typedef enum {
+ SVGA3D_BLENDOP_INVALID = 0,
+ SVGA3D_BLENDOP_MIN = 1,
+ SVGA3D_BLENDOP_ZERO = 1,
+ SVGA3D_BLENDOP_ONE = 2,
+ SVGA3D_BLENDOP_SRCCOLOR = 3,
+ SVGA3D_BLENDOP_INVSRCCOLOR = 4,
+ SVGA3D_BLENDOP_SRCALPHA = 5,
+ SVGA3D_BLENDOP_INVSRCALPHA = 6,
+ SVGA3D_BLENDOP_DESTALPHA = 7,
+ SVGA3D_BLENDOP_INVDESTALPHA = 8,
+ SVGA3D_BLENDOP_DESTCOLOR = 9,
+ SVGA3D_BLENDOP_INVDESTCOLOR = 10,
+ SVGA3D_BLENDOP_SRCALPHASAT = 11,
+ SVGA3D_BLENDOP_BLENDFACTOR = 12,
+ SVGA3D_BLENDOP_INVBLENDFACTOR = 13,
+ SVGA3D_BLENDOP_SRC1COLOR = 14,
+ SVGA3D_BLENDOP_INVSRC1COLOR = 15,
+ SVGA3D_BLENDOP_SRC1ALPHA = 16,
+ SVGA3D_BLENDOP_INVSRC1ALPHA = 17,
+ SVGA3D_BLENDOP_BLENDFACTORALPHA = 18,
+ SVGA3D_BLENDOP_INVBLENDFACTORALPHA = 19,
+ SVGA3D_BLENDOP_MAX
+} SVGA3dBlendOp;
+
+typedef enum {
+ SVGA3D_BLENDEQ_INVALID = 0,
+ SVGA3D_BLENDEQ_MIN = 1,
+ SVGA3D_BLENDEQ_ADD = 1,
+ SVGA3D_BLENDEQ_SUBTRACT = 2,
+ SVGA3D_BLENDEQ_REVSUBTRACT = 3,
+ SVGA3D_BLENDEQ_MINIMUM = 4,
+ SVGA3D_BLENDEQ_MAXIMUM = 5,
+ SVGA3D_BLENDEQ_MAX
+} SVGA3dBlendEquation;
+
+typedef enum {
+ SVGA3D_DX11_LOGICOP_MIN = 0,
+ SVGA3D_DX11_LOGICOP_CLEAR = 0,
+ SVGA3D_DX11_LOGICOP_SET = 1,
+ SVGA3D_DX11_LOGICOP_COPY = 2,
+ SVGA3D_DX11_LOGICOP_COPY_INVERTED = 3,
+ SVGA3D_DX11_LOGICOP_NOOP = 4,
+ SVGA3D_DX11_LOGICOP_INVERT = 5,
+ SVGA3D_DX11_LOGICOP_AND = 6,
+ SVGA3D_DX11_LOGICOP_NAND = 7,
+ SVGA3D_DX11_LOGICOP_OR = 8,
+ SVGA3D_DX11_LOGICOP_NOR = 9,
+ SVGA3D_DX11_LOGICOP_XOR = 10,
+ SVGA3D_DX11_LOGICOP_EQUIV = 11,
+ SVGA3D_DX11_LOGICOP_AND_REVERSE = 12,
+ SVGA3D_DX11_LOGICOP_AND_INVERTED = 13,
+ SVGA3D_DX11_LOGICOP_OR_REVERSE = 14,
+ SVGA3D_DX11_LOGICOP_OR_INVERTED = 15,
+ SVGA3D_DX11_LOGICOP_MAX
+} SVGA3dDX11LogicOp;
+
+typedef enum {
+ SVGA3D_FRONTWINDING_INVALID = 0,
+ SVGA3D_FRONTWINDING_CW = 1,
+ SVGA3D_FRONTWINDING_CCW = 2,
+ SVGA3D_FRONTWINDING_MAX
+} SVGA3dFrontWinding;
+
+typedef enum {
+ SVGA3D_FACE_INVALID = 0,
+ SVGA3D_FACE_NONE = 1,
+ SVGA3D_FACE_MIN = 1,
+ SVGA3D_FACE_FRONT = 2,
+ SVGA3D_FACE_BACK = 3,
+ SVGA3D_FACE_FRONT_BACK = 4,
+ SVGA3D_FACE_MAX
+} SVGA3dFace;
+
+/*
+ * The order and the values should not be changed
+ */
+
+typedef enum {
+ SVGA3D_CMP_INVALID = 0,
+ SVGA3D_CMP_NEVER = 1,
+ SVGA3D_CMP_LESS = 2,
+ SVGA3D_CMP_EQUAL = 3,
+ SVGA3D_CMP_LESSEQUAL = 4,
+ SVGA3D_CMP_GREATER = 5,
+ SVGA3D_CMP_NOTEQUAL = 6,
+ SVGA3D_CMP_GREATEREQUAL = 7,
+ SVGA3D_CMP_ALWAYS = 8,
+ SVGA3D_CMP_MAX
+} SVGA3dCmpFunc;
+
+/*
+ * SVGA3D_FOGFUNC_* specifies the fog equation, or PER_VERTEX which allows
+ * the fog factor to be specified in the alpha component of the specular
+ * (a.k.a. secondary) vertex color.
+ */
+typedef enum {
+ SVGA3D_FOGFUNC_INVALID = 0,
+ SVGA3D_FOGFUNC_EXP = 1,
+ SVGA3D_FOGFUNC_EXP2 = 2,
+ SVGA3D_FOGFUNC_LINEAR = 3,
+ SVGA3D_FOGFUNC_PER_VERTEX = 4
+} SVGA3dFogFunction;
+
+/*
+ * SVGA3D_FOGTYPE_* specifies if fog factors are computed on a per-vertex
+ * or per-pixel basis.
+ */
+typedef enum {
+ SVGA3D_FOGTYPE_INVALID = 0,
+ SVGA3D_FOGTYPE_VERTEX = 1,
+ SVGA3D_FOGTYPE_PIXEL = 2,
+ SVGA3D_FOGTYPE_MAX = 3
+} SVGA3dFogType;
+
+/*
+ * SVGA3D_FOGBASE_* selects depth or range-based fog. Depth-based fog is
+ * computed using the eye Z value of each pixel (or vertex), whereas range-
+ * based fog is computed using the actual distance (range) to the eye.
+ */
+typedef enum {
+ SVGA3D_FOGBASE_INVALID = 0,
+ SVGA3D_FOGBASE_DEPTHBASED = 1,
+ SVGA3D_FOGBASE_RANGEBASED = 2,
+ SVGA3D_FOGBASE_MAX = 3
+} SVGA3dFogBase;
+
+typedef enum {
+ SVGA3D_STENCILOP_INVALID = 0,
+ SVGA3D_STENCILOP_MIN = 1,
+ SVGA3D_STENCILOP_KEEP = 1,
+ SVGA3D_STENCILOP_ZERO = 2,
+ SVGA3D_STENCILOP_REPLACE = 3,
+ SVGA3D_STENCILOP_INCRSAT = 4,
+ SVGA3D_STENCILOP_DECRSAT = 5,
+ SVGA3D_STENCILOP_INVERT = 6,
+ SVGA3D_STENCILOP_INCR = 7,
+ SVGA3D_STENCILOP_DECR = 8,
+ SVGA3D_STENCILOP_MAX
+} SVGA3dStencilOp;
+
+typedef enum {
+ SVGA3D_CLIPPLANE_0 = (1 << 0),
+ SVGA3D_CLIPPLANE_1 = (1 << 1),
+ SVGA3D_CLIPPLANE_2 = (1 << 2),
+ SVGA3D_CLIPPLANE_3 = (1 << 3),
+ SVGA3D_CLIPPLANE_4 = (1 << 4),
+ SVGA3D_CLIPPLANE_5 = (1 << 5),
+} SVGA3dClipPlanes;
+
+typedef enum {
+ SVGA3D_CLEAR_COLOR = 0x1,
+ SVGA3D_CLEAR_DEPTH = 0x2,
+ SVGA3D_CLEAR_STENCIL = 0x4,
+
+ /*
+ * Hint only, must be used together with SVGA3D_CLEAR_COLOR. If
+ * SVGA3D_CLEAR_DEPTH or SVGA3D_CLEAR_STENCIL bit is set, this
+ * bit will be ignored.
+ */
+ SVGA3D_CLEAR_COLORFILL = 0x8
+} SVGA3dClearFlag;
+
+typedef enum {
+ SVGA3D_RT_DEPTH = 0,
+ SVGA3D_RT_MIN = 0,
+ SVGA3D_RT_STENCIL = 1,
+ SVGA3D_RT_COLOR0 = 2,
+ SVGA3D_RT_COLOR1 = 3,
+ SVGA3D_RT_COLOR2 = 4,
+ SVGA3D_RT_COLOR3 = 5,
+ SVGA3D_RT_COLOR4 = 6,
+ SVGA3D_RT_COLOR5 = 7,
+ SVGA3D_RT_COLOR6 = 8,
+ SVGA3D_RT_COLOR7 = 9,
+ SVGA3D_RT_MAX,
+ SVGA3D_RT_INVALID = ((uint32)-1),
+} SVGA3dRenderTargetType;
+
+#define SVGA3D_MAX_RT_COLOR (SVGA3D_RT_COLOR7 - SVGA3D_RT_COLOR0 + 1)
+
+typedef
+#include "vmware_pack_begin.h"
+union {
+ struct {
+ uint32 red : 1;
+ uint32 green : 1;
+ uint32 blue : 1;
+ uint32 alpha : 1;
+ };
+ uint32 uintValue;
+}
+#include "vmware_pack_end.h"
+SVGA3dColorMask;
+
+typedef enum {
+ SVGA3D_VBLEND_DISABLE = 0,
+ SVGA3D_VBLEND_1WEIGHT = 1,
+ SVGA3D_VBLEND_2WEIGHT = 2,
+ SVGA3D_VBLEND_3WEIGHT = 3,
+ SVGA3D_VBLEND_MAX = 4,
+} SVGA3dVertexBlendFlags;
+
+typedef enum {
+ SVGA3D_WRAPCOORD_0 = 1 << 0,
+ SVGA3D_WRAPCOORD_1 = 1 << 1,
+ SVGA3D_WRAPCOORD_2 = 1 << 2,
+ SVGA3D_WRAPCOORD_3 = 1 << 3,
+ SVGA3D_WRAPCOORD_ALL = 0xF,
+} SVGA3dWrapFlags;
+
+/*
+ * SVGA_3D_CMD_TEXTURESTATE Types. All value types
+ * must fit in a uint32.
+ */
+
+typedef enum {
+ SVGA3D_TS_INVALID = 0,
+ SVGA3D_TS_MIN = 1,
+ SVGA3D_TS_BIND_TEXTURE = 1, /* SVGA3dSurfaceId */
+ SVGA3D_TS_COLOROP = 2, /* SVGA3dTextureCombiner */
+ SVGA3D_TS_COLORARG1 = 3, /* SVGA3dTextureArgData */
+ SVGA3D_TS_COLORARG2 = 4, /* SVGA3dTextureArgData */
+ SVGA3D_TS_ALPHAOP = 5, /* SVGA3dTextureCombiner */
+ SVGA3D_TS_ALPHAARG1 = 6, /* SVGA3dTextureArgData */
+ SVGA3D_TS_ALPHAARG2 = 7, /* SVGA3dTextureArgData */
+ SVGA3D_TS_ADDRESSU = 8, /* SVGA3dTextureAddress */
+ SVGA3D_TS_ADDRESSV = 9, /* SVGA3dTextureAddress */
+ SVGA3D_TS_MIPFILTER = 10, /* SVGA3dTextureFilter */
+ SVGA3D_TS_MAGFILTER = 11, /* SVGA3dTextureFilter */
+ SVGA3D_TS_MINFILTER = 12, /* SVGA3dTextureFilter */
+ SVGA3D_TS_BORDERCOLOR = 13, /* SVGA3dColor */
+ SVGA3D_TS_TEXCOORDINDEX = 14, /* uint32 */
+ SVGA3D_TS_TEXTURETRANSFORMFLAGS = 15, /* SVGA3dTexTransformFlags */
+ SVGA3D_TS_TEXCOORDGEN = 16, /* SVGA3dTextureCoordGen */
+ SVGA3D_TS_BUMPENVMAT00 = 17, /* float */
+ SVGA3D_TS_BUMPENVMAT01 = 18, /* float */
+ SVGA3D_TS_BUMPENVMAT10 = 19, /* float */
+ SVGA3D_TS_BUMPENVMAT11 = 20, /* float */
+ SVGA3D_TS_TEXTURE_MIPMAP_LEVEL = 21, /* uint32 */
+ SVGA3D_TS_TEXTURE_LOD_BIAS = 22, /* float */
+ SVGA3D_TS_TEXTURE_ANISOTROPIC_LEVEL = 23, /* uint32 */
+ SVGA3D_TS_ADDRESSW = 24, /* SVGA3dTextureAddress */
+
+
+ /*
+ * Sampler Gamma Level
+ *
+ * Sampler gamma effects the color of samples taken from the sampler. A
+ * value of 1.0 will produce linear samples. If the value is <= 0.0 the
+ * gamma value is ignored and a linear space is used.
+ */
+
+ SVGA3D_TS_GAMMA = 25, /* float */
+ SVGA3D_TS_BUMPENVLSCALE = 26, /* float */
+ SVGA3D_TS_BUMPENVLOFFSET = 27, /* float */
+ SVGA3D_TS_COLORARG0 = 28, /* SVGA3dTextureArgData */
+ SVGA3D_TS_ALPHAARG0 = 29, /* SVGA3dTextureArgData */
+ SVGA3D_TS_PREGB_MAX = 30, /* Max value before GBObjects */
+ SVGA3D_TS_CONSTANT = 30, /* SVGA3dColor */
+ SVGA3D_TS_COLOR_KEY_ENABLE = 31, /* SVGA3dBool */
+ SVGA3D_TS_COLOR_KEY = 32, /* SVGA3dColor */
+ SVGA3D_TS_MAX
+} SVGA3dTextureStateName;
+
+typedef enum {
+ SVGA3D_TC_INVALID = 0,
+ SVGA3D_TC_DISABLE = 1,
+ SVGA3D_TC_SELECTARG1 = 2,
+ SVGA3D_TC_SELECTARG2 = 3,
+ SVGA3D_TC_MODULATE = 4,
+ SVGA3D_TC_ADD = 5,
+ SVGA3D_TC_ADDSIGNED = 6,
+ SVGA3D_TC_SUBTRACT = 7,
+ SVGA3D_TC_BLENDTEXTUREALPHA = 8,
+ SVGA3D_TC_BLENDDIFFUSEALPHA = 9,
+ SVGA3D_TC_BLENDCURRENTALPHA = 10,
+ SVGA3D_TC_BLENDFACTORALPHA = 11,
+ SVGA3D_TC_MODULATE2X = 12,
+ SVGA3D_TC_MODULATE4X = 13,
+ SVGA3D_TC_DSDT = 14,
+ SVGA3D_TC_DOTPRODUCT3 = 15,
+ SVGA3D_TC_BLENDTEXTUREALPHAPM = 16,
+ SVGA3D_TC_ADDSIGNED2X = 17,
+ SVGA3D_TC_ADDSMOOTH = 18,
+ SVGA3D_TC_PREMODULATE = 19,
+ SVGA3D_TC_MODULATEALPHA_ADDCOLOR = 20,
+ SVGA3D_TC_MODULATECOLOR_ADDALPHA = 21,
+ SVGA3D_TC_MODULATEINVALPHA_ADDCOLOR = 22,
+ SVGA3D_TC_MODULATEINVCOLOR_ADDALPHA = 23,
+ SVGA3D_TC_BUMPENVMAPLUMINANCE = 24,
+ SVGA3D_TC_MULTIPLYADD = 25,
+ SVGA3D_TC_LERP = 26,
+ SVGA3D_TC_MAX
+} SVGA3dTextureCombiner;
+
+#define SVGA3D_TC_CAP_BIT(svga3d_tc_op) (svga3d_tc_op ? (1 << (svga3d_tc_op - 1)) : 0)
+
+typedef enum {
+ SVGA3D_TEX_ADDRESS_INVALID = 0,
+ SVGA3D_TEX_ADDRESS_MIN = 1,
+ SVGA3D_TEX_ADDRESS_WRAP = 1,
+ SVGA3D_TEX_ADDRESS_MIRROR = 2,
+ SVGA3D_TEX_ADDRESS_CLAMP = 3,
+ SVGA3D_TEX_ADDRESS_BORDER = 4,
+ SVGA3D_TEX_ADDRESS_MIRRORONCE = 5,
+ SVGA3D_TEX_ADDRESS_EDGE = 6,
+ SVGA3D_TEX_ADDRESS_MAX
+} SVGA3dTextureAddress;
+
+/*
+ * SVGA3D_TEX_FILTER_NONE as the minification filter means mipmapping is
+ * disabled, and the rasterizer should use the magnification filter instead.
+ */
+typedef enum {
+ SVGA3D_TEX_FILTER_NONE = 0,
+ SVGA3D_TEX_FILTER_MIN = 0,
+ SVGA3D_TEX_FILTER_NEAREST = 1,
+ SVGA3D_TEX_FILTER_LINEAR = 2,
+ SVGA3D_TEX_FILTER_ANISOTROPIC = 3,
+ SVGA3D_TEX_FILTER_FLATCUBIC = 4, /* Deprecated, not implemented */
+ SVGA3D_TEX_FILTER_GAUSSIANCUBIC = 5, /* Deprecated, not implemented */
+ SVGA3D_TEX_FILTER_PYRAMIDALQUAD = 6, /* Not currently implemented */
+ SVGA3D_TEX_FILTER_GAUSSIANQUAD = 7, /* Not currently implemented */
+ SVGA3D_TEX_FILTER_MAX
+} SVGA3dTextureFilter;
+
+typedef enum {
+ SVGA3D_TEX_TRANSFORM_OFF = 0,
+ SVGA3D_TEX_TRANSFORM_S = (1 << 0),
+ SVGA3D_TEX_TRANSFORM_T = (1 << 1),
+ SVGA3D_TEX_TRANSFORM_R = (1 << 2),
+ SVGA3D_TEX_TRANSFORM_Q = (1 << 3),
+ SVGA3D_TEX_PROJECTED = (1 << 15),
+} SVGA3dTexTransformFlags;
+
+typedef enum {
+ SVGA3D_TEXCOORD_GEN_OFF = 0,
+ SVGA3D_TEXCOORD_GEN_EYE_POSITION = 1,
+ SVGA3D_TEXCOORD_GEN_EYE_NORMAL = 2,
+ SVGA3D_TEXCOORD_GEN_REFLECTIONVECTOR = 3,
+ SVGA3D_TEXCOORD_GEN_SPHERE = 4,
+ SVGA3D_TEXCOORD_GEN_MAX
+} SVGA3dTextureCoordGen;
+
+/*
+ * Texture argument constants for texture combiner
+ */
+typedef enum {
+ SVGA3D_TA_INVALID = 0,
+ SVGA3D_TA_TFACTOR = 1,
+ SVGA3D_TA_PREVIOUS = 2,
+ SVGA3D_TA_DIFFUSE = 3,
+ SVGA3D_TA_TEXTURE = 4,
+ SVGA3D_TA_SPECULAR = 5,
+ SVGA3D_TA_CONSTANT = 6,
+ SVGA3D_TA_MAX
+} SVGA3dTextureArgData;
+
+#define SVGA3D_TM_MASK_LEN 4
+
+/* Modifiers for texture argument constants defined above. */
+typedef enum {
+ SVGA3D_TM_NONE = 0,
+ SVGA3D_TM_ALPHA = (1 << SVGA3D_TM_MASK_LEN),
+ SVGA3D_TM_ONE_MINUS = (2 << SVGA3D_TM_MASK_LEN),
+} SVGA3dTextureArgModifier;
+
+/*
+ * Vertex declarations
+ *
+ * Notes:
+ *
+ * SVGA3D_DECLUSAGE_POSITIONT is for pre-transformed vertices. If you
+ * draw with any POSITIONT vertex arrays, the programmable vertex
+ * pipeline will be implicitly disabled. Drawing will take place as if
+ * no vertex shader was bound.
+ */
+
+typedef enum {
+ SVGA3D_DECLUSAGE_POSITION = 0,
+ SVGA3D_DECLUSAGE_BLENDWEIGHT,
+ SVGA3D_DECLUSAGE_BLENDINDICES,
+ SVGA3D_DECLUSAGE_NORMAL,
+ SVGA3D_DECLUSAGE_PSIZE,
+ SVGA3D_DECLUSAGE_TEXCOORD,
+ SVGA3D_DECLUSAGE_TANGENT,
+ SVGA3D_DECLUSAGE_BINORMAL,
+ SVGA3D_DECLUSAGE_TESSFACTOR,
+ SVGA3D_DECLUSAGE_POSITIONT,
+ SVGA3D_DECLUSAGE_COLOR,
+ SVGA3D_DECLUSAGE_FOG,
+ SVGA3D_DECLUSAGE_DEPTH,
+ SVGA3D_DECLUSAGE_SAMPLE,
+ SVGA3D_DECLUSAGE_MAX
+} SVGA3dDeclUsage;
+
+typedef enum {
+ SVGA3D_DECLMETHOD_DEFAULT = 0,
+ SVGA3D_DECLMETHOD_PARTIALU,
+ SVGA3D_DECLMETHOD_PARTIALV,
+ SVGA3D_DECLMETHOD_CROSSUV, /* Normal */
+ SVGA3D_DECLMETHOD_UV,
+ SVGA3D_DECLMETHOD_LOOKUP, /* Lookup a displacement map */
+ SVGA3D_DECLMETHOD_LOOKUPPRESAMPLED, /* Lookup a pre-sampled displacement */
+ /* map */
+} SVGA3dDeclMethod;
+
+typedef enum {
+ SVGA3D_DECLTYPE_FLOAT1 = 0,
+ SVGA3D_DECLTYPE_FLOAT2 = 1,
+ SVGA3D_DECLTYPE_FLOAT3 = 2,
+ SVGA3D_DECLTYPE_FLOAT4 = 3,
+ SVGA3D_DECLTYPE_D3DCOLOR = 4,
+ SVGA3D_DECLTYPE_UBYTE4 = 5,
+ SVGA3D_DECLTYPE_SHORT2 = 6,
+ SVGA3D_DECLTYPE_SHORT4 = 7,
+ SVGA3D_DECLTYPE_UBYTE4N = 8,
+ SVGA3D_DECLTYPE_SHORT2N = 9,
+ SVGA3D_DECLTYPE_SHORT4N = 10,
+ SVGA3D_DECLTYPE_USHORT2N = 11,
+ SVGA3D_DECLTYPE_USHORT4N = 12,
+ SVGA3D_DECLTYPE_UDEC3 = 13,
+ SVGA3D_DECLTYPE_DEC3N = 14,
+ SVGA3D_DECLTYPE_FLOAT16_2 = 15,
+ SVGA3D_DECLTYPE_FLOAT16_4 = 16,
+ SVGA3D_DECLTYPE_MAX,
+} SVGA3dDeclType;
+
+/*
+ * This structure is used for the divisor for geometry instancing;
+ * it's a direct translation of the Direct3D equivalent.
+ */
+typedef union {
+ struct {
+ /*
+ * For index data, this number represents the number of instances to draw.
+ * For instance data, this number represents the number of
+ * instances/vertex in this stream
+ */
+ uint32 count : 30;
+
+ /*
+ * This is 1 if this is supposed to be the data that is repeated for
+ * every instance.
+ */
+ uint32 indexedData : 1;
+
+ /*
+ * This is 1 if this is supposed to be the per-instance data.
+ */
+ uint32 instanceData : 1;
+ };
+
+ uint32 value;
+} SVGA3dVertexDivisor;
+
+typedef enum {
+ /*
+ * SVGA3D_PRIMITIVE_INVALID is a valid primitive type.
+ *
+ * List MIN second so debuggers will think INVALID is
+ * the correct name.
+ */
+ SVGA3D_PRIMITIVE_INVALID = 0,
+ SVGA3D_PRIMITIVE_MIN = 0,
+ SVGA3D_PRIMITIVE_TRIANGLELIST = 1,
+ SVGA3D_PRIMITIVE_POINTLIST = 2,
+ SVGA3D_PRIMITIVE_LINELIST = 3,
+ SVGA3D_PRIMITIVE_LINESTRIP = 4,
+ SVGA3D_PRIMITIVE_TRIANGLESTRIP = 5,
+ SVGA3D_PRIMITIVE_TRIANGLEFAN = 6,
+ SVGA3D_PRIMITIVE_LINELIST_ADJ = 7,
+ SVGA3D_PRIMITIVE_PREDX_MAX = 7,
+ SVGA3D_PRIMITIVE_LINESTRIP_ADJ = 8,
+ SVGA3D_PRIMITIVE_TRIANGLELIST_ADJ = 9,
+ SVGA3D_PRIMITIVE_TRIANGLESTRIP_ADJ = 10,
+ SVGA3D_PRIMITIVE_DX10_MAX = 11,
+ SVGA3D_PRIMITIVE_1_CONTROL_POINT_PATCH = 11,
+ SVGA3D_PRIMITIVE_2_CONTROL_POINT_PATCH = 12,
+ SVGA3D_PRIMITIVE_3_CONTROL_POINT_PATCH = 13,
+ SVGA3D_PRIMITIVE_4_CONTROL_POINT_PATCH = 14,
+ SVGA3D_PRIMITIVE_5_CONTROL_POINT_PATCH = 15,
+ SVGA3D_PRIMITIVE_6_CONTROL_POINT_PATCH = 16,
+ SVGA3D_PRIMITIVE_7_CONTROL_POINT_PATCH = 17,
+ SVGA3D_PRIMITIVE_8_CONTROL_POINT_PATCH = 18,
+ SVGA3D_PRIMITIVE_9_CONTROL_POINT_PATCH = 19,
+ SVGA3D_PRIMITIVE_10_CONTROL_POINT_PATCH = 20,
+ SVGA3D_PRIMITIVE_11_CONTROL_POINT_PATCH = 21,
+ SVGA3D_PRIMITIVE_12_CONTROL_POINT_PATCH = 22,
+ SVGA3D_PRIMITIVE_13_CONTROL_POINT_PATCH = 23,
+ SVGA3D_PRIMITIVE_14_CONTROL_POINT_PATCH = 24,
+ SVGA3D_PRIMITIVE_15_CONTROL_POINT_PATCH = 25,
+ SVGA3D_PRIMITIVE_16_CONTROL_POINT_PATCH = 26,
+ SVGA3D_PRIMITIVE_17_CONTROL_POINT_PATCH = 27,
+ SVGA3D_PRIMITIVE_18_CONTROL_POINT_PATCH = 28,
+ SVGA3D_PRIMITIVE_19_CONTROL_POINT_PATCH = 29,
+ SVGA3D_PRIMITIVE_20_CONTROL_POINT_PATCH = 30,
+ SVGA3D_PRIMITIVE_21_CONTROL_POINT_PATCH = 31,
+ SVGA3D_PRIMITIVE_22_CONTROL_POINT_PATCH = 32,
+ SVGA3D_PRIMITIVE_23_CONTROL_POINT_PATCH = 33,
+ SVGA3D_PRIMITIVE_24_CONTROL_POINT_PATCH = 34,
+ SVGA3D_PRIMITIVE_25_CONTROL_POINT_PATCH = 35,
+ SVGA3D_PRIMITIVE_26_CONTROL_POINT_PATCH = 36,
+ SVGA3D_PRIMITIVE_27_CONTROL_POINT_PATCH = 37,
+ SVGA3D_PRIMITIVE_28_CONTROL_POINT_PATCH = 38,
+ SVGA3D_PRIMITIVE_29_CONTROL_POINT_PATCH = 39,
+ SVGA3D_PRIMITIVE_30_CONTROL_POINT_PATCH = 40,
+ SVGA3D_PRIMITIVE_31_CONTROL_POINT_PATCH = 41,
+ SVGA3D_PRIMITIVE_32_CONTROL_POINT_PATCH = 42,
+ SVGA3D_PRIMITIVE_MAX = 43
+} SVGA3dPrimitiveType;
+
+typedef enum {
+ SVGA3D_COORDINATE_INVALID = 0,
+ SVGA3D_COORDINATE_LEFTHANDED = 1,
+ SVGA3D_COORDINATE_RIGHTHANDED = 2,
+ SVGA3D_COORDINATE_MAX
+} SVGA3dCoordinateType;
+
+typedef enum {
+ SVGA3D_TRANSFORM_INVALID = 0,
+ SVGA3D_TRANSFORM_WORLD = 1,
+ SVGA3D_TRANSFORM_MIN = 1,
+ SVGA3D_TRANSFORM_VIEW = 2,
+ SVGA3D_TRANSFORM_PROJECTION = 3,
+ SVGA3D_TRANSFORM_TEXTURE0 = 4,
+ SVGA3D_TRANSFORM_TEXTURE1 = 5,
+ SVGA3D_TRANSFORM_TEXTURE2 = 6,
+ SVGA3D_TRANSFORM_TEXTURE3 = 7,
+ SVGA3D_TRANSFORM_TEXTURE4 = 8,
+ SVGA3D_TRANSFORM_TEXTURE5 = 9,
+ SVGA3D_TRANSFORM_TEXTURE6 = 10,
+ SVGA3D_TRANSFORM_TEXTURE7 = 11,
+ SVGA3D_TRANSFORM_WORLD1 = 12,
+ SVGA3D_TRANSFORM_WORLD2 = 13,
+ SVGA3D_TRANSFORM_WORLD3 = 14,
+ SVGA3D_TRANSFORM_MAX
+} SVGA3dTransformType;
+
+typedef enum {
+ SVGA3D_LIGHTTYPE_INVALID = 0,
+ SVGA3D_LIGHTTYPE_MIN = 1,
+ SVGA3D_LIGHTTYPE_POINT = 1,
+ SVGA3D_LIGHTTYPE_SPOT1 = 2, /* 1-cone, in degrees */
+ SVGA3D_LIGHTTYPE_SPOT2 = 3, /* 2-cone, in radians */
+ SVGA3D_LIGHTTYPE_DIRECTIONAL = 4,
+ SVGA3D_LIGHTTYPE_MAX
+} SVGA3dLightType;
+
+typedef enum {
+ SVGA3D_CUBEFACE_POSX = 0,
+ SVGA3D_CUBEFACE_NEGX = 1,
+ SVGA3D_CUBEFACE_POSY = 2,
+ SVGA3D_CUBEFACE_NEGY = 3,
+ SVGA3D_CUBEFACE_POSZ = 4,
+ SVGA3D_CUBEFACE_NEGZ = 5,
+} SVGA3dCubeFace;
+
+typedef enum {
+ SVGA3D_SHADERTYPE_INVALID = 0,
+ SVGA3D_SHADERTYPE_MIN = 1,
+ SVGA3D_SHADERTYPE_VS = 1,
+ SVGA3D_SHADERTYPE_PS = 2,
+ SVGA3D_SHADERTYPE_PREDX_MAX = 3,
+ SVGA3D_SHADERTYPE_GS = 3,
+ SVGA3D_SHADERTYPE_DX10_MAX = 4,
+ SVGA3D_SHADERTYPE_HS = 4,
+ SVGA3D_SHADERTYPE_DS = 5,
+ SVGA3D_SHADERTYPE_CS = 6,
+ SVGA3D_SHADERTYPE_MAX = 7
+} SVGA3dShaderType;
+
+#define SVGA3D_NUM_SHADERTYPE_PREDX \
+ (SVGA3D_SHADERTYPE_PREDX_MAX - SVGA3D_SHADERTYPE_MIN)
+
+#define SVGA3D_NUM_SHADERTYPE_DX10 \
+ (SVGA3D_SHADERTYPE_DX10_MAX - SVGA3D_SHADERTYPE_MIN)
+
+#define SVGA3D_NUM_SHADERTYPE \
+ (SVGA3D_SHADERTYPE_MAX - SVGA3D_SHADERTYPE_MIN)
+
+typedef enum {
+ SVGA3D_CONST_TYPE_MIN = 0,
+ SVGA3D_CONST_TYPE_FLOAT = 0,
+ SVGA3D_CONST_TYPE_INT = 1,
+ SVGA3D_CONST_TYPE_BOOL = 2,
+ SVGA3D_CONST_TYPE_MAX = 3,
+} SVGA3dShaderConstType;
+
+/*
+ * Register limits for shader consts.
+ */
+#define SVGA3D_CONSTREG_MAX 256
+#define SVGA3D_CONSTINTREG_MAX 16
+#define SVGA3D_CONSTBOOLREG_MAX 16
+
+typedef enum {
+ SVGA3D_STRETCH_BLT_POINT = 0,
+ SVGA3D_STRETCH_BLT_LINEAR = 1,
+ SVGA3D_STRETCH_BLT_MAX
+} SVGA3dStretchBltMode;
+
+typedef enum {
+ SVGA3D_QUERYTYPE_INVALID = ((uint8)-1),
+ SVGA3D_QUERYTYPE_MIN = 0,
+ SVGA3D_QUERYTYPE_OCCLUSION = 0,
+ SVGA3D_QUERYTYPE_TIMESTAMP = 1,
+ SVGA3D_QUERYTYPE_TIMESTAMPDISJOINT = 2,
+ SVGA3D_QUERYTYPE_PIPELINESTATS = 3,
+ SVGA3D_QUERYTYPE_OCCLUSIONPREDICATE = 4,
+ SVGA3D_QUERYTYPE_STREAMOUTPUTSTATS = 5,
+ SVGA3D_QUERYTYPE_STREAMOVERFLOWPREDICATE = 6,
+ SVGA3D_QUERYTYPE_OCCLUSION64 = 7,
+ SVGA3D_QUERYTYPE_DX10_MAX = 8,
+ SVGA3D_QUERYTYPE_SOSTATS_STREAM0 = 8,
+ SVGA3D_QUERYTYPE_SOSTATS_STREAM1 = 9,
+ SVGA3D_QUERYTYPE_SOSTATS_STREAM2 = 10,
+ SVGA3D_QUERYTYPE_SOSTATS_STREAM3 = 11,
+ SVGA3D_QUERYTYPE_SOP_STREAM0 = 12,
+ SVGA3D_QUERYTYPE_SOP_STREAM1 = 13,
+ SVGA3D_QUERYTYPE_SOP_STREAM2 = 14,
+ SVGA3D_QUERYTYPE_SOP_STREAM3 = 15,
+ SVGA3D_QUERYTYPE_MAX
+} SVGA3dQueryType;
+
+typedef uint8 SVGA3dQueryTypeUint8;
+
+#define SVGA3D_NUM_QUERYTYPE (SVGA3D_QUERYTYPE_MAX - SVGA3D_QUERYTYPE_MIN)
+
+/*
+ * This is the maximum number of queries per context that can be active
+ * simultaneously between a beginQuery and endQuery.
+ */
+#define SVGA3D_MAX_QUERY 64
+
+/*
+ * Query result buffer formats
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 samplesRendered;
+}
+#include "vmware_pack_end.h"
+SVGADXOcclusionQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 passed;
+}
+#include "vmware_pack_end.h"
+SVGADXEventQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint64 timestamp;
+}
+#include "vmware_pack_end.h"
+SVGADXTimestampQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint64 realFrequency;
+ uint32 disjoint;
+}
+#include "vmware_pack_end.h"
+SVGADXTimestampDisjointQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint64 inputAssemblyVertices;
+ uint64 inputAssemblyPrimitives;
+ uint64 vertexShaderInvocations;
+ uint64 geometryShaderInvocations;
+ uint64 geometryShaderPrimitives;
+ uint64 clipperInvocations;
+ uint64 clipperPrimitives;
+ uint64 pixelShaderInvocations;
+ uint64 hullShaderInvocations;
+ uint64 domainShaderInvocations;
+ uint64 computeShaderInvocations;
+}
+#include "vmware_pack_end.h"
+SVGADXPipelineStatisticsQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 anySamplesRendered;
+}
+#include "vmware_pack_end.h"
+SVGADXOcclusionPredicateQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint64 numPrimitivesWritten;
+ uint64 numPrimitivesRequired;
+}
+#include "vmware_pack_end.h"
+SVGADXStreamOutStatisticsQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 overflowed;
+}
+#include "vmware_pack_end.h"
+SVGADXStreamOutPredicateQueryResult;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint64 samplesRendered;
+}
+#include "vmware_pack_end.h"
+SVGADXOcclusion64QueryResult;
+
+/*
+ * SVGADXQueryResultUnion is not intended for use in the protocol, but is
+ * very helpful when working with queries generically.
+ */
+typedef
+#include "vmware_pack_begin.h"
+union SVGADXQueryResultUnion {
+ SVGADXOcclusionQueryResult occ;
+ SVGADXEventQueryResult event;
+ SVGADXTimestampQueryResult ts;
+ SVGADXTimestampDisjointQueryResult tsDisjoint;
+ SVGADXPipelineStatisticsQueryResult pipelineStats;
+ SVGADXOcclusionPredicateQueryResult occPred;
+ SVGADXStreamOutStatisticsQueryResult soStats;
+ SVGADXStreamOutPredicateQueryResult soPred;
+ SVGADXOcclusion64QueryResult occ64;
+}
+#include "vmware_pack_end.h"
+SVGADXQueryResultUnion;
+
+typedef enum {
+ SVGA3D_QUERYSTATE_PENDING = 0, /* Query is not finished yet */
+ SVGA3D_QUERYSTATE_SUCCEEDED = 1, /* Completed successfully */
+ SVGA3D_QUERYSTATE_FAILED = 2, /* Completed unsuccessfully */
+ SVGA3D_QUERYSTATE_NEW = 3, /* Never submitted (guest only) */
+} SVGA3dQueryState;
+
+typedef enum {
+ SVGA3D_WRITE_HOST_VRAM = 1,
+ SVGA3D_READ_HOST_VRAM = 2,
+} SVGA3dTransferType;
+
+#define SVGA3D_LOGICOP_INVALID 0
+#define SVGA3D_LOGICOP_MIN 1
+#define SVGA3D_LOGICOP_COPY 1
+#define SVGA3D_LOGICOP_NOT 2
+#define SVGA3D_LOGICOP_AND 3
+#define SVGA3D_LOGICOP_OR 4
+#define SVGA3D_LOGICOP_XOR 5
+#define SVGA3D_LOGICOP_NXOR 6
+#define SVGA3D_LOGICOP_ROP3 7
+#define SVGA3D_LOGICOP_MAX 8
+
+typedef uint16 SVGA3dLogicOp;
+
+#define SVGA3D_LOGICOP_ROP3_INVALID ((uint16) -1)
+#define SVGA3D_LOGICOP_ROP3_MIN 0
+#define SVGA3D_LOGICOP_ROP3_MAX 256
+
+typedef uint16 SVGA3dLogicOpRop3;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ union {
+ struct {
+ uint16 function; // SVGA3dFogFunction
+ uint8 type; // SVGA3dFogType
+ uint8 base; // SVGA3dFogBase
+ };
+ uint32 uintValue;
+ };
+}
+#include "vmware_pack_end.h"
+SVGA3dFogMode;
+
+/*
+ * Uniquely identify one image (a 1D/2D/3D array) from a surface. This
+ * is a surface ID as well as face/mipmap indices.
+ */
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dSurfaceImageId {
+ uint32 sid;
+ uint32 face;
+ uint32 mipmap;
+}
+#include "vmware_pack_end.h"
+SVGA3dSurfaceImageId;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGA3dSubSurfaceId {
+ uint32 sid;
+ uint32 subResourceId;
+}
+#include "vmware_pack_end.h"
+SVGA3dSubSurfaceId;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 width;
+ uint32 height;
+ uint32 depth;
+}
+#include "vmware_pack_end.h"
+SVGA3dSize;
+
+/*
+ * Guest-backed objects definitions.
+ */
+typedef enum {
+ SVGA_OTABLE_MOB = 0,
+ SVGA_OTABLE_MIN = 0,
+ SVGA_OTABLE_SURFACE = 1,
+ SVGA_OTABLE_CONTEXT = 2,
+ SVGA_OTABLE_SHADER = 3,
+ SVGA_OTABLE_SCREENTARGET = 4,
+
+ SVGA_OTABLE_DX9_MAX = 5,
+
+ SVGA_OTABLE_DXCONTEXT = 5,
+ SVGA_OTABLE_DX_MAX = 6,
+
+ SVGA_OTABLE_RESERVED1 = 6,
+ SVGA_OTABLE_RESERVED2 = 7,
+
+ /*
+ * Additions to this table need to be tied to HW-version features and
+ * checkpointed accordingly.
+ */
+ SVGA_OTABLE_DEVEL_MAX = 8,
+ SVGA_OTABLE_MAX = 8
+} SVGAOTableType;
+
+typedef enum {
+ SVGA_COTABLE_MIN = 0,
+ SVGA_COTABLE_RTVIEW = 0,
+ SVGA_COTABLE_DSVIEW = 1,
+ SVGA_COTABLE_SRVIEW = 2,
+ SVGA_COTABLE_ELEMENTLAYOUT = 3,
+ SVGA_COTABLE_BLENDSTATE = 4,
+ SVGA_COTABLE_DEPTHSTENCIL = 5,
+ SVGA_COTABLE_RASTERIZERSTATE = 6,
+ SVGA_COTABLE_SAMPLER = 7,
+ SVGA_COTABLE_STREAMOUTPUT = 8,
+ SVGA_COTABLE_DXQUERY = 9,
+ SVGA_COTABLE_DXSHADER = 10,
+ SVGA_COTABLE_DX10_MAX = 11,
+ SVGA_COTABLE_UAVIEW = 11,
+ SVGA_COTABLE_MAX = 12,
+} SVGACOTableType;
+
+/*
+ * The largest size (number of entries) allowed in a COTable.
+ */
+#define SVGA_COTABLE_MAX_IDS (MAX_UINT16 - 2)
+
+typedef enum SVGAMobFormat {
+ SVGA3D_MOBFMT_INVALID = SVGA3D_INVALID_ID,
+ SVGA3D_MOBFMT_PTDEPTH_0 = 0,
+ SVGA3D_MOBFMT_MIN = 0,
+ SVGA3D_MOBFMT_PTDEPTH_1 = 1,
+ SVGA3D_MOBFMT_PTDEPTH_2 = 2,
+ SVGA3D_MOBFMT_RANGE = 3,
+ SVGA3D_MOBFMT_PTDEPTH64_0 = 4,
+ SVGA3D_MOBFMT_PTDEPTH64_1 = 5,
+ SVGA3D_MOBFMT_PTDEPTH64_2 = 6,
+ SVGA3D_MOBFMT_PREDX_MAX = 7,
+ SVGA3D_MOBFMT_EMPTY = 7,
+ SVGA3D_MOBFMT_MAX,
+
+ /*
+ * This isn't actually used by the guest, but is a mob-format used
+ * internally by the SVGA device (and is therefore not binary compatible).
+ */
+ SVGA3D_MOBFMT_HB,
+} SVGAMobFormat;
+
+#define SVGA3D_MOB_EMPTY_BASE 1
+
+/*
+ * Multisample pattern types.
+ */
+
+typedef enum SVGA3dMSPattern {
+ SVGA3D_MS_PATTERN_NONE = 0,
+ SVGA3D_MS_PATTERN_MIN = 0,
+ SVGA3D_MS_PATTERN_STANDARD = 1,
+ SVGA3D_MS_PATTERN_CENTER = 2,
+ SVGA3D_MS_PATTERN_MAX = 3,
+} SVGA3dMSPattern;
+
+/*
+ * Precision settings for each sample.
+ */
+
+typedef enum SVGA3dMSQualityLevel {
+ SVGA3D_MS_QUALITY_NONE = 0,
+ SVGA3D_MS_QUALITY_MIN = 0,
+ SVGA3D_MS_QUALITY_FULL = 1,
+ SVGA3D_MS_QUALITY_MAX = 2,
+} SVGA3dMSQualityLevel;
+
+/*
+ * Screen Target Update Flags
+ */
+
+typedef enum SVGA3dFrameUpdateType {
+ SVGA3D_FRAME_END = 0,
+ SVGA3D_FRAME_PARTIAL = 1,
+ SVGA3D_FRAME_UNKNOWN = 2,
+ SVGA3D_FRAME_MAX = 3,
+} SVGA3dFrameUpdateType;
+
+#endif /* _SVGA3D_TYPES_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga_escape.h b/src/VBox/Devices/Graphics/vmsvga_include/svga_escape.h
new file mode 100644
index 00000000..acb41e28
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga_escape.h
@@ -0,0 +1,90 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2007-2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga_escape.h --
+ *
+ * Definitions for our own (vendor-specific) SVGA Escape commands.
+ */
+
+#ifndef _SVGA_ESCAPE_H_
+#define _SVGA_ESCAPE_H_
+
+
+/*
+ * Namespace IDs for the escape command
+ */
+
+#define SVGA_ESCAPE_NSID_VMWARE 0x00000000
+#define SVGA_ESCAPE_NSID_DEVEL 0xFFFFFFFF
+
+
+/*
+ * Within SVGA_ESCAPE_NSID_VMWARE, we multiplex commands according to
+ * the first DWORD of escape data (after the nsID and size). As a
+ * guideline we're using the high word and low word as a major and
+ * minor command number, respectively.
+ *
+ * Major command number allocation:
+ *
+ * 0000: Reserved
+ * 0001: SVGA_ESCAPE_VMWARE_LOG (svga_binary_logger.h)
+ * 0002: SVGA_ESCAPE_VMWARE_VIDEO (svga_overlay.h)
+ * 0003: SVGA_ESCAPE_VMWARE_HINT (svga_escape.h)
+ */
+
+#define SVGA_ESCAPE_VMWARE_MAJOR_MASK 0xFFFF0000
+
+
+/*
+ * SVGA Hint commands.
+ *
+ * These escapes let the SVGA driver provide optional information to
+ * he host about the state of the guest or guest applications. The
+ * host can use these hints to make user interface or performance
+ * decisions.
+ *
+ * Notes:
+ *
+ * - SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN is deprecated for guests
+ * that use the SVGA Screen Object extension. Instead of sending
+ * this escape, use the SVGA_SCREEN_FULLSCREEN_HINT flag on your
+ * Screen Object.
+ */
+
+#define SVGA_ESCAPE_VMWARE_HINT 0x00030000
+#define SVGA_ESCAPE_VMWARE_HINT_FULLSCREEN 0x00030001 /* Deprecated */
+
+typedef
+struct {
+ uint32 command;
+ uint32 fullscreen;
+ struct {
+ int32 x, y;
+ } monitorPosition;
+} SVGAEscapeHintFullscreen;
+
+#endif /* _SVGA_ESCAPE_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga_overlay.h b/src/VBox/Devices/Graphics/vmsvga_include/svga_overlay.h
new file mode 100644
index 00000000..e5385146
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga_overlay.h
@@ -0,0 +1,200 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2007-2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga_overlay.h --
+ *
+ * Definitions for video-overlay support.
+ */
+
+#ifndef _SVGA_OVERLAY_H_
+#define _SVGA_OVERLAY_H_
+
+#include "svga_reg.h"
+
+/*
+ * Video formats we support
+ */
+
+#define VMWARE_FOURCC_YV12 0x32315659 /* 'Y' 'V' '1' '2' */
+#define VMWARE_FOURCC_YUY2 0x32595559 /* 'Y' 'U' 'Y' '2' */
+#define VMWARE_FOURCC_UYVY 0x59565955 /* 'U' 'Y' 'V' 'Y' */
+
+typedef enum {
+ SVGA_OVERLAY_FORMAT_INVALID = 0,
+ SVGA_OVERLAY_FORMAT_YV12 = VMWARE_FOURCC_YV12,
+ SVGA_OVERLAY_FORMAT_YUY2 = VMWARE_FOURCC_YUY2,
+ SVGA_OVERLAY_FORMAT_UYVY = VMWARE_FOURCC_UYVY,
+} SVGAOverlayFormat;
+
+#define SVGA_VIDEO_COLORKEY_MASK 0x00ffffff
+
+#define SVGA_ESCAPE_VMWARE_VIDEO 0x00020000
+
+#define SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS 0x00020001
+ /* FIFO escape layout:
+ * Type, Stream Id, (Register Id, Value) pairs */
+
+#define SVGA_ESCAPE_VMWARE_VIDEO_FLUSH 0x00020002
+ /* FIFO escape layout:
+ * Type, Stream Id */
+
+typedef
+struct SVGAEscapeVideoSetRegs {
+ struct {
+ uint32 cmdType;
+ uint32 streamId;
+ } header;
+
+ /* May include zero or more items. */
+ struct {
+ uint32 registerId;
+ uint32 value;
+ } items[1];
+} SVGAEscapeVideoSetRegs;
+
+typedef
+struct SVGAEscapeVideoFlush {
+ uint32 cmdType;
+ uint32 streamId;
+} SVGAEscapeVideoFlush;
+
+
+/*
+ * Struct definitions for the video overlay commands built on
+ * SVGAFifoCmdEscape.
+ */
+typedef
+struct {
+ uint32 command;
+ uint32 overlay;
+} SVGAFifoEscapeCmdVideoBase;
+
+typedef
+struct {
+ SVGAFifoEscapeCmdVideoBase videoCmd;
+} SVGAFifoEscapeCmdVideoFlush;
+
+typedef
+struct {
+ SVGAFifoEscapeCmdVideoBase videoCmd;
+ struct {
+ uint32 regId;
+ uint32 value;
+ } items[1];
+} SVGAFifoEscapeCmdVideoSetRegs;
+
+typedef
+struct {
+ SVGAFifoEscapeCmdVideoBase videoCmd;
+ struct {
+ uint32 regId;
+ uint32 value;
+ } items[SVGA_VIDEO_NUM_REGS];
+} SVGAFifoEscapeCmdVideoSetAllRegs;
+
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * VMwareVideoGetAttributes --
+ *
+ * Computes the size, pitches and offsets for YUV frames.
+ *
+ * Results:
+ * TRUE on success; otherwise FALSE on failure.
+ *
+ * Side effects:
+ * Pitches and offsets for the given YUV frame are put in 'pitches'
+ * and 'offsets' respectively. They are both optional though.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static inline bool
+VMwareVideoGetAttributes(const SVGAOverlayFormat format, /* IN */
+ uint32 *width, /* IN / OUT */
+ uint32 *height, /* IN / OUT */
+ uint32 *size, /* OUT */
+ uint32 *pitches, /* OUT (optional) */
+ uint32 *offsets) /* OUT (optional) */
+{
+ int tmp;
+
+ *width = (*width + 1) & ~1;
+
+ if (offsets) {
+ offsets[0] = 0;
+ }
+
+ switch (format) {
+ case VMWARE_FOURCC_YV12:
+ *height = (*height + 1) & ~1;
+ *size = (*width) * (*height);
+
+ if (pitches) {
+ pitches[0] = *width;
+ }
+
+ if (offsets) {
+ offsets[1] = *size;
+ }
+
+ tmp = *width >> 1;
+
+ if (pitches) {
+ pitches[1] = pitches[2] = tmp;
+ }
+
+ tmp *= (*height >> 1);
+ *size += tmp;
+
+ if (offsets) {
+ offsets[2] = *size;
+ }
+
+ *size += tmp;
+ break;
+
+ case VMWARE_FOURCC_YUY2:
+ case VMWARE_FOURCC_UYVY:
+ *size = *width * 2;
+
+ if (pitches) {
+ pitches[0] = *size;
+ }
+
+ *size *= *height;
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+#endif /* _SVGA_OVERLAY_H_ */
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga_reg.h b/src/VBox/Devices/Graphics/vmsvga_include/svga_reg.h
new file mode 100644
index 00000000..37a5fe38
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga_reg.h
@@ -0,0 +1,2264 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 1998-2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+
+/*
+ * svga_reg.h --
+ *
+ * Virtual hardware definitions for the VMware SVGA II device.
+ */
+
+#ifndef _SVGA_REG_H_
+#define _SVGA_REG_H_
+
+#define INCLUDE_ALLOW_MODULE
+#define INCLUDE_ALLOW_USERLEVEL
+
+#define INCLUDE_ALLOW_VMCORE
+#include "includeCheck.h"
+
+#include "svga_types.h"
+
+/*
+ * SVGA_REG_ENABLE bit definitions.
+ */
+typedef enum {
+ SVGA_REG_ENABLE_DISABLE = 0,
+ SVGA_REG_ENABLE_ENABLE = (1 << 0),
+ SVGA_REG_ENABLE_HIDE = (1 << 1),
+} SvgaRegEnable;
+
+typedef uint32 SVGAMobId;
+
+/*
+ * Arbitrary and meaningless limits. Please ignore these when writing
+ * new drivers.
+ */
+#define SVGA_MAX_WIDTH 2560
+#define SVGA_MAX_HEIGHT 1600
+
+
+#define SVGA_MAX_BITS_PER_PIXEL 32
+#define SVGA_MAX_DEPTH 24
+#define SVGA_MAX_DISPLAYS 10
+#define SVGA_MAX_SCREEN_SIZE 8192
+#define SVGA_SCREEN_ROOT_LIMIT (SVGA_MAX_SCREEN_SIZE * SVGA_MAX_DISPLAYS)
+
+
+/*
+ * Legal values for the SVGA_REG_CURSOR_ON register in old-fashioned
+ * cursor bypass mode.
+ */
+#define SVGA_CURSOR_ON_HIDE 0x0
+#define SVGA_CURSOR_ON_SHOW 0x1
+
+/*
+ * Remove the cursor from the framebuffer
+ * because we need to see what's under it
+ */
+#define SVGA_CURSOR_ON_REMOVE_FROM_FB 0x2
+
+/* Put the cursor back in the framebuffer so the user can see it */
+#define SVGA_CURSOR_ON_RESTORE_TO_FB 0x3
+
+/*
+ * The maximum framebuffer size that can traced for guests unless the
+ * SVGA_CAP_GBOBJECTS is set in SVGA_REG_CAPABILITIES. In that case
+ * the full framebuffer can be traced independent of this limit.
+ */
+#define SVGA_FB_MAX_TRACEABLE_SIZE 0x1000000
+
+#define SVGA_MAX_PSEUDOCOLOR_DEPTH 8
+#define SVGA_MAX_PSEUDOCOLORS (1 << SVGA_MAX_PSEUDOCOLOR_DEPTH)
+#define SVGA_NUM_PALETTE_REGS (3 * SVGA_MAX_PSEUDOCOLORS)
+
+#define SVGA_MAGIC 0x900000UL
+#define SVGA_MAKE_ID(ver) (SVGA_MAGIC << 8 | (ver))
+
+/* Version 2 let the address of the frame buffer be unsigned on Win32 */
+#define SVGA_VERSION_2 2
+#define SVGA_ID_2 SVGA_MAKE_ID(SVGA_VERSION_2)
+
+/* Version 1 has new registers starting with SVGA_REG_CAPABILITIES so
+ PALETTE_BASE has moved */
+#define SVGA_VERSION_1 1
+#define SVGA_ID_1 SVGA_MAKE_ID(SVGA_VERSION_1)
+
+/* Version 0 is the initial version */
+#define SVGA_VERSION_0 0
+#define SVGA_ID_0 SVGA_MAKE_ID(SVGA_VERSION_0)
+
+/*
+ * "Invalid" value for all SVGA IDs.
+ * (Version ID, screen object ID, surface ID...)
+ */
+#define SVGA_ID_INVALID 0xFFFFFFFF
+
+/* Port offsets, relative to BAR0 */
+#define SVGA_INDEX_PORT 0x0
+#define SVGA_VALUE_PORT 0x1
+#define SVGA_BIOS_PORT 0x2
+#define SVGA_IRQSTATUS_PORT 0x8
+
+/*
+ * Interrupt source flags for IRQSTATUS_PORT and IRQMASK.
+ *
+ * Interrupts are only supported when the
+ * SVGA_CAP_IRQMASK capability is present.
+ */
+#define SVGA_IRQFLAG_ANY_FENCE 0x1 /* Any fence was passed */
+#define SVGA_IRQFLAG_FIFO_PROGRESS 0x2 /* Made forward progress in the FIFO */
+#define SVGA_IRQFLAG_FENCE_GOAL 0x4 /* SVGA_FIFO_FENCE_GOAL reached */
+#define SVGA_IRQFLAG_COMMAND_BUFFER 0x8 /* Command buffer completed */
+#define SVGA_IRQFLAG_ERROR 0x10 /* Error while processing commands */
+
+/*
+ * The byte-size is the size of the actual cursor data,
+ * possibly after expanding it to the current bit depth.
+ *
+ * 40K is sufficient memory for two 32-bit planes for a 64 x 64 cursor.
+ *
+ * The dimension limit is a bound on the maximum width or height.
+ */
+#define SVGA_MAX_CURSOR_CMD_BYTES (40 * 1024)
+#define SVGA_MAX_CURSOR_CMD_DIMENSION 1024
+
+/*
+ * Registers
+ */
+
+enum {
+ SVGA_REG_ID = 0,
+ SVGA_REG_ENABLE = 1,
+ SVGA_REG_WIDTH = 2,
+ SVGA_REG_HEIGHT = 3,
+ SVGA_REG_MAX_WIDTH = 4,
+ SVGA_REG_MAX_HEIGHT = 5,
+ SVGA_REG_DEPTH = 6,
+ SVGA_REG_BITS_PER_PIXEL = 7, /* Current bpp in the guest */
+ SVGA_REG_PSEUDOCOLOR = 8,
+ SVGA_REG_RED_MASK = 9,
+ SVGA_REG_GREEN_MASK = 10,
+ SVGA_REG_BLUE_MASK = 11,
+ SVGA_REG_BYTES_PER_LINE = 12,
+ SVGA_REG_FB_START = 13, /* (Deprecated) */
+ SVGA_REG_FB_OFFSET = 14,
+ SVGA_REG_VRAM_SIZE = 15,
+ SVGA_REG_FB_SIZE = 16,
+
+ /* ID 0 implementation only had the above registers, then the palette */
+ SVGA_REG_ID_0_TOP = 17,
+
+ SVGA_REG_CAPABILITIES = 17,
+ SVGA_REG_MEM_START = 18, /* (Deprecated) */
+ SVGA_REG_MEM_SIZE = 19,
+ SVGA_REG_CONFIG_DONE = 20, /* Set when memory area configured */
+ SVGA_REG_SYNC = 21, /* See "FIFO Synchronization Registers" */
+ SVGA_REG_BUSY = 22, /* See "FIFO Synchronization Registers" */
+ SVGA_REG_GUEST_ID = 23, /* (Deprecated) */
+ SVGA_REG_DEAD = 24, /* Drivers should never write this. */
+ SVGA_REG_CURSOR_X = 25, /* (Deprecated) */
+ SVGA_REG_CURSOR_Y = 26, /* (Deprecated) */
+ SVGA_REG_CURSOR_ON = 27, /* (Deprecated) */
+ SVGA_REG_HOST_BITS_PER_PIXEL = 28, /* (Deprecated) */
+ SVGA_REG_SCRATCH_SIZE = 29, /* Number of scratch registers */
+ SVGA_REG_MEM_REGS = 30, /* Number of FIFO registers */
+ SVGA_REG_NUM_DISPLAYS = 31, /* (Deprecated) */
+ SVGA_REG_PITCHLOCK = 32, /* Fixed pitch for all modes */
+ SVGA_REG_IRQMASK = 33, /* Interrupt mask */
+
+ /* Legacy multi-monitor support */
+ SVGA_REG_NUM_GUEST_DISPLAYS = 34,/* Number of guest displays in X/Y direction */
+ SVGA_REG_DISPLAY_ID = 35, /* Display ID for the following display attributes */
+ SVGA_REG_DISPLAY_IS_PRIMARY = 36,/* Whether this is a primary display */
+ SVGA_REG_DISPLAY_POSITION_X = 37,/* The display position x */
+ SVGA_REG_DISPLAY_POSITION_Y = 38,/* The display position y */
+ SVGA_REG_DISPLAY_WIDTH = 39, /* The display's width */
+ SVGA_REG_DISPLAY_HEIGHT = 40, /* The display's height */
+
+ /* See "Guest memory regions" below. */
+ SVGA_REG_GMR_ID = 41,
+ SVGA_REG_GMR_DESCRIPTOR = 42,
+ SVGA_REG_GMR_MAX_IDS = 43,
+ SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH = 44,
+
+ SVGA_REG_TRACES = 45, /* Enable trace-based updates even when FIFO is on */
+ SVGA_REG_GMRS_MAX_PAGES = 46, /* Maximum number of 4KB pages for all GMRs */
+ SVGA_REG_MEMORY_SIZE = 47, /* Total dedicated device memory excluding FIFO */
+ SVGA_REG_COMMAND_LOW = 48, /* Lower 32 bits and submits commands */
+ SVGA_REG_COMMAND_HIGH = 49, /* Upper 32 bits of command buffer PA */
+
+ /*
+ * Max primary memory.
+ * See SVGA_CAP_NO_BB_RESTRICTION.
+ */
+ SVGA_REG_MAX_PRIMARY_MEM = 50,
+ SVGA_REG_MAX_PRIMARY_BOUNDING_BOX_MEM = 50,
+
+ /*
+ * Legacy version of SVGA_REG_GBOBJECT_MEM_SIZE_KB for drivers that
+ * don't know how to convert to a 64-bit byte value without overflowing.
+ * (See SVGA_REG_GBOBJECT_MEM_SIZE_KB).
+ */
+ SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB = 51,
+
+ SVGA_REG_DEV_CAP = 52, /* Write dev cap index, read value */
+ SVGA_REG_CMD_PREPEND_LOW = 53,
+ SVGA_REG_CMD_PREPEND_HIGH = 54,
+ SVGA_REG_SCREENTARGET_MAX_WIDTH = 55,
+ SVGA_REG_SCREENTARGET_MAX_HEIGHT = 56,
+ SVGA_REG_MOB_MAX_SIZE = 57,
+ SVGA_REG_BLANK_SCREEN_TARGETS = 58,
+ SVGA_REG_CAP2 = 59,
+ SVGA_REG_DEVEL_CAP = 60,
+
+ /*
+ * Allow the guest to hint to the device which driver is running.
+ *
+ * This should not generally change device behavior, but might be
+ * convenient to work-around specific bugs in guest drivers.
+ *
+ * Drivers should first write their id value into SVGA_REG_GUEST_DRIVER_ID,
+ * and then fill out all of the version registers that they have defined.
+ *
+ * After the driver has written all of the registers, they should
+ * then write the value SVGA_REG_GUEST_DRIVER_ID_SUBMIT to the
+ * SVGA_REG_GUEST_DRIVER_ID register, to signal that they have finished.
+ *
+ * The SVGA_REG_GUEST_DRIVER_ID values are defined below by the
+ * SVGARegGuestDriverId enum.
+ *
+ * The SVGA_REG_GUEST_DRIVER_VERSION fields are driver-specific,
+ * but ideally should encode a monotonically increasing number that allows
+ * the device to perform inequality checks against ranges of driver versions.
+ */
+ SVGA_REG_GUEST_DRIVER_ID = 61,
+ SVGA_REG_GUEST_DRIVER_VERSION1 = 62,
+ SVGA_REG_GUEST_DRIVER_VERSION2 = 63,
+ SVGA_REG_GUEST_DRIVER_VERSION3 = 64,
+ SVGA_REG_CURSOR_MOBID = 65,
+ SVGA_REG_CURSOR_MAX_BYTE_SIZE = 66,
+ SVGA_REG_CURSOR_MAX_DIMENSION = 67,
+
+ SVGA_REG_FIFO_CAPS = 68,
+ SVGA_REG_FENCE = 69,
+
+ SVGA_REG_RESERVED1 = 70,
+ SVGA_REG_RESERVED2 = 71,
+ SVGA_REG_RESERVED3 = 72,
+ SVGA_REG_RESERVED4 = 73,
+ SVGA_REG_RESERVED5 = 74,
+ SVGA_REG_SCREENDMA = 75,
+
+ /*
+ * The maximum amount of guest-backed objects that the device can have
+ * resident at a time. Guest-drivers should keep their working set size
+ * below this limit for best performance.
+ *
+ * Note that this value is in kilobytes, and not bytes, because the actual
+ * number of bytes might be larger than can fit in a 32-bit register.
+ *
+ * PLEASE USE A 64-BIT VALUE WHEN CONVERTING THIS INTO BYTES.
+ * (See SVGA_REG_SUGGESTED_GBOBJECT_MEM_SIZE_KB).
+ */
+ SVGA_REG_GBOBJECT_MEM_SIZE_KB = 76,
+
+ SVGA_REG_TOP = 77, /* Must be 1 more than the last register */
+
+ SVGA_PALETTE_BASE = 1024, /* Base of SVGA color map */
+ /* Next 768 (== 256*3) registers exist for colormap */
+ SVGA_SCRATCH_BASE = SVGA_PALETTE_BASE + SVGA_NUM_PALETTE_REGS
+ /* Base of scratch registers */
+ /* Next reg[SVGA_REG_SCRATCH_SIZE] registers exist for scratch usage:
+ First 4 are reserved for VESA BIOS Extension; any remaining are for
+ the use of the current SVGA driver. */
+};
+
+
+/*
+ * Values for SVGA_REG_GUEST_DRIVER_ID.
+ */
+typedef enum SVGARegGuestDriverId {
+ SVGA_REG_GUEST_DRIVER_ID_UNKNOWN = 0,
+ SVGA_REG_GUEST_DRIVER_ID_WDDM = 1,
+ SVGA_REG_GUEST_DRIVER_ID_LINUX = 2,
+ SVGA_REG_GUEST_DRIVER_ID_MAX,
+
+ SVGA_REG_GUEST_DRIVER_ID_SUBMIT = MAX_UINT32,
+} SVGARegGuestDriverId;
+
+
+/*
+ * Guest memory regions (GMRs):
+ *
+ * This is a new memory mapping feature available in SVGA devices
+ * which have the SVGA_CAP_GMR bit set. Previously, there were two
+ * fixed memory regions available with which to share data between the
+ * device and the driver: the FIFO ('MEM') and the framebuffer. GMRs
+ * are our name for an extensible way of providing arbitrary DMA
+ * buffers for use between the driver and the SVGA device. They are a
+ * new alternative to framebuffer memory, usable for both 2D and 3D
+ * graphics operations.
+ *
+ * Since GMR mapping must be done synchronously with guest CPU
+ * execution, we use a new pair of SVGA registers:
+ *
+ * SVGA_REG_GMR_ID --
+ *
+ * Read/write.
+ * This register holds the 32-bit ID (a small positive integer)
+ * of a GMR to create, delete, or redefine. Writing this register
+ * has no side-effects.
+ *
+ * SVGA_REG_GMR_DESCRIPTOR --
+ *
+ * Write-only.
+ * Writing this register will create, delete, or redefine the GMR
+ * specified by the above ID register. If this register is zero,
+ * the GMR is deleted. Any pointers into this GMR (including those
+ * currently being processed by FIFO commands) will be
+ * synchronously invalidated.
+ *
+ * If this register is nonzero, it must be the physical page
+ * number (PPN) of a data structure which describes the physical
+ * layout of the memory region this GMR should describe. The
+ * descriptor structure will be read synchronously by the SVGA
+ * device when this register is written. The descriptor need not
+ * remain allocated for the lifetime of the GMR.
+ *
+ * The guest driver should write SVGA_REG_GMR_ID first, then
+ * SVGA_REG_GMR_DESCRIPTOR.
+ *
+ * SVGA_REG_GMR_MAX_IDS --
+ *
+ * Read-only.
+ * The SVGA device may choose to support a maximum number of
+ * user-defined GMR IDs. This register holds the number of supported
+ * IDs. (The maximum supported ID plus 1)
+ *
+ * SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH --
+ *
+ * Read-only.
+ * The SVGA device may choose to put a limit on the total number
+ * of SVGAGuestMemDescriptor structures it will read when defining
+ * a single GMR.
+ *
+ * The descriptor structure is an array of SVGAGuestMemDescriptor
+ * structures. Each structure may do one of three things:
+ *
+ * - Terminate the GMR descriptor list.
+ * (ppn==0, numPages==0)
+ *
+ * - Add a PPN or range of PPNs to the GMR's virtual address space.
+ * (ppn != 0, numPages != 0)
+ *
+ * - Provide the PPN of the next SVGAGuestMemDescriptor, in order to
+ * support multi-page GMR descriptor tables without forcing the
+ * driver to allocate physically contiguous memory.
+ * (ppn != 0, numPages == 0)
+ *
+ * Note that each physical page of SVGAGuestMemDescriptor structures
+ * can describe at least 2MB of guest memory. If the driver needs to
+ * use more than one page of descriptor structures, it must use one of
+ * its SVGAGuestMemDescriptors to point to an additional page. The
+ * device will never automatically cross a page boundary.
+ *
+ * Once the driver has described a GMR, it is immediately available
+ * for use via any FIFO command that uses an SVGAGuestPtr structure.
+ * These pointers include a GMR identifier plus an offset into that
+ * GMR.
+ *
+ * The driver must check the SVGA_CAP_GMR bit before using the GMR
+ * registers.
+ */
+
+/*
+ * Special GMR IDs, allowing SVGAGuestPtrs to point to framebuffer
+ * memory as well. In the future, these IDs could even be used to
+ * allow legacy memory regions to be redefined by the guest as GMRs.
+ *
+ * Using the guest framebuffer (GFB) at BAR1 for general purpose DMA
+ * is being phased out. Please try to use user-defined GMRs whenever
+ * possible.
+ */
+#define SVGA_GMR_NULL ((uint32) -1)
+#define SVGA_GMR_FRAMEBUFFER ((uint32) -2) /* Guest Framebuffer (GFB) */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGAGuestMemDescriptor {
+ uint32 ppn;
+ uint32 numPages;
+}
+#include "vmware_pack_end.h"
+SVGAGuestMemDescriptor;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGAGuestPtr {
+ uint32 gmrId;
+ uint32 offset;
+}
+#include "vmware_pack_end.h"
+SVGAGuestPtr;
+
+/*
+ * Register based command buffers --
+ *
+ * Provide an SVGA device interface that allows the guest to submit
+ * command buffers to the SVGA device through an SVGA device register.
+ * The metadata for each command buffer is contained in the
+ * SVGACBHeader structure along with the return status codes.
+ *
+ * The SVGA device supports command buffers if
+ * SVGA_CAP_COMMAND_BUFFERS is set in the device caps register. The
+ * fifo must be enabled for command buffers to be submitted.
+ *
+ * Command buffers are submitted when the guest writing the 64 byte
+ * aligned physical address into the SVGA_REG_COMMAND_LOW and
+ * SVGA_REG_COMMAND_HIGH. SVGA_REG_COMMAND_HIGH contains the upper 32
+ * bits of the physical address. SVGA_REG_COMMAND_LOW contains the
+ * lower 32 bits of the physical address, since the command buffer
+ * headers are required to be 64 byte aligned the lower 6 bits are
+ * used for the SVGACBContext value. Writing to SVGA_REG_COMMAND_LOW
+ * submits the command buffer to the device and queues it for
+ * execution. The SVGA device supports at least
+ * SVGA_CB_MAX_QUEUED_PER_CONTEXT command buffers that can be queued
+ * per context and if that limit is reached the device will write the
+ * status SVGA_CB_STATUS_QUEUE_FULL to the status value of the command
+ * buffer header synchronously and not raise any IRQs.
+ *
+ * It is invalid to submit a command buffer without a valid physical
+ * address and results are undefined.
+ *
+ * The device guarantees that command buffers of size SVGA_CB_MAX_SIZE
+ * will be supported. If a larger command buffer is submitted results
+ * are unspecified and the device will either complete the command
+ * buffer or return an error.
+ *
+ * The device guarantees that any individual command in a command
+ * buffer can be up to SVGA_CB_MAX_COMMAND_SIZE in size which is
+ * enough to fit a 64x64 color-cursor definition. If the command is
+ * too large the device is allowed to process the command or return an
+ * error.
+ *
+ * The device context is a special SVGACBContext that allows for
+ * synchronous register like accesses with the flexibility of
+ * commands. There is a different command set defined by
+ * SVGADeviceContextCmdId. The commands in each command buffer is not
+ * allowed to straddle physical pages.
+ *
+ * The offset field which is available starting with the
+ * SVGA_CAP_CMD_BUFFERS_2 cap bit can be set by the guest to bias the
+ * start of command processing into the buffer. If an error is
+ * encountered the errorOffset will still be relative to the specific
+ * PA, not biased by the offset. When the command buffer is finished
+ * the guest should not read the offset field as there is no guarantee
+ * what it will set to.
+ *
+ * When the SVGA_CAP_HP_CMD_QUEUE cap bit is set a new command queue
+ * SVGA_CB_CONTEXT_1 is available. Commands submitted to this queue
+ * will be executed as quickly as possible by the SVGA device
+ * potentially before already queued commands on SVGA_CB_CONTEXT_0.
+ * The SVGA device guarantees that any command buffers submitted to
+ * SVGA_CB_CONTEXT_0 will be executed after any _already_ submitted
+ * command buffers to SVGA_CB_CONTEXT_1.
+ */
+
+#define SVGA_CB_MAX_SIZE (512 * 1024) /* 512 KB */
+#define SVGA_CB_MAX_QUEUED_PER_CONTEXT 32
+#define SVGA_CB_MAX_COMMAND_SIZE (32 * 1024) /* 32 KB */
+
+#define SVGA_CB_CONTEXT_MASK 0x3f
+typedef enum {
+ SVGA_CB_CONTEXT_DEVICE = 0x3f,
+ SVGA_CB_CONTEXT_0 = 0x0,
+ SVGA_CB_CONTEXT_1 = 0x1, /* Supported with SVGA_CAP_HP_CMD_QUEUE */
+ SVGA_CB_CONTEXT_MAX = 0x2,
+} SVGACBContext;
+
+
+typedef enum {
+ /*
+ * The guest is supposed to write SVGA_CB_STATUS_NONE to the status
+ * field before submitting the command buffer header, the host will
+ * change the value when it is done with the command buffer.
+ */
+ SVGA_CB_STATUS_NONE = 0,
+
+ /*
+ * Written by the host when a command buffer completes successfully.
+ * The device raises an IRQ with SVGA_IRQFLAG_COMMAND_BUFFER unless
+ * the SVGA_CB_FLAG_NO_IRQ flag is set.
+ */
+ SVGA_CB_STATUS_COMPLETED = 1,
+
+ /*
+ * Written by the host synchronously with the command buffer
+ * submission to indicate the command buffer was not submitted. No
+ * IRQ is raised.
+ */
+ SVGA_CB_STATUS_QUEUE_FULL = 2,
+
+ /*
+ * Written by the host when an error was detected parsing a command
+ * in the command buffer, errorOffset is written to contain the
+ * offset to the first byte of the failing command. The device
+ * raises the IRQ with both SVGA_IRQFLAG_ERROR and
+ * SVGA_IRQFLAG_COMMAND_BUFFER. Some of the commands may have been
+ * processed.
+ */
+ SVGA_CB_STATUS_COMMAND_ERROR = 3,
+
+ /*
+ * Written by the host if there is an error parsing the command
+ * buffer header. The device raises the IRQ with both
+ * SVGA_IRQFLAG_ERROR and SVGA_IRQFLAG_COMMAND_BUFFER. The device
+ * did not processes any of the command buffer.
+ */
+ SVGA_CB_STATUS_CB_HEADER_ERROR = 4,
+
+ /*
+ * Written by the host if the guest requested the host to preempt
+ * the command buffer. The device will not raise any IRQs and the
+ * command buffer was not processed.
+ */
+ SVGA_CB_STATUS_PREEMPTED = 5,
+
+ /*
+ * Written by the host synchronously with the command buffer
+ * submission to indicate the the command buffer was not submitted
+ * due to an error. No IRQ is raised.
+ */
+ SVGA_CB_STATUS_SUBMISSION_ERROR = 6,
+
+ /*
+ * Written by the host when the host finished a
+ * SVGA_DC_CMD_ASYNC_STOP_QUEUE request for this command buffer
+ * queue. The offset of the first byte not processed is stored in
+ * the errorOffset field of the command buffer header. All guest
+ * visible side effects of commands till that point are guaranteed
+ * to be finished before this is written. The
+ * SVGA_IRQFLAG_COMMAND_BUFFER IRQ is raised as long as the
+ * SVGA_CB_FLAG_NO_IRQ is not set.
+ */
+ SVGA_CB_STATUS_PARTIAL_COMPLETE = 7,
+} SVGACBStatus;
+
+typedef enum {
+ SVGA_CB_FLAG_NONE = 0,
+ SVGA_CB_FLAG_NO_IRQ = 1 << 0,
+ SVGA_CB_FLAG_DX_CONTEXT = 1 << 1,
+ SVGA_CB_FLAG_MOB = 1 << 2,
+} SVGACBFlags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ volatile SVGACBStatus status; /* Modified by device. */
+ volatile uint32 errorOffset; /* Modified by device. */
+ uint64 id;
+ SVGACBFlags flags;
+ uint32 length;
+ union {
+ PA pa;
+ struct {
+ SVGAMobId mobid;
+ uint32 mobOffset;
+ } mob;
+ } ptr;
+ uint32 offset; /* Valid if CMD_BUFFERS_2 cap set, must be zero otherwise,
+ * modified by device.
+ */
+ uint32 dxContext; /* Valid if DX_CONTEXT flag set, must be zero otherwise */
+ uint32 mustBeZero[6];
+}
+#include "vmware_pack_end.h"
+SVGACBHeader;
+
+typedef enum {
+ SVGA_DC_CMD_NOP = 0,
+ SVGA_DC_CMD_START_STOP_CONTEXT = 1,
+ SVGA_DC_CMD_PREEMPT = 2,
+ SVGA_DC_CMD_START_QUEUE = 3, /* Requires SVGA_CAP_HP_CMD_QUEUE */
+ SVGA_DC_CMD_ASYNC_STOP_QUEUE = 4, /* Requires SVGA_CAP_HP_CMD_QUEUE */
+ SVGA_DC_CMD_EMPTY_CONTEXT_QUEUE = 5, /* Requires SVGA_CAP_HP_CMD_QUEUE */
+ SVGA_DC_CMD_MAX = 6,
+} SVGADeviceContextCmdId;
+
+/*
+ * Starts or stops both SVGA_CB_CONTEXT_0 and SVGA_CB_CONTEXT_1.
+ */
+
+typedef struct SVGADCCmdStartStop {
+ uint32 enable;
+ SVGACBContext context; /* Must be zero */
+} SVGADCCmdStartStop;
+
+/*
+ * SVGADCCmdPreempt --
+ *
+ * This command allows the guest to request that all command buffers
+ * on SVGA_CB_CONTEXT_0 be preempted that can be. After execution
+ * of this command all command buffers that were preempted will
+ * already have SVGA_CB_STATUS_PREEMPTED written into the status
+ * field. The device might still be processing a command buffer,
+ * assuming execution of it started before the preemption request was
+ * received. Specifying the ignoreIDZero flag to TRUE will cause the
+ * device to not preempt command buffers with the id field in the
+ * command buffer header set to zero.
+ */
+
+typedef struct SVGADCCmdPreempt {
+ SVGACBContext context; /* Must be zero */
+ uint32 ignoreIDZero;
+} SVGADCCmdPreempt;
+
+/*
+ * Starts the requested command buffer processing queue. Valid only
+ * if the SVGA_CAP_HP_CMD_QUEUE cap is set.
+ *
+ * For a command queue to be considered runnable it must be enabled
+ * and any corresponding higher priority queues must also be enabled.
+ * For example in order for command buffers to be processed on
+ * SVGA_CB_CONTEXT_0 both SVGA_CB_CONTEXT_0 and SVGA_CB_CONTEXT_1 must
+ * be enabled. But for commands to be runnable on SVGA_CB_CONTEXT_1
+ * only that queue must be enabled.
+ */
+
+typedef struct SVGADCCmdStartQueue {
+ SVGACBContext context;
+} SVGADCCmdStartQueue;
+
+/*
+ * Requests the SVGA device to stop processing the requested command
+ * buffer queue as soon as possible. The guest knows the stop has
+ * completed when one of the following happens.
+ *
+ * 1) A command buffer status of SVGA_CB_STATUS_PARTIAL_COMPLETE is returned
+ * 2) A command buffer error is encountered with would stop the queue
+ * regardless of the async stop request.
+ * 3) All command buffers that have been submitted complete successfully.
+ * 4) The stop completes synchronously if no command buffers are
+ * active on the queue when it is issued.
+ *
+ * If the command queue is not in a runnable state there is no
+ * guarentee this async stop will finish. For instance if the high
+ * priority queue is not enabled and a stop is requested on the low
+ * priority queue, the high priority queue must be reenabled to
+ * guarantee that the async stop will finish.
+ *
+ * This command along with SVGA_DC_CMD_EMPTY_CONTEXT_QUEUE can be used
+ * to implement mid command buffer preemption.
+ *
+ * Valid only if the SVGA_CAP_HP_CMD_QUEUE cap is set.
+ */
+
+typedef struct SVGADCCmdAsyncStopQueue {
+ SVGACBContext context;
+} SVGADCCmdAsyncStopQueue;
+
+/*
+ * Requests the SVGA device to throw away any full command buffers on
+ * the requested command queue that have not been started. For a
+ * driver to know which command buffers were thrown away a driver
+ * should only issue this command when the queue is stopped, for
+ * whatever reason.
+ */
+
+typedef struct SVGADCCmdEmptyQueue {
+ SVGACBContext context;
+} SVGADCCmdEmptyQueue;
+
+
+/*
+ * SVGAGMRImageFormat --
+ *
+ * This is a packed representation of the source 2D image format
+ * for a GMR-to-screen blit. Currently it is defined as an encoding
+ * of the screen's color depth and bits-per-pixel, however, 16 bits
+ * are reserved for future use to identify other encodings (such as
+ * RGBA or higher-precision images).
+ *
+ * Currently supported formats:
+ *
+ * bpp depth Format Name
+ * --- ----- -----------
+ * 32 24 32-bit BGRX
+ * 24 24 24-bit BGR
+ * 16 16 RGB 5-6-5
+ * 16 15 RGB 5-5-5
+ *
+ */
+
+typedef struct SVGAGMRImageFormat {
+ union {
+ struct {
+ uint32 bitsPerPixel : 8;
+ uint32 colorDepth : 8;
+ uint32 reserved : 16; /* Must be zero */
+ };
+
+ uint32 value;
+ };
+} SVGAGMRImageFormat;
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGAGuestImage {
+ SVGAGuestPtr ptr;
+
+ /*
+ * A note on interpretation of pitch: This value of pitch is the
+ * number of bytes between vertically adjacent image
+ * blocks. Normally this is the number of bytes between the first
+ * pixel of two adjacent scanlines. With compressed textures,
+ * however, this may represent the number of bytes between
+ * compression blocks rather than between rows of pixels.
+ *
+ * XXX: Compressed textures currently must be tightly packed in guest memory.
+ *
+ * If the image is 1-dimensional, pitch is ignored.
+ *
+ * If 'pitch' is zero, the SVGA3D device calculates a pitch value
+ * assuming each row of blocks is tightly packed.
+ */
+ uint32 pitch;
+}
+#include "vmware_pack_end.h"
+SVGAGuestImage;
+
+/*
+ * SVGAColorBGRX --
+ *
+ * A 24-bit color format (BGRX), which does not depend on the
+ * format of the legacy guest framebuffer (GFB) or the current
+ * GMRFB state.
+ */
+
+typedef struct SVGAColorBGRX {
+ union {
+ struct {
+ uint32 b : 8;
+ uint32 g : 8;
+ uint32 r : 8;
+ uint32 x : 8; /* Unused */
+ };
+
+ uint32 value;
+ };
+} SVGAColorBGRX;
+
+
+/*
+ * SVGASignedRect --
+ * SVGASignedPoint --
+ *
+ * Signed rectangle and point primitives. These are used by the new
+ * 2D primitives for drawing to Screen Objects, which can occupy a
+ * signed virtual coordinate space.
+ *
+ * SVGASignedRect specifies a half-open interval: the (left, top)
+ * pixel is part of the rectangle, but the (right, bottom) pixel is
+ * not.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ int32 left;
+ int32 top;
+ int32 right;
+ int32 bottom;
+}
+#include "vmware_pack_end.h"
+SVGASignedRect;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ int32 x;
+ int32 y;
+}
+#include "vmware_pack_end.h"
+SVGASignedPoint;
+
+
+/*
+ * SVGA Device Capabilities
+ *
+ * Note the holes in the bitfield. Missing bits have been deprecated,
+ * and must not be reused. Those capabilities will never be reported
+ * by new versions of the SVGA device.
+ *
+ * SVGA_CAP_IRQMASK --
+ * Provides device interrupts. Adds device register SVGA_REG_IRQMASK
+ * to set interrupt mask and direct I/O port SVGA_IRQSTATUS_PORT to
+ * set/clear pending interrupts.
+ *
+ * SVGA_CAP_GMR --
+ * Provides synchronous mapping of guest memory regions (GMR).
+ * Adds device registers SVGA_REG_GMR_ID, SVGA_REG_GMR_DESCRIPTOR,
+ * SVGA_REG_GMR_MAX_IDS, and SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH.
+ *
+ * SVGA_CAP_TRACES --
+ * Allows framebuffer trace-based updates even when FIFO is enabled.
+ * Adds device register SVGA_REG_TRACES.
+ *
+ * SVGA_CAP_GMR2 --
+ * Provides asynchronous commands to define and remap guest memory
+ * regions. Adds device registers SVGA_REG_GMRS_MAX_PAGES and
+ * SVGA_REG_MEMORY_SIZE.
+ *
+ * SVGA_CAP_SCREEN_OBJECT_2 --
+ * Allow screen object support, and require backing stores from the
+ * guest for each screen object.
+ *
+ * SVGA_CAP_COMMAND_BUFFERS --
+ * Enable register based command buffer submission.
+ *
+ * SVGA_CAP_DEAD1 --
+ * This cap was incorrectly used by old drivers and should not be
+ * reused.
+ *
+ * SVGA_CAP_CMD_BUFFERS_2 --
+ * Enable support for the prepend command buffer submision
+ * registers. SVGA_REG_CMD_PREPEND_LOW and
+ * SVGA_REG_CMD_PREPEND_HIGH.
+ *
+ * SVGA_CAP_GBOBJECTS --
+ * Enable guest-backed objects and surfaces.
+ *
+ * SVGA_CAP_DX --
+ * Enable support for DX commands, and command buffers in a mob.
+ *
+ * SVGA_CAP_HP_CMD_QUEUE --
+ * Enable support for the high priority command queue, and the
+ * ScreenCopy command.
+ *
+ * SVGA_CAP_NO_BB_RESTRICTION --
+ * Allow ScreenTargets to be defined without regard to the 32-bpp
+ * bounding-box memory restrictions. ie:
+ *
+ * The summed memory usage of all screens (assuming they were defined as
+ * 32-bpp) must always be less than the value of the
+ * SVGA_REG_MAX_PRIMARY_MEM register.
+ *
+ * If this cap is not present, the 32-bpp bounding box around all screens
+ * must additionally be under the value of the SVGA_REG_MAX_PRIMARY_MEM
+ * register.
+ *
+ * If the cap is present, the bounding box restriction is lifted (and only
+ * the screen-sum limit applies).
+ *
+ * (Note that this is a slight lie... there is still a sanity limit on any
+ * dimension of the topology to be less than SVGA_SCREEN_ROOT_LIMIT, even
+ * when SVGA_CAP_NO_BB_RESTRICTION is present, but that should be
+ * large enough to express any possible topology without holes between
+ * monitors.)
+ *
+ * SVGA_CAP_CAP2_REGISTER --
+ * If this cap is present, the SVGA_REG_CAP2 register is supported.
+ */
+
+#define SVGA_CAP_NONE 0x00000000
+#define SVGA_CAP_RECT_COPY 0x00000002
+#define SVGA_CAP_CURSOR 0x00000020
+#define SVGA_CAP_CURSOR_BYPASS 0x00000040
+#define SVGA_CAP_CURSOR_BYPASS_2 0x00000080
+#define SVGA_CAP_8BIT_EMULATION 0x00000100
+#define SVGA_CAP_ALPHA_CURSOR 0x00000200
+#define SVGA_CAP_3D 0x00004000
+#define SVGA_CAP_EXTENDED_FIFO 0x00008000
+#define SVGA_CAP_MULTIMON 0x00010000
+#define SVGA_CAP_PITCHLOCK 0x00020000
+#define SVGA_CAP_IRQMASK 0x00040000
+#define SVGA_CAP_DISPLAY_TOPOLOGY 0x00080000
+#define SVGA_CAP_GMR 0x00100000
+#define SVGA_CAP_TRACES 0x00200000
+#define SVGA_CAP_GMR2 0x00400000
+#define SVGA_CAP_SCREEN_OBJECT_2 0x00800000
+#define SVGA_CAP_COMMAND_BUFFERS 0x01000000
+#define SVGA_CAP_DEAD1 0x02000000
+#define SVGA_CAP_CMD_BUFFERS_2 0x04000000
+#define SVGA_CAP_GBOBJECTS 0x08000000
+#define SVGA_CAP_DX 0x10000000
+#define SVGA_CAP_HP_CMD_QUEUE 0x20000000
+#define SVGA_CAP_NO_BB_RESTRICTION 0x40000000
+#define SVGA_CAP_CAP2_REGISTER 0x80000000
+
+/*
+ * The SVGA_REG_CAP2 register is an additional set of SVGA capability bits.
+ *
+ * SVGA_CAP2_GROW_OTABLE --
+ * Allow the GrowOTable/DXGrowCOTable commands.
+ *
+ * SVGA_CAP2_INTRA_SURFACE_COPY --
+ * Allow the IntraSurfaceCopy command.
+ *
+ * SVGA_CAP2_DX2 --
+ * Allow the DefineGBSurface_v3, WholeSurfaceCopy, WriteZeroSurface, and
+ * HintZeroSurface commands, and the SVGA_REG_GUEST_DRIVER_ID register.
+ *
+ * SVGA_CAP2_GB_MEMSIZE_2 --
+ * Allow the SVGA_REG_GBOBJECT_MEM_SIZE_KB register.
+ *
+ * SVGA_CAP2_SCREENDMA_REG --
+ * Allow the SVGA_REG_SCREENDMA register.
+ *
+ * SVGA_CAP2_OTABLE_PTDEPTH_2 --
+ * Allow 2 level page tables for OTable commands.
+ *
+ * SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT --
+ * Allow a stretch blt from a non-multisampled surface to a multisampled
+ * surface.
+ *
+ * SVGA_CAP2_CURSOR_MOB --
+ * Allow the SVGA_REG_CURSOR_MOBID register.
+ *
+ * SVGA_CAP2_MSHINT --
+ * Allow the SVGA_REG_MSHINT register.
+ *
+ * SVGA_CAP2_DX3 --
+ * Allows the DefineGBSurface_v4 command.
+ * Allows the DXDefineDepthStencilView_v2, DXDefineStreamOutputWithMob,
+ * and DXBindStreamOutput commands if 3D is also available.
+ * Allows the DXPredStagingCopy and DXStagingCopy commands if SM41
+ * is also available.
+ *
+ * SVGA_CAP2_RESERVED --
+ * Reserve the last bit for extending the SVGA capabilities to some
+ * future mechanisms.
+ */
+#define SVGA_CAP2_NONE 0x00000000
+#define SVGA_CAP2_GROW_OTABLE 0x00000001
+#define SVGA_CAP2_INTRA_SURFACE_COPY 0x00000002
+#define SVGA_CAP2_DX2 0x00000004
+#define SVGA_CAP2_GB_MEMSIZE_2 0x00000008
+#define SVGA_CAP2_SCREENDMA_REG 0x00000010
+#define SVGA_CAP2_OTABLE_PTDEPTH_2 0x00000020
+#define SVGA_CAP2_NON_MS_TO_MS_STRETCHBLT 0x00000040
+#define SVGA_CAP2_CURSOR_MOB 0x00000080
+#define SVGA_CAP2_MSHINT 0x00000100
+#define SVGA_CAP2_DX3 0x00000400
+#define SVGA_CAP2_RESERVED 0x80000000
+
+
+/*
+ * The Guest can optionally read some SVGA device capabilities through
+ * the backdoor with command BDOOR_CMD_GET_SVGA_CAPABILITIES before
+ * the SVGA device is initialized. The type of capability the guest
+ * is requesting from the SVGABackdoorCapType enum should be placed in
+ * the upper 16 bits of the backdoor command id (ECX). On success the
+ * the value of EBX will be set to BDOOR_MAGIC and EAX will be set to
+ * the requested capability. If the command is not supported then EBX
+ * will be left unchanged and EAX will be set to -1. Because it is
+ * possible that -1 is the value of the requested cap the correct way
+ * to check if the command was successful is to check if EBX was changed
+ * to BDOOR_MAGIC making sure to initialize the register to something
+ * else first.
+ */
+
+typedef enum {
+ SVGABackdoorCapDeviceCaps = 0,
+ SVGABackdoorCapFifoCaps = 1,
+ SVGABackdoorCap3dHWVersion = 2,
+ SVGABackdoorCapDeviceCaps2 = 3,
+ SVGABackdoorCapDevelCaps = 4,
+ SVGABackdoorDevelRenderer = 5,
+ SVGABackdoorCapMax = 6,
+} SVGABackdoorCapType;
+
+
+/*
+ * FIFO register indices.
+ *
+ * The FIFO is a chunk of device memory mapped into guest physmem. It
+ * is always treated as 32-bit words.
+ *
+ * The guest driver gets to decide how to partition it between
+ * - FIFO registers (there are always at least 4, specifying where the
+ * following data area is and how much data it contains; there may be
+ * more registers following these, depending on the FIFO protocol
+ * version in use)
+ * - FIFO data, written by the guest and slurped out by the VMX.
+ * These indices are 32-bit word offsets into the FIFO.
+ */
+
+enum {
+ /*
+ * Block 1 (basic registers): The originally defined FIFO registers.
+ * These exist and are valid for all versions of the FIFO protocol.
+ */
+
+ SVGA_FIFO_MIN = 0,
+ SVGA_FIFO_MAX, /* The distance from MIN to MAX must be at least 10K */
+ SVGA_FIFO_NEXT_CMD,
+ SVGA_FIFO_STOP,
+
+ /*
+ * Block 2 (extended registers): Mandatory registers for the extended
+ * FIFO. These exist if the SVGA caps register includes
+ * SVGA_CAP_EXTENDED_FIFO; some of them are valid only if their
+ * associated capability bit is enabled.
+ *
+ * Note that when originally defined, SVGA_CAP_EXTENDED_FIFO implied
+ * support only for (FIFO registers) CAPABILITIES, FLAGS, and FENCE.
+ * This means that the guest has to test individually (in most cases
+ * using FIFO caps) for the presence of registers after this; the VMX
+ * can define "extended FIFO" to mean whatever it wants, and currently
+ * won't enable it unless there's room for that set and much more.
+ */
+
+ SVGA_FIFO_CAPABILITIES = 4,
+ SVGA_FIFO_FLAGS,
+ /* Valid with SVGA_FIFO_CAP_FENCE: */
+ SVGA_FIFO_FENCE,
+
+ /*
+ * Block 3a (optional extended registers): Additional registers for the
+ * extended FIFO, whose presence isn't actually implied by
+ * SVGA_CAP_EXTENDED_FIFO; these exist if SVGA_FIFO_MIN is high enough to
+ * leave room for them.
+ *
+ * These in block 3a, the VMX currently considers mandatory for the
+ * extended FIFO.
+ */
+
+ /* Valid if exists (i.e. if extended FIFO enabled): */
+ SVGA_FIFO_3D_HWVERSION, /* See SVGA3dHardwareVersion in svga3d_reg.h */
+ /* Valid with SVGA_FIFO_CAP_PITCHLOCK: */
+ SVGA_FIFO_PITCHLOCK,
+
+ /* Valid with SVGA_FIFO_CAP_CURSOR_BYPASS_3: */
+ SVGA_FIFO_CURSOR_ON, /* Cursor bypass 3 show/hide register */
+ SVGA_FIFO_CURSOR_X, /* Cursor bypass 3 x register */
+ SVGA_FIFO_CURSOR_Y, /* Cursor bypass 3 y register */
+ SVGA_FIFO_CURSOR_COUNT, /* Incremented when any of the other 3 change */
+ SVGA_FIFO_CURSOR_LAST_UPDATED,/* Last time the host updated the cursor */
+
+ /* Valid with SVGA_FIFO_CAP_RESERVE: */
+ SVGA_FIFO_RESERVED, /* Bytes past NEXT_CMD with real contents */
+
+ /*
+ * Valid with SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2:
+ *
+ * By default this is SVGA_ID_INVALID, to indicate that the cursor
+ * coordinates are specified relative to the virtual root. If this
+ * is set to a specific screen ID, cursor position is reinterpreted
+ * as a signed offset relative to that screen's origin.
+ */
+ SVGA_FIFO_CURSOR_SCREEN_ID,
+
+ /*
+ * Valid with SVGA_FIFO_CAP_DEAD
+ *
+ * An arbitrary value written by the host, drivers should not use it.
+ */
+ SVGA_FIFO_DEAD,
+
+ /*
+ * Valid with SVGA_FIFO_CAP_3D_HWVERSION_REVISED:
+ *
+ * Contains 3D HWVERSION (see SVGA3dHardwareVersion in svga3d_reg.h)
+ * on platforms that can enforce graphics resource limits.
+ */
+ SVGA_FIFO_3D_HWVERSION_REVISED,
+
+ /*
+ * XXX: The gap here, up until SVGA_FIFO_3D_CAPS, can be used for new
+ * registers, but this must be done carefully and with judicious use of
+ * capability bits, since comparisons based on SVGA_FIFO_MIN aren't
+ * enough to tell you whether the register exists: we've shipped drivers
+ * and products that used SVGA_FIFO_3D_CAPS but didn't know about some of
+ * the earlier ones. The actual order of introduction was:
+ * - PITCHLOCK
+ * - 3D_CAPS
+ * - CURSOR_* (cursor bypass 3)
+ * - RESERVED
+ * So, code that wants to know whether it can use any of the
+ * aforementioned registers, or anything else added after PITCHLOCK and
+ * before 3D_CAPS, needs to reason about something other than
+ * SVGA_FIFO_MIN.
+ */
+
+ /*
+ * 3D caps block space; valid with 3D hardware version >=
+ * SVGA3D_HWVERSION_WS6_B1.
+ */
+ SVGA_FIFO_3D_CAPS = 32,
+ SVGA_FIFO_3D_CAPS_LAST = 32 + 255,
+
+ /*
+ * End of VMX's current definition of "extended-FIFO registers".
+ * Registers before here are always enabled/disabled as a block; either
+ * the extended FIFO is enabled and includes all preceding registers, or
+ * it's disabled entirely.
+ *
+ * Block 3b (truly optional extended registers): Additional registers for
+ * the extended FIFO, which the VMX already knows how to enable and
+ * disable with correct granularity.
+ *
+ * Registers after here exist if and only if the guest SVGA driver
+ * sets SVGA_FIFO_MIN high enough to leave room for them.
+ */
+
+ /* Valid if register exists: */
+ SVGA_FIFO_GUEST_3D_HWVERSION, /* Guest driver's 3D version */
+ SVGA_FIFO_FENCE_GOAL, /* Matching target for SVGA_IRQFLAG_FENCE_GOAL */
+ SVGA_FIFO_BUSY, /* See "FIFO Synchronization Registers" */
+
+ /*
+ * Always keep this last. This defines the maximum number of
+ * registers we know about. At power-on, this value is placed in
+ * the SVGA_REG_MEM_REGS register, and we expect the guest driver
+ * to allocate this much space in FIFO memory for registers.
+ */
+ SVGA_FIFO_NUM_REGS
+};
+
+
+/*
+ * Definition of registers included in extended FIFO support.
+ *
+ * The guest SVGA driver gets to allocate the FIFO between registers
+ * and data. It must always allocate at least 4 registers, but old
+ * drivers stopped there.
+ *
+ * The VMX will enable extended FIFO support if and only if the guest
+ * left enough room for all registers defined as part of the mandatory
+ * set for the extended FIFO.
+ *
+ * Note that the guest drivers typically allocate the FIFO only at
+ * initialization time, not at mode switches, so it's likely that the
+ * number of FIFO registers won't change without a reboot.
+ *
+ * All registers less than this value are guaranteed to be present if
+ * svgaUser->fifo.extended is set. Any later registers must be tested
+ * individually for compatibility at each use (in the VMX).
+ *
+ * This value is used only by the VMX, so it can change without
+ * affecting driver compatibility; keep it that way?
+ */
+#define SVGA_FIFO_EXTENDED_MANDATORY_REGS (SVGA_FIFO_3D_CAPS_LAST + 1)
+
+
+/*
+ * FIFO Synchronization Registers
+ *
+ * SVGA_REG_SYNC --
+ *
+ * The SYNC register can be used by the guest driver to signal to the
+ * device that the guest driver is waiting for previously submitted
+ * commands to complete.
+ *
+ * When the guest driver writes to the SYNC register, the device sets
+ * the BUSY register to TRUE, and starts processing the submitted commands
+ * (if it was not already doing so). When all previously submitted
+ * commands are finished and the device is idle again, it sets the BUSY
+ * register back to FALSE. (If the guest driver submits new commands
+ * after writing the SYNC register, the new commands are not guaranteed
+ * to have been procesesd.)
+ *
+ * When guest drivers are submitting commands using the FIFO, the device
+ * periodically polls to check for new FIFO commands when idle, which may
+ * introduce a delay in command processing. If the guest-driver wants
+ * the commands to be processed quickly (which it typically does), it
+ * should write SYNC after each batch of commands is committed to the
+ * FIFO to immediately wake up the device. For even better performance,
+ * the guest can use the SVGA_FIFO_BUSY register to avoid these extra
+ * SYNC writes if the device is already active, using the technique known
+ * as "Ringing the Doorbell" (described below). (Note that command
+ * buffer submission implicitly wakes up the device, and so doesn't
+ * suffer from this problem.)
+ *
+ * The SYNC register can also be used in combination with BUSY to
+ * synchronously ensure that all SVGA commands are processed (with both
+ * the FIFO and command-buffers). To do this, the guest driver should
+ * write to SYNC, and then loop reading BUSY until BUSY returns FALSE.
+ * This technique is known as a "Legacy Sync".
+ *
+ * SVGA_REG_BUSY --
+ *
+ * This register is set to TRUE when SVGA_REG_SYNC is written,
+ * and is set back to FALSE when the device has finished processing
+ * all commands and is idle again.
+ *
+ * Every read from the BUSY reigster will block for an undefined
+ * amount of time (normally until the device finishes some interesting
+ * work unit), or the device is idle.
+ *
+ * Guest drivers can also do a partial Legacy Sync to check for some
+ * particular condition, for instance by stopping early when a fence
+ * passes before BUSY has been set back to FALSE. This is particularly
+ * useful if the guest-driver knows that it is blocked waiting on the
+ * device, because it will yield CPU time back to the host.
+ *
+ * SVGA_FIFO_BUSY --
+ *
+ * The SVGA_FIFO_BUSY register is a fast way for the guest driver to check
+ * whether the device is actively processing FIFO commands before writing
+ * the more expensive SYNC register.
+ *
+ * If this register reads as TRUE, the device is actively processing
+ * FIFO commands.
+ *
+ * If this register reads as FALSE, the device may not be actively
+ * processing commands, and the guest driver should try
+ * "Ringing the Doorbell".
+ *
+ * To Ring the Doorbell, the guest should:
+ *
+ * 1. Have already written their batch of commands into the FIFO.
+ * 2. Check if the SVGA_FIFO_BUSY register is available by reading
+ * SVGA_FIFO_MIN.
+ * 3. Read SVGA_FIFO_BUSY. If it reads as TRUE, the device is actively
+ * processing FIFO commands, and no further action is necessary.
+ * 4. If SVGA_FIFO_BUSY was FALSE, write TRUE to SVGA_REG_SYNC.
+ *
+ * For maximum performance, this procedure should be followed after
+ * every meaningful batch of commands has been written into the FIFO.
+ * (Normally when the underlying application signals it's finished a
+ * meaningful work unit by calling Flush.)
+ */
+
+
+/*
+ * FIFO Capabilities
+ *
+ * Fence -- Fence register and command are supported
+ * Accel Front -- Front buffer only commands are supported
+ * Pitch Lock -- Pitch lock register is supported
+ * Video -- SVGA Video overlay units are supported
+ * Escape -- Escape command is supported
+ *
+ * SVGA_FIFO_CAP_SCREEN_OBJECT --
+ *
+ * Provides dynamic multi-screen rendering, for improved Unity and
+ * multi-monitor modes. With Screen Object, the guest can
+ * dynamically create and destroy 'screens', which can represent
+ * Unity windows or virtual monitors. Screen Object also provides
+ * strong guarantees that DMA operations happen only when
+ * guest-initiated. Screen Object deprecates the BAR1 guest
+ * framebuffer (GFB) and all commands that work only with the GFB.
+ *
+ * New registers:
+ * FIFO_CURSOR_SCREEN_ID, VIDEO_DATA_GMRID, VIDEO_DST_SCREEN_ID
+ *
+ * New 2D commands:
+ * DEFINE_SCREEN, DESTROY_SCREEN, DEFINE_GMRFB, BLIT_GMRFB_TO_SCREEN,
+ * BLIT_SCREEN_TO_GMRFB, ANNOTATION_FILL, ANNOTATION_COPY
+ *
+ * New 3D commands:
+ * BLIT_SURFACE_TO_SCREEN
+ *
+ * New guarantees:
+ *
+ * - The host will not read or write guest memory, including the GFB,
+ * except when explicitly initiated by a DMA command.
+ *
+ * - All DMA, including legacy DMA like UPDATE and PRESENT_READBACK,
+ * is guaranteed to complete before any subsequent FENCEs.
+ *
+ * - All legacy commands which affect a Screen (UPDATE, PRESENT,
+ * PRESENT_READBACK) as well as new Screen blit commands will
+ * all behave consistently as blits, and memory will be read
+ * or written in FIFO order.
+ *
+ * For example, if you PRESENT from one SVGA3D surface to multiple
+ * places on the screen, the data copied will always be from the
+ * SVGA3D surface at the time the PRESENT was issued in the FIFO.
+ * This was not necessarily true on devices without Screen Object.
+ *
+ * This means that on devices that support Screen Object, the
+ * PRESENT_READBACK command should not be necessary unless you
+ * actually want to read back the results of 3D rendering into
+ * system memory. (And for that, the BLIT_SCREEN_TO_GMRFB
+ * command provides a strict superset of functionality.)
+ *
+ * - When a screen is resized, either using Screen Object commands or
+ * legacy multimon registers, its contents are preserved.
+ *
+ * SVGA_FIFO_CAP_GMR2 --
+ *
+ * Provides new commands to define and remap guest memory regions (GMR).
+ *
+ * New 2D commands:
+ * DEFINE_GMR2, REMAP_GMR2.
+ *
+ * SVGA_FIFO_CAP_3D_HWVERSION_REVISED --
+ *
+ * Indicates new register SVGA_FIFO_3D_HWVERSION_REVISED exists.
+ * This register may replace SVGA_FIFO_3D_HWVERSION on platforms
+ * that enforce graphics resource limits. This allows the platform
+ * to clear SVGA_FIFO_3D_HWVERSION and disable 3D in legacy guest
+ * drivers that do not limit their resources.
+ *
+ * Note this is an alias to SVGA_FIFO_CAP_GMR2 because these indicators
+ * are codependent (and thus we use a single capability bit).
+ *
+ * SVGA_FIFO_CAP_SCREEN_OBJECT_2 --
+ *
+ * Modifies the DEFINE_SCREEN command to include a guest provided
+ * backing store in GMR memory and the bytesPerLine for the backing
+ * store. This capability requires the use of a backing store when
+ * creating screen objects. However if SVGA_FIFO_CAP_SCREEN_OBJECT
+ * is present then backing stores are optional.
+ *
+ * SVGA_FIFO_CAP_DEAD --
+ *
+ * Drivers should not use this cap bit. This cap bit can not be
+ * reused since some hosts already expose it.
+ */
+
+#define SVGA_FIFO_CAP_NONE 0
+#define SVGA_FIFO_CAP_FENCE (1<<0)
+#define SVGA_FIFO_CAP_ACCELFRONT (1<<1)
+#define SVGA_FIFO_CAP_PITCHLOCK (1<<2)
+#define SVGA_FIFO_CAP_VIDEO (1<<3)
+#define SVGA_FIFO_CAP_CURSOR_BYPASS_3 (1<<4)
+#define SVGA_FIFO_CAP_ESCAPE (1<<5)
+#define SVGA_FIFO_CAP_RESERVE (1<<6)
+#define SVGA_FIFO_CAP_SCREEN_OBJECT (1<<7)
+#define SVGA_FIFO_CAP_GMR2 (1<<8)
+#define SVGA_FIFO_CAP_3D_HWVERSION_REVISED SVGA_FIFO_CAP_GMR2
+#define SVGA_FIFO_CAP_SCREEN_OBJECT_2 (1<<9)
+#define SVGA_FIFO_CAP_DEAD (1<<10)
+
+
+/*
+ * FIFO Flags
+ *
+ * Accel Front -- Driver should use front buffer only commands
+ */
+
+#define SVGA_FIFO_FLAG_NONE 0
+#define SVGA_FIFO_FLAG_ACCELFRONT (1<<0)
+#define SVGA_FIFO_FLAG_RESERVED (1<<31) /* Internal use only */
+
+/*
+ * FIFO reservation sentinel value
+ */
+
+#define SVGA_FIFO_RESERVED_UNKNOWN 0xffffffff
+
+
+/*
+ * ScreenDMA Register Values
+ */
+
+#define SVGA_SCREENDMA_REG_UNDEFINED 0
+#define SVGA_SCREENDMA_REG_NOT_PRESENT 1
+#define SVGA_SCREENDMA_REG_PRESENT 2
+#define SVGA_SCREENDMA_REG_MAX 3
+
+/*
+ * Video overlay support
+ */
+
+#define SVGA_NUM_OVERLAY_UNITS 32
+
+
+/*
+ * Video capabilities that the guest is currently using
+ */
+
+#define SVGA_VIDEO_FLAG_COLORKEY 0x0001
+
+
+/*
+ * Offsets for the video overlay registers
+ */
+
+enum {
+ SVGA_VIDEO_ENABLED = 0,
+ SVGA_VIDEO_FLAGS,
+ SVGA_VIDEO_DATA_OFFSET,
+ SVGA_VIDEO_FORMAT,
+ SVGA_VIDEO_COLORKEY,
+ SVGA_VIDEO_SIZE, /* Deprecated */
+ SVGA_VIDEO_WIDTH,
+ SVGA_VIDEO_HEIGHT,
+ SVGA_VIDEO_SRC_X,
+ SVGA_VIDEO_SRC_Y,
+ SVGA_VIDEO_SRC_WIDTH,
+ SVGA_VIDEO_SRC_HEIGHT,
+ SVGA_VIDEO_DST_X, /* Signed int32 */
+ SVGA_VIDEO_DST_Y, /* Signed int32 */
+ SVGA_VIDEO_DST_WIDTH,
+ SVGA_VIDEO_DST_HEIGHT,
+ SVGA_VIDEO_PITCH_1,
+ SVGA_VIDEO_PITCH_2,
+ SVGA_VIDEO_PITCH_3,
+ SVGA_VIDEO_DATA_GMRID, /* Optional, defaults to SVGA_GMR_FRAMEBUFFER */
+ SVGA_VIDEO_DST_SCREEN_ID, /* Optional, defaults to virtual coords */
+ /* (SVGA_ID_INVALID) */
+ SVGA_VIDEO_NUM_REGS
+};
+
+
+/*
+ * SVGA Overlay Units
+ *
+ * width and height relate to the entire source video frame.
+ * srcX, srcY, srcWidth and srcHeight represent subset of the source
+ * video frame to be displayed.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct SVGAOverlayUnit {
+ uint32 enabled;
+ uint32 flags;
+ uint32 dataOffset;
+ uint32 format;
+ uint32 colorKey;
+ uint32 size;
+ uint32 width;
+ uint32 height;
+ uint32 srcX;
+ uint32 srcY;
+ uint32 srcWidth;
+ uint32 srcHeight;
+ int32 dstX;
+ int32 dstY;
+ uint32 dstWidth;
+ uint32 dstHeight;
+ uint32 pitches[3];
+ uint32 dataGMRId;
+ uint32 dstScreenId;
+}
+#include "vmware_pack_end.h"
+SVGAOverlayUnit;
+
+
+/*
+ * Guest display topology
+ *
+ * XXX: This structure is not part of the SVGA device's interface, and
+ * doesn't really belong here.
+ */
+#define SVGA_INVALID_DISPLAY_ID ((uint32)-1)
+
+typedef struct SVGADisplayTopology {
+ uint16 displayId;
+ uint16 isPrimary;
+ uint32 width;
+ uint32 height;
+ uint32 positionX;
+ uint32 positionY;
+} SVGADisplayTopology;
+
+
+/*
+ * SVGAScreenObject --
+ *
+ * This is a new way to represent a guest's multi-monitor screen or
+ * Unity window. Screen objects are only supported if the
+ * SVGA_FIFO_CAP_SCREEN_OBJECT capability bit is set.
+ *
+ * If Screen Objects are supported, they can be used to fully
+ * replace the functionality provided by the framebuffer registers
+ * (SVGA_REG_WIDTH, HEIGHT, etc.) and by SVGA_CAP_DISPLAY_TOPOLOGY.
+ *
+ * The screen object is a struct with guaranteed binary
+ * compatibility. New flags can be added, and the struct may grow,
+ * but existing fields must retain their meaning.
+ *
+ * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2 are required fields of
+ * a SVGAGuestPtr that is used to back the screen contents. This
+ * memory must come from the GFB. The guest is not allowed to
+ * access the memory and doing so will have undefined results. The
+ * backing store is required to be page aligned and the size is
+ * padded to the next page boundry. The number of pages is:
+ * (bytesPerLine * size.width * 4 + PAGE_SIZE - 1) / PAGE_SIZE
+ *
+ * The pitch in the backingStore is required to be at least large
+ * enough to hold a 32bbp scanline. It is recommended that the
+ * driver pad bytesPerLine for a potential performance win.
+ *
+ * The cloneCount field is treated as a hint from the guest that
+ * the user wants this display to be cloned, countCount times. A
+ * value of zero means no cloning should happen.
+ */
+
+#define SVGA_SCREEN_MUST_BE_SET (1 << 0)
+#define SVGA_SCREEN_HAS_ROOT SVGA_SCREEN_MUST_BE_SET /* Deprecated */
+#define SVGA_SCREEN_IS_PRIMARY (1 << 1)
+#define SVGA_SCREEN_FULLSCREEN_HINT (1 << 2)
+
+/*
+ * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2. When the screen is
+ * deactivated the base layer is defined to lose all contents and
+ * become black. When a screen is deactivated the backing store is
+ * optional. When set backingPtr and bytesPerLine will be ignored.
+ */
+#define SVGA_SCREEN_DEACTIVATE (1 << 3)
+
+/*
+ * Added with SVGA_FIFO_CAP_SCREEN_OBJECT_2. When this flag is set
+ * the screen contents will be outputted as all black to the user
+ * though the base layer contents is preserved. The screen base layer
+ * can still be read and written to like normal though the no visible
+ * effect will be seen by the user. When the flag is changed the
+ * screen will be blanked or redrawn to the current contents as needed
+ * without any extra commands from the driver. This flag only has an
+ * effect when the screen is not deactivated.
+ */
+#define SVGA_SCREEN_BLANKING (1 << 4)
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 structSize; /* sizeof(SVGAScreenObject) */
+ uint32 id;
+ uint32 flags;
+ struct {
+ uint32 width;
+ uint32 height;
+ } size;
+ struct {
+ int32 x;
+ int32 y;
+ } root;
+
+ /*
+ * Added and required by SVGA_FIFO_CAP_SCREEN_OBJECT_2, optional
+ * with SVGA_FIFO_CAP_SCREEN_OBJECT.
+ */
+ SVGAGuestImage backingStore;
+
+ /*
+ * The cloneCount field is treated as a hint from the guest that
+ * the user wants this display to be cloned, cloneCount times.
+ *
+ * A value of zero means no cloning should happen.
+ */
+ uint32 cloneCount;
+}
+#include "vmware_pack_end.h"
+SVGAScreenObject;
+
+
+/*
+ * Commands in the command FIFO:
+ *
+ * Command IDs defined below are used for the traditional 2D FIFO
+ * communication (not all commands are available for all versions of the
+ * SVGA FIFO protocol).
+ *
+ * Note the holes in the command ID numbers: These commands have been
+ * deprecated, and the old IDs must not be reused.
+ *
+ * Command IDs from 1000 to 2999 are reserved for use by the SVGA3D
+ * protocol.
+ *
+ * Each command's parameters are described by the comments and
+ * structs below.
+ */
+
+typedef enum {
+ SVGA_CMD_INVALID_CMD = 0,
+ SVGA_CMD_UPDATE = 1,
+ SVGA_CMD_RECT_COPY = 3,
+ SVGA_CMD_RECT_ROP_COPY = 14,
+ SVGA_CMD_DEFINE_CURSOR = 19,
+ SVGA_CMD_DEFINE_ALPHA_CURSOR = 22,
+ SVGA_CMD_UPDATE_VERBOSE = 25,
+ SVGA_CMD_FRONT_ROP_FILL = 29,
+ SVGA_CMD_FENCE = 30,
+ SVGA_CMD_ESCAPE = 33,
+ SVGA_CMD_DEFINE_SCREEN = 34,
+ SVGA_CMD_DESTROY_SCREEN = 35,
+ SVGA_CMD_DEFINE_GMRFB = 36,
+ SVGA_CMD_BLIT_GMRFB_TO_SCREEN = 37,
+ SVGA_CMD_BLIT_SCREEN_TO_GMRFB = 38,
+ SVGA_CMD_ANNOTATION_FILL = 39,
+ SVGA_CMD_ANNOTATION_COPY = 40,
+ SVGA_CMD_DEFINE_GMR2 = 41,
+ SVGA_CMD_REMAP_GMR2 = 42,
+ SVGA_CMD_DEAD = 43,
+ SVGA_CMD_DEAD_2 = 44,
+ SVGA_CMD_NOP = 45,
+ SVGA_CMD_NOP_ERROR = 46,
+ SVGA_CMD_MAX
+} SVGAFifoCmdId;
+
+#define SVGA_CMD_MAX_DATASIZE (256 * 1024)
+#define SVGA_CMD_MAX_ARGS 64
+
+
+/*
+ * SVGA_CMD_UPDATE --
+ *
+ * This is a DMA transfer which copies from the Guest Framebuffer
+ * (GFB) at BAR1 + SVGA_REG_FB_OFFSET to any screens which
+ * intersect with the provided virtual rectangle.
+ *
+ * This command does not support using arbitrary guest memory as a
+ * data source- it only works with the pre-defined GFB memory.
+ * This command also does not support signed virtual coordinates.
+ * If you have defined screens (using SVGA_CMD_DEFINE_SCREEN) with
+ * negative root x/y coordinates, the negative portion of those
+ * screens will not be reachable by this command.
+ *
+ * This command is not necessary when using framebuffer
+ * traces. Traces are automatically enabled if the SVGA FIFO is
+ * disabled, and you may explicitly enable/disable traces using
+ * SVGA_REG_TRACES. With traces enabled, any write to the GFB will
+ * automatically act as if a subsequent SVGA_CMD_UPDATE was issued.
+ *
+ * Traces and SVGA_CMD_UPDATE are the only supported ways to render
+ * pseudocolor screen updates. The newer Screen Object commands
+ * only support true color formats.
+ *
+ * Availability:
+ * Always available.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 x;
+ uint32 y;
+ uint32 width;
+ uint32 height;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdUpdate;
+
+
+/*
+ * SVGA_CMD_RECT_COPY --
+ *
+ * Perform a rectangular DMA transfer from one area of the GFB to
+ * another, and copy the result to any screens which intersect it.
+ *
+ * Availability:
+ * SVGA_CAP_RECT_COPY
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 srcX;
+ uint32 srcY;
+ uint32 destX;
+ uint32 destY;
+ uint32 width;
+ uint32 height;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdRectCopy;
+
+
+/*
+ * SVGA_CMD_RECT_ROP_COPY --
+ *
+ * Perform a rectangular DMA transfer from one area of the GFB to
+ * another, and copy the result to any screens which intersect it.
+ * The value of ROP may only be SVGA_ROP_COPY, and this command is
+ * only supported for backwards compatibility reasons.
+ *
+ * Availability:
+ * SVGA_CAP_RECT_COPY
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 srcX;
+ uint32 srcY;
+ uint32 destX;
+ uint32 destY;
+ uint32 width;
+ uint32 height;
+ uint32 rop;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdRectRopCopy;
+
+
+/*
+ * SVGA_CMD_DEFINE_CURSOR --
+ *
+ * Provide a new cursor image, as an AND/XOR mask.
+ *
+ * The recommended way to position the cursor overlay is by using
+ * the SVGA_FIFO_CURSOR_* registers, supported by the
+ * SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability.
+ *
+ * Availability:
+ * SVGA_CAP_CURSOR
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 id; /* Reserved, must be zero. */
+ uint32 hotspotX;
+ uint32 hotspotY;
+ uint32 width;
+ uint32 height;
+ uint32 andMaskDepth; /* Value must be 1 or equal to BITS_PER_PIXEL */
+ uint32 xorMaskDepth; /* Value must be 1 or equal to BITS_PER_PIXEL */
+ /*
+ * Followed by scanline data for AND mask, then XOR mask.
+ * Each scanline is padded to a 32-bit boundary.
+ */
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdDefineCursor;
+
+
+/*
+ * SVGA_CMD_DEFINE_ALPHA_CURSOR --
+ *
+ * Provide a new cursor image, in 32-bit BGRA format.
+ *
+ * The recommended way to position the cursor overlay is by using
+ * the SVGA_FIFO_CURSOR_* registers, supported by the
+ * SVGA_FIFO_CAP_CURSOR_BYPASS_3 capability.
+ *
+ * Availability:
+ * SVGA_CAP_ALPHA_CURSOR
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 id; /* Reserved, must be zero. */
+ uint32 hotspotX;
+ uint32 hotspotY;
+ uint32 width;
+ uint32 height;
+ /* Followed by scanline data */
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdDefineAlphaCursor;
+
+
+/*
+ * Provide a new large cursor image, as an AND/XOR mask.
+ *
+ * Should only be used for CursorMob functionality
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 hotspotX;
+ uint32 hotspotY;
+ uint32 width;
+ uint32 height;
+ uint32 andMaskDepth;
+ uint32 xorMaskDepth;
+ /*
+ * Followed by scanline data for AND mask, then XOR mask.
+ * Each scanline is padded to a 32-bit boundary.
+ */
+}
+#include "vmware_pack_end.h"
+SVGAGBColorCursorHeader;
+
+
+/*
+ * Provide a new large cursor image, in 32-bit BGRA format.
+ *
+ * Should only be used for CursorMob functionality
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 hotspotX;
+ uint32 hotspotY;
+ uint32 width;
+ uint32 height;
+ /* Followed by scanline data */
+}
+#include "vmware_pack_end.h"
+SVGAGBAlphaCursorHeader;
+
+ /*
+ * Define the SVGA guest backed cursor types
+ */
+
+typedef enum {
+ SVGA_COLOR_CURSOR = 0,
+ SVGA_ALPHA_CURSOR = 1,
+} SVGAGBCursorType;
+
+/*
+ * Provide a new large cursor image.
+ *
+ * Should only be used for CursorMob functionality
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAGBCursorType type;
+ union {
+ SVGAGBColorCursorHeader colorHeader;
+ SVGAGBAlphaCursorHeader alphaHeader;
+ } header;
+ uint32 sizeInBytes;
+ /*
+ * Followed by the cursor data
+ */
+}
+#include "vmware_pack_end.h"
+SVGAGBCursorHeader;
+
+
+/*
+ * SVGA_CMD_UPDATE_VERBOSE --
+ *
+ * Just like SVGA_CMD_UPDATE, but also provide a per-rectangle
+ * 'reason' value, an opaque cookie which is used by internal
+ * debugging tools. Third party drivers should not use this
+ * command.
+ *
+ * Availability:
+ * SVGA_CAP_EXTENDED_FIFO
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 x;
+ uint32 y;
+ uint32 width;
+ uint32 height;
+ uint32 reason;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdUpdateVerbose;
+
+
+/*
+ * SVGA_CMD_FRONT_ROP_FILL --
+ *
+ * This is a hint which tells the SVGA device that the driver has
+ * just filled a rectangular region of the GFB with a solid
+ * color. Instead of reading these pixels from the GFB, the device
+ * can assume that they all equal 'color'. This is primarily used
+ * for remote desktop protocols.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_ACCELFRONT
+ */
+
+#define SVGA_ROP_COPY 0x03
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 color; /* In the same format as the GFB */
+ uint32 x;
+ uint32 y;
+ uint32 width;
+ uint32 height;
+ uint32 rop; /* Must be SVGA_ROP_COPY */
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdFrontRopFill;
+
+
+/*
+ * SVGA_CMD_FENCE --
+ *
+ * Insert a synchronization fence. When the SVGA device reaches
+ * this command, it will copy the 'fence' value into the
+ * SVGA_FIFO_FENCE register. It will also compare the fence against
+ * SVGA_FIFO_FENCE_GOAL. If the fence matches the goal and the
+ * SVGA_IRQFLAG_FENCE_GOAL interrupt is enabled, the device will
+ * raise this interrupt.
+ *
+ * Availability:
+ * SVGA_FIFO_FENCE for this command,
+ * SVGA_CAP_IRQMASK for SVGA_FIFO_FENCE_GOAL.
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 fence;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdFence;
+
+
+/*
+ * SVGA_CMD_ESCAPE --
+ *
+ * Send an extended or vendor-specific variable length command.
+ * This is used for video overlay, third party plugins, and
+ * internal debugging tools. See svga_escape.h
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_ESCAPE
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 nsid;
+ uint32 size;
+ /* followed by 'size' bytes of data */
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdEscape;
+
+
+/*
+ * SVGA_CMD_DEFINE_SCREEN --
+ *
+ * Define or redefine an SVGAScreenObject. See the description of
+ * SVGAScreenObject above. The video driver is responsible for
+ * generating new screen IDs. They should be small positive
+ * integers. The virtual device will have an implementation
+ * specific upper limit on the number of screen IDs
+ * supported. Drivers are responsible for recycling IDs. The first
+ * valid ID is zero.
+ *
+ * - Interaction with other registers:
+ *
+ * For backwards compatibility, when the GFB mode registers (WIDTH,
+ * HEIGHT, PITCHLOCK, BITS_PER_PIXEL) are modified, the SVGA device
+ * deletes all screens other than screen #0, and redefines screen
+ * #0 according to the specified mode. Drivers that use
+ * SVGA_CMD_DEFINE_SCREEN should destroy or redefine screen #0.
+ *
+ * If you use screen objects, do not use the legacy multi-mon
+ * registers (SVGA_REG_NUM_GUEST_DISPLAYS, SVGA_REG_DISPLAY_*).
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAScreenObject screen; /* Variable-length according to version */
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdDefineScreen;
+
+
+/*
+ * SVGA_CMD_DESTROY_SCREEN --
+ *
+ * Destroy an SVGAScreenObject. Its ID is immediately available for
+ * re-use.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 screenId;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdDestroyScreen;
+
+
+/*
+ * SVGA_CMD_DEFINE_GMRFB --
+ *
+ * This command sets a piece of SVGA device state called the
+ * Guest Memory Region Framebuffer, or GMRFB. The GMRFB is a
+ * piece of light-weight state which identifies the location and
+ * format of an image in guest memory or in BAR1. The GMRFB has
+ * an arbitrary size, and it doesn't need to match the geometry
+ * of the GFB or any screen object.
+ *
+ * The GMRFB can be redefined as often as you like. You could
+ * always use the same GMRFB, you could redefine it before
+ * rendering from a different guest screen, or you could even
+ * redefine it before every blit.
+ *
+ * There are multiple ways to use this command. The simplest way is
+ * to use it to move the framebuffer either to elsewhere in the GFB
+ * (BAR1) memory region, or to a user-defined GMR. This lets a
+ * driver use a framebuffer allocated entirely out of normal system
+ * memory, which we encourage.
+ *
+ * Another way to use this command is to set up a ring buffer of
+ * updates in GFB memory. If a driver wants to ensure that no
+ * frames are skipped by the SVGA device, it is important that the
+ * driver not modify the source data for a blit until the device is
+ * done processing the command. One efficient way to accomplish
+ * this is to use a ring of small DMA buffers. Each buffer is used
+ * for one blit, then we move on to the next buffer in the
+ * ring. The FENCE mechanism is used to protect each buffer from
+ * re-use until the device is finished with that buffer's
+ * corresponding blit.
+ *
+ * This command does not affect the meaning of SVGA_CMD_UPDATE.
+ * UPDATEs always occur from the legacy GFB memory area. This
+ * command has no support for pseudocolor GMRFBs. Currently only
+ * true-color 15, 16, and 24-bit depths are supported. Future
+ * devices may expose capabilities for additional framebuffer
+ * formats.
+ *
+ * The default GMRFB value is undefined. Drivers must always send
+ * this command at least once before performing any blit from the
+ * GMRFB.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAGuestPtr ptr;
+ uint32 bytesPerLine;
+ SVGAGMRImageFormat format;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdDefineGMRFB;
+
+
+/*
+ * SVGA_CMD_BLIT_GMRFB_TO_SCREEN --
+ *
+ * This is a guest-to-host blit. It performs a DMA operation to
+ * copy a rectangular region of pixels from the current GMRFB to
+ * a ScreenObject.
+ *
+ * The destination coordinate may be specified relative to a
+ * screen's origin. The provided screen ID must be valid.
+ *
+ * The SVGA device is guaranteed to finish reading from the GMRFB
+ * by the time any subsequent FENCE commands are reached.
+ *
+ * This command consumes an annotation. See the
+ * SVGA_CMD_ANNOTATION_* commands for details.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGASignedPoint srcOrigin;
+ SVGASignedRect destRect;
+ uint32 destScreenId;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdBlitGMRFBToScreen;
+
+
+/*
+ * SVGA_CMD_BLIT_SCREEN_TO_GMRFB --
+ *
+ * This is a host-to-guest blit. It performs a DMA operation to
+ * copy a rectangular region of pixels from a single ScreenObject
+ * back to the current GMRFB.
+ *
+ * The source coordinate is specified relative to a screen's
+ * origin. The provided screen ID must be valid. If any parameters
+ * are invalid, the resulting pixel values are undefined.
+ *
+ * The SVGA device is guaranteed to finish writing to the GMRFB by
+ * the time any subsequent FENCE commands are reached.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGASignedPoint destOrigin;
+ SVGASignedRect srcRect;
+ uint32 srcScreenId;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdBlitScreenToGMRFB;
+
+
+/*
+ * SVGA_CMD_ANNOTATION_FILL --
+ *
+ * The annotation commands have been deprecated, should not be used
+ * by new drivers. They used to provide performance hints to the SVGA
+ * device about the content of screen updates, but newer SVGA devices
+ * ignore these.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGAColorBGRX color;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdAnnotationFill;
+
+
+/*
+ * SVGA_CMD_ANNOTATION_COPY --
+ *
+ * The annotation commands have been deprecated, should not be used
+ * by new drivers. They used to provide performance hints to the SVGA
+ * device about the content of screen updates, but newer SVGA devices
+ * ignore these.
+ *
+ * Availability:
+ * SVGA_FIFO_CAP_SCREEN_OBJECT or SVGA_FIFO_CAP_SCREEN_OBJECT_2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ SVGASignedPoint srcOrigin;
+ uint32 srcScreenId;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdAnnotationCopy;
+
+
+/*
+ * SVGA_CMD_DEFINE_GMR2 --
+ *
+ * Define guest memory region v2. See the description of GMRs above.
+ *
+ * Availability:
+ * SVGA_CAP_GMR2
+ */
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 gmrId;
+ uint32 numPages;
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdDefineGMR2;
+
+
+/*
+ * SVGA_CMD_REMAP_GMR2 --
+ *
+ * Remap guest memory region v2. See the description of GMRs above.
+ *
+ * This command allows guest to modify a portion of an existing GMR by
+ * invalidating it or reassigning it to different guest physical pages.
+ * The pages are identified by physical page number (PPN). The pages
+ * are assumed to be pinned and valid for DMA operations.
+ *
+ * Description of command flags:
+ *
+ * SVGA_REMAP_GMR2_VIA_GMR: If enabled, references a PPN list in a GMR.
+ * The PPN list must not overlap with the remap region (this can be
+ * handled trivially by referencing a separate GMR). If flag is
+ * disabled, PPN list is appended to SVGARemapGMR command.
+ *
+ * SVGA_REMAP_GMR2_PPN64: If set, PPN list is in PPN64 format, otherwise
+ * it is in PPN32 format.
+ *
+ * SVGA_REMAP_GMR2_SINGLE_PPN: If set, PPN list contains a single entry.
+ * A single PPN can be used to invalidate a portion of a GMR or
+ * map it to to a single guest scratch page.
+ *
+ * Availability:
+ * SVGA_CAP_GMR2
+ */
+
+typedef enum {
+ SVGA_REMAP_GMR2_PPN32 = 0,
+ SVGA_REMAP_GMR2_VIA_GMR = (1 << 0),
+ SVGA_REMAP_GMR2_PPN64 = (1 << 1),
+ SVGA_REMAP_GMR2_SINGLE_PPN = (1 << 2),
+} SVGARemapGMR2Flags;
+
+typedef
+#include "vmware_pack_begin.h"
+struct {
+ uint32 gmrId;
+ SVGARemapGMR2Flags flags;
+ uint32 offsetPages; /* offset in pages to begin remap */
+ uint32 numPages; /* number of pages to remap */
+ /*
+ * Followed by additional data depending on SVGARemapGMR2Flags.
+ *
+ * If flag SVGA_REMAP_GMR2_VIA_GMR is set, single SVGAGuestPtr follows.
+ * Otherwise an array of page descriptors in PPN32 or PPN64 format
+ * (according to flag SVGA_REMAP_GMR2_PPN64) follows. If flag
+ * SVGA_REMAP_GMR2_SINGLE_PPN is set, array contains a single entry.
+ */
+}
+#include "vmware_pack_end.h"
+SVGAFifoCmdRemapGMR2;
+
+
+/*
+ * Size of SVGA device memory such as frame buffer and FIFO.
+ */
+#define SVGA_VRAM_MIN_SIZE (4 * 640 * 480) /* bytes */
+#define SVGA_VRAM_MIN_SIZE_3D (16 * 1024 * 1024)
+#define SVGA_VRAM_MAX_SIZE (128 * 1024 * 1024)
+#define SVGA_MEMORY_SIZE_MAX (1024 * 1024 * 1024)
+#define SVGA_FIFO_SIZE_MAX (2 * 1024 * 1024)
+#define SVGA_GRAPHICS_MEMORY_KB_MIN (32 * 1024)
+#define SVGA_GRAPHICS_MEMORY_KB_MAX_2GB (2 * 1024 * 1024)
+#define SVGA_GRAPHICS_MEMORY_KB_MAX_3GB (3 * 1024 * 1024)
+#define SVGA_GRAPHICS_MEMORY_KB_MAX_4GB (4 * 1024 * 1024)
+#define SVGA_GRAPHICS_MEMORY_KB_MAX_8GB (8 * 1024 * 1024)
+#define SVGA_GRAPHICS_MEMORY_KB_DEFAULT (256 * 1024)
+
+#define SVGA_VRAM_SIZE_W2K (64 * 1024 * 1024) /* 64 MB */
+
+#if defined(VMX86_SERVER)
+#define SVGA_VRAM_SIZE (4 * 1024 * 1024)
+#define SVGA_VRAM_SIZE_3D (64 * 1024 * 1024)
+#define SVGA_FIFO_SIZE (256 * 1024)
+#define SVGA_FIFO_SIZE_3D (516 * 1024)
+#define SVGA_MEMORY_SIZE_DEFAULT (160 * 1024 * 1024)
+#define SVGA_AUTODETECT_DEFAULT FALSE
+#else
+#define SVGA_VRAM_SIZE (16 * 1024 * 1024)
+#define SVGA_VRAM_SIZE_3D SVGA_VRAM_MAX_SIZE
+#define SVGA_FIFO_SIZE (2 * 1024 * 1024)
+#define SVGA_FIFO_SIZE_3D SVGA_FIFO_SIZE
+#define SVGA_MEMORY_SIZE_DEFAULT (768 * 1024 * 1024)
+#define SVGA_AUTODETECT_DEFAULT TRUE
+#endif
+
+#define SVGA_FIFO_SIZE_GBOBJECTS (256 * 1024)
+#define SVGA_VRAM_SIZE_GBOBJECTS (4 * 1024 * 1024)
+
+#define SVGA_PCI_REGS_PAGES (1)
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/svga_types.h b/src/VBox/Devices/Graphics/vmsvga_include/svga_types.h
new file mode 100644
index 00000000..c93c9372
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/svga_types.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/**********************************************************
+ * Copyright 2015 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ **********************************************************/
+#ifndef _SVGA_TYPES_H_
+#define _SVGA_TYPES_H_
+#include <iprt/types.h>
+
+typedef int64_t int64;
+typedef uint64_t uint64;
+
+typedef int32_t int32;
+typedef uint32_t uint32;
+
+typedef int16_t int16;
+typedef uint16_t uint16;
+
+typedef int8_t int8;
+typedef uint8_t uint8;
+
+typedef uint64 PA;
+typedef uint32 PPN;
+typedef uint32 PPN32;
+typedef uint64 PPN64;
+
+typedef bool Bool;
+
+#define MAX_UINT64 UINT64_MAX
+#define MAX_UINT32 UINT32_MAX
+#define MAX_UINT16 UINT16_MAX
+
+#define CONST64U(x) x##ULL
+
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_begin.h b/src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_begin.h
new file mode 100644
index 00000000..574e3554
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_begin.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2021-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+/* GCC complains that 'ISO C++ prohibits anonymous structs' when "-Wpedantic" is enabled. */
+#if RT_GNUC_PREREQ(4, 6)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wpedantic"
+# pragma clang diagnostic ignored "-Wc11-extensions"
+#endif
+
+#define VBOX_VMSVGA_HEADERS_BEING_INCLUDED
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_end.h b/src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_end.h
new file mode 100644
index 00000000..f21db8b9
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/vmsvga_headers_end.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2021-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#endif
+
+#if RT_GNUC_PREREQ(4, 6)
+# pragma GCC diagnostic pop
+#endif
+
+#ifndef VBOX_VMSVGA_HEADERS_BEING_INCLUDED
+# error vmsvga_headers_begin was not included.
+#else
+# undef VBOX_VMSVGA_HEADERS_BEING_INCLUDED
+#endif
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_begin.h b/src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_begin.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_begin.h
diff --git a/src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_end.h b/src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_end.h
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/src/VBox/Devices/Graphics/vmsvga_include/vmware_pack_end.h